Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wUHZE-0013eB-2c for pgsql-hackers@arkaria.postgresql.org; Tue, 02 Jun 2026 05:21:33 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wUHZD-00Cn6L-2D for pgsql-hackers@arkaria.postgresql.org; Tue, 02 Jun 2026 05:21:31 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wUHZC-00Cn6D-2l for pgsql-hackers@lists.postgresql.org; Tue, 02 Jun 2026 05:21:31 +0000 Received: from mail-lf1-x12f.google.com ([2a00:1450:4864:20::12f]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wUHZA-00000000h2P-1GLA for pgsql-hackers@lists.postgresql.org; Tue, 02 Jun 2026 05:21:29 +0000 Received: by mail-lf1-x12f.google.com with SMTP id 2adb3069b0e04-5aa5be9ab1aso3777081e87.1 for ; Mon, 01 Jun 2026 22:21:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1780377686; cv=none; d=google.com; s=arc-20240605; b=X8/RFR8+B9ZT/dgF93hXfRT8QtUXrN4RS3hE/9xBFjOod5xQatViBklMwLidUOaQP8 Y8wuLtmuabZg/z4C5HNb4VWIb5EDWXzZlyLy+5KkbchOU1rYojrbchQyJPB2jTP3KkPb TaNsbKvigEhEQ6y6onO6oAbQuuuUIEtbAHQXTbRFevcc9WnZAL+Jwr3DXzBKuIo6PNDp 2o4pJbRHd/6P858DvCbvcZui6WoRimRF7qs/TV8wR40BLlrrcDTduNRTVncHzpPtoPSY ocz3TR0A+dOpkskaVK6jN0b8bGvcFTcFoWDPFAYPcrfXIPKzfofoIcw3eAVx8bEUwmTH LjMg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=Az5bwCdTy4+rUR69RKcsd/wEXq8jbDJ+stShghKaN9o=; fh=bnuonNSfasbFiHBq7JcO1tPpDEmruVlFrg2bZb3RLlw=; b=OBpTc2gmU+hdW+hdUDsgWMxLX7CszgLGKHYmwbfRrSusksrK/uWM3p+oSiYCncHcaG oW0+0uSeGk8/gaUDbKLGTHKAd2LvnWENuAKqlSYSgDKM7cn03geSgW72PWVoBvIghOSK tuNIh/4g1rVruUqC/lkeXK0gFg7DbG3oDM5MHeS1Yo1aTLQMpo1kSbgkXhBP3BXeR600 uRSKyZpdWKh+razW3qxSLXxPp4teNAtb1LDs4xzOFpLycvQbKJ8UpW2KvSF7Ls9lVwWl L0i5PLH/AyeGagw0SQvMkY3n1GXWpOc8Nkln1TxL9IJsfiSu1Q+U/E2zNGJxOX5YiVHE 2UTQ==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1780377686; x=1780982486; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=Az5bwCdTy4+rUR69RKcsd/wEXq8jbDJ+stShghKaN9o=; b=NOFsWMgIsm9ZSFGFUmLevPOS2sKSCP1U0sieIj6Jhh/z+AsCzOTSmoMQFBTIGXTIyx MYEfq7/dR2qdhVAPwyBp7pe93Q3qHAt+aoe32V73Y+SzuLojMwWB8hhoREHLE9k8oGqD cj1bcRdkI6l5yltuM5PPKlTLlTbmq2SCsxhcSPvJO2ZefeEt0KtEDr1OBwlNexNs0l9T HI9SXyJzZkB5zp+bv6vMfQPEmnCQCyiBXIgK+M9hPkW5OEkrw6Fa4AKZ4HtBg4XKuhlN doiCq+PG0xYnIoBKsT1M5QNcMjyQMxArxXsU+xuo+uSV0R2/j8+ptw7ju/CIwGYRyDa0 YRfw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780377686; x=1780982486; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=Az5bwCdTy4+rUR69RKcsd/wEXq8jbDJ+stShghKaN9o=; b=sWxkjmSXRcM3xIBfqDQ/r/evzqL0XDCztDZ4UCvkQUZ6kzZFgM8Z8yiGUOhP3ThCBN g2VphTjlG+SL0BlvGErKKBp7L3j98WXlQCX6YUfCY32VDsDig8wxVlndS+JiqFV+yWuq Y5FGcbGiF5vL7dG3DAaLXC0/yHRGNmTjR0RX5B8VlDcLYU1iJc2oEKRnElIPeKTVcxJU ldLvexYVjAicQpMcyJABi+u+XKyxutO33hQuw1Bzw+5gTzE4LgSCN7j9O88pgPqz1v10 bHoTAxoJ7n8FGb8/MJB7ArMWO5bLLvX+HiYaCVbReyUeD4Sz2vEMdsVTg8pTjrz0uJJZ u/Sg== X-Forwarded-Encrypted: i=1; AFNElJ9EjvXLsQDkj6A+u+HHWWLEeg4Q6r9Xh392BnmtjjY77SSxZjQvN5pBrt8s3AfvdqckgaFA9OE3mxkFhaef@lists.postgresql.org X-Gm-Message-State: AOJu0Yy7C5C2Ty5bTis9KQJ7i8v1orNlfya2qjgbWjouuH3bmDRexu3H RVeSk8omUIRyzq5Fi/tVl4lq3D64y0CRLLnW/X1+br+rSrSSZFfpnmPHbeBxXPFB61SDaGseXDC M2EKNaMWvFocjsdHdJNbS3EVos86H4Hw= X-Gm-Gg: Acq92OHmMG2jSo1SlcO26KWT2EZh2EI+O5bGE+8J+4/YwTyAVRkqhBU97OSudRZb1Dw hJ9jpyKTyNhDT8lh8rIlhhZ1qh+AQvpbXsNAsTCFmotvY6z6sjCRiG5nbEBdfJqhq1hcHM+VWcy iiibGaBPZ835t/299tIFlLLuTvSn61bDlyok1Z6KwlqbeN/IPkwzsdNNYvwbTNVQVn0vJBbe8wN R8mkOi8yqA7vC0dlx8pkaZpZF7qpmyjalTjbuTpFfIjt0Y3gdmoHpgP6wYwVTslScP4gzNrnAH3 NWpQ2QmM5Z4kvXz2Gie01kJE1vjMT5w446+yjj3/2fRm3qpyjiLIFj6pdyI= X-Received: by 2002:a05:6512:2354:b0:5aa:6b98:7a9b with SMTP id 2adb3069b0e04-5aa6b987d3fmr2255379e87.6.1780377685430; Mon, 01 Jun 2026 22:21:25 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Dilip Kumar Date: Tue, 2 Jun 2026 10:51:03 +0530 X-Gm-Features: AVHnY4Kx9NYeM60OSaiOgurYJCPmOmi5XXRkFxrMRGffQGHZqUl74PFktagbc2I Message-ID: Subject: Re: Proposal: Conflict log history table for Logical Replication To: Nisha Moond Cc: Amit Kapila , vignesh C , Peter Smith , shveta malik , Masahiko Sawada , Bharath Rupireddy , PostgreSQL Hackers , shveta malik Content-Type: multipart/mixed; boundary="00000000000081af3806533e7b2b" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000081af3806533e7b2b Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, Jun 1, 2026 at 5:53=E2=80=AFPM Nisha Moond wrote: > > On Sat, May 30, 2026 at 1:42=E2=80=AFPM Dilip Kumar wrote: > > > > In latest patch set I have fixed Nisha's comments by creating a toast > > table, a separate patch > > (v43-0005-Create-conflict-log-table-after-inserting-subscr.patch) > > attached for creating conflict log table after inserting subscription > > row. > > > > Thanks for the patches. Please find a couple of comments on v43: > > 1) A non-superuser cannot read the new columns 'subconflictlogrelid' > and 'subconflictlogdest' from pg_subscription. > A comment in system_views.sql say: > "-- All columns of pg_subscription except subconninfo are publicly readab= le." > > I think we should grant public access to these new columns as well. > > 2) patch-002: conflict.c > > -const ConflictLogColumnDef ConflictLogSchema[] =3D { > +StaticAssertDecl(lengthof(ConflictLogDestNames) =3D=3D 3, > + "ConflictLogDestNames length mismatch"); > + > > Should we use "CONFLICT_LOG_DEST_ALL + 1" instead of the hard-coded value= "3"? > > The attached diff fixes the above items, along with a few indentation > and whitespace. Please consider it if you agree with the changes. PFA, latest version of patch Changes: 1. Includes Nisha's suggestion from v43_comments_nisha.patch 2. Include Amit's suggestion from v43-0001_amit.1.patch 3. Include Amit's suggestion: change GetLogDestination to GetConflictLogDest(), drop_sub_conflict_log_table() to drop_sub_conflict_log_table(), CONFLICTS_LOGGED_TO_FILE to CONFLICTS_LOGGED_TO_LOG and renamed IsConflictNamespace() to IsConflictLogTableNamespace() 4. Include Vignesh's fix Parallel_apply_failure.patch 5. Change conflict log table name back to conflict_log_table_ 6. Changed acl to exclude INSERT/UPDATE/USAGE as it was there in initial pa= tch 7. Merged 0002 to 0001 and 0004 to 0003 after review Open 1. Vignesh please rebase upgrade and \dRs+ page 2. I will review and update the doc patch accordingly --=20 Regards, Dilip Kumar Google --00000000000081af3806533e7b2b Content-Type: application/octet-stream; name="v44-0002-Implement-the-conflict-insertion-infrastructure-.patch" Content-Disposition: attachment; filename="v44-0002-Implement-the-conflict-insertion-infrastructure-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mpw6ul5m1 RnJvbSBmZjY0YTcwYmJkNThiYzE2MzJlZTg5MzQwZmIxNDY5OGUzYjVjNTUxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEaWxpcCBLdW1hciA8ZGlsaXBrdW1hcmJAZ29vZ2xlLmNvbT4K RGF0ZTogU2F0LCAzMCBNYXkgMjAyNiAxMzozNTowNCArMDUzMApTdWJqZWN0OiBbUEFUQ0ggdjQ0 IDIvMl0gSW1wbGVtZW50IHRoZSBjb25mbGljdCBpbnNlcnRpb24gaW5mcmFzdHJ1Y3R1cmUgZm9y CiB0aGUgY29uZmxpY3QgbG9nIHRhYmxlCgpUaGlzIHBhdGNoIGludHJvZHVjZXMgdGhlIGNvcmUg bG9naWMgdG8gcG9wdWxhdGUgdGhlIGNvbmZsaWN0IGxvZyB0YWJsZSB3aGVuZXZlcgphIGxvZ2lj YWwgcmVwbGljYXRpb24gY29uZmxpY3QgaXMgZGV0ZWN0ZWQuIEl0IGNhcHR1cmVzIHRoZSByZW1v dGUgdHJhbnNhY3Rpb24KZGV0YWlscyBhbG9uZyB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGxvY2Fs IHN0YXRlIGF0IHRoZSB0aW1lIG9mIHRoZSBjb25mbGljdC4KCkhhbmRsaW5nIE11bHRpLXJvdyBD b25mbGljdHM6IEEgc2luZ2xlIHJlbW90ZSB0dXBsZSBtYXkgY29uZmxpY3Qgd2l0aCBtdWx0aXBs ZQpsb2NhbCB0dXBsZXMgKGUuZy4sIGluIHRoZSBjYXNlIG9mIG11bHRpcGxlX3VuaXF1ZV9jb25m bGljdHMpLiBUbyBoYW5kbGUgdGhpcywKdGhlIGluZnJhc3RydWN0dXJlIGNyZWF0ZXMgYSBzaW5n bGUgcm93IGluIHRoZSBjb25mbGljdCBsb2cgdGFibGUgZm9yIGVhY2gKcmVtb3RlIHR1cGxlLiBU aGUgZGV0YWlscyBvZiBhbGwgY29uZmxpY3RpbmcgbG9jYWwgcm93cyBhcmUgYWdncmVnYXRlZCBp bnRvIGEKc2luZ2xlIEpTT04gYXJyYXkgaW4gdGhlIGxvY2FsX2NvbmZsaWN0cyBjb2x1bW4uCgpU aGUgSlNPTiBhcnJheSB1c2VzIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlZCBmb3JtYXQ6ClsgeyAi eGlkIjogIjEwMDEiLCAiY29tbWl0X3RzIjogIjIwMjUtMTItMjUgMTA6MDA6MDArMDU6MzAiLCAi b3JpZ2luIjogIm5vZGVfMSIsCiJrZXkiOiB7ImlkIjogMX0sICJ0dXBsZSI6IHsiaWQiOiAxLCAi dmFsIjogIm9sZF9kYXRhIn0gfSwgLi4uIF0KCkV4YW1wbGUgb2YgcXVlcnlpbmcgdGhlIHN0cnVj dHVyZWQgY29uZmxpY3QgZGF0YToKClNFTEVDVCByZW1vdGVfeGlkLCByZWxuYW1lLCByZW1vdGVf b3JpZ2luLCBsb2NhbF9jb25mbGljdHNbMV0gLT4+ICd4aWQnIEFTIGxvY2FsX3hpZCwKICAgICAg IGxvY2FsX2NvbmZsaWN0c1sxXSAtPj4gJ3R1cGxlJyBBUyBsb2NhbF90dXBsZQpGUk9NIHBnX2Nv bmZsaWN0LnBnX2NvbmZsaWN0X2xvZ19mb3Jfc3ViaWRfMTYzOTY7CgogcmVtb3RlX3hpZCB8IHJl bG5hbWUgIHwgcmVtb3RlX29yaWdpbiB8IGxvY2FsX3hpZCB8ICAgICBsb2NhbF90dXBsZQotLS0t LS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tLS0tCiAgICAgICAgNzYwIHwgdGVzdCAgICAgfCBwZ18xNjQwNiAgICAgIHwgNzcx ICAgICAgIHwgeyJhIjoxLCJiIjoxMH0KICAgICAgICA3NjUgfCBjb25mX3RhYiB8IHBnXzE2NDA2 ICAgICAgfCA3NzUgICAgICAgfCB7ImEiOjIsImIiOjIsImMiOjJ9Ci0tLQogLi4uL3JlcGxpY2F0 aW9uL2xvZ2ljYWwvYXBwbHlwYXJhbGxlbHdvcmtlci5jIHwgIDM3ICstCiBzcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL2NvbmZsaWN0LmMgICAgfCA2MDQgKysrKysrKysrKysrKysrKy0t CiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xhdW5jaGVyLmMgICAgfCAgIDEgKwog c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYyAgICAgIHwgIDEzICstCiBz cmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9jb25mbGljdC5oICAgICAgICAgICAgfCAgIDMgKwogc3Jj L2luY2x1ZGUvcmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmggICAgIHwgICA3ICsKIHNyYy90 ZXN0L3N1YnNjcmlwdGlvbi90LzAzMF9vcmlnaW4ucGwgICAgICAgICB8ICAgNCArLQogc3JjL3Rl c3Qvc3Vic2NyaXB0aW9uL3QvMDM1X2NvbmZsaWN0cy5wbCAgICAgIHwgIDQ3ICstCiA4IGZpbGVz IGNoYW5nZWQsIDY2NyBpbnNlcnRpb25zKCspLCA0OSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2FwcGx5cGFyYWxsZWx3b3JrZXIuYyBi L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvYXBwbHlwYXJhbGxlbHdvcmtlci5jCmlu ZGV4IDAxMmQ1NWU5ZDNkLi5kMjRjNTJkNDNlNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vbG9naWNhbC9hcHBseXBhcmFsbGVsd29ya2VyLmMKKysrIGIvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC9hcHBseXBhcmFsbGVsd29ya2VyLmMKQEAgLTk4Niw3ICs5ODYs NDIgQEAgUGFyYWxsZWxBcHBseVdvcmtlck1haW4oRGF0dW0gbWFpbl9hcmcpCiAKIAlzZXRfYXBw bHlfZXJyb3JfY29udGV4dF9vcmlnaW4ob3JpZ2lubmFtZSk7CiAKLQlMb2dpY2FsUGFyYWxsZWxB cHBseUxvb3AobXFoKTsKKwlQR19UUlkoKTsKKwl7CisJCUxvZ2ljYWxQYXJhbGxlbEFwcGx5TG9v cChtcWgpOworCX0KKwlQR19DQVRDSCgpOworCXsKKwkJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0 OworCQlFcnJvckRhdGEgKmVkYXRhOworCisJCS8qCisJCSAqIENvcHkgdGhlIEVycm9yRGF0YSBi ZWZvcmUgZG9pbmcgYW55IGZ1cnRoZXIgd29yay4gVGhlIGVycm9yIG1heQorCQkgKiBoYXZlIGJl ZW4gcmFpc2VkIHdoaWxlIHJ1bm5pbmcgdW5kZXIgRXJyb3JDb250ZXh0LCBzbyBzd2l0Y2ggdG8K KwkJICogYSBzYWZlIGNvbnRleHQgKFRvcE1lbW9yeUNvbnRleHQpIHRvIGF2b2lkIGFzc2VydGlv bnMgYW5kIGVuc3VyZQorCQkgKiB0aGUgZXJyb3IgZGF0YSBzdXJ2aXZlcyBzdWJzZXF1ZW50IGNs ZWFudXAuCisJCSAqLworCQlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKFRvcE1l bW9yeUNvbnRleHQpOworCQllZGF0YSA9IENvcHlFcnJvckRhdGEoKTsKKwkJTWVtb3J5Q29udGV4 dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCisJCUZsdXNoRXJyb3JTdGF0ZSgpOworCisJCS8qCisJ CSAqIFJlc2V0IHRoZSBvcmlnaW4gc3RhdGUgdG8gcHJldmVudCB0aGUgYWR2YW5jZW1lbnQgb2Yg b3JpZ2luCisJCSAqIHByb2dyZXNzIGlmIHdlIGZhaWwgdG8gYXBwbHkuIE90aGVyd2lzZSwgdGhp cyB3aWxsIHJlc3VsdCBpbgorCQkgKiB0cmFuc2FjdGlvbiBsb3NzIGFzIHRoYXQgdHJhbnNhY3Rp b24gd29uJ3QgYmUgc2VudCBhZ2FpbiBieSB0aGUKKwkJICogc2VydmVyLgorCQkgKi8KKwkJcmVw bG9yaWdpbl94YWN0X2NsZWFyKHRydWUpOworCisJCUFib3J0T3V0T2ZBbnlUcmFuc2FjdGlvbigp OworCQlQcm9jZXNzUGVuZGluZ0NvbmZsaWN0TG9nVHVwbGUoKTsKKworCQkvKiBSZS10aHJvdyB0 aGUgb3JpZ2luYWwgZXJyb3IuICovCisJCVJlVGhyb3dFcnJvcihlZGF0YSk7CisJfQorCVBHX0VO RF9UUlkoKTsKIAogCS8qCiAJICogVGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBtdXN0IG5vdCBn ZXQgaGVyZSBiZWNhdXNlIHRoZSBwYXJhbGxlbCBhcHBseQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9jb25mbGljdC5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9jb25mbGljdC5jCmluZGV4IDY1YTMyNTE5NGVkLi5iNjA2N2UzZjk1MyAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9jb25mbGljdC5jCisrKyBi L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvY29uZmxpY3QuYwpAQCAtMTYsNiArMTYs NyBAQAogCiAjaW5jbHVkZSAiYWNjZXNzL2NvbW1pdF90cy5oIgogI2luY2x1ZGUgImFjY2Vzcy9n ZW5hbS5oIgorI2luY2x1ZGUgImFjY2Vzcy9oZWFwYW0uaCIKICNpbmNsdWRlICJhY2Nlc3MvdGFi bGVhbS5oIgogI2luY2x1ZGUgImNhdGFsb2cvZGVwZW5kZW5jeS5oIgogI2luY2x1ZGUgImNhdGFs b2cvaGVhcC5oIgpAQCAtMjQsMTEgKzI1LDE1IEBACiAjaW5jbHVkZSAiY2F0YWxvZy90b2FzdGlu Zy5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuaCIKICNpbmNsdWRlICJl eGVjdXRvci9leGVjdXRvci5oIgorI2luY2x1ZGUgImZ1bmNhcGkuaCIKICNpbmNsdWRlICJwZ3N0 YXQuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9jb25mbGljdC5oIgogI2luY2x1ZGUgInJlcGxp Y2F0aW9uL3dvcmtlcl9pbnRlcm5hbC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgorI2lu Y2x1ZGUgInV0aWxzL2FycmF5LmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNs dWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKKyNpbmNsdWRlICJ1dGlscy9wZ19sc24uaCIKIAogLyoK ICAqIFN0cmluZyByZXByZXNlbnRhdGlvbnMgZm9yIHRoZSBzdXBwb3J0ZWQgY29uZmxpY3QgbG9n Z2luZyBkZXN0aW5hdGlvbnMuCkBAIC00Miw3ICs0Nyw2IEBAIGNvbnN0IGNoYXIgKmNvbnN0IENv bmZsaWN0TG9nRGVzdE5hbWVzW10gPSB7CiBTdGF0aWNBc3NlcnREZWNsKGxlbmd0aG9mKENvbmZs aWN0TG9nRGVzdE5hbWVzKSA9PSBDT05GTElDVF9MT0dfREVTVF9BTEwgKyAxLAogCQkJCSAiQ29u ZmxpY3RMb2dEZXN0TmFtZXMgbGVuZ3RoIG1pc21hdGNoIik7CiAKLQogLyogU3RydWN0dXJlIHRv IGhvbGQgbWV0YWRhdGEgZm9yIG9uZSBjb2x1bW4gb2YgdGhlIGNvbmZsaWN0IGxvZyB0YWJsZSAq LwogdHlwZWRlZiBzdHJ1Y3QgQ29uZmxpY3RMb2dDb2x1bW5EZWYKIHsKQEAgLTc0LDYgKzc4LDE4 IEBAIHN0YXRpYyBjb25zdCBDb25mbGljdExvZ0NvbHVtbkRlZiBDb25mbGljdExvZ1NjaGVtYVtd ID0gewogCiAjZGVmaW5lIE5VTV9DT05GTElDVF9BVFRSUyBsZW5ndGhvZihDb25mbGljdExvZ1Nj aGVtYSkKIAorLyogU2NoZW1hIGZvciB0aGUgZWxlbWVudHMgd2l0aGluIHRoZSAnbG9jYWxfY29u ZmxpY3RzJyBKU09OIGFycmF5ICovCitzdGF0aWMgY29uc3QgQ29uZmxpY3RMb2dDb2x1bW5EZWYg TG9jYWxDb25mbGljdFNjaGVtYVtdID0KK3sKKwl7IC5hdHRuYW1lID0gInhpZCIsICAgICAgIC5h dHR0eXBpZCA9IFhJRE9JRCB9LAorCXsgLmF0dG5hbWUgPSAiY29tbWl0X3RzIiwgLmF0dHR5cGlk ID0gVElNRVNUQU1QVFpPSUQgfSwKKwl7IC5hdHRuYW1lID0gIm9yaWdpbiIsICAgIC5hdHR0eXBp ZCA9IFRFWFRPSUQgfSwKKwl7IC5hdHRuYW1lID0gImtleSIsICAgICAgIC5hdHR0eXBpZCA9IEpT T05PSUQgfSwKKwl7IC5hdHRuYW1lID0gInR1cGxlIiwgICAgIC5hdHR0eXBpZCA9IEpTT05PSUQg fQorfTsKKworI2RlZmluZSBOVU1fTE9DQUxfQ09ORkxJQ1RfQVRUUlMgbGVuZ3Rob2YoTG9jYWxD b25mbGljdFNjaGVtYSkKKwogc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IENvbmZsaWN0VHlwZU5h bWVzW10gPSB7CiAJW0NUX0lOU0VSVF9FWElTVFNdID0gImluc2VydF9leGlzdHMiLAogCVtDVF9V UERBVEVfT1JJR0lOX0RJRkZFUlNdID0gInVwZGF0ZV9vcmlnaW5fZGlmZmVycyIsCkBAIC0xMDEs OCArMTE3LDI3IEBAIHN0YXRpYyB2b2lkIGdldF90dXBsZV9kZXNjKEVTdGF0ZSAqZXN0YXRlLCBS ZXN1bHRSZWxJbmZvICpyZWxpbmZvLAogCQkJCQkJICAgVHVwbGVUYWJsZVNsb3QgKnJlbW90ZXNs b3QsIGNoYXIgKipyZW1vdGVfZGVzYywKIAkJCQkJCSAgIFR1cGxlVGFibGVTbG90ICpzZWFyY2hz bG90LCBjaGFyICoqc2VhcmNoX2Rlc2MsCiAJCQkJCQkgICBPaWQgaW5kZXhvaWQpOworc3RhdGlj IHZvaWQgYnVpbGRfaW5kZXhfZGF0dW1zX2Zyb21fc2xvdChFU3RhdGUgKmVzdGF0ZSwgUmVsYXRp b24gbG9jYWxyZWwsCisJCQkJCQkJCQkJIFR1cGxlVGFibGVTbG90ICpzbG90LAorCQkJCQkJCQkJ CSBSZWxhdGlvbiBpbmRleERlc2MsIERhdHVtICp2YWx1ZXMsCisJCQkJCQkJCQkJIGJvb2wgKmlz bnVsbCk7CiBzdGF0aWMgY2hhciAqYnVpbGRfaW5kZXhfdmFsdWVfZGVzYyhFU3RhdGUgKmVzdGF0 ZSwgUmVsYXRpb24gbG9jYWxyZWwsCiAJCQkJCQkJCQlUdXBsZVRhYmxlU2xvdCAqc2xvdCwgT2lk IGluZGV4b2lkKTsKK3N0YXRpYyBEYXR1bSB0dXBsZV90YWJsZV9zbG90X3RvX2pzb25fZGF0dW0o VHVwbGVUYWJsZVNsb3QgKnNsb3QpOworc3RhdGljIERhdHVtIHR1cGxlX3RhYmxlX3Nsb3RfdG9f aW5kZXh0dXBfanNvbihFU3RhdGUgKmVzdGF0ZSwKKwkJCQkJCQkJCQkJICAgUmVsYXRpb24gbG9j YWxyZWwsCisJCQkJCQkJCQkJCSAgIE9pZCByZXBsaWNhX2luZGV4LAorCQkJCQkJCQkJCQkgICBU dXBsZVRhYmxlU2xvdCAqc2xvdCk7CitzdGF0aWMgVHVwbGVEZXNjIGJ1aWxkX2NvbmZsaWN0X3R1 cGxlZGVzYyh2b2lkKTsKK3N0YXRpYyBEYXR1bSBidWlsZF9sb2NhbF9jb25mbGljdHNfanNvbl9h cnJheShFU3RhdGUgKmVzdGF0ZSwgUmVsYXRpb24gcmVsLAorCQkJCQkJCQkJCQkgIENvbmZsaWN0 VHlwZSBjb25mbGljdF90eXBlLAorCQkJCQkJCQkJCQkgIExpc3QgKmNvbmZsaWN0dHVwbGVzKTsK K3N0YXRpYyB2b2lkIHByZXBhcmVfY29uZmxpY3RfbG9nX3R1cGxlKEVTdGF0ZSAqZXN0YXRlLCBS ZWxhdGlvbiByZWwsCisJCQkJCQkJCQkgICBSZWxhdGlvbiBjb25mbGljdGxvZ3JlbCwKKwkJCQkJ CQkJCSAgIENvbmZsaWN0VHlwZSBjb25mbGljdF90eXBlLAorCQkJCQkJCQkJICAgVHVwbGVUYWJs ZVNsb3QgKnNlYXJjaHNsb3QsCisJCQkJCQkJCQkgICBMaXN0ICpjb25mbGljdHR1cGxlcywKKwkJ CQkJCQkJCSAgIFR1cGxlVGFibGVTbG90ICpyZW1vdGVzbG90KTsKIAogLyoKICAqIEJ1aWxkcyB0 aGUgVHVwbGVEZXNjIGZvciB0aGUgY29uZmxpY3QgbG9nIHRhYmxlLgpAQCAtMjgzLDMwICszMTgs MTI5IEBAIFJlcG9ydEFwcGx5Q29uZmxpY3QoRVN0YXRlICplc3RhdGUsIFJlc3VsdFJlbEluZm8g KnJlbGluZm8sIGludCBlbGV2ZWwsCiAJCQkJCUNvbmZsaWN0VHlwZSB0eXBlLCBUdXBsZVRhYmxl U2xvdCAqc2VhcmNoc2xvdCwKIAkJCQkJVHVwbGVUYWJsZVNsb3QgKnJlbW90ZXNsb3QsIExpc3Qg KmNvbmZsaWN0dHVwbGVzKQogewotCVJlbGF0aW9uCWxvY2FscmVsID0gcmVsaW5mby0+cmlfUmVs YXRpb25EZXNjOwotCVN0cmluZ0luZm9EYXRhIGVycl9kZXRhaWw7CisJUmVsYXRpb24JCWxvY2Fs cmVsID0gcmVsaW5mby0+cmlfUmVsYXRpb25EZXNjOworCUNvbmZsaWN0TG9nRGVzdAlkZXN0Owor CVJlbGF0aW9uCQljb25mbGljdGxvZ3JlbDsKKwlib29sCQkJbG9nX2Rlc3RfdGFibGU7CisJYm9v bCAJCQlsb2dfZGVzdF9sb2dmaWxlOwogCi0JaW5pdFN0cmluZ0luZm8oJmVycl9kZXRhaWwpOwor CXBnc3RhdF9yZXBvcnRfc3Vic2NyaXB0aW9uX2NvbmZsaWN0KE15U3Vic2NyaXB0aW9uLT5vaWQs IHR5cGUpOwogCi0JLyogRm9ybSBlcnJkZXRhaWwgbWVzc2FnZSBieSBjb21iaW5pbmcgY29uZmxp Y3RpbmcgdHVwbGVzIGluZm9ybWF0aW9uLiAqLwotCWZvcmVhY2hfcHRyKENvbmZsaWN0VHVwbGVJ bmZvLCBjb25mbGljdHR1cGxlLCBjb25mbGljdHR1cGxlcykKLQkJZXJyZGV0YWlsX2FwcGx5X2Nv bmZsaWN0KGVzdGF0ZSwgcmVsaW5mbywgdHlwZSwgc2VhcmNoc2xvdCwKLQkJCQkJCQkJIGNvbmZs aWN0dHVwbGUtPnNsb3QsIHJlbW90ZXNsb3QsCi0JCQkJCQkJCSBjb25mbGljdHR1cGxlLT5pbmRl eG9pZCwKLQkJCQkJCQkJIGNvbmZsaWN0dHVwbGUtPnhtaW4sCi0JCQkJCQkJCSBjb25mbGljdHR1 cGxlLT5vcmlnaW4sCi0JCQkJCQkJCSBjb25mbGljdHR1cGxlLT50cywKLQkJCQkJCQkJICZlcnJf ZGV0YWlsKTsKKwkvKgorCSAqIEdldCB0aGUgY29uZmxpY3QgbG9nIGRlc3RpbmF0aW9uLiBBbHNv LCAoaWYgdGhlcmUgaXMgb25lKSByZXR1cm4gdGhlCisJICogQ0xUIHJlbGF0aW9uIGFscmVhZHkg b3BlbmVkIGFuZCByZWFkeSBmb3IgaW5zZXJ0aW9uLgorCSAqLworCWNvbmZsaWN0bG9ncmVsID0g R2V0Q29uZmxpY3RMb2dEZXN0QW5kVGFibGUoJmRlc3QpOwogCi0JcGdzdGF0X3JlcG9ydF9zdWJz Y3JpcHRpb25fY29uZmxpY3QoTXlTdWJzY3JpcHRpb24tPm9pZCwgdHlwZSk7CisJbG9nX2Rlc3Rf dGFibGUgPSBDT05GTElDVFNfTE9HR0VEX1RPX1RBQkxFKGRlc3QpOworCWxvZ19kZXN0X2xvZ2Zp bGUgPSBDT05GTElDVFNfTE9HR0VEX1RPX0xPRyhkZXN0KTsKKworCS8qIEluc2VydCB0byB0YWJs ZSBpZiByZXF1ZXN0ZWQuICovCisJaWYgKGxvZ19kZXN0X3RhYmxlKQorCXsKKwkJQXNzZXJ0KGNv bmZsaWN0bG9ncmVsICE9IE5VTEwpOworCisJCS8qCisJCSAqIFByZXBhcmUgdGhlIGNvbmZsaWN0 IGxvZyB0dXBsZS4gSWYgdGhlIGVycm9yIGxldmVsIGlzIGJlbG93IEVSUk9SLAorCQkgKiBpbnNl cnQgaXQgaW1tZWRpYXRlbHkuIE90aGVyd2lzZSwgZGVmZXIgdGhlIGluc2VydGlvbiB0byBhIG5l dworCQkgKiB0cmFuc2FjdGlvbiBhZnRlciB0aGUgY3VycmVudCBvbmUgYWJvcnRzLCBlbnN1cmlu ZyB0aGUgaW5zZXJ0aW9uIG9mCisJCSAqIHRoZSBsb2cgdHVwbGUgaXMgbm90IHJvbGxlZCBiYWNr LgorCQkgKi8KKwkJcHJlcGFyZV9jb25mbGljdF9sb2dfdHVwbGUoZXN0YXRlLAorCQkJCQkJCQkg ICByZWxpbmZvLT5yaV9SZWxhdGlvbkRlc2MsCisJCQkJCQkJCSAgIGNvbmZsaWN0bG9ncmVsLAor CQkJCQkJCQkgICB0eXBlLAorCQkJCQkJCQkgICBzZWFyY2hzbG90LAorCQkJCQkJCQkgICBjb25m bGljdHR1cGxlcywKKwkJCQkJCQkJICAgcmVtb3Rlc2xvdCk7CisJCWlmIChlbGV2ZWwgPCBFUlJP UikKKwkJCUluc2VydENvbmZsaWN0TG9nVHVwbGUoY29uZmxpY3Rsb2dyZWwpOworCisJCWlmICgh bG9nX2Rlc3RfbG9nZmlsZSkKKwkJeworCQkJLyoKKwkJCSAqIE5vdCBsb2dnaW5nIGNvbmZsaWN0 IGRldGFpbHMgdG8gdGhlIHNlcnZlciBsb2c7IFJlcG9ydCB0aGUgZXJyb3IKKwkJCSAqIG1zZyBi dXQgb21pdCByYXcgdHVwbGUgZGF0YSBmcm9tIHNlcnZlciBsb2dzIHNpbmNlIGl0J3MgYWxyZWFk eQorCQkJICogY2FwdHVyZWQgaW4gdGhlIGNvbmZsaWN0IGxvZyB0YWJsZS4KKwkJCSAqLworCQkJ ZXJlcG9ydChlbGV2ZWwsCisJCQkJCWVycmNvZGVfYXBwbHlfY29uZmxpY3QodHlwZSksCisJCQkJ CWVycm1zZygiY29uZmxpY3QgZGV0ZWN0ZWQgb24gcmVsYXRpb24gXCIlc1wiOiBjb25mbGljdD0l cyIsCisJCQkJCQlSZWxhdGlvbkdldFF1YWxpZmllZFJlbGF0aW9uTmFtZShsb2NhbHJlbCksCisJ CQkJCQlDb25mbGljdFR5cGVOYW1lc1t0eXBlXSksCisJCQkJCWVycmRldGFpbCgiQ29uZmxpY3Qg ZGV0YWlscyBhcmUgbG9nZ2VkIHRvIHRoZSBjb25mbGljdCBsb2cgdGFibGU6ICVzIiwKKwkJCQkJ CQkgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGNvbmZsaWN0bG9ncmVsKSkpOworCQl9CisKKwkJ dGFibGVfY2xvc2UoY29uZmxpY3Rsb2dyZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOworCX0KKworCS8q IExvZyBpbnRvIHRoZSBzZXJ2ZXIgbG9nIGlmIHJlcXVlc3RlZC4gKi8KKwlpZiAobG9nX2Rlc3Rf bG9nZmlsZSkKKwl7CisJCVN0cmluZ0luZm9EYXRhCWVycl9kZXRhaWw7CisKKwkJaW5pdFN0cmlu Z0luZm8oJmVycl9kZXRhaWwpOworCisJCS8qIEZvcm0gZXJyZGV0YWlsIG1lc3NhZ2UgYnkgY29t YmluaW5nIGNvbmZsaWN0aW5nIHR1cGxlcyBpbmZvcm1hdGlvbi4gKi8KKwkJZm9yZWFjaF9wdHIo Q29uZmxpY3RUdXBsZUluZm8sIGNvbmZsaWN0dHVwbGUsIGNvbmZsaWN0dHVwbGVzKQorCQkJZXJy ZGV0YWlsX2FwcGx5X2NvbmZsaWN0KGVzdGF0ZSwgcmVsaW5mbywgdHlwZSwgc2VhcmNoc2xvdCwK KwkJCQkJCQkJCWNvbmZsaWN0dHVwbGUtPnNsb3QsIHJlbW90ZXNsb3QsCisJCQkJCQkJCQljb25m bGljdHR1cGxlLT5pbmRleG9pZCwKKwkJCQkJCQkJCWNvbmZsaWN0dHVwbGUtPnhtaW4sCisJCQkJ CQkJCQljb25mbGljdHR1cGxlLT5vcmlnaW4sCisJCQkJCQkJCQljb25mbGljdHR1cGxlLT50cywK KwkJCQkJCQkJCSZlcnJfZGV0YWlsKTsKKworCQkvKiBTdGFuZGFyZCByZXBvcnRpbmcgd2l0aCBm dWxsIGludGVybmFsIGRldGFpbHMuICovCisJCWVyZXBvcnQoZWxldmVsLAorCQkJCWVycmNvZGVf YXBwbHlfY29uZmxpY3QodHlwZSksCisJCQkJZXJybXNnKCJjb25mbGljdCBkZXRlY3RlZCBvbiBy ZWxhdGlvbiBcIiVzXCI6IGNvbmZsaWN0PSVzIiwKKwkJCQkJICAgUmVsYXRpb25HZXRRdWFsaWZp ZWRSZWxhdGlvbk5hbWUobG9jYWxyZWwpLAorCQkJCQkgICBDb25mbGljdFR5cGVOYW1lc1t0eXBl XSksCisJCQkJZXJyZGV0YWlsX2ludGVybmFsKCIlcyIsIGVycl9kZXRhaWwuZGF0YSkpOworCX0K K30KKworLyoKKyAqIFByb2Nlc3NQZW5kaW5nQ29uZmxpY3RMb2dUdXBsZQorICogICAgICBJbnNl cnQgYW55IGRlZmVycmVkIGNvbmZsaWN0IGxvZyB0dXBsZSBpbiBhIHNlcGFyYXRlIHRyYW5zYWN0 aW9uLgorICoKKyAqIEZvciBjb25mbGljdHMgcmFpc2VkIGF0IEVSUk9SIGxldmVsLCB0aGUgY29u ZmxpY3QgbG9nIHR1cGxlIGNhbm5vdCBiZQorICogaW5zZXJ0ZWQgaW1tZWRpYXRlbHkgYmVjYXVz ZSB0aGUgc3Vycm91bmRpbmcgdHJhbnNhY3Rpb24gd2lsbCBhYm9ydC4KKyAqIFRvIGVuc3VyZSB0 aGF0IGNvbmZsaWN0IGluZm9ybWF0aW9uIGlzIG5vdCBsb3N0LCBzdWNoIHR1cGxlcyBhcmUgcHJl cGFyZWQKKyAqIGR1cmluZyBlcnJvciBwcm9jZXNzaW5nIChzZWUgcHJlcGFyZV9jb25mbGljdF9s b2dfdHVwbGUoKSkgYnV0IHRoZWlyCisgKiBpbnNlcnRpb24gaXMgZGVmZXJyZWQuCisgKgorICog VGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgY29tcGxldGluZyB0aGF0IGRlZmVycmVk IGluc2VydGlvbiBhZnRlcgorICogdGhlIGZhaWxpbmcgdHJhbnNhY3Rpb24gaGFzIGJlZW4gYWJv cnRlZCBhbmQgdGhlIHN5c3RlbSBoYXMgcmV0dXJuZWQgdG8gYW4KKyAqIGlkbGUgc3RhdGUuICBJ dCBleGVjdXRlcyB0aGUgaW5zZXJ0aW9uIGluIGEgbmV3LCBpbmRlcGVuZGVudCB0cmFuc2FjdGlv biwKKyAqIGVuc3VyaW5nIHRoYXQgdGhlIGNvbmZsaWN0IGxvZyBlbnRyeSBpcyBkdXJhYmxlIGFu ZCBub3Qgcm9sbGVkIGJhY2sKKyAqIHRvZ2V0aGVyIHdpdGggdGhlIGZhaWxlZCBhcHBseSB0cmFu c2FjdGlvbi4KKyAqLwordm9pZAorUHJvY2Vzc1BlbmRpbmdDb25mbGljdExvZ1R1cGxlKHZvaWQp Cit7CisJUmVsYXRpb24JY29uZmxpY3Rsb2dyZWw7CisJQ29uZmxpY3RMb2dEZXN0IGRlc3Q7CisK KwkvKiBOb3RoaW5nIHRvIGRvICovCisJaWYgKE15TG9naWNhbFJlcFdvcmtlci0+Y29uZmxpY3Rf bG9nX3R1cGxlID09IE5VTEwpCisJCXJldHVybjsKIAotCWVyZXBvcnQoZWxldmVsLAotCQkJZXJy Y29kZV9hcHBseV9jb25mbGljdCh0eXBlKSwKLQkJCWVycm1zZygiY29uZmxpY3QgZGV0ZWN0ZWQg b24gcmVsYXRpb24gXCIlcy4lc1wiOiBjb25mbGljdD0lcyIsCi0JCQkJICAgZ2V0X25hbWVzcGFj ZV9uYW1lKFJlbGF0aW9uR2V0TmFtZXNwYWNlKGxvY2FscmVsKSksCi0JCQkJICAgUmVsYXRpb25H ZXRSZWxhdGlvbk5hbWUobG9jYWxyZWwpLAotCQkJCSAgIENvbmZsaWN0VHlwZU5hbWVzW3R5cGVd KSwKLQkJCWVycmRldGFpbF9pbnRlcm5hbCgiJXMiLCBlcnJfZGV0YWlsLmRhdGEpKTsKKwlTdGFy dFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCVB1c2hBY3RpdmVTbmFwc2hvdChHZXRUcmFuc2FjdGlv blNuYXBzaG90KCkpOworCisJLyogT3BlbiBjb25mbGljdCBsb2cgdGFibGUgYW5kIGluc2VydCB0 aGUgdHVwbGUgKi8KKwljb25mbGljdGxvZ3JlbCA9IEdldENvbmZsaWN0TG9nRGVzdEFuZFRhYmxl KCZkZXN0KTsKKwlBc3NlcnQoY29uZmxpY3Rsb2dyZWwpOworCisJSW5zZXJ0Q29uZmxpY3RMb2dU dXBsZShjb25mbGljdGxvZ3JlbCk7CisKKwl0YWJsZV9jbG9zZShjb25mbGljdGxvZ3JlbCwgUm93 RXhjbHVzaXZlTG9jayk7CisKKwlQb3BBY3RpdmVTbmFwc2hvdCgpOworCUNvbW1pdFRyYW5zYWN0 aW9uQ29tbWFuZCgpOwogfQogCiAvKgpAQCAtMzQwLDYgKzQ3NCw1NiBAQCBJbml0Q29uZmxpY3RJ bmRleGVzKFJlc3VsdFJlbEluZm8gKnJlbEluZm8pCiAJcmVsSW5mby0+cmlfb25Db25mbGljdEFy Yml0ZXJJbmRleGVzID0gdW5pcXVlSW5kZXhlczsKIH0KIAorLyoKKyAqIEdldENvbmZsaWN0TG9n RGVzdEFuZFRhYmxlCisgKgorICogRmV0Y2hlcyBjb25mbGljdCBsb2dnaW5nIG1ldGFkYXRhIGZy b20gdGhlIGNhY2hlZCBNeVN1YnNjcmlwdGlvbiBwb2ludGVyLgorICogU2V0cyB0aGUgZGVzdGlu YXRpb24gZW51bSBpbiAqbG9nX2Rlc3QgYW5kLCBpZiBhcHBsaWNhYmxlLCBvcGVucyBhbmQKKyAq IHJldHVybnMgdGhlIHJlbGF0aW9uIGhhbmRsZSBmb3IgdGhlIGNvbmZsaWN0IGxvZyB0YWJsZS4K KyAqLworUmVsYXRpb24KK0dldENvbmZsaWN0TG9nRGVzdEFuZFRhYmxlKENvbmZsaWN0TG9nRGVz dCAqbG9nX2Rlc3QpCit7CisJT2lkCQkJY29uZmxpY3Rsb2dyZWxpZDsKKworCS8qCisJICogQ29u dmVydCB0aGUgdGV4dCBsb2cgZGVzdGluYXRpb24gdG8gdGhlIGludGVybmFsIGVudW0uICBNeVN1 YnNjcmlwdGlvbgorCSAqIGFscmVhZHkgY29udGFpbnMgdGhlIGRhdGEgZnJvbSBwZ19zdWJzY3Jp cHRpb24uCisJICovCisJKmxvZ19kZXN0ID0gR2V0Q29uZmxpY3RMb2dEZXN0KE15U3Vic2NyaXB0 aW9uLT5jb25mbGljdGxvZ2Rlc3QpOworCisJLyogUXVpY2sgZXhpdCBpZiBhIGNvbmZsaWN0IGxv ZyB0YWJsZSB3YXMgbm90IHJlcXVlc3RlZC4gKi8KKwlpZiAoIUNPTkZMSUNUU19MT0dHRURfVE9f VEFCTEUoKmxvZ19kZXN0KSkKKwkJcmV0dXJuIE5VTEw7CisKKwljb25mbGljdGxvZ3JlbGlkID0g TXlTdWJzY3JpcHRpb24tPmNvbmZsaWN0bG9ncmVsaWQ7CisKKwlBc3NlcnQoT2lkSXNWYWxpZChj b25mbGljdGxvZ3JlbGlkKSk7CisKKwlyZXR1cm4gdGFibGVfb3Blbihjb25mbGljdGxvZ3JlbGlk LCBSb3dFeGNsdXNpdmVMb2NrKTsKK30KKworLyoKKyAqIEluc2VydENvbmZsaWN0TG9nVHVwbGUK KyAqCisgKiBJbnNlcnQgY29uZmxpY3QgbG9nIHR1cGxlIGludG8gdGhlIGNvbmZsaWN0IGxvZyB0 YWJsZS4gSXQgdXNlcworICogSEVBUF9JTlNFUlRfTk9fTE9HSUNBTCB0byBleHBsaWNpdGx5IGJs b2NrIGxvZ2ljYWwgZGVjb2Rpbmcgb2YgdGhlIHR1cGxlCisgKiBpbnNlcnRlZCBpbnRvIHRoZSBj b25mbGljdCBsb2cgdGFibGUuCisgKi8KK3ZvaWQKK0luc2VydENvbmZsaWN0TG9nVHVwbGUoUmVs YXRpb24gY29uZmxpY3Rsb2dyZWwpCit7CisJLyogQSB2YWxpZCB0dXBsZSBtdXN0IGJlIHByZXBh cmVkIGFuZCBzdG9yZWQgaW4gTXlMb2dpY2FsUmVwV29ya2VyLiAqLworCUFzc2VydChNeUxvZ2lj YWxSZXBXb3JrZXItPmNvbmZsaWN0X2xvZ190dXBsZSAhPSBOVUxMKTsKKworCWhlYXBfaW5zZXJ0 KGNvbmZsaWN0bG9ncmVsLCBNeUxvZ2ljYWxSZXBXb3JrZXItPmNvbmZsaWN0X2xvZ190dXBsZSwK KwkJCQlHZXRDdXJyZW50Q29tbWFuZElkKHRydWUpLCBIRUFQX0lOU0VSVF9OT19MT0dJQ0FMLCBO VUxMKTsKKworCS8qIEZyZWUgY29uZmxpY3QgbG9nIHR1cGxlLiAqLworCWhlYXBfZnJlZXR1cGxl KE15TG9naWNhbFJlcFdvcmtlci0+Y29uZmxpY3RfbG9nX3R1cGxlKTsKKwlNeUxvZ2ljYWxSZXBX b3JrZXItPmNvbmZsaWN0X2xvZ190dXBsZSA9IE5VTEw7Cit9CisKIC8qCiAgKiBBZGQgU1FMU1RB VEUgZXJyb3IgY29kZSB0byB0aGUgY3VycmVudCBjb25mbGljdCByZXBvcnQuCiAgKi8KQEAgLTc3 Myw2ICs5NTcsNDAgQEAgZ2V0X3R1cGxlX2Rlc2MoRVN0YXRlICplc3RhdGUsIFJlc3VsdFJlbElu Zm8gKnJlbGluZm8sIENvbmZsaWN0VHlwZSB0eXBlLAogCX0KIH0KIAorLyoKKyAqIEhlbHBlciBm dW5jdGlvbiB0byBleHRyYWN0IHRoZSAicmF3IiBpbmRleCBrZXkgRGF0dW1zIGFuZCB0aGVpciBu dWxsIGZsYWdzCisgKiBmcm9tIGEgVHVwbGVUYWJsZVNsb3QsIGdpdmVuIGFuIGFscmVhZHkgb3Bl biBpbmRleCBkZXNjcmlwdG9yLgorICogVGhpcyBpcyB0aGUgcmV1c2FibGUgY29yZSBsb2dpYy4K KyAqLworc3RhdGljIHZvaWQKK2J1aWxkX2luZGV4X2RhdHVtc19mcm9tX3Nsb3QoRVN0YXRlICpl c3RhdGUsIFJlbGF0aW9uIGxvY2FscmVsLAorCQkJCQkJCSBUdXBsZVRhYmxlU2xvdCAqc2xvdCwK KwkJCQkJCQkgUmVsYXRpb24gaW5kZXhEZXNjLCBEYXR1bSAqdmFsdWVzLAorCQkJCQkJCSBib29s ICppc251bGwpCit7CisJVHVwbGVUYWJsZVNsb3QgKnRhYmxlc2xvdCA9IHNsb3Q7CisKKwkvKgor CSAqIElmIHRoZSBzbG90IGlzIGEgdmlydHVhbCBzbG90LCBjb3B5IGl0IGludG8gYSBoZWFwIHR1 cGxlIHNsb3QgYXMKKwkgKiBGb3JtSW5kZXhEYXR1bSBvbmx5IHdvcmtzIHdpdGggaGVhcCB0dXBs ZSBzbG90cy4KKwkgKi8KKwlpZiAoVFRTX0lTX1ZJUlRVQUwoc2xvdCkpCisJeworCQkvKiBTbG90 IGlzIGNyZWF0ZWQgd2l0aGluIHRoZSBFU3RhdGUncyB0dXBsZSB0YWJsZSAqLworCQl0YWJsZXNs b3QgPSB0YWJsZV9zbG90X2NyZWF0ZShsb2NhbHJlbCwgJmVzdGF0ZS0+ZXNfdHVwbGVUYWJsZSk7 CisJCXRhYmxlc2xvdCA9IEV4ZWNDb3B5U2xvdCh0YWJsZXNsb3QsIHNsb3QpOworCX0KKworCS8q CisJICogSW5pdGlhbGl6ZSBlY3h0X3NjYW50dXBsZSBmb3IgcG90ZW50aWFsIHVzZSBpbiBGb3Jt SW5kZXhEYXR1bQorCSAqLworCUdldFBlclR1cGxlRXhwckNvbnRleHQoZXN0YXRlKS0+ZWN4dF9z Y2FudHVwbGUgPSB0YWJsZXNsb3Q7CisKKwkvKiBGb3JtIHRoZSBpbmRleCBkYXR1bXMgKi8KKwlG b3JtSW5kZXhEYXR1bShCdWlsZEluZGV4SW5mbyhpbmRleERlc2MpLCB0YWJsZXNsb3QsIGVzdGF0 ZSwgdmFsdWVzLAorCQkJCSAgIGlzbnVsbCk7Cit9CisKIC8qCiAgKiBIZWxwZXIgZnVuY3Rpb25z IHRvIGNvbnN0cnVjdCBhIHN0cmluZyBkZXNjcmliaW5nIHRoZSBjb250ZW50cyBvZiBhbiBpbmRl eAogICogZW50cnkuIFNlZSBCdWlsZEluZGV4VmFsdWVEZXNjcmlwdGlvbiBmb3IgZGV0YWlscy4K QEAgLTc4OCw0MSArMTAwNiwzMzkgQEAgYnVpbGRfaW5kZXhfdmFsdWVfZGVzYyhFU3RhdGUgKmVz dGF0ZSwgUmVsYXRpb24gbG9jYWxyZWwsIFR1cGxlVGFibGVTbG90ICpzbG90LAogCVJlbGF0aW9u CWluZGV4RGVzYzsKIAlEYXR1bQkJdmFsdWVzW0lOREVYX01BWF9LRVlTXTsKIAlib29sCQlpc251 bGxbSU5ERVhfTUFYX0tFWVNdOwotCVR1cGxlVGFibGVTbG90ICp0YWJsZXNsb3QgPSBzbG90Owog Ci0JaWYgKCF0YWJsZXNsb3QpCisJaWYgKCFzbG90KQogCQlyZXR1cm4gTlVMTDsKIAogCUFzc2Vy dChDaGVja1JlbGF0aW9uT2lkTG9ja2VkQnlNZShpbmRleG9pZCwgUm93RXhjbHVzaXZlTG9jaywg dHJ1ZSkpOwogCiAJaW5kZXhEZXNjID0gaW5kZXhfb3BlbihpbmRleG9pZCwgTm9Mb2NrKTsKIAot CS8qCi0JICogSWYgdGhlIHNsb3QgaXMgYSB2aXJ0dWFsIHNsb3QsIGNvcHkgaXQgaW50byBhIGhl YXAgdHVwbGUgc2xvdCBhcwotCSAqIEZvcm1JbmRleERhdHVtIG9ubHkgd29ya3Mgd2l0aCBoZWFw IHR1cGxlIHNsb3RzLgotCSAqLwotCWlmIChUVFNfSVNfVklSVFVBTChzbG90KSkKKwlidWlsZF9p bmRleF9kYXR1bXNfZnJvbV9zbG90KGVzdGF0ZSwgbG9jYWxyZWwsIHNsb3QsIGluZGV4RGVzYywg dmFsdWVzLAorCQkJCQkJCQkgaXNudWxsKTsKKworCWluZGV4X3ZhbHVlID0gQnVpbGRJbmRleFZh bHVlRGVzY3JpcHRpb24oaW5kZXhEZXNjLCB2YWx1ZXMsIGlzbnVsbCk7CisKKwlpbmRleF9jbG9z ZShpbmRleERlc2MsIE5vTG9jayk7CisKKwlyZXR1cm4gaW5kZXhfdmFsdWU7Cit9CisKKy8qCisg KiB0dXBsZV90YWJsZV9zbG90X3RvX2pzb25fZGF0dW0KKyAqCisgKiBIZWxwZXIgZnVuY3Rpb24g dG8gY29udmVydCBhIFR1cGxlVGFibGVTbG90IHRvIEpTT04uCisgKi8KK3N0YXRpYyBEYXR1bQor dHVwbGVfdGFibGVfc2xvdF90b19qc29uX2RhdHVtKFR1cGxlVGFibGVTbG90ICpzbG90KQorewor CUhlYXBUdXBsZQl0dXBsZTsKKwlEYXR1bQkJZGF0dW07CisJRGF0dW0JCWpzb247CisKKwlBc3Nl cnQoc2xvdCAhPSBOVUxMKTsKKworCXR1cGxlID0gRXhlY0NvcHlTbG90SGVhcFR1cGxlKHNsb3Qp OworCWRhdHVtID0gaGVhcF9jb3B5X3R1cGxlX2FzX2RhdHVtKHR1cGxlLCBzbG90LT50dHNfdHVw bGVEZXNjcmlwdG9yKTsKKworCWpzb24gPSBEaXJlY3RGdW5jdGlvbkNhbGwxKHJvd190b19qc29u LCBkYXR1bSk7CisJaGVhcF9mcmVldHVwbGUodHVwbGUpOworCisJcmV0dXJuIGpzb247Cit9CisK Ky8qCisgKiB0dXBsZV90YWJsZV9zbG90X3RvX2luZGV4dHVwX2pzb24KKyAqCisgKiBGZXRjaCBy ZXBsaWNhIGlkZW50aXR5IGtleSBmcm9tIHRoZSB0dXBsZSB0YWJsZSBzbG90IGFuZCBjb252ZXJ0 IGludG8gYQorICogSlNPTiBkYXR1bS4KKyAqLworc3RhdGljIERhdHVtCit0dXBsZV90YWJsZV9z bG90X3RvX2luZGV4dHVwX2pzb24oRVN0YXRlICplc3RhdGUsIFJlbGF0aW9uIGxvY2FscmVsLAor CQkJCQkJCQkgIE9pZCBpbmRleGlkLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCkKK3sKKwlSZWxhdGlv bglpbmRleERlc2M7CisJRGF0dW0JCXZhbHVlc1tJTkRFWF9NQVhfS0VZU107CisJYm9vbAkJaXNu dWxsW0lOREVYX01BWF9LRVlTXTsKKwlIZWFwVHVwbGUJdHVwbGU7CisJVHVwbGVEZXNjCXR1cGRl c2M7CisJRGF0dW0JCWRhdHVtOworCisJQXNzZXJ0KHNsb3QgIT0gTlVMTCk7CisKKwlBc3NlcnQo Q2hlY2tSZWxhdGlvbk9pZExvY2tlZEJ5TWUoaW5kZXhpZCwgUm93RXhjbHVzaXZlTG9jaywgdHJ1 ZSkpOworCisJaW5kZXhEZXNjID0gaW5kZXhfb3BlbihpbmRleGlkLCBOb0xvY2spOworCisJYnVp bGRfaW5kZXhfZGF0dW1zX2Zyb21fc2xvdChlc3RhdGUsIGxvY2FscmVsLCBzbG90LCBpbmRleERl c2MsIHZhbHVlcywKKwkJCQkJCQkJIGlzbnVsbCk7CisJdHVwZGVzYyA9IENyZWF0ZVR1cGxlRGVz Y0NvcHkoUmVsYXRpb25HZXREZXNjcihpbmRleERlc2MpKTsKKworCS8qIEJsZXNzIHRoZSB0dXBk ZXNjIHNvIGl0IGNhbiBiZSBsb29rZWQgdXAgYnkgcm93X3RvX2pzb24uICovCisJQmxlc3NUdXBs ZURlc2ModHVwZGVzYyk7CisKKwkvKiBGb3JtIHRoZSByZXBsaWNhIGlkZW50aXR5IHR1cGxlLiAq LworCXR1cGxlID0gaGVhcF9mb3JtX3R1cGxlKHR1cGRlc2MsIHZhbHVlcywgaXNudWxsKTsKKwlk YXR1bSA9IGhlYXBfY29weV90dXBsZV9hc19kYXR1bSh0dXBsZSwgdHVwZGVzYyk7CisKKwloZWFw X2ZyZWV0dXBsZSh0dXBsZSk7CisJRnJlZVR1cGxlRGVzYyh0dXBkZXNjKTsKKwlpbmRleF9jbG9z ZShpbmRleERlc2MsIE5vTG9jayk7CisKKwkvKiBDb252ZXJ0IHRvIGEgSlNPTiBkYXR1bS4gKi8K KwlyZXR1cm4gRGlyZWN0RnVuY3Rpb25DYWxsMShyb3dfdG9fanNvbiwgZGF0dW0pOworfQorCisv KgorICogYnVpbGRfY29uZmxpY3RfdHVwbGVkZXNjCisgKgorICogQnVpbGQgYW5kIGJsZXNzIGEg dHVwbGUgZGVzY3JpcHRvciBmb3IgdGhlIGNvbmZsaWN0IGxvZyB0YWJsZSBiYXNlZCBvbiB0aGUK KyAqIHByZWRlZmluZWQgTG9jYWxDb25mbGljdFNjaGVtYS4KKyAqLworc3RhdGljIFR1cGxlRGVz YworYnVpbGRfY29uZmxpY3RfdHVwbGVkZXNjKHZvaWQpCit7CisJc3RhdGljIFR1cGxlRGVzYyBj YWNoZWRfdHVwZGVzYyA9IE5VTEw7CisKKwlpZiAoY2FjaGVkX3R1cGRlc2MgPT0gTlVMTCkKIAl7 Ci0JCXRhYmxlc2xvdCA9IHRhYmxlX3Nsb3RfY3JlYXRlKGxvY2FscmVsLCAmZXN0YXRlLT5lc190 dXBsZVRhYmxlKTsKLQkJdGFibGVzbG90ID0gRXhlY0NvcHlTbG90KHRhYmxlc2xvdCwgc2xvdCk7 CisJCU1lbW9yeUNvbnRleHQgb2xkY3h0OworCisJCW9sZGN4dCA9IE1lbW9yeUNvbnRleHRTd2l0 Y2hUbyhDYWNoZU1lbW9yeUNvbnRleHQpOworCisJCWNhY2hlZF90dXBkZXNjID0gQ3JlYXRlVGVt cGxhdGVUdXBsZURlc2MoTlVNX0xPQ0FMX0NPTkZMSUNUX0FUVFJTKTsKKworCQlmb3IgKGludCBp ID0gMDsgaSA8IE5VTV9MT0NBTF9DT05GTElDVF9BVFRSUzsgaSsrKQorCQkJVHVwbGVEZXNjSW5p dEVudHJ5KGNhY2hlZF90dXBkZXNjLAorCQkJCQkJCSAgIChBdHRyTnVtYmVyKSAoaSArIDEpLAor CQkJCQkJCSAgIExvY2FsQ29uZmxpY3RTY2hlbWFbaV0uYXR0bmFtZSwKKwkJCQkJCQkgICBMb2Nh bENvbmZsaWN0U2NoZW1hW2ldLmF0dHR5cGlkLAorCQkJCQkJCSAgIC0xLCAwKTsKKworCQlUdXBs ZURlc2NGaW5hbGl6ZShjYWNoZWRfdHVwZGVzYyk7CisKKwkJLyoKKwkJICogQmxlc3Mgb25jZSBz byBpdCBjYW4gYmUgdXNlZCBhcyBhIFJFQ09SRCB0eXBlIChlLmcuIGZvcgorCQkgKiByb3dfdG9f anNvbiBvciBvdGhlciByZWNvcmQtYmFzZWQgb3BlcmF0aW9ucykuCisJCSAqLworCQlCbGVzc1R1 cGxlRGVzYyhjYWNoZWRfdHVwZGVzYyk7CisKKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4 dCk7CiAJfQogCi0JLyoKLQkgKiBJbml0aWFsaXplIGVjeHRfc2NhbnR1cGxlIGZvciBwb3RlbnRp YWwgdXNlIGluIEZvcm1JbmRleERhdHVtIHdoZW4KLQkgKiBpbmRleCBleHByZXNzaW9ucyBhcmUg cHJlc2VudC4KLQkgKi8KLQlHZXRQZXJUdXBsZUV4cHJDb250ZXh0KGVzdGF0ZSktPmVjeHRfc2Nh bnR1cGxlID0gdGFibGVzbG90OworCXJldHVybiBjYWNoZWRfdHVwZGVzYzsKK30KIAotCS8qCi0J ICogVGhlIHZhbHVlcy9udWxscyBhcnJheXMgcGFzc2VkIHRvIEJ1aWxkSW5kZXhWYWx1ZURlc2Ny aXB0aW9uIHNob3VsZCBiZQotCSAqIHRoZSByZXN1bHRzIG9mIEZvcm1JbmRleERhdHVtLCB3aGlj aCBhcmUgdGhlICJyYXciIGlucHV0IHRvIHRoZSBpbmRleAotCSAqIEFNLgotCSAqLwotCUZvcm1J bmRleERhdHVtKEJ1aWxkSW5kZXhJbmZvKGluZGV4RGVzYyksIHRhYmxlc2xvdCwgZXN0YXRlLCB2 YWx1ZXMsIGlzbnVsbCk7CisvKgorICogQnVpbGRzIHRoZSBsb2NhbCBjb25mbGljdHMgSlNPTiBh cnJheSBjb2x1bW4gZnJvbSB0aGUgbGlzdCBvZgorICogQ29uZmxpY3RUdXBsZUluZm8gb2JqZWN0 cy4KKyAqCisgKiBFeGFtcGxlIG91dHB1dCBzdHJ1Y3R1cmU6CisgKiBbIHsgInhpZCI6ICIxMDAx IiwgImNvbW1pdF90cyI6ICIuLi4iLCAib3JpZ2luIjogIi4uLiIsICJ0dXBsZSI6IHsuLi59IH0s IC4uLiBdCisgKi8KK3N0YXRpYyBEYXR1bQorYnVpbGRfbG9jYWxfY29uZmxpY3RzX2pzb25fYXJy YXkoRVN0YXRlICplc3RhdGUsIFJlbGF0aW9uIHJlbCwKKwkJCQkJCQkJIENvbmZsaWN0VHlwZSBj b25mbGljdF90eXBlLAorCQkJCQkJCQkgTGlzdCAqY29uZmxpY3R0dXBsZXMpCit7CisJTGlzdENl bGwgICAqbGM7CisJTGlzdAkgICAqanNvbl9kYXR1bXMgPSBOSUw7CisJRGF0dW0JICAgKmpzb25f ZGF0dW1fYXJyYXk7CisJRGF0dW0JCWpzb25fYXJyYXlfZGF0dW07CisJaW50CQkJbnVtX2NvbmZs aWN0czsKKwlpbnQJCQlpOworCWludDE2CQl0eXBsZW47CisJYm9vbAkJdHlwYnl2YWw7CisJY2hh cgkJdHlwYWxpZ247CisJVHVwbGVEZXNjCXR1cGRlc2M7CiAKLQlpbmRleF92YWx1ZSA9IEJ1aWxk SW5kZXhWYWx1ZURlc2NyaXB0aW9uKGluZGV4RGVzYywgdmFsdWVzLCBpc251bGwpOworCS8qIEJ1 aWxkIGxvY2FsIGNvbmZsaWN0cyB0dXBsZSBkZXNjcmlwdG9yLiAqLworCXR1cGRlc2MgPSBidWls ZF9jb25mbGljdF90dXBsZWRlc2MoKTsKIAotCWluZGV4X2Nsb3NlKGluZGV4RGVzYywgTm9Mb2Nr KTsKKwkvKiBQcm9jZXNzIGxvY2FsIGNvbmZsaWN0IHR1cGxlIGxpc3QgYW5kIHByZXBhcmUgYW4g YXJyYXkgb2YgSlNPTi4gKi8KKwlmb3JlYWNoX3B0cihDb25mbGljdFR1cGxlSW5mbywgY29uZmxp Y3R0dXBsZSwgY29uZmxpY3R0dXBsZXMpCisJeworCQlEYXR1bQkJdmFsdWVzW05VTV9MT0NBTF9D T05GTElDVF9BVFRSU10gPSB7MH07CisJCWJvb2wJCW51bGxzW05VTV9MT0NBTF9DT05GTElDVF9B VFRSU10gPSB7MH07CisJCWNoYXIJICAgKm9yaWdpbl9uYW1lID0gTlVMTDsKKwkJSGVhcFR1cGxl CXR1cGxlOworCQlEYXR1bQkJanNvbl9kYXR1bTsKKwkJaW50CQkJYXR0bm87CisKKwkJYXR0bm8g PSAwOworCQl2YWx1ZXNbYXR0bm8rK10gPSBUcmFuc2FjdGlvbklkR2V0RGF0dW0oY29uZmxpY3R0 dXBsZS0+eG1pbik7CisKKwkJaWYgKGNvbmZsaWN0dHVwbGUtPnRzKQorCQkJdmFsdWVzW2F0dG5v KytdID0gVGltZXN0YW1wVHpHZXREYXR1bShjb25mbGljdHR1cGxlLT50cyk7CisJCWVsc2UKKwkJ CW51bGxzW2F0dG5vKytdID0gdHJ1ZTsKIAotCXJldHVybiBpbmRleF92YWx1ZTsKKwkJaWYgKGNv bmZsaWN0dHVwbGUtPm9yaWdpbiAhPSBJbnZhbGlkUmVwbE9yaWdpbklkKQorCQkJcmVwbG9yaWdp bl9ieV9vaWQoY29uZmxpY3R0dXBsZS0+b3JpZ2luLCB0cnVlLCAmb3JpZ2luX25hbWUpOworCisJ CS8qIFN0b3JlIGVtcHR5IHN0cmluZyBpZiBvcmlnaW4gbmFtZSBmb3IgdGhlIHR1cGxlIGlzIE5V TEwuICovCisJCWlmIChvcmlnaW5fbmFtZSAhPSBOVUxMKQorCQkJdmFsdWVzW2F0dG5vKytdID0g Q1N0cmluZ0dldFRleHREYXR1bShvcmlnaW5fbmFtZSk7CisJCWVsc2UKKwkJCW51bGxzW2F0dG5v KytdID0gdHJ1ZTsKKworCQkvKgorCQkgKiBBZGQgdGhlIGNvbmZsaWN0aW5nIGtleSB2YWx1ZXMg aW4gdGhlIGNhc2Ugb2YgYSB1bmlxdWUgY29uc3RyYWludAorCQkgKiB2aW9sYXRpb24uCisJCSAq LworCQlpZiAoY29uZmxpY3RfdHlwZSA9PSBDVF9JTlNFUlRfRVhJU1RTIHx8CisJCQljb25mbGlj dF90eXBlID09IENUX1VQREFURV9FWElTVFMgfHwKKwkJCWNvbmZsaWN0X3R5cGUgPT0gQ1RfTVVM VElQTEVfVU5JUVVFX0NPTkZMSUNUUykKKwkJeworCQkJT2lkCWluZGV4b2lkID0gY29uZmxpY3R0 dXBsZS0+aW5kZXhvaWQ7CisKKwkJCUFzc2VydChPaWRJc1ZhbGlkKGluZGV4b2lkKSAmJiBjb25m bGljdHR1cGxlLT5zbG90ICYmCisJCQkJICAgQ2hlY2tSZWxhdGlvbk9pZExvY2tlZEJ5TWUoaW5k ZXhvaWQsIFJvd0V4Y2x1c2l2ZUxvY2ssCisJCQkJCQkJCQkJCSAgdHJ1ZSkpOworCQkJdmFsdWVz W2F0dG5vKytdID0KKwkJCQkJdHVwbGVfdGFibGVfc2xvdF90b19pbmRleHR1cF9qc29uKGVzdGF0 ZSwgcmVsLAorCQkJCQkJCQkJCQkJCSAgaW5kZXhvaWQsCisJCQkJCQkJCQkJCQkJICBjb25mbGlj dHR1cGxlLT5zbG90KTsKKwkJfQorCQllbHNlCisJCQludWxsc1thdHRubysrXSA9IHRydWU7CisK KwkJLyogQ29udmVydCBjb25mbGljdGluZyB0dXBsZSB0byBKU09OIGRhdHVtLiAqLworCQlpZiAo Y29uZmxpY3R0dXBsZS0+c2xvdCkKKwkJCXZhbHVlc1thdHRub10gPSB0dXBsZV90YWJsZV9zbG90 X3RvX2pzb25fZGF0dW0oY29uZmxpY3R0dXBsZS0+c2xvdCk7CisJCWVsc2UKKwkJCW51bGxzW2F0 dG5vXSA9IHRydWU7CisKKwkJQXNzZXJ0KGF0dG5vICsgMSA9PSBOVU1fTE9DQUxfQ09ORkxJQ1Rf QVRUUlMpOworCisJCXR1cGxlID0gaGVhcF9mb3JtX3R1cGxlKHR1cGRlc2MsIHZhbHVlcywgbnVs bHMpOworCisJCWpzb25fZGF0dW0gPSBoZWFwX2NvcHlfdHVwbGVfYXNfZGF0dW0odHVwbGUsIHR1 cGRlc2MpOworCisJCS8qCisJCSAqIEJ1aWxkIHRoZSBoaWdoZXIgbGV2ZWwgSlNPTiBkYXR1bSBp biBmb3JtYXQgZGVzY3JpYmVkIGluIGZ1bmN0aW9uCisJCSAqIGhlYWRlci4KKwkJICovCisJCWpz b25fZGF0dW0gPSBEaXJlY3RGdW5jdGlvbkNhbGwxKHJvd190b19qc29uLCBqc29uX2RhdHVtKTsK KworCQkvKiBEb25lIHdpdGggdGhlIHRlbXBvcmFyeSB0dXBsZS4gKi8KKwkJaGVhcF9mcmVldHVw bGUodHVwbGUpOworCisJCS8qIEFkZCB0byB0aGUgYXJyYXkgZWxlbWVudC4gKi8KKwkJanNvbl9k YXR1bXMgPSBsYXBwZW5kKGpzb25fZGF0dW1zLCAodm9pZCAqKSBqc29uX2RhdHVtKTsKKwl9CisK KwludW1fY29uZmxpY3RzID0gbGlzdF9sZW5ndGgoanNvbl9kYXR1bXMpOworCisJanNvbl9kYXR1 bV9hcnJheSA9IHBhbGxvY19hcnJheShEYXR1bSwgbnVtX2NvbmZsaWN0cyk7CisKKwlpID0gMDsK Kwlmb3JlYWNoKGxjLCBqc29uX2RhdHVtcykKKwl7CisJCWpzb25fZGF0dW1fYXJyYXlbaV0gPSAo RGF0dW0pIGxmaXJzdChsYyk7CisJCWkrKzsKKwl9CisKKwkvKiBDb25zdHJ1Y3QgdGhlIEpTT04g YXJyYXkgRGF0dW0uICovCisJZ2V0X3R5cGxlbmJ5dmFsYWxpZ24oSlNPTk9JRCwgJnR5cGxlbiwg JnR5cGJ5dmFsLCAmdHlwYWxpZ24pOworCWpzb25fYXJyYXlfZGF0dW0gPSBQb2ludGVyR2V0RGF0 dW0oY29uc3RydWN0X2FycmF5KGpzb25fZGF0dW1fYXJyYXksCisJCQkJCQkJCQkJCQkJICAgbnVt X2NvbmZsaWN0cywKKwkJCQkJCQkJCQkJCQkgICBKU09OT0lELAorCQkJCQkJCQkJCQkJCSAgIHR5 cGxlbiwKKwkJCQkJCQkJCQkJCQkgICB0eXBieXZhbCwKKwkJCQkJCQkJCQkJCQkgICB0eXBhbGln bikpOworCXBmcmVlKGpzb25fZGF0dW1fYXJyYXkpOworCisJcmV0dXJuIGpzb25fYXJyYXlfZGF0 dW07Cit9CisKKy8qCisgKiBwcmVwYXJlX2NvbmZsaWN0X2xvZ190dXBsZQorICoKKyAqIFRoaXMg cm91dGluZSBwcmVwYXJlcyBhIHR1cGxlIGRldGFpbGluZyBhIGNvbmZsaWN0IGVuY291bnRlcmVk IGR1cmluZworICogbG9naWNhbCByZXBsaWNhdGlvbi4gVGhlIHByZXBhcmVkIHR1cGxlIHdpbGwg YmUgc3RvcmVkIGluCisgKiBNeUxvZ2ljYWxSZXBXb3JrZXItPmNvbmZsaWN0X2xvZ190dXBsZSB3 aGljaCBzaG91bGQgYmUgaW5zZXJ0ZWQgaW50byB0aGUKKyAqIGNvbmZsaWN0IGxvZyB0YWJsZSBi eSBjYWxsaW5nIEluc2VydENvbmZsaWN0TG9nVHVwbGUuCisgKi8KK3N0YXRpYyB2b2lkCitwcmVw YXJlX2NvbmZsaWN0X2xvZ190dXBsZShFU3RhdGUgKmVzdGF0ZSwgUmVsYXRpb24gcmVsLAorCQkJ CQkJICAgUmVsYXRpb24gY29uZmxpY3Rsb2dyZWwsCisJCQkJCQkgICBDb25mbGljdFR5cGUgY29u ZmxpY3RfdHlwZSwKKwkJCQkJCSAgIFR1cGxlVGFibGVTbG90ICpzZWFyY2hzbG90LAorCQkJCQkJ ICAgTGlzdCAqY29uZmxpY3R0dXBsZXMsCisJCQkJCQkgICBUdXBsZVRhYmxlU2xvdCAqcmVtb3Rl c2xvdCkKK3sKKwlEYXR1bQkJdmFsdWVzW05VTV9DT05GTElDVF9BVFRSU10gPSB7MH07CisJYm9v bAkJbnVsbHNbTlVNX0NPTkZMSUNUX0FUVFJTXSA9IHswfTsKKwlpbnQJCQlhdHRubzsKKwljaGFy CSAgICpyZW1vdGVfb3JpZ2luID0gTlVMTDsKKwlNZW1vcnlDb250ZXh0CW9sZGN0eDsKKworCUFz c2VydChNeUxvZ2ljYWxSZXBXb3JrZXItPmNvbmZsaWN0X2xvZ190dXBsZSA9PSBOVUxMKTsKKwor CS8qIFBvcHVsYXRlIHRoZSB2YWx1ZXMgYW5kIG51bGxzIGFycmF5cy4gKi8KKwlhdHRubyA9IDA7 CisJdmFsdWVzW2F0dG5vKytdID0gT2JqZWN0SWRHZXREYXR1bShSZWxhdGlvbkdldFJlbGlkKHJl bCkpOworCisJdmFsdWVzW2F0dG5vKytdID0KKwkJCUNTdHJpbmdHZXRUZXh0RGF0dW0oZ2V0X25h bWVzcGFjZV9uYW1lKFJlbGF0aW9uR2V0TmFtZXNwYWNlKHJlbCkpKTsKKworCXZhbHVlc1thdHRu bysrXSA9IENTdHJpbmdHZXRUZXh0RGF0dW0oUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSk7 CisKKwl2YWx1ZXNbYXR0bm8rK10gPSBDU3RyaW5nR2V0VGV4dERhdHVtKENvbmZsaWN0VHlwZU5h bWVzW2NvbmZsaWN0X3R5cGVdKTsKKworCWlmIChUcmFuc2FjdGlvbklkSXNWYWxpZChyZW1vdGVf eGlkKSkKKwkJdmFsdWVzW2F0dG5vKytdID0gVHJhbnNhY3Rpb25JZEdldERhdHVtKHJlbW90ZV94 aWQpOworCWVsc2UKKwkJbnVsbHNbYXR0bm8rK10gPSB0cnVlOworCisJdmFsdWVzW2F0dG5vKytd ID0gTFNOR2V0RGF0dW0ocmVtb3RlX2ZpbmFsX2xzbik7CisKKwlpZiAocmVtb3RlX2NvbW1pdF90 cyA+IDApCisJCXZhbHVlc1thdHRubysrXSA9IFRpbWVzdGFtcFR6R2V0RGF0dW0ocmVtb3RlX2Nv bW1pdF90cyk7CisJZWxzZQorCQludWxsc1thdHRubysrXSA9IHRydWU7CisKKwlpZiAocmVwbG9y aWdpbl94YWN0X3N0YXRlLm9yaWdpbiAhPSBJbnZhbGlkUmVwbE9yaWdpbklkKQorCQlyZXBsb3Jp Z2luX2J5X29pZChyZXBsb3JpZ2luX3hhY3Rfc3RhdGUub3JpZ2luLCB0cnVlLCAmcmVtb3RlX29y aWdpbik7CisKKwlpZiAocmVtb3RlX29yaWdpbiAhPSBOVUxMKQorCQl2YWx1ZXNbYXR0bm8rK10g PSBDU3RyaW5nR2V0VGV4dERhdHVtKHJlbW90ZV9vcmlnaW4pOworCWVsc2UKKwkJbnVsbHNbYXR0 bm8rK10gPSB0cnVlOworCisJaWYgKCFUdXBJc051bGwocmVtb3Rlc2xvdCkpCisJCXZhbHVlc1th dHRubysrXSA9IHR1cGxlX3RhYmxlX3Nsb3RfdG9fanNvbl9kYXR1bShyZW1vdGVzbG90KTsKKwll bHNlCisJCW51bGxzW2F0dG5vKytdID0gdHJ1ZTsKKworCWlmICghVHVwSXNOdWxsKHNlYXJjaHNs b3QpKQorCXsKKwkJT2lkCQlyZXBsaWNhX2luZGV4ID0gR2V0UmVsYXRpb25JZGVudGl0eU9yUEso cmVsKTsKKworCQkvKgorCQkgKiBJZiB0aGUgdGFibGUgaGFzIGEgdmFsaWQgcmVwbGljYSBpZGVu dGl0eSBpbmRleCwgYnVpbGQgdGhlIGluZGV4CisJCSAqIEpTT04gZGF0dW0gZnJvbSBrZXkgdmFs dWUuIE90aGVyd2lzZSwgY29uc3RydWN0IGl0IGZyb20gdGhlIGNvbXBsZXRlCisJCSAqIHR1cGxl IGluIFJFUExJQ0EgSURFTlRJVFkgRlVMTCBjYXNlcy4KKwkJICovCisJCWlmIChPaWRJc1ZhbGlk KHJlcGxpY2FfaW5kZXgpKQorCQkJdmFsdWVzW2F0dG5vKytdID0gdHVwbGVfdGFibGVfc2xvdF90 b19pbmRleHR1cF9qc29uKGVzdGF0ZSwgcmVsLAorCQkJCQkJCQkJCQkJCQkJCXJlcGxpY2FfaW5k ZXgsCisJCQkJCQkJCQkJCQkJCQkJc2VhcmNoc2xvdCk7CisJCWVsc2UKKwkJCXZhbHVlc1thdHRu bysrXSA9IHR1cGxlX3RhYmxlX3Nsb3RfdG9fanNvbl9kYXR1bShzZWFyY2hzbG90KTsKKwl9CisJ ZWxzZQorCQludWxsc1thdHRubysrXSA9IHRydWU7CisKKwl2YWx1ZXNbYXR0bm9dID0gYnVpbGRf bG9jYWxfY29uZmxpY3RzX2pzb25fYXJyYXkoZXN0YXRlLCByZWwsCisJCQkJCQkJCQkJCQkJIGNv bmZsaWN0X3R5cGUsCisJCQkJCQkJCQkJCQkJIGNvbmZsaWN0dHVwbGVzKTsKKworCUFzc2VydChh dHRubyArIDEgPT0gTlVNX0NPTkZMSUNUX0FUVFJTKTsKKworCW9sZGN0eCA9IE1lbW9yeUNvbnRl eHRTd2l0Y2hUbyhBcHBseUNvbnRleHQpOworCU15TG9naWNhbFJlcFdvcmtlci0+Y29uZmxpY3Rf bG9nX3R1cGxlID0KKwkJaGVhcF9mb3JtX3R1cGxlKFJlbGF0aW9uR2V0RGVzY3IoY29uZmxpY3Rs b2dyZWwpLCB2YWx1ZXMsIG51bGxzKTsKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3R4KTsK IH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbGF1bmNoZXIu YyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbGF1bmNoZXIuYwppbmRleCAzMTNl MzFmZjJlMy4uMDVhMzAzNDJmNjkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvbGF1bmNoZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L2xhdW5jaGVyLmMKQEAgLTQ4Nyw2ICs0ODcsNyBAQCByZXRyeToKIAl3b3JrZXItPm9sZGVzdF9u b25yZW1vdmFibGVfeGlkID0gcmV0YWluX2RlYWRfdHVwbGVzCiAJCT8gTXlSZXBsaWNhdGlvblNs b3QtPmRhdGEueG1pbgogCQk6IEludmFsaWRUcmFuc2FjdGlvbklkOworCXdvcmtlci0+Y29uZmxp Y3RfbG9nX3R1cGxlID0gTlVMTDsKIAl3b3JrZXItPmxhc3RfbHNuID0gSW52YWxpZFhMb2dSZWNQ dHI7CiAJVElNRVNUQU1QX05PQkVHSU4od29ya2VyLT5sYXN0X3NlbmRfdGltZSk7CiAJVElNRVNU QU1QX05PQkVHSU4od29ya2VyLT5sYXN0X3JlY3ZfdGltZSk7CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC93b3JrZXIuYwppbmRleCBhM2YyNDA2ZWQ4My4uNzBhZTM4YTdiZDEgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMKKysrIGIvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYwpAQCAtNDg3LDcgKzQ4Nyw5IEBA IHN0YXRpYyBib29sIE15U3Vic2NyaXB0aW9uVmFsaWQgPSBmYWxzZTsKIHN0YXRpYyBMaXN0ICpv bl9jb21taXRfd2FrZXVwX3dvcmtlcnNfc3ViaWRzID0gTklMOwogCiBib29sCQlpbl9yZW1vdGVf dHJhbnNhY3Rpb24gPSBmYWxzZTsKLXN0YXRpYyBYTG9nUmVjUHRyIHJlbW90ZV9maW5hbF9sc24g PSBJbnZhbGlkWExvZ1JlY1B0cjsKK1hMb2dSZWNQdHIgcmVtb3RlX2ZpbmFsX2xzbiA9IEludmFs aWRYTG9nUmVjUHRyOworVHJhbnNhY3Rpb25JZAlyZW1vdGVfeGlkID0gSW52YWxpZFRyYW5zYWN0 aW9uSWQ7CitUaW1lc3RhbXBUeglyZW1vdGVfY29tbWl0X3RzID0gMDsKIAogLyogZmllbGRzIHZh bGlkIG9ubHkgd2hlbiBwcm9jZXNzaW5nIHN0cmVhbWVkIHRyYW5zYWN0aW9uICovCiBzdGF0aWMg Ym9vbCBpbl9zdHJlYW1lZF90cmFuc2FjdGlvbiA9IGZhbHNlOwpAQCAtMTIzNiw2ICsxMjM4LDgg QEAgYXBwbHlfaGFuZGxlX2JlZ2luKFN0cmluZ0luZm8gcykKIAlzZXRfYXBwbHlfZXJyb3JfY29u dGV4dF94YWN0KGJlZ2luX2RhdGEueGlkLCBiZWdpbl9kYXRhLmZpbmFsX2xzbik7CiAKIAlyZW1v dGVfZmluYWxfbHNuID0gYmVnaW5fZGF0YS5maW5hbF9sc247CisJcmVtb3RlX2NvbW1pdF90cyA9 IGJlZ2luX2RhdGEuY29tbWl0dGltZTsKKwlyZW1vdGVfeGlkID0gYmVnaW5fZGF0YS54aWQ7CiAK IAltYXliZV9zdGFydF9za2lwcGluZ19jaGFuZ2VzKGJlZ2luX2RhdGEuZmluYWxfbHNuKTsKIApA QCAtMTc2Nyw2ICsxNzcxLDEwIEBAIGFwcGx5X2hhbmRsZV9zdHJlYW1fc3RhcnQoU3RyaW5nSW5m byBzKQogCQkJCShlcnJjb2RlKEVSUkNPREVfUFJPVE9DT0xfVklPTEFUSU9OKSwKIAkJCQkgZXJy bXNnX2ludGVybmFsKCJpbnZhbGlkIHRyYW5zYWN0aW9uIElEIGluIHN0cmVhbWVkIHJlcGxpY2F0 aW9uIHRyYW5zYWN0aW9uIikpKTsKIAorCXJlbW90ZV94aWQgPSBzdHJlYW1feGlkOworCXJlbW90 ZV9maW5hbF9sc24gPSBJbnZhbGlkWExvZ1JlY1B0cjsKKwlyZW1vdGVfY29tbWl0X3RzID0gMDsK KwogCXNldF9hcHBseV9lcnJvcl9jb250ZXh0X3hhY3Qoc3RyZWFtX3hpZCwgSW52YWxpZFhMb2dS ZWNQdHIpOwogCiAJLyogVHJ5IHRvIGFsbG9jYXRlIGEgd29ya2VyIGZvciB0aGUgc3RyZWFtaW5n IHRyYW5zYWN0aW9uLiAqLwpAQCAtNTY2Niw2ICs1Njc0LDcgQEAgc3RhcnRfYXBwbHkoWExvZ1Jl Y1B0ciBvcmlnaW5fc3RhcnRwb3MpCiAJCQkgKi8KIAkJCUFib3J0T3V0T2ZBbnlUcmFuc2FjdGlv bigpOwogCQkJcGdzdGF0X3JlcG9ydF9zdWJzY3JpcHRpb25fZXJyb3IoTXlTdWJzY3JpcHRpb24t Pm9pZCk7CisJCQlQcm9jZXNzUGVuZGluZ0NvbmZsaWN0TG9nVHVwbGUoKTsKIAogCQkJUEdfUkVf VEhST1coKTsKIAkJfQpAQCAtNjA0MCw2ICs2MDQ5LDggQEAgRGlzYWJsZVN1YnNjcmlwdGlvbkFu ZEV4aXQodm9pZCkKIAkgKi8KIAlwZ3N0YXRfcmVwb3J0X3N1YnNjcmlwdGlvbl9lcnJvcihNeUxv Z2ljYWxSZXBXb3JrZXItPnN1YmlkKTsKIAorCVByb2Nlc3NQZW5kaW5nQ29uZmxpY3RMb2dUdXBs ZSgpOworCiAJLyogRGlzYWJsZSB0aGUgc3Vic2NyaXB0aW9uICovCiAJU3RhcnRUcmFuc2FjdGlv bkNvbW1hbmQoKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vY29uZmxp Y3QuaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2NvbmZsaWN0LmgKaW5kZXggYTAxN2UxZTZj YjUuLmI3MjdjYzI4NWU5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9jb25m bGljdC5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2NvbmZsaWN0LmgKQEAgLTExNSw1 ICsxMTUsOCBAQCBleHRlcm4gdm9pZCBSZXBvcnRBcHBseUNvbmZsaWN0KEVTdGF0ZSAqZXN0YXRl LCBSZXN1bHRSZWxJbmZvICpyZWxpbmZvLAogCQkJCQkJCQlUdXBsZVRhYmxlU2xvdCAqc2VhcmNo c2xvdCwKIAkJCQkJCQkJVHVwbGVUYWJsZVNsb3QgKnJlbW90ZXNsb3QsCiAJCQkJCQkJCUxpc3Qg KmNvbmZsaWN0dHVwbGVzKTsKK2V4dGVybiB2b2lkIFByb2Nlc3NQZW5kaW5nQ29uZmxpY3RMb2dU dXBsZSh2b2lkKTsKIGV4dGVybiB2b2lkIEluaXRDb25mbGljdEluZGV4ZXMoUmVzdWx0UmVsSW5m byAqcmVsSW5mbyk7CitleHRlcm4gUmVsYXRpb24gR2V0Q29uZmxpY3RMb2dEZXN0QW5kVGFibGUo Q29uZmxpY3RMb2dEZXN0ICpsb2dfZGVzdCk7CitleHRlcm4gdm9pZCBJbnNlcnRDb25mbGljdExv Z1R1cGxlKFJlbGF0aW9uIGNvbmZsaWN0bG9ncmVsKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvcmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmggYi9zcmMvaW5jbHVkZS9yZXBs aWNhdGlvbi93b3JrZXJfaW50ZXJuYWwuaAppbmRleCA3NDViN2Q5ZTk2OS4uNmI2NTI1ZGMyZTIg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dvcmtlcl9pbnRlcm5hbC5oCisr KyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dvcmtlcl9pbnRlcm5hbC5oCkBAIC0xMDAsNiAr MTAwLDkgQEAgdHlwZWRlZiBzdHJ1Y3QgTG9naWNhbFJlcFdvcmtlcgogCSAqLwogCVRyYW5zYWN0 aW9uSWQgb2xkZXN0X25vbnJlbW92YWJsZV94aWQ7CiAKKwkvKiBBIGNvbmZsaWN0IGxvZyB0dXBs ZSB0aGF0IGlzIHByZXBhcmVkIGJ1dCBub3QgeWV0IGluc2VydGVkLiAqLworCUhlYXBUdXBsZQlj b25mbGljdF9sb2dfdHVwbGU7CisKIAkvKiBTdGF0cy4gKi8KIAlYTG9nUmVjUHRyCWxhc3RfbHNu OwogCVRpbWVzdGFtcFR6IGxhc3Rfc2VuZF90aW1lOwpAQCAtMjU1LDYgKzI1OCwxMCBAQCBleHRl cm4gUEdETExJTVBPUlQgYm9vbCBJbml0aWFsaXppbmdBcHBseVdvcmtlcjsKIAogZXh0ZXJuIFBH RExMSU1QT1JUIExpc3QgKnRhYmxlX3N0YXRlc19ub3RfcmVhZHk7CiAKK2V4dGVybiBYTG9nUmVj UHRyIHJlbW90ZV9maW5hbF9sc247CitleHRlcm4gVGltZXN0YW1wVHogcmVtb3RlX2NvbW1pdF90 czsKK2V4dGVybiBUcmFuc2FjdGlvbklkIHJlbW90ZV94aWQ7CisKIGV4dGVybiB2b2lkIGxvZ2lj YWxyZXBfd29ya2VyX2F0dGFjaChpbnQgc2xvdCk7CiBleHRlcm4gTG9naWNhbFJlcFdvcmtlciAq bG9naWNhbHJlcF93b3JrZXJfZmluZChMb2dpY2FsUmVwV29ya2VyVHlwZSB3dHlwZSwKIAkJCQkJ CQkJCQkJCU9pZCBzdWJpZCwgT2lkIHJlbGlkLApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2Ny aXB0aW9uL3QvMDMwX29yaWdpbi5wbCBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzMF9vcmln aW4ucGwKaW5kZXggNmJjNmI3ODc0YzIuLjVmNGQwMGJkZDMzIDEwMDY0NAotLS0gYS9zcmMvdGVz dC9zdWJzY3JpcHRpb24vdC8wMzBfb3JpZ2luLnBsCisrKyBiL3NyYy90ZXN0L3N1YnNjcmlwdGlv bi90LzAzMF9vcmlnaW4ucGwKQEAgLTE2Niw3ICsxNjYsNyBAQCBpcygkcmVzdWx0LCBxcSgzMiks ICdUaGUgbm9kZV9BIGRhdGEgcmVwbGljYXRlZCB0byBub2RlX0InKTsKICRub2RlX0MtPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiVVBEQVRFICR0YWIgU0VUIGEgPSAzMyBXSEVSRSBhID0gMzI7Iik7 CiAKICRub2RlX0ItPndhaXRfZm9yX2xvZygKLQlxci9jb25mbGljdCBkZXRlY3RlZCBvbiByZWxh dGlvbiAicHVibGljLiR0YWJfdW5xdW90ZWQiOiBjb25mbGljdD11cGRhdGVfb3JpZ2luX2RpZmZl cnMuKlxuLipERVRBSUw6LiogVXBkYXRpbmcgdGhlIHJvdyB0aGF0IHdhcyBtb2RpZmllZCBieSBh IGRpZmZlcmVudCBvcmlnaW4gIi4qIiBpbiB0cmFuc2FjdGlvbiBbMC05XSsgYXQgLio6IGxvY2Fs IHJvdyBcKDMyXCksIHJlbW90ZSByb3cgXCgzM1wpLCByZXBsaWNhIGlkZW50aXR5IFwoYVwpPVwo MzJcKS4vCisJcXIvY29uZmxpY3QgZGV0ZWN0ZWQgb24gcmVsYXRpb24gInB1YmxpYy4kdGFiIjog Y29uZmxpY3Q9dXBkYXRlX29yaWdpbl9kaWZmZXJzLipcbi4qREVUQUlMOi4qIFVwZGF0aW5nIHRo ZSByb3cgdGhhdCB3YXMgbW9kaWZpZWQgYnkgYSBkaWZmZXJlbnQgb3JpZ2luICIuKiIgaW4gdHJh bnNhY3Rpb24gWzAtOV0rIGF0IC4qOiBsb2NhbCByb3cgXCgzMlwpLCByZW1vdGUgcm93IFwoMzNc KSwgcmVwbGljYSBpZGVudGl0eSBcKGFcKT1cKDMyXCkuLwogKTsKIAogJG5vZGVfQi0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJERUxFVEUgRlJPTSAkdGFiOyIpOwpAQCAtMTgyLDcgKzE4Miw3IEBA IGlzKCRyZXN1bHQsIHFxKDMzKSwgJ1RoZSBub2RlX0EgZGF0YSByZXBsaWNhdGVkIHRvIG5vZGVf QicpOwogJG5vZGVfQy0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJERUxFVEUgRlJPTSAkdGFiIFdI RVJFIGEgPSAzMzsiKTsKIAogJG5vZGVfQi0+d2FpdF9mb3JfbG9nKAotCXFyL2NvbmZsaWN0IGRl dGVjdGVkIG9uIHJlbGF0aW9uICJwdWJsaWMuJHRhYl91bnF1b3RlZCI6IGNvbmZsaWN0PWRlbGV0 ZV9vcmlnaW5fZGlmZmVycy4qXG4uKkRFVEFJTDouKiBEZWxldGluZyB0aGUgcm93IHRoYXQgd2Fz IG1vZGlmaWVkIGJ5IGEgZGlmZmVyZW50IG9yaWdpbiAiLioiIGluIHRyYW5zYWN0aW9uIFswLTld KyBhdCAuKjogbG9jYWwgcm93IFwoMzNcKSwgcmVwbGljYSBpZGVudGl0eSBcKGFcKT1cKDMzXCku Ki8KKwlxci9jb25mbGljdCBkZXRlY3RlZCBvbiByZWxhdGlvbiAicHVibGljLiR0YWIiOiBjb25m bGljdD1kZWxldGVfb3JpZ2luX2RpZmZlcnMuKlxuLipERVRBSUw6LiogRGVsZXRpbmcgdGhlIHJv dyB0aGF0IHdhcyBtb2RpZmllZCBieSBhIGRpZmZlcmVudCBvcmlnaW4gIi4qIiBpbiB0cmFuc2Fj dGlvbiBbMC05XSsgYXQgLio6IGxvY2FsIHJvdyBcKDMzXCksIHJlcGxpY2EgaWRlbnRpdHkgXChh XCk9XCgzM1wpLiovCiApOwogCiAjIFRoZSByZW1haW5pbmcgdGVzdHMgbm8gbG9uZ2VyIHRlc3Qg Y29uZmxpY3QgZGV0ZWN0aW9uLgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3Qv MDM1X2NvbmZsaWN0cy5wbCBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzNV9jb25mbGljdHMu cGwKaW5kZXggZjIzZmU2YWYyYTUuLjRmMzg4MGU1YjgzIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9z dWJzY3JpcHRpb24vdC8wMzVfY29uZmxpY3RzLnBsCisrKyBiL3NyYy90ZXN0L3N1YnNjcmlwdGlv bi90LzAzNV9jb25mbGljdHMucGwKQEAgLTUwLDcgKzUwLDcgQEAgJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKAogCSdwb3N0Z3JlcycsCiAJIkNSRUFURSBTVUJTQ1JJUFRJT04gc3ViX3RhYgog CSBDT05ORUNUSU9OICckcHVibGlzaGVyX2Nvbm5zdHIgYXBwbGljYXRpb25fbmFtZT0kYXBwbmFt ZScKLQkgUFVCTElDQVRJT04gcHViX3RhYjsiKTsKKwkgUFVCTElDQVRJT04gcHViX3RhYiBXSVRI IChjb25mbGljdF9sb2dfZGVzdGluYXRpb249YWxsKSIpOwogCiAjIFdhaXQgZm9yIGluaXRpYWwg dGFibGUgc3luYyB0byBmaW5pc2gKICRub2RlX3N1YnNjcmliZXItPndhaXRfZm9yX3N1YnNjcmlw dGlvbl9zeW5jKCRub2RlX3B1Ymxpc2hlciwgJGFwcG5hbWUpOwpAQCAtODQsMTAgKzg0LDM1IEBA ICRub2RlX3N1YnNjcmliZXItPndhaXRfZm9yX2xvZygKIC4qS2V5IGFscmVhZHkgZXhpc3RzIGlu IHVuaXF1ZSBpbmRleCBcImNvbmZfdGFiX2Nfa2V5XCIsIG1vZGlmaWVkIGluIHRyYW5zYWN0aW9u IC4qOiBrZXkgXChjXCk9XCg0XCksIGxvY2FsIHJvdyBcKDQsIDQsIDRcKS4vLAogCSRsb2dfb2Zm c2V0KTsKIAorIyBWZXJpZnkgdGhlIGNvbnRlbnRzIG9mIHRoZSBDb25mbGljdCBMb2cgVGFibGUg KENMVCkKKyMgVGhpcyBzZWN0aW9uIGVuc3VyZXMgdGhhdCB0aGUgQ0xUIGNvbnRhaW5zIHRoZSBl eHBlY3RlZAorIyB0eXBlIGFuZCBzcGVjaWZpYyBrZXkgZGF0YS4KK215ICRzdWJpZCA9ICRub2Rl X3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1Qgb2lkIEZST00gcGdf c3Vic2NyaXB0aW9uIFdIRVJFIHN1Ym5hbWUgPSAnc3ViX3RhYic7Iik7CitteSAkY2x0ID0gInBn X2NvbmZsaWN0LnBnX2NvbmZsaWN0X2xvZ19mb3Jfc3ViaWRfJHN1YmlkIjsKKworIyBXYWl0IGZv ciB0aGUgY29uZmxpY3QgdG8gYmUgbG9nZ2VkIGluIHRoZSBDTFQKK215ICRsb2dfY2hlY2sgPSAk bm9kZV9zdWJzY3JpYmVyLT5wb2xsX3F1ZXJ5X3VudGlsKAorICAgICdwb3N0Z3JlcycsCisgICAg IlNFTEVDVCBjb3VudCgqKSA+IDAgRlJPTSAkY2x0OyIKKyk7CisKK215ICRjb25mbGljdF9jaGVj ayA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorICAgICJTRUxFQ1Qg Y291bnQoKikgPj0gMSBGUk9NICRjbHQgV0hFUkUgY29uZmxpY3RfdHlwZSA9ICdtdWx0aXBsZV91 bmlxdWVfY29uZmxpY3RzJzsiKTsKK2lzKCRjb25mbGljdF9jaGVjaywgJ3QnLCAnVmVyaWZpZWQg bXVsdGlwbGVfdW5pcXVlX2NvbmZsaWN0cyBsb2dnZWQgaW50byBjb25mbGljdCBsb2cgdGFibGUn KTsKKworbXkgJGpzb25fcXVlcnkgPSAiU0VMRUNUIGxvY2FsX2NvbmZsaWN0cyBGUk9NICRjbHQ7 IjsKK215ICRyYXdfanNvbiA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAkanNvbl9xdWVyeSk7CisKKyMgVmVyaWZ5IHRoYXQgJzInIGlzIHByZXNlbnQgaW5zaWRlIHRo ZSBKU09OIHN0cnVjdHVyZSB1c2luZyBhIHJlZ2V4CisjIFRoaXMgbWF0Y2hlcyB0aGUga2V5L3Zh bHVlIHBhdHRlcm4gZm9yICJhIjogMgorbGlrZSgkcmF3X2pzb24sIHFyL1xcImFcXCI6Mi8sICdW ZXJpZmllZCB0aGF0IGtleSAyIGV4aXN0cyBpbiB0aGUgbG9jYWxfY29uZmxpY3RzJyk7CisKIHBh c3MoJ211bHRpcGxlX3VuaXF1ZV9jb25mbGljdHMgZGV0ZWN0ZWQgZHVyaW5nIGluc2VydCcpOwog CiAjIFRydW5jYXRlIHRhYmxlIHRvIGdldCByaWQgb2YgdGhlIGVycm9yCiAkbm9kZV9zdWJzY3Jp YmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlRSVU5DQVRFIGNvbmZfdGFiOyIpOworJG5vZGVf c3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJERUxFVEUgRlJPTSAkY2x0Iik7CiAK ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIFRl c3QgbXVsdGlwbGVfdW5pcXVlX2NvbmZsaWN0cyBkdWUgdG8gVVBEQVRFCkBAIC0xMTQsNiArMTM5 LDI2IEBAICRub2RlX3N1YnNjcmliZXItPndhaXRfZm9yX2xvZygKIC4qS2V5IGFscmVhZHkgZXhp c3RzIGluIHVuaXF1ZSBpbmRleCBcImNvbmZfdGFiX2Nfa2V5XCIsIG1vZGlmaWVkIGluIHRyYW5z YWN0aW9uIC4qOiBrZXkgXChjXCk9XCg4XCksIGxvY2FsIHJvdyBcKDgsIDgsIDhcKS4vLAogCSRs b2dfb2Zmc2V0KTsKIAorIyBWZXJpZnkgdGhlIGNvbnRlbnRzIG9mIHRoZSBDb25mbGljdCBMb2cg VGFibGUgKENMVCkKKyMgVGhpcyBzZWN0aW9uIGVuc3VyZXMgdGhhdCB0aGUgQ0xUIGNvbnRhaW5z IHRoZSBleHBlY3RlZAorIyB0eXBlIGFuZCBzcGVjaWZpYyBrZXkgZGF0YS4KKworIyBXYWl0IGZv ciB0aGUgY29uZmxpY3QgdG8gYmUgbG9nZ2VkIGluIHRoZSBDTFQKKyRsb2dfY2hlY2sgPSAkbm9k ZV9zdWJzY3JpYmVyLT5wb2xsX3F1ZXJ5X3VudGlsKAorICAgICdwb3N0Z3JlcycsCisgICAgIlNF TEVDVCBjb3VudCgqKSA+IDAgRlJPTSAkY2x0OyIKKyk7CisKKyRjb25mbGljdF9jaGVjayA9ICRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorICAgICJTRUxFQ1QgY291bnQo KikgPj0gMSBGUk9NICRjbHQgV0hFUkUgY29uZmxpY3RfdHlwZSA9ICdtdWx0aXBsZV91bmlxdWVf Y29uZmxpY3RzJzsiKTsKK2lzKCRjb25mbGljdF9jaGVjaywgJ3QnLCAnVmVyaWZpZWQgbXVsdGlw bGVfdW5pcXVlX2NvbmZsaWN0cyBsb2dnZWQgaW50byBjb25mbGljdCBsb2cgdGFibGUnKTsKKwor JHJhd19qc29uID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICRqc29u X3F1ZXJ5KTsKKworIyBWZXJpZnkgdGhhdCAnNicgaXMgcHJlc2VudCBpbnNpZGUgdGhlIEpTT04g c3RydWN0dXJlIHVzaW5nIGEgcmVnZXgKKyMgVGhpcyBtYXRjaGVzIHRoZSBrZXkvdmFsdWUgcGF0 dGVybiBmb3IgImEiOiA2CitsaWtlKCRyYXdfanNvbiwgcXIvXFwiYVxcIjo2LywgJ1ZlcmlmaWVk IHRoYXQga2V5IDYgZXhpc3RzIGluIHRoZSBsb2NhbF9jb25mbGljdHMnKTsKKwogcGFzcygnbXVs dGlwbGVfdW5pcXVlX2NvbmZsaWN0cyBkZXRlY3RlZCBkdXJpbmcgdXBkYXRlJyk7CiAKICMgVHJ1 bmNhdGUgdGFibGUgdG8gZ2V0IHJpZCBvZiB0aGUgZXJyb3IKLS0gCjIuNDkuMAoK --00000000000081af3806533e7b2b Content-Type: application/octet-stream; name="v44-0001-Add-configurable-conflict-log-table-for-Logical-.patch" Content-Disposition: attachment; filename="v44-0001-Add-configurable-conflict-log-table-for-Logical-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mpw6ul5e0 RnJvbSAxODU2Nzc1NWQ3M2E5MjI3MWZmZWRiZWQ1MTFiZTFiZGYwNjRmN2ViIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEaWxpcCBLdW1hciA8ZGlsaXBrdW1hcmJAZ29vZ2xlLmNvbT4K RGF0ZTogRnJpLCAyOSBNYXkgMjAyNiAxNTowNToxNSArMDUzMApTdWJqZWN0OiBbUEFUQ0ggdjQ0 IDEvMl0gQWRkIGNvbmZpZ3VyYWJsZSBjb25mbGljdCBsb2cgdGFibGUgZm9yIExvZ2ljYWwKIFJl cGxpY2F0aW9uCk1JTUUtVmVyc2lvbjogMS4wCkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hh cnNldD1VVEYtOApDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CgpUaGlzIHBhdGNoIGFk ZHMgYSBmZWF0dXJlIHRvIHByb3ZpZGUgYSBzdHJ1Y3R1cmVkLCBxdWVyeWFibGUgcmVjb3JkIG9m IGFsbApsb2dpY2FsIHJlcGxpY2F0aW9uIGNvbmZsaWN0cy4gVGhlIGN1cnJlbnQgYXBwcm9hY2gg b2YgbG9nZ2luZyBjb25mbGljdHMgYXMKcGxhaW4gdGV4dCBpbiB0aGUgc2VydmVyIGxvZ3MgbWFr ZXMgaXQgZGlmZmljdWx0IHRvIHF1ZXJ5LCBhbmFseXplLCBhbmQKdXNlIGZvciBleHRlcm5hbCBt b25pdG9yaW5nIGFuZCBhdXRvbWF0aW9uLgoKVGhpcyBwYXRjaCBhZGRyZXNzZXMgdGhlc2UgbGlt aXRhdGlvbnMgYnkgaW50cm9kdWNpbmcgYSBjb25maWd1cmFibGUKY29uZmxpY3RfbG9nX2Rlc3Rp bmF0aW9uPSgnbG9nJy8ndGFibGUnLydhbGwnKSBvcHRpb24gaW4gdGhlIENSRUFURSBTVUJTQ1JJ UFRJT04KY29tbWFuZC4KCklmIHRoZSB1c2VyIGNob29zZXMgdG8gZW5hYmxlIGxvZ2dpbmcgdG8g YSB0YWJsZSAoYnkgc2VsZWN0aW5nICd0YWJsZScgb3IgJ2FsbCcpLAphbiBpbnRlcm5hbCBsb2dn aW5nIHRhYmxlIG5hbWVkIHBnX2NvbmZsaWN0X2xvZ188c3ViaWQ+IGlzIGF1dG9tYXRpY2FsbHkK Y3JlYXRlZCB3aXRoaW4gYSBkZWRpY2F0ZWQsIHN5c3RlbS1tYW5hZ2VkICdwZ19jb25mbGljdCcg bmFtZXNwYWNlIHRvIHByZXZlbnQKdXNlcnMgZnJvbSBtYW51YWxseSBkcm9wcGluZyBvciBhbHRl cmluZyBpdC4gVGhpcyBhbHNvIHByZXZlbnRzIGFjY2lkZW50YWwKbmFtZSBjb2xsaXNpb25zIHdp dGggdXNlci1jcmVhdGVkIHRhYmxlcy4gVGhpcyB0YWJsZSBpcyBsaW5rZWQgdG8gdGhlCnN1YnNj cmlwdGlvbiB2aWEgYW4gaW50ZXJuYWwgZGVwZW5kZW5jeSwgZW5zdXJpbmcgaXQgaXMgYXV0b21h dGljYWxseSBkcm9wcGVkCndoZW4gdGhlIHN1YnNjcmlwdGlvbiBpcyByZW1vdmVkCgpUaGUgcGVy LXN1YnNjcmlwdGlvbiB0YWJsZSBtb2RlbCB3YXMgY2hvc2VuIG92ZXIgYSBzaW5nbGUgZ2xvYmFs IGxvZyB0byBlbnN1cmUKc3VwZXJpb3IgaXNvbGF0aW9uIGFuZCBhZG1pbmlzdHJhdGl2ZSBmbGV4 aWJpbGl0eSBieSBkaXJlY3RseSBhbGlnbmluZyB0YWJsZSBvd25lcnNoaXAKd2l0aCB0aGUgc3Vi c2NyaXB0aW9u4oCZcyBsaWZlY3ljbGUuIFRoaXMgYXBwcm9hY2ggYWxsb3dzIGZvciBncmFudWxh ciBwZXJtaXNzaW9uCm1hbmFnZW1lbnQsIGVuYWJsaW5nIHRoZSBzdWJzY3JpcHRpb24gb3duZXIg dG8gcGVyZm9ybSBuZWNlc3NhcnkgbWFpbnRlbmFuY2UKdGFza3MgbGlrZSBTRUxFQ1QsIERFTEVU RSwgYW5kIFRSVU5DQVRFIHdpdGhvdXQgdGhlIHNlY3VyaXR5IHJpc2tzIG9yIGNvbXBsZXgKUm93 LUxldmVsIFNlY3VyaXR5IHJlcXVpcmVkIGJ5IGEgc2hhcmVkIGdsb2JhbCB0YWJsZS4KClRoZSBj b25mbGljdCBkZXRhaWxzLCBpbmNsdWRpbmcgdGhlIG9yaWdpbmFsIGFuZCByZW1vdGUgdHVwbGVz LCBhcmUgc3RvcmVkIGluIEpTT04KY29sdW1ucywgcHJvdmlkaW5nIGEgZmxleGlibGUgZm9ybWF0 IHRvIGFjY29tbW9kYXRlIGRpZmZlcmVudCB0YWJsZSBzY2hlbWFzLgoKVGhlIGxvZyB0YWJsZSBj YXB0dXJlcyBlc3NlbnRpYWwgYXR0cmlidXRlcyBzdWNoIGFzIGxvY2FsIGFuZCByZW1vdGUgdHJh bnNhY3Rpb24gSURzLApMU05zLCBjb21taXQgdGltZXN0YW1wcywgYW5kIGNvbmZsaWN0IHR5cGUs IHByb3ZpZGluZyBhIGNvbXBsZXRlIHJlY29yZCBmb3IgcG9zdC1tb3J0ZW0KYW5hbHlzaXMuCgpU aGlzIGZlYXR1cmUgd2lsbCBtYWtlIGxvZ2ljYWwgcmVwbGljYXRpb24gY29uZmxpY3RzIGVhc2ll ciB0byBtb25pdG9yIGFuZCBtYW5hZ2UsCnNpZ25pZmljYW50bHkgaW1wcm92aW5nIHRoZSBvdmVy YWxsIHJlc2lsaWVuY2UgYW5kIG9wZXJhYmlsaXR5IG9mIHJlcGxpY2F0aW9uIHNldHVwcy4KClRo ZSBjb25mbGljdCBsb2cgdGFibGVzIHdpbGwgbm90IGJlIGluY2x1ZGVkIGluIGEgcHVibGljYXRp b24sIGV2ZW4gaWYgdGhlIHB1YmxpY2F0aW9uCmlzIGNvbmZpZ3VyZWQgdG8gaW5jbHVkZSBBTEwg VEFCTEVTIG9yIEFMTCBUQUJMRVMgSU4gU0NIRU1BLgotLS0KIHNyYy9iYWNrZW5kL2NhdGFsb2cv YWNsY2hrLmMgICAgICAgICAgICAgICB8ICA1MCArKy0tCiBzcmMvYmFja2VuZC9jYXRhbG9nL2Nh dGFsb2cuYyAgICAgICAgICAgICAgfCAgMjkgKy0KIHNyYy9iYWNrZW5kL2NhdGFsb2cvaGVhcC5j ICAgICAgICAgICAgICAgICB8ICAzMiArKy0KIHNyYy9iYWNrZW5kL2NhdGFsb2cvbmFtZXNwYWNl LmMgICAgICAgICAgICB8ICAxMSArLQogc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlv bi5jICAgICAgIHwgIDE0ICstCiBzcmMvYmFja2VuZC9jYXRhbG9nL3BnX3N1YnNjcmlwdGlvbi5j ICAgICAgfCAgIDcgKwogc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsICAgICAg IHwgICAzICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmMgICAgfCAy MTAgKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jICAgICAg ICAgICB8ICAgNiArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY01haW4uYyAgICAgICAgICAg IHwgIDI4ICsrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2NvbmZsaWN0LmMgfCAx NzcgKysrKysrKysrKysrCiBzcmMvYmluL2luaXRkYi9pbml0ZGIuYyAgICAgICAgICAgICAgICAg ICAgfCAgIDYgKwogc3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5pbi5jICAgICAgICAgICAgIHwg ICA4ICstCiBzcmMvaW5jbHVkZS9jYXRhbG9nL2NhdGFsb2cuaCAgICAgICAgICAgICAgfCAgIDIg Kwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19uYW1lc3BhY2UuZGF0ICAgICAgIHwgICAzICsKIHNy Yy9pbmNsdWRlL2NhdGFsb2cvcGdfc3Vic2NyaXB0aW9uLmggICAgICB8ICAxMSArCiBzcmMvaW5j bHVkZS9yZXBsaWNhdGlvbi9jb25mbGljdC5oICAgICAgICAgfCAgMjcgKysKIHNyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvc3Vic2NyaXB0aW9uLm91dCB8IDMwOCArKysrKysrKysrKysrKysrKysr KysKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3N1YnNjcmlwdGlvbi5zcWwgICAgICB8IDI1NiArKysr KysrKysrKysrKysrKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAg IHwgICAyICsKIDIwIGZpbGVzIGNoYW5nZWQsIDExNDQgaW5zZXJ0aW9ucygrKSwgNDYgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9hY2xjaGsuYyBiL3NyYy9i YWNrZW5kL2NhdGFsb2cvYWNsY2hrLmMKaW5kZXggMDA3ZWRlOTk3YzUuLjU0MDJmMzkxZWZkIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL2FjbGNoay5jCisrKyBiL3NyYy9iYWNrZW5k L2NhdGFsb2cvYWNsY2hrLmMKQEAgLTMzMzcsMjUgKzMzMzcsMzkgQEAgcGdfY2xhc3NfYWNsbWFz a19leHQoT2lkIHRhYmxlX29pZCwgT2lkIHJvbGVpZCwgQWNsTW9kZSBtYXNrLAogCiAJY2xhc3NG b3JtID0gKEZvcm1fcGdfY2xhc3MpIEdFVFNUUlVDVCh0dXBsZSk7CiAKLQkvKgotCSAqIERlbnkg YW55b25lIHBlcm1pc3Npb24gdG8gdXBkYXRlIGEgc3lzdGVtIGNhdGFsb2cgdW5sZXNzCi0JICog cGdfYXV0aGlkLnJvbHN1cGVyIGlzIHNldC4KLQkgKgotCSAqIEFzIG9mIDcuNCB3ZSBoYXZlIHNv bWUgdXBkYXRhYmxlIHN5c3RlbSB2aWV3czsgdGhvc2Ugc2hvdWxkbid0IGJlCi0JICogcHJvdGVj dGVkIGluIHRoaXMgd2F5LiAgQXNzdW1lIHRoZSB2aWV3IHJ1bGVzIGNhbiB0YWtlIGNhcmUgb2YK LQkgKiB0aGVtc2VsdmVzLiAgQUNMX1VTQUdFIGlzIGlmIHdlIGV2ZXIgaGF2ZSBzeXN0ZW0gc2Vx dWVuY2VzLgotCSAqLwotCWlmICgobWFzayAmIChBQ0xfSU5TRVJUIHwgQUNMX1VQREFURSB8IEFD TF9ERUxFVEUgfCBBQ0xfVFJVTkNBVEUgfCBBQ0xfVVNBR0UpKSAmJgotCQlJc1N5c3RlbUNsYXNz KHRhYmxlX29pZCwgY2xhc3NGb3JtKSAmJgotCQljbGFzc0Zvcm0tPnJlbGtpbmQgIT0gUkVMS0lO RF9WSUVXICYmCi0JCSFzdXBlcnVzZXJfYXJnKHJvbGVpZCkpCi0JCW1hc2sgJj0gfihBQ0xfSU5T RVJUIHwgQUNMX1VQREFURSB8IEFDTF9ERUxFVEUgfCBBQ0xfVFJVTkNBVEUgfCBBQ0xfVVNBR0Up OwotCi0JLyoKLQkgKiBPdGhlcndpc2UsIHN1cGVydXNlcnMgYnlwYXNzIGFsbCBwZXJtaXNzaW9u LWNoZWNraW5nLgotCSAqLwotCWlmIChzdXBlcnVzZXJfYXJnKHJvbGVpZCkpCisJaWYgKCFzdXBl cnVzZXJfYXJnKHJvbGVpZCkpCisJeworCQlpZiAobWFzayAmIChBQ0xfSU5TRVJUIHwgQUNMX1VQ REFURSB8IEFDTF9ERUxFVEUgfCBBQ0xfVFJVTkNBVEUgfCBBQ0xfVVNBR0UpKQorCQl7CisJCQlp ZiAoSXNDb25mbGljdExvZ1RhYmxlQ2xhc3MoY2xhc3NGb3JtKSkKKwkJCXsKKwkJCQkvKgorCQkJ CSAqIEZvciBjb25mbGljdCBsb2cgdGFibGVzLCBhbGxvdyBub24tc3VwZXJ1c2VycyB0byBwZXJm b3JtCisJCQkJICogREVMRVRFIGFuZCBUUlVOQ0FURSBmb3IgY2xlYW51cCBhbmQgbWFpbnRlbmFu Y2UuIFdoaWxlIHN0aWxsCisJCQkJICogcmVzdHJpY3RpbmcgSU5TRVJULCBVUERBVEUsIGFuZCBV U0FHRS4KKwkJCQkgKi8KKwkJCQltYXNrICY9IH4oQUNMX0lOU0VSVCB8IEFDTF9VUERBVEUgfCBB Q0xfVVNBR0UpOworCQkJfQorCQkJZWxzZSBpZiAoSXNTeXN0ZW1DbGFzcyh0YWJsZV9vaWQsIGNs YXNzRm9ybSkgJiYKKwkJCQljbGFzc0Zvcm0tPnJlbGtpbmQgIT0gUkVMS0lORF9WSUVXKQorCQkJ eworCQkJCS8qCisJCQkJICogRGVueSBhbnlvbmUgcGVybWlzc2lvbiB0byB1cGRhdGUgYSBzeXN0 ZW0gY2F0YWxvZyB1bmxlc3MKKwkJCQkgKiBwZ19hdXRoaWQucm9sc3VwZXIgaXMgc2V0LgorCQkJ CSAqCisJCQkJICogQXMgb2YgNy40IHdlIGhhdmUgc29tZSB1cGRhdGFibGUgc3lzdGVtIHZpZXdz OyB0aG9zZQorCQkJCSAqIHNob3VsZG4ndCBiZSBwcm90ZWN0ZWQgaW4gdGhpcyB3YXkuICBBc3N1 bWUgdGhlIHZpZXcgcnVsZXMKKwkJCQkgKiBjYW4gdGFrZSBjYXJlIG9mIHRoZW1zZWx2ZXMuICBB Q0xfVVNBR0UgaXMgaWYgd2UgZXZlciBoYXZlCisJCQkJICogc3lzdGVtIHNlcXVlbmNlcy4KKwkJ CQkgKi8KKwkJCQltYXNrICY9IH4oQUNMX0lOU0VSVCB8IEFDTF9VUERBVEUgfCBBQ0xfREVMRVRF IHwgQUNMX1RSVU5DQVRFIHwKKwkJCQkJCSAgQUNMX1VTQUdFKTsKKwkJCX0KKwkJfQorCX0KKwll bHNlCiAJeworCQkvKiBTdXBlcnVzZXJzIGJ5cGFzcyBhbGwgcGVybWlzc2lvbi1jaGVja2luZy4g Ki8KIAkJUmVsZWFzZVN5c0NhY2hlKHR1cGxlKTsKIAkJcmV0dXJuIG1hc2s7CiAJfQpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9jYXRhbG9nLmMgYi9zcmMvYmFja2VuZC9jYXRhbG9n L2NhdGFsb2cuYwppbmRleCA3YmU0OTAzMjkzNC4uYmU4NzkxYWY4NzUgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2NhdGFsb2cvY2F0YWxvZy5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvY2F0 YWxvZy5jCkBAIC04Niw3ICs4Niw5IEBAIGJvb2wKIElzU3lzdGVtQ2xhc3MoT2lkIHJlbGlkLCBG b3JtX3BnX2NsYXNzIHJlbHR1cGxlKQogewogCS8qIElzQ2F0YWxvZ1JlbGF0aW9uT2lkIGlzIGEg Yml0IGZhc3Rlciwgc28gdGVzdCB0aGF0IGZpcnN0ICovCi0JcmV0dXJuIChJc0NhdGFsb2dSZWxh dGlvbk9pZChyZWxpZCkgfHwgSXNUb2FzdENsYXNzKHJlbHR1cGxlKSk7CisJcmV0dXJuIChJc0Nh dGFsb2dSZWxhdGlvbk9pZChyZWxpZCkgfHwKKwkJCUlzVG9hc3RDbGFzcyhyZWx0dXBsZSkgfHwK KwkJCUlzQ29uZmxpY3RMb2dUYWJsZUNsYXNzKHJlbHR1cGxlKSk7CiB9CiAKIC8qCkBAIC0yMzAs NiArMjMyLDIwIEBAIElzVG9hc3RDbGFzcyhGb3JtX3BnX2NsYXNzIHJlbHR1cGxlKQogCXJldHVy biBJc1RvYXN0TmFtZXNwYWNlKHJlbG5hbWVzcGFjZSk7CiB9CiAKKy8qCisgKiBJc0NvbmZsaWN0 TG9nVGFibGVDbGFzcworICoJCVRydWUgaWZmIHBnX2NsYXNzIHR1cGxlIHJlcHJlc2VudHMgYSBD b25mbGljdCBMb2cgVGFibGUuCisgKgorICoJCURvZXMgbm90IHBlcmZvcm0gYW55IGNhdGFsb2cg YWNjZXNzZXMuCisgKi8KK2Jvb2wKK0lzQ29uZmxpY3RMb2dUYWJsZUNsYXNzKEZvcm1fcGdfY2xh c3MgcmVsdHVwbGUpCit7CisJT2lkCQkJcmVsbmFtZXNwYWNlID0gcmVsdHVwbGUtPnJlbG5hbWVz cGFjZTsKKworCXJldHVybiBJc0NvbmZsaWN0TG9nVGFibGVOYW1lc3BhY2UocmVsbmFtZXNwYWNl KTsKK30KKwogLyoKICAqIElzQ2F0YWxvZ05hbWVzcGFjZQogICoJCVRydWUgaWZmIG5hbWVzcGFj ZSBpcyBwZ19jYXRhbG9nLgpAQCAtMjY0LDYgKzI4MCwxNyBAQCBJc1RvYXN0TmFtZXNwYWNlKE9p ZCBuYW1lc3BhY2VJZCkKIAkJaXNUZW1wVG9hc3ROYW1lc3BhY2UobmFtZXNwYWNlSWQpOwogfQog CisvKgorICogSXNDb25mbGljdExvZ1RhYmxlTmFtZXNwYWNlCisgKgkJVHJ1ZSBpZmYgbmFtZXNw YWNlIGlzIHBnX2NvbmZsaWN0LgorICoKKyAqCQlEb2VzIG5vdCBwZXJmb3JtIGFueSBjYXRhbG9n IGFjY2Vzc2VzLgorICovCitib29sCitJc0NvbmZsaWN0TG9nVGFibGVOYW1lc3BhY2UoT2lkIG5h bWVzcGFjZUlkKQoreworCXJldHVybiBuYW1lc3BhY2VJZCA9PSBQR19DT05GTElDVF9OQU1FU1BB Q0U7Cit9CiAKIC8qCiAgKiBJc1Jlc2VydmVkTmFtZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv Y2F0YWxvZy9oZWFwLmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2hlYXAuYwppbmRleCA4ODA4NzY1 NGRlOS4uMWI0ZmFlMjIzOTAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvaGVhcC5j CisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvaGVhcC5jCkBAIC0zMDUsMjMgKzMwNSwzMSBAQCBo ZWFwX2NyZWF0ZShjb25zdCBjaGFyICpyZWxuYW1lLAogCUFzc2VydChPaWRJc1ZhbGlkKHJlbGlk KSk7CiAKIAkvKgotCSAqIERvbid0IGFsbG93IGNyZWF0aW5nIHJlbGF0aW9ucyBpbiBwZ19jYXRh bG9nIGRpcmVjdGx5LCBldmVuIHRob3VnaCBpdAotCSAqIGlzIGFsbG93ZWQgdG8gbW92ZSB1c2Vy IGRlZmluZWQgcmVsYXRpb25zIHRoZXJlLiBTZW1hbnRpY3Mgd2l0aCBzZWFyY2gKLQkgKiBwYXRo cyBpbmNsdWRpbmcgcGdfY2F0YWxvZyBhcmUgdG9vIGNvbmZ1c2luZyBmb3Igbm93LgorCSAqIERv bid0IGFsbG93IGNyZWF0aW5nIHJlbGF0aW9ucyBpbiBwZ19jYXRhbG9nIG9yIHBnX2NvbmZsaWN0 IGRpcmVjdGx5LAorCSAqIGV2ZW4gdGhvdWdoIGl0IGlzIGFsbG93ZWQgdG8gbW92ZSB1c2VyIGRl ZmluZWQgcmVsYXRpb25zIHRoZXJlLiBTZW1hbnRpY3MKKwkgKiB3aXRoIHNlYXJjaCBwYXRocyBp bmNsdWRpbmcgcGdfY2F0YWxvZyBhcmUgdG9vIGNvbmZ1c2luZyBmb3Igbm93LgogCSAqCiAJICog QnV0IGFsbG93IGNyZWF0aW5nIGluZGV4ZXMgb24gcmVsYXRpb25zIGluIHBnX2NhdGFsb2cgZXZl biBpZgogCSAqIGFsbG93X3N5c3RlbV90YWJsZV9tb2RzID0gb2ZmLCB1cHBlciBsYXllcnMgYWxy ZWFkeSBndWFyYW50ZWUgaXQncyBvbiBhCiAJICogdXNlciBkZWZpbmVkIHJlbGF0aW9uLCBub3Qg YSBzeXN0ZW0gb25lLgogCSAqLwotCWlmICghYWxsb3dfc3lzdGVtX3RhYmxlX21vZHMgJiYKLQkJ KChJc0NhdGFsb2dOYW1lc3BhY2UocmVsbmFtZXNwYWNlKSAmJiByZWxraW5kICE9IFJFTEtJTkRf SU5ERVgpIHx8Ci0JCSBJc1RvYXN0TmFtZXNwYWNlKHJlbG5hbWVzcGFjZSkpICYmCi0JCUlzTm9y bWFsUHJvY2Vzc2luZ01vZGUoKSkKLQkJZXJlcG9ydChFUlJPUiwKLQkJCQkoZXJyY29kZShFUlJD T0RFX0lOU1VGRklDSUVOVF9QUklWSUxFR0UpLAotCQkJCSBlcnJtc2coInBlcm1pc3Npb24gZGVu aWVkIHRvIGNyZWF0ZSBcIiVzLiVzXCIiLAotCQkJCQkJZ2V0X25hbWVzcGFjZV9uYW1lKHJlbG5h bWVzcGFjZSksIHJlbG5hbWUpLAotCQkJCSBlcnJkZXRhaWwoIlN5c3RlbSBjYXRhbG9nIG1vZGlm aWNhdGlvbnMgYXJlIGN1cnJlbnRseSBkaXNhbGxvd2VkLiIpKSk7CisJaWYgKCFhbGxvd19zeXN0 ZW1fdGFibGVfbW9kcyAmJiBJc05vcm1hbFByb2Nlc3NpbmdNb2RlKCkpCisJeworCQlpZiAoKElz Q2F0YWxvZ05hbWVzcGFjZShyZWxuYW1lc3BhY2UpICYmIHJlbGtpbmQgIT0gUkVMS0lORF9JTkRF WCkgfHwKKwkJCUlzVG9hc3ROYW1lc3BhY2UocmVsbmFtZXNwYWNlKSkKKwkJCWVyZXBvcnQoRVJS T1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5TVUZGSUNJRU5UX1BSSVZJTEVHRSksCisJCQkJ CSBlcnJtc2coInBlcm1pc3Npb24gZGVuaWVkIHRvIGNyZWF0ZSBcIiVzLiVzXCIiLAorCQkJCQkJ CWdldF9uYW1lc3BhY2VfbmFtZShyZWxuYW1lc3BhY2UpLCByZWxuYW1lKSwKKwkJCQkJIGVycmRl dGFpbCgiU3lzdGVtIGNhdGFsb2cgbW9kaWZpY2F0aW9ucyBhcmUgY3VycmVudGx5IGRpc2FsbG93 ZWQuIikpKTsKKworCQlpZiAoSXNDb25mbGljdExvZ1RhYmxlTmFtZXNwYWNlKHJlbG5hbWVzcGFj ZSkpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOU1VGRklDSUVO VF9QUklWSUxFR0UpLAorCQkJCQkgZXJybXNnKCJwZXJtaXNzaW9uIGRlbmllZCB0byBjcmVhdGUg XCIlcy4lc1wiIiwKKwkJCQkJCQlnZXRfbmFtZXNwYWNlX25hbWUocmVsbmFtZXNwYWNlKSwgcmVs bmFtZSksCisJCQkJCSBlcnJkZXRhaWwoIkNvbmZsaWN0IHNjaGVtYSBtb2RpZmljYXRpb25zIGFy ZSBjdXJyZW50bHkgZGlzYWxsb3dlZC4iKSkpOworCX0KIAogCSpyZWxmcm96ZW54aWQgPSBJbnZh bGlkVHJhbnNhY3Rpb25JZDsKIAkqcmVsbWlubXhpZCA9IEludmFsaWRNdWx0aVhhY3RJZDsKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvbmFtZXNwYWNlLmMgYi9zcmMvYmFja2VuZC9j YXRhbG9nL25hbWVzcGFjZS5jCmluZGV4IDU2Yjg3ZDg3OGU4Li41YmQ5YmUzOTgzZSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9uYW1lc3BhY2UuYworKysgYi9zcmMvYmFja2VuZC9j YXRhbG9nL25hbWVzcGFjZS5jCkBAIC0zNTIzLDkgKzM1MjMsOCBAQCBMb29rdXBDcmVhdGlvbk5h bWVzcGFjZShjb25zdCBjaGFyICpuc3BuYW1lKQogLyoKICAqIENvbW1vbiBjaGVja3Mgb24gc3dp dGNoaW5nIG5hbWVzcGFjZXMuCiAgKgotICogV2UgY29tcGxhaW4gaWYgZWl0aGVyIHRoZSBvbGQg b3IgbmV3IG5hbWVzcGFjZXMgaXMgYSB0ZW1wb3Jhcnkgc2NoZW1hCi0gKiAob3IgdGVtcG9yYXJ5 IHRvYXN0IHNjaGVtYSksIG9yIGlmIGVpdGhlciB0aGUgb2xkIG9yIG5ldyBuYW1lc3BhY2VzIGlz IHRoZQotICogVE9BU1Qgc2NoZW1hLgorICogV2UgY29tcGxhaW4gaWYgZWl0aGVyIHRoZSBvbGQg b3IgbmV3IG5hbWVzcGFjZXMgaXMgYSB0ZW1wb3Jhcnkgc2NoZW1hLAorICogdGVtcG9yYXJ5IHRv YXN0IHNjaGVtYSwgdGhlIFRPQVNUIHNjaGVtYSwgb3IgdGhlIGNvbmZsaWN0IHNjaGVtYS4KICAq Lwogdm9pZAogQ2hlY2tTZXROYW1lc3BhY2UoT2lkIG9sZE5zcE9pZCwgT2lkIG5zcE9pZCkKQEAg LTM1NDEsNiArMzU0MCwxMiBAQCBDaGVja1NldE5hbWVzcGFjZShPaWQgb2xkTnNwT2lkLCBPaWQg bnNwT2lkKQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9O T1RfU1VQUE9SVEVEKSwKIAkJCQkgZXJybXNnKCJjYW5ub3QgbW92ZSBvYmplY3RzIGludG8gb3Ig b3V0IG9mIFRPQVNUIHNjaGVtYSIpKSk7CisKKwkvKiBzaW1pbGFybHkgZm9yIGNvbmZsaWN0IHNj aGVtYSAqLworCWlmIChuc3BPaWQgPT0gUEdfQ09ORkxJQ1RfTkFNRVNQQUNFIHx8IG9sZE5zcE9p ZCA9PSBQR19DT05GTElDVF9OQU1FU1BBQ0UpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNv ZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJCSBlcnJtc2coImNhbm5vdCBt b3ZlIG9iamVjdHMgaW50byBvciBvdXQgb2YgdGhlIGNvbmZsaWN0IHNjaGVtYSIpKSk7CiB9CiAK IC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMgYi9z cmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMKaW5kZXggNWM0NTdkOWFjYTguLjFl Yzk0Yzg1MWIyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9u LmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jCkBAIC05Miw2ICs5 MiwxMyBAQCBjaGVja19wdWJsaWNhdGlvbl9hZGRfcmVsYXRpb24oUHVibGljYXRpb25SZWxJbmZv ICpwcmkpCiAJCQkJIGVycm1zZyhlcnJvcm1zZywgcmVsbmFtZSksCiAJCQkJIGVycmRldGFpbCgi VGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBmb3Igc3lzdGVtIHRhYmxlcy4iKSkpOwog CisJLyogQ2FuJ3QgYmUgY29uZmxpY3QgbG9nIHRhYmxlICovCisJaWYgKElzQ29uZmxpY3RMb2dU YWJsZU5hbWVzcGFjZShSZWxhdGlvbkdldE5hbWVzcGFjZSh0YXJnZXRyZWwpKSkKKwkJZXJlcG9y dChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwK KwkJCQkgZXJybXNnKGVycm9ybXNnLCByZWxuYW1lKSwKKwkJCQkgZXJyZGV0YWlsKCJUaGlzIG9w ZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGZvciBjb25mbGljdCBsb2cgdGFibGVzLiIpKSk7CisK IAkvKiBVTkxPR0dFRCBhbmQgVEVNUCByZWxhdGlvbnMgY2Fubm90IGJlIHBhcnQgb2YgcHVibGlj YXRpb24uICovCiAJaWYgKHRhcmdldHJlbC0+cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZSA9PSBSRUxQ RVJTSVNURU5DRV9URU1QKQogCQllcmVwb3J0KEVSUk9SLApAQCAtMTEzLDcgKzEyMCw4IEBAIHN0 YXRpYyB2b2lkCiBjaGVja19wdWJsaWNhdGlvbl9hZGRfc2NoZW1hKE9pZCBzY2hlbWFpZCkKIHsK IAkvKiBDYW4ndCBiZSBzeXN0ZW0gbmFtZXNwYWNlICovCi0JaWYgKElzQ2F0YWxvZ05hbWVzcGFj ZShzY2hlbWFpZCkgfHwgSXNUb2FzdE5hbWVzcGFjZShzY2hlbWFpZCkpCisJaWYgKElzQ2F0YWxv Z05hbWVzcGFjZShzY2hlbWFpZCkgfHwgSXNUb2FzdE5hbWVzcGFjZShzY2hlbWFpZCkgfHwKKwkJ SXNDb25mbGljdExvZ1RhYmxlTmFtZXNwYWNlKHNjaGVtYWlkKSkKIAkJZXJlcG9ydChFUlJPUiwK IAkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKIAkJCQkgZXJy bXNnKCJjYW5ub3QgYWRkIHNjaGVtYSBcIiVzXCIgdG8gcHVibGljYXRpb24iLApAQCAtMTQ4LDcg KzE1Niw4IEBAIGNoZWNrX3B1YmxpY2F0aW9uX2FkZF9zY2hlbWEoT2lkIHNjaGVtYWlkKQogICog aXMgcmVhbGx5IGluYWRlcXVhdGUgZm9yIHRoYXQsIHNpbmNlIHRoZSBpbmZvcm1hdGlvbl9zY2hl bWEgY291bGQgYmUKICAqIGRyb3BwZWQgYW5kIHJlbG9hZGVkIGFuZCB0aGVuIGl0J2xsIGJlIGNv bnNpZGVyZWQgcHVibGlzaGFibGUuICBUaGUgYmVzdAogICogbG9uZy10ZXJtIHNvbHV0aW9uIG1h eSBiZSB0byBhZGQgYSAicmVsaXNwdWJsaXNoYWJsZSIgYm9vbCB0byBwZ19jbGFzcywKLSAqIGFu ZCBkZXBlbmQgb24gdGhhdCBpbnN0ZWFkIG9mIE9JRCBjaGVja3MuCisgKiBhbmQgZGVwZW5kIG9u IHRoYXQgaW5zdGVhZCBvZiBPSUQgY2hlY2tzLiAgSXNDb25mbGljdExvZ1RhYmxlQ2xhc3MoKQor ICogZXhjbHVkZXMgdGFibGVzIGluIGNvbmZsaWN0IHNjaGVtYS4KICAqLwogc3RhdGljIGJvb2wK IGlzX3B1Ymxpc2hhYmxlX2NsYXNzKE9pZCByZWxpZCwgRm9ybV9wZ19jbGFzcyByZWx0dXBsZSkK QEAgLTE1Nyw2ICsxNjYsNyBAQCBpc19wdWJsaXNoYWJsZV9jbGFzcyhPaWQgcmVsaWQsIEZvcm1f cGdfY2xhc3MgcmVsdHVwbGUpCiAJCQlyZWx0dXBsZS0+cmVsa2luZCA9PSBSRUxLSU5EX1BBUlRJ VElPTkVEX1RBQkxFIHx8CiAJCQlyZWx0dXBsZS0+cmVsa2luZCA9PSBSRUxLSU5EX1NFUVVFTkNF KSAmJgogCQkhSXNDYXRhbG9nUmVsYXRpb25PaWQocmVsaWQpICYmCisJCSFJc0NvbmZsaWN0TG9n VGFibGVDbGFzcyhyZWx0dXBsZSkgJiYKIAkJcmVsdHVwbGUtPnJlbHBlcnNpc3RlbmNlID09IFJF TFBFUlNJU1RFTkNFX1BFUk1BTkVOVCAmJgogCQlyZWxpZCA+PSBGaXJzdE5vcm1hbE9iamVjdElk OwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19zdWJzY3JpcHRpb24uYyBi L3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfc3Vic2NyaXB0aW9uLmMKaW5kZXggMWYxZmRjNzVhZjYu LjgwOTgxOGFmOWVhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3N1YnNjcmlw dGlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfc3Vic2NyaXB0aW9uLmMKQEAgLTEx OCw2ICsxMTgsNyBAQCBHZXRTdWJzY3JpcHRpb24oT2lkIHN1YmlkLCBib29sIG1pc3Npbmdfb2ss IGJvb2wgYWNsY2hlY2spCiAJc3ViLT5yZXRhaW5kZWFkdHVwbGVzID0gc3ViZm9ybS0+c3VicmV0 YWluZGVhZHR1cGxlczsKIAlzdWItPm1heHJldGVudGlvbiA9IHN1YmZvcm0tPnN1Ym1heHJldGVu dGlvbjsKIAlzdWItPnJldGVudGlvbmFjdGl2ZSA9IHN1YmZvcm0tPnN1YnJldGVudGlvbmFjdGl2 ZTsKKwlzdWItPmNvbmZsaWN0bG9ncmVsaWQgPSBzdWJmb3JtLT5zdWJjb25mbGljdGxvZ3JlbGlk OwogCiAJLyogR2V0IGNvbm5pbmZvICovCiAJaWYgKE9pZElzVmFsaWQoc3ViZm9ybS0+c3Vic2Vy dmVyKSkKQEAgLTE4Nyw2ICsxODgsMTIgQEAgR2V0U3Vic2NyaXB0aW9uKE9pZCBzdWJpZCwgYm9v bCBtaXNzaW5nX29rLCBib29sIGFjbGNoZWNrKQogCQkJCQkJCQkgICBBbnVtX3BnX3N1YnNjcmlw dGlvbl9zdWJvcmlnaW4pOwogCXN1Yi0+b3JpZ2luID0gVGV4dERhdHVtR2V0Q1N0cmluZyhkYXR1 bSk7CiAKKwkvKiBHZXQgY29uZmxpY3QgbG9nIGRlc3RpbmF0aW9uICovCisJZGF0dW0gPSBTeXND YWNoZUdldEF0dHJOb3ROdWxsKFNVQlNDUklQVElPTk9JRCwKKwkJCQkJCQkJICAgdHVwLAorCQkJ CQkJCQkgICBBbnVtX3BnX3N1YnNjcmlwdGlvbl9zdWJjb25mbGljdGxvZ2Rlc3QpOworCXN1Yi0+ Y29uZmxpY3Rsb2dkZXN0ID0gVGV4dERhdHVtR2V0Q1N0cmluZyhkYXR1bSk7CisKIAkvKiBJcyB0 aGUgc3Vic2NyaXB0aW9uIG93bmVyIGEgc3VwZXJ1c2VyPyAqLwogCXN1Yi0+b3duZXJzdXBlcnVz ZXIgPSBzdXBlcnVzZXJfYXJnKHN1Yi0+b3duZXIpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9jYXRhbG9nL3N5c3RlbV92aWV3cy5zcWwgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV92 aWV3cy5zcWwKaW5kZXggNzNhMWMxYzQ2NzAuLjE2NjMyOTU1MWRhIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9jYXRhbG9nL3N5c3RlbV92aWV3cy5zcWwKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxv Zy9zeXN0ZW1fdmlld3Muc3FsCkBAIC0xNTI3LDcgKzE1MjcsOCBAQCBHUkFOVCBTRUxFQ1QgKG9p ZCwgc3ViZGJpZCwgc3Vic2tpcGxzbiwgc3VibmFtZSwgc3Vib3duZXIsIHN1YmVuYWJsZWQsCiAg ICAgICAgICAgICAgIHN1YmJpbmFyeSwgc3Vic3RyZWFtLCBzdWJ0d29waGFzZXN0YXRlLCBzdWJk aXNhYmxlb25lcnIsCiAJCQkgIHN1YnBhc3N3b3JkcmVxdWlyZWQsIHN1YnJ1bmFzb3duZXIsIHN1 YmZhaWxvdmVyLAogICAgICAgICAgICAgICBzdWJyZXRhaW5kZWFkdHVwbGVzLCBzdWJtYXhyZXRl bnRpb24sIHN1YnJldGVudGlvbmFjdGl2ZSwKLSAgICAgICAgICAgICAgc3Vic2VydmVyLCBzdWJz bG90bmFtZSwgc3Vic3luY2NvbW1pdCwgc3VicHVibGljYXRpb25zLCBzdWJvcmlnaW4pCisgICAg ICAgICAgICAgIHN1YnNlcnZlciwgc3ViY29uZmxpY3Rsb2dyZWxpZCwgc3ViY29uZmxpY3Rsb2dk ZXN0LAorCQkJICBzdWJzbG90bmFtZSwgc3Vic3luY2NvbW1pdCwgc3VicHVibGljYXRpb25zLCBz dWJvcmlnaW4pCiAgICAgT04gcGdfc3Vic2NyaXB0aW9uIFRPIHB1YmxpYzsKIAogQ1JFQVRFIFZJ RVcgcGdfc3RhdF9zdWJzY3JpcHRpb25fc3RhdHMgQVMKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3N1YnNj cmlwdGlvbmNtZHMuYwppbmRleCA1MjM5NTliYTBjZS4uNWJkNjYzMTgwZjEgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuYworKysgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRl ICJjYXRhbG9nL3BnX2F1dGhpZF9kLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19kYXRhYmFzZV9k LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19mb3JlaWduX3NlcnZlci5oIgorI2luY2x1ZGUgImNh dGFsb2cvcGdfbmFtZXNwYWNlLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19zdWJzY3JpcHRpb24u aCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3N1YnNjcmlwdGlvbl9yZWwuaCIKICNpbmNsdWRlICJj YXRhbG9nL3BnX3R5cGUuaCIKQEAgLTM1LDYgKzM2LDcgQEAKICNpbmNsdWRlICJjb21tYW5kcy9k ZWZyZW0uaCIKICNpbmNsdWRlICJjb21tYW5kcy9ldmVudF90cmlnZ2VyLmgiCiAjaW5jbHVkZSAi Y29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5oIgorI2luY2x1ZGUgImNvbW1hbmRzL3RhYmxlY21k cy5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWN1dG9yLmgiCiAjaW5jbHVkZSAiZm9yZWlnbi9m b3JlaWduLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCkBAIC03OSw2ICs4MSw3IEBACiAjZGVm aW5lIFNVQk9QVF9XQUxfUkVDRUlWRVJfVElNRU9VVAkJCTB4MDAwMTAwMDAKICNkZWZpbmUgU1VC T1BUX0xTTgkJCQkJMHgwMDAyMDAwMAogI2RlZmluZSBTVUJPUFRfT1JJR0lOCQkJCTB4MDAwNDAw MDAKKyNkZWZpbmUgU1VCT1BUX0NPTkZMSUNUX0xPR19ERVNUCTB4MDAwODAwMDAKIAogLyogY2hl Y2sgaWYgdGhlICd2YWwnIGhhcyAnYml0cycgc2V0ICovCiAjZGVmaW5lIElzU2V0KHZhbCwgYml0 cykgICgoKHZhbCkgJiAoYml0cykpID09IChiaXRzKSkKQEAgLTEwNyw2ICsxMTAsNyBAQCB0eXBl ZGVmIHN0cnVjdCBTdWJPcHRzCiAJYm9vbAkJcmV0YWluZGVhZHR1cGxlczsKIAlpbnQzMgkJbWF4 cmV0ZW50aW9uOwogCWNoYXIJICAgKm9yaWdpbjsKKwlDb25mbGljdExvZ0Rlc3QgY29uZmxpY3Rs b2dkZXN0OwogCVhMb2dSZWNQdHIJbHNuOwogCWNoYXIJICAgKndhbF9yZWNlaXZlcl90aW1lb3V0 OwogfSBTdWJPcHRzOwpAQCAtMTQwLDcgKzE0NCwxMSBAQCBzdGF0aWMgTGlzdCAqbWVyZ2VfcHVi bGljYXRpb25zKExpc3QgKm9sZHB1Ymxpc3QsIExpc3QgKm5ld3B1Ymxpc3QsIGJvb2wgYWRkcHVi LAogc3RhdGljIHZvaWQgUmVwb3J0U2xvdENvbm5lY3Rpb25FcnJvcihMaXN0ICpyc3RhdGVzLCBP aWQgc3ViaWQsIGNoYXIgKnNsb3RuYW1lLCBjaGFyICplcnIpOwogc3RhdGljIHZvaWQgQ2hlY2tB bHRlclN1Yk9wdGlvbihTdWJzY3JpcHRpb24gKnN1YiwgY29uc3QgY2hhciAqb3B0aW9uLAogCQkJ CQkJCQlib29sIHNsb3RfbmVlZHNfdXBkYXRlLCBib29sIGlzVG9wTGV2ZWwpOwotCitzdGF0aWMg Ym9vbCBhbHRlcl9zdWJfY29uZmxpY3Rsb2dkZXN0aW5hdGlvbihTdWJzY3JpcHRpb24gKnN1YiwK KwkJCQkJCQkJCQkJIENvbmZsaWN0TG9nRGVzdCBsb2dkZXN0LAorCQkJCQkJCQkJCQkgT2lkICpj b25mbGljdHRhYmxlcmVsaWQpOworc3RhdGljIHZvaWQgZHJvcF9zdWJfY29uZmxpY3RfbG9nX3Rh YmxlKE9pZCBzdWJpZCwgY2hhciAqc3VibmFtZSwKKwkJCQkJCQkJCQlPaWQgc3ViY29uZmxpY3Rs b2dyZWxpZCk7CiAKIC8qCiAgKiBDb21tb24gb3B0aW9uIHBhcnNpbmcgZnVuY3Rpb24gZm9yIENS RUFURSBhbmQgQUxURVIgU1VCU0NSSVBUSU9OIGNvbW1hbmRzLgpAQCAtMTk2LDYgKzIwNCw4IEBA IHBhcnNlX3N1YnNjcmlwdGlvbl9vcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwgTGlzdCAqc3Rt dF9vcHRpb25zLAogCQlvcHRzLT5tYXhyZXRlbnRpb24gPSAwOwogCWlmIChJc1NldChzdXBwb3J0 ZWRfb3B0cywgU1VCT1BUX09SSUdJTikpCiAJCW9wdHMtPm9yaWdpbiA9IHBzdHJkdXAoTE9HSUNB TFJFUF9PUklHSU5fQU5ZKTsKKwlpZiAoSXNTZXQoc3VwcG9ydGVkX29wdHMsIFNVQk9QVF9DT05G TElDVF9MT0dfREVTVCkpCisJCW9wdHMtPmNvbmZsaWN0bG9nZGVzdCA9IENPTkZMSUNUX0xPR19E RVNUX0xPRzsKIAogCS8qIFBhcnNlIG9wdGlvbnMgKi8KIAlmb3JlYWNoKGxjLCBzdG10X29wdGlv bnMpCkBAIC00MzEsNiArNDQxLDE4IEBAIHBhcnNlX3N1YnNjcmlwdGlvbl9vcHRpb25zKFBhcnNl U3RhdGUgKnBzdGF0ZSwgTGlzdCAqc3RtdF9vcHRpb25zLAogCQkJCQkJCQkJCSBQR0NfQkFDS0VO RCwgUEdDX1NfVEVTVCwgR1VDX0FDVElPTl9TRVQsCiAJCQkJCQkJCQkJIGZhbHNlLCAwLCBmYWxz ZSk7CiAJCX0KKwkJZWxzZSBpZiAoSXNTZXQoc3VwcG9ydGVkX29wdHMsIFNVQk9QVF9DT05GTElD VF9MT0dfREVTVCkgJiYKKwkJCQkgc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAiY29uZmxpY3RfbG9n X2Rlc3RpbmF0aW9uIikgPT0gMCkKKwkJeworCQkJY2hhciAqdmFsOworCisJCQlpZiAoSXNTZXQo b3B0cy0+c3BlY2lmaWVkX29wdHMsIFNVQk9QVF9DT05GTElDVF9MT0dfREVTVCkpCisJCQkJZXJy b3JDb25mbGljdGluZ0RlZkVsZW0oZGVmZWwsIHBzdGF0ZSk7CisKKwkJCXZhbCA9IGRlZkdldFN0 cmluZyhkZWZlbCk7CisJCQlvcHRzLT5jb25mbGljdGxvZ2Rlc3QgPSBHZXRDb25mbGljdExvZ0Rl c3QodmFsKTsKKwkJCW9wdHMtPnNwZWNpZmllZF9vcHRzIHw9IFNVQk9QVF9DT05GTElDVF9MT0df REVTVDsKKwkJfQogCQllbHNlCiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkoZXJyY29kZShFUlJD T0RFX1NZTlRBWF9FUlJPUiksCkBAIC02MjksNiArNjUxLDcgQEAgQ3JlYXRlU3Vic2NyaXB0aW9u KFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRlU3Vic2NyaXB0aW9uU3RtdCAqc3RtdCwKIAl1aW50 MzIJCXN1cHBvcnRlZF9vcHRzOwogCVN1Yk9wdHMJCW9wdHMgPSB7MH07CiAJQWNsUmVzdWx0CWFj bHJlc3VsdDsKKwlPaWQJCQlsb2dyZWxpZCA9IEludmFsaWRPaWQ7CiAKIAkvKgogCSAqIFBhcnNl IGFuZCBjaGVjayBvcHRpb25zLgpAQCAtNjQzLDcgKzY2Niw4IEBAIENyZWF0ZVN1YnNjcmlwdGlv bihQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVN1YnNjcmlwdGlvblN0bXQgKnN0bXQsCiAJCQkJ CSAgU1VCT1BUX1JVTl9BU19PV05FUiB8IFNVQk9QVF9GQUlMT1ZFUiB8CiAJCQkJCSAgU1VCT1BU X1JFVEFJTl9ERUFEX1RVUExFUyB8CiAJCQkJCSAgU1VCT1BUX01BWF9SRVRFTlRJT05fRFVSQVRJ T04gfAotCQkJCQkgIFNVQk9QVF9XQUxfUkVDRUlWRVJfVElNRU9VVCB8IFNVQk9QVF9PUklHSU4p OworCQkJCQkgIFNVQk9QVF9XQUxfUkVDRUlWRVJfVElNRU9VVCB8IFNVQk9QVF9PUklHSU4gfAor CQkJCQkgIFNVQk9QVF9DT05GTElDVF9MT0dfREVTVCk7CiAJcGFyc2Vfc3Vic2NyaXB0aW9uX29w dGlvbnMocHN0YXRlLCBzdG10LT5vcHRpb25zLCBzdXBwb3J0ZWRfb3B0cywgJm9wdHMpOwogCiAJ LyoKQEAgLTgxNyw2ICs4NDEsMjAgQEAgQ3JlYXRlU3Vic2NyaXB0aW9uKFBhcnNlU3RhdGUgKnBz dGF0ZSwgQ3JlYXRlU3Vic2NyaXB0aW9uU3RtdCAqc3RtdCwKIAl2YWx1ZXNbQW51bV9wZ19zdWJz Y3JpcHRpb25fc3Vib3JpZ2luIC0gMV0gPQogCQlDU3RyaW5nR2V0VGV4dERhdHVtKG9wdHMub3Jp Z2luKTsKIAorCXZhbHVlc1tBbnVtX3BnX3N1YnNjcmlwdGlvbl9zdWJjb25mbGljdGxvZ2Rlc3Qg LSAxXSA9CisJCUNTdHJpbmdHZXRUZXh0RGF0dW0oQ29uZmxpY3RMb2dEZXN0TmFtZXNbb3B0cy5j b25mbGljdGxvZ2Rlc3RdKTsKKworCS8qCisJICogV2UgY3JlYXRlIHRoZSBjb25mbGljdCBsb2cg dGFibGUgaGVyZSwgaWYgcmVxdWlyZWQsIHNvIHRoYXQgaXRzIHJlbGF0aW9uCisJICogT0lEIGNh biBiZSBzdG9yZWQgd2hlbiBpbnNlcnRpbmcgdGhlIHBnX3N1YnNjcmlwdGlvbiB0dXBsZSBiZWxv dy4KKwkgKi8KKwlpZiAoQ09ORkxJQ1RTX0xPR0dFRF9UT19UQUJMRShvcHRzLmNvbmZsaWN0bG9n ZGVzdCkpCisJCWxvZ3JlbGlkID0gY3JlYXRlX2NvbmZsaWN0X2xvZ190YWJsZShzdWJpZCwgc3Rt dC0+c3VibmFtZSwgb3duZXIpOworCisJLyogU3RvcmUgdGFibGUgT0lEIGluIHRoZSBjYXRhbG9n LiAqLworCXZhbHVlc1tBbnVtX3BnX3N1YnNjcmlwdGlvbl9zdWJjb25mbGljdGxvZ3JlbGlkIC0g MV0gPQorCQkJCQkJT2JqZWN0SWRHZXREYXR1bShsb2dyZWxpZCk7CisKIAl0dXAgPSBoZWFwX2Zv cm1fdHVwbGUoUmVsYXRpb25HZXREZXNjcihyZWwpLCB2YWx1ZXMsIG51bGxzKTsKIAogCS8qIElu c2VydCB0dXBsZSBpbnRvIGNhdGFsb2cuICovCkBAIC04MzcsNiArODc1LDI1IEBAIENyZWF0ZVN1 YnNjcmlwdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVN1YnNjcmlwdGlvblN0bXQgKnN0 bXQsCiAJCXJlY29yZERlcGVuZGVuY3lPbigmbXlzZWxmLCAmcmVmZXJlbmNlZCwgREVQRU5ERU5D WV9OT1JNQUwpOwogCX0KIAorCS8qCisJICogRXN0YWJsaXNoIGFuIGludGVybmFsIGRlcGVuZGVu Y3kgYmV0d2VlbiBjb25mbGljdCBsb2cgdGFibGUgYW5kCisJICogc3Vic2NyaXB0aW9uLgorCSAq CisJICogV2UgdXNlIERFUEVOREVOQ1lfSU5URVJOQUwgdG8gc2lnbmlmeSB0aGF0IHRoZSB0YWJs ZSdzIGxpZmVjeWNsZSBpcworCSAqIHN0cmljdGx5IHRpZWQgdG8gdGhlIHN1YnNjcmlwdGlvbiwg c2ltaWxhciB0byBob3cgYSBUT0FTVCB0YWJsZSByZWxhdGVzCisJICogdG8gaXRzIG1haW4gdGFi bGUgb3IgYSBzZXF1ZW5jZSByZWxhdGVzIHRvIGFuIGlkZW50aXR5IGNvbHVtbi4KKwkgKgorCSAq IFRoaXMgZW5zdXJlcyB0aGUgY29uZmxpY3QgbG9nIHRhYmxlIGlzIGF1dG9tYXRpY2FsbHkgcmVh cGVkIGR1cmluZyBhCisJICogRFJPUCBTVUJTQ1JJUFRJT04gdmlhIHBlcmZvcm1EZWxldGlvbigp LgorCSAqLworCWlmIChPaWRJc1ZhbGlkKGxvZ3JlbGlkKSkKKwl7CisJCU9iamVjdEFkZHJlc3Mg Y2x0YWRkcjsKKworCQlPYmplY3RBZGRyZXNzU2V0KGNsdGFkZHIsIFJlbGF0aW9uUmVsYXRpb25J ZCwgbG9ncmVsaWQpOworCQlyZWNvcmREZXBlbmRlbmN5T24oJmNsdGFkZHIsICZteXNlbGYsIERF UEVOREVOQ1lfSU5URVJOQUwpOworCX0KKwogCS8qCiAJICogQSByZXBsaWNhdGlvbiBvcmlnaW4g aXMgY3VycmVudGx5IGNyZWF0ZWQgZm9yIGFsbCBzdWJzY3JpcHRpb25zLAogCSAqIGluY2x1ZGlu ZyB0aG9zZSB0aGF0IG9ubHkgY29udGFpbiBzZXF1ZW5jZXMgb3IgYXJlIG90aGVyd2lzZSBlbXB0 eS4KQEAgLTE0MDYsNiArMTQ2Myw3MSBAQCBDaGVja0FsdGVyU3ViT3B0aW9uKFN1YnNjcmlwdGlv biAqc3ViLCBjb25zdCBjaGFyICpvcHRpb24sCiAJfQogfQogCisvKgorICogYWx0ZXJfc3ViX2Nv bmZsaWN0bG9nZGVzdGluYXRpb24KKyAqCisgKiBXaGVuIHRoZSBzdWJzY3JpcHRpb24ncyAnY29u ZmxpY3RfbG9nX2Rlc3RpbmF0aW9uJyBpcyBjaGFuZ2VkLCB1cGRhdGUgdGhlCisgKiBjb25mbGlj dCBsb2cgdGFibGUgaWYgcmVxdWlyZWQuCisgKgorICogSWYgdGhlIG5ldyBkZXN0aW5hdGlvbiBu byBsb25nZXIgcmVxdWlyZXMgYSBjb25mbGljdCBsb2cgdGFibGUsIHRoZSBleGlzdGluZworICog Y29uZmxpY3QgbG9nIHRhYmxlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3Vic2NyaXB0aW9uIGlzIHJl bW92ZWQgdmlhIGludGVybmFsCisgKiBkZXBlbmRlbmN5IGNsZWFudXAgdG8gcHJldmVudCBvcnBo YW5lZCByZWxhdGlvbnMuCisgKgorICogT24gc3VjY2VzcywgKmNvbmZsaWN0dGFibGVyZWxpZCBp cyBzZXQgdG8gdGhlIE9JRCBvZiB0aGUgY29uZmxpY3QgbG9nIHRhYmxlCisgKiB0aGF0IHdhcyBj cmVhdGVkIG9yIHZhbGlkYXRlZCwgb3IgdG8gSW52YWxpZE9pZCBpZiBubyB0YWJsZSBpcyByZXF1 aXJlZC4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHN1YnNjcmlwdGlvbidzIGNvbmZsaWN0 IGxvZyB0YWJsZSByZWZlcmVuY2UgbXVzdCBiZQorICogdXBkYXRlZCBhcyBhIHJlc3VsdCBvZiB0 aGUgZGVzdGluYXRpb24gY2hhbmdlOyBmYWxzZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBib29s CithbHRlcl9zdWJfY29uZmxpY3Rsb2dkZXN0aW5hdGlvbihTdWJzY3JpcHRpb24gKnN1YiwgQ29u ZmxpY3RMb2dEZXN0IGxvZ2Rlc3QsCisJCQkJCQkJCSBPaWQgKmNvbmZsaWN0dGFibGVyZWxpZCkK K3sKKwlDb25mbGljdExvZ0Rlc3Qgb2xkX2Rlc3QgPSBHZXRDb25mbGljdExvZ0Rlc3Qoc3ViLT5j b25mbGljdGxvZ2Rlc3QpOworCWJvb2wJCXdhbnRfdGFibGU7CisJYm9vbAkJaGFzX29sZHRhYmxl OworCWJvb2wJCXVwZGF0ZV9yZWxpZCA9IGZhbHNlOworCU9pZAkJCXJlbGlkID0gSW52YWxpZE9p ZDsKKworCXdhbnRfdGFibGUgPSBDT05GTElDVFNfTE9HR0VEX1RPX1RBQkxFKGxvZ2Rlc3QpOwor CWhhc19vbGR0YWJsZSA9IENPTkZMSUNUU19MT0dHRURfVE9fVEFCTEUob2xkX2Rlc3QpOworCisJ aWYgKGhhc19vbGR0YWJsZSkKKwl7CisJCS8qIFRoZXJlIGlzIGEgY29uZmxpY3QgbG9nIHRhYmxl IGFscmVhZHkuICovCisJCWlmICghd2FudF90YWJsZSkKKwkJeworCQkJZHJvcF9zdWJfY29uZmxp Y3RfbG9nX3RhYmxlKHN1Yi0+b2lkLCBzdWItPm5hbWUsCisJCQkJCQkJCQkJc3ViLT5jb25mbGlj dGxvZ3JlbGlkKTsKKwkJCXVwZGF0ZV9yZWxpZCA9IHRydWU7CisJCX0KKwl9CisJZWxzZQorCXsK KwkJLyogVGhlcmUgd2FzIG5vIHByZXZpb3VzIGNvbmZsaWN0IGxvZyB0YWJsZS4gKi8KKwkJaWYg KHdhbnRfdGFibGUpCisJCXsKKwkJCU9iamVjdEFkZHJlc3MgY2x0YWRkcjsKKwkJCU9iamVjdEFk ZHJlc3Mgc3Vib2JqOworCisJCQlyZWxpZCA9IGNyZWF0ZV9jb25mbGljdF9sb2dfdGFibGUoc3Vi LT5vaWQsIHN1Yi0+bmFtZSwgc3ViLT5vd25lcik7CisJCQl1cGRhdGVfcmVsaWQgPSB0cnVlOwor CisJCQkvKgorCQkJICogRXN0YWJsaXNoIGFuIGludGVybmFsIGRlcGVuZGVuY3kgYmV0d2VlbiB0 aGUgY29uZmxpY3QgbG9nIHRhYmxlCisJCQkgKiBhbmQgdGhlIHN1YnNjcmlwdGlvbi4gIEZvciBk ZXRhaWxzIHJlZmVyIGNvbW1lbnRzIGluCisJCQkgKiBDcmVhdGVTdWJzY3JpcHRpb24gZnVuY3Rp b24uCisJCQkgKi8KKwkJCU9iamVjdEFkZHJlc3NTZXQoY2x0YWRkciwgUmVsYXRpb25SZWxhdGlv bklkLCByZWxpZCk7CisJCQlPYmplY3RBZGRyZXNzU2V0KHN1Ym9iaiwgU3Vic2NyaXB0aW9uUmVs YXRpb25JZCwgc3ViLT5vaWQpOworCQkJcmVjb3JkRGVwZW5kZW5jeU9uKCZjbHRhZGRyLCAmc3Vi b2JqLCBERVBFTkRFTkNZX0lOVEVSTkFMKTsKKwkJfQorCX0KKworCSpjb25mbGljdHRhYmxlcmVs aWQgPSByZWxpZDsKKwlyZXR1cm4gdXBkYXRlX3JlbGlkOworfQorCiAvKgogICogQWx0ZXIgdGhl IGV4aXN0aW5nIHN1YnNjcmlwdGlvbi4KICAqLwpAQCAtMTUwMSw3ICsxNjIzLDggQEAgQWx0ZXJT dWJzY3JpcHRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBBbHRlclN1YnNjcmlwdGlvblN0bXQgKnN0 bXQsCiAJCQkJCQkJCSAgU1VCT1BUX1JFVEFJTl9ERUFEX1RVUExFUyB8CiAJCQkJCQkJCSAgU1VC T1BUX01BWF9SRVRFTlRJT05fRFVSQVRJT04gfAogCQkJCQkJCQkgIFNVQk9QVF9XQUxfUkVDRUlW RVJfVElNRU9VVCB8Ci0JCQkJCQkJCSAgU1VCT1BUX09SSUdJTik7CisJCQkJCQkJCSAgU1VCT1BU X09SSUdJTiB8CisJCQkJCQkJCSAgU1VCT1BUX0NPTkZMSUNUX0xPR19ERVNUKTsKIAogCQkJCXBh cnNlX3N1YnNjcmlwdGlvbl9vcHRpb25zKHBzdGF0ZSwgc3RtdC0+b3B0aW9ucywKIAkJCQkJCQkJ CQkgICBzdXBwb3J0ZWRfb3B0cywgJm9wdHMpOwpAQCAtMTc2Myw2ICsxODg2LDMzIEBAIEFsdGVy U3Vic2NyaXB0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQWx0ZXJTdWJzY3JpcHRpb25TdG10ICpz dG10LAogCQkJCQlyZXBsYWNlc1tBbnVtX3BnX3N1YnNjcmlwdGlvbl9zdWJ3YWxyY3Z0aW1lb3V0 IC0gMV0gPSB0cnVlOwogCQkJCX0KIAorCQkJCWlmIChJc1NldChvcHRzLnNwZWNpZmllZF9vcHRz LCBTVUJPUFRfQ09ORkxJQ1RfTE9HX0RFU1QpKQorCQkJCXsKKwkJCQkJQ29uZmxpY3RMb2dEZXN0 IG9sZF9kZXN0ID0KKwkJCQkJCQlHZXRDb25mbGljdExvZ0Rlc3Qoc3ViLT5jb25mbGljdGxvZ2Rl c3QpOworCisJCQkJCWlmIChvcHRzLmNvbmZsaWN0bG9nZGVzdCAhPSBvbGRfZGVzdCkKKwkJCQkJ eworCQkJCQkJYm9vbAkJdXBkYXRlX3JlbGlkOworCQkJCQkJT2lkCQkJcmVsaWQgPSBJbnZhbGlk T2lkOworCisJCQkJCQl2YWx1ZXNbQW51bV9wZ19zdWJzY3JpcHRpb25fc3ViY29uZmxpY3Rsb2dk ZXN0IC0gMV0gPQorCQkJCQkJCUNTdHJpbmdHZXRUZXh0RGF0dW0oQ29uZmxpY3RMb2dEZXN0TmFt ZXNbb3B0cy5jb25mbGljdGxvZ2Rlc3RdKTsKKwkJCQkJCXJlcGxhY2VzW0FudW1fcGdfc3Vic2Ny aXB0aW9uX3N1YmNvbmZsaWN0bG9nZGVzdCAtIDFdID0gdHJ1ZTsKKworCQkJCQkJdXBkYXRlX3Jl bGlkID0gYWx0ZXJfc3ViX2NvbmZsaWN0bG9nZGVzdGluYXRpb24oc3ViLAorCQkJCQkJCQkJCQkJ CQkJCQkJb3B0cy5jb25mbGljdGxvZ2Rlc3QsCisJCQkJCQkJCQkJCQkJCQkJCQkmcmVsaWQpOwor CQkJCQkJaWYgKHVwZGF0ZV9yZWxpZCkKKwkJCQkJCXsKKwkJCQkJCQl2YWx1ZXNbQW51bV9wZ19z dWJzY3JpcHRpb25fc3ViY29uZmxpY3Rsb2dyZWxpZCAtIDFdID0KKwkJCQkJCQkJT2JqZWN0SWRH ZXREYXR1bShyZWxpZCk7CisJCQkJCQkJcmVwbGFjZXNbQW51bV9wZ19zdWJzY3JpcHRpb25fc3Vi Y29uZmxpY3Rsb2dyZWxpZCAtIDFdID0KKwkJCQkJCQkJdHJ1ZTsKKwkJCQkJCX0KKwkJCQkJfQor CQkJCX0KKwogCQkJCXVwZGF0ZV90dXBsZSA9IHRydWU7CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC0y MTc4LDYgKzIzMjgsNTEgQEAgQWx0ZXJTdWJzY3JpcHRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBB bHRlclN1YnNjcmlwdGlvblN0bXQgKnN0bXQsCiAJcmV0dXJuIG15c2VsZjsKIH0KIAorLyoKKyAq IERyb3Agc3Vic2NyaXB0aW9uJ3MgY29uZmxpY3QgbG9nIHRhYmxlCisgKgorICogVGhlIGNvbmZs aWN0IGxvZyB0YWJsZSBpcyByZWdpc3RlcmVkIGFzIGFuIGludGVybmFsIGRlcGVuZGVuY3kgb2Yg dGhlCisgKiBzdWJzY3JpcHRpb24uIFRoaXMgZnVuY3Rpb24gcmVtb3ZlcyB0aGUgZGVwZW5kZW5j eSBieSBwZXJmb3JtaW5nIGEKKyAqIGNhc2NhZGluZyBkZWxldGlvbiBvbiB0aGUgc3Vic2NyaXB0 aW9uIG9iamVjdCwgd2hpY2ggaW4gdHVybiBkcm9wcyB0aGUKKyAqIGFzc29jaWF0ZWQgY29uZmxp Y3QgbG9nIHRhYmxlLgorICoKKyAqIFRoaXMgaXMgdXNlZCB0byBjbGVhbiB1cCBjb25mbGljdCBs b2cgdGFibGVzIHRoYXQgYXJlIG5vIGxvbmdlciByZXF1aXJlZCwKKyAqIHByZXZlbnRpbmcgYWNj dW11bGF0aW9uIG9mIHN0YWxlIG9yIG9ycGhhbmVkIHJlbGF0aW9ucy4KKyAqCisgKiBOT1RFOgor ICogT25seSBjb25mbGljdCBsb2cgdGFibGVzIGFyZSBjdXJyZW50bHkgbWFuYWdlZCB2aWEgdGhp cyBpbnRlcm5hbCBkZXBlbmRlbmN5CisgKiBtZWNoYW5pc20uCisgKi8KK3N0YXRpYyB2b2lkCitk cm9wX3N1Yl9jb25mbGljdF9sb2dfdGFibGUoT2lkIHN1YmlkLCBjaGFyICpzdWJuYW1lLCBPaWQg c3ViY29uZmxpY3Rsb2dyZWxpZCkKK3sKKwkvKiBEcm9wIGFueSBkZXBlbmRlbnQgY29uZmxpY3Qg bG9nIHRhYmxlICovCisJaWYgKE9pZElzVmFsaWQoc3ViY29uZmxpY3Rsb2dyZWxpZCkpCisJewor CQlPYmplY3RBZGRyZXNzIG9iamVjdDsKKwkJY2hhciAJCSAqY29uZmxpY3RyZWxuYW1lOworCisJ CWNvbmZsaWN0cmVsbmFtZSA9IGdldF9yZWxfbmFtZShzdWJjb25mbGljdGxvZ3JlbGlkKTsKKwkJ aWYgKGNvbmZsaWN0cmVsbmFtZSA9PSBOVUxMKQorCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1 cCBmYWlsZWQgZm9yIGluZGV4ICV1IiwKKwkJCQkgc3ViY29uZmxpY3Rsb2dyZWxpZCk7CisKKwkJ LyoKKwkJICogQnkgdXNpbmcgUEVSRk9STV9ERUxFVElPTl9TS0lQX09SSUdJTkFMLCB3ZSBlbnN1 cmUgdGhhdCBvbmx5IHRoZQorCQkgKiBjb25mbGljdCBsb2cgdGFibGUgaXMgZGVsZXRlZCB3aGls ZSB0aGUgc3Vic2NyaXB0aW9uIHJlbWFpbnMuCisJCSAqLworCQlPYmplY3RBZGRyZXNzU2V0KG9i amVjdCwgU3Vic2NyaXB0aW9uUmVsYXRpb25JZCwgc3ViaWQpOworCQlwZXJmb3JtRGVsZXRpb24o Jm9iamVjdCwgRFJPUF9DQVNDQURFLAorCQkJCQkJUEVSRk9STV9ERUxFVElPTl9JTlRFUk5BTCB8 CisJCQkJCQlQRVJGT1JNX0RFTEVUSU9OX1NLSVBfT1JJR0lOQUwpOworCisJCWVyZXBvcnQoTk9U SUNFLAorCQkJCWVycm1zZygiZHJvcHBlZCBjb25mbGljdCBsb2cgdGFibGUgXCIlc1wiIGZvciBz dWJzY3JpcHRpb24gXCIlc1wiIiwKKwkJCQkJCWdldF9xdWFsaWZpZWRfb2JqbmFtZShQR19DT05G TElDVF9OQU1FU1BBQ0UsIGNvbmZsaWN0cmVsbmFtZSksCisJCQkJCQlzdWJuYW1lKSk7CisJfQor fQorCiAvKgogICogRHJvcCBhIHN1YnNjcmlwdGlvbgogICovCkBAIC0yMTg5LDYgKzIzODQsNyBA QCBEcm9wU3Vic2NyaXB0aW9uKERyb3BTdWJzY3JpcHRpb25TdG10ICpzdG10LCBib29sIGlzVG9w TGV2ZWwpCiAJSGVhcFR1cGxlCXR1cDsKIAlPaWQJCQlzdWJpZDsKIAlPaWQJCQlzdWJvd25lcjsK KwlPaWQJCQlzdWJjb25mbGljdGxvZ3JlbGlkOwogCURhdHVtCQlkYXR1bTsKIAlib29sCQlpc251 bGw7CiAJY2hhcgkgICAqc3VibmFtZTsKQEAgLTIyMzQsNiArMjQzMCw3IEBAIERyb3BTdWJzY3Jp cHRpb24oRHJvcFN1YnNjcmlwdGlvblN0bXQgKnN0bXQsIGJvb2wgaXNUb3BMZXZlbCkKIAlmb3Jt ID0gKEZvcm1fcGdfc3Vic2NyaXB0aW9uKSBHRVRTVFJVQ1QodHVwKTsKIAlzdWJpZCA9IGZvcm0t Pm9pZDsKIAlzdWJvd25lciA9IGZvcm0tPnN1Ym93bmVyOworCXN1YmNvbmZsaWN0bG9ncmVsaWQg PSBmb3JtLT5zdWJjb25mbGljdGxvZ3JlbGlkOwogCW11c3RfdXNlX3Bhc3N3b3JkID0gIXN1cGVy dXNlcl9hcmcoc3Vib3duZXIpICYmIGZvcm0tPnN1YnBhc3N3b3JkcmVxdWlyZWQ7CiAKIAkvKiBt dXN0IGJlIG93bmVyICovCkBAIC0yMzg4LDYgKzI1ODUsOCBAQCBEcm9wU3Vic2NyaXB0aW9uKERy b3BTdWJzY3JpcHRpb25TdG10ICpzdG10LCBib29sIGlzVG9wTGV2ZWwpCiAJZGVsZXRlRGVwZW5k ZW5jeVJlY29yZHNGb3IoU3Vic2NyaXB0aW9uUmVsYXRpb25JZCwgc3ViaWQsIGZhbHNlKTsKIAlk ZWxldGVTaGFyZWREZXBlbmRlbmN5UmVjb3Jkc0ZvcihTdWJzY3JpcHRpb25SZWxhdGlvbklkLCBz dWJpZCwgMCk7CiAKKwlkcm9wX3N1Yl9jb25mbGljdF9sb2dfdGFibGUoc3ViaWQsIHN1Ym5hbWUs IHN1YmNvbmZsaWN0bG9ncmVsaWQpOworCiAJLyogUmVtb3ZlIGFueSBhc3NvY2lhdGVkIHJlbGF0 aW9uIHN5bmNocm9uaXphdGlvbiBzdGF0ZXMuICovCiAJUmVtb3ZlU3Vic2NyaXB0aW9uUmVsKHN1 YmlkLCBJbnZhbGlkT2lkKTsKIApAQCAtMjYyMSw2ICsyODIwLDExIEBAIEFsdGVyU3Vic2NyaXB0 aW9uT3duZXJfaW50ZXJuYWwoUmVsYXRpb24gcmVsLCBIZWFwVHVwbGUgdHVwLCBPaWQgbmV3T3du ZXJJZCkKIAlmb3JtLT5zdWJvd25lciA9IG5ld093bmVySWQ7CiAJQ2F0YWxvZ1R1cGxlVXBkYXRl KHJlbCwgJnR1cC0+dF9zZWxmLCB0dXApOwogCisJLyogVXBkYXRlIG93bmVyIG9mIHRoZSBjb25m bGljdCBsb2cgdGFibGUgaWYgaXQgZXhpc3RzLiAqLworCWlmIChPaWRJc1ZhbGlkKGZvcm0tPnN1 YmNvbmZsaWN0bG9ncmVsaWQpKQorCQlBVEV4ZWNDaGFuZ2VPd25lcihmb3JtLT5zdWJjb25mbGlj dGxvZ3JlbGlkLCBuZXdPd25lcklkLCB0cnVlLAorCQkJCQkJICBBY2Nlc3NFeGNsdXNpdmVMb2Nr KTsKKwogCS8qIFVwZGF0ZSBvd25lciBkZXBlbmRlbmN5IHJlZmVyZW5jZSAqLwogCWNoYW5nZURl cGVuZGVuY3lPbk93bmVyKFN1YnNjcmlwdGlvblJlbGF0aW9uSWQsCiAJCQkJCQkJZm9ybS0+b2lk LApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgYi9zcmMvYmFj a2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwppbmRleCBhMTg0NTI0MGE5OC4uMGEwY2EyYjg1MGUg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCisrKyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCkBAIC0yNDU3LDkgKzI0NTcsMTEgQEAgdHJ1bmNh dGVfY2hlY2tfcmVsKE9pZCByZWxpZCwgRm9ybV9wZ19jbGFzcyByZWx0dXBsZSkKIAkgKiBwZ19s YXJnZW9iamVjdCBhbmQgcGdfbGFyZ2VvYmplY3RfbWV0YWRhdGEgdG8gYmUgdHJ1bmNhdGVkIGFz IHBhcnQgb2YKIAkgKiBwZ191cGdyYWRlLCBiZWNhdXNlIHdlIG5lZWQgdG8gY2hhbmdlIGl0cyBy ZWxmaWxlbm9kZSB0byBtYXRjaCB0aGUgb2xkCiAJICogY2x1c3RlciwgYW5kIGFsbG93aW5nIGEg VFJVTkNBVEUgY29tbWFuZCB0byBiZSBleGVjdXRlZCBpcyB0aGUgZWFzaWVzdAotCSAqIHdheSBv ZiBkb2luZyB0aGF0LgorCSAqIHdheSBvZiBkb2luZyB0aGF0LiBXZSBhbHNvIGFsbG93IFRSVU5D QVRFIG9uIHRoZSBjb25mbGljdCBsb2cgdGFibGVzLAorCSAqIHRvIHBlcm1pdCB1c2VycyB0byBt YW51YWxseSBwcnVuZSBjb25mbGljdCBkYXRhIHRvIG1hbmFnZSBkaXNrIHNwYWNlLgogCSAqLwot CWlmICghYWxsb3dTeXN0ZW1UYWJsZU1vZHMgJiYgSXNTeXN0ZW1DbGFzcyhyZWxpZCwgcmVsdHVw bGUpCisJaWYgKCFhbGxvd1N5c3RlbVRhYmxlTW9kcyAmJiBJc1N5c3RlbUNsYXNzKHJlbGlkLCBy ZWx0dXBsZSkgJiYKKwkJIUlzQ29uZmxpY3RMb2dUYWJsZUNsYXNzKHJlbHR1cGxlKQogCQkmJiAo IUlzQmluYXJ5VXBncmFkZSB8fAogCQkJKHJlbGlkICE9IExhcmdlT2JqZWN0UmVsYXRpb25JZCAm JgogCQkJIHJlbGlkICE9IExhcmdlT2JqZWN0TWV0YWRhdGFSZWxhdGlvbklkKSkpCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0 b3IvZXhlY01haW4uYwppbmRleCA0YjMwZjc2ODY4MC4uZjg3ZWY2NWYzNDMgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0 b3IvZXhlY01haW4uYwpAQCAtMTE4Nyw2ICsxMTg3LDI0IEBAIENoZWNrVmFsaWRSZXN1bHRSZWwo UmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5mbywgQ21kVHlwZSBvcGVyYXRpb24sCiAJCQkJCQkJ UmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVzdWx0UmVsKSkpKTsKIAkJCWJyZWFrOwogCX0KKwor CS8qCisJICogQ29uZmxpY3QgbG9nIHRhYmxlcyBhcmUgbWFuYWdlZCBieSB0aGUgc3lzdGVtIHRv IHJlY29yZCBsb2dpY2FsCisJICogcmVwbGljYXRpb24gY29uZmxpY3RzLiAgV2UgYWxsb3cgREVM RVRFIGFuZCBUUlVOQ0FURSB0byBwZXJtaXQgdXNlcnMgdG8KKwkgKiBtYW51YWxseSBwcnVuZSB0 aGVzZSBsb2dzLCBidXQgbWFudWFsIGRhdGEgaW5zZXJ0aW9uIG9yIG1vZGlmaWNhdGlvbgorCSAq IChJTlNFUlQsIFVQREFURSwgTUVSR0UpIGlzIHByb2hpYml0ZWQgdG8gbWFpbnRhaW4gdGhlIGlu dGVncml0eSBvZiB0aGUKKwkgKiBzeXN0ZW0tZ2VuZXJhdGVkIGxvZ3MuCisJICoKKwkgKiBTaW5j ZSBUUlVOQ0FURSBpcyBoYW5kbGVkIGFzIGEgc2VwYXJhdGUgdXRpbGl0eSBjb21tYW5kLCB3ZSBv bmx5IG5lZWQKKwkgKiB0byBleHBsaWNpdGx5IHBlcm1pdCBDTURfREVMRVRFIGhlcmUuCisJICov CisJaWYgKElzQ29uZmxpY3RMb2dUYWJsZU5hbWVzcGFjZShSZWxhdGlvbkdldE5hbWVzcGFjZShy ZXN1bHRSZWwpKSAmJgorCQlvcGVyYXRpb24gIT0gQ01EX0RFTEVURSkKKwkJZXJlcG9ydChFUlJP UiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX1dST05HX09CSkVDVF9UWVBFKSwKKwkJCQkgZXJybXNn KCJjYW5ub3QgbW9kaWZ5IG9yIGluc2VydCBkYXRhIGludG8gY29uZmxpY3QgbG9nIHRhYmxlIFwi JXNcIiIsCisJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZXN1bHRSZWwpKSwKKwkJCQkg ZXJyZGV0YWlsKCJDb25mbGljdCBsb2cgdGFibGVzIGFyZSBzeXN0ZW0tbWFuYWdlZCBhbmQgb25s eSBzdXBwb3J0IGNsZWFudXAgdmlhIERFTEVURSBvciBUUlVOQ0FURS4iKSkpOwogfQogCiAvKgpA QCAtMTI1OCw2ICsxMjc2LDE2IEBAIENoZWNrVmFsaWRSb3dNYXJrUmVsKFJlbGF0aW9uIHJlbCwg Um93TWFya1R5cGUgbWFya1R5cGUpCiAJCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVs KSkpKTsKIAkJCWJyZWFrOwogCX0KKworCS8qCisJICogQ29uZmxpY3QgbG9nIHRhYmxlcyBhcmUg bWFuYWdlZCBieSB0aGUgc3lzdGVtIHRvIHJlY29yZCBsb2dpY2FsCisJICogcmVwbGljYXRpb24g Y29uZmxpY3RzLgorCSAqLworCWlmIChJc0NvbmZsaWN0TG9nVGFibGVOYW1lc3BhY2UoUmVsYXRp b25HZXROYW1lc3BhY2UocmVsKSkpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJS Q09ERV9XUk9OR19PQkpFQ1RfVFlQRSksCisJCQkJIGVycm1zZygiY2Fubm90IGxvY2sgcm93cyBp biB0aGUgY29uZmxpY3QgbG9nIHRhYmxlIFwiJXNcIiIsCisJCQkJCQlSZWxhdGlvbkdldFJlbGF0 aW9uTmFtZShyZWwpKSkpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9jb25mbGljdC5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC9jb25mbGljdC5jCmluZGV4IDFmOGQ2N2ZkZDkwLi42NWEzMjUxOTRlZCAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9jb25mbGljdC5jCisrKyBiL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvY29uZmxpY3QuYwpAQCAtMTcsNiArMTcsMTIgQEAKICNp bmNsdWRlICJhY2Nlc3MvY29tbWl0X3RzLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2dlbmFtLmgiCiAj aW5jbHVkZSAiYWNjZXNzL3RhYmxlYW0uaCIKKyNpbmNsdWRlICJjYXRhbG9nL2RlcGVuZGVuY3ku aCIKKyNpbmNsdWRlICJjYXRhbG9nL2hlYXAuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2FtLmgi CisjaW5jbHVkZSAiY2F0YWxvZy9wZ19uYW1lc3BhY2UuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3Rv YXN0aW5nLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5oIgogI2luY2x1 ZGUgImV4ZWN1dG9yL2V4ZWN1dG9yLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAi cmVwbGljYXRpb24vY29uZmxpY3QuaCIKQEAgLTI0LDYgKzMwLDUwIEBACiAjaW5jbHVkZSAic3Rv cmFnZS9sbWdyLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAKKy8qCisgKiBTdHJp bmcgcmVwcmVzZW50YXRpb25zIGZvciB0aGUgc3VwcG9ydGVkIGNvbmZsaWN0IGxvZ2dpbmcgZGVz dGluYXRpb25zLgorICovCitjb25zdCBjaGFyICpjb25zdCBDb25mbGljdExvZ0Rlc3ROYW1lc1td ID0geworCVtDT05GTElDVF9MT0dfREVTVF9MT0ddID0gImxvZyIsCisJW0NPTkZMSUNUX0xPR19E RVNUX1RBQkxFXSA9ICJ0YWJsZSIsCisJW0NPTkZMSUNUX0xPR19ERVNUX0FMTF0gPSAiYWxsIgor fTsKKworU3RhdGljQXNzZXJ0RGVjbChsZW5ndGhvZihDb25mbGljdExvZ0Rlc3ROYW1lcykgPT0g Q09ORkxJQ1RfTE9HX0RFU1RfQUxMICsgMSwKKwkJCQkgIkNvbmZsaWN0TG9nRGVzdE5hbWVzIGxl bmd0aCBtaXNtYXRjaCIpOworCisKKy8qIFN0cnVjdHVyZSB0byBob2xkIG1ldGFkYXRhIGZvciBv bmUgY29sdW1uIG9mIHRoZSBjb25mbGljdCBsb2cgdGFibGUgKi8KK3R5cGVkZWYgc3RydWN0IENv bmZsaWN0TG9nQ29sdW1uRGVmCit7CisJY29uc3QgY2hhciAqYXR0bmFtZTsgICAgLyogQ29sdW1u IG5hbWUgKi8KKwlPaWQgICAgICAgICBhdHR0eXBpZDsgICAvKiBEYXRhIHR5cGUgT0lEICovCit9 IENvbmZsaWN0TG9nQ29sdW1uRGVmOworCisvKgorICogU2NoZW1hIGRlZmluaXRpb24gZm9yIGNv bmZsaWN0IGxvZyB0YWJsZXMuCisgKgorICogRGVmaW5lcyB0aGUgZml4ZWQgc2NoZW1hIG9mIHRo ZSBwZXItc3Vic2NyaXB0aW9uIGNvbmZsaWN0IGxvZyB0YWJsZSBjcmVhdGVkCisgKiBpbiB0aGUg cGdfY29uZmxpY3QgbmFtZXNwYWNlLiBFYWNoIGVudHJ5IHNwZWNpZmllcyB0aGUgY29sdW1uIG5h bWUgYW5kIGl0cworICogdHlwZSBPSUQ7IHRoZSB0YWJsZSBpcyBjcmVhdGVkIGluIHRoaXMgY29s dW1uIG9yZGVyIGJ5CisgKiBjcmVhdGVfY29uZmxpY3RfbG9nX3RhYmxlKCkuCisgKi8KK3N0YXRp YyBjb25zdCBDb25mbGljdExvZ0NvbHVtbkRlZiBDb25mbGljdExvZ1NjaGVtYVtdID0geworCXsg LmF0dG5hbWUgPSAicmVsaWQiLCAgICAgICAgICAgIC5hdHR0eXBpZCA9IE9JRE9JRCB9LAorCXsg LmF0dG5hbWUgPSAic2NoZW1hbmFtZSIsICAgICAgIC5hdHR0eXBpZCA9IFRFWFRPSUQgfSwKKwl7 IC5hdHRuYW1lID0gInJlbG5hbWUiLCAgICAgICAgICAuYXR0dHlwaWQgPSBURVhUT0lEIH0sCisJ eyAuYXR0bmFtZSA9ICJjb25mbGljdF90eXBlIiwgICAgLmF0dHR5cGlkID0gVEVYVE9JRCB9LAor CXsgLmF0dG5hbWUgPSAicmVtb3RlX3hpZCIsICAgICAgIC5hdHR0eXBpZCA9IFhJRE9JRCB9LAor CXsgLmF0dG5hbWUgPSAicmVtb3RlX2NvbW1pdF9sc24iLC5hdHR0eXBpZCA9IExTTk9JRCB9LAor CXsgLmF0dG5hbWUgPSAicmVtb3RlX2NvbW1pdF90cyIsIC5hdHR0eXBpZCA9IFRJTUVTVEFNUFRa T0lEIH0sCisJeyAuYXR0bmFtZSA9ICJyZW1vdGVfb3JpZ2luIiwgICAgLmF0dHR5cGlkID0gVEVY VE9JRCB9LAorCXsgLmF0dG5hbWUgPSAicmVtb3RlX3R1cGxlIiwgICAgIC5hdHR0eXBpZCA9IEpT T05PSUQgfSwKKwl7IC5hdHRuYW1lID0gInJlcGxpY2FfaWRlbnRpdHkiLCAuYXR0dHlwaWQgPSBK U09OT0lEIH0sCisJeyAuYXR0bmFtZSA9ICJsb2NhbF9jb25mbGljdHMiLCAgLmF0dHR5cGlkID0g SlNPTkFSUkFZT0lEIH0KK307CisKKyNkZWZpbmUgTlVNX0NPTkZMSUNUX0FUVFJTIGxlbmd0aG9m KENvbmZsaWN0TG9nU2NoZW1hKQorCiBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgQ29uZmxpY3RU eXBlTmFtZXNbXSA9IHsKIAlbQ1RfSU5TRVJUX0VYSVNUU10gPSAiaW5zZXJ0X2V4aXN0cyIsCiAJ W0NUX1VQREFURV9PUklHSU5fRElGRkVSU10gPSAidXBkYXRlX29yaWdpbl9kaWZmZXJzIiwKQEAg LTU0LDYgKzEwNCwxMzMgQEAgc3RhdGljIHZvaWQgZ2V0X3R1cGxlX2Rlc2MoRVN0YXRlICplc3Rh dGUsIFJlc3VsdFJlbEluZm8gKnJlbGluZm8sCiBzdGF0aWMgY2hhciAqYnVpbGRfaW5kZXhfdmFs dWVfZGVzYyhFU3RhdGUgKmVzdGF0ZSwgUmVsYXRpb24gbG9jYWxyZWwsCiAJCQkJCQkJCQlUdXBs ZVRhYmxlU2xvdCAqc2xvdCwgT2lkIGluZGV4b2lkKTsKIAorLyoKKyAqIEJ1aWxkcyB0aGUgVHVw bGVEZXNjIGZvciB0aGUgY29uZmxpY3QgbG9nIHRhYmxlLgorICovCitzdGF0aWMgVHVwbGVEZXNj CitjcmVhdGVfY29uZmxpY3RfbG9nX3RhYmxlX3R1cGRlc2Modm9pZCkKK3sKKwlUdXBsZURlc2MJ dHVwZGVzYzsKKworCXR1cGRlc2MgPSBDcmVhdGVUZW1wbGF0ZVR1cGxlRGVzYyhOVU1fQ09ORkxJ Q1RfQVRUUlMpOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fQ09ORkxJQ1RfQVRUUlM7IGkr KykKKwkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGRlc2MsIGkgKyAxLAorCQkJCQkJICAgQ29uZmxp Y3RMb2dTY2hlbWFbaV0uYXR0bmFtZSwKKwkJCQkJCSAgIENvbmZsaWN0TG9nU2NoZW1hW2ldLmF0 dHR5cGlkLAorCQkJCQkJICAgLTEsIDApOworCisJVHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7 CisKKwlyZXR1cm4gdHVwZGVzYzsKK30KKworLyoKKyAqIENyZWF0ZSBhIHN0cnVjdHVyZWQgY29u ZmxpY3QgbG9nIHRhYmxlIGZvciBhIHN1YnNjcmlwdGlvbi4KKyAqCisgKiBUaGUgdGFibGUgaXMg Y3JlYXRlZCB3aXRoaW4gdGhlIHN5c3RlbS1tYW5hZ2VkICdwZ19jb25mbGljdCcgbmFtZXNwYWNl IHRvCisgKiBwcmV2ZW50IHVzZXJzIGZyb20gbWFudWFsbHkgZHJvcHBpbmcgb3IgYWx0ZXJpbmcg aXQuICBUaGlzIGFsc28gcHJldmVudHMKKyAqIGFjY2lkZW50YWwgbmFtZSBjb2xsaXNpb25zIHdp dGggdXNlci1jcmVhdGVkIHRhYmxlcyB3aXRoIHRoZSBzYW1lIG5hbWUuCisgKgorICogVGhlIHRh YmxlIG5hbWUgaXMgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgdXNpbmcgdGhlIHN1YnNjcmlwdGlv bidzIE9JRAorICogKGUuZy4sICJwZ19jb25mbGljdF9sb2dfPHN1YmlkPiIpIHRvIGVuc3VyZSB1 bmlxdWVuZXNzIHdpdGhpbiB0aGUKKyAqIGNsdXN0ZXIgYW5kIHRvIGF2b2lkIGNvbGxpc2lvbnMg ZHVyaW5nIHN1YnNjcmlwdGlvbiByZW5hbWVzLgorICovCitPaWQKK2NyZWF0ZV9jb25mbGljdF9s b2dfdGFibGUoT2lkIHN1YmlkLCBjaGFyICpzdWJuYW1lLCBPaWQgc3Vib3duZXIpCit7CisJVHVw bGVEZXNjCXR1cGRlc2M7CisJT2lkCQkJcmVsaWQ7CisJY2hhciAgICAJcmVsbmFtZVtOQU1FREFU QUxFTl07CisKKwlzbnByaW50ZihyZWxuYW1lLCBOQU1FREFUQUxFTiwgInBnX2NvbmZsaWN0X2xv Z18ldSIsIHN1YmlkKTsKKworCS8qCisJICogQ2hlY2sgZm9yIGFuIGV4aXN0aW5nIHRhYmxlIHdp dGggdGhlIHNhbWUgbmFtZSBpbiB0aGUgcGdfY29uZmxpY3QgbmFtZXNwYWNlLgorCSAqIEEgY29s bGlzaW9uIHNob3VsZCBub3Qgb2NjdXIgdW5kZXIgbm9ybWFsIG9wZXJhdGlvbiwgYnV0IHdlIG11 c3QgaGFuZGxlIGNhc2VzCisJICogd2hlcmUgYSB0YWJsZSBoYXMgYmVlbiBjcmVhdGVkIG1hbnVh bGx5IHdoZW4gYWxsb3dfc3lzdGVtX3RhYmxlc19tb2RzIGlzCisJICogT04uCisJICovCisJaWYg KE9pZElzVmFsaWQoZ2V0X3JlbG5hbWVfcmVsaWQocmVsbmFtZSwgUEdfQ09ORkxJQ1RfTkFNRVNQ QUNFKSkpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9EVVBMSUNBVEVf VEFCTEUpLAorCQkJCSBlcnJtc2coImNvbmZsaWN0IGxvZyB0YWJsZSBwZ19jb25mbGljdC5cIiVz XCIgYWxyZWFkeSBleGlzdHMiLCByZWxuYW1lKSwKKwkJCQkgZXJyaGludCgiVG8gcHJvY2VlZCwg ZHJvcCB0aGUgZXhpc3RpbmcgdGFibGUgYW5kIHJldHJ5LiIpKSk7CisKKwkvKiBCdWlsZCB0aGUg dHVwbGUgZGVzY3JpcHRvciBmb3IgdGhlIG5ldyB0YWJsZS4gKi8KKwl0dXBkZXNjID0gY3JlYXRl X2NvbmZsaWN0X2xvZ190YWJsZV90dXBkZXNjKCk7CisKKwkvKiBDcmVhdGUgY29uZmxpY3QgbG9n IHRhYmxlLiAqLworCXJlbGlkID0gaGVhcF9jcmVhdGVfd2l0aF9jYXRhbG9nKHJlbG5hbWUsCisJ CQkJCQkJCQkgUEdfQ09ORkxJQ1RfTkFNRVNQQUNFLAorCQkJCQkJCQkJIDAsCS8qIHRhYmxlc3Bh Y2UgKi8KKwkJCQkJCQkJCSBJbnZhbGlkT2lkLCAvKiByZWxpZCAqLworCQkJCQkJCQkJIEludmFs aWRPaWQsIC8qIHJlbHR5cGVpZCAqLworCQkJCQkJCQkJIEludmFsaWRPaWQsIC8qIHJlbG9mdHlw ZWlkICovCisJCQkJCQkJCQkgc3Vib3duZXIsCisJCQkJCQkJCQkgSEVBUF9UQUJMRV9BTV9PSUQs CisJCQkJCQkJCQkgdHVwZGVzYywKKwkJCQkJCQkJCSBOSUwsCisJCQkJCQkJCQkgUkVMS0lORF9S RUxBVElPTiwKKwkJCQkJCQkJCSBSRUxQRVJTSVNURU5DRV9QRVJNQU5FTlQsCisJCQkJCQkJCQkg ZmFsc2UsIC8qIHNoYXJlZF9yZWxhdGlvbiAqLworCQkJCQkJCQkJIGZhbHNlLCAvKiBtYXBwZWRf cmVsYXRpb24gKi8KKwkJCQkJCQkJCSBPTkNPTU1JVF9OT09QLAorCQkJCQkJCQkJIChEYXR1bSkg MCwgLyogcmVsb3B0aW9ucyAqLworCQkJCQkJCQkJIGZhbHNlLCAvKiB1c2VfdXNlcl9hY2wgKi8K KwkJCQkJCQkJCSB0cnVlLCAvKiBhbGxvd19zeXN0ZW1fdGFibGVfbW9kcyAqLworCQkJCQkJCQkJ IHRydWUsIC8qIGlzX2ludGVybmFsICovCisJCQkJCQkJCQkgSW52YWxpZE9pZCwgLyogcmVscmV3 cml0ZSAqLworCQkJCQkJCQkJIE5VTEwpOyAvKiB0eXBhZGRyZXNzICovCisJQXNzZXJ0KE9pZElz VmFsaWQocmVsaWQpKTsKKworCS8qIFJlbGVhc2UgdHVwbGUgZGVzY3JpcHRvciBtZW1vcnkuICov CisJRnJlZVR1cGxlRGVzYyh0dXBkZXNjKTsKKworCS8qCisJICogV2UgbXVzdCBidW1wIHRoZSBj b21tYW5kIGNvdW50ZXIgdG8gbWFrZSB0aGUgbmV3bHktY3JlYXRlZCByZWxhdGlvbgorCSAqIHR1 cGxlIHZpc2libGUgZm9yIG9wZW5pbmcuCisJICovCisJQ29tbWFuZENvdW50ZXJJbmNyZW1lbnQo KTsKKworCS8qCisJICogQ3JlYXRlIGEgVE9BU1QgdGFibGUgZm9yIHRoZSBjb25mbGljdCBsb2cg dG8gc3VwcG9ydCBvdXQtb2YtbGluZSBzdG9yYWdlCisJICogb2YgbGFyZ2UgSlNPTiBkYXRhLgor CSAqLworCU5ld1JlbGF0aW9uQ3JlYXRlVG9hc3RUYWJsZShyZWxpZCwgKERhdHVtKSAwKTsKKwor CWVyZXBvcnQoTk9USUNFLAorCQkJKGVycm1zZygiY3JlYXRlZCBjb25mbGljdCBsb2cgdGFibGUg XCIlc1wiIGZvciBzdWJzY3JpcHRpb24gXCIlc1wiIiwKKwkJCQkJZ2V0X3F1YWxpZmllZF9vYmpu YW1lKFBHX0NPTkZMSUNUX05BTUVTUEFDRSwgcmVsbmFtZSksCisJCQkJCXN1Ym5hbWUpKSk7CisK KwlyZXR1cm4gcmVsaWQ7Cit9CisKKy8qCisgKiBDb252ZXJ0IHRoZSBzdHJpbmcgcmVwcmVzZW50 YXRpb24gb2YgYSBjb25mbGljdCBsb2dnaW5nIGRlc3RpbmF0aW9uIHRvIGl0cworICogY29ycmVz cG9uZGluZyBlbnVtIHZhbHVlLgorICovCitDb25mbGljdExvZ0Rlc3QKK0dldENvbmZsaWN0TG9n RGVzdChjb25zdCBjaGFyICpkZXN0KQoreworCS8qIEVtcHR5IHN0cmluZyBvciBOVUxMIGRlZmF1 bHRzIHRvIExPRy4gKi8KKwlpZiAoZGVzdCA9PSBOVUxMIHx8IGRlc3RbMF0gPT0gJ1wwJyB8fCBw Z19zdHJjYXNlY21wKGRlc3QsICJsb2ciKSA9PSAwKQorCQlyZXR1cm4gQ09ORkxJQ1RfTE9HX0RF U1RfTE9HOworCisJaWYgKHBnX3N0cmNhc2VjbXAoZGVzdCwgInRhYmxlIikgPT0gMCkKKwkJcmV0 dXJuIENPTkZMSUNUX0xPR19ERVNUX1RBQkxFOworCisJaWYgKHBnX3N0cmNhc2VjbXAoZGVzdCwg ImFsbCIpID09IDApCisJCXJldHVybiBDT05GTElDVF9MT0dfREVTVF9BTEw7CisKKwkvKiBVbnJl Y29nbml6ZWQgc3RyaW5nLiAqLworCWVyZXBvcnQoRVJST1IsCisJCQkoZXJyY29kZShFUlJDT0RF X0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCSBlcnJtc2coInVucmVjb2duaXplZCBjb25m bGljdF9sb2dfZGVzdGluYXRpb24gdmFsdWU6IFwiJXNcIiIsIGRlc3QpLAorCQkJIGVycmhpbnQo IlZhbGlkIHZhbHVlcyBhcmUgXCJsb2dcIiwgXCJ0YWJsZVwiLCBhbmQgXCJhbGxcIi4iKSkpOwor fQorCiAvKgogICogR2V0IHRoZSB4bWluIGFuZCBjb21taXQgdGltZXN0YW1wIGRhdGEgKG9yaWdp biBhbmQgdGltZXN0YW1wKSBhc3NvY2lhdGVkCiAgKiB3aXRoIHRoZSBwcm92aWRlZCBsb2NhbCBy b3cuCmRpZmYgLS1naXQgYS9zcmMvYmluL2luaXRkYi9pbml0ZGIuYyBiL3NyYy9iaW4vaW5pdGRi L2luaXRkYi5jCmluZGV4IDE0Y2I3OWMyNmJlLi44MDNjYTQxMTJkNCAxMDA2NDQKLS0tIGEvc3Jj L2Jpbi9pbml0ZGIvaW5pdGRiLmMKKysrIGIvc3JjL2Jpbi9pbml0ZGIvaW5pdGRiLmMKQEAgLTE4 MzksNiArMTgzOSwxMiBAQCBzZXR1cF9wcml2aWxlZ2VzKEZJTEUgKmNtZGZkKQogCQkJCSAgIiAg QU5EIHJlbGFjbCBJUyBOVUxMO1xuXG4iLAogCQkJCSAgZXNjYXBlX3F1b3Rlcyh1c2VybmFtZSkp OwogCVBHX0NNRF9QVVRTKCJHUkFOVCBVU0FHRSBPTiBTQ0hFTUEgcGdfY2F0YWxvZywgcHVibGlj IFRPIFBVQkxJQztcblxuIik7CisKKwkvKgorCSAqIEFsbG93IG5vbi1zdXBlcnVzZXIgc3Vic2Ny aXB0aW9uIG93bmVycyB0byBhY2Nlc3MgdGhlaXIgYXNzb2NpYXRlZAorCSAqIGNvbmZsaWN0IGxv ZyB0YWJsZXMgaW4gdGhlIHBnX2NvbmZsaWN0IHNjaGVtYS4KKwkgKi8KKwlQR19DTURfUFVUUygi R1JBTlQgVVNBR0UgT04gU0NIRU1BIHBnX2NvbmZsaWN0IFRPIFBVQkxJQztcblxuIik7CiAJUEdf Q01EX1BVVFMoIlJFVk9LRSBBTEwgT04gcGdfbGFyZ2VvYmplY3QgRlJPTSBQVUJMSUM7XG5cbiIp OwogCVBHX0NNRF9QVVRTKCJJTlNFUlQgSU5UTyBwZ19pbml0X3ByaXZzICIKIAkJCQkiICAob2Jq b2lkLCBjbGFzc29pZCwgb2Jqc3ViaWQsIGluaXRwcml2cywgcHJpdnR5cGUpIgpkaWZmIC0tZ2l0 IGEvc3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5pbi5jIGIvc3JjL2Jpbi9wc3FsL3RhYi1jb21w bGV0ZS5pbi5jCmluZGV4IGRlNTQ3YThjYjM3Li42NmVlMWI2YzJhNCAxMDA2NDQKLS0tIGEvc3Jj L2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5pbi5jCisrKyBiL3NyYy9iaW4vcHNxbC90YWItY29tcGxl dGUuaW4uYwpAQCAtMjM3Niw4ICsyMzc2LDggQEAgbWF0Y2hfcHJldmlvdXNfd29yZHMoaW50IHBh dHRlcm5faWQsCiAJCUNPTVBMRVRFX1dJVEgoIigiLCAiUFVCTElDQVRJT04iKTsKIAkvKiBBTFRF UiBTVUJTQ1JJUFRJT04gPG5hbWU+IFNFVCAoICovCiAJZWxzZSBpZiAoTWF0Y2hlcygiQUxURVIi LCAiU1VCU0NSSVBUSU9OIiwgTWF0Y2hBbnksIE1hdGNoQW55TiwgIlNFVCIsICIoIikpCi0JCUNP TVBMRVRFX1dJVEgoImJpbmFyeSIsICJkaXNhYmxlX29uX2Vycm9yIiwgImZhaWxvdmVyIiwKLQkJ CQkJICAibWF4X3JldGVudGlvbl9kdXJhdGlvbiIsICJvcmlnaW4iLAorCQlDT01QTEVURV9XSVRI KCJiaW5hcnkiLCAiY29uZmxpY3RfbG9nX2Rlc3RpbmF0aW9uIiwgImRpc2FibGVfb25fZXJyb3Ii LAorCQkJCQkgICJmYWlsb3ZlciIsICJtYXhfcmV0ZW50aW9uX2R1cmF0aW9uIiwgIm9yaWdpbiIs CiAJCQkJCSAgInBhc3N3b3JkX3JlcXVpcmVkIiwgInJldGFpbl9kZWFkX3R1cGxlcyIsCiAJCQkJ CSAgInJ1bl9hc19vd25lciIsICJzbG90X25hbWUiLCAic3RyZWFtaW5nIiwKIAkJCQkJICAic3lu Y2hyb25vdXNfY29tbWl0IiwgInR3b19waGFzZSIpOwpAQCAtMzk2MCw4ICszOTYwLDggQEAgbWF0 Y2hfcHJldmlvdXNfd29yZHMoaW50IHBhdHRlcm5faWQsCiAJCUNPTVBMRVRFX1dJVEgoIldJVEgg KCIpOwogCS8qIENvbXBsZXRlICJDUkVBVEUgU1VCU0NSSVBUSU9OIDxuYW1lPiAuLi4gIFdJVEgg KCA8b3B0PiIgKi8KIAllbHNlIGlmIChNYXRjaGVzKCJDUkVBVEUiLCAiU1VCU0NSSVBUSU9OIiwg TWF0Y2hBbnlOLCAiV0lUSCIsICIoIikpCi0JCUNPTVBMRVRFX1dJVEgoImJpbmFyeSIsICJjb25u ZWN0IiwgImNvcHlfZGF0YSIsICJjcmVhdGVfc2xvdCIsCi0JCQkJCSAgImRpc2FibGVfb25fZXJy b3IiLCAiZW5hYmxlZCIsICJmYWlsb3ZlciIsCisJCUNPTVBMRVRFX1dJVEgoImJpbmFyeSIsICJj b25mbGljdF9sb2dfZGVzdGluYXRpb24iLCAiY29ubmVjdCIsICJjb3B5X2RhdGEiLAorCQkJCQkg ICJjcmVhdGVfc2xvdCIsICJkaXNhYmxlX29uX2Vycm9yIiwgImVuYWJsZWQiLCAiZmFpbG92ZXIi LAogCQkJCQkgICJtYXhfcmV0ZW50aW9uX2R1cmF0aW9uIiwgIm9yaWdpbiIsCiAJCQkJCSAgInBh c3N3b3JkX3JlcXVpcmVkIiwgInJldGFpbl9kZWFkX3R1cGxlcyIsCiAJCQkJCSAgInJ1bl9hc19v d25lciIsICJzbG90X25hbWUiLCAic3RyZWFtaW5nIiwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L2NhdGFsb2cvY2F0YWxvZy5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9jYXRhbG9nLmgKaW5kZXgg YTlkNmU4ZWE5ODYuLmZlYWIzOTgyY2Y1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9n L2NhdGFsb2cuaAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL2NhdGFsb2cuaApAQCAtMjUsNiAr MjUsNyBAQCBleHRlcm4gYm9vbCBJc0lucGxhY2VVcGRhdGVSZWxhdGlvbihSZWxhdGlvbiByZWxh dGlvbik7CiAKIGV4dGVybiBib29sIElzU3lzdGVtQ2xhc3MoT2lkIHJlbGlkLCBGb3JtX3BnX2Ns YXNzIHJlbHR1cGxlKTsKIGV4dGVybiBib29sIElzVG9hc3RDbGFzcyhGb3JtX3BnX2NsYXNzIHJl bHR1cGxlKTsKK2V4dGVybiBib29sIElzQ29uZmxpY3RMb2dUYWJsZUNsYXNzKEZvcm1fcGdfY2xh c3MgcmVsdHVwbGUpOwogCiBleHRlcm4gYm9vbCBJc0NhdGFsb2dSZWxhdGlvbk9pZChPaWQgcmVs aWQpOwogZXh0ZXJuIGJvb2wgSXNDYXRhbG9nVGV4dFVuaXF1ZUluZGV4T2lkKE9pZCByZWxpZCk7 CkBAIC0zMiw2ICszMyw3IEBAIGV4dGVybiBib29sIElzSW5wbGFjZVVwZGF0ZU9pZChPaWQgcmVs aWQpOwogCiBleHRlcm4gYm9vbCBJc0NhdGFsb2dOYW1lc3BhY2UoT2lkIG5hbWVzcGFjZUlkKTsK IGV4dGVybiBib29sIElzVG9hc3ROYW1lc3BhY2UoT2lkIG5hbWVzcGFjZUlkKTsKK2V4dGVybiBi b29sIElzQ29uZmxpY3RMb2dUYWJsZU5hbWVzcGFjZShPaWQgbmFtZXNwYWNlSWQpOwogCiBleHRl cm4gYm9vbCBJc1Jlc2VydmVkTmFtZShjb25zdCBjaGFyICpuYW1lKTsKIApkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19uYW1lc3BhY2UuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxv Zy9wZ19uYW1lc3BhY2UuZGF0CmluZGV4IDMwNzVlMTQyYzczLi5iNDVjYjkzODNhOCAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19uYW1lc3BhY2UuZGF0CisrKyBiL3NyYy9pbmNs dWRlL2NhdGFsb2cvcGdfbmFtZXNwYWNlLmRhdApAQCAtMTgsNiArMTgsOSBAQAogeyBvaWQgPT4g Jzk5Jywgb2lkX3N5bWJvbCA9PiAnUEdfVE9BU1RfTkFNRVNQQUNFJywKICAgZGVzY3IgPT4gJ3Jl c2VydmVkIHNjaGVtYSBmb3IgVE9BU1QgdGFibGVzJywKICAgbnNwbmFtZSA9PiAncGdfdG9hc3Qn LCBuc3BhY2wgPT4gJ19udWxsXycgfSwKK3sgb2lkID0+ICcxMzgyJywgb2lkX3N5bWJvbCA9PiAn UEdfQ09ORkxJQ1RfTkFNRVNQQUNFJywKKyAgZGVzY3IgPT4gJ3Jlc2VydmVkIHNjaGVtYSBmb3Ig c3Vic2NyaXB0aW9uLXNwZWNpZmljIGNvbmZsaWN0IGxvZyB0YWJsZXMnLAorICBuc3BuYW1lID0+ ICdwZ19jb25mbGljdCcsIG5zcGFjbCA9PiAnX251bGxfJyB9LAogIyB1cGRhdGUgZHVtcE5hbWVz cGFjZSgpIGlmIGNoYW5naW5nIHRoaXMgZGVzY3IKIHsgb2lkID0+ICcyMjAwJywgb2lkX3N5bWJv bCA9PiAnUEdfUFVCTElDX05BTUVTUEFDRScsCiAgIGRlc2NyID0+ICdzdGFuZGFyZCBwdWJsaWMg c2NoZW1hJywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfc3Vic2NyaXB0aW9u LmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3N1YnNjcmlwdGlvbi5oCmluZGV4IGE2YTJhZDFl NDljLi44OWQyMzAwYWJlMSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19zdWJz Y3JpcHRpb24uaAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3N1YnNjcmlwdGlvbi5oCkBA IC05NSw3ICs5NSwxNiBAQCBDQVRBTE9HKHBnX3N1YnNjcmlwdGlvbiw2MTAwLFN1YnNjcmlwdGlv blJlbGF0aW9uSWQpIEJLSV9TSEFSRURfUkVMQVRJT04gQktJX1JPVwogCU9pZAkJCXN1YnNlcnZl ciBCS0lfTE9PS1VQX09QVChwZ19mb3JlaWduX3NlcnZlcik7CS8qIElmIGNvbm5lY3Rpb24gdXNl cwogCQkJCQkJCQkJCQkJCQkJCSAqIHNlcnZlciAqLwogCisJT2lkCQkJc3ViY29uZmxpY3Rsb2dy ZWxpZDsgLyogUmVsaWQgb2YgdGhlIGNvbmZsaWN0IGxvZyB0YWJsZS4gKi8KICNpZmRlZiBDQVRB TE9HX1ZBUkxFTgkJCS8qIHZhcmlhYmxlLWxlbmd0aCBmaWVsZHMgc3RhcnQgaGVyZSAqLworCS8q CisJICogU3RyYXRlZ3kgZm9yIGxvZ2dpbmcgcmVwbGljYXRpb24gY29uZmxpY3RzOgorCSAqICds b2cnIC0gc2VydmVyIGxvZyBvbmx5LAorCSAqICd0YWJsZScgLSBjb25mbGljdCBsb2cgdGFibGUg b25seSwKKwkgKiAnYWxsJyAtIGJvdGggbG9nIGFuZCB0YWJsZS4KKwkgKi8KKwl0ZXh0CQlzdWJj b25mbGljdGxvZ2Rlc3QgQktJX0ZPUkNFX05PVF9OVUxMOworCiAJLyogQ29ubmVjdGlvbiBzdHJp bmcgdG8gdGhlIHB1Ymxpc2hlciAqLwogCXRleHQJCXN1YmNvbm5pbmZvOwkvKiBTZXQgaWYgY29u bmVjdGluZyB3aXRoIGNvbm5lY3Rpb24gc3RyaW5nICovCiAKQEAgLTE2NCw2ICsxNzMsNyBAQCB0 eXBlZGVmIHN0cnVjdCBTdWJzY3JpcHRpb24KIAkJCQkJCQkJCSAqIGFuZCB0aGUgcmV0ZW50aW9u IGR1cmF0aW9uIGhhcyBub3QKIAkJCQkJCQkJCSAqIGV4Y2VlZGVkIG1heF9yZXRlbnRpb25fZHVy YXRpb24sIHdoZW4KIAkJCQkJCQkJCSAqIGRlZmluZWQgKi8KKwlPaWQJCQljb25mbGljdGxvZ3Jl bGlkOwkvKiBjb25mbGljdCBsb2cgdGFibGUgT2lkICovCiAJY2hhcgkgICAqY29ubmluZm87CQkv KiBDb25uZWN0aW9uIHN0cmluZyB0byB0aGUgcHVibGlzaGVyICovCiAJY2hhcgkgICAqc2xvdG5h bWU7CQkvKiBOYW1lIG9mIHRoZSByZXBsaWNhdGlvbiBzbG90ICovCiAJY2hhcgkgICAqc3luY2Nv bW1pdDsJCS8qIFN5bmNocm9ub3VzIGNvbW1pdCBzZXR0aW5nIGZvciB3b3JrZXIgKi8KQEAgLTE3 MSw2ICsxODEsNyBAQCB0eXBlZGVmIHN0cnVjdCBTdWJzY3JpcHRpb24KIAlMaXN0CSAgICpwdWJs aWNhdGlvbnM7CS8qIExpc3Qgb2YgcHVibGljYXRpb24gbmFtZXMgdG8gc3Vic2NyaWJlIHRvICov CiAJY2hhcgkgICAqb3JpZ2luOwkJCS8qIE9ubHkgcHVibGlzaCBkYXRhIG9yaWdpbmF0aW5nIGZy b20gdGhlCiAJCQkJCQkJCSAqIHNwZWNpZmllZCBvcmlnaW4gKi8KKwljaGFyCSAgICpjb25mbGlj dGxvZ2Rlc3Q7CS8qIENvbmZsaWN0IGxvZyBkZXN0aW5hdGlvbiAqLwogfSBTdWJzY3JpcHRpb247 CiAKICNpZmRlZiBFWFBPU0VfVE9fQ0xJRU5UX0NPREUKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L3JlcGxpY2F0aW9uL2NvbmZsaWN0LmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9jb25mbGlj dC5oCmluZGV4IDJkOWRiY2Y0ZDBkLi5hMDE3ZTFlNmNiNSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvcmVwbGljYXRpb24vY29uZmxpY3QuaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9j b25mbGljdC5oCkBAIC0xMCw2ICsxMCw3IEBACiAjZGVmaW5lIENPTkZMSUNUX0gKIAogI2luY2x1 ZGUgImFjY2Vzcy94bG9nZGVmcy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgogI2lu Y2x1ZGUgImRhdGF0eXBlL3RpbWVzdGFtcC5oIgogI2luY2x1ZGUgIm5vZGVzL3BnX2xpc3QuaCIK IApAQCAtNzksNiArODAsMzIgQEAgdHlwZWRlZiBzdHJ1Y3QgQ29uZmxpY3RUdXBsZUluZm8KIAkJ CQkJCQkJICogY29uZmxpY3RpbmcgbG9jYWwgcm93IG9jY3VycmVkICovCiB9IENvbmZsaWN0VHVw bGVJbmZvOwogCisvKgorICogRGVmaW5lcyB3aGVyZSBsb2dpY2FsIHJlcGxpY2F0aW9uIGNvbmZs aWN0IGRldGFpbHMgYXJlIHJlY29yZGVkLgorICoKKyAqIFdoaWxlIHN0b3JlZCBhcyBhIHRleHQt YmFzZWQgYXJyYXkvc3RyaW5nIGluCisgKiBwZ19zdWJzY3JpcHRpb24uc3ViY29uZmxpY3Rsb2dk ZXN0IGZvciB1c2VyIHJlYWRhYmlsaXR5IGFuZCBleHRlbnNpYmlsaXR5LAorICogd2UgbWFwIHRo ZXNlIHRvIGFuIGludGVybmFsIGVudW0gdG8gYWxsb3cgZm9yIGVmZmljaWVudCBjaGVja3MuCisg Ki8KK3R5cGVkZWYgZW51bSBDb25mbGljdExvZ0Rlc3QKK3sKKwlDT05GTElDVF9MT0dfREVTVF9M T0cgPSAwLAkvKiBFbWl0IHRvIHNlcnZlciBsb2dzICovCisJQ09ORkxJQ1RfTE9HX0RFU1RfVEFC TEUsCS8qIEluc2VydCBpbnRvIHRoZSBjb25mbGljdCBsb2cgdGFibGUgKi8KKwlDT05GTElDVF9M T0dfREVTVF9BTEwJCS8qIEJvdGggbG9nIGFuZCB0YWJsZSAqLworfSBDb25mbGljdExvZ0Rlc3Q7 CisKKyNkZWZpbmUgQ09ORkxJQ1RTX0xPR0dFRF9UT19UQUJMRShkZXN0KSBcCisJKChkZXN0ID09 IENPTkZMSUNUX0xPR19ERVNUX1RBQkxFKSB8fCAoZGVzdCA9PSBDT05GTElDVF9MT0dfREVTVF9B TEwpKQorI2RlZmluZSBDT05GTElDVFNfTE9HR0VEX1RPX0xPRyhkZXN0KSBcCisJKChkZXN0ID09 IENPTkZMSUNUX0xPR19ERVNUX0xPRykgfHwgKGRlc3QgPT0gQ09ORkxJQ1RfTE9HX0RFU1RfQUxM KSkKKworLyoKKyAqIEFycmF5IG1hcHBpbmcgZm9yIGNvbnZlcnRpbmcgaW50ZXJuYWwgZW51bSB0 byBzdHJpbmcuCisgKi8KK2V4dGVybiBQR0RMTElNUE9SVCBjb25zdCBjaGFyICpjb25zdCBDb25m bGljdExvZ0Rlc3ROYW1lc1tdOworCitleHRlcm4gT2lkIGNyZWF0ZV9jb25mbGljdF9sb2dfdGFi bGUoT2lkIHN1YmlkLCBjaGFyICpzdWJuYW1lLCBPaWQgc3Vib3duZXIpOworZXh0ZXJuIENvbmZs aWN0TG9nRGVzdCBHZXRDb25mbGljdExvZ0Rlc3QoY29uc3QgY2hhciAqZGVzdCk7CiBleHRlcm4g Ym9vbCBHZXRUdXBsZVRyYW5zYWN0aW9uSW5mbyhUdXBsZVRhYmxlU2xvdCAqbG9jYWxzbG90LAog CQkJCQkJCQkJVHJhbnNhY3Rpb25JZCAqeG1pbiwKIAkJCQkJCQkJCVJlcGxPcmlnaW5JZCAqbG9j YWxvcmlnaW4sCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N1YnNjcmlw dGlvbi5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N1YnNjcmlwdGlvbi5vdXQKaW5k ZXggN2UzY2FiZGI5M2YuLjg2MWJjY2I1ZjM3IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3N1YnNjcmlwdGlvbi5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9zdWJzY3JpcHRpb24ub3V0CkBAIC01NzYsNiArNTc2LDMxNCBAQCBDT01NSVQ7CiAtLSBvaywg b3duaW5nIGl0IGlzIGVub3VnaCBmb3IgdGhpcyBzdHVmZgogQUxURVIgU1VCU0NSSVBUSU9OIHJl Z3Jlc3NfdGVzdHN1YiBTRVQgKHNsb3RfbmFtZSA9IE5PTkUpOwogRFJPUCBTVUJTQ1JJUFRJT04g cmVncmVzc190ZXN0c3ViOworLS0KKy0tIENPTkZMSUNUIExPRyBERVNUSU5BVElPTiBURVNUUwor LS0KK1NFVCBTRVNTSU9OIEFVVEhPUklaQVRJT04gJ3JlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIn OworU0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSBXQVJOSU5HOworLS0gZmFpbCAtIHVucmVjb2du aXplZCBwYXJhbWV0ZXIgdmFsdWUKK0NSRUFURSBTVUJTQ1JJUFRJT04gcmVncmVzc19jb25mbGlj dF9mYWlsIENPTk5FQ1RJT04gJ2RibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdCcgUFVCTElDQVRJ T04gdGVzdHB1YiBXSVRIIChjb25uZWN0ID0gZmFsc2UsIGNvbmZsaWN0X2xvZ19kZXN0aW5hdGlv biA9ICdpbnZhbGlkJyk7CitFUlJPUjogIHVucmVjb2duaXplZCBjb25mbGljdF9sb2dfZGVzdGlu YXRpb24gdmFsdWU6ICJpbnZhbGlkIgorSElOVDogIFZhbGlkIHZhbHVlcyBhcmUgImxvZyIsICJ0 YWJsZSIsIGFuZCAiYWxsIi4KKy0tIHZlcmlmeSBzdWJjb25mbGljdGxvZ2Rlc3QgaXMgJ2xvZycg YW5kIHN1YmNvbmZsaWN0bG9ncmVsaWQgaXMgMCAoSW52YWxpZE9pZCkgZm9yIGRlZmF1bHQgY2Fz ZQorQ1JFQVRFIFNVQlNDUklQVElPTiByZWdyZXNzX2NvbmZsaWN0X2xvZ19kZWZhdWx0IENPTk5F Q1RJT04gJ2RibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdCcgUFVCTElDQVRJT04gdGVzdHB1YiBX SVRIIChjb25uZWN0ID0gZmFsc2UpOworV0FSTklORzogIHN1YnNjcmlwdGlvbiB3YXMgY3JlYXRl ZCwgYnV0IGlzIG5vdCBjb25uZWN0ZWQKK0hJTlQ6ICBUbyBpbml0aWF0ZSByZXBsaWNhdGlvbiwg eW91IG11c3QgbWFudWFsbHkgY3JlYXRlIHRoZSByZXBsaWNhdGlvbiBzbG90LCBlbmFibGUgdGhl IHN1YnNjcmlwdGlvbiwgYW5kIGFsdGVyIHRoZSBzdWJzY3JpcHRpb24gdG8gcmVmcmVzaCBwdWJs aWNhdGlvbnMuCitTRUxFQ1Qgc3VibmFtZSwgc3ViY29uZmxpY3Rsb2dkZXN0LCBzdWJjb25mbGlj dGxvZ3JlbGlkCitGUk9NIHBnX3N1YnNjcmlwdGlvbiBXSEVSRSBzdWJuYW1lID0gJ3JlZ3Jlc3Nf Y29uZmxpY3RfbG9nX2RlZmF1bHQnOworICAgICAgICAgICBzdWJuYW1lICAgICAgICAgICAgfCBz dWJjb25mbGljdGxvZ2Rlc3QgfCBzdWJjb25mbGljdGxvZ3JlbGlkIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIHJlZ3Jlc3NfY29uZmxpY3RfbG9nX2RlZmF1bHQgfCBsb2cgICAgICAgICAgICAgICAgfCAg ICAgICAgICAgICAgICAgICAwCisoMSByb3cpCisKKy0tIHZlcmlmeSBlbXB0eSBzdHJpbmcgZGVm YXVsdHMgdG8gJ2xvZycKK0NSRUFURSBTVUJTQ1JJUFRJT04gcmVncmVzc19jb25mbGljdF9lbXB0 eV9zdHIgQ09OTkVDVElPTiAnZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0JyBQVUJMSUNBVElP TiB0ZXN0cHViIFdJVEggKGNvbm5lY3QgPSBmYWxzZSwgY29uZmxpY3RfbG9nX2Rlc3RpbmF0aW9u ID0gJycpOworV0FSTklORzogIHN1YnNjcmlwdGlvbiB3YXMgY3JlYXRlZCwgYnV0IGlzIG5vdCBj b25uZWN0ZWQKK0hJTlQ6ICBUbyBpbml0aWF0ZSByZXBsaWNhdGlvbiwgeW91IG11c3QgbWFudWFs bHkgY3JlYXRlIHRoZSByZXBsaWNhdGlvbiBzbG90LCBlbmFibGUgdGhlIHN1YnNjcmlwdGlvbiwg YW5kIGFsdGVyIHRoZSBzdWJzY3JpcHRpb24gdG8gcmVmcmVzaCBwdWJsaWNhdGlvbnMuCitTRUxF Q1Qgc3VibmFtZSwgc3ViY29uZmxpY3Rsb2dkZXN0LCBzdWJjb25mbGljdGxvZ3JlbGlkCitGUk9N IHBnX3N1YnNjcmlwdGlvbiBXSEVSRSBzdWJuYW1lID0gJ3JlZ3Jlc3NfY29uZmxpY3RfZW1wdHlf c3RyJzsKKyAgICAgICAgICBzdWJuYW1lICAgICAgICAgICB8IHN1YmNvbmZsaWN0bG9nZGVzdCB8 IHN1YmNvbmZsaWN0bG9ncmVsaWQgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHJlZ3Jlc3NfY29uZmxpY3Rf ZW1wdHlfc3RyIHwgbG9nICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgMAorKDEg cm93KQorCistLSB0aGlzIHNob3VsZCBnZW5lcmF0ZSBhbiBjb25mbGljdCBsb2cgdGFibGUgbmFt ZWQgcGdfY29uZmxpY3RfbG9nXyRzdWJpZCQKK0NSRUFURSBTVUJTQ1JJUFRJT04gcmVncmVzc19j b25mbGljdF90ZXN0MSBDT05ORUNUSU9OICdkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QnIFBV QkxJQ0FUSU9OIHRlc3RwdWIgV0lUSCAoY29ubmVjdCA9IGZhbHNlLCBjb25mbGljdF9sb2dfZGVz dGluYXRpb24gPSAndGFibGUnKTsKK1dBUk5JTkc6ICBzdWJzY3JpcHRpb24gd2FzIGNyZWF0ZWQs IGJ1dCBpcyBub3QgY29ubmVjdGVkCitISU5UOiAgVG8gaW5pdGlhdGUgcmVwbGljYXRpb24sIHlv dSBtdXN0IG1hbnVhbGx5IGNyZWF0ZSB0aGUgcmVwbGljYXRpb24gc2xvdCwgZW5hYmxlIHRoZSBz dWJzY3JpcHRpb24sIGFuZCBhbHRlciB0aGUgc3Vic2NyaXB0aW9uIHRvIHJlZnJlc2ggcHVibGlj YXRpb25zLgorLS0gY2hlY2sgbWV0YWRhdGEgaW4gcGdfc3Vic2NyaXB0aW9uOiBkZXN0aW5hdGlv biBzaG91bGQgYmUgJ3RhYmxlJyBhbmQgc3ViY29uZmxpY3Rsb2dyZWxpZCB2YWxpZAorU0VMRUNU IHN1Ym5hbWUsIHN1YmNvbmZsaWN0bG9nZGVzdCwgc3ViY29uZmxpY3Rsb2dyZWxpZCA+IDAgQVMg aGFzX3JlbGlkCitGUk9NIHBnX3N1YnNjcmlwdGlvbiBXSEVSRSBzdWJuYW1lID0gJ3JlZ3Jlc3Nf Y29uZmxpY3RfdGVzdDEnOworICAgICAgICBzdWJuYW1lICAgICAgICAgfCBzdWJjb25mbGljdGxv Z2Rlc3QgfCBoYXNfcmVsaWQgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0KKyByZWdyZXNzX2NvbmZsaWN0X3Rlc3QxIHwgdGFibGUgICAg ICAgICAgICAgIHwgdAorKDEgcm93KQorCistLSB2ZXJpZnkgdGhlIHBoeXNpY2FsIHRhYmxlIGV4 aXN0cywgaXRzIE9JRCBtYXRjaGVzIHN1YmNvbmZsaWN0bG9ncmVsaWQsCistLSBhbmQgaXQgaXMg bG9jYXRlZCBpbiB0aGUgJ3BnX2NvbmZsaWN0JyBuYW1lc3BhY2UKK1NFTEVDVCBuLm5zcG5hbWUs IChjLm9pZCA9IHMuc3ViY29uZmxpY3Rsb2dyZWxpZCkgQVMgIm9pZF9tYXRjaGVzIgorRlJPTSBw Z19jbGFzcyBjCitKT0lOIHBnX3N1YnNjcmlwdGlvbiBzIE9OIGMucmVsbmFtZSA9ICdwZ19jb25m bGljdF9sb2dfJyB8fCBzLm9pZAorSk9JTiBwZ19uYW1lc3BhY2UgbiBPTiBjLnJlbG5hbWVzcGFj ZSA9IG4ub2lkCitXSEVSRSBzLnN1Ym5hbWUgPSAncmVncmVzc19jb25mbGljdF90ZXN0MSc7Cisg ICBuc3BuYW1lICAgfCBvaWRfbWF0Y2hlcyAKKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLQor IHBnX2NvbmZsaWN0IHwgdAorKDEgcm93KQorCistLSBjaGVjayBpZiB0aGUgY29uZmxpY3QgbG9n IHRhYmxlIGhhcyB0aGUgY29ycmVjdCBzY2hlbWEKK1NFTEVDVCBhLmF0dG51bSwgYS5hdHRuYW1l CitGUk9NIHBnX2F0dHJpYnV0ZSBhCitKT0lOIHBnX2NsYXNzIGMgT04gYS5hdHRyZWxpZCA9IGMu b2lkCitKT0lOIHBnX3N1YnNjcmlwdGlvbiBzIE9OIGMucmVsbmFtZSA9ICdwZ19jb25mbGljdF9s b2dfJyB8fCBzLm9pZAorV0hFUkUgcy5zdWJuYW1lID0gJ3JlZ3Jlc3NfY29uZmxpY3RfdGVzdDEn IEFORCBhLmF0dG51bSA+IDAKKyAgICBPUkRFUiBCWSBhLmF0dG51bTsKKyBhdHRudW0gfCAgICAg IGF0dG5hbWUgICAgICAKKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgIDEgfCBy ZWxpZAorICAgICAgMiB8IHNjaGVtYW5hbWUKKyAgICAgIDMgfCByZWxuYW1lCisgICAgICA0IHwg Y29uZmxpY3RfdHlwZQorICAgICAgNSB8IHJlbW90ZV94aWQKKyAgICAgIDYgfCByZW1vdGVfY29t bWl0X2xzbgorICAgICAgNyB8IHJlbW90ZV9jb21taXRfdHMKKyAgICAgIDggfCByZW1vdGVfb3Jp Z2luCisgICAgICA5IHwgcmVtb3RlX3R1cGxlCisgICAgIDEwIHwgcmVwbGljYV9pZGVudGl0eQor ICAgICAxMSB8IGxvY2FsX2NvbmZsaWN0cworKDExIHJvd3MpCisKKy0tIENoYW5naW5nIHRoZSBz dWJzY3JpcHRpb24gb3duZXIgc2hvdWxkIGFsc28gdXBkYXRlIHRoZSBvd25lcgorLS0gb2YgdGhl IGFzc29jaWF0ZWQgY29uZmxpY3QgbG9nIHRhYmxlLgorQUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jl c3NfY29uZmxpY3RfdGVzdDEgT1dORVIgVE8gcmVncmVzc19zdWJzY3JpcHRpb25fdXNlcjI7CitT RUxFQ1QgcGdfY2F0YWxvZy5wZ19nZXRfdXNlcmJ5aWQoYy5yZWxvd25lcikgQVMgb3duZXIKK0ZS T00gcGdfY2F0YWxvZy5wZ19jbGFzcyBjCitKT0lOIHBnX2NhdGFsb2cucGdfc3Vic2NyaXB0aW9u IHMKKyAgICAgICAgT04gYy5yZWxuYW1lID0gJ3BnX2NvbmZsaWN0X2xvZ18nIHx8IHMub2lkCitX SEVSRSBzLnN1Ym5hbWUgPSAncmVncmVzc19jb25mbGljdF90ZXN0MSc7CisgICAgICAgICAgIG93 bmVyICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgcmVncmVzc19z dWJzY3JpcHRpb25fdXNlcjIKKygxIHJvdykKKworLS0gVmVyaWZ5IHRoYXQgYSBub24tc3VwZXJ1 c2VyIHN1YnNjcmlwdGlvbiBvd25lciBjYW4gdHJ1bmNhdGUsCistLSBkZWxldGUgZnJvbSwgYW5k IHNlbGVjdCBmcm9tIHRoZSBhc3NvY2lhdGVkIGNvbmZsaWN0IGxvZyB0YWJsZS4KK1NFVCBST0xF ICdyZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyMic7CitTRUxFQ1QgZm9ybWF0KCclSS4lSScsIG4u bnNwbmFtZSwgYy5yZWxuYW1lKSBBUyBjb25mbGljdF9sb2dfdGFibGUKK0ZST00gcGdfY2F0YWxv Zy5wZ19jbGFzcyBjCitKT0lOIHBnX2NhdGFsb2cucGdfbmFtZXNwYWNlIG4KKwlPTiBuLm9pZCA9 IGMucmVsbmFtZXNwYWNlCitKT0lOIHBnX2NhdGFsb2cucGdfc3Vic2NyaXB0aW9uIHMKKwlPTiBj LnJlbG5hbWUgPSAncGdfY29uZmxpY3RfbG9nXycgfHwgcy5vaWQKK1dIRVJFIHMuc3VibmFtZSA9 ICdyZWdyZXNzX2NvbmZsaWN0X3Rlc3QxJworXGdzZXQKK1RSVU5DQVRFIFRBQkxFIDpjb25mbGlj dF9sb2dfdGFibGU7CitERUxFVEUgRlJPTSA6Y29uZmxpY3RfbG9nX3RhYmxlOworU0VMRUNUIENP VU5UKCopIEZST00gOmNvbmZsaWN0X2xvZ190YWJsZTsKKyBjb3VudCAKKy0tLS0tLS0KKyAgICAg MAorKDEgcm93KQorCitSRVNFVCBST0xFOworLS0gUmVzdG9yZSB0aGUgb3JpZ2luYWwgc3Vic2Ny aXB0aW9uIG93bmVyLgorQUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfY29uZmxpY3RfdGVzdDEg T1dORVIgVE8gcmVncmVzc19zdWJzY3JpcHRpb25fdXNlcjsKKy0tCistLSBBTFRFUiBTVUJTQ1JJ UFRJT04gLSBjb25mbGljdF9sb2dfZGVzdGluYXRpb24gc3RhdGUgdHJhbnNpdGlvbnMKKy0tCist LSBUaGVzZSB0ZXN0cyB2ZXJpZnkgdGhlIHRyYW5zaXRpb24gbG9naWMgYmV0d2VlbiBkaWZmZXJl bnQgbG9nZ2luZworLS0gZGVzdGluYXRpb25zLCBlbnN1cmluZyBjb25mbGljdCBsb2cgdGFibGVz IGFyZSBjcmVhdGVkIG9yIGRyb3BwZWQgYXMKKy0tIGV4cGVjdGVkCistLQorLS0gdHJhbnNpdGlv biBmcm9tICdsb2cnIHRvICdhbGwnCistLSBhIG5ldyBjb25mbGljdCBsb2cgdGFibGUgc2hvdWxk IGJlIGNyZWF0ZWQKK0NSRUFURSBTVUJTQ1JJUFRJT04gcmVncmVzc19jb25mbGljdF90ZXN0MiBD T05ORUNUSU9OICdkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QnIFBVQkxJQ0FUSU9OIHRlc3Rw dWIgV0lUSCAoY29ubmVjdCA9IGZhbHNlLCBjb25mbGljdF9sb2dfZGVzdGluYXRpb24gPSAnbG9n Jyk7CitXQVJOSU5HOiAgc3Vic2NyaXB0aW9uIHdhcyBjcmVhdGVkLCBidXQgaXMgbm90IGNvbm5l Y3RlZAorSElOVDogIFRvIGluaXRpYXRlIHJlcGxpY2F0aW9uLCB5b3UgbXVzdCBtYW51YWxseSBj cmVhdGUgdGhlIHJlcGxpY2F0aW9uIHNsb3QsIGVuYWJsZSB0aGUgc3Vic2NyaXB0aW9uLCBhbmQg YWx0ZXIgdGhlIHN1YnNjcmlwdGlvbiB0byByZWZyZXNoIHB1YmxpY2F0aW9ucy4KK0FMVEVSIFNV QlNDUklQVElPTiByZWdyZXNzX2NvbmZsaWN0X3Rlc3QyIFNFVCAoY29uZmxpY3RfbG9nX2Rlc3Rp bmF0aW9uID0gJ2FsbCcpOworLS0gdmVyaWZ5IG1ldGFkYXRhIGFmdGVyIEFMVEVSIChkZXN0aW5h dGlvbiBzaG91bGQgYmUgJ2FsbCcpCitTRUxFQ1Qgc3VibmFtZSwgc3ViY29uZmxpY3Rsb2dkZXN0 LCBzdWJjb25mbGljdGxvZ3JlbGlkID4gMCBBUyBoYXNfcmVsaWQKK0ZST00gcGdfc3Vic2NyaXB0 aW9uIFdIRVJFIHN1Ym5hbWUgPSAncmVncmVzc19jb25mbGljdF90ZXN0Mic7CisgICAgICAgIHN1 Ym5hbWUgICAgICAgICB8IHN1YmNvbmZsaWN0bG9nZGVzdCB8IGhhc19yZWxpZCAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLQorIHJlZ3Jl c3NfY29uZmxpY3RfdGVzdDIgfCBhbGwgICAgICAgICAgICAgICAgfCB0CisoMSByb3cpCisKKy0t IHRyYW5zaXRpb24gZnJvbSAnYWxsJyB0byAndGFibGUnCistLSBzaG91bGQgTk9UIGRyb3AgdGhl IHRhYmxlLCBvbmx5IGNoYW5nZSBkZXN0aW5hdGlvbiBzdHJpbmcKK1NFTEVDVCBzdWJjb25mbGlj dGxvZ3JlbGlkIEFTIG9sZF9yZWxpZCBGUk9NIHBnX3N1YnNjcmlwdGlvbiBXSEVSRSBzdWJuYW1l ID0gJ3JlZ3Jlc3NfY29uZmxpY3RfdGVzdDInIFxnc2V0CitBTFRFUiBTVUJTQ1JJUFRJT04gcmVn cmVzc19jb25mbGljdF90ZXN0MiBTRVQgKGNvbmZsaWN0X2xvZ19kZXN0aW5hdGlvbiA9ICd0YWJs ZScpOworU0VMRUNUIHN1YmNvbmZsaWN0bG9nZGVzdCwgc3ViY29uZmxpY3Rsb2dyZWxpZCA9IDpv bGRfcmVsaWQgQVMgcmVsaWRfdW5jaGFuZ2VkCitGUk9NIHBnX3N1YnNjcmlwdGlvbiBXSEVSRSBz dWJuYW1lID0gJ3JlZ3Jlc3NfY29uZmxpY3RfdGVzdDInOworIHN1YmNvbmZsaWN0bG9nZGVzdCB8 IHJlbGlkX3VuY2hhbmdlZCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t CisgdGFibGUgICAgICAgICAgICAgIHwgdAorKDEgcm93KQorCistLSB0cmFuc2l0aW9uIGZyb20g J3RhYmxlJyB0byAnbG9nJworLS0gc2hvdWxkIGRyb3AgdGhlIHRhYmxlIGFuZCBjbGVhciBzdWJj b25mbGljdGxvZ3JlbGlkCitBTFRFUiBTVUJTQ1JJUFRJT04gcmVncmVzc19jb25mbGljdF90ZXN0 MiBTRVQgKGNvbmZsaWN0X2xvZ19kZXN0aW5hdGlvbiA9ICdsb2cnKTsKK1NFTEVDVCBzdWJjb25m bGljdGxvZ2Rlc3QsIHN1YmNvbmZsaWN0bG9ncmVsaWQKK0ZST00gcGdfc3Vic2NyaXB0aW9uIFdI RVJFIHN1Ym5hbWUgPSAncmVncmVzc19jb25mbGljdF90ZXN0Mic7Cisgc3ViY29uZmxpY3Rsb2dk ZXN0IHwgc3ViY29uZmxpY3Rsb2dyZWxpZCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIGxvZyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIDAK KygxIHJvdykKKworLS0gdmVyaWZ5IHRoZSBwaHlzaWNhbCB0YWJsZSBpcyBnb25lCitTRUxFQ1Qg Y291bnQoKikKK0ZST00gcGdfY2xhc3MgYworSk9JTiBwZ19zdWJzY3JpcHRpb24gcyBPTiBjLnJl bG5hbWUgPSAncGdfY29uZmxpY3RfbG9nXycgfHwgcy5vaWQKK1dIRVJFIHMuc3VibmFtZSA9ICdy ZWdyZXNzX2NvbmZsaWN0X3Rlc3QyJzsKKyBjb3VudCAKKy0tLS0tLS0KKyAgICAgMAorKDEgcm93 KQorCistLQorLS0gUFVCTElDQVRJT046IFZlcmlmeSBjb25mbGljdCBsb2cgdGFibGVzIGFyZSBu b3QgcHVibGlzaGFibGUKKy0tCistLSBwZ19yZWxhdGlvbl9pc19wdWJsaXNoYWJsZSBzaG91bGQg cmV0dXJuIGZhbHNlIGZvciBjb25mbGljdCBsb2cgdGFibGVzIHRvCistLSBwcmV2ZW50IHRoZW0g ZnJvbSBiZWluZyBhY2NpZGVudGFsbHkgaW5jbHVkZWQgaW4gcHVibGljYXRpb25zCistLQorU0VM RUNUIG4ubnNwbmFtZSwgcGdfcmVsYXRpb25faXNfcHVibGlzaGFibGUoYy5vaWQpCitGUk9NIHBn X2NsYXNzIGMKK0pPSU4gcGdfbmFtZXNwYWNlIG4gT04gYy5yZWxuYW1lc3BhY2UgPSBuLm9pZAor Sk9JTiBwZ19zdWJzY3JpcHRpb24gcyBPTiBzLnN1YmNvbmZsaWN0bG9ncmVsaWQgPSBjLm9pZAor V0hFUkUgcy5zdWJuYW1lID0gJ3JlZ3Jlc3NfY29uZmxpY3RfdGVzdDEnOworICAgbnNwbmFtZSAg IHwgcGdfcmVsYXRpb25faXNfcHVibGlzaGFibGUgCistLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBwZ19jb25mbGljdCB8IGYKKygxIHJvdykKKworLS0KKy0tIFRh YmxlIFByb3RlY3Rpb24gYW5kIExpZmVjeWNsZSBNYW5hZ2VtZW50CistLQorLS0gVGhlc2UgdGVz dHMgdmVyaWZ5IHRoYXQ6CistLSBNYW51YWwgRFJPUCBUQUJMRSBpcyBkaXNhbGxvd2VkCistLSBE Uk9QIFNVQlNDUklQVElPTiBhdXRvbWF0aWNhbGx5IHJlYXBzIHRoZSB0YWJsZQorLS0KKy0tIHJl LWVuYWJsZSB0YWJsZSBsb2dnaW5nIGZvciB2ZXJpZmljYXRpb24KK0FMVEVSIFNVQlNDUklQVElP TiByZWdyZXNzX2NvbmZsaWN0X3Rlc3QxIFNFVCAoY29uZmxpY3RfbG9nX2Rlc3RpbmF0aW9uID0g J3RhYmxlJyk7CistLSBXZSB1c2UgYSBETyBibG9jayB3aXRoIGR5bmFtaWMgU1FMIGJlY2F1c2Ug dGhlIGNvbmZsaWN0IGxvZyB0YWJsZQorLS0gbmFtZSBjb250YWlucyB0aGUgc3Vic2NyaXB0aW9u IE9JRCwgd2hpY2ggaXMgbm9uLWRldGVybWluaXN0aWMuIFRoaXMKKy0tIGFwcHJvYWNoIGFsbG93 cyB1cyB0byBhdHRlbXB0IHRoZSBEUk9QIGFuZCBjYXB0dXJlIHRoZSBleHBlY3RlZCBlcnJvcgor LS0gd2l0aG91dCBoYXJkLWNvZGluZyBhIHNwZWNpZmljIE9JRCBpbiB0aGUgZXhwZWN0ZWQgb3V0 cHV0CistLSBmYWlsIC0gZHJvcCB0YWJsZSBub3QgYWxsb3dlZCBkdWUgdG8gaW50ZXJuYWwgZGVw ZW5kZW5jeQorU0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSBOT1RJQ0U7CitETyAkJAorQkVHSU4K KyAgICBFWEVDVVRFICdEUk9QIFRBQkxFICcgfHwgKFNFTEVDVCAncGdfY29uZmxpY3QucGdfY29u ZmxpY3RfbG9nXycgfHwgb2lkIEZST00gcGdfc3Vic2NyaXB0aW9uIFdIRVJFIHN1Ym5hbWUgPSAn cmVncmVzc19jb25mbGljdF90ZXN0MScpOworRVhDRVBUSU9OIFdIRU4gaW5zdWZmaWNpZW50X3By aXZpbGVnZSBUSEVOCisgICAgUkFJU0UgTk9USUNFICdjYXB0dXJlZCBleHBlY3RlZCBlcnJvcjog aW5zdWZmaWNpZW50X3ByaXZpbGVnZSc7CitFTkQgJCQ7CitOT1RJQ0U6ICBjYXB0dXJlZCBleHBl Y3RlZCBlcnJvcjogaW5zdWZmaWNpZW50X3ByaXZpbGVnZQorLS0gQ0xFQU5VUDogRFJPUCBTVUJT Q1JJUFRJT04gcmVhcHMgdGhlIHRhYmxlCitBTFRFUiBTVUJTQ1JJUFRJT04gcmVncmVzc19jb25m bGljdF90ZXN0MSBESVNBQkxFOworQUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfY29uZmxpY3Rf dGVzdDEgU0VUIChzbG90X25hbWUgPSBOT05FKTsKKy0tIFZlcmlmeSB0aGUgdGFibGUgT0lEIGZv ciByZWFwIGNoZWNrCitTRUxFQ1QgJ3BnX2NvbmZsaWN0LnBnX2NvbmZsaWN0X2xvZ18nIHx8IG9p ZCBBUyBpbnRlcm5hbF90YWJsZW5hbWUgRlJPTSBwZ19zdWJzY3JpcHRpb24gV0hFUkUgc3VibmFt ZSA9ICdyZWdyZXNzX2NvbmZsaWN0X3Rlc3QxJyBcZ3NldAorU0VUIGNsaWVudF9taW5fbWVzc2Fn ZXMgPSBXQVJOSU5HOworRFJPUCBTVUJTQ1JJUFRJT04gcmVncmVzc19jb25mbGljdF90ZXN0MTsK Ky0tIHNob3VsZCByZXR1cm4gTlVMTCwgbWVhbmluZyB0aGUgY29uZmxpY3QgbG9nIHRhYmxlIHdh cyByZWFwZWQgdmlhIGRlcGVuZGVuY3kKK1NFTEVDVCB0b19yZWdjbGFzcyg6J2ludGVybmFsX3Rh YmxlbmFtZScpOworIHRvX3JlZ2NsYXNzIAorLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCist LQorLS0gQWRkaXRpb25hbCBOYW1lc3BhY2UgYW5kIFRhYmxlIFByb3RlY3Rpb24gVGVzdHMKKy0t CistLSBTZXR1cDogRW5zdXJlIHdlIGhhdmUgYSBzdWJzY3JpcHRpb24gd2l0aCBhIGNvbmZsaWN0 IGxvZyB0YWJsZQorQ1JFQVRFIFNVQlNDUklQVElPTiByZWdyZXNzX2NvbmZsaWN0X3Byb3RlY3Rp b25fdGVzdCBDT05ORUNUSU9OICdkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QnCisgICAgUFVC TElDQVRJT04gdGVzdHB1YiBXSVRIIChjb25uZWN0ID0gZmFsc2UsIGNvbmZsaWN0X2xvZ19kZXN0 aW5hdGlvbiA9ICd0YWJsZScpOworV0FSTklORzogIHN1YnNjcmlwdGlvbiB3YXMgY3JlYXRlZCwg YnV0IGlzIG5vdCBjb25uZWN0ZWQKK0hJTlQ6ICBUbyBpbml0aWF0ZSByZXBsaWNhdGlvbiwgeW91 IG11c3QgbWFudWFsbHkgY3JlYXRlIHRoZSByZXBsaWNhdGlvbiBzbG90LCBlbmFibGUgdGhlIHN1 YnNjcmlwdGlvbiwgYW5kIGFsdGVyIHRoZSBzdWJzY3JpcHRpb24gdG8gcmVmcmVzaCBwdWJsaWNh dGlvbnMuCistLSBUcnlpbmcgdG8gQUxURVIgdGhlIGNvbmZsaWN0IGxvZyB0YWJsZQorLS0gVGhp cyBzaG91bGQgZmFpbCBiZWNhdXNlIHRoZSB0YWJsZSBpcyBzeXN0ZW0tbWFuYWdlZAorLS0gQXMg bWVudGlvbmVkIGluIHByZXZpb3VzIHRlc3QgY2FzZXMsIHdlIHVzZSBhIERPIGJsb2NrIHRvIGhp ZGUgZHluYW1pYyBPSURzCitTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9IE5PVElDRTsKK0RPICQk CitERUNMQVJFCisgICAgdGFiX25hbWUgdGV4dDsKK0JFR0lOCisgICAgU0VMRUNUICdwZ19jb25m bGljdC4nIHx8IHJlbG5hbWUgSU5UTyB0YWJfbmFtZQorICAgIEZST00gcGdfY2xhc3MgYyBKT0lO IHBnX3N1YnNjcmlwdGlvbiBzIE9OIGMucmVsbmFtZSA9ICdwZ19jb25mbGljdF9sb2dfJyB8fCBz Lm9pZAorICAgIFdIRVJFIHMuc3VibmFtZSA9ICdyZWdyZXNzX2NvbmZsaWN0X3Byb3RlY3Rpb25f dGVzdCc7CisKKyAgICBSQUlTRSBOT1RJQ0UgJ0F0dGVtcHRpbmcgQUxURVIgVEFCTEUgb24gY29u ZmxpY3QgbG9nIHRhYmxlJzsKKyAgICBFWEVDVVRFICdBTFRFUiBUQUJMRSAnIHx8IHRhYl9uYW1l IHx8ICcgQUREIENPTFVNTiBleHRyYV9pbmZvIHRleHQnOworRVhDRVBUSU9OIFdIRU4gaW5zdWZm aWNpZW50X3ByaXZpbGVnZSBUSEVOCisgICAgUkFJU0UgTk9USUNFICdjYXB0dXJlZCBleHBlY3Rl ZCBlcnJvcjogaW5zdWZmaWNpZW50X3ByaXZpbGVnZSBkdXJpbmcgQUxURVInOworRU5EICQkOwor Tk9USUNFOiAgQXR0ZW1wdGluZyBBTFRFUiBUQUJMRSBvbiBjb25mbGljdCBsb2cgdGFibGUKK05P VElDRTogIGNhcHR1cmVkIGV4cGVjdGVkIGVycm9yOiBpbnN1ZmZpY2llbnRfcHJpdmlsZWdlIGR1 cmluZyBBTFRFUgorLS0gVGVzdCBNYW51YWwgSU5TRVJUIG9uIGNvbmZsaWN0IGxvZyB0YWJsZQor LS0gVGhpcyBzaG91bGQgZmFpbCBiZWNhdXNlIHRoZSB0YWJsZSBpcyBzeXN0ZW0tbWFuYWdlZAor LS0gSGlkaW5nIHRoZSBPSUQgaW4gdGhlIGVycm9yIG1lc3NhZ2UgYnkgY2F0Y2hpbmcgdGhlIGV4 Y2VwdGlvbgorRE8gJCQKK0RFQ0xBUkUKKyAgICB0YWJfbmFtZSB0ZXh0OworQkVHSU4KKyAgICBT RUxFQ1QgJ3BnX2NvbmZsaWN0LicgfHwgcmVsbmFtZSBJTlRPIHRhYl9uYW1lCisgICAgRlJPTSBw Z19jbGFzcyBjIEpPSU4gcGdfc3Vic2NyaXB0aW9uIHMgT04gYy5yZWxuYW1lID0gJ3BnX2NvbmZs aWN0X2xvZ18nIHx8IHMub2lkCisgICAgV0hFUkUgcy5zdWJuYW1lID0gJ3JlZ3Jlc3NfY29uZmxp Y3RfcHJvdGVjdGlvbl90ZXN0JzsKKworICAgIEVYRUNVVEUgJ0lOU0VSVCBJTlRPICcgfHwgdGFi X25hbWUgfHwgJyAocmVsbmFtZSkgVkFMVUVTICgnJ215dGVzdCcnKSc7CitFWENFUFRJT04gV0hF TiB3cm9uZ19vYmplY3RfdHlwZSBUSEVOCisgICAgUkFJU0UgTk9USUNFICdjYXB0dXJlZCBleHBl Y3RlZCBlcnJvcjogd3Jvbmdfb2JqZWN0X3R5cGUgZHVyaW5nIElOU0VSVCc7CitFTkQgJCQ7CitO T1RJQ0U6ICBjYXB0dXJlZCBleHBlY3RlZCBlcnJvcjogd3Jvbmdfb2JqZWN0X3R5cGUgZHVyaW5n IElOU0VSVAorLS0gVGVzdCBNYW51YWwgVVBEQVRFIG9uIGNvbmZsaWN0IGxvZyB0YWJsZQorLS0g VGhpcyBzaG91bGQgZmFpbCBiZWNhdXNlIHRoZSB0YWJsZSBpcyBzeXN0ZW0tbWFuYWdlZAorLS0g SGlkaW5nIHRoZSBPSUQgaW4gdGhlIGVycm9yIG1lc3NhZ2UgYnkgY2F0Y2hpbmcgdGhlIGV4Y2Vw dGlvbgorRE8gJCQKK0RFQ0xBUkUKKyAgICB0YWJfbmFtZSB0ZXh0OworQkVHSU4KKyAgICBTRUxF Q1QgJ3BnX2NvbmZsaWN0LicgfHwgcmVsbmFtZSBJTlRPIHRhYl9uYW1lCisgICAgRlJPTSBwZ19j bGFzcyBjIEpPSU4gcGdfc3Vic2NyaXB0aW9uIHMgT04gYy5yZWxuYW1lID0gJ3BnX2NvbmZsaWN0 X2xvZ18nIHx8IHMub2lkCisgICAgV0hFUkUgcy5zdWJuYW1lID0gJ3JlZ3Jlc3NfY29uZmxpY3Rf cHJvdGVjdGlvbl90ZXN0JzsKKworICAgIEVYRUNVVEUgJ1VQREFURSAnIHx8IHRhYl9uYW1lIHx8 ICcgU0VUIHJlbG5hbWUgPSAnJ215dGVzdCcnICc7CitFWENFUFRJT04gV0hFTiB3cm9uZ19vYmpl Y3RfdHlwZSBUSEVOCisgICAgUkFJU0UgTk9USUNFICdjYXB0dXJlZCBleHBlY3RlZCBlcnJvcjog d3Jvbmdfb2JqZWN0X3R5cGUgZHVyaW5nIFVQREFURSc7CitFTkQgJCQ7CitOT1RJQ0U6ICBjYXB0 dXJlZCBleHBlY3RlZCBlcnJvcjogd3Jvbmdfb2JqZWN0X3R5cGUgZHVyaW5nIFVQREFURQorLS0g VHJ5aW5nIHRvIHBlcmZvcm0gVFJVTkNBVEUvREVMRVRFIG9uIHRoZSBjb25mbGljdCBsb2cgdGFi bGUKKy0tIFRoaXMgc2hvdWxkIGJlIGFsbG93ZWQgc28gdGhhdCB1c2VyIGNhbiBwZXJmb3JtIGNs ZWFudXAKK1NFTEVDVCAncGdfY29uZmxpY3QuJyB8fCByZWxuYW1lIEFTIGNvbmZsaWN0X3RhYgor RlJPTSBwZ19jbGFzcyBjCitKT0lOIHBnX3N1YnNjcmlwdGlvbiBzIE9OIGMucmVsbmFtZSA9ICdw Z19jb25mbGljdF9sb2dfJyB8fCBzLm9pZAorV0hFUkUgcy5zdWJuYW1lID0gJ3JlZ3Jlc3NfY29u ZmxpY3RfcHJvdGVjdGlvbl90ZXN0JyBcZ3NldAorVFJVTkNBVEUgOmNvbmZsaWN0X3RhYjsKK0RF TEVURSBGUk9NIDpjb25mbGljdF90YWI7CistLSBUcnlpbmcgdG8gY3JlYXRlIGEgbmV3IHRhYmxl IG1hbnVhbGx5IGluIHRoZSBwZ19jb25mbGljdCBuYW1lc3BhY2UKKy0tIFRoaXMgc2hvdWxkIGZh aWwgYXMgdGhlIG5hbWVzcGFjZSBpcyByZXNlcnZlZCBmb3IgY29uZmxpY3QgbG9ncyB0YWJsZXMK K0NSRUFURSBUQUJMRSBwZ19jb25mbGljdC5tYW51YWxfdGFibGUgKGlkIGludCk7CitFUlJPUjog IHBlcm1pc3Npb24gZGVuaWVkIHRvIGNyZWF0ZSAicGdfY29uZmxpY3QubWFudWFsX3RhYmxlIgor REVUQUlMOiAgQ29uZmxpY3Qgc2NoZW1hIG1vZGlmaWNhdGlvbnMgYXJlIGN1cnJlbnRseSBkaXNh bGxvd2VkLgorLS0gTW92aW5nIGFuIGV4aXN0aW5nIHRhYmxlIGludG8gdGhlIHBnX2NvbmZsaWN0 IG5hbWVzcGFjZQorLS0gVXNlcnMgc2hvdWxkIG5vdCBiZSBhYmxlIHRvIG1vdmUgdGhlaXIgb3du IHRhYmxlcyB3aXRoaW4gdGhpcyBuYW1lc3BhY2UKK0NSRUFURSBUQUJMRSBwdWJsaWMudGVzdF9t b3ZlIChpZCBpbnQpOworQUxURVIgVEFCTEUgcHVibGljLnRlc3RfbW92ZSBTRVQgU0NIRU1BIHBn X2NvbmZsaWN0OworRVJST1I6ICBjYW5ub3QgbW92ZSBvYmplY3RzIGludG8gb3Igb3V0IG9mIHRo ZSBjb25mbGljdCBzY2hlbWEKK0RST1AgVEFCTEUgcHVibGljLnRlc3RfbW92ZTsKK1NFVCBjbGll bnRfbWluX21lc3NhZ2VzID0gV0FSTklORzsKKy0tIENsZWFuIHVwIHJlbWFpbmluZyB0ZXN0IHN1 YnNjcmlwdGlvbgorQUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfY29uZmxpY3RfbG9nX2RlZmF1 bHQgRElTQUJMRTsKK0FMVEVSIFNVQlNDUklQVElPTiByZWdyZXNzX2NvbmZsaWN0X2xvZ19kZWZh dWx0IFNFVCAoc2xvdF9uYW1lID0gTk9ORSk7CitEUk9QIFNVQlNDUklQVElPTiByZWdyZXNzX2Nv bmZsaWN0X2xvZ19kZWZhdWx0OworQUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfY29uZmxpY3Rf ZW1wdHlfc3RyIERJU0FCTEU7CitBTFRFUiBTVUJTQ1JJUFRJT04gcmVncmVzc19jb25mbGljdF9l bXB0eV9zdHIgU0VUIChzbG90X25hbWUgPSBOT05FKTsKK0RST1AgU1VCU0NSSVBUSU9OIHJlZ3Jl c3NfY29uZmxpY3RfZW1wdHlfc3RyOworQUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfY29uZmxp Y3RfdGVzdDIgRElTQUJMRTsKK0FMVEVSIFNVQlNDUklQVElPTiByZWdyZXNzX2NvbmZsaWN0X3Rl c3QyIFNFVCAoc2xvdF9uYW1lID0gTk9ORSk7CitEUk9QIFNVQlNDUklQVElPTiByZWdyZXNzX2Nv bmZsaWN0X3Rlc3QyOworQUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfY29uZmxpY3RfcHJvdGVj dGlvbl90ZXN0IERJU0FCTEU7CitBTFRFUiBTVUJTQ1JJUFRJT04gcmVncmVzc19jb25mbGljdF9w cm90ZWN0aW9uX3Rlc3QgU0VUIChzbG90X25hbWUgPSBOT05FKTsKK0RST1AgU1VCU0NSSVBUSU9O IHJlZ3Jlc3NfY29uZmxpY3RfcHJvdGVjdGlvbl90ZXN0OwogUkVTRVQgU0VTU0lPTiBBVVRIT1JJ WkFUSU9OOwogRFJPUCBST0xFIHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXI7CiBEUk9QIFJPTEUg cmVncmVzc19zdWJzY3JpcHRpb25fdXNlcjI7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNz L3NxbC9zdWJzY3JpcHRpb24uc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3Vic2NyaXB0aW9u LnNxbAppbmRleCA2YzNkOTYzMmU4YS4uZjVmZmQwMGFkYzMgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL3N1YnNjcmlwdGlvbi5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwv c3Vic2NyaXB0aW9uLnNxbApAQCAtNDMxLDYgKzQzMSwyNjIgQEAgQ09NTUlUOwogQUxURVIgU1VC U0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YiBTRVQgKHNsb3RfbmFtZSA9IE5PTkUpOwogRFJPUCBT VUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3ViOwogCistLQorLS0gQ09ORkxJQ1QgTE9HIERFU1RJ TkFUSU9OIFRFU1RTCistLQorCitTRVQgU0VTU0lPTiBBVVRIT1JJWkFUSU9OICdyZWdyZXNzX3N1 YnNjcmlwdGlvbl91c2VyJzsKKworU0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSBXQVJOSU5HOwor CistLSBmYWlsIC0gdW5yZWNvZ25pemVkIHBhcmFtZXRlciB2YWx1ZQorQ1JFQVRFIFNVQlNDUklQ VElPTiByZWdyZXNzX2NvbmZsaWN0X2ZhaWwgQ09OTkVDVElPTiAnZGJuYW1lPXJlZ3Jlc3NfZG9l c25vdGV4aXN0JyBQVUJMSUNBVElPTiB0ZXN0cHViIFdJVEggKGNvbm5lY3QgPSBmYWxzZSwgY29u ZmxpY3RfbG9nX2Rlc3RpbmF0aW9uID0gJ2ludmFsaWQnKTsKKworLS0gdmVyaWZ5IHN1YmNvbmZs aWN0bG9nZGVzdCBpcyAnbG9nJyBhbmQgc3ViY29uZmxpY3Rsb2dyZWxpZCBpcyAwIChJbnZhbGlk T2lkKSBmb3IgZGVmYXVsdCBjYXNlCitDUkVBVEUgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfY29uZmxp Y3RfbG9nX2RlZmF1bHQgQ09OTkVDVElPTiAnZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0JyBQ VUJMSUNBVElPTiB0ZXN0cHViIFdJVEggKGNvbm5lY3QgPSBmYWxzZSk7CitTRUxFQ1Qgc3VibmFt ZSwgc3ViY29uZmxpY3Rsb2dkZXN0LCBzdWJjb25mbGljdGxvZ3JlbGlkCitGUk9NIHBnX3N1YnNj cmlwdGlvbiBXSEVSRSBzdWJuYW1lID0gJ3JlZ3Jlc3NfY29uZmxpY3RfbG9nX2RlZmF1bHQnOwor CistLSB2ZXJpZnkgZW1wdHkgc3RyaW5nIGRlZmF1bHRzIHRvICdsb2cnCitDUkVBVEUgU1VCU0NS SVBUSU9OIHJlZ3Jlc3NfY29uZmxpY3RfZW1wdHlfc3RyIENPTk5FQ1RJT04gJ2RibmFtZT1yZWdy ZXNzX2RvZXNub3RleGlzdCcgUFVCTElDQVRJT04gdGVzdHB1YiBXSVRIIChjb25uZWN0ID0gZmFs c2UsIGNvbmZsaWN0X2xvZ19kZXN0aW5hdGlvbiA9ICcnKTsKK1NFTEVDVCBzdWJuYW1lLCBzdWJj b25mbGljdGxvZ2Rlc3QsIHN1YmNvbmZsaWN0bG9ncmVsaWQKK0ZST00gcGdfc3Vic2NyaXB0aW9u IFdIRVJFIHN1Ym5hbWUgPSAncmVncmVzc19jb25mbGljdF9lbXB0eV9zdHInOworCistLSB0aGlz IHNob3VsZCBnZW5lcmF0ZSBhbiBjb25mbGljdCBsb2cgdGFibGUgbmFtZWQgcGdfY29uZmxpY3Rf bG9nXyRzdWJpZCQKK0NSRUFURSBTVUJTQ1JJUFRJT04gcmVncmVzc19jb25mbGljdF90ZXN0MSBD T05ORUNUSU9OICdkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QnIFBVQkxJQ0FUSU9OIHRlc3Rw dWIgV0lUSCAoY29ubmVjdCA9IGZhbHNlLCBjb25mbGljdF9sb2dfZGVzdGluYXRpb24gPSAndGFi bGUnKTsKKworLS0gY2hlY2sgbWV0YWRhdGEgaW4gcGdfc3Vic2NyaXB0aW9uOiBkZXN0aW5hdGlv biBzaG91bGQgYmUgJ3RhYmxlJyBhbmQgc3ViY29uZmxpY3Rsb2dyZWxpZCB2YWxpZAorU0VMRUNU IHN1Ym5hbWUsIHN1YmNvbmZsaWN0bG9nZGVzdCwgc3ViY29uZmxpY3Rsb2dyZWxpZCA+IDAgQVMg aGFzX3JlbGlkCitGUk9NIHBnX3N1YnNjcmlwdGlvbiBXSEVSRSBzdWJuYW1lID0gJ3JlZ3Jlc3Nf Y29uZmxpY3RfdGVzdDEnOworCistLSB2ZXJpZnkgdGhlIHBoeXNpY2FsIHRhYmxlIGV4aXN0cywg aXRzIE9JRCBtYXRjaGVzIHN1YmNvbmZsaWN0bG9ncmVsaWQsCistLSBhbmQgaXQgaXMgbG9jYXRl ZCBpbiB0aGUgJ3BnX2NvbmZsaWN0JyBuYW1lc3BhY2UKK1NFTEVDVCBuLm5zcG5hbWUsIChjLm9p ZCA9IHMuc3ViY29uZmxpY3Rsb2dyZWxpZCkgQVMgIm9pZF9tYXRjaGVzIgorRlJPTSBwZ19jbGFz cyBjCitKT0lOIHBnX3N1YnNjcmlwdGlvbiBzIE9OIGMucmVsbmFtZSA9ICdwZ19jb25mbGljdF9s b2dfJyB8fCBzLm9pZAorSk9JTiBwZ19uYW1lc3BhY2UgbiBPTiBjLnJlbG5hbWVzcGFjZSA9IG4u b2lkCitXSEVSRSBzLnN1Ym5hbWUgPSAncmVncmVzc19jb25mbGljdF90ZXN0MSc7CisKKy0tIGNo ZWNrIGlmIHRoZSBjb25mbGljdCBsb2cgdGFibGUgaGFzIHRoZSBjb3JyZWN0IHNjaGVtYQorU0VM RUNUIGEuYXR0bnVtLCBhLmF0dG5hbWUKK0ZST00gcGdfYXR0cmlidXRlIGEKK0pPSU4gcGdfY2xh c3MgYyBPTiBhLmF0dHJlbGlkID0gYy5vaWQKK0pPSU4gcGdfc3Vic2NyaXB0aW9uIHMgT04gYy5y ZWxuYW1lID0gJ3BnX2NvbmZsaWN0X2xvZ18nIHx8IHMub2lkCitXSEVSRSBzLnN1Ym5hbWUgPSAn cmVncmVzc19jb25mbGljdF90ZXN0MScgQU5EIGEuYXR0bnVtID4gMAorICAgIE9SREVSIEJZIGEu YXR0bnVtOworCistLSBDaGFuZ2luZyB0aGUgc3Vic2NyaXB0aW9uIG93bmVyIHNob3VsZCBhbHNv IHVwZGF0ZSB0aGUgb3duZXIKKy0tIG9mIHRoZSBhc3NvY2lhdGVkIGNvbmZsaWN0IGxvZyB0YWJs ZS4KK0FMVEVSIFNVQlNDUklQVElPTiByZWdyZXNzX2NvbmZsaWN0X3Rlc3QxIE9XTkVSIFRPIHJl Z3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIyOworU0VMRUNUIHBnX2NhdGFsb2cucGdfZ2V0X3VzZXJi eWlkKGMucmVsb3duZXIpIEFTIG93bmVyCitGUk9NIHBnX2NhdGFsb2cucGdfY2xhc3MgYworSk9J TiBwZ19jYXRhbG9nLnBnX3N1YnNjcmlwdGlvbiBzCisgICAgICAgIE9OIGMucmVsbmFtZSA9ICdw Z19jb25mbGljdF9sb2dfJyB8fCBzLm9pZAorV0hFUkUgcy5zdWJuYW1lID0gJ3JlZ3Jlc3NfY29u ZmxpY3RfdGVzdDEnOworCistLSBWZXJpZnkgdGhhdCBhIG5vbi1zdXBlcnVzZXIgc3Vic2NyaXB0 aW9uIG93bmVyIGNhbiB0cnVuY2F0ZSwKKy0tIGRlbGV0ZSBmcm9tLCBhbmQgc2VsZWN0IGZyb20g dGhlIGFzc29jaWF0ZWQgY29uZmxpY3QgbG9nIHRhYmxlLgorU0VUIFJPTEUgJ3JlZ3Jlc3Nfc3Vi c2NyaXB0aW9uX3VzZXIyJzsKKworU0VMRUNUIGZvcm1hdCgnJUkuJUknLCBuLm5zcG5hbWUsIGMu cmVsbmFtZSkgQVMgY29uZmxpY3RfbG9nX3RhYmxlCitGUk9NIHBnX2NhdGFsb2cucGdfY2xhc3Mg YworSk9JTiBwZ19jYXRhbG9nLnBnX25hbWVzcGFjZSBuCisJT04gbi5vaWQgPSBjLnJlbG5hbWVz cGFjZQorSk9JTiBwZ19jYXRhbG9nLnBnX3N1YnNjcmlwdGlvbiBzCisJT04gYy5yZWxuYW1lID0g J3BnX2NvbmZsaWN0X2xvZ18nIHx8IHMub2lkCitXSEVSRSBzLnN1Ym5hbWUgPSAncmVncmVzc19j b25mbGljdF90ZXN0MScKK1xnc2V0CisKK1RSVU5DQVRFIFRBQkxFIDpjb25mbGljdF9sb2dfdGFi bGU7CitERUxFVEUgRlJPTSA6Y29uZmxpY3RfbG9nX3RhYmxlOworU0VMRUNUIENPVU5UKCopIEZS T00gOmNvbmZsaWN0X2xvZ190YWJsZTsKKworUkVTRVQgUk9MRTsKKworLS0gUmVzdG9yZSB0aGUg b3JpZ2luYWwgc3Vic2NyaXB0aW9uIG93bmVyLgorQUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3Nf Y29uZmxpY3RfdGVzdDEgT1dORVIgVE8gcmVncmVzc19zdWJzY3JpcHRpb25fdXNlcjsKKworLS0K Ky0tIEFMVEVSIFNVQlNDUklQVElPTiAtIGNvbmZsaWN0X2xvZ19kZXN0aW5hdGlvbiBzdGF0ZSB0 cmFuc2l0aW9ucworLS0KKy0tIFRoZXNlIHRlc3RzIHZlcmlmeSB0aGUgdHJhbnNpdGlvbiBsb2dp YyBiZXR3ZWVuIGRpZmZlcmVudCBsb2dnaW5nCistLSBkZXN0aW5hdGlvbnMsIGVuc3VyaW5nIGNv bmZsaWN0IGxvZyB0YWJsZXMgYXJlIGNyZWF0ZWQgb3IgZHJvcHBlZCBhcworLS0gZXhwZWN0ZWQK Ky0tCistLSB0cmFuc2l0aW9uIGZyb20gJ2xvZycgdG8gJ2FsbCcKKy0tIGEgbmV3IGNvbmZsaWN0 IGxvZyB0YWJsZSBzaG91bGQgYmUgY3JlYXRlZAorQ1JFQVRFIFNVQlNDUklQVElPTiByZWdyZXNz X2NvbmZsaWN0X3Rlc3QyIENPTk5FQ1RJT04gJ2RibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdCcg UFVCTElDQVRJT04gdGVzdHB1YiBXSVRIIChjb25uZWN0ID0gZmFsc2UsIGNvbmZsaWN0X2xvZ19k ZXN0aW5hdGlvbiA9ICdsb2cnKTsKK0FMVEVSIFNVQlNDUklQVElPTiByZWdyZXNzX2NvbmZsaWN0 X3Rlc3QyIFNFVCAoY29uZmxpY3RfbG9nX2Rlc3RpbmF0aW9uID0gJ2FsbCcpOworCistLSB2ZXJp ZnkgbWV0YWRhdGEgYWZ0ZXIgQUxURVIgKGRlc3RpbmF0aW9uIHNob3VsZCBiZSAnYWxsJykKK1NF TEVDVCBzdWJuYW1lLCBzdWJjb25mbGljdGxvZ2Rlc3QsIHN1YmNvbmZsaWN0bG9ncmVsaWQgPiAw IEFTIGhhc19yZWxpZAorRlJPTSBwZ19zdWJzY3JpcHRpb24gV0hFUkUgc3VibmFtZSA9ICdyZWdy ZXNzX2NvbmZsaWN0X3Rlc3QyJzsKKworLS0gdHJhbnNpdGlvbiBmcm9tICdhbGwnIHRvICd0YWJs ZScKKy0tIHNob3VsZCBOT1QgZHJvcCB0aGUgdGFibGUsIG9ubHkgY2hhbmdlIGRlc3RpbmF0aW9u IHN0cmluZworU0VMRUNUIHN1YmNvbmZsaWN0bG9ncmVsaWQgQVMgb2xkX3JlbGlkIEZST00gcGdf c3Vic2NyaXB0aW9uIFdIRVJFIHN1Ym5hbWUgPSAncmVncmVzc19jb25mbGljdF90ZXN0MicgXGdz ZXQKK0FMVEVSIFNVQlNDUklQVElPTiByZWdyZXNzX2NvbmZsaWN0X3Rlc3QyIFNFVCAoY29uZmxp Y3RfbG9nX2Rlc3RpbmF0aW9uID0gJ3RhYmxlJyk7CitTRUxFQ1Qgc3ViY29uZmxpY3Rsb2dkZXN0 LCBzdWJjb25mbGljdGxvZ3JlbGlkID0gOm9sZF9yZWxpZCBBUyByZWxpZF91bmNoYW5nZWQKK0ZS T00gcGdfc3Vic2NyaXB0aW9uIFdIRVJFIHN1Ym5hbWUgPSAncmVncmVzc19jb25mbGljdF90ZXN0 Mic7CisKKy0tIHRyYW5zaXRpb24gZnJvbSAndGFibGUnIHRvICdsb2cnCistLSBzaG91bGQgZHJv cCB0aGUgdGFibGUgYW5kIGNsZWFyIHN1YmNvbmZsaWN0bG9ncmVsaWQKK0FMVEVSIFNVQlNDUklQ VElPTiByZWdyZXNzX2NvbmZsaWN0X3Rlc3QyIFNFVCAoY29uZmxpY3RfbG9nX2Rlc3RpbmF0aW9u ID0gJ2xvZycpOworU0VMRUNUIHN1YmNvbmZsaWN0bG9nZGVzdCwgc3ViY29uZmxpY3Rsb2dyZWxp ZAorRlJPTSBwZ19zdWJzY3JpcHRpb24gV0hFUkUgc3VibmFtZSA9ICdyZWdyZXNzX2NvbmZsaWN0 X3Rlc3QyJzsKKworLS0gdmVyaWZ5IHRoZSBwaHlzaWNhbCB0YWJsZSBpcyBnb25lCitTRUxFQ1Qg Y291bnQoKikKK0ZST00gcGdfY2xhc3MgYworSk9JTiBwZ19zdWJzY3JpcHRpb24gcyBPTiBjLnJl bG5hbWUgPSAncGdfY29uZmxpY3RfbG9nXycgfHwgcy5vaWQKK1dIRVJFIHMuc3VibmFtZSA9ICdy ZWdyZXNzX2NvbmZsaWN0X3Rlc3QyJzsKKworLS0KKy0tIFBVQkxJQ0FUSU9OOiBWZXJpZnkgY29u ZmxpY3QgbG9nIHRhYmxlcyBhcmUgbm90IHB1Ymxpc2hhYmxlCistLQorLS0gcGdfcmVsYXRpb25f aXNfcHVibGlzaGFibGUgc2hvdWxkIHJldHVybiBmYWxzZSBmb3IgY29uZmxpY3QgbG9nIHRhYmxl cyB0bworLS0gcHJldmVudCB0aGVtIGZyb20gYmVpbmcgYWNjaWRlbnRhbGx5IGluY2x1ZGVkIGlu IHB1YmxpY2F0aW9ucworLS0KK1NFTEVDVCBuLm5zcG5hbWUsIHBnX3JlbGF0aW9uX2lzX3B1Ymxp c2hhYmxlKGMub2lkKQorRlJPTSBwZ19jbGFzcyBjCitKT0lOIHBnX25hbWVzcGFjZSBuIE9OIGMu cmVsbmFtZXNwYWNlID0gbi5vaWQKK0pPSU4gcGdfc3Vic2NyaXB0aW9uIHMgT04gcy5zdWJjb25m bGljdGxvZ3JlbGlkID0gYy5vaWQKK1dIRVJFIHMuc3VibmFtZSA9ICdyZWdyZXNzX2NvbmZsaWN0 X3Rlc3QxJzsKKworLS0KKy0tIFRhYmxlIFByb3RlY3Rpb24gYW5kIExpZmVjeWNsZSBNYW5hZ2Vt ZW50CistLQorLS0gVGhlc2UgdGVzdHMgdmVyaWZ5IHRoYXQ6CistLSBNYW51YWwgRFJPUCBUQUJM RSBpcyBkaXNhbGxvd2VkCistLSBEUk9QIFNVQlNDUklQVElPTiBhdXRvbWF0aWNhbGx5IHJlYXBz IHRoZSB0YWJsZQorLS0KKy0tIHJlLWVuYWJsZSB0YWJsZSBsb2dnaW5nIGZvciB2ZXJpZmljYXRp b24KK0FMVEVSIFNVQlNDUklQVElPTiByZWdyZXNzX2NvbmZsaWN0X3Rlc3QxIFNFVCAoY29uZmxp Y3RfbG9nX2Rlc3RpbmF0aW9uID0gJ3RhYmxlJyk7CisKKy0tIFdlIHVzZSBhIERPIGJsb2NrIHdp dGggZHluYW1pYyBTUUwgYmVjYXVzZSB0aGUgY29uZmxpY3QgbG9nIHRhYmxlCistLSBuYW1lIGNv bnRhaW5zIHRoZSBzdWJzY3JpcHRpb24gT0lELCB3aGljaCBpcyBub24tZGV0ZXJtaW5pc3RpYy4g VGhpcworLS0gYXBwcm9hY2ggYWxsb3dzIHVzIHRvIGF0dGVtcHQgdGhlIERST1AgYW5kIGNhcHR1 cmUgdGhlIGV4cGVjdGVkIGVycm9yCistLSB3aXRob3V0IGhhcmQtY29kaW5nIGEgc3BlY2lmaWMg T0lEIGluIHRoZSBleHBlY3RlZCBvdXRwdXQKKworLS0gZmFpbCAtIGRyb3AgdGFibGUgbm90IGFs bG93ZWQgZHVlIHRvIGludGVybmFsIGRlcGVuZGVuY3kKK1NFVCBjbGllbnRfbWluX21lc3NhZ2Vz ID0gTk9USUNFOworRE8gJCQKK0JFR0lOCisgICAgRVhFQ1VURSAnRFJPUCBUQUJMRSAnIHx8IChT RUxFQ1QgJ3BnX2NvbmZsaWN0LnBnX2NvbmZsaWN0X2xvZ18nIHx8IG9pZCBGUk9NIHBnX3N1YnNj cmlwdGlvbiBXSEVSRSBzdWJuYW1lID0gJ3JlZ3Jlc3NfY29uZmxpY3RfdGVzdDEnKTsKK0VYQ0VQ VElPTiBXSEVOIGluc3VmZmljaWVudF9wcml2aWxlZ2UgVEhFTgorICAgIFJBSVNFIE5PVElDRSAn Y2FwdHVyZWQgZXhwZWN0ZWQgZXJyb3I6IGluc3VmZmljaWVudF9wcml2aWxlZ2UnOworRU5EICQk OworCistLSBDTEVBTlVQOiBEUk9QIFNVQlNDUklQVElPTiByZWFwcyB0aGUgdGFibGUKK0FMVEVS IFNVQlNDUklQVElPTiByZWdyZXNzX2NvbmZsaWN0X3Rlc3QxIERJU0FCTEU7CitBTFRFUiBTVUJT Q1JJUFRJT04gcmVncmVzc19jb25mbGljdF90ZXN0MSBTRVQgKHNsb3RfbmFtZSA9IE5PTkUpOwor CistLSBWZXJpZnkgdGhlIHRhYmxlIE9JRCBmb3IgcmVhcCBjaGVjaworU0VMRUNUICdwZ19jb25m bGljdC5wZ19jb25mbGljdF9sb2dfJyB8fCBvaWQgQVMgaW50ZXJuYWxfdGFibGVuYW1lIEZST00g cGdfc3Vic2NyaXB0aW9uIFdIRVJFIHN1Ym5hbWUgPSAncmVncmVzc19jb25mbGljdF90ZXN0MScg XGdzZXQKKworU0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSBXQVJOSU5HOworRFJPUCBTVUJTQ1JJ UFRJT04gcmVncmVzc19jb25mbGljdF90ZXN0MTsKKworLS0gc2hvdWxkIHJldHVybiBOVUxMLCBt ZWFuaW5nIHRoZSBjb25mbGljdCBsb2cgdGFibGUgd2FzIHJlYXBlZCB2aWEgZGVwZW5kZW5jeQor U0VMRUNUIHRvX3JlZ2NsYXNzKDonaW50ZXJuYWxfdGFibGVuYW1lJyk7CisKKy0tCistLSBBZGRp dGlvbmFsIE5hbWVzcGFjZSBhbmQgVGFibGUgUHJvdGVjdGlvbiBUZXN0cworLS0KKworLS0gU2V0 dXA6IEVuc3VyZSB3ZSBoYXZlIGEgc3Vic2NyaXB0aW9uIHdpdGggYSBjb25mbGljdCBsb2cgdGFi bGUKK0NSRUFURSBTVUJTQ1JJUFRJT04gcmVncmVzc19jb25mbGljdF9wcm90ZWN0aW9uX3Rlc3Qg Q09OTkVDVElPTiAnZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0JworICAgIFBVQkxJQ0FUSU9O IHRlc3RwdWIgV0lUSCAoY29ubmVjdCA9IGZhbHNlLCBjb25mbGljdF9sb2dfZGVzdGluYXRpb24g PSAndGFibGUnKTsKKworLS0gVHJ5aW5nIHRvIEFMVEVSIHRoZSBjb25mbGljdCBsb2cgdGFibGUK Ky0tIFRoaXMgc2hvdWxkIGZhaWwgYmVjYXVzZSB0aGUgdGFibGUgaXMgc3lzdGVtLW1hbmFnZWQK Ky0tIEFzIG1lbnRpb25lZCBpbiBwcmV2aW91cyB0ZXN0IGNhc2VzLCB3ZSB1c2UgYSBETyBibG9j ayB0byBoaWRlIGR5bmFtaWMgT0lEcworCitTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9IE5PVElD RTsKK0RPICQkCitERUNMQVJFCisgICAgdGFiX25hbWUgdGV4dDsKK0JFR0lOCisgICAgU0VMRUNU ICdwZ19jb25mbGljdC4nIHx8IHJlbG5hbWUgSU5UTyB0YWJfbmFtZQorICAgIEZST00gcGdfY2xh c3MgYyBKT0lOIHBnX3N1YnNjcmlwdGlvbiBzIE9OIGMucmVsbmFtZSA9ICdwZ19jb25mbGljdF9s b2dfJyB8fCBzLm9pZAorICAgIFdIRVJFIHMuc3VibmFtZSA9ICdyZWdyZXNzX2NvbmZsaWN0X3By b3RlY3Rpb25fdGVzdCc7CisKKyAgICBSQUlTRSBOT1RJQ0UgJ0F0dGVtcHRpbmcgQUxURVIgVEFC TEUgb24gY29uZmxpY3QgbG9nIHRhYmxlJzsKKyAgICBFWEVDVVRFICdBTFRFUiBUQUJMRSAnIHx8 IHRhYl9uYW1lIHx8ICcgQUREIENPTFVNTiBleHRyYV9pbmZvIHRleHQnOworRVhDRVBUSU9OIFdI RU4gaW5zdWZmaWNpZW50X3ByaXZpbGVnZSBUSEVOCisgICAgUkFJU0UgTk9USUNFICdjYXB0dXJl ZCBleHBlY3RlZCBlcnJvcjogaW5zdWZmaWNpZW50X3ByaXZpbGVnZSBkdXJpbmcgQUxURVInOwor RU5EICQkOworCistLSBUZXN0IE1hbnVhbCBJTlNFUlQgb24gY29uZmxpY3QgbG9nIHRhYmxlCist LSBUaGlzIHNob3VsZCBmYWlsIGJlY2F1c2UgdGhlIHRhYmxlIGlzIHN5c3RlbS1tYW5hZ2VkCist LSBIaWRpbmcgdGhlIE9JRCBpbiB0aGUgZXJyb3IgbWVzc2FnZSBieSBjYXRjaGluZyB0aGUgZXhj ZXB0aW9uCitETyAkJAorREVDTEFSRQorICAgIHRhYl9uYW1lIHRleHQ7CitCRUdJTgorICAgIFNF TEVDVCAncGdfY29uZmxpY3QuJyB8fCByZWxuYW1lIElOVE8gdGFiX25hbWUKKyAgICBGUk9NIHBn X2NsYXNzIGMgSk9JTiBwZ19zdWJzY3JpcHRpb24gcyBPTiBjLnJlbG5hbWUgPSAncGdfY29uZmxp Y3RfbG9nXycgfHwgcy5vaWQKKyAgICBXSEVSRSBzLnN1Ym5hbWUgPSAncmVncmVzc19jb25mbGlj dF9wcm90ZWN0aW9uX3Rlc3QnOworCisgICAgRVhFQ1VURSAnSU5TRVJUIElOVE8gJyB8fCB0YWJf bmFtZSB8fCAnIChyZWxuYW1lKSBWQUxVRVMgKCcnbXl0ZXN0JycpJzsKK0VYQ0VQVElPTiBXSEVO IHdyb25nX29iamVjdF90eXBlIFRIRU4KKyAgICBSQUlTRSBOT1RJQ0UgJ2NhcHR1cmVkIGV4cGVj dGVkIGVycm9yOiB3cm9uZ19vYmplY3RfdHlwZSBkdXJpbmcgSU5TRVJUJzsKK0VORCAkJDsKKwor LS0gVGVzdCBNYW51YWwgVVBEQVRFIG9uIGNvbmZsaWN0IGxvZyB0YWJsZQorLS0gVGhpcyBzaG91 bGQgZmFpbCBiZWNhdXNlIHRoZSB0YWJsZSBpcyBzeXN0ZW0tbWFuYWdlZAorLS0gSGlkaW5nIHRo ZSBPSUQgaW4gdGhlIGVycm9yIG1lc3NhZ2UgYnkgY2F0Y2hpbmcgdGhlIGV4Y2VwdGlvbgorRE8g JCQKK0RFQ0xBUkUKKyAgICB0YWJfbmFtZSB0ZXh0OworQkVHSU4KKyAgICBTRUxFQ1QgJ3BnX2Nv bmZsaWN0LicgfHwgcmVsbmFtZSBJTlRPIHRhYl9uYW1lCisgICAgRlJPTSBwZ19jbGFzcyBjIEpP SU4gcGdfc3Vic2NyaXB0aW9uIHMgT04gYy5yZWxuYW1lID0gJ3BnX2NvbmZsaWN0X2xvZ18nIHx8 IHMub2lkCisgICAgV0hFUkUgcy5zdWJuYW1lID0gJ3JlZ3Jlc3NfY29uZmxpY3RfcHJvdGVjdGlv bl90ZXN0JzsKKworICAgIEVYRUNVVEUgJ1VQREFURSAnIHx8IHRhYl9uYW1lIHx8ICcgU0VUIHJl bG5hbWUgPSAnJ215dGVzdCcnICc7CitFWENFUFRJT04gV0hFTiB3cm9uZ19vYmplY3RfdHlwZSBU SEVOCisgICAgUkFJU0UgTk9USUNFICdjYXB0dXJlZCBleHBlY3RlZCBlcnJvcjogd3Jvbmdfb2Jq ZWN0X3R5cGUgZHVyaW5nIFVQREFURSc7CitFTkQgJCQ7CisKKy0tIFRyeWluZyB0byBwZXJmb3Jt IFRSVU5DQVRFL0RFTEVURSBvbiB0aGUgY29uZmxpY3QgbG9nIHRhYmxlCistLSBUaGlzIHNob3Vs ZCBiZSBhbGxvd2VkIHNvIHRoYXQgdXNlciBjYW4gcGVyZm9ybSBjbGVhbnVwCitTRUxFQ1QgJ3Bn X2NvbmZsaWN0LicgfHwgcmVsbmFtZSBBUyBjb25mbGljdF90YWIKK0ZST00gcGdfY2xhc3MgYwor Sk9JTiBwZ19zdWJzY3JpcHRpb24gcyBPTiBjLnJlbG5hbWUgPSAncGdfY29uZmxpY3RfbG9nXycg fHwgcy5vaWQKK1dIRVJFIHMuc3VibmFtZSA9ICdyZWdyZXNzX2NvbmZsaWN0X3Byb3RlY3Rpb25f dGVzdCcgXGdzZXQKK1RSVU5DQVRFIDpjb25mbGljdF90YWI7CitERUxFVEUgRlJPTSA6Y29uZmxp Y3RfdGFiOworCistLSBUcnlpbmcgdG8gY3JlYXRlIGEgbmV3IHRhYmxlIG1hbnVhbGx5IGluIHRo ZSBwZ19jb25mbGljdCBuYW1lc3BhY2UKKy0tIFRoaXMgc2hvdWxkIGZhaWwgYXMgdGhlIG5hbWVz cGFjZSBpcyByZXNlcnZlZCBmb3IgY29uZmxpY3QgbG9ncyB0YWJsZXMKK0NSRUFURSBUQUJMRSBw Z19jb25mbGljdC5tYW51YWxfdGFibGUgKGlkIGludCk7CisKKy0tIE1vdmluZyBhbiBleGlzdGlu ZyB0YWJsZSBpbnRvIHRoZSBwZ19jb25mbGljdCBuYW1lc3BhY2UKKy0tIFVzZXJzIHNob3VsZCBu b3QgYmUgYWJsZSB0byBtb3ZlIHRoZWlyIG93biB0YWJsZXMgd2l0aGluIHRoaXMgbmFtZXNwYWNl CitDUkVBVEUgVEFCTEUgcHVibGljLnRlc3RfbW92ZSAoaWQgaW50KTsKK0FMVEVSIFRBQkxFIHB1 YmxpYy50ZXN0X21vdmUgU0VUIFNDSEVNQSBwZ19jb25mbGljdDsKK0RST1AgVEFCTEUgcHVibGlj LnRlc3RfbW92ZTsKKworU0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSBXQVJOSU5HOworCistLSBD bGVhbiB1cCByZW1haW5pbmcgdGVzdCBzdWJzY3JpcHRpb24KK0FMVEVSIFNVQlNDUklQVElPTiBy ZWdyZXNzX2NvbmZsaWN0X2xvZ19kZWZhdWx0IERJU0FCTEU7CitBTFRFUiBTVUJTQ1JJUFRJT04g cmVncmVzc19jb25mbGljdF9sb2dfZGVmYXVsdCBTRVQgKHNsb3RfbmFtZSA9IE5PTkUpOworRFJP UCBTVUJTQ1JJUFRJT04gcmVncmVzc19jb25mbGljdF9sb2dfZGVmYXVsdDsKKworQUxURVIgU1VC U0NSSVBUSU9OIHJlZ3Jlc3NfY29uZmxpY3RfZW1wdHlfc3RyIERJU0FCTEU7CitBTFRFUiBTVUJT Q1JJUFRJT04gcmVncmVzc19jb25mbGljdF9lbXB0eV9zdHIgU0VUIChzbG90X25hbWUgPSBOT05F KTsKK0RST1AgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfY29uZmxpY3RfZW1wdHlfc3RyOworCitBTFRF UiBTVUJTQ1JJUFRJT04gcmVncmVzc19jb25mbGljdF90ZXN0MiBESVNBQkxFOworQUxURVIgU1VC U0NSSVBUSU9OIHJlZ3Jlc3NfY29uZmxpY3RfdGVzdDIgU0VUIChzbG90X25hbWUgPSBOT05FKTsK K0RST1AgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfY29uZmxpY3RfdGVzdDI7CisKK0FMVEVSIFNVQlND UklQVElPTiByZWdyZXNzX2NvbmZsaWN0X3Byb3RlY3Rpb25fdGVzdCBESVNBQkxFOworQUxURVIg U1VCU0NSSVBUSU9OIHJlZ3Jlc3NfY29uZmxpY3RfcHJvdGVjdGlvbl90ZXN0IFNFVCAoc2xvdF9u YW1lID0gTk9ORSk7CitEUk9QIFNVQlNDUklQVElPTiByZWdyZXNzX2NvbmZsaWN0X3Byb3RlY3Rp b25fdGVzdDsKKwogUkVTRVQgU0VTU0lPTiBBVVRIT1JJWkFUSU9OOwogRFJPUCBST0xFIHJlZ3Jl c3Nfc3Vic2NyaXB0aW9uX3VzZXI7CiBEUk9QIFJPTEUgcmVncmVzc19zdWJzY3JpcHRpb25fdXNl cjI7CmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDhjZjQwYzg3MDQzLi4yMDM5NTllNTAx OCAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3Jj L3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTUxNSw2ICs1MTUsOCBAQCBDb25kaXRp b25hbFN0YWNrCiBDb25kaXRpb25hbFN0YWNrRGF0YQogQ29uZmlnRGF0YQogQ29uZmlnVmFyaWFi bGUKK0NvbmZsaWN0TG9nQ29sdW1uRGVmCitDb25mbGljdExvZ0Rlc3QKIENvbmZsaWN0VHVwbGVJ bmZvCiBDb25mbGljdFR5cGUKIENvbm5DYWNoZUVudHJ5Ci0tIAoyLjQ5LjAKCg== --00000000000081af3806533e7b2b--