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 1vL2qO-001k1z-2N for pgsql-hackers@arkaria.postgresql.org; Mon, 17 Nov 2025 17:16:49 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vL2pO-0017EE-0Z for pgsql-hackers@arkaria.postgresql.org; Mon, 17 Nov 2025 17:15:46 +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 1vL2pN-0017E6-19 for pgsql-hackers@lists.postgresql.org; Mon, 17 Nov 2025 17:15:46 +0000 Received: from mail-qt1-x831.google.com ([2607:f8b0:4864:20::831]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vL2pK-0001Ud-0j for pgsql-hackers@lists.postgresql.org; Mon, 17 Nov 2025 17:15:44 +0000 Received: by mail-qt1-x831.google.com with SMTP id d75a77b69052e-4edb7c8232aso66632771cf.3 for ; Mon, 17 Nov 2025 09:15:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1763399742; x=1764004542; 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=1PMkw/7n0Rz4+LmeKNXxQiC64fLRE67N7whAzoh41+U=; b=Cw4nGyf0oeMGdLWuYIIYL3fSj1VPa1laZKdEw8DWnaZK9bV3djTnqpPTAcFxRjQgYy bskA0dj68dhj/+S80owJjEvRk57uSR7yeut1GnuwzHz/sMMm4aR9HeWVBVRdfwWAABS/ l14VbPg9Z7uo63qz3SlxN2v+7120sQDaQQZHlJAETVXtOH5uHSfnzKrv+bik0JZ1rJAz 1Y/ktAcYcmF+I5PpWRO69q3fbXZX6hXY5cnL8vYUGU7mWQOA6e3hoyR8HX+/gtOgRREM KDQmCDYEI+DXaP57kffSjknYpY88FazcpuiUh2YYv/Qn193DGLTxR791FnwCeBpVxVZT Tq1Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763399742; x=1764004542; 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=1PMkw/7n0Rz4+LmeKNXxQiC64fLRE67N7whAzoh41+U=; b=gjsThTWDYS4E6e9FopZERUOarEDxMQUFGxdYZmaozBSXr+GqAiCEuE4coxE2YFEhSG T90qzhZt+1NMDU1g+htlMFM6eibigw8cNzFcMfvtRu3+i9JJODxb+901tyjlMJCQNiEn xeRcBrXfHNPKCrfQQsJr/fh/WdoqCKsrYBcBOJyd0FP2hPaLtiJXyat6cnk9tGYw0mer o6IZjAexEAfzvlKJwGeh1T9389h56k+lPVIodBfspBpD8pIrr1QCb5BlcXmw3yrBrpXf eRzaRSb/878rlJfqL6oaTX3TBHbmhKZwRaFcULRqVQGNiUQmxAJqxZbKn+5XO6Scn+L1 VdaQ== X-Forwarded-Encrypted: i=1; AJvYcCUvDJi/Ja8DDhouYMC3DBYzOFLYsMplY6S3LuRduKbVDDi5q5HiCUM6mMvqctUjGCn23qVt/eZQsykX+g0v@lists.postgresql.org X-Gm-Message-State: AOJu0YyISUio8GZWUYFkkpKTmSilg1lwjtCB4l6LDlV1A1vsKyHdQnDN /Rj12a3I5K39xqOKgB3w5tZIMz2UhXiu5lXaRTOETWXIyX/QZsmEj5deNi3Ed0sUitXAYT7PkPC NF4Y1Zb85tbjY9N0LYomUMMyrJ3FZvaQ= X-Gm-Gg: ASbGncuIRcViZOkBcPTD+w4ZE2z+99bXI9kLtIIcdiShYQVHG0fvpuwvpiCBuB8Mlr+ nKB09LGlgRJl0Gjdaqm8S6B0KQixb3paoExkbQTDwBy5w9MHQYEM1KxFZ0ZPCzBKZ5H8S7/zYac jVDMTzQj+k9vxBIdZOcLvFl48aWGzzuRegYwR+G56iJD0qvACGEaOD2z48agHZEz8AcFlZGuHZs dyWem/kvnonOSgPtEQrVuWQvahTAIaHq+KEiyfE9OUHGmh6VuZA8a0LAvhFvUUEmo6pUQUYHvT0 ALcG/88= X-Google-Smtp-Source: AGHT+IGSrlMkcL5vjeflTd9WR2l9xX9DLhLCYoHvTFLY76msOuG2aORtQmx6QuWuq4hG3PNkc8vyawK/ctF0NVMIOYk= X-Received: by 2002:a05:622a:1311:b0:4ee:2312:6059 with SMTP id d75a77b69052e-4ee2312690cmr55602141cf.19.1763399741741; Mon, 17 Nov 2025 09:15:41 -0800 (PST) MIME-Version: 1.0 References: <3f22a8bb-29e8-40cc-97a1-309181da2c13@dunslane.net> <2bed001a-462c-42da-9a6b-3c7884502932@dunslane.net> <20250824010811.4d.nmisch@google.com> <82eb35b8-7f07-493b-b689-0934919e1dc3@dunslane.net> <17555e46-4fb2-4265-90e0-95cb8ed584a6@dunslane.net> In-Reply-To: <17555e46-4fb2-4265-90e0-95cb8ed584a6@dunslane.net> From: Mahendra Singh Thalor Date: Mon, 17 Nov 2025 22:45:28 +0530 X-Gm-Features: AWmQ_bnNPgSAETRQB6mPcb1fV3ix4dSnlwL9YNrIuLUYUsZf3IodAXojLVVOIho Message-ID: Subject: Re: Non-text mode for pg_dumpall To: Andrew Dunstan Cc: Vaibhav Dalvi , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="00000000000034bfc60643cd7ffd" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000034bfc60643cd7ffd Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Thanks Andrew for the review. On Tue, 11 Nov 2025 at 20:41, Andrew Dunstan wrote: > > > On 2025-11-11 Tu 12:59 AM, Mahendra Singh Thalor wrote: > > > > Hi, > > Here, I am attaching an updated patch for the review and testing. > > > > FIX: as suggested by Vaibhav, added error for --restrict-key option > > with non-text format. > > > > > Regarding the name and format of the globals toc file, I'm inclined to > think we should always use custom format, regardless of whether the > individual databases will be in custom, tar or directory formats, and > that it should be called something distinguishable, e.g. toc.glo. > I also agree with your point. Fixed. On Mon, 17 Nov 2025 at 19:38, tushar wrote: > > > > On Tue, Nov 11, 2025 at 11:29=E2=80=AFAM Mahendra Singh Thalor wrote: >> >> On Thu, 6 Nov 2025 at 11:03, Mahendra Singh Thalor = wrote: >> > >> > Thanks Vaibhav, Tushar and Andrew for the review and testing. >> > > Thanks Mahendra, getting this error against v07 series patch > > [edb@1a1c15437e7c bin]$ ./pg_dumpall -Ft -f tar.dumpc -v > pg_dumpall: executing SELECT pg_catalog.set_config('search_path', '', fal= se); > pg_dumpall: pg_dumpall.c:2256: createOneArchiveEntry: Assertion `fout != =3D ((void *)0)' failed. > Aborted > > regards, Thanks Tushar for the report. Fixed. Here, I am attaching an updated patch for the review and testing. --=20 Thanks and Regards Mahendra Singh Thalor EnterpriseDB: http://www.enterprisedb.com --00000000000034bfc60643cd7ffd Content-Type: application/octet-stream; name="v08_17112025-Non-text-modes-for-pg_dumpall-correspondingly-change.patch" Content-Disposition: attachment; filename="v08_17112025-Non-text-modes-for-pg_dumpall-correspondingly-change.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mi3enxas0 RnJvbSBkNzAxNjc0NDMzNzBmMTM5NmYwZjc4NDg1Zjc0Njc0MmZiOTJhODIxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUaGFsb3JNYWhlbmRyYSA8bWFoaTZydW5AZ21haWwuY29tPgpE YXRlOiBNb24sIDE3IE5vdiAyMDI1IDIyOjM1OjM1ICswNTMwClN1YmplY3Q6IFtQQVRDSF0gTm9u IHRleHQgbW9kZXMgZm9yIHBnX2R1bXBhbGwsIGNvcnJlc3BvbmRpbmdseSBjaGFuZ2UgCiBwZ19y ZXN0b3JlCgogICAgcGdfZHVtcGFsbCBhY3F1aXJlcyBhIG5ldyAtRi8tLWZvcm1hdCBvcHRpb24s IHdpdGggdGhlIHNhbWUgbWVhbmluZ3MgYXMKICAgIHBnX2R1bXAuIFRoZSBkZWZhdWx0IGlzIHAs IG1lYW5pbmcgcGxhaW4gdGV4dC4gRm9yIGFueSBvdGhlciB2YWx1ZSwgYQogICAgZGlyZWN0b3J5 IGlzIGNyZWF0ZWQgY29udGFpbmluZyB0d28gZmlsZXMsIHRvYy5nbG8gYW5kIG1hcC5kYXQuIFRo ZQogICAgZmlyc3QgY29udGFpbnMgY29tbWFuZHMgcmVzdG9yaW5nIHRoZSBnbG9iYWwgZGF0YSBp biBjdXN0b20gZm9ybWF0LCBhbmQgdGhlIHNlY29uZAogICAgY29udGFpbnMgYSBtYXAgZnJvbSBv aWRzIHRvIGRhdGFiYXNlIG5hbWVzIGluIHRleHQgZm9ybWF0LiBJdCB3aWxsIGFsc28gY29udGFp biBhCiAgICBzdWJkaXJlY3RvcnkgY2FsbGVkIGRhdGFiYXNlcywgaW5zaWRlIHdoaWNoIGl0IHdp bGwgY3JlYXRlIGFyY2hpdmVzIGluCiAgICB0aGUgc3BlY2lmaWVkIGZvcm1hdCwgbmFtZWQgdXNp bmcgdGhlIGRhdGFiYXNlIG9pZHMuCgogICAgSW4gdGhlc2UgY2FzZXNzIHRoZSAtZiBhcmd1bWVu dCBpcyByZXF1aXJlZC4KCiAgICBJZiBwZ19yZXN0b3JlIGVuY291bnRlcnMgYSBkaXJlY3Rvcnkg Y29udGFpbmluZyBtYXAuZGF0IGFuZCB0b2MuZ2xvLAogICAgaXQgcmVzdG9yZXMgdGhlIGdsb2Jh bCBzZXR0aW5ncyBmcm9tIHRvYy5nbG8gaWYgZXhpc3QsIGFuZCB0aGVuCiAgICByZXN0b3JlcyBl YWNoIGRhdGFiYXNlLgoKICAgIHBnX3Jlc3RvcmUgYWNxdWlyZXMgdHdvIG5ldyBvcHRpb25zOiAt Zy8tLWdsb2JhbHMtb25seSB3aGljaCBzdXBwcmVzc2VzCiAgICByZXN0b3JhdGlvbiBvZiBhbnkg ZGF0YWJhc2VzLCBhbmQgLS1leGNsdWRlLWRhdGFiYXNlIHdoaWNoIGluaGliaXRzCiAgICByZXN0 b3JhdGlvbiBvZiBwYXJ0aWN1YWxyIGRhdGFiYXNlKHMpIGluIHRoZSBzYW1lIHdheSB0aGUgc2Ft ZSBvcHRpb24KICAgIHdvcmtzIGluIHBnX2R1bXBhbGwuCgp2MDgKLS0tCiBkb2Mvc3JjL3NnbWwv cmVmL3BnX2R1bXBhbGwuc2dtbCAgICAgfCAgODkgKysrLQogZG9jL3NyYy9zZ21sL3JlZi9wZ19y ZXN0b3JlLnNnbWwgICAgIHwgIDY2ICsrLQogc3JjL2Jpbi9wZ19kdW1wL2Nvbm5lY3RkYi5jICAg ICAgICAgIHwgICAxIC0KIHNyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZCAgICAgICAgICB8ICAg MSArCiBzcmMvYmluL3BnX2R1bXAvcGFyYWxsZWwuYyAgICAgICAgICAgfCAgMTAgKwogc3JjL2Jp bi9wZ19kdW1wL3BnX2JhY2t1cC5oICAgICAgICAgIHwgICAyICstCiBzcmMvYmluL3BnX2R1bXAv cGdfYmFja3VwX2FyY2hpdmVyLmMgfCAgMjkgKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBf YXJjaGl2ZXIuaCB8ICAgMSArCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3Rhci5jICAgICAg fCAgIDIgKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMgICAgICAgICAgICB8ICAgMiArLQog c3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwuYyAgICAgICAgIHwgNTkyICsrKysrKysrKysrKysr KysrKysrKy0tLS0tCiBzcmMvYmluL3BnX2R1bXAvcGdfcmVzdG9yZS5jICAgICAgICAgfCA2MDYg KysrKysrKysrKysrKysrKysrKysrKysrKystCiBzcmMvYmluL3BnX2R1bXAvdC8wMDFfYmFzaWMu cGwgICAgICAgfCAgMjcgKysKIHNyYy9iaW4vcGdfZHVtcC90LzAwN19wZ19kdW1wYWxsLnBsICB8 IDM5NiArKysrKysrKysrKysrKysrKwogMTQgZmlsZXMgY2hhbmdlZCwgMTY3NyBpbnNlcnRpb25z KCspLCAxNDcgZGVsZXRpb25zKC0pCiBtb2RlIGNoYW5nZSAxMDA2NDQgPT4gMTAwNzU1IHNyYy9i aW4vcGdfZHVtcC90LzAwMV9iYXNpYy5wbAogY3JlYXRlIG1vZGUgMTAwNzU1IHNyYy9iaW4vcGdf ZHVtcC90LzAwN19wZ19kdW1wYWxsLnBsCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9w Z19kdW1wYWxsLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXBhbGwuc2dtbAppbmRleCA5 ZjYzOWY2MWRiMC4uNDA2M2U4OGQzODggMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvcGdf ZHVtcGFsbC5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcGFsbC5zZ21sCkBAIC0x Niw3ICsxNiwxMCBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KIAogIDxyZWZuYW1lZGl2Pgog ICA8cmVmbmFtZT5wZ19kdW1wYWxsPC9yZWZuYW1lPgotICA8cmVmcHVycG9zZT5leHRyYWN0IGEg PHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZSBjbHVzdGVyIGlu dG8gYSBzY3JpcHQgZmlsZTwvcmVmcHVycG9zZT4KKworICA8cmVmcHVycG9zZT4KKyAgIGV4cG9y dCBhIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gZGF0YWJhc2UgY2x1c3Rl ciBhcyBhbiBTUUwgc2NyaXB0IG9yIHRvIG90aGVyIGZvcm1hdHMKKyAgPC9yZWZwdXJwb3NlPgog IDwvcmVmbmFtZWRpdj4KIAogIDxyZWZzeW5vcHNpc2Rpdj4KQEAgLTMzLDcgKzM2LDcgQEAgUG9z dGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgIDxwYXJhPgogICAgPGFwcGxpY2F0aW9uPnBnX2R1bXBh bGw8L2FwcGxpY2F0aW9uPiBpcyBhIHV0aWxpdHkgZm9yIHdyaXRpbmcgb3V0CiAgICAoPHF1b3Rl PmR1bXBpbmc8L3F1b3RlPikgYWxsIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFt ZT4gZGF0YWJhc2VzCi0gICBvZiBhIGNsdXN0ZXIgaW50byBvbmUgc2NyaXB0IGZpbGUuICBUaGUg c2NyaXB0IGZpbGUgY29udGFpbnMKKyAgIG9mIGEgY2x1c3RlciBpbnRvIGFuIFNRTCBzY3JpcHQg ZmlsZSBvciBhbiBhcmNoaXZlLiAgVGhlIG91dHB1dCBjb250YWlucwogICAgPGFjcm9ueW0+U1FM PC9hY3JvbnltPiBjb21tYW5kcyB0aGF0IGNhbiBiZSB1c2VkIGFzIGlucHV0IHRvIDx4cmVmCiAg ICBsaW5rZW5kPSJhcHAtcHNxbCIvPiB0byByZXN0b3JlIHRoZSBkYXRhYmFzZXMuICBJdCBkb2Vz IHRoaXMgYnkKICAgIGNhbGxpbmcgPHhyZWYgbGlua2VuZD0iYXBwLXBnZHVtcCIvPiBmb3IgZWFj aCBkYXRhYmFzZSBpbiB0aGUgY2x1c3Rlci4KQEAgLTUyLDExICs1NSwxNiBAQCBQb3N0Z3JlU1FM IGRvY3VtZW50YXRpb24KICAgPC9wYXJhPgogCiAgIDxwYXJhPgotICAgVGhlIFNRTCBzY3JpcHQg d2lsbCBiZSB3cml0dGVuIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuICBVc2UgdGhlCisgICBQbGFp biB0ZXh0IFNRTCBzY3JpcHRzIHdpbGwgYmUgd3JpdHRlbiB0byB0aGUgc3RhbmRhcmQgb3V0cHV0 LiAgVXNlIHRoZQogICAgPG9wdGlvbj4tZjwvb3B0aW9uPi88b3B0aW9uPi0tZmlsZTwvb3B0aW9u PiBvcHRpb24gb3Igc2hlbGwgb3BlcmF0b3JzIHRvCiAgICByZWRpcmVjdCBpdCBpbnRvIGEgZmls ZS4KICAgPC9wYXJhPgogCisgIDxwYXJhPgorICAgQXJjaGl2ZXMgaW4gb3RoZXIgZm9ybWF0cyB3 aWxsIGJlIHBsYWNlZCBpbiBhIGRpcmVjdG9yeSBuYW1lZCB1c2luZyB0aGUKKyAgIDxvcHRpb24+ LWY8L29wdGlvbj4vPG9wdGlvbj4tLWZpbGU8L29wdGlvbj4sIHdoaWNoIGlzIHJlcXVpcmVkIGlu IHRoaXMgY2FzZS4KKyAgPC9wYXJhPgorCiAgIDxwYXJhPgogICA8YXBwbGljYXRpb24+cGdfZHVt cGFsbDwvYXBwbGljYXRpb24+IG5lZWRzIHRvIGNvbm5lY3Qgc2V2ZXJhbAogICB0aW1lcyB0byB0 aGUgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBzZXJ2ZXIgKG9uY2UgcGVy CkBAIC0xMzEsMTAgKzEzOSw4NSBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgICAgICA8 cGFyYT4KICAgICAgICAgU2VuZCBvdXRwdXQgdG8gdGhlIHNwZWNpZmllZCBmaWxlLiAgSWYgdGhp cyBpcyBvbWl0dGVkLCB0aGUKICAgICAgICAgc3RhbmRhcmQgb3V0cHV0IGlzIHVzZWQuCisgICAg ICAgIE5vdGU6IFRoaXMgb3B0aW9uIGNhbiBvbmx5IGJlIG9taXR0ZWQgd2hlbiA8b3B0aW9uPi0t Zm9ybWF0PC9vcHRpb24+IGlzIHBsYWluCiAgICAgICAgPC9wYXJhPgogICAgICAgPC9saXN0aXRl bT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgIDx0 ZXJtPjxvcHRpb24+LUYgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmZvcm1hdDwvcmVw bGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgorICAgICAgPHRlcm0+PG9wdGlvbj4tLWZvcm1hdD08 cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+Zm9ybWF0PC9yZXBsYWNlYWJsZT48L29wdGlv bj48L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgIFNwZWNp ZnkgdGhlIGZvcm1hdCBvZiBkdW1wIGZpbGVzLiAgSW4gcGxhaW4gZm9ybWF0LCBhbGwgdGhlIGR1 bXAgZGF0YSBpcworICAgICAgICBzZW50IGluIGEgc2luZ2xlIHRleHQgc3RyZWFtLiBUaGlzIGlz IHRoZSBkZWZhdWx0LgorCisgICAgICAgIEluIGFsbCBvdGhlciBtb2RlcywgPGFwcGxpY2F0aW9u PnBnX2R1bXBhbGw8L2FwcGxpY2F0aW9uPiBmaXJzdCBjcmVhdGVzIHR3byBmaWxlczoKKyAgICAg ICAgPGZpbGVuYW1lPnRvYy5kYXQvdG9jLmRtcC90b2MudGFyPC9maWxlbmFtZT4gYW5kIDxmaWxl bmFtZT5tYXAuZGF0PC9maWxlbmFtZT4sIGluIHRoZSBkaXJlY3RvcnkKKyAgICAgICAgc3BlY2lm aWVkIGJ5IDxvcHRpb24+LS1maWxlPC9vcHRpb24+LgorICAgICAgICBUaGUgZmlyc3QgZmlsZSBj b250YWlucyBnbG9iYWwgZGF0YSwgc3VjaCBhcyByb2xlcyBhbmQgdGFibGVzcGFjZXMuIFRoZSBz ZWNvbmQKKyAgICAgICAgY29udGFpbnMgYSBtYXBwaW5nIGJldHdlZW4gZGF0YWJhc2Ugb2lkcyBh bmQgbmFtZXMuIFRoZXNlIGZpbGVzIGFyZSB1c2VkIGJ5CisgICAgICAgIDxhcHBsaWNhdGlvbj5w Z19yZXN0b3JlPC9hcHBsaWNhdGlvbj4uIERhdGEgZm9yIGluZGl2aWR1YWwgZGF0YWJhc2VzIGlz IHBsYWNlZCBpbgorICAgICAgICA8ZmlsZW5hbWU+ZGF0YWJhc2VzPC9maWxlbmFtZT4gc3ViZGly ZWN0b3J5LCBuYW1lZCB1c2luZyB0aGUgZGF0YWJhc2UncyA8dHlwZT5vaWQ8L3R5cGU+LgorCisg ICAgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgIDx0 ZXJtPjxsaXRlcmFsPmQ8L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+ ZGlyZWN0b3J5PC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAg ICA8cGFyYT4KKyAgICAgICAgICAgT3V0cHV0IGRpcmVjdG9yeS1mb3JtYXQgYXJjaGl2ZXMgZm9y IGVhY2ggZGF0YWJhc2UsCisgICAgICAgICAgIHN1aXRhYmxlIGZvciBpbnB1dCBpbnRvIHBnX3Jl c3RvcmUuIFRoZSBkaXJlY3RvcnkKKyAgICAgICAgICAgd2lsbCBoYXZlIGRhdGFiYXNlIDx0eXBl Pm9pZDwvdHlwZT4gYXMgaXRzIG5hbWUuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgPC9s aXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgICAgPHZhcmxpc3RlbnRy eT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPnA8L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAg PHRlcm0+PGxpdGVyYWw+cGxhaW48L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAgPGxpc3RpdGVt PgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICBPdXRwdXQgYSBwbGFpbi10ZXh0IFNRTCBz Y3JpcHQgZmlsZSAodGhlIGRlZmF1bHQpLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgIDwv bGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICAgIDx2YXJsaXN0ZW50 cnk+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD5jPC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAg IDx0ZXJtPjxsaXRlcmFsPmN1c3RvbTwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8bGlzdGl0 ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgIE91dHB1dCBhIGN1c3RvbS1mb3JtYXQg YXJjaGl2ZSBmb3IgZWFjaCBkYXRhYmFzZSwKKyAgICAgICAgICAgc3VpdGFibGUgZm9yIGlucHV0 IGludG8gcGdfcmVzdG9yZS4gVGhlIGFyY2hpdmUKKyAgICAgICAgICAgd2lsbCBiZSBuYW1lZCA8 ZmlsZW5hbWU+ZGJvaWQuZG1wPC9maWxlbmFtZT4gd2hlcmUgPHR5cGU+ZGJvaWQ8L3R5cGU+IGlz IHRoZQorICAgICAgICAgICA8dHlwZT5vaWQ8L3R5cGU+IG9mIHRoZSBkYXRhYmFzZS4KKyAgICAg ICAgICA8L3BhcmE+CisgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRy eT4KKworICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPnQ8 L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+dGFyPC9saXRlcmFsPjwv dGVybT4KKyAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAg T3V0cHV0IGEgdGFyLWZvcm1hdCBhcmNoaXZlIGZvciBlYWNoIGRhdGFiYXNlLAorICAgICAgICAg ICBzdWl0YWJsZSBmb3IgaW5wdXQgaW50byBwZ19yZXN0b3JlLiBUaGUgYXJjaGl2ZQorICAgICAg ICAgICB3aWxsIGJlIG5hbWVkIDxmaWxlbmFtZT5kYm9pZC50YXI8L2ZpbGVuYW1lPiB3aGVyZSA8 dHlwZT5kYm9pZDwvdHlwZT4gaXMgdGhlCisgICAgICAgICAgIDx0eXBlPm9pZDwvdHlwZT4gb2Yg dGhlIGRhdGFiYXNlLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgIDwvbGlzdGl0ZW0+Cisg ICAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICAgIDwvdmFyaWFibGVsaXN0PgorCisgICAg ICAgTm90ZTogc2VlIDx4cmVmIGxpbmtlbmQ9ImFwcC1wZ2R1bXAiLz4gZm9yIGRldGFpbHMKKyAg ICAgICBvZiBob3cgdGhlIHZhcmlvdXMgbm9uIHBsYWluIHRleHQgYXJjaGl2ZXMgd29yay4KKwor ICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4K KwogICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgPHRlcm0+PG9wdGlvbj4tZzwvb3B0aW9uPjwv dGVybT4KICAgICAgIDx0ZXJtPjxvcHRpb24+LS1nbG9iYWxzLW9ubHk8L29wdGlvbj48L3Rlcm0+ CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX3Jlc3RvcmUuc2dtbCBiL2RvYy9zcmMv c2dtbC9yZWYvcGdfcmVzdG9yZS5zZ21sCmluZGV4IGE0NjhhMzgzNjFhLi43NDk3YjUyN2FlNiAx MDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9wZ19yZXN0b3JlLnNnbWwKKysrIGIvZG9jL3Ny Yy9zZ21sL3JlZi9wZ19yZXN0b3JlLnNnbWwKQEAgLTE4LDggKzE4LDkgQEAgUG9zdGdyZVNRTCBk b2N1bWVudGF0aW9uCiAgIDxyZWZuYW1lPnBnX3Jlc3RvcmU8L3JlZm5hbWU+CiAKICAgPHJlZnB1 cnBvc2U+Ci0gICByZXN0b3JlIGEgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1l PiBkYXRhYmFzZSBmcm9tIGFuCi0gICBhcmNoaXZlIGZpbGUgY3JlYXRlZCBieSA8YXBwbGljYXRp b24+cGdfZHVtcDwvYXBwbGljYXRpb24+CisgICByZXN0b3JlIDxwcm9kdWN0bmFtZT5Qb3N0Z3Jl U1FMPC9wcm9kdWN0bmFtZT4gZGF0YWJhc2VzIGZyb20gYXJjaGl2ZXMKKyAgIGNyZWF0ZWQgYnkg PGFwcGxpY2F0aW9uPnBnX2R1bXA8L2FwcGxpY2F0aW9uPiBvcgorICAgPGFwcGxpY2F0aW9uPnBn X2R1bXBhbGw8L2FwcGxpY2F0aW9uPgogICA8L3JlZnB1cnBvc2U+CiAgPC9yZWZuYW1lZGl2Pgog CkBAIC0zOCwxMyArMzksMTQgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAKICAgPHBhcmE+ CiAgICA8YXBwbGljYXRpb24+cGdfcmVzdG9yZTwvYXBwbGljYXRpb24+IGlzIGEgdXRpbGl0eSBm b3IgcmVzdG9yaW5nIGEKLSAgIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4g ZGF0YWJhc2UgZnJvbSBhbiBhcmNoaXZlCi0gICBjcmVhdGVkIGJ5IDx4cmVmIGxpbmtlbmQ9ImFw cC1wZ2R1bXAiLz4gaW4gb25lIG9mIHRoZSBub24tcGxhaW4tdGV4dAorICAgPHByb2R1Y3RuYW1l PlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZSBvciBjbHVzdGVyIGZyb20gYW4gYXJj aGl2ZQorICAgY3JlYXRlZCBieSA8eHJlZiBsaW5rZW5kPSJhcHAtcGdkdW1wIi8+IG9yCisgICA8 eHJlZiBsaW5rZW5kPSJhcHAtcGctZHVtcGFsbCIvPiBpbiBvbmUgb2YgdGhlIG5vbi1wbGFpbi10 ZXh0CiAgICBmb3JtYXRzLiAgSXQgd2lsbCBpc3N1ZSB0aGUgY29tbWFuZHMgbmVjZXNzYXJ5IHRv IHJlY29uc3RydWN0IHRoZQotICAgZGF0YWJhc2UgdG8gdGhlIHN0YXRlIGl0IHdhcyBpbiBhdCB0 aGUgdGltZSBpdCB3YXMgc2F2ZWQuICBUaGUKLSAgIGFyY2hpdmUgZmlsZXMgYWxzbyBhbGxvdyA8 YXBwbGljYXRpb24+cGdfcmVzdG9yZTwvYXBwbGljYXRpb24+IHRvCisgICBkYXRhYmFzZSBvciBj bHVzdGVyIHRvIHRoZSBzdGF0ZSBpdCB3YXMgaW4gYXQgdGhlIHRpbWUgaXQgd2FzIHNhdmVkLiBU aGUKKyAgIGFyY2hpdmVzIGFsc28gYWxsb3cgPGFwcGxpY2F0aW9uPnBnX3Jlc3RvcmU8L2FwcGxp Y2F0aW9uPiB0bwogICAgYmUgc2VsZWN0aXZlIGFib3V0IHdoYXQgaXMgcmVzdG9yZWQsIG9yIGV2 ZW4gdG8gcmVvcmRlciB0aGUgaXRlbXMKLSAgIHByaW9yIHRvIGJlaW5nIHJlc3RvcmVkLiBUaGUg YXJjaGl2ZSBmaWxlcyBhcmUgZGVzaWduZWQgdG8gYmUKKyAgIHByaW9yIHRvIGJlaW5nIHJlc3Rv cmVkLiBUaGUgYXJjaGl2ZSBmb3JtYXRzIGFyZSBkZXNpZ25lZCB0byBiZQogICAgcG9ydGFibGUg YWNyb3NzIGFyY2hpdGVjdHVyZXMuCiAgIDwvcGFyYT4KIApAQCAtNTIsMTAgKzU0LDE3IEBAIFBv c3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICAgPGFwcGxpY2F0aW9uPnBnX3Jlc3RvcmU8L2FwcGxp Y2F0aW9uPiBjYW4gb3BlcmF0ZSBpbiB0d28gbW9kZXMuCiAgICBJZiBhIGRhdGFiYXNlIG5hbWUg aXMgc3BlY2lmaWVkLCA8YXBwbGljYXRpb24+cGdfcmVzdG9yZTwvYXBwbGljYXRpb24+CiAgICBj b25uZWN0cyB0byB0aGF0IGRhdGFiYXNlIGFuZCByZXN0b3JlcyBhcmNoaXZlIGNvbnRlbnRzIGRp cmVjdGx5IGludG8KLSAgIHRoZSBkYXRhYmFzZS4gIE90aGVyd2lzZSwgYSBzY3JpcHQgY29udGFp bmluZyB0aGUgU1FMCi0gICBjb21tYW5kcyBuZWNlc3NhcnkgdG8gcmVidWlsZCB0aGUgZGF0YWJh c2UgaXMgY3JlYXRlZCBhbmQgd3JpdHRlbgorICAgdGhlIGRhdGFiYXNlLgorICAgV2hlbiByZXN0 b3JpbmcgZnJvbSBhIGR1bXAgbWFkZSBieSA8YXBwbGljYXRpb24+cGdfZHVtcGFsbDwvYXBwbGlj YXRpb24+LAorICAgZWFjaCBkYXRhYmFzZSB3aWxsIGJlIGNyZWF0ZWQgYW5kIHRoZW4gdGhlIHJl c3RvcmF0aW9uIHdpbGwgYmUgcnVuIGluIHRoYXQKKyAgIGRhdGFiYXNlLgorCisgICBPdGhlcndp c2UsIHdoZW4gYSBkYXRhYmFzZSBuYW1lIGlzIG5vdCBzcGVjaWZpZWQsIGEgc2NyaXB0IGNvbnRh aW5pbmcgdGhlIFNRTAorICAgY29tbWFuZHMgbmVjZXNzYXJ5IHRvIHJlYnVpbGQgdGhlIGRhdGFi YXNlIG9yIGNsdXN0ZXIgaXMgY3JlYXRlZCBhbmQgd3JpdHRlbgogICAgdG8gYSBmaWxlIG9yIHN0 YW5kYXJkIG91dHB1dC4gIFRoaXMgc2NyaXB0IG91dHB1dCBpcyBlcXVpdmFsZW50IHRvCi0gICB0 aGUgcGxhaW4gdGV4dCBvdXRwdXQgZm9ybWF0IG9mIDxhcHBsaWNhdGlvbj5wZ19kdW1wPC9hcHBs aWNhdGlvbj4uCisgICB0aGUgcGxhaW4gdGV4dCBvdXRwdXQgZm9ybWF0IG9mIDxhcHBsaWNhdGlv bj5wZ19kdW1wPC9hcHBsaWNhdGlvbj4gb3IKKyAgIDxhcHBsaWNhdGlvbj5wZ19kdW1wYWxsPC9h cHBsaWNhdGlvbj4uCisKICAgIFNvbWUgb2YgdGhlIG9wdGlvbnMgY29udHJvbGxpbmcgdGhlIG91 dHB1dCBhcmUgdGhlcmVmb3JlIGFuYWxvZ291cyB0bwogICAgPGFwcGxpY2F0aW9uPnBnX2R1bXA8 L2FwcGxpY2F0aW9uPiBvcHRpb25zLgogICA8L3BhcmE+CkBAIC0xNTIsNiArMTYxLDggQEAgUG9z dGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgICAgICAgIGNvbW1hbmRzIHRoYXQgbWVudGlvbiB0aGlz IGRhdGFiYXNlLgogICAgICAgICBBY2Nlc3MgcHJpdmlsZWdlcyBmb3IgdGhlIGRhdGFiYXNlIGl0 c2VsZiBhcmUgYWxzbyByZXN0b3JlZCwKICAgICAgICAgdW5sZXNzIDxvcHRpb24+LS1uby1hY2w8 L29wdGlvbj4gaXMgc3BlY2lmaWVkLgorICAgICAgICA8b3B0aW9uPi0tY3JlYXRlPC9vcHRpb24+ IGlzIHJlcXVpcmVkIHdoZW4gcmVzdG9yaW5nIG11bHRpcGxlIGRhdGFiYXNlcworICAgICAgICBm cm9tIGFuIGFyY2hpdmUgY3JlYXRlZCBieSA8YXBwbGljYXRpb24+cGdfZHVtcGFsbDwvYXBwbGlj YXRpb24+LgogICAgICAgIDwvcGFyYT4KIAogICAgICAgIDxwYXJhPgpAQCAtMjQ3LDYgKzI1OCwx OSBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwv dmFybGlzdGVudHJ5PgogCisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9u Pi1nPC9vcHRpb24+PC90ZXJtPgorICAgICAgPHRlcm0+PG9wdGlvbj4tLWdsb2JhbHMtb25seTwv b3B0aW9uPjwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAg UmVzdG9yZSBvbmx5IGdsb2JhbCBvYmplY3RzIChyb2xlcyBhbmQgdGFibGVzcGFjZXMpLCBubyBk YXRhYmFzZXMuCisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBUaGlzIG9w dGlvbiBpcyBvbmx5IHJlbGV2YW50IHdoZW4gcmVzdG9yaW5nIGZyb20gYW4gYXJjaGl2ZSBtYWRl IHVzaW5nIDxhcHBsaWNhdGlvbj5wZ19kdW1wYWxsPC9hcHBsaWNhdGlvbj4uCisgICAgICAgPC9w YXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKICAgICAgPHZh cmxpc3RlbnRyeT4KICAgICAgIDx0ZXJtPjxvcHRpb24+LUkgPHJlcGxhY2VhYmxlIGNsYXNzPSJw YXJhbWV0ZXIiPmluZGV4PC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CiAgICAgICA8dGVy bT48b3B0aW9uPi0taW5kZXg9PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmluZGV4PC9y ZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CkBAIC01OTEsNiArNjE1LDI4IEBAIFBvc3RncmVT UUwgZG9jdW1lbnRhdGlvbgogICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+ CiAKKyAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LS1leGNsdWRlLWRh dGFiYXNlPTxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5wYXR0ZXJuPC9yZXBsYWNlYWJs ZT48L29wdGlvbj48L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAg ICAgIERvIG5vdCByZXN0b3JlIGRhdGFiYXNlcyB3aG9zZSBuYW1lIG1hdGNoZXMKKyAgICAgICAg PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnBhdHRlcm48L3JlcGxhY2VhYmxlPi4KKyAg ICAgICAgTXVsdGlwbGUgcGF0dGVybnMgY2FuIGJlIGV4Y2x1ZGVkIGJ5IHdyaXRpbmcgbXVsdGlw bGUKKyAgICAgICAgPG9wdGlvbj4tLWV4Y2x1ZGUtZGF0YWJhc2U8L29wdGlvbj4gc3dpdGNoZXMu ICBUaGUKKyAgICAgICAgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnBhdHRlcm48L3Jl cGxhY2VhYmxlPiBwYXJhbWV0ZXIgaXMKKyAgICAgICAgaW50ZXJwcmV0ZWQgYXMgYSBwYXR0ZXJu IGFjY29yZGluZyB0byB0aGUgc2FtZSBydWxlcyB1c2VkIGJ5CisgICAgICAgIDxhcHBsaWNhdGlv bj5wc3FsPC9hcHBsaWNhdGlvbj4ncyA8bGl0ZXJhbD5cZDwvbGl0ZXJhbD4KKyAgICAgICAgY29t bWFuZHMgKHNlZSA8eHJlZiBsaW5rZW5kPSJhcHAtcHNxbC1wYXR0ZXJucyIvPiksCisgICAgICAg IHNvIG11bHRpcGxlIGRhdGFiYXNlcyBjYW4gYWxzbyBiZSBleGNsdWRlZCBieSB3cml0aW5nIHdp bGRjYXJkCisgICAgICAgIGNoYXJhY3RlcnMgaW4gdGhlIHBhdHRlcm4uICBXaGVuIHVzaW5nIHdp bGRjYXJkcywgYmUgY2FyZWZ1bCB0bworICAgICAgICBxdW90ZSB0aGUgcGF0dGVybiBpZiBuZWVk ZWQgdG8gcHJldmVudCBzaGVsbCB3aWxkY2FyZCBleHBhbnNpb24uCisgICAgICAgPC9wYXJhPgor ICAgICAgIDxwYXJhPgorICAgICAgICBUaGlzIG9wdGlvbiBpcyBvbmx5IHJlbGV2YW50IHdoZW4g cmVzdG9yaW5nIGZyb20gYW4gYXJjaGl2ZSBtYWRlIHVzaW5nIDxhcHBsaWNhdGlvbj5wZ19kdW1w YWxsPC9hcHBsaWNhdGlvbj4uCisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAg ICAgPC92YXJsaXN0ZW50cnk+CisKICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgIDx0ZXJtPjxv cHRpb24+LS1maWx0ZXI9PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmZpbGVuYW1lPC9y ZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CiAgICAgICA8bGlzdGl0ZW0+CmRpZmYgLS1naXQg YS9zcmMvYmluL3BnX2R1bXAvY29ubmVjdGRiLmMgYi9zcmMvYmluL3BnX2R1bXAvY29ubmVjdGRi LmMKaW5kZXggZDU1ZDUzZGJlZWEuLmY0NGE4YTQ1ZmNhIDEwMDY0NAotLS0gYS9zcmMvYmluL3Bn X2R1bXAvY29ubmVjdGRiLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL2Nvbm5lY3RkYi5jCkBAIC0y ODcsNyArMjg3LDYgQEAgZXhlY3V0ZVF1ZXJ5KFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqcXVl cnkpCiAJewogCQlwZ19sb2dfZXJyb3IoInF1ZXJ5IGZhaWxlZDogJXMiLCBQUWVycm9yTWVzc2Fn ZShjb25uKSk7CiAJCXBnX2xvZ19lcnJvcl9kZXRhaWwoIlF1ZXJ5IHdhczogJXMiLCBxdWVyeSk7 Ci0JCVBRZmluaXNoKGNvbm4pOwogCQlleGl0X25pY2VseSgxKTsKIAl9CiAKZGlmZiAtLWdpdCBh L3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZCBiL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWls ZAppbmRleCBmM2M2NjlmNDg0ZS4uM2UyMWFhZjU3ODAgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdf ZHVtcC9tZXNvbi5idWlsZAorKysgYi9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQKQEAgLTEw Myw2ICsxMDMsNyBAQCB0ZXN0cyArPSB7CiAgICAgICAndC8wMDRfcGdfZHVtcF9wYXJhbGxlbC5w bCcsCiAgICAgICAndC8wMDVfcGdfZHVtcF9maWx0ZXJmaWxlLnBsJywKICAgICAgICd0LzAwNl9w Z19kdW1wX2NvbXByZXNzLnBsJywKKwkgICd0LzAwN19wZ19kdW1wYWxsLnBsJywKICAgICAgICd0 LzAxMF9kdW1wX2Nvbm5zdHIucGwnLAogICAgIF0sCiAgIH0sCmRpZmYgLS1naXQgYS9zcmMvYmlu L3BnX2R1bXAvcGFyYWxsZWwuYyBiL3NyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5jCmluZGV4IDA4 NmFkY2RjNTAyLi41OTc0ZDY3MDZmZCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BhcmFs bGVsLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BhcmFsbGVsLmMKQEAgLTMzMyw2ICszMzMsMTYg QEAgb25fZXhpdF9jbG9zZV9hcmNoaXZlKEFyY2hpdmUgKkFIWCkKIAlvbl9leGl0X25pY2VseShh cmNoaXZlX2Nsb3NlX2Nvbm5lY3Rpb24sICZzaHV0ZG93bl9pbmZvKTsKIH0KIAorLyoKKyAqIFdo ZW4gcGdfcmVzdG9yZSByZXN0b3JlcyBtdWx0aXBsZSBkYXRhYmFzZXMsIHRoZW4gdXBkYXRlIGFs cmVhZHkgYWRkZWQgZW50cnkKKyAqIGludG8gYXJyYXkgZm9yIGNsZWFudXAuCisgKi8KK3ZvaWQK K3JlcGxhY2Vfb25fZXhpdF9jbG9zZV9hcmNoaXZlKEFyY2hpdmUgKkFIWCkKK3sKKwlzaHV0ZG93 bl9pbmZvLkFIWCA9IEFIWDsKK30KKwogLyoKICAqIG9uX2V4aXRfbmljZWx5IGhhbmRsZXIgZm9y IHNodXR0aW5nIGRvd24gZGF0YWJhc2UgY29ubmVjdGlvbnMgYW5kCiAgKiB3b3JrZXIgcHJvY2Vz c2VzIGNsZWFubHkuCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmggYi9z cmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmgKaW5kZXggZDkwNDFkYWQ3MjAuLmY2MzFkOTQ1NDcy IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmgKKysrIGIvc3JjL2Jpbi9w Z19kdW1wL3BnX2JhY2t1cC5oCkBAIC0zMTIsNyArMzEyLDcgQEAgZXh0ZXJuIHZvaWQgU2V0QXJj aGl2ZU9wdGlvbnMoQXJjaGl2ZSAqQUgsIER1bXBPcHRpb25zICpkb3B0LCBSZXN0b3JlT3B0aW9u cyAqcm8KIAogZXh0ZXJuIHZvaWQgUHJvY2Vzc0FyY2hpdmVSZXN0b3JlT3B0aW9ucyhBcmNoaXZl ICpBSFgpOwogCi1leHRlcm4gdm9pZCBSZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgpOworZXh0 ZXJuIHZvaWQgUmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhYLCBib29sIGFwcGVuZF9kYXRhLCBi b29sIGdsb2JhbHNfb25seSk7CiAKIC8qIE9wZW4gYW4gZXhpc3RpbmcgYXJjaGl2ZSAqLwogZXh0 ZXJuIEFyY2hpdmUgKk9wZW5BcmNoaXZlKGNvbnN0IGNoYXIgKkZpbGVTcGVjLCBjb25zdCBBcmNo aXZlRm9ybWF0IGZtdCk7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2Fy Y2hpdmVyLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKaW5kZXggYzg0 YjAxN2YyMWIuLjViOGRkMjk1MDcwIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFj a3VwX2FyY2hpdmVyLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5j CkBAIC04Niw3ICs4Niw3IEBAIHN0YXRpYyBpbnQJUmVzdG9yaW5nVG9EQihBcmNoaXZlSGFuZGxl ICpBSCk7CiBzdGF0aWMgdm9pZCBkdW1wX2xvX2J1ZihBcmNoaXZlSGFuZGxlICpBSCk7CiBzdGF0 aWMgdm9pZCBkdW1wVGltZXN0YW1wKEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICptc2cs IHRpbWVfdCB0aW0pOwogc3RhdGljIHZvaWQgU2V0T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBj b25zdCBjaGFyICpmaWxlbmFtZSwKLQkJCQkJICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0 aW9uIGNvbXByZXNzaW9uX3NwZWMpOworCQkJCWNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRp b24gY29tcHJlc3Npb25fc3BlYywgYm9vbCBhcHBlbmRfZGF0YSk7CiBzdGF0aWMgQ29tcHJlc3NG aWxlSGFuZGxlICpTYXZlT3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFIKTsKIHN0YXRpYyB2b2lkIFJl c3RvcmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzRmlsZUhhbmRsZSAqc2F2ZWRP dXRwdXQpOwogCkBAIC0zMzksOSArMzM5LDE0IEBAIFByb2Nlc3NBcmNoaXZlUmVzdG9yZU9wdGlv bnMoQXJjaGl2ZSAqQUhYKQogCQlTdHJpY3ROYW1lc0NoZWNrKHJvcHQpOwogfQogCi0vKiBQdWJs aWMgKi8KKy8qCisgKiBSZXN0b3JlQXJjaGl2ZQorICoKKyAqIElmIGFwcGVuZF9kYXRhIGlzIHNl dCwgdGhlbiBhcHBlbmQgZGF0YSBpbnRvIGZpbGUgYXMgd2UgYXJlIHJlc3RvcmluZyBkdW1wCisg KiBvZiBtdWx0aXBsZSBkYXRhYmFzZXMgd2hpY2ggd2FzIHRha2VuIGJ5IHBnX2R1bXBhbGwuCisg Ki8KIHZvaWQKLVJlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFIWCkKK1Jlc3RvcmVBcmNoaXZlKEFy Y2hpdmUgKkFIWCwgYm9vbCBhcHBlbmRfZGF0YSwgYm9vbCBnbG9iYWxzX29ubHkpCiB7CiAJQXJj aGl2ZUhhbmRsZSAqQUggPSAoQXJjaGl2ZUhhbmRsZSAqKSBBSFg7CiAJUmVzdG9yZU9wdGlvbnMg KnJvcHQgPSBBSC0+cHVibGljLnJvcHQ7CkBAIC00NTgsNyArNDYzLDcgQEAgUmVzdG9yZUFyY2hp dmUoQXJjaGl2ZSAqQUhYKQogCSAqLwogCXNhdiA9IFNhdmVPdXRwdXQoQUgpOwogCWlmIChyb3B0 LT5maWxlbmFtZSB8fCByb3B0LT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSAhPSBQR19DT01Q UkVTU0lPTl9OT05FKQotCQlTZXRPdXRwdXQoQUgsIHJvcHQtPmZpbGVuYW1lLCByb3B0LT5jb21w cmVzc2lvbl9zcGVjKTsKKwkJU2V0T3V0cHV0KEFILCByb3B0LT5maWxlbmFtZSwgcm9wdC0+Y29t cHJlc3Npb25fc3BlYywgYXBwZW5kX2RhdGEpOwogCiAJYWhwcmludGYoQUgsICItLVxuLS0gUG9z dGdyZVNRTCBkYXRhYmFzZSBkdW1wXG4tLVxuXG4iKTsKIApAQCAtNzYxLDYgKzc2NiwxNSBAQCBS ZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgpCiAJCQlpZiAoKHRlLT5yZXFzICYgKFJFUV9TQ0hF TUEgfCBSRVFfREFUQSB8IFJFUV9TVEFUUykpID09IDApCiAJCQkJY29udGludWU7CQkvKiBpZ25v cmUgaWYgbm90IHRvIGJlIGR1bXBlZCBhdCBhbGwgKi8KIAorCQkJLyogU2tpcCBEUk9QIERBVEFC QVNFIGlmIGdsb2JhbHNfb25seS4gKi8KKwkJCWlmIChnbG9iYWxzX29ubHkgJiYgdGUgJiYgdGUt PnRhZyAmJiAoc3RyY21wKHRlLT50YWcsICJEUk9QX0RBVEFCQVNFIikgPT0gMCkpCisJCQkJY29u dGludWU7CisKKwkJCS8qIFNraXAgZm9yIENPTk5FQ1QgbWV0YSBjb21tYW5kLiAqLworCQkJaWYg KCFyb3B0LT5maWxlbmFtZSAmJiB0ZSAmJiB0ZS0+dGFnICYmCisJCQkJCShzdHJjbXAodGUtPnRh ZywgIkNPTk5FQ1QiKSA9PSAwKSkKKwkJCQljb250aW51ZTsKKwogCQkJc3dpdGNoIChfdG9jRW50 cnlSZXN0b3JlUGFzcyh0ZSkpCiAJCQl7CiAJCQkJY2FzZSBSRVNUT1JFX1BBU1NfTUFJTjoKQEAg LTEzMTYsNyArMTMzMCw3IEBAIFByaW50VE9DU3VtbWFyeShBcmNoaXZlICpBSFgpCiAKIAlzYXYg PSBTYXZlT3V0cHV0KEFIKTsKIAlpZiAocm9wdC0+ZmlsZW5hbWUpCi0JCVNldE91dHB1dChBSCwg cm9wdC0+ZmlsZW5hbWUsIG91dF9jb21wcmVzc2lvbl9zcGVjKTsKKwkJU2V0T3V0cHV0KEFILCBy b3B0LT5maWxlbmFtZSwgb3V0X2NvbXByZXNzaW9uX3NwZWMsIGZhbHNlKTsKIAogCWlmIChzdHJm dGltZShzdGFtcF9zdHIsIHNpemVvZihzdGFtcF9zdHIpLCBQR0RVTVBfU1RSRlRJTUVfRk1ULAog CQkJCSBsb2NhbHRpbWUoJkFILT5jcmVhdGVEYXRlKSkgPT0gMCkKQEAgLTE2OTUsNyArMTcwOSw4 IEBAIGFyY2hwcmludGYoQXJjaGl2ZSAqQUgsIGNvbnN0IGNoYXIgKmZtdCwuLi4pCiAKIHN0YXRp YyB2b2lkCiBTZXRPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKmZpbGVuYW1l LAotCQkgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYykK KwkJICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMsCisJ CSAgYm9vbCBhcHBlbmRfZGF0YSkKIHsKIAlDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSDsKIAljb25z dCBjaGFyICptb2RlOwpAQCAtMTcxNSw3ICsxNzMwLDcgQEAgU2V0T3V0cHV0KEFyY2hpdmVIYW5k bGUgKkFILCBjb25zdCBjaGFyICpmaWxlbmFtZSwKIAllbHNlCiAJCWZuID0gZmlsZW5vKHN0ZG91 dCk7CiAKLQlpZiAoQUgtPm1vZGUgPT0gYXJjaE1vZGVBcHBlbmQpCisJaWYgKGFwcGVuZF9kYXRh IHx8IEFILT5tb2RlID09IGFyY2hNb2RlQXBwZW5kKQogCQltb2RlID0gUEdfQklOQVJZX0E7CiAJ ZWxzZQogCQltb2RlID0gUEdfQklOQVJZX1c7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAv cGdfYmFja3VwX2FyY2hpdmVyLmggYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVy LmgKaW5kZXggMzI1YjUzZmM5YmQuLjM2NTA3M2IzZWFlIDEwMDY0NAotLS0gYS9zcmMvYmluL3Bn X2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmgKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1 cF9hcmNoaXZlci5oCkBAIC0zOTQsNiArMzk0LDcgQEAgc3RydWN0IF90b2NFbnRyeQogCiBleHRl cm4gaW50CXBhcmFsbGVsX3Jlc3RvcmUoQXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSk7 CiBleHRlcm4gdm9pZCBvbl9leGl0X2Nsb3NlX2FyY2hpdmUoQXJjaGl2ZSAqQUhYKTsKK2V4dGVy biB2b2lkIHJlcGxhY2Vfb25fZXhpdF9jbG9zZV9hcmNoaXZlKEFyY2hpdmUgKkFIWCk7CiAKIGV4 dGVybiB2b2lkIHdhcm5fb3JfZXhpdF9ob3JyaWJseShBcmNoaXZlSGFuZGxlICpBSCwgY29uc3Qg Y2hhciAqZm10LC4uLikgcGdfYXR0cmlidXRlX3ByaW50ZigyLCAzKTsKIApkaWZmIC0tZ2l0IGEv c3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF90YXIuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNr dXBfdGFyLmMKaW5kZXggYjViYTNiNDZkZDkuLjgxOGI4MGE5MzY5IDEwMDY0NAotLS0gYS9zcmMv YmluL3BnX2R1bXAvcGdfYmFja3VwX3Rhci5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNr dXBfdGFyLmMKQEAgLTgyNiw3ICs4MjYsNyBAQCBfQ2xvc2VBcmNoaXZlKEFyY2hpdmVIYW5kbGUg KkFIKQogCQlzYXZWZXJib3NlID0gQUgtPnB1YmxpYy52ZXJib3NlOwogCQlBSC0+cHVibGljLnZl cmJvc2UgPSAwOwogCi0JCVJlc3RvcmVBcmNoaXZlKChBcmNoaXZlICopIEFIKTsKKwkJUmVzdG9y ZUFyY2hpdmUoKEFyY2hpdmUgKikgQUgsIGZhbHNlLCBmYWxzZSk7CiAKIAkJU2V0QXJjaGl2ZU9w dGlvbnMoKEFyY2hpdmUgKikgQUgsIHNhdkRvcHQsIHNhdlJvcHQpOwogCmRpZmYgLS1naXQgYS9z cmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwppbmRl eCBhMDA5MThiYWNiNC4uMTNlMTc2NGVjNzAgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9w Z19kdW1wLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwpAQCAtMTI5Miw3ICsxMjky LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJICogcmlnaHQgbm93LgogCSAqLwog CWlmIChwbGFpblRleHQpCi0JCVJlc3RvcmVBcmNoaXZlKGZvdXQpOworCQlSZXN0b3JlQXJjaGl2 ZShmb3V0LCBmYWxzZSwgZmFsc2UpOwogCiAJQ2xvc2VBcmNoaXZlKGZvdXQpOwogCmRpZmYgLS1n aXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1 bXBhbGwuYwppbmRleCBiYjQ1MWMxYmFlMS4uMGJmODkyYjFmY2MgMTAwNjQ0Ci0tLSBhL3NyYy9i aW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwu YwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgImZlX3V0aWxzL3N0cmluZ191dGlscy5oIgog I2luY2x1ZGUgImZpbHRlci5oIgogI2luY2x1ZGUgImdldG9wdF9sb25nLmgiCisjaW5jbHVkZSAi cGdfYmFja3VwX2FyY2hpdmVyLmgiCiAKIC8qIHZlcnNpb24gc3RyaW5nIHdlIGV4cGVjdCBiYWNr IGZyb20gcGdfZHVtcCAqLwogI2RlZmluZSBQR0RVTVBfVkVSU0lPTlNUUiAicGdfZHVtcCAoUG9z dGdyZVNRTCkgIiBQR19WRVJTSU9OICJcbiIKQEAgLTY1LDkgKzY2LDEwIEBAIHN0YXRpYyB2b2lk IGRyb3BUYWJsZXNwYWNlcyhQR2Nvbm4gKmNvbm4pOwogc3RhdGljIHZvaWQgZHVtcFRhYmxlc3Bh Y2VzKFBHY29ubiAqY29ubik7CiBzdGF0aWMgdm9pZCBkcm9wREJzKFBHY29ubiAqY29ubik7CiBz dGF0aWMgdm9pZCBkdW1wVXNlckNvbmZpZyhQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnVzZXJu YW1lKTsKLXN0YXRpYyB2b2lkIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKTsKK3N0YXRpYyB2 b2lkIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uLCBBcmNoaXZlRm9ybWF0IGFyY2hEdW1wRm9y bWF0KTsKIHN0YXRpYyB2b2lkIGR1bXBUaW1lc3RhbXAoY29uc3QgY2hhciAqbXNnKTsKLXN0YXRp YyBpbnQJcnVuUGdEdW1wKGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqY3JlYXRlX29w dHMpOworc3RhdGljIGludAlydW5QZ0R1bXAoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFy ICpjcmVhdGVfb3B0cywKKwkJCQkJICBjaGFyICpkYmZpbGUsIEFyY2hpdmVGb3JtYXQgYXJjaER1 bXBGb3JtYXQpOwogc3RhdGljIHZvaWQgYnVpbGRTaFNlY0xhYmVscyhQR2Nvbm4gKmNvbm4sCiAJ CQkJCQkJIGNvbnN0IGNoYXIgKmNhdGFsb2dfbmFtZSwgT2lkIG9iamVjdElkLAogCQkJCQkJCSBj b25zdCBjaGFyICpvYmp0eXBlLCBjb25zdCBjaGFyICpvYmpuYW1lLApAQCAtNzYsNiArNzgsOSBA QCBzdGF0aWMgdm9pZCBleGVjdXRlQ29tbWFuZChQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnF1 ZXJ5KTsKIHN0YXRpYyB2b2lkIGV4cGFuZF9kYm5hbWVfcGF0dGVybnMoUEdjb25uICpjb25uLCBT aW1wbGVTdHJpbmdMaXN0ICpwYXR0ZXJucywKIAkJCQkJCQkJICAgU2ltcGxlU3RyaW5nTGlzdCAq bmFtZXMpOwogc3RhdGljIHZvaWQgcmVhZF9kdW1wYWxsX2ZpbHRlcnMoY29uc3QgY2hhciAqZmls ZW5hbWUsIFNpbXBsZVN0cmluZ0xpc3QgKnBhdHRlcm4pOworc3RhdGljIEFyY2hpdmVGb3JtYXQg cGFyc2VEdW1wRm9ybWF0KGNvbnN0IGNoYXIgKmZvcm1hdCk7CitzdGF0aWMgaW50IGNyZWF0ZUR1 bXBJZCh2b2lkKTsKK3N0YXRpYyB2b2lkIGNyZWF0ZU9uZUFyY2hpdmVFbnRyeShjb25zdCBjaGFy ICpxdWVyeSwgY29uc3QgY2hhciAqdGFnKTsKIAogc3RhdGljIGNoYXIgcGdfZHVtcF9iaW5bTUFY UEdQQVRIXTsKIHN0YXRpYyBQUUV4cEJ1ZmZlciBwZ2R1bXBvcHRzOwpAQCAtMTIzLDYgKzEyOCwx MyBAQCBzdGF0aWMgU2ltcGxlU3RyaW5nTGlzdCBkYXRhYmFzZV9leGNsdWRlX3BhdHRlcm5zID0g e05VTEwsIE5VTEx9Owogc3RhdGljIFNpbXBsZVN0cmluZ0xpc3QgZGF0YWJhc2VfZXhjbHVkZV9u YW1lcyA9IHtOVUxMLCBOVUxMfTsKIAogc3RhdGljIGNoYXIgKnJlc3RyaWN0X2tleTsKK3N0YXRp YyBBcmNoaXZlICpmb3V0ID0gTlVMTDsKK3N0YXRpYyBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9u IGNvbXByZXNzaW9uX3NwZWMgPSB7MH07CitzdGF0aWMgaW50IGR1bXBJZFZhbCA9IDA7CitzdGF0 aWMgY29uc3QgQ2F0YWxvZ0lkIG5pbENhdGFsb2dJZCA9IHswLCAwfTsKK3N0YXRpYyBBcmNoaXZl TW9kZSBhcmNoaXZlTW9kZSA9IGFyY2hNb2RlV3JpdGU7CitzdGF0aWMgRGF0YURpclN5bmNNZXRo b2Qgc3luY19tZXRob2QgPSBEQVRBX0RJUl9TWU5DX01FVEhPRF9GU1lOQzsKK3N0YXRpYyBBcmNo aXZlRm9ybWF0IGFyY2hEdW1wRm9ybWF0ID0gYXJjaE51bGw7CiAKIGludAogbWFpbihpbnQgYXJn YywgY2hhciAqYXJndltdKQpAQCAtMTQ4LDYgKzE2MCw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIg KmFyZ3ZbXSkKIAkJeyJwYXNzd29yZCIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnVyd9LAogCQl7Im5v LXByaXZpbGVnZXMiLCBub19hcmd1bWVudCwgTlVMTCwgJ3gnfSwKIAkJeyJuby1hY2wiLCBub19h cmd1bWVudCwgTlVMTCwgJ3gnfSwKKwkJeyJmb3JtYXQiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVM TCwgJ0YnfSwKIAogCQkvKgogCQkgKiB0aGUgZm9sbG93aW5nIG9wdGlvbnMgZG9uJ3QgaGF2ZSBh biBlcXVpdmFsZW50IHNob3J0IG9wdGlvbiBsZXR0ZXIKQEAgLTE5Nyw2ICsyMTAsNyBAQCBtYWlu KGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJY2hhcgkgICAqcGdkYiA9IE5VTEw7CiAJY2hhcgkg ICAqdXNlX3JvbGUgPSBOVUxMOwogCWNvbnN0IGNoYXIgKmR1bXBlbmNvZGluZyA9IE5VTEw7CisJ Y29uc3QgY2hhciAqZm9ybWF0TmFtZSA9ICJwIjsKIAl0cml2YWx1ZQlwcm9tcHRfcGFzc3dvcmQg PSBUUklfREVGQVVMVDsKIAlib29sCQlkYXRhX29ubHkgPSBmYWxzZTsKIAlib29sCQlnbG9iYWxz X29ubHkgPSBmYWxzZTsKQEAgLTIwOCw2ICsyMjIsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICph cmd2W10pCiAJaW50CQkJYywKIAkJCQlyZXQ7CiAJaW50CQkJb3B0aW5kZXg7CisJRHVtcE9wdGlv bnMgZG9wdDsKIAogCXBnX2xvZ2dpbmdfaW5pdChhcmd2WzBdKTsKIAlwZ19sb2dnaW5nX3NldF9s ZXZlbChQR19MT0dfV0FSTklORyk7CkBAIC0yNDYsNyArMjYxLDkgQEAgbWFpbihpbnQgYXJnYywg Y2hhciAqYXJndltdKQogCiAJcGdkdW1wb3B0cyA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CiAKLQl3 aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAiYWNkOkU6ZjpnaDpsOk9wOnJzUzp0 VTp2d1d4IiwgbG9uZ19vcHRpb25zLCAmb3B0aW5kZXgpKSAhPSAtMSkKKwlJbml0RHVtcE9wdGlv bnMoJmRvcHQpOworCisJd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImFjZDpF OmY6RjpnaDpsOk9wOnJzUzp0VTp2d1d4IiwgbG9uZ19vcHRpb25zLCAmb3B0aW5kZXgpKSAhPSAt MSkKIAl7CiAJCXN3aXRjaCAoYykKIAkJewpAQCAtMjU3LDYgKzI3NCw3IEBAIG1haW4oaW50IGFy Z2MsIGNoYXIgKmFyZ3ZbXSkKIAogCQkJY2FzZSAnYyc6CiAJCQkJb3V0cHV0X2NsZWFuID0gdHJ1 ZTsKKwkJCQlkb3B0Lm91dHB1dENsZWFuID0gMTsKIAkJCQlicmVhazsKIAogCQkJY2FzZSAnZCc6 CkBAIC0yNzQsNyArMjkyLDkgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQkJCWFw cGVuZFBRRXhwQnVmZmVyU3RyKHBnZHVtcG9wdHMsICIgLWYgIik7CiAJCQkJYXBwZW5kU2hlbGxT dHJpbmcocGdkdW1wb3B0cywgZmlsZW5hbWUpOwogCQkJCWJyZWFrOwotCisJCQljYXNlICdGJzoK KwkJCQlmb3JtYXROYW1lID0gcGdfc3RyZHVwKG9wdGFyZyk7CisJCQkJYnJlYWs7CiAJCQljYXNl ICdnJzoKIAkJCQlnbG9iYWxzX29ubHkgPSB0cnVlOwogCQkJCWJyZWFrOwpAQCAtMzE0LDYgKzMz NCw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAogCQkJY2FzZSAnVSc6CiAJCQkJ cGd1c2VyID0gcGdfc3RyZHVwKG9wdGFyZyk7CisJCQkJZG9wdC5jcGFyYW1zLnVzZXJuYW1lID0g cGdfc3RyZHVwKG9wdGFyZyk7CiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgJ3YnOgpAQCAtNDI5LDYg KzQ1MCwyNSBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCWV4aXRfbmljZWx5KDEp OwogCX0KIAorCS8qIEdldCBmb3JtYXQgZm9yIGR1bXAuICovCisJYXJjaER1bXBGb3JtYXQgPSBw YXJzZUR1bXBGb3JtYXQoZm9ybWF0TmFtZSk7CisKKwkvKgorCSAqIElmIGEgbm9uLXBsYWluIGZv cm1hdCBpcyBzcGVjaWZpZWQsIGEgZmlsZSBuYW1lIGlzIGFsc28gcmVxdWlyZWQgYXMgdGhlCisJ ICogcGF0aCB0byB0aGUgbWFpbiBkaXJlY3RvcnkuCisJICovCisJaWYgKGFyY2hEdW1wRm9ybWF0 ICE9IGFyY2hOdWxsICYmCisJCSghZmlsZW5hbWUgfHwgc3RyY21wKGZpbGVuYW1lLCAiIikgPT0g MCkpCisJeworCQlwZ19sb2dfZXJyb3IoIm9wdGlvbiAtRi8tLWZvcm1hdD1kfGN8dCByZXF1aXJl cyBvcHRpb24gLWYvLS1maWxlIik7CisJCXBnX2xvZ19lcnJvcl9oaW50KCJUcnkgXCIlcyAtLWhl bHBcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iLCBwcm9nbmFtZSk7CisJCWV4aXRfbmljZWx5KDEp OworCX0KKworCS8qIHJlc3RyaWN0LWtleSBpcyBvbmx5IHN1cHBvcnRlZCB3aXRoIC0tZm9ybWF0 PXBsYWluICovCisJaWYgKGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsICYmIHJlc3RyaWN0X2tl eSkKKwkJcGdfZmF0YWwoIm9wdGlvbiAtLXJlc3RyaWN0LWtleSBjYW4gb25seSBiZSB1c2VkIHdp dGggLS1mb3JtYXQ9cGxhaW4iKTsKKwogCS8qCiAJICogSWYgcGFzc3dvcmQgdmFsdWVzIGFyZSBu b3QgcmVxdWlyZWQgaW4gdGhlIGR1bXAsIHN3aXRjaCB0byB1c2luZwogCSAqIHBnX3JvbGVzIHdo aWNoIGlzIGVxdWFsbHkgdXNlZnVsLCBqdXN0IG1vcmUgbGlrZWx5IHRvIGhhdmUgdW5yZXN0cmlj dGVkCkBAIC00ODksNiArNTI5LDI3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAlp ZiAoc2VxdWVuY2VfZGF0YSkKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocGdkdW1wb3B0cywgIiAt LXNlcXVlbmNlLWRhdGEiKTsKIAorCS8qCisJICogT3BlbiB0aGUgb3V0cHV0IGZpbGUgaWYgcmVx dWlyZWQsIG90aGVyd2lzZSB1c2Ugc3Rkb3V0LiAgSWYgcmVxdWlyZWQsCisJICogdGhlbiBjcmVh dGUgbmV3IGRpcmVjdG9yeS4KKwkgKi8KKwlpZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51bGwp CisJeworCQlBc3NlcnQoZmlsZW5hbWUpOworCisJCS8qIENyZWF0ZSBuZXcgZGlyZWN0b3J5IG9y IGFjY2VwdCB0aGUgZW1wdHkgZXhpc3RpbmcgZGlyZWN0b3J5LiAqLworCQljcmVhdGVfb3Jfb3Bl bl9kaXIoZmlsZW5hbWUpOworCX0KKwllbHNlIGlmIChmaWxlbmFtZSkKKwl7CisJCU9QRiA9IGZv cGVuKGZpbGVuYW1lLCBQR19CSU5BUllfVyk7CisJCWlmICghT1BGKQorCQkJcGdfZmF0YWwoImNv dWxkIG5vdCBvcGVuIG91dHB1dCBmaWxlIFwiJXNcIjogJW0iLAorCQkJCQkgZmlsZW5hbWUpOwor CX0KKwllbHNlCisJCU9QRiA9IHN0ZG91dDsKKwogCS8qCiAJICogSWYgeW91IGRvbid0IHByb3Zp ZGUgYSByZXN0cmljdCBrZXksIG9uZSB3aWxsIGJlIGFwcG9pbnRlZCBmb3IgeW91LgogCSAqLwpA QCAtNTM4LDE5ICs1OTksNiBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJZXhwYW5k X2RibmFtZV9wYXR0ZXJucyhjb25uLCAmZGF0YWJhc2VfZXhjbHVkZV9wYXR0ZXJucywKIAkJCQkJ CSAgICZkYXRhYmFzZV9leGNsdWRlX25hbWVzKTsKIAotCS8qCi0JICogT3BlbiB0aGUgb3V0cHV0 IGZpbGUgaWYgcmVxdWlyZWQsIG90aGVyd2lzZSB1c2Ugc3Rkb3V0Ci0JICovCi0JaWYgKGZpbGVu YW1lKQotCXsKLQkJT1BGID0gZm9wZW4oZmlsZW5hbWUsIFBHX0JJTkFSWV9XKTsKLQkJaWYgKCFP UEYpCi0JCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gb3V0cHV0IGZpbGUgXCIlc1wiOiAlbSIs Ci0JCQkJCSBmaWxlbmFtZSk7Ci0JfQotCWVsc2UKLQkJT1BGID0gc3Rkb3V0OwotCiAJLyoKIAkg KiBTZXQgdGhlIGNsaWVudCBlbmNvZGluZyBpZiByZXF1ZXN0ZWQuCiAJICovCkBAIC01ODUsMzcg KzYzMywxMTAgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCWlmIChxdW90ZV9hbGxf aWRlbnRpZmllcnMpCiAJCWV4ZWN1dGVDb21tYW5kKGNvbm4sICJTRVQgcXVvdGVfYWxsX2lkZW50 aWZpZXJzID0gdHJ1ZSIpOwogCi0JZnByaW50ZihPUEYsICItLVxuLS0gUG9zdGdyZVNRTCBkYXRh YmFzZSBjbHVzdGVyIGR1bXBcbi0tXG5cbiIpOwotCWlmICh2ZXJib3NlKQorCWlmICh2ZXJib3Nl ICYmIGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQogCQlkdW1wVGltZXN0YW1wKCJTdGFydGVk IG9uIik7CiAKLQkvKgotCSAqIEVudGVyIHJlc3RyaWN0ZWQgbW9kZSB0byBibG9jayBhbnkgdW5l eHBlY3RlZCBwc3FsIG1ldGEtY29tbWFuZHMuICBBCi0JICogbWFsaWNpb3VzIHNvdXJjZSBtaWdo dCB0cnkgdG8gaW5qZWN0IGEgdmFyaWV0eSBvZiB0aGluZ3MgdmlhIGJvZ3VzCi0JICogcmVzcG9u c2VzIHRvIHF1ZXJpZXMuICBXaGlsZSB3ZSBjYW5ub3QgcHJldmVudCBzdWNoIHNvdXJjZXMgZnJv bQotCSAqIGFmZmVjdGluZyB0aGUgZGVzdGluYXRpb24gYXQgcmVzdG9yZSB0aW1lLCB3ZSBjYW4g YmxvY2sgcHNxbAotCSAqIG1ldGEtY29tbWFuZHMgc28gdGhhdCB0aGUgY2xpZW50IG1hY2hpbmUg dGhhdCBydW5zIHBzcWwgd2l0aCB0aGUgZHVtcAotCSAqIG91dHB1dCByZW1haW5zIHVuYWZmZWN0 ZWQuCi0JICovCi0JZnByaW50ZihPUEYsICJcXHJlc3RyaWN0ICVzXG5cbiIsIHJlc3RyaWN0X2tl eSk7CisJLyogY3JlYXRlIGEgYXJjaGl2ZSBmaWxlIGZvciBnbG9iYWwgY29tbWFuZHMuICovCisJ aWYgKGZpbGVuYW1lICYmIGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsKQorCXsKKwkJY2hhcgln bG9iYWxfcGF0aFtNQVhQR1BBVEhdOwogCi0JLyoKLQkgKiBXZSB1c2VkIHRvIGVtaXQgXGNvbm5l Y3QgcG9zdGdyZXMgaGVyZSwgYnV0IHRoYXQgc2VydmVkIG5vIHB1cnBvc2UKLQkgKiBvdGhlciB0 aGFuIHRvIGJyZWFrIHRoaW5ncyBmb3IgaW5zdGFsbGF0aW9ucyB3aXRob3V0IGEgcG9zdGdyZXMK LQkgKiBkYXRhYmFzZS4gIEV2ZXJ5dGhpbmcgd2UncmUgcmVzdG9yaW5nIGhlcmUgaXMgYSBnbG9i YWwsIHNvIHdoaWNoZXZlcgotCSAqIGRhdGFiYXNlIHdlJ3JlIGNvbm5lY3RlZCB0byBhdCB0aGUg bW9tZW50IGlzIGZpbmUuCi0JICovCisJCS8qIFNldCBmaWxlIHBhdGggZm9yIGdsb2JhbCBzcWwg Y29tbWFuZHMuICovCisJCXNucHJpbnRmKGdsb2JhbF9wYXRoLCBNQVhQR1BBVEgsICIlcy90b2Mu Z2xvIiwgZmlsZW5hbWUpOwogCi0JLyogUmVzdG9yZSB3aWxsIG5lZWQgdG8gd3JpdGUgdG8gdGhl IHRhcmdldCBjbHVzdGVyICovCi0JZnByaW50ZihPUEYsICJTRVQgZGVmYXVsdF90cmFuc2FjdGlv bl9yZWFkX29ubHkgPSBvZmY7XG5cbiIpOworCQkvKiBPcGVuIHRoZSBvdXRwdXQgZmlsZSAqLwor CQlmb3V0ID0gQ3JlYXRlQXJjaGl2ZShnbG9iYWxfcGF0aCwgYXJjaEN1c3RvbSwgY29tcHJlc3Np b25fc3BlYywKKwkJCQlkb3N5bmMsIGFyY2hpdmVNb2RlLCBOVUxMLCBzeW5jX21ldGhvZCk7CisK KwkJLyogTWFrZSBkdW1wIG9wdGlvbnMgYWNjZXNzaWJsZSByaWdodCBhd2F5ICovCisJCVNldEFy Y2hpdmVPcHRpb25zKGZvdXQsICZkb3B0LCBOVUxMKTsKKwkJKChBcmNoaXZlSGFuZGxlKilmb3V0 KS0+Y29ubmVjdGlvbiA9IGNvbm47CisJCSgoQXJjaGl2ZUhhbmRsZSopZm91dCktPnB1YmxpYy5u dW1Xb3JrZXJzID0gMTsKKworCQkvKiBSZWdpc3RlciB0aGUgY2xlYW51cCBob29rICovCisJCW9u X2V4aXRfY2xvc2VfYXJjaGl2ZShmb3V0KTsKKworCQkvKiBMZXQgdGhlIGFyY2hpdmVyIGtub3cg aG93IG5vaXN5IHRvIGJlICovCisJCWZvdXQtPnZlcmJvc2UgPSB2ZXJib3NlOworCisJCS8qCisJ CSAqIFdlIGFsbG93IHRoZSBzZXJ2ZXIgdG8gYmUgYmFjayB0byA5LjIsIGFuZCB1cCB0byBhbnkg bWlub3IgcmVsZWFzZSBvZgorCQkgKiBvdXIgb3duIG1ham9yIHZlcnNpb24uICAoU2VlIGFsc28g dmVyc2lvbiBjaGVjayBpbiBwZ19kdW1wYWxsLmMuKQorCQkgKi8KKwkJZm91dC0+bWluUmVtb3Rl VmVyc2lvbiA9IDkwMjAwOworCQlmb3V0LT5tYXhSZW1vdGVWZXJzaW9uID0gKFBHX1ZFUlNJT05f TlVNIC8gMTAwKSAqIDEwMCArIDk5OworCQlmb3V0LT5udW1Xb3JrZXJzID0gMTsKIAotCS8qIFJl cGxpY2F0ZSBlbmNvZGluZyBhbmQgc3RkX3N0cmluZ3MgaW4gb3V0cHV0ICovCi0JZnByaW50ZihP UEYsICJTRVQgY2xpZW50X2VuY29kaW5nID0gJyVzJztcbiIsCi0JCQlwZ19lbmNvZGluZ190b19j aGFyKGVuY29kaW5nKSk7Ci0JZnByaW50ZihPUEYsICJTRVQgc3RhbmRhcmRfY29uZm9ybWluZ19z dHJpbmdzID0gJXM7XG4iLCBzdGRfc3RyaW5ncyk7Ci0JaWYgKHN0cmNtcChzdGRfc3RyaW5ncywg Im9mZiIpID09IDApCi0JCWZwcmludGYoT1BGLCAiU0VUIGVzY2FwZV9zdHJpbmdfd2FybmluZyA9 IG9mZjtcbiIpOwotCWZwcmludGYoT1BGLCAiXG4iKTsKKwkJY3JlYXRlT25lQXJjaGl2ZUVudHJ5 KCItLVxuLS0gUG9zdGdyZVNRTCBkYXRhYmFzZSBjbHVzdGVyIGR1bXBcbi0tXG5cbiIsICJDT01N RU5UIik7CisKKwkJLyogZGVmYXVsdF90cmFuc2FjdGlvbl9yZWFkX29ubHkgPSBvZmYgKi8KKwkJ eworCQkJUFFFeHBCdWZmZXIgcXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKworCQkJcGdfbG9n X2luZm8oInNhdmluZyBkZWZhdWx0X3RyYW5zYWN0aW9uX3JlYWRfb25seSA9IG9mZiIpOworCQkJ YXBwZW5kUFFFeHBCdWZmZXIocXJ5LCAiU0VUIGRlZmF1bHRfdHJhbnNhY3Rpb25fcmVhZF9vbmx5 ID0gb2ZmO1xuIik7CisJCQljcmVhdGVPbmVBcmNoaXZlRW50cnkocXJ5LT5kYXRhLCAiREVGQVVM VF9UUkFOU0FDVElPTl9SRUFEX09OTFkiKTsKKwkJCWRlc3Ryb3lQUUV4cEJ1ZmZlcihxcnkpOwor CQl9CisKKwkJLyogZHVtcEVuY29kaW5nOiBwdXQgdGhlIGNvcnJlY3QgZW5jb2RpbmcgaW50byB0 aGUgYXJjaGl2ZSAqLworCQl7CisJCQlQUUV4cEJ1ZmZlciBxcnkgPSBjcmVhdGVQUUV4cEJ1ZmZl cigpOworCQkJY29uc3QgY2hhciAqZW5jbmFtZSA9IHBnX2VuY29kaW5nX3RvX2NoYXIoZW5jb2Rp bmcpOworCisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxcnksICJTRVQgY2xpZW50X2VuY29kaW5n ID0gIik7CisJCQlhcHBlbmRTdHJpbmdMaXRlcmFsQUgocXJ5LCBlbmNuYW1lLCBmb3V0KTsKKwkJ CWFwcGVuZFBRRXhwQnVmZmVyU3RyKHFyeSwgIjtcbiIpOworCisJCQlwZ19sb2dfaW5mbygic2F2 aW5nIGVuY29kaW5nID0gJXMiLCBlbmNuYW1lKTsKKwkJCWNyZWF0ZU9uZUFyY2hpdmVFbnRyeShx cnktPmRhdGEsICJFTkNPRElORyIpOworCQkJZGVzdHJveVBRRXhwQnVmZmVyKHFyeSk7CisJCX0K KworCQkvKiBkdW1wU3RkU3RyaW5nczogcHV0IHRoZSBjb3JyZWN0IGVzY2FwZSBzdHJpbmcgYmVo YXZpb3IgaW50byB0aGUgYXJjaGl2ZSAqLworCQl7CisJCQljb25zdCBjaGFyICpzdGRzdHJpbmdz ID0gc3RkX3N0cmluZ3MgPyAib24iIDogIm9mZiI7CisJCQlQUUV4cEJ1ZmZlciBxcnkgPSBjcmVh dGVQUUV4cEJ1ZmZlcigpOworCisJCQlwZ19sb2dfaW5mbygic2F2aW5nIFwic3RhbmRhcmRfY29u Zm9ybWluZ19zdHJpbmdzID0gJXNcIiIsIHN0ZHN0cmluZ3MpOworCQkJYXBwZW5kUFFFeHBCdWZm ZXIocXJ5LCAiU0VUIHN0YW5kYXJkX2NvbmZvcm1pbmdfc3RyaW5ncyA9ICclcyc7XG4iLAorCQkJ CQlzdGRzdHJpbmdzKTsKKwkJCWNyZWF0ZU9uZUFyY2hpdmVFbnRyeShxcnktPmRhdGEsICJTVERT VFJJTkdTIik7CisJCQlkZXN0cm95UFFFeHBCdWZmZXIocXJ5KTsKKwkJfQorCX0KKwllbHNlCisJ eworCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNsdXN0ZXIgZHVt cFxuLS1cblxuIik7CisKKwkJLyoKKwkJICogRW50ZXIgcmVzdHJpY3RlZCBtb2RlIHRvIGJsb2Nr IGFueSB1bmV4cGVjdGVkIHBzcWwgbWV0YS1jb21tYW5kcy4gIEEKKwkJICogbWFsaWNpb3VzIHNv dXJjZSBtaWdodCB0cnkgdG8gaW5qZWN0IGEgdmFyaWV0eSBvZiB0aGluZ3MgdmlhIGJvZ3VzCisJ CSAqIHJlc3BvbnNlcyB0byBxdWVyaWVzLiAgV2hpbGUgd2UgY2Fubm90IHByZXZlbnQgc3VjaCBz b3VyY2VzIGZyb20KKwkJICogYWZmZWN0aW5nIHRoZSBkZXN0aW5hdGlvbiBhdCByZXN0b3JlIHRp bWUsIHdlIGNhbiBibG9jayBwc3FsCisJCSAqIG1ldGEtY29tbWFuZHMgc28gdGhhdCB0aGUgY2xp ZW50IG1hY2hpbmUgdGhhdCBydW5zIHBzcWwgd2l0aCB0aGUgZHVtcAorCQkgKiBvdXRwdXQgcmVt YWlucyB1bmFmZmVjdGVkLgorCQkgKi8KKwkJZnByaW50ZihPUEYsICJcXHJlc3RyaWN0ICVzXG5c biIsIHJlc3RyaWN0X2tleSk7CisKKwkJLyoKKwkJICogV2UgdXNlZCB0byBlbWl0IFxjb25uZWN0 IHBvc3RncmVzIGhlcmUsIGJ1dCB0aGF0IHNlcnZlZCBubyBwdXJwb3NlCisJCSAqIG90aGVyIHRo YW4gdG8gYnJlYWsgdGhpbmdzIGZvciBpbnN0YWxsYXRpb25zIHdpdGhvdXQgYSBwb3N0Z3Jlcwor CQkgKiBkYXRhYmFzZS4gIEV2ZXJ5dGhpbmcgd2UncmUgcmVzdG9yaW5nIGhlcmUgaXMgYSBnbG9i YWwsIHNvIHdoaWNoZXZlcgorCQkgKiBkYXRhYmFzZSB3ZSdyZSBjb25uZWN0ZWQgdG8gYXQgdGhl IG1vbWVudCBpcyBmaW5lLgorCQkgKi8KKworCQkvKiBSZXN0b3JlIHdpbGwgbmVlZCB0byB3cml0 ZSB0byB0aGUgdGFyZ2V0IGNsdXN0ZXIgKi8KKwkJZnByaW50ZihPUEYsICJTRVQgZGVmYXVsdF90 cmFuc2FjdGlvbl9yZWFkX29ubHkgPSBvZmY7XG5cbiIpOworCisJCS8qIFJlcGxpY2F0ZSBlbmNv ZGluZyBhbmQgc3RkX3N0cmluZ3MgaW4gb3V0cHV0ICovCisJCWZwcmludGYoT1BGLCAiU0VUIGNs aWVudF9lbmNvZGluZyA9ICclcyc7XG4iLAorCQkJCXBnX2VuY29kaW5nX3RvX2NoYXIoZW5jb2Rp bmcpKTsKKwkJZnByaW50ZihPUEYsICJTRVQgc3RhbmRhcmRfY29uZm9ybWluZ19zdHJpbmdzID0g JXM7XG4iLCBzdGRfc3RyaW5ncyk7CisJCWlmIChzdHJjbXAoc3RkX3N0cmluZ3MsICJvZmYiKSA9 PSAwKQorCQkJZnByaW50ZihPUEYsICJTRVQgZXNjYXBlX3N0cmluZ193YXJuaW5nID0gb2ZmO1xu Iik7CisJCWZwcmludGYoT1BGLCAiXG4iKTsKKwl9CiAKIAlpZiAoIWRhdGFfb25seSAmJiAhc3Rh dGlzdGljc19vbmx5ICYmICFub19zY2hlbWEpCiAJewpAQCAtNjU5LDI3ICs3ODAsNDIgQEAgbWFp bihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQkJZHVtcFRhYmxlc3BhY2VzKGNvbm4pOwogCX0K IAotCS8qCi0JICogRXhpdCByZXN0cmljdGVkIG1vZGUganVzdCBiZWZvcmUgZHVtcGluZyB0aGUg ZGF0YWJhc2VzLiAgcGdfZHVtcCB3aWxsCi0JICogaGFuZGxlIGVudGVyaW5nIHJlc3RyaWN0ZWQg bW9kZSBhZ2FpbiBhcyBhcHByb3ByaWF0ZS4KLQkgKi8KLQlmcHJpbnRmKE9QRiwgIlxcdW5yZXN0 cmljdCAlc1xuXG4iLCByZXN0cmljdF9rZXkpOworCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNo TnVsbCkKKwl7CisJCS8qCisJCSAqIEV4aXQgcmVzdHJpY3RlZCBtb2RlIGp1c3QgYmVmb3JlIGR1 bXBpbmcgdGhlIGRhdGFiYXNlcy4gIHBnX2R1bXAgd2lsbAorCQkgKiBoYW5kbGUgZW50ZXJpbmcg cmVzdHJpY3RlZCBtb2RlIGFnYWluIGFzIGFwcHJvcHJpYXRlLgorCQkgKi8KKwkJZnByaW50ZihP UEYsICJcXHVucmVzdHJpY3QgJXNcblxuIiwgcmVzdHJpY3Rfa2V5KTsKKwl9CiAKIAlpZiAoIWds b2JhbHNfb25seSAmJiAhcm9sZXNfb25seSAmJiAhdGFibGVzcGFjZXNfb25seSkKLQkJZHVtcERh dGFiYXNlcyhjb25uKTsKKwkJZHVtcERhdGFiYXNlcyhjb25uLCBhcmNoRHVtcEZvcm1hdCk7CiAK LQlQUWZpbmlzaChjb25uKTsKLQotCWlmICh2ZXJib3NlKQorCWlmICh2ZXJib3NlICYmIGFyY2hE dW1wRm9ybWF0ID09IGFyY2hOdWxsKQogCQlkdW1wVGltZXN0YW1wKCJDb21wbGV0ZWQgb24iKTsK LQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNsdXN0ZXIgZHVtcCBj b21wbGV0ZVxuLS1cblxuIik7CiAKLQlpZiAoZmlsZW5hbWUpCisJaWYgKGFyY2hEdW1wRm9ybWF0 ID09IGFyY2hOdWxsKQorCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBQb3N0Z3JlU1FMIGRhdGFiYXNl IGNsdXN0ZXIgZHVtcCBjb21wbGV0ZVxuLS1cblxuIik7CisKKwlpZiAoYXJjaER1bXBGb3JtYXQg IT0gYXJjaE51bGwpCisJeworCQlSZXN0b3JlT3B0aW9ucyAqcm9wdDsKKworCQljcmVhdGVPbmVB cmNoaXZlRW50cnkoIi0tXG4tLSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNsdXN0ZXIgZHVtcCBjb21w bGV0ZVxuLS1cblxuIiwgIkNPTU1FTlQiKTsKKwkJcm9wdCA9IE5ld1Jlc3RvcmVPcHRpb25zKCk7 CisJCVNldEFyY2hpdmVPcHRpb25zKGZvdXQsICZkb3B0LCByb3B0KTsKKworCQkvKiBNYXJrIHdo aWNoIGVudHJpZXMgc2hvdWxkIGJlIG91dHB1dCAqLworCQlQcm9jZXNzQXJjaGl2ZVJlc3RvcmVP cHRpb25zKGZvdXQpOworCQlDbG9zZUFyY2hpdmUoZm91dCk7CisJfQorCWVsc2UgaWYgKGZpbGVu YW1lKQogCXsKIAkJZmNsb3NlKE9QRik7CiAKIAkJLyogc3luYyB0aGUgcmVzdWx0aW5nIGZpbGUs IGVycm9ycyBhcmUgbm90IGZhdGFsICovCi0JCWlmIChkb3N5bmMpCisJCWlmIChkb3N5bmMgJiYg KGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKSkKIAkJCSh2b2lkKSBmc3luY19mbmFtZShmaWxl bmFtZSwgZmFsc2UpOwogCX0KIApAQCAtNjkwLDEyICs4MjYsMTQgQEAgbWFpbihpbnQgYXJnYywg Y2hhciAqYXJndltdKQogc3RhdGljIHZvaWQKIGhlbHAodm9pZCkKIHsKLQlwcmludGYoXygiJXMg ZXhwb3J0cyBhIFBvc3RncmVTUUwgZGF0YWJhc2UgY2x1c3RlciBhcyBhbiBTUUwgc2NyaXB0Llxu XG4iKSwgcHJvZ25hbWUpOworCXByaW50ZihfKCIlcyBleHBvcnRzIGEgUG9zdGdyZVNRTCBkYXRh YmFzZSBjbHVzdGVyIGFzIGFuIFNRTCBzY3JpcHQgb3IgdG8gb3RoZXIgZm9ybWF0cy5cblxuIiks IHByb2duYW1lKTsKIAlwcmludGYoXygiVXNhZ2U6XG4iKSk7CiAJcHJpbnRmKF8oIiAgJXMgW09Q VElPTl0uLi5cbiIpLCBwcm9nbmFtZSk7CiAKIAlwcmludGYoXygiXG5HZW5lcmFsIG9wdGlvbnM6 XG4iKSk7CiAJcHJpbnRmKF8oIiAgLWYsIC0tZmlsZT1GSUxFTkFNRSAgICAgICAgICBvdXRwdXQg ZmlsZSBuYW1lXG4iKSk7CisJcHJpbnRmKF8oIiAgLUYsIC0tZm9ybWF0PWN8ZHx0fHAgICAgICAg ICBvdXRwdXQgZmlsZSBmb3JtYXQgKGN1c3RvbSwgZGlyZWN0b3J5LCB0YXIsXG4iCisJCQkgIiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFpbiB0ZXh0IChkZWZhdWx0KSlcbiIpKTsK IAlwcmludGYoXygiICAtdiwgLS12ZXJib3NlICAgICAgICAgICAgICAgIHZlcmJvc2UgbW9kZVxu IikpOwogCXByaW50ZihfKCIgIC1WLCAtLXZlcnNpb24gICAgICAgICAgICAgICAgb3V0cHV0IHZl cnNpb24gaW5mb3JtYXRpb24sIHRoZW4gZXhpdFxuIikpOwogCXByaW50ZihfKCIgIC0tbG9jay13 YWl0LXRpbWVvdXQ9VElNRU9VVCAgZmFpbCBhZnRlciB3YWl0aW5nIFRJTUVPVVQgZm9yIGEgdGFi bGUgbG9ja1xuIikpOwpAQCAtNzcwLDYgKzkwOCw3IEBAIHN0YXRpYyB2b2lkCiBkcm9wUm9sZXMo UEdjb25uICpjb25uKQogewogCVBRRXhwQnVmZmVyIGJ1ZiA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7 CisJUFFFeHBCdWZmZXIgZGVsUXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKIAlQR3Jlc3VsdCAg ICpyZXM7CiAJaW50CQkJaV9yb2xuYW1lOwogCWludAkJCWk7CkBAIC03OTEsNyArOTMwLDEyIEBA IGRyb3BSb2xlcyhQR2Nvbm4gKmNvbm4pCiAJaV9yb2xuYW1lID0gUFFmbnVtYmVyKHJlcywgInJv bG5hbWUiKTsKIAogCWlmIChQUW50dXBsZXMocmVzKSA+IDApCi0JCWZwcmludGYoT1BGLCAiLS1c bi0tIERyb3Agcm9sZXNcbi0tXG5cbiIpOworCXsKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFy Y2hOdWxsKQorCQkJZnByaW50ZihPUEYsICItLVxuLS0gRHJvcCByb2xlc1xuLS1cblxuIik7CisJ CWVsc2UKKwkJCWNyZWF0ZU9uZUFyY2hpdmVFbnRyeSgiLS1cbi0tIERyb3Agcm9sZXNcbi0tXG5c biIsICJDT01NRU5UIik7CisJfQogCiAJZm9yIChpID0gMDsgaSA8IFBRbnR1cGxlcyhyZXMpOyBp KyspCiAJewpAQCAtNzk5LDE1ICs5NDMsMjEgQEAgZHJvcFJvbGVzKFBHY29ubiAqY29ubikKIAog CQlyb2xlbmFtZSA9IFBRZ2V0dmFsdWUocmVzLCBpLCBpX3JvbG5hbWUpOwogCi0JCWZwcmludGYo T1BGLCAiRFJPUCBST0xFICVzJXM7XG4iLAorCQlhcHBlbmRQUUV4cEJ1ZmZlcihkZWxRcnksICJE Uk9QIFJPTEUgJXMlcztcbiIsCiAJCQkJaWZfZXhpc3RzID8gIklGIEVYSVNUUyAiIDogIiIsCiAJ CQkJZm10SWQocm9sZW5hbWUpKTsKKworCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwp CisJCQlmcHJpbnRmKE9QRiwgIiVzIiwgZGVsUXJ5LT5kYXRhKTsKKwkJZWxzZQorCQkJY3JlYXRl T25lQXJjaGl2ZUVudHJ5KGRlbFFyeS0+ZGF0YSwgImRyb3BSb2xlcyIpOwogCX0KIAogCVBRY2xl YXIocmVzKTsKIAlkZXN0cm95UFFFeHBCdWZmZXIoYnVmKTsKIAotCWZwcmludGYoT1BGLCAiXG5c biIpOworCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJZnByaW50ZihPUEYsICJc blxuIik7CiB9CiAKIC8qCkBAIC04ODksNyArMTAzOSwxMiBAQCBkdW1wUm9sZXMoUEdjb25uICpj b25uKQogCWlfaXNfY3VycmVudF91c2VyID0gUFFmbnVtYmVyKHJlcywgImlzX2N1cnJlbnRfdXNl ciIpOwogCiAJaWYgKFBRbnR1cGxlcyhyZXMpID4gMCkKLQkJZnByaW50ZihPUEYsICItLVxuLS0g Um9sZXNcbi0tXG5cbiIpOworCXsKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQor CQkJZnByaW50ZihPUEYsICItLVxuLS0gUm9sZXNcbi0tXG5cbiIpOworCQllbHNlCisJCQljcmVh dGVPbmVBcmNoaXZlRW50cnkoIi0tXG4tLSBSb2xlc1xuLS1cblxuIiwgIkNPTU1FTlQiKTsKKwl9 CiAKIAlmb3IgKGkgPSAwOyBpIDwgUFFudHVwbGVzKHJlcyk7IGkrKykKIAl7CkBAIC05OTMsNyAr MTE0OCwxMCBAQCBkdW1wUm9sZXMoUEdjb25uICpjb25uKQogCQkJCQkJCSAiUk9MRSIsIHJvbGVu YW1lLAogCQkJCQkJCSBidWYpOwogCi0JCWZwcmludGYoT1BGLCAiJXMiLCBidWYtPmRhdGEpOwor CQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCQlmcHJpbnRmKE9QRiwgIiVzIiwg YnVmLT5kYXRhKTsKKwkJZWxzZQorCQkJY3JlYXRlT25lQXJjaGl2ZUVudHJ5KGJ1Zi0+ZGF0YSwg ImR1bXBSb2xlcyIpOwogCX0KIAogCS8qCkBAIC0xMDAxLDE1ICsxMTU5LDEzIEBAIGR1bXBSb2xl cyhQR2Nvbm4gKmNvbm4pCiAJICogV2UgZG8gaXQgdGhpcyB3YXkgYmVjYXVzZSBjb25maWcgc2V0 dGluZ3MgZm9yIHJvbGVzIGNvdWxkIG1lbnRpb24gdGhlCiAJICogbmFtZXMgb2Ygb3RoZXIgcm9s ZXMuCiAJICovCi0JaWYgKFBRbnR1cGxlcyhyZXMpID4gMCkKLQkJZnByaW50ZihPUEYsICJcbi0t XG4tLSBVc2VyIENvbmZpZ3VyYXRpb25zXG4tLVxuIik7Ci0KIAlmb3IgKGkgPSAwOyBpIDwgUFFu dHVwbGVzKHJlcyk7IGkrKykKIAkJZHVtcFVzZXJDb25maWcoY29ubiwgUFFnZXR2YWx1ZShyZXMs IGksIGlfcm9sbmFtZSkpOwogCiAJUFFjbGVhcihyZXMpOwogCi0JZnByaW50ZihPUEYsICJcblxu Iik7CisJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQlmcHJpbnRmKE9QRiwgIlxu XG4iKTsKIAogCWRlc3Ryb3lQUUV4cEJ1ZmZlcihidWYpOwogfQpAQCAtMTA4OCw3ICsxMjQ0LDEy IEBAIGR1bXBSb2xlTWVtYmVyc2hpcChQR2Nvbm4gKmNvbm4pCiAJaV9zZXRfb3B0aW9uID0gUFFm bnVtYmVyKHJlcywgInNldF9vcHRpb24iKTsKIAogCWlmIChQUW50dXBsZXMocmVzKSA+IDApCi0J CWZwcmludGYoT1BGLCAiLS1cbi0tIFJvbGUgbWVtYmVyc2hpcHNcbi0tXG5cbiIpOworCXsKKwkJ aWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYsICItLVxuLS0g Um9sZSBtZW1iZXJzaGlwc1xuLS1cblxuIik7CisJCWVsc2UKKwkJCWNyZWF0ZU9uZUFyY2hpdmVF bnRyeSgiLS1cbi0tIFJvbGUgbWVtYmVyc2hpcHNcbi0tXG5cbiIsICJDT01NRU5UIik7CisJfQog CiAJLyoKIAkgKiBXZSBjYW4ndCBkdW1wIHRoZXNlIEdSQU5UIGNvbW1hbmRzIGluIGFyYml0cmFy eSBvcmRlciwgYmVjYXVzZSBhIHJvbGUKQEAgLTExNjcsNiArMTMyOCw3IEBAIGR1bXBSb2xlTWVt YmVyc2hpcChQR2Nvbm4gKmNvbm4pCiAJCQkJY2hhcgkgICAqZ3JhbnRvcjsKIAkJCQljaGFyCSAg ICpzZXRfb3B0aW9uID0gInRydWUiOwogCQkJCWJvb2wJCWZvdW5kOworCQkJCVBRRXhwQnVmZmVy IGNyZWFRcnkgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOwogCiAJCQkJLyogSWYgd2UgYWxyZWFkeSBk aWQgdGhpcyBncmFudCwgZG9uJ3QgZG8gaXQgYWdhaW4uICovCiAJCQkJaWYgKGRvbmVbaSAtIHN0 YXJ0XSkKQEAgLTEyMjMsOCArMTM4NSw4IEBAIGR1bXBSb2xlTWVtYmVyc2hpcChQR2Nvbm4gKmNv bm4pCiAKIAkJCQkvKiBHZW5lcmF0ZSB0aGUgYWN0dWFsIEdSQU5UIHN0YXRlbWVudC4gKi8KIAkJ CQlyZXNldFBRRXhwQnVmZmVyKG9wdGJ1Zik7Ci0JCQkJZnByaW50ZihPUEYsICJHUkFOVCAlcyIs IGZtdElkKHJvbGUpKTsKLQkJCQlmcHJpbnRmKE9QRiwgIiBUTyAlcyIsIGZtdElkKG1lbWJlcikp OworCQkJCWFwcGVuZFBRRXhwQnVmZmVyKGNyZWFRcnksICJHUkFOVCAlcyIsIGZtdElkKHJvbGUp KTsKKwkJCQlhcHBlbmRQUUV4cEJ1ZmZlcihjcmVhUXJ5LCAiIFRPICVzIiwgZm10SWQobWVtYmVy KSk7CiAJCQkJaWYgKCphZG1pbl9vcHRpb24gPT0gJ3QnKQogCQkJCQlhcHBlbmRQUUV4cEJ1ZmZl clN0cihvcHRidWYsICJBRE1JTiBPUFRJT04iKTsKIAkJCQlpZiAoZHVtcF9ncmFudF9vcHRpb25z KQpAQCAtMTI0NSwxMCArMTQwNywxNSBAQCBkdW1wUm9sZU1lbWJlcnNoaXAoUEdjb25uICpjb25u KQogCQkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihvcHRidWYsICJTRVQgRkFMU0UiKTsKIAkJCQl9 CiAJCQkJaWYgKG9wdGJ1Zi0+ZGF0YVswXSAhPSAnXDAnKQotCQkJCQlmcHJpbnRmKE9QRiwgIiBX SVRIICVzIiwgb3B0YnVmLT5kYXRhKTsKKwkJCQkJYXBwZW5kUFFFeHBCdWZmZXIoY3JlYVFyeSwg IiBXSVRIICVzIiwgb3B0YnVmLT5kYXRhKTsKIAkJCQlpZiAoZHVtcF9ncmFudG9ycykKLQkJCQkJ ZnByaW50ZihPUEYsICIgR1JBTlRFRCBCWSAlcyIsIGZtdElkKGdyYW50b3IpKTsKLQkJCQlmcHJp bnRmKE9QRiwgIjtcbiIpOworCQkJCQlhcHBlbmRQUUV4cEJ1ZmZlcihjcmVhUXJ5LCAiIEdSQU5U RUQgQlkgJXMiLCBmbXRJZChncmFudG9yKSk7CisJCQkJYXBwZW5kUFFFeHBCdWZmZXIoY3JlYVFy eSwgIjtcbiIpOworCisJCQkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJCQlm cHJpbnRmKE9QRiwgIiVzIiwgY3JlYVFyeS0+ZGF0YSk7CisJCQkJZWxzZQorCQkJCQljcmVhdGVP bmVBcmNoaXZlRW50cnkoY3JlYVFyeS0+ZGF0YSwgImR1bXBSb2xlTWVtYmVyc2hpcCIpOwogCQkJ fQogCQl9CiAKQEAgLTEyNjAsNyArMTQyNyw4IEBAIGR1bXBSb2xlTWVtYmVyc2hpcChQR2Nvbm4g KmNvbm4pCiAJUFFjbGVhcihyZXMpOwogCWRlc3Ryb3lQUUV4cEJ1ZmZlcihidWYpOwogCi0JZnBy aW50ZihPUEYsICJcblxuIik7CisJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQlm cHJpbnRmKE9QRiwgIlxuXG4iKTsKIH0KIAogCkBAIC0xMjg4LDcgKzE0NTYsMTIgQEAgZHVtcFJv bGVHVUNQcml2cyhQR2Nvbm4gKmNvbm4pCiAJCQkJCSAgICJPUkRFUiBCWSAxIik7CiAKIAlpZiAo UFFudHVwbGVzKHJlcykgPiAwKQotCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBSb2xlIHByaXZpbGVn ZXMgb24gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzXG4tLVxuXG4iKTsKKwl7CisJCWlmIChhcmNo RHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJCWZwcmludGYoT1BGLCAiLS1cbi0tIFJvbGUgcHJp dmlsZWdlcyBvbiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnNcbi0tXG5cbiIpOworCQllbHNlCisJ CQljcmVhdGVPbmVBcmNoaXZlRW50cnkoIi0tXG4tLSBSb2xlIHByaXZpbGVnZXMgb24gY29uZmln dXJhdGlvbiBwYXJhbWV0ZXJzXG4tLVxuXG4iLCAiQ09NTUVOVCIpOworCX0KIAogCWZvciAoaSA9 IDA7IGkgPCBQUW50dXBsZXMocmVzKTsgaSsrKQogCXsKQEAgLTEzMTIsMTQgKzE0ODUsMTkgQEAg ZHVtcFJvbGVHVUNQcml2cyhQR2Nvbm4gKmNvbm4pCiAJCQlleGl0X25pY2VseSgxKTsKIAkJfQog Ci0JCWZwcmludGYoT1BGLCAiJXMiLCBidWYtPmRhdGEpOworCQlpZiAoYXJjaER1bXBGb3JtYXQg PT0gYXJjaE51bGwpCisJCQlmcHJpbnRmKE9QRiwgIiVzIiwgYnVmLT5kYXRhKTsKKwkJZWxzZQor CQkJY3JlYXRlT25lQXJjaGl2ZUVudHJ5KGJ1Zi0+ZGF0YSwgImR1bXBSb2xlR1VDUHJpdnMiKTsK IAogCQlmcmVlKGZwYXJuYW1lKTsKIAkJZGVzdHJveVBRRXhwQnVmZmVyKGJ1Zik7CiAJfQogCiAJ UFFjbGVhcihyZXMpOwotCWZwcmludGYoT1BGLCAiXG5cbiIpOworCisJaWYgKGFyY2hEdW1wRm9y bWF0ID09IGFyY2hOdWxsKQorCQlmcHJpbnRmKE9QRiwgIlxuXG4iKTsKIH0KIAogCkBAIC0xMzMx LDYgKzE1MDksNyBAQCBkcm9wVGFibGVzcGFjZXMoUEdjb25uICpjb25uKQogewogCVBHcmVzdWx0 ICAgKnJlczsKIAlpbnQJCQlpOworCVBRRXhwQnVmZmVyIGRlbFFyeSA9IGNyZWF0ZVBRRXhwQnVm ZmVyKCk7CiAKIAkvKgogCSAqIEdldCBhbGwgdGFibGVzcGFjZXMgZXhjZXB0IGJ1aWx0LWluIG9u ZXMgKHdoaWNoIHdlIGFzc3VtZSBhcmUgbmFtZWQKQEAgLTEzNDIsMjAgKzE1MjEsMzEgQEAgZHJv cFRhYmxlc3BhY2VzKFBHY29ubiAqY29ubikKIAkJCQkJICAgIk9SREVSIEJZIDEiKTsKIAogCWlm IChQUW50dXBsZXMocmVzKSA+IDApCi0JCWZwcmludGYoT1BGLCAiLS1cbi0tIERyb3AgdGFibGVz cGFjZXNcbi0tXG5cbiIpOworCXsKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQor CQkJZnByaW50ZihPUEYsICItLVxuLS0gRHJvcCB0YWJsZXNwYWNlc1xuLS1cblxuIik7CisJCWVs c2UKKwkJCWNyZWF0ZU9uZUFyY2hpdmVFbnRyeSgiLS1cbi0tIERyb3AgdGFibGVzcGFjZXNcbi0t XG5cbiIsICJDT01NRU5UIik7CisJfQogCiAJZm9yIChpID0gMDsgaSA8IFBRbnR1cGxlcyhyZXMp OyBpKyspCiAJewogCQljaGFyCSAgICpzcGNuYW1lID0gUFFnZXR2YWx1ZShyZXMsIGksIDApOwog Ci0JCWZwcmludGYoT1BGLCAiRFJPUCBUQUJMRVNQQUNFICVzJXM7XG4iLAorCQlhcHBlbmRQUUV4 cEJ1ZmZlcihkZWxRcnksICJEUk9QIFRBQkxFU1BBQ0UgJXMlcztcbiIsCiAJCQkJaWZfZXhpc3Rz ID8gIklGIEVYSVNUUyAiIDogIiIsCiAJCQkJZm10SWQoc3BjbmFtZSkpOworCisJCWlmIChhcmNo RHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJCWZwcmludGYoT1BGLCAiJXMiLCBkZWxRcnktPmRh dGEpOworCQllbHNlCisJCQljcmVhdGVPbmVBcmNoaXZlRW50cnkoZGVsUXJ5LT5kYXRhLCAiZHJv cFRhYmxlc3BhY2VzIik7CiAJfQogCiAJUFFjbGVhcihyZXMpOwogCi0JZnByaW50ZihPUEYsICJc blxuIik7CisJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQlmcHJpbnRmKE9QRiwg IlxuXG4iKTsKIH0KIAogLyoKQEAgLTEzODIsNyArMTU3MiwxMiBAQCBkdW1wVGFibGVzcGFjZXMo UEdjb25uICpjb25uKQogCQkJCQkgICAiT1JERVIgQlkgMSIpOwogCiAJaWYgKFBRbnR1cGxlcyhy ZXMpID4gMCkKLQkJZnByaW50ZihPUEYsICItLVxuLS0gVGFibGVzcGFjZXNcbi0tXG5cbiIpOwor CXsKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYsICIt LVxuLS0gVGFibGVzcGFjZXNcbi0tXG5cbiIpOworCQllbHNlCisJCQljcmVhdGVPbmVBcmNoaXZl RW50cnkoIi0tXG4tLSBUYWJsZXNwYWNlc1xuLS1cblxuIiwgIkNPTU1FTlQiKTsKKwl9CiAKIAlm b3IgKGkgPSAwOyBpIDwgUFFudHVwbGVzKHJlcyk7IGkrKykKIAl7CkBAIC0xNDUxLDE0ICsxNjQ2 LDE5IEBAIGR1bXBUYWJsZXNwYWNlcyhQR2Nvbm4gKmNvbm4pCiAJCQkJCQkJICJUQUJMRVNQQUNF Iiwgc3BjbmFtZSwKIAkJCQkJCQkgYnVmKTsKIAotCQlmcHJpbnRmKE9QRiwgIiVzIiwgYnVmLT5k YXRhKTsKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYs ICIlcyIsIGJ1Zi0+ZGF0YSk7CisJCWVsc2UKKwkJCWNyZWF0ZU9uZUFyY2hpdmVFbnRyeShidWYt PmRhdGEsICJkdW1wVGFibGVzcGFjZXMiKTsKIAogCQlmcmVlKGZzcGNuYW1lKTsKIAkJZGVzdHJv eVBRRXhwQnVmZmVyKGJ1Zik7CiAJfQogCiAJUFFjbGVhcihyZXMpOwotCWZwcmludGYoT1BGLCAi XG5cbiIpOworCisJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQlmcHJpbnRmKE9Q RiwgIlxuXG4iKTsKIH0KIAogCkBAIC0xNDgyLDcgKzE2ODIsMTIgQEAgZHJvcERCcyhQR2Nvbm4g KmNvbm4pCiAJCQkJCSAgICJPUkRFUiBCWSBkYXRuYW1lIik7CiAKIAlpZiAoUFFudHVwbGVzKHJl cykgPiAwKQotCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBEcm9wIGRhdGFiYXNlcyAoZXhjZXB0IHBv c3RncmVzIGFuZCB0ZW1wbGF0ZTEpXG4tLVxuXG4iKTsKKwl7CisJCWlmIChhcmNoRHVtcEZvcm1h dCA9PSBhcmNoTnVsbCkKKwkJCWZwcmludGYoT1BGLCAiLS1cbi0tIERyb3AgZGF0YWJhc2VzIChl eGNlcHQgcG9zdGdyZXMgYW5kIHRlbXBsYXRlMSlcbi0tXG5cbiIpOworCQllbHNlCisJCQljcmVh dGVPbmVBcmNoaXZlRW50cnkoIi0tXG4tLSBEcm9wIGRhdGFiYXNlcyAoZXhjZXB0IHBvc3RncmVz IGFuZCB0ZW1wbGF0ZTEpXG4tLVxuXG4iLCAiQ09NTUVOVCIpOworCX0KIAogCWZvciAoaSA9IDA7 IGkgPCBQUW50dXBsZXMocmVzKTsgaSsrKQogCXsKQEAgLTE0OTcsMTUgKzE3MDIsMjMgQEAgZHJv cERCcyhQR2Nvbm4gKmNvbm4pCiAJCQlzdHJjbXAoZGJuYW1lLCAidGVtcGxhdGUwIikgIT0gMCAm JgogCQkJc3RyY21wKGRibmFtZSwgInBvc3RncmVzIikgIT0gMCkKIAkJewotCQkJZnByaW50ZihP UEYsICJEUk9QIERBVEFCQVNFICVzJXM7XG4iLAorCQkJUFFFeHBCdWZmZXIgZGVsUXJ5ID0gY3Jl YXRlUFFFeHBCdWZmZXIoKTsKKworCQkJYXBwZW5kUFFFeHBCdWZmZXIoZGVsUXJ5LCAiRFJPUCBE QVRBQkFTRSAlcyVzO1xuIiwKIAkJCQkJaWZfZXhpc3RzID8gIklGIEVYSVNUUyAiIDogIiIsCiAJ CQkJCWZtdElkKGRibmFtZSkpOworCisJCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwp CisJCQkJZnByaW50ZihPUEYsICIlcyIsIGRlbFFyeS0+ZGF0YSk7CisJCQllbHNlCisJCQkJY3Jl YXRlT25lQXJjaGl2ZUVudHJ5KGRlbFFyeS0+ZGF0YSwgIkRST1BfREFUQUJBU0UiKTsKIAkJfQog CX0KIAogCVBRY2xlYXIocmVzKTsKIAotCWZwcmludGYoT1BGLCAiXG5cbiIpOworCWlmIChhcmNo RHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJZnByaW50ZihPUEYsICJcblxuIik7CiB9CiAKIApA QCAtMTUzMiw3ICsxNzQ1LDE4IEBAIGR1bXBVc2VyQ29uZmlnKFBHY29ubiAqY29ubiwgY29uc3Qg Y2hhciAqdXNlcm5hbWUpCiAJCWNoYXIJICAgKnNhbml0aXplZDsKIAogCQlzYW5pdGl6ZWQgPSBz YW5pdGl6ZV9saW5lKHVzZXJuYW1lLCB0cnVlKTsKLQkJZnByaW50ZihPUEYsICJcbi0tXG4tLSBV c2VyIENvbmZpZyBcIiVzXCJcbi0tXG5cbiIsIHNhbml0aXplZCk7CisKKwkJaWYgKGFyY2hEdW1w Rm9ybWF0ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYsICJcbi0tXG4tLSBVc2VyIENvbmZp ZyBcIiVzXCJcbi0tXG5cbiIsIHNhbml0aXplZCk7CisJCWVsc2UKKwkJeworCQkJUFFFeHBCdWZm ZXIJcXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKworCQkJYXBwZW5kUFFFeHBCdWZmZXIocXJ5 LCAiXG4tLVxuLS0gVXNlciBDb25maWcgXCIlc1wiXG4tLVxuXG4iLCBzYW5pdGl6ZWQpOworCQkJ Y3JlYXRlT25lQXJjaGl2ZUVudHJ5KHFyeS0+ZGF0YSwgIkNPTU1FTlQiKTsKKwkJCWRlc3Ryb3lQ UUV4cEJ1ZmZlcihxcnkpOworCQl9CisKIAkJZnJlZShzYW5pdGl6ZWQpOwogCX0KIApAQCAtMTU0 Miw3ICsxNzY2LDExIEBAIGR1bXBVc2VyQ29uZmlnKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAq dXNlcm5hbWUpCiAJCW1ha2VBbHRlckNvbmZpZ0NvbW1hbmQoY29ubiwgUFFnZXR2YWx1ZShyZXMs IGksIDApLAogCQkJCQkJCSAgICJST0xFIiwgdXNlcm5hbWUsIE5VTEwsIE5VTEwsCiAJCQkJCQkJ ICAgYnVmKTsKLQkJZnByaW50ZihPUEYsICIlcyIsIGJ1Zi0+ZGF0YSk7CisKKwkJaWYgKGFyY2hE dW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYsICIlcyIsIGJ1Zi0+ZGF0YSk7 CisJCWVsc2UKKwkJCWNyZWF0ZU9uZUFyY2hpdmVFbnRyeShidWYtPmRhdGEsICJkdW1wVXNlckNv bmZpZyIpOwogCX0KIAogCVBRY2xlYXIocmVzKTsKQEAgLTE2MDgsMTAgKzE4MzYsMTMgQEAgZXhw YW5kX2RibmFtZV9wYXR0ZXJucyhQR2Nvbm4gKmNvbm4sCiAgKiBEdW1wIGNvbnRlbnRzIG9mIGRh dGFiYXNlcy4KICAqLwogc3RhdGljIHZvaWQKLWR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKQor ZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4sIEFyY2hpdmVGb3JtYXQgYXJjaER1bXBGb3JtYXQp CiB7CiAJUEdyZXN1bHQgICAqcmVzOwogCWludAkJCWk7CisJY2hhcgkJZGJfc3ViZGlyW01BWFBH UEFUSF07CisJY2hhcgkJZGJmaWxlcGF0aFtNQVhQR1BBVEhdOworCUZJTEUJICAgKm1hcF9maWxl ID0gTlVMTDsKIAogCS8qCiAJICogU2tpcCBkYXRhYmFzZXMgbWFya2VkIG5vdCBkYXRhbGxvd2Nv bm4sIHNpbmNlIHdlJ2QgYmUgdW5hYmxlIHRvIGNvbm5lY3QKQEAgLTE2MjUsMTkgKzE4NTYsNDgg QEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiAJICogZG9lc24ndCBoYXZlIHNvbWUgZmFp bHVyZSBtb2RlIHdpdGggLS1jbGVhbi4KIAkgKi8KIAlyZXMgPSBleGVjdXRlUXVlcnkoY29ubiwK LQkJCQkJICAgIlNFTEVDVCBkYXRuYW1lICIKKwkJCQkJICAgIlNFTEVDVCBkYXRuYW1lLCBvaWQg IgogCQkJCQkgICAiRlJPTSBwZ19kYXRhYmFzZSBkICIKIAkJCQkJICAgIldIRVJFIGRhdGFsbG93 Y29ubiBBTkQgZGF0Y29ubmxpbWl0ICE9IC0yICIKIAkJCQkJICAgIk9SREVSIEJZIChkYXRuYW1l IDw+ICd0ZW1wbGF0ZTEnKSwgZGF0bmFtZSIpOwogCiAJaWYgKFBRbnR1cGxlcyhyZXMpID4gMCkK LQkJZnByaW50ZihPUEYsICItLVxuLS0gRGF0YWJhc2VzXG4tLVxuXG4iKTsKKwl7CisJCWlmIChh cmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJCWZwcmludGYoT1BGLCAiLS1cbi0tIERhdGFi YXNlc1xuLS1cblxuIik7CisJCWVsc2UKKwkJCWNyZWF0ZU9uZUFyY2hpdmVFbnRyeSgiLS1cbi0t IERhdGFiYXNlc1xuLS1cblxuIiwgIkNPTU1FTlQiKTsKKwl9CisKKwkvKgorCSAqIElmIGRpcmVj dG9yeS90YXIvY3VzdG9tIGZvcm1hdCBpcyBzcGVjaWZpZWQsIGNyZWF0ZSBhIHN1YmRpcmVjdG9y eQorCSAqIHVuZGVyIHRoZSBtYWluIGRpcmVjdG9yeSBhbmQgZWFjaCBkYXRhYmFzZSBkdW1wIGZp bGUgb3Igc3ViZGlyZWN0b3J5CisJICogd2lsbCBiZSBjcmVhdGVkIGluIHRoYXQgc3ViZGlyZWN0 b3J5IGJ5IHBnX2R1bXAuCisJICovCisgICBpZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51bGwp CisgICB7CisJICAgY2hhciAgICAgICAgbWFwX2ZpbGVfcGF0aFtNQVhQR1BBVEhdOworCisJICAg c25wcmludGYoZGJfc3ViZGlyLCBNQVhQR1BBVEgsICIlcy9kYXRhYmFzZXMiLCBmaWxlbmFtZSk7 CisKKwkgICAvKiBDcmVhdGUgYSBzdWJkaXJlY3Rvcnkgd2l0aCAnZGF0YWJhc2VzJyBuYW1lIHVu ZGVyIG1haW4gZGlyZWN0b3J5LiAqLworCSAgIGlmIChta2RpcihkYl9zdWJkaXIsIHBnX2Rpcl9j cmVhdGVfbW9kZSkgIT0gMCkKKwkJICAgcGdfZmF0YWwoImNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0 b3J5IFwiJXNcIjogJW0iLCBkYl9zdWJkaXIpOworCisJICAgc25wcmludGYobWFwX2ZpbGVfcGF0 aCwgTUFYUEdQQVRILCAiJXMvbWFwLmRhdCIsIGZpbGVuYW1lKTsKKworCSAgIC8qIENyZWF0ZSBh IG1hcCBmaWxlICh0byBzdG9yZSBkYm9pZCBhbmQgZGJuYW1lKSAqLworCSAgIG1hcF9maWxlID0g Zm9wZW4obWFwX2ZpbGVfcGF0aCwgUEdfQklOQVJZX1cpOworCSAgIGlmICghbWFwX2ZpbGUpCisJ CSAgIHBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIjogJW0iLCBtYXBfZmlsZV9w YXRoKTsKKyAgIH0KIAogCWZvciAoaSA9IDA7IGkgPCBQUW50dXBsZXMocmVzKTsgaSsrKQogCXsK IAkJY2hhcgkgICAqZGJuYW1lID0gUFFnZXR2YWx1ZShyZXMsIGksIDApOwogCQljaGFyCSAgICpz YW5pdGl6ZWQ7Ci0JCWNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzOworCQljaGFyICAgICAgICpvaWQg PSBQUWdldHZhbHVlKHJlcywgaSwgMSk7CisJCWNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzID0gIiI7 CiAJCWludAkJCXJldDsKIAogCQkvKiBTa2lwIHRlbXBsYXRlMCwgZXZlbiBpZiBpdCdzIG5vdCBt YXJrZWQgIWRhdGFsbG93Y29ubi4gKi8KQEAgLTE2NTQsNyArMTkxNCwxOCBAQCBkdW1wRGF0YWJh c2VzKFBHY29ubiAqY29ubikKIAkJcGdfbG9nX2luZm8oImR1bXBpbmcgZGF0YWJhc2UgXCIlc1wi IiwgZGJuYW1lKTsKIAogCQlzYW5pdGl6ZWQgPSBzYW5pdGl6ZV9saW5lKGRibmFtZSwgdHJ1ZSk7 Ci0JCWZwcmludGYoT1BGLCAiLS1cbi0tIERhdGFiYXNlIFwiJXNcIiBkdW1wXG4tLVxuXG4iLCBz YW5pdGl6ZWQpOworCisJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJCWZwcmlu dGYoT1BGLCAiLS1cbi0tIERhdGFiYXNlIFwiJXNcIiBkdW1wXG4tLVxuXG4iLCBzYW5pdGl6ZWQp OworCQllbHNlCisJCXsKKwkJCVBRRXhwQnVmZmVyIHFyeSA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7 CisKKwkJCWFwcGVuZFBRRXhwQnVmZmVyKHFyeSwgIi0tXG4tLSBEYXRhYmFzZSBcIiVzXCIgZHVt cFxuLS1cblxuIiwgc2FuaXRpemVkKTsKKwkJCWNyZWF0ZU9uZUFyY2hpdmVFbnRyeShxcnktPmRh dGEsICJDT01NRU5UIik7CisJCQlkZXN0cm95UFFFeHBCdWZmZXIocXJ5KTsKKwkJfQorCiAJCWZy ZWUoc2FuaXRpemVkKTsKIAogCQkvKgpAQCAtMTY2OSwyNCArMTk0MCw0NiBAQCBkdW1wRGF0YWJh c2VzKFBHY29ubiAqY29ubikKIAkJewogCQkJaWYgKG91dHB1dF9jbGVhbikKIAkJCQljcmVhdGVf b3B0cyA9ICItLWNsZWFuIC0tY3JlYXRlIjsKKwkJCS8qIFNpbmNlIHBnX2R1bXAgd29uJ3QgZW1p dCBhIFxjb25uZWN0IGNvbW1hbmQsIHdlIG11c3QgKi8KKwkJCWVsc2UgaWYgKGFyY2hEdW1wRm9y bWF0ID09IGFyY2hOdWxsKQorCQkJCWZwcmludGYoT1BGLCAiXFxjb25uZWN0ICVzXG5cbiIsIGRi bmFtZSk7CiAJCQllbHNlCiAJCQl7Ci0JCQkJY3JlYXRlX29wdHMgPSAiIjsKLQkJCQkvKiBTaW5j ZSBwZ19kdW1wIHdvbid0IGVtaXQgYSBcY29ubmVjdCBjb21tYW5kLCB3ZSBtdXN0ICovCi0JCQkJ ZnByaW50ZihPUEYsICJcXGNvbm5lY3QgJXNcblxuIiwgZGJuYW1lKTsKKwkJCQlQUUV4cEJ1ZmZl cglxcnkgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOworCisJCQkJYXBwZW5kUFFFeHBCdWZmZXIocXJ5 LCAiXFxjb25uZWN0ICVzXG5cbiIsIGRibmFtZSk7CisJCQkJY3JlYXRlT25lQXJjaGl2ZUVudHJ5 KHFyeS0+ZGF0YSwgIkNPTk5FQ1QiKTsKKwkJCQlkZXN0cm95UFFFeHBCdWZmZXIocXJ5KTsKIAkJ CX0KIAkJfQogCQllbHNlCiAJCQljcmVhdGVfb3B0cyA9ICItLWNyZWF0ZSI7CiAKLQkJaWYgKGZp bGVuYW1lKQorCQlpZiAoZmlsZW5hbWUgJiYgYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCiAJ CQlmY2xvc2UoT1BGKTsKIAotCQlyZXQgPSBydW5QZ0R1bXAoZGJuYW1lLCBjcmVhdGVfb3B0cyk7 CisJCS8qCisJCSAqIElmIHRoaXMgaXMgbm90IGEgcGxhaW4gZm9ybWF0IGR1bXAsIHRoZW4gYXBw ZW5kIGRib2lkIGFuZCBkYm5hbWUgdG8KKwkJICogdGhlIG1hcC5kYXQgZmlsZS4KKwkJICovCisJ CWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwkJeworCQkJaWYgKGFyY2hEdW1wRm9y bWF0ID09IGFyY2hDdXN0b20pCisJCQkJc25wcmludGYoZGJmaWxlcGF0aCwgTUFYUEdQQVRILCAi XCIlc1wiL1wiJXNcIi5kbXAiLCBkYl9zdWJkaXIsIG9pZCk7CisJCQllbHNlIGlmIChhcmNoRHVt cEZvcm1hdCA9PSBhcmNoVGFyKQorCQkJCXNucHJpbnRmKGRiZmlsZXBhdGgsIE1BWFBHUEFUSCwg IlwiJXNcIi9cIiVzXCIudGFyIiwgZGJfc3ViZGlyLCBvaWQpOworCQkJZWxzZQorCQkJCXNucHJp bnRmKGRiZmlsZXBhdGgsIE1BWFBHUEFUSCwgIlwiJXNcIi9cIiVzXCIiLCBkYl9zdWJkaXIsIG9p ZCk7CisKKwkJCS8qIFB1dCBvbmUgbGluZSBlbnRyeSBmb3IgZGJvaWQgYW5kIGRibmFtZSBpbiBt YXAgZmlsZS4gKi8KKwkJCWZwcmludGYobWFwX2ZpbGUsICIlcyAlc1xuIiwgb2lkLCBkYm5hbWUp OworCQl9CisKKwkJcmV0ID0gcnVuUGdEdW1wKGRibmFtZSwgY3JlYXRlX29wdHMsIGRiZmlsZXBh dGgsIGFyY2hEdW1wRm9ybWF0KTsKIAkJaWYgKHJldCAhPSAwKQogCQkJcGdfZmF0YWwoInBnX2R1 bXAgZmFpbGVkIG9uIGRhdGFiYXNlIFwiJXNcIiwgZXhpdGluZyIsIGRibmFtZSk7CiAKLQkJaWYg KGZpbGVuYW1lKQorCQlpZiAoZmlsZW5hbWUgJiYgYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwp CiAJCXsKIAkJCU9QRiA9IGZvcGVuKGZpbGVuYW1lLCBQR19CSU5BUllfQSk7CiAJCQlpZiAoIU9Q RikKQEAgLTE2OTUsNiArMTk4OCwxMCBAQCBkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubikKIAkJ fQogCX0KIAorCS8qIENsb3NlIG1hcCBmaWxlICovCisJaWYgKGFyY2hEdW1wRm9ybWF0ICE9IGFy Y2hOdWxsKQorCQlmY2xvc2UobWFwX2ZpbGUpOworCiAJUFFjbGVhcihyZXMpOwogfQogCkBAIC0x NzA0LDcgKzIwMDEsOCBAQCBkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubikKICAqIFJ1biBwZ19k dW1wIG9uIGRibmFtZSwgd2l0aCBzcGVjaWZpZWQgb3B0aW9ucy4KICAqLwogc3RhdGljIGludAot cnVuUGdEdW1wKGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqY3JlYXRlX29wdHMpCity dW5QZ0R1bXAoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjcmVhdGVfb3B0cywgY2hh ciAqZGJmaWxlLAorCQkgIEFyY2hpdmVGb3JtYXQgYXJjaER1bXBGb3JtYXQpCiB7CiAJUFFFeHBC dWZmZXJEYXRhIGNvbm5zdHJidWY7CiAJUFFFeHBCdWZmZXJEYXRhIGNtZDsKQEAgLTE3MTMsMTcg KzIwMTEsMzYgQEAgcnVuUGdEdW1wKGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqY3Jl YXRlX29wdHMpCiAJaW5pdFBRRXhwQnVmZmVyKCZjb25uc3RyYnVmKTsKIAlpbml0UFFFeHBCdWZm ZXIoJmNtZCk7CiAKLQlwcmludGZQUUV4cEJ1ZmZlcigmY21kLCAiXCIlc1wiICVzICVzIiwgcGdf ZHVtcF9iaW4sCi0JCQkJCSAgcGdkdW1wb3B0cy0+ZGF0YSwgY3JlYXRlX29wdHMpOwotCiAJLyoK LQkgKiBJZiB3ZSBoYXZlIGEgZmlsZW5hbWUsIHVzZSB0aGUgdW5kb2N1bWVudGVkIHBsYWluLWFw cGVuZCBwZ19kdW1wCi0JICogZm9ybWF0LgorCSAqIElmIHRoaXMgaXMgbm90IGEgcGxhaW4gZm9y bWF0IGR1bXAsIHRoZW4gYXBwZW5kIGZpbGUgbmFtZSBhbmQgZHVtcAorCSAqIGZvcm1hdCB0byB0 aGUgcGdfZHVtcCBjb21tYW5kIHRvIGdldCBhcmNoaXZlIGR1bXAuCiAJICovCi0JaWYgKGZpbGVu YW1lKQotCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiIC1GYSAiKTsKKwlpZiAoYXJjaER1 bXBGb3JtYXQgIT0gYXJjaE51bGwpCisJeworCQlwcmludGZQUUV4cEJ1ZmZlcigmY21kLCAiXCIl c1wiIC1mICVzICVzIiwgcGdfZHVtcF9iaW4sCisJCQkJCQkgIGRiZmlsZSwgY3JlYXRlX29wdHMp OworCisJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoRGlyZWN0b3J5KQorCQkJYXBwZW5kUFFF eHBCdWZmZXJTdHIoJmNtZCwgIiAgLS1mb3JtYXQ9ZGlyZWN0b3J5ICIpOworCQllbHNlIGlmIChh cmNoRHVtcEZvcm1hdCA9PSBhcmNoQ3VzdG9tKQorCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNt ZCwgIiAgLS1mb3JtYXQ9Y3VzdG9tICIpOworCQllbHNlIGlmIChhcmNoRHVtcEZvcm1hdCA9PSBh cmNoVGFyKQorCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNtZCwgIiAgLS1mb3JtYXQ9dGFyICIp OworCX0KIAllbHNlCi0JCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgLUZwICIpOworCXsK KwkJcHJpbnRmUFFFeHBCdWZmZXIoJmNtZCwgIlwiJXNcIiAlcyAlcyIsIHBnX2R1bXBfYmluLAor CQkJCQkJICBwZ2R1bXBvcHRzLT5kYXRhLCBjcmVhdGVfb3B0cyk7CisKKwkJLyoKKwkJICogSWYg d2UgaGF2ZSBhIGZpbGVuYW1lLCB1c2UgdGhlIHVuZG9jdW1lbnRlZCBwbGFpbi1hcHBlbmQgcGdf ZHVtcAorCQkgKiBmb3JtYXQuCisJCSAqLworCQlpZiAoZmlsZW5hbWUpCisJCQlhcHBlbmRQUUV4 cEJ1ZmZlclN0cigmY21kLCAiIC1GYSAiKTsKKwkJZWxzZQorCQkJYXBwZW5kUFFFeHBCdWZmZXJT dHIoJmNtZCwgIiAtRnAgIik7CisJfQogCiAJLyoKIAkgKiBBcHBlbmQgdGhlIGRhdGFiYXNlIG5h bWUgdG8gdGhlIGFscmVhZHktY29uc3RydWN0ZWQgc3RlbSBvZiBjb25uZWN0aW9uCkBAIC0xODY4 LDMgKzIxODUsNjYgQEAgcmVhZF9kdW1wYWxsX2ZpbHRlcnMoY29uc3QgY2hhciAqZmlsZW5hbWUs IFNpbXBsZVN0cmluZ0xpc3QgKnBhdHRlcm4pCiAKIAlmaWx0ZXJfZnJlZSgmZnN0YXRlKTsKIH0K KworLyoKKyAqIHBhcnNlRHVtcEZvcm1hdAorICoKKyAqIFRoaXMgd2lsbCB2YWxpZGF0ZSBkdW1w IGZvcm1hdHMuCisgKi8KK3N0YXRpYyBBcmNoaXZlRm9ybWF0CitwYXJzZUR1bXBGb3JtYXQoY29u c3QgY2hhciAqZm9ybWF0KQoreworCUFyY2hpdmVGb3JtYXQgYXJjaER1bXBGb3JtYXQ7CisKKwlp ZiAocGdfc3RyY2FzZWNtcChmb3JtYXQsICJjIikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBh cmNoQ3VzdG9tOworCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAiY3VzdG9tIikgPT0g MCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoQ3VzdG9tOworCWVsc2UgaWYgKHBnX3N0cmNhc2Vj bXAoZm9ybWF0LCAiZCIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0gYXJjaERpcmVjdG9yeTsK KwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgImRpcmVjdG9yeSIpID09IDApCisJCWFy Y2hEdW1wRm9ybWF0ID0gYXJjaERpcmVjdG9yeTsKKwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZv cm1hdCwgInAiKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hOdWxsOworCWVsc2UgaWYg KHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAicGxhaW4iKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9 IGFyY2hOdWxsOworCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAidCIpID09IDApCisJ CWFyY2hEdW1wRm9ybWF0ID0gYXJjaFRhcjsKKwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1h dCwgInRhciIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0gYXJjaFRhcjsKKwllbHNlCisJCXBn X2ZhdGFsKCJ1bnJlY29nbml6ZWQgb3V0cHV0IGZvcm1hdCBcIiVzXCI7IHBsZWFzZSBzcGVjaWZ5 IFwiY1wiLCBcImRcIiwgXCJwXCIsIG9yIFwidFwiIiwKKwkJCQkgZm9ybWF0KTsKKworCXJldHVy biBhcmNoRHVtcEZvcm1hdDsKK30KKworLyoKKyAqIGNyZWF0ZUR1bXBJZAorICoKKyAqIFRoaXMg d2lsbCByZXR1cm4gbmV4dCBsYXN0IHVzZWQgb2lkLgorICovCitzdGF0aWMgaW50CitjcmVhdGVE dW1wSWQodm9pZCkKK3sKKwlyZXR1cm4gKytkdW1wSWRWYWw7Cit9CisKKy8qCisgKiBjcmVhdGVP bmVBcmNoaXZlRW50cnkKKyAqCisgKiBUaGlzIGNyZWF0ZXMgb25lIGFyY2hpdmUgZW50cnkgYmFz ZWQgb24gZm9ybWF0LgorICovCitzdGF0aWMgdm9pZAorY3JlYXRlT25lQXJjaGl2ZUVudHJ5KGNv bnN0IGNoYXIgKnF1ZXJ5LCBjb25zdCBjaGFyICp0YWcpCit7CisJQXNzZXJ0KGZvdXQgIT0gTlVM TCk7CisKKwlBcmNoaXZlRW50cnkoZm91dCwKKwkJCW5pbENhdGFsb2dJZCwgLyogY2F0YWxvZyBJ RCAqLworCQkJY3JlYXRlRHVtcElkKCksIC8qIGR1bXAgSUQgKi8KKwkJCUFSQ0hJVkVfT1BUUygu dGFnID0gdGFnLAorCQkJCS5kZXNjcmlwdGlvbiA9IHRhZywKKwkJCQkuc2VjdGlvbiA9IFNFQ1RJ T05fUFJFX0RBVEEsCisJCQkJLmNyZWF0ZVN0bXQgPSBxdWVyeSkpOworfQpkaWZmIC0tZ2l0IGEv c3JjL2Jpbi9wZ19kdW1wL3BnX3Jlc3RvcmUuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19yZXN0b3Jl LmMKaW5kZXggYzk3NzYzMDZjNWMuLmVhOWY2NDYzN2VhIDEwMDY0NAotLS0gYS9zcmMvYmluL3Bn X2R1bXAvcGdfcmVzdG9yZS5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19yZXN0b3JlLmMKQEAg LTIsNyArMiw3IEBACiAgKgogICogcGdfcmVzdG9yZS5jCiAgKglwZ19yZXN0b3JlIGlzIGFuIHV0 aWxpdHkgZXh0cmFjdGluZyBwb3N0Z3JlcyBkYXRhYmFzZSBkZWZpbml0aW9ucwotICoJZnJvbSBh IGJhY2t1cCBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcCB1c2luZyB0aGUgYXJjaGl2ZXIKKyAq CWZyb20gYSBiYWNrdXAgYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXAvcGdfZHVtcGFsbCB1c2lu ZyB0aGUgYXJjaGl2ZXIKICAqCWludGVyZmFjZS4KICAqCiAgKglwZ19yZXN0b3JlIHdpbGwgcmVh ZCB0aGUgYmFja3VwIGFyY2hpdmUgYW5kCkBAIC00MSwzMSArNDEsNjEgQEAKICNpbmNsdWRlICJw b3N0Z3Jlc19mZS5oIgogCiAjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5o PgogI2lmZGVmIEhBVkVfVEVSTUlPU19ICiAjaW5jbHVkZSA8dGVybWlvcy5oPgogI2VuZGlmCiAK KyNpbmNsdWRlICJjb21tb24vc3RyaW5nLmgiCisjaW5jbHVkZSAiY29ubmVjdGRiLmgiCiAjaW5j bHVkZSAiZHVtcHV0aWxzLmgiCiAjaW5jbHVkZSAiZmVfdXRpbHMvb3B0aW9uX3V0aWxzLmgiCisj aW5jbHVkZSAiZmVfdXRpbHMvc3RyaW5nX3V0aWxzLmgiCiAjaW5jbHVkZSAiZmlsdGVyLmgiCiAj aW5jbHVkZSAiZ2V0b3B0X2xvbmcuaCIKICNpbmNsdWRlICJwYXJhbGxlbC5oIgogI2luY2x1ZGUg InBnX2JhY2t1cF91dGlscy5oIgogCisKIHN0YXRpYyB2b2lkIHVzYWdlKGNvbnN0IGNoYXIgKnBy b2duYW1lKTsKIHN0YXRpYyB2b2lkIHJlYWRfcmVzdG9yZV9maWx0ZXJzKGNvbnN0IGNoYXIgKmZp bGVuYW1lLCBSZXN0b3JlT3B0aW9ucyAqb3B0cyk7CitzdGF0aWMgYm9vbCBmaWxlX2V4aXN0c19p bl9kaXJlY3RvcnkoY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICpmaWxlbmFtZSk7CitzdGF0 aWMgaW50CXJlc3RvcmVfb25lX2RhdGFiYXNlKGNvbnN0IGNoYXIgKmlucHV0RmlsZVNwZWMsIFJl c3RvcmVPcHRpb25zICpvcHRzLAorCQkJCQkJCQkgaW50IG51bVdvcmtlcnMsIGJvb2wgYXBwZW5k X2RhdGEsIGludCBudW0sCisJCQkJCQkJCSBib29sIGdsb2JhbHNfb25seSk7CitzdGF0aWMgaW50 IHJlc3RvcmVfZ2xvYmFsX29iamVjdHMoY29uc3QgY2hhciAqaW5wdXRGaWxlU3BlYywKKwkJUmVz dG9yZU9wdGlvbnMgKm9wdHMsIGludCBudW1Xb3JrZXJzLCBib29sIGFwcGVuZF9kYXRhLAorCQlp bnQgbnVtLCBib29sIGdsb2JhbHNfb25seSk7CitzdGF0aWMgaW50CXJlc3RvcmVfYWxsX2RhdGFi YXNlcyhjb25zdCBjaGFyICppbnB1dEZpbGVTcGVjLAorCQlTaW1wbGVTdHJpbmdMaXN0IGRiX2V4 Y2x1ZGVfcGF0dGVybnMsIFJlc3RvcmVPcHRpb25zICpvcHRzLCBpbnQgbnVtV29ya2Vycyk7Citz dGF0aWMgaW50CWdldF9kYm5hbWVzX2xpc3RfdG9fcmVzdG9yZShQR2Nvbm4gKmNvbm4sCisJCQkJ CQkJCQkJU2ltcGxlUHRyTGlzdCAqZGJuYW1lX29pZF9saXN0LAorCQkJCQkJCQkJCVNpbXBsZVN0 cmluZ0xpc3QgZGJfZXhjbHVkZV9wYXR0ZXJucyk7CitzdGF0aWMgaW50CWdldF9kYm5hbWVfb2lk X2xpc3RfZnJvbV9tZmlsZShjb25zdCBjaGFyICpkdW1wZGlycGF0aCwKKwkJCQkJCQkJCQkgICBT aW1wbGVQdHJMaXN0ICpkYm5hbWVfb2lkX2xpc3QpOworCisvKgorICogU3RvcmVzIGEgZGF0YWJh c2UgT0lEIGFuZCB0aGUgY29ycmVzcG9uZGluZyBuYW1lLgorICovCit0eXBlZGVmIHN0cnVjdCBE Yk9pZE5hbWUKK3sKKwlPaWQJCQlvaWQ7CisJY2hhcgkJc3RyW0ZMRVhJQkxFX0FSUkFZX01FTUJF Ul07IC8qIG51bGwtdGVybWluYXRlZCBzdHJpbmcgaGVyZSAqLworfSBEYk9pZE5hbWU7CisKIAog aW50CiBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKIAlSZXN0b3JlT3B0aW9ucyAqb3B0 czsKIAlpbnQJCQljOwotCWludAkJCWV4aXRfY29kZTsKIAlpbnQJCQludW1Xb3JrZXJzID0gMTsK LQlBcmNoaXZlICAgICpBSDsKIAljaGFyCSAgICppbnB1dEZpbGVTcGVjOwogCWJvb2wJCWRhdGFf b25seSA9IGZhbHNlOwogCWJvb2wJCXNjaGVtYV9vbmx5ID0gZmFsc2U7CisJaW50CQkJbl9lcnJv cnMgPSAwOworCWJvb2wJCWdsb2JhbHNfb25seSA9IGZhbHNlOworCVNpbXBsZVN0cmluZ0xpc3Qg ZGJfZXhjbHVkZV9wYXR0ZXJucyA9IHtOVUxMLCBOVUxMfTsKIAlzdGF0aWMgaW50CWRpc2FibGVf dHJpZ2dlcnMgPSAwOwogCXN0YXRpYyBpbnQJZW5hYmxlX3Jvd19zZWN1cml0eSA9IDA7CiAJc3Rh dGljIGludAlpZl9leGlzdHMgPSAwOwpAQCAtODksNiArMTE5LDcgQEAgbWFpbihpbnQgYXJnYywg Y2hhciAqKmFyZ3YpCiAJCXsiY2xlYW4iLCAwLCBOVUxMLCAnYyd9LAogCQl7ImNyZWF0ZSIsIDAs IE5VTEwsICdDJ30sCiAJCXsiZGF0YS1vbmx5IiwgMCwgTlVMTCwgJ2EnfSwKKwkJeyJnbG9iYWxz LW9ubHkiLCAwLCBOVUxMLCAnZyd9LAogCQl7ImRibmFtZSIsIDEsIE5VTEwsICdkJ30sCiAJCXsi ZXhpdC1vbi1lcnJvciIsIDAsIE5VTEwsICdlJ30sCiAJCXsiZXhjbHVkZS1zY2hlbWEiLCAxLCBO VUxMLCAnTid9LApAQCAtMTQyLDYgKzE3Myw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2 KQogCQl7InN0YXRpc3RpY3Mtb25seSIsIG5vX2FyZ3VtZW50LCAmc3RhdGlzdGljc19vbmx5LCAx fSwKIAkJeyJmaWx0ZXIiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgNH0sCiAJCXsicmVzdHJp Y3Qta2V5IiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDZ9LAorCQl7ImV4Y2x1ZGUtZGF0YWJh c2UiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgN30sCiAKIAkJe05VTEwsIDAsIE5VTEwsIDB9 CiAJfTsKQEAgLTE3MCw3ICsyMDIsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJ fQogCX0KIAotCXdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJhY0NkOmVmOkY6 aDpJOmo6bEw6bjpOOk9wOlA6UnNTOnQ6VDpVOnZ3V3gxIiwKKwl3aGlsZSAoKGMgPSBnZXRvcHRf bG9uZyhhcmdjLCBhcmd2LCAiYWNDZDplZjpGOmdoOkk6ajpsTDpuOk46T3A6UDpSc1M6dDpUOlU6 dndXeDEiLAogCQkJCQkJCWNtZG9wdHMsIE5VTEwpKSAhPSAtMSkKIAl7CiAJCXN3aXRjaCAoYykK QEAgLTE5NywxMSArMjI5LDE0IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCWlm IChzdHJsZW4ob3B0YXJnKSAhPSAwKQogCQkJCQlvcHRzLT5mb3JtYXROYW1lID0gcGdfc3RyZHVw KG9wdGFyZyk7CiAJCQkJYnJlYWs7CisJCQljYXNlICdnJzoKKwkJCQkvKiByZXN0b3JlIG9ubHkg Z2xvYmFsIHNxbCBjb21tYW5kcy4gKi8KKwkJCQlnbG9iYWxzX29ubHkgPSB0cnVlOworCQkJCWJy ZWFrOwogCQkJY2FzZSAnaCc6CiAJCQkJaWYgKHN0cmxlbihvcHRhcmcpICE9IDApCiAJCQkJCW9w dHMtPmNwYXJhbXMucGdob3N0ID0gcGdfc3RyZHVwKG9wdGFyZyk7CiAJCQkJYnJlYWs7Ci0KIAkJ CWNhc2UgJ2onOgkJCS8qIG51bWJlciBvZiByZXN0b3JlIGpvYnMgKi8KIAkJCQlpZiAoIW9wdGlv bl9wYXJzZV9pbnQob3B0YXJnLCAiLWovLS1qb2JzIiwgMSwKIAkJCQkJCQkJCSAgUEdfTUFYX0pP QlMsCkBAIC0zMjEsNiArMzU2LDEwIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJ CW9wdHMtPnJlc3RyaWN0X2tleSA9IHBnX3N0cmR1cChvcHRhcmcpOwogCQkJCWJyZWFrOwogCisJ CQljYXNlIDc6CQkJCS8qIGRhdGFiYXNlIHBhdHRlcm5zIHRvIHNraXAgKi8KKwkJCQlzaW1wbGVf c3RyaW5nX2xpc3RfYXBwZW5kKCZkYl9leGNsdWRlX3BhdHRlcm5zLCBvcHRhcmcpOworCQkJCWJy ZWFrOworCiAJCQlkZWZhdWx0OgogCQkJCS8qIGdldG9wdF9sb25nIGFscmVhZHkgZW1pdHRlZCBh IGNvbXBsYWludCAqLwogCQkJCXBnX2xvZ19lcnJvcl9oaW50KCJUcnkgXCIlcyAtLWhlbHBcIiBm b3IgbW9yZSBpbmZvcm1hdGlvbi4iLCBwcm9nbmFtZSk7CkBAIC0zNDcsNiArMzg2LDEzIEBAIG1h aW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCWlmICghb3B0cy0+Y3BhcmFtcy5kYm5hbWUgJiYg IW9wdHMtPmZpbGVuYW1lICYmICFvcHRzLT50b2NTdW1tYXJ5KQogCQlwZ19mYXRhbCgib25lIG9m IC1kLy0tZGJuYW1lIGFuZCAtZi8tLWZpbGUgbXVzdCBiZSBzcGVjaWZpZWQiKTsKIAorCWlmIChk Yl9leGNsdWRlX3BhdHRlcm5zLmhlYWQgIT0gTlVMTCAmJiBnbG9iYWxzX29ubHkpCisJeworCQlw Z19sb2dfZXJyb3IoIm9wdGlvbiAtLWV4Y2x1ZGUtZGF0YWJhc2UgY2Fubm90IGJlIHVzZWQgdG9n ZXRoZXIgd2l0aCAtZy8tLWdsb2JhbHMtb25seSIpOworCQlwZ19sb2dfZXJyb3JfaGludCgiVHJ5 IFwiJXMgLS1oZWxwXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiwgcHJvZ25hbWUpOworCQlleGl0 X25pY2VseSgxKTsKKwl9CisKIAkvKiBTaG91bGQgZ2V0IGF0IG1vc3Qgb25lIG9mIC1kIGFuZCAt ZiwgZWxzZSB1c2VyIGlzIGNvbmZ1c2VkICovCiAJaWYgKG9wdHMtPmNwYXJhbXMuZGJuYW1lKQog CXsKQEAgLTQ3Miw2ICs1MTgsMTIxIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJ CQkgb3B0cy0+Zm9ybWF0TmFtZSk7CiAJfQogCisJLyoKKwkgKiBJZiB0b2MuZ2xvIGZpbGUgaXMg cHJlc2VudCwgdGhlbiByZXN0b3JlIGFsbCB0aGUKKwkgKiBkYXRhYmFzZXMgZnJvbSBtYXAuZGF0 ICwgYnV0IHNraXAgcmVzdG9yaW5nIHRob3NlIG1hdGNoaW5nCisJICogLS1leGNsdWRlLWRhdGFi YXNlIHBhdHRlcm5zLgorCSAqLworCWlmIChpbnB1dEZpbGVTcGVjICE9IE5VTEwgJiYKKwkJCShm aWxlX2V4aXN0c19pbl9kaXJlY3RvcnkoaW5wdXRGaWxlU3BlYywgInRvYy5nbG8iKSkpCisJewor CQkvKgorCQkgKiBDYW4gb25seSB1c2UgLS1saXN0IG9yIC0tdXNlLWxpc3Qgb3B0aW9ucyB3aXRo IGEgc2luZ2xlIGRhdGFiYXNlCisJCSAqIGR1bXAuCisJCSAqLworCQlpZiAob3B0cy0+dG9jU3Vt bWFyeSkKKwkJCXBnX2ZhdGFsKCJvcHRpb24gLWwvLS1saXN0IGNhbm5vdCBiZSB1c2VkIHdoZW4g cmVzdG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wYWxsIik7CisJCWVsc2UgaWYg KG9wdHMtPnRvY0ZpbGUpCisJCQlwZ19mYXRhbCgib3B0aW9uIC1MLy0tdXNlLWxpc3QgY2Fubm90 IGJlIHVzZWQgd2hlbiByZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXBhbGwi KTsKKworCQkvKgorCQkgKiBUbyByZXN0b3JlIGZyb20gYSBwZ19kdW1wYWxsIGFyY2hpdmUsIC1D IChjcmVhdGUgZGF0YWJhc2UpIG9wdGlvbgorCQkgKiBtdXN0IGJlIHNwZWNpZmllZCB1bmxlc3Mg d2UgYXJlIG9ubHkgcmVzdG9yaW5nIGdsb2JhbHMuCisJCSAqLworCQlpZiAoIWdsb2JhbHNfb25s eSAmJiBvcHRzLT5jcmVhdGVEQiAhPSAxKQorCQl7CisJCQlwZ19sb2dfZXJyb3IoIm9wdGlvbiAt Qy8tLWNyZWF0ZSBtdXN0IGJlIHNwZWNpZmllZCB3aGVuIHJlc3RvcmluZyBhbiBhcmNoaXZlIGNy ZWF0ZWQgYnkgcGdfZHVtcGFsbCIpOworCQkJcGdfbG9nX2Vycm9yX2hpbnQoIlRyeSBcIiVzIC0t aGVscFwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIsIHByb2duYW1lKTsKKwkJCXBnX2xvZ19lcnJv cl9oaW50KCJJbmRpdmlkdWFsIGRhdGFiYXNlcyBjYW4gYmUgcmVzdG9yZWQgdXNpbmcgdGhlaXIg c3BlY2lmaWMgYXJjaGl2ZXMuIik7CisJCQlleGl0X25pY2VseSgxKTsKKwkJfQorCisJCS8qIElm IGdsb2JhbHMtb25seSwgdGhlbiByZXR1cm4gZnJvbSBoZXJlLiAqLworCQlpZiAoZ2xvYmFsc19v bmx5KQorCQl7CisJCQljaGFyCWdsb2JhbF9wYXRoW01BWFBHUEFUSF07CisKKwkJCS8qIFNldCBw YXRoIGZvciB0b2MuZ2xvIGZpbGUuICovCisJCQlzbnByaW50ZihnbG9iYWxfcGF0aCwgTUFYUEdQ QVRILCAiJXMvdG9jLmdsbyIsIGlucHV0RmlsZVNwZWMpOworCQkJbl9lcnJvcnMgPSByZXN0b3Jl X2dsb2JhbF9vYmplY3RzKGdsb2JhbF9wYXRoLCBvcHRzLCBudW1Xb3JrZXJzLCBmYWxzZSwgMCwg Z2xvYmFsc19vbmx5KTsKKworCQkJcGdfbG9nX2luZm8oImRhdGFiYXNlIHJlc3RvcmluZyBza2lw cGVkIGJlY2F1c2Ugb3B0aW9uIC1nLy0tZ2xvYmFscy1vbmx5IHdhcyBzcGVjaWZpZWQiKTsKKwkJ fQorCQllbHNlCisJCXsKKwkJCS8qIE5vdyByZXN0b3JlIGFsbCB0aGUgZGF0YWJhc2VzIGZyb20g bWFwLmRhdCAqLworCQkJbl9lcnJvcnMgPSByZXN0b3JlX2FsbF9kYXRhYmFzZXMoaW5wdXRGaWxl U3BlYywgZGJfZXhjbHVkZV9wYXR0ZXJucywKKwkJCQkJCQkJCQkJIG9wdHMsIG51bVdvcmtlcnMp OworCQl9CisKKwkJLyogRnJlZSBkYiBwYXR0ZXJuIGxpc3QuICovCisJCXNpbXBsZV9zdHJpbmdf bGlzdF9kZXN0cm95KCZkYl9leGNsdWRlX3BhdHRlcm5zKTsKKwl9CisJZWxzZQorCXsKKwkJaWYg KGRiX2V4Y2x1ZGVfcGF0dGVybnMuaGVhZCAhPSBOVUxMKQorCQl7CisJCQlzaW1wbGVfc3RyaW5n X2xpc3RfZGVzdHJveSgmZGJfZXhjbHVkZV9wYXR0ZXJucyk7CisJCQlwZ19mYXRhbCgib3B0aW9u IC0tZXhjbHVkZS1kYXRhYmFzZSBjYW4gYmUgdXNlZCBvbmx5IHdoZW4gcmVzdG9yaW5nIGFuIGFy Y2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wYWxsIik7CisJCX0KKworCQlpZiAoZ2xvYmFsc19vbmx5 KQorCQkJcGdfZmF0YWwoIm9wdGlvbiAtZy8tLWdsb2JhbHMtb25seSBjYW4gYmUgdXNlZCBvbmx5 IHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wYWxsIik7CisKKwkJ LyogUHJvY2VzcyBpZiB0b2MuZ2xvIGZpbGUgZG9lcyBub3QgZXhpc3QuICovCisJCW5fZXJyb3Jz ID0gcmVzdG9yZV9vbmVfZGF0YWJhc2UoaW5wdXRGaWxlU3BlYywgb3B0cywKKwkJCQludW1Xb3Jr ZXJzLCBmYWxzZSwgMCwgZ2xvYmFsc19vbmx5KTsKKwl9CisKKwkvKiBEb25lLCBwcmludCBhIHN1 bW1hcnkgb2YgaWdub3JlZCBlcnJvcnMgZHVyaW5nIHJlc3RvcmUuICovCisJaWYgKG5fZXJyb3Jz KQorCXsKKwkJcGdfbG9nX3dhcm5pbmcoImVycm9ycyBpZ25vcmVkIG9uIHJlc3RvcmU6ICVkIiwg bl9lcnJvcnMpOworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHJl c3RvcmVfZ2xvYmFsX29iamVjdHMKKyAqCisgKiBUaGlzIHJlc3RvcmUgYWxsIGdsb2JhbCBvYmpl Y3RzLgorICoKKyAqIElmIGdsb2JhbHNfb25seSBpcyBzZXQsIHRoZW4gc2tpcCBEUk9QIERBVEFC QVNFIGNvbW1hbmRzIGZyb20gcmVzdG9yZS4KKyAqLworc3RhdGljIGludCByZXN0b3JlX2dsb2Jh bF9vYmplY3RzKGNvbnN0IGNoYXIgKmlucHV0RmlsZVNwZWMsIFJlc3RvcmVPcHRpb25zICpvcHRz LAorCQlpbnQgbnVtV29ya2VycywgYm9vbCBhcHBlbmRfZGF0YSwgaW50IG51bSwgYm9vbCBnbG9i YWxzX29ubHkpCit7CisJaW50CW5lcnJvcjsKKwlpbnQJZm9ybWF0ID0gb3B0cy0+Zm9ybWF0Owor CisJLyogU2V0IGZvcm1hdCBhcyBjdXN0b20gc28gdGhhdCB0b2MuZ2xvIGZpbGUgY2FuIGJlIHJl YWQuICovCisJb3B0cy0+Zm9ybWF0ID0gYXJjaEN1c3RvbTsKKworCW5lcnJvciA9IHJlc3RvcmVf b25lX2RhdGFiYXNlKGlucHV0RmlsZVNwZWMsIG9wdHMsIG51bVdvcmtlcnMsCisJCQlhcHBlbmRf ZGF0YSwgbnVtLCBnbG9iYWxzX29ubHkpOworCisJLyogUmVzZXQgZm9ybWF0IHZhbHVlLiAqLwor CW9wdHMtPmZvcm1hdCA9IGZvcm1hdDsKKworCXJldHVybiBuZXJyb3I7Cit9CisKKy8qCisgKiBy ZXN0b3JlX29uZV9kYXRhYmFzZQorICoKKyAqIFRoaXMgd2lsbCByZXN0b3JlIG9uZSBkYXRhYmFz ZSB1c2luZyB0b2MuZGF0IGZpbGUuCisgKgorICogcmV0dXJucyB0aGUgbnVtYmVyIG9mIGVycm9y cyB3aGlsZSBkb2luZyByZXN0b3JlLgorICovCitzdGF0aWMgaW50CityZXN0b3JlX29uZV9kYXRh YmFzZShjb25zdCBjaGFyICppbnB1dEZpbGVTcGVjLCBSZXN0b3JlT3B0aW9ucyAqb3B0cywKKwkJ CQkJIGludCBudW1Xb3JrZXJzLCBib29sIGFwcGVuZF9kYXRhLCBpbnQgbnVtLCBib29sIGdsb2Jh bHNfb25seSkKK3sKKwlBcmNoaXZlICAgICpBSDsKKwlpbnQJCQluX2Vycm9yczsKKwogCUFIID0g T3BlbkFyY2hpdmUoaW5wdXRGaWxlU3BlYywgb3B0cy0+Zm9ybWF0KTsKIAogCVNldEFyY2hpdmVP cHRpb25zKEFILCBOVUxMLCBvcHRzKTsKQEAgLTQ3OSw5ICs2NDAsMTUgQEAgbWFpbihpbnQgYXJn YywgY2hhciAqKmFyZ3YpCiAJLyoKIAkgKiBXZSBkb24ndCBoYXZlIGEgY29ubmVjdGlvbiB5ZXQg YnV0IHRoYXQgZG9lc24ndCBtYXR0ZXIuIFRoZSBjb25uZWN0aW9uCiAJICogaXMgaW5pdGlhbGl6 ZWQgdG8gTlVMTCBhbmQgaWYgd2UgdGVybWluYXRlIHRocm91Z2ggZXhpdF9uaWNlbHkoKSB3aGls ZQotCSAqIGl0J3Mgc3RpbGwgTlVMTCwgdGhlIGNsZWFudXAgZnVuY3Rpb24gd2lsbCBqdXN0IGJl IGEgbm8tb3AuCisJICogaXQncyBzdGlsbCBOVUxMLCB0aGUgY2xlYW51cCBmdW5jdGlvbiB3aWxs IGp1c3QgYmUgYSBuby1vcC4gSWYgd2UgYXJlCisJICogcmVzdG9yaW5nIG11bHRpcGxlIGRhdGFi YXNlcywgdGhlbiBvbmx5IHVwZGF0ZSBBWCBoYW5kbGUgZm9yIGNsZWFudXAgYXMKKwkgKiB0aGUg cHJldmlvdXMgZW50cnkgd2FzIGFscmVhZHkgaW4gdGhlIGFycmF5IGFuZCB3ZSBoYWQgY2xvc2Vk IHByZXZpb3VzCisJICogY29ubmVjdGlvbiwgc28gd2UgY2FuIHVzZSB0aGUgc2FtZSBhcnJheSBz bG90LgogCSAqLwotCW9uX2V4aXRfY2xvc2VfYXJjaGl2ZShBSCk7CisJaWYgKCFhcHBlbmRfZGF0 YSB8fCBudW0gPT0gMCkKKwkJb25fZXhpdF9jbG9zZV9hcmNoaXZlKEFIKTsKKwllbHNlCisJCXJl cGxhY2Vfb25fZXhpdF9jbG9zZV9hcmNoaXZlKEFIKTsKIAogCS8qIExldCB0aGUgYXJjaGl2ZXIg a25vdyBob3cgbm9pc3kgdG8gYmUgKi8KIAlBSC0+dmVyYm9zZSA9IG9wdHMtPnZlcmJvc2U7CkBA IC01MDEsMjUgKzY2OCwyMSBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAllbHNlCiAJ ewogCQlQcm9jZXNzQXJjaGl2ZVJlc3RvcmVPcHRpb25zKEFIKTsKLQkJUmVzdG9yZUFyY2hpdmUo QUgpOworCQlSZXN0b3JlQXJjaGl2ZShBSCwgYXBwZW5kX2RhdGEsIGdsb2JhbHNfb25seSk7CiAJ fQogCi0JLyogZG9uZSwgcHJpbnQgYSBzdW1tYXJ5IG9mIGlnbm9yZWQgZXJyb3JzICovCi0JaWYg KEFILT5uX2Vycm9ycykKLQkJcGdfbG9nX3dhcm5pbmcoImVycm9ycyBpZ25vcmVkIG9uIHJlc3Rv cmU6ICVkIiwgQUgtPm5fZXJyb3JzKTsKKwluX2Vycm9ycyA9IEFILT5uX2Vycm9yczsKIAogCS8q IEFIIG1heSBiZSBmcmVlZCBpbiBDbG9zZUFyY2hpdmU/ICovCi0JZXhpdF9jb2RlID0gQUgtPm5f ZXJyb3JzID8gMSA6IDA7Ci0KIAlDbG9zZUFyY2hpdmUoQUgpOwogCi0JcmV0dXJuIGV4aXRfY29k ZTsKKwlyZXR1cm4gbl9lcnJvcnM7CiB9CiAKIHN0YXRpYyB2b2lkCiB1c2FnZShjb25zdCBjaGFy ICpwcm9nbmFtZSkKIHsKLQlwcmludGYoXygiJXMgcmVzdG9yZXMgYSBQb3N0Z3JlU1FMIGRhdGFi YXNlIGZyb20gYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXAuXG5cbiIpLCBwcm9nbmFtZSk7 CisJcHJpbnRmKF8oIiVzIHJlc3RvcmVzIFBvc3RncmVTUUwgZGF0YWJhc2VzIGZyb20gYXJjaGl2 ZXMgY3JlYXRlZCBieSBwZ19kdW1wIG9yIHBnX2R1bXBhbGwuXG5cbiIpLCBwcm9nbmFtZSk7CiAJ cHJpbnRmKF8oIlVzYWdlOlxuIikpOwogCXByaW50ZihfKCIgICVzIFtPUFRJT05dLi4uIFtGSUxF XVxuIiksIHByb2duYW1lKTsKIApAQCAtNTM3LDYgKzcwMCw3IEBAIHVzYWdlKGNvbnN0IGNoYXIg KnByb2duYW1lKQogCXByaW50ZihfKCIgIC1jLCAtLWNsZWFuICAgICAgICAgICAgICAgICAgY2xl YW4gKGRyb3ApIGRhdGFiYXNlIG9iamVjdHMgYmVmb3JlIHJlY3JlYXRpbmdcbiIpKTsKIAlwcmlu dGYoXygiICAtQywgLS1jcmVhdGUgICAgICAgICAgICAgICAgIGNyZWF0ZSB0aGUgdGFyZ2V0IGRh dGFiYXNlXG4iKSk7CiAJcHJpbnRmKF8oIiAgLWUsIC0tZXhpdC1vbi1lcnJvciAgICAgICAgICBl eGl0IG9uIGVycm9yLCBkZWZhdWx0IGlzIHRvIGNvbnRpbnVlXG4iKSk7CisJcHJpbnRmKF8oIiAg LWcsIC0tZ2xvYmFscy1vbmx5ICAgICAgICAgICByZXN0b3JlIG9ubHkgZ2xvYmFsIG9iamVjdHMs IG5vIGRhdGFiYXNlc1xuIikpOwogCXByaW50ZihfKCIgIC1JLCAtLWluZGV4PU5BTUUgICAgICAg ICAgICAgcmVzdG9yZSBuYW1lZCBpbmRleFxuIikpOwogCXByaW50ZihfKCIgIC1qLCAtLWpvYnM9 TlVNICAgICAgICAgICAgICAgdXNlIHRoaXMgbWFueSBwYXJhbGxlbCBqb2JzIHRvIHJlc3RvcmVc biIpKTsKIAlwcmludGYoXygiICAtTCwgLS11c2UtbGlzdD1GSUxFTkFNRSAgICAgIHVzZSB0YWJs ZSBvZiBjb250ZW50cyBmcm9tIHRoaXMgZmlsZSBmb3JcbiIKQEAgLTU1Myw2ICs3MTcsNyBAQCB1 c2FnZShjb25zdCBjaGFyICpwcm9nbmFtZSkKIAlwcmludGYoXygiICAtMSwgLS1zaW5nbGUtdHJh bnNhY3Rpb24gICAgIHJlc3RvcmUgYXMgYSBzaW5nbGUgdHJhbnNhY3Rpb25cbiIpKTsKIAlwcmlu dGYoXygiICAtLWRpc2FibGUtdHJpZ2dlcnMgICAgICAgICAgIGRpc2FibGUgdHJpZ2dlcnMgZHVy aW5nIGRhdGEtb25seSByZXN0b3JlXG4iKSk7CiAJcHJpbnRmKF8oIiAgLS1lbmFibGUtcm93LXNl Y3VyaXR5ICAgICAgICBlbmFibGUgcm93IHNlY3VyaXR5XG4iKSk7CisJcHJpbnRmKF8oIiAgLS1l eGNsdWRlLWRhdGFiYXNlPVBBVFRFUk4gICBkbyBub3QgcmVzdG9yZSB0aGUgc3BlY2lmaWVkIGRh dGFiYXNlKHMpXG4iKSk7CiAJcHJpbnRmKF8oIiAgLS1maWx0ZXI9RklMRU5BTUUgICAgICAgICAg ICByZXN0b3JlIG9yIHNraXAgb2JqZWN0cyBiYXNlZCBvbiBleHByZXNzaW9uc1xuIgogCQkJICIg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gRklMRU5BTUVcbiIpKTsKIAlwcmludGYo XygiICAtLWlmLWV4aXN0cyAgICAgICAgICAgICAgICAgIHVzZSBJRiBFWElTVFMgd2hlbiBkcm9w cGluZyBvYmplY3RzXG4iKSk7CkBAIC01ODgsOCArNzUzLDggQEAgdXNhZ2UoY29uc3QgY2hhciAq cHJvZ25hbWUpCiAJcHJpbnRmKF8oIiAgLS1yb2xlPVJPTEVOQU1FICAgICAgICAgIGRvIFNFVCBS T0xFIGJlZm9yZSByZXN0b3JlXG4iKSk7CiAKIAlwcmludGYoXygiXG4iCi0JCQkgIlRoZSBvcHRp b25zIC1JLCAtbiwgLU4sIC1QLCAtdCwgLVQsIGFuZCAtLXNlY3Rpb24gY2FuIGJlIGNvbWJpbmVk IGFuZCBzcGVjaWZpZWRcbiIKLQkJCSAibXVsdGlwbGUgdGltZXMgdG8gc2VsZWN0IG11bHRpcGxl IG9iamVjdHMuXG4iKSk7CisJCQkgIlRoZSBvcHRpb25zIC1JLCAtbiwgLU4sIC1QLCAtdCwgLVQs IC0tc2VjdGlvbiwgYW5kIC0tZXhjbHVkZS1kYXRhYmFzZSBjYW4gYmVcbiIKKwkJCSAiY29tYmlu ZWQgYW5kIHNwZWNpZmllZCBtdWx0aXBsZSB0aW1lcyB0byBzZWxlY3QgbXVsdGlwbGUgb2JqZWN0 cy5cbiIpKTsKIAlwcmludGYoXygiXG5JZiBubyBpbnB1dCBmaWxlIG5hbWUgaXMgc3VwcGxpZWQs IHRoZW4gc3RhbmRhcmQgaW5wdXQgaXMgdXNlZC5cblxuIikpOwogCXByaW50ZihfKCJSZXBvcnQg YnVncyB0byA8JXM+LlxuIiksIFBBQ0tBR0VfQlVHUkVQT1JUKTsKIAlwcmludGYoXygiJXMgaG9t ZSBwYWdlOiA8JXM+XG4iKSwgUEFDS0FHRV9OQU1FLCBQQUNLQUdFX1VSTCk7CkBAIC02OTQsMyAr ODU5LDQxMCBAQCByZWFkX3Jlc3RvcmVfZmlsdGVycyhjb25zdCBjaGFyICpmaWxlbmFtZSwgUmVz dG9yZU9wdGlvbnMgKm9wdHMpCiAKIAlmaWx0ZXJfZnJlZSgmZnN0YXRlKTsKIH0KKworLyoKKyAq IGZpbGVfZXhpc3RzX2luX2RpcmVjdG9yeQorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZmls ZSBleGlzdHMgaW4gdGhlIGdpdmVuIGRpcmVjdG9yeS4KKyAqLworc3RhdGljIGJvb2wKK2ZpbGVf ZXhpc3RzX2luX2RpcmVjdG9yeShjb25zdCBjaGFyICpkaXIsIGNvbnN0IGNoYXIgKmZpbGVuYW1l KQoreworCXN0cnVjdCBzdGF0IHN0OworCWNoYXIJCWJ1ZltNQVhQR1BBVEhdOworCisJaWYgKHNu cHJpbnRmKGJ1ZiwgTUFYUEdQQVRILCAiJXMvJXMiLCBkaXIsIGZpbGVuYW1lKSA+PSBNQVhQR1BB VEgpCisJCXBnX2ZhdGFsKCJkaXJlY3RvcnkgbmFtZSB0b28gbG9uZzogXCIlc1wiIiwgZGlyKTsK KworCXJldHVybiAoc3RhdChidWYsICZzdCkgPT0gMCAmJiBTX0lTUkVHKHN0LnN0X21vZGUpKTsK K30KKworLyoKKyAqIGdldF9kYm5hbWVzX2xpc3RfdG9fcmVzdG9yZQorICoKKyAqIFRoaXMgd2ls bCBtYXJrIGZvciBza2lwcGluZyBhbnkgZW50cmllcyBmcm9tIGRibmFtZV9vaWRfbGlzdCB0aGF0 IHBhdHRlcm4gbWF0Y2ggYW4KKyAqIGVudHJ5IGluIHRoZSBkYl9leGNsdWRlX3BhdHRlcm5zIGxp c3QuCisgKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGRhdGFiYXNlIHRvIGJlIHJlc3RvcmVk LgorICoKKyAqLworc3RhdGljIGludAorZ2V0X2RibmFtZXNfbGlzdF90b19yZXN0b3JlKFBHY29u biAqY29ubiwKKwkJCQkJCQlTaW1wbGVQdHJMaXN0ICpkYm5hbWVfb2lkX2xpc3QsCisJCQkJCQkJ U2ltcGxlU3RyaW5nTGlzdCBkYl9leGNsdWRlX3BhdHRlcm5zKQoreworCWludAkJCWNvdW50X2Ri ID0gMDsKKwlQUUV4cEJ1ZmZlciBxdWVyeTsKKwlQR3Jlc3VsdCAgICpyZXM7CisKKwlxdWVyeSA9 IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisKKwlpZiAoIWNvbm4gJiYgZGJfZXhjbHVkZV9wYXR0ZXJu cy5oZWFkICE9IE5VTEwpCisJCXBnX2xvZ19pbmZvKCJjb25zaWRlcmluZyBQQVRURVJOIGFzIE5B TUUgZm9yIC0tZXhjbHVkZS1kYXRhYmFzZSBvcHRpb24gYXMgbm8gZGF0YWJhc2UgY29ubmVjdGlv biB3aGlsZSBkb2luZyBwZ19yZXN0b3JlIik7CisKKwkvKgorCSAqIFByb2Nlc3Mgb25lIGJ5IG9u ZSBhbGwgZGJuYW1lcyBhbmQgaWYgc3BlY2lmaWVkIHRvIHNraXAgcmVzdG9yaW5nLCB0aGVuCisJ ICogcmVtb3ZlIGRibmFtZSBmcm9tIGxpc3QuCisJICovCisJZm9yIChTaW1wbGVQdHJMaXN0Q2Vs bCAqZGJfY2VsbCA9IGRibmFtZV9vaWRfbGlzdC0+aGVhZDsKKwkJIGRiX2NlbGw7IGRiX2NlbGwg PSBkYl9jZWxsLT5uZXh0KQorCXsKKwkJRGJPaWROYW1lICAqZGJpZG5hbWUgPSAoRGJPaWROYW1l ICopIGRiX2NlbGwtPnB0cjsKKwkJYm9vbAkJc2tpcF9kYl9yZXN0b3JlID0gZmFsc2U7CisJCVBR RXhwQnVmZmVyIGRiX2xpdCA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisKKwkJYXBwZW5kU3RyaW5n TGl0ZXJhbENvbm4oZGJfbGl0LCBkYmlkbmFtZS0+c3RyLCBjb25uKTsKKworCQlmb3IgKFNpbXBs ZVN0cmluZ0xpc3RDZWxsICpwYXRfY2VsbCA9IGRiX2V4Y2x1ZGVfcGF0dGVybnMuaGVhZDsgcGF0 X2NlbGw7IHBhdF9jZWxsID0gcGF0X2NlbGwtPm5leHQpCisJCXsKKwkJCS8qCisJCQkgKiBJZiB0 aGVyZSBpcyBhbiBleGFjdCBtYXRjaCB0aGVuIHdlIGRvbid0IG5lZWQgdG8gdHJ5IGEgcGF0dGVy bgorCQkJICogbWF0Y2gKKwkJCSAqLworCQkJaWYgKHBnX3N0cmNhc2VjbXAoZGJpZG5hbWUtPnN0 ciwgcGF0X2NlbGwtPnZhbCkgPT0gMCkKKwkJCQlza2lwX2RiX3Jlc3RvcmUgPSB0cnVlOworCQkJ LyogT3RoZXJ3aXNlLCB0cnkgYSBwYXR0ZXJuIG1hdGNoIGlmIHRoZXJlIGlzIGEgY29ubmVjdGlv biAqLworCQkJZWxzZSBpZiAoY29ubikKKwkJCXsKKwkJCQlpbnQJCQlkb3RjbnQ7CisKKwkJCQlh cHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIlNFTEVDVCAxICIpOworCQkJCXByb2Nlc3NTUUxO YW1lUGF0dGVybihjb25uLCBxdWVyeSwgcGF0X2NlbGwtPnZhbCwgZmFsc2UsCisJCQkJCQkJCQkg IGZhbHNlLCBOVUxMLCBkYl9saXQtPmRhdGEsCisJCQkJCQkJCQkgIE5VTEwsIE5VTEwsIE5VTEws ICZkb3RjbnQpOworCisJCQkJaWYgKGRvdGNudCA+IDApCisJCQkJeworCQkJCQlwZ19sb2dfZXJy b3IoImltcHJvcGVyIHF1YWxpZmllZCBuYW1lICh0b28gbWFueSBkb3R0ZWQgbmFtZXMpOiAlcyIs CisJCQkJCQkJCSBkYmlkbmFtZS0+c3RyKTsKKwkJCQkJUFFmaW5pc2goY29ubik7CisJCQkJCWV4 aXRfbmljZWx5KDEpOworCQkJCX0KKworCQkJCXJlcyA9IGV4ZWN1dGVRdWVyeShjb25uLCBxdWVy eS0+ZGF0YSk7CisKKwkJCQlpZiAoKFBRcmVzdWx0U3RhdHVzKHJlcykgPT0gUEdSRVNfVFVQTEVT X09LKSAmJiBQUW50dXBsZXMocmVzKSkKKwkJCQl7CisJCQkJCXNraXBfZGJfcmVzdG9yZSA9IHRy dWU7CisJCQkJCXBnX2xvZ19pbmZvKCJkYXRhYmFzZSBuYW1lIFwiJXNcIiBtYXRjaGVzIGV4Y2x1 ZGUgcGF0dGVybiBcIiVzXCIiLCBkYmlkbmFtZS0+c3RyLCBwYXRfY2VsbC0+dmFsKTsKKwkJCQl9 CisKKwkJCQlQUWNsZWFyKHJlcyk7CisJCQkJcmVzZXRQUUV4cEJ1ZmZlcihxdWVyeSk7CisJCQl9 CisKKwkJCWlmIChza2lwX2RiX3Jlc3RvcmUpCisJCQkJYnJlYWs7CisJCX0KKworCQlkZXN0cm95 UFFFeHBCdWZmZXIoZGJfbGl0KTsKKworCQkvKgorCQkgKiBNYXJrIGRiIHRvIGJlIHNraXBwZWQg b3IgaW5jcmVtZW50IHRoZSBjb3VudGVyIG9mIGRicyB0byBiZQorCQkgKiByZXN0b3JlZAorCQkg Ki8KKwkJaWYgKHNraXBfZGJfcmVzdG9yZSkKKwkJeworCQkJcGdfbG9nX2luZm8oImV4Y2x1ZGlu ZyBkYXRhYmFzZSBcIiVzXCIiLCBkYmlkbmFtZS0+c3RyKTsKKwkJCWRiaWRuYW1lLT5vaWQgPSBJ bnZhbGlkT2lkOworCQl9CisJCWVsc2UKKwkJeworCQkJY291bnRfZGIrKzsKKwkJfQorCX0KKwor CWRlc3Ryb3lQUUV4cEJ1ZmZlcihxdWVyeSk7CisKKwlyZXR1cm4gY291bnRfZGI7Cit9CisKKy8q CisgKiBnZXRfZGJuYW1lX29pZF9saXN0X2Zyb21fbWZpbGUKKyAqCisgKiBPcGVuIG1hcC5kYXQg ZmlsZSBhbmQgcmVhZCBsaW5lIGJ5IGxpbmUgYW5kIHRoZW4gcHJlcGFyZSBhIGxpc3Qgb2YgZGF0 YWJhc2UKKyAqIG5hbWVzIGFuZCBjb3JyZXNwb25kaW5nIGRiX29pZC4KKyAqCisgKiBSZXR1cm5z LCB0b3RhbCBudW1iZXIgb2YgZGF0YWJhc2UgbmFtZXMgaW4gbWFwLmRhdCBmaWxlLgorICovCitz dGF0aWMgaW50CitnZXRfZGJuYW1lX29pZF9saXN0X2Zyb21fbWZpbGUoY29uc3QgY2hhciAqZHVt cGRpcnBhdGgsIFNpbXBsZVB0ckxpc3QgKmRibmFtZV9vaWRfbGlzdCkKK3sKKwlTdHJpbmdJbmZv RGF0YSBsaW5lYnVmOworCUZJTEUJICAgKnBmaWxlOworCWNoYXIJCW1hcF9maWxlX3BhdGhbTUFY UEdQQVRIXTsKKwlpbnQJCQljb3VudCA9IDA7CisKKworCS8qCisJICogSWYgdGhlcmUgaXMgbm8g bWFwLmRhdCBmaWxlIGluIGR1bXAsIHRoZW4gcmV0dXJuIGZyb20gaGVyZSBhcworCSAqIHRoZXJl IGlzIG5vIGRhdGFiYXNlIHRvIHJlc3RvcmUuCisJICovCisJaWYgKCFmaWxlX2V4aXN0c19pbl9k aXJlY3RvcnkoZHVtcGRpcnBhdGgsICJtYXAuZGF0IikpCisJeworCQlwZ19sb2dfaW5mbygiZGF0 YWJhc2UgcmVzdG9yaW5nIGlzIHNraXBwZWQgYmVjYXVzZSBmaWxlIFwiJXNcIiBkb2VzIG5vdCBl eGlzdCBpbiBkaXJlY3RvcnkgXCIlc1wiIiwgIm1hcC5kYXQiLCBkdW1wZGlycGF0aCk7CisJCXJl dHVybiAwOworCX0KKworCXNucHJpbnRmKG1hcF9maWxlX3BhdGgsIE1BWFBHUEFUSCwgIiVzL21h cC5kYXQiLCBkdW1wZGlycGF0aCk7CisKKwkvKiBPcGVuIG1hcC5kYXQgZmlsZS4gKi8KKwlwZmls ZSA9IGZvcGVuKG1hcF9maWxlX3BhdGgsIFBHX0JJTkFSWV9SKTsKKworCWlmIChwZmlsZSA9PSBO VUxMKQorCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCI6ICVtIiwgbWFwX2Zp bGVfcGF0aCk7CisKKwlpbml0U3RyaW5nSW5mbygmbGluZWJ1Zik7CisKKwkvKiBBcHBlbmQgYWxs IHRoZSBkYm5hbWUvZGJfb2lkIGNvbWJpbmF0aW9ucyB0byB0aGUgbGlzdC4gKi8KKwl3aGlsZSAo cGdfZ2V0X2xpbmVfYnVmKHBmaWxlLCAmbGluZWJ1ZikpCisJeworCQlPaWQJCQlkYl9vaWQgPSBJ bnZhbGlkT2lkOworCQljaGFyCSAgICpkYm5hbWU7CisJCURiT2lkTmFtZSAgKmRiaWRuYW1lOwor CQlpbnQJCQluYW1lbGVuOworCQljaGFyCSAgICpwID0gbGluZWJ1Zi5kYXRhOworCisJCS8qIEV4 dHJhY3QgZGJvaWQuICovCisJCXdoaWxlIChpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSAqcCkpCisJ CQlwKys7CisJCWlmIChwID4gbGluZWJ1Zi5kYXRhICYmICpwID09ICcgJykKKwkJeworCQkJc3Nj YW5mKGxpbmVidWYuZGF0YSwgIiV1IiwgJmRiX29pZCk7CisJCQlwKys7CisJCX0KKworCQkvKiBk Ym5hbWUgaXMgdGhlIHJlc3Qgb2YgdGhlIGxpbmUgKi8KKwkJZGJuYW1lID0gcDsKKwkJbmFtZWxl biA9IHN0cmxlbihkYm5hbWUpOworCisJCS8qIFJlcG9ydCBlcnJvciBhbmQgZXhpdCBpZiB0aGUg ZmlsZSBoYXMgYW55IGNvcnJ1cHRlZCBkYXRhLiAqLworCQlpZiAoIU9pZElzVmFsaWQoZGJfb2lk KSB8fCBuYW1lbGVuIDw9IDEpCisJCQlwZ19mYXRhbCgiaW52YWxpZCBlbnRyeSBpbiBmaWxlIFwi JXNcIiBvbiBsaW5lICVkIiwgbWFwX2ZpbGVfcGF0aCwKKwkJCQkJIGNvdW50ICsgMSk7CisKKwkJ cGdfbG9nX2luZm8oImZvdW5kIGRhdGFiYXNlIFwiJXNcIiAoT0lEOiAldSkgaW4gZmlsZSBcIiVz XCIiLAorCQkJCQlkYm5hbWUsIGRiX29pZCwgbWFwX2ZpbGVfcGF0aCk7CisKKwkJZGJpZG5hbWUg PSBwZ19tYWxsb2Mob2Zmc2V0b2YoRGJPaWROYW1lLCBzdHIpICsgbmFtZWxlbiArIDEpOworCQlk YmlkbmFtZS0+b2lkID0gZGJfb2lkOworCQlzdHJsY3B5KGRiaWRuYW1lLT5zdHIsIGRibmFtZSwg bmFtZWxlbik7CisKKwkJc2ltcGxlX3B0cl9saXN0X2FwcGVuZChkYm5hbWVfb2lkX2xpc3QsIGRi aWRuYW1lKTsKKwkJY291bnQrKzsKKwl9CisKKwkvKiBDbG9zZSBtYXAuZGF0IGZpbGUuICovCisJ ZmNsb3NlKHBmaWxlKTsKKworCXJldHVybiBjb3VudDsKK30KKworLyoKKyAqIHJlc3RvcmVfYWxs X2RhdGFiYXNlcworICoKKyAqIFRoaXMgd2lsbCByZXN0b3JlIGRhdGFiYXNlcyB0aG9zZSBkdW1w cyBhcmUgcHJlc2VudCBpbgorICogZGlyZWN0b3J5IGJhc2VkIG9uIG1hcC5kYXQgZmlsZSBtYXBw aW5nLgorICoKKyAqIFRoaXMgd2lsbCBza2lwIHJlc3RvcmluZyBmb3IgZGF0YWJhc2VzIHRoYXQg YXJlIHNwZWNpZmllZCB3aXRoCisgKiBleGNsdWRlLWRhdGFiYXNlIG9wdGlvbi4KKyAqCisgKiBy ZXR1cm5zLCBudW1iZXIgb2YgZXJyb3JzIHdoaWxlIGRvaW5nIHJlc3RvcmUuCisgKi8KK3N0YXRp YyBpbnQKK3Jlc3RvcmVfYWxsX2RhdGFiYXNlcyhjb25zdCBjaGFyICppbnB1dEZpbGVTcGVjLAor CQkJCQkgIFNpbXBsZVN0cmluZ0xpc3QgZGJfZXhjbHVkZV9wYXR0ZXJucywgUmVzdG9yZU9wdGlv bnMgKm9wdHMsCisJCQkJCSAgaW50IG51bVdvcmtlcnMpCit7CisJU2ltcGxlUHRyTGlzdCBkYm5h bWVfb2lkX2xpc3QgPSB7TlVMTCwgTlVMTH07CisJaW50CQkJbnVtX2RiX3Jlc3RvcmUgPSAwOwor CWludAkJCW51bV90b3RhbF9kYjsKKwlpbnQJCQluX2Vycm9yc190b3RhbDsKKwlpbnQJCQljb3Vu dCA9IDA7CisJY2hhcgkgICAqY29ubmVjdGVkX2RiID0gTlVMTDsKKwlib29sCQlkdW1wRGF0YSA9 IG9wdHMtPmR1bXBEYXRhOworCWJvb2wJCWR1bXBTY2hlbWEgPSBvcHRzLT5kdW1wU2NoZW1hOwor CWJvb2wJCWR1bXBTdGF0aXN0aWNzID0gb3B0cy0+ZHVtcFNjaGVtYTsKKwlQR2Nvbm4gKmNvbm4g PSBOVUxMOworCWNoYXIJCWdsb2JhbF9wYXRoW01BWFBHUEFUSF07CisKKwkvKiBTZXQgcGF0aCBm b3IgdG9jLmdsbyBmaWxlLiAqLworCXNucHJpbnRmKGdsb2JhbF9wYXRoLCBNQVhQR1BBVEgsICIl cy90b2MuZ2xvIiwgaW5wdXRGaWxlU3BlYyk7CisKKwkvKiBTYXZlIGRiIG5hbWUgdG8gcmV1c2Ug aXQgZm9yIGFsbCB0aGUgZGF0YWJhc2UuICovCisJaWYgKG9wdHMtPmNwYXJhbXMuZGJuYW1lKQor CQljb25uZWN0ZWRfZGIgPSBvcHRzLT5jcGFyYW1zLmRibmFtZTsKKworCW51bV90b3RhbF9kYiA9 IGdldF9kYm5hbWVfb2lkX2xpc3RfZnJvbV9tZmlsZShpbnB1dEZpbGVTcGVjLCAmZGJuYW1lX29p ZF9saXN0KTsKKworCS8qIElmIG1hcC5kYXQgaGFzIG5vIGVudHJpZXMsIHJldHVybiBhZnRlciBw cm9jZXNzaW5nIGdsb2JhbCBjb21tYW5kcy4gKi8KKwlpZiAoZGJuYW1lX29pZF9saXN0LmhlYWQg PT0gTlVMTCkKKwkJcmV0dXJuIHJlc3RvcmVfZ2xvYmFsX29iamVjdHMoZ2xvYmFsX3BhdGgsIG9w dHMsIG51bVdvcmtlcnMsIGZhbHNlLCAwLCBmYWxzZSk7CisKKwlwZ19sb2dfaW5mbyhuZ2V0dGV4 dCgiZm91bmQgJWQgZGF0YWJhc2UgbmFtZSBpbiBcIiVzXCIiLAorCQkJCQkJICJmb3VuZCAlZCBk YXRhYmFzZSBuYW1lcyBpbiBcIiVzXCIiLAorCQkJCQkJIG51bV90b3RhbF9kYiksCisJCQkJbnVt X3RvdGFsX2RiLCAibWFwLmRhdCIpOworCisJLyoKKwkgKiBJZiBleGNsdWRlLXBhdHRlcm5zIGlz IGdpdmVuLCB0aGVuIGNvbm5lY3QgdG8gdGhlIGRhdGFiYXNlIHRvIHByb2Nlc3MKKwkgKiBpdC4K KwkgKi8KKwlpZiAoZGJfZXhjbHVkZV9wYXR0ZXJucy5oZWFkICE9IE5VTEwpCisJeworCQlpZiAo b3B0cy0+Y3BhcmFtcy5kYm5hbWUpCisJCXsKKwkJCWNvbm4gPSBDb25uZWN0RGF0YWJhc2Uob3B0 cy0+Y3BhcmFtcy5kYm5hbWUsIE5VTEwsIG9wdHMtPmNwYXJhbXMucGdob3N0LAorCQkJCQlvcHRz LT5jcGFyYW1zLnBncG9ydCwgb3B0cy0+Y3BhcmFtcy51c2VybmFtZSwgVFJJX0RFRkFVTFQsCisJ CQkJCWZhbHNlLCBwcm9nbmFtZSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7CisKKwkJCWlmICgh Y29ubikKKwkJCQlwZ19mYXRhbCgiY291bGQgbm90IGNvbm5lY3QgdG8gZGF0YWJhc2UgXCIlc1wi Iiwgb3B0cy0+Y3BhcmFtcy5kYm5hbWUpOworCQl9CisKKwkJaWYgKCFjb25uKQorCQl7CisJCQlw Z19sb2dfaW5mbygidHJ5aW5nIHRvIGNvbm5lY3QgdG8gZGF0YWJhc2UgXCIlc1wiIiwgInBvc3Rn cmVzIik7CisKKwkJCWNvbm4gPSBDb25uZWN0RGF0YWJhc2UoInBvc3RncmVzIiwgTlVMTCwgb3B0 cy0+Y3BhcmFtcy5wZ2hvc3QsCisJCQkJCW9wdHMtPmNwYXJhbXMucGdwb3J0LCBvcHRzLT5jcGFy YW1zLnVzZXJuYW1lLCBUUklfREVGQVVMVCwKKwkJCQkJZmFsc2UsIHByb2duYW1lLCBOVUxMLCBO VUxMLCBOVUxMLCBOVUxMKTsKKworCQkJLyogVHJ5IHdpdGggdGVtcGxhdGUxLiAqLworCQkJaWYg KCFjb25uKQorCQkJeworCQkJCXBnX2xvZ19pbmZvKCJ0cnlpbmcgdG8gY29ubmVjdCB0byBkYXRh YmFzZSBcIiVzXCIiLCAidGVtcGxhdGUxIik7CisKKwkJCQljb25uID0gQ29ubmVjdERhdGFiYXNl KCJ0ZW1wbGF0ZTEiLCBOVUxMLCBvcHRzLT5jcGFyYW1zLnBnaG9zdCwKKwkJCQkJCW9wdHMtPmNw YXJhbXMucGdwb3J0LCBvcHRzLT5jcGFyYW1zLnVzZXJuYW1lLCBUUklfREVGQVVMVCwKKwkJCQkJ CWZhbHNlLCBwcm9nbmFtZSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7CisJCQl9CisJCX0KKwl9 CisKKwkvKgorCSAqIGZpbHRlciB0aGUgZGIgbGlzdCBhY2NvcmRpbmcgdG8gdGhlIGV4Y2x1ZGUg cGF0dGVybnMKKwkgKi8KKwludW1fZGJfcmVzdG9yZSA9IGdldF9kYm5hbWVzX2xpc3RfdG9fcmVz dG9yZShjb25uLCAmZGJuYW1lX29pZF9saXN0LAorCQkJCQkJCQkJCQkJIGRiX2V4Y2x1ZGVfcGF0 dGVybnMpOworCisJLyogQ2xvc2UgdGhlIGRiIGNvbm5lY3Rpb24gYXMgd2UgYXJlIGRvbmUgd2l0 aCBnbG9iYWxzIGFuZCBwYXR0ZXJucy4gKi8KKwlpZiAoY29ubikKKwkJUFFmaW5pc2goY29ubik7 CisKKwkvKiBPcGVuIHRvYy5kYXQgZmlsZSBhbmQgZXhlY3V0ZS9hcHBlbmQgYWxsIHRoZSBnbG9i YWwgc3FsIGNvbW1hbmRzLiAqLworCW5fZXJyb3JzX3RvdGFsID0gIHJlc3RvcmVfZ2xvYmFsX29i amVjdHMoZ2xvYmFsX3BhdGgsIG9wdHMsIG51bVdvcmtlcnMsIGZhbHNlLCAwLCBmYWxzZSk7CisK KwkvKiBFeGl0IGlmIG5vIGRiIG5lZWRzIHRvIGJlIHJlc3RvcmVkLiAqLworCWlmIChkYm5hbWVf b2lkX2xpc3QuaGVhZCA9PSBOVUxMIHx8IG51bV9kYl9yZXN0b3JlID09IDApCisJeworCQlwZ19s b2dfaW5mbyhuZ2V0dGV4dCgibm8gZGF0YWJhc2UgbmVlZHMgcmVzdG9yaW5nIG91dCBvZiAlZCBk YXRhYmFzZSIsCisJCQkJCQkJICJubyBkYXRhYmFzZSBuZWVkcyByZXN0b3Jpbmcgb3V0IG9mICVk IGRhdGFiYXNlcyIsIG51bV90b3RhbF9kYiksCisJCQkJCW51bV90b3RhbF9kYik7CisJCXJldHVy biBuX2Vycm9yc190b3RhbDsKKwl9CisKKwlwZ19sb2dfaW5mbygibmVlZCB0byByZXN0b3JlICVk IGRhdGFiYXNlcyBvdXQgb2YgJWQgZGF0YWJhc2VzIiwgbnVtX2RiX3Jlc3RvcmUsIG51bV90b3Rh bF9kYik7CisKKwkvKgorCSAqIFdlIGhhdmUgYSBsaXN0IG9mIGRhdGFiYXNlcyB0byByZXN0b3Jl IGFmdGVyIHByb2Nlc3NpbmcgdGhlCisJICogZXhjbHVkZS1kYXRhYmFzZSBzd2l0Y2goZXMpLiAg Tm93IHdlIGNhbiByZXN0b3JlIHRoZW0gb25lIGJ5IG9uZS4KKwkgKi8KKwlmb3IgKFNpbXBsZVB0 ckxpc3RDZWxsICpkYl9jZWxsID0gZGJuYW1lX29pZF9saXN0LmhlYWQ7CisJCSBkYl9jZWxsOyBk Yl9jZWxsID0gZGJfY2VsbC0+bmV4dCkKKwl7CisJCURiT2lkTmFtZSAgKmRiaWRuYW1lID0gKERi T2lkTmFtZSAqKSBkYl9jZWxsLT5wdHI7CisJCWNoYXIJCXN1YmRpcnBhdGhbTUFYUEdQQVRIXTsK KwkJY2hhcgkJc3ViZGlyZGJwYXRoW01BWFBHUEFUSF07CisJCWNoYXIJCWRiZmlsZW5hbWVbTUFY UEdQQVRIXTsKKwkJaW50CQkJbl9lcnJvcnM7CisKKwkJLyogaWdub3JlIGRicyBtYXJrZWQgZm9y IHNraXBwaW5nICovCisJCWlmIChkYmlkbmFtZS0+b2lkID09IEludmFsaWRPaWQpCisJCQljb250 aW51ZTsKKworCQkvKgorCQkgKiBXZSBuZWVkIHRvIHJlc2V0IG92ZXJyaWRlX2RibmFtZSBzbyB0 aGF0IG9iamVjdHMgY2FuIGJlIHJlc3RvcmVkCisJCSAqIGludG8gYW4gYWxyZWFkeSBjcmVhdGVk IGRhdGFiYXNlLiAodXNlZCB3aXRoIC1kLy0tZGJuYW1lIG9wdGlvbikKKwkJICovCisJCWlmIChv cHRzLT5jcGFyYW1zLm92ZXJyaWRlX2RibmFtZSkKKwkJeworCQkJcGZyZWUob3B0cy0+Y3BhcmFt cy5vdmVycmlkZV9kYm5hbWUpOworCQkJb3B0cy0+Y3BhcmFtcy5vdmVycmlkZV9kYm5hbWUgPSBO VUxMOworCQl9CisKKwkJc25wcmludGYoc3ViZGlyZGJwYXRoLCBNQVhQR1BBVEgsICIlcy9kYXRh YmFzZXMiLCBpbnB1dEZpbGVTcGVjKTsKKworCQkvKgorCQkgKiBMb29rIGZvciB0aGUgZGF0YWJh c2UgZHVtcCBmaWxlL2Rpci4gSWYgdGhlcmUgaXMgYW4ge29pZH0udGFyIG9yCisJCSAqIHtvaWR9 LmRtcCBmaWxlLCB1c2UgaXQuIE90aGVyd2lzZSB0cnkgdG8gdXNlIGEgZGlyZWN0b3J5IGNhbGxl ZAorCQkgKiB7b2lkfQorCQkgKi8KKwkJc25wcmludGYoZGJmaWxlbmFtZSwgTUFYUEdQQVRILCAi JXUudGFyIiwgZGJpZG5hbWUtPm9pZCk7CisJCWlmIChmaWxlX2V4aXN0c19pbl9kaXJlY3Rvcnko c3ViZGlyZGJwYXRoLCBkYmZpbGVuYW1lKSkKKwkJCXNucHJpbnRmKHN1YmRpcnBhdGgsIE1BWFBH UEFUSCwgIiVzL2RhdGFiYXNlcy8ldS50YXIiLCBpbnB1dEZpbGVTcGVjLCBkYmlkbmFtZS0+b2lk KTsKKwkJZWxzZQorCQl7CisJCQlzbnByaW50ZihkYmZpbGVuYW1lLCBNQVhQR1BBVEgsICIldS5k bXAiLCBkYmlkbmFtZS0+b2lkKTsKKworCQkJaWYgKGZpbGVfZXhpc3RzX2luX2RpcmVjdG9yeShz dWJkaXJkYnBhdGgsIGRiZmlsZW5hbWUpKQorCQkJCXNucHJpbnRmKHN1YmRpcnBhdGgsIE1BWFBH UEFUSCwgIiVzL2RhdGFiYXNlcy8ldS5kbXAiLCBpbnB1dEZpbGVTcGVjLCBkYmlkbmFtZS0+b2lk KTsKKwkJCWVsc2UKKwkJCQlzbnByaW50ZihzdWJkaXJwYXRoLCBNQVhQR1BBVEgsICIlcy9kYXRh YmFzZXMvJXUiLCBpbnB1dEZpbGVTcGVjLCBkYmlkbmFtZS0+b2lkKTsKKwkJfQorCisJCXBnX2xv Z19pbmZvKCJyZXN0b3JpbmcgZGF0YWJhc2UgXCIlc1wiIiwgZGJpZG5hbWUtPnN0cik7CisKKwkJ LyogSWYgZGF0YWJhc2UgaXMgYWxyZWFkeSBjcmVhdGVkLCB0aGVuIGRvbid0IHNldCBjcmVhdGVE QiBmbGFnLiAqLworCQlpZiAob3B0cy0+Y3BhcmFtcy5kYm5hbWUpCisJCXsKKwkJCVBHY29ubgkg ICAqdGVzdF9jb25uOworCisJCQl0ZXN0X2Nvbm4gPSBDb25uZWN0RGF0YWJhc2UoZGJpZG5hbWUt PnN0ciwgTlVMTCwgb3B0cy0+Y3BhcmFtcy5wZ2hvc3QsCisJCQkJCQkJCQkJb3B0cy0+Y3BhcmFt cy5wZ3BvcnQsIG9wdHMtPmNwYXJhbXMudXNlcm5hbWUsIFRSSV9ERUZBVUxULAorCQkJCQkJCQkJ CWZhbHNlLCBwcm9nbmFtZSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7CisJCQlpZiAodGVzdF9j b25uKQorCQkJeworCQkJCVBRZmluaXNoKHRlc3RfY29ubik7CisKKwkJCQkvKiBVc2UgYWxyZWFk eSBjcmVhdGVkIGRhdGFiYXNlIGZvciBjb25uZWN0aW9uLiAqLworCQkJCW9wdHMtPmNyZWF0ZURC ID0gMDsKKwkJCQlvcHRzLT5jcGFyYW1zLmRibmFtZSA9IGRiaWRuYW1lLT5zdHI7CisJCQl9CisJ CQllbHNlCisJCQl7CisJCQkJLyogd2UnbGwgaGF2ZSB0byBjcmVhdGUgaXQgKi8KKwkJCQlvcHRz LT5jcmVhdGVEQiA9IDE7CisJCQkJb3B0cy0+Y3BhcmFtcy5kYm5hbWUgPSBjb25uZWN0ZWRfZGI7 CisJCQl9CisJCX0KKworCQkvKgorCQkgKiBSZXNldCBmbGFncyAtIG1pZ2h0IGhhdmUgYmVlbiBy ZXNldCBpbiBwZ19iYWNrdXBfYXJjaGl2ZXIuYyBieSB0aGUKKwkJICogcHJldmlvdXMgcmVzdG9y ZS4KKwkJICovCisJCW9wdHMtPmR1bXBEYXRhID0gZHVtcERhdGE7CisJCW9wdHMtPmR1bXBTY2hl bWEgPSBkdW1wU2NoZW1hOworCQlvcHRzLT5kdW1wU3RhdGlzdGljcyA9IGR1bXBTdGF0aXN0aWNz OworCisJCS8qIFJlc3RvcmUgdGhlIHNpbmdsZSBkYXRhYmFzZS4gKi8KKwkJbl9lcnJvcnMgPSBy ZXN0b3JlX29uZV9kYXRhYmFzZShzdWJkaXJwYXRoLCBvcHRzLCBudW1Xb3JrZXJzLCB0cnVlLCAx LCBmYWxzZSk7CisKKwkJLyogUHJpbnQgYSBzdW1tYXJ5IG9mIGlnbm9yZWQgZXJyb3JzIGR1cmlu ZyBzaW5nbGUgZGF0YWJhc2UgcmVzdG9yZS4gKi8KKwkJaWYgKG5fZXJyb3JzKQorCQl7CisJCQlu X2Vycm9yc190b3RhbCArPSBuX2Vycm9yczsKKwkJCXBnX2xvZ193YXJuaW5nKCJlcnJvcnMgaWdu b3JlZCBvbiBkYXRhYmFzZSBcIiVzXCIgcmVzdG9yZTogJWQiLCBkYmlkbmFtZS0+c3RyLCBuX2Vy cm9ycyk7CisJCX0KKworCQljb3VudCsrOworCX0KKworCS8qIExvZyBudW1iZXIgb2YgcHJvY2Vz c2VkIGRhdGFiYXNlcy4gKi8KKwlwZ19sb2dfaW5mbygibnVtYmVyIG9mIHJlc3RvcmVkIGRhdGFi YXNlcyBpcyAlZCIsIG51bV9kYl9yZXN0b3JlKTsKKworCS8qIEZyZWUgZGJuYW1lIGFuZCBkYm9p ZCBsaXN0LiAqLworCXNpbXBsZV9wdHJfbGlzdF9kZXN0cm95KCZkYm5hbWVfb2lkX2xpc3QpOwor CisJcmV0dXJuIG5fZXJyb3JzX3RvdGFsOworfQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1w L3QvMDAxX2Jhc2ljLnBsIGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsCm9sZCBtb2Rl IDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggMzdkODkzZDVlNmEuLjA4M2Y1YzViZjlkCi0t LSBhL3NyYy9iaW4vcGdfZHVtcC90LzAwMV9iYXNpYy5wbAorKysgYi9zcmMvYmluL3BnX2R1bXAv dC8wMDFfYmFzaWMucGwKQEAgLTI0NCw0ICsyNDQsMzEgQEAgY29tbWFuZF9mYWlsc19saWtlKAog CSdwZ19kdW1wYWxsOiBvcHRpb24gLS1leGNsdWRlLWRhdGFiYXNlIGNhbm5vdCBiZSB1c2VkIHRv Z2V0aGVyIHdpdGggLWcvLS1nbG9iYWxzLW9ubHknCiApOwogCitjb21tYW5kX2ZhaWxzX2xpa2Uo CisJWyAncGdfZHVtcGFsbCcsICctLWZvcm1hdCcsICd4JyBdLAorCXFyL1xRcGdfZHVtcGFsbDog ZXJyb3I6IHVucmVjb2duaXplZCBvdXRwdXQgZm9ybWF0ICJ4IjtcRS8sCisJJ3BnX2R1bXBhbGw6 IHVucmVjb2duaXplZCBvdXRwdXQgZm9ybWF0Jyk7CisKK2NvbW1hbmRfZmFpbHNfbGlrZSgKKwlb ICdwZ19kdW1wYWxsJywgJy0tZm9ybWF0JywgJ2QnLCAnLS1yZXN0cmljdC1rZXk9dXUnLCAnLWYg ZHVtcGZpbGUnIF0sCisJcXIvXFFwZ19kdW1wYWxsOiBlcnJvcjogb3B0aW9uIC0tcmVzdHJpY3Qt a2V5IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCAtLWZvcm1hdD1wbGFpblxFLywKKwkncGdfZHVtcGFs bDogLS1yZXN0cmljdC1rZXkgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIHBsYWluIGR1bXAgZm9ybWF0 Jyk7CisKK2NvbW1hbmRfZmFpbHNfbGlrZSgKKwlbICdwZ19yZXN0b3JlJywgJy0tZXhjbHVkZS1k YXRhYmFzZT1mb28nLCAnLS1nbG9iYWxzLW9ubHknLCAnLWQnLCAneHh4JyBdLAorCXFyL1xRcGdf cmVzdG9yZTogZXJyb3I6IG9wdGlvbiAtLWV4Y2x1ZGUtZGF0YWJhc2UgY2Fubm90IGJlIHVzZWQg dG9nZXRoZXIgd2l0aCAtZ1wvLS1nbG9iYWxzLW9ubHlcRS8sCisJJ3BnX3Jlc3RvcmU6IG9wdGlv biAtLWV4Y2x1ZGUtZGF0YWJhc2UgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtZy8tLWds b2JhbHMtb25seScKKyk7CisKK2NvbW1hbmRfZmFpbHNfbGlrZSgKKwlbICdwZ19yZXN0b3JlJywg Jy0tZXhjbHVkZS1kYXRhYmFzZT1mb28nLCAnLWQnLCAneHh4JywgJ2R1bXBkaXInIF0sCisJcXIv XFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9uIC0tZXhjbHVkZS1kYXRhYmFzZSBjYW4gYmUgdXNl ZCBvbmx5IHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wYWxsXEUv LAorCSdXaGVuIG9wdGlvbiAtLWV4Y2x1ZGUtZGF0YWJhc2UgaXMgdXNlZCBpbiBwZ19yZXN0b3Jl IHdpdGggZHVtcCBvZiBwZ19kdW1wJworKTsKKworY29tbWFuZF9mYWlsc19saWtlKAorCVsgJ3Bn X3Jlc3RvcmUnLCAnLS1nbG9iYWxzLW9ubHknLCAnLWQnLCAneHh4JywgJ2R1bXBkaXInIF0sCisJ cXIvXFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9uIC1nXC8tLWdsb2JhbHMtb25seSBjYW4gYmUg dXNlZCBvbmx5IHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wYWxs XEUvLAorCSdXaGVuIG9wdGlvbiAtLWdsb2JhbHMtb25seSBpcyBub3QgdXNlZCBpbiBwZ19yZXN0 b3JlIHdpdGggZHVtcCBvZiBwZ19kdW1wJworKTsKIGRvbmVfdGVzdGluZygpOwpkaWZmIC0tZ2l0 IGEvc3JjL2Jpbi9wZ19kdW1wL3QvMDA3X3BnX2R1bXBhbGwucGwgYi9zcmMvYmluL3BnX2R1bXAv dC8wMDdfcGdfZHVtcGFsbC5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAw MC4uM2M3ZDJhZDdjNTMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDdf cGdfZHVtcGFsbC5wbApAQCAtMCwwICsxLDM5NiBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjEtMjAy NSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKwordXNlIHN0cmljdDsKK3Vz ZSB3YXJuaW5ncyBGQVRBTCA9PiAnYWxsJzsKKwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0 ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsKKworbXkg JHRlbXBkaXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczo6dGVtcGRpcjsKK215ICRydW5fZGIg PSAncG9zdGdyZXMnOworbXkgJHNlcCA9ICR3aW5kb3dzX29zID8gIlxcIiA6ICIvIjsKKworIyBU YWJsZXNwYWNlIGxvY2F0aW9ucyB1c2VkIGJ5ICJyZXN0b3JlX3RhYmxlc3BhY2UiIHRlc3QgY2Fz ZS4KK215ICR0YWJsZXNwYWNlMSA9ICIke3RlbXBkaXJ9JHtzZXB9dGJsMSI7CitteSAkdGFibGVz cGFjZTIgPSAiJHt0ZW1wZGlyfSR7c2VwfXRibDIiOworbWtkaXIoJHRhYmxlc3BhY2UxKSB8fCBk aWUgIm1rZGlyICR0YWJsZXNwYWNlMSAkISI7Citta2RpcigkdGFibGVzcGFjZTIpIHx8IGRpZSAi bWtkaXIgJHRhYmxlc3BhY2UyICQhIjsKKworIyBTY2FwZSB0YWJsZXNwYWNlIGxvY2F0aW9ucyBv biBXaW5kb3dzLgorJHRhYmxlc3BhY2UxID0gJHdpbmRvd3Nfb3MgPyAoJHRhYmxlc3BhY2UxID1+ IHMvXFwvXFxcXC9ncikgOiAkdGFibGVzcGFjZTE7CiskdGFibGVzcGFjZTIgPSAkd2luZG93c19v cyA/ICgkdGFibGVzcGFjZTIgPX4gcy9cXC9cXFxcL2dyKSA6ICR0YWJsZXNwYWNlMjsKKworIyBX aGVyZSBwZ19kdW1wYWxsIHdpbGwgYmUgZXhlY3V0ZWQuCitteSAkbm9kZSA9IFBvc3RncmVTUUw6 OlRlc3Q6OkNsdXN0ZXItPm5ldygnbm9kZScpOworJG5vZGUtPmluaXQ7Ciskbm9kZS0+c3RhcnQ7 CisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjCisjIERlZmluaXRpb24gb2YgdGhlIHBnX2R1bXBhbGwgdGVzdCBjYXNlcyB0 byBydW4uCisjCisjIEVhY2ggb2YgdGhlc2UgdGVzdCBjYXNlcyBhcmUgbmFtZWQgYW5kIHRob3Nl IG5hbWVzIGFyZSB1c2VkIGZvciBmYWlsCisjIHJlcG9ydGluZyBhbmQgYWxzbyB0byBzYXZlIHRo ZSBkdW1wIGFuZCByZXN0b3JlIGluZm9ybWF0aW9uIG5lZWRlZCBmb3IgdGhlCisjIHRlc3QgdG8g YXNzZXJ0LgorIworIyBUaGUgInNldHVwX3NxbCIgaXMgYSBwc3FsIHZhbGlkIHNjcmlwdCB0aGF0 IGNvbnRhaW5zIFNRTCBjb21tYW5kcyB0byBleGVjdXRlCisjIGJlZm9yZSBvZiBhY3R1YWxseSBl eGVjdXRlIHRoZSB0ZXN0cy4gVGhlIHNldHVwcyBhcmUgYWxsIGV4ZWN1dGVkIGJlZm9yZSBvZgor IyBhbnkgdGVzdCBleGVjdXRpb24uCisjCisjIFRoZSAiZHVtcF9jbWQiIGFuZCAicmVzdG9yZV9j bWQiIGFyZSB0aGUgY29tbWFuZHMgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkLiBUaGUKKyMgInJlc3Rv cmVfY21kIiBtdXN0IGhhdmUgdGhlIC0tZmlsZSBmbGFnIHRvIHNhdmUgdGhlIHJlc3RvcmUgb3V0 cHV0IHNvIHRoYXQgd2UKKyMgY2FuIGFzc2VydCBvbiBpdC4KKyMKKyMgVGhlICJsaWtlIiBhbmQg InVubGlrZSIgaXMgYSByZWdleHAgdGhhdCBpcyB1c2VkIHRvIG1hdGNoIHRoZSBwZ19yZXN0b3Jl CisjIG91dHB1dC4gSXQgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBvZiB0aGVuIGZpbGxlZCBwZXIg dGVzdCBjYXNlcyBidXQgaXQgYWxzbworIyBjYW4gaGF2ZSBib3RoLiBTZWUgImV4Y2x1ZGluZ19k YXRhYmFzZXMiIHRlc3QgY2FzZSBmb3IgZXhhbXBsZS4KK215ICVwZ2R1bXBhbGxfcnVucyA9ICgK KwlyZXN0b3JlX3JvbGVzID0+IHsKKwkJc2V0dXBfc3FsID0+ICcKKwkJQ1JFQVRFIFJPTEUgZHVt cGFsbCBXSVRIIEVOQ1JZUFRFRCBQQVNTV09SRCBcJ2FkbWluXCcgU1VQRVJVU0VSOworCQlDUkVB VEUgUk9MRSBkdW1wYWxsMiBXSVRIIFJFUExJQ0FUSU9OIENPTk5FQ1RJT04gTElNSVQgMTA7JywK KwkJZHVtcF9jbWQgPT4gWworCQkJJ3BnX2R1bXBhbGwnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGly ZWN0b3J5JywKKwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9yZXN0b3JlX3JvbGVzIiwKKwkJXSwK KwkJcmVzdG9yZV9jbWQgPT4gWworCQkJJ3BnX3Jlc3RvcmUnLCAnLUMnLAorCQkJJy0tZm9ybWF0 JyA9PiAnZGlyZWN0b3J5JywKKwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9yZXN0b3JlX3JvbGVz LnNxbCIsCisJCQkiJHRlbXBkaXIvcmVzdG9yZV9yb2xlcyIsCisJCV0sCisJCWxpa2UgPT4gcXIv CisJCQlccypcUUNSRUFURSBST0xFIGR1bXBhbGwyO1xFCisJCQlccypcUUFMVEVSIFJPTEUgZHVt cGFsbDIgV0lUSCBOT1NVUEVSVVNFUiBJTkhFUklUIE5PQ1JFQVRFUk9MRSBOT0NSRUFURURCIE5P TE9HSU4gUkVQTElDQVRJT04gTk9CWVBBU1NSTFMgQ09OTkVDVElPTiBMSU1JVCAxMDtcRQorCQkv eG0KKwl9LAorCisJcmVzdG9yZV90YWJsZXNwYWNlID0+IHsKKwkJc2V0dXBfc3FsID0+ICIKKwkJ Q1JFQVRFIFJPTEUgdGFwOworCQlDUkVBVEUgVEFCTEVTUEFDRSB0YmwxIE9XTkVSIHRhcCBMT0NB VElPTiAnJHRhYmxlc3BhY2UxJzsKKwkJQ1JFQVRFIFRBQkxFU1BBQ0UgdGJsMiBPV05FUiB0YXAg TE9DQVRJT04gJyR0YWJsZXNwYWNlMicgV0lUSCAoc2VxX3BhZ2VfY29zdD0xLjApOyIsCisJCWR1 bXBfY21kID0+IFsKKwkJCSdwZ19kdW1wYWxsJywKKwkJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9y eScsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvcmVzdG9yZV90YWJsZXNwYWNlIiwKKwkJXSwK KwkJcmVzdG9yZV9jbWQgPT4gWworCQkJJ3BnX3Jlc3RvcmUnLCAnLUMnLAorCQkJJy0tZm9ybWF0 JyA9PiAnZGlyZWN0b3J5JywKKwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9yZXN0b3JlX3RhYmxl c3BhY2Uuc3FsIiwKKwkJCSIkdGVtcGRpci9yZXN0b3JlX3RhYmxlc3BhY2UiLAorCQldLAorCQkj IE1hdGNoICJFIiBhcyBvcHRpb25hbCBzaW5jZSBpdCBpcyBhZGRlZCBvbiBMT0NBVElPTiB3aGVu IHJ1bm5pbmcgb24KKwkJIyBXaW5kb3dzLgorCQlsaWtlID0+IHFyL14KKwkJCVxuXFFDUkVBVEUg VEFCTEVTUEFDRSB0YmwyIE9XTkVSIHRhcCBMT0NBVElPTiBcRSg/OkUpP1xRJyR0YWJsZXNwYWNl Mic7XEUKKwkJCVxuXFFBTFRFUiBUQUJMRVNQQUNFIHRibDIgU0VUIChzZXFfcGFnZV9jb3N0PTEu MCk7XEUKKwkJL3htLAorCX0sCisKKwlyZXN0b3JlX2dyYW50cyA9PiB7CisJCXNldHVwX3NxbCA9 PiAiCisJCUNSRUFURSBEQVRBQkFTRSB0YXBncmFudHNkYjsKKwkJQ1JFQVRFIFNDSEVNQSBwcml2 YXRlOworCQlDUkVBVEUgU0VRVUVOQ0Ugc2VyaWFsIFNUQVJUIDEwMTsKKwkJQ1JFQVRFIEZVTkNU SU9OIGZuKCkgUkVUVVJOUyB2b2lkIEFTIFwkXCQKKwkJQkVHSU4KKwkJRU5EOworCQlcJFwkIExB TkdVQUdFIHBscGdzcWw7CisJCUNSRUFURSBST0xFIHN1cGVyOworCQlDUkVBVEUgUk9MRSBncmFu dDE7CisJCUNSRUFURSBST0xFIGdyYW50MjsKKwkJQ1JFQVRFIFJPTEUgZ3JhbnQzOworCQlDUkVB VEUgUk9MRSBncmFudDQ7CisJCUNSRUFURSBST0xFIGdyYW50NTsKKwkJQ1JFQVRFIFJPTEUgZ3Jh bnQ2OworCQlDUkVBVEUgUk9MRSBncmFudDc7CisJCUNSRUFURSBST0xFIGdyYW50ODsKKworCQlD UkVBVEUgVEFCTEUgdCAoaWQgaW50KTsKKwkJSU5TRVJUIElOVE8gdCBWQUxVRVMgKDEpLCAoMiks ICgzKSwgKDQpOworCisJCUdSQU5UIFNFTEVDVCBPTiBUQUJMRSB0IFRPIGdyYW50MTsKKwkJR1JB TlQgSU5TRVJUIE9OIFRBQkxFIHQgVE8gZ3JhbnQyOworCQlHUkFOVCBBTEwgUFJJVklMRUdFUyBP TiBUQUJMRSB0IHRvIGdyYW50MzsKKwkJR1JBTlQgQ09OTkVDVCwgQ1JFQVRFIE9OIERBVEFCQVNF IHRhcGdyYW50c2RiIFRPIGdyYW50NDsKKwkJR1JBTlQgVVNBR0UsIENSRUFURSBPTiBTQ0hFTUEg cHJpdmF0ZSBUTyBncmFudDU7CisJCUdSQU5UIFVTQUdFLCBTRUxFQ1QsIFVQREFURSBPTiBTRVFV RU5DRSBzZXJpYWwgVE8gZ3JhbnQ2OworCQlHUkFOVCBzdXBlciBUTyBncmFudDc7CisJCUdSQU5U IEVYRUNVVEUgT04gRlVOQ1RJT04gZm4oKSBUTyBncmFudDg7CisJCSIsCisJCWR1bXBfY21kID0+ IFsKKwkJCSdwZ19kdW1wYWxsJywKKwkJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCQkn LS1maWxlJyA9PiAiJHRlbXBkaXIvcmVzdG9yZV9ncmFudHMiLAorCQldLAorCQlyZXN0b3JlX2Nt ZCA9PiBbCisJCQkncGdfcmVzdG9yZScsICctQycsCisJCQknLS1mb3JtYXQnID0+ICdkaXJlY3Rv cnknLAorCQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL3Jlc3RvcmVfZ3JhbnRzLnNxbCIsCisJCQki JHRlbXBkaXIvcmVzdG9yZV9ncmFudHMiLAorCQldLAorCQlsaWtlID0+IHFyL14KKwkJCVxuXFFH UkFOVCBzdXBlciBUTyBncmFudDcgV0lUSCBJTkhFUklUIFRSVUUgR1JBTlRFRCBCWVxFCisJCQko LipcbikqCisJCQlcblxRR1JBTlQgQUxMIE9OIFNDSEVNQSBwcml2YXRlIFRPIGdyYW50NTtcRQor CQkJKC4qXG4pKgorCQkJXG5cUUdSQU5UIEFMTCBPTiBGVU5DVElPTiBwdWJsaWMuZm4oKSBUTyBn cmFudDg7XEUKKwkJCSguKlxuKSoKKwkJCVxuXFFHUkFOVCBBTEwgT04gU0VRVUVOQ0UgcHVibGlj LnNlcmlhbCBUTyBncmFudDY7XEUKKwkJCSguKlxuKSoKKwkJCVxuXFFHUkFOVCBTRUxFQ1QgT04g VEFCTEUgcHVibGljLnQgVE8gZ3JhbnQxO1xFCisJCQlcblxRR1JBTlQgSU5TRVJUIE9OIFRBQkxF IHB1YmxpYy50IFRPIGdyYW50MjtcRQorCQkJXG5cUUdSQU5UIEFMTCBPTiBUQUJMRSBwdWJsaWMu dCBUTyBncmFudDM7XEUKKwkJCSguKlxuKSoKKwkJCVxuXFFHUkFOVCBDUkVBVEUsQ09OTkVDVCBP TiBEQVRBQkFTRSB0YXBncmFudHNkYiBUTyBncmFudDQ7XEUKKwkJL3htLAorCX0sCisKKwlleGNs dWRpbmdfZGF0YWJhc2VzID0+IHsKKwkJc2V0dXBfc3FsID0+ICdDUkVBVEUgREFUQUJBU0UgZGIx OworCQlcYyBkYjEKKwkJQ1JFQVRFIFRBQkxFIHQxIChpZCBpbnQpOworCQlJTlNFUlQgSU5UTyB0 MSBWQUxVRVMgKDEpLCAoMiksICgzKSwgKDQpOworCQlDUkVBVEUgVEFCTEUgdDIgKGlkIGludCk7 CisJCUlOU0VSVCBJTlRPIHQyIFZBTFVFUyAoMSksICgyKSwgKDMpLCAoNCk7CisKKwkJQ1JFQVRF IERBVEFCQVNFIGRiMjsKKwkJXGMgZGIyCisJCUNSRUFURSBUQUJMRSB0MyAoaWQgaW50KTsKKwkJ SU5TRVJUIElOVE8gdDMgVkFMVUVTICgxKSwgKDIpLCAoMyksICg0KTsKKwkJQ1JFQVRFIFRBQkxF IHQ0IChpZCBpbnQpOworCQlJTlNFUlQgSU5UTyB0NCBWQUxVRVMgKDEpLCAoMiksICgzKSwgKDQp OworCisJCUNSRUFURSBEQVRBQkFTRSBkYmV4MzsKKwkJXGMgZGJleDMKKwkJQ1JFQVRFIFRBQkxF IHQ1IChpZCBpbnQpOworCQlJTlNFUlQgSU5UTyB0NSBWQUxVRVMgKDEpLCAoMiksICgzKSwgKDQp OworCQlDUkVBVEUgVEFCTEUgdDYgKGlkIGludCk7CisJCUlOU0VSVCBJTlRPIHQ2IFZBTFVFUyAo MSksICgyKSwgKDMpLCAoNCk7CisKKwkJQ1JFQVRFIERBVEFCQVNFIGRiZXg0OworCQlcYyBkYmV4 NAorCQlDUkVBVEUgVEFCTEUgdDcgKGlkIGludCk7CisJCUlOU0VSVCBJTlRPIHQ3IFZBTFVFUyAo MSksICgyKSwgKDMpLCAoNCk7CisJCUNSRUFURSBUQUJMRSB0OCAoaWQgaW50KTsKKwkJSU5TRVJU IElOVE8gdDggVkFMVUVTICgxKSwgKDIpLCAoMyksICg0KTsKKworCQlDUkVBVEUgREFUQUJBU0Ug ZGI1OworCQlcYyBkYjUKKwkJQ1JFQVRFIFRBQkxFIHQ5IChpZCBpbnQpOworCQlJTlNFUlQgSU5U TyB0OSBWQUxVRVMgKDEpLCAoMiksICgzKSwgKDQpOworCQlDUkVBVEUgVEFCTEUgdDEwIChpZCBp bnQpOworCQlJTlNFUlQgSU5UTyB0MTAgVkFMVUVTICgxKSwgKDIpLCAoMyksICg0KTsKKwkJJywK KwkJZHVtcF9jbWQgPT4gWworCQkJJ3BnX2R1bXBhbGwnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGly ZWN0b3J5JywKKwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9leGNsdWRpbmdfZGF0YWJhc2VzIiwK KwkJCSctLWV4Y2x1ZGUtZGF0YWJhc2UnID0+ICdkYmV4KicsCisJCV0sCisJCXJlc3RvcmVfY21k ID0+IFsKKwkJCSdwZ19yZXN0b3JlJywgJy1DJywKKwkJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9y eScsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZXhjbHVkaW5nX2RhdGFiYXNlcy5zcWwiLAor CQkJJy0tZXhjbHVkZS1kYXRhYmFzZScgPT4gJ2RiNScsCisJCQkiJHRlbXBkaXIvZXhjbHVkaW5n X2RhdGFiYXNlcyIsCisJCV0sCisJCWxpa2UgPT4gcXIvXgorCQkJXG5cUUNSRUFURSBEQVRBQkFT RSBkYjFcRQorCQkJKC4qXG4pKgorCQkJXG5cUUNSRUFURSBUQUJMRSBwdWJsaWMudDEgKFxFCisJ CQkoLipcbikqCisJCQlcblxRQ1JFQVRFIFRBQkxFIHB1YmxpYy50MiAoXEUKKwkJCSguKlxuKSoK KwkJCVxuXFFDUkVBVEUgREFUQUJBU0UgZGIyXEUKKwkJCSguKlxuKSoKKwkJCVxuXFFDUkVBVEUg VEFCTEUgcHVibGljLnQzIChcRQorCQkJKC4qXG4pKgorCQkJXG5cUUNSRUFURSBUQUJMRSBwdWJs aWMudDQgKC94bSwKKwkJdW5saWtlID0+IHFyL14KKwkJCVxuXFFDUkVBVEUgREFUQUJBU0UgZGIz XEUKKwkJCSguKlxuKSoKKwkJCVxuXFFDUkVBVEUgVEFCTEUgcHVibGljLnQ1IChcRQorCQkJKC4q XG4pKgorCQkJXG5cUUNSRUFURSBUQUJMRSBwdWJsaWMudDYgKFxFCisJCQkoLipcbikqCisJCQlc blxRQ1JFQVRFIERBVEFCQVNFIGRiNFxFCisJCQkoLipcbikqCisJCQlcblxRQ1JFQVRFIFRBQkxF IHB1YmxpYy50NyAoXEUKKwkJCSguKlxuKSoKKwkJCVxuXFFDUkVBVEUgVEFCTEUgcHVibGljLnQ4 IChcRQorCQkJXG5cUUNSRUFURSBEQVRBQkFTRSBkYjVcRQorCQkJKC4qXG4pKgorCQkJXG5cUUNS RUFURSBUQUJMRSBwdWJsaWMudDkgKFxFCisJCQkoLipcbikqCisJCQlcblxRQ1JFQVRFIFRBQkxF IHB1YmxpYy50MTAgKFxFCisJCS94bSwKKwl9LAorCisJZm9ybWF0X2RpcmVjdG9yeSA9PiB7CisJ CXNldHVwX3NxbCA9PiAiQ1JFQVRFIFRBQkxFIGZvcm1hdF9kaXJlY3RvcnkoYSBpbnQsIGIgYm9v bGVhbiwgYyB0ZXh0KTsKKwkJSU5TRVJUIElOVE8gZm9ybWF0X2RpcmVjdG9yeSBWQUxVRVMgKDEs IHRydWUsICduYW1lMScpLCAoMiwgZmFsc2UsICduYW1lMicpOyIsCisJCWR1bXBfY21kID0+IFsK KwkJCSdwZ19kdW1wYWxsJywKKwkJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCQknLS1m aWxlJyA9PiAiJHRlbXBkaXIvZm9ybWF0X2RpcmVjdG9yeSIsCisJCV0sCisJCXJlc3RvcmVfY21k ID0+IFsKKwkJCSdwZ19yZXN0b3JlJywgJy1DJywKKwkJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9y eScsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZm9ybWF0X2RpcmVjdG9yeS5zcWwiLAorCQkJ IiR0ZW1wZGlyL2Zvcm1hdF9kaXJlY3RvcnkiLAorCQldLAorCQlsaWtlID0+IHFyL15cblxRQ09Q WSBwdWJsaWMuZm9ybWF0X2RpcmVjdG9yeSAoYSwgYiwgYykgRlJPTSBzdGRpbjsveG0KKwl9LAor CisJZm9ybWF0X3RhciA9PiB7CisJCXNldHVwX3NxbCA9PiAiQ1JFQVRFIFRBQkxFIGZvcm1hdF90 YXIoYSBpbnQsIGIgYm9vbGVhbiwgYyB0ZXh0KTsKKwkJSU5TRVJUIElOVE8gZm9ybWF0X3RhciBW QUxVRVMgKDEsIGZhbHNlLCAnbmFtZTMnKSwgKDIsIHRydWUsICduYW1lNCcpOyIsCisJCWR1bXBf Y21kID0+IFsKKwkJCSdwZ19kdW1wYWxsJywKKwkJCSctLWZvcm1hdCcgPT4gJ3RhcicsCisJCQkn LS1maWxlJyA9PiAiJHRlbXBkaXIvZm9ybWF0X3RhciIsCisJCV0sCisJCXJlc3RvcmVfY21kID0+ IFsKKwkJCSdwZ19yZXN0b3JlJywgJy1DJywKKwkJCSctLWZvcm1hdCcgPT4gJ3RhcicsCisJCQkn LS1maWxlJyA9PiAiJHRlbXBkaXIvZm9ybWF0X3Rhci5zcWwiLAorCQkJIiR0ZW1wZGlyL2Zvcm1h dF90YXIiLAorCQldLAorCQlsaWtlID0+IHFyL15cblxRQ09QWSBwdWJsaWMuZm9ybWF0X3RhciAo YSwgYiwgYykgRlJPTSBzdGRpbjsveG0KKwl9LAorCisJZm9ybWF0X2N1c3RvbSA9PiB7CisJCXNl dHVwX3NxbCA9PiAiQ1JFQVRFIFRBQkxFIGZvcm1hdF9jdXN0b20oYSBpbnQsIGIgYm9vbGVhbiwg YyB0ZXh0KTsKKwkJSU5TRVJUIElOVE8gZm9ybWF0X2N1c3RvbSBWQUxVRVMgKDEsIGZhbHNlLCAn bmFtZTUnKSwgKDIsIHRydWUsICduYW1lNicpOyIsCisJCWR1bXBfY21kID0+IFsKKwkJCSdwZ19k dW1wYWxsJywKKwkJCSctLWZvcm1hdCcgPT4gJ2N1c3RvbScsCisJCQknLS1maWxlJyA9PiAiJHRl bXBkaXIvZm9ybWF0X2N1c3RvbSIsCisJCV0sCisJCXJlc3RvcmVfY21kID0+IFsKKwkJCSdwZ19y ZXN0b3JlJywgJy1DJywKKwkJCSctLWZvcm1hdCcgPT4gJ2N1c3RvbScsCisJCQknLS1maWxlJyA9 PiAiJHRlbXBkaXIvZm9ybWF0X2N1c3RvbS5zcWwiLAorCQkJIiR0ZW1wZGlyL2Zvcm1hdF9jdXN0 b20iLAorCQldLAorCQlsaWtlID0+IHFyL14gXG5cUUNPUFkgcHVibGljLmZvcm1hdF9jdXN0b20g KGEsIGIsIGMpIEZST00gc3RkaW47L3htCisJfSwKKworCWR1bXBfZ2xvYmFsc19vbmx5ID0+IHsK KwkJc2V0dXBfc3FsID0+ICJDUkVBVEUgVEFCTEUgZm9ybWF0X2RpcihhIGludCwgYiBib29sZWFu LCBjIHRleHQpOworCQlJTlNFUlQgSU5UTyBmb3JtYXRfZGlyIFZBTFVFUyAoMSwgZmFsc2UsICdu YW1lNScpLCAoMiwgdHJ1ZSwgJ25hbWU2Jyk7IiwKKwkJZHVtcF9jbWQgPT4gWworCQkJJ3BnX2R1 bXBhbGwnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJCSctLWdsb2JhbHMtb25s eScsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZHVtcF9nbG9iYWxzX29ubHkiLAorCQldLAor CQlyZXN0b3JlX2NtZCA9PiBbCisJCQkncGdfcmVzdG9yZScsICctQycsICctLWdsb2JhbHMtb25s eScsCisJCQknLS1mb3JtYXQnID0+ICdkaXJlY3RvcnknLAorCQkJJy0tZmlsZScgPT4gIiR0ZW1w ZGlyL2R1bXBfZ2xvYmFsc19vbmx5LnNxbCIsCisJCQkiJHRlbXBkaXIvZHVtcF9nbG9iYWxzX29u bHkiLAorCQldLAorCQlsaWtlID0+IHFyLworICAgICAgICAgICAgXlxzKlxRQ1JFQVRFIFJPTEUg ZHVtcGFsbDtcRVxzKlxuCisJCQkveG0KKwl9LCk7CisKKyMgRmlyc3QgZXhlY3V0ZSB0aGUgc2V0 dXBfc3FsCitmb3JlYWNoIG15ICRydW4gKHNvcnQga2V5cyAlcGdkdW1wYWxsX3J1bnMpCit7CisJ aWYgKCRwZ2R1bXBhbGxfcnVuc3skcnVufS0+e3NldHVwX3NxbH0pCisJeworCQkkbm9kZS0+c2Fm ZV9wc3FsKCRydW5fZGIsICRwZ2R1bXBhbGxfcnVuc3skcnVufS0+e3NldHVwX3NxbH0pOworCX0K K30KKworIyBFeGVjdXRlIHRoZSB0ZXN0cworZm9yZWFjaCBteSAkcnVuIChzb3J0IGtleXMgJXBn ZHVtcGFsbF9ydW5zKQoreworCSMgQ3JlYXRlIGEgbmV3IHRhcmdldCBjbHVzdGVyIHRvIHBnX3Jl c3RvcmUgZWFjaCB0ZXN0IGNhc2UgcnVuIHNvIHRoYXQgd2UKKwkjIGRvbid0IG5lZWQgdG8gdGFr ZSBjYXJlIG9mIHRoZSBjbGVhbnVwIGZyb20gdGhlIHRhcmdldCBjbHVzdGVyIGFmdGVyIGVhY2gK KwkjIHJ1bi4KKwlteSAkdGFyZ2V0X25vZGUgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5u ZXcoInRhcmdldF8kcnVuIik7CisJJHRhcmdldF9ub2RlLT5pbml0OworCSR0YXJnZXRfbm9kZS0+ c3RhcnQ7CisKKwkjIER1bXBhbGwgZnJvbSBub2RlIGNsdXN0ZXIuCisJJG5vZGUtPmNvbW1hbmRf b2soXEB7ICRwZ2R1bXBhbGxfcnVuc3skcnVufS0+e2R1bXBfY21kfSB9LAorCQkiJHJ1bjogcGdf ZHVtcGFsbCBydW5zIik7CisKKwkjIFJlc3RvcmUgdGhlIGR1bXAgb24gInRhcmdldF9ub2RlIiBj bHVzdGVyLgorCW15IEByZXN0b3JlX2NtZCA9ICgKKwkJQHsgJHBnZHVtcGFsbF9ydW5zeyRydW59 LT57cmVzdG9yZV9jbWR9IH0sCisJCSctLWhvc3QnLCAkdGFyZ2V0X25vZGUtPmhvc3QsICctLXBv cnQnLCAkdGFyZ2V0X25vZGUtPnBvcnQpOworCisJbXkgKCRzdGRvdXQsICRzdGRlcnIpID0gcnVu X2NvbW1hbmQoXEByZXN0b3JlX2NtZCk7CisKKwkjIHBnX3Jlc3RvcmUgLS1maWxlIG91dHB1dCBm aWxlLgorCW15ICRvdXRwdXRfZmlsZSA9IHNsdXJwX2ZpbGUoIiR0ZW1wZGlyLyR7cnVufS5zcWwi KTsKKworCWlmICggICAhKCRwZ2R1bXBhbGxfcnVuc3skcnVufS0+e2xpa2V9KQorCQkmJiAhKCRw Z2R1bXBhbGxfcnVuc3skcnVufS0+e3VubGlrZX0pKQorCXsKKwkJZGllICJtaXNzaW5nIFwibGlr ZVwiIG9yIFwidW5saWtlXCIgaW4gdGVzdCBcIiRydW5cIiI7CisJfQorCisJaWYgKCRwZ2R1bXBh bGxfcnVuc3skcnVufS0+e2xpa2V9KQorCXsKKwkJbGlrZSgkb3V0cHV0X2ZpbGUsICRwZ2R1bXBh bGxfcnVuc3skcnVufS0+e2xpa2V9LCAic2hvdWxkIGR1bXAgJHJ1biIpOworCX0KKworCWlmICgk cGdkdW1wYWxsX3J1bnN7JHJ1bn0tPnt1bmxpa2V9KQorCXsKKwkJdW5saWtlKAorCQkJJG91dHB1 dF9maWxlLAorCQkJJHBnZHVtcGFsbF9ydW5zeyRydW59LT57dW5saWtlfSwKKwkJCSJzaG91bGQg bm90IGR1bXAgJHJ1biIpOworCX0KK30KKworIyBTb21lIG5lZ2F0aXZlIHRlc3QgY2FzZSB3aXRo IGR1bXAgb2YgcGdfZHVtcGFsbCBhbmQgcmVzdG9yZSB1c2luZyBwZ19yZXN0b3JlCisjIHRlc3Qg Y2FzZSAxOiB3aGVuIC1DIGlzIG5vdCB1c2VkIGluIHBnX3Jlc3RvcmUgd2l0aCBkdW1wIG9mIHBn X2R1bXBhbGwKKyRub2RlLT5jb21tYW5kX2ZhaWxzX2xpa2UoCisJWworCQkncGdfcmVzdG9yZScs CisJCSIkdGVtcGRpci9mb3JtYXRfY3VzdG9tIiwKKwkJJy0tZm9ybWF0JyA9PiAnY3VzdG9tJywK KwkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2Vycm9yX3Rlc3Quc3FsIiwKKwldLAorCXFyL1xRcGdf cmVzdG9yZTogZXJyb3I6IG9wdGlvbiAtQ1wvLS1jcmVhdGUgbXVzdCBiZSBzcGVjaWZpZWQgd2hl biByZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXBhbGxcRS8sCisJJ1doZW4g LUMgaXMgbm90IHVzZWQgaW4gcGdfcmVzdG9yZSB3aXRoIGR1bXAgb2YgcGdfZHVtcGFsbCcpOwor CisjIHRlc3QgY2FzZSAyOiBXaGVuIC0tbGlzdCBvcHRpb24gaXMgdXNlZCB3aXRoIGR1bXAgb2Yg cGdfZHVtcGFsbAorJG5vZGUtPmNvbW1hbmRfZmFpbHNfbGlrZSgKKwlbCisJCSdwZ19yZXN0b3Jl JywKKwkJIiR0ZW1wZGlyL2Zvcm1hdF9jdXN0b20iLCAnLUMnLAorCQknLS1mb3JtYXQnID0+ICdj dXN0b20nLAorCQknLS1saXN0JywKKwkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2Vycm9yX3Rlc3Qu c3FsIiwKKwldLAorCXFyL1xRcGdfcmVzdG9yZTogZXJyb3I6IG9wdGlvbiAtbFwvLS1saXN0IGNh bm5vdCBiZSB1c2VkIHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1w YWxsXEUvLAorCSdXaGVuIC0tbGlzdCBpcyB1c2VkIGluIHBnX3Jlc3RvcmUgd2l0aCBkdW1wIG9m IHBnX2R1bXBhbGwnKTsKKworIyB0ZXN0IGNhc2UgMzogV2hlbiBub24tZXhpc3QgZGF0YWJhc2Ug aXMgZ2l2ZW4gd2l0aCAtZCBvcHRpb24KKyRub2RlLT5jb21tYW5kX2ZhaWxzX2xpa2UoCisJWwor CQkncGdfcmVzdG9yZScsCisJCSIkdGVtcGRpci9mb3JtYXRfY3VzdG9tIiwgJy1DJywKKwkJJy0t Zm9ybWF0JyA9PiAnY3VzdG9tJywKKwkJJy1kJyA9PiAnZGJwcScsCisJXSwKKwlxci9cUUZBVEFM OiAgZGF0YWJhc2UgImRicHEiIGRvZXMgbm90IGV4aXN0XEUvLAorCSdXaGVuIG5vbi1leGlzdGVu dCBkYXRhYmFzZSBpcyBnaXZlbiB3aXRoIC1kIG9wdGlvbiBpbiBwZ19yZXN0b3JlIHdpdGggZHVt cCBvZiBwZ19kdW1wYWxsJworKTsKKworJG5vZGUtPnN0b3AoJ2Zhc3QnKTsKKworZG9uZV90ZXN0 aW5nKCk7Ci0tIAoyLjM5LjMKCg== --00000000000034bfc60643cd7ffd--