Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1whkXR-000Ogu-09 for pgsql-hackers@arkaria.postgresql.org; Thu, 09 Jul 2026 08:55:22 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1whkWP-00C4BK-1d for pgsql-hackers@arkaria.postgresql.org; Thu, 09 Jul 2026 08:54:18 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1whkWO-00C4BB-1Z for pgsql-hackers@lists.postgresql.org; Thu, 09 Jul 2026 08:54:17 +0000 Received: from mail-ed1-x529.google.com ([2a00:1450:4864:20::529]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1whkWK-00000000I83-1j8q for pgsql-hackers@lists.postgresql.org; Thu, 09 Jul 2026 08:54:14 +0000 Received: by mail-ed1-x529.google.com with SMTP id 4fb4d7f45d1cf-6983f20a8bfso1051741a12.1 for ; Thu, 09 Jul 2026 01:54:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1783587248; cv=none; d=google.com; s=arc-20260327; b=OqM8E+PWZ+HoIpWMe26bvHq76vk1tqd4tgc6M8lcXQqibnKynNvw5N72EjYTO2xdm6 rZEJXlxugHIBnjeIalxHUwiH+j1xL/KjjpT3yl2sNGJ9IMz7gyWUiPjqCoRB2LfrEJ1d Yy7e3GC5SjGjNFQuWnEna1Ks936pMq6qb2RJPFicJYijSxUAdFPp2O1uf/nsk+2NnvDg SERY/Gyz0naIOwhLxyOAAXQx7lI19lZjbmkA1xP2AKDlkQUQI82BlHtHOSdi1+5FemIh ecOq1rGzM64YMxbzFbJdR3V/LI8aw5FbL77yHoS2CYGP8oIbpVBz/XTY83D4sji3FWG+ A/Ew== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=/NkctKKRx0czu8el0YCuP0sFG1on2vsMUIz9ES/V//0=; fh=g3oOAXA/79oq9oHyS3u0+UlHCtBWDRE19ENhvXXc1qk=; b=cuJ4vLt0otC9oTOC7FTGPUD+ypoP7WU3JAtEqPpbsRCiZxdelTuQb3wfaG+rDOsBqk BbgN2A318FLYimufbqfw//+DoBWUj7j8DZHDf5fol6DXGM2JDWkdHYrK+uAzLDebK39n bUnje94PsRLfi1kUQnghC7Ekzy0bN6ajzXikPn+WFxweKPxWiUMA6ZlbxN73LQqSgyIH 2j2wwx+4YVxf4meVtMYgRVDljmdybLcqP+SoTZomXoEX0T3q70xgknAybbf5Hck7rt3o ivni7BLg2vvL4if73wwYcWE6xoObXuIvPpJCN9d4d+n/TQ2FAF49RgDAykzw7frPSAZb Zbbg==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; t=1783587248; x=1784192048; darn=lists.postgresql.org; h=content-type:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:from:to:cc:subject:date:message-id:reply-to :content-type; bh=/NkctKKRx0czu8el0YCuP0sFG1on2vsMUIz9ES/V//0=; b=ALLQx/fJprjesZCB0o7bkRhNPTHH3k+kzYFS5W4koCghWcSj1b01prjb1MKYlJXM2m MM2iZzojJb675LiyI/nVSFS9+ew9XqvX1cb77N1mauSPrGUXmI9c5rgFskUeNOMzfoCr J2Mt8lNape6tWhZQc2Ys5XZuWiIvos9g+XH1/ifrOf8lsy8wQP/b3u7DvEeq4MypQ+Fj ReenQ2RWYyOGk6hhbfGkVVEtjqWi6Sq62EM6zAfMIbDjiO2P30JfjDEp/zVAnEDdmSqF JjPPaiODxoZqHYw8t7n9xO/nKxN6f2JxL09WCejVihJ/lAr12agptER9MvnioNQsb11H nQhQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783587248; x=1784192048; h=content-type:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to:content-type; bh=/NkctKKRx0czu8el0YCuP0sFG1on2vsMUIz9ES/V//0=; b=QRZ09bDhcSXgAEpDOvz//z715nMMn75WN2lBdPfu0M7aRlj+VuNcaTkxquUGzga+3g ix5u3FeWcZy82+8m9uvFYNu69SvOOUmSc1VB9KNA6cj0ZN5TyJvKM22n0GoOCcVlNSH7 Hy7owvLvAJTSiY3r4HGueCT/qXNPi/S8SFxgd834Gt1ISoL+YYErDuNoLHyGwoU8UQHH jRli57vkBCpO94CoaPfrVBSVMkqpB2dV2PVBA+eFDuoquawrna31raUKaNwm3Xuy1oVA vEtvdYvZDfyn+aEeQP/oD0YA/8/nkLQEBxKyE39jAXLZESh7LbO3x8YZt0JHV+8x+/XO eb+Q== X-Forwarded-Encrypted: i=1; AHgh+RrDLTnRycH6OkTDRy36U9RVG7BMZ47SWw2yK8VV1ZZf1C7+ZoAL1TR5L0WTr3PLXVSVTeLH5HsadSAYjgRP@lists.postgresql.org X-Gm-Message-State: AOJu0YyMpaPQaYbRwT4hUmprtSlf55FdvOpXSxIQLCBZfD5xbJ4ugdxv pxsseUZsSSlWqqRLoJGD/3Bm3vcffRZFY6Dbv1A/SXOyo6NvxHVQvD6Y6CRWqkCotTYYjxpnKr6 dwMe8EPU17nB7+61tvuAtcq77oARxHRiNeuku1/ck X-Gm-Gg: AfdE7cndLgCHG1sTRgOAUY9UUwIcbpl1d1S9tTyLk17iL2NrCQy1SgTNzo7xM/ODBpK ytAYmxGWeb10lpjzVKFKxib7VajC7ZUoacTw0+fUEK8nRP3iB09N1K0EDmy4+H9pF8JnHLl+/4K q3wZOtoXvAVa/PovqejzzrtQMLw8OzazcjyUbNtqlAnEQCkTLNQ1yINSZjeJ+blI+Zgmy+FoG3f mxRfOOwif0uRNHTJJmQwvsLZFgvRvxMpFglmVkfUAaN+ROtEpoMcwhV5bmXkyE+jx8BglrgUw== X-Received: by 2002:a17:907:6ea1:b0:c12:b0b3:ae04 with SMTP id a640c23a62f3a-c15ce0401d2mr315782266b.27.1783587248202; Thu, 09 Jul 2026 01:54:08 -0700 (PDT) MIME-Version: 1.0 References: <983C7B03-D9C3-4F15-8913-7616EC5E6414@gmail.com> <20260623.162104.775158751399277188.horikyota.ntt@gmail.com> In-Reply-To: From: Akshay Joshi Date: Thu, 9 Jul 2026 14:23:54 +0530 X-Gm-Features: AUfX_mwO11j0Z0s_C48FVEGWnsleuAcIpQ-Mq4avEby3_Mjv9vN1AtrW2HVYM8Q Message-ID: Subject: Re: [PATCH] Add pg_get_table_ddl() to reconstruct CREATE TABLE statements To: Marcos Pegoraro Cc: Rui Zhao , Zsolt Parragi , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="0000000000005b83f5065629c4e2" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000005b83f5065629c4e2 Content-Type: multipart/alternative; boundary="0000000000005b83f5065629c4e0" --0000000000005b83f5065629c4e0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Fixed the documentation. v19 patch is now ready for review. On Wed, Jul 8, 2026 at 7:29=E2=80=AFPM Marcos Pegoraro = wrote: > Em qua., 8 de jul. de 2026 =C3=A0s 08:56, Akshay Joshi < > akshay.joshi@enterprisedb.com> escreveu: > The v18 patch is now ready for your review. > > On SGML part, schema_qualified is a param which comes before only_kinds. > But the explaining schema_qualified is the latest to be explained, > why ? > Shouldn't it be placed right after tablespace ? > > regards > Marcos > --0000000000005b83f5065629c4e0 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Fixed the documentation. v19 patch is now ready for review= .

On Wed, Jul 8, 2026 at 7:29=E2=80=AFPM Marcos Pegora= ro <marcos@f10.com.br> wrote= :
Em qua., 8 de jul. de 2026 =C3=A0s 08:56, Akshay Joshi= <aks= hay.joshi@enterprisedb.com> escreveu:
The v1= 8=C2=A0patch is now ready for your revi= ew.

On SGML part, schema_qualified is a param which comes before = only_kinds.
But the=C2=A0<para> explain= ing=C2=A0schema_qualified is the latest to=C2=A0be explained, why ?
Shouldn't it be placed right after tablespace ?

regards
= Marcos
--0000000000005b83f5065629c4e0-- --0000000000005b83f5065629c4e2 Content-Type: application/octet-stream; name="v19-0001-Add-pg_get_table_ddl-to-reconstruct-CREATE-TABLE.patch" Content-Disposition: attachment; filename="v19-0001-Add-pg_get_table_ddl-to-reconstruct-CREATE-TABLE.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mrd9sbht0 RnJvbSA5N2I5YTJlNTk2NDcxMjA4YWFjZDM2YTAzY2JmZGU0Y2VjMzUzODhiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBa3NoYXkgSm9zaGkgPGFrc2hheS5qb3NoaUBlbnRlcnByaXNl ZGIuY29tPgpEYXRlOiBUdWUsIDIgSnVuIDIwMjYgMTQ6MTg6NDAgKzA1MzAKU3ViamVjdDogW1BB VENIIHYxOV0gQWRkIHBnX2dldF90YWJsZV9kZGwoKSB0byByZWNvbnN0cnVjdCBDUkVBVEUgVEFC TEUKIHN0YXRlbWVudHMKClRoZSBmdW5jdGlvbiByZWNvbnN0cnVjdHMgdGhlIENSRUFURSBUQUJM RSBzdGF0ZW1lbnQgZm9yIGFuIG9yZGluYXJ5IG9yCnBhcnRpdGlvbmVkIHRhYmxlLCBmb2xsb3dl ZCBieSB0aGUgQUxURVIgVEFCTEUgLyBDUkVBVEUgSU5ERVggLwpDUkVBVEUgUlVMRSAvIENSRUFU RSBTVEFUSVNUSUNTIHN0YXRlbWVudHMgbmVlZGVkIHRvIHJlc3RvcmUgaXRzIGZ1bGwKZGVmaW5p dGlvbi4gIEVhY2ggc3RhdGVtZW50IGlzIHJldHVybmVkIGFzIGEgc2VwYXJhdGUgcm93LgoKU3Vw cG9ydGVkIHBlci1jb2x1bW4gZmVhdHVyZXM6IGRhdGEgdHlwZSB3aXRoIHR5cGUgbW9kaWZpZXJz LCBDT0xMQVRFLApTVE9SQUdFLCBDT01QUkVTU0lPTiAocGdseiAvIGx6NCksIEdFTkVSQVRFRCBB TFdBWVMgQVMgKGV4cHIpClNUT1JFRC9WSVJUVUFMLCBHRU5FUkFURUQgQUxXQVlTfEJZIERFRkFV TFQgQVMgSURFTlRJVFkgKHdpdGggc2VxdWVuY2UKb3B0aW9ucyksIERFRkFVTFQsIE5PVCBOVUxM IChpbmNsdWRpbmcgbmFtZWQgTk9UIE5VTEwgY29uc3RyYWludHMpLCBhbmQKcGVyLWNvbHVtbiBh dHRvcHRpb25zIGVtaXR0ZWQgYXMgQUxURVIgQ09MVU1OIFNFVCAoLi4uKS4KClN1cHBvcnRlZCB0 YWJsZS1sZXZlbCBmZWF0dXJlczogVU5MT0dHRUQsIElOSEVSSVRTLCBQQVJUSVRJT04gQlkgKFJB TkdFCi8gTElTVCAvIEhBU0ggcGFyZW50cyksIFBBUlRJVElPTiBPRiBwYXJlbnQgRk9SIFZBTFVF UyAoRlJPTS9UTywgV0lUSAptb2R1bHVzL3JlbWFpbmRlciwgREVGQVVMVCksIFVTSU5HIHRhYmxl IGFjY2VzcyBtZXRob2QsIFdJVEgKKHJlbG9wdGlvbnMpLCBUQUJMRVNQQUNFLCBhbmQgaW5saW5l IENIRUNLIGNvbnN0cmFpbnRzIGluIHRoZSBDUkVBVEUKVEFCTEUgYm9keS4KClN1cHBvcnRlZCBz dWItb2JqZWN0cyAocmUtdXNpbmcgZXhpc3RpbmcgZGVwYXJzZSBoZWxwZXJzIGZyb20KcnVsZXV0 aWxzLmMpOiBpbmRleGVzIChpbmNsdWRpbmcgcGFydGlhbCBhbmQgZnVuY3Rpb25hbCkgdmlhCnBn X2dldF9pbmRleGRlZl9kZGw7IGNvbnN0cmFpbnRzIChQUklNQVJZIEtFWSB3aXRoIFdJVEhPVVQg T1ZFUkxBUFMgZm9yCnRlbXBvcmFsIGtleXMsIFVOSVFVRSB3aXRoIE5VTExTIE5PVCBESVNUSU5D VCBhbmQgSU5DTFVERSBjb2x1bW5zLApGT1JFSUdOIEtFWSB3aXRoIE9OIERFTEVURS9VUERBVEUg cmVmZXJlbnRpYWwgYWN0aW9ucyBhbmQgTUFUQ0ggY2xhdXNlLApOT1QgRU5GT1JDRUQgZm9yZWln biBrZXlzLCBFWENMVURFLCBuYW1lZCBOT1QgTlVMTCkgdmlhCnBnX2dldF9jb25zdHJhaW50ZGVm X2JvZHk7IHJ1bGVzIHZpYSBwZ19nZXRfcnVsZWRlZl9kZGw7IGV4dGVuZGVkCnN0YXRpc3RpY3Mg dmlhIHBnX2dldF9zdGF0aXN0aWNzb2JqZGVmX2RkbDsgUkVQTElDQSBJREVOVElUWQpOT1RISU5H L0ZVTEwvVVNJTkcgSU5ERVg7IEFMVEVSIFRBQkxFIEVOQUJMRS9GT1JDRSBST1cgTEVWRUwgU0VD VVJJVFk7CmFuZCBjaGlsZC1sb2NhbCBERUZBVUxUIG92ZXJyaWRlcyBvbiBpbmhlcml0YW5jZS9w YXJ0aXRpb24gY2hpbGRyZW4uCkRETCBmb3IgcGFydGl0aW9uIGNoaWxkcmVuIG9mIGEgcGFydGl0 aW9uZWQtdGFibGUgcGFyZW50IGlzIGFwcGVuZGVkCmFmdGVyIHRoZSBwYXJlbnQgYnkgZGVmYXVs dC4KClRoZSBmdW5jdGlvbiBzaWduYXR1cmUgZm9sbG93cyB0aGUgbmFtZWQtcGFyYW1ldGVyIGNv bnZlbnRpb24KZXN0YWJsaXNoZWQgYnkgcGdfZ2V0X3JvbGVfZGRsKCksIHBnX2dldF90YWJsZXNw YWNlX2RkbCgpLCBhbmQKcGdfZ2V0X2RhdGFiYXNlX2RkbCgpOgoKICBwZ19nZXRfdGFibGVfZGRs KHJlbGF0aW9uICAgICAgICAgcmVnY2xhc3MsCiAgICAgICAgICAgICAgICAgICBwcmV0dHkgICAg ICAgICAgIGJvb2xlYW4gIERFRkFVTFQgZmFsc2UsCiAgICAgICAgICAgICAgICAgICBvd25lciAg ICAgICAgICAgIGJvb2xlYW4gIERFRkFVTFQgdHJ1ZSwKICAgICAgICAgICAgICAgICAgIHRhYmxl c3BhY2UgICAgICAgYm9vbGVhbiAgREVGQVVMVCB0cnVlLAogICAgICAgICAgICAgICAgICAgc2No ZW1hX3F1YWxpZmllZCBib29sZWFuICBERUZBVUxUIHRydWUsCiAgICAgICAgICAgICAgICAgICBv bmx5X2tpbmRzICAgICAgIHRleHRbXSAgIERFRkFVTFQgTlVMTCwKICAgICAgICAgICAgICAgICAg IGV4Y2VwdF9raW5kcyAgICAgdGV4dFtdICAgREVGQVVMVCBOVUxMKQoKcHJldHR5IGNvbnRyb2xz IHByZXR0eS1wcmludGVkIG91dHB1dC4gIG93bmVyIGNvbnRyb2xzIGVtaXNzaW9uIG9mIHRoZQpB TFRFUiBUQUJMRSAuLi4gT1dORVIgVE8gc3RhdGVtZW50LiAgdGFibGVzcGFjZSBjb250cm9scyB0 aGUgVEFCTEVTUEFDRQpjbGF1c2Ugb24gQ1JFQVRFIFRBQkxFLiAgc2NoZW1hX3F1YWxpZmllZCBj b250cm9scyB3aGV0aGVyIG9iamVjdCBuYW1lcwphcmUgZW1pdHRlZCB3aXRoIHRoZWlyIHNjaGVt YSBwcmVmaXg6IHdoZW4gdHJ1ZSAodGhlIGRlZmF1bHQpIHRoZQphY3RpdmUgc2VhcmNoX3BhdGgg aXMgdGVtcG9yYXJpbHkgbmFycm93ZWQgdG8gcGdfY2F0YWxvZyBzbyBldmVyeQpkZXBhcnNlIGhl bHBlciBwcm9kdWNlcyBmdWxseS1xdWFsaWZpZWQgbmFtZXM7IHdoZW4gZmFsc2UgaXQgaXMgbmFy cm93ZWQKdG8gdGhlIHRhcmdldCB0YWJsZSdzIG93biBzY2hlbWEgc28gc2FtZS1zY2hlbWEgcmVm ZXJlbmNlcyBjb21lIG91dAp1bnF1YWxpZmllZCB3aGlsZSBjcm9zcy1zY2hlbWEgcmVmZXJlbmNl cyByZW1haW4gcXVhbGlmaWVkIGZvcgpjb3JyZWN0bmVzcy4gIFRlbXBvcmFyeSB0YWJsZXMgYXJl IG5ldmVyIHNjaGVtYS1xdWFsaWZpZWQgcmVnYXJkbGVzcyBvZgp0aGlzIHNldHRpbmc6IHRoZSBU RU1QT1JBUlkga2V5d29yZCBhbHJlYWR5IHBsYWNlcyB0aGVtIGluIHBnX3RlbXAsIGFuZAplbWl0 dGluZyBwZ190ZW1wX05OLnJlbG5hbWUgd291bGQgcHJvZHVjZSBub24tcmVwbGF5YWJsZSBEREwu CgpPYmplY3QtY2xhc3MgZmlsdGVyaW5nIHVzZXMgdHdvIG11dHVhbGx5LWV4Y2x1c2l2ZSB0ZXh0 LWFycmF5CnBhcmFtZXRlcnMsIG9ubHlfa2luZHMgYW5kIGV4Y2VwdF9raW5kcy4gIFdoZW4gb25s eV9raW5kcyBpcyBzZXQsIG9ubHkKdGhlIGxpc3RlZCBraW5kcyBhcmUgZW1pdHRlZDsgd2hlbiBl eGNlcHRfa2luZHMgaXMgc2V0LCBldmVyeSBraW5kCmV4Y2VwdCB0aGUgbGlzdGVkIG9uZXMgaXMg ZW1pdHRlZDsgd2hlbiBuZWl0aGVyIGlzIHNldCBldmVyeSBraW5kIGlzCmVtaXR0ZWQuICBFYWNo IGFycmF5IGVsZW1lbnQgaXMgbWF0Y2hlZCBjYXNlLWluc2Vuc2l0aXZlbHkgd2l0aApsZWFkaW5n L3RyYWlsaW5nIHdoaXRlc3BhY2UgdHJpbW1lZDsgYW4gdW5yZWNvZ25pemVkIG5hbWUgcmFpc2Vz IGFuCmVycm9yLiAgVGhlIGtpbmQgdm9jYWJ1bGFyeSBpczoKCiAgdGFibGUsIGluZGV4LCBwcmlt YXJ5X2tleSwgdW5pcXVlLCBjaGVjaywgZm9yZWlnbl9rZXksIGV4Y2x1c2lvbiwKICBydWxlLCBz dGF0aXN0aWNzLCBybHMsIHJlcGxpY2FfaWRlbnRpdHksIHBhcnRpdGlvbgoKdHJpZ2dlciBhbmQg cG9saWN5IGFyZSBhY2NlcHRlZCBpbiB0aGUgdm9jYWJ1bGFyeSBidXQgY3VycmVudGx5IHByb2R1 Y2UKbm8gb3V0cHV0OyB0aGV5IGFyZSByZXNlcnZlZCBmb3Igd2hlbiBzdGFuZGFsb25lIHBnX2dl dF90cmlnZ2VyX2RkbCgpCmFuZCBwZ19nZXRfcG9saWN5X2RkbCgpIGhlbHBlcnMgYmVjb21lIGF2 YWlsYWJsZS4KCk5PVCBOVUxMIGlzIG5vdCBwYXJ0IG9mIHRoZSB2b2NhYnVsYXJ5OiBpdCBpcyBh bHdheXMgZW1pdHRlZCB0byBwcmV2ZW50CnByb2R1Y2luZyBzY2hlbWFzIHRoYXQgc2lsZW50bHkg YWNjZXB0IE5VTExzIHRoZSBzb3VyY2Ugd291bGQgcmVqZWN0LgpXaGVuIHJlcGxpY2FfaWRlbnRp dHkgaXMgaW4gdGhlIGFjdGl2ZSBmaWx0ZXIgYW5kIHRoZSB0YWJsZSdzIFJFUExJQ0EKSURFTlRJ VFkgVVNJTkcgSU5ERVggcmVmZXJlbmNlcyBhbiBpbmRleCB0aGF0IHRoZSBmaWx0ZXIgd291bGQg c3VwcHJlc3MsCnRoZSBmdW5jdGlvbiByYWlzZXMgYW4gZXJyb3IgYmVmb3JlIGVtaXR0aW5nIGFu eSBvdXRwdXQsIHNvIHRoZQpnZW5lcmF0ZWQgRERMIG5ldmVyIHJlZmVyZW5jZXMgYW4gaW5kZXgg aXQgZGlkIG5vdCBwcm9kdWNlLgoKRGVmYXVsdCBvbWlzc2lvbiBjb252ZW50aW9uOiBldmVyeSBv cHRpb25hbCBjbGF1c2UgaXMgb21pdHRlZCB3aGVuIGl0cwp2YWx1ZSBtYXRjaGVzIHdoYXQgdGhl IHNlcnZlciB3b3VsZCByZWFwcGx5IG9uIHJvdW5kLXRyaXAsIGluY2x1ZGluZwp0eXBlLWRlZmF1 bHQgQ09MTEFURSwgcGVyLXR5cGUgU1RPUkFHRSwgdGhlIGF1dG8tZ2VuZXJhdGVkIGlkZW50aXR5 CnNlcXVlbmNlIG5hbWUgYW5kIHBhcmFtZXRlciBkZWZhdWx0cywgaGVhcCBhY2Nlc3MgbWV0aG9k LCBkZWZhdWx0ClJFUExJQ0EgSURFTlRJVFksIGRpc2FibGVkIFJMUyB0b2dnbGVzLCBlbXB0eSBy ZWxvcHRpb25zLCBhbmQgdGhlCmRlZmF1bHQgdGFibGVzcGFjZS4KCkF1dGhvcjogQWtzaGF5IEpv c2hpIDxha3NoYXkuam9zaGlAZW50ZXJwcmlzZWRiLmNvbT4KUmV2aWV3ZWQtYnk6IE1hcmNvcyBQ ZWdvcmFybyA8bWFyY29zQGYxMC5jb20uYnI+ClJldmlld2VkLWJ5OiBac29sdCBQYXJyYWdpIDx6 c29sdC5wYXJyYWdpQHBlcmNvbmEuY29tPgpSZXZpZXdlZC1ieTogS3lvdGFybyBIb3JpZ3VjaGkg PGhvcmlreW90YS5udHRAZ21haWwuY29tPgpSZXZpZXdlZC1ieTogQ2hhbyBMaSA8bGkuZXZhbi5j aGFvQGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IFJ1aSBaaGFvIDx6aGFvcnVpMTI2QGdtYWlsLmNv bT4KLS0tCiBkb2Mvc3JjL3NnbWwvZnVuYy9mdW5jLWluZm8uc2dtbCAgICAgICAgICAgICAgfCAg MTkzICsrCiBzcmMvYmFja2VuZC9jYXRhbG9nL3BnX2luaGVyaXRzLmMgICAgICAgICAgICAgfCAg IDkzICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jICAgICAgICAgICAgICB8ICAg MzAgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9kZGx1dGlscy5jICAgICAgICAgICAgICB8IDI2 NjAgKysrKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYyAg ICAgICAgICAgICB8ICAgODcgKy0KIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfaW5oZXJpdHMuaCAg ICAgICAgICAgICB8ICAgIDEgKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCAgICAg ICAgICAgICAgIHwgICAgOCArCiBzcmMvaW5jbHVkZS9jb21tYW5kcy90YWJsZWNtZHMuaCAgICAg ICAgICAgICAgfCAgICAzICsKIHNyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oICAgICAgICAg ICAgICAgICB8ICAgIDQgKwogLi4uL3JlZ3Jlc3MvZXhwZWN0ZWQvcGdfZ2V0X3RhYmxlX2RkbC5v dXQgICAgIHwgMTYxMiArKysrKysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVk dWxlICAgICAgICAgICAgfCAgICAyICstCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9wZ19nZXRfdGFi bGVfZGRsLnNxbCAgICAgfCAgOTM3ICsrKysrKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QgICAgICAgICAgICAgIHwgICAgMiArCiAxMyBmaWxlcyBjaGFuZ2VkLCA1NjE1IGluc2Vy dGlvbnMoKyksIDE3IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvcGdfZ2V0X3RhYmxlX2RkbC5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBz cmMvdGVzdC9yZWdyZXNzL3NxbC9wZ19nZXRfdGFibGVfZGRsLnNxbAoKZGlmZiAtLWdpdCBhL2Rv Yy9zcmMvc2dtbC9mdW5jL2Z1bmMtaW5mby5zZ21sIGIvZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy1p bmZvLnNnbWwKaW5kZXggNjllZjM4NTdjZmEuLjExMTMwYjUxOTY4IDEwMDY0NAotLS0gYS9kb2Mv c3JjL3NnbWwvZnVuYy9mdW5jLWluZm8uc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvZnVuYy9mdW5j LWluZm8uc2dtbApAQCAtMzk2MCw2ICszOTYwLDE5OSBAQCBhY2wgICAgICB8IHtwb3N0Z3Jlcz1h cndkRHh0bS9wb3N0Z3Jlcyxmb289ci9wb3N0Z3Jlc30KICAgICAgICAgaXMgZmFsc2UsIHRoZSA8 bGl0ZXJhbD5PV05FUjwvbGl0ZXJhbD4gY2xhdXNlIGlzIG9taXR0ZWQuCiAgICAgICAgPC9wYXJh PjwvZW50cnk+CiAgICAgICA8L3Jvdz4KKyAgICAgIDxyb3c+CisgICAgICAgPGVudHJ5IHJvbGU9 ImZ1bmNfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImZ1bmNfc2lnbmF0dXJlIj4KKyAgICAgICAg PGluZGV4dGVybT4KKyAgICAgICAgIDxwcmltYXJ5PnBnX2dldF90YWJsZV9kZGw8L3ByaW1hcnk+ CisgICAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgICA8ZnVuY3Rpb24+cGdfZ2V0X3RhYmxlX2Rk bDwvZnVuY3Rpb24+CisgICAgICAgICggPHBhcmFtZXRlcj5yZWxhdGlvbjwvcGFyYW1ldGVyPiA8 dHlwZT5yZWdjbGFzczwvdHlwZT4KKyAgICAgICAgPG9wdGlvbmFsPiwgPHBhcmFtZXRlcj5wcmV0 dHk8L3BhcmFtZXRlcj4gPHR5cGU+Ym9vbGVhbjwvdHlwZT4KKyAgICAgICAgPGxpdGVyYWw+REVG QVVMVDwvbGl0ZXJhbD4gZmFsc2U8L29wdGlvbmFsPgorICAgICAgICA8b3B0aW9uYWw+LCA8cGFy YW1ldGVyPm93bmVyPC9wYXJhbWV0ZXI+IDx0eXBlPmJvb2xlYW48L3R5cGU+CisgICAgICAgIDxs aXRlcmFsPkRFRkFVTFQ8L2xpdGVyYWw+IHRydWU8L29wdGlvbmFsPgorICAgICAgICA8b3B0aW9u YWw+LCA8cGFyYW1ldGVyPnRhYmxlc3BhY2U8L3BhcmFtZXRlcj4gPHR5cGU+Ym9vbGVhbjwvdHlw ZT4KKyAgICAgICAgPGxpdGVyYWw+REVGQVVMVDwvbGl0ZXJhbD4gdHJ1ZTwvb3B0aW9uYWw+Cisg ICAgICAgIDxvcHRpb25hbD4sIDxwYXJhbWV0ZXI+c2NoZW1hX3F1YWxpZmllZDwvcGFyYW1ldGVy PiA8dHlwZT5ib29sZWFuPC90eXBlPgorICAgICAgICA8bGl0ZXJhbD5ERUZBVUxUPC9saXRlcmFs PiB0cnVlPC9vcHRpb25hbD4KKyAgICAgICAgPG9wdGlvbmFsPiwgPHBhcmFtZXRlcj5vbmx5X2tp bmRzPC9wYXJhbWV0ZXI+IDx0eXBlPnRleHRbXTwvdHlwZT4KKyAgICAgICAgPGxpdGVyYWw+REVG QVVMVDwvbGl0ZXJhbD4gTlVMTDwvb3B0aW9uYWw+CisgICAgICAgIDxvcHRpb25hbD4sIDxwYXJh bWV0ZXI+ZXhjZXB0X2tpbmRzPC9wYXJhbWV0ZXI+IDx0eXBlPnRleHRbXTwvdHlwZT4KKyAgICAg ICAgPGxpdGVyYWw+REVGQVVMVDwvbGl0ZXJhbD4gTlVMTDwvb3B0aW9uYWw+ICkKKyAgICAgICAg PHJldHVybnZhbHVlPnNldG9mIHRleHQ8L3JldHVybnZhbHVlPgorICAgICAgIDwvcGFyYT4KKyAg ICAgICA8cGFyYT4KKyAgICAgICAgUmVjb25zdHJ1Y3RzIHRoZSA8Y29tbWFuZD5DUkVBVEUgVEFC TEU8L2NvbW1hbmQ+IHN0YXRlbWVudCBmb3IgdGhlCisgICAgICAgIHNwZWNpZmllZCBvcmRpbmFy eSBvciBwYXJ0aXRpb25lZCB0YWJsZSwgZm9sbG93ZWQgYnkgdGhlCisgICAgICAgIDxjb21tYW5k PkFMVEVSIFRBQkxFPC9jb21tYW5kPiwgPGNvbW1hbmQ+Q1JFQVRFIElOREVYPC9jb21tYW5kPiwK KyAgICAgICAgPGNvbW1hbmQ+Q1JFQVRFIFJVTEU8L2NvbW1hbmQ+LCBhbmQgPGNvbW1hbmQ+Q1JF QVRFIFNUQVRJU1RJQ1M8L2NvbW1hbmQ+CisgICAgICAgIHN0YXRlbWVudHMgbmVlZGVkIHRvIHJl Y3JlYXRlIHRoZSB0YWJsZSdzIGNvbHVtbnMsIGNvbnN0cmFpbnRzLAorICAgICAgICBpbmRleGVz LCBydWxlcywgZXh0ZW5kZWQgc3RhdGlzdGljcywgYW5kIHJvdy1sZXZlbCBzZWN1cml0eSBmbGFn cy4KKyAgICAgICAgVGhpcyBpbmNsdWRlcyBwZXItaW5kZXggc3RhdGlzdGljcyB0YXJnZXRzCisg ICAgICAgICg8Y29tbWFuZD5BTFRFUiBJTkRFWCAuLi4gU0VUIFNUQVRJU1RJQ1M8L2NvbW1hbmQ+ KSwKKyAgICAgICAgdGhlIGNsdXN0ZXJpbmcgaW5kZXggKDxjb21tYW5kPkFMVEVSIFRBQkxFIC4u LiBDTFVTVEVSIE9OPC9jb21tYW5kPiksCisgICAgICAgIGFuZCBub24tZGVmYXVsdCBydWxlIGZp cmluZyBzdGF0ZXMKKyAgICAgICAgKDxjb21tYW5kPkFMVEVSIFRBQkxFIC4uLiBESVNBQkxFL0VO QUJMRSBSVUxFPC9jb21tYW5kPikuCisgICAgICAgIEluaGVyaXRlZCBjb2x1bW5zIGFuZCBjb25z dHJhaW50cyBhcmUgZW1pdHRlZCBieSB0aGUgcGFyZW50IHRhYmxlJ3MKKyAgICAgICAgRERMIGFu ZCBhcmUgbm90IGR1cGxpY2F0ZWQgb24gaW5oZXJpdGFuY2UgY2hpbGRyZW4gb3IgcGFydGl0aW9u cy4KKyAgICAgICAgRWFjaCBzdGF0ZW1lbnQgaXMgcmV0dXJuZWQgYXMgYSBzZXBhcmF0ZSByb3cu CisgICAgICAgIEZvcmVpZ24ta2V5IGNvbnN0cmFpbnRzIGFyZSBhbHdheXMgZW1pdHRlZCBhZnRl ciBhbGwgb3RoZXIKKyAgICAgICAgY29uc3RyYWludHMgc28gdGhhdCBzZWxmLXJlZmVyZW5jaW5n IGZvcmVpZ24ga2V5cyAod2hlcmUgdGhlCisgICAgICAgIHJlZmVyZW5jZWQgcHJpbWFyeSBvciB1 bmlxdWUga2V5IGlzIG9uIHRoZSBzYW1lIHRhYmxlKSBjYW4gYmUKKyAgICAgICAgYWRkZWQgb25j ZSB0aGF0IGtleSBhbHJlYWR5IGV4aXN0cy4KKyAgICAgICAgV2hlbiA8cGFyYW1ldGVyPnByZXR0 eTwvcGFyYW1ldGVyPiBpcyB0cnVlLCB0aGUgb3V0cHV0IGlzCisgICAgICAgIHByZXR0eS1wcmlu dGVkLiAgV2hlbiA8cGFyYW1ldGVyPm93bmVyPC9wYXJhbWV0ZXI+IGlzIGZhbHNlLCB0aGUKKyAg ICAgICAgPGNvbW1hbmQ+QUxURVIgVEFCTEUgLi4uIE9XTkVSIFRPPC9jb21tYW5kPiBzdGF0ZW1l bnQgaXMgb21pdHRlZC4KKyAgICAgICAgV2hlbiA8cGFyYW1ldGVyPnRhYmxlc3BhY2U8L3BhcmFt ZXRlcj4gaXMgZmFsc2UsIHRoZQorICAgICAgICA8bGl0ZXJhbD5UQUJMRVNQQUNFPC9saXRlcmFs PiBjbGF1c2UgaXMgb21pdHRlZCBmcm9tIHRoZQorICAgICAgICA8Y29tbWFuZD5DUkVBVEUgVEFC TEU8L2NvbW1hbmQ+IHN0YXRlbWVudC4gIFRoZQorICAgICAgICA8cGFyYW1ldGVyPm9ubHlfa2lu ZHM8L3BhcmFtZXRlcj4gYW5kIDxwYXJhbWV0ZXI+ZXhjZXB0X2tpbmRzPC9wYXJhbWV0ZXI+Cisg ICAgICAgIHBhcmFtZXRlcnMgZGVzY3JpYmVkIGJlbG93IGNvbnRyb2wgd2hpY2ggb2JqZWN0IGNs YXNzZXMgYXJlIGVtaXR0ZWQuCisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAg ICBUaGUgPHBhcmFtZXRlcj5zY2hlbWFfcXVhbGlmaWVkPC9wYXJhbWV0ZXI+IHBhcmFtZXRlciAo ZGVmYXVsdAorICAgICAgICA8bGl0ZXJhbD50cnVlPC9saXRlcmFsPikgY29udHJvbHMgd2hldGhl ciB0aGUgdGFyZ2V0IHRhYmxlJ3Mgb3duCisgICAgICAgIHNjaGVtYSBpcyBpbmNsdWRlZCBpbiB0 aGUgZ2VuZXJhdGVkIERETC4gIFdoZW4gc2V0IHRvCisgICAgICAgIDxsaXRlcmFsPmZhbHNlPC9s aXRlcmFsPiwgdGhlIHRhYmxlIG5hbWUgaXMgZW1pdHRlZCB1bnF1YWxpZmllZAorICAgICAgICBp biB0aGUgPGNvbW1hbmQ+Q1JFQVRFIFRBQkxFPC9jb21tYW5kPiBhbmQgZXZlcnkgc3Vic2VxdWVu dAorICAgICAgICA8Y29tbWFuZD5BTFRFUiBUQUJMRTwvY29tbWFuZD4sIDxjb21tYW5kPkNSRUFU RSBJTkRFWDwvY29tbWFuZD4sCisgICAgICAgIDxjb21tYW5kPkNSRUFURSBSVUxFPC9jb21tYW5k PiwgYW5kCisgICAgICAgIDxjb21tYW5kPkNSRUFURSBTVEFUSVNUSUNTPC9jb21tYW5kPiBzdGF0 ZW1lbnQuICBSZWZlcmVuY2VzIHRvCisgICAgICAgIG9iamVjdHMgaW4gdGhlIHNhbWUgc2NoZW1h IGFzIHRoZSB0YXJnZXQgdGFibGUgKGluaGVyaXRhbmNlCisgICAgICAgIHBhcmVudHMsIHBhcnRp dGlvbiBwYXJlbnRzLCBpZGVudGl0eSBzZXF1ZW5jZXMsIGFuZCBhbnkKKyAgICAgICAgc2FtZS1z Y2hlbWEgb2JqZWN0IHRoZSBkZXBhcnNlIGhlbHBlcnMgaGFwcGVuIHRvIG1lbnRpb24pIGFyZQor ICAgICAgICBhbHNvIGVtaXR0ZWQgdW5xdWFsaWZpZWQsIHNvIHRoZSBzY3JpcHQgY2FuIGJlIHJl cGxheWVkIHVuZGVyIGEKKyAgICAgICAgZGlmZmVyZW50IDx2YXJuYW1lPnNlYXJjaF9wYXRoPC92 YXJuYW1lPiB0byByZWNyZWF0ZSB0aGUgdGFibGUKKyAgICAgICAgaW4gYW5vdGhlciBzY2hlbWEu ICBDcm9zcy1zY2hlbWEgcmVmZXJlbmNlcyAoZm9yIGV4YW1wbGUgYQorICAgICAgICBmb3JlaWdu IGtleSB0YXJnZXQgaW4gYSBkaWZmZXJlbnQgc2NoZW1hKSByZW1haW4gcXVhbGlmaWVkIGZvcgor ICAgICAgICBjb3JyZWN0bmVzcy4gIFBhcnRpdGlvbiBjaGlsZHJlbiB0aGF0IHJlc2lkZSBpbiBh IGRpZmZlcmVudAorICAgICAgICBzY2hlbWEgdGhhbiB0aGUgdGFyZ2V0IHRhYmxlIGFyZSBhbHdh eXMgZW1pdHRlZCB3aXRoIGZ1bGwgc2NoZW1hCisgICAgICAgIHF1YWxpZmljYXRpb24gcmVnYXJk bGVzcyBvZiB0aGlzIHBhcmFtZXRlciwgYmVjYXVzZSB0aGUgb3V0cHV0CisgICAgICAgIHdvdWxk IG90aGVyd2lzZSBwbGFjZSB0aGUgY2hpbGQgaW4gdGhlIHdyb25nIHNjaGVtYSB3aGVuCisgICAg ICAgIHJlcGxheWVkLgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgVGhl IDxwYXJhbWV0ZXI+b25seV9raW5kczwvcGFyYW1ldGVyPiBhbmQgPHBhcmFtZXRlcj5leGNlcHRf a2luZHM8L3BhcmFtZXRlcj4KKyAgICAgICAgcGFyYW1ldGVycyBlYWNoIHRha2UgYSB0ZXh0IGFy cmF5IG9mIG9iamVjdC1jbGFzcyBraW5kIG5hbWVzCisgICAgICAgIGFuZCBhcmUgbXV0dWFsbHkg ZXhjbHVzaXZlIChzcGVjaWZ5aW5nIGJvdGggcmFpc2VzIGFuCisgICAgICAgIGVycm9yKS4gIFdo ZW4gPHBhcmFtZXRlcj5vbmx5X2tpbmRzPC9wYXJhbWV0ZXI+IGlzIHNldCwgb25seSB0aGUKKyAg ICAgICAgbGlzdGVkIGtpbmRzIGFyZSBlbWl0dGVkOyB3aGVuIDxwYXJhbWV0ZXI+ZXhjZXB0X2tp bmRzPC9wYXJhbWV0ZXI+IGlzCisgICAgICAgIHNldCwgZXZlcnkga2luZCA8ZW1waGFzaXM+ZXhj ZXB0PC9lbXBoYXNpcz4gdGhlIGxpc3RlZCBvbmVzIGlzCisgICAgICAgIGVtaXR0ZWQuICBXaGVu IG5laXRoZXIgaXMgc2V0ICh0aGUgZGVmYXVsdCksIGV2ZXJ5IGtpbmQgaXMKKyAgICAgICAgZW1p dHRlZC4gIExlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UgaW4gZWFjaCBhcnJheSBlbGVt ZW50CisgICAgICAgIGlzIGlnbm9yZWQgYW5kIG1hdGNoaW5nIGlzIGNhc2UtaW5zZW5zaXRpdmU7 IGFuIHVucmVjb2duaXplZAorICAgICAgICBraW5kIG5hbWUgcmFpc2VzIGFuIGVycm9yLgorICAg ICAgICBUaGUga2luZCB2b2NhYnVsYXJ5IGlzCisgICAgICAgIDxsaXRlcmFsPnRhYmxlPC9saXRl cmFsPiwKKyAgICAgICAgPGxpdGVyYWw+aW5kZXg8L2xpdGVyYWw+LAorICAgICAgICA8bGl0ZXJh bD5wcmltYXJ5X2tleTwvbGl0ZXJhbD4sCisgICAgICAgIDxsaXRlcmFsPnVuaXF1ZTwvbGl0ZXJh bD4sCisgICAgICAgIDxsaXRlcmFsPmNoZWNrPC9saXRlcmFsPiwKKyAgICAgICAgPGxpdGVyYWw+ Zm9yZWlnbl9rZXk8L2xpdGVyYWw+LAorICAgICAgICA8bGl0ZXJhbD5leGNsdXNpb248L2xpdGVy YWw+LAorICAgICAgICA8bGl0ZXJhbD5ydWxlPC9saXRlcmFsPiwKKyAgICAgICAgPGxpdGVyYWw+ c3RhdGlzdGljczwvbGl0ZXJhbD4sCisgICAgICAgIDxsaXRlcmFsPnRyaWdnZXI8L2xpdGVyYWw+ LAorICAgICAgICA8bGl0ZXJhbD5wb2xpY3k8L2xpdGVyYWw+LAorICAgICAgICA8bGl0ZXJhbD5y bHM8L2xpdGVyYWw+ICh0aGUKKyAgICAgICAgPGNvbW1hbmQ+RU5BQkxFPC9jb21tYW5kPi88Y29t bWFuZD5GT1JDRSBST1cgTEVWRUwgU0VDVVJJVFk8L2NvbW1hbmQ+CisgICAgICAgIHRvZ2dsZXMp LAorICAgICAgICA8bGl0ZXJhbD5yZXBsaWNhX2lkZW50aXR5PC9saXRlcmFsPiwgYW5kCisgICAg ICAgIDxsaXRlcmFsPnBhcnRpdGlvbjwvbGl0ZXJhbD4gKHRoZSBEREwgZm9yIGVhY2ggZGlyZWN0 CisgICAgICAgIHBhcnRpdGlvbiBjaGlsZCBvZiBhIHBhcnRpdGlvbmVkLXRhYmxlIHBhcmVudCku CisgICAgICAgIE5vdGUgdGhhdCA8bGl0ZXJhbD50cmlnZ2VyPC9saXRlcmFsPiBhbmQgPGxpdGVy YWw+cG9saWN5PC9saXRlcmFsPgorICAgICAgICBhcmUgYWNjZXB0ZWQgaW4gdGhlIHZvY2FidWxh cnkgYnV0IGN1cnJlbnRseSBwcm9kdWNlIG5vIG91dHB1dDsKKyAgICAgICAgdGhleSBhcmUgcmVz ZXJ2ZWQgZm9yIGZ1dHVyZSB1c2Ugd2hlbiBzdGFuZGFsb25lCisgICAgICAgIDxmdW5jdGlvbj5w Z19nZXRfdHJpZ2dlcl9kZGw8L2Z1bmN0aW9uPiBhbmQKKyAgICAgICAgPGZ1bmN0aW9uPnBnX2dl dF9wb2xpY3lfZGRsPC9mdW5jdGlvbj4gaGVscGVycyBiZWNvbWUgYXZhaWxhYmxlLiAgVGhlCisg ICAgICAgIDxsaXRlcmFsPnRhYmxlPC9saXRlcmFsPiBraW5kIGdyb3VwcyB0aGUKKyAgICAgICAg PGNvbW1hbmQ+Q1JFQVRFIFRBQkxFPC9jb21tYW5kPiBzdGF0ZW1lbnQgdG9nZXRoZXIgd2l0aCB0 aGUKKyAgICAgICAgcmVsYXRlZCBwZXItdGFibGUgPGNvbW1hbmQ+QUxURVIgVEFCTEU8L2NvbW1h bmQ+IHBhc3NlczoKKyAgICAgICAgPGNvbW1hbmQ+T1dORVIgVE88L2NvbW1hbmQ+LCBjaGlsZC1k ZWZhdWx0CisgICAgICAgIDxjb21tYW5kPlNFVCBERUZBVUxUPC9jb21tYW5kPiwgYW5kIHBlci1j b2x1bW4KKyAgICAgICAgPGNvbW1hbmQ+U0VUICg8cmVwbGFjZWFibGU+YXR0b3B0aW9uczwvcmVw bGFjZWFibGU+KTwvY29tbWFuZD4uCisgICAgICAgIDxsaXRlcmFsPk5PVCBOVUxMPC9saXRlcmFs PiBjb25zdHJhaW50cyBhcmUgbm90IHBhcnQgb2YgdGhlCisgICAgICAgIHZvY2FidWxhcnk7IHRo ZXkgYXJlIGFsd2F5cyBlbWl0dGVkIGFzIHBhcnQgb2YgdGhlIHRhYmxlIHRvCisgICAgICAgIGF2 b2lkIHByb2R1Y2luZyBzY2hlbWFzIHRoYXQgc2lsZW50bHkgYWNjZXB0CisgICAgICAgIDxsaXRl cmFsPk5VTEw8L2xpdGVyYWw+IHZhbHVlcyB0aGUgc291cmNlIHdvdWxkIGhhdmUgcmVqZWN0ZWQu CisgICAgICAgIEZvciBleGFtcGxlLCB0aGUgc2Vjb25kIHBhc3Mgb2YgYSB0d28tcGFzcyBzY2hl bWEgY2xvbmUgdGhhdAorICAgICAgICBhZGRzIGNyb3NzLXRhYmxlIGZvcmVpZ24ga2V5cyBhZnRl ciBkYXRhIGhhcyBsb2FkZWQgY2FuIGJlCisgICAgICAgIHdyaXR0ZW4gYXMKKyAgICAgICAgPGxp dGVyYWw+b25seV9raW5kcyA9PiBBUlJBWVsnZm9yZWlnbl9rZXknXTwvbGl0ZXJhbD4sIGFuZCB0 aGUKKyAgICAgICAgcHViL3N1Yi1zdHlsZSBjbG9uZSB0aGF0IGtlZXBzIGEgcHJpbWFyeSBrZXkg YnV0IGRyb3BzIGV2ZXJ5CisgICAgICAgIG90aGVyIGNvbnN0cmFpbnQgY2FuIGJlIHdyaXR0ZW4g YXMKKyAgICAgICAgPGxpdGVyYWw+ZXhjZXB0X2tpbmRzID0+IEFSUkFZWyd1bmlxdWUnLCdjaGVj aycsJ2ZvcmVpZ25fa2V5JywnZXhjbHVzaW9uJ108L2xpdGVyYWw+LgorICAgICAgIDwvcGFyYT4K KyAgICAgICA8cGFyYT4KKyAgICAgICAgV2hlbiB0aGUgdGFibGUgaGFzCisgICAgICAgIDxsaXRl cmFsPlJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVg8L2xpdGVyYWw+IGFuZCB0aGUKKyAgICAg ICAgPGxpdGVyYWw+cmVwbGljYV9pZGVudGl0eTwvbGl0ZXJhbD4ga2luZCBpcyBpbiB0aGUgYWN0 aXZlCisgICAgICAgIGZpbHRlciwgdGhlIGtpbmQgdGhhdCBlbWl0cyB0aGUgcmVmZXJlbmNlZCBp bmRleAorICAgICAgICAoPGxpdGVyYWw+cHJpbWFyeV9rZXk8L2xpdGVyYWw+LCA8bGl0ZXJhbD51 bmlxdWU8L2xpdGVyYWw+LAorICAgICAgICA8bGl0ZXJhbD5leGNsdXNpb248L2xpdGVyYWw+LCBv ciA8bGl0ZXJhbD5pbmRleDwvbGl0ZXJhbD4pIG11c3QKKyAgICAgICAgYWxzbyBiZSBpbiB0aGUg ZmlsdGVyLiAgT3RoZXJ3aXNlIHRoZSBlbWl0dGVkCisgICAgICAgIDxjb21tYW5kPkFMVEVSIFRB QkxFIC4uLiBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYPC9jb21tYW5kPgorICAgICAgICB3 b3VsZCByZWZlcmVuY2UgYW4gaW5kZXggdGhlIHNhbWUgRERMIG5ldmVyIHByb2R1Y2VkLCBhbmQg dGhlCisgICAgICAgIGZ1bmN0aW9uIHJlcG9ydHMgYW4gZXJyb3IgYmVmb3JlIGVtaXR0aW5nIGFu eSBzdGF0ZW1lbnRzLgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgQWxs IHRocmVlIGZvcm1zIG9mIDxjb21tYW5kPkNSRUFURSBUQUJMRTwvY29tbWFuZD4gYXJlIHN1cHBv cnRlZDoKKyAgICAgICAgdGhlIG9yZGluYXJ5IGNvbHVtbi1saXN0IGZvcm0sIHRoZSB0eXBlZC10 YWJsZSBmb3JtCisgICAgICAgICg8bGl0ZXJhbD5PRiA8cmVwbGFjZWFibGU+dHlwZV9uYW1lPC9y ZXBsYWNlYWJsZT48L2xpdGVyYWw+LCB3aXRoCisgICAgICAgIHBlci1jb2x1bW4gPGxpdGVyYWw+ V0lUSCBPUFRJT05TPC9saXRlcmFsPiBvdmVycmlkZXMgZm9yIGxvY2FsCisgICAgICAgIGRlZmF1 bHRzLCA8bGl0ZXJhbD5OT1QgTlVMTDwvbGl0ZXJhbD4sIGFuZCA8bGl0ZXJhbD5DSEVDSzwvbGl0 ZXJhbD4KKyAgICAgICAgY29uc3RyYWludHMpLCBhbmQgdGhlIDxsaXRlcmFsPlBBUlRJVElPTiBP RjwvbGl0ZXJhbD4gZm9ybS4KKyAgICAgICAgPGxpdGVyYWw+VEVNUE9SQVJZPC9saXRlcmFsPiBh bmQgPGxpdGVyYWw+VU5MT0dHRUQ8L2xpdGVyYWw+CisgICAgICAgIHBlcnNpc3RlbmNlIG1vZGVz IGFyZSBlbWl0dGVkIGZyb20KKyAgICAgICAgPHN0cnVjdGZpZWxkPnJlbHBlcnNpc3RlbmNlPC9z dHJ1Y3RmaWVsZD4uICBGb3IgdGVtcG9yYXJ5IHRhYmxlcworICAgICAgICByZWdpc3RlcmVkIGlu IHRoZSBjdXJyZW50IHNlc3Npb24sIHRoZQorICAgICAgICA8bGl0ZXJhbD5PTiBDT01NSVQgREVM RVRFIFJPV1M8L2xpdGVyYWw+IGFuZAorICAgICAgICA8bGl0ZXJhbD5PTiBDT01NSVQgRFJPUDwv bGl0ZXJhbD4gY2xhdXNlcyBhcmUgZW1pdHRlZDsgdGhlIGRlZmF1bHQKKyAgICAgICAgPGxpdGVy YWw+T04gQ09NTUlUIFBSRVNFUlZFIFJPV1M8L2xpdGVyYWw+IGlzIG9taXR0ZWQuCisgICAgICAg PC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBUaGUgZm9sbG93aW5nIHRhYmxlLXJlbGF0 ZWQgb2JqZWN0cyBhcmUgaW50ZW50aW9uYWxseSBvdXRzaWRlIHRoZQorICAgICAgICBzY29wZSBv ZiB0aGlzIGZ1bmN0aW9uIGFuZCBhcmUgbm90IGVtaXR0ZWQ6CisgICAgICAgIDxpdGVtaXplZGxp c3Q+CisgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgIDxl bXBoYXNpcz5TZXF1ZW5jZXM8L2VtcGhhc2lzPiBvd25lZCBieSBzZXJpYWwgY29sdW1ucworICAg ICAgICAgICAoPHR5cGU+c2VyaWFsPC90eXBlPiwgPHR5cGU+Ymlnc2VyaWFsPC90eXBlPiwKKyAg ICAgICAgICAgPHR5cGU+c21hbGxzZXJpYWw8L3R5cGU+KSAmbWRhc2g7c2VxdWVuY2VzIGFyZSBp bmRlcGVuZGVudCBjYXRhbG9nCisgICAgICAgICAgIG9iamVjdHMuICBVc2UgPGZ1bmN0aW9uPnBn X2dldF9zZXF1ZW5jZV9kZGw8L2Z1bmN0aW9uPiAoaWYKKyAgICAgICAgICAgYXZhaWxhYmxlKSBv ciA8cHJvZHVjdG5hbWU+cGdfZHVtcDwvcHJvZHVjdG5hbWU+IHRvIGNhcHR1cmUgdGhlbQorICAg ICAgICAgICBhbG9uZ3NpZGUgdGhlIHRhYmxlLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAg IDwvbGlzdGl0ZW0+CisgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAg ICAgICAgIDxlbXBoYXNpcz5QYXJ0aXRpb24gY2hpbGRyZW4gd2hvc2UgY29sdW1uIG9yZGVyIGRp ZmZlcnMgZnJvbSB0aGUKKyAgICAgICAgICAgcGFyZW50PC9lbXBoYXNpcz4gJm1kYXNoO3RoZSA8 bGl0ZXJhbD5QQVJUSVRJT04gT0Y8L2xpdGVyYWw+IHN5bnRheAorICAgICAgICAgICBjYW4gb25s eSByZXByb2R1Y2UgdGhlIHBhcmVudCdzIGNvbHVtbiBvcmRlci4gIFN1Y2ggcGFydGl0aW9ucwor ICAgICAgICAgICByZXF1aXJlIGEgc3RhbmRhbG9uZSA8Y29tbWFuZD5DUkVBVEUgVEFCTEU8L2Nv bW1hbmQ+IGZvbGxvd2VkIGJ5CisgICAgICAgICAgIDxjb21tYW5kPkFMVEVSIFRBQkxFIC4uLiBB VFRBQ0ggUEFSVElUSU9OPC9jb21tYW5kPiwgd2hpY2gKKyAgICAgICAgICAgPHByb2R1Y3RuYW1l PnBnX2R1bXA8L3Byb2R1Y3RuYW1lPiBwZXJmb3JtcyBhdXRvbWF0aWNhbGx5LgorICAgICAgICAg IDwvcGFyYT4KKyAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICA8bGlzdGl0ZW0+CisgICAg ICAgICAgPHBhcmE+CisgICAgICAgICAgIDxlbXBoYXNpcz5UcmlnZ2VycyBhbmQgcm93LWxldmVs IHNlY3VyaXR5IHBvbGljaWVzPC9lbXBoYXNpcz4gJm1kYXNoOworICAgICAgICAgICByZXNlcnZl ZCBmb3IgZnV0dXJlIHVzZSB3aGVuIHN0YW5kYWxvbmUKKyAgICAgICAgICAgPGZ1bmN0aW9uPnBn X2dldF90cmlnZ2VyX2RkbDwvZnVuY3Rpb24+IGFuZAorICAgICAgICAgICA8ZnVuY3Rpb24+cGdf Z2V0X3BvbGljeV9kZGw8L2Z1bmN0aW9uPiBoZWxwZXJzIGFyZSBhdmFpbGFibGUuCisgICAgICAg ICAgPC9wYXJhPgorICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgIDxsaXN0aXRlbT4KKyAg ICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgPGVtcGhhc2lzPjxjb21tYW5kPkNPTU1FTlQgT048 L2NvbW1hbmQ+IGFuZAorICAgICAgICAgICA8Y29tbWFuZD5HUkFOVDwvY29tbWFuZD4vPGNvbW1h bmQ+UkVWT0tFPC9jb21tYW5kPjwvZW1waGFzaXM+ICZtZGFzaDsKKyAgICAgICAgICAgdGhlc2Ug YXJlIHNlcGFyYXRlIGZyb20gdGhlIHRhYmxlJ3Mgc3RydWN0dXJhbCBEREwgYW5kIGFyZSBub3QK KyAgICAgICAgICAgZW1pdHRlZC4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICA8L2xpc3Rp dGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICA8L3BhcmE+PC9lbnRyeT4KKyAg ICAgIDwvcm93PgogICAgICA8L3Rib2R5PgogICAgIDwvdGdyb3VwPgogICAgPC90YWJsZT4KZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfaW5oZXJpdHMuYyBiL3NyYy9iYWNrZW5k L2NhdGFsb2cvcGdfaW5oZXJpdHMuYwppbmRleCA0Yjk4MDJhYWZjYy4uODk3MTUxYmQ2ZDEgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfaW5oZXJpdHMuYworKysgYi9zcmMvYmFj a2VuZC9jYXRhbG9nL3BnX2luaGVyaXRzLmMKQEAgLTIzNiw2ICsyMzYsOTkgQEAgZmluZF9pbmhl cml0YW5jZV9jaGlsZHJlbl9leHRlbmRlZChPaWQgcGFyZW50cmVsSWQsIGJvb2wgb21pdF9kZXRh Y2hlZCwKIH0KIAogCisvKgorICogZmluZF9pbmhlcml0YW5jZV9wYXJlbnRzCisgKgorICogUmV0 dXJucyBhIGxpc3QgY29udGFpbmluZyB0aGUgT0lEcyBvZiBhbGwgcmVsYXRpb25zIHRoYXQgdGhl IHJlbGF0aW9uIHdpdGgKKyAqIE9JRCAncmVsaWQnIGluaGVyaXRzICpkaXJlY3RseSogZnJvbSwg aW4gaW5oc2Vxbm8gb3JkZXIgKHRoZSBvcmRlciBpbiB3aGljaAorICogdGhleSBzaG91bGQgYXBw ZWFyIGluIGFuIElOSEVSSVRTIGNsYXVzZSkuCisgKgorICogVGhlIHNwZWNpZmllZCBsb2NrIHR5 cGUgaXMgYWNxdWlyZWQgb24gZWFjaCBwYXJlbnQgcmVsYXRpb24gKGJ1dCBub3Qgb24gdGhlCisg KiBnaXZlbiByZWw7IGNhbGxlciBzaG91bGQgYWxyZWFkeSBoYXZlIGxvY2tlZCBpdCkuICBJZiBs b2NrbW9kZSBpcyBOb0xvY2sKKyAqIHRoZW4gbm8gbG9ja3MgYXJlIGFjcXVpcmVkLCBidXQgY2Fs bGVyIG11c3QgYmV3YXJlIG9mIHJhY2UgY29uZGl0aW9ucworICogYWdhaW5zdCBwb3NzaWJsZSBE Uk9QcyBvZiBwYXJlbnQgcmVsYXRpb25zLgorICoKKyAqIFBhcnRpdGlvbiBjaGlsZHJlbiBhbHNv IGhhdmUgYSBwZ19pbmhlcml0cyBlbnRyeSBwb2ludGluZyB0byB0aGUKKyAqIHBhcnRpdGlvbmVk IHBhcmVudDsgY2FsbGVycyB0aGF0IGRpc3Rpbmd1aXNoIElOSEVSSVRTIGZyb20gUEFSVElUSU9O IE9GCisgKiBtdXN0IGNoZWNrIHJlbGlzcGFydGl0aW9uIHRoZW1zZWx2ZXMuCisgKi8KK0xpc3Qg KgorZmluZF9pbmhlcml0YW5jZV9wYXJlbnRzKE9pZCByZWxpZCwgTE9DS01PREUgbG9ja21vZGUp Cit7CisJTGlzdAkgICAqbGlzdCA9IE5JTDsKKwlSZWxhdGlvbglyZWxhdGlvbjsKKwlTeXNTY2Fu RGVzYyBzY2FuOworCVNjYW5LZXlEYXRhIGtleVsxXTsKKwlIZWFwVHVwbGUJaW5oZXJpdHNUdXBs ZTsKKwlPaWQJCQlpbmhwYXJlbnQ7CisJT2lkCQkgICAqb2lkYXJyOworCWludAkJCW1heG9pZHMs CisJCQkJbnVtb2lkcywKKwkJCQlpOworCisJLyoKKwkgKiBTY2FuIHBnX2luaGVyaXRzIHZpYSB0 aGUgKGluaHJlbGlkLCBpbmhzZXFubykgaW5kZXggc28gdGhhdCB0aGUgcm93cworCSAqIGNvbWUg b3V0IGluIGluaHNlcW5vIG9yZGVyLCB3aGljaCBpcyB0aGUgb3JkZXIgcmVxdWlyZWQgZm9yIHRo ZQorCSAqIElOSEVSSVRTIGNsYXVzZS4KKwkgKi8KKwltYXhvaWRzID0gODsKKwlvaWRhcnIgPSAo T2lkICopIHBhbGxvYyhtYXhvaWRzICogc2l6ZW9mKE9pZCkpOworCW51bW9pZHMgPSAwOworCisJ cmVsYXRpb24gPSB0YWJsZV9vcGVuKEluaGVyaXRzUmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2Nr KTsKKworCVNjYW5LZXlJbml0KCZrZXlbMF0sCisJCQkJQW51bV9wZ19pbmhlcml0c19pbmhyZWxp ZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJT2JqZWN0SWRHZXRE YXR1bShyZWxpZCkpOworCisJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2NhbihyZWxhdGlvbiwgSW5o ZXJpdHNSZWxpZFNlcW5vSW5kZXhJZCwgdHJ1ZSwKKwkJCQkJCQkgIE5VTEwsIDEsIGtleSk7CisK Kwl3aGlsZSAoKGluaGVyaXRzVHVwbGUgPSBzeXN0YWJsZV9nZXRuZXh0KHNjYW4pKSAhPSBOVUxM KQorCXsKKwkJaW5ocGFyZW50ID0gKChGb3JtX3BnX2luaGVyaXRzKSBHRVRTVFJVQ1QoaW5oZXJp dHNUdXBsZSkpLT5pbmhwYXJlbnQ7CisJCWlmIChudW1vaWRzID49IG1heG9pZHMpCisJCXsKKwkJ CW1heG9pZHMgKj0gMjsKKwkJCW9pZGFyciA9IChPaWQgKikgcmVwYWxsb2Mob2lkYXJyLCBtYXhv aWRzICogc2l6ZW9mKE9pZCkpOworCQl9CisJCW9pZGFycltudW1vaWRzKytdID0gaW5ocGFyZW50 OworCX0KKworCXN5c3RhYmxlX2VuZHNjYW4oc2Nhbik7CisKKwl0YWJsZV9jbG9zZShyZWxhdGlv biwgQWNjZXNzU2hhcmVMb2NrKTsKKworCS8qCisJICogQWNxdWlyZSBsb2NrcyBhbmQgYnVpbGQg dGhlIHJlc3VsdCBsaXN0LiAgVW5saWtlCisJICogZmluZF9pbmhlcml0YW5jZV9jaGlsZHJlbiB3 ZSBkbyAqbm90KiBzb3J0IGJ5IE9JRDogY2FsbGVycyBuZWVkIHRoZQorCSAqIHNlcW5vLW9yZGVy ZWQgdHJhdmVyc2FsLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBudW1vaWRzOyBpKyspCisJewor CQlpbmhwYXJlbnQgPSBvaWRhcnJbaV07CisKKwkJaWYgKGxvY2ttb2RlICE9IE5vTG9jaykKKwkJ eworCQkJTG9ja1JlbGF0aW9uT2lkKGluaHBhcmVudCwgbG9ja21vZGUpOworCisJCQlpZiAoIVNl YXJjaFN5c0NhY2hlRXhpc3RzMShSRUxPSUQsIE9iamVjdElkR2V0RGF0dW0oaW5ocGFyZW50KSkp CisJCQl7CisJCQkJVW5sb2NrUmVsYXRpb25PaWQoaW5ocGFyZW50LCBsb2NrbW9kZSk7CisJCQkJ Y29udGludWU7CisJCQl9CisJCX0KKworCQlsaXN0ID0gbGFwcGVuZF9vaWQobGlzdCwgaW5ocGFy ZW50KTsKKwl9CisKKwlwZnJlZShvaWRhcnIpOworCisJcmV0dXJuIGxpc3Q7Cit9CisKKwogLyoK ICAqIGZpbmRfYWxsX2luaGVyaXRvcnMgLQogICoJCVJldHVybnMgYSBsaXN0IG9mIHJlbGF0aW9u IE9JRHMgaW5jbHVkaW5nIHRoZSBnaXZlbiByZWwgcGx1cwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvdGFibGVjbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMu YwppbmRleCBjYjkzYzNlOTM1YS4uNWY0ZWMwMTIyZjYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL3RhYmxlY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21k cy5jCkBAIC03NDcsNyArNzQ3LDYgQEAgc3RhdGljIE9iamVjdEFkZHJlc3MgQVRFeGVjU2V0Q29t cHJlc3Npb24oUmVsYXRpb24gcmVsLAogCQkJCQkJCQkJCSAgY29uc3QgY2hhciAqY29sdW1uLCBO b2RlICpuZXdWYWx1ZSwgTE9DS01PREUgbG9ja21vZGUpOwogCiBzdGF0aWMgdm9pZCBpbmRleF9j b3B5X2RhdGEoUmVsYXRpb24gcmVsLCBSZWxGaWxlTG9jYXRvciBuZXdybG9jYXRvcik7Ci1zdGF0 aWMgY29uc3QgY2hhciAqc3RvcmFnZV9uYW1lKGNoYXIgYyk7CiAKIHN0YXRpYyB2b2lkIFJhbmdl VmFyQ2FsbGJhY2tGb3JEcm9wUmVsYXRpb24oY29uc3QgUmFuZ2VWYXIgKnJlbCwgT2lkIHJlbE9p ZCwKIAkJCQkJCQkJCQkJT2lkIG9sZFJlbE9pZCwgdm9pZCAqYXJnKTsKQEAgLTI1MjUsNyArMjUy NCw3IEBAIHRydW5jYXRlX2NoZWNrX2FjdGl2aXR5KFJlbGF0aW9uIHJlbCkKICAqIHN0b3JhZ2Vf bmFtZQogICoJICByZXR1cm5zIHRoZSBuYW1lIGNvcnJlc3BvbmRpbmcgdG8gYSB0eXBzdG9yYWdl L2F0dHN0b3JhZ2UgZW51bSB2YWx1ZQogICovCi1zdGF0aWMgY29uc3QgY2hhciAqCitjb25zdCBj aGFyICoKIHN0b3JhZ2VfbmFtZShjaGFyIGMpCiB7CiAJc3dpdGNoIChjKQpAQCAtMjAwMTMsNiAr MjAwMTIsMzMgQEAgcmVtb3ZlX29uX2NvbW1pdF9hY3Rpb24oT2lkIHJlbGlkKQogCX0KIH0KIAor LyoKKyAqIExvb2sgdXAgdGhlIHJlZ2lzdGVyZWQgT04gQ09NTUlUIGFjdGlvbiBmb3IgYSByZWxh dGlvbi4KKyAqCisgKiBSZXR1cm5zIE9OQ09NTUlUX05PT1Agd2hlbiBub3RoaW5nIHdhcyByZWdp c3RlcmVkLCB3aGljaCBhbHNvIGNvdmVycworICogdGVtcG9yYXJ5IHRhYmxlcyBjcmVhdGVkIHdp dGggdGhlIGRlZmF1bHQgT04gQ09NTUlUIFBSRVNFUlZFIFJPV1MKKyAqIGJlaGF2aW9yIChyZWdp c3Rlcl9vbl9jb21taXRfYWN0aW9uKCkgc2tpcHMgdGhvc2UsIHNpbmNlIG5vIGFjdGlvbiBpcwor ICogbmVlZGVkIGF0IGNvbW1pdCkuICBFbnRyaWVzIG1hcmtlZCBmb3IgZGVsZXRpb24gaW4gdGhl IGN1cnJlbnQKKyAqIHRyYW5zYWN0aW9uIGFyZSBpZ25vcmVkLgorICovCitPbkNvbW1pdEFjdGlv bgorZ2V0X29uX2NvbW1pdF9hY3Rpb24oT2lkIHJlbGlkKQoreworCUxpc3RDZWxsICAgKmw7CisK Kwlmb3JlYWNoKGwsIG9uX2NvbW1pdHMpCisJeworCQlPbkNvbW1pdEl0ZW0gKm9jID0gKE9uQ29t bWl0SXRlbSAqKSBsZmlyc3QobCk7CisKKwkJaWYgKG9jLT5yZWxpZCAhPSByZWxpZCkKKwkJCWNv bnRpbnVlOworCQlpZiAob2MtPmRlbGV0aW5nX3N1YmlkICE9IEludmFsaWRTdWJUcmFuc2FjdGlv bklkKQorCQkJY29udGludWU7CisJCXJldHVybiBvYy0+b25jb21taXQ7CisJfQorCXJldHVybiBP TkNPTU1JVF9OT09QOworfQorCiAvKgogICogUGVyZm9ybSBPTiBDT01NSVQgYWN0aW9ucy4KICAq CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvZGRsdXRpbHMuYyBiL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9kZGx1dGlscy5jCmluZGV4IGE3MGYxYzI4NjU1Li5lNjU2MzNmNmZkZSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2RkbHV0aWxzLmMKKysrIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L2RkbHV0aWxzLmMKQEAgLTUsNyArNSw3IEBACiAgKgogICogVGhpcyBm aWxlIGNvbnRhaW5zIHRoZSBwZ19nZXRfKl9kZGwgZmFtaWx5IG9mIGZ1bmN0aW9ucyB0aGF0IGdl bmVyYXRlCiAgKiBEREwgc3RhdGVtZW50cyB0byByZWNyZWF0ZSBkYXRhYmFzZSBvYmplY3RzIHN1 Y2ggYXMgcm9sZXMsIHRhYmxlc3BhY2VzLAotICogYW5kIGRhdGFiYXNlcywgYWxvbmcgd2l0aCBj b21tb24gaW5mcmFzdHJ1Y3R1cmUgZm9yIG9wdGlvbiBwYXJzaW5nIGFuZAorICogZGF0YWJhc2Vz LCBhbmQgdGFibGVzLCBhbG9uZyB3aXRoIGNvbW1vbiBpbmZyYXN0cnVjdHVyZSBmb3IKICAqIHBy ZXR0eS1wcmludGluZy4KICAqCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNiwg UG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKQEAgLTIxLDMwICsyMSw5MiBAQAog I2luY2x1ZGUgImFjY2Vzcy9nZW5hbS5oIgogI2luY2x1ZGUgImFjY2Vzcy9odHVwX2RldGFpbHMu aCIKICNpbmNsdWRlICJhY2Nlc3MvdGFibGUuaCIKKyNpbmNsdWRlICJhY2Nlc3MvdG9hc3RfY29t cHJlc3Npb24uaCIKKyNpbmNsdWRlICJjYXRhbG9nL25hbWVzcGFjZS5oIgorI2luY2x1ZGUgImNh dGFsb2cvcGFydGl0aW9uLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19hbS5oIgogI2luY2x1ZGUg ImNhdGFsb2cvcGdfYXV0aF9tZW1iZXJzLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19hdXRoaWQu aCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2NsYXNzLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19j b2xsYXRpb24uaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2NvbnN0cmFpbnQuaCIKICNpbmNsdWRl ICJjYXRhbG9nL3BnX2RhdGFiYXNlLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19kYl9yb2xlX3Nl dHRpbmcuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2luZGV4LmgiCisjaW5jbHVkZSAiY2F0YWxv Zy9wZ19pbmhlcml0cy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfcG9saWN5LmgiCisjaW5jbHVk ZSAiY2F0YWxvZy9wZ19yZXdyaXRlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19zZXF1ZW5jZS5o IgorI2luY2x1ZGUgImNhdGFsb2cvcGdfc3RhdGlzdGljX2V4dC5oIgogI2luY2x1ZGUgImNhdGFs b2cvcGdfdGFibGVzcGFjZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdHJpZ2dlci5oIgorI2lu Y2x1ZGUgInJld3JpdGUvcmV3cml0ZURlZmluZS5oIgorI2luY2x1ZGUgImNvbW1hbmRzL2RlZnJl bS5oIgorI2luY2x1ZGUgImNvbW1hbmRzL3RhYmxlY21kcy5oIgogI2luY2x1ZGUgImNvbW1hbmRz L3RhYmxlc3BhY2UuaCIKLSNpbmNsdWRlICJjb21tb24vcmVscGF0aC5oIgogI2luY2x1ZGUgImZ1 bmNhcGkuaCIKICNpbmNsdWRlICJtYi9wZ193Y2hhci5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5o IgogI2luY2x1ZGUgInV0aWxzL2FjbC5oIgorI2luY2x1ZGUgInV0aWxzL2FycmF5LmgiCiAjaW5j bHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9kYXRldGltZS5oIgogI2lu Y2x1ZGUgInV0aWxzL2ZtZ3JvaWRzLmgiCiAjaW5jbHVkZSAidXRpbHMvZ3VjLmgiCiAjaW5jbHVk ZSAidXRpbHMvbHN5c2NhY2hlLmgiCi0jaW5jbHVkZSAidXRpbHMvcGdfbG9jYWxlLmgiCiAjaW5j bHVkZSAidXRpbHMvcmVsLmgiCiAjaW5jbHVkZSAidXRpbHMvcnVsZXV0aWxzLmgiCiAjaW5jbHVk ZSAidXRpbHMvc3lzY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy90aW1lc3RhbXAuaCIKICNpbmNs dWRlICJ1dGlscy92YXJsZW5hLmgiCiAKKy8qCisgKiBPYmplY3QtY2xhc3Mga2luZHMgdGhhdCB0 aGUgb25seSAvIGV4Y2VwdCBvcHRpb25zIG9uCisgKiBwZ19nZXRfdGFibGVfZGRsIGNhbiBmaWx0 ZXIgb24uICBNZW1iZXJzIGFyZSBzdG9yZWQgYXMgaW50ZWdlcnMgaW4gYQorICogQml0bWFwc2V0 IG9uIFRhYmxlRGRsQ29udGV4dC4gIEtlZXAgdGFibGVfZGRsX2tpbmRfbmFtZXNbXSBpbiBzeW5j CisgKiB3aXRoIHRoZSBvcmRlciBvZiBhZGRpdGlvbnMgaGVyZS4KKyAqLwordHlwZWRlZiBlbnVt IFRhYmxlRGRsS2luZAoreworCVRBQkxFX0RETF9LSU5EX1RBQkxFLAorCVRBQkxFX0RETF9LSU5E X0lOREVYLAorCVRBQkxFX0RETF9LSU5EX1BSSU1BUllfS0VZLAorCVRBQkxFX0RETF9LSU5EX1VO SVFVRSwKKwlUQUJMRV9ERExfS0lORF9DSEVDSywKKwlUQUJMRV9ERExfS0lORF9GT1JFSUdOX0tF WSwKKwlUQUJMRV9ERExfS0lORF9FWENMVVNJT04sCisJVEFCTEVfRERMX0tJTkRfUlVMRSwKKwlU QUJMRV9ERExfS0lORF9TVEFUSVNUSUNTLAorCVRBQkxFX0RETF9LSU5EX1RSSUdHRVIsCisJVEFC TEVfRERMX0tJTkRfUE9MSUNZLAorCVRBQkxFX0RETF9LSU5EX1JMUywKKwlUQUJMRV9ERExfS0lO RF9SRVBMSUNBX0lERU5USVRZLAorCVRBQkxFX0RETF9LSU5EX1BBUlRJVElPTiwKK30JCQlUYWJs ZURkbEtpbmQ7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QKK3sKKwljb25zdCBjaGFyICpuYW1lOwor CVRhYmxlRGRsS2luZCBraW5kOworfQkJCXRhYmxlX2RkbF9raW5kX25hbWVzW10gPQoreworCXsi dGFibGUiLCBUQUJMRV9ERExfS0lORF9UQUJMRX0sCisJeyJpbmRleCIsIFRBQkxFX0RETF9LSU5E X0lOREVYfSwKKwl7InByaW1hcnlfa2V5IiwgVEFCTEVfRERMX0tJTkRfUFJJTUFSWV9LRVl9LAor CXsidW5pcXVlIiwgVEFCTEVfRERMX0tJTkRfVU5JUVVFfSwKKwl7ImNoZWNrIiwgVEFCTEVfRERM X0tJTkRfQ0hFQ0t9LAorCXsiZm9yZWlnbl9rZXkiLCBUQUJMRV9ERExfS0lORF9GT1JFSUdOX0tF WX0sCisJeyJleGNsdXNpb24iLCBUQUJMRV9ERExfS0lORF9FWENMVVNJT059LAorCXsicnVsZSIs IFRBQkxFX0RETF9LSU5EX1JVTEV9LAorCXsic3RhdGlzdGljcyIsIFRBQkxFX0RETF9LSU5EX1NU QVRJU1RJQ1N9LAorCXsidHJpZ2dlciIsIFRBQkxFX0RETF9LSU5EX1RSSUdHRVJ9LAorCXsicG9s aWN5IiwgVEFCTEVfRERMX0tJTkRfUE9MSUNZfSwKKwl7InJscyIsIFRBQkxFX0RETF9LSU5EX1JM U30sCisJeyJyZXBsaWNhX2lkZW50aXR5IiwgVEFCTEVfRERMX0tJTkRfUkVQTElDQV9JREVOVElU WX0sCisJeyJwYXJ0aXRpb24iLCBUQUJMRV9ERExfS0lORF9QQVJUSVRJT059LAorfTsKKworc3Rh dGljIEJpdG1hcHNldCAqcGFyc2Vfa2luZF9hcnJheShjb25zdCBjaGFyICpwYXJhbW5hbWUsIEFy cmF5VHlwZSAqYXJyKTsKIHN0YXRpYyB2b2lkIGFwcGVuZF9kZGxfb3B0aW9uKFN0cmluZ0luZm8g YnVmLCBib29sIHByZXR0eSwgaW50IGluZGVudCwKIAkJCQkJCQkgIGNvbnN0IGNoYXIgKmZtdCwg Li4uKQogCQkJcGdfYXR0cmlidXRlX3ByaW50Zig0LCA1KTsKQEAgLTU3LDYgKzExOSwxOTYgQEAg c3RhdGljIERhdHVtIHBnX2dldF90YWJsZXNwYWNlX2RkbF9zcmYoRnVuY3Rpb25DYWxsSW5mbyBm Y2luZm8sIE9pZCB0c2lkKTsKIHN0YXRpYyBMaXN0ICpwZ19nZXRfZGF0YWJhc2VfZGRsX2ludGVy bmFsKE9pZCBkYmlkLCBib29sIHByZXR0eSwKIAkJCQkJCQkJCQkgIGJvb2wgbm9fb3duZXIsIGJv b2wgbm9fdGFibGVzcGFjZSk7CiAKKy8qCisgKiBQZXItY29sdW1uIGNhY2hlIG9mIGxvY2FsbHkt ZGVjbGFyZWQgTk9UIE5VTEwgY29uc3RyYWludHMuICBCdWlsdCBvbmNlCisgKiBieSBjb2xsZWN0 X2xvY2FsX25vdF9udWxsKCkgYW5kIGNvbnN1bHRlZCBieSB0aGUgY29sdW1uLWVtaXQgaGVscGVy cworICogYW5kIHRoZSBwb3N0LUNSRUFURSBjb25zdHJhaW50IGxvb3AuICBFbnRyaWVzIHdpdGgg Y29ub2lkID09IEludmFsaWRPaWQKKyAqIG1lYW4gdGhlIGNvbHVtbiBoYXMgbm8gbG9jYWwgTk9U IE5VTEwgY29uc3RyYWludCByb3cgaW4gcGdfY29uc3RyYWludAorICogKHRoZSBjb2x1bW4gbWF5 IHN0aWxsIGhhdmUgYXR0bm90bnVsbD10cnVlIG9uIGEgcHJlLVBHLTE4LXVwZ3JhZGVkCisgKiBj YXRhbG9nLCBpbiB3aGljaCBjYXNlIGVtaXQgcGxhaW4gaW5saW5lIE5PVCBOVUxMKS4KKyAqCisg KiBpbmhlcml0ZWRfbm90bnVsbCBpcyBzZXQgd2hlbiBhIE5PVCBOVUxMIGNvbnN0cmFpbnQgcm93 IGV4aXN0cyBpbgorICogcGdfY29uc3RyYWludCBidXQgY29uaXNsb2NhbD1mYWxzZSAocHVyZWx5 IGluaGVyaXRlZCkuICBJbiB0aGF0IGNhc2UKKyAqIHRoZSBOT1QgTlVMTCBtdXN0IG5vdCBiZSBl bWl0dGVkIGluIHRoZSBjb2x1bW4gbGlzdDogdGhlIElOSEVSSVRTIC8KKyAqIFBBUlRJVElPTiBP RiBjbGF1c2UgYWxyZWFkeSBwcm9wYWdhdGVzIGl0LCBhbmQgZW1pdHRpbmcgaXQgaGVyZSB3b3Vs ZAorICogZmxpcCBjb25pc2xvY2FsIHRvIHRydWUgb24gcmVwbGF5LgorICovCit0eXBlZGVmIHN0 cnVjdCBMb2NhbE5vdE51bGxFbnRyeQoreworCU9pZAkJCWNvbm9pZDsKKwljaGFyCSAgICpuYW1l OworCWJvb2wJCWlzX2F1dG87CQkvKiBtYXRjaGVzICI8dGFibGU+Xzxjb2w+X25vdF9udWxsIiAq LworCWJvb2wJCW5vX2luaGVyaXQ7CisJYm9vbAkJaW5oZXJpdGVkX25vdG51bGw7CS8qIHJvdyBl eGlzdHMgYnV0IGNvbmlzbG9jYWw9ZmFsc2UgKi8KK30JCQlMb2NhbE5vdE51bGxFbnRyeTsKKwor LyoKKyAqIFdvcmtpbmcgY29udGV4dCB0aHJlYWRlZCB0aHJvdWdoIHRoZSBwZXItcGFzcyBoZWxw ZXJzIGJlbG93LiAgSW5wdXRzCisgKiAoY2FsbGVyLXByb3ZpZGVkIG9wdGlvbiBmbGFncykgYXJl IGZpbGxlZCBpbiBvbmNlIGF0IHRoZSB0b3Agb2YKKyAqIHBnX2dldF90YWJsZV9kZGxfaW50ZXJu YWwgYW5kIHRyZWF0ZWQgYXMgcmVhZC1vbmx5IHRoZXJlYWZ0ZXIuICBEZXJpdmVkCisgKiBmaWVs ZHMgKHF1YWxuYW1lLCBubl9lbnRyaWVzLCBza2lwX25vdG51bGxfb2lkcykgYXJlIGNvbXB1dGVk IG9uY2UKKyAqIGR1cmluZyBzZXR1cC4gIEVhY2ggcGFzcyBhcHBlbmRzIHRvIGN0eC0+YnVmIGFu ZCBwdXNoZXMgdGhlIGZpbmlzaGVkCisgKiBzdGF0ZW1lbnQgb250byBjdHgtPnN0YXRlbWVudHMg dmlhIGFwcGVuZF9zdG10KCkuCisgKi8KK3R5cGVkZWYgc3RydWN0IFRhYmxlRGRsQ29udGV4dAor eworCVJlbGF0aW9uCXJlbDsKKwlPaWQJCQlyZWxpZDsKKwlib29sCQlwcmV0dHk7CisJYm9vbAkJ bm9fb3duZXI7CisJYm9vbAkJbm9fdGFibGVzcGFjZTsKKwlib29sCQlzY2hlbWFfcXVhbGlmaWVk OworCisJLyoKKwkgKiBPYmplY3QtY2xhc3MgZmlsdGVyaW5nLiAgSWYgb25seV9raW5kcyBpcyBu b24tTlVMTCwgb25seSB0aGUKKwkgKiBraW5kcyBpbiB0aGF0IHNldCBhcmUgZW1pdHRlZDsgaWYg ZXhjZXB0X2tpbmRzIGlzIG5vbi1OVUxMLCBhbGwKKwkgKiBraW5kcyAqZXhjZXB0KiB0aG9zZSBp biB0aGF0IHNldCBhcmUgZW1pdHRlZDsgaWYgYm90aCBhcmUgTlVMTCwKKwkgKiBldmVyeSBraW5k IGlzIGVtaXR0ZWQgKHRoZSBkZWZhdWx0KS4gIFRoZSB0d28gYXJlIG11dHVhbGx5CisJICogZXhj bHVzaXZlIGF0IHRoZSB1c2VyLWZhY2luZyBsYXllciAodGhlIFNSRiBlbnRyeSByZWplY3RzCisJ ICogc3BlY2lmeWluZyBib3RoKS4KKwkgKi8KKwlCaXRtYXBzZXQgICpvbmx5X2tpbmRzOworCUJp dG1hcHNldCAgKmV4Y2VwdF9raW5kczsKKworCS8qIERlcml2ZWQgZHVyaW5nIHNldHVwICovCisJ T2lkCQkJYmFzZV9uYW1lc3BhY2U7CisJY2hhcgkgICAqcXVhbG5hbWU7CisJaW50CQkJc2F2ZV9u ZXN0bGV2ZWw7IC8qID49IDAgaWYgd2UgbmFycm93ZWQgc2VhcmNoX3BhdGggKi8KKwlMb2NhbE5v dE51bGxFbnRyeSAqbm5fZW50cmllczsKKwlMaXN0CSAgICpza2lwX25vdG51bGxfb2lkczsKKwor CS8qIE11dGFibGUgd29ya2luZyBzdGF0ZSAqLworCVN0cmluZ0luZm9EYXRhIGJ1ZjsKKwlMaXN0 CSAgICpzdGF0ZW1lbnRzOworfQkJCVRhYmxlRGRsQ29udGV4dDsKKworc3RhdGljIExpc3QgKnBn X2dldF90YWJsZV9kZGxfaW50ZXJuYWwoVGFibGVEZGxDb250ZXh0ICpjdHgpOworc3RhdGljIGJv b2wgaXNfa2luZF9pbmNsdWRlZChjb25zdCBUYWJsZURkbENvbnRleHQgKmN0eCwgVGFibGVEZGxL aW5kIGtpbmQpOworc3RhdGljIHZvaWQgYXBwZW5kX2NvbHVtbl9kZWZzKFN0cmluZ0luZm8gYnVm LCBSZWxhdGlvbiByZWwsIGJvb2wgcHJldHR5LAorCQkJCQkJCSAgIGJvb2wgaW5jbHVkZV9jaGVj aywKKwkJCQkJCQkgICBib29sIHNjaGVtYV9xdWFsaWZpZWQsCisJCQkJCQkJICAgTG9jYWxOb3RO dWxsRW50cnkgKm5uX2VudHJpZXMpOworc3RhdGljIHZvaWQgYXBwZW5kX3R5cGVkX2NvbHVtbl9v dmVycmlkZXMoU3RyaW5nSW5mbyBidWYsIFJlbGF0aW9uIHJlbCwKKwkJCQkJCQkJCQkgIGJvb2wg cHJldHR5LCBib29sIGluY2x1ZGVfY2hlY2ssCisJCQkJCQkJCQkJICBMb2NhbE5vdE51bGxFbnRy eSAqbm5fZW50cmllcyk7CitzdGF0aWMgdm9pZCBhcHBlbmRfaW5saW5lX2NoZWNrX2NvbnN0cmFp bnRzKFN0cmluZ0luZm8gYnVmLCBSZWxhdGlvbiByZWwsCisJCQkJCQkJCQkJCWJvb2wgcHJldHR5 LCBib29sICpmaXJzdCk7CitzdGF0aWMgY2hhciAqZmluZF9hdHRyZGVmX3RleHQoUmVsYXRpb24g cmVsLCBBdHRyTnVtYmVyIGF0dG51bSwKKwkJCQkJCQkgICBMaXN0ICoqZHBjb250ZXh0KTsKK3N0 YXRpYyBib29sIGNoaWxkX2RlZmF1bHRfaW5oZXJpdGVkX2Zyb21fcGFyZW50KE9pZCBjaGlsZE9p ZCwKKwkJCQkJCQkJCQkJCSBjb25zdCBjaGFyICphdHRuYW1lLAorCQkJCQkJCQkJCQkJIGNvbnN0 IGNoYXIgKmNoaWxkX2FkYmluKTsKK3N0YXRpYyBjaGFyICpsb29rdXBfcmVsbmFtZV9mb3JfZW1p dChPaWQgcmVsaWQsIGJvb2wgc2NoZW1hX3F1YWxpZmllZCwKKwkJCQkJCQkJCSBPaWQgYmFzZV9u YW1lc3BhY2UpOworc3RhdGljIExvY2FsTm90TnVsbEVudHJ5ICpjb2xsZWN0X2xvY2FsX25vdF9u dWxsKFJlbGF0aW9uIHJlbCwKKwkJCQkJCQkJCQkJCSAgTGlzdCAqKnNraXBfb2lkcyk7CitzdGF0 aWMgYm9vbCBwYXJlbnRfaGFzX2RlZmF1bHRfZm9yX2NvbChPaWQgY2hpbGRPaWQsIGNvbnN0IGNo YXIgKmF0dG5hbWUpOworCitzdGF0aWMgdm9pZCBhcHBlbmRfc3RtdChUYWJsZURkbENvbnRleHQg KmN0eCk7CitzdGF0aWMgdm9pZCBlbWl0X2NyZWF0ZV90YWJsZV9zdG10KFRhYmxlRGRsQ29udGV4 dCAqY3R4KTsKK3N0YXRpYyB2b2lkIGVtaXRfb3duZXJfc3RtdChUYWJsZURkbENvbnRleHQgKmN0 eCk7CitzdGF0aWMgdm9pZCBlbWl0X2NoaWxkX2RlZmF1bHRfb3ZlcnJpZGVzKFRhYmxlRGRsQ29u dGV4dCAqY3R4KTsKK3N0YXRpYyB2b2lkIGVtaXRfYXR0b3B0aW9ucyhUYWJsZURkbENvbnRleHQg KmN0eCk7CitzdGF0aWMgdm9pZCBlbWl0X3R5cGVkX2NvbHVtbl9zdG9yYWdlKFRhYmxlRGRsQ29u dGV4dCAqY3R4KTsKK3N0YXRpYyB2b2lkIGVtaXRfaW5kZXhlcyhUYWJsZURkbENvbnRleHQgKmN0 eCk7CitzdGF0aWMgdm9pZCBlbWl0X2NsdXN0ZXJfb24oVGFibGVEZGxDb250ZXh0ICpjdHgpOwor c3RhdGljIHZvaWQgZW1pdF9sb2NhbF9jb25zdHJhaW50cyhUYWJsZURkbENvbnRleHQgKmN0eCk7 CitzdGF0aWMgdm9pZCBlbWl0X3J1bGVzKFRhYmxlRGRsQ29udGV4dCAqY3R4KTsKK3N0YXRpYyB2 b2lkIGVtaXRfc3RhdGlzdGljcyhUYWJsZURkbENvbnRleHQgKmN0eCk7CitzdGF0aWMgdm9pZCBl bWl0X3JlcGxpY2FfaWRlbnRpdHkoVGFibGVEZGxDb250ZXh0ICpjdHgpOworc3RhdGljIHZvaWQg ZW1pdF9ybHNfdG9nZ2xlcyhUYWJsZURkbENvbnRleHQgKmN0eCk7CitzdGF0aWMgdm9pZCBlbWl0 X3BhcnRpdGlvbl9jaGlsZHJlbihUYWJsZURkbENvbnRleHQgKmN0eCk7CisKKworLyoKKyAqIHBh cnNlX2tpbmRfYXJyYXkKKyAqCQlQYXJzZSBhIHRleHRbXSBvZiBvYmplY3QtY2xhc3Mga2luZCBu YW1lcyBpbnRvIGEgQml0bWFwc2V0IG9mCisgKgkJVGFibGVEZGxLaW5kIHZhbHVlcy4KKyAqCisg KiBFYWNoIGVsZW1lbnQgaXMgbWF0Y2hlZCBjYXNlLWluc2Vuc2l0aXZlbHk7IHN1cnJvdW5kaW5n IHdoaXRlc3BhY2UgaXMKKyAqIHN0cmlwcGVkLiAgTlVMTCBlbGVtZW50cyBhcmUgcmVqZWN0ZWQu ICBVbmtub3duIGtpbmQgbmFtZXMgcmFpc2UgYW4gZXJyb3IKKyAqIGNpdGluZyB0aGUgc3VwcGxp ZWQgcGFyYW1ldGVyIG5hbWUuICBBbiBlbXB0eSBhcnJheSBpcyBhbHNvIHJlamVjdGVkLgorICog RHVwbGljYXRlIGVudHJpZXMgYXJlIHNpbGVudGx5IGRlLWR1cGxpY2F0ZWQgYnkgdGhlIEJpdG1h cHNldC4KKyAqLworc3RhdGljIEJpdG1hcHNldCAqCitwYXJzZV9raW5kX2FycmF5KGNvbnN0IGNo YXIgKnBhcmFtbmFtZSwgQXJyYXlUeXBlICphcnIpCit7CisJRGF0dW0JICAgKmVsZW1zOworCWJv b2wJICAgKm51bGxzOworCWludAkJCW5lbGVtczsKKwlCaXRtYXBzZXQgICpyZXN1bHQgPSBOVUxM OworCisJZGVjb25zdHJ1Y3RfYXJyYXlfYnVpbHRpbihhcnIsIFRFWFRPSUQsICZlbGVtcywgJm51 bGxzLCAmbmVsZW1zKTsKKworCWlmIChuZWxlbXMgPT0gMCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJ CQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNn KCJwYXJhbWV0ZXIgXCIlc1wiIG11c3Qgc3BlY2lmeSBhdCBsZWFzdCBvbmUga2luZCIsCisJCQkJ CQlwYXJhbW5hbWUpKSk7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IG5lbGVtczsgaSsrKQorCXsK KwkJY2hhcgkgICAqcmF3OworCQljaGFyCSAgICp0b2tlbjsKKwkJY2hhcgkgICAqZW5kOworCQli b29sCQlmb3VuZCA9IGZhbHNlOworCisJCWlmIChudWxsc1tpXSkKKwkJCWVyZXBvcnQoRVJST1Is CisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkg ZXJybXNnKCJwYXJhbWV0ZXIgXCIlc1wiIG11c3Qgbm90IGNvbnRhaW4gTlVMTCBlbGVtZW50cyIs CisJCQkJCQkJcGFyYW1uYW1lKSkpOworCisJCXJhdyA9IHRleHRfdG9fY3N0cmluZyhEYXR1bUdl dFRleHRQUChlbGVtc1tpXSkpOworCisJCS8qIFRyaW0gbGVhZGluZyB3aGl0ZXNwYWNlLiAqLwor CQl0b2tlbiA9IHJhdzsKKwkJd2hpbGUgKCp0b2tlbiA9PSAnICcgfHwgKnRva2VuID09ICdcdCcp CisJCQl0b2tlbisrOworCisJCS8qIFRyaW0gdHJhaWxpbmcgd2hpdGVzcGFjZS4gKi8KKwkJZW5k ID0gdG9rZW4gKyBzdHJsZW4odG9rZW4pOworCQl3aGlsZSAoZW5kID4gdG9rZW4gJiYgKGVuZFst MV0gPT0gJyAnIHx8IGVuZFstMV0gPT0gJ1x0JykpCisJCQllbmQtLTsKKwkJKmVuZCA9ICdcMCc7 CisKKwkJZm9yIChzaXplX3QgaiA9IDA7IGogPCBsZW5ndGhvZih0YWJsZV9kZGxfa2luZF9uYW1l cyk7IGorKykKKwkJeworCQkJaWYgKHBnX3N0cmNhc2VjbXAodG9rZW4sIHRhYmxlX2RkbF9raW5k X25hbWVzW2pdLm5hbWUpID09IDApCisJCQl7CisJCQkJcmVzdWx0ID0gYm1zX2FkZF9tZW1iZXIo cmVzdWx0LAorCQkJCQkJCQkJCShpbnQpIHRhYmxlX2RkbF9raW5kX25hbWVzW2pdLmtpbmQpOwor CQkJCWZvdW5kID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmICghZm91bmQp CisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1F VEVSX1ZBTFVFKSwKKwkJCQkJIGVycm1zZygidW5yZWNvZ25pemVkIGtpbmQgXCIlc1wiIGluIHBh cmFtZXRlciBcIiVzXCIiLAorCQkJCQkJCXRva2VuLCBwYXJhbW5hbWUpKSk7CisKKwkJcGZyZWUo cmF3KTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogaXNfa2luZF9pbmNsdWRl ZAorICoJCURldGVybWluZSB3aGV0aGVyIERETCBmb3IgdGhlIGdpdmVuIG9iamVjdC1jbGFzcyBr aW5kIHNob3VsZCBiZQorICoJCWVtaXR0ZWQgdW5kZXIgdGhlIGN1cnJlbnQgb3B0aW9ucy4KKyAq Lworc3RhdGljIGJvb2wKK2lzX2tpbmRfaW5jbHVkZWQoY29uc3QgVGFibGVEZGxDb250ZXh0ICpj dHgsIFRhYmxlRGRsS2luZCBraW5kKQoreworCWlmIChjdHgtPm9ubHlfa2luZHMgIT0gTlVMTCkK KwkJcmV0dXJuIGJtc19pc19tZW1iZXIoKGludCkga2luZCwgY3R4LT5vbmx5X2tpbmRzKTsKKwlp ZiAoY3R4LT5leGNlcHRfa2luZHMgIT0gTlVMTCkKKwkJcmV0dXJuICFibXNfaXNfbWVtYmVyKChp bnQpIGtpbmQsIGN0eC0+ZXhjZXB0X2tpbmRzKTsKKwlyZXR1cm4gdHJ1ZTsKK30KIAogLyoKICAq IEhlbHBlciB0byBhcHBlbmQgYSBmb3JtYXR0ZWQgc3RyaW5nIHdpdGggb3B0aW9uYWwgcHJldHR5 LXByaW50aW5nLgpAQCAtOTc1LDMgKzEyMjcsMjQwNSBAQCBwZ19nZXRfZGF0YWJhc2VfZGRsKFBH X0ZVTkNUSU9OX0FSR1MpCiAJCVNSRl9SRVRVUk5fRE9ORShmdW5jY3R4KTsKIAl9CiB9CisKKy8q CisgKiBsb29rdXBfcmVsbmFtZV9mb3JfZW1pdAorICoJCVJldHVybiBlaXRoZXIgdGhlIHNjaGVt YS1xdWFsaWZpZWQgb3IgdGhlIGJhcmUgcXVvdGVkIG5hbWUgb2YgYQorICoJCXJlbGF0aW9uLCBk ZXBlbmRpbmcgb24gdGhlIHNjaGVtYV9xdWFsaWZpZWQgZmxhZy4KKyAqCisgKiBUZW1wb3Jhcnkg cmVsYXRpb25zIGFyZSBuZXZlciBzY2hlbWEtcXVhbGlmaWVkIHJlZ2FyZGxlc3Mgb2YKKyAqIHNj aGVtYV9xdWFsaWZpZWQ6IHRoZSBURU1QT1JBUlkga2V5d29yZCBpbiBDUkVBVEUgVEVNUE9SQVJZ IFRBQkxFCisgKiBhbHJlYWR5IHBsYWNlcyB0aGUgdGFibGUgaW4gdGhlIHNlc3Npb24ncyB0ZW1w IHNjaGVtYSwgc28gZW1pdHRpbmcKKyAqIHBnX3RlbXBfTk4ucmVsbmFtZSB3b3VsZCBwcm9kdWNl IERETCB0aGF0IGNhbm5vdCBiZSByZXBsYXllZC4KKyAqCisgKiBXaGVuIHNjaGVtYV9xdWFsaWZp ZWQgaXMgdHJ1ZSB0aGUgc2NoZW1hLXF1YWxpZmllZCBuYW1lIGlzIGFsd2F5cworICogcmV0dXJu ZWQgZm9yIG5vbi10ZW1wb3JhcnkgcmVsYXRpb25zLiAgV2hlbiBmYWxzZSwgdGhlIGJhcmUgcmVs bmFtZQorICogaXMgcmV0dXJuZWQgb25seSBpZiB0aGUgdGFyZ2V0IHJlbGF0aW9uIGxpdmVzIGlu IGJhc2VfbmFtZXNwYWNlICh0aGUKKyAqIG5hbWVzcGFjZSBvZiB0aGUgdGFibGUgd2hvc2UgRERM IGlzIGJlaW5nIGdlbmVyYXRlZCk7IG90aGVyd2lzZSB0aGUKKyAqIHNjaGVtYS1xdWFsaWZpZWQg Zm9ybSBpcyByZXR1cm5lZCwgYmVjYXVzZSBjcm9zcy1zY2hlbWEgcmVmZXJlbmNlcworICogKGZv ciBleGFtcGxlIGFuIGluaGVyaXRhbmNlIHBhcmVudCBvciBmb3JlaWduIGtleSB0YXJnZXQgaW4g YQorICogZGlmZmVyZW50IHNjaGVtYSkgYXJlIG5vdCBzYWZlIHRvIG9taXQuCisgKgorICogVGhp cyByZXBsYWNlcyB0aGUgdW5zYWZlIHBhdHRlcm4KKyAqCSAgcXVvdGVfcXVhbGlmaWVkX2lkZW50 aWZpZXIoZ2V0X25hbWVzcGFjZV9uYW1lKGdldF9yZWxfbmFtZXNwYWNlKG9pZCkpLAorICoJICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfcmVsX25hbWUob2lkKSkKKyAqIHdoaWNoIGRl cmVmZXJlbmNlcyBOVUxMIHdoZW4gYSBjb25jdXJyZW50IHRyYW5zYWN0aW9uIGhhcyBkcm9wcGVk IHRoZQorICogcmVmZXJlbmNlZCByZWxhdGlvbiAob3IgaXRzIHNjaGVtYSkgYmV0d2VlbiB3aGVu IHdlIGNhY2hlZCBpdHMgT0lEIGFuZAorICogd2hlbiB3ZSBhc2sgdGhlIHN5c2NhY2hlIGZvciBp dHMgbmFtZS4gIEhvbGRpbmcgQWNjZXNzU2hhcmVMb2NrIG9uIGEKKyAqIGRlcGVuZGVudCByZWxh dGlvbiBtYWtlcyB0aGlzIHJhY2UgdmFuaXNoaW5nbHkgdW5saWtlbHkgaW4gcHJhY3RpY2UsIGJ1 dAorICogd2Ugc3RpbGwgZGVmZW5kIGFnYWluc3QgaXQgYmVjYXVzZSB0aGUgYWx0ZXJuYXRpdmUg aXMgYSBTSUdTRUdWLgorICoKKyAqIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgcGZyZWUoKWlu ZyB0aGUgcmVzdWx0LgorICovCitzdGF0aWMgY2hhciAqCitsb29rdXBfcmVsbmFtZV9mb3JfZW1p dChPaWQgcmVsaWQsIGJvb2wgc2NoZW1hX3F1YWxpZmllZCwgT2lkIGJhc2VfbmFtZXNwYWNlKQor eworCUhlYXBUdXBsZQl0cDsKKwlGb3JtX3BnX2NsYXNzIHJlbHR1cDsKKwljaGFyCSAgICpuc3Bu YW1lOworCWNoYXIJICAgKnJlc3VsdDsKKworCXRwID0gU2VhcmNoU3lzQ2FjaGUxKFJFTE9JRCwg T2JqZWN0SWRHZXREYXR1bShyZWxpZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0cCkpCisJ CWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9VTkRFRklORURfT0JKRUNUKSwK KwkJCQkgZXJybXNnKCJyZWxhdGlvbiB3aXRoIE9JRCAldSBkb2VzIG5vdCBleGlzdCIsIHJlbGlk KSwKKwkJCQkgZXJyZGV0YWlsKCJJdCBtYXkgaGF2ZSBiZWVuIGNvbmN1cnJlbnRseSBkcm9wcGVk LiIpKSk7CisKKwlyZWx0dXAgPSAoRm9ybV9wZ19jbGFzcykgR0VUU1RSVUNUKHRwKTsKKworCS8q CisJICogVGVtcG9yYXJ5IHJlbGF0aW9ucyBhcmUgbmV2ZXIgc2NoZW1hLXF1YWxpZmllZDogdGhl IFRFTVBPUkFSWSBrZXl3b3JkCisJICogYWxyZWFkeSBwbGFjZXMgdGhlbSBpbiBwZ190ZW1wLCBh bmQgcGdfdGVtcF9OTi5yZWxuYW1lIGNhbm5vdCBiZQorCSAqIHJlcGxheWVkIGluIGFueSBvdGhl ciBzZXNzaW9uLgorCSAqLworCWlmIChpc1RlbXBOYW1lc3BhY2UocmVsdHVwLT5yZWxuYW1lc3Bh Y2UpKQorCXsKKwkJcmVzdWx0ID0gcHN0cmR1cChxdW90ZV9pZGVudGlmaWVyKE5hbWVTdHIocmVs dHVwLT5yZWxuYW1lKSkpOworCQlSZWxlYXNlU3lzQ2FjaGUodHApOworCQlyZXR1cm4gcmVzdWx0 OworCX0KKworCS8qIEJhcmUgbmFtZSBvbmx5IHdoZW4gY2FsbGVyIGFza2VkIGFuZCB0YXJnZXQg aXMgaW4gdGhlIGJhc2UgbmFtZXNwYWNlLiAqLworCWlmICghc2NoZW1hX3F1YWxpZmllZCAmJiBy ZWx0dXAtPnJlbG5hbWVzcGFjZSA9PSBiYXNlX25hbWVzcGFjZSkKKwl7CisJCXJlc3VsdCA9IHBz dHJkdXAocXVvdGVfaWRlbnRpZmllcihOYW1lU3RyKHJlbHR1cC0+cmVsbmFtZSkpKTsKKwkJUmVs ZWFzZVN5c0NhY2hlKHRwKTsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwluc3BuYW1lID0gZ2V0 X25hbWVzcGFjZV9uYW1lKHJlbHR1cC0+cmVsbmFtZXNwYWNlKTsKKwlpZiAobnNwbmFtZSA9PSBO VUxMKQorCXsKKwkJT2lkCQkJbnNwb2lkID0gcmVsdHVwLT5yZWxuYW1lc3BhY2U7CisKKwkJUmVs ZWFzZVN5c0NhY2hlKHRwKTsKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RF X1VOREVGSU5FRF9PQkpFQ1QpLAorCQkJCSBlcnJtc2coInNjaGVtYSB3aXRoIE9JRCAldSBkb2Vz IG5vdCBleGlzdCIsIG5zcG9pZCksCisJCQkJIGVycmRldGFpbCgiSXQgbWF5IGhhdmUgYmVlbiBj b25jdXJyZW50bHkgZHJvcHBlZC4iKSkpOworCX0KKworCXJlc3VsdCA9IHF1b3RlX3F1YWxpZmll ZF9pZGVudGlmaWVyKG5zcG5hbWUsIE5hbWVTdHIocmVsdHVwLT5yZWxuYW1lKSk7CisKKwlwZnJl ZShuc3BuYW1lKTsKKwlSZWxlYXNlU3lzQ2FjaGUodHApOworCisJcmV0dXJuIHJlc3VsdDsKK30K KworLyoKKyAqIGNvbGxlY3RfbG9jYWxfbm90X251bGwKKyAqCQlTY2FuIHBnX2NvbnN0cmFpbnQg b25jZSBmb3IgbG9jYWxseS1kZWNsYXJlZCBOT1QgTlVMTCBjb25zdHJhaW50cworICoJCW9uIHJl bCwgcmV0dXJuaW5nIGEgcGFsbG9jJ2QgYXJyYXkgaW5kZXhlZCBieSBhdHRudW0gKDEuLm5hdHRz KS4KKyAqCisgKiBFbnRyaWVzIHdpdGggY29ub2lkPT1JbnZhbGlkT2lkIG1lYW4gIm5vIGxvY2Fs IE5PVCBOVUxMIHJvdyBmb3IgdGhpcworICogY29sdW1uIi4gIFdoZW4gdGhlIGNvbnN0cmFpbnQg bmFtZSBkb2VzIG5vdCBtYXRjaCB0aGUgYXV0by1nZW5lcmF0ZWQKKyAqIHBhdHRlcm4gIjx0YWJs ZW5hbWU+Xzxjb2x1bW5uYW1lPl9ub3RfbnVsbCIsIHRoZSBjb25zdHJhaW50IE9JRCBpcworICog YXBwZW5kZWQgdG8gKnNraXBfb2lkcyBzbyB0aGUgcG9zdC1DUkVBVEUgY29uc3RyYWludCBsb29w IGNhbiBhdm9pZAorICogcmUtZW1pdHRpbmcgaXQgYXMgQUxURVIgVEFCTEUgLi4uIEFERCBDT05T VFJBSU5UIC0gdGhlIGNvbHVtbi1lbWl0CisgKiBwYXNzIHdpbGwgcHJvZHVjZSBpdCBpbmxpbmUg YXMgIkNPTlNUUkFJTlQgbmFtZSBOT1QgTlVMTCIgaW5zdGVhZC4KKyAqLworc3RhdGljIExvY2Fs Tm90TnVsbEVudHJ5ICoKK2NvbGxlY3RfbG9jYWxfbm90X251bGwoUmVsYXRpb24gcmVsLCBMaXN0 ICoqc2tpcF9vaWRzKQoreworCVR1cGxlRGVzYwl0dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihy ZWwpOworCWludAkJCW5hdHRzID0gdHVwZGVzYy0+bmF0dHM7CisJTG9jYWxOb3ROdWxsRW50cnkg KmVudHJpZXM7CisJY29uc3QgY2hhciAqcmVsbmFtZSA9IFJlbGF0aW9uR2V0UmVsYXRpb25OYW1l KHJlbCk7CisJUmVsYXRpb24JY29uUmVsOworCVN5c1NjYW5EZXNjIGNvblNjYW47CisJU2Nhbktl eURhdGEgY29uS2V5OworCUhlYXBUdXBsZQljb25UdXA7CisKKwllbnRyaWVzID0gKExvY2FsTm90 TnVsbEVudHJ5ICopIHBhbGxvYzAoc2l6ZW9mKExvY2FsTm90TnVsbEVudHJ5KSAqCisJCQkJCQkJ CQkJCShuYXR0cyArIDEpKTsKKworCWNvblJlbCA9IHRhYmxlX29wZW4oQ29uc3RyYWludFJlbGF0 aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJU2NhbktleUluaXQoJmNvbktleSwKKwkJCQlBbnVt X3BnX2NvbnN0cmFpbnRfY29ucmVsaWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09J REVRLAorCQkJCU9iamVjdElkR2V0RGF0dW0oUmVsYXRpb25HZXRSZWxpZChyZWwpKSk7CisJY29u U2NhbiA9IHN5c3RhYmxlX2JlZ2luc2Nhbihjb25SZWwsIENvbnN0cmFpbnRSZWxpZFR5cGlkTmFt ZUluZGV4SWQsCisJCQkJCQkJCSB0cnVlLCBOVUxMLCAxLCAmY29uS2V5KTsKKworCXdoaWxlIChI ZWFwVHVwbGVJc1ZhbGlkKGNvblR1cCA9IHN5c3RhYmxlX2dldG5leHQoY29uU2NhbikpKQorCXsK KwkJRm9ybV9wZ19jb25zdHJhaW50IGNvbiA9IChGb3JtX3BnX2NvbnN0cmFpbnQpIEdFVFNUUlVD VChjb25UdXApOworCQlEYXR1bQkJY29ua2V5RGF0OworCQlib29sCQljb25rZXlOdWxsOworCQlB cnJheVR5cGUgICpjb25rZXlBcnI7CisJCWludDE2CSAgICpjb25rZXlWYWxzOworCQlpbnQJCQlh dHRudW07CisJCUZvcm1fcGdfYXR0cmlidXRlIGF0dDsKKwkJY2hhcgkgICAqYXV0b25hbWU7CisK KwkJaWYgKGNvbi0+Y29udHlwZSAhPSBDT05TVFJBSU5UX05PVE5VTEwpCisJCQljb250aW51ZTsK KworCQljb25rZXlEYXQgPSBoZWFwX2dldGF0dHIoY29uVHVwLCBBbnVtX3BnX2NvbnN0cmFpbnRf Y29ua2V5LAorCQkJCQkJCQkgUmVsYXRpb25HZXREZXNjcihjb25SZWwpLCAmY29ua2V5TnVsbCk7 CisJCWlmIChjb25rZXlOdWxsKQorCQkJY29udGludWU7CisJCWNvbmtleUFyciA9IERhdHVtR2V0 QXJyYXlUeXBlUChjb25rZXlEYXQpOworCisJCS8qCisJCSAqIERlZmVuZCBhZ2FpbnN0IGEgbWFs Zm9ybWVkIGNvbmtleTogYSBOT1QgTlVMTCBjb25zdHJhaW50IGlzIGFsd2F5cworCQkgKiBhIHNp bmdsZS1jb2x1bW4gMS1EIGludDIgYXJyYXksIGJ1dCBhIGNvcnJ1cHRlZCBjYXRhbG9nIG9yIGEg ZnV0dXJlCisJCSAqIHBhdGNoIHRoYXQgc3RvcmVzIHdpZGVyIGNvbmtleXMgbXVzdG4ndCB0cmlw IHVzIGludG8gcmVhZGluZyBwYXN0CisJCSAqIHRoZSBhcnJheSBoZWFkZXIuCisJCSAqLworCQlp ZiAoQVJSX05ESU0oY29ua2V5QXJyKSAhPSAxIHx8CisJCQlBUlJfRElNUyhjb25rZXlBcnIpWzBd IDwgMSB8fAorCQkJQVJSX0hBU05VTEwoY29ua2V5QXJyKSB8fAorCQkJQVJSX0VMRU1UWVBFKGNv bmtleUFycikgIT0gSU5UMk9JRCkKKwkJCWNvbnRpbnVlOworCisJCWNvbmtleVZhbHMgPSAoaW50 MTYgKikgQVJSX0RBVEFfUFRSKGNvbmtleUFycik7CisJCWF0dG51bSA9IGNvbmtleVZhbHNbMF07 CisJCWlmIChhdHRudW0gPCAxIHx8IGF0dG51bSA+IG5hdHRzKQorCQkJY29udGludWU7CisKKwkJ LyoKKwkJICogSW5oZXJpdGVkLW9ubHkgY29uc3RyYWludDogcmVjb3JkIHRoZSBmYWN0IHNvIGNv bHVtbi1lbWl0IGhlbHBlcnMKKwkJICogY2FuIHN1cHByZXNzIGlubGluZSBOT1QgTlVMTCAodGhl IHBhcmVudCdzIElOSEVSSVRTIGNsYXVzZSBhbHJlYWR5CisJCSAqIHByb3BhZ2F0ZXMgaXQ7IHJl LWVtaXR0aW5nIGl0IHdvdWxkIGZsaXAgY29uaXNsb2NhbCB0byB0cnVlIG9uCisJCSAqIHJlcGxh eSkuCisJCSAqLworCQlpZiAoIWNvbi0+Y29uaXNsb2NhbCkKKwkJeworCQkJZW50cmllc1thdHRu dW1dLmluaGVyaXRlZF9ub3RudWxsID0gdHJ1ZTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJYXR0 ID0gVHVwbGVEZXNjQXR0cih0dXBkZXNjLCBhdHRudW0gLSAxKTsKKwkJYXV0b25hbWUgPSBtYWtl T2JqZWN0TmFtZShyZWxuYW1lLCBOYW1lU3RyKGF0dC0+YXR0bmFtZSksICJub3RfbnVsbCIpOwor CisJCWVudHJpZXNbYXR0bnVtXS5jb25vaWQgPSBjb24tPm9pZDsKKwkJZW50cmllc1thdHRudW1d Lm5hbWUgPSBwc3RyZHVwKE5hbWVTdHIoY29uLT5jb25uYW1lKSk7CisJCWVudHJpZXNbYXR0bnVt XS5pc19hdXRvID0gKHN0cmNtcChOYW1lU3RyKGNvbi0+Y29ubmFtZSksIGF1dG9uYW1lKSA9PSAw KTsKKwkJZW50cmllc1thdHRudW1dLm5vX2luaGVyaXQgPSBjb24tPmNvbm5vaW5oZXJpdDsKKwkJ cGZyZWUoYXV0b25hbWUpOworCisJCS8qCisJCSAqIFRyYWNrIHdoaWNoIE5PVCBOVUxMIE9JRHMg bXVzdCBub3QgYmUgcmUtZW1pdHRlZCBvdXQtb2YtbGluZSBieQorCQkgKiBlbWl0X2xvY2FsX2Nv bnN0cmFpbnRzOgorCQkgKgorCQkgKiAtIEZvciBhdHRpc2xvY2FsIGNvbHVtbnM6IHRoZSBpbmxp bmUgcGFzcyBpbiBhcHBlbmRfY29sdW1uX2RlZnMKKwkJICogICBtYXRlcmlhbGl6ZXMgdGhlIGNv bnN0cmFpbnQ7IGEgc2Vjb25kIEFMVEVSIFRBQkxFIHdvdWxkIGNvbGxpZGUuCisJCSAqCisJCSAq IC0gRm9yIGluaGVyaXRlZCBjb2x1bW5zIHdpdGggYSB1c2VyLWRlZmluZWQgbmFtZSAoIWlzX2F1 dG8pOgorCQkgKiAgIGVtaXRfY3JlYXRlX3RhYmxlX3N0bXQgZW1pdHMgdGhlc2UgYXMgdGFibGUt bGV2ZWwgQ09OU1RSQUlOVAorCQkgKiAgIGNsYXVzZXMgaW4gdGhlIENSRUFURSBUQUJMRSBvciBQ QVJUSVRJT04gT0YgYm9keSBzbyB0aGUgbmFtZSBpcworCQkgKiAgIHByZXNlcnZlZCB3aGVuIHRo ZSBpbmhlcml0ZWQgTk9UIE5VTEwgaXMgZXN0YWJsaXNoZWQuICBBbgorCQkgKiAgIG91dC1vZi1s aW5lIEFMVEVSIFRBQkxFIEFERCBDT05TVFJBSU5UIHdvdWxkIGNvbGxpZGUgd2l0aCB0aGUKKwkJ ICogICBhbHJlYWR5LXByb3BhZ2F0ZWQgaW5oZXJpdGVkIE5PVCBOVUxMLgorCQkgKgorCQkgKiAt IEZvciBpbmhlcml0ZWQgY29sdW1ucyB3aXRoIGFuIGF1dG8tbmFtZSBvbiBhIHBhcnRpdGlvbiBj aGlsZDoKKwkJICogICBQQVJUSVRJT04gT0YgcmUtY3JlYXRlcyBhbiBlcXVpdmFsZW50IGNvbnN0 cmFpbnQgKHBvc3NpYmx5IHVuZGVyCisJCSAqICAgdGhlIHBhcmVudC1kZXJpdmVkIG5hbWUpLCBt YWtpbmcgdGhlIG91dC1vZi1saW5lIEFMVEVSIFRBQkxFCisJCSAqICAgcmVkdW5kYW50IGFuZCBj b2xsaXNpb24tcHJvbmUuICBTdXBwcmVzcyBpdDsgdGhlIGF1dG8tbmFtZQorCQkgKiAgIGNoYW5n ZSBpcyBhY2NlcHRhYmxlLgorCQkgKgorCQkgKiBGb3IgaW5oZXJpdGVkIGNvbHVtbnMgd2l0aCBh biBhdXRvLW5hbWUgb24gYSBwbGFpbiBJTkhFUklUUyBjaGlsZCwKKwkJICogdGhlIG91dC1vZi1s aW5lIEFMVEVSIFRBQkxFIGlzIHN0aWxsIHNhZmUgYW5kIHByZXNlcnZlcyB0aGUgbmFtZS4KKwkJ ICovCisJCWlmIChza2lwX29pZHMgIT0gTlVMTCAmJgorCQkJKGF0dC0+YXR0aXNsb2NhbCB8fAor CQkJICFlbnRyaWVzW2F0dG51bV0uaXNfYXV0byB8fAorCQkJIHJlbC0+cmRfcmVsLT5yZWxpc3Bh cnRpdGlvbikpCisJCQkqc2tpcF9vaWRzID0gbGFwcGVuZF9vaWQoKnNraXBfb2lkcywgY29uLT5v aWQpOworCX0KKwlzeXN0YWJsZV9lbmRzY2FuKGNvblNjYW4pOworCXRhYmxlX2Nsb3NlKGNvblJl bCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiBlbnRyaWVzOworfQorCisvKgorICogZmlu ZF9hdHRyZGVmX3RleHQKKyAqCQlSZXR1cm4gdGhlIGRlcGFyc2VkIERFRkFVTFQvR0VORVJBVEVE IGV4cHJlc3Npb24gZm9yIGF0dG51bSBvbiByZWwsCisgKgkJb3IgTlVMTCBpZiBubyBlbnRyeSBl eGlzdHMgaW4gVHVwbGVDb25zdHItPmRlZnZhbC4KKyAqCisgKiBUaGUgY2FsbGVyIHBhc3NlcyBh IExpc3QgKiogc28gdGhhdCB0aGUgZGVwYXJzZSBjb250ZXh0IGlzIGJ1aWx0IGxhemlseQorICog YW5kIHJldXNlZCBhY3Jvc3MgY2FsbHMgKGRlcGFyc2VfY29udGV4dF9mb3IgaXMgbm90IGNoZWFw KS4gIFJldHVybmVkCisgKiBzdHJpbmcgaXMgcGFsbG9jJ2QgaW4gdGhlIGN1cnJlbnQgbWVtb3J5 IGNvbnRleHQ7IGNhbGxlciBwZnJlZSdzIGl0LgorICovCitzdGF0aWMgY2hhciAqCitmaW5kX2F0 dHJkZWZfdGV4dChSZWxhdGlvbiByZWwsIEF0dHJOdW1iZXIgYXR0bnVtLCBMaXN0ICoqZHBjb250 ZXh0KQoreworCVR1cGxlQ29uc3RyICpjb25zdHIgPSBSZWxhdGlvbkdldERlc2NyKHJlbCktPmNv bnN0cjsKKworCWlmIChjb25zdHIgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlmb3IgKGlu dCBqID0gMDsgaiA8IGNvbnN0ci0+bnVtX2RlZnZhbDsgaisrKQorCXsKKwkJaWYgKGNvbnN0ci0+ ZGVmdmFsW2pdLmFkbnVtICE9IGF0dG51bSkKKwkJCWNvbnRpbnVlOworCisJCWlmICgqZHBjb250 ZXh0ID09IE5JTCkKKwkJCSpkcGNvbnRleHQgPSBkZXBhcnNlX2NvbnRleHRfZm9yKFJlbGF0aW9u R2V0UmVsYXRpb25OYW1lKHJlbCksCisJCQkJCQkJCQkJCSBSZWxhdGlvbkdldFJlbGlkKHJlbCkp OworCisJCXJldHVybiBkZXBhcnNlX2V4cHJlc3Npb24oc3RyaW5nVG9Ob2RlKGNvbnN0ci0+ZGVm dmFsW2pdLmFkYmluKSwKKwkJCQkJCQkJICAqZHBjb250ZXh0LCBmYWxzZSwgZmFsc2UpOworCX0K KwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIGFwcGVuZF9pbmxpbmVfY2hlY2tfY29uc3RyYWlu dHMKKyAqCQlFbWl0IGVhY2ggbG9jYWxseS1kZWNsYXJlZCBDSEVDSyBjb25zdHJhaW50IG9uIHJl bCBhcworICoJCSJDT05TVFJBSU5UIG5hbWUgPHBnX2dldF9jb25zdHJhaW50ZGVmPiIsIHNlcGFy YXRlZCBieSAnLCcgZnJvbSBhbnkKKyAqCQlwcmV2aW91c2x5LWVtaXR0ZWQgY29sdW1uIG9yIGNv bnN0cmFpbnQuCisgKgorICogKmZpcnN0IHRyYWNrcyB3aGV0aGVyIGFueXRoaW5nIGhhcyBiZWVu IGVtaXR0ZWQgb24gdGhpcyBsaXN0IHlldCwgc28gdGhlCisgKiBjYWxsZXIgY2FuIGNoYWluIGNv bHVtbiBlbWlzc2lvbiBhbmQgY29uc3RyYWludCBlbWlzc2lvbiB0aHJvdWdoIHRoZSBzYW1lCisg KiBidWZmZXIuICBJbmhlcml0ZWQgQ0hFQ0sgY29uc3RyYWludHMgKCFjb25pc2xvY2FsKSBjb21l IGZyb20gdGhlIHBhcmVudCdzCisgKiBEREwgYW5kIGFyZW4ndCByZXBlYXRlZCBoZXJlLgorICov CitzdGF0aWMgdm9pZAorYXBwZW5kX2lubGluZV9jaGVja19jb25zdHJhaW50cyhTdHJpbmdJbmZv IGJ1ZiwgUmVsYXRpb24gcmVsLCBib29sIHByZXR0eSwKKwkJCQkJCQkJYm9vbCAqZmlyc3QpCit7 CisJUmVsYXRpb24JY29uUmVsOworCVN5c1NjYW5EZXNjIGNvblNjYW47CisJU2NhbktleURhdGEg Y29uS2V5OworCUhlYXBUdXBsZQljb25UdXA7CisKKwljb25SZWwgPSB0YWJsZV9vcGVuKENvbnN0 cmFpbnRSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCVNjYW5LZXlJbml0KCZjb25LZXks CisJCQkJQW51bV9wZ19jb25zdHJhaW50X2NvbnJlbGlkLAorCQkJCUJURXF1YWxTdHJhdGVneU51 bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdldERhdHVtKFJlbGF0aW9uR2V0UmVsaWQocmVs KSkpOworCWNvblNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4oY29uUmVsLCBDb25zdHJhaW50UmVs aWRUeXBpZE5hbWVJbmRleElkLAorCQkJCQkJCQkgdHJ1ZSwgTlVMTCwgMSwgJmNvbktleSk7CisK Kwl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZChjb25UdXAgPSBzeXN0YWJsZV9nZXRuZXh0KGNvblNj YW4pKSkKKwl7CisJCUZvcm1fcGdfY29uc3RyYWludCBjb24gPSAoRm9ybV9wZ19jb25zdHJhaW50 KSBHRVRTVFJVQ1QoY29uVHVwKTsKKwkJRGF0dW0JCWRlZkRhdHVtOworCQljaGFyCSAgICpkZWZi b2R5OworCisJCWlmIChjb24tPmNvbnR5cGUgIT0gQ09OU1RSQUlOVF9DSEVDSykKKwkJCWNvbnRp bnVlOworCQlpZiAoIWNvbi0+Y29uaXNsb2NhbCkKKwkJCWNvbnRpbnVlOworCisJCWlmICghKmZp cnN0KQorCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnLCcpOworCQlpZiAocHJldHR5KQor CQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICJcbiAgICAiKTsKKwkJZWxzZSBpZiAoISpm aXJzdCkKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJyAnKTsKKwkJKmZpcnN0ID0gZmFs c2U7CisKKwkJZGVmRGF0dW0gPSBPaWRGdW5jdGlvbkNhbGwxKEZfUEdfR0VUX0NPTlNUUkFJTlRE RUZfT0lELAorCQkJCQkJCQkJT2JqZWN0SWRHZXREYXR1bShjb24tPm9pZCkpOworCQlkZWZib2R5 ID0gVGV4dERhdHVtR2V0Q1N0cmluZyhkZWZEYXR1bSk7CisJCWFwcGVuZFN0cmluZ0luZm8oYnVm LCAiQ09OU1RSQUlOVCAlcyAlcyIsCisJCQkJCQkgcXVvdGVfaWRlbnRpZmllcihOYW1lU3RyKGNv bi0+Y29ubmFtZSkpLAorCQkJCQkJIGRlZmJvZHkpOworCQlwZnJlZShkZWZib2R5KTsKKwl9CisJ c3lzdGFibGVfZW5kc2Nhbihjb25TY2FuKTsKKwl0YWJsZV9jbG9zZShjb25SZWwsIEFjY2Vzc1No YXJlTG9jayk7Cit9CisKKy8qCisgKiBhcHBlbmRfY29sdW1uX2RlZnMKKyAqCQlBcHBlbmQgdGhl IGNvbW1hLXNlcGFyYXRlZCBjb2x1bW4gZGVmaW5pdGlvbiBsaXN0IGZvciBhIHRhYmxlLgorICoK KyAqIEVtaXRzIGVhY2ggbm9uLWRyb3BwZWQsIGxvY2FsbHktZGVjbGFyZWQgY29sdW1uIGFzCisg KgkJbmFtZSB0eXBlIFtDT0xMQVRFIHhdIFtTVE9SQUdFIHNdIFtDT01QUkVTU0lPTiBjXQorICoJ CVtHRU5FUkFURUQgLi4uIHwgREVGQVVMVCBlXSBbTk9UIE5VTExdCisgKiBmb2xsb3dlZCBieSBh bnkgbG9jYWxseS1kZWNsYXJlZCBpbmxpbmUgQ0hFQ0sgY29uc3RyYWludHMuICBPcHRpb25hbAor ICogY2xhdXNlcyBhcmUgb21pdHRlZCB3aGVuIHRoZWlyIHZhbHVlIG1hdGNoZXMgd2hhdCB0aGUg c3lzdGVtIHdvdWxkCisgKiByZWFwcGx5IG9uIHJvdW5kLXRyaXAgKGUuZy4gdHlwZS1kZWZhdWx0 IENPTExBVEUsIHR5cGUtZGVmYXVsdCBTVE9SQUdFKS4KKyAqLworc3RhdGljIHZvaWQKK2FwcGVu ZF9jb2x1bW5fZGVmcyhTdHJpbmdJbmZvIGJ1ZiwgUmVsYXRpb24gcmVsLCBib29sIHByZXR0eSwK KwkJCQkgICBib29sIGluY2x1ZGVfY2hlY2ssCisJCQkJICAgYm9vbCBzY2hlbWFfcXVhbGlmaWVk LAorCQkJCSAgIExvY2FsTm90TnVsbEVudHJ5ICpubl9lbnRyaWVzKQoreworCVR1cGxlRGVzYwl0 dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihyZWwpOworCU9pZAkJCWJhc2VfbmFtZXNwYWNlID0g UmVsYXRpb25HZXROYW1lc3BhY2UocmVsKTsKKwlMaXN0CSAgICpkcGNvbnRleHQgPSBOSUw7CisJ Ym9vbAkJZmlyc3QgPSB0cnVlOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCB0dXBkZXNjLT5uYXR0 czsgaSsrKQorCXsKKwkJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0ID0gVHVwbGVEZXNjQXR0cih0dXBk ZXNjLCBpKTsKKwkJY2hhcgkgICAqdHlwc3RyOworCisJCWlmIChhdHQtPmF0dGlzZHJvcHBlZCkK KwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIENvbHVtbnMgaW5oZXJpdGVkIGZyb20gYSBwYXJl bnQgYXJlIGNvdmVyZWQgYnkgdGhlIElOSEVSSVRTIGNsYXVzZSwKKwkJICogbm90IHRoZSBjb2x1 bW4gbGlzdCwgdW5sZXNzIHRoZSBjaGlsZCByZWRlY2xhcmVkIHRoZW0gbG9jYWxseQorCQkgKiAo YXR0aXNsb2NhbD10cnVlKS4KKwkJICovCisJCWlmICghYXR0LT5hdHRpc2xvY2FsKQorCQkJY29u dGludWU7CisKKwkJaWYgKCFmaXJzdCkKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJywn KTsKKwkJaWYgKHByZXR0eSkKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiXG4gICAg Iik7CisJCWVsc2UgaWYgKCFmaXJzdCkKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJyAn KTsKKwkJZmlyc3QgPSBmYWxzZTsKKworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgcXVv dGVfaWRlbnRpZmllcihOYW1lU3RyKGF0dC0+YXR0bmFtZSkpKTsKKwkJYXBwZW5kU3RyaW5nSW5m b0NoYXIoYnVmLCAnICcpOworCisJCXR5cHN0ciA9IGZvcm1hdF90eXBlX3dpdGhfdHlwZW1vZChh dHQtPmF0dHR5cGlkLCBhdHQtPmF0dHR5cG1vZCk7CisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmco YnVmLCB0eXBzdHIpOworCQlwZnJlZSh0eXBzdHIpOworCisJCS8qIENPTExBVEUgY2xhdXNlLCBv bmx5IGlmIGl0IGRpZmZlcnMgZnJvbSB0aGUgdHlwZSdzIGRlZmF1bHQuICovCisJCWlmIChPaWRJ c1ZhbGlkKGF0dC0+YXR0Y29sbGF0aW9uKSAmJgorCQkJYXR0LT5hdHRjb2xsYXRpb24gIT0gZ2V0 X3R5cGNvbGxhdGlvbihhdHQtPmF0dHR5cGlkKSkKKwkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAi IENPTExBVEUgJXMiLAorCQkJCQkJCSBnZW5lcmF0ZV9jb2xsYXRpb25fbmFtZShhdHQtPmF0dGNv bGxhdGlvbikpOworCisJCS8qIFNUT1JBR0UgY2xhdXNlLCBvbmx5IGlmIGl0IGRpZmZlcnMgZnJv bSB0aGUgdHlwZSdzIGRlZmF1bHQuICovCisJCWlmIChhdHQtPmF0dHN0b3JhZ2UgIT0gZ2V0X3R5 cHN0b3JhZ2UoYXR0LT5hdHR0eXBpZCkpCisJCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiBTVE9S QUdFICVzIiwgc3RvcmFnZV9uYW1lKGF0dC0+YXR0c3RvcmFnZSkpOworCisJCS8qIENPTVBSRVNT SU9OIGNsYXVzZSwgb25seSBpZiBleHBsaWNpdGx5IHNldCBvbiB0aGUgY29sdW1uLiAqLworCQlp ZiAoQ29tcHJlc3Npb25NZXRob2RJc1ZhbGlkKGF0dC0+YXR0Y29tcHJlc3Npb24pKQorCQkJYXBw ZW5kU3RyaW5nSW5mbyhidWYsICIgQ09NUFJFU1NJT04gJXMiLAorCQkJCQkJCSBHZXRDb21wcmVz c2lvbk1ldGhvZE5hbWUoYXR0LT5hdHRjb21wcmVzc2lvbikpOworCisJCS8qCisJCSAqIExvb2sg dXAgdGhlIGRlZmF1bHQvZ2VuZXJhdGVkIGV4cHJlc3Npb24gdGV4dCB1cCBmcm9udDsgZ2VuZXJh dGVkCisJCSAqIGNvbHVtbnMgaGF2ZSBhdHRoYXNkZWY9dHJ1ZSB3aXRoIGFuIGVudHJ5IGluIHBn X2F0dHJkZWYganVzdCBsaWtlCisJCSAqIHJlZ3VsYXIgZGVmYXVsdHMuCisJCSAqLworCQl7CisJ CQljaGFyCSAgICpkZWZleHByID0gTlVMTDsKKworCQkJaWYgKGF0dC0+YXR0aGFzZGVmKQorCQkJ CWRlZmV4cHIgPSBmaW5kX2F0dHJkZWZfdGV4dChyZWwsIGF0dC0+YXR0bnVtLCAmZHBjb250ZXh0 KTsKKworCQkJLyogR0VORVJBVEVEIC8gSURFTlRJVFkgLyBERUZBVUxUIGFyZSBtdXR1YWxseSBl eGNsdXNpdmUuICovCisJCQlpZiAoYXR0LT5hdHRnZW5lcmF0ZWQgPT0gQVRUUklCVVRFX0dFTkVS QVRFRF9TVE9SRUQgJiYgZGVmZXhwcikKKwkJCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiBHRU5F UkFURUQgQUxXQVlTIEFTICglcykgU1RPUkVEIiwgZGVmZXhwcik7CisJCQllbHNlIGlmIChhdHQt PmF0dGdlbmVyYXRlZCA9PSBBVFRSSUJVVEVfR0VORVJBVEVEX1ZJUlRVQUwgJiYgZGVmZXhwcikK KwkJCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiBHRU5FUkFURUQgQUxXQVlTIEFTICglcykgVklS VFVBTCIsIGRlZmV4cHIpOworCQkJZWxzZSBpZiAoYXR0LT5hdHRpZGVudGl0eSA9PSBBVFRSSUJV VEVfSURFTlRJVFlfQUxXQVlTIHx8CisJCQkJCSBhdHQtPmF0dGlkZW50aXR5ID09IEFUVFJJQlVU RV9JREVOVElUWV9CWV9ERUZBVUxUKQorCQkJeworCQkJCWNvbnN0IGNoYXIgKmlka2luZCA9CisJ CQkJCShhdHQtPmF0dGlkZW50aXR5ID09IEFUVFJJQlVURV9JREVOVElUWV9BTFdBWVMpCisJCQkJ CT8gIkFMV0FZUyIgOiAiQlkgREVGQVVMVCI7CisJCQkJT2lkCQkJc2VxaWQgPSBnZXRJZGVudGl0 eVNlcXVlbmNlKHJlbCwgYXR0LT5hdHRudW0sIHRydWUpOworCisJCQkJYXBwZW5kU3RyaW5nSW5m byhidWYsICIgR0VORVJBVEVEICVzIEFTIElERU5USVRZIiwgaWRraW5kKTsKKworCQkJCS8qCisJ CQkJICogRW1pdCBvbmx5IHRoZSBzZXF1ZW5jZSBvcHRpb25zIHRoYXQgZGlmZmVyIGZyb20gdGhl aXIKKwkJCQkgKiBkZWZhdWx0cyAtIG1pcnJvcmluZyBwZ19nZXRfZGF0YWJhc2VfZGRsJ3MgcGF0 dGVybiBvZgorCQkJCSAqIG9taXR0aW5nIHZhbHVlcyB0aGF0IHRoZSBzeXN0ZW0gd291bGQgcmVh cHBseSBvbiBpdHMgb3duLgorCQkJCSAqLworCQkJCWlmIChPaWRJc1ZhbGlkKHNlcWlkKSkKKwkJ CQl7CisJCQkJCUhlYXBUdXBsZQlzZXFUdXAgPSBTZWFyY2hTeXNDYWNoZTEoU0VRUkVMSUQsCisJ CQkJCQkJCQkJCQkJCSBPYmplY3RJZEdldERhdHVtKHNlcWlkKSk7CisKKwkJCQkJaWYgKEhlYXBU dXBsZUlzVmFsaWQoc2VxVHVwKSkKKwkJCQkJeworCQkJCQkJRm9ybV9wZ19zZXF1ZW5jZSBzZXEg PSAoRm9ybV9wZ19zZXF1ZW5jZSkgR0VUU1RSVUNUKHNlcVR1cCk7CisJCQkJCQlTdHJpbmdJbmZv RGF0YSBvcHRzOworCQkJCQkJYm9vbAkJZmlyc3Rfb3B0ID0gdHJ1ZTsKKwkJCQkJCWludDY0CQlk ZWZfbWluLAorCQkJCQkJCQkJZGVmX21heCwKKwkJCQkJCQkJCWRlZl9zdGFydDsKKwkJCQkJCWlu dDY0CQl0eXBfbWluLAorCQkJCQkJCQkJdHlwX21heDsKKworCQkJCQkJLyoKKwkJCQkJCSAqIFBl ci10eXBlIGJvdW5kcyBmb3IgdGhlIHNlcXVlbmNlJ3MgdW5kZXJseWluZworCQkJCQkJICogaW50 ZWdlciB0eXBlLiAgRGVmYXVsdHMgdG8gaW50OCBpZiB0aGUgY29sdW1uIHR5cGUKKwkJCQkJCSAq IGlzIHNvbWV0aGluZyBlbHNlIChzaG91bGRuJ3QgaGFwcGVuIGZvciBJREVOVElUWSwKKwkJCQkJ CSAqIGJ1dCBiZSBkZWZlbnNpdmUpLgorCQkJCQkJICovCisJCQkJCQlzd2l0Y2ggKGF0dC0+YXR0 dHlwaWQpCisJCQkJCQl7CisJCQkJCQkJY2FzZSBJTlQyT0lEOgorCQkJCQkJCQl0eXBfbWluID0g UEdfSU5UMTZfTUlOOworCQkJCQkJCQl0eXBfbWF4ID0gUEdfSU5UMTZfTUFYOworCQkJCQkJCQli cmVhazsKKwkJCQkJCQljYXNlIElOVDRPSUQ6CisJCQkJCQkJCXR5cF9taW4gPSBQR19JTlQzMl9N SU47CisJCQkJCQkJCXR5cF9tYXggPSBQR19JTlQzMl9NQVg7CisJCQkJCQkJCWJyZWFrOworCQkJ CQkJCWRlZmF1bHQ6CisJCQkJCQkJCXR5cF9taW4gPSBQR19JTlQ2NF9NSU47CisJCQkJCQkJCXR5 cF9tYXggPSBQR19JTlQ2NF9NQVg7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCisJCQkJCQlp ZiAoc2VxLT5zZXFpbmNyZW1lbnQgPiAwKQorCQkJCQkJeworCQkJCQkJCWRlZl9taW4gPSAxOwor CQkJCQkJCWRlZl9tYXggPSB0eXBfbWF4OworCQkJCQkJCWRlZl9zdGFydCA9IGRlZl9taW47CisJ CQkJCQl9CisJCQkJCQllbHNlCisJCQkJCQl7CisJCQkJCQkJZGVmX21pbiA9IHR5cF9taW47CisJ CQkJCQkJZGVmX21heCA9IC0xOworCQkJCQkJCWRlZl9zdGFydCA9IGRlZl9tYXg7CisJCQkJCQl9 CisKKwkJCQkJCWluaXRTdHJpbmdJbmZvKCZvcHRzKTsKKworCQkJCQkJLyoKKwkJCQkJCSAqIFNF UVVFTkNFIE5BTUUgLSBvbWl0IHdoZW4gaXQgbWF0Y2hlcyB0aGUgaW1wbGljaXQKKwkJCQkJCSAq ICI8dGFibGVuYW1lPl88Y29sdW1ubmFtZT5fc2VxIiBwYXR0ZXJuIGluIHRoZSBzYW1lCisJCQkJ CQkgKiBzY2hlbWEsIHNpbmNlIENSRUFURSBUQUJMRSB3aWxsIHJlZ2VuZXJhdGUgdGhhdAorCQkJ CQkJICogZXhhY3QgbmFtZS4gIFRoZSBzZXF1ZW5jZSBpcyBhbiBJTlRFUk5BTCBkZXBlbmRlbmN5 CisJCQkJCQkgKiBvZiB0aGUgY29sdW1uLCBzbyB0aGUgbG9jayB3ZSBob2xkIG9uIHRoZSB0YWJs ZQorCQkJCQkJICogYWxzbyBwaW5zIGl0LCBidXQgdGhlIGxvb2t1cCBoZWxwZXIgc3RpbGwgZGVm ZW5kcworCQkJCQkJICogYWdhaW5zdCBhIG1pc3NpbmcgcGdfY2xhc3Mgcm93LgorCQkJCQkJICov CisJCQkJCQl7CisJCQkJCQkJSGVhcFR1cGxlCXNlcUNsYXNzVHVwOworCQkJCQkJCUZvcm1fcGdf Y2xhc3Mgc2VxQ2xhc3M7CisJCQkJCQkJY2hhcgkgICAqYXV0b25hbWU7CisKKwkJCQkJCQlzZXFD bGFzc1R1cCA9IFNlYXJjaFN5c0NhY2hlMShSRUxPSUQsCisJCQkJCQkJCQkJCQkJCSAgT2JqZWN0 SWRHZXREYXR1bShzZXFpZCkpOworCQkJCQkJCWlmICghSGVhcFR1cGxlSXNWYWxpZChzZXFDbGFz c1R1cCkpCisJCQkJCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkJCQkJKGVycmNvZGUoRVJSQ09E RV9VTkRFRklORURfT0JKRUNUKSwKKwkJCQkJCQkJCQkgZXJybXNnKCJpZGVudGl0eSBzZXF1ZW5j ZSB3aXRoIE9JRCAldSBkb2VzIG5vdCBleGlzdCIsCisJCQkJCQkJCQkJCQlzZXFpZCksCisJCQkJ CQkJCQkJIGVycmRldGFpbCgiSXQgbWF5IGhhdmUgYmVlbiBjb25jdXJyZW50bHkgZHJvcHBlZC4i KSkpOworCQkJCQkJCXNlcUNsYXNzID0gKEZvcm1fcGdfY2xhc3MpIEdFVFNUUlVDVChzZXFDbGFz c1R1cCk7CisKKwkJCQkJCQlhdXRvbmFtZSA9IG1ha2VPYmplY3ROYW1lKFJlbGF0aW9uR2V0UmVs YXRpb25OYW1lKHJlbCksCisJCQkJCQkJCQkJCQkJICBOYW1lU3RyKGF0dC0+YXR0bmFtZSksICJz ZXEiKTsKKwkJCQkJCQlpZiAoc2VxQ2xhc3MtPnJlbG5hbWVzcGFjZSAhPSBSZWxhdGlvbkdldE5h bWVzcGFjZShyZWwpIHx8CisJCQkJCQkJCXN0cmNtcChOYW1lU3RyKHNlcUNsYXNzLT5yZWxuYW1l KSwgYXV0b25hbWUpICE9IDApCisJCQkJCQkJeworCQkJCQkJCQljaGFyCSAgICpzZXFRdWFsID0K KwkJCQkJCQkJCWxvb2t1cF9yZWxuYW1lX2Zvcl9lbWl0KHNlcWlkLAorCQkJCQkJCQkJCQkJCQkJ c2NoZW1hX3F1YWxpZmllZCwKKwkJCQkJCQkJCQkJCQkJCWJhc2VfbmFtZXNwYWNlKTsKKworCQkJ CQkJCQlhcHBlbmRTdHJpbmdJbmZvKCZvcHRzLCAiJXNTRVFVRU5DRSBOQU1FICVzIiwKKwkJCQkJ CQkJCQkJCSBmaXJzdF9vcHQgPyAiIiA6ICIgIiwgc2VxUXVhbCk7CisJCQkJCQkJCWZpcnN0X29w dCA9IGZhbHNlOworCQkJCQkJCQlwZnJlZShzZXFRdWFsKTsKKwkJCQkJCQl9CisJCQkJCQkJcGZy ZWUoYXV0b25hbWUpOworCQkJCQkJCVJlbGVhc2VTeXNDYWNoZShzZXFDbGFzc1R1cCk7CisJCQkJ CQl9CisKKwkJCQkJCWlmIChzZXEtPnNlcXN0YXJ0ICE9IGRlZl9zdGFydCkKKwkJCQkJCXsKKwkJ CQkJCQlhcHBlbmRTdHJpbmdJbmZvKCZvcHRzLCAiJXNTVEFSVCBXSVRIICIgSU5UNjRfRk9STUFU LAorCQkJCQkJCQkJCQkgZmlyc3Rfb3B0ID8gIiIgOiAiICIsIHNlcS0+c2Vxc3RhcnQpOworCQkJ CQkJCWZpcnN0X29wdCA9IGZhbHNlOworCQkJCQkJfQorCQkJCQkJaWYgKHNlcS0+c2VxaW5jcmVt ZW50ICE9IDEpCisJCQkJCQl7CisJCQkJCQkJYXBwZW5kU3RyaW5nSW5mbygmb3B0cywgIiVzSU5D UkVNRU5UIEJZICIgSU5UNjRfRk9STUFULAorCQkJCQkJCQkJCQkgZmlyc3Rfb3B0ID8gIiIgOiAi ICIsIHNlcS0+c2VxaW5jcmVtZW50KTsKKwkJCQkJCQlmaXJzdF9vcHQgPSBmYWxzZTsKKwkJCQkJ CX0KKwkJCQkJCWlmIChzZXEtPnNlcW1pbiAhPSBkZWZfbWluKQorCQkJCQkJeworCQkJCQkJCWFw cGVuZFN0cmluZ0luZm8oJm9wdHMsICIlc01JTlZBTFVFICIgSU5UNjRfRk9STUFULAorCQkJCQkJ CQkJCQkgZmlyc3Rfb3B0ID8gIiIgOiAiICIsIHNlcS0+c2VxbWluKTsKKwkJCQkJCQlmaXJzdF9v cHQgPSBmYWxzZTsKKwkJCQkJCX0KKwkJCQkJCWlmIChzZXEtPnNlcW1heCAhPSBkZWZfbWF4KQor CQkJCQkJeworCQkJCQkJCWFwcGVuZFN0cmluZ0luZm8oJm9wdHMsICIlc01BWFZBTFVFICIgSU5U NjRfRk9STUFULAorCQkJCQkJCQkJCQkgZmlyc3Rfb3B0ID8gIiIgOiAiICIsIHNlcS0+c2VxbWF4 KTsKKwkJCQkJCQlmaXJzdF9vcHQgPSBmYWxzZTsKKwkJCQkJCX0KKwkJCQkJCWlmIChzZXEtPnNl cWNhY2hlICE9IDEpCisJCQkJCQl7CisJCQkJCQkJYXBwZW5kU3RyaW5nSW5mbygmb3B0cywgIiVz Q0FDSEUgIiBJTlQ2NF9GT1JNQVQsCisJCQkJCQkJCQkJCSBmaXJzdF9vcHQgPyAiIiA6ICIgIiwg c2VxLT5zZXFjYWNoZSk7CisJCQkJCQkJZmlyc3Rfb3B0ID0gZmFsc2U7CisJCQkJCQl9CisJCQkJ CQlpZiAoc2VxLT5zZXFjeWNsZSkKKwkJCQkJCXsKKwkJCQkJCQlhcHBlbmRTdHJpbmdJbmZvKCZv cHRzLCAiJXNDWUNMRSIsIGZpcnN0X29wdCA/ICIiIDogIiAiKTsKKwkJCQkJCQlmaXJzdF9vcHQg PSBmYWxzZTsKKwkJCQkJCX0KKworCQkJCQkJaWYgKCFmaXJzdF9vcHQpCisJCQkJCQkJYXBwZW5k U3RyaW5nSW5mbyhidWYsICIgKCVzKSIsIG9wdHMuZGF0YSk7CisKKwkJCQkJCXBmcmVlKG9wdHMu ZGF0YSk7CisJCQkJCQlSZWxlYXNlU3lzQ2FjaGUoc2VxVHVwKTsKKwkJCQkJfQorCQkJCX0KKwkJ CX0KKwkJCWVsc2UgaWYgKGRlZmV4cHIpCisJCQkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIgREVG QVVMVCAlcyIsIGRlZmV4cHIpOworCisJCQlpZiAoZGVmZXhwcikKKwkJCQlwZnJlZShkZWZleHBy KTsKKwkJfQorCisJCWlmIChhdHQtPmF0dG5vdG51bGwpCisJCXsKKwkJCUxvY2FsTm90TnVsbEVu dHJ5ICpubiA9ICZubl9lbnRyaWVzW2F0dC0+YXR0bnVtXTsKKworCQkJLyoKKwkJCSAqIFN1cHBy ZXNzIE5PVCBOVUxMIHdoZW4gdGhlIGNvbnN0cmFpbnQgaXMgaW5oZXJpdGVkLW9ubHkKKwkJCSAq IChjb25pc2xvY2FsPWZhbHNlKS4gIFRoZSBJTkhFUklUUyBjbGF1c2UgYWxyZWFkeSBwcm9wYWdh dGVzIGl0OworCQkJICogZW1pdHRpbmcgaXQgaGVyZSB3b3VsZCBtYWtlIGNvbmlzbG9jYWwgdHJ1 ZSBvbiByZXBsYXkuICBXaGVuCisJCQkgKiB0aGVyZSBpcyBubyBwZ19jb25zdHJhaW50IHJvdyBh dCBhbGwgKHByZS1QRzE4IGNhdGFsb2cgd2l0aAorCQkJICogYXR0bm90bnVsbD10cnVlKSwgaW5o ZXJpdGVkX25vdG51bGwgaXMgZmFsc2Ugc28gd2UgZmFsbCB0aHJvdWdoCisJCQkgKiBhbmQgZW1p dCBwbGFpbiBOT1QgTlVMTCBhcyBiZWZvcmUuCisJCQkgKi8KKwkJCWlmICghbm4tPmluaGVyaXRl ZF9ub3RudWxsKQorCQkJeworCQkJCWlmIChubi0+bmFtZSAhPSBOVUxMICYmICFubi0+aXNfYXV0 bykKKwkJCQkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIgQ09OU1RSQUlOVCAlcyBOT1QgTlVMTCIs CisJCQkJCQkJCQkgcXVvdGVfaWRlbnRpZmllcihubi0+bmFtZSkpOworCQkJCWVsc2UKKwkJCQkJ YXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICIgTk9UIE5VTEwiKTsKKwkJCQlpZiAobm4tPm5h bWUgIT0gTlVMTCAmJiBubi0+bm9faW5oZXJpdCkKKwkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmlu ZyhidWYsICIgTk8gSU5IRVJJVCIpOworCQkJfQorCQl9CisJfQorCisJLyoKKwkgKiBUYWJsZS1s ZXZlbCBDSEVDSyBjb25zdHJhaW50cyAtIGVtaXR0ZWQgaW5saW5lIGluIHRoZSBDUkVBVEUgVEFC TEUgYm9keQorCSAqIHNvIHRoZXkgYXBwZWFyIGFsb25nc2lkZSB0aGUgY29sdW1ucyAodGhlIHBn X2R1bXAgc2hhcGUpLiAgVGhlCisJICogY29uc3RyYWludCBsb29wIGxhdGVyIGluIHBnX2dldF90 YWJsZV9kZGxfaW50ZXJuYWwgc2tpcHMgQ0hFQ0sKKwkgKiBjb25zdHJhaW50cyB0byBhdm9pZCBk b3VibGUtZW1pc3Npb24uCisJICovCisJaWYgKGluY2x1ZGVfY2hlY2spCisJCWFwcGVuZF9pbmxp bmVfY2hlY2tfY29uc3RyYWludHMoYnVmLCByZWwsIHByZXR0eSwgJmZpcnN0KTsKK30KKworLyoK KyAqIGFwcGVuZF90eXBlZF9jb2x1bW5fb3ZlcnJpZGVzCisgKgkJRm9yIGEgdHlwZWQgdGFibGUg KENSRUFURSBUQUJMRSAuLi4gT0YgdHlwZV9uYW1lKSwgYXBwZW5kIHRoZQorICoJCW9wdGlvbmFs ICIoY29sIFdJVEggT1BUSU9OUyAuLi4sIC4uLikiIGxpc3QgY2FycnlpbmcgbG9jYWxseQorICoJ CWFwcGxpZWQgcGVyLWNvbHVtbiBvdmVycmlkZXMgLSBERUZBVUxULCBOT1QgTlVMTCwgYW5kIGFu eSBsb2NhbGx5CisgKgkJZGVjbGFyZWQgQ0hFQ0sgY29uc3RyYWludHMuCisgKgorICogQ29sdW1u cyB3aG9zZSB0eXBlIGlzIGZ1bGx5IGRpY3RhdGVkIGJ5IHJlbG9mdHlwZSBlbWl0IG5vdGhpbmcu ICBUaGUKKyAqIHBhcmVudGhlc2lzZWQgbGlzdCBpcyBzdXBwcmVzc2VkIGVudGlyZWx5IHdoZW4g bm8gY29sdW1uIG5lZWRzIGFuCisgKiBvdmVycmlkZSBhbmQgdGhlcmUgYXJlIG5vIGxvY2FsbHkt ZGVjbGFyZWQgQ0hFQ0sgY29uc3RyYWludHMsIG1hdGNoaW5nCisgKiB0aGUgY2Fub25pY2FsICJD UkVBVEUgVEFCTEUgeCBPRiB0OyIgc2hhcGUuCisgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfdHlw ZWRfY29sdW1uX292ZXJyaWRlcyhTdHJpbmdJbmZvIGJ1ZiwgUmVsYXRpb24gcmVsLCBib29sIHBy ZXR0eSwKKwkJCQkJCQkgIGJvb2wgaW5jbHVkZV9jaGVjaywKKwkJCQkJCQkgIExvY2FsTm90TnVs bEVudHJ5ICpubl9lbnRyaWVzKQoreworCVR1cGxlRGVzYwl0dXBkZXNjID0gUmVsYXRpb25HZXRE ZXNjcihyZWwpOworCUxpc3QJICAgKmRwY29udGV4dCA9IE5JTDsKKwlTdHJpbmdJbmZvRGF0YSBp bm5lcjsKKwlib29sCQlmaXJzdCA9IHRydWU7CisKKwlpbml0U3RyaW5nSW5mbygmaW5uZXIpOwor CisJZm9yIChpbnQgaSA9IDA7IGkgPCB0dXBkZXNjLT5uYXR0czsgaSsrKQorCXsKKwkJRm9ybV9w Z19hdHRyaWJ1dGUgYXR0ID0gVHVwbGVEZXNjQXR0cih0dXBkZXNjLCBpKTsKKwkJY2hhcgkgICAq ZGVmZXhwciA9IE5VTEw7CisJCWJvb2wJCWhhc19kZWZhdWx0OworCQlib29sCQloYXNfbm90bnVs bDsKKworCQlpZiAoYXR0LT5hdHRpc2Ryb3BwZWQpCisJCQljb250aW51ZTsKKworCQlpZiAoYXR0 LT5hdHRoYXNkZWYpCisJCQlkZWZleHByID0gZmluZF9hdHRyZGVmX3RleHQocmVsLCBhdHQtPmF0 dG51bSwgJmRwY29udGV4dCk7CisKKwkJaGFzX2RlZmF1bHQgPSAoZGVmZXhwciAhPSBOVUxMKTsK KwkJLyogaW5oZXJpdGVkLW9ubHkgTk9UIE5VTEwgaXMgbm90IGFuIG92ZXJyaWRlOyB0cmVhdCBh cyBhYnNlbnQgKi8KKwkJaGFzX25vdG51bGwgPSBhdHQtPmF0dG5vdG51bGwgJiYKKwkJCSFubl9l bnRyaWVzW2F0dC0+YXR0bnVtXS5pbmhlcml0ZWRfbm90bnVsbDsKKworCQlpZiAoIWhhc19kZWZh dWx0ICYmICFoYXNfbm90bnVsbCkKKwkJeworCQkJaWYgKGRlZmV4cHIpCisJCQkJcGZyZWUoZGVm ZXhwcik7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICghZmlyc3QpCisJCQlhcHBlbmRTdHJp bmdJbmZvQ2hhcigmaW5uZXIsICcsJyk7CisJCWlmIChwcmV0dHkpCisJCQlhcHBlbmRTdHJpbmdJ bmZvU3RyaW5nKCZpbm5lciwgIlxuICAgICIpOworCQllbHNlIGlmICghZmlyc3QpCisJCQlhcHBl bmRTdHJpbmdJbmZvQ2hhcigmaW5uZXIsICcgJyk7CisJCWZpcnN0ID0gZmFsc2U7CisKKwkJYXBw ZW5kU3RyaW5nSW5mbygmaW5uZXIsICIlcyBXSVRIIE9QVElPTlMiLAorCQkJCQkJIHF1b3RlX2lk ZW50aWZpZXIoTmFtZVN0cihhdHQtPmF0dG5hbWUpKSk7CisJCWlmIChoYXNfZGVmYXVsdCkKKwkJ CWFwcGVuZFN0cmluZ0luZm8oJmlubmVyLCAiIERFRkFVTFQgJXMiLCBkZWZleHByKTsKKwkJaWYg KGhhc19ub3RudWxsKQorCQl7CisJCQlMb2NhbE5vdE51bGxFbnRyeSAqbm4gPSAmbm5fZW50cmll c1thdHQtPmF0dG51bV07CisKKwkJCWlmIChubi0+bmFtZSAhPSBOVUxMICYmICFubi0+aXNfYXV0 bykKKwkJCQlhcHBlbmRTdHJpbmdJbmZvKCZpbm5lciwgIiBDT05TVFJBSU5UICVzIE5PVCBOVUxM IiwKKwkJCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIobm4tPm5hbWUpKTsKKwkJCWVsc2UKKwkJCQlh cHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZpbm5lciwgIiBOT1QgTlVMTCIpOworCQkJaWYgKG5uLT5u YW1lICE9IE5VTEwgJiYgbm4tPm5vX2luaGVyaXQpCisJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmlu ZygmaW5uZXIsICIgTk8gSU5IRVJJVCIpOworCQl9CisKKwkJaWYgKGRlZmV4cHIpCisJCQlwZnJl ZShkZWZleHByKTsKKwl9CisKKwkvKgorCSAqIExvY2FsbHktZGVjbGFyZWQgQ0hFQ0sgY29uc3Ry YWludHMgb24gYSB0eXBlZCB0YWJsZSBiZWxvbmcgaW4gdGhlCisJICogY29sdW1uLWxpc3QgcGFy ZW50aGVzZXMsIHNhbWUgYXMgZm9yIGFuIHVudHlwZWQgdGFibGUuICBUaGUgb3V0LW9mLWxpbmUK KwkgKiBjb25zdHJhaW50IGxvb3AgbGF0ZXIgc3RpbGwgc2tpcHMgQ0hFQ0tzLgorCSAqLworCWlm IChpbmNsdWRlX2NoZWNrKQorCQlhcHBlbmRfaW5saW5lX2NoZWNrX2NvbnN0cmFpbnRzKCZpbm5l ciwgcmVsLCBwcmV0dHksICZmaXJzdCk7CisKKwlpZiAoIWZpcnN0KQorCXsKKwkJYXBwZW5kU3Ry aW5nSW5mb1N0cmluZyhidWYsICIgKCIpOworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1Ziwg aW5uZXIuZGF0YSk7CisJCWlmIChwcmV0dHkpCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1 ZiwgIlxuKSIpOworCQllbHNlCisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcpJyk7CisJ fQorCXBmcmVlKGlubmVyLmRhdGEpOworfQorCisvKgorICogYXBwZW5kX3N0bXQKKyAqCQlQdXNo IGN0eC0+YnVmIG9udG8gY3R4LT5zdGF0ZW1lbnRzLgorICoKKyAqIFVzZWQgZm9yIGFsbCBEREwg ZW1pc3Npb25zLiAgV2hlbiBzY2hlbWFfcXVhbGlmaWVkIGlzIGZhbHNlLCB0aGUKKyAqIGFjdGl2 ZSBzZWFyY2hfcGF0aCBoYXMgYWxyZWFkeSBiZWVuIG5hcnJvd2VkIHRvIHRoZSBiYXNlIHNjaGVt YSwgc28KKyAqIHJ1bGV1dGlscyBoZWxwZXJzIChwZ19nZXRfaW5kZXhkZWZfZGRsLCBwZ19nZXRf cnVsZWRlZl9kZGwsCisgKiBwZ19nZXRfY29uc3RyYWludGRlZl9ib2R5LCBwZ19nZXRfc3RhdGlz dGljc29iamRlZl9kZGwpIHByb2R1Y2UKKyAqIHVucXVhbGlmaWVkIG5hbWVzIGZvciBzYW1lLXNj aGVtYSBvYmplY3RzIGF1dG9tYXRpY2FsbHkuCisgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfc3Rt dChUYWJsZURkbENvbnRleHQgKmN0eCkKK3sKKwljdHgtPnN0YXRlbWVudHMgPSBsYXBwZW5kKGN0 eC0+c3RhdGVtZW50cywgcHN0cmR1cChjdHgtPmJ1Zi5kYXRhKSk7Cit9CisKKy8qCisgKiBlbWl0 X2NyZWF0ZV90YWJsZV9zdG10CisgKgkJQnVpbGQgdGhlIGxlYWRpbmcgQ1JFQVRFIFRBQkxFIHN0 YXRlbWVudCwgaW5jbHVkaW5nIHBlcnNpc3RlbmNlCisgKgkJKFRFTVBPUkFSWSAvIFVOTE9HR0VE KSwgYm9keSAoY29sdW1uIGxpc3QgLyBPRiB0eXBlX25hbWUgLworICoJCVBBUlRJVElPTiBPRiBw YXJlbnQpLCBJTkhFUklUUywgUEFSVElUSU9OIEJZLCBVU0lORyBtZXRob2QsCisgKgkJV0lUSCAo cmVsb3B0aW9ucyksIFRBQkxFU1BBQ0UsIGFuZCBPTiBDT01NSVQuCisgKi8KK3N0YXRpYyB2b2lk CitlbWl0X2NyZWF0ZV90YWJsZV9zdG10KFRhYmxlRGRsQ29udGV4dCAqY3R4KQoreworCVJlbGF0 aW9uCXJlbCA9IGN0eC0+cmVsOworCWNoYXIJCXJlbHBlcnNpc3RlbmNlID0gcmVsLT5yZF9yZWwt PnJlbHBlcnNpc3RlbmNlOworCWNoYXIJCXJlbGtpbmQgPSByZWwtPnJkX3JlbC0+cmVsa2luZDsK Kwlib29sCQlpc190eXBlZCA9IE9pZElzVmFsaWQocmVsLT5yZF9yZWwtPnJlbG9mdHlwZSk7CisJ SGVhcFR1cGxlCWNsYXNzdHVwOworCURhdHVtCQlyZWxvcHREYXR1bTsKKwlib29sCQlyZWxvcHRJ c251bGw7CisKKwljbGFzc3R1cCA9IFNlYXJjaFN5c0NhY2hlMShSRUxPSUQsIE9iamVjdElkR2V0 RGF0dW0oY3R4LT5yZWxpZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChjbGFzc3R1cCkpCisJ CWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciByZWxhdGlvbiAldSIsIGN0eC0+ cmVsaWQpOworCisJcmVsb3B0RGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoUkVMT0lELCBjbGFzc3R1 cCwKKwkJCQkJCQkJICBBbnVtX3BnX2NsYXNzX3JlbG9wdGlvbnMsICZyZWxvcHRJc251bGwpOwor CisJcmVzZXRTdHJpbmdJbmZvKCZjdHgtPmJ1Zik7CisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygm Y3R4LT5idWYsICJDUkVBVEUgIik7CisJaWYgKHJlbHBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RF TkNFX1RFTVApCisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmN0eC0+YnVmLCAiVEVNUE9SQVJZ ICIpOworCWVsc2UgaWYgKHJlbHBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1VOTE9HR0VE KQorCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjdHgtPmJ1ZiwgIlVOTE9HR0VEICIpOworCWFw cGVuZFN0cmluZ0luZm8oJmN0eC0+YnVmLCAiVEFCTEUgJXMiLCBjdHgtPnF1YWxuYW1lKTsKKwor CWlmIChyZWwtPnJkX3JlbC0+cmVsaXNwYXJ0aXRpb24pCisJeworCQlPaWQJCQlwYXJlbnRPaWQg PSBnZXRfcGFydGl0aW9uX3BhcmVudChjdHgtPnJlbGlkLCB0cnVlKTsKKwkJY2hhcgkgICAqcGFy ZW50UXVhbCA9IGxvb2t1cF9yZWxuYW1lX2Zvcl9lbWl0KHBhcmVudE9pZCwKKwkJCQkJCQkJCQkJ CQkJIGN0eC0+c2NoZW1hX3F1YWxpZmllZCwKKwkJCQkJCQkJCQkJCQkJIGN0eC0+YmFzZV9uYW1l c3BhY2UpOworCQljaGFyCSAgICpwYXJlbnRSZWxuYW1lID0gZ2V0X3JlbF9uYW1lKHBhcmVudE9p ZCk7CisJCURhdHVtCQlib3VuZERhdHVtOworCQlib29sCQlib3VuZElzbnVsbDsKKwkJY2hhcgkg ICAqZm9yVmFsdWVzID0gTlVMTDsKKwkJY2hhcgkgICAqYm91bmRTdHIgPSBOVUxMOworCisJCWlm IChwYXJlbnRSZWxuYW1lID09IE5VTEwpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29k ZShFUlJDT0RFX1VOREVGSU5FRF9PQkpFQ1QpLAorCQkJCQkgZXJybXNnKCJwYXJ0aXRpb24gcGFy ZW50IHdpdGggT0lEICV1IGRvZXMgbm90IGV4aXN0IiwKKwkJCQkJCQlwYXJlbnRPaWQpLAorCQkJ CQkgZXJyZGV0YWlsKCJJdCBtYXkgaGF2ZSBiZWVuIGNvbmN1cnJlbnRseSBkcm9wcGVkLiIpKSk7 CisKKwkJYm91bmREYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihSRUxPSUQsIGNsYXNzdHVwLAorCQkJ CQkJCQkJIEFudW1fcGdfY2xhc3NfcmVscGFydGJvdW5kLCAmYm91bmRJc251bGwpOworCQlpZiAo IWJvdW5kSXNudWxsKQorCQl7CisJCQlOb2RlCSAgICpib3VuZE5vZGU7CisJCQlMaXN0CSAgICpk cGNvbnRleHQ7CisKKwkJCWJvdW5kU3RyID0gVGV4dERhdHVtR2V0Q1N0cmluZyhib3VuZERhdHVt KTsKKwkJCWJvdW5kTm9kZSA9IHN0cmluZ1RvTm9kZShib3VuZFN0cik7CisJCQlkcGNvbnRleHQg PSBkZXBhcnNlX2NvbnRleHRfZm9yKHBhcmVudFJlbG5hbWUsIHBhcmVudE9pZCk7CisJCQlmb3JW YWx1ZXMgPSBkZXBhcnNlX2V4cHJlc3Npb24oYm91bmROb2RlLCBkcGNvbnRleHQsIGZhbHNlLCBm YWxzZSk7CisJCX0KKworCQlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwgIiBQQVJUSVRJT04g T0YgJXMiLCBwYXJlbnRRdWFsKTsKKworCQkvKgorCQkgKiBJbmNsdWRlIE5PVCBOVUxMIGNvbnN0 cmFpbnRzIGluIHRoZSBQQVJUSVRJT04gT0YgY29sdW1uIHNwZWMKKwkJICogd2hlbiB0aGUgY2hp bGQncyBjb25zdHJhaW50IG5hbWUgZGlmZmVycyBmcm9tIHdoYXQgYXV0b21hdGljCisJCSAqIGlu aGVyaXRhbmNlIHdvdWxkIGdpdmUuICBXaGVuIFBBUlRJVElPTiBPRiBydW5zLCB0aGUgcGFyZW50 J3MKKwkJICogTk9UIE5VTEwgcHJvcGFnYXRlcyB0byB0aGUgY2hpbGQgdW5kZXIgdGhlIHBhcmVu dCdzIGNvbnN0cmFpbnQKKwkJICogbmFtZS4gIElmIHRoZSBjaGlsZCBjYXJyaWVzIGEgZGlmZmVy ZW50IG5hbWUgLSB3aGV0aGVyIGZyb20gYQorCQkgKiB1c2VyLXNwZWNpZmllZCBDT05TVFJBSU5U IGNsYXVzZSBvciBmcm9tIGEgcHJlLWV4aXN0aW5nIHRhYmxlCisJCSAqIHRoYXQgd2FzIGxhdGVy IGF0dGFjaGVkIGFzIGEgcGFydGl0aW9uIC0gd2UgbXVzdCBzcGVjaWZ5IGl0IGluCisJCSAqIHRo ZSBjb2x1bW4gc3BlYyBzbyB0aGUgbmFtZSBpcyBwcmVzZXJ2ZWQgb24gcmVwbGF5LgorCQkgKgor CQkgKiBXZSBzY2FuIHBnX2NvbnN0cmFpbnQgZGlyZWN0bHkgcmF0aGVyIHRoYW4gcmVseWluZyBv biBubl9lbnRyaWVzLAorCQkgKiBiZWNhdXNlIGFmdGVyIEFUVEFDSCBQQVJUSVRJT04gdGhlIGNo aWxkJ3MgY29uc3RyYWludCBjYW4gaGF2ZQorCQkgKiBjb25pc2xvY2FsPWZhbHNlIChwdXJlbHkg aW5oZXJpdGVkKSB3aGlsZSBzdGlsbCBjYXJyeWluZyB0aGUKKwkJICogb3JpZ2luYWwgbG9jYWwg bmFtZSAtIGEgY2FzZSB0aGF0IGNvbGxlY3RfbG9jYWxfbm90X251bGwgdHJhY2tzCisJCSAqIG9u bHkgYXMgaW5oZXJpdGVkX25vdG51bGwgd2l0aG91dCBwcmVzZXJ2aW5nIHRoZSBuYW1lLgorCQkg Ki8KKwkJeworCQkJUmVsYXRpb24JY29uUmVsOworCQkJU3lzU2NhbkRlc2MgY29uU2NhbjsKKwkJ CVNjYW5LZXlEYXRhIGNvbktleTsKKwkJCUhlYXBUdXBsZQljb25UdXA7CisJCQlTdHJpbmdJbmZv RGF0YSBjb2xzcGVjOworCQkJYm9vbAkJaGFzc3BlY3MgPSBmYWxzZTsKKworCQkJaW5pdFN0cmlu Z0luZm8oJmNvbHNwZWMpOworCisJCQljb25SZWwgPSB0YWJsZV9vcGVuKENvbnN0cmFpbnRSZWxh dGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJU2NhbktleUluaXQoJmNvbktleSwKKwkJCQkJ CUFudW1fcGdfY29uc3RyYWludF9jb25yZWxpZCwKKwkJCQkJCUJURXF1YWxTdHJhdGVneU51bWJl ciwgRl9PSURFUSwKKwkJCQkJCU9iamVjdElkR2V0RGF0dW0oY3R4LT5yZWxpZCkpOworCQkJY29u U2NhbiA9IHN5c3RhYmxlX2JlZ2luc2Nhbihjb25SZWwsIENvbnN0cmFpbnRSZWxpZFR5cGlkTmFt ZUluZGV4SWQsCisJCQkJCQkJCQkJIHRydWUsIE5VTEwsIDEsICZjb25LZXkpOworCisJCQl3aGls ZSAoSGVhcFR1cGxlSXNWYWxpZChjb25UdXAgPSBzeXN0YWJsZV9nZXRuZXh0KGNvblNjYW4pKSkK KwkJCXsKKwkJCQlGb3JtX3BnX2NvbnN0cmFpbnQgY29uID0gKEZvcm1fcGdfY29uc3RyYWludCkg R0VUU1RSVUNUKGNvblR1cCk7CisJCQkJRGF0dW0JCWNvbmtleURhdDsKKwkJCQlib29sCQljb25r ZXlOdWxsOworCQkJCUFycmF5VHlwZSAgKmNvbmtleUFycjsKKwkJCQlBdHRyTnVtYmVyCWF0dG51 bTsKKwkJCQljaGFyCSAgICpjb25uYW1lOworCQkJCWNoYXIJICAgKnBhcmVudF9jb25uYW1lOwor CQkJCWNoYXIJICAgKmF0dG5hbWU7CisKKwkJCQlpZiAoY29uLT5jb250eXBlICE9IENPTlNUUkFJ TlRfTk9UTlVMTCkKKwkJCQkJY29udGludWU7CisKKwkJCQljb25rZXlEYXQgPSBoZWFwX2dldGF0 dHIoY29uVHVwLCBBbnVtX3BnX2NvbnN0cmFpbnRfY29ua2V5LAorCQkJCQkJCQkJCSBSZWxhdGlv bkdldERlc2NyKGNvblJlbCksICZjb25rZXlOdWxsKTsKKwkJCQlpZiAoY29ua2V5TnVsbCkKKwkJ CQkJY29udGludWU7CisJCQkJY29ua2V5QXJyID0gRGF0dW1HZXRBcnJheVR5cGVQKGNvbmtleURh dCk7CisJCQkJaWYgKEFSUl9ORElNKGNvbmtleUFycikgIT0gMSB8fCBBUlJfRElNUyhjb25rZXlB cnIpWzBdIDwgMSB8fAorCQkJCQlBUlJfSEFTTlVMTChjb25rZXlBcnIpIHx8IEFSUl9FTEVNVFlQ RShjb25rZXlBcnIpICE9IElOVDJPSUQpCisJCQkJCWNvbnRpbnVlOworCQkJCWF0dG51bSA9ICgo aW50MTYgKikgQVJSX0RBVEFfUFRSKGNvbmtleUFycikpWzBdOworCisJCQkJYXR0bmFtZSA9IGdl dF9hdHRuYW1lKGN0eC0+cmVsaWQsIGF0dG51bSwgdHJ1ZSk7CisJCQkJaWYgKGF0dG5hbWUgPT0g TlVMTCkKKwkJCQkJY29udGludWU7CisKKwkJCQljb25uYW1lID0gcHN0cmR1cChOYW1lU3RyKGNv bi0+Y29ubmFtZSkpOworCisJCQkJLyoKKwkJCQkgKiBDaGVjayBpZiB0aGlzIG5hbWUgaXMgd2hh dCBQQVJUSVRJT04gT0Ygd291bGQgYXV0by1jcmVhdGUuCisJCQkJICogVGhlIHBhcmVudCBwcm9w YWdhdGVzIGl0cyBvd24gTk9UIE5VTEwgbmFtZSB0byB0aGUgY2hpbGQuCisJCQkJICogTG9vayB1 cCB0aGUgcGFyZW50J3MgTk9UIE5VTEwgY29uc3RyYWludCBuYW1lIGZvciB0aGlzIGNvbHVtbi4K KwkJCQkgKi8KKwkJCQlwYXJlbnRfY29ubmFtZSA9IE5VTEw7CisJCQkJeworCQkJCQlBdHRyTnVt YmVyCXBhcmVudEF0dG51bSA9IGdldF9hdHRudW0ocGFyZW50T2lkLCBhdHRuYW1lKTsKKworCQkJ CQlpZiAocGFyZW50QXR0bnVtICE9IEludmFsaWRBdHRyTnVtYmVyKQorCQkJCQl7CisJCQkJCQlS ZWxhdGlvbglwY29uUmVsID0KKwkJCQkJCQl0YWJsZV9vcGVuKENvbnN0cmFpbnRSZWxhdGlvbklk LCBBY2Nlc3NTaGFyZUxvY2spOworCQkJCQkJU2NhbktleURhdGEgcGNvbktleTsKKwkJCQkJCVN5 c1NjYW5EZXNjIHBjb25TY2FuOworCQkJCQkJSGVhcFR1cGxlCXBjb25UdXA7CisKKwkJCQkJCVNj YW5LZXlJbml0KCZwY29uS2V5LAorCQkJCQkJCQkJQW51bV9wZ19jb25zdHJhaW50X2NvbnJlbGlk LAorCQkJCQkJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCQkJCQkJT2Jq ZWN0SWRHZXREYXR1bShwYXJlbnRPaWQpKTsKKwkJCQkJCXBjb25TY2FuID0gc3lzdGFibGVfYmVn aW5zY2FuKHBjb25SZWwsCisJCQkJCQkJCQkJCQkJICBDb25zdHJhaW50UmVsaWRUeXBpZE5hbWVJ bmRleElkLAorCQkJCQkJCQkJCQkJCSAgdHJ1ZSwgTlVMTCwgMSwgJnBjb25LZXkpOworCQkJCQkJ d2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQocGNvblR1cCA9IHN5c3RhYmxlX2dldG5leHQocGNvblNj YW4pKSkKKwkJCQkJCXsKKwkJCQkJCQlGb3JtX3BnX2NvbnN0cmFpbnQgcGNvbiA9CisJCQkJCQkJ CShGb3JtX3BnX2NvbnN0cmFpbnQpIEdFVFNUUlVDVChwY29uVHVwKTsKKwkJCQkJCQlEYXR1bQkJ cGNvbmtleURhdDsKKwkJCQkJCQlib29sCQlwY29ua2V5TnVsbDsKKwkJCQkJCQlBcnJheVR5cGUg ICpwY29ua2V5QXJyOworCisJCQkJCQkJaWYgKHBjb24tPmNvbnR5cGUgIT0gQ09OU1RSQUlOVF9O T1ROVUxMKQorCQkJCQkJCQljb250aW51ZTsKKwkJCQkJCQlwY29ua2V5RGF0ID0gaGVhcF9nZXRh dHRyKHBjb25UdXAsCisJCQkJCQkJCQkJCQkJICBBbnVtX3BnX2NvbnN0cmFpbnRfY29ua2V5LAor CQkJCQkJCQkJCQkJCSAgUmVsYXRpb25HZXREZXNjcihwY29uUmVsKSwKKwkJCQkJCQkJCQkJCQkg ICZwY29ua2V5TnVsbCk7CisJCQkJCQkJaWYgKHBjb25rZXlOdWxsKQorCQkJCQkJCQljb250aW51 ZTsKKwkJCQkJCQlwY29ua2V5QXJyID0gRGF0dW1HZXRBcnJheVR5cGVQKHBjb25rZXlEYXQpOwor CQkJCQkJCWlmIChBUlJfTkRJTShwY29ua2V5QXJyKSA9PSAxICYmCisJCQkJCQkJCUFSUl9ESU1T KHBjb25rZXlBcnIpWzBdID49IDEgJiYKKwkJCQkJCQkJIUFSUl9IQVNOVUxMKHBjb25rZXlBcnIp ICYmCisJCQkJCQkJCUFSUl9FTEVNVFlQRShwY29ua2V5QXJyKSA9PSBJTlQyT0lEICYmCisJCQkJ CQkJCSgoaW50MTYgKikgQVJSX0RBVEFfUFRSKHBjb25rZXlBcnIpKVswXSA9PQorCQkJCQkJCQlw YXJlbnRBdHRudW0pCisJCQkJCQkJeworCQkJCQkJCQlwYXJlbnRfY29ubmFtZSA9IHBzdHJkdXAo TmFtZVN0cihwY29uLT5jb25uYW1lKSk7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCX0KKwkJCQkJ CX0KKwkJCQkJCXN5c3RhYmxlX2VuZHNjYW4ocGNvblNjYW4pOworCQkJCQkJdGFibGVfY2xvc2Uo cGNvblJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCQkJfQorCQkJCX0KKworCQkJCS8qCisJCQkJ ICogVGhlIGNoaWxkJ3MgTk9UIE5VTEwgbmVlZHMgaW5saW5lIHNwZWNpZmljYXRpb24gd2hlbiBp dHMgbmFtZQorCQkJCSAqIGRpZmZlcnMgZnJvbSB0aGUgcGFyZW50J3MgY29uc3RyYWludCBuYW1l ICh3aGljaCBpcyB3aGF0CisJCQkJICogUEFSVElUSU9OIE9GIHdvdWxkIGF1dG9tYXRpY2FsbHkg cHJvcGFnYXRlKS4gIElmIHRoZSBwYXJlbnQgaGFzCisJCQkJICogbm8gTk9UIE5VTEwgb24gdGhp cyBjb2x1bW4sIHRoZSBjaGlsZCdzIGNvbnN0cmFpbnQgd2FzIHB1cmVseQorCQkJCSAqIGxvY2Fs IGFuZCBhbHNvIG5lZWRzIHRvIGJlIHNwZWNpZmllZCBpbmxpbmUuCisJCQkJICovCisJCQkJaWYg KHBhcmVudF9jb25uYW1lID09IE5VTEwgfHwKKwkJCQkJc3RyY21wKGNvbm5hbWUsIHBhcmVudF9j b25uYW1lKSAhPSAwKQorCQkJCXsKKwkJCQkJYm9vbAkJbm9faW5oZXJpdCA9IGNvbi0+Y29ubm9p bmhlcml0OworCisJCQkJCWlmIChoYXNzcGVjcykKKwkJCQkJCWFwcGVuZFN0cmluZ0luZm9DaGFy KCZjb2xzcGVjLCAnLCcpOworCQkJCQlpZiAoY3R4LT5wcmV0dHkpCisJCQkJCQlhcHBlbmRTdHJp bmdJbmZvU3RyaW5nKCZjb2xzcGVjLCAiXG4gICAgIik7CisJCQkJCWVsc2UgaWYgKGhhc3NwZWNz KQorCQkJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmNvbHNwZWMsICcgJyk7CisJCQkJCWhhc3Nw ZWNzID0gdHJ1ZTsKKworCQkJCQlhcHBlbmRTdHJpbmdJbmZvKCZjb2xzcGVjLCAiQ09OU1RSQUlO VCAlcyBOT1QgTlVMTCAlcyIsCisJCQkJCQkJCQkgcXVvdGVfaWRlbnRpZmllcihjb25uYW1lKSwK KwkJCQkJCQkJCSBxdW90ZV9pZGVudGlmaWVyKGF0dG5hbWUpKTsKKwkJCQkJaWYgKG5vX2luaGVy aXQpCisJCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjb2xzcGVjLCAiIE5PIElOSEVSSVQi KTsKKworCQkJCQkvKgorCQkJCQkgKiBBbHNvIGFkZCB0byBza2lwX25vdG51bGxfb2lkcyBzbyBl bWl0X2xvY2FsX2NvbnN0cmFpbnRzCisJCQkJCSAqIGRvZXMgbm90IHRyeSB0byBlbWl0IGl0IGFn YWluIGFzIEFMVEVSIFRBQkxFIEFERCBDT05TVFJBSU5ULgorCQkJCQkgKi8KKwkJCQkJY3R4LT5z a2lwX25vdG51bGxfb2lkcyA9CisJCQkJCQlsYXBwZW5kX29pZChjdHgtPnNraXBfbm90bnVsbF9v aWRzLCBjb24tPm9pZCk7CisJCQkJfQorCisJCQkJcGZyZWUoY29ubmFtZSk7CisJCQkJcGZyZWUo YXR0bmFtZSk7CisJCQkJaWYgKHBhcmVudF9jb25uYW1lKQorCQkJCQlwZnJlZShwYXJlbnRfY29u bmFtZSk7CisJCQl9CisKKwkJCXN5c3RhYmxlX2VuZHNjYW4oY29uU2Nhbik7CisJCQl0YWJsZV9j bG9zZShjb25SZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkJCWlmIChoYXNzcGVjcykKKwkJCXsK KwkJCQlpZiAoY3R4LT5wcmV0dHkpCisJCQkJCWFwcGVuZFN0cmluZ0luZm8oJmN0eC0+YnVmLCAi IChcbiVzXG4pIiwgY29sc3BlYy5kYXRhKTsKKwkJCQllbHNlCisJCQkJCWFwcGVuZFN0cmluZ0lu Zm8oJmN0eC0+YnVmLCAiICglcykiLCBjb2xzcGVjLmRhdGEpOworCQkJfQorCQkJcGZyZWUoY29s c3BlYy5kYXRhKTsKKwkJfQorCisJCWFwcGVuZFN0cmluZ0luZm8oJmN0eC0+YnVmLCAiICVzIiwg Zm9yVmFsdWVzID8gZm9yVmFsdWVzIDogIkRFRkFVTFQiKTsKKwkJaWYgKGZvclZhbHVlcykKKwkJ CXBmcmVlKGZvclZhbHVlcyk7CisJCWlmIChib3VuZFN0cikKKwkJCXBmcmVlKGJvdW5kU3RyKTsK KwkJcGZyZWUocGFyZW50UXVhbCk7CisJCXBmcmVlKHBhcmVudFJlbG5hbWUpOworCX0KKwllbHNl IGlmIChpc190eXBlZCkKKwl7CisJCWNoYXIJICAgKnR5cG5hbWUgPSBmb3JtYXRfdHlwZV9iZV9x dWFsaWZpZWQocmVsLT5yZF9yZWwtPnJlbG9mdHlwZSk7CisKKwkJYXBwZW5kU3RyaW5nSW5mbygm Y3R4LT5idWYsICIgT0YgJXMiLCB0eXBuYW1lKTsKKwkJcGZyZWUodHlwbmFtZSk7CisKKwkJYXBw ZW5kX3R5cGVkX2NvbHVtbl9vdmVycmlkZXMoJmN0eC0+YnVmLCByZWwsIGN0eC0+cHJldHR5LAor CQkJCQkJCQkJICBpc19raW5kX2luY2x1ZGVkKGN0eCwgVEFCTEVfRERMX0tJTkRfQ0hFQ0spLAor CQkJCQkJCQkJICBjdHgtPm5uX2VudHJpZXMpOworCX0KKwllbHNlCisJeworCQlMaXN0CSAgICpw YXJlbnRzOworCQlMaXN0Q2VsbCAgICpsYzsKKwkJYm9vbAkJZmlyc3Q7CisJCWludAkJCWJ1Zl9s ZW5fYmVmb3JlOworCisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmN0eC0+YnVmLCAiICgiKTsK KworCQlidWZfbGVuX2JlZm9yZSA9IGN0eC0+YnVmLmxlbjsKKwkJYXBwZW5kX2NvbHVtbl9kZWZz KCZjdHgtPmJ1ZiwgcmVsLCBjdHgtPnByZXR0eSwKKwkJCQkJCSAgIGlzX2tpbmRfaW5jbHVkZWQo Y3R4LCBUQUJMRV9ERExfS0lORF9DSEVDSyksCisJCQkJCQkgICBjdHgtPnNjaGVtYV9xdWFsaWZp ZWQsIGN0eC0+bm5fZW50cmllcyk7CisKKwkJLyoKKwkJICogRm9yIElOSEVSSVRTIGNoaWxkcmVu LCBpbmhlcml0ZWQgY29sdW1ucyB3aXRoIGEgbG9jYWwgTk9UIE5VTEwKKwkJICogY2Fycnlpbmcg YSB1c2VyLWRlZmluZWQgbmFtZSBuZWVkIGEgdGFibGUtbGV2ZWwgQ09OU1RSQUlOVCBjbGF1c2UK KwkJICogaGVyZS4gIFdpdGhvdXQgaXQsIHdoZW4gdGhlIHBhcmVudCdzIE5PVCBOVUxMIGlzIGFk ZGVkIGFuZAorCQkgKiBwcm9wYWdhdGVzIHRvIHRoZSBjaGlsZCwgYSBzdWJzZXF1ZW50IG91dC1v Zi1saW5lIEFMVEVSIFRBQkxFIEFERAorCQkgKiBDT05TVFJBSU5UIGZhaWxzIGJlY2F1c2UgYSBO T1QgTlVMTCBhbHJlYWR5IGNvdmVycyB0aGUgY29sdW1uLgorCQkgKiBFbWl0dGluZyB0aGUgY29u c3RyYWludCBpbmxpbmUgYXQgQ1JFQVRFIFRBQkxFIHRpbWUgY2F1c2VzIGl0IHRvCisJCSAqIG1l cmdlIGNvcnJlY3RseSB3aXRoIHRoZSBwYXJlbnQncyBwcm9wYWdhdGVkIGNvbnN0cmFpbnQuCisJ CSAqLworCQl7CisJCQlUdXBsZURlc2MJdHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IocmVsKTsK KwkJCWJvb2wJCWFueV9jb250ZW50ID0gKGN0eC0+YnVmLmxlbiA+IGJ1Zl9sZW5fYmVmb3JlKTsK KworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCB0dXBkZXNjLT5uYXR0czsgaSsrKQorCQkJeworCQkJ CUZvcm1fcGdfYXR0cmlidXRlIGF0dCA9IFR1cGxlRGVzY0F0dHIodHVwZGVzYywgaSk7CisJCQkJ TG9jYWxOb3ROdWxsRW50cnkgKm5uOworCisJCQkJaWYgKGF0dC0+YXR0aXNkcm9wcGVkIHx8IGF0 dC0+YXR0aXNsb2NhbCkKKwkJCQkJY29udGludWU7CisKKwkJCQlubiA9ICZjdHgtPm5uX2VudHJp ZXNbYXR0LT5hdHRudW1dOworCQkJCWlmIChubi0+Y29ub2lkID09IEludmFsaWRPaWQgfHwgbm4t PmlzX2F1dG8pCisJCQkJCWNvbnRpbnVlOworCisJCQkJaWYgKGFueV9jb250ZW50KQorCQkJCQlh cHBlbmRTdHJpbmdJbmZvQ2hhcigmY3R4LT5idWYsICcsJyk7CisJCQkJaWYgKGN0eC0+cHJldHR5 KQorCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjdHgtPmJ1ZiwgIlxuICAgICIpOworCQkJ CWVsc2UgaWYgKGFueV9jb250ZW50KQorCQkJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmY3R4LT5i dWYsICcgJyk7CisJCQkJYW55X2NvbnRlbnQgPSB0cnVlOworCisJCQkJYXBwZW5kU3RyaW5nSW5m bygmY3R4LT5idWYsICJDT05TVFJBSU5UICVzIE5PVCBOVUxMICVzIiwKKwkJCQkJCQkJIHF1b3Rl X2lkZW50aWZpZXIobm4tPm5hbWUpLAorCQkJCQkJCQkgcXVvdGVfaWRlbnRpZmllcihOYW1lU3Ry KGF0dC0+YXR0bmFtZSkpKTsKKwkJCQlpZiAobm4tPm5vX2luaGVyaXQpCisJCQkJCWFwcGVuZFN0 cmluZ0luZm9TdHJpbmcoJmN0eC0+YnVmLCAiIE5PIElOSEVSSVQiKTsKKwkJCX0KKwkJfQorCisJ CWlmIChjdHgtPnByZXR0eSkKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmN0eC0+YnVmLCAi XG4pIik7CisJCWVsc2UKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZjdHgtPmJ1ZiwgJyknKTsK KworCQlwYXJlbnRzID0gZmluZF9pbmhlcml0YW5jZV9wYXJlbnRzKGN0eC0+cmVsaWQsIE5vTG9j ayk7CisJCWlmIChwYXJlbnRzICE9IE5JTCkKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmlu ZygmY3R4LT5idWYsICIgSU5IRVJJVFMgKCIpOworCQkJZmlyc3QgPSB0cnVlOworCQkJZm9yZWFj aChsYywgcGFyZW50cykKKwkJCXsKKwkJCQlPaWQJCQlwb2lkID0gbGZpcnN0X29pZChsYyk7CisJ CQkJY2hhcgkgICAqcG5hbWUgPSBsb29rdXBfcmVsbmFtZV9mb3JfZW1pdChwb2lkLAorCQkJCQkJ CQkJCQkJCQkJY3R4LT5zY2hlbWFfcXVhbGlmaWVkLAorCQkJCQkJCQkJCQkJCQkJY3R4LT5iYXNl X25hbWVzcGFjZSk7CisKKwkJCQlpZiAoIWZpcnN0KQorCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3Ry aW5nKCZjdHgtPmJ1ZiwgIiwgIik7CisJCQkJZmlyc3QgPSBmYWxzZTsKKwkJCQlhcHBlbmRTdHJp bmdJbmZvU3RyaW5nKCZjdHgtPmJ1ZiwgcG5hbWUpOworCQkJCXBmcmVlKHBuYW1lKTsKKwkJCX0K KwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZjdHgtPmJ1ZiwgJyknKTsKKwkJCWxpc3RfZnJlZShw YXJlbnRzKTsKKwkJfQorCX0KKworCWlmIChyZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9ORURf VEFCTEUpCisJeworCQlEYXR1bQkJcGFydGtleURhdHVtOworCQljaGFyCSAgICpwYXJ0a2V5Owor CisJCXBhcnRrZXlEYXR1bSA9IE9pZEZ1bmN0aW9uQ2FsbDEoRl9QR19HRVRfUEFSVEtFWURFRiwK KwkJCQkJCQkJCQlPYmplY3RJZEdldERhdHVtKGN0eC0+cmVsaWQpKTsKKwkJcGFydGtleSA9IFRl eHREYXR1bUdldENTdHJpbmcocGFydGtleURhdHVtKTsKKwkJYXBwZW5kU3RyaW5nSW5mbygmY3R4 LT5idWYsICIgUEFSVElUSU9OIEJZICVzIiwgcGFydGtleSk7CisJCXBmcmVlKHBhcnRrZXkpOwor CX0KKworCWlmIChPaWRJc1ZhbGlkKHJlbC0+cmRfcmVsLT5yZWxhbSkgJiYKKwkJcmVsLT5yZF9y ZWwtPnJlbGFtICE9IEhFQVBfVEFCTEVfQU1fT0lEKQorCXsKKwkJY2hhcgkgICAqYW1uYW1lID0g Z2V0X2FtX25hbWUocmVsLT5yZF9yZWwtPnJlbGFtKTsKKworCQlpZiAoYW1uYW1lICE9IE5VTEwp CisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm8oJmN0eC0+YnVmLCAiIFVTSU5HICVzIiwKKwkJCQkJ CQkgcXVvdGVfaWRlbnRpZmllcihhbW5hbWUpKTsKKwkJCXBmcmVlKGFtbmFtZSk7CisJCX0KKwl9 CisKKwlpZiAoIXJlbG9wdElzbnVsbCkKKwl7CisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmN0 eC0+YnVmLCAiIFdJVEggKCIpOworCQlnZXRfcmVsb3B0aW9ucygmY3R4LT5idWYsIHJlbG9wdERh dHVtKTsKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmN0eC0+YnVmLCAnKScpOworCX0KKworCVJl bGVhc2VTeXNDYWNoZShjbGFzc3R1cCk7CisKKwlpZiAocmVscGVyc2lzdGVuY2UgPT0gUkVMUEVS U0lTVEVOQ0VfVEVNUCkKKwl7CisJCU9uQ29tbWl0QWN0aW9uIG9jID0gZ2V0X29uX2NvbW1pdF9h Y3Rpb24oY3R4LT5yZWxpZCk7CisKKwkJaWYgKG9jID09IE9OQ09NTUlUX0RFTEVURV9ST1dTKQor CQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmY3R4LT5idWYsICIgT04gQ09NTUlUIERFTEVURSBS T1dTIik7CisJCWVsc2UgaWYgKG9jID09IE9OQ09NTUlUX0RST1ApCisJCQlhcHBlbmRTdHJpbmdJ bmZvU3RyaW5nKCZjdHgtPmJ1ZiwgIiBPTiBDT01NSVQgRFJPUCIpOworCX0KKworCWlmICghY3R4 LT5ub190YWJsZXNwYWNlICYmIE9pZElzVmFsaWQocmVsLT5yZF9yZWwtPnJlbHRhYmxlc3BhY2Up KQorCXsKKwkJY2hhcgkgICAqdHNuYW1lID0gZ2V0X3RhYmxlc3BhY2VfbmFtZShyZWwtPnJkX3Jl bC0+cmVsdGFibGVzcGFjZSk7CisKKwkJaWYgKHRzbmFtZSAhPSBOVUxMKQorCQl7CisJCQlhcHBl bmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwgIiBUQUJMRVNQQUNFICVzIiwKKwkJCQkJCQkgcXVvdGVf aWRlbnRpZmllcih0c25hbWUpKTsKKwkJCXBmcmVlKHRzbmFtZSk7CisJCX0KKwl9CisKKwlhcHBl bmRTdHJpbmdJbmZvQ2hhcigmY3R4LT5idWYsICc7Jyk7CisJYXBwZW5kX3N0bXQoY3R4KTsKK30K KworLyoKKyAqIGVtaXRfb3duZXJfc3RtdAorICoJCUFMVEVSIFRBQkxFIHF1YWxuYW1lIE9XTkVS IFRPIHJvbGUuCisgKi8KK3N0YXRpYyB2b2lkCitlbWl0X293bmVyX3N0bXQoVGFibGVEZGxDb250 ZXh0ICpjdHgpCit7CisJY2hhcgkgICAqb3duZXI7CisKKwlpZiAoY3R4LT5ub19vd25lcikKKwkJ cmV0dXJuOworCisJb3duZXIgPSBHZXRVc2VyTmFtZUZyb21JZChjdHgtPnJlbC0+cmRfcmVsLT5y ZWxvd25lciwgZmFsc2UpOworCXJlc2V0U3RyaW5nSW5mbygmY3R4LT5idWYpOworCWFwcGVuZFN0 cmluZ0luZm8oJmN0eC0+YnVmLCAiQUxURVIgVEFCTEUgJXMgT1dORVIgVE8gJXM7IiwKKwkJCQkJ IGN0eC0+cXVhbG5hbWUsIHF1b3RlX2lkZW50aWZpZXIob3duZXIpKTsKKwlhcHBlbmRfc3RtdChj dHgpOworCXBmcmVlKG93bmVyKTsKK30KKworLyoKKyAqIGNoaWxkX2RlZmF1bHRfaW5oZXJpdGVk X2Zyb21fcGFyZW50CisgKgkJUmV0dXJuIHRydWUgaWYgY2hpbGRfYWRiaW4gaXMgaWRlbnRpY2Fs IHRvIHRoZSBhZGJpbiBzdG9yZWQgZm9yCisgKgkJYXR0bmFtZSBvbiBhbnkgaW1tZWRpYXRlIHBh cmVudCBvZiBjaGlsZE9pZC4KKyAqCisgKgkJUG9zdGdyZVNRTCBjb3BpZXMgdGhlIGFkYmluIGV4 cHJlc3Npb24gdmVyYmF0aW0gZnJvbSBwYXJlbnQgdG8gY2hpbGQKKyAqCQl3aGVuIGEgcGFydGl0 aW9uIGlzIGNyZWF0ZWQsIHNvIGEgYnl0ZS1mb3ItYnl0ZSBtYXRjaCBtZWFucyB0aGUgY2hpbGQK KyAqCQlkaWQgbm90IG92ZXJyaWRlIHRoZSBkZWZhdWx0IGxvY2FsbHkuICBGb3IgcmVndWxhciBp bmhlcml0YW5jZSB0aGUKKyAqCQlwYXJlbnQgdHlwaWNhbGx5IGhhcyBubyBkZWZhdWx0IGF0IGFs bCAoYXR0aGFzZGVmPWZhbHNlKSwgc28gdGhlCisgKgkJZnVuY3Rpb24gcmV0dXJucyBmYWxzZSBh bmQgdGhlIG92ZXJyaWRlIGlzIGNvcnJlY3RseSBlbWl0dGVkLgorICovCitzdGF0aWMgYm9vbAor Y2hpbGRfZGVmYXVsdF9pbmhlcml0ZWRfZnJvbV9wYXJlbnQoT2lkIGNoaWxkT2lkLCBjb25zdCBj aGFyICphdHRuYW1lLAorCQkJCQkJCQkJY29uc3QgY2hhciAqY2hpbGRfYWRiaW4pCit7CisJTGlz dAkgICAqcGFyZW50czsKKwlMaXN0Q2VsbCAgICpsYzsKKwlib29sCQlyZXN1bHQgPSBmYWxzZTsK KworCXBhcmVudHMgPSBmaW5kX2luaGVyaXRhbmNlX3BhcmVudHMoY2hpbGRPaWQsIE5vTG9jayk7 CisKKwlmb3JlYWNoKGxjLCBwYXJlbnRzKQorCXsKKwkJT2lkCQkJcGFyZW50T2lkID0gbGZpcnN0 X29pZChsYyk7CisJCVJlbGF0aW9uCXBhcmVudFJlbDsKKwkJQXR0ck51bWJlcglwYXJlbnRBdHRu dW07CisJCVR1cGxlQ29uc3RyICpjb25zdHI7CisKKwkJcGFyZW50UmVsID0gdHJ5X3RhYmxlX29w ZW4ocGFyZW50T2lkLCBBY2Nlc3NTaGFyZUxvY2spOworCQlpZiAocGFyZW50UmVsID09IE5VTEwp CisJCQljb250aW51ZTsKKworCQlwYXJlbnRBdHRudW0gPSBnZXRfYXR0bnVtKHBhcmVudE9pZCwg YXR0bmFtZSk7CisJCWlmIChwYXJlbnRBdHRudW0gIT0gSW52YWxpZEF0dHJOdW1iZXIpCisJCXsK KwkJCUZvcm1fcGdfYXR0cmlidXRlIHBhcmVudEF0dCA9CisJCQkJVHVwbGVEZXNjQXR0cihSZWxh dGlvbkdldERlc2NyKHBhcmVudFJlbCksIHBhcmVudEF0dG51bSAtIDEpOworCisJCQlpZiAocGFy ZW50QXR0LT5hdHRoYXNkZWYpCisJCQl7CisJCQkJY29uc3RyID0gUmVsYXRpb25HZXREZXNjcihw YXJlbnRSZWwpLT5jb25zdHI7CisJCQkJaWYgKGNvbnN0ciAhPSBOVUxMKQorCQkJCXsKKwkJCQkJ Zm9yIChpbnQgaiA9IDA7IGogPCBjb25zdHItPm51bV9kZWZ2YWw7IGorKykKKwkJCQkJeworCQkJ CQkJaWYgKGNvbnN0ci0+ZGVmdmFsW2pdLmFkbnVtID09IHBhcmVudEF0dG51bSAmJgorCQkJCQkJ CXN0cmNtcChjb25zdHItPmRlZnZhbFtqXS5hZGJpbiwgY2hpbGRfYWRiaW4pID09IDApCisJCQkJ CQl7CisJCQkJCQkJcmVzdWx0ID0gdHJ1ZTsKKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJ fQorCQkJCX0KKwkJCX0KKwkJfQorCisJCXRhYmxlX2Nsb3NlKHBhcmVudFJlbCwgQWNjZXNzU2hh cmVMb2NrKTsKKwkJaWYgKHJlc3VsdCkKKwkJCWJyZWFrOworCX0KKworCWxpc3RfZnJlZShwYXJl bnRzKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogcGFyZW50X2hhc19kZWZhdWx0X2Zv cl9jb2wKKyAqCQlSZXR1cm4gdHJ1ZSBpZiBhbnkgaW1tZWRpYXRlIHBhcmVudCBvZiBjaGlsZE9p ZCBoYXMgYSBub24tZ2VuZXJhdGVkCisgKgkJREVGQVVMVCBleHByZXNzaW9uIG9uIHRoZSBjb2x1 bW4gbmFtZWQgYXR0bmFtZS4KKyAqCisgKgkJVXNlZCB0byBkZXRlY3QgaW5oZXJpdGVkIGNvbHVt bnMgd2hlcmUgdGhlIGNoaWxkIGRyb3BwZWQgdGhlIHBhcmVudCdzCisgKgkJZGVmYXVsdDogYWZ0 ZXIgUEFSVElUSU9OIE9GIC8gSU5IRVJJVFMgdGhlIHBhcmVudCBkZWZhdWx0IGlzIHJlLWFwcGxp ZWQsCisgKgkJc28gd2UgbXVzdCBlbWl0IEFMVEVSIFRBQkxFIE9OTFkgY2hpbGQgQUxURVIgQ09M VU1OIGNvbCBEUk9QIERFRkFVTFQuCisgKi8KK3N0YXRpYyBib29sCitwYXJlbnRfaGFzX2RlZmF1 bHRfZm9yX2NvbChPaWQgY2hpbGRPaWQsIGNvbnN0IGNoYXIgKmF0dG5hbWUpCit7CisJTGlzdAkg ICAqcGFyZW50czsKKwlMaXN0Q2VsbCAgICpsYzsKKwlib29sCQlyZXN1bHQgPSBmYWxzZTsKKwor CXBhcmVudHMgPSBmaW5kX2luaGVyaXRhbmNlX3BhcmVudHMoY2hpbGRPaWQsIE5vTG9jayk7CisJ Zm9yZWFjaChsYywgcGFyZW50cykKKwl7CisJCU9pZAkJCXBhcmVudE9pZCA9IGxmaXJzdF9vaWQo bGMpOworCQlBdHRyTnVtYmVyCXBhcmVudEF0dG51bSA9IGdldF9hdHRudW0ocGFyZW50T2lkLCBh dHRuYW1lKTsKKworCQlpZiAocGFyZW50QXR0bnVtICE9IEludmFsaWRBdHRyTnVtYmVyKQorCQl7 CisJCQlIZWFwVHVwbGUJYXR0VHVwID0gU2VhcmNoU3lzQ2FjaGUyKEFUVE5VTSwKKwkJCQkJCQkJ CQkJCSBPYmplY3RJZEdldERhdHVtKHBhcmVudE9pZCksCisJCQkJCQkJCQkJCQkgSW50MTZHZXRE YXR1bShwYXJlbnRBdHRudW0pKTsKKworCQkJaWYgKEhlYXBUdXBsZUlzVmFsaWQoYXR0VHVwKSkK KwkJCXsKKwkJCQlGb3JtX3BnX2F0dHJpYnV0ZSBwYXJlbnRBdHQgPSAoRm9ybV9wZ19hdHRyaWJ1 dGUpIEdFVFNUUlVDVChhdHRUdXApOworCisJCQkJaWYgKHBhcmVudEF0dC0+YXR0aGFzZGVmICYm IHBhcmVudEF0dC0+YXR0Z2VuZXJhdGVkID09ICdcMCcpCisJCQkJCXJlc3VsdCA9IHRydWU7CisJ CQkJUmVsZWFzZVN5c0NhY2hlKGF0dFR1cCk7CisJCQl9CisJCX0KKwkJaWYgKHJlc3VsdCkKKwkJ CWJyZWFrOworCX0KKwlsaXN0X2ZyZWUocGFyZW50cyk7CisJcmV0dXJuIHJlc3VsdDsKK30KKwor LyoKKyAqIGVtaXRfY2hpbGRfZGVmYXVsdF9vdmVycmlkZXMKKyAqCQlBTFRFUiBUQUJMRSBPTkxZ IHF1YWxuYW1lIEFMVEVSIENPTFVNTiBjb2wgU0VUIERFRkFVTFQgZXhwciAtIG9uZSBwZXIKKyAq CQlpbmhlcml0ZWQgKGF0dGlzbG9jYWw9ZmFsc2UpIG5vbi1nZW5lcmF0ZWQgY29sdW1uIHRoYXQg Y2FycmllcyBhCisgKgkJZGVmYXVsdCB3aGljaCBkaWZmZXJzIGZyb20gZXZlcnkgaW1tZWRpYXRl IHBhcmVudCdzIGRlZmF1bHQuICBVc2luZworICoJCU9OTFkgcHJldmVudHMgdGhlIHN0YXRlbWVu dCBmcm9tIGNhc2NhZGluZyBpbnRvIGdyYW5kY2hpbGRyZW4gYW5kCisgKgkJb3ZlcndyaXRpbmcg dGhlaXIgb3duIGRlZmF1bHRzLiAgRGVmYXVsdHMgdGhhdCBhcmUgc2ltcGx5IGluaGVyaXRlZAor ICoJCXVuY2hhbmdlZCBmcm9tIGEgcGFyZW50IGFyZSBza2lwcGVkIHRvIGF2b2lkIHJlZHVuZGFu dCBvdXRwdXQuCisgKgkJR2VuZXJhdGVkIGNvbHVtbnMgYXJlIHNraXBwZWQ6IHRoZWlyIGV4cHJl c3Npb24gaXMgaW5oZXJpdGVkCisgKgkJYXV0b21hdGljYWxseSBhbmQgU0VUIERFRkFVTFQgd291 bGQgZmFpbCBhdCByZXBsYXkuCisgKgorICoJCUFsc28gZW1pdHMgQUxURVIgVEFCTEUgT05MWSAu Li4gRFJPUCBERUZBVUxUIGZvciBpbmhlcml0ZWQgY29sdW1ucworICoJCXdoZXJlIHRoZSBjaGls ZCBleHBsaWNpdGx5IGRyb3BwZWQgdGhlIHBhcmVudCdzIGRlZmF1bHQ6IGFmdGVyCisgKgkJUEFS VElUSU9OIE9GIC8gSU5IRVJJVFMgdGhlIHBhcmVudCBkZWZhdWx0IGlzIHJlLWFwcGxpZWQsIGFu ZCB0aGUKKyAqCQlEUk9QIERFRkFVTFQgaXMgbmVlZGVkIHRvIHJlc3RvcmUgdGhlIGNoaWxkJ3Mg c3RhdGUuCisgKi8KK3N0YXRpYyB2b2lkCitlbWl0X2NoaWxkX2RlZmF1bHRfb3ZlcnJpZGVzKFRh YmxlRGRsQ29udGV4dCAqY3R4KQoreworCVR1cGxlRGVzYwl0dXBkZXNjID0gUmVsYXRpb25HZXRE ZXNjcihjdHgtPnJlbCk7CisJVHVwbGVDb25zdHIgKmNvbnN0ciA9IHR1cGRlc2MtPmNvbnN0cjsK KwlMaXN0CSAgICpkcGNvbnRleHQgPSBOSUw7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IHR1cGRl c2MtPm5hdHRzOyBpKyspCisJeworCQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHQgPSBUdXBsZURlc2NB dHRyKHR1cGRlc2MsIGkpOworCQljb25zdCBjaGFyICphZGJpbiA9IE5VTEw7CisJCWNoYXIJICAg KmRlZnN0cjsKKworCQlpZiAoYXR0LT5hdHRpc2Ryb3BwZWQgfHwgYXR0LT5hdHRpc2xvY2FsKQor CQkJY29udGludWU7CisJCWlmIChhdHQtPmF0dGdlbmVyYXRlZCAhPSAnXDAnKQorCQkJY29udGlu dWU7CisKKwkJaWYgKCFhdHQtPmF0dGhhc2RlZikKKwkJeworCQkJLyoKKwkJCSAqIENvbHVtbiBo YXMgbm8gZGVmYXVsdCBidXQgYSBwYXJlbnQgZG9lczogYWZ0ZXIgUEFSVElUSU9OIE9GIC8KKwkJ CSAqIElOSEVSSVRTIHRoZSBwYXJlbnQncyBkZWZhdWx0IGlzIHJlLWFwcGxpZWQsIHNvIGVtaXQg RFJPUAorCQkJICogREVGQVVMVCB0byByZXN0b3JlIHRoZSBkcm9wcGVkIHN0YXRlLgorCQkJICov CisJCQlpZiAocGFyZW50X2hhc19kZWZhdWx0X2Zvcl9jb2woY3R4LT5yZWxpZCwgTmFtZVN0cihh dHQtPmF0dG5hbWUpKSkKKwkJCXsKKwkJCQlyZXNldFN0cmluZ0luZm8oJmN0eC0+YnVmKTsKKwkJ CQlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwKKwkJCQkJCQkJICJBTFRFUiBUQUJMRSBPTkxZ ICVzIEFMVEVSIENPTFVNTiAlcyBEUk9QIERFRkFVTFQ7IiwKKwkJCQkJCQkJIGN0eC0+cXVhbG5h bWUsCisJCQkJCQkJCSBxdW90ZV9pZGVudGlmaWVyKE5hbWVTdHIoYXR0LT5hdHRuYW1lKSkpOwor CQkJCWFwcGVuZF9zdG10KGN0eCk7CisJCQl9CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIExv Y2F0ZSB0aGUgcmF3IGFkYmluIGZvciBwYXJlbnQtY29tcGFyaXNvbiBhbmQgZm9yIGRlcGFyc2Uu ICovCisJCWlmIChjb25zdHIgIT0gTlVMTCkKKwkJeworCQkJZm9yIChpbnQgaiA9IDA7IGogPCBj b25zdHItPm51bV9kZWZ2YWw7IGorKykKKwkJCXsKKwkJCQlpZiAoY29uc3RyLT5kZWZ2YWxbal0u YWRudW0gPT0gYXR0LT5hdHRudW0pCisJCQkJeworCQkJCQlhZGJpbiA9IGNvbnN0ci0+ZGVmdmFs W2pdLmFkYmluOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKwkJaWYgKGFkYmluID09 IE5VTEwpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBTa2lwIGNvbHVtbnMgd2hvc2UgZGVm YXVsdCBleHByZXNzaW9uIGlzIGlkZW50aWNhbCB0byBhIHBhcmVudCdzOworCQkgKiB0aGUgY2hp bGQgbWVyZWx5IGluaGVyaXRlZCBpdCAodHlwaWNhbCBmb3IgcGFydGl0aW9uIGNoaWxkcmVuKS4K KwkJICogQW4gZXhwbGljaXQgbG9jYWwgb3ZlcnJpZGUgd2lsbCBoYXZlIGEgZGlmZmVyZW50IGFk YmluLgorCQkgKi8KKwkJaWYgKGNoaWxkX2RlZmF1bHRfaW5oZXJpdGVkX2Zyb21fcGFyZW50KGN0 eC0+cmVsaWQsCisJCQkJCQkJCQkJCQlOYW1lU3RyKGF0dC0+YXR0bmFtZSksCisJCQkJCQkJCQkJ CQlhZGJpbikpCisJCQljb250aW51ZTsKKworCQlkZWZzdHIgPSBmaW5kX2F0dHJkZWZfdGV4dChj dHgtPnJlbCwgYXR0LT5hdHRudW0sICZkcGNvbnRleHQpOworCQlpZiAoZGVmc3RyID09IE5VTEwp CisJCQljb250aW51ZTsKKworCQlyZXNldFN0cmluZ0luZm8oJmN0eC0+YnVmKTsKKwkJYXBwZW5k U3RyaW5nSW5mbygmY3R4LT5idWYsCisJCQkJCQkgIkFMVEVSIFRBQkxFIE9OTFkgJXMgQUxURVIg Q09MVU1OICVzIFNFVCBERUZBVUxUICVzOyIsCisJCQkJCQkgY3R4LT5xdWFsbmFtZSwKKwkJCQkJ CSBxdW90ZV9pZGVudGlmaWVyKE5hbWVTdHIoYXR0LT5hdHRuYW1lKSksCisJCQkJCQkgZGVmc3Ry KTsKKwkJYXBwZW5kX3N0bXQoY3R4KTsKKwkJcGZyZWUoZGVmc3RyKTsKKwl9Cit9CisKKy8qCisg KiBlbWl0X2F0dG9wdGlvbnMKKyAqCQlBTFRFUiBUQUJMRSBxdWFsbmFtZSBBTFRFUiBDT0xVTU4g Y29sIFNFVCAoLi4uKSAtIG9uZSBwZXIgY29sdW1uCisgKgkJd2l0aCBub24tbnVsbCBwZ19hdHRy aWJ1dGUuYXR0b3B0aW9ucy4gIFRoZSBpbmxpbmUgZm9ybSBvZiB0aGVzZQorICoJCW9wdGlvbnMg aXNuJ3QgYXZhaWxhYmxlIGluIENSRUFURSBUQUJMRSwgc28gdGhleSBjb21lIG91dCBoZXJlLgor ICovCitzdGF0aWMgdm9pZAorZW1pdF9hdHRvcHRpb25zKFRhYmxlRGRsQ29udGV4dCAqY3R4KQor eworCVR1cGxlRGVzYwl0dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihjdHgtPnJlbCk7CisKKwlm b3IgKGludCBpID0gMDsgaSA8IHR1cGRlc2MtPm5hdHRzOyBpKyspCisJeworCQlGb3JtX3BnX2F0 dHJpYnV0ZSBhdHQgPSBUdXBsZURlc2NBdHRyKHR1cGRlc2MsIGkpOworCQlIZWFwVHVwbGUJYXR0 VHVwOworCQlEYXR1bQkJb3B0RGF0dW07CisJCWJvb2wJCW9wdElzbnVsbDsKKworCQlpZiAoYXR0 LT5hdHRpc2Ryb3BwZWQpCisJCQljb250aW51ZTsKKworCQlhdHRUdXAgPSBTZWFyY2hTeXNDYWNo ZTIoQVRUTlVNLAorCQkJCQkJCQkgT2JqZWN0SWRHZXREYXR1bShjdHgtPnJlbGlkKSwKKwkJCQkJ CQkJIEludDE2R2V0RGF0dW0oYXR0LT5hdHRudW0pKTsKKwkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlk KGF0dFR1cCkpCisJCQljb250aW51ZTsKKworCQlvcHREYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihB VFROVU0sIGF0dFR1cCwKKwkJCQkJCQkJICAgQW51bV9wZ19hdHRyaWJ1dGVfYXR0b3B0aW9ucywg Jm9wdElzbnVsbCk7CisJCWlmICghb3B0SXNudWxsKQorCQl7CisJCQlyZXNldFN0cmluZ0luZm8o JmN0eC0+YnVmKTsKKwkJCWFwcGVuZFN0cmluZ0luZm8oJmN0eC0+YnVmLAorCQkJCQkJCSAiQUxU RVIgVEFCTEUgJXMgQUxURVIgQ09MVU1OICVzIFNFVCAoIiwKKwkJCQkJCQkgY3R4LT5xdWFsbmFt ZSwKKwkJCQkJCQkgcXVvdGVfaWRlbnRpZmllcihOYW1lU3RyKGF0dC0+YXR0bmFtZSkpKTsKKwkJ CWdldF9yZWxvcHRpb25zKCZjdHgtPmJ1Ziwgb3B0RGF0dW0pOworCQkJYXBwZW5kU3RyaW5nSW5m b1N0cmluZygmY3R4LT5idWYsICIpOyIpOworCQkJYXBwZW5kX3N0bXQoY3R4KTsKKwkJfQorCQlS ZWxlYXNlU3lzQ2FjaGUoYXR0VHVwKTsKKwl9Cit9CisKKy8qCisgKiBlbWl0X3R5cGVkX2NvbHVt bl9zdG9yYWdlCisgKgkJRm9yIHR5cGVkIHRhYmxlcyAoQ1JFQVRFIFRBQkxFIC4uLiBPRiB0eXBl X25hbWUpLCBlbWl0IHBlci1jb2x1bW4KKyAqCQlTVE9SQUdFIGFuZCBDT01QUkVTU0lPTiBvdmVy cmlkZXMgYXMgQUxURVIgVEFCTEUgc3RhdGVtZW50cy4KKyAqCisgKgkJVGhlIHR5cGVkLXRhYmxl IGdyYW1tYXIgYWxsb3dzIG9ubHkgREVGQVVMVCAvIE5PVCBOVUxMIC8gQ0hFQ0sgaW4gdGhlCisg KgkJQ1JFQVRFIFRBQkxFIGNvbHVtbi1vcHRpb25zIGxpc3QgKGNvbHVtbk9wdGlvbnMgLT4gQ29s UXVhbExpc3QpLCBzbworICoJCVNUT1JBR0UgYW5kIENPTVBSRVNTSU9OIGNhbm5vdCBhcHBlYXIg aW5saW5lIHRoZXJlLiAgVGhleSBtdXN0IGJlCisgKgkJZW1pdHRlZCBwb3N0LUNSRUFURSwgbWF0 Y2hpbmcgd2hhdCBwZ19kdW1wIHByb2R1Y2VzLgorICovCitzdGF0aWMgdm9pZAorZW1pdF90eXBl ZF9jb2x1bW5fc3RvcmFnZShUYWJsZURkbENvbnRleHQgKmN0eCkKK3sKKwlUdXBsZURlc2MJdHVw ZGVzYzsKKworCWlmICghT2lkSXNWYWxpZChjdHgtPnJlbC0+cmRfcmVsLT5yZWxvZnR5cGUpKQor CQlyZXR1cm47CisKKwl0dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihjdHgtPnJlbCk7CisKKwlm b3IgKGludCBpID0gMDsgaSA8IHR1cGRlc2MtPm5hdHRzOyBpKyspCisJeworCQlGb3JtX3BnX2F0 dHJpYnV0ZSBhdHQgPSBUdXBsZURlc2NBdHRyKHR1cGRlc2MsIGkpOworCisJCWlmIChhdHQtPmF0 dGlzZHJvcHBlZCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChhdHQtPmF0dHN0b3JhZ2UgIT0gZ2V0 X3R5cHN0b3JhZ2UoYXR0LT5hdHR0eXBpZCkpCisJCXsKKwkJCXJlc2V0U3RyaW5nSW5mbygmY3R4 LT5idWYpOworCQkJYXBwZW5kU3RyaW5nSW5mbygmY3R4LT5idWYsCisJCQkJCQkJICJBTFRFUiBU QUJMRSBPTkxZICVzIEFMVEVSIENPTFVNTiAlcyBTRVQgU1RPUkFHRSAlczsiLAorCQkJCQkJCSBj dHgtPnF1YWxuYW1lLAorCQkJCQkJCSBxdW90ZV9pZGVudGlmaWVyKE5hbWVTdHIoYXR0LT5hdHRu YW1lKSksCisJCQkJCQkJIHN0b3JhZ2VfbmFtZShhdHQtPmF0dHN0b3JhZ2UpKTsKKwkJCWFwcGVu ZF9zdG10KGN0eCk7CisJCX0KKworCQlpZiAoQ29tcHJlc3Npb25NZXRob2RJc1ZhbGlkKGF0dC0+ YXR0Y29tcHJlc3Npb24pKQorCQl7CisJCQlyZXNldFN0cmluZ0luZm8oJmN0eC0+YnVmKTsKKwkJ CWFwcGVuZFN0cmluZ0luZm8oJmN0eC0+YnVmLAorCQkJCQkJCSAiQUxURVIgVEFCTEUgT05MWSAl cyBBTFRFUiBDT0xVTU4gJXMgU0VUIENPTVBSRVNTSU9OICVzOyIsCisJCQkJCQkJIGN0eC0+cXVh bG5hbWUsCisJCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIoTmFtZVN0cihhdHQtPmF0dG5hbWUpKSwK KwkJCQkJCQkgR2V0Q29tcHJlc3Npb25NZXRob2ROYW1lKGF0dC0+YXR0Y29tcHJlc3Npb24pKTsK KwkJCWFwcGVuZF9zdG10KGN0eCk7CisJCX0KKwl9Cit9CisKKy8qCisgKiBlbWl0X2luZGV4ZXMK KyAqCQlDUkVBVEUgSU5ERVggcGVyIG5vbi1jb25zdHJhaW50LWJhY2tlZCBpbmRleCBvbiB0aGUg cmVsYXRpb24uCisgKgkJSW5kZXhlcyB0aGF0IGJhY2sgUEsgLyBVTklRVUUgLyBFWENMVURFIGNv bnN0cmFpbnRzIGFyZSBlbWl0dGVkCisgKgkJb3V0LW9mLWxpbmUgYnkgZW1pdF9sb2NhbF9jb25z dHJhaW50cyAodGhlIEFMVEVSIFRBQkxFIC4uLiBBREQKKyAqCQlDT05TVFJBSU5UIHN0YXRlbWVu dCBjcmVhdGVzIHRoZSBpbmRleCBpbXBsaWNpdGx5KS4KKyAqLworc3RhdGljIHZvaWQKK2VtaXRf aW5kZXhlcyhUYWJsZURkbENvbnRleHQgKmN0eCkKK3sKKwlMaXN0CSAgICppbmRleG9pZHM7CisJ TGlzdENlbGwgICAqbGM7CisKKwlpZiAoIWlzX2tpbmRfaW5jbHVkZWQoY3R4LCBUQUJMRV9ERExf S0lORF9JTkRFWCkpCisJCXJldHVybjsKKworCWluZGV4b2lkcyA9IFJlbGF0aW9uR2V0SW5kZXhM aXN0KGN0eC0+cmVsKTsKKwlmb3JlYWNoKGxjLCBpbmRleG9pZHMpCisJeworCQlPaWQJCQlpZHhv aWQgPSBsZmlyc3Rfb2lkKGxjKTsKKwkJSGVhcFR1cGxlCWluZFR1cDsKKwkJRm9ybV9wZ19pbmRl eCBpZHhmb3JtOworCQljaGFyCSAgICppZHhkZWY7CisJCWludDE2CQlpbmRua2V5YXR0czsKKwor CQlpZiAoT2lkSXNWYWxpZChnZXRfaW5kZXhfY29uc3RyYWludChpZHhvaWQpKSkKKwkJCWNvbnRp bnVlOworCisJCS8qCisJCSAqIFNraXAgaW5kZXhlcyB0aGF0IHdlcmUgaW5oZXJpdGVkIGZyb20g YSBwYXJlbnQgcGFydGl0aW9uZWQgaW5kZXguCisJCSAqIFRoZXkgYXJlIGNyZWF0ZWQgYXV0b21h dGljYWxseSB3aGVuIHRoZSBwYXJlbnQgaW5kZXggRERMIGlzCisJCSAqIHJlcGxheWVkIGFuZCB0 aGUgcGFydGl0aW9uIGlzIGF0dGFjaGVkLCBzbyBlbWl0dGluZyB0aGVtIHNlcGFyYXRlbHkKKwkJ ICogd291bGQgcHJvZHVjZSBhICJyZWxhdGlvbiBhbHJlYWR5IGV4aXN0cyIgZXJyb3Igb24gcmVw bGF5LgorCQkgKi8KKwkJaWYgKGdldF9yZWxfcmVsaXNwYXJ0aXRpb24oaWR4b2lkKSkKKwkJCWNv bnRpbnVlOworCisJCWluZFR1cCA9IFNlYXJjaFN5c0NhY2hlMShJTkRFWFJFTElELCBPYmplY3RJ ZEdldERhdHVtKGlkeG9pZCkpOworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoaW5kVHVwKSkKKwkJ CWNvbnRpbnVlOworCQlpZHhmb3JtID0gKEZvcm1fcGdfaW5kZXgpIEdFVFNUUlVDVChpbmRUdXAp OworCisJCS8qIFNraXAgaW52YWxpZCBpbmRleGVzOyB0aGV5IG1heSBiZSBsZWZ0IG92ZXIgZnJv bSBhIGZhaWxlZCBDUkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZLiAqLworCQlpZiAoIWlkeGZvcm0t PmluZGlzdmFsaWQpCisJCXsKKwkJCVJlbGVhc2VTeXNDYWNoZShpbmRUdXApOworCQkJY29udGlu dWU7CisJCX0KKworCQlpbmRua2V5YXR0cyA9IGlkeGZvcm0tPmluZG5rZXlhdHRzOworCQlSZWxl YXNlU3lzQ2FjaGUoaW5kVHVwKTsKKworCQlpZHhkZWYgPSBwZ19nZXRfaW5kZXhkZWZfZGRsKGlk eG9pZCk7CisJCXJlc2V0U3RyaW5nSW5mbygmY3R4LT5idWYpOworCQlhcHBlbmRTdHJpbmdJbmZv KCZjdHgtPmJ1ZiwgIiVzOyIsIGlkeGRlZik7CisJCWFwcGVuZF9zdG10KGN0eCk7CisJCXBmcmVl KGlkeGRlZik7CisKKwkJLyoKKwkJICogRW1pdCBBTFRFUiBJTkRFWCAuLi4gQUxURVIgQ09MVU1O IG4gU0VUIFNUQVRJU1RJQ1MgZm9yIGFueSBrZXkKKwkJICogY29sdW1uIHRoYXQgaGFzIGEgbm9u LWRlZmF1bHQgc3RhdGlzdGljcyB0YXJnZXQuICBFeHByZXNzaW9uCisJCSAqIGNvbHVtbnMgKGlu ZG5rZXlhdHRzIGNvdmVycyB0aGVtKSBhcmUgdGhlIG9ubHkga2luZCB0aGF0IGNhbiBoYXZlCisJ CSAqIGEgc3RhdGlzdGljcyB0YXJnZXQgb24gYW4gaW5kZXguCisJCSAqLworCQl7CisJCQljaGFy CSAgICppZHhxdWFsbmFtZSA9IGxvb2t1cF9yZWxuYW1lX2Zvcl9lbWl0KGlkeG9pZCwKKwkJCQkJ CQkJCQkJCQkJCSAgY3R4LT5zY2hlbWFfcXVhbGlmaWVkLAorCQkJCQkJCQkJCQkJCQkJICBjdHgt PmJhc2VfbmFtZXNwYWNlKTsKKworCQkJZm9yIChpbnQgaiA9IDE7IGogPD0gaW5kbmtleWF0dHM7 IGorKykKKwkJCXsKKwkJCQlIZWFwVHVwbGUJYXR0VHVwID0gU2VhcmNoU3lzQ2FjaGUyKEFUVE5V TSwKKwkJCQkJCQkJCQkJCQkgT2JqZWN0SWRHZXREYXR1bShpZHhvaWQpLAorCQkJCQkJCQkJCQkJ CSBJbnQxNkdldERhdHVtKGopKTsKKworCQkJCWlmIChIZWFwVHVwbGVJc1ZhbGlkKGF0dFR1cCkp CisJCQkJeworCQkJCQlib29sCQlpc251bGw7CisJCQkJCURhdHVtCQlzdGF0dGFyZ2V0RGF0dW0g PQorCQkJCQkJU3lzQ2FjaGVHZXRBdHRyKEFUVE5VTSwgYXR0VHVwLAorCQkJCQkJCQkJCUFudW1f cGdfYXR0cmlidXRlX2F0dHN0YXR0YXJnZXQsCisJCQkJCQkJCQkJJmlzbnVsbCk7CisKKwkJCQkJ aWYgKCFpc251bGwgJiYgRGF0dW1HZXRJbnQxNihzdGF0dGFyZ2V0RGF0dW0pID49IDApCisJCQkJ CXsKKwkJCQkJCXJlc2V0U3RyaW5nSW5mbygmY3R4LT5idWYpOworCQkJCQkJYXBwZW5kU3RyaW5n SW5mbygmY3R4LT5idWYsCisJCQkJCQkJCQkJICJBTFRFUiBJTkRFWCAlcyBBTFRFUiBDT0xVTU4g JWQgU0VUIFNUQVRJU1RJQ1MgJWQ7IiwKKwkJCQkJCQkJCQkgaWR4cXVhbG5hbWUsIGosCisJCQkJ CQkJCQkJIChpbnQpIERhdHVtR2V0SW50MTYoc3RhdHRhcmdldERhdHVtKSk7CisJCQkJCQlhcHBl bmRfc3RtdChjdHgpOworCQkJCQl9CisJCQkJCVJlbGVhc2VTeXNDYWNoZShhdHRUdXApOworCQkJ CX0KKwkJCX0KKwkJCXBmcmVlKGlkeHF1YWxuYW1lKTsKKwkJfQorCX0KKwlsaXN0X2ZyZWUoaW5k ZXhvaWRzKTsKK30KKworLyoKKyAqIGVtaXRfY2x1c3Rlcl9vbgorICoJCUFMVEVSIFRBQkxFIHF1 YWxuYW1lIENMVVNURVIgT04gaW5kZXhfbmFtZSAtIGVtaXR0ZWQgd2hlbiBhbnkgaW5kZXgKKyAq CQlvbiB0aGUgcmVsYXRpb24gaGFzIGluZGlzY2x1c3RlcmVkPXRydWUuCisgKi8KK3N0YXRpYyB2 b2lkCitlbWl0X2NsdXN0ZXJfb24oVGFibGVEZGxDb250ZXh0ICpjdHgpCit7CisJTGlzdAkgICAq aW5kZXhvaWRzOworCUxpc3RDZWxsICAgKmxjOworCisJaWYgKCFpc19raW5kX2luY2x1ZGVkKGN0 eCwgVEFCTEVfRERMX0tJTkRfSU5ERVgpKQorCQlyZXR1cm47CisKKwlpbmRleG9pZHMgPSBSZWxh dGlvbkdldEluZGV4TGlzdChjdHgtPnJlbCk7CisJZm9yZWFjaChsYywgaW5kZXhvaWRzKQorCXsK KwkJT2lkCQkJaWR4b2lkID0gbGZpcnN0X29pZChsYyk7CisJCUhlYXBUdXBsZQlpbmRUdXA7CisJ CUZvcm1fcGdfaW5kZXggaWR4Zm9ybTsKKworCQlpbmRUdXAgPSBTZWFyY2hTeXNDYWNoZTEoSU5E RVhSRUxJRCwgT2JqZWN0SWRHZXREYXR1bShpZHhvaWQpKTsKKwkJaWYgKCFIZWFwVHVwbGVJc1Zh bGlkKGluZFR1cCkpCisJCQljb250aW51ZTsKKwkJaWR4Zm9ybSA9IChGb3JtX3BnX2luZGV4KSBH RVRTVFJVQ1QoaW5kVHVwKTsKKworCQlpZiAoaWR4Zm9ybS0+aW5kaXNjbHVzdGVyZWQpCisJCXsK KwkJCWNoYXIJICAgKmlkeG5hbWUgPSBnZXRfcmVsX25hbWUoaWR4b2lkKTsKKworCQkJUmVsZWFz ZVN5c0NhY2hlKGluZFR1cCk7CisJCQlpZiAoaWR4bmFtZSAhPSBOVUxMKQorCQkJeworCQkJCXJl c2V0U3RyaW5nSW5mbygmY3R4LT5idWYpOworCQkJCWFwcGVuZFN0cmluZ0luZm8oJmN0eC0+YnVm LAorCQkJCQkJCQkgIkFMVEVSIFRBQkxFICVzIENMVVNURVIgT04gJXM7IiwKKwkJCQkJCQkJIGN0 eC0+cXVhbG5hbWUsCisJCQkJCQkJCSBxdW90ZV9pZGVudGlmaWVyKGlkeG5hbWUpKTsKKwkJCQlh cHBlbmRfc3RtdChjdHgpOworCQkJCXBmcmVlKGlkeG5hbWUpOworCQkJfQorCQkJYnJlYWs7CQkJ CS8qIGF0IG1vc3Qgb25lIGluZGV4IHBlciB0YWJsZSBjYW4gYmUgY2x1c3RlcmVkICovCisJCX0K KwkJUmVsZWFzZVN5c0NhY2hlKGluZFR1cCk7CisJfQorCWxpc3RfZnJlZShpbmRleG9pZHMpOwor fQorCisvKgorICogZW1pdF9sb2NhbF9jb25zdHJhaW50cworICoJCUFMVEVSIFRBQkxFIC4uLiBB REQgQ09OU1RSQUlOVCBmb3IgZWFjaCBsb2NhbGx5LWRlZmluZWQgY29uc3RyYWludAorICoJCW9u IHRoZSByZWxhdGlvbi4gIEluaGVyaXRlZCBjb25zdHJhaW50cyAoY29uaXNsb2NhbD1mYWxzZSkg Y29tZQorICoJCWZyb20gdGhlIHBhcmVudCdzIERETC4gIENIRUNLIGNvbnN0cmFpbnRzIGFyZSBl bWl0dGVkIGlubGluZSBmb3IKKyAqCQlyZWd1bGFyL3R5cGVkIHRhYmxlcyAoc2tpcCBoZXJlKSBi dXQgb3V0LW9mLWxpbmUgZm9yIHBhcnRpdGlvbgorICoJCWNoaWxkcmVuIChubyBjb2x1bW4gbGlz dCB0byBsaXZlIGluKS4KKyAqCisgKgkJTk9UIE5VTEwgY29uc3RyYWludHMgYXJlIHRyYWNrZWQg dmlhIHNraXBfbm90bnVsbF9vaWRzIHRvIGF2b2lkCisgKgkJZG91YmxlLWVtaXNzaW9uLiAgVGhl IHNldCBjb3ZlcnM6IChhKSBsb2NhbCBjb2x1bW5zLCB3aGVyZSB0aGUKKyAqCQljb2x1bW4tZW1p dCBoZWxwZXJzIG1hdGVyaWFsaXNlIHRoZSBjb25zdHJhaW50IGlubGluZTsgKGIpIGluaGVyaXRl ZAorICoJCWNvbHVtbnMgd2l0aCBhIHVzZXItZGVmaW5lZCBuYW1lLCB3aGVyZSBlbWl0X2NyZWF0 ZV90YWJsZV9zdG10CisgKgkJZW1pdHMgYSB0YWJsZS1sZXZlbCBDT05TVFJBSU5UIGNsYXVzZSBz byB0aGUgbmFtZSBzdXJ2aXZlcyB0aGUKKyAqCQlQQVJUSVRJT04gT0YgLyBJTkhFUklUUyByZXBs YXk7IGFuZCAoYykgYXV0by1uYW1lZCBOT1QgTlVMTHMgb24KKyAqCQlwYXJ0aXRpb24gY2hpbGRy ZW4sIHdoaWNoIGFyZSByZS1jcmVhdGVkIGJ5IFBBUlRJVElPTiBPRiBhbmQgd291bGQKKyAqCQlj b2xsaWRlIHdpdGggYW4gb3V0LW9mLWxpbmUgQUxURVIgVEFCTEUgQUREIENPTlNUUkFJTlQuICBB bnkgTk9UCisgKgkJTlVMTCBub3QgaW4gc2tpcF9ub3RudWxsX29pZHMgaXMgZW1pdHRlZCBoZXJl IChlLmcuIGluaGVyaXRlZAorICoJCWNvbHVtbnMgd2l0aCBhbiBhdXRvLW5hbWUgb24gYSBwbGFp biBJTkhFUklUUyBjaGlsZCkuCisgKgorICoJCUVhY2ggY29udHlwZSBpcyBnYXRlZCBvbiB0aGUg bWF0Y2hpbmcga2luZCBpbiB0aGUgb25seSAvIGV4Y2VwdAorICoJCXZvY2FidWxhcnksIHNvIGNh bGxlcnMgY2FuIHByb2R1Y2UgZS5nLiBhbiBGSy1vbmx5IHBhc3MKKyAqCQkob25seSA9PiAnZm9y ZWlnbl9rZXknKSBvciBhIHB1Yi9zdWIgY2xvbmUgdGhhdCBrZWVwcyBvbmx5CisgKgkJdGhlIHBy aW1hcnkga2V5IChleGNlcHQgPT4gJ3VuaXF1ZSxjaGVjayxmb3JlaWduX2tleSxleGNsdXNpb24n KS4KKyAqCQlOT1QgTlVMTCBpcyBpbnRlbnRpb25hbGx5IG5vdCBpbiB0aGUgdm9jYWJ1bGFyeSAt IGFsd2F5cyBlbWl0dGVkCisgKgkJc28gY2xvbmVkIHNjaGVtYXMgZG9uJ3Qgc2lsZW50bHkgYWNj ZXB0IE5VTExzIHRoZSBzb3VyY2Ugd291bGQKKyAqCQloYXZlIHJlamVjdGVkLgorICovCitzdGF0 aWMgdm9pZAorZW1pdF9sb2NhbF9jb25zdHJhaW50cyhUYWJsZURkbENvbnRleHQgKmN0eCkKK3sK KwlSZWxhdGlvbgljb25SZWw7CisJU3lzU2NhbkRlc2MgY29uU2NhbjsKKwlTY2FuS2V5RGF0YSBj b25LZXk7CisJSGVhcFR1cGxlCWNvblR1cDsKKwlib29sCQlpc19wYXJ0aXRpb24gPSBjdHgtPnJl bC0+cmRfcmVsLT5yZWxpc3BhcnRpdGlvbjsKKwlMaXN0CSAgICpma19zdG10cyA9IE5JTDsKKwor CWNvblJlbCA9IHRhYmxlX29wZW4oQ29uc3RyYWludFJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9j ayk7CisJU2NhbktleUluaXQoJmNvbktleSwKKwkJCQlBbnVtX3BnX2NvbnN0cmFpbnRfY29ucmVs aWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCU9iamVjdElkR2V0 RGF0dW0oY3R4LT5yZWxpZCkpOworCWNvblNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4oY29uUmVs LCBDb25zdHJhaW50UmVsaWRUeXBpZE5hbWVJbmRleElkLAorCQkJCQkJCQkgdHJ1ZSwgTlVMTCwg MSwgJmNvbktleSk7CisKKwl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZChjb25UdXAgPSBzeXN0YWJs ZV9nZXRuZXh0KGNvblNjYW4pKSkKKwl7CisJCUZvcm1fcGdfY29uc3RyYWludCBjb24gPSAoRm9y bV9wZ19jb25zdHJhaW50KSBHRVRTVFJVQ1QoY29uVHVwKTsKKworCQlpZiAoIWNvbi0+Y29uaXNs b2NhbCkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIEVhY2ggY29udHlwZSBpcyBnYXRlZCBv biBpdHMga2luZCBpbiB0aGUgb25seSAvIGV4Y2VwdAorCQkgKiB2b2NhYnVsYXJ5LiAgQ0hFQ0sg aXMgYWxzbyBza2lwcGVkIGZvciBub24tcGFydGl0aW9uIHJlbGF0aW9ucworCQkgKiBiZWNhdXNl IGFwcGVuZF9pbmxpbmVfY2hlY2tfY29uc3RyYWludHMgZW1pdHMgdGhvc2UgaW5saW5lIGluCisJ CSAqIHRoZSBDUkVBVEUgVEFCTEUgYm9keTsgcGFydGl0aW9uIGNoaWxkcmVuIGhhdmUgbm8gY29s dW1uIGxpc3QKKwkJICogdG8gbGl2ZSBpbiwgc28gdGhleSBjb21lIHRocm91Z2ggdGhpcyBsb29w LiAgTk9UIE5VTEwgaXMgbm90IGEKKwkJICogZmlsdGVyYWJsZSBraW5kIC0gZW1pdHRlZCB1bmNv bmRpdGlvbmFsbHkgdG8gYXZvaWQgcHJvZHVjaW5nCisJCSAqIHNjaGVtYXMgdGhhdCBzaWxlbnRs eSBhY2NlcHQgTlVMTHMgdGhlIHNvdXJjZSB3b3VsZCBoYXZlCisJCSAqIHJlamVjdGVkLgorCQkg Ki8KKwkJc3dpdGNoIChjb24tPmNvbnR5cGUpCisJCXsKKwkJCWNhc2UgQ09OU1RSQUlOVF9QUklN QVJZOgorCQkJCWlmICghaXNfa2luZF9pbmNsdWRlZChjdHgsIFRBQkxFX0RETF9LSU5EX1BSSU1B UllfS0VZKSkKKwkJCQkJY29udGludWU7CisJCQkJYnJlYWs7CisJCQljYXNlIENPTlNUUkFJTlRf VU5JUVVFOgorCQkJCWlmICghaXNfa2luZF9pbmNsdWRlZChjdHgsIFRBQkxFX0RETF9LSU5EX1VO SVFVRSkpCisJCQkJCWNvbnRpbnVlOworCQkJCWJyZWFrOworCQkJY2FzZSBDT05TVFJBSU5UX0NI RUNLOgorCQkJCWlmICghaXNfa2luZF9pbmNsdWRlZChjdHgsIFRBQkxFX0RETF9LSU5EX0NIRUNL KSkKKwkJCQkJY29udGludWU7CisKKwkJCQkvKgorCQkJCSAqIEZvciBub24tcGFydGl0aW9uIHJl bGF0aW9ucywgQ0hFQ0sgaXMgbm9ybWFsbHkgZW1pdHRlZAorCQkJCSAqIGlubGluZSBpbiB0aGUg Q1JFQVRFIFRBQkxFIGJvZHkgYnkKKwkJCQkgKiBhcHBlbmRfaW5saW5lX2NoZWNrX2NvbnN0cmFp bnRzLCBzbyB3ZSBza2lwIGl0IGhlcmUgdG8KKwkJCQkgKiBhdm9pZCBkb3VibGUgZW1pc3Npb24u ICBCdXQgd2hlbiBLSU5EX1RBQkxFIGlzIG5vdCBpbgorCQkJCSAqIHRoZSBhY3RpdmUgZmlsdGVy IChlLmcuIG9ubHk9PidjaGVjaycgb3IgYSBjbG9uZSB0aGF0CisJCQkJICogdGFyZ2V0cyBvbmx5 IHN1Yi1vYmplY3RzKSwgdGhlIGlubGluZSBwYXNzIG5ldmVyIHJ1bnM7CisJCQkJICogZmFsbCB0 aHJvdWdoIGFuZCBlbWl0IGVhY2ggQ0hFQ0sgdmlhIEFMVEVSIFRBQkxFIHNvIHRoZQorCQkJCSAq IHVzZXIgYWN0dWFsbHkgZ2V0cyB0aGUgY29uc3RyYWludCB0aGV5IGFza2VkIGZvci4KKwkJCQkg Ki8KKwkJCQlpZiAoIWlzX3BhcnRpdGlvbiAmJgorCQkJCQlpc19raW5kX2luY2x1ZGVkKGN0eCwg VEFCTEVfRERMX0tJTkRfVEFCTEUpKQorCQkJCQljb250aW51ZTsKKwkJCQlicmVhazsKKwkJCWNh c2UgQ09OU1RSQUlOVF9GT1JFSUdOOgorCQkJCWlmICghaXNfa2luZF9pbmNsdWRlZChjdHgsIFRB QkxFX0RETF9LSU5EX0ZPUkVJR05fS0VZKSkKKwkJCQkJY29udGludWU7CisJCQkJYnJlYWs7CisJ CQljYXNlIENPTlNUUkFJTlRfRVhDTFVTSU9OOgorCQkJCWlmICghaXNfa2luZF9pbmNsdWRlZChj dHgsIFRBQkxFX0RETF9LSU5EX0VYQ0xVU0lPTikpCisJCQkJCWNvbnRpbnVlOworCQkJCWJyZWFr OworCQkJY2FzZSBDT05TVFJBSU5UX05PVE5VTEw6CisJCQkJLyoKKwkJCQkgKiBPdXQtb2YtbGlu ZSBOT1QgTlVMTCBpcyBjb25jZXB0dWFsbHkgcGFydCBvZiB0aGUKKwkJCQkgKiB0YWJsZSBkZWZp bml0aW9uOiBnYXRpbmcgaXQgb24gS0lORF9UQUJMRSBtZWFucyBhbgorCQkJCSAqIG9ubHk9Zm9y ZWlnbl9rZXkgc2Vjb25kIHBhc3MgZG9lcyBub3QgcmUtZW1pdAorCQkJCSAqIE5PVCBOVUxMcyB0 aGF0IHRoZSBmaXJzdCBwYXNzIGFscmVhZHkgY3JlYXRlZCwKKwkJCQkgKiB3aGlsZSB0aGUgbm8t b3B0aW9ucyBkZWZhdWx0IHN0aWxsIGVtaXRzIHRoZW0uCisJCQkJICoKKwkJCQkgKiBza2lwX25v dG51bGxfb2lkcyBjb3ZlcnMgYWxsIGNhc2VzIHdoZXJlIE5PVCBOVUxMIHdhcworCQkJCSAqIGFs cmVhZHkgbWF0ZXJpYWxpc2VkIGlubGluZTogbG9jYWwgY29sdW1ucyAodmlhCisJCQkJICogYXBw ZW5kX2NvbHVtbl9kZWZzKSwgaW5oZXJpdGVkIGNvbHVtbnMgd2l0aCBhIHVzZXItZGVmaW5lZAor CQkJCSAqIG5hbWUgKHZpYSB0aGUgdGFibGUtbGV2ZWwgQ09OU1RSQUlOVCBjbGF1c2UgZW1pdHRl ZCBieQorCQkJCSAqIGVtaXRfY3JlYXRlX3RhYmxlX3N0bXQpLCBhbmQgYXV0by1uYW1lZCBOT1Qg TlVMTHMgb24KKwkJCQkgKiBwYXJ0aXRpb24gY2hpbGRyZW4gKHJlLWNyZWF0ZWQgYnkgUEFSVElU SU9OIE9GKS4KKwkJCQkgKi8KKwkJCQlpZiAoIWlzX2tpbmRfaW5jbHVkZWQoY3R4LCBUQUJMRV9E RExfS0lORF9UQUJMRSkpCisJCQkJCWNvbnRpbnVlOworCQkJCWlmIChsaXN0X21lbWJlcl9vaWQo Y3R4LT5za2lwX25vdG51bGxfb2lkcywgY29uLT5vaWQpKQorCQkJCQljb250aW51ZTsKKwkJCQli cmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJLyoKKwkJCQkgKiBBbnkgZnV0dXJlIGNvbnR5cGUgdGhl IHZvY2FidWxhcnkgZG9lcyBub3QgeWV0IGNvdmVyOgorCQkJCSAqIGZhbGwgdGhyb3VnaCBhbmQg ZW1pdCBpdCB2aWEgcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29tbWFuZCwKKwkJCQkgKiBtYXRjaGlu ZyB0aGUgb3JpZ2luYWwgbG9vcCdzICJlbWl0IHVubGVzcyBmaWx0ZXJlZCIKKwkJCQkgKiBiZWhh dmlvci4gIFRoaXMgaXMgdW5yZWFjaGFibGUgaW4gY3VycmVudCBQRyAoZXZlcnkKKwkJCQkgKiBj b250eXBlIGFib3ZlIGlzIGVudW1lcmF0ZWQpIGJ1dCBrZXB0IGRlZmVuc2l2ZSBhZ2FpbnN0CisJ CQkJICogYSBuZXcgY29udHlwZSBiZWluZyBpbnRyb2R1Y2VkLgorCQkJCSAqLworCQkJCWJyZWFr OworCQl9CisKKwkJeworCQkJY2hhcgkgICAqY29uYm9keSA9IHBnX2dldF9jb25zdHJhaW50ZGVm X2JvZHkoY29uLT5vaWQpOworCisJCQlyZXNldFN0cmluZ0luZm8oJmN0eC0+YnVmKTsKKwkJCWFw cGVuZFN0cmluZ0luZm8oJmN0eC0+YnVmLCAiQUxURVIgVEFCTEUgJXMgQUREIENPTlNUUkFJTlQg JXMgJXM7IiwKKwkJCQkJCQkgY3R4LT5xdWFsbmFtZSwKKwkJCQkJCQkgcXVvdGVfaWRlbnRpZmll cihOYW1lU3RyKGNvbi0+Y29ubmFtZSkpLAorCQkJCQkJCSBjb25ib2R5KTsKKworCQkJLyoKKwkJ CSAqIERlZmVyIEZLIHN0YXRlbWVudHMgc28gdGhleSBhcmUgZW1pdHRlZCBhZnRlciBhbGwgb3Ro ZXIKKwkJCSAqIGNvbnN0cmFpbnRzLiAgQSBzZWxmLXJlZmVyZW5jaW5nIEZLIChSRUZFUkVOQ0VT IHNhbWVfdGFibGUpCisJCQkgKiByZXF1aXJlcyB0aGUgUEsvVU5JUVVFIGl0IHRhcmdldHMgdG8g ZXhpc3QgZmlyc3QsIGFuZCBiZWNhdXNlCisJCQkgKiB0aGUgY2F0YWxvZyBzY2FuIHJldHVybnMg Y29uc3RyYWludHMgaW4gbmFtZSBvcmRlciwgYW4gRksgd2hvc2UKKwkJCSAqIG5hbWUgc29ydHMg YmVmb3JlIHRoZSBQSyBuYW1lIHdvdWxkIG90aGVyd2lzZSBiZSBlbWl0dGVkIGZpcnN0CisJCQkg KiBhbmQgZmFpbCB3aXRoICJ0aGVyZSBpcyBubyB1bmlxdWUgY29uc3RyYWludCBtYXRjaGluZyBn aXZlbgorCQkJICoga2V5cyIuCisJCQkgKi8KKwkJCWlmIChjb24tPmNvbnR5cGUgPT0gQ09OU1RS QUlOVF9GT1JFSUdOKQorCQkJCWZrX3N0bXRzID0gbGFwcGVuZChma19zdG10cywgcHN0cmR1cChj dHgtPmJ1Zi5kYXRhKSk7CisJCQllbHNlCisJCQkJYXBwZW5kX3N0bXQoY3R4KTsKKworCQkJcGZy ZWUoY29uYm9keSk7CisJCX0KKwl9CisJc3lzdGFibGVfZW5kc2Nhbihjb25TY2FuKTsKKwl0YWJs ZV9jbG9zZShjb25SZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkvKiBBcHBlbmQgZGVmZXJyZWQg Rksgc3RhdGVtZW50cyBhZnRlciBhbGwgb3RoZXIgY29uc3RyYWludHMuICovCisJY3R4LT5zdGF0 ZW1lbnRzID0gbGlzdF9jb25jYXQoY3R4LT5zdGF0ZW1lbnRzLCBma19zdG10cyk7Cit9CisKKy8q CisgKiBlbWl0X3J1bGVzCisgKgkJQ1JFQVRFIFJVTEUgcGVyIGNhY2hlZCByZXdyaXRlIHJ1bGUg b24gdGhlIHJlbGF0aW9uLgorICovCitzdGF0aWMgdm9pZAorZW1pdF9ydWxlcyhUYWJsZURkbENv bnRleHQgKmN0eCkKK3sKKwlpZiAoIWlzX2tpbmRfaW5jbHVkZWQoY3R4LCBUQUJMRV9ERExfS0lO RF9SVUxFKSB8fAorCQljdHgtPnJlbC0+cmRfcnVsZXMgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJ Zm9yIChpbnQgaSA9IDA7IGkgPCBjdHgtPnJlbC0+cmRfcnVsZXMtPm51bUxvY2tzOyBpKyspCisJ eworCQlPaWQJCQlydWxlaWQgPSBjdHgtPnJlbC0+cmRfcnVsZXMtPnJ1bGVzW2ldLT5ydWxlSWQ7 CisJCWNoYXIJCWVuYWJsZWQgPSBjdHgtPnJlbC0+cmRfcnVsZXMtPnJ1bGVzW2ldLT5lbmFibGVk OworCQljaGFyCSAgICpydWxlZGVmX3N0cjsKKworCQlydWxlZGVmX3N0ciA9IHBnX2dldF9ydWxl ZGVmX2RkbChydWxlaWQpOworCQlyZXNldFN0cmluZ0luZm8oJmN0eC0+YnVmKTsKKwkJYXBwZW5k U3RyaW5nSW5mb1N0cmluZygmY3R4LT5idWYsIHJ1bGVkZWZfc3RyKTsKKwkJYXBwZW5kX3N0bXQo Y3R4KTsKKwkJcGZyZWUocnVsZWRlZl9zdHIpOworCisJCS8qCisJCSAqIElmIHRoZSBydWxlJ3Mg ZmlyaW5nIHN0YXRlIGRpZmZlcnMgZnJvbSB0aGUgZGVmYXVsdCAoT1JJR0lOKSwKKwkJICogZW1p dCB0aGUgYXBwcm9wcmlhdGUgQUxURVIgVEFCTEUgLi4uIEVOQUJMRS9ESVNBQkxFIFJVTEUuCisJ CSAqIFdlIG5lZWQgdGhlIHJ1bGUncyBuYW1lIGZyb20gcGdfcmV3cml0ZSBmb3IgdGhpcyBzdGF0 ZW1lbnQuCisJCSAqLworCQlpZiAoZW5hYmxlZCAhPSBSVUxFX0ZJUkVTX09OX09SSUdJTikKKwkJ eworCQkJUmVsYXRpb24JcmV3cml0ZVJlbDsKKwkJCVNjYW5LZXlEYXRhIHNjYW5rZXk7CisJCQlT eXNTY2FuRGVzYyBzY2FuOworCQkJSGVhcFR1cGxlCXJ1bGVUdXA7CisJCQljaGFyCSAgICpydWxl bmFtZTsKKworCQkJcmV3cml0ZVJlbCA9IHRhYmxlX29wZW4oUmV3cml0ZVJlbGF0aW9uSWQsIEFj Y2Vzc1NoYXJlTG9jayk7CisJCQlTY2FuS2V5SW5pdCgmc2NhbmtleSwKKwkJCQkJCUFudW1fcGdf cmV3cml0ZV9vaWQsCisJCQkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJ CQlPYmplY3RJZEdldERhdHVtKHJ1bGVpZCkpOworCQkJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2Nh bihyZXdyaXRlUmVsLCBSZXdyaXRlT2lkSW5kZXhJZCwKKwkJCQkJCQkJCSAgdHJ1ZSwgTlVMTCwg MSwgJnNjYW5rZXkpOworCQkJcnVsZVR1cCA9IHN5c3RhYmxlX2dldG5leHQoc2Nhbik7CisJCQlp ZiAoIUhlYXBUdXBsZUlzVmFsaWQocnVsZVR1cCkpCisJCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxv b2t1cCBmYWlsZWQgZm9yIHJ1bGUgJXUiLCBydWxlaWQpOworCQkJcnVsZW5hbWUgPSBwc3RyZHVw KE5hbWVTdHIoKChGb3JtX3BnX3Jld3JpdGUpIEdFVFNUUlVDVChydWxlVHVwKSktPnJ1bGVuYW1l KSk7CisJCQlzeXN0YWJsZV9lbmRzY2FuKHNjYW4pOworCQkJdGFibGVfY2xvc2UocmV3cml0ZVJl bCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCQkJc3dpdGNoIChlbmFibGVkKQorCQkJeworCQkJCWNh c2UgUlVMRV9ESVNBQkxFRDoKKwkJCQkJcmVzZXRTdHJpbmdJbmZvKCZjdHgtPmJ1Zik7CisJCQkJ CWFwcGVuZFN0cmluZ0luZm8oJmN0eC0+YnVmLAorCQkJCQkJCQkJICJBTFRFUiBUQUJMRSAlcyBE SVNBQkxFIFJVTEUgJXM7IiwKKwkJCQkJCQkJCSBjdHgtPnF1YWxuYW1lLAorCQkJCQkJCQkJIHF1 b3RlX2lkZW50aWZpZXIocnVsZW5hbWUpKTsKKwkJCQkJYXBwZW5kX3N0bXQoY3R4KTsKKwkJCQkJ YnJlYWs7CisJCQkJY2FzZSBSVUxFX0ZJUkVTX09OX1JFUExJQ0E6CisJCQkJCXJlc2V0U3RyaW5n SW5mbygmY3R4LT5idWYpOworCQkJCQlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwKKwkJCQkJ CQkJCSAiQUxURVIgVEFCTEUgJXMgRU5BQkxFIFJFUExJQ0EgUlVMRSAlczsiLAorCQkJCQkJCQkJ IGN0eC0+cXVhbG5hbWUsCisJCQkJCQkJCQkgcXVvdGVfaWRlbnRpZmllcihydWxlbmFtZSkpOwor CQkJCQlhcHBlbmRfc3RtdChjdHgpOworCQkJCQlicmVhazsKKwkJCQljYXNlIFJVTEVfRklSRVNf QUxXQVlTOgorCQkJCQlyZXNldFN0cmluZ0luZm8oJmN0eC0+YnVmKTsKKwkJCQkJYXBwZW5kU3Ry aW5nSW5mbygmY3R4LT5idWYsCisJCQkJCQkJCQkgIkFMVEVSIFRBQkxFICVzIEVOQUJMRSBBTFdB WVMgUlVMRSAlczsiLAorCQkJCQkJCQkJIGN0eC0+cXVhbG5hbWUsCisJCQkJCQkJCQkgcXVvdGVf aWRlbnRpZmllcihydWxlbmFtZSkpOworCQkJCQlhcHBlbmRfc3RtdChjdHgpOworCQkJCQlicmVh azsKKwkJCQlkZWZhdWx0OgorCQkJCQlicmVhazsKKwkJCX0KKwkJCXBmcmVlKHJ1bGVuYW1lKTsK KwkJfQorCX0KK30KKworLyoKKyAqIGVtaXRfc3RhdGlzdGljcworICoJCUNSRUFURSBTVEFUSVNU SUNTIHBlciBleHRlbmRlZCBzdGF0aXN0aWNzIG9iamVjdCBvbiB0aGUgcmVsYXRpb24uCisgKi8K K3N0YXRpYyB2b2lkCitlbWl0X3N0YXRpc3RpY3MoVGFibGVEZGxDb250ZXh0ICpjdHgpCit7CisJ UmVsYXRpb24Jc3RhdFJlbDsKKwlTeXNTY2FuRGVzYyBzdGF0U2NhbjsKKwlTY2FuS2V5RGF0YSBz dGF0S2V5OworCUhlYXBUdXBsZQlzdGF0VHVwOworCisJaWYgKCFpc19raW5kX2luY2x1ZGVkKGN0 eCwgVEFCTEVfRERMX0tJTkRfU1RBVElTVElDUykpCisJCXJldHVybjsKKworCXN0YXRSZWwgPSB0 YWJsZV9vcGVuKFN0YXRpc3RpY0V4dFJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJU2Nh bktleUluaXQoJnN0YXRLZXksCisJCQkJQW51bV9wZ19zdGF0aXN0aWNfZXh0X3N0eHJlbGlkLAor CQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdldERhdHVt KGN0eC0+cmVsaWQpKTsKKwlzdGF0U2NhbiA9IHN5c3RhYmxlX2JlZ2luc2NhbihzdGF0UmVsLCBT dGF0aXN0aWNFeHRSZWxpZEluZGV4SWQsCisJCQkJCQkJCSAgdHJ1ZSwgTlVMTCwgMSwgJnN0YXRL ZXkpOworCisJd2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQoc3RhdFR1cCA9IHN5c3RhYmxlX2dldG5l eHQoc3RhdFNjYW4pKSkKKwl7CisJCUZvcm1fcGdfc3RhdGlzdGljX2V4dCBzdGF0ID0gKEZvcm1f cGdfc3RhdGlzdGljX2V4dCkgR0VUU1RSVUNUKHN0YXRUdXApOworCQljaGFyCSAgICpzdGF0ZGVm ID0gcGdfZ2V0X3N0YXRpc3RpY3NvYmpkZWZfZGRsKHN0YXQtPm9pZCk7CisKKwkJcmVzZXRTdHJp bmdJbmZvKCZjdHgtPmJ1Zik7CisJCWFwcGVuZFN0cmluZ0luZm8oJmN0eC0+YnVmLCAiJXM7Iiwg c3RhdGRlZik7CisJCWFwcGVuZF9zdG10KGN0eCk7CisJCXBmcmVlKHN0YXRkZWYpOworCX0KKwlz eXN0YWJsZV9lbmRzY2FuKHN0YXRTY2FuKTsKKwl0YWJsZV9jbG9zZShzdGF0UmVsLCBBY2Nlc3NT aGFyZUxvY2spOworfQorCisvKgorICogZW1pdF9yZXBsaWNhX2lkZW50aXR5CisgKgkJQUxURVIg VEFCTEUgcXVhbG5hbWUgUkVQTElDQSBJREVOVElUWSAuLi4gLSBlbWl0dGVkIG9ubHkgd2hlbiB0 aGUKKyAqCQlyZWxyZXBsaWRlbnQgZGlmZmVycyBmcm9tIHRoZSBkZWZhdWx0ICgnZCcgPSB1c2Ug cHJpbWFyeSBrZXkpLgorICovCitzdGF0aWMgdm9pZAorZW1pdF9yZXBsaWNhX2lkZW50aXR5KFRh YmxlRGRsQ29udGV4dCAqY3R4KQoreworCWlmICghaXNfa2luZF9pbmNsdWRlZChjdHgsIFRBQkxF X0RETF9LSU5EX1JFUExJQ0FfSURFTlRJVFkpKQorCQlyZXR1cm47CisJaWYgKGN0eC0+cmVsLT5y ZF9yZWwtPnJlbHJlcGxpZGVudCA9PSBSRVBMSUNBX0lERU5USVRZX0RFRkFVTFQpCisJCXJldHVy bjsKKworCXJlc2V0U3RyaW5nSW5mbygmY3R4LT5idWYpOworCXN3aXRjaCAoY3R4LT5yZWwtPnJk X3JlbC0+cmVscmVwbGlkZW50KQorCXsKKwkJY2FzZSBSRVBMSUNBX0lERU5USVRZX05PVEhJTkc6 CisJCQlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwKKwkJCQkJCQkgIkFMVEVSIFRBQkxFICVz IFJFUExJQ0EgSURFTlRJVFkgTk9USElORzsiLAorCQkJCQkJCSBjdHgtPnF1YWxuYW1lKTsKKwkJ CWFwcGVuZF9zdG10KGN0eCk7CisJCQlicmVhazsKKwkJY2FzZSBSRVBMSUNBX0lERU5USVRZX0ZV TEw6CisJCQlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwKKwkJCQkJCQkgIkFMVEVSIFRBQkxF ICVzIFJFUExJQ0EgSURFTlRJVFkgRlVMTDsiLAorCQkJCQkJCSBjdHgtPnF1YWxuYW1lKTsKKwkJ CWFwcGVuZF9zdG10KGN0eCk7CisJCQlicmVhazsKKwkJY2FzZSBSRVBMSUNBX0lERU5USVRZX0lO REVYOgorCQkJeworCQkJCU9pZAkJCXJlcGxpZHggPSBSZWxhdGlvbkdldFJlcGxpY2FJbmRleChj dHgtPnJlbCk7CisKKwkJCQlpZiAoT2lkSXNWYWxpZChyZXBsaWR4KSkKKwkJCQl7CisJCQkJCWNo YXIJICAgKmlkeG5hbWUgPSBnZXRfcmVsX25hbWUocmVwbGlkeCk7CisKKwkJCQkJaWYgKGlkeG5h bWUgPT0gTlVMTCkKKwkJCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkJCShlcnJjb2RlKEVSUkNP REVfVU5ERUZJTkVEX09CSkVDVCksCisJCQkJCQkJCSBlcnJtc2coInJlcGxpY2EgaWRlbnRpdHkg aW5kZXggd2l0aCBPSUQgJXUgZG9lcyBub3QgZXhpc3QiLAorCQkJCQkJCQkJCXJlcGxpZHgpLAor CQkJCQkJCQkgZXJyZGV0YWlsKCJJdCBtYXkgaGF2ZSBiZWVuIGNvbmN1cnJlbnRseSBkcm9wcGVk LiIpKSk7CisKKwkJCQkJYXBwZW5kU3RyaW5nSW5mbygmY3R4LT5idWYsCisJCQkJCQkJCQkgIkFM VEVSIFRBQkxFICVzIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggJXM7IiwKKwkJCQkJCQkJ CSBjdHgtPnF1YWxuYW1lLAorCQkJCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIoaWR4bmFtZSkpOwor CQkJCQlhcHBlbmRfc3RtdChjdHgpOworCQkJCQlwZnJlZShpZHhuYW1lKTsKKwkJCQl9CisJCQl9 CisJCQlicmVhazsKKwl9Cit9CisKKy8qCisgKiBlbWl0X3Jsc190b2dnbGVzCisgKgkJQUxURVIg VEFCTEUgcXVhbG5hbWUgRU5BQkxFIC8gRk9SQ0UgUk9XIExFVkVMIFNFQ1VSSVRZLgorICovCitz dGF0aWMgdm9pZAorZW1pdF9ybHNfdG9nZ2xlcyhUYWJsZURkbENvbnRleHQgKmN0eCkKK3sKKwlp ZiAoIWlzX2tpbmRfaW5jbHVkZWQoY3R4LCBUQUJMRV9ERExfS0lORF9STFMpKQorCQlyZXR1cm47 CisKKwlpZiAoY3R4LT5yZWwtPnJkX3JlbC0+cmVscm93c2VjdXJpdHkpCisJeworCQlyZXNldFN0 cmluZ0luZm8oJmN0eC0+YnVmKTsKKwkJYXBwZW5kU3RyaW5nSW5mbygmY3R4LT5idWYsCisJCQkJ CQkgIkFMVEVSIFRBQkxFICVzIEVOQUJMRSBST1cgTEVWRUwgU0VDVVJJVFk7IiwKKwkJCQkJCSBj dHgtPnF1YWxuYW1lKTsKKwkJYXBwZW5kX3N0bXQoY3R4KTsKKwl9CisJaWYgKGN0eC0+cmVsLT5y ZF9yZWwtPnJlbGZvcmNlcm93c2VjdXJpdHkpCisJeworCQlyZXNldFN0cmluZ0luZm8oJmN0eC0+ YnVmKTsKKwkJYXBwZW5kU3RyaW5nSW5mbygmY3R4LT5idWYsCisJCQkJCQkgIkFMVEVSIFRBQkxF ICVzIEZPUkNFIFJPVyBMRVZFTCBTRUNVUklUWTsiLAorCQkJCQkJIGN0eC0+cXVhbG5hbWUpOwor CQlhcHBlbmRfc3RtdChjdHgpOworCX0KK30KKworLyoKKyAqIGVtaXRfcGFydGl0aW9uX2NoaWxk cmVuCisgKgkJRm9yIGVhY2ggZGlyZWN0IHBhcnRpdGlvbiBjaGlsZCBvZiBhIHBhcnRpdGlvbmVk LXRhYmxlIHBhcmVudCwKKyAqCQlyZWN1cnNpdmVseSBjYWxsIHBnX2dldF90YWJsZV9kZGxfaW50 ZXJuYWwgYW5kIGFwcGVuZCB0aGUgY2hpbGQncworICoJCXN0YXRlbWVudHMuICBFYWNoIGNoaWxk J3Mgb3duIERETCBoYW5kbGVzIGZ1cnRoZXIgbGV2ZWxzIHRocm91Z2gKKyAqCQl0aGUgc2FtZSBy ZWN1cnNpb24uCisgKi8KK3N0YXRpYyB2b2lkCitlbWl0X3BhcnRpdGlvbl9jaGlsZHJlbihUYWJs ZURkbENvbnRleHQgKmN0eCkKK3sKKwlMaXN0CSAgICpjaGlsZHJlbjsKKwlMaXN0Q2VsbCAgICps YzsKKworCWlmICghaXNfa2luZF9pbmNsdWRlZChjdHgsIFRBQkxFX0RETF9LSU5EX1BBUlRJVElP TikgfHwKKwkJY3R4LT5yZWwtPnJkX3JlbC0+cmVsa2luZCAhPSBSRUxLSU5EX1BBUlRJVElPTkVE X1RBQkxFKQorCQlyZXR1cm47CisKKwljaGlsZHJlbiA9IGZpbmRfaW5oZXJpdGFuY2VfY2hpbGRy ZW4oY3R4LT5yZWxpZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlmb3JlYWNoKGxjLCBjaGlsZHJlbikK Kwl7CisJCU9pZAkJCWNoaWxkb2lkID0gbGZpcnN0X29pZChsYyk7CisJCVRhYmxlRGRsQ29udGV4 dCBjaGlsZGN0eCA9IHswfTsKKwkJTGlzdAkgICAqY2hpbGRzdG10czsKKworCQkvKgorCQkgKiBF YWNoIHJlY3Vyc2l2ZSBpbnZvY2F0aW9uIHJlLWRlcml2ZXMgaXRzIG93biByZWwsIG5hbWVzcGFj ZSwKKwkJICogcXVhbG5hbWUsIE5PVCBOVUxMIGNhY2hlLCBidWZmZXIsIGFuZCBzdGF0ZW1lbnQg bGlzdCBpbnNpZGUKKwkJICogcGdfZ2V0X3RhYmxlX2RkbF9pbnRlcm5hbC4gIFRoZSB1c2VyLXN1 cHBsaWVkIG9wdGlvbiBmaWVsZHMKKwkJICogY2Fycnkgb3ZlciB2ZXJiYXRpbSB3aXRoIG9uZSBl eGNlcHRpb246IEtJTkRfUEFSVElUSU9OIGlzIGEKKwkJICogImdhdGUiIGtpbmQgdGhhdCBjb250 cm9scyB3aGV0aGVyIHdlIHJlY3Vyc2UgYXQgYWxsLCBub3QgYQorCQkgKiBraW5kIHRoYXQgdGhl IGNoaWxkcmVuIHRoZW1zZWx2ZXMgZXZlciBlbWl0LiAgSWYgd2UgcHJvcGFnYXRlZAorCQkgKiBh biBvbmx5LXNldCB0aGF0IGNvbnRhaW5lZCBQQVJUSVRJT04gaW50byBhIGNoaWxkLCB0aGUgY2hp bGQKKwkJICogd291bGQgbm90IGVtaXQgaXRzIG93biBDUkVBVEUgVEFCTEUgKEtJTkRfVEFCTEUg YWJzZW50KSBub3IKKwkJICogYW55IHN1Yi1vYmplY3RzLCBhbmQgdGhlIHJlY3Vyc2lvbiB3b3Vs ZCBwcm9kdWNlIG5vdGhpbmcuICBTbworCQkgKiBzdHJpcCBQQVJUSVRJT04gb3V0IG9mIG9ubHlf a2luZHMgd2hlbiByZWN1cnNpbmc7IGlmIHRoYXQKKwkJICogZW1wdGllcyB0aGUgc2V0LCBkcm9w IHRoZSBmaWx0ZXIgZW50aXJlbHkgc28gdGhlIGNoaWxkIGVtaXRzCisJCSAqIGl0cyBmdWxsIERE TC4gIGV4Y2VwdF9raW5kcyBwYXNzZXMgdGhyb3VnaCB1bmNoYW5nZWQgYmVjYXVzZQorCQkgKiBQ QVJUSVRJT04gaW4gdGhlIGV4Y2VwdC1zZXQgYWxyZWFkeSBzdG9wcGVkIHVzIGZyb20gZ2V0dGlu ZworCQkgKiBoZXJlLgorCQkgKi8KKwkJY2hpbGRjdHgucmVsaWQgPSBjaGlsZG9pZDsKKwkJY2hp bGRjdHgucHJldHR5ID0gY3R4LT5wcmV0dHk7CisJCWNoaWxkY3R4Lm5vX293bmVyID0gY3R4LT5u b19vd25lcjsKKwkJY2hpbGRjdHgubm9fdGFibGVzcGFjZSA9IGN0eC0+bm9fdGFibGVzcGFjZTsK KwkJY2hpbGRjdHguc2NoZW1hX3F1YWxpZmllZCA9IGN0eC0+c2NoZW1hX3F1YWxpZmllZDsKKwkJ Y2hpbGRjdHgub25seV9raW5kcyA9IGN0eC0+b25seV9raW5kczsKKwkJY2hpbGRjdHguZXhjZXB0 X2tpbmRzID0gY3R4LT5leGNlcHRfa2luZHM7CisKKwkJLyoKKwkJICogV2hlbiBzY2hlbWFfcXVh bGlmaWVkIGlzIGZhbHNlLCB0aGUgY29udHJhY3QgaXMgdGhhdCB0aGUgb3V0cHV0CisJCSAqIGlz IHJlcGxheWFibGUgd2l0aCB0aGUgcGFyZW50J3Mgc2NoZW1hIGluIHNlYXJjaF9wYXRoLiAgVGhh dAorCQkgKiBjb250cmFjdCBjYW5ub3QgaG9sZCBmb3IgYSBjaGlsZCB0aGF0IGxpdmVzIGluIGEg ZGlmZmVyZW50IHNjaGVtYToKKwkJICogaXRzIG93biBuYW1lIHdvdWxkIGJlIGFtYmlndW91cyAo bGFuZGluZyBpbiB3aGF0ZXZlciBzY2hlbWEgaXMKKwkJICogZmlyc3QgaW4gc2VhcmNoX3BhdGgp IGFuZCByZWZlcmVuY2VzIGJhY2sgdG8gdGhlIHBhcmVudCB3b3VsZCBoYXZlCisJCSAqIHRvIGJl IHNjaGVtYS1xdWFsaWZpZWQgYW55d2F5LiAgRm9yY2UgZnVsbCBxdWFsaWZpY2F0aW9uIHNvIHRo ZQorCQkgKiBjaGlsZCdzIERETCBpcyB1bmFtYmlndW91cyByZWdhcmRsZXNzIG9mIHRoZSBjYWxs ZXIncyBzZWFyY2hfcGF0aC4KKwkJICovCisJCWlmICghY2hpbGRjdHguc2NoZW1hX3F1YWxpZmll ZCAmJgorCQkJZ2V0X3JlbF9uYW1lc3BhY2UoY2hpbGRvaWQpICE9IGN0eC0+YmFzZV9uYW1lc3Bh Y2UpCisJCQljaGlsZGN0eC5zY2hlbWFfcXVhbGlmaWVkID0gdHJ1ZTsKKworCQlpZiAoY2hpbGRj dHgub25seV9raW5kcyAhPSBOVUxMICYmCisJCQlibXNfaXNfbWVtYmVyKChpbnQpIFRBQkxFX0RE TF9LSU5EX1BBUlRJVElPTiwKKwkJCQkJCSAgY2hpbGRjdHgub25seV9raW5kcykpCisJCXsKKwkJ CUJpdG1hcHNldCAgKmNoaWxkX29ubHkgPSBibXNfY29weShjaGlsZGN0eC5vbmx5X2tpbmRzKTsK KworCQkJY2hpbGRfb25seSA9IGJtc19kZWxfbWVtYmVyKGNoaWxkX29ubHksCisJCQkJCQkJCQkJ KGludCkgVEFCTEVfRERMX0tJTkRfUEFSVElUSU9OKTsKKwkJCWlmIChibXNfaXNfZW1wdHkoY2hp bGRfb25seSkpCisJCQl7CisJCQkJYm1zX2ZyZWUoY2hpbGRfb25seSk7CisJCQkJY2hpbGRjdHgu b25seV9raW5kcyA9IE5VTEw7CisJCQl9CisJCQllbHNlCisJCQkJY2hpbGRjdHgub25seV9raW5k cyA9IGNoaWxkX29ubHk7CisJCX0KKworCQljaGlsZHN0bXRzID0gcGdfZ2V0X3RhYmxlX2RkbF9p bnRlcm5hbCgmY2hpbGRjdHgpOworCQljdHgtPnN0YXRlbWVudHMgPSBsaXN0X2NvbmNhdChjdHgt PnN0YXRlbWVudHMsIGNoaWxkc3RtdHMpOworCX0KKwlsaXN0X2ZyZWUoY2hpbGRyZW4pOworfQor CisvKgorICogcGdfZ2V0X3RhYmxlX2RkbF9pbnRlcm5hbAorICoJCUdlbmVyYXRlIERETCBzdGF0 ZW1lbnRzIHRvIHJlY3JlYXRlIGEgcmVndWxhciBvciBwYXJ0aXRpb25lZCB0YWJsZS4KKyAqCisg KiBUaGUgY2FsbGVyIGluaXRpYWxpemVzICpjdHggd2l0aCB0aGUgdXNlci1zdXBwbGllZCBvcHRp b24gZmllbGRzCisgKiAocmVsaWQsIHByZXR0eSwgbm9fb3duZXIsIG5vX3RhYmxlc3BhY2UsIHNj aGVtYV9xdWFsaWZpZWQsCisgKiBvbmx5X2tpbmRzLCBleGNlcHRfa2luZHMpLiAgVGhpcyBmdW5j dGlvbiBvcGVucyB0aGUgcmVsYXRpb24sCisgKiB2YWxpZGF0ZXMgYWNjZXNzLCBwb3B1bGF0ZXMg dGhlIGRlcml2ZWQgZmllbGRzIChyZWwsIHF1YWxuYW1lLAorICogbm5fZW50cmllcywgLi4uKSwg cnVucyB0aGUgZW1pc3Npb24gcGFzc2VzLCBhbmQgcmV0dXJucyB0aGUKKyAqIGFjY3VtdWxhdGVk IHN0YXRlbWVudCBsaXN0LgorICoKKyAqIEVhY2ggZW1pc3Npb24gaGVscGVyIGNvbnN1bHRzIGlz X2tpbmRfaW5jbHVkZWQoKSB0byBkZWNpZGUgd2hldGhlcgorICogaXQgc2hvdWxkIHJ1bi4gIFRo ZSB0YWJsZS1wcm9wZXIgcGFzc2VzIChDUkVBVEUgVEFCTEUgLyBPV05FUiAvCisgKiBBTFRFUiBD T0xVTU4gLi4uIFNFVCBERUZBVUxUIC8gQUxURVIgQ09MVU1OIC4uLiBTRVQgKC4uLikpIGFyZQor ICogZ3JvdXBlZCB1bmRlciBLSU5EX1RBQkxFIHNvIHRoZSBGSy1vbmx5IC8gc3ViLW9iamVjdC1v bmx5IHdvcmtmbG93CisgKiBpcyBleHByZXNzaWJsZSBhcyBhIHNpbmdsZSBvbmx5IG9yIGV4Y2Vw dCBsaXN0LgorICoKKyAqIFRyaWdnZXIgYW5kIHBvbGljeSBlbWlzc2lvbiBhcmUgc2NhZmZvbGRl ZCBidXQgY3VycmVudGx5IGRpc2FibGVkCisgKiAoI2lmIDApIC0gdGhleSB3aWxsIGJlY29tZSBh IHNpbmdsZSBoZWxwZXIgY2FsbCBvbmNlIHRoZSBzdGFuZGFsb25lCisgKiBwZ19nZXRfdHJpZ2dl cl9kZGwgLyBwZ19nZXRfcG9saWN5X2RkbCBoZWxwZXJzIGxhbmQuCisgKi8KK3N0YXRpYyBMaXN0 ICoKK3BnX2dldF90YWJsZV9kZGxfaW50ZXJuYWwoVGFibGVEZGxDb250ZXh0ICpjdHgpCit7CisJ UmVsYXRpb24JcmVsOworCWNoYXIJCXJlbGtpbmQ7CisJQWNsUmVzdWx0CWFjbHJlc3VsdDsKKwor CXJlbCA9IHRhYmxlX29wZW4oY3R4LT5yZWxpZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJlbGtp bmQgPSByZWwtPnJkX3JlbC0+cmVsa2luZDsKKworCS8qCisJICogVGhlIGluaXRpYWwgY3V0IG9u bHkgc3VwcG9ydHMgb3JkaW5hcnkgYW5kIHBhcnRpdGlvbmVkIHRhYmxlcy4gIFZpZXdzLAorCSAq IG1hdHZpZXdzLCBmb3JlaWduIHRhYmxlcywgc2VxdWVuY2VzLCBpbmRleGVzLCBjb21wb3NpdGUg dHlwZXMsIGFuZAorCSAqIFRPQVNUIHRhYmxlcyBhcmUgb3V0IG9mIHNjb3BlIGZvciBub3cuCisJ ICovCisJaWYgKHJlbGtpbmQgIT0gUkVMS0lORF9SRUxBVElPTiAmJiByZWxraW5kICE9IFJFTEtJ TkRfUEFSVElUSU9ORURfVEFCTEUpCisJeworCQljaGFyCSAgICpyZWxuYW1lID0gcHN0cmR1cChS ZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKTsKKworCQl0YWJsZV9jbG9zZShyZWwsIEFjY2Vz c1NoYXJlTG9jayk7CisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9XUk9O R19PQkpFQ1RfVFlQRSksCisJCQkJIGVycm1zZygiXCIlc1wiIGlzIG5vdCBhbiBvcmRpbmFyeSBv ciBwYXJ0aXRpb25lZCB0YWJsZSIsCisJCQkJCQlyZWxuYW1lKSkpOworCX0KKworCS8qIENhbGxl ciBuZWVkcyBTRUxFQ1Qgb24gdGhlIHRhYmxlIHRvIHJlYWQgaXRzIGRlZmluaXRpb24uICovCisJ YWNscmVzdWx0ID0gcGdfY2xhc3NfYWNsY2hlY2soY3R4LT5yZWxpZCwgR2V0VXNlcklkKCksIEFD TF9TRUxFQ1QpOworCWlmIChhY2xyZXN1bHQgIT0gQUNMQ0hFQ0tfT0spCisJCWFjbGNoZWNrX2Vy cm9yKGFjbHJlc3VsdCwgT0JKRUNUX1RBQkxFLAorCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0aW9u TmFtZShyZWwpKTsKKworCS8qCisJICogVmFsaWRhdGlvbjogaWYgdGhlIHRhYmxlIGhhcyBSRVBM SUNBIElERU5USVRZIFVTSU5HIElOREVYIGFuZCB0aGUKKwkgKiByZWZlcmVuY2VkIGluZGV4IHdv dWxkIG5vdCBiZSBlbWl0dGVkIHVuZGVyIHRoZSBhY3RpdmUgZmlsdGVyLCB0aGUKKwkgKiBlbWl0 dGVkIFJFUExJQ0EgSURFTlRJVFkgY2xhdXNlIHdvdWxkIHJlZmVyZW5jZSBhbiBpbmRleCB0aGUg c2FtZSBEREwKKwkgKiBuZXZlciBwcm9kdWNlZC4gIERldGVybWluZSB3aGljaCBraW5kIHdvdWxk IGVtaXQgdGhlIGluZGV4IChvbmUgb2YKKwkgKiBwcmltYXJ5X2tleSAvIHVuaXF1ZSAvIGV4Y2x1 c2lvbiBmb3IgY29uc3RyYWludC1iYWNrZWQgaW5kZXhlcywKKwkgKiBvdGhlcndpc2UgdGhlIGdl bmVyaWMgImluZGV4IiBraW5kKSBhbmQgcmVxdWlyZSBpdCB0byBiZSBpbiBzY29wZQorCSAqIHdo ZW5ldmVyICJyZXBsaWNhX2lkZW50aXR5IiBpcy4gIFRoZSBjaGVjayB1c2VzIGlzX2tpbmRfaW5j bHVkZWQgc28KKwkgKiBpdCBjb3ZlcnMgYm90aCBmb3JtcyBuYXR1cmFsbHk6IGFuICJleGNlcHQi IGxpc3QgdGhhdCBvbWl0cyB0aGUKKwkgKiBzb3VyY2Uga2luZCwgYW5kIGFuICJvbmx5IiBsaXN0 IHRoYXQgb21pdHMgaXQuCisJICovCisJaWYgKHJlbC0+cmRfcmVsLT5yZWxyZXBsaWRlbnQgPT0g UkVQTElDQV9JREVOVElUWV9JTkRFWCAmJgorCQlpc19raW5kX2luY2x1ZGVkKGN0eCwgVEFCTEVf RERMX0tJTkRfUkVQTElDQV9JREVOVElUWSkpCisJeworCQlPaWQJCQlyZXBsaWR4ID0gUmVsYXRp b25HZXRSZXBsaWNhSW5kZXgocmVsKTsKKworCQlpZiAoT2lkSXNWYWxpZChyZXBsaWR4KSkKKwkJ eworCQkJVGFibGVEZGxLaW5kIGlkeF9raW5kID0gVEFCTEVfRERMX0tJTkRfSU5ERVg7CisJCQlP aWQJCQljb25vaWQgPSBnZXRfaW5kZXhfY29uc3RyYWludChyZXBsaWR4KTsKKworCQkJaWYgKE9p ZElzVmFsaWQoY29ub2lkKSkKKwkJCXsKKwkJCQlIZWFwVHVwbGUJY29uVHVwID0gU2VhcmNoU3lz Q2FjaGUxKENPTlNUUk9JRCwKKwkJCQkJCQkJCQkJCQkgT2JqZWN0SWRHZXREYXR1bShjb25vaWQp KTsKKworCQkJCWlmIChIZWFwVHVwbGVJc1ZhbGlkKGNvblR1cCkpCisJCQkJeworCQkJCQlGb3Jt X3BnX2NvbnN0cmFpbnQgY29uID0gKEZvcm1fcGdfY29uc3RyYWludCkgR0VUU1RSVUNUKGNvblR1 cCk7CisKKwkJCQkJc3dpdGNoIChjb24tPmNvbnR5cGUpCisJCQkJCXsKKwkJCQkJCWNhc2UgQ09O U1RSQUlOVF9QUklNQVJZOgorCQkJCQkJCWlkeF9raW5kID0gVEFCTEVfRERMX0tJTkRfUFJJTUFS WV9LRVk7CisJCQkJCQkJYnJlYWs7CisJCQkJCQljYXNlIENPTlNUUkFJTlRfVU5JUVVFOgorCQkJ CQkJCWlkeF9raW5kID0gVEFCTEVfRERMX0tJTkRfVU5JUVVFOworCQkJCQkJCWJyZWFrOworCQkJ CQkJY2FzZSBDT05TVFJBSU5UX0VYQ0xVU0lPTjoKKwkJCQkJCQlpZHhfa2luZCA9IFRBQkxFX0RE TF9LSU5EX0VYQ0xVU0lPTjsKKwkJCQkJCQlicmVhazsKKwkJCQkJCWRlZmF1bHQ6CisJCQkJCQkJ YnJlYWs7CisJCQkJCX0KKwkJCQkJUmVsZWFzZVN5c0NhY2hlKGNvblR1cCk7CisJCQkJfQorCQkJ fQorCisJCQlpZiAoIWlzX2tpbmRfaW5jbHVkZWQoY3R4LCBpZHhfa2luZCkpCisJCQl7CisJCQkJ Y2hhcgkgICAqcmVsbmFtZSA9IHBzdHJkdXAoUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSk7 CisJCQkJY29uc3QgY2hhciAqaWR4X25hbWUgPSB0YWJsZV9kZGxfa2luZF9uYW1lc1soaW50KSBp ZHhfa2luZF0ubmFtZTsKKworCQkJCXRhYmxlX2Nsb3NlKHJlbCwgQWNjZXNzU2hhcmVMb2NrKTsK KwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFN RVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJSRVBMSUNBIElERU5USVRZIGZvciB0YWJsZSBc IiVzXCIgcmVxdWlyZXMga2luZCBcIiVzXCIgdG8gYmUgZW1pdHRlZCIsCisJCQkJCQkJCXJlbG5h bWUsIGlkeF9uYW1lKSwKKwkJCQkJCSBlcnJkZXRhaWwoIlRoZSB0YWJsZSdzIFJFUExJQ0EgSURF TlRJVFkgVVNJTkcgSU5ERVggcmVmZXJlbmNlcyBhbiBpbmRleCBwcm9kdWNlZCBieSB0aGUgXCIl c1wiIGtpbmQsIHdoaWNoIGlzIG5vdCBpbiB0aGUgYWN0aXZlIGZpbHRlci4iLAorCQkJCQkJCQkg ICBpZHhfbmFtZSksCisJCQkJCQkgZXJyaGludCgiRWl0aGVyIGFkZCBcIiVzXCIgdG8gdGhlIGZp bHRlciBvciByZW1vdmUgXCJyZXBsaWNhX2lkZW50aXR5XCIgZnJvbSBpdC4iLAorCQkJCQkJCQkg aWR4X25hbWUpKSk7CisJCQl9CisJCX0KKwl9CisKKwkvKgorCSAqIFBvcHVsYXRlIGRlcml2ZWQg ZmllbGRzIG5vdyB0aGF0IHRoZSByZWxhdGlvbiBpcyBvcGVuIGFuZCB2YWxpZGF0ZWQuCisJICog VGhlIHJlbWFpbmluZyBkZXJpdmVkIGZpZWxkcyAobm5fZW50cmllcywgc2tpcF9ub3RudWxsX29p ZHMsIGJ1ZiwKKwkgKiBzdGF0ZW1lbnRzKSBzdGFydCB6ZXJvZWQgdmlhIHRoZSBjYWxsZXIncyBg VGFibGVEZGxDb250ZXh0IGN0eCA9IHswfWAKKwkgKiBpbml0aWFsaXplcjsgdGhlIE5PVCBOVUxM IGNhY2hlIGlzIHBvcHVsYXRlZCBieSBjb2xsZWN0X2xvY2FsX25vdF9udWxsLAorCSAqIHRoZSBi dWZmZXIgaXMgaW5pdFN0cmluZ0luZm8nZCwgYW5kIGVhY2ggZW1pdCBwYXNzIGFwcGVuZHMgdG8K KwkgKiBzdGF0ZW1lbnRzIHZpYSBsYXBwZW5kLgorCSAqLworCWN0eC0+cmVsID0gcmVsOworCWN0 eC0+YmFzZV9uYW1lc3BhY2UgPSBSZWxhdGlvbkdldE5hbWVzcGFjZShyZWwpOworCWN0eC0+c2F2 ZV9uZXN0bGV2ZWwgPSAtMTsKKwljdHgtPnF1YWxuYW1lID0gbG9va3VwX3JlbG5hbWVfZm9yX2Vt aXQoY3R4LT5yZWxpZCwgY3R4LT5zY2hlbWFfcXVhbGlmaWVkLAorCQkJCQkJCQkJCQljdHgtPmJh c2VfbmFtZXNwYWNlKTsKKworCS8qCisJICogVGVtcG9yYXJpbHkgb3ZlcnJpZGUgc2VhcmNoX3Bh dGggc28gdGhhdCB0aGUgcnVsZXV0aWxzIGhlbHBlcnMKKwkgKiAocGdfZ2V0X2luZGV4ZGVmX2Rk bCwgcGdfZ2V0X2NvbnN0cmFpbnRkZWZfYm9keSwKKwkgKiBwZ19nZXRfc3RhdGlzdGljc29iamRl Zl9kZGwsIHBnX2dldF9ydWxlZGVmX2RkbCwgZXRjLikgcHJvZHVjZSBuYW1lcworCSAqIHRoYXQg bWF0Y2ggdGhlIHNjaGVtYV9xdWFsaWZpZWQgZmxhZy4gIFRob3NlIGhlbHBlcnMgZGVjaWRlIHdo ZXRoZXIgdG8KKwkgKiBxdWFsaWZ5IGEgbmFtZSBieSBjYWxsaW5nIFJlbGF0aW9uSXNWaXNpYmxl KCksIHdoaWNoIGNoZWNrcyB3aGV0aGVyIHRoZQorCSAqIG9iamVjdCdzIHNjaGVtYSBhcHBlYXJz IGluIHRoZSBhY3RpdmUgc2VhcmNoX3BhdGguCisJICoKKwkgKiBzY2hlbWFfcXVhbGlmaWVkID0g ZmFsc2U6IG5hcnJvdyB0byB0aGUgYmFzZSBzY2hlbWEgc28gdGhhdCBzYW1lLXNjaGVtYQorCSAq IHJlZmVyZW5jZXMgaW4gREVGQVVMVCBleHByZXNzaW9ucywgRksgdGFyZ2V0cywgaW5kZXhlcywg cnVsZXMsIGFuZAorCSAqIHN0YXRpc3RpY3MgY29tZSBvdXQgdW5xdWFsaWZpZWQgYXV0b21hdGlj YWxseS4gIENyb3NzLXNjaGVtYSByZWZlcmVuY2VzCisJICogc3RheSBxdWFsaWZpZWQsIHdoaWNo IGlzIHRoZSBjb3JyZWN0bmVzcyByZXF1aXJlbWVudC4KKwkgKgorCSAqIHNjaGVtYV9xdWFsaWZp ZWQgPSB0cnVlOiBuYXJyb3cgdG8gcGdfY2F0YWxvZyBvbmx5IHNvIHRoYXQgb2JqZWN0cyBpbgor CSAqIHRoZSBiYXNlIHNjaGVtYSAob3IgYW55IHVzZXIgc2NoZW1hIHRoZSBjYWxsZXIgcGxhY2Vk IG9uIHNlYXJjaF9wYXRoKQorCSAqIGFyZSBub3QgcmVhY2hhYmxlIHdpdGhvdXQgcXVhbGlmaWNh dGlvbiwgZm9yY2luZyBmdWxseS1xdWFsaWZpZWQgb3V0cHV0CisJICogZnJvbSBldmVyeSBoZWxw ZXIgcmVnYXJkbGVzcyBvZiB0aGUgY2FsbGVyJ3Mgc2Vzc2lvbiBzZWFyY2hfcGF0aC4KKwkgKgor CSAqIEF0RU9YYWN0X0dVQyBjbGVhbnMgdXAgYXQgeGFjdCBlbmQgaWYgYW55dGhpbmcgdGhyb3dz IGJldHdlZW4gaGVyZSBhbmQKKwkgKiB0aGUgZXhwbGljaXQgcmVzdG9yZSBiZWxvdzsgb24gdGhl IG5vcm1hbCBwYXRoIHdlIHJlc3RvcmUgcmlnaHQgYmVmb3JlCisJICogcmV0dXJuaW5nLgorCSAq LworCWlmICghY3R4LT5zY2hlbWFfcXVhbGlmaWVkKQorCXsKKwkJY2hhcgkgICAqbnNwbmFtZSA9 IGdldF9uYW1lc3BhY2VfbmFtZShjdHgtPmJhc2VfbmFtZXNwYWNlKTsKKworCQlpZiAobnNwbmFt ZSAhPSBOVUxMKQorCQl7CisJCQljb25zdCBjaGFyICpxbnNwID0gcXVvdGVfaWRlbnRpZmllcihu c3BuYW1lKTsKKworCQkJY3R4LT5zYXZlX25lc3RsZXZlbCA9IE5ld0dVQ05lc3RMZXZlbCgpOwor CQkJKHZvaWQpIHNldF9jb25maWdfb3B0aW9uKCJzZWFyY2hfcGF0aCIsIHFuc3AsCisJCQkJCQkJ CQkgUEdDX1VTRVJTRVQsIFBHQ19TX1NFU1NJT04sCisJCQkJCQkJCQkgR1VDX0FDVElPTl9TQVZF LCB0cnVlLCAwLCBmYWxzZSk7CisJCQlpZiAocW5zcCAhPSBuc3BuYW1lKQorCQkJCXBmcmVlKChj aGFyICopIHFuc3ApOworCQkJcGZyZWUobnNwbmFtZSk7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJ Y3R4LT5zYXZlX25lc3RsZXZlbCA9IE5ld0dVQ05lc3RMZXZlbCgpOworCQkodm9pZCkgc2V0X2Nv bmZpZ19vcHRpb24oInNlYXJjaF9wYXRoIiwgInBnX2NhdGFsb2ciLAorCQkJCQkJCQkgUEdDX1VT RVJTRVQsIFBHQ19TX1NFU1NJT04sCisJCQkJCQkJCSBHVUNfQUNUSU9OX1NBVkUsIHRydWUsIDAs IGZhbHNlKTsKKwl9CisKKwkvKgorCSAqIENhY2hlIGxvY2FsbHktZGVjbGFyZWQgTk9UIE5VTEwg Y29uc3RyYWludCBtZXRhZGF0YSBzbyB0aGUgY29sdW1uLSBlbWl0CisJICogaGVscGVycyBjYW4g cHJvZHVjZSAiQ09OU1RSQUlOVCBuYW1lIE5PVCBOVUxMIiBpbmxpbmUgZm9yIHVzZXItbmFtZWQK KwkgKiBjb25zdHJhaW50cywgYW5kIHNvIHRoZSBjb25zdHJhaW50IGxvb3AgY2FuIGF2b2lkIGRv dWJsZS1lbWl0dGluZyB0aGVtLgorCSAqLworCWN0eC0+bm5fZW50cmllcyA9IGNvbGxlY3RfbG9j YWxfbm90X251bGwocmVsLCAmY3R4LT5za2lwX25vdG51bGxfb2lkcyk7CisKKwlpbml0U3RyaW5n SW5mbygmY3R4LT5idWYpOworCisJLyoKKwkgKiBFbWlzc2lvbiBwYXNzZXMuICBPcmRlciBpcyBz aWduaWZpY2FudDogQ1JFQVRFIFRBQkxFIGZpcnN0OyBPV05FUiBhbmQKKwkgKiB0aGUgcGVyLWNv bHVtbiBBTFRFUiBDT0xVTU4gcGFzc2VzIGJlZm9yZSBzdWItb2JqZWN0IGVtaXNzaW9uOworCSAq IHN1Yi1vYmplY3RzIGluIGRlcGVuZGVuY3ktZnJpZW5kbHkgb3JkZXIgKGluZGV4ZXMgYmVmb3Jl IGNvbnN0cmFpbnRzLAorCSAqIHNpbmNlIGNvbnN0cmFpbnQtYmFja2VkIGluZGV4ZXMgYXJlIGVt aXR0ZWQgb3V0LW9mLWxpbmUgYnkgdGhlCisJICogY29uc3RyYWludCBsb29wKTsgcGFydGl0aW9u IGNoaWxkcmVuIGxhc3Qgc28gdGhlIHBhcmVudCBhbHJlYWR5IGV4aXN0cworCSAqIGF0IHJlcGxh eSB0aW1lLiAgRWFjaCBoZWxwZXIgZ2F0ZXMgaXRzZWxmIG9uIGlzX2tpbmRfaW5jbHVkZWQgZm9y IHRoZQorCSAqIHJlbGV2YW50IFRBQkxFX0RETF9LSU5EXyo7IHRoZSBmb3VyICJ0YWJsZSBpdHNl bGYiIHBhc3NlcyBhcmUgZ3JvdXBlZAorCSAqIGhlcmUgdW5kZXIgS0lORF9UQUJMRSBzbyBhbGwg b2YgQ1JFQVRFIFRBQkxFIC8gT1dORVIgLyBTRVQgREVGQVVMVCAvCisJICogU0VUICguLi4pIGRy b3Agb3V0IHRvZ2V0aGVyIHdoZW4gdGhlIHVzZXIgYXNrcyBmb3Igb25seSBzdWItb2JqZWN0cwor CSAqIChlLmcuIG9ubHkgPT4gJ2ZvcmVpZ25fa2V5JyBmb3IgdGhlIHNlY29uZCBwYXNzIG9mIGEg dHdvLXBhc3MgRksKKwkgKiBjbG9uZSkuCisJICovCisJaWYgKGlzX2tpbmRfaW5jbHVkZWQoY3R4 LCBUQUJMRV9ERExfS0lORF9UQUJMRSkpCisJeworCQllbWl0X2NyZWF0ZV90YWJsZV9zdG10KGN0 eCk7CisJCWVtaXRfb3duZXJfc3RtdChjdHgpOworCQllbWl0X2NoaWxkX2RlZmF1bHRfb3ZlcnJp ZGVzKGN0eCk7CisJCWVtaXRfYXR0b3B0aW9ucyhjdHgpOworCQllbWl0X3R5cGVkX2NvbHVtbl9z dG9yYWdlKGN0eCk7CisJfQorCWVtaXRfaW5kZXhlcyhjdHgpOworCWVtaXRfY2x1c3Rlcl9vbihj dHgpOworCWVtaXRfbG9jYWxfY29uc3RyYWludHMoY3R4KTsKKwllbWl0X3J1bGVzKGN0eCk7CisJ ZW1pdF9zdGF0aXN0aWNzKGN0eCk7CisJZW1pdF9yZXBsaWNhX2lkZW50aXR5KGN0eCk7CisJZW1p dF9ybHNfdG9nZ2xlcyhjdHgpOworCisJLyoKKwkgKiBUcmlnZ2VycyBhbmQgcm93LWxldmVsIHNl Y3VyaXR5IHBvbGljaWVzIC0gZGlzYWJsZWQgdW50aWwgdGhlCisJICogc3RhbmRhbG9uZSBwZ19n ZXRfdHJpZ2dlcl9kZGwoKSBhbmQgcGdfZ2V0X3BvbGljeV9kZGwoKSBoZWxwZXJzIGxhbmQuCisJ ICogVGhlIHNjYW4gKyBsb2NrICsgZmlsdGVyIHNjYWZmb2xkaW5nIGJlbG93IGlzIHByZXNlcnZl ZCAoaW5zaWRlICNpZiAwKQorCSAqIHNvIHdpcmluZyB1cCBlYWNoIGVtaXNzaW9uIGJlY29tZXMg YSBvbmUtbGluZXIgaW4gdGhlIGxvb3AgYm9keSBvbmNlCisJICogdGhvc2UgaGVscGVycyBhcmUg YXZhaWxhYmxlLgorCSAqLworI2lmIDAKKwlpZiAoaXNfa2luZF9pbmNsdWRlZChjdHgsIFRBQkxF X0RETF9LSU5EX1RSSUdHRVIpKQorCXsKKwkJUmVsYXRpb24JdHJpZ1JlbDsKKwkJU3lzU2NhbkRl c2MgdHJpZ1NjYW47CisJCVNjYW5LZXlEYXRhIHRyaWdLZXk7CisJCUhlYXBUdXBsZQl0cmlnVHVw OworCisJCXRyaWdSZWwgPSB0YWJsZV9vcGVuKFRyaWdnZXJSZWxhdGlvbklkLCBBY2Nlc3NTaGFy ZUxvY2spOworCQlTY2FuS2V5SW5pdCgmdHJpZ0tleSwKKwkJCQkJQW51bV9wZ190cmlnZ2VyX3Rn cmVsaWQsCisJCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQkJT2JqZWN0 SWRHZXREYXR1bShjdHgtPnJlbGlkKSk7CisJCXRyaWdTY2FuID0gc3lzdGFibGVfYmVnaW5zY2Fu KHRyaWdSZWwsIFRyaWdnZXJSZWxpZE5hbWVJbmRleElkLAorCQkJCQkJCQkJICB0cnVlLCBOVUxM LCAxLCAmdHJpZ0tleSk7CisJCXdoaWxlIChIZWFwVHVwbGVJc1ZhbGlkKHRyaWdUdXAgPSBzeXN0 YWJsZV9nZXRuZXh0KHRyaWdTY2FuKSkpCisJCXsKKwkJCUZvcm1fcGdfdHJpZ2dlciB0cmcgPSAo Rm9ybV9wZ190cmlnZ2VyKSBHRVRTVFJVQ1QodHJpZ1R1cCk7CisKKwkJCWlmICh0cmctPnRnaXNp bnRlcm5hbCkKKwkJCQljb250aW51ZTsKKworCQkJLyogVE9ETzogYXBwZW5kIHBnX2dldF90cmln Z2VyX2RkbCh0cmctPm9pZCkgb3V0cHV0IGhlcmUuICovCisJCX0KKwkJc3lzdGFibGVfZW5kc2Nh bih0cmlnU2Nhbik7CisJCXRhYmxlX2Nsb3NlKHRyaWdSZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisJ fQorCisJaWYgKGlzX2tpbmRfaW5jbHVkZWQoY3R4LCBUQUJMRV9ERExfS0lORF9QT0xJQ1kpKQor CXsKKwkJUmVsYXRpb24JcG9sUmVsOworCQlTeXNTY2FuRGVzYyBwb2xTY2FuOworCQlTY2FuS2V5 RGF0YSBwb2xLZXk7CisJCUhlYXBUdXBsZQlwb2xUdXA7CisKKwkJcG9sUmVsID0gdGFibGVfb3Bl bihQb2xpY3lSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCQlTY2FuS2V5SW5pdCgmcG9s S2V5LAorCQkJCQlBbnVtX3BnX3BvbGljeV9wb2xyZWxpZCwKKwkJCQkJQlRFcXVhbFN0cmF0ZWd5 TnVtYmVyLCBGX09JREVRLAorCQkJCQlPYmplY3RJZEdldERhdHVtKGN0eC0+cmVsaWQpKTsKKwkJ cG9sU2NhbiA9IHN5c3RhYmxlX2JlZ2luc2Nhbihwb2xSZWwsIFBvbGljeVBvbHJlbGlkUG9sbmFt ZUluZGV4SWQsCisJCQkJCQkJCQkgdHJ1ZSwgTlVMTCwgMSwgJnBvbEtleSk7CisJCXdoaWxlIChI ZWFwVHVwbGVJc1ZhbGlkKHBvbFR1cCA9IHN5c3RhYmxlX2dldG5leHQocG9sU2NhbikpKQorCQl7 CisJCQkvKiBUT0RPOiBhcHBlbmQgcGdfZ2V0X3BvbGljeV9kZGwocmVsaWQsIHBvbG5hbWUpIG91 dHB1dCBoZXJlLiAqLworCQl9CisJCXN5c3RhYmxlX2VuZHNjYW4ocG9sU2Nhbik7CisJCXRhYmxl X2Nsb3NlKHBvbFJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKwl9CisjZW5kaWYKKworCWVtaXRfcGFy dGl0aW9uX2NoaWxkcmVuKGN0eCk7CisKKwl7CisJCWludAkJCW5hdHRzID0gUmVsYXRpb25HZXRE ZXNjcihyZWwpLT5uYXR0czsKKworCQlmb3IgKGludCBpID0gMTsgaSA8PSBuYXR0czsgaSsrKQor CQkJaWYgKGN0eC0+bm5fZW50cmllc1tpXS5uYW1lICE9IE5VTEwpCisJCQkJcGZyZWUoY3R4LT5u bl9lbnRyaWVzW2ldLm5hbWUpOworCX0KKwlwZnJlZShjdHgtPm5uX2VudHJpZXMpOworCisJdGFi bGVfY2xvc2UocmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCXBmcmVlKGN0eC0+YnVmLmRhdGEpOwor CXBmcmVlKGN0eC0+cXVhbG5hbWUpOworCWxpc3RfZnJlZShjdHgtPnNraXBfbm90bnVsbF9vaWRz KTsKKworCS8qCisJICogUG9wIHRoZSBuYXJyb3dlZCBzZWFyY2hfcGF0aCBub3cgdGhhdCBhbGwg aGVscGVycyBoYXZlIHJ1bi4gIEVycm9ycworCSAqIHRocm93biBlYXJsaWVyIGFyZSBjbGVhbmVk IHVwIGJ5IEF0RU9YYWN0X0dVQyBhdCB4YWN0IGVuZC4KKwkgKi8KKwlpZiAoY3R4LT5zYXZlX25l c3RsZXZlbCA+PSAwKQorCQlBdEVPWGFjdF9HVUModHJ1ZSwgY3R4LT5zYXZlX25lc3RsZXZlbCk7 CisKKwlyZXR1cm4gY3R4LT5zdGF0ZW1lbnRzOworfQorCisvKgorICogcGdfZ2V0X3RhYmxlX2Rk bAorICoJCVJldHVybiBEREwgdG8gcmVjcmVhdGUgYSB0YWJsZSBhcyBhIHNldCBvZiB0ZXh0IHJv d3MuCisgKi8KK0RhdHVtCitwZ19nZXRfdGFibGVfZGRsKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJ RnVuY0NhbGxDb250ZXh0ICpmdW5jY3R4OworCUxpc3QJICAgKnN0YXRlbWVudHM7CisKKwlpZiAo U1JGX0lTX0ZJUlNUQ0FMTCgpKQorCXsKKwkJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCQlU YWJsZURkbENvbnRleHQgY3R4ID0gezB9OworCisJCWZ1bmNjdHggPSBTUkZfRklSU1RDQUxMX0lO SVQoKTsKKwkJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhmdW5jY3R4LT5tdWx0 aV9jYWxsX21lbW9yeV9jdHgpOworCisJCWlmIChQR19BUkdJU05VTEwoMCkpCisJCXsKKwkJCU1l bW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKwkJCVNSRl9SRVRVUk5fRE9ORShmdW5j Y3R4KTsKKwkJfQorCisJCWlmICghUEdfQVJHSVNOVUxMKDUpICYmICFQR19BUkdJU05VTEwoNikp CisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1F VEVSX1ZBTFVFKSwKKwkJCQkJIGVycm1zZygiXCJvbmx5X2tpbmRzXCIgYW5kIFwiZXhjZXB0X2tp bmRzXCIgcGFyYW1ldGVycyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIikpKTsKKworCQkvKiBPcHRp b24gZGVmYXVsdHMgKG1hdGNoIHByb2FyZ2RlZmF1bHRzIGluIHBnX3Byb2MuZGF0KS4gKi8KKwkJ Y3R4LnJlbGlkID0gUEdfR0VUQVJHX09JRCgwKTsKKwkJY3R4LnByZXR0eSA9IGZhbHNlOworCQlj dHgubm9fb3duZXIgPSBmYWxzZTsJCS8qIG93bmVyIERFRkFVTFQgdHJ1ZSAgLT4gbm9fb3duZXIg PSBmYWxzZSAqLworCQljdHgubm9fdGFibGVzcGFjZSA9IGZhbHNlOwkvKiB0YWJsZXNwYWNlIERF RkFVTFQgdHJ1ZSAtPiBub190YWJsZXNwYWNlID0gZmFsc2UgKi8KKwkJY3R4LnNjaGVtYV9xdWFs aWZpZWQgPSB0cnVlOworCQljdHgub25seV9raW5kcyA9IE5VTEw7CisJCWN0eC5leGNlcHRfa2lu ZHMgPSBOVUxMOworCisJCS8qIE92ZXJyaWRlIGRlZmF1bHRzIHdpdGggYW55IGV4cGxpY2l0bHkg c3VwcGxpZWQgdmFsdWVzLiAqLworCQlpZiAoIVBHX0FSR0lTTlVMTCgxKSkKKwkJCWN0eC5wcmV0 dHkgPSBQR19HRVRBUkdfQk9PTCgxKTsKKwkJaWYgKCFQR19BUkdJU05VTEwoMikpCisJCQljdHgu bm9fb3duZXIgPSAhUEdfR0VUQVJHX0JPT0woMik7CisJCWlmICghUEdfQVJHSVNOVUxMKDMpKQor CQkJY3R4Lm5vX3RhYmxlc3BhY2UgPSAhUEdfR0VUQVJHX0JPT0woMyk7CisJCWlmICghUEdfQVJH SVNOVUxMKDQpKQorCQkJY3R4LnNjaGVtYV9xdWFsaWZpZWQgPSBQR19HRVRBUkdfQk9PTCg0KTsK KwkJaWYgKCFQR19BUkdJU05VTEwoNSkpCisJCQljdHgub25seV9raW5kcyA9IHBhcnNlX2tpbmRf YXJyYXkoIm9ubHlfa2luZHMiLAorCQkJCQkJCQkJCQkgIFBHX0dFVEFSR19BUlJBWVRZUEVfUCg1 KSk7CisJCWlmICghUEdfQVJHSVNOVUxMKDYpKQorCQkJY3R4LmV4Y2VwdF9raW5kcyA9IHBhcnNl X2tpbmRfYXJyYXkoImV4Y2VwdF9raW5kcyIsCisJCQkJCQkJCQkJCQlQR19HRVRBUkdfQVJSQVlU WVBFX1AoNikpOworCisJCXN0YXRlbWVudHMgPSBwZ19nZXRfdGFibGVfZGRsX2ludGVybmFsKCZj dHgpOworCQlmdW5jY3R4LT51c2VyX2ZjdHggPSBzdGF0ZW1lbnRzOworCQlmdW5jY3R4LT5tYXhf Y2FsbHMgPSBsaXN0X2xlbmd0aChzdGF0ZW1lbnRzKTsKKworCQlNZW1vcnlDb250ZXh0U3dpdGNo VG8ob2xkY29udGV4dCk7CisJfQorCisJZnVuY2N0eCA9IFNSRl9QRVJDQUxMX1NFVFVQKCk7CisJ c3RhdGVtZW50cyA9IChMaXN0ICopIGZ1bmNjdHgtPnVzZXJfZmN0eDsKKworCWlmIChmdW5jY3R4 LT5jYWxsX2NudHIgPCBmdW5jY3R4LT5tYXhfY2FsbHMpCisJeworCQljaGFyCSAgICpzdG10Owor CisJCXN0bXQgPSBsaXN0X250aChzdGF0ZW1lbnRzLCBmdW5jY3R4LT5jYWxsX2NudHIpOworCisJ CVNSRl9SRVRVUk5fTkVYVChmdW5jY3R4LCBDU3RyaW5nR2V0VGV4dERhdHVtKHN0bXQpKTsKKwl9 CisJZWxzZQorCXsKKwkJbGlzdF9mcmVlX2RlZXAoc3RhdGVtZW50cyk7CisJCVNSRl9SRVRVUk5f RE9ORShmdW5jY3R4KTsKKwl9Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQv cnVsZXV0aWxzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKaW5kZXggODE5 NjMxNzgxYzAuLjJmM2U1NDNmNDU1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQv cnVsZXV0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jCkBAIC0y Myw2ICsyMyw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0YWlscy5oIgogI2luY2x1ZGUg ImFjY2Vzcy9yZWxhdGlvbi5oIgogI2luY2x1ZGUgImFjY2Vzcy90YWJsZS5oIgorI2luY2x1ZGUg ImNhdGFsb2cvbmFtZXNwYWNlLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19hZ2dyZWdhdGUuaCIK ICNpbmNsdWRlICJjYXRhbG9nL3BnX2FtLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19hdXRoaWQu aCIKQEAgLTM3MCw3ICszNzEsNyBAQCBzdGF0aWMgdm9pZCBtYWtlX3Byb3BncmFwaGRlZl9lbGVt ZW50cyhTdHJpbmdJbmZvIGJ1ZiwgT2lkIHBncmVsaWQsIGNoYXIgcGdla2luZAogc3RhdGljIHZv aWQgbWFrZV9wcm9wZ3JhcGhkZWZfbGFiZWxzKFN0cmluZ0luZm8gYnVmLCBPaWQgZWxpZCwgY29u c3QgY2hhciAqZWxhbGlhcywgT2lkIGVscmVsaWQpOwogc3RhdGljIHZvaWQgbWFrZV9wcm9wZ3Jh cGhkZWZfcHJvcGVydGllcyhTdHJpbmdJbmZvIGJ1ZiwgT2lkIGVsbGFiZWxpZCwgT2lkIGVscmVs aWQpOwogc3RhdGljIGNoYXIgKnBnX2dldF9zdGF0aXN0aWNzb2JqX3dvcmtlcihPaWQgc3RhdGV4 dGlkLCBib29sIGNvbHVtbnNfb25seSwKLQkJCQkJCQkJCQkgYm9vbCBtaXNzaW5nX29rKTsKKwkJ CQkJCQkJCQkgYm9vbCBtaXNzaW5nX29rLCBpbnQgcHJldHR5RmxhZ3MpOwogc3RhdGljIGNoYXIg KnBnX2dldF9wYXJ0a2V5ZGVmX3dvcmtlcihPaWQgcmVsaWQsIGludCBwcmV0dHlGbGFncywKIAkJ CQkJCQkJCSAgYm9vbCBhdHRyc09ubHksIGJvb2wgbWlzc2luZ19vayk7CiBzdGF0aWMgY2hhciAq cGdfZ2V0X2NvbnN0cmFpbnRkZWZfd29ya2VyKE9pZCBjb25zdHJhaW50SWQsIGJvb2wgZnVsbENv bW1hbmQsCkBAIC02MDUsNiArNjA2LDE5IEBAIHBnX2dldF9ydWxlZGVmX2V4dChQR19GVU5DVElP Tl9BUkdTKQogCVBHX1JFVFVSTl9URVhUX1Aoc3RyaW5nX3RvX3RleHQocmVzKSk7CiB9CiAKKy8q CisgKiBwZ19nZXRfcnVsZWRlZl9kZGwKKyAqCQlMaWtlIHBnX2dldF9ydWxlZGVmIGJ1dCB1c2Vz IHRoZSBhY3RpdmUgc2VhcmNoX3BhdGggdG8gZGVjaWRlCisgKgkJd2hldGhlciB0byBzY2hlbWEt cXVhbGlmeSB0aGUgcnVsZSdzIHRhcmdldCByZWxhdGlvbiBuYW1lLgorICoJCUZvciB1c2UgYnkg cGdfZ2V0X3RhYmxlX2RkbCB3aGljaCBoYXMgYWxyZWFkeSBzZXQgc2VhcmNoX3BhdGgKKyAqCQl0 byB0aGUgYmFzZSBzY2hlbWEgd2hlbiBzY2hlbWFfcXVhbGlmaWVkPWZhbHNlLgorICovCitjaGFy ICoKK3BnX2dldF9ydWxlZGVmX2RkbChPaWQgcnVsZW9pZCkKK3sKKwlyZXR1cm4gcGdfZ2V0X3J1 bGVkZWZfd29ya2VyKHJ1bGVvaWQsIFBSRVRUWUZMQUdfSU5ERU5UIHwgUFJFVFRZRkxBR19TQ0hF TUEpOworfQorCiAKIHN0YXRpYyBjaGFyICoKIHBnX2dldF9ydWxlZGVmX3dvcmtlcihPaWQgcnVs ZW9pZCwgaW50IHByZXR0eUZsYWdzKQpAQCAtMTI0Myw2ICsxMjU3LDIyIEBAIHBnX2dldF9pbmRl eGRlZl9zdHJpbmcoT2lkIGluZGV4cmVsaWQpCiAJCQkJCQkJCSAgMCwgZmFsc2UpOwogfQogCisv KgorICogcGdfZ2V0X2luZGV4ZGVmX2RkbAorICoJCUxpa2UgcGdfZ2V0X2luZGV4ZGVmX3N0cmlu ZyBidXQgdXNlcyB0aGUgYWN0aXZlIHNlYXJjaF9wYXRoIHRvCisgKgkJZGVjaWRlIHdoZXRoZXIg dG8gc2NoZW1hLXF1YWxpZnkgdGhlIGluZGV4ZWQgcmVsYXRpb24gbmFtZS4KKyAqCQlGb3IgdXNl IGJ5IHBnX2dldF90YWJsZV9kZGwgd2hpY2ggaGFzIGFscmVhZHkgc2V0IHNlYXJjaF9wYXRoCisg KgkJdG8gdGhlIGJhc2Ugc2NoZW1hIHdoZW4gc2NoZW1hX3F1YWxpZmllZD1mYWxzZS4KKyAqLwor Y2hhciAqCitwZ19nZXRfaW5kZXhkZWZfZGRsKE9pZCBpbmRleHJlbGlkKQoreworCXJldHVybiBw Z19nZXRfaW5kZXhkZWZfd29ya2VyKGluZGV4cmVsaWQsIDAsIE5VTEwsCisJCQkJCQkJCSAgZmFs c2UsIGZhbHNlLAorCQkJCQkJCQkgIHRydWUsIHRydWUsCisJCQkJCQkJCSAgUFJFVFRZRkxBR19T Q0hFTUEsIGZhbHNlKTsKK30KKwogLyogSW50ZXJuYWwgdmVyc2lvbiB0aGF0IGp1c3QgcmVwb3J0 cyB0aGUga2V5LWNvbHVtbiBkZWZpbml0aW9ucyAqLwogY2hhciAqCiBwZ19nZXRfaW5kZXhkZWZf Y29sdW1ucyhPaWQgaW5kZXhyZWxpZCwgYm9vbCBwcmV0dHkpCkBAIC0xOTcxLDcgKzIwMDEsNyBA QCBwZ19nZXRfc3RhdGlzdGljc29iamRlZihQR19GVU5DVElPTl9BUkdTKQogCU9pZAkJCXN0YXRl eHRpZCA9IFBHX0dFVEFSR19PSUQoMCk7CiAJY2hhcgkgICAqcmVzOwogCi0JcmVzID0gcGdfZ2V0 X3N0YXRpc3RpY3NvYmpfd29ya2VyKHN0YXRleHRpZCwgZmFsc2UsIHRydWUpOworCXJlcyA9IHBn X2dldF9zdGF0aXN0aWNzb2JqX3dvcmtlcihzdGF0ZXh0aWQsIGZhbHNlLCB0cnVlLCAwKTsKIAog CWlmIChyZXMgPT0gTlVMTCkKIAkJUEdfUkVUVVJOX05VTEwoKTsKQEAgLTE5ODYsNyArMjAxNiwy MCBAQCBwZ19nZXRfc3RhdGlzdGljc29iamRlZihQR19GVU5DVElPTl9BUkdTKQogY2hhciAqCiBw Z19nZXRfc3RhdGlzdGljc29iamRlZl9zdHJpbmcoT2lkIHN0YXRleHRpZCkKIHsKLQlyZXR1cm4g cGdfZ2V0X3N0YXRpc3RpY3NvYmpfd29ya2VyKHN0YXRleHRpZCwgZmFsc2UsIGZhbHNlKTsKKwly ZXR1cm4gcGdfZ2V0X3N0YXRpc3RpY3NvYmpfd29ya2VyKHN0YXRleHRpZCwgZmFsc2UsIGZhbHNl LCAwKTsKK30KKworLyoKKyAqIHBnX2dldF9zdGF0aXN0aWNzb2JqZGVmX2RkbAorICoJCUxpa2Ug cGdfZ2V0X3N0YXRpc3RpY3NvYmpkZWZfc3RyaW5nIGJ1dCB1c2VzIHRoZSBhY3RpdmUgc2VhcmNo X3BhdGgKKyAqCQl0byBkZWNpZGUgd2hldGhlciB0byBzY2hlbWEtcXVhbGlmeSB0aGUgc3RhdGlz dGljcyBvYmplY3QgbmFtZS4KKyAqCQlGb3IgdXNlIGJ5IHBnX2dldF90YWJsZV9kZGwgd2hpY2gg aGFzIGFscmVhZHkgc2V0IHNlYXJjaF9wYXRoCisgKgkJdG8gdGhlIGJhc2Ugc2NoZW1hIHdoZW4g c2NoZW1hX3F1YWxpZmllZD1mYWxzZS4KKyAqLworY2hhciAqCitwZ19nZXRfc3RhdGlzdGljc29i amRlZl9kZGwoT2lkIHN0YXRleHRpZCkKK3sKKwlyZXR1cm4gcGdfZ2V0X3N0YXRpc3RpY3NvYmpf d29ya2VyKHN0YXRleHRpZCwgZmFsc2UsIGZhbHNlLCBQUkVUVFlGTEFHX1NDSEVNQSk7CiB9CiAK IC8qCkBAIC0xOTk5LDcgKzIwNDIsNyBAQCBwZ19nZXRfc3RhdGlzdGljc29iamRlZl9jb2x1bW5z KFBHX0ZVTkNUSU9OX0FSR1MpCiAJT2lkCQkJc3RhdGV4dGlkID0gUEdfR0VUQVJHX09JRCgwKTsK IAljaGFyCSAgICpyZXM7CiAKLQlyZXMgPSBwZ19nZXRfc3RhdGlzdGljc29ial93b3JrZXIoc3Rh dGV4dGlkLCB0cnVlLCB0cnVlKTsKKwlyZXMgPSBwZ19nZXRfc3RhdGlzdGljc29ial93b3JrZXIo c3RhdGV4dGlkLCB0cnVlLCB0cnVlLCAwKTsKIAogCWlmIChyZXMgPT0gTlVMTCkKIAkJUEdfUkVU VVJOX05VTEwoKTsKQEAgLTIwMTEsNyArMjA1NCw4IEBAIHBnX2dldF9zdGF0aXN0aWNzb2JqZGVm X2NvbHVtbnMoUEdfRlVOQ1RJT05fQVJHUykKICAqIEludGVybmFsIHdvcmtob3JzZSB0byBkZWNv bXBpbGUgYW4gZXh0ZW5kZWQgc3RhdGlzdGljcyBvYmplY3QuCiAgKi8KIHN0YXRpYyBjaGFyICoK LXBnX2dldF9zdGF0aXN0aWNzb2JqX3dvcmtlcihPaWQgc3RhdGV4dGlkLCBib29sIGNvbHVtbnNf b25seSwgYm9vbCBtaXNzaW5nX29rKQorcGdfZ2V0X3N0YXRpc3RpY3NvYmpfd29ya2VyKE9pZCBz dGF0ZXh0aWQsIGJvb2wgY29sdW1uc19vbmx5LCBib29sIG1pc3Npbmdfb2ssCisJCQkJCQkJaW50 IHByZXR0eUZsYWdzKQogewogCUZvcm1fcGdfc3RhdGlzdGljX2V4dCBzdGF0ZXh0cmVjOwogCUhl YXBUdXBsZQlzdGF0ZXh0dHVwOwpAQCAtMjA3MSwxMCArMjExNSwxOCBAQCBwZ19nZXRfc3RhdGlz dGljc29ial93b3JrZXIoT2lkIHN0YXRleHRpZCwgYm9vbCBjb2x1bW5zX29ubHksIGJvb2wgbWlz c2luZ19vaykKIAogCWlmICghY29sdW1uc19vbmx5KQogCXsKLQkJbnNwID0gZ2V0X25hbWVzcGFj ZV9uYW1lX29yX3RlbXAoc3RhdGV4dHJlYy0+c3R4bmFtZXNwYWNlKTsKLQkJYXBwZW5kU3RyaW5n SW5mbygmYnVmLCAiQ1JFQVRFIFNUQVRJU1RJQ1MgJXMiLAotCQkJCQkJIHF1b3RlX3F1YWxpZmll ZF9pZGVudGlmaWVyKG5zcCwKLQkJCQkJCQkJCQkJCQlOYW1lU3RyKHN0YXRleHRyZWMtPnN0eG5h bWUpKSk7CisJCWlmICgocHJldHR5RmxhZ3MgJiBQUkVUVFlGTEFHX1NDSEVNQSkgJiYKKwkJCVN0 YXRpc3RpY3NPYmpJc1Zpc2libGUoc3RhdGV4dGlkKSkKKwkJCWFwcGVuZFN0cmluZ0luZm8oJmJ1 ZiwgIkNSRUFURSBTVEFUSVNUSUNTICVzIiwKKwkJCQkJCQkgcXVvdGVfaWRlbnRpZmllcihOYW1l U3RyKHN0YXRleHRyZWMtPnN0eG5hbWUpKSk7CisJCWVsc2UKKwkJeworCQkJbnNwID0gZ2V0X25h bWVzcGFjZV9uYW1lX29yX3RlbXAoc3RhdGV4dHJlYy0+c3R4bmFtZXNwYWNlKTsKKwkJCWFwcGVu ZFN0cmluZ0luZm8oJmJ1ZiwgIkNSRUFURSBTVEFUSVNUSUNTICVzIiwKKwkJCQkJCQkgcXVvdGVf cXVhbGlmaWVkX2lkZW50aWZpZXIobnNwLAorCQkJCQkJCQkJCQkJCQlOYW1lU3RyKHN0YXRleHRy ZWMtPnN0eG5hbWUpKSk7CisJCQlwZnJlZShuc3ApOworCQl9CiAKIAkJLyoKIAkJICogRGVjb2Rl IHRoZSBzdHhraW5kIGNvbHVtbiBzbyB0aGF0IHdlIGtub3cgd2hpY2ggc3RhdHMgdHlwZXMgdG8K QEAgLTIxNjUsMTAgKzIyMTcsOSBAQCBwZ19nZXRfc3RhdGlzdGljc29ial93b3JrZXIoT2lkIHN0 YXRleHRpZCwgYm9vbCBjb2x1bW5zX29ubHksIGJvb2wgbWlzc2luZ19vaykKIAl7CiAJCU5vZGUJ ICAgKmV4cHIgPSAoTm9kZSAqKSBsZmlyc3QobGMpOwogCQljaGFyCSAgICpzdHI7Ci0JCWludAkJ CXByZXR0eUZsYWdzID0gUFJFVFRZRkxBR19QQVJFTjsKIAogCQlzdHIgPSBkZXBhcnNlX2V4cHJl c3Npb25fcHJldHR5KGV4cHIsIGNvbnRleHQsIGZhbHNlLCBmYWxzZSwKLQkJCQkJCQkJCQlwcmV0 dHlGbGFncywgMCk7CisJCQkJCQkJCQkJUFJFVFRZRkxBR19QQVJFTiwgMCk7CiAKIAkJaWYgKGNv bG5vID4gMCkKIAkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmJ1ZiwgIiwgIik7CkBAIC0yNTQ2 LDYgKzI1OTcsMjAgQEAgcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29tbWFuZChPaWQgY29uc3RyYWlu dElkKQogCXJldHVybiBwZ19nZXRfY29uc3RyYWludGRlZl93b3JrZXIoY29uc3RyYWludElkLCB0 cnVlLCAwLCBmYWxzZSk7CiB9CiAKKy8qCisgKiBwZ19nZXRfY29uc3RyYWludGRlZl9ib2R5Cisg KgkJUmV0dXJucyB0aGUgY29uc3RyYWludCBkZWZpbml0aW9uIGJvZHkgd2l0aG91dCB0aGUKKyAq CQkiQUxURVIgVEFCTEUgbmFtZSBBREQgQ09OU1RSQUlOVCBjbmFtZSIgcHJlZml4LgorICoJCUZL IHRhcmdldCByZWxhdGlvbiBuYW1lcyBpbiB0aGUgYm9keSBhbHJlYWR5IHVzZQorICoJCWdlbmVy YXRlX3JlbGF0aW9uX25hbWUgKHNlYXJjaF9wYXRoLWF3YXJlKS4gIEZvciB1c2UgYnkKKyAqCQlw Z19nZXRfdGFibGVfZGRsIHdoaWNoIGJ1aWxkcyB0aGUgQUxURVIgVEFCTEUgcHJlZml4IGl0c2Vs Zi4KKyAqLworY2hhciAqCitwZ19nZXRfY29uc3RyYWludGRlZl9ib2R5KE9pZCBjb25zdHJhaW50 SWQpCit7CisJcmV0dXJuIHBnX2dldF9jb25zdHJhaW50ZGVmX3dvcmtlcihjb25zdHJhaW50SWQs IGZhbHNlLCAwLCBmYWxzZSk7Cit9CisKIC8qCiAgKiBBcyBvZiA5LjQsIHdlIG5vdyB1c2UgYW4g TVZDQyBzbmFwc2hvdCBmb3IgdGhpcy4KICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0 YWxvZy9wZ19pbmhlcml0cy5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19pbmhlcml0cy5oCmlu ZGV4IGNjODc0YWJhYWJiLi4xZTQ2M2IwMTA2ZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0 YWxvZy9wZ19pbmhlcml0cy5oCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfaW5oZXJpdHMu aApAQCAtNTUsNiArNTUsNyBAQCBERUNMQVJFX0lOREVYKHBnX2luaGVyaXRzX3BhcmVudF9pbmRl eCwgMjE4NywgSW5oZXJpdHNQYXJlbnRJbmRleElkLCBwZ19pbmhlcml0cwogZXh0ZXJuIExpc3Qg KmZpbmRfaW5oZXJpdGFuY2VfY2hpbGRyZW4oT2lkIHBhcmVudHJlbElkLCBMT0NLTU9ERSBsb2Nr bW9kZSk7CiBleHRlcm4gTGlzdCAqZmluZF9pbmhlcml0YW5jZV9jaGlsZHJlbl9leHRlbmRlZChP aWQgcGFyZW50cmVsSWQsIGJvb2wgb21pdF9kZXRhY2hlZCwKIAkJCQkJCQkJCQkJCUxPQ0tNT0RF IGxvY2ttb2RlLCBib29sICpkZXRhY2hlZF9leGlzdCwgVHJhbnNhY3Rpb25JZCAqZGV0YWNoZWRf eG1pbik7CitleHRlcm4gTGlzdCAqZmluZF9pbmhlcml0YW5jZV9wYXJlbnRzKE9pZCByZWxpZCwg TE9DS01PREUgbG9ja21vZGUpOwogCiBleHRlcm4gTGlzdCAqZmluZF9hbGxfaW5oZXJpdG9ycyhP aWQgcGFyZW50cmVsSWQsIExPQ0tNT0RFIGxvY2ttb2RlLAogCQkJCQkJCQkgTGlzdCAqKm51bXBh cmVudHMpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3Ny Yy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKaW5kZXggM2NiODQzNTlhZGYuLmQ4NmFmNTZi YTc4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3Ny Yy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTg2MzQsNiArODYzNCwxNCBAQAogICBw cm9hcmd0eXBlcyA9PiAncmVnZGF0YWJhc2UgYm9vbCBib29sIGJvb2wnLAogICBwcm9hcmduYW1l cyA9PiAne2RhdGFiYXNlLHByZXR0eSxvd25lcix0YWJsZXNwYWNlfScsCiAgIHByb2FyZ2RlZmF1 bHRzID0+ICd7ZmFsc2UsdHJ1ZSx0cnVlfScsIHByb3NyYyA9PiAncGdfZ2V0X2RhdGFiYXNlX2Rk bCcgfSwKK3sgb2lkID0+ICc4MjE1JywgZGVzY3IgPT4gJ2dldCBEREwgdG8gcmVjcmVhdGUgYSB0 YWJsZScsCisgIHByb25hbWUgPT4gJ3BnX2dldF90YWJsZV9kZGwnLCBwcm9yb3dzID0+ICc1MCcs CisgIHByb2lzc3RyaWN0ID0+ICdmJywgcHJvcmV0c2V0ID0+ICd0JywgcHJvdm9sYXRpbGUgPT4g J3MnLCBwcm9wYXJhbGxlbCA9PiAncicsCisgIHByb25hcmdkZWZhdWx0cyA9PiAnNicsIHByb3Jl dHR5cGUgPT4gJ3RleHQnLAorICBwcm9hcmd0eXBlcyA9PiAncmVnY2xhc3MgYm9vbCBib29sIGJv b2wgYm9vbCBfdGV4dCBfdGV4dCcsCisgIHByb2FyZ25hbWVzID0+ICd7cmVsYXRpb24scHJldHR5 LG93bmVyLHRhYmxlc3BhY2Usc2NoZW1hX3F1YWxpZmllZCxvbmx5X2tpbmRzLGV4Y2VwdF9raW5k c30nLAorICBwcm9hcmdkZWZhdWx0cyA9PiAne2ZhbHNlLHRydWUsdHJ1ZSx0cnVlLE5VTEwsTlVM TH0nLAorICBwcm9zcmMgPT4gJ3BnX2dldF90YWJsZV9kZGwnIH0sCiB7IG9pZCA9PiAnMjUwOScs CiAgIGRlc2NyID0+ICdkZXBhcnNlIGFuIGVuY29kZWQgZXhwcmVzc2lvbiB3aXRoIHByZXR0eS1w cmludCBvcHRpb24nLAogICBwcm9uYW1lID0+ICdwZ19nZXRfZXhwcicsIHByb3ZvbGF0aWxlID0+ ICdzJywgcHJvcmV0dHlwZSA9PiAndGV4dCcsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21t YW5kcy90YWJsZWNtZHMuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3RhYmxlY21kcy5oCmluZGV4 IGMzZDg1MThjYjYyLi5kMzM1NjNmZGVhZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbWFu ZHMvdGFibGVjbWRzLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvdGFibGVjbWRzLmgKQEAg LTkyLDYgKzkyLDcgQEAgZXh0ZXJuIHZvaWQgY2hlY2tfb2ZfdHlwZShIZWFwVHVwbGUgdHlwZXR1 cGxlKTsKIAogZXh0ZXJuIHZvaWQgcmVnaXN0ZXJfb25fY29tbWl0X2FjdGlvbihPaWQgcmVsaWQs IE9uQ29tbWl0QWN0aW9uIGFjdGlvbik7CiBleHRlcm4gdm9pZCByZW1vdmVfb25fY29tbWl0X2Fj dGlvbihPaWQgcmVsaWQpOworZXh0ZXJuIE9uQ29tbWl0QWN0aW9uIGdldF9vbl9jb21taXRfYWN0 aW9uKE9pZCByZWxpZCk7CiAKIGV4dGVybiB2b2lkIFByZUNvbW1pdF9vbl9jb21taXRfYWN0aW9u cyh2b2lkKTsKIGV4dGVybiB2b2lkIEF0RU9YYWN0X29uX2NvbW1pdF9hY3Rpb25zKGJvb2wgaXND b21taXQpOwpAQCAtMTA4LDQgKzEwOSw2IEBAIGV4dGVybiB2b2lkIFJhbmdlVmFyQ2FsbGJhY2tP d25zUmVsYXRpb24oY29uc3QgUmFuZ2VWYXIgKnJlbGF0aW9uLAogZXh0ZXJuIGJvb2wgUGFydENv bnN0cmFpbnRJbXBsaWVkQnlSZWxDb25zdHJhaW50KFJlbGF0aW9uIHNjYW5yZWwsCiAJCQkJCQkJ CQkJCQkgTGlzdCAqcGFydENvbnN0cmFpbnQpOwogCitleHRlcm4gY29uc3QgY2hhciAqc3RvcmFn ZV9uYW1lKGNoYXIgYyk7CisKICNlbmRpZgkJCQkJCQkvKiBUQUJMRUNNRFNfSCAqLwpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvcnVsZXV0aWxzLmggYi9zcmMvaW5jbHVkZS91dGlscy9y dWxldXRpbHMuaAppbmRleCAyNWMwNWUyZjY0OS4uYzNiM2RjNjVjOTMgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL3J1bGV1 dGlscy5oCkBAIC0yNSw2ICsyNSw3IEBAIHR5cGVkZWYgc3RydWN0IFBsYW5uZWRTdG10IFBsYW5u ZWRTdG10OwogI2RlZmluZSBSVUxFX0lOREVYREVGX0tFWVNfT05MWQkJMHgwMgkvKiBpZ25vcmUg aW5jbHVkZWQgYXR0cmlidXRlcyAqLwogCiBleHRlcm4gY2hhciAqcGdfZ2V0X2luZGV4ZGVmX3N0 cmluZyhPaWQgaW5kZXhyZWxpZCk7CitleHRlcm4gY2hhciAqcGdfZ2V0X2luZGV4ZGVmX2RkbChP aWQgaW5kZXhyZWxpZCk7CiBleHRlcm4gY2hhciAqcGdfZ2V0X2luZGV4ZGVmX2NvbHVtbnMoT2lk IGluZGV4cmVsaWQsIGJvb2wgcHJldHR5KTsKIGV4dGVybiBjaGFyICpwZ19nZXRfaW5kZXhkZWZf Y29sdW1uc19leHRlbmRlZChPaWQgaW5kZXhyZWxpZCwKIAkJCQkJCQkJCQkJICB1aW50MTYgZmxh Z3MpOwpAQCAtMzQsNiArMzUsNyBAQCBleHRlcm4gY2hhciAqcGdfZ2V0X3BhcnRrZXlkZWZfY29s dW1ucyhPaWQgcmVsaWQsIGJvb2wgcHJldHR5KTsKIGV4dGVybiBjaGFyICpwZ19nZXRfcGFydGNv bnN0cmRlZl9zdHJpbmcoT2lkIHBhcnRpdGlvbklkLCBjaGFyICphbGlhc25hbWUpOwogCiBleHRl cm4gY2hhciAqcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29tbWFuZChPaWQgY29uc3RyYWludElkKTsK K2V4dGVybiBjaGFyICpwZ19nZXRfY29uc3RyYWludGRlZl9ib2R5KE9pZCBjb25zdHJhaW50SWQp OwogZXh0ZXJuIGNoYXIgKmRlcGFyc2VfZXhwcmVzc2lvbihOb2RlICpleHByLCBMaXN0ICpkcGNv bnRleHQsCiAJCQkJCQkJCWJvb2wgZm9yY2VwcmVmaXgsIGJvb2wgc2hvd2ltcGxpY2l0KTsKIGV4 dGVybiBMaXN0ICpkZXBhcnNlX2NvbnRleHRfZm9yKGNvbnN0IGNoYXIgKmFsaWFzbmFtZSwgT2lk IHJlbGlkKTsKQEAgLTU0LDUgKzU2LDcgQEAgZXh0ZXJuIGNoYXIgKmdldF9yYW5nZV9wYXJ0Ym91 bmRfc3RyaW5nKExpc3QgKmJvdW5kX2RhdHVtcyk7CiBleHRlcm4gdm9pZCBnZXRfcmVsb3B0aW9u cyhTdHJpbmdJbmZvIGJ1ZiwgRGF0dW0gcmVsb3B0aW9ucyk7CiAKIGV4dGVybiBjaGFyICpwZ19n ZXRfc3RhdGlzdGljc29iamRlZl9zdHJpbmcoT2lkIHN0YXRleHRpZCk7CitleHRlcm4gY2hhciAq cGdfZ2V0X3N0YXRpc3RpY3NvYmpkZWZfZGRsKE9pZCBzdGF0ZXh0aWQpOworZXh0ZXJuIGNoYXIg KnBnX2dldF9ydWxlZGVmX2RkbChPaWQgcnVsZW9pZCk7CiAKICNlbmRpZgkJCQkJCQkvKiBSVUxF VVRJTFNfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wZ19nZXRf dGFibGVfZGRsLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGdfZ2V0X3RhYmxlX2Rk bC5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjhlM2I5NGMxMWY2 Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wZ19nZXRfdGFi bGVfZGRsLm91dApAQCAtMCwwICsxLDE2MTIgQEAKKy0tCistLSBwZ19nZXRfdGFibGVfZGRsCist LQorLS0gQWxsIHRlc3RzIHBhc3Mgb3duZXI9PmZhbHNlIHNvIHRoZSBBTFRFUiBUQUJMRSBPV05F UiBUTyBsaW5lIGlzIG5vdAorLS0gZW1pdHRlZCwga2VlcGluZyBvdXRwdXQgc3RhYmxlIGFjcm9z cyB0ZXN0IHJ1bm5lcnMgKHdoaWNoIG1heSBydW4gdW5kZXIKKy0tIGRpZmZlcmVudCByb2xlIG5h bWVzKS4KKy0tCitDUkVBVEUgU0NIRU1BIHBndGJsX2RkbF90ZXN0OworU0VUIHNlYXJjaF9wYXRo ID0gcGd0YmxfZGRsX3Rlc3Q7CistLSBCYXNpYyB0YWJsZSB3aXRoIFBSSU1BUlkgS0VZLCBOT1Qg TlVMTCwgREVGQVVMVCwgQ09MTEFURS4KK0NSRUFURSBUQUJMRSBiYXNpYyAoCisgICAgaWQgaW50 IFBSSU1BUlkgS0VZLAorICAgIG5hbWUgdGV4dCBOT1QgTlVMTCBERUZBVUxUICdhbm9uJyBDT0xM QVRFICJDIgorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdj bGFzcywgb3duZXIgPT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuYmFzaWMg KGlkIGludGVnZXIgTk9UIE5VTEwsIG5hbWUgdGV4dCBDT0xMQVRFICJDIiBERUZBVUxUICdhbm9u Jzo6dGV4dCBOT1QgTlVMTCk7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuYmFzaWMgQURE IENPTlNUUkFJTlQgYmFzaWNfcGtleSBQUklNQVJZIEtFWSAoaWQpOworKDIgcm93cykKKworLS0g SWRlbnRpdHkgY29sdW1ucyAod2l0aCBkZWZhdWx0IGFuZCBjdXN0b20gc2VxdWVuY2Ugb3B0aW9u cykuCitDUkVBVEUgVEFCTEUgaWRfY29scyAoCisgICAgaWRfYWx3YXlzIGludCBHRU5FUkFURUQg QUxXQVlTIEFTIElERU5USVRZLAorICAgIGlkX2RlZmF1bHQgaW50IEdFTkVSQVRFRCBCWSBERUZB VUxUIEFTIElERU5USVRZCispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZF9j b2xzJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3Rh YmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5pZF9jb2xzIChpZF9hbHdh eXMgaW50ZWdlciBHRU5FUkFURUQgQUxXQVlTIEFTIElERU5USVRZIE5PVCBOVUxMLCBpZF9kZWZh dWx0IGludGVnZXIgR0VORVJBVEVEIEJZIERFRkFVTFQgQVMgSURFTlRJVFkgTk9UIE5VTEwpOwor KDEgcm93KQorCitDUkVBVEUgVEFCTEUgaWRfY3VzdG9tICgKKyAgICB2IGludCBHRU5FUkFURUQg QUxXQVlTIEFTIElERU5USVRZICgKKyAgICAgICAgU0VRVUVOQ0UgTkFNRSBpZF9jdXN0b21fdl9z ZXEKKyAgICAgICAgU1RBUlQgV0lUSCAxMDAgSU5DUkVNRU5UIEJZIDUKKyAgICAgICAgTUlOVkFM VUUgNTAgTUFYVkFMVUUgMTAwMAorICAgICAgICBDQUNIRSAxMCBDWUNMRQorICAgICkKKyk7CitT RUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2lkX2N1c3RvbSc6OnJlZ2NsYXNzLCBvd25l ciA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LmlkX2N1c3RvbSAodiBpbnRlZ2VyIEdFTkVS QVRFRCBBTFdBWVMgQVMgSURFTlRJVFkgKFNUQVJUIFdJVEggMTAwIElOQ1JFTUVOVCBCWSA1IE1J TlZBTFVFIDUwIE1BWFZBTFVFIDEwMDAgQ0FDSEUgMTAgQ1lDTEUpIE5PVCBOVUxMKTsKKygxIHJv dykKKworLS0gR2VuZXJhdGVkIHN0b3JlZCBjb2x1bW4uCitDUkVBVEUgVEFCTEUgZ2VuX2NvbHMg KAorICAgIGNlbnRzIGludCwKKyAgICBkb2xsYXJzIG51bWVyaWMgR0VORVJBVEVEIEFMV0FZUyBB UyAoY2VudHMgLyAxMDAuMCkgU1RPUkVECispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVf ZGRsKCdnZW5fY29scyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9k ZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuZ2VuX2NvbHMg KGNlbnRzIGludGVnZXIsIGRvbGxhcnMgbnVtZXJpYyBHRU5FUkFURUQgQUxXQVlTIEFTICgoKGNl bnRzKTo6bnVtZXJpYyAvIDEwMC4wKSkgU1RPUkVEKTsKKygxIHJvdykKKworLS0gR2VuZXJhdGVk IHZpcnR1YWwgY29sdW1uLgorQ1JFQVRFIFRBQkxFIGdlbl92aXJ0dWFsICgKKyAgICBiYXNlIGlu dCwKKyAgICBkZXJpdmVkIGludCBHRU5FUkFURUQgQUxXQVlTIEFTIChiYXNlICogMikgVklSVFVB TAorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnZ2VuX3ZpcnR1YWwnOjpyZWdj bGFzcywgb3duZXIgPT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVz dC5nZW5fdmlydHVhbCAoYmFzZSBpbnRlZ2VyLCBkZXJpdmVkIGludGVnZXIgR0VORVJBVEVEIEFM V0FZUyBBUyAoKGJhc2UgKiAyKSkgVklSVFVBTCk7CisoMSByb3cpCisKKy0tIFNUT1JBR0UgYW5k IENPTVBSRVNTSU9OIChvbmx5IGVtaXR0ZWQgd2hlbiBub24tZGVmYXVsdCBmb3IgdGhlIHR5cGUp LgorQ1JFQVRFIFRBQkxFIHN0b3JhZ2VfY29scyAoCisgICAgYSB0ZXh0IFNUT1JBR0UgRVhURVJO QUwsCisgICAgYiB0ZXh0IFNUT1JBR0UgTUFJTiwKKyAgICBjIHRleHQgQ09NUFJFU1NJT04gcGds egorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnc3RvcmFnZV9jb2xzJzo6cmVn Y2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rl c3Quc3RvcmFnZV9jb2xzIChhIHRleHQgU1RPUkFHRSBFWFRFUk5BTCwgYiB0ZXh0IFNUT1JBR0Ug TUFJTiwgYyB0ZXh0IENPTVBSRVNTSU9OIHBnbHopOworKDEgcm93KQorCistLSBDb25zdHJhaW50 czogQ0hFQ0ssIFVOSVFVRSwgRk9SRUlHTiBLRVkgKERFRkVSUkFCTEUpLgorQ1JFQVRFIFRBQkxF IHJlZmQgKGlkIGludCBQUklNQVJZIEtFWSk7CitDUkVBVEUgVEFCTEUgY29ucyAoCisgICAgYSBp bnQgQ0hFQ0sgKGEgPiAwKSwKKyAgICBiIGludCBVTklRVUUsCisgICAgYyBpbnQgUkVGRVJFTkNF UyByZWZkKGlkKSBERUZFUlJBQkxFIElOSVRJQUxMWSBERUZFUlJFRAorKTsKK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgnY29ucyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LmNvbnMgKGEgaW50ZWdlciwgYiBpbnRlZ2Vy LCBjIGludGVnZXIsIENPTlNUUkFJTlQgY29uc19hX2NoZWNrIENIRUNLICgoYSA+IDApKSk7Cisg QUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuY29ucyBBREQgQ09OU1RSQUlOVCBjb25zX2Jfa2V5 IFVOSVFVRSAoYik7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuY29ucyBBREQgQ09OU1RS QUlOVCBjb25zX2NfZmtleSBGT1JFSUdOIEtFWSAoYykgUkVGRVJFTkNFUyBwZ3RibF9kZGxfdGVz dC5yZWZkKGlkKSBERUZFUlJBQkxFIElOSVRJQUxMWSBERUZFUlJFRDsKKygzIHJvd3MpCisKKy0t IFVOSVFVRSBOVUxMUyBOT1QgRElTVElOQ1QgKFBHIDE1KTogbnVsbCB2YWx1ZXMgYXJlIHRyZWF0 ZWQgYXMgZXF1YWwgZm9yCistLSB1bmlxdWVuZXNzIHB1cnBvc2VzLCBzbyB0aGUgTlVMTFMgTk9U IERJU1RJTkNUIGNsYXVzZSBtdXN0IGJlIGVtaXR0ZWQuCitDUkVBVEUgVEFCTEUgbnVsbHNfbmQg KAorICAgIGEgaW50LAorICAgIGIgaW50LAorICAgIFVOSVFVRSBOVUxMUyBOT1QgRElTVElOQ1Qg KGEsIGIpCispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdudWxsc19uZCc6OnJl Z2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0Lm51bGxzX25kIChhIGludGVnZXIs IGIgaW50ZWdlcik7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QubnVsbHNfbmQgQUREIENP TlNUUkFJTlQgbnVsbHNfbmRfYV9iX2tleSBVTklRVUUgTlVMTFMgTk9UIERJU1RJTkNUIChhLCBi KTsKKygyIHJvd3MpCisKKy0tIElOQ0xVREUgY29sdW1ucyBvbiBhIGNvbnN0cmFpbnQtYmFja2Vk IFVOSVFVRSBpbmRleCAoUEcgMTEpOiB0aGUKKy0tIGNvdmVyaW5nIGNvbHVtbnMgYXBwZWFyIGlu IGFuIElOQ0xVREUgKC4uLikgY2xhdXNlIG9uIHRoZSBBTFRFUiBUQUJMRQorLS0gQUREIENPTlNU UkFJTlQgc3RhdGVtZW50LCBub3QgaW4gdGhlIGtleSBjb2x1bW4gbGlzdC4KK0NSRUFURSBUQUJM RSBpZHhfaW5jICgKKyAgICBpZCAgIGludCBQUklNQVJZIEtFWSwKKyAgICBuYW1lIHRleHQsCisg ICAgZXh0cmEgdGV4dCwKKyAgICBVTklRVUUgKG5hbWUpIElOQ0xVREUgKGV4dHJhKQorKTsKK1NF TEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnaWR4X2luYyc6OnJlZ2NsYXNzLCBvd25lciA9 PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBn X2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENS RUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5pZHhfaW5jIChpZCBpbnRlZ2VyIE5PVCBOVUxMLCBu YW1lIHRleHQsIGV4dHJhIHRleHQpOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmlkeF9p bmMgQUREIENPTlNUUkFJTlQgaWR4X2luY19uYW1lX2V4dHJhX2tleSBVTklRVUUgKG5hbWUpIElO Q0xVREUgKGV4dHJhKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5pZHhfaW5jIEFERCBD T05TVFJBSU5UIGlkeF9pbmNfcGtleSBQUklNQVJZIEtFWSAoaWQpOworKDMgcm93cykKKworLS0g Rk9SRUlHTiBLRVkgd2l0aCBPTiBERUxFVEUgLyBPTiBVUERBVEUgcmVmZXJlbnRpYWwgYWN0aW9u cyBhbmQgTUFUQ0gKKy0tIGNsYXVzZS4gIEVhY2ggdmFyaWFudCBtdXN0IGFwcGVhciB2ZXJiYXRp bSBpbiB0aGUgcmVjb25zdHJ1Y3RlZCBEREwuCitDUkVBVEUgVEFCTEUgZmtfYWN0c190Z3QgKGlk IGludCBQUklNQVJZIEtFWSk7CitDUkVBVEUgVEFCTEUgZmtfYWN0cyAoCisgICAgYSBpbnQsCisg ICAgYiBpbnQsCisgICAgYyBpbnQsCisgICAgZCBpbnQsCisgICAgQ09OU1RSQUlOVCBma19jYXNj YWRlICBGT1JFSUdOIEtFWSAoYSkgUkVGRVJFTkNFUyBma19hY3RzX3RndChpZCkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIE9OIERFTEVURSBDQVNDQURFIE9OIFVQREFURSBSRVNUUklDVCwK KyAgICBDT05TVFJBSU5UIGZrX3NldG51bGwgIEZPUkVJR04gS0VZIChiKSBSRUZFUkVOQ0VTIGZr X2FjdHNfdGd0KGlkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT04gREVMRVRFIFNFVCBO VUxMLAorICAgIENPTlNUUkFJTlQgZmtfc2V0ZGVmICAgRk9SRUlHTiBLRVkgKGMpIFJFRkVSRU5D RVMgZmtfYWN0c190Z3QoaWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPTiBERUxFVEUg U0VUIERFRkFVTFQsCisgICAgQ09OU1RSQUlOVCBma19tYXRjaCAgICBGT1JFSUdOIEtFWSAoZCkg UkVGRVJFTkNFUyBma19hY3RzX3RndChpZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE1B VENIIEZVTEwKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2ZrX2FjdHMnOjpy ZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LmZrX2FjdHMgKGEgaW50ZWdlciwgYiBp bnRlZ2VyLCBjIGludGVnZXIsIGQgaW50ZWdlcik7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rl c3QuZmtfYWN0cyBBREQgQ09OU1RSQUlOVCBma19jYXNjYWRlIEZPUkVJR04gS0VZIChhKSBSRUZF UkVOQ0VTIHBndGJsX2RkbF90ZXN0LmZrX2FjdHNfdGd0KGlkKSBPTiBVUERBVEUgUkVTVFJJQ1Qg T04gREVMRVRFIENBU0NBREU7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuZmtfYWN0cyBB REQgQ09OU1RSQUlOVCBma19tYXRjaCBGT1JFSUdOIEtFWSAoZCkgUkVGRVJFTkNFUyBwZ3RibF9k ZGxfdGVzdC5ma19hY3RzX3RndChpZCkgTUFUQ0ggRlVMTDsKKyBBTFRFUiBUQUJMRSBwZ3RibF9k ZGxfdGVzdC5ma19hY3RzIEFERCBDT05TVFJBSU5UIGZrX3NldGRlZiBGT1JFSUdOIEtFWSAoYykg UkVGRVJFTkNFUyBwZ3RibF9kZGxfdGVzdC5ma19hY3RzX3RndChpZCkgT04gREVMRVRFIFNFVCBE RUZBVUxUOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmZrX2FjdHMgQUREIENPTlNUUkFJ TlQgZmtfc2V0bnVsbCBGT1JFSUdOIEtFWSAoYikgUkVGRVJFTkNFUyBwZ3RibF9kZGxfdGVzdC5m a19hY3RzX3RndChpZCkgT04gREVMRVRFIFNFVCBOVUxMOworKDUgcm93cykKKworLS0gTk9UIEVO Rk9SQ0VEIGZvcmVpZ24ga2V5IChQRyAxNyk6IHRoZSBjb25zdHJhaW50IGlzIHJlY29yZGVkIGlu IHRoZQorLS0gY2F0YWxvZyBidXQgbm90IHZhbGlkYXRlZCBieSB0aGUgZW5naW5lOyBOT1QgRU5G T1JDRUQgbXVzdCBhcHBlYXIgaW4KKy0tIHRoZSByZWNvbnN0cnVjdGVkIERETC4KK0NSRUFURSBU QUJMRSBub3RlbmZfdGd0IChpZCBpbnQgUFJJTUFSWSBLRVkpOworQ1JFQVRFIFRBQkxFIG5vdGVu ZiAoCisgICAgYSBpbnQsCisgICAgQ09OU1RSQUlOVCBub3RlbmZfZmsgRk9SRUlHTiBLRVkgKGEp IFJFRkVSRU5DRVMgbm90ZW5mX3RndChpZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICBOT1Qg RU5GT1JDRUQKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ25vdGVuZic6OnJl Z2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3Qubm90ZW5mIChhIGludGVnZXIpOwor IEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0Lm5vdGVuZiBBREQgQ09OU1RSQUlOVCBub3RlbmZf ZmsgRk9SRUlHTiBLRVkgKGEpIFJFRkVSRU5DRVMgcGd0YmxfZGRsX3Rlc3Qubm90ZW5mX3RndChp ZCkgTk9UIEVORk9SQ0VEOworKDIgcm93cykKKworLS0gU2VsZi1yZWZlcmVuY2luZyBGSzogdGhl IFBLIG11c3QgYXBwZWFyIGJlZm9yZSB0aGUgRksgdGhhdCByZWZlcmVuY2VzIGl0LgorLS0gVGhl IGNhdGFsb2cgc2NhbiByZXR1cm5zIGNvbnN0cmFpbnRzIGluIG5hbWUgb3JkZXI7IHdpdGhvdXQg dGhlIGZpeCwKKy0tICJzZWxmX3JlZl9wYXJlbnRfaWRfZmtleSIgc29ydHMgYmVmb3JlICJzZWxm X3JlZl9wa2V5IiBhbmQgdGhlIEZLIEFERAorLS0gQ09OU1RSQUlOVCBmYWlscyB3aXRoICJ0aGVy ZSBpcyBubyB1bmlxdWUgY29uc3RyYWludCBtYXRjaGluZyBnaXZlbiBrZXlzIi4KK0NSRUFURSBU QUJMRSBzZWxmX3JlZiAoCisgICAgaWQgICAgICAgIGludCBQUklNQVJZIEtFWSwKKyAgICBwYXJl bnRfaWQgaW50IFJFRkVSRU5DRVMgc2VsZl9yZWYoaWQpCispOworU0VMRUNUICogRlJPTSBwZ19n ZXRfdGFibGVfZGRsKCdzZWxmX3JlZic6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVB VEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3Quc2VsZl9yZWYgKGlkIGludGVnZXIgTk9UIE5VTEwsIHBh cmVudF9pZCBpbnRlZ2VyKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5zZWxmX3JlZiBB REQgQ09OU1RSQUlOVCBzZWxmX3JlZl9wa2V5IFBSSU1BUlkgS0VZIChpZCk7CisgQUxURVIgVEFC TEUgcGd0YmxfZGRsX3Rlc3Quc2VsZl9yZWYgQUREIENPTlNUUkFJTlQgc2VsZl9yZWZfcGFyZW50 X2lkX2ZrZXkgRk9SRUlHTiBLRVkgKHBhcmVudF9pZCkgUkVGRVJFTkNFUyBwZ3RibF9kZGxfdGVz dC5zZWxmX3JlZihpZCk7CisoMyByb3dzKQorCistLSBXSVRIT1VUIE9WRVJMQVBTIG9uIGEgUFJJ TUFSWSBLRVkgKFBHIDE3KTogdGhlIHJhbmdlLXR5cGUgcGVyaW9kCistLSBjb2x1bW4gZm9ybXMg YSB0ZW1wb3JhbCBwcmltYXJ5IGtleTsgV0lUSE9VVCBPVkVSTEFQUyBtdXN0IGFwcGVhcgorLS0g aW5zaWRlIHRoZSBrZXkgY29sdW1uIGxpc3QgaW4gdGhlIHJlY29uc3RydWN0ZWQgQUxURVIgVEFC TEUuCistLSBCb3RoIGNvbHVtbnMgdXNlIHJhbmdlIHR5cGVzIHdpdGggbmF0aXZlIEdpU1Qgc3Vw cG9ydCBzbyBubworLS0gYnRyZWVfZ2lzdCBleHRlbnNpb24gaXMgbmVlZGVkLgorQ1JFQVRFIFRB QkxFIHRlbXBvcmFsX3BrICgKKyAgICBncnAgIGludDRyYW5nZSwKKyAgICBkdXJpbmcgZGF0ZXJh bmdlLAorICAgIFBSSU1BUlkgS0VZIChncnAsIGR1cmluZyBXSVRIT1VUIE9WRVJMQVBTKQorKTsK K1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgndGVtcG9yYWxfcGsnOjpyZWdjbGFzcywg b3duZXIgPT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnRl bXBvcmFsX3BrIChncnAgaW50NHJhbmdlIE5PVCBOVUxMLCBkdXJpbmcgZGF0ZXJhbmdlIE5PVCBO VUxMKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC50ZW1wb3JhbF9wayBBREQgQ09OU1RS QUlOVCB0ZW1wb3JhbF9wa19wa2V5IFBSSU1BUlkgS0VZIChncnAsIGR1cmluZyBXSVRIT1VUIE9W RVJMQVBTKTsKKygyIHJvd3MpCisKKy0tIEluZGV4ZXM6IGZ1bmN0aW9uYWwgYW5kIHBhcnRpYWwu ICBDb25zdHJhaW50LWJhY2tpbmcgaW5kZXhlcyBhcmUKKy0tIHN1cHByZXNzZWQgKHRoZXkgYXJl IGVtaXR0ZWQgYnkgdGhlIGNvbnN0cmFpbnQgbG9vcCkuCitDUkVBVEUgVEFCTEUgaWR4ZCAoaWQg aW50IFBSSU1BUlkgS0VZLCBuYW1lIHRleHQpOworQ1JFQVRFIElOREVYIGlkeGRfbG93ZXIgT04g aWR4ZCAobG93ZXIobmFtZSkpOworQ1JFQVRFIElOREVYIGlkeGRfcGFydGlhbCBPTiBpZHhkIChp ZCkgV0hFUkUgaWQgPiAxMDA7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2lkeGQn OjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxf dGVzdC5pZHhkIChpZCBpbnRlZ2VyIE5PVCBOVUxMLCBuYW1lIHRleHQpOworIENSRUFURSBJTkRF WCBpZHhkX2xvd2VyIE9OIHBndGJsX2RkbF90ZXN0LmlkeGQgVVNJTkcgYnRyZWUgKGxvd2VyKG5h bWUpKTsKKyBDUkVBVEUgSU5ERVggaWR4ZF9wYXJ0aWFsIE9OIHBndGJsX2RkbF90ZXN0LmlkeGQg VVNJTkcgYnRyZWUgKGlkKSBXSEVSRSAoaWQgPiAxMDApOworIEFMVEVSIFRBQkxFIHBndGJsX2Rk bF90ZXN0LmlkeGQgQUREIENPTlNUUkFJTlQgaWR4ZF9wa2V5IFBSSU1BUlkgS0VZIChpZCk7Ciso NCByb3dzKQorCistLSBJbmhlcml0YW5jZSwgaW5jbHVkaW5nIGEgY2hpbGQgREVGQVVMVCBvdmVy cmlkZSBvbiBhbiBpbmhlcml0ZWQgY29sdW1uLgorQ1JFQVRFIFRBQkxFIHBhciAoYSBpbnQgREVG QVVMVCAxLCBiIHRleHQpOworQ1JFQVRFIFRBQkxFIGNoIChjIGludCkgSU5IRVJJVFMgKHBhcik7 CitBTFRFUiBUQUJMRSBjaCBBTFRFUiBDT0xVTU4gYSBTRVQgREVGQVVMVCA5OTk7CitTRUxFQ1Qg KiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2NoJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBn dGJsX2RkbF90ZXN0LmNoIChjIGludGVnZXIpIElOSEVSSVRTIChwZ3RibF9kZGxfdGVzdC5wYXIp OworIEFMVEVSIFRBQkxFIE9OTFkgcGd0YmxfZGRsX3Rlc3QuY2ggQUxURVIgQ09MVU1OIGEgU0VU IERFRkFVTFQgOTk5OworKDIgcm93cykKKworLS0gUGVyLWNvbHVtbiBhdHRvcHRpb25zOiBlbWl0 dGVkIGFzIEFMVEVSIENPTFVNTiBTRVQgKC4uLikuCitDUkVBVEUgVEFCTEUgYXR0b3B0IChhIGlu dCwgYiB0ZXh0KTsKK0FMVEVSIFRBQkxFIGF0dG9wdCBBTFRFUiBDT0xVTU4gYSBTRVQgKG5fZGlz dGluY3QgPSAxMDApOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdhdHRvcHQnOjpy ZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw Z19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LmF0dG9wdCAoYSBpbnRlZ2VyLCBi IHRleHQpOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmF0dG9wdCBBTFRFUiBDT0xVTU4g YSBTRVQgKG5fZGlzdGluY3Q9JzEwMCcpOworKDIgcm93cykKKworLS0gUGFydGl0aW9uZWQgdGFi bGUgcGFyZW50cyAoUkFOR0UsIEhBU0gsIGFuZCBMSVNUKS4KK0NSRUFURSBUQUJMRSBwYXJ0ZWRf cmFuZ2UgKGlkIGludCwgayBpbnQpIFBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworU0VMRUNUICog RlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfcmFuZ2UnOjpyZWdjbGFzcywgb3duZXIgPT4g ZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJs ZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0 ZWRfcmFuZ2UgKGlkIGludGVnZXIsIGsgaW50ZWdlcikgUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7 CisoMSByb3cpCisKK0NSRUFURSBUQUJMRSBwYXJ0ZWRfaGFzaCAoaWQgaW50KSBQQVJUSVRJT04g QlkgSEFTSCAoaWQpOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfaGFz aCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRf aGFzaCAoaWQgaW50ZWdlcikgUEFSVElUSU9OIEJZIEhBU0ggKGlkKTsKKygxIHJvdykKKworQ1JF QVRFIFRBQkxFIHBhcnRlZF9saXN0IChpZCBpbnQsIHJlZ2lvbiB0ZXh0KSBQQVJUSVRJT04gQlkg TElTVCAocmVnaW9uKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX2xp c3QnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg Q1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9saXN0IChpZCBpbnRlZ2VyLCByZWdp b24gdGV4dCkgUEFSVElUSU9OIEJZIExJU1QgKHJlZ2lvbik7CisoMSByb3cpCisKKy0tIFBhcnRp dGlvbiBjaGlsZHJlbjogRlJPTS9UTywgV0lUSCAobW9kdWx1cywgcmVtYWluZGVyKSwgREVGQVVM VC4KK0NSRUFURSBUQUJMRSBwYXJ0ZWRfcmFuZ2VfMSBQQVJUSVRJT04gT0YgcGFydGVkX3Jhbmdl CisgICAgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTAwKTsKK0FMVEVSIFRBQkxFIHBhcnRlZF9y YW5nZV8xIEFMVEVSIENPTFVNTiBrIFNFVCBERUZBVUxUIDc7CitTRUxFQ1QgKiBGUk9NIHBnX2dl dF90YWJsZV9kZGwoJ3BhcnRlZF9yYW5nZV8xJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRf dGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucGFydGVkX3JhbmdlXzEgUEFSVElU SU9OIE9GIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9yYW5nZSBGT1IgVkFMVUVTIEZST00gKDApIFRP ICgxMDApOworIEFMVEVSIFRBQkxFIE9OTFkgcGd0YmxfZGRsX3Rlc3QucGFydGVkX3JhbmdlXzEg QUxURVIgQ09MVU1OIGsgU0VUIERFRkFVTFQgNzsKKygyIHJvd3MpCisKK0NSRUFURSBUQUJMRSBw YXJ0ZWRfaGFzaF8wIFBBUlRJVElPTiBPRiBwYXJ0ZWRfaGFzaAorICAgIEZPUiBWQUxVRVMgV0lU SCAobW9kdWx1cyAyLCByZW1haW5kZXIgMCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9k ZGwoJ3BhcnRlZF9oYXNoXzAnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxl X2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9oYXNo XzAgUEFSVElUSU9OIE9GIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9oYXNoIEZPUiBWQUxVRVMgV0lU SCAobW9kdWx1cyAyLCByZW1haW5kZXIgMCk7CisoMSByb3cpCisKK0NSRUFURSBUQUJMRSBwYXJ0 ZWRfcmFuZ2VfZGVmIFBBUlRJVElPTiBPRiBwYXJ0ZWRfcmFuZ2UgREVGQVVMVDsKK1NFTEVDVCAq IEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX3JhbmdlX2RlZic6OnJlZ2NsYXNzLCBvd25l ciA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdf Z2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3Ri bF9kZGxfdGVzdC5wYXJ0ZWRfcmFuZ2VfZGVmIFBBUlRJVElPTiBPRiBwZ3RibF9kZGxfdGVzdC5w YXJ0ZWRfcmFuZ2UgREVGQVVMVDsKKygxIHJvdykKKworLS0gTm9uLWNvbnN0cmFpbnQtYmFja2Vk IGluZGV4IG9uIGEgcGFydGl0aW9uZWQgdGFibGU6IHRoZSBwYXJlbnQncyBpbmRleCBEREwKKy0t IG11c3QgYXBwZWFyIG9uY2U7IHRoZSBhdXRvLWNyZWF0ZWQgY2hpbGQgcGFydGl0aW9uIGluZGV4 ZXMgKHJlbGlzcGFydGl0aW9uPXQpCistLSBtdXN0IGJlIHN1cHByZXNzZWQgc28gdGhlIERETCBy b3VuZC10cmlwcyB3aXRob3V0ICJyZWxhdGlvbiBhbHJlYWR5IGV4aXN0cyIuCitDUkVBVEUgVEFC TEUgcGFydGVkX2lkeCAoaWQgaW50LCByZWdpb24gdGV4dCkgUEFSVElUSU9OIEJZIExJU1QgKHJl Z2lvbik7CitDUkVBVEUgVEFCTEUgcGFydGVkX2lkeF9hIFBBUlRJVElPTiBPRiBwYXJ0ZWRfaWR4 IEZPUiBWQUxVRVMgSU4gKCdhJyk7CitDUkVBVEUgVU5JUVVFIElOREVYIHBhcnRlZF9pZHhfdWlk eCBPTiBwYXJ0ZWRfaWR4IChpZCwgcmVnaW9uKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxl X2RkbCgncGFydGVkX2lkeCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5w YXJ0ZWRfaWR4IChpZCBpbnRlZ2VyLCByZWdpb24gdGV4dCkgUEFSVElUSU9OIEJZIExJU1QgKHJl Z2lvbik7CisgQ1JFQVRFIFVOSVFVRSBJTkRFWCBwYXJ0ZWRfaWR4X3VpZHggT04gcGd0YmxfZGRs X3Rlc3QucGFydGVkX2lkeCBVU0lORyBidHJlZSAoaWQsIHJlZ2lvbik7CisgQ1JFQVRFIFRBQkxF IHBndGJsX2RkbF90ZXN0LnBhcnRlZF9pZHhfYSBQQVJUSVRJT04gT0YgcGd0YmxfZGRsX3Rlc3Qu cGFydGVkX2lkeCBGT1IgVkFMVUVTIElOICgnYScpOworKDMgcm93cykKKworLS0gUGxhaW4gKG5v bi11bmlxdWUpIENSRUFURSBJTkRFWCBvbiBwYXJ0aXRpb25lZCB0YWJsZTogdGhlIGF1dG8tY3Jl YXRlZCBjaGlsZAorLS0gaW5kZXggKHJlbGlzcGFydGl0aW9uPXRydWUpIGlzIHN1cHByZXNzZWQs IGp1c3QgbGlrZSB0aGUgVU5JUVVFIGNhc2UuCitDUkVBVEUgVEFCTEUgcGFydGVkX3BsYWluIChp ZCBpbnQsIHZhbCB0ZXh0KSBQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFURSBUQUJMRSBw YXJ0ZWRfcGxhaW5fYSBQQVJUSVRJT04gT0YgcGFydGVkX3BsYWluIEZPUiBWQUxVRVMgRlJPTSAo MCkgVE8gKDEwMCk7CitDUkVBVEUgSU5ERVggcGFydGVkX3BsYWluX2lkX2lkeCBPTiBwYXJ0ZWRf cGxhaW4gKGlkKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX3BsYWlu Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0Ymxf ZGRsX3Rlc3QucGFydGVkX3BsYWluIChpZCBpbnRlZ2VyLCB2YWwgdGV4dCkgUEFSVElUSU9OIEJZ IFJBTkdFIChpZCk7CisgQ1JFQVRFIElOREVYIHBhcnRlZF9wbGFpbl9pZF9pZHggT04gcGd0Ymxf ZGRsX3Rlc3QucGFydGVkX3BsYWluIFVTSU5HIGJ0cmVlIChpZCk7CisgQ1JFQVRFIFRBQkxFIHBn dGJsX2RkbF90ZXN0LnBhcnRlZF9wbGFpbl9hIFBBUlRJVElPTiBPRiBwZ3RibF9kZGxfdGVzdC5w YXJ0ZWRfcGxhaW4gRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTAwKTsKKygzIHJvd3MpCisKKy0t IENvbnN0cmFpbnQtYmFja2VkIFBSSU1BUlkgS0VZIG9uIHBhcnRpdGlvbmVkIHRhYmxlOiB0aGUg Y2hpbGQncyBpbmhlcml0ZWQKKy0tIGNvbnN0cmFpbnQgKGNvbmlzbG9jYWw9ZmFsc2UpIGFuZCBp dHMgYmFja2luZyBpbmRleCBhcmUgYm90aCBzdXBwcmVzc2VkLgorQ1JFQVRFIFRBQkxFIHBhcnRl ZF9wayAoaWQgaW50LCByZWdpb24gdGV4dCkgUEFSVElUSU9OIEJZIExJU1QgKHJlZ2lvbik7CitD UkVBVEUgVEFCTEUgcGFydGVkX3BrX2EgUEFSVElUSU9OIE9GIHBhcnRlZF9wayBGT1IgVkFMVUVT IElOICgnYScpOworQUxURVIgVEFCTEUgcGFydGVkX3BrIEFERCBQUklNQVJZIEtFWSAoaWQsIHJl Z2lvbik7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BhcnRlZF9wayc6OnJlZ2Ns YXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRf cGsgKGlkIGludGVnZXIgTk9UIE5VTEwsIHJlZ2lvbiB0ZXh0IE5PVCBOVUxMKSBQQVJUSVRJT04g QlkgTElTVCAocmVnaW9uKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfcGsg QUREIENPTlNUUkFJTlQgcGFydGVkX3BrX3BrZXkgUFJJTUFSWSBLRVkgKGlkLCByZWdpb24pOwor IENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfcGtfYSBQQVJUSVRJT04gT0YgcGd0 YmxfZGRsX3Rlc3QucGFydGVkX3BrIEZPUiBWQUxVRVMgSU4gKCdhJyk7CisoMyByb3dzKQorCist LSBNdWx0aS1sZXZlbCAoc3ViLXBhcnRpdGlvbmVkKSB0YWJsZSB3aXRoIGEgQ1JFQVRFIElOREVY IG9uIHRoZSByb290LgorLS0gVGhlIG1pZC1sZXZlbCBwYXJ0aXRpb25lZCBpbmRleCAocmVsaXNw YXJ0aXRpb249dHJ1ZSwgcmVsa2luZD0nSScpIGFuZCB0aGUKKy0tIGxlYWYgaW5kZXggKHJlbGlz cGFydGl0aW9uPXRydWUsIHJlbGtpbmQ9J2knKSBhcmUgYm90aCBzdXBwcmVzc2VkLgorQ1JFQVRF IFRBQkxFIHBhcnRlZF9zdWIgKGlkIGludCwgcmVnaW9uIHRleHQpIFBBUlRJVElPTiBCWSBMSVNU IChyZWdpb24pOworQ1JFQVRFIFRBQkxFIHBhcnRlZF9zdWJfYSBQQVJUSVRJT04gT0YgcGFydGVk X3N1YgorICAgIEZPUiBWQUxVRVMgSU4gKCdhJykgUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitD UkVBVEUgVEFCTEUgcGFydGVkX3N1Yl9hMSBQQVJUSVRJT04gT0YgcGFydGVkX3N1Yl9hIEZPUiBW QUxVRVMgRlJPTSAoMCkgVE8gKDEwMCk7CitDUkVBVEUgSU5ERVggcGFydGVkX3N1Yl9pZF9pZHgg T04gcGFydGVkX3N1YiAoaWQpOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0 ZWRfc3ViJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9zdWIgKGlkIGludGVn ZXIsIHJlZ2lvbiB0ZXh0KSBQQVJUSVRJT04gQlkgTElTVCAocmVnaW9uKTsKKyBDUkVBVEUgSU5E RVggcGFydGVkX3N1Yl9pZF9pZHggT04gcGd0YmxfZGRsX3Rlc3QucGFydGVkX3N1YiBVU0lORyBi dHJlZSAoaWQpOworIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfc3ViX2EgUEFS VElUSU9OIE9GIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9zdWIgRk9SIFZBTFVFUyBJTiAoJ2EnKSBQ QVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucGFy dGVkX3N1Yl9hMSBQQVJUSVRJT04gT0YgcGd0YmxfZGRsX3Rlc3QucGFydGVkX3N1Yl9hIEZPUiBW QUxVRVMgRlJPTSAoMCkgVE8gKDEwMCk7CisoNCByb3dzKQorCistLSBQYXJ0aXRpb24gY2hpbGQg d2l0aCBpdHMgb3duIGxvY2FsbHktZGVmaW5lZCBpbmRleCAocmVsaXNwYXJ0aXRpb249ZmFsc2Up OgorLS0gdGhpcyBpcyBOT1QgaW5oZXJpdGVkIGZyb20gYW55IHBhcmVudCBwYXJ0aXRpb25lZCBp bmRleCBhbmQgbXVzdCBiZSBlbWl0dGVkLgorQ1JFQVRFIFRBQkxFIHBhcnRlZF9jaGlsZF9pZHgg KGlkIGludCwgcmVnaW9uIHRleHQpIFBBUlRJVElPTiBCWSBMSVNUIChyZWdpb24pOworQ1JFQVRF IFRBQkxFIHBhcnRlZF9jaGlsZF9pZHhfYSBQQVJUSVRJT04gT0YgcGFydGVkX2NoaWxkX2lkeCBG T1IgVkFMVUVTIElOICgnYScpOworQ1JFQVRFIElOREVYIHBhcnRlZF9jaGlsZF9pZHhfYV9pZCBP TiBwYXJ0ZWRfY2hpbGRfaWR4X2EgKGlkKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2Rk bCgncGFydGVkX2NoaWxkX2lkeCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2Rk bCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENS RUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfY2hpbGRfaWR4IChpZCBpbnRlZ2VyLCBy ZWdpb24gdGV4dCkgUEFSVElUSU9OIEJZIExJU1QgKHJlZ2lvbik7CisgQ1JFQVRFIFRBQkxFIHBn dGJsX2RkbF90ZXN0LnBhcnRlZF9jaGlsZF9pZHhfYSBQQVJUSVRJT04gT0YgcGd0YmxfZGRsX3Rl c3QucGFydGVkX2NoaWxkX2lkeCBGT1IgVkFMVUVTIElOICgnYScpOworIENSRUFURSBJTkRFWCBw YXJ0ZWRfY2hpbGRfaWR4X2FfaWQgT04gcGd0YmxfZGRsX3Rlc3QucGFydGVkX2NoaWxkX2lkeF9h IFVTSU5HIGJ0cmVlIChpZCk7CisoMyByb3dzKQorCistLSBNaXg6IHBhcmVudCBoYXMgYSBDUkVB VEUgSU5ERVggKGF1dG8tcHJvcGFnYXRlZCB0byBjaGlsZCwgcmVsaXNwYXJ0aXRpb249dHJ1ZSwK Ky0tIHN1cHByZXNzZWQpIEFORCB0aGUgY2hpbGQgaGFzIGl0cyBvd24gbG9jYWwgaW5kZXggKHJl bGlzcGFydGl0aW9uPWZhbHNlLCBlbWl0dGVkKS4KK0NSRUFURSBUQUJMRSBwYXJ0ZWRfbWl4ZWQg KGlkIGludCwgcmVnaW9uIHRleHQpIFBBUlRJVElPTiBCWSBMSVNUIChyZWdpb24pOworQ1JFQVRF IFRBQkxFIHBhcnRlZF9taXhlZF9hIFBBUlRJVElPTiBPRiBwYXJ0ZWRfbWl4ZWQgRk9SIFZBTFVF UyBJTiAoJ2EnKTsKK0NSRUFURSBJTkRFWCBwYXJ0ZWRfbWl4ZWRfaWQgT04gcGFydGVkX21peGVk IChpZCk7CitDUkVBVEUgSU5ERVggcGFydGVkX21peGVkX2FfcmVnaW9uIE9OIHBhcnRlZF9taXhl ZF9hIChyZWdpb24pOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfbWl4 ZWQnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRf bWl4ZWQgKGlkIGludGVnZXIsIHJlZ2lvbiB0ZXh0KSBQQVJUSVRJT04gQlkgTElTVCAocmVnaW9u KTsKKyBDUkVBVEUgSU5ERVggcGFydGVkX21peGVkX2lkIE9OIHBndGJsX2RkbF90ZXN0LnBhcnRl ZF9taXhlZCBVU0lORyBidHJlZSAoaWQpOworIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5w YXJ0ZWRfbWl4ZWRfYSBQQVJUSVRJT04gT0YgcGd0YmxfZGRsX3Rlc3QucGFydGVkX21peGVkIEZP UiBWQUxVRVMgSU4gKCdhJyk7CisgQ1JFQVRFIElOREVYIHBhcnRlZF9taXhlZF9hX3JlZ2lvbiBP TiBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfbWl4ZWRfYSBVU0lORyBidHJlZSAocmVnaW9uKTsKKyg0 IHJvd3MpCisKKy0tIEZLIG9uIGEgcGFydGl0aW9uZWQgdGFibGU6IGRlY2xhcmVkIG9uIHRoZSBw YXJlbnQ7IHBhcnRpdGlvbiBjaGlsZHJlbiBpbmhlcml0CistLSB0aGUgY29uc3RyYWludCB3aXRo IGNvbmlzbG9jYWw9ZmFsc2UgYW5kIG11c3Qgbm90IHJlLWVtaXQgaXQuCitDUkVBVEUgVEFCTEUg cGFydGVkX2ZrX3RndCAoaWQgaW50IFBSSU1BUlkgS0VZKTsKK0NSRUFURSBUQUJMRSBwYXJ0ZWRf ZmsgKGlkIGludCwgdGd0X2lkIGludCBSRUZFUkVOQ0VTIHBhcnRlZF9ma190Z3QoaWQpKQorICAg IFBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRBQkxFIHBhcnRlZF9ma19hIFBBUlRJ VElPTiBPRiBwYXJ0ZWRfZmsgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTAwKTsKK1NFTEVDVCAq IEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX2ZrJzo6cmVnY2xhc3MsIG93bmVyID0+IGZh bHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9mayAoaWQgaW50ZWdl ciwgdGd0X2lkIGludGVnZXIpIFBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworIEFMVEVSIFRBQkxF IHBndGJsX2RkbF90ZXN0LnBhcnRlZF9mayBBREQgQ09OU1RSQUlOVCBwYXJ0ZWRfZmtfdGd0X2lk X2ZrZXkgRk9SRUlHTiBLRVkgKHRndF9pZCkgUkVGRVJFTkNFUyBwZ3RibF9kZGxfdGVzdC5wYXJ0 ZWRfZmtfdGd0KGlkKTsKKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucGFydGVkX2ZrX2Eg UEFSVElUSU9OIE9GIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9mayBGT1IgVkFMVUVTIEZST00gKDAp IFRPICgxMDApOworKDMgcm93cykKKworLS0gU3RhdGlzdGljcyBkZWNsYXJlZCBleHBsaWNpdGx5 IG9uIGEgcGFydGl0aW9uIGNoaWxkIChub3QgYXV0by1wcm9wYWdhdGVkKToKKy0tIHRoZSBjaGls ZCdzIHN0YXRpc3RpY3Mgb2JqZWN0IGFwcGVhcnMgaW5zaWRlIHRoZSBjaGlsZCdzIERETCBibG9j ay4KK0NSRUFURSBUQUJMRSBwYXJ0ZWRfc3R4IChpZCBpbnQsIHJlZ2lvbiB0ZXh0LCB2YWwgZmxv YXQpIFBBUlRJVElPTiBCWSBMSVNUIChyZWdpb24pOworQ1JFQVRFIFRBQkxFIHBhcnRlZF9zdHhf YSBQQVJUSVRJT04gT0YgcGFydGVkX3N0eCBGT1IgVkFMVUVTIElOICgnYScpOworQ1JFQVRFIFNU QVRJU1RJQ1MgcGFydGVkX3N0eF9zdGF0IChuZGlzdGluY3QpIE9OIGlkLCByZWdpb24gRlJPTSBw YXJ0ZWRfc3R4OworQ1JFQVRFIFNUQVRJU1RJQ1MgcGFydGVkX3N0eF9hX3N0YXQgKG5kaXN0aW5j dCkgT04gaWQsIHZhbCBGUk9NIHBhcnRlZF9zdHhfYTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3Rh YmxlX2RkbCgncGFydGVkX3N0eCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9k ZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucGFydGVkX3N0eCAoaWQgaW50ZWdlciwgcmVn aW9uIHRleHQsIHZhbCBkb3VibGUgcHJlY2lzaW9uKSBQQVJUSVRJT04gQlkgTElTVCAocmVnaW9u KTsKKyBDUkVBVEUgU1RBVElTVElDUyBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfc3R4X3N0YXQgKG5k aXN0aW5jdCkgT04gaWQsIHJlZ2lvbiBGUk9NIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9zdHg7Cisg Q1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9zdHhfYSBQQVJUSVRJT04gT0YgcGd0 YmxfZGRsX3Rlc3QucGFydGVkX3N0eCBGT1IgVkFMVUVTIElOICgnYScpOworIENSRUFURSBTVEFU SVNUSUNTIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9zdHhfYV9zdGF0IChuZGlzdGluY3QpIE9OIGlk LCB2YWwgRlJPTSBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfc3R4X2E7CisoNCByb3dzKQorCitEUk9Q IFRBQkxFIHBhcnRlZF9zdHg7CistLSBOTyBJTkhFUklUIENIRUNLIGNvbnN0cmFpbnQ6IHRoZSBO TyBJTkhFUklUIGZsYWcgbXVzdCBhcHBlYXIgdmVyYmF0aW0gaW4gdGhlCistLSBpbmxpbmUgY29u c3RyYWludCBkZWZpbml0aW9uIGluc2lkZSB0aGUgQ1JFQVRFIFRBQkxFIGJvZHkuCitDUkVBVEUg VEFCTEUgbm9pbmhjaGsgKGlkIGludCwgdmFsIGludCwKKyAgICBDT05TVFJBSU5UIHZhbF9wb3Mg Q0hFQ0sgKHZhbCA+IDApIE5PIElOSEVSSVQpOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVf ZGRsKCdub2luaGNoayc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBU QUJMRSBwZ3RibF9kZGxfdGVzdC5ub2luaGNoayAoaWQgaW50ZWdlciwgdmFsIGludGVnZXIsIENP TlNUUkFJTlQgdmFsX3BvcyBDSEVDSyAoKHZhbCA+IDApKSBOTyBJTkhFUklUKTsKKygxIHJvdykK KworRFJPUCBUQUJMRSBub2luaGNoazsKKy0tIE11bHRpcGxlIGluaGVyaXRhbmNlIHBhcmVudHM6 IHRoZSBJTkhFUklUUyBjbGF1c2UgbXVzdCBsaXN0IGJvdGggcGFyZW50cyBpbgorLS0gZGVjbGFy YXRpb24gb3JkZXI7IG9ubHkgdGhlIGxvY2FsbHktZGVmaW5lZCBjb2x1bW4gYXBwZWFycyBpbiB0 aGUgY29sdW1uIGxpc3QuCitDUkVBVEUgVEFCTEUgbWlfcDEgKGEgaW50IERFRkFVTFQgMSk7CitD UkVBVEUgVEFCTEUgbWlfcDIgKGIgdGV4dCBERUZBVUxUICd4Jyk7CitDUkVBVEUgVEFCTEUgbWlf Y2hpbGQgKGMgZmxvYXQpIElOSEVSSVRTIChtaV9wMSwgbWlfcDIpOworU0VMRUNUICogRlJPTSBw Z19nZXRfdGFibGVfZGRsKCdtaV9jaGlsZCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3Rh YmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5taV9jaGlsZCAoYyBkb3VibGUgcHJlY2lz aW9uKSBJTkhFUklUUyAocGd0YmxfZGRsX3Rlc3QubWlfcDEsIHBndGJsX2RkbF90ZXN0Lm1pX3Ay KTsKKygxIHJvdykKKworRFJPUCBUQUJMRSBtaV9wMSwgbWlfcDIgQ0FTQ0FERTsKK05PVElDRTog IGRyb3AgY2FzY2FkZXMgdG8gdGFibGUgbWlfY2hpbGQKKy0tIFJ1bGVzLgorQ1JFQVRFIFRBQkxF IHJ0IChpZCBpbnQpOworQ1JFQVRFIFRBQkxFIHJ0X2xvZyAoaWQgaW50KTsKK0NSRUFURSBSVUxF IHJ0X2xvZ19pbnNlcnQgQVMgT04gSU5TRVJUIFRPIHJ0CisgICAgRE8gQUxTTyBJTlNFUlQgSU5U TyBydF9sb2cgVkFMVUVTIChORVcuaWQpOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRs KCdydCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJ0 IChpZCBpbnRlZ2VyKTsKKyBDUkVBVEUgUlVMRSBydF9sb2dfaW5zZXJ0IEFTICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAgT04gSU5TRVJUIFRP IHBndGJsX2RkbF90ZXN0LnJ0IERPICBJTlNFUlQgSU5UTyBwZ3RibF9kZGxfdGVzdC5ydF9sb2cg KGlkKSsKKyAgIFZBTFVFUyAobmV3LmlkKTsKKygyIHJvd3MpCisKKy0tIEV4dGVuZGVkIHN0YXRp c3RpY3MuCitDUkVBVEUgVEFCTEUgc3R4IChhIGludCwgYiBpbnQsIGMgaW50KTsKK0NSRUFURSBT VEFUSVNUSUNTIHN0eF9uZHYgKG5kaXN0aW5jdCkgT04gYSwgYiBGUk9NIHN0eDsKK1NFTEVDVCAq IEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnc3R4Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnN0eCAoYSBpbnRlZ2VyLCBiIGlu dGVnZXIsIGMgaW50ZWdlcik7CisgQ1JFQVRFIFNUQVRJU1RJQ1MgcGd0YmxfZGRsX3Rlc3Quc3R4 X25kdiAobmRpc3RpbmN0KSBPTiBhLCBiIEZST00gcGd0YmxfZGRsX3Rlc3Quc3R4OworKDIgcm93 cykKKworLS0gUm93LWxldmVsIHNlY3VyaXR5IHRvZ2dsZXMuCitDUkVBVEUgVEFCTEUgcmxzIChp ZCBpbnQpOworQUxURVIgVEFCTEUgcmxzIEVOQUJMRSBST1cgTEVWRUwgU0VDVVJJVFk7CitBTFRF UiBUQUJMRSBybHMgRk9SQ0UgUk9XIExFVkVMIFNFQ1VSSVRZOworU0VMRUNUICogRlJPTSBwZ19n ZXRfdGFibGVfZGRsKCdybHMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworICAgICAgICAg ICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg Q1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJscyAoaWQgaW50ZWdlcik7CisgQUxURVIgVEFC TEUgcGd0YmxfZGRsX3Rlc3QucmxzIEVOQUJMRSBST1cgTEVWRUwgU0VDVVJJVFk7CisgQUxURVIg VEFCTEUgcGd0YmxfZGRsX3Rlc3QucmxzIEZPUkNFIFJPVyBMRVZFTCBTRUNVUklUWTsKKygzIHJv d3MpCisKKy0tIFJFUExJQ0EgSURFTlRJVFk6IGVtaXR0ZWQgb25seSB3aGVuIG5vdCB0aGUgZGVm YXVsdC4KK0NSRUFURSBUQUJMRSByaV9mdWxsIChhIGludCk7CitBTFRFUiBUQUJMRSByaV9mdWxs IFJFUExJQ0EgSURFTlRJVFkgRlVMTDsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgn cmlfZnVsbCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAg ICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFC TEUgcGd0YmxfZGRsX3Rlc3QucmlfZnVsbCAoYSBpbnRlZ2VyKTsKKyBBTFRFUiBUQUJMRSBwZ3Ri bF9kZGxfdGVzdC5yaV9mdWxsIFJFUExJQ0EgSURFTlRJVFkgRlVMTDsKKygyIHJvd3MpCisKK0NS RUFURSBUQUJMRSByaV9pZHggKGEgaW50IE5PVCBOVUxMKTsKK0NSRUFURSBVTklRVUUgSU5ERVgg cmlfaWR4X2EgT04gcmlfaWR4IChhKTsKK0FMVEVSIFRBQkxFIHJpX2lkeCBSRVBMSUNBIElERU5U SVRZIFVTSU5HIElOREVYIHJpX2lkeF9hOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRs KCdyaV9pZHgnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJpX2lkeCAo YSBpbnRlZ2VyIE5PVCBOVUxMKTsKKyBDUkVBVEUgVU5JUVVFIElOREVYIHJpX2lkeF9hIE9OIHBn dGJsX2RkbF90ZXN0LnJpX2lkeCBVU0lORyBidHJlZSAoYSk7CisgQUxURVIgVEFCTEUgcGd0Ymxf ZGRsX3Rlc3QucmlfaWR4IFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggcmlfaWR4X2E7Ciso MyByb3dzKQorCistLSBVTkxPR0dFRCArIHJlbG9wdGlvbnMuCitDUkVBVEUgVU5MT0dHRUQgVEFC TEUgdW5vIChpZCBpbnQpIFdJVEggKGZpbGxmYWN0b3IgPSA3MCk7CitTRUxFQ1QgKiBGUk9NIHBn X2dldF90YWJsZV9kZGwoJ3Vubyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFVOTE9HR0VE IFRBQkxFIHBndGJsX2RkbF90ZXN0LnVubyAoaWQgaW50ZWdlcikgV0lUSCAoZmlsbGZhY3Rvcj0n NzAnKTsKKygxIHJvdykKKworLS0gVHlwZWQgdGFibGUgKENSRUFURSBUQUJMRSBPRiB0eXBlX25h bWUpLiAgQ29sdW1ucyBpbmhlcml0ZWQgZnJvbSB0aGUKKy0tIHR5cGUgZW1pdCBub3RoaW5nOyBs b2NhbGx5LWFwcGxpZWQgREVGQVVMVCwgTk9UIE5VTEwgYW5kIENIRUNLIGNvbWUKKy0tIG91dCB0 aHJvdWdoIGEgc2luZ2xlICIoY29sIFdJVEggT1BUSU9OUyAuLi4pIiBsaXN0LgorQ1JFQVRFIFRZ UEUgdHlwZWRfdCBBUyAoYSBpbnQsIGIgdGV4dCk7CitDUkVBVEUgVEFCTEUgdHlwZWRfcGxhaW4g T0YgdHlwZWRfdDsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgndHlwZWRfcGxhaW4n OjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICBw Z19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg Q1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnR5cGVkX3BsYWluIE9GIHBndGJsX2RkbF90ZXN0 LnR5cGVkX3Q7CisoMSByb3cpCisKK0NSRUFURSBUQUJMRSB0eXBlZF9vdmVyIE9GIHR5cGVkX3Qg KAorICAgIGEgV0lUSCBPUFRJT05TIERFRkFVTFQgNyBOT1QgTlVMTCwKKyAgICBiIFdJVEggT1BU SU9OUyBOT1QgTlVMTCwKKyAgICBDT05TVFJBSU5UIGJfbm9uZW1wdHkgQ0hFQ0sgKGxlbmd0aChi KSA+IDApCispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCd0eXBlZF9vdmVyJzo6 cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRf dGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0 YmxfZGRsX3Rlc3QudHlwZWRfb3ZlciBPRiBwZ3RibF9kZGxfdGVzdC50eXBlZF90IChhIFdJVEgg T1BUSU9OUyBERUZBVUxUIDcgTk9UIE5VTEwsIGIgV0lUSCBPUFRJT05TIE5PVCBOVUxMLCBDT05T VFJBSU5UIGJfbm9uZW1wdHkgQ0hFQ0sgKChsZW5ndGgoYikgPiAwKSkpOworKDEgcm93KQorCist LSBUZW1wb3JhcnkgdGFibGVzICsgT04gQ09NTUlULiAgVGVtcCB0YWJsZXMgbXVzdCBuZXZlciBi ZSBlbWl0dGVkIHdpdGgKKy0tIHRoZSBzZXNzaW9uLXByaXZhdGUgcGdfdGVtcF9OTiBzY2hlbWEg cHJlZml4IC0tIHRoZSBURU1QT1JBUlkga2V5d29yZAorLS0gYWxyZWFkeSBwbGFjZXMgdGhlIHRh YmxlIGluIHBnX3RlbXAgYW5kIHRoZSBwcmVmaXggaXMgbm9uLXJlcGxheWFibGUuCistLSBPTiBD T01NSVQgRFJPUCBvbmx5IGZpcmVzIGF0IGNvbW1pdCwgc28gdGhlIHF1ZXJpZXMgdGhhdCBuZWVk IHRvIHNlZQorLS0gdGhlIGNhdGFsb2cgZW50cnkgbXVzdCBydW4gaW4gdGhlIHNhbWUgdHJhbnNh Y3Rpb24gYXMgdGhlIENSRUFURS4KK0JFR0lOOworQ1JFQVRFIFRFTVAgVEFCTEUgdGVtcF9kZWZh dWx0IChpZCBpbnQpOworQ1JFQVRFIFRFTVAgVEFCTEUgdGVtcF9kZWxldGUgKGlkIGludCkgT04g Q09NTUlUIERFTEVURSBST1dTOworQ1JFQVRFIFRFTVAgVEFCTEUgdGVtcF9kcm9wIChpZCBpbnQp IE9OIENPTU1JVCBEUk9QOworU0VMRUNUIGxpbmUgRlJPTSBwZ19nZXRfdGFibGVfZGRsKCd0ZW1w X2RlZmF1bHQnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpIEFTIGxpbmUKK1dIRVJFIGxpbmUg TElLRSAnQ1JFQVRFICUnOworICAgICAgICAgICAgICAgICAgICAgICBsaW5lICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBDUkVBVEUgVEVNUE9SQVJZIFRBQkxFIHRlbXBfZGVmYXVsdCAoaWQgaW50ZWdl cik7CisoMSByb3cpCisKK1NFTEVDVCBsaW5lIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgndGVtcF9k ZWxldGUnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpIEFTIGxpbmUKK1dIRVJFIGxpbmUgTElL RSAnQ1JFQVRFICUnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUg VEVNUE9SQVJZIFRBQkxFIHRlbXBfZGVsZXRlIChpZCBpbnRlZ2VyKSBPTiBDT01NSVQgREVMRVRF IFJPV1M7CisoMSByb3cpCisKK1NFTEVDVCBsaW5lIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgndGVt cF9kcm9wJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKSBBUyBsaW5lCitXSEVSRSBsaW5lIExJ S0UgJ0NSRUFURSAlJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRFTVBPUkFSWSBUQUJMRSB0 ZW1wX2Ryb3AgKGlkIGludGVnZXIpIE9OIENPTU1JVCBEUk9QOworKDEgcm93KQorCitST0xMQkFD SzsKKy0tIFByZXR0eSBtb2RlLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNp Yyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgcHJldHR5ID0+IHRydWUpOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0Ymxf ZGRsX3Rlc3QuYmFzaWMgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KworICAgICBpZCBpbnRlZ2VyIE5PVCBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICArCisgICAgIG5hbWUgdGV4dCBDT0xMQVRFICJDIiBERUZB VUxUICdhbm9uJzo6dGV4dCBOT1QgTlVMTCAgICAgICAgICAgICAgICAgICAgICsKKyApOworIEFM VEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmJhc2ljIEFERCBDT05TVFJBSU5UIGJhc2ljX3BrZXkg UFJJTUFSWSBLRVkgKGlkKTsKKygyIHJvd3MpCisKKy0tIG9ubHlfa2luZHMgLyBleGNlcHRfa2lu ZHMgZ2F0aW5nOiBlYWNoIGVtaXRzIGVpdGhlciBvbmx5IHRoZSBsaXN0ZWQga2luZHMKKy0tIChv bmx5X2tpbmRzKSBvciBldmVyeSBraW5kIGV4Y2VwdCB0aGUgbGlzdGVkIG9uZXMgKGV4Y2VwdF9r aW5kcykuICBUaGUgdHdvCistLSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiAgS2luZCB2b2NhYnVs YXJ5OiB0YWJsZSwgaW5kZXgsCistLSBwcmltYXJ5X2tleSwgdW5pcXVlLCBjaGVjaywgZm9yZWln bl9rZXksIGV4Y2x1c2lvbiwgcnVsZSwKKy0tIHN0YXRpc3RpY3MsIHRyaWdnZXIsIHBvbGljeSwg cmxzLCByZXBsaWNhX2lkZW50aXR5LCBwYXJ0aXRpb24uCistLSBOT1QgTlVMTCBpcyBub3QgaW4g dGhlIHZvY2FidWxhcnkgLSBhbHdheXMgZW1pdHRlZCB0byBwcmV2ZW50CistLSBwcm9kdWNpbmcg c2NoZW1hcyB0aGF0IHNpbGVudGx5IGFjY2VwdCBOVUxMcyB0aGUgc291cmNlIHdvdWxkCistLSBo YXZlIHJlamVjdGVkLgorLS0KKy0tIGV4Y2VwdF9raW5kcz1pbmRleCBoaWRlcyB0aGUgQ1JFQVRF IElOREVYIHN0YXRlbWVudHMuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2lkeGQn OjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsnaW5kZXgn XSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRB QkxFIHBndGJsX2RkbF90ZXN0LmlkeGQgKGlkIGludGVnZXIgTk9UIE5VTEwsIG5hbWUgdGV4dCk7 CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuaWR4ZCBBREQgQ09OU1RSQUlOVCBpZHhkX3Br ZXkgUFJJTUFSWSBLRVkgKGlkKTsKKygyIHJvd3MpCisKKy0tIGV4Y2VwdF9raW5kcz1wcmltYXJ5 X2tleSx1bmlxdWUsY2hlY2ssZm9yZWlnbl9rZXksZXhjbHVzaW9uIGhpZGVzIGV2ZXJ5CistLSB0 YWJsZS1sZXZlbCBjb25zdHJhaW50LiAgSW5saW5lIENIRUNLIGluIHRoZSBDUkVBVEUgVEFCTEUg Ym9keSBpcworLS0gc3VwcHJlc3NlZCB0b28uCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9k ZGwoJ2NvbnMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJB WVsncHJpbWFyeV9rZXknLCd1bmlxdWUnLCdjaGVjaycsJ2ZvcmVpZ25fa2V5JywnZXhjbHVzaW9u J10pOworICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRs X3Rlc3QuY29ucyAoYSBpbnRlZ2VyLCBiIGludGVnZXIsIGMgaW50ZWdlcik7CisoMSByb3cpCisK Ky0tIGV4Y2VwdF9raW5kcz1mb3JlaWduX2tleSBzdXBwcmVzc2VzIG9ubHkgRk9SRUlHTiBLRVkg Y29uc3RyYWludHM7CistLSBQUklNQVJZIEtFWSwgVU5JUVVFLCBDSEVDSywgYW5kIG5hbWVkIE5P VCBOVUxMIHN0YXkuICBUaGlzIGlzIHRoZQorLS0gZmlyc3QgcGFzcyBvZiB0aGUgdHdvLXBhc3Mg RkstY2xvbmUgd29ya2Zsb3c6IGVtaXQgdGFibGVzIHdpdGhvdXQKKy0tIGNyb3NzLXRhYmxlIEZL cywgbG9hZCBkYXRhLCB0aGVuIHJlLXJ1biB3aXRoIG9ubHlfa2luZHM9Zm9yZWlnbl9rZXkKKy0t IHRvIGFkZCB0aGVtIG9uY2UgYWxsIHRhcmdldHMgZXhpc3QuCitTRUxFQ1QgKiBGUk9NIHBnX2dl dF90YWJsZV9kZGwoJ2NvbnMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5k cyA9PiBBUlJBWVsnZm9yZWlnbl9rZXknXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuY29u cyAoYSBpbnRlZ2VyLCBiIGludGVnZXIsIGMgaW50ZWdlciwgQ09OU1RSQUlOVCBjb25zX2FfY2hl Y2sgQ0hFQ0sgKChhID4gMCkpKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5jb25zIEFE RCBDT05TVFJBSU5UIGNvbnNfYl9rZXkgVU5JUVVFIChiKTsKKygyIHJvd3MpCisKKy0tIG9ubHlf a2luZHM9Zm9yZWlnbl9rZXkgaXMgdGhlIHNlY29uZCBwYXNzIG9mIHRoZSB0d28tcGFzcyBGSy1j bG9uZQorLS0gd29ya2Zsb3c6IGVtaXQgb25seSB0aGUgQUxURVIgVEFCTEUgLi4uIEFERCBDT05T VFJBSU5UIC4uLiBGT1JFSUdOCistLSBLRVkgcm93czsgdGhlIENSRUFURSBUQUJMRSBhbmQgZXZl cnkgbm9uLUZLIHN1Yi1vYmplY3QgYXJlCistLSBzdXBwcmVzc2VkICh0aGUgdGFibGUgYWxyZWFk eSBleGlzdHMgZnJvbSB0aGUgZmlyc3QgcGFzcykuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJs ZV9kZGwoJ2NvbnMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJS QVlbJ2ZvcmVpZ25fa2V5J10pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmNvbnMg QUREIENPTlNUUkFJTlQgY29uc19jX2ZrZXkgRk9SRUlHTiBLRVkgKGMpIFJFRkVSRU5DRVMgcGd0 YmxfZGRsX3Rlc3QucmVmZChpZCkgREVGRVJSQUJMRSBJTklUSUFMTFkgREVGRVJSRUQ7CisoMSBy b3cpCisKKy0tIEEgdGFibGUgd2l0aCBubyBmb3JlaWduIGtleXMgcHJvZHVjZXMgbm8gcm93cyB1 bmRlcgorLS0gb25seV9raW5kcz1mb3JlaWduX2tleS4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3Rh YmxlX2RkbCgncmVmZCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBB UlJBWVsnZm9yZWlnbl9rZXknXSk7CisgcGdfZ2V0X3RhYmxlX2RkbCAKKy0tLS0tLS0tLS0tLS0t LS0tLQorKDAgcm93cykKKworLS0gb25seV9raW5kcz10YWJsZSBlbWl0cyBvbmx5IHRoZSBiYXJl IENSRUFURSBUQUJMRSAod2l0aCBhbnkgaW5saW5lCistLSBjb2x1bW4tbGV2ZWwgTk9UIE5VTEwg YW5kIENIRUNLKSAtIG5vIGluZGV4ZXMsIG5vIFBSSU1BUlkgS0VZIEFMVEVSLAorLS0gbm8gb3Ro ZXIgc3ViLW9iamVjdHMuICBVc2VmdWwgZm9yIGNhcHR1cmluZyBhIHRhYmxlJ3Mgc2hhcGUgd2l0 aG91dAorLS0gcHVsbGluZyBpbiBldmVyeXRoaW5nIGF0dGFjaGVkIHRvIGl0LgorU0VMRUNUICog RlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZHhkJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBv bmx5X2tpbmRzID0+IEFSUkFZWyd0YWJsZSddKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg cGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5pZHhkIChpZCBpbnRlZ2VyIE5PVCBOVUxMLCBu YW1lIHRleHQpOworKDEgcm93KQorCistLSBvbmx5X2tpbmRzPWNoZWNrIG9uIGEgbm9uLXBhcnRp dGlvbiB0YWJsZS4gIFRoZSBjb25zdHJhaW50IGxvb3AgbXVzdCBlbWl0CistLSBjb2x1bW4tbGV2 ZWwgYW5kIHRhYmxlLWxldmVsIENIRUNLIGNvbnN0cmFpbnRzIHZpYSBBTFRFUiBUQUJMRSBoZXJl LAorLS0gYmVjYXVzZSB0aGUgaW5saW5lIHBhdGggaW4gQ1JFQVRFIFRBQkxFIG5ldmVyIHJ1bnMg KEtJTkRfVEFCTEUgaXMKKy0tIG5vdCBpbiB0aGUgZmlsdGVyKS4KK0NSRUFURSBUQUJMRSBjaGtf b25seSAoCisgICAgaWQgIGludCBQUklNQVJZIEtFWSwKKyAgICBxdHkgaW50IENIRUNLIChxdHkg PiAwKSwKKyAgICBDT05TVFJBSU5UIGNoa19vbmx5X2lkX3BvcyBDSEVDSyAoaWQgPiAwKQorKTsK K1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY2hrX29ubHknOjpyZWdjbGFzcywgb3du ZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ2NoZWNrJ10pOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5jaGtfb25seSBBREQgQ09OU1RSQUlOVCBjaGtf b25seV9pZF9wb3MgQ0hFQ0sgKChpZCA+IDApKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVz dC5jaGtfb25seSBBREQgQ09OU1RSQUlOVCBjaGtfb25seV9xdHlfY2hlY2sgQ0hFQ0sgKChxdHkg PiAwKSk7CisoMiByb3dzKQorCitEUk9QIFRBQkxFIGNoa19vbmx5OworLS0gb25seV9raW5kcz1w YXJ0aXRpb24gb24gYSBwYXJ0aXRpb25lZC10YWJsZSBwYXJlbnQ6IGVhY2ggY2hpbGQncyBmdWxs IERETAorLS0gaXMgZW1pdHRlZCAoQ1JFQVRFIFRBQkxFIC4uLiBQQVJUSVRJT04gT0YgLi4uKS4g IFRoZSAicGFydGl0aW9uIgorLS0ga2V5d29yZCBpcyBhIGdhdGUgYXQgdGhlIHBhcmVudCBsZXZl bDsgaXQgaXMgc3RyaXBwZWQgZnJvbSB0aGUKKy0tIHByb3BhZ2F0ZWQgZmlsdGVyIHNvIHRoZSBj aGlsZCBkb2VzIG5vdCBleGNsdWRlIGl0cyBvd24KKy0tIENSRUFURSBUQUJMRS4KK0NSRUFURSBU QUJMRSBwX29ubHkgKGlkIGludCwgdmFsIHRleHQpIFBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOwor Q1JFQVRFIFRBQkxFIHBfb25seV9hIFBBUlRJVElPTiBPRiBwX29ubHkgRk9SIFZBTFVFUyBGUk9N ICgwKSBUTyAoMTAwKTsKK0NSRUFURSBUQUJMRSBwX29ubHlfYiBQQVJUSVRJT04gT0YgcF9vbmx5 IEZPUiBWQUxVRVMgRlJPTSAoMTAwKSBUTyAoMjAwKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3Rh YmxlX2RkbCgncF9vbmx5Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+ IEFSUkFZWydwYXJ0aXRpb24nXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wX29ubHlfYSBQQVJUSVRJT04g T0YgcGd0YmxfZGRsX3Rlc3QucF9vbmx5IEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwMCk7Cisg Q1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBfb25seV9iIFBBUlRJVElPTiBPRiBwZ3RibF9k ZGxfdGVzdC5wX29ubHkgRk9SIFZBTFVFUyBGUk9NICgxMDApIFRPICgyMDApOworKDIgcm93cykK KworRFJPUCBUQUJMRSBwX29ubHk7CistLSBvbmx5X2tpbmRzIGFuZCBleGNlcHRfa2luZHMgYXJl IG11dHVhbGx5IGV4Y2x1c2l2ZS4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY29u cyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBvbmx5X2tpbmRzID0+IEFSUkFZWydmb3JlaWduX2tleSddLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsnZm9yZWlnbl9rZXknXSk7CitF UlJPUjogICJvbmx5X2tpbmRzIiBhbmQgImV4Y2VwdF9raW5kcyIgcGFyYW1ldGVycyBhcmUgbXV0 dWFsbHkgZXhjbHVzaXZlCistLSBQdWIvc3ViIHNjaGVtYSBjbG9uZToga2VlcCB0aGUgdGFibGUg YW5kIGl0cyBwcmltYXJ5IGtleSwgZHJvcCB0aGUKKy0tIHJlc3Qgb2YgdGhlIGNvbnN0cmFpbnRz IHNvIHRoZSBzdWJzY3JpYmVyIGNhbiByZXBsaWNhdGUgd2l0aG91dAorLS0gcHVsbGluZyBjcm9z cy10YWJsZSBkZXBlbmRlbmNpZXMgYWxvbmcuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9k ZGwoJ2NvbnMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJB WVsndW5pcXVlJywnY2hlY2snLCdmb3JlaWduX2tleScsJ2V4Y2x1c2lvbiddKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LmNvbnMgKGEg aW50ZWdlciwgYiBpbnRlZ2VyLCBjIGludGVnZXIpOworKDEgcm93KQorCistLSBleGNlcHRfa2lu ZHM9cnVsZSBoaWRlcyB0aGUgQ1JFQVRFIFJVTEUuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJs ZV9kZGwoJ3J0Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJS QVlbJ3J1bGUnXSk7CisgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JF QVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJ0IChpZCBpbnRlZ2VyKTsKKygxIHJvdykKKworLS0g ZXhjZXB0X2tpbmRzPXN0YXRpc3RpY3MgaGlkZXMgdGhlIENSRUFURSBTVEFUSVNUSUNTLgorU0VM RUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdzdHgnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFs c2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsnc3RhdGlzdGljcyddKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5zdHggKGEgaW50ZWdlciwg YiBpbnRlZ2VyLCBjIGludGVnZXIpOworKDEgcm93KQorCistLSBleGNlcHRfa2luZHM9cmxzIGhp ZGVzIHRoZSBFTkFCTEUvRk9SQ0UgUk9XIExFVkVMIFNFQ1VSSVRZIHRvZ2dsZXMuCitTRUxFQ1Qg KiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3Jscyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwg ZXhjZXB0X2tpbmRzID0+IEFSUkFZWydybHMnXSk7CisgICAgICAgICAgICAgICBwZ19nZXRfdGFi bGVfZGRsICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucmxzIChpZCBpbnRl Z2VyKTsKKygxIHJvdykKKworLS0gZXhjZXB0X2tpbmRzPXJlcGxpY2FfaWRlbnRpdHkgaGlkZXMg dGhlIFJFUExJQ0EgSURFTlRJVFkgY2xhdXNlLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVf ZGRsKCdyaV9mdWxsJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBleGNlcHRfa2luZHMgPT4g QVJSQVlbJ3JlcGxpY2FfaWRlbnRpdHknXSk7CisgICAgICAgICAgICAgICAgIHBnX2dldF90YWJs ZV9kZGwgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucmlfZnVsbCAo YSBpbnRlZ2VyKTsKKygxIHJvdykKKworLS0gUGFydGl0aW9uIGNoaWxkcmVuIGFyZSBlbWl0dGVk IGJ5IGRlZmF1bHQ7IGV4Y2VwdF9raW5kcz1wYXJ0aXRpb24KKy0tIHN1cHByZXNzZXMgdGhlbSBz byBvbmx5IHRoZSBwYXJ0aXRpb25lZC10YWJsZSBwYXJlbnQgY29tZXMgb3V0LgorU0VMRUNUICog RlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfcmFuZ2UnOjpyZWdjbGFzcywgb3duZXIgPT4g ZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsncGFydGl0aW9uJ10pOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfcmFuZ2UgKGlkIGludGVnZXIs IGsgaW50ZWdlcikgUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CisoMSByb3cpCisKKy0tIFdoaXRl c3BhY2UgYXJvdW5kIGtpbmQgbmFtZXMgaXMgYWxsb3dlZDsgY2FzZSBpcyBmb2xkZWQuCitTRUxF Q1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2lkeGQnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFs c2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsnICBJTkRFWCAgJywnICBSVUxFICAnXSk7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJs X2RkbF90ZXN0LmlkeGQgKGlkIGludGVnZXIgTk9UIE5VTEwsIG5hbWUgdGV4dCk7CisgQUxURVIg VEFCTEUgcGd0YmxfZGRsX3Rlc3QuaWR4ZCBBREQgQ09OU1RSQUlOVCBpZHhkX3BrZXkgUFJJTUFS WSBLRVkgKGlkKTsKKygyIHJvd3MpCisKKy0tIHNjaGVtYV9xdWFsaWZpZWQ9ZmFsc2Ugc3RyaXBz IHRoZSBzY2hlbWEgZnJvbSB0aGUgdGFyZ2V0IHRhYmxlIGl0c2VsZgorLS0gYW5kIGZyb20gc2Ft ZS1zY2hlbWEgc2libGluZyByZWZlcmVuY2VzIChpbmhlcml0YW5jZS9wYXJ0aXRpb24KKy0tIHBh cmVudHMsIGlkZW50aXR5IHNlcXVlbmNlcyBpbiB0aGUgc2FtZSBzY2hlbWEpLCB3aGlsZSBjcm9z cy1zY2hlbWEKKy0tIHJlZmVyZW5jZXMgYXJlIGtlcHQgcXVhbGlmaWVkIGZvciBjb3JyZWN0bmVz cy4KKy0tCistLSBCYXJlIENSRUFURSBUQUJMRSBmb3IgYW4gb3JkaW5hcnkgdGFibGUuCitTRUxF Q1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsIG93bmVyID0+IGZh bHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYV9xdWFsaWZpZWQgPT4g ZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90 YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgYmFzaWMgKGlk IGludGVnZXIgTk9UIE5VTEwsIG5hbWUgdGV4dCBDT0xMQVRFICJDIiBERUZBVUxUICdhbm9uJzo6 dGV4dCBOT1QgTlVMTCk7CisgQUxURVIgVEFCTEUgYmFzaWMgQUREIENPTlNUUkFJTlQgYmFzaWNf cGtleSBQUklNQVJZIEtFWSAoaWQpOworKDIgcm93cykKKworLS0gSU5IRVJJVFMgcGFyZW50IGlu IHRoZSBzYW1lIHNjaGVtYSBpcyBlbWl0dGVkIHVucXVhbGlmaWVkLgorU0VMRUNUICogRlJPTSBw Z19nZXRfdGFibGVfZGRsKCdjaCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWFfcXVhbGlmaWVkID0+IGZhbHNlKTsKKyAgICAg ICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBU QUJMRSBjaCAoYyBpbnRlZ2VyKSBJTkhFUklUUyAocGFyKTsKKyBBTFRFUiBUQUJMRSBPTkxZIGNo IEFMVEVSIENPTFVNTiBhIFNFVCBERUZBVUxUIDk5OTsKKygyIHJvd3MpCisKKy0tIFBhcnRpdGlv biBwYXJlbnQgaW4gdGhlIHNhbWUgc2NoZW1hIGlzIGVtaXR0ZWQgdW5xdWFsaWZpZWQuCitTRUxF Q1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BhcnRlZF9yYW5nZV8xJzo6cmVnY2xhc3MsIG93 bmVyID0+IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYV9xdWFs aWZpZWQgPT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dl dF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwYXJ0ZWRfcmFuZ2VfMSBQQVJUSVRJ T04gT0YgcGFydGVkX3JhbmdlIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwMCk7CisgQUxURVIg VEFCTEUgT05MWSBwYXJ0ZWRfcmFuZ2VfMSBBTFRFUiBDT0xVTU4gayBTRVQgREVGQVVMVCA3Owor KDIgcm93cykKKworLS0gQ3Jvc3Mtc2NoZW1hIEZLIHRhcmdldCBrZWVwcyBxdWFsaWZpY2F0aW9u LiAgVGhlICdyZWZkJyB0YWJsZSBpcyBpbgorLS0gcGd0YmxfZGRsX3Rlc3Q7IHBsYWNlIGFuIEZL IHRhcmdldCBpbiBhIGRpZmZlcmVudCBzY2hlbWEgYW5kIHZlcmlmeSBpdAorLS0gc3RheXMgcXVh bGlmaWVkIGV2ZW4gd2l0aCBzY2hlbWFfcXVhbGlmaWVkPWZhbHNlLgorQ1JFQVRFIFNDSEVNQSBw Z3RibF9kZGxfb3RoZXI7CitDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX290aGVyLnBhcmVudCAoaWQg aW50IFBSSU1BUlkgS0VZKTsKK0NSRUFURSBUQUJMRSB4c2NoZW1hX2ZrICgKKyAgICBpZCAgaW50 IFBSSU1BUlkgS0VZLAorICAgIHBpZCBpbnQgUkVGRVJFTkNFUyBwZ3RibF9kZGxfb3RoZXIucGFy ZW50CispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCd4c2NoZW1hX2ZrJzo6cmVn Y2xhc3MsIG93bmVyID0+IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNj aGVtYV9xdWFsaWZpZWQgPT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHhzY2hlbWFf ZmsgKGlkIGludGVnZXIgTk9UIE5VTEwsIHBpZCBpbnRlZ2VyKTsKKyBBTFRFUiBUQUJMRSB4c2No ZW1hX2ZrIEFERCBDT05TVFJBSU5UIHhzY2hlbWFfZmtfcGtleSBQUklNQVJZIEtFWSAoaWQpOwor IEFMVEVSIFRBQkxFIHhzY2hlbWFfZmsgQUREIENPTlNUUkFJTlQgeHNjaGVtYV9ma19waWRfZmtl eSBGT1JFSUdOIEtFWSAocGlkKSBSRUZFUkVOQ0VTIHBndGJsX2RkbF9vdGhlci5wYXJlbnQoaWQp OworKDMgcm93cykKKworLS0gQ3Jvc3Mtc2NoZW1hIEZLIHdob3NlIHRhcmdldCBzY2hlbWEgbmFt ZSBlbmRzIHdpdGggdGhlIGJhc2Ugc2NoZW1hIG5hbWUKKy0tIChlLmcuICJ4cGd0YmxfZGRsX3Rl c3QiIGVuZHMgd2l0aCAicGd0YmxfZGRsX3Rlc3QiKS4gIEEgcG9zdC1ob2MgdGV4dAorLS0gc3Ry aXAgd291bGQgbWFuZ2xlICJ4cGd0YmxfZGRsX3Rlc3QucmVmdGJsIiBpbnRvICJ4cmVmdGJsIjsg ZGVjaWRpbmcKKy0tIHF1YWxpZmljYXRpb24gYXQgZ2VuZXJhdGlvbiB0aW1lIGF2b2lkcyB0aGUg cHJvYmxlbSBlbnRpcmVseS4KK0NSRUFURSBTQ0hFTUEgeHBndGJsX2RkbF90ZXN0OworQ1JFQVRF IFRBQkxFIHhwZ3RibF9kZGxfdGVzdC5yZWZ0YmwgKGlkIGludCBQUklNQVJZIEtFWSk7CitDUkVB VEUgVEFCTEUgc3VmZml4X3NjaGVtYV9mayAoCisgICAgaWQgIGludCBQUklNQVJZIEtFWSwKKyAg ICByZWYgaW50IFJFRkVSRU5DRVMgeHBndGJsX2RkbF90ZXN0LnJlZnRibAorKTsKK1NFTEVDVCAq IEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnc3VmZml4X3NjaGVtYV9mayc6OnJlZ2NsYXNzLCBvd25l ciA9PiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWFfcXVhbGlm aWVkID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBU QUJMRSBzdWZmaXhfc2NoZW1hX2ZrIChpZCBpbnRlZ2VyIE5PVCBOVUxMLCByZWYgaW50ZWdlcik7 CisgQUxURVIgVEFCTEUgc3VmZml4X3NjaGVtYV9mayBBREQgQ09OU1RSQUlOVCBzdWZmaXhfc2No ZW1hX2ZrX3BrZXkgUFJJTUFSWSBLRVkgKGlkKTsKKyBBTFRFUiBUQUJMRSBzdWZmaXhfc2NoZW1h X2ZrIEFERCBDT05TVFJBSU5UIHN1ZmZpeF9zY2hlbWFfZmtfcmVmX2ZrZXkgRk9SRUlHTiBLRVkg KHJlZikgUkVGRVJFTkNFUyB4cGd0YmxfZGRsX3Rlc3QucmVmdGJsKGlkKTsKKygzIHJvd3MpCisK K0RST1AgVEFCTEUgc3VmZml4X3NjaGVtYV9mazsKK0RST1AgU0NIRU1BIHhwZ3RibF9kZGxfdGVz dCBDQVNDQURFOworTk9USUNFOiAgZHJvcCBjYXNjYWRlcyB0byB0YWJsZSB4cGd0YmxfZGRsX3Rl c3QucmVmdGJsCistLSBJZGVudGl0eSBjb2x1bW4gd2l0aCBhIGN1c3RvbSBzZXF1ZW5jZSBuYW1l IGluIHRoZSBzYW1lIHNjaGVtYSBpcworLS0gZW1pdHRlZCB1bnF1YWxpZmllZC4KK1NFTEVDVCAq IEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnaWRfY3VzdG9tJzo6cmVnY2xhc3MsIG93bmVyID0+IGZh bHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYV9xdWFsaWZpZWQgPT4g ZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBpZF9jdXN0b20gKHYgaW50ZWdl ciBHRU5FUkFURUQgQUxXQVlTIEFTIElERU5USVRZIChTVEFSVCBXSVRIIDEwMCBJTkNSRU1FTlQg QlkgNSBNSU5WQUxVRSA1MCBNQVhWQUxVRSAxMDAwIENBQ0hFIDEwIENZQ0xFKSBOT1QgTlVMTCk7 CisoMSByb3cpCisKKy0tIFJvdW5kLXRyaXA6IHdpdGggc2NoZW1hX3F1YWxpZmllZD1mYWxzZSwg YWZ0ZXIgU0VUIHNlYXJjaF9wYXRoIHRoZQorLS0gRERMIGNhbiBiZSByZXBsYXllZCBpbnRvIGEg ZGlmZmVyZW50IHRhcmdldCBzY2hlbWEuCitDUkVBVEUgU0NIRU1BIHBndGJsX2RkbF9yZXBsYXk7 CitETyAkJAorREVDTEFSRQorICAgIHN0bXQgdGV4dDsKK0JFR0lOCisgICAgU0VUIExPQ0FMIHNl YXJjaF9wYXRoID0gcGd0YmxfZGRsX3JlcGxheTsKKyAgICBGT1Igc3RtdCBJTgorICAgICAgICBT RUxFQ1QgbGluZSBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BndGJsX2RkbF90ZXN0LmJhc2ljJzo6 cmVnY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25l ciA9PiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNj aGVtYV9xdWFsaWZpZWQgPT4gZmFsc2UpIEFTIGxpbmUKKyAgICBMT09QCisgICAgICAgIEVYRUNV VEUgc3RtdDsKKyAgICBFTkQgTE9PUDsKK0VORCAkJDsKK1NFTEVDVCByZWxuYW1lc3BhY2U6OnJl Z25hbWVzcGFjZTo6dGV4dCwgcmVsbmFtZQorRlJPTSBwZ19jbGFzcyBXSEVSRSBvaWQgPSAncGd0 YmxfZGRsX3JlcGxheS5iYXNpYyc6OnJlZ2NsYXNzOworICAgcmVsbmFtZXNwYWNlICAgfCByZWxu YW1lIAorLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLQorIHBndGJsX2RkbF9yZXBsYXkgfCBi YXNpYworKDEgcm93KQorCitEUk9QIFNDSEVNQSBwZ3RibF9kZGxfcmVwbGF5IENBU0NBREU7CitO T1RJQ0U6ICBkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHBndGJsX2RkbF9yZXBsYXkuYmFzaWMKK0RS T1AgVEFCTEUgeHNjaGVtYV9mazsKK0RST1AgU0NIRU1BIHBndGJsX2RkbF9vdGhlciBDQVNDQURF OworTk9USUNFOiAgZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBwZ3RibF9kZGxfb3RoZXIucGFyZW50 CistLSBDcm9zcy1zY2hlbWEgcGFydGl0aW9uIGNoaWxkIHdpdGggc2NoZW1hX3F1YWxpZmllZD1m YWxzZTogdGhlIGNoaWxkIG11c3QKKy0tIGNhcnJ5IGl0cyBvd24gc2NoZW1hIHByZWZpeCBzbyB0 aGUgb3V0cHV0IGlzIHVuYW1iaWd1b3VzIHJlZ2FyZGxlc3Mgb2YgdGhlCistLSBjYWxsZXIncyBz ZWFyY2hfcGF0aC4gIEJlZm9yZSB0aGUgZml4LCB0aGUgY2hpbGQgd2FzIGVtaXR0ZWQgYXMgdGhl IGJhcmUKKy0tIG5hbWUgInB0X2MiIChsYW5kaW5nIGluIHdoaWNoZXZlciBzY2hlbWEgaXMgZmly c3QgaW4gc2VhcmNoX3BhdGgpIHdoaWxlCistLSB0aGUgcGFyZW50IHJlZmVyZW5jZSBpbnNpZGUg dGhlIENSRUFURSBUQUJMRSBjYW1lIG91dCBhcyB0aGUgZnVsbHktcXVhbGlmaWVkCistLSAicGd0 YmxfZGRsX3BhcnRfcy5wdCIsIG1ha2luZyB0aGUgRERMIGluY29uc2lzdGVudCBhbmQgdW5yZXBs YXlhYmxlLgorQ1JFQVRFIFNDSEVNQSBwZ3RibF9kZGxfcGFydF9zOworQ1JFQVRFIFNDSEVNQSBw Z3RibF9kZGxfcGFydF9vdGhlcjsKK0NSRUFURSBUQUJMRSBwZ3RibF9kZGxfcGFydF9zLnB0IChp ZCBpbnQsIHZhbCBpbnQpIFBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRBQkxFIHBn dGJsX2RkbF9wYXJ0X290aGVyLnB0X2MKKyAgICBQQVJUSVRJT04gT0YgcGd0YmxfZGRsX3BhcnRf cy5wdAorICAgIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwMCk7CitTRUxFQ1QgKiBGUk9NIHBn X2dldF90YWJsZV9kZGwoJ3BndGJsX2RkbF9wYXJ0X3MucHQnOjpyZWdjbGFzcywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBvd25lciA9PiBmYWxzZSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzY2hlbWFfcXVhbGlmaWVkID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcHQgKGlkIGludGVnZXIsIHZh bCBpbnRlZ2VyKSBQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKKyBDUkVBVEUgVEFCTEUgcGd0Ymxf ZGRsX3BhcnRfb3RoZXIucHRfYyBQQVJUSVRJT04gT0YgcGd0YmxfZGRsX3BhcnRfcy5wdCBGT1Ig VkFMVUVTIEZST00gKDApIFRPICgxMDApOworKDIgcm93cykKKworRFJPUCBTQ0hFTUEgcGd0Ymxf ZGRsX3BhcnRfcyBDQVNDQURFOworTk9USUNFOiAgZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBwZ3Ri bF9kZGxfcGFydF9zLnB0CitEUk9QIFNDSEVNQSBwZ3RibF9kZGxfcGFydF9vdGhlciBDQVNDQURF OworLS0gTG9jYWxseS1kZWNsYXJlZCBDSEVDSyBvbiBhIHBhcnRpdGlvbiBjaGlsZCBoYXMgbm8g aW5saW5lIGNvbHVtbgorLS0gbGlzdCB0byBsaXZlIGluIChQQVJUSVRJT04gT0YgZm9ybSksIHNv IGl0IG11c3QgY29tZSBvdXQgYXMgYQorLS0gc2VwYXJhdGUgQUxURVIgVEFCTEUgLi4uIEFERCBD T05TVFJBSU5UIHN0YXRlbWVudC4KK0NSRUFURSBUQUJMRSBwYXJ0ZWRfY2hrIChpZCBpbnQsIHZh bCBpbnQpIFBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRBQkxFIHBhcnRlZF9jaGtf Y2hpbGQgUEFSVElUSU9OIE9GIHBhcnRlZF9jaGsKKyAgICAoQ09OU1RSQUlOVCBjaGtfaW5saW5l IENIRUNLICh2YWwgPiAwKSkKKyAgICBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDApOworU0VM RUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfY2hrX2NoaWxkJzo6cmVnY2xhc3Ms IG93bmVyID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucGFy dGVkX2Noa19jaGlsZCBQQVJUSVRJT04gT0YgcGd0YmxfZGRsX3Rlc3QucGFydGVkX2NoayBGT1Ig VkFMVUVTIEZST00gKDApIFRPICgxMDApOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBh cnRlZF9jaGtfY2hpbGQgQUREIENPTlNUUkFJTlQgY2hrX2lubGluZSBDSEVDSyAoKHZhbCA+IDAp KTsKKygyIHJvd3MpCisKK0RST1AgVEFCTEUgcGFydGVkX2NoazsKKy0tIEluaGVyaXRhbmNlIGNo aWxkcmVuIG9mIGEgcGFyZW50IHdpdGggYSBnZW5lcmF0ZWQgY29sdW1uIHNob3VsZCBub3QKKy0t IGVtaXQgYW4gQUxURVIgQ09MVU1OIC4uLiBTRVQgREVGQVVMVCBmb3IgdGhlIGluaGVyaXRlZCBn ZW5lcmF0ZWQKKy0tIGNvbHVtbjogdGhlIEdFTkVSQVRFRCBleHByZXNzaW9uIGNhcnJpZXMgZG93 biB0aHJvdWdoIGluaGVyaXRhbmNlLAorLS0gYW5kIFNFVCBERUZBVUxUIHdvdWxkIGZhaWwgYXQg cmVwbGF5IGFnYWluc3QgYSBnZW5lcmF0ZWQgY29sdW1uLgorQ1JFQVRFIFRBQkxFIHBhcl9nZW4g KAorICAgIGlkIGludCwKKyAgICBnICBpbnQgR0VORVJBVEVEIEFMV0FZUyBBUyAoaWQgKiAyKSBT VE9SRUQKKyk7CitDUkVBVEUgVEFCTEUgY2hfZ2VuICgpIElOSEVSSVRTIChwYXJfZ2VuKTsKK1NF TEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY2hfZ2VuJzo6cmVnY2xhc3MsIG93bmVyID0+ IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBU QUJMRSBwZ3RibF9kZGxfdGVzdC5jaF9nZW4gKCkgSU5IRVJJVFMgKHBndGJsX2RkbF90ZXN0LnBh cl9nZW4pOworKDEgcm93KQorCitEUk9QIFRBQkxFIHBhcl9nZW4gQ0FTQ0FERTsKK05PVElDRTog IGRyb3AgY2FzY2FkZXMgdG8gdGFibGUgY2hfZ2VuCistLSBBIHVzZXItbmFtZWQgTk9UIE5VTEwg b24gYSBsb2NhbCBjb2x1bW4gaXMgZW1pdHRlZCBpbmxpbmUgYXMKKy0tICJDT05TVFJBSU5UIG5h bWUgTk9UIE5VTEwiIHNvIHRoZSBvcmlnaW5hbCBuYW1lIGlzIHByZXNlcnZlZC4gIEFuCistLSBh dXRvLW5hbWVkIE5PVCBOVUxMIG9uIGEgbG9jYWwgY29sdW1uIGlzIGVtaXR0ZWQgYXMgYSBwbGFp biBpbmxpbmUKKy0tICJOT1QgTlVMTCIgLSBQRyByZS1jcmVhdGVzIHRoZSBhdXRvLW5hbWVkIGNv bnN0cmFpbnQgd2hlbiBDUkVBVEUKKy0tIFRBQkxFIHJ1bnMsIHNvIHRoZSBjb25zdHJhaW50IGxv b3Agc2tpcHMgYm90aCBmb3JtcyB0byBhdm9pZCB0aGUKKy0tIHJlZHVuZGFudCAoYW5kIG9uIHRh YmxlLXJlbmFtZSBvciBzZXF1ZW5jZS1jb2xsaXNpb24sIGJyb2tlbikKKy0tIEFMVEVSIFRBQkxF IC4uLiBBREQgQ09OU1RSQUlOVCAuLi4gTk9UIE5VTEwgc3RhdGVtZW50LgorQ1JFQVRFIFRBQkxF IG5uX25hbWVkICgKKyAgICBhIGludCBDT05TVFJBSU5UIG15X25uIE5PVCBOVUxMLAorICAgIGIg aW50IE5PVCBOVUxMCispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdubl9uYW1l ZCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0Lm5uX25hbWVkIChhIGludGVnZXIgQ09OU1RS QUlOVCBteV9ubiBOT1QgTlVMTCwgYiBpbnRlZ2VyIE5PVCBOVUxMKTsKKygxIHJvdykKKworRFJP UCBUQUJMRSBubl9uYW1lZDsKKy0tIFJlbmFtaW5nIHRoZSB0YWJsZSBhZnRlciBhbiBJREVOVElU WSBOT1QgTlVMTCBjb2x1bW4gd2FzIGRlY2xhcmVkCistLSBsZWF2ZXMgdGhlIGF1dG8tbmFtZWQg Y29uc3RyYWludCBmcm96ZW4gYXQgdGhlIG9yaWdpbmFsIG5hbWUsIHdoaWNoCistLSBubyBsb25n ZXIgbWF0Y2hlcyB0aGUgcG9zdC1yZW5hbWUgIjx0YWJsZT5fPGNvbD5fbm90X251bGwiIHBhdHRl cm4uCistLSBUaGUgZW1pdHRlZCBEREwgbXVzdCBzdGlsbCByb3VuZC10cmlwOiB0aGUgY29uc3Ry YWludCBsb29wIG11c3Qgbm90CistLSBBTFRFUiBUQUJMRSAuLi4gQUREIENPTlNUUkFJTlQgYSBz ZWNvbmQgTk9UIE5VTEwsIHNpbmNlIENSRUFURSBUQUJMRQorLS0gd2l0aCB0aGUgaW5saW5lIElE RU5USVRZIGFscmVhZHkgY3JlYXRlcyBhbiBhdXRvLU5PVC1OVUxMIHVuZGVyIHRoZQorLS0gbmV3 IHRhYmxlIG5hbWUgYW5kIFBHIG9ubHkgcGVybWl0cyBvbmUgTk9UIE5VTEwgcGVyIGNvbHVtbi4K K0NSRUFURSBUQUJMRSBubl9yZW5hbWVkICgKKyAgICBhIGludCBHRU5FUkFURUQgQUxXQVlTIEFT IElERU5USVRZIE5PVCBOVUxMCispOworQUxURVIgVEFCTEUgbm5fcmVuYW1lZCBSRU5BTUUgVE8g bm5fcmVuYW1lZDI7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ25uX3JlbmFtZWQy Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dl dF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3Ri bF9kZGxfdGVzdC5ubl9yZW5hbWVkMiAoYSBpbnRlZ2VyIEdFTkVSQVRFRCBBTFdBWVMgQVMgSURF TlRJVFkgKFNFUVVFTkNFIE5BTUUgcGd0YmxfZGRsX3Rlc3Qubm5fcmVuYW1lZF9hX3NlcSkgQ09O U1RSQUlOVCBubl9yZW5hbWVkX2Ffbm90X251bGwgTk9UIE5VTEwpOworKDEgcm93KQorCitEUk9Q IFRBQkxFIG5uX3JlbmFtZWQyOworLS0gTG9jYWxseS1kZWNsYXJlZCBOT1QgTlVMTCBvbiBhbiBp bmhlcml0ZWQgY29sdW1uLiAgVGhlIGNvbHVtbiBpdHNlbGYKKy0tIGlzIG9taXR0ZWQgZnJvbSB0 aGUgY2hpbGQncyBvd24gY29sdW1uIGxpc3QgKGF0dGlzbG9jYWw9ZmFsc2UpLCBzbyB0aGUKKy0t IHVzZXItbmFtZWQgTk9UIE5VTEwgaXMgZW1pdHRlZCBhcyBhIHRhYmxlLWxldmVsIENPTlNUUkFJ TlQgY2xhdXNlIGluCistLSB0aGUgQ1JFQVRFIFRBQkxFIGJvZHkuICBUaGlzIHByZXNlcnZlcyB0 aGUgbmFtZSBhbmQgcHJldmVudHMgYSBjb2xsaXNpb24KKy0tIHdoZW4gdGhlIHBhcmVudCBsYXRl ciBwcm9wYWdhdGVzIGl0cyBvd24gTk9UIE5VTEwgdG8gdGhlIGNoaWxkLgorQ1JFQVRFIFRBQkxF IG5uX3BhciAoYSBpbnQpOworQ1JFQVRFIFRBQkxFIG5uX2NoIChiIGludCkgSU5IRVJJVFMgKG5u X3Bhcik7CitBTFRFUiBUQUJMRSBubl9jaCBBREQgQ09OU1RSQUlOVCBteV9ubiBOT1QgTlVMTCBh OworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdubl9jaCc6OnJlZ2NsYXNzLCBvd25l ciA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3Qubm5fY2ggKGIgaW50ZWdlciwg Q09OU1RSQUlOVCBteV9ubiBOT1QgTlVMTCBhKSBJTkhFUklUUyAocGd0YmxfZGRsX3Rlc3Qubm5f cGFyKTsKKygxIHJvdykKKworRFJPUCBUQUJMRSBubl9wYXIgQ0FTQ0FERTsKK05PVElDRTogIGRy b3AgY2FzY2FkZXMgdG8gdGFibGUgbm5fY2gKKy0tIFBhcnRpdGlvbiBjaGlsZCB3aGVyZSB0aGUg cGFyZW50J3MgZGVmYXVsdCB3YXMgZXhwbGljaXRseSBkcm9wcGVkLgorLS0gQWZ0ZXIgUEFSVElU SU9OIE9GIHRoZSBwYXJlbnQgZGVmYXVsdCBpcyByZS1hcHBsaWVkOyBEUk9QIERFRkFVTFQKKy0t IG11c3QgYmUgZW1pdHRlZCB0byByZXN0b3JlIHRoZSBkcm9wcGVkIHN0YXRlLgorQ1JFQVRFIFRB QkxFIGRyb3BfZGVmX3BhciAoYSBpbnQgREVGQVVMVCA5OSkgUEFSVElUSU9OIEJZIExJU1QgKGEp OworQ1JFQVRFIFRBQkxFIGRyb3BfZGVmX2NoaWxkIFBBUlRJVElPTiBPRiBkcm9wX2RlZl9wYXIg Rk9SIFZBTFVFUyBJTiAoMSk7CitBTFRFUiBUQUJMRSBPTkxZIGRyb3BfZGVmX2NoaWxkIEFMVEVS IENPTFVNTiBhIERST1AgREVGQVVMVDsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgn ZHJvcF9kZWZfY2hpbGQnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0 LmRyb3BfZGVmX2NoaWxkIFBBUlRJVElPTiBPRiBwZ3RibF9kZGxfdGVzdC5kcm9wX2RlZl9wYXIg Rk9SIFZBTFVFUyBJTiAoMSk7CisgQUxURVIgVEFCTEUgT05MWSBwZ3RibF9kZGxfdGVzdC5kcm9w X2RlZl9jaGlsZCBBTFRFUiBDT0xVTU4gYSBEUk9QIERFRkFVTFQ7CisoMiByb3dzKQorCitEUk9Q IFRBQkxFIGRyb3BfZGVmX3BhcjsKKy0tIE5hbWVkIE5PVCBOVUxMIG9uIGEgcGFydGl0aW9uIGNo aWxkIHRoYXQgd2FzIGF0dGFjaGVkIGZyb20gYSBwcmUtZXhpc3RpbmcKKy0tIHRhYmxlLiAgVGhl IG5hbWUgbXVzdCBiZSBwcmVzZXJ2ZWQgdmlhIHRoZSBQQVJUSVRJT04gT0YgY29sdW1uIHNwZWMg bGlzdAorLS0gc28gdGhlIGNoaWxkIGtlZXBzIGl0cyBsb2NhbCBuYW1lIHJhdGhlciB0aGFuIGlu aGVyaXRpbmcgdGhlIHBhcmVudCdzCistLSBhdXRvLWdlbmVyYXRlZCBuYW1lLgorQ1JFQVRFIFRB QkxFIG5uX3BhcnRfcGFyIChhIGludCBOT1QgTlVMTCkgUEFSVElUSU9OIEJZIExJU1QgKGEpOwor Q1JFQVRFIFRBQkxFIG5uX3BhcnRfY2ggKGEgaW50IENPTlNUUkFJTlQgbm5fcGFydF9jaF9ubiBO T1QgTlVMTCk7CitBTFRFUiBUQUJMRSBubl9wYXJ0X3BhciBBVFRBQ0ggUEFSVElUSU9OIG5uX3Bh cnRfY2ggRk9SIFZBTFVFUyBJTiAoMSk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwo J25uX3BhcnRfY2gnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxl X2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2Rk bF90ZXN0Lm5uX3BhcnRfY2ggUEFSVElUSU9OIE9GIHBndGJsX2RkbF90ZXN0Lm5uX3BhcnRfcGFy IChDT05TVFJBSU5UIG5uX3BhcnRfY2hfbm4gTk9UIE5VTEwgYSkgRk9SIFZBTFVFUyBJTiAoMSk7 CisoMSByb3cpCisKK0RST1AgVEFCTEUgbm5fcGFydF9wYXI7CistLSBOYW1lZCBOT1QgTlVMTCBp biBhbiBJTkhFUklUUyBjaGlsZCB3aGVyZSB0aGUgcGFyZW50IGFsc28gZ2V0cyBhIE5PVCBOVUxM CistLSBsYXRlcjogdGhlIGNoaWxkIG5hbWUgbXVzdCBzdXJ2aXZlIHZpYSB0aGUgaW5saW5lIENP TlNUUkFJTlQgY2xhdXNlIHNvIGl0CistLSBkb2VzIG5vdCBjb2xsaWRlIHdpdGggdGhlIHByb3Bh Z2F0ZWQgcGFyZW50IE5PVCBOVUxMLgorQ1JFQVRFIFRBQkxFIG5uX2luaF9wYXIgKGEgaW50KTsK K0NSRUFURSBUQUJMRSBubl9pbmhfY2ggKGIgaW50KSBJTkhFUklUUyAobm5faW5oX3Bhcik7CitB TFRFUiBUQUJMRSBubl9pbmhfY2ggQUREIENPTlNUUkFJTlQgbm5faW5oX2NoX25uIE5PVCBOVUxM IGE7CitBTFRFUiBUQUJMRSBubl9pbmhfcGFyIEFERCBDT05TVFJBSU5UIG5uX2luaF9wYXJfbm4g Tk9UIE5VTEwgYTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnbm5faW5oX2NoJzo6 cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENS RUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5ubl9pbmhfY2ggKGIgaW50ZWdlciwgQ09OU1RSQUlO VCBubl9pbmhfY2hfbm4gTk9UIE5VTEwgYSkgSU5IRVJJVFMgKHBndGJsX2RkbF90ZXN0Lm5uX2lu aF9wYXIpOworKDEgcm93KQorCitEUk9QIFRBQkxFIG5uX2luaF9wYXIgQ0FTQ0FERTsKK05PVElD RTogIGRyb3AgY2FzY2FkZXMgdG8gdGFibGUgbm5faW5oX2NoCistLSBJbnZhbGlkIGluZGV4IChs ZWZ0IGJ5IGEgZmFpbGVkIENSRUFURSBJTkRFWCBDT05DVVJSRU5UTFkpIG11c3QgYmUgc2tpcHBl ZC4KK0NSRUFURSBUQUJMRSBpbnZfaWR4ICh4IGludCk7CitJTlNFUlQgSU5UTyBpbnZfaWR4IFZB TFVFUyAoMSksICgxKTsKK0NSRUFURSBVTklRVUUgSU5ERVggQ09OQ1VSUkVOVExZIGludl9pZHhf dWlkeCBPTiBpbnZfaWR4ICh4KTsKK0VSUk9SOiAgY291bGQgbm90IGNyZWF0ZSB1bmlxdWUgaW5k ZXggImludl9pZHhfdWlkeCIKK0RFVEFJTDogIEtleSAoeCk9KDEpIGlzIGR1cGxpY2F0ZWQuCitT RUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2ludl9pZHgnOjpyZWdjbGFzcywgb3duZXIg PT4gZmFsc2UpOworICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0Lmludl9pZHggKHggaW50ZWdlcik7CisoMSBy b3cpCisKK0RST1AgVEFCTEUgaW52X2lkeDsKKy0tIENMVVNURVIgT046IGVtaXR0ZWQgYWZ0ZXIg dGhlIGluZGV4IGlzIGNyZWF0ZWQuCitDUkVBVEUgVEFCTEUgY2x1c3Rlcl90YmwgKGlkIGludCwg dmFsIHRleHQpOworQ1JFQVRFIElOREVYIGNsdXN0ZXJfdGJsX2lkIE9OIGNsdXN0ZXJfdGJsIChp ZCk7CitDTFVTVEVSIGNsdXN0ZXJfdGJsIFVTSU5HIGNsdXN0ZXJfdGJsX2lkOworU0VMRUNUICog RlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjbHVzdGVyX3RibCc6OnJlZ2NsYXNzLCBvd25lciA9PiBm YWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVB VEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuY2x1c3Rlcl90YmwgKGlkIGludGVnZXIsIHZhbCB0ZXh0 KTsKKyBDUkVBVEUgSU5ERVggY2x1c3Rlcl90YmxfaWQgT04gcGd0YmxfZGRsX3Rlc3QuY2x1c3Rl cl90YmwgVVNJTkcgYnRyZWUgKGlkKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5jbHVz dGVyX3RibCBDTFVTVEVSIE9OIGNsdXN0ZXJfdGJsX2lkOworKDMgcm93cykKKworRFJPUCBUQUJM RSBjbHVzdGVyX3RibDsKKy0tIERpc2FibGVkIHJ1bGU6IERJU0FCTEUgUlVMRSBtdXN0IGJlIGVt aXR0ZWQgYWZ0ZXIgQ1JFQVRFIFJVTEUuCitDUkVBVEUgVEFCTEUgZGlzYWJsZWRfcnVsZV90Ymwg KGlkIGludCk7CitDUkVBVEUgUlVMRSBkcl9ydWxlIEFTIE9OIElOU0VSVCBUTyBkaXNhYmxlZF9y dWxlX3RibCBETyBOT1RISU5HOworQUxURVIgVEFCTEUgZGlzYWJsZWRfcnVsZV90YmwgRElTQUJM RSBSVUxFIGRyX3J1bGU7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Rpc2FibGVk X3J1bGVfdGJsJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5kaXNhYmxlZF9ydWxlX3RibCAo aWQgaW50ZWdlcik7CisgQ1JFQVRFIFJVTEUgZHJfcnVsZSBBUyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKworICAgICBPTiBJTlNFUlQgVE8gcGd0YmxfZGRsX3Rl c3QuZGlzYWJsZWRfcnVsZV90YmwgRE8gTk9USElORzsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxf dGVzdC5kaXNhYmxlZF9ydWxlX3RibCBESVNBQkxFIFJVTEUgZHJfcnVsZTsKKygzIHJvd3MpCisK K0RST1AgVEFCTEUgZGlzYWJsZWRfcnVsZV90Ymw7CistLSBJbmRleCBzdGF0aXN0aWNzIHRhcmdl dCBvbiBhbiBleHByZXNzaW9uIGluZGV4IGNvbHVtbi4KK0NSRUFURSBUQUJMRSBpZHhfc3RhdF90 YmwgKGMxIGludCk7CitDUkVBVEUgSU5ERVggaWR4X3N0YXRfaWR4IE9OIGlkeF9zdGF0X3RibCAo KGMxICsgMSkpOworQUxURVIgSU5ERVggaWR4X3N0YXRfaWR4IEFMVEVSIENPTFVNTiAxIFNFVCBT VEFUSVNUSUNTIDQwMDsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnaWR4X3N0YXRf dGJsJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2Rk bF90ZXN0LmlkeF9zdGF0X3RibCAoYzEgaW50ZWdlcik7CisgQ1JFQVRFIElOREVYIGlkeF9zdGF0 X2lkeCBPTiBwZ3RibF9kZGxfdGVzdC5pZHhfc3RhdF90YmwgVVNJTkcgYnRyZWUgKCgoYzEgKyAx KSkpOworIEFMVEVSIElOREVYIHBndGJsX2RkbF90ZXN0LmlkeF9zdGF0X2lkeCBBTFRFUiBDT0xV TU4gMSBTRVQgU1RBVElTVElDUyA0MDA7CisoMyByb3dzKQorCitEUk9QIFRBQkxFIGlkeF9zdGF0 X3RibDsKKy0tIHNjaGVtYV9xdWFsaWZpZWQ9ZmFsc2UgbXVzdCBkcm9wIHRoZSBzY2hlbWEgcHJl Zml4IGZyb20gREVGQVVMVAorLS0gZXhwcmVzc2lvbnMgYW5kIGlubGluZSBDSEVDSyBib2RpZXMg dGhhdCByZWZlcmVuY2Ugc2FtZS1zY2hlbWEKKy0tIG9iamVjdHMgKHNlcXVlbmNlIHZpYSBuZXh0 dmFsLCBmdW5jdGlvbiB2aWEgZGlyZWN0IGNhbGwpLiAgVGhpcworLS0gcmVsaWVzIG9uIHRoZSBk ZXBhcnNlciByZXNwZWN0aW5nIHRoZSBuYXJyb3dlZCBzZWFyY2hfcGF0aCByYXRoZXIKKy0tIHRo YW4gb24gc3Vic3RyaW5nIHN0cmlwcGluZy4KK0NSRUFURSBTQ0hFTUEgcGd0YmxfZGRsX3hyZWY7 CitDUkVBVEUgU0VRVUVOQ0UgcGd0YmxfZGRsX3hyZWYubXlzZXE7CitDUkVBVEUgRlVOQ1RJT04g cGd0YmxfZGRsX3hyZWYuZihpbnQpIFJFVFVSTlMgaW50IExBTkdVQUdFIHNxbCBJTU1VVEFCTEUK KyAgICBBUyAnU0VMRUNUICQxJzsKK0NSRUFURSBUQUJMRSBwZ3RibF9kZGxfeHJlZi50ICgKKyAg ICBpZCAgaW50IERFRkFVTFQgbmV4dHZhbCgncGd0YmxfZGRsX3hyZWYubXlzZXEnKSwKKyAgICB2 YWwgaW50LAorICAgIENPTlNUUkFJTlQgY2hrIENIRUNLIChwZ3RibF9kZGxfeHJlZi5mKHZhbCkg PiAwKQorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGd0YmxfZGRsX3hyZWYu dCc6OnJlZ2NsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyID0+IGZh bHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYV9xdWFsaWZpZWQgPT4g ZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSB0IChpZCBpbnRlZ2VyIERFRkFVTFQgbmV4dHZh bCgnbXlzZXEnOjpyZWdjbGFzcyksIHZhbCBpbnRlZ2VyLCBDT05TVFJBSU5UIGNoayBDSEVDSyAo KGYodmFsKSA+IDApKSk7CisoMSByb3cpCisKK0RST1AgU0NIRU1BIHBndGJsX2RkbF94cmVmIENB U0NBREU7CitOT1RJQ0U6ICBkcm9wIGNhc2NhZGVzIHRvIDMgb3RoZXIgb2JqZWN0cworREVUQUlM OiAgZHJvcCBjYXNjYWRlcyB0byBzZXF1ZW5jZSBwZ3RibF9kZGxfeHJlZi5teXNlcQorZHJvcCBj YXNjYWRlcyB0byBmdW5jdGlvbiBwZ3RibF9kZGxfeHJlZi5mKGludGVnZXIpCitkcm9wIGNhc2Nh ZGVzIHRvIHRhYmxlIHBndGJsX2RkbF94cmVmLnQKKy0tIHNjaGVtYV9xdWFsaWZpZWQ9ZmFsc2Ug bXVzdCBOT1QgY29ycnVwdCBzdHJpbmcgbGl0ZXJhbHMgd2hvc2UKKy0tIGNvbnRlbnRzIGhhcHBl biB0byBjb250YWluIHRoZSBzY2hlbWEgbmFtZSBmb2xsb3dlZCBieSBhIGRvdC4gIFN0cmluZwor LS0gbGl0ZXJhbCB0ZXh0IGlzIG91dHB1dCB2ZXJiYXRpbSBieSB0aGUgZGVwYXJzZXIgYW5kIGlz IHVuYWZmZWN0ZWQgYnkKKy0tIHNlYXJjaF9wYXRoIG5hcnJvd2luZy4KK0NSRUFURSBTQ0hFTUEg cGd0YmxfZGRsX3N0cjsKK0NSRUFURSBUQUJMRSBwZ3RibF9kZGxfc3RyLnAgKGlkIGludCwgbm90 ZSB0ZXh0KSBQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFURSBUQUJMRSBwZ3RibF9kZGxf c3RyLnBjIFBBUlRJVElPTiBPRiBwZ3RibF9kZGxfc3RyLnAKKyAgICAoQ09OU1RSQUlOVCBjaGsg Q0hFQ0sgKG5vdGUgPD4gJ3BndGJsX2RkbF9zdHIuc2VjcmV0JykpCisgICAgRk9SIFZBTFVFUyBG Uk9NICgwKSBUTyAoMTAwKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGd0Ymxf ZGRsX3N0ci5wYyc6OnJlZ2NsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93 bmVyID0+IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYV9xdWFs aWZpZWQgPT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0 X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBjIFBBUlRJVElPTiBPRiBwIEZPUiBWQUxV RVMgRlJPTSAoMCkgVE8gKDEwMCk7CisgQUxURVIgVEFCTEUgcGMgQUREIENPTlNUUkFJTlQgY2hr IENIRUNLICgobm90ZSA8PiAncGd0YmxfZGRsX3N0ci5zZWNyZXQnOjp0ZXh0KSk7CisoMiByb3dz KQorCitEUk9QIFNDSEVNQSBwZ3RibF9kZGxfc3RyIENBU0NBREU7CitOT1RJQ0U6ICBkcm9wIGNh c2NhZGVzIHRvIHRhYmxlIHBndGJsX2RkbF9zdHIucAorLS0gc2NoZW1hX3F1YWxpZmllZD1mYWxz ZSBtdXN0IE5PVCBjb3JydXB0IGRvdWJsZS1xdW90ZWQgaWRlbnRpZmllcnMKKy0tIHdob3NlIGNv bnRlbnRzIGhhcHBlbiB0byBjb250YWluIHRoZSBzY2hlbWEgbmFtZSBmb2xsb3dlZCBieSBhIGRv dAorLS0gKGZvciBleGFtcGxlIGEgY29sdW1uIGxpdGVyYWxseSBuYW1lZCAiPHNjaGVtYT4ud2Vp cmQiIGluc2lkZSB0aGF0CistLSBzY2hlbWEpLiAgVGhlIG1lY2hhbmlzbSBpcyBwdXJlbHkgc2Vh cmNoX3BhdGggbmFycm93aW5nOiB0aGUgZGVwYXJzZXIKKy0tIG91dHB1dHMgYXR0cmlidXRlIG5h bWVzIHZlcmJhdGltIGZyb20gcGdfYXR0cmlidXRlLCBzbyB0aGUgcXVvdGVkCistLSBpZGVudGlm aWVyIGNvbnRlbnQgaXMgbmV2ZXIgZXhhbWluZWQgZm9yIHNjaGVtYSBwcmVmaXhlcy4gIFRoaXMg aG9sZHMKKy0tIGV2ZW4gd2hlbiB0aGUgc2NoZW1hIG5hbWUgaXMgYSBzaW5nbGUgbGV0dGVyLgor Q1JFQVRFIFNDSEVNQSBwZ3RibF9kZGxfcWlkOworQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF9xaWQu cCAoaWQgaW50LCAicGd0YmxfZGRsX3FpZC53ZWlyZCIgaW50KQorICAgIFBBUlRJVElPTiBCWSBS QU5HRSAoaWQpOworQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF9xaWQucGMgUEFSVElUSU9OIE9GIHBn dGJsX2RkbF9xaWQucAorICAgIChDT05TVFJBSU5UIGNoayBDSEVDSyAoInBndGJsX2RkbF9xaWQu d2VpcmQiID4gMCkpCisgICAgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTAwKTsKK1NFTEVDVCAq IEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGd0YmxfZGRsX3FpZC5wYyc6OnJlZ2NsYXNzLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyID0+IGZhbHNlLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNjaGVtYV9xdWFsaWZpZWQgPT4gZmFsc2UpOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGMgUEFSVElUSU9OIE9GIHAg Rk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTAwKTsKKyBBTFRFUiBUQUJMRSBwYyBBREQgQ09OU1RS QUlOVCBjaGsgQ0hFQ0sgKCgicGd0YmxfZGRsX3FpZC53ZWlyZCIgPiAwKSk7CisoMiByb3dzKQor CitEUk9QIFNDSEVNQSBwZ3RibF9kZGxfcWlkIENBU0NBREU7CitOT1RJQ0U6ICBkcm9wIGNhc2Nh ZGVzIHRvIHRhYmxlIHBndGJsX2RkbF9xaWQucAorLS0gU2FtZSB3aXRoIGEgc2hvcnQgKHNpbmds ZS1sZXR0ZXIpIHNjaGVtYSBuYW1lIHRvIGNvbmZpcm0gdGhlcmUgaXMgbm8KKy0tIG1pbmltdW0t bGVuZ3RoIGFzc3VtcHRpb24gaW4gdGhlIHN0cmlwcGluZyBwYXRoLgorQ1JFQVRFIFNDSEVNQSBw Z3RibF9kZGxfcTE7CitDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3ExLnAgKGlkIGludCwgInBndGJs X2RkbF9xMS53ZWlyZCIgaW50KQorICAgIFBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRF IFRBQkxFIHBndGJsX2RkbF9xMS5wYyBQQVJUSVRJT04gT0YgcGd0YmxfZGRsX3ExLnAKKyAgICAo Q09OU1RSQUlOVCBjaGsgQ0hFQ0sgKCJwZ3RibF9kZGxfcTEud2VpcmQiID4gMCkpCisgICAgRk9S IFZBTFVFUyBGUk9NICgwKSBUTyAoMTAwKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2Rk bCgncGd0YmxfZGRsX3ExLnBjJzo6cmVnY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgb3duZXIgPT4gZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2No ZW1hX3F1YWxpZmllZCA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19n ZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBDUkVBVEUgVEFCTEUgcGMgUEFSVElUSU9OIE9GIHAgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAo MTAwKTsKKyBBTFRFUiBUQUJMRSBwYyBBREQgQ09OU1RSQUlOVCBjaGsgQ0hFQ0sgKCgicGd0Ymxf ZGRsX3ExLndlaXJkIiA+IDApKTsKKygyIHJvd3MpCisKK0RST1AgU0NIRU1BIHBndGJsX2RkbF9x MSBDQVNDQURFOworTk9USUNFOiAgZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBwZ3RibF9kZGxfcTEu cAorLS0gc2NoZW1hX3F1YWxpZmllZD1mYWxzZSB3aGVuIHRoZSBiYXNlIHNjaGVtYSBuYW1lIGl0 c2VsZiByZXF1aXJlcworLS0gcXVvdGluZyAoaXRzIHByZWZpeCBzdGFydHMgd2l0aCAiKS4gIEJv dGggZm9ybXMgb2YgdGhlIHByZWZpeCAtCistLSBiYXJlLWxvd2VyY2FzZSBhbmQgcXVvdGVkIC0g bXVzdCBiZSBzdHJpcHBlZCBmcm9tIG91dGVyCistLSBBTFRFUiBUQUJMRSAvIE9OIC8gQ1JFQVRF IElOREVYIHByZWZpeGVzLCB3aGlsZSBpbm5lciBxdW90ZWQKKy0tIGlkZW50aWZpZXJzIHRoYXQg aGFwcGVuIHRvIGJlZ2luIHRoZSBzYW1lIHdheSBtdXN0IGJlIHByZXNlcnZlZC4KK0NSRUFURSBT Q0hFTUEgIlBnVGJsLURkbC1RIjsKK0NSRUFURSBUQUJMRSAiUGdUYmwtRGRsLVEiLiJUIiAoaWQg aW50LCB2YWwgaW50LAorICAgIENPTlNUUkFJTlQgY2hrIENIRUNLICh2YWwgPiAwKSk7CitDUkVB VEUgSU5ERVggIlRfdmFsX2lkeCIgT04gIlBnVGJsLURkbC1RIi4iVCIgKHZhbCk7CitTRUxFQ1Qg KiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJyJQZ1RibC1EZGwtUSIuIlQiJzo6cmVnY2xhc3MsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duZXIgPT4gZmFsc2UsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2NoZW1hX3F1YWxpZmllZCA9PiBmYWxzZSk7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFICJU IiAoaWQgaW50ZWdlciwgdmFsIGludGVnZXIsIENPTlNUUkFJTlQgY2hrIENIRUNLICgodmFsID4g MCkpKTsKKyBDUkVBVEUgSU5ERVggIlRfdmFsX2lkeCIgT04gIlQiIFVTSU5HIGJ0cmVlICh2YWwp OworKDIgcm93cykKKworRFJPUCBTQ0hFTUEgIlBnVGJsLURkbC1RIiBDQVNDQURFOworTk9USUNF OiAgZHJvcCBjYXNjYWRlcyB0byB0YWJsZSAiUGdUYmwtRGRsLVEiLiJUIgorLS0gRXJyb3I6IG5v dCBhbiBvcmRpbmFyeSBvciBwYXJ0aXRpb25lZCB0YWJsZS4KK0NSRUFURSBWSUVXIHYgQVMgU0VM RUNUIDEgQVMgeDsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgndic6OnJlZ2NsYXNz KTsKK0VSUk9SOiAgInYiIGlzIG5vdCBhbiBvcmRpbmFyeSBvciBwYXJ0aXRpb25lZCB0YWJsZQor Q1JFQVRFIFNFUVVFTkNFIHM7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3MnOjpy ZWdjbGFzcyk7CitFUlJPUjogICJzIiBpcyBub3QgYW4gb3JkaW5hcnkgb3IgcGFydGl0aW9uZWQg dGFibGUKKy0tIE5VTEwgYXJndW1lbnQgcmV0dXJucyBubyByb3dzLgorU0VMRUNUICogRlJPTSBw Z19nZXRfdGFibGVfZGRsKE5VTEwpOworIHBnX2dldF90YWJsZV9kZGwgCistLS0tLS0tLS0tLS0t LS0tLS0KKygwIHJvd3MpCisKKy0tIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggdmFsaWRh dGlvbjogaWYgdGhlIHJlZmVyZW5jZWQgaW5kZXgKKy0tIHdvdWxkIG5vdCBiZSBlbWl0dGVkIChi ZWNhdXNlIGl0cyBzb3VyY2Uga2luZCBpcyBzdXBwcmVzc2VkKSBidXQKKy0tIHJlcGxpY2FfaWRl bnRpdHkgaXRzZWxmIHdvdWxkIGJlLCB0aGUgZnVuY3Rpb24gcmFpc2VzIGFuIGVycm9yIHNvCist LSB0aGUgZW1pdHRlZCBEREwgbmV2ZXIgZGFuZ2xlcy4gIEV4ZXJjaXNlIGFsbCB0aHJlZSBjb25z dHJhaW50LWJhY2tlZAorLS0gZm9ybXMgKFBLLCBVTklRVUUsIEVYQ0xVU0lPTikgYW5kIGEgYmFy ZSBDUkVBVEUgVU5JUVVFIElOREVYLCBpbgorLS0gYm90aCB0aGUgZXhjZXB0LWxpc3QgYW5kIG9u bHktbGlzdCBzaGFwZXMuCistLQorLS0gUEstYmFja2VkOiBleGNlcHRfa2luZHM9cHJpbWFyeV9r ZXkgd2l0aG91dCBleGNlcHRfa2luZHM9cmVwbGljYV9pZGVudGl0eS4KK0NSRUFURSBUQUJMRSBy aV9wa19leGNsIChhIGludCBQUklNQVJZIEtFWSk7CitBTFRFUiBUQUJMRSByaV9wa19leGNsIFJF UExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggcmlfcGtfZXhjbF9wa2V5OworU0VMRUNUICogRlJP TSBwZ19nZXRfdGFibGVfZGRsKCdyaV9wa19leGNsJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNl LCBleGNlcHRfa2luZHMgPT4gQVJSQVlbJ3ByaW1hcnlfa2V5J10pOworRVJST1I6ICBSRVBMSUNB IElERU5USVRZIGZvciB0YWJsZSAicmlfcGtfZXhjbCIgcmVxdWlyZXMga2luZCAicHJpbWFyeV9r ZXkiIHRvIGJlIGVtaXR0ZWQKK0RFVEFJTDogIFRoZSB0YWJsZSdzIFJFUExJQ0EgSURFTlRJVFkg VVNJTkcgSU5ERVggcmVmZXJlbmNlcyBhbiBpbmRleCBwcm9kdWNlZCBieSB0aGUgInByaW1hcnlf a2V5IiBraW5kLCB3aGljaCBpcyBub3QgaW4gdGhlIGFjdGl2ZSBmaWx0ZXIuCitISU5UOiAgRWl0 aGVyIGFkZCAicHJpbWFyeV9rZXkiIHRvIHRoZSBmaWx0ZXIgb3IgcmVtb3ZlICJyZXBsaWNhX2lk ZW50aXR5IiBmcm9tIGl0LgorLS0gU2FtZSBjYWxsIGJ1dCBhbHNvIGV4Y2x1ZGluZyByZXBsaWNh X2lkZW50aXR5IHN1Y2NlZWRzLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdyaV9w a19leGNsJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlb J3ByaW1hcnlfa2V5JywncmVwbGljYV9pZGVudGl0eSddKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFU RSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5yaV9wa19leGNsIChhIGludGVnZXIgTk9UIE5VTEwpOwor KDEgcm93KQorCitEUk9QIFRBQkxFIHJpX3BrX2V4Y2w7CistLSBVTklRVUUtY29uc3RyYWludC1i YWNrZWQgcmVwbGljYSBpZGVudGl0eSBpbmRleC4KK0NSRUFURSBUQUJMRSByaV91bmlxX2V4Y2wg KGEgaW50IE5PVCBOVUxMIFVOSVFVRSwgYiBpbnQpOworQUxURVIgVEFCTEUgcmlfdW5pcV9leGNs IFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggcmlfdW5pcV9leGNsX2Ffa2V5OworU0VMRUNU ICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdyaV91bmlxX2V4Y2wnOjpyZWdjbGFzcywgb3duZXIg PT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsndW5pcXVlJ10pOworRVJST1I6ICBSRVBM SUNBIElERU5USVRZIGZvciB0YWJsZSAicmlfdW5pcV9leGNsIiByZXF1aXJlcyBraW5kICJ1bmlx dWUiIHRvIGJlIGVtaXR0ZWQKK0RFVEFJTDogIFRoZSB0YWJsZSdzIFJFUExJQ0EgSURFTlRJVFkg VVNJTkcgSU5ERVggcmVmZXJlbmNlcyBhbiBpbmRleCBwcm9kdWNlZCBieSB0aGUgInVuaXF1ZSIg a2luZCwgd2hpY2ggaXMgbm90IGluIHRoZSBhY3RpdmUgZmlsdGVyLgorSElOVDogIEVpdGhlciBh ZGQgInVuaXF1ZSIgdG8gdGhlIGZpbHRlciBvciByZW1vdmUgInJlcGxpY2FfaWRlbnRpdHkiIGZy b20gaXQuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3JpX3VuaXFfZXhjbCc6OnJl Z2NsYXNzLCBvd25lciA9PiBmYWxzZSwgZXhjZXB0X2tpbmRzID0+IEFSUkFZWyd1bmlxdWUnLCdy ZXBsaWNhX2lkZW50aXR5J10pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRf dGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucmlfdW5pcV9leGNsIChhIGludGVnZXIg Tk9UIE5VTEwsIGIgaW50ZWdlcik7CisoMSByb3cpCisKK0RST1AgVEFCTEUgcmlfdW5pcV9leGNs OworLS0gQmFyZSBDUkVBVEUgVU5JUVVFIElOREVYIChubyBiYWNraW5nIGNvbnN0cmFpbnQpIHVz ZWQgYXMgUkVQTElDQQorLS0gSURFTlRJVFk6IHRoZSBpbmRleCBpcyBlbWl0dGVkIGJ5IHRoZSAi aW5kZXgiIGtpbmQsIHNvIGV4Y2x1ZGluZworLS0gImluZGV4IiB3aXRob3V0IGFsc28gZXhjbHVk aW5nICJyZXBsaWNhX2lkZW50aXR5IiBtdXN0IGVycm9yLgorQ1JFQVRFIFRBQkxFIHJpX2lkeF9l eGNsIChhIGludCBOT1QgTlVMTCwgYiBpbnQpOworQ1JFQVRFIFVOSVFVRSBJTkRFWCByaV9pZHhf ZXhjbF9hX3VuaXEgT04gcmlfaWR4X2V4Y2wgKGEpOworQUxURVIgVEFCTEUgcmlfaWR4X2V4Y2wg UkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCByaV9pZHhfZXhjbF9hX3VuaXE7CitTRUxFQ1Qg KiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3JpX2lkeF9leGNsJzo6cmVnY2xhc3MsIG93bmVyID0+ IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlbJ2luZGV4J10pOworRVJST1I6ICBSRVBMSUNB IElERU5USVRZIGZvciB0YWJsZSAicmlfaWR4X2V4Y2wiIHJlcXVpcmVzIGtpbmQgImluZGV4IiB0 byBiZSBlbWl0dGVkCitERVRBSUw6ICBUaGUgdGFibGUncyBSRVBMSUNBIElERU5USVRZIFVTSU5H IElOREVYIHJlZmVyZW5jZXMgYW4gaW5kZXggcHJvZHVjZWQgYnkgdGhlICJpbmRleCIga2luZCwg d2hpY2ggaXMgbm90IGluIHRoZSBhY3RpdmUgZmlsdGVyLgorSElOVDogIEVpdGhlciBhZGQgImlu ZGV4IiB0byB0aGUgZmlsdGVyIG9yIHJlbW92ZSAicmVwbGljYV9pZGVudGl0eSIgZnJvbSBpdC4K K1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmlfaWR4X2V4Y2wnOjpyZWdjbGFzcywg b3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsnaW5kZXgnLCdyZXBsaWNhX2lk ZW50aXR5J10pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRF IFRBQkxFIHBndGJsX2RkbF90ZXN0LnJpX2lkeF9leGNsIChhIGludGVnZXIgTk9UIE5VTEwsIGIg aW50ZWdlcik7CisoMSByb3cpCisKK0RST1AgVEFCTEUgcmlfaWR4X2V4Y2w7CistLSBJbmNsdWRl LXNpZGUgYW5hbG9nOiBvbmx5X2tpbmRzPXJlcGxpY2FfaWRlbnRpdHkgbXVzdCBpbmNsdWRlIHRo ZSBraW5kCistLSB0aGF0IGVtaXRzIHRoZSBpbmRleCwgb3IgdGhlIGZ1bmN0aW9uIGVycm9ycy4K K0NSRUFURSBUQUJMRSByaV9vbmx5IChhIGludCBOT1QgTlVMTCBVTklRVUUsIGIgaW50KTsKK0FM VEVSIFRBQkxFIHJpX29ubHkgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCByaV9vbmx5X2Ff a2V5OworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdyaV9vbmx5Jzo6cmVnY2xhc3Ms IG93bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFSUkFZWydyZXBsaWNhX2lkZW50aXR5J10p OworRVJST1I6ICBSRVBMSUNBIElERU5USVRZIGZvciB0YWJsZSAicmlfb25seSIgcmVxdWlyZXMg a2luZCAidW5pcXVlIiB0byBiZSBlbWl0dGVkCitERVRBSUw6ICBUaGUgdGFibGUncyBSRVBMSUNB IElERU5USVRZIFVTSU5HIElOREVYIHJlZmVyZW5jZXMgYW4gaW5kZXggcHJvZHVjZWQgYnkgdGhl ICJ1bmlxdWUiIGtpbmQsIHdoaWNoIGlzIG5vdCBpbiB0aGUgYWN0aXZlIGZpbHRlci4KK0hJTlQ6 ICBFaXRoZXIgYWRkICJ1bmlxdWUiIHRvIHRoZSBmaWx0ZXIgb3IgcmVtb3ZlICJyZXBsaWNhX2lk ZW50aXR5IiBmcm9tIGl0LgorLS0gSW5jbHVkaW5nIGJvdGgga2luZHMgc3VjY2VlZHMuCitTRUxF Q1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3JpX29ubHknOjpyZWdjbGFzcywgb3duZXIgPT4g ZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ3VuaXF1ZScsJ3JlcGxpY2FfaWRlbnRpdHknXSk7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBTFRF UiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5yaV9vbmx5IEFERCBDT05TVFJBSU5UIHJpX29ubHlfYV9r ZXkgVU5JUVVFIChhKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5yaV9vbmx5IFJFUExJ Q0EgSURFTlRJVFkgVVNJTkcgSU5ERVggcmlfb25seV9hX2tleTsKKygyIHJvd3MpCisKK0RST1Ag VEFCTEUgcmlfb25seTsKKy0tIFBlci1raW5kIG9ubHlfa2luZHMgLyBleGNlcHRfa2luZHMgY292 ZXJhZ2UuICBGb3IgZWFjaCBraW5kIGluIHRoZSB2b2NhYnVsYXJ5LAorLS0gdmVyaWZ5IHRoYXQg b25seV9raW5kcz1LIGVtaXRzIGp1c3QgdGhhdCBraW5kJ3Mgb3V0cHV0IGFuZCB0aGF0IGV4Y2Vw dF9raW5kcz1LCistLSBvbWl0cyBqdXN0IHRoYXQga2luZCdzIG91dHB1dC4gIEtpbmRzIHdpdGgg bm8gZml4dHVyZSBhYm92ZSAodHJpZ2dlciwKKy0tIHBvbGljeSkgYXJlIHN0aWxsIHJlY29nbml6 ZWQgYnV0IGN1cnJlbnRseSBlbWl0IG5vdGhpbmc7IG9ubHlfa2luZHM9SworLS0gcmV0dXJucyB6 ZXJvIHJvd3MgZm9yIHRoZW0uICBGaXh0dXJlcyB1c2VkOgorLS0gICBpZHhkOiBQSyArIHR3byBz ZWNvbmRhcnkgQ1JFQVRFIElOREVYCistLSAgIGNvbnM6IFBLICsgVU5JUVVFICsgQ0hFQ0sgKyBG SyAoY29uc3RyYWludC1iYWNrZWQpCistLSAgIHJ0OiAgIENSRUFURSBSVUxFCistLSAgIHN0eDog IENSRUFURSBTVEFUSVNUSUNTCistLSAgIHJsczogIEVOQUJMRS9GT1JDRSBST1cgTEVWRUwgU0VD VVJJVFkKKy0tICAgcmlfZnVsbDogUkVQTElDQSBJREVOVElUWSBGVUxMIChubyBzb3VyY2Uta2lu ZCBkZXBlbmRlbmN5KQorQ1JFQVRFIFRBQkxFIGV4Y2xfZml4IChybmcgaW50NHJhbmdlLAorICAg IEVYQ0xVREUgVVNJTkcgZ2lzdCAocm5nIFdJVEggJiYpKTsKKy0tIG9ubHlfa2luZHM9SzogZW1p dCBvbmx5IGtpbmQgSydzIHN0YXRlbWVudHMuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9k ZGwoJ2lkeGQnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlb J2luZGV4J10pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJs ZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIENSRUFURSBJTkRFWCBpZHhkX2xvd2VyIE9OIHBndGJsX2RkbF90ZXN0 LmlkeGQgVVNJTkcgYnRyZWUgKGxvd2VyKG5hbWUpKTsKKyBDUkVBVEUgSU5ERVggaWR4ZF9wYXJ0 aWFsIE9OIHBndGJsX2RkbF90ZXN0LmlkeGQgVVNJTkcgYnRyZWUgKGlkKSBXSEVSRSAoaWQgPiAx MDApOworKDIgcm93cykKKworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZHhkJzo6 cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFSUkFZWydwcmltYXJ5X2tl eSddKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBTFRFUiBU QUJMRSBwZ3RibF9kZGxfdGVzdC5pZHhkIEFERCBDT05TVFJBSU5UIGlkeGRfcGtleSBQUklNQVJZ IEtFWSAoaWQpOworKDEgcm93KQorCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Nv bnMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ3VuaXF1 ZSddKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFMVEVSIFRBQkxFIHBndGJs X2RkbF90ZXN0LmNvbnMgQUREIENPTlNUUkFJTlQgY29uc19iX2tleSBVTklRVUUgKGIpOworKDEg cm93KQorCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2V4Y2xfZml4Jzo6cmVnY2xh c3MsIG93bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFSUkFZWydleGNsdXNpb24nXSk7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9k ZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBTFRFUiBUQUJMRSBwZ3Ri bF9kZGxfdGVzdC5leGNsX2ZpeCBBREQgQ09OU1RSQUlOVCBleGNsX2ZpeF9ybmdfZXhjbCBFWENM VURFIFVTSU5HIGdpc3QgKHJuZyBXSVRIICYmKTsKKygxIHJvdykKKworU0VMRUNUICogRlJPTSBw Z19nZXRfdGFibGVfZGRsKCdydCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5k cyA9PiBBUlJBWVsncnVsZSddKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19n ZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBDUkVBVEUgUlVMRSBydF9sb2dfaW5zZXJ0IEFTICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAgT04gSU5TRVJUIFRPIHBn dGJsX2RkbF90ZXN0LnJ0IERPICBJTlNFUlQgSU5UTyBwZ3RibF9kZGxfdGVzdC5ydF9sb2cgKGlk KSsKKyAgIFZBTFVFUyAobmV3LmlkKTsKKygxIHJvdykKKworU0VMRUNUICogRlJPTSBwZ19nZXRf dGFibGVfZGRsKCdzdHgnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4g QVJSQVlbJ3N0YXRpc3RpY3MnXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBTVEFUSVNUSUNTIHBndGJsX2Rk bF90ZXN0LnN0eF9uZHYgKG5kaXN0aW5jdCkgT04gYSwgYiBGUk9NIHBndGJsX2RkbF90ZXN0LnN0 eDsKKygxIHJvdykKKworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdybHMnOjpyZWdj bGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ3JscyddKTsKKyAgICAg ICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJscyBFTkFCTEUgUk9XIExFVkVMIFNFQ1VS SVRZOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJscyBGT1JDRSBST1cgTEVWRUwgU0VD VVJJVFk7CisoMiByb3dzKQorCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3JpX2Z1 bGwnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ3JlcGxp Y2FfaWRlbnRpdHknXSk7CisgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5yaV9m dWxsIFJFUExJQ0EgSURFTlRJVFkgRlVMTDsKKygxIHJvdykKKworLS0gdHJpZ2dlciAvIHBvbGlj eSBhcmUgbm90IHlldCBpbXBsZW1lbnRlZDsgdW5jb21tZW50IHdoZW4KKy0tIHBnX2dldF90cmln Z2VyX2RkbCAvIHBnX2dldF9wb2xpY3lfZGRsIGhlbHBlcnMgbGFuZC4KKy0tIFNFTEVDVCAqIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9u bHlfa2luZHMgPT4gQVJSQVlbJ3RyaWdnZXInXSk7CistLSBTRUxFQ1QgKiBGUk9NIHBnX2dldF90 YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+ IEFSUkFZWydwb2xpY3knXSk7CistLSBleGNlcHRfa2luZHM9SzogZW1pdCBldmVyeXRoaW5nIGV4 Y2VwdCBraW5kIEsncyBzdGF0ZW1lbnRzLiAgUEsvVU5JUVVFLworLS0gSU5ERVggYXJlIGV4ZXJj aXNlZCBvbiB0YWJsZXMgd2l0aG91dCBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYCistLSBz byB0aGUgdmFsaWRhdGlvbiBkb2VzIG5vdCB0cmlwLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFi bGVfZGRsKCdpZHhkJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBleGNlcHRfa2luZHMgPT4g QVJSQVlbJ3ByaW1hcnlfa2V5J10pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5p ZHhkIChpZCBpbnRlZ2VyIE5PVCBOVUxMLCBuYW1lIHRleHQpOworIENSRUFURSBJTkRFWCBpZHhk X2xvd2VyIE9OIHBndGJsX2RkbF90ZXN0LmlkeGQgVVNJTkcgYnRyZWUgKGxvd2VyKG5hbWUpKTsK KyBDUkVBVEUgSU5ERVggaWR4ZF9wYXJ0aWFsIE9OIHBndGJsX2RkbF90ZXN0LmlkeGQgVVNJTkcg YnRyZWUgKGlkKSBXSEVSRSAoaWQgPiAxMDApOworKDMgcm93cykKKworU0VMRUNUICogRlJPTSBw Z19nZXRfdGFibGVfZGRsKCdjb25zJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBleGNlcHRf a2luZHMgPT4gQVJSQVlbJ3VuaXF1ZSddKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rl c3QuY29ucyAoYSBpbnRlZ2VyLCBiIGludGVnZXIsIGMgaW50ZWdlciwgQ09OU1RSQUlOVCBjb25z X2FfY2hlY2sgQ0hFQ0sgKChhID4gMCkpKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5j b25zIEFERCBDT05TVFJBSU5UIGNvbnNfY19ma2V5IEZPUkVJR04gS0VZIChjKSBSRUZFUkVOQ0VT IHBndGJsX2RkbF90ZXN0LnJlZmQoaWQpIERFRkVSUkFCTEUgSU5JVElBTExZIERFRkVSUkVEOwor KDIgcm93cykKKworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjb25zJzo6cmVnY2xh c3MsIG93bmVyID0+IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlbJ2NoZWNrJ10pOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5jb25zIChhIGludGVnZXIsIGIgaW50ZWdlciwg YyBpbnRlZ2VyKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5jb25zIEFERCBDT05TVFJB SU5UIGNvbnNfYl9rZXkgVU5JUVVFIChiKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5j b25zIEFERCBDT05TVFJBSU5UIGNvbnNfY19ma2V5IEZPUkVJR04gS0VZIChjKSBSRUZFUkVOQ0VT IHBndGJsX2RkbF90ZXN0LnJlZmQoaWQpIERFRkVSUkFCTEUgSU5JVElBTExZIERFRkVSUkVEOwor KDMgcm93cykKKworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdleGNsX2ZpeCc6OnJl Z2NsYXNzLCBvd25lciA9PiBmYWxzZSwgZXhjZXB0X2tpbmRzID0+IEFSUkFZWydleGNsdXNpb24n XSk7CisgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LmV4Y2xfZml4IChybmcgaW50NHJhbmdl KTsKKygxIHJvdykKKworLS0gdHJpZ2dlciAvIHBvbGljeSBhcmUgbm90IHlldCBpbXBsZW1lbnRl ZDsgdW5jb21tZW50IHdoZW4KKy0tIHBnX2dldF90cmlnZ2VyX2RkbCAvIHBnX2dldF9wb2xpY3lf ZGRsIGhlbHBlcnMgbGFuZC4KKy0tIFNFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFz aWMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsndHJp Z2dlciddKTsKKy0tIFNFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdj bGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsncG9saWN5J10pOwor LS0gZXhjZXB0X2tpbmRzPXRhYmxlIHN1cHByZXNzZXMgdGhlIENSRUFURSBUQUJMRSArIE9XTkVS ICsgY2hpbGQtZGVmYXVsdAorLS0gU0VUIERFRkFVTFQgKyBhdHRvcHRpb25zIHBhc3NlcywgbGVh dmluZyBvbmx5IHRoZSBzdWItb2JqZWN0IHBhc3Nlcy4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3Rh YmxlX2RkbCgnaWR4ZCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgZXhjZXB0X2tpbmRzID0+ IEFSUkFZWyd0YWJsZSddKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19n ZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgSU5ERVggaWR4ZF9sb3dlciBPTiBwZ3RibF9k ZGxfdGVzdC5pZHhkIFVTSU5HIGJ0cmVlIChsb3dlcihuYW1lKSk7CisgQ1JFQVRFIElOREVYIGlk eGRfcGFydGlhbCBPTiBwZ3RibF9kZGxfdGVzdC5pZHhkIFVTSU5HIGJ0cmVlIChpZCkgV0hFUkUg KGlkID4gMTAwKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5pZHhkIEFERCBDT05TVFJB SU5UIGlkeGRfcGtleSBQUklNQVJZIEtFWSAoaWQpOworKDMgcm93cykKKworLS0gTXVsdGkta2lu ZCBjb21wb3NpdGlvbnMuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2lkeGQnOjpy ZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ3RhYmxlJywnaW5k ZXgnXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2Rk bCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LmlkeGQgKGlkIGludGVnZXIg Tk9UIE5VTEwsIG5hbWUgdGV4dCk7CisgQ1JFQVRFIElOREVYIGlkeGRfbG93ZXIgT04gcGd0Ymxf ZGRsX3Rlc3QuaWR4ZCBVU0lORyBidHJlZSAobG93ZXIobmFtZSkpOworIENSRUFURSBJTkRFWCBp ZHhkX3BhcnRpYWwgT04gcGd0YmxfZGRsX3Rlc3QuaWR4ZCBVU0lORyBidHJlZSAoaWQpIFdIRVJF IChpZCA+IDEwMCk7CisoMyByb3dzKQorCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwo J2NvbnMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ3By aW1hcnlfa2V5JywnZm9yZWlnbl9rZXknXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rl c3QuY29ucyBBREQgQ09OU1RSQUlOVCBjb25zX2NfZmtleSBGT1JFSUdOIEtFWSAoYykgUkVGRVJF TkNFUyBwZ3RibF9kZGxfdGVzdC5yZWZkKGlkKSBERUZFUlJBQkxFIElOSVRJQUxMWSBERUZFUlJF RDsKKygxIHJvdykKKworLS0gRHVwbGljYXRlIGVudHJpZXMgaW4gdGhlIGxpc3QgYXJlIHNpbGVu dGx5IGRlLWR1cGxpY2F0ZWQgYnkgdGhlCistLSBCaXRtYXBzZXQuCitTRUxFQ1QgKiBGUk9NIHBn X2dldF90YWJsZV9kZGwoJ2lkeGQnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2lu ZHMgPT4gQVJSQVlbJ2luZGV4JywnaW5kZXgnXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIElOREVYIGlkeGRfbG93 ZXIgT04gcGd0YmxfZGRsX3Rlc3QuaWR4ZCBVU0lORyBidHJlZSAobG93ZXIobmFtZSkpOworIENS RUFURSBJTkRFWCBpZHhkX3BhcnRpYWwgT04gcGd0YmxfZGRsX3Rlc3QuaWR4ZCBVU0lORyBidHJl ZSAoaWQpIFdIRVJFIChpZCA+IDEwMCk7CisoMiByb3dzKQorCitEUk9QIFRBQkxFIGV4Y2xfZml4 OworLS0gS2luZC1maWx0ZXIgdGVzdHMgb24gcGFydGl0aW9uZWQgdGFibGVzIHdpdGggaW5kZXhl cy4KKy0tCistLSBvbmx5X2tpbmRzPWluZGV4IG9uIGEgcGFydGl0aW9uZWQgdGFibGU6IG9ubHkg dGhlIHJvb3QgQ1JFQVRFIElOREVYIGlzCistLSBlbWl0dGVkOyBubyBDUkVBVEUgVEFCTEUsIG5v IHBhcnRpdGlvbiBjaGlsZHJlbiAoS0lORF9QQVJUSVRJT04gYWJzZW50KS4KK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX21peGVkJzo6cmVnY2xhc3MsIG93bmVyID0+IGZh bHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ubHlfa2luZHMgPT4gQVJSQVlb J2luZGV4J10pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9k ZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIENSRUFURSBJTkRFWCBwYXJ0ZWRfbWl4ZWRfaWQgT04gcGd0YmxfZGRsX3Rlc3QucGFydGVk X21peGVkIFVTSU5HIGJ0cmVlIChpZCk7CisoMSByb3cpCisKKy0tIGV4Y2VwdF9raW5kcz1pbmRl eCBvbiBhIHBhcnRpdGlvbmVkIHRhYmxlOiBDUkVBVEUgVEFCTEUgZm9yIHRoZSBwYXJlbnQKKy0t IGFuZCBhbGwgY2hpbGRyZW4gYXJlIGVtaXR0ZWQ7IG5vIGluZGV4IHN0YXRlbWVudHMuCitTRUxF Q1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BhcnRlZF9taXhlZCc6OnJlZ2NsYXNzLCBvd25l ciA9PiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRfa2luZHMg PT4gQVJSQVlbJ2luZGV4J10pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfbWl4ZWQgKGlkIGlu dGVnZXIsIHJlZ2lvbiB0ZXh0KSBQQVJUSVRJT04gQlkgTElTVCAocmVnaW9uKTsKKyBDUkVBVEUg VEFCTEUgcGd0YmxfZGRsX3Rlc3QucGFydGVkX21peGVkX2EgUEFSVElUSU9OIE9GIHBndGJsX2Rk bF90ZXN0LnBhcnRlZF9taXhlZCBGT1IgVkFMVUVTIElOICgnYScpOworKDIgcm93cykKKworLS0g b25seV9raW5kcz1wcmltYXJ5X2tleSBvbiBhIHBhcnRpdGlvbmVkIHRhYmxlOiBvbmx5IHRoZSBB TFRFUiBUQUJMRSBBREQKKy0tIENPTlNUUkFJTlQgUEsgb24gdGhlIHBhcmVudDsgdGhlIGNoaWxk J3MgaW5oZXJpdGVkIFBLIChjb25pc2xvY2FsPWZhbHNlKQorLS0gaXMgc2tpcHBlZDsgbm8gQ1JF QVRFIFRBQkxFLCBubyBwYXJ0aXRpb24gY2hpbGRyZW4uCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90 YWJsZV9kZGwoJ3BhcnRlZF9wayc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBvbmx5X2tpbmRzID0+IEFSUkFZWydwcmltYXJ5X2tleSdd KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9k ZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0 ZWRfcGsgQUREIENPTlNUUkFJTlQgcGFydGVkX3BrX3BrZXkgUFJJTUFSWSBLRVkgKGlkLCByZWdp b24pOworKDEgcm93KQorCistLSBvbmx5X2tpbmRzPUsgb24gYSB0YWJsZSB0aGF0IGRvZXMgbm90 IGhhdmUgYW55IEsgb2YgdGhhdCBraW5kIGlzIGEgdmFsaWQKKy0tIGZpbHRlciBhbmQgcmV0dXJu cyB6ZXJvIHJvd3MuICBUZXN0ZWQgcHJldmlvdXNseSB3aXRoIGZvcmVpZ25fa2V5CistLSBvbiAn cmVmZCc7IGhlcmUgYWxzbyBydWxlLCBzdGF0aXN0aWNzLCBybHMsIHJlcGxpY2FfaWRlbnRpdHks IGFuZAorLS0gZXhjbHVzaW9uIG9uICdiYXNpYycgKHdoaWNoIGhhcyBvbmx5IFBLICsgY29sdW1u cykuCitTRUxFQ1QgY291bnQoKikgQVMgcnVsZV9yb3dzCisgIEZST00gcGdfZ2V0X3RhYmxlX2Rk bCgnYmFzaWMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlb J3J1bGUnXSk7CisgcnVsZV9yb3dzIAorLS0tLS0tLS0tLS0KKyAgICAgICAgIDAKKygxIHJvdykK KworU0VMRUNUIGNvdW50KCopIEFTIHN0YXRzX3Jvd3MKKyAgRlJPTSBwZ19nZXRfdGFibGVfZGRs KCdiYXNpYyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBBUlJBWVsn c3RhdGlzdGljcyddKTsKKyBzdGF0c19yb3dzIAorLS0tLS0tLS0tLS0tCisgICAgICAgICAgMAor KDEgcm93KQorCitTRUxFQ1QgY291bnQoKikgQVMgcmxzX3Jvd3MKKyAgRlJPTSBwZ19nZXRfdGFi bGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBB UlJBWVsncmxzJ10pOworIHJsc19yb3dzIAorLS0tLS0tLS0tLQorICAgICAgICAwCisoMSByb3cp CisKK1NFTEVDVCBjb3VudCgqKSBBUyByaV9yb3dzCisgIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgn YmFzaWMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ3Jl cGxpY2FfaWRlbnRpdHknXSk7Cisgcmlfcm93cyAKKy0tLS0tLS0tLQorICAgICAgIDAKKygxIHJv dykKKworU0VMRUNUIGNvdW50KCopIEFTIGV4Y2xfcm93cworICBGUk9NIHBnX2dldF90YWJsZV9k ZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFSUkFZ WydleGNsdXNpb24nXSk7CisgZXhjbF9yb3dzIAorLS0tLS0tLS0tLS0KKyAgICAgICAgIDAKKygx IHJvdykKKworLS0gSW5wdXQtdmFsaWRhdGlvbiBlZGdlIGNhc2VzIGZvciB0aGUga2luZCBhcnJh eS4gIEFsbAorLS0gb2YgdGhlc2UgcmFpc2UgYW4gZXJyb3I7IHRoZSBmdW5jdGlvbiBuZXZlciBy ZWFjaGVzIHJlbGF0aW9uIG9wZW4uCistLSBFbXB0eSBhcnJheToKK1NFTEVDVCAqIEZST00gcGdf Z2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgb25seV9raW5kcyA9PiBBUlJBWVtdOjp0 ZXh0W10pOworRVJST1I6ICBwYXJhbWV0ZXIgIm9ubHlfa2luZHMiIG11c3Qgc3BlY2lmeSBhdCBs ZWFzdCBvbmUga2luZAorLS0gTlVMTCBlbGVtZW50OgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFi bGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCBvbmx5X2tpbmRzID0+IEFSUkFZW05VTEw6OnRleHRd KTsKK0VSUk9SOiAgcGFyYW1ldGVyICJvbmx5X2tpbmRzIiBtdXN0IG5vdCBjb250YWluIE5VTEwg ZWxlbWVudHMKKy0tIFVucmVjb2duaXplZCBraW5kOgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFi bGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCBvbmx5X2tpbmRzID0+IEFSUkFZWydub19zdWNoX2tp bmQnXSk7CitFUlJPUjogIHVucmVjb2duaXplZCBraW5kICJub19zdWNoX2tpbmQiIGluIHBhcmFt ZXRlciAib25seV9raW5kcyIKKy0tIFNhbWUga2luZCBzcGVjaWZpZWQgdGhyb3VnaCBib3RoIHBh cmFtZXRlcnMgaXMgc3RpbGwgbXV0ZXgtcmVqZWN0ZWQuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90 YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgb25seV9raW5kcyA9PiBBUlJBWVsnaW5kZXgnXSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBleGNlcHRfa2luZHMgPT4gQVJSQVlbJ3J1bGUnXSk7CitFUlJPUjogICJvbmx5X2tp bmRzIiBhbmQgImV4Y2VwdF9raW5kcyIgcGFyYW1ldGVycyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZl CistLSBSb3VuZC10cmlwIHZlcmlmaWNhdGlvbi4gIEZvciBldmVyeSB0ZXN0IHRhYmxlLCBjYXB0 dXJlIHRoZSBEREwgdGhlCistLSBmdW5jdGlvbiBlbWl0cywgZHJvcCB0aGUgc2NoZW1hLCByZXBs YXkgZWFjaCB0YWJsZSdzIERETCBpbgorLS0gZGVwZW5kZW5jeSBvcmRlciwgYW5kIGNvbmZpcm0g dGhhdCBwZ19nZXRfdGFibGVfZGRsIG9uIHRoZSByZWNyZWF0ZWQKKy0tIHJlbGF0aW9uIG1hdGNo ZXMgdGhlIG9yaWdpbmFsIGxpbmUtZm9yLWxpbmUuICBUaGUgZmluYWwgU0VMRUNUIG11c3QKKy0t IHJldHVybiB6ZXJvIHJvd3MuCitDUkVBVEUgVEVNUCBUQUJMRSBwZ3RibF9kZGxfcnRfb3JpZyAo bmFtZSB0ZXh0LCBvcmQgaW50LCBsaW5lIHRleHQpOworSU5TRVJUIElOVE8gcGd0YmxfZGRsX3J0 X29yaWcKK1NFTEVDVCB0Lm5hbWUsIG8ub3JkLCBvLmxpbmUKK0ZST00gKFZBTFVFUworICAgICAg ICAoJ2Jhc2ljJyksICgnaWRfY29scycpLCAoJ2lkX2N1c3RvbScpLCAoJ2dlbl9jb2xzJyksICgn Z2VuX3ZpcnR1YWwnKSwgKCdzdG9yYWdlX2NvbHMnKSwKKyAgICAgICAgKCdyZWZkJyksICgnY29u cycpLCAoJ251bGxzX25kJyksICgnaWR4X2luYycpLAorICAgICAgICAoJ2ZrX2FjdHNfdGd0Jyks ICgnZmtfYWN0cycpLCAoJ25vdGVuZl90Z3QnKSwgKCdub3RlbmYnKSwgKCdzZWxmX3JlZicpLCAo J3RlbXBvcmFsX3BrJyksCisgICAgICAgICgnaWR4ZCcpLAorICAgICAgICAoJ3BhcicpLCAoJ2No JyksICgnYXR0b3B0JyksCisgICAgICAgICgncGFydGVkX3JhbmdlJyksICgncGFydGVkX3Jhbmdl XzEnKSwgKCdwYXJ0ZWRfcmFuZ2VfZGVmJyksCisgICAgICAgICgncGFydGVkX2hhc2gnKSwgKCdw YXJ0ZWRfaGFzaF8wJyksCisgICAgICAgICgncGFydGVkX2xpc3QnKSwKKyAgICAgICAgKCdwYXJ0 ZWRfaWR4JyksICgncGFydGVkX2lkeF9hJyksCisgICAgICAgICgncGFydGVkX3BsYWluJyksICgn cGFydGVkX3BsYWluX2EnKSwKKyAgICAgICAgKCdwYXJ0ZWRfcGsnKSwgKCdwYXJ0ZWRfcGtfYScp LAorICAgICAgICAoJ3BhcnRlZF9zdWInKSwgKCdwYXJ0ZWRfc3ViX2EnKSwgKCdwYXJ0ZWRfc3Vi X2ExJyksCisgICAgICAgICgncGFydGVkX2NoaWxkX2lkeCcpLCAoJ3BhcnRlZF9jaGlsZF9pZHhf YScpLAorICAgICAgICAoJ3BhcnRlZF9taXhlZCcpLCAoJ3BhcnRlZF9taXhlZF9hJyksCisgICAg ICAgICgncGFydGVkX2ZrX3RndCcpLCAoJ3BhcnRlZF9maycpLCAoJ3BhcnRlZF9ma19hJyksCisg ICAgICAgICgncnRfbG9nJyksICgncnQnKSwKKyAgICAgICAgKCdzdHgnKSwgKCdybHMnKSwgKCdy aV9mdWxsJyksICgncmlfaWR4JyksICgndW5vJykKKyAgICAgKSBBUyB0KG5hbWUpLAorICAgICBM QVRFUkFMIHBnX2dldF90YWJsZV9kZGwoKCdwZ3RibF9kZGxfdGVzdC4nIHx8IHQubmFtZSk6OnJl Z2NsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duZXIgPT4gZmFsc2UpIFdJ VEggT1JESU5BTElUWSBvKGxpbmUsIG9yZCk7CitETyAkJAorREVDTEFSRQorICAgIHRhYmxlcyBD T05TVEFOVCB0ZXh0W10gOj0gQVJSQVlbCisgICAgICAgICdiYXNpYycsICdpZF9jb2xzJywgJ2lk X2N1c3RvbScsICdnZW5fY29scycsICdnZW5fdmlydHVhbCcsICdzdG9yYWdlX2NvbHMnLAorICAg ICAgICAncmVmZCcsICdjb25zJywgJ251bGxzX25kJywgJ2lkeF9pbmMnLAorICAgICAgICAnZmtf YWN0c190Z3QnLCAnZmtfYWN0cycsICdub3RlbmZfdGd0JywgJ25vdGVuZicsICdzZWxmX3JlZics ICd0ZW1wb3JhbF9waycsCisgICAgICAgICdpZHhkJywKKyAgICAgICAgJ3BhcicsICdjaCcsICdh dHRvcHQnLAorICAgICAgICAncGFydGVkX3JhbmdlJywgJ3BhcnRlZF9yYW5nZV8xJywgJ3BhcnRl ZF9yYW5nZV9kZWYnLAorICAgICAgICAncGFydGVkX2hhc2gnLCAncGFydGVkX2hhc2hfMCcsCisg ICAgICAgICdwYXJ0ZWRfbGlzdCcsCisgICAgICAgICdwYXJ0ZWRfaWR4JywgJ3BhcnRlZF9pZHhf YScsCisgICAgICAgICdwYXJ0ZWRfcGxhaW4nLCAncGFydGVkX3BsYWluX2EnLAorICAgICAgICAn cGFydGVkX3BrJywgJ3BhcnRlZF9wa19hJywKKyAgICAgICAgJ3BhcnRlZF9zdWInLCAncGFydGVk X3N1Yl9hJywgJ3BhcnRlZF9zdWJfYTEnLAorICAgICAgICAncGFydGVkX2NoaWxkX2lkeCcsICdw YXJ0ZWRfY2hpbGRfaWR4X2EnLAorICAgICAgICAncGFydGVkX21peGVkJywgJ3BhcnRlZF9taXhl ZF9hJywKKyAgICAgICAgJ3BhcnRlZF9ma190Z3QnLCAncGFydGVkX2ZrJywgJ3BhcnRlZF9ma19h JywKKyAgICAgICAgJ3J0X2xvZycsICdydCcsCisgICAgICAgICdzdHgnLCAncmxzJywgJ3JpX2Z1 bGwnLCAncmlfaWR4JywgJ3VubycKKyAgICBdOworICAgIHQgdGV4dDsKKyAgICBzdG10IHRleHQ7 CitCRUdJTgorICAgIERST1AgU0NIRU1BIHBndGJsX2RkbF90ZXN0IENBU0NBREU7CisgICAgQ1JF QVRFIFNDSEVNQSBwZ3RibF9kZGxfdGVzdDsKKyAgICBGT1JFQUNIIHQgSU4gQVJSQVkgdGFibGVz IExPT1AKKyAgICAgICAgRk9SIHN0bXQgSU4KKyAgICAgICAgICAgIFNFTEVDVCBsaW5lIEZST00g cGd0YmxfZGRsX3J0X29yaWcgV0hFUkUgbmFtZSA9IHQgT1JERVIgQlkgb3JkCisgICAgICAgIExP T1AKKyAgICAgICAgICAgIEJFR0lOCisgICAgICAgICAgICAgICAgRVhFQ1VURSBzdG10OworICAg ICAgICAgICAgRVhDRVBUSU9OIFdIRU4gZHVwbGljYXRlX3RhYmxlIFRIRU4KKyAgICAgICAgICAg ICAgICBOVUxMOyAgLS0gcGFydGl0aW9uIGNoaWxkIGFscmVhZHkgY3JlYXRlZCBieSBpdHMgcGFy ZW50J3MgRERMCisgICAgICAgICAgICBFTkQ7CisgICAgICAgIEVORCBMT09QOworICAgIEVORCBM T09QOworRU5EICQkOworTk9USUNFOiAgZHJvcCBjYXNjYWRlcyB0byA0MyBvdGhlciBvYmplY3Rz CitERVRBSUw6ICBkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGJhc2ljCitkcm9wIGNhc2NhZGVzIHRv IHRhYmxlIGlkX2NvbHMKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgaWRfY3VzdG9tCitkcm9wIGNh c2NhZGVzIHRvIHRhYmxlIGdlbl9jb2xzCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGdlbl92aXJ0 dWFsCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHN0b3JhZ2VfY29scworZHJvcCBjYXNjYWRlcyB0 byB0YWJsZSByZWZkCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGNvbnMKK2Ryb3AgY2FzY2FkZXMg dG8gdGFibGUgbnVsbHNfbmQKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgaWR4X2luYworZHJvcCBj YXNjYWRlcyB0byB0YWJsZSBma19hY3RzX3RndAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBma19h Y3RzCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIG5vdGVuZl90Z3QKK2Ryb3AgY2FzY2FkZXMgdG8g dGFibGUgbm90ZW5mCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHNlbGZfcmVmCitkcm9wIGNhc2Nh ZGVzIHRvIHRhYmxlIHRlbXBvcmFsX3BrCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGlkeGQKK2Ry b3AgY2FzY2FkZXMgdG8gdGFibGUgcGFyCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGNoCitkcm9w IGNhc2NhZGVzIHRvIHRhYmxlIGF0dG9wdAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBwYXJ0ZWRf cmFuZ2UKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcGFydGVkX2hhc2gKK2Ryb3AgY2FzY2FkZXMg dG8gdGFibGUgcGFydGVkX2xpc3QKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcGFydGVkX2lkeAor ZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBwYXJ0ZWRfcGxhaW4KK2Ryb3AgY2FzY2FkZXMgdG8gdGFi bGUgcGFydGVkX3BrCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHBhcnRlZF9zdWIKK2Ryb3AgY2Fz Y2FkZXMgdG8gdGFibGUgcGFydGVkX2NoaWxkX2lkeAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBw YXJ0ZWRfbWl4ZWQKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcGFydGVkX2ZrX3RndAorZHJvcCBj YXNjYWRlcyB0byB0YWJsZSBwYXJ0ZWRfZmsKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcnQKK2Ry b3AgY2FzY2FkZXMgdG8gdGFibGUgcnRfbG9nCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHN0eAor ZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBybHMKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcmlfZnVs bAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSByaV9pZHgKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUg dW5vCitkcm9wIGNhc2NhZGVzIHRvIHR5cGUgdHlwZWRfdAorZHJvcCBjYXNjYWRlcyB0byB0YWJs ZSB0eXBlZF9wbGFpbgorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSB0eXBlZF9vdmVyCitkcm9wIGNh c2NhZGVzIHRvIHZpZXcgdgorZHJvcCBjYXNjYWRlcyB0byBzZXF1ZW5jZSBzCitXSVRIIGFmdGVy X2RkbCBBUyAoCisgICAgU0VMRUNUIHQubmFtZSwgby5vcmQsIG8ubGluZQorICAgIEZST00gKFNF TEVDVCBESVNUSU5DVCBuYW1lIEZST00gcGd0YmxfZGRsX3J0X29yaWcpIEFTIHQsCisgICAgICAg ICBMQVRFUkFMIHBnX2dldF90YWJsZV9kZGwoKCdwZ3RibF9kZGxfdGVzdC4nIHx8IHQubmFtZSk6 OnJlZ2NsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyID0+IGZh bHNlKSBXSVRIIE9SRElOQUxJVFkgbyhsaW5lLCBvcmQpCispCisoU0VMRUNUICdtaXNzaW5nLWlu LWNvcHknIEFTIGtpbmQsIG5hbWUsIG9yZCwgbGluZSBGUk9NIHBndGJsX2RkbF9ydF9vcmlnCisg RVhDRVBUCisgU0VMRUNUICdtaXNzaW5nLWluLWNvcHknLCBuYW1lLCBvcmQsIGxpbmUgRlJPTSBh ZnRlcl9kZGwpCitVTklPTiBBTEwKKyhTRUxFQ1QgJ2V4dHJhLWluLWNvcHknIEFTIGtpbmQsIG5h bWUsIG9yZCwgbGluZSBGUk9NIGFmdGVyX2RkbAorIEVYQ0VQVAorIFNFTEVDVCAnZXh0cmEtaW4t Y29weScsIG5hbWUsIG9yZCwgbGluZSBGUk9NIHBndGJsX2RkbF9ydF9vcmlnKQorT1JERVIgQlkg a2luZCwgbmFtZSwgb3JkOworIGtpbmQgfCBuYW1lIHwgb3JkIHwgbGluZSAKKy0tLS0tLSstLS0t LS0rLS0tLS0rLS0tLS0tCisoMCByb3dzKQorCistLSBDbGVhbnVwLgorRFJPUCBTQ0hFTUEgcGd0 YmxfZGRsX3Rlc3QgQ0FTQ0FERTsKK05PVElDRTogIGRyb3AgY2FzY2FkZXMgdG8gMzggb3RoZXIg b2JqZWN0cworREVUQUlMOiAgZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBiYXNpYworZHJvcCBjYXNj YWRlcyB0byB0YWJsZSBpZF9jb2xzCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGlkX2N1c3RvbQor ZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBnZW5fY29scworZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBn ZW5fdmlydHVhbAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBzdG9yYWdlX2NvbHMKK2Ryb3AgY2Fz Y2FkZXMgdG8gdGFibGUgcmVmZAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBjb25zCitkcm9wIGNh c2NhZGVzIHRvIHRhYmxlIG51bGxzX25kCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGlkeF9pbmMK K2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgZmtfYWN0c190Z3QKK2Ryb3AgY2FzY2FkZXMgdG8gdGFi bGUgZmtfYWN0cworZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBub3RlbmZfdGd0Citkcm9wIGNhc2Nh ZGVzIHRvIHRhYmxlIG5vdGVuZgorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBzZWxmX3JlZgorZHJv cCBjYXNjYWRlcyB0byB0YWJsZSB0ZW1wb3JhbF9waworZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBp ZHhkCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHBhcgorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBj aAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBhdHRvcHQKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUg cGFydGVkX3JhbmdlCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHBhcnRlZF9oYXNoCitkcm9wIGNh c2NhZGVzIHRvIHRhYmxlIHBhcnRlZF9saXN0Citkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHBhcnRl ZF9pZHgKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcGFydGVkX3BsYWluCitkcm9wIGNhc2NhZGVz IHRvIHRhYmxlIHBhcnRlZF9waworZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBwYXJ0ZWRfc3ViCitk cm9wIGNhc2NhZGVzIHRvIHRhYmxlIHBhcnRlZF9jaGlsZF9pZHgKK2Ryb3AgY2FzY2FkZXMgdG8g dGFibGUgcGFydGVkX21peGVkCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHBhcnRlZF9ma190Z3QK K2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcGFydGVkX2ZrCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxl IHJ0X2xvZworZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBydAorZHJvcCBjYXNjYWRlcyB0byB0YWJs ZSBzdHgKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcmxzCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxl IHJpX2Z1bGwKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcmlfaWR4Citkcm9wIGNhc2NhZGVzIHRv IHRhYmxlIHVubwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVs ZSBiL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUKaW5kZXggOGZhMGE2YzQ3ZmIu LjllY2E2NGNjYTNiIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVk dWxlCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUKQEAgLTgxLDcgKzgx LDcgQEAgdGVzdDogY3JlYXRlX3RhYmxlX2xpa2UgYWx0ZXJfZ2VuZXJpYyBhbHRlcl9vcGVyYXRv ciBtaXNjIGFzeW5jIGRic2l6ZSBtZXJnZSBtaXMKICMgY29sbGF0ZS5saW51eC51dGY4IGFuZCBj b2xsYXRlLmljdS51dGY4IHRlc3RzIGNhbm5vdCBiZSBydW4gaW4gcGFyYWxsZWwgd2l0aCBlYWNo IG90aGVyCiAjIHBzcWwgZGVwZW5kcyBvbiBjcmVhdGVfYW0KICMgYW11dGlscyBkZXBlbmRzIG9u IGdlb21ldHJ5LCBjcmVhdGVfaW5kZXhfc3BnaXN0LCBoYXNoX2luZGV4LCBicmluCi10ZXN0OiBy dWxlcyBwc3FsIHBzcWxfY3Jvc3N0YWIgcHNxbF9waXBlbGluZSBhbXV0aWxzIHN0YXRzX2V4dCBj b2xsYXRlLmxpbnV4LnV0ZjggY29sbGF0ZS53aW5kb3dzLndpbjEyNTIKK3Rlc3Q6IHJ1bGVzIHBz cWwgcHNxbF9jcm9zc3RhYiBwc3FsX3BpcGVsaW5lIGFtdXRpbHMgc3RhdHNfZXh0IGNvbGxhdGUu bGludXgudXRmOCBjb2xsYXRlLndpbmRvd3Mud2luMTI1MiBwZ19nZXRfdGFibGVfZGRsCiAKICMg LS0tLS0tLS0tLQogIyBSdW4gdGhlc2UgYWxvbmUgc28gdGhleSBkb24ndCBydW4gb3V0IG9mIHBh cmFsbGVsIHdvcmtlcnMKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BnX2dldF90 YWJsZV9kZGwuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcGdfZ2V0X3RhYmxlX2RkbC5zcWwK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmU5ZWExMmQ3NjExCi0tLSAv ZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcGdfZ2V0X3RhYmxlX2RkbC5zcWwK QEAgLTAsMCArMSw5MzcgQEAKKy0tCistLSBwZ19nZXRfdGFibGVfZGRsCistLQorLS0gQWxsIHRl c3RzIHBhc3Mgb3duZXI9PmZhbHNlIHNvIHRoZSBBTFRFUiBUQUJMRSBPV05FUiBUTyBsaW5lIGlz IG5vdAorLS0gZW1pdHRlZCwga2VlcGluZyBvdXRwdXQgc3RhYmxlIGFjcm9zcyB0ZXN0IHJ1bm5l cnMgKHdoaWNoIG1heSBydW4gdW5kZXIKKy0tIGRpZmZlcmVudCByb2xlIG5hbWVzKS4KKy0tCitD UkVBVEUgU0NIRU1BIHBndGJsX2RkbF90ZXN0OworU0VUIHNlYXJjaF9wYXRoID0gcGd0YmxfZGRs X3Rlc3Q7CisKKy0tIEJhc2ljIHRhYmxlIHdpdGggUFJJTUFSWSBLRVksIE5PVCBOVUxMLCBERUZB VUxULCBDT0xMQVRFLgorQ1JFQVRFIFRBQkxFIGJhc2ljICgKKyAgICBpZCBpbnQgUFJJTUFSWSBL RVksCisgICAgbmFtZSB0ZXh0IE5PVCBOVUxMIERFRkFVTFQgJ2Fub24nIENPTExBVEUgIkMiCisp OworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCBvd25l ciA9PiBmYWxzZSk7CisKKy0tIElkZW50aXR5IGNvbHVtbnMgKHdpdGggZGVmYXVsdCBhbmQgY3Vz dG9tIHNlcXVlbmNlIG9wdGlvbnMpLgorQ1JFQVRFIFRBQkxFIGlkX2NvbHMgKAorICAgIGlkX2Fs d2F5cyBpbnQgR0VORVJBVEVEIEFMV0FZUyBBUyBJREVOVElUWSwKKyAgICBpZF9kZWZhdWx0IGlu dCBHRU5FUkFURUQgQlkgREVGQVVMVCBBUyBJREVOVElUWQorKTsKK1NFTEVDVCAqIEZST00gcGdf Z2V0X3RhYmxlX2RkbCgnaWRfY29scyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisKK0NS RUFURSBUQUJMRSBpZF9jdXN0b20gKAorICAgIHYgaW50IEdFTkVSQVRFRCBBTFdBWVMgQVMgSURF TlRJVFkgKAorICAgICAgICBTRVFVRU5DRSBOQU1FIGlkX2N1c3RvbV92X3NlcQorICAgICAgICBT VEFSVCBXSVRIIDEwMCBJTkNSRU1FTlQgQlkgNQorICAgICAgICBNSU5WQUxVRSA1MCBNQVhWQUxV RSAxMDAwCisgICAgICAgIENBQ0hFIDEwIENZQ0xFCisgICAgKQorKTsKK1NFTEVDVCAqIEZST00g cGdfZ2V0X3RhYmxlX2RkbCgnaWRfY3VzdG9tJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsK KworLS0gR2VuZXJhdGVkIHN0b3JlZCBjb2x1bW4uCitDUkVBVEUgVEFCTEUgZ2VuX2NvbHMgKAor ICAgIGNlbnRzIGludCwKKyAgICBkb2xsYXJzIG51bWVyaWMgR0VORVJBVEVEIEFMV0FZUyBBUyAo Y2VudHMgLyAxMDAuMCkgU1RPUkVECispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRs KCdnZW5fY29scyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisKKy0tIEdlbmVyYXRlZCB2 aXJ0dWFsIGNvbHVtbi4KK0NSRUFURSBUQUJMRSBnZW5fdmlydHVhbCAoCisgICAgYmFzZSBpbnQs CisgICAgZGVyaXZlZCBpbnQgR0VORVJBVEVEIEFMV0FZUyBBUyAoYmFzZSAqIDIpIFZJUlRVQUwK Kyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2dlbl92aXJ0dWFsJzo6cmVnY2xh c3MsIG93bmVyID0+IGZhbHNlKTsKKworLS0gU1RPUkFHRSBhbmQgQ09NUFJFU1NJT04gKG9ubHkg ZW1pdHRlZCB3aGVuIG5vbi1kZWZhdWx0IGZvciB0aGUgdHlwZSkuCitDUkVBVEUgVEFCTEUgc3Rv cmFnZV9jb2xzICgKKyAgICBhIHRleHQgU1RPUkFHRSBFWFRFUk5BTCwKKyAgICBiIHRleHQgU1RP UkFHRSBNQUlOLAorICAgIGMgdGV4dCBDT01QUkVTU0lPTiBwZ2x6CispOworU0VMRUNUICogRlJP TSBwZ19nZXRfdGFibGVfZGRsKCdzdG9yYWdlX2NvbHMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFs c2UpOworCistLSBDb25zdHJhaW50czogQ0hFQ0ssIFVOSVFVRSwgRk9SRUlHTiBLRVkgKERFRkVS UkFCTEUpLgorQ1JFQVRFIFRBQkxFIHJlZmQgKGlkIGludCBQUklNQVJZIEtFWSk7CitDUkVBVEUg VEFCTEUgY29ucyAoCisgICAgYSBpbnQgQ0hFQ0sgKGEgPiAwKSwKKyAgICBiIGludCBVTklRVUUs CisgICAgYyBpbnQgUkVGRVJFTkNFUyByZWZkKGlkKSBERUZFUlJBQkxFIElOSVRJQUxMWSBERUZF UlJFRAorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY29ucyc6OnJlZ2NsYXNz LCBvd25lciA9PiBmYWxzZSk7CisKKy0tIFVOSVFVRSBOVUxMUyBOT1QgRElTVElOQ1QgKFBHIDE1 KTogbnVsbCB2YWx1ZXMgYXJlIHRyZWF0ZWQgYXMgZXF1YWwgZm9yCistLSB1bmlxdWVuZXNzIHB1 cnBvc2VzLCBzbyB0aGUgTlVMTFMgTk9UIERJU1RJTkNUIGNsYXVzZSBtdXN0IGJlIGVtaXR0ZWQu CitDUkVBVEUgVEFCTEUgbnVsbHNfbmQgKAorICAgIGEgaW50LAorICAgIGIgaW50LAorICAgIFVO SVFVRSBOVUxMUyBOT1QgRElTVElOQ1QgKGEsIGIpCispOworU0VMRUNUICogRlJPTSBwZ19nZXRf dGFibGVfZGRsKCdudWxsc19uZCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisKKy0tIElO Q0xVREUgY29sdW1ucyBvbiBhIGNvbnN0cmFpbnQtYmFja2VkIFVOSVFVRSBpbmRleCAoUEcgMTEp OiB0aGUKKy0tIGNvdmVyaW5nIGNvbHVtbnMgYXBwZWFyIGluIGFuIElOQ0xVREUgKC4uLikgY2xh dXNlIG9uIHRoZSBBTFRFUiBUQUJMRQorLS0gQUREIENPTlNUUkFJTlQgc3RhdGVtZW50LCBub3Qg aW4gdGhlIGtleSBjb2x1bW4gbGlzdC4KK0NSRUFURSBUQUJMRSBpZHhfaW5jICgKKyAgICBpZCAg IGludCBQUklNQVJZIEtFWSwKKyAgICBuYW1lIHRleHQsCisgICAgZXh0cmEgdGV4dCwKKyAgICBV TklRVUUgKG5hbWUpIElOQ0xVREUgKGV4dHJhKQorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3Rh YmxlX2RkbCgnaWR4X2luYyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisKKy0tIEZPUkVJ R04gS0VZIHdpdGggT04gREVMRVRFIC8gT04gVVBEQVRFIHJlZmVyZW50aWFsIGFjdGlvbnMgYW5k IE1BVENICistLSBjbGF1c2UuICBFYWNoIHZhcmlhbnQgbXVzdCBhcHBlYXIgdmVyYmF0aW0gaW4g dGhlIHJlY29uc3RydWN0ZWQgRERMLgorQ1JFQVRFIFRBQkxFIGZrX2FjdHNfdGd0IChpZCBpbnQg UFJJTUFSWSBLRVkpOworQ1JFQVRFIFRBQkxFIGZrX2FjdHMgKAorICAgIGEgaW50LAorICAgIGIg aW50LAorICAgIGMgaW50LAorICAgIGQgaW50LAorICAgIENPTlNUUkFJTlQgZmtfY2FzY2FkZSAg Rk9SRUlHTiBLRVkgKGEpIFJFRkVSRU5DRVMgZmtfYWN0c190Z3QoaWQpCisgICAgICAgICAgICAg ICAgICAgICAgICAgICBPTiBERUxFVEUgQ0FTQ0FERSBPTiBVUERBVEUgUkVTVFJJQ1QsCisgICAg Q09OU1RSQUlOVCBma19zZXRudWxsICBGT1JFSUdOIEtFWSAoYikgUkVGRVJFTkNFUyBma19hY3Rz X3RndChpZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE9OIERFTEVURSBTRVQgTlVMTCwK KyAgICBDT05TVFJBSU5UIGZrX3NldGRlZiAgIEZPUkVJR04gS0VZIChjKSBSRUZFUkVOQ0VTIGZr X2FjdHNfdGd0KGlkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT04gREVMRVRFIFNFVCBE RUZBVUxULAorICAgIENPTlNUUkFJTlQgZmtfbWF0Y2ggICAgRk9SRUlHTiBLRVkgKGQpIFJFRkVS RU5DRVMgZmtfYWN0c190Z3QoaWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICBNQVRDSCBG VUxMCispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdma19hY3RzJzo6cmVnY2xh c3MsIG93bmVyID0+IGZhbHNlKTsKKworLS0gTk9UIEVORk9SQ0VEIGZvcmVpZ24ga2V5IChQRyAx Nyk6IHRoZSBjb25zdHJhaW50IGlzIHJlY29yZGVkIGluIHRoZQorLS0gY2F0YWxvZyBidXQgbm90 IHZhbGlkYXRlZCBieSB0aGUgZW5naW5lOyBOT1QgRU5GT1JDRUQgbXVzdCBhcHBlYXIgaW4KKy0t IHRoZSByZWNvbnN0cnVjdGVkIERETC4KK0NSRUFURSBUQUJMRSBub3RlbmZfdGd0IChpZCBpbnQg UFJJTUFSWSBLRVkpOworQ1JFQVRFIFRBQkxFIG5vdGVuZiAoCisgICAgYSBpbnQsCisgICAgQ09O U1RSQUlOVCBub3RlbmZfZmsgRk9SRUlHTiBLRVkgKGEpIFJFRkVSRU5DRVMgbm90ZW5mX3RndChp ZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICBOT1QgRU5GT1JDRUQKKyk7CitTRUxFQ1QgKiBG Uk9NIHBnX2dldF90YWJsZV9kZGwoJ25vdGVuZic6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7 CisKKy0tIFNlbGYtcmVmZXJlbmNpbmcgRks6IHRoZSBQSyBtdXN0IGFwcGVhciBiZWZvcmUgdGhl IEZLIHRoYXQgcmVmZXJlbmNlcyBpdC4KKy0tIFRoZSBjYXRhbG9nIHNjYW4gcmV0dXJucyBjb25z dHJhaW50cyBpbiBuYW1lIG9yZGVyOyB3aXRob3V0IHRoZSBmaXgsCistLSAic2VsZl9yZWZfcGFy ZW50X2lkX2ZrZXkiIHNvcnRzIGJlZm9yZSAic2VsZl9yZWZfcGtleSIgYW5kIHRoZSBGSyBBREQK Ky0tIENPTlNUUkFJTlQgZmFpbHMgd2l0aCAidGhlcmUgaXMgbm8gdW5pcXVlIGNvbnN0cmFpbnQg bWF0Y2hpbmcgZ2l2ZW4ga2V5cyIuCitDUkVBVEUgVEFCTEUgc2VsZl9yZWYgKAorICAgIGlkICAg ICAgICBpbnQgUFJJTUFSWSBLRVksCisgICAgcGFyZW50X2lkIGludCBSRUZFUkVOQ0VTIHNlbGZf cmVmKGlkKQorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnc2VsZl9yZWYnOjpy ZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworCistLSBXSVRIT1VUIE9WRVJMQVBTIG9uIGEgUFJJ TUFSWSBLRVkgKFBHIDE3KTogdGhlIHJhbmdlLXR5cGUgcGVyaW9kCistLSBjb2x1bW4gZm9ybXMg YSB0ZW1wb3JhbCBwcmltYXJ5IGtleTsgV0lUSE9VVCBPVkVSTEFQUyBtdXN0IGFwcGVhcgorLS0g aW5zaWRlIHRoZSBrZXkgY29sdW1uIGxpc3QgaW4gdGhlIHJlY29uc3RydWN0ZWQgQUxURVIgVEFC TEUuCistLSBCb3RoIGNvbHVtbnMgdXNlIHJhbmdlIHR5cGVzIHdpdGggbmF0aXZlIEdpU1Qgc3Vw cG9ydCBzbyBubworLS0gYnRyZWVfZ2lzdCBleHRlbnNpb24gaXMgbmVlZGVkLgorQ1JFQVRFIFRB QkxFIHRlbXBvcmFsX3BrICgKKyAgICBncnAgIGludDRyYW5nZSwKKyAgICBkdXJpbmcgZGF0ZXJh bmdlLAorICAgIFBSSU1BUlkgS0VZIChncnAsIGR1cmluZyBXSVRIT1VUIE9WRVJMQVBTKQorKTsK K1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgndGVtcG9yYWxfcGsnOjpyZWdjbGFzcywg b3duZXIgPT4gZmFsc2UpOworCistLSBJbmRleGVzOiBmdW5jdGlvbmFsIGFuZCBwYXJ0aWFsLiAg Q29uc3RyYWludC1iYWNraW5nIGluZGV4ZXMgYXJlCistLSBzdXBwcmVzc2VkICh0aGV5IGFyZSBl bWl0dGVkIGJ5IHRoZSBjb25zdHJhaW50IGxvb3ApLgorQ1JFQVRFIFRBQkxFIGlkeGQgKGlkIGlu dCBQUklNQVJZIEtFWSwgbmFtZSB0ZXh0KTsKK0NSRUFURSBJTkRFWCBpZHhkX2xvd2VyIE9OIGlk eGQgKGxvd2VyKG5hbWUpKTsKK0NSRUFURSBJTkRFWCBpZHhkX3BhcnRpYWwgT04gaWR4ZCAoaWQp IFdIRVJFIGlkID4gMTAwOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZHhkJzo6 cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKworLS0gSW5oZXJpdGFuY2UsIGluY2x1ZGluZyBh IGNoaWxkIERFRkFVTFQgb3ZlcnJpZGUgb24gYW4gaW5oZXJpdGVkIGNvbHVtbi4KK0NSRUFURSBU QUJMRSBwYXIgKGEgaW50IERFRkFVTFQgMSwgYiB0ZXh0KTsKK0NSRUFURSBUQUJMRSBjaCAoYyBp bnQpIElOSEVSSVRTIChwYXIpOworQUxURVIgVEFCTEUgY2ggQUxURVIgQ09MVU1OIGEgU0VUIERF RkFVTFQgOTk5OworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjaCc6OnJlZ2NsYXNz LCBvd25lciA9PiBmYWxzZSk7CisKKy0tIFBlci1jb2x1bW4gYXR0b3B0aW9uczogZW1pdHRlZCBh cyBBTFRFUiBDT0xVTU4gU0VUICguLi4pLgorQ1JFQVRFIFRBQkxFIGF0dG9wdCAoYSBpbnQsIGIg dGV4dCk7CitBTFRFUiBUQUJMRSBhdHRvcHQgQUxURVIgQ09MVU1OIGEgU0VUIChuX2Rpc3RpbmN0 ID0gMTAwKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYXR0b3B0Jzo6cmVnY2xh c3MsIG93bmVyID0+IGZhbHNlKTsKKworLS0gUGFydGl0aW9uZWQgdGFibGUgcGFyZW50cyAoUkFO R0UsIEhBU0gsIGFuZCBMSVNUKS4KK0NSRUFURSBUQUJMRSBwYXJ0ZWRfcmFuZ2UgKGlkIGludCwg ayBpbnQpIFBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFi bGVfZGRsKCdwYXJ0ZWRfcmFuZ2UnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworCitDUkVB VEUgVEFCTEUgcGFydGVkX2hhc2ggKGlkIGludCkgUEFSVElUSU9OIEJZIEhBU0ggKGlkKTsKK1NF TEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX2hhc2gnOjpyZWdjbGFzcywgb3du ZXIgPT4gZmFsc2UpOworCitDUkVBVEUgVEFCTEUgcGFydGVkX2xpc3QgKGlkIGludCwgcmVnaW9u IHRleHQpIFBBUlRJVElPTiBCWSBMSVNUIChyZWdpb24pOworU0VMRUNUICogRlJPTSBwZ19nZXRf dGFibGVfZGRsKCdwYXJ0ZWRfbGlzdCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisKKy0t IFBhcnRpdGlvbiBjaGlsZHJlbjogRlJPTS9UTywgV0lUSCAobW9kdWx1cywgcmVtYWluZGVyKSwg REVGQVVMVC4KK0NSRUFURSBUQUJMRSBwYXJ0ZWRfcmFuZ2VfMSBQQVJUSVRJT04gT0YgcGFydGVk X3JhbmdlCisgICAgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTAwKTsKK0FMVEVSIFRBQkxFIHBh cnRlZF9yYW5nZV8xIEFMVEVSIENPTFVNTiBrIFNFVCBERUZBVUxUIDc7CitTRUxFQ1QgKiBGUk9N IHBnX2dldF90YWJsZV9kZGwoJ3BhcnRlZF9yYW5nZV8xJzo6cmVnY2xhc3MsIG93bmVyID0+IGZh bHNlKTsKKworQ1JFQVRFIFRBQkxFIHBhcnRlZF9oYXNoXzAgUEFSVElUSU9OIE9GIHBhcnRlZF9o YXNoCisgICAgRk9SIFZBTFVFUyBXSVRIIChtb2R1bHVzIDIsIHJlbWFpbmRlciAwKTsKK1NFTEVD VCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX2hhc2hfMCc6OnJlZ2NsYXNzLCBvd25l ciA9PiBmYWxzZSk7CisKK0NSRUFURSBUQUJMRSBwYXJ0ZWRfcmFuZ2VfZGVmIFBBUlRJVElPTiBP RiBwYXJ0ZWRfcmFuZ2UgREVGQVVMVDsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgn cGFydGVkX3JhbmdlX2RlZic6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisKKy0tIE5vbi1j b25zdHJhaW50LWJhY2tlZCBpbmRleCBvbiBhIHBhcnRpdGlvbmVkIHRhYmxlOiB0aGUgcGFyZW50 J3MgaW5kZXggRERMCistLSBtdXN0IGFwcGVhciBvbmNlOyB0aGUgYXV0by1jcmVhdGVkIGNoaWxk IHBhcnRpdGlvbiBpbmRleGVzIChyZWxpc3BhcnRpdGlvbj10KQorLS0gbXVzdCBiZSBzdXBwcmVz c2VkIHNvIHRoZSBEREwgcm91bmQtdHJpcHMgd2l0aG91dCAicmVsYXRpb24gYWxyZWFkeSBleGlz dHMiLgorQ1JFQVRFIFRBQkxFIHBhcnRlZF9pZHggKGlkIGludCwgcmVnaW9uIHRleHQpIFBBUlRJ VElPTiBCWSBMSVNUIChyZWdpb24pOworQ1JFQVRFIFRBQkxFIHBhcnRlZF9pZHhfYSBQQVJUSVRJ T04gT0YgcGFydGVkX2lkeCBGT1IgVkFMVUVTIElOICgnYScpOworQ1JFQVRFIFVOSVFVRSBJTkRF WCBwYXJ0ZWRfaWR4X3VpZHggT04gcGFydGVkX2lkeCAoaWQsIHJlZ2lvbik7CitTRUxFQ1QgKiBG Uk9NIHBnX2dldF90YWJsZV9kZGwoJ3BhcnRlZF9pZHgnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFs c2UpOworCistLSBQbGFpbiAobm9uLXVuaXF1ZSkgQ1JFQVRFIElOREVYIG9uIHBhcnRpdGlvbmVk IHRhYmxlOiB0aGUgYXV0by1jcmVhdGVkIGNoaWxkCistLSBpbmRleCAocmVsaXNwYXJ0aXRpb249 dHJ1ZSkgaXMgc3VwcHJlc3NlZCwganVzdCBsaWtlIHRoZSBVTklRVUUgY2FzZS4KK0NSRUFURSBU QUJMRSBwYXJ0ZWRfcGxhaW4gKGlkIGludCwgdmFsIHRleHQpIFBBUlRJVElPTiBCWSBSQU5HRSAo aWQpOworQ1JFQVRFIFRBQkxFIHBhcnRlZF9wbGFpbl9hIFBBUlRJVElPTiBPRiBwYXJ0ZWRfcGxh aW4gRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTAwKTsKK0NSRUFURSBJTkRFWCBwYXJ0ZWRfcGxh aW5faWRfaWR4IE9OIHBhcnRlZF9wbGFpbiAoaWQpOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFi bGVfZGRsKCdwYXJ0ZWRfcGxhaW4nOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworCistLSBD b25zdHJhaW50LWJhY2tlZCBQUklNQVJZIEtFWSBvbiBwYXJ0aXRpb25lZCB0YWJsZTogdGhlIGNo aWxkJ3MgaW5oZXJpdGVkCistLSBjb25zdHJhaW50IChjb25pc2xvY2FsPWZhbHNlKSBhbmQgaXRz IGJhY2tpbmcgaW5kZXggYXJlIGJvdGggc3VwcHJlc3NlZC4KK0NSRUFURSBUQUJMRSBwYXJ0ZWRf cGsgKGlkIGludCwgcmVnaW9uIHRleHQpIFBBUlRJVElPTiBCWSBMSVNUIChyZWdpb24pOworQ1JF QVRFIFRBQkxFIHBhcnRlZF9wa19hIFBBUlRJVElPTiBPRiBwYXJ0ZWRfcGsgRk9SIFZBTFVFUyBJ TiAoJ2EnKTsKK0FMVEVSIFRBQkxFIHBhcnRlZF9wayBBREQgUFJJTUFSWSBLRVkgKGlkLCByZWdp b24pOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfcGsnOjpyZWdjbGFz cywgb3duZXIgPT4gZmFsc2UpOworCistLSBNdWx0aS1sZXZlbCAoc3ViLXBhcnRpdGlvbmVkKSB0 YWJsZSB3aXRoIGEgQ1JFQVRFIElOREVYIG9uIHRoZSByb290LgorLS0gVGhlIG1pZC1sZXZlbCBw YXJ0aXRpb25lZCBpbmRleCAocmVsaXNwYXJ0aXRpb249dHJ1ZSwgcmVsa2luZD0nSScpIGFuZCB0 aGUKKy0tIGxlYWYgaW5kZXggKHJlbGlzcGFydGl0aW9uPXRydWUsIHJlbGtpbmQ9J2knKSBhcmUg Ym90aCBzdXBwcmVzc2VkLgorQ1JFQVRFIFRBQkxFIHBhcnRlZF9zdWIgKGlkIGludCwgcmVnaW9u IHRleHQpIFBBUlRJVElPTiBCWSBMSVNUIChyZWdpb24pOworQ1JFQVRFIFRBQkxFIHBhcnRlZF9z dWJfYSBQQVJUSVRJT04gT0YgcGFydGVkX3N1YgorICAgIEZPUiBWQUxVRVMgSU4gKCdhJykgUEFS VElUSU9OIEJZIFJBTkdFIChpZCk7CitDUkVBVEUgVEFCTEUgcGFydGVkX3N1Yl9hMSBQQVJUSVRJ T04gT0YgcGFydGVkX3N1Yl9hIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwMCk7CitDUkVBVEUg SU5ERVggcGFydGVkX3N1Yl9pZF9pZHggT04gcGFydGVkX3N1YiAoaWQpOworU0VMRUNUICogRlJP TSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfc3ViJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNl KTsKKworLS0gUGFydGl0aW9uIGNoaWxkIHdpdGggaXRzIG93biBsb2NhbGx5LWRlZmluZWQgaW5k ZXggKHJlbGlzcGFydGl0aW9uPWZhbHNlKToKKy0tIHRoaXMgaXMgTk9UIGluaGVyaXRlZCBmcm9t IGFueSBwYXJlbnQgcGFydGl0aW9uZWQgaW5kZXggYW5kIG11c3QgYmUgZW1pdHRlZC4KK0NSRUFU RSBUQUJMRSBwYXJ0ZWRfY2hpbGRfaWR4IChpZCBpbnQsIHJlZ2lvbiB0ZXh0KSBQQVJUSVRJT04g QlkgTElTVCAocmVnaW9uKTsKK0NSRUFURSBUQUJMRSBwYXJ0ZWRfY2hpbGRfaWR4X2EgUEFSVElU SU9OIE9GIHBhcnRlZF9jaGlsZF9pZHggRk9SIFZBTFVFUyBJTiAoJ2EnKTsKK0NSRUFURSBJTkRF WCBwYXJ0ZWRfY2hpbGRfaWR4X2FfaWQgT04gcGFydGVkX2NoaWxkX2lkeF9hIChpZCk7CitTRUxF Q1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BhcnRlZF9jaGlsZF9pZHgnOjpyZWdjbGFzcywg b3duZXIgPT4gZmFsc2UpOworCistLSBNaXg6IHBhcmVudCBoYXMgYSBDUkVBVEUgSU5ERVggKGF1 dG8tcHJvcGFnYXRlZCB0byBjaGlsZCwgcmVsaXNwYXJ0aXRpb249dHJ1ZSwKKy0tIHN1cHByZXNz ZWQpIEFORCB0aGUgY2hpbGQgaGFzIGl0cyBvd24gbG9jYWwgaW5kZXggKHJlbGlzcGFydGl0aW9u PWZhbHNlLCBlbWl0dGVkKS4KK0NSRUFURSBUQUJMRSBwYXJ0ZWRfbWl4ZWQgKGlkIGludCwgcmVn aW9uIHRleHQpIFBBUlRJVElPTiBCWSBMSVNUIChyZWdpb24pOworQ1JFQVRFIFRBQkxFIHBhcnRl ZF9taXhlZF9hIFBBUlRJVElPTiBPRiBwYXJ0ZWRfbWl4ZWQgRk9SIFZBTFVFUyBJTiAoJ2EnKTsK K0NSRUFURSBJTkRFWCBwYXJ0ZWRfbWl4ZWRfaWQgT04gcGFydGVkX21peGVkIChpZCk7CitDUkVB VEUgSU5ERVggcGFydGVkX21peGVkX2FfcmVnaW9uIE9OIHBhcnRlZF9taXhlZF9hIChyZWdpb24p OworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfbWl4ZWQnOjpyZWdjbGFz cywgb3duZXIgPT4gZmFsc2UpOworCistLSBGSyBvbiBhIHBhcnRpdGlvbmVkIHRhYmxlOiBkZWNs YXJlZCBvbiB0aGUgcGFyZW50OyBwYXJ0aXRpb24gY2hpbGRyZW4gaW5oZXJpdAorLS0gdGhlIGNv bnN0cmFpbnQgd2l0aCBjb25pc2xvY2FsPWZhbHNlIGFuZCBtdXN0IG5vdCByZS1lbWl0IGl0Lgor Q1JFQVRFIFRBQkxFIHBhcnRlZF9ma190Z3QgKGlkIGludCBQUklNQVJZIEtFWSk7CitDUkVBVEUg VEFCTEUgcGFydGVkX2ZrIChpZCBpbnQsIHRndF9pZCBpbnQgUkVGRVJFTkNFUyBwYXJ0ZWRfZmtf dGd0KGlkKSkKKyAgICBQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFURSBUQUJMRSBwYXJ0 ZWRfZmtfYSBQQVJUSVRJT04gT0YgcGFydGVkX2ZrIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEw MCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BhcnRlZF9mayc6OnJlZ2NsYXNz LCBvd25lciA9PiBmYWxzZSk7CisKKy0tIFN0YXRpc3RpY3MgZGVjbGFyZWQgZXhwbGljaXRseSBv biBhIHBhcnRpdGlvbiBjaGlsZCAobm90IGF1dG8tcHJvcGFnYXRlZCk6CistLSB0aGUgY2hpbGQn cyBzdGF0aXN0aWNzIG9iamVjdCBhcHBlYXJzIGluc2lkZSB0aGUgY2hpbGQncyBEREwgYmxvY2su CitDUkVBVEUgVEFCTEUgcGFydGVkX3N0eCAoaWQgaW50LCByZWdpb24gdGV4dCwgdmFsIGZsb2F0 KSBQQVJUSVRJT04gQlkgTElTVCAocmVnaW9uKTsKK0NSRUFURSBUQUJMRSBwYXJ0ZWRfc3R4X2Eg UEFSVElUSU9OIE9GIHBhcnRlZF9zdHggRk9SIFZBTFVFUyBJTiAoJ2EnKTsKK0NSRUFURSBTVEFU SVNUSUNTIHBhcnRlZF9zdHhfc3RhdCAobmRpc3RpbmN0KSBPTiBpZCwgcmVnaW9uIEZST00gcGFy dGVkX3N0eDsKK0NSRUFURSBTVEFUSVNUSUNTIHBhcnRlZF9zdHhfYV9zdGF0IChuZGlzdGluY3Qp IE9OIGlkLCB2YWwgRlJPTSBwYXJ0ZWRfc3R4X2E7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJs ZV9kZGwoJ3BhcnRlZF9zdHgnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworRFJPUCBUQUJM RSBwYXJ0ZWRfc3R4OworCistLSBOTyBJTkhFUklUIENIRUNLIGNvbnN0cmFpbnQ6IHRoZSBOTyBJ TkhFUklUIGZsYWcgbXVzdCBhcHBlYXIgdmVyYmF0aW0gaW4gdGhlCistLSBpbmxpbmUgY29uc3Ry YWludCBkZWZpbml0aW9uIGluc2lkZSB0aGUgQ1JFQVRFIFRBQkxFIGJvZHkuCitDUkVBVEUgVEFC TEUgbm9pbmhjaGsgKGlkIGludCwgdmFsIGludCwKKyAgICBDT05TVFJBSU5UIHZhbF9wb3MgQ0hF Q0sgKHZhbCA+IDApIE5PIElOSEVSSVQpOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRs KCdub2luaGNoayc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CitEUk9QIFRBQkxFIG5vaW5o Y2hrOworCistLSBNdWx0aXBsZSBpbmhlcml0YW5jZSBwYXJlbnRzOiB0aGUgSU5IRVJJVFMgY2xh dXNlIG11c3QgbGlzdCBib3RoIHBhcmVudHMgaW4KKy0tIGRlY2xhcmF0aW9uIG9yZGVyOyBvbmx5 IHRoZSBsb2NhbGx5LWRlZmluZWQgY29sdW1uIGFwcGVhcnMgaW4gdGhlIGNvbHVtbiBsaXN0Lgor Q1JFQVRFIFRBQkxFIG1pX3AxIChhIGludCBERUZBVUxUIDEpOworQ1JFQVRFIFRBQkxFIG1pX3Ay IChiIHRleHQgREVGQVVMVCAneCcpOworQ1JFQVRFIFRBQkxFIG1pX2NoaWxkIChjIGZsb2F0KSBJ TkhFUklUUyAobWlfcDEsIG1pX3AyKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgn bWlfY2hpbGQnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworRFJPUCBUQUJMRSBtaV9wMSwg bWlfcDIgQ0FTQ0FERTsKKworLS0gUnVsZXMuCitDUkVBVEUgVEFCTEUgcnQgKGlkIGludCk7CitD UkVBVEUgVEFCTEUgcnRfbG9nIChpZCBpbnQpOworQ1JFQVRFIFJVTEUgcnRfbG9nX2luc2VydCBB UyBPTiBJTlNFUlQgVE8gcnQKKyAgICBETyBBTFNPIElOU0VSVCBJTlRPIHJ0X2xvZyBWQUxVRVMg KE5FVy5pZCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3J0Jzo6cmVnY2xhc3Ms IG93bmVyID0+IGZhbHNlKTsKKworLS0gRXh0ZW5kZWQgc3RhdGlzdGljcy4KK0NSRUFURSBUQUJM RSBzdHggKGEgaW50LCBiIGludCwgYyBpbnQpOworQ1JFQVRFIFNUQVRJU1RJQ1Mgc3R4X25kdiAo bmRpc3RpbmN0KSBPTiBhLCBiIEZST00gc3R4OworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVf ZGRsKCdzdHgnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworCistLSBSb3ctbGV2ZWwgc2Vj dXJpdHkgdG9nZ2xlcy4KK0NSRUFURSBUQUJMRSBybHMgKGlkIGludCk7CitBTFRFUiBUQUJMRSBy bHMgRU5BQkxFIFJPVyBMRVZFTCBTRUNVUklUWTsKK0FMVEVSIFRBQkxFIHJscyBGT1JDRSBST1cg TEVWRUwgU0VDVVJJVFk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3Jscyc6OnJl Z2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisKKy0tIFJFUExJQ0EgSURFTlRJVFk6IGVtaXR0ZWQg b25seSB3aGVuIG5vdCB0aGUgZGVmYXVsdC4KK0NSRUFURSBUQUJMRSByaV9mdWxsIChhIGludCk7 CitBTFRFUiBUQUJMRSByaV9mdWxsIFJFUExJQ0EgSURFTlRJVFkgRlVMTDsKK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgncmlfZnVsbCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7 CisKK0NSRUFURSBUQUJMRSByaV9pZHggKGEgaW50IE5PVCBOVUxMKTsKK0NSRUFURSBVTklRVUUg SU5ERVggcmlfaWR4X2EgT04gcmlfaWR4IChhKTsKK0FMVEVSIFRBQkxFIHJpX2lkeCBSRVBMSUNB IElERU5USVRZIFVTSU5HIElOREVYIHJpX2lkeF9hOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFi bGVfZGRsKCdyaV9pZHgnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworCistLSBVTkxPR0dF RCArIHJlbG9wdGlvbnMuCitDUkVBVEUgVU5MT0dHRUQgVEFCTEUgdW5vIChpZCBpbnQpIFdJVEgg KGZpbGxmYWN0b3IgPSA3MCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3Vubyc6 OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisKKy0tIFR5cGVkIHRhYmxlIChDUkVBVEUgVEFC TEUgT0YgdHlwZV9uYW1lKS4gIENvbHVtbnMgaW5oZXJpdGVkIGZyb20gdGhlCistLSB0eXBlIGVt aXQgbm90aGluZzsgbG9jYWxseS1hcHBsaWVkIERFRkFVTFQsIE5PVCBOVUxMIGFuZCBDSEVDSyBj b21lCistLSBvdXQgdGhyb3VnaCBhIHNpbmdsZSAiKGNvbCBXSVRIIE9QVElPTlMgLi4uKSIgbGlz dC4KK0NSRUFURSBUWVBFIHR5cGVkX3QgQVMgKGEgaW50LCBiIHRleHQpOworQ1JFQVRFIFRBQkxF IHR5cGVkX3BsYWluIE9GIHR5cGVkX3Q7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwo J3R5cGVkX3BsYWluJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKworQ1JFQVRFIFRBQkxF IHR5cGVkX292ZXIgT0YgdHlwZWRfdCAoCisgICAgYSBXSVRIIE9QVElPTlMgREVGQVVMVCA3IE5P VCBOVUxMLAorICAgIGIgV0lUSCBPUFRJT05TIE5PVCBOVUxMLAorICAgIENPTlNUUkFJTlQgYl9u b25lbXB0eSBDSEVDSyAobGVuZ3RoKGIpID4gMCkKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90 YWJsZV9kZGwoJ3R5cGVkX292ZXInOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworCistLSBU ZW1wb3JhcnkgdGFibGVzICsgT04gQ09NTUlULiAgVGVtcCB0YWJsZXMgbXVzdCBuZXZlciBiZSBl bWl0dGVkIHdpdGgKKy0tIHRoZSBzZXNzaW9uLXByaXZhdGUgcGdfdGVtcF9OTiBzY2hlbWEgcHJl Zml4IC0tIHRoZSBURU1QT1JBUlkga2V5d29yZAorLS0gYWxyZWFkeSBwbGFjZXMgdGhlIHRhYmxl IGluIHBnX3RlbXAgYW5kIHRoZSBwcmVmaXggaXMgbm9uLXJlcGxheWFibGUuCistLSBPTiBDT01N SVQgRFJPUCBvbmx5IGZpcmVzIGF0IGNvbW1pdCwgc28gdGhlIHF1ZXJpZXMgdGhhdCBuZWVkIHRv IHNlZQorLS0gdGhlIGNhdGFsb2cgZW50cnkgbXVzdCBydW4gaW4gdGhlIHNhbWUgdHJhbnNhY3Rp b24gYXMgdGhlIENSRUFURS4KK0JFR0lOOworQ1JFQVRFIFRFTVAgVEFCTEUgdGVtcF9kZWZhdWx0 IChpZCBpbnQpOworQ1JFQVRFIFRFTVAgVEFCTEUgdGVtcF9kZWxldGUgKGlkIGludCkgT04gQ09N TUlUIERFTEVURSBST1dTOworQ1JFQVRFIFRFTVAgVEFCTEUgdGVtcF9kcm9wIChpZCBpbnQpIE9O IENPTU1JVCBEUk9QOworCitTRUxFQ1QgbGluZSBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3RlbXBf ZGVmYXVsdCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSkgQVMgbGluZQorV0hFUkUgbGluZSBM SUtFICdDUkVBVEUgJSc7CisKK1NFTEVDVCBsaW5lIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgndGVt cF9kZWxldGUnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpIEFTIGxpbmUKK1dIRVJFIGxpbmUg TElLRSAnQ1JFQVRFICUnOworCitTRUxFQ1QgbGluZSBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3Rl bXBfZHJvcCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSkgQVMgbGluZQorV0hFUkUgbGluZSBM SUtFICdDUkVBVEUgJSc7CitST0xMQkFDSzsKKworLS0gUHJldHR5IG1vZGUuCitTRUxFQ1QgKiBG Uk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBw cmV0dHkgPT4gdHJ1ZSk7CisKKy0tIG9ubHlfa2luZHMgLyBleGNlcHRfa2luZHMgZ2F0aW5nOiBl YWNoIGVtaXRzIGVpdGhlciBvbmx5IHRoZSBsaXN0ZWQga2luZHMKKy0tIChvbmx5X2tpbmRzKSBv ciBldmVyeSBraW5kIGV4Y2VwdCB0aGUgbGlzdGVkIG9uZXMgKGV4Y2VwdF9raW5kcykuICBUaGUg dHdvCistLSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiAgS2luZCB2b2NhYnVsYXJ5OiB0YWJsZSwg aW5kZXgsCistLSBwcmltYXJ5X2tleSwgdW5pcXVlLCBjaGVjaywgZm9yZWlnbl9rZXksIGV4Y2x1 c2lvbiwgcnVsZSwKKy0tIHN0YXRpc3RpY3MsIHRyaWdnZXIsIHBvbGljeSwgcmxzLCByZXBsaWNh X2lkZW50aXR5LCBwYXJ0aXRpb24uCistLSBOT1QgTlVMTCBpcyBub3QgaW4gdGhlIHZvY2FidWxh cnkgLSBhbHdheXMgZW1pdHRlZCB0byBwcmV2ZW50CistLSBwcm9kdWNpbmcgc2NoZW1hcyB0aGF0 IHNpbGVudGx5IGFjY2VwdCBOVUxMcyB0aGUgc291cmNlIHdvdWxkCistLSBoYXZlIHJlamVjdGVk LgorLS0KKy0tIGV4Y2VwdF9raW5kcz1pbmRleCBoaWRlcyB0aGUgQ1JFQVRFIElOREVYIHN0YXRl bWVudHMuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2lkeGQnOjpyZWdjbGFzcywg b3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsnaW5kZXgnXSk7CisKKy0tIGV4 Y2VwdF9raW5kcz1wcmltYXJ5X2tleSx1bmlxdWUsY2hlY2ssZm9yZWlnbl9rZXksZXhjbHVzaW9u IGhpZGVzIGV2ZXJ5CistLSB0YWJsZS1sZXZlbCBjb25zdHJhaW50LiAgSW5saW5lIENIRUNLIGlu IHRoZSBDUkVBVEUgVEFCTEUgYm9keSBpcworLS0gc3VwcHJlc3NlZCB0b28uCitTRUxFQ1QgKiBG Uk9NIHBnX2dldF90YWJsZV9kZGwoJ2NvbnMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4 Y2VwdF9raW5kcyA9PiBBUlJBWVsncHJpbWFyeV9rZXknLCd1bmlxdWUnLCdjaGVjaycsJ2ZvcmVp Z25fa2V5JywnZXhjbHVzaW9uJ10pOworCistLSBleGNlcHRfa2luZHM9Zm9yZWlnbl9rZXkgc3Vw cHJlc3NlcyBvbmx5IEZPUkVJR04gS0VZIGNvbnN0cmFpbnRzOworLS0gUFJJTUFSWSBLRVksIFVO SVFVRSwgQ0hFQ0ssIGFuZCBuYW1lZCBOT1QgTlVMTCBzdGF5LiAgVGhpcyBpcyB0aGUKKy0tIGZp cnN0IHBhc3Mgb2YgdGhlIHR3by1wYXNzIEZLLWNsb25lIHdvcmtmbG93OiBlbWl0IHRhYmxlcyB3 aXRob3V0CistLSBjcm9zcy10YWJsZSBGS3MsIGxvYWQgZGF0YSwgdGhlbiByZS1ydW4gd2l0aCBv bmx5X2tpbmRzPWZvcmVpZ25fa2V5CistLSB0byBhZGQgdGhlbSBvbmNlIGFsbCB0YXJnZXRzIGV4 aXN0LgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjb25zJzo6cmVnY2xhc3MsIG93 bmVyID0+IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlbJ2ZvcmVpZ25fa2V5J10pOworCist LSBvbmx5X2tpbmRzPWZvcmVpZ25fa2V5IGlzIHRoZSBzZWNvbmQgcGFzcyBvZiB0aGUgdHdvLXBh c3MgRkstY2xvbmUKKy0tIHdvcmtmbG93OiBlbWl0IG9ubHkgdGhlIEFMVEVSIFRBQkxFIC4uLiBB REQgQ09OU1RSQUlOVCAuLi4gRk9SRUlHTgorLS0gS0VZIHJvd3M7IHRoZSBDUkVBVEUgVEFCTEUg YW5kIGV2ZXJ5IG5vbi1GSyBzdWItb2JqZWN0IGFyZQorLS0gc3VwcHJlc3NlZCAodGhlIHRhYmxl IGFscmVhZHkgZXhpc3RzIGZyb20gdGhlIGZpcnN0IHBhc3MpLgorU0VMRUNUICogRlJPTSBwZ19n ZXRfdGFibGVfZGRsKCdjb25zJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRz ID0+IEFSUkFZWydmb3JlaWduX2tleSddKTsKKworLS0gQSB0YWJsZSB3aXRoIG5vIGZvcmVpZ24g a2V5cyBwcm9kdWNlcyBubyByb3dzIHVuZGVyCistLSBvbmx5X2tpbmRzPWZvcmVpZ25fa2V5Lgor U0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdyZWZkJzo6cmVnY2xhc3MsIG93bmVyID0+ IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFSUkFZWydmb3JlaWduX2tleSddKTsKKworLS0gb25seV9r aW5kcz10YWJsZSBlbWl0cyBvbmx5IHRoZSBiYXJlIENSRUFURSBUQUJMRSAod2l0aCBhbnkgaW5s aW5lCistLSBjb2x1bW4tbGV2ZWwgTk9UIE5VTEwgYW5kIENIRUNLKSAtIG5vIGluZGV4ZXMsIG5v IFBSSU1BUlkgS0VZIEFMVEVSLAorLS0gbm8gb3RoZXIgc3ViLW9iamVjdHMuICBVc2VmdWwgZm9y IGNhcHR1cmluZyBhIHRhYmxlJ3Mgc2hhcGUgd2l0aG91dAorLS0gcHVsbGluZyBpbiBldmVyeXRo aW5nIGF0dGFjaGVkIHRvIGl0LgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZHhk Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFSUkFZWyd0YWJsZSdd KTsKKworLS0gb25seV9raW5kcz1jaGVjayBvbiBhIG5vbi1wYXJ0aXRpb24gdGFibGUuICBUaGUg Y29uc3RyYWludCBsb29wIG11c3QgZW1pdAorLS0gY29sdW1uLWxldmVsIGFuZCB0YWJsZS1sZXZl bCBDSEVDSyBjb25zdHJhaW50cyB2aWEgQUxURVIgVEFCTEUgaGVyZSwKKy0tIGJlY2F1c2UgdGhl IGlubGluZSBwYXRoIGluIENSRUFURSBUQUJMRSBuZXZlciBydW5zIChLSU5EX1RBQkxFIGlzCist LSBub3QgaW4gdGhlIGZpbHRlcikuCitDUkVBVEUgVEFCTEUgY2hrX29ubHkgKAorICAgIGlkICBp bnQgUFJJTUFSWSBLRVksCisgICAgcXR5IGludCBDSEVDSyAocXR5ID4gMCksCisgICAgQ09OU1RS QUlOVCBjaGtfb25seV9pZF9wb3MgQ0hFQ0sgKGlkID4gMCkKKyk7CitTRUxFQ1QgKiBGUk9NIHBn X2dldF90YWJsZV9kZGwoJ2Noa19vbmx5Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBvbmx5 X2tpbmRzID0+IEFSUkFZWydjaGVjayddKTsKK0RST1AgVEFCTEUgY2hrX29ubHk7CisKKy0tIG9u bHlfa2luZHM9cGFydGl0aW9uIG9uIGEgcGFydGl0aW9uZWQtdGFibGUgcGFyZW50OiBlYWNoIGNo aWxkJ3MgZnVsbCBEREwKKy0tIGlzIGVtaXR0ZWQgKENSRUFURSBUQUJMRSAuLi4gUEFSVElUSU9O IE9GIC4uLikuICBUaGUgInBhcnRpdGlvbiIKKy0tIGtleXdvcmQgaXMgYSBnYXRlIGF0IHRoZSBw YXJlbnQgbGV2ZWw7IGl0IGlzIHN0cmlwcGVkIGZyb20gdGhlCistLSBwcm9wYWdhdGVkIGZpbHRl ciBzbyB0aGUgY2hpbGQgZG9lcyBub3QgZXhjbHVkZSBpdHMgb3duCistLSBDUkVBVEUgVEFCTEUu CitDUkVBVEUgVEFCTEUgcF9vbmx5IChpZCBpbnQsIHZhbCB0ZXh0KSBQQVJUSVRJT04gQlkgUkFO R0UgKGlkKTsKK0NSRUFURSBUQUJMRSBwX29ubHlfYSBQQVJUSVRJT04gT0YgcF9vbmx5IEZPUiBW QUxVRVMgRlJPTSAoMCkgVE8gKDEwMCk7CitDUkVBVEUgVEFCTEUgcF9vbmx5X2IgUEFSVElUSU9O IE9GIHBfb25seSBGT1IgVkFMVUVTIEZST00gKDEwMCkgVE8gKDIwMCk7CitTRUxFQ1QgKiBGUk9N IHBnX2dldF90YWJsZV9kZGwoJ3Bfb25seSc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25s eV9raW5kcyA9PiBBUlJBWVsncGFydGl0aW9uJ10pOworRFJPUCBUQUJMRSBwX29ubHk7CisKKy0t IG9ubHlfa2luZHMgYW5kIGV4Y2VwdF9raW5kcyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLgorU0VM RUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjb25zJzo6cmVnY2xhc3MsIG93bmVyID0+IGZh bHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ubHlfa2luZHMgPT4gQVJSQVlb J2ZvcmVpZ25fa2V5J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0X2tp bmRzID0+IEFSUkFZWydmb3JlaWduX2tleSddKTsKKworLS0gUHViL3N1YiBzY2hlbWEgY2xvbmU6 IGtlZXAgdGhlIHRhYmxlIGFuZCBpdHMgcHJpbWFyeSBrZXksIGRyb3AgdGhlCistLSByZXN0IG9m IHRoZSBjb25zdHJhaW50cyBzbyB0aGUgc3Vic2NyaWJlciBjYW4gcmVwbGljYXRlIHdpdGhvdXQK Ky0tIHB1bGxpbmcgY3Jvc3MtdGFibGUgZGVwZW5kZW5jaWVzIGFsb25nLgorU0VMRUNUICogRlJP TSBwZ19nZXRfdGFibGVfZGRsKCdjb25zJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBleGNl cHRfa2luZHMgPT4gQVJSQVlbJ3VuaXF1ZScsJ2NoZWNrJywnZm9yZWlnbl9rZXknLCdleGNsdXNp b24nXSk7CisKKy0tIGV4Y2VwdF9raW5kcz1ydWxlIGhpZGVzIHRoZSBDUkVBVEUgUlVMRS4KK1NF TEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncnQnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFs c2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsncnVsZSddKTsKKworLS0gZXhjZXB0X2tpbmRzPXN0 YXRpc3RpY3MgaGlkZXMgdGhlIENSRUFURSBTVEFUSVNUSUNTLgorU0VMRUNUICogRlJPTSBwZ19n ZXRfdGFibGVfZGRsKCdzdHgnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5k cyA9PiBBUlJBWVsnc3RhdGlzdGljcyddKTsKKworLS0gZXhjZXB0X2tpbmRzPXJscyBoaWRlcyB0 aGUgRU5BQkxFL0ZPUkNFIFJPVyBMRVZFTCBTRUNVUklUWSB0b2dnbGVzLgorU0VMRUNUICogRlJP TSBwZ19nZXRfdGFibGVfZGRsKCdybHMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2Vw dF9raW5kcyA9PiBBUlJBWVsncmxzJ10pOworCistLSBleGNlcHRfa2luZHM9cmVwbGljYV9pZGVu dGl0eSBoaWRlcyB0aGUgUkVQTElDQSBJREVOVElUWSBjbGF1c2UuCitTRUxFQ1QgKiBGUk9NIHBn X2dldF90YWJsZV9kZGwoJ3JpX2Z1bGwnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2Vw dF9raW5kcyA9PiBBUlJBWVsncmVwbGljYV9pZGVudGl0eSddKTsKKworLS0gUGFydGl0aW9uIGNo aWxkcmVuIGFyZSBlbWl0dGVkIGJ5IGRlZmF1bHQ7IGV4Y2VwdF9raW5kcz1wYXJ0aXRpb24KKy0t IHN1cHByZXNzZXMgdGhlbSBzbyBvbmx5IHRoZSBwYXJ0aXRpb25lZC10YWJsZSBwYXJlbnQgY29t ZXMgb3V0LgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfcmFuZ2UnOjpy ZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsncGFydGl0aW9u J10pOworCistLSBXaGl0ZXNwYWNlIGFyb3VuZCBraW5kIG5hbWVzIGlzIGFsbG93ZWQ7IGNhc2Ug aXMgZm9sZGVkLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZHhkJzo6cmVnY2xh c3MsIG93bmVyID0+IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlbJyAgSU5ERVggICcsJyAg UlVMRSAgJ10pOworCistLSBzY2hlbWFfcXVhbGlmaWVkPWZhbHNlIHN0cmlwcyB0aGUgc2NoZW1h IGZyb20gdGhlIHRhcmdldCB0YWJsZSBpdHNlbGYKKy0tIGFuZCBmcm9tIHNhbWUtc2NoZW1hIHNp YmxpbmcgcmVmZXJlbmNlcyAoaW5oZXJpdGFuY2UvcGFydGl0aW9uCistLSBwYXJlbnRzLCBpZGVu dGl0eSBzZXF1ZW5jZXMgaW4gdGhlIHNhbWUgc2NoZW1hKSwgd2hpbGUgY3Jvc3Mtc2NoZW1hCist LSByZWZlcmVuY2VzIGFyZSBrZXB0IHF1YWxpZmllZCBmb3IgY29ycmVjdG5lc3MuCistLQorLS0g QmFyZSBDUkVBVEUgVEFCTEUgZm9yIGFuIG9yZGluYXJ5IHRhYmxlLgorU0VMRUNUICogRlJPTSBw Z19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWFfcXVhbGlmaWVkID0+IGZhbHNlKTsKKwor LS0gSU5IRVJJVFMgcGFyZW50IGluIHRoZSBzYW1lIHNjaGVtYSBpcyBlbWl0dGVkIHVucXVhbGlm aWVkLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjaCc6OnJlZ2NsYXNzLCBvd25l ciA9PiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWFfcXVhbGlm aWVkID0+IGZhbHNlKTsKKworLS0gUGFydGl0aW9uIHBhcmVudCBpbiB0aGUgc2FtZSBzY2hlbWEg aXMgZW1pdHRlZCB1bnF1YWxpZmllZC4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgn cGFydGVkX3JhbmdlXzEnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2NoZW1hX3F1YWxpZmllZCA9PiBmYWxzZSk7CisKKy0tIENyb3Nz LXNjaGVtYSBGSyB0YXJnZXQga2VlcHMgcXVhbGlmaWNhdGlvbi4gIFRoZSAncmVmZCcgdGFibGUg aXMgaW4KKy0tIHBndGJsX2RkbF90ZXN0OyBwbGFjZSBhbiBGSyB0YXJnZXQgaW4gYSBkaWZmZXJl bnQgc2NoZW1hIGFuZCB2ZXJpZnkgaXQKKy0tIHN0YXlzIHF1YWxpZmllZCBldmVuIHdpdGggc2No ZW1hX3F1YWxpZmllZD1mYWxzZS4KK0NSRUFURSBTQ0hFTUEgcGd0YmxfZGRsX290aGVyOworQ1JF QVRFIFRBQkxFIHBndGJsX2RkbF9vdGhlci5wYXJlbnQgKGlkIGludCBQUklNQVJZIEtFWSk7CitD UkVBVEUgVEFCTEUgeHNjaGVtYV9mayAoCisgICAgaWQgIGludCBQUklNQVJZIEtFWSwKKyAgICBw aWQgaW50IFJFRkVSRU5DRVMgcGd0YmxfZGRsX290aGVyLnBhcmVudAorKTsKK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgneHNjaGVtYV9mayc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxz ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWFfcXVhbGlmaWVkID0+IGZh bHNlKTsKKworLS0gQ3Jvc3Mtc2NoZW1hIEZLIHdob3NlIHRhcmdldCBzY2hlbWEgbmFtZSBlbmRz IHdpdGggdGhlIGJhc2Ugc2NoZW1hIG5hbWUKKy0tIChlLmcuICJ4cGd0YmxfZGRsX3Rlc3QiIGVu ZHMgd2l0aCAicGd0YmxfZGRsX3Rlc3QiKS4gIEEgcG9zdC1ob2MgdGV4dAorLS0gc3RyaXAgd291 bGQgbWFuZ2xlICJ4cGd0YmxfZGRsX3Rlc3QucmVmdGJsIiBpbnRvICJ4cmVmdGJsIjsgZGVjaWRp bmcKKy0tIHF1YWxpZmljYXRpb24gYXQgZ2VuZXJhdGlvbiB0aW1lIGF2b2lkcyB0aGUgcHJvYmxl bSBlbnRpcmVseS4KK0NSRUFURSBTQ0hFTUEgeHBndGJsX2RkbF90ZXN0OworQ1JFQVRFIFRBQkxF IHhwZ3RibF9kZGxfdGVzdC5yZWZ0YmwgKGlkIGludCBQUklNQVJZIEtFWSk7CitDUkVBVEUgVEFC TEUgc3VmZml4X3NjaGVtYV9mayAoCisgICAgaWQgIGludCBQUklNQVJZIEtFWSwKKyAgICByZWYg aW50IFJFRkVSRU5DRVMgeHBndGJsX2RkbF90ZXN0LnJlZnRibAorKTsKK1NFTEVDVCAqIEZST00g cGdfZ2V0X3RhYmxlX2RkbCgnc3VmZml4X3NjaGVtYV9mayc6OnJlZ2NsYXNzLCBvd25lciA9PiBm YWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWFfcXVhbGlmaWVkID0+ IGZhbHNlKTsKK0RST1AgVEFCTEUgc3VmZml4X3NjaGVtYV9mazsKK0RST1AgU0NIRU1BIHhwZ3Ri bF9kZGxfdGVzdCBDQVNDQURFOworCistLSBJZGVudGl0eSBjb2x1bW4gd2l0aCBhIGN1c3RvbSBz ZXF1ZW5jZSBuYW1lIGluIHRoZSBzYW1lIHNjaGVtYSBpcworLS0gZW1pdHRlZCB1bnF1YWxpZmll ZC4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnaWRfY3VzdG9tJzo6cmVnY2xhc3Ms IG93bmVyID0+IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYV9x dWFsaWZpZWQgPT4gZmFsc2UpOworCistLSBSb3VuZC10cmlwOiB3aXRoIHNjaGVtYV9xdWFsaWZp ZWQ9ZmFsc2UsIGFmdGVyIFNFVCBzZWFyY2hfcGF0aCB0aGUKKy0tIERETCBjYW4gYmUgcmVwbGF5 ZWQgaW50byBhIGRpZmZlcmVudCB0YXJnZXQgc2NoZW1hLgorQ1JFQVRFIFNDSEVNQSBwZ3RibF9k ZGxfcmVwbGF5OworRE8gJCQKK0RFQ0xBUkUKKyAgICBzdG10IHRleHQ7CitCRUdJTgorICAgIFNF VCBMT0NBTCBzZWFyY2hfcGF0aCA9IHBndGJsX2RkbF9yZXBsYXk7CisgICAgRk9SIHN0bXQgSU4K KyAgICAgICAgU0VMRUNUIGxpbmUgRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwZ3RibF9kZGxfdGVz dC5iYXNpYyc6OnJlZ2NsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgb3duZXIgPT4gZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzY2hlbWFfcXVhbGlmaWVkID0+IGZhbHNlKSBBUyBsaW5lCisgICAgTE9PUAorICAg ICAgICBFWEVDVVRFIHN0bXQ7CisgICAgRU5EIExPT1A7CitFTkQgJCQ7CitTRUxFQ1QgcmVsbmFt ZXNwYWNlOjpyZWduYW1lc3BhY2U6OnRleHQsIHJlbG5hbWUKK0ZST00gcGdfY2xhc3MgV0hFUkUg b2lkID0gJ3BndGJsX2RkbF9yZXBsYXkuYmFzaWMnOjpyZWdjbGFzczsKK0RST1AgU0NIRU1BIHBn dGJsX2RkbF9yZXBsYXkgQ0FTQ0FERTsKK0RST1AgVEFCTEUgeHNjaGVtYV9mazsKK0RST1AgU0NI RU1BIHBndGJsX2RkbF9vdGhlciBDQVNDQURFOworCistLSBDcm9zcy1zY2hlbWEgcGFydGl0aW9u IGNoaWxkIHdpdGggc2NoZW1hX3F1YWxpZmllZD1mYWxzZTogdGhlIGNoaWxkIG11c3QKKy0tIGNh cnJ5IGl0cyBvd24gc2NoZW1hIHByZWZpeCBzbyB0aGUgb3V0cHV0IGlzIHVuYW1iaWd1b3VzIHJl Z2FyZGxlc3Mgb2YgdGhlCistLSBjYWxsZXIncyBzZWFyY2hfcGF0aC4gIEJlZm9yZSB0aGUgZml4 LCB0aGUgY2hpbGQgd2FzIGVtaXR0ZWQgYXMgdGhlIGJhcmUKKy0tIG5hbWUgInB0X2MiIChsYW5k aW5nIGluIHdoaWNoZXZlciBzY2hlbWEgaXMgZmlyc3QgaW4gc2VhcmNoX3BhdGgpIHdoaWxlCist LSB0aGUgcGFyZW50IHJlZmVyZW5jZSBpbnNpZGUgdGhlIENSRUFURSBUQUJMRSBjYW1lIG91dCBh cyB0aGUgZnVsbHktcXVhbGlmaWVkCistLSAicGd0YmxfZGRsX3BhcnRfcy5wdCIsIG1ha2luZyB0 aGUgRERMIGluY29uc2lzdGVudCBhbmQgdW5yZXBsYXlhYmxlLgorQ1JFQVRFIFNDSEVNQSBwZ3Ri bF9kZGxfcGFydF9zOworQ1JFQVRFIFNDSEVNQSBwZ3RibF9kZGxfcGFydF9vdGhlcjsKK0NSRUFU RSBUQUJMRSBwZ3RibF9kZGxfcGFydF9zLnB0IChpZCBpbnQsIHZhbCBpbnQpIFBBUlRJVElPTiBC WSBSQU5HRSAoaWQpOworQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF9wYXJ0X290aGVyLnB0X2MKKyAg ICBQQVJUSVRJT04gT0YgcGd0YmxfZGRsX3BhcnRfcy5wdAorICAgIEZPUiBWQUxVRVMgRlJPTSAo MCkgVE8gKDEwMCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BndGJsX2RkbF9w YXJ0X3MucHQnOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25l ciA9PiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWFfcXVhbGlm aWVkID0+IGZhbHNlKTsKK0RST1AgU0NIRU1BIHBndGJsX2RkbF9wYXJ0X3MgQ0FTQ0FERTsKK0RS T1AgU0NIRU1BIHBndGJsX2RkbF9wYXJ0X290aGVyIENBU0NBREU7CisKKy0tIExvY2FsbHktZGVj bGFyZWQgQ0hFQ0sgb24gYSBwYXJ0aXRpb24gY2hpbGQgaGFzIG5vIGlubGluZSBjb2x1bW4KKy0t IGxpc3QgdG8gbGl2ZSBpbiAoUEFSVElUSU9OIE9GIGZvcm0pLCBzbyBpdCBtdXN0IGNvbWUgb3V0 IGFzIGEKKy0tIHNlcGFyYXRlIEFMVEVSIFRBQkxFIC4uLiBBREQgQ09OU1RSQUlOVCBzdGF0ZW1l bnQuCitDUkVBVEUgVEFCTEUgcGFydGVkX2NoayAoaWQgaW50LCB2YWwgaW50KSBQQVJUSVRJT04g QlkgUkFOR0UgKGlkKTsKK0NSRUFURSBUQUJMRSBwYXJ0ZWRfY2hrX2NoaWxkIFBBUlRJVElPTiBP RiBwYXJ0ZWRfY2hrCisgICAgKENPTlNUUkFJTlQgY2hrX2lubGluZSBDSEVDSyAodmFsID4gMCkp CisgICAgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTAwKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0 X3RhYmxlX2RkbCgncGFydGVkX2Noa19jaGlsZCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7 CitEUk9QIFRBQkxFIHBhcnRlZF9jaGs7CisKKy0tIEluaGVyaXRhbmNlIGNoaWxkcmVuIG9mIGEg cGFyZW50IHdpdGggYSBnZW5lcmF0ZWQgY29sdW1uIHNob3VsZCBub3QKKy0tIGVtaXQgYW4gQUxU RVIgQ09MVU1OIC4uLiBTRVQgREVGQVVMVCBmb3IgdGhlIGluaGVyaXRlZCBnZW5lcmF0ZWQKKy0t IGNvbHVtbjogdGhlIEdFTkVSQVRFRCBleHByZXNzaW9uIGNhcnJpZXMgZG93biB0aHJvdWdoIGlu aGVyaXRhbmNlLAorLS0gYW5kIFNFVCBERUZBVUxUIHdvdWxkIGZhaWwgYXQgcmVwbGF5IGFnYWlu c3QgYSBnZW5lcmF0ZWQgY29sdW1uLgorQ1JFQVRFIFRBQkxFIHBhcl9nZW4gKAorICAgIGlkIGlu dCwKKyAgICBnICBpbnQgR0VORVJBVEVEIEFMV0FZUyBBUyAoaWQgKiAyKSBTVE9SRUQKKyk7CitD UkVBVEUgVEFCTEUgY2hfZ2VuICgpIElOSEVSSVRTIChwYXJfZ2VuKTsKK1NFTEVDVCAqIEZST00g cGdfZ2V0X3RhYmxlX2RkbCgnY2hfZ2VuJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKK0RS T1AgVEFCTEUgcGFyX2dlbiBDQVNDQURFOworCistLSBBIHVzZXItbmFtZWQgTk9UIE5VTEwgb24g YSBsb2NhbCBjb2x1bW4gaXMgZW1pdHRlZCBpbmxpbmUgYXMKKy0tICJDT05TVFJBSU5UIG5hbWUg Tk9UIE5VTEwiIHNvIHRoZSBvcmlnaW5hbCBuYW1lIGlzIHByZXNlcnZlZC4gIEFuCistLSBhdXRv LW5hbWVkIE5PVCBOVUxMIG9uIGEgbG9jYWwgY29sdW1uIGlzIGVtaXR0ZWQgYXMgYSBwbGFpbiBp bmxpbmUKKy0tICJOT1QgTlVMTCIgLSBQRyByZS1jcmVhdGVzIHRoZSBhdXRvLW5hbWVkIGNvbnN0 cmFpbnQgd2hlbiBDUkVBVEUKKy0tIFRBQkxFIHJ1bnMsIHNvIHRoZSBjb25zdHJhaW50IGxvb3Ag c2tpcHMgYm90aCBmb3JtcyB0byBhdm9pZCB0aGUKKy0tIHJlZHVuZGFudCAoYW5kIG9uIHRhYmxl LXJlbmFtZSBvciBzZXF1ZW5jZS1jb2xsaXNpb24sIGJyb2tlbikKKy0tIEFMVEVSIFRBQkxFIC4u LiBBREQgQ09OU1RSQUlOVCAuLi4gTk9UIE5VTEwgc3RhdGVtZW50LgorQ1JFQVRFIFRBQkxFIG5u X25hbWVkICgKKyAgICBhIGludCBDT05TVFJBSU5UIG15X25uIE5PVCBOVUxMLAorICAgIGIgaW50 IE5PVCBOVUxMCispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdubl9uYW1lZCc6 OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CitEUk9QIFRBQkxFIG5uX25hbWVkOworCistLSBS ZW5hbWluZyB0aGUgdGFibGUgYWZ0ZXIgYW4gSURFTlRJVFkgTk9UIE5VTEwgY29sdW1uIHdhcyBk ZWNsYXJlZAorLS0gbGVhdmVzIHRoZSBhdXRvLW5hbWVkIGNvbnN0cmFpbnQgZnJvemVuIGF0IHRo ZSBvcmlnaW5hbCBuYW1lLCB3aGljaAorLS0gbm8gbG9uZ2VyIG1hdGNoZXMgdGhlIHBvc3QtcmVu YW1lICI8dGFibGU+Xzxjb2w+X25vdF9udWxsIiBwYXR0ZXJuLgorLS0gVGhlIGVtaXR0ZWQgRERM IG11c3Qgc3RpbGwgcm91bmQtdHJpcDogdGhlIGNvbnN0cmFpbnQgbG9vcCBtdXN0IG5vdAorLS0g QUxURVIgVEFCTEUgLi4uIEFERCBDT05TVFJBSU5UIGEgc2Vjb25kIE5PVCBOVUxMLCBzaW5jZSBD UkVBVEUgVEFCTEUKKy0tIHdpdGggdGhlIGlubGluZSBJREVOVElUWSBhbHJlYWR5IGNyZWF0ZXMg YW4gYXV0by1OT1QtTlVMTCB1bmRlciB0aGUKKy0tIG5ldyB0YWJsZSBuYW1lIGFuZCBQRyBvbmx5 IHBlcm1pdHMgb25lIE5PVCBOVUxMIHBlciBjb2x1bW4uCitDUkVBVEUgVEFCTEUgbm5fcmVuYW1l ZCAoCisgICAgYSBpbnQgR0VORVJBVEVEIEFMV0FZUyBBUyBJREVOVElUWSBOT1QgTlVMTAorKTsK K0FMVEVSIFRBQkxFIG5uX3JlbmFtZWQgUkVOQU1FIFRPIG5uX3JlbmFtZWQyOworU0VMRUNUICog RlJPTSBwZ19nZXRfdGFibGVfZGRsKCdubl9yZW5hbWVkMic6OnJlZ2NsYXNzLCBvd25lciA9PiBm YWxzZSk7CitEUk9QIFRBQkxFIG5uX3JlbmFtZWQyOworCistLSBMb2NhbGx5LWRlY2xhcmVkIE5P VCBOVUxMIG9uIGFuIGluaGVyaXRlZCBjb2x1bW4uICBUaGUgY29sdW1uIGl0c2VsZgorLS0gaXMg b21pdHRlZCBmcm9tIHRoZSBjaGlsZCdzIG93biBjb2x1bW4gbGlzdCAoYXR0aXNsb2NhbD1mYWxz ZSksIHNvIHRoZQorLS0gdXNlci1uYW1lZCBOT1QgTlVMTCBpcyBlbWl0dGVkIGFzIGEgdGFibGUt bGV2ZWwgQ09OU1RSQUlOVCBjbGF1c2UgaW4KKy0tIHRoZSBDUkVBVEUgVEFCTEUgYm9keS4gIFRo aXMgcHJlc2VydmVzIHRoZSBuYW1lIGFuZCBwcmV2ZW50cyBhIGNvbGxpc2lvbgorLS0gd2hlbiB0 aGUgcGFyZW50IGxhdGVyIHByb3BhZ2F0ZXMgaXRzIG93biBOT1QgTlVMTCB0byB0aGUgY2hpbGQu CitDUkVBVEUgVEFCTEUgbm5fcGFyIChhIGludCk7CitDUkVBVEUgVEFCTEUgbm5fY2ggKGIgaW50 KSBJTkhFUklUUyAobm5fcGFyKTsKK0FMVEVSIFRBQkxFIG5uX2NoIEFERCBDT05TVFJBSU5UIG15 X25uIE5PVCBOVUxMIGE7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ25uX2NoJzo6 cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKK0RST1AgVEFCTEUgbm5fcGFyIENBU0NBREU7CisK Ky0tIFBhcnRpdGlvbiBjaGlsZCB3aGVyZSB0aGUgcGFyZW50J3MgZGVmYXVsdCB3YXMgZXhwbGlj aXRseSBkcm9wcGVkLgorLS0gQWZ0ZXIgUEFSVElUSU9OIE9GIHRoZSBwYXJlbnQgZGVmYXVsdCBp cyByZS1hcHBsaWVkOyBEUk9QIERFRkFVTFQKKy0tIG11c3QgYmUgZW1pdHRlZCB0byByZXN0b3Jl IHRoZSBkcm9wcGVkIHN0YXRlLgorQ1JFQVRFIFRBQkxFIGRyb3BfZGVmX3BhciAoYSBpbnQgREVG QVVMVCA5OSkgUEFSVElUSU9OIEJZIExJU1QgKGEpOworQ1JFQVRFIFRBQkxFIGRyb3BfZGVmX2No aWxkIFBBUlRJVElPTiBPRiBkcm9wX2RlZl9wYXIgRk9SIFZBTFVFUyBJTiAoMSk7CitBTFRFUiBU QUJMRSBPTkxZIGRyb3BfZGVmX2NoaWxkIEFMVEVSIENPTFVNTiBhIERST1AgREVGQVVMVDsKK1NF TEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnZHJvcF9kZWZfY2hpbGQnOjpyZWdjbGFzcywg b3duZXIgPT4gZmFsc2UpOworRFJPUCBUQUJMRSBkcm9wX2RlZl9wYXI7CisKKy0tIE5hbWVkIE5P VCBOVUxMIG9uIGEgcGFydGl0aW9uIGNoaWxkIHRoYXQgd2FzIGF0dGFjaGVkIGZyb20gYSBwcmUt ZXhpc3RpbmcKKy0tIHRhYmxlLiAgVGhlIG5hbWUgbXVzdCBiZSBwcmVzZXJ2ZWQgdmlhIHRoZSBQ QVJUSVRJT04gT0YgY29sdW1uIHNwZWMgbGlzdAorLS0gc28gdGhlIGNoaWxkIGtlZXBzIGl0cyBs b2NhbCBuYW1lIHJhdGhlciB0aGFuIGluaGVyaXRpbmcgdGhlIHBhcmVudCdzCistLSBhdXRvLWdl bmVyYXRlZCBuYW1lLgorQ1JFQVRFIFRBQkxFIG5uX3BhcnRfcGFyIChhIGludCBOT1QgTlVMTCkg UEFSVElUSU9OIEJZIExJU1QgKGEpOworQ1JFQVRFIFRBQkxFIG5uX3BhcnRfY2ggKGEgaW50IENP TlNUUkFJTlQgbm5fcGFydF9jaF9ubiBOT1QgTlVMTCk7CitBTFRFUiBUQUJMRSBubl9wYXJ0X3Bh ciBBVFRBQ0ggUEFSVElUSU9OIG5uX3BhcnRfY2ggRk9SIFZBTFVFUyBJTiAoMSk7CitTRUxFQ1Qg KiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ25uX3BhcnRfY2gnOjpyZWdjbGFzcywgb3duZXIgPT4g ZmFsc2UpOworRFJPUCBUQUJMRSBubl9wYXJ0X3BhcjsKKworLS0gTmFtZWQgTk9UIE5VTEwgaW4g YW4gSU5IRVJJVFMgY2hpbGQgd2hlcmUgdGhlIHBhcmVudCBhbHNvIGdldHMgYSBOT1QgTlVMTAor LS0gbGF0ZXI6IHRoZSBjaGlsZCBuYW1lIG11c3Qgc3Vydml2ZSB2aWEgdGhlIGlubGluZSBDT05T VFJBSU5UIGNsYXVzZSBzbyBpdAorLS0gZG9lcyBub3QgY29sbGlkZSB3aXRoIHRoZSBwcm9wYWdh dGVkIHBhcmVudCBOT1QgTlVMTC4KK0NSRUFURSBUQUJMRSBubl9pbmhfcGFyIChhIGludCk7CitD UkVBVEUgVEFCTEUgbm5faW5oX2NoIChiIGludCkgSU5IRVJJVFMgKG5uX2luaF9wYXIpOworQUxU RVIgVEFCTEUgbm5faW5oX2NoIEFERCBDT05TVFJBSU5UIG5uX2luaF9jaF9ubiBOT1QgTlVMTCBh OworQUxURVIgVEFCTEUgbm5faW5oX3BhciBBREQgQ09OU1RSQUlOVCBubl9pbmhfcGFyX25uIE5P VCBOVUxMIGE7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ25uX2luaF9jaCc6OnJl Z2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CitEUk9QIFRBQkxFIG5uX2luaF9wYXIgQ0FTQ0FERTsK KworLS0gSW52YWxpZCBpbmRleCAobGVmdCBieSBhIGZhaWxlZCBDUkVBVEUgSU5ERVggQ09OQ1VS UkVOVExZKSBtdXN0IGJlIHNraXBwZWQuCitDUkVBVEUgVEFCTEUgaW52X2lkeCAoeCBpbnQpOwor SU5TRVJUIElOVE8gaW52X2lkeCBWQUxVRVMgKDEpLCAoMSk7CitDUkVBVEUgVU5JUVVFIElOREVY IENPTkNVUlJFTlRMWSBpbnZfaWR4X3VpZHggT04gaW52X2lkeCAoeCk7CitTRUxFQ1QgKiBGUk9N IHBnX2dldF90YWJsZV9kZGwoJ2ludl9pZHgnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOwor RFJPUCBUQUJMRSBpbnZfaWR4OworCistLSBDTFVTVEVSIE9OOiBlbWl0dGVkIGFmdGVyIHRoZSBp bmRleCBpcyBjcmVhdGVkLgorQ1JFQVRFIFRBQkxFIGNsdXN0ZXJfdGJsIChpZCBpbnQsIHZhbCB0 ZXh0KTsKK0NSRUFURSBJTkRFWCBjbHVzdGVyX3RibF9pZCBPTiBjbHVzdGVyX3RibCAoaWQpOwor Q0xVU1RFUiBjbHVzdGVyX3RibCBVU0lORyBjbHVzdGVyX3RibF9pZDsKK1NFTEVDVCAqIEZST00g cGdfZ2V0X3RhYmxlX2RkbCgnY2x1c3Rlcl90YmwnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2Up OworRFJPUCBUQUJMRSBjbHVzdGVyX3RibDsKKworLS0gRGlzYWJsZWQgcnVsZTogRElTQUJMRSBS VUxFIG11c3QgYmUgZW1pdHRlZCBhZnRlciBDUkVBVEUgUlVMRS4KK0NSRUFURSBUQUJMRSBkaXNh YmxlZF9ydWxlX3RibCAoaWQgaW50KTsKK0NSRUFURSBSVUxFIGRyX3J1bGUgQVMgT04gSU5TRVJU IFRPIGRpc2FibGVkX3J1bGVfdGJsIERPIE5PVEhJTkc7CitBTFRFUiBUQUJMRSBkaXNhYmxlZF9y dWxlX3RibCBESVNBQkxFIFJVTEUgZHJfcnVsZTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxl X2RkbCgnZGlzYWJsZWRfcnVsZV90YmwnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworRFJP UCBUQUJMRSBkaXNhYmxlZF9ydWxlX3RibDsKKworLS0gSW5kZXggc3RhdGlzdGljcyB0YXJnZXQg b24gYW4gZXhwcmVzc2lvbiBpbmRleCBjb2x1bW4uCitDUkVBVEUgVEFCTEUgaWR4X3N0YXRfdGJs IChjMSBpbnQpOworQ1JFQVRFIElOREVYIGlkeF9zdGF0X2lkeCBPTiBpZHhfc3RhdF90YmwgKChj MSArIDEpKTsKK0FMVEVSIElOREVYIGlkeF9zdGF0X2lkeCBBTFRFUiBDT0xVTU4gMSBTRVQgU1RB VElTVElDUyA0MDA7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2lkeF9zdGF0X3Ri bCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CitEUk9QIFRBQkxFIGlkeF9zdGF0X3RibDsK KworLS0gc2NoZW1hX3F1YWxpZmllZD1mYWxzZSBtdXN0IGRyb3AgdGhlIHNjaGVtYSBwcmVmaXgg ZnJvbSBERUZBVUxUCistLSBleHByZXNzaW9ucyBhbmQgaW5saW5lIENIRUNLIGJvZGllcyB0aGF0 IHJlZmVyZW5jZSBzYW1lLXNjaGVtYQorLS0gb2JqZWN0cyAoc2VxdWVuY2UgdmlhIG5leHR2YWws IGZ1bmN0aW9uIHZpYSBkaXJlY3QgY2FsbCkuICBUaGlzCistLSByZWxpZXMgb24gdGhlIGRlcGFy c2VyIHJlc3BlY3RpbmcgdGhlIG5hcnJvd2VkIHNlYXJjaF9wYXRoIHJhdGhlcgorLS0gdGhhbiBv biBzdWJzdHJpbmcgc3RyaXBwaW5nLgorQ1JFQVRFIFNDSEVNQSBwZ3RibF9kZGxfeHJlZjsKK0NS RUFURSBTRVFVRU5DRSBwZ3RibF9kZGxfeHJlZi5teXNlcTsKK0NSRUFURSBGVU5DVElPTiBwZ3Ri bF9kZGxfeHJlZi5mKGludCkgUkVUVVJOUyBpbnQgTEFOR1VBR0Ugc3FsIElNTVVUQUJMRQorICAg IEFTICdTRUxFQ1QgJDEnOworQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF94cmVmLnQgKAorICAgIGlk ICBpbnQgREVGQVVMVCBuZXh0dmFsKCdwZ3RibF9kZGxfeHJlZi5teXNlcScpLAorICAgIHZhbCBp bnQsCisgICAgQ09OU1RSQUlOVCBjaGsgQ0hFQ0sgKHBndGJsX2RkbF94cmVmLmYodmFsKSA+IDAp CispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwZ3RibF9kZGxfeHJlZi50Jzo6 cmVnY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duZXIgPT4gZmFsc2Us CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hX3F1YWxpZmllZCA9PiBmYWxz ZSk7CitEUk9QIFNDSEVNQSBwZ3RibF9kZGxfeHJlZiBDQVNDQURFOworCistLSBzY2hlbWFfcXVh bGlmaWVkPWZhbHNlIG11c3QgTk9UIGNvcnJ1cHQgc3RyaW5nIGxpdGVyYWxzIHdob3NlCistLSBj b250ZW50cyBoYXBwZW4gdG8gY29udGFpbiB0aGUgc2NoZW1hIG5hbWUgZm9sbG93ZWQgYnkgYSBk b3QuICBTdHJpbmcKKy0tIGxpdGVyYWwgdGV4dCBpcyBvdXRwdXQgdmVyYmF0aW0gYnkgdGhlIGRl cGFyc2VyIGFuZCBpcyB1bmFmZmVjdGVkIGJ5CistLSBzZWFyY2hfcGF0aCBuYXJyb3dpbmcuCitD UkVBVEUgU0NIRU1BIHBndGJsX2RkbF9zdHI7CitDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3N0ci5w IChpZCBpbnQsIG5vdGUgdGV4dCkgUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitDUkVBVEUgVEFC TEUgcGd0YmxfZGRsX3N0ci5wYyBQQVJUSVRJT04gT0YgcGd0YmxfZGRsX3N0ci5wCisgICAgKENP TlNUUkFJTlQgY2hrIENIRUNLIChub3RlIDw+ICdwZ3RibF9kZGxfc3RyLnNlY3JldCcpKQorICAg IEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwMCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJs ZV9kZGwoJ3BndGJsX2RkbF9zdHIucGMnOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBvd25lciA9PiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzY2hlbWFfcXVhbGlmaWVkID0+IGZhbHNlKTsKK0RST1AgU0NIRU1BIHBndGJsX2RkbF9zdHIg Q0FTQ0FERTsKKworLS0gc2NoZW1hX3F1YWxpZmllZD1mYWxzZSBtdXN0IE5PVCBjb3JydXB0IGRv dWJsZS1xdW90ZWQgaWRlbnRpZmllcnMKKy0tIHdob3NlIGNvbnRlbnRzIGhhcHBlbiB0byBjb250 YWluIHRoZSBzY2hlbWEgbmFtZSBmb2xsb3dlZCBieSBhIGRvdAorLS0gKGZvciBleGFtcGxlIGEg Y29sdW1uIGxpdGVyYWxseSBuYW1lZCAiPHNjaGVtYT4ud2VpcmQiIGluc2lkZSB0aGF0CistLSBz Y2hlbWEpLiAgVGhlIG1lY2hhbmlzbSBpcyBwdXJlbHkgc2VhcmNoX3BhdGggbmFycm93aW5nOiB0 aGUgZGVwYXJzZXIKKy0tIG91dHB1dHMgYXR0cmlidXRlIG5hbWVzIHZlcmJhdGltIGZyb20gcGdf YXR0cmlidXRlLCBzbyB0aGUgcXVvdGVkCistLSBpZGVudGlmaWVyIGNvbnRlbnQgaXMgbmV2ZXIg ZXhhbWluZWQgZm9yIHNjaGVtYSBwcmVmaXhlcy4gIFRoaXMgaG9sZHMKKy0tIGV2ZW4gd2hlbiB0 aGUgc2NoZW1hIG5hbWUgaXMgYSBzaW5nbGUgbGV0dGVyLgorQ1JFQVRFIFNDSEVNQSBwZ3RibF9k ZGxfcWlkOworQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF9xaWQucCAoaWQgaW50LCAicGd0YmxfZGRs X3FpZC53ZWlyZCIgaW50KQorICAgIFBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRB QkxFIHBndGJsX2RkbF9xaWQucGMgUEFSVElUSU9OIE9GIHBndGJsX2RkbF9xaWQucAorICAgIChD T05TVFJBSU5UIGNoayBDSEVDSyAoInBndGJsX2RkbF9xaWQud2VpcmQiID4gMCkpCisgICAgRk9S IFZBTFVFUyBGUk9NICgwKSBUTyAoMTAwKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2Rk bCgncGd0YmxfZGRsX3FpZC5wYyc6OnJlZ2NsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG93bmVyID0+IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNj aGVtYV9xdWFsaWZpZWQgPT4gZmFsc2UpOworRFJPUCBTQ0hFTUEgcGd0YmxfZGRsX3FpZCBDQVND QURFOworLS0gU2FtZSB3aXRoIGEgc2hvcnQgKHNpbmdsZS1sZXR0ZXIpIHNjaGVtYSBuYW1lIHRv IGNvbmZpcm0gdGhlcmUgaXMgbm8KKy0tIG1pbmltdW0tbGVuZ3RoIGFzc3VtcHRpb24gaW4gdGhl IHN0cmlwcGluZyBwYXRoLgorQ1JFQVRFIFNDSEVNQSBwZ3RibF9kZGxfcTE7CitDUkVBVEUgVEFC TEUgcGd0YmxfZGRsX3ExLnAgKGlkIGludCwgInBndGJsX2RkbF9xMS53ZWlyZCIgaW50KQorICAg IFBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF9xMS5wYyBQ QVJUSVRJT04gT0YgcGd0YmxfZGRsX3ExLnAKKyAgICAoQ09OU1RSQUlOVCBjaGsgQ0hFQ0sgKCJw Z3RibF9kZGxfcTEud2VpcmQiID4gMCkpCisgICAgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTAw KTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGd0YmxfZGRsX3ExLnBjJzo6cmVn Y2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duZXIgPT4gZmFsc2UsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hX3F1YWxpZmllZCA9PiBmYWxzZSk7 CitEUk9QIFNDSEVNQSBwZ3RibF9kZGxfcTEgQ0FTQ0FERTsKKworLS0gc2NoZW1hX3F1YWxpZmll ZD1mYWxzZSB3aGVuIHRoZSBiYXNlIHNjaGVtYSBuYW1lIGl0c2VsZiByZXF1aXJlcworLS0gcXVv dGluZyAoaXRzIHByZWZpeCBzdGFydHMgd2l0aCAiKS4gIEJvdGggZm9ybXMgb2YgdGhlIHByZWZp eCAtCistLSBiYXJlLWxvd2VyY2FzZSBhbmQgcXVvdGVkIC0gbXVzdCBiZSBzdHJpcHBlZCBmcm9t IG91dGVyCistLSBBTFRFUiBUQUJMRSAvIE9OIC8gQ1JFQVRFIElOREVYIHByZWZpeGVzLCB3aGls ZSBpbm5lciBxdW90ZWQKKy0tIGlkZW50aWZpZXJzIHRoYXQgaGFwcGVuIHRvIGJlZ2luIHRoZSBz YW1lIHdheSBtdXN0IGJlIHByZXNlcnZlZC4KK0NSRUFURSBTQ0hFTUEgIlBnVGJsLURkbC1RIjsK K0NSRUFURSBUQUJMRSAiUGdUYmwtRGRsLVEiLiJUIiAoaWQgaW50LCB2YWwgaW50LAorICAgIENP TlNUUkFJTlQgY2hrIENIRUNLICh2YWwgPiAwKSk7CitDUkVBVEUgSU5ERVggIlRfdmFsX2lkeCIg T04gIlBnVGJsLURkbC1RIi4iVCIgKHZhbCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9k ZGwoJyJQZ1RibC1EZGwtUSIuIlQiJzo6cmVnY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgb3duZXIgPT4gZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2NoZW1hX3F1YWxpZmllZCA9PiBmYWxzZSk7CitEUk9QIFNDSEVNQSAiUGdUYmwtRGRsLVEiIENB U0NBREU7CisKKy0tIEVycm9yOiBub3QgYW4gb3JkaW5hcnkgb3IgcGFydGl0aW9uZWQgdGFibGUu CitDUkVBVEUgVklFVyB2IEFTIFNFTEVDVCAxIEFTIHg7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90 YWJsZV9kZGwoJ3YnOjpyZWdjbGFzcyk7CisKK0NSRUFURSBTRVFVRU5DRSBzOworU0VMRUNUICog RlJPTSBwZ19nZXRfdGFibGVfZGRsKCdzJzo6cmVnY2xhc3MpOworCistLSBOVUxMIGFyZ3VtZW50 IHJldHVybnMgbm8gcm93cy4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbChOVUxMKTsK KworLS0gUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCB2YWxpZGF0aW9uOiBpZiB0aGUgcmVm ZXJlbmNlZCBpbmRleAorLS0gd291bGQgbm90IGJlIGVtaXR0ZWQgKGJlY2F1c2UgaXRzIHNvdXJj ZSBraW5kIGlzIHN1cHByZXNzZWQpIGJ1dAorLS0gcmVwbGljYV9pZGVudGl0eSBpdHNlbGYgd291 bGQgYmUsIHRoZSBmdW5jdGlvbiByYWlzZXMgYW4gZXJyb3Igc28KKy0tIHRoZSBlbWl0dGVkIERE TCBuZXZlciBkYW5nbGVzLiAgRXhlcmNpc2UgYWxsIHRocmVlIGNvbnN0cmFpbnQtYmFja2VkCist LSBmb3JtcyAoUEssIFVOSVFVRSwgRVhDTFVTSU9OKSBhbmQgYSBiYXJlIENSRUFURSBVTklRVUUg SU5ERVgsIGluCistLSBib3RoIHRoZSBleGNlcHQtbGlzdCBhbmQgb25seS1saXN0IHNoYXBlcy4K Ky0tCistLSBQSy1iYWNrZWQ6IGV4Y2VwdF9raW5kcz1wcmltYXJ5X2tleSB3aXRob3V0IGV4Y2Vw dF9raW5kcz1yZXBsaWNhX2lkZW50aXR5LgorQ1JFQVRFIFRBQkxFIHJpX3BrX2V4Y2wgKGEgaW50 IFBSSU1BUlkgS0VZKTsKK0FMVEVSIFRBQkxFIHJpX3BrX2V4Y2wgUkVQTElDQSBJREVOVElUWSBV U0lORyBJTkRFWCByaV9wa19leGNsX3BrZXk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9k ZGwoJ3JpX3BrX2V4Y2wnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9 PiBBUlJBWVsncHJpbWFyeV9rZXknXSk7CistLSBTYW1lIGNhbGwgYnV0IGFsc28gZXhjbHVkaW5n IHJlcGxpY2FfaWRlbnRpdHkgc3VjY2VlZHMuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9k ZGwoJ3JpX3BrX2V4Y2wnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9 PiBBUlJBWVsncHJpbWFyeV9rZXknLCdyZXBsaWNhX2lkZW50aXR5J10pOworRFJPUCBUQUJMRSBy aV9wa19leGNsOworCistLSBVTklRVUUtY29uc3RyYWludC1iYWNrZWQgcmVwbGljYSBpZGVudGl0 eSBpbmRleC4KK0NSRUFURSBUQUJMRSByaV91bmlxX2V4Y2wgKGEgaW50IE5PVCBOVUxMIFVOSVFV RSwgYiBpbnQpOworQUxURVIgVEFCTEUgcmlfdW5pcV9leGNsIFJFUExJQ0EgSURFTlRJVFkgVVNJ TkcgSU5ERVggcmlfdW5pcV9leGNsX2Ffa2V5OworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVf ZGRsKCdyaV91bmlxX2V4Y2wnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5k cyA9PiBBUlJBWVsndW5pcXVlJ10pOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdy aV91bmlxX2V4Y2wnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBB UlJBWVsndW5pcXVlJywncmVwbGljYV9pZGVudGl0eSddKTsKK0RST1AgVEFCTEUgcmlfdW5pcV9l eGNsOworCistLSBCYXJlIENSRUFURSBVTklRVUUgSU5ERVggKG5vIGJhY2tpbmcgY29uc3RyYWlu dCkgdXNlZCBhcyBSRVBMSUNBCistLSBJREVOVElUWTogdGhlIGluZGV4IGlzIGVtaXR0ZWQgYnkg dGhlICJpbmRleCIga2luZCwgc28gZXhjbHVkaW5nCistLSAiaW5kZXgiIHdpdGhvdXQgYWxzbyBl eGNsdWRpbmcgInJlcGxpY2FfaWRlbnRpdHkiIG11c3QgZXJyb3IuCitDUkVBVEUgVEFCTEUgcmlf aWR4X2V4Y2wgKGEgaW50IE5PVCBOVUxMLCBiIGludCk7CitDUkVBVEUgVU5JUVVFIElOREVYIHJp X2lkeF9leGNsX2FfdW5pcSBPTiByaV9pZHhfZXhjbCAoYSk7CitBTFRFUiBUQUJMRSByaV9pZHhf ZXhjbCBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHJpX2lkeF9leGNsX2FfdW5pcTsKK1NF TEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmlfaWR4X2V4Y2wnOjpyZWdjbGFzcywgb3du ZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsnaW5kZXgnXSk7CitTRUxFQ1QgKiBG Uk9NIHBnX2dldF90YWJsZV9kZGwoJ3JpX2lkeF9leGNsJzo6cmVnY2xhc3MsIG93bmVyID0+IGZh bHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlbJ2luZGV4JywncmVwbGljYV9pZGVudGl0eSddKTsK K0RST1AgVEFCTEUgcmlfaWR4X2V4Y2w7CisKKy0tIEluY2x1ZGUtc2lkZSBhbmFsb2c6IG9ubHlf a2luZHM9cmVwbGljYV9pZGVudGl0eSBtdXN0IGluY2x1ZGUgdGhlIGtpbmQKKy0tIHRoYXQgZW1p dHMgdGhlIGluZGV4LCBvciB0aGUgZnVuY3Rpb24gZXJyb3JzLgorQ1JFQVRFIFRBQkxFIHJpX29u bHkgKGEgaW50IE5PVCBOVUxMIFVOSVFVRSwgYiBpbnQpOworQUxURVIgVEFCTEUgcmlfb25seSBS RVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHJpX29ubHlfYV9rZXk7CitTRUxFQ1QgKiBGUk9N IHBnX2dldF90YWJsZV9kZGwoJ3JpX29ubHknOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9u bHlfa2luZHMgPT4gQVJSQVlbJ3JlcGxpY2FfaWRlbnRpdHknXSk7CistLSBJbmNsdWRpbmcgYm90 aCBraW5kcyBzdWNjZWVkcy4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmlfb25s eSc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBBUlJBWVsndW5pcXVl JywncmVwbGljYV9pZGVudGl0eSddKTsKK0RST1AgVEFCTEUgcmlfb25seTsKKworLS0gUGVyLWtp bmQgb25seV9raW5kcyAvIGV4Y2VwdF9raW5kcyBjb3ZlcmFnZS4gIEZvciBlYWNoIGtpbmQgaW4g dGhlIHZvY2FidWxhcnksCistLSB2ZXJpZnkgdGhhdCBvbmx5X2tpbmRzPUsgZW1pdHMganVzdCB0 aGF0IGtpbmQncyBvdXRwdXQgYW5kIHRoYXQgZXhjZXB0X2tpbmRzPUsKKy0tIG9taXRzIGp1c3Qg dGhhdCBraW5kJ3Mgb3V0cHV0LiAgS2luZHMgd2l0aCBubyBmaXh0dXJlIGFib3ZlICh0cmlnZ2Vy LAorLS0gcG9saWN5KSBhcmUgc3RpbGwgcmVjb2duaXplZCBidXQgY3VycmVudGx5IGVtaXQgbm90 aGluZzsgb25seV9raW5kcz1LCistLSByZXR1cm5zIHplcm8gcm93cyBmb3IgdGhlbS4gIEZpeHR1 cmVzIHVzZWQ6CistLSAgIGlkeGQ6IFBLICsgdHdvIHNlY29uZGFyeSBDUkVBVEUgSU5ERVgKKy0t ICAgY29uczogUEsgKyBVTklRVUUgKyBDSEVDSyArIEZLIChjb25zdHJhaW50LWJhY2tlZCkKKy0t ICAgcnQ6ICAgQ1JFQVRFIFJVTEUKKy0tICAgc3R4OiAgQ1JFQVRFIFNUQVRJU1RJQ1MKKy0tICAg cmxzOiAgRU5BQkxFL0ZPUkNFIFJPVyBMRVZFTCBTRUNVUklUWQorLS0gICByaV9mdWxsOiBSRVBM SUNBIElERU5USVRZIEZVTEwgKG5vIHNvdXJjZS1raW5kIGRlcGVuZGVuY3kpCitDUkVBVEUgVEFC TEUgZXhjbF9maXggKHJuZyBpbnQ0cmFuZ2UsCisgICAgRVhDTFVERSBVU0lORyBnaXN0IChybmcg V0lUSCAmJikpOworCistLSBvbmx5X2tpbmRzPUs6IGVtaXQgb25seSBraW5kIEsncyBzdGF0ZW1l bnRzLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZHhkJzo6cmVnY2xhc3MsIG93 bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFSUkFZWydpbmRleCddKTsKK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgnaWR4ZCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25s eV9raW5kcyA9PiBBUlJBWVsncHJpbWFyeV9rZXknXSk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90 YWJsZV9kZGwoJ2NvbnMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4g QVJSQVlbJ3VuaXF1ZSddKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnZXhjbF9m aXgnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ2V4Y2x1 c2lvbiddKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncnQnOjpyZWdjbGFzcywg b3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ3J1bGUnXSk7CitTRUxFQ1QgKiBG Uk9NIHBnX2dldF90YWJsZV9kZGwoJ3N0eCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25s eV9raW5kcyA9PiBBUlJBWVsnc3RhdGlzdGljcyddKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3Rh YmxlX2RkbCgncmxzJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFS UkFZWydybHMnXSk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3JpX2Z1bGwnOjpy ZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ3JlcGxpY2FfaWRl bnRpdHknXSk7CistLSB0cmlnZ2VyIC8gcG9saWN5IGFyZSBub3QgeWV0IGltcGxlbWVudGVkOyB1 bmNvbW1lbnQgd2hlbgorLS0gcGdfZ2V0X3RyaWdnZXJfZGRsIC8gcGdfZ2V0X3BvbGljeV9kZGwg aGVscGVycyBsYW5kLgorLS0gU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6 OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBBUlJBWVsndHJpZ2dlcidd KTsKKy0tIFNFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywg b3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ3BvbGljeSddKTsKKworLS0gZXhj ZXB0X2tpbmRzPUs6IGVtaXQgZXZlcnl0aGluZyBleGNlcHQga2luZCBLJ3Mgc3RhdGVtZW50cy4g IFBLL1VOSVFVRS8KKy0tIElOREVYIGFyZSBleGVyY2lzZWQgb24gdGFibGVzIHdpdGhvdXQgUkVQ TElDQSBJREVOVElUWSBVU0lORyBJTkRFWAorLS0gc28gdGhlIHZhbGlkYXRpb24gZG9lcyBub3Qg dHJpcC4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnaWR4ZCc6OnJlZ2NsYXNzLCBv d25lciA9PiBmYWxzZSwgZXhjZXB0X2tpbmRzID0+IEFSUkFZWydwcmltYXJ5X2tleSddKTsKK1NF TEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY29ucyc6OnJlZ2NsYXNzLCBvd25lciA9PiBm YWxzZSwgZXhjZXB0X2tpbmRzID0+IEFSUkFZWyd1bmlxdWUnXSk7CitTRUxFQ1QgKiBGUk9NIHBn X2dldF90YWJsZV9kZGwoJ2NvbnMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9r aW5kcyA9PiBBUlJBWVsnY2hlY2snXSk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwo J2V4Y2xfZml4Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJS QVlbJ2V4Y2x1c2lvbiddKTsKKy0tIHRyaWdnZXIgLyBwb2xpY3kgYXJlIG5vdCB5ZXQgaW1wbGVt ZW50ZWQ7IHVuY29tbWVudCB3aGVuCistLSBwZ19nZXRfdHJpZ2dlcl9kZGwgLyBwZ19nZXRfcG9s aWN5X2RkbCBoZWxwZXJzIGxhbmQuCistLSBTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwo J2Jhc2ljJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlb J3RyaWdnZXInXSk7CistLSBTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6 cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlbJ3BvbGljeSdd KTsKKy0tIGV4Y2VwdF9raW5kcz10YWJsZSBzdXBwcmVzc2VzIHRoZSBDUkVBVEUgVEFCTEUgKyBP V05FUiArIGNoaWxkLWRlZmF1bHQKKy0tIFNFVCBERUZBVUxUICsgYXR0b3B0aW9ucyBwYXNzZXMs IGxlYXZpbmcgb25seSB0aGUgc3ViLW9iamVjdCBwYXNzZXMuCitTRUxFQ1QgKiBGUk9NIHBnX2dl dF90YWJsZV9kZGwoJ2lkeGQnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5k cyA9PiBBUlJBWVsndGFibGUnXSk7CisKKy0tIE11bHRpLWtpbmQgY29tcG9zaXRpb25zLgorU0VM RUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZHhkJzo6cmVnY2xhc3MsIG93bmVyID0+IGZh bHNlLCBvbmx5X2tpbmRzID0+IEFSUkFZWyd0YWJsZScsJ2luZGV4J10pOworU0VMRUNUICogRlJP TSBwZ19nZXRfdGFibGVfZGRsKCdjb25zJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBvbmx5 X2tpbmRzID0+IEFSUkFZWydwcmltYXJ5X2tleScsJ2ZvcmVpZ25fa2V5J10pOworLS0gRHVwbGlj YXRlIGVudHJpZXMgaW4gdGhlIGxpc3QgYXJlIHNpbGVudGx5IGRlLWR1cGxpY2F0ZWQgYnkgdGhl CistLSBCaXRtYXBzZXQuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2lkeGQnOjpy ZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ2luZGV4JywnaW5k ZXgnXSk7CisKK0RST1AgVEFCTEUgZXhjbF9maXg7CisKKy0tIEtpbmQtZmlsdGVyIHRlc3RzIG9u IHBhcnRpdGlvbmVkIHRhYmxlcyB3aXRoIGluZGV4ZXMuCistLQorLS0gb25seV9raW5kcz1pbmRl eCBvbiBhIHBhcnRpdGlvbmVkIHRhYmxlOiBvbmx5IHRoZSByb290IENSRUFURSBJTkRFWCBpcwor LS0gZW1pdHRlZDsgbm8gQ1JFQVRFIFRBQkxFLCBubyBwYXJ0aXRpb24gY2hpbGRyZW4gKEtJTkRf UEFSVElUSU9OIGFic2VudCkuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BhcnRl ZF9taXhlZCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBvbmx5X2tpbmRzID0+IEFSUkFZWydpbmRleCddKTsKKworLS0gZXhjZXB0X2tp bmRzPWluZGV4IG9uIGEgcGFydGl0aW9uZWQgdGFibGU6IENSRUFURSBUQUJMRSBmb3IgdGhlIHBh cmVudAorLS0gYW5kIGFsbCBjaGlsZHJlbiBhcmUgZW1pdHRlZDsgbm8gaW5kZXggc3RhdGVtZW50 cy4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX21peGVkJzo6cmVnY2xh c3MsIG93bmVyID0+IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2Vw dF9raW5kcyA9PiBBUlJBWVsnaW5kZXgnXSk7CisKKy0tIG9ubHlfa2luZHM9cHJpbWFyeV9rZXkg b24gYSBwYXJ0aXRpb25lZCB0YWJsZTogb25seSB0aGUgQUxURVIgVEFCTEUgQURECistLSBDT05T VFJBSU5UIFBLIG9uIHRoZSBwYXJlbnQ7IHRoZSBjaGlsZCdzIGluaGVyaXRlZCBQSyAoY29uaXNs b2NhbD1mYWxzZSkKKy0tIGlzIHNraXBwZWQ7IG5vIENSRUFURSBUQUJMRSwgbm8gcGFydGl0aW9u IGNoaWxkcmVuLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfcGsnOjpy ZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg b25seV9raW5kcyA9PiBBUlJBWVsncHJpbWFyeV9rZXknXSk7CisKKy0tIG9ubHlfa2luZHM9SyBv biBhIHRhYmxlIHRoYXQgZG9lcyBub3QgaGF2ZSBhbnkgSyBvZiB0aGF0IGtpbmQgaXMgYSB2YWxp ZAorLS0gZmlsdGVyIGFuZCByZXR1cm5zIHplcm8gcm93cy4gIFRlc3RlZCBwcmV2aW91c2x5IHdp dGggZm9yZWlnbl9rZXkKKy0tIG9uICdyZWZkJzsgaGVyZSBhbHNvIHJ1bGUsIHN0YXRpc3RpY3Ms IHJscywgcmVwbGljYV9pZGVudGl0eSwgYW5kCistLSBleGNsdXNpb24gb24gJ2Jhc2ljJyAod2hp Y2ggaGFzIG9ubHkgUEsgKyBjb2x1bW5zKS4KK1NFTEVDVCBjb3VudCgqKSBBUyBydWxlX3Jvd3MK KyAgRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxz ZSwgb25seV9raW5kcyA9PiBBUlJBWVsncnVsZSddKTsKK1NFTEVDVCBjb3VudCgqKSBBUyBzdGF0 c19yb3dzCisgIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgb3duZXIg PT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ3N0YXRpc3RpY3MnXSk7CitTRUxFQ1QgY291 bnQoKikgQVMgcmxzX3Jvd3MKKyAgRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2Ns YXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBBUlJBWVsncmxzJ10pOworU0VMRUNU IGNvdW50KCopIEFTIHJpX3Jvd3MKKyAgRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJl Z2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBBUlJBWVsncmVwbGljYV9pZGVu dGl0eSddKTsKK1NFTEVDVCBjb3VudCgqKSBBUyBleGNsX3Jvd3MKKyAgRlJPTSBwZ19nZXRfdGFi bGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBB UlJBWVsnZXhjbHVzaW9uJ10pOworCistLSBJbnB1dC12YWxpZGF0aW9uIGVkZ2UgY2FzZXMgZm9y IHRoZSBraW5kIGFycmF5LiAgQWxsCistLSBvZiB0aGVzZSByYWlzZSBhbiBlcnJvcjsgdGhlIGZ1 bmN0aW9uIG5ldmVyIHJlYWNoZXMgcmVsYXRpb24gb3Blbi4KKy0tIEVtcHR5IGFycmF5OgorU0VM RUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCBvbmx5X2tpbmRz ID0+IEFSUkFZW106OnRleHRbXSk7CistLSBOVUxMIGVsZW1lbnQ6CitTRUxFQ1QgKiBGUk9NIHBn X2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsIG9ubHlfa2luZHMgPT4gQVJSQVlbTlVM TDo6dGV4dF0pOworLS0gVW5yZWNvZ25pemVkIGtpbmQ6CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90 YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ25vX3N1Y2hf a2luZCddKTsKKy0tIFNhbWUga2luZCBzcGVjaWZpZWQgdGhyb3VnaCBib3RoIHBhcmFtZXRlcnMg aXMgc3RpbGwgbXV0ZXgtcmVqZWN0ZWQuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwo J2Jhc2ljJzo6cmVnY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25seV9r aW5kcyA9PiBBUlJBWVsnaW5kZXgnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl eGNlcHRfa2luZHMgPT4gQVJSQVlbJ3J1bGUnXSk7CisKKy0tIFJvdW5kLXRyaXAgdmVyaWZpY2F0 aW9uLiAgRm9yIGV2ZXJ5IHRlc3QgdGFibGUsIGNhcHR1cmUgdGhlIERETCB0aGUKKy0tIGZ1bmN0 aW9uIGVtaXRzLCBkcm9wIHRoZSBzY2hlbWEsIHJlcGxheSBlYWNoIHRhYmxlJ3MgRERMIGluCist LSBkZXBlbmRlbmN5IG9yZGVyLCBhbmQgY29uZmlybSB0aGF0IHBnX2dldF90YWJsZV9kZGwgb24g dGhlIHJlY3JlYXRlZAorLS0gcmVsYXRpb24gbWF0Y2hlcyB0aGUgb3JpZ2luYWwgbGluZS1mb3It bGluZS4gIFRoZSBmaW5hbCBTRUxFQ1QgbXVzdAorLS0gcmV0dXJuIHplcm8gcm93cy4KK0NSRUFU RSBURU1QIFRBQkxFIHBndGJsX2RkbF9ydF9vcmlnIChuYW1lIHRleHQsIG9yZCBpbnQsIGxpbmUg dGV4dCk7CitJTlNFUlQgSU5UTyBwZ3RibF9kZGxfcnRfb3JpZworU0VMRUNUIHQubmFtZSwgby5v cmQsIG8ubGluZQorRlJPTSAoVkFMVUVTCisgICAgICAgICgnYmFzaWMnKSwgKCdpZF9jb2xzJyks ICgnaWRfY3VzdG9tJyksICgnZ2VuX2NvbHMnKSwgKCdnZW5fdmlydHVhbCcpLCAoJ3N0b3JhZ2Vf Y29scycpLAorICAgICAgICAoJ3JlZmQnKSwgKCdjb25zJyksICgnbnVsbHNfbmQnKSwgKCdpZHhf aW5jJyksCisgICAgICAgICgnZmtfYWN0c190Z3QnKSwgKCdma19hY3RzJyksICgnbm90ZW5mX3Rn dCcpLCAoJ25vdGVuZicpLCAoJ3NlbGZfcmVmJyksICgndGVtcG9yYWxfcGsnKSwKKyAgICAgICAg KCdpZHhkJyksCisgICAgICAgICgncGFyJyksICgnY2gnKSwgKCdhdHRvcHQnKSwKKyAgICAgICAg KCdwYXJ0ZWRfcmFuZ2UnKSwgKCdwYXJ0ZWRfcmFuZ2VfMScpLCAoJ3BhcnRlZF9yYW5nZV9kZWYn KSwKKyAgICAgICAgKCdwYXJ0ZWRfaGFzaCcpLCAoJ3BhcnRlZF9oYXNoXzAnKSwKKyAgICAgICAg KCdwYXJ0ZWRfbGlzdCcpLAorICAgICAgICAoJ3BhcnRlZF9pZHgnKSwgKCdwYXJ0ZWRfaWR4X2En KSwKKyAgICAgICAgKCdwYXJ0ZWRfcGxhaW4nKSwgKCdwYXJ0ZWRfcGxhaW5fYScpLAorICAgICAg ICAoJ3BhcnRlZF9waycpLCAoJ3BhcnRlZF9wa19hJyksCisgICAgICAgICgncGFydGVkX3N1Yicp LCAoJ3BhcnRlZF9zdWJfYScpLCAoJ3BhcnRlZF9zdWJfYTEnKSwKKyAgICAgICAgKCdwYXJ0ZWRf Y2hpbGRfaWR4JyksICgncGFydGVkX2NoaWxkX2lkeF9hJyksCisgICAgICAgICgncGFydGVkX21p eGVkJyksICgncGFydGVkX21peGVkX2EnKSwKKyAgICAgICAgKCdwYXJ0ZWRfZmtfdGd0JyksICgn cGFydGVkX2ZrJyksICgncGFydGVkX2ZrX2EnKSwKKyAgICAgICAgKCdydF9sb2cnKSwgKCdydCcp LAorICAgICAgICAoJ3N0eCcpLCAoJ3JscycpLCAoJ3JpX2Z1bGwnKSwgKCdyaV9pZHgnKSwgKCd1 bm8nKQorICAgICApIEFTIHQobmFtZSksCisgICAgIExBVEVSQUwgcGdfZ2V0X3RhYmxlX2RkbCgo J3BndGJsX2RkbF90ZXN0LicgfHwgdC5uYW1lKTo6cmVnY2xhc3MsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBvd25lciA9PiBmYWxzZSkgV0lUSCBPUkRJTkFMSVRZIG8obGluZSwgb3Jk KTsKKworRE8gJCQKK0RFQ0xBUkUKKyAgICB0YWJsZXMgQ09OU1RBTlQgdGV4dFtdIDo9IEFSUkFZ WworICAgICAgICAnYmFzaWMnLCAnaWRfY29scycsICdpZF9jdXN0b20nLCAnZ2VuX2NvbHMnLCAn Z2VuX3ZpcnR1YWwnLCAnc3RvcmFnZV9jb2xzJywKKyAgICAgICAgJ3JlZmQnLCAnY29ucycsICdu dWxsc19uZCcsICdpZHhfaW5jJywKKyAgICAgICAgJ2ZrX2FjdHNfdGd0JywgJ2ZrX2FjdHMnLCAn bm90ZW5mX3RndCcsICdub3RlbmYnLCAnc2VsZl9yZWYnLCAndGVtcG9yYWxfcGsnLAorICAgICAg ICAnaWR4ZCcsCisgICAgICAgICdwYXInLCAnY2gnLCAnYXR0b3B0JywKKyAgICAgICAgJ3BhcnRl ZF9yYW5nZScsICdwYXJ0ZWRfcmFuZ2VfMScsICdwYXJ0ZWRfcmFuZ2VfZGVmJywKKyAgICAgICAg J3BhcnRlZF9oYXNoJywgJ3BhcnRlZF9oYXNoXzAnLAorICAgICAgICAncGFydGVkX2xpc3QnLAor ICAgICAgICAncGFydGVkX2lkeCcsICdwYXJ0ZWRfaWR4X2EnLAorICAgICAgICAncGFydGVkX3Bs YWluJywgJ3BhcnRlZF9wbGFpbl9hJywKKyAgICAgICAgJ3BhcnRlZF9waycsICdwYXJ0ZWRfcGtf YScsCisgICAgICAgICdwYXJ0ZWRfc3ViJywgJ3BhcnRlZF9zdWJfYScsICdwYXJ0ZWRfc3ViX2Ex JywKKyAgICAgICAgJ3BhcnRlZF9jaGlsZF9pZHgnLCAncGFydGVkX2NoaWxkX2lkeF9hJywKKyAg ICAgICAgJ3BhcnRlZF9taXhlZCcsICdwYXJ0ZWRfbWl4ZWRfYScsCisgICAgICAgICdwYXJ0ZWRf ZmtfdGd0JywgJ3BhcnRlZF9maycsICdwYXJ0ZWRfZmtfYScsCisgICAgICAgICdydF9sb2cnLCAn cnQnLAorICAgICAgICAnc3R4JywgJ3JscycsICdyaV9mdWxsJywgJ3JpX2lkeCcsICd1bm8nCisg ICAgXTsKKyAgICB0IHRleHQ7CisgICAgc3RtdCB0ZXh0OworQkVHSU4KKyAgICBEUk9QIFNDSEVN QSBwZ3RibF9kZGxfdGVzdCBDQVNDQURFOworICAgIENSRUFURSBTQ0hFTUEgcGd0YmxfZGRsX3Rl c3Q7CisgICAgRk9SRUFDSCB0IElOIEFSUkFZIHRhYmxlcyBMT09QCisgICAgICAgIEZPUiBzdG10 IElOCisgICAgICAgICAgICBTRUxFQ1QgbGluZSBGUk9NIHBndGJsX2RkbF9ydF9vcmlnIFdIRVJF IG5hbWUgPSB0IE9SREVSIEJZIG9yZAorICAgICAgICBMT09QCisgICAgICAgICAgICBCRUdJTgor ICAgICAgICAgICAgICAgIEVYRUNVVEUgc3RtdDsKKyAgICAgICAgICAgIEVYQ0VQVElPTiBXSEVO IGR1cGxpY2F0ZV90YWJsZSBUSEVOCisgICAgICAgICAgICAgICAgTlVMTDsgIC0tIHBhcnRpdGlv biBjaGlsZCBhbHJlYWR5IGNyZWF0ZWQgYnkgaXRzIHBhcmVudCdzIERETAorICAgICAgICAgICAg RU5EOworICAgICAgICBFTkQgTE9PUDsKKyAgICBFTkQgTE9PUDsKK0VORCAkJDsKKworV0lUSCBh ZnRlcl9kZGwgQVMgKAorICAgIFNFTEVDVCB0Lm5hbWUsIG8ub3JkLCBvLmxpbmUKKyAgICBGUk9N IChTRUxFQ1QgRElTVElOQ1QgbmFtZSBGUk9NIHBndGJsX2RkbF9ydF9vcmlnKSBBUyB0LAorICAg ICAgICAgTEFURVJBTCBwZ19nZXRfdGFibGVfZGRsKCgncGd0YmxfZGRsX3Rlc3QuJyB8fCB0Lm5h bWUpOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lciA9 PiBmYWxzZSkgV0lUSCBPUkRJTkFMSVRZIG8obGluZSwgb3JkKQorKQorKFNFTEVDVCAnbWlzc2lu Zy1pbi1jb3B5JyBBUyBraW5kLCBuYW1lLCBvcmQsIGxpbmUgRlJPTSBwZ3RibF9kZGxfcnRfb3Jp ZworIEVYQ0VQVAorIFNFTEVDVCAnbWlzc2luZy1pbi1jb3B5JywgbmFtZSwgb3JkLCBsaW5lIEZS T00gYWZ0ZXJfZGRsKQorVU5JT04gQUxMCisoU0VMRUNUICdleHRyYS1pbi1jb3B5JyBBUyBraW5k LCBuYW1lLCBvcmQsIGxpbmUgRlJPTSBhZnRlcl9kZGwKKyBFWENFUFQKKyBTRUxFQ1QgJ2V4dHJh LWluLWNvcHknLCBuYW1lLCBvcmQsIGxpbmUgRlJPTSBwZ3RibF9kZGxfcnRfb3JpZykKK09SREVS IEJZIGtpbmQsIG5hbWUsIG9yZDsKKworLS0gQ2xlYW51cC4KK0RST1AgU0NIRU1BIHBndGJsX2Rk bF90ZXN0IENBU0NBREU7CmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IGZmYjQxM2FiNjEy Li5iZTUzOWU5YWM3MiAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxp c3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTE2NDgsNiArMTY0 OCw3IEBAIExpc3RlbmVyRW50cnkKIExvSW5mbwogTG9hZFN0bXQKIExvY2FsQnVmZmVyTG9va3Vw RW50CitMb2NhbE5vdE51bGxFbnRyeQogTG9jYWxQZ0JhY2tlbmRTdGF0dXMKIExvY2FsVHJhbnNh Y3Rpb25JZAogTG9jYXRpb24KQEAgLTMxNTIsNiArMzE1Myw3IEBAIFRhYmxlRnVuY1NjYW4KIFRh YmxlRnVuY1NjYW5TdGF0ZQogVGFibGVGdW5jVHlwZQogVGFibGVJbmZvCitUYWJsZURkbENvbnRl eHQKIFRhYmxlTGlrZUNsYXVzZQogVGFibGVTYW1wbGVDbGF1c2UKIFRhYmxlU2NhbkRlc2MKLS0g CjIuNTEuMAoK --0000000000005b83f5065629c4e2--