Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rVp3F-001Wll-9P for pgsql-hackers@arkaria.postgresql.org; Fri, 02 Feb 2024 08:37:34 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1rVp3D-00BO4x-NK for pgsql-hackers@arkaria.postgresql.org; Fri, 02 Feb 2024 08:37:31 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rVp3D-00BO4F-3a for pgsql-hackers@lists.postgresql.org; Fri, 02 Feb 2024 08:37:31 +0000 Received: from mail-io1-xd2f.google.com ([2607:f8b0:4864:20::d2f]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1rVp35-00530T-Ud for pgsql-hackers@lists.postgresql.org; Fri, 02 Feb 2024 08:37:30 +0000 Received: by mail-io1-xd2f.google.com with SMTP id ca18e2360f4ac-7bfd527d443so72699839f.3 for ; Fri, 02 Feb 2024 00:37:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1706863042; x=1707467842; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=dkqkaKRVeg+yA5kOYOpCStMRlMUE1hwrqIS+cQQalMM=; b=lA93KB4gWcAorLk33gHtXxknlTgXC+GhTrzHFYG6oz2pTohUjjSSLQCAgwMVlHeniU Epr8wxCoFoXOXoTV2qsLVA0/JGfkgk0vEFKro7UMjk9GL+yZsoUN10WakRZUAazSwyAp Lv3iF3gM9J075Z0CRKX8DQr7LWr71+9rEZpFKxhOaXiWW7bosmLs5u21OrvG6A6fYCpp hdE2pS3fF2wwcEw8wU8BQpLo30w/WAhPzmcYOTjuGl4F/2n53m9Tvyg0/xH+GE95cjI3 +mvmtu//1/MeikusPdB1BDRwunItdrwSLwmUiPyp1B1ZWX4y8FbYxC6RSWGS/Ayip4Eh DuvQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706863042; x=1707467842; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=dkqkaKRVeg+yA5kOYOpCStMRlMUE1hwrqIS+cQQalMM=; b=lQOzVc5GKn2gD7z3lwvWwNvguxaIszuInwqxdhBHn1aYCWX/PbWuICtOakACn/R9IC UAlF+7fKNHOdtOGxPXeaGe/xRs5ReWb8TCJP/3axIhGyXH0zniRWA4bDGiKFKg6O979D d6nccit51m/AHq7Qx6DEwsjwerAgL+a5aqM0q6CrVihu+rto7LXwVKo4gTioxC3u1VUW wewyx7CF5pJEvPc/ToPNRSKaQKzUbMKFRyCt0wxV5KKg610t+wKk4hMEWLEvdA+NBNaW GanNWNvE8q80GEOxIehWiqgYRyLJxAzJF2bXwg7ThuZC9q6dDB7qHS9COoyXSv+ghdWQ iGAQ== X-Gm-Message-State: AOJu0YzZWFHMT2chHTpqjzASzJ/byBkwjSlIRCXT3pf2d6nrR1q6q3zb TKxudUgQLcMyu446A8YBbQwmECDtGVNpPx6ty4SAXD93NODWSJSfqAPhStw8Gsv8s0bGse23XtO PFBYPM3cf5IJIXO7oArq7+1A91Yo= X-Google-Smtp-Source: AGHT+IFtpY4faMhi7i1k3RxY1JM7aeH8UPzlMJRMpiG0vmo2+taCmcVz5btZ+TDEcIFU3UoQLX7keA906BV11AlJECQ= X-Received: by 2002:a05:6e02:b42:b0:363:af21:89af with SMTP id f2-20020a056e020b4200b00363af2189afmr2365493ilu.14.1706863041806; Fri, 02 Feb 2024 00:37:21 -0800 (PST) MIME-Version: 1.0 References: <76596388-6fe6-0baf-351d-734458a46d76@enterprisedb.com> In-Reply-To: From: Corey Huinker Date: Fri, 2 Feb 2024 03:37:10 -0500 Message-ID: Subject: Re: Statistics Import and Export To: Peter Smith Cc: Tomas Vondra , Ashutosh Bapat , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="00000000000049aaa10610620585" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000049aaa10610620585 Content-Type: multipart/alternative; boundary="00000000000049aa9f0610620583" --00000000000049aa9f0610620583 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable (hit send before attaching patches, reposting message as well) Attached is v4 of the statistics export/import patch. This version has been refactored to match the design feedback received previously. The system views are gone. These were mostly there to serve as a baseline for what an export query would look like. That role is temporarily reassigned to pg_export_stats.c, but hopefully they will be integrated into pg_dump in the next version. The regression test also contains the version of each query suitable for the current server version. The export format is far closer to the raw format of pg_statistic and pg_statistic_ext_data, respectively. This format involves exporting oid values for types, collations, operators, and attributes - values which are specific to the server they were created on. To make sense of those values, a subset of the columns of pg_type, pg_attribute, pg_collation, and pg_operator are exported as well, which allows pg_import_rel_stats() and pg_import_ext_stats() to reconstitute the data structure as it existed on the old server, and adapt it to the modern structure and local schema objects. pg_import_rel_stats matches up local columns with the exported stats by column name, not attnum. This allows for stats to be imported when columns have been dropped, added, or reordered. pg_import_ext_stats can also handle column reordering, though it currently would get confused by changes in expressions that maintain the same result data type. I'm not yet brave enough to handle importing nodetrees, nor do I think it's wise to try. I think we'd be better off validating that the destination extended stats object is identical in structure, and to fail the import of that one object if it isn't perfect. Export formats go back to v10. On Mon, Jan 22, 2024 at 1:09=E2=80=AFAM Peter Smith = wrote: > 2024-01 Commitfest. > > Hi, This patch has a CF status of "Needs Review" [1], but it seems > there were CFbot test failures last time it was run [2]. Please have a > look and post an updated version if necessary. > > =3D=3D=3D=3D=3D=3D > [1] https://commitfest.postgresql.org/46/4538/ > [2] > https://cirrus-ci.com/github/postgresql-cfbot/postgresql/commitfest/46/45= 38 > > Kind Regards, > Peter Smith. > --00000000000049aa9f0610620583 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
(hit send before attaching patches, reposting message= as well)

Attached is v4 of the statistics export/import patch.
<= br>This version has been refactored to match the design feedback received p= reviously.

The system views are gone. These were mostly there to ser= ve as a baseline for what an export query would look like. That role is tem= porarily reassigned to pg_export_stats.c, but hopefully they will be integr= ated into pg_dump in the next version. The regression test also contains th= e version of each query suitable for the current server version.
=
The export format is far closer to the raw format of pg_statistic and p= g_statistic_ext_data, respectively. This format involves exporting oid valu= es for types, collations, operators, and attributes - values which are spec= ific to the server they were created on. To make sense of those values, a s= ubset of the columns of pg_type, pg_attribute, pg_collation, and pg_operato= r are exported as well, which allows pg_import_rel_stats() and pg_import_ex= t_stats() to reconstitute the data structure as it existed on the old serve= r, and adapt it to the modern structure and local schema objects.

pg= _import_rel_stats matches up local columns with the exported stats by colum= n name, not attnum. This allows for stats to be imported when columns have = been dropped, added, or reordered.

pg_import_ext_stats can also hand= le column reordering, though it currently would get confused by changes in = expressions that maintain the same result data type. I'm not yet brave = enough to handle importing nodetrees, nor do I think it's wise to try. = I think we'd be better off validating that the destination extended sta= ts object is identical in structure, and to fail the import of that one obj= ect if it isn't perfect.

Export formats go back to v10.

<= /div>

On Mon, Jan 22, 2024 at 1:09=E2=80=AFAM Peter Smith <smithpb2250@gmail.com> wrote:
2024-01 Commitfest.

Hi, This patch has a CF status of "Needs Review" [1], but it seem= s
there were CFbot test failures last time it was run [2]. Please have a
look and post an updated version if necessary.

=3D=3D=3D=3D=3D=3D
[1] https://commitfest.postgresql.org/46/4538/
[2] https://cirrus-ci.com= /github/postgresql-cfbot/postgresql/commitfest/46/4538

Kind Regards,
Peter Smith.
--00000000000049aa9f0610620583-- --00000000000049aaa10610620585 Content-Type: text/x-patch; charset="US-ASCII"; name="v4-0001-Create-pg_import_rel_stats.patch" Content-Disposition: attachment; filename="v4-0001-Create-pg_import_rel_stats.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ls4e3bbx0 RnJvbSA2YmRjNzA3NmQyMGZmNGNkNzFiODUxZWEzNGY4ZmZhNjlmZTAzZjY3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBDb3JleSBIdWlua2VyIDxjb3JleS5odWlua2VyQGdtYWlsLmNv bT4KRGF0ZTogRnJpLCAyIEZlYiAyMDI0IDAwOjE2OjA0IC0wNTAwClN1YmplY3Q6IFtQQVRDSCB2 NCAxLzNdIENyZWF0ZSBwZ19pbXBvcnRfcmVsX3N0YXRzLgoKVGhlIGZ1bmN0aW9uIHBnX2ltcG9y dF9yZWxfc3RhdHMgaW1wb3J0cyBwZ19jbGFzcyByb3djb3VudCwKcGFnZWNvdW50LCBhbmQgcGdf c3RhdGlzdGljIGRhdGEgZm9yIGEgZ2l2ZW4gcmVsYXRpb24uCgpUaGUgbW9zdCBsaWtlbHkgYXBw bGljYXRpb24gb2YgdGhpcyBmdW5jdGlvbiBpcyB0byBxdWlja2x5IGFwcGx5IHN0YXRzCnRvIGEg bmV3bHkgdXBncmFkZWQgZGF0YWJhc2UgZmFzdGVyIHRoYW4gY291bGQgYmUgYWNjb21wbGlzaGVk IGJ5CnZhY3V1bWRiIC0tYW5hbHl6ZS1pbi1zdGFnZXMuCgpUaGUgZnVuY3Rpb24gdGFrZXMgYSBq c29uYiBwYXJhbWV0ZXIgd2hpY2ggY29udGFpbnMgdGhlIGdlbmVyYXRlZApzdGF0aXN0aWNzIGZv ciBvbmUgcmVsYXRvbiwgdGhlIGZvcm1hdCBvZiB3aGljaCB2YXJpZXMgYnkgdGhlIHZlcnNpb24K b2YgdGhlIHNlcnZlciB0aGF0IGV4cG9ydGVkIGl0LiBUaGUgZnVuY3Rpb24gdGFrZXMgdGhhdCB2 ZXJzaW9uCmludCBhY2NvdW50IHdoZW4gcHJvY2Vzc2luZyB0aGUgaW5wdXQganNvbiBpbnRvIHBn X3N0YXRpc3RpYyByb3dzLgoKVGhlIHN0YXRpc3RpY3MgYXBwbGllZCBhcmUgbm90IGxvY2tlZCBp biBhbnkgd2F5LCBhbmQgd2lsbCBiZQpvdmVyd3JpdHRlbiBieSB0aGUgbmV4dCBhbmFseXplLCBl aXRoZXIgZXhwbGljaXQgb3IgdmlhIGF1dG92YWN1dW0uCgpXaGlsZSB0aGUgc3RhdGlzdGljcyBh cmUgYXBwbGllZCB0cmFuc2FjdGlvbmFsbHksIHRoZSBjaGFuZ2VzIHRvCnBnX2NsYXNzIChyZWx0 dXBsZXMgYW5kIHJlbHBhZ2VzKSBhcmUgbm90LiBUaGlzIGRlY2lzaW9uIHdhcyBtYWRlCnRvIGF2 b2lkIGJsb2F0IG9mIHBnX2NsYXNzIGFuZCBpcyBpbiBsaW5lIHdpdGggdGhlIGJlaGF2aW9yIG9m IFZBQ1VVTS4KCkN1cnJlbnRseSB0aGUgZnVuY3Rpb24gc3VwcG9ydHMgdHdvIGJvb2xlYW4gZmxh Z3MgZm9yIGNoZWNraW5nIHRoZQp2YWxpZGl0eSBvZiB0aGUgaW1wb3J0ZWQgZGF0YS4gVGhlIGZs YWcgdmFsaWRhdGUgaW5pdGlhdGVzIGEgYmF0dGVyeQpvZiB2YWxpZGF0aW9uIHRlc3RzIHRvIGVu c3VyZSB0aGF0IGFsbCBzdWItb2JqZWN0cyAodHlwZXMsIG9wZXJhdG9ycywKY29sbGF0b25zLCBh dHRyaWJ1dGVzLCBzdGF0aXN0aWNzKSBoYXZlIG5vIGR1cGxpY2F0ZSB2YWx1ZXMuIFRoZSBmbGFn CnJlcXVpcmVfbWF0Y2hfb2lkcyB2ZXJpZmllcyB0aGUgb2lkcyByZXNvbHZlZCBpbiB0aGUgbmV3 IHN0YXRpc3RpY3Mgcm93cwptYXRjaCB0aGUgb2lkcyBzcGVjaWZpZWQgaW4gdGhlIGpzb24uIFNl dHRpbmcgdGhpcyBmbGFnIG1ha2VzIHNlbnNlCmR1cmluZyBhIGJpbmFyeSB1cGdyYWRlLCBidXQg bm90IGEgcmVzdG9yZS4KClRoaXMgZnVuY3Rpb24gYWxzbyBhbGxvd3MgZm9yIHR3ZWFraW5nIG9m IHRhYmxlIHN0YXRpc3RpY3MgaW4tcGxhY2UsCmFsbG93aW5nIHRoZSB1c2VyIHRvIGluZmxhdGUg cm93Y291bnRzLCBza2V3IGhpc3RvZ3JhbXMsIGV0YywgdG8gc2VlCndoYXQgdGhvc2UgY2hhbmdl cyB3aWxsIGV2b2tlIGZyb20gdGhlIHF1ZXJ5IHBsYW5uZXIuCi0tLQogc3JjL2luY2x1ZGUvY2F0 YWxvZy9wZ19wcm9jLmRhdCAgICAgICAgICAgICAgIHwgICAgNiArLQogc3JjL2luY2x1ZGUvc3Rh dGlzdGljcy9zdGF0aXN0aWNzLmggICAgICAgICAgIHwgICAyMCArCiBzcmMvYmFja2VuZC9zdGF0 aXN0aWNzL01ha2VmaWxlICAgICAgICAgICAgICAgfCAgICAzICstCiBzcmMvYmFja2VuZC9zdGF0 aXN0aWNzL21lc29uLmJ1aWxkICAgICAgICAgICAgfCAgICAxICsKIHNyYy9iYWNrZW5kL3N0YXRp c3RpY3Mvc3RhdGlzdGljcy5jICAgICAgICAgICB8IDEzOTAgKysrKysrKysrKysrKysrKysKIC4u Li9yZWdyZXNzL2V4cGVjdGVkL3N0YXRzX2V4cG9ydF9pbXBvcnQub3V0ICB8ICA1MzAgKysrKysr Kwogc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZSAgICAgICAgICAgIHwgICAgMiAr LQogc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3RhdHNfZXhwb3J0X2ltcG9ydC5zcWwgIHwgIDQ5OSAr KysrKysKIGRvYy9zcmMvc2dtbC9mdW5jLnNnbWwgICAgICAgICAgICAgICAgICAgICAgICB8ICAg NTYgKwogOSBmaWxlcyBjaGFuZ2VkLCAyNTA0IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0p CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9zdGF0aXN0aWNzLmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N0YXRzX2V4cG9y dF9pbXBvcnQub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3Rh dHNfZXhwb3J0X2ltcG9ydC5zcWwKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3Bn X3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAppbmRleCAyOWFmNGNl NjVkLi5lYzhjZTdjM2MwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2Mu ZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTg4MjUsNyArODgy NSwxMSBAQAogeyBvaWQgPT4gJzM4MTMnLCBkZXNjciA9PiAnZ2VuZXJhdGUgWE1MIHRleHQgbm9k ZScsCiAgIHByb25hbWUgPT4gJ3htbHRleHQnLCBwcm9pc3N0cmljdCA9PiAndCcsIHByb3JldHR5 cGUgPT4gJ3htbCcsCiAgIHByb2FyZ3R5cGVzID0+ICd0ZXh0JywgcHJvc3JjID0+ICd4bWx0ZXh0 JyB9LAotCit7IG9pZCA9PiAnMzgxNCcsCisgIGRlc2NyID0+ICdzdGF0aXN0aWNzOiBpbXBvcnQg dG8gcmVsYXRpb24nLAorICBwcm9uYW1lID0+ICdwZ19pbXBvcnRfcmVsX3N0YXRzJywgcHJvdm9s YXRpbGUgPT4gJ3YnLCBwcm9pc3N0cmljdCA9PiAnZicsCisgIHByb3BhcmFsbGVsID0+ICd1Jywg cHJvcmV0dHlwZSA9PiAnYm9vbCcsIHByb2FyZ3R5cGVzID0+ICdvaWQganNvbmIgYm9vbCBib29s JywKKyAgcHJvc3JjID0+ICdwZ19pbXBvcnRfcmVsX3N0YXRzJyB9LAogeyBvaWQgPT4gJzI5MjMn LCBkZXNjciA9PiAnbWFwIHRhYmxlIGNvbnRlbnRzIHRvIFhNTCcsCiAgIHByb25hbWUgPT4gJ3Rh YmxlX3RvX3htbCcsIHByb2Nvc3QgPT4gJzEwMCcsIHByb3ZvbGF0aWxlID0+ICdzJywKICAgcHJv cGFyYWxsZWwgPT4gJ3InLCBwcm9yZXR0eXBlID0+ICd4bWwnLApkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvc3RhdGlzdGljcy9zdGF0aXN0aWNzLmggYi9zcmMvaW5jbHVkZS9zdGF0aXN0aWNzL3N0 YXRpc3RpY3MuaAppbmRleCA3ZjJiZjE4NzE2Li4xMWEyMTNlMjFhIDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9zdGF0aXN0aWNzL3N0YXRpc3RpY3MuaAorKysgYi9zcmMvaW5jbHVkZS9zdGF0aXN0 aWNzL3N0YXRpc3RpY3MuaApAQCAtMTI3LDQgKzEyNywyNCBAQCBleHRlcm4gU3RhdGlzdGljRXh0 SW5mbyAqY2hvb3NlX2Jlc3Rfc3RhdGlzdGljcyhMaXN0ICpzdGF0cywgY2hhciByZXF1aXJlZGtp bmQsCiAJCQkJCQkJCQkJCQlpbnQgbmNsYXVzZXMpOwogZXh0ZXJuIEhlYXBUdXBsZSBzdGF0ZXh0 X2V4cHJlc3Npb25zX2xvYWQoT2lkIHN0eG9pZCwgYm9vbCBpbmgsIGludCBpZHgpOwogCitleHRl cm4gRGF0dW0gcGdfaW1wb3J0X3JlbF9zdGF0cyhQR19GVU5DVElPTl9BUkdTKTsKKworZXh0ZXJu IFZhY0F0dHJTdGF0cyAqZXhhbWluZV9yZWxfYXR0cmlidXRlKFJlbGF0aW9uIG9uZXJlbCwgaW50 IGF0dG51bSwKKwkJCQkJCQkJCQkgICBOb2RlICppbmRleF9leHByKTsKKworZXh0ZXJuIEhlYXBU dXBsZSAqaW1wb3J0X3BnX3N0YXRpc3RpY3MoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBzZCwKKwkJ CQkJCQkJCSAgIGludCBzZXJ2ZXJfdmVyc2lvbl9udW0sCisJCQkJCQkJCQkgICBjb25zdCBEYXR1 bSAqZGF0dW1zLCBjb25zdCBib29sICpudWxscywKKwkJCQkJCQkJCSAgIGJvb2wgcmVxdWlyZV9t YXRjaF9vaWRzLCBpbnQgKm50dXBsZXMpOworCitleHRlcm4gdm9pZCB2YWxpZGF0ZV9ub19kdXBs aWNhdGVzKERhdHVtIGRvY3VtZW50LCBib29sIGRvY3VtZW50X251bGwsCisJCQkJCQkJCSAgIGNv bnN0IGNoYXIgKnNxbCwgY29uc3QgY2hhciAqZG9jbmFtZSwKKwkJCQkJCQkJICAgY29uc3QgY2hh ciAqY29sbmFtZSk7CisKK2V4dGVybiB2b2lkIHZhbGlkYXRlX2V4cG9ydGVkX3R5cGVzKERhdHVt IHR5cGVzLCBib29sIHR5cGVzX251bGwpOworZXh0ZXJuIHZvaWQgdmFsaWRhdGVfZXhwb3J0ZWRf Y29sbGF0aW9ucyhEYXR1bSBjb2xsYXRpb25zLCBib29sIGNvbGxhdGlvbnNfbnVsbCk7CitleHRl cm4gdm9pZCB2YWxpZGF0ZV9leHBvcnRlZF9vcGVyYXRvcnMoRGF0dW0gb3BlcmF0b3JzLCBib29s IG9wZXJhdG9yc19udWxsKTsKK2V4dGVybiB2b2lkIHZhbGlkYXRlX2V4cG9ydGVkX2F0dHJpYnV0 ZXMoRGF0dW0gYXR0cmlidXRlcywgYm9vbCBhdHRyaWJ1dGVzX251bGwpOworZXh0ZXJuIHZvaWQg dmFsaWRhdGVfZXhwb3J0ZWRfc3RhdGlzdGljcyhEYXR1bSBzdGF0aXN0aWNzLCBib29sIHN0YXRp c3RpY3NfbnVsbCk7CisKICNlbmRpZgkJCQkJCQkvKiBTVEFUSVNUSUNTX0ggKi8KZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3N0YXRpc3RpY3MvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9zdGF0aXN0 aWNzL01ha2VmaWxlCmluZGV4IDg5Y2Y4YzI3OTcuLmU0ZjhhYjdjNGYgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3N0YXRpc3RpY3MvTWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvc3RhdGlzdGlj cy9NYWtlZmlsZQpAQCAtMTYsNiArMTYsNyBAQCBPQkpTID0gXAogCWRlcGVuZGVuY2llcy5vIFwK IAlleHRlbmRlZF9zdGF0cy5vIFwKIAltY3YubyBcCi0JbXZkaXN0aW5jdC5vCisJbXZkaXN0aW5j dC5vIFwKKwlzdGF0aXN0aWNzLm8KIAogaW5jbHVkZSAkKHRvcF9zcmNkaXIpL3NyYy9iYWNrZW5k L2NvbW1vbi5tawpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9tZXNvbi5idWls ZCBiL3NyYy9iYWNrZW5kL3N0YXRpc3RpY3MvbWVzb24uYnVpbGQKaW5kZXggNzNiMjlhM2Q1MC4u MzMxZTgyYzc3NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9tZXNvbi5idWls ZAorKysgYi9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL21lc29uLmJ1aWxkCkBAIC01LDQgKzUsNSBA QCBiYWNrZW5kX3NvdXJjZXMgKz0gZmlsZXMoCiAgICdleHRlbmRlZF9zdGF0cy5jJywKICAgJ21j di5jJywKICAgJ212ZGlzdGluY3QuYycsCisgICdzdGF0aXN0aWNzLmMnLAogKQpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9zdGF0aXN0aWNzLmMgYi9zcmMvYmFja2VuZC9zdGF0 aXN0aWNzL3N0YXRpc3RpY3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw Li42Y2JhNzgwNjkxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9z dGF0aXN0aWNzLmMKQEAgLTAsMCArMSwxMzkwIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisg KiBzdGF0aXN0aWNzLmMKKyAqCisgKiBJREVOVElGSUNBVElPTgorICogICAgICAgc3JjL2JhY2tl bmQvc3RhdGlzdGljcy9zdGF0aXN0aWNzLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwor CisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgImFjY2Vzcy9oZWFwYW0uaCIKKyNp bmNsdWRlICJjYXRhbG9nL2luZGV4aW5nLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlLmgi CisjaW5jbHVkZSAiZXhlY3V0b3Ivc3BpLmgiCisjaW5jbHVkZSAiZm1nci5oIgorI2luY2x1ZGUg Im5vZGVzL25vZGVGdW5jcy5oIgorI2luY2x1ZGUgInBhcnNlci9wYXJzZV9vcGVyLmgiCisjaW5j bHVkZSAic3RhdGlzdGljcy9zdGF0aXN0aWNzLmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMu aCIKKyNpbmNsdWRlICJ1dGlscy9yZWwuaCIKKyNpbmNsdWRlICJ1dGlscy9mbWdyb2lkcy5oIgor I2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgorI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgi CisKKy8qCisgKiBTdHJ1Y3QgdG8gY2FwdHVyZSBvbmx5IHRoZSBpbmZvbXJhdGlvbiB3ZSBuZWVk IGZyb20KKyAqIGV4YW1pbmVfYXR0cmlidXRlLgorICovCit0eXBlZGVmIHN0cnVjdCB7CisJT2lk CQl0eXBpZDsKKwlpbnQzMgl0eXBtb2Q7CisJT2lkIAllcW9wcjsKKwlPaWQgCWx0b3ByOworCU9p ZAkJYmFzZXR5cGlkOworCU9pZCAJYmFzZWVxb3ByOworCU9pZCAJYmFzZWx0b3ByOworfSBBdHRy SW5mbzsKKworCisvKgorICogR2VuZXJhdGUgQXR0ckluZm8gZW50cmllcyBmb3IgZWFjaCBhdHRy aWJ1dGUgaW4gdGhlIHJlbGF0aW9uLgorICogVGhpcyBkYXRhIGlzIGEgc21hbGwgc3Vic2V0IG9m IHdoYXQgVmFjQXR0clN0YXRzIGNvbGxlY3RzLAorICogYW5kIHdlIGxldmVyYWdlIFZhY0F0dHJT dGF0cyB0byBzdGF5IGNvbXBhdGlibGUgd2l0aCB3aGF0CisgKiBkb19hbmFseXplKCkgZG9lcy4K KyAqLworc3RhdGljIEF0dHJJbmZvICoKK2dldF9hdHRyaW5mbyhSZWxhdGlvbiByZWwpCit7CisJ VHVwbGVEZXNjCXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbCk7CisJaW50CQkJbmF0dHMg PSB0dXBkZXNjLT5uYXR0czsKKwlib29sCQloYXNfaW5kZXhfZXhwcnMgPSBmYWxzZTsKKwlMaXN0 Q2VsbCAgICppbmRleHByX2l0ZW0gPSBOVUxMOworCUF0dHJJbmZvICAgKnJlcyA9IHBhbGxvYzAo bmF0dHMgKiBzaXplb2YoQXR0ckluZm8pKTsKKwlpbnQJCQlpOworCisJLyoKKwkgKiBJZiB0aGlz IHJlbGF0aW9uIGlzIGFuIGluZGV4IGFuZCB0aGF0IGluZGV4IGhhcyBleHByZXNzaW9ucyBpbgor CSAqIGl0LCB0aGVuIHdlIHdpbGwgbmVlZCB0byBrZWVwIHRoZSBsaXN0IG9mIHJlbWFpbmluZyBl eHByZXNzaW9ucworCSAqIGFsaWduZWQgd2l0aCB0aGUgYXR0cmlidXRlcyBhcyB3ZSBpdGVyYXRl IG92ZXIgdGhlbSwgd2hldGhlciBvcgorCSAqIG5vdCB0aG9zZSBhdHRyaWJ1dGVzIGhhdmUgc3Rh dGlzdGljcyB0byBpbXBvcnQuCisJKi8KKwlpZiAoKHJlbC0+cmRfcmVsLT5yZWxraW5kID09IFJF TEtJTkRfSU5ERVgKKwkJCQl8fCAocmVsLT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9QQVJU SVRJT05FRF9JTkRFWCkpCisJCQkmJiAocmVsLT5yZF9pbmRleHBycyAhPSBOSUwpKQorCXsKKwkJ aGFzX2luZGV4X2V4cHJzID0gdHJ1ZTsKKwkJaW5kZXhwcl9pdGVtID0gbGlzdF9oZWFkKHJlbC0+ cmRfaW5kZXhwcnMpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBuYXR0czsgaSsrKQorCXsKKwkJ Tm9kZSAqaW5kZXhfZXhwciA9IE5VTEw7CisJCVZhY0F0dHJTdGF0cyAqc3RhdHM7CisKKwkJLyoK KwkJICogSWYgdGhpcyB0aGlzIGF0dHJpYnV0ZSBpcyBhbiBleHByZXNzaW9uLCBwb3AgYW4gZXhw cmVzc2lvbiBvZmYKKwkJICogb2YgdGhlIGxpc3QuCisJCSAqLworCQlpZiAoaGFzX2luZGV4X2V4 cHJzICYmIChyZWwtPnJkX2luZGV4LT5pbmRrZXkudmFsdWVzW2ldID09IDApKQorCQl7CisJCQlp ZiAoaW5kZXhwcl9pdGVtID09IE5VTEwpICAgLyogc2hvdWxkbid0IGhhcHBlbiAqLworCQkJCWVs b2coRVJST1IsICJ0b28gZmV3IGVudHJpZXMgaW4gaW5kZXhwcnMgbGlzdCIpOworCisJCQlpbmRl eF9leHByID0gKE5vZGUgKikgbGZpcnN0KGluZGV4cHJfaXRlbSk7CisJCQlpbmRleHByX2l0ZW0g PSBsbmV4dChyZWwtPnJkX2luZGV4cHJzLCBpbmRleHByX2l0ZW0pOworCQl9CisKKwkJc3RhdHMg PSBleGFtaW5lX3JlbF9hdHRyaWJ1dGUocmVsLCBpKzEsIGluZGV4X2V4cHIpOworCisJCXJlc1tp XS50eXBpZCA9IHN0YXRzLT5hdHRydHlwaWQ7CisJCXJlc1tpXS50eXBtb2QgPSBzdGF0cy0+YXR0 cnR5cG1vZDsKKwkJZ2V0X3NvcnRfZ3JvdXBfb3BlcmF0b3JzKHJlc1tpXS50eXBpZCwKKwkJCQkJ CQkJIGZhbHNlLCBmYWxzZSwgZmFsc2UsCisJCQkJCQkJCSAmcmVzW2ldLmx0b3ByLCAmcmVzW2ld LmVxb3ByLCBOVUxMLAorCQkJCQkJCQkgTlVMTCk7CisKKwkJZ2V0X3NvcnRfZ3JvdXBfb3BlcmF0 b3JzKHJlc1tpXS50eXBpZCwKKwkJCQkJCQkJIGZhbHNlLCBmYWxzZSwgZmFsc2UsCisJCQkJCQkJ CSAmcmVzW2ldLmx0b3ByLCAmcmVzW2ldLmVxb3ByLCBOVUxMLAorCQkJCQkJCQkgTlVMTCk7CisK KwkJcmVzW2ldLmJhc2V0eXBpZCA9IGdldF9iYXNlX2VsZW1lbnRfdHlwZShzdGF0cy0+YXR0cnR5 cGlkKTsKKwkJaWYgKHJlc1tpXS5iYXNldHlwaWQgPT0gSW52YWxpZE9pZCkKKwkJeworCQkJLyog dHlwZSBpcyBpdHMgb3duIGJhc2UgdHlwZSAqLworCQkJcmVzW2ldLmJhc2V0eXBpZCA9IHJlc1tp XS50eXBpZDsKKwkJCXJlc1tpXS5iYXNlbHRvcHIgPSByZXNbaV0ubHRvcHI7CisJCQlyZXNbaV0u YmFzZWVxb3ByID0gcmVzW2ldLmVxb3ByOworCQl9CisJCWVsc2UKKwkJCWdldF9zb3J0X2dyb3Vw X29wZXJhdG9ycyhyZXNbaV0uYmFzZXR5cGlkLAorCQkJCQkJCQkJIGZhbHNlLCBmYWxzZSwgZmFs c2UsCisJCQkJCQkJCQkgJnJlc1tpXS5iYXNlbHRvcHIsICZyZXNbaV0uYmFzZWVxb3ByLAorCQkJ CQkJCQkJIE5VTEwsIE5VTEwpOworCisJfQorCXJldHVybiByZXM7Cit9CisKKy8qCisgKiBleGFt aW5lX3JlbF9hdHRyaWJ1dGUgLS0gcHJlLWFuYWx5c2lzIG9mIGEgc2luZ2xlIGNvbHVtbgorICoK KyAqIERldGVybWluZSB3aGV0aGVyIHRoZSBjb2x1bW4gaXMgYW5hbHl6YWJsZTsgaWYgc28sIGNy ZWF0ZSBhbmQgaW5pdGlhbGl6ZQorICogYSBWYWNBdHRyU3RhdHMgc3RydWN0IGZvciBpdC4gIElm IG5vdCwgcmV0dXJuIE5VTEwuCisgKgorICogSWYgaW5kZXhfZXhwciBpc24ndCBOVUxMLCB0aGVu IHdlJ3JlIHRyeWluZyB0byBpbXBvcnQgYW4gZXhwcmVzc2lvbiBpbmRleCwKKyAqIGFuZCBpbmRl eF9leHByIGlzIHRoZSBleHByZXNzaW9uIHRyZWUgcmVwcmVzZW50aW5nIHRoZSBjb2x1bW4ncyBk YXRhLgorICovCitWYWNBdHRyU3RhdHMgKgorZXhhbWluZV9yZWxfYXR0cmlidXRlKFJlbGF0aW9u IG9uZXJlbCwgaW50IGF0dG51bSwgTm9kZSAqaW5kZXhfZXhwcikKK3sKKwlGb3JtX3BnX2F0dHJp YnV0ZSBhdHRyID0gVHVwbGVEZXNjQXR0cihvbmVyZWwtPnJkX2F0dCwgYXR0bnVtIC0gMSk7CisJ SGVhcFR1cGxlCQl0eXB0dXBsZTsKKwlWYWNBdHRyU3RhdHMgICAqc3RhdHM7CisJaW50CQkJCWk7 CisJYm9vbAkJCW9rOworCisJLyogTmV2ZXIgYW5hbHl6ZSBkcm9wcGVkIGNvbHVtbnMgKi8KKwlp ZiAoYXR0ci0+YXR0aXNkcm9wcGVkKQorCQlyZXR1cm4gTlVMTDsKKworCS8qCisJICogQ3JlYXRl IHRoZSBWYWNBdHRyU3RhdHMgc3RydWN0LgorCSAqLworCXN0YXRzID0gKFZhY0F0dHJTdGF0cyAq KSBwYWxsb2MwKHNpemVvZihWYWNBdHRyU3RhdHMpKTsKKwlzdGF0cy0+YXR0c3RhdHRhcmdldCA9 IDE7IC8qIEFueSBub256ZXJvIHZhbHVlICovCisKKwkvKgorCSAqIFdoZW4gYW5hbHl6aW5nIGFu IGV4cHJlc3Npb24gaW5kZXgsIGJlbGlldmUgdGhlIGV4cHJlc3Npb24gdHJlZSdzIHR5cGUKKwkg KiBub3QgdGhlIGNvbHVtbiBkYXRhdHlwZSAtLS0gdGhlIGxhdHRlciBtaWdodCBiZSB0aGUgb3Bj a2V5dHlwZSBzdG9yYWdlCisJICogdHlwZSBvZiB0aGUgb3BjbGFzcywgd2hpY2ggaXMgbm90IGlu dGVyZXN0aW5nIGZvciBvdXIgcHVycG9zZXMuICAoTm90ZToKKwkgKiBpZiB3ZSBkaWQgYW55dGhp bmcgd2l0aCBub24tZXhwcmVzc2lvbiBpbmRleCBjb2x1bW5zLCB3ZSdkIG5lZWQgdG8KKwkgKiBm aWd1cmUgb3V0IHdoZXJlIHRvIGdldCB0aGUgY29ycmVjdCB0eXBlIGluZm8gZnJvbSwgYnV0IGZv ciBub3cgdGhhdCdzCisJICogbm90IGEgcHJvYmxlbS4pCUl0J3Mgbm90IGNsZWFyIHdoZXRoZXIg YW55b25lIHdpbGwgY2FyZSBhYm91dCB0aGUKKwkgKiB0eXBtb2QsIGJ1dCB3ZSBzdG9yZSB0aGF0 IHRvbyBqdXN0IGluIGNhc2UuCisJICovCisJaWYgKGluZGV4X2V4cHIpCisJeworCQlzdGF0cy0+ YXR0cnR5cGlkID0gZXhwclR5cGUoaW5kZXhfZXhwcik7CisJCXN0YXRzLT5hdHRydHlwbW9kID0g ZXhwclR5cG1vZChpbmRleF9leHByKTsKKworCQkvKgorCQkgKiBJZiBhIGNvbGxhdGlvbiBoYXMg YmVlbiBzcGVjaWZpZWQgZm9yIHRoZSBpbmRleCBjb2x1bW4sIHVzZSB0aGF0IGluCisJCSAqIHBy ZWZlcmVuY2UgdG8gYW55dGhpbmcgZWxzZTsgYnV0IGlmIG5vdCwgZmFsbCBiYWNrIHRvIHdoYXRl dmVyIHdlCisJCSAqIGNhbiBnZXQgZnJvbSB0aGUgZXhwcmVzc2lvbi4KKwkJICovCisJCWlmIChP aWRJc1ZhbGlkKG9uZXJlbC0+cmRfaW5kY29sbGF0aW9uW2F0dG51bSAtIDFdKSkKKwkJCXN0YXRz LT5hdHRyY29sbGlkID0gb25lcmVsLT5yZF9pbmRjb2xsYXRpb25bYXR0bnVtIC0gMV07CisJCWVs c2UKKwkJCXN0YXRzLT5hdHRyY29sbGlkID0gZXhwckNvbGxhdGlvbihpbmRleF9leHByKTsKKwl9 CisJZWxzZQorCXsKKwkJc3RhdHMtPmF0dHJ0eXBpZCA9IGF0dHItPmF0dHR5cGlkOworCQlzdGF0 cy0+YXR0cnR5cG1vZCA9IGF0dHItPmF0dHR5cG1vZDsKKwkJc3RhdHMtPmF0dHJjb2xsaWQgPSBh dHRyLT5hdHRjb2xsYXRpb247CisJfQorCisJdHlwdHVwbGUgPSBTZWFyY2hTeXNDYWNoZUNvcHkx KFRZUEVPSUQsCisJCQkJCQkJCSAgIE9iamVjdElkR2V0RGF0dW0oc3RhdHMtPmF0dHJ0eXBpZCkp OworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0eXB0dXBsZSkpCisJCWVsb2coRVJST1IsICJjYWNo ZSBsb29rdXAgZmFpbGVkIGZvciB0eXBlICV1Iiwgc3RhdHMtPmF0dHJ0eXBpZCk7CisJc3RhdHMt PmF0dHJ0eXBlID0gKEZvcm1fcGdfdHlwZSkgR0VUU1RSVUNUKHR5cHR1cGxlKTsKKwlzdGF0cy0+ YW5sX2NvbnRleHQgPSBOVUxMOworCXN0YXRzLT50dXBhdHRudW0gPSBhdHRudW07CisKKwkvKgor CSAqIFRoZSBmaWVsZHMgZGVzY3JpYmluZyB0aGUgc3RhdHMtPnN0YXZhbHVlc1tuXSBlbGVtZW50 IHR5cGVzIGRlZmF1bHQgdG8KKwkgKiB0aGUgdHlwZSBvZiB0aGUgZGF0YSBiZWluZyBhbmFseXpl ZCwgYnV0IHRoZSB0eXBlLXNwZWNpZmljIHR5cGFuYWx5emUKKwkgKiBmdW5jdGlvbiBjYW4gY2hh bmdlIHRoZW0gaWYgaXQgd2FudHMgdG8gc3RvcmUgc29tZXRoaW5nIGVsc2UuCisJICovCisJZm9y IChpID0gMDsgaSA8IFNUQVRJU1RJQ19OVU1fU0xPVFM7IGkrKykKKwl7CisJCXN0YXRzLT5zdGF0 eXBpZFtpXSA9IHN0YXRzLT5hdHRydHlwaWQ7CisJCXN0YXRzLT5zdGF0eXBsZW5baV0gPSBzdGF0 cy0+YXR0cnR5cGUtPnR5cGxlbjsKKwkJc3RhdHMtPnN0YXR5cGJ5dmFsW2ldID0gc3RhdHMtPmF0 dHJ0eXBlLT50eXBieXZhbDsKKwkJc3RhdHMtPnN0YXR5cGFsaWduW2ldID0gc3RhdHMtPmF0dHJ0 eXBlLT50eXBhbGlnbjsKKwl9CisKKwkvKgorCSAqIENhbGwgdGhlIHR5cGUtc3BlY2lmaWMgdHlw YW5hbHl6ZSBmdW5jdGlvbi4gIElmIG5vbmUgaXMgc3BlY2lmaWVkLCB1c2UKKwkgKiBzdGRfdHlw YW5hbHl6ZSgpLgorCSAqLworCWlmIChPaWRJc1ZhbGlkKHN0YXRzLT5hdHRydHlwZS0+dHlwYW5h bHl6ZSkpCisJCW9rID0gRGF0dW1HZXRCb29sKE9pZEZ1bmN0aW9uQ2FsbDEoc3RhdHMtPmF0dHJ0 eXBlLT50eXBhbmFseXplLAorCQkJCQkJCQkJCSAgIFBvaW50ZXJHZXREYXR1bShzdGF0cykpKTsK KwllbHNlCisJCW9rID0gc3RkX3R5cGFuYWx5emUoc3RhdHMpOworCisJaWYgKCFvayB8fCBzdGF0 cy0+Y29tcHV0ZV9zdGF0cyA9PSBOVUxMIHx8IHN0YXRzLT5taW5yb3dzIDw9IDApCisJeworCQlo ZWFwX2ZyZWV0dXBsZSh0eXB0dXBsZSk7CisJCXBmcmVlKHN0YXRzKTsKKwkJcmV0dXJuIE5VTEw7 CisJfQorCisJcmV0dXJuIHN0YXRzOworfQorCisvKgorICogRGVsZXRlIGFsbCBwZ19zdGF0aXN0 aWMgZW50cmllcyBmb3IgYSByZWxhdGlvbiArIGluaGVyaXRhbmNlIHR5cGUKKyAqLworc3RhdGlj IHZvaWQKK3JlbW92ZV9wZ19zdGF0aXN0aWNzKFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gc2QsIGJv b2wgaW5oKQoreworCVR1cGxlRGVzYwl0dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihyZWwpOwor CWludAkJCW5hdHRzID0gdHVwZGVzYy0+bmF0dHM7CisJaW50CQkJYXR0bnVtOworCisJZm9yIChh dHRudW0gPSAxOyBhdHRudW0gPD0gbmF0dHM7IGF0dG51bSsrKQorCXsKKwkJSGVhcFR1cGxlIHR1 cCA9IFNlYXJjaFN5c0NhY2hlMyhTVEFUUkVMQVRUSU5ILAorCQkJCQkJCU9iamVjdElkR2V0RGF0 dW0oUmVsYXRpb25HZXRSZWxpZChyZWwpKSwKKwkJCQkJCQlJbnQxNkdldERhdHVtKGF0dG51bSks CisJCQkJCQkJQm9vbEdldERhdHVtKGluaCkpOworCisJCWlmIChIZWFwVHVwbGVJc1ZhbGlkKHR1 cCkpCisJCXsKKwkJCUNhdGFsb2dUdXBsZURlbGV0ZShzZCwgJnR1cC0+dF9zZWxmKTsKKworCQkJ UmVsZWFzZVN5c0NhY2hlKHR1cCk7CisJCX0KKwl9Cit9CisKKyNkZWZpbmUgTlVMTEFSRyh4KSAo KHgpID8gJ24nIDogJyAnKQorCisvKgorICogQSBjb21tb24gcGF0dGVybiBvZiBkdXBsaWNhdGUg ZGV0ZWN0aW9uLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyBhIHZhbGlkIFNQSSBjb25u ZWN0aW9uLgorICovCit2b2lkCit2YWxpZGF0ZV9ub19kdXBsaWNhdGVzKERhdHVtIGRvY3VtZW50 LCBib29sIGRvY3VtZW50X251bGwsCisJCQkJCSAgIGNvbnN0IGNoYXIgKnNxbCwgY29uc3QgY2hh ciAqZG9jbmFtZSwKKwkJCQkJICAgY29uc3QgY2hhciAqY29sbmFtZSkKK3sKKwlPaWQJCWFyZ3R5 cGVzWzFdID0geyBKU09OQk9JRCB9OworCURhdHVtCWFyZ3NbMV0gPSB7IGRvY3VtZW50IH07CisJ Y2hhcglhcmdudWxsc1sxXSA9IHsgTlVMTEFSRyhkb2N1bWVudF9udWxsKSB9OworCisJU1BJVHVw bGVUYWJsZSAgKnR1cHRhYmxlOworCWludAkJCQlyZXQ7CisKKwlyZXQgPSBTUElfZXhlY3V0ZV93 aXRoX2FyZ3Moc3FsLCAxLCBhcmd0eXBlcywgYXJncywgYXJnbnVsbHMsIHRydWUsIDApOworCisJ aWYgKHJldCAhPSBTUElfT0tfU0VMRUNUKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2Rl KEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coInN0YXRpc3Rp YyBleHBvcnQgSlNPTiBpcyBub3QgaW4gcHJvcGVyIGZvcm1hdCIpKSk7CisKKwl0dXB0YWJsZSA9 IFNQSV90dXB0YWJsZTsKKwlpZiAodHVwdGFibGUtPm51bXZhbHMgPiAwKQorCXsKKwkJY2hhciAq cyA9IFNQSV9nZXR2YWx1ZSh0dXB0YWJsZS0+dmFsc1swXSwgdHVwdGFibGUtPnR1cGRlc2MsIDEp OworCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVU RVJfVkFMVUUpLAorCQkJCSBlcnJtc2coInN0YXRpc3RpYyBleHBvcnQgSlNPTiBkb2N1bWVudCBc IiVzXCIgaGFzIGR1cGxpY2F0ZSByb3dzIHdpdGggJXMgPSAlcyIsCisJCQkJCQlkb2NuYW1lLCBj b2xuYW1lLCAocykgPyBzIDogIk5VTEwiKSkpOworCX0KK30KKworLyoKKyAqIEVuc3VyZSB0aGF0 IHRoZSAidHlwZXMiIGRvY3VtZW50IGlzIHZhbGlkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gYXNz dW1lcyBhIHZhbGlkIFNQSSBjb25uZWN0aW9uLgorICovCit2b2lkCit2YWxpZGF0ZV9leHBvcnRl ZF90eXBlcyhEYXR1bSB0eXBlcywgYm9vbCB0eXBlc19udWxsKQoreworCWNvbnN0IGNoYXIgKnNx bCA9CisJCSJTRUxFQ1QgZXQub2lkICIKKwkJIkZST00ganNvbmJfdG9fcmVjb3Jkc2V0KCQxKSAi CisJCSIgICAgIEFTIGV0KG9pZCBvaWQsIHR5cG5hbWUgdGV4dCwgbnNwbmFtZSB0ZXh0KSAiCisJ CSJHUk9VUCBCWSBldC5vaWQgIgorCQkiSEFWSU5HIENPVU5UKCopID4gMSAiOworCisJdmFsaWRh dGVfbm9fZHVwbGljYXRlcyh0eXBlcywgdHlwZXNfbnVsbCwgc3FsLCAidHlwZXMiLCAib2lkIik7 Cit9CisKKy8qCisgKiBFbnN1cmUgdGhhdCB0aGUgImNvbGxhdGlvbnMiIGRvY3VtZW50IGlzIHZh bGlkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyBhIHZhbGlkIFNQSSBjb25uZWN0aW9u LgorICovCit2b2lkCit2YWxpZGF0ZV9leHBvcnRlZF9jb2xsYXRpb25zKERhdHVtIGNvbGxhdGlv bnMsIGJvb2wgY29sbGF0aW9uc19udWxsKQoreworCWNvbnN0IGNoYXIqIHNxbCA9CisJCSJTRUxF Q1QgZWMub2lkICIKKwkJIkZST00ganNvbmJfdG9fcmVjb3Jkc2V0KCQxKSAiCisJCSIgICAgIEFT IGVjKG9pZCBvaWQsIGNvbGxuYW1lIHRleHQsIG5zcG5hbWUgdGV4dCkgIgorCQkiR1JPVVAgQlkg ZWMub2lkICIKKwkJIkhBVklORyBDT1VOVCgqKSA+IDEgIjsKKworCXZhbGlkYXRlX25vX2R1cGxp Y2F0ZXMoY29sbGF0aW9ucywgY29sbGF0aW9uc19udWxsLCBzcWwsICJjb2xsYXRpb25zIiwgIm9p ZCIpOworfQorCisvKgorICogRW5zdXJlIHRoYXQgdGhlICJvcGVyYXRvcnMiIGRvY3VtZW50IGlz IHZhbGlkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyBhIHZhbGlkIFNQSSBjb25uZWN0 aW9uLgorICovCit2b2lkCit2YWxpZGF0ZV9leHBvcnRlZF9vcGVyYXRvcnMoRGF0dW0gb3BlcmF0 b3JzLCBib29sIG9wZXJhdG9yc19udWxsKQoreworCWNvbnN0IGNoYXIqIHNxbCA9CisJCSJTRUxF Q1QgZW8ub2lkICIKKwkJIkZST00ganNvbmJfdG9fcmVjb3Jkc2V0KCQxKSAiCisJCSIgICAgIEFT IGVvKG9pZCBvaWQsIG9wcm5hbWUgdGV4dCwgbnNwbmFtZSB0ZXh0KSAiCisJCSJHUk9VUCBCWSBl by5vaWQgIgorCQkiSEFWSU5HIENPVU5UKCopID4gMSAiOworCisJdmFsaWRhdGVfbm9fZHVwbGlj YXRlcyhvcGVyYXRvcnMsIG9wZXJhdG9yc19udWxsLCBzcWwsICJvcGVyYXRvcnMiLCAib2lkIik7 Cit9CisKKy8qCisgKiBFbnN1cmUgdGhhdCB0aGUgImF0dHJpYnV0ZXMiIGRvY3VtZW50IGlzIHZh bGlkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyBhIHZhbGlkIFNQSSBjb25uZWN0aW9u LgorICovCit2b2lkCit2YWxpZGF0ZV9leHBvcnRlZF9hdHRyaWJ1dGVzKERhdHVtIGF0dHJpYnV0 ZXMsIGJvb2wgYXR0cmlidXRlc19udWxsKQoreworCWNvbnN0IGNoYXIqIHNxbCA9CisJCSJTRUxF Q1QgZWEuYXR0bnVtICIKKwkJIkZST00ganNvbmJfdG9fcmVjb3Jkc2V0KCQxKSAiCisJCSIgICAg IEFTIGVhKGF0dG51bSBpbnQyLCBhdHRuYW1lIHRleHQsIGF0dHR5cGlkIG9pZCwgIgorCQkiICAg ICAgICAgICBhdHRjb2xsYXRpb24gb2lkKSAiCisJCSJHUk9VUCBCWSBlYS5hdHRudW0gIgorCQki SEFWSU5HIENPVU5UKCopID4gMSAiOworCisJdmFsaWRhdGVfbm9fZHVwbGljYXRlcyhhdHRyaWJ1 dGVzLCBhdHRyaWJ1dGVzX251bGwsIHNxbCwgImF0dHJpYnV0ZXMiLCAiYXR0bnVtIik7Cit9CisK Ky8qCisgKiBFbnN1cmUgdGhhdCB0aGUgInN0YXRpc3RpY3MiIGRvY3VtZW50IGlzIHZhbGlkLgor ICoKKyAqIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyBhIHZhbGlkIFNQSSBjb25uZWN0aW9uLgorICov Cit2b2lkCit2YWxpZGF0ZV9leHBvcnRlZF9zdGF0aXN0aWNzKERhdHVtIHN0YXRpc3RpY3MsIGJv b2wgc3RhdGlzdGljc19udWxsKQoreworCU9pZAkJYXJndHlwZXNbMV0gPSB7IEpTT05CT0lEIH07 CisJRGF0dW0JYXJnc1sxXSA9IHsgc3RhdGlzdGljcyB9OworCWNoYXIJYXJnbnVsbHNbMV0gPSB7 IE5VTExBUkcoc3RhdGlzdGljc19udWxsKSB9OworCisJY29uc3QgY2hhciAqc3FsID0KKwkJIlNF TEVDVCBzLnN0YWF0dG51bSwgcy5zdGFpbmhlcml0ICIKKwkJIkZST00ganNvbmJfdG9fcmVjb3Jk c2V0KCQxKSAiCisJCSIgICAgQVMgcyhzdGFhdHRudW0gaW50ZWdlciwgIgorCQkiICAgICAgICAg c3RhaW5oZXJpdCBib29sZWFuLCAiCisJCSIgICAgICAgICBzdGFudWxsZnJhYyBmbG9hdDQsICIK KwkJIiAgICAgICAgIHN0YXdpZHRoIGludGVnZXIsICIKKwkJIiAgICAgICAgIHN0YWRpc3RpbmN0 IGZsb2F0NCwgIgorCQkiICAgICAgICAgc3Rha2luZDEgaW50MiwgIgorCQkiICAgICAgICAgc3Rh a2luZDIgaW50MiwgIgorCQkiICAgICAgICAgc3Rha2luZDMgaW50MiwgIgorCQkiICAgICAgICAg c3Rha2luZDQgaW50MiwgIgorCQkiICAgICAgICAgc3Rha2luZDUgaW50MiwgIgorCQkiICAgICAg ICAgc3Rhb3AxIG9pZCwgIgorCQkiICAgICAgICAgc3Rhb3AyIG9pZCwgIgorCQkiICAgICAgICAg c3Rhb3AzIG9pZCwgIgorCQkiICAgICAgICAgc3Rhb3A0IG9pZCwgIgorCQkiICAgICAgICAgc3Rh b3A1IG9pZCwgIgorCQkiICAgICAgICAgc3RhY29sbDEgb2lkLCAiCisJCSIgICAgICAgICBzdGFj b2xsMiBvaWQsICIKKwkJIiAgICAgICAgIHN0YWNvbGwzIG9pZCwgIgorCQkiICAgICAgICAgc3Rh Y29sbDQgb2lkLCAiCisJCSIgICAgICAgICBzdGFjb2xsNSBvaWQsICIKKwkJIiAgICAgICAgIHN0 YW51bWJlcnMxIGZsb2F0NFtdLCAiCisJCSIgICAgICAgICBzdGFudW1iZXJzMiBmbG9hdDRbXSwg IgorCQkiICAgICAgICAgc3RhbnVtYmVyczMgZmxvYXQ0W10sICIKKwkJIiAgICAgICAgIHN0YW51 bWJlcnM0IGZsb2F0NFtdLCAiCisJCSIgICAgICAgICBzdGFudW1iZXJzNSBmbG9hdDRbXSwgIgor CQkiICAgICAgICAgc3RhdmFsdWVzMSB0ZXh0LCAiCisJCSIgICAgICAgICBzdGF2YWx1ZXMyIHRl eHQsICIKKwkJIiAgICAgICAgIHN0YXZhbHVlczMgdGV4dCwgIgorCQkiICAgICAgICAgc3RhdmFs dWVzNCB0ZXh0LCAiCisJCSIgICAgICAgICBzdGF2YWx1ZXM1IHRleHQpICIKKwkJIkdST1VQIEJZ IHMuc3RhYXR0bnVtLCBzLnN0YWluaGVyaXQgIgorCQkiSEFWSU5HIENPVU5UKCopID4gMSAiOwor CisJU1BJVHVwbGVUYWJsZSAgKnR1cHRhYmxlOworCWludAkJCQlyZXQ7CisKKwlyZXQgPSBTUElf ZXhlY3V0ZV93aXRoX2FyZ3Moc3FsLCAxLCBhcmd0eXBlcywgYXJncywgYXJnbnVsbHMsIHRydWUs IDApOworCisJaWYgKHJldCAhPSBTUElfT0tfU0VMRUNUKQorCQllcmVwb3J0KEVSUk9SLAorCQkJ CShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2co InN0YXRpc3RpYyBleHBvcnQgSlNPTiBpcyBub3QgaW4gcHJvcGVyIGZvcm1hdCIpKSk7CisKKwl0 dXB0YWJsZSA9IFNQSV90dXB0YWJsZTsKKworCWlmICh0dXB0YWJsZS0+bnVtdmFscyA+IDApCisJ eworCQljaGFyICpzMSA9IFNQSV9nZXR2YWx1ZSh0dXB0YWJsZS0+dmFsc1swXSwgdHVwdGFibGUt PnR1cGRlc2MsIDEpOworCQljaGFyICpzMiA9IFNQSV9nZXR2YWx1ZSh0dXB0YWJsZS0+dmFsc1sw XSwgdHVwdGFibGUtPnR1cGRlc2MsIDIpOworCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNv ZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygic3RhdGlz dGljIGV4cG9ydCBKU09OIGRvY3VtZW50IFwiJXNcIiBoYXMgZHVwbGljYXRlIHJvd3Mgd2l0aCAl cyA9ICVzLCAlcyA9ICVzIiwKKwkJCQkJCSJzdGF0aXN0aWNzIiwgInN0YWF0dG51bSIsIChzMSkg PyBzMSA6ICJOVUxMIiwKKwkJCQkJCSJzdGFpbmhlcml0IiwgKHMyKSA/IHMyIDogIk5VTEwiKSkp OworCX0KK30KKworCisvKgorICogVHJhbnNhY3Rpb25hbGx5IGltcG9ydCBzdGF0aXN0aWNzIGZv ciBhIGdpdmVuIHJlbGF0aW9uCisgKiBpbnRvIHBnX3N0YXRpc3RpYy4KKyAqCisgKiBUaGUganNv bmIgZGF0dW1zIGFyZSBpbiB0aGUgc2FtZSBvcmRlcjoKKyAqICAgICB0eXBlcywgY29sbGF0aW9u cywgb3BlcmF0b3JzLCBhdHRyaWJ1dGVzLCBzdGF0aXN0aWNzCisgKgorICogVGhlIHN0YXRpc3Rp Y3MgaW1wb3J0IHF1ZXJ5IGRvZXMgbm90IHZhcnkgYnkgc2VydmVyIHZlcnNpb24uCisgKiBIb3dl dmVyLCB0aGUgc3RhY29sbE4gY29sdW1ucyB3aWxsIGFsd2F5cyBiZSBOVUxMIGZvciB2ZXJzaW9u cyBwcmlvcgorICogdG8gdjEyLgorICoKKyAqIFRoZSBxdWVyeSBhcyBjdXJyZW50bHkgd3JpdHRl biBpcyBjbGVhcmx5IG92ZXJib2FyZCwgYW5kIGZvciBub3cgc2VydmVzCisgKiB0byBzaG93IHdo YXQgaXMgcG9zc2libGUgaW4gdGVybXMgb2YgY29tcGFyaW5nIHRoZSBleHBvcnRlZCBzdGF0aXN0 aWNzCisgKiB0byB0aGUgZXhpc3RpbmcgbG9jYWwgc2NoZW1hLiBPbmNlIHdlIGhhdmUgZGV0ZXJt aW5lZCB3aGF0IHR5cGVzIG9mCisgKiBjaGVja3MgYXJlIHdvcnRod2hpbGUsIHdlIGNhbiB0cmlt IG91dCB1bm5lY2Vzc2FyeSBqb2lucyBhbmQgY29sdW1ucy4KKyAqCisgKiBBbmFseXRpYyBjb2x1 bW5zIGNvbHVtbnMgbGlrZSBkdXBfY291bnQgc2VydmUgdG8gY2hlY2sgdGhlIGNvbnNpc3RlbmN5 CisgKiBhbmQgY29ycmVjdG5lc3Mgb2YgdGhlIGV4cG9ydGVkIGRhdGEuCisgKgorICogVGhlIHJl dHVybiB2YWx1ZSBpcyBhbiBhcnJheSBvZiBIZWFwVHVwbGVzLgorICogVGhlIHBhcmFtZXRlciBu dHVwbGVzIGlzIHNldCB0byB0aGUgbnVtYmVyIG9mIEhlYXBUdXBsZXMgcmV0dXJuZWQuCisgKi8K KworSGVhcFR1cGxlICoKK2ltcG9ydF9wZ19zdGF0aXN0aWNzKFJlbGF0aW9uIHJlbCwgUmVsYXRp b24gc2QsIGludCBzZXJ2ZXJfdmVyc2lvbl9udW0sCisJCQkJCSBjb25zdCBEYXR1bSAqZGF0dW1z LCBjb25zdCBib29sICpudWxscywKKwkJCQkJIGJvb2wgcmVxdWlyZV9tYXRjaF9vaWRzLCBpbnQg Km50dXBsZXMpCit7CisKKyNkZWZpbmUgUEdTX05BUkdTIDYKKworCU9pZAkJCWFyZ3R5cGVzW1BH U19OQVJHU10gPSB7CisJCQkJCUpTT05CT0lELCBKU09OQk9JRCwgSlNPTkJPSUQsIEpTT05CT0lE LCBKU09OQk9JRCwgT0lET0lEIH07CisJRGF0dW0JCWFyZ3NbUEdTX05BUkdTXSA9IHsKKwkJCQkJ ZGF0dW1zWzBdLCBkYXR1bXNbMV0sIGRhdHVtc1syXSwgZGF0dW1zWzNdLCBkYXR1bXNbNF0sCisJ CQkJCU9iamVjdElkR2V0RGF0dW0oUmVsYXRpb25HZXRSZWxpZChyZWwpKSB9OworCWNoYXIJCWFy Z251bGxzW1BHU19OQVJHU10gPSB7CisJCQkJCU5VTExBUkcobnVsbHNbMF0pLCBOVUxMQVJHKG51 bGxzWzFdKSwgTlVMTEFSRyhudWxsc1syXSksCisJCQkJCU5VTExBUkcobnVsbHNbM10pLCBOVUxM QVJHKG51bGxzWzRdKSB9OworCisJLyoKKwkgKiBUaGlzIHF1ZXJ5IGlzIGN1cnJlbnRseSBpbiBr aXRjaGVuLXNpbmsgbW9kZSwgYW5kIGl0IGNhbiBiZSB0cmltbWVkIGRvd24KKwkgKiB0byBlbGlt aW5hdGUgYW55IGNvbHVtbnMgbm90IG5lZWRlZCBmb3Igb3V0cHV0IG9yIHZhbGlkYXRpb24gb25j ZQorCSAqIGFsbCByZXF1aXJlbWVudHMgYXJlIHNldHRsZWQuCisJICovCisJY29uc3QgY2hhciAq c3FsID0KKwkJIldJVEggZXhwb3J0ZWRfdHlwZXMgQVMgKCAiCisJCSIgICAgU0VMRUNUIGV0Liog IgorCQkiICAgIEZST00ganNvbmJfdG9fcmVjb3Jkc2V0KCQxKSAiCisJCSIgICAgICAgIEFTIGV0 KG9pZCBvaWQsIHR5cG5hbWUgdGV4dCwgbnNwbmFtZSB0ZXh0KSAiCisJCSIpLCAiCisJCSJleHBv cnRlZF9jb2xsYXRpb25zIEFTICggIgorCQkiICAgIFNFTEVDVCBlYy4qICIKKwkJIiAgICBGUk9N IGpzb25iX3RvX3JlY29yZHNldCgkMikgIgorCQkiICAgICAgICBBUyBlYyhvaWQgb2lkLCBjb2xs bmFtZSB0ZXh0LCBuc3BuYW1lIHRleHQpICIKKwkJIiksICIKKwkJImV4cG9ydGVkX29wZXJhdG9y cyBBUyAoICIKKwkJIiAgICBTRUxFQ1QgZW8uKiAiCisJCSIgICAgRlJPTSBqc29uYl90b19yZWNv cmRzZXQoJDMpICIKKwkJIiAgICAgICAgQVMgZW8ob2lkIG9pZCwgb3BybmFtZSB0ZXh0LCBuc3Bu YW1lIHRleHQpICIKKwkJIiksICIKKwkJImV4cG9ydGVkX2F0dHJpYnV0ZXMgQVMgKCAiCisJCSIg ICAgU0VMRUNUIGVhLiogIgorCQkiICAgIEZST00ganNvbmJfdG9fcmVjb3Jkc2V0KCQ0KSAiCisJ CSIgICAgICAgIEFTIGVhKGF0dG51bSBpbnQyLCBhdHRuYW1lIHRleHQsIGF0dHR5cGlkIG9pZCwg IgorCQkiICAgICAgICAgICAgICBhdHRjb2xsYXRpb24gb2lkKSAiCisJCSIpLCAiCisJCSJleHBv cnRlZF9zdGF0aXN0aWNzIEFTICggIgorCQkiICAgIFNFTEVDVCBzLiogIgorCQkiICAgIEZST00g anNvbmJfdG9fcmVjb3Jkc2V0KCQ1KSAiCisJCSIgICAgICAgIEFTIHMoc3RhYXR0bnVtIGludGVn ZXIsICIKKwkJIiAgICAgICAgICAgICBzdGFpbmhlcml0IGJvb2xlYW4sICIKKwkJIiAgICAgICAg ICAgICBzdGFudWxsZnJhYyBmbG9hdDQsICIKKwkJIiAgICAgICAgICAgICBzdGF3aWR0aCBpbnRl Z2VyLCAiCisJCSIgICAgICAgICAgICAgc3RhZGlzdGluY3QgZmxvYXQ0LCAiCisJCSIgICAgICAg ICAgICAgc3Rha2luZDEgaW50MiwgIgorCQkiICAgICAgICAgICAgIHN0YWtpbmQyIGludDIsICIK KwkJIiAgICAgICAgICAgICBzdGFraW5kMyBpbnQyLCAiCisJCSIgICAgICAgICAgICAgc3Rha2lu ZDQgaW50MiwgIgorCQkiICAgICAgICAgICAgIHN0YWtpbmQ1IGludDIsICIKKwkJIiAgICAgICAg ICAgICBzdGFvcDEgb2lkLCAiCisJCSIgICAgICAgICAgICAgc3Rhb3AyIG9pZCwgIgorCQkiICAg ICAgICAgICAgIHN0YW9wMyBvaWQsICIKKwkJIiAgICAgICAgICAgICBzdGFvcDQgb2lkLCAiCisJ CSIgICAgICAgICAgICAgc3Rhb3A1IG9pZCwgIgorCQkiICAgICAgICAgICAgIHN0YWNvbGwxIG9p ZCwgIgorCQkiICAgICAgICAgICAgIHN0YWNvbGwyIG9pZCwgIgorCQkiICAgICAgICAgICAgIHN0 YWNvbGwzIG9pZCwgIgorCQkiICAgICAgICAgICAgIHN0YWNvbGw0IG9pZCwgIgorCQkiICAgICAg ICAgICAgIHN0YWNvbGw1IG9pZCwgIgorCQkiICAgICAgICAgICAgIHN0YW51bWJlcnMxIGZsb2F0 NFtdLCAiCisJCSIgICAgICAgICAgICAgc3RhbnVtYmVyczIgZmxvYXQ0W10sICIKKwkJIiAgICAg ICAgICAgICBzdGFudW1iZXJzMyBmbG9hdDRbXSwgIgorCQkiICAgICAgICAgICAgIHN0YW51bWJl cnM0IGZsb2F0NFtdLCAiCisJCSIgICAgICAgICAgICAgc3RhbnVtYmVyczUgZmxvYXQ0W10sICIK KwkJIiAgICAgICAgICAgICBzdGF2YWx1ZXMxIHRleHQsICIKKwkJIiAgICAgICAgICAgICBzdGF2 YWx1ZXMyIHRleHQsICIKKwkJIiAgICAgICAgICAgICBzdGF2YWx1ZXMzIHRleHQsICIKKwkJIiAg ICAgICAgICAgICBzdGF2YWx1ZXM0IHRleHQsICIKKwkJIiAgICAgICAgICAgICBzdGF2YWx1ZXM1 IHRleHQpICIKKwkJIikgIgorCQkiU0VMRUNUIHBnYS5hdHRudW0sIHBnYS5hdHRuYW1lLCBwZ2Eu YXR0dHlwaWQsIHBnYS5hdHR0eXBtb2QsICIKKwkJIiAgICAgICBwZ2EuYXR0Y29sbGF0aW9uLCBw Z2F0LnR5cG5hbWUsIHBnYWMuY29sbG5hbWUsICIKKwkJIiAgICAgICBlYS5hdHRudW0gQVMgZXhw X2F0dG51bSwgZWEuYXR0dHlwaWQgQVMgZXhwX2F0dHR5cGlkLCAiCisJCSIgICAgICAgZWEuYXR0 Y29sbGF0aW9uIEFTIGV4cF9hdHRjb2xsYXRpb24sICIKKwkJIiAgICAgICBldC50eXBuYW1lIEFT IGV4cF90eXBuYW1lLCBldC5uc3BuYW1lIEFTIGV4cF90eXBzY2hlbWEsICIKKwkJIiAgICAgICBl Yy5jb2xsbmFtZSBBUyBleHBfY29sbG5hbWUsIGVjLm5zcG5hbWUgQVMgZXhwX2NvbGxzY2hlbWEs ICIKKwkJIiAgICAgICBlcy5zdGFpbmhlcml0LCBlcy5zdGFudWxsZnJhYywgZXMuc3Rhd2lkdGgs IGVzLnN0YWRpc3RpbmN0LCAiCisJCSIgICAgICAgZXMuc3Rha2luZDEsIGVzLnN0YWtpbmQyLCBl cy5zdGFraW5kMywgZXMuc3Rha2luZDQsICIKKwkJIiAgICAgICBlcy5zdGFraW5kNSwgIgorCQki ICAgICAgIGVzLnN0YW9wMSBBUyBleHBfc3Rhb3AxLCBlcy5zdGFvcDIgQVMgZXhwX3N0YW9wMiwg IgorCQkiICAgICAgIGVzLnN0YW9wMyBBUyBleHBfc3Rhb3AzLCBlcy5zdGFvcDQgQVMgZXhwX3N0 YW9wNCwgIgorCQkiICAgICAgIGVzLnN0YW9wNSBBUyBleHBfc3Rhb3A1LCAiCisJCSIgICAgICAg ZXMuc3RhY29sbDEgQVMgZXhwX3N0YW9wMSwgZXMuc3RhY29sbDIgQVMgZXhwX3N0YW9wMiwgIgor CQkiICAgICAgIGVzLnN0YWNvbGwzIEFTIGV4cF9zdGFvcDMsIGVzLnN0YWNvbGw0IEFTIGV4cF9z dGFvcDQsICIKKwkJIiAgICAgICBlcy5zdGFjb2xsNSBBUyBleHBfc3Rhb3A1LCAiCisJCSIgICAg ICAgZXMuc3RhbnVtYmVyczEsIGVzLnN0YW51bWJlcnMyLCBlcy5zdGFudW1iZXJzMywgIgorCQki ICAgICAgIGVzLnN0YW51bWJlcnM0LCBlcy5zdGFudW1iZXJzNSwgIgorCQkiICAgICAgIGVzLnN0 YXZhbHVlczEsIGVzLnN0YXZhbHVlczIsIGVzLnN0YXZhbHVlczMsIGVzLnN0YXZhbHVlczQsICIK KwkJIiAgICAgICBlcy5zdGF2YWx1ZXM1LCAiCisJCSIgICAgICAgZW8xLm5zcG5hbWUgQVMgZXhw X29wcnNjaGVtYTEsICIKKwkJIiAgICAgICBlbzIubnNwbmFtZSBBUyBleHBfb3Byc2NoZW1hMiwg IgorCQkiICAgICAgIGVvMy5uc3BuYW1lIEFTIGV4cF9vcHJzY2hlbWEzLCAiCisJCSIgICAgICAg ZW80Lm5zcG5hbWUgQVMgZXhwX29wcnNjaGVtYTQsICIKKwkJIiAgICAgICBlbzUubnNwbmFtZSBB UyBleHBfb3Byc2NoZW1hNSwgIgorCQkiICAgICAgIGVvMS5vcHJuYW1lIEFTIGV4cF9vcHJuYW1l MSwgIgorCQkiICAgICAgIGVvMi5vcHJuYW1lIEFTIGV4cF9vcHJuYW1lMiwgIgorCQkiICAgICAg IGVvMy5vcHJuYW1lIEFTIGV4cF9vcHJuYW1lMywgIgorCQkiICAgICAgIGVvNC5vcHJuYW1lIEFT IGV4cF9vcHJuYW1lNCwgIgorCQkiICAgICAgIGVvNS5vcHJuYW1lIEFTIGV4cF9vcHJuYW1lNSwg IgorCQkiICAgICAgIGNvYWxlc2NlKGlvMS5vaWQsIDApIEFTIHN0YW9wMSwgIgorCQkiICAgICAg IGNvYWxlc2NlKGlvMi5vaWQsIDApIEFTIHN0YW9wMiwgIgorCQkiICAgICAgIGNvYWxlc2NlKGlv My5vaWQsIDApIEFTIHN0YW9wMywgIgorCQkiICAgICAgIGNvYWxlc2NlKGlvNC5vaWQsIDApIEFT IHN0YW9wNCwgIgorCQkiICAgICAgIGNvYWxlc2NlKGlvNS5vaWQsIDApIEFTIHN0YW9wNSwgIgor CQkiICAgICAgIGVjMS5uc3BuYW1lIEFTIGV4cF9jb2xsc2NoZW1hMSwgIgorCQkiICAgICAgIGVj Mi5uc3BuYW1lIEFTIGV4cF9jb2xsc2NoZW1hMiwgIgorCQkiICAgICAgIGVjMy5uc3BuYW1lIEFT IGV4cF9jb2xsc2NoZW1hMywgIgorCQkiICAgICAgIGVjNC5uc3BuYW1lIEFTIGV4cF9jb2xsc2No ZW1hNCwgIgorCQkiICAgICAgIGVjNS5uc3BuYW1lIEFTIGV4cF9jb2xsc2NoZW1hNSwgIgorCQki ICAgICAgIGVjMS5jb2xsbmFtZSBBUyBleHBfY29sbG5hbWUxLCAiCisJCSIgICAgICAgZWMyLmNv bGxuYW1lIEFTIGV4cF9jb2xsbmFtZTIsICIKKwkJIiAgICAgICBlYzMuY29sbG5hbWUgQVMgZXhw X2NvbGxuYW1lMywgIgorCQkiICAgICAgIGVjNC5jb2xsbmFtZSBBUyBleHBfY29sbG5hbWU0LCAi CisJCSIgICAgICAgZWM1LmNvbGxuYW1lIEFTIGV4cF9jb2xsbmFtZTUsICIKKwkJIiAgICAgICBj b2FsZXNjZShpYzEub2lkLCAwKSBBUyBzdGFjb2xsMSwgIgorCQkiICAgICAgIGNvYWxlc2NlKGlj Mi5vaWQsIDApIEFTIHN0YWNvbGwyLCAiCisJCSIgICAgICAgY29hbGVzY2UoaWMzLm9pZCwgMCkg QVMgc3RhY29sbDMsICIKKwkJIiAgICAgICBjb2FsZXNjZShpYzQub2lkLCAwKSBBUyBzdGFjb2xs NCwgIgorCQkiICAgICAgIGNvYWxlc2NlKGljNS5vaWQsIDApIEFTIHN0YWNvbGw1LCAiCisJCSIg ICAgICAgKHBnYS5hdHRuYW1lIElTIERJU1RJTkNUIEZST00gZWEuYXR0bmFtZSkgQVMgYXR0bmFt ZV9taXNzLCAiCisJCSIgICAgICAgKGVhLmF0dG51bSBJUyBESVNUSU5DVCBGUk9NIGVzLnN0YWF0 dG51bSkgQVMgc3RhYXR0bnVtX21pc3MsICIKKwkJIiAgICAgICBDT1VOVCgqKSBPVkVSIChQQVJU SVRJT04gQlkgcGdhLmF0dG51bSwgIgorCQkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBlcy5zdGFpbmhlcml0KSBBUyBkdXBfY291bnQgIgorCQkiRlJPTSBwZ19hdHRyaWJ1dGUg QVMgcGdhICIKKwkJIkpPSU4gcGdfdHlwZSBBUyBwZ2F0IE9OIHBnYXQub2lkID0gcGdhLmF0dHR5 cGlkICIKKwkJIkxFRlQgSk9JTiBwZ19jb2xsYXRpb24gQVMgcGdhYyBPTiBwZ2FjLm9pZCA9IHBn YS5hdHRjb2xsYXRpb24gIgorCQkiTEVGVCBKT0lOIGV4cG9ydGVkX2F0dHJpYnV0ZXMgQVMgZWEg T04gZWEuYXR0bmFtZSA9IHBnYS5hdHRuYW1lICIKKwkJIkxFRlQgSk9JTiBleHBvcnRlZF9zdGF0 aXN0aWNzIEFTIGVzIE9OIGVzLnN0YWF0dG51bSA9IGVhLmF0dG51bSAiCisJCSJMRUZUIEpPSU4g ZXhwb3J0ZWRfdHlwZXMgQVMgZXQgT04gZXQub2lkID0gZWEuYXR0dHlwaWQgIgorCQkiTEVGVCBK T0lOIGV4cG9ydGVkX2NvbGxhdGlvbnMgQVMgZWMgT04gZWMub2lkID0gZWEuYXR0Y29sbGF0aW9u ICIKKwkJIkxFRlQgSk9JTiBleHBvcnRlZF9vcGVyYXRvcnMgQVMgZW8xIE9OIGVvMS5vaWQgPSBl cy5zdGFvcDEgIgorCQkiTEVGVCBKT0lOIGV4cG9ydGVkX29wZXJhdG9ycyBBUyBlbzIgT04gZW8y Lm9pZCA9IGVzLnN0YW9wMiAiCisJCSJMRUZUIEpPSU4gZXhwb3J0ZWRfb3BlcmF0b3JzIEFTIGVv MyBPTiBlbzMub2lkID0gZXMuc3Rhb3AzICIKKwkJIkxFRlQgSk9JTiBleHBvcnRlZF9vcGVyYXRv cnMgQVMgZW80IE9OIGVvNC5vaWQgPSBlcy5zdGFvcDQgIgorCQkiTEVGVCBKT0lOIGV4cG9ydGVk X29wZXJhdG9ycyBBUyBlbzUgT04gZW81Lm9pZCA9IGVzLnN0YW9wNSAiCisJCSJMRUZUIEpPSU4g ZXhwb3J0ZWRfY29sbGF0aW9ucyBBUyBlYzEgT04gZWMxLm9pZCA9IGVzLnN0YWNvbGwxICIKKwkJ IkxFRlQgSk9JTiBleHBvcnRlZF9jb2xsYXRpb25zIEFTIGVjMiBPTiBlYzIub2lkID0gZXMuc3Rh Y29sbDIgIgorCQkiTEVGVCBKT0lOIGV4cG9ydGVkX2NvbGxhdGlvbnMgQVMgZWMzIE9OIGVjMy5v aWQgPSBlcy5zdGFjb2xsMyAiCisJCSJMRUZUIEpPSU4gZXhwb3J0ZWRfY29sbGF0aW9ucyBBUyBl YzQgT04gZWM0Lm9pZCA9IGVzLnN0YWNvbGw0ICIKKwkJIkxFRlQgSk9JTiBleHBvcnRlZF9jb2xs YXRpb25zIEFTIGVjNSBPTiBlYzUub2lkID0gZXMuc3RhY29sbDUgIgorCQkiTEVGVCBKT0lOIHBn X25hbWVzcGFjZSBBUyBpb24xIE9OIGlvbjEubnNwbmFtZSA9IGVvMS5uc3BuYW1lICIKKwkJIkxF RlQgSk9JTiBwZ19uYW1lc3BhY2UgQVMgaW9uMiBPTiBpb24yLm5zcG5hbWUgPSBlbzIubnNwbmFt ZSAiCisJCSJMRUZUIEpPSU4gcGdfbmFtZXNwYWNlIEFTIGlvbjMgT04gaW9uMy5uc3BuYW1lID0g ZW8zLm5zcG5hbWUgIgorCQkiTEVGVCBKT0lOIHBnX25hbWVzcGFjZSBBUyBpb240IE9OIGlvbjQu bnNwbmFtZSA9IGVvNC5uc3BuYW1lICIKKwkJIkxFRlQgSk9JTiBwZ19uYW1lc3BhY2UgQVMgaW9u NSBPTiBpb241Lm5zcG5hbWUgPSBlbzUubnNwbmFtZSAiCisJCSJMRUZUIEpPSU4gcGdfbmFtZXNw YWNlIEFTIGljbjEgT04gaWNuMS5uc3BuYW1lID0gZWMxLm5zcG5hbWUgIgorCQkiTEVGVCBKT0lO IHBnX25hbWVzcGFjZSBBUyBpY24yIE9OIGljbjIubnNwbmFtZSA9IGVjMi5uc3BuYW1lICIKKwkJ IkxFRlQgSk9JTiBwZ19uYW1lc3BhY2UgQVMgaWNuMyBPTiBpY24zLm5zcG5hbWUgPSBlYzMubnNw bmFtZSAiCisJCSJMRUZUIEpPSU4gcGdfbmFtZXNwYWNlIEFTIGljbjQgT04gaWNuNC5uc3BuYW1l ID0gZWM0Lm5zcG5hbWUgIgorCQkiTEVGVCBKT0lOIHBnX25hbWVzcGFjZSBBUyBpY241IE9OIGlj bjUubnNwbmFtZSA9IGVjNS5uc3BuYW1lICIKKwkJIkxFRlQgSk9JTiBwZ19vcGVyYXRvciBBUyBp bzEgT04gaW8xLm9wcm5hbWVzcGFjZSA9IGlvbjEub2lkICIKKwkJIiAgICBBTkQgaW8xLm9wcm5h bWUgPSBlbzEub3BybmFtZSAiCisJCSIgICAgQU5EIGlvMS5vcHJsZWZ0ID0gcGdhLmF0dHR5cGlk ICIKKwkJIiAgICBBTkQgaW8xLm9wcnJpZ2h0ID0gcGdhLmF0dHR5cGlkICIKKwkJIkxFRlQgSk9J TiBwZ19vcGVyYXRvciBBUyBpbzIgT04gaW8yLm9wcm5hbWVzcGFjZSA9IGlvbjIub2lkICIKKwkJ IiAgICBBTkQgaW8yLm9wcm5hbWUgPSBlbzIub3BybmFtZSAiCisJCSIgICAgQU5EIGlvMi5vcHJs ZWZ0ID0gcGdhLmF0dHR5cGlkICIKKwkJIiAgICBBTkQgaW8yLm9wcnJpZ2h0ID0gcGdhLmF0dHR5 cGlkICIKKwkJIkxFRlQgSk9JTiBwZ19vcGVyYXRvciBBUyBpbzMgT04gaW8zLm9wcm5hbWVzcGFj ZSA9IGlvbjMub2lkICIKKwkJIiAgICBBTkQgaW8zLm9wcm5hbWUgPSBlbzMub3BybmFtZSAiCisJ CSIgICAgQU5EIGlvMy5vcHJsZWZ0ID0gcGdhLmF0dHR5cGlkICIKKwkJIiAgICBBTkQgaW8zLm9w cnJpZ2h0ID0gcGdhLmF0dHR5cGlkICIKKwkJIkxFRlQgSk9JTiBwZ19vcGVyYXRvciBBUyBpbzQg T04gaW80Lm9wcm5hbWVzcGFjZSA9IGlvbjQub2lkICIKKwkJIiAgICBBTkQgaW80Lm9wcm5hbWUg PSBlbzQub3BybmFtZSAiCisJCSIgICAgQU5EIGlvNC5vcHJsZWZ0ID0gcGdhLmF0dHR5cGlkICIK KwkJIiAgICBBTkQgaW80Lm9wcnJpZ2h0ID0gcGdhLmF0dHR5cGlkICIKKwkJIkxFRlQgSk9JTiBw Z19vcGVyYXRvciBBUyBpbzUgT04gaW81Lm9wcm5hbWVzcGFjZSA9IGlvbjUub2lkICIKKwkJIiAg ICBBTkQgaW81Lm9wcm5hbWUgPSBlbzUub3BybmFtZSAiCisJCSIgICAgQU5EIGlvNS5vcHJsZWZ0 ID0gcGdhLmF0dHR5cGlkICIKKwkJIiAgICBBTkQgaW81Lm9wcnJpZ2h0ID0gcGdhLmF0dHR5cGlk ICIKKwkJIkxFRlQgSk9JTiBwZ19jb2xsYXRpb24gYXMgaWMxICIKKwkJIiAgIE9OIGljMS5jb2xs bmFtZXNwYWNlID0gaWNuMS5vaWQgQU5EIGljMS5jb2xsbmFtZSA9IGVjMS5jb2xsbmFtZSAiCisJ CSJMRUZUIEpPSU4gcGdfY29sbGF0aW9uIGFzIGljMiAiCisJCSIgICBPTiBpYzIuY29sbG5hbWVz cGFjZSA9IGljbjIub2lkIEFORCBpYzIuY29sbG5hbWUgPSBlYzIuY29sbG5hbWUgIgorCQkiTEVG VCBKT0lOIHBnX2NvbGxhdGlvbiBhcyBpYzMgIgorCQkiICAgT04gaWMzLmNvbGxuYW1lc3BhY2Ug PSBpY24zLm9pZCBBTkQgaWMzLmNvbGxuYW1lID0gZWMzLmNvbGxuYW1lICIKKwkJIkxFRlQgSk9J TiBwZ19jb2xsYXRpb24gYXMgaWM0ICIKKwkJIiAgIE9OIGljNC5jb2xsbmFtZXNwYWNlID0gaWNu NC5vaWQgQU5EIGljNC5jb2xsbmFtZSA9IGVjNC5jb2xsbmFtZSAiCisJCSJMRUZUIEpPSU4gcGdf Y29sbGF0aW9uIGFzIGljNSAiCisJCSIgICBPTiBpYzUuY29sbG5hbWVzcGFjZSA9IGljbjUub2lk IEFORCBpYzUuY29sbG5hbWUgPSBlYzUuY29sbG5hbWUgIgorCQkiV0hFUkUgcGdhLmF0dHJlbGlk ID0gJDYgIgorCQkiQU5EIHBnYS5hdHRudW0gPiAwICIKKwkJIk9SREVSIEJZIHBnYS5hdHRudW0s IGNvYWxlc2NlKGVzLnN0YWluaGVyaXQsIGZhbHNlKSI7CisKKwkvKgorCSAqIENvbHVtbnMgd2l0 aCBuYW1lcyBjb250YWluaW5nIF9FWFBfIGFyZSB2YWx1ZXMgdGhhdCBjb21lIGZyb20gZXhwb3J0 ZWQKKwkgKiBqc29uIGRhdGEgYW5kIHRoZXJlZm9yZSBzaG91bGQgbm90IGJlIGRpcmVjdGx5IGlt cG9ydGVkIGludG8KKwkgKiBwZ19zdGF0aXN0aWMuIFRob3NlIHZhbHVlcyB3ZXJlIGpvaW5lZCB0 byBjdXJyZW50IGNhdGFsb2cgdmFsdWVzIHRvCisJICogZGVyaXZlIHRoZSBwcm9wZXIgdmFsdWUg dG8gaW1wb3J0LCBhbmQgdGhlIGNvbHVtbiBpcyBleHBvc2VkIG1vc3RseQorCSAqIGZvciB2YWxp ZGF0aW9uIHB1cnBvc2VzLgorCSAqLworCWVudW0KKwl7CisJCVBHU19BVFROVU0gPSAwLAorCQlQ R1NfQVRUTkFNRSwKKwkJUEdTX0FUVFRZUElELAorCQlQR1NfQVRUVFlQTU9ELAorCQlQR1NfQVRU Q09MTEFUSU9OLAorCQlQR1NfVFlQTkFNRSwKKwkJUEdTX0NPTExOQU1FLAorCQlQR1NfRVhQX0FU VE5VTSwKKwkJUEdTX0VYUF9BVFRUWVBJRCwKKwkJUEdTX0VYUF9BVFRDT0xMQVRJT04sCisJCVBH U19FWFBfVFlQTkFNRSwKKwkJUEdTX0VYUF9UWVBTQ0hFTUEsCisJCVBHU19FWFBfQ09MTE5BTUUs CisJCVBHU19FWFBfQ09MTFNDSEVNQSwKKwkJUEdTX1NUQUlOSEVSSVQsCisJCVBHU19TVEFOVUxM RlJBQywKKwkJUEdTX1NUQVdJRFRILAorCQlQR1NfU1RBRElTVElOQ1QsCisJCVBHU19TVEFLSU5E MSwKKwkJUEdTX1NUQUtJTkQyLAorCQlQR1NfU1RBS0lORDMsCisJCVBHU19TVEFLSU5ENCwKKwkJ UEdTX1NUQUtJTkQ1LAorCQlQR1NfRVhQX1NUQU9QMSwKKwkJUEdTX0VYUF9TVEFPUDIsCisJCVBH U19FWFBfU1RBT1AzLAorCQlQR1NfRVhQX1NUQU9QNCwKKwkJUEdTX0VYUF9TVEFPUDUsCisJCVBH U19FWFBfU1RBQ09MTDEsCisJCVBHU19FWFBfU1RBQ09MTDIsCisJCVBHU19FWFBfU1RBQ09MTDMs CisJCVBHU19FWFBfU1RBQ09MTDQsCisJCVBHU19FWFBfU1RBQ09MTDUsCisJCVBHU19TVEFOVU1C RVJTMSwKKwkJUEdTX1NUQU5VTUJFUlMyLAorCQlQR1NfU1RBTlVNQkVSUzMsCisJCVBHU19TVEFO VU1CRVJTNCwKKwkJUEdTX1NUQU5VTUJFUlM1LAorCQlQR1NfU1RBVkFMVUVTMSwKKwkJUEdTX1NU QVZBTFVFUzIsCisJCVBHU19TVEFWQUxVRVMzLAorCQlQR1NfU1RBVkFMVUVTNCwKKwkJUEdTX1NU QVZBTFVFUzUsCisJCVBHU19FWFBfT1BSU0NIRU1BMSwKKwkJUEdTX0VYUF9PUFJTQ0hFTUEyLAor CQlQR1NfRVhQX09QUlNDSEVNQTMsCisJCVBHU19FWFBfT1BSU0NIRU1BNCwKKwkJUEdTX0VYUF9P UFJTQ0hFTUE1LAorCQlQR1NfRVhQX09QUk5BTUUxLAorCQlQR1NfRVhQX09QUk5BTUUyLAorCQlQ R1NfRVhQX09QUk5BTUUzLAorCQlQR1NfRVhQX09QUk5BTUU0LAorCQlQR1NfRVhQX09QUk5BTUU1 LAorCQlQR1NfU1RBT1AxLAorCQlQR1NfU1RBT1AyLAorCQlQR1NfU1RBT1AzLAorCQlQR1NfU1RB T1A0LAorCQlQR1NfU1RBT1A1LAorCQlQR1NfRVhQX0NPTExTQ0hFTUExLAorCQlQR1NfRVhQX0NP TExTQ0hFTUEyLAorCQlQR1NfRVhQX0NPTExTQ0hFTUEzLAorCQlQR1NfRVhQX0NPTExTQ0hFTUE0 LAorCQlQR1NfRVhQX0NPTExTQ0hFTUE1LAorCQlQR1NfRVhQX0NPTExOQU1FMSwKKwkJUEdTX0VY UF9DT0xMTkFNRTIsCisJCVBHU19FWFBfQ09MTE5BTUUzLAorCQlQR1NfRVhQX0NPTExOQU1FNCwK KwkJUEdTX0VYUF9DT0xMTkFNRTUsCisJCVBHU19TVEFDT0xMMSwKKwkJUEdTX1NUQUNPTEwyLAor CQlQR1NfU1RBQ09MTDMsCisJCVBHU19TVEFDT0xMNCwKKwkJUEdTX1NUQUNPTEw1LAorCQlQR1Nf QVRUTkFNRV9NSVNTLAorCQlQR1NfU1RBQVRUTlVNX01JU1MsCisJCVBHU19EVVBfQ09VTlQsCisJ CU5VTV9QR1NfQ09MUworCX07CisKKwlBdHRySW5mbwkqcmVsYXR0cmluZm8gPSBnZXRfYXR0cmlu Zm8ocmVsKTsKKwlBdHRySW5mbwkqYXR0cmluZm87CisKKwlpbnQJCXJldDsKKwlpbnQJCWk7CisJ aW50CQl0dXBjdHIgPSAwOworCisJU1BJVHVwbGVUYWJsZSAgKnR1cHRhYmxlOworCUhlYXBUdXBs ZQkgICAqcmV0dHVwbGVzOworCisJcmV0ID0gU1BJX2V4ZWN1dGVfd2l0aF9hcmdzKHNxbCwgUEdT X05BUkdTLCBhcmd0eXBlcywgYXJncywgYXJnbnVsbHMsIHRydWUsIDApOworCisJaWYgKHJldCAh PSBTUElfT0tfU0VMRUNUKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVf SU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coInN0YXRpc3RpYyBleHBvcnQg SlNPTiBpcyBub3QgaW4gcHJvcGVyIGZvcm1hdCIpKSk7CisKKwl0dXB0YWJsZSA9IFNQSV90dXB0 YWJsZTsKKworCXJldHR1cGxlcyA9IHBhbGxvYzAoc2l6ZW9mKEhlYXBUdXBsZSkgKiB0dXB0YWJs ZS0+bnVtdmFscyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgdHVwdGFibGUtPm51bXZhbHM7IGkrKykK Kwl7CisJCURhdHVtCQlwZ3NfZGF0dW1zW05VTV9QR1NfQ09MU107CisJCWJvb2wJCXBnc19udWxs c1tOVU1fUEdTX0NPTFNdOworCQlib29sCQlza2lwID0gZmFsc2U7CisKKwkJRGF0dW0JCXZhbHVl c1tOYXR0c19wZ19zdGF0aXN0aWNdID0geyAwIH07CisJCWJvb2wJCW51bGxzW05hdHRzX3BnX3N0 YXRpc3RpY10gPSB7IGZhbHNlIH07CisKKwkJaW50CQkJZHVwX2NvdW50OworCQlBdHRyTnVtYmVy CWF0dG51bTsKKwkJY2hhcgkgICAqYXR0bmFtZTsKKwkJYm9vbAkJc3RhaW5oZXJpdDsKKwkJY2hh cgkgICAqaW5oc3RyOworCQlBdHRyTnVtYmVyCWV4cG9ydGVkX2F0dG51bTsKKwkJRm1nckluZm8J ZmluZm87CisJCWludAkJCWs7CisKKwkJaGVhcF9kZWZvcm1fdHVwbGUodHVwdGFibGUtPnZhbHNb aV0sIHR1cHRhYmxlLT50dXBkZXNjLCBwZ3NfZGF0dW1zLAorCQkJCQkJICBwZ3NfbnVsbHMpOwor CisJCS8qCisJCSAqIENoZWNrIGFsbCB0aGUgY29sdW1ucyB0aGF0IGNhbm5vdCBwbGF1c2libHkg YmUgbnVsbCByZWdhcmRsZXNzIG9mCisJCSAqIGpzb24gZGF0YSBxdWFsaXR5CisJCSAqLworCQlB c3NlcnQoIXBnc19udWxsc1tQR1NfQVRUTlVNXSk7CisJCUFzc2VydCghcGdzX251bGxzW1BHU19B VFROQU1FXSk7CisJCUFzc2VydCghcGdzX251bGxzW1BHU19BVFRUWVBJRF0pOworCQlBc3NlcnQo IXBnc19udWxsc1tQR1NfQVRUVFlQTU9EXSk7CisJCUFzc2VydCghcGdzX251bGxzW1BHU19BVFRD T0xMQVRJT05dKTsKKwkJQXNzZXJ0KCFwZ3NfbnVsbHNbUEdTX1RZUE5BTUVdKTsKKwkJQXNzZXJ0 KCFwZ3NfbnVsbHNbUEdTX0RVUF9DT1VOVF0pOworCQlBc3NlcnQoIXBnc19udWxsc1tQR1NfQVRU TkFNRV9NSVNTXSk7CisJCUFzc2VydCghcGdzX251bGxzW1BHU19TVEFBVFROVU1fTUlTU10pOwor CisJCWF0dG51bSA9IERhdHVtR2V0SW50MTYocGdzX2RhdHVtc1tQR1NfQVRUTlVNXSk7CisJCWF0 dG5hbWUgPSBOYW1lU3RyKCooRGF0dW1HZXROYW1lKHBnc19kYXR1bXNbUEdTX0FUVE5BTUVdKSkp OworCQlhdHRyaW5mbyA9ICZyZWxhdHRyaW5mb1thdHRudW0gLSAxXTsKKworCQlmbWdyX2luZm8o Rl9BUlJBWV9JTiwgJmZpbmZvKTsKKworCQlpZiAocGdzX251bGxzW1BHU19TVEFJTkhFUklUXSkK KwkJeworCQkJc3RhaW5oZXJpdCA9IGZhbHNlOworCQkJaW5oc3RyID0gIk5VTEwiOworCQl9CisJ CWVsc2UgaWYgKERhdHVtR2V0Qm9vbChwZ3NfZGF0dW1zW1BHU19TVEFJTkhFUklUXSkpCisJCXsK KwkJCXN0YWluaGVyaXQgPSB0cnVlOworCQkJaW5oc3RyID0gInRydWUiOworCQl9CisJCWVsc2UK KwkJeworCQkJc3RhaW5oZXJpdCA9IGZhbHNlOworCQkJaW5oc3RyID0gImZhbHNlIjsKKwkJfQor CisJCS8qCisJCSAqIEFueSBkdXBsaWNhdGVzIHdvdWxkIGJlIGEgY2FjaGUgY29sbGlzaW9uIGFu ZCBhIHNpZ24gdGhhdCB0aGUKKwkJICogaW1wb3J0IGpzb24gaXMgYnJva2VuLgorCQkgKi8KKwkJ ZHVwX2NvdW50ID0gRGF0dW1HZXRJbnQzMihwZ3NfZGF0dW1zW1BHU19EVVBfQ09VTlRdKTsKKwkJ aWYgKGR1cF9jb3VudCAhPSAxKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJS Q09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCSBlcnJtc2coIkF0dHJpYnV0ZSBk dXBsaWNhdGUgY291bnQgJWQgb24gYXR0bnVtICVkIGF0dG5hbWUgJXMgc3RhaW5oZXJpdCAlcyIs CisJCQkJCQkJZHVwX2NvdW50LCBhdHRudW0sIGF0dG5hbWUsIHN0YWluaGVyaXQgPyAidCIgOiAi ZiIpKSk7CisJCWVsc2UgaWYgKERhdHVtR2V0Qm9vbChwZ3NfZGF0dW1zW1BHU19BVFROQU1FX01J U1NdKSkKKwkJeworCQkJLyogRG8gbm90IGdlbmVyYXRlIGEgdHVwbGUgKi8KKwkJCXNraXAgPSB0 cnVlOworCQkJaWYgKHJlcXVpcmVfbWF0Y2hfb2lkcykKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJ CQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJy bXNnKCJObyBleHBvcnRlZCBhdHRyaWJ1dGUgd2l0aCBuYW1lIFwiJXNcIiBmb3VuZC4iLCBhdHRu YW1lKSkpOworCQl9CisJCWVsc2UgaWYgKERhdHVtR2V0Qm9vbChwZ3NfZGF0dW1zW1BHU19TVEFB VFROVU1fTUlTU10pKQorCQl7CisJCQkvKiBEbyBub3QgZ2VuZXJhdGUgYSB0dXBsZSAqLworCQkJ c2tpcCA9IHRydWU7CisJCQlpZiAocmVxdWlyZV9tYXRjaF9vaWRzKQorCQkJCWVyZXBvcnQoRVJS T1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJ CQkJCSBlcnJtc2coIk5vIGV4cG9ydGVkIHN0YXRpc3RpYyBmb3VuZCBmb3IgZXhwb3J0ZWQgYXR0 cmlidXRlIFwiJXNcIiBmb3VuZC4iLAorCQkJCQkJCQlhdHRuYW1lKSkpOworCQl9CisKKwkJLyog aWYgd2UgYXJlIGdvaW5nIHRvIHNraXAgdGhpcyByb3csIGNsZWFuIHVwIGZpcnN0ICovCisJCWlm IChza2lwKQorCQl7CisJCQlwZnJlZShhdHRuYW1lKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJ ZXhwb3J0ZWRfYXR0bnVtID0gRGF0dW1HZXRJbnQxNihwZ3NfZGF0dW1zW1BHU19FWFBfQVRUTlVN XSk7CisKKwkJaWYgKHJlcXVpcmVfbWF0Y2hfb2lkcykKKwkJeworCQkJT2lkCWV4cG9ydF90eXBv aWQgPSBEYXR1bUdldE9iamVjdElkKHBnc19kYXR1bXNbUEdTX0VYUF9BVFRUWVBJRF0pOworCQkJ T2lkCWNhdGFsb2dfdHlwb2lkID0gRGF0dW1HZXRPYmplY3RJZChwZ3NfZGF0dW1zW1BHU19BVFRU WVBJRF0pOworCisJCQlpZiAoZXhwb3J0X3R5cG9pZCAhPSBjYXRhbG9nX3R5cG9pZCkKKwkJCQll cmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9W QUxVRSksCisJCQkJCQkgZXJybXNnKCJBdHRyaWJ1dGUgJWQgZXhwZWN0cyB0eXBvaWQgJXUgYnV0 IHR5cG9pZCAldSBpbXBvcnRlZCIsCisJCQkJCQkJCWF0dG51bSwgY2F0YWxvZ190eXBvaWQsIGV4 cG9ydF90eXBvaWQpKSk7CisJCX0KKworCQl2YWx1ZXNbQW51bV9wZ19zdGF0aXN0aWNfc3RhcmVs aWQgLSAxXSA9IE9iamVjdElkR2V0RGF0dW0oUmVsYXRpb25HZXRSZWxpZChyZWwpKTsKKwkJdmFs dWVzW0FudW1fcGdfc3RhdGlzdGljX3N0YWF0dG51bSAtIDFdID0gcGdzX2RhdHVtc1tQR1NfQVRU TlVNXTsKKwkJdmFsdWVzW0FudW1fcGdfc3RhdGlzdGljX3N0YWluaGVyaXQgLSAxXSA9IEJvb2xH ZXREYXR1bShzdGFpbmhlcml0KTsKKworCQkvKgorCQkgKiBBbnkgbnVsbHMgaGVyZSB3aWxsIGZh aWwgdGhlIHdoZW4gaXQgaXMgd3JpdHRlbiB0byBwZ19zdGF0aXN0aWMKKwkJICogYnV0IHRoYXQg ZXJyb3IgbWVzc2FnZSBpcyBhcyBnb29kIGFzIGFueSB3ZSBjb3VsZCBjcmVhdGUuCisJCSAqLwor CQlpZiAocGdzX251bGxzW1BHU19TVEFOVUxMRlJBQ10pCisJCQllcmVwb3J0KEVSUk9SLAorCQkJ CQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJIGVycm1z ZygiSW1wb3J0ZWQgU3RhdGlzdGljcyBBdHRyaWJ1dGUgJWQgc3RhaW5oZXJpdCAlcyBjYW5ub3Qg aGF2ZSBOVUxMICVzIiwKKwkJCQkJCQlleHBvcnRlZF9hdHRudW0sIGluaHN0ciwgInN0YW51bGxm cmFjIikpKTsKKworCQlpZiAocGdzX251bGxzW1BHU19TVEFXSURUSF0pCisJCQllcmVwb3J0KEVS Uk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJ CQkJIGVycm1zZygiSW1wb3J0ZWQgU3RhdGlzdGljcyBBdHRyaWJ1dGUgJWQgc3RhaW5oZXJpdCAl cyBjYW5ub3QgaGF2ZSBOVUxMICVzIiwKKwkJCQkJCQlleHBvcnRlZF9hdHRudW0sIGluaHN0ciwg InN0YXdpZHRoIikpKTsKKworCQlpZiAocGdzX251bGxzW1BHU19TVEFESVNUSU5DVF0pCisJCQll cmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZB TFVFKSwKKwkJCQkJIGVycm1zZygiSW1wb3J0ZWQgU3RhdGlzdGljcyBBdHRyaWJ1dGUgJWQgc3Rh aW5oZXJpdCAlcyBjYW5ub3QgaGF2ZSBOVUxMICVzIiwKKwkJCQkJCQlleHBvcnRlZF9hdHRudW0s IGluaHN0ciwgInN0YWRpc3RpbmN0IikpKTsKKworCQl2YWx1ZXNbQW51bV9wZ19zdGF0aXN0aWNf c3RhbnVsbGZyYWMgLSAxXSA9IHBnc19kYXR1bXNbUEdTX1NUQU5VTExGUkFDXTsKKwkJdmFsdWVz W0FudW1fcGdfc3RhdGlzdGljX3N0YXdpZHRoIC0gMV0gPSBwZ3NfZGF0dW1zW1BHU19TVEFXSURU SF07CisJCXZhbHVlc1tBbnVtX3BnX3N0YXRpc3RpY19zdGFkaXN0aW5jdCAtIDFdID0gcGdzX2Rh dHVtc1tQR1NfU1RBRElTVElOQ1RdOworCisJCWZvciAoayA9IDA7IGsgPCBTVEFUSVNUSUNfTlVN X1NMT1RTOyBrKyspCisJCXsKKwkJCWludDE2CWtpbmQ7CisJCQlPaWQJCW9wOworCisJCQkvKgor CQkJICogc3Rha2luZE4KKwkJCSAqCisJCQkgKiBXZSBjYW4ndCBtYXRjaCBvcmRlciBvZiBzdGFr aW5kcyBmcm9tIFZhY0F0dHJTdGF0cyBiZWNhdXNlIHdoaWNoCisJCQkgKiBlbnRyaWVzIGFwcGVh ciB2YXJpZXMgYnkgdGhlIGRhdGEgaW4gdGhlIHRhYmxlLgorCQkJICoKKwkJCSAqIFRoZSBzdGFr aW5kTiB2YWx1ZXMgYXNzaWduZWQgZHVyaW5nIEFOQUxZWkUgd2lsbCB2YXJ5IGJ5IHRoZQorCQkJ ICogYW1vdW50IGFuZCBxdWFsaXR5IG9mIHRoZSBkYXRhIHNhbXBsZWQuIEFzIHN1Y2gsIHRoZXJl IGlzIG5vCisJCQkgKiBmaXhlZCBzZXQgb2Yga2luZHMgdG8gbWF0Y2ggYWdhaW5zdCBmb3IgYW55 IG9uZSBzbG90LgorCQkJICoKKwkJCSAqIEFueSBOVUxMIHN0YWtpbmROIHZhbHVlcyB3aWxsIGNh dXNlIHRoZSByb3cgdG8gZmFpbC4KKwkJCSAqCisJCQkgKi8KKwkJCWlmIChwZ3NfbnVsbHNbUEdT X1NUQUtJTkQxICsga10pCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNP REVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiSW1wb3J0ZWQgU3Rh dGlzdGljcyBBdHRyaWJ1dGUgJWQgc3RhaW5oZXJpdCAlcyBjYW5ub3QgaGF2ZSBOVUxMICVzJWQi LAorCQkJCQkJCQlleHBvcnRlZF9hdHRudW0sIGluaHN0ciwgInN0YWtpbmQiLCBrKzEpKSk7CisK KwkJCXZhbHVlc1tBbnVtX3BnX3N0YXRpc3RpY19zdGFraW5kMSAtIDEgKyBrXSA9IHBnc19kYXR1 bXNbUEdTX1NUQUtJTkQxICsga107CisJCQlraW5kID0gRGF0dW1HZXRJbnQxNihwZ3NfZGF0dW1z W1BHU19TVEFLSU5EMSArIGtdKTsKKworCQkJLyoKKwkJCSAqIHN0YW9wTgorCQkJICoKKwkJCSAq IFdlIGNhbm5vdCByZXNvbHZlIHRoZSBleHBvcnRlZCBvcGVyYXRvciBiYWNrIHRvIGEgbG9jYWwg T2lkIGJlY2F1c2UKKwkJCSAqIHRoYXQgY2Fubm90IGJlIGxvb2tlZCB1cCBkaXJlY3RseSBpbiB0 aGUgY2F0YWxvZywgc28gd2UgaGF2ZSB0bworCQkJICogaW5zdGVhZCBsb29rIGF0IHRoZSBleHBv cnRlZCBvcGVyYXRvciBuYW1lLCBjaG9vc2UgdGhlIG9wIGZyb20KKwkJCSAqIHRoZSB0eXBlY2Fj aGUsIGFuZCB0aGVuIGlmIHdlJ3JlIHJlcXVpcmluZyBtYXRjaGluZyBvaWRzIHdlIGNhbgorCQkJ ICogY29tcGFyZSB0aGF0IHRvIHRoZSBleHBvcnRlZCBvaWQuCisJCQkgKgorCQkJICovCisJCQkv KiBQb3NzaWJseSB2YWxpZGF0ZSBvcGVyYXRvciBtdXN0IGJlIE9pZElzVmFsaWQgd2hlbiBzdGFr aW5kTiA8PiAwICovCisJCQlpZiAocGdzX251bGxzW1BHU19FWFBfT1BSTkFNRTEgKyBrXSkKKwkJ CQlvcCA9IEludmFsaWRPaWQ7CisJCQllbHNlCisJCQl7CisJCQkJY2hhciAgICpleHBfb3BybmFt ZTsKKworCQkJCWV4cF9vcHJuYW1lID0gVGV4dERhdHVtR2V0Q1N0cmluZyhwZ3NfZGF0dW1zW1BH U19FWFBfT1BSTkFNRTEgKyBrXSk7CisJCQkJaWYgKHN0cmNtcChleHBfb3BybmFtZSwgIj0iKSA9 PSAwKQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJICogTUNFTEVNIHN0YXQgYXJyYXlzIGFyZSBvZiB0 aGUgc2FtZSB0eXBlIGFzIHRoZQorCQkJCQkgKiBhcnJheSBiYXNlIGVsZW1lbnQgdHlwZSBhbmQg YXJlIGVxb3ByCisJCQkJCSAqLworCQkJCQlpZiAoKGtpbmQgPT0gU1RBVElTVElDX0tJTkRfTUNF TEVNKSB8fAorCQkJCQkJKGtpbmQgPT0gU1RBVElTVElDX0tJTkRfREVDSElTVCkpCisJCQkJCQlv cCA9IGF0dHJpbmZvLT5iYXNlZXFvcHI7CisJCQkJCWVsc2UKKwkJCQkJCW9wID0gYXR0cmluZm8t PmVxb3ByOworCQkJCX0KKwkJCQllbHNlIGlmIChzdHJjbXAoZXhwX29wcm5hbWUsICI8IikgPT0g MCkKKwkJCQkJb3AgPSBhdHRyaW5mby0+bHRvcHI7CisJCQkJZWxzZQorCQkJCQlvcCA9IEludmFs aWRPaWQ7CisJCQkJcGZyZWUoZXhwX29wcm5hbWUpOworCQkJfQorCisJCQlpZiAocmVxdWlyZV9t YXRjaF9vaWRzKQorCQkJeworCQkJCWlmIChwZ3NfbnVsbHNbUEdTX0VYUF9TVEFPUDEgKyBrXSkK KwkJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFS QU1FVEVSX1ZBTFVFKSwKKwkJCQkJCQkgZXJybXNnKCJBdHRyaWJ1dGUgJWQgc3Rhb3AlZCBraW5k ICVkIGV4cGVjdHMgT2lkICV1IGJ1dCBOVUxMIGltcG9ydGVkIiwKKwkJCQkJCQkJCWF0dG51bSwg aysxLCBraW5kLCAgb3ApKSk7CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJT2lkCWV4cG9ydF9vcCA9 IERhdHVtR2V0T2JqZWN0SWQocGdzX2RhdHVtc1tQR1NfRVhQX1NUQU9QMSArIGtdKTsKKwkJCQkJ aWYgKGV4cG9ydF9vcCAhPSBvcCkKKwkJCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkJCShlcnJj b2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJCQkgZXJybXNnKCJB dHRyaWJ1dGUgJWQgc3Rhb3AlZCBraW5kICVkIGV4cGVjdHMgT2lkICV1IGJ1dCBPaWQgJXUgaW1w b3J0ZWQiLAorCQkJCQkJCQkJCWF0dG51bSwgaysxLCBraW5kLCAgb3AsIGV4cG9ydF9vcCkpKTsK KwkJCQl9CisJCQl9CisJCQl2YWx1ZXNbQW51bV9wZ19zdGF0aXN0aWNfc3Rhb3AxIC0gMSArIGtd ID0gT2JqZWN0SWRHZXREYXR1bShvcCk7CisKKwkJCS8qIEFueSBOVUxMIHN0YWNvbGxOIHdpbGwg ZmFpbCB0aGUgcm93ICovCisJCQlpZiAocGdzX251bGxzW1BHU19TVEFDT0xMMSArIGtdKQorCQkJ CWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVS X1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coIkltcG9ydGVkIFN0YXRpc3RpY3MgQXR0cmlidXRlICVk IHN0YWluaGVyaXQgJXMgY2Fubm90IGhhdmUgTlVMTCAlcyVkIiwKKwkJCQkJCQkJZXhwb3J0ZWRf YXR0bnVtLCBpbmhzdHIsICJzdGFjb2xsIiwgaysxKSkpOworCQkJdmFsdWVzW0FudW1fcGdfc3Rh dGlzdGljX3N0YWNvbGwxIC0gMSArIGtdID0gcGdzX2RhdHVtc1tQR1NfU1RBQ09MTDEgKyBrXTsK KworCQkJaWYgKHJlcXVpcmVfbWF0Y2hfb2lkcykKKwkJCXsKKwkJCQlPaWQJZXhwb3J0X2NvbGwg PSBEYXR1bUdldE9iamVjdElkKHBnc19kYXR1bXNbUEdTX0VYUF9TVEFDT0xMMSArIGtdKTsKKwkJ CQlPaWQJaW1wb3J0X2NvbGwgPSBEYXR1bUdldE9iamVjdElkKHBnc19kYXR1bXNbUEdTX1NUQUNP TEwxICsga10pOworCisJCQkJaWYgKGV4cG9ydF9jb2xsICE9IGltcG9ydF9jb2xsKQorCQkJCQll cmVwb3J0KEVSUk9SLAorCQkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJf VkFMVUUpLAorCQkJCQkJCSBlcnJtc2coIkF0dHJpYnV0ZSAlZCBzdGFjb2xsJWQgZXhwZWN0cyBP aWQgJXUgYnV0IE9pZCAldSBpbXBvcnRlZCIsCisJCQkJCQkJCQlhdHRudW0sIGsrMSwgZXhwb3J0 X2NvbGwsIGltcG9ydF9jb2xsKSkpOworCQkJfQorCisJCQkvKiBzdGFudW1iZXJzTiAtIHRoZSBp bXBvcnQgcXVlcnkgZGlkIHRoZSByZXF1aXJlZCB0eXBlIGNvZXJjaW9uLiAqLworCQkJdmFsdWVz W0FudW1fcGdfc3RhdGlzdGljX3N0YW51bWJlcnMxIC0gMSArIGtdID0KKwkJCQlwZ3NfZGF0dW1z W1BHU19TVEFOVU1CRVJTMSArIGtdOworCQkJbnVsbHNbQW51bV9wZ19zdGF0aXN0aWNfc3RhbnVt YmVyczEgLSAxICsga10gPQorCQkJCXBnc19udWxsc1tQR1NfU1RBTlVNQkVSUzEgKyBrXTsKKwor CQkJLyogc3RhdmFsdWVzTiAqLworCQkJaWYgKHBnc19udWxsc1tQR1NfU1RBVkFMVUVTMSArIGtd KQorCQkJeworCQkJCW51bGxzW0FudW1fcGdfc3RhdGlzdGljX3N0YXZhbHVlczEgLSAxICsga10g PSB0cnVlOworCQkJCXZhbHVlc1tBbnVtX3BnX3N0YXRpc3RpY19zdGF2YWx1ZXMxIC0gMSArIGtd ID0gKERhdHVtKSAwOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWNoYXIgICAgKnMgPSBUZXh0 RGF0dW1HZXRDU3RyaW5nKHBnc19kYXR1bXNbUEdTX1NUQVZBTFVFUzEgKyBrXSk7CisKKwkJCQl2 YWx1ZXNbQW51bV9wZ19zdGF0aXN0aWNfc3RhdmFsdWVzMSAtIDEgKyBrXSA9CisJCQkJCUZ1bmN0 aW9uQ2FsbDMoJmZpbmZvLCBDU3RyaW5nR2V0RGF0dW0ocyksCisJCQkJCQkJCSAgT2JqZWN0SWRH ZXREYXR1bShhdHRyaW5mby0+YmFzZXR5cGlkKSwKKwkJCQkJCQkJICBJbnQzMkdldERhdHVtKGF0 dHJpbmZvLT50eXBtb2QpKTsKKworCQkJCXBmcmVlKHMpOworCQkJfQorCQl9CisKKwkJLyogQWRk IHZhbGlkIHR1cGxlIHRvIHRoZSBsaXN0ICovCisJCXJldHR1cGxlc1t0dXBjdHIrK10gPSBoZWFw X2Zvcm1fdHVwbGUoUmVsYXRpb25HZXREZXNjcihzZCksIHZhbHVlcywgbnVsbHMpOworCX0KKwor CXBmcmVlKHJlbGF0dHJpbmZvKTsKKwkqbnR1cGxlcyA9IHR1cGN0cjsKKwlyZXR1cm4gcmV0dHVw bGVzOworfQorCisvKgorICogSW1wb3J0IHN0YXRpc3RpY3MgZm9yIGEgZ2l2ZW4gcmVsYXRpb24u CisgKgorICogVGhlIHN0YXRpc3RpY3MganNvbiBmb3JtYXQgaXM6CisgKgorICogeworICogICAi c2VydmVyX3ZlcnNpb25fbnVtIjogbnVtYmVyLCAtLSBTSE9XIHNlcnZlcl92ZXJzaW9uIG9uIHNv dXJjZSBzeXN0ZW0KKyAqICAgInJlbG5hbWUiOiBzdHJpbmcsIC0tIHBnY2xhc3MucmVsbmFtZSBv ZiB0aGUgZXhwb3J0ZWQgcmVsYXRpb24KKyAqICAgIm5zcG5hbWUiOiBzdHJpbmcsIC0tIHNjaGVt YSBuYW1lIGZvciB0aGUgZXhwb3J0ZWQgcmVsYXRpb24KKyAqICAgInJlbHR1cGxlcyI6IG51bWJl ciwgLS0gcGdfY2xhc3MucmVsdHVwbGVzCisgKiAgICJyZWxwYWdlcyI6IG51bWJlciwgLS0gcGdf Y2xhc3MucmVscGFnZXMKKyAqICAgInR5cGVzIjogWworICogICAgICAgICAtLSBleHBvcnQgb2Yg YWxsIHBnX3R5cGUgcmVmZXJlbmNlZCBpbiB0aGlzIGpzb24gZG9jCisgKiAgICAgICAgIHsKKyAq ICAgICAgICAgICAgIm9pZCI6IG51bWJlciwgLS0gcGdfdHlwZS5vaWQKKyAqICAgICAgICAgICAg InR5cG5hbWUiOiBzdHJpbmcsIC0tIHBnX3R5cGUudHlwbmFtZQorICogICAgICAgICAgICAibnNw bmFtZSI6IHN0cmluZyAtLSBzY2hlbWEgbmFtZSBmb3IgdGhlIHBnX3R5cGUKKyAqICAgICAgICAg fQorICogICAgICBdLAorICogICAiY29sbGF0aW9ucyI6IFsKKyAqICAgICAgICAgLS0gZXhwb3J0 IGFsbCBwZ19jb2xsYXRpb24gcmVmZXJlbmNlIGluIHRoaXMganNvbiBkb2MKKyAqICAgICAgICAg eworICogICAgICAgICAgICAib2lkIjogbnVtYmVyLCAtLSBwZ19jb2xsYXRpb24ub2lkCisgKiAg ICAgICAgICAgICJjb2xsbmFtZSI6IHN0cmluZywgLS0gcGdfY29sbGF0aW9uLmNvbGxuYW1lCisg KiAgICAgICAgICAgICJuc3BuYW1lIjogc3RyaW5nIC0tIHNjaGVtYSBuYW1lIGZvciB0aGUgcGdf Y29sbGF0aW9uCisgKiAgICAgICAgIH0KKyAqICAgICAgXSwKKyAqICAgIm9wZXJhdG9ycyI6IFsK KyAqICAgICAgICAgLS0gZXhwb3J0IGFsbCBwZ19vcGVyYXRvciByZWZlcmVuY2UgaW4gdGhpcyBq c29uIGRvYworICogICAgICAgICB7CisgKiAgICAgICAgICAgICJvaWQiOiBudW1iZXIsIC0tIHBn X29wZXJhdG9yLm9pZAorICogICAgICAgICAgICAiY29sbG5hbWUiOiBzdHJpbmcsIC0tIHBnX29w cm5hbWUKKyAqICAgICAgICAgICAgIm5zcG5hbWUiOiBzdHJpbmcgLS0gc2NoZW1hIG5hbWUgZm9y IHRoZSBwZ19vcGVyYXRvcgorICogICAgICAgICB9CisgKiAgICAgIF0sCisgKiAgICJhdHRyaWJ1 dGVzIjogWworICogICAgICAgICAtLSBleHBvcnQgYWxsIHBnX2F0dHJpYnV0ZSBmb3IgdGhlIGV4 cG9ydGVkIHJlbGF0aW9uCisgKiAgICAgICAgIHsKKyAqICAgICAgICAgICAgImF0dG51bSI6IG51 bWJlciwgLS0gcGdfYXR0cmlidXRlLmF0dG51bQorICogICAgICAgICAgICAiYXR0bmFtZSI6IHN0 cmluZywgLS0gcGdfYXR0cmlidXRlLmF0dG5hbWUKKyAqICAgICAgICAgICAgImF0dHR5cGlkIjog bnVtYmVyLCAtLSBwZ19hdHRyaWJ1dGUuYXR0dHlwaWQKKyAqICAgICAgICAgICAgImF0dGNvbGxh dGlvbiI6IG51bWJlciAtLSBwZ19hdHRyaWJ1dGUuYXR0Y29sbGF0aW9uCisgKiAgICAgICAgIH0K KyAqICAgICAgXSwKKyAqICAgInN0YXRpc3RpY3MiOiBbCisgKiAgICAgICAgIC0tIGV4cG9ydCBh bGwgcGdfc3RhdGlzdGljIGZvciB0aGUgZXhwb3J0ZWQgcmVsYXRpb24KKyAqICAgICAgICAgewor ICogICAgICAgICAgICAic3RhYXR0bnVtIjogbnVtYmVyLCAtLSBwZ19zdGF0aXN0aWMuc3RhYXR0 bnVtCisgKiAgICAgICAgICAgICJzdGFpbmhlcml0IjogYm9vbCwgLS0gcGdfc3RhdGlzdGljLnN0 YWluaGVyaXQKKyAqICAgICAgICAgICAgInN0YW51bGxmcmFjIjogbnVtYmVyLCAtLSBwZ19zdGF0 aXN0aWMuc3RhbnVsbGZyYWMKKyAqICAgICAgICAgICAgInN0YXdpZHRoIjogbnVtYmVyLCAtLSBw Z19zdGF0aXN0aWMuc3Rhd2lkdGgKKyAqICAgICAgICAgICAgInN0YWRpc3RpbmN0IjogbnVtYmVy LCAtLSBwZ19zdGF0aXN0aWMuc3RhZGlzdGluY3QKKyAqICAgICAgICAgICAgInN0YWtpbmQxIjog bnVtYmVyLCAtLSBwZ19zdGF0aXN0aWMuc3Rha2luZDEKKyAqICAgICAgICAgICAgInN0YWtpbmQy IjogbnVtYmVyLCAtLSBwZ19zdGF0aXN0aWMuc3Rha2luZDIKKyAqICAgICAgICAgICAgInN0YWtp bmQzIjogbnVtYmVyLCAtLSBwZ19zdGF0aXN0aWMuc3Rha2luZDMKKyAqICAgICAgICAgICAgInN0 YWtpbmQ0IjogbnVtYmVyLCAtLSBwZ19zdGF0aXN0aWMuc3Rha2luZDQKKyAqICAgICAgICAgICAg InN0YWtpbmQ1IjogbnVtYmVyLCAtLSBwZ19zdGF0aXN0aWMuc3Rha2luZDUKKyAqICAgICAgICAg ICAgInN0YW9wMSI6IG51bWJlciwgLS0gcGdfc3RhdGlzdGljLnN0YW9wMQorICogICAgICAgICAg ICAic3Rhb3AyIjogbnVtYmVyLCAtLSBwZ19zdGF0aXN0aWMuc3Rhb3AyCisgKiAgICAgICAgICAg ICJzdGFvcDMiOiBudW1iZXIsIC0tIHBnX3N0YXRpc3RpYy5zdGFvcDMKKyAqICAgICAgICAgICAg InN0YW9wNCI6IG51bWJlciwgLS0gcGdfc3RhdGlzdGljLnN0YW9wNAorICogICAgICAgICAgICAi c3Rhb3A1IjogbnVtYmVyLCAtLSBwZ19zdGF0aXN0aWMuc3Rhb3A1CisgKiAgICAgICAgICAgICJz dGFjb2xsMSI6IG51bWJlciwgLS0gcGdfc3RhdGlzdGljLnN0YWNvbGwxCisgKiAgICAgICAgICAg ICJzdGFjb2xsMiI6IG51bWJlciwgLS0gcGdfc3RhdGlzdGljLnN0YWNvbGwyCisgKiAgICAgICAg ICAgICJzdGFjb2xsMyI6IG51bWJlciwgLS0gcGdfc3RhdGlzdGljLnN0YWNvbGwzCisgKiAgICAg ICAgICAgICJzdGFjb2xsNCI6IG51bWJlciwgLS0gcGdfc3RhdGlzdGljLnN0YWNvbGw0CisgKiAg ICAgICAgICAgICJzdGFjb2xsNSI6IG51bWJlciwgLS0gcGdfc3RhdGlzdGljLnN0YWNvbGw1Cisg KiAgICAgICAgICAgIC0tIHN0YW51bWJlcnNOIGFyZSBjYXN0IHRvIHN0cmluZyB0byBhaWQgYXJy YXlfaW4oKQorICogICAgICAgICAgICAic3RhbnVtYmVyczEiOiBzdHJpbmcsIC0tIHBnX3N0YXRp c3RpYy5zdGFudW1iZXJzMTo6dGV4dAorICogICAgICAgICAgICAic3RhbnVtYmVyczIiOiBzdHJp bmcsIC0tIHBnX3N0YXRpc3RpYy5zdGFudW1iZXJzMjo6dGV4dAorICogICAgICAgICAgICAic3Rh bnVtYmVyczMiOiBzdHJpbmcsIC0tIHBnX3N0YXRpc3RpYy5zdGFudW1iZXJzMzo6dGV4dAorICog ICAgICAgICAgICAic3RhbnVtYmVyczQiOiBzdHJpbmcsIC0tIHBnX3N0YXRpc3RpYy5zdGFudW1i ZXJzNDo6dGV4dAorICogICAgICAgICAgICAic3RhbnVtYmVyczUiOiBzdHJpbmcsIC0tIHBnX3N0 YXRpc3RpYy5zdGFudW1iZXJzNTo6dGV4dAorICogICAgICAgICAgICAtLSBzdGF2YWx1ZXNOIGFy ZSBjYXN0IHRvIHN0cmluZyB0byBhaWQgYXJyYXlfaW4oKQorICogICAgICAgICAgICAic3RhdmFs dWVzMSI6IHN0cmluZywgLS0gcGdfc3RhdGlzdGljLnN0YXZhbHVlczE6OnRleHQKKyAqICAgICAg ICAgICAgInN0YXZhbHVlczIiOiBzdHJpbmcsIC0tIHBnX3N0YXRpc3RpYy5zdGF2YWx1ZXMyOjp0 ZXh0CisgKiAgICAgICAgICAgICJzdGF2YWx1ZXMzIjogc3RyaW5nLCAtLSBwZ19zdGF0aXN0aWMu c3RhdmFsdWVzMzo6dGV4dAorICogICAgICAgICAgICAic3RhdmFsdWVzNCI6IHN0cmluZywgLS0g cGdfc3RhdGlzdGljLnN0YXZhbHVlczQ6OnRleHQKKyAqICAgICAgICAgICAgInN0YXZhbHVlczUi OiBzdHJpbmcgLS0gcGdfc3RhdGlzdGljLnN0YXZhbHVlczU6OnRleHQKKyAqICAgICAgICAgfQor ICogICAgICBdCisgKiAgfQorICoKKyAqIEVhY2ggc2VydmVyIHZlcmlvbiBleHBvcnRzIGEgc3Vi c2V0IG9mIHRoaXMgZm9ybWF0LiBUaGUgZXhwb3J0ZWQgZm9ybWF0CisgKiBjYW4gYW5kIHdpbGwg Y2hhbmdlIHdpdGggZWFjaCBuZXcgdmVyc2lvbiwgYW5kIHRoaXMgZnVuY3Rpb24gd2lsbCBoYXZl CisgKiB0byBhY2NvdW50IGZvciB0aG9zZSB2YXJpYXRpb25zLgorCisgKi8KK0RhdHVtCitwZ19p bXBvcnRfcmVsX3N0YXRzKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJT2lkCQlyZWxpZDsKKwlib29s CXZhbGlkYXRlOworCWJvb2wJcmVxdWlyZV9tYXRjaF9vaWRzOworCisJY29uc3QgY2hhciAqc3Fs ID0KKwkJIlNFTEVDVCBjdXJyZW50X3NldHRpbmcoJ3NlcnZlcl92ZXJzaW9uX251bScpIEFTIGN1 cnJlbnRfdmVyc2lvbiwgZWIuKiAiCisJCSJGUk9NIGpzb25iX3RvX3JlY29yZCgkMSkgQVMgZWIo ICIKKwkJIiAgICBzZXJ2ZXJfdmVyc2lvbl9udW0gaW50ZWdlciwgIgorCQkiICAgIHJlbG5hbWUg dGV4dCwgIgorCQkiICAgIG5zcG5hbWUgdGV4dCwgIgorCQkiICAgIHJlbHR1cGxlcyBmbG9hdDQs IgorCQkiICAgIHJlbHBhZ2VzIGludDQsICIKKwkJIiAgICB0eXBlcyBqc29uYiwgIgorCQkiICAg IGNvbGxhdGlvbnMganNvbmIsICIKKwkJIiAgICBvcGVyYXRvcnMganNvbmIsICIKKwkJIiAgICBh dHRyaWJ1dGVzIGpzb25iLCAiCisJCSIgICAgc3RhdGlzdGljcyBqc29uYikgIjsKKworCWVudW0K Kwl7CisJCUJRX0NVUlJFTlRfVkVSU0lPTl9OVU0gPSAwLAorCQlCUV9TRVJWRVJfVkVSU0lPTl9O VU0sCisJCUJRX1JFTE5BTUUsCisJCUJRX05TUE5BTUUsCisJCUJRX1JFTFRVUExFUywKKwkJQlFf UkVMUEFHRVMsCisJCUJRX1RZUEVTLAorCQlCUV9DT0xMQVRJT05TLAorCQlCUV9PUEVSQVRPUlMs CisJCUJRX0FUVFJJQlVURVMsCisJCUJRX1NUQVRJU1RJQ1MsCisJCU5VTV9CUV9DT0xTCisJfTsK KworI2RlZmluZSBCUV9OQVJHUyAxCisKKwlPaWQJCQlhcmd0eXBlc1tCUV9OQVJHU10gPSB7IEpT T05CT0lEIH07CisJRGF0dW0JCWFyZ3NbQlFfTkFSR1NdOworCisJaW50CQlyZXQ7CisKKwlTUElU dXBsZVRhYmxlICAqdHVwdGFibGU7CisKKwlEYXR1bQlkYXR1bXNbTlVNX0JRX0NPTFNdOworCWJv b2wJbnVsbHNbTlVNX0JRX0NPTFNdOworCisJaW50MzIJc2VydmVyX3ZlcnNpb25fbnVtOworCWlu dDMyCWN1cnJlbnRfdmVyc2lvbl9udW07CisKKwlSZWxhdGlvbglyZWw7CisJUmVsYXRpb24Jc2Q7 CisJSGVhcFR1cGxlICAqc2R0dXBsZXM7CisJaW50CQkJbnNkdHVwbGVzOworCWludAkJCWk7CisK KwlDYXRhbG9nSW5kZXhTdGF0ZQlpbmRzdGF0ZSA9IE5VTEw7CisKKwlpZiAoUEdfQVJHSVNOVUxM KDApKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJB TUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coInJlbGF0aW9uIGNhbm5vdCBiZSBOVUxMIikpKTsK KwlyZWxpZCA9IFBHX0dFVEFSR19PSUQoMCk7CisKKwlpZiAoUEdfQVJHSVNOVUxMKDEpKQorCQlQ R19SRVRVUk5fQk9PTChmYWxzZSk7CisJYXJnc1swXSA9IFBHX0dFVEFSR19EQVRVTSgxKTsKKwor CWlmIChQR19BUkdJU05VTEwoMikpCisJCXZhbGlkYXRlID0gZmFsc2U7CisJZWxzZQorCQl2YWxp ZGF0ZSA9IFBHX0dFVEFSR19CT09MKDIpOworCisJaWYgKFBHX0FSR0lTTlVMTCgzKSkKKwkJcmVx dWlyZV9tYXRjaF9vaWRzID0gZmFsc2U7CisJZWxzZQorCQlyZXF1aXJlX21hdGNoX29pZHMgPSBQ R19HRVRBUkdfQk9PTCgzKTsKKworCS8qCisJICogQ29ubmVjdCB0byBTUEkgbWFuYWdlcgorCSAq LworCWlmICgocmV0ID0gU1BJX2Nvbm5lY3QoKSkgPCAwKQorCQllbG9nKEVSUk9SLCAiU1BJIGNv bm5lY3QgZmFpbHVyZSAtIHJldHVybmVkICVkIiwgcmV0KTsKKworCS8qCisJICogRmV0Y2ggdGhl IGJhc2UgbGV2ZWwgb2YgdGhlIHN0YXRzIGpzb24uIFRoZSByZXN1bHRzIGZvdW5kIHRoZXJlIHdp bGwKKwkgKiBkZXRlcm1pbmUgaG93IHRoZSBuZXN0ZWQgZGF0YSB3aWxsIGJlIGhhbmRsZWQuCisJ ICovCisJcmV0ID0gU1BJX2V4ZWN1dGVfd2l0aF9hcmdzKHNxbCwgQlFfTkFSR1MsIGFyZ3R5cGVz LCBhcmdzLCBOVUxMLCB0cnVlLCAxKTsKKworCS8qCisJICogT25seSBhbGxvdyBvbmUgcXVhbGlm eWluZyB0dXBsZQorCSAqLworCWlmIChyZXQgIT0gU1BJX09LX1NFTEVDVCkKKwkJZXJlcG9ydChF UlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJ CQkgZXJybXNnKCJzdGF0aXN0aWMgZXhwb3J0IEpTT04gaXMgbm90IGluIHByb3BlciBmb3JtYXQi KSkpOworCisJaWYgKFNQSV9wcm9jZXNzZWQgPiAxKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShl cnJjb2RlKEVSUkNPREVfQ0FSRElOQUxJVFlfVklPTEFUSU9OKSwKKwkJCQkgZXJybXNnKCJzdGF0 aXN0aWMgZXhwb3J0IEpTT04gc2hvdWxkIHJldHVybiBvbmx5IG9uZSBiYXNlIG9iamVjdCIpKSk7 CisKKwl0dXB0YWJsZSA9IFNQSV90dXB0YWJsZTsKKwloZWFwX2RlZm9ybV90dXBsZSh0dXB0YWJs ZS0+dmFsc1swXSwgdHVwdGFibGUtPnR1cGRlc2MsIGRhdHVtcywgbnVsbHMpOworCisJLyoKKwkg KiBDaGVjayBmb3IgdmFsaWQgY29tYmluYXRpb24gb2YgZXhwb3J0ZWQgc2VydmVyX3ZlcnNpb25f bnVtIHRvIHRoZSBsb2NhbAorCSAqIHNlcnZlcl92ZXJzaW9uX251bS4gV2Ugd29uJ3QgYmUgcmV1 c2luZyB0aGVzZSB2YWx1ZXMgaW4gYSBxdWVyeSBzbyB1c2UKKwkgKiBzY3JhdGNoIGRhdHVtL251 bGwgdmFycy4KKwkgKi8KKwlpZiAobnVsbHNbQlFfQ1VSUkVOVF9WRVJTSU9OX05VTV0pCisJCWVy ZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9TUUxfSlNPTl9JVEVNX0NBTk5PVF9C RV9DQVNUX1RPX1RBUkdFVF9UWVBFKSwKKwkJCQkgZXJybXNnKCJjdXJyZW50X3ZlcnNpb25fbnVt IGNhbm5vdCBiZSBudWxsIikpKTsKKworCWlmIChudWxsc1tCUV9TRVJWRVJfVkVSU0lPTl9OVU1d KQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfU1FMX0pTT05fSVRFTV9D QU5OT1RfQkVfQ0FTVF9UT19UQVJHRVRfVFlQRSksCisJCQkJIGVycm1zZygic2VydmVyX3ZlcnNp b25fbnVtIGNhbm5vdCBiZSBudWxsIikpKTsKKworCWN1cnJlbnRfdmVyc2lvbl9udW0gPSBEYXR1 bUdldEludDMyKGRhdHVtc1tCUV9DVVJSRU5UX1ZFUlNJT05fTlVNXSk7CisJc2VydmVyX3ZlcnNp b25fbnVtID0gRGF0dW1HZXRJbnQzMihkYXR1bXNbQlFfU0VSVkVSX1ZFUlNJT05fTlVNXSk7CisK KwlpZiAoc2VydmVyX3ZlcnNpb25fbnVtIDw9IDEwMDAwMCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJ CQkoZXJyY29kZShFUlJDT0RFX05VTUVSSUNfVkFMVUVfT1VUX09GX1JBTkdFKSwKKwkJCQkgZXJy bXNnKCJDYW5ub3QgaW1wb3J0IHN0YXRpc3RpY3MgZnJvbSBzZXJ2ZXJzIGJlbG93IHZlcnNpb24g MTAuMCIpKSk7CisKKwlpZiAoc2VydmVyX3ZlcnNpb25fbnVtID4gY3VycmVudF92ZXJzaW9uX251 bSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX05VTUVSSUNfVkFMVUVf T1VUX09GX1JBTkdFKSwKKwkJCQkgZXJybXNnKCJDYW5ub3QgaW1wb3J0IHN0YXRpc3RpY3MgZnJv bSBzZXJ2ZXIgdmVyc2lvbiAlZCB0byAlZCIsCisJCQkJCQlzZXJ2ZXJfdmVyc2lvbl9udW0sIGN1 cnJlbnRfdmVyc2lvbl9udW0pKSk7CisKKwlyZWwgPSByZWxhdGlvbl9vcGVuKHJlbGlkLCBTaGFy ZVVwZGF0ZUV4Y2x1c2l2ZUxvY2spOworCisJaWYgKHJlcXVpcmVfbWF0Y2hfb2lkcykKKwl7CisJ CWNoYXIgICAqY3Vycl9yZWxuYW1lID0gU1BJX2dldHJlbG5hbWUocmVsKTsKKwkJY2hhciAgICpj dXJyX25zcG5hbWUgPSBTUElfZ2V0bnNwbmFtZShyZWwpOworCQljaGFyICAgKmltcG9ydF9yZWxu YW1lOworCQljaGFyICAgKmltcG9ydF9uc3BuYW1lOworCisJCWlmIChudWxsc1tCUV9SRUxOQU1F XSkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJB TUVURVJfVkFMVUUpLAorCQkJCQkgZXJybXNnKCJJbXBvcnRlZCBSZWxhdGlvbiBOYW1lIG11c3Qg bWF0Y2ggcmVsYXRpb24gbmFtZSwgYnV0IGlzIG51bGwiKSkpOworCisJCWlmIChudWxsc1tCUV9O U1BOQU1FXSkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJ RF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkgZXJybXNnKCJJbXBvcnRlZCBSZWxhdGlvbiBTY2hl bWEgTmFtZSBtdXN0IG1hdGNoIHNjaGVtYSBuYW1lLCBidXQgaXMgbnVsbCIpKSk7CisKKwkJaW1w b3J0X3JlbG5hbWUgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKGRhdHVtc1tCUV9SRUxOQU1FXSk7CisJ CWltcG9ydF9uc3BuYW1lID0gVGV4dERhdHVtR2V0Q1N0cmluZyhkYXR1bXNbQlFfTlNQTkFNRV0p OworCisJCWlmIChzdHJjbXAoaW1wb3J0X3JlbG5hbWUsIGN1cnJfcmVsbmFtZSkgIT0gMCkKKwkJ CWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJf VkFMVUUpLAorCQkJCQkgZXJybXNnKCJJbXBvcnRlZCBSZWxhdGlvbiBOYW1lICglcykgbXVzdCBt YXRjaCByZWxhdGlvbiBuYW1lICglcyksIGJ1dCBkb2VzIG5vdCIsCisJCQkJCQkJaW1wb3J0X3Jl bG5hbWUsIGN1cnJfcmVsbmFtZSkpKTsKKworCQlpZiAoc3RyY21wKGltcG9ydF9uc3BuYW1lLCBj dXJyX25zcG5hbWUpICE9IDApCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJD T0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJIGVycm1zZygiSW1wb3J0ZWQgUmVs YXRpb24gU2NoZW1hIE5hbWUgKCVzKSBtdXN0IG1hdGNoIHNjaGVtYSBuYW1lICglcyksIGJ1dCBk b2VzIG5vdCIsCisJCQkJCQkJaW1wb3J0X25zcG5hbWUsIGN1cnJfbnNwbmFtZSkpKTsKKworCQlw ZnJlZShjdXJyX3JlbG5hbWUpOworCQlwZnJlZShjdXJyX25zcG5hbWUpOworCQlwZnJlZShpbXBv cnRfcmVsbmFtZSk7CisJCXBmcmVlKGltcG9ydF9uc3BuYW1lKTsKKwl9CisKKwkvKgorCSAqIHZh bGlkYXRpb25zCisJICoKKwkgKiBQb3RlbnRpYWwgZnV0dXJlIHZhbGlkYXRpb25zOgorCSAqCisJ ICogICogYWxsIGF0dHJpYnV0ZXMuYXR0dHlwaWQgdmFsdWVzIGFyZSByZXByZXNlbnRlZCBpbiAi dHlwZXMiCisJICogICogYWxsIGF0dHJpYnV0ZXMuYXR0Y29sbGF0aW9uIHZhbHVlcyBhcmUgcmVw cmVzZW50ZWQgaW4gInR5cGVzIgorCSAqICAqIGF0dHJpYnV0ZXMuYXR0bmFtZSBpcyBvZiBhY2Nl cHRhYmxlIGxlbmd0aAorCSAqICAqIGFsbCBub24taW52YWxpZCBzdGF0aXN0aWNzLm9wTiB2YWx1 ZXMgYXJlIHJlcHJlc2VudGVkIGluICJvcGVyYXRvcnMiCisJICogICogYWxsIG5vbi1pbnZhbGlk IHN0YXRpc3RpY3MuY29sbE4gdmFsdWVzIGFyZSByZXByZXNlbnRlZCBpbiAiY29sbGF0aW9ucyIK KwkgKiAgKiBzdGF0aXN0aW5jcy5raW5kTiB2YWx1ZXMgaW4gMC03CisJICogICogc3RhdGlzdGlj cy5zdGFudWxsZnJhYyBpbiByYW5nZQorCSAqICAqIHN0YXRpc3RpY3Muc3Rhd2lkdGggaW4gcmFu Z2UKKwkgKiAgKiBzdGF0aXN0aWNzLm5kaXN0aW5jdCBpbiByYWdlCisJICoKKwkgKi8KKwlpZiAo dmFsaWRhdGUpCisJeworCQl2YWxpZGF0ZV9leHBvcnRlZF90eXBlcyhkYXR1bXNbQlFfVFlQRVNd LCBudWxsc1tCUV9UWVBFU10pOworCQl2YWxpZGF0ZV9leHBvcnRlZF9jb2xsYXRpb25zKGRhdHVt c1tCUV9DT0xMQVRJT05TXSwgbnVsbHNbQlFfQ09MTEFUSU9OU10pOworCQl2YWxpZGF0ZV9leHBv cnRlZF9vcGVyYXRvcnMoZGF0dW1zW0JRX09QRVJBVE9SU10sIG51bGxzW0JRX09QRVJBVE9SU10p OworCQl2YWxpZGF0ZV9leHBvcnRlZF9hdHRyaWJ1dGVzKGRhdHVtc1tCUV9BVFRSSUJVVEVTXSwg bnVsbHNbQlFfQVRUUklCVVRFU10pOworCQl2YWxpZGF0ZV9leHBvcnRlZF9zdGF0aXN0aWNzKGRh dHVtc1tCUV9TVEFUSVNUSUNTXSwgbnVsbHNbQlFfU1RBVElTVElDU10pOworCX0KKworCXNkID0g dGFibGVfb3BlbihTdGF0aXN0aWNSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCXNk dHVwbGVzID0gaW1wb3J0X3BnX3N0YXRpc3RpY3MocmVsLCBzZCwgc2VydmVyX3ZlcnNpb25fbnVt LAorCQkJCQkJCQkJJmRhdHVtc1tCUV9UWVBFU10sICZudWxsc1tCUV9UWVBFU10sCisJCQkJCQkJ CQlyZXF1aXJlX21hdGNoX29pZHMsICZuc2R0dXBsZXMpOworCisJLyogT3BlbiBpbmRleCBpbmZv cm1hdGlvbiB3aGVuIHdlIGtub3cgd2UgbmVlZCBpdCAqLworCWluZHN0YXRlID0gQ2F0YWxvZ09w ZW5JbmRleGVzKHNkKTsKKworCS8qIERlbGV0ZSBleGlzdGluZyBwZ19zdGF0aXN0aWMgcm93cyBm b3IgcmVsYXRpb24gdG8gYXZvaWQgY29sbGlzaW9ucyAqLworCXJlbW92ZV9wZ19zdGF0aXN0aWNz KHJlbCwgc2QsIGZhbHNlKTsKKwlpZiAoUkVMS0lORF9IQVNfUEFSVElUSU9OUyhyZWwtPnJkX3Jl bC0+cmVsa2luZCkpCisJCXJlbW92ZV9wZ19zdGF0aXN0aWNzKHJlbCwgc2QsIHRydWUpOworCisJ Zm9yIChpID0gMDsgaSA8IG5zZHR1cGxlczsgaSsrKQorCXsKKwkJQ2F0YWxvZ1R1cGxlSW5zZXJ0 V2l0aEluZm8oc2QsIHNkdHVwbGVzW2ldLCBpbmRzdGF0ZSk7CisJCWhlYXBfZnJlZXR1cGxlKHNk dHVwbGVzW2ldKTsKKwl9CisKKwlDYXRhbG9nQ2xvc2VJbmRleGVzKGluZHN0YXRlKTsKKwl0YWJs ZV9jbG9zZShzZCwgUm93RXhjbHVzaXZlTG9jayk7CisJcGZyZWUoc2R0dXBsZXMpOworCisJLyoK KwkgKiBVcGRhdGUgcGdfY2xhc3MgdHVwbGUgZGlyZWN0bHkgKG5vbi10cmFuc2FjdGlvbmFsbHks IHNhbWUgYXMKKwkgKiBpcyBkb25lIGluIGRvX2FuYWx5emUoKS4KKwkgKgorCSAqIE9ubHkgbW9k aWZ5IHBnX2NsYXNzIHJvdyBpZiBjaGFuZ2VzIGFyZSB0byBiZSBtYWRlCisJICovCisJaWYgKCFu dWxsc1tCUV9SRUxUVVBMRVNdIHx8ICFudWxsc1tCUV9SRUxQQUdFU10pCisJeworCQlSZWxhdGlv bgkJcGdfY2xhc3NfcmVsOworCQlIZWFwVHVwbGUJCWN0dXA7CisJCUZvcm1fcGdfY2xhc3MJcGdj Zm9ybTsKKworCQkvKgorCQkgKiBPcGVuIHRoZSByZWxhdGlvbiwgZ2V0dGluZyBTaGFyZVVwZGF0 ZUV4Y2x1c2l2ZUxvY2sgdG8gZW5zdXJlIHRoYXQgbm8KKwkJICogb3RoZXIgc3RhdC1zZXR0aW5n IG9wZXJhdGlvbiBjYW4gcnVuIG9uIGl0IGNvbmN1cnJlbnRseS4KKwkJICovCisJCXBnX2NsYXNz X3JlbCA9IHRhYmxlX29wZW4oUmVsYXRpb25SZWxhdGlvbklkLCBTaGFyZVVwZGF0ZUV4Y2x1c2l2 ZUxvY2spOworCisJCS8qIGxlYXZlIGlmIHJlbGF0aW9uIGNvdWxkIG5vdCBiZSBvcGVuZWQgb3Ig bG9ja2VkICovCisJCWlmICghcGdfY2xhc3NfcmVsKQorCQkJUEdfUkVUVVJOX0JPT0woZmFsc2Up OworCisJCWN0dXAgPSBTZWFyY2hTeXNDYWNoZUNvcHkxKFJFTE9JRCwgT2JqZWN0SWRHZXREYXR1 bShyZWxpZCkpOworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoY3R1cCkpCisJCQllbG9nKEVSUk9S LCAicGdfY2xhc3MgZW50cnkgZm9yIHJlbGlkICV1IHZhbmlzaGVkIGR1cmluZyBzdGF0aXN0aWNz IGltcG9ydCIsCisJCQkJIHJlbGlkKTsKKworCQlwZ2Nmb3JtID0gKEZvcm1fcGdfY2xhc3MpIEdF VFNUUlVDVChjdHVwKTsKKworCQkvKiBsZWF2ZSB1bi1zZXQgdmFsdWVzIGFsb25lICovCisJCWlm ICghbnVsbHNbQlFfUkVMVFVQTEVTXSkKKwkJCXBnY2Zvcm0tPnJlbHR1cGxlcyA9IERhdHVtR2V0 RmxvYXQ0KGRhdHVtc1tCUV9SRUxUVVBMRVNdKTsKKworCQlpZighbnVsbHNbQlFfUkVMUEFHRVNd KQorCQkJcGdjZm9ybS0+cmVscGFnZXMgPSBEYXR1bUdldEludDMyKGRhdHVtc1tCUV9SRUxQQUdF U10pOworCisJCWhlYXBfaW5wbGFjZV91cGRhdGUocGdfY2xhc3NfcmVsLCBjdHVwKTsKKwkJdGFi bGVfY2xvc2UocGdfY2xhc3NfcmVsLCBTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2spOworCX0KKwor CXJlbGF0aW9uX2Nsb3NlKHJlbCwgTm9Mb2NrKTsKKworCVNQSV9maW5pc2goKTsKKworCVBHX1JF VFVSTl9CT09MKHRydWUpOworfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9zdGF0c19leHBvcnRfaW1wb3J0Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3Rh dHNfZXhwb3J0X2ltcG9ydC5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MC4uNWFiNTFjNWFhMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvc3RhdHNfZXhwb3J0X2ltcG9ydC5vdXQKQEAgLTAsMCArMSw1MzAgQEAKKy0tIHNldCB0byAn dCcgdG8gc2VlIGRlYnVnIG91dHB1dAorXHNldCBkZWJ1ZyBmCitDUkVBVEUgU0NIRU1BIHN0YXRz X2V4cG9ydF9pbXBvcnQ7CitDUkVBVEUgVFlQRSBzdGF0c19leHBvcnRfaW1wb3J0LmNvbXBsZXhf dHlwZSBBUyAoCisgICAgYSBpbnRlZ2VyLAorICAgIGIgZmxvYXQsCisgICAgYyB0ZXh0LAorICAg IGQgZGF0ZSwKKyAgICBlIGpzb25iKTsKK0NSRUFURSBUQUJMRSBzdGF0c19leHBvcnRfaW1wb3J0 LnRlc3QoCisgICAgaWQgSU5URUdFUiBQUklNQVJZIEtFWSwKKyAgICBuYW1lIHRleHQsCisgICAg Y29tcCBzdGF0c19leHBvcnRfaW1wb3J0LmNvbXBsZXhfdHlwZSwKKyAgICB0YWdzIHRleHRbXQor KTsKK0lOU0VSVCBJTlRPIHN0YXRzX2V4cG9ydF9pbXBvcnQudGVzdAorU0VMRUNUIDEsICdvbmUn LCAoMSwgMS4xLCAnT05FJywgJzIwMDEtMDEtMDEnLCAneyAieGtleSI6ICJ4dmFsIiB9Jyk6OnN0 YXRzX2V4cG9ydF9pbXBvcnQuY29tcGxleF90eXBlLCBhcnJheVsncmVkJywnZ3JlZW4nXQorVU5J T04gQUxMCitTRUxFQ1QgMiwgJ3R3bycsICgyLCAyLjIsICdUV08nLCAnMjAwMi0wMi0wMicsICdb dHJ1ZSwgNCwgInNpeCJdJyk6OnN0YXRzX2V4cG9ydF9pbXBvcnQuY29tcGxleF90eXBlLCBhcnJh eVsnYmx1ZScsJ3llbGxvdyddCitVTklPTiBBTEwKK1NFTEVDVCAzLCAndHJlJywgKDMsIDMuMywg J1RSRScsICcyMDAzLTAzLTAzJywgTlVMTCk6OnN0YXRzX2V4cG9ydF9pbXBvcnQuY29tcGxleF90 eXBlLCBhcnJheVsnIm9yYW5nZSInLCAncHVycGxlJywgJ2N5YW4nXQorVU5JT04gQUxMCitTRUxF Q1QgNCwgJ2ZvdXInLCBOVUxMLCBOVUxMOworQ1JFQVRFIElOREVYIGlzX29kZCBPTiBzdGF0c19l eHBvcnRfaW1wb3J0LnRlc3QoKChjb21wKS5hICUgMiA9IDEpKTsKKy0tIEdlbmVyYXRlIHN0YXRp c3RpY3Mgb24gdGFibGUgd2l0aCBkYXRhCitBTkFMWVpFIHN0YXRzX2V4cG9ydF9pbXBvcnQudGVz dDsKKy0tIENhcHR1cmUgcGdfc3RhdGlzdGljIHZhbHVlcyBmb3IgdGFibGUgYW5kIGluZGV4CitD UkVBVEUgVEFCTEUgc3RhdHNfZXhwb3J0X2ltcG9ydC5wZ19zdGF0aXN0aWNfY2FwdHVyZQorQVMK K1NFTEVDVCAgc3RhcmVsaWQsCisgICAgICAgIHN0YWF0dG51bSwgc3RhaW5oZXJpdCwgc3RhbnVs bGZyYWMsIHN0YXdpZHRoLCBzdGFkaXN0aW5jdCwKKyAgICAgICAgc3Rha2luZDEsIHN0YWtpbmQy LCBzdGFraW5kMywgc3Rha2luZDQsIHN0YWtpbmQ1LAorICAgICAgICBzdGFvcDEsIHN0YW9wMiwg c3Rhb3AzLCBzdGFvcDQsIHN0YW9wNSwgc3RhY29sbDEsIHN0YWNvbGwyLCBzdGFjb2xsMywgc3Rh Y29sbDQsIHN0YWNvbGw1LAorICAgICAgICBzdGFudW1iZXJzMSwgc3RhbnVtYmVyczIsIHN0YW51 bWJlcnMzLCBzdGFudW1iZXJzNCwgc3RhbnVtYmVyczUsCisgICAgICAgIHN0YXZhbHVlczE6OnRl eHQgQVMgc3YxLCBzdGF2YWx1ZXMyOjp0ZXh0IEFTIHN2Miwgc3RhdmFsdWVzMzo6dGV4dCBBUyBz djMsCisgICAgICAgIHN0YXZhbHVlczQ6OnRleHQgQVMgc3Y0LCBzdGF2YWx1ZXM1Ojp0ZXh0IEFT IHN2NQorRlJPTSBwZ19zdGF0aXN0aWMKK1dIRVJFIHN0YXJlbGlkIElOICgnc3RhdHNfZXhwb3J0 X2ltcG9ydC50ZXN0Jzo6cmVnY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICdzdGF0c19leHBv cnRfaW1wb3J0LmlzX29kZCc6OnJlZ2NsYXNzKTsKK1NFTEVDVCBDT1VOVCgqKQorRlJPTSBzdGF0 c19leHBvcnRfaW1wb3J0LnBnX3N0YXRpc3RpY19jYXB0dXJlOworIGNvdW50IAorLS0tLS0tLQor ICAgICA1CisoMSByb3cpCisKKy0tIEV4cG9ydCBzdGF0cworU0VMRUNUCisgICAganNvbmJfYnVp bGRfb2JqZWN0KAorICAgICAgICAnc2VydmVyX3ZlcnNpb25fbnVtJywgY3VycmVudF9zZXR0aW5n KCdzZXJ2ZXJfdmVyc2lvbl9udW0nKSwKKyAgICAgICAgJ3JlbG5hbWUnLCByLnJlbG5hbWUsCisg ICAgICAgICduc3BuYW1lJywgbi5uc3BuYW1lLAorICAgICAgICAncmVsdHVwbGVzJywgci5yZWx0 dXBsZXMsCisgICAgICAgICdyZWxwYWdlcycsIHIucmVscGFnZXMsCisgICAgICAgICd0eXBlcycs CisgICAgICAgICgKKyAgICAgICAgICAgIFNFTEVDVCBhcnJheV9hZ2codHIgT1JERVIgQlkgdHIu b2lkKQorICAgICAgICAgICAgRlJPTSAoCisgICAgICAgICAgICAgICAgU0VMRUNUCisgICAgICAg ICAgICAgICAgICAgIHQub2lkLAorICAgICAgICAgICAgICAgICAgICB0LnR5cG5hbWUsCisgICAg ICAgICAgICAgICAgICAgIG4ubnNwbmFtZQorICAgICAgICAgICAgICAgIEZST00gcGdfdHlwZSBB UyB0CisgICAgICAgICAgICAgICAgSk9JTiBwZ19uYW1lc3BhY2UgQVMgbiBPTiBuLm9pZCA9IHQu dHlwbmFtZXNwYWNlCisgICAgICAgICAgICAgICAgV0hFUkUgdC5vaWQgSU4gKAorICAgICAgICAg ICAgICAgICAgICBTRUxFQ1QgYS5hdHR0eXBpZAorICAgICAgICAgICAgICAgICAgICBGUk9NIHBn X2F0dHJpYnV0ZSBBUyBhCisgICAgICAgICAgICAgICAgICAgIFdIRVJFIGEuYXR0cmVsaWQgPSBy Lm9pZAorICAgICAgICAgICAgICAgICAgICBBTkQgTk9UIGEuYXR0aXNkcm9wcGVkCisgICAgICAg ICAgICAgICAgICAgIEFORCBhLmF0dG51bSA+IDAKKyAgICAgICAgICAgICAgICApCisgICAgICAg ICAgICApIEFTIHRyCisgICAgICAgICksCisgICAgICAgICdjb2xsYXRpb25zJywKKyAgICAgICAg KAorICAgICAgICAgICAgU0VMRUNUIGFycmF5X2FnZyhjciBPUkRFUiBCWSBjci5vaWQpCisgICAg ICAgICAgICBGUk9NICgKKyAgICAgICAgICAgICAgICBTRUxFQ1QKKyAgICAgICAgICAgICAgICAg ICAgYy5vaWQsCisgICAgICAgICAgICAgICAgICAgIGMuY29sbG5hbWUsCisgICAgICAgICAgICAg ICAgICAgIG4ubnNwbmFtZQorICAgICAgICAgICAgICAgIEZST00gcGdfY29sbGF0aW9uIEFTIGMK KyAgICAgICAgICAgICAgICBKT0lOIHBnX25hbWVzcGFjZSBBUyBuIE9OIG4ub2lkID0gYy5jb2xs bmFtZXNwYWNlCisgICAgICAgICAgICAgICAgV0hFUkUgYy5vaWQgSU4gKAorICAgICAgICAgICAg ICAgICAgICBTRUxFQ1QgYS5hdHRjb2xsYXRpb24gQVMgb2lkCisgICAgICAgICAgICAgICAgICAg IEZST00gcGdfYXR0cmlidXRlIEFTIGEKKyAgICAgICAgICAgICAgICAgICAgV0hFUkUgYS5hdHRy ZWxpZCA9IHIub2lkCisgICAgICAgICAgICAgICAgICAgIEFORCBOT1QgYS5hdHRpc2Ryb3BwZWQK KyAgICAgICAgICAgICAgICAgICAgQU5EIGEuYXR0bnVtID4gMAorICAgICAgICAgICAgICAgICAg ICBVTklPTgorICAgICAgICAgICAgICAgICAgICBTRUxFQ1QgdS5jb2xsaWQKKyAgICAgICAgICAg ICAgICAgICAgRlJPTSBwZ19zdGF0aXN0aWMgQVMgcworICAgICAgICAgICAgICAgICAgICBDUk9T UyBKT0lOIExBVEVSQUwgdW5uZXN0KEFSUkFZWworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHMuc3RhY29sbDEsIHMuc3RhY29sbDIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcy5zdGFjb2xsMywgcy5zdGFjb2xsNCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLnN0YWNvbGw1XSkgQVMgdShjb2xsaWQpCisg ICAgICAgICAgICAgICAgICAgIFdIRVJFIHMuc3RhcmVsaWQgPSByLm9pZAorICAgICAgICAgICAg ICAgICAgICApCisgICAgICAgICAgICAgICAgKSBBUyBjcgorICAgICAgICApLAorICAgICAgICAn b3BlcmF0b3JzJywKKyAgICAgICAgKAorICAgICAgICAgICAgU0VMRUNUIGFycmF5X2FnZyhwIE9S REVSIEJZIHAub2lkKQorICAgICAgICAgICAgRlJPTSAoCisgICAgICAgICAgICAgICAgU0VMRUNU CisgICAgICAgICAgICAgICAgICAgIG8ub2lkLAorICAgICAgICAgICAgICAgICAgICBvLm9wcm5h bWUsCisgICAgICAgICAgICAgICAgICAgIG4ubnNwbmFtZQorICAgICAgICAgICAgICAgIEZST00g cGdfb3BlcmF0b3IgQVMgbworICAgICAgICAgICAgICAgIEpPSU4gcGdfbmFtZXNwYWNlIEFTIG4g T04gbi5vaWQgPSBvLm9wcm5hbWVzcGFjZQorICAgICAgICAgICAgICAgIFdIRVJFIG8ub2lkIElO ICgKKyAgICAgICAgICAgICAgICAgICAgU0VMRUNUIHUub2lkCisgICAgICAgICAgICAgICAgICAg IEZST00gcGdfc3RhdGlzdGljIEFTIHMKKyAgICAgICAgICAgICAgICAgICAgQ1JPU1MgSk9JTiBM QVRFUkFMIHVubmVzdChBUlJBWVsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzLnN0YW9wMSwgcy5zdGFvcDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcy5zdGFvcDMsIHMuc3Rhb3A0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHMuc3Rhb3A1XSkgQVMgdShvcGlkKQorICAgICAgICAgICAgICAgICAgICBX SEVSRSBzLnN0YXJlbGlkID0gci5vaWQKKyAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAg ICAgKSBBUyBwCisgICAgICAgICksCisgICAgICAgICdhdHRyaWJ1dGVzJywKKyAgICAgICAgKAor ICAgICAgICAgICAgU0VMRUNUIGFycmF5X2FnZyhhciBPUkRFUiBCWSBhci5hdHRudW0pCisgICAg ICAgICAgICBGUk9NICgKKyAgICAgICAgICAgICAgICBTRUxFQ1QKKyAgICAgICAgICAgICAgICAg ICAgYS5hdHRudW0sCisgICAgICAgICAgICAgICAgICAgIGEuYXR0bmFtZSwKKyAgICAgICAgICAg ICAgICAgICAgYS5hdHR0eXBpZCwKKyAgICAgICAgICAgICAgICAgICAgYS5hdHRjb2xsYXRpb24K KyAgICAgICAgICAgICAgICBGUk9NIHBnX2F0dHJpYnV0ZSBBUyBhCisgICAgICAgICAgICAgICAg V0hFUkUgYS5hdHRyZWxpZCA9IHIub2lkCisgICAgICAgICAgICAgICAgQU5EIE5PVCBhLmF0dGlz ZHJvcHBlZAorICAgICAgICAgICAgICAgIEFORCBhLmF0dG51bSA+IDAKKyAgICAgICAgICAgICkg QVMgYXIKKyAgICAgICAgKSwKKyAgICAgICAgJ3N0YXRpc3RpY3MnLAorICAgICAgICAoCisgICAg ICAgICAgICBTRUxFQ1QgYXJyYXlfYWdnKHNyIE9SREVSIEJZIHNyLnN0YWluaGVyaXQsIHNyLnN0 YWF0dG51bSkKKyAgICAgICAgICAgIEZST00gKAorICAgICAgICAgICAgICAgIFNFTEVDVAorICAg ICAgICAgICAgICAgICAgICAgcy5zdGFhdHRudW0sCisgICAgICAgICAgICAgICAgICAgICBzLnN0 YWluaGVyaXQsCisgICAgICAgICAgICAgICAgICAgICBzLnN0YW51bGxmcmFjLAorICAgICAgICAg ICAgICAgICAgICAgcy5zdGF3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgIHMuc3RhZGlzdGlu Y3QsCisgICAgICAgICAgICAgICAgICAgICBzLnN0YWtpbmQxLAorICAgICAgICAgICAgICAgICAg ICAgcy5zdGFraW5kMiwKKyAgICAgICAgICAgICAgICAgICAgIHMuc3Rha2luZDMsCisgICAgICAg ICAgICAgICAgICAgICBzLnN0YWtpbmQ0LAorICAgICAgICAgICAgICAgICAgICAgcy5zdGFraW5k NSwKKyAgICAgICAgICAgICAgICAgICAgIHMuc3Rhb3AxLAorICAgICAgICAgICAgICAgICAgICAg cy5zdGFvcDIsCisgICAgICAgICAgICAgICAgICAgICBzLnN0YW9wMywKKyAgICAgICAgICAgICAg ICAgICAgIHMuc3Rhb3A0LAorICAgICAgICAgICAgICAgICAgICAgcy5zdGFvcDUsCisgICAgICAg ICAgICAgICAgICAgICBzLnN0YWNvbGwxLAorICAgICAgICAgICAgICAgICAgICAgcy5zdGFjb2xs MiwKKyAgICAgICAgICAgICAgICAgICAgIHMuc3RhY29sbDMsCisgICAgICAgICAgICAgICAgICAg ICBzLnN0YWNvbGw0LAorICAgICAgICAgICAgICAgICAgICAgcy5zdGFjb2xsNSwKKyAgICAgICAg ICAgICAgICAgICAgIHMuc3RhbnVtYmVyczE6OnRleHQgQVMgc3RhbnVtYmVyczEsCisgICAgICAg ICAgICAgICAgICAgICBzLnN0YW51bWJlcnMyOjp0ZXh0IEFTIHN0YW51bWJlcnMyLAorICAgICAg ICAgICAgICAgICAgICAgcy5zdGFudW1iZXJzMzo6dGV4dCBBUyBzdGFudW1iZXJzMywKKyAgICAg ICAgICAgICAgICAgICAgIHMuc3RhbnVtYmVyczQ6OnRleHQgQVMgc3RhbnVtYmVyczQsCisgICAg ICAgICAgICAgICAgICAgICBzLnN0YW51bWJlcnM1Ojp0ZXh0IEFTIHN0YW51bWJlcnM1LAorICAg ICAgICAgICAgICAgICAgICAgcy5zdGF2YWx1ZXMxOjp0ZXh0IEFTIHN0YXZhbHVlczEsCisgICAg ICAgICAgICAgICAgICAgICBzLnN0YXZhbHVlczI6OnRleHQgQVMgc3RhdmFsdWVzMiwKKyAgICAg ICAgICAgICAgICAgICAgIHMuc3RhdmFsdWVzMzo6dGV4dCBBUyBzdGF2YWx1ZXMzLAorICAgICAg ICAgICAgICAgICAgICAgcy5zdGF2YWx1ZXM0Ojp0ZXh0IEFTIHN0YXZhbHVlczQsCisgICAgICAg ICAgICAgICAgICAgICBzLnN0YXZhbHVlczU6OnRleHQgQVMgc3RhdmFsdWVzNQorICAgICAgICAg ICAgICAgIEZST00gcGdfc3RhdGlzdGljIEFTIHMKKyAgICAgICAgICAgICAgICBXSEVSRSBzLnN0 YXJlbGlkID0gci5vaWQKKyAgICAgICAgICAgICkgQVMgc3IKKyAgICAgICAgKQorICAgICkgQVMg dGFibGVfc3RhdHNfanNvbgorRlJPTSBwZ19jbGFzcyBBUyByCitKT0lOIHBnX25hbWVzcGFjZSBB UyBuIE9OIG4ub2lkID0gci5yZWxuYW1lc3BhY2UKK1dIRVJFIHIub2lkID0gJ3N0YXRzX2V4cG9y dF9pbXBvcnQudGVzdCc6OnJlZ2NsYXNzCitcZ3NldAorU0VMRUNUIGpzb25iX3ByZXR0eSg6J3Rh YmxlX3N0YXRzX2pzb24nOjpqc29uYikgQVMgdGFibGVfc3RhdHNfanNvbgorV0hFUkUgOidkZWJ1 Zyc6OmJvb2xlYW47CisgdGFibGVfc3RhdHNfanNvbiAKKy0tLS0tLS0tLS0tLS0tLS0tLQorKDAg cm93cykKKworU0VMRUNUCisgICAganNvbmJfYnVpbGRfb2JqZWN0KAorICAgICAgICAnc2VydmVy X3ZlcnNpb25fbnVtJywgY3VycmVudF9zZXR0aW5nKCdzZXJ2ZXJfdmVyc2lvbl9udW0nKSwKKyAg ICAgICAgJ3JlbG5hbWUnLCByLnJlbG5hbWUsCisgICAgICAgICduc3BuYW1lJywgbi5uc3BuYW1l LAorICAgICAgICAncmVsdHVwbGVzJywgci5yZWx0dXBsZXMsCisgICAgICAgICdyZWxwYWdlcycs IHIucmVscGFnZXMsCisgICAgICAgICd0eXBlcycsCisgICAgICAgICgKKyAgICAgICAgICAgIFNF TEVDVCBhcnJheV9hZ2codHIgT1JERVIgQlkgdHIub2lkKQorICAgICAgICAgICAgRlJPTSAoCisg ICAgICAgICAgICAgICAgU0VMRUNUCisgICAgICAgICAgICAgICAgICAgIHQub2lkLAorICAgICAg ICAgICAgICAgICAgICB0LnR5cG5hbWUsCisgICAgICAgICAgICAgICAgICAgIG4ubnNwbmFtZQor ICAgICAgICAgICAgICAgIEZST00gcGdfdHlwZSBBUyB0CisgICAgICAgICAgICAgICAgSk9JTiBw Z19uYW1lc3BhY2UgQVMgbiBPTiBuLm9pZCA9IHQudHlwbmFtZXNwYWNlCisgICAgICAgICAgICAg ICAgV0hFUkUgdC5vaWQgSU4gKAorICAgICAgICAgICAgICAgICAgICBTRUxFQ1QgYS5hdHR0eXBp ZAorICAgICAgICAgICAgICAgICAgICBGUk9NIHBnX2F0dHJpYnV0ZSBBUyBhCisgICAgICAgICAg ICAgICAgICAgIFdIRVJFIGEuYXR0cmVsaWQgPSByLm9pZAorICAgICAgICAgICAgICAgICAgICBB TkQgTk9UIGEuYXR0aXNkcm9wcGVkCisgICAgICAgICAgICAgICAgICAgIEFORCBhLmF0dG51bSA+ IDAKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICApIEFTIHRyCisgICAgICAgICksCisg ICAgICAgICdjb2xsYXRpb25zJywKKyAgICAgICAgKAorICAgICAgICAgICAgU0VMRUNUIGFycmF5 X2FnZyhjciBPUkRFUiBCWSBjci5vaWQpCisgICAgICAgICAgICBGUk9NICgKKyAgICAgICAgICAg ICAgICBTRUxFQ1QKKyAgICAgICAgICAgICAgICAgICAgYy5vaWQsCisgICAgICAgICAgICAgICAg ICAgIGMuY29sbG5hbWUsCisgICAgICAgICAgICAgICAgICAgIG4ubnNwbmFtZQorICAgICAgICAg ICAgICAgIEZST00gcGdfY29sbGF0aW9uIEFTIGMKKyAgICAgICAgICAgICAgICBKT0lOIHBnX25h bWVzcGFjZSBBUyBuIE9OIG4ub2lkID0gYy5jb2xsbmFtZXNwYWNlCisgICAgICAgICAgICAgICAg V0hFUkUgYy5vaWQgSU4gKAorICAgICAgICAgICAgICAgICAgICBTRUxFQ1QgYS5hdHRjb2xsYXRp b24gQVMgb2lkCisgICAgICAgICAgICAgICAgICAgIEZST00gcGdfYXR0cmlidXRlIEFTIGEKKyAg ICAgICAgICAgICAgICAgICAgV0hFUkUgYS5hdHRyZWxpZCA9IHIub2lkCisgICAgICAgICAgICAg ICAgICAgIEFORCBOT1QgYS5hdHRpc2Ryb3BwZWQKKyAgICAgICAgICAgICAgICAgICAgQU5EIGEu YXR0bnVtID4gMAorICAgICAgICAgICAgICAgICAgICBVTklPTgorICAgICAgICAgICAgICAgICAg ICBTRUxFQ1QgdS5jb2xsaWQKKyAgICAgICAgICAgICAgICAgICAgRlJPTSBwZ19zdGF0aXN0aWMg QVMgcworICAgICAgICAgICAgICAgICAgICBDUk9TUyBKT0lOIExBVEVSQUwgdW5uZXN0KEFSUkFZ WworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuc3RhY29sbDEsIHMu c3RhY29sbDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5zdGFj b2xsMywgcy5zdGFjb2xsNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzLnN0YWNvbGw1XSkgQVMgdShjb2xsaWQpCisgICAgICAgICAgICAgICAgICAgIFdIRVJFIHMu c3RhcmVsaWQgPSByLm9pZAorICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAg KSBBUyBjcgorICAgICAgICApLAorICAgICAgICAnb3BlcmF0b3JzJywKKyAgICAgICAgKAorICAg ICAgICAgICAgU0VMRUNUIGFycmF5X2FnZyhwIE9SREVSIEJZIHAub2lkKQorICAgICAgICAgICAg RlJPTSAoCisgICAgICAgICAgICAgICAgU0VMRUNUCisgICAgICAgICAgICAgICAgICAgIG8ub2lk LAorICAgICAgICAgICAgICAgICAgICBvLm9wcm5hbWUsCisgICAgICAgICAgICAgICAgICAgIG4u bnNwbmFtZQorICAgICAgICAgICAgICAgIEZST00gcGdfb3BlcmF0b3IgQVMgbworICAgICAgICAg ICAgICAgIEpPSU4gcGdfbmFtZXNwYWNlIEFTIG4gT04gbi5vaWQgPSBvLm9wcm5hbWVzcGFjZQor ICAgICAgICAgICAgICAgIFdIRVJFIG8ub2lkIElOICgKKyAgICAgICAgICAgICAgICAgICAgU0VM RUNUIHUub2lkCisgICAgICAgICAgICAgICAgICAgIEZST00gcGdfc3RhdGlzdGljIEFTIHMKKyAg ICAgICAgICAgICAgICAgICAgQ1JPU1MgSk9JTiBMQVRFUkFMIHVubmVzdChBUlJBWVsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLnN0YW9wMSwgcy5zdGFvcDIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5zdGFvcDMsIHMuc3Rhb3A0 LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuc3Rhb3A1XSkgQVMg dShvcGlkKQorICAgICAgICAgICAgICAgICAgICBXSEVSRSBzLnN0YXJlbGlkID0gci5vaWQKKyAg ICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgKSBBUyBwCisgICAgICAgICksCisgICAg ICAgICdhdHRyaWJ1dGVzJywKKyAgICAgICAgKAorICAgICAgICAgICAgU0VMRUNUIGFycmF5X2Fn ZyhhciBPUkRFUiBCWSBhci5hdHRudW0pCisgICAgICAgICAgICBGUk9NICgKKyAgICAgICAgICAg ICAgICBTRUxFQ1QKKyAgICAgICAgICAgICAgICAgICAgYS5hdHRudW0sCisgICAgICAgICAgICAg ICAgICAgIGEuYXR0bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgYS5hdHR0eXBpZCwKKyAgICAg ICAgICAgICAgICAgICAgYS5hdHRjb2xsYXRpb24KKyAgICAgICAgICAgICAgICBGUk9NIHBnX2F0 dHJpYnV0ZSBBUyBhCisgICAgICAgICAgICAgICAgV0hFUkUgYS5hdHRyZWxpZCA9IHIub2lkCisg ICAgICAgICAgICAgICAgQU5EIE5PVCBhLmF0dGlzZHJvcHBlZAorICAgICAgICAgICAgICAgIEFO RCBhLmF0dG51bSA+IDAKKyAgICAgICAgICAgICkgQVMgYXIKKyAgICAgICAgKSwKKyAgICAgICAg J3N0YXRpc3RpY3MnLAorICAgICAgICAoCisgICAgICAgICAgICBTRUxFQ1QgYXJyYXlfYWdnKHNy IE9SREVSIEJZIHNyLnN0YWluaGVyaXQsIHNyLnN0YWF0dG51bSkKKyAgICAgICAgICAgIEZST00g KAorICAgICAgICAgICAgICAgIFNFTEVDVAorICAgICAgICAgICAgICAgICAgICAgcy5zdGFhdHRu dW0sCisgICAgICAgICAgICAgICAgICAgICBzLnN0YWluaGVyaXQsCisgICAgICAgICAgICAgICAg ICAgICBzLnN0YW51bGxmcmFjLAorICAgICAgICAgICAgICAgICAgICAgcy5zdGF3aWR0aCwKKyAg ICAgICAgICAgICAgICAgICAgIHMuc3RhZGlzdGluY3QsCisgICAgICAgICAgICAgICAgICAgICBz LnN0YWtpbmQxLAorICAgICAgICAgICAgICAgICAgICAgcy5zdGFraW5kMiwKKyAgICAgICAgICAg ICAgICAgICAgIHMuc3Rha2luZDMsCisgICAgICAgICAgICAgICAgICAgICBzLnN0YWtpbmQ0LAor ICAgICAgICAgICAgICAgICAgICAgcy5zdGFraW5kNSwKKyAgICAgICAgICAgICAgICAgICAgIHMu c3Rhb3AxLAorICAgICAgICAgICAgICAgICAgICAgcy5zdGFvcDIsCisgICAgICAgICAgICAgICAg ICAgICBzLnN0YW9wMywKKyAgICAgICAgICAgICAgICAgICAgIHMuc3Rhb3A0LAorICAgICAgICAg ICAgICAgICAgICAgcy5zdGFvcDUsCisgICAgICAgICAgICAgICAgICAgICBzLnN0YWNvbGwxLAor ICAgICAgICAgICAgICAgICAgICAgcy5zdGFjb2xsMiwKKyAgICAgICAgICAgICAgICAgICAgIHMu c3RhY29sbDMsCisgICAgICAgICAgICAgICAgICAgICBzLnN0YWNvbGw0LAorICAgICAgICAgICAg ICAgICAgICAgcy5zdGFjb2xsNSwKKyAgICAgICAgICAgICAgICAgICAgIHMuc3RhbnVtYmVyczE6 OnRleHQgQVMgc3RhbnVtYmVyczEsCisgICAgICAgICAgICAgICAgICAgICBzLnN0YW51bWJlcnMy Ojp0ZXh0IEFTIHN0YW51bWJlcnMyLAorICAgICAgICAgICAgICAgICAgICAgcy5zdGFudW1iZXJz Mzo6dGV4dCBBUyBzdGFudW1iZXJzMywKKyAgICAgICAgICAgICAgICAgICAgIHMuc3RhbnVtYmVy czQ6OnRleHQgQVMgc3RhbnVtYmVyczQsCisgICAgICAgICAgICAgICAgICAgICBzLnN0YW51bWJl cnM1Ojp0ZXh0IEFTIHN0YW51bWJlcnM1LAorICAgICAgICAgICAgICAgICAgICAgcy5zdGF2YWx1 ZXMxOjp0ZXh0IEFTIHN0YXZhbHVlczEsCisgICAgICAgICAgICAgICAgICAgICBzLnN0YXZhbHVl czI6OnRleHQgQVMgc3RhdmFsdWVzMiwKKyAgICAgICAgICAgICAgICAgICAgIHMuc3RhdmFsdWVz Mzo6dGV4dCBBUyBzdGF2YWx1ZXMzLAorICAgICAgICAgICAgICAgICAgICAgcy5zdGF2YWx1ZXM0 Ojp0ZXh0IEFTIHN0YXZhbHVlczQsCisgICAgICAgICAgICAgICAgICAgICBzLnN0YXZhbHVlczU6 OnRleHQgQVMgc3RhdmFsdWVzNQorICAgICAgICAgICAgICAgIEZST00gcGdfc3RhdGlzdGljIEFT IHMKKyAgICAgICAgICAgICAgICBXSEVSRSBzLnN0YXJlbGlkID0gci5vaWQKKyAgICAgICAgICAg ICkgQVMgc3IKKyAgICAgICAgKQorICAgICkgQVMgaW5kZXhfc3RhdHNfanNvbgorRlJPTSBwZ19j bGFzcyBBUyByCitKT0lOIHBnX25hbWVzcGFjZSBBUyBuIE9OIG4ub2lkID0gci5yZWxuYW1lc3Bh Y2UKK1dIRVJFIHIub2lkID0gJ3N0YXRzX2V4cG9ydF9pbXBvcnQuaXNfb2RkJzo6cmVnY2xhc3MK K1xnc2V0CitTRUxFQ1QganNvbmJfcHJldHR5KDonaW5kZXhfc3RhdHNfanNvbic6Ompzb25iKSBB UyBpbmRleF9zdGF0c19qc29uCitXSEVSRSA6J2RlYnVnJzo6Ym9vbGVhbjsKKyBpbmRleF9zdGF0 c19qc29uIAorLS0tLS0tLS0tLS0tLS0tLS0tCisoMCByb3dzKQorCitTRUxFQ1QgcmVsbmFtZSwg cmVsdHVwbGVzCitGUk9NIHBnX2NsYXNzCitXSEVSRSBvaWQgSU4gKCdzdGF0c19leHBvcnRfaW1w b3J0LnRlc3QnOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAgJ3N0YXRzX2V4cG9ydF9pbXBvcnQu aXNfb2RkJzo6cmVnY2xhc3MpCitPUkRFUiBCWSByZWxuYW1lOworIHJlbG5hbWUgfCByZWx0dXBs ZXMgCistLS0tLS0tLS0rLS0tLS0tLS0tLS0KKyBpc19vZGQgIHwgICAgICAgICA0CisgdGVzdCAg ICB8ICAgICAgICAgNAorKDIgcm93cykKKworLS0gTW92ZSB0YWJsZSBhbmQgaW5kZXggb3V0IG9m IHRoZSB3YXkKK0FMVEVSIFRBQkxFIHN0YXRzX2V4cG9ydF9pbXBvcnQudGVzdCBSRU5BTUUgVE8g dGVzdF9vcmlnOworQUxURVIgSU5ERVggc3RhdHNfZXhwb3J0X2ltcG9ydC5pc19vZGQgUkVOQU1F IFRPIGlzX29kZF9vcmlnOworLS0gQ3JlYXRlIGVtcHR5IGNvcHkgdGFibGVzCitDUkVBVEUgVEFC TEUgc3RhdHNfZXhwb3J0X2ltcG9ydC50ZXN0KExJS0Ugc3RhdHNfZXhwb3J0X2ltcG9ydC50ZXN0 X29yaWcpOworQ1JFQVRFIElOREVYIGlzX29kZCBPTiBzdGF0c19leHBvcnRfaW1wb3J0LnRlc3Qo KChjb21wKS5hICUgMiA9IDEpKTsKKy0tIFZlcmlmeSBubyBzdGF0cyBmb3IgdGhlc2UgbmV3IHRh YmxlcworU0VMRUNUIENPVU5UKCopCitGUk9NIHBnX3N0YXRpc3RpYworV0hFUkUgc3RhcmVsaWQg SU4oJ3N0YXRzX2V4cG9ydF9pbXBvcnQudGVzdCc6OnJlZ2NsYXNzLAorICAgICAgICAgICAgICAn c3RhdHNfZXhwb3J0X2ltcG9ydC5pc19vZGQnOjpyZWdjbGFzcyk7CisgY291bnQgCistLS0tLS0t CisgICAgIDAKKygxIHJvdykKKworU0VMRUNUIHJlbG5hbWUsIHJlbHR1cGxlcworRlJPTSBwZ19j bGFzcworV0hFUkUgb2lkIElOICgnc3RhdHNfZXhwb3J0X2ltcG9ydC50ZXN0Jzo6cmVnY2xhc3Ms CisgICAgICAgICAgICAgICdzdGF0c19leHBvcnRfaW1wb3J0LmlzX29kZCc6OnJlZ2NsYXNzKQor T1JERVIgQlkgcmVsbmFtZTsKKyByZWxuYW1lIHwgcmVsdHVwbGVzIAorLS0tLS0tLS0tKy0tLS0t LS0tLS0tCisgaXNfb2RkICB8ICAgICAgICAgMAorIHRlc3QgICAgfCAgICAgICAgLTEKKygyIHJv d3MpCisKKy0tIFRlc3QgdmFsaWF0aW9uCitTRUxFQ1QKKyAgICBqc29uYl9idWlsZF9vYmplY3Qo CisgICAgICAgICdzZXJ2ZXJfdmVyc2lvbl9udW0nLCBjdXJyZW50X3NldHRpbmcoJ3NlcnZlcl92 ZXJzaW9uX251bScpLAorICAgICAgICAncmVsbmFtZScsICd0ZXN0JywKKyAgICAgICAgJ25zcG5h bWUnLCAnc3RhdHNfZXhwb3J0X2ltcG9ydCcsCisgICAgICAgICd0eXBlcycsCisgICAgICAgICgK KyAgICAgICAgICAgIFNFTEVDVCBhcnJheV9hZ2cocikKKyAgICAgICAgICAgIEZST00gKAorICAg ICAgICAgICAgICAgIFNFTEVDVCAxIEFTIG9pZCwgJ3R5cGUxJyBBUyB0eXBuYW1lCisgICAgICAg ICAgICAgICAgVU5JT04gQUxMCisgICAgICAgICAgICAgICAgU0VMRUNUIDIgQVMgb2lkLCAndHlw ZTInIEFTIHR5cG5hbWUKKyAgICAgICAgICAgICAgICBVTklPTiBBTEwKKyAgICAgICAgICAgICAg ICBTRUxFQ1QgMiBBUyBvaWQsICd0eXBlMycgQVMgdHlwbmFtZQorICAgICAgICAgICAgICAgICkg QVMgcgorICAgICAgICApKSBBUyBpbnZhbGlkX3R5cGVzX2RvYywKKyAgICBqc29uYl9idWlsZF9v YmplY3QoCisgICAgICAgICdzZXJ2ZXJfdmVyc2lvbl9udW0nLCBjdXJyZW50X3NldHRpbmcoJ3Nl cnZlcl92ZXJzaW9uX251bScpLAorICAgICAgICAncmVsbmFtZScsICd0ZXN0JywKKyAgICAgICAg J25zcG5hbWUnLCAnc3RhdHNfZXhwb3J0X2ltcG9ydCcsCisgICAgICAgICdjb2xsYXRpb25zJywK KyAgICAgICAgKAorICAgICAgICAgICAgU0VMRUNUIGFycmF5X2FnZyhyKQorICAgICAgICAgICAg RlJPTSAoCisgICAgICAgICAgICAgICAgU0VMRUNUIDEgQVMgb2lkLCAnY29sbDEnIEFTIGNvbGxu YW1lCisgICAgICAgICAgICAgICAgVU5JT04gQUxMCisgICAgICAgICAgICAgICAgU0VMRUNUIDEg QVMgb2lkLCAnY29sbDInIEFTIGNvbGxuYW1lCisgICAgICAgICAgICAgICAgVU5JT04gQUxMCisg ICAgICAgICAgICAgICAgU0VMRUNUIDIgQVMgb2lkLCAnY29sbDMnIEFTIGNvbGxuYW1lCisgICAg ICAgICAgICAgICAgKSBBUyByCisgICAgICAgICkpIEFTIGludmFsaWRfY29sbGF0aW9uc19kb2Ms CisgICAganNvbmJfYnVpbGRfb2JqZWN0KAorICAgICAgICAnc2VydmVyX3ZlcnNpb25fbnVtJywg Y3VycmVudF9zZXR0aW5nKCdzZXJ2ZXJfdmVyc2lvbl9udW0nKSwKKyAgICAgICAgJ3JlbG5hbWUn LCAndGVzdCcsCisgICAgICAgICduc3BuYW1lJywgJ3N0YXRzX2V4cG9ydF9pbXBvcnQnLAorICAg ICAgICAnb3BlcmF0b3JzJywKKyAgICAgICAgKAorICAgICAgICAgICAgU0VMRUNUIGFycmF5X2Fn ZyhyKQorICAgICAgICAgICAgRlJPTSAoCisgICAgICAgICAgICAgICAgU0VMRUNUIDEgQVMgb2lk LCAnb3ByMScgQVMgb3BybmFtZQorICAgICAgICAgICAgICAgIFVOSU9OIEFMTAorICAgICAgICAg ICAgICAgIFNFTEVDVCAzIEFTIG9pZCwgJ29wcjInIEFTIG9wcm5hbWUKKyAgICAgICAgICAgICAg ICBVTklPTiBBTEwKKyAgICAgICAgICAgICAgICBTRUxFQ1QgMyBBUyBvaWQsICdvcHIzJyBBUyBv cHJuYW1lCisgICAgICAgICAgICAgICAgKSBBUyByCisgICAgICAgICkpIEFTIGludmFsaWRfb3Bl cmF0b3JzX2RvYywKKyAgICBqc29uYl9idWlsZF9vYmplY3QoCisgICAgICAgICdzZXJ2ZXJfdmVy c2lvbl9udW0nLCBjdXJyZW50X3NldHRpbmcoJ3NlcnZlcl92ZXJzaW9uX251bScpLAorICAgICAg ICAncmVsbmFtZScsICd0ZXN0JywKKyAgICAgICAgJ25zcG5hbWUnLCAnc3RhdHNfZXhwb3J0X2lt cG9ydCcsCisgICAgICAgICdhdHRyaWJ1dGVzJywKKyAgICAgICAgKAorICAgICAgICAgICAgU0VM RUNUIGFycmF5X2FnZyhyKQorICAgICAgICAgICAgRlJPTSAoCisgICAgICAgICAgICAgICAgU0VM RUNUIDEgQVMgYXR0bnVtLCAnY29sMScgQVMgYXR0bmFtZQorICAgICAgICAgICAgICAgIFVOSU9O IEFMTAorICAgICAgICAgICAgICAgIFNFTEVDVCA0IEFTIGF0dG51bSwgJ2NvbDInIEFTIGF0dG5h bWUKKyAgICAgICAgICAgICAgICBVTklPTiBBTEwKKyAgICAgICAgICAgICAgICBTRUxFQ1QgNCBB UyBhdHRudW0sICdjb2wzJyBBUyBhdHRuYW1lCisgICAgICAgICAgICAgICAgKSBBUyByCisgICAg ICAgICkpIEFTIGludmFsaWRfYXR0cmlidXRlc19kb2MsCisgICAganNvbmJfYnVpbGRfb2JqZWN0 KAorICAgICAgICAnc2VydmVyX3ZlcnNpb25fbnVtJywgY3VycmVudF9zZXR0aW5nKCdzZXJ2ZXJf dmVyc2lvbl9udW0nKSwKKyAgICAgICAgJ3JlbG5hbWUnLCAndGVzdCcsCisgICAgICAgICduc3Bu YW1lJywgJ3N0YXRzX2V4cG9ydF9pbXBvcnQnLAorICAgICAgICAnc3RhdGlzdGljcycsCisgICAg ICAgICgKKyAgICAgICAgICAgIFNFTEVDVCBhcnJheV9hZ2cocikKKyAgICAgICAgICAgIEZST00g KAorICAgICAgICAgICAgICAgIFNFTEVDVCAxIEFTIHN0YWF0dG51bSwgZmFsc2UgQVMgc3RhaW5o ZXJpdAorICAgICAgICAgICAgICAgIFVOSU9OIEFMTAorICAgICAgICAgICAgICAgIFNFTEVDVCA1 IEFTIHN0YWF0dG51bSwgdHJ1ZSBBUyBzdGFpbmhlcml0CisgICAgICAgICAgICAgICAgVU5JT04g QUxMCisgICAgICAgICAgICAgICAgU0VMRUNUIDEgQVMgc3RhYXR0bnVtLCBmYWxzZSBBUyBzdGFp bmhlcml0CisgICAgICAgICAgICAgICAgKSBBUyByCisgICAgICAgICkpIEFTIGludmFsaWRfc3Rh dGlzdGljc19kb2MKK1xnc2V0CitTRUxFQ1QgcGdfaW1wb3J0X3JlbF9zdGF0cygnc3RhdHNfZXhw b3J0X2ltcG9ydC50ZXN0Jzo6cmVnY2xhc3MsCisgICAgICAgIDonaW52YWxpZF90eXBlc19kb2Mn Ojpqc29uYiwgdHJ1ZSwgdHJ1ZSk7CitFUlJPUjogIHN0YXRpc3RpYyBleHBvcnQgSlNPTiBkb2N1 bWVudCAidHlwZXMiIGhhcyBkdXBsaWNhdGUgcm93cyB3aXRoIG9pZCA9IDIKK1NFTEVDVCBwZ19p bXBvcnRfcmVsX3N0YXRzKCdzdGF0c19leHBvcnRfaW1wb3J0LnRlc3QnOjpyZWdjbGFzcywKKyAg ICAgICAgOidpbnZhbGlkX2NvbGxhdGlvbnNfZG9jJzo6anNvbmIsIHRydWUsIHRydWUpOworRVJS T1I6ICBzdGF0aXN0aWMgZXhwb3J0IEpTT04gZG9jdW1lbnQgImNvbGxhdGlvbnMiIGhhcyBkdXBs aWNhdGUgcm93cyB3aXRoIG9pZCA9IDEKK1NFTEVDVCBwZ19pbXBvcnRfcmVsX3N0YXRzKCdzdGF0 c19leHBvcnRfaW1wb3J0LnRlc3QnOjpyZWdjbGFzcywKKyAgICAgICAgOidpbnZhbGlkX29wZXJh dG9yc19kb2MnOjpqc29uYiwgdHJ1ZSwgdHJ1ZSk7CitFUlJPUjogIHN0YXRpc3RpYyBleHBvcnQg SlNPTiBkb2N1bWVudCAib3BlcmF0b3JzIiBoYXMgZHVwbGljYXRlIHJvd3Mgd2l0aCBvaWQgPSAz CitTRUxFQ1QgcGdfaW1wb3J0X3JlbF9zdGF0cygnc3RhdHNfZXhwb3J0X2ltcG9ydC50ZXN0Jzo6 cmVnY2xhc3MsCisgICAgICAgIDonaW52YWxpZF9hdHRyaWJ1dGVzX2RvYyc6Ompzb25iLCB0cnVl LCB0cnVlKTsKK0VSUk9SOiAgc3RhdGlzdGljIGV4cG9ydCBKU09OIGRvY3VtZW50ICJhdHRyaWJ1 dGVzIiBoYXMgZHVwbGljYXRlIHJvd3Mgd2l0aCBhdHRudW0gPSA0CitTRUxFQ1QgcGdfaW1wb3J0 X3JlbF9zdGF0cygnc3RhdHNfZXhwb3J0X2ltcG9ydC50ZXN0Jzo6cmVnY2xhc3MsCisgICAgICAg IDonaW52YWxpZF9zdGF0aXN0aWNzX2RvYyc6Ompzb25iLCB0cnVlLCB0cnVlKTsKK0VSUk9SOiAg c3RhdGlzdGljIGV4cG9ydCBKU09OIGRvY3VtZW50ICJzdGF0aXN0aWNzIiBoYXMgZHVwbGljYXRl IHJvd3Mgd2l0aCBzdGFhdHRudW0gPSAxLCBzdGFpbmhlcml0ID0gZgorLS0gSW1wb3J0IHN0YXRz CitTRUxFQ1QgcGdfaW1wb3J0X3JlbF9zdGF0cygKKyAgICAgICAgJ3N0YXRzX2V4cG9ydF9pbXBv cnQudGVzdCc6OnJlZ2NsYXNzLAorICAgICAgICA6J3RhYmxlX3N0YXRzX2pzb24nOjpqc29uYiwK KyAgICAgICAgdHJ1ZSwKKyAgICAgICAgdHJ1ZSk7CisgcGdfaW1wb3J0X3JlbF9zdGF0cyAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworU0VMRUNUIHBnX2ltcG9ydF9yZWxf c3RhdHMoCisgICAgICAgICdzdGF0c19leHBvcnRfaW1wb3J0LmlzX29kZCc6OnJlZ2NsYXNzLAor ICAgICAgICA6J2luZGV4X3N0YXRzX2pzb24nOjpqc29uYiwKKyAgICAgICAgdHJ1ZSwKKyAgICAg ICAgdHJ1ZSk7CisgcGdfaW1wb3J0X3JlbF9zdGF0cyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IHQKKygxIHJvdykKKworLS0gVGhpcyBzaG91bGQgcmV0dXJuIDAgcm93cworU0VMRUNUIHN0YWF0 dG51bSwgc3RhaW5oZXJpdCwgc3RhbnVsbGZyYWMsIHN0YXdpZHRoLCBzdGFkaXN0aW5jdCwKKyAg ICAgICAgc3Rha2luZDEsIHN0YWtpbmQyLCBzdGFraW5kMywgc3Rha2luZDQsIHN0YWtpbmQ1LAor ICAgICAgICBzdGFvcDEsIHN0YW9wMiwgc3Rhb3AzLCBzdGFvcDQsIHN0YW9wNSwgc3RhY29sbDEs IHN0YWNvbGwyLCBzdGFjb2xsMywgc3RhY29sbDQsIHN0YWNvbGw1LAorICAgICAgICBzdGFudW1i ZXJzMSwgc3RhbnVtYmVyczIsIHN0YW51bWJlcnMzLCBzdGFudW1iZXJzNCwgc3RhbnVtYmVyczUs CisgICAgICAgIHN2MSwgc3YyLCBzdjMsIHN2NCwgc3Y1CitGUk9NIHN0YXRzX2V4cG9ydF9pbXBv cnQucGdfc3RhdGlzdGljX2NhcHR1cmUKK0VYQ0VQVAorU0VMRUNUIHN0YWF0dG51bSwgc3RhaW5o ZXJpdCwgc3RhbnVsbGZyYWMsIHN0YXdpZHRoLCBzdGFkaXN0aW5jdCwKKyAgICAgICAgc3Rha2lu ZDEsIHN0YWtpbmQyLCBzdGFraW5kMywgc3Rha2luZDQsIHN0YWtpbmQ1LAorICAgICAgICBzdGFv cDEsIHN0YW9wMiwgc3Rhb3AzLCBzdGFvcDQsIHN0YW9wNSwgc3RhY29sbDEsIHN0YWNvbGwyLCBz dGFjb2xsMywgc3RhY29sbDQsIHN0YWNvbGw1LAorICAgICAgICBzdGFudW1iZXJzMSwgc3RhbnVt YmVyczIsIHN0YW51bWJlcnMzLCBzdGFudW1iZXJzNCwgc3RhbnVtYmVyczUsCisgICAgICAgIHN0 YXZhbHVlczE6OnRleHQgQVMgc3YxLCBzdGF2YWx1ZXMyOjp0ZXh0IEFTIHN2Miwgc3RhdmFsdWVz Mzo6dGV4dCBBUyBzdjMsCisgICAgICAgIHN0YXZhbHVlczQ6OnRleHQgQVMgc3Y0LCBzdGF2YWx1 ZXM1Ojp0ZXh0IEFTIHN2NQorRlJPTSBwZ19zdGF0aXN0aWMKK1dIRVJFIHN0YXJlbGlkIElOICgn c3RhdHNfZXhwb3J0X2ltcG9ydC50ZXN0Jzo6cmVnY2xhc3MsCisgICAgICAgICAgICAgICAgICAg ICdzdGF0c19leHBvcnRfaW1wb3J0LmlzX29kZCc6OnJlZ2NsYXNzKTsKKyBzdGFhdHRudW0gfCBz dGFpbmhlcml0IHwgc3RhbnVsbGZyYWMgfCBzdGF3aWR0aCB8IHN0YWRpc3RpbmN0IHwgc3Rha2lu ZDEgfCBzdGFraW5kMiB8IHN0YWtpbmQzIHwgc3Rha2luZDQgfCBzdGFraW5kNSB8IHN0YW9wMSB8 IHN0YW9wMiB8IHN0YW9wMyB8IHN0YW9wNCB8IHN0YW9wNSB8IHN0YWNvbGwxIHwgc3RhY29sbDIg fCBzdGFjb2xsMyB8IHN0YWNvbGw0IHwgc3RhY29sbDUgfCBzdGFudW1iZXJzMSB8IHN0YW51bWJl cnMyIHwgc3RhbnVtYmVyczMgfCBzdGFudW1iZXJzNCB8IHN0YW51bWJlcnM1IHwgc3YxIHwgc3Yy IHwgc3YzIHwgc3Y0IHwgc3Y1IAorLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0t LS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLSstLS0t LS0tLSstLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0t Ky0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tCiso MCByb3dzKQorCistLSBUaGlzIHNob3VsZCByZXR1cm4gMCByb3dzCitTRUxFQ1Qgc3RhYXR0bnVt LCBzdGFpbmhlcml0LCBzdGFudWxsZnJhYywgc3Rhd2lkdGgsIHN0YWRpc3RpbmN0LAorICAgICAg ICBzdGFraW5kMSwgc3Rha2luZDIsIHN0YWtpbmQzLCBzdGFraW5kNCwgc3Rha2luZDUsCisgICAg ICAgIHN0YW9wMSwgc3Rhb3AyLCBzdGFvcDMsIHN0YW9wNCwgc3Rhb3A1LCBzdGFjb2xsMSwgc3Rh Y29sbDIsIHN0YWNvbGwzLCBzdGFjb2xsNCwgc3RhY29sbDUsCisgICAgICAgIHN0YW51bWJlcnMx LCBzdGFudW1iZXJzMiwgc3RhbnVtYmVyczMsIHN0YW51bWJlcnM0LCBzdGFudW1iZXJzNSwKKyAg ICAgICAgc3RhdmFsdWVzMTo6dGV4dCBBUyBzdjEsIHN0YXZhbHVlczI6OnRleHQgQVMgc3YyLCBz dGF2YWx1ZXMzOjp0ZXh0IEFTIHN2MywKKyAgICAgICAgc3RhdmFsdWVzNDo6dGV4dCBBUyBzdjQs IHN0YXZhbHVlczU6OnRleHQgQVMgc3Y1CitGUk9NIHBnX3N0YXRpc3RpYworV0hFUkUgc3RhcmVs aWQgSU4gKCdzdGF0c19leHBvcnRfaW1wb3J0LnRlc3QnOjpyZWdjbGFzcywKKyAgICAgICAgICAg ICAgICAgICAgJ3N0YXRzX2V4cG9ydF9pbXBvcnQuaXNfb2RkJzo6cmVnY2xhc3MpCitFWENFUFQK K1NFTEVDVCBzdGFhdHRudW0sIHN0YWluaGVyaXQsIHN0YW51bGxmcmFjLCBzdGF3aWR0aCwgc3Rh ZGlzdGluY3QsCisgICAgICAgIHN0YWtpbmQxLCBzdGFraW5kMiwgc3Rha2luZDMsIHN0YWtpbmQ0 LCBzdGFraW5kNSwKKyAgICAgICAgc3Rhb3AxLCBzdGFvcDIsIHN0YW9wMywgc3Rhb3A0LCBzdGFv cDUsIHN0YWNvbGwxLCBzdGFjb2xsMiwgc3RhY29sbDMsIHN0YWNvbGw0LCBzdGFjb2xsNSwKKyAg ICAgICAgc3RhbnVtYmVyczEsIHN0YW51bWJlcnMyLCBzdGFudW1iZXJzMywgc3RhbnVtYmVyczQs IHN0YW51bWJlcnM1LAorICAgICAgICBzdjEsIHN2Miwgc3YzLCBzdjQsIHN2NQorRlJPTSBzdGF0 c19leHBvcnRfaW1wb3J0LnBnX3N0YXRpc3RpY19jYXB0dXJlOworIHN0YWF0dG51bSB8IHN0YWlu aGVyaXQgfCBzdGFudWxsZnJhYyB8IHN0YXdpZHRoIHwgc3RhZGlzdGluY3QgfCBzdGFraW5kMSB8 IHN0YWtpbmQyIHwgc3Rha2luZDMgfCBzdGFraW5kNCB8IHN0YWtpbmQ1IHwgc3Rhb3AxIHwgc3Rh b3AyIHwgc3Rhb3AzIHwgc3Rhb3A0IHwgc3Rhb3A1IHwgc3RhY29sbDEgfCBzdGFjb2xsMiB8IHN0 YWNvbGwzIHwgc3RhY29sbDQgfCBzdGFjb2xsNSB8IHN0YW51bWJlcnMxIHwgc3RhbnVtYmVyczIg fCBzdGFudW1iZXJzMyB8IHN0YW51bWJlcnM0IHwgc3RhbnVtYmVyczUgfCBzdjEgfCBzdjIgfCBz djMgfCBzdjQgfCBzdjUgCistLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0r LS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0t Ky0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0KKygwIHJv d3MpCisKK1NFTEVDVCByZWxuYW1lLCByZWx0dXBsZXMKK0ZST00gcGdfY2xhc3MKK1dIRVJFIG9p ZCBJTiAoJ3N0YXRzX2V4cG9ydF9pbXBvcnQudGVzdCc6OnJlZ2NsYXNzLAorICAgICAgICAgICAg ICAnc3RhdHNfZXhwb3J0X2ltcG9ydC5pc19vZGQnOjpyZWdjbGFzcykKK09SREVSIEJZIHJlbG5h bWU7CisgcmVsbmFtZSB8IHJlbHR1cGxlcyAKKy0tLS0tLS0tLSstLS0tLS0tLS0tLQorIGlzX29k ZCAgfCAgICAgICAgIDQKKyB0ZXN0ICAgIHwgICAgICAgICA0CisoMiByb3dzKQorCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlIGIvc3JjL3Rlc3QvcmVncmVz cy9wYXJhbGxlbF9zY2hlZHVsZQppbmRleCAxZDhhNDE0ZWVhLi4wYzg5ZmZjMDJkIDEwMDY0NAot LS0gYS9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlCisrKyBiL3NyYy90ZXN0L3Jl Z3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUKQEAgLTEwMyw3ICsxMDMsNyBAQCB0ZXN0OiBzZWxlY3Rf dmlld3MgcG9ydGFsc19wMiBmb3JlaWduX2tleSBjbHVzdGVyIGRlcGVuZGVuY3kgZ3VjIGJpdG1h cG9wcyBjb21ibwogIyAtLS0tLS0tLS0tCiAjIEFub3RoZXIgZ3JvdXAgb2YgcGFyYWxsZWwgdGVz dHMgKEpTT04gcmVsYXRlZCkKICMgLS0tLS0tLS0tLQotdGVzdDoganNvbiBqc29uYiBqc29uX2Vu Y29kaW5nIGpzb25wYXRoIGpzb25wYXRoX2VuY29kaW5nIGpzb25iX2pzb25wYXRoIHNxbGpzb24K K3Rlc3Q6IGpzb24ganNvbmIganNvbl9lbmNvZGluZyBqc29ucGF0aCBqc29ucGF0aF9lbmNvZGlu ZyBqc29uYl9qc29ucGF0aCBzcWxqc29uIHN0YXRzX2V4cG9ydF9pbXBvcnQKIAogIyAtLS0tLS0t LS0tCiAjIEFub3RoZXIgZ3JvdXAgb2YgcGFyYWxsZWwgdGVzdHMKZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL3N0YXRzX2V4cG9ydF9pbXBvcnQuc3FsIGIvc3JjL3Rlc3QvcmVncmVz cy9zcWwvc3RhdHNfZXhwb3J0X2ltcG9ydC5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMC4uOWE4MGVlYmVlYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL3N0YXRzX2V4cG9ydF9pbXBvcnQuc3FsCkBAIC0wLDAgKzEsNDk5IEBACistLSBzZXQg dG8gJ3QnIHRvIHNlZSBkZWJ1ZyBvdXRwdXQKK1xzZXQgZGVidWcgZgorQ1JFQVRFIFNDSEVNQSBz dGF0c19leHBvcnRfaW1wb3J0OworCitDUkVBVEUgVFlQRSBzdGF0c19leHBvcnRfaW1wb3J0LmNv bXBsZXhfdHlwZSBBUyAoCisgICAgYSBpbnRlZ2VyLAorICAgIGIgZmxvYXQsCisgICAgYyB0ZXh0 LAorICAgIGQgZGF0ZSwKKyAgICBlIGpzb25iKTsKKworQ1JFQVRFIFRBQkxFIHN0YXRzX2V4cG9y dF9pbXBvcnQudGVzdCgKKyAgICBpZCBJTlRFR0VSIFBSSU1BUlkgS0VZLAorICAgIG5hbWUgdGV4 dCwKKyAgICBjb21wIHN0YXRzX2V4cG9ydF9pbXBvcnQuY29tcGxleF90eXBlLAorICAgIHRhZ3Mg dGV4dFtdCispOworCitJTlNFUlQgSU5UTyBzdGF0c19leHBvcnRfaW1wb3J0LnRlc3QKK1NFTEVD VCAxLCAnb25lJywgKDEsIDEuMSwgJ09ORScsICcyMDAxLTAxLTAxJywgJ3sgInhrZXkiOiAieHZh bCIgfScpOjpzdGF0c19leHBvcnRfaW1wb3J0LmNvbXBsZXhfdHlwZSwgYXJyYXlbJ3JlZCcsJ2dy ZWVuJ10KK1VOSU9OIEFMTAorU0VMRUNUIDIsICd0d28nLCAoMiwgMi4yLCAnVFdPJywgJzIwMDIt MDItMDInLCAnW3RydWUsIDQsICJzaXgiXScpOjpzdGF0c19leHBvcnRfaW1wb3J0LmNvbXBsZXhf dHlwZSwgYXJyYXlbJ2JsdWUnLCd5ZWxsb3cnXQorVU5JT04gQUxMCitTRUxFQ1QgMywgJ3RyZScs ICgzLCAzLjMsICdUUkUnLCAnMjAwMy0wMy0wMycsIE5VTEwpOjpzdGF0c19leHBvcnRfaW1wb3J0 LmNvbXBsZXhfdHlwZSwgYXJyYXlbJyJvcmFuZ2UiJywgJ3B1cnBsZScsICdjeWFuJ10KK1VOSU9O IEFMTAorU0VMRUNUIDQsICdmb3VyJywgTlVMTCwgTlVMTDsKKworQ1JFQVRFIElOREVYIGlzX29k ZCBPTiBzdGF0c19leHBvcnRfaW1wb3J0LnRlc3QoKChjb21wKS5hICUgMiA9IDEpKTsKKworLS0g R2VuZXJhdGUgc3RhdGlzdGljcyBvbiB0YWJsZSB3aXRoIGRhdGEKK0FOQUxZWkUgc3RhdHNfZXhw b3J0X2ltcG9ydC50ZXN0OworCistLSBDYXB0dXJlIHBnX3N0YXRpc3RpYyB2YWx1ZXMgZm9yIHRh YmxlIGFuZCBpbmRleAorQ1JFQVRFIFRBQkxFIHN0YXRzX2V4cG9ydF9pbXBvcnQucGdfc3RhdGlz dGljX2NhcHR1cmUKK0FTCitTRUxFQ1QgIHN0YXJlbGlkLAorICAgICAgICBzdGFhdHRudW0sIHN0 YWluaGVyaXQsIHN0YW51bGxmcmFjLCBzdGF3aWR0aCwgc3RhZGlzdGluY3QsCisgICAgICAgIHN0 YWtpbmQxLCBzdGFraW5kMiwgc3Rha2luZDMsIHN0YWtpbmQ0LCBzdGFraW5kNSwKKyAgICAgICAg c3Rhb3AxLCBzdGFvcDIsIHN0YW9wMywgc3Rhb3A0LCBzdGFvcDUsIHN0YWNvbGwxLCBzdGFjb2xs Miwgc3RhY29sbDMsIHN0YWNvbGw0LCBzdGFjb2xsNSwKKyAgICAgICAgc3RhbnVtYmVyczEsIHN0 YW51bWJlcnMyLCBzdGFudW1iZXJzMywgc3RhbnVtYmVyczQsIHN0YW51bWJlcnM1LAorICAgICAg ICBzdGF2YWx1ZXMxOjp0ZXh0IEFTIHN2MSwgc3RhdmFsdWVzMjo6dGV4dCBBUyBzdjIsIHN0YXZh bHVlczM6OnRleHQgQVMgc3YzLAorICAgICAgICBzdGF2YWx1ZXM0Ojp0ZXh0IEFTIHN2NCwgc3Rh dmFsdWVzNTo6dGV4dCBBUyBzdjUKK0ZST00gcGdfc3RhdGlzdGljCitXSEVSRSBzdGFyZWxpZCBJ TiAoJ3N0YXRzX2V4cG9ydF9pbXBvcnQudGVzdCc6OnJlZ2NsYXNzLAorICAgICAgICAgICAgICAg ICAgICAnc3RhdHNfZXhwb3J0X2ltcG9ydC5pc19vZGQnOjpyZWdjbGFzcyk7CisKK1NFTEVDVCBD T1VOVCgqKQorRlJPTSBzdGF0c19leHBvcnRfaW1wb3J0LnBnX3N0YXRpc3RpY19jYXB0dXJlOwor CistLSBFeHBvcnQgc3RhdHMKK1NFTEVDVAorICAgIGpzb25iX2J1aWxkX29iamVjdCgKKyAgICAg ICAgJ3NlcnZlcl92ZXJzaW9uX251bScsIGN1cnJlbnRfc2V0dGluZygnc2VydmVyX3ZlcnNpb25f bnVtJyksCisgICAgICAgICdyZWxuYW1lJywgci5yZWxuYW1lLAorICAgICAgICAnbnNwbmFtZScs IG4ubnNwbmFtZSwKKyAgICAgICAgJ3JlbHR1cGxlcycsIHIucmVsdHVwbGVzLAorICAgICAgICAn cmVscGFnZXMnLCByLnJlbHBhZ2VzLAorICAgICAgICAndHlwZXMnLAorICAgICAgICAoCisgICAg ICAgICAgICBTRUxFQ1QgYXJyYXlfYWdnKHRyIE9SREVSIEJZIHRyLm9pZCkKKyAgICAgICAgICAg IEZST00gKAorICAgICAgICAgICAgICAgIFNFTEVDVAorICAgICAgICAgICAgICAgICAgICB0Lm9p ZCwKKyAgICAgICAgICAgICAgICAgICAgdC50eXBuYW1lLAorICAgICAgICAgICAgICAgICAgICBu Lm5zcG5hbWUKKyAgICAgICAgICAgICAgICBGUk9NIHBnX3R5cGUgQVMgdAorICAgICAgICAgICAg ICAgIEpPSU4gcGdfbmFtZXNwYWNlIEFTIG4gT04gbi5vaWQgPSB0LnR5cG5hbWVzcGFjZQorICAg ICAgICAgICAgICAgIFdIRVJFIHQub2lkIElOICgKKyAgICAgICAgICAgICAgICAgICAgU0VMRUNU IGEuYXR0dHlwaWQKKyAgICAgICAgICAgICAgICAgICAgRlJPTSBwZ19hdHRyaWJ1dGUgQVMgYQor ICAgICAgICAgICAgICAgICAgICBXSEVSRSBhLmF0dHJlbGlkID0gci5vaWQKKyAgICAgICAgICAg ICAgICAgICAgQU5EIE5PVCBhLmF0dGlzZHJvcHBlZAorICAgICAgICAgICAgICAgICAgICBBTkQg YS5hdHRudW0gPiAwCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgKSBBUyB0cgorICAg ICAgICApLAorICAgICAgICAnY29sbGF0aW9ucycsCisgICAgICAgICgKKyAgICAgICAgICAgIFNF TEVDVCBhcnJheV9hZ2coY3IgT1JERVIgQlkgY3Iub2lkKQorICAgICAgICAgICAgRlJPTSAoCisg ICAgICAgICAgICAgICAgU0VMRUNUCisgICAgICAgICAgICAgICAgICAgIGMub2lkLAorICAgICAg ICAgICAgICAgICAgICBjLmNvbGxuYW1lLAorICAgICAgICAgICAgICAgICAgICBuLm5zcG5hbWUK KyAgICAgICAgICAgICAgICBGUk9NIHBnX2NvbGxhdGlvbiBBUyBjCisgICAgICAgICAgICAgICAg Sk9JTiBwZ19uYW1lc3BhY2UgQVMgbiBPTiBuLm9pZCA9IGMuY29sbG5hbWVzcGFjZQorICAgICAg ICAgICAgICAgIFdIRVJFIGMub2lkIElOICgKKyAgICAgICAgICAgICAgICAgICAgU0VMRUNUIGEu YXR0Y29sbGF0aW9uIEFTIG9pZAorICAgICAgICAgICAgICAgICAgICBGUk9NIHBnX2F0dHJpYnV0 ZSBBUyBhCisgICAgICAgICAgICAgICAgICAgIFdIRVJFIGEuYXR0cmVsaWQgPSByLm9pZAorICAg ICAgICAgICAgICAgICAgICBBTkQgTk9UIGEuYXR0aXNkcm9wcGVkCisgICAgICAgICAgICAgICAg ICAgIEFORCBhLmF0dG51bSA+IDAKKyAgICAgICAgICAgICAgICAgICAgVU5JT04KKyAgICAgICAg ICAgICAgICAgICAgU0VMRUNUIHUuY29sbGlkCisgICAgICAgICAgICAgICAgICAgIEZST00gcGdf c3RhdGlzdGljIEFTIHMKKyAgICAgICAgICAgICAgICAgICAgQ1JPU1MgSk9JTiBMQVRFUkFMIHVu bmVzdChBUlJBWVsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLnN0 YWNvbGwxLCBzLnN0YWNvbGwyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHMuc3RhY29sbDMsIHMuc3RhY29sbDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcy5zdGFjb2xsNV0pIEFTIHUoY29sbGlkKQorICAgICAgICAgICAgICAgICAg ICBXSEVSRSBzLnN0YXJlbGlkID0gci5vaWQKKyAgICAgICAgICAgICAgICAgICAgKQorICAgICAg ICAgICAgICAgICkgQVMgY3IKKyAgICAgICAgKSwKKyAgICAgICAgJ29wZXJhdG9ycycsCisgICAg ICAgICgKKyAgICAgICAgICAgIFNFTEVDVCBhcnJheV9hZ2cocCBPUkRFUiBCWSBwLm9pZCkKKyAg ICAgICAgICAgIEZST00gKAorICAgICAgICAgICAgICAgIFNFTEVDVAorICAgICAgICAgICAgICAg ICAgICBvLm9pZCwKKyAgICAgICAgICAgICAgICAgICAgby5vcHJuYW1lLAorICAgICAgICAgICAg ICAgICAgICBuLm5zcG5hbWUKKyAgICAgICAgICAgICAgICBGUk9NIHBnX29wZXJhdG9yIEFTIG8K KyAgICAgICAgICAgICAgICBKT0lOIHBnX25hbWVzcGFjZSBBUyBuIE9OIG4ub2lkID0gby5vcHJu YW1lc3BhY2UKKyAgICAgICAgICAgICAgICBXSEVSRSBvLm9pZCBJTiAoCisgICAgICAgICAgICAg ICAgICAgIFNFTEVDVCB1Lm9pZAorICAgICAgICAgICAgICAgICAgICBGUk9NIHBnX3N0YXRpc3Rp YyBBUyBzCisgICAgICAgICAgICAgICAgICAgIENST1NTIEpPSU4gTEFURVJBTCB1bm5lc3QoQVJS QVlbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5zdGFvcDEsIHMu c3Rhb3AyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuc3Rhb3Az LCBzLnN0YW9wNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLnN0 YW9wNV0pIEFTIHUob3BpZCkKKyAgICAgICAgICAgICAgICAgICAgV0hFUkUgcy5zdGFyZWxpZCA9 IHIub2lkCisgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICkgQVMgcAorICAgICAg ICApLAorICAgICAgICAnYXR0cmlidXRlcycsCisgICAgICAgICgKKyAgICAgICAgICAgIFNFTEVD VCBhcnJheV9hZ2coYXIgT1JERVIgQlkgYXIuYXR0bnVtKQorICAgICAgICAgICAgRlJPTSAoCisg ICAgICAgICAgICAgICAgU0VMRUNUCisgICAgICAgICAgICAgICAgICAgIGEuYXR0bnVtLAorICAg ICAgICAgICAgICAgICAgICBhLmF0dG5hbWUsCisgICAgICAgICAgICAgICAgICAgIGEuYXR0dHlw aWQsCisgICAgICAgICAgICAgICAgICAgIGEuYXR0Y29sbGF0aW9uCisgICAgICAgICAgICAgICAg RlJPTSBwZ19hdHRyaWJ1dGUgQVMgYQorICAgICAgICAgICAgICAgIFdIRVJFIGEuYXR0cmVsaWQg PSByLm9pZAorICAgICAgICAgICAgICAgIEFORCBOT1QgYS5hdHRpc2Ryb3BwZWQKKyAgICAgICAg ICAgICAgICBBTkQgYS5hdHRudW0gPiAwCisgICAgICAgICAgICApIEFTIGFyCisgICAgICAgICks CisgICAgICAgICdzdGF0aXN0aWNzJywKKyAgICAgICAgKAorICAgICAgICAgICAgU0VMRUNUIGFy cmF5X2FnZyhzciBPUkRFUiBCWSBzci5zdGFpbmhlcml0LCBzci5zdGFhdHRudW0pCisgICAgICAg ICAgICBGUk9NICgKKyAgICAgICAgICAgICAgICBTRUxFQ1QKKyAgICAgICAgICAgICAgICAgICAg IHMuc3RhYXR0bnVtLAorICAgICAgICAgICAgICAgICAgICAgcy5zdGFpbmhlcml0LAorICAgICAg ICAgICAgICAgICAgICAgcy5zdGFudWxsZnJhYywKKyAgICAgICAgICAgICAgICAgICAgIHMuc3Rh d2lkdGgsCisgICAgICAgICAgICAgICAgICAgICBzLnN0YWRpc3RpbmN0LAorICAgICAgICAgICAg ICAgICAgICAgcy5zdGFraW5kMSwKKyAgICAgICAgICAgICAgICAgICAgIHMuc3Rha2luZDIsCisg ICAgICAgICAgICAgICAgICAgICBzLnN0YWtpbmQzLAorICAgICAgICAgICAgICAgICAgICAgcy5z dGFraW5kNCwKKyAgICAgICAgICAgICAgICAgICAgIHMuc3Rha2luZDUsCisgICAgICAgICAgICAg ICAgICAgICBzLnN0YW9wMSwKKyAgICAgICAgICAgICAgICAgICAgIHMuc3Rhb3AyLAorICAgICAg ICAgICAgICAgICAgICAgcy5zdGFvcDMsCisgICAgICAgICAgICAgICAgICAgICBzLnN0YW9wNCwK KyAgICAgICAgICAgICAgICAgICAgIHMuc3Rhb3A1LAorICAgICAgICAgICAgICAgICAgICAgcy5z dGFjb2xsMSwKKyAgICAgICAgICAgICAgICAgICAgIHMuc3RhY29sbDIsCisgICAgICAgICAgICAg ICAgICAgICBzLnN0YWNvbGwzLAorICAgICAgICAgICAgICAgICAgICAgcy5zdGFjb2xsNCwKKyAg ICAgICAgICAgICAgICAgICAgIHMuc3RhY29sbDUsCisgICAgICAgICAgICAgICAgICAgICBzLnN0 YW51bWJlcnMxOjp0ZXh0IEFTIHN0YW51bWJlcnMxLAorICAgICAgICAgICAgICAgICAgICAgcy5z dGFudW1iZXJzMjo6dGV4dCBBUyBzdGFudW1iZXJzMiwKKyAgICAgICAgICAgICAgICAgICAgIHMu c3RhbnVtYmVyczM6OnRleHQgQVMgc3RhbnVtYmVyczMsCisgICAgICAgICAgICAgICAgICAgICBz LnN0YW51bWJlcnM0Ojp0ZXh0IEFTIHN0YW51bWJlcnM0LAorICAgICAgICAgICAgICAgICAgICAg cy5zdGFudW1iZXJzNTo6dGV4dCBBUyBzdGFudW1iZXJzNSwKKyAgICAgICAgICAgICAgICAgICAg IHMuc3RhdmFsdWVzMTo6dGV4dCBBUyBzdGF2YWx1ZXMxLAorICAgICAgICAgICAgICAgICAgICAg cy5zdGF2YWx1ZXMyOjp0ZXh0IEFTIHN0YXZhbHVlczIsCisgICAgICAgICAgICAgICAgICAgICBz LnN0YXZhbHVlczM6OnRleHQgQVMgc3RhdmFsdWVzMywKKyAgICAgICAgICAgICAgICAgICAgIHMu c3RhdmFsdWVzNDo6dGV4dCBBUyBzdGF2YWx1ZXM0LAorICAgICAgICAgICAgICAgICAgICAgcy5z dGF2YWx1ZXM1Ojp0ZXh0IEFTIHN0YXZhbHVlczUKKyAgICAgICAgICAgICAgICBGUk9NIHBnX3N0 YXRpc3RpYyBBUyBzCisgICAgICAgICAgICAgICAgV0hFUkUgcy5zdGFyZWxpZCA9IHIub2lkCisg ICAgICAgICAgICApIEFTIHNyCisgICAgICAgICkKKyAgICApIEFTIHRhYmxlX3N0YXRzX2pzb24K K0ZST00gcGdfY2xhc3MgQVMgcgorSk9JTiBwZ19uYW1lc3BhY2UgQVMgbiBPTiBuLm9pZCA9IHIu cmVsbmFtZXNwYWNlCitXSEVSRSByLm9pZCA9ICdzdGF0c19leHBvcnRfaW1wb3J0LnRlc3QnOjpy ZWdjbGFzcworXGdzZXQKKworU0VMRUNUIGpzb25iX3ByZXR0eSg6J3RhYmxlX3N0YXRzX2pzb24n Ojpqc29uYikgQVMgdGFibGVfc3RhdHNfanNvbgorV0hFUkUgOidkZWJ1Zyc6OmJvb2xlYW47CisK K1NFTEVDVAorICAgIGpzb25iX2J1aWxkX29iamVjdCgKKyAgICAgICAgJ3NlcnZlcl92ZXJzaW9u X251bScsIGN1cnJlbnRfc2V0dGluZygnc2VydmVyX3ZlcnNpb25fbnVtJyksCisgICAgICAgICdy ZWxuYW1lJywgci5yZWxuYW1lLAorICAgICAgICAnbnNwbmFtZScsIG4ubnNwbmFtZSwKKyAgICAg ICAgJ3JlbHR1cGxlcycsIHIucmVsdHVwbGVzLAorICAgICAgICAncmVscGFnZXMnLCByLnJlbHBh Z2VzLAorICAgICAgICAndHlwZXMnLAorICAgICAgICAoCisgICAgICAgICAgICBTRUxFQ1QgYXJy YXlfYWdnKHRyIE9SREVSIEJZIHRyLm9pZCkKKyAgICAgICAgICAgIEZST00gKAorICAgICAgICAg ICAgICAgIFNFTEVDVAorICAgICAgICAgICAgICAgICAgICB0Lm9pZCwKKyAgICAgICAgICAgICAg ICAgICAgdC50eXBuYW1lLAorICAgICAgICAgICAgICAgICAgICBuLm5zcG5hbWUKKyAgICAgICAg ICAgICAgICBGUk9NIHBnX3R5cGUgQVMgdAorICAgICAgICAgICAgICAgIEpPSU4gcGdfbmFtZXNw YWNlIEFTIG4gT04gbi5vaWQgPSB0LnR5cG5hbWVzcGFjZQorICAgICAgICAgICAgICAgIFdIRVJF IHQub2lkIElOICgKKyAgICAgICAgICAgICAgICAgICAgU0VMRUNUIGEuYXR0dHlwaWQKKyAgICAg ICAgICAgICAgICAgICAgRlJPTSBwZ19hdHRyaWJ1dGUgQVMgYQorICAgICAgICAgICAgICAgICAg ICBXSEVSRSBhLmF0dHJlbGlkID0gci5vaWQKKyAgICAgICAgICAgICAgICAgICAgQU5EIE5PVCBh LmF0dGlzZHJvcHBlZAorICAgICAgICAgICAgICAgICAgICBBTkQgYS5hdHRudW0gPiAwCisgICAg ICAgICAgICAgICAgKQorICAgICAgICAgICAgKSBBUyB0cgorICAgICAgICApLAorICAgICAgICAn Y29sbGF0aW9ucycsCisgICAgICAgICgKKyAgICAgICAgICAgIFNFTEVDVCBhcnJheV9hZ2coY3Ig T1JERVIgQlkgY3Iub2lkKQorICAgICAgICAgICAgRlJPTSAoCisgICAgICAgICAgICAgICAgU0VM RUNUCisgICAgICAgICAgICAgICAgICAgIGMub2lkLAorICAgICAgICAgICAgICAgICAgICBjLmNv bGxuYW1lLAorICAgICAgICAgICAgICAgICAgICBuLm5zcG5hbWUKKyAgICAgICAgICAgICAgICBG Uk9NIHBnX2NvbGxhdGlvbiBBUyBjCisgICAgICAgICAgICAgICAgSk9JTiBwZ19uYW1lc3BhY2Ug QVMgbiBPTiBuLm9pZCA9IGMuY29sbG5hbWVzcGFjZQorICAgICAgICAgICAgICAgIFdIRVJFIGMu b2lkIElOICgKKyAgICAgICAgICAgICAgICAgICAgU0VMRUNUIGEuYXR0Y29sbGF0aW9uIEFTIG9p ZAorICAgICAgICAgICAgICAgICAgICBGUk9NIHBnX2F0dHJpYnV0ZSBBUyBhCisgICAgICAgICAg ICAgICAgICAgIFdIRVJFIGEuYXR0cmVsaWQgPSByLm9pZAorICAgICAgICAgICAgICAgICAgICBB TkQgTk9UIGEuYXR0aXNkcm9wcGVkCisgICAgICAgICAgICAgICAgICAgIEFORCBhLmF0dG51bSA+ IDAKKyAgICAgICAgICAgICAgICAgICAgVU5JT04KKyAgICAgICAgICAgICAgICAgICAgU0VMRUNU IHUuY29sbGlkCisgICAgICAgICAgICAgICAgICAgIEZST00gcGdfc3RhdGlzdGljIEFTIHMKKyAg ICAgICAgICAgICAgICAgICAgQ1JPU1MgSk9JTiBMQVRFUkFMIHVubmVzdChBUlJBWVsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLnN0YWNvbGwxLCBzLnN0YWNvbGwy LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuc3RhY29sbDMsIHMu c3RhY29sbDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5zdGFj b2xsNV0pIEFTIHUoY29sbGlkKQorICAgICAgICAgICAgICAgICAgICBXSEVSRSBzLnN0YXJlbGlk ID0gci5vaWQKKyAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICkgQVMgY3IK KyAgICAgICAgKSwKKyAgICAgICAgJ29wZXJhdG9ycycsCisgICAgICAgICgKKyAgICAgICAgICAg IFNFTEVDVCBhcnJheV9hZ2cocCBPUkRFUiBCWSBwLm9pZCkKKyAgICAgICAgICAgIEZST00gKAor ICAgICAgICAgICAgICAgIFNFTEVDVAorICAgICAgICAgICAgICAgICAgICBvLm9pZCwKKyAgICAg ICAgICAgICAgICAgICAgby5vcHJuYW1lLAorICAgICAgICAgICAgICAgICAgICBuLm5zcG5hbWUK KyAgICAgICAgICAgICAgICBGUk9NIHBnX29wZXJhdG9yIEFTIG8KKyAgICAgICAgICAgICAgICBK T0lOIHBnX25hbWVzcGFjZSBBUyBuIE9OIG4ub2lkID0gby5vcHJuYW1lc3BhY2UKKyAgICAgICAg ICAgICAgICBXSEVSRSBvLm9pZCBJTiAoCisgICAgICAgICAgICAgICAgICAgIFNFTEVDVCB1Lm9p ZAorICAgICAgICAgICAgICAgICAgICBGUk9NIHBnX3N0YXRpc3RpYyBBUyBzCisgICAgICAgICAg ICAgICAgICAgIENST1NTIEpPSU4gTEFURVJBTCB1bm5lc3QoQVJSQVlbCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5zdGFvcDEsIHMuc3Rhb3AyLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuc3Rhb3AzLCBzLnN0YW9wNCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLnN0YW9wNV0pIEFTIHUob3BpZCkK KyAgICAgICAgICAgICAgICAgICAgV0hFUkUgcy5zdGFyZWxpZCA9IHIub2lkCisgICAgICAgICAg ICAgICAgICAgICkKKyAgICAgICAgICAgICkgQVMgcAorICAgICAgICApLAorICAgICAgICAnYXR0 cmlidXRlcycsCisgICAgICAgICgKKyAgICAgICAgICAgIFNFTEVDVCBhcnJheV9hZ2coYXIgT1JE RVIgQlkgYXIuYXR0bnVtKQorICAgICAgICAgICAgRlJPTSAoCisgICAgICAgICAgICAgICAgU0VM RUNUCisgICAgICAgICAgICAgICAgICAgIGEuYXR0bnVtLAorICAgICAgICAgICAgICAgICAgICBh LmF0dG5hbWUsCisgICAgICAgICAgICAgICAgICAgIGEuYXR0dHlwaWQsCisgICAgICAgICAgICAg ICAgICAgIGEuYXR0Y29sbGF0aW9uCisgICAgICAgICAgICAgICAgRlJPTSBwZ19hdHRyaWJ1dGUg QVMgYQorICAgICAgICAgICAgICAgIFdIRVJFIGEuYXR0cmVsaWQgPSByLm9pZAorICAgICAgICAg ICAgICAgIEFORCBOT1QgYS5hdHRpc2Ryb3BwZWQKKyAgICAgICAgICAgICAgICBBTkQgYS5hdHRu dW0gPiAwCisgICAgICAgICAgICApIEFTIGFyCisgICAgICAgICksCisgICAgICAgICdzdGF0aXN0 aWNzJywKKyAgICAgICAgKAorICAgICAgICAgICAgU0VMRUNUIGFycmF5X2FnZyhzciBPUkRFUiBC WSBzci5zdGFpbmhlcml0LCBzci5zdGFhdHRudW0pCisgICAgICAgICAgICBGUk9NICgKKyAgICAg ICAgICAgICAgICBTRUxFQ1QKKyAgICAgICAgICAgICAgICAgICAgIHMuc3RhYXR0bnVtLAorICAg ICAgICAgICAgICAgICAgICAgcy5zdGFpbmhlcml0LAorICAgICAgICAgICAgICAgICAgICAgcy5z dGFudWxsZnJhYywKKyAgICAgICAgICAgICAgICAgICAgIHMuc3Rhd2lkdGgsCisgICAgICAgICAg ICAgICAgICAgICBzLnN0YWRpc3RpbmN0LAorICAgICAgICAgICAgICAgICAgICAgcy5zdGFraW5k MSwKKyAgICAgICAgICAgICAgICAgICAgIHMuc3Rha2luZDIsCisgICAgICAgICAgICAgICAgICAg ICBzLnN0YWtpbmQzLAorICAgICAgICAgICAgICAgICAgICAgcy5zdGFraW5kNCwKKyAgICAgICAg ICAgICAgICAgICAgIHMuc3Rha2luZDUsCisgICAgICAgICAgICAgICAgICAgICBzLnN0YW9wMSwK KyAgICAgICAgICAgICAgICAgICAgIHMuc3Rhb3AyLAorICAgICAgICAgICAgICAgICAgICAgcy5z dGFvcDMsCisgICAgICAgICAgICAgICAgICAgICBzLnN0YW9wNCwKKyAgICAgICAgICAgICAgICAg ICAgIHMuc3Rhb3A1LAorICAgICAgICAgICAgICAgICAgICAgcy5zdGFjb2xsMSwKKyAgICAgICAg ICAgICAgICAgICAgIHMuc3RhY29sbDIsCisgICAgICAgICAgICAgICAgICAgICBzLnN0YWNvbGwz LAorICAgICAgICAgICAgICAgICAgICAgcy5zdGFjb2xsNCwKKyAgICAgICAgICAgICAgICAgICAg IHMuc3RhY29sbDUsCisgICAgICAgICAgICAgICAgICAgICBzLnN0YW51bWJlcnMxOjp0ZXh0IEFT IHN0YW51bWJlcnMxLAorICAgICAgICAgICAgICAgICAgICAgcy5zdGFudW1iZXJzMjo6dGV4dCBB UyBzdGFudW1iZXJzMiwKKyAgICAgICAgICAgICAgICAgICAgIHMuc3RhbnVtYmVyczM6OnRleHQg QVMgc3RhbnVtYmVyczMsCisgICAgICAgICAgICAgICAgICAgICBzLnN0YW51bWJlcnM0Ojp0ZXh0 IEFTIHN0YW51bWJlcnM0LAorICAgICAgICAgICAgICAgICAgICAgcy5zdGFudW1iZXJzNTo6dGV4 dCBBUyBzdGFudW1iZXJzNSwKKyAgICAgICAgICAgICAgICAgICAgIHMuc3RhdmFsdWVzMTo6dGV4 dCBBUyBzdGF2YWx1ZXMxLAorICAgICAgICAgICAgICAgICAgICAgcy5zdGF2YWx1ZXMyOjp0ZXh0 IEFTIHN0YXZhbHVlczIsCisgICAgICAgICAgICAgICAgICAgICBzLnN0YXZhbHVlczM6OnRleHQg QVMgc3RhdmFsdWVzMywKKyAgICAgICAgICAgICAgICAgICAgIHMuc3RhdmFsdWVzNDo6dGV4dCBB UyBzdGF2YWx1ZXM0LAorICAgICAgICAgICAgICAgICAgICAgcy5zdGF2YWx1ZXM1Ojp0ZXh0IEFT IHN0YXZhbHVlczUKKyAgICAgICAgICAgICAgICBGUk9NIHBnX3N0YXRpc3RpYyBBUyBzCisgICAg ICAgICAgICAgICAgV0hFUkUgcy5zdGFyZWxpZCA9IHIub2lkCisgICAgICAgICAgICApIEFTIHNy CisgICAgICAgICkKKyAgICApIEFTIGluZGV4X3N0YXRzX2pzb24KK0ZST00gcGdfY2xhc3MgQVMg cgorSk9JTiBwZ19uYW1lc3BhY2UgQVMgbiBPTiBuLm9pZCA9IHIucmVsbmFtZXNwYWNlCitXSEVS RSByLm9pZCA9ICdzdGF0c19leHBvcnRfaW1wb3J0LmlzX29kZCc6OnJlZ2NsYXNzCitcZ3NldAor CitTRUxFQ1QganNvbmJfcHJldHR5KDonaW5kZXhfc3RhdHNfanNvbic6Ompzb25iKSBBUyBpbmRl eF9zdGF0c19qc29uCitXSEVSRSA6J2RlYnVnJzo6Ym9vbGVhbjsKKworU0VMRUNUIHJlbG5hbWUs IHJlbHR1cGxlcworRlJPTSBwZ19jbGFzcworV0hFUkUgb2lkIElOICgnc3RhdHNfZXhwb3J0X2lt cG9ydC50ZXN0Jzo6cmVnY2xhc3MsCisgICAgICAgICAgICAgICdzdGF0c19leHBvcnRfaW1wb3J0 LmlzX29kZCc6OnJlZ2NsYXNzKQorT1JERVIgQlkgcmVsbmFtZTsKKworLS0gTW92ZSB0YWJsZSBh bmQgaW5kZXggb3V0IG9mIHRoZSB3YXkKK0FMVEVSIFRBQkxFIHN0YXRzX2V4cG9ydF9pbXBvcnQu dGVzdCBSRU5BTUUgVE8gdGVzdF9vcmlnOworQUxURVIgSU5ERVggc3RhdHNfZXhwb3J0X2ltcG9y dC5pc19vZGQgUkVOQU1FIFRPIGlzX29kZF9vcmlnOworCistLSBDcmVhdGUgZW1wdHkgY29weSB0 YWJsZXMKK0NSRUFURSBUQUJMRSBzdGF0c19leHBvcnRfaW1wb3J0LnRlc3QoTElLRSBzdGF0c19l eHBvcnRfaW1wb3J0LnRlc3Rfb3JpZyk7CitDUkVBVEUgSU5ERVggaXNfb2RkIE9OIHN0YXRzX2V4 cG9ydF9pbXBvcnQudGVzdCgoKGNvbXApLmEgJSAyID0gMSkpOworCistLSBWZXJpZnkgbm8gc3Rh dHMgZm9yIHRoZXNlIG5ldyB0YWJsZXMKK1NFTEVDVCBDT1VOVCgqKQorRlJPTSBwZ19zdGF0aXN0 aWMKK1dIRVJFIHN0YXJlbGlkIElOKCdzdGF0c19leHBvcnRfaW1wb3J0LnRlc3QnOjpyZWdjbGFz cywKKyAgICAgICAgICAgICAgJ3N0YXRzX2V4cG9ydF9pbXBvcnQuaXNfb2RkJzo6cmVnY2xhc3Mp OworCitTRUxFQ1QgcmVsbmFtZSwgcmVsdHVwbGVzCitGUk9NIHBnX2NsYXNzCitXSEVSRSBvaWQg SU4gKCdzdGF0c19leHBvcnRfaW1wb3J0LnRlc3QnOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAg J3N0YXRzX2V4cG9ydF9pbXBvcnQuaXNfb2RkJzo6cmVnY2xhc3MpCitPUkRFUiBCWSByZWxuYW1l OworCisKKy0tIFRlc3QgdmFsaWF0aW9uCitTRUxFQ1QKKyAgICBqc29uYl9idWlsZF9vYmplY3Qo CisgICAgICAgICdzZXJ2ZXJfdmVyc2lvbl9udW0nLCBjdXJyZW50X3NldHRpbmcoJ3NlcnZlcl92 ZXJzaW9uX251bScpLAorICAgICAgICAncmVsbmFtZScsICd0ZXN0JywKKyAgICAgICAgJ25zcG5h bWUnLCAnc3RhdHNfZXhwb3J0X2ltcG9ydCcsCisgICAgICAgICd0eXBlcycsCisgICAgICAgICgK KyAgICAgICAgICAgIFNFTEVDVCBhcnJheV9hZ2cocikKKyAgICAgICAgICAgIEZST00gKAorICAg ICAgICAgICAgICAgIFNFTEVDVCAxIEFTIG9pZCwgJ3R5cGUxJyBBUyB0eXBuYW1lCisgICAgICAg ICAgICAgICAgVU5JT04gQUxMCisgICAgICAgICAgICAgICAgU0VMRUNUIDIgQVMgb2lkLCAndHlw ZTInIEFTIHR5cG5hbWUKKyAgICAgICAgICAgICAgICBVTklPTiBBTEwKKyAgICAgICAgICAgICAg ICBTRUxFQ1QgMiBBUyBvaWQsICd0eXBlMycgQVMgdHlwbmFtZQorICAgICAgICAgICAgICAgICkg QVMgcgorICAgICAgICApKSBBUyBpbnZhbGlkX3R5cGVzX2RvYywKKyAgICBqc29uYl9idWlsZF9v YmplY3QoCisgICAgICAgICdzZXJ2ZXJfdmVyc2lvbl9udW0nLCBjdXJyZW50X3NldHRpbmcoJ3Nl cnZlcl92ZXJzaW9uX251bScpLAorICAgICAgICAncmVsbmFtZScsICd0ZXN0JywKKyAgICAgICAg J25zcG5hbWUnLCAnc3RhdHNfZXhwb3J0X2ltcG9ydCcsCisgICAgICAgICdjb2xsYXRpb25zJywK KyAgICAgICAgKAorICAgICAgICAgICAgU0VMRUNUIGFycmF5X2FnZyhyKQorICAgICAgICAgICAg RlJPTSAoCisgICAgICAgICAgICAgICAgU0VMRUNUIDEgQVMgb2lkLCAnY29sbDEnIEFTIGNvbGxu YW1lCisgICAgICAgICAgICAgICAgVU5JT04gQUxMCisgICAgICAgICAgICAgICAgU0VMRUNUIDEg QVMgb2lkLCAnY29sbDInIEFTIGNvbGxuYW1lCisgICAgICAgICAgICAgICAgVU5JT04gQUxMCisg ICAgICAgICAgICAgICAgU0VMRUNUIDIgQVMgb2lkLCAnY29sbDMnIEFTIGNvbGxuYW1lCisgICAg ICAgICAgICAgICAgKSBBUyByCisgICAgICAgICkpIEFTIGludmFsaWRfY29sbGF0aW9uc19kb2Ms CisgICAganNvbmJfYnVpbGRfb2JqZWN0KAorICAgICAgICAnc2VydmVyX3ZlcnNpb25fbnVtJywg Y3VycmVudF9zZXR0aW5nKCdzZXJ2ZXJfdmVyc2lvbl9udW0nKSwKKyAgICAgICAgJ3JlbG5hbWUn LCAndGVzdCcsCisgICAgICAgICduc3BuYW1lJywgJ3N0YXRzX2V4cG9ydF9pbXBvcnQnLAorICAg ICAgICAnb3BlcmF0b3JzJywKKyAgICAgICAgKAorICAgICAgICAgICAgU0VMRUNUIGFycmF5X2Fn ZyhyKQorICAgICAgICAgICAgRlJPTSAoCisgICAgICAgICAgICAgICAgU0VMRUNUIDEgQVMgb2lk LCAnb3ByMScgQVMgb3BybmFtZQorICAgICAgICAgICAgICAgIFVOSU9OIEFMTAorICAgICAgICAg ICAgICAgIFNFTEVDVCAzIEFTIG9pZCwgJ29wcjInIEFTIG9wcm5hbWUKKyAgICAgICAgICAgICAg ICBVTklPTiBBTEwKKyAgICAgICAgICAgICAgICBTRUxFQ1QgMyBBUyBvaWQsICdvcHIzJyBBUyBv cHJuYW1lCisgICAgICAgICAgICAgICAgKSBBUyByCisgICAgICAgICkpIEFTIGludmFsaWRfb3Bl cmF0b3JzX2RvYywKKyAgICBqc29uYl9idWlsZF9vYmplY3QoCisgICAgICAgICdzZXJ2ZXJfdmVy c2lvbl9udW0nLCBjdXJyZW50X3NldHRpbmcoJ3NlcnZlcl92ZXJzaW9uX251bScpLAorICAgICAg ICAncmVsbmFtZScsICd0ZXN0JywKKyAgICAgICAgJ25zcG5hbWUnLCAnc3RhdHNfZXhwb3J0X2lt cG9ydCcsCisgICAgICAgICdhdHRyaWJ1dGVzJywKKyAgICAgICAgKAorICAgICAgICAgICAgU0VM RUNUIGFycmF5X2FnZyhyKQorICAgICAgICAgICAgRlJPTSAoCisgICAgICAgICAgICAgICAgU0VM RUNUIDEgQVMgYXR0bnVtLCAnY29sMScgQVMgYXR0bmFtZQorICAgICAgICAgICAgICAgIFVOSU9O IEFMTAorICAgICAgICAgICAgICAgIFNFTEVDVCA0IEFTIGF0dG51bSwgJ2NvbDInIEFTIGF0dG5h bWUKKyAgICAgICAgICAgICAgICBVTklPTiBBTEwKKyAgICAgICAgICAgICAgICBTRUxFQ1QgNCBB UyBhdHRudW0sICdjb2wzJyBBUyBhdHRuYW1lCisgICAgICAgICAgICAgICAgKSBBUyByCisgICAg ICAgICkpIEFTIGludmFsaWRfYXR0cmlidXRlc19kb2MsCisgICAganNvbmJfYnVpbGRfb2JqZWN0 KAorICAgICAgICAnc2VydmVyX3ZlcnNpb25fbnVtJywgY3VycmVudF9zZXR0aW5nKCdzZXJ2ZXJf dmVyc2lvbl9udW0nKSwKKyAgICAgICAgJ3JlbG5hbWUnLCAndGVzdCcsCisgICAgICAgICduc3Bu YW1lJywgJ3N0YXRzX2V4cG9ydF9pbXBvcnQnLAorICAgICAgICAnc3RhdGlzdGljcycsCisgICAg ICAgICgKKyAgICAgICAgICAgIFNFTEVDVCBhcnJheV9hZ2cocikKKyAgICAgICAgICAgIEZST00g KAorICAgICAgICAgICAgICAgIFNFTEVDVCAxIEFTIHN0YWF0dG51bSwgZmFsc2UgQVMgc3RhaW5o ZXJpdAorICAgICAgICAgICAgICAgIFVOSU9OIEFMTAorICAgICAgICAgICAgICAgIFNFTEVDVCA1 IEFTIHN0YWF0dG51bSwgdHJ1ZSBBUyBzdGFpbmhlcml0CisgICAgICAgICAgICAgICAgVU5JT04g QUxMCisgICAgICAgICAgICAgICAgU0VMRUNUIDEgQVMgc3RhYXR0bnVtLCBmYWxzZSBBUyBzdGFp bmhlcml0CisgICAgICAgICAgICAgICAgKSBBUyByCisgICAgICAgICkpIEFTIGludmFsaWRfc3Rh dGlzdGljc19kb2MKK1xnc2V0CisKK1NFTEVDVCBwZ19pbXBvcnRfcmVsX3N0YXRzKCdzdGF0c19l eHBvcnRfaW1wb3J0LnRlc3QnOjpyZWdjbGFzcywKKyAgICAgICAgOidpbnZhbGlkX3R5cGVzX2Rv Yyc6Ompzb25iLCB0cnVlLCB0cnVlKTsKKworU0VMRUNUIHBnX2ltcG9ydF9yZWxfc3RhdHMoJ3N0 YXRzX2V4cG9ydF9pbXBvcnQudGVzdCc6OnJlZ2NsYXNzLAorICAgICAgICA6J2ludmFsaWRfY29s bGF0aW9uc19kb2MnOjpqc29uYiwgdHJ1ZSwgdHJ1ZSk7CisKK1NFTEVDVCBwZ19pbXBvcnRfcmVs X3N0YXRzKCdzdGF0c19leHBvcnRfaW1wb3J0LnRlc3QnOjpyZWdjbGFzcywKKyAgICAgICAgOidp bnZhbGlkX29wZXJhdG9yc19kb2MnOjpqc29uYiwgdHJ1ZSwgdHJ1ZSk7CisKK1NFTEVDVCBwZ19p bXBvcnRfcmVsX3N0YXRzKCdzdGF0c19leHBvcnRfaW1wb3J0LnRlc3QnOjpyZWdjbGFzcywKKyAg ICAgICAgOidpbnZhbGlkX2F0dHJpYnV0ZXNfZG9jJzo6anNvbmIsIHRydWUsIHRydWUpOworCitT RUxFQ1QgcGdfaW1wb3J0X3JlbF9zdGF0cygnc3RhdHNfZXhwb3J0X2ltcG9ydC50ZXN0Jzo6cmVn Y2xhc3MsCisgICAgICAgIDonaW52YWxpZF9zdGF0aXN0aWNzX2RvYyc6Ompzb25iLCB0cnVlLCB0 cnVlKTsKKworLS0gSW1wb3J0IHN0YXRzCitTRUxFQ1QgcGdfaW1wb3J0X3JlbF9zdGF0cygKKyAg ICAgICAgJ3N0YXRzX2V4cG9ydF9pbXBvcnQudGVzdCc6OnJlZ2NsYXNzLAorICAgICAgICA6J3Rh YmxlX3N0YXRzX2pzb24nOjpqc29uYiwKKyAgICAgICAgdHJ1ZSwKKyAgICAgICAgdHJ1ZSk7CisK K1NFTEVDVCBwZ19pbXBvcnRfcmVsX3N0YXRzKAorICAgICAgICAnc3RhdHNfZXhwb3J0X2ltcG9y dC5pc19vZGQnOjpyZWdjbGFzcywKKyAgICAgICAgOidpbmRleF9zdGF0c19qc29uJzo6anNvbmIs CisgICAgICAgIHRydWUsCisgICAgICAgIHRydWUpOworCistLSBUaGlzIHNob3VsZCByZXR1cm4g MCByb3dzCitTRUxFQ1Qgc3RhYXR0bnVtLCBzdGFpbmhlcml0LCBzdGFudWxsZnJhYywgc3Rhd2lk dGgsIHN0YWRpc3RpbmN0LAorICAgICAgICBzdGFraW5kMSwgc3Rha2luZDIsIHN0YWtpbmQzLCBz dGFraW5kNCwgc3Rha2luZDUsCisgICAgICAgIHN0YW9wMSwgc3Rhb3AyLCBzdGFvcDMsIHN0YW9w NCwgc3Rhb3A1LCBzdGFjb2xsMSwgc3RhY29sbDIsIHN0YWNvbGwzLCBzdGFjb2xsNCwgc3RhY29s bDUsCisgICAgICAgIHN0YW51bWJlcnMxLCBzdGFudW1iZXJzMiwgc3RhbnVtYmVyczMsIHN0YW51 bWJlcnM0LCBzdGFudW1iZXJzNSwKKyAgICAgICAgc3YxLCBzdjIsIHN2Mywgc3Y0LCBzdjUKK0ZS T00gc3RhdHNfZXhwb3J0X2ltcG9ydC5wZ19zdGF0aXN0aWNfY2FwdHVyZQorRVhDRVBUCitTRUxF Q1Qgc3RhYXR0bnVtLCBzdGFpbmhlcml0LCBzdGFudWxsZnJhYywgc3Rhd2lkdGgsIHN0YWRpc3Rp bmN0LAorICAgICAgICBzdGFraW5kMSwgc3Rha2luZDIsIHN0YWtpbmQzLCBzdGFraW5kNCwgc3Rh a2luZDUsCisgICAgICAgIHN0YW9wMSwgc3Rhb3AyLCBzdGFvcDMsIHN0YW9wNCwgc3Rhb3A1LCBz dGFjb2xsMSwgc3RhY29sbDIsIHN0YWNvbGwzLCBzdGFjb2xsNCwgc3RhY29sbDUsCisgICAgICAg IHN0YW51bWJlcnMxLCBzdGFudW1iZXJzMiwgc3RhbnVtYmVyczMsIHN0YW51bWJlcnM0LCBzdGFu dW1iZXJzNSwKKyAgICAgICAgc3RhdmFsdWVzMTo6dGV4dCBBUyBzdjEsIHN0YXZhbHVlczI6OnRl eHQgQVMgc3YyLCBzdGF2YWx1ZXMzOjp0ZXh0IEFTIHN2MywKKyAgICAgICAgc3RhdmFsdWVzNDo6 dGV4dCBBUyBzdjQsIHN0YXZhbHVlczU6OnRleHQgQVMgc3Y1CitGUk9NIHBnX3N0YXRpc3RpYwor V0hFUkUgc3RhcmVsaWQgSU4gKCdzdGF0c19leHBvcnRfaW1wb3J0LnRlc3QnOjpyZWdjbGFzcywK KyAgICAgICAgICAgICAgICAgICAgJ3N0YXRzX2V4cG9ydF9pbXBvcnQuaXNfb2RkJzo6cmVnY2xh c3MpOworCistLSBUaGlzIHNob3VsZCByZXR1cm4gMCByb3dzCitTRUxFQ1Qgc3RhYXR0bnVtLCBz dGFpbmhlcml0LCBzdGFudWxsZnJhYywgc3Rhd2lkdGgsIHN0YWRpc3RpbmN0LAorICAgICAgICBz dGFraW5kMSwgc3Rha2luZDIsIHN0YWtpbmQzLCBzdGFraW5kNCwgc3Rha2luZDUsCisgICAgICAg IHN0YW9wMSwgc3Rhb3AyLCBzdGFvcDMsIHN0YW9wNCwgc3Rhb3A1LCBzdGFjb2xsMSwgc3RhY29s bDIsIHN0YWNvbGwzLCBzdGFjb2xsNCwgc3RhY29sbDUsCisgICAgICAgIHN0YW51bWJlcnMxLCBz dGFudW1iZXJzMiwgc3RhbnVtYmVyczMsIHN0YW51bWJlcnM0LCBzdGFudW1iZXJzNSwKKyAgICAg ICAgc3RhdmFsdWVzMTo6dGV4dCBBUyBzdjEsIHN0YXZhbHVlczI6OnRleHQgQVMgc3YyLCBzdGF2 YWx1ZXMzOjp0ZXh0IEFTIHN2MywKKyAgICAgICAgc3RhdmFsdWVzNDo6dGV4dCBBUyBzdjQsIHN0 YXZhbHVlczU6OnRleHQgQVMgc3Y1CitGUk9NIHBnX3N0YXRpc3RpYworV0hFUkUgc3RhcmVsaWQg SU4gKCdzdGF0c19leHBvcnRfaW1wb3J0LnRlc3QnOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAg ICAgICAgJ3N0YXRzX2V4cG9ydF9pbXBvcnQuaXNfb2RkJzo6cmVnY2xhc3MpCitFWENFUFQKK1NF TEVDVCBzdGFhdHRudW0sIHN0YWluaGVyaXQsIHN0YW51bGxmcmFjLCBzdGF3aWR0aCwgc3RhZGlz dGluY3QsCisgICAgICAgIHN0YWtpbmQxLCBzdGFraW5kMiwgc3Rha2luZDMsIHN0YWtpbmQ0LCBz dGFraW5kNSwKKyAgICAgICAgc3Rhb3AxLCBzdGFvcDIsIHN0YW9wMywgc3Rhb3A0LCBzdGFvcDUs IHN0YWNvbGwxLCBzdGFjb2xsMiwgc3RhY29sbDMsIHN0YWNvbGw0LCBzdGFjb2xsNSwKKyAgICAg ICAgc3RhbnVtYmVyczEsIHN0YW51bWJlcnMyLCBzdGFudW1iZXJzMywgc3RhbnVtYmVyczQsIHN0 YW51bWJlcnM1LAorICAgICAgICBzdjEsIHN2Miwgc3YzLCBzdjQsIHN2NQorRlJPTSBzdGF0c19l eHBvcnRfaW1wb3J0LnBnX3N0YXRpc3RpY19jYXB0dXJlOworCitTRUxFQ1QgcmVsbmFtZSwgcmVs dHVwbGVzCitGUk9NIHBnX2NsYXNzCitXSEVSRSBvaWQgSU4gKCdzdGF0c19leHBvcnRfaW1wb3J0 LnRlc3QnOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAgJ3N0YXRzX2V4cG9ydF9pbXBvcnQuaXNf b2RkJzo6cmVnY2xhc3MpCitPUkRFUiBCWSByZWxuYW1lOwpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9z Z21sL2Z1bmMuc2dtbCBiL2RvYy9zcmMvc2dtbC9mdW5jLnNnbWwKaW5kZXggNjc4OGJhOGVmNC4u ZDE2OTgzZGZmMyAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbAorKysgYi9kb2Mv c3JjL3NnbWwvZnVuYy5zZ21sCkBAIC0yODY4OSw2ICsyODY4OSw2MiBAQCBwb3N0Z3Jlcz0jIFNF TEVDVCAnMC8wJzo6cGdfbHNuICsgcGQuc2VnbWVudF9udW1iZXIgKiBwcy5zZXR0aW5nOjppbnQg KyA6b2Zmc2V0CiAgICAgaW4gaWRlbnRpZnlpbmcgdGhlIHNwZWNpZmljIGRpc2sgZmlsZXMgYXNz b2NpYXRlZCB3aXRoIGRhdGFiYXNlIG9iamVjdHMuCiAgICA8L3BhcmE+CiAKKyAgIDx0YWJsZSBp ZD0iZnVuY3Rpb25zLWFkbWluLXN0YXRzaW1wb3J0Ij4KKyAgICA8dGl0bGU+RGF0YWJhc2UgT2Jq ZWN0IFN0YXRpc3RpY3MgSW1wb3J0IEZ1bmN0aW9uczwvdGl0bGU+CisgICAgPHRncm91cCBjb2xz PSIxIj4KKyAgICAgPHRoZWFkPgorICAgICAgPHJvdz4KKyAgICAgICA8ZW50cnkgcm9sZT0iZnVu Y190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iZnVuY19zaWduYXR1cmUiPgorICAgICAgICBGdW5j dGlvbgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgRGVzY3JpcHRpb24K KyAgICAgICA8L3BhcmE+PC9lbnRyeT4KKyAgICAgIDwvcm93PgorICAgICA8L3RoZWFkPgorCisg ICAgIDx0Ym9keT4KKyAgICAgIDxyb3c+CisgICAgICAgPGVudHJ5IHJvbGU9ImZ1bmNfdGFibGVf ZW50cnkiPjxwYXJhIHJvbGU9ImZ1bmNfc2lnbmF0dXJlIj4KKyAgICAgICAgPGluZGV4dGVybT4K KyAgICAgICAgIDxwcmltYXJ5PnBnX2ltcG9ydF9yZWxfc3RhdHM8L3ByaW1hcnk+CisgICAgICAg IDwvaW5kZXh0ZXJtPgorICAgICAgICA8ZnVuY3Rpb24+cGdfaW1wb3J0X3JlbF9zdGF0czwvZnVu Y3Rpb24+ICggPHBhcmFtZXRlcj5yZWxhdGlvbjwvcGFyYW1ldGVyPiA8dHlwZT5yZWdjbGFzczwv dHlwZT4sIDxwYXJhbWV0ZXI+cmVsYXRpb25fc3RhdHM8L3BhcmFtZXRlcj4gPHR5cGU+anNvbmI8 L3R5cGU+LCA8cGFyYW1ldGVyPnZhbGlkYXRlPC9wYXJhbWV0ZXI+IDx0eXBlPmJvb2w8L3R5cGU+ LCA8cGFyYW1ldGVyPnJlcXVpcmVfbWF0Y2hfb2lkczwvcGFyYW1ldGVyPiA8dHlwZT5ib29sPC90 eXBlPiApCisgICAgICAgIDxyZXR1cm52YWx1ZT5ib29sZWFuPC9yZXR1cm52YWx1ZT4KKyAgICAg ICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIE1vZGlmaWVzIHRoZSA8c3RydWN0bmFt ZT5wZ19jbGFzczwvc3RydWN0bmFtZT4gcm93IHdpdGggdGhlCisgICAgICAgIDxzdHJ1Y3RmaWVs ZD5vaWQ8L3N0cnVjdGZpZWxkPiBtYXRjaGluZyA8cGFyYW1ldGVyPnJlbGF0aW9uPC9wYXJhbWV0 ZXI+CisgICAgICAgIHRvIHNldCB0aGUgPHN0cnVjdGZpZWxkPnJlbHR1cGxlczwvc3RydWN0Zmll bGQ+IGFuZAorICAgICAgICA8c3RydWN0ZmllbGQ+cmVscGFnZXM8L3N0cnVjdGZpZWxkPiBmaWVs ZHMuIFRoaXMgaXMgZG9uZSBub250cmFuc2FjdGlvbmFsbHkuCisgICAgICAgIFRoZSA8c3RydWN0 bmFtZT5wZ19zdGF0aXN0aWM8L3N0cnVjdG5hbWU+IHJvd3MgZm9yIHRoZQorICAgICAgICA8c3Ry dWN0ZmllbGQ+c3RhdHJlbGlkPC9zdHJ1Y3RmaWVsZD4gbWF0Y2hpbmcgPHBhcmFtZXRlcj5yZWxh dGlvbjwvcGFyYW1ldGVyPgorICAgICAgICBhcmUgcmVwbGFjZWQgd2l0aCB0aGUgdmFsdWVzIGZv dW5kIGluIDxwYXJhbWV0ZXI+cmVsYXRpb25fc3RhdHM8L3BhcmFtZXRlcj4sCisgICAgICAgIGFu ZCB0aGlzIGlzIGRvbmUgdHJhbnNhY3Rpb25hbGx5LiBUaGUgcHVycG9zZSBvZiB0aGlzIGZ1bmN0 aW9uIGlzIHRvIGFwcGx5CisgICAgICAgIHN0YXRpc3RpY3MgdmFsdWVzIGluIGFuIHVwZ3JhZGUg c2l0dWF0aW9uIHRoYXQgYXJlICJnb29kIGVub3VnaCIgZm9yIHN5c3RlbQorICAgICAgICBvcGVy YXRpb24gdW50aWwgdGhleSBhcmUgcmVwbGFjZWQgYnkgdGhlIG5leHQgYXV0by1hbmFseXplLiBU aGlzIGZ1bmN0aW9uCisgICAgICAgIGNvdWxkIGJlIHVzZWQgYnkgPGNvbW1hbmQ+cGdfdXBncmFk ZTwvY29tbWFuZD4gYW5kCisgICAgICAgIDxjb21tYW5kPnBnX3Jlc3RvcmU8L2NvbW1hbmQ+IHRv IGNvbnZleSB0aGUgc3RhdGlzdGljcyBmcm9tIHRoZSBvbGQgc3lzdGVtCisgICAgICAgIHZlcnNp b24gaW50byB0aGUgbmV3IG9uZS4KKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAg ICAgIElmIDxwYXJhbWV0ZXI+dmFsaWRhdGU8L3BhcmFtZXRlcj4gaXMgc2V0IHRvIDxsaXRlcmFs PnRydWU8L2xpdGVyYWw+LAorICAgICAgICB0aGVuIHRoZSBmdW5jdGlvbiB3aWxsIHBlcmZvcm0g YSBzZXJpZXMgb2YgZGF0YSBjb25zaXN0ZW5jeSBjaGVja3Mgb24KKyAgICAgICAgdGhlIGRhdGEg aW4gPHBhcmFtZXRlcj5yZWxhdGlvbl9zdGF0czwvcGFyYW1ldGVyPiBiZWZvcmUgYXR0ZW1wdGlu ZyB0bworICAgICAgICBpbXBvcnQgc3RhdGlzdGljcy4gQW55IGluY29uc2lzdGVuY2llcyBmb3Vu ZCB3aWxsIHJhaXNlIGFuIGVycm9yLgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAg ICAgICAgSWYgPHBhcmFtZXRlcj5yZXF1aXJlX21hdGNoX29pZHM8L3BhcmFtZXRlcj4gaXMgc2V0 IHRvIDxsaXRlcmFsPnRydWU8L2xpdGVyYWw+LAorICAgICAgICB0aGVuIHRoZSBpbXBvcnQgd2ls bCBmYWlsIGlmIHRoZSBpbXBvcnRlZCBvaWRzIGZvciA8c3RydWN0bmFtZT5wdF90eXBlPC9zdHJ1 Y3RuYW1lPiwKKyAgICAgICAgPHN0cnVjdG5hbWU+cGdfY29sbGF0aW9uPC9zdHJ1Y3RuYW1lPiwg YW5kIDxzdHJ1Y3RuYW1lPnBnX29wZXJhdG9yPC9zdHJ1Y3RuYW1lPiBkbworICAgICAgICBub3Qg bWF0Y2ggdGhlIHZhbHVlcyBzcGVjaWZpZWQgaW4gPHBhcmFtZXRlcj5yZWxhdGlvbl9qc29uPC9w YXJhbWV0ZXI+LCBhcyB3b3VsZCBiZSBleHBlY3RlZAorICAgICAgICBpbiBhIGJpbmFyeSB1cGdy YWRlLiBUaGVzZSBhc3N1bXB0aW9ucyB3b3VsZCBub3QgYmUgdHJ1ZSB3aGVuIHJlc3RvcmluZyBm cm9tIGEgZHVtcC4KKyAgICAgICA8L3BhcmE+PC9lbnRyeT4KKyAgICAgIDwvcm93PgorICAgICA8 L3Rib2R5PgorICAgIDwvdGdyb3VwPgorICAgPC90YWJsZT4KKwogICAgPHRhYmxlIGlkPSJmdW5j dGlvbnMtYWRtaW4tZGJsb2NhdGlvbiI+CiAgICAgPHRpdGxlPkRhdGFiYXNlIE9iamVjdCBMb2Nh dGlvbiBGdW5jdGlvbnM8L3RpdGxlPgogICAgIDx0Z3JvdXAgY29scz0iMSI+Ci0tIAoyLjQzLjAK Cg== --00000000000049aaa10610620585 Content-Type: text/x-patch; charset="US-ASCII"; name="v4-0002-This-is-the-extended-statistics-equivalent-of-pg_.patch" Content-Disposition: attachment; filename="v4-0002-This-is-the-extended-statistics-equivalent-of-pg_.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ls4e3p181 RnJvbSBhOWRlNDE1NTg2Y2IxZGQ3M2MwNmMxNzMxMDBiZTlhYTZlYTQ3Njk1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBDb3JleSBIdWlua2VyIDxjb3JleS5odWlua2VyQGdtYWlsLmNv bT4KRGF0ZTogRnJpLCAyIEZlYiAyMDI0IDAyOjU5OjUwIC0wNTAwClN1YmplY3Q6IFtQQVRDSCB2 NCAyLzNdIFRoaXMgaXMgdGhlIGV4dGVuZGVkIHN0YXRpc3RpY3MgZXF1aXZhbGVudCBvZgogcGdf aW1wb3J0X3JlbF9zdGF0cygpLgoKVGhlIG1vc3QgbGlrZWx5IGFwcGxpY2F0aW9uIG9mIHRoaXMg ZnVuY3Rpb24gaXMgdG8gcXVpY2tseSBhcHBseSBzdGF0cwp0byBhIG5ld2x5IHVwZ3JhZGVkIGRh dGFiYXNlIGZhc3RlciB0aGFuIGNvdWxkIGJlIGFjY29tcGxpc2hlZCBieQp2YWN1dW1kYiAtLWFu YWx5emUtaW4tc3RhZ2VzLgoKVGhlIGV4cG9ydGVkIHZhbHVlcyBzdG9yZWQgaW4gdGhlIHBhcmFt ZXRlciBleHRlbmRlZF9zdGF0cyBhcmUKY29tcGFyZWQgYWdhaW5zdCB0aGUgZXhpc3Rpbmcgc3Ry dWN0dXJlIGluIHBnX3N0YXRpc3RpY19leHQgYW5kIGFyZQp0cmFuc2Zvcm1lZCBpbnRvIHBnX3N0 YXRpc3RpY19leHRfZGF0YSByb3dzLCB0cmFuc2FjdGlvbmFsbHkgcmVwbGFjaW5nCmFueSBwcmUt ZXhpc3Rpbmcgcm93cyBmb3IgdGhhdCBvYmplY3QuCgpUaGUgc3RhdGlzdGljcyBhcHBsaWVkIGFy ZSBub3QgbG9ja2VkIGluIGFueSB3YXksIGFuZCB3aWxsIGJlCm92ZXJ3cml0dGVuIGJ5IHRoZSBu ZXh0IGFuYWx5emUsIGVpdGhlciBleHBsaWNpdCBvciB2aWEgYXV0b3ZhY3V1bS4KClRoaXMgZnVu Y3Rpb24gYWxzbyBhbGxvd3MgZm9yIHR3ZWFraW5nIG9mIHRhYmxlIHN0YXRpc3RpY3MgaW4tcGxh Y2UsCmFsbG93aW5nIHRoZSB1c2VyIHRvIHNpbXVsYXRlIGNvcnJlbGF0aW9ucywgc2tldyBoaXN0 b2dyYW1zLCBldGMsIHRvIHNlZQp3aGF0IHRob3NlIGNoYW5nZXMgd2lsbCBldm9rZSBmcm9tIHRo ZSBxdWVyeSBwbGFubmVyLgotLS0KIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgICAg ICAgICAgICAgICB8ICAgNSArCiAuLi4vc3RhdGlzdGljcy9leHRlbmRlZF9zdGF0c19pbnRlcm5h bC5oICAgICAgfCAgIDcgKwogc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9kZXBlbmRlbmNpZXMuYyAg ICAgICAgIHwgMTYxICsrKysKIHNyYy9iYWNrZW5kL3N0YXRpc3RpY3MvZXh0ZW5kZWRfc3RhdHMu YyAgICAgICB8IDg4NCArKysrKysrKysrKysrKysrLS0KIHNyYy9iYWNrZW5kL3N0YXRpc3RpY3Mv bWN2LmMgICAgICAgICAgICAgICAgICB8IDE5MiArKysrCiBzcmMvYmFja2VuZC9zdGF0aXN0aWNz L212ZGlzdGluY3QuYyAgICAgICAgICAgfCAxNjAgKysrKwogLi4uL3JlZ3Jlc3MvZXhwZWN0ZWQv c3RhdHNfZXhwb3J0X2ltcG9ydC5vdXQgIHwgMjY1ICsrKysrLQogc3JjL3Rlc3QvcmVncmVzcy9z cWwvc3RhdHNfZXhwb3J0X2ltcG9ydC5zcWwgIHwgMjQ1ICsrKystCiBkb2Mvc3JjL3NnbWwvZnVu Yy5zZ21sICAgICAgICAgICAgICAgICAgICAgICAgfCAgMjggKy0KIDkgZmlsZXMgY2hhbmdlZCwg MTg3NCBpbnNlcnRpb25zKCspLCA3MyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRh dAppbmRleCBlYzhjZTdjM2MwLi4yZDEyYmI5YjA4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9j YXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQK QEAgLTYxMjUsNiArNjEyNSwxMSBAQAogeyBvaWQgPT4gJzkxNjEnLCBkZXNjciA9PiAnYWRqdXN0 IHRpbWUgdG8gbG9jYWwgdGltZSB6b25lJywKICAgcHJvbmFtZSA9PiAndGltZXpvbmUnLCBwcm92 b2xhdGlsZSA9PiAncycsIHByb3JldHR5cGUgPT4gJ3RpbWV0eicsCiAgIHByb2FyZ3R5cGVzID0+ ICd0aW1ldHonLCBwcm9zcmMgPT4gJ3RpbWV0el9hdF9sb2NhbCcgfSwKK3sgb2lkID0+ICc5MTYy JywKKyAgZGVzY3IgPT4gJ3N0YXRpc3RpY3M6IGltcG9ydCB0byBleHRlbmRlZCBzdGF0cyBvYmpl Y3QnLAorICBwcm9uYW1lID0+ICdwZ19pbXBvcnRfZXh0X3N0YXRzJywgcHJvdm9sYXRpbGUgPT4g J3YnLCBwcm9pc3N0cmljdCA9PiAndCcsCisgIHByb3BhcmFsbGVsID0+ICd1JywgcHJvcmV0dHlw ZSA9PiAnYm9vbCcsIHByb2FyZ3R5cGVzID0+ICdvaWQganNvbmIgYm9vbCBib29sJywKKyAgcHJv c3JjID0+ICdwZ19pbXBvcnRfZXh0X3N0YXRzJyB9LAogeyBvaWQgPT4gJzIwMzknLCBkZXNjciA9 PiAnaGFzaCcsCiAgIHByb25hbWUgPT4gJ3RpbWVzdGFtcF9oYXNoJywgcHJvcmV0dHlwZSA9PiAn aW50NCcsIHByb2FyZ3R5cGVzID0+ICd0aW1lc3RhbXAnLAogICBwcm9zcmMgPT4gJ3RpbWVzdGFt cF9oYXNoJyB9LApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RhdGlzdGljcy9leHRlbmRlZF9z dGF0c19pbnRlcm5hbC5oIGIvc3JjL2luY2x1ZGUvc3RhdGlzdGljcy9leHRlbmRlZF9zdGF0c19p bnRlcm5hbC5oCmluZGV4IDhlZWQ5YjMzOGQuLmUzMjVhNzZlNjMgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL3N0YXRpc3RpY3MvZXh0ZW5kZWRfc3RhdHNfaW50ZXJuYWwuaAorKysgYi9zcmMvaW5j bHVkZS9zdGF0aXN0aWNzL2V4dGVuZGVkX3N0YXRzX2ludGVybmFsLmgKQEAgLTcwLDE1ICs3MCwy MiBAQCB0eXBlZGVmIHN0cnVjdCBTdGF0c0J1aWxkRGF0YQogCiAKIGV4dGVybiBNVk5EaXN0aW5j dCAqc3RhdGV4dF9uZGlzdGluY3RfYnVpbGQoZG91YmxlIHRvdGFscm93cywgU3RhdHNCdWlsZERh dGEgKmRhdGEpOworZXh0ZXJuIE1WTkRpc3RpbmN0ICpzdGF0ZXh0X25kaXN0aW5jdF9pbXBvcnQo T2lkIHJlbGlkLCBEYXR1bSBuZGlzdGluY3QsCisJCQkJCQlib29sIG5kaXN0aXN0aW5jdF9udWxs LCBEYXR1bSBhdHRyaWJ1dGVzLAorCQkJCQkJYm9vbCBhdHRyaWJ1dGVzX251bGwpOwogZXh0ZXJu IGJ5dGVhICpzdGF0ZXh0X25kaXN0aW5jdF9zZXJpYWxpemUoTVZORGlzdGluY3QgKm5kaXN0aW5j dCk7CiBleHRlcm4gTVZORGlzdGluY3QgKnN0YXRleHRfbmRpc3RpbmN0X2Rlc2VyaWFsaXplKGJ5 dGVhICpkYXRhKTsKIAogZXh0ZXJuIE1WRGVwZW5kZW5jaWVzICpzdGF0ZXh0X2RlcGVuZGVuY2ll c19idWlsZChTdGF0c0J1aWxkRGF0YSAqZGF0YSk7CitleHRlcm4gTVZEZXBlbmRlbmNpZXMgKnN0 YXRleHRfZGVwZW5kZW5jaWVzX2ltcG9ydChPaWQgcmVsaWQsCisJCQkJCQkJRGF0dW0gZGVwZW5k ZW5jaWVzLCBib29sIGRlcGVuZGVuY2llc19udWxsLAorCQkJCQkJCURhdHVtIGF0dHJpYnV0ZXMs IGJvb2wgYXR0cmlidXRlc19udWxsKTsKIGV4dGVybiBieXRlYSAqc3RhdGV4dF9kZXBlbmRlbmNp ZXNfc2VyaWFsaXplKE1WRGVwZW5kZW5jaWVzICpkZXBlbmRlbmNpZXMpOwogZXh0ZXJuIE1WRGVw ZW5kZW5jaWVzICpzdGF0ZXh0X2RlcGVuZGVuY2llc19kZXNlcmlhbGl6ZShieXRlYSAqZGF0YSk7 CiAKIGV4dGVybiBNQ1ZMaXN0ICpzdGF0ZXh0X21jdl9idWlsZChTdGF0c0J1aWxkRGF0YSAqZGF0 YSwKIAkJCQkJCQkJICBkb3VibGUgdG90YWxyb3dzLCBpbnQgc3RhdHRhcmdldCk7CitleHRlcm4g TUNWTGlzdCAqc3RhdGV4dF9tY3ZfaW1wb3J0KERhdHVtIG1jdiwgYm9vbCBtY3ZfbnVsbCwgVmFj QXR0clN0YXRzICoqc3RhdHMpOwogZXh0ZXJuIGJ5dGVhICpzdGF0ZXh0X21jdl9zZXJpYWxpemUo TUNWTGlzdCAqbWN2bGlzdCwgVmFjQXR0clN0YXRzICoqc3RhdHMpOwogZXh0ZXJuIE1DVkxpc3Qg KnN0YXRleHRfbWN2X2Rlc2VyaWFsaXplKGJ5dGVhICpkYXRhKTsKIApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvc3RhdGlzdGljcy9kZXBlbmRlbmNpZXMuYyBiL3NyYy9iYWNrZW5kL3N0YXRpc3Rp Y3MvZGVwZW5kZW5jaWVzLmMKaW5kZXggNDc1MmI5OWVkNS4uZTQ4MmVjYTU1NyAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9kZXBlbmRlbmNpZXMuYworKysgYi9zcmMvYmFja2Vu ZC9zdGF0aXN0aWNzL2RlcGVuZGVuY2llcy5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSAi Y2F0YWxvZy9wZ19vcGVyYXRvci5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfc3RhdGlzdGljX2V4 dC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfc3RhdGlzdGljX2V4dF9kYXRhLmgiCisjaW5jbHVk ZSAiZXhlY3V0b3Ivc3BpLmgiCiAjaW5jbHVkZSAibGliL3N0cmluZ2luZm8uaCIKICNpbmNsdWRl ICJub2Rlcy9ub2RlRnVuY3MuaCIKICNpbmNsdWRlICJub2Rlcy9ub2Rlcy5oIgpAQCAtMjcsNiAr MjgsNyBAQAogI2luY2x1ZGUgInBhcnNlci9wYXJzZXRyZWUuaCIKICNpbmNsdWRlICJzdGF0aXN0 aWNzL2V4dGVuZGVkX3N0YXRzX2ludGVybmFsLmgiCiAjaW5jbHVkZSAic3RhdGlzdGljcy9zdGF0 aXN0aWNzLmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9i eXRlYS5oIgogI2luY2x1ZGUgInV0aWxzL2ZtZ3JvaWRzLmgiCiAjaW5jbHVkZSAidXRpbHMvZm1n cnByb3Rvcy5oIgpAQCAtMTgyOSwzICsxODMxLDE2MiBAQCBkZXBlbmRlbmNpZXNfY2xhdXNlbGlz dF9zZWxlY3Rpdml0eShQbGFubmVySW5mbyAqcm9vdCwKIAogCXJldHVybiBzMTsKIH0KKworLyoK KyAqIHN0YXRleHRfZGVwZW5kZW5jaWVzX2ltcG9ydAorICoKKyAqIFRoZSBkZXBlbmRlbmNpZXMg c2VyaWFsaXphdGlvbiBpcyBhIHN0cmluZyB0aGF0IGxvb2tzIGxpa2UKKyAqICAgICAgIHsiMiA9 PiAzIjogMC4yNTgyNDEsICIxID0+IDIiOiAwLjAsIC4uLn0KKyAqCisgKiAgIFRoZSBpbnRlZ2Vy cyByZXByZXNlbnQgYXR0bnVtcyBpbiB0aGUgZXhwb3J0ZWQgdGFibGUsIGFuZCB0aGVzZQorICog ICBtYXkgbm90IGxpbmUgdXAgd2l0aCB0aGUgYXR0bnVtcyBpbiB0aGUgZGVzdGluYXRpb24gdGFi bGUgc28gd2UKKyAqICAgbWF0Y2ggdGhlbSBieSBuYW1lLgorICoKKyAqICAgVGhpcyBzdHJ1Y3R1 cmUgY2FuIGJlIGNvZXJjZWQgaW50byBKU09OLCBidXQgd2UgbXVzdCB1c2UgSlNPTgorICogICBv dmVyIEpTT05CIGJlY2F1c2UgSlNPTiBwcmVzZXJ2ZXMga2V5IG9yZGVyIGFuZCBKU09OQiBkb2Vz IG5vdC4KKyAqCisgKgorICovCitNVkRlcGVuZGVuY2llcyAqCitzdGF0ZXh0X2RlcGVuZGVuY2ll c19pbXBvcnQoT2lkIHJlbGlkLAorCQkJCQkJCURhdHVtIGRlcGVuZGVuY2llcywgYm9vbCBkZXBl bmRlbmNpZXNfbnVsbCwKKwkJCQkJCQlEYXR1bSBhdHRyaWJ1dGVzLCBib29sIGF0dHJpYnV0ZXNf bnVsbCkKK3sKKwlNVkRlcGVuZGVuY2llcyAqcmVzdWx0ID0gTlVMTDsKKworI2RlZmluZSBERVBT X05BUkdTIDMKKworCU9pZAkJCWFyZ3R5cGVzW0RFUFNfTkFSR1NdID0geyBPSURPSUQsIFRFWFRP SUQsIEpTT05CT0lEIH07CisJRGF0dW0JCWFyZ3NbREVQU19OQVJHU10gPSB7IHJlbGlkLCBkZXBl bmRlbmNpZXMsIGF0dHJpYnV0ZXMgfTsKKwljaGFyCQlhcmdudWxsc1tERVBTX05BUkdTXSA9IHsg JyAnLAorCQkJCQlkZXBlbmRlbmNpZXNfbnVsbCA/ICduJyA6ICcgJywKKwkJCQkJYXR0cmlidXRl c19udWxsID8gJ24nIDogJyAnIH07CisKKwljb25zdCBjaGFyICpzcWwgPQorCQkiU0VMRUNUICIK KwkJIiAgICBkZXAuZGVwb3JkLCAiCisJCSIgICAgZGEuZGVwYXR0cm9yZCwgIgorCQkiICAgIGRh LmV4cF9hdHRudW0sICIKKwkJIiAgICBlYS5hdHRuYW1lIEFTIGV4cF9hdHRuYW1lLCAiCisJCSIg ICAgQ0FTRSAiCisJCSIgICAgICAgIFdIRU4gZGEuZXhwX2F0dG51bSA8IDAgVEhFTiBkYS5leHBf YXR0bnVtICIKKwkJIiAgICAgICAgRUxTRSBwZ2EuYXR0bnVtICIKKwkJIiAgICBFTkQgQVMgYXR0 bnVtLCAiCisJCSIgICAgZGVwLmRlZ3JlZTo6ZmxvYXQ4IEFTIGRlZ3JlZSwgIgorCQkiICAgIENP VU5UKCopIE9WRVIgKFBBUlRJVElPTiBCWSBkZXAuZGVwb3JkKSBBUyBudW1fYXR0cnMsICIKKwkJ IiAgICBNQVgoZGVwLmRlcG9yZCkgT1ZFUiAoKSBBUyBudW1fZGVwcyAiCisJCSJGUk9NIGpzb25f ZWFjaF90ZXh0KCQyOjpqc29uKSAiCisJCSIgICAgIFdJVEggT1JESU5BTElUWSBBUyBkZXAoYXR0 cnMsIGRlZ3JlZSwgZGVwb3JkKSAiCisJCSJDUk9TUyBKT0lOIExBVEVSQUwgdW5uZXN0KCBzdHJp bmdfdG9fYXJyYXkoICIKKwkJIiAgICAgICAgIHJlcGxhY2UoZGVwLmF0dHJzLCAnID0+ICcsICcs ICcpLCAnLCAnKTo6aW50MltdKSAiCisJCSIgICAgIFdJVEggT1JESU5BTElUWSBBUyBkYShleHBf YXR0bnVtLCBkZXBhdHRyb3JkKSAiCisJCSJMRUZUIEpPSU4gTEFURVJBTCBqc29uYl90b19yZWNv cmRzZXQoJDMpIEFTIGVhKGF0dG51bSBpbnQyLCBhdHRuYW1lIHRleHQpICIKKwkJIiAgICAgT04g ZWEuYXR0bnVtID0gZGEuZXhwX2F0dG51bSBBTkQgZGEuZXhwX2F0dG51bSA+IDAgIgorCQkiTEVG VCBKT0lOIHBnX2F0dHJpYnV0ZSBBUyBwZ2EgIgorCQkiICAgICBPTiBwZ2EuYXR0cmVsaWQgPSAk MSBBTkQgcGdhLmF0dG5hbWUgPSBlYS5hdHRuYW1lICIKKwkJIk9SREVSIEJZIGRlcC5kZXBvcmQs IGRhLmRlcGF0dHJvcmQgIjsKKworCWVudW0geworCQlERVBTX0RFUE9SRCA9IDAsCisJCURFUFNf REVQQVRUUk9SRCwKKwkJREVQU19FWFBfQVRUTlVNLAorCQlERVBTX0VYUF9BVFROQU1FLAorCQlE RVBTX0FUVE5VTSwKKwkJREVQU19ERUdSRUUsCisJCURFUFNfTlVNX0FUVFJTLAorCQlERVBTX05V TV9ERVBTLAorCQlOVU1fREVQU19DT0xTCisJfTsKKworCVNQSVR1cGxlVGFibGUgICp0dXB0YWJs ZTsKKwlpbnQJCQkJcmV0OworCWludAkJCQluZGVwczsKKwlpbnQJCQkJaiA9IDA7CisKKwlyZXQg PSBTUElfZXhlY3V0ZV93aXRoX2FyZ3Moc3FsLCBERVBTX05BUkdTLCBhcmd0eXBlcywgYXJncywg YXJnbnVsbHMsIHRydWUsIDApOworCisJaWYgKHJldCAhPSBTUElfT0tfU0VMRUNUKQorCQllcmVw b3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUp LAorCQkJCSBlcnJtc2coInN0YXRpc3RpYyBleHBvcnQgSlNPTiBpcyBub3QgaW4gcHJvcGVyIGZv cm1hdCIpKSk7CisKKwl0dXB0YWJsZSA9IFNQSV90dXB0YWJsZTsKKwlpZiAodHVwdGFibGUtPm51 bXZhbHMgPT0gMCkKKwkJbmRlcHMgPSAwOworCWVsc2UKKwl7CisJCWJvb2wgaXNudWxsOworCQlE YXR1bSBkID0gU1BJX2dldGJpbnZhbCh0dXB0YWJsZS0+dmFsc1swXSwgdHVwdGFibGUtPnR1cGRl c2MsCisJCQkJCQkJCURFUFNfTlVNX0RFUFMrMSwgJmlzbnVsbCk7CisJCW5kZXBzID0gRGF0dW1H ZXRJbnQzMihkKTsKKworCQlpZiAoaXNudWxsKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVy cmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCSBlcnJtc2coIklu ZGV0ZXJtaW5hdGUgbnVtYmVyIG9mIGRlcGVuZGVuY2llcyIpKSk7CisJfQorCisJaWYgKG5kZXBz ID09IDApCisJCXJlc3VsdCA9IChNVkRlcGVuZGVuY2llcyAqKSBwYWxsb2MwKHNpemVvZihNVkRl cGVuZGVuY2llcykpOworCWVsc2UKKwkJcmVzdWx0ID0gKE1WRGVwZW5kZW5jaWVzICopIHBhbGxv YzAob2Zmc2V0b2YoTVZEZXBlbmRlbmNpZXMsIGRlcHMpCisJCQkJCQkJCQkJCQkgICArIChuZGVw cyAqIHNpemVvZihNVkRlcGVuZGVuY3kgKikpKTsKKworCXJlc3VsdC0+bWFnaWMgPSBTVEFUU19E RVBTX01BR0lDOworCXJlc3VsdC0+dHlwZSA9IFNUQVRTX0RFUFNfVFlQRV9CQVNJQzsKKwlyZXN1 bHQtPm5kZXBzID0gbmRlcHM7CisKKwlmb3IgKGogPSAwOyBqIDwgdHVwdGFibGUtPm51bXZhbHM7 IGorKykKKwl7CisJCURhdHVtCQkJZGF0dW1zW05VTV9ERVBTX0NPTFNdOworCQlib29sCQkJbnVs bHNbTlVNX0RFUFNfQ09MU107CisJCWludAkJCQluYXR0czsKKwkJaW50CQkJCWQ7CisJCWludAkJ CQlhOworCisJCWhlYXBfZGVmb3JtX3R1cGxlKHR1cHRhYmxlLT52YWxzW2pdLCB0dXB0YWJsZS0+ dHVwZGVzYywgZGF0dW1zLCBudWxscyk7CisKKwkJQXNzZXJ0KCFudWxsc1tERVBTX0RFUE9SRF0p OworCQlkID0gRGF0dW1HZXRJbnQzMihkYXR1bXNbREVQU19ERVBPUkRdKSAtIDE7CisJCUFzc2Vy dCghbnVsbHNbREVQU19ERVBBVFRST1JEXSk7CisJCWEgPSBEYXR1bUdldEludDMyKGRhdHVtc1tE RVBTX0RFUEFUVFJPUkRdKSAtIDE7CisKKwkJaWYgKGEgPT0gMCkKKwkJeworCQkJLyogTmV3IE1W RGVwZW5kbmVjeSAqLworCQkJQXNzZXJ0KCFudWxsc1tERVBTX05VTV9BVFRSU10pOworCQkJbmF0 dHMgPSBEYXR1bUdldEludDMyKGRhdHVtc1tERVBTX05VTV9BVFRSU10pOworCisJCQlyZXN1bHQt PmRlcHNbZF0gPSBwYWxsb2MwKG9mZnNldG9mKE1WRGVwZW5kZW5jeSwgYXR0cmlidXRlcykKKwkJ CQkJCQkJCQkrIChuYXR0cyAqIHNpemVvZihBdHRyTnVtYmVyKSkpOworCisJCQlyZXN1bHQtPmRl cHNbZF0tPm5hdHRyaWJ1dGVzID0gbmF0dHM7CisJCQlBc3NlcnQoIW51bGxzW0RFUFNfREVHUkVF XSk7CisJCQlyZXN1bHQtPmRlcHNbZF0tPmRlZ3JlZSA9IERhdHVtR2V0RmxvYXQ4KGRhdHVtc1tE RVBTX0RFR1JFRV0pOworCQl9CisKKwkJaWYgKCFudWxsc1tERVBTX0FUVE5VTV0pCisJCQlyZXN1 bHQtPmRlcHNbZF0tPmF0dHJpYnV0ZXNbYV0gPSBEYXR1bUdldEludDE2KGRhdHVtc1tERVBTX0FU VE5VTV0pOworCQllbHNlIGlmIChudWxsc1tERVBTX0VYUF9BVFROVU1dKQorCQkJZXJlcG9ydChF UlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJ CQkJCSBlcnJtc2coIkRlcGVuZGVuY3kgZXhwb3J0ZWQgYXR0bnVtIGNhbm5vdCBiZSBudWxsIikp KTsKKwkJZWxzZSBpZiAobnVsbHNbREVQU19BVFROVU1dKQorCQl7CisJCQlBdHRyTnVtYmVyIGV4 cF9hdHRudW0gPSBEYXR1bUdldEludDE2KGRhdHVtc1tERVBTX0VYUF9BVFROVU1dKTsKKworCQkJ aWYgKG51bGxzW0RFUFNfRVhQX0FUVE5BTUVdKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQko ZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2co IkRlcGVuZGVuY3kgaGFzIG5vIGV4cG9ydGVkIG5hbWUgZm9yIGF0dG51bSAlZCIsCisJCQkJCQkJ CWV4cF9hdHRudW0pKSk7CisKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNP REVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkgZXJybXNnKCJEZXBlbmRlbmN5IHRy aWVkIHRvIG1hdGNoIGF0dG51bSAlZCBieSBuYW1lICglcykgYnV0IGZvdW5kIG5vIG1hdGNoIiwK KwkJCQkJCSBleHBfYXR0bnVtLCBUZXh0RGF0dW1HZXRDU3RyaW5nKGRhdHVtc1tERVBTX0VYUF9B VFROQU1FXSkpKSk7CisJCX0KKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvc3RhdGlzdGljcy9leHRlbmRlZF9zdGF0cy5jIGIvc3JjL2JhY2tlbmQvc3Rh dGlzdGljcy9leHRlbmRlZF9zdGF0cy5jCmluZGV4IGM1NDYxNTE0ZDguLjc2YWUxNTBjNWIgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0YXRpc3RpY3MvZXh0ZW5kZWRfc3RhdHMuYworKysgYi9z cmMvYmFja2VuZC9zdGF0aXN0aWNzL2V4dGVuZGVkX3N0YXRzLmMKQEAgLTE5LDEyICsxOSwxNCBA QAogI2luY2x1ZGUgImFjY2Vzcy9kZXRvYXN0LmgiCiAjaW5jbHVkZSAiYWNjZXNzL2dlbmFtLmgi CiAjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0YWlscy5oIgorI2luY2x1ZGUgImFjY2Vzcy9yZWxh dGlvbi5oIgogI2luY2x1ZGUgImFjY2Vzcy90YWJsZS5oIgogI2luY2x1ZGUgImNhdGFsb2cvaW5k ZXhpbmcuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2NvbGxhdGlvbi5oIgogI2luY2x1ZGUgImNh dGFsb2cvcGdfc3RhdGlzdGljX2V4dC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfc3RhdGlzdGlj X2V4dF9kYXRhLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY3V0b3IuaCIKKyNpbmNsdWRlICJl eGVjdXRvci9zcGkuaCIKICNpbmNsdWRlICJjb21tYW5kcy9kZWZyZW0uaCIKICNpbmNsdWRlICJj b21tYW5kcy9wcm9ncmVzcy5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgpAQCAtMzIsNiArMzQs NyBAQAogI2luY2x1ZGUgIm9wdGltaXplci9jbGF1c2VzLmgiCiAjaW5jbHVkZSAib3B0aW1pemVy L29wdGltaXplci5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZXRyZWUuaCIKKyNpbmNsdWRlICJw YXJzZXIvcGFyc2Vfb3Blci5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInBvc3Rt YXN0ZXIvYXV0b3ZhY3V1bS5oIgogI2luY2x1ZGUgInN0YXRpc3RpY3MvZXh0ZW5kZWRfc3RhdHNf aW50ZXJuYWwuaCIKQEAgLTQxOCw2ICs0MjEsODMgQEAgc3RhdGV4dF9pc19raW5kX2J1aWx0KEhl YXBUdXBsZSBodHVwLCBjaGFyIHR5cGUpCiAJcmV0dXJuICFoZWFwX2F0dGlzbnVsbChodHVwLCBh dHRudW0sIE5VTEwpOwogfQogCisvKgorICogQ3JlYXRlIGEgc2luZ2xlIFN0YXRFeHRFbnRyeSBm cm9tIGEgZmV0Y2hlZCBoZWFwIHR1cGxlCisgKi8KK3N0YXRpYyBTdGF0RXh0RW50cnkgKgorY3Jl YXRlX3N0YXRfZXh0X2VudHJ5KEhlYXBUdXBsZSBodHVwKQoreworCVN0YXRFeHRFbnRyeSAqZW50 cnk7CisJRGF0dW0JCWRhdHVtOworCWJvb2wJCWlzbnVsbDsKKwlpbnQJCQlpOworCUFycmF5VHlw ZSAgKmFycjsKKwljaGFyCSAgICplbmFibGVkOworCUZvcm1fcGdfc3RhdGlzdGljX2V4dCBzdGFG b3JtOworCUxpc3QJICAgKmV4cHJzID0gTklMOworCisJZW50cnkgPSBwYWxsb2MwKHNpemVvZihT dGF0RXh0RW50cnkpKTsKKwlzdGFGb3JtID0gKEZvcm1fcGdfc3RhdGlzdGljX2V4dCkgR0VUU1RS VUNUKGh0dXApOworCWVudHJ5LT5zdGF0T2lkID0gc3RhRm9ybS0+b2lkOworCWVudHJ5LT5zY2hl bWEgPSBnZXRfbmFtZXNwYWNlX25hbWUoc3RhRm9ybS0+c3R4bmFtZXNwYWNlKTsKKwllbnRyeS0+ bmFtZSA9IHBzdHJkdXAoTmFtZVN0cihzdGFGb3JtLT5zdHhuYW1lKSk7CisJZW50cnktPnN0YXR0 YXJnZXQgPSBzdGFGb3JtLT5zdHhzdGF0dGFyZ2V0OworCWZvciAoaSA9IDA7IGkgPCBzdGFGb3Jt LT5zdHhrZXlzLmRpbTE7IGkrKykKKwl7CisJCWVudHJ5LT5jb2x1bW5zID0gYm1zX2FkZF9tZW1i ZXIoZW50cnktPmNvbHVtbnMsCisJCQkJCQkJCQkJc3RhRm9ybS0+c3R4a2V5cy52YWx1ZXNbaV0p OworCX0KKworCS8qIGRlY29kZSB0aGUgc3R4a2luZCBjaGFyIGFycmF5IGludG8gYSBsaXN0IG9m IGNoYXJzICovCisJZGF0dW0gPSBTeXNDYWNoZUdldEF0dHJOb3ROdWxsKFNUQVRFWFRPSUQsIGh0 dXAsCisJCQkJCQkJCSAgIEFudW1fcGdfc3RhdGlzdGljX2V4dF9zdHhraW5kKTsKKwlhcnIgPSBE YXR1bUdldEFycmF5VHlwZVAoZGF0dW0pOworCWlmIChBUlJfTkRJTShhcnIpICE9IDEgfHwKKwkJ QVJSX0hBU05VTEwoYXJyKSB8fAorCQlBUlJfRUxFTVRZUEUoYXJyKSAhPSBDSEFST0lEKQorCQll bG9nKEVSUk9SLCAic3R4a2luZCBpcyBub3QgYSAxLUQgY2hhciBhcnJheSIpOworCWVuYWJsZWQg PSAoY2hhciAqKSBBUlJfREFUQV9QVFIoYXJyKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSX0RJTVMo YXJyKVswXTsgaSsrKQorCXsKKwkJQXNzZXJ0KChlbmFibGVkW2ldID09IFNUQVRTX0VYVF9ORElT VElOQ1QpIHx8CisJCQkgICAoZW5hYmxlZFtpXSA9PSBTVEFUU19FWFRfREVQRU5ERU5DSUVTKSB8 fAorCQkJICAgKGVuYWJsZWRbaV0gPT0gU1RBVFNfRVhUX01DVikgfHwKKwkJCSAgIChlbmFibGVk W2ldID09IFNUQVRTX0VYVF9FWFBSRVNTSU9OUykpOworCQllbnRyeS0+dHlwZXMgPSBsYXBwZW5k X2ludChlbnRyeS0+dHlwZXMsIChpbnQpIGVuYWJsZWRbaV0pOworCX0KKworCS8qIGRlY29kZSBl eHByZXNzaW9uIChpZiBhbnkpICovCisJZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoU1RBVEVYVE9J RCwgaHR1cCwKKwkJCQkJCQlBbnVtX3BnX3N0YXRpc3RpY19leHRfc3R4ZXhwcnMsICZpc251bGwp OworCisJaWYgKCFpc251bGwpCisJeworCQljaGFyCSAgICpleHByc1N0cmluZzsKKworCQlleHBy c1N0cmluZyA9IFRleHREYXR1bUdldENTdHJpbmcoZGF0dW0pOworCQlleHBycyA9IChMaXN0ICop IHN0cmluZ1RvTm9kZShleHByc1N0cmluZyk7CisKKwkJcGZyZWUoZXhwcnNTdHJpbmcpOworCisJ CS8qCisJCSAqIFJ1biB0aGUgZXhwcmVzc2lvbnMgdGhyb3VnaCBldmFsX2NvbnN0X2V4cHJlc3Np b25zLiBUaGlzIGlzIG5vdAorCQkgKiBqdXN0IGFuIG9wdGltaXphdGlvbiwgYnV0IGlzIG5lY2Vz c2FyeSwgYmVjYXVzZSB0aGUgcGxhbm5lcgorCQkgKiB3aWxsIGJlIGNvbXBhcmluZyB0aGVtIHRv IHNpbWlsYXJseS1wcm9jZXNzZWQgcXVhbCBjbGF1c2VzLCBhbmQKKwkJICogbWF5IGZhaWwgdG8g ZGV0ZWN0IHZhbGlkIG1hdGNoZXMgd2l0aG91dCB0aGlzLiAgV2UgbXVzdCBub3QgdXNlCisJCSAq IGNhbm9uaWNhbGl6ZV9xdWFsLCBob3dldmVyLCBzaW5jZSB0aGVzZSBhcmVuJ3QgcXVhbAorCQkg KiBleHByZXNzaW9ucy4KKwkJICovCisJCWV4cHJzID0gKExpc3QgKikgZXZhbF9jb25zdF9leHBy ZXNzaW9ucyhOVUxMLCAoTm9kZSAqKSBleHBycyk7CisKKwkJLyogTWF5IGFzIHdlbGwgZml4IG9w ZnVuY2lkcyB0b28gKi8KKwkJZml4X29wZnVuY2lkcygoTm9kZSAqKSBleHBycyk7CisJfQorCisJ ZW50cnktPmV4cHJzID0gZXhwcnM7CisKKwlyZXR1cm4gZW50cnk7Cit9CisKIC8qCiAgKiBSZXR1 cm4gYSBsaXN0IChvZiBTdGF0RXh0RW50cnkpIG9mIHN0YXRpc3RpY3Mgb2JqZWN0cyBmb3IgdGhl IGdpdmVuIHJlbGF0aW9uLgogICovCkBAIC00NDMsNzQgKzUyMyw3IEBAIGZldGNoX3N0YXRlbnRy aWVzX2Zvcl9yZWxhdGlvbihSZWxhdGlvbiBwZ19zdGF0ZXh0LCBPaWQgcmVsaWQpCiAKIAl3aGls ZSAoSGVhcFR1cGxlSXNWYWxpZChodHVwID0gc3lzdGFibGVfZ2V0bmV4dChzY2FuKSkpCiAJewot CQlTdGF0RXh0RW50cnkgKmVudHJ5OwotCQlEYXR1bQkJZGF0dW07Ci0JCWJvb2wJCWlzbnVsbDsK LQkJaW50CQkJaTsKLQkJQXJyYXlUeXBlICAqYXJyOwotCQljaGFyCSAgICplbmFibGVkOwotCQlG b3JtX3BnX3N0YXRpc3RpY19leHQgc3RhRm9ybTsKLQkJTGlzdAkgICAqZXhwcnMgPSBOSUw7Ci0K LQkJZW50cnkgPSBwYWxsb2MwKHNpemVvZihTdGF0RXh0RW50cnkpKTsKLQkJc3RhRm9ybSA9IChG b3JtX3BnX3N0YXRpc3RpY19leHQpIEdFVFNUUlVDVChodHVwKTsKLQkJZW50cnktPnN0YXRPaWQg PSBzdGFGb3JtLT5vaWQ7Ci0JCWVudHJ5LT5zY2hlbWEgPSBnZXRfbmFtZXNwYWNlX25hbWUoc3Rh Rm9ybS0+c3R4bmFtZXNwYWNlKTsKLQkJZW50cnktPm5hbWUgPSBwc3RyZHVwKE5hbWVTdHIoc3Rh Rm9ybS0+c3R4bmFtZSkpOwotCQllbnRyeS0+c3RhdHRhcmdldCA9IHN0YUZvcm0tPnN0eHN0YXR0 YXJnZXQ7Ci0JCWZvciAoaSA9IDA7IGkgPCBzdGFGb3JtLT5zdHhrZXlzLmRpbTE7IGkrKykKLQkJ ewotCQkJZW50cnktPmNvbHVtbnMgPSBibXNfYWRkX21lbWJlcihlbnRyeS0+Y29sdW1ucywKLQkJ CQkJCQkJCQkJc3RhRm9ybS0+c3R4a2V5cy52YWx1ZXNbaV0pOwotCQl9Ci0KLQkJLyogZGVjb2Rl IHRoZSBzdHhraW5kIGNoYXIgYXJyYXkgaW50byBhIGxpc3Qgb2YgY2hhcnMgKi8KLQkJZGF0dW0g PSBTeXNDYWNoZUdldEF0dHJOb3ROdWxsKFNUQVRFWFRPSUQsIGh0dXAsCi0JCQkJCQkJCQkgICBB bnVtX3BnX3N0YXRpc3RpY19leHRfc3R4a2luZCk7Ci0JCWFyciA9IERhdHVtR2V0QXJyYXlUeXBl UChkYXR1bSk7Ci0JCWlmIChBUlJfTkRJTShhcnIpICE9IDEgfHwKLQkJCUFSUl9IQVNOVUxMKGFy cikgfHwKLQkJCUFSUl9FTEVNVFlQRShhcnIpICE9IENIQVJPSUQpCi0JCQllbG9nKEVSUk9SLCAi c3R4a2luZCBpcyBub3QgYSAxLUQgY2hhciBhcnJheSIpOwotCQllbmFibGVkID0gKGNoYXIgKikg QVJSX0RBVEFfUFRSKGFycik7Ci0JCWZvciAoaSA9IDA7IGkgPCBBUlJfRElNUyhhcnIpWzBdOyBp KyspCi0JCXsKLQkJCUFzc2VydCgoZW5hYmxlZFtpXSA9PSBTVEFUU19FWFRfTkRJU1RJTkNUKSB8 fAotCQkJCSAgIChlbmFibGVkW2ldID09IFNUQVRTX0VYVF9ERVBFTkRFTkNJRVMpIHx8Ci0JCQkJ ICAgKGVuYWJsZWRbaV0gPT0gU1RBVFNfRVhUX01DVikgfHwKLQkJCQkgICAoZW5hYmxlZFtpXSA9 PSBTVEFUU19FWFRfRVhQUkVTU0lPTlMpKTsKLQkJCWVudHJ5LT50eXBlcyA9IGxhcHBlbmRfaW50 KGVudHJ5LT50eXBlcywgKGludCkgZW5hYmxlZFtpXSk7Ci0JCX0KLQotCQkvKiBkZWNvZGUgZXhw cmVzc2lvbiAoaWYgYW55KSAqLwotCQlkYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihTVEFURVhUT0lE LCBodHVwLAotCQkJCQkJCQlBbnVtX3BnX3N0YXRpc3RpY19leHRfc3R4ZXhwcnMsICZpc251bGwp OwotCi0JCWlmICghaXNudWxsKQotCQl7Ci0JCQljaGFyCSAgICpleHByc1N0cmluZzsKLQotCQkJ ZXhwcnNTdHJpbmcgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKGRhdHVtKTsKLQkJCWV4cHJzID0gKExp c3QgKikgc3RyaW5nVG9Ob2RlKGV4cHJzU3RyaW5nKTsKLQotCQkJcGZyZWUoZXhwcnNTdHJpbmcp OwotCi0JCQkvKgotCQkJICogUnVuIHRoZSBleHByZXNzaW9ucyB0aHJvdWdoIGV2YWxfY29uc3Rf ZXhwcmVzc2lvbnMuIFRoaXMgaXMgbm90Ci0JCQkgKiBqdXN0IGFuIG9wdGltaXphdGlvbiwgYnV0 IGlzIG5lY2Vzc2FyeSwgYmVjYXVzZSB0aGUgcGxhbm5lcgotCQkJICogd2lsbCBiZSBjb21wYXJp bmcgdGhlbSB0byBzaW1pbGFybHktcHJvY2Vzc2VkIHF1YWwgY2xhdXNlcywgYW5kCi0JCQkgKiBt YXkgZmFpbCB0byBkZXRlY3QgdmFsaWQgbWF0Y2hlcyB3aXRob3V0IHRoaXMuICBXZSBtdXN0IG5v dCB1c2UKLQkJCSAqIGNhbm9uaWNhbGl6ZV9xdWFsLCBob3dldmVyLCBzaW5jZSB0aGVzZSBhcmVu J3QgcXVhbAotCQkJICogZXhwcmVzc2lvbnMuCi0JCQkgKi8KLQkJCWV4cHJzID0gKExpc3QgKikg ZXZhbF9jb25zdF9leHByZXNzaW9ucyhOVUxMLCAoTm9kZSAqKSBleHBycyk7Ci0KLQkJCS8qIE1h eSBhcyB3ZWxsIGZpeCBvcGZ1bmNpZHMgdG9vICovCi0JCQlmaXhfb3BmdW5jaWRzKChOb2RlICop IGV4cHJzKTsKLQkJfQotCi0JCWVudHJ5LT5leHBycyA9IGV4cHJzOwotCisJCVN0YXRFeHRFbnRy eSAqZW50cnkgPSBjcmVhdGVfc3RhdF9leHRfZW50cnkoaHR1cCk7CiAJCXJlc3VsdCA9IGxhcHBl bmQocmVzdWx0LCBlbnRyeSk7CiAJfQogCkBAIC0yNjM2LDMgKzI2NDksNzM4IEBAIG1ha2VfYnVp bGRfZGF0YShSZWxhdGlvbiByZWwsIFN0YXRFeHRFbnRyeSAqc3RhdCwgaW50IG51bXJvd3MsIEhl YXBUdXBsZSAqcm93cywKIAogCXJldHVybiByZXN1bHQ7CiB9CisKK3N0YXRpYyBEYXR1bQoraW1w b3J0X2V4cHJlc3Npb25zKERhdHVtIHN0eGRleHByLCBib29sIHN0eGRleHByX251bGwsCisJCQkJ ICAgRGF0dW0gb3BlcmF0b3JzLCBib29sIG9wZXJhdG9yc19udWxsLAorCQkJCSAgIFZhY0F0dHJT dGF0cyAqKmV4cHJfc3RhdHMsIGludCBuZXhwcnMpCit7CisKKyNkZWZpbmUgRVhQUl9OQVJHUyAy CisKKwlPaWQJCQlhcmd0eXBlc1tFWFBSX05BUkdTXSA9IHsgSlNPTkJPSUQsIEpTT05CT0lEIH07 CisJRGF0dW0JCWFyZ3NbRVhQUl9OQVJHU10gPSB7IHN0eGRleHByLCBvcGVyYXRvcnMgfTsKKwlj aGFyCQlhcmdudWxsc1tFWFBSX05BUkdTXSA9IHsKKwkJCQkJc3R4ZGV4cHJfbnVsbCA/ICduJyA6 ICcgJywKKwkJCQkJb3BlcmF0b3JzX251bGwgPyAnbicgOiAnICcgfTsKKworCWNvbnN0IGNoYXIg KnNxbCA9CisJCSJXSVRIIGV4cG9ydGVkX29wZXJhdG9ycyBBUyAoICIKKwkJIiAgICBTRUxFQ1Qg ZW8uKiAiCisJCSIgICAgRlJPTSBqc29uYl90b19yZWNvcmRzZXQoJDIpICIKKwkJIiAgICAgICAg QVMgZW8ob2lkIG9pZCwgb3BybmFtZSB0ZXh0KSAiCisJCSIpICIKKwkJIlNFTEVDVCBzLiosICIK KwkJIiAgICAgICBlbzEub3BybmFtZSBBUyBlb3BybmFtZTEsICIKKwkJIiAgICAgICBlbzIub3By bmFtZSBBUyBlb3BybmFtZTIsICIKKwkJIiAgICAgICBlbzMub3BybmFtZSBBUyBlb3BybmFtZTMs ICIKKwkJIiAgICAgICBlbzQub3BybmFtZSBBUyBlb3BybmFtZTQsICIKKwkJIiAgICAgICBlbzUu b3BybmFtZSBBUyBlb3BybmFtZTUgIgorCQkiRlJPTSBqc29uYl90b19yZWNvcmRzZXQoJDEpICIK KwkJIiAgICBBUyBzKHN0YWF0dG51bSBpbnRlZ2VyLCAiCisJCSIgICAgICAgICBzdGFpbmhlcml0 IGJvb2xlYW4sICIKKwkJIiAgICAgICAgIHN0YW51bGxmcmFjIGZsb2F0NCwgIgorCQkiICAgICAg ICAgc3Rhd2lkdGggaW50ZWdlciwgIgorCQkiICAgICAgICAgc3RhZGlzdGluY3QgZmxvYXQ0LCAi CisJCSIgICAgICAgICBzdGFraW5kMSBpbnQyLCAiCisJCSIgICAgICAgICBzdGFraW5kMiBpbnQy LCAiCisJCSIgICAgICAgICBzdGFraW5kMyBpbnQyLCAiCisJCSIgICAgICAgICBzdGFraW5kNCBp bnQyLCAiCisJCSIgICAgICAgICBzdGFraW5kNSBpbnQyLCAiCisJCSIgICAgICAgICBzdGFvcDEg b2lkLCAiCisJCSIgICAgICAgICBzdGFvcDIgb2lkLCAiCisJCSIgICAgICAgICBzdGFvcDMgb2lk LCAiCisJCSIgICAgICAgICBzdGFvcDQgb2lkLCAiCisJCSIgICAgICAgICBzdGFvcDUgb2lkLCAi CisJCSIgICAgICAgICBzdGFjb2xsMSBvaWQsICIKKwkJIiAgICAgICAgIHN0YWNvbGwyIG9pZCwg IgorCQkiICAgICAgICAgc3RhY29sbDMgb2lkLCAiCisJCSIgICAgICAgICBzdGFjb2xsNCBvaWQs ICIKKwkJIiAgICAgICAgIHN0YWNvbGw1IG9pZCwgIgorCQkiICAgICAgICAgc3RhbnVtYmVyczEg ZmxvYXQ0W10sICIKKwkJIiAgICAgICAgIHN0YW51bWJlcnMyIGZsb2F0NFtdLCAiCisJCSIgICAg ICAgICBzdGFudW1iZXJzMyBmbG9hdDRbXSwgIgorCQkiICAgICAgICAgc3RhbnVtYmVyczQgZmxv YXQ0W10sICIKKwkJIiAgICAgICAgIHN0YW51bWJlcnM1IGZsb2F0NFtdLCAiCisJCSIgICAgICAg ICBzdGF2YWx1ZXMxIHRleHQsICIKKwkJIiAgICAgICAgIHN0YXZhbHVlczIgdGV4dCwgIgorCQki ICAgICAgICAgc3RhdmFsdWVzMyB0ZXh0LCAiCisJCSIgICAgICAgICBzdGF2YWx1ZXM0IHRleHQs ICIKKwkJIiAgICAgICAgIHN0YXZhbHVlczUgdGV4dCkgIgorCQkiTEVGVCBKT0lOIGV4cG9ydGVk X29wZXJhdG9ycyBBUyBlbzEgT04gZW8xLm9pZCA9IHMuc3Rhb3AxICIKKwkJIkxFRlQgSk9JTiBl eHBvcnRlZF9vcGVyYXRvcnMgQVMgZW8yIE9OIGVvMi5vaWQgPSBzLnN0YW9wMiAiCisJCSJMRUZU IEpPSU4gZXhwb3J0ZWRfb3BlcmF0b3JzIEFTIGVvMyBPTiBlbzMub2lkID0gcy5zdGFvcDMgIgor CQkiTEVGVCBKT0lOIGV4cG9ydGVkX29wZXJhdG9ycyBBUyBlbzQgT04gZW80Lm9pZCA9IHMuc3Rh b3A0ICIKKwkJIkxFRlQgSk9JTiBleHBvcnRlZF9vcGVyYXRvcnMgQVMgZW81IE9OIGVvNS5vaWQg PSBzLnN0YW9wNSAiOworCisJZW51bQorCXsKKwkJRVhQUl9BVFROVU0gPSAwLAorCQlFWFBSX1NU QUlOSEVSSVQsCisJCUVYUFJfU1RBTlVMTEZSQUMsCisJCUVYUFJfU1RBV0lEVEgsCisJCUVYUFJf U1RBRElTVElOQ1QsCisJCUVYUFJfU1RBS0lORDEsCisJCUVYUFJfU1RBS0lORDIsCisJCUVYUFJf U1RBS0lORDMsCisJCUVYUFJfU1RBS0lORDQsCisJCUVYUFJfU1RBS0lORDUsCisJCUVYUFJfU1RB T1AxLAorCQlFWFBSX1NUQU9QMiwKKwkJRVhQUl9TVEFPUDMsCisJCUVYUFJfU1RBT1A0LAorCQlF WFBSX1NUQU9QNSwKKwkJRVhQUl9TVEFDT0xMMSwKKwkJRVhQUl9TVEFDT0xMMiwKKwkJRVhQUl9T VEFDT0xMMywKKwkJRVhQUl9TVEFDT0xMNCwKKwkJRVhQUl9TVEFDT0xMNSwKKwkJRVhQUl9TVEFO VU1CRVJTMSwKKwkJRVhQUl9TVEFOVU1CRVJTMiwKKwkJRVhQUl9TVEFOVU1CRVJTMywKKwkJRVhQ Ul9TVEFOVU1CRVJTNCwKKwkJRVhQUl9TVEFOVU1CRVJTNSwKKwkJRVhQUl9TVEFWQUxVRVMxLAor CQlFWFBSX1NUQVZBTFVFUzIsCisJCUVYUFJfU1RBVkFMVUVTMywKKwkJRVhQUl9TVEFWQUxVRVM0 LAorCQlFWFBSX1NUQVZBTFVFUzUsCisJCUVYUFJfRU9QUk5BTUUxLAorCQlFWFBSX0VPUFJOQU1F MiwKKwkJRVhQUl9FT1BSTkFNRTMsCisJCUVYUFJfRU9QUk5BTUU0LAorCQlFWFBSX0VPUFJOQU1F NSwKKwkJTlVNX0VYUFJfQ09MUworCX07CisKKwlTUElUdXBsZVRhYmxlICAqdHVwdGFibGU7CisJ aW50CQkJCXJldDsKKwlpbnQJCQkJZTsKKworCUFycmF5QnVpbGRTdGF0ZSAqYXN0YXRlID0gTlVM TDsKKworCVJlbGF0aW9uCXBnc2Q7CisJSGVhcFR1cGxlCXBnc3R1cDsKKwlPaWQJCQlwZ3N0eXBv aWQ7CisJRm1nckluZm8JZmluZm87CisKKwlwZ3NkID0gdGFibGVfb3BlbihTdGF0aXN0aWNSZWxh dGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwlwZ3N0eXBvaWQgPSBnZXRfcmVsX3R5cGVfaWQo U3RhdGlzdGljUmVsYXRpb25JZCk7CisJZm1ncl9pbmZvKEZfQVJSQVlfSU4sICZmaW5mbyk7CisK KwlpZiAoIU9pZElzVmFsaWQocGdzdHlwb2lkKSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJy Y29kZShFUlJDT0RFX1dST05HX09CSkVDVF9UWVBFKSwKKwkJCQkgZXJybXNnKCJyZWxhdGlvbiBc IiVzXCIgZG9lcyBub3QgaGF2ZSBhIGNvbXBvc2l0ZSB0eXBlIiwKKwkJCQkJCSJwZ19zdGF0aXN0 aWMiKSkpOworCisJcmV0ID0gU1BJX2V4ZWN1dGVfd2l0aF9hcmdzKHNxbCwgRVhQUl9OQVJHUywg YXJndHlwZXMsIGFyZ3MsIGFyZ251bGxzLCB0cnVlLCAwKTsKKworCWlmIChyZXQgIT0gU1BJX09L X1NFTEVDVCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURf UEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJzdGF0aXN0aWMgZXhwb3J0IEpTT04gaXMg bm90IGluIHByb3BlciBmb3JtYXQiKSkpOworCisJdHVwdGFibGUgPSBTUElfdHVwdGFibGU7CisK KwlpZiAobmV4cHJzICE9IHR1cHRhYmxlLT5udW12YWxzKQorCQllcmVwb3J0KEVSUk9SLAorCQkJ CShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2co InN0YXRpc3RpYyBleHBvcnQgZXhwZWN0ZWQgJWQgc3R4ZGV4cHIgcm93cyBidXQgZm91bmQgJWx1 IiwKKwkJCQkJIG5leHBycywgdHVwdGFibGUtPm51bXZhbHMpKSk7CisKKwlpZiAobmV4cHJzID09 IDApCisJCWFzdGF0ZSA9IGFjY3VtQXJyYXlSZXN1bHQoYXN0YXRlLAorCQkJCQkJCQkgIChEYXR1 bSkgMCwKKwkJCQkJCQkJICB0cnVlLAorCQkJCQkJCQkgIHBnc3R5cG9pZCwKKwkJCQkJCQkJICBD dXJyZW50TWVtb3J5Q29udGV4dCk7CisKKwlmb3IgKGUgPSAwOyBlIDwgbmV4cHJzOyBlKyspCisJ eworCQlEYXR1bQl2YWx1ZXNbTmF0dHNfcGdfc3RhdGlzdGljXSA9IHsgMCB9OworCQlib29sCW51 bGxzW05hdHRzX3BnX3N0YXRpc3RpY10gPSB7IGZhbHNlIH07CisKKwkJRGF0dW0JcnNfZGF0dW1z W05VTV9FWFBSX0NPTFNdOworCQlib29sCXJzX251bGxzW05VTV9FWFBSX0NPTFNdOworCisJCVZh Y0F0dHJTdGF0cyAgICpzdGF0cyA9IGV4cHJfc3RhdHNbZV07CisKKwkJT2lkIAliYXNldHlwb2lk OworCQlPaWQJCWx0b3ByOworCQlPaWQgCWJhc2VsdG9wcjsKKwkJT2lkCQllcW9wcjsKKwkJT2lk IAliYXNlZXFvcHI7CisJCWludCAJazsKKworCQkvKgorCQkgKiBJZiBpZiB0aGUgc3RhdCBpcyBh biBhcnJheSwgdGhlbiB3ZSB3YW50IHRoZSBiYXNlIGVsZW1lbnQKKwkJICogdHlwZS4gVGhpcyBt aW1pY3MgdGhlIGNhbGN1bGF0aW9uIGluIGdldF9hdHRyaW5mbygpLgorCQkgKi8KKwkJZ2V0X3Nv cnRfZ3JvdXBfb3BlcmF0b3JzKHN0YXRzLT5hdHRydHlwaWQsCisJCQkJCQkJCSBmYWxzZSwgZmFs c2UsIGZhbHNlLAorCQkJCQkJCQkgJmx0b3ByLCAmZXFvcHIsIE5VTEwsCisJCQkJCQkJCSBOVUxM KTsKKwkJYmFzZXR5cG9pZCA9IGdldF9iYXNlX2VsZW1lbnRfdHlwZShzdGF0cy0+YXR0cnR5cGlk KTsKKwkJaWYgKGJhc2V0eXBvaWQgPT0gSW52YWxpZE9pZCkKKwkJCWJhc2V0eXBvaWQgPSBzdGF0 cy0+YXR0cnR5cGlkOworCQlnZXRfc29ydF9ncm91cF9vcGVyYXRvcnMoYmFzZXR5cG9pZCwKKwkJ CQkJCQkJIGZhbHNlLCBmYWxzZSwgZmFsc2UsCisJCQkJCQkJCSAmYmFzZWx0b3ByLCAmYmFzZWVx b3ByLCBOVUxMLAorCQkJCQkJCQkgTlVMTCk7CisKKwkJaGVhcF9kZWZvcm1fdHVwbGUodHVwdGFi bGUtPnZhbHNbZV0sIHR1cHRhYmxlLT50dXBkZXNjLAorCQkJCQkJICByc19kYXR1bXMsIHJzX251 bGxzKTsKKworCQkvKiBUaGVzZSB2YWx1ZXMgYXJlIG5vdCBkZXJpdmVkIGZyb20gZWl0aGVyIHZh YyBzdGF0cyBvciBleHBvcnRlZCBzdGF0cyAqLworCQl2YWx1ZXNbQW51bV9wZ19zdGF0aXN0aWNf c3RhcmVsaWQgLSAxXSA9IE9iamVjdElkR2V0RGF0dW0oSW52YWxpZE9pZCk7CisJCXZhbHVlc1tB bnVtX3BnX3N0YXRpc3RpY19zdGFhdHRudW0gLSAxXSA9IEludDE2R2V0RGF0dW0oSW52YWxpZEF0 dHJOdW1iZXIpOworCQl2YWx1ZXNbQW51bV9wZ19zdGF0aXN0aWNfc3RhaW5oZXJpdCAtIDFdID0g Qm9vbEdldERhdHVtKGZhbHNlKTsKKworCQlpZiAocnNfbnVsbHNbRVhQUl9TVEFOVUxMRlJBQ10p CisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1F VEVSX1ZBTFVFKSwKKwkJCQkJIGVycm1zZygiSW1wb3J0ZWQgc3R4ZGVwciByb3cgY2Fubm90IGhh dmUgTlVMTCAlcyIsICJzdGFudWxsZnJhYyIpKSk7CisKKwkJaWYgKHJzX251bGxzW0VYUFJfU1RB V0lEVEhdKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElE X1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCSBlcnJtc2coIkltcG9ydGVkIHN0eGRlcHIgcm93IGNh bm5vdCBoYXZlIE5VTEwgJXMiLCAic3Rhd2lkdGgiKSkpOworCisJCWlmIChyc19udWxsc1tFWFBS X1NUQURJU1RJTkNUXSkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVf SU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkgZXJybXNnKCJJbXBvcnRlZCBzdHhkZXBy IHJvdyBjYW5ub3QgaGF2ZSBOVUxMICVzIiwgInN0YWRpc3RpbmN0IikpKTsKKworCQl2YWx1ZXNb QW51bV9wZ19zdGF0aXN0aWNfc3RhbnVsbGZyYWMgLSAxXSA9IHJzX2RhdHVtc1tFWFBSX1NUQU5V TExGUkFDXTsKKwkJdmFsdWVzW0FudW1fcGdfc3RhdGlzdGljX3N0YXdpZHRoIC0gMV0gPSByc19k YXR1bXNbRVhQUl9TVEFXSURUSF07CisJCXZhbHVlc1tBbnVtX3BnX3N0YXRpc3RpY19zdGFkaXN0 aW5jdCAtIDFdID0gcnNfZGF0dW1zW0VYUFJfU1RBRElTVElOQ1RdOworCisJCWZvciAoayA9IDA7 IGsgPCBTVEFUSVNUSUNfTlVNX1NMT1RTOyBrKyspCisJCXsKKwkJCWludDE2CWtpbmQgPSAwOwor CQkJT2lkCQlvcCA9IEludmFsaWRPaWQ7CisKKwkJCWlmICghcnNfbnVsbHNbRVhQUl9TVEFLSU5E MSArIGtdKQorCQkJeworCQkJCWtpbmQgPSBJbnQxNkdldERhdHVtKHJzX2RhdHVtc1tFWFBSX1NU QUtJTkQxICsga10pOworCisJCQkJaWYgKCFyc19udWxsc1tFWFBSX0VPUFJOQU1FMSArIGtdKQor CQkJCXsKKwkJCQkJY2hhciAqcyA9IFRleHREYXR1bUdldENTdHJpbmcocnNfZGF0dW1zW0VYUFJf RU9QUk5BTUUxICsga10pOworCisJCQkJCWlmIChzdHJjbXAocywgIj0iKSA9PSAwKQorCQkJCQl7 CisJCQkJCQkvKgorCQkJCQkJICogTUNFTEVNIHN0YXQgYXJyYXlzIGFyZSBvZiB0aGUgc2FtZSB0 eXBlIGFzIHRoZQorCQkJCQkJICogYXJyYXkgYmFzZSBlbGVtZW50IHR5cGUgYW5kIGFyZSBlcW9w cgorCQkJCQkJICovCisJCQkJCQlpZiAoKGtpbmQgPT0gU1RBVElTVElDX0tJTkRfTUNFTEVNKSB8 fAorCQkJCQkJCShraW5kID09IFNUQVRJU1RJQ19LSU5EX0RFQ0hJU1QpKQorCQkJCQkJCW9wID0g YmFzZWVxb3ByOworCQkJCQkJZWxzZQorCQkJCQkJCW9wID0gZXFvcHI7CisJCQkJCX0KKwkJCQkJ ZWxzZSBpZiAoc3RyY21wKHMsICI8IikgPT0gMCkKKwkJCQkJCW9wID0gbHRvcHI7CisJCQkJCWVs c2UKKwkJCQkJCW9wID0gSW52YWxpZE9pZDsKKworCQkJCQlwZnJlZShzKTsKKwkJCQl9CisJCQl9 CisKKwkJCXZhbHVlc1tBbnVtX3BnX3N0YXRpc3RpY19zdGFraW5kMSAtIDEgKyBrXSA9IGtpbmQ7 CisJCQl2YWx1ZXNbQW51bV9wZ19zdGF0aXN0aWNfc3Rhb3AxIC0gMSArIGtdID0gb3A7CisKKwkJ CS8qIHJlbHkgb24gdmFjYXR0cnN0YXQgKi8KKwkJCXZhbHVlc1tBbnVtX3BnX3N0YXRpc3RpY19z dGFjb2xsMSAtIDEgKyBrXSA9CisJCQkJT2JqZWN0SWRHZXREYXR1bShzdGF0cy0+c3RhY29sbFtr XSk7CisKKwkJCXZhbHVlc1tBbnVtX3BnX3N0YXRpc3RpY19zdGFudW1iZXJzMSAtIDEgKyBrXSA9 CisJCQkJcnNfZGF0dW1zW0VYUFJfU1RBTlVNQkVSUzEgKyBrXTsKKwkJCW51bGxzW0FudW1fcGdf c3RhdGlzdGljX3N0YW51bWJlcnMxIC0gMSArIGtdID0KKwkJCQlyc19udWxsc1tFWFBSX1NUQU5V TUJFUlMxICsga107CisKKwkJCW51bGxzW0FudW1fcGdfc3RhdGlzdGljX3N0YXZhbHVlczEgLSAx ICsga10gPQorCQkJCXJzX251bGxzW0VYUFJfU1RBVkFMVUVTMSArIGtdOworCQkJaWYgKHJzX251 bGxzW0VYUFJfU1RBVkFMVUVTMSArIGtdKQorCQkJCXZhbHVlc1tBbnVtX3BnX3N0YXRpc3RpY19z dGF2YWx1ZXMxIC0gMSArIGtdID0gKERhdHVtKSAwOworCQkJZWxzZQorCQkJeworCQkJCWNoYXIg KnMgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKHJzX2RhdHVtc1tFWFBSX1NUQVZBTFVFUzEgKyBrXSk7 CisKKwkJCQl2YWx1ZXNbQW51bV9wZ19zdGF0aXN0aWNfc3RhdmFsdWVzMSAtIDEgKyBrXSA9CisJ CQkJCUZ1bmN0aW9uQ2FsbDMoJmZpbmZvLCBDU3RyaW5nR2V0RGF0dW0ocyksCisJCQkJCQkJCSAg T2JqZWN0SWRHZXREYXR1bShiYXNldHlwb2lkKSwKKwkJCQkJCQkJICBJbnQzMkdldERhdHVtKHN0 YXRzLT5hdHRydHlwbW9kKSk7CisKKwkJCQlwZnJlZShzKTsKKwkJCX0KKwkJfQorCisJCXBnc3R1 cCA9IGhlYXBfZm9ybV90dXBsZShSZWxhdGlvbkdldERlc2NyKHBnc2QpLCB2YWx1ZXMsIG51bGxz KTsKKworCQlhc3RhdGUgPSBhY2N1bUFycmF5UmVzdWx0KGFzdGF0ZSwKKwkJCQkJCQkJICBoZWFw X2NvcHlfdHVwbGVfYXNfZGF0dW0ocGdzdHVwLCBSZWxhdGlvbkdldERlc2NyKHBnc2QpKSwKKwkJ CQkJCQkJICBmYWxzZSwKKwkJCQkJCQkJICBwZ3N0eXBvaWQsCisJCQkJCQkJCSAgQ3VycmVudE1l bW9yeUNvbnRleHQpOworCX0KKworCXRhYmxlX2Nsb3NlKHBnc2QsIFJvd0V4Y2x1c2l2ZUxvY2sp OworCisJcmV0dXJuIG1ha2VBcnJheVJlc3VsdChhc3RhdGUsIEN1cnJlbnRNZW1vcnlDb250ZXh0 KTsKK30KKworLyoKKyAqIEltcG9ydCBzdGF0aXN0aWNzIGZvciBhIGdpdmVuIGV4dGVuZGVkIHN0 YXRpc3RpY3Mgb2JqZWN0LgorICoKKyAqIFRoZSBzdGF0aXN0aWNzIGpzb24gZm9ybWF0IGlzOgor ICoKKyAqIHsKKyAqICAgInNlcnZlcl92ZXJzaW9uX251bSI6IG51bWJlciwgLS0gU0hPVyBzZXJ2 ZXJfdmVyc2lvbiBvbiBzb3VyY2Ugc3lzdGVtCisgKiAgICJzdHhvaWQiOiBudW1iZXIsIC0tIHBn X3N0YXRfZXh0LnN0eG9pZAorICogICAic3R4bmFtZSI6IHN0cmluZywgLS0gcGdfc3RhdF9leHQu c3R4bmFtZQorICogICAic3R4bnNwbmFtZSI6IHN0cmluZywgLS0gc2NoZW1hIG5hbWUgZm9yIHRo ZSBzdGF0aXN0aWNzIG9iamVjdAorICogICAicmVsbmFtZSI6IHN0cmluZywgLS0gcGdjbGFzcy5y ZWxuYW1lIG9mIHRoZSBleHBvcnRlZCByZWxhdGlvbgorICogICAibnNwbmFtZSI6IHN0cmluZywg LS0gc2NoZW1hIG5hbWUgZm9yIHRoZSBleHBvcnRlZCByZWxhdGlvbgorICogICAtLSBzdHhrZXlz IGNhc3QgdG8gdGV4dCB0byBhaWQgYXJyYXlfaW4oKQorICogICAic3R4a2V5cyI6IHN0cmluZywg LS0gcGdfc3RhdGlzdGljX2V4dC5zdHhraW5kOjp0ZXh0CisgKiAgIC0tIHN0eG5kaXN0aW5jdCBh bmQgc3R4ZG5kZXBlbmNpZXMgb25seSBvbiB2MTAtdjExCisgKiAgICJzdHhuZGlzdGluY3QiOiBz dHJpbmcsIC0tIHBnX3N0YXRpc3RpY19leHQuc3R4bmRpc3RpbmN0Ojp0ZXh0CisgKiAgICJzdHhk ZXBlbmRlbmNpZXMiOiBzdHJpbmcsIC0tIHBnX3N0YXRpc3RpY19leHQuc3R4ZGVwZW5kZW5jaWVz Ojp0ZXh0CisgKiAgIC0tIGRhdGEgaXMgb24gdjEyKworICogICAiZGF0YSI6IFsKKyAqICAgICB7 CisgKiAgICAgICAtLSBzdHhkaW5oZXJpdCBpcyBvbiB2MTUrCisgKiAgICAgICAic3R4ZGluaGVy aXQiOiBib29sLCAtLSBwZ19zdGF0aXN0aWNfZXh0X2RhdGEuc3R4ZGluaGVyaXQKKyAqICAgICAg IC0tIHN0eGRuZGlzdGluY3QgYW5kIHN0eGRkZXBlbmRlbmNpZXMgYXJlIG9uIHYxMisKKyAqICAg ICAgICJzdHhkbmRpc3RpbmN0IjogdGV4dCwgLS0gcGdfc3RhdGlzdGljX2V4dF9kYXRhLnN0eGRu ZGlzaW5jdDo6dGV4dAorICogICAgICAgInN0eGRkZXBlbmRlbmNpZXMiOiB0ZXh0LCAtLSBwZ19z dGF0aXN0aWNfZXh0X2RhdGEuc3R4ZGRlcGVuY2llczo6dGV4dAorICogICAgICAgLS0gc3R4ZGV4 cHIgaXMgb24gdjEyKworICogICAgICAgInN0eGRtY3YiOiBbCisgKiAgICAgICAgIHsKKyAqICAg ICAgICAgICAiaW5kZXgiOiBudW1iZXIsCisgKiAgICAgICAgICAgIm51bGxzIjogW2Jvb2xdLAor ICogICAgICAgICAgICJ2YWx1ZXMiOiBbdGV4dF0sCisgKiAgICAgICAgICAgImZyZXF1ZW5jeSI6 IG51bWJlciwKKyAqICAgICAgICAgICAiYmFzZV9mcmVxdWVuY3kiOiBudW1iZXIKKyAqICAgICAg ICAgfQorICogICAgICAgXSwKKyAqICAgICAgIC0tIHN0eGRleHByIGlzIG9uIHYxNCsKKyAqICAg ICAgICJzdHhkZXhwciI6IFsKKyAqICAgICAgICAgeworICogICAgICAgICAgICAic3RhYXR0bnVt IjogbnVtYmVyLCAtLSBwZ19zdGF0aXN0aWMuc3RhYXR0bnVtCisgKiAgICAgICAgICAgICJzdGFp bmhlcml0IjogYm9vbCwgLS0gcGdfc3RhdGlzdGljLnN0YWluaGVyaXQKKyAqICAgICAgICAgICAg InN0YW51bGxmcmFjIjogbnVtYmVyLCAtLSBwZ19zdGF0aXN0aWMuc3RhbnVsbGZyYWMKKyAqICAg ICAgICAgICAgInN0YXdpZHRoIjogbnVtYmVyLCAtLSBwZ19zdGF0aXN0aWMuc3Rhd2lkdGgKKyAq ICAgICAgICAgICAgInN0YWRpc3RpbmN0IjogbnVtYmVyLCAtLSBwZ19zdGF0aXN0aWMuc3RhZGlz dGluY3QKKyAqICAgICAgICAgICAgInN0YWtpbmQxIjogbnVtYmVyLCAtLSBwZ19zdGF0aXN0aWMu c3Rha2luZDEKKyAqICAgICAgICAgICAgInN0YWtpbmQyIjogbnVtYmVyLCAtLSBwZ19zdGF0aXN0 aWMuc3Rha2luZDIKKyAqICAgICAgICAgICAgInN0YWtpbmQzIjogbnVtYmVyLCAtLSBwZ19zdGF0 aXN0aWMuc3Rha2luZDMKKyAqICAgICAgICAgICAgInN0YWtpbmQ0IjogbnVtYmVyLCAtLSBwZ19z dGF0aXN0aWMuc3Rha2luZDQKKyAqICAgICAgICAgICAgInN0YWtpbmQ1IjogbnVtYmVyLCAtLSBw Z19zdGF0aXN0aWMuc3Rha2luZDUKKyAqICAgICAgICAgICAgInN0YW9wMSI6IG51bWJlciwgLS0g cGdfc3RhdGlzdGljLnN0YW9wMQorICogICAgICAgICAgICAic3Rhb3AyIjogbnVtYmVyLCAtLSBw Z19zdGF0aXN0aWMuc3Rhb3AyCisgKiAgICAgICAgICAgICJzdGFvcDMiOiBudW1iZXIsIC0tIHBn X3N0YXRpc3RpYy5zdGFvcDMKKyAqICAgICAgICAgICAgInN0YW9wNCI6IG51bWJlciwgLS0gcGdf c3RhdGlzdGljLnN0YW9wNAorICogICAgICAgICAgICAic3Rhb3A1IjogbnVtYmVyLCAtLSBwZ19z dGF0aXN0aWMuc3Rhb3A1CisgKiAgICAgICAgICAgICJzdGFjb2xsMSI6IG51bWJlciwgLS0gcGdf c3RhdGlzdGljLnN0YWNvbGwxCisgKiAgICAgICAgICAgICJzdGFjb2xsMiI6IG51bWJlciwgLS0g cGdfc3RhdGlzdGljLnN0YWNvbGwyCisgKiAgICAgICAgICAgICJzdGFjb2xsMyI6IG51bWJlciwg LS0gcGdfc3RhdGlzdGljLnN0YWNvbGwzCisgKiAgICAgICAgICAgICJzdGFjb2xsNCI6IG51bWJl ciwgLS0gcGdfc3RhdGlzdGljLnN0YWNvbGw0CisgKiAgICAgICAgICAgICJzdGFjb2xsNSI6IG51 bWJlciwgLS0gcGdfc3RhdGlzdGljLnN0YWNvbGw1CisgKiAgICAgICAgICAgIC0tIHN0YW51bWJl cnNOIGFyZSBjYXN0IHRvIHN0cmluZyB0byBhaWQgYXJyYXlfaW4oKQorICogICAgICAgICAgICAi c3RhbnVtYmVyczEiOiBzdHJpbmcsIC0tIHBnX3N0YXRpc3RpYy5zdGFudW1iZXJzMTo6dGV4dAor ICogICAgICAgICAgICAic3RhbnVtYmVyczIiOiBzdHJpbmcsIC0tIHBnX3N0YXRpc3RpYy5zdGFu dW1iZXJzMjo6dGV4dAorICogICAgICAgICAgICAic3RhbnVtYmVyczMiOiBzdHJpbmcsIC0tIHBn X3N0YXRpc3RpYy5zdGFudW1iZXJzMzo6dGV4dAorICogICAgICAgICAgICAic3RhbnVtYmVyczQi OiBzdHJpbmcsIC0tIHBnX3N0YXRpc3RpYy5zdGFudW1iZXJzNDo6dGV4dAorICogICAgICAgICAg ICAic3RhbnVtYmVyczUiOiBzdHJpbmcsIC0tIHBnX3N0YXRpc3RpYy5zdGFudW1iZXJzNTo6dGV4 dAorICogICAgICAgICAgICAtLSBzdGF2YWx1ZXNOIGFyZSBjYXN0IHRvIHN0cmluZyB0byBhaWQg YXJyYXlfaW4oKQorICogICAgICAgICAgICAic3RhdmFsdWVzMSI6IHN0cmluZywgLS0gcGdfc3Rh dGlzdGljLnN0YXZhbHVlczE6OnRleHQKKyAqICAgICAgICAgICAgInN0YXZhbHVlczIiOiBzdHJp bmcsIC0tIHBnX3N0YXRpc3RpYy5zdGF2YWx1ZXMyOjp0ZXh0CisgKiAgICAgICAgICAgICJzdGF2 YWx1ZXMzIjogc3RyaW5nLCAtLSBwZ19zdGF0aXN0aWMuc3RhdmFsdWVzMzo6dGV4dAorICogICAg ICAgICAgICAic3RhdmFsdWVzNCI6IHN0cmluZywgLS0gcGdfc3RhdGlzdGljLnN0YXZhbHVlczQ6 OnRleHQKKyAqICAgICAgICAgICAgInN0YXZhbHVlczUiOiBzdHJpbmcgLS0gcGdfc3RhdGlzdGlj LnN0YXZhbHVlczU6OnRleHQKKyAqICAgICAgICAgfQorICogICAgICAgXQorICogICAgIH0KKyAq ICAgXSwKKyAqICAgInR5cGVzIjogWworICogICAgIC0tIGV4cG9ydCBvZiBhbGwgcGdfdHlwZSBy ZWZlcmVuY2VkIGluIHRoaXMganNvbiBkb2MKKyAqCSAgIHsKKyAqICAgICAgICAib2lkIjogbnVt YmVyLCAtLSBwZ190eXBlLm9pZAorICogICAgICAgICJ0eXBuYW1lIjogc3RyaW5nLCAtLSBwZ190 eXBlLnR5cG5hbWUKKyAqICAgICAgICAibnNwbmFtZSI6IHN0cmluZyAtLSBzY2hlbWEgbmFtZSBm b3IgdGhlIHBnX3R5cGUKKyAqICAgICB9CisgKiAgIF0sCisgKiAgICJjb2xsYXRpb25zIjogWwor ICogICAgIC0tIGV4cG9ydCBhbGwgcGdfY29sbGF0aW9uIHJlZmVyZW5jZSBpbiB0aGlzIGpzb24g ZG9jCisgKiAgICAgeworICogICAgICAgICJvaWQiOiBudW1iZXIsIC0tIHBnX2NvbGxhdGlvbi5v aWQKKyAqICAgICAgICAiY29sbG5hbWUiOiBzdHJpbmcsIC0tIHBnX2NvbGxhdGlvbi5jb2xsbmFt ZQorICogICAgICAgICJuc3BuYW1lIjogc3RyaW5nIC0tIHNjaGVtYSBuYW1lIGZvciB0aGUgcGdf Y29sbGF0aW9uCisgKiAgICAgfQorICogICBdLAorICogICAib3BlcmF0b3JzIjogWworICogICAg IC0tIGV4cG9ydCBhbGwgcGdfb3BlcmF0b3IgcmVmZXJlbmNlIGluIHRoaXMganNvbiBkb2MKKyAq ICAgICB7CisgKiAgICAgICAgIm9pZCI6IG51bWJlciwgLS0gcGdfb3BlcmF0b3Iub2lkCisgKiAg ICAgICAgImNvbGxuYW1lIjogc3RyaW5nLCAtLSBwZ19vcHJuYW1lCisgKiAgICAgICAgIm5zcG5h bWUiOiBzdHJpbmcgLS0gc2NoZW1hIG5hbWUgZm9yIHRoZSBwZ19vcGVyYXRvcgorICogICAgIH0K KyAqICAgXSwKKyAqICAgImF0dHJpYnV0ZXMiOiBbCisgKiAgICAgLS0gZXhwb3J0IGFsbCBwZ19h dHRyaWJ1dGUgZm9yIHRoZSBleHBvcnRlZCByZWxhdGlvbgorICogICAgIHsKKyAqICAgICAgICAi YXR0bnVtIjogbnVtYmVyLCAtLSBwZ19hdHRyaWJ1dGUuYXR0bnVtCisgKiAgICAgICAgImF0dG5h bWUiOiBzdHJpbmcsIC0tIHBnX2F0dHJpYnV0ZS5hdHRuYW1lCisgKiAgICAgICAgImF0dHR5cGlk IjogbnVtYmVyLCAtLSBwZ19hdHRyaWJ1dGUuYXR0dHlwaWQKKyAqICAgICAgICAiYXR0Y29sbGF0 aW9uIjogbnVtYmVyIC0tIHBnX2F0dHJpYnV0ZS5hdHRjb2xsYXRpb24KKyAqICAgICB9CisgKiAg IF0KKyAqICB9CisgKgorICogRWFjaCBzZXJ2ZXIgdmVyaW9uIGV4cG9ydHMgYSBzdWJzZXQgb2Yg dGhpcyBmb3JtYXQuIFRoZSBleHBvcnRlZCBmb3JtYXQKKyAqIGNhbiBhbmQgd2lsbCBjaGFuZ2Ug d2l0aCBlYWNoIG5ldyB2ZXJzaW9uLCBhbmQgdGhpcyBmdW5jdGlvbiB3aWxsIGhhdmUKKyAqIHRv IGFjY291bnQgZm9yIHRob3NlIHZhcmlhdGlvbnMuCisgKgorICogU3RhdGlzdGljcyBpbXBvcnRl ZCBmcm9tIHZlcnNpb24gMTUgYW5kIGhpZ2hlciBjYW4gcG90ZW50aWFsbHkgaGF2ZSB0d28KKyAq IHJlc3VsdCByb3dzLCBvbmUgd2l0aCBzdHhkaW5oZXJpdCA9IGZhbHNlIGFuZCBvbmUgZm9yIHN0 eGRpbmhlcml0ID0gdHJ1ZQorICoKKyAqLworRGF0dW0KK3BnX2ltcG9ydF9leHRfc3RhdHMoUEdf RlVOQ1RJT05fQVJHUykKK3sKKwljb25zdCBjaGFyICpicV9zcWwgPQorCQkiU0VMRUNUIGN1cnJl bnRfc2V0dGluZygnc2VydmVyX3ZlcnNpb25fbnVtJykgQVMgY3VycmVudF92ZXJzaW9uLCBlYi4q ICIKKwkJIkZST00ganNvbmJfdG9fcmVjb3JkKCQxKSBBUyBlYiggIgorCQkiICAgIHNlcnZlcl92 ZXJzaW9uX251bSBpbnRlZ2VyLCAiCisJCSIgICAgc3R4b2lkIE9pZCwgIgorCQkiICAgIHJlbG9p ZCBPaWQsICIKKwkJIiAgICBzdHhuYW1lIHRleHQsICIKKwkJIiAgICBzdHhuc3BuYW1lIHRleHQs ICIKKwkJIiAgICByZWxuYW1lIHRleHQsICIKKwkJIiAgICBuc3BuYW1lIHRleHQsICIKKwkJIiAg ICBzdHhrZXlzIHRleHQsICIKKwkJIiAgICBzdHhraW5kIHRleHQsICIKKwkJIiAgICBzdHhuZGlz dGluY3QgdGV4dCwgIgorCQkiICAgIHN0eGRlcGVuZGVuY2llcyB0ZXh0LCAiCisJCSIgICAgZGF0 YSBqc29uYiwgIgorCQkiICAgIGF0dHJpYnV0ZXMganNvbmIsICIKKwkJIiAgICBjb2xsYXRpb25z IGpzb25iLCAiCisJCSIgICAgb3BlcmF0b3JzIGpzb25iLCAiCisJCSIgICAgdHlwZXMganNvbmIp ICI7CisKKwllbnVtIHsKKwkJQlFfQ1VSUkVOVF9WRVJTSU9OX05VTSA9IDAsCisJCUJRX1NFUlZF Ul9WRVJTSU9OX05VTSwKKwkJQlFfU1RYT0lELAorCQlCUV9SRUxPSUQsCisJCUJRX1NUWE5BTUUs CisJCUJRX1NUWE5TUE5BTUUsCisJCUJRX1JFTE5BTUUsCisJCUJRX05TUE5BTUUsCisJCUJRX1NU WEtFWVMsCisJCUJRX1NUWEtJTkQsCisJCUJRX1NUWE5ESVNUSU5DVCwKKwkJQlFfU1RYREVQRU5E RU5DSUVTLAorCQlCUV9EQVRBLAorCQlCUV9BVFRSSUJVVEVTLAorCQlCUV9DT0xMQVRJT05TLAor CQlCUV9PUEVSQVRPUlMsCisJCUJRX1RZUEVTLAorCQlOVU1fQlFfQ09MUworCX07CisKKwkvKiBB bGwgdmVyc2lvbnMgb2YgdGhlIFNUWEQgcXVlcnkgaGF2ZSB0aGUgc2FtZSBjb2x1bW4gc2lnbmF0 dXJlICovCisJZW51bSB7CisJCVNUWERfSU5IRVJJVCA9IDAsCisJCVNUWERfTkRJU1RJTkNULAor CQlTVFhEX0RFUEVOREVOQ0lFUywKKwkJU1RYRF9NQ1YsCisJCVNUWERfRVhQUiwKKwkJTlVNX1NU WERfQ09MUworCX07CisKKyNkZWZpbmUgQlFfTkFSR1MgMQorCisJT2lkCQlzdHhpZDsKKwlib29s CXZhbGlkYXRlOworCWJvb2wJcmVxdWlyZV9tYXRjaF9vaWRzOworCisJT2lkCQlicV9hcmd0eXBl c1tCUV9OQVJHU10gPSB7IEpTT05CT0lEIH07CisJRGF0dW0JYnFfYXJnc1tCUV9OQVJHU107CisK KwlpbnQJCXJldDsKKworCVNQSVR1cGxlVGFibGUgICp0dXB0YWJsZTsKKworCVJlbGF0aW9uCXJl bDsKKwlUdXBsZURlc2MJdHVwZGVzYzsKKwlpbnQJCQluYXR0czsKKworCUhlYXBUdXBsZQlldHVw OworCVJlbGF0aW9uCXNkOworCisJRm9ybV9wZ19zdGF0aXN0aWNfZXh0CXN0eGZvcm07CisKKwlT dGF0RXh0RW50cnkgICAqc3R4ZW50cnk7CisJVmFjQXR0clN0YXRzICAqKnJlbHN0YXRzOyAvKiBh bGwgcmVsYXRpb25zIGF0dHJpYnV0ZXMgKi8KKwlWYWNBdHRyU3RhdHMgICoqZXh0c3RhdHM7IC8q IGVudHJpZXMgcmVsZXZlbmF0IHRvIHRoZSBleHRzdGF0ICovCisJVmFjQXR0clN0YXRzICAqKmV4 cHJfc3RhdHM7IC8qIGV4cHJlc3Npb25zIGluIHRoZSBleHRzdGF0ICovCisJaW50CQkJCW5leHBy czsKKwlpbnQJCQkJbmNvbHM7CisKKwlEYXR1bQlicV9kYXR1bXNbTlVNX0JRX0NPTFNdOworCWJv b2wJYnFfbnVsbHNbTlVNX0JRX0NPTFNdOworCisJaW50CQlpOworCWludDMyCXNlcnZlcl92ZXJz aW9uX251bTsKKwlpbnQzMgljdXJyZW50X3ZlcnNpb25fbnVtOworCisJaWYgKFBHX0FSR0lTTlVM TCgwKSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFS QU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJleHRlbmRlZCBzdGF0aXN0aWNzIG9pZCBjYW5u b3QgYmUgTlVMTCIpKSk7CisJc3R4aWQgPSBQR19HRVRBUkdfT0lEKDApOworCisJaWYgKFBHX0FS R0lTTlVMTCgxKSkKKwkJUEdfUkVUVVJOX0JPT0woZmFsc2UpOworCWJxX2FyZ3NbMF0gPSBQR19H RVRBUkdfREFUVU0oMSk7CisKKwlpZiAoUEdfQVJHSVNOVUxMKDIpKQorCQl2YWxpZGF0ZSA9IGZh bHNlOworCWVsc2UKKwkJdmFsaWRhdGUgPSBQR19HRVRBUkdfQk9PTCgyKTsKKworCWlmIChQR19B UkdJU05VTEwoMykpCisJCXJlcXVpcmVfbWF0Y2hfb2lkcyA9IGZhbHNlOworCWVsc2UKKwkJcmVx dWlyZV9tYXRjaF9vaWRzID0gUEdfR0VUQVJHX0JPT0woMyk7CisKKwlzZCA9IHRhYmxlX29wZW4o U3RhdGlzdGljUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisJZXR1cCA9IFNlYXJjaFN5 c0NhY2hlQ29weTEoU1RBVEVYVE9JRCwgT2JqZWN0SWRHZXREYXR1bShzdHhpZCkpOworCWlmICgh SGVhcFR1cGxlSXNWYWxpZChldHVwKSkKKwkJZWxvZyhFUlJPUiwgInBnX3N0YXRpc3RpY19leHQg ZW50cnkgZm9yIG9pZCAldSB2YW5pc2hlZCBkdXJpbmcgc3RhdGlzdGljcyBpbXBvcnQiLAorCQkJ IHN0eGlkKTsKKworCXN0eGZvcm0gPSAoRm9ybV9wZ19zdGF0aXN0aWNfZXh0KSBHRVRTVFJVQ1Qo ZXR1cCk7CisKKwlyZWwgPSByZWxhdGlvbl9vcGVuKHN0eGZvcm0tPnN0eHJlbGlkLCBTaGFyZVVw ZGF0ZUV4Y2x1c2l2ZUxvY2spOworCisJdHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IocmVsKTsK KwluYXR0cyA9IHR1cGRlc2MtPm5hdHRzOworCisJcmVsc3RhdHMgPSAoVmFjQXR0clN0YXRzICoq KSBwYWxsb2MobmF0dHMgKiBzaXplb2YoVmFjQXR0clN0YXRzICopKTsKKwlmb3IgKGkgPSAwOyBp IDwgbmF0dHM7IGkrKykKKwkJcmVsc3RhdHNbaV0gPSBleGFtaW5lX3JlbF9hdHRyaWJ1dGUocmVs LCBpKzEsIE5VTEwpOworCisJc3R4ZW50cnkgPSBjcmVhdGVfc3RhdF9leHRfZW50cnkoZXR1cCk7 CisJZXh0c3RhdHMgPSBsb29rdXBfdmFyX2F0dHJfc3RhdHMocmVsLCBzdHhlbnRyeS0+Y29sdW1u cywgc3R4ZW50cnktPmV4cHJzLAorCQkJCQkJCQkJIG5hdHRzLCByZWxzdGF0cyk7CisKKwkvKiBv bmx5IHRoZSBzdGF0cyB0aGF0IHdlcmUgZGVyaXZlZCBmcm9tIHBnX3N0YXRpc3RpY19leHQgKi8K KwluY29scyA9IGJtc19udW1fbWVtYmVycyhzdHhlbnRyeS0+Y29sdW1ucyk7CisJZXhwcl9zdGF0 cyA9ICZleHRzdGF0c1tuY29sc107CisJbmV4cHJzID0gbGlzdF9sZW5ndGgoc3R4ZW50cnktPmV4 cHJzKTsKKworCS8qCisJICogQ29ubmVjdCB0byBTUEkgbWFuYWdlcgorCSAqLworCWlmICgocmV0 ID0gU1BJX2Nvbm5lY3QoKSkgPCAwKQorCQllbG9nKEVSUk9SLCAiU1BJIGNvbm5lY3QgZmFpbHVy ZSAtIHJldHVybmVkICVkIiwgcmV0KTsKKworCS8qCisJICogRmV0Y2ggdGhlIGJhc2UgbGV2ZWwg b2YgdGhlIHN0YXRzIGpzb24uIFRoZSByZXN1bHRzIGZvdW5kIHRoZXJlIHdpbGwKKwkgKiBkZXRl cm1pbmUgaG93IHRoZSBuZXN0ZWQgZGF0YSB3aWxsIGJlIGhhbmRsZWQuCisJICovCisJcmV0ID0g U1BJX2V4ZWN1dGVfd2l0aF9hcmdzKGJxX3NxbCwgQlFfTkFSR1MsIGJxX2FyZ3R5cGVzLCBicV9h cmdzLAorCQkJCQkJCQlOVUxMLCB0cnVlLCAxKTsKKworCS8qCisJICogT25seSBhbGxvdyBvbmUg cXVhbGlmeWluZyB0dXBsZQorCSAqLworCWlmIChyZXQgIT0gU1BJX09LX1NFTEVDVCkKKwkJZXJl cG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVF KSwKKwkJCQkgZXJybXNnKCJzdGF0aXN0aWMgZXhwb3J0IEpTT04gaXMgbm90IGluIHByb3BlciBm b3JtYXQiKSkpOworCisJaWYgKFNQSV9wcm9jZXNzZWQgIT0gMSkKKwkJZXJlcG9ydChFUlJPUiwK KwkJCQkoZXJyY29kZShFUlJDT0RFX0NBUkRJTkFMSVRZX1ZJT0xBVElPTiksCisJCQkJIGVycm1z ZygicGdfc3RhdGlzdGljX2V4dCBleHBvcnQgSlNPTiBzaG91bGQgcmV0dXJuIGV4YWN0bHkgb25l IGJhc2Ugb2JqZWN0IikpKTsKKworCXR1cHRhYmxlID0gU1BJX3R1cHRhYmxlOworCWhlYXBfZGVm b3JtX3R1cGxlKHR1cHRhYmxlLT52YWxzWzBdLCB0dXB0YWJsZS0+dHVwZGVzYywgYnFfZGF0dW1z LCBicV9udWxscyk7CisKKwkvKgorCSAqIENoZWNrIGZvciB2YWxpZCBjb21iaW5hdGlvbiBvZiBl eHBvcnRlZCBzZXJ2ZXJfdmVyc2lvbl9udW0gdG8gdGhlIGxvY2FsCisJICogc2VydmVyX3ZlcnNp b25fbnVtLiBXZSB3b24ndCBiZSByZXVzaW5nIHRoZXNlIHZhbHVlcyBpbiBhIHF1ZXJ5IHNvIHVz ZQorCSAqIHNjcmF0Y2ggZGF0dW0vbnVsbCB2YXJzLgorCSAqLworCWlmIChicV9udWxsc1tCUV9D VVJSRU5UX1ZFUlNJT05fTlVNXSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJD T0RFX1NRTF9KU09OX0lURU1fQ0FOTk9UX0JFX0NBU1RfVE9fVEFSR0VUX1RZUEUpLAorCQkJCSBl cnJtc2coImN1cnJlbnRfdmVyc2lvbl9udW0gY2Fubm90IGJlIG51bGwiKSkpOworCisJaWYgKGJx X251bGxzW0JRX1NFUlZFUl9WRVJTSU9OX05VTV0pCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVy cmNvZGUoRVJSQ09ERV9TUUxfSlNPTl9JVEVNX0NBTk5PVF9CRV9DQVNUX1RPX1RBUkdFVF9UWVBF KSwKKwkJCQkgZXJybXNnKCJzZXJ2ZXJfdmVyc2lvbl9udW0gY2Fubm90IGJlIG51bGwiKSkpOwor CisJY3VycmVudF92ZXJzaW9uX251bSA9IERhdHVtR2V0SW50MzIoYnFfZGF0dW1zW0JRX0NVUlJF TlRfVkVSU0lPTl9OVU1dKTsKKwlzZXJ2ZXJfdmVyc2lvbl9udW0gPSBEYXR1bUdldEludDMyKGJx X2RhdHVtc1tCUV9TRVJWRVJfVkVSU0lPTl9OVU1dKTsKKworCWlmIChzZXJ2ZXJfdmVyc2lvbl9u dW0gPD0gMTAwMDAwKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfTlVN RVJJQ19WQUxVRV9PVVRfT0ZfUkFOR0UpLAorCQkJCSBlcnJtc2coIkNhbm5vdCBpbXBvcnQgc3Rh dGlzdGljcyBmcm9tIHNlcnZlcnMgYmVsb3cgdmVyc2lvbiAxMC4wIikpKTsKKworCWlmIChzZXJ2 ZXJfdmVyc2lvbl9udW0gPiBjdXJyZW50X3ZlcnNpb25fbnVtKQorCQllcmVwb3J0KEVSUk9SLAor CQkJCShlcnJjb2RlKEVSUkNPREVfTlVNRVJJQ19WQUxVRV9PVVRfT0ZfUkFOR0UpLAorCQkJCSBl cnJtc2coIkNhbm5vdCBpbXBvcnQgc3RhdGlzdGljcyBmcm9tIHNlcnZlciB2ZXJzaW9uICVkIHRv ICVkIiwKKwkJCQkJCXNlcnZlcl92ZXJzaW9uX251bSwgY3VycmVudF92ZXJzaW9uX251bSkpKTsK KworCWlmICh2YWxpZGF0ZSkKKwl7CisJCXZhbGlkYXRlX2V4cG9ydGVkX3R5cGVzKGJxX2RhdHVt c1tCUV9UWVBFU10sIGJxX251bGxzW0JRX1RZUEVTXSk7CisJCXZhbGlkYXRlX2V4cG9ydGVkX2Nv bGxhdGlvbnMoYnFfZGF0dW1zW0JRX0NPTExBVElPTlNdLCBicV9udWxsc1tCUV9DT0xMQVRJT05T XSk7CisJCXZhbGlkYXRlX2V4cG9ydGVkX29wZXJhdG9ycyhicV9kYXR1bXNbQlFfT1BFUkFUT1JT XSwgYnFfbnVsbHNbQlFfT1BFUkFUT1JTXSk7CisJCXZhbGlkYXRlX2V4cG9ydGVkX2F0dHJpYnV0 ZXMoYnFfZGF0dW1zW0JRX0FUVFJJQlVURVNdLCBicV9udWxsc1tCUV9BVFRSSUJVVEVTXSk7CisJ fQorCisJaWYgKHNlcnZlcl92ZXJzaW9uX251bSA+PSAxMjAwMDApCisJeworCQkvKiBwZ19zdGF0 aXN0aWNfZXh0X2RhdGEgZXhwb3J0IGZvciBtb2Rlcm4gdmVyc2lvbnMgKi8KKworI2RlZmluZSBT VFhEX05BUkdTIDEKKworCQlPaWQJCXN0eGRfYXJndHlwZXNbU1RYRF9OQVJHU10gPSB7IEpTT05C T0lEIH07CisJCURhdHVtCXN0eGRfYXJnc1tTVFhEX05BUkdTXSA9IHsgYnFfZGF0dW1zW0JRX0RB VEFdIH07CisJCWNoYXIJc3R4ZF9udWxsc1tTVFhEX05BUkdTXSA9IHsgYnFfbnVsbHNbQlFfREFU QV0gPyAnbicgOiAnICcgfTsKKworCQljb25zdCBjaGFyICpzdHhkX3NxbCA9CisJCQkiU0VMRUNU IGQuKiAiCisJCQkiRlJPTSBqc29uYl90b19yZWNvcmRzZXQoJDEpIEFTIGQgKCAiCisJCQkiICAg IHN0eGRpbmhlcml0IGJvb2wsICIKKwkJCSIgICAgc3R4ZG5kaXN0aW5jdCB0ZXh0LCAiCisJCQki ICAgIHN0eGRkZXBlbmRlbmNpZXMgdGV4dCwgIgorCQkJIiAgICBzdHhkbWN2IGpzb25iLCAiCisJ CQkiICAgIHN0eGRleHByIGpzb25iKSAiCisJCQkiT1JERVIgQlkgZC5zdHhkaW5oZXJpdCAiOwor CisJCS8qIFZlcnNpb25zIDEyKyBjYW5ub3QgaGF2ZSBuZGlzdGluY3Qgb3IgZGVwZW5kZW5jaWVz IG9uIHRoZSBiYXNlIHF1ZXJ5ICovCisJCWlmICghYnFfbnVsbHNbQlFfU1RYTkRJU1RJTkNUXSkK KwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVU RVJfVkFMVUUpLAorCQkJCQkgZXJybXNnKCJLZXkgc3R4bmRpc3RpbmN0IG5vdCBhbGxvd2VkIG9u IGV4cG9ydHMgb2Ygc2VydmVycyB2MTIgYW5kIGxhdGVyIiksCisJCQkJCSBlcnJoaW50KCJVc2Ug c3R4ZG5kaXN0aW5jdCBpbnN0ZWFkIikpKTsKKworCQlpZighYnFfbnVsbHNbQlFfU1RYREVQRU5E RU5DSUVTXSkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJ RF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkgZXJybXNnKCJLZXkgc3R4ZGVwZW5kZW5jaWVzIG5v dCBhbGxvd2VkIG9uIGV4cG9ydHMgb2Ygc2VydmVycyB2MTIgYW5kIGxhdGVyIiksCisJCQkJCSBl cnJoaW50KCJVc2Ugc3R4ZGRlcGVuZGVuY2llcyBpbnN0ZWFkIikpKTsKKworCQlyZXQgPSBTUElf ZXhlY3V0ZV93aXRoX2FyZ3Moc3R4ZF9zcWwsIFNUWERfTkFSR1MsIHN0eGRfYXJndHlwZXMsIHN0 eGRfYXJncywKKwkJCQkJCQkJCXN0eGRfbnVsbHMsIHRydWUsIDApOworI3VuZGVmIFNUWERfTkFS R1MKKwl9CisJZWxzZQorCXsKKyNkZWZpbmUgU1RYRF9OQVJHUyAyCisJCU9pZAkJc3R4ZF9hcmd0 eXBlc1tTVFhEX05BUkdTXSA9IHsKKwkJCQkJVEVYVE9JRCwKKwkJCQkJVEVYVE9JRCB9OworCQlE YXR1bQlzdHhkX2FyZ3NbU1RYRF9OQVJHU10gPSB7CisJCQkJCWJxX2RhdHVtc1tCUV9TVFhORElT VElOQ1RdLAorCQkJCQlicV9kYXR1bXNbQlFfU1RYREVQRU5ERU5DSUVTXSB9OworCQljaGFyCXN0 eGRfbnVsbHNbU1RYRF9OQVJHU10gPSB7CisJCQkJCWJxX251bGxzW0JRX1NUWE5ESVNUSU5DVF0g PyAnbicgOiAnICcsCisJCQkJCWJxX251bGxzW0JRX0RBVEFdICA/ICduJyA6ICcgJyB9OworCisJ CS8qIHBnX3N0YXRpc3RpY19leHRfZGF0YSBleHBvcnQgZm9yIHZlcnNpb25zIHByaW9yIHRvIHRo ZSB0YWJsZSBleGlzdGluZyAqLworCQljb25zdCBjaGFyICpzdHhkX3NxbCA9CisJCQkiU0VMRUNU ICIKKwkJCSIJTlVMTDo6Ym9vbGVhbiBBUyBzdHhkaW5oZXJpdCwgIgorCQkJIiAgICQxIEFTIHN0 eGRuZGlzdGluY3QsICIKKwkJCSIgICAkMiBBUyBzdHhkZGVwZW5kZW5jaWVzLCAiCisJCQkiICAg TlVMTDo6anNvbmIgQVMgc3R4ZG1jdiwgIgorCQkJIiAgIE5VTEw6Ompzb25iIEFTIHN0eGRleHBy ICI7CisKKwkJcmV0ID0gU1BJX2V4ZWN1dGVfd2l0aF9hcmdzKHN0eGRfc3FsLCBTVFhEX05BUkdT LCBzdHhkX2FyZ3R5cGVzLCBzdHhkX2FyZ3MsCisJCQkJCQkJCQlzdHhkX251bGxzLCB0cnVlLCAy KTsKKworI3VuZGVmIFNUWERfTkFSR1MKKwl9CisKKwlpZiAocmV0ICE9IFNQSV9PS19TRUxFQ1Qp CisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRF Ul9WQUxVRSksCisJCQkJIGVycm1zZygic3RhdGlzdGljIGV4cG9ydCBKU09OIGlzIG5vdCBpbiBw cm9wZXIgZm9ybWF0IikpKTsKKworCS8qIG92ZXJ3cml0ZSBwcmV2aW91cyB0dXB0YWJsZSAqLwor CXR1cHRhYmxlID0gU1BJX3R1cHRhYmxlOworCisJZm9yIChpID0gMDsgaSA8IHR1cHRhYmxlLT5u dW12YWxzOyBpKyspCisJeworCQlEYXR1bQkJCXN0eGRfZGF0dW1zW05VTV9CUV9DT0xTXTsKKwkJ Ym9vbAkJCXN0eGRfbnVsbHNbTlVNX0JRX0NPTFNdOworCQlib29sCQkJaW5oOworCQlNQ1ZMaXN0 CQkgICAqbWN2bGlzdDsKKwkJTVZEZXBlbmRlbmNpZXMgKmRlcGVuZGVuY2llczsKKwkJTVZORGlz dGluY3QJICAgKm5kaXN0aW5jdDsKKwkJRGF0dW0JCQlleHByczsKKworCQloZWFwX2RlZm9ybV90 dXBsZSh0dXB0YWJsZS0+dmFsc1tpXSwgdHVwdGFibGUtPnR1cGRlc2MsIHN0eGRfZGF0dW1zLAor CQkJCQkJICBzdHhkX251bGxzKTsKKworCQlpZiAoKCFzdHhkX251bGxzW1NUWERfTUNWXSkgJiYg KHNlcnZlcl92ZXJzaW9uX251bSA8IDEyMDAwMCkpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQko ZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJIGVycm1zZygi S2V5IHN0eGRtdiBub3QgYWxsb3dlZCBvbiBleHBvcnRzIG9mIHNlcnZlcnMgYmVyZm9yZSB2MTIi KSkpOworCisJCWlmICgoIXN0eGRfbnVsbHNbU1RYRF9FWFBSXSkgJiYgKHNlcnZlcl92ZXJzaW9u X251bSA8IDE0MDAwMCkpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RF X0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJIGVycm1zZygiS2V5IHN0eGRleHByIG5v dCBhbGxvd2VkIG9uIGV4cG9ydHMgb2Ygc2VydmVycyBiZXJmb3JlIHYxNCIpKSk7CisKKwkJaWYg KCghc3R4ZF9udWxsc1tTVFhEX0lOSEVSSVRdKSAmJiAoc2VydmVyX3ZlcnNpb25fbnVtIDwgMTUw MDAwKSkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9Q QVJBTUVURVJfVkFMVUUpLAorCQkJCQkgZXJybXNnKCJFeHRlbmRlZCBzdGF0aXN0aWNzIGZyb20g c2VydmVycyBwcmlvciB0byB2MTUgY2Fubm90IGNvbnRhaW4gaW5oZXJpdGVkIHN0YXRzIikpKTsK KworCQkvKiBWZXJzaW9ucyBwcmlvciB0byB2MTUgbmV2ZXIgaGF2ZSBzdHhkaW5oZXJ0IHNldCAq LworCQlpZiAoc3R4ZF9udWxsc1tTVFhEX0lOSEVSSVRdKQorCQkJaW5oID0gZmFsc2U7CisJCWVs c2UKKwkJCWluaCA9IERhdHVtR2V0Qm9vbChzdHhkX2RhdHVtc1tTVFhEX0lOSEVSSVRdKTsKKwor CQluZGlzdGluY3QgPSBzdGF0ZXh0X25kaXN0aW5jdF9pbXBvcnQoc3R4Zm9ybS0+c3R4cmVsaWQs CisJCQkJCQlzdHhkX2RhdHVtc1tTVFhEX05ESVNUSU5DVF0sIHN0eGRfbnVsbHNbU1RYRF9ORElT VElOQ1RdLAorCQkJCQkJYnFfZGF0dW1zW0JRX0FUVFJJQlVURVNdLCBicV9udWxsc1tCUV9BVFRS SUJVVEVTXSk7CisKKwkJZGVwZW5kZW5jaWVzID0gc3RhdGV4dF9kZXBlbmRlbmNpZXNfaW1wb3J0 KHN0eGZvcm0tPnN0eHJlbGlkLAorCQkJCQkJc3R4ZF9kYXR1bXNbU1RYRF9ERVBFTkRFTkNJRVNd LAorCQkJCQkJc3R4ZF9udWxsc1tTVFhEX0RFUEVOREVOQ0lFU10sCisJCQkJCQlicV9kYXR1bXNb QlFfQVRUUklCVVRFU10sIGJxX251bGxzW0JRX0FUVFJJQlVURVNdKTsKKworCQltY3ZsaXN0ID0g c3RhdGV4dF9tY3ZfaW1wb3J0KHN0eGRfZGF0dW1zW1NUWERfTUNWXSwgc3R4ZF9udWxsc1tTVFhE X01DVl0sCisJCQkJCQkJCQkgZXh0c3RhdHMpOworCisJCWV4cHJzID0gaW1wb3J0X2V4cHJlc3Np b25zKHN0eGRfZGF0dW1zW1NUWERfRVhQUl0sIHN0eGRfbnVsbHNbU1RYRF9FWFBSXSwKKwkJCQkJ CQkJICAgYnFfZGF0dW1zW0JRX09QRVJBVE9SU10sIGJxX251bGxzW0JRX09QRVJBVE9SU10sCisJ CQkJCQkJCSAgIGV4cHJfc3RhdHMsIG5leHBycyk7CisKKwkJc3RhdGV4dF9zdG9yZShzdHhlbnRy eS0+c3RhdE9pZCwgaW5oLCBuZGlzdGluY3QsIGRlcGVuZGVuY2llcywgbWN2bGlzdCwgZXhwcnMs IGV4dHN0YXRzKTsKKwl9CisKKwlyZWxhdGlvbl9jbG9zZShyZWwsIE5vTG9jayk7CisJdGFibGVf Y2xvc2Uoc2QsIFJvd0V4Y2x1c2l2ZUxvY2spOworCVNQSV9maW5pc2goKTsKKworCVBHX1JFVFVS Tl9CT09MKHRydWUpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9tY3Yu YyBiL3NyYy9iYWNrZW5kL3N0YXRpc3RpY3MvbWN2LmMKaW5kZXggNjI1NWNkMWY0Zi4uM2JhZmRl ODNkNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9tY3YuYworKysgYi9zcmMv YmFja2VuZC9zdGF0aXN0aWNzL21jdi5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSAiY2F0 YWxvZy9wZ19jb2xsYXRpb24uaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3N0YXRpc3RpY19leHQu aCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3N0YXRpc3RpY19leHRfZGF0YS5oIgorI2luY2x1ZGUg ImV4ZWN1dG9yL3NwaS5oIgogI2luY2x1ZGUgImZtZ3IuaCIKICNpbmNsdWRlICJmdW5jYXBpLmgi CiAjaW5jbHVkZSAibm9kZXMvbm9kZUZ1bmNzLmgiCkBAIC0yMTc3LDMgKzIxNzgsMTk0IEBAIG1j dl9jbGF1c2Vfc2VsZWN0aXZpdHlfb3IoUGxhbm5lckluZm8gKnJvb3QsIFN0YXRpc3RpY0V4dElu Zm8gKnN0YXQsCiAKIAlyZXR1cm4gczsKIH0KKworLyoKKyAqIHN0YXRleHRfbWN2X2ltcG9ydAor ICoKKyAqIFRoZSBtY3Ygc2VyaWFsaXphdGlvbiBpcyB0aGUganNvbiBlcXVpdmFsZW50IG9mIHRo ZQorICogcGdfbWN2X2xpc3RfaXRlbXMoKSByZXN1bHQgc2V0OgorICogWworICogICB7CisgKiAg ICAgImluZGV4IjogbnVtYmVyLAorICogICAgICJ2YWx1ZXMiOiBbc3RyaW5nXSwKKyAqICAgICAi bnVsbHMiOiBbYm9vbF0sCisgKiAgICAgImZyZXF1ZW5jeSI6IG51bWJlciwKKyAqICAgICAiYmFz ZV9mcmVxdWVuY3kiOiBudW1iZXIKKyAqICAgfQorICogXQorICoKKyAqIFRoZSB2YWx1ZXMgYXJl IHRleHQgc3RyaW5ncyB0aGF0IG11c3QgYmUgY29udmVydGVkIGludG8gZGF0dW1zIG9mIHRoZSB0 eXBlCisgKiBhcHByb3ByaWF0ZSBmb3IgdGhlaXIgY29ycmVzcG9uZGluZyBkaW1lbnNpb24uIFRo aXMgbWVhbnMgdGhhdCB3ZSBtdXN0CisgKiBjYXN0IGluZGl2aWR1YWwgZGF0dW1zIHJhdGhlciB0 aGFuIHRyeWluZyB0byB1c2UgYXJyYXlfaW4oKS4KKyAqCisgKi8KK01DVkxpc3QgKgorc3RhdGV4 dF9tY3ZfaW1wb3J0KERhdHVtIG1jdiwgYm9vbCBtY3ZfbnVsbCwgVmFjQXR0clN0YXRzICoqZXh0 c3RhdHMpCit7CisJY29uc3QgY2hhciAqc3FsID0KKwkJIlNFTEVDVCBtLiosIGFycmF5X2xlbmd0 aChtLm51bGxzLDEpIEFTIG5kaW1zICIKKwkJIkZST00ganNvbmJfdG9fcmVjb3Jkc2V0KCQxKSBB UyBtKGluZGV4IGludGVnZXIsIHZhbHVlcyB0ZXh0W10sICIKKwkJIiAgICAgICAgIG51bGxzIGJv b2xlYW5bXSwgZnJlcXVlbmN5IGZsb2F0OCwgYmFzZV9mcmVxdWVuY3kgZmxvYXQ4KSAiCisJCSJP UkRFUiBCWSBtLmluZGV4ICI7CisKKwllbnVtIHsKKwkJTUNWU19JTkRFWCA9IDAsCisJCU1DVlNf VkFMVUVTLAorCQlNQ1ZTX05VTExTLAorCQlNQ1ZTX0ZSRVFVRU5DWSwKKwkJTUNWU19CQVNFX0ZS RVFVRU5DWSwKKwkJTUNWU19ORElNUywKKwkJTlVNX01DVlNfQ09MUworCX07CisKKyNkZWZpbmUg TUNWU19OQVJHUyAxCisKKwlPaWQJCWFyZ3R5cGVzW01DVlNfTkFSR1NdID0geyBKU09OQk9JRCB9 OworCURhdHVtCWFyZ3NbTUNWU19OQVJHU10gPSB7IG1jdiB9OworCWNoYXIJYXJnbnVsbHNbTUNW U19OQVJHU10gPSB7IG1jdl9udWxsID8gJ24nIDogJyAnIH07CisJaW50CQluaXRlbXMgPSAwOwor CWludAkJbmRpbXMgPSAwOworCWludAkJcmV0OworCWludAkJaTsKKworCU1DVkxpc3QJCSAgICpt Y3ZsaXN0OworCVNQSVR1cGxlVGFibGUgICp0dXB0YWJsZTsKKwlPaWQJCQkJaW9wYXJhbXNbU1RB VFNfTUFYX0RJTUVOU0lPTlNdOworCUZtZ3JJbmZvCQlmaW5mb3NbU1RBVFNfTUFYX0RJTUVOU0lP TlNdOworCisJcmV0ID0gU1BJX2V4ZWN1dGVfd2l0aF9hcmdzKHNxbCwgTUNWU19OQVJHUywgYXJn dHlwZXMsIGFyZ3MsIGFyZ251bGxzLCB0cnVlLCAwKTsKKworCWlmIChyZXQgIT0gU1BJX09LX1NF TEVDVCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFS QU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJzdGF0aXN0aWMgZXhwb3J0IEpTT04gaXMgbm90 IGluIHByb3BlciBmb3JtYXQiKSkpOworCisJdHVwdGFibGUgPSBTUElfdHVwdGFibGU7CisJaWYg KHR1cHRhYmxlLT5udW12YWxzID4gMCkKKwl7CisJCS8qIG5kaW1zIHdpbGwgYmUgc2FtZSBmb3Ig YWxsIHJvd3MsIHNvIGp1c3QgY2hlY2sgZmlyc3Qgb25lICovCisJCWJvb2wJaXNudWxsOworCQlE YXR1bQlkID0gU1BJX2dldGJpbnZhbCh0dXB0YWJsZS0+dmFsc1swXSwgdHVwdGFibGUtPnR1cGRl c2MsCisJCQkJCQkJCSAgTUNWU19ORElNUysxLCAmaXNudWxsKTsKKworCQlpZiAoaXNudWxsKQor CQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRF Ul9WQUxVRSksCisJCQkJCSBlcnJtc2coIkluZGV0ZXJtaW5hdGUgbnVtYmVyIG9mIG1jdiBkaW1l bnNpb25zIikpKTsKKworCQluZGltcyA9IERhdHVtR2V0SW50MzIoZCk7CisJCW5pdGVtcyA9IHR1 cHRhYmxlLT5udW12YWxzOworCX0KKworCW1jdmxpc3QgPSAoTUNWTGlzdCAqKSBwYWxsb2MwKG9m ZnNldG9mKE1DVkxpc3QsIGl0ZW1zKSArCisJCQkJCQkJCSAgKHNpemVvZihNQ1ZJdGVtKSAqIG5p dGVtcykpOworCisJbWN2bGlzdC0+bWFnaWMgPSBTVEFUU19NQ1ZfTUFHSUM7CisJbWN2bGlzdC0+ dHlwZSA9IFNUQVRTX01DVl9UWVBFX0JBU0lDOworCW1jdmxpc3QtPm5pdGVtcyA9IG5pdGVtczsK KwltY3ZsaXN0LT5uZGltZW5zaW9ucyA9IG5kaW1zOworCisJLyogV2Ugd2lsbCBuZWVkIHRoZXNl IGlucHV0IGZ1bmN0aW9ucyAkbml0ZW1zIHRpbWVzLiAqLworCWZvciAoaSA9IDA7IGkgPCBuZGlt czsgaSsrKQorCXsKKwkJT2lkCQl0eXBpZCA9IGV4dHN0YXRzW2ldLT5hdHRydHlwaWQ7CisJCU9p ZAkJaW5mdW5jOworCisJCW1jdmxpc3QtPnR5cGVzW2ldID0gdHlwaWQ7CisJCWdldFR5cGVJbnB1 dEluZm8odHlwaWQsICZpbmZ1bmMsICZpb3BhcmFtc1tpXSk7CisJCWZtZ3JfaW5mbyhpbmZ1bmMs ICZmaW5mb3NbaV0pOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBuaXRlbXM7IGkrKykKKwl7CisJ CU1DVkl0ZW0JICAgKml0ZW0gPSAmbWN2bGlzdC0+aXRlbXNbaV07CisJCURhdHVtCQlkYXR1bXNb TlVNX01DVlNfQ09MU107CisJCWJvb2wJCW51bGxzW05VTV9NQ1ZTX0NPTFNdOworCQlBcnJheVR5 cGUgICphcnI7CisJCURhdHVtICAgICAgKmVsZW1zOworCQlib29sICAgICAgICplbG51bGxzOwor CQlpbnQgICAgICAgICBuZWxlbXM7CisKKwkJaW50CQkJZDsKKworCQloZWFwX2RlZm9ybV90dXBs ZSh0dXB0YWJsZS0+dmFsc1tpXSwgdHVwdGFibGUtPnR1cGRlc2MsIGRhdHVtcywgbnVsbHMpOwor CisJCWlmIChudWxsc1tNQ1ZTX1ZBTFVFU10pCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJy Y29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJIGVycm1zZygiZXh0 ZW5kZWQgc3RhdGlzdGljIG1jdiBleHBvcnQgY2Fubm90IGhhdmUgTlVMTCAlcyIsCisJCQkJCQkJ InZhbHVlcyIpKSk7CisJCWlmIChudWxsc1tNQ1ZTX05VTExTXSkKKwkJCWVyZXBvcnQoRVJST1Is CisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkg ZXJybXNnKCJleHRlbmRlZCBzdGF0aXN0aWMgbWN2IGV4cG9ydCBjYW5ub3QgaGF2ZSBOVUxMICVz IiwKKwkJCQkJCQkibnVsbHMiKSkpOworCQlpZiAobnVsbHNbTUNWU19GUkVRVUVOQ1ldKQorCQkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9W QUxVRSksCisJCQkJCSBlcnJtc2coImV4dGVuZGVkIHN0YXRpc3RpYyBtY3YgZXhwb3J0IGNhbm5v dCBoYXZlIE5VTEwgJXMiLAorCQkJCQkJCSJmcmVxdWVuY3kiKSkpOworCQlpZiAobnVsbHNbTUNW U19CQVNFX0ZSRVFVRU5DWV0pCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJD T0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJIGVycm1zZygiZXh0ZW5kZWQgc3Rh dGlzdGljIG1jdiBleHBvcnQgY2Fubm90IGhhdmUgTlVMTCAlcyIsCisJCQkJCQkJImJhc2VfZnJl cXVlbmN5IikpKTsKKworCQlpdGVtLT5mcmVxdWVuY3kgPSBEYXR1bUdldEZsb2F0OChkYXR1bXNb TUNWU19GUkVRVUVOQ1ldKTsKKwkJaXRlbS0+YmFzZV9mcmVxdWVuY3kgPSBEYXR1bUdldEZsb2F0 OChkYXR1bXNbTUNWU19CQVNFX0ZSRVFVRU5DWV0pOworCQlpdGVtLT52YWx1ZXMgPSAoRGF0dW0g KikgcGFsbG9jKHNpemVvZihEYXR1bSkgKiBuZGltcyk7CisJCWl0ZW0tPmlzbnVsbCA9IChib29s ICopIHBhbGxvYyhzaXplb2YoYm9vbCkgKiBuZGltcyk7CisKKwkJYXJyID0gRGF0dW1HZXRBcnJh eVR5cGVQKGRhdHVtc1tNQ1ZTX05VTExTXSk7CisJCWRlY29uc3RydWN0X2FycmF5KGFyciwgQk9P TE9JRCwgMSwgdHJ1ZSwgJ2MnLCAmZWxlbXMsICZlbG51bGxzLCAmbmVsZW1zKTsKKworCQlpZiAo bmVsZW1zICE9IG5kaW1zKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09E RV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCSBlcnJtc2coImV4dGVuZGVkIHN0YXRp c3RpYyBtY3YgJXMgYXJyYXkgZXhwZWN0ZWQgJWQgZWxlbWVudHMgYnV0ICVkIGZvdW5kIiwKKwkJ CQkJCQkibnVsbHMiLCBuZGltcywgbmVsZW1zKSkpOworCisJCWZvciAoZCA9IDA7IGQgPCBuZGlt czsgZCsrKQorCQl7CisJCQlpZiAoZWxudWxsc1tkXSkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJ CQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJy bXNnKCJleHRlbmRlZCBzdGF0aXN0aWMgbWN2ICVzIGFycmF5IGNhbm5vdCBjb250YWluIE5VTEwg dmFsdWVzIiwKKwkJCQkJCQkJIm51bGxzIikpKTsKKwkJCWl0ZW0tPmlzbnVsbFtkXSA9IERhdHVt R2V0Qm9vbChlbGVtc1tkXSk7CisJCX0KKworCQlhcnIgPSBEYXR1bUdldEFycmF5VHlwZVAoZGF0 dW1zW01DVlNfVkFMVUVTXSk7CisJCWRlY29uc3RydWN0X2FycmF5X2J1aWx0aW4oYXJyLCBURVhU T0lELCAmZWxlbXMsICZlbG51bGxzLCAmbmVsZW1zKTsKKworCQlpZiAobmVsZW1zICE9IG5kaW1z KQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFN RVRFUl9WQUxVRSksCisJCQkJCSBlcnJtc2coImV4dGVuZGVkIHN0YXRpc3RpYyBtY3YgJXMgYXJy YXkgZXhwZWN0ZWQgJWQgZWxlbWVudHMgYnV0ICVkIGZvdW5kIiwKKwkJCQkJCQkidmFsdWVzIiwg bmRpbXMsIG5lbGVtcykpKTsKKworCQlmb3IgKGQgPSAwOyBkIDwgbmRpbXM7IGQrKykKKwkJewor CQkJLyogaWYgdGhlIGVsZW1lbnQgaXMgYSBrbm93biBOVUxMLCBub3RoaW5nIHRvIGRlY29kZSAq LworCQkJaWYgKGl0ZW0tPmlzbnVsbFtkXSkKKwkJCQlpdGVtLT52YWx1ZXNbZF0gPSAoRGF0dW0p IDA7CisJCQllbHNlCisJCQl7CisJCQkJY2hhciAgICpzOworCisJCQkJaWYgKGVsbnVsbHNbZF0p CisJCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BB UkFNRVRFUl9WQUxVRSksCisJCQkJCQkJIGVycm1zZygiZXh0ZW5kZWQgc3RhdGlzdGljIG1jdiBu dWxscyBhcnJheSBpbiBjb25mbGljdCB3aXRoIHZhbHVlcyBhcnJheSIpKSk7CisKKwkJCQlzID0g VGV4dERhdHVtR2V0Q1N0cmluZyhlbGVtc1tkXSk7CisKKwkJCQlpdGVtLT52YWx1ZXNbZF0gPSBJ bnB1dEZ1bmN0aW9uQ2FsbCgmZmluZm9zW2RdLCBzLCBpb3BhcmFtc1tkXSwKKwkJCQkJCQkJCQkJ CQlleHRzdGF0c1tkXS0+YXR0cnR5cG1vZCk7CisJCQkJcGZyZWUocyk7CisJCQl9CisJCX0KKwl9 CisKKwlyZXR1cm4gbWN2bGlzdDsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0YXRpc3Rp Y3MvbXZkaXN0aW5jdC5jIGIvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9tdmRpc3RpbmN0LmMKaW5k ZXggZWUxMTM0Y2MzNy4uZDg0ZWVlNDdlZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RhdGlz dGljcy9tdmRpc3RpbmN0LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9tdmRpc3RpbmN0 LmMKQEAgLTI4LDkgKzI4LDExIEBACiAjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0YWlscy5oIgog I2luY2x1ZGUgImNhdGFsb2cvcGdfc3RhdGlzdGljX2V4dC5oIgogI2luY2x1ZGUgImNhdGFsb2cv cGdfc3RhdGlzdGljX2V4dF9kYXRhLmgiCisjaW5jbHVkZSAiZXhlY3V0b3Ivc3BpLmgiCiAjaW5j bHVkZSAibGliL3N0cmluZ2luZm8uaCIKICNpbmNsdWRlICJzdGF0aXN0aWNzL2V4dGVuZGVkX3N0 YXRzX2ludGVybmFsLmgiCiAjaW5jbHVkZSAic3RhdGlzdGljcy9zdGF0aXN0aWNzLmgiCisjaW5j bHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9mbWdycHJvdG9zLmgiCiAj aW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIK QEAgLTY5OCwzICs3MDAsMTYxIEBAIGdlbmVyYXRlX2NvbWJpbmF0aW9ucyhDb21iaW5hdGlvbkdl bmVyYXRvciAqc3RhdGUpCiAKIAlwZnJlZShjdXJyZW50KTsKIH0KKworLyoKKyAqIHN0YXRleHRf ZGVwZW5kZW5jaWVzX2ltcG9ydAorICoKKyAqIFRoZSBuZGluc3RpbmN0IHNlcmlhbGl6YXRpb24g aXMgYSBzdHJpbmcgdGhhdCBsb29rcyBsaWtlCisgKiAgICAgICB7IjIsIDMiOiAxNTIxLCAiMywg LTEiOiA0fQorICoKKyAqICAgVGhpcyBzdHJ1Y3R1cmUgY2FuIGJlIGNvZXJjZWQgaW50byBKU09O LCBidXQgd2UgbXVzdCB1c2UgSlNPTgorICogICBvdmVyIEpTT05CIGJlY2F1c2UgSlNPTiBwcmVz ZXJ2ZXMga2V5IG9yZGVyIGFuZCBKU09OQiBkb2VzIG5vdC4KKyAqCisgKiAgIFRoZSBrZXkgc2lk ZSBpbnRlZ2VycyByZXByZXNlbnQgYXR0bnVtcyBpbiB0aGUgZXhwb3J0ZWQgdGFibGUsIGFuZCB0 aGVzZQorICogICBtYXkgbm90IGxpbmUgdXAgd2l0aCB0aGUgYXR0bnVtcyBpbiB0aGUgZGVzdGlu YXRpb24gdGFibGUgc28gd2UgbWF0Y2gKKyAqICAgdGhlbSBieSBuYW1lLgorICoKKyAqICAgTmVn YXRpdmUgaW50ZWdlcnMgcmVwcmVzZW50IGV4cHJlc3Npb25zIGNvbHVtbnMgdGhhdCBoYXZlIG5v CisgKiAgIGNvcnJlc3BvbmRpbmcgbWF0Y2ggaW4gdGhlIGV4cG9ydGVkIGF0dHJpYnV0ZXMuIFdl IGxlYXZlIHRob3NlCisgKiAgIGF0dG51bXMgYXMtaXMuIFBvc2l0aXZlIGludGVnZXJzIGFyZSBs b29rZWQgdXAgaW4gdGhlIGV4cG9ydGVkCisgKiAgIGF0dHJpYnV0ZXMgYW5kIHRoZSBhdHRuYW1l IHRoZXJlIGlzIHRoZW4gY29tcGFyZWQgdG8gcGdfYXR0cmlidXRlCisgKiAgIG5hbWVzIGluIHRo ZSB1bmRlcmx5aW5nIHRhYmxlLCBhbmQgdGhhdCB0dXBsZXMgYXR0bnVtIGlzIHVzZWQgaW5zdGVh ZC4KKyAqLworTVZORGlzdGluY3QgKgorc3RhdGV4dF9uZGlzdGluY3RfaW1wb3J0KE9pZCByZWxp ZCwgRGF0dW0gbmRpc3RpbmN0LCBib29sIG5kaXN0aW5jdF9udWxsLAorCQkJCQkJIERhdHVtIGF0 dHJpYnV0ZXMsIGJvb2wgYXR0cmlidXRlc19udWxsKQoreworCU1WTkRpc3RpbmN0CSAgICpyZXN1 bHQ7CisJaW50CQkJCW5pdGVtczsKKworI2RlZmluZSBORElTVF9OQVJHUyAzCisKKwlPaWQJCQlh cmd0eXBlc1tORElTVF9OQVJHU10gPSB7IE9JRE9JRCwgVEVYVE9JRCwgSlNPTkJPSUQgfTsKKwlE YXR1bQkJYXJnc1tORElTVF9OQVJHU10gPSB7IHJlbGlkLCBuZGlzdGluY3QgLCBhdHRyaWJ1dGVz IH07CisJY2hhcgkJYXJnbnVsbHNbTkRJU1RfTkFSR1NdID0geyAnICcsCisJCQkJCW5kaXN0aW5j dF9udWxsID8gJ24nIDogJyAnLAorCQkJCQlhdHRyaWJ1dGVzX251bGwgPyAnbicgOiAnICcgfTsK KworCWNvbnN0IGNoYXIgKnNxbCA9CisJCSJTRUxFQ1QgIgorCQkiICAgIGkuaXRlbW9yZCwgIgor CQkiICAgIGEuYXR0cm9yZCwgIgorCQkiICAgIGEuZXhwX2F0dG51bSwgIgorCQkiICAgIGVhLmF0 dG5hbWUgQVMgZXhwX2F0dG5hbWUsICIKKwkJIiAgICBDQVNFICIKKwkJIiAgICAgICAgV0hFTiBh LmV4cF9hdHRudW0gPCAwIFRIRU4gYS5leHBfYXR0bnVtICIKKwkJIiAgICAgICAgRUxTRSBwZ2Eu YXR0bnVtICIKKwkJIiAgICBFTkQgQVMgYXR0bnVtLCAiCisJCSIgICAgaS5uZGlzdGluY3Q6OmZs b2F0OCBBUyBuZGlzdGluY3QsICIKKwkJIiAgICBDT1VOVCgqKSBPVkVSIChQQVJUSVRJT04gQlkg aS5pdGVtb3JkKSBBUyBudW1fYXR0cnMsICIKKwkJIiAgICBNQVgoaS5pdGVtb3JkKSBPVkVSICgp IEFTIG51bV9pdGVtcyAiCisJCSJGUk9NIGpzb25fZWFjaF90ZXh0KCQyOjpqc29uKSAiCisJCSIg ICAgIFdJVEggT1JESU5BTElUWSBBUyBpKGF0dHJsaXN0LCBuZGlzdGluY3QsIGl0ZW1vcmQpICIK KwkJIkNST1NTIEpPSU4gTEFURVJBTCB1bm5lc3Qoc3RyaW5nX3RvX2FycmF5KGkuYXR0cmxpc3Qs ICcsICcpOjppbnQyW10pICIKKwkJIiAgICAgV0lUSCBPUkRJTkFMSVRZIEFTIGEoZXhwX2F0dG51 bSwgYXR0cm9yZCkgIgorCQkiTEVGVCBKT0lOIExBVEVSQUwganNvbmJfdG9fcmVjb3Jkc2V0KCQz KSBBUyBlYShhdHRudW0gaW50MiwgYXR0bmFtZSB0ZXh0KSAiCisJCSIgICAgIE9OIGVhLmF0dG51 bSA9IGEuZXhwX2F0dG51bSBBTkQgYS5leHBfYXR0bnVtID4gMCAiCisJCSJMRUZUIEpPSU4gcGdf YXR0cmlidXRlIEFTIHBnYSAiCisJCSIgICAgIE9OIHBnYS5hdHRyZWxpZCA9ICQxIEFORCBwZ2Eu YXR0bmFtZSA9IGVhLmF0dG5hbWUgIgorCQkiT1JERVIgQlkgaS5pdGVtb3JkLCBhLmF0dHJvcmQg IjsKKworCWVudW0geworCQlORElTVF9JVEVNT1JEID0gMCwKKwkJTkRJU1RfQVRUUk9SRCwKKwkJ TkRJU1RfRVhQX0FUVE5VTSwKKwkJTkRJU1RfRVhQX0FUVE5BTUUsCisJCU5ESVNUX0FUVE5VTSwK KwkJTkRJU1RfTkRJU1RJTkNULAorCQlORElTVF9OVU1fQVRUUlMsCisJCU5ESVNUX05VTV9JVEVN UywKKwkJTlVNX05ESVNUX0NPTFMKKwl9OworCisJU1BJVHVwbGVUYWJsZSAgKnR1cHRhYmxlOwor CWludAkJCQlyZXQ7CisJaW50CQkJCWo7CisKKwlyZXQgPSBTUElfZXhlY3V0ZV93aXRoX2FyZ3Mo c3FsLCBORElTVF9OQVJHUywgYXJndHlwZXMsIGFyZ3MsIGFyZ251bGxzLCB0cnVlLCAwKTsKKwor CWlmIChyZXQgIT0gU1BJX09LX1NFTEVDVCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29k ZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJzdGF0aXN0 aWMgZXhwb3J0IEpTT04gaXMgbm90IGluIHByb3BlciBmb3JtYXQiKSkpOworCisJdHVwdGFibGUg PSBTUElfdHVwdGFibGU7CisJaWYgKHR1cHRhYmxlLT5udW12YWxzID09IDApCisJCW5pdGVtcyA9 IDA7CisJZWxzZQorCXsKKwkJYm9vbCBpc251bGw7CisJCURhdHVtIGQgPSBTUElfZ2V0YmludmFs KHR1cHRhYmxlLT52YWxzWzBdLCB0dXB0YWJsZS0+dHVwZGVzYywKKwkJCQkJCQkJTkRJU1RfTlVN X0lURU1TKzEsICZpc251bGwpOworCQluaXRlbXMgPSBEYXR1bUdldEludDMyKGQpOworCisJCWlm IChpc251bGwpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFM SURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJIGVycm1zZygiSW5kZXRlcm1pbmF0ZSBudW1iZXIg b2YgZGVwZW5kZW5jaWVzIikpKTsKKwl9CisKKwlyZXN1bHQgPSBwYWxsb2Mob2Zmc2V0b2YoTVZO RGlzdGluY3QsIGl0ZW1zKSArCisJCQkJCShuaXRlbXMgKiBzaXplb2YoTVZORGlzdGluY3RJdGVt KSkpOworCXJlc3VsdC0+bWFnaWMgPSBTVEFUU19ORElTVElOQ1RfTUFHSUM7CisJcmVzdWx0LT50 eXBlID0gU1RBVFNfTkRJU1RJTkNUX1RZUEVfQkFTSUM7CisJcmVzdWx0LT5uaXRlbXMgPSBuaXRl bXM7CisKKwlmb3IgKGogPSAwOyBqIDwgdHVwdGFibGUtPm51bXZhbHM7IGorKykKKwl7CisJCURh dHVtCWRhdHVtc1tOVU1fTkRJU1RfQ09MU107CisJCWJvb2wJbnVsbHNbTlVNX05ESVNUX0NPTFNd OworCQlpbnQJCWk7CisJCWludAkJYTsKKwkJaW50CQluYXR0czsKKworCQlNVk5EaXN0aW5jdEl0 ZW0gKml0ZW07CisKKwkJaGVhcF9kZWZvcm1fdHVwbGUodHVwdGFibGUtPnZhbHNbal0sIHR1cHRh YmxlLT50dXBkZXNjLCBkYXR1bXMsIG51bGxzKTsKKworCQlBc3NlcnQoIW51bGxzW05ESVNUX0lU RU1PUkRdKTsKKwkJaSA9IERhdHVtR2V0SW50MzIoZGF0dW1zW05ESVNUX0lURU1PUkRdKSAtIDE7 CisJCWl0ZW0gPSAmcmVzdWx0LT5pdGVtc1tpXTsKKwkJQXNzZXJ0KCFudWxsc1tORElTVF9BVFRS T1JEXSk7CisJCWEgPSBEYXR1bUdldEludDMyKGRhdHVtc1tORElTVF9BVFRST1JEXSkgLSAxOwor CisJCWlmIChhID09IDApCisJCXsKKwkJCS8qIE5ldyBpdGVtICovCisJCQlBc3NlcnQoIW51bGxz W05ESVNUX05VTV9BVFRSU10pOworCQkJbmF0dHMgPSBEYXR1bUdldEludDMyKGRhdHVtc1tORElT VF9OVU1fQVRUUlNdKTsKKwkJCWl0ZW0tPm5hdHRyaWJ1dGVzID0gbmF0dHM7CisJCQlpdGVtLT5h dHRyaWJ1dGVzID0gcGFsbG9jKHNpemVvZihBdHRyTnVtYmVyKSAqIG5hdHRzKTsKKwkJCUFzc2Vy dCghbnVsbHNbTkRJU1RfTkRJU1RJTkNUXSk7CisJCQlpdGVtLT5uZGlzdGluY3QgPSBEYXR1bUdl dEZsb2F0OChkYXR1bXNbTkRJU1RfTkRJU1RJTkNUXSk7CisJCX0KKworCQlpZiAoIW51bGxzW05E SVNUX0FUVE5VTV0pCisJCQlpdGVtLT5hdHRyaWJ1dGVzW2FdID0KKwkJCQlEYXR1bUdldEludDE2 KGRhdHVtc1tORElTVF9BVFROVU1dKTsKKwkJZWxzZSBpZiAobnVsbHNbTkRJU1RfRVhQX0FUVE5V TV0pCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFS QU1FVEVSX1ZBTFVFKSwKKwkJCQkJIGVycm1zZygibmRpc3RpbmN0IGV4cG9ydGVkIGF0dG51bSBj YW5ub3QgYmUgbnVsbCIpKSk7CisJCWVsc2UKKwkJeworCQkJQXR0ck51bWJlciBleHBfYXR0bnVt ID0gRGF0dW1HZXRJbnQxNihkYXR1bXNbTkRJU1RfRVhQX0FUVE5VTV0pOworCisJCQlpZiAobnVs bHNbTkRJU1RfRVhQX0FUVE5BTUVdKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29k ZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coIm5kaXN0 aW5jdCBoYXMgbm8gZXhwb3J0ZWQgbmFtZSBmb3IgYXR0bnVtICVkIiwKKwkJCQkJCQkJZXhwX2F0 dG51bSkpKTsKKworCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZB TElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCSBlcnJtc2coIkRlcGVuZGVuY3kgdHJpZWQgdG8g bWF0Y2ggYXR0bnVtICVkIGJ5IG5hbWUgKCVzKSBidXQgZm91bmQgbm8gbWF0Y2giLAorCQkJCQkJ IGV4cF9hdHRudW0sIFRleHREYXR1bUdldENTdHJpbmcoZGF0dW1zW05ESVNUX0VYUF9BVFROQU1F XSkpKSk7CisJCX0KKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9zdGF0c19leHBvcnRfaW1wb3J0Lm91dCBiL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvc3RhdHNfZXhwb3J0X2ltcG9ydC5vdXQKaW5kZXggNWFiNTFjNWFhMC4u OWQxNzk0NzU4MyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdGF0c19l eHBvcnRfaW1wb3J0Lm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N0YXRzX2V4 cG9ydF9pbXBvcnQub3V0CkBAIC0yMiw2ICsyMiw3IEBAIFNFTEVDVCAzLCAndHJlJywgKDMsIDMu MywgJ1RSRScsICcyMDAzLTAzLTAzJywgTlVMTCk6OnN0YXRzX2V4cG9ydF9pbXBvcnQuY29tcGxl CiBVTklPTiBBTEwKIFNFTEVDVCA0LCAnZm91cicsIE5VTEwsIE5VTEw7CiBDUkVBVEUgSU5ERVgg aXNfb2RkIE9OIHN0YXRzX2V4cG9ydF9pbXBvcnQudGVzdCgoKGNvbXApLmEgJSAyID0gMSkpOwor Q1JFQVRFIFNUQVRJU1RJQ1Mgc3RhdHNfZXhwb3J0X2ltcG9ydC5ldmVuc190ZXN0IE9OIG5hbWUs ICgoY29tcCkuYSAlIDIgPSAwKSBGUk9NIHN0YXRzX2V4cG9ydF9pbXBvcnQudGVzdDsKIC0tIEdl bmVyYXRlIHN0YXRpc3RpY3Mgb24gdGFibGUgd2l0aCBkYXRhCiBBTkFMWVpFIHN0YXRzX2V4cG9y dF9pbXBvcnQudGVzdDsKIC0tIENhcHR1cmUgcGdfc3RhdGlzdGljIHZhbHVlcyBmb3IgdGFibGUg YW5kIGluZGV4CkBAIC00NCw2ICs0NSwyNSBAQCBGUk9NIHN0YXRzX2V4cG9ydF9pbXBvcnQucGdf c3RhdGlzdGljX2NhcHR1cmU7CiAgICAgIDUKICgxIHJvdykKIAorLS0gQ2FwdHVyZSBwZ19zdGF0 aXN0aWMgdmFsdWVzIGZvciB0YWJsZSBhbmQgaW5kZXgKK0NSRUFURSBUQUJMRSBzdGF0c19leHBv cnRfaW1wb3J0LnBnX3N0YXRpc3RpY19leHRfZGF0YV9jYXB0dXJlCitBUworU0VMRUNUICBkLnN0 eGRpbmhlcml0LAorICAgICAgICBkLnN0eGRuZGlzdGluY3Q6OnRleHQgQVMgc3R4ZG5kaXN0aW5j dCwKKyAgICAgICAgZC5zdHhkZGVwZW5kZW5jaWVzOjp0ZXh0IEFTIHN0eGRkZXBlbmRlbmNpZXMs CisgICAgICAgIGQuc3R4ZG1jdjo6dGV4dCBBUyBzdHhkbWN2LAorICAgICAgICBkLnN0eGRleHBy Ojp0ZXh0IEFTIHN0eGRleHByCitGUk9NIHBnX3N0YXRpc3RpY19leHQgQVMgZQorSk9JTiBwZ19z dGF0aXN0aWNfZXh0X2RhdGEgQVMgZCBPTiBkLnN0eG9pZCA9IGUub2lkCitXSEVSRSBlLnN0eHJl bGlkID0gJ3N0YXRzX2V4cG9ydF9pbXBvcnQudGVzdCc6OnJlZ2NsYXNzCitBTkQgZS5zdHhuYW1l ID0gJ2V2ZW5zX3Rlc3QnOworU0VMRUNUIENPVU5UKCopCitGUk9NIHN0YXRzX2V4cG9ydF9pbXBv cnQucGdfc3RhdGlzdGljX2V4dF9kYXRhX2NhcHR1cmU7CisgY291bnQgCistLS0tLS0tCisgICAg IDEKKygxIHJvdykKKwogLS0gRXhwb3J0IHN0YXRzCiBTRUxFQ1QKICAgICBqc29uYl9idWlsZF9v YmplY3QoCkBAIC0zMjMsNiArMzQzLDE3MyBAQCBXSEVSRSA6J2RlYnVnJzo6Ym9vbGVhbjsKIC0t LS0tLS0tLS0tLS0tLS0tLQogKDAgcm93cykKIAorU0VMRUNUCisgICAganNvbmJfYnVpbGRfb2Jq ZWN0KAorICAgICAgICAnc2VydmVyX3ZlcnNpb25fbnVtJywgY3VycmVudF9zZXR0aW5nKCdzZXJ2 ZXJfdmVyc2lvbl9udW0nKSwKKyAgICAgICAgJ3N0eG9pZCcsIGUub2lkLAorICAgICAgICAncmVs b2lkJywgci5vaWQsCisgICAgICAgICdzdHhuYW1lJywgZS5zdHhuYW1lLAorICAgICAgICAnc3R4 bnNwbmFtZScsIGVuLm5zcG5hbWUsCisgICAgICAgICdyZWxuYW1lJywgci5yZWxuYW1lLAorICAg ICAgICAnbnNwbmFtZScsIG4ubnNwbmFtZSwKKyAgICAgICAgJ3N0eGtleXMnLCBlLnN0eGtleXM6 OnRleHQsCisgICAgICAgICdzdHhraW5kJywgZS5zdHhraW5kOjp0ZXh0LAorICAgICAgICAnZGF0 YScsCisgICAgICAgICgKKyAgICAgICAgICAgIFNFTEVDVAorICAgICAgICAgICAgICAgIGFycmF5 X2FnZyhyIE9SREVSIGJ5IHIuc3R4ZGluaGVyaXQpCisgICAgICAgICAgICBGUk9NICgKKyAgICAg ICAgICAgICAgICBTRUxFQ1QKKyAgICAgICAgICAgICAgICAgICAgc2Quc3R4ZGluaGVyaXQsCisg ICAgICAgICAgICAgICAgICAgIHNkLnN0eGRuZGlzdGluY3Q6OnRleHQgQVMgc3R4ZG5kaXN0aW5j dCwKKyAgICAgICAgICAgICAgICAgICAgc2Quc3R4ZGRlcGVuZGVuY2llczo6dGV4dCBBUyBzdHhk ZGVwZW5kZW5jaWVzLAorICAgICAgICAgICAgICAgICAgICAoCisgICAgICAgICAgICAgICAgICAg ICAgICBTRUxFQ1QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheV9hZ2cobWN2bCkK KyAgICAgICAgICAgICAgICAgICAgICAgIEZST00gcGdfbWN2X2xpc3RfaXRlbXMoc2Quc3R4ZG1j dikgQVMgbWN2bAorICAgICAgICAgICAgICAgICAgICAgICAgV0hFUkUgc2Quc3R4ZG1jdiBJUyBO T1QgTlVMTAorICAgICAgICAgICAgICAgICAgICApIEFTIHN0eGRtY3YsCisgICAgICAgICAgICAg ICAgICAgICgKKyAgICAgICAgICAgICAgICAgICAgICAgIFNFTEVDVAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGFycmF5X2FnZyhyIE9SREVSIEJZIHIuc3RhaW5oZXJpdCwgci5zdGFhdHRu dW0pCisgICAgICAgICAgICAgICAgICAgICAgICBGUk9NICgKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBTRUxFQ1QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuc3RhYXR0 bnVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5zdGFpbmhlcml0LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5zdGFudWxsZnJhYywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHMuc3Rhd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzLnN0YWRpc3RpbmN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcy5zdGFraW5kMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuc3Rha2lu ZDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLnN0YWtpbmQzLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5zdGFraW5kNCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHMuc3Rha2luZDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzLnN0YW9wMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuc3Rhb3Ay LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5zdGFvcDMsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzLnN0YW9wNCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHMuc3Rhb3A1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5z dGFjb2xsMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuc3RhY29sbDIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLnN0YWNvbGwzLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcy5zdGFjb2xsNCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHMuc3RhY29sbDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz LnN0YW51bWJlcnMxOjp0ZXh0IEFTIHN0YW51bWJlcnMxLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcy5zdGFudW1iZXJzMjo6dGV4dCBBUyBzdGFudW1iZXJzMiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHMuc3RhbnVtYmVyczM6OnRleHQgQVMgc3RhbnVtYmVy czMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLnN0YW51bWJlcnM0Ojp0ZXh0 IEFTIHN0YW51bWJlcnM0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5zdGFu dW1iZXJzNTo6dGV4dCBBUyBzdGFudW1iZXJzNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHMuc3RhdmFsdWVzMTo6dGV4dCBBUyBzdGF2YWx1ZXMxLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcy5zdGF2YWx1ZXMyOjp0ZXh0IEFTIHN0YXZhbHVlczIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLnN0YXZhbHVlczM6OnRleHQgQVMgc3RhdmFs dWVzMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuc3RhdmFsdWVzNDo6dGV4 dCBBUyBzdGF2YWx1ZXM0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5zdGF2 YWx1ZXM1Ojp0ZXh0IEFTIHN0YXZhbHVlczUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBG Uk9NIHVubmVzdChzZC5zdHhkZXhwcikgQVMgcworICAgICAgICAgICAgICAgICAgICAgICAgICAg IFdIRVJFIHNkLnN0eGRleHByIElTIE5PVCBOVUxMCisgICAgICAgICAgICAgICAgICAgICAgICAp IEFTIHIKKyAgICAgICAgICAgICAgICAgICAgKSBBUyBzdHhkZXhwcgorICAgICAgICAgICAgICAg IEZST00gcGdfc3RhdGlzdGljX2V4dF9kYXRhIEFTIHNkCisgICAgICAgICAgICAgICAgV0hFUkUg c2Quc3R4b2lkID0gZS5vaWQKKyAgICAgICAgICAgICkgcgorICAgICAgICApLAorICAgICAgICAn dHlwZXMnLAorICAgICAgICAoCisgICAgICAgICAgICBTRUxFQ1QKKyAgICAgICAgICAgICAgICBh cnJheV9hZ2cocikKKyAgICAgICAgICAgIEZST00gKAorICAgICAgICAgICAgICAgIFNFTEVDVAor ICAgICAgICAgICAgICAgICAgICBhLmF0dHR5cGlkIEFTIG9pZCwKKyAgICAgICAgICAgICAgICAg ICAgdC50eXBuYW1lLAorICAgICAgICAgICAgICAgICAgICBuLm5zcG5hbWUKKyAgICAgICAgICAg ICAgICBGUk9NIHBnX2F0dHJpYnV0ZSBBUyBhCisgICAgICAgICAgICAgICAgSk9JTiBwZ190eXBl IEFTIHQgT04gdC5vaWQgPSBhLmF0dHR5cGlkCisgICAgICAgICAgICAgICAgSk9JTiBwZ19uYW1l c3BhY2UgQVMgbiBPTiBuLm9pZCA9IHQudHlwbmFtZXNwYWNlCisgICAgICAgICAgICAgICAgV0hF UkUgYS5hdHRyZWxpZCA9IHIub2lkCisgICAgICAgICAgICAgICAgQU5EIE5PVCBhLmF0dGlzZHJv cHBlZAorICAgICAgICAgICAgICAgIEFORCBhLmF0dG51bSA+IDAKKyAgICAgICAgICAgICkgQVMg cgorICAgICAgICApLAorICAgICAgICAnY29sbGF0aW9ucycsCisgICAgICAgICgKKyAgICAgICAg ICAgIFNFTEVDVAorICAgICAgICAgICAgICAgIGFycmF5X2FnZyhyKQorICAgICAgICAgICAgRlJP TSAoCisgICAgICAgICAgICAgICAgU0VMRUNUCisgICAgICAgICAgICAgICAgICAgIGUub2lkLAor ICAgICAgICAgICAgICAgICAgICBjLmNvbGxuYW1lLAorICAgICAgICAgICAgICAgICAgICBuLm5z cG5hbWUKKyAgICAgICAgICAgICAgICBGUk9NICgKKyAgICAgICAgICAgICAgICAgICAgU0VMRUNU IGEuYXR0Y29sbGF0aW9uIEFTIG9pZAorICAgICAgICAgICAgICAgICAgICBGUk9NIHBnX2F0dHJp YnV0ZSBBUyBhCisgICAgICAgICAgICAgICAgICAgIFdIRVJFIGEuYXR0cmVsaWQgPSByLm9pZAor ICAgICAgICAgICAgICAgICAgICBBTkQgTk9UIGEuYXR0aXNkcm9wcGVkCisgICAgICAgICAgICAg ICAgICAgIEFORCBhLmF0dG51bSA+IDAKKyAgICAgICAgICAgICAgICAgICAgVU5JT04KKyAgICAg ICAgICAgICAgICAgICAgU0VMRUNUIHUuY29sbGlkCisgICAgICAgICAgICAgICAgICAgIEZST00g cGdfc3RhdGlzdGljX2V4dF9kYXRhIEFTIHNkCisgICAgICAgICAgICAgICAgICAgIENST1NTIEpP SU4gTEFURVJBTCB1bm5lc3Qoc2Quc3R4ZGV4cHIpIEFTIHMKKyAgICAgICAgICAgICAgICAgICAg Q1JPU1MgSk9JTiBMQVRFUkFMIHVubmVzdChBUlJBWVsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzLnN0YWNvbGwxLCBzLnN0YWNvbGwyLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHMuc3RhY29sbDMsIHMuc3RhY29sbDQsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5zdGFjb2xsNV0pIEFTIHUoY29sbGlk KQorICAgICAgICAgICAgICAgICAgICBXSEVSRSBzZC5zdHhvaWQgPSBlLm9pZAorICAgICAgICAg ICAgICAgICAgICBBTkQgc2Quc3R4ZGV4cHIgSVMgTk9UIE5VTEwKKyAgICAgICAgICAgICAgICAg ICAgKSBBUyBlCisgICAgICAgICAgICAgICAgSk9JTiBwZ19jb2xsYXRpb24gQVMgYyBPTiBjLm9p ZCA9IGUub2lkCisgICAgICAgICAgICAgICAgSk9JTiBwZ19uYW1lc3BhY2UgQVMgbiBPTiBuLm9p ZCA9IGMuY29sbG5hbWVzcGFjZQorICAgICAgICAgICAgKSBBUyByCisgICAgICAgICksCisgICAg ICAgICdvcGVyYXRvcnMnLAorICAgICAgICAoCisgICAgICAgICAgICBTRUxFQ1QKKyAgICAgICAg ICAgICAgICBhcnJheV9hZ2cocikKKyAgICAgICAgICAgIEZST00gKAorICAgICAgICAgICAgICAg IFNFTEVDVCBESVNUSU5DVAorICAgICAgICAgICAgICAgICAgICBvLm9pZCwKKyAgICAgICAgICAg ICAgICAgICAgby5vcHJuYW1lLAorICAgICAgICAgICAgICAgICAgICBuLm5zcG5hbWUKKyAgICAg ICAgICAgICAgICBGUk9NIHBnX3N0YXRpc3RpY19leHRfZGF0YSBBUyBzZAorICAgICAgICAgICAg ICAgIENST1NTIEpPSU4gTEFURVJBTCB1bm5lc3Qoc2Quc3R4ZGV4cHIpIEFTIHMKKyAgICAgICAg ICAgICAgICBDUk9TUyBKT0lOIExBVEVSQUwgdW5uZXN0KEFSUkFZWworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcy5zdGFvcDEsIHMuc3Rhb3AyLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcy5zdGFvcDMsIHMuc3Rhb3A0LAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcy5zdGFvcDVdKSBBUyB1KG9waWQpCisgICAgICAgICAgICAg ICAgSk9JTiBwZ19vcGVyYXRvciBBUyBvIE9OIG8ub2lkID0gdS5vaWQKKyAgICAgICAgICAgICAg ICBKT0lOIHBnX25hbWVzcGFjZSBBUyBuIE9OIG4ub2lkID0gby5vcHJuYW1lc3BhY2UKKyAgICAg ICAgICAgICAgICBXSEVSRSBzZC5zdHhvaWQgPSBlLm9pZAorICAgICAgICAgICAgICAgIEFORCBz ZC5zdHhkZXhwciBJUyBOT1QgTlVMTAorICAgICAgICAgICAgKSBBUyByCisgICAgICAgICksCisg ICAgICAgICdhdHRyaWJ1dGVzJywKKyAgICAgICAgKAorICAgICAgICAgICAgU0VMRUNUCisgICAg ICAgICAgICAgICAgYXJyYXlfYWdnKHIgT1JERVIgQlkgci5hdHRudW0pCisgICAgICAgICAgICBG Uk9NICgKKyAgICAgICAgICAgICAgICBTRUxFQ1QKKyAgICAgICAgICAgICAgICAgICAgYS5hdHRu dW0sCisgICAgICAgICAgICAgICAgICAgIGEuYXR0bmFtZSwKKyAgICAgICAgICAgICAgICAgICAg YS5hdHR0eXBpZCwKKyAgICAgICAgICAgICAgICAgICAgYS5hdHRjb2xsYXRpb24KKyAgICAgICAg ICAgICAgICBGUk9NIHBnX2F0dHJpYnV0ZSBBUyBhCisgICAgICAgICAgICAgICAgV0hFUkUgYS5h dHRyZWxpZCA9IHIub2lkCisgICAgICAgICAgICAgICAgQU5EIE5PVCBhLmF0dGlzZHJvcHBlZAor ICAgICAgICAgICAgICAgIEFORCBhLmF0dG51bSA+IDAKKyAgICAgICAgICAgICkgQVMgcgorICAg ICAgICApCisgICAgKSBBUyBleHRfc3RhdHNfanNvbgorRlJPTSBwZ19jbGFzcyByCitKT0lOIHBn X3N0YXRpc3RpY19leHQgQVMgZSBPTiBlLnN0eHJlbGlkID0gci5vaWQKK0pPSU4gcGdfbmFtZXNw YWNlIEFTIGVuIE9OIGVuLm9pZCA9IGUuc3R4bmFtZXNwYWNlCitKT0lOIHBnX25hbWVzcGFjZSBB UyBuIE9OIG4ub2lkID0gci5yZWxuYW1lc3BhY2UKK1dIRVJFIGUuc3R4cmVsaWQgPSAnc3RhdHNf ZXhwb3J0X2ltcG9ydC50ZXN0Jzo6cmVnY2xhc3MKK0FORCBlLnN0eG5hbWUgPSAnZXZlbnNfdGVz dCcKK1xnc2V0CitTRUxFQ1QganNvbmJfcHJldHR5KDonZXh0X3N0YXRzX2pzb24nOjpqc29uYikg QVMgZXh0X3N0YXRzX2pzb24KK1dIRVJFIDonZGVidWcnOjpib29sZWFuOworIGV4dF9zdGF0c19q c29uIAorLS0tLS0tLS0tLS0tLS0tLQorKDAgcm93cykKKwogU0VMRUNUIHJlbG5hbWUsIHJlbHR1 cGxlcwogRlJPTSBwZ19jbGFzcwogV0hFUkUgb2lkIElOICgnc3RhdHNfZXhwb3J0X2ltcG9ydC50 ZXN0Jzo6cmVnY2xhc3MsCkBAIC0zMzQsMTIgKzUyMSwxNCBAQCBPUkRFUiBCWSByZWxuYW1lOwog IHRlc3QgICAgfCAgICAgICAgIDQKICgyIHJvd3MpCiAKLS0tIE1vdmUgdGFibGUgYW5kIGluZGV4 IG91dCBvZiB0aGUgd2F5CistLSBNb3ZlIHRhYmxlIGFuZCBpbmRleCBhbmQgZXh0ZW5kZWQgc3Rh dHMgb3V0IG9mIHRoZSB3YXkKIEFMVEVSIFRBQkxFIHN0YXRzX2V4cG9ydF9pbXBvcnQudGVzdCBS RU5BTUUgVE8gdGVzdF9vcmlnOwogQUxURVIgSU5ERVggc3RhdHNfZXhwb3J0X2ltcG9ydC5pc19v ZGQgUkVOQU1FIFRPIGlzX29kZF9vcmlnOwotLS0gQ3JlYXRlIGVtcHR5IGNvcHkgdGFibGVzCitB TFRFUiBTVEFUSVNUSUNTIHN0YXRzX2V4cG9ydF9pbXBvcnQuZXZlbnNfdGVzdCBSRU5BTUUgVE8g ZXZlbnNfdGVzdF9vcmlnOworLS0gQ3JlYXRlIGVtcHR5IGNvcHkgdGFibGVzIGFuZCBvYmplY3Rz CiBDUkVBVEUgVEFCTEUgc3RhdHNfZXhwb3J0X2ltcG9ydC50ZXN0KExJS0Ugc3RhdHNfZXhwb3J0 X2ltcG9ydC50ZXN0X29yaWcpOwogQ1JFQVRFIElOREVYIGlzX29kZCBPTiBzdGF0c19leHBvcnRf aW1wb3J0LnRlc3QoKChjb21wKS5hICUgMiA9IDEpKTsKK0NSRUFURSBTVEFUSVNUSUNTIHN0YXRz X2V4cG9ydF9pbXBvcnQuZXZlbnNfdGVzdCBPTiBuYW1lLCAoKGNvbXApLmEgJSAyID0gMCkgRlJP TSBzdGF0c19leHBvcnRfaW1wb3J0LnRlc3Q7CiAtLSBWZXJpZnkgbm8gc3RhdHMgZm9yIHRoZXNl IG5ldyB0YWJsZXMKIFNFTEVDVCBDT1VOVCgqKQogRlJPTSBwZ19zdGF0aXN0aWMKQEAgLTQ3NSw2 ICs2NjQsMTkgQEAgU0VMRUNUIHBnX2ltcG9ydF9yZWxfc3RhdHMoCiAgdAogKDEgcm93KQogCitT RUxFQ1QgcGdfaW1wb3J0X2V4dF9zdGF0cygKKyAgICAgICAgZS5vaWQsCisgICAgICAgIDonZXh0 X3N0YXRzX2pzb24nOjpqc29uYiwKKyAgICAgICAgdHJ1ZSwKKyAgICAgICAgdHJ1ZSkKK0ZST00g cGdfc3RhdGlzdGljX2V4dCBBUyBlCitXSEVSRSBlLnN0eHJlbGlkID0gJ3N0YXRzX2V4cG9ydF9p bXBvcnQudGVzdCc6OnJlZ2NsYXNzCitBTkQgZS5zdHhuYW1lID0gJ2V2ZW5zX3Rlc3QnOworIHBn X2ltcG9ydF9leHRfc3RhdHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisK IC0tIFRoaXMgc2hvdWxkIHJldHVybiAwIHJvd3MKIFNFTEVDVCBzdGFhdHRudW0sIHN0YWluaGVy aXQsIHN0YW51bGxmcmFjLCBzdGF3aWR0aCwgc3RhZGlzdGluY3QsCiAgICAgICAgIHN0YWtpbmQx LCBzdGFraW5kMiwgc3Rha2luZDMsIHN0YWtpbmQ0LCBzdGFraW5kNSwKQEAgLTUyOCwzICs3MzAs NjIgQEAgT1JERVIgQlkgcmVsbmFtZTsKICB0ZXN0ICAgIHwgICAgICAgICA0CiAoMiByb3dzKQog CistLSBUaGlzIHNob3VsZCByZXR1cm4gMCByb3dzCitTRUxFQ1QgIGQuc3R4ZGluaGVyaXQsCisg ICAgICAgIGQuc3R4ZG5kaXN0aW5jdDo6dGV4dCBBUyBzdHhkbmRpc3RpbmN0LAorICAgICAgICBk LnN0eGRkZXBlbmRlbmNpZXM6OnRleHQgQVMgc3R4ZGRlcGVuZGVuY2llcywKKyAgICAgICAgZC5z dHhkbWN2Ojp0ZXh0IEFTIHN0eGRtY3YsCisgICAgICAgIGQuc3R4ZGV4cHI6OnRleHQgQVMgc3R4 ZGV4cHIKK0ZST00gcGdfc3RhdGlzdGljX2V4dCBBUyBlCitKT0lOIHBnX3N0YXRpc3RpY19leHRf ZGF0YSBBUyBkIE9OIGQuc3R4b2lkID0gZS5vaWQKK1dIRVJFIGUuc3R4cmVsaWQgPSAnc3RhdHNf ZXhwb3J0X2ltcG9ydC50ZXN0Jzo6cmVnY2xhc3MKK0FORCBlLnN0eG5hbWUgPSAnZXZlbnNfdGVz dCcKK0VYQ0VQVAorU0VMRUNUICoKK0ZST00gc3RhdHNfZXhwb3J0X2ltcG9ydC5wZ19zdGF0aXN0 aWNfZXh0X2RhdGFfY2FwdHVyZTsKKyBzdHhkaW5oZXJpdCB8IHN0eGRuZGlzdGluY3QgfCBzdHhk ZGVwZW5kZW5jaWVzIHwgc3R4ZG1jdiB8IHN0eGRleHByIAorLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tCisoMCByb3dz KQorCistLSBUaGlzIHNob3VsZCByZXR1cm4gMCByb3dzCitTRUxFQ1QgKgorRlJPTSBzdGF0c19l eHBvcnRfaW1wb3J0LnBnX3N0YXRpc3RpY19leHRfZGF0YV9jYXB0dXJlCitFWENFUFQKK1NFTEVD VCAgZC5zdHhkaW5oZXJpdCwKKyAgICAgICAgZC5zdHhkbmRpc3RpbmN0Ojp0ZXh0IEFTIHN0eGRu ZGlzdGluY3QsCisgICAgICAgIGQuc3R4ZGRlcGVuZGVuY2llczo6dGV4dCBBUyBzdHhkZGVwZW5k ZW5jaWVzLAorICAgICAgICBkLnN0eGRtY3Y6OnRleHQgQVMgc3R4ZG1jdiwKKyAgICAgICAgZC5z dHhkZXhwcjo6dGV4dCBBUyBzdHhkZXhwcgorRlJPTSBwZ19zdGF0aXN0aWNfZXh0IEFTIGUKK0pP SU4gcGdfc3RhdGlzdGljX2V4dF9kYXRhIEFTIGQgT04gZC5zdHhvaWQgPSBlLm9pZAorV0hFUkUg ZS5zdHhyZWxpZCA9ICdzdGF0c19leHBvcnRfaW1wb3J0LnRlc3QnOjpyZWdjbGFzcworQU5EIGUu c3R4bmFtZSA9ICdldmVuc190ZXN0JzsKKyBzdHhkaW5oZXJpdCB8IHN0eGRuZGlzdGluY3QgfCBz dHhkZGVwZW5kZW5jaWVzIHwgc3R4ZG1jdiB8IHN0eGRleHByIAorLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tCisoMCBy b3dzKQorCitTRUxFQ1Qgc3RhYXR0bnVtLCBzdGFpbmhlcml0LCBzdGFudWxsZnJhYywgc3Rhd2lk dGgsIHN0YWRpc3RpbmN0LAorICAgICAgICBzdGFraW5kMSwgc3Rha2luZDIsIHN0YWtpbmQzLCBz dGFraW5kNCwgc3Rha2luZDUsCisgICAgICAgIHN0YW9wMSwgc3Rhb3AyLCBzdGFvcDMsIHN0YW9w NCwgc3Rhb3A1LCBzdGFjb2xsMSwgc3RhY29sbDIsIHN0YWNvbGwzLCBzdGFjb2xsNCwgc3RhY29s bDUsCisgICAgICAgIHN0YW51bWJlcnMxLCBzdGFudW1iZXJzMiwgc3RhbnVtYmVyczMsIHN0YW51 bWJlcnM0LCBzdGFudW1iZXJzNSwKKyAgICAgICAgc3YxLCBzdjIsIHN2Mywgc3Y0LCBzdjUKK0ZS T00gc3RhdHNfZXhwb3J0X2ltcG9ydC5wZ19zdGF0aXN0aWNfY2FwdHVyZQorV0hFUkUgOidkZWJ1 Zyc6OmJvb2xlYW47Cisgc3RhYXR0bnVtIHwgc3RhaW5oZXJpdCB8IHN0YW51bGxmcmFjIHwgc3Rh d2lkdGggfCBzdGFkaXN0aW5jdCB8IHN0YWtpbmQxIHwgc3Rha2luZDIgfCBzdGFraW5kMyB8IHN0 YWtpbmQ0IHwgc3Rha2luZDUgfCBzdGFvcDEgfCBzdGFvcDIgfCBzdGFvcDMgfCBzdGFvcDQgfCBz dGFvcDUgfCBzdGFjb2xsMSB8IHN0YWNvbGwyIHwgc3RhY29sbDMgfCBzdGFjb2xsNCB8IHN0YWNv bGw1IHwgc3RhbnVtYmVyczEgfCBzdGFudW1iZXJzMiB8IHN0YW51bWJlcnMzIHwgc3RhbnVtYmVy czQgfCBzdGFudW1iZXJzNSB8IHN2MSB8IHN2MiB8IHN2MyB8IHN2NCB8IHN2NSAKKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0t LS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0t LS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0t LSstLS0tLSstLS0tLSstLS0tLSstLS0tLQorKDAgcm93cykKKworU0VMRUNUIHN0YWF0dG51bSwg c3RhaW5oZXJpdCwgc3RhbnVsbGZyYWMsIHN0YXdpZHRoLCBzdGFkaXN0aW5jdCwKKyAgICAgICAg c3Rha2luZDEsIHN0YWtpbmQyLCBzdGFraW5kMywgc3Rha2luZDQsIHN0YWtpbmQ1LAorICAgICAg ICBzdGFvcDEsIHN0YW9wMiwgc3Rhb3AzLCBzdGFvcDQsIHN0YW9wNSwgc3RhY29sbDEsIHN0YWNv bGwyLCBzdGFjb2xsMywgc3RhY29sbDQsIHN0YWNvbGw1LAorICAgICAgICBzdGFudW1iZXJzMSwg c3RhbnVtYmVyczIsIHN0YW51bWJlcnMzLCBzdGFudW1iZXJzNCwgc3RhbnVtYmVyczUsCisgICAg ICAgIHN0YXZhbHVlczE6OnRleHQgQVMgc3YxLCBzdGF2YWx1ZXMyOjp0ZXh0IEFTIHN2Miwgc3Rh dmFsdWVzMzo6dGV4dCBBUyBzdjMsCisgICAgICAgIHN0YXZhbHVlczQ6OnRleHQgQVMgc3Y0LCBz dGF2YWx1ZXM1Ojp0ZXh0IEFTIHN2NQorRlJPTSBwZ19zdGF0aXN0aWMKK1dIRVJFIHN0YXJlbGlk IElOICgnc3RhdHNfZXhwb3J0X2ltcG9ydC50ZXN0Jzo6cmVnY2xhc3MsCisgICAgICAgICAgICAg ICAgICAgICdzdGF0c19leHBvcnRfaW1wb3J0LmlzX29kZCc6OnJlZ2NsYXNzKQorQU5EIDonZGVi dWcnOjpib29sZWFuOworIHN0YWF0dG51bSB8IHN0YWluaGVyaXQgfCBzdGFudWxsZnJhYyB8IHN0 YXdpZHRoIHwgc3RhZGlzdGluY3QgfCBzdGFraW5kMSB8IHN0YWtpbmQyIHwgc3Rha2luZDMgfCBz dGFraW5kNCB8IHN0YWtpbmQ1IHwgc3Rhb3AxIHwgc3Rhb3AyIHwgc3Rhb3AzIHwgc3Rhb3A0IHwg c3Rhb3A1IHwgc3RhY29sbDEgfCBzdGFjb2xsMiB8IHN0YWNvbGwzIHwgc3RhY29sbDQgfCBzdGFj b2xsNSB8IHN0YW51bWJlcnMxIHwgc3RhbnVtYmVyczIgfCBzdGFudW1iZXJzMyB8IHN0YW51bWJl cnM0IHwgc3RhbnVtYmVyczUgfCBzdjEgfCBzdjIgfCBzdjMgfCBzdjQgfCBzdjUgCistLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0t LS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0rLS0t LS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0t LS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0KKygwIHJvd3MpCisKZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL3N0YXRzX2V4cG9ydF9pbXBvcnQuc3FsIGIvc3JjL3Rlc3QvcmVncmVz cy9zcWwvc3RhdHNfZXhwb3J0X2ltcG9ydC5zcWwKaW5kZXggOWE4MGVlYmVlYy4uY2JlOTRiOTI3 MyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3RhdHNfZXhwb3J0X2ltcG9ydC5z cWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3RhdHNfZXhwb3J0X2ltcG9ydC5zcWwKQEAg LTI2LDYgKzI2LDcgQEAgVU5JT04gQUxMCiBTRUxFQ1QgNCwgJ2ZvdXInLCBOVUxMLCBOVUxMOwog CiBDUkVBVEUgSU5ERVggaXNfb2RkIE9OIHN0YXRzX2V4cG9ydF9pbXBvcnQudGVzdCgoKGNvbXAp LmEgJSAyID0gMSkpOworQ1JFQVRFIFNUQVRJU1RJQ1Mgc3RhdHNfZXhwb3J0X2ltcG9ydC5ldmVu c190ZXN0IE9OIG5hbWUsICgoY29tcCkuYSAlIDIgPSAwKSBGUk9NIHN0YXRzX2V4cG9ydF9pbXBv cnQudGVzdDsKIAogLS0gR2VuZXJhdGUgc3RhdGlzdGljcyBvbiB0YWJsZSB3aXRoIGRhdGEKIEFO QUxZWkUgc3RhdHNfZXhwb3J0X2ltcG9ydC50ZXN0OwpAQCAtNDcsNiArNDgsMjIgQEAgV0hFUkUg c3RhcmVsaWQgSU4gKCdzdGF0c19leHBvcnRfaW1wb3J0LnRlc3QnOjpyZWdjbGFzcywKIFNFTEVD VCBDT1VOVCgqKQogRlJPTSBzdGF0c19leHBvcnRfaW1wb3J0LnBnX3N0YXRpc3RpY19jYXB0dXJl OwogCistLSBDYXB0dXJlIHBnX3N0YXRpc3RpYyB2YWx1ZXMgZm9yIHRhYmxlIGFuZCBpbmRleAor Q1JFQVRFIFRBQkxFIHN0YXRzX2V4cG9ydF9pbXBvcnQucGdfc3RhdGlzdGljX2V4dF9kYXRhX2Nh cHR1cmUKK0FTCitTRUxFQ1QgIGQuc3R4ZGluaGVyaXQsCisgICAgICAgIGQuc3R4ZG5kaXN0aW5j dDo6dGV4dCBBUyBzdHhkbmRpc3RpbmN0LAorICAgICAgICBkLnN0eGRkZXBlbmRlbmNpZXM6OnRl eHQgQVMgc3R4ZGRlcGVuZGVuY2llcywKKyAgICAgICAgZC5zdHhkbWN2Ojp0ZXh0IEFTIHN0eGRt Y3YsCisgICAgICAgIGQuc3R4ZGV4cHI6OnRleHQgQVMgc3R4ZGV4cHIKK0ZST00gcGdfc3RhdGlz dGljX2V4dCBBUyBlCitKT0lOIHBnX3N0YXRpc3RpY19leHRfZGF0YSBBUyBkIE9OIGQuc3R4b2lk ID0gZS5vaWQKK1dIRVJFIGUuc3R4cmVsaWQgPSAnc3RhdHNfZXhwb3J0X2ltcG9ydC50ZXN0Jzo6 cmVnY2xhc3MKK0FORCBlLnN0eG5hbWUgPSAnZXZlbnNfdGVzdCc7CisKK1NFTEVDVCBDT1VOVCgq KQorRlJPTSBzdGF0c19leHBvcnRfaW1wb3J0LnBnX3N0YXRpc3RpY19leHRfZGF0YV9jYXB0dXJl OworCiAtLSBFeHBvcnQgc3RhdHMKIFNFTEVDVAogICAgIGpzb25iX2J1aWxkX29iamVjdCgKQEAg LTMyMiwxOSArMzM5LDE4NiBAQCBXSEVSRSByLm9pZCA9ICdzdGF0c19leHBvcnRfaW1wb3J0Lmlz X29kZCc6OnJlZ2NsYXNzCiBTRUxFQ1QganNvbmJfcHJldHR5KDonaW5kZXhfc3RhdHNfanNvbic6 Ompzb25iKSBBUyBpbmRleF9zdGF0c19qc29uCiBXSEVSRSA6J2RlYnVnJzo6Ym9vbGVhbjsKIAor U0VMRUNUCisgICAganNvbmJfYnVpbGRfb2JqZWN0KAorICAgICAgICAnc2VydmVyX3ZlcnNpb25f bnVtJywgY3VycmVudF9zZXR0aW5nKCdzZXJ2ZXJfdmVyc2lvbl9udW0nKSwKKyAgICAgICAgJ3N0 eG9pZCcsIGUub2lkLAorICAgICAgICAncmVsb2lkJywgci5vaWQsCisgICAgICAgICdzdHhuYW1l JywgZS5zdHhuYW1lLAorICAgICAgICAnc3R4bnNwbmFtZScsIGVuLm5zcG5hbWUsCisgICAgICAg ICdyZWxuYW1lJywgci5yZWxuYW1lLAorICAgICAgICAnbnNwbmFtZScsIG4ubnNwbmFtZSwKKyAg ICAgICAgJ3N0eGtleXMnLCBlLnN0eGtleXM6OnRleHQsCisgICAgICAgICdzdHhraW5kJywgZS5z dHhraW5kOjp0ZXh0LAorICAgICAgICAnZGF0YScsCisgICAgICAgICgKKyAgICAgICAgICAgIFNF TEVDVAorICAgICAgICAgICAgICAgIGFycmF5X2FnZyhyIE9SREVSIGJ5IHIuc3R4ZGluaGVyaXQp CisgICAgICAgICAgICBGUk9NICgKKyAgICAgICAgICAgICAgICBTRUxFQ1QKKyAgICAgICAgICAg ICAgICAgICAgc2Quc3R4ZGluaGVyaXQsCisgICAgICAgICAgICAgICAgICAgIHNkLnN0eGRuZGlz dGluY3Q6OnRleHQgQVMgc3R4ZG5kaXN0aW5jdCwKKyAgICAgICAgICAgICAgICAgICAgc2Quc3R4 ZGRlcGVuZGVuY2llczo6dGV4dCBBUyBzdHhkZGVwZW5kZW5jaWVzLAorICAgICAgICAgICAgICAg ICAgICAoCisgICAgICAgICAgICAgICAgICAgICAgICBTRUxFQ1QKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBhcnJheV9hZ2cobWN2bCkKKyAgICAgICAgICAgICAgICAgICAgICAgIEZST00g cGdfbWN2X2xpc3RfaXRlbXMoc2Quc3R4ZG1jdikgQVMgbWN2bAorICAgICAgICAgICAgICAgICAg ICAgICAgV0hFUkUgc2Quc3R4ZG1jdiBJUyBOT1QgTlVMTAorICAgICAgICAgICAgICAgICAgICAp IEFTIHN0eGRtY3YsCisgICAgICAgICAgICAgICAgICAgICgKKyAgICAgICAgICAgICAgICAgICAg ICAgIFNFTEVDVAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5X2FnZyhyIE9SREVS IEJZIHIuc3RhaW5oZXJpdCwgci5zdGFhdHRudW0pCisgICAgICAgICAgICAgICAgICAgICAgICBG Uk9NICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRUxFQ1QKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHMuc3RhYXR0bnVtLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcy5zdGFpbmhlcml0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cy5zdGFudWxsZnJhYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuc3Rhd2lk dGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLnN0YWRpc3RpbmN0LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5zdGFraW5kMSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHMuc3Rha2luZDIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzLnN0YWtpbmQzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5z dGFraW5kNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuc3Rha2luZDUsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLnN0YW9wMSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHMuc3Rhb3AyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcy5zdGFvcDMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLnN0YW9w NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuc3Rhb3A1LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcy5zdGFjb2xsMSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHMuc3RhY29sbDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzLnN0YWNvbGwzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5zdGFjb2xs NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuc3RhY29sbDUsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzLnN0YW51bWJlcnMxOjp0ZXh0IEFTIHN0YW51bWJl cnMxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5zdGFudW1iZXJzMjo6dGV4 dCBBUyBzdGFudW1iZXJzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuc3Rh bnVtYmVyczM6OnRleHQgQVMgc3RhbnVtYmVyczMsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzLnN0YW51bWJlcnM0Ojp0ZXh0IEFTIHN0YW51bWJlcnM0LAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcy5zdGFudW1iZXJzNTo6dGV4dCBBUyBzdGFudW1iZXJzNSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuc3RhdmFsdWVzMTo6dGV4dCBBUyBz dGF2YWx1ZXMxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5zdGF2YWx1ZXMy Ojp0ZXh0IEFTIHN0YXZhbHVlczIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz LnN0YXZhbHVlczM6OnRleHQgQVMgc3RhdmFsdWVzMywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHMuc3RhdmFsdWVzNDo6dGV4dCBBUyBzdGF2YWx1ZXM0LAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcy5zdGF2YWx1ZXM1Ojp0ZXh0IEFTIHN0YXZhbHVlczUKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBGUk9NIHVubmVzdChzZC5zdHhkZXhwcikgQVMgcwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdIRVJFIHNkLnN0eGRleHByIElTIE5PVCBOVUxM CisgICAgICAgICAgICAgICAgICAgICAgICApIEFTIHIKKyAgICAgICAgICAgICAgICAgICAgKSBB UyBzdHhkZXhwcgorICAgICAgICAgICAgICAgIEZST00gcGdfc3RhdGlzdGljX2V4dF9kYXRhIEFT IHNkCisgICAgICAgICAgICAgICAgV0hFUkUgc2Quc3R4b2lkID0gZS5vaWQKKyAgICAgICAgICAg ICkgcgorICAgICAgICApLAorICAgICAgICAndHlwZXMnLAorICAgICAgICAoCisgICAgICAgICAg ICBTRUxFQ1QKKyAgICAgICAgICAgICAgICBhcnJheV9hZ2cocikKKyAgICAgICAgICAgIEZST00g KAorICAgICAgICAgICAgICAgIFNFTEVDVAorICAgICAgICAgICAgICAgICAgICBhLmF0dHR5cGlk IEFTIG9pZCwKKyAgICAgICAgICAgICAgICAgICAgdC50eXBuYW1lLAorICAgICAgICAgICAgICAg ICAgICBuLm5zcG5hbWUKKyAgICAgICAgICAgICAgICBGUk9NIHBnX2F0dHJpYnV0ZSBBUyBhCisg ICAgICAgICAgICAgICAgSk9JTiBwZ190eXBlIEFTIHQgT04gdC5vaWQgPSBhLmF0dHR5cGlkCisg ICAgICAgICAgICAgICAgSk9JTiBwZ19uYW1lc3BhY2UgQVMgbiBPTiBuLm9pZCA9IHQudHlwbmFt ZXNwYWNlCisgICAgICAgICAgICAgICAgV0hFUkUgYS5hdHRyZWxpZCA9IHIub2lkCisgICAgICAg ICAgICAgICAgQU5EIE5PVCBhLmF0dGlzZHJvcHBlZAorICAgICAgICAgICAgICAgIEFORCBhLmF0 dG51bSA+IDAKKyAgICAgICAgICAgICkgQVMgcgorICAgICAgICApLAorICAgICAgICAnY29sbGF0 aW9ucycsCisgICAgICAgICgKKyAgICAgICAgICAgIFNFTEVDVAorICAgICAgICAgICAgICAgIGFy cmF5X2FnZyhyKQorICAgICAgICAgICAgRlJPTSAoCisgICAgICAgICAgICAgICAgU0VMRUNUCisg ICAgICAgICAgICAgICAgICAgIGUub2lkLAorICAgICAgICAgICAgICAgICAgICBjLmNvbGxuYW1l LAorICAgICAgICAgICAgICAgICAgICBuLm5zcG5hbWUKKyAgICAgICAgICAgICAgICBGUk9NICgK KyAgICAgICAgICAgICAgICAgICAgU0VMRUNUIGEuYXR0Y29sbGF0aW9uIEFTIG9pZAorICAgICAg ICAgICAgICAgICAgICBGUk9NIHBnX2F0dHJpYnV0ZSBBUyBhCisgICAgICAgICAgICAgICAgICAg IFdIRVJFIGEuYXR0cmVsaWQgPSByLm9pZAorICAgICAgICAgICAgICAgICAgICBBTkQgTk9UIGEu YXR0aXNkcm9wcGVkCisgICAgICAgICAgICAgICAgICAgIEFORCBhLmF0dG51bSA+IDAKKyAgICAg ICAgICAgICAgICAgICAgVU5JT04KKyAgICAgICAgICAgICAgICAgICAgU0VMRUNUIHUuY29sbGlk CisgICAgICAgICAgICAgICAgICAgIEZST00gcGdfc3RhdGlzdGljX2V4dF9kYXRhIEFTIHNkCisg ICAgICAgICAgICAgICAgICAgIENST1NTIEpPSU4gTEFURVJBTCB1bm5lc3Qoc2Quc3R4ZGV4cHIp IEFTIHMKKyAgICAgICAgICAgICAgICAgICAgQ1JPU1MgSk9JTiBMQVRFUkFMIHVubmVzdChBUlJB WVsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLnN0YWNvbGwxLCBz LnN0YWNvbGwyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuc3Rh Y29sbDMsIHMuc3RhY29sbDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcy5zdGFjb2xsNV0pIEFTIHUoY29sbGlkKQorICAgICAgICAgICAgICAgICAgICBXSEVSRSBz ZC5zdHhvaWQgPSBlLm9pZAorICAgICAgICAgICAgICAgICAgICBBTkQgc2Quc3R4ZGV4cHIgSVMg Tk9UIE5VTEwKKyAgICAgICAgICAgICAgICAgICAgKSBBUyBlCisgICAgICAgICAgICAgICAgSk9J TiBwZ19jb2xsYXRpb24gQVMgYyBPTiBjLm9pZCA9IGUub2lkCisgICAgICAgICAgICAgICAgSk9J TiBwZ19uYW1lc3BhY2UgQVMgbiBPTiBuLm9pZCA9IGMuY29sbG5hbWVzcGFjZQorICAgICAgICAg ICAgKSBBUyByCisgICAgICAgICksCisgICAgICAgICdvcGVyYXRvcnMnLAorICAgICAgICAoCisg ICAgICAgICAgICBTRUxFQ1QKKyAgICAgICAgICAgICAgICBhcnJheV9hZ2cocikKKyAgICAgICAg ICAgIEZST00gKAorICAgICAgICAgICAgICAgIFNFTEVDVCBESVNUSU5DVAorICAgICAgICAgICAg ICAgICAgICBvLm9pZCwKKyAgICAgICAgICAgICAgICAgICAgby5vcHJuYW1lLAorICAgICAgICAg ICAgICAgICAgICBuLm5zcG5hbWUKKyAgICAgICAgICAgICAgICBGUk9NIHBnX3N0YXRpc3RpY19l eHRfZGF0YSBBUyBzZAorICAgICAgICAgICAgICAgIENST1NTIEpPSU4gTEFURVJBTCB1bm5lc3Qo c2Quc3R4ZGV4cHIpIEFTIHMKKyAgICAgICAgICAgICAgICBDUk9TUyBKT0lOIExBVEVSQUwgdW5u ZXN0KEFSUkFZWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5zdGFvcDEs IHMuc3Rhb3AyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5zdGFvcDMs IHMuc3Rhb3A0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5zdGFvcDVd KSBBUyB1KG9waWQpCisgICAgICAgICAgICAgICAgSk9JTiBwZ19vcGVyYXRvciBBUyBvIE9OIG8u b2lkID0gdS5vaWQKKyAgICAgICAgICAgICAgICBKT0lOIHBnX25hbWVzcGFjZSBBUyBuIE9OIG4u b2lkID0gby5vcHJuYW1lc3BhY2UKKyAgICAgICAgICAgICAgICBXSEVSRSBzZC5zdHhvaWQgPSBl Lm9pZAorICAgICAgICAgICAgICAgIEFORCBzZC5zdHhkZXhwciBJUyBOT1QgTlVMTAorICAgICAg ICAgICAgKSBBUyByCisgICAgICAgICksCisgICAgICAgICdhdHRyaWJ1dGVzJywKKyAgICAgICAg KAorICAgICAgICAgICAgU0VMRUNUCisgICAgICAgICAgICAgICAgYXJyYXlfYWdnKHIgT1JERVIg Qlkgci5hdHRudW0pCisgICAgICAgICAgICBGUk9NICgKKyAgICAgICAgICAgICAgICBTRUxFQ1QK KyAgICAgICAgICAgICAgICAgICAgYS5hdHRudW0sCisgICAgICAgICAgICAgICAgICAgIGEuYXR0 bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgYS5hdHR0eXBpZCwKKyAgICAgICAgICAgICAgICAg ICAgYS5hdHRjb2xsYXRpb24KKyAgICAgICAgICAgICAgICBGUk9NIHBnX2F0dHJpYnV0ZSBBUyBh CisgICAgICAgICAgICAgICAgV0hFUkUgYS5hdHRyZWxpZCA9IHIub2lkCisgICAgICAgICAgICAg ICAgQU5EIE5PVCBhLmF0dGlzZHJvcHBlZAorICAgICAgICAgICAgICAgIEFORCBhLmF0dG51bSA+ IDAKKyAgICAgICAgICAgICkgQVMgcgorICAgICAgICApCisgICAgKSBBUyBleHRfc3RhdHNfanNv bgorRlJPTSBwZ19jbGFzcyByCitKT0lOIHBnX3N0YXRpc3RpY19leHQgQVMgZSBPTiBlLnN0eHJl bGlkID0gci5vaWQKK0pPSU4gcGdfbmFtZXNwYWNlIEFTIGVuIE9OIGVuLm9pZCA9IGUuc3R4bmFt ZXNwYWNlCitKT0lOIHBnX25hbWVzcGFjZSBBUyBuIE9OIG4ub2lkID0gci5yZWxuYW1lc3BhY2UK K1dIRVJFIGUuc3R4cmVsaWQgPSAnc3RhdHNfZXhwb3J0X2ltcG9ydC50ZXN0Jzo6cmVnY2xhc3MK K0FORCBlLnN0eG5hbWUgPSAnZXZlbnNfdGVzdCcKK1xnc2V0CisKK1NFTEVDVCBqc29uYl9wcmV0 dHkoOidleHRfc3RhdHNfanNvbic6Ompzb25iKSBBUyBleHRfc3RhdHNfanNvbgorV0hFUkUgOidk ZWJ1Zyc6OmJvb2xlYW47CisKIFNFTEVDVCByZWxuYW1lLCByZWx0dXBsZXMKIEZST00gcGdfY2xh c3MKIFdIRVJFIG9pZCBJTiAoJ3N0YXRzX2V4cG9ydF9pbXBvcnQudGVzdCc6OnJlZ2NsYXNzLAog ICAgICAgICAgICAgICAnc3RhdHNfZXhwb3J0X2ltcG9ydC5pc19vZGQnOjpyZWdjbGFzcykKIE9S REVSIEJZIHJlbG5hbWU7CiAKLS0tIE1vdmUgdGFibGUgYW5kIGluZGV4IG91dCBvZiB0aGUgd2F5 CistLSBNb3ZlIHRhYmxlIGFuZCBpbmRleCBhbmQgZXh0ZW5kZWQgc3RhdHMgb3V0IG9mIHRoZSB3 YXkKIEFMVEVSIFRBQkxFIHN0YXRzX2V4cG9ydF9pbXBvcnQudGVzdCBSRU5BTUUgVE8gdGVzdF9v cmlnOwogQUxURVIgSU5ERVggc3RhdHNfZXhwb3J0X2ltcG9ydC5pc19vZGQgUkVOQU1FIFRPIGlz X29kZF9vcmlnOworQUxURVIgU1RBVElTVElDUyBzdGF0c19leHBvcnRfaW1wb3J0LmV2ZW5zX3Rl c3QgUkVOQU1FIFRPIGV2ZW5zX3Rlc3Rfb3JpZzsKIAotLS0gQ3JlYXRlIGVtcHR5IGNvcHkgdGFi bGVzCistLSBDcmVhdGUgZW1wdHkgY29weSB0YWJsZXMgYW5kIG9iamVjdHMKIENSRUFURSBUQUJM RSBzdGF0c19leHBvcnRfaW1wb3J0LnRlc3QoTElLRSBzdGF0c19leHBvcnRfaW1wb3J0LnRlc3Rf b3JpZyk7CiBDUkVBVEUgSU5ERVggaXNfb2RkIE9OIHN0YXRzX2V4cG9ydF9pbXBvcnQudGVzdCgo KGNvbXApLmEgJSAyID0gMSkpOworQ1JFQVRFIFNUQVRJU1RJQ1Mgc3RhdHNfZXhwb3J0X2ltcG9y dC5ldmVuc190ZXN0IE9OIG5hbWUsICgoY29tcCkuYSAlIDIgPSAwKSBGUk9NIHN0YXRzX2V4cG9y dF9pbXBvcnQudGVzdDsKIAogLS0gVmVyaWZ5IG5vIHN0YXRzIGZvciB0aGVzZSBuZXcgdGFibGVz CiBTRUxFQ1QgQ09VTlQoKikKQEAgLTQ1Niw2ICs2NDAsMTUgQEAgU0VMRUNUIHBnX2ltcG9ydF9y ZWxfc3RhdHMoCiAgICAgICAgIHRydWUsCiAgICAgICAgIHRydWUpOwogCitTRUxFQ1QgcGdfaW1w b3J0X2V4dF9zdGF0cygKKyAgICAgICAgZS5vaWQsCisgICAgICAgIDonZXh0X3N0YXRzX2pzb24n Ojpqc29uYiwKKyAgICAgICAgdHJ1ZSwKKyAgICAgICAgdHJ1ZSkKK0ZST00gcGdfc3RhdGlzdGlj X2V4dCBBUyBlCitXSEVSRSBlLnN0eHJlbGlkID0gJ3N0YXRzX2V4cG9ydF9pbXBvcnQudGVzdCc6 OnJlZ2NsYXNzCitBTkQgZS5zdHhuYW1lID0gJ2V2ZW5zX3Rlc3QnOworCiAtLSBUaGlzIHNob3Vs ZCByZXR1cm4gMCByb3dzCiBTRUxFQ1Qgc3RhYXR0bnVtLCBzdGFpbmhlcml0LCBzdGFudWxsZnJh Yywgc3Rhd2lkdGgsIHN0YWRpc3RpbmN0LAogICAgICAgICBzdGFraW5kMSwgc3Rha2luZDIsIHN0 YWtpbmQzLCBzdGFraW5kNCwgc3Rha2luZDUsCkBAIC00OTcsMyArNjkwLDUxIEBAIEZST00gcGdf Y2xhc3MKIFdIRVJFIG9pZCBJTiAoJ3N0YXRzX2V4cG9ydF9pbXBvcnQudGVzdCc6OnJlZ2NsYXNz LAogICAgICAgICAgICAgICAnc3RhdHNfZXhwb3J0X2ltcG9ydC5pc19vZGQnOjpyZWdjbGFzcykK IE9SREVSIEJZIHJlbG5hbWU7CisKKy0tIFRoaXMgc2hvdWxkIHJldHVybiAwIHJvd3MKK1NFTEVD VCAgZC5zdHhkaW5oZXJpdCwKKyAgICAgICAgZC5zdHhkbmRpc3RpbmN0Ojp0ZXh0IEFTIHN0eGRu ZGlzdGluY3QsCisgICAgICAgIGQuc3R4ZGRlcGVuZGVuY2llczo6dGV4dCBBUyBzdHhkZGVwZW5k ZW5jaWVzLAorICAgICAgICBkLnN0eGRtY3Y6OnRleHQgQVMgc3R4ZG1jdiwKKyAgICAgICAgZC5z dHhkZXhwcjo6dGV4dCBBUyBzdHhkZXhwcgorRlJPTSBwZ19zdGF0aXN0aWNfZXh0IEFTIGUKK0pP SU4gcGdfc3RhdGlzdGljX2V4dF9kYXRhIEFTIGQgT04gZC5zdHhvaWQgPSBlLm9pZAorV0hFUkUg ZS5zdHhyZWxpZCA9ICdzdGF0c19leHBvcnRfaW1wb3J0LnRlc3QnOjpyZWdjbGFzcworQU5EIGUu c3R4bmFtZSA9ICdldmVuc190ZXN0JworRVhDRVBUCitTRUxFQ1QgKgorRlJPTSBzdGF0c19leHBv cnRfaW1wb3J0LnBnX3N0YXRpc3RpY19leHRfZGF0YV9jYXB0dXJlOworCistLSBUaGlzIHNob3Vs ZCByZXR1cm4gMCByb3dzCitTRUxFQ1QgKgorRlJPTSBzdGF0c19leHBvcnRfaW1wb3J0LnBnX3N0 YXRpc3RpY19leHRfZGF0YV9jYXB0dXJlCitFWENFUFQKK1NFTEVDVCAgZC5zdHhkaW5oZXJpdCwK KyAgICAgICAgZC5zdHhkbmRpc3RpbmN0Ojp0ZXh0IEFTIHN0eGRuZGlzdGluY3QsCisgICAgICAg IGQuc3R4ZGRlcGVuZGVuY2llczo6dGV4dCBBUyBzdHhkZGVwZW5kZW5jaWVzLAorICAgICAgICBk LnN0eGRtY3Y6OnRleHQgQVMgc3R4ZG1jdiwKKyAgICAgICAgZC5zdHhkZXhwcjo6dGV4dCBBUyBz dHhkZXhwcgorRlJPTSBwZ19zdGF0aXN0aWNfZXh0IEFTIGUKK0pPSU4gcGdfc3RhdGlzdGljX2V4 dF9kYXRhIEFTIGQgT04gZC5zdHhvaWQgPSBlLm9pZAorV0hFUkUgZS5zdHhyZWxpZCA9ICdzdGF0 c19leHBvcnRfaW1wb3J0LnRlc3QnOjpyZWdjbGFzcworQU5EIGUuc3R4bmFtZSA9ICdldmVuc190 ZXN0JzsKKworCitTRUxFQ1Qgc3RhYXR0bnVtLCBzdGFpbmhlcml0LCBzdGFudWxsZnJhYywgc3Rh d2lkdGgsIHN0YWRpc3RpbmN0LAorICAgICAgICBzdGFraW5kMSwgc3Rha2luZDIsIHN0YWtpbmQz LCBzdGFraW5kNCwgc3Rha2luZDUsCisgICAgICAgIHN0YW9wMSwgc3Rhb3AyLCBzdGFvcDMsIHN0 YW9wNCwgc3Rhb3A1LCBzdGFjb2xsMSwgc3RhY29sbDIsIHN0YWNvbGwzLCBzdGFjb2xsNCwgc3Rh Y29sbDUsCisgICAgICAgIHN0YW51bWJlcnMxLCBzdGFudW1iZXJzMiwgc3RhbnVtYmVyczMsIHN0 YW51bWJlcnM0LCBzdGFudW1iZXJzNSwKKyAgICAgICAgc3YxLCBzdjIsIHN2Mywgc3Y0LCBzdjUK K0ZST00gc3RhdHNfZXhwb3J0X2ltcG9ydC5wZ19zdGF0aXN0aWNfY2FwdHVyZQorV0hFUkUgOidk ZWJ1Zyc6OmJvb2xlYW47CisKK1NFTEVDVCBzdGFhdHRudW0sIHN0YWluaGVyaXQsIHN0YW51bGxm cmFjLCBzdGF3aWR0aCwgc3RhZGlzdGluY3QsCisgICAgICAgIHN0YWtpbmQxLCBzdGFraW5kMiwg c3Rha2luZDMsIHN0YWtpbmQ0LCBzdGFraW5kNSwKKyAgICAgICAgc3Rhb3AxLCBzdGFvcDIsIHN0 YW9wMywgc3Rhb3A0LCBzdGFvcDUsIHN0YWNvbGwxLCBzdGFjb2xsMiwgc3RhY29sbDMsIHN0YWNv bGw0LCBzdGFjb2xsNSwKKyAgICAgICAgc3RhbnVtYmVyczEsIHN0YW51bWJlcnMyLCBzdGFudW1i ZXJzMywgc3RhbnVtYmVyczQsIHN0YW51bWJlcnM1LAorICAgICAgICBzdGF2YWx1ZXMxOjp0ZXh0 IEFTIHN2MSwgc3RhdmFsdWVzMjo6dGV4dCBBUyBzdjIsIHN0YXZhbHVlczM6OnRleHQgQVMgc3Yz LAorICAgICAgICBzdGF2YWx1ZXM0Ojp0ZXh0IEFTIHN2NCwgc3RhdmFsdWVzNTo6dGV4dCBBUyBz djUKK0ZST00gcGdfc3RhdGlzdGljCitXSEVSRSBzdGFyZWxpZCBJTiAoJ3N0YXRzX2V4cG9ydF9p bXBvcnQudGVzdCc6OnJlZ2NsYXNzLAorICAgICAgICAgICAgICAgICAgICAnc3RhdHNfZXhwb3J0 X2ltcG9ydC5pc19vZGQnOjpyZWdjbGFzcykKK0FORCA6J2RlYnVnJzo6Ym9vbGVhbjsKZGlmZiAt LWdpdCBhL2RvYy9zcmMvc2dtbC9mdW5jLnNnbWwgYi9kb2Mvc3JjL3NnbWwvZnVuYy5zZ21sCmlu ZGV4IGQxNjk4M2RmZjMuLmMyMjVkOTM3ZTkgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9mdW5j LnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbApAQCAtMjg3MzUsMTIgKzI4NzM1LDM4 IEBAIHBvc3RncmVzPSMgU0VMRUNUICcwLzAnOjpwZ19sc24gKyBwZC5zZWdtZW50X251bWJlciAq IHBzLnNldHRpbmc6OmludCArIDpvZmZzZXQKICAgICAgICA8L3BhcmE+CiAgICAgICAgPHBhcmE+ CiAgICAgICAgIElmIDxwYXJhbWV0ZXI+cmVxdWlyZV9tYXRjaF9vaWRzPC9wYXJhbWV0ZXI+IGlz IHNldCB0byA8bGl0ZXJhbD50cnVlPC9saXRlcmFsPiwKLSAgICAgICAgdGhlbiB0aGUgaW1wb3J0 IHdpbGwgZmFpbCBpZiB0aGUgaW1wb3J0ZWQgb2lkcyBmb3IgPHN0cnVjdG5hbWU+cHRfdHlwZTwv c3RydWN0bmFtZT4sCisgICAgICAgIHRoZW4gdGhlIGltcG9ydCB3aWxsIGZhaWwgaWYgdGhlIGlt cG9ydGVkIG9pZHMgZm9yIDxzdHJ1Y3RuYW1lPnBnX3R5cGU8L3N0cnVjdG5hbWU+LAogICAgICAg ICA8c3RydWN0bmFtZT5wZ19jb2xsYXRpb248L3N0cnVjdG5hbWU+LCBhbmQgPHN0cnVjdG5hbWU+ cGdfb3BlcmF0b3I8L3N0cnVjdG5hbWU+IGRvCiAgICAgICAgIG5vdCBtYXRjaCB0aGUgdmFsdWVz IHNwZWNpZmllZCBpbiA8cGFyYW1ldGVyPnJlbGF0aW9uX2pzb248L3BhcmFtZXRlcj4sIGFzIHdv dWxkIGJlIGV4cGVjdGVkCiAgICAgICAgIGluIGEgYmluYXJ5IHVwZ3JhZGUuIFRoZXNlIGFzc3Vt cHRpb25zIHdvdWxkIG5vdCBiZSB0cnVlIHdoZW4gcmVzdG9yaW5nIGZyb20gYSBkdW1wLgogICAg ICAgIDwvcGFyYT48L2VudHJ5PgogICAgICAgPC9yb3c+CisgICAgICA8cm93PgorICAgICAgIDxl bnRyeSByb2xlPSJmdW5jX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJmdW5jX3NpZ25hdHVyZSI+ CisgICAgICAgIDxpbmRleHRlcm0+CisgICAgICAgICA8cHJpbWFyeT5wZ19pbXBvcnRfZXh0X3N0 YXRzPC9wcmltYXJ5PgorICAgICAgICA8L2luZGV4dGVybT4KKyAgICAgICAgPGZ1bmN0aW9uPnBn X2ltcG9ydF9leHRfc3RhdHM8L2Z1bmN0aW9uPiAoIDxwYXJhbWV0ZXI+ZXh0ZW5kZWQgc3RhdGlz dGljc3Mgb2JqZWN0PC9wYXJhbWV0ZXI+IDx0eXBlPm9pZDwvdHlwZT4sIDxwYXJhbWV0ZXI+ZXh0 ZW5kZWRfc3RhdHM8L3BhcmFtZXRlcj4gPHR5cGU+anNvbmI8L3R5cGU+IDxwYXJhbWV0ZXI+dmFs aWRhdGU8L3BhcmFtZXRlcj4gPHR5cGU+Ym9vbGVhbjwvdHlwZT4sIDxwYXJhbWV0ZXI+cmVxdWly ZV9tYXRjaF9vaWRzPC9wYXJhbWV0ZXI+ICkKKyAgICAgICAgPHJldHVybnZhbHVlPmJvb2xlYW48 L3JldHVybnZhbHVlPgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgTW9k aWZpZXMgdGhlIDxzdHJ1Y3RuYW1lPnBnX3N0YXRpc3RpY19leHRfZGF0YTwvc3RydWN0bmFtZT4g cm93cyBmb3IgdGhlCisgICAgICAgIDxzdHJ1Y3RmaWVsZD5vaWQ8L3N0cnVjdGZpZWxkPiBtYXRj aGluZworICAgICAgICA8cGFyYW1ldGVyPmV4dGVuZGVkIHN0YXRpc3RpY3Mgb2JqZWN0PC9wYXJh bWV0ZXI+IGFyZSB0cmFuc2FjdGlvbmFsbHkKKyAgICAgICAgcmVwbGFjZWQgd2l0aCB0aGUgdmFs dWVzIGZvdW5kIGluIDxwYXJhbWV0ZXI+ZXh0ZW5kZWRfc3RhdHM8L3BhcmFtZXRlcj4uCisgICAg ICAgIFRoZSBwdXJwb3NlIG9mIHRoaXMgZnVuY3Rpb24gaXMgdG8gYXBwbHkgc3RhdGlzdGljcyB2 YWx1ZXMgaW4gYW4gdXBncmFkZQorICAgICAgICBzaXR1YXRpb24gdGhhdCBhcmUgImdvb2QgZW5v dWdoIiBmb3Igc3lzdGVtIG9wZXJhdGlvbiB1bnRpbCB0aGV5IGFyZQorICAgICAgICByZXBsYWNl ZCBieSB0aGUgbmV4dCBhdXRvLWFuYWx5emUuIFRoaXMgZnVuY3Rpb24gY291bGQgYmUgdXNlZCBi eQorICAgICAgICA8Y29tbWFuZD5wZ191cGdyYWRlPC9jb21tYW5kPiBhbmQgPGNvbW1hbmQ+cGdf cmVzdG9yZTwvY29tbWFuZD4gdG8KKyAgICAgICAgY29udmV5IHRoZSBzdGF0aXN0aWNzIGZyb20g dGhlIG9sZCBzeXN0ZW0gdmVyc2lvbiBpbnRvIHRoZSBuZXcgb25lLgorICAgICAgIDwvcGFyYT4K KyAgICAgICA8cGFyYT4KKyAgICAgICAgSWYgPHBhcmFtZXRlcj52YWxpZGF0ZTwvcGFyYW1ldGVy PiBpcyBzZXQgdG8gPGxpdGVyYWw+dHJ1ZTwvbGl0ZXJhbD4sCisgICAgICAgIHRoZW4gdGhlIGZ1 bmN0aW9uIHdpbGwgcGVyZm9ybSBhIHNlcmllcyBvZiBkYXRhIGNvbnNpc3RlbmN5IGNoZWNrcyBv bgorICAgICAgICB0aGUgZGF0YSBpbiA8cGFyYW1ldGVyPmV4dGVuZGVkX3N0YXRzPC9wYXJhbWV0 ZXI+IGJlZm9yZSBhdHRlbXB0aW5nIHRvCisgICAgICAgIGltcG9ydCBzdGF0aXN0aWNzLiBBbnkg aW5jb25zaXN0ZW5jaWVzIGZvdW5kIHdpbGwgcmFpc2UgYW4gZXJyb3IuCisgICAgICAgPC9wYXJh PjwvZW50cnk+CisgICAgICA8L3Jvdz4KICAgICAgPC90Ym9keT4KICAgICA8L3Rncm91cD4KICAg IDwvdGFibGU+Ci0tIAoyLjQzLjAKCg== --00000000000049aaa10610620585 Content-Type: text/x-patch; charset="US-ASCII"; name="v4-0003-Add-pg_export_stats-pg_import_stats.patch" Content-Disposition: attachment; filename="v4-0003-Add-pg_export_stats-pg_import_stats.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ls4e3u442 RnJvbSAxMDFjNjQ3NmRmM2I3ZTlkNGYxOTliNGM0YTE0OWUxZGZlZWJkNTFjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBDb3JleSBIdWlua2VyIDxjb3JleS5odWlua2VyQGdtYWlsLmNv bT4KRGF0ZTogVGh1LCAxIEZlYiAyMDI0IDIwOjQ1OjA1IC0wNTAwClN1YmplY3Q6IFtQQVRDSCB2 NCAzLzNdIEFkZCBwZ19leHBvcnRfc3RhdHMsIHBnX2ltcG9ydF9zdGF0cwoKVGhlc2UgYXJlIHJl ZmVyZW5jZSBwcm9ncmFtcyBkZXNpZ25lZCB0byBhaWQgdGhlIHRlc3Rpbmcgb2YgdGhlCmZ1bmN0 aW9ucyBwZ19pbXBvcnRfcmVsX3N0YXRzKCkgYW5kIHBnX2ltcG9ydF9leHRfc3RhdHMoKSwgYnJp bmdpbmcgaW4Kc3RhdGlzdGljcyBmcm9tICBvbGRlciB2ZXJzaW9ucyBvZiBwb3N0Z3Jlc3FsLgoK VGhlIHVsdGltYXRlIGdvYWwgaXMgdG8gbW92ZSB0aGUgcXVlcmllcyBpbnRvIHBnX2R1bXAuCi0t LQogc3JjL2Jpbi9zY3JpcHRzLy5naXRpZ25vcmUgICAgICAgIHwgICAgMiArCiBzcmMvYmluL3Nj cmlwdHMvTWFrZWZpbGUgICAgICAgICAgfCAgICA0ICstCiBzcmMvYmluL3NjcmlwdHMvcGdfZXhw b3J0X3N0YXRzLmMgfCAxMDEyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYmlu L3NjcmlwdHMvcGdfaW1wb3J0X3N0YXRzLmMgfCAgNDc3ICsrKysrKysrKysrKysrCiA0IGZpbGVz IGNoYW5nZWQsIDE0OTQgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogY3JlYXRlIG1vZGUg MTAwNjQ0IHNyYy9iaW4vc2NyaXB0cy9wZ19leHBvcnRfc3RhdHMuYwogY3JlYXRlIG1vZGUgMTAw NjQ0IHNyYy9iaW4vc2NyaXB0cy9wZ19pbXBvcnRfc3RhdHMuYwoKZGlmZiAtLWdpdCBhL3NyYy9i aW4vc2NyaXB0cy8uZ2l0aWdub3JlIGIvc3JjL2Jpbi9zY3JpcHRzLy5naXRpZ25vcmUKaW5kZXgg MGYyM2ZlMDAwNC4uMWI5YWRkYjMzOSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9zY3JpcHRzLy5naXRp Z25vcmUKKysrIGIvc3JjL2Jpbi9zY3JpcHRzLy5naXRpZ25vcmUKQEAgLTYsNSArNiw3IEBACiAv cmVpbmRleGRiCiAvdmFjdXVtZGIKIC9wZ19pc3JlYWR5CisvcGdfZXhwb3J0X3N0YXRzCisvcGdf aW1wb3J0X3N0YXRzCiAKIC90bXBfY2hlY2svCmRpZmYgLS1naXQgYS9zcmMvYmluL3NjcmlwdHMv TWFrZWZpbGUgYi9zcmMvYmluL3NjcmlwdHMvTWFrZWZpbGUKaW5kZXggOTYzM2M5OTEzNi4uNzU1 MGM2OWQ4MSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9zY3JpcHRzL01ha2VmaWxlCisrKyBiL3NyYy9i aW4vc2NyaXB0cy9NYWtlZmlsZQpAQCAtMTYsNyArMTYsNyBAQCBzdWJkaXIgPSBzcmMvYmluL3Nj cmlwdHMKIHRvcF9idWlsZGRpciA9IC4uLy4uLy4uCiBpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9z cmMvTWFrZWZpbGUuZ2xvYmFsCiAKLVBST0dSQU1TID0gY3JlYXRlZGIgY3JlYXRldXNlciBkcm9w ZGIgZHJvcHVzZXIgY2x1c3RlcmRiIHZhY3V1bWRiIHJlaW5kZXhkYiBwZ19pc3JlYWR5CitQUk9H UkFNUyA9IGNyZWF0ZWRiIGNyZWF0ZXVzZXIgZHJvcGRiIGRyb3B1c2VyIGNsdXN0ZXJkYiB2YWN1 dW1kYiByZWluZGV4ZGIgcGdfaXNyZWFkeSBwZ19leHBvcnRfc3RhdHMgcGdfaW1wb3J0X3N0YXRz CiAKIG92ZXJyaWRlIENQUEZMQUdTIDo9IC1JJChsaWJwcV9zcmNkaXIpICQoQ1BQRkxBR1MpCiBM REZMQUdTX0lOVEVSTkFMICs9IC1MJCh0b3BfYnVpbGRkaXIpL3NyYy9mZV91dGlscyAtbHBnZmV1 dGlscyAkKGxpYnBxX3BncG9ydCkKQEAgLTQxLDYgKzQxLDggQEAgaW5zdGFsbDogYWxsIGluc3Rh bGxkaXJzCiAJJChJTlNUQUxMX1BST0dSQU0pIHZhY3V1bWRiJChYKSAgICckKERFU1RESVIpJChi aW5kaXIpJy92YWN1dW1kYiQoWCkKIAkkKElOU1RBTExfUFJPR1JBTSkgcmVpbmRleGRiJChYKSAg JyQoREVTVERJUikkKGJpbmRpciknL3JlaW5kZXhkYiQoWCkKIAkkKElOU1RBTExfUFJPR1JBTSkg cGdfaXNyZWFkeSQoWCkgJyQoREVTVERJUikkKGJpbmRpciknL3BnX2lzcmVhZHkkKFgpCisJJChJ TlNUQUxMX1BST0dSQU0pIHBnX2V4cG9ydF9zdGF0cyQoWCkgJyQoREVTVERJUikkKGJpbmRpcikn L3BnX2V4cG9ydF9zdGF0cyQoWCkKKwkkKElOU1RBTExfUFJPR1JBTSkgcGdfaW1wb3J0X3N0YXRz JChYKSAnJChERVNURElSKSQoYmluZGlyKScvcGdfaW1wb3J0X3N0YXRzJChYKQogCiBpbnN0YWxs ZGlyczoKIAkkKE1LRElSX1ApICckKERFU1RESVIpJChiaW5kaXIpJwpkaWZmIC0tZ2l0IGEvc3Jj L2Jpbi9zY3JpcHRzL3BnX2V4cG9ydF9zdGF0cy5jIGIvc3JjL2Jpbi9zY3JpcHRzL3BnX2V4cG9y dF9zdGF0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmMwNzQ1MGQx YTkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3NjcmlwdHMvcGdfZXhwb3J0X3N0YXRzLmMK QEAgLTAsMCArMSwxMDEyIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ19leHBvcnRf c3RhdHMKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNCwgUG9zdGdyZVNR TCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5 NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogc3JjL2Jp bi9zY3JpcHRzL3BnX2V4cG9ydF9zdGF0cy5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8K KworI2luY2x1ZGUgInBvc3RncmVzX2ZlLmgiCisjaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVk ZSAiY29tbW9uL2xvZ2dpbmcuaCIKKyNpbmNsdWRlICJmZV91dGlscy9jYW5jZWwuaCIKKyNpbmNs dWRlICJmZV91dGlscy9vcHRpb25fdXRpbHMuaCIKKyNpbmNsdWRlICJmZV91dGlscy9xdWVyeV91 dGlscy5oIgorI2luY2x1ZGUgImZlX3V0aWxzL3NpbXBsZV9saXN0LmgiCisjaW5jbHVkZSAiZmVf dXRpbHMvc3RyaW5nX3V0aWxzLmgiCisKK3N0YXRpYyB2b2lkIGhlbHAoY29uc3QgY2hhciAqcHJv Z25hbWUpOworCisvKgorICogVmVyc2lvbnMgMTIrIGhhdmUgdGhlIHNhbWUgcmVsIHN0YXRzIGxh eW91dAorICovCitjb25zdCBjaGFyICpleHBvcnRfcmVsX3F1ZXJ5X3YxMiA9CisJIlNFTEVDVCAi CisJIiAgICBuLm5zcG5hbWUgQVMgc2NoZW1hbmFtZSwgIgorCSIgICAgci5yZWxuYW1lIEFTIHJl bG5hbWUsICIKKwkiICAgIE5VTEw6OnRleHQgQVMgZXh0X3N0YXRzX25hbWUsICIKKwkiICAgIGN1 cnJlbnRfc2V0dGluZygnc2VydmVyX3ZlcnNpb25fbnVtJyk6OmludGVnZXIgQVMgc2VydmVyX3Zl cnNpb25fbnVtLCAiCisJIiAgICBqc29uYl9idWlsZF9vYmplY3QoICIKKwkiICAgICAgICAnc2Vy dmVyX3ZlcnNpb25fbnVtJywgY3VycmVudF9zZXR0aW5nKCdzZXJ2ZXJfdmVyc2lvbl9udW0nKSwg IgorCSIgICAgICAgICdyZWxuYW1lJywgci5yZWxuYW1lLCAiCisJIiAgICAgICAgJ25zcG5hbWUn LCBuLm5zcG5hbWUsICIKKwkiICAgICAgICAncmVsdHVwbGVzJywgci5yZWx0dXBsZXMsICIKKwki ICAgICAgICAncmVscGFnZXMnLCByLnJlbHBhZ2VzLCAiCisJIiAgICAgICAgJ3R5cGVzJywgIgor CSIgICAgICAgICggIgorCSIgICAgICAgICAgICBTRUxFQ1QgYXJyYXlfYWdnKHRyIE9SREVSIEJZ IHRyLm9pZCkgIgorCSIgICAgICAgICAgICBGUk9NICggIgorCSIgICAgICAgICAgICAgICAgU0VM RUNUICIKKwkiICAgICAgICAgICAgICAgICAgICB0Lm9pZCwgIgorCSIgICAgICAgICAgICAgICAg ICAgIHQudHlwbmFtZSwgIgorCSIgICAgICAgICAgICAgICAgICAgIG4ubnNwbmFtZSAiCisJIiAg ICAgICAgICAgICAgICBGUk9NIHBnX3R5cGUgQVMgdCAiCisJIiAgICAgICAgICAgICAgICBKT0lO IHBnX25hbWVzcGFjZSBBUyBuIE9OIG4ub2lkID0gdC50eXBuYW1lc3BhY2UgIgorCSIgICAgICAg ICAgICAgICAgV0hFUkUgdC5vaWQgSU4gKCAiCisJIiAgICAgICAgICAgICAgICAgICAgU0VMRUNU IGEuYXR0dHlwaWQgIgorCSIgICAgICAgICAgICAgICAgICAgIEZST00gcGdfYXR0cmlidXRlIEFT IGEgIgorCSIgICAgICAgICAgICAgICAgICAgIFdIRVJFIGEuYXR0cmVsaWQgPSByLm9pZCAiCisJ IiAgICAgICAgICAgICAgICAgICAgQU5EIE5PVCBhLmF0dGlzZHJvcHBlZCAiCisJIiAgICAgICAg ICAgICAgICAgICAgQU5EIGEuYXR0bnVtID4gMCAiCisJIiAgICAgICAgICAgICAgICApICIKKwki ICAgICAgICAgICAgKSBBUyB0ciAiCisJIiAgICAgICAgKSwgIgorCSIgICAgICAgICdjb2xsYXRp b25zJywgIgorCSIgICAgICAgICggIgorCSIgICAgICAgICAgICBTRUxFQ1QgYXJyYXlfYWdnKGNy IE9SREVSIEJZIGNyLm9pZCkgIgorCSIgICAgICAgICAgICBGUk9NICggIgorCSIgICAgICAgICAg ICAgICAgU0VMRUNUICIKKwkiICAgICAgICAgICAgICAgICAgICBjLm9pZCwgIgorCSIgICAgICAg ICAgICAgICAgICAgIGMuY29sbG5hbWUsICIKKwkiICAgICAgICAgICAgICAgICAgICBuLm5zcG5h bWUgICIKKwkiICAgICAgICAgICAgICAgIEZST00gcGdfY29sbGF0aW9uIEFTIGMgIgorCSIgICAg ICAgICAgICAgICAgSk9JTiBwZ19uYW1lc3BhY2UgQVMgbiBPTiBuLm9pZCA9IGMuY29sbG5hbWVz cGFjZSAiCisJIiAgICAgICAgICAgICAgICBXSEVSRSBjLm9pZCBJTiAoICIKKwkiICAgICAgICAg ICAgICAgICAgICBTRUxFQ1QgYS5hdHRjb2xsYXRpb24gQVMgb2lkICIKKwkiICAgICAgICAgICAg ICAgICAgICBGUk9NIHBnX2F0dHJpYnV0ZSBBUyBhICIKKwkiICAgICAgICAgICAgICAgICAgICBX SEVSRSBhLmF0dHJlbGlkID0gci5vaWQgIgorCSIgICAgICAgICAgICAgICAgICAgIEFORCBOT1Qg YS5hdHRpc2Ryb3BwZWQgIgorCSIgICAgICAgICAgICAgICAgICAgIEFORCBhLmF0dG51bSA+IDAg IgorCSIgICAgICAgICAgICAgICAgICAgIFVOSU9OICIKKwkiICAgICAgICAgICAgICAgICAgICBT RUxFQ1QgdS5jb2xsaWQgIgorCSIgICAgICAgICAgICAgICAgICAgIEZST00gcGdfc3RhdGlzdGlj IEFTIHMgIgorCSIgICAgICAgICAgICAgICAgICAgIENST1NTIEpPSU4gTEFURVJBTCB1bm5lc3Qo QVJSQVlbICIKKwkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuc3Rh Y29sbDEsIHMuc3RhY29sbDIsICIKKwkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHMuc3RhY29sbDMsIHMuc3RhY29sbDQsICIKKwkiICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHMuc3RhY29sbDVdKSBBUyB1KGNvbGxpZCkgIgorCSIgICAgICAg ICAgICAgICAgICAgIFdIRVJFIHMuc3RhcmVsaWQgPSByLm9pZCAiCisJIiAgICAgICAgICAgICAg ICAgICAgKSAiCisJIiAgICAgICAgICAgICAgICApIEFTIGNyICIKKwkiICAgICAgICApLCAiCisJ IiAgICAgICAgJ29wZXJhdG9ycycsICIKKwkiICAgICAgICAoICIKKwkiICAgICAgICAgICAgU0VM RUNUIGFycmF5X2FnZyhwIE9SREVSIEJZIHAub2lkKSAiCisJIiAgICAgICAgICAgIEZST00gKCAi CisJIiAgICAgICAgICAgICAgICBTRUxFQ1QgIgorCSIgICAgICAgICAgICAgICAgICAgIG8ub2lk LCAiCisJIiAgICAgICAgICAgICAgICAgICAgby5vcHJuYW1lLCAiCisJIiAgICAgICAgICAgICAg ICAgICAgbi5uc3BuYW1lICIKKwkiICAgICAgICAgICAgICAgIEZST00gcGdfb3BlcmF0b3IgQVMg byAiCisJIiAgICAgICAgICAgICAgICBKT0lOIHBnX25hbWVzcGFjZSBBUyBuIE9OIG4ub2lkID0g by5vcHJuYW1lc3BhY2UgIgorCSIgICAgICAgICAgICAgICAgV0hFUkUgby5vaWQgSU4gKCAiCisJ IiAgICAgICAgICAgICAgICAgICAgU0VMRUNUIHUub2lkICIKKwkiICAgICAgICAgICAgICAgICAg ICBGUk9NIHBnX3N0YXRpc3RpYyBBUyBzICIKKwkiICAgICAgICAgICAgICAgICAgICBDUk9TUyBK T0lOIExBVEVSQUwgdW5uZXN0KEFSUkFZWyAiCisJIiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzLnN0YW9wMSwgcy5zdGFvcDIsICIKKwkiICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHMuc3Rhb3AzLCBzLnN0YW9wNCwgIgorCSIgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5zdGFvcDVdKSBBUyB1KG9waWQpICIKKwki ICAgICAgICAgICAgICAgICAgICBXSEVSRSBzLnN0YXJlbGlkID0gci5vaWQgIgorCSIgICAgICAg ICAgICAgICAgICAgICkgIgorCSIgICAgICAgICAgICApIEFTIHAgIgorCSIgICAgICAgICksICIK KwkiICAgICAgICAnYXR0cmlidXRlcycsICAiCisJIiAgICAgICAgKCAiCisJIiAgICAgICAgICAg IFNFTEVDVCBhcnJheV9hZ2coYXIgT1JERVIgQlkgYXIuYXR0bnVtKSAiCisJIiAgICAgICAgICAg IEZST00gKCAiCisJIiAgICAgICAgICAgICAgICBTRUxFQ1QgIgorCSIgICAgICAgICAgICAgICAg ICAgIGEuYXR0bnVtLCAiCisJIiAgICAgICAgICAgICAgICAgICAgYS5hdHRuYW1lLCAiCisJIiAg ICAgICAgICAgICAgICAgICAgYS5hdHR0eXBpZCwgIgorCSIgICAgICAgICAgICAgICAgICAgIGEu YXR0Y29sbGF0aW9uICIKKwkiICAgICAgICAgICAgICAgIEZST00gcGdfYXR0cmlidXRlIEFTIGEg IgorCSIgICAgICAgICAgICAgICAgV0hFUkUgYS5hdHRyZWxpZCA9IHIub2lkICIKKwkiICAgICAg ICAgICAgICAgIEFORCBOT1QgYS5hdHRpc2Ryb3BwZWQgIgorCSIgICAgICAgICAgICAgICAgQU5E IGEuYXR0bnVtID4gMCAiCisJIiAgICAgICAgICAgICkgQVMgYXIgIgorCSIgICAgICAgICksICIK KwkiICAgICAgICAnc3RhdGlzdGljcycsICIKKwkiICAgICAgICAoICIKKwkiICAgICAgICAgICAg U0VMRUNUIGFycmF5X2FnZyhzciBPUkRFUiBCWSBzci5zdGFpbmhlcml0LCBzci5zdGFhdHRudW0p ICIKKwkiICAgICAgICAgICAgRlJPTSAoICIKKwkiICAgICAgICAgICAgICAgIFNFTEVDVCAiCisJ IiAgICAgICAgICAgICAgICAgICAgIHMuc3RhYXR0bnVtLCAiCisJIiAgICAgICAgICAgICAgICAg ICAgIHMuc3RhaW5oZXJpdCwgIgorCSIgICAgICAgICAgICAgICAgICAgICBzLnN0YW51bGxmcmFj LCAiCisJIiAgICAgICAgICAgICAgICAgICAgIHMuc3Rhd2lkdGgsICIKKwkiICAgICAgICAgICAg ICAgICAgICAgcy5zdGFkaXN0aW5jdCwgIgorCSIgICAgICAgICAgICAgICAgICAgICBzLnN0YWtp bmQxLCAiCisJIiAgICAgICAgICAgICAgICAgICAgIHMuc3Rha2luZDIsICIKKwkiICAgICAgICAg ICAgICAgICAgICAgcy5zdGFraW5kMywgIgorCSIgICAgICAgICAgICAgICAgICAgICBzLnN0YWtp bmQ0LCAiCisJIiAgICAgICAgICAgICAgICAgICAgIHMuc3Rha2luZDUsICIKKwkiICAgICAgICAg ICAgICAgICAgICAgcy5zdGFvcDEsICIKKwkiICAgICAgICAgICAgICAgICAgICAgcy5zdGFvcDIs ICIKKwkiICAgICAgICAgICAgICAgICAgICAgcy5zdGFvcDMsICIKKwkiICAgICAgICAgICAgICAg ICAgICAgcy5zdGFvcDQsICIKKwkiICAgICAgICAgICAgICAgICAgICAgcy5zdGFvcDUsICIKKwki ICAgICAgICAgICAgICAgICAgICAgcy5zdGFjb2xsMSwgIgorCSIgICAgICAgICAgICAgICAgICAg ICBzLnN0YWNvbGwyLCAiCisJIiAgICAgICAgICAgICAgICAgICAgIHMuc3RhY29sbDMsICIKKwki ICAgICAgICAgICAgICAgICAgICAgcy5zdGFjb2xsNCwgIgorCSIgICAgICAgICAgICAgICAgICAg ICBzLnN0YWNvbGw1LCAiCisJIiAgICAgICAgICAgICAgICAgICAgIHMuc3RhbnVtYmVyczE6OnRl eHQgQVMgc3RhbnVtYmVyczEsICIKKwkiICAgICAgICAgICAgICAgICAgICAgcy5zdGFudW1iZXJz Mjo6dGV4dCBBUyBzdGFudW1iZXJzMiwgIgorCSIgICAgICAgICAgICAgICAgICAgICBzLnN0YW51 bWJlcnMzOjp0ZXh0IEFTIHN0YW51bWJlcnMzLCAiCisJIiAgICAgICAgICAgICAgICAgICAgIHMu c3RhbnVtYmVyczQ6OnRleHQgQVMgc3RhbnVtYmVyczQsICIKKwkiICAgICAgICAgICAgICAgICAg ICAgcy5zdGFudW1iZXJzNTo6dGV4dCBBUyBzdGFudW1iZXJzNSwgIgorCSIgICAgICAgICAgICAg ICAgICAgICBzLnN0YXZhbHVlczE6OnRleHQgQVMgc3RhdmFsdWVzMSwgIgorCSIgICAgICAgICAg ICAgICAgICAgICBzLnN0YXZhbHVlczI6OnRleHQgQVMgc3RhdmFsdWVzMiwgIgorCSIgICAgICAg ICAgICAgICAgICAgICBzLnN0YXZhbHVlczM6OnRleHQgQVMgc3RhdmFsdWVzMywgIgorCSIgICAg ICAgICAgICAgICAgICAgICBzLnN0YXZhbHVlczQ6OnRleHQgQVMgc3RhdmFsdWVzNCwgIgorCSIg ICAgICAgICAgICAgICAgICAgICBzLnN0YXZhbHVlczU6OnRleHQgQVMgc3RhdmFsdWVzNSAiCisJ IiAgICAgICAgICAgICAgICBGUk9NIHBnX3N0YXRpc3RpYyBBUyBzICIKKwkiICAgICAgICAgICAg ICAgIFdIRVJFIHMuc3RhcmVsaWQgPSByLm9pZCAiCisJIiAgICAgICAgICAgICkgQVMgc3IgIgor CSIgICAgICAgICkgIgorCSIgICAgKSBBUyBzdGF0c19qc29uICIKKwkiRlJPTSBwZ19jbGFzcyBB UyByICIKKwkiSk9JTiBwZ19uYW1lc3BhY2UgQVMgbiBPTiBuLm9pZCA9IHIucmVsbmFtZXNwYWNl ICIKKwkiV0hFUkUgci5yZWxraW5kIElOICgncicsICdtJywgJ2YnLCAncCcsICdpJykgIgorCSJB TkQgci5yZWxwZXJzaXN0ZW5jZSA9ICdwJyAiCisJIkFORCBuLm5zcG5hbWUgTk9UIElOICgncGdf Y2F0YWxvZycsICdwZ190b2FzdCcsICdpbmZvcm1hdGlvbl9zY2hlbWEnKSAiOworCisvKgorICog VmVyc2lvbnMgMTAtMTEgYXJlIG1pc3NpbmcgdGhlIHBnX3N0YXRpc3RpYy5zdGFjb2xsTiBjb2x1 bW5zCisgKi8KK2NvbnN0IGNoYXIgKmV4cG9ydF9yZWxfcXVlcnlfdjEwID0KKwkiU0VMRUNUICIK KwkiICAgIG4ubnNwbmFtZSBBUyBzY2hlbWFuYW1lLCAiCisJIiAgICByLnJlbG5hbWUgQVMgcmVs bmFtZSwgIgorCSIgICAgTlVMTDo6dGV4dCBBUyBleHRfc3RhdHNfbmFtZSwgIgorCSIgICAgY3Vy cmVudF9zZXR0aW5nKCdzZXJ2ZXJfdmVyc2lvbl9udW0nKTo6aW50ZWdlciBBUyBzZXJ2ZXJfdmVy c2lvbl9udW0sICIKKwkiICAgIGpzb25iX2J1aWxkX29iamVjdCggIgorCSIgICAgICAgICd0eXBl cycsICIKKwkiICAgICAgICAoICIKKwkiICAgICAgICAgICAgU0VMRUNUIGFycmF5X2FnZyh0ciBP UkRFUiBCWSB0ci5vaWQpICIKKwkiICAgICAgICAgICAgRlJPTSAoICIKKwkiICAgICAgICAgICAg ICAgIFNFTEVDVCAiCisJIiAgICAgICAgICAgICAgICAgICAgdC5vaWQsICIKKwkiICAgICAgICAg ICAgICAgICAgICB0LnR5cG5hbWUsICIKKwkiICAgICAgICAgICAgICAgICAgICBuLm5zcG5hbWUg IgorCSIgICAgICAgICAgICAgICAgRlJPTSBwZ190eXBlIEFTIHQgIgorCSIgICAgICAgICAgICAg ICAgSk9JTiBwZ19uYW1lc3BhY2UgQVMgbiBPTiBuLm9pZCA9IHQudHlwbmFtZXNwYWNlICIKKwki ICAgICAgICAgICAgICAgIFdIRVJFIHQub2lkIElOICggIgorCSIgICAgICAgICAgICAgICAgICAg IFNFTEVDVCBhLmF0dHR5cGlkICIKKwkiICAgICAgICAgICAgICAgICAgICBGUk9NIHBnX2F0dHJp YnV0ZSBBUyBhICIKKwkiICAgICAgICAgICAgICAgICAgICBXSEVSRSBhLmF0dHJlbGlkID0gci5v aWQgIgorCSIgICAgICAgICAgICAgICAgICAgIEFORCBOT1QgYS5hdHRpc2Ryb3BwZWQgIgorCSIg ICAgICAgICAgICAgICAgICAgIEFORCBhLmF0dG51bSA+IDAgIgorCSIgICAgICAgICAgICAgICAg KSAiCisJIiAgICAgICAgICAgICkgQVMgdHIgIgorCSIgICAgICAgICksICIKKwkiICAgICAgICAn Y29sbGF0aW9ucycsICIKKwkiICAgICAgICAoICIKKwkiICAgICAgICAgICAgU0VMRUNUIGFycmF5 X2FnZyhjciBPUkRFUiBCWSBjci5vaWQpICIKKwkiICAgICAgICAgICAgRlJPTSAoICIKKwkiICAg ICAgICAgICAgICAgIFNFTEVDVCAiCisJIiAgICAgICAgICAgICAgICAgICAgYy5vaWQsICIKKwki ICAgICAgICAgICAgICAgICAgICBjLmNvbGxuYW1lLCAiCisJIiAgICAgICAgICAgICAgICAgICAg bi5uc3BuYW1lICAiCisJIiAgICAgICAgICAgICAgICBGUk9NIHBnX2NvbGxhdGlvbiBBUyBjICIK KwkiICAgICAgICAgICAgICAgIEpPSU4gcGdfbmFtZXNwYWNlIEFTIG4gT04gbi5vaWQgPSBjLmNv bGxuYW1lc3BhY2UgIgorCSIgICAgICAgICAgICAgICAgV0hFUkUgYy5vaWQgSU4gKCAiCisJIiAg ICAgICAgICAgICAgICAgICAgU0VMRUNUIGEuYXR0Y29sbGF0aW9uIEFTIG9pZCAiCisJIiAgICAg ICAgICAgICAgICAgICAgRlJPTSBwZ19hdHRyaWJ1dGUgQVMgYSAiCisJIiAgICAgICAgICAgICAg ICAgICAgV0hFUkUgYS5hdHRyZWxpZCA9IHIub2lkICIKKwkiICAgICAgICAgICAgICAgICAgICBB TkQgTk9UIGEuYXR0aXNkcm9wcGVkICIKKwkiICAgICAgICAgICAgICAgICAgICBBTkQgYS5hdHRu dW0gPiAwICIKKwkiICAgICAgICAgICAgICAgICAgICApICIKKwkiICAgICAgICAgICAgICAgICkg QVMgY3IgIgorCSIgICAgICAgICksICIKKwkiICAgICAgICAnb3BlcmF0b3JzJywgIgorCSIgICAg ICAgICggIgorCSIgICAgICAgICAgICBTRUxFQ1QgYXJyYXlfYWdnKHAgT1JERVIgQlkgcC5vaWQp ICIKKwkiICAgICAgICAgICAgRlJPTSAoICIKKwkiICAgICAgICAgICAgICAgIFNFTEVDVCAiCisJ IiAgICAgICAgICAgICAgICAgICAgby5vaWQsICIKKwkiICAgICAgICAgICAgICAgICAgICBvLm9w cm5hbWUsICIKKwkiICAgICAgICAgICAgICAgICAgICBuLm5zcG5hbWUgIgorCSIgICAgICAgICAg ICAgICAgRlJPTSBwZ19vcGVyYXRvciBBUyBvICIKKwkiICAgICAgICAgICAgICAgIEpPSU4gcGdf bmFtZXNwYWNlIEFTIG4gT04gbi5vaWQgPSBvLm9wcm5hbWVzcGFjZSAiCisJIiAgICAgICAgICAg ICAgICBXSEVSRSBvLm9pZCBJTiAoICIKKwkiICAgICAgICAgICAgICAgICAgICBTRUxFQ1QgdS5v aWQgIgorCSIgICAgICAgICAgICAgICAgICAgIEZST00gcGdfc3RhdGlzdGljIEFTIHMgIgorCSIg ICAgICAgICAgICAgICAgICAgIENST1NTIEpPSU4gTEFURVJBTCB1bm5lc3QoQVJSQVlbICIKKwki ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuc3Rhb3AxLCBzLnN0YW9w MiwgIgorCSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5zdGFvcDMs IHMuc3Rhb3A0LCAiCisJIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz LnN0YW9wNV0pIEFTIHUob3BpZCkgIgorCSIgICAgICAgICAgICAgICAgICAgIFdIRVJFIHMuc3Rh cmVsaWQgPSByLm9pZCAiCisJIiAgICAgICAgICAgICAgICAgICAgKSAiCisJIiAgICAgICAgICAg ICkgQVMgcCAiCisJIiAgICAgICAgKSwgIgorCSIgICAgICAgICdhdHRyaWJ1dGVzJywgICIKKwki ICAgICAgICAoICIKKwkiICAgICAgICAgICAgU0VMRUNUIGFycmF5X2FnZyhhciBPUkRFUiBCWSBh ci5hdHRudW0pICIKKwkiICAgICAgICAgICAgRlJPTSAoICIKKwkiICAgICAgICAgICAgICAgIFNF TEVDVCAiCisJIiAgICAgICAgICAgICAgICAgICAgYS5hdHRudW0sICIKKwkiICAgICAgICAgICAg ICAgICAgICBhLmF0dG5hbWUsICIKKwkiICAgICAgICAgICAgICAgICAgICBhLmF0dHR5cGlkLCAi CisJIiAgICAgICAgICAgICAgICAgICAgYS5hdHRjb2xsYXRpb24gIgorCSIgICAgICAgICAgICAg ICAgRlJPTSBwZ19hdHRyaWJ1dGUgQVMgYSAiCisJIiAgICAgICAgICAgICAgICBXSEVSRSBhLmF0 dHJlbGlkID0gci5vaWQgIgorCSIgICAgICAgICAgICAgICAgQU5EIE5PVCBhLmF0dGlzZHJvcHBl ZCAiCisJIiAgICAgICAgICAgICAgICBBTkQgYS5hdHRudW0gPiAwICIKKwkiICAgICAgICAgICAg KSBBUyBhciAiCisJIiAgICAgICAgKSwgIgorCSIgICAgICAgICdzdGF0aXN0aWNzJywgIgorCSIg ICAgICAgICggIgorCSIgICAgICAgICAgICBTRUxFQ1QgYXJyYXlfYWdnKHNyIE9SREVSIEJZIHNy LnN0YWluaGVyaXQsIHNyLnN0YWF0dG51bSkgIgorCSIgICAgICAgICAgICBGUk9NICggIgorCSIg ICAgICAgICAgICAgICAgU0VMRUNUICIKKwkiICAgICAgICAgICAgICAgICAgICAgcy5zdGFhdHRu dW0sICIKKwkiICAgICAgICAgICAgICAgICAgICAgcy5zdGFpbmhlcml0LCAiCisJIiAgICAgICAg ICAgICAgICAgICAgIHMuc3RhbnVsbGZyYWMsICIKKwkiICAgICAgICAgICAgICAgICAgICAgcy5z dGF3aWR0aCwgIgorCSIgICAgICAgICAgICAgICAgICAgICBzLnN0YWRpc3RpbmN0LCAiCisJIiAg ICAgICAgICAgICAgICAgICAgIHMuc3Rha2luZDEsICIKKwkiICAgICAgICAgICAgICAgICAgICAg cy5zdGFraW5kMiwgIgorCSIgICAgICAgICAgICAgICAgICAgICBzLnN0YWtpbmQzLCAiCisJIiAg ICAgICAgICAgICAgICAgICAgIHMuc3Rha2luZDQsICIKKwkiICAgICAgICAgICAgICAgICAgICAg cy5zdGFraW5kNSwgIgorCSIgICAgICAgICAgICAgICAgICAgICBzLnN0YW9wMSwgIgorCSIgICAg ICAgICAgICAgICAgICAgICBzLnN0YW9wMiwgIgorCSIgICAgICAgICAgICAgICAgICAgICBzLnN0 YW9wMywgIgorCSIgICAgICAgICAgICAgICAgICAgICBzLnN0YW9wNCwgIgorCSIgICAgICAgICAg ICAgICAgICAgICBzLnN0YW9wNSwgIgorCSIgICAgICAgICAgICAgICAgICAgICBzLnN0YW51bWJl cnMxOjp0ZXh0IEFTIHN0YW51bWJlcnMxLCAiCisJIiAgICAgICAgICAgICAgICAgICAgIHMuc3Rh bnVtYmVyczI6OnRleHQgQVMgc3RhbnVtYmVyczIsICIKKwkiICAgICAgICAgICAgICAgICAgICAg cy5zdGFudW1iZXJzMzo6dGV4dCBBUyBzdGFudW1iZXJzMywgIgorCSIgICAgICAgICAgICAgICAg ICAgICBzLnN0YW51bWJlcnM0Ojp0ZXh0IEFTIHN0YW51bWJlcnM0LCAiCisJIiAgICAgICAgICAg ICAgICAgICAgIHMuc3RhbnVtYmVyczU6OnRleHQgQVMgc3RhbnVtYmVyczUsICIKKwkiICAgICAg ICAgICAgICAgICAgICAgcy5zdGF2YWx1ZXMxOjp0ZXh0IEFTIHN0YXZhbHVlczEsICIKKwkiICAg ICAgICAgICAgICAgICAgICAgcy5zdGF2YWx1ZXMyOjp0ZXh0IEFTIHN0YXZhbHVlczIsICIKKwki ICAgICAgICAgICAgICAgICAgICAgcy5zdGF2YWx1ZXMzOjp0ZXh0IEFTIHN0YXZhbHVlczMsICIK KwkiICAgICAgICAgICAgICAgICAgICAgcy5zdGF2YWx1ZXM0Ojp0ZXh0IEFTIHN0YXZhbHVlczQs ICIKKwkiICAgICAgICAgICAgICAgICAgICAgcy5zdGF2YWx1ZXM1Ojp0ZXh0IEFTIHN0YXZhbHVl czUgIgorCSIgICAgICAgICAgICAgICAgRlJPTSBwZ19zdGF0aXN0aWMgQVMgcyAiCisJIiAgICAg ICAgICAgICAgICBXSEVSRSBzLnN0YXJlbGlkID0gci5vaWQgIgorCSIgICAgICAgICAgICApIEFT IHNyICIKKwkiICAgICAgICApICIKKwkiICAgICkgQVMgc3RhdHNfanNvbiAiCisJIkZST00gcGdf Y2xhc3MgQVMgciAiCisJIkpPSU4gcGdfbmFtZXNwYWNlIEFTIG4gT04gbi5vaWQgPSByLnJlbG5h bWVzcGFjZSAiCisJIldIRVJFIHIucmVsa2luZCBJTiAoJ3InLCAnbScsICdmJywgJ3AnLCAnaScp ICIKKwkiQU5EIHIucmVscGVyc2lzdGVuY2UgPSAncCcgIgorCSJBTkQgbi5uc3BuYW1lIE5PVCBJ TiAoJ3BnX2NhdGFsb2cnLCAncGdfdG9hc3QnLCAnaW5mb3JtYXRpb25fc2NoZW1hJykgIjsKKwor Citjb25zdCBjaGFyICpleHBvcnRfZXh0X3F1ZXJ5X3YxNSA9CisvKiB2MTUrIGhhdmUgdGhlIHNh bWUgZm9ybWF0ICovCisJIlNFTEVDVCAiCisJIiAgICBuLm5zcG5hbWUgQVMgc2NoZW1hbmFtZSwg IgorCSIgICAgci5yZWxuYW1lIEFTIHJlbG5hbWUsICIKKwkiICAgIGUuc3R4bmFtZSBBUyBleHRf c3RhdHNfbmFtZSwgIgorCSIgICAgKGN1cnJlbnRfc2V0dGluZygnc2VydmVyX3ZlcnNpb25fbnVt Jzo6dGV4dCkpOjppbnRlZ2VyIEFTIHNlcnZlcl92ZXJzaW9uX251bSwgIgorCSIgICAganNvbmJf YnVpbGRfb2JqZWN0KCAiCisJIiAgICAgICAgJ3NlcnZlcl92ZXJzaW9uX251bScsIGN1cnJlbnRf c2V0dGluZygnc2VydmVyX3ZlcnNpb25fbnVtJyksICIKKwkiICAgICAgICAnc3R4b2lkJywgZS5v aWQsICIKKwkiICAgICAgICAncmVsb2lkJywgci5vaWQsICIKKwkiICAgICAgICAnc3R4bmFtZScs IGUuc3R4bmFtZSwgIgorCSIgICAgICAgICdzdHhuc3BuYW1lJywgZW4ubnNwbmFtZSwgIgorCSIg ICAgICAgICdyZWxuYW1lJywgci5yZWxuYW1lLCAiCisJIiAgICAgICAgJ25zcG5hbWUnLCBuLm5z cG5hbWUsICIKKwkiICAgICAgICAnc3R4a2V5cycsIGUuc3R4a2V5czo6dGV4dCwgIgorCSIgICAg ICAgICdzdHhraW5kJywgZS5zdHhraW5kOjp0ZXh0LCAiCisJIiAgICAgICAgJ2RhdGEnLCAiCisJ IiAgICAgICAgKCAiCisJIiAgICAgICAgICAgIFNFTEVDVCBhcnJheV9hZ2coZHIgT1JERVIgYnkg ZHIuc3R4ZGluaGVyaXQpICIKKwkiICAgICAgICAgICAgRlJPTSAoICIKKwkiICAgICAgICAgICAg ICAgIFNFTEVDVCAiCisJIiAgICAgICAgICAgICAgICAgICAgc2Quc3R4ZGluaGVyaXQsICIKKwki ICAgICAgICAgICAgICAgICAgICBzZC5zdHhkbmRpc3RpbmN0Ojp0ZXh0IEFTIHN0eGRuZGlzdGlu Y3QsICAiCisJIiAgICAgICAgICAgICAgICAgICAgc2Quc3R4ZGRlcGVuZGVuY2llczo6dGV4dCBB UyBzdHhkZGVwZW5kZW5jaWVzLCAgIgorCSIgICAgICAgICAgICAgICAgICAgICggIgorCSIgICAg ICAgICAgICAgICAgICAgICAgICBTRUxFQ1QgYXJyYXlfYWdnKG1jdmwpICIKKwkiICAgICAgICAg ICAgICAgICAgICAgICAgRlJPTSBwZ19tY3ZfbGlzdF9pdGVtcyhzZC5zdHhkbWN2KSBBUyBtY3Zs ICIKKwkiICAgICAgICAgICAgICAgICAgICAgICAgV0hFUkUgc2Quc3R4ZG1jdiBJUyBOT1QgTlVM TCAiCisJIiAgICAgICAgICAgICAgICAgICAgKSBBUyBzdHhkbWN2LCAiCisJIiAgICAgICAgICAg ICAgICAgICAgKCAiCisJIiAgICAgICAgICAgICAgICAgICAgICAgIFNFTEVDVCBhcnJheV9hZ2co c3IgT1JERVIgQlkgc3Iuc3RhaW5oZXJpdCwgc3Iuc3RhYXR0bnVtKSAiCisJIiAgICAgICAgICAg ICAgICAgICAgICAgIEZST00gKCAiCisJIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRUxF Q1QgIgorCSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLnN0YWF0dG51bSwgIgor CSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLnN0YWluaGVyaXQsICIKKwkiICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5zdGFudWxsZnJhYywgIgorCSIgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzLnN0YXdpZHRoLCAiCisJIiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHMuc3RhZGlzdGluY3QsICIKKwkiICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcy5zdGFraW5kMSwgIgorCSIgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzLnN0YWtpbmQyLCAiCisJIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHMuc3Rha2luZDMsICIKKwkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5zdGFr aW5kNCwgIgorCSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLnN0YWtpbmQ1LCAi CisJIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuc3Rhb3AxLCAiCisJIiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuc3Rhb3AyLCAiCisJIiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHMuc3Rhb3AzLCAiCisJIiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHMuc3Rhb3A0LCAiCisJIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHMuc3Rhb3A1LCAiCisJIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuc3RhY29s bDEsICIKKwkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5zdGFjb2xsMiwgIgor CSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLnN0YWNvbGwzLCAiCisJIiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuc3RhY29sbDQsICIKKwkiICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcy5zdGFjb2xsNSwgIgorCSIgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzLnN0YW51bWJlcnMxOjp0ZXh0IEFTIHN0YW51bWJlcnMxLCAiCisJIiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuc3RhbnVtYmVyczI6OnRleHQgQVMgc3Rh bnVtYmVyczIsICIKKwkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5zdGFudW1i ZXJzMzo6dGV4dCBBUyBzdGFudW1iZXJzMywgIgorCSIgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzLnN0YW51bWJlcnM0Ojp0ZXh0IEFTIHN0YW51bWJlcnM0LCAiCisJIiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHMuc3RhbnVtYmVyczU6OnRleHQgQVMgc3RhbnVtYmVy czUsICIKKwkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5zdGF2YWx1ZXMxOjp0 ZXh0IEFTIHN0YXZhbHVlczEsICIKKwkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cy5zdGF2YWx1ZXMyOjp0ZXh0IEFTIHN0YXZhbHVlczIsICIKKwkiICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcy5zdGF2YWx1ZXMzOjp0ZXh0IEFTIHN0YXZhbHVlczMsICIKKwkiICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5zdGF2YWx1ZXM0Ojp0ZXh0IEFTIHN0YXZh bHVlczQsICIKKwkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5zdGF2YWx1ZXM1 Ojp0ZXh0IEFTIHN0YXZhbHVlczUgIgorCSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlJP TSB1bm5lc3Qoc2Quc3R4ZGV4cHIpIEFTIHMgIgorCSIgICAgICAgICAgICAgICAgICAgICAgICAg ICAgV0hFUkUgc2Quc3R4ZGV4cHIgSVMgTk9UIE5VTEwgIgorCSIgICAgICAgICAgICAgICAgICAg ICAgICApIEFTIHNyICIKKwkiICAgICAgICAgICAgICAgICAgICApIEFTIHN0eGRleHByICIKKwki ICAgICAgICAgICAgICAgIEZST00gcGdfc3RhdGlzdGljX2V4dF9kYXRhIEFTIHNkICIKKwkiICAg ICAgICAgICAgICAgIFdIRVJFIHNkLnN0eG9pZCA9IGUub2lkICIKKwkiICAgICAgICAgICAgKSBB UyBkciAiCisJIiAgICAgICAgKSwgIgorCSIgICAgICAgICd0eXBlcycsICIKKwkiICAgICAgICAo ICIKKwkiICAgICAgICAgICAgU0VMRUNUIGFycmF5X2FnZyh0ciBPUkRFUiBCWSB0ci5vaWQpICIK KwkiICAgICAgICAgICAgRlJPTSAoICIKKwkiICAgICAgICAgICAgICAgIFNFTEVDVCAiCisJIiAg ICAgICAgICAgICAgICAgICAgdC5vaWQsICIKKwkiICAgICAgICAgICAgICAgICAgICB0LnR5cG5h bWUsICIKKwkiICAgICAgICAgICAgICAgICAgICBuLm5zcG5hbWUgIgorCSIgICAgICAgICAgICAg ICAgRlJPTSBwZ190eXBlIEFTIHQgIgorCSIgICAgICAgICAgICAgICAgSk9JTiBwZ19uYW1lc3Bh Y2UgQVMgbiBPTiBuLm9pZCA9IHQudHlwbmFtZXNwYWNlICIKKwkiICAgICAgICAgICAgICAgIFdI RVJFIHQub2lkIElOICggIgorCSIgICAgICAgICAgICAgICAgICAgIFNFTEVDVCBhLmF0dHR5cGlk ICIKKwkiICAgICAgICAgICAgICAgICAgICBGUk9NIHBnX2F0dHJpYnV0ZSBBUyBhICIKKwkiICAg ICAgICAgICAgICAgICAgICBXSEVSRSBhLmF0dHJlbGlkID0gci5vaWQgIgorCSIgICAgICAgICAg ICAgICAgICAgIEFORCBOT1QgYS5hdHRpc2Ryb3BwZWQgIgorCSIgICAgICAgICAgICAgICAgICAg IEFORCBhLmF0dG51bSA+IDAgIgorCSIgICAgICAgICAgICAgICAgKSAiCisJIiAgICAgICAgICAg ICkgQVMgdHIgIgorCSIgICAgICAgICksICIKKwkiICAgICAgICAnY29sbGF0aW9ucycsICIKKwki ICAgICAgICAoICIKKwkiICAgICAgICAgICAgU0VMRUNUIGFycmF5X2FnZyhjciBPUkRFUiBCWSBj ci5vaWQpICIKKwkiICAgICAgICAgICAgRlJPTSAoICIKKwkiICAgICAgICAgICAgICAgIFNFTEVD VCAiCisJIiAgICAgICAgICAgICAgICAgICAgYy5vaWQsICIKKwkiICAgICAgICAgICAgICAgICAg ICBjLmNvbGxuYW1lLCAiCisJIiAgICAgICAgICAgICAgICAgICAgbi5uc3BuYW1lICAiCisJIiAg ICAgICAgICAgICAgICBGUk9NIHBnX2NvbGxhdGlvbiBBUyBjICIKKwkiICAgICAgICAgICAgICAg IEpPSU4gcGdfbmFtZXNwYWNlIEFTIG4gT04gbi5vaWQgPSBjLmNvbGxuYW1lc3BhY2UgIgorCSIg ICAgICAgICAgICAgICAgV0hFUkUgYy5vaWQgSU4gKCAiCisJIiAgICAgICAgICAgICAgICAgICAg U0VMRUNUIGEuYXR0Y29sbGF0aW9uIEFTIG9pZCAiCisJIiAgICAgICAgICAgICAgICAgICAgRlJP TSBwZ19hdHRyaWJ1dGUgQVMgYSAiCisJIiAgICAgICAgICAgICAgICAgICAgV0hFUkUgYS5hdHRy ZWxpZCA9IHIub2lkICIKKwkiICAgICAgICAgICAgICAgICAgICBBTkQgTk9UIGEuYXR0aXNkcm9w cGVkICIKKwkiICAgICAgICAgICAgICAgICAgICBBTkQgYS5hdHRudW0gPiAwICIKKwkiICAgICAg ICAgICAgICAgICAgICBVTklPTiAiCisJIiAgICAgICAgICAgICAgICAgICAgU0VMRUNUIHUuY29s bGlkICIKKwkiICAgICAgICAgICAgICAgICAgICBGUk9NIHBnX3N0YXRpc3RpY19leHRfZGF0YSBB UyBzZCAiCisJIiAgICAgICAgICAgICAgICAgICAgQ1JPU1MgSk9JTiBMQVRFUkFMIHVubmVzdChz ZC5zdHhkZXhwcikgQVMgcyAiCisJIiAgICAgICAgICAgICAgICAgICAgQ1JPU1MgSk9JTiBMQVRF UkFMIHVubmVzdChBUlJBWVsgIgorCSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcy5zdGFjb2xsMSwgcy5zdGFjb2xsMiwgIgorCSIgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcy5zdGFjb2xsMywgcy5zdGFjb2xsNCwgIgorCSIgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5zdGFjb2xsNV0pIEFTIHUoY29sbGlkKSAi CisJIiAgICAgICAgICAgICAgICAgICAgV0hFUkUgc2Quc3R4b2lkID0gZS5vaWQgIgorCSIgICAg ICAgICAgICAgICAgICAgIEFORCBzZC5zdHhkZXhwciBJUyBOT1QgTlVMTCAiCisJIiAgICAgICAg ICAgICAgICAgICAgKSAiCisJIiAgICAgICAgICAgICAgICApIEFTIGNyICIKKwkiICAgICAgICAp LCAiCisJIiAgICAgICAgJ29wZXJhdG9ycycsICIKKwkiICAgICAgICAoICIKKwkiICAgICAgICAg ICAgU0VMRUNUIGFycmF5X2FnZyhwIE9SREVSIEJZIHAub2lkKSAiCisJIiAgICAgICAgICAgIEZS T00gKCAiCisJIiAgICAgICAgICAgICAgICBTRUxFQ1QgIgorCSIgICAgICAgICAgICAgICAgICAg IG8ub2lkLCAiCisJIiAgICAgICAgICAgICAgICAgICAgby5vcHJuYW1lLCAiCisJIiAgICAgICAg ICAgICAgICAgICAgbi5uc3BuYW1lICIKKwkiICAgICAgICAgICAgICAgIEZST00gcGdfb3BlcmF0 b3IgQVMgbyAiCisJIiAgICAgICAgICAgICAgICBKT0lOIHBnX25hbWVzcGFjZSBBUyBuIE9OIG4u b2lkID0gby5vcHJuYW1lc3BhY2UgIgorCSIgICAgICAgICAgICAgICAgV0hFUkUgby5vaWQgSU4g KCAiCisJIiAgICAgICAgICAgICAgICAgICAgU0VMRUNUIHUub3BpZCAiCisJIiAgICAgICAgICAg ICAgICAgICAgRlJPTSBwZ19zdGF0aXN0aWNfZXh0X2RhdGEgQVMgc2QgIgorCSIgICAgICAgICAg ICAgICAgICAgIENST1NTIEpPSU4gTEFURVJBTCB1bm5lc3Qoc2Quc3R4ZGV4cHIpIEFTIHMgIgor CSIgICAgICAgICAgICAgICAgICAgIENST1NTIEpPSU4gTEFURVJBTCB1bm5lc3QoQVJSQVlbICIK KwkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuc3Rhb3AxLCBzLnN0 YW9wMiwgIgorCSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5zdGFv cDMsIHMuc3Rhb3A0LCAiCisJIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzLnN0YW9wNV0pIEFTIHUob3BpZCkgIgorCSIgICAgICAgICAgICAgICAgICAgIFdIRVJFIHNk LnN0eG9pZCA9IGUub2lkICIKKwkiICAgICAgICAgICAgICAgICAgICBBTkQgc2Quc3R4ZGV4cHIg SVMgTk9UIE5VTEwgIgorCSIgICAgICAgICAgICAgICAgICAgICkgIgorCSIgICAgICAgICAgICAp IEFTIHAgIgorCSIgICAgICAgICksICIKKwkiICAgICAgICAnYXR0cmlidXRlcycsICAiCisJIiAg ICAgICAgKCAiCisJIiAgICAgICAgICAgIFNFTEVDVCBhcnJheV9hZ2coYXIgT1JERVIgQlkgYXIu YXR0bnVtKSAiCisJIiAgICAgICAgICAgIEZST00gKCAiCisJIiAgICAgICAgICAgICAgICBTRUxF Q1QgIgorCSIgICAgICAgICAgICAgICAgICAgIGEuYXR0bnVtLCAiCisJIiAgICAgICAgICAgICAg ICAgICAgYS5hdHRuYW1lLCAiCisJIiAgICAgICAgICAgICAgICAgICAgYS5hdHR0eXBpZCwgIgor CSIgICAgICAgICAgICAgICAgICAgIGEuYXR0Y29sbGF0aW9uICIKKwkiICAgICAgICAgICAgICAg IEZST00gcGdfYXR0cmlidXRlIEFTIGEgIgorCSIgICAgICAgICAgICAgICAgV0hFUkUgYS5hdHRy ZWxpZCA9IHIub2lkICIKKwkiICAgICAgICAgICAgICAgIEFORCBOT1QgYS5hdHRpc2Ryb3BwZWQg IgorCSIgICAgICAgICAgICAgICAgQU5EIGEuYXR0bnVtID4gMCAiCisJIiAgICAgICAgICAgICkg QVMgYXIgIgorCSIgICAgICAgICkgIgorCSIgICAgKSBBUyBleHRfc3RhdHNfanNvbiAiCisJIkZS T00gcGdfY2xhc3MgciAiCisJIkpPSU4gcGdfc3RhdGlzdGljX2V4dCBBUyBlIE9OIGUuc3R4cmVs aWQgPSByLm9pZCAiCisJIkpPSU4gcGdfbmFtZXNwYWNlIEFTIGVuIE9OIGVuLm9pZCA9IGUuc3R4 bmFtZXNwYWNlICIKKwkiSk9JTiBwZ19uYW1lc3BhY2UgQVMgbiBPTiBuLm9pZCA9IHIucmVsbmFt ZXNwYWNlICIKKwkiV0hFUkUgci5yZWxraW5kIElOICgncicsICdtJywgJ2YnLCAncCcsICdpJykg IgorCSJBTkQgci5yZWxwZXJzaXN0ZW5jZSA9ICdwJyAiCisJIkFORCBuLm5zcG5hbWUgTk9UIElO ICgncGdfY2F0YWxvZycsICdwZ190b2FzdCcsICdpbmZvcm1hdGlvbl9zY2hlbWEnKSAiOworCisv KiB2MTQgaXMgbGlrZSB2MTUsIGJ1dCBsYWNrcyBzdHhkaW5oZXJpdCBvbiBwZ19zdGF0aXN0aWNf ZXh0X2RhdGEgKi8KK2NvbnN0IGNoYXIgKmV4cG9ydF9leHRfcXVlcnlfdjE0ID0KKwkiU0VMRUNU ICIKKwkiICAgIG4ubnNwbmFtZSBBUyBzY2hlbWFuYW1lLCAiCisJIiAgICByLnJlbG5hbWUgQVMg cmVsbmFtZSwgIgorCSIgICAgZS5zdHhuYW1lIEFTIGV4dF9zdGF0c19uYW1lLCAiCisJIiAgICAo Y3VycmVudF9zZXR0aW5nKCdzZXJ2ZXJfdmVyc2lvbl9udW0nOjp0ZXh0KSk6OmludGVnZXIgQVMg c2VydmVyX3ZlcnNpb25fbnVtLCAiCisJIiAgICBqc29uYl9idWlsZF9vYmplY3QoICIKKwkiICAg ICAgICAnc2VydmVyX3ZlcnNpb25fbnVtJywgY3VycmVudF9zZXR0aW5nKCdzZXJ2ZXJfdmVyc2lv bl9udW0nKSwgIgorCSIgICAgICAgICdzdHhvaWQnLCBlLm9pZCwgIgorCSIgICAgICAgICdyZWxv aWQnLCByLm9pZCwgIgorCSIgICAgICAgICdzdHhuYW1lJywgZS5zdHhuYW1lLCAiCisJIiAgICAg ICAgJ3N0eG5zcG5hbWUnLCBlbi5uc3BuYW1lLCAiCisJIiAgICAgICAgJ3JlbG5hbWUnLCByLnJl bG5hbWUsICIKKwkiICAgICAgICAnbnNwbmFtZScsIG4ubnNwbmFtZSwgIgorCSIgICAgICAgICdz dHhrZXlzJywgZS5zdHhrZXlzOjp0ZXh0LCAiCisJIiAgICAgICAgJ3N0eGtpbmQnLCBlLnN0eGtp bmQ6OnRleHQsICIKKwkiICAgICAgICAnZGF0YScsICIKKwkiICAgICAgICAoICIKKwkiICAgICAg ICAgICAgU0VMRUNUIGFycmF5X2FnZyhkcikgIgorCSIgICAgICAgICAgICBGUk9NICggIgorCSIg ICAgICAgICAgICAgICAgU0VMRUNUICIKKwkiICAgICAgICAgICAgICAgICAgICBzZC5zdHhkbmRp c3RpbmN0Ojp0ZXh0IEFTIHN0eGRuZGlzdGluY3QsICAiCisJIiAgICAgICAgICAgICAgICAgICAg c2Quc3R4ZGRlcGVuZGVuY2llczo6dGV4dCBBUyBzdHhkZGVwZW5kZW5jaWVzLCAgIgorCSIgICAg ICAgICAgICAgICAgICAgICggIgorCSIgICAgICAgICAgICAgICAgICAgICAgICBTRUxFQ1QgYXJy YXlfYWdnKG1jdmwpICIKKwkiICAgICAgICAgICAgICAgICAgICAgICAgRlJPTSBwZ19tY3ZfbGlz dF9pdGVtcyhzZC5zdHhkbWN2KSBBUyBtY3ZsICIKKwkiICAgICAgICAgICAgICAgICAgICAgICAg V0hFUkUgc2Quc3R4ZG1jdiBJUyBOT1QgTlVMTCAiCisJIiAgICAgICAgICAgICAgICAgICAgKSBB UyBzdHhkbWN2LCAiCisJIiAgICAgICAgICAgICAgICAgICAgKCAiCisJIiAgICAgICAgICAgICAg ICAgICAgICAgIFNFTEVDVCBhcnJheV9hZ2coc3IgT1JERVIgQlkgc3Iuc3RhYXR0bnVtKSAiCisJ IiAgICAgICAgICAgICAgICAgICAgICAgIEZST00gKCAiCisJIiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBTRUxFQ1QgIgorCSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLnN0 YWF0dG51bSwgIgorCSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLnN0YW51bGxm cmFjLCAiCisJIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuc3Rhd2lkdGgsICIK KwkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5zdGFkaXN0aW5jdCwgIgorCSIg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLnN0YWtpbmQxLCAiCisJIiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHMuc3Rha2luZDIsICIKKwkiICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcy5zdGFraW5kMywgIgorCSIgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzLnN0YWtpbmQ0LCAiCisJIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHMuc3Rha2luZDUsICIKKwkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5z dGFvcDEsICIKKwkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5zdGFvcDIsICIK KwkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5zdGFvcDMsICIKKwkiICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5zdGFvcDQsICIKKwkiICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcy5zdGFvcDUsICIKKwkiICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcy5zdGFjb2xsMSwgIgorCSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzLnN0YWNvbGwyLCAiCisJIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuc3Rh Y29sbDMsICIKKwkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5zdGFjb2xsNCwg IgorCSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLnN0YWNvbGw1LCAiCisJIiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuc3RhbnVtYmVyczE6OnRleHQgQVMgc3Rh bnVtYmVyczEsICIKKwkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5zdGFudW1i ZXJzMjo6dGV4dCBBUyBzdGFudW1iZXJzMiwgIgorCSIgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzLnN0YW51bWJlcnMzOjp0ZXh0IEFTIHN0YW51bWJlcnMzLCAiCisJIiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHMuc3RhbnVtYmVyczQ6OnRleHQgQVMgc3RhbnVtYmVy czQsICIKKwkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5zdGFudW1iZXJzNTo6 dGV4dCBBUyBzdGFudW1iZXJzNSwgIgorCSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzLnN0YXZhbHVlczE6OnRleHQgQVMgc3RhdmFsdWVzMSwgIgorCSIgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzLnN0YXZhbHVlczI6OnRleHQgQVMgc3RhdmFsdWVzMiwgIgorCSIg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLnN0YXZhbHVlczM6OnRleHQgQVMgc3Rh dmFsdWVzMywgIgorCSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLnN0YXZhbHVl czQ6OnRleHQgQVMgc3RhdmFsdWVzNCwgIgorCSIgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzLnN0YXZhbHVlczU6OnRleHQgQVMgc3RhdmFsdWVzNSAiCisJIiAgICAgICAgICAgICAg ICAgICAgICAgICAgICBGUk9NIHVubmVzdChzZC5zdHhkZXhwcikgQVMgcyAiCisJIiAgICAgICAg ICAgICAgICAgICAgICAgICAgICBXSEVSRSBzZC5zdHhkZXhwciBJUyBOT1QgTlVMTCAiCisJIiAg ICAgICAgICAgICAgICAgICAgICAgICkgQVMgc3IgIgorCSIgICAgICAgICAgICAgICAgICAgICkg QVMgc3R4ZGV4cHIgIgorCSIgICAgICAgICAgICAgICAgRlJPTSBwZ19zdGF0aXN0aWNfZXh0X2Rh dGEgQVMgc2QgIgorCSIgICAgICAgICAgICAgICAgV0hFUkUgc2Quc3R4b2lkID0gZS5vaWQgIgor CSIgICAgICAgICAgICApIGRyICIKKwkiICAgICAgICApLCAiCisJIiAgICAgICAgJ3R5cGVzJywg IgorCSIgICAgICAgICggIgorCSIgICAgICAgICAgICBzZWxlY3QgYXJyYXlfYWdnKHRyIE9SREVS IEJZIHRyLm9pZCkgIgorCSIgICAgICAgICAgICBmcm9tICggIgorCSIgICAgICAgICAgICAgICAg c2VsZWN0ICIKKwkiICAgICAgICAgICAgICAgICAgICB0Lm9pZCwgIgorCSIgICAgICAgICAgICAg ICAgICAgIHQudHlwbmFtZSwgIgorCSIgICAgICAgICAgICAgICAgICAgIG4ubnNwbmFtZSAiCisJ IiAgICAgICAgICAgICAgICBmcm9tIHBnX3R5cGUgYXMgdCAiCisJIiAgICAgICAgICAgICAgICBq b2luIHBnX25hbWVzcGFjZSBhcyBuIG9uIG4ub2lkID0gdC50eXBuYW1lc3BhY2UgIgorCSIgICAg ICAgICAgICAgICAgd2hlcmUgdC5vaWQgaW4gKCAiCisJIiAgICAgICAgICAgICAgICAgICAgc2Vs ZWN0IGEuYXR0dHlwaWQgIgorCSIgICAgICAgICAgICAgICAgICAgIGZyb20gcGdfYXR0cmlidXRl IGFzIGEgIgorCSIgICAgICAgICAgICAgICAgICAgIHdoZXJlIGEuYXR0cmVsaWQgPSByLm9pZCAi CisJIiAgICAgICAgICAgICAgICAgICAgYW5kIG5vdCBhLmF0dGlzZHJvcHBlZCAiCisJIiAgICAg ICAgICAgICAgICAgICAgYW5kIGEuYXR0bnVtID4gMCAiCisJIiAgICAgICAgICAgICAgICApICIK KwkiICAgICAgICAgICAgKSBhcyB0ciAiCisJIiAgICAgICAgKSwgIgorCSIgICAgICAgICdjb2xs YXRpb25zJywgIgorCSIgICAgICAgICggIgorCSIgICAgICAgICAgICBTRUxFQ1QgYXJyYXlfYWdn KGNyIE9SREVSIEJZIGNyLm9pZCkgIgorCSIgICAgICAgICAgICBGUk9NICggIgorCSIgICAgICAg ICAgICAgICAgU0VMRUNUICIKKwkiICAgICAgICAgICAgICAgICAgICBjLm9pZCwgIgorCSIgICAg ICAgICAgICAgICAgICAgIGMuY29sbG5hbWUsICIKKwkiICAgICAgICAgICAgICAgICAgICBuLm5z cG5hbWUgICIKKwkiICAgICAgICAgICAgICAgIEZST00gcGdfY29sbGF0aW9uIEFTIGMgIgorCSIg ICAgICAgICAgICAgICAgSk9JTiBwZ19uYW1lc3BhY2UgQVMgbiBPTiBuLm9pZCA9IGMuY29sbG5h bWVzcGFjZSAiCisJIiAgICAgICAgICAgICAgICBXSEVSRSBjLm9pZCBJTiAoICIKKwkiICAgICAg ICAgICAgICAgICAgICBTRUxFQ1QgYS5hdHRjb2xsYXRpb24gQVMgb2lkICIKKwkiICAgICAgICAg ICAgICAgICAgICBGUk9NIHBnX2F0dHJpYnV0ZSBBUyBhICIKKwkiICAgICAgICAgICAgICAgICAg ICBXSEVSRSBhLmF0dHJlbGlkID0gci5vaWQgIgorCSIgICAgICAgICAgICAgICAgICAgIEFORCBO T1QgYS5hdHRpc2Ryb3BwZWQgIgorCSIgICAgICAgICAgICAgICAgICAgIEFORCBhLmF0dG51bSA+ IDAgIgorCSIgICAgICAgICAgICAgICAgICAgIFVOSU9OICIKKwkiICAgICAgICAgICAgICAgICAg ICBTRUxFQ1QgdS5jb2xsaWQgIgorCSIgICAgICAgICAgICAgICAgICAgIEZST00gcGdfc3RhdGlz dGljX2V4dF9kYXRhIEFTIHNkICIKKwkiICAgICAgICAgICAgICAgICAgICBDUk9TUyBKT0lOIExB VEVSQUwgdW5uZXN0KHNkLnN0eGRleHByKSBBUyBzICIKKwkiICAgICAgICAgICAgICAgICAgICBD Uk9TUyBKT0lOIExBVEVSQUwgdW5uZXN0KEFSUkFZWyAiCisJIiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzLnN0YWNvbGwxLCBzLnN0YWNvbGwyLCAiCisJIiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLnN0YWNvbGwzLCBzLnN0YWNvbGw0LCAi CisJIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLnN0YWNvbGw1XSkg QVMgdShjb2xsaWQpICIKKwkiICAgICAgICAgICAgICAgICAgICBXSEVSRSBzZC5zdHhvaWQgPSBl Lm9pZCAiCisJIiAgICAgICAgICAgICAgICAgICAgQU5EIHNkLnN0eGRleHByIElTIE5PVCBOVUxM ICIKKwkiICAgICAgICAgICAgICAgICAgICApICIKKwkiICAgICAgICAgICAgICAgICkgQVMgY3Ig IgorCSIgICAgICAgICksICIKKwkiICAgICAgICAnb3BlcmF0b3JzJywgIgorCSIgICAgICAgICgg IgorCSIgICAgICAgICAgICBTRUxFQ1QgYXJyYXlfYWdnKHAgT1JERVIgQlkgcC5vaWQpICIKKwki ICAgICAgICAgICAgRlJPTSAoICIKKwkiICAgICAgICAgICAgICAgIFNFTEVDVCAiCisJIiAgICAg ICAgICAgICAgICAgICAgby5vaWQsICIKKwkiICAgICAgICAgICAgICAgICAgICBvLm9wcm5hbWUs ICIKKwkiICAgICAgICAgICAgICAgICAgICBuLm5zcG5hbWUgIgorCSIgICAgICAgICAgICAgICAg RlJPTSBwZ19vcGVyYXRvciBBUyBvICIKKwkiICAgICAgICAgICAgICAgIEpPSU4gcGdfbmFtZXNw YWNlIEFTIG4gT04gbi5vaWQgPSBvLm9wcm5hbWVzcGFjZSAiCisJIiAgICAgICAgICAgICAgICBX SEVSRSBvLm9pZCBJTiAoICIKKwkiICAgICAgICAgICAgICAgICAgICBTRUxFQ1QgdS5vcGlkICIK KwkiICAgICAgICAgICAgICAgICAgICBGUk9NIHBnX3N0YXRpc3RpY19leHRfZGF0YSBBUyBzZCAi CisJIiAgICAgICAgICAgICAgICAgICAgQ1JPU1MgSk9JTiBMQVRFUkFMIHVubmVzdChzZC5zdHhk ZXhwcikgQVMgcyAiCisJIiAgICAgICAgICAgICAgICAgICAgQ1JPU1MgSk9JTiBMQVRFUkFMIHVu bmVzdChBUlJBWVsgIgorCSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cy5zdGFvcDEsIHMuc3Rhb3AyLCAiCisJIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzLnN0YW9wMywgcy5zdGFvcDQsICIKKwkiICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHMuc3Rhb3A1XSkgQVMgdShvcGlkKSAiCisJIiAgICAgICAgICAgICAg ICAgICAgV0hFUkUgc2Quc3R4b2lkID0gZS5vaWQgIgorCSIgICAgICAgICAgICAgICAgICAgIEFO RCBzZC5zdHhkZXhwciBJUyBOT1QgTlVMTCAiCisJIiAgICAgICAgICAgICAgICAgICAgKSAiCisJ IiAgICAgICAgICAgICkgQVMgcCAiCisJIiAgICAgICAgKSwgIgorCSIgICAgICAgICdhdHRyaWJ1 dGVzJywgICIKKwkiICAgICAgICAoICIKKwkiICAgICAgICAgICAgU0VMRUNUIGFycmF5X2FnZyhh ciBPUkRFUiBCWSBhci5hdHRudW0pICIKKwkiICAgICAgICAgICAgRlJPTSAoICIKKwkiICAgICAg ICAgICAgICAgIFNFTEVDVCAiCisJIiAgICAgICAgICAgICAgICAgICAgYS5hdHRudW0sICIKKwki ICAgICAgICAgICAgICAgICAgICBhLmF0dG5hbWUsICIKKwkiICAgICAgICAgICAgICAgICAgICBh LmF0dHR5cGlkLCAiCisJIiAgICAgICAgICAgICAgICAgICAgYS5hdHRjb2xsYXRpb24gIgorCSIg ICAgICAgICAgICAgICAgRlJPTSBwZ19hdHRyaWJ1dGUgQVMgYSAiCisJIiAgICAgICAgICAgICAg ICBXSEVSRSBhLmF0dHJlbGlkID0gci5vaWQgIgorCSIgICAgICAgICAgICAgICAgQU5EIE5PVCBh LmF0dGlzZHJvcHBlZCAiCisJIiAgICAgICAgICAgICAgICBBTkQgYS5hdHRudW0gPiAwICIKKwki ICAgICAgICAgICAgKSBBUyBhciAiCisJIiAgICAgICAgKSAiCisJIiAgICApIEFTIGV4dF9zdGF0 c19qc29uICIKKwkiRlJPTSBwZ19jbGFzcyByICIKKwkiSk9JTiBwZ19zdGF0aXN0aWNfZXh0IEFT IGUgT04gZS5zdHhyZWxpZCA9IHIub2lkICIKKwkiSk9JTiBwZ19uYW1lc3BhY2UgQVMgZW4gT04g ZW4ub2lkID0gZS5zdHhuYW1lc3BhY2UgIgorCSJKT0lOIHBnX25hbWVzcGFjZSBBUyBuIE9OIG4u b2lkID0gci5yZWxuYW1lc3BhY2UgIgorCSJXSEVSRSByLnJlbGtpbmQgSU4gKCdyJywgJ20nLCAn ZicsICdwJywgJ2knKSAiCisJIkFORCByLnJlbHBlcnNpc3RlbmNlID0gJ3AnICIKKwkiQU5EIG4u bnNwbmFtZSBOT1QgSU4gKCdwZ19jYXRhbG9nJywgJ3BnX3RvYXN0JywgJ2luZm9ybWF0aW9uX3Nj aGVtYScpICI7CisKKy8qIHYxMi12MTMgYXJlIGxpa2UgdjE0LCBidXQgbGFjayBzdHhkZXhwciBv biBwZ19zdGF0aXN0aWNfZXh0X2RhdGEgKi8KK2NvbnN0IGNoYXIgKmV4cG9ydF9leHRfcXVlcnlf djEyID0KKwkiU0VMRUNUICIKKwkiICAgIG4ubnNwbmFtZSBBUyBzY2hlbWFuYW1lLCAiCisJIiAg ICByLnJlbG5hbWUgQVMgcmVsbmFtZSwgIgorCSIgICAgZS5zdHhuYW1lIEFTIGV4dF9zdGF0c19u YW1lLCAiCisJIiAgICAoY3VycmVudF9zZXR0aW5nKCdzZXJ2ZXJfdmVyc2lvbl9udW0nOjp0ZXh0 KSk6OmludGVnZXIgQVMgc2VydmVyX3ZlcnNpb25fbnVtLCAiCisJIiAgICBqc29uYl9idWlsZF9v YmplY3QoICIKKwkiICAgICAgICAnc2VydmVyX3ZlcnNpb25fbnVtJywgY3VycmVudF9zZXR0aW5n KCdzZXJ2ZXJfdmVyc2lvbl9udW0nKSwgIgorCSIgICAgICAgICdzdHhvaWQnLCBlLm9pZCwgIgor CSIgICAgICAgICdyZWxvaWQnLCByLm9pZCwgIgorCSIgICAgICAgICdzdHhuYW1lJywgZS5zdHhu YW1lLCAiCisJIiAgICAgICAgJ3N0eG5zcG5hbWUnLCBlbi5uc3BuYW1lLCAiCisJIiAgICAgICAg J3JlbG5hbWUnLCByLnJlbG5hbWUsICIKKwkiICAgICAgICAnbnNwbmFtZScsIG4ubnNwbmFtZSwg IgorCSIgICAgICAgICdzdHhrZXlzJywgZS5zdHhrZXlzOjp0ZXh0LCAiCisJIiAgICAgICAgJ3N0 eGtpbmQnLCBlLnN0eGtpbmQ6OnRleHQsICIKKwkiICAgICAgICAnZGF0YScsICIKKwkiICAgICAg ICAoICIKKwkiICAgICAgICAgICAgU0VMRUNUIGFycmF5X2FnZyhyKSAiCisJIiAgICAgICAgICAg IEZST00gKCAiCisJIiAgICAgICAgICAgICAgICBTRUxFQ1QgIgorCSIgICAgICAgICAgICAgICAg ICAgIHNkLnN0eGRuZGlzdGluY3Q6OnRleHQgQVMgc3R4ZG5kaXN0aW5jdCwgICIKKwkiICAgICAg ICAgICAgICAgICAgICBzZC5zdHhkZGVwZW5kZW5jaWVzOjp0ZXh0IEFTIHN0eGRkZXBlbmRlbmNp ZXMsICAiCisJIiAgICAgICAgICAgICAgICAgICAgKCAiCisJIiAgICAgICAgICAgICAgICAgICAg ICAgIFNFTEVDVCBhcnJheV9hZ2cobWN2bCkgIgorCSIgICAgICAgICAgICAgICAgICAgICAgICBG Uk9NIHBnX21jdl9saXN0X2l0ZW1zKHNkLnN0eGRtY3YpIEFTIG1jdmwgIgorCSIgICAgICAgICAg ICAgICAgICAgICAgICBXSEVSRSBzZC5zdHhkbWN2IElTIE5PVCBOVUxMICIKKwkiICAgICAgICAg ICAgICAgICAgICApIEFTIHN0eGRtY3YgIgorCSIgICAgICAgICAgICAgICAgRlJPTSBwZ19zdGF0 aXN0aWNfZXh0X2RhdGEgQVMgc2QgIgorCSIgICAgICAgICAgICAgICAgV0hFUkUgc2Quc3R4b2lk ID0gZS5vaWQgIgorCSIgICAgICAgICAgICApIHIgIgorCSIgICAgICAgICksICIKKwkiICAgICAg ICAndHlwZXMnLCAiCisJIiAgICAgICAgKCAiCisJIiAgICAgICAgICAgIFNFTEVDVCBhcnJheV9h Z2codHIgT1JERVIgQlkgdHIub2lkKSAiCisJIiAgICAgICAgICAgIEZST00gKCAiCisJIiAgICAg ICAgICAgICAgICBTRUxFQ1QgIgorCSIgICAgICAgICAgICAgICAgICAgIHQub2lkLCAiCisJIiAg ICAgICAgICAgICAgICAgICAgdC50eXBuYW1lLCAiCisJIiAgICAgICAgICAgICAgICAgICAgbi5u c3BuYW1lICIKKwkiICAgICAgICAgICAgICAgIEZST00gcGdfdHlwZSBBUyB0ICIKKwkiICAgICAg ICAgICAgICAgIEpPSU4gcGdfbmFtZXNwYWNlIEFTIG4gT04gbi5vaWQgPSB0LnR5cG5hbWVzcGFj ZSAiCisJIiAgICAgICAgICAgICAgICBXSEVSRSB0Lm9pZCBJTiAoICIKKwkiICAgICAgICAgICAg ICAgICAgICBTRUxFQ1QgYS5hdHR0eXBpZCAiCisJIiAgICAgICAgICAgICAgICAgICAgRlJPTSBw Z19hdHRyaWJ1dGUgQVMgYSAiCisJIiAgICAgICAgICAgICAgICAgICAgV0hFUkUgYS5hdHRyZWxp ZCA9IHIub2lkICIKKwkiICAgICAgICAgICAgICAgICAgICBBTkQgTk9UIGEuYXR0aXNkcm9wcGVk ICIKKwkiICAgICAgICAgICAgICAgICAgICBBTkQgYS5hdHRudW0gPiAwICIKKwkiICAgICAgICAg ICAgICAgICkgIgorCSIgICAgICAgICAgICApIEFTIHRyICIKKwkiICAgICAgICApLCAiCisJIiAg ICAgICAgJ2NvbGxhdGlvbnMnLCAiCisJIiAgICAgICAgKCAiCisJIiAgICAgICAgICAgIFNFTEVD VCBhcnJheV9hZ2coY3IgT1JERVIgQlkgY3Iub2lkKSAiCisJIiAgICAgICAgICAgIEZST00gKCAi CisJIiAgICAgICAgICAgICAgICBTRUxFQ1QgIgorCSIgICAgICAgICAgICAgICAgICAgIGMub2lk LCAiCisJIiAgICAgICAgICAgICAgICAgICAgYy5jb2xsbmFtZSwgIgorCSIgICAgICAgICAgICAg ICAgICAgIG4ubnNwbmFtZSAgIgorCSIgICAgICAgICAgICAgICAgRlJPTSBwZ19jb2xsYXRpb24g QVMgYyAiCisJIiAgICAgICAgICAgICAgICBKT0lOIHBnX25hbWVzcGFjZSBBUyBuIE9OIG4ub2lk ID0gYy5jb2xsbmFtZXNwYWNlICIKKwkiICAgICAgICAgICAgICAgIFdIRVJFIGMub2lkIElOICgg IgorCSIgICAgICAgICAgICAgICAgICAgIFNFTEVDVCBhLmF0dGNvbGxhdGlvbiBBUyBvaWQgIgor CSIgICAgICAgICAgICAgICAgICAgIEZST00gcGdfYXR0cmlidXRlIEFTIGEgIgorCSIgICAgICAg ICAgICAgICAgICAgIFdIRVJFIGEuYXR0cmVsaWQgPSByLm9pZCAiCisJIiAgICAgICAgICAgICAg ICAgICAgQU5EIE5PVCBhLmF0dGlzZHJvcHBlZCAiCisJIiAgICAgICAgICAgICAgICAgICAgQU5E IGEuYXR0bnVtID4gMCAiCisJIiAgICAgICAgICAgICAgICAgICAgKSAiCisJIiAgICAgICAgICAg ICAgICApIEFTIGNyICIKKwkiICAgICAgICApLCAiCisJIiAgICAgICAgJ2F0dHJpYnV0ZXMnLCAg IgorCSIgICAgICAgICggIgorCSIgICAgICAgICAgICBTRUxFQ1QgYXJyYXlfYWdnKGFyIE9SREVS IEJZIGFyLmF0dG51bSkgIgorCSIgICAgICAgICAgICBGUk9NICggIgorCSIgICAgICAgICAgICAg ICAgU0VMRUNUICIKKwkiICAgICAgICAgICAgICAgICAgICBhLmF0dG51bSwgIgorCSIgICAgICAg ICAgICAgICAgICAgIGEuYXR0bmFtZSwgIgorCSIgICAgICAgICAgICAgICAgICAgIGEuYXR0dHlw aWQsICIKKwkiICAgICAgICAgICAgICAgICAgICBhLmF0dGNvbGxhdGlvbiAiCisJIiAgICAgICAg ICAgICAgICBGUk9NIHBnX2F0dHJpYnV0ZSBBUyBhICIKKwkiICAgICAgICAgICAgICAgIFdIRVJF IGEuYXR0cmVsaWQgPSByLm9pZCAiCisJIiAgICAgICAgICAgICAgICBBTkQgTk9UIGEuYXR0aXNk cm9wcGVkICIKKwkiICAgICAgICAgICAgICAgIEFORCBhLmF0dG51bSA+IDAgIgorCSIgICAgICAg ICAgICApIEFTIGFyICIKKwkiICAgICAgICApICIKKwkiICAgICkgQVMgZXh0X3N0YXRzX2pzb24g IgorCSJGUk9NIHBnX2NsYXNzIHIgIgorCSJKT0lOIHBnX3N0YXRpc3RpY19leHQgQVMgZSBPTiBl LnN0eHJlbGlkID0gci5vaWQgIgorCSJKT0lOIHBnX25hbWVzcGFjZSBBUyBlbiBPTiBlbi5vaWQg PSBlLnN0eG5hbWVzcGFjZSAiCisJIkpPSU4gcGdfbmFtZXNwYWNlIEFTIG4gT04gbi5vaWQgPSBy LnJlbG5hbWVzcGFjZSAiCisJIldIRVJFIHIucmVsa2luZCBJTiAoJ3InLCAnbScsICdmJywgJ3An LCAnaScpICIKKwkiQU5EIHIucmVscGVyc2lzdGVuY2UgPSAncCcgIgorCSJBTkQgbi5uc3BuYW1l IE5PVCBJTiAoJ3BnX2NhdGFsb2cnLCAncGdfdG9hc3QnLCAnaW5mb3JtYXRpb25fc2NoZW1hJykg IjsKKworLyoKKyAqIHYxMC12MTEgYXJlIGxpa2UgdjEyLCBidXQ6CisgKiAgICAgLSBNQ1YgaXMg Z29uZQorICogICAgIC0gcmVtYWluaW5nIHN0YXRzIGFyZSBzdG9yZWQgb24gcGdfc3RhdGlzdGlj X2V4dAorICogICAgIC0gcGdfc3RhdGlzdGljX2V4dF9kYXRhIGlzIGdvbmUKKyAqLworCitjb25z dCBjaGFyICpleHBvcnRfZXh0X3F1ZXJ5X3YxMCA9CisJIlNFTEVDVCAiCisJIiAgICBuLm5zcG5h bWUgQVMgc2NoZW1hbmFtZSwgIgorCSIgICAgci5yZWxuYW1lIEFTIHJlbG5hbWUsICIKKwkiICAg IGUuc3R4bmFtZSBBUyBleHRfc3RhdHNfbmFtZSwgIgorCSIgICAgKGN1cnJlbnRfc2V0dGluZygn c2VydmVyX3ZlcnNpb25fbnVtJzo6dGV4dCkpOjppbnRlZ2VyIEFTIHNlcnZlcl92ZXJzaW9uX251 bSwgIgorCSIgICAganNvbmJfYnVpbGRfb2JqZWN0KCAiCisJIiAgICAgICAgJ3NlcnZlcl92ZXJz aW9uX251bScsIGN1cnJlbnRfc2V0dGluZygnc2VydmVyX3ZlcnNpb25fbnVtJyksICIKKwkiICAg ICAgICAnc3R4b2lkJywgZS5vaWQsICIKKwkiICAgICAgICAncmVsb2lkJywgci5vaWQsICIKKwki ICAgICAgICAnc3R4bmFtZScsIGUuc3R4bmFtZSwgIgorCSIgICAgICAgICdzdHhuc3BuYW1lJywg ZW4ubnNwbmFtZSwgIgorCSIgICAgICAgICdyZWxuYW1lJywgci5yZWxuYW1lLCAiCisJIiAgICAg ICAgJ25zcG5hbWUnLCBuLm5zcG5hbWUsICIKKwkiICAgICAgICAnc3R4a2V5cycsIGUuc3R4a2V5 czo6dGV4dCwgIgorCSIgICAgICAgICdzdHhraW5kJywgZS5zdHhraW5kOjp0ZXh0LCAiCisJIiAg ICAgICAgJ3N0eG5kaXN0aW5jdCcsIGUuc3R4bmRpc3RpbmN0Ojp0ZXh0LCAiCisJIiAgICAgICAg J3N0eGRlcGVuZGVuY2llcycsIGUuc3R4ZGVwZW5kZW5jaWVzOjp0ZXh0LCAiCisJIiAgICAgICAg J3R5cGVzJywgIgorCSIgICAgICAgICggIgorCSIgICAgICAgICAgICBTRUxFQ1QgYXJyYXlfYWdn KHRyIE9SREVSIEJZIHRyLm9pZCkgIgorCSIgICAgICAgICAgICBGUk9NICggIgorCSIgICAgICAg ICAgICAgICAgU0VMRUNUICIKKwkiICAgICAgICAgICAgICAgICAgICB0Lm9pZCwgIgorCSIgICAg ICAgICAgICAgICAgICAgIHQudHlwbmFtZSwgIgorCSIgICAgICAgICAgICAgICAgICAgIG4ubnNw bmFtZSAiCisJIiAgICAgICAgICAgICAgICBGUk9NIHBnX3R5cGUgQVMgdCAiCisJIiAgICAgICAg ICAgICAgICBKT0lOIHBnX25hbWVzcGFjZSBBUyBuIE9OIG4ub2lkID0gdC50eXBuYW1lc3BhY2Ug IgorCSIgICAgICAgICAgICAgICAgV0hFUkUgdC5vaWQgSU4gKCAiCisJIiAgICAgICAgICAgICAg ICAgICAgU0VMRUNUIGEuYXR0dHlwaWQgIgorCSIgICAgICAgICAgICAgICAgICAgIEZST00gcGdf YXR0cmlidXRlIEFTIGEgIgorCSIgICAgICAgICAgICAgICAgICAgIFdIRVJFIGEuYXR0cmVsaWQg PSByLm9pZCAiCisJIiAgICAgICAgICAgICAgICAgICAgQU5EIE5PVCBhLmF0dGlzZHJvcHBlZCAi CisJIiAgICAgICAgICAgICAgICAgICAgQU5EIGEuYXR0bnVtID4gMCAiCisJIiAgICAgICAgICAg ICAgICApICIKKwkiICAgICAgICAgICAgKSBBUyB0ciAiCisJIiAgICAgICAgKSwgIgorCSIgICAg ICAgICdjb2xsYXRpb25zJywgIgorCSIgICAgICAgICggIgorCSIgICAgICAgICAgICBTRUxFQ1Qg YXJyYXlfYWdnKGNyIE9SREVSIEJZIGNyLm9pZCkgIgorCSIgICAgICAgICAgICBGUk9NICggIgor CSIgICAgICAgICAgICAgICAgU0VMRUNUICIKKwkiICAgICAgICAgICAgICAgICAgICBjLm9pZCwg IgorCSIgICAgICAgICAgICAgICAgICAgIGMuY29sbG5hbWUsICIKKwkiICAgICAgICAgICAgICAg ICAgICBuLm5zcG5hbWUgICIKKwkiICAgICAgICAgICAgICAgIEZST00gcGdfY29sbGF0aW9uIEFT IGMgIgorCSIgICAgICAgICAgICAgICAgSk9JTiBwZ19uYW1lc3BhY2UgQVMgbiBPTiBuLm9pZCA9 IGMuY29sbG5hbWVzcGFjZSAiCisJIiAgICAgICAgICAgICAgICBXSEVSRSBjLm9pZCBJTiAoICIK KwkiICAgICAgICAgICAgICAgICAgICBTRUxFQ1QgYS5hdHRjb2xsYXRpb24gQVMgb2lkICIKKwki ICAgICAgICAgICAgICAgICAgICBGUk9NIHBnX2F0dHJpYnV0ZSBBUyBhICIKKwkiICAgICAgICAg ICAgICAgICAgICBXSEVSRSBhLmF0dHJlbGlkID0gci5vaWQgIgorCSIgICAgICAgICAgICAgICAg ICAgIEFORCBOT1QgYS5hdHRpc2Ryb3BwZWQgIgorCSIgICAgICAgICAgICAgICAgICAgIEFORCBh LmF0dG51bSA+IDAgIgorCSIgICAgICAgICAgICAgICAgICAgICkgIgorCSIgICAgICAgICAgICAg ICAgKSBBUyBjciAiCisJIiAgICAgICAgKSwgIgorCSIgICAgICAgICdhdHRyaWJ1dGVzJywgICIK KwkiICAgICAgICAoICIKKwkiICAgICAgICAgICAgU0VMRUNUIGFycmF5X2FnZyhhciBPUkRFUiBC WSByLmF0dG51bSkgIgorCSIgICAgICAgICAgICBGUk9NICggIgorCSIgICAgICAgICAgICAgICAg U0VMRUNUICIKKwkiICAgICAgICAgICAgICAgICAgICBhLmF0dG51bSwgIgorCSIgICAgICAgICAg ICAgICAgICAgIGEuYXR0bmFtZSwgIgorCSIgICAgICAgICAgICAgICAgICAgIGEuYXR0dHlwaWQs ICIKKwkiICAgICAgICAgICAgICAgICAgICBhLmF0dGNvbGxhdGlvbiAiCisJIiAgICAgICAgICAg ICAgICBGUk9NIHBnX2F0dHJpYnV0ZSBBUyBhICIKKwkiICAgICAgICAgICAgICAgIFdIRVJFIGEu YXR0cmVsaWQgPSByLm9pZCAiCisJIiAgICAgICAgICAgICAgICBBTkQgTk9UIGEuYXR0aXNkcm9w cGVkICIKKwkiICAgICAgICAgICAgICAgIEFORCBhLmF0dG51bSA+IDAgIgorCSIgICAgICAgICAg ICApIEFTIGFyICIKKwkiICAgICAgICApICIKKwkiICAgICkgQVMgZXh0X3N0YXRzX2pzb24gIgor CSJGUk9NIHBnX2NsYXNzIHIgIgorCSJKT0lOIHBnX3N0YXRpc3RpY19leHQgQVMgZSBPTiBlLnN0 eHJlbGlkID0gci5vaWQgIgorCSJKT0lOIHBnX25hbWVzcGFjZSBBUyBlbiBPTiBlbi5vaWQgPSBl LnN0eG5hbWVzcGFjZSAiCisJIkpPSU4gcGdfbmFtZXNwYWNlIEFTIG4gT04gbi5vaWQgPSByLnJl bG5hbWVzcGFjZSAiCisJIldIRVJFIHIucmVsa2luZCBJTiAoJ3InLCAnbScsICdmJywgJ3AnLCAn aScpICIKKwkiQU5EIHIucmVscGVyc2lzdGVuY2UgPSAncCcgIgorCSJBTkQgbi5uc3BuYW1lIE5P VCBJTiAoJ3BnX2NhdGFsb2cnLCAncGdfdG9hc3QnLCAnaW5mb3JtYXRpb25fc2NoZW1hJykgIjsK KworCisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCXN0YXRpYyBzdHJ1 Y3Qgb3B0aW9uIGxvbmdfb3B0aW9uc1tdID0geworCQl7Imhvc3QiLCByZXF1aXJlZF9hcmd1bWVu dCwgTlVMTCwgJ2gnfSwKKwkJeyJwb3J0IiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdwJ30s CisJCXsidXNlcm5hbWUiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ1UnfSwKKwkJeyJuby1w YXNzd29yZCIsIG5vX2FyZ3VtZW50LCBOVUxMLCAndyd9LAorCQl7InBhc3N3b3JkIiwgbm9fYXJn dW1lbnQsIE5VTEwsICdXJ30sCisJCXsiZWNobyIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnZSd9LAor CQl7ImRibmFtZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnZCd9LAorCQl7TlVMTCwgMCwg TlVMTCwgMH0KKwl9OworCisJY29uc3QgY2hhciAqcHJvZ25hbWU7CisJaW50CQkJb3B0aW5kZXg7 CisJaW50CQkJYzsKKworCWNvbnN0IGNoYXIgKmRibmFtZSA9IE5VTEw7CisJY2hhcgkgICAqaG9z dCA9IE5VTEw7CisJY2hhcgkgICAqcG9ydCA9IE5VTEw7CisJY2hhcgkgICAqdXNlcm5hbWUgPSBO VUxMOworCWVudW0gdHJpdmFsdWUgcHJvbXB0X3Bhc3N3b3JkID0gVFJJX0RFRkFVTFQ7CisJQ29u blBhcmFtcwljcGFyYW1zOworCWJvb2wJCWVjaG8gPSBmYWxzZTsKKworCVBRRXhwQnVmZmVyRGF0 YSBzcWw7CisKKwlQR2Nvbm4JICAgKmNvbm47CisJaW50CQkJc2VydmVyX3ZlcnNpb25fbnVtOwor CisJRklMRQkgICAqY29weXN0cmVhbSA9IHN0ZG91dDsKKworCVBHcmVzdWx0ICAgKnJlc3VsdDsK KworCUV4ZWNTdGF0dXNUeXBlIHJlc3VsdF9zdGF0dXM7CisKKwljaGFyCSAgICpidWY7CisJaW50 CQkJcmV0OworCisJcGdfbG9nZ2luZ19pbml0KGFyZ3ZbMF0pOworCXByb2duYW1lID0gZ2V0X3By b2duYW1lKGFyZ3ZbMF0pOworCXNldF9wZ2xvY2FsZV9wZ3NlcnZpY2UoYXJndlswXSwgUEdfVEVY VERPTUFJTigicGdzY3JpcHRzIikpOworCisJaGFuZGxlX2hlbHBfdmVyc2lvbl9vcHRzKGFyZ2Ms IGFyZ3YsICJjbHVzdGVyZGIiLCBoZWxwKTsKKworCXdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFy Z2MsIGFyZ3YsICJkOmVoOnA6VTp3VyIsIGxvbmdfb3B0aW9ucywgJm9wdGluZGV4KSkgIT0gLTEp CisJeworCQlzd2l0Y2ggKGMpCisJCXsKKwkJCWNhc2UgJ2QnOgorCQkJCWRibmFtZSA9IHBnX3N0 cmR1cChvcHRhcmcpOworCQkJCWJyZWFrOworCQkJY2FzZSAnZSc6CisJCQkJZWNobyA9IHRydWU7 CisJCQkJYnJlYWs7CisJCQljYXNlICdoJzoKKwkJCQlob3N0ID0gcGdfc3RyZHVwKG9wdGFyZyk7 CisJCQkJYnJlYWs7CisJCQljYXNlICdwJzoKKwkJCQlwb3J0ID0gcGdfc3RyZHVwKG9wdGFyZyk7 CisJCQkJYnJlYWs7CisJCQljYXNlICdVJzoKKwkJCQl1c2VybmFtZSA9IHBnX3N0cmR1cChvcHRh cmcpOworCQkJCWJyZWFrOworCQkJY2FzZSAndyc6CisJCQkJcHJvbXB0X3Bhc3N3b3JkID0gVFJJ X05POworCQkJCWJyZWFrOworCQkJY2FzZSAnVyc6CisJCQkJcHJvbXB0X3Bhc3N3b3JkID0gVFJJ X1lFUzsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJLyogZ2V0b3B0X2xvbmcgYWxyZWFk eSBlbWl0dGVkIGEgY29tcGxhaW50ICovCisJCQkJcGdfbG9nX2Vycm9yX2hpbnQoIlRyeSBcIiVz IC0taGVscFwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIsIHByb2duYW1lKTsKKwkJCQlleGl0KDEp OworCQl9CisJfQorCisJLyoKKwkgKiBOb24tb3B0aW9uIGFyZ3VtZW50IHNwZWNpZmllcyBkYXRh YmFzZSBuYW1lIGFzIGxvbmcgYXMgaXQgd2Fzbid0CisJICogYWxyZWFkeSBzcGVjaWZpZWQgd2l0 aCAtZCAvIC0tZGJuYW1lCisJICovCisJaWYgKG9wdGluZCA8IGFyZ2MgJiYgZGJuYW1lID09IE5V TEwpCisJeworCQlkYm5hbWUgPSBhcmd2W29wdGluZF07CisJCW9wdGluZCsrOworCX0KKworCWlm IChvcHRpbmQgPCBhcmdjKQorCXsKKwkJcGdfbG9nX2Vycm9yKCJ0b28gbWFueSBjb21tYW5kLWxp bmUgYXJndW1lbnRzIChmaXJzdCBpcyBcIiVzXCIpIiwKKwkJCQkJIGFyZ3Zbb3B0aW5kXSk7CisJ CXBnX2xvZ19lcnJvcl9oaW50KCJUcnkgXCIlcyAtLWhlbHBcIiBmb3IgbW9yZSBpbmZvcm1hdGlv bi4iLCBwcm9nbmFtZSk7CisJCWV4aXQoMSk7CisJfQorCisJLyogZmlsbCBjcGFyYW1zIGV4Y2Vw dCBmb3IgZGJuYW1lLCB3aGljaCBpcyBzZXQgYmVsb3cgKi8KKwljcGFyYW1zLnBnaG9zdCA9IGhv c3Q7CisJY3BhcmFtcy5wZ3BvcnQgPSBwb3J0OworCWNwYXJhbXMucGd1c2VyID0gdXNlcm5hbWU7 CisJY3BhcmFtcy5wcm9tcHRfcGFzc3dvcmQgPSBwcm9tcHRfcGFzc3dvcmQ7CisJY3BhcmFtcy5v dmVycmlkZV9kYm5hbWUgPSBOVUxMOworCisJc2V0dXBfY2FuY2VsX2hhbmRsZXIoTlVMTCk7CisK KwlpZiAoZGJuYW1lID09IE5VTEwpCisJeworCQlpZiAoZ2V0ZW52KCJQR0RBVEFCQVNFIikpCisJ CQlkYm5hbWUgPSBnZXRlbnYoIlBHREFUQUJBU0UiKTsKKwkJZWxzZSBpZiAoZ2V0ZW52KCJQR1VT RVIiKSkKKwkJCWRibmFtZSA9IGdldGVudigiUEdVU0VSIik7CisJCWVsc2UKKwkJCWRibmFtZSA9 IGdldF91c2VyX25hbWVfb3JfZXhpdChwcm9nbmFtZSk7CisJfQorCisJY3BhcmFtcy5kYm5hbWUg PSBkYm5hbWU7CisKKwljb25uID0gY29ubmVjdERhdGFiYXNlKCZjcGFyYW1zLCBwcm9nbmFtZSwg ZWNobywgZmFsc2UsIHRydWUpOworCisJc2VydmVyX3ZlcnNpb25fbnVtID0gUFFzZXJ2ZXJWZXJz aW9uKGNvbm4pOworCisJaW5pdFBRRXhwQnVmZmVyKCZzcWwpOworCisJYXBwZW5kUFFFeHBCdWZm ZXJTdHIoJnNxbCwgIkNPUFkgKCIpOworCisJaWYgKHNlcnZlcl92ZXJzaW9uX251bSA+PSAxMjAw MDApCisJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZzcWwsIGV4cG9ydF9yZWxfcXVlcnlfdjEyKTsK KwllbHNlIGlmIChzZXJ2ZXJfdmVyc2lvbl9udW0gPj0gMTAwMDAwKQorCQlhcHBlbmRQUUV4cEJ1 ZmZlclN0cigmc3FsLCBleHBvcnRfcmVsX3F1ZXJ5X3YxMCk7CisJZWxzZQorCQlwZ19mYXRhbCgi ZXhwb3J0aW5nIHN0YXRpc3RpY3MgZnJvbSBkYXRhYmFzZXMgcHJpb3IgdG8gdmVyc2lvbiAxMCBu b3Qgc3VwcG9ydGVkIik7CisKKwlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmc3FsLCAiIFVOSU9OIEFM TCAiKTsKKworCWlmIChzZXJ2ZXJfdmVyc2lvbl9udW0gPj0gMTUwMDAwKQorCQlhcHBlbmRQUUV4 cEJ1ZmZlclN0cigmc3FsLCBleHBvcnRfZXh0X3F1ZXJ5X3YxNSk7CisJZWxzZSBpZiAoc2VydmVy X3ZlcnNpb25fbnVtID49IDE0MDAwMCkKKwkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJnNxbCwgZXhw b3J0X2V4dF9xdWVyeV92MTQpOworCWVsc2UgaWYgKHNlcnZlcl92ZXJzaW9uX251bSA+PSAxMjAw MDApCisJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZzcWwsIGV4cG9ydF9leHRfcXVlcnlfdjEyKTsK KwllbHNlIGlmIChzZXJ2ZXJfdmVyc2lvbl9udW0gPj0gMTAwMDAwKQorCQlhcHBlbmRQUUV4cEJ1 ZmZlclN0cigmc3FsLCBleHBvcnRfZXh0X3F1ZXJ5X3YxMCk7CisJZWxzZQorCQlwZ19mYXRhbCgi ZXhwb3J0aW5nIHN0YXRpc3RpY3MgZnJvbSBkYXRhYmFzZXMgcHJpb3IgdG8gdmVyc2lvbiAxMCBu b3Qgc3VwcG9ydGVkIik7CisKKwlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmc3FsLCAiIE9SREVSIEJZ IDEsIDIsIDMpIFRPIFNURE9VVCIpOworIAorCS8qIHByaW50ZigiJXNcbiIsIHNxbC5kYXRhKTsg Ki8KKwlyZXN1bHQgPSBQUWV4ZWMoY29ubiwgc3FsLmRhdGEpOworCXJlc3VsdF9zdGF0dXMgPSBQ UXJlc3VsdFN0YXR1cyhyZXN1bHQpOworCisJaWYgKHJlc3VsdF9zdGF0dXMgIT0gUEdSRVNfQ09Q WV9PVVQpCisJCXBnX2ZhdGFsKCJtYWxmb3JtZWQgY29weSBjb21tYW5kOiAlcyIsIFBRZXJyb3JN ZXNzYWdlKGNvbm4pKTsKKworCWZvciAoOzspCisJeworCQlyZXQgPSBQUWdldENvcHlEYXRhKGNv bm4sICZidWYsIDApOworCisJCWlmIChyZXQgPCAwKQorCQkJYnJlYWs7CQkJCS8qIGRvbmUgb3Ig c2VydmVyL2Nvbm5lY3Rpb24gZXJyb3IgKi8KKworCQlpZiAoYnVmKQorCQl7CisJCQlpZiAoY29w eXN0cmVhbSAmJiBmd3JpdGUoYnVmLCAxLCByZXQsIGNvcHlzdHJlYW0pICE9IHJldCkKKwkJCQlw Z19mYXRhbCgiY291bGQgbm90IHdyaXRlIENPUFkgZGF0YTogJW0iKTsKKwkJCVBRZnJlZW1lbShi dWYpOworCQl9CisJfQorCisJaWYgKGNvcHlzdHJlYW0gJiYgZmZsdXNoKGNvcHlzdHJlYW0pKQor CQlwZ19mYXRhbCgiY291bGQgbm90IHdyaXRlIENPUFkgZGF0YTogJW0iKTsKKworCWlmIChyZXQg PT0gLTIpCisJCXBnX2ZhdGFsKCJDT1BZIGRhdGEgdHJhbnNmZXIgZmFpbGVkOiAlcyIsIFBRZXJy b3JNZXNzYWdlKGNvbm4pKTsKKworCVBRZmluaXNoKGNvbm4pOworCXRlcm1QUUV4cEJ1ZmZlcigm c3FsKTsKKwlleGl0KDApOworfQorCisKK3N0YXRpYyB2b2lkCitoZWxwKGNvbnN0IGNoYXIgKnBy b2duYW1lKQoreworCXByaW50ZihfKCIlcyBjbHVzdGVycyBhbGwgcHJldmlvdXNseSBjbHVzdGVy ZWQgdGFibGVzIGluIGEgZGF0YWJhc2UuXG5cbiIpLCBwcm9nbmFtZSk7CisJcHJpbnRmKF8oIlVz YWdlOlxuIikpOworCXByaW50ZihfKCIgICVzIFtPUFRJT05dLi4uIFtEQk5BTUVdXG4iKSwgcHJv Z25hbWUpOworCXByaW50ZihfKCJcbk9wdGlvbnM6XG4iKSk7CisJcHJpbnRmKF8oIiAgLWQsIC0t ZGJuYW1lPURCTkFNRSAgICAgICBkYXRhYmFzZSB0byBjbHVzdGVyXG4iKSk7CisJcHJpbnRmKF8o IiAgLWUsIC0tZWNobyAgICAgICAgICAgICAgICBzaG93IHRoZSBjb21tYW5kcyBiZWluZyBzZW50 IHRvIHRoZSBzZXJ2ZXJcbiIpKTsKKwlwcmludGYoXygiICAtdCwgLS10YWJsZT1UQUJMRSAgICAg ICAgIGNsdXN0ZXIgc3BlY2lmaWMgdGFibGUocykgb25seVxuIikpOworCXByaW50ZihfKCIgIC1W LCAtLXZlcnNpb24gICAgICAgICAgICAgb3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24sIHRoZW4g ZXhpdFxuIikpOworCXByaW50ZihfKCIgIC0/LCAtLWhlbHAgICAgICAgICAgICAgICAgc2hvdyB0 aGlzIGhlbHAsIHRoZW4gZXhpdFxuIikpOworCXByaW50ZihfKCJcbkNvbm5lY3Rpb24gb3B0aW9u czpcbiIpKTsKKwlwcmludGYoXygiICAtaCwgLS1ob3N0PUhPU1ROQU1FICAgICAgIGRhdGFiYXNl IHNlcnZlciBob3N0IG9yIHNvY2tldCBkaXJlY3RvcnlcbiIpKTsKKwlwcmludGYoXygiICAtcCwg LS1wb3J0PVBPUlQgICAgICAgICAgIGRhdGFiYXNlIHNlcnZlciBwb3J0XG4iKSk7CisJcHJpbnRm KF8oIiAgLVUsIC0tdXNlcm5hbWU9VVNFUk5BTUUgICB1c2VyIG5hbWUgdG8gY29ubmVjdCBhc1xu IikpOworCXByaW50ZihfKCIgIC13LCAtLW5vLXBhc3N3b3JkICAgICAgICAgbmV2ZXIgcHJvbXB0 IGZvciBwYXNzd29yZFxuIikpOworCXByaW50ZihfKCIgIC1XLCAtLXBhc3N3b3JkICAgICAgICAg ICAgZm9yY2UgcGFzc3dvcmQgcHJvbXB0XG4iKSk7CisJcHJpbnRmKF8oIiAgLS1tYWludGVuYW5j ZS1kYj1EQk5BTUUgICBhbHRlcm5hdGUgbWFpbnRlbmFuY2UgZGF0YWJhc2VcbiIpKTsKKwlwcmlu dGYoXygiXG5SZWFkIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU1FMIGNvbW1hbmQgQ0xVU1RFUiBm b3IgZGV0YWlscy5cbiIpKTsKKwlwcmludGYoXygiXG5SZXBvcnQgYnVncyB0byA8JXM+LlxuIiks IFBBQ0tBR0VfQlVHUkVQT1JUKTsKKwlwcmludGYoXygiJXMgaG9tZSBwYWdlOiA8JXM+XG4iKSwg UEFDS0FHRV9OQU1FLCBQQUNLQUdFX1VSTCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmluL3Njcmlw dHMvcGdfaW1wb3J0X3N0YXRzLmMgYi9zcmMvYmluL3NjcmlwdHMvcGdfaW1wb3J0X3N0YXRzLmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uOTZhNzI1MmZlYwotLS0gL2Rl di9udWxsCisrKyBiL3NyYy9iaW4vc2NyaXB0cy9wZ19pbXBvcnRfc3RhdHMuYwpAQCAtMCwwICsx LDQ3NyBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdfaW1wb3J0X3N0YXRzCisgKgor ICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjMsIFBvc3RncmVTUUwgR2xvYmFsIERl dmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMg b2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIHNyYy9iaW4vc2NyaXB0cy9w Z19pbXBvcnRfc3RhdHMuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRl ICJwb3N0Z3Jlc19mZS5oIgorI2luY2x1ZGUgImNvbW1vbi5oIgorI2luY2x1ZGUgImNvbW1vbi9s b2dnaW5nLmgiCisjaW5jbHVkZSAiZmVfdXRpbHMvY2FuY2VsLmgiCisjaW5jbHVkZSAiZmVfdXRp bHMvb3B0aW9uX3V0aWxzLmgiCisjaW5jbHVkZSAiZmVfdXRpbHMvcXVlcnlfdXRpbHMuaCIKKyNp bmNsdWRlICJmZV91dGlscy9zaW1wbGVfbGlzdC5oIgorI2luY2x1ZGUgImZlX3V0aWxzL3N0cmlu Z191dGlscy5oIgorCisjZGVmaW5lIENPUFlfQlVGX0xFTiA4MTkyCisKK3N0YXRpYyB2b2lkIGhl bHAoY29uc3QgY2hhciAqcHJvZ25hbWUpOworCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKmFy Z3ZbXSkKK3sKKwlzdGF0aWMgc3RydWN0IG9wdGlvbiBsb25nX29wdGlvbnNbXSA9IHsKKwkJeyJo b3N0IiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdoJ30sCisJCXsicG9ydCIsIHJlcXVpcmVk X2FyZ3VtZW50LCBOVUxMLCAncCd9LAorCQl7InVzZXJuYW1lIiwgcmVxdWlyZWRfYXJndW1lbnQs IE5VTEwsICdVJ30sCisJCXsibm8tcGFzc3dvcmQiLCBub19hcmd1bWVudCwgTlVMTCwgJ3cnfSwK KwkJeyJwYXNzd29yZCIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnVyd9LAorCQl7InF1aWV0Iiwgbm9f YXJndW1lbnQsIE5VTEwsICdxJ30sCisJCXsiZGJuYW1lIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5V TEwsICdkJ30sCisJCXtOVUxMLCAwLCBOVUxMLCAwfQorCX07CisKKwljb25zdCBjaGFyICpwcm9n bmFtZTsKKwlpbnQJCQlvcHRpbmRleDsKKwlpbnQJCQljOworCisJY29uc3QgY2hhciAqZGJuYW1l ID0gTlVMTDsKKwljaGFyCSAgICpob3N0ID0gTlVMTDsKKwljaGFyCSAgICpwb3J0ID0gTlVMTDsK KwljaGFyCSAgICp1c2VybmFtZSA9IE5VTEw7CisJZW51bSB0cml2YWx1ZSBwcm9tcHRfcGFzc3dv cmQgPSBUUklfREVGQVVMVDsKKwlDb25uUGFyYW1zCWNwYXJhbXM7CisJYm9vbAkJcXVpZXQgPSBm YWxzZTsKKworCVBHY29ubgkgICAqY29ubjsKKworCUZJTEUJICAgKmNvcHlzcmM9IHN0ZGluOwor CisJUEdyZXN1bHQgICAqcmVzdWx0OworCisJaW50CQlpOworCWludAkJbnVtdGFibGVzOworCWlu dAkJbnVtZXh0c3RhdHM7CisKKwlwZ19sb2dnaW5nX2luaXQoYXJndlswXSk7CisJcHJvZ25hbWUg PSBnZXRfcHJvZ25hbWUoYXJndlswXSk7CisJc2V0X3BnbG9jYWxlX3Bnc2VydmljZShhcmd2WzBd LCBQR19URVhURE9NQUlOKCJwZ3NjcmlwdHMiKSk7CisKKwloYW5kbGVfaGVscF92ZXJzaW9uX29w dHMoYXJnYywgYXJndiwgImNsdXN0ZXJkYiIsIGhlbHApOworCisJd2hpbGUgKChjID0gZ2V0b3B0 X2xvbmcoYXJnYywgYXJndiwgImQ6aDpwOnFVOndXIiwgbG9uZ19vcHRpb25zLCAmb3B0aW5kZXgp KSAhPSAtMSkKKwl7CisJCXN3aXRjaCAoYykKKwkJeworCQkJY2FzZSAnZCc6CisJCQkJZGJuYW1l ID0gcGdfc3RyZHVwKG9wdGFyZyk7CisJCQkJYnJlYWs7CisJCQljYXNlICdoJzoKKwkJCQlob3N0 ID0gcGdfc3RyZHVwKG9wdGFyZyk7CisJCQkJYnJlYWs7CisJCQljYXNlICdwJzoKKwkJCQlwb3J0 ID0gcGdfc3RyZHVwKG9wdGFyZyk7CisJCQkJYnJlYWs7CisJCQljYXNlICdxJzoKKwkJCQlxdWll dCA9IHRydWU7CisJCQkJYnJlYWs7CisJCQljYXNlICdVJzoKKwkJCQl1c2VybmFtZSA9IHBnX3N0 cmR1cChvcHRhcmcpOworCQkJCWJyZWFrOworCQkJY2FzZSAndyc6CisJCQkJcHJvbXB0X3Bhc3N3 b3JkID0gVFJJX05POworCQkJCWJyZWFrOworCQkJY2FzZSAnVyc6CisJCQkJcHJvbXB0X3Bhc3N3 b3JkID0gVFJJX1lFUzsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJLyogZ2V0b3B0X2xv bmcgYWxyZWFkeSBlbWl0dGVkIGEgY29tcGxhaW50ICovCisJCQkJcGdfbG9nX2Vycm9yX2hpbnQo IlRyeSBcIiVzIC0taGVscFwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIsIHByb2duYW1lKTsKKwkJ CQlleGl0KDEpOworCQl9CisJfQorCisJLyoKKwkgKiBOb24tb3B0aW9uIGFyZ3VtZW50IHNwZWNp ZmllcyBkYXRhYmFzZSBuYW1lIGFzIGxvbmcgYXMgaXQgd2Fzbid0CisJICogYWxyZWFkeSBzcGVj aWZpZWQgd2l0aCAtZCAvIC0tZGJuYW1lCisJICovCisJaWYgKG9wdGluZCA8IGFyZ2MgJiYgZGJu YW1lID09IE5VTEwpCisJeworCQlkYm5hbWUgPSBhcmd2W29wdGluZF07CisJCW9wdGluZCsrOwor CX0KKworCWlmIChvcHRpbmQgPCBhcmdjKQorCXsKKwkJcGdfbG9nX2Vycm9yKCJ0b28gbWFueSBj b21tYW5kLWxpbmUgYXJndW1lbnRzIChmaXJzdCBpcyBcIiVzXCIpIiwKKwkJCQkJIGFyZ3Zbb3B0 aW5kXSk7CisJCXBnX2xvZ19lcnJvcl9oaW50KCJUcnkgXCIlcyAtLWhlbHBcIiBmb3IgbW9yZSBp bmZvcm1hdGlvbi4iLCBwcm9nbmFtZSk7CisJCWV4aXQoMSk7CisJfQorCisJLyogZmlsbCBjcGFy YW1zIGV4Y2VwdCBmb3IgZGJuYW1lLCB3aGljaCBpcyBzZXQgYmVsb3cgKi8KKwljcGFyYW1zLnBn aG9zdCA9IGhvc3Q7CisJY3BhcmFtcy5wZ3BvcnQgPSBwb3J0OworCWNwYXJhbXMucGd1c2VyID0g dXNlcm5hbWU7CisJY3BhcmFtcy5wcm9tcHRfcGFzc3dvcmQgPSBwcm9tcHRfcGFzc3dvcmQ7CisJ Y3BhcmFtcy5vdmVycmlkZV9kYm5hbWUgPSBOVUxMOworCisJc2V0dXBfY2FuY2VsX2hhbmRsZXIo TlVMTCk7CisKKwlpZiAoZGJuYW1lID09IE5VTEwpCisJeworCQlpZiAoZ2V0ZW52KCJQR0RBVEFC QVNFIikpCisJCQlkYm5hbWUgPSBnZXRlbnYoIlBHREFUQUJBU0UiKTsKKwkJZWxzZSBpZiAoZ2V0 ZW52KCJQR1VTRVIiKSkKKwkJCWRibmFtZSA9IGdldGVudigiUEdVU0VSIik7CisJCWVsc2UKKwkJ CWRibmFtZSA9IGdldF91c2VyX25hbWVfb3JfZXhpdChwcm9nbmFtZSk7CisJfQorCisJY3BhcmFt cy5kYm5hbWUgPSBkYm5hbWU7CisKKwljb25uID0gY29ubmVjdERhdGFiYXNlKCZjcGFyYW1zLCBw cm9nbmFtZSwgZmFsc2UsIGZhbHNlLCB0cnVlKTsKKworCS8qIG9wZW4gZmlsZSAqLworCisJLyog aXRlcmF0ZSBvdmVyIHJlY29yZHMgKi8KKworCS8qCisJICogQ3JlYXRlIGEgdGFibGUgdGhhdCBj YW4gcmVjZWl2ZWQgdGhlIENPUFktZWQgZmlsZSB3aGljaCBpcyBhIG1peAorCSAqIG9mIHJlbGF0 aW9uIHN0YXRpc3RpY3MgYW5kIGV4dGVuZGVkIHN0YXRpc3RpY3MuCisJICovCisJcmVzdWx0ID0g UFFleGVjKGNvbm4sCisJCSJDUkVBVEUgVEVNUE9SQVJZIFRBQkxFIGltcG9ydF9zdGF0cyAoICIK KwkJInNjaGVtYW5hbWUgdGV4dCwgIgorCQkicmVsbmFtZSB0ZXh0LCAiCisJCSJleHRfc3RhdHNf bmFtZSB0ZXh0LCAiCisJCSJzZXJ2ZXJfdmVyc2lvbl9udW0gaW50ZWdlciwgIgorCQkic3RhdHMg anNvbmIgKSIpOworCisJaWYgKFBRcmVzdWx0U3RhdHVzKHJlc3VsdCkgIT0gUEdSRVNfQ09NTUFO RF9PSykKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBjcmVhdGUgdGVtcG9yYXJ5IHRhYmxlOiAlcyIs IFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKworCVBRY2xlYXIocmVzdWx0KTsKKworCS8qCisJICog Q3JlYXRlIGEgdGFibGUganVzdCBmb3IgdGhlIHJlbGF0aW9uIHN0YXRpc3RpY3MKKwkgKi8KKwly ZXN1bHQgPSBQUWV4ZWMoY29ubiwKKwkJIkNSRUFURSBURU1QT1JBUlkgVEFCTEUgaW1wb3J0X3Jl bF9zdGF0cyAoICIKKwkJImlkIGJpZ2ludCBHRU5FUkFURUQgQUxXQVlTIEFTIElERU5USVRZIFBS SU1BUlkgS0VZLCAiCisJCSJzY2hlbWFuYW1lIHRleHQsICIKKwkJInJlbG5hbWUgdGV4dCwgIgor CQkic2VydmVyX3ZlcnNpb25fbnVtIGludGVnZXIsICIKKwkJInN0YXRzIGpzb25iICkiKTsKKwor CWlmIChQUXJlc3VsdFN0YXR1cyhyZXN1bHQpICE9IFBHUkVTX0NPTU1BTkRfT0spCisJCXBnX2Zh dGFsKCJjb3VsZCBub3QgY3JlYXRlIHRlbXBvcmFyeSB0YWJsZTogJXMiLCBQUWVycm9yTWVzc2Fn ZShjb25uKSk7CisKKworCVBRY2xlYXIocmVzdWx0KTsKKworCS8qCisJICogQ3JlYXRlIGEgdGFi bGUganVzdCBmb3IgZXh0ZW5kZWQgc3RhdGlzdGljcworCSAqLworCXJlc3VsdCA9IFBRZXhlYyhj b25uLAorCQkiQ1JFQVRFIFRFTVBPUkFSWSBUQUJMRSBpbXBvcnRfZXh0X3N0YXRzICggIgorCQki aWQgYmlnaW50IEdFTkVSQVRFRCBBTFdBWVMgQVMgSURFTlRJVFkgUFJJTUFSWSBLRVksICIKKwkJ InNjaGVtYW5hbWUgdGV4dCwgIgorCQkicmVsbmFtZSB0ZXh0LCAiCisJCSJleHRfc3RhdHNfbmFt ZSB0ZXh0LCAiCisJCSJzZXJ2ZXJfdmVyc2lvbl9udW0gaW50ZWdlciwgIgorCQkic3RhdHMganNv bmIgKSIpOworCisJaWYgKFBRcmVzdWx0U3RhdHVzKHJlc3VsdCkgIT0gUEdSRVNfQ09NTUFORF9P SykKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBjcmVhdGUgdGVtcG9yYXJ5IHRhYmxlOiAlcyIsIFBR ZXJyb3JNZXNzYWdlKGNvbm4pKTsKKworCVBRY2xlYXIocmVzdWx0KTsKKworCS8qCisJICogQ29w eSBpbnB1dCBkYXRhIGludG8gY29tYmluZWQgdGFibGUuCisJICovCisJcmVzdWx0ID0gUFFleGVj KGNvbm4sCisJCSJDT1BZIGltcG9ydF9zdGF0cyBGUk9NIFNURElOIik7CisKKwlpZiAoUFFyZXN1 bHRTdGF0dXMocmVzdWx0KSAhPSBQR1JFU19DT1BZX0lOKQorCQlwZ19mYXRhbCgiZXJyb3IgY29w eWluZyBkYXRhIHRvIGltcG9ydF9zdGF0czogJXMiLCBQUWVycm9yTWVzc2FnZShjb25uKSk7CisK Kwlmb3IgKDs7KQorCXsKKwkJY2hhciBjb3B5YnVmW0NPUFlfQlVGX0xFTl07CisKKwkJaW50IG51 bXJlYWQgPSBmcmVhZChjb3B5YnVmLCAxLCBDT1BZX0JVRl9MRU4sIGNvcHlzcmMpOworCisJCWlm IChmZXJyb3IoY29weXNyYykpCisJCQlwZ19mYXRhbCgiZXJyb3IgcmVhZGluZyBmcm9tIHNvdXJj ZSIpOworCisJCWlmIChudW1yZWFkID09IDApCisJCQlicmVhazsKKworCQlpZiAoUFFwdXRDb3B5 RGF0YShjb25uLCBjb3B5YnVmLCBudW1yZWFkKSA9PSAtMSkKKwkJCXBnX2ZhdGFsKCJlcm9yIGR1 cmluZyBjb3B5OiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKwl9CisKKwlpZiAoUFFwdXRD b3B5RW5kKGNvbm4sIE5VTEwpID09IC0xKQorCQlwZ19mYXRhbCgiZXJvciBkdXJpbmcgY29weTog JXMiLCBQUWVycm9yTWVzc2FnZShjb25uKSk7CisJZmNsb3NlKGNvcHlzcmMpOworCisJcmVzdWx0 ID0gUFFnZXRSZXN1bHQoY29ubik7CisKKwlpZiAoUFFyZXN1bHRTdGF0dXMocmVzdWx0KSAhPSBQ R1JFU19DT01NQU5EX09LKQorCQlwZ19mYXRhbCgiZXJyb3IgY29weWluZyBkYXRhIHRvIGltcG9y dF9zdGF0czogJXMiLCBQUWVycm9yTWVzc2FnZShjb25uKSk7CisKKwlQUWNsZWFyKHJlc3VsdCk7 CisKKwkvKgorCSAqIEluc2VydCByZWwgc3RhdHMgaW50byB0aGVpciBvd24gdGFibGUgd2l0aCBu dW1iZXJpbmcuCisJICovCisJcmVzdWx0ID0gUFFleGVjKGNvbm4sCisJCSJJTlNFUlQgSU5UTyBp bXBvcnRfcmVsX3N0YXRzKHNjaGVtYW5hbWUsIHJlbG5hbWUsIHNlcnZlcl92ZXJzaW9uX251bSwg IgorCQkic3RhdHMpICIKKwkJIlNFTEVDVCBzY2hlbWFuYW1lLCByZWxuYW1lLCBzZXJ2ZXJfdmVy c2lvbl9udW0sIHN0YXRzICIKKwkJIkZST00gaW1wb3J0X3N0YXRzICIKKwkJIldIRVJFIGV4dF9z dGF0c19uYW1lIElTIE5VTEwgIik7CisKKwlpZiAoUFFyZXN1bHRTdGF0dXMocmVzdWx0KSAhPSBQ R1JFU19DT01NQU5EX09LKQorCQlwZ19mYXRhbCgicmVsYXRpb24gc3RhdHMgaW5zZXJ0IGVycm9y OiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKworCW51bXRhYmxlcyA9IGF0b2woUFFjbWRU dXBsZXMocmVzdWx0KSk7CisKKwlQUWNsZWFyKHJlc3VsdCk7CisKKwkvKgorCSAqIEluc2VydCBl eHRlbmRlZCBzdGF0cyBpbnRvIHRoZWlyIG93biB0YWJsZSB3aXRoIG51bWJlcmluZy4KKwkgKi8K KwlyZXN1bHQgPSBQUWV4ZWMoY29ubiwKKwkJIklOU0VSVCBJTlRPIGltcG9ydF9leHRfc3RhdHMo c2NoZW1hbmFtZSwgcmVsbmFtZSwgZXh0X3N0YXRzX25hbWUsICIKKwkJInNlcnZlcl92ZXJzaW9u X251bSwgc3RhdHMpICIKKwkJIlNFTEVDVCBzY2hlbWFuYW1lLCByZWxuYW1lLCBleHRfc3RhdHNf bmFtZSwgc2VydmVyX3ZlcnNpb25fbnVtLCAiCisJCSJzdGF0cyAiCisJCSJGUk9NIGltcG9ydF9z dGF0cyAiCisJCSJXSEVSRSBleHRfc3RhdHNfbmFtZSBJUyBOT1QgTlVMTCAiKTsKKworCWlmIChQ UXJlc3VsdFN0YXR1cyhyZXN1bHQpICE9IFBHUkVTX0NPTU1BTkRfT0spCisJCXBnX2ZhdGFsKCJy ZWxhdGlvbiBzdGF0cyBpbnNlcnQgZXJyb3I6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubikpOwor CisJbnVtZXh0c3RhdHMgPSBhdG9sKFBRY21kVHVwbGVzKHJlc3VsdCkpOworCisJUFFjbGVhcihy ZXN1bHQpOworCisJaWYgKG51bXRhYmxlcyA+IDApCisJeworCisJCXJlc3VsdCA9IFBRcHJlcGFy ZShjb25uLCAiaW1wb3J0X3JlbCIsCisJCQkiU0VMRUNUIHBnX2ltcG9ydF9yZWxfc3RhdHMoYy5v aWQsIHMuc3RhdHMsIHRydWUsIHRydWUpIEFTIGltcG9ydF9yZXN1bHQgIgorCQkJIkZST00gaW1w b3J0X3JlbF9zdGF0cyBBUyBzICIKKwkJCSJKT0lOIHBnX25hbWVzcGFjZSBBUyBuIE9OIG4ubnNw bmFtZSA9IHMuc2NoZW1hbmFtZSAiCisJCQkiSk9JTiBwZ19jbGFzcyBBUyBjIE9OIGMucmVsbmFt ZXNwYWNlID0gbi5vaWQgIgorCQkJIiAgICAgICAgICAgICAgICAgICBBTkQgYy5yZWxuYW1lID0g cy5yZWxuYW1lICIKKwkJCSJXSEVSRSBzLmlkID0gJDE6OmJpZ2ludCAiLAorCQkJMSwgTlVMTCk7 CisKKwkJaWYgKFBRcmVzdWx0U3RhdHVzKHJlc3VsdCkgIT0gUEdSRVNfQ09NTUFORF9PSykKKwkJ CXBnX2ZhdGFsKCJlcnJvciBpbiBQUkVQQVJFOiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsK KworCQlQUWNsZWFyKHJlc3VsdCk7CisKKwkJaWYgKCFxdWlldCkKKwkJeworCQkJcmVzdWx0ID0g UFFwcmVwYXJlKGNvbm4sICJlY2hvX3JlbCIsCisJCQkJIlNFTEVDVCBzLnNjaGVtYW5hbWUsIHMu cmVsbmFtZSAiCisJCQkJIkZST00gaW1wb3J0X3JlbF9zdGF0cyBBUyBzICIKKwkJCQkiV0hFUkUg cy5pZCA9ICQxOjpiaWdpbnQgIiwKKwkJCQkxLCBOVUxMKTsKKworCQkJaWYgKFBRcmVzdWx0U3Rh dHVzKHJlc3VsdCkgIT0gUEdSRVNfQ09NTUFORF9PSykKKwkJCQlwZ19mYXRhbCgiZXJyb3IgaW4g UFJFUEFSRTogJXMiLCBQUWVycm9yTWVzc2FnZShjb25uKSk7CisKKwkJCVBRY2xlYXIocmVzdWx0 KTsKKwkJfQorCisJCWZvciAoaSA9IDE7IGkgPD0gbnVtdGFibGVzOyBpKyspCisJCXsKKwkJCWNo YXIJaXN0clszMl07CisJCQljaGFyICAgKnNjaGVtYSA9IE5VTEw7CisJCQljaGFyICAgKnRhYmxl ID0gTlVMTDsKKworCQkJY29uc3QgY2hhciAqY29uc3QgdmFsdWVzW10gPSB7aXN0cn07CisKKwkJ CXNucHJpbnRmKGlzdHIsIDMyLCAiJWQiLCBpKTsKKworCQkJaWYgKCFxdWlldCkKKwkJCXsKKwkJ CQlyZXN1bHQgPSBQUWV4ZWNQcmVwYXJlZChjb25uLCAiZWNob19yZWwiLCAxLCB2YWx1ZXMsIE5V TEwsIE5VTEwsIDApOworCQkJCXNjaGVtYSA9IHBnX3N0cmR1cChQUWdldHZhbHVlKHJlc3VsdCwg MCwgMCkpOworCQkJCXRhYmxlID0gcGdfc3RyZHVwKFBRZ2V0dmFsdWUocmVzdWx0LCAwLCAxKSk7 CisJCQl9CisKKwkJCVBRY2xlYXIocmVzdWx0KTsKKworCQkJcmVzdWx0ID0gUFFleGVjUHJlcGFy ZWQoY29ubiwgImltcG9ydF9yZWwiLCAxLCB2YWx1ZXMsIE5VTEwsIE5VTEwsIDApOworCisJCQlp ZiAocXVpZXQpCisJCQl7CisJCQkJUFFjbGVhcihyZXN1bHQpOworCQkJCWNvbnRpbnVlOworCQkJ fQorCisJCQlpZiAoUFFyZXN1bHRTdGF0dXMocmVzdWx0KSA9PSBQR1JFU19UVVBMRVNfT0spCisJ CQl7CisJCQkJaW50IAlyb3dzID0gUFFudHVwbGVzKHJlc3VsdCk7CisKKwkJCQlpZiAocm93cyA9 PSAxKQorCQkJCXsKKwkJCQkJY2hhciAgICpyZXR2YWwgPSBQUWdldHZhbHVlKHJlc3VsdCwgMCwg MCk7CisJCQkJCWlmICgqcmV0dmFsID09ICd0JykKKwkJCQkJCXByaW50ZigiJXMuJXM6IGltcG9y dGVkXG4iLCBzY2hlbWEsIHRhYmxlKTsKKwkJCQkJZWxzZQorCQkJCQkJcHJpbnRmKCIlcy4lczog ZmFpbGVkXG4iLCBzY2hlbWEsIHRhYmxlKTsKKwkJCQl9CisJCQkJZWxzZSBpZiAocm93cyA9PSAw KQorCQkJCQlwcmludGYoIiVzLiVzOiBub3QgZm91bmRcbiIsIHNjaGVtYSwgdGFibGUpOworCQkJ CWVsc2UKKwkJCQkJcGdfZmF0YWwoImltcG9ydCBmdW5jdGlvbiBtdXN0IHJldHVybiAwIG9yIDEg cm93cyIpOworCQkJfQorCQkJZWxzZQorCQkJCXByaW50ZigiJXMuJXM6IGVycm9yOiAlc1xuIiwg c2NoZW1hLCB0YWJsZSwgUFFlcnJvck1lc3NhZ2UoY29ubikpOworCisJCQlpZiAoc2NoZW1hICE9 IE5VTEwpCisJCQkJcGZyZWUoc2NoZW1hKTsKKworCQkJaWYgKHRhYmxlICE9IE5VTEwpCisJCQkJ cGZyZWUodGFibGUpOworCisJCQlQUWNsZWFyKHJlc3VsdCk7CisJCX0KKwl9CisKKwlpZiAobnVt ZXh0c3RhdHMgPiAwKQorCXsKKworCXJlc3VsdCA9IFBRcHJlcGFyZShjb25uLCAiaW1wb3J0X2V4 dCIsCisJCSJTRUxFQ1QgcGdfaW1wb3J0X2V4dF9zdGF0cyhlLm9pZCwgcy5zdGF0cywgdHJ1ZSwg dHJ1ZSkgQVMgaW1wb3J0X3Jlc3VsdCAiCisJCSJGUk9NIGltcG9ydF9leHRfc3RhdHMgQVMgcyAi CisJCSJKT0lOIHBnX25hbWVzcGFjZSBBUyBuIE9OIG4ubnNwbmFtZSA9IHMuc2NoZW1hbmFtZSAi CisJCSJKT0lOIHBnX2NsYXNzIEFTIGMgT04gYy5yZWxuYW1lc3BhY2UgPSBuLm9pZCAiCisJCSIg ICAgICAgICAgICAgICAgICAgQU5EIGMucmVsbmFtZSA9IHMucmVsbmFtZSAiCisJCSJKT0lOIHBn X3N0YXRpc3RpY19leHQgQVMgZSBPTiBlLnN0eHJlbGlkID0gYy5vaWQgIgorCQkiICAgICAgICAg ICAgICAgICAgIEFORCBlLnN0eG5hbWUgPSBzLmV4dF9zdGF0c19uYW1lICIKKwkJIldIRVJFIHMu aWQgPSAkMTo6YmlnaW50ICIKKwkJIkFORCBmYWxzZSAiLCAvKiByZW1vdmUgd2hlbiB3ZSBlbmFi bGUgZXh0ZW5kZWQgc3RhdHMgKi8KKwkJMSwgTlVMTCk7CisKKwkJaWYgKFBRcmVzdWx0U3RhdHVz KHJlc3VsdCkgIT0gUEdSRVNfQ09NTUFORF9PSykKKwkJCXBnX2ZhdGFsKCJlcnJvciBpbiBQUkVQ QVJFOiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKworCQlQUWNsZWFyKHJlc3VsdCk7CisK KwkJaWYgKCFxdWlldCkKKwkJeworCQkJcmVzdWx0ID0gUFFwcmVwYXJlKGNvbm4sICJlY2hvX2V4 dCIsCisJCQkJIlNFTEVDVCBzLnNjaGVtYW5hbWUsIHMucmVsbmFtZSwgcy5leHRfc3RhdHNfbmFt ZSAiCisJCQkJIkZST00gaW1wb3J0X2V4dF9zdGF0cyBBUyBzICIKKwkJCQkiV0hFUkUgcy5pZCA9 ICQxOjpiaWdpbnQgIiwKKwkJCQkxLCBOVUxMKTsKKworCQkJaWYgKFBRcmVzdWx0U3RhdHVzKHJl c3VsdCkgIT0gUEdSRVNfQ09NTUFORF9PSykKKwkJCQlwZ19mYXRhbCgiZXJyb3IgaW4gUFJFUEFS RTogJXMiLCBQUWVycm9yTWVzc2FnZShjb25uKSk7CisKKwkJCVBRY2xlYXIocmVzdWx0KTsKKwkJ fQorCisJCWZvciAoaSA9IDE7IGkgPD0gbnVtZXh0c3RhdHM7IGkrKykKKwkJeworCQkJY2hhcglp c3RyWzMyXTsKKwkJCWNoYXIgICAqc2NoZW1hID0gTlVMTDsKKwkJCWNoYXIgICAqdGFibGUgPSBO VUxMOworCQkJY2hhciAgICpzdGF0ID0gTlVMTDsKKworCQkJY29uc3QgY2hhciAqY29uc3QgdmFs dWVzW10gPSB7aXN0cn07CisKKwkJCXNucHJpbnRmKGlzdHIsIDMyLCAiJWQiLCBpKTsKKworCQkJ aWYgKCFxdWlldCkKKwkJCXsKKwkJCQlyZXN1bHQgPSBQUWV4ZWNQcmVwYXJlZChjb25uLCAiZWNo b19leHQiLCAxLCB2YWx1ZXMsIE5VTEwsIE5VTEwsIDApOworCQkJCXNjaGVtYSA9IHBnX3N0cmR1 cChQUWdldHZhbHVlKHJlc3VsdCwgMCwgMCkpOworCQkJCXRhYmxlID0gcGdfc3RyZHVwKFBRZ2V0 dmFsdWUocmVzdWx0LCAwLCAxKSk7CisJCQkJc3RhdCA9IHBnX3N0cmR1cChQUWdldHZhbHVlKHJl c3VsdCwgMCwgMikpOworCQkJfQorCisJCQlQUWNsZWFyKHJlc3VsdCk7CisKKwkJCXJlc3VsdCA9 IFBRZXhlY1ByZXBhcmVkKGNvbm4sICJpbXBvcnRfZXh0IiwgMSwgdmFsdWVzLCBOVUxMLCBOVUxM LCAwKTsKKworCQkJaWYgKHF1aWV0KQorCQkJeworCQkJCVBRY2xlYXIocmVzdWx0KTsKKwkJCQlj b250aW51ZTsKKwkJCX0KKworCQkJaWYgKFBRcmVzdWx0U3RhdHVzKHJlc3VsdCkgPT0gUEdSRVNf VFVQTEVTX09LKQorCQkJeworCQkJCWludCAJcm93cyA9IFBRbnR1cGxlcyhyZXN1bHQpOworCisJ CQkJaWYgKHJvd3MgPT0gMSkKKwkJCQl7CisJCQkJCWNoYXIgICAqcmV0dmFsID0gUFFnZXR2YWx1 ZShyZXN1bHQsIDAsIDApOworCQkJCQlpZiAoKnJldHZhbCA9PSAndCcpCisJCQkJCQlwcmludGYo IiVzIG9uICVzLiVzOiBpbXBvcnRlZFxuIiwgc3RhdCwgc2NoZW1hLCB0YWJsZSk7CisJCQkJCWVs c2UKKwkJCQkJCXByaW50ZigiJXMgb24gJXMuJXM6IGZhaWxlZFxuIiwgc3RhdCwgc2NoZW1hLCB0 YWJsZSk7CisJCQkJfQorCQkJCWVsc2UgaWYgKHJvd3MgPT0gMCkKKwkJCQkJcHJpbnRmKCIlcyBv biAlcy4lczogbm90IGZvdW5kXG4iLCBzdGF0LCBzY2hlbWEsIHRhYmxlKTsKKwkJCQllbHNlCisJ CQkJCXBnX2ZhdGFsKCJpbXBvcnQgZnVuY3Rpb24gbXVzdCByZXR1cm4gMCBvciAxIHJvd3MiKTsK KwkJCX0KKwkJCWVsc2UKKwkJCQlwcmludGYoIiVzIG9uICVzLiVzOiBlcnJvcjogJXNcbiIsIHN0 YXQsIHNjaGVtYSwgdGFibGUsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKworCQkJaWYgKHNjaGVt YSAhPSBOVUxMKQorCQkJCXBmcmVlKHNjaGVtYSk7CisKKwkJCWlmICh0YWJsZSAhPSBOVUxMKQor CQkJCXBmcmVlKHRhYmxlKTsKKworCQkJaWYgKHN0YXQgIT0gTlVMTCkKKwkJCQlwZnJlZShzdGF0 KTsKKworCQkJUFFjbGVhcihyZXN1bHQpOworCQl9CisJfQorCisJZXhpdCgwKTsKK30KKworCitz dGF0aWMgdm9pZAoraGVscChjb25zdCBjaGFyICpwcm9nbmFtZSkKK3sKKwlwcmludGYoXygiJXMg Y2x1c3RlcnMgYWxsIHByZXZpb3VzbHkgY2x1c3RlcmVkIHRhYmxlcyBpbiBhIGRhdGFiYXNlLlxu XG4iKSwgcHJvZ25hbWUpOworCXByaW50ZihfKCJVc2FnZTpcbiIpKTsKKwlwcmludGYoXygiICAl cyBbT1BUSU9OXS4uLiBbREJOQU1FXVxuIiksIHByb2duYW1lKTsKKwlwcmludGYoXygiXG5PcHRp b25zOlxuIikpOworCXByaW50ZihfKCIgIC1kLCAtLWRibmFtZT1EQk5BTUUgICAgICAgZGF0YWJh c2UgdG8gY2x1c3RlclxuIikpOworCXByaW50ZihfKCIgIC1xLCAtLXF1aWV0ICAgICAgICAgICAg ICAgZG9uJ3Qgd3JpdGUgYW55IG1lc3NhZ2VzXG4iKSk7CisJcHJpbnRmKF8oIiAgLXQsIC0tdGFi bGU9VEFCTEUgICAgICAgICBjbHVzdGVyIHNwZWNpZmljIHRhYmxlKHMpIG9ubHlcbiIpKTsKKwlw cmludGYoXygiICAtViwgLS12ZXJzaW9uICAgICAgICAgICAgIG91dHB1dCB2ZXJzaW9uIGluZm9y bWF0aW9uLCB0aGVuIGV4aXRcbiIpKTsKKwlwcmludGYoXygiICAtPywgLS1oZWxwICAgICAgICAg ICAgICAgIHNob3cgdGhpcyBoZWxwLCB0aGVuIGV4aXRcbiIpKTsKKwlwcmludGYoXygiXG5Db25u ZWN0aW9uIG9wdGlvbnM6XG4iKSk7CisJcHJpbnRmKF8oIiAgLWgsIC0taG9zdD1IT1NUTkFNRSAg ICAgICBkYXRhYmFzZSBzZXJ2ZXIgaG9zdCBvciBzb2NrZXQgZGlyZWN0b3J5XG4iKSk7CisJcHJp bnRmKF8oIiAgLXAsIC0tcG9ydD1QT1JUICAgICAgICAgICBkYXRhYmFzZSBzZXJ2ZXIgcG9ydFxu IikpOworCXByaW50ZihfKCIgIC1VLCAtLXVzZXJuYW1lPVVTRVJOQU1FICAgdXNlciBuYW1lIHRv IGNvbm5lY3QgYXNcbiIpKTsKKwlwcmludGYoXygiICAtdywgLS1uby1wYXNzd29yZCAgICAgICAg IG5ldmVyIHByb21wdCBmb3IgcGFzc3dvcmRcbiIpKTsKKwlwcmludGYoXygiICAtVywgLS1wYXNz d29yZCAgICAgICAgICAgIGZvcmNlIHBhc3N3b3JkIHByb21wdFxuIikpOworCXByaW50ZihfKCIg IC0tbWFpbnRlbmFuY2UtZGI9REJOQU1FICAgYWx0ZXJuYXRlIG1haW50ZW5hbmNlIGRhdGFiYXNl XG4iKSk7CisJcHJpbnRmKF8oIlxuUmVhZCB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNRTCBjb21t YW5kIENMVVNURVIgZm9yIGRldGFpbHMuXG4iKSk7CisJcHJpbnRmKF8oIlxuUmVwb3J0IGJ1Z3Mg dG8gPCVzPi5cbiIpLCBQQUNLQUdFX0JVR1JFUE9SVCk7CisJcHJpbnRmKF8oIiVzIGhvbWUgcGFn ZTogPCVzPlxuIiksIFBBQ0tBR0VfTkFNRSwgUEFDS0FHRV9VUkwpOworfQotLSAKMi40My4wCgo= --00000000000049aaa10610620585--