Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1vDco2-00CZ33-LQ for pgsql-hackers@arkaria.postgresql.org; Tue, 28 Oct 2025 06:03:44 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1vDcn3-00Ax4h-7h for pgsql-hackers@arkaria.postgresql.org; Tue, 28 Oct 2025 06:02:40 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1vDcn2-00Ax4Y-D9 for pgsql-hackers@lists.postgresql.org; Tue, 28 Oct 2025 06:02:39 +0000 Received: from mail-qk1-x732.google.com ([2607:f8b0:4864:20::732]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vDcmz-0049hs-1D for pgsql-hackers@lists.postgresql.org; Tue, 28 Oct 2025 06:02:38 +0000 Received: by mail-qk1-x732.google.com with SMTP id af79cd13be357-89048f76ec2so626848285a.1 for ; Mon, 27 Oct 2025 23:02:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1761631356; x=1762236156; 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=jwomU1NfBVWTt0a8inqbZJqKRRE19bpRCo4Qo16hmxc=; b=ecNkWSLC7qlZfzWheLFdS2tJxmQPgtv3IbXX5905nAx30j0lIBsTOzPbFLVS38FO/n 9gzdFEs0Flc16U6af0S8g+3G8rIUpnjTG6sV2pQ6KBx6SWMk9+oFg82gWwzoA/oQZ+ZV Yq/7nGRS5n7ZUdaMZ2YNDzI+VrPwY1zcKrfD7iNxkBLzctbm0APDgC7enMRjM9ZZpJfy PJBe9NA16oNmQ2zbUrlrVhoqdy3mnXTeq6hTrQzYU5trjznaQxicsZ469nxhLB5lLoJN NbN/rEZLmgcgXZDQKy80wsI2W8/Hf2K7jz6XvOnCX3LmWo0s6klJBayR31ZHRMBzSIdu wSbg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761631356; x=1762236156; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=jwomU1NfBVWTt0a8inqbZJqKRRE19bpRCo4Qo16hmxc=; b=i81svSUV4c24JUKqmB0ZjgT/xZjqknwMaYSAp42rIhVbei/lqk4lRRl8xVX55G74rK CVDucJOG10gGXEeeg7JCBvk2mEPp/2T/U7aS9JtNzugEx/87Tv9Rhslx3a9JDG/3JM/y eM5hIirIFCiSWOgPu1Nsr7giC7jxjO4ADZPR71yTTAfApHvMJuTHy2EflqYBq+XESA3S O1gM1t68UGGSBviyYAhcOYUtTl8DZgmQncP9zU0tkjjfjTL7uSNJaCEQkOL0rV8+6rHJ +KS1zzmPUo3pHaQrSmnM1hja7vMJVjp1wzUg/E0UW2Nro5y3GMRNluEjjsXw08Bj7Os1 jDmw== X-Forwarded-Encrypted: i=1; AJvYcCUX8P5RtcOPiIdm/CTeBKcH+Zy7BAC4sP0Ft5VECo2mcfgiDdZ423KufIiyaW1MgNkAxPwBjbcj9y0FIzYe@lists.postgresql.org X-Gm-Message-State: AOJu0YwlIBhe+edj/Xa6z7LlT1cN+HjxwUgRNYmZW85/gC/tMpGScP1P +WAFaGw0PJPyUI7NO2Or9GczqBvPZgDEmHlcAjM6FH6k2ldiIXRBdcAReJEw4zMHvpMnkcausvH g6AuYB40SDWas1pnLiSLdXGvX3Wv/rLI= X-Gm-Gg: ASbGncuBuVW18XJUNdRNykNc4leN9v29zro5nOT1yn0cwy7634XNvjiV54GPVHXaNUf p2C0QgvNlwLpFDky8aCGYg37kDAQSCM5jt7MX891sTSec0BH6UfTa1uVh0yvMU7mFck+QJVHRiT spXXf/6lQaQxdtgjz+DvyFPhzCm65a2E/x1qXkjGkxTNmf0I9ah/PMxQ2o4DmhgLDoK2PKs4oCi bJjit+jxVmsXmTRrv0HsWp1WNTWXvwZYb0L1nfbP6BP1fzdQiV68rpqHqwpFw== X-Google-Smtp-Source: AGHT+IEwC51ymMJ3hH8+Pne/1uy7QDIuvjzoz9Cv7losJ+IctmzN6x4XS7z7r5zooW0mrDbHZJBlqNv2u2sx5wmmO88= X-Received: by 2002:a05:620a:1913:b0:8a2:234a:17c8 with SMTP id af79cd13be357-8a6f3c36309mr328877985a.12.1761631356224; Mon, 27 Oct 2025 23:02:36 -0700 (PDT) MIME-Version: 1.0 References: <3f22a8bb-29e8-40cc-97a1-309181da2c13@dunslane.net> <20250722005339.ca.nmisch@google.com> <20250725162141.6f.nmisch@google.com> <2225040.1753477169@sss.pgh.pa.us> <20250727235628.e2.nmisch@google.com> <8f2ad50b-ebb7-4adc-997e-25e0ad96ff34@dunslane.net> <2bed001a-462c-42da-9a6b-3c7884502932@dunslane.net> <20250824010811.4d.nmisch@google.com> <82eb35b8-7f07-493b-b689-0934919e1dc3@dunslane.net> In-Reply-To: From: Mahendra Singh Thalor Date: Tue, 28 Oct 2025 11:32:24 +0530 X-Gm-Features: AWmQ_blomrioZ9VRc0o0Tw7iCevlFkA6I9_UxkX4niECMtHTxqPsK02MA7NLAJY Message-ID: Subject: Re: Non-text mode for pg_dumpall To: Andrew Dunstan , tushar Cc: Noah Misch , Tom Lane , =?UTF-8?Q?=C3=81lvaro_Herrera?= , jian he , Srinath Reddy , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="00000000000036b739064231c306" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000036b739064231c306 Content-Type: text/plain; charset="UTF-8" On Thu, 16 Oct 2025 at 16:24, Mahendra Singh Thalor wrote: > > On Wed, 15 Oct 2025 at 23:05, Mahendra Singh Thalor wrote: > > > > On Sun, 24 Aug 2025 at 22:12, Andrew Dunstan wrote: > > > > > > > > > On 2025-08-23 Sa 9:08 PM, Noah Misch wrote: > > > > > > On Wed, Jul 30, 2025 at 02:51:59PM -0400, Andrew Dunstan wrote: > > > > > > OK, now that's reverted we should discuss how to proceed. I had two thoughts > > > - we could use invent a JSON format for the globals, or we could just use > > > the existing archive format. I think the archive format is pretty flexible, > > > and should be able to accommodate this. The downside is it's not humanly > > > readable. The upside is that we don't need to do anything special either to > > > write it or parse it. > > > > > > I would first try to use the existing archiver API, because that makes it > > > harder to miss bugs. Any tension between that API and pg_dumpall is likely to > > > have corresponding tension on the pg_restore side. Resolving that tension > > > will reveal much of the project's scope that remained hidden during the v18 > > > attempt. Perhaps more important than that, using the archiver API means > > > future pg_dump and pg_restore options are more likely to cooperate properly > > > with $SUBJECT. In other words, I want it to be hard to add pg_dump/pg_restore > > > features that malfunction only for $SUBJECT archives. The strength of the > > > archiver architecture shows in how rarely new features need format-specific > > > logic and how rarely format-specific bugs get reported. We've had little or > > > no trouble with e.g. bugs that appear in -Fd but not in -Fc. > > > > > > > > > Yeah, that's what we're going to try. > > > > > > > > > cheers > > > > > > > > > andrew > > > > > > -- > > > Andrew Dunstan > > > EDB: https://www.enterprisedb.com > > > > Thanks Andrew, Noah and all others for feedback. > > > > Based on the above suggestions and discussions, I removed sql commands > > from the global.dat file. For global commands, now we are making > > toc.dat/toc.dmp/toc.tar file based on format specified and based on > > format specified, we are making archive entries for these global > > commands. By this approach, we removed the hard-coded parsing part of > > the global.dat file and we are able to skip DROP DATABASE with the > > globals-only option. > > > > Here, I am attaching a patch for review, testing and feedback. This is > > a WIP patch. I will do some more code cleanup and will add some more > > comments also. Please review this and let me know design level > > feedback. Thanks Tushar Ahuja for some internal testing and feedback. > > > > Hi, > Here, I am attaching an updated patch. In offline discussion, Andrew > reported some test-case failures(Thanks Andrew). I fixed those. > Please let me know feedback for the patch. > Hi, Here I am attaching a re-based patch as v02 was failing on head. Thanks Tushar for the testing. Please review this and let me know feedback. -- Thanks and Regards Mahendra Singh Thalor EnterpriseDB: http://www.enterprisedb.com --00000000000036b739064231c306 Content-Type: application/octet-stream; name="v03-28102025-Non-text-modes-for-pg_dumpall-correspondingly-change.patch" Content-Disposition: attachment; filename="v03-28102025-Non-text-modes-for-pg_dumpall-correspondingly-change.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mha5t61n0 RnJvbSA0NzQ4ODA3NzNjN2ZjNDY3OWVhOTA1NGJkZTU4YzkxMmNlMjc5MjY2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUaGFsb3JNYWhlbmRyYSA8bWFoaTZydW5AZ21haWwuY29tPgpE YXRlOiBUdWUsIDI4IE9jdCAyMDI1IDExOjI3OjQzICswNTMwClN1YmplY3Q6IFtQQVRDSF0gIE5v biB0ZXh0IG1vZGVzIGZvciBwZ19kdW1wYWxsLCBjb3JyZXNwb25kaW5nbHkgY2hhbmdlIAogcGdf cmVzdG9yZQoKICAgIHBnX2R1bXBhbGwgYWNxdWlyZXMgYSBuZXcgLUYvLS1mb3JtYXQgb3B0aW9u LCB3aXRoIHRoZSBzYW1lIG1lYW5pbmdzIGFzCiAgICBwZ19kdW1wLiBUaGUgZGVmYXVsdCBpcyBw LCBtZWFuaW5nIHBsYWluIHRleHQuIEZvciBhbnkgb3RoZXIgdmFsdWUsIGEKICAgIGRpcmVjdG9y eSBpcyBjcmVhdGVkIGNvbnRhaW5pbmcgdHdvIGZpbGVzLCB0b2MuZGF0Ly5kbXAvLnRhciBhbmQg bWFwLmRhdC4gVGhlCiAgICBmaXJzdCBjb250YWlucyBjb21tYW5kcyByZXN0b3JpbmcgdGhlIGds b2JhbCBkYXRhIGJhc2VkIG9uIC1GLCBhbmQgdGhlIHNlY29uZAogICAgY29udGFpbnMgYSBtYXAg ZnJvbSBvaWRzIHRvIGRhdGFiYXNlIG5hbWVzLiBJdCB3aWxsIGFsc28gY29udGFpbiBhCiAgICBz dWJkaXJlY3RvcnkgY2FsbGVkIGRhdGFiYXNlcywgaW5zaWRlIHdoaWNoIGl0IHdpbGwgY3JlYXRl IGFyY2hpdmVzIGluCiAgICB0aGUgc3BlY2lmaWVkIGZvcm1hdCwgbmFtZWQgdXNpbmcgdGhlIGRh dGFiYXNlIG9pZHMuCgogICAgSW4gdGhlc2UgY2FzZXNzIHRoZSAtZiBhcmd1bWVudCBpcyByZXF1 aXJlZC4KCiAgICBJZiBwZ19yZXN0b3JlIGVuY291bnRlcnMgYSBkaXJlY3RvcnkgY29udGFpbmlu ZyBtYXAuZGF0LAogICAgaXQgcmVzdG9yZXMgdGhlIGdsb2JhbCBzZXR0aW5ncyBmcm9tIHRvYy5k YXQvLmRtcC8udGFyIGlmIGV4aXN0LCBhbmQgdGhlbgogICAgcmVzdG9yZXMgZWFjaCBkYXRhYmFz ZS4KCiAgICBwZ19yZXN0b3JlIGFjcXVpcmVzIHR3byBuZXcgb3B0aW9uczogLWcvLS1nbG9iYWxz LW9ubHkgd2hpY2ggc3VwcHJlc3NlcwogICAgcmVzdG9yYXRpb24gb2YgYW55IGRhdGFiYXNlcywg YW5kIC0tZXhjbHVkZS1kYXRhYmFzZSB3aGljaCBpbmhpYml0cwogICAgcmVzdG9yYXRpb24gb2Yg cGFydGljdWFsciBkYXRhYmFzZShzKSBpbiB0aGUgc2FtZSB3YXkgdGhlIHNhbWUgb3B0aW9uCiAg ICB3b3JrcyBpbiBwZ19kdW1wYWxsLgotLS0KLS0tCiBkb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXBh bGwuc2dtbCAgICAgfCAgODkgKysrLQogZG9jL3NyYy9zZ21sL3JlZi9wZ19yZXN0b3JlLnNnbWwg ICAgIHwgIDY2ICsrLQogc3JjL2Jpbi9wZ19kdW1wL2Nvbm5lY3RkYi5jICAgICAgICAgIHwgICAx IC0KIHNyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZCAgICAgICAgICB8ICAgMSArCiBzcmMvYmlu L3BnX2R1bXAvcGFyYWxsZWwuYyAgICAgICAgICAgfCAgMTAgKwogc3JjL2Jpbi9wZ19kdW1wL3Bn X2JhY2t1cC5oICAgICAgICAgIHwgICAyICstCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2Fy Y2hpdmVyLmMgfCAgMjMgKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuaCB8 ICAgMSArCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3Rhci5jICAgICAgfCAgIDIgKy0KIHNy Yy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMgICAgICAgICAgICB8ICAgMiArLQogc3JjL2Jpbi9wZ19k dW1wL3BnX2R1bXBhbGwuYyAgICAgICAgIHwgNjAwICsrKysrKysrKysrKysrKysrKysrKystLS0t LQogc3JjL2Jpbi9wZ19kdW1wL3BnX3Jlc3RvcmUuYyAgICAgICAgIHwgNTkzICsrKysrKysrKysr KysrKysrKysrKysrKystCiBzcmMvYmluL3BnX2R1bXAvdC8wMDFfYmFzaWMucGwgICAgICAgfCAg MTAgKwogc3JjL2Jpbi9wZ19kdW1wL3QvMDA3X3BnX2R1bXBhbGwucGwgIHwgMzk2ICsrKysrKysr KysrKysrKysrKwogMTQgZmlsZXMgY2hhbmdlZCwgMTY1MCBpbnNlcnRpb25zKCspLCAxNDYgZGVs ZXRpb25zKC0pCiBtb2RlIGNoYW5nZSAxMDA2NDQgPT4gMTAwNzU1IHNyYy9iaW4vcGdfZHVtcC90 LzAwMV9iYXNpYy5wbAogY3JlYXRlIG1vZGUgMTAwNzU1IHNyYy9iaW4vcGdfZHVtcC90LzAwN19w Z19kdW1wYWxsLnBsCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wYWxsLnNn bWwgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXBhbGwuc2dtbAppbmRleCA5ZjYzOWY2MWRiMC4u NDA2M2U4OGQzODggMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcGFsbC5zZ21s CisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcGFsbC5zZ21sCkBAIC0xNiw3ICsxNiwxMCBA QCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KIAogIDxyZWZuYW1lZGl2PgogICA8cmVmbmFtZT5w Z19kdW1wYWxsPC9yZWZuYW1lPgotICA8cmVmcHVycG9zZT5leHRyYWN0IGEgPHByb2R1Y3RuYW1l PlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZSBjbHVzdGVyIGludG8gYSBzY3JpcHQg ZmlsZTwvcmVmcHVycG9zZT4KKworICA8cmVmcHVycG9zZT4KKyAgIGV4cG9ydCBhIDxwcm9kdWN0 bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gZGF0YWJhc2UgY2x1c3RlciBhcyBhbiBTUUwg c2NyaXB0IG9yIHRvIG90aGVyIGZvcm1hdHMKKyAgPC9yZWZwdXJwb3NlPgogIDwvcmVmbmFtZWRp dj4KIAogIDxyZWZzeW5vcHNpc2Rpdj4KQEAgLTMzLDcgKzM2LDcgQEAgUG9zdGdyZVNRTCBkb2N1 bWVudGF0aW9uCiAgIDxwYXJhPgogICAgPGFwcGxpY2F0aW9uPnBnX2R1bXBhbGw8L2FwcGxpY2F0 aW9uPiBpcyBhIHV0aWxpdHkgZm9yIHdyaXRpbmcgb3V0CiAgICAoPHF1b3RlPmR1bXBpbmc8L3F1 b3RlPikgYWxsIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gZGF0YWJhc2Vz Ci0gICBvZiBhIGNsdXN0ZXIgaW50byBvbmUgc2NyaXB0IGZpbGUuICBUaGUgc2NyaXB0IGZpbGUg Y29udGFpbnMKKyAgIG9mIGEgY2x1c3RlciBpbnRvIGFuIFNRTCBzY3JpcHQgZmlsZSBvciBhbiBh cmNoaXZlLiAgVGhlIG91dHB1dCBjb250YWlucwogICAgPGFjcm9ueW0+U1FMPC9hY3JvbnltPiBj b21tYW5kcyB0aGF0IGNhbiBiZSB1c2VkIGFzIGlucHV0IHRvIDx4cmVmCiAgICBsaW5rZW5kPSJh cHAtcHNxbCIvPiB0byByZXN0b3JlIHRoZSBkYXRhYmFzZXMuICBJdCBkb2VzIHRoaXMgYnkKICAg IGNhbGxpbmcgPHhyZWYgbGlua2VuZD0iYXBwLXBnZHVtcCIvPiBmb3IgZWFjaCBkYXRhYmFzZSBp biB0aGUgY2x1c3Rlci4KQEAgLTUyLDExICs1NSwxNiBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRp b24KICAgPC9wYXJhPgogCiAgIDxwYXJhPgotICAgVGhlIFNRTCBzY3JpcHQgd2lsbCBiZSB3cml0 dGVuIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuICBVc2UgdGhlCisgICBQbGFpbiB0ZXh0IFNRTCBz Y3JpcHRzIHdpbGwgYmUgd3JpdHRlbiB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LiAgVXNlIHRoZQog ICAgPG9wdGlvbj4tZjwvb3B0aW9uPi88b3B0aW9uPi0tZmlsZTwvb3B0aW9uPiBvcHRpb24gb3Ig c2hlbGwgb3BlcmF0b3JzIHRvCiAgICByZWRpcmVjdCBpdCBpbnRvIGEgZmlsZS4KICAgPC9wYXJh PgogCisgIDxwYXJhPgorICAgQXJjaGl2ZXMgaW4gb3RoZXIgZm9ybWF0cyB3aWxsIGJlIHBsYWNl ZCBpbiBhIGRpcmVjdG9yeSBuYW1lZCB1c2luZyB0aGUKKyAgIDxvcHRpb24+LWY8L29wdGlvbj4v PG9wdGlvbj4tLWZpbGU8L29wdGlvbj4sIHdoaWNoIGlzIHJlcXVpcmVkIGluIHRoaXMgY2FzZS4K KyAgPC9wYXJhPgorCiAgIDxwYXJhPgogICA8YXBwbGljYXRpb24+cGdfZHVtcGFsbDwvYXBwbGlj YXRpb24+IG5lZWRzIHRvIGNvbm5lY3Qgc2V2ZXJhbAogICB0aW1lcyB0byB0aGUgPHByb2R1Y3Ru YW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBzZXJ2ZXIgKG9uY2UgcGVyCkBAIC0xMzEsMTAg KzEzOSw4NSBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgICAgICA8cGFyYT4KICAgICAg ICAgU2VuZCBvdXRwdXQgdG8gdGhlIHNwZWNpZmllZCBmaWxlLiAgSWYgdGhpcyBpcyBvbWl0dGVk LCB0aGUKICAgICAgICAgc3RhbmRhcmQgb3V0cHV0IGlzIHVzZWQuCisgICAgICAgIE5vdGU6IFRo aXMgb3B0aW9uIGNhbiBvbmx5IGJlIG9taXR0ZWQgd2hlbiA8b3B0aW9uPi0tZm9ybWF0PC9vcHRp b24+IGlzIHBsYWluCiAgICAgICAgPC9wYXJhPgogICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92 YXJsaXN0ZW50cnk+CiAKKyAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+ LUYgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmZvcm1hdDwvcmVwbGFjZWFibGU+PC9v cHRpb24+PC90ZXJtPgorICAgICAgPHRlcm0+PG9wdGlvbj4tLWZvcm1hdD08cmVwbGFjZWFibGUg Y2xhc3M9InBhcmFtZXRlciI+Zm9ybWF0PC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+Cisg ICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgIFNwZWNpZnkgdGhlIGZvcm1h dCBvZiBkdW1wIGZpbGVzLiAgSW4gcGxhaW4gZm9ybWF0LCBhbGwgdGhlIGR1bXAgZGF0YSBpcwor ICAgICAgICBzZW50IGluIGEgc2luZ2xlIHRleHQgc3RyZWFtLiBUaGlzIGlzIHRoZSBkZWZhdWx0 LgorCisgICAgICAgIEluIGFsbCBvdGhlciBtb2RlcywgPGFwcGxpY2F0aW9uPnBnX2R1bXBhbGw8 L2FwcGxpY2F0aW9uPiBmaXJzdCBjcmVhdGVzIHR3byBmaWxlczoKKyAgICAgICAgPGZpbGVuYW1l PnRvYy5kYXQvdG9jLmRtcC90b2MudGFyPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5tYXAuZGF0 PC9maWxlbmFtZT4sIGluIHRoZSBkaXJlY3RvcnkKKyAgICAgICAgc3BlY2lmaWVkIGJ5IDxvcHRp b24+LS1maWxlPC9vcHRpb24+LgorICAgICAgICBUaGUgZmlyc3QgZmlsZSBjb250YWlucyBnbG9i YWwgZGF0YSwgc3VjaCBhcyByb2xlcyBhbmQgdGFibGVzcGFjZXMuIFRoZSBzZWNvbmQKKyAgICAg ICAgY29udGFpbnMgYSBtYXBwaW5nIGJldHdlZW4gZGF0YWJhc2Ugb2lkcyBhbmQgbmFtZXMuIFRo ZXNlIGZpbGVzIGFyZSB1c2VkIGJ5CisgICAgICAgIDxhcHBsaWNhdGlvbj5wZ19yZXN0b3JlPC9h cHBsaWNhdGlvbj4uIERhdGEgZm9yIGluZGl2aWR1YWwgZGF0YWJhc2VzIGlzIHBsYWNlZCBpbgor ICAgICAgICA8ZmlsZW5hbWU+ZGF0YWJhc2VzPC9maWxlbmFtZT4gc3ViZGlyZWN0b3J5LCBuYW1l ZCB1c2luZyB0aGUgZGF0YWJhc2UncyA8dHlwZT5vaWQ8L3R5cGU+LgorCisgICAgICAgPHZhcmlh YmxlbGlzdD4KKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFs PmQ8L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+ZGlyZWN0b3J5PC9s aXRlcmFsPjwvdGVybT4KKyAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAg ICAgICAgICAgT3V0cHV0IGRpcmVjdG9yeS1mb3JtYXQgYXJjaGl2ZXMgZm9yIGVhY2ggZGF0YWJh c2UsCisgICAgICAgICAgIHN1aXRhYmxlIGZvciBpbnB1dCBpbnRvIHBnX3Jlc3RvcmUuIFRoZSBk aXJlY3RvcnkKKyAgICAgICAgICAgd2lsbCBoYXZlIGRhdGFiYXNlIDx0eXBlPm9pZDwvdHlwZT4g YXMgaXRzIG5hbWUuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgPC9saXN0aXRlbT4KKyAg ICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAg IDx0ZXJtPjxsaXRlcmFsPnA8L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAgPHRlcm0+PGxpdGVy YWw+cGxhaW48L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAg IDxwYXJhPgorICAgICAgICAgICBPdXRwdXQgYSBwbGFpbi10ZXh0IFNRTCBzY3JpcHQgZmlsZSAo dGhlIGRlZmF1bHQpLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgIDwvbGlzdGl0ZW0+Cisg ICAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAg ICA8dGVybT48bGl0ZXJhbD5jPC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAgIDx0ZXJtPjxsaXRl cmFsPmN1c3RvbTwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAg ICAgPHBhcmE+CisgICAgICAgICAgIE91dHB1dCBhIGN1c3RvbS1mb3JtYXQgYXJjaGl2ZSBmb3Ig ZWFjaCBkYXRhYmFzZSwKKyAgICAgICAgICAgc3VpdGFibGUgZm9yIGlucHV0IGludG8gcGdfcmVz dG9yZS4gVGhlIGFyY2hpdmUKKyAgICAgICAgICAgd2lsbCBiZSBuYW1lZCA8ZmlsZW5hbWU+ZGJv aWQuZG1wPC9maWxlbmFtZT4gd2hlcmUgPHR5cGU+ZGJvaWQ8L3R5cGU+IGlzIHRoZQorICAgICAg ICAgICA8dHlwZT5vaWQ8L3R5cGU+IG9mIHRoZSBkYXRhYmFzZS4KKyAgICAgICAgICA8L3BhcmE+ CisgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAg ICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPnQ8L2xpdGVyYWw+PC90 ZXJtPgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+dGFyPC9saXRlcmFsPjwvdGVybT4KKyAgICAg ICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgT3V0cHV0IGEgdGFy LWZvcm1hdCBhcmNoaXZlIGZvciBlYWNoIGRhdGFiYXNlLAorICAgICAgICAgICBzdWl0YWJsZSBm b3IgaW5wdXQgaW50byBwZ19yZXN0b3JlLiBUaGUgYXJjaGl2ZQorICAgICAgICAgICB3aWxsIGJl IG5hbWVkIDxmaWxlbmFtZT5kYm9pZC50YXI8L2ZpbGVuYW1lPiB3aGVyZSA8dHlwZT5kYm9pZDwv dHlwZT4gaXMgdGhlCisgICAgICAgICAgIDx0eXBlPm9pZDwvdHlwZT4gb2YgdGhlIGRhdGFiYXNl LgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFy bGlzdGVudHJ5PgorCisgICAgICAgIDwvdmFyaWFibGVsaXN0PgorCisgICAgICAgTm90ZTogc2Vl IDx4cmVmIGxpbmtlbmQ9ImFwcC1wZ2R1bXAiLz4gZm9yIGRldGFpbHMKKyAgICAgICBvZiBob3cg dGhlIHZhcmlvdXMgbm9uIHBsYWluIHRleHQgYXJjaGl2ZXMgd29yay4KKworICAgICAgICA8L3Bh cmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKwogICAgICA8dmFy bGlzdGVudHJ5PgogICAgICAgPHRlcm0+PG9wdGlvbj4tZzwvb3B0aW9uPjwvdGVybT4KICAgICAg IDx0ZXJtPjxvcHRpb24+LS1nbG9iYWxzLW9ubHk8L29wdGlvbj48L3Rlcm0+CmRpZmYgLS1naXQg YS9kb2Mvc3JjL3NnbWwvcmVmL3BnX3Jlc3RvcmUuc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvcGdf cmVzdG9yZS5zZ21sCmluZGV4IGE0NjhhMzgzNjFhLi43NDk3YjUyN2FlNiAxMDA2NDQKLS0tIGEv ZG9jL3NyYy9zZ21sL3JlZi9wZ19yZXN0b3JlLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9w Z19yZXN0b3JlLnNnbWwKQEAgLTE4LDggKzE4LDkgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9u CiAgIDxyZWZuYW1lPnBnX3Jlc3RvcmU8L3JlZm5hbWU+CiAKICAgPHJlZnB1cnBvc2U+Ci0gICBy ZXN0b3JlIGEgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZSBm cm9tIGFuCi0gICBhcmNoaXZlIGZpbGUgY3JlYXRlZCBieSA8YXBwbGljYXRpb24+cGdfZHVtcDwv YXBwbGljYXRpb24+CisgICByZXN0b3JlIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0 bmFtZT4gZGF0YWJhc2VzIGZyb20gYXJjaGl2ZXMKKyAgIGNyZWF0ZWQgYnkgPGFwcGxpY2F0aW9u PnBnX2R1bXA8L2FwcGxpY2F0aW9uPiBvcgorICAgPGFwcGxpY2F0aW9uPnBnX2R1bXBhbGw8L2Fw cGxpY2F0aW9uPgogICA8L3JlZnB1cnBvc2U+CiAgPC9yZWZuYW1lZGl2PgogCkBAIC0zOCwxMyAr MzksMTQgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAKICAgPHBhcmE+CiAgICA8YXBwbGlj YXRpb24+cGdfcmVzdG9yZTwvYXBwbGljYXRpb24+IGlzIGEgdXRpbGl0eSBmb3IgcmVzdG9yaW5n IGEKLSAgIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gZGF0YWJhc2UgZnJv bSBhbiBhcmNoaXZlCi0gICBjcmVhdGVkIGJ5IDx4cmVmIGxpbmtlbmQ9ImFwcC1wZ2R1bXAiLz4g aW4gb25lIG9mIHRoZSBub24tcGxhaW4tdGV4dAorICAgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8 L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZSBvciBjbHVzdGVyIGZyb20gYW4gYXJjaGl2ZQorICAgY3Jl YXRlZCBieSA8eHJlZiBsaW5rZW5kPSJhcHAtcGdkdW1wIi8+IG9yCisgICA8eHJlZiBsaW5rZW5k PSJhcHAtcGctZHVtcGFsbCIvPiBpbiBvbmUgb2YgdGhlIG5vbi1wbGFpbi10ZXh0CiAgICBmb3Jt YXRzLiAgSXQgd2lsbCBpc3N1ZSB0aGUgY29tbWFuZHMgbmVjZXNzYXJ5IHRvIHJlY29uc3RydWN0 IHRoZQotICAgZGF0YWJhc2UgdG8gdGhlIHN0YXRlIGl0IHdhcyBpbiBhdCB0aGUgdGltZSBpdCB3 YXMgc2F2ZWQuICBUaGUKLSAgIGFyY2hpdmUgZmlsZXMgYWxzbyBhbGxvdyA8YXBwbGljYXRpb24+ cGdfcmVzdG9yZTwvYXBwbGljYXRpb24+IHRvCisgICBkYXRhYmFzZSBvciBjbHVzdGVyIHRvIHRo ZSBzdGF0ZSBpdCB3YXMgaW4gYXQgdGhlIHRpbWUgaXQgd2FzIHNhdmVkLiBUaGUKKyAgIGFyY2hp dmVzIGFsc28gYWxsb3cgPGFwcGxpY2F0aW9uPnBnX3Jlc3RvcmU8L2FwcGxpY2F0aW9uPiB0bwog ICAgYmUgc2VsZWN0aXZlIGFib3V0IHdoYXQgaXMgcmVzdG9yZWQsIG9yIGV2ZW4gdG8gcmVvcmRl ciB0aGUgaXRlbXMKLSAgIHByaW9yIHRvIGJlaW5nIHJlc3RvcmVkLiBUaGUgYXJjaGl2ZSBmaWxl cyBhcmUgZGVzaWduZWQgdG8gYmUKKyAgIHByaW9yIHRvIGJlaW5nIHJlc3RvcmVkLiBUaGUgYXJj aGl2ZSBmb3JtYXRzIGFyZSBkZXNpZ25lZCB0byBiZQogICAgcG9ydGFibGUgYWNyb3NzIGFyY2hp dGVjdHVyZXMuCiAgIDwvcGFyYT4KIApAQCAtNTIsMTAgKzU0LDE3IEBAIFBvc3RncmVTUUwgZG9j dW1lbnRhdGlvbgogICAgPGFwcGxpY2F0aW9uPnBnX3Jlc3RvcmU8L2FwcGxpY2F0aW9uPiBjYW4g b3BlcmF0ZSBpbiB0d28gbW9kZXMuCiAgICBJZiBhIGRhdGFiYXNlIG5hbWUgaXMgc3BlY2lmaWVk LCA8YXBwbGljYXRpb24+cGdfcmVzdG9yZTwvYXBwbGljYXRpb24+CiAgICBjb25uZWN0cyB0byB0 aGF0IGRhdGFiYXNlIGFuZCByZXN0b3JlcyBhcmNoaXZlIGNvbnRlbnRzIGRpcmVjdGx5IGludG8K LSAgIHRoZSBkYXRhYmFzZS4gIE90aGVyd2lzZSwgYSBzY3JpcHQgY29udGFpbmluZyB0aGUgU1FM Ci0gICBjb21tYW5kcyBuZWNlc3NhcnkgdG8gcmVidWlsZCB0aGUgZGF0YWJhc2UgaXMgY3JlYXRl ZCBhbmQgd3JpdHRlbgorICAgdGhlIGRhdGFiYXNlLgorICAgV2hlbiByZXN0b3JpbmcgZnJvbSBh IGR1bXAgbWFkZSBieSA8YXBwbGljYXRpb24+cGdfZHVtcGFsbDwvYXBwbGljYXRpb24+LAorICAg ZWFjaCBkYXRhYmFzZSB3aWxsIGJlIGNyZWF0ZWQgYW5kIHRoZW4gdGhlIHJlc3RvcmF0aW9uIHdp bGwgYmUgcnVuIGluIHRoYXQKKyAgIGRhdGFiYXNlLgorCisgICBPdGhlcndpc2UsIHdoZW4gYSBk YXRhYmFzZSBuYW1lIGlzIG5vdCBzcGVjaWZpZWQsIGEgc2NyaXB0IGNvbnRhaW5pbmcgdGhlIFNR TAorICAgY29tbWFuZHMgbmVjZXNzYXJ5IHRvIHJlYnVpbGQgdGhlIGRhdGFiYXNlIG9yIGNsdXN0 ZXIgaXMgY3JlYXRlZCBhbmQgd3JpdHRlbgogICAgdG8gYSBmaWxlIG9yIHN0YW5kYXJkIG91dHB1 dC4gIFRoaXMgc2NyaXB0IG91dHB1dCBpcyBlcXVpdmFsZW50IHRvCi0gICB0aGUgcGxhaW4gdGV4 dCBvdXRwdXQgZm9ybWF0IG9mIDxhcHBsaWNhdGlvbj5wZ19kdW1wPC9hcHBsaWNhdGlvbj4uCisg ICB0aGUgcGxhaW4gdGV4dCBvdXRwdXQgZm9ybWF0IG9mIDxhcHBsaWNhdGlvbj5wZ19kdW1wPC9h cHBsaWNhdGlvbj4gb3IKKyAgIDxhcHBsaWNhdGlvbj5wZ19kdW1wYWxsPC9hcHBsaWNhdGlvbj4u CisKICAgIFNvbWUgb2YgdGhlIG9wdGlvbnMgY29udHJvbGxpbmcgdGhlIG91dHB1dCBhcmUgdGhl cmVmb3JlIGFuYWxvZ291cyB0bwogICAgPGFwcGxpY2F0aW9uPnBnX2R1bXA8L2FwcGxpY2F0aW9u PiBvcHRpb25zLgogICA8L3BhcmE+CkBAIC0xNTIsNiArMTYxLDggQEAgUG9zdGdyZVNRTCBkb2N1 bWVudGF0aW9uCiAgICAgICAgIGNvbW1hbmRzIHRoYXQgbWVudGlvbiB0aGlzIGRhdGFiYXNlLgog ICAgICAgICBBY2Nlc3MgcHJpdmlsZWdlcyBmb3IgdGhlIGRhdGFiYXNlIGl0c2VsZiBhcmUgYWxz byByZXN0b3JlZCwKICAgICAgICAgdW5sZXNzIDxvcHRpb24+LS1uby1hY2w8L29wdGlvbj4gaXMg c3BlY2lmaWVkLgorICAgICAgICA8b3B0aW9uPi0tY3JlYXRlPC9vcHRpb24+IGlzIHJlcXVpcmVk IHdoZW4gcmVzdG9yaW5nIG11bHRpcGxlIGRhdGFiYXNlcworICAgICAgICBmcm9tIGFuIGFyY2hp dmUgY3JlYXRlZCBieSA8YXBwbGljYXRpb24+cGdfZHVtcGFsbDwvYXBwbGljYXRpb24+LgogICAg ICAgIDwvcGFyYT4KIAogICAgICAgIDxwYXJhPgpAQCAtMjQ3LDYgKzI1OCwxOSBAQCBQb3N0Z3Jl U1FMIGRvY3VtZW50YXRpb24KICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5 PgogCisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9uPi1nPC9vcHRpb24+ PC90ZXJtPgorICAgICAgPHRlcm0+PG9wdGlvbj4tLWdsb2JhbHMtb25seTwvb3B0aW9uPjwvdGVy bT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgUmVzdG9yZSBvbmx5 IGdsb2JhbCBvYmplY3RzIChyb2xlcyBhbmQgdGFibGVzcGFjZXMpLCBubyBkYXRhYmFzZXMuCisg ICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBUaGlzIG9wdGlvbiBpcyBvbmx5 IHJlbGV2YW50IHdoZW4gcmVzdG9yaW5nIGZyb20gYW4gYXJjaGl2ZSBtYWRlIHVzaW5nIDxhcHBs aWNhdGlvbj5wZ19kdW1wYWxsPC9hcHBsaWNhdGlvbj4uCisgICAgICAgPC9wYXJhPgorICAgICAg PC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKICAgICAgPHZhcmxpc3RlbnRyeT4K ICAgICAgIDx0ZXJtPjxvcHRpb24+LUkgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmlu ZGV4PC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CiAgICAgICA8dGVybT48b3B0aW9uPi0t aW5kZXg9PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmluZGV4PC9yZXBsYWNlYWJsZT48 L29wdGlvbj48L3Rlcm0+CkBAIC01OTEsNiArNjE1LDI4IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRh dGlvbgogICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgICAgPHZh cmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LS1leGNsdWRlLWRhdGFiYXNlPTxyZXBs YWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5wYXR0ZXJuPC9yZXBsYWNlYWJsZT48L29wdGlvbj48 L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgIERvIG5vdCBy ZXN0b3JlIGRhdGFiYXNlcyB3aG9zZSBuYW1lIG1hdGNoZXMKKyAgICAgICAgPHJlcGxhY2VhYmxl IGNsYXNzPSJwYXJhbWV0ZXIiPnBhdHRlcm48L3JlcGxhY2VhYmxlPi4KKyAgICAgICAgTXVsdGlw bGUgcGF0dGVybnMgY2FuIGJlIGV4Y2x1ZGVkIGJ5IHdyaXRpbmcgbXVsdGlwbGUKKyAgICAgICAg PG9wdGlvbj4tLWV4Y2x1ZGUtZGF0YWJhc2U8L29wdGlvbj4gc3dpdGNoZXMuICBUaGUKKyAgICAg ICAgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnBhdHRlcm48L3JlcGxhY2VhYmxlPiBw YXJhbWV0ZXIgaXMKKyAgICAgICAgaW50ZXJwcmV0ZWQgYXMgYSBwYXR0ZXJuIGFjY29yZGluZyB0 byB0aGUgc2FtZSBydWxlcyB1c2VkIGJ5CisgICAgICAgIDxhcHBsaWNhdGlvbj5wc3FsPC9hcHBs aWNhdGlvbj4ncyA8bGl0ZXJhbD5cZDwvbGl0ZXJhbD4KKyAgICAgICAgY29tbWFuZHMgKHNlZSA8 eHJlZiBsaW5rZW5kPSJhcHAtcHNxbC1wYXR0ZXJucyIvPiksCisgICAgICAgIHNvIG11bHRpcGxl IGRhdGFiYXNlcyBjYW4gYWxzbyBiZSBleGNsdWRlZCBieSB3cml0aW5nIHdpbGRjYXJkCisgICAg ICAgIGNoYXJhY3RlcnMgaW4gdGhlIHBhdHRlcm4uICBXaGVuIHVzaW5nIHdpbGRjYXJkcywgYmUg Y2FyZWZ1bCB0bworICAgICAgICBxdW90ZSB0aGUgcGF0dGVybiBpZiBuZWVkZWQgdG8gcHJldmVu dCBzaGVsbCB3aWxkY2FyZCBleHBhbnNpb24uCisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJh PgorICAgICAgICBUaGlzIG9wdGlvbiBpcyBvbmx5IHJlbGV2YW50IHdoZW4gcmVzdG9yaW5nIGZy b20gYW4gYXJjaGl2ZSBtYWRlIHVzaW5nIDxhcHBsaWNhdGlvbj5wZ19kdW1wYWxsPC9hcHBsaWNh dGlvbj4uCisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0 ZW50cnk+CisKICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgIDx0ZXJtPjxvcHRpb24+LS1maWx0 ZXI9PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmZpbGVuYW1lPC9yZXBsYWNlYWJsZT48 L29wdGlvbj48L3Rlcm0+CiAgICAgICA8bGlzdGl0ZW0+CmRpZmYgLS1naXQgYS9zcmMvYmluL3Bn X2R1bXAvY29ubmVjdGRiLmMgYi9zcmMvYmluL3BnX2R1bXAvY29ubmVjdGRiLmMKaW5kZXggZDU1 ZDUzZGJlZWEuLmY0NGE4YTQ1ZmNhIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvY29ubmVj dGRiLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL2Nvbm5lY3RkYi5jCkBAIC0yODcsNyArMjg3LDYg QEAgZXhlY3V0ZVF1ZXJ5KFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqcXVlcnkpCiAJewogCQlw Z19sb2dfZXJyb3IoInF1ZXJ5IGZhaWxlZDogJXMiLCBQUWVycm9yTWVzc2FnZShjb25uKSk7CiAJ CXBnX2xvZ19lcnJvcl9kZXRhaWwoIlF1ZXJ5IHdhczogJXMiLCBxdWVyeSk7Ci0JCVBRZmluaXNo KGNvbm4pOwogCQlleGl0X25pY2VseSgxKTsKIAl9CiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdf ZHVtcC9tZXNvbi5idWlsZCBiL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZAppbmRleCBmM2M2 NjlmNDg0ZS4uM2UyMWFhZjU3ODAgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5i dWlsZAorKysgYi9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQKQEAgLTEwMyw2ICsxMDMsNyBA QCB0ZXN0cyArPSB7CiAgICAgICAndC8wMDRfcGdfZHVtcF9wYXJhbGxlbC5wbCcsCiAgICAgICAn dC8wMDVfcGdfZHVtcF9maWx0ZXJmaWxlLnBsJywKICAgICAgICd0LzAwNl9wZ19kdW1wX2NvbXBy ZXNzLnBsJywKKwkgICd0LzAwN19wZ19kdW1wYWxsLnBsJywKICAgICAgICd0LzAxMF9kdW1wX2Nv bm5zdHIucGwnLAogICAgIF0sCiAgIH0sCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGFy YWxsZWwuYyBiL3NyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5jCmluZGV4IDA4NmFkY2RjNTAyLi41 OTc0ZDY3MDZmZCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BhcmFsbGVsLmMKKysrIGIv c3JjL2Jpbi9wZ19kdW1wL3BhcmFsbGVsLmMKQEAgLTMzMyw2ICszMzMsMTYgQEAgb25fZXhpdF9j bG9zZV9hcmNoaXZlKEFyY2hpdmUgKkFIWCkKIAlvbl9leGl0X25pY2VseShhcmNoaXZlX2Nsb3Nl X2Nvbm5lY3Rpb24sICZzaHV0ZG93bl9pbmZvKTsKIH0KIAorLyoKKyAqIFdoZW4gcGdfcmVzdG9y ZSByZXN0b3JlcyBtdWx0aXBsZSBkYXRhYmFzZXMsIHRoZW4gdXBkYXRlIGFscmVhZHkgYWRkZWQg ZW50cnkKKyAqIGludG8gYXJyYXkgZm9yIGNsZWFudXAuCisgKi8KK3ZvaWQKK3JlcGxhY2Vfb25f ZXhpdF9jbG9zZV9hcmNoaXZlKEFyY2hpdmUgKkFIWCkKK3sKKwlzaHV0ZG93bl9pbmZvLkFIWCA9 IEFIWDsKK30KKwogLyoKICAqIG9uX2V4aXRfbmljZWx5IGhhbmRsZXIgZm9yIHNodXR0aW5nIGRv d24gZGF0YWJhc2UgY29ubmVjdGlvbnMgYW5kCiAgKiB3b3JrZXIgcHJvY2Vzc2VzIGNsZWFubHku CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmggYi9zcmMvYmluL3BnX2R1 bXAvcGdfYmFja3VwLmgKaW5kZXggZDkwNDFkYWQ3MjAuLmY2MzFkOTQ1NDcyIDEwMDY0NAotLS0g YS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmgKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2Jh Y2t1cC5oCkBAIC0zMTIsNyArMzEyLDcgQEAgZXh0ZXJuIHZvaWQgU2V0QXJjaGl2ZU9wdGlvbnMo QXJjaGl2ZSAqQUgsIER1bXBPcHRpb25zICpkb3B0LCBSZXN0b3JlT3B0aW9ucyAqcm8KIAogZXh0 ZXJuIHZvaWQgUHJvY2Vzc0FyY2hpdmVSZXN0b3JlT3B0aW9ucyhBcmNoaXZlICpBSFgpOwogCi1l eHRlcm4gdm9pZCBSZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgpOworZXh0ZXJuIHZvaWQgUmVz dG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhYLCBib29sIGFwcGVuZF9kYXRhLCBib29sIGdsb2JhbHNf b25seSk7CiAKIC8qIE9wZW4gYW4gZXhpc3RpbmcgYXJjaGl2ZSAqLwogZXh0ZXJuIEFyY2hpdmUg Kk9wZW5BcmNoaXZlKGNvbnN0IGNoYXIgKkZpbGVTcGVjLCBjb25zdCBBcmNoaXZlRm9ybWF0IGZt dCk7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMgYi9z cmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKaW5kZXggNTllYWVjYjRlZDcuLmQz NzhjN2I2MDFlIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVy LmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCkBAIC04Niw3ICs4 Niw3IEBAIHN0YXRpYyBpbnQJUmVzdG9yaW5nVG9EQihBcmNoaXZlSGFuZGxlICpBSCk7CiBzdGF0 aWMgdm9pZCBkdW1wX2xvX2J1ZihBcmNoaXZlSGFuZGxlICpBSCk7CiBzdGF0aWMgdm9pZCBkdW1w VGltZXN0YW1wKEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICptc2csIHRpbWVfdCB0aW0p Owogc3RhdGljIHZvaWQgU2V0T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpm aWxlbmFtZSwKLQkJCQkJICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNz aW9uX3NwZWMpOworCQkJCQkgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJl c3Npb25fc3BlYywgYm9vbCBhcHBlbmRfZGF0YSk7CiBzdGF0aWMgQ29tcHJlc3NGaWxlSGFuZGxl ICpTYXZlT3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFIKTsKIHN0YXRpYyB2b2lkIFJlc3RvcmVPdXRw dXQoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzRmlsZUhhbmRsZSAqc2F2ZWRPdXRwdXQpOwog CkBAIC0zMzksOSArMzM5LDE0IEBAIFByb2Nlc3NBcmNoaXZlUmVzdG9yZU9wdGlvbnMoQXJjaGl2 ZSAqQUhYKQogCQlTdHJpY3ROYW1lc0NoZWNrKHJvcHQpOwogfQogCi0vKiBQdWJsaWMgKi8KKy8q CisgKiBSZXN0b3JlQXJjaGl2ZQorICoKKyAqIElmIGFwcGVuZF9kYXRhIGlzIHNldCwgdGhlbiBh cHBlbmQgZGF0YSBpbnRvIGZpbGUgYXMgd2UgYXJlIHJlc3RvcmluZyBkdW1wCisgKiBvZiBtdWx0 aXBsZSBkYXRhYmFzZXMgd2hpY2ggd2FzIHRha2VuIGJ5IHBnX2R1bXBhbGwuCisgKi8KIHZvaWQK LVJlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFIWCkKK1Jlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFI WCwgYm9vbCBhcHBlbmRfZGF0YSwgYm9vbCBnbG9iYWxzX29ubHkpCiB7CiAJQXJjaGl2ZUhhbmRs ZSAqQUggPSAoQXJjaGl2ZUhhbmRsZSAqKSBBSFg7CiAJUmVzdG9yZU9wdGlvbnMgKnJvcHQgPSBB SC0+cHVibGljLnJvcHQ7CkBAIC00NTgsNyArNDYzLDcgQEAgUmVzdG9yZUFyY2hpdmUoQXJjaGl2 ZSAqQUhYKQogCSAqLwogCXNhdiA9IFNhdmVPdXRwdXQoQUgpOwogCWlmIChyb3B0LT5maWxlbmFt ZSB8fCByb3B0LT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSAhPSBQR19DT01QUkVTU0lPTl9O T05FKQotCQlTZXRPdXRwdXQoQUgsIHJvcHQtPmZpbGVuYW1lLCByb3B0LT5jb21wcmVzc2lvbl9z cGVjKTsKKwkJU2V0T3V0cHV0KEFILCByb3B0LT5maWxlbmFtZSwgcm9wdC0+Y29tcHJlc3Npb25f c3BlYywgYXBwZW5kX2RhdGEpOwogCiAJYWhwcmludGYoQUgsICItLVxuLS0gUG9zdGdyZVNRTCBk YXRhYmFzZSBkdW1wXG4tLVxuXG4iKTsKIApAQCAtNzYxLDYgKzc2Niw5IEBAIFJlc3RvcmVBcmNo aXZlKEFyY2hpdmUgKkFIWCkKIAkJCWlmICgodGUtPnJlcXMgJiAoUkVRX1NDSEVNQSB8IFJFUV9E QVRBIHwgUkVRX1NUQVRTKSkgPT0gMCkKIAkJCQljb250aW51ZTsJCS8qIGlnbm9yZSBpZiBub3Qg dG8gYmUgZHVtcGVkIGF0IGFsbCAqLwogCisJCQlpZiAoZ2xvYmFsc19vbmx5ICYmIHRlICYmIHRl LT50YWcgJiYgKHN0cmNtcCh0ZS0+dGFnLCAiRFJPUF9EQVRBQkFTRSIpID09IDApKQorCQkJCWNv bnRpbnVlOworCiAJCQlzd2l0Y2ggKF90b2NFbnRyeVJlc3RvcmVQYXNzKHRlKSkKIAkJCXsKIAkJ CQljYXNlIFJFU1RPUkVfUEFTU19NQUlOOgpAQCAtMTMxNiw3ICsxMzI0LDcgQEAgUHJpbnRUT0NT dW1tYXJ5KEFyY2hpdmUgKkFIWCkKIAogCXNhdiA9IFNhdmVPdXRwdXQoQUgpOwogCWlmIChyb3B0 LT5maWxlbmFtZSkKLQkJU2V0T3V0cHV0KEFILCByb3B0LT5maWxlbmFtZSwgb3V0X2NvbXByZXNz aW9uX3NwZWMpOworCQlTZXRPdXRwdXQoQUgsIHJvcHQtPmZpbGVuYW1lLCBvdXRfY29tcHJlc3Np b25fc3BlYywgZmFsc2UpOwogCiAJaWYgKHN0cmZ0aW1lKHN0YW1wX3N0ciwgc2l6ZW9mKHN0YW1w X3N0ciksIFBHRFVNUF9TVFJGVElNRV9GTVQsCiAJCQkJIGxvY2FsdGltZSgmQUgtPmNyZWF0ZURh dGUpKSA9PSAwKQpAQCAtMTY5NSw3ICsxNzAzLDggQEAgYXJjaHByaW50ZihBcmNoaXZlICpBSCwg Y29uc3QgY2hhciAqZm10LC4uLikKIAogc3RhdGljIHZvaWQKIFNldE91dHB1dChBcmNoaXZlSGFu ZGxlICpBSCwgY29uc3QgY2hhciAqZmlsZW5hbWUsCi0JCSAgY29uc3QgcGdfY29tcHJlc3Nfc3Bl Y2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQorCQkgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNp ZmljYXRpb24gY29tcHJlc3Npb25fc3BlYywKKwkJICBib29sIGFwcGVuZF9kYXRhKQogewogCUNv bXByZXNzRmlsZUhhbmRsZSAqQ0ZIOwogCWNvbnN0IGNoYXIgKm1vZGU7CkBAIC0xNzE1LDcgKzE3 MjQsNyBAQCBTZXRPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKmZpbGVuYW1l LAogCWVsc2UKIAkJZm4gPSBmaWxlbm8oc3Rkb3V0KTsKIAotCWlmIChBSC0+bW9kZSA9PSBhcmNo TW9kZUFwcGVuZCkKKwlpZiAoYXBwZW5kX2RhdGEgfHwgQUgtPm1vZGUgPT0gYXJjaE1vZGVBcHBl bmQpCiAJCW1vZGUgPSBQR19CSU5BUllfQTsKIAllbHNlCiAJCW1vZGUgPSBQR19CSU5BUllfVzsK ZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuaCBiL3NyYy9i aW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuaAppbmRleCAzMjViNTNmYzliZC4uMzY1MDcz YjNlYWUgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuaAor KysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmgKQEAgLTM5NCw2ICszOTQs NyBAQCBzdHJ1Y3QgX3RvY0VudHJ5CiAKIGV4dGVybiBpbnQJcGFyYWxsZWxfcmVzdG9yZShBcmNo aXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRlKTsKIGV4dGVybiB2b2lkIG9uX2V4aXRfY2xvc2Vf YXJjaGl2ZShBcmNoaXZlICpBSFgpOworZXh0ZXJuIHZvaWQgcmVwbGFjZV9vbl9leGl0X2Nsb3Nl X2FyY2hpdmUoQXJjaGl2ZSAqQUhYKTsKIAogZXh0ZXJuIHZvaWQgd2Fybl9vcl9leGl0X2hvcnJp Ymx5KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpmbXQsLi4uKSBwZ19hdHRyaWJ1dGVf cHJpbnRmKDIsIDMpOwogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3Rh ci5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF90YXIuYwppbmRleCBiNWJhM2I0NmRkOS4u ODE4YjgwYTkzNjkgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMK KysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF90YXIuYwpAQCAtODI2LDcgKzgyNiw3IEBA IF9DbG9zZUFyY2hpdmUoQXJjaGl2ZUhhbmRsZSAqQUgpCiAJCXNhdlZlcmJvc2UgPSBBSC0+cHVi bGljLnZlcmJvc2U7CiAJCUFILT5wdWJsaWMudmVyYm9zZSA9IDA7CiAKLQkJUmVzdG9yZUFyY2hp dmUoKEFyY2hpdmUgKikgQUgpOworCQlSZXN0b3JlQXJjaGl2ZSgoQXJjaGl2ZSAqKSBBSCwgZmFs c2UsIGZhbHNlKTsKIAogCQlTZXRBcmNoaXZlT3B0aW9ucygoQXJjaGl2ZSAqKSBBSCwgc2F2RG9w dCwgc2F2Um9wdCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMgYi9z cmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCmluZGV4IDQ3OTEzMTc4YTkzLi4wMGNlOTQ2YWFiMSAx MDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYworKysgYi9zcmMvYmluL3BnX2R1 bXAvcGdfZHVtcC5jCkBAIC0xMjkyLDcgKzEyOTIsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoq YXJndikKIAkgKiByaWdodCBub3cuCiAJICovCiAJaWYgKHBsYWluVGV4dCkKLQkJUmVzdG9yZUFy Y2hpdmUoZm91dCk7CisJCVJlc3RvcmVBcmNoaXZlKGZvdXQsIGZhbHNlLCBmYWxzZSk7CiAKIAlD bG9zZUFyY2hpdmUoZm91dCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1w YWxsLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jCmluZGV4IGJiNDUxYzFiYWUxLi42 NjhlNTVlNDE1YyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwuYworKysg Yi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVk ZSAiZmVfdXRpbHMvc3RyaW5nX3V0aWxzLmgiCiAjaW5jbHVkZSAiZmlsdGVyLmgiCiAjaW5jbHVk ZSAiZ2V0b3B0X2xvbmcuaCIKKyNpbmNsdWRlICJwZ19iYWNrdXBfYXJjaGl2ZXIuaCIKIAogLyog dmVyc2lvbiBzdHJpbmcgd2UgZXhwZWN0IGJhY2sgZnJvbSBwZ19kdW1wICovCiAjZGVmaW5lIFBH RFVNUF9WRVJTSU9OU1RSICJwZ19kdW1wIChQb3N0Z3JlU1FMKSAiIFBHX1ZFUlNJT04gIlxuIgpA QCAtNjUsOSArNjYsMTAgQEAgc3RhdGljIHZvaWQgZHJvcFRhYmxlc3BhY2VzKFBHY29ubiAqY29u bik7CiBzdGF0aWMgdm9pZCBkdW1wVGFibGVzcGFjZXMoUEdjb25uICpjb25uKTsKIHN0YXRpYyB2 b2lkIGRyb3BEQnMoUEdjb25uICpjb25uKTsKIHN0YXRpYyB2b2lkIGR1bXBVc2VyQ29uZmlnKFBH Y29ubiAqY29ubiwgY29uc3QgY2hhciAqdXNlcm5hbWUpOwotc3RhdGljIHZvaWQgZHVtcERhdGFi YXNlcyhQR2Nvbm4gKmNvbm4pOworc3RhdGljIHZvaWQgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNv bm4sIEFyY2hpdmVGb3JtYXQgYXJjaER1bXBGb3JtYXQpOwogc3RhdGljIHZvaWQgZHVtcFRpbWVz dGFtcChjb25zdCBjaGFyICptc2cpOwotc3RhdGljIGludAlydW5QZ0R1bXAoY29uc3QgY2hhciAq ZGJuYW1lLCBjb25zdCBjaGFyICpjcmVhdGVfb3B0cyk7CitzdGF0aWMgaW50CXJ1blBnRHVtcChj b25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzLAorCQkJCQkgIGNoYXIg KmRiZmlsZSwgQXJjaGl2ZUZvcm1hdCBhcmNoRHVtcEZvcm1hdCk7CiBzdGF0aWMgdm9pZCBidWls ZFNoU2VjTGFiZWxzKFBHY29ubiAqY29ubiwKIAkJCQkJCQkgY29uc3QgY2hhciAqY2F0YWxvZ19u YW1lLCBPaWQgb2JqZWN0SWQsCiAJCQkJCQkJIGNvbnN0IGNoYXIgKm9ianR5cGUsIGNvbnN0IGNo YXIgKm9iam5hbWUsCkBAIC03Niw2ICs3OCw4IEBAIHN0YXRpYyB2b2lkIGV4ZWN1dGVDb21tYW5k KFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqcXVlcnkpOwogc3RhdGljIHZvaWQgZXhwYW5kX2Ri bmFtZV9wYXR0ZXJucyhQR2Nvbm4gKmNvbm4sIFNpbXBsZVN0cmluZ0xpc3QgKnBhdHRlcm5zLAog CQkJCQkJCQkgICBTaW1wbGVTdHJpbmdMaXN0ICpuYW1lcyk7CiBzdGF0aWMgdm9pZCByZWFkX2R1 bXBhbGxfZmlsdGVycyhjb25zdCBjaGFyICpmaWxlbmFtZSwgU2ltcGxlU3RyaW5nTGlzdCAqcGF0 dGVybik7CitzdGF0aWMgQXJjaGl2ZUZvcm1hdCBwYXJzZUR1bXBGb3JtYXQoY29uc3QgY2hhciAq Zm9ybWF0KTsKK3N0YXRpYyBpbnQgY3JlYXRlRHVtcElkTG9jYWwodm9pZCk7CiAKIHN0YXRpYyBj aGFyIHBnX2R1bXBfYmluW01BWFBHUEFUSF07CiBzdGF0aWMgUFFFeHBCdWZmZXIgcGdkdW1wb3B0 czsKQEAgLTEyMyw2ICsxMjcsMTMgQEAgc3RhdGljIFNpbXBsZVN0cmluZ0xpc3QgZGF0YWJhc2Vf ZXhjbHVkZV9wYXR0ZXJucyA9IHtOVUxMLCBOVUxMfTsKIHN0YXRpYyBTaW1wbGVTdHJpbmdMaXN0 IGRhdGFiYXNlX2V4Y2x1ZGVfbmFtZXMgPSB7TlVMTCwgTlVMTH07CiAKIHN0YXRpYyBjaGFyICpy ZXN0cmljdF9rZXk7CitzdGF0aWMgQXJjaGl2ZSAqZm91dCA9IE5VTEw7CitzdGF0aWMgcGdfY29t cHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjID0gezB9Oworc3RhdGljIGludCBk dW1wSWRWYWwgPSAwOworc3RhdGljIGNvbnN0IENhdGFsb2dJZCBuaWxDYXRhbG9nSWQgPSB7MCwg MH07CitzdGF0aWMgQXJjaGl2ZU1vZGUgYXJjaGl2ZU1vZGUgPSBhcmNoTW9kZVdyaXRlOworc3Rh dGljIERhdGFEaXJTeW5jTWV0aG9kIHN5bmNfbWV0aG9kID0gREFUQV9ESVJfU1lOQ19NRVRIT0Rf RlNZTkM7CitzdGF0aWMgQXJjaGl2ZUZvcm1hdCBhcmNoRHVtcEZvcm1hdCA9IGFyY2hOdWxsOwog CiBpbnQKIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKQEAgLTE0OCw2ICsxNTksNyBAQCBt YWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCXsicGFzc3dvcmQiLCBub19hcmd1bWVudCwg TlVMTCwgJ1cnfSwKIAkJeyJuby1wcml2aWxlZ2VzIiwgbm9fYXJndW1lbnQsIE5VTEwsICd4J30s CiAJCXsibm8tYWNsIiwgbm9fYXJndW1lbnQsIE5VTEwsICd4J30sCisJCXsiZm9ybWF0IiwgcmVx dWlyZWRfYXJndW1lbnQsIE5VTEwsICdGJ30sCiAKIAkJLyoKIAkJICogdGhlIGZvbGxvd2luZyBv cHRpb25zIGRvbid0IGhhdmUgYW4gZXF1aXZhbGVudCBzaG9ydCBvcHRpb24gbGV0dGVyCkBAIC0x OTcsNiArMjA5LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCWNoYXIJICAgKnBn ZGIgPSBOVUxMOwogCWNoYXIJICAgKnVzZV9yb2xlID0gTlVMTDsKIAljb25zdCBjaGFyICpkdW1w ZW5jb2RpbmcgPSBOVUxMOworCWNvbnN0IGNoYXIgKmZvcm1hdE5hbWUgPSAicCI7CiAJdHJpdmFs dWUJcHJvbXB0X3Bhc3N3b3JkID0gVFJJX0RFRkFVTFQ7CiAJYm9vbAkJZGF0YV9vbmx5ID0gZmFs c2U7CiAJYm9vbAkJZ2xvYmFsc19vbmx5ID0gZmFsc2U7CkBAIC0yMDgsNiArMjIxLDggQEAgbWFp bihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCWludAkJCWMsCiAJCQkJcmV0OwogCWludAkJCW9w dGluZGV4OworCUR1bXBPcHRpb25zIGRvcHQ7CisJY2hhciAgICAgICAgZ2xvYmFsX3BhdGhbTUFY UEdQQVRIXTsKIAogCXBnX2xvZ2dpbmdfaW5pdChhcmd2WzBdKTsKIAlwZ19sb2dnaW5nX3NldF9s ZXZlbChQR19MT0dfV0FSTklORyk7CkBAIC0yNDYsNyArMjYxLDkgQEAgbWFpbihpbnQgYXJnYywg Y2hhciAqYXJndltdKQogCiAJcGdkdW1wb3B0cyA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CiAKLQl3 aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAiYWNkOkU6ZjpnaDpsOk9wOnJzUzp0 VTp2d1d4IiwgbG9uZ19vcHRpb25zLCAmb3B0aW5kZXgpKSAhPSAtMSkKKwlJbml0RHVtcE9wdGlv bnMoJmRvcHQpOworCisJd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImFjZDpF OmY6RjpnaDpsOk9wOnJzUzp0VTp2d1d4IiwgbG9uZ19vcHRpb25zLCAmb3B0aW5kZXgpKSAhPSAt MSkKIAl7CiAJCXN3aXRjaCAoYykKIAkJewpAQCAtMjU3LDYgKzI3NCw3IEBAIG1haW4oaW50IGFy Z2MsIGNoYXIgKmFyZ3ZbXSkKIAogCQkJY2FzZSAnYyc6CiAJCQkJb3V0cHV0X2NsZWFuID0gdHJ1 ZTsKKwkJCQlkb3B0Lm91dHB1dENsZWFuID0gMTsKIAkJCQlicmVhazsKIAogCQkJY2FzZSAnZCc6 CkBAIC0yNzQsNyArMjkyLDkgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQkJCWFw cGVuZFBRRXhwQnVmZmVyU3RyKHBnZHVtcG9wdHMsICIgLWYgIik7CiAJCQkJYXBwZW5kU2hlbGxT dHJpbmcocGdkdW1wb3B0cywgZmlsZW5hbWUpOwogCQkJCWJyZWFrOwotCisJCQljYXNlICdGJzoK KwkJCQlmb3JtYXROYW1lID0gcGdfc3RyZHVwKG9wdGFyZyk7CisJCQkJYnJlYWs7CiAJCQljYXNl ICdnJzoKIAkJCQlnbG9iYWxzX29ubHkgPSB0cnVlOwogCQkJCWJyZWFrOwpAQCAtMzE0LDYgKzMz NCw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAogCQkJY2FzZSAnVSc6CiAJCQkJ cGd1c2VyID0gcGdfc3RyZHVwKG9wdGFyZyk7CisJCQkJZG9wdC5jcGFyYW1zLnVzZXJuYW1lID0g cGdfc3RyZHVwKG9wdGFyZyk7CiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgJ3YnOgpAQCAtNDI5LDYg KzQ1MCwyMSBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCWV4aXRfbmljZWx5KDEp OwogCX0KIAorCS8qIEdldCBmb3JtYXQgZm9yIGR1bXAuICovCisJYXJjaER1bXBGb3JtYXQgPSBw YXJzZUR1bXBGb3JtYXQoZm9ybWF0TmFtZSk7CisKKwkvKgorCSAqIElmIGEgbm9uLXBsYWluIGZv cm1hdCBpcyBzcGVjaWZpZWQsIGEgZmlsZSBuYW1lIGlzIGFsc28gcmVxdWlyZWQgYXMgdGhlCisJ ICogcGF0aCB0byB0aGUgbWFpbiBkaXJlY3RvcnkuCisJICovCisJaWYgKGFyY2hEdW1wRm9ybWF0 ICE9IGFyY2hOdWxsICYmCisJCSghZmlsZW5hbWUgfHwgc3RyY21wKGZpbGVuYW1lLCAiIikgPT0g MCkpCisJeworCQlwZ19sb2dfZXJyb3IoIm9wdGlvbiAtRi8tLWZvcm1hdD1kfGN8dCByZXF1aXJl cyBvcHRpb24gLWYvLS1maWxlIik7CisJCXBnX2xvZ19lcnJvcl9oaW50KCJUcnkgXCIlcyAtLWhl bHBcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iLCBwcm9nbmFtZSk7CisJCWV4aXRfbmljZWx5KDEp OworCX0KKwogCS8qCiAJICogSWYgcGFzc3dvcmQgdmFsdWVzIGFyZSBub3QgcmVxdWlyZWQgaW4g dGhlIGR1bXAsIHN3aXRjaCB0byB1c2luZwogCSAqIHBnX3JvbGVzIHdoaWNoIGlzIGVxdWFsbHkg dXNlZnVsLCBqdXN0IG1vcmUgbGlrZWx5IHRvIGhhdmUgdW5yZXN0cmljdGVkCkBAIC00ODksNiAr NTI1LDMzIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAlpZiAoc2VxdWVuY2VfZGF0 YSkKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocGdkdW1wb3B0cywgIiAtLXNlcXVlbmNlLWRhdGEi KTsKIAorCS8qCisJICogT3BlbiB0aGUgb3V0cHV0IGZpbGUgaWYgcmVxdWlyZWQsIG90aGVyd2lz ZSB1c2Ugc3Rkb3V0LiAgSWYgcmVxdWlyZWQsCisJICogdGhlbiBjcmVhdGUgbmV3IGRpcmVjdG9y eS4KKwkgKi8KKwlpZiAoZmlsZW5hbWUgJiYgYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51bGwpCisJ eworCQkvKiBDcmVhdGUgbmV3IGRpcmVjdG9yeSBvciBhY2NlcHQgdGhlIGVtcHR5IGV4aXN0aW5n IGRpcmVjdG9yeS4gKi8KKwkJY3JlYXRlX29yX29wZW5fZGlyKGZpbGVuYW1lKTsKKworCQkvKiBz ZXQgZmlsZSBwYXRoIGZvciBnbG9iYWwgc3FsIGNvbW1hbmRzLiAqLworCQlpZiAoYXJjaER1bXBG b3JtYXQgPT0gYXJjaEN1c3RvbSkKKwkJCXNucHJpbnRmKGdsb2JhbF9wYXRoLCBNQVhQR1BBVEgs ICIlcy90b2MuZG1wIiwgZmlsZW5hbWUpOworCQllbHNlIGlmIChhcmNoRHVtcEZvcm1hdCA9PSBh cmNoVGFyKQorCQkJc25wcmludGYoZ2xvYmFsX3BhdGgsIE1BWFBHUEFUSCwgIiVzL3RvYy50YXIi LCBmaWxlbmFtZSk7CisJCWVsc2UgaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hEaXJlY3Rvcnkp CisJCQlzbnByaW50ZihnbG9iYWxfcGF0aCwgTUFYUEdQQVRILCAiJXMiLCBmaWxlbmFtZSk7CisJ fQorCWVsc2UgaWYgKGZpbGVuYW1lKQorCXsKKwkJT1BGID0gZm9wZW4oZmlsZW5hbWUsIFBHX0JJ TkFSWV9XKTsKKwkJaWYgKCFPUEYpCisJCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gb3V0cHV0 IGZpbGUgXCIlc1wiOiAlbSIsCisJCQkJCSBmaWxlbmFtZSk7CisJfQorCWVsc2UKKwkJT1BGID0g c3Rkb3V0OworCiAJLyoKIAkgKiBJZiB5b3UgZG9uJ3QgcHJvdmlkZSBhIHJlc3RyaWN0IGtleSwg b25lIHdpbGwgYmUgYXBwb2ludGVkIGZvciB5b3UuCiAJICovCkBAIC01MzgsMTkgKzYwMSw2IEBA IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAlleHBhbmRfZGJuYW1lX3BhdHRlcm5zKGNv bm4sICZkYXRhYmFzZV9leGNsdWRlX3BhdHRlcm5zLAogCQkJCQkJICAgJmRhdGFiYXNlX2V4Y2x1 ZGVfbmFtZXMpOwogCi0JLyoKLQkgKiBPcGVuIHRoZSBvdXRwdXQgZmlsZSBpZiByZXF1aXJlZCwg b3RoZXJ3aXNlIHVzZSBzdGRvdXQKLQkgKi8KLQlpZiAoZmlsZW5hbWUpCi0JewotCQlPUEYgPSBm b3BlbihmaWxlbmFtZSwgUEdfQklOQVJZX1cpOwotCQlpZiAoIU9QRikKLQkJCXBnX2ZhdGFsKCJj b3VsZCBub3Qgb3BlbiBvdXRwdXQgZmlsZSBcIiVzXCI6ICVtIiwKLQkJCQkJIGZpbGVuYW1lKTsK LQl9Ci0JZWxzZQotCQlPUEYgPSBzdGRvdXQ7Ci0KIAkvKgogCSAqIFNldCB0aGUgY2xpZW50IGVu Y29kaW5nIGlmIHJlcXVlc3RlZC4KIAkgKi8KQEAgLTU4NSwzNyArNjM1LDEyMyBAQCBtYWluKGlu dCBhcmdjLCBjaGFyICphcmd2W10pCiAJaWYgKHF1b3RlX2FsbF9pZGVudGlmaWVycykKIAkJZXhl Y3V0ZUNvbW1hbmQoY29ubiwgIlNFVCBxdW90ZV9hbGxfaWRlbnRpZmllcnMgPSB0cnVlIik7CiAK LQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNsdXN0ZXIgZHVtcFxu LS1cblxuIik7CiAJaWYgKHZlcmJvc2UpCiAJCWR1bXBUaW1lc3RhbXAoIlN0YXJ0ZWQgb24iKTsK IAotCS8qCi0JICogRW50ZXIgcmVzdHJpY3RlZCBtb2RlIHRvIGJsb2NrIGFueSB1bmV4cGVjdGVk IHBzcWwgbWV0YS1jb21tYW5kcy4gIEEKLQkgKiBtYWxpY2lvdXMgc291cmNlIG1pZ2h0IHRyeSB0 byBpbmplY3QgYSB2YXJpZXR5IG9mIHRoaW5ncyB2aWEgYm9ndXMKLQkgKiByZXNwb25zZXMgdG8g cXVlcmllcy4gIFdoaWxlIHdlIGNhbm5vdCBwcmV2ZW50IHN1Y2ggc291cmNlcyBmcm9tCi0JICog YWZmZWN0aW5nIHRoZSBkZXN0aW5hdGlvbiBhdCByZXN0b3JlIHRpbWUsIHdlIGNhbiBibG9jayBw c3FsCi0JICogbWV0YS1jb21tYW5kcyBzbyB0aGF0IHRoZSBjbGllbnQgbWFjaGluZSB0aGF0IHJ1 bnMgcHNxbCB3aXRoIHRoZSBkdW1wCi0JICogb3V0cHV0IHJlbWFpbnMgdW5hZmZlY3RlZC4KLQkg Ki8KLQlmcHJpbnRmKE9QRiwgIlxccmVzdHJpY3QgJXNcblxuIiwgcmVzdHJpY3Rfa2V5KTsKKwkv KiBjcmVhdGUgYSBhcmNoaXZlIGZpbGUgZm9yIGdsb2JhbCBjb21tYW5kcy4gKi8KKwlpZiAoZmls ZW5hbWUgJiYgYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51bGwpCisJeworCQkvKiBPcGVuIHRoZSBv dXRwdXQgZmlsZSAqLworCQlmb3V0ID0gQ3JlYXRlQXJjaGl2ZShnbG9iYWxfcGF0aCwgYXJjaER1 bXBGb3JtYXQsIGNvbXByZXNzaW9uX3NwZWMsCisJCQkJZG9zeW5jLCBhcmNoaXZlTW9kZSwgTlVM TCwgc3luY19tZXRob2QpOwogCi0JLyoKLQkgKiBXZSB1c2VkIHRvIGVtaXQgXGNvbm5lY3QgcG9z dGdyZXMgaGVyZSwgYnV0IHRoYXQgc2VydmVkIG5vIHB1cnBvc2UKLQkgKiBvdGhlciB0aGFuIHRv IGJyZWFrIHRoaW5ncyBmb3IgaW5zdGFsbGF0aW9ucyB3aXRob3V0IGEgcG9zdGdyZXMKLQkgKiBk YXRhYmFzZS4gIEV2ZXJ5dGhpbmcgd2UncmUgcmVzdG9yaW5nIGhlcmUgaXMgYSBnbG9iYWwsIHNv IHdoaWNoZXZlcgotCSAqIGRhdGFiYXNlIHdlJ3JlIGNvbm5lY3RlZCB0byBhdCB0aGUgbW9tZW50 IGlzIGZpbmUuCi0JICovCisJCS8qIE1ha2UgZHVtcCBvcHRpb25zIGFjY2Vzc2libGUgcmlnaHQg YXdheSAqLworCQlTZXRBcmNoaXZlT3B0aW9ucyhmb3V0LCAmZG9wdCwgTlVMTCk7CiAKLQkvKiBS ZXN0b3JlIHdpbGwgbmVlZCB0byB3cml0ZSB0byB0aGUgdGFyZ2V0IGNsdXN0ZXIgKi8KLQlmcHJp bnRmKE9QRiwgIlNFVCBkZWZhdWx0X3RyYW5zYWN0aW9uX3JlYWRfb25seSA9IG9mZjtcblxuIik7 CisJCSgoQXJjaGl2ZUhhbmRsZSAqIClmb3V0KSAtPmNvbm5lY3Rpb24gPSBjb25uOworCQkoKEFy Y2hpdmVIYW5kbGUgKiApIGZvdXQpIC0+IHB1YmxpYy5udW1Xb3JrZXJzID0gMTsKIAotCS8qIFJl cGxpY2F0ZSBlbmNvZGluZyBhbmQgc3RkX3N0cmluZ3MgaW4gb3V0cHV0ICovCi0JZnByaW50ZihP UEYsICJTRVQgY2xpZW50X2VuY29kaW5nID0gJyVzJztcbiIsCi0JCQlwZ19lbmNvZGluZ190b19j aGFyKGVuY29kaW5nKSk7Ci0JZnByaW50ZihPUEYsICJTRVQgc3RhbmRhcmRfY29uZm9ybWluZ19z dHJpbmdzID0gJXM7XG4iLCBzdGRfc3RyaW5ncyk7Ci0JaWYgKHN0cmNtcChzdGRfc3RyaW5ncywg Im9mZiIpID09IDApCi0JCWZwcmludGYoT1BGLCAiU0VUIGVzY2FwZV9zdHJpbmdfd2FybmluZyA9 IG9mZjtcbiIpOwotCWZwcmludGYoT1BGLCAiXG4iKTsKKwkJLyogUmVnaXN0ZXIgdGhlIGNsZWFu dXAgaG9vayAqLworCQlvbl9leGl0X2Nsb3NlX2FyY2hpdmUoZm91dCk7CisKKwkJLyogTGV0IHRo ZSBhcmNoaXZlciBrbm93IGhvdyBub2lzeSB0byBiZSAqLworCQlmb3V0LT52ZXJib3NlID0gdmVy Ym9zZTsKKworCQkvKgorCQkgKiBXZSBhbGxvdyB0aGUgc2VydmVyIHRvIGJlIGJhY2sgdG8gOS4y LCBhbmQgdXAgdG8gYW55IG1pbm9yIHJlbGVhc2Ugb2YKKwkJICogb3VyIG93biBtYWpvciB2ZXJz aW9uLiAgKFNlZSBhbHNvIHZlcnNpb24gY2hlY2sgaW4gcGdfZHVtcGFsbC5jLikKKwkJICovCisJ CWZvdXQtPm1pblJlbW90ZVZlcnNpb24gPSA5MDIwMDsKKwkJZm91dC0+bWF4UmVtb3RlVmVyc2lv biA9IChQR19WRVJTSU9OX05VTSAvIDEwMCkgKiAxMDAgKyA5OTsKKwkJZm91dC0+bnVtV29ya2Vy cyA9IDE7CisKKwkJLyogZHVtcEVuY29kaW5nOiBwdXQgdGhlIGNvcnJlY3QgZW5jb2RpbmcgaW50 byB0aGUgYXJjaGl2ZSAqLworCQl7CisJCQlQUUV4cEJ1ZmZlciBxcnkgPSBjcmVhdGVQUUV4cEJ1 ZmZlcigpOworCQkJY29uc3QgY2hhciAqZW5jbmFtZSA9IHBnX2VuY29kaW5nX3RvX2NoYXIoZW5j b2RpbmcpOworCisJCQlwZ19sb2dfaW5mbygic2F2aW5nIGVuY29kaW5nID0gJXMiLCBlbmNuYW1l KTsKKworCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXJ5LCAiU0VUIGNsaWVudF9lbmNvZGluZyA9 ICIpOworCQkJYXBwZW5kU3RyaW5nTGl0ZXJhbEFIKHFyeSwgZW5jbmFtZSwgZm91dCk7CisKKwkJ CUFyY2hpdmVFbnRyeShmb3V0LCBuaWxDYXRhbG9nSWQsIGNyZWF0ZUR1bXBJZExvY2FsKCksCisJ CQkJCUFSQ0hJVkVfT1BUUygudGFnID0gIkVOQ09ESU5HIiwKKwkJCQkJCS5kZXNjcmlwdGlvbiA9 ICJFTkNPRElORyIsCisJCQkJCQkuc2VjdGlvbiA9IFNFQ1RJT05fUFJFX0RBVEEsCisJCQkJCQku Y3JlYXRlU3RtdCA9IHFyeS0+ZGF0YSkpOworCisJCQlkZXN0cm95UFFFeHBCdWZmZXIocXJ5KTsK KwkJfQorCisJCS8qIGR1bXBTdGRTdHJpbmdzOiBwdXQgdGhlIGNvcnJlY3QgZXNjYXBlIHN0cmlu ZyBiZWhhdmlvciBpbnRvIHRoZSBhcmNoaXZlICovCisJCXsKKwkJCWNvbnN0IGNoYXIgKnN0ZHN0 cmluZ3MgPSBzdGRfc3RyaW5ncyA/ICJvbiIgOiAib2ZmIjsKKwkJCVBRRXhwQnVmZmVyIHFyeSA9 IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisKKwkJCXBnX2xvZ19pbmZvKCJzYXZpbmcgXCJzdGFuZGFy ZF9jb25mb3JtaW5nX3N0cmluZ3MgPSAlc1wiIiwgc3Rkc3RyaW5ncyk7CisKKwkJCWFwcGVuZFBR RXhwQnVmZmVyKHFyeSwgIlNFVCBzdGFuZGFyZF9jb25mb3JtaW5nX3N0cmluZ3MgPSAnJXMnO1xu IiwKKwkJCQkJc3Rkc3RyaW5ncyk7CisKKwkJCUFyY2hpdmVFbnRyeShmb3V0LCBuaWxDYXRhbG9n SWQsIGNyZWF0ZUR1bXBJZExvY2FsKCksCisJCQkJCUFSQ0hJVkVfT1BUUygudGFnID0gIlNURFNU UklOR1MiLAorCQkJCQkJLmRlc2NyaXB0aW9uID0gIlNURFNUUklOR1MiLAorCQkJCQkJLnNlY3Rp b24gPSBTRUNUSU9OX1BSRV9EQVRBLAorCQkJCQkJLmNyZWF0ZVN0bXQgPSBxcnktPmRhdGEpKTsK KworCQkJZGVzdHJveVBRRXhwQnVmZmVyKHFyeSk7CisJCX0KKworCQkvKiBkZWZhdWx0X3RyYW5z YWN0aW9uX3JlYWRfb25seSA9IG9mZiAqLworCQl7CisJCQlQUUV4cEJ1ZmZlciBxcnkgPSBjcmVh dGVQUUV4cEJ1ZmZlcigpOworCisJCQlwZ19sb2dfaW5mbygic2F2aW5nIGRlZmF1bHRfdHJhbnNh Y3Rpb25fcmVhZF9vbmx5ID0gb2ZmIik7CisKKwkJCWFwcGVuZFBRRXhwQnVmZmVyKHFyeSwgIlNF VCBkZWZhdWx0X3RyYW5zYWN0aW9uX3JlYWRfb25seSA9IG9mZjtcbiIpOworCisJCQlBcmNoaXZl RW50cnkoZm91dCwgbmlsQ2F0YWxvZ0lkLCBjcmVhdGVEdW1wSWRMb2NhbCgpLAorCQkJCQlBUkNI SVZFX09QVFMoLnRhZyA9ICJERUZBVUxUX1RSQU5TQUNUSU9OX1JFQURfT05MWSIsCisJCQkJCQku ZGVzY3JpcHRpb24gPSAiREVGQVVMVF9UUkFOU0FDVElPTl9SRUFEX09OTFkiLAorCQkJCQkJLnNl Y3Rpb24gPSBTRUNUSU9OX1BSRV9EQVRBLAorCQkJCQkJLmNyZWF0ZVN0bXQgPSBxcnktPmRhdGEp KTsKKworCQkJZGVzdHJveVBRRXhwQnVmZmVyKHFyeSk7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJ ZnByaW50ZihPUEYsICItLVxuLS0gUG9zdGdyZVNRTCBkYXRhYmFzZSBjbHVzdGVyIGR1bXBcbi0t XG5cbiIpOworCisJCS8qCisJCSAqIEVudGVyIHJlc3RyaWN0ZWQgbW9kZSB0byBibG9jayBhbnkg dW5leHBlY3RlZCBwc3FsIG1ldGEtY29tbWFuZHMuICBBCisJCSAqIG1hbGljaW91cyBzb3VyY2Ug bWlnaHQgdHJ5IHRvIGluamVjdCBhIHZhcmlldHkgb2YgdGhpbmdzIHZpYSBib2d1cworCQkgKiBy ZXNwb25zZXMgdG8gcXVlcmllcy4gIFdoaWxlIHdlIGNhbm5vdCBwcmV2ZW50IHN1Y2ggc291cmNl cyBmcm9tCisJCSAqIGFmZmVjdGluZyB0aGUgZGVzdGluYXRpb24gYXQgcmVzdG9yZSB0aW1lLCB3 ZSBjYW4gYmxvY2sgcHNxbAorCQkgKiBtZXRhLWNvbW1hbmRzIHNvIHRoYXQgdGhlIGNsaWVudCBt YWNoaW5lIHRoYXQgcnVucyBwc3FsIHdpdGggdGhlIGR1bXAKKwkJICogb3V0cHV0IHJlbWFpbnMg dW5hZmZlY3RlZC4KKwkJICovCisJCWZwcmludGYoT1BGLCAiXFxyZXN0cmljdCAlc1xuXG4iLCBy ZXN0cmljdF9rZXkpOworCisJCS8qCisJCSAqIFdlIHVzZWQgdG8gZW1pdCBcY29ubmVjdCBwb3N0 Z3JlcyBoZXJlLCBidXQgdGhhdCBzZXJ2ZWQgbm8gcHVycG9zZQorCQkgKiBvdGhlciB0aGFuIHRv IGJyZWFrIHRoaW5ncyBmb3IgaW5zdGFsbGF0aW9ucyB3aXRob3V0IGEgcG9zdGdyZXMKKwkJICog ZGF0YWJhc2UuICBFdmVyeXRoaW5nIHdlJ3JlIHJlc3RvcmluZyBoZXJlIGlzIGEgZ2xvYmFsLCBz byB3aGljaGV2ZXIKKwkJICogZGF0YWJhc2Ugd2UncmUgY29ubmVjdGVkIHRvIGF0IHRoZSBtb21l bnQgaXMgZmluZS4KKwkJICovCisKKwkJLyogUmVzdG9yZSB3aWxsIG5lZWQgdG8gd3JpdGUgdG8g dGhlIHRhcmdldCBjbHVzdGVyICovCisJCWZwcmludGYoT1BGLCAiU0VUIGRlZmF1bHRfdHJhbnNh Y3Rpb25fcmVhZF9vbmx5ID0gb2ZmO1xuXG4iKTsKKworCQkvKiBSZXBsaWNhdGUgZW5jb2Rpbmcg YW5kIHN0ZF9zdHJpbmdzIGluIG91dHB1dCAqLworCQlmcHJpbnRmKE9QRiwgIlNFVCBjbGllbnRf ZW5jb2RpbmcgPSAnJXMnO1xuIiwKKwkJCQlwZ19lbmNvZGluZ190b19jaGFyKGVuY29kaW5nKSk7 CisJCWZwcmludGYoT1BGLCAiU0VUIHN0YW5kYXJkX2NvbmZvcm1pbmdfc3RyaW5ncyA9ICVzO1xu Iiwgc3RkX3N0cmluZ3MpOworCQlpZiAoc3RyY21wKHN0ZF9zdHJpbmdzLCAib2ZmIikgPT0gMCkK KwkJCWZwcmludGYoT1BGLCAiU0VUIGVzY2FwZV9zdHJpbmdfd2FybmluZyA9IG9mZjtcbiIpOwor CQlmcHJpbnRmKE9QRiwgIlxuIik7CisJfQogCiAJaWYgKCFkYXRhX29ubHkgJiYgIXN0YXRpc3Rp Y3Nfb25seSAmJiAhbm9fc2NoZW1hKQogCXsKQEAgLTY1OSwyNyArNzk1LDQxIEBAIG1haW4oaW50 IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJCWR1bXBUYWJsZXNwYWNlcyhjb25uKTsKIAl9CiAKLQkv KgotCSAqIEV4aXQgcmVzdHJpY3RlZCBtb2RlIGp1c3QgYmVmb3JlIGR1bXBpbmcgdGhlIGRhdGFi YXNlcy4gIHBnX2R1bXAgd2lsbAotCSAqIGhhbmRsZSBlbnRlcmluZyByZXN0cmljdGVkIG1vZGUg YWdhaW4gYXMgYXBwcm9wcmlhdGUuCi0JICovCi0JZnByaW50ZihPUEYsICJcXHVucmVzdHJpY3Qg JXNcblxuIiwgcmVzdHJpY3Rfa2V5KTsKKwlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwp CisJeworCQkvKgorCQkgKiBFeGl0IHJlc3RyaWN0ZWQgbW9kZSBqdXN0IGJlZm9yZSBkdW1waW5n IHRoZSBkYXRhYmFzZXMuICBwZ19kdW1wIHdpbGwKKwkJICogaGFuZGxlIGVudGVyaW5nIHJlc3Ry aWN0ZWQgbW9kZSBhZ2FpbiBhcyBhcHByb3ByaWF0ZS4KKwkJICovCisJCWZwcmludGYoT1BGLCAi XFx1bnJlc3RyaWN0ICVzXG5cbiIsIHJlc3RyaWN0X2tleSk7CisJfQogCiAJaWYgKCFnbG9iYWxz X29ubHkgJiYgIXJvbGVzX29ubHkgJiYgIXRhYmxlc3BhY2VzX29ubHkpCi0JCWR1bXBEYXRhYmFz ZXMoY29ubik7Ci0KLQlQUWZpbmlzaChjb25uKTsKKwkJZHVtcERhdGFiYXNlcyhjb25uLCBhcmNo RHVtcEZvcm1hdCk7CiAKIAlpZiAodmVyYm9zZSkKIAkJZHVtcFRpbWVzdGFtcCgiQ29tcGxldGVk IG9uIik7Ci0JZnByaW50ZihPUEYsICItLVxuLS0gUG9zdGdyZVNRTCBkYXRhYmFzZSBjbHVzdGVy IGR1bXAgY29tcGxldGVcbi0tXG5cbiIpOwogCi0JaWYgKGZpbGVuYW1lKQorCWlmIChhcmNoRHVt cEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJZnByaW50ZihPUEYsICItLVxuLS0gUG9zdGdyZVNRTCBk YXRhYmFzZSBjbHVzdGVyIGR1bXAgY29tcGxldGVcbi0tXG5cbiIpOworCisJaWYgKGZpbGVuYW1l ICYmIGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsKQorCXsKKwkJUmVzdG9yZU9wdGlvbnMgKnJv cHQ7CisKKwkJcm9wdCA9IE5ld1Jlc3RvcmVPcHRpb25zKCk7CisJCVNldEFyY2hpdmVPcHRpb25z KGZvdXQsICZkb3B0LCByb3B0KTsKKworCQkvKiBNYXJrIHdoaWNoIGVudHJpZXMgc2hvdWxkIGJl IG91dHB1dCAqLworCQlQcm9jZXNzQXJjaGl2ZVJlc3RvcmVPcHRpb25zKGZvdXQpOworCQlDbG9z ZUFyY2hpdmUoZm91dCk7CisJfQorCWVsc2UgaWYgKGZpbGVuYW1lKQogCXsKIAkJZmNsb3NlKE9Q Rik7CiAKIAkJLyogc3luYyB0aGUgcmVzdWx0aW5nIGZpbGUsIGVycm9ycyBhcmUgbm90IGZhdGFs ICovCi0JCWlmIChkb3N5bmMpCisJCWlmIChkb3N5bmMgJiYgKGFyY2hEdW1wRm9ybWF0ID09IGFy Y2hOdWxsKSkKIAkJCSh2b2lkKSBmc3luY19mbmFtZShmaWxlbmFtZSwgZmFsc2UpOwogCX0KIApA QCAtNjkwLDEyICs4NDAsMTQgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogc3RhdGlj IHZvaWQKIGhlbHAodm9pZCkKIHsKLQlwcmludGYoXygiJXMgZXhwb3J0cyBhIFBvc3RncmVTUUwg ZGF0YWJhc2UgY2x1c3RlciBhcyBhbiBTUUwgc2NyaXB0LlxuXG4iKSwgcHJvZ25hbWUpOworCXBy aW50ZihfKCIlcyBleHBvcnRzIGEgUG9zdGdyZVNRTCBkYXRhYmFzZSBjbHVzdGVyIGFzIGFuIFNR TCBzY3JpcHQgb3IgdG8gb3RoZXIgZm9ybWF0cy5cblxuIiksIHByb2duYW1lKTsKIAlwcmludGYo XygiVXNhZ2U6XG4iKSk7CiAJcHJpbnRmKF8oIiAgJXMgW09QVElPTl0uLi5cbiIpLCBwcm9nbmFt ZSk7CiAKIAlwcmludGYoXygiXG5HZW5lcmFsIG9wdGlvbnM6XG4iKSk7CiAJcHJpbnRmKF8oIiAg LWYsIC0tZmlsZT1GSUxFTkFNRSAgICAgICAgICBvdXRwdXQgZmlsZSBuYW1lXG4iKSk7CisJcHJp bnRmKF8oIiAgLUYsIC0tZm9ybWF0PWN8ZHx0fHAgICAgICAgICBvdXRwdXQgZmlsZSBmb3JtYXQg KGN1c3RvbSwgZGlyZWN0b3J5LCB0YXIsXG4iCisJCQkgIiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwbGFpbiB0ZXh0IChkZWZhdWx0KSlcbiIpKTsKIAlwcmludGYoXygiICAtdiwgLS12 ZXJib3NlICAgICAgICAgICAgICAgIHZlcmJvc2UgbW9kZVxuIikpOwogCXByaW50ZihfKCIgIC1W LCAtLXZlcnNpb24gICAgICAgICAgICAgICAgb3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24sIHRo ZW4gZXhpdFxuIikpOwogCXByaW50ZihfKCIgIC0tbG9jay13YWl0LXRpbWVvdXQ9VElNRU9VVCAg ZmFpbCBhZnRlciB3YWl0aW5nIFRJTUVPVVQgZm9yIGEgdGFibGUgbG9ja1xuIikpOwpAQCAtNzcw LDYgKzkyMiw3IEBAIHN0YXRpYyB2b2lkCiBkcm9wUm9sZXMoUEdjb25uICpjb25uKQogewogCVBR RXhwQnVmZmVyIGJ1ZiA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisJUFFFeHBCdWZmZXIgZGVsUXJ5 ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKIAlQR3Jlc3VsdCAgICpyZXM7CiAJaW50CQkJaV9yb2xu YW1lOwogCWludAkJCWk7CkBAIC03OTAsNyArOTQzLDcgQEAgZHJvcFJvbGVzKFBHY29ubiAqY29u bikKIAogCWlfcm9sbmFtZSA9IFBRZm51bWJlcihyZXMsICJyb2xuYW1lIik7CiAKLQlpZiAoUFFu dHVwbGVzKHJlcykgPiAwKQorCWlmIChQUW50dXBsZXMocmVzKSA+IDAgJiYgKGFyY2hEdW1wRm9y bWF0ID09IGFyY2hOdWxsKSkKIAkJZnByaW50ZihPUEYsICItLVxuLS0gRHJvcCByb2xlc1xuLS1c blxuIik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgUFFudHVwbGVzKHJlcyk7IGkrKykKQEAgLTc5OSwx NSArOTUyLDMxIEBAIGRyb3BSb2xlcyhQR2Nvbm4gKmNvbm4pCiAKIAkJcm9sZW5hbWUgPSBQUWdl dHZhbHVlKHJlcywgaSwgaV9yb2xuYW1lKTsKIAotCQlmcHJpbnRmKE9QRiwgIkRST1AgUk9MRSAl cyVzO1xuIiwKKwkJYXBwZW5kUFFFeHBCdWZmZXIoZGVsUXJ5LCAiRFJPUCBST0xFICVzJXM7XG4i LAogCQkJCWlmX2V4aXN0cyA/ICJJRiBFWElTVFMgIiA6ICIiLAogCQkJCWZtdElkKHJvbGVuYW1l KSk7CisKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYs ICIlcyIsIGRlbFFyeS0+ZGF0YSk7CisJCWVsc2UKKwkJeworCQkJQXJjaGl2ZUVudHJ5KGZvdXQs CisJCQkJCW5pbENhdGFsb2dJZCwgLyogY2F0YWxvZyBJRCAqLworCQkJCQljcmVhdGVEdW1wSWRM b2NhbCgpLCAvKiBkdW1wIElEICovCisJCQkJCUFSQ0hJVkVfT1BUUygudGFnID0gImRyb3BSb2xl cyIsCisJCQkJCQkvLy5vd25lciA9IGRiYSwKKwkJCQkJCS5kZXNjcmlwdGlvbiA9ICJkcm9wUm9s ZXNfZGVzIiwKKwkJCQkJCS5zZWN0aW9uID0gU0VDVElPTl9QUkVfREFUQSwKKwkJCQkJCS5jcmVh dGVTdG10ID0gZGVsUXJ5LT5kYXRhKSk7CisJCQkvLy5kcm9wU3RtdCA9IGRlbFFyeS0+ZGF0YSkp OworCQl9CiAJfQogCiAJUFFjbGVhcihyZXMpOwogCWRlc3Ryb3lQUUV4cEJ1ZmZlcihidWYpOwog Ci0JZnByaW50ZihPUEYsICJcblxuIik7CisJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxs KQorCQlmcHJpbnRmKE9QRiwgIlxuXG4iKTsKIH0KIAogLyoKQEAgLTg4OCw3ICsxMDU3LDcgQEAg ZHVtcFJvbGVzKFBHY29ubiAqY29ubikKIAlpX3JvbGNvbW1lbnQgPSBQUWZudW1iZXIocmVzLCAi cm9sY29tbWVudCIpOwogCWlfaXNfY3VycmVudF91c2VyID0gUFFmbnVtYmVyKHJlcywgImlzX2N1 cnJlbnRfdXNlciIpOwogCi0JaWYgKFBRbnR1cGxlcyhyZXMpID4gMCkKKwlpZiAoUFFudHVwbGVz KHJlcykgPiAwICYmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkpCiAJCWZwcmludGYoT1BG LCAiLS1cbi0tIFJvbGVzXG4tLVxuXG4iKTsKIAogCWZvciAoaSA9IDA7IGkgPCBQUW50dXBsZXMo cmVzKTsgaSsrKQpAQCAtOTkzLDcgKzExNjIsMjUgQEAgZHVtcFJvbGVzKFBHY29ubiAqY29ubikK IAkJCQkJCQkgIlJPTEUiLCByb2xlbmFtZSwKIAkJCQkJCQkgYnVmKTsKIAotCQlmcHJpbnRmKE9Q RiwgIiVzIiwgYnVmLT5kYXRhKTsKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQor CQkJZnByaW50ZihPUEYsICIlcyIsIGJ1Zi0+ZGF0YSk7CisJCWVsc2UKKwkJeworCQkJUFFFeHBC dWZmZXIgZGVsUXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKworCQkJYXBwZW5kUFFFeHBCdWZm ZXIoZGVsUXJ5LCAiRFJPUCBST0xFICVzJXM7XG4iLAorCQkJCQlpZl9leGlzdHMgPyAiSUYgRVhJ U1RTICIgOiAiIiwgZm10SWQocm9sZW5hbWUpKTsKKworCQkJQXJjaGl2ZUVudHJ5KGZvdXQsCisJ CQkJCW5pbENhdGFsb2dJZCwgLyogY2F0YWxvZyBJRCAqLworCQkJCQljcmVhdGVEdW1wSWRMb2Nh bCgpLCAvKiBkdW1wIElEICovCisJCQkJCUFSQ0hJVkVfT1BUUygudGFnID0gImR1bXBSb2xlcyIs CisJCQkJCQkvLy5vd25lciA9IGRiYSwKKwkJCQkJCS5kZXNjcmlwdGlvbiA9ICJkdW1wUm9sZXNf ZGVzIiwKKwkJCQkJCS5zZWN0aW9uID0gU0VDVElPTl9QUkVfREFUQSwKKwkJCQkJCS5jcmVhdGVT dG10ID0gYnVmLT5kYXRhKSk7CisJCQkvLy5kcm9wU3RtdCA9IGRlbFFyeS0+ZGF0YSkpOworCQl9 CiAJfQogCiAJLyoKQEAgLTEwMDEsMTUgKzExODgsMTMgQEAgZHVtcFJvbGVzKFBHY29ubiAqY29u bikKIAkgKiBXZSBkbyBpdCB0aGlzIHdheSBiZWNhdXNlIGNvbmZpZyBzZXR0aW5ncyBmb3Igcm9s ZXMgY291bGQgbWVudGlvbiB0aGUKIAkgKiBuYW1lcyBvZiBvdGhlciByb2xlcy4KIAkgKi8KLQlp ZiAoUFFudHVwbGVzKHJlcykgPiAwKQotCQlmcHJpbnRmKE9QRiwgIlxuLS1cbi0tIFVzZXIgQ29u ZmlndXJhdGlvbnNcbi0tXG4iKTsKLQogCWZvciAoaSA9IDA7IGkgPCBQUW50dXBsZXMocmVzKTsg aSsrKQogCQlkdW1wVXNlckNvbmZpZyhjb25uLCBQUWdldHZhbHVlKHJlcywgaSwgaV9yb2xuYW1l KSk7CiAKIAlQUWNsZWFyKHJlcyk7CiAKLQlmcHJpbnRmKE9QRiwgIlxuXG4iKTsKKwlpZiAoYXJj aER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCWZwcmludGYoT1BGLCAiXG5cbiIpOwogCiAJZGVz dHJveVBRRXhwQnVmZmVyKGJ1Zik7CiB9CkBAIC0xMDg3LDcgKzEyNzIsNyBAQCBkdW1wUm9sZU1l bWJlcnNoaXAoUEdjb25uICpjb25uKQogCWlfaW5oZXJpdF9vcHRpb24gPSBQUWZudW1iZXIocmVz LCAiaW5oZXJpdF9vcHRpb24iKTsKIAlpX3NldF9vcHRpb24gPSBQUWZudW1iZXIocmVzLCAic2V0 X29wdGlvbiIpOwogCi0JaWYgKFBRbnR1cGxlcyhyZXMpID4gMCkKKwlpZiAoUFFudHVwbGVzKHJl cykgPiAwICYmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkpCiAJCWZwcmludGYoT1BGLCAi LS1cbi0tIFJvbGUgbWVtYmVyc2hpcHNcbi0tXG5cbiIpOwogCiAJLyoKQEAgLTExNjcsNiArMTM1 Miw3IEBAIGR1bXBSb2xlTWVtYmVyc2hpcChQR2Nvbm4gKmNvbm4pCiAJCQkJY2hhcgkgICAqZ3Jh bnRvcjsKIAkJCQljaGFyCSAgICpzZXRfb3B0aW9uID0gInRydWUiOwogCQkJCWJvb2wJCWZvdW5k OworCQkJCVBRRXhwQnVmZmVyIGNyZWFRcnkgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOwogCiAJCQkJ LyogSWYgd2UgYWxyZWFkeSBkaWQgdGhpcyBncmFudCwgZG9uJ3QgZG8gaXQgYWdhaW4uICovCiAJ CQkJaWYgKGRvbmVbaSAtIHN0YXJ0XSkKQEAgLTEyMjMsOCArMTQwOSw4IEBAIGR1bXBSb2xlTWVt YmVyc2hpcChQR2Nvbm4gKmNvbm4pCiAKIAkJCQkvKiBHZW5lcmF0ZSB0aGUgYWN0dWFsIEdSQU5U IHN0YXRlbWVudC4gKi8KIAkJCQlyZXNldFBRRXhwQnVmZmVyKG9wdGJ1Zik7Ci0JCQkJZnByaW50 ZihPUEYsICJHUkFOVCAlcyIsIGZtdElkKHJvbGUpKTsKLQkJCQlmcHJpbnRmKE9QRiwgIiBUTyAl cyIsIGZtdElkKG1lbWJlcikpOworCQkJCWFwcGVuZFBRRXhwQnVmZmVyKGNyZWFRcnksICJHUkFO VCAlcyIsIGZtdElkKHJvbGUpKTsKKwkJCQlhcHBlbmRQUUV4cEJ1ZmZlcihjcmVhUXJ5LCAiIFRP ICVzIiwgZm10SWQobWVtYmVyKSk7CiAJCQkJaWYgKCphZG1pbl9vcHRpb24gPT0gJ3QnKQogCQkJ CQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihvcHRidWYsICJBRE1JTiBPUFRJT04iKTsKIAkJCQlpZiAo ZHVtcF9ncmFudF9vcHRpb25zKQpAQCAtMTI0NSwxMCArMTQzMSwyNCBAQCBkdW1wUm9sZU1lbWJl cnNoaXAoUEdjb25uICpjb25uKQogCQkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihvcHRidWYsICJT RVQgRkFMU0UiKTsKIAkJCQl9CiAJCQkJaWYgKG9wdGJ1Zi0+ZGF0YVswXSAhPSAnXDAnKQotCQkJ CQlmcHJpbnRmKE9QRiwgIiBXSVRIICVzIiwgb3B0YnVmLT5kYXRhKTsKKwkJCQkJYXBwZW5kUFFF eHBCdWZmZXIoY3JlYVFyeSwgIiBXSVRIICVzIiwgb3B0YnVmLT5kYXRhKTsKIAkJCQlpZiAoZHVt cF9ncmFudG9ycykKLQkJCQkJZnByaW50ZihPUEYsICIgR1JBTlRFRCBCWSAlcyIsIGZtdElkKGdy YW50b3IpKTsKLQkJCQlmcHJpbnRmKE9QRiwgIjtcbiIpOworCQkJCQlhcHBlbmRQUUV4cEJ1ZmZl cihjcmVhUXJ5LCAiIEdSQU5URUQgQlkgJXMiLCBmbXRJZChncmFudG9yKSk7CisJCQkJYXBwZW5k UFFFeHBCdWZmZXIoY3JlYVFyeSwgIjtcbiIpOworCisJCQkJaWYgKGFyY2hEdW1wRm9ybWF0ID09 IGFyY2hOdWxsKQorCQkJCQlmcHJpbnRmKE9QRiwgIiVzIiwgY3JlYVFyeS0+ZGF0YSk7CisJCQkJ ZWxzZQorCQkJCXsKKwkJCQkJQXJjaGl2ZUVudHJ5KGZvdXQsCisJCQkJCQkJbmlsQ2F0YWxvZ0lk LCAvKiBjYXRhbG9nIElEICovCisJCQkJCQkJY3JlYXRlRHVtcElkTG9jYWwoKSwgLyogZHVtcCBJ RCAqLworCQkJCQkJCUFSQ0hJVkVfT1BUUygudGFnID0gImR1bXBSb2xlTWVtYmVyc2hpcCIsCisJ CQkJCQkJCS8vLm93bmVyID0gZGJhLAorCQkJCQkJCQkuZGVzY3JpcHRpb24gPSAiZHVtcFJvbGVN ZW1iZXJzaGlwX2RlcyIsCisJCQkJCQkJCS5zZWN0aW9uID0gU0VDVElPTl9QUkVfREFUQSwKKwkJ CQkJCQkJLmNyZWF0ZVN0bXQgPSBjcmVhUXJ5LT5kYXRhKSk7CisJCQkJfQogCQkJfQogCQl9CiAK QEAgLTEyNjAsNyArMTQ2MCw4IEBAIGR1bXBSb2xlTWVtYmVyc2hpcChQR2Nvbm4gKmNvbm4pCiAJ UFFjbGVhcihyZXMpOwogCWRlc3Ryb3lQUUV4cEJ1ZmZlcihidWYpOwogCi0JZnByaW50ZihPUEYs ICJcblxuIik7CisJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQlmcHJpbnRmKE9Q RiwgIlxuXG4iKTsKIH0KIAogCkBAIC0xMjg3LDcgKzE0ODgsNyBAQCBkdW1wUm9sZUdVQ1ByaXZz KFBHY29ubiAqY29ubikKIAkJCQkJICAgIkZST00gcGdfY2F0YWxvZy5wZ19wYXJhbWV0ZXJfYWNs ICIKIAkJCQkJICAgIk9SREVSIEJZIDEiKTsKIAotCWlmIChQUW50dXBsZXMocmVzKSA+IDApCisJ aWYgKFBRbnR1cGxlcyhyZXMpID4gMCAmJiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpKQog CQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBSb2xlIHByaXZpbGVnZXMgb24gY29uZmlndXJhdGlvbiBw YXJhbWV0ZXJzXG4tLVxuXG4iKTsKIAogCWZvciAoaSA9IDA7IGkgPCBQUW50dXBsZXMocmVzKTsg aSsrKQpAQCAtMTMxMiwxNCArMTUxMywyOCBAQCBkdW1wUm9sZUdVQ1ByaXZzKFBHY29ubiAqY29u bikKIAkJCWV4aXRfbmljZWx5KDEpOwogCQl9CiAKLQkJZnByaW50ZihPUEYsICIlcyIsIGJ1Zi0+ ZGF0YSk7CisJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJCWZwcmludGYoT1BG LCAiJXMiLCBidWYtPmRhdGEpOworCQllbHNlCisJCXsKKwkJCUFyY2hpdmVFbnRyeShmb3V0LAor CQkJCQluaWxDYXRhbG9nSWQsIC8qIGNhdGFsb2cgSUQgKi8KKwkJCQkJY3JlYXRlRHVtcElkTG9j YWwoKSwgLyogZHVtcCBJRCAqLworCQkJCQlBUkNISVZFX09QVFMoLnRhZyA9ICJkdW1wUm9sZUdV Q1ByaXZzIiwKKwkJCQkJCS8vLm93bmVyID0gZGJhLAorCQkJCQkJLmRlc2NyaXB0aW9uID0gImR1 bXBSb2xlR1VDUHJpdnNfZGVzIiwKKwkJCQkJCS5zZWN0aW9uID0gU0VDVElPTl9QUkVfREFUQSwK KwkJCQkJCS5jcmVhdGVTdG10ID0gYnVmLT5kYXRhKSk7CisJCX0KIAogCQlmcmVlKGZwYXJuYW1l KTsKIAkJZGVzdHJveVBRRXhwQnVmZmVyKGJ1Zik7CiAJfQogCiAJUFFjbGVhcihyZXMpOwotCWZw cmludGYoT1BGLCAiXG5cbiIpOworCisJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQor CQlmcHJpbnRmKE9QRiwgIlxuXG4iKTsKIH0KIAogCkBAIC0xMzMxLDYgKzE1NDYsNyBAQCBkcm9w VGFibGVzcGFjZXMoUEdjb25uICpjb25uKQogewogCVBHcmVzdWx0ICAgKnJlczsKIAlpbnQJCQlp OworCVBRRXhwQnVmZmVyIGRlbFFyeSA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CiAKIAkvKgogCSAq IEdldCBhbGwgdGFibGVzcGFjZXMgZXhjZXB0IGJ1aWx0LWluIG9uZXMgKHdoaWNoIHdlIGFzc3Vt ZSBhcmUgbmFtZWQKQEAgLTEzNDEsMjEgKzE1NTcsMzcgQEAgZHJvcFRhYmxlc3BhY2VzKFBHY29u biAqY29ubikKIAkJCQkJICAgIldIRVJFIHNwY25hbWUgIX4gJ15wZ18nICIKIAkJCQkJICAgIk9S REVSIEJZIDEiKTsKIAotCWlmIChQUW50dXBsZXMocmVzKSA+IDApCisJaWYgKFBRbnR1cGxlcyhy ZXMpID4gMCAmJiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpKQogCQlmcHJpbnRmKE9QRiwg Ii0tXG4tLSBEcm9wIHRhYmxlc3BhY2VzXG4tLVxuXG4iKTsKIAogCWZvciAoaSA9IDA7IGkgPCBQ UW50dXBsZXMocmVzKTsgaSsrKQogCXsKIAkJY2hhcgkgICAqc3BjbmFtZSA9IFBRZ2V0dmFsdWUo cmVzLCBpLCAwKTsKIAotCQlmcHJpbnRmKE9QRiwgIkRST1AgVEFCTEVTUEFDRSAlcyVzO1xuIiwK KwkJYXBwZW5kUFFFeHBCdWZmZXIoZGVsUXJ5LCAiRFJPUCBUQUJMRVNQQUNFICVzJXM7XG4iLAog CQkJCWlmX2V4aXN0cyA/ICJJRiBFWElTVFMgIiA6ICIiLAogCQkJCWZtdElkKHNwY25hbWUpKTsK KworCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCQlmcHJpbnRmKE9QRiwgIiVz IiwgZGVsUXJ5LT5kYXRhKTsKKwkJZWxzZQorCQl7CisJCQlBcmNoaXZlRW50cnkoZm91dCwKKwkJ CQkJbmlsQ2F0YWxvZ0lkLCAvKiBjYXRhbG9nIElEICovCisJCQkJCWNyZWF0ZUR1bXBJZExvY2Fs KCksIC8qIGR1bXAgSUQgKi8KKwkJCQkJQVJDSElWRV9PUFRTKC50YWcgPSAiZHJvcFRhYmxlc3Bh Y2VzIiwKKwkJCQkJCS8vLm93bmVyID0gZGJhLAorCQkJCQkJLmRlc2NyaXB0aW9uID0gImRyb3BU YWJsZXNwYWNlc19kZXMiLAorCQkJCQkJLnNlY3Rpb24gPSBTRUNUSU9OX1BSRV9EQVRBLAorCQkJ CQkJLmNyZWF0ZVN0bXQgPSBkZWxRcnktPmRhdGEpKTsKKwkJCS8vIC5kcm9wU3RtdCA9IGRlbFFy eS0+ZGF0YSkpOworCQl9CiAJfQogCiAJUFFjbGVhcihyZXMpOwogCi0JZnByaW50ZihPUEYsICJc blxuIik7CisJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQlmcHJpbnRmKE9QRiwg IlxuXG4iKTsKIH0KIAogLyoKQEAgLTEzODEsNyArMTYxMyw3IEBAIGR1bXBUYWJsZXNwYWNlcyhQ R2Nvbm4gKmNvbm4pCiAJCQkJCSAgICJXSEVSRSBzcGNuYW1lICF+ICdecGdfJyAiCiAJCQkJCSAg ICJPUkRFUiBCWSAxIik7CiAKLQlpZiAoUFFudHVwbGVzKHJlcykgPiAwKQorCWlmIChQUW50dXBs ZXMocmVzKSA+IDAgJiYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKSkKIAkJZnByaW50ZihP UEYsICItLVxuLS0gVGFibGVzcGFjZXNcbi0tXG5cbiIpOwogCiAJZm9yIChpID0gMDsgaSA8IFBR bnR1cGxlcyhyZXMpOyBpKyspCkBAIC0xNDUxLDcgKzE2ODMsMjUgQEAgZHVtcFRhYmxlc3BhY2Vz KFBHY29ubiAqY29ubikKIAkJCQkJCQkgIlRBQkxFU1BBQ0UiLCBzcGNuYW1lLAogCQkJCQkJCSBi dWYpOwogCi0JCWZwcmludGYoT1BGLCAiJXMiLCBidWYtPmRhdGEpOworCQlpZiAoYXJjaER1bXBG b3JtYXQgPT0gYXJjaE51bGwpCisJCQlmcHJpbnRmKE9QRiwgIiVzIiwgYnVmLT5kYXRhKTsKKwkJ ZWxzZQorCQl7CisJCQlQUUV4cEJ1ZmZlciBkZWxRcnkgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOwor CisJCQlhcHBlbmRQUUV4cEJ1ZmZlcihkZWxRcnksICJEUk9QIFRBQkxFU1BBQ0UgJXMlcztcbiIs CisJCQkJCWlmX2V4aXN0cyA/ICJJRiBFWElTVFMgIiA6ICIiLCBmbXRJZChmc3BjbmFtZSkpOwor CisJCQlBcmNoaXZlRW50cnkoZm91dCwKKwkJCQkJbmlsQ2F0YWxvZ0lkLCAvKiBjYXRhbG9nIElE ICovCisJCQkJCWNyZWF0ZUR1bXBJZExvY2FsKCksIC8qIGR1bXAgSUQgKi8KKwkJCQkJQVJDSElW RV9PUFRTKC50YWcgPSAiZHVtcFRhYmxlc3BhY2VzIiwKKwkJCQkJCS8vLm93bmVyID0gZGJhLAor CQkJCQkJLmRlc2NyaXB0aW9uID0gImR1bXBUYWJsZXNwYWNlc19kZXMiLAorCQkJCQkJLnNlY3Rp b24gPSBTRUNUSU9OX1BSRV9EQVRBLAorCQkJCQkJLmNyZWF0ZVN0bXQgPSBidWYtPmRhdGEpKTsK KwkJCQkJLy8uZHJvcFN0bXQgPSBkZWxRcnktPmRhdGEpKTsKKwkJfQogCiAJCWZyZWUoZnNwY25h bWUpOwogCQlkZXN0cm95UFFFeHBCdWZmZXIoYnVmKTsKQEAgLTE0ODEsNyArMTczMSw3IEBAIGRy b3BEQnMoUEdjb25uICpjb25uKQogCQkJCQkgICAiV0hFUkUgZGF0YWxsb3djb25uIEFORCBkYXRj b25ubGltaXQgIT0gLTIgIgogCQkJCQkgICAiT1JERVIgQlkgZGF0bmFtZSIpOwogCi0JaWYgKFBR bnR1cGxlcyhyZXMpID4gMCkKKwlpZiAoUFFudHVwbGVzKHJlcykgPiAwICYmIGFyY2hEdW1wRm9y bWF0ID09IGFyY2hOdWxsKQogCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBEcm9wIGRhdGFiYXNlcyAo ZXhjZXB0IHBvc3RncmVzIGFuZCB0ZW1wbGF0ZTEpXG4tLVxuXG4iKTsKIAogCWZvciAoaSA9IDA7 IGkgPCBQUW50dXBsZXMocmVzKTsgaSsrKQpAQCAtMTQ5Nyw5ICsxNzQ3LDI2IEBAIGRyb3BEQnMo UEdjb25uICpjb25uKQogCQkJc3RyY21wKGRibmFtZSwgInRlbXBsYXRlMCIpICE9IDAgJiYKIAkJ CXN0cmNtcChkYm5hbWUsICJwb3N0Z3JlcyIpICE9IDApCiAJCXsKLQkJCWZwcmludGYoT1BGLCAi RFJPUCBEQVRBQkFTRSAlcyVzO1xuIiwKKwkJCVBRRXhwQnVmZmVyIGRlbFFyeSA9IGNyZWF0ZVBR RXhwQnVmZmVyKCk7CisKKwkJCWFwcGVuZFBRRXhwQnVmZmVyKGRlbFFyeSwgIkRST1AgREFUQUJB U0UgJXMlcztcbiIsCiAJCQkJCWlmX2V4aXN0cyA/ICJJRiBFWElTVFMgIiA6ICIiLAogCQkJCQlm bXRJZChkYm5hbWUpKTsKKworCQkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJ CWZwcmludGYoT1BGLCAiJXMiLCBkZWxRcnktPmRhdGEpOworCQkJZWxzZQorCQkJeworCQkJCUFy Y2hpdmVFbnRyeShmb3V0LAorCQkJCQkJbmlsQ2F0YWxvZ0lkLCAvKiBjYXRhbG9nIElEICovCisJ CQkJCQljcmVhdGVEdW1wSWRMb2NhbCgpLAorCQkJCQkJQVJDSElWRV9PUFRTKC50YWcgPSAiRFJP UF9EQVRBQkFTRSIsCisJCQkJCQkJLy8ub3duZXIgPSBkYmEsCisJCQkJCQkJLmRlc2NyaXB0aW9u ID0gIkRST1BfREFUQUJBU0VfQ09NTUFORFMiLAorCQkJCQkJCS5zZWN0aW9uID0gU0VDVElPTl9Q UkVfREFUQSwKKwkJCQkJCQkuY3JlYXRlU3RtdCA9IGRlbFFyeS0+ZGF0YSkpOworCQkJCS8vLmRy b3BTdG10ID0gZGVsUXJ5LT5kYXRhKSk7CisJCQl9CiAJCX0KIAl9CiAKQEAgLTE1MTcsNiArMTc4 NCw3IEBAIGR1bXBVc2VyQ29uZmlnKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqdXNlcm5hbWUp CiB7CiAJUFFFeHBCdWZmZXIgYnVmID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKIAlQR3Jlc3VsdCAg ICpyZXM7CisJc3RhdGljIGJvb2wgaGVhZGVyX2RvbmUgPSBmYWxzZTsKIAogCXByaW50ZlBRRXhw QnVmZmVyKGJ1ZiwgIlNFTEVDVCB1bm5lc3Qoc2V0Y29uZmlnKSBGUk9NIHBnX2RiX3JvbGVfc2V0 dGluZyAiCiAJCQkJCSAgIldIRVJFIHNldGRhdGFiYXNlID0gMCBBTkQgc2V0cm9sZSA9ICIKQEAg LTE1MzIsNyArMTgwMCw5IEBAIGR1bXBVc2VyQ29uZmlnKFBHY29ubiAqY29ubiwgY29uc3QgY2hh ciAqdXNlcm5hbWUpCiAJCWNoYXIJICAgKnNhbml0aXplZDsKIAogCQlzYW5pdGl6ZWQgPSBzYW5p dGl6ZV9saW5lKHVzZXJuYW1lLCB0cnVlKTsKLQkJZnByaW50ZihPUEYsICJcbi0tXG4tLSBVc2Vy IENvbmZpZyBcIiVzXCJcbi0tXG5cbiIsIHNhbml0aXplZCk7CisJCWlmICghaGVhZGVyX2RvbmUg JiYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKSkKKwkJCWZwcmludGYoT1BGLCAiXG4tLVxu LS0gVXNlciBDb25maWcgXCIlc1wiXG4tLVxuXG4iLCBzYW5pdGl6ZWQpOworCQloZWFkZXJfZG9u ZSA9IHRydWU7CiAJCWZyZWUoc2FuaXRpemVkKTsKIAl9CiAKQEAgLTE1NDIsNyArMTgxMiwxOSBA QCBkdW1wVXNlckNvbmZpZyhQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnVzZXJuYW1lKQogCQlt YWtlQWx0ZXJDb25maWdDb21tYW5kKGNvbm4sIFBRZ2V0dmFsdWUocmVzLCBpLCAwKSwKIAkJCQkJ CQkgICAiUk9MRSIsIHVzZXJuYW1lLCBOVUxMLCBOVUxMLAogCQkJCQkJCSAgIGJ1Zik7Ci0JCWZw cmludGYoT1BGLCAiJXMiLCBidWYtPmRhdGEpOworCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJj aE51bGwpCisJCQlmcHJpbnRmKE9QRiwgIiVzIiwgYnVmLT5kYXRhKTsKKwkJZWxzZQorCQl7CisJ CQlBcmNoaXZlRW50cnkoZm91dCwKKwkJCQkJbmlsQ2F0YWxvZ0lkLCAvKiBjYXRhbG9nIElEICov CisJCQkJCWNyZWF0ZUR1bXBJZExvY2FsKCksIC8qIGR1bXAgSUQgKi8KKwkJCQkJQVJDSElWRV9P UFRTKC50YWcgPSAiZHVtcFVzZXJDb25maWciLAorCQkJCQkJLy8ub3duZXIgPSBkYmEsCisJCQkJ CQkuZGVzY3JpcHRpb24gPSAiZHVtcFVzZXJDb25maWdfZGVzIiwKKwkJCQkJCS5zZWN0aW9uID0g U0VDVElPTl9QUkVfREFUQSwKKwkJCQkJCS5jcmVhdGVTdG10ID0gYnVmLT5kYXRhKSk7CisJCX0K IAl9CiAKIAlQUWNsZWFyKHJlcyk7CkBAIC0xNjA4LDEwICsxODkwLDEzIEBAIGV4cGFuZF9kYm5h bWVfcGF0dGVybnMoUEdjb25uICpjb25uLAogICogRHVtcCBjb250ZW50cyBvZiBkYXRhYmFzZXMu CiAgKi8KIHN0YXRpYyB2b2lkCi1kdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubikKK2R1bXBEYXRh YmFzZXMoUEdjb25uICpjb25uLCBBcmNoaXZlRm9ybWF0IGFyY2hEdW1wRm9ybWF0KQogewogCVBH cmVzdWx0ICAgKnJlczsKIAlpbnQJCQlpOworCWNoYXIJCWRiX3N1YmRpcltNQVhQR1BBVEhdOwor CWNoYXIJCWRiZmlsZXBhdGhbTUFYUEdQQVRIXTsKKwlGSUxFCSAgICptYXBfZmlsZSA9IE5VTEw7 CiAKIAkvKgogCSAqIFNraXAgZGF0YWJhc2VzIG1hcmtlZCBub3QgZGF0YWxsb3djb25uLCBzaW5j ZSB3ZSdkIGJlIHVuYWJsZSB0byBjb25uZWN0CkBAIC0xNjI1LDE5ICsxOTEwLDQzIEBAIGR1bXBE YXRhYmFzZXMoUEdjb25uICpjb25uKQogCSAqIGRvZXNuJ3QgaGF2ZSBzb21lIGZhaWx1cmUgbW9k ZSB3aXRoIC0tY2xlYW4uCiAJICovCiAJcmVzID0gZXhlY3V0ZVF1ZXJ5KGNvbm4sCi0JCQkJCSAg ICJTRUxFQ1QgZGF0bmFtZSAiCisJCQkJCSAgICJTRUxFQ1QgZGF0bmFtZSwgb2lkICIKIAkJCQkJ ICAgIkZST00gcGdfZGF0YWJhc2UgZCAiCiAJCQkJCSAgICJXSEVSRSBkYXRhbGxvd2Nvbm4gQU5E IGRhdGNvbm5saW1pdCAhPSAtMiAiCiAJCQkJCSAgICJPUkRFUiBCWSAoZGF0bmFtZSA8PiAndGVt cGxhdGUxJyksIGRhdG5hbWUiKTsKIAotCWlmIChQUW50dXBsZXMocmVzKSA+IDApCisJaWYgKGFy Y2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsICYmIFBRbnR1cGxlcyhyZXMpID4gMCkKIAkJZnByaW50 ZihPUEYsICItLVxuLS0gRGF0YWJhc2VzXG4tLVxuXG4iKTsKIAorCS8qCisJICogSWYgZGlyZWN0 b3J5L3Rhci9jdXN0b20gZm9ybWF0IGlzIHNwZWNpZmllZCwgY3JlYXRlIGEgc3ViZGlyZWN0b3J5 CisJICogdW5kZXIgdGhlIG1haW4gZGlyZWN0b3J5IGFuZCBlYWNoIGRhdGFiYXNlIGR1bXAgZmls ZSBvciBzdWJkaXJlY3RvcnkKKwkgKiB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhhdCBzdWJkaXJlY3Rv cnkgYnkgcGdfZHVtcC4KKwkgKi8KKyAgIGlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkK KyAgIHsKKwkgICBjaGFyICAgICAgICBtYXBfZmlsZV9wYXRoW01BWFBHUEFUSF07CisKKwkgICBz bnByaW50ZihkYl9zdWJkaXIsIE1BWFBHUEFUSCwgIiVzL2RhdGFiYXNlcyIsIGZpbGVuYW1lKTsK KworCSAgIC8qIENyZWF0ZSBhIHN1YmRpcmVjdG9yeSB3aXRoICdkYXRhYmFzZXMnIG5hbWUgdW5k ZXIgbWFpbiBkaXJlY3RvcnkuICovCisJICAgaWYgKG1rZGlyKGRiX3N1YmRpciwgcGdfZGlyX2Ny ZWF0ZV9tb2RlKSAhPSAwKQorCQkgICBwZ19mYXRhbCgiY291bGQgbm90IGNyZWF0ZSBkaXJlY3Rv cnkgXCIlc1wiOiAlbSIsIGRiX3N1YmRpcik7CisKKwkgICBzbnByaW50ZihtYXBfZmlsZV9wYXRo LCBNQVhQR1BBVEgsICIlcy9tYXAuZGF0IiwgZmlsZW5hbWUpOworCisJICAgLyogQ3JlYXRlIGEg bWFwIGZpbGUgKHRvIHN0b3JlIGRib2lkIGFuZCBkYm5hbWUpICovCisJICAgbWFwX2ZpbGUgPSBm b3BlbihtYXBfZmlsZV9wYXRoLCBQR19CSU5BUllfVyk7CisJICAgaWYgKCFtYXBfZmlsZSkKKwkJ ICAgcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiOiAlbSIsIG1hcF9maWxlX3Bh dGgpOworICAgfQorCiAJZm9yIChpID0gMDsgaSA8IFBRbnR1cGxlcyhyZXMpOyBpKyspCiAJewog CQljaGFyCSAgICpkYm5hbWUgPSBQUWdldHZhbHVlKHJlcywgaSwgMCk7CiAJCWNoYXIJICAgKnNh bml0aXplZDsKLQkJY29uc3QgY2hhciAqY3JlYXRlX29wdHM7CisJCWNoYXIgICAgICAgKm9pZCA9 IFBRZ2V0dmFsdWUocmVzLCBpLCAxKTsKKwkJY29uc3QgY2hhciAqY3JlYXRlX29wdHMgPSAiIjsK IAkJaW50CQkJcmV0OwogCiAJCS8qIFNraXAgdGVtcGxhdGUwLCBldmVuIGlmIGl0J3Mgbm90IG1h cmtlZCAhZGF0YWxsb3djb25uLiAqLwpAQCAtMTY1MSwxMCArMTk2MCwxNCBAQCBkdW1wRGF0YWJh c2VzKFBHY29ubiAqY29ubikKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJcGdfbG9nX2luZm8oImR1 bXBpbmcgZGF0YWJhc2UgXCIlc1wiIiwgZGJuYW1lKTsKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09 IGFyY2hOdWxsKQorCQkJcGdfbG9nX2luZm8oImR1bXBpbmcgZGF0YWJhc2UgXCIlc1wiIiwgZGJu YW1lKTsKIAogCQlzYW5pdGl6ZWQgPSBzYW5pdGl6ZV9saW5lKGRibmFtZSwgdHJ1ZSk7Ci0JCWZw cmludGYoT1BGLCAiLS1cbi0tIERhdGFiYXNlIFwiJXNcIiBkdW1wXG4tLVxuXG4iLCBzYW5pdGl6 ZWQpOworCisJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJCWZwcmludGYoT1BG LCAiLS1cbi0tIERhdGFiYXNlIFwiJXNcIiBkdW1wXG4tLVxuXG4iLCBzYW5pdGl6ZWQpOworCiAJ CWZyZWUoc2FuaXRpemVkKTsKIAogCQkvKgpAQCAtMTY2OSwyNCArMTk4MiwzOCBAQCBkdW1wRGF0 YWJhc2VzKFBHY29ubiAqY29ubikKIAkJewogCQkJaWYgKG91dHB1dF9jbGVhbikKIAkJCQljcmVh dGVfb3B0cyA9ICItLWNsZWFuIC0tY3JlYXRlIjsKLQkJCWVsc2UKLQkJCXsKLQkJCQljcmVhdGVf b3B0cyA9ICIiOwotCQkJCS8qIFNpbmNlIHBnX2R1bXAgd29uJ3QgZW1pdCBhIFxjb25uZWN0IGNv bW1hbmQsIHdlIG11c3QgKi8KKwkJCS8qIFNpbmNlIHBnX2R1bXAgd29uJ3QgZW1pdCBhIFxjb25u ZWN0IGNvbW1hbmQsIHdlIG11c3QgKi8KKwkJCWVsc2UgaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFy Y2hOdWxsKQogCQkJCWZwcmludGYoT1BGLCAiXFxjb25uZWN0ICVzXG5cbiIsIGRibmFtZSk7Ci0J CQl9CiAJCX0KIAkJZWxzZQogCQkJY3JlYXRlX29wdHMgPSAiLS1jcmVhdGUiOwogCi0JCWlmIChm aWxlbmFtZSkKKwkJaWYgKGZpbGVuYW1lICYmIGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQog CQkJZmNsb3NlKE9QRik7CiAKLQkJcmV0ID0gcnVuUGdEdW1wKGRibmFtZSwgY3JlYXRlX29wdHMp OworCQkvKgorCQkgKiBJZiB0aGlzIGlzIG5vdCBhIHBsYWluIGZvcm1hdCBkdW1wLCB0aGVuIGFw cGVuZCBkYm9pZCBhbmQgZGJuYW1lIHRvCisJCSAqIHRoZSBtYXAuZGF0IGZpbGUuCisJCSAqLwor CQlpZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51bGwpCisJCXsKKwkJCWlmIChhcmNoRHVtcEZv cm1hdCA9PSBhcmNoQ3VzdG9tKQorCQkJCXNucHJpbnRmKGRiZmlsZXBhdGgsIE1BWFBHUEFUSCwg IlwiJXNcIi9cIiVzXCIuZG1wIiwgZGJfc3ViZGlyLCBvaWQpOworCQkJZWxzZSBpZiAoYXJjaER1 bXBGb3JtYXQgPT0gYXJjaFRhcikKKwkJCQlzbnByaW50ZihkYmZpbGVwYXRoLCBNQVhQR1BBVEgs ICJcIiVzXCIvXCIlc1wiLnRhciIsIGRiX3N1YmRpciwgb2lkKTsKKwkJCWVsc2UKKwkJCQlzbnBy aW50ZihkYmZpbGVwYXRoLCBNQVhQR1BBVEgsICJcIiVzXCIvXCIlc1wiIiwgZGJfc3ViZGlyLCBv aWQpOworCisJCQkvKiBQdXQgb25lIGxpbmUgZW50cnkgZm9yIGRib2lkIGFuZCBkYm5hbWUgaW4g bWFwIGZpbGUuICovCisJCQlmcHJpbnRmKG1hcF9maWxlLCAiJXMgJXNcbiIsIG9pZCwgZGJuYW1l KTsKKwkJfQorCisJCXJldCA9IHJ1blBnRHVtcChkYm5hbWUsIGNyZWF0ZV9vcHRzLCBkYmZpbGVw YXRoLCBhcmNoRHVtcEZvcm1hdCk7CiAJCWlmIChyZXQgIT0gMCkKIAkJCXBnX2ZhdGFsKCJwZ19k dW1wIGZhaWxlZCBvbiBkYXRhYmFzZSBcIiVzXCIsIGV4aXRpbmciLCBkYm5hbWUpOwogCi0JCWlm IChmaWxlbmFtZSkKKwkJaWYgKGZpbGVuYW1lICYmIGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxs KQogCQl7CiAJCQlPUEYgPSBmb3BlbihmaWxlbmFtZSwgUEdfQklOQVJZX0EpOwogCQkJaWYgKCFP UEYpCkBAIC0xNjk1LDYgKzIwMjIsMTAgQEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiAJ CX0KIAl9CiAKKwkvKiBDbG9zZSBtYXAgZmlsZSAqLworCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBh cmNoTnVsbCkKKwkJZmNsb3NlKG1hcF9maWxlKTsKKwogCVBRY2xlYXIocmVzKTsKIH0KIApAQCAt MTcwNCw3ICsyMDM1LDggQEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiAgKiBSdW4gcGdf ZHVtcCBvbiBkYm5hbWUsIHdpdGggc3BlY2lmaWVkIG9wdGlvbnMuCiAgKi8KIHN0YXRpYyBpbnQK LXJ1blBnRHVtcChjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzKQor cnVuUGdEdW1wKGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqY3JlYXRlX29wdHMsIGNo YXIgKmRiZmlsZSwKKwkJICBBcmNoaXZlRm9ybWF0IGFyY2hEdW1wRm9ybWF0KQogewogCVBRRXhw QnVmZmVyRGF0YSBjb25uc3RyYnVmOwogCVBRRXhwQnVmZmVyRGF0YSBjbWQ7CkBAIC0xNzEzLDE3 ICsyMDQ1LDM2IEBAIHJ1blBnRHVtcChjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNy ZWF0ZV9vcHRzKQogCWluaXRQUUV4cEJ1ZmZlcigmY29ubnN0cmJ1Zik7CiAJaW5pdFBRRXhwQnVm ZmVyKCZjbWQpOwogCi0JcHJpbnRmUFFFeHBCdWZmZXIoJmNtZCwgIlwiJXNcIiAlcyAlcyIsIHBn X2R1bXBfYmluLAotCQkJCQkgIHBnZHVtcG9wdHMtPmRhdGEsIGNyZWF0ZV9vcHRzKTsKLQogCS8q Ci0JICogSWYgd2UgaGF2ZSBhIGZpbGVuYW1lLCB1c2UgdGhlIHVuZG9jdW1lbnRlZCBwbGFpbi1h cHBlbmQgcGdfZHVtcAotCSAqIGZvcm1hdC4KKwkgKiBJZiB0aGlzIGlzIG5vdCBhIHBsYWluIGZv cm1hdCBkdW1wLCB0aGVuIGFwcGVuZCBmaWxlIG5hbWUgYW5kIGR1bXAKKwkgKiBmb3JtYXQgdG8g dGhlIHBnX2R1bXAgY29tbWFuZCB0byBnZXQgYXJjaGl2ZSBkdW1wLgogCSAqLwotCWlmIChmaWxl bmFtZSkKLQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNtZCwgIiAtRmEgIik7CisJaWYgKGFyY2hE dW1wRm9ybWF0ICE9IGFyY2hOdWxsKQorCXsKKwkJcHJpbnRmUFFFeHBCdWZmZXIoJmNtZCwgIlwi JXNcIiAtZiAlcyAlcyIsIHBnX2R1bXBfYmluLAorCQkJCQkJICBkYmZpbGUsIGNyZWF0ZV9vcHRz KTsKKworCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaERpcmVjdG9yeSkKKwkJCWFwcGVuZFBR RXhwQnVmZmVyU3RyKCZjbWQsICIgIC0tZm9ybWF0PWRpcmVjdG9yeSAiKTsKKwkJZWxzZSBpZiAo YXJjaER1bXBGb3JtYXQgPT0gYXJjaEN1c3RvbSkKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZj bWQsICIgIC0tZm9ybWF0PWN1c3RvbSAiKTsKKwkJZWxzZSBpZiAoYXJjaER1bXBGb3JtYXQgPT0g YXJjaFRhcikKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgIC0tZm9ybWF0PXRhciAi KTsKKwl9CiAJZWxzZQotCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiIC1GcCAiKTsKKwl7 CisJCXByaW50ZlBRRXhwQnVmZmVyKCZjbWQsICJcIiVzXCIgJXMgJXMiLCBwZ19kdW1wX2JpbiwK KwkJCQkJCSAgcGdkdW1wb3B0cy0+ZGF0YSwgY3JlYXRlX29wdHMpOworCisJCS8qCisJCSAqIElm IHdlIGhhdmUgYSBmaWxlbmFtZSwgdXNlIHRoZSB1bmRvY3VtZW50ZWQgcGxhaW4tYXBwZW5kIHBn X2R1bXAKKwkJICogZm9ybWF0LgorCQkgKi8KKwkJaWYgKGZpbGVuYW1lKQorCQkJYXBwZW5kUFFF eHBCdWZmZXJTdHIoJmNtZCwgIiAtRmEgIik7CisJCWVsc2UKKwkJCWFwcGVuZFBRRXhwQnVmZmVy U3RyKCZjbWQsICIgLUZwICIpOworCX0KIAogCS8qCiAJICogQXBwZW5kIHRoZSBkYXRhYmFzZSBu YW1lIHRvIHRoZSBhbHJlYWR5LWNvbnN0cnVjdGVkIHN0ZW0gb2YgY29ubmVjdGlvbgpAQCAtMTg2 OCwzICsyMjE5LDQyIEBAIHJlYWRfZHVtcGFsbF9maWx0ZXJzKGNvbnN0IGNoYXIgKmZpbGVuYW1l LCBTaW1wbGVTdHJpbmdMaXN0ICpwYXR0ZXJuKQogCiAJZmlsdGVyX2ZyZWUoJmZzdGF0ZSk7CiB9 CisKKy8qCisgKiBwYXJzZUR1bXBGb3JtYXQKKyAqCisgKiBUaGlzIHdpbGwgdmFsaWRhdGUgZHVt cCBmb3JtYXRzLgorICovCitzdGF0aWMgQXJjaGl2ZUZvcm1hdAorcGFyc2VEdW1wRm9ybWF0KGNv bnN0IGNoYXIgKmZvcm1hdCkKK3sKKwlBcmNoaXZlRm9ybWF0IGFyY2hEdW1wRm9ybWF0OworCisJ aWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAiYyIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0g YXJjaEN1c3RvbTsKKwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgImN1c3RvbSIpID09 IDApCisJCWFyY2hEdW1wRm9ybWF0ID0gYXJjaEN1c3RvbTsKKwllbHNlIGlmIChwZ19zdHJjYXNl Y21wKGZvcm1hdCwgImQiKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hEaXJlY3Rvcnk7 CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmb3JtYXQsICJkaXJlY3RvcnkiKSA9PSAwKQorCQlh cmNoRHVtcEZvcm1hdCA9IGFyY2hEaXJlY3Rvcnk7CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChm b3JtYXQsICJwIikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoTnVsbDsKKwllbHNlIGlm IChwZ19zdHJjYXNlY21wKGZvcm1hdCwgInBsYWluIikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQg PSBhcmNoTnVsbDsKKwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgInQiKSA9PSAwKQor CQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hUYXI7CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmb3Jt YXQsICJ0YXIiKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hUYXI7CisJZWxzZQorCQlw Z19mYXRhbCgidW5yZWNvZ25pemVkIG91dHB1dCBmb3JtYXQgXCIlc1wiOyBwbGVhc2Ugc3BlY2lm eSBcImNcIiwgXCJkXCIsIFwicFwiLCBvciBcInRcIiIsCisJCQkJIGZvcm1hdCk7CisKKwlyZXR1 cm4gYXJjaER1bXBGb3JtYXQ7Cit9CisKK3N0YXRpYyBpbnQKK2NyZWF0ZUR1bXBJZExvY2FsKHZv aWQpCit7CisJcmV0dXJuICsrZHVtcElkVmFsOworfQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19k dW1wL3BnX3Jlc3RvcmUuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19yZXN0b3JlLmMKaW5kZXggYzk3 NzYzMDZjNWMuLjAyMTc2YTc3YmQ3IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfcmVz dG9yZS5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19yZXN0b3JlLmMKQEAgLTIsNyArMiw3IEBA CiAgKgogICogcGdfcmVzdG9yZS5jCiAgKglwZ19yZXN0b3JlIGlzIGFuIHV0aWxpdHkgZXh0cmFj dGluZyBwb3N0Z3JlcyBkYXRhYmFzZSBkZWZpbml0aW9ucwotICoJZnJvbSBhIGJhY2t1cCBhcmNo aXZlIGNyZWF0ZWQgYnkgcGdfZHVtcCB1c2luZyB0aGUgYXJjaGl2ZXIKKyAqCWZyb20gYSBiYWNr dXAgYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXAvcGdfZHVtcGFsbCB1c2luZyB0aGUgYXJjaGl2 ZXIKICAqCWludGVyZmFjZS4KICAqCiAgKglwZ19yZXN0b3JlIHdpbGwgcmVhZCB0aGUgYmFja3Vw IGFyY2hpdmUgYW5kCkBAIC00MSwzMSArNDEsNjAgQEAKICNpbmNsdWRlICJwb3N0Z3Jlc19mZS5o IgogCiAjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgogI2lmZGVmIEhB VkVfVEVSTUlPU19ICiAjaW5jbHVkZSA8dGVybWlvcy5oPgogI2VuZGlmCiAKKyNpbmNsdWRlICJj b21tb24vc3RyaW5nLmgiCisjaW5jbHVkZSAiY29ubmVjdGRiLmgiCiAjaW5jbHVkZSAiZHVtcHV0 aWxzLmgiCiAjaW5jbHVkZSAiZmVfdXRpbHMvb3B0aW9uX3V0aWxzLmgiCisjaW5jbHVkZSAiZmVf dXRpbHMvc3RyaW5nX3V0aWxzLmgiCiAjaW5jbHVkZSAiZmlsdGVyLmgiCiAjaW5jbHVkZSAiZ2V0 b3B0X2xvbmcuaCIKICNpbmNsdWRlICJwYXJhbGxlbC5oIgogI2luY2x1ZGUgInBnX2JhY2t1cF91 dGlscy5oIgogCisKIHN0YXRpYyB2b2lkIHVzYWdlKGNvbnN0IGNoYXIgKnByb2duYW1lKTsKIHN0 YXRpYyB2b2lkIHJlYWRfcmVzdG9yZV9maWx0ZXJzKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBSZXN0 b3JlT3B0aW9ucyAqb3B0cyk7CitzdGF0aWMgYm9vbCBmaWxlX2V4aXN0c19pbl9kaXJlY3Rvcnko Y29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICpmaWxlbmFtZSk7CitzdGF0aWMgaW50CXJlc3Rv cmVfb25lX2RhdGFiYXNlKGNvbnN0IGNoYXIgKmlucHV0RmlsZVNwZWMsIFJlc3RvcmVPcHRpb25z ICpvcHRzLAorCQkJCQkJCQkgaW50IG51bVdvcmtlcnMsIGJvb2wgYXBwZW5kX2RhdGEsIGludCBu dW0sCisJCQkJCQkJCSBib29sIGdsb2JhbHNfb25seSk7CitzdGF0aWMgaW50IHJlc3RvcmVfZ2xv YmFsX29iamVjdHMoY29uc3QgY2hhciAqaW5wdXRGaWxlU3BlYywgUmVzdG9yZU9wdGlvbnMgKm9w dHMsCisJCWludCBudW1Xb3JrZXJzLCBib29sIGFwcGVuZF9kYXRhLCBpbnQgbnVtLCBib29sIGds b2JhbHNfb25seSk7CitzdGF0aWMgaW50CXJlc3RvcmVfYWxsX2RhdGFiYXNlcyhjb25zdCBjaGFy ICppbnB1dEZpbGVTcGVjLAorCQkJCQkJCQkgIFNpbXBsZVN0cmluZ0xpc3QgZGJfZXhjbHVkZV9w YXR0ZXJucywgUmVzdG9yZU9wdGlvbnMgKm9wdHMsIGludCBudW1Xb3JrZXJzKTsKK3N0YXRpYyBp bnQJZ2V0X2RibmFtZXNfbGlzdF90b19yZXN0b3JlKFBHY29ubiAqY29ubiwKKwkJCQkJCQkJCQlT aW1wbGVQdHJMaXN0ICpkYm5hbWVfb2lkX2xpc3QsCisJCQkJCQkJCQkJU2ltcGxlU3RyaW5nTGlz dCBkYl9leGNsdWRlX3BhdHRlcm5zKTsKK3N0YXRpYyBpbnQJZ2V0X2RibmFtZV9vaWRfbGlzdF9m cm9tX21maWxlKGNvbnN0IGNoYXIgKmR1bXBkaXJwYXRoLAorCQkJCQkJCQkJCSAgIFNpbXBsZVB0 ckxpc3QgKmRibmFtZV9vaWRfbGlzdCk7CisKKy8qCisgKiBTdG9yZXMgYSBkYXRhYmFzZSBPSUQg YW5kIHRoZSBjb3JyZXNwb25kaW5nIG5hbWUuCisgKi8KK3R5cGVkZWYgc3RydWN0IERiT2lkTmFt ZQoreworCU9pZAkJCW9pZDsKKwljaGFyCQlzdHJbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsgLyog bnVsbC10ZXJtaW5hdGVkIHN0cmluZyBoZXJlICovCit9IERiT2lkTmFtZTsKKwogCiBpbnQKIG1h aW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogewogCVJlc3RvcmVPcHRpb25zICpvcHRzOwogCWlu dAkJCWM7Ci0JaW50CQkJZXhpdF9jb2RlOwogCWludAkJCW51bVdvcmtlcnMgPSAxOwotCUFyY2hp dmUgICAgKkFIOwogCWNoYXIJICAgKmlucHV0RmlsZVNwZWM7CiAJYm9vbAkJZGF0YV9vbmx5ID0g ZmFsc2U7CiAJYm9vbAkJc2NoZW1hX29ubHkgPSBmYWxzZTsKKwlpbnQJCQluX2Vycm9ycyA9IDA7 CisJYm9vbAkJZ2xvYmFsc19vbmx5ID0gZmFsc2U7CisJU2ltcGxlU3RyaW5nTGlzdCBkYl9leGNs dWRlX3BhdHRlcm5zID0ge05VTEwsIE5VTEx9OwogCXN0YXRpYyBpbnQJZGlzYWJsZV90cmlnZ2Vy cyA9IDA7CiAJc3RhdGljIGludAllbmFibGVfcm93X3NlY3VyaXR5ID0gMDsKIAlzdGF0aWMgaW50 CWlmX2V4aXN0cyA9IDA7CkBAIC04OSw2ICsxMTgsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoq YXJndikKIAkJeyJjbGVhbiIsIDAsIE5VTEwsICdjJ30sCiAJCXsiY3JlYXRlIiwgMCwgTlVMTCwg J0MnfSwKIAkJeyJkYXRhLW9ubHkiLCAwLCBOVUxMLCAnYSd9LAorCQl7Imdsb2JhbHMtb25seSIs IDAsIE5VTEwsICdnJ30sCiAJCXsiZGJuYW1lIiwgMSwgTlVMTCwgJ2QnfSwKIAkJeyJleGl0LW9u LWVycm9yIiwgMCwgTlVMTCwgJ2UnfSwKIAkJeyJleGNsdWRlLXNjaGVtYSIsIDEsIE5VTEwsICdO J30sCkBAIC0xNDIsNiArMTcyLDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCXsi c3RhdGlzdGljcy1vbmx5Iiwgbm9fYXJndW1lbnQsICZzdGF0aXN0aWNzX29ubHksIDF9LAogCQl7 ImZpbHRlciIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCA0fSwKIAkJeyJyZXN0cmljdC1rZXki LCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgNn0sCisJCXsiZXhjbHVkZS1kYXRhYmFzZSIsIHJl cXVpcmVkX2FyZ3VtZW50LCBOVUxMLCA3fSwKIAogCQl7TlVMTCwgMCwgTlVMTCwgMH0KIAl9OwpA QCAtMTcwLDcgKzIwMSw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQl9CiAJfQog Ci0Jd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImFjQ2Q6ZWY6RjpoOkk6ajps TDpuOk46T3A6UDpSc1M6dDpUOlU6dndXeDEiLAorCXdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFy Z2MsIGFyZ3YsICJhY0NkOmVmOkY6Z2g6STpqOmxMOm46TjpPcDpQOlJzUzp0OlQ6VTp2d1d4MSIs CiAJCQkJCQkJY21kb3B0cywgTlVMTCkpICE9IC0xKQogCXsKIAkJc3dpdGNoIChjKQpAQCAtMTk3 LDExICsyMjgsMTQgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJaWYgKHN0cmxl bihvcHRhcmcpICE9IDApCiAJCQkJCW9wdHMtPmZvcm1hdE5hbWUgPSBwZ19zdHJkdXAob3B0YXJn KTsKIAkJCQlicmVhazsKKwkJCWNhc2UgJ2cnOgorCQkJCS8qIHJlc3RvcmUgb25seSBnbG9iYWwu ZGF0IGZpbGUgZnJvbSBkaXJlY3RvcnkgKi8KKwkJCQlnbG9iYWxzX29ubHkgPSB0cnVlOworCQkJ CWJyZWFrOwogCQkJY2FzZSAnaCc6CiAJCQkJaWYgKHN0cmxlbihvcHRhcmcpICE9IDApCiAJCQkJ CW9wdHMtPmNwYXJhbXMucGdob3N0ID0gcGdfc3RyZHVwKG9wdGFyZyk7CiAJCQkJYnJlYWs7Ci0K IAkJCWNhc2UgJ2onOgkJCS8qIG51bWJlciBvZiByZXN0b3JlIGpvYnMgKi8KIAkJCQlpZiAoIW9w dGlvbl9wYXJzZV9pbnQob3B0YXJnLCAiLWovLS1qb2JzIiwgMSwKIAkJCQkJCQkJCSAgUEdfTUFY X0pPQlMsCkBAIC0zMTYsNiArMzUwLDkgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJ CQkJCWV4aXQoMSk7CiAJCQkJb3B0cy0+ZXhpdF9vbl9lcnJvciA9IHRydWU7CiAJCQkJYnJlYWs7 CisJCQljYXNlIDc6CQkJCS8qIGRhdGFiYXNlIHBhdHRlcm5zIHRvIHNraXAgKi8KKwkJCQlzaW1w bGVfc3RyaW5nX2xpc3RfYXBwZW5kKCZkYl9leGNsdWRlX3BhdHRlcm5zLCBvcHRhcmcpOworCQkJ CWJyZWFrOwogCiAJCQljYXNlIDY6CiAJCQkJb3B0cy0+cmVzdHJpY3Rfa2V5ID0gcGdfc3RyZHVw KG9wdGFyZyk7CkBAIC0zNDcsNiArMzg0LDEzIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2 KQogCWlmICghb3B0cy0+Y3BhcmFtcy5kYm5hbWUgJiYgIW9wdHMtPmZpbGVuYW1lICYmICFvcHRz LT50b2NTdW1tYXJ5KQogCQlwZ19mYXRhbCgib25lIG9mIC1kLy0tZGJuYW1lIGFuZCAtZi8tLWZp bGUgbXVzdCBiZSBzcGVjaWZpZWQiKTsKIAorCWlmIChkYl9leGNsdWRlX3BhdHRlcm5zLmhlYWQg IT0gTlVMTCAmJiBnbG9iYWxzX29ubHkpCisJeworCQlwZ19sb2dfZXJyb3IoIm9wdGlvbiAtLWV4 Y2x1ZGUtZGF0YWJhc2UgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtZy8tLWdsb2JhbHMt b25seSIpOworCQlwZ19sb2dfZXJyb3JfaGludCgiVHJ5IFwiJXMgLS1oZWxwXCIgZm9yIG1vcmUg aW5mb3JtYXRpb24uIiwgcHJvZ25hbWUpOworCQlleGl0X25pY2VseSgxKTsKKwl9CisKIAkvKiBT aG91bGQgZ2V0IGF0IG1vc3Qgb25lIG9mIC1kIGFuZCAtZiwgZWxzZSB1c2VyIGlzIGNvbmZ1c2Vk ICovCiAJaWYgKG9wdHMtPmNwYXJhbXMuZGJuYW1lKQogCXsKQEAgLTQ3Miw2ICs1MTYsMTA1IEBA IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCQkgb3B0cy0+Zm9ybWF0TmFtZSk7CiAJ fQogCisJLyoKKwkgKiBJZiBtYXAuZGF0IGZpbGUgaXMgcHJlc2VudCwgdGhlbiByZXN0b3JlIGFs bCB0aGUKKwkgKiBkYXRhYmFzZXMgZnJvbSBtYXAuZGF0ICwgYnV0IHNraXAgcmVzdG9yaW5nIHRo b3NlIG1hdGNoaW5nCisJICogLS1leGNsdWRlLWRhdGFiYXNlIHBhdHRlcm5zLgorCSAqLworCWlm IChpbnB1dEZpbGVTcGVjICE9IE5VTEwgJiYKKwkJCShmaWxlX2V4aXN0c19pbl9kaXJlY3Rvcnko aW5wdXRGaWxlU3BlYywgIm1hcC5kYXQiKSB8fAorCQkJIGZpbGVfZXhpc3RzX2luX2RpcmVjdG9y eShpbnB1dEZpbGVTcGVjLCAidG9jLnRhciIpIHx8CisJCQkgZmlsZV9leGlzdHNfaW5fZGlyZWN0 b3J5KGlucHV0RmlsZVNwZWMsICJ0b2MuZG1wIikpKQorCXsKKwkJY2hhciAgICAgICAgZ2xvYmFs X3BhdGhbTUFYUEdQQVRIXTsKKworCQlpZiAoZmlsZV9leGlzdHNfaW5fZGlyZWN0b3J5KGlucHV0 RmlsZVNwZWMsICJ0b2MudGFyIikpCisJCQlzbnByaW50ZihnbG9iYWxfcGF0aCwgTUFYUEdQQVRI LCAiJXMvdG9jLnRhciIsIGlucHV0RmlsZVNwZWMpOworCQllbHNlIGlmIChmaWxlX2V4aXN0c19p bl9kaXJlY3RvcnkoaW5wdXRGaWxlU3BlYywgInRvYy5kbXAiKSkKKwkJCXNucHJpbnRmKGdsb2Jh bF9wYXRoLCBNQVhQR1BBVEgsICIlcy90b2MuZG1wIiwgaW5wdXRGaWxlU3BlYyk7CisJCWVsc2UK KwkJCXNucHJpbnRmKGdsb2JhbF9wYXRoLCBNQVhQR1BBVEgsICIlcyIsIGlucHV0RmlsZVNwZWMp OworCisJCS8qCisJCSAqIENhbiBvbmx5IHVzZSAtLWxpc3Qgb3IgLS11c2UtbGlzdCBvcHRpb25z IHdpdGggYSBzaW5nbGUgZGF0YWJhc2UKKwkJICogZHVtcC4KKwkJICovCisJCWlmIChvcHRzLT50 b2NTdW1tYXJ5KQorCQkJcGdfZmF0YWwoIm9wdGlvbiAtbC8tLWxpc3QgY2Fubm90IGJlIHVzZWQg d2hlbiByZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXBhbGwiKTsKKwkJZWxz ZSBpZiAob3B0cy0+dG9jRmlsZSkKKwkJCXBnX2ZhdGFsKCJvcHRpb24gLUwvLS11c2UtbGlzdCBj YW5ub3QgYmUgdXNlZCB3aGVuIHJlc3RvcmluZyBhbiBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVt cGFsbCIpOworCisJCS8qCisJCSAqIFRvIHJlc3RvcmUgZnJvbSBhIHBnX2R1bXBhbGwgYXJjaGl2 ZSwgLUMgKGNyZWF0ZSBkYXRhYmFzZSkgb3B0aW9uCisJCSAqIG11c3QgYmUgc3BlY2lmaWVkIHVu bGVzcyB3ZSBhcmUgb25seSByZXN0b3JpbmcgZ2xvYmFscy4KKwkJICovCisJCWlmICghZ2xvYmFs c19vbmx5ICYmIG9wdHMtPmNyZWF0ZURCICE9IDEpCisJCXsKKwkJCXBnX2xvZ19lcnJvcigib3B0 aW9uIC1DLy0tY3JlYXRlIG11c3QgYmUgc3BlY2lmaWVkIHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hp dmUgY3JlYXRlZCBieSBwZ19kdW1wYWxsIik7CisJCQlwZ19sb2dfZXJyb3JfaGludCgiVHJ5IFwi JXMgLS1oZWxwXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiwgcHJvZ25hbWUpOworCQkJcGdfbG9n X2Vycm9yX2hpbnQoIkluZGl2aWR1YWwgZGF0YWJhc2VzIGNhbiBiZSByZXN0b3JlZCB1c2luZyB0 aGVpciBzcGVjaWZpYyBhcmNoaXZlcy4iKTsKKwkJCWV4aXRfbmljZWx5KDEpOworCQl9CisKKwkJ LyogSWYgZ2xvYmFscy1vbmx5LCB0aGVuIHJldHVybiBmcm9tIGhlcmUuICovCisJCWlmIChnbG9i YWxzX29ubHkpCisJCXsKKwkJCW5fZXJyb3JzID0gcmVzdG9yZV9nbG9iYWxfb2JqZWN0cyhnbG9i YWxfcGF0aCwgb3B0cywgbnVtV29ya2VycywgZmFsc2UsIDAsIGdsb2JhbHNfb25seSk7CisKKwkJ CXBnX2xvZ19pbmZvKCJkYXRhYmFzZSByZXN0b3Jpbmcgc2tpcHBlZCBiZWNhdXNlIG9wdGlvbiAt Zy8tLWdsb2JhbHMtb25seSB3YXMgc3BlY2lmaWVkIik7CisJCX0KKwkJZWxzZQorCQl7CisJCQkv KiBOb3cgcmVzdG9yZSBhbGwgdGhlIGRhdGFiYXNlcyBmcm9tIG1hcC5kYXQgKi8KKwkJCW5fZXJy b3JzID0gcmVzdG9yZV9hbGxfZGF0YWJhc2VzKGlucHV0RmlsZVNwZWMsIGRiX2V4Y2x1ZGVfcGF0 dGVybnMsCisJCQkJCQkJCQkJCSBvcHRzLCBudW1Xb3JrZXJzKTsKKwkJfQorCisJCS8qIEZyZWUg ZGIgcGF0dGVybiBsaXN0LiAqLworCQlzaW1wbGVfc3RyaW5nX2xpc3RfZGVzdHJveSgmZGJfZXhj bHVkZV9wYXR0ZXJucyk7CisJfQorCWVsc2UJCQkJCQkvKiBwcm9jZXNzIGlmIG1hcC5kYXQgZmls ZSBkb2VzIG5vdCBleGlzdC4gKi8KKwl7CisJCW5fZXJyb3JzID0gcmVzdG9yZV9vbmVfZGF0YWJh c2UoaW5wdXRGaWxlU3BlYywgb3B0cywgbnVtV29ya2VycywgZmFsc2UsIDAsIGdsb2JhbHNfb25s eSk7CisJfQorCisJLyogRG9uZSwgcHJpbnQgYSBzdW1tYXJ5IG9mIGlnbm9yZWQgZXJyb3JzIGR1 cmluZyByZXN0b3JlLiAqLworCWlmIChuX2Vycm9ycykKKwl7CisJCXBnX2xvZ193YXJuaW5nKCJl cnJvcnMgaWdub3JlZCBvbiByZXN0b3JlOiAlZCIsIG5fZXJyb3JzKTsKKwkJcmV0dXJuIDE7CisJ fQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiByZXN0b3JlX2dsb2JhbF9vYmplY3RzCisgKgor ICogVGhpcyByZXN0b3JlIGFsbCBnbG9iYWwgb2JqZWN0cy4KKyAqCisgKiBJZiBnbG9iYWxzX29u bHkgaXMgc2V0LCB0aGVuIHNraXAgRFJPUCBEQVRBQkFTRSBjb21tYW5kcyBmcm9tIHJlc3RvcmUu CisgKi8KK3N0YXRpYyBpbnQgcmVzdG9yZV9nbG9iYWxfb2JqZWN0cyhjb25zdCBjaGFyICppbnB1 dEZpbGVTcGVjLCBSZXN0b3JlT3B0aW9ucyAqb3B0cywKKwkJaW50IG51bVdvcmtlcnMsIGJvb2wg YXBwZW5kX2RhdGEsIGludCBudW0sIGJvb2wgZ2xvYmFsc19vbmx5KQoreworCXJldHVybiByZXN0 b3JlX29uZV9kYXRhYmFzZShpbnB1dEZpbGVTcGVjLCBvcHRzLCBudW1Xb3JrZXJzLCBhcHBlbmRf ZGF0YSwgbnVtLCBnbG9iYWxzX29ubHkpOworfQorCisvKgorICogcmVzdG9yZV9vbmVfZGF0YWJh c2UKKyAqCisgKiBUaGlzIHdpbGwgcmVzdG9yZSBvbmUgZGF0YWJhc2UgdXNpbmcgdG9jLmRhdCBm aWxlLgorICoKKyAqIHJldHVybnMgdGhlIG51bWJlciBvZiBlcnJvcnMgd2hpbGUgZG9pbmcgcmVz dG9yZS4KKyAqLworc3RhdGljIGludAorcmVzdG9yZV9vbmVfZGF0YWJhc2UoY29uc3QgY2hhciAq aW5wdXRGaWxlU3BlYywgUmVzdG9yZU9wdGlvbnMgKm9wdHMsCisJCQkJCSBpbnQgbnVtV29ya2Vy cywgYm9vbCBhcHBlbmRfZGF0YSwgaW50IG51bSwgYm9vbCBnbG9iYWxzX29ubHkpCit7CisJQXJj aGl2ZSAgICAqQUg7CisJaW50CQkJbl9lcnJvcnM7CisKIAlBSCA9IE9wZW5BcmNoaXZlKGlucHV0 RmlsZVNwZWMsIG9wdHMtPmZvcm1hdCk7CiAKIAlTZXRBcmNoaXZlT3B0aW9ucyhBSCwgTlVMTCwg b3B0cyk7CkBAIC00NzksOSArNjIyLDE1IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQog CS8qCiAJICogV2UgZG9uJ3QgaGF2ZSBhIGNvbm5lY3Rpb24geWV0IGJ1dCB0aGF0IGRvZXNuJ3Qg bWF0dGVyLiBUaGUgY29ubmVjdGlvbgogCSAqIGlzIGluaXRpYWxpemVkIHRvIE5VTEwgYW5kIGlm IHdlIHRlcm1pbmF0ZSB0aHJvdWdoIGV4aXRfbmljZWx5KCkgd2hpbGUKLQkgKiBpdCdzIHN0aWxs IE5VTEwsIHRoZSBjbGVhbnVwIGZ1bmN0aW9uIHdpbGwganVzdCBiZSBhIG5vLW9wLgorCSAqIGl0 J3Mgc3RpbGwgTlVMTCwgdGhlIGNsZWFudXAgZnVuY3Rpb24gd2lsbCBqdXN0IGJlIGEgbm8tb3Au IElmIHdlIGFyZQorCSAqIHJlc3RvcmluZyBtdWx0aXBsZSBkYXRhYmFzZXMsIHRoZW4gb25seSB1 cGRhdGUgQVggaGFuZGxlIGZvciBjbGVhbnVwIGFzCisJICogdGhlIHByZXZpb3VzIGVudHJ5IHdh cyBhbHJlYWR5IGluIHRoZSBhcnJheSBhbmQgd2UgaGFkIGNsb3NlZCBwcmV2aW91cworCSAqIGNv bm5lY3Rpb24sIHNvIHdlIGNhbiB1c2UgdGhlIHNhbWUgYXJyYXkgc2xvdC4KIAkgKi8KLQlvbl9l eGl0X2Nsb3NlX2FyY2hpdmUoQUgpOworCWlmICghYXBwZW5kX2RhdGEgfHwgbnVtID09IDApCisJ CW9uX2V4aXRfY2xvc2VfYXJjaGl2ZShBSCk7CisJZWxzZQorCQlyZXBsYWNlX29uX2V4aXRfY2xv c2VfYXJjaGl2ZShBSCk7CiAKIAkvKiBMZXQgdGhlIGFyY2hpdmVyIGtub3cgaG93IG5vaXN5IHRv IGJlICovCiAJQUgtPnZlcmJvc2UgPSBvcHRzLT52ZXJib3NlOwpAQCAtNTAxLDI1ICs2NTAsMjEg QEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJZWxzZQogCXsKIAkJUHJvY2Vzc0FyY2hp dmVSZXN0b3JlT3B0aW9ucyhBSCk7Ci0JCVJlc3RvcmVBcmNoaXZlKEFIKTsKKwkJUmVzdG9yZUFy Y2hpdmUoQUgsIGFwcGVuZF9kYXRhLCBnbG9iYWxzX29ubHkpOwogCX0KIAotCS8qIGRvbmUsIHBy aW50IGEgc3VtbWFyeSBvZiBpZ25vcmVkIGVycm9ycyAqLwotCWlmIChBSC0+bl9lcnJvcnMpCi0J CXBnX2xvZ193YXJuaW5nKCJlcnJvcnMgaWdub3JlZCBvbiByZXN0b3JlOiAlZCIsIEFILT5uX2Vy cm9ycyk7CisJbl9lcnJvcnMgPSBBSC0+bl9lcnJvcnM7CiAKIAkvKiBBSCBtYXkgYmUgZnJlZWQg aW4gQ2xvc2VBcmNoaXZlPyAqLwotCWV4aXRfY29kZSA9IEFILT5uX2Vycm9ycyA/IDEgOiAwOwot CiAJQ2xvc2VBcmNoaXZlKEFIKTsKIAotCXJldHVybiBleGl0X2NvZGU7CisJcmV0dXJuIG5fZXJy b3JzOwogfQogCiBzdGF0aWMgdm9pZAogdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUpCiB7Ci0J cHJpbnRmKF8oIiVzIHJlc3RvcmVzIGEgUG9zdGdyZVNRTCBkYXRhYmFzZSBmcm9tIGFuIGFyY2hp dmUgY3JlYXRlZCBieSBwZ19kdW1wLlxuXG4iKSwgcHJvZ25hbWUpOworCXByaW50ZihfKCIlcyBy ZXN0b3JlcyBQb3N0Z3JlU1FMIGRhdGFiYXNlcyBmcm9tIGFyY2hpdmVzIGNyZWF0ZWQgYnkgcGdf ZHVtcCBvciBwZ19kdW1wYWxsLlxuXG4iKSwgcHJvZ25hbWUpOwogCXByaW50ZihfKCJVc2FnZTpc biIpKTsKIAlwcmludGYoXygiICAlcyBbT1BUSU9OXS4uLiBbRklMRV1cbiIpLCBwcm9nbmFtZSk7 CiAKQEAgLTUzNyw2ICs2ODIsNyBAQCB1c2FnZShjb25zdCBjaGFyICpwcm9nbmFtZSkKIAlwcmlu dGYoXygiICAtYywgLS1jbGVhbiAgICAgICAgICAgICAgICAgIGNsZWFuIChkcm9wKSBkYXRhYmFz ZSBvYmplY3RzIGJlZm9yZSByZWNyZWF0aW5nXG4iKSk7CiAJcHJpbnRmKF8oIiAgLUMsIC0tY3Jl YXRlICAgICAgICAgICAgICAgICBjcmVhdGUgdGhlIHRhcmdldCBkYXRhYmFzZVxuIikpOwogCXBy aW50ZihfKCIgIC1lLCAtLWV4aXQtb24tZXJyb3IgICAgICAgICAgZXhpdCBvbiBlcnJvciwgZGVm YXVsdCBpcyB0byBjb250aW51ZVxuIikpOworCXByaW50ZihfKCIgIC1nLCAtLWdsb2JhbHMtb25s eSAgICAgICAgICAgcmVzdG9yZSBvbmx5IGdsb2JhbCBvYmplY3RzLCBubyBkYXRhYmFzZXNcbiIp KTsKIAlwcmludGYoXygiICAtSSwgLS1pbmRleD1OQU1FICAgICAgICAgICAgIHJlc3RvcmUgbmFt ZWQgaW5kZXhcbiIpKTsKIAlwcmludGYoXygiICAtaiwgLS1qb2JzPU5VTSAgICAgICAgICAgICAg IHVzZSB0aGlzIG1hbnkgcGFyYWxsZWwgam9icyB0byByZXN0b3JlXG4iKSk7CiAJcHJpbnRmKF8o IiAgLUwsIC0tdXNlLWxpc3Q9RklMRU5BTUUgICAgICB1c2UgdGFibGUgb2YgY29udGVudHMgZnJv bSB0aGlzIGZpbGUgZm9yXG4iCkBAIC01NTMsNiArNjk5LDcgQEAgdXNhZ2UoY29uc3QgY2hhciAq cHJvZ25hbWUpCiAJcHJpbnRmKF8oIiAgLTEsIC0tc2luZ2xlLXRyYW5zYWN0aW9uICAgICByZXN0 b3JlIGFzIGEgc2luZ2xlIHRyYW5zYWN0aW9uXG4iKSk7CiAJcHJpbnRmKF8oIiAgLS1kaXNhYmxl LXRyaWdnZXJzICAgICAgICAgICBkaXNhYmxlIHRyaWdnZXJzIGR1cmluZyBkYXRhLW9ubHkgcmVz dG9yZVxuIikpOwogCXByaW50ZihfKCIgIC0tZW5hYmxlLXJvdy1zZWN1cml0eSAgICAgICAgZW5h YmxlIHJvdyBzZWN1cml0eVxuIikpOworCXByaW50ZihfKCIgIC0tZXhjbHVkZS1kYXRhYmFzZT1Q QVRURVJOICAgZG8gbm90IHJlc3RvcmUgdGhlIHNwZWNpZmllZCBkYXRhYmFzZShzKVxuIikpOwog CXByaW50ZihfKCIgIC0tZmlsdGVyPUZJTEVOQU1FICAgICAgICAgICAgcmVzdG9yZSBvciBza2lw IG9iamVjdHMgYmFzZWQgb24gZXhwcmVzc2lvbnNcbiIKIAkJCSAiICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGluIEZJTEVOQU1FXG4iKSk7CiAJcHJpbnRmKF8oIiAgLS1pZi1leGlzdHMg ICAgICAgICAgICAgICAgICB1c2UgSUYgRVhJU1RTIHdoZW4gZHJvcHBpbmcgb2JqZWN0c1xuIikp OwpAQCAtNTg4LDggKzczNSw4IEBAIHVzYWdlKGNvbnN0IGNoYXIgKnByb2duYW1lKQogCXByaW50 ZihfKCIgIC0tcm9sZT1ST0xFTkFNRSAgICAgICAgICBkbyBTRVQgUk9MRSBiZWZvcmUgcmVzdG9y ZVxuIikpOwogCiAJcHJpbnRmKF8oIlxuIgotCQkJICJUaGUgb3B0aW9ucyAtSSwgLW4sIC1OLCAt UCwgLXQsIC1ULCBhbmQgLS1zZWN0aW9uIGNhbiBiZSBjb21iaW5lZCBhbmQgc3BlY2lmaWVkXG4i Ci0JCQkgIm11bHRpcGxlIHRpbWVzIHRvIHNlbGVjdCBtdWx0aXBsZSBvYmplY3RzLlxuIikpOwor CQkJICJUaGUgb3B0aW9ucyAtSSwgLW4sIC1OLCAtUCwgLXQsIC1ULCAtLXNlY3Rpb24sIGFuZCAt LWV4Y2x1ZGUtZGF0YWJhc2UgY2FuIGJlXG4iCisJCQkgImNvbWJpbmVkIGFuZCBzcGVjaWZpZWQg bXVsdGlwbGUgdGltZXMgdG8gc2VsZWN0IG11bHRpcGxlIG9iamVjdHMuXG4iKSk7CiAJcHJpbnRm KF8oIlxuSWYgbm8gaW5wdXQgZmlsZSBuYW1lIGlzIHN1cHBsaWVkLCB0aGVuIHN0YW5kYXJkIGlu cHV0IGlzIHVzZWQuXG5cbiIpKTsKIAlwcmludGYoXygiUmVwb3J0IGJ1Z3MgdG8gPCVzPi5cbiIp LCBQQUNLQUdFX0JVR1JFUE9SVCk7CiAJcHJpbnRmKF8oIiVzIGhvbWUgcGFnZTogPCVzPlxuIiks IFBBQ0tBR0VfTkFNRSwgUEFDS0FHRV9VUkwpOwpAQCAtNjk0LDMgKzg0MSw0MTUgQEAgcmVhZF9y ZXN0b3JlX2ZpbHRlcnMoY29uc3QgY2hhciAqZmlsZW5hbWUsIFJlc3RvcmVPcHRpb25zICpvcHRz KQogCiAJZmlsdGVyX2ZyZWUoJmZzdGF0ZSk7CiB9CisKKy8qCisgKiBmaWxlX2V4aXN0c19pbl9k aXJlY3RvcnkKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGZpbGUgZXhpc3RzIGluIHRoZSBn aXZlbiBkaXJlY3RvcnkuCisgKi8KK3N0YXRpYyBib29sCitmaWxlX2V4aXN0c19pbl9kaXJlY3Rv cnkoY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKwlzdHJ1Y3Qgc3Rh dCBzdDsKKwljaGFyCQlidWZbTUFYUEdQQVRIXTsKKworCWlmIChzbnByaW50ZihidWYsIE1BWFBH UEFUSCwgIiVzLyVzIiwgZGlyLCBmaWxlbmFtZSkgPj0gTUFYUEdQQVRIKQorCQlwZ19mYXRhbCgi ZGlyZWN0b3J5IG5hbWUgdG9vIGxvbmc6IFwiJXNcIiIsIGRpcik7CisKKwlyZXR1cm4gKHN0YXQo YnVmLCAmc3QpID09IDAgJiYgU19JU1JFRyhzdC5zdF9tb2RlKSk7Cit9CisKKy8qCisgKiBnZXRf ZGJuYW1lc19saXN0X3RvX3Jlc3RvcmUKKyAqCisgKiBUaGlzIHdpbGwgbWFyayBmb3Igc2tpcHBp bmcgYW55IGVudHJpZXMgZnJvbSBkYm5hbWVfb2lkX2xpc3QgdGhhdCBwYXR0ZXJuIG1hdGNoIGFu CisgKiBlbnRyeSBpbiB0aGUgZGJfZXhjbHVkZV9wYXR0ZXJucyBsaXN0LgorICoKKyAqIFJldHVy bnMgdGhlIG51bWJlciBvZiBkYXRhYmFzZSB0byBiZSByZXN0b3JlZC4KKyAqCisgKi8KK3N0YXRp YyBpbnQKK2dldF9kYm5hbWVzX2xpc3RfdG9fcmVzdG9yZShQR2Nvbm4gKmNvbm4sCisJCQkJCQkJ U2ltcGxlUHRyTGlzdCAqZGJuYW1lX29pZF9saXN0LAorCQkJCQkJCVNpbXBsZVN0cmluZ0xpc3Qg ZGJfZXhjbHVkZV9wYXR0ZXJucykKK3sKKwlpbnQJCQljb3VudF9kYiA9IDA7CisJUFFFeHBCdWZm ZXIgcXVlcnk7CisJUEdyZXN1bHQgICAqcmVzOworCisJcXVlcnkgPSBjcmVhdGVQUUV4cEJ1ZmZl cigpOworCisJaWYgKCFjb25uICYmIGRiX2V4Y2x1ZGVfcGF0dGVybnMuaGVhZCAhPSBOVUxMKQor CQlwZ19sb2dfaW5mbygiY29uc2lkZXJpbmcgUEFUVEVSTiBhcyBOQU1FIGZvciAtLWV4Y2x1ZGUt ZGF0YWJhc2Ugb3B0aW9uIGFzIG5vIGRhdGFiYXNlIGNvbm5lY3Rpb24gd2hpbGUgZG9pbmcgcGdf cmVzdG9yZSIpOworCisJLyoKKwkgKiBQcm9jZXNzIG9uZSBieSBvbmUgYWxsIGRibmFtZXMgYW5k IGlmIHNwZWNpZmllZCB0byBza2lwIHJlc3RvcmluZywgdGhlbgorCSAqIHJlbW92ZSBkYm5hbWUg ZnJvbSBsaXN0LgorCSAqLworCWZvciAoU2ltcGxlUHRyTGlzdENlbGwgKmRiX2NlbGwgPSBkYm5h bWVfb2lkX2xpc3QtPmhlYWQ7CisJCSBkYl9jZWxsOyBkYl9jZWxsID0gZGJfY2VsbC0+bmV4dCkK Kwl7CisJCURiT2lkTmFtZSAgKmRiaWRuYW1lID0gKERiT2lkTmFtZSAqKSBkYl9jZWxsLT5wdHI7 CisJCWJvb2wJCXNraXBfZGJfcmVzdG9yZSA9IGZhbHNlOworCQlQUUV4cEJ1ZmZlciBkYl9saXQg PSBjcmVhdGVQUUV4cEJ1ZmZlcigpOworCisJCWFwcGVuZFN0cmluZ0xpdGVyYWxDb25uKGRiX2xp dCwgZGJpZG5hbWUtPnN0ciwgY29ubik7CisKKwkJZm9yIChTaW1wbGVTdHJpbmdMaXN0Q2VsbCAq cGF0X2NlbGwgPSBkYl9leGNsdWRlX3BhdHRlcm5zLmhlYWQ7IHBhdF9jZWxsOyBwYXRfY2VsbCA9 IHBhdF9jZWxsLT5uZXh0KQorCQl7CisJCQkvKgorCQkJICogSWYgdGhlcmUgaXMgYW4gZXhhY3Qg bWF0Y2ggdGhlbiB3ZSBkb24ndCBuZWVkIHRvIHRyeSBhIHBhdHRlcm4KKwkJCSAqIG1hdGNoCisJ CQkgKi8KKwkJCWlmIChwZ19zdHJjYXNlY21wKGRiaWRuYW1lLT5zdHIsIHBhdF9jZWxsLT52YWwp ID09IDApCisJCQkJc2tpcF9kYl9yZXN0b3JlID0gdHJ1ZTsKKwkJCS8qIE90aGVyd2lzZSwgdHJ5 IGEgcGF0dGVybiBtYXRjaCBpZiB0aGVyZSBpcyBhIGNvbm5lY3Rpb24gKi8KKwkJCWVsc2UgaWYg KGNvbm4pCisJCQl7CisJCQkJaW50CQkJZG90Y250OworCisJCQkJYXBwZW5kUFFFeHBCdWZmZXJT dHIocXVlcnksICJTRUxFQ1QgMSAiKTsKKwkJCQlwcm9jZXNzU1FMTmFtZVBhdHRlcm4oY29ubiwg cXVlcnksIHBhdF9jZWxsLT52YWwsIGZhbHNlLAorCQkJCQkJCQkJICBmYWxzZSwgTlVMTCwgZGJf bGl0LT5kYXRhLAorCQkJCQkJCQkJICBOVUxMLCBOVUxMLCBOVUxMLCAmZG90Y250KTsKKworCQkJ CWlmIChkb3RjbnQgPiAwKQorCQkJCXsKKwkJCQkJcGdfbG9nX2Vycm9yKCJpbXByb3BlciBxdWFs aWZpZWQgbmFtZSAodG9vIG1hbnkgZG90dGVkIG5hbWVzKTogJXMiLAorCQkJCQkJCQkgZGJpZG5h bWUtPnN0cik7CisJCQkJCVBRZmluaXNoKGNvbm4pOworCQkJCQlleGl0X25pY2VseSgxKTsKKwkJ CQl9CisKKwkJCQlyZXMgPSBleGVjdXRlUXVlcnkoY29ubiwgcXVlcnktPmRhdGEpOworCisJCQkJ aWYgKChQUXJlc3VsdFN0YXR1cyhyZXMpID09IFBHUkVTX1RVUExFU19PSykgJiYgUFFudHVwbGVz KHJlcykpCisJCQkJeworCQkJCQlza2lwX2RiX3Jlc3RvcmUgPSB0cnVlOworCQkJCQlwZ19sb2df aW5mbygiZGF0YWJhc2UgbmFtZSBcIiVzXCIgbWF0Y2hlcyBleGNsdWRlIHBhdHRlcm4gXCIlc1wi IiwgZGJpZG5hbWUtPnN0ciwgcGF0X2NlbGwtPnZhbCk7CisJCQkJfQorCisJCQkJUFFjbGVhcihy ZXMpOworCQkJCXJlc2V0UFFFeHBCdWZmZXIocXVlcnkpOworCQkJfQorCisJCQlpZiAoc2tpcF9k Yl9yZXN0b3JlKQorCQkJCWJyZWFrOworCQl9CisKKwkJZGVzdHJveVBRRXhwQnVmZmVyKGRiX2xp dCk7CisKKwkJLyoKKwkJICogTWFyayBkYiB0byBiZSBza2lwcGVkIG9yIGluY3JlbWVudCB0aGUg Y291bnRlciBvZiBkYnMgdG8gYmUKKwkJICogcmVzdG9yZWQKKwkJICovCisJCWlmIChza2lwX2Ri X3Jlc3RvcmUpCisJCXsKKwkJCXBnX2xvZ19pbmZvKCJleGNsdWRpbmcgZGF0YWJhc2UgXCIlc1wi IiwgZGJpZG5hbWUtPnN0cik7CisJCQlkYmlkbmFtZS0+b2lkID0gSW52YWxpZE9pZDsKKwkJfQor CQllbHNlCisJCXsKKwkJCWNvdW50X2RiKys7CisJCX0KKwl9CisKKwlkZXN0cm95UFFFeHBCdWZm ZXIocXVlcnkpOworCisJcmV0dXJuIGNvdW50X2RiOworfQorCisvKgorICogZ2V0X2RibmFtZV9v aWRfbGlzdF9mcm9tX21maWxlCisgKgorICogT3BlbiBtYXAuZGF0IGZpbGUgYW5kIHJlYWQgbGlu ZSBieSBsaW5lIGFuZCB0aGVuIHByZXBhcmUgYSBsaXN0IG9mIGRhdGFiYXNlCisgKiBuYW1lcyBh bmQgY29ycmVzcG9uZGluZyBkYl9vaWQuCisgKgorICogUmV0dXJucywgdG90YWwgbnVtYmVyIG9m IGRhdGFiYXNlIG5hbWVzIGluIG1hcC5kYXQgZmlsZS4KKyAqLworc3RhdGljIGludAorZ2V0X2Ri bmFtZV9vaWRfbGlzdF9mcm9tX21maWxlKGNvbnN0IGNoYXIgKmR1bXBkaXJwYXRoLCBTaW1wbGVQ dHJMaXN0ICpkYm5hbWVfb2lkX2xpc3QpCit7CisJU3RyaW5nSW5mb0RhdGEgbGluZWJ1ZjsKKwlG SUxFCSAgICpwZmlsZTsKKwljaGFyCQltYXBfZmlsZV9wYXRoW01BWFBHUEFUSF07CisJaW50CQkJ Y291bnQgPSAwOworCisKKwkvKgorCSAqIElmIHRoZXJlIGlzIG9ubHkgZ2xvYmFsLmRhdCBmaWxl IGluIGR1bXAsIHRoZW4gcmV0dXJuIGZyb20gaGVyZSBhcworCSAqIHRoZXJlIGlzIG5vIGRhdGFi YXNlIHRvIHJlc3RvcmUuCisJICovCisJaWYgKCFmaWxlX2V4aXN0c19pbl9kaXJlY3RvcnkoZHVt cGRpcnBhdGgsICJtYXAuZGF0IikpCisJeworCQlwZ19sb2dfaW5mbygiZGF0YWJhc2UgcmVzdG9y aW5nIGlzIHNraXBwZWQgYmVjYXVzZSBmaWxlIFwiJXNcIiBkb2VzIG5vdCBleGlzdCBpbiBkaXJl Y3RvcnkgXCIlc1wiIiwgIm1hcC5kYXQiLCBkdW1wZGlycGF0aCk7CisJCXJldHVybiAwOworCX0K KworCXNucHJpbnRmKG1hcF9maWxlX3BhdGgsIE1BWFBHUEFUSCwgIiVzL21hcC5kYXQiLCBkdW1w ZGlycGF0aCk7CisKKwkvKiBPcGVuIG1hcC5kYXQgZmlsZS4gKi8KKwlwZmlsZSA9IGZvcGVuKG1h cF9maWxlX3BhdGgsIFBHX0JJTkFSWV9SKTsKKworCWlmIChwZmlsZSA9PSBOVUxMKQorCQlwZ19m YXRhbCgiY291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCI6ICVtIiwgbWFwX2ZpbGVfcGF0aCk7CisK Kwlpbml0U3RyaW5nSW5mbygmbGluZWJ1Zik7CisKKwkvKiBBcHBlbmQgYWxsIHRoZSBkYm5hbWUv ZGJfb2lkIGNvbWJpbmF0aW9ucyB0byB0aGUgbGlzdC4gKi8KKwl3aGlsZSAocGdfZ2V0X2xpbmVf YnVmKHBmaWxlLCAmbGluZWJ1ZikpCisJeworCQlPaWQJCQlkYl9vaWQgPSBJbnZhbGlkT2lkOwor CQljaGFyCSAgICpkYm5hbWU7CisJCURiT2lkTmFtZSAgKmRiaWRuYW1lOworCQlpbnQJCQluYW1l bGVuOworCQljaGFyCSAgICpwID0gbGluZWJ1Zi5kYXRhOworCisJCS8qIEV4dHJhY3QgZGJvaWQu ICovCisJCXdoaWxlIChpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSAqcCkpCisJCQlwKys7CisJCWlm IChwID4gbGluZWJ1Zi5kYXRhICYmICpwID09ICcgJykKKwkJeworCQkJc3NjYW5mKGxpbmVidWYu ZGF0YSwgIiV1IiwgJmRiX29pZCk7CisJCQlwKys7CisJCX0KKworCQkvKiBkYm5hbWUgaXMgdGhl IHJlc3Qgb2YgdGhlIGxpbmUgKi8KKwkJZGJuYW1lID0gcDsKKwkJbmFtZWxlbiA9IHN0cmxlbihk Ym5hbWUpOworCisJCS8qIFJlcG9ydCBlcnJvciBhbmQgZXhpdCBpZiB0aGUgZmlsZSBoYXMgYW55 IGNvcnJ1cHRlZCBkYXRhLiAqLworCQlpZiAoIU9pZElzVmFsaWQoZGJfb2lkKSB8fCBuYW1lbGVu IDw9IDEpCisJCQlwZ19mYXRhbCgiaW52YWxpZCBlbnRyeSBpbiBmaWxlIFwiJXNcIiBvbiBsaW5l ICVkIiwgbWFwX2ZpbGVfcGF0aCwKKwkJCQkJIGNvdW50ICsgMSk7CisKKwkJcGdfbG9nX2luZm8o ImZvdW5kIGRhdGFiYXNlIFwiJXNcIiAoT0lEOiAldSkgaW4gZmlsZSBcIiVzXCIiLAorCQkJCQlk Ym5hbWUsIGRiX29pZCwgbWFwX2ZpbGVfcGF0aCk7CisKKwkJZGJpZG5hbWUgPSBwZ19tYWxsb2Mo b2Zmc2V0b2YoRGJPaWROYW1lLCBzdHIpICsgbmFtZWxlbiArIDEpOworCQlkYmlkbmFtZS0+b2lk ID0gZGJfb2lkOworCQlzdHJsY3B5KGRiaWRuYW1lLT5zdHIsIGRibmFtZSwgbmFtZWxlbik7CisK KwkJc2ltcGxlX3B0cl9saXN0X2FwcGVuZChkYm5hbWVfb2lkX2xpc3QsIGRiaWRuYW1lKTsKKwkJ Y291bnQrKzsKKwl9CisKKwkvKiBDbG9zZSBtYXAuZGF0IGZpbGUuICovCisJZmNsb3NlKHBmaWxl KTsKKworCXJldHVybiBjb3VudDsKK30KKworLyoKKyAqIHJlc3RvcmVfYWxsX2RhdGFiYXNlcwor ICoKKyAqIFRoaXMgd2lsbCByZXN0b3JlIGRhdGFiYXNlcyB0aG9zZSBkdW1wcyBhcmUgcHJlc2Vu dCBpbgorICogZGlyZWN0b3J5IGJhc2VkIG9uIG1hcC5kYXQgZmlsZSBtYXBwaW5nLgorICoKKyAq IFRoaXMgd2lsbCBza2lwIHJlc3RvcmluZyBmb3IgZGF0YWJhc2VzIHRoYXQgYXJlIHNwZWNpZmll ZCB3aXRoCisgKiBleGNsdWRlLWRhdGFiYXNlIG9wdGlvbi4KKyAqCisgKiByZXR1cm5zLCBudW1i ZXIgb2YgZXJyb3JzIHdoaWxlIGRvaW5nIHJlc3RvcmUuCisgKi8KK3N0YXRpYyBpbnQKK3Jlc3Rv cmVfYWxsX2RhdGFiYXNlcyhjb25zdCBjaGFyICppbnB1dEZpbGVTcGVjLAorCQkJCQkgIFNpbXBs ZVN0cmluZ0xpc3QgZGJfZXhjbHVkZV9wYXR0ZXJucywgUmVzdG9yZU9wdGlvbnMgKm9wdHMsCisJ CQkJCSAgaW50IG51bVdvcmtlcnMpCit7CisJU2ltcGxlUHRyTGlzdCBkYm5hbWVfb2lkX2xpc3Qg PSB7TlVMTCwgTlVMTH07CisJaW50CQkJbnVtX2RiX3Jlc3RvcmUgPSAwOworCWludAkJCW51bV90 b3RhbF9kYjsKKwlpbnQJCQluX2Vycm9yc190b3RhbDsKKwlpbnQJCQljb3VudCA9IDA7CisJY2hh cgkgICAqY29ubmVjdGVkX2RiID0gTlVMTDsKKwlib29sCQlkdW1wRGF0YSA9IG9wdHMtPmR1bXBE YXRhOworCWJvb2wJCWR1bXBTY2hlbWEgPSBvcHRzLT5kdW1wU2NoZW1hOworCWJvb2wJCWR1bXBT dGF0aXN0aWNzID0gb3B0cy0+ZHVtcFNjaGVtYTsKKwlQR2Nvbm4gKmNvbm4gPSBOVUxMOworCWNo YXIJCWdsb2JhbF9wYXRoW01BWFBHUEFUSF07CisKKwkvKiBCYXNlZCBvbiBmaWxlLCBzZXQgcGF0 aC4gKi8KKwlpZiAoZmlsZV9leGlzdHNfaW5fZGlyZWN0b3J5KGlucHV0RmlsZVNwZWMsICJ0b2Mu dGFyIikpCisJCXNucHJpbnRmKGdsb2JhbF9wYXRoLCBNQVhQR1BBVEgsICIlcy90b2MudGFyIiwg aW5wdXRGaWxlU3BlYyk7CisJZWxzZSBpZiAoZmlsZV9leGlzdHNfaW5fZGlyZWN0b3J5KGlucHV0 RmlsZVNwZWMsICJ0b2MuZG1wIikpCisJCXNucHJpbnRmKGdsb2JhbF9wYXRoLCBNQVhQR1BBVEgs ICIlcy90b2MuZG1wIiwgaW5wdXRGaWxlU3BlYyk7CisJZWxzZQorCQlzbnByaW50ZihnbG9iYWxf cGF0aCwgTUFYUEdQQVRILCAiJXMiLCBpbnB1dEZpbGVTcGVjKTsKKworCS8qIFNhdmUgZGIgbmFt ZSB0byByZXVzZSBpdCBmb3IgYWxsIHRoZSBkYXRhYmFzZS4gKi8KKwlpZiAob3B0cy0+Y3BhcmFt cy5kYm5hbWUpCisJCWNvbm5lY3RlZF9kYiA9IG9wdHMtPmNwYXJhbXMuZGJuYW1lOworCisJbnVt X3RvdGFsX2RiID0gZ2V0X2RibmFtZV9vaWRfbGlzdF9mcm9tX21maWxlKGlucHV0RmlsZVNwZWMs ICZkYm5hbWVfb2lkX2xpc3QpOworCisJLyogSWYgbWFwLmRhdCBoYXMgbm8gZW50cmllcywgcmV0 dXJuIGFmdGVyIHByb2Nlc3NpbmcgZ2xvYmFsIGNvbW1hbmRzLiAqLworCWlmIChkYm5hbWVfb2lk X2xpc3QuaGVhZCA9PSBOVUxMKQorCQlyZXR1cm4gcmVzdG9yZV9nbG9iYWxfb2JqZWN0cyhnbG9i YWxfcGF0aCwgb3B0cywgbnVtV29ya2VycywgZmFsc2UsIDAsIGZhbHNlKTsKKworCXBnX2xvZ19p bmZvKG5nZXR0ZXh0KCJmb3VuZCAlZCBkYXRhYmFzZSBuYW1lIGluIFwiJXNcIiIsCisJCQkJCQkg ImZvdW5kICVkIGRhdGFiYXNlIG5hbWVzIGluIFwiJXNcIiIsCisJCQkJCQkgbnVtX3RvdGFsX2Ri KSwKKwkJCQludW1fdG90YWxfZGIsICJtYXAuZGF0Iik7CisKKwkvKgorCSAqIElmIGV4Y2x1ZGUt cGF0dGVybnMgaXMgZ2l2ZW4sIHRoZW4gY29ubmVjdCB0byB0aGUgZGF0YWJhc2UgdG8gcHJvY2Vz cworCSAqIGl0LgorCSAqLworCWlmIChkYl9leGNsdWRlX3BhdHRlcm5zLmhlYWQgIT0gTlVMTCkK Kwl7CisJCWlmIChvcHRzLT5jcGFyYW1zLmRibmFtZSkKKwkJeworCQkJY29ubiA9IENvbm5lY3RE YXRhYmFzZShvcHRzLT5jcGFyYW1zLmRibmFtZSwgTlVMTCwgb3B0cy0+Y3BhcmFtcy5wZ2hvc3Qs CisJCQkJCW9wdHMtPmNwYXJhbXMucGdwb3J0LCBvcHRzLT5jcGFyYW1zLnVzZXJuYW1lLCBUUklf REVGQVVMVCwKKwkJCQkJZmFsc2UsIHByb2duYW1lLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsK KworCQkJaWYgKCFjb25uKQorCQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY29ubmVjdCB0byBkYXRh YmFzZSBcIiVzXCIiLCBvcHRzLT5jcGFyYW1zLmRibmFtZSk7CisJCX0KKworCQlpZiAoIWNvbm4p CisJCXsKKwkJCXBnX2xvZ19pbmZvKCJ0cnlpbmcgdG8gY29ubmVjdCB0byBkYXRhYmFzZSBcIiVz XCIiLCAicG9zdGdyZXMiKTsKKworCQkJY29ubiA9IENvbm5lY3REYXRhYmFzZSgicG9zdGdyZXMi LCBOVUxMLCBvcHRzLT5jcGFyYW1zLnBnaG9zdCwKKwkJCQkJb3B0cy0+Y3BhcmFtcy5wZ3BvcnQs IG9wdHMtPmNwYXJhbXMudXNlcm5hbWUsIFRSSV9ERUZBVUxULAorCQkJCQlmYWxzZSwgcHJvZ25h bWUsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOworCisJCQkvKiBUcnkgd2l0aCB0ZW1wbGF0ZTEu ICovCisJCQlpZiAoIWNvbm4pCisJCQl7CisJCQkJcGdfbG9nX2luZm8oInRyeWluZyB0byBjb25u ZWN0IHRvIGRhdGFiYXNlIFwiJXNcIiIsICJ0ZW1wbGF0ZTEiKTsKKworCQkJCWNvbm4gPSBDb25u ZWN0RGF0YWJhc2UoInRlbXBsYXRlMSIsIE5VTEwsIG9wdHMtPmNwYXJhbXMucGdob3N0LAorCQkJ CQkJb3B0cy0+Y3BhcmFtcy5wZ3BvcnQsIG9wdHMtPmNwYXJhbXMudXNlcm5hbWUsIFRSSV9ERUZB VUxULAorCQkJCQkJZmFsc2UsIHByb2duYW1lLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKKwkJ CX0KKwkJfQorCX0KKworCS8qCisJICogZmlsdGVyIHRoZSBkYiBsaXN0IGFjY29yZGluZyB0byB0 aGUgZXhjbHVkZSBwYXR0ZXJucworCSAqLworCW51bV9kYl9yZXN0b3JlID0gZ2V0X2RibmFtZXNf bGlzdF90b19yZXN0b3JlKGNvbm4sICZkYm5hbWVfb2lkX2xpc3QsCisJCQkJCQkJCQkJCQkgZGJf ZXhjbHVkZV9wYXR0ZXJucyk7CisKKwkvKiBDbG9zZSB0aGUgZGIgY29ubmVjdGlvbiBhcyB3ZSBh cmUgZG9uZSB3aXRoIGdsb2JhbHMgYW5kIHBhdHRlcm5zLiAqLworCWlmIChjb25uKQorCQlQUWZp bmlzaChjb25uKTsKKworCS8qIE9wZW4gdG9jLmRhdCBmaWxlIGFuZCBleGVjdXRlL2FwcGVuZCBh bGwgdGhlIGdsb2JhbCBzcWwgY29tbWFuZHMuICovCisJbl9lcnJvcnNfdG90YWwgPSAgcmVzdG9y ZV9nbG9iYWxfb2JqZWN0cyhnbG9iYWxfcGF0aCwgb3B0cywgbnVtV29ya2VycywgZmFsc2UsIDAs IGZhbHNlKTsKKworCS8qIEV4aXQgaWYgbm8gZGIgbmVlZHMgdG8gYmUgcmVzdG9yZWQuICovCisJ aWYgKGRibmFtZV9vaWRfbGlzdC5oZWFkID09IE5VTEwgfHwgbnVtX2RiX3Jlc3RvcmUgPT0gMCkK Kwl7CisJCXBnX2xvZ19pbmZvKG5nZXR0ZXh0KCJubyBkYXRhYmFzZSBuZWVkcyByZXN0b3Jpbmcg b3V0IG9mICVkIGRhdGFiYXNlIiwKKwkJCQkJCQkgIm5vIGRhdGFiYXNlIG5lZWRzIHJlc3Rvcmlu ZyBvdXQgb2YgJWQgZGF0YWJhc2VzIiwgbnVtX3RvdGFsX2RiKSwKKwkJCQkJbnVtX3RvdGFsX2Ri KTsKKwkJcmV0dXJuIG5fZXJyb3JzX3RvdGFsOworCX0KKworCXBnX2xvZ19pbmZvKCJuZWVkIHRv IHJlc3RvcmUgJWQgZGF0YWJhc2VzIG91dCBvZiAlZCBkYXRhYmFzZXMiLCBudW1fZGJfcmVzdG9y ZSwgbnVtX3RvdGFsX2RiKTsKKworCS8qCisJICogV2UgaGF2ZSBhIGxpc3Qgb2YgZGF0YWJhc2Vz IHRvIHJlc3RvcmUgYWZ0ZXIgcHJvY2Vzc2luZyB0aGUKKwkgKiBleGNsdWRlLWRhdGFiYXNlIHN3 aXRjaChlcykuICBOb3cgd2UgY2FuIHJlc3RvcmUgdGhlbSBvbmUgYnkgb25lLgorCSAqLworCWZv ciAoU2ltcGxlUHRyTGlzdENlbGwgKmRiX2NlbGwgPSBkYm5hbWVfb2lkX2xpc3QuaGVhZDsKKwkJ IGRiX2NlbGw7IGRiX2NlbGwgPSBkYl9jZWxsLT5uZXh0KQorCXsKKwkJRGJPaWROYW1lICAqZGJp ZG5hbWUgPSAoRGJPaWROYW1lICopIGRiX2NlbGwtPnB0cjsKKwkJY2hhcgkJc3ViZGlycGF0aFtN QVhQR1BBVEhdOworCQljaGFyCQlzdWJkaXJkYnBhdGhbTUFYUEdQQVRIXTsKKwkJY2hhcgkJZGJm aWxlbmFtZVtNQVhQR1BBVEhdOworCQlpbnQJCQluX2Vycm9yczsKKworCQkvKiBpZ25vcmUgZGJz IG1hcmtlZCBmb3Igc2tpcHBpbmcgKi8KKwkJaWYgKGRiaWRuYW1lLT5vaWQgPT0gSW52YWxpZE9p ZCkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIFdlIG5lZWQgdG8gcmVzZXQgb3ZlcnJpZGVf ZGJuYW1lIHNvIHRoYXQgb2JqZWN0cyBjYW4gYmUgcmVzdG9yZWQKKwkJICogaW50byBhbiBhbHJl YWR5IGNyZWF0ZWQgZGF0YWJhc2UuICh1c2VkIHdpdGggLWQvLS1kYm5hbWUgb3B0aW9uKQorCQkg Ki8KKwkJaWYgKG9wdHMtPmNwYXJhbXMub3ZlcnJpZGVfZGJuYW1lKQorCQl7CisJCQlwZnJlZShv cHRzLT5jcGFyYW1zLm92ZXJyaWRlX2RibmFtZSk7CisJCQlvcHRzLT5jcGFyYW1zLm92ZXJyaWRl X2RibmFtZSA9IE5VTEw7CisJCX0KKworCQlzbnByaW50ZihzdWJkaXJkYnBhdGgsIE1BWFBHUEFU SCwgIiVzL2RhdGFiYXNlcyIsIGlucHV0RmlsZVNwZWMpOworCisJCS8qCisJCSAqIExvb2sgZm9y IHRoZSBkYXRhYmFzZSBkdW1wIGZpbGUvZGlyLiBJZiB0aGVyZSBpcyBhbiB7b2lkfS50YXIgb3IK KwkJICoge29pZH0uZG1wIGZpbGUsIHVzZSBpdC4gT3RoZXJ3aXNlIHRyeSB0byB1c2UgYSBkaXJl Y3RvcnkgY2FsbGVkCisJCSAqIHtvaWR9CisJCSAqLworCQlzbnByaW50ZihkYmZpbGVuYW1lLCBN QVhQR1BBVEgsICIldS50YXIiLCBkYmlkbmFtZS0+b2lkKTsKKwkJaWYgKGZpbGVfZXhpc3RzX2lu X2RpcmVjdG9yeShzdWJkaXJkYnBhdGgsIGRiZmlsZW5hbWUpKQorCQkJc25wcmludGYoc3ViZGly cGF0aCwgTUFYUEdQQVRILCAiJXMvZGF0YWJhc2VzLyV1LnRhciIsIGlucHV0RmlsZVNwZWMsIGRi aWRuYW1lLT5vaWQpOworCQllbHNlCisJCXsKKwkJCXNucHJpbnRmKGRiZmlsZW5hbWUsIE1BWFBH UEFUSCwgIiV1LmRtcCIsIGRiaWRuYW1lLT5vaWQpOworCisJCQlpZiAoZmlsZV9leGlzdHNfaW5f ZGlyZWN0b3J5KHN1YmRpcmRicGF0aCwgZGJmaWxlbmFtZSkpCisJCQkJc25wcmludGYoc3ViZGly cGF0aCwgTUFYUEdQQVRILCAiJXMvZGF0YWJhc2VzLyV1LmRtcCIsIGlucHV0RmlsZVNwZWMsIGRi aWRuYW1lLT5vaWQpOworCQkJZWxzZQorCQkJCXNucHJpbnRmKHN1YmRpcnBhdGgsIE1BWFBHUEFU SCwgIiVzL2RhdGFiYXNlcy8ldSIsIGlucHV0RmlsZVNwZWMsIGRiaWRuYW1lLT5vaWQpOworCQl9 CisKKwkJcGdfbG9nX2luZm8oInJlc3RvcmluZyBkYXRhYmFzZSBcIiVzXCIiLCBkYmlkbmFtZS0+ c3RyKTsKKworCQkvKiBJZiBkYXRhYmFzZSBpcyBhbHJlYWR5IGNyZWF0ZWQsIHRoZW4gZG9uJ3Qg c2V0IGNyZWF0ZURCIGZsYWcuICovCisJCWlmIChvcHRzLT5jcGFyYW1zLmRibmFtZSkKKwkJewor CQkJUEdjb25uCSAgICp0ZXN0X2Nvbm47CisKKwkJCXRlc3RfY29ubiA9IENvbm5lY3REYXRhYmFz ZShkYmlkbmFtZS0+c3RyLCBOVUxMLCBvcHRzLT5jcGFyYW1zLnBnaG9zdCwKKwkJCQkJCQkJCQlv cHRzLT5jcGFyYW1zLnBncG9ydCwgb3B0cy0+Y3BhcmFtcy51c2VybmFtZSwgVFJJX0RFRkFVTFQs CisJCQkJCQkJCQkJZmFsc2UsIHByb2duYW1lLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKKwkJ CWlmICh0ZXN0X2Nvbm4pCisJCQl7CisJCQkJUFFmaW5pc2godGVzdF9jb25uKTsKKworCQkJCS8q IFVzZSBhbHJlYWR5IGNyZWF0ZWQgZGF0YWJhc2UgZm9yIGNvbm5lY3Rpb24uICovCisJCQkJb3B0 cy0+Y3JlYXRlREIgPSAwOworCQkJCW9wdHMtPmNwYXJhbXMuZGJuYW1lID0gZGJpZG5hbWUtPnN0 cjsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkvKiB3ZSdsbCBoYXZlIHRvIGNyZWF0ZSBpdCAq LworCQkJCW9wdHMtPmNyZWF0ZURCID0gMTsKKwkJCQlvcHRzLT5jcGFyYW1zLmRibmFtZSA9IGNv bm5lY3RlZF9kYjsKKwkJCX0KKwkJfQorCisJCS8qCisJCSAqIFJlc2V0IGZsYWdzIC0gbWlnaHQg aGF2ZSBiZWVuIHJlc2V0IGluIHBnX2JhY2t1cF9hcmNoaXZlci5jIGJ5IHRoZQorCQkgKiBwcmV2 aW91cyByZXN0b3JlLgorCQkgKi8KKwkJb3B0cy0+ZHVtcERhdGEgPSBkdW1wRGF0YTsKKwkJb3B0 cy0+ZHVtcFNjaGVtYSA9IGR1bXBTY2hlbWE7CisJCW9wdHMtPmR1bXBTdGF0aXN0aWNzID0gZHVt cFN0YXRpc3RpY3M7CisKKwkJLyogUmVzdG9yZSB0aGUgc2luZ2xlIGRhdGFiYXNlLiAqLworCQlu X2Vycm9ycyA9IHJlc3RvcmVfb25lX2RhdGFiYXNlKHN1YmRpcnBhdGgsIG9wdHMsIG51bVdvcmtl cnMsIHRydWUsIDEsIGZhbHNlKTsKKworCQkvKiBQcmludCBhIHN1bW1hcnkgb2YgaWdub3JlZCBl cnJvcnMgZHVyaW5nIHNpbmdsZSBkYXRhYmFzZSByZXN0b3JlLiAqLworCQlpZiAobl9lcnJvcnMp CisJCXsKKwkJCW5fZXJyb3JzX3RvdGFsICs9IG5fZXJyb3JzOworCQkJcGdfbG9nX3dhcm5pbmco ImVycm9ycyBpZ25vcmVkIG9uIGRhdGFiYXNlIFwiJXNcIiByZXN0b3JlOiAlZCIsIGRiaWRuYW1l LT5zdHIsIG5fZXJyb3JzKTsKKwkJfQorCisJCWNvdW50Kys7CisJfQorCisJLyogTG9nIG51bWJl ciBvZiBwcm9jZXNzZWQgZGF0YWJhc2VzLiAqLworCXBnX2xvZ19pbmZvKCJudW1iZXIgb2YgcmVz dG9yZWQgZGF0YWJhc2VzIGlzICVkIiwgbnVtX2RiX3Jlc3RvcmUpOworCisJLyogRnJlZSBkYm5h bWUgYW5kIGRib2lkIGxpc3QuICovCisJc2ltcGxlX3B0cl9saXN0X2Rlc3Ryb3koJmRibmFtZV9v aWRfbGlzdCk7CisKKwlyZXR1cm4gbl9lcnJvcnNfdG90YWw7Cit9CmRpZmYgLS1naXQgYS9zcmMv YmluL3BnX2R1bXAvdC8wMDFfYmFzaWMucGwgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDFfYmFzaWMu cGwKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCAzN2Q4OTNkNWU2YS4uNTZl ODlkYTFlNWUKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsCisrKyBiL3NyYy9i aW4vcGdfZHVtcC90LzAwMV9iYXNpYy5wbApAQCAtMjM3LDYgKzIzNywxMiBAQCBjb21tYW5kX2Zh aWxzX2xpa2UoCiAJJ3BnX3Jlc3RvcmU6IG9wdGlvbnMgLUNcLy0tY3JlYXRlIGFuZCAtMVwvLS1z aW5nbGUtdHJhbnNhY3Rpb24gY2Fubm90IGJlIHVzZWQgdG9nZXRoZXInCiApOwogCitjb21tYW5k X2ZhaWxzX2xpa2UoCisJWyAncGdfcmVzdG9yZScsICctLWV4Y2x1ZGUtZGF0YWJhc2U9Zm9vJywg Jy0tZ2xvYmFscy1vbmx5JywgJy1kJywgJ3h4eCcgXSwKKwlxci9cUXBnX3Jlc3RvcmU6IGVycm9y OiBvcHRpb24gLS1leGNsdWRlLWRhdGFiYXNlIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgg LWdcLy0tZ2xvYmFscy1vbmx5XEUvLAorCSdwZ19yZXN0b3JlOiBvcHRpb24gLS1leGNsdWRlLWRh dGFiYXNlIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLWcvLS1nbG9iYWxzLW9ubHknCisp OworCiAjIGFsc28gZmFpbHMgZm9yIC1yIGFuZCAtdCwgYnV0IGl0IHNlZW1zIHBvaW50bGVzcyB0 byBhZGQgbW9yZSB0ZXN0cyBmb3IgdGhvc2UuCiBjb21tYW5kX2ZhaWxzX2xpa2UoCiAJWyAncGdf ZHVtcGFsbCcsICctLWV4Y2x1ZGUtZGF0YWJhc2U9Zm9vJywgJy0tZ2xvYmFscy1vbmx5JyBdLApA QCAtMjQ0LDQgKzI1MCw4IEBAIGNvbW1hbmRfZmFpbHNfbGlrZSgKIAkncGdfZHVtcGFsbDogb3B0 aW9uIC0tZXhjbHVkZS1kYXRhYmFzZSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aXRoIC1nLy0t Z2xvYmFscy1vbmx5JwogKTsKIAorY29tbWFuZF9mYWlsc19saWtlKAorCVsgJ3BnX2R1bXBhbGwn LCAnLS1mb3JtYXQnLCAneCcgXSwKKwlxci9cUXBnX2R1bXBhbGw6IGVycm9yOiB1bnJlY29nbml6 ZWQgb3V0cHV0IGZvcm1hdCAieCI7XEUvLAorCSdwZ19kdW1wYWxsOiB1bnJlY29nbml6ZWQgb3V0 cHV0IGZvcm1hdCcpOwogZG9uZV90ZXN0aW5nKCk7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1 bXAvdC8wMDdfcGdfZHVtcGFsbC5wbCBiL3NyYy9iaW4vcGdfZHVtcC90LzAwN19wZ19kdW1wYWxs LnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwLi4zYzdkMmFkN2M1Mwot LS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdfZHVtcC90LzAwN19wZ19kdW1wYWxsLnBsCkBA IC0wLDAgKzEsMzk2IEBACisjIENvcHlyaWdodCAoYykgMjAyMS0yMDI1LCBQb3N0Z3JlU1FMIEds b2JhbCBEZXZlbG9wbWVudCBHcm91cAorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzIEZBVEFM ID0+ICdhbGwnOworCit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3Jl U1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOworCitteSAkdGVtcGRpciA9IFBvc3Rn cmVTUUw6OlRlc3Q6OlV0aWxzOjp0ZW1wZGlyOworbXkgJHJ1bl9kYiA9ICdwb3N0Z3Jlcyc7Citt eSAkc2VwID0gJHdpbmRvd3Nfb3MgPyAiXFwiIDogIi8iOworCisjIFRhYmxlc3BhY2UgbG9jYXRp b25zIHVzZWQgYnkgInJlc3RvcmVfdGFibGVzcGFjZSIgdGVzdCBjYXNlLgorbXkgJHRhYmxlc3Bh Y2UxID0gIiR7dGVtcGRpcn0ke3NlcH10YmwxIjsKK215ICR0YWJsZXNwYWNlMiA9ICIke3RlbXBk aXJ9JHtzZXB9dGJsMiI7Citta2RpcigkdGFibGVzcGFjZTEpIHx8IGRpZSAibWtkaXIgJHRhYmxl c3BhY2UxICQhIjsKK21rZGlyKCR0YWJsZXNwYWNlMikgfHwgZGllICJta2RpciAkdGFibGVzcGFj ZTIgJCEiOworCisjIFNjYXBlIHRhYmxlc3BhY2UgbG9jYXRpb25zIG9uIFdpbmRvd3MuCiskdGFi bGVzcGFjZTEgPSAkd2luZG93c19vcyA/ICgkdGFibGVzcGFjZTEgPX4gcy9cXC9cXFxcL2dyKSA6 ICR0YWJsZXNwYWNlMTsKKyR0YWJsZXNwYWNlMiA9ICR3aW5kb3dzX29zID8gKCR0YWJsZXNwYWNl MiA9fiBzL1xcL1xcXFwvZ3IpIDogJHRhYmxlc3BhY2UyOworCisjIFdoZXJlIHBnX2R1bXBhbGwg d2lsbCBiZSBleGVjdXRlZC4KK215ICRub2RlID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+ bmV3KCdub2RlJyk7Ciskbm9kZS0+aW5pdDsKKyRub2RlLT5zdGFydDsKKworCisjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMg RGVmaW5pdGlvbiBvZiB0aGUgcGdfZHVtcGFsbCB0ZXN0IGNhc2VzIHRvIHJ1bi4KKyMKKyMgRWFj aCBvZiB0aGVzZSB0ZXN0IGNhc2VzIGFyZSBuYW1lZCBhbmQgdGhvc2UgbmFtZXMgYXJlIHVzZWQg Zm9yIGZhaWwKKyMgcmVwb3J0aW5nIGFuZCBhbHNvIHRvIHNhdmUgdGhlIGR1bXAgYW5kIHJlc3Rv cmUgaW5mb3JtYXRpb24gbmVlZGVkIGZvciB0aGUKKyMgdGVzdCB0byBhc3NlcnQuCisjCisjIFRo ZSAic2V0dXBfc3FsIiBpcyBhIHBzcWwgdmFsaWQgc2NyaXB0IHRoYXQgY29udGFpbnMgU1FMIGNv bW1hbmRzIHRvIGV4ZWN1dGUKKyMgYmVmb3JlIG9mIGFjdHVhbGx5IGV4ZWN1dGUgdGhlIHRlc3Rz LiBUaGUgc2V0dXBzIGFyZSBhbGwgZXhlY3V0ZWQgYmVmb3JlIG9mCisjIGFueSB0ZXN0IGV4ZWN1 dGlvbi4KKyMKKyMgVGhlICJkdW1wX2NtZCIgYW5kICJyZXN0b3JlX2NtZCIgYXJlIHRoZSBjb21t YW5kcyB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQuIFRoZQorIyAicmVzdG9yZV9jbWQiIG11c3QgaGF2 ZSB0aGUgLS1maWxlIGZsYWcgdG8gc2F2ZSB0aGUgcmVzdG9yZSBvdXRwdXQgc28gdGhhdCB3ZQor IyBjYW4gYXNzZXJ0IG9uIGl0LgorIworIyBUaGUgImxpa2UiIGFuZCAidW5saWtlIiBpcyBhIHJl Z2V4cCB0aGF0IGlzIHVzZWQgdG8gbWF0Y2ggdGhlIHBnX3Jlc3RvcmUKKyMgb3V0cHV0LiBJdCBt dXN0IGhhdmUgYXQgbGVhc3Qgb25lIG9mIHRoZW4gZmlsbGVkIHBlciB0ZXN0IGNhc2VzIGJ1dCBp dCBhbHNvCisjIGNhbiBoYXZlIGJvdGguIFNlZSAiZXhjbHVkaW5nX2RhdGFiYXNlcyIgdGVzdCBj YXNlIGZvciBleGFtcGxlLgorbXkgJXBnZHVtcGFsbF9ydW5zID0gKAorCXJlc3RvcmVfcm9sZXMg PT4geworCQlzZXR1cF9zcWwgPT4gJworCQlDUkVBVEUgUk9MRSBkdW1wYWxsIFdJVEggRU5DUllQ VEVEIFBBU1NXT1JEIFwnYWRtaW5cJyBTVVBFUlVTRVI7CisJCUNSRUFURSBST0xFIGR1bXBhbGwy IFdJVEggUkVQTElDQVRJT04gQ09OTkVDVElPTiBMSU1JVCAxMDsnLAorCQlkdW1wX2NtZCA9PiBb CisJCQkncGdfZHVtcGFsbCcsCisJCQknLS1mb3JtYXQnID0+ICdkaXJlY3RvcnknLAorCQkJJy0t ZmlsZScgPT4gIiR0ZW1wZGlyL3Jlc3RvcmVfcm9sZXMiLAorCQldLAorCQlyZXN0b3JlX2NtZCA9 PiBbCisJCQkncGdfcmVzdG9yZScsICctQycsCisJCQknLS1mb3JtYXQnID0+ICdkaXJlY3Rvcnkn LAorCQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL3Jlc3RvcmVfcm9sZXMuc3FsIiwKKwkJCSIkdGVt cGRpci9yZXN0b3JlX3JvbGVzIiwKKwkJXSwKKwkJbGlrZSA9PiBxci8KKwkJCVxzKlxRQ1JFQVRF IFJPTEUgZHVtcGFsbDI7XEUKKwkJCVxzKlxRQUxURVIgUk9MRSBkdW1wYWxsMiBXSVRIIE5PU1VQ RVJVU0VSIElOSEVSSVQgTk9DUkVBVEVST0xFIE5PQ1JFQVRFREIgTk9MT0dJTiBSRVBMSUNBVElP TiBOT0JZUEFTU1JMUyBDT05ORUNUSU9OIExJTUlUIDEwO1xFCisJCS94bQorCX0sCisKKwlyZXN0 b3JlX3RhYmxlc3BhY2UgPT4geworCQlzZXR1cF9zcWwgPT4gIgorCQlDUkVBVEUgUk9MRSB0YXA7 CisJCUNSRUFURSBUQUJMRVNQQUNFIHRibDEgT1dORVIgdGFwIExPQ0FUSU9OICckdGFibGVzcGFj ZTEnOworCQlDUkVBVEUgVEFCTEVTUEFDRSB0YmwyIE9XTkVSIHRhcCBMT0NBVElPTiAnJHRhYmxl c3BhY2UyJyBXSVRIIChzZXFfcGFnZV9jb3N0PTEuMCk7IiwKKwkJZHVtcF9jbWQgPT4gWworCQkJ J3BnX2R1bXBhbGwnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJCSctLWZpbGUn ID0+ICIkdGVtcGRpci9yZXN0b3JlX3RhYmxlc3BhY2UiLAorCQldLAorCQlyZXN0b3JlX2NtZCA9 PiBbCisJCQkncGdfcmVzdG9yZScsICctQycsCisJCQknLS1mb3JtYXQnID0+ICdkaXJlY3Rvcnkn LAorCQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL3Jlc3RvcmVfdGFibGVzcGFjZS5zcWwiLAorCQkJ IiR0ZW1wZGlyL3Jlc3RvcmVfdGFibGVzcGFjZSIsCisJCV0sCisJCSMgTWF0Y2ggIkUiIGFzIG9w dGlvbmFsIHNpbmNlIGl0IGlzIGFkZGVkIG9uIExPQ0FUSU9OIHdoZW4gcnVubmluZyBvbgorCQkj IFdpbmRvd3MuCisJCWxpa2UgPT4gcXIvXgorCQkJXG5cUUNSRUFURSBUQUJMRVNQQUNFIHRibDIg T1dORVIgdGFwIExPQ0FUSU9OIFxFKD86RSk/XFEnJHRhYmxlc3BhY2UyJztcRQorCQkJXG5cUUFM VEVSIFRBQkxFU1BBQ0UgdGJsMiBTRVQgKHNlcV9wYWdlX2Nvc3Q9MS4wKTtcRQorCQkveG0sCisJ fSwKKworCXJlc3RvcmVfZ3JhbnRzID0+IHsKKwkJc2V0dXBfc3FsID0+ICIKKwkJQ1JFQVRFIERB VEFCQVNFIHRhcGdyYW50c2RiOworCQlDUkVBVEUgU0NIRU1BIHByaXZhdGU7CisJCUNSRUFURSBT RVFVRU5DRSBzZXJpYWwgU1RBUlQgMTAxOworCQlDUkVBVEUgRlVOQ1RJT04gZm4oKSBSRVRVUk5T IHZvaWQgQVMgXCRcJAorCQlCRUdJTgorCQlFTkQ7CisJCVwkXCQgTEFOR1VBR0UgcGxwZ3NxbDsK KwkJQ1JFQVRFIFJPTEUgc3VwZXI7CisJCUNSRUFURSBST0xFIGdyYW50MTsKKwkJQ1JFQVRFIFJP TEUgZ3JhbnQyOworCQlDUkVBVEUgUk9MRSBncmFudDM7CisJCUNSRUFURSBST0xFIGdyYW50NDsK KwkJQ1JFQVRFIFJPTEUgZ3JhbnQ1OworCQlDUkVBVEUgUk9MRSBncmFudDY7CisJCUNSRUFURSBS T0xFIGdyYW50NzsKKwkJQ1JFQVRFIFJPTEUgZ3JhbnQ4OworCisJCUNSRUFURSBUQUJMRSB0IChp ZCBpbnQpOworCQlJTlNFUlQgSU5UTyB0IFZBTFVFUyAoMSksICgyKSwgKDMpLCAoNCk7CisKKwkJ R1JBTlQgU0VMRUNUIE9OIFRBQkxFIHQgVE8gZ3JhbnQxOworCQlHUkFOVCBJTlNFUlQgT04gVEFC TEUgdCBUTyBncmFudDI7CisJCUdSQU5UIEFMTCBQUklWSUxFR0VTIE9OIFRBQkxFIHQgdG8gZ3Jh bnQzOworCQlHUkFOVCBDT05ORUNULCBDUkVBVEUgT04gREFUQUJBU0UgdGFwZ3JhbnRzZGIgVE8g Z3JhbnQ0OworCQlHUkFOVCBVU0FHRSwgQ1JFQVRFIE9OIFNDSEVNQSBwcml2YXRlIFRPIGdyYW50 NTsKKwkJR1JBTlQgVVNBR0UsIFNFTEVDVCwgVVBEQVRFIE9OIFNFUVVFTkNFIHNlcmlhbCBUTyBn cmFudDY7CisJCUdSQU5UIHN1cGVyIFRPIGdyYW50NzsKKwkJR1JBTlQgRVhFQ1VURSBPTiBGVU5D VElPTiBmbigpIFRPIGdyYW50ODsKKwkJIiwKKwkJZHVtcF9jbWQgPT4gWworCQkJJ3BnX2R1bXBh bGwnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJCSctLWZpbGUnID0+ICIkdGVt cGRpci9yZXN0b3JlX2dyYW50cyIsCisJCV0sCisJCXJlc3RvcmVfY21kID0+IFsKKwkJCSdwZ19y ZXN0b3JlJywgJy1DJywKKwkJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCQknLS1maWxl JyA9PiAiJHRlbXBkaXIvcmVzdG9yZV9ncmFudHMuc3FsIiwKKwkJCSIkdGVtcGRpci9yZXN0b3Jl X2dyYW50cyIsCisJCV0sCisJCWxpa2UgPT4gcXIvXgorCQkJXG5cUUdSQU5UIHN1cGVyIFRPIGdy YW50NyBXSVRIIElOSEVSSVQgVFJVRSBHUkFOVEVEIEJZXEUKKwkJCSguKlxuKSoKKwkJCVxuXFFH UkFOVCBBTEwgT04gU0NIRU1BIHByaXZhdGUgVE8gZ3JhbnQ1O1xFCisJCQkoLipcbikqCisJCQlc blxRR1JBTlQgQUxMIE9OIEZVTkNUSU9OIHB1YmxpYy5mbigpIFRPIGdyYW50ODtcRQorCQkJKC4q XG4pKgorCQkJXG5cUUdSQU5UIEFMTCBPTiBTRVFVRU5DRSBwdWJsaWMuc2VyaWFsIFRPIGdyYW50 NjtcRQorCQkJKC4qXG4pKgorCQkJXG5cUUdSQU5UIFNFTEVDVCBPTiBUQUJMRSBwdWJsaWMudCBU TyBncmFudDE7XEUKKwkJCVxuXFFHUkFOVCBJTlNFUlQgT04gVEFCTEUgcHVibGljLnQgVE8gZ3Jh bnQyO1xFCisJCQlcblxRR1JBTlQgQUxMIE9OIFRBQkxFIHB1YmxpYy50IFRPIGdyYW50MztcRQor CQkJKC4qXG4pKgorCQkJXG5cUUdSQU5UIENSRUFURSxDT05ORUNUIE9OIERBVEFCQVNFIHRhcGdy YW50c2RiIFRPIGdyYW50NDtcRQorCQkveG0sCisJfSwKKworCWV4Y2x1ZGluZ19kYXRhYmFzZXMg PT4geworCQlzZXR1cF9zcWwgPT4gJ0NSRUFURSBEQVRBQkFTRSBkYjE7CisJCVxjIGRiMQorCQlD UkVBVEUgVEFCTEUgdDEgKGlkIGludCk7CisJCUlOU0VSVCBJTlRPIHQxIFZBTFVFUyAoMSksICgy KSwgKDMpLCAoNCk7CisJCUNSRUFURSBUQUJMRSB0MiAoaWQgaW50KTsKKwkJSU5TRVJUIElOVE8g dDIgVkFMVUVTICgxKSwgKDIpLCAoMyksICg0KTsKKworCQlDUkVBVEUgREFUQUJBU0UgZGIyOwor CQlcYyBkYjIKKwkJQ1JFQVRFIFRBQkxFIHQzIChpZCBpbnQpOworCQlJTlNFUlQgSU5UTyB0MyBW QUxVRVMgKDEpLCAoMiksICgzKSwgKDQpOworCQlDUkVBVEUgVEFCTEUgdDQgKGlkIGludCk7CisJ CUlOU0VSVCBJTlRPIHQ0IFZBTFVFUyAoMSksICgyKSwgKDMpLCAoNCk7CisKKwkJQ1JFQVRFIERB VEFCQVNFIGRiZXgzOworCQlcYyBkYmV4MworCQlDUkVBVEUgVEFCTEUgdDUgKGlkIGludCk7CisJ CUlOU0VSVCBJTlRPIHQ1IFZBTFVFUyAoMSksICgyKSwgKDMpLCAoNCk7CisJCUNSRUFURSBUQUJM RSB0NiAoaWQgaW50KTsKKwkJSU5TRVJUIElOVE8gdDYgVkFMVUVTICgxKSwgKDIpLCAoMyksICg0 KTsKKworCQlDUkVBVEUgREFUQUJBU0UgZGJleDQ7CisJCVxjIGRiZXg0CisJCUNSRUFURSBUQUJM RSB0NyAoaWQgaW50KTsKKwkJSU5TRVJUIElOVE8gdDcgVkFMVUVTICgxKSwgKDIpLCAoMyksICg0 KTsKKwkJQ1JFQVRFIFRBQkxFIHQ4IChpZCBpbnQpOworCQlJTlNFUlQgSU5UTyB0OCBWQUxVRVMg KDEpLCAoMiksICgzKSwgKDQpOworCisJCUNSRUFURSBEQVRBQkFTRSBkYjU7CisJCVxjIGRiNQor CQlDUkVBVEUgVEFCTEUgdDkgKGlkIGludCk7CisJCUlOU0VSVCBJTlRPIHQ5IFZBTFVFUyAoMSks ICgyKSwgKDMpLCAoNCk7CisJCUNSRUFURSBUQUJMRSB0MTAgKGlkIGludCk7CisJCUlOU0VSVCBJ TlRPIHQxMCBWQUxVRVMgKDEpLCAoMiksICgzKSwgKDQpOworCQknLAorCQlkdW1wX2NtZCA9PiBb CisJCQkncGdfZHVtcGFsbCcsCisJCQknLS1mb3JtYXQnID0+ICdkaXJlY3RvcnknLAorCQkJJy0t ZmlsZScgPT4gIiR0ZW1wZGlyL2V4Y2x1ZGluZ19kYXRhYmFzZXMiLAorCQkJJy0tZXhjbHVkZS1k YXRhYmFzZScgPT4gJ2RiZXgqJywKKwkJXSwKKwkJcmVzdG9yZV9jbWQgPT4gWworCQkJJ3BnX3Jl c3RvcmUnLCAnLUMnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJCSctLWZpbGUn ID0+ICIkdGVtcGRpci9leGNsdWRpbmdfZGF0YWJhc2VzLnNxbCIsCisJCQknLS1leGNsdWRlLWRh dGFiYXNlJyA9PiAnZGI1JywKKwkJCSIkdGVtcGRpci9leGNsdWRpbmdfZGF0YWJhc2VzIiwKKwkJ XSwKKwkJbGlrZSA9PiBxci9eCisJCQlcblxRQ1JFQVRFIERBVEFCQVNFIGRiMVxFCisJCQkoLipc bikqCisJCQlcblxRQ1JFQVRFIFRBQkxFIHB1YmxpYy50MSAoXEUKKwkJCSguKlxuKSoKKwkJCVxu XFFDUkVBVEUgVEFCTEUgcHVibGljLnQyIChcRQorCQkJKC4qXG4pKgorCQkJXG5cUUNSRUFURSBE QVRBQkFTRSBkYjJcRQorCQkJKC4qXG4pKgorCQkJXG5cUUNSRUFURSBUQUJMRSBwdWJsaWMudDMg KFxFCisJCQkoLipcbikqCisJCQlcblxRQ1JFQVRFIFRBQkxFIHB1YmxpYy50NCAoL3htLAorCQl1 bmxpa2UgPT4gcXIvXgorCQkJXG5cUUNSRUFURSBEQVRBQkFTRSBkYjNcRQorCQkJKC4qXG4pKgor CQkJXG5cUUNSRUFURSBUQUJMRSBwdWJsaWMudDUgKFxFCisJCQkoLipcbikqCisJCQlcblxRQ1JF QVRFIFRBQkxFIHB1YmxpYy50NiAoXEUKKwkJCSguKlxuKSoKKwkJCVxuXFFDUkVBVEUgREFUQUJB U0UgZGI0XEUKKwkJCSguKlxuKSoKKwkJCVxuXFFDUkVBVEUgVEFCTEUgcHVibGljLnQ3IChcRQor CQkJKC4qXG4pKgorCQkJXG5cUUNSRUFURSBUQUJMRSBwdWJsaWMudDggKFxFCisJCQlcblxRQ1JF QVRFIERBVEFCQVNFIGRiNVxFCisJCQkoLipcbikqCisJCQlcblxRQ1JFQVRFIFRBQkxFIHB1Ymxp Yy50OSAoXEUKKwkJCSguKlxuKSoKKwkJCVxuXFFDUkVBVEUgVEFCTEUgcHVibGljLnQxMCAoXEUK KwkJL3htLAorCX0sCisKKwlmb3JtYXRfZGlyZWN0b3J5ID0+IHsKKwkJc2V0dXBfc3FsID0+ICJD UkVBVEUgVEFCTEUgZm9ybWF0X2RpcmVjdG9yeShhIGludCwgYiBib29sZWFuLCBjIHRleHQpOwor CQlJTlNFUlQgSU5UTyBmb3JtYXRfZGlyZWN0b3J5IFZBTFVFUyAoMSwgdHJ1ZSwgJ25hbWUxJyks ICgyLCBmYWxzZSwgJ25hbWUyJyk7IiwKKwkJZHVtcF9jbWQgPT4gWworCQkJJ3BnX2R1bXBhbGwn LAorCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJCSctLWZpbGUnID0+ICIkdGVtcGRp ci9mb3JtYXRfZGlyZWN0b3J5IiwKKwkJXSwKKwkJcmVzdG9yZV9jbWQgPT4gWworCQkJJ3BnX3Jl c3RvcmUnLCAnLUMnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJCSctLWZpbGUn ID0+ICIkdGVtcGRpci9mb3JtYXRfZGlyZWN0b3J5LnNxbCIsCisJCQkiJHRlbXBkaXIvZm9ybWF0 X2RpcmVjdG9yeSIsCisJCV0sCisJCWxpa2UgPT4gcXIvXlxuXFFDT1BZIHB1YmxpYy5mb3JtYXRf ZGlyZWN0b3J5IChhLCBiLCBjKSBGUk9NIHN0ZGluOy94bQorCX0sCisKKwlmb3JtYXRfdGFyID0+ IHsKKwkJc2V0dXBfc3FsID0+ICJDUkVBVEUgVEFCTEUgZm9ybWF0X3RhcihhIGludCwgYiBib29s ZWFuLCBjIHRleHQpOworCQlJTlNFUlQgSU5UTyBmb3JtYXRfdGFyIFZBTFVFUyAoMSwgZmFsc2Us ICduYW1lMycpLCAoMiwgdHJ1ZSwgJ25hbWU0Jyk7IiwKKwkJZHVtcF9jbWQgPT4gWworCQkJJ3Bn X2R1bXBhbGwnLAorCQkJJy0tZm9ybWF0JyA9PiAndGFyJywKKwkJCSctLWZpbGUnID0+ICIkdGVt cGRpci9mb3JtYXRfdGFyIiwKKwkJXSwKKwkJcmVzdG9yZV9jbWQgPT4gWworCQkJJ3BnX3Jlc3Rv cmUnLCAnLUMnLAorCQkJJy0tZm9ybWF0JyA9PiAndGFyJywKKwkJCSctLWZpbGUnID0+ICIkdGVt cGRpci9mb3JtYXRfdGFyLnNxbCIsCisJCQkiJHRlbXBkaXIvZm9ybWF0X3RhciIsCisJCV0sCisJ CWxpa2UgPT4gcXIvXlxuXFFDT1BZIHB1YmxpYy5mb3JtYXRfdGFyIChhLCBiLCBjKSBGUk9NIHN0 ZGluOy94bQorCX0sCisKKwlmb3JtYXRfY3VzdG9tID0+IHsKKwkJc2V0dXBfc3FsID0+ICJDUkVB VEUgVEFCTEUgZm9ybWF0X2N1c3RvbShhIGludCwgYiBib29sZWFuLCBjIHRleHQpOworCQlJTlNF UlQgSU5UTyBmb3JtYXRfY3VzdG9tIFZBTFVFUyAoMSwgZmFsc2UsICduYW1lNScpLCAoMiwgdHJ1 ZSwgJ25hbWU2Jyk7IiwKKwkJZHVtcF9jbWQgPT4gWworCQkJJ3BnX2R1bXBhbGwnLAorCQkJJy0t Zm9ybWF0JyA9PiAnY3VzdG9tJywKKwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9mb3JtYXRfY3Vz dG9tIiwKKwkJXSwKKwkJcmVzdG9yZV9jbWQgPT4gWworCQkJJ3BnX3Jlc3RvcmUnLCAnLUMnLAor CQkJJy0tZm9ybWF0JyA9PiAnY3VzdG9tJywKKwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9mb3Jt YXRfY3VzdG9tLnNxbCIsCisJCQkiJHRlbXBkaXIvZm9ybWF0X2N1c3RvbSIsCisJCV0sCisJCWxp a2UgPT4gcXIvXiBcblxRQ09QWSBwdWJsaWMuZm9ybWF0X2N1c3RvbSAoYSwgYiwgYykgRlJPTSBz dGRpbjsveG0KKwl9LAorCisJZHVtcF9nbG9iYWxzX29ubHkgPT4geworCQlzZXR1cF9zcWwgPT4g IkNSRUFURSBUQUJMRSBmb3JtYXRfZGlyKGEgaW50LCBiIGJvb2xlYW4sIGMgdGV4dCk7CisJCUlO U0VSVCBJTlRPIGZvcm1hdF9kaXIgVkFMVUVTICgxLCBmYWxzZSwgJ25hbWU1JyksICgyLCB0cnVl LCAnbmFtZTYnKTsiLAorCQlkdW1wX2NtZCA9PiBbCisJCQkncGdfZHVtcGFsbCcsCisJCQknLS1m b3JtYXQnID0+ICdkaXJlY3RvcnknLAorCQkJJy0tZ2xvYmFscy1vbmx5JywKKwkJCSctLWZpbGUn ID0+ICIkdGVtcGRpci9kdW1wX2dsb2JhbHNfb25seSIsCisJCV0sCisJCXJlc3RvcmVfY21kID0+ IFsKKwkJCSdwZ19yZXN0b3JlJywgJy1DJywgJy0tZ2xvYmFscy1vbmx5JywKKwkJCSctLWZvcm1h dCcgPT4gJ2RpcmVjdG9yeScsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZHVtcF9nbG9iYWxz X29ubHkuc3FsIiwKKwkJCSIkdGVtcGRpci9kdW1wX2dsb2JhbHNfb25seSIsCisJCV0sCisJCWxp a2UgPT4gcXIvCisgICAgICAgICAgICBeXHMqXFFDUkVBVEUgUk9MRSBkdW1wYWxsO1xFXHMqXG4K KwkJCS94bQorCX0sKTsKKworIyBGaXJzdCBleGVjdXRlIHRoZSBzZXR1cF9zcWwKK2ZvcmVhY2gg bXkgJHJ1biAoc29ydCBrZXlzICVwZ2R1bXBhbGxfcnVucykKK3sKKwlpZiAoJHBnZHVtcGFsbF9y dW5zeyRydW59LT57c2V0dXBfc3FsfSkKKwl7CisJCSRub2RlLT5zYWZlX3BzcWwoJHJ1bl9kYiwg JHBnZHVtcGFsbF9ydW5zeyRydW59LT57c2V0dXBfc3FsfSk7CisJfQorfQorCisjIEV4ZWN1dGUg dGhlIHRlc3RzCitmb3JlYWNoIG15ICRydW4gKHNvcnQga2V5cyAlcGdkdW1wYWxsX3J1bnMpCit7 CisJIyBDcmVhdGUgYSBuZXcgdGFyZ2V0IGNsdXN0ZXIgdG8gcGdfcmVzdG9yZSBlYWNoIHRlc3Qg Y2FzZSBydW4gc28gdGhhdCB3ZQorCSMgZG9uJ3QgbmVlZCB0byB0YWtlIGNhcmUgb2YgdGhlIGNs ZWFudXAgZnJvbSB0aGUgdGFyZ2V0IGNsdXN0ZXIgYWZ0ZXIgZWFjaAorCSMgcnVuLgorCW15ICR0 YXJnZXRfbm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygidGFyZ2V0XyRydW4i KTsKKwkkdGFyZ2V0X25vZGUtPmluaXQ7CisJJHRhcmdldF9ub2RlLT5zdGFydDsKKworCSMgRHVt cGFsbCBmcm9tIG5vZGUgY2x1c3Rlci4KKwkkbm9kZS0+Y29tbWFuZF9vayhcQHsgJHBnZHVtcGFs bF9ydW5zeyRydW59LT57ZHVtcF9jbWR9IH0sCisJCSIkcnVuOiBwZ19kdW1wYWxsIHJ1bnMiKTsK KworCSMgUmVzdG9yZSB0aGUgZHVtcCBvbiAidGFyZ2V0X25vZGUiIGNsdXN0ZXIuCisJbXkgQHJl c3RvcmVfY21kID0gKAorCQlAeyAkcGdkdW1wYWxsX3J1bnN7JHJ1bn0tPntyZXN0b3JlX2NtZH0g fSwKKwkJJy0taG9zdCcsICR0YXJnZXRfbm9kZS0+aG9zdCwgJy0tcG9ydCcsICR0YXJnZXRfbm9k ZS0+cG9ydCk7CisKKwlteSAoJHN0ZG91dCwgJHN0ZGVycikgPSBydW5fY29tbWFuZChcQHJlc3Rv cmVfY21kKTsKKworCSMgcGdfcmVzdG9yZSAtLWZpbGUgb3V0cHV0IGZpbGUuCisJbXkgJG91dHB1 dF9maWxlID0gc2x1cnBfZmlsZSgiJHRlbXBkaXIvJHtydW59LnNxbCIpOworCisJaWYgKCAgICEo JHBnZHVtcGFsbF9ydW5zeyRydW59LT57bGlrZX0pCisJCSYmICEoJHBnZHVtcGFsbF9ydW5zeyRy dW59LT57dW5saWtlfSkpCisJeworCQlkaWUgIm1pc3NpbmcgXCJsaWtlXCIgb3IgXCJ1bmxpa2Vc IiBpbiB0ZXN0IFwiJHJ1blwiIjsKKwl9CisKKwlpZiAoJHBnZHVtcGFsbF9ydW5zeyRydW59LT57 bGlrZX0pCisJeworCQlsaWtlKCRvdXRwdXRfZmlsZSwgJHBnZHVtcGFsbF9ydW5zeyRydW59LT57 bGlrZX0sICJzaG91bGQgZHVtcCAkcnVuIik7CisJfQorCisJaWYgKCRwZ2R1bXBhbGxfcnVuc3sk cnVufS0+e3VubGlrZX0pCisJeworCQl1bmxpa2UoCisJCQkkb3V0cHV0X2ZpbGUsCisJCQkkcGdk dW1wYWxsX3J1bnN7JHJ1bn0tPnt1bmxpa2V9LAorCQkJInNob3VsZCBub3QgZHVtcCAkcnVuIik7 CisJfQorfQorCisjIFNvbWUgbmVnYXRpdmUgdGVzdCBjYXNlIHdpdGggZHVtcCBvZiBwZ19kdW1w YWxsIGFuZCByZXN0b3JlIHVzaW5nIHBnX3Jlc3RvcmUKKyMgdGVzdCBjYXNlIDE6IHdoZW4gLUMg aXMgbm90IHVzZWQgaW4gcGdfcmVzdG9yZSB3aXRoIGR1bXAgb2YgcGdfZHVtcGFsbAorJG5vZGUt PmNvbW1hbmRfZmFpbHNfbGlrZSgKKwlbCisJCSdwZ19yZXN0b3JlJywKKwkJIiR0ZW1wZGlyL2Zv cm1hdF9jdXN0b20iLAorCQknLS1mb3JtYXQnID0+ICdjdXN0b20nLAorCQknLS1maWxlJyA9PiAi JHRlbXBkaXIvZXJyb3JfdGVzdC5zcWwiLAorCV0sCisJcXIvXFFwZ19yZXN0b3JlOiBlcnJvcjog b3B0aW9uIC1DXC8tLWNyZWF0ZSBtdXN0IGJlIHNwZWNpZmllZCB3aGVuIHJlc3RvcmluZyBhbiBh cmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcGFsbFxFLywKKwknV2hlbiAtQyBpcyBub3QgdXNlZCBp biBwZ19yZXN0b3JlIHdpdGggZHVtcCBvZiBwZ19kdW1wYWxsJyk7CisKKyMgdGVzdCBjYXNlIDI6 IFdoZW4gLS1saXN0IG9wdGlvbiBpcyB1c2VkIHdpdGggZHVtcCBvZiBwZ19kdW1wYWxsCiskbm9k ZS0+Y29tbWFuZF9mYWlsc19saWtlKAorCVsKKwkJJ3BnX3Jlc3RvcmUnLAorCQkiJHRlbXBkaXIv Zm9ybWF0X2N1c3RvbSIsICctQycsCisJCSctLWZvcm1hdCcgPT4gJ2N1c3RvbScsCisJCSctLWxp c3QnLAorCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZXJyb3JfdGVzdC5zcWwiLAorCV0sCisJcXIv XFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9uIC1sXC8tLWxpc3QgY2Fubm90IGJlIHVzZWQgd2hl biByZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXBhbGxcRS8sCisJJ1doZW4g LS1saXN0IGlzIHVzZWQgaW4gcGdfcmVzdG9yZSB3aXRoIGR1bXAgb2YgcGdfZHVtcGFsbCcpOwor CisjIHRlc3QgY2FzZSAzOiBXaGVuIG5vbi1leGlzdCBkYXRhYmFzZSBpcyBnaXZlbiB3aXRoIC1k IG9wdGlvbgorJG5vZGUtPmNvbW1hbmRfZmFpbHNfbGlrZSgKKwlbCisJCSdwZ19yZXN0b3JlJywK KwkJIiR0ZW1wZGlyL2Zvcm1hdF9jdXN0b20iLCAnLUMnLAorCQknLS1mb3JtYXQnID0+ICdjdXN0 b20nLAorCQknLWQnID0+ICdkYnBxJywKKwldLAorCXFyL1xRRkFUQUw6ICBkYXRhYmFzZSAiZGJw cSIgZG9lcyBub3QgZXhpc3RcRS8sCisJJ1doZW4gbm9uLWV4aXN0ZW50IGRhdGFiYXNlIGlzIGdp dmVuIHdpdGggLWQgb3B0aW9uIGluIHBnX3Jlc3RvcmUgd2l0aCBkdW1wIG9mIHBnX2R1bXBhbGwn CispOworCiskbm9kZS0+c3RvcCgnZmFzdCcpOworCitkb25lX3Rlc3RpbmcoKTsKLS0gCjIuMzku MwoK --00000000000036b739064231c306--