Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pEB7X-000837-2g for pgsql-hackers@arkaria.postgresql.org; Sat, 07 Jan 2023 15:28:32 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pEB7V-0002l8-8C for pgsql-hackers@arkaria.postgresql.org; Sat, 07 Jan 2023 15:28:29 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pEB7T-0002kv-KC for pgsql-hackers@lists.postgresql.org; Sat, 07 Jan 2023 15:28:28 +0000 Received: from mail-yb1-xb2e.google.com ([2607:f8b0:4864:20::b2e]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1pEB7Q-0005zW-6H for pgsql-hackers@lists.postgresql.org; Sat, 07 Jan 2023 15:28:26 +0000 Received: by mail-yb1-xb2e.google.com with SMTP id 194so2503452ybf.8 for ; Sat, 07 Jan 2023 07:28:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=C6nYnOW9a5bCue/l+Bl1aewiXgMLAHlKve/0+oUog08=; b=XPRo6JOEIOlM3i9HNMS2zq/g7DKnkrStTVSmYQdL0CiCefWdbew32D6p6/epSt/jZF T09x0irbqPGeTkEbtb3PlQGgN6hbmW2NBYqpitQPo52YXcqByRjZWh5Ypk19BsMDFEuV rqUEQH9PRjUIv59syY/G0nsS85I6aNKLVB3WP8MArAIcTpqvMte7GRjvL6feYecmIkqo eK4pbJP+hFmOaxo22P6VPt9p/6eDMxkQUOowbDelh4uvKtTjQUbRmdAjrqZMI4cB+/I+ 04vhU1B6i6+osybTalyO80I+1Sjc9v38hJ0bqEp3Ceq/3TDKwpxTtIPLiFzMDE12347I V5Hw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; 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=C6nYnOW9a5bCue/l+Bl1aewiXgMLAHlKve/0+oUog08=; b=PCGavXj/0fMPMF6Umxe33ucymZUgslICocOYTfNTNPso+MqvZWDbw3jVT5+PfLBHa/ ejIjJS6pDeEA2mBY3cvR3i6XJBoVwwToxGd4lCFMppqutA2O/pYEpMIsQf+HvuDuUWoO fOSvOOkq77cMvIKaRD2GM1VdcQzYw2qgJdzxt8H0+0fXEmlbVvNpQnNfScXGDfYDyXim +bi+LUbYMdrBGVWtA1PXxi8CcE5+HiV80UVdaIxZ4DBw+9zrLmlNAOGkXCyw19gPFu04 hpcOx6lEs2ZZBSi56OeoEha3l/k3i8RRePhIXJ1MLNDfgX8rEe2NVE/GtsQ75KNnQ79t CEeA== X-Gm-Message-State: AFqh2kowVJxbUbCHsmIQr22O4ZzXONRb4S1dIEuj0F0plhohZUCUj7ej evZnZnqfgMSWQ4FexYwuffv3zELpBUQFT4Sv+a8= X-Google-Smtp-Source: AMrXdXtdI+G6sgcn/Sw/hamNo4cBVSlv2hYYbnFT0jxEBqnCHA+T2pyno10JY9oI14KmCIA+r7BsNiBWgK+L88DwfoI= X-Received: by 2002:a25:bcd:0:b0:7b3:4433:6c59 with SMTP id 196-20020a250bcd000000b007b344336c59mr1190693ybl.262.1673105303313; Sat, 07 Jan 2023 07:28:23 -0800 (PST) MIME-Version: 1.0 References: <20221006171601.6um4ey5idm4h62vf@alvherre.pgsql> In-Reply-To: From: Zheng Li Date: Sat, 7 Jan 2023 10:28:11 -0500 Message-ID: Subject: Re: Support logical replication of DDLs To: Peter Smith , vignesh C Cc: li jie , Ajin Cherian , Dilip Kumar , Alvaro Herrera , "houzj.fnst@fujitsu.com" , Amit Kapila , Masahiko Sawada , Japin Li , rajesh singarapu , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="00000000000047050c05f1ae2f85" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000047050c05f1ae2f85 Content-Type: text/plain; charset="UTF-8" Hi, I added documentation and changed user interface design in the attached v60 patch set. The patch set addressed comments from Peter in [1]. The motivation for the user interface change is that we want to manage DDL replication feature in stages with fine grained replication levels. For example, we can focus on reviewing and testing table commands first, then other commands. It also make sense to introduce different DDL replication levels from the user perspective as pointed out in [1]. We can add more replication levels along the way. In this patch DDL replication is disabled by default and it can be enabled at different levels using the new PUBLICATION option 'ddl'. This option currently has two levels and are only allowed to be set if the PUBLICATION is FOR ALL TABLES. all: this option enables replication of all supported DDL commands. table: this option enables replication of Table DDL commands which include: -CREATE/ALTER/DROP TABLE -CREATE TABLE AS Example: Create a new publication with all ddl replication enabled: CREATE PUBLICATION pub1 FOR ALL TABLES with (ddl = 'all'); Enable table ddl replication for an existing Publication: ALTER PUBLICATION pub2 SET (ddl = 'table'); Also I break down ddl_deparse.c into two patches: 1.v60-0002-Functions-to-deparse-Table-DDL-commands.patch 2.v60-0003-Support-DDL-deparse-of-the-rest-commands.patch Regards, Zane [1] https://www.postgresql.org/message-id/CAAD30UKX%3DPbojrjU0webYy7Y9mz1HmDTM3dx_JJXpc%2BdXW-EQQ%40mail.gmail.com --00000000000047050c05f1ae2f85 Content-Type: application/octet-stream; name="v60-0004-Introduce-the-test_ddl_deparse_regress-test-module.patch" Content-Disposition: attachment; filename="v60-0004-Introduce-the-test_ddl_deparse_regress-test-module.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lcm3fwef3 RnJvbSAxNmFiMGZlYzVmMDFkYzE0MjEyM2Y4MGE2ODQ3NDA4MmNmY2EzNDU0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IE1vbiwgMTkgRGVjIDIwMjIgMDc6NTc6MjggLTA1MDAKU3ViamVjdDogW1BBVENI IDQvN10gSW50cm9kdWNlIHRoZSB0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MgdGVzdCBtb2R1bGUu CgpUaGlzIHRlc3RpbmcgbW9kdWxlIGFpbXMgdG8gYWNoaWV2ZSB0aGUgZm9sbG93aW5nIGZvdXIg dGVzdGluZyBnb2FscyBmb3IgdGhlIERETCBkZXBhcnNlcjoKMS4gVGVzdCB0aGF0IHRoZSBnZW5l cmF0ZWQgSlNPTiBibG9iIGlzIGV4cGVjdGVkIHVzaW5nIFNRTCB0ZXN0cy4KMi4gVGVzdCB0aGF0 IHRoZSByZS1mb3JtZWQgRERMIGNvbW1hbmQgaXMgZXhwZWN0ZWQgdXNpbmcgU1FMIHRlc3RzLgoz LiBUZXN0IHRoYXQgdGhlIHJlLWZvcm1lZCBEREwgY29tbWFuZCBoYXMgdGhlIHNhbWUgZWZmZWN0 IGFzIHRoZSBvcmlnaW5hbCBjb21tYW5kIGJ5IGNvbXBhcmluZwogICB0aGUgcmVzdWx0cyBvZiBw Z19kdW1wLCB1c2luZyB0aGUgU1FMIHRlc3RzIGluIDEgYW5kIDIuCjQuIFRlc3QgdGhhdCBuZXcg RERMIHN5bnRheCBpcyBoYW5kbGVkIGJ5IHRoZSBEREwgZGVwYXJzZXIgYnkgY2FwdHVyaW5nIGFu ZCBkZXBhcmluZyBEREwgY29tbWFuZHMKICAgcmFuIGJ5IHBnX3JlZ3Jlc3MuCgoxIGFuZCAyIGlz IHRlc3RlZCB3aXRoIFNRTCB0ZXN0cywgYnkgcHJpbnRpbmcgdGhlIGRlcGFyc2VkIEpTT04gYmxv YiBhbmQgdGhlIHJlLWZvcm1lZCBjb21tYW5kLgoKR29hbCAzIGlzIHRlc3RlZCB3aXRoIFRBUCBm cmFtZXdvcmsgaW4gdC8wMDFfY29tcGFyZV9kdW1wZWRfcmVzdWx0cy5wbAoKR29hbCA0IGlzIHRl c3RlZCB3aXRoIFRBUCBmcmFtZXdvcmsgYW5kIHBnX3JlZ3Jlc3MgaW4gMDAyX3JlZ3Jlc3NfdGVz dHMucGwsIHRoZSBleGVjdXRpb24gaXMgY3VycmVudGx5IGNvbW1lbnRlZCBvdXQgYmVjYXVzZSBp dCB3aWxsIGZhaWwgZHVlIHVuaW1wbGVtZW50ZWQgY29tbWFuZHMgaW4gdGhlIERETCBkZXBhcnNl ci4KLS0tCiBzcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgfCAg IDEgKwogLi4uL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy8uZ2l0aWdub3JlICAgICAgIHwgICA0 ICsKIC4uLi9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9NYWtlZmlsZSB8ICA0NCAr KysrCiAuLi4vdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL1JFQURNRS5tZCAgICAgICAgfCAgMjIg KysKIC4uLi9leHBlY3RlZC9hZ2dyZWdhdGUub3V0ICAgICAgICAgICAgICAgICAgICB8ICAgOCAr CiAuLi4vZXhwZWN0ZWQvY3JlYXRlX2V4dGVuc2lvbi5vdXQgICAgICAgICAgICAgfCAgIDYgKwog Li4uL2V4cGVjdGVkL2NyZWF0ZV9zY2hlbWEub3V0ICAgICAgICAgICAgICAgIHwgIDIyICsrCiAu Li4vZXhwZWN0ZWQvY3JlYXRlX3RhYmxlLm91dCAgICAgICAgICAgICAgICAgfCAgMzYgKysrCiAu Li4vZXhwZWN0ZWQvdGVzdF9kZGxfZGVwYXJzZS5vdXQgICAgICAgICAgICAgfCAgMTggKysKIC4u Li90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvbWVzb24uYnVpbGQgICAgICB8ICA0MiArKysrCiAu Li4vc3FsL2FnZ3JlZ2F0ZS5zcWwgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDggKwogLi4u L3NxbC9jcmVhdGVfZXh0ZW5zaW9uLnNxbCAgICAgICAgICAgICAgICAgIHwgICA1ICsKIC4uLi9z cWwvY3JlYXRlX3NjaGVtYS5zcWwgICAgICAgICAgICAgICAgICAgICB8ICAxNiArKwogLi4uL3Nx bC9jcmVhdGVfdGFibGUuc3FsICAgICAgICAgICAgICAgICAgICAgIHwgIDE2ICsrCiAuLi4vc3Fs L3Rlc3RfZGRsX2RlcGFyc2Uuc3FsICAgICAgICAgICAgICAgICAgfCAgMjAgKysKIC4uLi90LzAw MV9jb21wYXJlX2R1bXBlZF9yZXN1bHRzLnBsICAgICAgICAgICB8IDE4MSArKysrKysrKysrKysr KysKIC4uLi90LzAwMl9yZWdyZXNzX3Rlc3RzLnBsICAgICAgICAgICAgICAgICAgICB8IDIwNyAr KysrKysrKysrKysrKysrKysKIC4uLi90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MtLTEuMC5zcWwg ICAgICAgICB8ICAgOSArCiAuLi4vdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLmMgICAgICAgICAg ICAgICAgfCAgNTkgKysrKysKIC4uLi90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MuY29udHJvbCAg ICAgICAgICB8ICAgNCArCiAyMCBmaWxlcyBjaGFuZ2VkLCA3MjggaW5zZXJ0aW9ucygrKQogY3Jl YXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNz Ly5naXRpZ25vcmUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRs X2RlcGFyc2VfcmVncmVzcy9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21v ZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL1JFQURNRS5tZAogY3JlYXRlIG1vZGUgMTAw NjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL2V4cGVjdGVkL2Fn Z3JlZ2F0ZS5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRs X2RlcGFyc2VfcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfZXh0ZW5zaW9uLm91dAogY3JlYXRlIG1v ZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL2V4cGVj dGVkL2NyZWF0ZV9zY2hlbWEub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX3RhYmxlLm91dAogY3Jl YXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNz L2V4cGVjdGVkL3Rlc3RfZGRsX2RlcGFyc2Uub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvbWVzb24uYnVpbGQKIGNyZWF0ZSBt b2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9zcWwv YWdncmVnYXRlLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9k ZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC9jcmVhdGVfZXh0ZW5zaW9uLnNxbAogY3JlYXRlIG1vZGUg MTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC9jcmVh dGVfc2NoZW1hLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9k ZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC9jcmVhdGVfdGFibGUuc3FsCiBjcmVhdGUgbW9kZSAxMDA2 NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL3Rlc3RfZGRs X2RlcGFyc2Uuc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Rk bF9kZXBhcnNlX3JlZ3Jlc3MvdC8wMDFfY29tcGFyZV9kdW1wZWRfcmVzdWx0cy5wbAogY3JlYXRl IG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3Qv MDAyX3JlZ3Jlc3NfdGVzdHMucGwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVz L3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MtLTEuMC5z cWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2Vf cmVncmVzcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNy Yy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3Rlc3RfZGRsX2RlcGFyc2Vf cmVncmVzcy5jb250cm9sCgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZSBi L3NyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUKaW5kZXggYzYyOWNiZTM4My4uYzI3MmM2NGEyMCAx MDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZQorKysgYi9zcmMvdGVzdC9tb2R1 bGVzL01ha2VmaWxlCkBAIC0xOCw2ICsxOCw3IEBAIFNVQkRJUlMgPSBcCiAJCSAgdGVzdF9jb3B5 X2NhbGxiYWNrcyBcCiAJCSAgdGVzdF9jdXN0b21fcm1ncnMgXAogCQkgIHRlc3RfZGRsX2RlcGFy c2UgXAorCQkgIHRlc3RfZGRsX2RlcGFyc2VfcmVncmVzcyBcCiAJCSAgdGVzdF9leHRlbnNpb25z IFwKIAkJICB0ZXN0X2dpbnBvc3RpbmdsaXN0IFwKIAkJICB0ZXN0X2ludGVnZXJzZXQgXApkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvLmdpdGln bm9yZSBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLy5naXRpZ25v cmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNWRjYjNmZjk3MgotLS0g L2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNz Ly5naXRpZ25vcmUKQEAgLTAsMCArMSw0IEBACisjIEdlbmVyYXRlZCBzdWJkaXJlY3Rvcmllcwor L2xvZy8KKy9yZXN1bHRzLworL3RtcF9jaGVjay8KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVs ZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL01ha2VmaWxlIGIvc3JjL3Rlc3QvbW9kdWxlcy90 ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMC4uNWQ1YTllODY1MgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21v ZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL01ha2VmaWxlCkBAIC0wLDAgKzEsNDQgQEAK KyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisjCisjIE1ha2VmaWxlIGZvciBzcmMvdGVzdC9tb2R1bGVzL3Rl c3RfZGRsX2RlcGFyc2VfcmVncmVzcworIworIyBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYt MjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyMgUG9ydGlvbnMgQ29w eXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEK KyMKKyMgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvTWFrZWZpbGUK KyMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworTU9EVUxFUyA9IHRlc3RfZGRsX2RlcGFyc2VfcmVn cmVzcworUEdGSUxFREVTQyA9ICJ0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MgLSByZWdyZXNzaW9u IHRlc3RpbmcgZm9yIERETCBkZXBhcnNpbmciCisKK0VYVEVOU0lPTiA9IHRlc3RfZGRsX2RlcGFy c2VfcmVncmVzcworREFUQSA9IHRlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy0tMS4wLnNxbAorCisj IHRlc3RfZGRsX2RlcGFyc2UgbXVzdCBiZSBmaXJzdAorUkVHUkVTUyA9IHRlc3RfZGRsX2RlcGFy c2UgXAorCWNyZWF0ZV9leHRlbnNpb24gXAorCWNyZWF0ZV9zY2hlbWEgXAorCWNyZWF0ZV90YWJs ZSBcCisJYWdncmVnYXRlCisKK2V4cG9ydCBSRUdSRVNTCisKK0VYVFJBX0lOU1RBTEwgPSBjb250 cmliL3BnX3N0YXRfc3RhdGVtZW50cworCitUQVBfVEVTVFMgPSAxCisKK2lmZGVmIFVTRV9QR1hT CitQR19DT05GSUcgPSBwZ19jb25maWcKK1BHWFMgOj0gJChzaGVsbCAkKFBHX0NPTkZJRykgLS1w Z3hzKQoraW5jbHVkZSAkKFBHWFMpCitlbHNlCitzdWJkaXIgPSBzcmMvdGVzdC9tb2R1bGVzL3Rl c3RfZGRsX2RlcGFyc2VfcmVncmVzcwordG9wX2J1aWxkZGlyID0gLi4vLi4vLi4vLi4KK2luY2x1 ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmlsZS5nbG9iYWwKK2luY2x1ZGUgJCh0b3Bfc3Jj ZGlyKS9jb250cmliL2NvbnRyaWItZ2xvYmFsLm1rCitlbmRpZgorCitSRUdSRVNTX1NITElCPSQo YWJzX3RvcF9idWlsZGRpcikvc3JjL3Rlc3QvcmVncmVzcy9yZWdyZXNzJChETFNVRkZJWCkKK2V4 cG9ydCBSRUdSRVNTX1NITElCCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRs X2RlcGFyc2VfcmVncmVzcy9SRUFETUUubWQgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2Rl cGFyc2VfcmVncmVzcy9SRUFETUUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMC4uY2MyNTE5ODk1YQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVz dF9kZGxfZGVwYXJzZV9yZWdyZXNzL1JFQURNRS5tZApAQCAtMCwwICsxLDIyIEBACisjIFRlc3Rp bmcgaGFybmVzcyBmb3IgRERMIGRlcGFyc2VyCisKKyMjIFRlc3RpbmcgZ29hbHMKKworRERMIERl cGFyc2VyIHByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIGVuY29kZSB0aGUgb3JpZ2luYWwgRERMIGNv bW1hbmQgdG8gYSBKU09OIHN0cmluZywgdGhlbiBkZWNvZGUgaXQgdG8gYSBmdWxseSBzY2hlbWEt cXVhbGlmaWVkIERETCBjb21tYW5kIHdoaWNoIGlzIHN1cHBvc2VkIHRvIGhhdmUgdGhlIHNhbWUg ZWZmZWN0IGFzIHRoZSBvcmlnaW5hbCBjb21tYW5kLiBUaGlzIHRlc3RpbmcgbW9kdWxlIGFpbXMg dG8gYWNoaWV2ZSB0aGUgZm9sbG93aW5nIGZvdXIgdGVzdGluZyBmb3IgdGhlIERETCBkZXBhcnNl cjoKKworMS4gVGVzdCB0aGF0IHRoZSBnZW5lcmF0ZWQgSlNPTiBibG9iIGlzIGV4cGVjdGVkIHVz aW5nIFNRTCB0ZXN0cy4KKzIuIFRlc3QgdGhhdCB0aGUgcmUtZm9ybWVkIERETCBjb21tYW5kIGlz IGV4cGVjdGVkIHVzaW5nIFNRTCB0ZXN0cy4KKzMuIFRlc3QJdGhhdCB0aGUgcmUtZm9ybWVkIERE TCBjb21tYW5kIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMgdGhlIG9yaWdpbmFsIGNvbW1hbmQKKyAg IGJ5IGNvbXBhcmluZwl0aGUgcmVzdWx0cyBvZiBwZ19kdW1wLAl1c2luZyB0aGUgU1FMIHRlc3Rz IGluIDEgYW5kIDIuCis0LiBUZXN0CXRoYXQgbmV3IERETCBzeW50YXggaXMgaGFuZGxlZCBieSB0 aGUgRERMIGRlcGFyc2VyIGJ5IGNhcHR1cmluZyBhbmQgZGVwYXJpbmcKKyAgIERETCBjb21tYW5k cwlyYW4gYnkgcGdfcmVncmVzcy4KKworMSBhbmQgMiBpcyB0ZXN0ZWQgd2l0aCBTUUwgdGVzdHMs IGJ5IG5vdGljaW5nIHRoZSBkZXBhcnNlZCBKU09OIGJsb2IgYW5kIHRoZSByZS1mb3JtZWQgY29t bWFuZC4KKworR29hbCAzIGlzIHRlc3RlZCB3aXRoIFRBUCBmcmFtZXdvcmsgaW4gdC8wMDFfY29t cGFyZV9kdW1wZWRfcmVzdWx0cy5wbAorCitHb2FsIDQgaXMgdGVzdGVkIHdpdGggVEFQIGZyYW1l d29yayBhbmQgcGdfcmVncmVzcyBpbiAwMDJfcmVncmVzc190ZXN0cy5wbAorCisjIyBVc2FnZQor CitSdW4gYG1ha2UgY2hlY2tgLCBpdCB3aWxsIHJ1biB0aGUgU1FMIHRlc3RzIGZpcnN0LCB0aGVu IGl0IHdpbGwgcnVuIHRoZSBUQVAgdGVzdHMuIFRoZSBleGVjdXRpb24gb2YgMDAyX3JlZ3Jlc3Nf dGVzdHMucGwgaXMgY3VycmVudGx5IGNvbW1lbnRlZCBvdXQgYmVjYXVzZSBpdCB3aWxsIGZhaWwg ZHVlIHRvIHVuaW1wbGVtZW50ZWQgY29tbWFuZHMgaW4gdGhlIERETCBkZXBhcnNlci4KZGlmZiAt LWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL2V4cGVjdGVk L2FnZ3JlZ2F0ZS5vdXQgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVz cy9leHBlY3RlZC9hZ2dyZWdhdGUub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAuLmU5Mzk1ZDA3MjgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rl c3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBlY3RlZC9hZ2dyZWdhdGUub3V0CkBAIC0wLDAgKzEs OCBAQAorQ1JFQVRFIEFHR1JFR0FURSBuZXdhdmcoaW50NCkgKAorICAgc2Z1bmMgPSBpbnQ0X2F2 Z19hY2N1bSwgc3R5cGUgPSBfaW50OCwKKyAgIGZpbmFsZnVuYyA9IGludDhfYXZnLAorICAgaW5p dGNvbmQxID0gJ3swLDB9JworKTsKK05PVElDRTogIGRlcGFyc2VkIGpzb246IHsiZm10IjogIkNS RUFURSBBR0dSRUdBVEUgJXtpZGVudGl0eX1EICgle3R5cGVzfXMpICgle2VsZW1zOiwgfXMpIiwg ImVsZW1zIjogW3siZm10IjogIlNGVU5DPSV7cHJvY2VkdXJlfUQiLCAicHJvY2VkdXJlIjogeyJv YmpuYW1lIjogImludDRfYXZnX2FjY3VtIiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9fSwg eyJmbXQiOiAiU1RZUEU9JXt0eXBlfVQiLCAidHlwZSI6IHsidHlwbW9kIjogIiIsICJ0eXBhcnJh eSI6IHRydWUsICJ0eXBlbmFtZSI6ICJpbnQ4IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9 fSwgeyJmbXQiOiAiU1NQQUNFPSV7c3BhY2V9biIsICJwcmVzZW50IjogZmFsc2V9LCB7ImZtdCI6 ICJGSU5BTEZVTkM9JXtwcm9jZWR1cmV9RCIsICJwcm9jZWR1cmUiOiB7Im9iam5hbWUiOiAiaW50 OF9hdmciLCAic2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn19LCB7ImZtdCI6ICJGSU5BTEZVTkNf RVhUUkE9JXt2YWx1ZX1zIiwgInZhbHVlIjogImZhbHNlIn0sIHsiZm10IjogIklOSVRDT05EPSV7 aW5pdHZhbH1MIiwgImluaXR2YWwiOiAiezAsMH0ifSwgeyJmbXQiOiAiTVNGVU5DPSV7cHJvY2Vk dXJlfUQiLCAicHJlc2VudCI6IGZhbHNlfSwgeyJmbXQiOiAiTVNUWVBFPSV7dHlwZX1UIiwgInBy ZXNlbnQiOiBmYWxzZX0sIHsiZm10IjogIk1TU1BBQ0U9JXtzcGFjZX1uIiwgInByZXNlbnQiOiBm YWxzZX0sIHsiZm10IjogIk1JTlZGVU5DPT0le3R5cGV9VCIsICJwcmVzZW50IjogZmFsc2V9LCB7 ImZtdCI6ICJNRklOQUxGVU5DPSV7cHJvY2VkdXJlfUQiLCAicHJlc2VudCI6IGZhbHNlfSwgeyJm bXQiOiAiTUZJTkFMRlVOQ19FWFRSQT0le3ZhbHVlfXMiLCAicHJlc2VudCI6IGZhbHNlfSwgeyJm bXQiOiAiTUlOSVRDT05EPSV7aW5pdHZhbH1MIiwgInByZXNlbnQiOiBmYWxzZX0sIHsiZm10Ijog IkhZUE9USEVUSUNBTD0le3ZhbHVlfXMiLCAicHJlc2VudCI6IGZhbHNlfSwgeyJmbXQiOiAiU09S VE9QPSV7b3BlcmF0b3J9RCIsICJwcmVzZW50IjogZmFsc2V9XSwgInR5cGVzIjogeyJmbXQiOiAi JXtkaXJlY3Q6LCB9cyIsICJkaXJlY3QiOiBbeyJmbXQiOiAiJXttb2RlfXMgJXtuYW1lfXMgJXt0 eXBlfVQiLCAibW9kZSI6ICIiLCAibmFtZSI6ICIiLCAidHlwZSI6IHsidHlwbW9kIjogIiIsICJ0 eXBhcnJheSI6IGZhbHNlLCAidHlwZW5hbWUiOiAiaW50NCIsICJzY2hlbWFuYW1lIjogInBnX2Nh dGFsb2cifX1dfSwgImlkZW50aXR5IjogeyJvYmpuYW1lIjogIm5ld2F2ZyIsICJzY2hlbWFuYW1l IjogInB1YmxpYyJ9fQorTk9USUNFOiAgcmUtZm9ybWVkIGNvbW1hbmQ6IENSRUFURSBBR0dSRUdB VEUgcHVibGljLm5ld2F2ZyAoICBwZ19jYXRhbG9nLmludDQpIChTRlVOQz1wZ19jYXRhbG9nLmlu dDRfYXZnX2FjY3VtLCBTVFlQRT1wZ19jYXRhbG9nLmludDhbXSwgRklOQUxGVU5DPXBnX2NhdGFs b2cuaW50OF9hdmcsIEZJTkFMRlVOQ19FWFRSQT1mYWxzZSwgSU5JVENPTkQ9J3swLDB9JykKK0RS T1AgQUdHUkVHQVRFIG5ld2F2ZyhpbnQ0KTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMv dGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9leHRlbnNpb24ub3V0IGIv c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRl X2V4dGVuc2lvbi5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMDZj Y2M2MmJhOQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVw YXJzZV9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9leHRlbnNpb24ub3V0CkBAIC0wLDAgKzEsNiBA QAorLS0tCistLS0gQ1JFQVRFX0VYVEVOU0lPTgorLS0tCitDUkVBVEUgRVhURU5TSU9OIHBnX3N0 YXRfc3RhdGVtZW50czsKK05PVElDRTogIGRlcGFyc2VkIGpzb246IHsiZm10IjogIkNSRUFURSBF WFRFTlNJT04gJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1lfUkgJXtvcHRpb25zOiB9cyIsICJuYW1l IjogInBnX3N0YXRfc3RhdGVtZW50cyIsICJvcHRpb25zIjogW3siZm10IjogIlNDSEVNQSAle3Nj aGVtYX1JIiwgInR5cGUiOiAic2NoZW1hIiwgInNjaGVtYSI6ICJwdWJsaWMifV0sICJpZl9ub3Rf ZXhpc3RzIjogIiJ9CitOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDogQ1JFQVRFIEVYVEVOU0lP TiAgcGdfc3RhdF9zdGF0ZW1lbnRzIFNDSEVNQSBwdWJsaWMKZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9zY2hlbWEu b3V0IGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvZXhwZWN0ZWQv Y3JlYXRlX3NjaGVtYS5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4u MWUwOWRhNTE3MAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxf ZGVwYXJzZV9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9zY2hlbWEub3V0CkBAIC0wLDAgKzEsMjIg QEAKKy0tCistLSBDUkVBVEVfU0NIRU1BCistLQorQ1JFQVRFIFNDSEVNQSBmb287CitOT1RJQ0U6 ICBkZXBhcnNlZCBqc29uOiB7ImZtdCI6ICJDUkVBVEUgU0NIRU1BICV7aWZfbm90X2V4aXN0c31z ICV7bmFtZX1JICV7YXV0aG9yaXphdGlvbn1zIiwgIm5hbWUiOiAiZm9vIiwgImF1dGhvcml6YXRp b24iOiB7ImZtdCI6ICJBVVRIT1JJWkFUSU9OICV7YXV0aG9yaXphdGlvbl9yb2xlfUkiLCAicHJl c2VudCI6IGZhbHNlLCAiYXV0aG9yaXphdGlvbl9yb2xlIjogbnVsbH0sICJpZl9ub3RfZXhpc3Rz IjogIiJ9CitOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDogQ1JFQVRFIFNDSEVNQSAgZm9vIAor Q1JFQVRFIFNDSEVNQSBJRiBOT1QgRVhJU1RTIGJhcjsKK05PVElDRTogIGRlcGFyc2VkIGpzb246 IHsiZm10IjogIkNSRUFURSBTQ0hFTUEgJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1lfUkgJXthdXRo b3JpemF0aW9ufXMiLCAibmFtZSI6ICJiYXIiLCAiYXV0aG9yaXphdGlvbiI6IHsiZm10IjogIkFV VEhPUklaQVRJT04gJXthdXRob3JpemF0aW9uX3JvbGV9SSIsICJwcmVzZW50IjogZmFsc2UsICJh dXRob3JpemF0aW9uX3JvbGUiOiBudWxsfSwgImlmX25vdF9leGlzdHMiOiAiSUYgTk9UIEVYSVNU UyJ9CitOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDogQ1JFQVRFIFNDSEVNQSBJRiBOT1QgRVhJ U1RTIGJhciAKK0NSRUFURSBTQ0hFTUEgYmF6OworTk9USUNFOiAgZGVwYXJzZWQganNvbjogeyJm bXQiOiAiQ1JFQVRFIFNDSEVNQSAle2lmX25vdF9leGlzdHN9cyAle25hbWV9SSAle2F1dGhvcml6 YXRpb259cyIsICJuYW1lIjogImJheiIsICJhdXRob3JpemF0aW9uIjogeyJmbXQiOiAiQVVUSE9S SVpBVElPTiAle2F1dGhvcml6YXRpb25fcm9sZX1JIiwgInByZXNlbnQiOiBmYWxzZSwgImF1dGhv cml6YXRpb25fcm9sZSI6IG51bGx9LCAiaWZfbm90X2V4aXN0cyI6ICIifQorTk9USUNFOiAgcmUt Zm9ybWVkIGNvbW1hbmQ6IENSRUFURSBTQ0hFTUEgIGJheiAKKy0tIFdpbGwgbm90IGJlIGNyZWF0 ZWQsIGFuZCB3aWxsIG5vdCBiZSBoYW5kbGVkIGJ5IHRoZQorLS0gZXZlbnQgdHJpZ2dlcgorQ1JF QVRFIFNDSEVNQSBJRiBOT1QgRVhJU1RTIGJhejsKK05PVElDRTogIHNjaGVtYSAiYmF6IiBhbHJl YWR5IGV4aXN0cywgc2tpcHBpbmcKK0NSRUFURSBTQ0hFTUEgZWxlbWVudF90ZXN0CisgIENSRUFU RSBUQUJMRSBmb28gKGlkIGludCkKK05PVElDRTogIGRlcGFyc2VkIGpzb246IHsiZm10IjogIkNS RUFURSBTQ0hFTUEgJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1lfUkgJXthdXRob3JpemF0aW9ufXMi LCAibmFtZSI6ICJlbGVtZW50X3Rlc3QiLCAiYXV0aG9yaXphdGlvbiI6IHsiZm10IjogIkFVVEhP UklaQVRJT04gJXthdXRob3JpemF0aW9uX3JvbGV9SSIsICJwcmVzZW50IjogZmFsc2UsICJhdXRo b3JpemF0aW9uX3JvbGUiOiBudWxsfSwgImlmX25vdF9leGlzdHMiOiAiIn0KK05PVElDRTogIHJl LWZvcm1lZCBjb21tYW5kOiBDUkVBVEUgU0NIRU1BICBlbGVtZW50X3Rlc3QgCitOT1RJQ0U6ICBk ZXBhcnNlZCBqc29uOiB7ImZtdCI6ICJDUkVBVEUgJXtwZXJzaXN0ZW5jZX1zIFRBQkxFICV7aWZf bm90X2V4aXN0c31zICV7aWRlbnRpdHl9RCAoJXt0YWJsZV9lbGVtZW50czosIH1zKSAle2luaGVy aXRzfXMgJXt0YWJsZXNwYWNlfXMgJXtvbl9jb21taXR9cyAle3BhcnRpdGlvbl9ieX1zICV7YWNj ZXNzX21ldGhvZH1zICV7d2l0aF9jbGF1c2V9cyIsICJpZGVudGl0eSI6IHsib2JqbmFtZSI6ICJm b28iLCAic2NoZW1hbmFtZSI6ICJlbGVtZW50X3Rlc3QifSwgImluaGVyaXRzIjogeyJmbXQiOiAi SU5IRVJJVFMgKCV7cGFyZW50czosIH1EKSIsICJwYXJlbnRzIjogbnVsbCwgInByZXNlbnQiOiBm YWxzZX0sICJvbl9jb21taXQiOiB7ImZtdCI6ICJPTiBDT01NSVQgJXtvbl9jb21taXRfdmFsdWV9 cyIsICJwcmVzZW50IjogZmFsc2UsICJvbl9jb21taXRfdmFsdWUiOiBudWxsfSwgInRhYmxlc3Bh Y2UiOiB7ImZtdCI6ICJUQUJMRVNQQUNFICV7dGFibGVzcGFjZX1JIiwgInByZXNlbnQiOiBmYWxz ZSwgInRhYmxlc3BhY2UiOiBudWxsfSwgInBlcnNpc3RlbmNlIjogIiIsICJ3aXRoX2NsYXVzZSI6 IHsiZm10IjogIldJVEgiLCAicHJlc2VudCI6IGZhbHNlfSwgInBhcnRpdGlvbl9ieSI6IHsiZm10 IjogIlBBUlRJVElPTiBCWSAle2RlZmluaXRpb259cyIsICJwcmVzZW50IjogZmFsc2UsICJkZWZp bml0aW9uIjogbnVsbH0sICJhY2Nlc3NfbWV0aG9kIjogeyJmbXQiOiAiVVNJTkcgJXthY2Nlc3Nf bWV0aG9kfUkiLCAicHJlc2VudCI6IGZhbHNlLCAiYWNjZXNzX21ldGhvZCI6IG51bGx9LCAiaWZf bm90X2V4aXN0cyI6ICIiLCAidGFibGVfZWxlbWVudHMiOiBbeyJmbXQiOiAiJXtuYW1lfUkgJXtj b2x0eXBlfVQgU1RPUkFHRSAle2NvbHN0b3JhZ2V9cyAle2NvbXByZXNzaW9ufXMgJXtjb2xsYXRp b259cyAle25vdF9udWxsfXMgJXtkZWZhdWx0fXMgJXtnZW5lcmF0ZWRfY29sdW1ufXMiLCAibmFt ZSI6ICJpZCIsICJ0eXBlIjogImNvbHVtbiIsICJjb2x0eXBlIjogeyJ0eXBtb2QiOiAiIiwgInR5 cGFycmF5IjogZmFsc2UsICJ0eXBlbmFtZSI6ICJpbnQ0IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0 YWxvZyJ9LCAiZGVmYXVsdCI6IHsiZm10IjogIkRFRkFVTFQiLCAicHJlc2VudCI6IGZhbHNlfSwg Im5vdF9udWxsIjogIiIsICJjb2xsYXRpb24iOiB7ImZtdCI6ICJDT0xMQVRFIiwgInByZXNlbnQi OiBmYWxzZX0sICJjb2xzdG9yYWdlIjogInBsYWluIiwgImNvbXByZXNzaW9uIjogeyJmbXQiOiAi Q09NUFJFU1NJT04gJXtjb21wcmVzc2lvbl9tZXRob2R9SSIsICJwcmVzZW50IjogZmFsc2UsICJj b21wcmVzc2lvbl9tZXRob2QiOiBudWxsfSwgImdlbmVyYXRlZF9jb2x1bW4iOiB7ImZtdCI6ICJH RU5FUkFURUQgQUxXQVlTIEFTIiwgInByZXNlbnQiOiBmYWxzZX19XX0KK05PVElDRTogIHJlLWZv cm1lZCBjb21tYW5kOiBDUkVBVEUgIFRBQkxFICBlbGVtZW50X3Rlc3QuZm9vIChpZCBwZ19jYXRh bG9nLmludDQgU1RPUkFHRSBwbGFpbiAgICAgKSAgICAgIApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX3RhYmxlLm91 dCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL2V4cGVjdGVkL2Ny ZWF0ZV90YWJsZS5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uOWVl YWExY2NjMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVw YXJzZV9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV90YWJsZS5vdXQKQEAgLTAsMCArMSwzNiBAQAor Q1JFQVRFIFRBQkxFIHNpbXBsZV90YWJsZSgKKyAgICBpZCBpbnQsCisgICAgbmFtZSB2YXJjaGFy KDUpCispOworTk9USUNFOiAgZGVwYXJzZWQganNvbjogeyJmbXQiOiAiQ1JFQVRFICV7cGVyc2lz dGVuY2V9cyBUQUJMRSAle2lmX25vdF9leGlzdHN9cyAle2lkZW50aXR5fUQgKCV7dGFibGVfZWxl bWVudHM6LCB9cykgJXtpbmhlcml0c31zICV7dGFibGVzcGFjZX1zICV7b25fY29tbWl0fXMgJXtw YXJ0aXRpb25fYnl9cyAle2FjY2Vzc19tZXRob2R9cyAle3dpdGhfY2xhdXNlfXMiLCAiaWRlbnRp dHkiOiB7Im9iam5hbWUiOiAic2ltcGxlX3RhYmxlIiwgInNjaGVtYW5hbWUiOiAicHVibGljIn0s ICJpbmhlcml0cyI6IHsiZm10IjogIklOSEVSSVRTICgle3BhcmVudHM6LCB9RCkiLCAicGFyZW50 cyI6IG51bGwsICJwcmVzZW50IjogZmFsc2V9LCAib25fY29tbWl0IjogeyJmbXQiOiAiT04gQ09N TUlUICV7b25fY29tbWl0X3ZhbHVlfXMiLCAicHJlc2VudCI6IGZhbHNlLCAib25fY29tbWl0X3Zh bHVlIjogbnVsbH0sICJ0YWJsZXNwYWNlIjogeyJmbXQiOiAiVEFCTEVTUEFDRSAle3RhYmxlc3Bh Y2V9SSIsICJwcmVzZW50IjogZmFsc2UsICJ0YWJsZXNwYWNlIjogbnVsbH0sICJwZXJzaXN0ZW5j ZSI6ICIiLCAid2l0aF9jbGF1c2UiOiB7ImZtdCI6ICJXSVRIIiwgInByZXNlbnQiOiBmYWxzZX0s ICJwYXJ0aXRpb25fYnkiOiB7ImZtdCI6ICJQQVJUSVRJT04gQlkgJXtkZWZpbml0aW9ufXMiLCAi cHJlc2VudCI6IGZhbHNlLCAiZGVmaW5pdGlvbiI6IG51bGx9LCAiYWNjZXNzX21ldGhvZCI6IHsi Zm10IjogIlVTSU5HICV7YWNjZXNzX21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImFjY2Vz c19tZXRob2QiOiBudWxsfSwgImlmX25vdF9leGlzdHMiOiAiIiwgInRhYmxlX2VsZW1lbnRzIjog W3siZm10IjogIiV7bmFtZX1JICV7Y29sdHlwZX1UIFNUT1JBR0UgJXtjb2xzdG9yYWdlfXMgJXtj b21wcmVzc2lvbn1zICV7Y29sbGF0aW9ufXMgJXtub3RfbnVsbH1zICV7ZGVmYXVsdH1zICV7Z2Vu ZXJhdGVkX2NvbHVtbn1zIiwgIm5hbWUiOiAiaWQiLCAidHlwZSI6ICJjb2x1bW4iLCAiY29sdHlw ZSI6IHsidHlwbW9kIjogIiIsICJ0eXBhcnJheSI6IGZhbHNlLCAidHlwZW5hbWUiOiAiaW50NCIs ICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2cifSwgImRlZmF1bHQiOiB7ImZtdCI6ICJERUZBVUxU IiwgInByZXNlbnQiOiBmYWxzZX0sICJub3RfbnVsbCI6ICIiLCAiY29sbGF0aW9uIjogeyJmbXQi OiAiQ09MTEFURSIsICJwcmVzZW50IjogZmFsc2V9LCAiY29sc3RvcmFnZSI6ICJwbGFpbiIsICJj b21wcmVzc2lvbiI6IHsiZm10IjogIkNPTVBSRVNTSU9OICV7Y29tcHJlc3Npb25fbWV0aG9kfUki LCAicHJlc2VudCI6IGZhbHNlLCAiY29tcHJlc3Npb25fbWV0aG9kIjogbnVsbH0sICJnZW5lcmF0 ZWRfY29sdW1uIjogeyJmbXQiOiAiR0VORVJBVEVEIEFMV0FZUyBBUyIsICJwcmVzZW50IjogZmFs c2V9fSwgeyJmbXQiOiAiJXtuYW1lfUkgJXtjb2x0eXBlfVQgU1RPUkFHRSAle2NvbHN0b3JhZ2V9 cyAle2NvbXByZXNzaW9ufXMgJXtjb2xsYXRpb259cyAle25vdF9udWxsfXMgJXtkZWZhdWx0fXMg JXtnZW5lcmF0ZWRfY29sdW1ufXMiLCAibmFtZSI6ICJuYW1lIiwgInR5cGUiOiAiY29sdW1uIiwg ImNvbHR5cGUiOiB7InR5cG1vZCI6ICIoNSkiLCAidHlwYXJyYXkiOiBmYWxzZSwgInR5cGVuYW1l IjogInZhcmNoYXIiLCAic2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn0sICJkZWZhdWx0IjogeyJm bXQiOiAiREVGQVVMVCIsICJwcmVzZW50IjogZmFsc2V9LCAibm90X251bGwiOiAiIiwgImNvbGxh dGlvbiI6IHsiZm10IjogIkNPTExBVEUgJXtuYW1lfUQiLCAibmFtZSI6IHsib2JqbmFtZSI6ICJk ZWZhdWx0IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9fSwgImNvbHN0b3JhZ2UiOiAiZXh0 ZW5kZWQiLCAiY29tcHJlc3Npb24iOiB7ImZtdCI6ICJDT01QUkVTU0lPTiAle2NvbXByZXNzaW9u X21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImNvbXByZXNzaW9uX21ldGhvZCI6IG51bGx9 LCAiZ2VuZXJhdGVkX2NvbHVtbiI6IHsiZm10IjogIkdFTkVSQVRFRCBBTFdBWVMgQVMiLCAicHJl c2VudCI6IGZhbHNlfX1dfQorTk9USUNFOiAgcmUtZm9ybWVkIGNvbW1hbmQ6IENSRUFURSAgVEFC TEUgIHB1YmxpYy5zaW1wbGVfdGFibGUgKGlkIHBnX2NhdGFsb2cuaW50NCBTVE9SQUdFIHBsYWlu ICAgICAsIG5hbWUgcGdfY2F0YWxvZy4idmFyY2hhciIoNSkgU1RPUkFHRSBleHRlbmRlZCAgQ09M TEFURSBwZ19jYXRhbG9nLiJkZWZhdWx0IiAgICkgICAgICAKKy0tIFRlc3QgQ1JFQVRFIElOREVY IHdpdGggYW4gSU5DTFVERSBDTEFVU0UKK0NSRUFURSBVTklRVUUgSU5ERVggY292ZXJpbmdfaW5k ZXggb24gc2ltcGxlX3RhYmxlIChpZCkgSU5DTFVERSAobmFtZSk7CitOT1RJQ0U6ICBkZXBhcnNl ZCBqc29uOiB7ImZtdCI6ICJDUkVBVEUgJXt1bmlxdWV9cyBJTkRFWCAle2NvbmN1cnJlbnRseX1z ICV7aWZfbm90X2V4aXN0c31zICV7bmFtZX1JIE9OICV7dGFibGV9RCBVU0lORyAle2luZGV4X2Ft fXMgJXtkZWZpbml0aW9ufXMgJXt3aXRofXMgJXt0YWJsZXNwYWNlfXMgJXt3aGVyZV9jbGF1c2V9 cyIsICJuYW1lIjogImNvdmVyaW5nX2luZGV4IiwgIndpdGgiOiB7ImZtdCI6ICJXSVRIIiwgInBy ZXNlbnQiOiBmYWxzZX0sICJ0YWJsZSI6IHsib2JqbmFtZSI6ICJzaW1wbGVfdGFibGUiLCAic2No ZW1hbmFtZSI6ICJwdWJsaWMifSwgInVuaXF1ZSI6ICJVTklRVUUiLCAiaW5kZXhfYW0iOiAiYnRy ZWUiLCAiZGVmaW5pdGlvbiI6ICIoaWQgcGdfY2F0YWxvZy5pbnQ0X29wcykgSU5DTFVERSAobmFt ZSkiLCAidGFibGVzcGFjZSI6IHsiZm10IjogIlRBQkxFU1BBQ0UiLCAicHJlc2VudCI6IGZhbHNl fSwgImNvbmN1cnJlbnRseSI6ICIiLCAid2hlcmVfY2xhdXNlIjogeyJmbXQiOiAiV0hFUkUiLCAi cHJlc2VudCI6IGZhbHNlfSwgImlmX25vdF9leGlzdHMiOiAiIn0KK05PVElDRTogIHJlLWZvcm1l ZCBjb21tYW5kOiBDUkVBVEUgVU5JUVVFIElOREVYICAgY292ZXJpbmdfaW5kZXggT04gcHVibGlj LnNpbXBsZV90YWJsZSBVU0lORyBidHJlZSAoaWQgcGdfY2F0YWxvZy5pbnQ0X29wcykgSU5DTFVE RSAobmFtZSkgICAKKy0tIFRlc3QgVGFibGVMaWtlQ2xhdXNlIGlzIGhhbmRsZWQgcHJvcGVybHkK K0NSRUFURSBUQUJMRSBjdGx0MSAoYSB0ZXh0IENIRUNLIChsZW5ndGgoYSkgPiAyKSBQUklNQVJZ IEtFWSwgYiB0ZXh0KTsKK05PVElDRTogIGRlcGFyc2VkIGpzb246IHsiZm10IjogIkNSRUFURSAl e3BlcnNpc3RlbmNlfXMgVEFCTEUgJXtpZl9ub3RfZXhpc3RzfXMgJXtpZGVudGl0eX1EICgle3Rh YmxlX2VsZW1lbnRzOiwgfXMpICV7aW5oZXJpdHN9cyAle3RhYmxlc3BhY2V9cyAle29uX2NvbW1p dH1zICV7cGFydGl0aW9uX2J5fXMgJXthY2Nlc3NfbWV0aG9kfXMgJXt3aXRoX2NsYXVzZX1zIiwg ImlkZW50aXR5IjogeyJvYmpuYW1lIjogImN0bHQxIiwgInNjaGVtYW5hbWUiOiAicHVibGljIn0s ICJpbmhlcml0cyI6IHsiZm10IjogIklOSEVSSVRTICgle3BhcmVudHM6LCB9RCkiLCAicGFyZW50 cyI6IG51bGwsICJwcmVzZW50IjogZmFsc2V9LCAib25fY29tbWl0IjogeyJmbXQiOiAiT04gQ09N TUlUICV7b25fY29tbWl0X3ZhbHVlfXMiLCAicHJlc2VudCI6IGZhbHNlLCAib25fY29tbWl0X3Zh bHVlIjogbnVsbH0sICJ0YWJsZXNwYWNlIjogeyJmbXQiOiAiVEFCTEVTUEFDRSAle3RhYmxlc3Bh Y2V9SSIsICJwcmVzZW50IjogZmFsc2UsICJ0YWJsZXNwYWNlIjogbnVsbH0sICJwZXJzaXN0ZW5j ZSI6ICIiLCAid2l0aF9jbGF1c2UiOiB7ImZtdCI6ICJXSVRIIiwgInByZXNlbnQiOiBmYWxzZX0s ICJwYXJ0aXRpb25fYnkiOiB7ImZtdCI6ICJQQVJUSVRJT04gQlkgJXtkZWZpbml0aW9ufXMiLCAi cHJlc2VudCI6IGZhbHNlLCAiZGVmaW5pdGlvbiI6IG51bGx9LCAiYWNjZXNzX21ldGhvZCI6IHsi Zm10IjogIlVTSU5HICV7YWNjZXNzX21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImFjY2Vz c19tZXRob2QiOiBudWxsfSwgImlmX25vdF9leGlzdHMiOiAiIiwgInRhYmxlX2VsZW1lbnRzIjog W3siZm10IjogIiV7bmFtZX1JICV7Y29sdHlwZX1UIFNUT1JBR0UgJXtjb2xzdG9yYWdlfXMgJXtj b21wcmVzc2lvbn1zICV7Y29sbGF0aW9ufXMgJXtub3RfbnVsbH1zICV7ZGVmYXVsdH1zICV7Z2Vu ZXJhdGVkX2NvbHVtbn1zIiwgIm5hbWUiOiAiYSIsICJ0eXBlIjogImNvbHVtbiIsICJjb2x0eXBl IjogeyJ0eXBtb2QiOiAiIiwgInR5cGFycmF5IjogZmFsc2UsICJ0eXBlbmFtZSI6ICJ0ZXh0Iiwg InNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9LCAiZGVmYXVsdCI6IHsiZm10IjogIkRFRkFVTFQi LCAicHJlc2VudCI6IGZhbHNlfSwgIm5vdF9udWxsIjogIiIsICJjb2xsYXRpb24iOiB7ImZtdCI6 ICJDT0xMQVRFICV7bmFtZX1EIiwgIm5hbWUiOiB7Im9iam5hbWUiOiAiZGVmYXVsdCIsICJzY2hl bWFuYW1lIjogInBnX2NhdGFsb2cifX0sICJjb2xzdG9yYWdlIjogImV4dGVuZGVkIiwgImNvbXBy ZXNzaW9uIjogeyJmbXQiOiAiQ09NUFJFU1NJT04gJXtjb21wcmVzc2lvbl9tZXRob2R9SSIsICJw cmVzZW50IjogZmFsc2UsICJjb21wcmVzc2lvbl9tZXRob2QiOiBudWxsfSwgImdlbmVyYXRlZF9j b2x1bW4iOiB7ImZtdCI6ICJHRU5FUkFURUQgQUxXQVlTIEFTIiwgInByZXNlbnQiOiBmYWxzZX19 LCB7ImZtdCI6ICIle25hbWV9SSAle2NvbHR5cGV9VCBTVE9SQUdFICV7Y29sc3RvcmFnZX1zICV7 Y29tcHJlc3Npb259cyAle2NvbGxhdGlvbn1zICV7bm90X251bGx9cyAle2RlZmF1bHR9cyAle2dl bmVyYXRlZF9jb2x1bW59cyIsICJuYW1lIjogImIiLCAidHlwZSI6ICJjb2x1bW4iLCAiY29sdHlw ZSI6IHsidHlwbW9kIjogIiIsICJ0eXBhcnJheSI6IGZhbHNlLCAidHlwZW5hbWUiOiAidGV4dCIs ICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2cifSwgImRlZmF1bHQiOiB7ImZtdCI6ICJERUZBVUxU IiwgInByZXNlbnQiOiBmYWxzZX0sICJub3RfbnVsbCI6ICIiLCAiY29sbGF0aW9uIjogeyJmbXQi OiAiQ09MTEFURSAle25hbWV9RCIsICJuYW1lIjogeyJvYmpuYW1lIjogImRlZmF1bHQiLCAic2No ZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn19LCAiY29sc3RvcmFnZSI6ICJleHRlbmRlZCIsICJjb21w cmVzc2lvbiI6IHsiZm10IjogIkNPTVBSRVNTSU9OICV7Y29tcHJlc3Npb25fbWV0aG9kfUkiLCAi cHJlc2VudCI6IGZhbHNlLCAiY29tcHJlc3Npb25fbWV0aG9kIjogbnVsbH0sICJnZW5lcmF0ZWRf Y29sdW1uIjogeyJmbXQiOiAiR0VORVJBVEVEIEFMV0FZUyBBUyIsICJwcmVzZW50IjogZmFsc2V9 fSwgeyJmbXQiOiAiQ09OU1RSQUlOVCAle25hbWV9SSAle2RlZmluaXRpb259cyIsICJuYW1lIjog ImN0bHQxX2FfY2hlY2siLCAidHlwZSI6ICJjb25zdHJhaW50IiwgImNvbnR5cGUiOiAiY2hlY2si LCAiZGVmaW5pdGlvbiI6ICJDSEVDSyAoKHBnX2NhdGFsb2cubGVuZ3RoKGEpIE9QRVJBVE9SKHBn X2NhdGFsb2cuPikgMikpIn0sIHsiZm10IjogIkNPTlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZpbml0 aW9ufXMiLCAibmFtZSI6ICJjdGx0MV9wa2V5IiwgInR5cGUiOiAiY29uc3RyYWludCIsICJjb250 eXBlIjogInByaW1hcnkga2V5IiwgImRlZmluaXRpb24iOiAiUFJJTUFSWSBLRVkgKGEpIn1dfQor Tk9USUNFOiAgcmUtZm9ybWVkIGNvbW1hbmQ6IENSRUFURSAgVEFCTEUgIHB1YmxpYy5jdGx0MSAo YSBwZ19jYXRhbG9nLnRleHQgU1RPUkFHRSBleHRlbmRlZCAgQ09MTEFURSBwZ19jYXRhbG9nLiJk ZWZhdWx0IiAgICwgYiBwZ19jYXRhbG9nLnRleHQgU1RPUkFHRSBleHRlbmRlZCAgQ09MTEFURSBw Z19jYXRhbG9nLiJkZWZhdWx0IiAgICwgQ09OU1RSQUlOVCBjdGx0MV9hX2NoZWNrIENIRUNLICgo cGdfY2F0YWxvZy5sZW5ndGgoYSkgT1BFUkFUT1IocGdfY2F0YWxvZy4+KSAyKSksIENPTlNUUkFJ TlQgY3RsdDFfcGtleSBQUklNQVJZIEtFWSAoYSkpICAgICAgCitOT1RJQ0U6ICBkZXBhcnNlZCBq c29uOiA8TlVMTD4KK05PVElDRTogIHJlLWZvcm1lZCBjb21tYW5kOiA8TlVMTD4KK0FMVEVSIFRB QkxFIGN0bHQxIEFMVEVSIENPTFVNTiBhIFNFVCBTVE9SQUdFIE1BSU47CitOT1RJQ0U6ICBkZXBh cnNlZCBqc29uOiB7ImZtdCI6ICJBTFRFUiAle29ianR5cGV9cyAle2lkZW50aXR5fUQgJXtzdWJj bWRzOiwgfXMiLCAib2JqdHlwZSI6ICJUQUJMRSIsICJzdWJjbWRzIjogW3siZm10IjogIkFMVEVS IENPTFVNTiAle2NvbHVtbn1JIFNFVCBTVE9SQUdFICV7c3RvcmFnZX1zIiwgInR5cGUiOiAic2V0 IHN0b3JhZ2UiLCAiY29sdW1uIjogImEiLCAic3RvcmFnZSI6ICJtYWluIn1dLCAiaWRlbnRpdHki OiB7Im9iam5hbWUiOiAiY3RsdDEiLCAic2NoZW1hbmFtZSI6ICJwdWJsaWMifX0KK05PVElDRTog IHJlLWZvcm1lZCBjb21tYW5kOiBBTFRFUiBUQUJMRSBwdWJsaWMuY3RsdDEgQUxURVIgQ09MVU1O IGEgU0VUIFNUT1JBR0UgbWFpbgorQUxURVIgVEFCTEUgY3RsdDEgQUxURVIgQ09MVU1OIGIgU0VU IFNUT1JBR0UgRVhURVJOQUw7CitOT1RJQ0U6ICBkZXBhcnNlZCBqc29uOiB7ImZtdCI6ICJBTFRF UiAle29ianR5cGV9cyAle2lkZW50aXR5fUQgJXtzdWJjbWRzOiwgfXMiLCAib2JqdHlwZSI6ICJU QUJMRSIsICJzdWJjbWRzIjogW3siZm10IjogIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFNFVCBT VE9SQUdFICV7c3RvcmFnZX1zIiwgInR5cGUiOiAic2V0IHN0b3JhZ2UiLCAiY29sdW1uIjogImIi LCAic3RvcmFnZSI6ICJleHRlcm5hbCJ9XSwgImlkZW50aXR5IjogeyJvYmpuYW1lIjogImN0bHQx IiwgInNjaGVtYW5hbWUiOiAicHVibGljIn19CitOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDog QUxURVIgVEFCTEUgcHVibGljLmN0bHQxIEFMVEVSIENPTFVNTiBiIFNFVCBTVE9SQUdFIGV4dGVy bmFsCistLSBUZXN0IGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQgaXMgaGFuZGxlZCBpbiBhIGZvbGxv d2luZyBBTFRFUiBUQUJMRSBBREQgQ09OU1RSQUlOVCBGT1JFSUdOIEtFWSBSRUZFUkVOQ0VTIHN1 YmNvbW1hbmQKK0NSRUFURSBUQUJMRSBwcm9kdWN0IChpZCBpbnQgUFJJTUFSWSBLRVksIG5hbWUg dGV4dCk7CitOT1RJQ0U6ICBkZXBhcnNlZCBqc29uOiB7ImZtdCI6ICJDUkVBVEUgJXtwZXJzaXN0 ZW5jZX1zIFRBQkxFICV7aWZfbm90X2V4aXN0c31zICV7aWRlbnRpdHl9RCAoJXt0YWJsZV9lbGVt ZW50czosIH1zKSAle2luaGVyaXRzfXMgJXt0YWJsZXNwYWNlfXMgJXtvbl9jb21taXR9cyAle3Bh cnRpdGlvbl9ieX1zICV7YWNjZXNzX21ldGhvZH1zICV7d2l0aF9jbGF1c2V9cyIsICJpZGVudGl0 eSI6IHsib2JqbmFtZSI6ICJwcm9kdWN0IiwgInNjaGVtYW5hbWUiOiAicHVibGljIn0sICJpbmhl cml0cyI6IHsiZm10IjogIklOSEVSSVRTICgle3BhcmVudHM6LCB9RCkiLCAicGFyZW50cyI6IG51 bGwsICJwcmVzZW50IjogZmFsc2V9LCAib25fY29tbWl0IjogeyJmbXQiOiAiT04gQ09NTUlUICV7 b25fY29tbWl0X3ZhbHVlfXMiLCAicHJlc2VudCI6IGZhbHNlLCAib25fY29tbWl0X3ZhbHVlIjog bnVsbH0sICJ0YWJsZXNwYWNlIjogeyJmbXQiOiAiVEFCTEVTUEFDRSAle3RhYmxlc3BhY2V9SSIs ICJwcmVzZW50IjogZmFsc2UsICJ0YWJsZXNwYWNlIjogbnVsbH0sICJwZXJzaXN0ZW5jZSI6ICIi LCAid2l0aF9jbGF1c2UiOiB7ImZtdCI6ICJXSVRIIiwgInByZXNlbnQiOiBmYWxzZX0sICJwYXJ0 aXRpb25fYnkiOiB7ImZtdCI6ICJQQVJUSVRJT04gQlkgJXtkZWZpbml0aW9ufXMiLCAicHJlc2Vu dCI6IGZhbHNlLCAiZGVmaW5pdGlvbiI6IG51bGx9LCAiYWNjZXNzX21ldGhvZCI6IHsiZm10Ijog IlVTSU5HICV7YWNjZXNzX21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImFjY2Vzc19tZXRo b2QiOiBudWxsfSwgImlmX25vdF9leGlzdHMiOiAiIiwgInRhYmxlX2VsZW1lbnRzIjogW3siZm10 IjogIiV7bmFtZX1JICV7Y29sdHlwZX1UIFNUT1JBR0UgJXtjb2xzdG9yYWdlfXMgJXtjb21wcmVz c2lvbn1zICV7Y29sbGF0aW9ufXMgJXtub3RfbnVsbH1zICV7ZGVmYXVsdH1zICV7Z2VuZXJhdGVk X2NvbHVtbn1zIiwgIm5hbWUiOiAiaWQiLCAidHlwZSI6ICJjb2x1bW4iLCAiY29sdHlwZSI6IHsi dHlwbW9kIjogIiIsICJ0eXBhcnJheSI6IGZhbHNlLCAidHlwZW5hbWUiOiAiaW50NCIsICJzY2hl bWFuYW1lIjogInBnX2NhdGFsb2cifSwgImRlZmF1bHQiOiB7ImZtdCI6ICJERUZBVUxUIiwgInBy ZXNlbnQiOiBmYWxzZX0sICJub3RfbnVsbCI6ICIiLCAiY29sbGF0aW9uIjogeyJmbXQiOiAiQ09M TEFURSIsICJwcmVzZW50IjogZmFsc2V9LCAiY29sc3RvcmFnZSI6ICJwbGFpbiIsICJjb21wcmVz c2lvbiI6IHsiZm10IjogIkNPTVBSRVNTSU9OICV7Y29tcHJlc3Npb25fbWV0aG9kfUkiLCAicHJl c2VudCI6IGZhbHNlLCAiY29tcHJlc3Npb25fbWV0aG9kIjogbnVsbH0sICJnZW5lcmF0ZWRfY29s dW1uIjogeyJmbXQiOiAiR0VORVJBVEVEIEFMV0FZUyBBUyIsICJwcmVzZW50IjogZmFsc2V9fSwg eyJmbXQiOiAiJXtuYW1lfUkgJXtjb2x0eXBlfVQgU1RPUkFHRSAle2NvbHN0b3JhZ2V9cyAle2Nv bXByZXNzaW9ufXMgJXtjb2xsYXRpb259cyAle25vdF9udWxsfXMgJXtkZWZhdWx0fXMgJXtnZW5l cmF0ZWRfY29sdW1ufXMiLCAibmFtZSI6ICJuYW1lIiwgInR5cGUiOiAiY29sdW1uIiwgImNvbHR5 cGUiOiB7InR5cG1vZCI6ICIiLCAidHlwYXJyYXkiOiBmYWxzZSwgInR5cGVuYW1lIjogInRleHQi LCAic2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn0sICJkZWZhdWx0IjogeyJmbXQiOiAiREVGQVVM VCIsICJwcmVzZW50IjogZmFsc2V9LCAibm90X251bGwiOiAiIiwgImNvbGxhdGlvbiI6IHsiZm10 IjogIkNPTExBVEUgJXtuYW1lfUQiLCAibmFtZSI6IHsib2JqbmFtZSI6ICJkZWZhdWx0IiwgInNj aGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9fSwgImNvbHN0b3JhZ2UiOiAiZXh0ZW5kZWQiLCAiY29t cHJlc3Npb24iOiB7ImZtdCI6ICJDT01QUkVTU0lPTiAle2NvbXByZXNzaW9uX21ldGhvZH1JIiwg InByZXNlbnQiOiBmYWxzZSwgImNvbXByZXNzaW9uX21ldGhvZCI6IG51bGx9LCAiZ2VuZXJhdGVk X2NvbHVtbiI6IHsiZm10IjogIkdFTkVSQVRFRCBBTFdBWVMgQVMiLCAicHJlc2VudCI6IGZhbHNl fX0sIHsiZm10IjogIkNPTlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZpbml0aW9ufXMiLCAibmFtZSI6 ICJwcm9kdWN0X3BrZXkiLCAidHlwZSI6ICJjb25zdHJhaW50IiwgImNvbnR5cGUiOiAicHJpbWFy eSBrZXkiLCAiZGVmaW5pdGlvbiI6ICJQUklNQVJZIEtFWSAoaWQpIn1dfQorTk9USUNFOiAgcmUt Zm9ybWVkIGNvbW1hbmQ6IENSRUFURSAgVEFCTEUgIHB1YmxpYy5wcm9kdWN0IChpZCBwZ19jYXRh bG9nLmludDQgU1RPUkFHRSBwbGFpbiAgICAgLCBuYW1lIHBnX2NhdGFsb2cudGV4dCBTVE9SQUdF IGV4dGVuZGVkICBDT0xMQVRFIHBnX2NhdGFsb2cuImRlZmF1bHQiICAgLCBDT05TVFJBSU5UIHBy b2R1Y3RfcGtleSBQUklNQVJZIEtFWSAoaWQpKSAgICAgIAorTk9USUNFOiAgZGVwYXJzZWQganNv bjogPE5VTEw+CitOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDogPE5VTEw+CitDUkVBVEUgVEFC TEUgb3JkZXJzIChvcmRlcl9pZCBpbnQgUFJJTUFSWSBLRVksIHByb2R1Y3RfaWQgaW50CitSRUZF UkVOQ0VTIHByb2R1Y3QgKGlkKSk7CitOT1RJQ0U6ICBkZXBhcnNlZCBqc29uOiB7ImZtdCI6ICJD UkVBVEUgJXtwZXJzaXN0ZW5jZX1zIFRBQkxFICV7aWZfbm90X2V4aXN0c31zICV7aWRlbnRpdHl9 RCAoJXt0YWJsZV9lbGVtZW50czosIH1zKSAle2luaGVyaXRzfXMgJXt0YWJsZXNwYWNlfXMgJXtv bl9jb21taXR9cyAle3BhcnRpdGlvbl9ieX1zICV7YWNjZXNzX21ldGhvZH1zICV7d2l0aF9jbGF1 c2V9cyIsICJpZGVudGl0eSI6IHsib2JqbmFtZSI6ICJvcmRlcnMiLCAic2NoZW1hbmFtZSI6ICJw dWJsaWMifSwgImluaGVyaXRzIjogeyJmbXQiOiAiSU5IRVJJVFMgKCV7cGFyZW50czosIH1EKSIs ICJwYXJlbnRzIjogbnVsbCwgInByZXNlbnQiOiBmYWxzZX0sICJvbl9jb21taXQiOiB7ImZtdCI6 ICJPTiBDT01NSVQgJXtvbl9jb21taXRfdmFsdWV9cyIsICJwcmVzZW50IjogZmFsc2UsICJvbl9j b21taXRfdmFsdWUiOiBudWxsfSwgInRhYmxlc3BhY2UiOiB7ImZtdCI6ICJUQUJMRVNQQUNFICV7 dGFibGVzcGFjZX1JIiwgInByZXNlbnQiOiBmYWxzZSwgInRhYmxlc3BhY2UiOiBudWxsfSwgInBl cnNpc3RlbmNlIjogIiIsICJ3aXRoX2NsYXVzZSI6IHsiZm10IjogIldJVEgiLCAicHJlc2VudCI6 IGZhbHNlfSwgInBhcnRpdGlvbl9ieSI6IHsiZm10IjogIlBBUlRJVElPTiBCWSAle2RlZmluaXRp b259cyIsICJwcmVzZW50IjogZmFsc2UsICJkZWZpbml0aW9uIjogbnVsbH0sICJhY2Nlc3NfbWV0 aG9kIjogeyJmbXQiOiAiVVNJTkcgJXthY2Nlc3NfbWV0aG9kfUkiLCAicHJlc2VudCI6IGZhbHNl LCAiYWNjZXNzX21ldGhvZCI6IG51bGx9LCAiaWZfbm90X2V4aXN0cyI6ICIiLCAidGFibGVfZWxl bWVudHMiOiBbeyJmbXQiOiAiJXtuYW1lfUkgJXtjb2x0eXBlfVQgU1RPUkFHRSAle2NvbHN0b3Jh Z2V9cyAle2NvbXByZXNzaW9ufXMgJXtjb2xsYXRpb259cyAle25vdF9udWxsfXMgJXtkZWZhdWx0 fXMgJXtnZW5lcmF0ZWRfY29sdW1ufXMiLCAibmFtZSI6ICJvcmRlcl9pZCIsICJ0eXBlIjogImNv bHVtbiIsICJjb2x0eXBlIjogeyJ0eXBtb2QiOiAiIiwgInR5cGFycmF5IjogZmFsc2UsICJ0eXBl bmFtZSI6ICJpbnQ0IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9LCAiZGVmYXVsdCI6IHsi Zm10IjogIkRFRkFVTFQiLCAicHJlc2VudCI6IGZhbHNlfSwgIm5vdF9udWxsIjogIiIsICJjb2xs YXRpb24iOiB7ImZtdCI6ICJDT0xMQVRFIiwgInByZXNlbnQiOiBmYWxzZX0sICJjb2xzdG9yYWdl IjogInBsYWluIiwgImNvbXByZXNzaW9uIjogeyJmbXQiOiAiQ09NUFJFU1NJT04gJXtjb21wcmVz c2lvbl9tZXRob2R9SSIsICJwcmVzZW50IjogZmFsc2UsICJjb21wcmVzc2lvbl9tZXRob2QiOiBu dWxsfSwgImdlbmVyYXRlZF9jb2x1bW4iOiB7ImZtdCI6ICJHRU5FUkFURUQgQUxXQVlTIEFTIiwg InByZXNlbnQiOiBmYWxzZX19LCB7ImZtdCI6ICIle25hbWV9SSAle2NvbHR5cGV9VCBTVE9SQUdF ICV7Y29sc3RvcmFnZX1zICV7Y29tcHJlc3Npb259cyAle2NvbGxhdGlvbn1zICV7bm90X251bGx9 cyAle2RlZmF1bHR9cyAle2dlbmVyYXRlZF9jb2x1bW59cyIsICJuYW1lIjogInByb2R1Y3RfaWQi LCAidHlwZSI6ICJjb2x1bW4iLCAiY29sdHlwZSI6IHsidHlwbW9kIjogIiIsICJ0eXBhcnJheSI6 IGZhbHNlLCAidHlwZW5hbWUiOiAiaW50NCIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2cifSwg ImRlZmF1bHQiOiB7ImZtdCI6ICJERUZBVUxUIiwgInByZXNlbnQiOiBmYWxzZX0sICJub3RfbnVs bCI6ICIiLCAiY29sbGF0aW9uIjogeyJmbXQiOiAiQ09MTEFURSIsICJwcmVzZW50IjogZmFsc2V9 LCAiY29sc3RvcmFnZSI6ICJwbGFpbiIsICJjb21wcmVzc2lvbiI6IHsiZm10IjogIkNPTVBSRVNT SU9OICV7Y29tcHJlc3Npb25fbWV0aG9kfUkiLCAicHJlc2VudCI6IGZhbHNlLCAiY29tcHJlc3Np b25fbWV0aG9kIjogbnVsbH0sICJnZW5lcmF0ZWRfY29sdW1uIjogeyJmbXQiOiAiR0VORVJBVEVE IEFMV0FZUyBBUyIsICJwcmVzZW50IjogZmFsc2V9fSwgeyJmbXQiOiAiQ09OU1RSQUlOVCAle25h bWV9SSAle2RlZmluaXRpb259cyIsICJuYW1lIjogIm9yZGVyc19wa2V5IiwgInR5cGUiOiAiY29u c3RyYWludCIsICJjb250eXBlIjogInByaW1hcnkga2V5IiwgImRlZmluaXRpb24iOiAiUFJJTUFS WSBLRVkgKG9yZGVyX2lkKSJ9XX0KK05PVElDRTogIHJlLWZvcm1lZCBjb21tYW5kOiBDUkVBVEUg IFRBQkxFICBwdWJsaWMub3JkZXJzIChvcmRlcl9pZCBwZ19jYXRhbG9nLmludDQgU1RPUkFHRSBw bGFpbiAgICAgLCBwcm9kdWN0X2lkIHBnX2NhdGFsb2cuaW50NCBTVE9SQUdFIHBsYWluICAgICAs IENPTlNUUkFJTlQgb3JkZXJzX3BrZXkgUFJJTUFSWSBLRVkgKG9yZGVyX2lkKSkgICAgICAKK05P VElDRTogIGRlcGFyc2VkIGpzb246IDxOVUxMPgorTk9USUNFOiAgcmUtZm9ybWVkIGNvbW1hbmQ6 IDxOVUxMPgorTk9USUNFOiAgZGVwYXJzZWQganNvbjogeyJmbXQiOiAiQUxURVIgJXtvYmp0eXBl fXMgJXtpZGVudGl0eX1EICV7c3ViY21kczosIH1zIiwgIm9ianR5cGUiOiAiVEFCTEUiLCAic3Vi Y21kcyI6IFt7ImZtdCI6ICJBREQgQ09OU1RSQUlOVCAle25hbWV9SSAle2RlZmluaXRpb259cyIs ICJuYW1lIjogIm9yZGVyc19wcm9kdWN0X2lkX2ZrZXkiLCAidHlwZSI6ICJhZGQgY29uc3RyYWlu dCIsICJkZWZpbml0aW9uIjogIkZPUkVJR04gS0VZIChwcm9kdWN0X2lkKSBSRUZFUkVOQ0VTIHB1 YmxpYy5wcm9kdWN0KGlkKSJ9XSwgImlkZW50aXR5IjogeyJvYmpuYW1lIjogIm9yZGVycyIsICJz Y2hlbWFuYW1lIjogInB1YmxpYyJ9fQorTk9USUNFOiAgcmUtZm9ybWVkIGNvbW1hbmQ6IEFMVEVS IFRBQkxFIHB1YmxpYy5vcmRlcnMgQUREIENPTlNUUkFJTlQgb3JkZXJzX3Byb2R1Y3RfaWRfZmtl eSBGT1JFSUdOIEtFWSAocHJvZHVjdF9pZCkgUkVGRVJFTkNFUyBwdWJsaWMucHJvZHVjdChpZCkK ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL2V4 cGVjdGVkL3Rlc3RfZGRsX2RlcGFyc2Uub3V0IGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9k ZXBhcnNlX3JlZ3Jlc3MvZXhwZWN0ZWQvdGVzdF9kZGxfZGVwYXJzZS5vdXQKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uYjBlMmJmMjUxYQotLS0gL2Rldi9udWxsCisrKyBi L3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL2V4cGVjdGVkL3Rlc3Rf ZGRsX2RlcGFyc2Uub3V0CkBAIC0wLDAgKzEsMTggQEAKK0NSRUFURSBFWFRFTlNJT04gdGVzdF9k ZGxfZGVwYXJzZV9yZWdyZXNzOworQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gdGVzdF9kZGxf ZGVwYXJzZSgpCisgIFJFVFVSTlMgZXZlbnRfdHJpZ2dlciBMQU5HVUFHRSBwbHBnc3FsIEFTCisk JAorREVDTEFSRQorCXIgcmVjb3JkOworCWRlcGFyc2VkX2pzb24gdGV4dDsKK0JFR0lOCisJRk9S IHIgSU4gU0VMRUNUICogRlJPTSBwZ19ldmVudF90cmlnZ2VyX2RkbF9jb21tYW5kcygpCisJTE9P UAorCQlkZXBhcnNlZF9qc29uID0gcGdfY2F0YWxvZy5kZGxfZGVwYXJzZV90b19qc29uKHIuY29t bWFuZCk7CisJCVJBSVNFIE5PVElDRSAnZGVwYXJzZWQganNvbjogJScsIGRlcGFyc2VkX2pzb247 CisJCVJBSVNFIE5PVElDRSAncmUtZm9ybWVkIGNvbW1hbmQ6ICUnLCBwZ19jYXRhbG9nLmRkbF9k ZXBhcnNlX2V4cGFuZF9jb21tYW5kKGRlcGFyc2VkX2pzb24pOworCUVORCBMT09QOworRU5EOwor JCQ7CitDUkVBVEUgRVZFTlQgVFJJR0dFUiB0ZXN0X2RkbF9kZXBhcnNlCitPTiBkZGxfY29tbWFu ZF9lbmQgRVhFQ1VURSBQUk9DRURVUkUgdGVzdF9kZGxfZGVwYXJzZSgpOwpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvbWVzb24uYnVpbGQgYi9z cmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9tZXNvbi5idWlsZApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi43YTE1MmEyM2UyCi0tLSAvZGV2L251 bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvbWVzb24u YnVpbGQKQEAgLTAsMCArMSw0MiBAQAorIyBGSVhNRTogcHJldmVudCBpbnN0YWxsIGR1cmluZyBt YWluIGluc3RhbGwsIGJ1dCBub3QgZHVyaW5nIHRlc3QgOi8KKwordGVzdF9kZGxfZGVwYXJzZV9y ZWdyZXNzX3NvdXJjZXMgPSBmaWxlcygKKyAgJ3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy5jJywK KykKKworaWYgaG9zdF9zeXN0ZW0gPT0gJ3dpbmRvd3MnCisgIHRlc3RfZGRsX2RlcGFyc2VfcmVn cmVzc19zb3VyY2VzICs9IHJjX2xpYl9nZW4ucHJvY2Vzcyh3aW4zMnZlcl9yYywgZXh0cmFfYXJn czogWworICAgICctLU5BTUUnLCAndGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzJywKKyAgICAnLS1G SUxFREVTQycsICd0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MgLSByZWdyZXNzaW9uIHRlc3Rpbmcg Zm9yIERETCBkZXBhcnNpbmcnLF0pCitlbmRpZgorCit0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mg PSBzaGFyZWRfbW9kdWxlKCd0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MnLAorICB0ZXN0X2RkbF9k ZXBhcnNlX3JlZ3Jlc3Nfc291cmNlcywKKyAga3dhcmdzOiBwZ19tb2RfYXJncywKKykKK3Rlc3Rw cmVwX3RhcmdldHMgKz0gdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzCisKK2luc3RhbGxfZGF0YSgK KyAgJ3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy5jb250cm9sJywKKyAgJ3Rlc3RfZGRsX2RlcGFy c2VfcmVncmVzcy0tMS4wLnNxbCcsCisgIGt3YXJnczogY29udHJpYl9kYXRhX2FyZ3MsCispCisK K3Rlc3RzICs9IHsKKyAgJ25hbWUnOiAndGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzJywKKyAgJ3Nk JzogbWVzb24uY3VycmVudF9zb3VyY2VfZGlyKCksCisgICdiZCc6IG1lc29uLmN1cnJlbnRfYnVp bGRfZGlyKCksCisgICdyZWdyZXNzJzogeworICAgICdzcWwnOiBbCisgICAgICAndGVzdF9kZGxf ZGVwYXJzZScsCisgICAgICAnY3JlYXRlX2V4dGVuc2lvbicsCisgICAgICAnY3JlYXRlX3NjaGVt YScsCisgICAgICAnY3JlYXRlX3RhYmxlJywKKyAgICBdLAorICB9LAorICAndGFwJzogeworICAg ICd0ZXN0cyc6IFsKKyAgICAgICd0LzAwMV9jb21wYXJlX2R1bXBlZF9yZXN1bHRzLnBsJywKKyAg ICBdLAorICB9LAorfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBh cnNlX3JlZ3Jlc3Mvc3FsL2FnZ3JlZ2F0ZS5zcWwgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRs X2RlcGFyc2VfcmVncmVzcy9zcWwvYWdncmVnYXRlLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwLi4yZjJhYmJlZTI0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL2FnZ3JlZ2F0ZS5zcWwKQEAgLTAs MCArMSw4IEBACitDUkVBVEUgQUdHUkVHQVRFIG5ld2F2ZyhpbnQ0KSAoCisgICBzZnVuYyA9IGlu dDRfYXZnX2FjY3VtLCBzdHlwZSA9IF9pbnQ4LAorICAgZmluYWxmdW5jID0gaW50OF9hdmcsCisg ICBpbml0Y29uZDEgPSAnezAsMH0nCispOworCitEUk9QIEFHR1JFR0FURSBuZXdhdmcoaW50NCk7 CisKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNz L3NxbC9jcmVhdGVfZXh0ZW5zaW9uLnNxbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVw YXJzZV9yZWdyZXNzL3NxbC9jcmVhdGVfZXh0ZW5zaW9uLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwLi5kMjNlN2ZkOWNlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9leHRlbnNpb24u c3FsCkBAIC0wLDAgKzEsNSBAQAorLS0tCistLS0gQ1JFQVRFX0VYVEVOU0lPTgorLS0tCisKK0NS RUFURSBFWFRFTlNJT04gcGdfc3RhdF9zdGF0ZW1lbnRzOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9zY2hlbWEuc3FsIGIv c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9zY2hl bWEuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjEwYjEzZjBhNTUK LS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVn cmVzcy9zcWwvY3JlYXRlX3NjaGVtYS5zcWwKQEAgLTAsMCArMSwxNiBAQAorLS0KKy0tIENSRUFU RV9TQ0hFTUEKKy0tCisKK0NSRUFURSBTQ0hFTUEgZm9vOworCitDUkVBVEUgU0NIRU1BIElGIE5P VCBFWElTVFMgYmFyOworCitDUkVBVEUgU0NIRU1BIGJhejsKKworLS0gV2lsbCBub3QgYmUgY3Jl YXRlZCwgYW5kIHdpbGwgbm90IGJlIGhhbmRsZWQgYnkgdGhlCistLSBldmVudCB0cmlnZ2VyCitD UkVBVEUgU0NIRU1BIElGIE5PVCBFWElTVFMgYmF6OworCitDUkVBVEUgU0NIRU1BIGVsZW1lbnRf dGVzdAorICBDUkVBVEUgVEFCTEUgZm9vIChpZCBpbnQpCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9t b2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9zcWwvY3JlYXRlX3RhYmxlLnNxbCBiL3Ny Yy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC9jcmVhdGVfdGFibGUu c3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjk5N2QyZjU0ZmIKLS0t IC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVz cy9zcWwvY3JlYXRlX3RhYmxlLnNxbApAQCAtMCwwICsxLDE2IEBACitDUkVBVEUgVEFCTEUgc2lt cGxlX3RhYmxlKAorICAgIGlkIGludCwKKyAgICBuYW1lIHZhcmNoYXIoNSkKKyk7CistLSBUZXN0 IENSRUFURSBJTkRFWCB3aXRoIGFuIElOQ0xVREUgQ0xBVVNFCitDUkVBVEUgVU5JUVVFIElOREVY IGNvdmVyaW5nX2luZGV4IG9uIHNpbXBsZV90YWJsZSAoaWQpIElOQ0xVREUgKG5hbWUpOworCist LSBUZXN0IFRhYmxlTGlrZUNsYXVzZSBpcyBoYW5kbGVkIHByb3Blcmx5CitDUkVBVEUgVEFCTEUg Y3RsdDEgKGEgdGV4dCBDSEVDSyAobGVuZ3RoKGEpID4gMikgUFJJTUFSWSBLRVksIGIgdGV4dCk7 CitBTFRFUiBUQUJMRSBjdGx0MSBBTFRFUiBDT0xVTU4gYSBTRVQgU1RPUkFHRSBNQUlOOworQUxU RVIgVEFCTEUgY3RsdDEgQUxURVIgQ09MVU1OIGIgU0VUIFNUT1JBR0UgRVhURVJOQUw7CisKKy0t IFRlc3QgZm9yZWlnbiBrZXkgY29uc3RyYWludCBpcyBoYW5kbGVkIGluIGEgZm9sbG93aW5nIEFM VEVSIFRBQkxFIEFERCBDT05TVFJBSU5UIEZPUkVJR04gS0VZIFJFRkVSRU5DRVMgc3ViY29tbWFu ZAorQ1JFQVRFIFRBQkxFIHByb2R1Y3QgKGlkIGludCBQUklNQVJZIEtFWSwgbmFtZSB0ZXh0KTsK K0NSRUFURSBUQUJMRSBvcmRlcnMgKG9yZGVyX2lkIGludCBQUklNQVJZIEtFWSwgcHJvZHVjdF9p ZCBpbnQKK1JFRkVSRU5DRVMgcHJvZHVjdCAoaWQpKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21v ZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC90ZXN0X2RkbF9kZXBhcnNlLnNxbCBi L3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC90ZXN0X2RkbF9k ZXBhcnNlLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4wODg5ZmEw MmY5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNl X3JlZ3Jlc3Mvc3FsL3Rlc3RfZGRsX2RlcGFyc2Uuc3FsCkBAIC0wLDAgKzEsMjAgQEAKK0NSRUFU RSBFWFRFTlNJT04gdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzOworCitDUkVBVEUgT1IgUkVQTEFD RSBGVU5DVElPTiB0ZXN0X2RkbF9kZXBhcnNlKCkKKyAgUkVUVVJOUyBldmVudF90cmlnZ2VyIExB TkdVQUdFIHBscGdzcWwgQVMKKyQkCitERUNMQVJFCisJciByZWNvcmQ7CisJZGVwYXJzZWRfanNv biB0ZXh0OworQkVHSU4KKwlGT1IgciBJTiBTRUxFQ1QgKiBGUk9NIHBnX2V2ZW50X3RyaWdnZXJf ZGRsX2NvbW1hbmRzKCkKKwlMT09QCisJCWRlcGFyc2VkX2pzb24gPSBwZ19jYXRhbG9nLmRkbF9k ZXBhcnNlX3RvX2pzb24oci5jb21tYW5kKTsKKwkJUkFJU0UgTk9USUNFICdkZXBhcnNlZCBqc29u OiAlJywgZGVwYXJzZWRfanNvbjsKKwkJUkFJU0UgTk9USUNFICdyZS1mb3JtZWQgY29tbWFuZDog JScsIHBnX2NhdGFsb2cuZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQoZGVwYXJzZWRfanNvbik7 CisJRU5EIExPT1A7CitFTkQ7CiskJDsKKworQ1JFQVRFIEVWRU5UIFRSSUdHRVIgdGVzdF9kZGxf ZGVwYXJzZQorT04gZGRsX2NvbW1hbmRfZW5kIEVYRUNVVEUgUFJPQ0VEVVJFIHRlc3RfZGRsX2Rl cGFyc2UoKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9y ZWdyZXNzL3QvMDAxX2NvbXBhcmVfZHVtcGVkX3Jlc3VsdHMucGwgYi9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy90LzAwMV9jb21wYXJlX2R1bXBlZF9yZXN1bHRzLnBs Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjY2NGFkMzQ5OGYKLS0tIC9k ZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy90 LzAwMV9jb21wYXJlX2R1bXBlZF9yZXN1bHRzLnBsCkBAIC0wLDAgKzEsMTgxIEBACit1c2Ugc3Ry aWN0OwordXNlIHdhcm5pbmdzOwordXNlIEVudjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVz dGVyOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7Cit1c2Ug RmlsZTo6QmFzZW5hbWU7CisKK3N1YiBleGVjdXRlX3Rlc3RfY2FzZSB7CisgICAgbXkgJHRlc3Rf bmFtZSA9ICRfWzBdOworICAgIG15ICRwdWJfbm9kZSA9ICRfWzFdOworICAgIG15ICRzdWJfbm9k ZSA9ICRfWzJdOworICAgIG15ICRkYm5hbWUgPSAkX1szXTsKKyAgICBteSAkb3V0cHV0ZGlyID0g JFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOjp0bXBfY2hlY2s7CisKKyAgICAjIHNldCB1cCBkZXBh cnNlIHRlc3RpbmcgcmVzb3VyY2VzCisgICAgY3JlYXRlX2RlcGFyc2VfdGVzdGluZ19yZXNvdXJj ZXNfb25fcHViX25vZGUoJHB1Yl9ub2RlLCAkZGJuYW1lKTsKKworICAgIG15ICR0ZXN0X2ZpbGUg PSAiLi9zcWwvJHt0ZXN0X25hbWV9LnNxbCI7CisgICAgbXkgJGNvbnRlbnQgPSBkb3tsb2NhbChA QVJHViwkLyk9JHRlc3RfZmlsZTs8Pn07CisKKyAgICAkcHViX25vZGUgLT4gcHNxbCgkZGJuYW1l LCAkY29udGVudCk7CisKKyAgICAjIHJldHJpZXZlIFNRTCBjb21tYW5kcyBnZW5lcmF0ZWQgZnJv bSBkZXBhcnNlZCBERExzIG9uIHB1YiBub2RlCisgICAgbXkgJGRkbF9zcWwgPSAnJzsKKyAgICAk cHViX25vZGUgLT4gcHNxbCgkZGJuYW1lLHEoCisgICAgICAgIHNlbGVjdCBkZGxfZGVwYXJzZV9l eHBhbmRfY29tbWFuZChkZGwpIHx8ICc7JyBmcm9tIGRlcGFyc2VkX2RkbHMgT1JERVIgQlkgaWQg QVNDKSwKKyAgICAgICAgc3Rkb3V0ID0+IFwkZGRsX3NxbCk7CisKKyAgICBwcmludCAiXG5zdGFy dCBwcmludGluZyByZS1mb3JtZWQgc3FsXG4iOworICAgIHByaW50ICRkZGxfc3FsOworICAgIHBy aW50ICJcbmVuZCBwcmludGluZyByZS1mb3JtZWQgc3FsXG4iOworICAgICMgZXhlY3V0ZSBTUUwg Y29tbWFuZHMgb24gc3ViIG5vZGUKKyAgICAkc3ViX25vZGUgLT4gcHNxbCgkZGJuYW1lLCAkZGRs X3NxbCk7CisKKyAgICAjIGNsZWFuIHVwIGRlcGFyc2UgdGVzdGluZyByZXNvdXJjZXMKKyAgICBj bGVhbl9kZXBhcnNlX3Rlc3RpbmdfcmVzb3VyY2VzX29uX3B1Yl9ub2RlKCRwdWJfbm9kZSwgJGRi bmFtZSk7CisKKyAgICAjIGR1bXAgZnJvbSBwdWIgbm9kZSBhbmQgc3ViIG5vZGUKKyAgICBta2Rp ciAke291dHB1dGRpcn0uIi9kdW1wcyIsIDA3NTU7CisgICAgbXkgJHB1Yl9kdW1wID0gJHtvdXRw dXRkaXJ9LiIvZHVtcHMvJHt0ZXN0X25hbWV9X3B1Yi5kdW1wIjsKKyAgICBteSAkc3ViX2R1bXAg PSAke291dHB1dGRpcn0uIi9kdW1wcy8ke3Rlc3RfbmFtZX1fc3ViLmR1bXAiOworICAgIHN5c3Rl bSgicGdfZHVtcGFsbCAiCisgICAgICAgIC4gIi1zICIKKyAgICAgICAgLiAiLWYgIgorICAgICAg ICAuICRwdWJfZHVtcCAuICIgIgorICAgICAgICAuICItLW5vLXN5bmMgIgorICAgICAgICAuICAn LXAgJworICAgICAgICAuICRwdWJfbm9kZS0+cG9ydCkgID09IDAgb3IgZGllICJEdW1wIHB1YiBu b2RlIGZhaWxlZCBpbiAke3Rlc3RfbmFtZX0iOworICAgIHN5c3RlbSgicGdfZHVtcGFsbCAiCisg ICAgICAgIC4gIi1zICIKKyAgICAgICAgLiAiLWYgIgorICAgICAgICAuICRzdWJfZHVtcCAuICIg IgorICAgICAgICAuICItLW5vLXN5bmMgIgorICAgICAgICAuICAnLXAgJworICAgICAgICAuICRz dWJfbm9kZS0+cG9ydCkgID09IDAgb3IgZGllICJEdW1wIHN1YiBub2RlIGZhaWxlZCBpbiAke3Rl c3RfbmFtZX0iOworCisgICAgIyBjb21wYXJlIGR1bXBlZCByZXN1bHRzCisgICAgaXMoc3lzdGVt KCJkaWZmICIKKyAgICAuICRwdWJfZHVtcCAuICIgIgorICAgIC4gJHN1Yl9kdW1wKSwgMCwgIkR1 bXBlZCByZXN1bHRzIGRpZmYgaW4gJHt0ZXN0X25hbWV9Iik7Cit9CisKK3N1YiBpbml0X25vZGUg eworICAgIG15ICRub2RlX25hbWUgPSAkX1swXTsKKyAgICBteSAkbm9kZSA9IFBvc3RncmVTUUw6 OlRlc3Q6OkNsdXN0ZXItPm5ldygkbm9kZV9uYW1lKTsKKyAgICAkbm9kZS0+aW5pdDsKKyAgICAj IGluY3JlYXNlIHNvbWUgc2V0dGluZ3MgdGhhdCBDbHVzdGVyLT5uZXcgbWFrZXMgdG9vIGxvdyBi eSBkZWZhdWx0LgorICAgICRub2RlLT5hZGp1c3RfY29uZigncG9zdGdyZXNxbC5jb25mJywgJ21h eF9jb25uZWN0aW9ucycsICcyNScpOworICAgICRub2RlLT5hcHBlbmRfY29uZigncG9zdGdyZXNx bC5jb25mJywKKwkJICAgJ21heF9wcmVwYXJlZF90cmFuc2FjdGlvbnMgPSAxMCcpOworICAgIHJl dHVybiAkbm9kZTsKK30KKworc3ViIGluaXRfcHViX25vZGUgeworICAgIG15ICRub2RlX25hbWUg PSAkX1swXS4iX3B1YiI7CisgICAgcmV0dXJuIGluaXRfbm9kZSgkbm9kZV9uYW1lKQorfQorCitz dWIgaW5pdF9zdWJfbm9kZSB7CisgICAgbXkgJG5vZGVfbmFtZSA9ICRfWzBdLiJfc3ViIjsKKyAg ICByZXR1cm4gaW5pdF9ub2RlKCRub2RlX25hbWUpCit9CisKK3N1YiBjcmVhdGVfZGVwYXJzZV90 ZXN0aW5nX3Jlc291cmNlc19vbl9wdWJfbm9kZSB7CisgICAgbXkgJG5vZGUgPSAkX1swXTsKKyAg ICBteSAkZGJuYW1lID0gJF9bMV07CisgICAgJG5vZGUgLT4gcHNxbCgkZGJuYW1lLCBxKAorICAg ICAgICBiZWdpbjsKKyAgICAgICAgQ1JFQVRFIEVYVEVOU0lPTiB0ZXN0X2RkbF9kZXBhcnNlX3Jl Z3Jlc3M7CisgICAgICAgIGNyZWF0ZSB0YWJsZSBkZXBhcnNlZF9kZGxzKGlkIFNFUklBTCBQUklN QVJZIEtFWSwgdGFnIHRleHQsIG9iamVjdF9pZGVudGl0eSB0ZXh0LCBkZGwgdGV4dCk7CisKKyAg ICAgICAgY3JlYXRlIG9yIHJlcGxhY2UgZnVuY3Rpb24gZGVwYXJzZV90b19qc29uKCkKKyAgICAg ICAgICAgIHJldHVybnMgZXZlbnRfdHJpZ2dlciBsYW5ndWFnZSBwbHBnc3FsIGFzCisgICAgICAg ICQkCisgICAgICAgIGRlY2xhcmUKKyAgICAgICAgICAgIHIgcmVjb3JkOworICAgICAgICBiZWdp bgorICAgICAgICAgICAgZm9yIHIgaW4gc2VsZWN0ICogZnJvbSBwZ19ldmVudF90cmlnZ2VyX2Rk bF9jb21tYW5kcygpCisgICAgICAgICAgICBsb29wCisgICAgICAgICAgICAgICAgaW5zZXJ0IGlu dG8gZGVwYXJzZWRfZGRscyh0YWcsIG9iamVjdF9pZGVudGl0eSwgZGRsKSB2YWx1ZXMgKHIuY29t bWFuZF90YWcsIHIub2JqZWN0X2lkZW50aXR5LCBwZ19jYXRhbG9nLmRkbF9kZXBhcnNlX3RvX2pz b24oci5jb21tYW5kKSk7CisgICAgICAgICAgICBlbmQgbG9vcDsKKyAgICAgICAgRU5EOworICAg ICAgICAkJDsKKworICAgICAgICBjcmVhdGUgb3IgcmVwbGFjZSBmdW5jdGlvbiBkZXBhcnNlX2Ry b3BzX3RvX2pzb24oKQorICAgICAgICAgICAgcmV0dXJucyBldmVudF90cmlnZ2VyIGxhbmd1YWdl IHBscGdzcWwgYXMKKyAgICAgICAgJCQKKyAgICAgICAgZGVjbGFyZQorICAgICAgICAgICAgciBy ZWNvcmQ7CisgICAgICAgIGJlZ2luCisgICAgICAgICAgICBmb3IgciBpbiBzZWxlY3QgKiBmcm9t IHBnX2V2ZW50X3RyaWdnZXJfZHJvcHBlZF9vYmplY3RzKCkKKyAgICAgICAgICAgIGxvb3AKKyAg ICAgICAgICAgICAgICBpbnNlcnQgaW50byBkZXBhcnNlZF9kZGxzKHRhZywgb2JqZWN0X2lkZW50 aXR5LCBkZGwpIHZhbHVlcyAoci5vYmplY3RfdHlwZSwgci5vYmplY3RfaWRlbnRpdHksIHB1Ymxp Yy5kZXBhcnNlX2Ryb3BfZGRsKHIub2JqZWN0X2lkZW50aXR5LCByLm9iamVjdF90eXBlKSk7Cisg ICAgICAgICAgICBlbmQgbG9vcDsKKyAgICAgICAgRU5EOworICAgICAgICAkJDsKKworICAgICAg ICBjcmVhdGUgZXZlbnQgdHJpZ2dlciBkZGxfZGVwYXJzZV90cmlnCisgICAgICAgIG9uIGRkbF9j b21tYW5kX2VuZCBleGVjdXRlIHByb2NlZHVyZSBkZXBhcnNlX3RvX2pzb24oKTsKKworICAgICAg ICBjcmVhdGUgZXZlbnQgdHJpZ2dlciBkZGxfZHJvcHNfZGVwYXJzZV90cmlnCisgICAgICAgIG9u IHNxbF9kcm9wIGV4ZWN1dGUgcHJvY2VkdXJlIGRlcGFyc2VfZHJvcHNfdG9fanNvbigpOworCisg ICAgICAgIGNvbW1pdDsKKyAgICApKTsKK30KKworc3ViIGNsZWFuX2RlcGFyc2VfdGVzdGluZ19y ZXNvdXJjZXNfb25fcHViX25vZGUgeworICAgIG15ICRub2RlID0gJF9bMF07CisgICAgbXkgJGRi bmFtZSA9ICRfWzFdOworICAgICMgRHJvcCB0aGUgZXZlbnQgdHJpZ2dlciBhbmQgdGhlIGZ1bmN0 aW9uIGJlZm9yZSB0YWtpbmcgYSBsb2dpY2FsIGR1bXAuCisgICAgJG5vZGUgLT4gc2FmZV9wc3Fs KCRkYm5hbWUscSgKKyAgICAgICAgZHJvcCBldmVudCB0cmlnZ2VyIGRkbF9kZXBhcnNlX3RyaWc7 CisgICAgICAgIGRyb3AgZXZlbnQgdHJpZ2dlciBkZGxfZHJvcHNfZGVwYXJzZV90cmlnOworICAg ICAgICBkcm9wIGZ1bmN0aW9uIGRlcGFyc2VfdG9fanNvbigpOworICAgICAgICBkcm9wIGZ1bmN0 aW9uIGRlcGFyc2VfZHJvcHNfdG9fanNvbigpOworICAgICAgICBkcm9wIHRhYmxlIGRlcGFyc2Vk X2RkbHM7CisgICAgICAgIERST1AgRVhURU5TSU9OIHRlc3RfZGRsX2RlcGFyc2VfcmVncmVzczsK KyAgICApKTsKK30KKworc3ViIHRyaW0geworICAgIG15IEBvdXQgPSBAXzsKKyAgICBmb3IgKEBv dXQpIHsKKyAgICAgICAgcy9eXHMrLy87CisgICAgICAgIHMvXHMrJC8vOworICAgIH0KKyAgICBy ZXR1cm4gd2FudGFycmF5ID8gQG91dCA6ICRvdXRbMF07Cit9CisKKyMgQ3JlYXRlIGFuZCBzdGFy dCBwdWIgc3ViIG5vZGVzCitteSAkcHViX25vZGUgPSBpbml0X3B1Yl9ub2RlKCJ0ZXN0Iik7Citt eSAkc3ViX25vZGUgPSBpbml0X3N1Yl9ub2RlKCJ0ZXN0Iik7CitteSAkZGJuYW1lID0gInBvc3Rn cmVzIjsKKyRwdWJfbm9kZSAtPiBzdGFydDsKKyRzdWJfbm9kZSAtPiBzdGFydDsKKworIyBsb2Fk IHRlc3QgY2FzZXMgZnJvbSB0aGUgcmVncmVzc2lvbiB0ZXN0cworbXkgQHJlZ3Jlc3NfdGVzdHMg PSBzcGxpdCAvXHMrLywgJEVOVntSRUdSRVNTfTsKKworZm9yZWFjaChAcmVncmVzc190ZXN0cykg eworICAgIG15ICR0ZXN0X25hbWUgPSB0cmltKCRfKTsKKyAgICAjIHNraXAgaWYgaXQncyByZWdy ZXNzaW9uIHRlc3QgcHJlcGFyYXRpb24gb3IgZW1wdHkgc3RyaW5nCisgICAgaWYgKCR0ZXN0X25h bWUgZXEgIiIgb3IgJHRlc3RfbmFtZSBlcSAidGVzdF9kZGxfZGVwYXJzZSIpCisgICAgeworICAg ICAgICBuZXh0OworICAgIH0KKyAgICBldmFsIHtleGVjdXRlX3Rlc3RfY2FzZSgkdGVzdF9uYW1l LCAkcHViX25vZGUsICRzdWJfbm9kZSwgJGRibmFtZSk7fTsKKyAgICBpZiAoJEAgbmUgIiIpCisg ICAgeworICAgICAgICBmYWlsKCRAKTsKKyAgICB9Cit9CitjbG9zZTsKKworIyBDbG9zZSBub2Rl cworJHB1Yl9ub2RlLT5zdG9wOworJHN1Yl9ub2RlLT5zdG9wOworCitkb25lX3Rlc3RpbmcoKTsK ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3Qv MDAyX3JlZ3Jlc3NfdGVzdHMucGwgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2Vf cmVncmVzcy90LzAwMl9yZWdyZXNzX3Rlc3RzLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAuLjNhODc1YzMzZmIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1 bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy90LzAwMl9yZWdyZXNzX3Rlc3RzLnBsCkBAIC0w LDAgKzEsMjA3IEBACit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIEVudjsKK3VzZSBQ b3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwor dXNlIFRlc3Q6Ok1vcmU7Cit1c2UgRmlsZTo6QmFzZW5hbWU7CisKK3N1YiBleGVjdXRlX3JlZ3Jl c3NfdGVzdCB7CisgICAgbXkgJHB1Yl9ub2RlID0gJF9bMF07CisgICAgbXkgJHN1Yl9ub2RlID0g JF9bMV07CisgICAgbXkgJGRibmFtZSA9ICJwb3N0Z3JlcyI7CisgICAgbXkgJGRscGF0aCAgICA9 IGRpcm5hbWUoJEVOVntSRUdSRVNTX1NITElCfSk7CisgICAgbXkgJGlucHV0ZGlyID0gIi4uLy4u L3JlZ3Jlc3MiOworICAgIG15ICRvdXRwdXRkaXIgPSAkUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM6 OnRtcF9jaGVjazsKKworICAgICMgc2V0IHVwIGRlcGFyc2UgdGVzdGluZyByZXNvdXJjZXMKKyAg ICBjcmVhdGVfZGVwYXJzZV90ZXN0aW5nX3Jlc291cmNlc19vbl9wdWJfbm9kZSgkcHViX25vZGUs ICRkYm5hbWUpOworCisgICAgIyBleGVjdXRlIGNvcmUgcmVncmVzc2lvbiB0ZXN0cyBvbiBwdWIg bm9kZQorICAgIG15ICRyZWdyZXNzX2NtZCA9ICRFTlZ7UEdfUkVHUkVTU30KKyAgICAgICAgLiAi ICIKKyAgICAgICAgLiAiLS1kbHBhdGg9XCIkZGxwYXRoXCIgIgorICAgICAgICAuICItLW1heC1j b25jdXJyZW50LXRlc3RzPTIwICIKKyAgICAgICAgLiAiLS1kYm5hbWU9IgorICAgICAgICAuICRk Ym5hbWUgLiAiICIKKyAgICAgICAgLiAiLS11c2UtZXhpc3RpbmcgIgorICAgICAgICAuICItLWhv c3Q9IgorICAgICAgICAuICRwdWJfbm9kZS0+aG9zdCAuICIgIgorICAgICAgICAuICItLXBvcnQ9 IgorICAgICAgICAuICRwdWJfbm9kZS0+cG9ydCAuICIgIgorICAgICAgICAuICItLWlucHV0ZGly PSRpbnB1dGRpciAiCisgICAgICAgIC4gIi0tb3V0cHV0ZGlyPVwiJG91dHB1dGRpclwiICIKKyAg ICAgICAgLiAiLS1zY2hlZHVsZT0kaW5wdXRkaXIvcGFyYWxsZWxfc2NoZWR1bGUiOworICAgIHBy aW50ICJSZWdyZXNzaW9uIHRlc3QgY29tbWFuZCBpcyAkcmVncmVzc19jbWQiOworICAgIG15ICRy YyA9IHN5c3RlbSgkcmVncmVzc19jbWQpOworICAgIGlmICgkcmMgIT0gMCkKKyAgICB7CisgICAg ICAgICMgSWYgcmVncmVzc2lvbiB0ZXN0IGZhaWxzLCBkdW1wIG91dCB0aGUgcmVncmVzc2lvbiBk aWZmcyBmaWxlCisgICAgICAgIG15ICRkaWZmcyA9ICIke291dHB1dGRpcn0vcmVncmVzc2lvbi9y ZWdyZXNzaW9uLmRpZmZzIjsKKyAgICAgICAgaWYgKC1lICRkaWZmcykKKyAgICAgICAgeworICAg ICAgICAgICAgcHJpbnQgIj09PSBkdW1waW5nICRkaWZmcyA9PT1cbiI7CisgICAgICAgICAgICBw cmludCBzbHVycF9maWxlKCRkaWZmcyk7CisgICAgICAgICAgICBwcmludCAiPT09IEVPRiA9PT1c biI7CisgICAgICAgIH0KKyAgICAgICAgZGllICJSZWdyZXNzaW9uIHRlc3QgZmFpbGVkIjsKKyAg ICB9CisKKyAgICAjIFJldHJpZXZlIFNRTCBjb21tYW5kcyBnZW5lcmF0ZWQgZnJvbSBkZXBhcnNl ZCBERExzIG9uIHB1YiBub2RlCisgICAgbXkgJGRkbF9zcWwgPSAnJzsKKyAgICAkcHViX25vZGUg LT4gcHNxbCgkZGJuYW1lLHEoCisgICAgICAgIHNlbGVjdCBkZGxfZGVwYXJzZV9leHBhbmRfY29t bWFuZChkZGwpIHx8ICc7JyBmcm9tIGRlcGFyc2VkX2RkbHMgT1JERVIgQlkgaWQgQVNDKSwKKyAg ICAgICAgc3Rkb3V0ID0+IFwkZGRsX3NxbCk7CisKKyAgICAjIEV4ZWN1dGUgU1FMIGNvbW1hbmRz IG9uIHN1YiBub2RlCisgICAgJHN1Yl9ub2RlIC0+IHBzcWwoJGRibmFtZSwgJGRkbF9zcWwpOwor CisgICAgIyBDbGVhbiB1cCBkZXBhcnNlIHRlc3RpbmcgcmVzb3VyY2VzCisgICAgY2xlYW5fZGVw YXJzZV90ZXN0aW5nX3Jlc291cmNlc19vbl9wdWJfbm9kZSgkcHViX25vZGUsICRkYm5hbWUpOwor CisgICAgIyBEdW1wIGZyb20gcHViIG5vZGUgYW5kIHN1YiBub2RlCisgICAgbWtkaXIgJHtvdXRw dXRkaXJ9LiIvZHVtcHMiLCAwNzU1OworICAgIG15ICRwdWJfZHVtcCA9ICR7b3V0cHV0ZGlyfS4i L2R1bXBzL3JlZ3Jlc3NfcHViLmR1bXAiOworICAgIG15ICRzdWJfZHVtcCA9ICR7b3V0cHV0ZGly fS4iL2R1bXBzL3JlZ3Jlc3Nfc3ViLmR1bXAiOworICAgIHN5c3RlbSgicGdfZHVtcGFsbCAiCisg ICAgICAgIC4gIi1zICIKKyAgICAgICAgLiAiLWYgIgorICAgICAgICAuICRwdWJfZHVtcCAuICIg IgorICAgICAgICAuICItLW5vLXN5bmMgIgorICAgICAgICAuICAnLXAgJworICAgICAgICAuICRw dWJfbm9kZS0+cG9ydCkgID09IDAgb3IgZGllICJEdW1wIHB1YiBub2RlIGZhaWxlZCI7CisgICAg c3lzdGVtKCJwZ19kdW1wYWxsICIKKyAgICAgICAgLiAiLXMgIgorICAgICAgICAuICItZiAiCisg ICAgICAgIC4gJHN1Yl9kdW1wIC4gIiAiCisgICAgICAgIC4gIi0tbm8tc3luYyAiCisgICAgICAg IC4gICctcCAnCisgICAgICAgIC4gJHN1Yl9ub2RlLT5wb3J0KSAgPT0gMCBvciBkaWUgIkR1bXAg c3ViIG5vZGUgZmFpbGVkIjsKKworICAgICMgQ29tcGFyZSBkdW1wZWQgcmVzdWx0cworICAgIGlz KHN5c3RlbSgiZGlmZiAiCisgICAgLiAkcHViX2R1bXAgLiAiICIKKyAgICAuICRzdWJfZHVtcCks IDAsICJDb21wYXJpbmcgZHVtcGVkIG91dHB1dCIpOworCisgICAgIyBDbG9zZSBub2RlcworICAg ICRwdWJfbm9kZS0+c3RvcDsKKyAgICAkc3ViX25vZGUtPnN0b3A7Cit9CisKK3N1YiBpbml0X25v ZGUgeworICAgIG15ICRub2RlX25hbWUgPSAkX1swXTsKKyAgICBteSAkbm9kZSA9IFBvc3RncmVT UUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygkbm9kZV9uYW1lKTsKKyAgICAkbm9kZS0+aW5pdDsKKyAg ICAjIGluY3JlYXNlIHNvbWUgc2V0dGluZ3MgdGhhdCBDbHVzdGVyLT5uZXcgbWFrZXMgdG9vIGxv dyBieSBkZWZhdWx0LgorICAgICRub2RlLT5hZGp1c3RfY29uZigncG9zdGdyZXNxbC5jb25mJywg J21heF9jb25uZWN0aW9ucycsICcyNScpOworICAgICRub2RlLT5hcHBlbmRfY29uZigncG9zdGdy ZXNxbC5jb25mJywKKwkJICAgJ21heF9wcmVwYXJlZF90cmFuc2FjdGlvbnMgPSAxMCcpOworICAg IHJldHVybiAkbm9kZTsKK30KKworc3ViIGluaXRfcHViX25vZGUgeworICAgIG15ICRub2RlX25h bWUgPSAkX1swXS4iX3B1YiI7CisgICAgcmV0dXJuIGluaXRfbm9kZSgkbm9kZV9uYW1lKQorfQor CitzdWIgaW5pdF9zdWJfbm9kZSB7CisgICAgbXkgJG5vZGVfbmFtZSA9ICRfWzBdLiJfc3ViIjsK KyAgICByZXR1cm4gaW5pdF9ub2RlKCRub2RlX25hbWUpCit9CisKK3N1YiBjcmVhdGVfZGVwYXJz ZV90ZXN0aW5nX3Jlc291cmNlc19vbl9wdWJfbm9kZSB7CisgICAgbXkgJG5vZGUgPSAkX1swXTsK KyAgICBteSAkZGJuYW1lID0gJF9bMV07CisgICAgJG5vZGUgLT4gcHNxbCgkZGJuYW1lLCBxKAor ICAgICAgICBiZWdpbjsKKyAgICAgICAgQ1JFQVRFIEVYVEVOU0lPTiB0ZXN0X2RkbF9kZXBhcnNl X3JlZ3Jlc3M7CisgICAgICAgIGNyZWF0ZSB0YWJsZSBkZXBhcnNlZF9kZGxzKGlkIFNFUklBTCBQ UklNQVJZIEtFWSwgdGFnIHRleHQsIG9iamVjdF9pZGVudGl0eSB0ZXh0LCBkZGwgdGV4dCk7Cisg ICAgICAgIGNyZWF0ZSBvciByZXBsYWNlIGZ1bmN0aW9uIGRlcGFyc2VfdG9fanNvbigpCisgICAg ICAgICAgICByZXR1cm5zIGV2ZW50X3RyaWdnZXIgbGFuZ3VhZ2UgcGxwZ3NxbCBhcworICAgICAg ICAkJAorICAgICAgICBkZWNsYXJlCisgICAgICAgICAgICByIHJlY29yZDsKKyAgICAgICAgYmVn aW4KKyAgICAgICAgICAgIGZvciByIGluIHNlbGVjdCAqIGZyb20gcGdfZXZlbnRfdHJpZ2dlcl9k ZGxfY29tbWFuZHMoKQorICAgICAgICAgICAgbG9vcAorICAgICAgICAgICAgICAgIGluc2VydCBp bnRvIGRlcGFyc2VkX2RkbHModGFnLCBvYmplY3RfaWRlbnRpdHksIGRkbCkgdmFsdWVzIChyLmNv bW1hbmRfdGFnLCByLm9iamVjdF9pZGVudGl0eSwgcGdfY2F0YWxvZy5kZGxfZGVwYXJzZV90b19q c29uKHIuY29tbWFuZCkpOworICAgICAgICAgICAgZW5kIGxvb3A7CisgICAgICAgIEVORDsKKyAg ICAgICAgJCQ7CisgICAgICAgIGNyZWF0ZSBvciByZXBsYWNlIGZ1bmN0aW9uIGRlcGFyc2VfZHJv cHNfdG9fanNvbigpCisgICAgICAgICAgICByZXR1cm5zIGV2ZW50X3RyaWdnZXIgbGFuZ3VhZ2Ug cGxwZ3NxbCBhcworICAgICAgICAkJAorICAgICAgICBkZWNsYXJlCisgICAgICAgICAgICByIHJl Y29yZDsKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIGZvciByIGluIHNlbGVjdCAqIGZyb20g cGdfZXZlbnRfdHJpZ2dlcl9kcm9wcGVkX29iamVjdHMoKQorICAgICAgICAgICAgbG9vcAorICAg ICAgICAgICAgICAgIGluc2VydCBpbnRvIGRlcGFyc2VkX2RkbHModGFnLCBvYmplY3RfaWRlbnRp dHksIGRkbCkgdmFsdWVzIChyLm9iamVjdF90eXBlLCByLm9iamVjdF9pZGVudGl0eSwgcHVibGlj LmRlcGFyc2VfZHJvcF9kZGwoci5vYmplY3RfaWRlbnRpdHksIHIub2JqZWN0X3R5cGUpKTsKKyAg ICAgICAgICAgIGVuZCBsb29wOworICAgICAgICBFTkQ7CisgICAgICAgICQkOworICAgICAgICBj cmVhdGUgZXZlbnQgdHJpZ2dlciBkZGxfZGVwYXJzZV90cmlnCisgICAgICAgIG9uIGRkbF9jb21t YW5kX2VuZCBleGVjdXRlIHByb2NlZHVyZSBkZXBhcnNlX3RvX2pzb24oKTsKKyAgICAgICAgY3Jl YXRlIGV2ZW50IHRyaWdnZXIgZGRsX2Ryb3BzX2RlcGFyc2VfdHJpZworICAgICAgICBvbiBzcWxf ZHJvcCBleGVjdXRlIHByb2NlZHVyZSBkZXBhcnNlX2Ryb3BzX3RvX2pzb24oKTsKKyAgICAgICAg Y29tbWl0OworICAgICkpOworfQorCitzdWIgY2xlYW5fZGVwYXJzZV90ZXN0aW5nX3Jlc291cmNl c19vbl9wdWJfbm9kZSB7CisgICAgbXkgJG5vZGUgPSAkX1swXTsKKyAgICBteSAkZGJuYW1lID0g JF9bMV07CisgICAgIyBEcm9wIHRoZSBldmVudCB0cmlnZ2VyIGFuZCB0aGUgZnVuY3Rpb24gYmVm b3JlIHRha2luZyBhIGxvZ2ljYWwgZHVtcC4KKyAgICAkbm9kZSAtPiBzYWZlX3BzcWwoJGRibmFt ZSxxKAorICAgICAgICBkcm9wIGV2ZW50IHRyaWdnZXIgZGRsX2RlcGFyc2VfdHJpZzsKKyAgICAg ICAgZHJvcCBldmVudCB0cmlnZ2VyIGRkbF9kcm9wc19kZXBhcnNlX3RyaWc7CisgICAgICAgIGRy b3AgZnVuY3Rpb24gZGVwYXJzZV90b19qc29uKCk7CisgICAgICAgIGRyb3AgZnVuY3Rpb24gZGVw YXJzZV9kcm9wc190b19qc29uKCk7CisgICAgICAgIGRyb3AgdGFibGUgZGVwYXJzZWRfZGRsczsK KyAgICAgICAgRFJPUCBFWFRFTlNJT04gdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzOworICAgICkp OworfQorCitzdWIgdHJpbSB7CisgICAgbXkgQG91dCA9IEBfOworICAgIGZvciAoQG91dCkgewor ICAgICAgICBzL15ccysvLzsKKyAgICAgICAgcy9ccyskLy87CisgICAgfQorICAgIHJldHVybiB3 YW50YXJyYXkgPyBAb3V0IDogJG91dFswXTsKK30KKworIyBDcmVhdGUgYW5kIHN0YXJ0IHB1YiBz dWIgbm9kZXMKK215ICRwdWJfbm9kZSA9IGluaXRfcHViX25vZGUoInJlZ3Jlc3MiKTsKK215ICRz dWJfbm9kZSA9IGluaXRfc3ViX25vZGUoInJlZ3Jlc3MiKTsKKyRwdWJfbm9kZSAtPiBzdGFydDsK KyRzdWJfbm9kZSAtPiBzdGFydDsKKworIyBDb21tZW50IHRoZSBleGVjdXRpb24gdGVtcG9yYXJp bHksIGFuIGVycm9yIGluIGRkbF9kZXBhcnNlLmMgd2lsbCBjYXVzZSB0aGUgZGF0YWJhc2UgZXhp dHMgYWJub3JtYWxseSwgZXJyb3Igc2lnbmF0dXJlOgorIworIyAyMDIyLTEyLTAzIDIzOjAyOjQ0 Ljc3OCBVVEMgWzEyOTEwMl0gcGdfcmVncmVzcy90YWJsZXNwYWNlIExPRzogIHN0YXRlbWVudDog QUxURVIgVEFCTEUgQUxMIElOIFRBQkxFU1BBQ0UgcmVncmVzc190YmxzcGFjZV9yZW5hbWVkIFNF VCBUQUJMRVNQQUNFIHBnX2RlZmF1bHQ7CisjIFRSQVA6IGZhaWxlZCBBc3NlcnQoIklzQShzdG10 LCBBbHRlclRhYmxlU3RtdCkiKSwgRmlsZTogImRkbF9kZXBhcnNlLmMiLCBMaW5lOiAzMzcxLCBQ SUQ6IDEyOTEwMgorIyBwb3N0Z3JlczogcmVncmVzc19wdWI6IHJ1bnFpIHBvc3RncmVzIFtsb2Nh bF0gQUxURVIgVEFCTEUoRXhjZXB0aW9uYWxDb25kaXRpb24rMHhiYilbMHg1NjNiZDZlYTViMGRd CisjIC4uLgorIyAvbGliL3g4Nl82NC1saW51eC1nbnUvbGliYy5zby42KCsweDI5ZDkwKVsweDdm ZDZhNzRhNmQ5MF0KKyMgL2xpYi94ODZfNjQtbGludXgtZ251L2xpYmMuc28uNihfX2xpYmNfc3Rh cnRfbWFpbisweDgwKVsweDdmZDZhNzRhNmU0MF0KKyMgcG9zdGdyZXM6IHJlZ3Jlc3NfcHViOiBy dW5xaSBwb3N0Z3JlcyBbbG9jYWxdIEFMVEVSIFRBQkxFKF9zdGFydCsweDI1KVsweDU2M2JkNjcy ZjFlNV0KKyMgMjAyMi0xMi0wMyAyMzowMjo0NC44NTAgVVRDIFsxMjkwNThdIExPRzogIHNlcnZl ciBwcm9jZXNzIChQSUQgMTI5MTAyKSB3YXMgdGVybWluYXRlZCBieSBzaWduYWwgNjogQWJvcnRl ZAorIyAyMDIyLTEyLTAzIDIzOjAyOjQ0Ljg1MCBVVEMgWzEyOTA1OF0gREVUQUlMOiAgRmFpbGVk IHByb2Nlc3Mgd2FzIHJ1bm5pbmc6IEFMVEVSIFRBQkxFIEFMTCBJTiBUQUJMRVNQQUNFIHJlZ3Jl c3NfdGJsc3BhY2VfcmVuYW1lZCBTRVQgVEFCTEVTUEFDRSBwZ19kZWZhdWx0OworIyAyMDIyLTEy LTAzIDIzOjAyOjQ0Ljg1MCBVVEMgWzEyOTA1OF0gTE9HOiAgdGVybWluYXRpbmcgYW55IG90aGVy IGFjdGl2ZSBzZXJ2ZXIgcHJvY2Vzc2VzCisjIDIwMjItMTItMDMgMjM6MDI6NDQuODUxIFVUQyBb MTI5MDU4XSBMT0c6ICBzaHV0dGluZyBkb3duIGJlY2F1c2UgcmVzdGFydF9hZnRlcl9jcmFzaCBp cyBvZmYKKyMgMjAyMi0xMi0wMyAyMzowMjo0NC44NTIgVVRDIFsxMjkwNThdIExPRzogIGRhdGFi YXNlIHN5c3RlbSBpcyBzaHV0IGRvd24KKworIyBldmFsIHtleGVjdXRlX3JlZ3Jlc3NfdGVzdCgk cHViX25vZGUsICRzdWJfbm9kZSk7fTsKKyMgaWYgKCRAIG5lICIiKQorIyB7CisjICAgICBmYWls KCRAKTsKKyMgfQorCisjIENsb3NlIG5vZGVzCiskcHViX25vZGUtPnN0b3A7Ciskc3ViX25vZGUt PnN0b3A7CisKK3Bhc3MoInJlZ3Jlc3NzaW9uIHRlc3QgcGFzc2VkIik7CisKK2RvbmVfdGVzdGlu ZygpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21v ZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy0t MS4wLnNxbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3Rlc3Rf ZGRsX2RlcGFyc2VfcmVncmVzcy0tMS4wLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwLi4xNDA3MGNkNTFmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLS0xLjAu c3FsCkBAIC0wLDAgKzEsOSBAQAorLyogc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNl X3JlZ3Jlc3MvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLS0xLjAuc3FsICovCisKKy0tIGNvbXBs YWluIGlmIHNjcmlwdCBpcyBzb3VyY2VkIGluIHBzcWwsIHJhdGhlciB0aGFuIHZpYSBDUkVBVEUg RVhURU5TSU9OCitcZWNobyBVc2UgIkNSRUFURSBFWFRFTlNJT04gdGVzdF9kZGxfZGVwYXJzZV9y ZWdyZXNzIiB0byBsb2FkIHRoaXMgZmlsZS4gXHF1aXQKKworQ1JFQVRFIEZVTkNUSU9OIGRlcGFy c2VfZHJvcF9kZGwoSU4gb2JqaWRlbnRpdHkgdGV4dCwKKyAgICBJTiBvYmplY3R0eXBlIHRleHQp CisgIFJFVFVSTlMgdGV4dCBJTU1VVEFCTEUgU1RSSUNUCisgIEFTICdNT0RVTEVfUEFUSE5BTUUn IExBTkdVQUdFIEM7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdGVzdF9kZGxfZGVwYXJzZV9y ZWdyZXNzLmMgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy90ZXN0 X2RkbF9kZXBhcnNlX3JlZ3Jlc3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwLi5iZDY5OTJiZGZkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLmMKQEAgLTAsMCAr MSw1OSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiB0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MuYwor ICoJCVN1cHBvcnQgZnVuY3Rpb25zIGZvciB0aGUgdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzIG1v ZHVsZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBE ZXZlbG9wbWVudCBHcm91cAorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy90ZXN0L21v ZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy5j CisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRl ICJjYXRhbG9nL3BnX3R5cGUuaCIKKyNpbmNsdWRlICJmdW5jYXBpLmgiCisjaW5jbHVkZSAibm9k ZXMvZXhlY25vZGVzLmgiCisjaW5jbHVkZSAidGNvcC9kZXBhcnNlX3V0aWxpdHkuaCIKKyNpbmNs dWRlICJ0Y29wL3V0aWxpdHkuaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1 ZGUgInRjb3AvZGRsX2RlcGFyc2UuaCIKKworUEdfTU9EVUxFX01BR0lDOworCitQR19GVU5DVElP Tl9JTkZPX1YxKGRlcGFyc2VfZHJvcF9kZGwpOworCisvKgorICogR2l2ZW4gb2JqZWN0X2lkZW50 aXR5IGFuZCBvYmplY3RfdHlwZSBvZiBkcm9wcGVkIG9iamVjdCwgcmV0dXJuIGEgSlNPTiByZXBy ZXNlbnRhdGlvbiBvZiBEUk9QIGNvbW1hbmQuCisgKi8KK0RhdHVtCitkZXBhcnNlX2Ryb3BfZGRs KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJdGV4dAkgICAqb2JqaWRlbnRpdHkgPSBQR19HRVRBUkdf VEVYVF9QKDApOworCWNvbnN0IGNoYXIJICAgKm9iamlkZW50aXR5X3N0ciA9IHRleHRfdG9fY3N0 cmluZyhvYmppZGVudGl0eSk7CisJdGV4dAkgICAqb2JqZWN0dHlwZSA9IFBHX0dFVEFSR19URVhU X1AoMSk7CisJY29uc3QgY2hhcgkgICAqb2JqZWN0dHlwZV9zdHIgPSB0ZXh0X3RvX2NzdHJpbmco b2JqZWN0dHlwZSk7CisKKwljaGFyCQkgICAqY29tbWFuZDsKKworCS8vIGNvbnN0cmFpbnQgaXMg cGFydCBvZiBhbHRlciB0YWJsZSBjb21tYW5kLCBubyBuZWVkIHRvIGRyb3AgaW4gRFJPUCBjb21t YW5kCisJaWYgKHN0cmNtcChvYmplY3R0eXBlX3N0ciwgInRhYmxlIGNvbnN0cmFpbnQiKSA9PSAw KSB7CisJCVBHX1JFVFVSTl9OVUxMKCk7CisJfSBlbHNlIGlmIChzdHJjbXAob2JqZWN0dHlwZV9z dHIsICJ0b2FzdCB0YWJsZSIpID09IDApIHsKKwkJb2JqZWN0dHlwZV9zdHIgPSAidGFibGUiOwor CX0gIGVsc2UgaWYgKHN0cmNtcChvYmplY3R0eXBlX3N0ciwgImRlZmF1bHQgdmFsdWUiKSA9PSAw KSB7CisJCVBHX1JFVFVSTl9OVUxMKCk7CisJfSBlbHNlIGlmIChzdHJjbXAob2JqZWN0dHlwZV9z dHIsICJvcGVyYXRvciBvZiBhY2Nlc3MgbWV0aG9kIikgPT0gMCkgeworCQlQR19SRVRVUk5fTlVM TCgpOworCX0gZWxzZSBpZiAoc3RyY21wKG9iamVjdHR5cGVfc3RyLCAiZnVuY3Rpb24gb2YgYWNj ZXNzIG1ldGhvZCIpID09IDApIHsKKwkJUEdfUkVUVVJOX05VTEwoKTsKKwl9IGVsc2UgaWYgKHN0 cmNtcChvYmplY3R0eXBlX3N0ciwgInRhYmxlIGNvbHVtbiIpID09IDApIHsKKwkJUEdfUkVUVVJO X05VTEwoKTsKKwl9CisKKwljb21tYW5kID0gZGVwYXJzZV9kcm9wX2NvbW1hbmQob2JqaWRlbnRp dHlfc3RyLCBvYmplY3R0eXBlX3N0ciwgRFJPUF9DQVNDQURFKTsKKworCWlmIChjb21tYW5kKQor CQlQR19SRVRVUk5fVEVYVF9QKGNzdHJpbmdfdG9fdGV4dChjb21tYW5kKSk7CisKKwlQR19SRVRV Uk5fTlVMTCgpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Ny Yy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3Rlc3RfZGRsX2RlcGFyc2Vf cmVncmVzcy5jb250cm9sIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jl c3MvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLmNvbnRyb2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMC4uYTFmOTM0ZTY1OAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0 L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVz cy5jb250cm9sCkBAIC0wLDAgKzEsNCBAQAorY29tbWVudCA9ICdUZXN0IGNvZGUgZm9yIERETCBk ZXBhcnNlIHJlZ3Jlc3MgZmVhdHVyZScKK2RlZmF1bHRfdmVyc2lvbiA9ICcxLjAnCittb2R1bGVf cGF0aG5hbWUgPSAnJGxpYmRpci90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MnCityZWxvY2F0YWJs ZSA9IHRydWUKLS0gCjIuMzguMQoK --00000000000047050c05f1ae2f85 Content-Type: application/octet-stream; name="v60-0001-Infrastructure-to-support-DDL-deparsing.patch" Content-Disposition: attachment; filename="v60-0001-Infrastructure-to-support-DDL-deparsing.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lcm3fweb0 RnJvbSA3OWJkY2Q2ZjkzY2IwYWY0MDYyZTU5NzdhMzNlZGE1MTdkN2M0Yjg2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBWaWduZXNoIEMgPHZpZ25lc2gyMUBnbWFpbC5jb20+CkRhdGU6 IFR1ZSwgMjAgRGVjIDIwMjIgMTc6NDU6MDcgKzA1MzAKU3ViamVjdDogW1BBVENIIDEvN10gSW5m cmFzdHJ1Y3R1cmUgdG8gc3VwcG9ydCBEREwgZGVwYXJzaW5nLgoKSW5mcmFzdHJ1Y3R1cmUgdG8g c3VwcG9ydCBEREwgZGVwYXJzaW5nLgotLS0KIHNyYy9iYWNrZW5kL2NhdGFsb2cvYWNsY2hrLmMg ICAgICAgICAgICAgICAgIHwgICA5ICstCiBzcmMvYmFja2VuZC9jYXRhbG9nL29iamVjdGFkZHJl c3MuYyAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvY29sbGF0aW9uY21k cy5jICAgICAgICAgfCAgMTAgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIu YyAgICAgICAgIHwgIDQwICstLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VjbGFiZWwuYyAgICAg ICAgICAgICAgfCAgIDMgKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYyAgICAgICAg ICAgICAgfCAgMzMgKysrCiBzcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYyAgICAgICAgICAgICAg ICAgICB8ICA5MSArKysrKystCiBzcmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0X3R5cGUuYyAg ICAgICAgICB8ICAgNCArLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JlZ3Byb2MuYyAgICAgICAg ICAgICAgfCAgNTMgKysrKwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jICAgICAg ICAgICAgfCAyNTggKysrKysrKysrKysrKystLS0tLQogc3JjL2luY2x1ZGUvY29tbWFuZHMvY29s bGF0aW9uY21kcy5oICAgICAgICAgfCAgIDMgKy0KIHNyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50 X3RyaWdnZXIuaCAgICAgICAgIHwgIDM5ICsrKwogc3JjL2luY2x1ZGUvY29tbWFuZHMvc2VxdWVu Y2UuaCAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvdGNvcC91dGlsaXR5LmggICAg ICAgICAgICAgICAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvdXRpbHMvYWNsLmggICAgICAgICAg ICAgICAgICAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvdXRpbHMvYWNsY2hrX2ludGVybmFsLmgg ICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvdXRpbHMvYnVpbHRpbnMuaCAgICAgICAgICAg ICAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvdXRpbHMvcnVsZXV0aWxzLmggICAgICAgICAgICAg ICAgfCAgMTkgKysKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvb2JqZWN0X2FkZHJlc3Mub3V0 IHwgICAyICstCiAxOSBmaWxlcyBjaGFuZ2VkLCA0NTUgaW5zZXJ0aW9ucygrKSwgMTE5IGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvYWNsY2hrLmMgYi9zcmMv YmFja2VuZC9jYXRhbG9nL2FjbGNoay5jCmluZGV4IGNjNmUyNjA5MDguLmJlZGM0NTdiOTYgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvYWNsY2hrLmMKKysrIGIvc3JjL2JhY2tlbmQv Y2F0YWxvZy9hY2xjaGsuYwpAQCAtMTI5LDcgKzEyOSw2IEBAIHN0YXRpYyB2b2lkIGV4cGFuZF9h bGxfY29sX3ByaXZpbGVnZXMoT2lkIHRhYmxlX29pZCwgRm9ybV9wZ19jbGFzcyBjbGFzc0Zvcm0s CiAJCQkJCQkJCQkgIEFjbE1vZGUgKmNvbF9wcml2aWxlZ2VzLAogCQkJCQkJCQkJICBpbnQgbnVt X2NvbF9wcml2aWxlZ2VzKTsKIHN0YXRpYyBBY2xNb2RlIHN0cmluZ190b19wcml2aWxlZ2UoY29u c3QgY2hhciAqcHJpdm5hbWUpOwotc3RhdGljIGNvbnN0IGNoYXIgKnByaXZpbGVnZV90b19zdHJp bmcoQWNsTW9kZSBwcml2aWxlZ2UpOwogc3RhdGljIEFjbE1vZGUgcmVzdHJpY3RfYW5kX2NoZWNr X2dyYW50KGJvb2wgaXNfZ3JhbnQsIEFjbE1vZGUgYXZhaWxfZ29wdGlvbnMsCiAJCQkJCQkJCQkJ Ym9vbCBhbGxfcHJpdnMsIEFjbE1vZGUgcHJpdmlsZWdlcywKIAkJCQkJCQkJCQlPaWQgb2JqZWN0 SWQsIE9pZCBncmFudG9ySWQsCkBAIC0zODUsMTEgKzM4NCwxMCBAQCBFeGVjdXRlR3JhbnRTdG10 KEdyYW50U3RtdCAqc3RtdCkKIAlMaXN0Q2VsbCAgICpjZWxsOwogCWNvbnN0IGNoYXIgKmVycm9y bXNnOwogCUFjbE1vZGUJCWFsbF9wcml2aWxlZ2VzOworCU9pZAkJCWdyYW50b3IgPSBJbnZhbGlk T2lkOwogCiAJaWYgKHN0bXQtPmdyYW50b3IpCiAJewotCQlPaWQJCQlncmFudG9yOwotCiAJCWdy YW50b3IgPSBnZXRfcm9sZXNwZWNfb2lkKHN0bXQtPmdyYW50b3IsIGZhbHNlKTsKIAogCQkvKgpA QCAtNDA4LDYgKzQwNiw5IEBAIEV4ZWN1dGVHcmFudFN0bXQoR3JhbnRTdG10ICpzdG10KQogCWlz dG10LmlzX2dyYW50ID0gc3RtdC0+aXNfZ3JhbnQ7CiAJaXN0bXQub2JqdHlwZSA9IHN0bXQtPm9i anR5cGU7CiAKKwkvKiBDb3B5IHRoZSBncmFudG9yIGlkIG5lZWRlZCBmb3IgRERMIGRlcGFyc2lu ZyBvZiBHcmFudCAqLworCWlzdG10LmdyYW50b3JfdWlkID0gZ3JhbnRvcjsKKwogCS8qIENvbGxl Y3QgdGhlIE9JRHMgb2YgdGhlIHRhcmdldCBvYmplY3RzICovCiAJc3dpdGNoIChzdG10LT50YXJn dHlwZSkKIAl7CkBAIC0yNjI4LDcgKzI2MjksNyBAQCBzdHJpbmdfdG9fcHJpdmlsZWdlKGNvbnN0 IGNoYXIgKnByaXZuYW1lKQogCXJldHVybiAwOwkJCQkJLyogYXBwZWFzZSBjb21waWxlciAqLwog fQogCi1zdGF0aWMgY29uc3QgY2hhciAqCitjb25zdCBjaGFyICoKIHByaXZpbGVnZV90b19zdHJp bmcoQWNsTW9kZSBwcml2aWxlZ2UpCiB7CiAJc3dpdGNoIChwcml2aWxlZ2UpCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9jYXRhbG9nL29iamVjdGFkZHJlc3MuYyBiL3NyYy9iYWNrZW5kL2NhdGFs b2cvb2JqZWN0YWRkcmVzcy5jCmluZGV4IDEzNjdiNWU3YzUuLjYzMzM1N2MxNmQgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvb2JqZWN0YWRkcmVzcy5jCisrKyBiL3NyYy9iYWNrZW5k L2NhdGFsb2cvb2JqZWN0YWRkcmVzcy5jCkBAIC01OTE0LDcgKzU5MTQsNyBAQCBnZXRPYmplY3RJ ZGVudGl0eVBhcnRzKGNvbnN0IE9iamVjdEFkZHJlc3MgKm9iamVjdCwKIAkJCQl0cmFuc2Zvcm1U eXBlID0gZm9ybWF0X3R5cGVfYmVfcXVhbGlmaWVkKHRyYW5zZm9ybS0+dHJmdHlwZSk7CiAJCQkJ dHJhbnNmb3JtTGFuZyA9IGdldF9sYW5ndWFnZV9uYW1lKHRyYW5zZm9ybS0+dHJmbGFuZywgZmFs c2UpOwogCi0JCQkJYXBwZW5kU3RyaW5nSW5mbygmYnVmZmVyLCAiZm9yICVzIG9uIGxhbmd1YWdl ICVzIiwKKwkJCQlhcHBlbmRTdHJpbmdJbmZvKCZidWZmZXIsICJmb3IgJXMgbGFuZ3VhZ2UgJXMi LAogCQkJCQkJCQkgdHJhbnNmb3JtVHlwZSwKIAkJCQkJCQkJIHRyYW5zZm9ybUxhbmcpOwogCQkJ CWlmIChvYmpuYW1lKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29sbGF0aW9u Y21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29sbGF0aW9uY21kcy5jCmluZGV4IDZhNDMx MWNjNjMuLmFiMmFmMmQyNzcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvbGxh dGlvbmNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb2xsYXRpb25jbWRzLmMKQEAg LTUyLDcgKzUyLDggQEAgdHlwZWRlZiBzdHJ1Y3QKICAqIENSRUFURSBDT0xMQVRJT04KICAqLwog T2JqZWN0QWRkcmVzcwotRGVmaW5lQ29sbGF0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgTGlzdCAq bmFtZXMsIExpc3QgKnBhcmFtZXRlcnMsIGJvb2wgaWZfbm90X2V4aXN0cykKK0RlZmluZUNvbGxh dGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIExpc3QgKm5hbWVzLCBMaXN0ICpwYXJhbWV0ZXJzLAor CQkJCSBib29sIGlmX25vdF9leGlzdHMsIE9iamVjdEFkZHJlc3MgKmZyb21fZXhpc3RpbmdfY29s bGlkKQogewogCWNoYXIJICAgKmNvbGxOYW1lOwogCU9pZAkJCWNvbGxOYW1lc3BhY2U7CkBAIC0x MzksNiArMTQwLDEzIEBAIERlZmluZUNvbGxhdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIExpc3Qg Km5hbWVzLCBMaXN0ICpwYXJhbWV0ZXJzLCBib29sIGlmX25vdF9lCiAJCWlmICghSGVhcFR1cGxl SXNWYWxpZCh0cCkpCiAJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgY29s bGF0aW9uICV1IiwgY29sbGlkKTsKIAorCQkvKgorCQkgKiBNYWtlIGZyb20gZXhpc3RpbmcgY29s bGF0aW9uaWQgYXZhaWxhYmxlIHRvIGNhbGxlcnMgZm9yIHN0YXRlbWVudCBzdWNoIGFzCisJCSAq IENSRUFURSBDT0xMQVRJT04gYW55X25hbWUgRlJPTSBhbnlfbmFtZQorCQkgKi8KKwkJaWYgKGZy b21fZXhpc3RpbmdfY29sbGlkICYmIE9pZElzVmFsaWQoY29sbGlkKSkKKwkJCU9iamVjdEFkZHJl c3NTZXQoKmZyb21fZXhpc3RpbmdfY29sbGlkLCBDb2xsYXRpb25SZWxhdGlvbklkLCBjb2xsaWQp OworCiAJCWNvbGxwcm92aWRlciA9ICgoRm9ybV9wZ19jb2xsYXRpb24pIEdFVFNUUlVDVCh0cCkp LT5jb2xscHJvdmlkZXI7CiAJCWNvbGxpc2RldGVybWluaXN0aWMgPSAoKEZvcm1fcGdfY29sbGF0 aW9uKSBHRVRTVFJVQ1QodHApKS0+Y29sbGlzZGV0ZXJtaW5pc3RpYzsKIAkJY29sbGVuY29kaW5n ID0gKChGb3JtX3BnX2NvbGxhdGlvbikgR0VUU1RSVUNUKHRwKSktPmNvbGxlbmNvZGluZzsKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYwppbmRleCBkNGIwMGQxYTgyLi42OTAyNzA5OTU2 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMKKysrIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCkBAIC00OCw0NSArNDgsNyBAQAog I2luY2x1ZGUgInV0aWxzL3JlbC5oIgogI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCiAKLXR5 cGVkZWYgc3RydWN0IEV2ZW50VHJpZ2dlclF1ZXJ5U3RhdGUKLXsKLQkvKiBtZW1vcnkgY29udGV4 dCBmb3IgdGhpcyBzdGF0ZSdzIG9iamVjdHMgKi8KLQlNZW1vcnlDb250ZXh0IGN4dDsKLQotCS8q IHNxbF9kcm9wICovCi0Jc2xpc3RfaGVhZAlTUUxEcm9wTGlzdDsKLQlib29sCQlpbl9zcWxfZHJv cDsKLQotCS8qIHRhYmxlX3Jld3JpdGUgKi8KLQlPaWQJCQl0YWJsZV9yZXdyaXRlX29pZDsJLyog SW52YWxpZE9pZCwgb3Igc2V0IGZvciB0YWJsZV9yZXdyaXRlCi0JCQkJCQkJCQkgKiBldmVudCAq LwotCWludAkJCXRhYmxlX3Jld3JpdGVfcmVhc29uOwkvKiBBVF9SRVdSSVRFIHJlYXNvbiAqLwot Ci0JLyogU3VwcG9ydCBmb3IgY29tbWFuZCBjb2xsZWN0aW9uICovCi0JYm9vbAkJY29tbWFuZENv bGxlY3Rpb25JbmhpYml0ZWQ7Ci0JQ29sbGVjdGVkQ29tbWFuZCAqY3VycmVudENvbW1hbmQ7Ci0J TGlzdAkgICAqY29tbWFuZExpc3Q7CS8qIGxpc3Qgb2YgQ29sbGVjdGVkQ29tbWFuZDsgc2VlCi0J CQkJCQkJCSAqIGRlcGFyc2VfdXRpbGl0eS5oICovCi0Jc3RydWN0IEV2ZW50VHJpZ2dlclF1ZXJ5 U3RhdGUgKnByZXZpb3VzOwotfSBFdmVudFRyaWdnZXJRdWVyeVN0YXRlOwotCi1zdGF0aWMgRXZl bnRUcmlnZ2VyUXVlcnlTdGF0ZSAqY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlID0gTlVMTDsKLQot LyogU3VwcG9ydCBmb3IgZHJvcHBlZCBvYmplY3RzICovCi10eXBlZGVmIHN0cnVjdCBTUUxEcm9w T2JqZWN0Ci17Ci0JT2JqZWN0QWRkcmVzcyBhZGRyZXNzOwotCWNvbnN0IGNoYXIgKnNjaGVtYW5h bWU7Ci0JY29uc3QgY2hhciAqb2JqbmFtZTsKLQljb25zdCBjaGFyICpvYmppZGVudGl0eTsKLQlj b25zdCBjaGFyICpvYmplY3R0eXBlOwotCUxpc3QJICAgKmFkZHJuYW1lczsKLQlMaXN0CSAgICph ZGRyYXJnczsKLQlib29sCQlvcmlnaW5hbDsKLQlib29sCQlub3JtYWw7Ci0JYm9vbAkJaXN0ZW1w OwotCXNsaXN0X25vZGUJbmV4dDsKLX0gU1FMRHJvcE9iamVjdDsKK0V2ZW50VHJpZ2dlclF1ZXJ5 U3RhdGUgKmN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZSA9IE5VTEw7CiAKIHN0YXRpYyB2b2lkIEFs dGVyRXZlbnRUcmlnZ2VyT3duZXJfaW50ZXJuYWwoUmVsYXRpb24gcmVsLAogCQkJCQkJCQkJCQlI ZWFwVHVwbGUgdHVwLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VjbGFiZWwu YyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3NlY2xhYmVsLmMKaW5kZXggN2ZmMTZlMzI3Ni4uMWU4 MzFmZjcyMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VjbGFiZWwuYworKysg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy9zZWNsYWJlbC5jCkBAIC0xMzQsNiArMTM0LDkgQEAgRXhl Y1NlY0xhYmVsU3RtdChTZWNMYWJlbFN0bXQgKnN0bXQpCiAJCQkJCShlcnJjb2RlKEVSUkNPREVf SU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAogCQkJCQkgZXJybXNnKCJtdXN0IHNwZWNpZnkgcHJv dmlkZXIgd2hlbiBtdWx0aXBsZSBzZWN1cml0eSBsYWJlbCBwcm92aWRlcnMgaGF2ZSBiZWVuIGxv YWRlZCIpKSk7CiAJCXByb3ZpZGVyID0gKExhYmVsUHJvdmlkZXIgKikgbGluaXRpYWwobGFiZWxf cHJvdmlkZXJfbGlzdCk7CisKKwkJLyogQ29weSB0aGUgcHJvdmlkZXIgbmFtZSB0byB0aGUgcGFy c2V0cmVlLCBuZWVkZWQgZm9yIERETCBkZXBhcnNpbmcgb2YgU2VjTGFiZWxTdG10ICovCisJCXN0 bXQtPnByb3ZpZGVyID0gcHN0cmR1cChwcm92aWRlci0+cHJvdmlkZXJfbmFtZSk7CiAJfQogCWVs c2UKIAl7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYwppbmRleCBiZmUyNzljZGRmLi4zMDQ5ZTBlOTAy IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jCisrKyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL3NlcXVlbmNlLmMKQEAgLTE3MDgsNiArMTcwOCwzOSBAQCBwcm9jZXNz X293bmVkX2J5KFJlbGF0aW9uIHNlcXJlbCwgTGlzdCAqb3duZWRfYnksIGJvb2wgZm9yX2lkZW50 aXR5KQogCQlyZWxhdGlvbl9jbG9zZSh0YWJsZXJlbCwgTm9Mb2NrKTsKIH0KIAorLyoKKyAqIFJl dHVybiBzZXF1ZW5jZSBwYXJhbWV0ZXJzLCBkZXRhaWxlZAorICovCitGb3JtX3BnX3NlcXVlbmNl X2RhdGEKK2dldF9zZXF1ZW5jZV92YWx1ZXMoT2lkIHNlcXVlbmNlSWQpCit7CisJQnVmZmVyICAg ICAgYnVmOworCVNlcVRhYmxlICAgIGVsbTsKKwlSZWxhdGlvbiAgICBzZXFyZWw7CisJSGVhcFR1 cGxlRGF0YSBzZXF0dXBsZTsKKwlGb3JtX3BnX3NlcXVlbmNlX2RhdGEgc2VxOworCUZvcm1fcGdf c2VxdWVuY2VfZGF0YSByZXRTZXE7CisKKwkvKiBPcGVuIGFuZCBBY2Nlc3NTaGFyZUxvY2sgc2Vx dWVuY2UgKi8KKwlpbml0X3NlcXVlbmNlKHNlcXVlbmNlSWQsICZlbG0sICZzZXFyZWwpOworCisJ aWYgKHBnX2NsYXNzX2FjbGNoZWNrKHNlcXVlbmNlSWQsIEdldFVzZXJJZCgpLAorCQkJQUNMX1NF TEVDVCB8IEFDTF9VUERBVEUgfCBBQ0xfVVNBR0UpICE9IEFDTENIRUNLX09LKQorCQllcmVwb3J0 KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOU1VGRklDSUVOVF9QUklWSUxFR0UpLAor CQkJCQkgZXJybXNnKCJwZXJtaXNzaW9uIGRlbmllZCBmb3Igc2VxdWVuY2UgJXMiLAorCQkJCQkJ CVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHNlcXJlbCkpKSk7CisKKwlzZXEgPSByZWFkX3NlcV90 dXBsZShzZXFyZWwsICZidWYsICZzZXF0dXBsZSk7CisJcmV0U2VxID0gcGFsbG9jKHNpemVvZihG b3JtRGF0YV9wZ19zZXF1ZW5jZV9kYXRhKSk7CisKKwltZW1jcHkocmV0U2VxLCBzZXEsIHNpemVv ZihGb3JtRGF0YV9wZ19zZXF1ZW5jZV9kYXRhKSk7CisKKwlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1 Zik7CisJcmVsYXRpb25fY2xvc2Uoc2VxcmVsLCBOb0xvY2spOworCisJcmV0dXJuIHJldFNlcTsK K30KIAogLyoKICAqIFJldHVybiBzZXF1ZW5jZSBwYXJhbWV0ZXJzIGluIGEgbGlzdCBvZiB0aGUg Zm9ybSBjcmVhdGVkIGJ5IHRoZSBwYXJzZXIuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC90Y29w L3V0aWxpdHkuYyBiL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jCmluZGV4IGM3ZDlkOTZiNDUu LjFlODNjZmUzOTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jCisrKyBi L3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jCkBAIC0xNDQ2LDcgKzE0NDYsOCBAQCBQcm9jZXNz VXRpbGl0eVNsb3coUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCQkJCWFkZHJlc3MgPSBEZWZpbmVD b2xsYXRpb24ocHN0YXRlLAogCQkJCQkJCQkJCQkJCSAgc3RtdC0+ZGVmbmFtZXMsCiAJCQkJCQkJ CQkJCQkJICBzdG10LT5kZWZpbml0aW9uLAotCQkJCQkJCQkJCQkJCSAgc3RtdC0+aWZfbm90X2V4 aXN0cyk7CisJCQkJCQkJCQkJCQkJICBzdG10LT5pZl9ub3RfZXhpc3RzLAorCQkJCQkJCQkJCQkJ CSAgJnNlY29uZGFyeU9iamVjdCk7CiAJCQkJCQkJYnJlYWs7CiAJCQkJCQlkZWZhdWx0OgogCQkJ CQkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgZGVmaW5lIHN0bXQgdHlwZTogJWQiLApAQCAt MjE5Niw2ICsyMTk3LDk0IEBAIFV0aWxpdHlDb250YWluc1F1ZXJ5KE5vZGUgKnBhcnNldHJlZSkK IAl9CiB9CiAKKy8qCisgKiBSZXR1cm4gdGhlIGdpdmVuIG9iamVjdCB0eXBlIGFzIGEgc3RyaW5n LgorICovCitjb25zdCBjaGFyICoKK3N0cmluZ2lmeV9vYmp0eXBlKE9iamVjdFR5cGUgb2JqdHlw ZSwgYm9vbCBpc2dyYW50KQoreworCXN3aXRjaCAob2JqdHlwZSkKKwl7CisJCWNhc2UgT0JKRUNU X0FHR1JFR0FURToKKwkJCXJldHVybiAiQUdHUkVHQVRFIjsKKwkJY2FzZSBPQkpFQ1RfQ0FTVDoK KwkJCXJldHVybiAiQ0FTVCI7CisJCWNhc2UgT0JKRUNUX0NPTExBVElPTjoKKwkJCXJldHVybiAi Q09MTEFUSU9OIjsKKwkJY2FzZSBPQkpFQ1RfQ09MVU1OOgorCQkJcmV0dXJuIGlzZ3JhbnQgPyAi VEFCTEUiIDogIkNPTFVNTiI7CisJCWNhc2UgT0JKRUNUX0NPTlZFUlNJT046CisJCQlyZXR1cm4g IkNPTlZFUlNJT04iOworCQljYXNlIE9CSkVDVF9EQVRBQkFTRToKKwkJCXJldHVybiAiREFUQUJB U0UiOworCQljYXNlIE9CSkVDVF9ET01BSU46CisJCQlyZXR1cm4gIkRPTUFJTiI7CisJCWNhc2Ug T0JKRUNUX0VWRU5UX1RSSUdHRVI6CisJCQlyZXR1cm4gIkVWRU5UIFRSSUdHRVIiOworCQljYXNl IE9CSkVDVF9FWFRFTlNJT046CisJCQlyZXR1cm4gIkVYVEVOU0lPTiI7CisJCWNhc2UgT0JKRUNU X0ZEVzoKKwkJCXJldHVybiAiRk9SRUlHTiBEQVRBIFdSQVBQRVIiOworCQljYXNlIE9CSkVDVF9G T1JFSUdOX1NFUlZFUjoKKwkJCXJldHVybiBpc2dyYW50ID8gIkZPUkVJR04gU0VSVkVSIiA6ICJT RVJWRVIiOworCQljYXNlIE9CSkVDVF9GT1JFSUdOX1RBQkxFOgorCQkJcmV0dXJuICJGT1JFSUdO IFRBQkxFIjsKKwkJY2FzZSBPQkpFQ1RfRlVOQ1RJT046CisJCQlyZXR1cm4gIkZVTkNUSU9OIjsK KwkJY2FzZSBPQkpFQ1RfSU5ERVg6CisJCQlyZXR1cm4gIklOREVYIjsKKwkJY2FzZSBPQkpFQ1Rf TEFOR1VBR0U6CisJCQlyZXR1cm4gIkxBTkdVQUdFIjsKKwkJY2FzZSBPQkpFQ1RfTEFSR0VPQkpF Q1Q6CisJCQlyZXR1cm4gIkxBUkdFIE9CSkVDVCI7CisJCWNhc2UgT0JKRUNUX01BVFZJRVc6CisJ CQlyZXR1cm4gIk1BVEVSSUFMSVpFRCBWSUVXIjsKKwkJY2FzZSBPQkpFQ1RfT1BDTEFTUzoKKwkJ CXJldHVybiAiT1BFUkFUT1IgQ0xBU1MiOworCQljYXNlIE9CSkVDVF9PUEVSQVRPUjoKKwkJCXJl dHVybiAiT1BFUkFUT1IiOworCQljYXNlIE9CSkVDVF9PUEZBTUlMWToKKwkJCXJldHVybiAiT1BF UkFUT1IgRkFNSUxZIjsKKwkJY2FzZSBPQkpFQ1RfUE9MSUNZOgorCQkJcmV0dXJuICJQT0xJQ1ki OworCQljYXNlIE9CSkVDVF9QUk9DRURVUkU6CisJCQlyZXR1cm4gIlBST0NFRFVSRSI7CisJCWNh c2UgT0JKRUNUX1JPTEU6CisJCQlyZXR1cm4gIlJPTEUiOworCQljYXNlIE9CSkVDVF9ST1VUSU5F OgorCQkJcmV0dXJuICJST1VUSU5FIjsKKwkJY2FzZSBPQkpFQ1RfUlVMRToKKwkJCXJldHVybiAi UlVMRSI7CisJCWNhc2UgT0JKRUNUX1NDSEVNQToKKwkJCXJldHVybiAiU0NIRU1BIjsKKwkJY2Fz ZSBPQkpFQ1RfU0VRVUVOQ0U6CisJCQlyZXR1cm4gIlNFUVVFTkNFIjsKKwkJY2FzZSBPQkpFQ1Rf U1RBVElTVElDX0VYVDoKKwkJCXJldHVybiAiU1RBVElTVElDUyI7CisJCWNhc2UgT0JKRUNUX1RB QkxFOgorCQkJcmV0dXJuICJUQUJMRSI7CisJCWNhc2UgT0JKRUNUX1RBQkxFU1BBQ0U6CisJCQly ZXR1cm4gIlRBQkxFU1BBQ0UiOworCQljYXNlIE9CSkVDVF9UUklHR0VSOgorCQkJcmV0dXJuICJU UklHR0VSIjsKKwkJY2FzZSBPQkpFQ1RfVFNDT05GSUdVUkFUSU9OOgorCQkJcmV0dXJuICJURVhU IFNFQVJDSCBDT05GSUdVUkFUSU9OIjsKKwkJY2FzZSBPQkpFQ1RfVFNESUNUSU9OQVJZOgorCQkJ cmV0dXJuICJURVhUIFNFQVJDSCBESUNUSU9OQVJZIjsKKwkJY2FzZSBPQkpFQ1RfVFNQQVJTRVI6 CisJCQlyZXR1cm4gIlRFWFQgU0VBUkNIIFBBUlNFUiI7CisJCWNhc2UgT0JKRUNUX1RTVEVNUExB VEU6CisJCQlyZXR1cm4gIlRFWFQgU0VBUkNIIFRFTVBMQVRFIjsKKwkJY2FzZSBPQkpFQ1RfVFlQ RToKKwkJCXJldHVybiAiVFlQRSI7CisJCWNhc2UgT0JKRUNUX1VTRVJfTUFQUElORzoKKwkJCXJl dHVybiAiVVNFUiBNQVBQSU5HIjsKKwkJY2FzZSBPQkpFQ1RfVklFVzoKKwkJCXJldHVybiAiVklF VyI7CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgb2JqZWN0IHR5cGUg JWQiLCBvYmp0eXBlKTsKKwl9Cit9CiAKIC8qCiAgKiBBbHRlck9iamVjdFR5cGVDb21tYW5kVGFn CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0X3R5cGUuYyBiL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9mb3JtYXRfdHlwZS5jCmluZGV4IDEyNDAyYTA2MzcuLjdiNDc2YWRi MjMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXRfdHlwZS5jCisrKyBi L3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXRfdHlwZS5jCkBAIC0yNyw4ICsyNyw2IEBACiAj aW5jbHVkZSAidXRpbHMvbnVtZXJpYy5oIgogI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCiAK LXN0YXRpYyBjaGFyICpwcmludFR5cG1vZChjb25zdCBjaGFyICp0eXBuYW1lLCBpbnQzMiB0eXBt b2QsIE9pZCB0eXBtb2RvdXQpOwotCiAKIC8qCiAgKiBTUUwgZnVuY3Rpb246IGZvcm1hdF90eXBl KHR5cGVfb2lkLCB0eXBlbW9kKQpAQCAtMzYzLDcgKzM2MSw3IEBAIGZvcm1hdF90eXBlX3dpdGhf dHlwZW1vZChPaWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2QpCiAvKgogICogQWRkIHR5cG1vZCBk ZWNvcmF0aW9uIHRvIHRoZSBiYXNpYyB0eXBlIG5hbWUKICAqLwotc3RhdGljIGNoYXIgKgorY2hh ciAqCiBwcmludFR5cG1vZChjb25zdCBjaGFyICp0eXBuYW1lLCBpbnQzMiB0eXBtb2QsIE9pZCB0 eXBtb2RvdXQpCiB7CiAJY2hhcgkgICAqcmVzOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L3JlZ3Byb2MuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9yZWdwcm9jLmMKaW5kZXgg Mjk2OTMwZWIzYi4uMTI4YzE3OTVhMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L3JlZ3Byb2MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcmVncHJvYy5jCkBAIC00OSw2 ICs0OSw4IEBAIHN0YXRpYyBib29sIHBhcnNlTmFtZUFuZEFyZ1R5cGVzKGNvbnN0IGNoYXIgKnN0 cmluZywgYm9vbCBhbGxvd05vbmUsCiAJCQkJCQkJCSBMaXN0ICoqbmFtZXMsIGludCAqbmFyZ3Ms IE9pZCAqYXJndHlwZXMsCiAJCQkJCQkJCSBOb2RlICplc2NvbnRleHQpOwogCitzdGF0aWMgdm9p ZCBmb3JtYXRfcHJvY2VkdXJlX2FyZ3NfaW50ZXJuYWwoRm9ybV9wZ19wcm9jIHByb2Nmb3JtLAor CQkJCQkJCQkJCSAgIFN0cmluZ0luZm8gYnVmLCBib29sIGZvcmNlX3F1YWxpZnkpOwogCiAvKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioKICAqCSBVU0VSIEkvTyBST1VUSU5FUwkJCQkJCQkJCQkJCQkJICoK QEAgLTMwNyw2ICszMDksMjkgQEAgZm9ybWF0X3Byb2NlZHVyZV9xdWFsaWZpZWQoT2lkIHByb2Nl ZHVyZV9vaWQpCiAJcmV0dXJuIGZvcm1hdF9wcm9jZWR1cmVfZXh0ZW5kZWQocHJvY2VkdXJlX29p ZCwgRk9STUFUX1BST0NfRk9SQ0VfUVVBTElGWSk7CiB9CiAKKy8qCisgKiBmb3JtYXRfcHJvY2Vk dXJlX2FyZ3MgICAtIGNvbnZlcnRzIHByb2MgT0lEIHRvICIoYXJncykiCisgKi8KK2NoYXIgKgor Zm9ybWF0X3Byb2NlZHVyZV9hcmdzKE9pZCBwcm9jZWR1cmVfb2lkLCBib29sIGZvcmNlX3F1YWxp ZnkpCit7CisJU3RyaW5nSW5mb0RhdGEgYnVmOworCUhlYXBUdXBsZSAgIHByb2N0dXA7CisJRm9y bV9wZ19wcm9jIHByb2Nmb3JtOworCisJcHJvY3R1cCA9IFNlYXJjaFN5c0NhY2hlMShQUk9DT0lE LCBPYmplY3RJZEdldERhdHVtKHByb2NlZHVyZV9vaWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFs aWQocHJvY3R1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBwcm9j ZWR1cmUgJXUiLCBwcm9jZWR1cmVfb2lkKTsKKwlwcm9jZm9ybSA9IChGb3JtX3BnX3Byb2MpIEdF VFNUUlVDVChwcm9jdHVwKTsKKworCWluaXRTdHJpbmdJbmZvKCZidWYpOworCWZvcm1hdF9wcm9j ZWR1cmVfYXJnc19pbnRlcm5hbChwcm9jZm9ybSwgJmJ1ZiwgZm9yY2VfcXVhbGlmeSk7CisKKwlS ZWxlYXNlU3lzQ2FjaGUocHJvY3R1cCk7CisKKwlyZXR1cm4gYnVmLmRhdGE7Cit9CisKIC8qCiAg KiBmb3JtYXRfcHJvY2VkdXJlX2V4dGVuZGVkIC0gY29udmVydHMgcHJvY2VkdXJlIE9JRCB0byAi cHJvX25hbWUoYXJncykiCiAgKgpAQCAtMjAxNiwzICsyMDQxLDMxIEBAIHBhcnNlTmFtZUFuZEFy Z1R5cGVzKGNvbnN0IGNoYXIgKnN0cmluZywgYm9vbCBhbGxvd05vbmUsIExpc3QgKipuYW1lcywK IAogCXJldHVybiB0cnVlOwogfQorCisvKgorICogQXBwZW5kIHRoZSBwYXJlbnRoZXNpemVkIGFy Z3VtZW50cyBvZiB0aGUgZ2l2ZW4gcGdfcHJvYyByb3cgaW50byB0aGUgb3V0cHV0CisgKiBidWZm ZXIuIGZvcmNlX3F1YWxpZnkgaW5kaWNhdGVzIHdoZXRoZXIgdG8gc2NoZW1hLXF1YWxpZnkgdHlw ZSBuYW1lcworICogcmVnYXJkbGVzcyBvZiB2aXNpYmlsaXR5LgorICovCitzdGF0aWMgdm9pZAor Zm9ybWF0X3Byb2NlZHVyZV9hcmdzX2ludGVybmFsKEZvcm1fcGdfcHJvYyBwcm9jZm9ybSwgU3Ry aW5nSW5mbyBidWYsCisJCQkJCQkJICAgYm9vbCBmb3JjZV9xdWFsaWZ5KQoreworCWludAkJCWk7 CisJY2hhcioJCSgqZnVuY1syXSkoT2lkKSA9IHtmb3JtYXRfdHlwZV9iZSwgZm9ybWF0X3R5cGVf YmVfcXVhbGlmaWVkfTsKKworCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJygnKTsKKwlmb3Ig KGkgPSAwOyBpIDwgcHJvY2Zvcm0tPnByb25hcmdzOyBpKyspCisJeworCQlPaWQJCQl0aGlzYXJn dHlwZSA9IHByb2Nmb3JtLT5wcm9hcmd0eXBlcy52YWx1ZXNbaV07CisJCWNoYXIJICAgKmFyZ3R5 cGUgPSBOVUxMOworCisJCWlmIChpID4gMCkKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1Ziwg JywnKTsKKworCQlhcmd0eXBlID0gZnVuY1tmb3JjZV9xdWFsaWZ5XSh0aGlzYXJndHlwZSk7CisJ CWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBhcmd0eXBlKTsKKwkJcGZyZWUoYXJndHlwZSk7 CisJfQorCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJyknKTsKK30KZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9y dWxldXRpbHMuYwppbmRleCA5YWM0MmVmZGJjLi4xZjQxMjA2NjE4IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L3J1bGV1dGlscy5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19vcGVy YXRvci5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfcGFydGl0aW9uZWRfdGFibGUuaCIKICNpbmNs dWRlICJjYXRhbG9nL3BnX3Byb2MuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3Jld3JpdGUuaCIK ICNpbmNsdWRlICJjYXRhbG9nL3BnX3N0YXRpc3RpY19leHQuaCIKICNpbmNsdWRlICJjYXRhbG9n L3BnX3RyaWdnZXIuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKQEAgLTM1OCw3ICsz NTksNiBAQCBzdGF0aWMgaW50CXByaW50X2Z1bmN0aW9uX2FyZ3VtZW50cyhTdHJpbmdJbmZvIGJ1 ZiwgSGVhcFR1cGxlIHByb2N0dXAsCiAJCQkJCQkJCQkgYm9vbCBwcmludF90YWJsZV9hcmdzLCBi b29sIHByaW50X2RlZmF1bHRzKTsKIHN0YXRpYyB2b2lkIHByaW50X2Z1bmN0aW9uX3JldHR5cGUo U3RyaW5nSW5mbyBidWYsIEhlYXBUdXBsZSBwcm9jdHVwKTsKIHN0YXRpYyB2b2lkIHByaW50X2Z1 bmN0aW9uX3RyZnR5cGVzKFN0cmluZ0luZm8gYnVmLCBIZWFwVHVwbGUgcHJvY3R1cCk7Ci1zdGF0 aWMgdm9pZCBwcmludF9mdW5jdGlvbl9zcWxib2R5KFN0cmluZ0luZm8gYnVmLCBIZWFwVHVwbGUg cHJvY3R1cCk7CiBzdGF0aWMgdm9pZCBzZXRfcnRhYmxlX25hbWVzKGRlcGFyc2VfbmFtZXNwYWNl ICpkcG5zLCBMaXN0ICpwYXJlbnRfbmFtZXNwYWNlcywKIAkJCQkJCQkgQml0bWFwc2V0ICpyZWxz X3VzZWQpOwogc3RhdGljIHZvaWQgc2V0X2RlcGFyc2VfZm9yX3F1ZXJ5KGRlcGFyc2VfbmFtZXNw YWNlICpkcG5zLCBRdWVyeSAqcXVlcnksCkBAIC00ODIsMjIgKzQ4MiwxNSBAQCBzdGF0aWMgdm9p ZCBnZXRfZnJvbV9jbGF1c2VfY29sZGVmbGlzdChSYW5nZVRibEZ1bmN0aW9uICpydGZ1bmMsCiAJ CQkJCQkJCQkgICBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQpOwogc3RhdGljIHZvaWQgZ2V0X3Rh Ymxlc2FtcGxlX2RlZihUYWJsZVNhbXBsZUNsYXVzZSAqdGFibGVzYW1wbGUsCiAJCQkJCQkJCWRl cGFyc2VfY29udGV4dCAqY29udGV4dCk7Ci1zdGF0aWMgdm9pZCBnZXRfb3BjbGFzc19uYW1lKE9p ZCBvcGNsYXNzLCBPaWQgYWN0dWFsX2RhdGF0eXBlLAotCQkJCQkJCSBTdHJpbmdJbmZvIGJ1Zik7 CiBzdGF0aWMgTm9kZSAqcHJvY2Vzc0luZGlyZWN0aW9uKE5vZGUgKm5vZGUsIGRlcGFyc2VfY29u dGV4dCAqY29udGV4dCk7CiBzdGF0aWMgdm9pZCBwcmludFN1YnNjcmlwdHMoU3Vic2NyaXB0aW5n UmVmICpzYnNyZWYsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCk7CiBzdGF0aWMgY2hhciAqZ2V0 X3JlbGF0aW9uX25hbWUoT2lkIHJlbGlkKTsKIHN0YXRpYyBjaGFyICpnZW5lcmF0ZV9yZWxhdGlv bl9uYW1lKE9pZCByZWxpZCwgTGlzdCAqbmFtZXNwYWNlcyk7CiBzdGF0aWMgY2hhciAqZ2VuZXJh dGVfcXVhbGlmaWVkX3JlbGF0aW9uX25hbWUoT2lkIHJlbGlkKTsKLXN0YXRpYyBjaGFyICpnZW5l cmF0ZV9mdW5jdGlvbl9uYW1lKE9pZCBmdW5jaWQsIGludCBuYXJncywKLQkJCQkJCQkJCUxpc3Qg KmFyZ25hbWVzLCBPaWQgKmFyZ3R5cGVzLAotCQkJCQkJCQkJYm9vbCBoYXNfdmFyaWFkaWMsIGJv b2wgKnVzZV92YXJpYWRpY19wLAotCQkJCQkJCQkJUGFyc2VFeHByS2luZCBzcGVjaWFsX2V4cHJr aW5kKTsKIHN0YXRpYyBjaGFyICpnZW5lcmF0ZV9vcGVyYXRvcl9uYW1lKE9pZCBvcGVyaWQsIE9p ZCBhcmcxLCBPaWQgYXJnMik7CiBzdGF0aWMgdm9pZCBhZGRfY2FzdF90byhTdHJpbmdJbmZvIGJ1 ZiwgT2lkIHR5cGlkKTsKIHN0YXRpYyBjaGFyICpnZW5lcmF0ZV9xdWFsaWZpZWRfdHlwZV9uYW1l KE9pZCB0eXBpZCk7CiBzdGF0aWMgdGV4dCAqc3RyaW5nX3RvX3RleHQoY2hhciAqc3RyKTsKLXN0 YXRpYyBjaGFyICpmbGF0dGVuX3JlbG9wdGlvbnMoT2lkIHJlbGlkKTsKIHN0YXRpYyB2b2lkIGdl dF9yZWxvcHRpb25zKFN0cmluZ0luZm8gYnVmLCBEYXR1bSByZWxvcHRpb25zKTsKIAogI2RlZmlu ZSBvbmx5X21hcmtlcihydGUpICAoKHJ0ZSktPmluaCA/ICIiIDogIk9OTFkgIikKQEAgLTU0NSw2 ICs1MzgsMTA0IEBAIHBnX2dldF9ydWxlZGVmX2V4dChQR19GVU5DVElPTl9BUkdTKQogCVBHX1JF VFVSTl9URVhUX1Aoc3RyaW5nX3RvX3RleHQocmVzKSk7CiB9CiAKKy8qCisgKiBHaXZlbiBhIHBh aXIgb2YgRGF0dW0gY29ycmVzcG9uZGluZyB0byBhIHJ1bGUncyBwZ19yZXdyaXRlLmV2X3F1YWwg YW5kCisgKiBldl9hY3Rpb24gY29sdW1ucywgcmV0dXJuIHRoZWlyIHRleHQgcmVwcmVzZW50YXRp b247IGV2X3F1YWwgYXMgYSBzaW5nbGUKKyAqIHN0cmluZyBpbiB3aGVyZUNsYXVzZSBhbmQgZXZf YWN0aW9uIGFzIGEgTGlzdCBvZiBzdHJpbmdzICh3aGljaCBtaWdodCBiZQorICogTklMLCBzaWdu YWxsaW5nIE5PVEhJTkcpIGluIGFjdGlvbnMuCisgKi8KK3ZvaWQKK3BnX2dldF9ydWxlZGVmX2Rl dGFpbGVkKERhdHVtIGV2X3F1YWwsIERhdHVtIGV2X2FjdGlvbiwKKwkJCQkJCWNoYXIgKip3aGVy ZUNsYXVzZSwgTGlzdCAqKmFjdGlvbnMpCit7CisJaW50CQkJcHJldHR5RmxhZ3MgPSAwOworCWNo YXIJICAgKnF1YWxzdHIgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKGV2X3F1YWwpOworCWNoYXIJICAg KmFjdGlvbnN0ciA9IFRleHREYXR1bUdldENTdHJpbmcoZXZfYWN0aW9uKTsKKwlMaXN0CSAgICph Y3Rpb25Ob2RlTGlzdCA9IChMaXN0ICopIHN0cmluZ1RvTm9kZShhY3Rpb25zdHIpOworCVN0cmlu Z0luZm9EYXRhIGJ1ZjsKKworCSp3aGVyZUNsYXVzZSA9IE5VTEw7CisJKmFjdGlvbnMgPSBOSUw7 CisJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisJaWYgKHN0cmxlbihxdWFsc3RyKSA+IDAgJiYgc3Ry Y21wKHF1YWxzdHIsICI8PiIpICE9IDApCisJeworCQlOb2RlCSAgICpxdWFsOworCQlRdWVyeQkg ICAqcXVlcnk7CisJCWRlcGFyc2VfY29udGV4dCBjb250ZXh0OworCQlkZXBhcnNlX25hbWVzcGFj ZSBkcG5zOworCisJCXF1YWwgPSBzdHJpbmdUb05vZGUocXVhbHN0cik7CisKKwkJcXVlcnkgPSAo UXVlcnkgKikgbGluaXRpYWwoYWN0aW9uTm9kZUxpc3QpOworCQlxdWVyeSA9IGdldEluc2VydFNl bGVjdFF1ZXJ5KHF1ZXJ5LCBOVUxMKTsKKworCQlBY3F1aXJlUmV3cml0ZUxvY2tzKHF1ZXJ5LCBm YWxzZSwgZmFsc2UpOworCisJCWNvbnRleHQuYnVmID0gJmJ1ZjsKKwkJY29udGV4dC5uYW1lc3Bh Y2VzID0gbGlzdF9tYWtlMSgmZHBucyk7CisJCWNvbnRleHQud2luZG93Q2xhdXNlID0gTklMOwor CQljb250ZXh0LndpbmRvd1RMaXN0ID0gTklMOworCQljb250ZXh0LnZhcnByZWZpeCA9IChsaXN0 X2xlbmd0aChxdWVyeS0+cnRhYmxlKSAhPSAxKTsKKwkJY29udGV4dC5wcmV0dHlGbGFncyA9IHBy ZXR0eUZsYWdzOworCQljb250ZXh0LndyYXBDb2x1bW4gPSBXUkFQX0NPTFVNTl9ERUZBVUxUOwor CQljb250ZXh0LmluZGVudExldmVsID0gUFJFVFRZSU5ERU5UX1NURDsKKworCQlzZXRfZGVwYXJz ZV9mb3JfcXVlcnkoJmRwbnMsIHF1ZXJ5LCBOSUwpOworCisJCWdldF9ydWxlX2V4cHIocXVhbCwg JmNvbnRleHQsIGZhbHNlKTsKKworCQkqd2hlcmVDbGF1c2UgPSBwc3RyZHVwKGJ1Zi5kYXRhKTsK Kwl9CisKKwlpZiAobGlzdF9sZW5ndGgoYWN0aW9uTm9kZUxpc3QpID4gMCkKKwl7CisJCUxpc3RD ZWxsICAgKmNlbGw7CisKKwkJZm9yZWFjaChjZWxsLCBhY3Rpb25Ob2RlTGlzdCkKKwkJeworCQkJ UXVlcnkJICAgKnF1ZXJ5ID0gKFF1ZXJ5ICopIGxmaXJzdChjZWxsKTsKKworCQkJaWYgKHF1ZXJ5 LT5jb21tYW5kVHlwZSA9PSBDTURfTk9USElORykKKwkJCQljb250aW51ZTsKKworCQkJcmVzZXRT dHJpbmdJbmZvKCZidWYpOworCQkJZ2V0X3F1ZXJ5X2RlZihxdWVyeSwgJmJ1ZiwgTklMLCBOVUxM LCB0cnVlLAorCQkJCQkJICBwcmV0dHlGbGFncywgV1JBUF9DT0xVTU5fREVGQVVMVCwgMCk7CisJ CQkqYWN0aW9ucyA9IGxhcHBlbmQoKmFjdGlvbnMsIHBzdHJkdXAoYnVmLmRhdGEpKTsKKwkJfQor CX0KK30KKworLyoKKyAqIFRvIGdldCB0aGUgcmV3cml0ZSBydWxlIG9mIGEgdmlldyB3aGVuIHRo ZSBDUkVBVEUgVklFVyBjb21tYW5kIGV4ZWN1dGlvbiBpcworICogc3RpbGwgaW4gcHJvZ3Jlc3M6 IHdlIHNlYXJjaCB0aGUgc3lzdGVtIGNhY2hlIFJVTEVSRUxOQU1FIHRvIGdldCB0aGUgcmV3cml0 ZQorICogcnVsZSBvZiB0aGUgdmlldyBhcyBvcHBvc2VkIHRvIHF1ZXJ5aW5nIHBnX3Jld3JpdGUg YXMgaW4gcGdfZ2V0X3ZpZXdkZWZfd29ya2VyKCksCisgKiB3aGljaCB3aWxsIHJldHVybiBlbXB0 eSByZXN1bHQuCisgKi8KK2NoYXIgKgorcGdfZ2V0X3ZpZXdkZWZfaW50ZXJuYWwoT2lkIHZpZXdv aWQpCit7CisJU3RyaW5nSW5mb0RhdGEgYnVmOworCVJlbGF0aW9uCXBnX3Jld3JpdGU7CisJSGVh cFR1cGxlCXJ1bGV0dXA7CisJVHVwbGVEZXNjCXJ1bGV0dGM7CisKKwlpbml0U3RyaW5nSW5mbygm YnVmKTsKKwlwZ19yZXdyaXRlID0gdGFibGVfb3BlbihSZXdyaXRlUmVsYXRpb25JZCwgQWNjZXNz U2hhcmVMb2NrKTsKKworCXJ1bGV0dXAgPSBTZWFyY2hTeXNDYWNoZTIoUlVMRVJFTE5BTUUsCisJ CQkJCQkJICBPYmplY3RJZEdldERhdHVtKHZpZXdvaWQpLAorCQkJCQkJCSAgUG9pbnRlckdldERh dHVtKFZpZXdTZWxlY3RSdWxlTmFtZSkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChydWxldHVw KSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHJld3JpdGUgcnVsZSBm b3IgdmlldyB3aXRoIE9JRCAldSIsIHZpZXdvaWQpOworCisJcnVsZXR0YyA9IHBnX3Jld3JpdGUt PnJkX2F0dDsKKwltYWtlX3ZpZXdkZWYoJmJ1ZiwgcnVsZXR1cCwgcnVsZXR0YywgMCwgV1JBUF9D T0xVTU5fREVGQVVMVCk7CisJUmVsZWFzZVN5c0NhY2hlKHJ1bGV0dXApOworCXRhYmxlX2Nsb3Nl KHBnX3Jld3JpdGUsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gYnVmLmRhdGE7Cit9CiAK IHN0YXRpYyBjaGFyICoKIHBnX2dldF9ydWxlZGVmX3dvcmtlcihPaWQgcnVsZW9pZCwgaW50IHBy ZXR0eUZsYWdzKQpAQCAtMTAxNSw2NSArMTEwNiwxMiBAQCBwZ19nZXRfdHJpZ2dlcmRlZl93b3Jr ZXIoT2lkIHRyaWdpZCwgYm9vbCBwcmV0dHkpCiAJaWYgKCFpc251bGwpCiAJewogCQlOb2RlCSAg ICpxdWFsOwotCQljaGFyCQlyZWxraW5kOwotCQlkZXBhcnNlX2NvbnRleHQgY29udGV4dDsKLQkJ ZGVwYXJzZV9uYW1lc3BhY2UgZHBuczsKLQkJUmFuZ2VUYmxFbnRyeSAqb2xkcnRlOwotCQlSYW5n ZVRibEVudHJ5ICpuZXdydGU7Ci0KLQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmYnVmLCAiV0hF TiAoIik7CisJCWNoYXIJICAgKnF1YWxzdHI7CiAKIAkJcXVhbCA9IHN0cmluZ1RvTm9kZShUZXh0 RGF0dW1HZXRDU3RyaW5nKHZhbHVlKSk7CisJCXF1YWxzdHIgPSBwZ19nZXRfdHJpZ2dlcl93aGVu Y2xhdXNlKHRyaWdyZWMsIHF1YWwsIHByZXR0eSk7CiAKLQkJcmVsa2luZCA9IGdldF9yZWxfcmVs a2luZCh0cmlncmVjLT50Z3JlbGlkKTsKLQotCQkvKiBCdWlsZCBtaW5pbWFsIE9MRCBhbmQgTkVX IFJURXMgZm9yIHRoZSByZWwgKi8KLQkJb2xkcnRlID0gbWFrZU5vZGUoUmFuZ2VUYmxFbnRyeSk7 Ci0JCW9sZHJ0ZS0+cnRla2luZCA9IFJURV9SRUxBVElPTjsKLQkJb2xkcnRlLT5yZWxpZCA9IHRy aWdyZWMtPnRncmVsaWQ7Ci0JCW9sZHJ0ZS0+cmVsa2luZCA9IHJlbGtpbmQ7Ci0JCW9sZHJ0ZS0+ cmVsbG9ja21vZGUgPSBBY2Nlc3NTaGFyZUxvY2s7Ci0JCW9sZHJ0ZS0+YWxpYXMgPSBtYWtlQWxp YXMoIm9sZCIsIE5JTCk7Ci0JCW9sZHJ0ZS0+ZXJlZiA9IG9sZHJ0ZS0+YWxpYXM7Ci0JCW9sZHJ0 ZS0+bGF0ZXJhbCA9IGZhbHNlOwotCQlvbGRydGUtPmluaCA9IGZhbHNlOwotCQlvbGRydGUtPmlu RnJvbUNsID0gdHJ1ZTsKLQotCQluZXdydGUgPSBtYWtlTm9kZShSYW5nZVRibEVudHJ5KTsKLQkJ bmV3cnRlLT5ydGVraW5kID0gUlRFX1JFTEFUSU9OOwotCQluZXdydGUtPnJlbGlkID0gdHJpZ3Jl Yy0+dGdyZWxpZDsKLQkJbmV3cnRlLT5yZWxraW5kID0gcmVsa2luZDsKLQkJbmV3cnRlLT5yZWxs b2NrbW9kZSA9IEFjY2Vzc1NoYXJlTG9jazsKLQkJbmV3cnRlLT5hbGlhcyA9IG1ha2VBbGlhcygi bmV3IiwgTklMKTsKLQkJbmV3cnRlLT5lcmVmID0gbmV3cnRlLT5hbGlhczsKLQkJbmV3cnRlLT5s YXRlcmFsID0gZmFsc2U7Ci0JCW5ld3J0ZS0+aW5oID0gZmFsc2U7Ci0JCW5ld3J0ZS0+aW5Gcm9t Q2wgPSB0cnVlOwotCi0JCS8qIEJ1aWxkIHR3by1lbGVtZW50IHJ0YWJsZSAqLwotCQltZW1zZXQo JmRwbnMsIDAsIHNpemVvZihkcG5zKSk7Ci0JCWRwbnMucnRhYmxlID0gbGlzdF9tYWtlMihvbGRy dGUsIG5ld3J0ZSk7Ci0JCWRwbnMuc3VicGxhbnMgPSBOSUw7Ci0JCWRwbnMuY3RlcyA9IE5JTDsK LQkJZHBucy5hcHBlbmRyZWxzID0gTlVMTDsKLQkJc2V0X3J0YWJsZV9uYW1lcygmZHBucywgTklM LCBOVUxMKTsKLQkJc2V0X3NpbXBsZV9jb2x1bW5fbmFtZXMoJmRwbnMpOwotCi0JCS8qIFNldCB1 cCBjb250ZXh0IHdpdGggb25lLWRlZXAgbmFtZXNwYWNlIHN0YWNrICovCi0JCWNvbnRleHQuYnVm ID0gJmJ1ZjsKLQkJY29udGV4dC5uYW1lc3BhY2VzID0gbGlzdF9tYWtlMSgmZHBucyk7Ci0JCWNv bnRleHQud2luZG93Q2xhdXNlID0gTklMOwotCQljb250ZXh0LndpbmRvd1RMaXN0ID0gTklMOwot CQljb250ZXh0LnZhcnByZWZpeCA9IHRydWU7Ci0JCWNvbnRleHQucHJldHR5RmxhZ3MgPSBHRVRf UFJFVFRZX0ZMQUdTKHByZXR0eSk7Ci0JCWNvbnRleHQud3JhcENvbHVtbiA9IFdSQVBfQ09MVU1O X0RFRkFVTFQ7Ci0JCWNvbnRleHQuaW5kZW50TGV2ZWwgPSBQUkVUVFlJTkRFTlRfU1REOwotCQlj b250ZXh0LnNwZWNpYWxfZXhwcmtpbmQgPSBFWFBSX0tJTkRfTk9ORTsKLQkJY29udGV4dC5hcHBl bmRwYXJlbnRzID0gTlVMTDsKLQotCQlnZXRfcnVsZV9leHByKHF1YWwsICZjb250ZXh0LCBmYWxz ZSk7Ci0KLQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmYnVmLCAiKSAiKTsKKwkJYXBwZW5kU3Ry aW5nSW5mbygmYnVmLCAiV0hFTiAoJXMpICIsIHF1YWxzdHIpOwogCX0KIAogCWFwcGVuZFN0cmlu Z0luZm8oJmJ1ZiwgIkVYRUNVVEUgRlVOQ1RJT04gJXMoIiwKQEAgLTExMTQsNiArMTE1Miw2OSBA QCBwZ19nZXRfdHJpZ2dlcmRlZl93b3JrZXIoT2lkIHRyaWdpZCwgYm9vbCBwcmV0dHkpCiAJcmV0 dXJuIGJ1Zi5kYXRhOwogfQogCisvKgorICogUGFyc2UgYmFjayB0aGUgVHJpZ2dlcldoZW4gY2xh dXNlIG9mIGEgdHJpZ2dlciBnaXZlbiB0aGUgcGdfdHJpZ2dlciByZWNvcmQgYW5kCisgKiB0aGUg ZXhwcmVzc2lvbiB0cmVlIChpbiBub2RlVG9TdHJpbmcoKSByZXByZXNlbnRhdGlvbikgZnJvbSBw Z190cmlnZ2VyLnRncXVhbAorICogZm9yIHRoZSB0cmlnZ2VyJ3MgV0hFTiBjb25kaXRpb24uCisg Ki8KK2NoYXIgKgorcGdfZ2V0X3RyaWdnZXJfd2hlbmNsYXVzZShGb3JtX3BnX3RyaWdnZXIgdHJp Z3JlYywgTm9kZSAqd2hlbkNsYXVzZSwgYm9vbCBwcmV0dHkpCit7CisJU3RyaW5nSW5mb0RhdGEg YnVmOworCWNoYXIJCXJlbGtpbmQ7CisJZGVwYXJzZV9jb250ZXh0IGNvbnRleHQ7CisJZGVwYXJz ZV9uYW1lc3BhY2UgZHBuczsKKwlSYW5nZVRibEVudHJ5ICpvbGRydGU7CisJUmFuZ2VUYmxFbnRy eSAqbmV3cnRlOworCisJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisKKwlyZWxraW5kID0gZ2V0X3Jl bF9yZWxraW5kKHRyaWdyZWMtPnRncmVsaWQpOworCisJLyogQnVpbGQgbWluaW1hbCBPTEQgYW5k IE5FVyBSVEVzIGZvciB0aGUgcmVsICovCisJb2xkcnRlID0gbWFrZU5vZGUoUmFuZ2VUYmxFbnRy eSk7CisJb2xkcnRlLT5ydGVraW5kID0gUlRFX1JFTEFUSU9OOworCW9sZHJ0ZS0+cmVsaWQgPSB0 cmlncmVjLT50Z3JlbGlkOworCW9sZHJ0ZS0+cmVsa2luZCA9IHJlbGtpbmQ7CisJb2xkcnRlLT5h bGlhcyA9IG1ha2VBbGlhcygib2xkIiwgTklMKTsKKwlvbGRydGUtPmVyZWYgPSBvbGRydGUtPmFs aWFzOworCW9sZHJ0ZS0+bGF0ZXJhbCA9IGZhbHNlOworCW9sZHJ0ZS0+aW5oID0gZmFsc2U7CisJ b2xkcnRlLT5pbkZyb21DbCA9IHRydWU7CisKKwluZXdydGUgPSBtYWtlTm9kZShSYW5nZVRibEVu dHJ5KTsKKwluZXdydGUtPnJ0ZWtpbmQgPSBSVEVfUkVMQVRJT047CisJbmV3cnRlLT5yZWxpZCA9 IHRyaWdyZWMtPnRncmVsaWQ7CisJbmV3cnRlLT5yZWxraW5kID0gcmVsa2luZDsKKwluZXdydGUt PmFsaWFzID0gbWFrZUFsaWFzKCJuZXciLCBOSUwpOworCW5ld3J0ZS0+ZXJlZiA9IG5ld3J0ZS0+ YWxpYXM7CisJbmV3cnRlLT5sYXRlcmFsID0gZmFsc2U7CisJbmV3cnRlLT5pbmggPSBmYWxzZTsK KwluZXdydGUtPmluRnJvbUNsID0gdHJ1ZTsKKworCS8qIEJ1aWxkIHR3by1lbGVtZW50IHJ0YWJs ZSAqLworCW1lbXNldCgmZHBucywgMCwgc2l6ZW9mKGRwbnMpKTsKKwlkcG5zLnJ0YWJsZSA9IGxp c3RfbWFrZTIob2xkcnRlLCBuZXdydGUpOworCWRwbnMuY3RlcyA9IE5JTDsKKwlzZXRfcnRhYmxl X25hbWVzKCZkcG5zLCBOSUwsIE5VTEwpOworCXNldF9zaW1wbGVfY29sdW1uX25hbWVzKCZkcG5z KTsKKworCS8qIFNldCB1cCBjb250ZXh0IHdpdGggb25lLWRlZXAgbmFtZXNwYWNlIHN0YWNrICov CisJY29udGV4dC5idWYgPSAmYnVmOworCWNvbnRleHQubmFtZXNwYWNlcyA9IGxpc3RfbWFrZTEo JmRwbnMpOworCWNvbnRleHQud2luZG93Q2xhdXNlID0gTklMOworCWNvbnRleHQud2luZG93VExp c3QgPSBOSUw7CisJY29udGV4dC52YXJwcmVmaXggPSB0cnVlOworCWNvbnRleHQucHJldHR5Rmxh Z3MgPSBwcmV0dHkgPyBQUkVUVFlGTEFHX1BBUkVOIHwgUFJFVFRZRkxBR19JTkRFTlQgOiBQUkVU VFlGTEFHX0lOREVOVDsKKwljb250ZXh0LndyYXBDb2x1bW4gPSBXUkFQX0NPTFVNTl9ERUZBVUxU OworCWNvbnRleHQuaW5kZW50TGV2ZWwgPSBQUkVUVFlJTkRFTlRfU1REOworCWNvbnRleHQuc3Bl Y2lhbF9leHBya2luZCA9IEVYUFJfS0lORF9OT05FOworCisJZ2V0X3J1bGVfZXhwcih3aGVuQ2xh dXNlLCAmY29udGV4dCwgZmFsc2UpOworCisJcmV0dXJuIGJ1Zi5kYXRhOworfQorCiAvKiAtLS0t LS0tLS0tCiAgKiBwZ19nZXRfaW5kZXhkZWYJCQktIEdldCB0aGUgZGVmaW5pdGlvbiBvZiBhbiBp bmRleAogICoKQEAgLTE4ODAsNiArMTk4MSwxMyBAQCBwZ19nZXRfcGFydGtleWRlZl9jb2x1bW5z KE9pZCByZWxpZCwgYm9vbCBwcmV0dHkpCiAJcmV0dXJuIHBnX2dldF9wYXJ0a2V5ZGVmX3dvcmtl cihyZWxpZCwgcHJldHR5RmxhZ3MsIHRydWUsIGZhbHNlKTsKIH0KIAorLyogSW50ZXJuYWwgdmVy c2lvbiB0aGF0IHJlcG9ydHMgdGhlIGZ1bGwgcGFydGl0aW9uIGtleSBkZWZpbml0aW9uICovCitj aGFyICoKK3BnX2dldF9wYXJ0a2V5ZGVmX3NpbXBsZShPaWQgcmVsaWQpCit7CisJcmV0dXJuIHBn X2dldF9wYXJ0a2V5ZGVmX3dvcmtlcihyZWxpZCwgMCwgZmFsc2UsIGZhbHNlKTsKK30KKwogLyoK ICAqIEludGVybmFsIHdvcmtob3JzZSB0byBkZWNvbXBpbGUgYSBwYXJ0aXRpb24ga2V5IGRlZmlu aXRpb24uCiAgKi8KQEAgLTIxMzEsNiArMjIzOSwxNSBAQCBwZ19nZXRfY29uc3RyYWludGRlZl9l eHQoUEdfRlVOQ1RJT05fQVJHUykKIAlQR19SRVRVUk5fVEVYVF9QKHN0cmluZ190b190ZXh0KHJl cykpOwogfQogCisvKgorICogSW50ZXJuYWwgdmVyc2lvbiB0aGF0IHJldHVybnMgdGhlIGRlZmlu aXRpb24gb2YgYSBDT05TVFJBSU5UIGNvbW1hbmQKKyAqLworY2hhciAqCitwZ19nZXRfY29uc3Ry YWludGRlZl9jb21tYW5kX3NpbXBsZShPaWQgY29uc3RyYWludElkKQoreworCXJldHVybiBwZ19n ZXRfY29uc3RyYWludGRlZl93b3JrZXIoY29uc3RyYWludElkLCBmYWxzZSwgMCwgZmFsc2UpOwor fQorCiAvKgogICogSW50ZXJuYWwgdmVyc2lvbiB0aGF0IHJldHVybnMgYSBmdWxsIEFMVEVSIFRB QkxFIC4uLiBBREQgQ09OU1RSQUlOVCBjb21tYW5kCiAgKi8KQEAgLTM1MDEsNyArMzYxOCwxMiBA QCBwZ19nZXRfZnVuY3Rpb25fYXJnX2RlZmF1bHQoUEdfRlVOQ1RJT05fQVJHUykKIAlQR19SRVRV Uk5fVEVYVF9QKHN0cmluZ190b190ZXh0KHN0cikpOwogfQogCi1zdGF0aWMgdm9pZAorLyoKKyAq IFByb2R1Y2UgdGhlIGZvcm1hdHRlZCBTUUwgYm9keSAobm90IHRoZSB3aG9sZSBmdW5jdGlvbiBk ZWZpbml0aW9uKQorICogb2YgYSBmdW5jdGlvbiBnaXZlbiB0aGUgcGdfcHJvYyB0dXBsZS4gU2F2 ZSB0aGUgZm9ybWF0dGVkIFNRTCBpbiB0aGUKKyAqIGdpdmVuIFN0cmluZ0luZm8uCisgKi8KK3Zv aWQKIHByaW50X2Z1bmN0aW9uX3NxbGJvZHkoU3RyaW5nSW5mbyBidWYsIEhlYXBUdXBsZSBwcm9j dHVwKQogewogCWludAkJCW51bWFyZ3M7CkBAIC0xMTM1Nyw3ICsxMTQ3OSw3IEBAIGdldF90YWJs ZXNhbXBsZV9kZWYoVGFibGVTYW1wbGVDbGF1c2UgKnRhYmxlc2FtcGxlLCBkZXBhcnNlX2NvbnRl eHQgKmNvbnRleHQpCiAgKiBhY3R1YWxfZGF0YXR5cGUuICAoSWYgeW91IGRvbid0IHdhbnQgdGhp cyBiZWhhdmlvciwganVzdCBwYXNzCiAgKiBJbnZhbGlkT2lkIGZvciBhY3R1YWxfZGF0YXR5cGUu KQogICovCi1zdGF0aWMgdm9pZAordm9pZAogZ2V0X29wY2xhc3NfbmFtZShPaWQgb3BjbGFzcywg T2lkIGFjdHVhbF9kYXRhdHlwZSwKIAkJCQkgU3RyaW5nSW5mbyBidWYpCiB7CkBAIC0xMTc1MSw3 ICsxMTg3Myw3IEBAIGdlbmVyYXRlX3F1YWxpZmllZF9yZWxhdGlvbl9uYW1lKE9pZCByZWxpZCkK ICAqCiAgKiBUaGUgcmVzdWx0IGluY2x1ZGVzIGFsbCBuZWNlc3NhcnkgcXVvdGluZyBhbmQgc2No ZW1hLXByZWZpeGluZy4KICAqLwotc3RhdGljIGNoYXIgKgorY2hhciAqCiBnZW5lcmF0ZV9mdW5j dGlvbl9uYW1lKE9pZCBmdW5jaWQsIGludCBuYXJncywgTGlzdCAqYXJnbmFtZXMsIE9pZCAqYXJn dHlwZXMsCiAJCQkJCSAgIGJvb2wgaGFzX3ZhcmlhZGljLCBib29sICp1c2VfdmFyaWFkaWNfcCwK IAkJCQkJICAgUGFyc2VFeHByS2luZCBzcGVjaWFsX2V4cHJraW5kKQpAQCAtMTIxMzcsNyArMTIy NTksNyBAQCBnZXRfcmVsb3B0aW9ucyhTdHJpbmdJbmZvIGJ1ZiwgRGF0dW0gcmVsb3B0aW9ucykK IC8qCiAgKiBHZW5lcmF0ZSBhIEMgc3RyaW5nIHJlcHJlc2VudGluZyBhIHJlbGF0aW9uJ3MgcmVs b3B0aW9ucywgb3IgTlVMTCBpZiBub25lLgogICovCi1zdGF0aWMgY2hhciAqCitjaGFyICoKIGZs YXR0ZW5fcmVsb3B0aW9ucyhPaWQgcmVsaWQpCiB7CiAJY2hhcgkgICAqcmVzdWx0ID0gTlVMTDsK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2NvbGxhdGlvbmNtZHMuaCBiL3NyYy9p bmNsdWRlL2NvbW1hbmRzL2NvbGxhdGlvbmNtZHMuaAppbmRleCBiNzZjN2IzZGMzLi41M2M0YTFh OGMyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9jb2xsYXRpb25jbWRzLmgKKysr IGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvY29sbGF0aW9uY21kcy5oCkBAIC0xOCw3ICsxOCw4IEBA CiAjaW5jbHVkZSAiY2F0YWxvZy9vYmplY3RhZGRyZXNzLmgiCiAjaW5jbHVkZSAicGFyc2VyL3Bh cnNlX25vZGUuaCIKIAotZXh0ZXJuIE9iamVjdEFkZHJlc3MgRGVmaW5lQ29sbGF0aW9uKFBhcnNl U3RhdGUgKnBzdGF0ZSwgTGlzdCAqbmFtZXMsIExpc3QgKnBhcmFtZXRlcnMsIGJvb2wgaWZfbm90 X2V4aXN0cyk7CitleHRlcm4gT2JqZWN0QWRkcmVzcyBEZWZpbmVDb2xsYXRpb24oUGFyc2VTdGF0 ZSAqcHN0YXRlLCBMaXN0ICpuYW1lcywgTGlzdCAqcGFyYW1ldGVycywKKwkJCQkJCQkJCSAgYm9v bCBpZl9ub3RfZXhpc3RzLCBPYmplY3RBZGRyZXNzICpmcm9tX2NvbGxpZCk7CiBleHRlcm4gdm9p ZCBJc1RoZXJlQ29sbGF0aW9uSW5OYW1lc3BhY2UoY29uc3QgY2hhciAqY29sbG5hbWUsIE9pZCBu c3BPaWQpOwogZXh0ZXJuIE9iamVjdEFkZHJlc3MgQWx0ZXJDb2xsYXRpb24oQWx0ZXJDb2xsYXRp b25TdG10ICpzdG10KTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRf dHJpZ2dlci5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oCmluZGV4IDVl ZDZlY2U1NTUuLjQ4YzY1ZWY1M2MgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2 ZW50X3RyaWdnZXIuaAorKysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmgK QEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlICJjYXRhbG9nL2RlcGVuZGVuY3kuaCIKICNpbmNs dWRlICJjYXRhbG9nL29iamVjdGFkZHJlc3MuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2V2ZW50 X3RyaWdnZXIuaCIKKyNpbmNsdWRlICJsaWIvaWxpc3QuaCIKICNpbmNsdWRlICJub2Rlcy9wYXJz ZW5vZGVzLmgiCiAjaW5jbHVkZSAidGNvcC9jbWR0YWcuaCIKICNpbmNsdWRlICJ0Y29wL2RlcGFy c2VfdXRpbGl0eS5oIgpAQCAtMjksNiArMzAsNDQgQEAgdHlwZWRlZiBzdHJ1Y3QgRXZlbnRUcmln Z2VyRGF0YQogCUNvbW1hbmRUYWcJdGFnOwogfSBFdmVudFRyaWdnZXJEYXRhOwogCit0eXBlZGVm IHN0cnVjdCBFdmVudFRyaWdnZXJRdWVyeVN0YXRlCit7CisJLyogbWVtb3J5IGNvbnRleHQgZm9y IHRoaXMgc3RhdGUncyBvYmplY3RzICovCisJTWVtb3J5Q29udGV4dCBjeHQ7CisKKwkvKiBzcWxf ZHJvcCAqLworCXNsaXN0X2hlYWQJU1FMRHJvcExpc3Q7CisJYm9vbAkJaW5fc3FsX2Ryb3A7CisK KwkvKiB0YWJsZV9yZXdyaXRlICovCisJT2lkCQkJdGFibGVfcmV3cml0ZV9vaWQ7CS8qIEludmFs aWRPaWQsIG9yIHNldCBmb3IgdGFibGVfcmV3cml0ZQorCQkJCQkJCQkJICogZXZlbnQgKi8KKwlp bnQJCQl0YWJsZV9yZXdyaXRlX3JlYXNvbjsJLyogQVRfUkVXUklURSByZWFzb24gKi8KKworCS8q IFN1cHBvcnQgZm9yIGNvbW1hbmQgY29sbGVjdGlvbiAqLworCWJvb2wJCWNvbW1hbmRDb2xsZWN0 aW9uSW5oaWJpdGVkOworCUNvbGxlY3RlZENvbW1hbmQgKmN1cnJlbnRDb21tYW5kOworCUxpc3QJ ICAgKmNvbW1hbmRMaXN0OwkvKiBsaXN0IG9mIENvbGxlY3RlZENvbW1hbmQ7IHNlZQorCQkJCQkJ CQkgKiBkZXBhcnNlX3V0aWxpdHkuaCAqLworCXN0cnVjdCBFdmVudFRyaWdnZXJRdWVyeVN0YXRl ICpwcmV2aW91czsKK30gRXZlbnRUcmlnZ2VyUXVlcnlTdGF0ZTsKKworLyogU3VwcG9ydCBmb3Ig ZHJvcHBlZCBvYmplY3RzICovCit0eXBlZGVmIHN0cnVjdCBTUUxEcm9wT2JqZWN0Cit7CisJT2Jq ZWN0QWRkcmVzcyBhZGRyZXNzOworCWNvbnN0IGNoYXIgKnNjaGVtYW5hbWU7CisJY29uc3QgY2hh ciAqb2JqbmFtZTsKKwljb25zdCBjaGFyICpvYmppZGVudGl0eTsKKwljb25zdCBjaGFyICpvYmpl Y3R0eXBlOworCUxpc3QJICAgKmFkZHJuYW1lczsKKwlMaXN0CSAgICphZGRyYXJnczsKKwlib29s CQlvcmlnaW5hbDsKKwlib29sCQlub3JtYWw7CisJYm9vbAkJaXN0ZW1wOworCXNsaXN0X25vZGUJ bmV4dDsKK30gU1FMRHJvcE9iamVjdDsKKwogI2RlZmluZSBBVF9SRVdSSVRFX0FMVEVSX1BFUlNJ U1RFTkNFCTB4MDEKICNkZWZpbmUgQVRfUkVXUklURV9ERUZBVUxUX1ZBTAkJCTB4MDIKICNkZWZp bmUgQVRfUkVXUklURV9DT0xVTU5fUkVXUklURQkJMHgwNApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvY29tbWFuZHMvc2VxdWVuY2UuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3NlcXVlbmNlLmgK aW5kZXggN2RiN2IzZGE3Yi4uMzA5ZGEwY2UzOCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29t bWFuZHMvc2VxdWVuY2UuaAorKysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9zZXF1ZW5jZS5oCkBA IC01NCw2ICs1NCw3IEBAIHR5cGVkZWYgc3RydWN0IHhsX3NlcV9yZWMKIGV4dGVybiBpbnQ2NCBu ZXh0dmFsX2ludGVybmFsKE9pZCByZWxpZCwgYm9vbCBjaGVja19wZXJtaXNzaW9ucyk7CiBleHRl cm4gRGF0dW0gbmV4dHZhbChQR19GVU5DVElPTl9BUkdTKTsKIGV4dGVybiBMaXN0ICpzZXF1ZW5j ZV9vcHRpb25zKE9pZCByZWxpZCk7CitleHRlcm4gRm9ybV9wZ19zZXF1ZW5jZV9kYXRhIGdldF9z ZXF1ZW5jZV92YWx1ZXMoT2lkIHNlcXVlbmNlSWQpOwogCiBleHRlcm4gT2JqZWN0QWRkcmVzcyBE ZWZpbmVTZXF1ZW5jZShQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVNlcVN0bXQgKnNlcSk7CiBl eHRlcm4gT2JqZWN0QWRkcmVzcyBBbHRlclNlcXVlbmNlKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQWx0 ZXJTZXFTdG10ICpzdG10KTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Rjb3AvdXRpbGl0eS5o IGIvc3JjL2luY2x1ZGUvdGNvcC91dGlsaXR5LmgKaW5kZXggNTllNjRhZWEwNy4uYTY4Y2UzZDMz NiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdGNvcC91dGlsaXR5LmgKKysrIGIvc3JjL2luY2x1 ZGUvdGNvcC91dGlsaXR5LmgKQEAgLTk5LDYgKzk5LDggQEAgZXh0ZXJuIFF1ZXJ5ICpVdGlsaXR5 Q29udGFpbnNRdWVyeShOb2RlICpwYXJzZXRyZWUpOwogCiBleHRlcm4gQ29tbWFuZFRhZyBDcmVh dGVDb21tYW5kVGFnKE5vZGUgKnBhcnNldHJlZSk7CiAKK2V4dGVybiBjb25zdCBjaGFyICpzdHJp bmdpZnlfb2JqdHlwZShPYmplY3RUeXBlIG9ianR5cGUsIGJvb2wgaXNncmFudCk7CisKIHN0YXRp YyBpbmxpbmUgY29uc3QgY2hhciAqCiBDcmVhdGVDb21tYW5kTmFtZShOb2RlICpwYXJzZXRyZWUp CiB7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9hY2wuaCBiL3NyYy9pbmNsdWRlL3V0 aWxzL2FjbC5oCmluZGV4IGY4ZTEyMzhmYTIuLmYwNTU3OGQzMjIgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL3V0aWxzL2FjbC5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2FjbC5oCkBAIC0yMDks NiArMjA5LDggQEAgZXh0ZXJuIEFjbE1vZGUgYWNsbWFzayhjb25zdCBBY2wgKmFjbCwgT2lkIHJv bGVpZCwgT2lkIG93bmVySWQsCiAJCQkJCSAgIEFjbE1vZGUgbWFzaywgQWNsTWFza0hvdyBob3cp OwogZXh0ZXJuIGludAlhY2xtZW1iZXJzKGNvbnN0IEFjbCAqYWNsLCBPaWQgKipyb2xlaWRzKTsK IAorZXh0ZXJuIGNvbnN0IGNoYXIgKnByaXZpbGVnZV90b19zdHJpbmcoQWNsTW9kZSBwcml2aWxl Z2UpOworCiBleHRlcm4gYm9vbCBoYXNfcHJpdnNfb2Zfcm9sZShPaWQgbWVtYmVyLCBPaWQgcm9s ZSk7CiBleHRlcm4gYm9vbCBtZW1iZXJfY2FuX3NldF9yb2xlKE9pZCBtZW1iZXIsIE9pZCByb2xl KTsKIGV4dGVybiB2b2lkIGNoZWNrX2Nhbl9zZXRfcm9sZShPaWQgbWVtYmVyLCBPaWQgcm9sZSk7 CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9hY2xjaGtfaW50ZXJuYWwuaCBiL3NyYy9p bmNsdWRlL3V0aWxzL2FjbGNoa19pbnRlcm5hbC5oCmluZGV4IDU1YWY2MjRmYjMuLjk0NjU0NWY1 M2YgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL2FjbGNoa19pbnRlcm5hbC5oCisrKyBi L3NyYy9pbmNsdWRlL3V0aWxzL2FjbGNoa19pbnRlcm5hbC5oCkBAIC0zOSw2ICszOSw3IEBAIHR5 cGVkZWYgc3RydWN0CiAJTGlzdAkgICAqZ3JhbnRlZXM7CiAJYm9vbAkJZ3JhbnRfb3B0aW9uOwog CURyb3BCZWhhdmlvciBiZWhhdmlvcjsKKwlPaWQJCQlncmFudG9yX3VpZDsKIH0gSW50ZXJuYWxH cmFudDsKIAogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9idWlsdGlucy5oIGIvc3Jj L2luY2x1ZGUvdXRpbHMvYnVpbHRpbnMuaAppbmRleCAyZjhiNDZkNmRhLi40OGI4YmZkNzlhIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9idWlsdGlucy5oCisrKyBiL3NyYy9pbmNsdWRl L3V0aWxzL2J1aWx0aW5zLmgKQEAgLTEyMywxMCArMTIzLDEyIEBAIGV4dGVybiBEYXR1bSBudW1l cmljX2Zsb2F0OF9ub19vdmVyZmxvdyhQR19GVU5DVElPTl9BUkdTKTsKICNkZWZpbmUgRk9STUFU X1RZUEVfRk9SQ0VfUVVBTElGWQkweDA0CS8qIGZvcmNlIHF1YWxpZmljYXRpb24gb2YgdHlwZSAq LwogI2RlZmluZSBGT1JNQVRfVFlQRV9JTlZBTElEX0FTX05VTEwJMHgwOAkvKiBOVUxMIGlmIHVu ZGVmaW5lZCAqLwogZXh0ZXJuIGNoYXIgKmZvcm1hdF90eXBlX2V4dGVuZGVkKE9pZCB0eXBlX29p ZCwgaW50MzIgdHlwZW1vZCwgYml0czE2IGZsYWdzKTsKK2V4dGVybiBjaGFyICpmb3JtYXRfcHJv Y2VkdXJlX2FyZ3MoT2lkIHByb2NlZHVyZV9vaWQsIGJvb2wgZm9yY2VfcXVhbGlmeSk7CiAKIGV4 dGVybiBjaGFyICpmb3JtYXRfdHlwZV9iZShPaWQgdHlwZV9vaWQpOwogZXh0ZXJuIGNoYXIgKmZv cm1hdF90eXBlX2JlX3F1YWxpZmllZChPaWQgdHlwZV9vaWQpOwogZXh0ZXJuIGNoYXIgKmZvcm1h dF90eXBlX3dpdGhfdHlwZW1vZChPaWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2QpOworZXh0ZXJu IGNoYXIgKnByaW50VHlwbW9kKGNvbnN0IGNoYXIgKnR5cG5hbWUsIGludDMyIHR5cG1vZCwgT2lk IHR5cG1vZG91dCk7CiAKIGV4dGVybiBpbnQzMiB0eXBlX21heGltdW1fc2l6ZShPaWQgdHlwZV9v aWQsIGludDMyIHR5cGVtb2QpOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9ydWxl dXRpbHMuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oCmluZGV4IDFhNDJkOWYzOWIu LmMzM2M4ZDA2NTAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oCisr KyBiL3NyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oCkBAIC0xMyw5ICsxMywxMiBAQAogI2lm bmRlZiBSVUxFVVRJTFNfSAogI2RlZmluZSBSVUxFVVRJTFNfSAogCisjaW5jbHVkZSAiYWNjZXNz L2h0dXAuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3RyaWdnZXIuaCIKICNpbmNsdWRlICJub2Rl cy9ub2Rlcy5oIgogI2luY2x1ZGUgIm5vZGVzL3BhcnNlbm9kZXMuaCIKICNpbmNsdWRlICJub2Rl cy9wZ19saXN0LmgiCisjaW5jbHVkZSAicGFyc2VyL3BhcnNlX25vZGUuaCIKIAogc3RydWN0IFBs YW47CQkJCQkvKiBhdm9pZCBpbmNsdWRpbmcgcGxhbm5vZGVzLmggaGVyZSAqLwogc3RydWN0IFBs YW5uZWRTdG10OwpAQCAtMjMsMTIgKzI2LDIwIEBAIHN0cnVjdCBQbGFubmVkU3RtdDsKIAogZXh0 ZXJuIGNoYXIgKnBnX2dldF9pbmRleGRlZl9zdHJpbmcoT2lkIGluZGV4cmVsaWQpOwogZXh0ZXJu IGNoYXIgKnBnX2dldF9pbmRleGRlZl9jb2x1bW5zKE9pZCBpbmRleHJlbGlkLCBib29sIHByZXR0 eSk7CitleHRlcm4gY2hhciAqcGdfZ2V0X3RyaWdnZXJfd2hlbmNsYXVzZShGb3JtX3BnX3RyaWdn ZXIgdHJpZ3JlYywKKwkJCQkJCQkJCSAgIE5vZGUgKndoZW5DbGF1c2UsIGJvb2wgcHJldHR5KTsK IGV4dGVybiBjaGFyICpwZ19nZXRfcXVlcnlkZWYoUXVlcnkgKnF1ZXJ5LCBib29sIHByZXR0eSk7 CitleHRlcm4gY2hhciAqcGdfZ2V0X3ZpZXdkZWZfaW50ZXJuYWwoT2lkIHZpZXdvaWQpOwogCiBl eHRlcm4gY2hhciAqcGdfZ2V0X3BhcnRrZXlkZWZfY29sdW1ucyhPaWQgcmVsaWQsIGJvb2wgcHJl dHR5KTsKK2V4dGVybiBjaGFyICpwZ19nZXRfcGFydGtleWRlZl9zaW1wbGUoT2lkIHJlbGlkKTsK IGV4dGVybiBjaGFyICpwZ19nZXRfcGFydGNvbnN0cmRlZl9zdHJpbmcoT2lkIHBhcnRpdGlvbklk LCBjaGFyICphbGlhc25hbWUpOwogCiBleHRlcm4gY2hhciAqcGdfZ2V0X2NvbnN0cmFpbnRkZWZf Y29tbWFuZChPaWQgY29uc3RyYWludElkKTsKK2V4dGVybiBjaGFyICpwZ19nZXRfY29uc3RyYWlu dGRlZl9jb21tYW5kX3NpbXBsZShPaWQgY29uc3RyYWludElkKTsKK2V4dGVybiB2b2lkIHBnX2dl dF9ydWxlZGVmX2RldGFpbGVkKERhdHVtIGV2X3F1YWwsIERhdHVtIGV2X2FjdGlvbiwKKwkJCQkJ CQkJCWNoYXIgKip3aGVyZUNsYXVzZSwgTGlzdCAqKmFjdGlvbnMpOworCiBleHRlcm4gY2hhciAq ZGVwYXJzZV9leHByZXNzaW9uKE5vZGUgKmV4cHIsIExpc3QgKmRwY29udGV4dCwKIAkJCQkJCQkJ Ym9vbCBmb3JjZXByZWZpeCwgYm9vbCBzaG93aW1wbGljaXQpOwogZXh0ZXJuIExpc3QgKmRlcGFy c2VfY29udGV4dF9mb3IoY29uc3QgY2hhciAqYWxpYXNuYW1lLCBPaWQgcmVsaWQpOwpAQCAtNDAs OCArNTEsMTYgQEAgZXh0ZXJuIExpc3QgKnNlbGVjdF9ydGFibGVfbmFtZXNfZm9yX2V4cGxhaW4o TGlzdCAqcnRhYmxlLAogCQkJCQkJCQkJCQkgQml0bWFwc2V0ICpyZWxzX3VzZWQpOwogZXh0ZXJu IGNoYXIgKmdlbmVyYXRlX2NvbGxhdGlvbl9uYW1lKE9pZCBjb2xsaWQpOwogZXh0ZXJuIGNoYXIg KmdlbmVyYXRlX29wY2xhc3NfbmFtZShPaWQgb3BjbGFzcyk7CitleHRlcm4gY2hhciAqZ2VuZXJh dGVfZnVuY3Rpb25fbmFtZShPaWQgZnVuY2lkLCBpbnQgbmFyZ3MsIExpc3QgKmFyZ25hbWVzLAor CQkJCQkJCQkJT2lkICphcmd0eXBlcywgYm9vbCBoYXNfdmFyaWFkaWMsCisJCQkJCQkJCQlib29s ICp1c2VfdmFyaWFkaWNfcCwKKwkJCQkJCQkJCVBhcnNlRXhwcktpbmQgc3BlY2lhbF9leHBya2lu ZCk7CiBleHRlcm4gY2hhciAqZ2V0X3JhbmdlX3BhcnRib3VuZF9zdHJpbmcoTGlzdCAqYm91bmRf ZGF0dW1zKTsKK2V4dGVybiB2b2lkIGdldF9vcGNsYXNzX25hbWUoT2lkIG9wY2xhc3MsIE9pZCBh Y3R1YWxfZGF0YXR5cGUsCisJCQkJCQkJIFN0cmluZ0luZm8gYnVmKTsKK2V4dGVybiBjaGFyICpm bGF0dGVuX3JlbG9wdGlvbnMoT2lkIHJlbGlkKTsKIAogZXh0ZXJuIGNoYXIgKnBnX2dldF9zdGF0 aXN0aWNzb2JqZGVmX3N0cmluZyhPaWQgc3RhdGV4dGlkKTsKK2V4dGVybiB2b2lkIHByaW50X2Z1 bmN0aW9uX3NxbGJvZHkoU3RyaW5nSW5mbyBidWYsIEhlYXBUdXBsZSBwcm9jdHVwKTsKIAogI2Vu ZGlmCQkJCQkJCS8qIFJVTEVVVElMU19IICovCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL29iamVjdF9hZGRyZXNzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv b2JqZWN0X2FkZHJlc3Mub3V0CmluZGV4IDI1YzE3NGYyNzUuLmZjNDJkNDE4YmYgMTAwNjQ0Ci0t LSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvb2JqZWN0X2FkZHJlc3Mub3V0CisrKyBiL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvb2JqZWN0X2FkZHJlc3Mub3V0CkBAIC00OTYsNyArNDk2 LDcgQEAgb3BlcmF0b3IgZmFtaWx5fHBnX2NhdGFsb2d8aW50ZWdlcl9vcHN8cGdfY2F0YWxvZy5p bnRlZ2VyX29wcyBVU0lORyBidHJlZXx0CiBwb2xpY3l8TlVMTHxOVUxMfGdlbnBvbCBvbiBhZGRy X25zcC5nZW50YWJsZXx0CiBzdGF0aXN0aWNzIG9iamVjdHxhZGRyX25zcHxnZW50YWJsZV9zdGF0 fGFkZHJfbnNwLmdlbnRhYmxlX3N0YXR8dAogY29sbGF0aW9ufHBnX2NhdGFsb2d8ImRlZmF1bHQi fHBnX2NhdGFsb2cuImRlZmF1bHQifHQKLXRyYW5zZm9ybXxOVUxMfE5VTEx8Zm9yIGludGVnZXIg b24gbGFuZ3VhZ2Ugc3FsfHQKK3RyYW5zZm9ybXxOVUxMfE5VTEx8Zm9yIGludGVnZXIgbGFuZ3Vh Z2Ugc3FsfHQKIHRleHQgc2VhcmNoIGRpY3Rpb25hcnl8YWRkcl9uc3B8YWRkcl90c19kaWN0fGFk ZHJfbnNwLmFkZHJfdHNfZGljdHx0CiB0ZXh0IHNlYXJjaCBwYXJzZXJ8YWRkcl9uc3B8YWRkcl90 c19wcnN8YWRkcl9uc3AuYWRkcl90c19wcnN8dAogdGV4dCBzZWFyY2ggY29uZmlndXJhdGlvbnxh ZGRyX25zcHxhZGRyX3RzX2NvbmZ8YWRkcl9uc3AuYWRkcl90c19jb25mfHQKLS0gCjIuMzguMQoK --00000000000047050c05f1ae2f85 Content-Type: application/octet-stream; name="v60-0002-Functions-to-deparse-Table-DDL-commands.patch" Content-Disposition: attachment; filename="v60-0002-Functions-to-deparse-Table-DDL-commands.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lcm3fwee1 RnJvbSA5ODI0ZjY1OTc4OWIxNGVmNjRlMjZmNTQ2MTc5YmU1NmNmNDY5NThiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiWmhlbmcgKFphbmUpIExpIiA8emhlbGxpQGFtYXpvbi5jb20+ CkRhdGU6IFNhdCwgNyBKYW4gMjAyMyAwNjowOTo0NCArMDAwMApTdWJqZWN0OiBbUEFUQ0ggMi83 XSBGdW5jdGlvbnMgdG8gZGVwYXJzZSBUYWJsZSBEREwgY29tbWFuZHMuCgpUaGlzIHBhdGNoIHBy b3ZpZGVzIEpTT04gYmxvYnMgcmVwcmVzZW50aW5nIERETCBjb21tYW5kcywgd2hpY2ggY2FuCmxh dGVyIGJlIHJlLXByb2Nlc3NlZCBpbnRvIHBsYWluIHN0cmluZ3MgYnkgd2VsbC1kZWZpbmVkIHNw cmludGYtbGlrZQpleHBhbnNpb24uIFRoZXNlIEpTT04gb2JqZWN0cyBhcmUgaW50ZW5kZWQgdG8g YWxsb3cgZm9yIG1hY2hpbmUtZWRpdGluZyBvZgp0aGUgY29tbWFuZHMsIGJ5IHJlcGxhY2luZyBj ZXJ0YWluIG5vZGVzIHdpdGhpbiB0aGUgb2JqZWN0cy4KCk11Y2ggb2YgdGhlIGluZm9ybWF0aW9u IGluIHRoZSBvdXRwdXQgYmxvYiBhY3R1YWxseSBjb21lcyBmcm9tIHN5c3RlbQpjYXRhbG9ncywg bm90IGZyb20gdGhlIGNvbW1hbmQgcGFyc2Ugbm9kZSwgYXMgaXQgaXMgaW1wb3NzaWJsZSB0byBy ZWxpYWJseQpjb25zdHJ1Y3QgYSBmdWxseS1zcGVjaWZpZWQgY29tbWFuZCAoaS5lLiBvbmUgbm90 IGRlcGVuZGVudCBvbiBzZWFyY2hfcGF0aApldGMpIGxvb2tpbmcgb25seSBhdCB0aGUgcGFyc2Ug bm9kZS4KClRoaXMgcHJvdmlkZXMgYSBiYXNlIGZvciBsb2dpY2FsIHJlcGxpY2F0aW9uIG9mIERE TCBzdGF0ZW1lbnRzLiBDdXJyZW50bHksCnRoZSBwYXRjaCBoYXMgc3VwcG9ydCBmb3I6CgpDUkVB VEUvQUxURVIvRFJPUCBUQUJMRSAtLSBOb3RlICMxLCBOb3RlICMyCgooTm90ZSAjMSkgU29tZSBy ZWNlbnRseSBpbnRyb2R1Y2VkIERETHMoZS5nLiBERExzIHJlbGF0ZWQgdG8KUEFSVElUSU9ORUQg VEFCTEUpIGFyZSB1bnN1cHBvcnRlZC4gV2UgY2FuIGV4dGVuZCBpdCBhcyB3ZSBuZWVkIG1vcmUK ZnVuY3Rpb25hbGl0eSBmb3IgRERMIHJlcGxpY2F0aW9uLgoKKE5vdGUgIzIpIEZvciBBVFRBQ0gv REVUQUNIIFBBUlRJVElPTiwgd2UgaGF2ZW4ndCBhZGRlZCBleHRyYSBsb2dpYyBvbgp0aGUgc3Vi c2NyaWJlciB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlIHRhYmxlIG9uIHRoZSBwdWJsaXNo ZXIgaXMgYSBQQVJUSVRJT05FRApUQUJMRSB3aGlsZSB0aGUgdGFyZ2V0IHRhYmxlIG9uIHRoZSBz dWJjcmliZXIgc2lkZSBpcyBhIE5PUk1BTCB0YWJsZS4gV2Ugd2lsbApyZXNlYXJjaCB0aGlzIG1v cmUgYW5kIGltcHJvdmUgaXQgbGF0ZXIuCi0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvTWFrZWZp bGUgICAgICAgIHwgICAgMiArCiBzcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jICAg fCAzNjE4ICsrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9jb21tYW5kcy9k ZGxfanNvbi5jICAgICAgfCAgNzc2ICsrKysrKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRf dHJpZ2dlci5jIHwgICAgMSArCiBzcmMvYmFja2VuZC9jb21tYW5kcy9tZXNvbi5idWlsZCAgICAg fCAgICAyICsKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgICAgICB8ICAgIDYgKwog c3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oICAgICAgIHwgICAgMSArCiBzcmMvaW5jbHVk ZS90Y29wL2RkbF9kZXBhcnNlLmggICAgICAgfCAgIDIzICsKIHNyYy9pbmNsdWRlL3Rjb3AvZGVw YXJzZV91dGlsaXR5LmggICB8ICAgMTEgKy0KIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5s aXN0ICAgICB8ICAgIDQgKwogMTAgZmlsZXMgY2hhbmdlZCwgNDQ0MyBpbnNlcnRpb25zKCspLCAx IGRlbGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAxMDA3NTUgc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRs X2RlcGFyc2UuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9q c29uLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS90Y29wL2RkbF9kZXBhcnNlLmgK CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9NYWtlZmlsZSBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL01ha2VmaWxlCmluZGV4IDQ4ZjczNDhmOTEuLjE3MWRmYjI4MDAgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1h bmRzL01ha2VmaWxlCkBAIC0yOSw2ICsyOSw4IEBAIE9CSlMgPSBcCiAJY29weXRvLm8gXAogCWNy ZWF0ZWFzLm8gXAogCWRiY29tbWFuZHMubyBcCisJZGRsX2RlcGFyc2UubyBcCisJZGRsX2pzb24u byBcCiAJZGVmaW5lLm8gXAogCWRpc2NhcmQubyBcCiAJZHJvcGNtZHMubyBcCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jIGIvc3JjL2JhY2tlbmQvY29tbWFu ZHMvZGRsX2RlcGFyc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwLi40 M2VlYzdkMTM1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2Rl cGFyc2UuYwpAQCAtMCwwICsxLDM2MTggQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGRk bF9kZXBhcnNlLmMKKyAqCSAgRnVuY3Rpb25zIHRvIGNvbnZlcnQgdXRpbGl0eSBjb21tYW5kcyB0 byBtYWNoaW5lLXBhcnNlYWJsZQorICoJICByZXByZXNlbnRhdGlvbgorICoKKyAqIFBvcnRpb25z IENvcHlyaWdodCAoYykgMTk5Ni0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBH cm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2 ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBOT1RFUworICoKKyAqIFRoaXMgaXMgaW50ZW5k ZWQgdG8gcHJvdmlkZSBKU09OIGJsb2JzIHJlcHJlc2VudGluZyBEREwgY29tbWFuZHMsIHdoaWNo IGNhbgorICogbGF0ZXIgYmUgcmUtcHJvY2Vzc2VkIGludG8gcGxhaW4gc3RyaW5ncyBieSB3ZWxs LWRlZmluZWQgc3ByaW50Zi1saWtlCisgKiBleHBhbnNpb24uICBUaGVzZSBKU09OIG9iamVjdHMg YXJlIGludGVuZGVkIHRvIGFsbG93IGZvciBtYWNoaW5lLWVkaXRpbmcgb2YKKyAqIHRoZSBjb21t YW5kcywgYnkgcmVwbGFjaW5nIGNlcnRhaW4gbm9kZXMgd2l0aGluIHRoZSBvYmplY3RzLgorICoK KyAqIE11Y2ggb2YgdGhlIGluZm9ybWF0aW9uIGluIHRoZSBvdXRwdXQgYmxvYiBhY3R1YWxseSBj b21lcyBmcm9tIHN5c3RlbQorICogY2F0YWxvZ3MsIG5vdCBmcm9tIHRoZSBjb21tYW5kIHBhcnNl IG5vZGUsIGFzIGl0IGlzIGltcG9zc2libGUgdG8gcmVsaWFibHkKKyAqIGNvbnN0cnVjdCBhIGZ1 bGx5LXNwZWNpZmllZCBjb21tYW5kIChpLmUuIG9uZSBub3QgZGVwZW5kZW50IG9uIHNlYXJjaF9w YXRoCisgKiBldGMpIGxvb2tpbmcgb25seSBhdCB0aGUgcGFyc2Ugbm9kZS4KKyAqCisgKiBEZXBh cnNlIG9iamVjdCB0cmVlIGlzIGNyZWF0ZWQgYnkgdXNpbmc6CisgKiAJYSkgbmV3X29ianRyZWUo Imtub3cgY29udGVudHMiKSB3aGVyZSB0aGUgY29tcGxldGUgdHJlZSBjb250ZW50IGlzIGtub3du IG9yCisgKiAgICAgdGhlIGluaXRpYWwgdHJlZSBjb250ZW50IGlzIGtub3duLgorICogCWIpIG5l d19vYmp0cmVlKCIiKSBmb3IgdGhlIHN5bnRheCB3aGVyZSB0aGUgb2JqZWN0IHRyZWUgd2lsbCBi ZSBkZXJpdmVkCisgKiAgICAgYmFzZWQgb24gc29tZSBjb25kaXRpb25hbCBjaGVja3MuCisgKiAJ YykgbmV3X29ianRyZWVfVkEgd2hlcmUgdGhlIGNvbXBsZXRlIHRyZWUgY2FuIGJlIGRlcml2ZWQg dXNpbmcgc29tZSBmaXhlZAorICogICAgIGNvbnRlbnQgYW5kL29yIHNvbWUgdmFyaWFibGUgYXJn dW1lbnRzLgorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNrZW5kL2NvbW1hbmRz L2RkbF9kZXBhcnNlLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUgInBv c3RncmVzLmgiCisKKyNpbmNsdWRlICJhY2Nlc3MvYW1hcGkuaCIKKyNpbmNsdWRlICJhY2Nlc3Mv cmVsYXRpb24uaCIKKyNpbmNsdWRlICJhY2Nlc3MvdGFibGUuaCIKKyNpbmNsdWRlICJjYXRhbG9n L25hbWVzcGFjZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfYW0uaCIKKyNpbmNsdWRlICJjYXRh bG9nL3BnX2FnZ3JlZ2F0ZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfYXV0aGlkLmgiCisjaW5j bHVkZSAiY2F0YWxvZy9wZ19jYXN0LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb2xsYXRpb24u aCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2NvbnN0cmFpbnQuaCIKKyNpbmNsdWRlICJjYXRhbG9n L3BnX2NvbnZlcnNpb24uaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2RlcGVuZC5oIgorI2luY2x1 ZGUgImNhdGFsb2cvcGdfZXh0ZW5zaW9uLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19mb3JlaWdu X2RhdGFfd3JhcHBlci5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfZm9yZWlnbl9zZXJ2ZXIuaCIK KyNpbmNsdWRlICJjYXRhbG9nL3BnX2luaGVyaXRzLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19s YW5ndWFnZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfbGFyZ2VvYmplY3QuaCIKKyNpbmNsdWRl ICJjYXRhbG9nL3BnX25hbWVzcGFjZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfb3BjbGFzcy5o IgorI2luY2x1ZGUgImNhdGFsb2cvcGdfb3BlcmF0b3IuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3Bn X29wZmFtaWx5LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19wb2xpY3kuaCIKKyNpbmNsdWRlICJj YXRhbG9nL3BnX3Byb2MuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3JhbmdlLmgiCisjaW5jbHVk ZSAiY2F0YWxvZy9wZ19yZXdyaXRlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19zZXF1ZW5jZS5o IgorI2luY2x1ZGUgImNhdGFsb2cvcGdfc3RhdGlzdGljX2V4dC5oIgorI2luY2x1ZGUgImNhdGFs b2cvcGdfdHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ190c19jb25maWcuaCIKKyNp bmNsdWRlICJjYXRhbG9nL3BnX3RzX2RpY3QuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3RzX3Bh cnNlci5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdHNfdGVtcGxhdGUuaCIKKyNpbmNsdWRlICJj YXRhbG9nL3BnX3R5cGUuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3VzZXJfbWFwcGluZy5oIgor I2luY2x1ZGUgImNvbW1hbmRzL2RlZnJlbS5oIgorI2luY2x1ZGUgImNvbW1hbmRzL3NlcXVlbmNl LmgiCisjaW5jbHVkZSAiY29tbWFuZHMvdGFibGVzcGFjZS5oIgorI2luY2x1ZGUgImZvcmVpZ24v Zm9yZWlnbi5oIgorI2luY2x1ZGUgImZ1bmNhcGkuaCIKKyNpbmNsdWRlICJtYi9wZ193Y2hhci5o IgorI2luY2x1ZGUgIm5vZGVzL25vZGVGdW5jcy5oIgorI2luY2x1ZGUgIm5vZGVzL3BhcnNlbm9k ZXMuaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvb3B0aW1pemVyLmgiCisjaW5jbHVkZSAicGFyc2Vy L3BhcnNlX3R5cGUuaCIKKyNpbmNsdWRlICJyZXdyaXRlL3Jld3JpdGVIYW5kbGVyLmgiCisjaW5j bHVkZSAidGNvcC9kZGxfZGVwYXJzZS5oIgorI2luY2x1ZGUgInRjb3AvdXRpbGl0eS5oIgorI2lu Y2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvZm1ncm9pZHMuaCIKKyNp bmNsdWRlICJ1dGlscy9ndWMuaCIKKyNpbmNsdWRlICJ1dGlscy9qc29uYi5oIgorI2luY2x1ZGUg InV0aWxzL2xzeXNjYWNoZS5oIgorI2luY2x1ZGUgInV0aWxzL3JlbC5oIgorI2luY2x1ZGUgInV0 aWxzL3J1bGV1dGlscy5oIgorI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCisKKy8qIEVzdGlt YXRlZCBsZW5ndGggb2YgdGhlIGdlbmVyYXRlZCBqc29uYiBzdHJpbmcgKi8KKyNkZWZpbmUgSlNP TkJfRVNUSU1BVEVEX0xFTiAxMjgKKworLyoKKyAqIEJlZm9yZSB0aGV5IGFyZSB0dXJuZWQgaW50 byBKU09OQiByZXByZXNlbnRhdGlvbiwgZWFjaCBjb21tYW5kIGlzCisgKiByZXByZXNlbnRlZCBh cyBhbiBvYmplY3QgdHJlZSwgdXNpbmcgdGhlIHN0cnVjdHMgYmVsb3cuCisgKi8KK3R5cGVkZWYg ZW51bQoreworCU9ialR5cGVOdWxsLAorCU9ialR5cGVCb29sLAorCU9ialR5cGVTdHJpbmcsCisJ T2JqVHlwZUFycmF5LAorCU9ialR5cGVJbnRlZ2VyLAorCU9ialR5cGVGbG9hdCwKKwlPYmpUeXBl T2JqZWN0Cit9IE9ialR5cGU7CisKKy8qCisgKiBSZXByZXNlbnQgdGhlIGNvbW1hbmQgYXMgYW4g b2JqZWN0IHRyZWUuCisgKi8KK3R5cGVkZWYgc3RydWN0IE9ialRyZWUKK3sKKwlzbGlzdF9oZWFk CXBhcmFtczsJCQkvKiBPYmplY3QgdHJlZSBwYXJhbWV0ZXJzICovCisJaW50CQkJbnVtUGFyYW1z OwkJLyogTnVtYmVyIG9mIHBhcmFtZXRlcnMgaW4gdGhlIG9iamVjdCB0cmVlICovCisJU3RyaW5n SW5mbwlmbXRpbmZvOwkJLyogRm9ybWF0IHN0cmluZyBvZiB0aGUgT2JqVHJlZSAqLworCWJvb2wJ CXByZXNlbnQ7CQkvKiBJbmRpY2F0ZXMgaWYgYm9vbGVhbiB2YWx1ZSBzaG91bGQgYmUgc3RvcmVk ICovCit9IE9ialRyZWU7CisKKy8qCisgKiBBbiBlbGVtZW50IG9mIGFuIG9iamVjdCB0cmVlIChP YmpUcmVlKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgT2JqRWxlbQoreworCWNoYXIJICAgKm5hbWU7 CQkJLyogTmFtZSBvZiBvYmplY3QgZWxlbWVudCAqLworCU9ialR5cGUJCW9ianR5cGU7CQkvKiBP YmplY3QgdHlwZSAqLworCisJdW5pb24KKwl7CisJCWJvb2wJCWJvb2xlYW47CisJCWNoYXIJICAg KnN0cmluZzsKKwkJaW50NjQJCWludGVnZXI7CisJCWZsb2F0OAkJZmx0OworCQlPYmpUcmVlICAg ICpvYmplY3Q7CisJCUxpc3QJICAgKmFycmF5OworCX0JCQl2YWx1ZTsJCQkvKiBTdG9yZSB0aGUg b2JqZWN0IHZhbHVlIGJhc2VkIG9uIHRoZSBvYmplY3QKKwkJCQkJCQkJICogdHlwZSAqLworCXNs aXN0X25vZGUJbm9kZTsJCQkvKiBVc2VkIGluIGNvbnZlcnRpbmcgYmFjayB0byBPYmpFbGVtCisJ CQkJCQkJCSAqIHN0cnVjdHVyZSAqLworfSBPYmpFbGVtOworCisvKgorICogUmVkdWNlIHNvbWUg dW5uZWNlc3Nhcnkgc3RyaW5ncyBmcm9tIHRoZSBvdXRwdXQganNvbiB3aGVuIHZlcmJvc2UKKyAq IGFuZCAicHJlc2VudCIgbWVtYmVyIGlzIGZhbHNlLiBUaGlzIG1lYW5zIHRoZXNlIHN0cmluZ3Mg d29uJ3QgYmUgbWVyZ2VkIGludG8KKyAqIHRoZSBsYXN0IERETCBjb21tYW5kLgorICovCitib29s CQl2ZXJib3NlID0gdHJ1ZTsKKworc3RhdGljIHZvaWQgYXBwZW5kX2FycmF5X29iamVjdChPYmpU cmVlICp0cmVlLCBjaGFyICpzdWJfZm10LCBMaXN0ICphcnJheSk7CitzdGF0aWMgdm9pZCBhcHBl bmRfYm9vbF9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCwgYm9vbCB2YWx1ZSk7 CitzdGF0aWMgdm9pZCBhcHBlbmRfbnVsbF9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3Vi X2ZtdCk7CitzdGF0aWMgdm9pZCBhcHBlbmRfb2JqZWN0X29iamVjdChPYmpUcmVlICp0cmVlLCBj aGFyICpzdWJfZm10LCBPYmpUcmVlICp2YWx1ZSk7CitzdGF0aWMgY2hhciAqYXBwZW5kX29iamVj dF90b19mb3JtYXRfc3RyaW5nKE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQpOworc3RhdGlj IHZvaWQgYXBwZW5kX3ByZW1hZGVfb2JqZWN0KE9ialRyZWUgKnRyZWUsIE9iakVsZW0gKmVsZW0p Oworc3RhdGljIHZvaWQgYXBwZW5kX3N0cmluZ19vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAq c3ViX2ZtdCwgY2hhciAqbmFtZSwKKwkJCQkJCQkJIGNoYXIgKnZhbHVlKTsKK3N0YXRpYyB2b2lk IGZvcm1hdF90eXBlX2RldGFpbGVkKE9pZCB0eXBlX29pZCwgaW50MzIgdHlwZW1vZCwKKwkJCQkJ CQkJIE9pZCAqbnNwaWQsIGNoYXIgKip0eXBuYW1lLCBjaGFyICoqdHlwZW1vZHN0ciwKKwkJCQkJ CQkJIGJvb2wgKnR5cGFycmF5KTsKK3N0YXRpYyBPYmpFbGVtICpuZXdfb2JqZWN0KE9ialR5cGUg dHlwZSwgY2hhciAqbmFtZSk7CitzdGF0aWMgT2JqVHJlZSAqbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lX2lkKE9pZCBjbGFzc0lkLCBPaWQgb2JqZWN0SWQpOworc3RhdGljIE9iakVsZW0gKm5ld19v YmplY3Rfb2JqZWN0KE9ialRyZWUgKnZhbHVlKTsKK3N0YXRpYyBPYmpUcmVlICpuZXdfb2JqdHJl ZV9WQShjaGFyICpmbXQsIGludCBudW1vYmpzLC4uLik7CitzdGF0aWMgSnNvbmJWYWx1ZSAqb2Jq dHJlZV90b19qc29uYl9yZWMoT2JqVHJlZSAqdHJlZSwgSnNvbmJQYXJzZVN0YXRlICpzdGF0ZSk7 CitzdGF0aWMgdm9pZCBwZ19nZXRfaW5kZXhkZWZfZGV0YWlsZWQoT2lkIGluZGV4cmVsaWQsCisJ CQkJCQkJCQkgY2hhciAqKmluZGV4X2FtLAorCQkJCQkJCQkJIGNoYXIgKipkZWZpbml0aW9uLAor CQkJCQkJCQkJIGNoYXIgKipyZWxvcHRpb25zLAorCQkJCQkJCQkJIGNoYXIgKip0YWJsZXNwYWNl LAorCQkJCQkJCQkJIGNoYXIgKip3aGVyZUNsYXVzZSk7CitzdGF0aWMgY2hhciAqUmVsYXRpb25H ZXRDb2x1bW5EZWZhdWx0KFJlbGF0aW9uIHJlbCwgQXR0ck51bWJlciBhdHRubywKKwkJCQkJCQkJ CSAgTGlzdCAqZHBjb250ZXh0LCBMaXN0ICoqZXhwcnMpOworCitzdGF0aWMgT2JqVHJlZSAqZGVw YXJzZV9Db2x1bW5EZWYoUmVsYXRpb24gcmVsYXRpb24sIExpc3QgKmRwY29udGV4dCwgYm9vbCBj b21wb3NpdGUsCisJCQkJCQkJCSAgQ29sdW1uRGVmICpjb2xkZWYsIGJvb2wgaXNfYWx0ZXIsIExp c3QgKipleHBycyk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9Db2x1bW5JZGVudGl0eShPaWQg c2VxcmVsaWQsIGNoYXIgaWRlbnRpdHksIGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGljIE9ialRy ZWUgKmRlcGFyc2VfQ29sdW1uU2V0T3B0aW9ucyhBbHRlclRhYmxlQ21kICpzdWJjbWQpOworCitz dGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9EZWZFbGVtKERlZkVsZW0gKmVsZW0sIGJvb2wgaXNfcmVz ZXQpOworc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfT25Db21taXRDbGF1c2UoT25Db21taXRBY3Rp b24gb3B0aW9uKTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX1JlbFNldE9wdGlvbnMoQWx0ZXJU YWJsZUNtZCAqc3ViY21kKTsKKworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9D YWNoZShGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGlj IGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9DeWNsZShGb3JtX3BnX3NlcXVlbmNlIHNlcWRh dGEsIGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1Nl cV9JbmNyZW1lbnRCeShGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUp Oworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9NaW52YWx1ZShGb3JtX3BnX3Nl cXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGljIGlubGluZSBPYmpFbGVt ICpkZXBhcnNlX1NlcV9NYXh2YWx1ZShGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0 ZXJfdGFibGUpOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9SZXN0YXJ0KEZv cm1fcGdfc2VxdWVuY2VfZGF0YSBzZXFkYXRhKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVw YXJzZV9TZXFfU3RhcnR3aXRoKEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90 YWJsZSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfU2VxX0FzKERlZkVsZW0gKmVs ZW0pOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1R5cGVfU3RvcmFnZShGb3JtX3Bn X3R5cGUgdHlwRm9ybSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfVHlwZV9SZWNl aXZlKEZvcm1fcGdfdHlwZSB0eXBGb3JtKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJz ZV9UeXBlX1NlbmQoRm9ybV9wZ190eXBlIHR5cEZvcm0pOworc3RhdGljIGlubGluZSBPYmpFbGVt ICpkZXBhcnNlX1R5cGVfVHlwbW9kX0luKEZvcm1fcGdfdHlwZSB0eXBGb3JtKTsKK3N0YXRpYyBp bmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9UeXBlX1R5cG1vZF9PdXQoRm9ybV9wZ190eXBlIHR5cEZv cm0pOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1R5cGVfQW5hbHl6ZShGb3JtX3Bn X3R5cGUgdHlwRm9ybSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfVHlwZV9TdWJz Y3JpcHQoRm9ybV9wZ190eXBlIHR5cEZvcm0pOworCitzdGF0aWMgTGlzdCAqZGVwYXJzZV9JbmhS ZWxhdGlvbnMoT2lkIG9iamVjdElkKTsKK3N0YXRpYyBMaXN0ICpkZXBhcnNlX1RhYmxlRWxlbWVu dHMoUmVsYXRpb24gcmVsYXRpb24sIExpc3QgKnRhYmxlRWxlbWVudHMsIExpc3QgKmRwY29udGV4 dCwKKwkJCQkJCQkJICAgYm9vbCB0eXBlZCwgYm9vbCBjb21wb3NpdGUpOworCisvKgorICogQXBw ZW5kIHByZXNlbnQgYXMgZmFsc2UgdG8gYSB0cmVlLgorICovCitzdGF0aWMgdm9pZAorYXBwZW5k X25vdF9wcmVzZW50KE9ialRyZWUgKnRyZWUpCit7CisJYXBwZW5kX2Jvb2xfb2JqZWN0KHRyZWUs ICJwcmVzZW50IiwgZmFsc2UpOworfQorCisvKgorICogQXBwZW5kIGFuIGFycmF5IHBhcmFtZXRl ciB0byBhIHRyZWUuCisgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfYXJyYXlfb2JqZWN0KE9ialRy ZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQsIExpc3QgKmFycmF5KQoreworCU9iakVsZW0gICAgKnBh cmFtOworCWNoYXIJICAgKm9iamVjdF9uYW1lOworCisJQXNzZXJ0KHN1Yl9mbXQpOworCisJaWYg KGxpc3RfbGVuZ3RoKGFycmF5KSA9PSAwKQorCQlyZXR1cm47CisKKwlpZiAoIXZlcmJvc2UpCisJ eworCQlMaXN0Q2VsbCAgICpsYzsKKworCQkvKiBSZW1vdmUgZWxlbWVudHMgd2hlcmUgcHJlc2Vu dCBmbGFnIGlzIGZhbHNlICovCisJCWZvcmVhY2gobGMsIGFycmF5KQorCQl7CisJCQlPYmpFbGVt ICAgICplbGVtID0gKE9iakVsZW0gKikgbGZpcnN0KGxjKTsKKworCQkJQXNzZXJ0KGVsZW0tPm9i anR5cGUgPT0gT2JqVHlwZU9iamVjdCB8fAorCQkJCSAgIGVsZW0tPm9ianR5cGUgPT0gT2JqVHlw ZVN0cmluZyk7CisKKwkJCWlmICghZWxlbS0+dmFsdWUub2JqZWN0LT5wcmVzZW50ICYmCisJCQkJ ZWxlbS0+b2JqdHlwZSA9PSBPYmpUeXBlT2JqZWN0KQorCQkJCWFycmF5ID0gZm9yZWFjaF9kZWxl dGVfY3VycmVudChhcnJheSwgbGMpOworCQl9CisKKwl9CisKKwkvKiBDaGVjayBmb3IgZW1wdHkg bGlzdCBhZnRlciByZW1vdmluZyBlbGVtZW50cyAqLworCWlmIChsaXN0X2xlbmd0aChhcnJheSkg PT0gMCkKKwkJcmV0dXJuOworCisJb2JqZWN0X25hbWUgPSBhcHBlbmRfb2JqZWN0X3RvX2Zvcm1h dF9zdHJpbmcodHJlZSwgc3ViX2ZtdCk7CisKKwlwYXJhbSA9IG5ld19vYmplY3QoT2JqVHlwZUFy cmF5LCBvYmplY3RfbmFtZSk7CisJcGFyYW0tPnZhbHVlLmFycmF5ID0gYXJyYXk7CisJYXBwZW5k X3ByZW1hZGVfb2JqZWN0KHRyZWUsIHBhcmFtKTsKK30KKworLyoKKyAqIEFwcGVuZCBhIGJvb2xl YW4gcGFyYW1ldGVyIHRvIGEgdHJlZS4KKyAqLworc3RhdGljIHZvaWQKK2FwcGVuZF9ib29sX29i amVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10LCBib29sIHZhbHVlKQoreworCU9iakVs ZW0gICAgKnBhcmFtOworCWNoYXIJICAgKm9iamVjdF9uYW1lID0gc3ViX2ZtdDsKKwlib29sCQlp c19wcmVzZW50X2ZsYWcgPSBmYWxzZTsKKworCUFzc2VydChzdWJfZm10KTsKKworCS8qCisJICog Q2hlY2sgaWYgdGhlIGZvcm1hdCBzdHJpbmcgaXMgJ3ByZXNlbnQnIGFuZCBpZiB5ZXMsIHN0b3Jl IHRoZSBib29sZWFuCisJICogdmFsdWUKKwkgKi8KKwlpZiAoc3RyY21wKHN1Yl9mbXQsICJwcmVz ZW50IikgPT0gMCkKKwl7CisJCWlzX3ByZXNlbnRfZmxhZyA9IHRydWU7CisJCXRyZWUtPnByZXNl bnQgPSB2YWx1ZTsKKwl9CisKKwlpZiAoIXZlcmJvc2UgJiYgIXRyZWUtPnByZXNlbnQpCisJCXJl dHVybjsKKworCWlmICghaXNfcHJlc2VudF9mbGFnKQorCQlvYmplY3RfbmFtZSA9IGFwcGVuZF9v YmplY3RfdG9fZm9ybWF0X3N0cmluZyh0cmVlLCBzdWJfZm10KTsKKworCXBhcmFtID0gbmV3X29i amVjdChPYmpUeXBlQm9vbCwgb2JqZWN0X25hbWUpOworCXBhcmFtLT52YWx1ZS5ib29sZWFuID0g dmFsdWU7CisJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUsIHBhcmFtKTsKK30KKworLyoKKyAq IEFwcGVuZCB0aGUgaW5wdXQgZm9ybWF0IHN0cmluZyB0byB0aGUgT2JqVHJlZS4KKyAqLworc3Rh dGljIHZvaWQKK2FwcGVuZF9mb3JtYXRfc3RyaW5nKE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9m bXQpCit7CisJaW50CQkJbGVuOworCWNoYXIJICAgKmZtdDsKKworCWlmICh0cmVlLT5mbXRpbmZv ID09IE5VTEwpCisJCXJldHVybjsKKworCWZtdCA9IHRyZWUtPmZtdGluZm8tPmRhdGE7CisJbGVu ID0gdHJlZS0+Zm10aW5mby0+bGVuOworCisJLyogQWRkIGEgc2VwYXJhdG9yIGlmIG5lY2Vzc2Fy eSAqLworCWlmIChsZW4gPiAwICYmIGZtdFtsZW4gLSAxXSAhPSAnICcpCisJCWFwcGVuZFN0cmlu Z0luZm9TcGFjZXModHJlZS0+Zm10aW5mbywgMSk7CisKKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5n KHRyZWUtPmZtdGluZm8sIHN1Yl9mbXQpOworfQorCisvKgorICogQXBwZW5kIGEgTlVMTCBvYmpl Y3QgdG8gYSB0cmVlLgorICovCitzdGF0aWMgdm9pZAorYXBwZW5kX251bGxfb2JqZWN0KE9ialRy ZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQpCit7CisJY2hhcgkgICAqb2JqZWN0X25hbWU7CisKKwlB c3NlcnQoc3ViX2ZtdCk7CisKKwlpZiAoIXZlcmJvc2UpCisJCXJldHVybjsKKworCW9iamVjdF9u YW1lID0gYXBwZW5kX29iamVjdF90b19mb3JtYXRfc3RyaW5nKHRyZWUsIHN1Yl9mbXQpOworCisJ YXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUsIG5ld19vYmplY3QoT2JqVHlwZU51bGwsIG9iamVj dF9uYW1lKSk7Cit9CisKKy8qCisgKiBBcHBlbmQgYW4gb2JqZWN0IHBhcmFtZXRlciB0byBhIHRy ZWUuCisgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfb2JqZWN0X29iamVjdChPYmpUcmVlICp0cmVl LCBjaGFyICpzdWJfZm10LCBPYmpUcmVlICp2YWx1ZSkKK3sKKwlPYmpFbGVtICAgICpwYXJhbTsK KwljaGFyCSAgICpvYmplY3RfbmFtZTsKKworCUFzc2VydChzdWJfZm10KTsKKworCWlmICghdmVy Ym9zZSAmJiAhdmFsdWUtPnByZXNlbnQpCisJCXJldHVybjsKKworCW9iamVjdF9uYW1lID0gYXBw ZW5kX29iamVjdF90b19mb3JtYXRfc3RyaW5nKHRyZWUsIHN1Yl9mbXQpOworCisJcGFyYW0gPSBu ZXdfb2JqZWN0KE9ialR5cGVPYmplY3QsIG9iamVjdF9uYW1lKTsKKwlwYXJhbS0+dmFsdWUub2Jq ZWN0ID0gdmFsdWU7CisJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUsIHBhcmFtKTsKK30KKwor LyoKKyAqIFJldHVybiB0aGUgb2JqZWN0IG5hbWUgd2hpY2ggaXMgZXh0cmFjdGVkIGZyb20gdGhl IGlucHV0ICIqJXtuYW1lWzouXX0qIgorICogc3R5bGUgc3RyaW5nLiBBbmQgYXBwZW5kIHRoZSBp bnB1dCBmb3JtYXQgc3RyaW5nIHRvIHRoZSBPYmpUcmVlLgorICovCitzdGF0aWMgY2hhciAqCith cHBlbmRfb2JqZWN0X3RvX2Zvcm1hdF9zdHJpbmcoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2Zt dCkKK3sKKwlTdHJpbmdJbmZvRGF0YSBvYmplY3RfbmFtZTsKKwljb25zdCBjaGFyICplbmRfcHRy OworCWNvbnN0IGNoYXIgKmNwOworCWJvb2wJCXN0YXJ0X2NvcHkgPSBmYWxzZTsKKworCWlmIChz dWJfZm10ID09IE5VTEwgfHwgdHJlZS0+Zm10aW5mbyA9PSBOVUxMKQorCQlyZXR1cm4gc3ViX2Zt dDsKKworCWluaXRTdHJpbmdJbmZvKCZvYmplY3RfbmFtZSk7CisJZW5kX3B0ciA9IHN1Yl9mbXQg KyBzdHJsZW4oc3ViX2ZtdCk7CisKKwlmb3IgKGNwID0gc3ViX2ZtdDsgY3AgPCBlbmRfcHRyOyBj cCsrKQorCXsKKwkJaWYgKCpjcCA9PSAneycpCisJCXsKKwkJCXN0YXJ0X2NvcHkgPSB0cnVlOwor CQkJY29udGludWU7CisJCX0KKworCQlpZiAoIXN0YXJ0X2NvcHkpCisJCQljb250aW51ZTsKKwor CQlpZiAoKmNwID09ICc6JyB8fCAqY3AgPT0gJ30nKQorCQkJYnJlYWs7CisKKwkJYXBwZW5kU3Ry aW5nSW5mb0NoYXJNYWNybygmb2JqZWN0X25hbWUsICpjcCk7CisJfQorCisJaWYgKG9iamVjdF9u YW1lLmxlbiA9PSAwKQorCQllbG9nKEVSUk9SLCAib2JqZWN0IG5hbWUgbm90IGZvdW5kIik7CisK KwlhcHBlbmRfZm9ybWF0X3N0cmluZyh0cmVlLCBzdWJfZm10KTsKKworCXJldHVybiBvYmplY3Rf bmFtZS5kYXRhOworfQorCisvKgorICogQXBwZW5kIGEgcHJlYWxsb2NhdGVkIHBhcmFtZXRlciB0 byBhIHRyZWUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorYXBwZW5kX3ByZW1hZGVfb2JqZWN0 KE9ialRyZWUgKnRyZWUsIE9iakVsZW0gKmVsZW0pCit7CisJc2xpc3RfcHVzaF9oZWFkKCZ0cmVl LT5wYXJhbXMsICZlbGVtLT5ub2RlKTsKKwl0cmVlLT5udW1QYXJhbXMrKzsKK30KKworLyoKKyAq IEFwcGVuZCBhIHN0cmluZyBwYXJhbWV0ZXIgdG8gYSB0cmVlLgorICovCitzdGF0aWMgdm9pZAor YXBwZW5kX3N0cmluZ19vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCwgY2hhciAq IG9iamVjdF9uYW1lLAorCQkJCQkgY2hhciAqdmFsdWUpCit7CisJT2JqRWxlbSAgICAqcGFyYW07 CisKKwlBc3NlcnQoc3ViX2ZtdCk7CisKKwlpZiAoIXZlcmJvc2UgJiYgKHZhbHVlID09IE5VTEwg fHwgdmFsdWVbMF0gPT0gJ1wwJykpCisJCXJldHVybjsKKworCWFwcGVuZF9mb3JtYXRfc3RyaW5n KHRyZWUsIHN1Yl9mbXQpOworCXBhcmFtID0gbmV3X29iamVjdChPYmpUeXBlU3RyaW5nLCBvYmpl Y3RfbmFtZSk7CisJcGFyYW0tPnZhbHVlLnN0cmluZyA9IHZhbHVlOworCWFwcGVuZF9wcmVtYWRl X29iamVjdCh0cmVlLCBwYXJhbSk7Cit9CisKKy8qCisgKiBTaW1pbGFyIHRvIGZvcm1hdF90eXBl X2V4dGVuZGVkLCBleGNlcHQgd2UgcmV0dXJuIGVhY2ggYml0IG9mIGluZm9ybWF0aW9uCisgKiBz ZXBhcmF0ZWx5OgorICoKKyAqIC0gbnNwaWQgaXMgdGhlIHNjaGVtYSBPSUQuICBGb3IgY2VydGFp biBTUUwtc3RhbmRhcmQgdHlwZXMgd2hpY2ggaGF2ZSB3ZWlyZAorICogICB0eXBtb2QgcnVsZXMs IHdlIHJldHVybiBJbnZhbGlkT2lkOyB0aGUgY2FsbGVyIGlzIGV4cGVjdGVkIHRvIG5vdCBzY2hl bWEtCisgKiAgIHF1YWxpZnkgdGhlIG5hbWUgbm9yIGFkZCBxdW90ZXMgdG8gdGhlIHR5cGUgbmFt ZSBpbiB0aGlzIGNhc2UuCisgKgorICogLSB0eXBuYW1lIGlzIHNldCB0byB0aGUgdHlwZSBuYW1l LCB3aXRob3V0IHF1b3RlcworICoKKyAqIC0gdHlwZW1vZHN0ciBpcyBzZXQgdG8gdGhlIHR5cGVt b2QsIGlmIGFueSwgYXMgYSBzdHJpbmcgd2l0aCBwYXJlbnRoZXNlcworICoKKyAqIC0gdHlwYXJy YXkgaW5kaWNhdGVzIHdoZXRoZXIgW11zIG11c3QgYmUgYWRkZWQKKyAqCisgKiBXZSBkb24ndCB0 cnkgdG8gZGVjb2RlIHR5cGUgbmFtZXMgdG8gdGhlaXIgc3RhbmRhcmQtbWFuZGF0ZWQgbmFtZXMs IGV4Y2VwdAorICogaW4gdGhlIGNhc2VzIG9mIHR5cGVzIHdpdGggdW51c3VhbCB0eXBtb2QgcnVs ZXMuCisgKi8KK3N0YXRpYyB2b2lkCitmb3JtYXRfdHlwZV9kZXRhaWxlZChPaWQgdHlwZV9vaWQs IGludDMyIHR5cGVtb2QsCisJCQkJCSBPaWQgKm5zcGlkLCBjaGFyICoqdHlwZW5hbWUsIGNoYXIg Kip0eXBlbW9kc3RyLAorCQkJCQkgYm9vbCAqdHlwZWFycmF5KQoreworCUhlYXBUdXBsZQl0dXBs ZTsKKwlGb3JtX3BnX3R5cGUgdHlwZWZvcm07CisJT2lkCQkJYXJyYXlfYmFzZV90eXBlOworCisJ dHVwbGUgPSBTZWFyY2hTeXNDYWNoZTEoVFlQRU9JRCwgT2JqZWN0SWRHZXREYXR1bSh0eXBlX29p ZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSkpCisJCWVsb2coRVJST1IsICJjYWNo ZSBsb29rdXAgZmFpbGVkIGZvciB0eXBlIHdpdGggT0lEICV1IiwgdHlwZV9vaWQpOworCisJdHlw ZWZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QodHVwbGUpOworCisJLyoKKwkgKiBDaGVj ayBpZiBpdCdzIGEgcmVndWxhciAodmFyaWFibGUgbGVuZ3RoKSBhcnJheSB0eXBlLiAgQXMgYWJv dmUsCisJICogZml4ZWQtbGVuZ3RoIGFycmF5IHR5cGVzIHN1Y2ggYXMgIm5hbWUiIHNob3VsZG4n dCBnZXQgZGVjb25zdHJ1Y3RlZC4KKwkgKi8KKwlhcnJheV9iYXNlX3R5cGUgPSB0eXBlZm9ybS0+ dHlwZWxlbTsKKworCSp0eXBlYXJyYXkgPSAoSXNUcnVlQXJyYXlUeXBlKHR5cGVmb3JtKSAmJiB0 eXBlZm9ybS0+dHlwc3RvcmFnZSAhPSBUWVBTVE9SQUdFX1BMQUlOKTsKKworCWlmICgqdHlwZWFy cmF5KQorCXsKKwkJLyogU3dpdGNoIG91ciBhdHRlbnRpb24gdG8gdGhlIGFycmF5IGVsZW1lbnQg dHlwZSAqLworCQlSZWxlYXNlU3lzQ2FjaGUodHVwbGUpOworCQl0dXBsZSA9IFNlYXJjaFN5c0Nh Y2hlMShUWVBFT0lELCBPYmplY3RJZEdldERhdHVtKGFycmF5X2Jhc2VfdHlwZSkpOworCQlpZiAo IUhlYXBUdXBsZUlzVmFsaWQodHVwbGUpKQorCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBm YWlsZWQgZm9yIHR5cGUgd2l0aCBPSUQgJXUiLCB0eXBlX29pZCk7CisKKwkJdHlwZWZvcm0gPSAo Rm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QodHVwbGUpOworCQl0eXBlX29pZCA9IGFycmF5X2Jhc2Vf dHlwZTsKKwl9CisKKwkvKgorCSAqIFNwZWNpYWwtY2FzZSBjcm9jayBmb3IgdHlwZXMgd2l0aCBz dHJhbmdlIHR5cG1vZCBydWxlcyB3aGVyZSB3ZSBwdXQKKwkgKiB0eXBlbW9kIGF0IHRoZSBtaWRk bGUgb2YgbmFtZSAoZS5nLiBUSU1FKDYpIHdpdGggdGltZSB6b25lKS4gV2UgY2Fubm90CisJICog c2NoZW1hLXF1YWxpZnkgbm9yIGFkZCBxdW90ZXMgdG8gdGhlIHR5cGUgbmFtZSBpbiB0aGVzZSBj YXNlcy4KKwkgKi8KKwkqbnNwaWQgPSBJbnZhbGlkT2lkOworCisJc3dpdGNoICh0eXBlX29pZCkK Kwl7CisJCWNhc2UgSU5URVJWQUxPSUQ6CisJCQkqdHlwZW5hbWUgPSBwc3RyZHVwKCJJTlRFUlZB TCIpOworCQkJYnJlYWs7CisJCWNhc2UgVElNRVNUQU1QVFpPSUQ6CisJCQlpZiAodHlwZW1vZCA8 IDApCisJCQkJKnR5cGVuYW1lID0gcHN0cmR1cCgiVElNRVNUQU1QIFdJVEggVElNRSBaT05FIik7 CisJCQllbHNlCisJCQkJLyogb3RoZXJ3aXNlLCBXSVRIIFRaIGlzIGFkZGVkIGJ5IHR5cG1vZC4g Ki8KKwkJCQkqdHlwZW5hbWUgPSBwc3RyZHVwKCJUSU1FU1RBTVAiKTsKKwkJCWJyZWFrOworCQlj YXNlIFRJTUVTVEFNUE9JRDoKKwkJCSp0eXBlbmFtZSA9IHBzdHJkdXAoIlRJTUVTVEFNUCIpOwor CQkJYnJlYWs7CisJCWNhc2UgVElNRVRaT0lEOgorCQkJaWYgKHR5cGVtb2QgPCAwKQorCQkJCSp0 eXBlbmFtZSA9IHBzdHJkdXAoIlRJTUUgV0lUSCBUSU1FIFpPTkUiKTsKKwkJCWVsc2UKKwkJCQkv KiBvdGhlcndpc2UsIFdJVEggVFogaXMgYWRkZWQgYnkgdHlwbW9kLiAqLworCQkJCSp0eXBlbmFt ZSA9IHBzdHJkdXAoIlRJTUUiKTsKKwkJCWJyZWFrOworCQljYXNlIFRJTUVPSUQ6CisJCQkqdHlw ZW5hbWUgPSBwc3RyZHVwKCJUSU1FIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKworCQkJLyoK KwkJCSAqIE5vIGFkZGl0aW9uYWwgcHJvY2Vzc2luZyBpcyByZXF1aXJlZCBmb3Igb3RoZXIgdHlw ZXMsIHNvIGdldAorCQkJICogdGhlIHR5cGUgbmFtZSBhbmQgc2NoZW1hIGRpcmVjdGx5IGZyb20g dGhlIGNhdGFsb2cuCisJCQkgKi8KKwkJCSpuc3BpZCA9IHR5cGVmb3JtLT50eXBuYW1lc3BhY2U7 CisJCQkqdHlwZW5hbWUgPSBwc3RyZHVwKE5hbWVTdHIodHlwZWZvcm0tPnR5cG5hbWUpKTsKKwl9 CisKKwlpZiAodHlwZW1vZCA+PSAwKQorCQkqdHlwZW1vZHN0ciA9IHByaW50VHlwbW9kKCIiLCB0 eXBlbW9kLCB0eXBlZm9ybS0+dHlwbW9kb3V0KTsKKwllbHNlCisJCSp0eXBlbW9kc3RyID0gcHN0 cmR1cCgiIik7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHVwbGUpOworfQorCisvKgorICogUmV0dXJu IHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIFJFTFBFUlNJU1RFTkNFIHZh bHVlLgorICovCitzdGF0aWMgY2hhciAqCitnZXRfcGVyc2lzdGVuY2Vfc3RyKGNoYXIgcGVyc2lz dGVuY2UpCit7CisJc3dpdGNoIChwZXJzaXN0ZW5jZSkKKwl7CisJCWNhc2UgUkVMUEVSU0lTVEVO Q0VfVEVNUDoKKwkJCXJldHVybiAiVEVNUE9SQVJZIjsKKwkJY2FzZSBSRUxQRVJTSVNURU5DRV9V TkxPR0dFRDoKKwkJCXJldHVybiAiVU5MT0dHRUQiOworCQljYXNlIFJFTFBFUlNJU1RFTkNFX1BF Uk1BTkVOVDoKKwkJCXJldHVybiAiIjsKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bmV4 cGVjdGVkIHBlcnNpc3RlbmNlIG1hcmtpbmcgJWMiLCBwZXJzaXN0ZW5jZSk7CisJCQlyZXR1cm4g IiI7CQkJLyogbWFrZSBjb21waWxlciBoYXBweSAqLworCX0KK30KKworLyoKKyAqIFJldHVybiB0 aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBzdG9yYWdldHlwZSB2YWx1ZS4K KyAqLworc3RhdGljIGlubGluZSBjaGFyICoKK2dldF90eXBlX3N0b3JhZ2UoY2hhciBzdG9yYWdl dHlwZSkKK3sKKwlzd2l0Y2ggKHN0b3JhZ2V0eXBlKQorCXsKKwkJY2FzZSAncCc6CisJCQlyZXR1 cm4gInBsYWluIjsKKwkJY2FzZSAnZSc6CisJCQlyZXR1cm4gImV4dGVybmFsIjsKKwkJY2FzZSAn eCc6CisJCQlyZXR1cm4gImV4dGVuZGVkIjsKKwkJY2FzZSAnbSc6CisJCQlyZXR1cm4gIm1haW4i OworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgc3RvcmFnZSBzcGVjaWZpZXIg JWMiLCBzdG9yYWdldHlwZSk7CisJfQorfQorCisvKgorICogQWxsb2NhdGUgYSBuZXcgcGFyYW1l dGVyLgorICovCitzdGF0aWMgT2JqRWxlbSAqCituZXdfb2JqZWN0KE9ialR5cGUgdHlwZSwgY2hh ciAqbmFtZSkKK3sKKwlPYmpFbGVtICAgICpwYXJhbTsKKworCXBhcmFtID0gcGFsbG9jMChzaXpl b2YoT2JqRWxlbSkpOworCXBhcmFtLT5uYW1lID0gbmFtZTsKKwlwYXJhbS0+b2JqdHlwZSA9IHR5 cGU7CisKKwlyZXR1cm4gcGFyYW07Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBhIG5ldyBvYmplY3Qg cGFyYW1ldGVyLgorICovCitzdGF0aWMgT2JqRWxlbSAqCituZXdfb2JqZWN0X29iamVjdChPYmpU cmVlICp2YWx1ZSkKK3sKKwlPYmpFbGVtICAgICpwYXJhbTsKKworCXBhcmFtID0gbmV3X29iamVj dChPYmpUeXBlT2JqZWN0LCBOVUxMKTsKKwlwYXJhbS0+dmFsdWUub2JqZWN0ID0gdmFsdWU7CisK KwlyZXR1cm4gcGFyYW07Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBhIG5ldyBvYmplY3QgdHJlZSB0 byBzdG9yZSBwYXJhbWV0ZXIgdmFsdWVzLgorICovCitzdGF0aWMgT2JqVHJlZSAqCituZXdfb2Jq dHJlZShjaGFyICpmbXQpCit7CisJT2JqVHJlZSAgICAqcGFyYW1zOworCisJcGFyYW1zID0gcGFs bG9jMChzaXplb2YoT2JqVHJlZSkpOworCXBhcmFtcy0+cHJlc2VudCA9IHRydWU7CisJc2xpc3Rf aW5pdCgmcGFyYW1zLT5wYXJhbXMpOworCisJaWYgKGZtdCkKKwl7CisJCXBhcmFtcy0+Zm10aW5m byA9IG1ha2VTdHJpbmdJbmZvKCk7CisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcocGFyYW1zLT5m bXRpbmZvLCBmbXQpOworCX0KKworCXJldHVybiBwYXJhbXM7Cit9CisKKy8qCisgKiBBIGhlbHBl ciByb3V0aW5lIHRvIHNldCB1cCAle31EIGFuZCAle31PIGVsZW1lbnRzLgorICoKKyAqIEVsZW1l bnRzICJzY2hlbWFfbmFtZSIgYW5kICJvYmpfbmFtZSIgYXJlIHNldC4gIElmIHRoZSBuYW1lc3Bh Y2UgT0lECisgKiBjb3JyZXNwb25kcyB0byBhIHRlbXAgc2NoZW1hLCB0aGF0J3Mgc2V0IHRvICJw Z190ZW1wIi4KKyAqCisgKiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRob3NlIHR3byBlbGVtZW50 IHR5cGVzIGlzIHdoZXRoZXIgdGhlIG9ial9uYW1lIHdpbGwKKyAqIGJlIHF1b3RlZCBhcyBhbiBp ZGVudGlmaWVyIG9yIG5vdCwgd2hpY2ggaXMgbm90IHNvbWV0aGluZyB0aGF0IHRoaXMgcm91dGlu ZQorICogY29uY2VybnMgaXRzZWxmIHdpdGg7IHRoYXQgd2lsbCBiZSB1cCB0byB0aGUgZXhwYW5k IGZ1bmN0aW9uLgorICovCitzdGF0aWMgT2JqVHJlZSAqCituZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWUoT2lkIG5zcGlkLCBjaGFyICpuYW1lKQoreworCU9ialRyZWUgICAgKnF1YWxpZmllZDsKKwlj aGFyCSAgICpuYW1lc3BhY2U7CisKKwlpZiAoaXNBbnlUZW1wTmFtZXNwYWNlKG5zcGlkKSkKKwkJ bmFtZXNwYWNlID0gcHN0cmR1cCgicGdfdGVtcCIpOworCWVsc2UKKwkJbmFtZXNwYWNlID0gZ2V0 X25hbWVzcGFjZV9uYW1lKG5zcGlkKTsKKworCXF1YWxpZmllZCA9IG5ld19vYmp0cmVlX1ZBKE5V TEwsIDIsCisJCQkJCQkJICAgInNjaGVtYW5hbWUiLCBPYmpUeXBlU3RyaW5nLCBuYW1lc3BhY2Us CisJCQkJCQkJICAgIm9iam5hbWUiLCBPYmpUeXBlU3RyaW5nLCBwc3RyZHVwKG5hbWUpKTsKKwor CXJldHVybiBxdWFsaWZpZWQ7Cit9CisKKy8qCisgKiBBIGhlbHBlciByb3V0aW5lIHRvIHNldCB1 cCAle31EIGFuZCAle31PIGVsZW1lbnRzLCB3aXRoIHRoZSBvYmplY3Qgc3BlY2lmaWVkCisgKiBi eSBjbGFzc0lkL29iaklkLgorICovCitzdGF0aWMgT2JqVHJlZSAqCituZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWVfaWQoT2lkIGNsYXNzSWQsIE9pZCBvYmplY3RJZCkKK3sKKwlPYmpUcmVlICAgICpx dWFsaWZpZWQ7CisJUmVsYXRpb24JY2F0YWxvZzsKKwlIZWFwVHVwbGUJY2F0b2JqOworCURhdHVt CQlvYmpfbnNwOworCURhdHVtCQlvYmpfbmFtZTsKKwlBdHRyTnVtYmVyCUFudW1fbmFtZTsKKwlB dHRyTnVtYmVyCUFudW1fbmFtZXNwYWNlOworCUF0dHJOdW1iZXIJQW51bV9vaWQgPSBnZXRfb2Jq ZWN0X2F0dG51bV9vaWQoY2xhc3NJZCk7CisJYm9vbAkJaXNudWxsOworCisJY2F0YWxvZyA9IHRh YmxlX29wZW4oY2xhc3NJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCWNhdG9iaiA9IGdldF9jYXRh bG9nX29iamVjdF9ieV9vaWQoY2F0YWxvZywgQW51bV9vaWQsIG9iamVjdElkKTsKKwlpZiAoIWNh dG9iaikKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9iamVjdCB3aXRo IE9JRCAldSBvZiBjYXRhbG9nIFwiJXNcIiIsCisJCQkgb2JqZWN0SWQsIFJlbGF0aW9uR2V0UmVs YXRpb25OYW1lKGNhdGFsb2cpKTsKKwlBbnVtX25hbWUgPSBnZXRfb2JqZWN0X2F0dG51bV9uYW1l KGNsYXNzSWQpOworCUFudW1fbmFtZXNwYWNlID0gZ2V0X29iamVjdF9hdHRudW1fbmFtZXNwYWNl KGNsYXNzSWQpOworCisJb2JqX25zcCA9IGhlYXBfZ2V0YXR0cihjYXRvYmosIEFudW1fbmFtZXNw YWNlLCBSZWxhdGlvbkdldERlc2NyKGNhdGFsb2cpLAorCQkJCQkJICAmaXNudWxsKTsKKwlpZiAo aXNudWxsKQorCQllbG9nKEVSUk9SLCAibnVsbCBuYW1lc3BhY2UgZm9yIG9iamVjdCAldSIsIG9i amVjdElkKTsKKworCW9ial9uYW1lID0gaGVhcF9nZXRhdHRyKGNhdG9iaiwgQW51bV9uYW1lLCBS ZWxhdGlvbkdldERlc2NyKGNhdGFsb2cpLAorCQkJCQkJICAgJmlzbnVsbCk7CisJaWYgKGlzbnVs bCkKKwkJZWxvZyhFUlJPUiwgIm51bGwgYXR0cmlidXRlIG5hbWUgZm9yIG9iamVjdCAldSIsIG9i amVjdElkKTsKKworCXF1YWxpZmllZCA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShEYXR1bUdl dE9iamVjdElkKG9ial9uc3ApLAorCQkJCQkJCQkJCSBOYW1lU3RyKCpEYXR1bUdldE5hbWUob2Jq X25hbWUpKSk7CisJdGFibGVfY2xvc2UoY2F0YWxvZywgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJl dHVybiBxdWFsaWZpZWQ7Cit9CisKKy8qCisgKiBBIGhlbHBlciByb3V0aW5lIHRvIHNldHVwICV7 fVQgZWxlbWVudHMuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK25ld19vYmp0cmVlX2Zvcl90eXBl KE9pZCB0eXBlSWQsIGludDMyIHR5cG1vZCkKK3sKKwlPaWQJCQl0eXBuc3BpZDsKKwljaGFyCSAg ICp0eXBlX25zcDsKKwljaGFyCSAgICp0eXBlX25hbWUgPSBOVUxMOworCWNoYXIJICAgKnR5cG1v ZHN0cjsKKwlib29sCQl0eXBlX2FycmF5OworCisJZm9ybWF0X3R5cGVfZGV0YWlsZWQodHlwZUlk LCB0eXBtb2QsCisJCQkJCQkgJnR5cG5zcGlkLCAmdHlwZV9uYW1lLCAmdHlwbW9kc3RyLCAmdHlw ZV9hcnJheSk7CisKKwlpZiAoT2lkSXNWYWxpZCh0eXBuc3BpZCkpCisJCXR5cGVfbnNwID0gZ2V0 X25hbWVzcGFjZV9uYW1lX29yX3RlbXAodHlwbnNwaWQpOworCWVsc2UKKwkJdHlwZV9uc3AgPSBw c3RyZHVwKCIiKTsKKworCXJldHVybiBuZXdfb2JqdHJlZV9WQShOVUxMLCA0LAorCQkJCQkJICAi c2NoZW1hbmFtZSIsIE9ialR5cGVTdHJpbmcsIHR5cGVfbnNwLAorCQkJCQkJICAidHlwZW5hbWUi LCBPYmpUeXBlU3RyaW5nLCB0eXBlX25hbWUsCisJCQkJCQkgICJ0eXBtb2QiLCBPYmpUeXBlU3Ry aW5nLCB0eXBtb2RzdHIsCisJCQkJCQkgICJ0eXBhcnJheSIsIE9ialR5cGVCb29sLCB0eXBlX2Fy cmF5KTsKK30KKworLyoKKyAqIEFsbG9jYXRlIGEgbmV3IG9iamVjdCB0cmVlIHRvIHN0b3JlIHBh cmFtZXRlciB2YWx1ZXMgLS0gdmFyYXJncyB2ZXJzaW9uLgorICoKKyAqIFRoZSAiZm10IiBhcmd1 bWVudCBpcyB1c2VkIHRvIGFwcGVuZCBhcyBhICJmbXQiIGVsZW1lbnQgaW4gdGhlIG91dHB1dCBi bG9iLgorICogbnVtb2JqcyBpbmRpY2F0ZXMgdGhlIG51bWJlciBvZiBleHRyYSBlbGVtZW50cyB0 byBhcHBlbmQ7IGZvciBlYWNoIG9uZSwgYQorICogbmFtZSAoc3RyaW5nKSwgdHlwZSAoZnJvbSB0 aGUgT2JqVHlwZSBlbnVtKSBhbmQgdmFsdWUgbXVzdCBiZSBzdXBwbGllZC4gIFRoZQorICogdmFs dWUgbXVzdCBtYXRjaCB0aGUgdHlwZSBnaXZlbjsgZm9yIGluc3RhbmNlLCBPYmpUeXBlSW50ZWdl ciByZXF1aXJlcyBhbgorICogaW50NjQsIE9ialR5cGVTdHJpbmcgcmVxdWlyZXMgYSBjaGFyICos IE9ialR5cGVBcnJheSByZXF1aXJlcyBhIGxpc3QgKG9mCisgKiBPYmpFbGVtKSwgT2JqVHlwZU9i amVjdCByZXF1aXJlcyBhbiBPYmpUcmVlLCBhbmQgc28gb24uICBFYWNoIGVsZW1lbnQgdHlwZSAq CisgKiBtdXN0IG1hdGNoIHRoZSBjb252ZXJzaW9uIHNwZWNpZmllciBnaXZlbiBpbiB0aGUgZm9y bWF0IHN0cmluZywgYXMgZGVzY3JpYmVkCisgKiBpbiBkZGxfZGVwYXJzZV9leHBhbmRfY29tbWFu ZCwgcS52LgorICoKKyAqIE5vdGUgd2UgZG9uJ3QgaGF2ZSB0aGUgbHV4dXJ5IG9mIHNwcmludGYt bGlrZSBjb21waWxlciB3YXJuaW5ncyBmb3IKKyAqIG1hbGZvcm1lZCBhcmd1bWVudCBsaXN0cy4K KyAqLworc3RhdGljIE9ialRyZWUgKgorbmV3X29ianRyZWVfVkEoY2hhciAqZm10LCBpbnQgbnVt b2JqcywuLi4pCit7CisJT2JqVHJlZSAgICAqdHJlZTsKKwl2YV9saXN0CQlhcmdzOworCWludAkJ CWk7CisKKwkvKiBTZXQgdXAgdGhlIHRvcGxldmVsIG9iamVjdCBhbmQgaXRzICJmbXQiICovCisJ dHJlZSA9IG5ld19vYmp0cmVlKGZtdCk7CisKKwkvKiBBbmQgcHJvY2VzcyB0aGUgZ2l2ZW4gdmFy YXJncyAqLworCXZhX3N0YXJ0KGFyZ3MsIG51bW9ianMpOworCWZvciAoaSA9IDA7IGkgPCBudW1v YmpzOyBpKyspCisJeworCQljaGFyCSAgICpuYW1lOworCQlPYmpUeXBlCQl0eXBlOworCQlPYmpF bGVtICAgICplbGVtOworCisJCW5hbWUgPSB2YV9hcmcoYXJncywgY2hhciAqKTsKKwkJdHlwZSA9 IHZhX2FyZyhhcmdzLCBPYmpUeXBlKTsKKwkJZWxlbSA9IG5ld19vYmplY3QodHlwZSwgTlVMTCk7 CisKKwkJLyoKKwkJICogRm9yIGFsbCBwYXJhbSB0eXBlcyBvdGhlciB0aGFuIE9ialR5cGVOdWxs LCB0aGVyZSBtdXN0IGJlIGEgdmFsdWUgaW4KKwkJICogdGhlIHZhcmFyZ3MuIEZldGNoIGl0IGFu ZCBhZGQgdGhlIGZ1bGx5IGZvcm1lZCBzdWJvYmplY3QgaW50byB0aGUKKwkJICogbWFpbiBvYmpl Y3QuCisJCSAqLworCQlzd2l0Y2ggKHR5cGUpCisJCXsKKwkJCWNhc2UgT2JqVHlwZU51bGw6CisJ CQkJLyogTnVsbCBwYXJhbXMgZG9uJ3QgaGF2ZSBhIHZhbHVlIChvYnZpb3VzbHkpICovCisJCQkJ YnJlYWs7CisJCQljYXNlIE9ialR5cGVCb29sOgorCQkJCWVsZW0tPnZhbHVlLmJvb2xlYW4gPSB2 YV9hcmcoYXJncywgaW50KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgT2JqVHlwZVN0cmluZzoKKwkJ CQllbGVtLT52YWx1ZS5zdHJpbmcgPSB2YV9hcmcoYXJncywgY2hhciAqKTsKKwkJCQlicmVhazsK KwkJCWNhc2UgT2JqVHlwZUFycmF5OgorCQkJCWVsZW0tPnZhbHVlLmFycmF5ID0gdmFfYXJnKGFy Z3MsIExpc3QgKik7CisJCQkJYnJlYWs7CisJCQljYXNlIE9ialR5cGVJbnRlZ2VyOgorCQkJCWVs ZW0tPnZhbHVlLmludGVnZXIgPSB2YV9hcmcoYXJncywgaW50KTsKKwkJCQlicmVhazsKKwkJCWNh c2UgT2JqVHlwZUZsb2F0OgorCQkJCWVsZW0tPnZhbHVlLmZsdCA9IHZhX2FyZyhhcmdzLCBkb3Vi bGUpOworCQkJCWJyZWFrOworCQkJY2FzZSBPYmpUeXBlT2JqZWN0OgorCQkJCWVsZW0tPnZhbHVl Lm9iamVjdCA9IHZhX2FyZyhhcmdzLCBPYmpUcmVlICopOworCQkJCWJyZWFrOworCQkJZGVmYXVs dDoKKwkJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBPYmpUcmVlIGVsZW1lbnQgdHlwZSAlZCIsIHR5 cGUpOworCQl9CisKKwkJZWxlbS0+bmFtZSA9IG5hbWU7CisJCWFwcGVuZF9wcmVtYWRlX29iamVj dCh0cmVlLCBlbGVtKTsKKwl9CisKKwl2YV9lbmQoYXJncyk7CisJcmV0dXJuIHRyZWU7Cit9CisK Ky8qCisgKiBQcm9jZXNzIHRoZSBwcmUtYnVpbHQgZm9ybWF0IHN0cmluZyBmcm9tIHRoZSBPYmpU cmVlIGludG8gdGhlIG91dHB1dCBwYXJzZQorICogc3RhdGUuCisgKi8KK3N0YXRpYyB2b2lkCitv Ymp0cmVlX2ZtdF90b19qc29uYl9lbGVtZW50KEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUsIE9ialRy ZWUgKnRyZWUpCit7CisJSnNvbmJWYWx1ZQlrZXk7CisJSnNvbmJWYWx1ZQl2YWw7CisKKwlpZiAo dHJlZS0+Zm10aW5mbyA9PSBOVUxMKQorCQlyZXR1cm47CisKKwkvKiBQdXNoIHRoZSBrZXkgZmly c3QgKi8KKwlrZXkudHlwZSA9IGpidlN0cmluZzsKKwlrZXkudmFsLnN0cmluZy52YWwgPSAiZm10 IjsKKwlrZXkudmFsLnN0cmluZy5sZW4gPSBzdHJsZW4oa2V5LnZhbC5zdHJpbmcudmFsKTsKKwlw dXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9LRVksICZrZXkpOworCisJLyogVGhlbiBwcm9jZXNz IHRoZSBwcmUtYnVpbHQgZm9ybWF0IHN0cmluZyAqLworCXZhbC50eXBlID0gamJ2U3RyaW5nOwor CXZhbC52YWwuc3RyaW5nLmxlbiA9IHRyZWUtPmZtdGluZm8tPmxlbjsKKwl2YWwudmFsLnN0cmlu Zy52YWwgPSB0cmVlLT5mbXRpbmZvLT5kYXRhOworCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pC X1ZBTFVFLCAmdmFsKTsKK30KKworLyoKKyAqIENyZWF0ZSBhIEpTT05CIHJlcHJlc2VudGF0aW9u IGZyb20gYW4gT2JqVHJlZS4KKyAqLworc3RhdGljIEpzb25iICoKK29ianRyZWVfdG9fanNvbmIo T2JqVHJlZSAqdHJlZSkKK3sKKwlKc29uYlZhbHVlICp2YWx1ZTsKKworCXZhbHVlID0gb2JqdHJl ZV90b19qc29uYl9yZWModHJlZSwgTlVMTCk7CisJcmV0dXJuIEpzb25iVmFsdWVUb0pzb25iKHZh bHVlKTsKK30KKworLyoKKyAqIEhlbHBlciBmb3Igb2JqdHJlZV90b19qc29uYjogcHJvY2VzcyBh biBpbmRpdmlkdWFsIGVsZW1lbnQgZnJvbSBhbiBvYmplY3Qgb3IKKyAqIGFuIGFycmF5IGludG8g dGhlIG91dHB1dCBwYXJzZSBzdGF0ZS4KKyAqLworc3RhdGljIHZvaWQKK29ianRyZWVfdG9fanNv bmJfZWxlbWVudChKc29uYlBhcnNlU3RhdGUgKnN0YXRlLCBPYmpFbGVtICpvYmplY3QsCisJCQkJ CQkgSnNvbmJJdGVyYXRvclRva2VuIGVsZW1fdG9rZW4pCit7CisJSnNvbmJWYWx1ZQl2YWw7CisK Kwlzd2l0Y2ggKG9iamVjdC0+b2JqdHlwZSkKKwl7CisJCWNhc2UgT2JqVHlwZU51bGw6CisJCQl2 YWwudHlwZSA9IGpidk51bGw7CisJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIGVsZW1fdG9rZW4s ICZ2YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPYmpUeXBlU3RyaW5nOgorCQkJdmFsLnR5cGUg PSBqYnZTdHJpbmc7CisJCQl2YWwudmFsLnN0cmluZy5sZW4gPSBzdHJsZW4ob2JqZWN0LT52YWx1 ZS5zdHJpbmcpOworCQkJdmFsLnZhbC5zdHJpbmcudmFsID0gb2JqZWN0LT52YWx1ZS5zdHJpbmc7 CisJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIGVsZW1fdG9rZW4sICZ2YWwpOworCQkJYnJlYWs7 CisKKwkJY2FzZSBPYmpUeXBlSW50ZWdlcjoKKwkJCXZhbC50eXBlID0gamJ2TnVtZXJpYzsKKwkJ CXZhbC52YWwubnVtZXJpYyA9IChOdW1lcmljKQorCQkJCURhdHVtR2V0TnVtZXJpYyhEaXJlY3RG dW5jdGlvbkNhbGwxKGludDhfbnVtZXJpYywKKwkJCQkJCQkJCQkJCQlvYmplY3QtPnZhbHVlLmlu dGVnZXIpKTsKKwkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgZWxlbV90b2tlbiwgJnZhbCk7CisJ CQlicmVhazsKKworCQljYXNlIE9ialR5cGVGbG9hdDoKKwkJCXZhbC50eXBlID0gamJ2TnVtZXJp YzsKKwkJCXZhbC52YWwubnVtZXJpYyA9IChOdW1lcmljKQorCQkJCURhdHVtR2V0TnVtZXJpYyhE aXJlY3RGdW5jdGlvbkNhbGwxKGZsb2F0OF9udW1lcmljLAorCQkJCQkJCQkJCQkJCW9iamVjdC0+ dmFsdWUuaW50ZWdlcikpOworCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBlbGVtX3Rva2VuLCAm dmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT2JqVHlwZUJvb2w6CisJCQl2YWwudHlwZSA9IGpi dkJvb2w7CisJCQl2YWwudmFsLmJvb2xlYW4gPSBvYmplY3QtPnZhbHVlLmJvb2xlYW47CisJCQlw dXNoSnNvbmJWYWx1ZSgmc3RhdGUsIGVsZW1fdG9rZW4sICZ2YWwpOworCQkJYnJlYWs7CisKKwkJ Y2FzZSBPYmpUeXBlT2JqZWN0OgorCQkJLyogUmVjdXJzaXZlbHkgYWRkIHRoZSBvYmplY3QgaW50 byB0aGUgZXhpc3RpbmcgcGFyc2Ugc3RhdGUgKi8KKwkJCW9ianRyZWVfdG9fanNvbmJfcmVjKG9i amVjdC0+dmFsdWUub2JqZWN0LCBzdGF0ZSk7CisJCQlicmVhazsKKworCQljYXNlIE9ialR5cGVB cnJheToKKwkJCXsKKwkJCQlMaXN0Q2VsbCAgICpjZWxsOworCisJCQkJcHVzaEpzb25iVmFsdWUo JnN0YXRlLCBXSkJfQkVHSU5fQVJSQVksIE5VTEwpOworCQkJCWZvcmVhY2goY2VsbCwgb2JqZWN0 LT52YWx1ZS5hcnJheSkKKwkJCQl7CisJCQkJCU9iakVsZW0gICAgKmVsZW0gPSBsZmlyc3QoY2Vs bCk7CisKKwkJCQkJb2JqdHJlZV90b19qc29uYl9lbGVtZW50KHN0YXRlLCBlbGVtLCBXSkJfRUxF TSk7CisJCQkJfQorCQkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0VORF9BUlJBWSwgTlVM TCk7CisJCQl9CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVucmVj b2duaXplZCBvYmplY3QgdHlwZSAlZCIsIG9iamVjdC0+b2JqdHlwZSk7CisJCQlicmVhazsKKwl9 Cit9CisKKy8qCisgKiBSZWN1cnNpdmUgaGVscGVyIGZvciBvYmp0cmVlX3RvX2pzb25iLgorICov CitzdGF0aWMgSnNvbmJWYWx1ZSAqCitvYmp0cmVlX3RvX2pzb25iX3JlYyhPYmpUcmVlICp0cmVl LCBKc29uYlBhcnNlU3RhdGUgKnN0YXRlKQoreworCXNsaXN0X2l0ZXIJaXRlcjsKKworCXB1c2hK c29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lOX09CSkVDVCwgTlVMTCk7CisKKwlvYmp0cmVlX2Zt dF90b19qc29uYl9lbGVtZW50KHN0YXRlLCB0cmVlKTsKKworCXNsaXN0X2ZvcmVhY2goaXRlciwg JnRyZWUtPnBhcmFtcykKKwl7CisJCU9iakVsZW0gICAgKm9iamVjdCA9IHNsaXN0X2NvbnRhaW5l cihPYmpFbGVtLCBub2RlLCBpdGVyLmN1cik7CisJCUpzb25iVmFsdWUJa2V5OworCisJCS8qIFB1 c2ggdGhlIGtleSBmaXJzdCAqLworCQlrZXkudHlwZSA9IGpidlN0cmluZzsKKwkJa2V5LnZhbC5z dHJpbmcubGVuID0gc3RybGVuKG9iamVjdC0+bmFtZSk7CisJCWtleS52YWwuc3RyaW5nLnZhbCA9 IG9iamVjdC0+bmFtZTsKKwkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfS0VZLCAma2V5KTsK KworCQkvKiBUaGVuIHByb2Nlc3MgdGhlIHZhbHVlIGFjY29yZGluZyB0byBpdHMgdHlwZSAqLwor CQlvYmp0cmVlX3RvX2pzb25iX2VsZW1lbnQoc3RhdGUsIG9iamVjdCwgV0pCX1ZBTFVFKTsKKwl9 CisKKwlyZXR1cm4gcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfRU5EX09CSkVDVCwgTlVMTCk7 Cit9CisKKy8qCisgKiBTdWJyb3V0aW5lIGZvciBDUkVBVEUgVEFCTEUvQ1JFQVRFIERPTUFJTiBk ZXBhcnNpbmcuCisgKgorICogR2l2ZW4gYSB0YWJsZSBPSUQgb3IgZG9tYWluIE9JRCwgb2J0YWlu IGl0cyBjb25zdHJhaW50cyBhbmQgYXBwZW5kIHRoZW0gdG8KKyAqIHRoZSBnaXZlbiBlbGVtZW50 cyBsaXN0LiAgVGhlIHVwZGF0ZWQgbGlzdCBpcyByZXR1cm5lZC4KKyAqCisgKiBUaGlzIHdvcmtz IGZvciB0eXBlZCB0YWJsZXMsIHJlZ3VsYXIgdGFibGVzLCBhbmQgZG9tYWlucy4KKyAqCisgKiBO b3RlIHRoYXQgQ09OU1RSQUlOVF9GT1JFSUdOIGNvbnN0cmFpbnRzIGFyZSBhbHdheXMgaWdub3Jl ZC4KKyAqLworc3RhdGljIExpc3QgKgorb2J0YWluQ29uc3RyYWludHMoTGlzdCAqZWxlbWVudHMs IE9pZCByZWxhdGlvbklkLCBPaWQgZG9tYWluSWQpCit7CisJUmVsYXRpb24JY29uUmVsOworCVNj YW5LZXlEYXRhIGtleTsKKwlTeXNTY2FuRGVzYyBzY2FuOworCUhlYXBUdXBsZQl0dXBsZTsKKwlP YmpUcmVlICAgICpjb25zdHI7CisKKwkvKiBPbmx5IG9uZSBtYXkgYmUgdmFsaWQgKi8KKwlBc3Nl cnQoT2lkSXNWYWxpZChyZWxhdGlvbklkKSBeIE9pZElzVmFsaWQoZG9tYWluSWQpKTsKKworCS8q CisJICogU2NhbiBwZ19jb25zdHJhaW50IHRvIGZldGNoIGFsbCBjb25zdHJhaW50cyBsaW5rZWQg dG8gdGhlIGdpdmVuCisJICogcmVsYXRpb24uCisJICovCisJY29uUmVsID0gdGFibGVfb3BlbihD b25zdHJhaW50UmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlpZiAoT2lkSXNWYWxpZChy ZWxhdGlvbklkKSkKKwl7CisJCVNjYW5LZXlJbml0KCZrZXksCisJCQkJCUFudW1fcGdfY29uc3Ry YWludF9jb25yZWxpZCwKKwkJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJ CQlPYmplY3RJZEdldERhdHVtKHJlbGF0aW9uSWQpKTsKKwkJc2NhbiA9IHN5c3RhYmxlX2JlZ2lu c2Nhbihjb25SZWwsIENvbnN0cmFpbnRSZWxpZFR5cGlkTmFtZUluZGV4SWQsCisJCQkJCQkJCSAg dHJ1ZSwgTlVMTCwgMSwgJmtleSk7CisJfQorCWVsc2UKKwl7CisJCVNjYW5LZXlJbml0KCZrZXks CisJCQkJCUFudW1fcGdfY29uc3RyYWludF9jb250eXBpZCwKKwkJCQkJQlRFcXVhbFN0cmF0ZWd5 TnVtYmVyLCBGX09JREVRLAorCQkJCQlPYmplY3RJZEdldERhdHVtKGRvbWFpbklkKSk7CisJCXNj YW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4oY29uUmVsLCBDb25zdHJhaW50VHlwaWRJbmRleElkLAor CQkJCQkJCQkgIHRydWUsIE5VTEwsIDEsICZrZXkpOworCX0KKworCS8qCisJICogRm9yIGVhY2gg Y29uc3RyYWludCwgYWRkIGEgbm9kZSB0byB0aGUgbGlzdCBvZiB0YWJsZSBlbGVtZW50cy4gIElu CisJICogdGhlc2Ugbm9kZXMgd2UgaW5jbHVkZSBub3Qgb25seSB0aGUgcHJpbnRhYmxlIGluZm9y bWF0aW9uICgiZm10IiksIGJ1dAorCSAqIGFsc28gc2VwYXJhdGUgYXR0cmlidXRlcyB0byBpbmRp Y2F0ZSB0aGUgdHlwZSBvZiBjb25zdHJhaW50LCBmb3IKKwkgKiBhdXRvbWF0aWMgcHJvY2Vzc2lu Zy4KKwkgKi8KKwl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSA9IHN5c3RhYmxlX2dldG5l eHQoc2NhbikpKQorCXsKKwkJRm9ybV9wZ19jb25zdHJhaW50IGNvbnN0ckZvcm07CisJCWNoYXIJ ICAgKmNvbnR5cGU7CisKKwkJY29uc3RyRm9ybSA9IChGb3JtX3BnX2NvbnN0cmFpbnQpIEdFVFNU UlVDVCh0dXBsZSk7CisKKwkJc3dpdGNoIChjb25zdHJGb3JtLT5jb250eXBlKQorCQl7CisJCQlj YXNlIENPTlNUUkFJTlRfQ0hFQ0s6CisJCQkJY29udHlwZSA9ICJjaGVjayI7CisJCQkJYnJlYWs7 CisJCQljYXNlIENPTlNUUkFJTlRfRk9SRUlHTjoKKwkJCQljb250aW51ZTsJCS8qIG5vdCBoZXJl ICovCisJCQljYXNlIENPTlNUUkFJTlRfUFJJTUFSWToKKwkJCQljb250eXBlID0gInByaW1hcnkg a2V5IjsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ09OU1RSQUlOVF9VTklRVUU6CisJCQkJY29udHlw ZSA9ICJ1bmlxdWUiOworCQkJCWJyZWFrOworCQkJY2FzZSBDT05TVFJBSU5UX1RSSUdHRVI6CisJ CQkJY29udHlwZSA9ICJ0cmlnZ2VyIjsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ09OU1RSQUlOVF9F WENMVVNJT046CisJCQkJY29udHlwZSA9ICJleGNsdXNpb24iOworCQkJCWJyZWFrOworCQkJZGVm YXVsdDoKKwkJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIGNvbnN0cmFpbnQgdHlwZSIpOwor CQl9CisKKwkJLyoKKwkJICogInR5cGUiIGFuZCAiY29udHlwZSIgYXJlIG5vdCBwYXJ0IG9mIHRo ZSBwcmludGFibGUgb3V0cHV0LCBidXQgYXJlCisJCSAqIHVzZWZ1bCB0byBwcm9ncmFtbWF0aWNh bGx5IGRpc3Rpbmd1aXNoIHRoZXNlIGZyb20gY29sdW1ucyBhbmQgYW1vbmcKKwkJICogZGlmZmVy ZW50IGNvbnN0cmFpbnQgdHlwZXMuCisJCSAqCisJCSAqIFhYWCBpdCBtaWdodCBiZSB1c2VmdWwg dG8gYWxzbyBsaXN0IHRoZSBjb2x1bW4gbmFtZXMgaW4gYSBQSywgZXRjLgorCQkgKi8KKwkJY29u c3RyID0gbmV3X29ianRyZWVfVkEoIkNPTlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZpbml0aW9ufXMi LCA0LAorCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJjb25zdHJhaW50IiwKKwkJCQkJ CQkJImNvbnR5cGUiLCBPYmpUeXBlU3RyaW5nLCBjb250eXBlLAorCQkJCQkJCQkibmFtZSIsIE9i alR5cGVTdHJpbmcsIE5hbWVTdHIoY29uc3RyRm9ybS0+Y29ubmFtZSksCisJCQkJCQkJCSJkZWZp bml0aW9uIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29t bWFuZF9zaW1wbGUoY29uc3RyRm9ybS0+b2lkKSk7CisJCWVsZW1lbnRzID0gbGFwcGVuZChlbGVt ZW50cywgbmV3X29iamVjdF9vYmplY3QoY29uc3RyKSk7CisJfQorCisJc3lzdGFibGVfZW5kc2Nh bihzY2FuKTsKKwl0YWJsZV9jbG9zZShjb25SZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1 cm4gZWxlbWVudHM7Cit9CisKKy8qCisgKiBSZXR1cm4gYW4gaW5kZXggZGVmaW5pdGlvbiwgc3Bs aXQgaW50byBzZXZlcmFsIHBpZWNlcy4KKyAqCisgKiBBIGxhcmdlIGFtb3VudCBvZiBjb2RlIGlz IGR1cGxpY2F0ZWQgZnJvbSAgcGdfZ2V0X2luZGV4ZGVmX3dvcmtlciwgYnV0CisgKiBjb250cm9s IGZsb3cgaXMgZGlmZmVyZW50IGVub3VnaCB0aGF0IGl0IGRvZXNuJ3Qgc2VlbSB3b3J0aCBrZWVw aW5nIHRoZW0KKyAqIHRvZ2V0aGVyLgorICovCitzdGF0aWMgdm9pZAorcGdfZ2V0X2luZGV4ZGVm X2RldGFpbGVkKE9pZCBpbmRleHJlbGlkLAorCQkJCQkJIGNoYXIgKippbmRleF9hbSwKKwkJCQkJ CSBjaGFyICoqZGVmaW5pdGlvbiwKKwkJCQkJCSBjaGFyICoqcmVsb3B0aW9ucywKKwkJCQkJCSBj aGFyICoqdGFibGVzcGFjZSwKKwkJCQkJCSBjaGFyICoqd2hlcmVDbGF1c2UpCit7CisJSGVhcFR1 cGxlCWh0X2lkeDsKKwlIZWFwVHVwbGUJaHRfaWR4cmVsOworCUhlYXBUdXBsZQlodF9hbTsKKwlG b3JtX3BnX2luZGV4IGlkeHJlYzsKKwlGb3JtX3BnX2NsYXNzIGlkeHJlbHJlYzsKKwlGb3JtX3Bn X2FtCWFtcmVjOworCUluZGV4QW1Sb3V0aW5lICphbXJvdXRpbmU7CisJTGlzdAkgICAqaW5kZXhw cnM7CisJTGlzdENlbGwgICAqaW5kZXhwcl9pdGVtOworCUxpc3QJICAgKmNvbnRleHQ7CisJT2lk CQkJaW5kcmVsaWQ7CisJaW50CQkJa2V5bm87CisJRGF0dW0JCWluZGNvbGxEYXR1bTsKKwlEYXR1 bQkJaW5kY2xhc3NEYXR1bTsKKwlEYXR1bQkJaW5kb3B0aW9uRGF0dW07CisJYm9vbAkJaXNudWxs OworCW9pZHZlY3RvciAgKmluZGNvbGxhdGlvbjsKKwlvaWR2ZWN0b3IgICppbmRjbGFzczsKKwlp bnQydmVjdG9yICppbmRvcHRpb247CisJU3RyaW5nSW5mb0RhdGEgZGVmaW5pdGlvbkJ1ZjsKKwor CSp0YWJsZXNwYWNlID0gTlVMTDsKKwkqd2hlcmVDbGF1c2UgPSBOVUxMOworCisJLyogRmV0Y2gg dGhlIHBnX2luZGV4IHR1cGxlIGJ5IHRoZSBPaWQgb2YgdGhlIGluZGV4ICovCisJaHRfaWR4ID0g U2VhcmNoU3lzQ2FjaGUxKElOREVYUkVMSUQsIE9iamVjdElkR2V0RGF0dW0oaW5kZXhyZWxpZCkp OworCWlmICghSGVhcFR1cGxlSXNWYWxpZChodF9pZHgpKQorCQllbG9nKEVSUk9SLCAiY2FjaGUg bG9va3VwIGZhaWxlZCBmb3IgaW5kZXggd2l0aCBPSUQgJXUiLCBpbmRleHJlbGlkKTsKKwlpZHhy ZWMgPSAoRm9ybV9wZ19pbmRleCkgR0VUU1RSVUNUKGh0X2lkeCk7CisKKwlpbmRyZWxpZCA9IGlk eHJlYy0+aW5kcmVsaWQ7CisJQXNzZXJ0KGluZGV4cmVsaWQgPT0gaWR4cmVjLT5pbmRleHJlbGlk KTsKKworCS8qIE11c3QgZ2V0IGluZGNvbGxhdGlvbiwgaW5kY2xhc3MsIGFuZCBpbmRvcHRpb24g dGhlIGhhcmQgd2F5ICovCisJaW5kY29sbERhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKElOREVYUkVM SUQsIGh0X2lkeCwKKwkJCQkJCQkJICAgQW51bV9wZ19pbmRleF9pbmRjb2xsYXRpb24sICZpc251 bGwpOworCUFzc2VydCghaXNudWxsKTsKKwlpbmRjb2xsYXRpb24gPSAob2lkdmVjdG9yICopIERh dHVtR2V0UG9pbnRlcihpbmRjb2xsRGF0dW0pOworCisJaW5kY2xhc3NEYXR1bSA9IFN5c0NhY2hl R2V0QXR0cihJTkRFWFJFTElELCBodF9pZHgsCisJCQkJCQkJCQlBbnVtX3BnX2luZGV4X2luZGNs YXNzLCAmaXNudWxsKTsKKwlBc3NlcnQoIWlzbnVsbCk7CisJaW5kY2xhc3MgPSAob2lkdmVjdG9y ICopIERhdHVtR2V0UG9pbnRlcihpbmRjbGFzc0RhdHVtKTsKKworCWluZG9wdGlvbkRhdHVtID0g U3lzQ2FjaGVHZXRBdHRyKElOREVYUkVMSUQsIGh0X2lkeCwKKwkJCQkJCQkJCSBBbnVtX3BnX2lu ZGV4X2luZG9wdGlvbiwgJmlzbnVsbCk7CisJQXNzZXJ0KCFpc251bGwpOworCWluZG9wdGlvbiA9 IChpbnQydmVjdG9yICopIERhdHVtR2V0UG9pbnRlcihpbmRvcHRpb25EYXR1bSk7CisKKwkvKiBG ZXRjaCB0aGUgcGdfY2xhc3MgdHVwbGUgb2YgdGhlIGluZGV4IHJlbGF0aW9uICovCisJaHRfaWR4 cmVsID0gU2VhcmNoU3lzQ2FjaGUxKFJFTE9JRCwgT2JqZWN0SWRHZXREYXR1bShpbmRleHJlbGlk KSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGh0X2lkeHJlbCkpCisJCWVsb2coRVJST1IsICJj YWNoZSBsb29rdXAgZmFpbGVkIGZvciByZWxhdGlvbiB3aXRoIE9JRCAldSIsIGluZGV4cmVsaWQp OworCWlkeHJlbHJlYyA9IChGb3JtX3BnX2NsYXNzKSBHRVRTVFJVQ1QoaHRfaWR4cmVsKTsKKwor CS8qIEZldGNoIHRoZSBwZ19hbSB0dXBsZSBvZiB0aGUgaW5kZXgnIGFjY2VzcyBtZXRob2QgKi8K KwlodF9hbSA9IFNlYXJjaFN5c0NhY2hlMShBTU9JRCwgT2JqZWN0SWRHZXREYXR1bShpZHhyZWxy ZWMtPnJlbGFtKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGh0X2FtKSkKKwkJZWxvZyhFUlJP UiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGFjY2VzcyBtZXRob2Qgd2l0aCBPSUQgJXUiLAor CQkJIGlkeHJlbHJlYy0+cmVsYW0pOworCWFtcmVjID0gKEZvcm1fcGdfYW0pIEdFVFNUUlVDVCho dF9hbSk7CisKKwkvKgorCSAqIEdldCB0aGUgaW5kZXggZXhwcmVzc2lvbnMsIGlmIGFueS4gIChO T1RFOiB3ZSBkbyBub3QgdXNlIHRoZSByZWxjYWNoZQorCSAqIHZlcnNpb25zIG9mIHRoZSBleHBy ZXNzaW9ucyBhbmQgcHJlZGljYXRlLCBiZWNhdXNlIHdlIHdhbnQgdG8gZGlzcGxheQorCSAqIG5v bi1jb25zdC1mb2xkZWQgZXhwcmVzc2lvbnMuKQorCSAqLworCWlmICghaGVhcF9hdHRpc251bGwo aHRfaWR4LCBBbnVtX3BnX2luZGV4X2luZGV4cHJzLCBOVUxMKSkKKwl7CisJCURhdHVtCQlleHBy c0RhdHVtOworCQljaGFyCSAgICpleHByc1N0cmluZzsKKworCQlleHByc0RhdHVtID0gU3lzQ2Fj aGVHZXRBdHRyKElOREVYUkVMSUQsIGh0X2lkeCwKKwkJCQkJCQkJCSBBbnVtX3BnX2luZGV4X2lu ZGV4cHJzLCAmaXNudWxsKTsKKwkJQXNzZXJ0KCFpc251bGwpOworCQlleHByc1N0cmluZyA9IFRl eHREYXR1bUdldENTdHJpbmcoZXhwcnNEYXR1bSk7CisJCWluZGV4cHJzID0gKExpc3QgKikgc3Ry aW5nVG9Ob2RlKGV4cHJzU3RyaW5nKTsKKwkJcGZyZWUoZXhwcnNTdHJpbmcpOworCX0KKwllbHNl CisJCWluZGV4cHJzID0gTklMOworCisJaW5kZXhwcl9pdGVtID0gbGlzdF9oZWFkKGluZGV4cHJz KTsKKworCWNvbnRleHQgPSBkZXBhcnNlX2NvbnRleHRfZm9yKGdldF9yZWxfbmFtZShpbmRyZWxp ZCksIGluZHJlbGlkKTsKKworCWluaXRTdHJpbmdJbmZvKCZkZWZpbml0aW9uQnVmKTsKKworCS8q IE91dHB1dCBpbmRleCBBTSAqLworCSppbmRleF9hbSA9IHBzdHJkdXAocXVvdGVfaWRlbnRpZmll cihOYW1lU3RyKGFtcmVjLT5hbW5hbWUpKSk7CisKKwkvKiBGZXRjaCB0aGUgaW5kZXggQU0ncyBB UEkgc3RydWN0ICovCisJYW1yb3V0aW5lID0gR2V0SW5kZXhBbVJvdXRpbmUoYW1yZWMtPmFtaGFu ZGxlcik7CisKKwkvKgorCSAqIE91dHB1dCBpbmRleCBkZWZpbml0aW9uLiAgTm90ZSB0aGUgb3V0 ZXIgcGFyZW5zIG11c3QgYmUgc3VwcGxpZWQgYnkKKwkgKiBjYWxsZXIuCisJICovCisJYXBwZW5k U3RyaW5nSW5mb1N0cmluZygmZGVmaW5pdGlvbkJ1ZiwgIigiKTsKKwlmb3IgKGtleW5vID0gMDsg a2V5bm8gPCBpZHhyZWMtPmluZG5hdHRzOyBrZXlubysrKQorCXsKKwkJQXR0ck51bWJlcglhdHRu dW0gPSBpZHhyZWMtPmluZGtleS52YWx1ZXNba2V5bm9dOworCQlpbnQxNgkJb3B0ID0gaW5kb3B0 aW9uLT52YWx1ZXNba2V5bm9dOworCQlPaWQJCQlrZXljb2x0eXBlOworCQlPaWQJCQlrZXljb2xj b2xsYXRpb247CisKKwkJLyogUHJpbnQgSU5DTFVERSB0byBkaXZpZGUga2V5IGFuZCBub24ta2V5 IGF0dHJzLiAqLworCQlpZiAoa2V5bm8gPT0gaWR4cmVjLT5pbmRua2V5YXR0cykKKwkJeworCQkJ YXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZGVmaW5pdGlvbkJ1ZiwgIikgSU5DTFVERSAoIik7CisJ CX0KKwkJZWxzZQorCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZGVmaW5pdGlvbkJ1Ziwga2V5 bm8gPT0gMCA/ICIiIDogIiwgIik7CisKKwkJaWYgKGF0dG51bSAhPSAwKQorCQl7CisJCQkvKiBT aW1wbGUgaW5kZXggY29sdW1uICovCisJCQljaGFyCSAgICphdHRuYW1lOworCQkJaW50MzIJCWtl eWNvbHR5cG1vZDsKKworCQkJYXR0bmFtZSA9IGdldF9hdHRuYW1lKGluZHJlbGlkLCBhdHRudW0s IGZhbHNlKTsKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmRlZmluaXRpb25CdWYsIHF1b3Rl X2lkZW50aWZpZXIoYXR0bmFtZSkpOworCQkJZ2V0X2F0dHR5cGV0eXBtb2Rjb2xsKGluZHJlbGlk LCBhdHRudW0sCisJCQkJCQkJCSAgJmtleWNvbHR5cGUsICZrZXljb2x0eXBtb2QsCisJCQkJCQkJ CSAgJmtleWNvbGNvbGxhdGlvbik7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiBFeHByZXNzaW9u YWwgaW5kZXggKi8KKwkJCU5vZGUJICAgKmluZGV4a2V5OworCQkJY2hhcgkgICAqc3RyOworCisJ CQlpZiAoaW5kZXhwcl9pdGVtID09IE5VTEwpCisJCQkJZWxvZyhFUlJPUiwgInRvbyBmZXcgZW50 cmllcyBpbiBpbmRleHBycyBsaXN0Iik7CisJCQlpbmRleGtleSA9IChOb2RlICopIGxmaXJzdChp bmRleHByX2l0ZW0pOworCQkJaW5kZXhwcl9pdGVtID0gbG5leHQoaW5kZXhwcnMsIGluZGV4cHJf aXRlbSk7CisKKwkJCS8qIERlcGFyc2UgKi8KKwkJCXN0ciA9IGRlcGFyc2VfZXhwcmVzc2lvbihp bmRleGtleSwgY29udGV4dCwgZmFsc2UsIGZhbHNlKTsKKworCQkJLyogTmVlZCBwYXJlbnMgaWYg aXQncyBub3QgYSBiYXJlIGZ1bmN0aW9uIGNhbGwgKi8KKwkJCWlmIChpbmRleGtleSAmJiBJc0Eo aW5kZXhrZXksIEZ1bmNFeHByKSAmJgorCQkJCSgoRnVuY0V4cHIgKikgaW5kZXhrZXkpLT5mdW5j Zm9ybWF0ID09IENPRVJDRV9FWFBMSUNJVF9DQUxMKQorCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJp bmcoJmRlZmluaXRpb25CdWYsIHN0cik7CisJCQllbHNlCisJCQkJYXBwZW5kU3RyaW5nSW5mbygm ZGVmaW5pdGlvbkJ1ZiwgIiglcykiLCBzdHIpOworCisJCQlrZXljb2x0eXBlID0gZXhwclR5cGUo aW5kZXhrZXkpOworCQkJa2V5Y29sY29sbGF0aW9uID0gZXhwckNvbGxhdGlvbihpbmRleGtleSk7 CisJCX0KKworCQkvKiBQcmludCBhZGRpdGlvbmFsIGRlY29yYXRpb24gZm9yIChzZWxlY3RlZCkg a2V5IGNvbHVtbnMsIGV2ZW4gaWYgZGVmYXVsdCAqLworCQlpZiAoa2V5bm8gPCBpZHhyZWMtPmlu ZG5rZXlhdHRzKQorCQl7CisJCQlPaWQgaW5kY29sbCA9IGluZGNvbGxhdGlvbi0+dmFsdWVzW2tl eW5vXTsKKwkJCWlmIChPaWRJc1ZhbGlkKGluZGNvbGwpKQorCQkJCWFwcGVuZFN0cmluZ0luZm8o JmRlZmluaXRpb25CdWYsICIgQ09MTEFURSAlcyIsCisJCQkJCQkJCWdlbmVyYXRlX2NvbGxhdGlv bl9uYW1lKChpbmRjb2xsKSkpOworCisJCQkvKiBBZGQgdGhlIG9wZXJhdG9yIGNsYXNzIG5hbWUs IGV2ZW4gaWYgZGVmYXVsdCAqLworCQkJZ2V0X29wY2xhc3NfbmFtZShpbmRjbGFzcy0+dmFsdWVz W2tleW5vXSwgSW52YWxpZE9pZCwgJmRlZmluaXRpb25CdWYpOworCisJCQkvKiBBZGQgb3B0aW9u cyBpZiByZWxldmFudCAqLworCQkJaWYgKGFtcm91dGluZS0+YW1jYW5vcmRlcikKKwkJCXsKKwkJ CQkvKiBJZiBpdCBzdXBwb3J0cyBzb3J0IG9yZGVyaW5nLCByZXBvcnQgREVTQyBhbmQgTlVMTFMg b3B0cyAqLworCQkJCWlmIChvcHQgJiBJTkRPUFRJT05fREVTQykKKwkJCQl7CisJCQkJCWFwcGVu ZFN0cmluZ0luZm9TdHJpbmcoJmRlZmluaXRpb25CdWYsICIgREVTQyIpOworCQkJCQkvKiBOVUxM UyBGSVJTVCBpcyB0aGUgZGVmYXVsdCBpbiB0aGlzIGNhc2UgKi8KKwkJCQkJaWYgKCEob3B0ICYg SU5ET1BUSU9OX05VTExTX0ZJUlNUKSkKKwkJCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmRl ZmluaXRpb25CdWYsICIgTlVMTFMgTEFTVCIpOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJ CQlpZiAob3B0ICYgSU5ET1BUSU9OX05VTExTX0ZJUlNUKQorCQkJCQkJYXBwZW5kU3RyaW5nSW5m b1N0cmluZygmZGVmaW5pdGlvbkJ1ZiwgIiBOVUxMUyBGSVJTVCIpOworCQkJCX0KKwkJCX0KKwor CQkJLyogWFhYIGV4Y2x1ZGVPcHMgdGhpbmd5IHdhcyBoZXJlOyBkbyB3ZSBuZWVkIGFueXRoaW5n PyAqLworCQl9CisJfQorCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmRlZmluaXRpb25CdWYsICIp Iik7CisJKmRlZmluaXRpb24gPSBkZWZpbml0aW9uQnVmLmRhdGE7CisKKwkvKiBPdXRwdXQgcmVs b3B0aW9ucyAqLworCSpyZWxvcHRpb25zID0gZmxhdHRlbl9yZWxvcHRpb25zKGluZGV4cmVsaWQp OworCisJLyogT3V0cHV0IHRhYmxlc3BhY2UgKi8KKwl7CisJCU9pZAkJCXRibHNwYzsKKworCQl0 YmxzcGMgPSBnZXRfcmVsX3RhYmxlc3BhY2UoaW5kZXhyZWxpZCk7CisJCWlmIChPaWRJc1ZhbGlk KHRibHNwYykpCisJCQkqdGFibGVzcGFjZSA9IHBzdHJkdXAocXVvdGVfaWRlbnRpZmllcihnZXRf dGFibGVzcGFjZV9uYW1lKHRibHNwYykpKTsKKwl9CisKKwkvKiBSZXBvcnQgaW5kZXggcHJlZGlj YXRlLCBpZiBhbnkgKi8KKwlpZiAoIWhlYXBfYXR0aXNudWxsKGh0X2lkeCwgQW51bV9wZ19pbmRl eF9pbmRwcmVkLCBOVUxMKSkKKwl7CisJCU5vZGUJICAgKm5vZGU7CisJCURhdHVtCQlwcmVkRGF0 dW07CisJCWNoYXIJICAgKnByZWRTdHJpbmc7CisKKwkJLyogQ29udmVydCB0ZXh0IHN0cmluZyB0 byBub2RlIHRyZWUgKi8KKwkJcHJlZERhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKElOREVYUkVMSUQs IGh0X2lkeCwKKwkJCQkJCQkJCUFudW1fcGdfaW5kZXhfaW5kcHJlZCwgJmlzbnVsbCk7CisJCUFz c2VydCghaXNudWxsKTsKKwkJcHJlZFN0cmluZyA9IFRleHREYXR1bUdldENTdHJpbmcocHJlZERh dHVtKTsKKwkJbm9kZSA9IChOb2RlICopIHN0cmluZ1RvTm9kZShwcmVkU3RyaW5nKTsKKwkJcGZy ZWUocHJlZFN0cmluZyk7CisKKwkJLyogRGVwYXJzZSAqLworCQkqd2hlcmVDbGF1c2UgPSBkZXBh cnNlX2V4cHJlc3Npb24obm9kZSwgY29udGV4dCwgZmFsc2UsIGZhbHNlKTsKKwl9CisKKwkvKiBD bGVhbiB1cCAqLworCVJlbGVhc2VTeXNDYWNoZShodF9pZHgpOworCVJlbGVhc2VTeXNDYWNoZSho dF9pZHhyZWwpOworCVJlbGVhc2VTeXNDYWNoZShodF9hbSk7Cit9CisKKy8qCisgKiBPYnRhaW4g dGhlIGRlcGFyc2VkIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBnaXZlbiBjb2x1bW4gb2YgdGhlIGdp dmVuIHRhYmxlLgorICoKKyAqIENhbGxlciBtdXN0IGhhdmUgc2V0IGEgY29ycmVjdCBkZXBhcnNl IGNvbnRleHQuCisgKi8KK3N0YXRpYyBjaGFyICoKK1JlbGF0aW9uR2V0Q29sdW1uRGVmYXVsdChS ZWxhdGlvbiByZWwsIEF0dHJOdW1iZXIgYXR0bm8sIExpc3QgKmRwY29udGV4dCwKKwkJCQkJCSBM aXN0ICoqZXhwcnMpCit7CisJTm9kZQkgICAqZGVmdmFsOworCWNoYXIJICAgKmRlZnN0cjsKKwor CWRlZnZhbCA9IGJ1aWxkX2NvbHVtbl9kZWZhdWx0KHJlbCwgYXR0bm8pOworCWRlZnN0ciA9IGRl cGFyc2VfZXhwcmVzc2lvbihkZWZ2YWwsIGRwY29udGV4dCwgZmFsc2UsIGZhbHNlKTsKKworCS8q IENvbGxlY3QgdGhlIGV4cHJlc3Npb24gZm9yIGxhdGVyIHJlcGxpY2F0aW9uIHNhZmV0eSBjaGVj a3MgKi8KKwlpZiAoZXhwcnMpCisJCSpleHBycyA9IGxhcHBlbmQoKmV4cHJzLCBkZWZ2YWwpOwor CisJcmV0dXJuIGRlZnN0cjsKK30KKworLyoKKyAqIE9idGFpbiB0aGUgZGVwYXJzZWQgcGFydGl0 aW9uIGJvdW5kIGV4cHJlc3Npb24gZm9yIHRoZSBnaXZlbiB0YWJsZS4KKyAqLworc3RhdGljIGNo YXIgKgorUmVsYXRpb25HZXRQYXJ0aXRpb25Cb3VuZChPaWQgcmVsaWQpCit7CisJRGF0dW0JCWRl cGFyc2VkOworCURhdHVtCQlib3VuZERhdHVtOworCWJvb2wJCWlzbnVsbDsKKwlIZWFwVHVwbGUJ dHVwbGU7CisKKwl0dXBsZSA9IFNlYXJjaFN5c0NhY2hlMShSRUxPSUQsIHJlbGlkKTsKKwlpZiAo IUhlYXBUdXBsZUlzVmFsaWQodHVwbGUpKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZh aWxlZCBmb3IgcmVsYXRpb24gd2l0aCBPSUQgJXUiLCByZWxpZCk7CisKKwlib3VuZERhdHVtID0g U3lzQ2FjaGVHZXRBdHRyKFJFTE9JRCwgdHVwbGUsCisJCQkJCQkJCSBBbnVtX3BnX2NsYXNzX3Jl bHBhcnRib3VuZCwKKwkJCQkJCQkJICZpc251bGwpOworCisJZGVwYXJzZWQgPSBEaXJlY3RGdW5j dGlvbkNhbGwyKHBnX2dldF9leHByLAorCQkJCQkJCQkgICBDU3RyaW5nR2V0VGV4dERhdHVtKFRl eHREYXR1bUdldENTdHJpbmcoYm91bmREYXR1bSkpLAorCQkJCQkJCQkgICByZWxpZCk7CisKKwlS ZWxlYXNlU3lzQ2FjaGUodHVwbGUpOworCisJcmV0dXJuIFRleHREYXR1bUdldENTdHJpbmcoZGVw YXJzZWQpOworfQorCisvKgorICogRGVwYXJzZSBhIENvbHVtbkRlZiBub2RlIHdpdGhpbiBhIHJl Z3VsYXIgKG5vbi10eXBlZCkgdGFibGUgY3JlYXRpb24uCisgKgorICogTk9UIE5VTEwgY29uc3Ry YWludHMgaW4gdGhlIGNvbHVtbiBkZWZpbml0aW9uIGFyZSBlbWl0dGVkIGRpcmVjdGx5IGluIHRo ZQorICogY29sdW1uIGRlZmluaXRpb24gYnkgdGhpcyByb3V0aW5lOyBvdGhlciBjb25zdHJhaW50 cyBtdXN0IGJlIGVtaXR0ZWQKKyAqIGVsc2V3aGVyZSAodGhlIGluZm8gaW4gdGhlIHBhcnNlIG5v ZGUgaXMgaW5jb21wbGV0ZSBhbnl3YXkpLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiAle25h bWV9SSAle2NvbHR5cGV9VCAle2NvbXByZXNzaW9ufXMgJXtkZWZhdWx0fXMgJXtub3RfbnVsbH1z ICV7Y29sbGF0aW9ufXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9Db2x1bW5EZWYo UmVsYXRpb24gcmVsYXRpb24sIExpc3QgKmRwY29udGV4dCwgYm9vbCBjb21wb3NpdGUsCisJCQkJ ICBDb2x1bW5EZWYgKmNvbGRlZiwgYm9vbCBpc19hbHRlciwgTGlzdCAqKmV4cHJzKQoreworCU9i alRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICp0bXBfb2JqOworCU9pZAkJCXJlbGlkID0gUmVs YXRpb25HZXRSZWxpZChyZWxhdGlvbik7CisJSGVhcFR1cGxlCWF0dHJUdXA7CisJRm9ybV9wZ19h dHRyaWJ1dGUgYXR0ckZvcm07CisJT2lkCQkJdHlwaWQ7CisJaW50MzIJCXR5cG1vZDsKKwlPaWQJ CQl0eXBjb2xsYXRpb247CisJYm9vbAkJc2F3X25vdG51bGw7CisJTGlzdENlbGwgICAqY2VsbDsK KworCS8qCisJICogSW5oZXJpdGVkIGNvbHVtbnMgd2l0aG91dCBsb2NhbCBkZWZpbml0aW9ucyBt dXN0IG5vdCBiZSBlbWl0dGVkLgorCSAqCisJICogWFhYIG1heWJlIGl0IGlzIHVzZWZ1bCB0byBo YXZlIHRoZW0gd2l0aCAicHJlc2VudCA9IGZhbHNlIiBvciBzb21lCisJICogc3VjaD8KKwkgKi8K KwlpZiAoIWNvbGRlZi0+aXNfbG9jYWwpCisJCXJldHVybiBOVUxMOworCisJYXR0clR1cCA9IFNl YXJjaFN5c0NhY2hlQXR0TmFtZShyZWxpZCwgY29sZGVmLT5jb2xuYW1lKTsKKwlpZiAoIUhlYXBU dXBsZUlzVmFsaWQoYXR0clR1cCkpCisJCWVsb2coRVJST1IsICJjb3VsZCBub3QgZmluZCBjYWNo ZSBlbnRyeSBmb3IgY29sdW1uIFwiJXNcIiBvZiByZWxhdGlvbiAldSIsCisJCQkgY29sZGVmLT5j b2xuYW1lLCByZWxpZCk7CisJYXR0ckZvcm0gPSAoRm9ybV9wZ19hdHRyaWJ1dGUpIEdFVFNUUlVD VChhdHRyVHVwKTsKKworCWdldF9hdHR0eXBldHlwbW9kY29sbChyZWxpZCwgYXR0ckZvcm0tPmF0 dG51bSwKKwkJCQkJCSAgJnR5cGlkLCAmdHlwbW9kLCAmdHlwY29sbGF0aW9uKTsKKworCXJldCA9 IG5ld19vYmp0cmVlX1ZBKCIle25hbWV9SSAle2NvbHR5cGV9VCIsIDMsCisJCQkJCQkgInR5cGUi LCBPYmpUeXBlU3RyaW5nLCAiY29sdW1uIiwKKwkJCQkJCSAibmFtZSIsIE9ialR5cGVTdHJpbmcs IGNvbGRlZi0+Y29sbmFtZSwKKwkJCQkJCSAiY29sdHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJ CQkgbmV3X29ianRyZWVfZm9yX3R5cGUodHlwaWQsIHR5cG1vZCkpOworCisJaWYgKCFjb21wb3Np dGUpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIlNUT1JBR0UgJXtjb2xzdG9yYWdlfXMi LCAiY29sc3RvcmFnZSIsCisJCQkJCQkJIGdldF90eXBlX3N0b3JhZ2UoYXR0ckZvcm0tPmF0dHN0 b3JhZ2UpKTsKKworCS8qIFVTSU5HIGNsYXVzZSAqLworCXRtcF9vYmogPSBuZXdfb2JqdHJlZSgi Q09NUFJFU1NJT04iKTsKKwlpZiAoY29sZGVmLT5jb21wcmVzc2lvbikKKwkJYXBwZW5kX3N0cmlu Z19vYmplY3QodG1wX29iaiwgIiV7Y29tcHJlc3Npb25fbWV0aG9kfUkiLAorCQkJCQkJCSAiY29t cHJlc3Npb25fbWV0aG9kIiwgY29sZGVmLT5jb21wcmVzc2lvbik7CisJZWxzZQorCXsKKwkJYXBw ZW5kX251bGxfb2JqZWN0KHRtcF9vYmosICIle2NvbXByZXNzaW9uX21ldGhvZH1JIik7CisJCWFw cGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKwl9CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0 LCAiJXtjb21wcmVzc2lvbn1zIiwgdG1wX29iaik7CisKKwl0bXBfb2JqID0gbmV3X29ianRyZWUo IkNPTExBVEUiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBjb2xsYXRpb24pKQorCQlhcHBlbmRfb2Jq ZWN0X29iamVjdCh0bXBfb2JqLCAiJXtuYW1lfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWVfaWQoQ29sbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cGNvbGxh dGlvbikpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOworCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHJldCwgIiV7Y29sbGF0aW9ufXMiLCB0bXBfb2JqKTsKKworCWlmICghY29t cG9zaXRlKQorCXsKKwkJT2lkCQkJc2VxcmVsaWQgPSBJbnZhbGlkT2lkOworCisJCS8qCisJCSAq IEVtaXQgYSBOT1QgTlVMTCBkZWNsYXJhdGlvbiBpZiBuZWNlc3NhcnkuICBOb3RlIHRoYXQgd2Ug Y2Fubm90CisJCSAqIHRydXN0IHBnX2F0dHJpYnV0ZS5hdHRub3RudWxsIGhlcmUsIGJlY2F1c2Ug dGhhdCBiaXQgaXMgYWxzbyBzZXQKKwkJICogd2hlbiBwcmltYXJ5IGtleXMgYXJlIHNwZWNpZmll ZDsgd2UgbXVzdCBub3QgZW1pdCBhIE5PVCBOVUxMCisJCSAqIGNvbnN0cmFpbnQgaW4gdGhhdCBj YXNlLCB1bmxlc3MgZXhwbGljaXRseSBzcGVjaWZpZWQuICBUaGVyZWZvcmUsCisJCSAqIHdlIHNj YW4gdGhlIGxpc3Qgb2YgY29uc3RyYWludHMgYXR0YWNoZWQgdG8gdGhpcyBjb2x1bW4gdG8KKwkJ ICogZGV0ZXJtaW5lIHdoZXRoZXIgd2UgbmVlZCB0byBlbWl0IGFueXRoaW5nLiAoRm9ydHVuYXRl bHksIE5PVCBOVUxMCisJCSAqIGNvbnN0cmFpbnRzIGNhbm5vdCBiZSB0YWJsZSBjb25zdHJhaW50 cy4pCisJCSAqCisJCSAqIEluIHRoZSBBTFRFUiBUQUJMRSBjYXNlcywgd2UgYWxzbyBhZGQgYSBO T1QgTlVMTCBpZiB0aGUgY29sRGVmIGlzCisJCSAqIG1hcmtlZCBpc19ub3RfbnVsbC4KKwkJICov CisJCXNhd19ub3RudWxsID0gZmFsc2U7CisJCWZvcmVhY2goY2VsbCwgY29sZGVmLT5jb25zdHJh aW50cykKKwkJeworCQkJQ29uc3RyYWludCAqY29uc3RyID0gKENvbnN0cmFpbnQgKikgbGZpcnN0 KGNlbGwpOworCisJCQlpZiAoY29uc3RyLT5jb250eXBlID09IENPTlNUUl9OT1ROVUxMKQorCQkJ eworCQkJCXNhd19ub3RudWxsID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlm IChpc19hbHRlciAmJiBjb2xkZWYtPmlzX25vdF9udWxsKQorCQkJc2F3X25vdG51bGwgPSB0cnVl OworCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7bm90X251bGx9cyIsICJub3RfbnVs bCIsCisJCQkJCQkJIHNhd19ub3RudWxsID8gIk5PVCBOVUxMIiA6ICIiKTsKKworCQl0bXBfb2Jq ID0gbmV3X29ianRyZWUoIkRFRkFVTFQiKTsKKwkJaWYgKGF0dHJGb3JtLT5hdHRoYXNkZWYgJiYK KwkJCWNvbGRlZi0+Z2VuZXJhdGVkICE9IEFUVFJJQlVURV9HRU5FUkFURURfU1RPUkVEKQorCQl7 CisJCQljaGFyCSAgICpkZWZzdHI7CisKKwkJCWRlZnN0ciA9IFJlbGF0aW9uR2V0Q29sdW1uRGVm YXVsdChyZWxhdGlvbiwgYXR0ckZvcm0tPmF0dG51bSwKKwkJCQkJCQkJCQkJICBkcGNvbnRleHQs IGV4cHJzKTsKKworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wX29iaiwgIiV7ZGVmYXVsdH1z IiwgImRlZmF1bHQiLCBkZWZzdHIpOworCQl9CisJCWVsc2UKKwkJCWFwcGVuZF9ub3RfcHJlc2Vu dCh0bXBfb2JqKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtkZWZhdWx0fXMiLCB0 bXBfb2JqKTsKKworCQkvKiBJREVOVElUWSBDT0xVTU4gKi8KKwkJaWYgKGNvbGRlZi0+aWRlbnRp dHkpCisJCXsKKwkJCU9pZAkJCWF0dG5vID0gZ2V0X2F0dG51bShyZWxpZCwgY29sZGVmLT5jb2xu YW1lKTsKKworCQkJc2VxcmVsaWQgPSBnZXRJZGVudGl0eVNlcXVlbmNlKHJlbGlkLCBhdHRubywg ZmFsc2UpOworCQl9CisKKwkJaWYgKE9pZElzVmFsaWQoc2VxcmVsaWQpKQorCQl7CisJCQl0bXBf b2JqID0gZGVwYXJzZV9Db2x1bW5JZGVudGl0eShzZXFyZWxpZCwgY29sZGVmLT5pZGVudGl0eSwg aXNfYWx0ZXIpOworCQkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtpZGVudGl0eV9jb2x1 bW59cyIsIHRtcF9vYmopOworCQl9CisKKwkJLyogR0VORVJBVEVEIENPTFVNTiBFWFBSRVNTSU9O ICovCisJCXRtcF9vYmogPSBuZXdfb2JqdHJlZSgiR0VORVJBVEVEIEFMV0FZUyBBUyIpOworCQlp ZiAoY29sZGVmLT5nZW5lcmF0ZWQgPT0gQVRUUklCVVRFX0dFTkVSQVRFRF9TVE9SRUQpCisJCXsK KwkJCWNoYXIJICAgKmRlZnN0cjsKKworCQkJZGVmc3RyID0gUmVsYXRpb25HZXRDb2x1bW5EZWZh dWx0KHJlbGF0aW9uLCBhdHRyRm9ybS0+YXR0bnVtLAorCQkJCQkJCQkJCQkgIGRwY29udGV4dCwg ZXhwcnMpOworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wX29iaiwgIiV7Z2VuZXJhdGlvbl9l eHByfXMgU1RPUkVEIiwKKwkJCQkJCQkJICJnZW5lcmF0aW9uX2V4cHIiLCBkZWZzdHIpOworCQl9 CisJCWVsc2UKKwkJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKworCQlhcHBlbmRfb2Jq ZWN0X29iamVjdChyZXQsICIle2dlbmVyYXRlZF9jb2x1bW59cyIsIHRtcF9vYmopOworCX0KKwor CVJlbGVhc2VTeXNDYWNoZShhdHRyVHVwKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBE ZXBhcnNlIGEgQ29sdW1uRGVmIG5vZGUgd2l0aGluIGEgdHlwZWQgdGFibGUgY3JlYXRpb24uCVRo aXMgaXMgc2ltcGxlcgorICogdGhhbiB0aGUgcmVndWxhciBjYXNlLCBiZWNhdXNlIHdlIGRvbid0 IGhhdmUgdG8gZW1pdCB0aGUgdHlwZSBkZWNsYXJhdGlvbiwKKyAqIGNvbGxhdGlvbiwgb3IgZGVm YXVsdC4gIEhlcmUgd2Ugb25seSByZXR1cm4gc29tZXRoaW5nIGlmIHRoZSBjb2x1bW4gaXMgYmVp bmcKKyAqIGRlY2xhcmVkIE5PVCBOVUxMLgorICoKKyAqIEFzIGluIGRlcGFyc2VfQ29sdW1uRGVm LCBhbnkgb3RoZXIgY29uc3RyYWludCBpcyBwcm9jZXNzZWQgZWxzZXdoZXJlLgorICoKKyAqIFZl cmJvc2Ugc3ludGF4CisgKiAle25hbWV9SSBXSVRIIE9QVElPTlMgJXtkZWZhdWx0fXMgJXtub3Rf bnVsbH1zLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NvbHVtbkRlZl90eXBlZChS ZWxhdGlvbiByZWxhdGlvbiwgTGlzdCAqZHBjb250ZXh0LCBDb2x1bW5EZWYgKmNvbGRlZikKK3sK KwlPYmpUcmVlICAgICpyZXQgPSBOVUxMOworCU9ialRyZWUgICAgKnRtcF9vYmo7CisJT2lkCQkJ cmVsaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbGF0aW9uKTsKKwlIZWFwVHVwbGUJYXR0clR1cDsK KwlGb3JtX3BnX2F0dHJpYnV0ZSBhdHRyRm9ybTsKKwlPaWQJCQl0eXBpZDsKKwlpbnQzMgkJdHlw bW9kOworCU9pZAkJCXR5cGNvbGxhdGlvbjsKKwlib29sCQlzYXdfbm90bnVsbDsKKwlMaXN0Q2Vs bCAgICpjZWxsOworCisJYXR0clR1cCA9IFNlYXJjaFN5c0NhY2hlQXR0TmFtZShyZWxpZCwgY29s ZGVmLT5jb2xuYW1lKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoYXR0clR1cCkpCisJCWVsb2co RVJST1IsICJjb3VsZCBub3QgZmluZCBjYWNoZSBlbnRyeSBmb3IgY29sdW1uIFwiJXNcIiBvZiBy ZWxhdGlvbiAldSIsCisJCQkgY29sZGVmLT5jb2xuYW1lLCByZWxpZCk7CisJYXR0ckZvcm0gPSAo Rm9ybV9wZ19hdHRyaWJ1dGUpIEdFVFNUUlVDVChhdHRyVHVwKTsKKworCWdldF9hdHR0eXBldHlw bW9kY29sbChyZWxpZCwgYXR0ckZvcm0tPmF0dG51bSwKKwkJCQkJCSAgJnR5cGlkLCAmdHlwbW9k LCAmdHlwY29sbGF0aW9uKTsKKworCS8qCisJICogU2VhcmNoIGZvciBhIE5PVCBOVUxMIGRlY2xh cmF0aW9uLiAgQXMgaW4gZGVwYXJzZV9Db2x1bW5EZWYsIHdlIHJlbHkgb24KKwkgKiBmaW5kaW5n IGEgY29uc3RyYWludCBvbiB0aGUgY29sdW1uIHJhdGhlciB0aGFuIGNvbGRlZi0+aXNfbm90X251 bGwuCisJICogKFRoaXMgcm91dGluZSBpcyBuZXZlciB1c2VkIGZvciBBTFRFUiBjYXNlcy4pCisJ ICovCisJc2F3X25vdG51bGwgPSBmYWxzZTsKKwlmb3JlYWNoKGNlbGwsIGNvbGRlZi0+Y29uc3Ry YWludHMpCisJeworCQlDb25zdHJhaW50ICpjb25zdHIgPSAoQ29uc3RyYWludCAqKSBsZmlyc3Qo Y2VsbCk7CisKKwkJaWYgKGNvbnN0ci0+Y29udHlwZSA9PSBDT05TVFJfTk9UTlVMTCkKKwkJewor CQkJc2F3X25vdG51bGwgPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIXNhd19u b3RudWxsICYmICFhdHRyRm9ybS0+YXR0aGFzZGVmKQorCXsKKwkJUmVsZWFzZVN5c0NhY2hlKGF0 dHJUdXApOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwl0bXBfb2JqID0gbmV3X29ianRyZWUoIkRF RkFVTFQiKTsKKwlpZiAoYXR0ckZvcm0tPmF0dGhhc2RlZikKKwl7CisJCWNoYXIJICAgKmRlZnN0 cjsKKworCQlkZWZzdHIgPSBSZWxhdGlvbkdldENvbHVtbkRlZmF1bHQocmVsYXRpb24sIGF0dHJG b3JtLT5hdHRudW0sCisJCQkJCQkJCQkJICBkcGNvbnRleHQsIE5VTEwpOworCisJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHRtcF9vYmosICIle2RlZmF1bHR9cyIsICJkZWZhdWx0IiwgZGVmc3RyKTsK Kwl9CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7CisKKwlyZXQgPSBuZXdf b2JqdHJlZV9WQSgiJXtuYW1lfUkgV0lUSCBPUFRJT05TICV7bm90X251bGx9cyAle2RlZmF1bHR9 cyIsIDQsCisJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiY29sdW1uIiwKKwkJCQkJCSAi bmFtZSIsIE9ialR5cGVTdHJpbmcsIGNvbGRlZi0+Y29sbmFtZSwKKwkJCQkJCSAibm90X251bGwi LCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIHNhd19ub3RudWxsID8gIk5PVCBOVUxMIiA6ICIiLAor CQkJCQkJICJkZWZhdWx0IiwgT2JqVHlwZU9iamVjdCwgdG1wX29iaik7CisKKwkvKiBHZW5lcmF0 ZWQgY29sdW1ucyBhcmUgbm90IHN1cHBvcnRlZCBvbiB0eXBlZCB0YWJsZXMsIHNvIHdlIGFyZSBk b25lICovCisKKwlSZWxlYXNlU3lzQ2FjaGUoYXR0clR1cCk7CisKKwlyZXR1cm4gcmV0OworfQor CisvKgorICogRGVwYXJzZSB0aGUgZGVmaW5pdGlvbiBvZiBjb2x1bW4gaWRlbnRpdHkuCisgKgor ICogVmVyYm9zZSBzeW50YXgKKyAqIFNFVCBHRU5FUkFURUQgJXtvcHRpb259cyAle2lkZW50aXR5 X3R5cGV9cyAle3NlcV9kZWZpbml0aW9uOiB9cworICogCU9SCisgKiBHRU5FUkFURUQgJXtvcHRp b259cyBBUyBJREVOVElUWSAle2lkZW50aXR5X3R5cGV9cyAoICV7c2VxX2RlZmluaXRpb246IH1z ICkKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9Db2x1bW5JZGVudGl0eShPaWQgc2Vx cmVsaWQsIGNoYXIgaWRlbnRpdHksIGJvb2wgYWx0ZXJfdGFibGUpCit7CisJT2JqVHJlZSAgICAq cmV0OworCU9ialRyZWUgICAgKmlkZW50X29iajsKKwlMaXN0CSAgICplbGVtcyA9IE5JTDsKKwlS ZWxhdGlvbglyZWw7CisJSGVhcFR1cGxlCXNlcXR1cGxlOworCUZvcm1fcGdfc2VxdWVuY2Ugc2Vx Zm9ybTsKKwlGb3JtX3BnX3NlcXVlbmNlX2RhdGEgc2VxZGF0YTsKKwljaGFyCSAgICppZGVudGZt dDsKKwljaGFyCSAgICpvYmpmbXQ7CisKKwlpZiAoYWx0ZXJfdGFibGUpCisJeworCQlpZGVudGZt dCA9ICJTRVQgR0VORVJBVEVEICI7CisJCW9iamZtdCA9ICIle29wdGlvbn1zIjsKKwl9CisJZWxz ZQorCXsKKwkJaWRlbnRmbXQgPSAiR0VORVJBVEVEICI7CisJCW9iamZtdCA9ICIle29wdGlvbn1z IEFTIElERU5USVRZIjsKKwl9CisKKwlpZGVudF9vYmogPSBuZXdfb2JqdHJlZShpZGVudGZtdCk7 CisKKwlpZiAoaWRlbnRpdHkgPT0gQVRUUklCVVRFX0lERU5USVRZX0FMV0FZUykKKwkJYXBwZW5k X3N0cmluZ19vYmplY3QoaWRlbnRfb2JqLCBvYmpmbXQsICJvcHRpb24iLCAiQUxXQVlTIik7CisJ ZWxzZSBpZiAoaWRlbnRpdHkgPT0gQVRUUklCVVRFX0lERU5USVRZX0JZX0RFRkFVTFQpCisJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KGlkZW50X29iaiwgb2JqZm10LCAib3B0aW9uIiwgIkJZIERFRkFV TFQiKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudChpZGVudF9vYmopOworCisJcmV0ID0g bmV3X29ianRyZWVfVkEoIiV7aWRlbnRpdHlfdHlwZX1zIiwgMSwKKwkJCQkJCSAiaWRlbnRpdHlf dHlwZSIsIE9ialR5cGVPYmplY3QsIGlkZW50X29iaik7CisKKwlyZWwgPSB0YWJsZV9vcGVuKFNl cXVlbmNlUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisJc2VxdHVwbGUgPSBTZWFyY2hT eXNDYWNoZUNvcHkxKFNFUVJFTElELCBzZXFyZWxpZCk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlk KHNlcXR1cGxlKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHNlcXVl bmNlIHdpdGggT0lEICV1IiwKKwkJCSBzZXFyZWxpZCk7CisKKwlzZXFmb3JtID0gKEZvcm1fcGdf c2VxdWVuY2UpIEdFVFNUUlVDVChzZXF0dXBsZSk7CisJc2VxZGF0YSA9IGdldF9zZXF1ZW5jZV92 YWx1ZXMoc2VxcmVsaWQpOworCisJLyogRGVmaW5pdGlvbiBlbGVtZW50cyAqLworCWVsZW1zID0g bGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfQ2FjaGUoc2VxZm9ybSwgYWx0ZXJfdGFibGUpKTsK KwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX0N5Y2xlKHNlcWZvcm0sIGFsdGVy X3RhYmxlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9JbmNyZW1lbnRC eShzZXFmb3JtLCBhbHRlcl90YWJsZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJz ZV9TZXFfTWludmFsdWUoc2VxZm9ybSwgYWx0ZXJfdGFibGUpKTsKKwllbGVtcyA9IGxhcHBlbmQo ZWxlbXMsIGRlcGFyc2VfU2VxX01heHZhbHVlKHNlcWZvcm0sIGFsdGVyX3RhYmxlKSk7CisJZWxl bXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9TdGFydHdpdGgoc2VxZm9ybSwgYWx0ZXJf dGFibGUpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX1Jlc3RhcnQoc2Vx ZGF0YSkpOworCS8qIFdlIHB1cnBvc2VmdWxseSBkbyBub3QgZW1pdCBPV05FRCBCWSBoZXJlICov CisKKwlpZiAoYWx0ZXJfdGFibGUpCisJCWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAiJXtzZXFf ZGVmaW5pdGlvbjogfXMiLCBlbGVtcyk7CisJZWxzZQorCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHJl dCwgIiggJXtzZXFfZGVmaW5pdGlvbjogfXMgKSIsIGVsZW1zKTsKKworCXRhYmxlX2Nsb3NlKHJl bCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogLi4uIEFM VEVSIENPTFVNTiAuLi4gU0VUL1JFU0VUICguLi4pCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAq IEFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFJFU0VUfFNFVCAoJXtvcHRpb25zOiwgfXMpCisgKi8K K3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ29sdW1uU2V0T3B0aW9ucyhBbHRlclRhYmxlQ21k ICpzdWJjbWQpCit7CisJTGlzdAkgICAqc2V0cyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOwor CU9ialRyZWUgICAgKnJldDsKKwlib29sCQlpc19yZXNldCA9IHN1YmNtZC0+c3VidHlwZSA9PSBB VF9SZXNldE9wdGlvbnM7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7 Y29sdW1ufUkgJXtvcHRpb259cyIsIDIsCisJCQkJCQkgImNvbHVtbiIsIE9ialR5cGVTdHJpbmcs IHN1YmNtZC0+bmFtZSwKKwkJCQkJCSAib3B0aW9uIiwgT2JqVHlwZVN0cmluZywgaXNfcmVzZXQg PyAiUkVTRVQiIDogIlNFVCIpOworCisJZm9yZWFjaChjZWxsLCAoTGlzdCAqKSBzdWJjbWQtPmRl ZikKKwl7CisJCURlZkVsZW0gICAgKmVsZW07CisJCU9ialRyZWUgICAgKnNldDsKKworCQllbGVt ID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCQlzZXQgPSBkZXBhcnNlX0RlZkVsZW0oZWxl bSwgaXNfcmVzZXQpOworCQlzZXRzID0gbGFwcGVuZChzZXRzLCBuZXdfb2JqZWN0X29iamVjdChz ZXQpKTsKKwl9CisKKwlBc3NlcnQoc2V0cyk7CisJYXBwZW5kX2FycmF5X29iamVjdChyZXQsICIo JXtvcHRpb25zOiwgfXMpIiwgc2V0cyk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogLi4u IEFMVEVSIENPTFVNTiAuLi4gU0VUL1JFU0VUICguLi4pCisgKgorICogVmVyYm9zZSBzeW50YXgK KyAqIFJFU0VUfFNFVCAoJXtvcHRpb25zOiwgfXMpCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2Rl cGFyc2VfUmVsU2V0T3B0aW9ucyhBbHRlclRhYmxlQ21kICpzdWJjbWQpCit7CisJTGlzdAkgICAq c2V0cyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCWJvb2wJCWlzX3Jlc2V0ID0gc3ViY21k LT5zdWJ0eXBlID09IEFUX1Jlc2V0UmVsT3B0aW9uczsKKworCWZvcmVhY2goY2VsbCwgKExpc3Qg Kikgc3ViY21kLT5kZWYpCisJeworCQlEZWZFbGVtICAgICplbGVtOworCQlPYmpUcmVlICAgICpz ZXQ7CisKKwkJZWxlbSA9IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsKKwkJc2V0ID0gZGVwYXJz ZV9EZWZFbGVtKGVsZW0sIGlzX3Jlc2V0KTsKKwkJc2V0cyA9IGxhcHBlbmQoc2V0cywgbmV3X29i amVjdF9vYmplY3Qoc2V0KSk7CisJfQorCisJQXNzZXJ0KHNldHMpOworCisJcmV0dXJuIG5ld19v Ymp0cmVlX1ZBKCIle3NldF9yZXNldH1zICgle29wdGlvbnM6LCB9cykiLCAyLAorCQkJCQkJICAi c2V0X3Jlc2V0IiwgT2JqVHlwZVN0cmluZywgaXNfcmVzZXQgPyAiUkVTRVQiIDogIlNFVCIsCisJ CQkJCQkgICJvcHRpb25zIiwgT2JqVHlwZUFycmF5LCBzZXRzKTsKK30KKworLyoKKyAqIERlcGFy c2UgRGVmRWxlbXMsIGFzIHVzZWQgZS5nLiBieSBBTFRFUiBDT0xVTU4gLi4uIFNFVCwgaW50byBh IGxpc3Qgb2YgU0VUCisgKiAoLi4uKSAgb3IgUkVTRVQgKC4uLikgY29udGVudHMuCisgKgorICog VmVyYm9zZSBzeW50YXgKKyAqICV7bGFiZWx9cyA9ICV7dmFsdWV9TAorICovCitzdGF0aWMgT2Jq VHJlZSAqCitkZXBhcnNlX0RlZkVsZW0oRGVmRWxlbSAqZWxlbSwgYm9vbCBpc19yZXNldCkKK3sK KwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqb3B0bmFtZSA9IG5ld19vYmp0cmVlKCIi KTsKKworCWlmIChlbGVtLT5kZWZuYW1lc3BhY2UgIT0gTlVMTCkKKwkJYXBwZW5kX3N0cmluZ19v YmplY3Qob3B0bmFtZSwgIiV7c2NoZW1hfUkuIiwgInNjaGVtYSIsCisJCQkJCQkJIGVsZW0tPmRl Zm5hbWVzcGFjZSk7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChvcHRuYW1lLCAiJXtsYWJlbH1J IiwgImxhYmVsIiwgZWxlbS0+ZGVmbmFtZSk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiJXts YWJlbH1zIiwgMSwKKwkJCQkJCSAibGFiZWwiLCBPYmpUeXBlT2JqZWN0LCBvcHRuYW1lKTsKKwor CWlmICghaXNfcmVzZXQpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIj0gJXt2YWx1ZX1M IiwgInZhbHVlIiwKKwkJCQkJCQkgZWxlbS0+YXJnID8gZGVmR2V0U3RyaW5nKGVsZW0pIDoKKwkJ CQkJCQkgZGVmR2V0Qm9vbGVhbihlbGVtKSA/ICJUUlVFIiA6ICJGQUxTRSIpOworCisJcmV0dXJu IHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIElOSEVSSVRTIHJlbGF0aW9ucy4KKyAqCisg KiBHaXZlbiBhIHRhYmxlIE9JRCwgcmV0dXJuIGEgc2NoZW1hLXF1YWxpZmllZCB0YWJsZSBsaXN0 IHJlcHJlc2VudGluZworICogdGhlIHBhcmVudCB0YWJsZXMuCisgKi8KK3N0YXRpYyBMaXN0ICoK K2RlcGFyc2VfSW5oUmVsYXRpb25zKE9pZCBvYmplY3RJZCkKK3sKKwlMaXN0CSAgICpwYXJlbnRz ID0gTklMOworCVJlbGF0aW9uCWluaFJlbDsKKwlTeXNTY2FuRGVzYyBzY2FuOworCVNjYW5LZXlE YXRhIGtleTsKKwlIZWFwVHVwbGUJdHVwbGU7CisKKwlpbmhSZWwgPSB0YWJsZV9vcGVuKEluaGVy aXRzUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwlTY2FuS2V5SW5pdCgma2V5LAor CQkJCUFudW1fcGdfaW5oZXJpdHNfaW5ocmVsaWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVy LCBGX09JREVRLAorCQkJCU9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKworCXNjYW4gPSBz eXN0YWJsZV9iZWdpbnNjYW4oaW5oUmVsLCBJbmhlcml0c1JlbGlkU2Vxbm9JbmRleElkLAorCQkJ CQkJCSAgdHJ1ZSwgTlVMTCwgMSwgJmtleSk7CisKKwl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZCh0 dXBsZSA9IHN5c3RhYmxlX2dldG5leHQoc2NhbikpKQorCXsKKwkJT2JqVHJlZSAgICAqcGFyZW50 OworCQlGb3JtX3BnX2luaGVyaXRzIGZvcm1JbmggPSAoRm9ybV9wZ19pbmhlcml0cykgR0VUU1RS VUNUKHR1cGxlKTsKKworCQlwYXJlbnQgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVs YXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkgZm9ybUluaC0+aW5ocGFyZW50KTsKKwkJcGFy ZW50cyA9IGxhcHBlbmQocGFyZW50cywgbmV3X29iamVjdF9vYmplY3QocGFyZW50KSk7CisJfQor CisJc3lzdGFibGVfZW5kc2NhbihzY2FuKTsKKwl0YWJsZV9jbG9zZShpbmhSZWwsIFJvd0V4Y2x1 c2l2ZUxvY2spOworCisJcmV0dXJuIHBhcmVudHM7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBP TiBDT01NSVQgLi4uIGNsYXVzZSBmb3IgQ1JFQVRFIC4uLiBURU1QT1JBUlkgLi4uCisgKgorICog VmVyYm9zZSBzeW50YXgKKyAqIE9OIENPTU1JVCAle29uX2NvbW1pdF92YWx1ZX1zCisgKi8KK3N0 YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfT25Db21taXRDbGF1c2UoT25Db21taXRBY3Rpb24gb3B0 aW9uKQoreworCU9ialRyZWUgICAgKnJldCAgPSBuZXdfb2JqdHJlZSgiT04gQ09NTUlUIik7CisJ c3dpdGNoIChvcHRpb24pCisJeworCQljYXNlIE9OQ09NTUlUX0RST1A6CisJCQlhcHBlbmRfc3Ry aW5nX29iamVjdChyZXQsICIle29uX2NvbW1pdF92YWx1ZX1zIiwKKwkJCQkJCQkJICJvbl9jb21t aXRfdmFsdWUiLCAiRFJPUCIpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPTkNPTU1JVF9ERUxFVEVf Uk9XUzoKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7b25fY29tbWl0X3ZhbHVlfXMi LAorCQkJCQkJCQkgIm9uX2NvbW1pdF92YWx1ZSIsICJERUxFVEUgUk9XUyIpOworCQkJYnJlYWs7 CisKKwkJY2FzZSBPTkNPTU1JVF9QUkVTRVJWRV9ST1dTOgorCQkJYXBwZW5kX3N0cmluZ19vYmpl Y3QocmV0LCAiJXtvbl9jb21taXRfdmFsdWV9cyIsCisJCQkJCQkJCSAib25fY29tbWl0X3ZhbHVl IiwgIlBSRVNFUlZFIFJPV1MiKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT05DT01NSVRfTk9PUDoK KwkJCWFwcGVuZF9udWxsX29iamVjdChyZXQsICIle29uX2NvbW1pdF92YWx1ZX1zIik7CisJCQlh cHBlbmRfbm90X3ByZXNlbnQocmV0KTsKKwkJCWJyZWFrOworCX0KKworCXJldHVybiByZXQ7Cit9 CisKKy8qCisgKiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBDQUNIRSBvcHRpb24uCisgKgorICogVmVy Ym9zZSBzeW50YXgKKyAqIFNFVCBDQUNIRSAle3ZhbHVlfXMKKyAqIE9SCisgKiBDQUNIRSAle3Zh bHVlfQorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9TZXFfQ2FjaGUoRm9y bV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKQoreworCU9ialRyZWUgICAg KnJldDsKKwljaGFyCSAgICp0bXBzdHI7CisJY2hhcgkgICAqZm10OworCisJZm10ID0gYWx0ZXJf dGFibGUgPyAiU0VUIENBQ0hFICV7dmFsdWV9cyIgOiAiQ0FDSEUgJXt2YWx1ZX1zIjsKKworCXRt cHN0ciA9IHBzcHJpbnRmKElOVDY0X0ZPUk1BVCwgc2VxZGF0YS0+c2VxY2FjaGUpOworCXJldCA9 IG5ld19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywg ImNhY2hlIiwKKwkJCQkJCSAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLCB0bXBzdHIpOworCisJcmV0 dXJuIG5ld19vYmplY3Rfb2JqZWN0KHJldCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBzZXF1 ZW5jZSBDWUNMRSBvcHRpb24uCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIFNFVCAle25vfXMg Q1lDTEUKKyAqIE9SCisgKiAle25vfXMgQ1lDTEUKKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVt ICoKK2RlcGFyc2VfU2VxX0N5Y2xlKEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRl cl90YWJsZSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisJY2hhcgkgICAqZm10OworCisJZm10ID0g YWx0ZXJfdGFibGUgPyAiU0VUICV7bm99cyBDWUNMRSIgOiAiJXtub31zIENZQ0xFIjsKKworCXJl dCA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmlu ZywgImN5Y2xlIiwKKwkJCQkJCSAibm8iLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIHNlcWRhdGEt PnNlcWN5Y2xlID8gIiIgOiAiTk8iKTsKKworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChyZXQp OworfQorCisvKgorICogRGVwYXJzZSB0aGUgc2VxdWVuY2UgSU5DUkVNRU5UIEJZIG9wdGlvbi4K KyAqCisgKiBWZXJib3NlIHN5bnRheAorICogU0VUIElOQ1JFTUVOVCBCWSAle3ZhbHVlfXMKKyAq IE9SCisgKiBJTkNSRU1FTlQgQlkgJXt2YWx1ZX1zCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxl bSAqCitkZXBhcnNlX1NlcV9JbmNyZW1lbnRCeShGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJv b2wgYWx0ZXJfdGFibGUpCit7CisJT2JqVHJlZSAgICAqcmV0OworCWNoYXIJICAgKnRtcHN0cjsK KwljaGFyCSAgICpmbXQ7CisKKwlmbXQgPSBhbHRlcl90YWJsZSA/ICJTRVQgSU5DUkVNRU5UIEJZ ICV7dmFsdWV9cyIgOiAiSU5DUkVNRU5UIEJZICV7dmFsdWV9cyI7CisKKwl0bXBzdHIgPSBwc3By aW50ZihJTlQ2NF9GT1JNQVQsIHNlcWRhdGEtPnNlcWluY3JlbWVudCk7CisJcmV0ID0gbmV3X29i anRyZWVfVkEoZm10LCAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAic2VxaW5j cmVtZW50IiwKKwkJCQkJCSAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLCB0bXBzdHIpOworCisJcmV0 dXJuIG5ld19vYmplY3Rfb2JqZWN0KHJldCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBzZXF1 ZW5jZSBNQVhWQUxVRSBvcHRpb24uCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIFNFVCBNQVhW QUxVRSAle3ZhbHVlfXMKKyAqIE9SCisgKiBNQVhWQUxVRSAle3ZhbHVlfXMKKyAqLworc3RhdGlj IGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX01heHZhbHVlKEZvcm1fcGdfc2VxdWVuY2Ug c2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisJY2hhcgkg ICAqdG1wc3RyOworCWNoYXIJICAgKmZtdDsKKworCWZtdCA9IGFsdGVyX3RhYmxlID8gIlNFVCBN QVhWQUxVRSAle3ZhbHVlfXMiIDogIk1BWFZBTFVFICV7dmFsdWV9cyI7CisKKwl0bXBzdHIgPSBw c3ByaW50ZihJTlQ2NF9GT1JNQVQsIHNlcWRhdGEtPnNlcW1heCk7CisJcmV0ID0gbmV3X29ianRy ZWVfVkEoZm10LCAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAibWF4dmFsdWUi LAorCQkJCQkJICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsIHRtcHN0cik7CisKKwlyZXR1cm4gbmV3 X29iamVjdF9vYmplY3QocmV0KTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIE1J TlZBTFVFIG9wdGlvbi4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogU0VUIE1JTlZBTFVFICV7 dmFsdWV9cworICogT1IKKyAqIE1JTlZBTFVFICV7dmFsdWV9cworICovCitzdGF0aWMgaW5saW5l IE9iakVsZW0gKgorZGVwYXJzZV9TZXFfTWludmFsdWUoRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRh LCBib29sIGFsdGVyX3RhYmxlKQoreworCU9ialRyZWUgICAgKnJldDsKKwljaGFyCSAgICp0bXBz dHI7CisJY2hhcgkgICAqZm10OworCisJZm10ID0gYWx0ZXJfdGFibGUgPyAiU0VUIE1JTlZBTFVF ICV7dmFsdWV9cyIgOiAiTUlOVkFMVUUgJXt2YWx1ZX1zIjsKKworCXRtcHN0ciA9IHBzcHJpbnRm KElOVDY0X0ZPUk1BVCwgc2VxZGF0YS0+c2VxbWluKTsKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQShm bXQsIDIsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJtaW52YWx1ZSIsCisJCQkJ CQkgInZhbHVlIiwgT2JqVHlwZVN0cmluZywgdG1wc3RyKTsKKworCXJldHVybiBuZXdfb2JqZWN0 X29iamVjdChyZXQpOworfQorCisvKgorICogRGVwYXJzZSB0aGUgc2VxdWVuY2UgUkVTVEFSVCBv cHRpb24uCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIFJFU1RBUlQgJXt2YWx1ZX1zCisgKi8K K3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1NlcV9SZXN0YXJ0KEZvcm1fcGdfc2Vx dWVuY2VfZGF0YSBzZXFkYXRhKQoreworCU9ialRyZWUgICAgKnJldDsKKwljaGFyCSAgICp0bXBz dHI7CisKKwl0bXBzdHIgPSBwc3ByaW50ZihJTlQ2NF9GT1JNQVQsIHNlcWRhdGEtPmxhc3RfdmFs dWUpOworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJSRVNUQVJUICV7dmFsdWV9cyIsIDIsCisJCQkJ CQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJyZXN0YXJ0IiwKKwkJCQkJCSAidmFsdWUiLCBP YmpUeXBlU3RyaW5nLCB0bXBzdHIpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHJldCk7 Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBBUyBvcHRpb24uCisgKgorICogVmVy Ym9zZSBzeW50YXgKKyAqIEFTICV7aWRlbnRpdHl9RAorICovCitzdGF0aWMgaW5saW5lIE9iakVs ZW0gKgorZGVwYXJzZV9TZXFfQXMoRGVmRWxlbSAqZWxlbSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7 CisJVHlwZQkJbGlrZVR5cGU7CisJRm9ybV9wZ190eXBlIGxpa2VGb3JtOworCisJbGlrZVR5cGUg PSB0eXBlbmFtZVR5cGUoTlVMTCwgZGVmR2V0VHlwZU5hbWUoZWxlbSksIE5VTEwpOworCWxpa2VG b3JtID0gKEZvcm1fcGdfdHlwZSkgR0VUU1RSVUNUKGxpa2VUeXBlKTsKKworCXJldCA9IG5ld19v Ymp0cmVlX1ZBKCJBUyAle2lkZW50aXR5fUQiLCAxLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5 cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGxpa2VGb3JtLT50eXBu YW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIobGlrZUZvcm0tPnR5cG5hbWUpKSk7CisJ UmVsZWFzZVN5c0NhY2hlKGxpa2VUeXBlKTsKKworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChy ZXQpOworfQorCisvKgorICogRGVwYXJzZSB0aGUgc2VxdWVuY2UgU1RBUlQgV0lUSCBvcHRpb24u CisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIFNFVCBTVEFSVCBXSVRIICV7dmFsdWV9cworICog T1IKKyAqIFNUQVJUIFdJVEggJXt2YWx1ZX1zCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAq CitkZXBhcnNlX1NlcV9TdGFydHdpdGgoRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFs dGVyX3RhYmxlKQoreworCU9ialRyZWUgICAgKnJldDsKKwljaGFyCSAgICp0bXBzdHI7CisJY2hh cgkgICAqZm10OworCisJZm10ID0gYWx0ZXJfdGFibGUgPyAiU0VUIFNUQVJUIFdJVEggJXt2YWx1 ZX1zIiA6ICJTVEFSVCBXSVRIICV7dmFsdWV9cyI7CisKKwl0bXBzdHIgPSBwc3ByaW50ZihJTlQ2 NF9GT1JNQVQsIHNlcWRhdGEtPnNlcXN0YXJ0KTsKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQShmbXQs IDIsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJzdGFydCIsCisJCQkJCQkgInZh bHVlIiwgT2JqVHlwZVN0cmluZywgdG1wc3RyKTsKKworCXJldHVybiBuZXdfb2JqZWN0X29iamVj dChyZXQpOworfQorCisvKgorICogRGVwYXJzZSB0aGUgdHlwZSBTVE9SQUdFIG9wdGlvbi4KKyAq CisgKiBWZXJib3NlIHN5bnRheAorICogU1RPUkFHRT0le3ZhbHVlfXMKKyAqLworc3RhdGljIGlu bGluZSBPYmpFbGVtICoKK2RlcGFyc2VfVHlwZV9TdG9yYWdlKEZvcm1fcGdfdHlwZSB0eXBGb3Jt KQoreworCU9ialRyZWUgICAgKnJldDsKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiU1RPUkFHRSA9 ICV7dmFsdWV9cyIsIDIsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJzdG9yYWdl IiwKKwkJCQkJCSAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLCBnZXRfdHlwZV9zdG9yYWdlKHR5cEZv cm0tPnR5cHN0b3JhZ2UpKTsKKworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChyZXQpOworfQor CisvKgorICogRGVwYXJzZSB0aGUgdHlwZSBSRUNFSVZFIG9wdGlvbi4KKyAqCisgKiBWZXJib3Nl IHN5bnRheAorICogUkVDRUlWRT0le3Byb2NlZHVyZX1ECisgKi8KK3N0YXRpYyBpbmxpbmUgT2Jq RWxlbSAqCitkZXBhcnNlX1R5cGVfUmVjZWl2ZShGb3JtX3BnX3R5cGUgdHlwRm9ybSkKK3sKKwlP YmpUcmVlICAgICpyZXQ7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiUkVDRUlWRT0iLCAxLAor CQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicmVjZWl2ZSIpOworCWlmIChPaWRJc1Zh bGlkKHR5cEZvcm0tPnR5cHJlY2VpdmUpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIl e3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2Nl ZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXByZWNlaXZlKSk7CisJ ZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQocmV0KTsKKworCXJldHVybiBuZXdfb2JqZWN0X29i amVjdChyZXQpOworfQorCisvKgorICogRGVwYXJzZSB0aGUgdHlwZSBTRU5EIG9wdGlvbi4KKyAq CisgKiBWZXJib3NlIHN5bnRheAorICogU0VORD0le3Byb2NlZHVyZX1ECisgKi8KK3N0YXRpYyBp bmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1R5cGVfU2VuZChGb3JtX3BnX3R5cGUgdHlwRm9ybSkK K3sKKwlPYmpUcmVlICAgICpyZXQ7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiU0VORD0iLCAx LAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAic2VuZCIpOworCWlmIChPaWRJc1Zh bGlkKHR5cEZvcm0tPnR5cHNlbmQpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle3By b2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVy ZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBzZW5kKSk7CisJZWxzZQor CQlhcHBlbmRfbm90X3ByZXNlbnQocmV0KTsKKworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChy ZXQpOworfQorCisvKgorICogRGVwYXJzZSB0aGUgdHlwZSB0eXBtb2RfaW4gb3B0aW9uLgorICoK KyAqIFZlcmJvc2Ugc3ludGF4CisgKiBUWVBNT0RfSU49JXtwcm9jZWR1cmV9RAorICovCitzdGF0 aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9UeXBlX1R5cG1vZF9JbihGb3JtX3BnX3R5cGUg dHlwRm9ybSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgi VFlQTU9EX0lOPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJ0eXBtb2Rf aW4iKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBtb2RpbikpCisJCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KHJldCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0t PnR5cG1vZGluKSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQocmV0KTsKKworCXJldHVy biBuZXdfb2JqZWN0X29iamVjdChyZXQpOworfQorCisvKgorICogRGVwYXJzZSB0aGUgdHlwZSB0 eXBtb2Rfb3V0IG9wdGlvbi4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogVFlQTU9EX09VVD0l e3Byb2NlZHVyZX1ECisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1R5cGVf VHlwbW9kX091dChGb3JtX3BnX3R5cGUgdHlwRm9ybSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisK KwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiVFlQTU9EX09VVD0iLCAxLAorCQkJCQkJICJjbGF1c2Ui LCBPYmpUeXBlU3RyaW5nLCAidHlwbW9kX291dCIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0t PnR5cG1vZG91dCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7cHJvY2VkdXJlfUQi LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25J ZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cG1vZG91dCkpOworCWVsc2UKKwkJYXBwZW5k X25vdF9wcmVzZW50KHJldCk7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QocmV0KTsKK30K KworLyoKKyAqIERlcGFyc2UgdGhlIHR5cGUgYW5hbHl6ZSBvcHRpb24uCisgKgorICogVmVyYm9z ZSBzeW50YXgKKyAqIEFOQUxZWkU9JXtwcm9jZWR1cmV9RAorICovCitzdGF0aWMgaW5saW5lIE9i akVsZW0gKgorZGVwYXJzZV9UeXBlX0FuYWx5emUoRm9ybV9wZ190eXBlIHR5cEZvcm0pCit7CisJ T2JqVHJlZSAgICAqcmV0OworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFOQUxZWkU9IiwgMSwK KwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImFuYWx5emUiKTsKKwlpZiAoT2lkSXNW YWxpZCh0eXBGb3JtLT50eXBhbmFseXplKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAi JXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9j ZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwYW5hbHl6ZSkpOwor CWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHJldCk7CisKKwlyZXR1cm4gbmV3X29iamVjdF9v YmplY3QocmV0KTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHR5cGUgc3Vic2NyaXB0IG9wdGlv bi4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogU1VCU0NSSVBUPSV7cHJvY2VkdXJlfUQKKyAq Lworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfVHlwZV9TdWJzY3JpcHQoRm9ybV9w Z190eXBlIHR5cEZvcm0pCit7CisJT2JqVHJlZSAgICAqcmV0OworCisJcmV0ID0gbmV3X29ianRy ZWVfVkEoIlNVQlNDUklQVD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAi c3Vic2NyaXB0Iik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwc3Vic2NyaXB0KSkKKwkJ YXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJ CQkgdHlwRm9ybS0+dHlwc3Vic2NyaXB0KSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQo cmV0KTsKKworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChyZXQpOworfQorCisvKgorICogU3Vi cm91dGluZSBmb3IgQ1JFQVRFIFRBQkxFIGRlcGFyc2luZy4KKyAqCisgKiBEZWFsIHdpdGggYWxs IHRoZSB0YWJsZSBlbGVtZW50cyAoY29sdW1ucyBhbmQgY29uc3RyYWludHMpLgorICoKKyAqIE5v dGUgd2UgaWdub3JlIGNvbnN0cmFpbnRzIGluIHRoZSBwYXJzZSBub2RlIGhlcmU7IHRoZXkgYXJl IGV4dHJhY3RlZCBmcm9tCisgKiBzeXN0ZW0gY2F0YWxvZ3MgaW5zdGVhZC4KKyAqLworc3RhdGlj IExpc3QgKgorZGVwYXJzZV9UYWJsZUVsZW1lbnRzKFJlbGF0aW9uIHJlbGF0aW9uLCBMaXN0ICp0 YWJsZUVsZW1lbnRzLCBMaXN0ICpkcGNvbnRleHQsCisJCQkJCSAgYm9vbCB0eXBlZCwgYm9vbCBj b21wb3NpdGUpCit7CisJTGlzdAkgICAqZWxlbWVudHMgPSBOSUw7CisJTGlzdENlbGwgICAqbGM7 CisKKwlmb3JlYWNoKGxjLCB0YWJsZUVsZW1lbnRzKQorCXsKKwkJTm9kZQkgICAqZWx0ID0gKE5v ZGUgKikgbGZpcnN0KGxjKTsKKworCQlzd2l0Y2ggKG5vZGVUYWcoZWx0KSkKKwkJeworCQkJY2Fz ZSBUX0NvbHVtbkRlZjoKKwkJCQl7CisJCQkJCU9ialRyZWUgICAgKnRyZWU7CisKKwkJCQkJdHJl ZSA9IHR5cGVkID8KKwkJCQkJCWRlcGFyc2VfQ29sdW1uRGVmX3R5cGVkKHJlbGF0aW9uLCBkcGNv bnRleHQsCisJCQkJCQkJCQkJCQkoQ29sdW1uRGVmICopIGVsdCkgOgorCQkJCQkJZGVwYXJzZV9D b2x1bW5EZWYocmVsYXRpb24sIGRwY29udGV4dCwKKwkJCQkJCQkJCQkgIGNvbXBvc2l0ZSwgKENv bHVtbkRlZiAqKSBlbHQsCisJCQkJCQkJCQkJICBmYWxzZSwgTlVMTCk7CisJCQkJCWlmICh0cmVl ICE9IE5VTEwpCisJCQkJCQllbGVtZW50cyA9IGxhcHBlbmQoZWxlbWVudHMsIG5ld19vYmplY3Rf b2JqZWN0KHRyZWUpKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIFRfQ29uc3RyYWludDoK KwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZWxvZyhFUlJPUiwgImludmFsaWQgbm9kZSB0 eXBlICVkIiwgbm9kZVRhZyhlbHQpKTsKKwkJfQorCX0KKworCXJldHVybiBlbGVtZW50czsKK30K KworLyoKKyAqIERlcGFyc2UgYSBDcmVhdGVTZXFTdG10LgorICoKKyAqIEdpdmVuIGEgc2VxdWVu Y2UgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpU cmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICogVmVyYm9z ZSBzeW50YXgKKyAqIENSRUFURSAle3BlcnNpc3RlbmNlfXMgU0VRVUVOQ0UgJXtpZGVudGl0eX1E CisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlU2VxU3RtdChPaWQgb2JqZWN0 SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisJUmVsYXRpb24JcmVs YXRpb247CisJRm9ybV9wZ19zZXF1ZW5jZV9kYXRhIHNlcWRhdGE7CisJTGlzdAkgICAqZWxlbXMg PSBOSUw7CisJRm9ybV9wZ19zZXF1ZW5jZSBzZXFmb3JtOworCVJlbGF0aW9uCXJlbDsKKwlIZWFw VHVwbGUJc2VxdHVwbGU7CisJQ3JlYXRlU2VxU3RtdCAqY3JlYXRlU2VxU3RtdCA9IChDcmVhdGVT ZXFTdG10ICopIHBhcnNldHJlZTsKKworCS8qCisJICogU2VxdWVuY2UgZm9yIElERU5USVRZIENP TFVNTiBvdXRwdXQgc2VwYXJhdGVseSAodmlhIENSRUFURSBUQUJMRSBvcgorCSAqIEFMVEVSIFRB QkxFKTsgcmV0dXJuIGVtcHR5IGhlcmUuCisJICovCisJaWYgKGNyZWF0ZVNlcVN0bXQtPmZvcl9p ZGVudGl0eSkKKwkJcmV0dXJuIE5VTEw7CisKKwlzZXFkYXRhID0gZ2V0X3NlcXVlbmNlX3ZhbHVl cyhvYmplY3RJZCk7CisKKwlyZWxhdGlvbiA9IHJlbGF0aW9uX29wZW4ob2JqZWN0SWQsIEFjY2Vz c1NoYXJlTG9jayk7CisJcmVsID0gdGFibGVfb3BlbihTZXF1ZW5jZVJlbGF0aW9uSWQsIFJvd0V4 Y2x1c2l2ZUxvY2spOworCXNlcXR1cGxlID0gU2VhcmNoU3lzQ2FjaGVDb3B5MShTRVFSRUxJRCwK KwkJCQkJCQkJICAgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxl SXNWYWxpZChzZXF0dXBsZSkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZv ciBzZXF1ZW5jZSB3aXRoIE9JRCAldSIsCisJCQkgb2JqZWN0SWQpOworCisJc2VxZm9ybSA9IChG b3JtX3BnX3NlcXVlbmNlKSBHRVRTVFJVQ1Qoc2VxdHVwbGUpOworCisJLyogRGVmaW5pdGlvbiBl bGVtZW50cyAqLworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfQ2FjaGUoc2Vx Zm9ybSwgZmFsc2UpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX0N5Y2xl KHNlcWZvcm0sIGZhbHNlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9J bmNyZW1lbnRCeShzZXFmb3JtLCBmYWxzZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVw YXJzZV9TZXFfTWludmFsdWUoc2VxZm9ybSwgZmFsc2UpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxl bXMsIGRlcGFyc2VfU2VxX01heHZhbHVlKHNlcWZvcm0sIGZhbHNlKSk7CisJZWxlbXMgPSBsYXBw ZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9TdGFydHdpdGgoc2VxZm9ybSwgZmFsc2UpKTsKKwllbGVt cyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX1Jlc3RhcnQoc2VxZGF0YSkpOworCisJLyog V2UgcHVycG9zZWZ1bGx5IGRvIG5vdCBlbWl0IE9XTkVEIEJZIGhlcmUgKi8KKworCXJldCA9IG5l d19vYmp0cmVlX1ZBKCJDUkVBVEUgJXtwZXJzaXN0ZW5jZX1zIFNFUVVFTkNFICV7aWZfbm90X2V4 aXN0c31zICV7aWRlbnRpdHl9RCAle2RlZmluaXRpb246IH1zIiwgNCwKKwkJCQkJCSAicGVyc2lz dGVuY2UiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIGdldF9wZXJzaXN0ZW5jZV9zdHIocmVsYXRp b24tPnJkX3JlbC0+cmVscGVyc2lzdGVuY2UpLAorCQkJCQkJICJpZl9ub3RfZXhpc3RzIiwgT2Jq VHlwZVN0cmluZywKKwkJCQkJCSBjcmVhdGVTZXFTdG10LT5pZl9ub3RfZXhpc3RzID8gIklGIE5P VCBFWElTVFMiIDogIiIsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJ CSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocmVsYXRpb24tPnJkX3JlbC0+cmVsbmFtZXNwYWNl LAorCQkJCQkJCQkJCQkJICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWxhdGlvbikpLAorCQkJ CQkJICJkZWZpbml0aW9uIiwgT2JqVHlwZUFycmF5LCBlbGVtcyk7CisKKwl0YWJsZV9jbG9zZShy ZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOworCXJlbGF0aW9uX2Nsb3NlKHJlbGF0aW9uLCBBY2Nlc3NT aGFyZUxvY2spOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gSW5kZXhT dG10LgorICoKKyAqIEdpdmVuIGFuIGluZGV4IE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBj cmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlv biBjb21tYW5kLgorICoKKyAqIElmIHRoZSBpbmRleCBjb3JyZXNwb25kcyB0byBhIGNvbnN0cmFp bnQsIE5VTEwgaXMgcmV0dXJuZWQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSAl e3VuaXF1ZX1zIElOREVYICV7Y29uY3VycmVudGx5fXMgJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1l fUkgT04KKyAqICV7dGFibGV9RCBVU0lORyAle2luZGV4X2FtfXMgJXtkZWZpbml0aW9ufXMgJXt3 aXRofXMgJXt0YWJsZXNwYWNlfXMKKyAqICV7d2hlcmVfY2xhdXNlfXMKKyAqLworc3RhdGljIE9i alRyZWUgKgorZGVwYXJzZV9JbmRleFN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUp Cit7CisJSW5kZXhTdG10ICAqbm9kZSA9IChJbmRleFN0bXQgKikgcGFyc2V0cmVlOworCU9ialRy ZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICp0bXBfb2JqOworCVJlbGF0aW9uCWlkeHJlbDsKKwlS ZWxhdGlvbgloZWFwcmVsOworCWNoYXIJICAgKmluZGV4X2FtOworCWNoYXIJICAgKmRlZmluaXRp b247CisJY2hhcgkgICAqcmVsb3B0aW9uczsKKwljaGFyCSAgICp0YWJsZXNwYWNlOworCWNoYXIJ ICAgKndoZXJlQ2xhdXNlOworCisJaWYgKG5vZGUtPnByaW1hcnkgfHwgbm9kZS0+aXNjb25zdHJh aW50KQorCXsKKwkJLyoKKwkJICogSW5kZXhlcyBmb3IgUFJJTUFSWSBLRVkgYW5kIG90aGVyIGNv bnN0cmFpbnRzIGFyZSBvdXRwdXQKKwkJICogc2VwYXJhdGVseTsgcmV0dXJuIGVtcHR5IGhlcmUu CisJCSAqLworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZHhyZWwgPSByZWxhdGlvbl9vcGVuKG9i amVjdElkLCBBY2Nlc3NTaGFyZUxvY2spOworCWhlYXByZWwgPSByZWxhdGlvbl9vcGVuKGlkeHJl bC0+cmRfaW5kZXgtPmluZHJlbGlkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcGdfZ2V0X2luZGV4 ZGVmX2RldGFpbGVkKG9iamVjdElkLAorCQkJCQkJCSAmaW5kZXhfYW0sICZkZWZpbml0aW9uLCAm cmVsb3B0aW9ucywKKwkJCQkJCQkgJnRhYmxlc3BhY2UsICZ3aGVyZUNsYXVzZSk7CisKKwlyZXQg PSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFICV7dW5pcXVlfXMgSU5ERVggJXtjb25jdXJyZW50bHl9 cyAle2lmX25vdF9leGlzdHN9cyAle25hbWV9SSBPTiAle3RhYmxlfUQgVVNJTkcgJXtpbmRleF9h bX1zICV7ZGVmaW5pdGlvbn1zIiwgNywKKwkJCQkJCSAidW5pcXVlIiwgT2JqVHlwZVN0cmluZywK KwkJCQkJCSBub2RlLT51bmlxdWUgPyAiVU5JUVVFIiA6ICIiLAorCQkJCQkJICJjb25jdXJyZW50 bHkiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIG5vZGUtPmNvbmN1cnJlbnQgPyAiQ09OQ1VSUkVO VExZIiA6ICIiLAorCQkJCQkJICJpZl9ub3RfZXhpc3RzIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJ CSBub2RlLT5pZl9ub3RfZXhpc3RzID8gIklGIE5PVCBFWElTVFMiIDogIiIsCisJCQkJCQkgIm5h bWUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGlkeHJl bCksCisJCQkJCQkgInRhYmxlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWUoaGVhcHJlbC0+cmRfcmVsLT5yZWxuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkg IFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGhlYXByZWwpKSwKKwkJCQkJCSAiaW5kZXhfYW0iLCBP YmpUeXBlU3RyaW5nLCBpbmRleF9hbSwKKwkJCQkJCSAiZGVmaW5pdGlvbiIsIE9ialR5cGVTdHJp bmcsIGRlZmluaXRpb24pOworCisJLyogcmVsb3B0aW9ucyAqLworCXRtcF9vYmogPSBuZXdfb2Jq dHJlZSgiV0lUSCIpOworCWlmIChyZWxvcHRpb25zKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0 bXBfb2JqLCAiKCV7b3B0c31zKSIsICJvcHRzIiwgcmVsb3B0aW9ucyk7CisJZWxzZQorCQlhcHBl bmRfbm90X3ByZXNlbnQodG1wX29iaik7CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXt3 aXRofXMiLCB0bXBfb2JqKTsKKworCS8qIHRhYmxlc3BhY2UgKi8KKwl0bXBfb2JqID0gbmV3X29i anRyZWUoIlRBQkxFU1BBQ0UiKTsKKwlpZiAodGFibGVzcGFjZSkKKwkJYXBwZW5kX3N0cmluZ19v YmplY3QodG1wX29iaiwgIiV7dGFibGVzcGFjZX1zIiwgInRhYmxlc3BhY2UiLCB0YWJsZXNwYWNl KTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKwlhcHBlbmRfb2JqZWN0 X29iamVjdChyZXQsICIle3RhYmxlc3BhY2V9cyIsIHRtcF9vYmopOworCisJLyogV0hFUkUgY2xh dXNlICovCisJdG1wX29iaiA9IG5ld19vYmp0cmVlKCJXSEVSRSIpOworCWlmICh3aGVyZUNsYXVz ZSkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wX29iaiwgIiV7d2hlcmV9cyIsICJ3aGVyZSIs IHdoZXJlQ2xhdXNlKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKwlh cHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle3doZXJlX2NsYXVzZX1zIiwgdG1wX29iaik7CisK Kwl0YWJsZV9jbG9zZShpZHhyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisJdGFibGVfY2xvc2UoaGVh cHJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBh cnNlIGEgQ3JlYXRlU3RtdCAoQ1JFQVRFIFRBQkxFKS4KKyAqCisgKiBHaXZlbiBhIHRhYmxlIE9J RCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQor ICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3lu dGF4CisgKiBDUkVBVEUgJXtwZXJzaXN0ZW5jZX1zIFRBQkxFICV7aWZfbm90X2V4aXN0c31zICV7 aWRlbnRpdHl9RCBbT0YKKyAqICV7b2ZfdHlwZX1UIHwgUEFSVElUSU9OIE9GICV7cGFyZW50X2lk ZW50aXR5fURdICV7dGFibGVfZWxlbWVudHN9cworICogJXtpbmhlcml0c31zICV7cGFydGl0aW9u X2J5fXMgJXthY2Nlc3NfbWV0aG9kfXMgJXt3aXRoX2NsYXVzZX1zCisgKiAle29uX2NvbW1pdH1z ICV7dGFibGVzcGFjZX1zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlU3Rt dChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVTdG10ICpub2RlID0g KENyZWF0ZVN0bXQgKikgcGFyc2V0cmVlOworCVJlbGF0aW9uCXJlbGF0aW9uID0gcmVsYXRpb25f b3BlbihvYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlMaXN0CSAgICpkcGNvbnRleHQ7CisJ T2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUgICAgKnRtcF9vYmo7CisJTGlzdAkgICAqbGlzdCA9 IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFU RSAle3BlcnNpc3RlbmNlfXMgVEFCTEUgJXtpZl9ub3RfZXhpc3RzfXMgJXtpZGVudGl0eX1EIiwg MywKKwkJCQkJCSAicGVyc2lzdGVuY2UiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIGdldF9wZXJz aXN0ZW5jZV9zdHIocmVsYXRpb24tPnJkX3JlbC0+cmVscGVyc2lzdGVuY2UpLAorCQkJCQkJICJp Zl9ub3RfZXhpc3RzIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBub2RlLT5pZl9ub3RfZXhpc3Rz ID8gIklGIE5PVCBFWElTVFMiIDogIiIsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVj dCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocmVsYXRpb24tPnJkX3JlbC0+cmVs bmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWxhdGlv bikpKTsKKworCWRwY29udGV4dCA9IGRlcGFyc2VfY29udGV4dF9mb3IoUmVsYXRpb25HZXRSZWxh dGlvbk5hbWUocmVsYXRpb24pLAorCQkJCQkJCQkJb2JqZWN0SWQpOworCisJLyoKKwkgKiBUeXBl ZCB0YWJsZXMgYW5kIHBhcnRpdGlvbnMgdXNlIGEgc2xpZ2h0bHkgZGlmZmVyZW50IGZvcm1hdCBz dHJpbmc6IHdlCisJICogbXVzdCBub3QgcHV0IHRhYmxlX2VsZW1lbnRzIHdpdGggcGFyZW50cyBk aXJlY3RseSBpbiB0aGUgZm10IHN0cmluZywKKwkgKiBiZWNhdXNlIGlmIHRoZXJlIGFyZSBubyBv cHRpb25zIHRoZSBwYXJlbnRoZXNlcyBtdXN0IG5vdCBiZSBlbWl0dGVkOworCSAqIGFuZCBhbHNv LCB0eXBlZCB0YWJsZXMgZG8gbm90IGFsbG93IGZvciBpbmhlcml0YW5jZS4KKwkgKi8KKwlpZiAo bm9kZS0+b2ZUeXBlbmFtZSB8fCBub2RlLT5wYXJ0Ym91bmQpCisJeworCQlMaXN0CSAgICp0YWJs ZWVsdHMgPSBOSUw7CisKKwkJLyoKKwkJICogV2UgY2FuJ3QgcHV0IHRhYmxlIGVsZW1lbnRzIGRp cmVjdGx5IGluIHRoZSBmbXQgc3RyaW5nIGFzIGFuIGFycmF5CisJCSAqIHN1cnJvdW5kZWQgYnkg cGFyZW50aGVzZXMgaGVyZSwgYmVjYXVzZSBhbiBlbXB0eSBjbGF1c2Ugd291bGQgY2F1c2UKKwkJ ICogYSBzeW50YXggZXJyb3IuICBUaGVyZWZvcmUsIHdlIHVzZSBhbiBpbmRpcmVjdGlvbiBlbGVt ZW50IGFuZCBzZXQKKwkJICogcHJlc2VudD1mYWxzZSB3aGVuIHRoZXJlIGFyZSBubyBlbGVtZW50 cy4KKwkJICovCisJCWlmIChub2RlLT5vZlR5cGVuYW1lKQorCQl7CisJCQl0bXBfb2JqID0gbmV3 X29ianRyZWVfZm9yX3R5cGUocmVsYXRpb24tPnJkX3JlbC0+cmVsb2Z0eXBlLCAtMSk7CisJCQlh cHBlbmRfb2JqZWN0X29iamVjdChyZXQsICJPRiAle29mX3R5cGV9VCIsIHRtcF9vYmopOworCQl9 CisJCWVsc2UKKwkJeworCQkJTGlzdAkgICAqcGFyZW50czsKKwkJCU9iakVsZW0gICAgKmVsZW07 CisKKwkJCXBhcmVudHMgPSBkZXBhcnNlX0luaFJlbGF0aW9ucyhvYmplY3RJZCk7CisJCQllbGVt ID0gKE9iakVsZW0gKikgbGluaXRpYWwocGFyZW50cyk7CisKKwkJCUFzc2VydChsaXN0X2xlbmd0 aChwYXJlbnRzKSA9PSAxKTsKKworCQkJYXBwZW5kX2Zvcm1hdF9zdHJpbmcocmV0LCAiUEFSVElU SU9OIE9GIik7CisKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7cGFyZW50X2lkZW50 aXR5fUQiLAorCQkJCQkJCQkgZWxlbS0+dmFsdWUub2JqZWN0KTsKKwkJfQorCisJCXRhYmxlZWx0 cyA9IGRlcGFyc2VfVGFibGVFbGVtZW50cyhyZWxhdGlvbiwgbm9kZS0+dGFibGVFbHRzLCBkcGNv bnRleHQsCisJCQkJCQkJCQkJICB0cnVlLCAvKiB0eXBlZCB0YWJsZSAqLworCQkJCQkJCQkJCSAg ZmFsc2UpOwkvKiBub3QgY29tcG9zaXRlICovCisJCXRhYmxlZWx0cyA9IG9idGFpbkNvbnN0cmFp bnRzKHRhYmxlZWx0cywgb2JqZWN0SWQsIEludmFsaWRPaWQpOworCisJCXRtcF9vYmogPSBuZXdf b2JqdHJlZSgiIik7CisJCWlmICh0YWJsZWVsdHMpCisJCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRt cF9vYmosICIoJXtlbGVtZW50czosIH1zKSIsIHRhYmxlZWx0cyk7CisJCWVsc2UKKwkJCWFwcGVu ZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIl e3RhYmxlX2VsZW1lbnRzfXMiLCB0bXBfb2JqKTsKKwl9CisJZWxzZQorCXsKKwkJTGlzdAkgICAq dGFibGVlbHRzID0gTklMOworCisJCS8qCisJCSAqIFRoZXJlIGlzIG5vIG5lZWQgdG8gcHJvY2Vz cyBMSUtFIGNsYXVzZXMgc2VwYXJhdGVseTsgdGhleSBoYXZlCisJCSAqIGFscmVhZHkgYmVlbiB0 cmFuc2Zvcm1lZCBpbnRvIGNvbHVtbnMgYW5kIGNvbnN0cmFpbnRzLgorCQkgKi8KKworCQkvKgor CQkgKiBQcm9jZXNzIHRhYmxlIGVsZW1lbnRzOiBjb2x1bW4gZGVmaW5pdGlvbnMgYW5kIGNvbnN0 cmFpbnRzLiAgT25seQorCQkgKiB0aGUgY29sdW1uIGRlZmluaXRpb25zIGFyZSBvYnRhaW5lZCBm cm9tIHRoZSBwYXJzZSBub2RlIGl0c2VsZi4gIFRvCisJCSAqIGdldCBjb25zdHJhaW50cyB3ZSBy ZWx5IG9uIHBnX2NvbnN0cmFpbnQsIGJlY2F1c2UgdGhlIHBhcnNlIG5vZGUKKwkJICogbWlnaHQg YmUgbWlzc2luZyBzb21lIHRoaW5ncyBzdWNoIGFzIHRoZSBuYW1lIG9mIHRoZSBjb25zdHJhaW50 cy4KKwkJICovCisJCXRhYmxlZWx0cyA9IGRlcGFyc2VfVGFibGVFbGVtZW50cyhyZWxhdGlvbiwg bm9kZS0+dGFibGVFbHRzLCBkcGNvbnRleHQsCisJCQkJCQkJCQkJICBmYWxzZSwJLyogbm90IHR5 cGVkIHRhYmxlICovCisJCQkJCQkJCQkJICBmYWxzZSk7CS8qIG5vdCBjb21wb3NpdGUgKi8KKwkJ dGFibGVlbHRzID0gb2J0YWluQ29uc3RyYWludHModGFibGVlbHRzLCBvYmplY3RJZCwgSW52YWxp ZE9pZCk7CisKKwkJaWYgKHRhYmxlZWx0cykKKwkJCWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAi KCV7dGFibGVfZWxlbWVudHM6LCB9cykiLCB0YWJsZWVsdHMpOworCQllbHNlCisJCQlhcHBlbmRf Zm9ybWF0X3N0cmluZyhyZXQsICIoKSIpOworCisJCS8qCisJCSAqIEFkZCBpbmhlcml0YW5jZSBz cGVjaWZpY2F0aW9uLiAgV2UgY2Fubm90IHNpbXBseSBzY2FuIHRoZSBsaXN0IG9mCisJCSAqIHBh cmVudHMgZnJvbSB0aGUgcGFyc2VyIG5vZGUsIGJlY2F1c2UgdGhhdCBtYXkgbGFjayB0aGUgYWN0 dWFsCisJCSAqIHF1YWxpZmllZCBuYW1lcyBvZiB0aGUgcGFyZW50IHJlbGF0aW9ucy4gIFJhdGhl ciB0aGFuIHRyeWluZyB0bworCQkgKiByZS1yZXNvbHZlIHRoZW0gZnJvbSB0aGUgaW5mb3JtYXRp b24gaW4gdGhlIHBhcnNlIG5vZGUsIGl0IHNlZW1zCisJCSAqIG1vcmUgYWNjdXJhdGUgYW5kIGNv bnZlbmllbnQgdG8gZ3JhYiBpdCBmcm9tIHBnX2luaGVyaXRzLgorCQkgKi8KKwkJdG1wX29iaiA9 IG5ld19vYmp0cmVlKCJJTkhFUklUUyIpOworCQlpZiAobm9kZS0+aW5oUmVsYXRpb25zICE9IE5J TCkKKwkJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wX29iaiwgIigle3BhcmVudHM6LCB9RCkiLCBk ZXBhcnNlX0luaFJlbGF0aW9ucyhvYmplY3RJZCkpOworCQllbHNlCisJCXsKKwkJCWFwcGVuZF9u dWxsX29iamVjdCh0bXBfb2JqLCAiKCV7cGFyZW50czosIH1EKSIpOworCQkJYXBwZW5kX25vdF9w cmVzZW50KHRtcF9vYmopOworCQl9CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7aW5o ZXJpdHN9cyIsIHRtcF9vYmopOworCX0KKworCXRtcF9vYmogPSBuZXdfb2JqdHJlZSgiVEFCTEVT UEFDRSIpOworCWlmIChub2RlLT50YWJsZXNwYWNlbmFtZSkKKwkJYXBwZW5kX3N0cmluZ19vYmpl Y3QodG1wX29iaiwgIiV7dGFibGVzcGFjZX1JIiwgInRhYmxlc3BhY2UiLAorCQkJCQkJCSBub2Rl LT50YWJsZXNwYWNlbmFtZSk7CisJZWxzZQorCXsKKwkJYXBwZW5kX251bGxfb2JqZWN0KHRtcF9v YmosICIle3RhYmxlc3BhY2V9SSIpOworCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7CisJ fQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7dGFibGVzcGFjZX1zIiwgdG1wX29iaik7 CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtvbl9jb21taXR9cyIsCisJCQkJCQkgZGVw YXJzZV9PbkNvbW1pdENsYXVzZShub2RlLT5vbmNvbW1pdCkpOworCisJLyogRk9SIFZBTFVFUyBj bGF1c2UgKi8KKwlpZiAobm9kZS0+cGFydGJvdW5kKQorCXsKKwkJLyoKKwkJICogR2V0IHBnX2Ns YXNzLnJlbHBhcnRib3VuZC4gV2UgY2Fubm90IHVzZSBwYXJ0Ym91bmQgaW4gdGhlIHBhcnNldHJl ZQorCQkgKiBkaXJlY3RseSBhcyBpdCdzIHRoZSBvcmlnaW5hbCBwYXJ0Ym91bmQgZXhwcmVzc2lv biB3aGljaCBoYXZlbid0CisJCSAqIGJlZW4gdHJhbnNmb3JtZWQuCisJCSAqLworCQlhcHBlbmRf c3RyaW5nX29iamVjdChyZXQsICIle3BhcnRpdGlvbl9ib3VuZH1zIiwgInBhcnRpdGlvbl9ib3Vu ZCIsCisJCQkJCQkJIFJlbGF0aW9uR2V0UGFydGl0aW9uQm91bmQob2JqZWN0SWQpKTsKKwl9CisK KwkvKiBQQVJUSVRJT04gQlkgY2xhdXNlICovCisJdG1wX29iaiA9IG5ld19vYmp0cmVlKCJQQVJU SVRJT04gQlkiKTsKKwlpZiAocmVsYXRpb24tPnJkX3JlbC0+cmVsa2luZCA9PSBSRUxLSU5EX1BB UlRJVElPTkVEX1RBQkxFKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBfb2JqLCAiJXtkZWZp bml0aW9ufXMiLCAiZGVmaW5pdGlvbiIsCisJCQkJCQkJIHBnX2dldF9wYXJ0a2V5ZGVmX3NpbXBs ZShvYmplY3RJZCkpOworCWVsc2UKKwl7CisJCWFwcGVuZF9udWxsX29iamVjdCh0bXBfb2JqLCAi JXtkZWZpbml0aW9ufXMiKTsKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOworCX0KKwlh cHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle3BhcnRpdGlvbl9ieX1zIiwgdG1wX29iaik7CisK KwkvKiBVU0lORyBjbGF1c2UgKi8KKwl0bXBfb2JqID0gbmV3X29ianRyZWUoIlVTSU5HIik7CisJ aWYgKG5vZGUtPmFjY2Vzc01ldGhvZCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wX29iaiwg IiV7YWNjZXNzX21ldGhvZH1JIiwgImFjY2Vzc19tZXRob2QiLAorCQkJCQkJCSBub2RlLT5hY2Nl c3NNZXRob2QpOworCWVsc2UKKwl7CisJCWFwcGVuZF9udWxsX29iamVjdCh0bXBfb2JqLCAiJXth Y2Nlc3NfbWV0aG9kfUkiKTsKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOworCX0KKwlh cHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2FjY2Vzc19tZXRob2R9cyIsIHRtcF9vYmopOwor CisJLyogV0lUSCBjbGF1c2UgKi8KKwl0bXBfb2JqID0gbmV3X29ianRyZWUoIldJVEgiKTsKKwor CWZvcmVhY2goY2VsbCwgbm9kZS0+b3B0aW9ucykKKwl7CisJCU9ialRyZWUgICAgKnRtcF9vYmoy OworCQlEZWZFbGVtICAgICpvcHQgPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisKKwkJdG1w X29iajIgPSBkZXBhcnNlX0RlZkVsZW0ob3B0LCBmYWxzZSk7CisJCWxpc3QgPSBsYXBwZW5kKGxp c3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmoyKSk7CisJfQorCisJaWYgKGxpc3QpCisJCWFw cGVuZF9hcnJheV9vYmplY3QodG1wX29iaiwgIigle3dpdGg6LCB9cykiLCBsaXN0KTsKKwllbHNl CisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHJldCwgIiV7d2l0aF9jbGF1c2V9cyIsIHRtcF9vYmopOworCisJcmVsYXRpb25fY2xvc2UocmVs YXRpb24sIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVw YXJzZSBDUkVBVEUgVEFCTEUgQVMgY29tbWFuZC4KKyAqCisgKiBkZXBhcnNlX0NyZWF0ZVN0bXQg ZG8gdGhlIGFjdHVhbCB3b3JrIGFzIHdlIGRlcGFyc2UgdGhlIGZpbmFsIENyZWF0ZVN0bXQgZm9y CisgKiBDUkVBVEUgVEFCTEUgQVMgY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVw YXJzZV9DcmVhdGVUYWJsZUFzU3RtdChDb2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJT2lkCQkJ b2JqZWN0SWQ7CisJTm9kZQkgICAqcGFyc2V0cmVlOworCisJQXNzZXJ0KGNtZC0+dHlwZSA9PSBT Q1RfQ3JlYXRlVGFibGVBcyk7CisKKwlwYXJzZXRyZWUgPSBjbWQtPmQuY3Rhcy5yZWFsX2NyZWF0 ZTsKKwlvYmplY3RJZCA9IGNtZC0+ZC5jdGFzLmFkZHJlc3Mub2JqZWN0SWQ7CisKKwlyZXR1cm4g ZGVwYXJzZV9DcmVhdGVTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworfQorCisvKgorICogRGVw YXJzZSBhbGwgdGhlIGNvbGxlY3RlZCBzdWJjb21tYW5kcyBhbmQgcmV0dXJuIGFuIE9ialRyZWUg cmVwcmVzZW50aW5nIHRoZQorICogYWx0ZXIgY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRh eAorICogQUxURVIgcmVsdHlwZSAle2lkZW50aXR5fUQgJXtzdWJjbWRzOiwgfXMKKyAqLworc3Rh dGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlclJlbGF0aW9uKENvbGxlY3RlZENvbW1hbmQgKmNt ZCkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqdG1wX29iajsKKwlPYmpUcmVl ICAgICp0bXBfb2JqMjsKKwlMaXN0CSAgICpkcGNvbnRleHQ7CisJUmVsYXRpb24JcmVsOworCUxp c3QJICAgKnN1YmNtZHMgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKwljb25zdCBjaGFyICpy ZWx0eXBlOworCWJvb2wJCWlzdHlwZSA9IGZhbHNlOworCWJvb2wJCWlzdGFibGUgPSBmYWxzZTsK KwlMaXN0CSAgICpleHBycyA9IE5JTDsKKwlPaWQJCQlyZWxJZCA9IGNtZC0+ZC5hbHRlclRhYmxl Lm9iamVjdElkOworCUFsdGVyVGFibGVTdG10ICpzdG10ID0gTlVMTDsKKworCUFzc2VydChjbWQt PnR5cGUgPT0gU0NUX0FsdGVyVGFibGUpOworCXN0bXQgPSAoQWx0ZXJUYWJsZVN0bXQgKikgY21k LT5wYXJzZXRyZWU7CisJQXNzZXJ0KElzQShzdG10LCBBbHRlclRhYmxlU3RtdCkpOworCisJLyoK KwkgKiBBTFRFUiBUQUJMRSBzdWJjb21tYW5kcyBnZW5lcmF0ZWQgZm9yIFRhYmxlTGlrZUNsYXVz ZSBpcyBwcm9jZXNzZWQgaW4KKwkgKiB0aGUgdG9wIGxldmVsIENSRUFURSBUQUJMRSBjb21tYW5k OyByZXR1cm4gZW1wdHkgaGVyZS4KKwkgKi8KKwlpZiAoc3RtdC0+dGFibGVfbGlrZSkKKwkJcmV0 dXJuIE5VTEw7CisKKwlyZWwgPSByZWxhdGlvbl9vcGVuKHJlbElkLCBBY2Nlc3NTaGFyZUxvY2sp OworCWRwY29udGV4dCA9IGRlcGFyc2VfY29udGV4dF9mb3IoUmVsYXRpb25HZXRSZWxhdGlvbk5h bWUocmVsKSwKKwkJCQkJCQkJCXJlbElkKTsKKworCXN3aXRjaCAocmVsLT5yZF9yZWwtPnJlbGtp bmQpCisJeworCQljYXNlIFJFTEtJTkRfUkVMQVRJT046CisJCWNhc2UgUkVMS0lORF9QQVJUSVRJ T05FRF9UQUJMRToKKwkJCXJlbHR5cGUgPSAiVEFCTEUiOworCQkJaXN0YWJsZSA9IHRydWU7CisJ CQlicmVhazsKKwkJY2FzZSBSRUxLSU5EX0lOREVYOgorCQljYXNlIFJFTEtJTkRfUEFSVElUSU9O RURfSU5ERVg6CisJCQlyZWx0eXBlID0gIklOREVYIjsKKwkJCWJyZWFrOworCQljYXNlIFJFTEtJ TkRfVklFVzoKKwkJCXJlbHR5cGUgPSAiVklFVyI7CisJCQlicmVhazsKKwkJY2FzZSBSRUxLSU5E X0NPTVBPU0lURV9UWVBFOgorCQkJcmVsdHlwZSA9ICJUWVBFIjsKKwkJCWlzdHlwZSA9IHRydWU7 CisJCQlicmVhazsKKwkJY2FzZSBSRUxLSU5EX0ZPUkVJR05fVEFCTEU6CisJCQlyZWx0eXBlID0g IkZPUkVJR04gVEFCTEUiOworCQkJYnJlYWs7CisJCWNhc2UgUkVMS0lORF9NQVRWSUVXOgorCQkJ cmVsdHlwZSA9ICJNQVRFUklBTElaRUQgVklFVyI7CisJCQlicmVhazsKKworCQkJLyogVE9ETyBz dXBwb3J0IGZvciBwYXJ0aXRpb25lZCB0YWJsZSAqLworCisJCWRlZmF1bHQ6CisJCQllbG9nKEVS Uk9SLCAidW5leHBlY3RlZCByZWxraW5kICVkIiwgcmVsLT5yZF9yZWwtPnJlbGtpbmQpOworCX0K KworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiAle29ianR5cGV9cyAle2lkZW50aXR5fUQi LCAyLAorCQkJCQkJICJvYmp0eXBlIiwgT2JqVHlwZVN0cmluZywgcmVsdHlwZSwKKwkJCQkJCSAi aWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZShyZWwtPnJkX3JlbC0+cmVsbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBSZWxhdGlvbkdldFJl bGF0aW9uTmFtZShyZWwpKSk7CisKKwlmb3JlYWNoKGNlbGwsIGNtZC0+ZC5hbHRlclRhYmxlLnN1 YmNtZHMpCisJeworCQlDb2xsZWN0ZWRBVFN1YmNtZCAqc3ViID0gKENvbGxlY3RlZEFUU3ViY21k ICopIGxmaXJzdChjZWxsKTsKKwkJQWx0ZXJUYWJsZUNtZCAqc3ViY21kID0gKEFsdGVyVGFibGVD bWQgKikgc3ViLT5wYXJzZXRyZWU7CisJCU9ialRyZWUgICAgKnRyZWU7CisKKwkJQXNzZXJ0KElz QShzdWJjbWQsIEFsdGVyVGFibGVDbWQpKTsKKworCSAgIC8qCisJCSogU2tpcCBkZXBhcnNlIG9m IHRoZSBzdWJjb21tYW5kIGlmIHRoZSBvYmplY3RJZCBkb2Vzbid0IG1hdGNoIHRoZQorCQkqIHRh cmdldCByZWxhdGlvbiBJRC4gSXQgY2FuIGhhcHBlbiBmb3IgaW5oZXJpdGVkIHRhYmxlcyB3aGVu CisJCSogc3ViY29tbWFuZHMgZm9yIGluaGVyaXRlZCB0YWJsZXMgYW5kIHRoZSBwYXJlbnQgdGFi bGUgYXJlIGJvdGgKKwkJKiBjb2xsZWN0ZWQgaW4gdGhlIEFMVEVSIFRBTEJFIGNvbW1hbmQgZm9y IHRoZSBwYXJlbnQgdGFibGUuIFdpdGggdGhlCisJCSogZXhjZXB0aW9uIG9mIHRoZSBpbnRlcm5h bGx5IGdlbmVyYXRlZCBBZGRDb25zdHJhaW50IChmb3IKKwkJKiBBTFRFUiBUQUJMRSBBREQgQ09O U1RSQUlOVCBGT1JFSUdOIEtFWSBSRUZFUkVOQ0VTKSB3aGVyZSB0aGUKKwkJKiBvYmplY3RJZHMg Y291bGQgbWlzbWF0Y2ggKGZvcmVpbiB0YWJsZSBpZCBhbmQgdGhlIHJlZmVyZW5jZWQgdGFibGUK KwkJKiBpZCkuCisJCSovCisJCWlmICgoc3ViLT5hZGRyZXNzLm9iamVjdElkICE9IHJlbElkICYm CisJCQkgc3ViLT5hZGRyZXNzLm9iamVjdElkICE9IEludmFsaWRPaWQpICYmCisJCQkhKHN1YmNt ZC0+c3VidHlwZSA9PSBBVF9BZGRDb25zdHJhaW50ICYmCisJCQkgIHN1YmNtZC0+cmVjdXJzZSkg JiYKKwkJCWlzdGFibGUpCisJCQljb250aW51ZTsKKworCQlzd2l0Y2ggKHN1YmNtZC0+c3VidHlw ZSkKKwkJeworCQkJY2FzZSBBVF9BZGRDb2x1bW46CisJCQkJLyogWFhYIG5lZWQgdG8gc2V0IHRo ZSAicmVjdXJzZSIgYml0IHNvbWV3aGVyZT8gKi8KKwkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVm LCBDb2x1bW5EZWYpKTsKKwkJCQl0cmVlID0gZGVwYXJzZV9Db2x1bW5EZWYocmVsLCBkcGNvbnRl eHQsIGZhbHNlLAorCQkJCQkJCQkJCSAoQ29sdW1uRGVmICopIHN1YmNtZC0+ZGVmLCB0cnVlLCAm ZXhwcnMpOworCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiQUREICV7b2JqdHlwZX1zICV7 aWZfbm90X2V4aXN0c31zICV7ZGVmaW5pdGlvbn1zIiwgNCwKKwkJCQkJCQkJCQkib2JqdHlwZSIs IE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJaXN0eXBlID8gIkFUVFJJQlVURSIgOiAiQ09MVU1O IiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJhZGQgY29sdW1uIiwKKwkJCQkJ CQkJCQkiaWZfbm90X2V4aXN0cyIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJc3ViY21kLT5t aXNzaW5nX29rID8gIklGIE5PVCBFWElTVFMiIDogIiIsCisJCQkJCQkJCQkJImRlZmluaXRpb24i LCBPYmpUeXBlT2JqZWN0LCB0cmVlKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBu ZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWRk SW5kZXhDb25zdHJhaW50OgorCQkJCXsKKwkJCQkJSW5kZXhTdG10ICAqaXN0bXQ7CisJCQkJCVJl bGF0aW9uCWlkeDsKKwkJCQkJT2lkCQkJY29uc3RyT2lkID0gc3ViLT5hZGRyZXNzLm9iamVjdElk OworCisJCQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYsIEluZGV4U3RtdCkpOworCQkJCQlpc3Rt dCA9IChJbmRleFN0bXQgKikgc3ViY21kLT5kZWY7CisKKwkJCQkJQXNzZXJ0KGlzdG10LT5pc2Nv bnN0cmFpbnQgJiYgaXN0bXQtPnVuaXF1ZSk7CisKKwkJCQkJaWR4ID0gcmVsYXRpb25fb3Blbihp c3RtdC0+aW5kZXhPaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkJCQkJLyoKKwkJCQkJICogVmVy Ym9zZSBzeW50YXgKKwkJCQkJICoKKwkJCQkJICogQUREIENPTlNUUkFJTlQgJXtuYW1lfUkgJXtj b25zdHJhaW50X3R5cGV9cyBVU0lORyBJTkRFWAorCQkJCQkgKiAlaW5kZXhfbmFtZX1JICV7ZGVm ZXJyYWJsZX1zICV7aW5pdF9kZWZlcnJlZH1zCisJCQkJCSAqLworCQkJCQl0bXBfb2JqID0gbmV3 X29ianRyZWVfVkEoIkFERCBDT05TVFJBSU5UICV7bmFtZX1JICV7Y29uc3RyYWludF90eXBlfXMg VVNJTkcgSU5ERVggJXtpbmRleF9uYW1lfUkgJXtkZWZlcnJhYmxlfXMgJXtpbml0X2RlZmVycmVk fXMiLCA2LAorCQkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJhZGQgY29uc3RyYWlu dCB1c2luZyBpbmRleCIsCisJCQkJCQkJCQkJCSJuYW1lIiwgT2JqVHlwZVN0cmluZywgZ2V0X2Nv bnN0cmFpbnRfbmFtZShjb25zdHJPaWQpLAorCQkJCQkJCQkJCQkiY29uc3RyYWludF90eXBlIiwg T2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkJaXN0bXQtPnByaW1hcnkgPyAiUFJJTUFSWSBLRVki IDogIlVOSVFVRSIsCisJCQkJCQkJCQkJCSJpbmRleF9uYW1lIiwgT2JqVHlwZVN0cmluZywKKwkJ CQkJCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoaWR4KSwKKwkJCQkJCQkJCQkJImRlZmVy cmFibGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCQlpc3RtdC0+ZGVmZXJyYWJsZSA/ICJE RUZFUlJBQkxFIiA6ICJOT1QgREVGRVJSQUJMRSIsCisJCQkJCQkJCQkJCSJpbml0X2RlZmVycmVk IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkJaXN0bXQtPmluaXRkZWZlcnJlZCA/ICJJTklU SUFMTFkgREVGRVJSRUQiIDogIklOSVRJQUxMWSBJTU1FRElBVEUiKTsKKworCQkJCQlzdWJjbWRz ID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisKKwkJCQkJ cmVsYXRpb25fY2xvc2UoaWR4LCBBY2Nlc3NTaGFyZUxvY2spOworCQkJCX0KKwkJCQlicmVhazsK KworCQkJY2FzZSBBVF9SZUFkZEluZGV4OgorCQkJY2FzZSBBVF9SZUFkZENvbnN0cmFpbnQ6CisJ CQljYXNlIEFUX1JlQWRkQ29tbWVudDoKKwkJCWNhc2UgQVRfUmVwbGFjZVJlbE9wdGlvbnM6CisJ CQljYXNlIEFUX0NoZWNrTm90TnVsbDoKKwkJCWNhc2UgQVRfUmVBZGRTdGF0aXN0aWNzOgorCQkJ CS8qIFN1YnR5cGVzIHVzZWQgZm9yIGludGVybmFsIG9wZXJhdGlvbnM7IG5vdGhpbmcgdG8gZG8g aGVyZSAqLworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Nvb2tlZENvbHVtbkRlZmF1bHQ6CisJ CQkJeworCQkJCQlSZWxhdGlvbglhdHRycmVsOworCQkJCQlIZWFwVHVwbGUJYXR0dHVwOworCQkJ CQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHRTdHJ1Y3Q7CisKKwkJCQkJYXR0cnJlbCA9IHRhYmxlX29w ZW4oQXR0cmlidXRlUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisJCQkJCWF0dHR1cCA9 IFNlYXJjaFN5c0NhY2hlQ29weTIoQVRUTlVNLAorCQkJCQkJCQkJCQkJIE9iamVjdElkR2V0RGF0 dW0oUmVsYXRpb25HZXRSZWxpZChyZWwpKSwKKwkJCQkJCQkJCQkJCSBJbnQxNkdldERhdHVtKHN1 YmNtZC0+bnVtKSk7CisJCQkJCWlmICghSGVhcFR1cGxlSXNWYWxpZChhdHR0dXApKQorCQkJCQkJ ZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGF0dHJpYnV0ZSAlZCBvZiByZWxh dGlvbiB3aXRoIE9JRCAldSIsCisJCQkJCQkJIHN1YmNtZC0+bnVtLCBSZWxhdGlvbkdldFJlbGlk KHJlbCkpOworCQkJCQlhdHRTdHJ1Y3QgPSAoRm9ybV9wZ19hdHRyaWJ1dGUpIEdFVFNUUlVDVChh dHR0dXApOworCisJCQkJCS8qCisJCQkJCSAqIEJvdGggZGVmYXVsdCBhbmQgZ2VuZXJhdGlvbiBl eHByZXNzaW9uIG5vdCBzdXBwb3J0ZWQKKwkJCQkJICogdG9nZXRoZXIuCisJCQkJCSAqLworCQkJ CQlpZiAoIWF0dFN0cnVjdC0+YXR0Z2VuZXJhdGVkKQorCQkJCQkJZWxvZyhXQVJOSU5HLCAidW5z dXBwb3J0ZWQgYWx0ZXIgdGFibGUgc3VidHlwZSAlZCIsCisJCQkJCQkJIHN1YmNtZC0+c3VidHlw ZSk7CisKKwkJCQkJaGVhcF9mcmVldHVwbGUoYXR0dHVwKTsKKwkJCQkJdGFibGVfY2xvc2UoYXR0 cnJlbCwgUm93RXhjbHVzaXZlTG9jayk7CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJY2FzZSBB VF9BZGRDb2x1bW5Ub1ZpZXc6CisJCQkJLyogQ1JFQVRFIE9SIFJFUExBQ0UgVklFVyAtLSBub3Ro aW5nIHRvIGRvIGhlcmUgKi8KKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Db2x1bW5EZWZhdWx0 OgorCQkJCWlmIChzdWJjbWQtPmRlZiA9PSBOVUxMKQorCQkJCQl0bXBfb2JqID0gbmV3X29ianRy ZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIERST1AgREVGQVVMVCIsIDIsCisJCQkJCQkJ CQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3AgZGVmYXVsdCIsCisJCQkJCQkJCQkJCSJj b2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCWVsc2UKKwkJCQl7CisJ CQkJCUxpc3QJICAgKmRwY29udGV4dF9yZWw7CisJCQkJCUhlYXBUdXBsZQlhdHRydHVwOworCQkJ CQlBdHRyTnVtYmVyCWF0dG5vOworCisJCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxU RVIgQ09MVU1OICV7Y29sdW1ufUkgU0VUIERFRkFVTFQiLCAyLAorCQkJCQkJCQkJCQkidHlwZSIs IE9ialR5cGVTdHJpbmcsICJzZXQgZGVmYXVsdCIsCisJCQkJCQkJCQkJCSJjb2x1bW4iLCBPYmpU eXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCisJCQkJCWRwY29udGV4dF9yZWwgPSBkZXBhcnNl X2NvbnRleHRfZm9yKFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCksCisJCQkJCQkJCQkJCQkJ CVJlbGF0aW9uR2V0UmVsaWQocmVsKSk7CisJCQkJCWF0dHJ0dXAgPSBTZWFyY2hTeXNDYWNoZUF0 dE5hbWUoUmVsYXRpb25HZXRSZWxpZChyZWwpLCBzdWJjbWQtPm5hbWUpOworCQkJCQlhdHRubyA9 ICgoRm9ybV9wZ19hdHRyaWJ1dGUpIEdFVFNUUlVDVChhdHRydHVwKSktPmF0dG51bTsKKwkJCQkJ YXBwZW5kX3N0cmluZ19vYmplY3QodG1wX29iaiwgIiV7ZGVmaW5pdGlvbn1zIiwgImRlZmluaXRp b24iLAorCQkJCQkJCQkJCSBSZWxhdGlvbkdldENvbHVtbkRlZmF1bHQocmVsLCBhdHRubywKKwkJ CQkJCQkJCQkJCQkJCQkgIGRwY29udGV4dF9yZWwsCisJCQkJCQkJCQkJCQkJCQkJICBOVUxMKSk7 CisJCQkJCVJlbGVhc2VTeXNDYWNoZShhdHRydHVwKTsKKwkJCQl9CisKKwkJCQlzdWJjbWRzID0g bGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7 CisKKwkJCWNhc2UgQVRfRHJvcE5vdE51bGw6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZB KCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBEUk9QIE5PVCBOVUxMIiwgMiwKKwkJCQkJCQkJCQki dHlwZSIsIE9ialR5cGVTdHJpbmcsICJkcm9wIG5vdCBudWxsIiwKKwkJCQkJCQkJCQkiY29sdW1u IiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChz dWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNh c2UgQVRfRm9yY2VSb3dTZWN1cml0eToKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWUoIkZPUkNF IFJPVyBMRVZFTCBTRUNVUklUWSIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5l d19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Ob0Zv cmNlUm93U2VjdXJpdHk6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlKCJOTyBGT1JDRSBST1cg TEVWRUwgU0VDVVJJVFkiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2Jq ZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfU2V0Tm90TnVs bDoKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1J IFNFVCBOT1QgTlVMTCIsIDIsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0 IG5vdCBudWxsIiwKKwkJCQkJCQkJCQkiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5u YW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0 bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRHJvcEV4cHJlc3Npb246CisJCQkJ dG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBEUk9QIEVY UFJFU1NJT04gJXtpZl9leGlzdHN9cyIsIDMsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3Ry aW5nLCAiZHJvcCBleHByZXNzaW9uIiwKKwkJCQkJCQkJCQkiY29sdW1uIiwgT2JqVHlwZVN0cmlu Zywgc3ViY21kLT5uYW1lLAorCQkJCQkJCQkJCSJpZl9leGlzdHMiLCBPYmpUeXBlU3RyaW5nLAor CQkJCQkJCQkJCXN1YmNtZC0+bWlzc2luZ19vayA/ICJJRiBFWElTVFMiIDogIiIpOworCQkJCXN1 YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJ CQlicmVhazsKKworCQkJY2FzZSBBVF9TZXRTdGF0aXN0aWNzOgorCQkJCXsKKwkJCQkJQXNzZXJ0 KElzQShzdWJjbWQtPmRlZiwgSW50ZWdlcikpOworCQkJCQlpZiAoc3ViY21kLT5uYW1lKQorCQkJ CQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBTRVQg U1RBVElTVElDUyAle3N0YXRpc3RpY3N9biIsIDMsCisJCQkJCQkJCQkJCQkidHlwZSIsIE9ialR5 cGVTdHJpbmcsICJzZXQgc3RhdGlzdGljcyIsCisJCQkJCQkJCQkJCQkiY29sdW1uIiwgT2JqVHlw ZVN0cmluZywgc3ViY21kLT5uYW1lLAorCQkJCQkJCQkJCQkJInN0YXRpc3RpY3MiLCBPYmpUeXBl SW50ZWdlciwKKwkJCQkJCQkJCQkJCWludFZhbCgoSW50ZWdlciAqKSBzdWJjbWQtPmRlZikpOwor CQkJCQllbHNlCisJCQkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAl e2NvbHVtbn1uIFNFVCBTVEFUSVNUSUNTICV7c3RhdGlzdGljc31uIiwgMywKKwkJCQkJCQkJCQkJ CSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBzdGF0aXN0aWNzIiwKKwkJCQkJCQkJCQkJCSJj b2x1bW4iLCBPYmpUeXBlSW50ZWdlciwgc3ViY21kLT5udW0sCisJCQkJCQkJCQkJCQkic3RhdGlz dGljcyIsIE9ialR5cGVJbnRlZ2VyLAorCQkJCQkJCQkJCQkJaW50VmFsKChJbnRlZ2VyICopIHN1 YmNtZC0+ZGVmKSk7CisJCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rf b2JqZWN0KHRtcF9vYmopKTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfU2V0T3B0 aW9uczoKKwkJCWNhc2UgQVRfUmVzZXRPcHRpb25zOgorCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1 YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KAorCQkJCQkJCQkJCQkJCQkJIGRlcGFyc2VfQ29sdW1u U2V0T3B0aW9ucyhzdWJjbWQpKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfU2V0U3RvcmFn ZToKKwkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBTdHJpbmcpKTsKKwkJCQl0bXBfb2JqID0g bmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFNFVCBTVE9SQUdFICV7c3Rv cmFnZX1zIiwgMywKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgc3RvcmFn ZSIsCisJCQkJCQkJCQkJImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSwKKwkJ CQkJCQkJCQkic3RvcmFnZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJc3RyVmFsKChTdHJp bmcgKikgc3ViY21kLT5kZWYpKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdf b2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfU2V0Q29t cHJlc3Npb246CisJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgU3RyaW5nKSk7CisJCQkJdG1w X29iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBTRVQgQ09NUFJF U1NJT04gJXtjb21wcmVzc2lvbl9tZXRob2R9cyIsIDMsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpU eXBlU3RyaW5nLCAic2V0IGNvbXByZXNzaW9uIiwKKwkJCQkJCQkJCQkiY29sdW1uIiwgT2JqVHlw ZVN0cmluZywgc3ViY21kLT5uYW1lLAorCQkJCQkJCQkJCSJjb21wcmVzc2lvbl9tZXRob2QiLCBP YmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCXN0clZhbCgoU3RyaW5nICopIHN1YmNtZC0+ZGVmKSk7 CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29i aikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BDb2x1bW46CisJCQkJdG1wX29iaiA9 IG5ld19vYmp0cmVlX1ZBKCJEUk9QICV7b2JqdHlwZX1zICV7aWZfbm90X2V4aXN0c31zICV7Y29s dW1ufUkiLCA0LAorCQkJCQkJCQkJCSJvYmp0eXBlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJ CQlpc3R5cGUgPyAiQVRUUklCVVRFIiA6ICJDT0xVTU4iLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2Jq VHlwZVN0cmluZywgImRyb3AgY29sdW1uIiwKKwkJCQkJCQkJCQkiaWZfbm90X2V4aXN0cyIsIE9i alR5cGVTdHJpbmcsCisJCQkJCQkJCQkJc3ViY21kLT5taXNzaW5nX29rID8gIklGIE5PVCBFWElT VFMiIDogIiIsCisJCQkJCQkJCQkJImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFt ZSk7CisJCQkJdG1wX29iajIgPSBuZXdfb2JqdHJlZV9WQSgiQ0FTQ0FERSIsIDEsCisJCQkJCQkJ CQkJICJwcmVzZW50IiwgT2JqVHlwZUJvb2wsIHN1YmNtZC0+YmVoYXZpb3IpOworCQkJCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmosICIle2Nhc2NhZGV9cyIsIHRtcF9vYmoyKTsKKworCQkJ CXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsK KwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9BZGRJbmRleDoKKwkJCQl7CisJCQkJCU9pZAkJCWlk eE9pZCA9IHN1Yi0+YWRkcmVzcy5vYmplY3RJZDsKKwkJCQkJSW5kZXhTdG10ICAqaXN0bXQ7CisJ CQkJCVJlbGF0aW9uCWlkeDsKKwkJCQkJY29uc3QgY2hhciAqaWR4bmFtZTsKKwkJCQkJT2lkCQkJ Y29uc3RyT2lkOworCisJCQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYsIEluZGV4U3RtdCkpOwor CQkJCQlpc3RtdCA9IChJbmRleFN0bXQgKikgc3ViY21kLT5kZWY7CisKKwkJCQkJaWYgKCFpc3Rt dC0+aXNjb25zdHJhaW50KQorCQkJCQkJYnJlYWs7CisKKwkJCQkJaWR4ID0gcmVsYXRpb25fb3Bl bihpZHhPaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQkJCWlkeG5hbWUgPSBSZWxhdGlvbkdldFJl bGF0aW9uTmFtZShpZHgpOworCisJCQkJCWNvbnN0ck9pZCA9IGdldF9yZWxhdGlvbl9jb25zdHJh aW50X29pZCgKKwkJCQkJCQkJCQkJCQkJCWNtZC0+ZC5hbHRlclRhYmxlLm9iamVjdElkLCBpZHhu YW1lLCBmYWxzZSk7CisKKwkJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJBREQgQ09OU1RS QUlOVCAle25hbWV9SSAle2RlZmluaXRpb259cyIsIDMsCisJCQkJCQkJCQkJCSJ0eXBlIiwgT2Jq VHlwZVN0cmluZywgImFkZCBjb25zdHJhaW50IiwKKwkJCQkJCQkJCQkJIm5hbWUiLCBPYmpUeXBl U3RyaW5nLCBpZHhuYW1lLAorCQkJCQkJCQkJCQkiZGVmaW5pdGlvbiIsIE9ialR5cGVTdHJpbmcs CisJCQkJCQkJCQkJCXBnX2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmRfc2ltcGxlKGNvbnN0ck9p ZCkpOworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0 bXBfb2JqKSk7CisKKwkJCQkJcmVsYXRpb25fY2xvc2UoaWR4LCBBY2Nlc3NTaGFyZUxvY2spOwor CQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9BZGRDb25zdHJhaW50OgorCQkJCXsKKwkJ CQkJLyogWFhYIG5lZWQgdG8gc2V0IHRoZSAicmVjdXJzZSIgYml0IHNvbWV3aGVyZT8gKi8KKwkJ CQkJT2lkCQkJY29uc3RyT2lkID0gc3ViLT5hZGRyZXNzLm9iamVjdElkOworCQkJCQlib29sCQlp c251bGw7CisJCQkJCUhlYXBUdXBsZQl0dXA7CisJCQkJCURhdHVtCQl2YWw7CisJCQkJCUNvbnN0 cmFpbnQgKmNvbnN0cjsKKworCQkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBDb25zdHJhaW50 KSk7CisJCQkJCWNvbnN0ciA9IGNhc3ROb2RlKENvbnN0cmFpbnQsIHN1YmNtZC0+ZGVmKTsKKwor CQkJCQlpZiAoIWNvbnN0ci0+c2tpcF92YWxpZGF0aW9uKQorCQkJCQl7CisJCQkJCQl0dXAgPSBT ZWFyY2hTeXNDYWNoZTEoQ09OU1RST0lELCBPYmplY3RJZEdldERhdHVtKGNvbnN0ck9pZCkpOwor CisJCQkJCQlpZiAoSGVhcFR1cGxlSXNWYWxpZCh0dXApKQorCQkJCQkJeworCQkJCQkJCWNoYXIJ ICAgKmNvbmJpbjsKKworCQkJCQkJCS8qIEZldGNoIGNvbnN0cmFpbnQgZXhwcmVzc2lvbiBpbiBw YXJzZXRyZWUgZm9ybSAqLworCQkJCQkJCXZhbCA9IFN5c0NhY2hlR2V0QXR0cihDT05TVFJPSUQs IHR1cCwKKwkJCQkJCQkJCQkJCSAgQW51bV9wZ19jb25zdHJhaW50X2NvbmJpbiwgJmlzbnVsbCk7 CisKKwkJCQkJCQlpZiAoIWlzbnVsbCkKKwkJCQkJCQl7CisJCQkJCQkJCWNvbmJpbiA9IFRleHRE YXR1bUdldENTdHJpbmcodmFsKTsKKwkJCQkJCQkJZXhwcnMgPSBsYXBwZW5kKGV4cHJzLCBzdHJp bmdUb05vZGUoY29uYmluKSk7CisJCQkJCQkJfQorCisJCQkJCQkJUmVsZWFzZVN5c0NhY2hlKHR1 cCk7CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkFE RCBDT05TVFJBSU5UICV7bmFtZX1JICV7ZGVmaW5pdGlvbn1zIiwgMywKKwkJCQkJCQkJCQkJInR5 cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWRkIGNvbnN0cmFpbnQiLAorCQkJCQkJCQkJCQkibmFtZSIs IE9ialR5cGVTdHJpbmcsIGdldF9jb25zdHJhaW50X25hbWUoY29uc3RyT2lkKSwKKwkJCQkJCQkJ CQkJImRlZmluaXRpb24iLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCQlwZ19nZXRfY29uc3Ry YWludGRlZl9jb21tYW5kX3NpbXBsZShjb25zdHJPaWQpKTsKKwkJCQkJc3ViY21kcyA9IGxhcHBl bmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCX0KKwkJCQlicmVh azsKKworCQkJY2FzZSBBVF9BbHRlckNvbnN0cmFpbnQ6CisJCQkJeworCQkJCQlPaWQJCQljb25z dHJPaWQgPSBzdWItPmFkZHJlc3Mub2JqZWN0SWQ7CisJCQkJCUNvbnN0cmFpbnQgKmMgPSAoQ29u c3RyYWludCAqKSBzdWJjbWQtPmRlZjsKKworCQkJCQkvKiBJZiBubyBjb25zdHJhaW50IHdhcyBh bHRlcmVkLCBzaWxlbnRseSBza2lwIGl0ICovCisJCQkJCWlmICghT2lkSXNWYWxpZChjb25zdHJP aWQpKQorCQkJCQkJYnJlYWs7CisKKwkJCQkJQXNzZXJ0KElzQShjLCBDb25zdHJhaW50KSk7CisJ CQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09OU1RSQUlOVCAle25hbWV9SSAl e2RlZmVycmFibGV9cyAle2luaXRfZGVmZXJyZWR9cyIsIDQsCisJCQkJCQkJCQkJCSJ0eXBlIiwg T2JqVHlwZVN0cmluZywgImFsdGVyIGNvbnN0cmFpbnQiLAorCQkJCQkJCQkJCQkibmFtZSIsIE9i alR5cGVTdHJpbmcsIGdldF9jb25zdHJhaW50X25hbWUoY29uc3RyT2lkKSwKKwkJCQkJCQkJCQkJ ImRlZmVycmFibGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCQljLT5kZWZlcnJhYmxlID8g IkRFRkVSUkFCTEUiIDogIk5PVCBERUZFUlJBQkxFIiwKKwkJCQkJCQkJCQkJImluaXRfZGVmZXJy ZWQiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCQljLT5pbml0ZGVmZXJyZWQgPyAiSU5JVElB TExZIERFRkVSUkVEIiA6ICJJTklUSUFMTFkgSU1NRURJQVRFIik7CisKKwkJCQkJc3ViY21kcyA9 IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCX0KKwkJ CQlicmVhazsKKworCQkJY2FzZSBBVF9WYWxpZGF0ZUNvbnN0cmFpbnQ6CisJCQkJdG1wX29iaiA9 IG5ld19vYmp0cmVlX1ZBKCJWQUxJREFURSBDT05TVFJBSU5UICV7Y29uc3RyYWludH1JIiwgMiwK KwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJ2YWxpZGF0ZSBjb25zdHJhaW50IiwK KwkJCQkJCQkJCQkiY29uc3RyYWludCIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJ CQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikp OworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BDb25zdHJhaW50OgorCQkJCXRtcF9vYmog PSBuZXdfb2JqdHJlZV9WQSgiRFJPUCBDT05TVFJBSU5UICV7Y29uc3RyYWludH1JICV7aWZfbm90 X2V4aXN0c31zIiwgMywKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkcm9wIGNv bnN0cmFpbnQiLAorCQkJCQkJCQkJCSJpZl9ub3RfZXhpc3RzIiwgT2JqVHlwZVN0cmluZywKKwkJ CQkJCQkJCQlzdWJjbWQtPm1pc3Npbmdfb2sgPyAiSUYgTk9UIEVYSVNUUyIgOiAiIiwKKwkJCQkJ CQkJCQkiY29uc3RyYWludCIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3Vi Y21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJ CWJyZWFrOworCisJCQljYXNlIEFUX0FsdGVyQ29sdW1uVHlwZToKKwkJCQl7CisJCQkJCVR1cGxl RGVzYwl0dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihyZWwpOworCQkJCQlGb3JtX3BnX2F0dHJp YnV0ZSBhdHQ7CisJCQkJCUNvbHVtbkRlZiAgKmRlZjsKKworCQkJCQlhdHQgPSAmKHR1cGRlc2Mt PmF0dHJzW3N1Yi0+YWRkcmVzcy5vYmplY3RTdWJJZCAtIDFdKTsKKwkJCQkJZGVmID0gKENvbHVt bkRlZiAqKSBzdWJjbWQtPmRlZjsKKwkJCQkJQXNzZXJ0KElzQShkZWYsIENvbHVtbkRlZikpOwor CisJCQkJCS8qCisJCQkJCSAqIFZlcmJvc2Ugc3ludGF4CisJCQkJCSAqCisJCQkJCSAqIENvbXBv c2l0ZSB0eXBlczogQUxURVIgcmVsdHlwZSAle2NvbHVtbn1JIFNFVCBEQVRBIFRZUEUKKwkJCQkJ ICogJXtkYXRhdHlwZX1UICV7Y29sbGF0aW9ufXMgQVRUUklCVVRFICV7Y2FzY2FkZX1zCisJCQkJ CSAqCisJCQkJCSAqIE5vcm1hbCB0eXBlczogQUxURVIgcmVsdHlwZSAle2NvbHVtbn1JIFNFVCBE QVRBIFRZUEUKKwkJCQkJICogJXtkYXRhdHlwZX1UICV7Y29sbGF0aW9ufXMgQ09MVU1OICV7dXNp bmd9cworCQkJCQkgKi8KKwkJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiAle29i anR5cGV9cyAle2NvbHVtbn1JIFNFVCBEQVRBIFRZUEUgJXtkYXRhdHlwZX1UIiwgNCwKKwkJCQkJ CQkJCQkJIm9ianR5cGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCQlpc3R5cGUgPyAiQVRU UklCVVRFIiA6ICJDT0xVTU4iLAorCQkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJh bHRlciBjb2x1bW4gdHlwZSIsCisJCQkJCQkJCQkJCSJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBz dWJjbWQtPm5hbWUsCisJCQkJCQkJCQkJCSJkYXRhdHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJ CQkJCQkJCW5ld19vYmp0cmVlX2Zvcl90eXBlKGF0dC0+YXR0dHlwaWQsCisJCQkJCQkJCQkJCQkJ CQkJIGF0dC0+YXR0dHlwbW9kKSk7CisKKwkJCQkJLyogQWRkIGEgQ09MTEFURSBjbGF1c2UsIGlm IG5lZWRlZCAqLworCQkJCQl0bXBfb2JqMiA9IG5ld19vYmp0cmVlKCJDT0xMQVRFIik7CisJCQkJ CWlmIChPaWRJc1ZhbGlkKGF0dC0+YXR0Y29sbGF0aW9uKSkKKwkJCQkJeworCQkJCQkJT2JqVHJl ZSAgICAqY29sbG5hbWU7CisKKwkJCQkJCWNvbGxuYW1lID0gbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lX2lkKENvbGxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkgICBhdHQtPmF0dGNv bGxhdGlvbik7CisJCQkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2JqMiwgIiV7bmFtZX1E IiwgY29sbG5hbWUpOworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJCWFwcGVuZF9ub3RfcHJlc2Vu dCh0bXBfb2JqMik7CisJCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmosICIle2NvbGxh dGlvbn1zIiwgdG1wX29iajIpOworCisJCQkJCS8qIElmIG5vdCBhIGNvbXBvc2l0ZSB0eXBlLCBh ZGQgdGhlIFVTSU5HIGNsYXVzZSAqLworCQkJCQlpZiAoIWlzdHlwZSkKKwkJCQkJeworCQkJCQkJ LyoKKwkJCQkJCSAqIElmIHRoZXJlJ3MgYSBVU0lORyBjbGF1c2UsIHRyYW5zZm9ybUFsdGVyVGFi bGVTdG10CisJCQkJCQkgKiByYW4gaXQgdGhyb3VnaCB0cmFuc2Zvcm1FeHByIGFuZCBzdG9yZWQg dGhlCisJCQkJCQkgKiByZXN1bHRpbmcgbm9kZSBpbiBjb29rZWRfZGVmYXVsdCwgd2hpY2ggd2Ug Y2FuIHVzZQorCQkJCQkJICogaGVyZS4KKwkJCQkJCSAqLworCQkJCQkJdG1wX29iajIgPSBuZXdf b2JqdHJlZSgiVVNJTkciKTsKKwkJCQkJCWlmIChkZWYtPnJhd19kZWZhdWx0KQorCQkJCQkJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmoyLCAiJXtleHByZXNzaW9ufXMiLAorCQkJCQkJCQkJ CQkJICJleHByZXNzaW9uIiwKKwkJCQkJCQkJCQkJCSBzdWItPnVzaW5nZXhwcik7CisJCQkJCQll bHNlCisJCQkJCQkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmoyKTsKKwkJCQkJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHRtcF9vYmosICIle3VzaW5nfXMiLCB0bXBfb2JqMik7CisJCQkJCX0KKwor CQkJCQkvKiBJZiBpdCdzIGEgY29tcG9zaXRlIHR5cGUsIGFkZCB0aGUgQ0FTQ0FERSBjbGF1c2Ug Ki8KKwkJCQkJaWYgKGlzdHlwZSkKKwkJCQkJeworCQkJCQkJdG1wX29iajIgPSBuZXdfb2JqdHJl ZSgiQ0FTQ0FERSIpOworCQkJCQkJaWYgKHN1YmNtZC0+YmVoYXZpb3IgIT0gRFJPUF9DQVNDQURF KQorCQkJCQkJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqMik7CisJCQkJCQlhcHBlbmRfb2Jq ZWN0X29iamVjdCh0bXBfb2JqLCAiJXtjYXNjYWRlfXMiLCB0bXBfb2JqMik7CisJCQkJCX0KKwor CQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2Jq KSk7CisJCQkJfQorCQkJCWJyZWFrOworCisjaWZkZWYgVE9ET0xJU1QKKwkJCWNhc2UgQVRfQWx0 ZXJDb2x1bW5HZW5lcmljT3B0aW9uczoKKwkJCQl0bXBfb2JqID0gZGVwYXJzZV9GZHdPcHRpb25z KChMaXN0ICopIHN1YmNtZC0+ZGVmLAorCQkJCQkJCQkJCQlzdWJjbWQtPm5hbWUpOworCQkJCXN1 YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJ CQlicmVhazsKKyNlbmRpZgorCQkJY2FzZSBBVF9DaGFuZ2VPd25lcjoKKwkJCQl0bXBfb2JqID0g bmV3X29ianRyZWVfVkEoIk9XTkVSIFRPICV7b3duZXJ9SSIsIDIsCisJCQkJCQkJCQkJInR5cGUi LCBPYmpUeXBlU3RyaW5nLCAiY2hhbmdlIG93bmVyIiwKKwkJCQkJCQkJCQkib3duZXIiLCBPYmpU eXBlU3RyaW5nLAorCQkJCQkJCQkJCWdldF9yb2xlc3BlY19uYW1lKHN1YmNtZC0+bmV3b3duZXIp KTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBf b2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQ2x1c3Rlck9uOgorCQkJCXRtcF9vYmog PSBuZXdfb2JqdHJlZV9WQSgiQ0xVU1RFUiBPTiAle2luZGV4fUkiLCAyLAorCQkJCQkJCQkJCSJ0 eXBlIiwgT2JqVHlwZVN0cmluZywgImNsdXN0ZXIgb24iLAorCQkJCQkJCQkJCSJpbmRleCIsIE9i alR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21k cywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFU X0Ryb3BDbHVzdGVyOgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiU0VUIFdJVEhPVVQg Q0xVU1RFUiIsIDEsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IHdpdGhv dXQgY2x1c3RlciIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rf b2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9TZXRMb2dnZWQ6CisJ CQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJTRVQgTE9HR0VEIiwgMSwKKwkJCQkJCQkJCQki dHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgbG9nZ2VkIik7CisJCQkJc3ViY21kcyA9IGxhcHBl bmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJ CQljYXNlIEFUX1NldFVuTG9nZ2VkOgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiU0VU IFVOTE9HR0VEIiwgMSwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgdW5s b2dnZWQiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVj dCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRHJvcE9pZHM6CisJCQkJdG1w X29iaiA9IG5ld19vYmp0cmVlX1ZBKCJTRVQgV0lUSE9VVCBPSURTIiwgMSwKKwkJCQkJCQkJCQki dHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgd2l0aG91dCBvaWRzIik7CisJCQkJc3ViY21kcyA9 IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFr OworCQkJY2FzZSBBVF9TZXRBY2Nlc3NNZXRob2Q6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVl X1ZBKCJTRVQgQUNDRVNTIE1FVEhPRCAle2FjY2Vzc19tZXRob2R9SSIsIDIsCisJCQkJCQkJCQkJ InR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IGFjY2VzcyBtZXRob2QiLAorCQkJCQkJCQkJCSJh Y2Nlc3NfbWV0aG9kIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRz ID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJl YWs7CisJCQljYXNlIEFUX1NldFRhYmxlU3BhY2U6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVl X1ZBKCJTRVQgVEFCTEVTUEFDRSAle3RhYmxlc3BhY2V9SSIsIDIsCisJCQkJCQkJCQkJInR5cGUi LCBPYmpUeXBlU3RyaW5nLCAic2V0IHRhYmxlc3BhY2UiLAorCQkJCQkJCQkJCSJ0YWJsZXNwYWNl IiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChz dWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNh c2UgQVRfU2V0UmVsT3B0aW9uczoKKwkJCWNhc2UgQVRfUmVzZXRSZWxPcHRpb25zOgorCQkJCXN1 YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KAorCQkJCQkJCQkJCQkJ CQkJIGRlcGFyc2VfUmVsU2V0T3B0aW9ucyhzdWJjbWQpKSk7CisJCQkJYnJlYWs7CisKKwkJCWNh c2UgQVRfRW5hYmxlVHJpZzoKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBU UklHR0VSICV7dHJpZ2dlcn1JIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcs ICJlbmFibGUgdHJpZ2dlciIsCisJCQkJCQkJCQkJInRyaWdnZXIiLCBPYmpUeXBlU3RyaW5nLCBz dWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rf b2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVBbHdheXNU cmlnOgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiRU5BQkxFIEFMV0FZUyBUUklHR0VS ICV7dHJpZ2dlcn1JIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFi bGUgYWx3YXlzIHRyaWdnZXIiLAorCQkJCQkJCQkJCSJ0cmlnZ2VyIiwgT2JqVHlwZVN0cmluZywg c3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0 X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlUmVwbGlj YVRyaWc6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgUkVQTElDQSBUUklH R0VSICV7dHJpZ2dlcn1JIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJl bmFibGUgcmVwbGljYSB0cmlnZ2VyIiwKKwkJCQkJCQkJCQkidHJpZ2dlciIsIE9ialR5cGVTdHJp bmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29i amVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Rpc2FibGVU cmlnOgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiRElTQUJMRSBUUklHR0VSICV7dHJp Z2dlcn1JIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkaXNhYmxlIHRy aWdnZXIiLAorCQkJCQkJCQkJCSJ0cmlnZ2VyIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1l KTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBf b2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlVHJpZ0FsbDoKKwkJCQl0bXBf b2JqID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBUUklHR0VSIEFMTCIsIDEsCisJCQkJCQkJCQkJ InR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZW5hYmxlIHRyaWdnZXIgYWxsIik7CisJCQkJc3ViY21k cyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJy ZWFrOworCisJCQljYXNlIEFUX0Rpc2FibGVUcmlnQWxsOgorCQkJCXRtcF9vYmogPSBuZXdfb2Jq dHJlZV9WQSgiRElTQUJMRSBUUklHR0VSIEFMTCIsIDEsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpU eXBlU3RyaW5nLCAiZGlzYWJsZSB0cmlnZ2VyIGFsbCIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5k KHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJ Y2FzZSBBVF9FbmFibGVUcmlnVXNlcjoKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkVO QUJMRSBUUklHR0VSIFVTRVIiLCAxLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywg ImVuYWJsZSB0cmlnZ2VyIHVzZXIiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBu ZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRGlz YWJsZVRyaWdVc2VyOgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiRElTQUJMRSBUUklH R0VSIFVTRVIiLCAxLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRpc2FibGUg dHJpZ2dlciB1c2VyIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVj dF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJsZVJ1bGU6 CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgUlVMRSAle3J1bGV9SSIsIDIs CisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZW5hYmxlIHJ1bGUiLAorCQkJCQkJ CQkJCSJydWxlIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0g bGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7 CisKKwkJCWNhc2UgQVRfRW5hYmxlQWx3YXlzUnVsZToKKwkJCQl0bXBfb2JqID0gbmV3X29ianRy ZWVfVkEoIkVOQUJMRSBBTFdBWVMgUlVMRSAle3J1bGV9SSIsIDIsCisJCQkJCQkJCQkJInR5cGUi LCBPYmpUeXBlU3RyaW5nLCAiZW5hYmxlIGFsd2F5cyBydWxlIiwKKwkJCQkJCQkJCQkicnVsZSIs IE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3Vi Y21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNl IEFUX0VuYWJsZVJlcGxpY2FSdWxlOgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiRU5B QkxFIFJFUExJQ0EgUlVMRSAle3J1bGV9SSIsIDIsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBl U3RyaW5nLCAiZW5hYmxlIHJlcGxpY2EgcnVsZSIsCisJCQkJCQkJCQkJInJ1bGUiLCBPYmpUeXBl U3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5l d19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9EaXNh YmxlUnVsZToKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkRJU0FCTEUgUlVMRSAle3J1 bGV9SSIsIDIsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZGlzYWJsZSBydWxl IiwKKwkJCQkJCQkJCQkicnVsZSIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJ c3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOwor CQkJCWJyZWFrOworCisJCQljYXNlIEFUX0FkZEluaGVyaXQ6CisJCQkJdG1wX29iaiA9IG5ld19v Ymp0cmVlX1ZBKCJJTkhFUklUICV7cGFyZW50fUQiLCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2Jq VHlwZVN0cmluZywgImluaGVyaXQiLAorCQkJCQkJCQkJCSJwYXJlbnQiLCBPYmpUeXBlT2JqZWN0 LAorCQkJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9u SWQsCisJCQkJCQkJCQkJCQkJCQkJCXN1Yi0+YWRkcmVzcy5vYmplY3RJZCkpOworCQkJCXN1YmNt ZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQli cmVhazsKKworCQkJY2FzZSBBVF9Ecm9wSW5oZXJpdDoKKwkJCQl0bXBfb2JqID0gbmV3X29ianRy ZWVfVkEoIk5PIElOSEVSSVQgJXtwYXJlbnR9RCIsIDIsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpU eXBlU3RyaW5nLCAiZHJvcCBpbmhlcml0IiwKKwkJCQkJCQkJCQkicGFyZW50IiwgT2JqVHlwZU9i amVjdCwKKwkJCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxh dGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCQlzdWItPmFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJCQlz dWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJ CQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWRkT2Y6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVl X1ZBKCJPRiAle3R5cGVfb2Z9VCIsIDIsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5n LCAiYWRkIG9mIiwKKwkJCQkJCQkJCQkidHlwZV9vZiIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJ CQkJbmV3X29ianRyZWVfZm9yX3R5cGUoc3ViLT5hZGRyZXNzLm9iamVjdElkLCAtMSkpOworCQkJ CXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsK KwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Ecm9wT2Y6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0 cmVlX1ZBKCJOT1QgT0YiLCAxLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgIm5v dCBvZiIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9SZXBsaWNhSWRlbnRpdHk6CisJ CQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJSRVBMSUNBIElERU5USVRZIiwgMSwKKwkJCQkJ CQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJyZXBsaWNhIGlkZW50aXR5Iik7CisJCQkJc3dp dGNoICgoKFJlcGxpY2FJZGVudGl0eVN0bXQgKikgc3ViY21kLT5kZWYpLT5pZGVudGl0eV90eXBl KQorCQkJCXsKKwkJCQkJY2FzZSBSRVBMSUNBX0lERU5USVRZX0RFRkFVTFQ6CisJCQkJCQlhcHBl bmRfc3RyaW5nX29iamVjdCh0bXBfb2JqLCAiJXtpZGVudH1zIiwgImlkZW50IiwKKwkJCQkJCQkJ CQkJICJERUZBVUxUIik7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBSRVBMSUNBX0lERU5USVRZ X0ZVTEw6CisJCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBfb2JqLCAiJXtpZGVudH1zIiwg ImlkZW50IiwKKwkJCQkJCQkJCQkJICJGVUxMIik7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBS RVBMSUNBX0lERU5USVRZX05PVEhJTkc6CisJCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBf b2JqLCAiJXtpZGVudH1zIiwgImlkZW50IiwKKwkJCQkJCQkJCQkJICJOT1RISU5HIik7CisJCQkJ CQlicmVhazsKKwkJCQkJY2FzZSBSRVBMSUNBX0lERU5USVRZX0lOREVYOgorCQkJCQkJdG1wX29i ajIgPSBuZXdfb2JqdHJlZV9WQSgiVVNJTkcgSU5ERVggJXtpbmRleH1JIiwgMSwKKwkJCQkJCQkJ CQkJCSAiaW5kZXgiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCQkJICgoUmVwbGljYUlkZW50 aXR5U3RtdCAqKSBzdWJjbWQtPmRlZiktPm5hbWUpOworCQkJCQkJYXBwZW5kX29iamVjdF9vYmpl Y3QodG1wX29iaiwgIiV7aWRlbnR9cyIsIHRtcF9vYmoyKTsKKwkJCQkJCWJyZWFrOworCQkJCX0K KwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2Jq KSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlUm93U2VjdXJpdHk6CisJCQkJdG1w X29iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgUk9XIExFVkVMIFNFQ1VSSVRZIiwgMSwKKwkJ CQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUgcm93IHNlY3VyaXR5Iik7CisJ CQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikp OworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Rpc2FibGVSb3dTZWN1cml0eToKKwkJCQl0bXBf b2JqID0gbmV3X29ianRyZWVfVkEoIkRJU0FCTEUgUk9XIExFVkVMIFNFQ1VSSVRZIiwgMSwKKwkJ CQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkaXNhYmxlIHJvdyBzZWN1cml0eSIpOwor CQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmop KTsKKwkJCQlicmVhazsKKyNpZmRlZiBUT0RPTElTVAorCQkJY2FzZSBBVF9HZW5lcmljT3B0aW9u czoKKwkJCQl0bXBfb2JqID0gZGVwYXJzZV9GZHdPcHRpb25zKChMaXN0ICopIHN1YmNtZC0+ZGVm LCBOVUxMKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVj dCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisjZW5kaWYKKwkJCWNhc2UgQVRfQXR0YWNoUGFydGl0 aW9uOgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiQVRUQUNIIFBBUlRJVElPTiAle3Bh cnRpdGlvbl9pZGVudGl0eX1EIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcs ICJhdHRhY2ggcGFydGl0aW9uIiwKKwkJCQkJCQkJCQkicGFydGl0aW9uX2lkZW50aXR5IiwgT2Jq VHlwZU9iamVjdCwKKwkJCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRp b25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCQlzdWItPmFkZHJlc3Mub2JqZWN0SWQpKTsK KworCQkJCWlmIChyZWwtPnJkX3JlbC0+cmVsa2luZCA9PSBSRUxLSU5EX1BBUlRJVElPTkVEX1RB QkxFKQorCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBfb2JqLCAiJXtwYXJ0aXRpb25fYm91 bmR9cyIsCisJCQkJCQkJCQkJICJwYXJ0aXRpb25fYm91bmQiLAorCQkJCQkJCQkJCSBSZWxhdGlv bkdldFBhcnRpdGlvbkJvdW5kKHN1Yi0+YWRkcmVzcy5vYmplY3RJZCkpOworCisJCQkJc3ViY21k cyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJy ZWFrOworCQkJY2FzZSBBVF9EZXRhY2hQYXJ0aXRpb246CisJCQl7CisJCQkJUGFydGl0aW9uQ21k ICpjbWQ7CisKKwkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBQYXJ0aXRpb25DbWQpKTsKKwkJ CQljbWQgPSAoUGFydGl0aW9uQ21kICopIHN1YmNtZC0+ZGVmOworCisJCQkJdG1wX29iaiA9IG5l d19vYmp0cmVlX1ZBKCJERVRBQ0ggUEFSVElUSU9OICV7cGFydGl0aW9uX2lkZW50aXR5fUQgJXtj b25jdXJyZW50fXMiLCAzLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJ CQkJCQkiZGV0YWNoIHBhcnRpdGlvbiIsCisJCQkJCQkJCQkJInBhcnRpdGlvbl9pZGVudGl0eSIs IE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJl bGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkJc3ViLT5hZGRyZXNzLm9iamVjdElk KSwKKwkJCQkJCQkJCQljbWQtPmNvbmN1cnJlbnQgPyAiQ09OQ1VSUkVOVExZIiA6ICIiKTsKKwkJ CQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7 CisJCQkJYnJlYWs7CisJCQl9CisJCQljYXNlIEFUX0RldGFjaFBhcnRpdGlvbkZpbmFsaXplOgor CQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiREVUQUNIIFBBUlRJVElPTiAle3BhcnRpdGlv bl9pZGVudGl0eX1EIEZJTkFMSVpFIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJp bmcsICJkZXRhY2ggcGFydGl0aW9uIGZpbmFsaXplIiwKKwkJCQkJCQkJCQkicGFydGl0aW9uX2lk ZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCQlzdWItPmFkZHJlc3Mu b2JqZWN0SWQpKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29i amVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEFUX0FkZElkZW50aXR5OgorCQkJ CXsKKwkJCQkJQXR0ck51bWJlcglhdHRudW07CisJCQkJCU9pZAkJCXNlcV9yZWxpZDsKKwkJCQkJ T2JqVHJlZSAgICAqc2VxZGVmOworCQkJCQlDb2x1bW5EZWYgICpjb2xkZWYgPSAoQ29sdW1uRGVm ICopIHN1YmNtZC0+ZGVmOworCisJCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIg Q09MVU1OICV7Y29sdW1ufUkiLCAyLAorCQkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcs ICJhZGQgaWRlbnRpdHkiLAorCQkJCQkJCQkJCQkiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3Vi Y21kLT5uYW1lKTsKKworCQkJCQlhdHRudW0gPSBnZXRfYXR0bnVtKFJlbGF0aW9uR2V0UmVsaWQo cmVsKSwgc3ViY21kLT5uYW1lKTsKKwkJCQkJc2VxX3JlbGlkID0gZ2V0SWRlbnRpdHlTZXF1ZW5j ZShSZWxhdGlvbkdldFJlbGlkKHJlbCksIGF0dG51bSwgdHJ1ZSk7CisKKwkJCQkJaWYgKE9pZElz VmFsaWQoc2VxX3JlbGlkKSkKKwkJCQkJeworCQkJCQkJc2VxZGVmID0gZGVwYXJzZV9Db2x1bW5J ZGVudGl0eShzZXFfcmVsaWQsIGNvbGRlZi0+aWRlbnRpdHksIGZhbHNlKTsKKwkJCQkJCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmosICJBREQgJXtpZGVudGl0eV9jb2x1bW59cyIsIHNlcWRl Zik7CisJCQkJCX0KKworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0 X29iamVjdCh0bXBfb2JqKSk7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSBBVF9TZXRJZGVu dGl0eToKKwkJCQl7CisJCQkJCURlZkVsZW0gICAgKmRlZmVsOworCQkJCQljaGFyCQlpZGVudGl0 eSA9IDA7CisJCQkJCU9ialRyZWUgICAgKnNlcWRlZjsKKwkJCQkJQXR0ck51bWJlcglhdHRudW07 CisJCQkJCU9pZAkJCXNlcV9yZWxpZDsKKworCisJCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9W QSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkiLCAyLAorCQkJCQkJCQkJCQkidHlwZSIsIE9ialR5 cGVTdHJpbmcsICJzZXQgaWRlbnRpdHkiLAorCQkJCQkJCQkJCQkiY29sdW1uIiwgT2JqVHlwZVN0 cmluZywgc3ViY21kLT5uYW1lKTsKKworCQkJCQlpZiAoc3ViY21kLT5kZWYpCisJCQkJCXsKKwkJ CQkJCUxpc3QJICAgKmRlZiA9IChMaXN0ICopIHN1YmNtZC0+ZGVmOworCisJCQkJCQlBc3NlcnQo SXNBKHN1YmNtZC0+ZGVmLCBMaXN0KSk7CisKKwkJCQkJCWRlZmVsID0gbGluaXRpYWxfbm9kZShE ZWZFbGVtLCBkZWYpOworCQkJCQkJaWRlbnRpdHkgPSBkZWZHZXRJbnQzMihkZWZlbCk7CisJCQkJ CX0KKworCQkJCQlhdHRudW0gPSBnZXRfYXR0bnVtKFJlbGF0aW9uR2V0UmVsaWQocmVsKSwgc3Vi Y21kLT5uYW1lKTsKKwkJCQkJc2VxX3JlbGlkID0gZ2V0SWRlbnRpdHlTZXF1ZW5jZShSZWxhdGlv bkdldFJlbGlkKHJlbCksIGF0dG51bSwgdHJ1ZSk7CisKKwkJCQkJaWYgKE9pZElzVmFsaWQoc2Vx X3JlbGlkKSkKKwkJCQkJeworCQkJCQkJc2VxZGVmID0gZGVwYXJzZV9Db2x1bW5JZGVudGl0eShz ZXFfcmVsaWQsIGlkZW50aXR5LCB0cnVlKTsKKwkJCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRt cF9vYmosICIle2RlZmluaXRpb259cyIsIHNlcWRlZik7CisJCQkJCX0KKworCQkJCQlzdWJjbWRz ID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJCWJy ZWFrOworCQkJCX0KKwkJCWNhc2UgQVRfRHJvcElkZW50aXR5OgorCQkJCXRtcF9vYmogPSBuZXdf b2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgRFJPUCBJREVOVElUWSIsIDIsCisJ CQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZHJvcCBpZGVudGl0eSIsCisJCQkJCQkJ CQkJImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisKKwkJCQlhcHBlbmRf c3RyaW5nX29iamVjdCh0bXBfb2JqLCAiJXtpZl9leGlzdHN9cyIsCisJCQkJCQkJCQkgImlmX2V4 aXN0cyIsCisJCQkJCQkJCQkgc3ViY21kLT5taXNzaW5nX29rID8gIklGIEVYSVNUUyIgOiAiIik7 CisKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBf b2JqKSk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWVsb2coV0FSTklORywgInVuc3Vw cG9ydGVkIGFsdGVyIHRhYmxlIHN1YnR5cGUgJWQiLAorCQkJCQkgc3ViY21kLT5zdWJ0eXBlKTsK KwkJCQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqIFdlIGRvbid0IHN1cHBvcnQgcmVwbGljYXRp bmcgQUxURVIgVEFCTEUgd2hpY2ggY29udGFpbnMgdm9sYXRpbGUKKwkJICogZnVuY3Rpb25zIGJl Y2F1c2UgSXQncyBwb3NzaWJsZSB0aGUgZnVuY3Rpb25zIGNvbnRhaW4gRERML0RNTCBpbgorCQkg KiB3aGljaCBjYXNlIHRoZXNlIG9wZXJhdGlvbnMgd2lsbCBiZSBleGVjdXRlZCB0d2ljZSBhbmQg Y2F1c2UKKwkJICogZHVwbGljYXRlIGRhdGEuIEluIGFkZGl0aW9uLCB3ZSBkb24ndCBrbm93IHdo ZXRoZXIgdGhlIHRhYmxlcyBiZWluZworCQkgKiBhY2Nlc3NlZCBieSB0aGVzZSBEREwvRE1MIGFy ZSBwdWJsaXNoZWQgb3Igbm90LiBTbyBibGluZGx5IGFsbG93aW5nCisJCSAqIHN1Y2ggZnVuY3Rp b25zIGNhbiBhbGxvdyB1bmludGVuZGVkIGNsYXVzZXMgbGlrZSB0aGUgdGFibGVzCisJCSAqIGFj Y2Vzc2VkIGluIHRob3NlIGZ1bmN0aW9ucyBtYXkgbm90IGV2ZW4gZXhpc3Qgb24gdGhlIHN1YnNj cmliZXIuCisJCSAqLworCQlpZiAoY29udGFpbl92b2xhdGlsZV9mdW5jdGlvbnMoKE5vZGUgKikg ZXhwcnMpKQorCQkJZWxvZyhFUlJPUiwgIkFMVEVSIFRBQkxFIGNvbW1hbmQgdXNpbmcgdm9sYXRp bGUgZnVuY3Rpb24gY2Fubm90IGJlIHJlcGxpY2F0ZWQiKTsKKworCQkvKgorCQkgKiBDbGVhbiB0 aGUgbGlzdCBhcyB3ZSBhbHJlYWR5IGNvbmZpcm1lZCB0aGVyZSBpcyBubyB2b2xhdGlsZQorCQkg KiBmdW5jdGlvbi4KKwkJICovCisJCWxpc3RfZnJlZShleHBycyk7CisJCWV4cHJzID0gTklMOwor CX0KKworCXRhYmxlX2Nsb3NlKHJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCWlmIChsaXN0X2xl bmd0aChzdWJjbWRzKSA9PSAwKQorCQlyZXR1cm4gTlVMTDsKKworCWFwcGVuZF9hcnJheV9vYmpl Y3QocmV0LCAiJXtzdWJjbWRzOiwgfXMiLCBzdWJjbWRzKTsKKworCXJldHVybiByZXQ7Cit9CisK Ky8qCisgKiBIYW5kbGUgZGVwYXJzaW5nIG9mIERST1AgY29tbWFuZHMuCisgKgorICogVmVyYm9z ZSBzeW50YXgKKyAqIERST1AgJXMgSUYgRVhJU1RTICUle29iamlkZW50aXR5fXMgJXtjYXNjYWRl fXMKKyAqLworY2hhciAqCitkZXBhcnNlX2Ryb3BfY29tbWFuZChjb25zdCBjaGFyICpvYmppZGVu dGl0eSwgY29uc3QgY2hhciAqb2JqZWN0dHlwZSwKKwkJCQkJIERyb3BCZWhhdmlvciBiZWhhdmlv cikKK3sKKwlTdHJpbmdJbmZvRGF0YSBzdHI7CisJY2hhcgkgICAqY29tbWFuZDsKKwljaGFyCSAg ICppZGVudGl0eSA9IChjaGFyICopIG9iamlkZW50aXR5OworCU9ialRyZWUgICAgKnN0bXQ7CisJ T2JqVHJlZSAgICAqdG1wX29iajsKKwlKc29uYgkgICAqanNvbmI7CisKKwlpbml0U3RyaW5nSW5m bygmc3RyKTsKKworCXN0bXQgPSBuZXdfb2JqdHJlZV9WQSgiRFJPUCAle29ianR5cGV9cyBJRiBF WElTVFMgJXtvYmppZGVudGl0eX1zIiwgMiwKKwkJCQkJCSAgIm9ianR5cGUiLCBPYmpUeXBlU3Ry aW5nLCBvYmplY3R0eXBlLAorCQkJCQkJICAib2JqaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBp ZGVudGl0eSk7CisKKwl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkNBU0NBREUiLCAxLAorCQkJ CQkJCSJwcmVzZW50IiwgT2JqVHlwZUJvb2wsIGJlaGF2aW9yID09IERST1BfQ0FTQ0FERSk7CisJ YXBwZW5kX29iamVjdF9vYmplY3Qoc3RtdCwgIiV7Y2FzY2FkZX1zIiwgdG1wX29iaik7CisKKwlq c29uYiA9IG9ianRyZWVfdG9fanNvbmIoc3RtdCk7CisJY29tbWFuZCA9IEpzb25iVG9DU3RyaW5n KCZzdHIsICZqc29uYi0+cm9vdCwgSlNPTkJfRVNUSU1BVEVEX0xFTik7CisKKwlyZXR1cm4gY29t bWFuZDsKK30KKworLyoKKyAqIEhhbmRsZSBkZXBhcnNpbmcgb2Ygc2ltcGxlIGNvbW1hbmRzLgor ICoKKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGNvdmVyIGFsbCBjYXNlcyBoYW5kbGVkIGluIFBy b2Nlc3NVdGlsaXR5U2xvdy4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9zaW1wbGVf Y29tbWFuZChDb2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJT2lkCQkJb2JqZWN0SWQ7CisJTm9k ZQkgICAqcGFyc2V0cmVlOworCisJQXNzZXJ0KGNtZC0+dHlwZSA9PSBTQ1RfU2ltcGxlKTsKKwor CXBhcnNldHJlZSA9IGNtZC0+cGFyc2V0cmVlOworCW9iamVjdElkID0gY21kLT5kLnNpbXBsZS5h ZGRyZXNzLm9iamVjdElkOworCisJaWYgKGNtZC0+aW5fZXh0ZW5zaW9uICYmIChub2RlVGFnKHBh cnNldHJlZSkgIT0gVF9DcmVhdGVFeHRlbnNpb25TdG10KSkKKwkJcmV0dXJuIE5VTEw7CisKKwkv KiBUaGlzIHN3aXRjaCBuZWVkcyB0byBoYW5kbGUgZXZlcnl0aGluZyB0aGF0IFByb2Nlc3NVdGls aXR5U2xvdyBkb2VzICovCisJc3dpdGNoIChub2RlVGFnKHBhcnNldHJlZSkpCisJeworCQljYXNl IFRfQ3JlYXRlU2VxU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0NyZWF0ZVNlcVN0bXQob2JqZWN0 SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0NyZWF0ZVN0bXQ6CisJCQlyZXR1cm4gZGVwYXJz ZV9DcmVhdGVTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9JbmRleFN0bXQ6 CisJCQlyZXR1cm4gZGVwYXJzZV9JbmRleFN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJ ZGVmYXVsdDoKKwkJCWVsb2coTE9HLCAidW5yZWNvZ25pemVkIG5vZGUgdHlwZSBpbiBkZXBhcnNl IGNvbW1hbmQ6ICVkIiwKKwkJCQkgKGludCkgbm9kZVRhZyhwYXJzZXRyZWUpKTsKKwl9CisKKwly ZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIFdvcmtob3JzZSB0byBkZXBhcnNlIGEgQ29sbGVjdGVk Q29tbWFuZC4KKyAqLworY2hhciAqCitkZXBhcnNlX3V0aWxpdHlfY29tbWFuZChDb2xsZWN0ZWRD b21tYW5kICpjbWQsIGJvb2wgdmVyYm9zZV9tb2RlKQoreworCU92ZXJyaWRlU2VhcmNoUGF0aCAq b3ZlcnJpZGVQYXRoOworCU1lbW9yeUNvbnRleHQgb2xkY3h0OworCU1lbW9yeUNvbnRleHQgdG1w Y3h0OworCU9ialRyZWUgICAgKnRyZWU7CisJY2hhcgkgICAqY29tbWFuZCA9IE5VTEw7CisJU3Ry aW5nSW5mb0RhdGEgc3RyOworCisJLyoKKwkgKiBBbGxvY2F0ZSBldmVyeXRoaW5nIGRvbmUgYnkg dGhlIGRlcGFyc2luZyByb3V0aW5lcyBpbnRvIGEgdGVtcCBjb250ZXh0LAorCSAqIHRvIGF2b2lk IGhhdmluZyB0byBzcHJpbmtsZSB0aGVtIHdpdGggbWVtb3J5IGhhbmRsaW5nIGNvZGUsIGJ1dAor CSAqIGFsbG9jYXRlIHRoZSBvdXRwdXQgU3RyaW5nSW5mbyBiZWZvcmUgc3dpdGNoaW5nLgorCSAq LworCWluaXRTdHJpbmdJbmZvKCZzdHIpOworCXRtcGN4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0 ZShDdXJyZW50TWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJICAgImRlcGFyc2UgY3R4IiwKKwkJCQkJ CQkJICAgQUxMT0NTRVRfREVGQVVMVF9NSU5TSVpFLAorCQkJCQkJCQkgICBBTExPQ1NFVF9ERUZB VUxUX0lOSVRTSVpFLAorCQkJCQkJCQkgICBBTExPQ1NFVF9ERUZBVUxUX01BWFNJWkUpOworCW9s ZGN4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyh0bXBjeHQpOworCisJLyoKKwkgKiBNYW55IHJv dXRpbmVzIHVuZGVybHlpbmcgdGhpcyBvbmUgd2lsbCBpbnZva2UgcnVsZXV0aWxzLmMgZnVuY3Rp b25hbGl0eQorCSAqIHRvIG9idGFpbiBkZXBhcnNlZCB2ZXJzaW9ucyBvZiBleHByZXNzaW9ucy4g IEluIHN1Y2ggcmVzdWx0cywgd2Ugd2FudAorCSAqIGFsbCBvYmplY3QgbmFtZXMgdG8gYmUgcXVh bGlmaWVkLCBzbyB0aGF0IHJlc3VsdHMgYXJlICJwb3J0YWJsZSIgdG8KKwkgKiBlbnZpcm9ubWVu dHMgd2l0aCBkaWZmZXJlbnQgc2VhcmNoX3BhdGggc2V0dGluZ3MuICBSYXRoZXIgdGhhbiBpbmpl Y3QKKwkgKiB3aGF0IHdvdWxkIGJlIHJlcGV0aXRpdmUgY2FsbHMgdG8gb3ZlcnJpZGUgc2VhcmNo IHBhdGggYWxsIG92ZXIgdGhlCisJICogcGxhY2UsIHdlIGRvIGl0IGNlbnRyYWxseSBoZXJlLgor CSAqLworCW92ZXJyaWRlUGF0aCA9IEdldE92ZXJyaWRlU2VhcmNoUGF0aChDdXJyZW50TWVtb3J5 Q29udGV4dCk7CisJb3ZlcnJpZGVQYXRoLT5zY2hlbWFzID0gTklMOworCW92ZXJyaWRlUGF0aC0+ YWRkQ2F0YWxvZyA9IGZhbHNlOworCW92ZXJyaWRlUGF0aC0+YWRkVGVtcCA9IHRydWU7CisJUHVz aE92ZXJyaWRlU2VhcmNoUGF0aChvdmVycmlkZVBhdGgpOworCisJdmVyYm9zZSA9IHZlcmJvc2Vf bW9kZTsKKworCXN3aXRjaCAoY21kLT50eXBlKQorCXsKKwkJY2FzZSBTQ1RfU2ltcGxlOgorCQkJ dHJlZSA9IGRlcGFyc2Vfc2ltcGxlX2NvbW1hbmQoY21kKTsKKwkJCWJyZWFrOworCQljYXNlIFND VF9BbHRlclRhYmxlOgorCQkJdHJlZSA9IGRlcGFyc2VfQWx0ZXJSZWxhdGlvbihjbWQpOworCQkJ YnJlYWs7CisJCWNhc2UgU0NUX0NyZWF0ZVRhYmxlQXM6CisJCQl0cmVlID0gZGVwYXJzZV9DcmVh dGVUYWJsZUFzU3RtdChjbWQpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9S LCAidW5leHBlY3RlZCBkZXBhcnNlIG5vZGUgdHlwZSAlZCIsIGNtZC0+dHlwZSk7CisJfQorCisJ UG9wT3ZlcnJpZGVTZWFyY2hQYXRoKCk7CisKKwlpZiAodHJlZSkKKwl7CisJCUpzb25iCSAgICpq c29uYjsKKworCQlqc29uYiA9IG9ianRyZWVfdG9fanNvbmIodHJlZSk7CisJCWNvbW1hbmQgPSBK c29uYlRvQ1N0cmluZygmc3RyLCAmanNvbmItPnJvb3QsIEpTT05CX0VTVElNQVRFRF9MRU4pOwor CX0KKworCS8qCisJICogQ2xlYW4gdXAuICBOb3RlIHRoYXQgc2luY2Ugd2UgY3JlYXRlZCB0aGUg U3RyaW5nSW5mbyBpbiB0aGUgY2FsbGVyJ3MKKwkgKiBjb250ZXh0LCB0aGUgb3V0cHV0IHN0cmlu ZyBpcyBub3QgZGVsZXRlZCBoZXJlLgorCSAqLworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRj eHQpOworCU1lbW9yeUNvbnRleHREZWxldGUodG1wY3h0KTsKKworCXJldHVybiBjb21tYW5kOwor fQorCisvKgorICogR2l2ZW4gYSBDb2xsZWN0ZWRDb21tYW5kLCByZXR1cm4gYSBKU09OIHJlcHJl c2VudGF0aW9uIG9mIGl0LgorICoKKyAqIFRoZSBjb21tYW5kIGlzIGV4cGFuZGVkIGZ1bGx5IHNv IHRoYXQgdGhlcmUgYXJlIG5vIGFtYmlndWl0aWVzIGV2ZW4gaW4gdGhlCisgKiBmYWNlIG9mIHNl YXJjaF9wYXRoIGNoYW5nZXMuCisgKi8KK0RhdHVtCitkZGxfZGVwYXJzZV90b19qc29uKFBHX0ZV TkNUSU9OX0FSR1MpCit7CisJQ29sbGVjdGVkQ29tbWFuZCAqY21kID0gKENvbGxlY3RlZENvbW1h bmQgKikgUEdfR0VUQVJHX1BPSU5URVIoMCk7CisJY2hhcgkgICAqY29tbWFuZDsKKworCWNvbW1h bmQgPSBkZXBhcnNlX3V0aWxpdHlfY29tbWFuZChjbWQsIHRydWUpOworCisJaWYgKGNvbW1hbmQp CisJCVBHX1JFVFVSTl9URVhUX1AoY3N0cmluZ190b190ZXh0KGNvbW1hbmQpKTsKKworCVBHX1JF VFVSTl9OVUxMKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2pzb24uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Rk bF9qc29uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZmJkM2I1NGU1 ZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9qc29uLmMKQEAg LTAsMCArMSw3NzYgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGRkbF9qc29uLmMKKyAq CSAgSlNPTiBjb2RlIHJlbGF0ZWQgdG8gRERMIGNvbW1hbmQgZGVwYXJzaW5nCisgKgorICogUG9y dGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3Bt ZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhl IFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNy Yy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9qc29uLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq LworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJsaWIvc3RyaW5naW5mby5oIgor I2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvanNvbmIuaCIKKwor CisvKgorICogQ29udmVyc2lvbiBzcGVjaWZpZXIgd2hpY2ggZGV0ZXJtaW5lcyBob3cgd2UgZXhw YW5kIHRoZSBKU09OIGVsZW1lbnQgaW50bworICogc3RyaW5nLgorICovCit0eXBlZGVmIGVudW0K K3sKKwlTcGVjVHlwZU5hbWUsCisJU3BlY09wZXJhdG9yTmFtZSwKKwlTcGVjRG90dGVkTmFtZSwK KwlTcGVjU3RyaW5nLAorCVNwZWNOdW1iZXIsCisJU3BlY1N0cmluZ0xpdGVyYWwsCisJU3BlY0lk ZW50aWZpZXIsCisJU3BlY1JvbGUKK30gY29udlNwZWNpZmllcjsKKworLyoKKyAqIEEgdGVybmFy eSB2YWx1ZSB0aGF0IHJlcHJlc2VudHMgYSBib29sZWFuIHR5cGUgSnNvbmJWYWx1ZS4KKyAqLwor dHlwZWRlZiBlbnVtCit7CisJdHZfYWJzZW50LAorCXR2X3RydWUsCisJdHZfZmFsc2UKK30JCQlq c29uX3RyaXZhbHVlOworCitzdGF0aWMgYm9vbCBleHBhbmRfb25lX2pzb25iX2VsZW1lbnQoU3Ry aW5nSW5mbyBidWYsIGNoYXIgKnBhcmFtLAorCQkJCQkJCQkJIEpzb25iVmFsdWUgKmpzb252YWws IGNvbnZTcGVjaWZpZXIgc3BlY2lmaWVyLAorCQkJCQkJCQkJIGNvbnN0IGNoYXIgKmZtdCk7Citz dGF0aWMgdm9pZCBleHBhbmRfanNvbmJfYXJyYXkoU3RyaW5nSW5mbyBidWYsIGNoYXIgKnBhcmFt LAorCQkJCQkJCSAgIEpzb25iVmFsdWUgKmpzb25hcnIsIGNoYXIgKmFycmF5c2VwLAorCQkJCQkJ CSAgIGNvbnZTcGVjaWZpZXIgc3BlY2lmaWVyLCBjb25zdCBjaGFyICpmbXQpOworc3RhdGljIHZv aWQgZm10c3RyX2Vycm9yX2NhbGxiYWNrKHZvaWQgKmFyZyk7CitjaGFyICpkZXBhcnNlX2RkbF9q c29uX3RvX3N0cmluZyhjaGFyICpqc29uYik7CisKKy8qCisgKiBHaXZlbiBhIEpzb25iQ29udGFp bmVyLCBmaW5kIHRoZSBKc29uYlZhbHVlIHdpdGggdGhlIGdpdmVuIGtleSBuYW1lIGluIGl0Lgor ICogSWYgaXQncyBvZiBhIHR5cGUgb3RoZXIgdGhhbiBqYnZCb29sLCBhbiBlcnJvciBpcyByYWlz ZWQuIElmIGl0IGRvZXNuJ3QKKyAqIGV4aXN0LCB0dl9hYnNlbnQgaXMgcmV0dXJuZWQ7IG90aGVy d2lzZSByZXR1cm4gdGhlIGFjdHVhbCBqc29uX3RyaXZhbHVlLgorICovCitzdGF0aWMganNvbl90 cml2YWx1ZQorZmluZF9ib29sX2luX2pzb25iY29udGFpbmVyKEpzb25iQ29udGFpbmVyICpjb250 YWluZXIsIGNoYXIgKmtleW5hbWUpCit7CisJSnNvbmJWYWx1ZQlrZXk7CisJSnNvbmJWYWx1ZSAq dmFsdWU7CisJanNvbl90cml2YWx1ZSByZXN1bHQ7CisKKwlrZXkudHlwZSA9IGpidlN0cmluZzsK KwlrZXkudmFsLnN0cmluZy52YWwgPSBrZXluYW1lOworCWtleS52YWwuc3RyaW5nLmxlbiA9IHN0 cmxlbihrZXluYW1lKTsKKwl2YWx1ZSA9IGZpbmRKc29uYlZhbHVlRnJvbUNvbnRhaW5lcihjb250 YWluZXIsCisJCQkJCQkJCQkJSkJfRk9CSkVDVCwgJmtleSk7CisJaWYgKHZhbHVlID09IE5VTEwp CisJCXJldHVybiB0dl9hYnNlbnQ7CisJaWYgKHZhbHVlLT50eXBlICE9IGpidkJvb2wpCisJCWVy ZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxV RSksCisJCQkJIGVycm1zZygiZWxlbWVudCBcIiVzXCIgaXMgbm90IG9mIHR5cGUgYm9vbGVhbiIs CisJCQkJCQlrZXluYW1lKSkpOworCXJlc3VsdCA9IHZhbHVlLT52YWwuYm9vbGVhbiA/IHR2X3Ry dWUgOiB0dl9mYWxzZTsKKwlwZnJlZSh2YWx1ZSk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisv KgorICogR2l2ZW4gYSBKc29uYkNvbnRhaW5lciwgZmluZCB0aGUgSnNvbmJWYWx1ZSB3aXRoIHRo ZSBnaXZlbiBrZXkgbmFtZSBpbiBpdC4KKyAqIElmIGl0J3Mgb2YgYSB0eXBlIG90aGVyIHRoYW4g amJ2U3RyaW5nLCBhbiBlcnJvciBpcyByYWlzZWQuICBJZiBpdCBkb2Vzbid0CisgKiBleGlzdCwg YW4gZXJyb3IgaXMgcmFpc2VkIHVubGVzcyBtaXNzaW5nX29rOyBvdGhlcndpc2UgcmV0dXJuIE5V TEwuCisgKgorICogSWYgaXQgZXhpc3RzIGFuZCBpcyBhIHN0cmluZywgYSBmcmVzaGx5IHBhbGxv YydlZCBjb3B5IGlzIHJldHVybmVkLgorICoKKyAqIElmICpsZW5ndGggaXMgbm90IE5VTEwsIGl0 IGlzIHNldCB0byB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcuCisgKi8KK3N0YXRpYyBjaGFyICoK K2ZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKEpzb25iQ29udGFpbmVyICpjb250YWluZXIs IGNoYXIgKmtleW5hbWUsCisJCQkJCQkJICBib29sIG1pc3Npbmdfb2ssIGludCAqbGVuZ3RoKQor eworCUpzb25iVmFsdWUJa2V5OworCUpzb25iVmFsdWUgKnZhbHVlOworCWNoYXIJICAgKnN0cjsK KworCS8qIFhYWCB2ZXJpZnkgdGhhdCB0aGlzIGlzIGFuIG9iamVjdCwgbm90IGFuIGFycmF5ICov CisKKwlrZXkudHlwZSA9IGpidlN0cmluZzsKKwlrZXkudmFsLnN0cmluZy52YWwgPSBrZXluYW1l OworCWtleS52YWwuc3RyaW5nLmxlbiA9IHN0cmxlbihrZXluYW1lKTsKKwl2YWx1ZSA9IGZpbmRK c29uYlZhbHVlRnJvbUNvbnRhaW5lcihjb250YWluZXIsCisJCQkJCQkJCQkJSkJfRk9CSkVDVCwg JmtleSk7CisJaWYgKHZhbHVlID09IE5VTEwpCisJeworCQlpZiAobWlzc2luZ19vaykKKwkJCXJl dHVybiBOVUxMOworCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJ RF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coIm1pc3NpbmcgZWxlbWVudCBcIiVzXCIg aW4gSlNPTiBvYmplY3QiLCBrZXluYW1lKSkpOworCX0KKworCWlmICh2YWx1ZS0+dHlwZSAhPSBq YnZTdHJpbmcpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElE X1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygiZWxlbWVudCBcIiVzXCIgaXMgbm90IG9m IHR5cGUgc3RyaW5nIiwga2V5bmFtZSkpKTsKKworCXN0ciA9IHBuc3RyZHVwKHZhbHVlLT52YWwu c3RyaW5nLnZhbCwgdmFsdWUtPnZhbC5zdHJpbmcubGVuKTsKKwlpZiAobGVuZ3RoKQorCQkqbGVu Z3RoID0gdmFsdWUtPnZhbC5zdHJpbmcubGVuOworCXBmcmVlKHZhbHVlKTsKKwlyZXR1cm4gc3Ry OworfQorCisjZGVmaW5lIEFEVkFOQ0VfUEFSU0VfUE9JTlRFUihwdHIsZW5kX3B0cikgXAorCWRv IHsgXAorCQlpZiAoKysocHRyKSA+PSAoZW5kX3B0cikpIFwKKwkJCWVyZXBvcnQoRVJST1IsIFwK KwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksIFwKKwkJCQkJ IGVycm1zZygidW50ZXJtaW5hdGVkIGZvcm1hdCBzcGVjaWZpZXIiKSkpOyBcCisJfSB3aGlsZSAo MCkKKworLyoKKyAqIFJlY3Vyc2l2ZSBoZWxwZXIgZm9yIGRlcGFyc2VfZGRsX2pzb25fdG9fc3Ry aW5nLgorICoKKyAqIEZpbmQgdGhlICJmbXQiIGVsZW1lbnQgaW4gdGhlIGdpdmVuIGNvbnRhaW5l ciwgYW5kIGV4cGFuZCBpdCBpbnRvIHRoZQorICogcHJvdmlkZWQgU3RyaW5nSW5mby4KKyAqLwor c3RhdGljIHZvaWQKK2V4cGFuZF9mbXRfcmVjdXJzaXZlKEpzb25iQ29udGFpbmVyICpjb250YWlu ZXIsIFN0cmluZ0luZm8gYnVmKQoreworCUpzb25iVmFsdWUJa2V5OworCUpzb25iVmFsdWUgKnZh bHVlOworCWNvbnN0IGNoYXIgKmNwOworCWNvbnN0IGNoYXIgKnN0YXJ0X3B0cjsKKwljb25zdCBj aGFyICplbmRfcHRyOworCWludAkJCWxlbjsKKworCXN0YXJ0X3B0ciA9IGZpbmRfc3RyaW5nX2lu X2pzb25iY29udGFpbmVyKGNvbnRhaW5lciwgImZtdCIsIGZhbHNlLCAmbGVuKTsKKwllbmRfcHRy ID0gc3RhcnRfcHRyICsgbGVuOworCisJZm9yIChjcCA9IHN0YXJ0X3B0cjsgY3AgPCBlbmRfcHRy OyBjcCsrKQorCXsKKwkJY29udlNwZWNpZmllciBzcGVjaWZpZXI7CisJCWJvb2wJCWlzX2FycmF5 ID0gZmFsc2U7CisJCWNoYXIJICAgKnBhcmFtID0gTlVMTDsKKwkJY2hhcgkgICAqYXJyYXlzZXAg PSBOVUxMOworCisJCWlmICgqY3AgIT0gJyUnKQorCQl7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hh ck1hY3JvKGJ1ZiwgKmNwKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKworCQlBRFZBTkNFX1BBUlNF X1BPSU5URVIoY3AsIGVuZF9wdHIpOworCisJCS8qIEVhc3kgY2FzZTogJSUgb3V0cHV0cyBhIHNp bmdsZSAlICovCisJCWlmICgqY3AgPT0gJyUnKQorCQl7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hh ck1hY3JvKGJ1ZiwgKmNwKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogU2NhbiB0 aGUgbWFuZGF0b3J5IGVsZW1lbnQgbmFtZS4gIEFsbG93IGZvciBhbiBhcnJheSBzZXBhcmF0b3IK KwkJICogKHdoaWNoIG1heSBiZSB0aGUgZW1wdHkgc3RyaW5nKSB0byBiZSBzcGVjaWZpZWQgYWZ0 ZXIgYSBjb2xvbi4KKwkJICovCisJCWlmICgqY3AgPT0gJ3snKQorCQl7CisJCQlTdHJpbmdJbmZv RGF0YSBwYXJidWY7CisJCQlTdHJpbmdJbmZvRGF0YSBhcnJheXNlcGJ1ZjsKKwkJCVN0cmluZ0lu Zm8JYXBwZW5kVG87CisKKwkJCWluaXRTdHJpbmdJbmZvKCZwYXJidWYpOworCQkJYXBwZW5kVG8g PSAmcGFyYnVmOworCisJCQlBRFZBTkNFX1BBUlNFX1BPSU5URVIoY3AsIGVuZF9wdHIpOworCQkJ Zm9yICg7IGNwIDwgZW5kX3B0cjspCisJCQl7CisJCQkJaWYgKCpjcCA9PSAnOicpCisJCQkJewor CQkJCQkvKgorCQkJCQkgKiBGb3VuZCBhcnJheSBzZXBhcmF0b3IgZGVsaW1pdGVyOyBlbGVtZW50 IG5hbWUgaXMgbm93CisJCQkJCSAqIGNvbXBsZXRlLCBzdGFydCBmaWxsaW5nIHRoZSBzZXBhcmF0 b3IuCisJCQkJCSAqLworCQkJCQlpbml0U3RyaW5nSW5mbygmYXJyYXlzZXBidWYpOworCQkJCQlh cHBlbmRUbyA9ICZhcnJheXNlcGJ1ZjsKKwkJCQkJaXNfYXJyYXkgPSB0cnVlOworCQkJCQlBRFZB TkNFX1BBUlNFX1BPSU5URVIoY3AsIGVuZF9wdHIpOworCQkJCQljb250aW51ZTsKKwkJCQl9CisK KwkJCQlpZiAoKmNwID09ICd9JykKKwkJCQl7CisJCQkJCUFEVkFOQ0VfUEFSU0VfUE9JTlRFUihj cCwgZW5kX3B0cik7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlhcHBlbmRTdHJpbmdJbmZvQ2hh ck1hY3JvKGFwcGVuZFRvLCAqY3ApOworCQkJCUFEVkFOQ0VfUEFSU0VfUE9JTlRFUihjcCwgZW5k X3B0cik7CisJCQl9CisJCQlwYXJhbSA9IHBhcmJ1Zi5kYXRhOworCQkJaWYgKGlzX2FycmF5KQor CQkJCWFycmF5c2VwID0gYXJyYXlzZXBidWYuZGF0YTsKKwkJfQorCQlpZiAocGFyYW0gPT0gTlVM TCkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJB TUVURVJfVkFMVUUpLAorCQkJCQkgZXJybXNnKCJtaXNzaW5nIGNvbnZlcnNpb24gbmFtZSBpbiBj b252ZXJzaW9uIHNwZWNpZmllciIpKSk7CisKKwkJc3dpdGNoICgqY3ApCisJCXsKKwkJCWNhc2Ug J0knOgorCQkJCXNwZWNpZmllciA9IFNwZWNJZGVudGlmaWVyOworCQkJCWJyZWFrOworCQkJY2Fz ZSAnRCc6CisJCQkJc3BlY2lmaWVyID0gU3BlY0RvdHRlZE5hbWU7CisJCQkJYnJlYWs7CisJCQlj YXNlICdzJzoKKwkJCQlzcGVjaWZpZXIgPSBTcGVjU3RyaW5nOworCQkJCWJyZWFrOworCQkJY2Fz ZSAnTCc6CisJCQkJc3BlY2lmaWVyID0gU3BlY1N0cmluZ0xpdGVyYWw7CisJCQkJYnJlYWs7CisJ CQljYXNlICdUJzoKKwkJCQlzcGVjaWZpZXIgPSBTcGVjVHlwZU5hbWU7CisJCQkJYnJlYWs7CisJ CQljYXNlICdPJzoKKwkJCQlzcGVjaWZpZXIgPSBTcGVjT3BlcmF0b3JOYW1lOworCQkJCWJyZWFr OworCQkJY2FzZSAnbic6CisJCQkJc3BlY2lmaWVyID0gU3BlY051bWJlcjsKKwkJCQlicmVhazsK KwkJCWNhc2UgJ1InOgorCQkJCXNwZWNpZmllciA9IFNwZWNSb2xlOworCQkJCWJyZWFrOworCQkJ ZGVmYXVsdDoKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZB TElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJpbnZhbGlkIGNvbnZlcnNpb24g c3BlY2lmaWVyIFwiJWNcIiIsICpjcCkpKTsKKwkJfQorCisJCS8qCisJCSAqIE9idGFpbiB0aGUg ZWxlbWVudCB0byBiZSBleHBhbmRlZC4KKwkJICovCisJCWtleS50eXBlID0gamJ2U3RyaW5nOwor CQlrZXkudmFsLnN0cmluZy52YWwgPSBwYXJhbTsKKwkJa2V5LnZhbC5zdHJpbmcubGVuID0gc3Ry bGVuKHBhcmFtKTsKKworCQl2YWx1ZSA9IGZpbmRKc29uYlZhbHVlRnJvbUNvbnRhaW5lcihjb250 YWluZXIsIEpCX0ZPQkpFQ1QsICZrZXkpOworCisJCS8qCisJCSAqIEV4cGFuZCB0aGUgZGF0YSAo cG9zc2libHkgYW4gYXJyYXkpIGludG8gdGhlIG91dHB1dCBTdHJpbmdJbmZvLgorCQkgKi8KKwkJ aWYgKGlzX2FycmF5KQorCQkJZXhwYW5kX2pzb25iX2FycmF5KGJ1ZiwgcGFyYW0sIHZhbHVlLCBh cnJheXNlcCwgc3BlY2lmaWVyLCBzdGFydF9wdHIpOworCQllbHNlCisJCQlleHBhbmRfb25lX2pz b25iX2VsZW1lbnQoYnVmLCBwYXJhbSwgdmFsdWUsIHNwZWNpZmllciwgc3RhcnRfcHRyKTsKKwl9 Cit9CisKKy8qCisgKiBFeHBhbmQgYSBqc29uIHZhbHVlIGFzIGEgcXVvdGVkIGlkZW50aWZpZXIu ICBUaGUgdmFsdWUgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4KKyAqLworc3RhdGljIHZvaWQKK2V4 cGFuZF9qc29udmFsX2lkZW50aWZpZXIoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252 YWwpCit7CisJY2hhcgkgICAqc3RyOworCisJQXNzZXJ0KGpzb252YWwtPnR5cGUgPT0gamJ2U3Ry aW5nKTsKKworCXN0ciA9IHBuc3RyZHVwKGpzb252YWwtPnZhbC5zdHJpbmcudmFsLCBqc29udmFs LT52YWwuc3RyaW5nLmxlbik7CisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIHF1b3RlX2lk ZW50aWZpZXIoc3RyKSk7CisJcGZyZWUoc3RyKTsKK30KKworLyoKKyAqIEV4cGFuZCBhIGpzb24g dmFsdWUgYXMgYSBkb3Qtc2VwYXJhdGVkLW5hbWUuICBUaGUgdmFsdWUgbXVzdCBiZSBvZiB0eXBl CisgKiBiaW5hcnkgYW5kIG1heSBjb250YWluIGVsZW1lbnRzICJzY2hlbWFuYW1lIiAob3B0aW9u YWwpLCAib2JqbmFtZSIKKyAqIChtYW5kYXRvcnkpLCAiYXR0cm5hbWUiIChvcHRpb25hbCkuICBE b3VibGUgcXVvdGVzIGFyZSBhZGRlZCB0byBlYWNoIGVsZW1lbnQKKyAqIGFzIG5lY2Vzc2FyeSwg YW5kIGRvdCBzZXBhcmF0b3JzIHdoZXJlIG5lZWRlZC4KKyAqCisgKiBPbmUgZGF5IHdlIG1pZ2h0 IG5lZWQgYSAiY2F0YWxvZyIgZWxlbWVudCBhcyB3ZWxsLCBidXQgbm8gY3VycmVudCB1c2UgY2Fz ZQorICogbmVlZHMgdGhhdC4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9qc29udmFsX2RvdHRl ZG5hbWUoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJY2hhcgkgICAq c3RyOworCisJQXNzZXJ0KGpzb252YWwtPnR5cGUgPT0gamJ2QmluYXJ5KTsKKworCXN0ciA9IGZp bmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJ CQkJCQkJCQkic2NoZW1hbmFtZSIsIHRydWUsIE5VTEwpOworCWlmIChzdHIpCisJeworCQlhcHBl bmRTdHJpbmdJbmZvKGJ1ZiwgIiVzLiIsIHF1b3RlX2lkZW50aWZpZXIoc3RyKSk7CisJCXBmcmVl KHN0cik7CisJfQorCisJc3RyID0gZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoanNvbnZh bC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCSJvYmpuYW1lIiwgZmFsc2UsIE5VTEwpOwor CWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMiLCBxdW90ZV9pZGVudGlmaWVyKHN0cikpOworCXBm cmVlKHN0cik7CisKKwlzdHIgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihqc29udmFs LT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJImF0dHJuYW1lIiwgdHJ1ZSwgTlVMTCk7CisJ aWYgKHN0cikKKwl7CisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiLiVzIiwgcXVvdGVfaWRlbnRp ZmllcihzdHIpKTsKKwkJcGZyZWUoc3RyKTsKKwl9Cit9CisKKy8qCisgKiBFeHBhbmQgYSBKU09O IHZhbHVlIGFzIGEgdHlwZSBuYW1lLgorICovCitzdGF0aWMgdm9pZAorZXhwYW5kX2pzb252YWxf dHlwZW5hbWUoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJY2hhcgkg ICAqc2NoZW1hID0gTlVMTDsKKwljaGFyCSAgICp0eXBlbmFtZTsKKwljaGFyCSAgICp0eXBtb2Rz dHI7CisJanNvbl90cml2YWx1ZSBpc19hcnJheTsKKwljaGFyCSAgICphcnJheV9kZWNvcjsKKwor CS8qCisJICogV2Ugb21pdCBzY2hlbWEtcXVhbGlmeWluZyB0aGUgb3V0cHV0IG5hbWUgaWYgdGhl IHNjaGVtYSBlbGVtZW50IGlzCisJICogZWl0aGVyIHRoZSBlbXB0eSBzdHJpbmcgb3IgTlVMTDsg dGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aG9zZSB0d28gY2FzZXMKKwkgKiBpcyB0aGF0IGluIHRo ZSBsYXR0ZXIgd2UgcXVvdGUgdGhlIHR5cGUgbmFtZSwgaW4gdGhlIGZvcm1lciB3ZSBkb24ndC4K KwkgKiBUaGlzIGFsbG93cyBmb3IgdHlwZXMgd2l0aCBzcGVjaWFsIHR5cG1vZCBuZWVkcywgc3Vj aCBhcyBpbnRlcnZhbCBhbmQKKwkgKiB0aW1lc3RhbXAgKHNlZSBmb3JtYXRfdHlwZV9kZXRhaWxl ZCksIHdoaWxlIGF0IHRoZSBzYW1lIHRpbWUgYWxsb3dpbmcKKwkgKiBmb3IgdGhlIHNjaGVtYSBu YW1lIHRvIGJlIG9taXR0ZWQgZnJvbSB0eXBlIG5hbWVzIHRoYXQgcmVxdWlyZSBxdW90ZXMKKwkg KiBidXQgYXJlIHRvIGJlIG9idGFpbmVkIGZyb20gYSB1c2VyIHNjaGVtYS4KKwkgKi8KKworCXNj aGVtYSA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnku ZGF0YSwKKwkJCQkJCQkJCQkgICAic2NoZW1hbmFtZSIsIHRydWUsIE5VTEwpOworCXR5cGVuYW1l ID0gZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRh LAorCQkJCQkJCQkJCQkgInR5cGVuYW1lIiwgZmFsc2UsIE5VTEwpOworCXR5cG1vZHN0ciA9IGZp bmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJ CQkJCQkJCQkJICAidHlwbW9kIiwgdHJ1ZSwgTlVMTCk7CisJaXNfYXJyYXkgPSBmaW5kX2Jvb2xf aW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCSAg ICJ0eXBhcnJheSIpOworCXN3aXRjaCAoaXNfYXJyYXkpCisJeworCQljYXNlIHR2X3RydWU6CisJ CQlhcnJheV9kZWNvciA9ICJbXSI7CisJCQlicmVhazsKKworCQljYXNlIHR2X2ZhbHNlOgorCQkJ YXJyYXlfZGVjb3IgPSAiIjsKKwkJCWJyZWFrOworCisJCWNhc2UgdHZfYWJzZW50OgorCQlkZWZh dWx0OgorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BB UkFNRVRFUl9WQUxVRSksCisJCQkJCSBlcnJtc2coIm1pc3NpbmcgdHlwYXJyYXkgZWxlbWVudCIp KSk7CisJfQorCisJaWYgKHNjaGVtYSA9PSBOVUxMKQorCQlhcHBlbmRTdHJpbmdJbmZvKGJ1Ziwg IiVzIiwgcXVvdGVfaWRlbnRpZmllcih0eXBlbmFtZSkpOworCWVsc2UgaWYgKHNjaGVtYVswXSA9 PSAnXDAnKQorCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzIiwgdHlwZW5hbWUpOwkvKiBTcGVj aWFsIHR5cG1vZCBuZWVkcyAqLworCWVsc2UKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcy4l cyIsIHF1b3RlX2lkZW50aWZpZXIoc2NoZW1hKSwKKwkJCQkJCSBxdW90ZV9pZGVudGlmaWVyKHR5 cGVuYW1lKSk7CisKKwlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzJXMiLCB0eXBtb2RzdHIgPyB0 eXBtb2RzdHIgOiAiIiwgYXJyYXlfZGVjb3IpOworCXBmcmVlKHNjaGVtYSk7CisJcGZyZWUodHlw ZW5hbWUpOworCXBmcmVlKHR5cG1vZHN0cik7Cit9CisKKy8qCisgKiBFeHBhbmQgYSBKU09OIHZh bHVlIGFzIGFuIG9wZXJhdG9yIG5hbWUuCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNvbnZh bF9vcGVyYXRvcihTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkKK3sKKwljaGFy CSAgICpzdHI7CisKKwlzdHIgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihqc29udmFs LT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJInNjaGVtYW5hbWUiLCB0cnVlLCBOVUxMKTsK KwkvKiBTY2hlbWEgbWlnaHQgYmUgTlVMTCBvciBlbXB0eSAqLworCWlmIChzdHIgIT0gTlVMTCAm JiBzdHJbMF0gIT0gJ1wwJykKKwl7CisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMuIiwgcXVv dGVfaWRlbnRpZmllcihzdHIpKTsKKwkJcGZyZWUoc3RyKTsKKwl9CisKKwlzdHIgPSBmaW5kX3N0 cmluZ19pbl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJ CQkJIm9iam5hbWUiLCBmYWxzZSwgTlVMTCk7CisKKwlpZiAoc3RyKQorCXsKKwkJYXBwZW5kU3Ry aW5nSW5mb1N0cmluZyhidWYsIHN0cik7CisJCXBmcmVlKHN0cik7CisJfQorfQorCisvKgorICog RXhwYW5kIGEgSlNPTiB2YWx1ZSBhcyBhIHN0cmluZy4gIFRoZSB2YWx1ZSBtdXN0IGJlIG9mIHR5 cGUgc3RyaW5nIG9yIG9mCisgKiB0eXBlIEJpbmFyeS4gIEluIHRoZSBsYXR0ZXIgY2FzZSwgaXQg bXVzdCBjb250YWluIGEgImZtdCIgZWxlbWVudCB3aGljaCB3aWxsCisgKiBiZSByZWN1cnNpdmVs eSBleHBhbmRlZDsgYWxzbywgaWYgdGhlIG9iamVjdCBjb250YWlucyBhbiBlbGVtZW50ICJwcmVz ZW50IgorICogYW5kIGl0IGlzIHNldCB0byBmYWxzZSwgdGhlIGV4cGFuc2lvbiBpcyB0aGUgZW1w dHkgc3RyaW5nLgorICoKKyAqIFJldHVybnMgZmFsc2UgaWYgbm8gYWN0dWFsIGV4cGFuc2lvbiB3 YXMgbWFkZSBkdWUgdG8gdGhlICJwcmVzZW50IiBmbGFnCisgKiBiZWluZyBzZXQgdG8gImZhbHNl Ii4KKyAqCisgKiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIHRvIGNoZWNrIGpzb252YWwgaXMg b2YgdHlwZSBqYnZTdHJpbmcgb3IgamJ2QmluYXJ5LgorICovCitzdGF0aWMgYm9vbAorZXhwYW5k X2pzb252YWxfc3RyaW5nKFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29udmFsKQorewor CWlmIChqc29udmFsLT50eXBlID09IGpidlN0cmluZykKKwl7CisJCWFwcGVuZEJpbmFyeVN0cmlu Z0luZm8oYnVmLCBqc29udmFsLT52YWwuc3RyaW5nLnZhbCwKKwkJCQkJCQkgICBqc29udmFsLT52 YWwuc3RyaW5nLmxlbik7CisJfQorCWVsc2UgaWYgKGpzb252YWwtPnR5cGUgPT0gamJ2QmluYXJ5 KQorCXsKKwkJanNvbl90cml2YWx1ZSBwcmVzZW50OworCisJCXByZXNlbnQgPSBmaW5kX2Jvb2xf aW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCQkg ICJwcmVzZW50Iik7CisKKwkJLyoKKwkJICogSWYgInByZXNlbnQiIGlzIHNldCB0byBmYWxzZSwg dGhpcyBlbGVtZW50IGV4cGFuZHMgdG8gZW1wdHk7CisJCSAqIG90aGVyd2lzZSAoZWl0aGVyIHRy dWUgb3IgYWJzZW50KSwgZmFsbCB0aHJvdWdoIHRvIGV4cGFuZCAiZm10Ii4KKwkJICovCisJCWlm IChwcmVzZW50ID09IHR2X2ZhbHNlKQorCQkJcmV0dXJuIGZhbHNlOworCisJCWV4cGFuZF9mbXRf cmVjdXJzaXZlKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwgYnVmKTsKKwl9CisJZWxzZQorCQly ZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIEV4cGFuZCBhIEpTT04g dmFsdWUgYXMgYSBzdHJpbmcgbGl0ZXJhbC4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9qc29u dmFsX3N0cmxpdChTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkKK3sKKwljaGFy CSAgICpzdHI7CisJU3RyaW5nSW5mb0RhdGEgZHFkZWxpbTsKKwlzdGF0aWMgY29uc3QgY2hhciBk cXN1ZmZpeGVzW10gPSAiX1hZWlpZWF8iOworCWludAkJCWRxbmV4dGNoYXIgPSAwOworCisJc3Ry ID0gcG5zdHJkdXAoanNvbnZhbC0+dmFsLnN0cmluZy52YWwsIGpzb252YWwtPnZhbC5zdHJpbmcu bGVuKTsKKworCS8qIEVhc3kgY2FzZTogaWYgdGhlcmUgYXJlIG5vICcgYW5kIG5vIFwsIGp1c3Qg dXNlIGEgc2luZ2xlIHF1b3RlICovCisJaWYgKHN0cnBicmsoc3RyLCAiXCdcXCIpID09IE5VTEwp CisJeworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiclcyciLCBzdHIpOworCQlwZnJlZShzdHIp OworCQlyZXR1cm47CisJfQorCisJLyogT3RoZXJ3aXNlIG5lZWQgdG8gZmluZCBhIHVzZWZ1bCBk b2xsYXItcXVvdGUgZGVsaW1pdGVyICovCisJaW5pdFN0cmluZ0luZm8oJmRxZGVsaW0pOworCWFw cGVuZFN0cmluZ0luZm9TdHJpbmcoJmRxZGVsaW0sICIkIik7CisJd2hpbGUgKHN0cnN0cihzdHIs IGRxZGVsaW0uZGF0YSkgIT0gTlVMTCkKKwl7CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZkcWRl bGltLCBkcXN1ZmZpeGVzW2RxbmV4dGNoYXIrK10pOworCQlkcW5leHRjaGFyID0gZHFuZXh0Y2hh ciAlIChzaXplb2YoZHFzdWZmaXhlcykgLSAxKTsKKwl9CisJLyogQWRkIHRyYWlsaW5nICQgKi8K KwlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmZHFkZWxpbSwgJyQnKTsKKworCS8qIEFuZCBmaW5hbGx5 IHByb2R1Y2UgdGhlIHF1b3RlZCBsaXRlcmFsIGludG8gdGhlIG91dHB1dCBTdHJpbmdJbmZvICov CisJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcyVzJXMiLCBkcWRlbGltLmRhdGEsIHN0ciwgZHFk ZWxpbS5kYXRhKTsKKwlwZnJlZShkcWRlbGltLmRhdGEpOworCXBmcmVlKHN0cik7Cit9CisKKy8q CisgKiBFeHBhbmQgYSBKU09OIHZhbHVlIGFzIGFuIGludGVnZXIgcXVhbnRpdHkuCisgKi8KK3N0 YXRpYyB2b2lkCitleHBhbmRfanNvbnZhbF9udW1iZXIoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFs dWUgKmpzb252YWwpCit7CisJY2hhcgkgICAqc3RyZGF0dW07CisKKwlzdHJkYXR1bSA9IERhdHVt R2V0Q1N0cmluZyhEaXJlY3RGdW5jdGlvbkNhbGwxKG51bWVyaWNfb3V0LAorCQkJCQkJCQkJCQkJ ICAgTnVtZXJpY0dldERhdHVtKGpzb252YWwtPnZhbC5udW1lcmljKSkpOworCWFwcGVuZFN0cmlu Z0luZm9TdHJpbmcoYnVmLCBzdHJkYXR1bSk7CisJcGZyZWUoc3RyZGF0dW0pOworfQorCisvKgor ICogRXhwYW5kIGEgSlNPTiB2YWx1ZSBhcyBhIHJvbGUgbmFtZS4gIElmIHRoZSBpc19wdWJsaWMg ZWxlbWVudCBpcyBzZXQgdG8KKyAqIHRydWUsIFBVQkxJQyBpcyBleHBhbmRlZCAobm8gcXVvdGVz KTsgb3RoZXJ3aXNlLCBleHBhbmQgdGhlIGdpdmVuIHJvbGUgbmFtZSwKKyAqIHF1b3RpbmcgYXMg YW4gaWRlbnRpZmllci4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9qc29udmFsX3JvbGUoU3Ry aW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJanNvbl90cml2YWx1ZSBpc19w dWJsaWM7CisKKwlpc19wdWJsaWMgPSBmaW5kX2Jvb2xfaW5fanNvbmJjb250YWluZXIoanNvbnZh bC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCQkiaXNfcHVibGljIik7CisJaWYgKGlzX3B1 YmxpYyA9PSB0dl90cnVlKQorCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIlBVQkxJQyIp OworCWVsc2UKKwl7CisJCWNoYXIJICAgKnJvbGVuYW1lOworCisJCXJvbGVuYW1lID0gZmluZF9z dHJpbmdfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJ CQkJCQkJICJyb2xlbmFtZSIsIGZhbHNlLCBOVUxMKTsKKwkJaWYgKHJvbGVuYW1lKQorCQl7CisJ CQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgcXVvdGVfaWRlbnRpZmllcihyb2xlbmFtZSkp OworCQkJcGZyZWUocm9sZW5hbWUpOworCQl9CisJfQorfQorCisvKgorICogRXhwYW5kIG9uZSBK U09OIGVsZW1lbnQgaW50byB0aGUgb3V0cHV0IFN0cmluZ0luZm8gYWNjb3JkaW5nIHRvIHRoZQor ICogY29udmVyc2lvbiBzcGVjaWZpZXIuICBUaGUgZWxlbWVudCB0eXBlIGlzIHZhbGlkYXRlZCwg YW5kIGFuIGVycm9yIGlzIHJhaXNlZAorICogaWYgaXQgZG9lc24ndCBtYXRjaCB3aGF0IHdlIGV4 cGVjdCBmb3IgdGhlIGNvbnZlcnNpb24gc3BlY2lmaWVyLgorICoKKyAqIFJldHVybnMgZmFsc2Ug aWYgbm8gYWN0dWFsIGV4cGFuc2lvbiB3YXMgbWFkZSAoZHVlIHRvIHRoZSAicHJlc2VudCIgZmxh ZworICogYmVpbmcgc2V0IHRvICJmYWxzZSIgaW4gZm9ybWF0dGVkIHN0cmluZyBleHBhbnNpb24p LgorICovCitzdGF0aWMgYm9vbAorZXhwYW5kX29uZV9qc29uYl9lbGVtZW50KFN0cmluZ0luZm8g YnVmLCBjaGFyICpwYXJhbSwgSnNvbmJWYWx1ZSAqanNvbnZhbCwKKwkJCQkJCSBjb252U3BlY2lm aWVyIHNwZWNpZmllciwgY29uc3QgY2hhciAqZm10KQoreworCWJvb2wJCXJlc3VsdCA9IHRydWU7 CisJRXJyb3JDb250ZXh0Q2FsbGJhY2sgc3FsZXJyY29udGV4dDsKKworCS8qIElmIHdlIHdlcmUg Z2l2ZW4gYSBmb3JtYXQgc3RyaW5nLCBzZXR1cCBhbiBlcmVwb3J0KCkgY29udGV4dCBjYWxsYmFj ayAqLworCWlmIChmbXQpCisJeworCQlzcWxlcnJjb250ZXh0LmNhbGxiYWNrID0gZm10c3RyX2Vy cm9yX2NhbGxiYWNrOworCQlzcWxlcnJjb250ZXh0LmFyZyA9ICh2b2lkICopIGZtdDsKKwkJc3Fs ZXJyY29udGV4dC5wcmV2aW91cyA9IGVycm9yX2NvbnRleHRfc3RhY2s7CisJCWVycm9yX2NvbnRl eHRfc3RhY2sgPSAmc3FsZXJyY29udGV4dDsKKwl9CisKKwlpZiAoIWpzb252YWwpCisJCWVyZXBv cnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSks CisJCQkJIGVycm1zZygiZWxlbWVudCBcIiVzXCIgbm90IGZvdW5kIiwgcGFyYW0pKSk7CisKKwlz d2l0Y2ggKHNwZWNpZmllcikKKwl7CisJCWNhc2UgU3BlY0lkZW50aWZpZXI6CisJCQlpZiAoanNv bnZhbC0+dHlwZSAhPSBqYnZTdHJpbmcpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJj b2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiZXhw ZWN0ZWQgSlNPTiBzdHJpbmcgZm9yICUlSSBlbGVtZW50IFwiJXNcIiwgZ290ICVkIiwKKwkJCQkJ CQkJcGFyYW0sIGpzb252YWwtPnR5cGUpKSk7CisJCQlleHBhbmRfanNvbnZhbF9pZGVudGlmaWVy KGJ1ZiwganNvbnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIFNwZWNEb3R0ZWROYW1lOgorCQkJ aWYgKGpzb252YWwtPnR5cGUgIT0gamJ2QmluYXJ5KQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJ CQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJt c2coImV4cGVjdGVkIEpTT04gc3RydWN0IGZvciAlJUQgZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIs CisJCQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJZXhwYW5kX2pzb252YWxfZG90 dGVkbmFtZShidWYsIGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjU3RyaW5nOgor CQkJaWYgKGpzb252YWwtPnR5cGUgIT0gamJ2U3RyaW5nICYmCisJCQkJanNvbnZhbC0+dHlwZSAh PSBqYnZCaW5hcnkpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVf SU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBz dHJpbmcgb3Igc3RydWN0IGZvciAlJXMgZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJCQkJ CXBhcmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJcmVzdWx0ID0gZXhwYW5kX2pzb252YWxfc3Ry aW5nKGJ1ZiwganNvbnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIFNwZWNTdHJpbmdMaXRlcmFs OgorCQkJaWYgKGpzb252YWwtPnR5cGUgIT0gamJ2U3RyaW5nKQorCQkJCWVyZXBvcnQoRVJST1Is CisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJ CSBlcnJtc2coImV4cGVjdGVkIEpTT04gc3RyaW5nIGZvciAlJUwgZWxlbWVudCBcIiVzXCIsIGdv dCAlZCIsCisJCQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJZXhwYW5kX2pzb252 YWxfc3RybGl0KGJ1ZiwganNvbnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIFNwZWNUeXBlTmFt ZToKKwkJCWlmIChqc29udmFsLT50eXBlICE9IGpidkJpbmFyeSkKKwkJCQllcmVwb3J0KEVSUk9S LAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJ CQkgZXJybXNnKCJleHBlY3RlZCBKU09OIHN0cnVjdCBmb3IgJSVUIGVsZW1lbnQgXCIlc1wiLCBn b3QgJWQiLAorCQkJCQkJCQlwYXJhbSwganNvbnZhbC0+dHlwZSkpKTsKKwkJCWV4cGFuZF9qc29u dmFsX3R5cGVuYW1lKGJ1ZiwganNvbnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIFNwZWNPcGVy YXRvck5hbWU6CisJCQlpZiAoanNvbnZhbC0+dHlwZSAhPSBqYnZCaW5hcnkpCisJCQkJZXJlcG9y dChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUp LAorCQkJCQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBzdHJ1Y3QgZm9yICUlTyBlbGVtZW50IFwi JXNcIiwgZ290ICVkIiwKKwkJCQkJCQkJcGFyYW0sIGpzb252YWwtPnR5cGUpKSk7CisJCQlleHBh bmRfanNvbnZhbF9vcGVyYXRvcihidWYsIGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBT cGVjTnVtYmVyOgorCQkJaWYgKGpzb252YWwtPnR5cGUgIT0gamJ2TnVtZXJpYykKKwkJCQllcmVw b3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxV RSksCisJCQkJCQkgZXJybXNnKCJleHBlY3RlZCBKU09OIG51bWVyaWMgZm9yICUlbiBlbGVtZW50 IFwiJXNcIiwgZ290ICVkIiwKKwkJCQkJCQkJcGFyYW0sIGpzb252YWwtPnR5cGUpKSk7CisJCQll eHBhbmRfanNvbnZhbF9udW1iZXIoYnVmLCBqc29udmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2Ug U3BlY1JvbGU6CisJCQlpZiAoanNvbnZhbC0+dHlwZSAhPSBqYnZCaW5hcnkpCisJCQkJZXJlcG9y dChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUp LAorCQkJCQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBzdHJ1Y3QgZm9yICUlUiBlbGVtZW50IFwi JXNcIiwgZ290ICVkIiwKKwkJCQkJCQkJcGFyYW0sIGpzb252YWwtPnR5cGUpKSk7CisJCQlleHBh bmRfanNvbnZhbF9yb2xlKGJ1ZiwganNvbnZhbCk7CisJCQlicmVhazsKKwl9CisKKwlpZiAoZm10 KQorCQllcnJvcl9jb250ZXh0X3N0YWNrID0gc3FsZXJyY29udGV4dC5wcmV2aW91czsKKworCXJl dHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBJdGVyYXRlIG9uIHRoZSBlbGVtZW50cyBvZiBhIEpT T04gYXJyYXksIGV4cGFuZGluZyBlYWNoIG9uZSBpbnRvIHRoZSBvdXRwdXQKKyAqIFN0cmluZ0lu Zm8gcGVyIHRoZSBnaXZlbiBjb252ZXJzaW9uIHNwZWNpZmllciwgc2VwYXJhdGVkIGJ5IHRoZSBn aXZlbgorICogc2VwYXJhdG9yLgorICovCitzdGF0aWMgdm9pZAorZXhwYW5kX2pzb25iX2FycmF5 KFN0cmluZ0luZm8gYnVmLCBjaGFyICpwYXJhbSwKKwkJCQkgICBKc29uYlZhbHVlICpqc29uYXJy LCBjaGFyICphcnJheXNlcCwgY29udlNwZWNpZmllciBzcGVjaWZpZXIsCisJCQkJICAgY29uc3Qg Y2hhciAqZm10KQoreworCUVycm9yQ29udGV4dENhbGxiYWNrIHNxbGVycmNvbnRleHQ7CisJSnNv bmJDb250YWluZXIgKmNvbnRhaW5lcjsKKwlKc29uYkl0ZXJhdG9yICppdDsKKwlKc29uYlZhbHVl CXY7CisJaW50CQkJdHlwZTsKKwlib29sCQlmaXJzdCA9IHRydWU7CisJU3RyaW5nSW5mb0RhdGEg YXJyYXllbGVtOworCisJLyogSWYgd2Ugd2VyZSBnaXZlbiBhIGZvcm1hdCBzdHJpbmcsIHNldHVw IGFuIGVyZXBvcnQoKSBjb250ZXh0IGNhbGxiYWNrICovCisJaWYgKGZtdCkKKwl7CisJCXNxbGVy cmNvbnRleHQuY2FsbGJhY2sgPSBmbXRzdHJfZXJyb3JfY2FsbGJhY2s7CisJCXNxbGVycmNvbnRl eHQuYXJnID0gKHZvaWQgKikgZm10OworCQlzcWxlcnJjb250ZXh0LnByZXZpb3VzID0gZXJyb3Jf Y29udGV4dF9zdGFjazsKKwkJZXJyb3JfY29udGV4dF9zdGFjayA9ICZzcWxlcnJjb250ZXh0Owor CX0KKworCWlmIChqc29uYXJyLT50eXBlICE9IGpidkJpbmFyeSkKKwkJZXJlcG9ydChFUlJPUiwK KwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJy bXNnKCJlbGVtZW50IFwiJXNcIiBpcyBub3QgYSBKU09OIGFycmF5IiwgcGFyYW0pKSk7CisKKwlj b250YWluZXIgPSBqc29uYXJyLT52YWwuYmluYXJ5LmRhdGE7CisJaWYgKCFKc29uQ29udGFpbmVy SXNBcnJheShjb250YWluZXIpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNP REVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coImVsZW1lbnQgXCIlc1wi IGlzIG5vdCBhIEpTT04gYXJyYXkiLCBwYXJhbSkpKTsKKworCWluaXRTdHJpbmdJbmZvKCZhcnJh eWVsZW0pOworCisJaXQgPSBKc29uYkl0ZXJhdG9ySW5pdChjb250YWluZXIpOworCXdoaWxlICgo dHlwZSA9IEpzb25iSXRlcmF0b3JOZXh0KCZpdCwgJnYsIHRydWUpKSAhPSBXSkJfRE9ORSkKKwl7 CisJCWlmICh0eXBlID09IFdKQl9FTEVNKQorCQl7CisJCQlyZXNldFN0cmluZ0luZm8oJmFycmF5 ZWxlbSk7CisKKwkJCWlmIChleHBhbmRfb25lX2pzb25iX2VsZW1lbnQoJmFycmF5ZWxlbSwgcGFy YW0sICZ2LCBzcGVjaWZpZXIsIE5VTEwpKQorCQkJeworCQkJCWlmICghZmlyc3QpCisJCQkJCWFw cGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBhcnJheXNlcCk7CisKKwkJCQlhcHBlbmRCaW5hcnlT dHJpbmdJbmZvKGJ1ZiwgYXJyYXllbGVtLmRhdGEsIGFycmF5ZWxlbS5sZW4pOworCQkJCWZpcnN0 ID0gZmFsc2U7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoZm10KQorCQllcnJvcl9jb250ZXh0X3N0 YWNrID0gc3FsZXJyY29udGV4dC5wcmV2aW91czsKK30KKworLyoKKyAqIFdvcmtob3JzZSBmb3Ig ZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQuCisgKi8KK2NoYXIgKgorZGVwYXJzZV9kZGxfanNv bl90b19zdHJpbmcoY2hhciAqanNvbl9zdHIpCit7CisJRGF0dW0JCWQ7CisJSnNvbmIJICAgKmpz b25iOworCVN0cmluZ0luZm8JYnVmID0gKFN0cmluZ0luZm8pIHBhbGxvYzAoc2l6ZW9mKFN0cmlu Z0luZm9EYXRhKSk7CisKKwlpbml0U3RyaW5nSW5mbyhidWYpOworCisJZCA9IERpcmVjdEZ1bmN0 aW9uQ2FsbDEoanNvbmJfaW4sIFBvaW50ZXJHZXREYXR1bShqc29uX3N0cikpOworCWpzb25iID0g KEpzb25iICopIERhdHVtR2V0UG9pbnRlcihkKTsKKworCWV4cGFuZF9mbXRfcmVjdXJzaXZlKCZq c29uYi0+cm9vdCwgYnVmKTsKKworCXJldHVybiBidWYtPmRhdGE7Cit9CisKKy8qLS0tLS0tCisg KiBSZXR1cm5zIGEgZm9ybWF0dGVkIHN0cmluZyBmcm9tIGEgSlNPTiBvYmplY3QuCisgKgorICog VGhlIHN0YXJ0aW5nIHBvaW50IGlzIHRoZSBlbGVtZW50IG5hbWVkICJmbXQiICh3aGljaCBtdXN0 IGJlIGEgc3RyaW5nKS4KKyAqIFRoaXMgZm9ybWF0IHN0cmluZyBtYXkgY29udGFpbiB6ZXJvIG9y IG1vcmUgJS1lc2NhcGVzLCB3aGljaCBjb25zaXN0IG9mIGFuCisgKiBlbGVtZW50IG5hbWUgZW5j bG9zZWQgaW4geyB9LCBwb3NzaWJseSBmb2xsb3dlZCBieSBhIGNvbnZlcnNpb24gbW9kaWZpZXIs CisgKiBmb2xsb3dlZCBieSBhIGNvbnZlcnNpb24gc3BlY2lmaWVyLiAgUG9zc2libGUgY29udmVy c2lvbiBzcGVjaWZpZXJzIGFyZToKKyAqCisgKiAlCQlleHBhbmQgdG8gYSBsaXRlcmFsICUKKyAq IEkJCWV4cGFuZCBhcyBhIHNpbmdsZSwgbm9uLXF1YWxpZmllZCBpZGVudGlmaWVyCisgKiBECQll eHBhbmQgYXMgYSBwb3NzaWJseS1xdWFsaWZpZWQgaWRlbnRpZmllcgorICogVAkJZXhwYW5kIGFz IGEgdHlwZSBuYW1lCisgKiBPCQlleHBhbmQgYXMgYW4gb3BlcmF0b3IgbmFtZQorICogTAkJZXhw YW5kIGFzIGEgc3RyaW5nIGxpdGVyYWwgKHF1b3RlIHVzaW5nIHNpbmdsZSBxdW90ZXMpCisgKiBz CQlleHBhbmQgYXMgYSBzaW1wbGUgc3RyaW5nIChubyBxdW90aW5nKQorICogbgkJZXhwYW5kIGFz IGEgc2ltcGxlIG51bWJlciAobm8gcXVvdGluZykKKyAqIFIJCWV4cGFuZCBhcyBhIHJvbGUgbmFt ZSAocG9zc2libHkgcXVvdGVkIG5hbWUsIG9yIFBVQkxJQykKKyAqCisgKiBUaGUgZWxlbWVudCBu YW1lIG1heSBoYXZlIGFuIG9wdGlvbmFsIHNlcGFyYXRvciBzcGVjaWZpY2F0aW9uIHByZWNlZGVk CisgKiBieSBhIGNvbG9uLiAgSXRzIHByZXNlbmNlIGluZGljYXRlcyB0aGF0IHRoZSBlbGVtZW50 IGlzIGV4cGVjdGVkIHRvIGJlCisgKiBhbiBhcnJheTsgdGhlIHNwZWNpZmllZCBzZXBhcmF0b3Ig aXMgdXNlZCB0byBqb2luIHRoZSBhcnJheSBlbGVtZW50cy4KKyAqLS0tLS0tCisgKi8KK0RhdHVt CitkZGxfZGVwYXJzZV9leHBhbmRfY29tbWFuZChQR19GVU5DVElPTl9BUkdTKQoreworCXRleHQJ ICAgKmpzb24gPSBQR19HRVRBUkdfVEVYVF9QKDApOworCWNoYXIJICAgKmpzb25fc3RyOworCisJ anNvbl9zdHIgPSB0ZXh0X3RvX2NzdHJpbmcoanNvbik7CisKKwlQR19SRVRVUk5fVEVYVF9QKGNz dHJpbmdfdG9fdGV4dChkZXBhcnNlX2RkbF9qc29uX3RvX3N0cmluZyhqc29uX3N0cikpKTsKK30K KworLyoKKyAqIEVycm9yIGNvbnRleHQgY2FsbGJhY2sgZm9yIEpTT04gZm9ybWF0IHN0cmluZyBl eHBhbnNpb24uCisgKgorICogWFhYOiBpbmRpY2F0ZSB3aGljaCBlbGVtZW50IHdlJ3JlIGV4cGFu ZGluZywgaWYgYXBwbGljYWJsZS4KKyAqLworc3RhdGljIHZvaWQKK2ZtdHN0cl9lcnJvcl9jYWxs YmFjayh2b2lkICphcmcpCit7CisJZXJyY29udGV4dCgid2hpbGUgZXhwYW5kaW5nIGZvcm1hdCBz dHJpbmcgXCIlc1wiIiwgKGNoYXIgKikgYXJnKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3Ry aWdnZXIuYwppbmRleCA2OTAyNzA5OTU2Li42YmVhZTJhMTgxIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv ZXZlbnRfdHJpZ2dlci5jCkBAIC0xODI1LDYgKzE4MjUsNyBAQCBwZ19ldmVudF90cmlnZ2VyX2Rk bF9jb21tYW5kcyhQR19GVU5DVElPTl9BUkdTKQogCQkJY2FzZSBTQ1RfQWx0ZXJPcEZhbWlseToK IAkJCWNhc2UgU0NUX0NyZWF0ZU9wQ2xhc3M6CiAJCQljYXNlIFNDVF9BbHRlclRTQ29uZmlnOgor CQkJY2FzZSBTQ1RfQ3JlYXRlVGFibGVBczoKIAkJCQl7CiAJCQkJCWNoYXIJICAgKmlkZW50aXR5 OwogCQkJCQljaGFyCSAgICp0eXBlOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMv bWVzb24uYnVpbGQgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9tZXNvbi5idWlsZAppbmRleCA0MmNj ZWQ5ZWJlLi4yODQ0ZDM2NTIxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9tZXNv bi5idWlsZAorKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9tZXNvbi5idWlsZApAQCAtMTcsNiAr MTcsOCBAQCBiYWNrZW5kX3NvdXJjZXMgKz0gZmlsZXMoCiAgICdjb3B5dG8uYycsCiAgICdjcmVh dGVhcy5jJywKICAgJ2RiY29tbWFuZHMuYycsCisgICdkZGxfZGVwYXJzZS5jJywKKyAgJ2RkbF9q c29uLmMnLAogICAnZGVmaW5lLmMnLAogICAnZGlzY2FyZC5jJywKICAgJ2Ryb3BjbWRzLmMnLApk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRl L2NhdGFsb2cvcGdfcHJvYy5kYXQKaW5kZXggN2JlOWE1MDE0Ny4uYmRmNWNmYmNlOSAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9j YXRhbG9nL3BnX3Byb2MuZGF0CkBAIC0xMTg4Nyw0ICsxMTg4NywxMCBAQAogICBwcm9yZXR0eXBl ID0+ICdieXRlYScsIHByb2FyZ3R5cGVzID0+ICdwZ19icmluX21pbm1heF9tdWx0aV9zdW1tYXJ5 JywKICAgcHJvc3JjID0+ICdicmluX21pbm1heF9tdWx0aV9zdW1tYXJ5X3NlbmQnIH0sCiAKK3sg b2lkID0+ICc0NjQyJywgZGVzY3IgPT4gJ2RlcGFyc2UgdGhlIERETCBjb21tYW5kIGludG8gSlNP TiBmb3JtYXQgc3RyaW5nJywKKyAgcHJvbmFtZSA9PiAnZGRsX2RlcGFyc2VfdG9fanNvbicsIHBy b3JldHR5cGUgPT4gJ3RleHQnLAorICBwcm9hcmd0eXBlcyA9PiAncGdfZGRsX2NvbW1hbmQnLCBw cm9zcmMgPT4gJ2RkbF9kZXBhcnNlX3RvX2pzb24nIH0sCit7IG9pZCA9PiAnNDY0MycsIGRlc2Ny ID0+ICdleHBhbmQgSlNPTiBmb3JtYXQgRERMIHRvIGEgcGxhaW4gRERMIGNvbW1hbmQnLAorICBw cm9uYW1lID0+ICdkZGxfZGVwYXJzZV9leHBhbmRfY29tbWFuZCcsIHByb3JldHR5cGUgPT4gJ3Rl eHQnLAorICBwcm9hcmd0eXBlcyA9PiAndGV4dCcsIHByb3NyYyA9PiAnZGRsX2RlcGFyc2VfZXhw YW5kX2NvbW1hbmQnIH0sCiBdCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5v ZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKaW5kZXggY2ZlY2E5NmQ1My4u NmYxNDFmNGE4OCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCisr KyBiL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaApAQCAtMTk2Myw2ICsxOTYzLDcgQEAg dHlwZWRlZiBzdHJ1Y3QgQWx0ZXJUYWJsZVN0bXQKIAlMaXN0CSAgICpjbWRzOwkJCS8qIGxpc3Qg b2Ygc3ViY29tbWFuZHMgKi8KIAlPYmplY3RUeXBlCW9ianR5cGU7CQkvKiB0eXBlIG9mIG9iamVj dCAqLwogCWJvb2wJCW1pc3Npbmdfb2s7CQkvKiBza2lwIGVycm9yIGlmIHRhYmxlIG1pc3Npbmcg Ki8KKwlib29sICAgICAgICB0YWJsZV9saWtlOwkJLyogaW50ZXJuYWxseSBnZW5lcmF0ZWQgZm9y IFRhYmxlTGlrZUNsYXVzZSAqLwogfSBBbHRlclRhYmxlU3RtdDsKIAogdHlwZWRlZiBlbnVtIEFs dGVyVGFibGVUeXBlCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS90Y29wL2RkbF9kZXBhcnNlLmgg Yi9zcmMvaW5jbHVkZS90Y29wL2RkbF9kZXBhcnNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMC4uOWMyNTQ5Yzk0YwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRl L3Rjb3AvZGRsX2RlcGFyc2UuaApAQCAtMCwwICsxLDIzIEBACisvKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqCisgKiBkZGxfZGVwYXJzZS5oCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2 LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBD b3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5p YQorICoKKyAqIHNyYy9pbmNsdWRlL3Rjb3AvZGRsX2RlcGFyc2UuaAorICoKKyAqLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICovCisjaWZuZGVmIERETF9ERVBBUlNFX0gKKyNkZWZpbmUgRERMX0RFUEFSU0Vf SAorCisjaW5jbHVkZSAidGNvcC9kZXBhcnNlX3V0aWxpdHkuaCIKKworZXh0ZXJuIGNoYXIgKmRl cGFyc2VfdXRpbGl0eV9jb21tYW5kKENvbGxlY3RlZENvbW1hbmQgKmNtZCwgYm9vbCB2ZXJib3Nl X21vZGUpOworZXh0ZXJuIGNoYXIgKmRlcGFyc2VfZGRsX2pzb25fdG9fc3RyaW5nKGNoYXIgKmpz b25iKTsKK2V4dGVybiBjaGFyICpkZXBhcnNlX2Ryb3BfY29tbWFuZChjb25zdCBjaGFyICpvYmpp ZGVudGl0eSwgY29uc3QgY2hhciAqb2JqZWN0dHlwZSwKKwkJCQkJCQkJICBEcm9wQmVoYXZpb3Ig YmVoYXZpb3IpOworCisKKyNlbmRpZgkJCQkJCQkvKiBERExfREVQQVJTRV9IICovCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oIGIvc3JjL2luY2x1ZGUvdGNv cC9kZXBhcnNlX3V0aWxpdHkuaAppbmRleCBiNTg1ODEwYjlhLi4xZmNhMjI3ZjA1IDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oCisrKyBiL3NyYy9pbmNsdWRl L3Rjb3AvZGVwYXJzZV91dGlsaXR5LmgKQEAgLTI5LDcgKzI5LDggQEAgdHlwZWRlZiBlbnVtIENv bGxlY3RlZENvbW1hbmRUeXBlCiAJU0NUX0FsdGVyT3BGYW1pbHksCiAJU0NUX0FsdGVyRGVmYXVs dFByaXZpbGVnZXMsCiAJU0NUX0NyZWF0ZU9wQ2xhc3MsCi0JU0NUX0FsdGVyVFNDb25maWcKKwlT Q1RfQWx0ZXJUU0NvbmZpZywKKwlTQ1RfQ3JlYXRlVGFibGVBcwogfSBDb2xsZWN0ZWRDb21tYW5k VHlwZTsKIAogLyoKQEAgLTM5LDYgKzQwLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQ29sbGVjdGVkQVRT dWJjbWQKIHsKIAlPYmplY3RBZGRyZXNzIGFkZHJlc3M7CQkvKiBhZmZlY3RlZCBjb2x1bW4sIGNv bnN0cmFpbnQsIGluZGV4LCAuLi4gKi8KIAlOb2RlCSAgICpwYXJzZXRyZWU7CisJY2hhcgkgICAq dXNpbmdleHByOwogfSBDb2xsZWN0ZWRBVFN1YmNtZDsKIAogdHlwZWRlZiBzdHJ1Y3QgQ29sbGVj dGVkQ29tbWFuZApAQCAtNjIsNiArNjQsNyBAQCB0eXBlZGVmIHN0cnVjdCBDb2xsZWN0ZWRDb21t YW5kCiAJCXsKIAkJCU9pZAkJCW9iamVjdElkOwogCQkJT2lkCQkJY2xhc3NJZDsKKwkJCWJvb2wJ CXJld3JpdGU7CiAJCQlMaXN0CSAgICpzdWJjbWRzOwogCQl9CQkJYWx0ZXJUYWJsZTsKIApAQCAt MTAwLDYgKzEwMywxMiBAQCB0eXBlZGVmIHN0cnVjdCBDb2xsZWN0ZWRDb21tYW5kCiAJCXsKIAkJ CU9iamVjdFR5cGUJb2JqdHlwZTsKIAkJfQkJCWRlZnByaXZzOworCisJCXN0cnVjdAorCQl7CisJ CQlPYmplY3RBZGRyZXNzIGFkZHJlc3M7CisJCQlOb2RlCQkgKnJlYWxfY3JlYXRlOworCQl9CQkJ Y3RhczsKIAl9CQkJZDsKIAogCXN0cnVjdCBDb2xsZWN0ZWRDb21tYW5kICpwYXJlbnQ7CS8qIHdo ZW4gbmVzdGVkICovCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlz dCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDUwZDg2Y2IwMWIuLjVj ZDhhZjllNjYgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0Cisr KyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0xNjExLDYgKzE2MTEsOSBA QCBPU0luZm8KIE9TU0xDaXBoZXIKIE9TU0xEaWdlc3QKIE9WRVJMQVBQRUQKK09iakVsZW0KK09i alRyZWUKK09ialR5cGUKIE9iamVjdEFjY2Vzc0Ryb3AKIE9iamVjdEFjY2Vzc05hbWVzcGFjZVNl YXJjaAogT2JqZWN0QWNjZXNzUG9zdEFsdGVyCkBAIC0zMTc4LDYgKzMxODEsNyBAQCBjb21wYXJl X2NvbnRleHQKIGNvbmZpZ192YXJfdmFsdWUKIGNvbnRhaW5fYWdnc19vZl9sZXZlbF9jb250ZXh0 CiBjb252ZXJ0X3Rlc3RleHByX2NvbnRleHQKK2NvbnZTcGVjaWZpZXIKIGNvcHlfZGF0YV9kZXN0 X2NiCiBjb3B5X2RhdGFfc291cmNlX2NiCiBjb3JlX1lZU1RZUEUKLS0gCjIuMzguMQoK --00000000000047050c05f1ae2f85 Content-Type: application/octet-stream; name="v60-0005-DDL-messaging-infrastructure-for-DDL-replication.patch" Content-Disposition: attachment; filename="v60-0005-DDL-messaging-infrastructure-for-DDL-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lcm3fwef4 RnJvbSA5NDQ0YmFhNzJhNWE5YzVhYjRiY2Y2M2QxODE3OGU2MjgxY2I5NThkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBWaWduZXNoIEMgPHZpZ25lc2gyMUBnbWFpbC5jb20+CkRhdGU6 IFR1ZSwgMjcgRGVjIDIwMjIgMTA6NTE6MTcgKzA1MzAKU3ViamVjdDogW1BBVENIIDUvN10gRERM IG1lc3NhZ2luZyBpbmZyYXN0cnVjdHVyZSBmb3IgRERMIHJlcGxpY2F0aW9uLgoKRERMIG1lc3Nh Z2luZyBpbmZyYXN0cnVjdHVyZSBmb3IgRERMIHJlcGxpY2F0aW9uLgotLS0KIGNvbnRyaWIvdGVz dF9kZWNvZGluZy9leHBlY3RlZC9kZGwub3V0ICAgICAgICB8ICAyNiArKysrCiBjb250cmliL3Rl c3RfZGVjb2Rpbmcvc3FsL2RkbC5zcWwgICAgICAgICAgICAgfCAgIDUgKwogY29udHJpYi90ZXN0 X2RlY29kaW5nL3Rlc3RfZGVjb2RpbmcuYyAgICAgICAgIHwgIDQ4ICsrKysrKysKIHNyYy9iYWNr ZW5kL2FjY2Vzcy9ybWdyZGVzYy9NYWtlZmlsZSAgICAgICAgICB8ICAgMSArCiAuLi4vYWNjZXNz L3JtZ3JkZXNjL2xvZ2ljYWxkZGxtc2dkZXNjLmMgICAgICAgfCAgNTIgKysrKysrKwogc3JjL2Jh Y2tlbmQvYWNjZXNzL3JtZ3JkZXNjL21lc29uLmJ1aWxkICAgICAgIHwgICAxICsKIHNyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL3JtZ3IuYyAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC9kZGxtZXNzYWdlLmMgIHwgIDg0ICsrKysrKysrKysrKwogc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZWNvZGUuYyAgICAgIHwgIDQxICsrKysrKwog c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sb2dpY2FsLmMgICAgIHwgIDQ0ICsrKysr KwogLi4uL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbGZ1bmNzLmMgICAgICAgIHwgIDI0ICsr KysKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbWVzb24uYnVpbGQgICB8ICAgMSAr CiAuLi4vcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMgICAgICAgfCAxMjcgKysr KysrKysrKysrKysrKysrCiBzcmMvYmluL3BnX3dhbGR1bXAvcm1ncmRlc2MuYyAgICAgICAgICAg ICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvYWNjZXNzL3JtZ3JsaXN0LmggICAgICAgICAgICAg ICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgICAgICAgICAgICAg ICB8ICAgOCArKwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGRsbWVzc2FnZS5oICAgICAgICAg IHwgIDYwICsrKysrKysrKwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGVjb2RlLmggICAgICAg ICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL291dHB1dF9wbHVnaW4uaCAg ICAgICB8ICAxNCArKwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oICAg ICAgIHwgIDI3ICsrKysKIDIxIGZpbGVzIGNoYW5nZWQsIDU2OCBpbnNlcnRpb25zKCspCiBjcmVh dGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL2xvZ2ljYWxkZGxtc2dk ZXNjLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L2RkbG1lc3NhZ2UuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9u L2RkbG1lc3NhZ2UuaAoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvdGVzdF9kZWNvZGluZy9leHBlY3Rl ZC9kZGwub3V0IGIvY29udHJpYi90ZXN0X2RlY29kaW5nL2V4cGVjdGVkL2RkbC5vdXQKaW5kZXgg OWEyOGI1ZGRjNS4uMGY1MWYyYjQxYSAxMDA2NDQKLS0tIGEvY29udHJpYi90ZXN0X2RlY29kaW5n L2V4cGVjdGVkL2RkbC5vdXQKKysrIGIvY29udHJpYi90ZXN0X2RlY29kaW5nL2V4cGVjdGVkL2Rk bC5vdXQKQEAgLTgzMSw2ICs4MzEsMzIgQEAgU0VMRUNUIGRhdGEgRlJPTSBwZ19sb2dpY2FsX3Ns b3RfZ2V0X2NoYW5nZXMoJ3JlZ3Jlc3Npb25fc2xvdCcsIE5VTEwsIE5VTEwsICdpbmMKIC0tLS0t LQogKDAgcm93cykKIAorU0VMRUNUICdkZGwgbXNnMScgRlJPTSBwZ19sb2dpY2FsX2VtaXRfZGRs X21lc3NhZ2UoJ2RkbCBtc2cxJywgMTYzOTQsIDEsICdtc2cxJyk7CisgP2NvbHVtbj8gCistLS0t LS0tLS0tCisgZGRsIG1zZzEKKygxIHJvdykKKworU0VMRUNUICdkZGwgbXNnMicgRlJPTSBwZ19s b2dpY2FsX2VtaXRfZGRsX21lc3NhZ2UoJ2RkbCBtc2cyJywgMTYzOTQsIDEsICd7ImZtdCI6ICJD UkVBVEUgU0NIRU1BICV7aWZfbm90X2V4aXN0c31zICV7bmFtZX1JICV7YXV0aG9yaXphdGlvbn1z IiwgIm5hbWUiOiAiZm9vIiwgImF1dGhvcml6YXRpb24iOiB7ImZtdCI6ICJBVVRIT1JJWkFUSU9O ICV7YXV0aG9yaXphdGlvbl9yb2xlfUkiLCAicHJlc2VudCI6IGZhbHNlLCAiYXV0aG9yaXphdGlv bl9yb2xlIjogbnVsbH0sICJpZl9ub3RfZXhpc3RzIjogIiJ9Jyk7CisgP2NvbHVtbj8gCistLS0t LS0tLS0tCisgZGRsIG1zZzIKKygxIHJvdykKKworU0VMRUNUICdkZGwgbXNnMycgRlJPTSBwZ19s b2dpY2FsX2VtaXRfZGRsX21lc3NhZ2UoJ2RkbCBtc2czJywgMTYzOTQsIDEsICd7ImZtdCI6ICJD UkVBVEUgJXtwZXJzaXN0ZW5jZX1zIFRBQkxFICV7aWZfbm90X2V4aXN0c31zICV7aWRlbnRpdHl9 RCAoJXt0YWJsZV9lbGVtZW50czosIH1zKSAle2luaGVyaXRzfXMgJXt0YWJsZXNwYWNlfXMgJXtv bl9jb21taXR9cyAle3BhcnRpdGlvbl9ieX1zICV7YWNjZXNzX21ldGhvZH1zICV7d2l0aF9jbGF1 c2V9cyIsICJpZGVudGl0eSI6IHsib2JqbmFtZSI6ICJmb28iLCAic2NoZW1hbmFtZSI6ICJlbGVt ZW50X3Rlc3QifSwgImluaGVyaXRzIjogeyJmbXQiOiAiSU5IRVJJVFMgKCV7cGFyZW50czosIH1E KSIsICJwYXJlbnRzIjogbnVsbCwgInByZXNlbnQiOiBmYWxzZX0sICJvbl9jb21taXQiOiB7ImZt dCI6ICJPTiBDT01NSVQgJXtvbl9jb21taXRfdmFsdWV9cyIsICJwcmVzZW50IjogZmFsc2UsICJv bl9jb21taXRfdmFsdWUiOiBudWxsfSwgInRhYmxlc3BhY2UiOiB7ImZtdCI6ICJUQUJMRVNQQUNF ICV7dGFibGVzcGFjZX1JIiwgInByZXNlbnQiOiBmYWxzZSwgInRhYmxlc3BhY2UiOiBudWxsfSwg InBlcnNpc3RlbmNlIjogIiIsICJ3aXRoX2NsYXVzZSI6IHsiZm10IjogIldJVEgiLCAicHJlc2Vu dCI6IGZhbHNlfSwgInBhcnRpdGlvbl9ieSI6IHsiZm10IjogIlBBUlRJVElPTiBCWSAle2RlZmlu aXRpb259cyIsICJwcmVzZW50IjogZmFsc2UsICJkZWZpbml0aW9uIjogbnVsbH0sICJhY2Nlc3Nf bWV0aG9kIjogeyJmbXQiOiAiVVNJTkcgJXthY2Nlc3NfbWV0aG9kfUkiLCAicHJlc2VudCI6IGZh bHNlLCAiYWNjZXNzX21ldGhvZCI6IG51bGx9LCAiaWZfbm90X2V4aXN0cyI6ICIiLCAidGFibGVf ZWxlbWVudHMiOiBbeyJmbXQiOiAiJXtuYW1lfUkgJXtjb2x0eXBlfVQgU1RPUkFHRSAle2NvbHN0 b3JhZ2V9cyAle2NvbXByZXNzaW9ufXMgJXtjb2xsYXRpb259cyAle25vdF9udWxsfXMgJXtkZWZh dWx0fXMgJXtnZW5lcmF0ZWRfY29sdW1ufXMiLCAibmFtZSI6ICJpZCIsICJ0eXBlIjogImNvbHVt biIsICJjb2x0eXBlIjogeyJ0eXBtb2QiOiAiIiwgInR5cGFycmF5IjogZmFsc2UsICJ0eXBlbmFt ZSI6ICJpbnQ0IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9LCAiZGVmYXVsdCI6IHsiZm10 IjogIkRFRkFVTFQiLCAicHJlc2VudCI6IGZhbHNlfSwgIm5vdF9udWxsIjogIiIsICJjb2xsYXRp b24iOiB7ImZtdCI6ICJDT0xMQVRFIiwgInByZXNlbnQiOiBmYWxzZX0sICJjb2xzdG9yYWdlIjog InBsYWluIiwgImNvbXByZXNzaW9uIjogeyJmbXQiOiAiQ09NUFJFU1NJT04gJXtjb21wcmVzc2lv bl9tZXRob2R9SSIsICJwcmVzZW50IjogZmFsc2UsICJjb21wcmVzc2lvbl9tZXRob2QiOiBudWxs fSwgImdlbmVyYXRlZF9jb2x1bW4iOiB7ImZtdCI6ICJHRU5FUkFURUQgQUxXQVlTIEFTIiwgInBy ZXNlbnQiOiBmYWxzZX19XX19Jyk7CisgP2NvbHVtbj8gCistLS0tLS0tLS0tCisgZGRsIG1zZzMK KygxIHJvdykKKworU0VMRUNUIGRhdGEgRlJPTSBwZ19sb2dpY2FsX3Nsb3RfZ2V0X2NoYW5nZXMo J3JlZ3Jlc3Npb25fc2xvdCcsIE5VTEwsIE5VTEwsICdpbmNsdWRlLXhpZHMnLCAnMCcsICdza2lw LWVtcHR5LXhhY3RzJywgJzEnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBtZXNzYWdlOiBwcmVmaXg6IGRkbCBtc2cxLCByZWxpZDogMTYzOTQs IGNtZHR5cGU6IERyb3Agc3RhcnQsIHN6OiA0IGNvbnRlbnQ6bXNnMQorIG1lc3NhZ2U6IHByZWZp eDogZGRsIG1zZzIsIHJlbGlkOiAxNjM5NCwgY21kdHlwZTogRHJvcCBzdGFydCwgc3o6IDIxNyBj b250ZW50OnsiZm10IjogIkNSRUFURSBTQ0hFTUEgJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1lfUkg JXthdXRob3JpemF0aW9ufXMiLCAibmFtZSI6ICJmb28iLCAiYXV0aG9yaXphdGlvbiI6IHsiZm10 IjogIkFVVEhPUklaQVRJT04gJXthdXRob3JpemF0aW9uX3JvbGV9SSIsICJwcmVzZW50IjogZmFs c2UsICJhdXRob3JpemF0aW9uX3JvbGUiOiBudWxsfSwgImlmX25vdF9leGlzdHMiOiAiIn0KKyBt ZXNzYWdlOiBwcmVmaXg6IGRkbCBtc2czLCByZWxpZDogMTYzOTQsIGNtZHR5cGU6IERyb3Agc3Rh cnQsIHN6OiAxMzk2IGNvbnRlbnQ6eyJmbXQiOiAiQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBUQUJM RSAle2lmX25vdF9leGlzdHN9cyAle2lkZW50aXR5fUQgKCV7dGFibGVfZWxlbWVudHM6LCB9cykg JXtpbmhlcml0c31zICV7dGFibGVzcGFjZX1zICV7b25fY29tbWl0fXMgJXtwYXJ0aXRpb25fYnl9 cyAle2FjY2Vzc19tZXRob2R9cyAle3dpdGhfY2xhdXNlfXMiLCAiaWRlbnRpdHkiOiB7Im9iam5h bWUiOiAiZm9vIiwgInNjaGVtYW5hbWUiOiAiZWxlbWVudF90ZXN0In0sICJpbmhlcml0cyI6IHsi Zm10IjogIklOSEVSSVRTICgle3BhcmVudHM6LCB9RCkiLCAicGFyZW50cyI6IG51bGwsICJwcmVz ZW50IjogZmFsc2V9LCAib25fY29tbWl0IjogeyJmbXQiOiAiT04gQ09NTUlUICV7b25fY29tbWl0 X3ZhbHVlfXMiLCAicHJlc2VudCI6IGZhbHNlLCAib25fY29tbWl0X3ZhbHVlIjogbnVsbH0sICJ0 YWJsZXNwYWNlIjogeyJmbXQiOiAiVEFCTEVTUEFDRSAle3RhYmxlc3BhY2V9SSIsICJwcmVzZW50 IjogZmFsc2UsICJ0YWJsZXNwYWNlIjogbnVsbH0sICJwZXJzaXN0ZW5jZSI6ICIiLCAid2l0aF9j bGF1c2UiOiB7ImZtdCI6ICJXSVRIIiwgInByZXNlbnQiOiBmYWxzZX0sICJwYXJ0aXRpb25fYnki OiB7ImZtdCI6ICJQQVJUSVRJT04gQlkgJXtkZWZpbml0aW9ufXMiLCAicHJlc2VudCI6IGZhbHNl LCAiZGVmaW5pdGlvbiI6IG51bGx9LCAiYWNjZXNzX21ldGhvZCI6IHsiZm10IjogIlVTSU5HICV7 YWNjZXNzX21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImFjY2Vzc19tZXRob2QiOiBudWxs fSwgImlmX25vdF9leGlzdHMiOiAiIiwgInRhYmxlX2VsZW1lbnRzIjogW3siZm10IjogIiV7bmFt ZX1JICV7Y29sdHlwZX1UIFNUT1JBR0UgJXtjb2xzdG9yYWdlfXMgJXtjb21wcmVzc2lvbn1zICV7 Y29sbGF0aW9ufXMgJXtub3RfbnVsbH1zICV7ZGVmYXVsdH1zICV7Z2VuZXJhdGVkX2NvbHVtbn1z IiwgIm5hbWUiOiAiaWQiLCAidHlwZSI6ICJjb2x1bW4iLCAiY29sdHlwZSI6IHsidHlwbW9kIjog IiIsICJ0eXBhcnJheSI6IGZhbHNlLCAidHlwZW5hbWUiOiAiaW50NCIsICJzY2hlbWFuYW1lIjog InBnX2NhdGFsb2cifSwgImRlZmF1bHQiOiB7ImZtdCI6ICJERUZBVUxUIiwgInByZXNlbnQiOiBm YWxzZX0sICJub3RfbnVsbCI6ICIiLCAiY29sbGF0aW9uIjogeyJmbXQiOiAiQ09MTEFURSIsICJw cmVzZW50IjogZmFsc2V9LCAiY29sc3RvcmFnZSI6ICJwbGFpbiIsICJjb21wcmVzc2lvbiI6IHsi Zm10IjogIkNPTVBSRVNTSU9OICV7Y29tcHJlc3Npb25fbWV0aG9kfUkiLCAicHJlc2VudCI6IGZh bHNlLCAiY29tcHJlc3Npb25fbWV0aG9kIjogbnVsbH0sICJnZW5lcmF0ZWRfY29sdW1uIjogeyJm bXQiOiAiR0VORVJBVEVEIEFMV0FZUyBBUyIsICJwcmVzZW50IjogZmFsc2V9fV19fQorKDMgcm93 cykKKwogU0VMRUNUIHBnX2Ryb3BfcmVwbGljYXRpb25fc2xvdCgncmVncmVzc2lvbl9zbG90Jyk7 CiAgcGdfZHJvcF9yZXBsaWNhdGlvbl9zbG90IAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K ZGlmZiAtLWdpdCBhL2NvbnRyaWIvdGVzdF9kZWNvZGluZy9zcWwvZGRsLnNxbCBiL2NvbnRyaWIv dGVzdF9kZWNvZGluZy9zcWwvZGRsLnNxbAppbmRleCA0Zjc2YmVkNzJjLi4xZWE1YTRiMjcxIDEw MDY0NAotLS0gYS9jb250cmliL3Rlc3RfZGVjb2Rpbmcvc3FsL2RkbC5zcWwKKysrIGIvY29udHJp Yi90ZXN0X2RlY29kaW5nL3NxbC9kZGwuc3FsCkBAIC00MzEsNiArNDMxLDExIEBAIFNFTEVDVCBk YXRhIEZST00gcGdfbG9naWNhbF9zbG90X2dldF9jaGFuZ2VzKCdyZWdyZXNzaW9uX3Nsb3QnLCBO VUxMLCBOVUxMLCAnaW5jCiAtLSBkb25lLCBmcmVlIGxvZ2ljYWwgcmVwbGljYXRpb24gc2xvdAog U0VMRUNUIGRhdGEgRlJPTSBwZ19sb2dpY2FsX3Nsb3RfZ2V0X2NoYW5nZXMoJ3JlZ3Jlc3Npb25f c2xvdCcsIE5VTEwsIE5VTEwsICdpbmNsdWRlLXhpZHMnLCAnMCcsICdza2lwLWVtcHR5LXhhY3Rz JywgJzEnKTsKIAorU0VMRUNUICdkZGwgbXNnMScgRlJPTSBwZ19sb2dpY2FsX2VtaXRfZGRsX21l c3NhZ2UoJ2RkbCBtc2cxJywgMTYzOTQsIDEsICdtc2cxJyk7CitTRUxFQ1QgJ2RkbCBtc2cyJyBG Uk9NIHBnX2xvZ2ljYWxfZW1pdF9kZGxfbWVzc2FnZSgnZGRsIG1zZzInLCAxNjM5NCwgMSwgJ3si Zm10IjogIkNSRUFURSBTQ0hFTUEgJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1lfUkgJXthdXRob3Jp emF0aW9ufXMiLCAibmFtZSI6ICJmb28iLCAiYXV0aG9yaXphdGlvbiI6IHsiZm10IjogIkFVVEhP UklaQVRJT04gJXthdXRob3JpemF0aW9uX3JvbGV9SSIsICJwcmVzZW50IjogZmFsc2UsICJhdXRo b3JpemF0aW9uX3JvbGUiOiBudWxsfSwgImlmX25vdF9leGlzdHMiOiAiIn0nKTsKK1NFTEVDVCAn ZGRsIG1zZzMnIEZST00gcGdfbG9naWNhbF9lbWl0X2RkbF9tZXNzYWdlKCdkZGwgbXNnMycsIDE2 Mzk0LCAxLCAneyJmbXQiOiAiQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBUQUJMRSAle2lmX25vdF9l eGlzdHN9cyAle2lkZW50aXR5fUQgKCV7dGFibGVfZWxlbWVudHM6LCB9cykgJXtpbmhlcml0c31z ICV7dGFibGVzcGFjZX1zICV7b25fY29tbWl0fXMgJXtwYXJ0aXRpb25fYnl9cyAle2FjY2Vzc19t ZXRob2R9cyAle3dpdGhfY2xhdXNlfXMiLCAiaWRlbnRpdHkiOiB7Im9iam5hbWUiOiAiZm9vIiwg InNjaGVtYW5hbWUiOiAiZWxlbWVudF90ZXN0In0sICJpbmhlcml0cyI6IHsiZm10IjogIklOSEVS SVRTICgle3BhcmVudHM6LCB9RCkiLCAicGFyZW50cyI6IG51bGwsICJwcmVzZW50IjogZmFsc2V9 LCAib25fY29tbWl0IjogeyJmbXQiOiAiT04gQ09NTUlUICV7b25fY29tbWl0X3ZhbHVlfXMiLCAi cHJlc2VudCI6IGZhbHNlLCAib25fY29tbWl0X3ZhbHVlIjogbnVsbH0sICJ0YWJsZXNwYWNlIjog eyJmbXQiOiAiVEFCTEVTUEFDRSAle3RhYmxlc3BhY2V9SSIsICJwcmVzZW50IjogZmFsc2UsICJ0 YWJsZXNwYWNlIjogbnVsbH0sICJwZXJzaXN0ZW5jZSI6ICIiLCAid2l0aF9jbGF1c2UiOiB7ImZt dCI6ICJXSVRIIiwgInByZXNlbnQiOiBmYWxzZX0sICJwYXJ0aXRpb25fYnkiOiB7ImZtdCI6ICJQ QVJUSVRJT04gQlkgJXtkZWZpbml0aW9ufXMiLCAicHJlc2VudCI6IGZhbHNlLCAiZGVmaW5pdGlv biI6IG51bGx9LCAiYWNjZXNzX21ldGhvZCI6IHsiZm10IjogIlVTSU5HICV7YWNjZXNzX21ldGhv ZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImFjY2Vzc19tZXRob2QiOiBudWxsfSwgImlmX25vdF9l eGlzdHMiOiAiIiwgInRhYmxlX2VsZW1lbnRzIjogW3siZm10IjogIiV7bmFtZX1JICV7Y29sdHlw ZX1UIFNUT1JBR0UgJXtjb2xzdG9yYWdlfXMgJXtjb21wcmVzc2lvbn1zICV7Y29sbGF0aW9ufXMg JXtub3RfbnVsbH1zICV7ZGVmYXVsdH1zICV7Z2VuZXJhdGVkX2NvbHVtbn1zIiwgIm5hbWUiOiAi aWQiLCAidHlwZSI6ICJjb2x1bW4iLCAiY29sdHlwZSI6IHsidHlwbW9kIjogIiIsICJ0eXBhcnJh eSI6IGZhbHNlLCAidHlwZW5hbWUiOiAiaW50NCIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2ci fSwgImRlZmF1bHQiOiB7ImZtdCI6ICJERUZBVUxUIiwgInByZXNlbnQiOiBmYWxzZX0sICJub3Rf bnVsbCI6ICIiLCAiY29sbGF0aW9uIjogeyJmbXQiOiAiQ09MTEFURSIsICJwcmVzZW50IjogZmFs c2V9LCAiY29sc3RvcmFnZSI6ICJwbGFpbiIsICJjb21wcmVzc2lvbiI6IHsiZm10IjogIkNPTVBS RVNTSU9OICV7Y29tcHJlc3Npb25fbWV0aG9kfUkiLCAicHJlc2VudCI6IGZhbHNlLCAiY29tcHJl c3Npb25fbWV0aG9kIjogbnVsbH0sICJnZW5lcmF0ZWRfY29sdW1uIjogeyJmbXQiOiAiR0VORVJB VEVEIEFMV0FZUyBBUyIsICJwcmVzZW50IjogZmFsc2V9fV19fScpOworU0VMRUNUIGRhdGEgRlJP TSBwZ19sb2dpY2FsX3Nsb3RfZ2V0X2NoYW5nZXMoJ3JlZ3Jlc3Npb25fc2xvdCcsIE5VTEwsIE5V TEwsICdpbmNsdWRlLXhpZHMnLCAnMCcsICdza2lwLWVtcHR5LXhhY3RzJywgJzEnKTsKKwogU0VM RUNUIHBnX2Ryb3BfcmVwbGljYXRpb25fc2xvdCgncmVncmVzc2lvbl9zbG90Jyk7CiAKIC8qIGNo ZWNrIHRoYXQgdGhlIHNsb3QgaXMgZ29uZSAqLwpkaWZmIC0tZ2l0IGEvY29udHJpYi90ZXN0X2Rl Y29kaW5nL3Rlc3RfZGVjb2RpbmcuYyBiL2NvbnRyaWIvdGVzdF9kZWNvZGluZy90ZXN0X2RlY29k aW5nLmMKaW5kZXggZTUyM2QyMmViYS4uY2FiZjBiYzFkOSAxMDA2NDQKLS0tIGEvY29udHJpYi90 ZXN0X2RlY29kaW5nL3Rlc3RfZGVjb2RpbmcuYworKysgYi9jb250cmliL3Rlc3RfZGVjb2Rpbmcv dGVzdF9kZWNvZGluZy5jCkBAIC0xNCw5ICsxNCwxMSBAQAogCiAjaW5jbHVkZSAiY2F0YWxvZy9w Z190eXBlLmgiCiAKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCiAjaW5jbHVk ZSAicmVwbGljYXRpb24vbG9naWNhbC5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL29yaWdpbi5o IgogCisjaW5jbHVkZSAidGNvcC9kZGxfZGVwYXJzZS5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0 aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVt dXRpbHMuaCIKQEAgLTcyLDYgKzc0LDEyIEBAIHN0YXRpYyB2b2lkIHBnX2RlY29kZV9tZXNzYWdl KExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKIAkJCQkJCQkgIFJlb3JkZXJCdWZmZXJUWE4g KnR4biwgWExvZ1JlY1B0ciBsc24sCiAJCQkJCQkJICBib29sIHRyYW5zYWN0aW9uYWwsIGNvbnN0 IGNoYXIgKnByZWZpeCwKIAkJCQkJCQkgIFNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwor c3RhdGljIHZvaWQgcGdfZGVjb2RlX2RkbF9tZXNzYWdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQg KmN0eCwKKwkJCQkJCQkJICBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJCSAgWExvZ1Jl Y1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJICBjb25zdCBjaGFyICpwcmVmaXgsIE9pZCByZWxp ZCwKKwkJCQkJCQkJICBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJCSAgU2l6 ZSBzeiwgY29uc3QgY2hhciAqbWVzc2FnZSk7CiBzdGF0aWMgYm9vbCBwZ19kZWNvZGVfZmlsdGVy X3ByZXBhcmUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAogCQkJCQkJCQkJIFRyYW5zYWN0 aW9uSWQgeGlkLAogCQkJCQkJCQkJIGNvbnN0IGNoYXIgKmdpZCk7CkBAIC0xMzcsNiArMTQ1LDcg QEAgX1BHX291dHB1dF9wbHVnaW5faW5pdChPdXRwdXRQbHVnaW5DYWxsYmFja3MgKmNiKQogCWNi LT5maWx0ZXJfYnlfb3JpZ2luX2NiID0gcGdfZGVjb2RlX2ZpbHRlcjsKIAljYi0+c2h1dGRvd25f Y2IgPSBwZ19kZWNvZGVfc2h1dGRvd247CiAJY2ItPm1lc3NhZ2VfY2IgPSBwZ19kZWNvZGVfbWVz c2FnZTsKKwljYi0+ZGRsX2NiID0gcGdfZGVjb2RlX2RkbF9tZXNzYWdlOwogCWNiLT5maWx0ZXJf cHJlcGFyZV9jYiA9IHBnX2RlY29kZV9maWx0ZXJfcHJlcGFyZTsKIAljYi0+YmVnaW5fcHJlcGFy ZV9jYiA9IHBnX2RlY29kZV9iZWdpbl9wcmVwYXJlX3R4bjsKIAljYi0+cHJlcGFyZV9jYiA9IHBn X2RlY29kZV9wcmVwYXJlX3R4bjsKQEAgLTc1Miw2ICs3NjEsNDUgQEAgcGdfZGVjb2RlX21lc3Nh Z2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAogCU91dHB1dFBsdWdpbldyaXRlKGN0eCwg dHJ1ZSk7CiB9CiAKK3N0YXRpYyB2b2lkCitwZ19kZWNvZGVfZGRsX21lc3NhZ2UoTG9naWNhbERl Y29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCSAgWExvZ1Jl Y1B0ciBtZXNzYWdlX2xzbiwgY29uc3QgY2hhciAqcHJlZml4LCBPaWQgcmVsaWQsCisJCQkJCSAg RGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLCBTaXplIHN6LCBjb25zdCBjaGFyICptZXNzYWdl KQoreworCU91dHB1dFBsdWdpblByZXBhcmVXcml0ZShjdHgsIHRydWUpOworCWFwcGVuZFN0cmlu Z0luZm8oY3R4LT5vdXQsICJtZXNzYWdlOiBwcmVmaXg6ICVzLCByZWxpZDogJXUsICIsCisJCQkJ CSBwcmVmaXgsIHJlbGlkKTsKKworCXN3aXRjaChjbWR0eXBlKQorCXsKKwljYXNlIERDVF9TaW1w bGVDbWQ6CisJCWFwcGVuZFN0cmluZ0luZm8oY3R4LT5vdXQsICJjbWR0eXBlOiBTaW1wbGUsICIp OworCQlicmVhazsKKwljYXNlIERDVF9UYWJsZURyb3BTdGFydDoKKwkJYXBwZW5kU3RyaW5nSW5m byhjdHgtPm91dCwgImNtZHR5cGU6IERyb3Agc3RhcnQsICIpOworCQlicmVhazsKKwljYXNlIERD VF9UYWJsZURyb3BFbmQ6CisJCWFwcGVuZFN0cmluZ0luZm8oY3R4LT5vdXQsICJjbWR0eXBlOiBE cm9wIGVuZCwgIik7CisJCWJyZWFrOworCWNhc2UgRENUX1RhYmxlQWx0ZXI6CisJCWFwcGVuZFN0 cmluZ0luZm8oY3R4LT5vdXQsICJjbWR0eXBlOiBBbHRlciB0YWJsZSwgIik7CisJCWJyZWFrOwor CWNhc2UgRENUX09iamVjdENyZWF0ZToKKwkJYXBwZW5kU3RyaW5nSW5mbyhjdHgtPm91dCwgImNt ZHR5cGU6IENyZWF0ZSwgIik7CisJCWJyZWFrOworCWNhc2UgRENUX09iamVjdERyb3A6CisJCWFw cGVuZFN0cmluZ0luZm8oY3R4LT5vdXQsICJjbWR0eXBlOiBEcm9wLCAiKTsKKwkJYnJlYWs7CisJ ZGVmYXVsdDoKKwkJYXBwZW5kU3RyaW5nSW5mbyhjdHgtPm91dCwgImNtZHR5cGU6IEludmFsaWQs ICIpOworCQlicmVhazsKKwl9CisKKwlhcHBlbmRTdHJpbmdJbmZvKGN0eC0+b3V0LCAic3o6ICV6 dSBjb250ZW50OiIsIHN6KTsKKwlhcHBlbmRCaW5hcnlTdHJpbmdJbmZvKGN0eC0+b3V0LCBtZXNz YWdlLCBzeik7CisJT3V0cHV0UGx1Z2luV3JpdGUoY3R4LCB0cnVlKTsKK30KKwogc3RhdGljIHZv aWQKIHBnX2RlY29kZV9zdHJlYW1fc3RhcnQoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAog CQkJCQkgICBSZW9yZGVyQnVmZmVyVFhOICp0eG4pCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9h Y2Nlc3Mvcm1ncmRlc2MvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvTWFr ZWZpbGUKaW5kZXggZjg4ZDcyZmQ4Ni4uMmZmMDFlNjliZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvYWNjZXNzL3JtZ3JkZXNjL01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdy ZGVzYy9NYWtlZmlsZQpAQCAtMTgsNiArMTgsNyBAQCBPQkpTID0gXAogCWdpc3RkZXNjLm8gXAog CWhhc2hkZXNjLm8gXAogCWhlYXBkZXNjLm8gXAorCWxvZ2ljYWxkZGxtc2dkZXNjLm8gXAogCWxv Z2ljYWxtc2dkZXNjLm8gXAogCW14YWN0ZGVzYy5vIFwKIAluYnRkZXNjLm8gXApkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL2xvZ2ljYWxkZGxtc2dkZXNjLmMgYi9zcmMv YmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvbG9naWNhbGRkbG1zZ2Rlc2MuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4wNWU5MzBjOTBjCi0tLSAvZGV2L251bGwKKysrIGIv c3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL2xvZ2ljYWxkZGxtc2dkZXNjLmMKQEAgLTAsMCAr MSw1MiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogbG9naWNhbGRkbG1zZ2Rlc2MuYwor ICoJICBybWdyIGRlc2NyaXB0b3Igcm91dGluZXMgZm9yIHJlcGxpY2F0aW9uL2xvZ2ljYWwvZGRs bWVzc2FnZS5jCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDE1LTIwMjIsIFBvc3Rn cmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoKKyAqIElERU5USUZJQ0FUSU9O CisgKgkgIHNyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9sb2dpY2FsZGRsbXNnZGVzYy5jCisg KgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5j bHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgorCit2b2lkCitsb2dpY2FsZGRsbXNnX2Rl c2MoU3RyaW5nSW5mbyBidWYsIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQoreworCWNoYXIJICAg KnJlYyA9IFhMb2dSZWNHZXREYXRhKHJlY29yZCk7CisJdWludDgJCWluZm8gPSBYTG9nUmVjR2V0 SW5mbyhyZWNvcmQpICYgflhMUl9JTkZPX01BU0s7CisKKwlpZiAoaW5mbyA9PSBYTE9HX0xPR0lD QUxfRERMX01FU1NBR0UpCisJeworCQl4bF9sb2dpY2FsX2RkbF9tZXNzYWdlICp4bHJlYyA9ICh4 bF9sb2dpY2FsX2RkbF9tZXNzYWdlICopIHJlYzsKKwkJY2hhcgkgICAqcHJlZml4ID0geGxyZWMt Pm1lc3NhZ2U7CisJCWNoYXIJICAgKm1lc3NhZ2UgPSB4bHJlYy0+bWVzc2FnZSArIHhscmVjLT5w cmVmaXhfc2l6ZTsKKwkJY2hhcgkgICAqc2VwID0gIiI7CisKKwkJQXNzZXJ0KHByZWZpeFt4bHJl Yy0+cHJlZml4X3NpemVdICE9ICdcMCcpOworCisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAicHJl Zml4IFwiJXNcIjsgcGF5bG9hZCAoJXp1IGJ5dGVzKTogIiwKKwkJCQkJCSBwcmVmaXgsIHhscmVj LT5tZXNzYWdlX3NpemUpOworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgInJlbGlkICV1IGNtZHR5 cGUgJXUiLCB4bHJlYy0+cmVsaWQsIHhscmVjLT5jbWR0eXBlKTsKKwkJLyogV3JpdGUgbWVzc2Fn ZSBwYXlsb2FkIGFzIGEgc2VyaWVzIG9mIGhleCBieXRlcyAqLworCQlmb3IgKGludCBjbnQgPSAw OyBjbnQgPCB4bHJlYy0+bWVzc2FnZV9zaXplOyBjbnQrKykKKwkJeworCQkJYXBwZW5kU3RyaW5n SW5mbyhidWYsICIlcyUwMlgiLCBzZXAsICh1bnNpZ25lZCBjaGFyKSBtZXNzYWdlW2NudF0pOwor CQkJc2VwID0gIiAiOworCQl9CisJfQorfQorCitjb25zdCBjaGFyICoKK2xvZ2ljYWxkZGxtc2df aWRlbnRpZnkodWludDggaW5mbykKK3sKKwlpZiAoKGluZm8gJiB+WExSX0lORk9fTUFTSykgPT0g WExPR19MT0dJQ0FMX0RETF9NRVNTQUdFKQorCQlyZXR1cm4gIkRETCI7CisKKwlyZXR1cm4gTlVM TDsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9tZXNvbi5idWls ZCBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9tZXNvbi5idWlsZAppbmRleCAxNjZjZWU2 N2I2Li43ODFlMmQ3NzEzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2Mv bWVzb24uYnVpbGQKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL21lc29uLmJ1aWxk CkBAIC0xMSw2ICsxMSw3IEBAIHJtZ3JfZGVzY19zb3VyY2VzID0gZmlsZXMoCiAgICdnaXN0ZGVz Yy5jJywKICAgJ2hhc2hkZXNjLmMnLAogICAnaGVhcGRlc2MuYycsCisgICdsb2dpY2FsZGRsbXNn ZGVzYy5jJywKICAgJ2xvZ2ljYWxtc2dkZXNjLmMnLAogICAnbXhhY3RkZXNjLmMnLAogICAnbmJ0 ZGVzYy5jJywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3JtZ3IuYyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3JtZ3IuYwppbmRleCA3ZDY3ZWRhNWY3Li42Nzhl ODFhZTAxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9ybWdyLmMKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vcm1nci5jCkBAIC0yNyw2ICsyNyw3IEBACiAj aW5jbHVkZSAiZm1nci5oIgogI2luY2x1ZGUgImZ1bmNhcGkuaCIKICNpbmNsdWRlICJtaXNjYWRt aW4uaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCiAjaW5jbHVkZSAicmVw bGljYXRpb24vZGVjb2RlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbWVzc2FnZS5oIgogI2lu Y2x1ZGUgInJlcGxpY2F0aW9uL29yaWdpbi5oIgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vbG9naWNhbC9NYWtlZmlsZSBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvTWFrZWZpbGUKaW5kZXggYzRlMmZkZWI3MS4uZDRmMjlmOGZmYyAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlCkBAIC0xNSw2ICsxNSw3IEBAIGluY2x1ZGUgJCh0 b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmlsZS5nbG9iYWwKIG92ZXJyaWRlIENQUEZMQUdTIDo9IC1J JChzcmNkaXIpICQoQ1BQRkxBR1MpCiAKIE9CSlMgPSBcCisJZGRsbWVzc2FnZS5vXAogCWRlY29k ZS5vIFwKIAlsYXVuY2hlci5vIFwKIAlsb2dpY2FsLm8gXApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9kZGxtZXNzYWdlLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL2RkbG1lc3NhZ2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwLi5lMTFlNTZlNWEzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9kZGxtZXNzYWdlLmMKQEAgLTAsMCArMSw4NCBAQAorLyotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgKgorICogZGRsbWVzc2FnZS5jCisgKgkgIExvZ2ljYWwgRERMIG1lc3NhZ2VzLgor ICoKKyAqIENvcHlyaWdodCAoYykgMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQg R3JvdXAKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL2RkbG1lc3NhZ2UuYworICoKKyAqIE5PVEVTCisgKgorICogTG9naWNhbCBEREwg bWVzc2FnZXMgYWxsb3cgWExPRyBsb2dnaW5nIG9mIERETCBjb21tYW5kIHN0cmluZ3MgdGhhdAor ICogZ2V0IHBhc3NlZCB0byB0aGUgbG9naWNhbCBkZWNvZGluZyBwbHVnaW4uIEluIG5vcm1hbCBY TE9HIHByb2Nlc3NpbmcgdGhleQorICogYXJlIHNhbWUgYXMgTk9PUC4KKyAqCisgKiBVbmxpa2Ug Z2VuZXJpYyBsb2dpY2FsIG1lc3NhZ2VzLCB0aGVzZSBEREwgbWVzc2FnZXMgaGF2ZSBvbmx5IHRy YW5zYWN0aW9uYWwKKyAqIG1vZGUuIE5vdGUgYnkgZGVmYXVsdCBERExzIGluIFBvc3RncmVTUUwg YXJlIHRyYW5zYWN0aW9uYWwuCisgKgorICogVGhlc2UgbWVzc2FnZXMgYXJlIHBhcnQgb2YgY3Vy cmVudCB0cmFuc2FjdGlvbiBhbmQgd2lsbCBiZSBzZW50IHRvCisgKiBkZWNvZGluZyBwbHVnaW4g dXNpbmcgaW4gYSBzYW1lIHdheSBhcyBETUwgb3BlcmF0aW9ucy4KKyAqCisgKiBFdmVyeSBtZXNz YWdlIGNhcnJpZXMgcHJlZml4IHRvIGF2b2lkIGNvbmZsaWN0cyBiZXR3ZWVuIGRpZmZlcmVudCBk ZWNvZGluZworICogcGx1Z2lucy4gVGhlIHBsdWdpbiBhdXRob3JzIG11c3QgdGFrZSBleHRyYSBj YXJlIHRvIHVzZSB1bmlxdWUgcHJlZml4LAorICogZ29vZCBvcHRpb25zIHNlZW1zIHRvIGJlIGZv ciBleGFtcGxlIHRvIHVzZSB0aGUgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uLgorICoKKyAqIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAi YWNjZXNzL3hhY3QuaCIKKyNpbmNsdWRlICJhY2Nlc3MveGxvZ2luc2VydC5oIgorI2luY2x1ZGUg ImNhdGFsb2cvbmFtZXNwYWNlLmgiCisjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAi bm9kZXMvZXhlY25vZGVzLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbC5oIgorI2lu Y2x1ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW11dGls cy5oIgorCisvKgorICogV3JpdGUgbG9naWNhbCBkZWNvZGluZyBEREwgbWVzc2FnZSBpbnRvIFhM b2cuCisgKi8KK1hMb2dSZWNQdHIKK0xvZ0xvZ2ljYWxERExNZXNzYWdlKGNvbnN0IGNoYXIgKnBy ZWZpeCwgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCSBjb25z dCBjaGFyICptZXNzYWdlLCBzaXplX3Qgc2l6ZSkKK3sKKwl4bF9sb2dpY2FsX2RkbF9tZXNzYWdl IHhscmVjOworCisJIC8qIEVuc3VyZSB3ZSBoYXZlIGEgdmFsaWQgdHJhbnNhY3Rpb24gaWQuICov CisJQXNzZXJ0KElzVHJhbnNhY3Rpb25TdGF0ZSgpKTsKKwlHZXRDdXJyZW50VHJhbnNhY3Rpb25J ZCgpOworCisJeGxyZWMuZGJJZCA9IE15RGF0YWJhc2VJZDsKKwkvKiBUcmFpbGluZyB6ZXJvIGlz IGNyaXRpY2FsOyBzZWUgbG9naWNhbGRkbG1zZ19kZXNjICovCisJeGxyZWMucHJlZml4X3NpemUg PSBzdHJsZW4ocHJlZml4KSArIDE7CisJeGxyZWMubWVzc2FnZV9zaXplID0gc2l6ZTsKKwl4bHJl Yy5yZWxpZCA9IHJlbGlkOworCXhscmVjLmNtZHR5cGUgPSBjbWR0eXBlOworCisJWExvZ0JlZ2lu SW5zZXJ0KCk7CisJWExvZ1JlZ2lzdGVyRGF0YSgoY2hhciAqKSAmeGxyZWMsIFNpemVPZkxvZ2lj YWxERExNZXNzYWdlKTsKKwlYTG9nUmVnaXN0ZXJEYXRhKHVuY29uc3RpZnkoY2hhciAqLCBwcmVm aXgpLCB4bHJlYy5wcmVmaXhfc2l6ZSk7CisJWExvZ1JlZ2lzdGVyRGF0YSh1bmNvbnN0aWZ5KGNo YXIgKiwgbWVzc2FnZSksIHNpemUpOworCisJLyogQWxsb3cgb3JpZ2luIGZpbHRlcmluZyAqLwor CVhMb2dTZXRSZWNvcmRGbGFncyhYTE9HX0lOQ0xVREVfT1JJR0lOKTsKKworCXJldHVybiBYTG9n SW5zZXJ0KFJNX0xPR0lDQUxERExNU0dfSUQsIFhMT0dfTE9HSUNBTF9ERExfTUVTU0FHRSk7Cit9 CisKKy8qCisgKiBSZWRvIGlzIGJhc2ljYWxseSBqdXN0IG5vb3AgZm9yIGxvZ2ljYWwgZGVjb2Rp bmcgZGRsIG1lc3NhZ2VzLgorICovCit2b2lkCitsb2dpY2FsZGRsbXNnX3JlZG8oWExvZ1JlYWRl clN0YXRlICpyZWNvcmQpCit7CisJdWludDgJCWluZm8gPSBYTG9nUmVjR2V0SW5mbyhyZWNvcmQp ICYgflhMUl9JTkZPX01BU0s7CisKKwlpZiAoaW5mbyAhPSBYTE9HX0xPR0lDQUxfRERMX01FU1NB R0UpCisJCWVsb2coUEFOSUMsICJsb2dpY2FsZGRsbXNnX3JlZG86IHVua25vd24gb3AgY29kZSAl dSIsIGluZm8pOworCisJLyogVGhpcyBpcyBvbmx5IGludGVyZXN0aW5nIGZvciBsb2dpY2FsIGRl Y29kaW5nLCBzZWUgZGVjb2RlLmMuICovCit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC9kZWNvZGUuYwppbmRleCBjM2JjOGVjYzkyLi5lNTkxMDM5ZGMwIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jCisrKyBiL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJh Y2Nlc3MveGxvZ3V0aWxzLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb250cm9sLmgiCiAjaW5j bHVkZSAicmVwbGljYXRpb24vZGVjb2RlLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVz c2FnZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL2xvZ2ljYWwuaCIKICNpbmNsdWRlICJyZXBs aWNhdGlvbi9tZXNzYWdlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vb3JpZ2luLmgiCkBAIC02 MDMsNiArNjA0LDQ2IEBAIGxvZ2ljYWxtc2dfZGVjb2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQg KmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKQogCQkJCQkJCSAgbWVzc2FnZS0+bWVzc2FnZSAr IG1lc3NhZ2UtPnByZWZpeF9zaXplKTsKIH0KIAorLyoKKyAqIEhhbmRsZSBybWdyIExPR0lDQUxE RExNU0dfSUQgcmVjb3JkcyBmb3IgRGVjb2RlUmVjb3JkSW50b1Jlb3JkZXJCdWZmZXIoKS4KKyAq Lwordm9pZAorbG9naWNhbGRkbF9kZWNvZGUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBY TG9nUmVjb3JkQnVmZmVyICpidWYpCit7CisJU25hcEJ1aWxkICAqYnVpbGRlciA9IGN0eC0+c25h cHNob3RfYnVpbGRlcjsKKwlYTG9nUmVhZGVyU3RhdGUgKnIgPSBidWYtPnJlY29yZDsKKwlUcmFu c2FjdGlvbklkIHhpZCA9IFhMb2dSZWNHZXRYaWQocik7CisJdWludDgJCWluZm8gPSBYTG9nUmVj R2V0SW5mbyhyKSAmIH5YTFJfSU5GT19NQVNLOworCVJlcE9yaWdpbklkIG9yaWdpbl9pZCA9IFhM b2dSZWNHZXRPcmlnaW4ocik7CisJeGxfbG9naWNhbF9kZGxfbWVzc2FnZSAqbWVzc2FnZTsKKwor CWlmIChpbmZvICE9IFhMT0dfTE9HSUNBTF9ERExfTUVTU0FHRSkKKwkJZWxvZyhFUlJPUiwgInVu ZXhwZWN0ZWQgUk1fTE9HSUNBTERETE1TR19JRCByZWNvcmQgdHlwZTogJXUiLCBpbmZvKTsKKwor CVJlb3JkZXJCdWZmZXJQcm9jZXNzWGlkKGN0eC0+cmVvcmRlciwgWExvZ1JlY0dldFhpZChyKSwg YnVmLT5vcmlncHRyKTsKKworCS8qCisJICogSWYgd2UgZG9uJ3QgaGF2ZSBzbmFwc2hvdCBvciB3 ZSBhcmUganVzdCBmYXN0LWZvcndhcmRpbmcsIHRoZXJlIGlzIG5vCisJICogcG9pbnQgaW4gZGVj b2RpbmcgZGRsIG1lc3NhZ2VzLgorCSAqLworCWlmIChTbmFwQnVpbGRDdXJyZW50U3RhdGUoYnVp bGRlcikgPCBTTkFQQlVJTERfRlVMTF9TTkFQU0hPVCB8fAorCQljdHgtPmZhc3RfZm9yd2FyZCkK KwkJcmV0dXJuOworCisJbWVzc2FnZSA9ICh4bF9sb2dpY2FsX2RkbF9tZXNzYWdlICopIFhMb2dS ZWNHZXREYXRhKHIpOworCisJaWYgKG1lc3NhZ2UtPmRiSWQgIT0gY3R4LT5zbG90LT5kYXRhLmRh dGFiYXNlIHx8CisJCUZpbHRlckJ5T3JpZ2luKGN0eCwgb3JpZ2luX2lkKSkKKwkJcmV0dXJuOwor CisJaWYgKFNuYXBCdWlsZFByb2Nlc3NDaGFuZ2UoYnVpbGRlciwgeGlkLCBidWYtPm9yaWdwdHIp KQorCQlSZW9yZGVyQnVmZmVyUXVldWVERExNZXNzYWdlKGN0eC0+cmVvcmRlciwgeGlkLCBidWYt PmVuZHB0ciwKKwkJCQkJCQkJCSBtZXNzYWdlLT5tZXNzYWdlLCAvKiBmaXJzdCBwYXJ0IG9mIG1l c3NhZ2UgaXMgcHJlZml4ICovCisJCQkJCQkJCQkgbWVzc2FnZS0+bWVzc2FnZV9zaXplLAorCQkJ CQkJCQkJIG1lc3NhZ2UtPm1lc3NhZ2UgKyBtZXNzYWdlLT5wcmVmaXhfc2l6ZSwKKwkJCQkJCQkJ CSBtZXNzYWdlLT5yZWxpZCwgbWVzc2FnZS0+Y21kdHlwZSk7Cit9CisKIC8qCiAgKiBDb25zb2xp ZGF0ZWQgY29tbWl0IHJlY29yZCBoYW5kbGluZyBiZXR3ZWVuIHRoZSBkaWZmZXJlbnQgZm9ybSBv ZiBjb21taXQKICAqIHJlY29yZHMuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL2xvZ2ljYWwuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9n aWNhbC5jCmluZGV4IDUyZDFmZTYyNjkuLjRkODRkZjgyZjggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbC5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvbG9naWNhbC5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiZm1n ci5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgorI2luY2x1 ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZWNv ZGUuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2FsLmgiCiAjaW5jbHVkZSAicmVwbGlj YXRpb24vb3JpZ2luLmgiCkBAIC03Myw2ICs3NCwxMCBAQCBzdGF0aWMgdm9pZCB0cnVuY2F0ZV9j Yl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiBz dGF0aWMgdm9pZCBtZXNzYWdlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3Jk ZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJCQkgICBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLCBib29s IHRyYW5zYWN0aW9uYWwsCiAJCQkJCQkJICAgY29uc3QgY2hhciAqcHJlZml4LCBTaXplIG1lc3Nh Z2Vfc2l6ZSwgY29uc3QgY2hhciAqbWVzc2FnZSk7CitzdGF0aWMgdm9pZCBkZGxfY2Jfd3JhcHBl cihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkJCQkg IFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJCQkJICBP aWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkJICBTaXplIG1l c3NhZ2Vfc2l6ZSwgY29uc3QgY2hhciAqbWVzc2FnZSk7CiAKIC8qIHN0cmVhbWluZyBjYWxsYmFj a3MgKi8KIHN0YXRpYyB2b2lkIHN0cmVhbV9zdGFydF9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIg KmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCkBAIC0yMTgsNiArMjIzLDcgQEAgU3RhcnR1 cERlY29kaW5nQ29udGV4dChMaXN0ICpvdXRwdXRfcGx1Z2luX29wdGlvbnMsCiAJY3R4LT5yZW9y ZGVyLT5hcHBseV90cnVuY2F0ZSA9IHRydW5jYXRlX2NiX3dyYXBwZXI7CiAJY3R4LT5yZW9yZGVy LT5jb21taXQgPSBjb21taXRfY2Jfd3JhcHBlcjsKIAljdHgtPnJlb3JkZXItPm1lc3NhZ2UgPSBt ZXNzYWdlX2NiX3dyYXBwZXI7CisJY3R4LT5yZW9yZGVyLT5kZGwgPSBkZGxfY2Jfd3JhcHBlcjsK IAogCS8qCiAJICogVG8gc3VwcG9ydCBzdHJlYW1pbmcsIHdlIHJlcXVpcmUgc3RhcnQvc3RvcC9h Ym9ydC9jb21taXQvY2hhbmdlCkBAIC0xMjIwLDYgKzEyMjYsNDQgQEAgbWVzc2FnZV9jYl93cmFw cGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJZXJyb3Jf Y29udGV4dF9zdGFjayA9IGVycmNhbGxiYWNrLnByZXZpb3VzOwogfQogCitzdGF0aWMgdm9pZAor ZGRsX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4 biwKKwkJCQkJICBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJCQkgIGNvbnN0IGNoYXIgKnBy ZWZpeCwgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCSAgU2l6 ZSBtZXNzYWdlX3NpemUsCisJCQkJCSAgY29uc3QgY2hhciAqbWVzc2FnZSkKK3sKKwlMb2dpY2Fs RGVjb2RpbmdDb250ZXh0ICpjdHggPSBjYWNoZS0+cHJpdmF0ZV9kYXRhOworCUxvZ2ljYWxFcnJv ckNhbGxiYWNrU3RhdGUgc3RhdGU7CisJRXJyb3JDb250ZXh0Q2FsbGJhY2sgZXJyY2FsbGJhY2s7 CisKKwlBc3NlcnQoIWN0eC0+ZmFzdF9mb3J3YXJkKTsKKworCWlmIChjdHgtPmNhbGxiYWNrcy5k ZGxfY2IgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyogUHVzaCBjYWxsYmFjayArIGluZm8gb24g dGhlIGVycm9yIGNvbnRleHQgc3RhY2sgKi8KKwlzdGF0ZS5jdHggPSBjdHg7CisJc3RhdGUuY2Fs bGJhY2tfbmFtZSA9ICJkZGwiOworCXN0YXRlLnJlcG9ydF9sb2NhdGlvbiA9IG1lc3NhZ2VfbHNu OworCWVycmNhbGxiYWNrLmNhbGxiYWNrID0gb3V0cHV0X3BsdWdpbl9lcnJvcl9jYWxsYmFjazsK KwllcnJjYWxsYmFjay5hcmcgPSAodm9pZCAqKSAmc3RhdGU7CisJZXJyY2FsbGJhY2sucHJldmlv dXMgPSBlcnJvcl9jb250ZXh0X3N0YWNrOworCWVycm9yX2NvbnRleHRfc3RhY2sgPSAmZXJyY2Fs bGJhY2s7CisKKwkvKiBzZXQgb3V0cHV0IHN0YXRlICovCisJY3R4LT5hY2NlcHRfd3JpdGVzID0g dHJ1ZTsKKwljdHgtPndyaXRlX3hpZCA9IHR4biAhPSBOVUxMID8gdHhuLT54aWQgOiBJbnZhbGlk VHJhbnNhY3Rpb25JZDsKKwljdHgtPndyaXRlX2xvY2F0aW9uID0gbWVzc2FnZV9sc247CisKKwkv KiBkbyB0aGUgYWN0dWFsIHdvcms6IGNhbGwgY2FsbGJhY2sgKi8KKwljdHgtPmNhbGxiYWNrcy5k ZGxfY2IoY3R4LCB0eG4sIG1lc3NhZ2VfbHNuLCBwcmVmaXgsIHJlbGlkLCBjbWR0eXBlLAorCQkJ CQkJCQkgbWVzc2FnZV9zaXplLCBtZXNzYWdlKTsKKworCS8qIFBvcCB0aGUgZXJyb3IgY29udGV4 dCBzdGFjayAqLworCWVycm9yX2NvbnRleHRfc3RhY2sgPSBlcnJjYWxsYmFjay5wcmV2aW91czsK K30KKwogc3RhdGljIHZvaWQKIHN0cmVhbV9zdGFydF9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIg KmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJCQlYTG9nUmVjUHRyIGZpcnN0X2xz bikKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbGZ1 bmNzLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWxmdW5jcy5jCmlu ZGV4IGZhMWI2NDFhMmIuLjkyZjVmOTM1N2UgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvbG9naWNhbGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9sb2dpY2FsZnVuY3MuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIm5v ZGVzL21ha2VmdW5jcy5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RlY29kZS5oIgogI2luY2x1 ZGUgInJlcGxpY2F0aW9uL2xvZ2ljYWwuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNz YWdlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbWVzc2FnZS5oIgogI2luY2x1ZGUgInN0b3Jh Z2UvZmQuaCIKICNpbmNsdWRlICJ1dGlscy9hcnJheS5oIgpAQCAtMzg4LDMgKzM4OSwyNiBAQCBw Z19sb2dpY2FsX2VtaXRfbWVzc2FnZV90ZXh0KFBHX0ZVTkNUSU9OX0FSR1MpCiAJLyogYnl0ZWEg YW5kIHRleHQgYXJlIGNvbXBhdGlibGUgKi8KIAlyZXR1cm4gcGdfbG9naWNhbF9lbWl0X21lc3Nh Z2VfYnl0ZWEoZmNpbmZvKTsKIH0KKworLyoKKyAqIFNRTCBmdW5jdGlvbiBmb3Igd3JpdGluZyBs b2dpY2FsIGRlY29kaW5nIERETCBtZXNzYWdlIGludG8gV0FMLgorICovCitEYXR1bQorcGdfbG9n aWNhbF9lbWl0X2RkbF9tZXNzYWdlX2J5dGVhKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJY2hhcgkg ICAqcHJlZml4ID0gdGV4dF90b19jc3RyaW5nKFBHX0dFVEFSR19URVhUX1BQKDApKTsKKwlPaWQJ CQlyZWxpZCA9IFBHX0dFVEFSR19PSUQoMSk7CisJRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBl ID0gUEdfR0VUQVJHX0lOVDE2KDIpOworCWNoYXIJICAgKmRhdGEgPSB0ZXh0X3RvX2NzdHJpbmco UEdfR0VUQVJHX1RFWFRfUFAoMykpOworCVhMb2dSZWNQdHIJbHNuOworCisJbHNuID0gTG9nTG9n aWNhbERETE1lc3NhZ2UocHJlZml4LCByZWxpZCwgY21kdHlwZSwgZGF0YSwgc3RybGVuKGRhdGEp KTsKKwlQR19SRVRVUk5fTFNOKGxzbik7Cit9CisKK0RhdHVtCitwZ19sb2dpY2FsX2VtaXRfZGRs X21lc3NhZ2VfdGV4dChQR19GVU5DVElPTl9BUkdTKQoreworCS8qIGJ5dGVhIGFuZCB0ZXh0IGFy ZSBjb21wYXRpYmxlICovCisJcmV0dXJuIHBnX2xvZ2ljYWxfZW1pdF9kZGxfbWVzc2FnZV9ieXRl YShmY2luZm8pOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC9tZXNvbi5idWlsZCBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbWVzb24uYnVp bGQKaW5kZXggNzE0NGQ3YThhNC4uY2RhOTEzZDBiOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC9tZXNvbi5idWlsZAorKysgYi9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL21lc29uLmJ1aWxkCkBAIC0xLDYgKzEsNyBAQAogIyBDb3B5cmlnaHQgKGMp IDIwMjItMjAyMywgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKIAogYmFja2Vu ZF9zb3VyY2VzICs9IGZpbGVzKAorICAnZGRsbWVzc2FnZS5jJywKICAgJ2RlY29kZS5jJywKICAg J2xhdW5jaGVyLmMnLAogICAnbG9naWNhbC5jJywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMKaW5kZXggMjlhMDE4YzU4YS4uM2Y0MGRlYTI4MSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVy LmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMK QEAgLTk0LDYgKzk0LDcgQEAKICNpbmNsdWRlICJsaWIvYmluYXJ5aGVhcC5oIgogI2luY2x1ZGUg Im1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9u L2RkbG1lc3NhZ2UuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2FsLmgiCiAjaW5jbHVk ZSAicmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL3Ns b3QuaCIKQEAgLTUxNiw2ICs1MTcsMTQgQEAgUmVvcmRlckJ1ZmZlclJldHVybkNoYW5nZShSZW9y ZGVyQnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZlckNoYW5nZSAqY2hhbmdlLAogCQkJCXBmcmVlKGNo YW5nZS0+ZGF0YS5tc2cubWVzc2FnZSk7CiAJCQljaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2UgPSBO VUxMOwogCQkJYnJlYWs7CisJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0RETDoKKwkJCWlm IChjaGFuZ2UtPmRhdGEuZGRsLnByZWZpeCAhPSBOVUxMKQorCQkJCXBmcmVlKGNoYW5nZS0+ZGF0 YS5kZGwucHJlZml4KTsKKwkJCWNoYW5nZS0+ZGF0YS5kZGwucHJlZml4ID0gTlVMTDsKKwkJCWlm IChjaGFuZ2UtPmRhdGEuZGRsLm1lc3NhZ2UgIT0gTlVMTCkKKwkJCQlwZnJlZShjaGFuZ2UtPmRh dGEuZGRsLm1lc3NhZ2UpOworCQkJY2hhbmdlLT5kYXRhLmRkbC5tZXNzYWdlID0gTlVMTDsKKwkJ CWJyZWFrOwogCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlZBTElEQVRJT046CiAJCQlp ZiAoY2hhbmdlLT5kYXRhLmludmFsLmludmFsaWRhdGlvbnMpCiAJCQkJcGZyZWUoY2hhbmdlLT5k YXRhLmludmFsLmludmFsaWRhdGlvbnMpOwpAQCAtODk0LDYgKzkwMywzNiBAQCBSZW9yZGVyQnVm ZmVyUXVldWVNZXNzYWdlKFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhpZCwKIAl9 CiB9CiAKKy8qCisgKiBBIHRyYW5zYWN0aW9uYWwgRERMIG1lc3NhZ2UgaXMgcXVldWVkIHRvIGJl IHByb2Nlc3NlZCB1cG9uIGNvbW1pdC4KKyAqLwordm9pZAorUmVvcmRlckJ1ZmZlclF1ZXVlRERM TWVzc2FnZShSZW9yZGVyQnVmZmVyICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsCisJCQkJCQkJIFhM b2dSZWNQdHIgbHNuLCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJCQkJIFNpemUgbWVzc2FnZV9z aXplLCBjb25zdCBjaGFyICptZXNzYWdlLAorCQkJCQkJCSBPaWQgcmVsaWQsIERlcGFyc2VkQ29t bWFuZFR5cGUgY21kdHlwZSkKK3sKKwlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisJUmVvcmRl ckJ1ZmZlckNoYW5nZSAqY2hhbmdlOworCisJQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHhp ZCkpOworCisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhyYi0+Y29udGV4dCk7 CisKKwljaGFuZ2UgPSBSZW9yZGVyQnVmZmVyR2V0Q2hhbmdlKHJiKTsKKwljaGFuZ2UtPmFjdGlv biA9IFJFT1JERVJfQlVGRkVSX0NIQU5HRV9EREw7CisJY2hhbmdlLT5kYXRhLmRkbC5wcmVmaXgg PSBwc3RyZHVwKHByZWZpeCk7CisJY2hhbmdlLT5kYXRhLmRkbC5yZWxpZCA9IHJlbGlkOworCWNo YW5nZS0+ZGF0YS5kZGwuY21kdHlwZSA9IGNtZHR5cGU7CisJY2hhbmdlLT5kYXRhLmRkbC5tZXNz YWdlX3NpemUgPSBtZXNzYWdlX3NpemU7CisJY2hhbmdlLT5kYXRhLmRkbC5tZXNzYWdlID0gcGFs bG9jKG1lc3NhZ2Vfc2l6ZSk7CisJbWVtY3B5KGNoYW5nZS0+ZGF0YS5kZGwubWVzc2FnZSwgbWVz c2FnZSwgbWVzc2FnZV9zaXplKTsKKworCVJlb3JkZXJCdWZmZXJRdWV1ZUNoYW5nZShyYiwgeGlk LCBsc24sIGNoYW5nZSwgZmFsc2UpOworCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRl eHQpOworfQorCiAvKgogICogQXNzZXJ0VFhOTHNuT3JkZXIKICAqCQlWZXJpZnkgTFNOIG9yZGVy aW5nIG9mIHRyYW5zYWN0aW9uIGxpc3RzIGluIHRoZSByZW9yZGVyYnVmZmVyCkBAIC0yMDAyLDYg KzIwNDEsMjEgQEAgUmVvcmRlckJ1ZmZlckFwcGx5TWVzc2FnZShSZW9yZGVyQnVmZmVyICpyYiwg UmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQljaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2UpOwog fQogCisvKgorICogSGVscGVyIGZ1bmN0aW9uIGZvciBSZW9yZGVyQnVmZmVyUHJvY2Vzc1RYTiBm b3IgYXBwbHlpbmcgdGhlIERETCBtZXNzYWdlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK1Jl b3JkZXJCdWZmZXJBcHBseURETE1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZm ZXJUWE4gKnR4biwKKwkJCQkJCQkgUmVvcmRlckJ1ZmZlckNoYW5nZSAqY2hhbmdlLCBib29sIHN0 cmVhbWluZykKK3sKKwlyYi0+ZGRsKHJiLCB0eG4sIGNoYW5nZS0+bHNuLAorCQkJY2hhbmdlLT5k YXRhLmRkbC5wcmVmaXgsCisJCQljaGFuZ2UtPmRhdGEuZGRsLnJlbGlkLAorCQkJY2hhbmdlLT5k YXRhLmRkbC5jbWR0eXBlLAorCQkJY2hhbmdlLT5kYXRhLmRkbC5tZXNzYWdlX3NpemUsCisJCQlj aGFuZ2UtPmRhdGEuZGRsLm1lc3NhZ2UpOworfQorCiAvKgogICogRnVuY3Rpb24gdG8gc3RvcmUg dGhlIGNvbW1hbmQgaWQgYW5kIHNuYXBzaG90IGF0IHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQKICAq IHN0cmVhbSBzbyB0aGF0IHdlIGNhbiByZXVzZSB0aGUgc2FtZSB3aGlsZSBzZW5kaW5nIHRoZSBu ZXh0IHN0cmVhbS4KQEAgLTIzODIsNiArMjQzNiwxMCBAQCBSZW9yZGVyQnVmZmVyUHJvY2Vzc1RY TihSZW9yZGVyQnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQlSZW9yZGVy QnVmZmVyQXBwbHlNZXNzYWdlKHJiLCB0eG4sIGNoYW5nZSwgc3RyZWFtaW5nKTsKIAkJCQkJYnJl YWs7CiAKKwkJCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9EREw6CisJCQkJCVJlb3JkZXJC dWZmZXJBcHBseURETE1lc3NhZ2UocmIsIHR4biwgY2hhbmdlLCBzdHJlYW1pbmcpOworCQkJCQli cmVhazsKKwogCQkJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVkFMSURBVElPTjoKIAkJ CQkJLyogRXhlY3V0ZSB0aGUgaW52YWxpZGF0aW9uIG1lc3NhZ2VzIGxvY2FsbHkgKi8KIAkJCQkJ UmVvcmRlckJ1ZmZlckV4ZWN1dGVJbnZhbGlkYXRpb25zKGNoYW5nZS0+ZGF0YS5pbnZhbC5uaW52 YWxpZGF0aW9ucywKQEAgLTM4MTgsNiArMzg3NiwzOSBAQCBSZW9yZGVyQnVmZmVyU2VyaWFsaXpl Q2hhbmdlKFJlb3JkZXJCdWZmZXIgKnJiLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJCSAg IGNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZV9zaXplKTsKIAkJCQlkYXRhICs9IGNoYW5nZS0+ZGF0 YS5tc2cubWVzc2FnZV9zaXplOwogCisJCQkJYnJlYWs7CisJCQl9CisJCWNhc2UgUkVPUkRFUl9C VUZGRVJfQ0hBTkdFX0RETDoKKwkJCXsKKwkJCQljaGFyCSAgICpkYXRhOworCQkJCVNpemUJCXBy ZWZpeF9zaXplID0gc3RybGVuKGNoYW5nZS0+ZGF0YS5kZGwucHJlZml4KSArIDE7CisKKwkJCQlz eiArPSBwcmVmaXhfc2l6ZSArIGNoYW5nZS0+ZGF0YS5kZGwubWVzc2FnZV9zaXplICsKKwkJCQkJ c2l6ZW9mKFNpemUpICsgc2l6ZW9mKE9pZCkgKyBzaXplb2YoaW50KSArIHNpemVvZihTaXplKTsK KwkJCQlSZW9yZGVyQnVmZmVyU2VyaWFsaXplUmVzZXJ2ZShyYiwgc3opOworCisJCQkJZGF0YSA9 ICgoY2hhciAqKSByYi0+b3V0YnVmKSArIHNpemVvZihSZW9yZGVyQnVmZmVyRGlza0NoYW5nZSk7 CisKKwkJCQkvKiBtaWdodCBoYXZlIGJlZW4gcmVhbGxvY2F0ZWQgYWJvdmUgKi8KKwkJCQlvbmRp c2sgPSAoUmVvcmRlckJ1ZmZlckRpc2tDaGFuZ2UgKikgcmItPm91dGJ1ZjsKKworCQkJCS8qIHdy aXRlIHRoZSBwcmVmaXgsIHJlbGlkIGFuZCBjbWR0eXBlIGluY2x1ZGluZyB0aGUgc2l6ZSAqLwor CQkJCW1lbWNweShkYXRhLCAmcHJlZml4X3NpemUsIHNpemVvZihTaXplKSk7CisJCQkJZGF0YSAr PSBzaXplb2YoU2l6ZSk7CisJCQkJbWVtY3B5KGRhdGEsICZjaGFuZ2UtPmRhdGEuZGRsLnJlbGlk LCBzaXplb2YoT2lkKSk7CisJCQkJZGF0YSArPSBzaXplb2YoT2lkKTsKKwkJCQltZW1jcHkoZGF0 YSwgJmNoYW5nZS0+ZGF0YS5kZGwuY21kdHlwZSwgc2l6ZW9mKERlcGFyc2VkQ29tbWFuZFR5cGUp KTsKKwkJCQlkYXRhICs9IHNpemVvZihpbnQpOworCQkJCW1lbWNweShkYXRhLCBjaGFuZ2UtPmRh dGEuZGRsLnByZWZpeCwgcHJlZml4X3NpemUpOworCQkJCWRhdGEgKz0gcHJlZml4X3NpemU7CisK KwkJCQkvKiB3cml0ZSB0aGUgbWVzc2FnZSBpbmNsdWRpbmcgdGhlIHNpemUgKi8KKwkJCQltZW1j cHkoZGF0YSwgJmNoYW5nZS0+ZGF0YS5kZGwubWVzc2FnZV9zaXplLCBzaXplb2YoU2l6ZSkpOwor CQkJCWRhdGEgKz0gc2l6ZW9mKFNpemUpOworCQkJCW1lbWNweShkYXRhLCBjaGFuZ2UtPmRhdGEu ZGRsLm1lc3NhZ2UsCisJCQkJCSAgIGNoYW5nZS0+ZGF0YS5kZGwubWVzc2FnZV9zaXplKTsKKwkJ CQlkYXRhICs9IGNoYW5nZS0+ZGF0YS5kZGwubWVzc2FnZV9zaXplOworCiAJCQkJYnJlYWs7CiAJ CQl9CiAJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVkFMSURBVElPTjoKQEAgLTQxMzIs NiArNDIyMywxNSBAQCBSZW9yZGVyQnVmZmVyQ2hhbmdlU2l6ZShSZW9yZGVyQnVmZmVyQ2hhbmdl ICpjaGFuZ2UpCiAJCQkJc3ogKz0gcHJlZml4X3NpemUgKyBjaGFuZ2UtPmRhdGEubXNnLm1lc3Nh Z2Vfc2l6ZSArCiAJCQkJCXNpemVvZihTaXplKSArIHNpemVvZihTaXplKTsKIAorCQkJCWJyZWFr OworCQkJfQorCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9EREw6CisJCQl7CisJCQkJU2l6 ZQkJcHJlZml4X3NpemUgPSBzdHJsZW4oY2hhbmdlLT5kYXRhLmRkbC5wcmVmaXgpICsgMTsKKwor CQkJCXN6ICs9IHByZWZpeF9zaXplICsgY2hhbmdlLT5kYXRhLmRkbC5tZXNzYWdlX3NpemUgKwor CQkJCQlzaXplb2YoU2l6ZSkgKyBzaXplb2YoU2l6ZSkgKyBzaXplb2YoT2lkKSArIHNpemVvZihE ZXBhcnNlZENvbW1hbmRUeXBlKTsKKwogCQkJCWJyZWFrOwogCQkJfQogCQljYXNlIFJFT1JERVJf QlVGRkVSX0NIQU5HRV9JTlZBTElEQVRJT046CkBAIC00NDA5LDYgKzQ1MDksMzMgQEAgUmVvcmRl ckJ1ZmZlclJlc3RvcmVDaGFuZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJUWE4g KnR4biwKIAkJCQkJICAgY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlX3NpemUpOwogCQkJCWRhdGEg Kz0gY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlX3NpemU7CiAKKwkJCQlicmVhazsKKwkJCX0KKwkJ Y2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfRERMOgorCQkJeworCQkJCVNpemUJCXByZWZpeF9z aXplOworCisJCQkJLyogcmVhZCBwcmVmaXggKi8KKwkJCQltZW1jcHkoJnByZWZpeF9zaXplLCBk YXRhLCBzaXplb2YoU2l6ZSkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKFNpemUpOworCQkJCW1lbWNw eSgmY2hhbmdlLT5kYXRhLmRkbC5yZWxpZCwgZGF0YSwgc2l6ZW9mKE9pZCkpOworCQkJCWRhdGEg Kz0gc2l6ZW9mKE9pZCk7CisJCQkJbWVtY3B5KCZjaGFuZ2UtPmRhdGEuZGRsLmNtZHR5cGUsIGRh dGEsIHNpemVvZihEZXBhcnNlZENvbW1hbmRUeXBlKSk7CisJCQkJZGF0YSArPSBzaXplb2YoaW50 KTsKKwkJCQljaGFuZ2UtPmRhdGEuZGRsLnByZWZpeCA9IE1lbW9yeUNvbnRleHRBbGxvYyhyYi0+ Y29udGV4dCwgcHJlZml4X3NpemUpOworCQkJCW1lbWNweShjaGFuZ2UtPmRhdGEuZGRsLnByZWZp eCwgZGF0YSwgcHJlZml4X3NpemUpOworCQkJCUFzc2VydChjaGFuZ2UtPmRhdGEuZGRsLnByZWZp eFtwcmVmaXhfc2l6ZSAtIDFdID09ICdcMCcpOworCQkJCWRhdGEgKz0gcHJlZml4X3NpemU7CisK KwkJCQkvKiByZWFkIHRoZSBtZXNzYWdlICovCisJCQkJbWVtY3B5KCZjaGFuZ2UtPmRhdGEubXNn Lm1lc3NhZ2Vfc2l6ZSwgZGF0YSwgc2l6ZW9mKFNpemUpKTsKKwkJCQlkYXRhICs9IHNpemVvZihT aXplKTsKKwkJCQljaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2UgPSBNZW1vcnlDb250ZXh0QWxsb2Mo cmItPmNvbnRleHQsCisJCQkJCQkJCQkJCQkJCQkgIGNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZV9z aXplKTsKKwkJCQltZW1jcHkoY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlLCBkYXRhLAorCQkJCQkg ICBjaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2Vfc2l6ZSk7CisJCQkJZGF0YSArPSBjaGFuZ2UtPmRh dGEubXNnLm1lc3NhZ2Vfc2l6ZTsKKwogCQkJCWJyZWFrOwogCQkJfQogCQljYXNlIFJFT1JERVJf QlVGRkVSX0NIQU5HRV9JTlZBTElEQVRJT046CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3dhbGR1 bXAvcm1ncmRlc2MuYyBiL3NyYy9iaW4vcGdfd2FsZHVtcC9ybWdyZGVzYy5jCmluZGV4IDZiOGMx N2JiNGMuLmRhZjE3MzAyNTIgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfd2FsZHVtcC9ybWdyZGVz Yy5jCisrKyBiL3NyYy9iaW4vcGdfd2FsZHVtcC9ybWdyZGVzYy5jCkBAIC0yNiw2ICsyNiw3IEBA CiAjaW5jbHVkZSAiY29tbWFuZHMvZGJjb21tYW5kc194bG9nLmgiCiAjaW5jbHVkZSAiY29tbWFu ZHMvc2VxdWVuY2UuaCIKICNpbmNsdWRlICJjb21tYW5kcy90YWJsZXNwYWNlLmgiCisjaW5jbHVk ZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL21lc3Nh Z2UuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9vcmlnaW4uaCIKICNpbmNsdWRlICJybWdyZGVz Yy5oIgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JtZ3JsaXN0LmggYi9zcmMvaW5j bHVkZS9hY2Nlc3Mvcm1ncmxpc3QuaAppbmRleCA0NjNiY2I2N2M1Li5hYmNiZTk3NTkzIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3Mvcm1ncmxpc3QuaAorKysgYi9zcmMvaW5jbHVkZS9h Y2Nlc3Mvcm1ncmxpc3QuaApAQCAtNDcsMyArNDcsNCBAQCBQR19STUdSKFJNX0NPTU1JVF9UU19J RCwgIkNvbW1pdFRzIiwgY29tbWl0X3RzX3JlZG8sIGNvbW1pdF90c19kZXNjLCBjb21taXRfdHNf aQogUEdfUk1HUihSTV9SRVBMT1JJR0lOX0lELCAiUmVwbGljYXRpb25PcmlnaW4iLCByZXBsb3Jp Z2luX3JlZG8sIHJlcGxvcmlnaW5fZGVzYywgcmVwbG9yaWdpbl9pZGVudGlmeSwgTlVMTCwgTlVM TCwgTlVMTCwgTlVMTCkKIFBHX1JNR1IoUk1fR0VORVJJQ19JRCwgIkdlbmVyaWMiLCBnZW5lcmlj X3JlZG8sIGdlbmVyaWNfZGVzYywgZ2VuZXJpY19pZGVudGlmeSwgTlVMTCwgTlVMTCwgZ2VuZXJp Y19tYXNrLCBOVUxMKQogUEdfUk1HUihSTV9MT0dJQ0FMTVNHX0lELCAiTG9naWNhbE1lc3NhZ2Ui LCBsb2dpY2FsbXNnX3JlZG8sIGxvZ2ljYWxtc2dfZGVzYywgbG9naWNhbG1zZ19pZGVudGlmeSwg TlVMTCwgTlVMTCwgTlVMTCwgbG9naWNhbG1zZ19kZWNvZGUpCitQR19STUdSKFJNX0xPR0lDQUxE RExNU0dfSUQsICJMb2dpY2FsRERMTWVzc2FnZSIsIGxvZ2ljYWxkZGxtc2dfcmVkbywgbG9naWNh bGRkbG1zZ19kZXNjLCBsb2dpY2FsZGRsbXNnX2lkZW50aWZ5LCBOVUxMLCBOVUxMLCBOVUxMLCBs b2dpY2FsZGRsX2RlY29kZSkKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJv Yy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CmluZGV4IGJkZjVjZmJjZTku LmY0NTZlZmI1OWYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQK KysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdApAQCAtMTEwMDAsNiArMTEwMDAs MTQgQEAKICAgcHJvbmFtZSA9PiAncGdfbG9naWNhbF9lbWl0X21lc3NhZ2UnLCBwcm92b2xhdGls ZSA9PiAndicsIHByb3BhcmFsbGVsID0+ICd1JywKICAgcHJvcmV0dHlwZSA9PiAncGdfbHNuJywg cHJvYXJndHlwZXMgPT4gJ2Jvb2wgdGV4dCBieXRlYScsCiAgIHByb3NyYyA9PiAncGdfbG9naWNh bF9lbWl0X21lc3NhZ2VfYnl0ZWEnIH0sCit7IG9pZCA9PiAnMzgxMycsIGRlc2NyID0+ICdlbWl0 IGEgdGV4dHVhbCBsb2dpY2FsIGRlY29kaW5nIG1lc3NhZ2UnLAorICBwcm9uYW1lID0+ICdwZ19s b2dpY2FsX2VtaXRfZGRsX21lc3NhZ2UnLCBwcm92b2xhdGlsZSA9PiAndicsIHByb3BhcmFsbGVs ID0+ICd1JywKKyAgcHJvcmV0dHlwZSA9PiAncGdfbHNuJywgcHJvYXJndHlwZXMgPT4gJ2Jvb2wg dGV4dCB0ZXh0JywKKyAgcHJvc3JjID0+ICdwZ19sb2dpY2FsX2VtaXRfZGRsX21lc3NhZ2VfdGV4 dCcgfSwKK3sgb2lkID0+ICczODE0JywgZGVzY3IgPT4gJ2VtaXQgYSBiaW5hcnkgbG9naWNhbCBk ZWNvZGluZyBtZXNzYWdlJywKKyAgcHJvbmFtZSA9PiAncGdfbG9naWNhbF9lbWl0X2RkbF9tZXNz YWdlJywgcHJvdm9sYXRpbGUgPT4gJ3YnLCBwcm9wYXJhbGxlbCA9PiAndScsCisgIHByb3JldHR5 cGUgPT4gJ3BnX2xzbicsIHByb2FyZ3R5cGVzID0+ICd0ZXh0IHJlZ2NsYXNzIGludDQgdGV4dCcs CisgIHByb3NyYyA9PiAncGdfbG9naWNhbF9lbWl0X2RkbF9tZXNzYWdlX2J5dGVhJyB9LAogCiAj IGV2ZW50IHRyaWdnZXJzCiB7IG9pZCA9PiAnMzU2NicsIGRlc2NyID0+ICdsaXN0IG9iamVjdHMg ZHJvcHBlZCBieSB0aGUgY3VycmVudCBjb21tYW5kJywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L3JlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RkbG1l c3NhZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi43N2RmNmVhMTFh Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGRsbWVzc2FnZS5o CkBAIC0wLDAgKzEsNjAgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogZGRsbWVzc2FnZS5oCisg KgkgICBFeHBvcnRzIGZyb20gcmVwbGljYXRpb24vbG9naWNhbC9kZGxtZXNzYWdlLmMKKyAqCisg KiBDb3B5cmlnaHQgKGMpIDIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3Vw CisgKgorICogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGRsbWVzc2FnZS5oCisgKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqLworI2lmbmRlZiBQR19MT0dJQ0FMX0RETF9NRVNTQUdFX0gKKyNkZWZpbmUg UEdfTE9HSUNBTF9ERExfTUVTU0FHRV9ICisKKyNpbmNsdWRlICJhY2Nlc3MveGxvZy5oIgorI2lu Y2x1ZGUgImFjY2Vzcy94bG9nZGVmcy5oIgorI2luY2x1ZGUgImFjY2Vzcy94bG9ncmVhZGVyLmgi CisjaW5jbHVkZSAibm9kZXMvbm9kZXMuaCIKKworCisvKgorICogU3VwcG9ydCBmb3Iga2VlcGlu ZyB0cmFjayBvZiBkZXBhcnNlZCBjb21tYW5kcy4KKyAqLwordHlwZWRlZiBlbnVtIERlcGFyc2Vk Q29tbWFuZFR5cGUKK3sKKwlEQ1RfU2ltcGxlQ21kLAorCURDVF9UYWJsZURyb3BTdGFydCwKKwlE Q1RfVGFibGVEcm9wRW5kLAorCURDVF9UYWJsZUFsdGVyLAorCURDVF9PYmplY3RDcmVhdGUsCisJ RENUX09iamVjdERyb3AKK30gRGVwYXJzZWRDb21tYW5kVHlwZTsKKworLyoKKyAqIEdlbmVyaWMg bG9naWNhbCBkZWNvZGluZyBEREwgbWVzc2FnZSB3YWwgcmVjb3JkLgorICovCit0eXBlZGVmIHN0 cnVjdCB4bF9sb2dpY2FsX2RkbF9tZXNzYWdlCit7CisJT2lkCQkJZGJJZDsJCQkvKiBkYXRhYmFz ZSBPaWQgZW1pdHRlZCBmcm9tICovCisJU2l6ZQkJcHJlZml4X3NpemU7CS8qIGxlbmd0aCBvZiBw cmVmaXggaW5jbHVkaW5nIG51bGwgdGVybWluYXRvciAqLworCU9pZAkJCXJlbGlkOwkJCS8qIGlk IG9mIHRoZSB0YWJsZSAqLworCURlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZTsJLyogdHlwZSBv ZiBzcWwgY29tbWFuZCAqLworCVNpemUJCW1lc3NhZ2Vfc2l6ZTsJLyogc2l6ZSBvZiB0aGUgbWVz c2FnZSAqLworCisJLyoKKwkgKiBwYXlsb2FkLCBpbmNsdWRpbmcgbnVsbC10ZXJtaW5hdGVkIHBy ZWZpeCBvZiBsZW5ndGggcHJlZml4X3NpemUKKwkgKi8KKwljaGFyCQltZXNzYWdlW0ZMRVhJQkxF X0FSUkFZX01FTUJFUl07Cit9IHhsX2xvZ2ljYWxfZGRsX21lc3NhZ2U7CisKKyNkZWZpbmUgU2l6 ZU9mTG9naWNhbERETE1lc3NhZ2UJKG9mZnNldG9mKHhsX2xvZ2ljYWxfZGRsX21lc3NhZ2UsIG1l c3NhZ2UpKQorCitleHRlcm4gWExvZ1JlY1B0ciBMb2dMb2dpY2FsRERMTWVzc2FnZShjb25zdCBj aGFyICpwcmVmaXgsIE9pZCByZWxpZCwgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJ CQkJCQkJICAgY29uc3QgY2hhciAqZGRsX21lc3NhZ2UsIHNpemVfdCBzaXplKTsKKworLyogUk1H UiBBUEkqLworI2RlZmluZSBYTE9HX0xPR0lDQUxfRERMX01FU1NBR0UJMHgwMAordm9pZAkJbG9n aWNhbGRkbG1zZ19yZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKTsKK3ZvaWQJCWxvZ2ljYWxk ZGxtc2dfZGVzYyhTdHJpbmdJbmZvIGJ1ZiwgWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpOworY29u c3QgY2hhciAqbG9naWNhbGRkbG1zZ19pZGVudGlmeSh1aW50OCBpbmZvKTsKKworI2VuZGlmCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZWNvZGUuaCBiL3NyYy9pbmNsdWRl L3JlcGxpY2F0aW9uL2RlY29kZS5oCmluZGV4IDE0ZmE5MjFhYjQuLmM5YWM3MDhkMzIgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RlY29kZS5oCisrKyBiL3NyYy9pbmNsdWRl L3JlcGxpY2F0aW9uL2RlY29kZS5oCkBAIC0yNyw2ICsyNyw3IEBAIGV4dGVybiB2b2lkIGhlYXAy X2RlY29kZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1 Zik7CiBleHRlcm4gdm9pZCB4YWN0X2RlY29kZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgs IFhMb2dSZWNvcmRCdWZmZXIgKmJ1Zik7CiBleHRlcm4gdm9pZCBzdGFuZGJ5X2RlY29kZShMb2dp Y2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1Zik7CiBleHRlcm4g dm9pZCBsb2dpY2FsbXNnX2RlY29kZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dS ZWNvcmRCdWZmZXIgKmJ1Zik7CitleHRlcm4gdm9pZCBsb2dpY2FsZGRsX2RlY29kZShMb2dpY2Fs RGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1Zik7CiAKIGV4dGVybiB2 b2lkIExvZ2ljYWxEZWNvZGluZ1Byb2Nlc3NSZWNvcmQoTG9naWNhbERlY29kaW5nQ29udGV4dCAq Y3R4LAogCQkJCQkJCQkJCSBYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCk7CmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9vdXRwdXRfcGx1Z2luLmggYi9zcmMvaW5jbHVkZS9yZXBs aWNhdGlvbi9vdXRwdXRfcGx1Z2luLmgKaW5kZXggMmQ4OWQyNjU4Ni4uNWVkNWU2YTdiYyAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3V0cHV0X3BsdWdpbi5oCisrKyBiL3Ny Yy9pbmNsdWRlL3JlcGxpY2F0aW9uL291dHB1dF9wbHVnaW4uaApAQCAtOSw2ICs5LDcgQEAKICNp Zm5kZWYgT1VUUFVUX1BMVUdJTl9ICiAjZGVmaW5lIE9VVFBVVF9QTFVHSU5fSAogCisjaW5jbHVk ZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL3Jlb3Jk ZXJidWZmZXIuaCIKIAogc3RydWN0IExvZ2ljYWxEZWNvZGluZ0NvbnRleHQ7CkBAIC05MCw2ICs5 MSwxOCBAQCB0eXBlZGVmIHZvaWQgKCpMb2dpY2FsRGVjb2RlTWVzc2FnZUNCKSAoc3RydWN0IExv Z2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKIAkJCQkJCQkJCQlTaXplIG1lc3NhZ2Vfc2l6ZSwK IAkJCQkJCQkJCQljb25zdCBjaGFyICptZXNzYWdlKTsKIAorLyoKKyAqIENhbGxlZCBmb3IgdGhl IGxvZ2ljYWwgZGVjb2RpbmcgRERMIG1lc3NhZ2VzLgorICovCit0eXBlZGVmIHZvaWQgKCpMb2dp Y2FsRGVjb2RlRERMTWVzc2FnZUNCKSAoc3RydWN0IExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0 eCwKKwkJCQkJCQkJCQkgICBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJCQkJICAgWExv Z1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJCQkgICBjb25zdCBjaGFyICpwcmVmaXgsCisJ CQkJCQkJCQkJICAgT2lkIHJlbGlkLAorCQkJCQkJCQkJCSAgIERlcGFyc2VkQ29tbWFuZFR5cGUg Y21kdHlwZSwKKwkJCQkJCQkJCQkgICBTaXplIG1lc3NhZ2Vfc2l6ZSwKKwkJCQkJCQkJCQkgICBj b25zdCBjaGFyICptZXNzYWdlKTsKKwogLyoKICAqIEZpbHRlciBjaGFuZ2VzIGJ5IG9yaWdpbi4K ICAqLwpAQCAtMjIxLDYgKzIzNCw3IEBAIHR5cGVkZWYgc3RydWN0IE91dHB1dFBsdWdpbkNhbGxi YWNrcwogCUxvZ2ljYWxEZWNvZGVUcnVuY2F0ZUNCIHRydW5jYXRlX2NiOwogCUxvZ2ljYWxEZWNv ZGVDb21taXRDQiBjb21taXRfY2I7CiAJTG9naWNhbERlY29kZU1lc3NhZ2VDQiBtZXNzYWdlX2Ni OworCUxvZ2ljYWxEZWNvZGVERExNZXNzYWdlQ0IgZGRsX2NiOwogCUxvZ2ljYWxEZWNvZGVGaWx0 ZXJCeU9yaWdpbkNCIGZpbHRlcl9ieV9vcmlnaW5fY2I7CiAJTG9naWNhbERlY29kZVNodXRkb3du Q0Igc2h1dGRvd25fY2I7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jl b3JkZXJidWZmZXIuaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaApp bmRleCBhNDJhMTIwNGQzLi5jOGYzMjRmZmJhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBs aWNhdGlvbi9yZW9yZGVyYnVmZmVyLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcmVv cmRlcmJ1ZmZlci5oCkBAIC0xMSw2ICsxMSw4IEBACiAKICNpbmNsdWRlICJhY2Nlc3MvaHR1cF9k ZXRhaWxzLmgiCiAjaW5jbHVkZSAibGliL2lsaXN0LmgiCisjaW5jbHVkZSAibm9kZXMvbm9kZXMu aCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCiAjaW5jbHVkZSAic3RvcmFn ZS9zaW52YWwuaCIKICNpbmNsdWRlICJ1dGlscy9oc2VhcmNoLmgiCiAjaW5jbHVkZSAidXRpbHMv cmVsY2FjaGUuaCIKQEAgLTY0LDYgKzY2LDcgQEAgdHlwZWRlZiBlbnVtIFJlb3JkZXJCdWZmZXJD aGFuZ2VUeXBlCiAJUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOU0VSVCwKIAlSRU9SREVSX0JVRkZF Ul9DSEFOR0VfVVBEQVRFLAogCVJFT1JERVJfQlVGRkVSX0NIQU5HRV9ERUxFVEUsCisJUkVPUkRF Ul9CVUZGRVJfQ0hBTkdFX0RETCwKIAlSRU9SREVSX0JVRkZFUl9DSEFOR0VfTUVTU0FHRSwKIAlS RU9SREVSX0JVRkZFUl9DSEFOR0VfSU5WQUxJREFUSU9OLAogCVJFT1JERVJfQlVGRkVSX0NIQU5H RV9JTlRFUk5BTF9TTkFQU0hPVCwKQEAgLTEzOCw2ICsxNDEsMTYgQEAgdHlwZWRlZiBzdHJ1Y3Qg UmVvcmRlckJ1ZmZlckNoYW5nZQogCQkJY2hhcgkgICAqbWVzc2FnZTsKIAkJfQkJCW1zZzsKIAor CQkvKiBEREwgKi8KKwkJc3RydWN0CisJCXsKKwkJCWNoYXIJICAgKnByZWZpeDsKKwkJCVNpemUJ CW1lc3NhZ2Vfc2l6ZTsKKwkJCWNoYXIJICAgKm1lc3NhZ2U7CisJCQlPaWQJCQlyZWxpZDsKKwkJ CURlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZTsKKwkJfQkJCWRkbDsKKwogCQkvKiBOZXcgc25h cHNob3QsIHNldCB3aGVuIGFjdGlvbiA9PSAqX0lOVEVSTkFMX1NOQVBTSE9UICovCiAJCVNuYXBz aG90CXNuYXBzaG90OwogCkBAIC00NTAsNiArNDYzLDE2IEBAIHR5cGVkZWYgdm9pZCAoKlJlb3Jk ZXJCdWZmZXJNZXNzYWdlQ0IpIChSZW9yZGVyQnVmZmVyICpyYiwKIAkJCQkJCQkJCQljb25zdCBj aGFyICpwcmVmaXgsIFNpemUgc3osCiAJCQkJCQkJCQkJY29uc3QgY2hhciAqbWVzc2FnZSk7CiAK Ky8qIERETCBtZXNzYWdlIGNhbGxiYWNrIHNpZ25hdHVyZSAqLwordHlwZWRlZiB2b2lkICgqUmVv cmRlckJ1ZmZlckRETE1lc3NhZ2VDQikgKFJlb3JkZXJCdWZmZXIgKnJiLAorCQkJCQkJCQkJCSAg IFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJCQkJCQkgICBYTG9nUmVjUHRyIG1lc3NhZ2Vf bHNuLAorCQkJCQkJCQkJCSAgIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJCQkJCQkgICBPaWQg cmVsaWQsCisJCQkJCQkJCQkJICAgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkJ CQkJCSAgIFNpemUgc3osCisJCQkJCQkJCQkJICAgY29uc3QgY2hhciAqbWVzc2FnZSk7CisKIC8q IGJlZ2luIHByZXBhcmUgY2FsbGJhY2sgc2lnbmF0dXJlICovCiB0eXBlZGVmIHZvaWQgKCpSZW9y ZGVyQnVmZmVyQmVnaW5QcmVwYXJlQ0IpIChSZW9yZGVyQnVmZmVyICpyYiwKIAkJCQkJCQkJCQkJ IFJlb3JkZXJCdWZmZXJUWE4gKnR4bik7CkBAIC01NjYsNiArNTg5LDcgQEAgc3RydWN0IFJlb3Jk ZXJCdWZmZXIKIAlSZW9yZGVyQnVmZmVyQXBwbHlUcnVuY2F0ZUNCIGFwcGx5X3RydW5jYXRlOwog CVJlb3JkZXJCdWZmZXJDb21taXRDQiBjb21taXQ7CiAJUmVvcmRlckJ1ZmZlck1lc3NhZ2VDQiBt ZXNzYWdlOworCVJlb3JkZXJCdWZmZXJERExNZXNzYWdlQ0IgZGRsOwogCiAJLyoKIAkgKiBDYWxs YmFja3MgdG8gYmUgY2FsbGVkIHdoZW4gc3RyZWFtaW5nIGEgdHJhbnNhY3Rpb24gYXQgcHJlcGFy ZSB0aW1lLgpAQCAtNjY0LDYgKzY4OCw5IEBAIGV4dGVybiB2b2lkIFJlb3JkZXJCdWZmZXJRdWV1 ZU1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlkLAogCQkJCQkJCQkJ ICBTbmFwc2hvdCBzbmFwLCBYTG9nUmVjUHRyIGxzbiwKIAkJCQkJCQkJCSAgYm9vbCB0cmFuc2Fj dGlvbmFsLCBjb25zdCBjaGFyICpwcmVmaXgsCiAJCQkJCQkJCQkgIFNpemUgbWVzc2FnZV9zaXpl LCBjb25zdCBjaGFyICptZXNzYWdlKTsKK2V4dGVybiB2b2lkIFJlb3JkZXJCdWZmZXJRdWV1ZURE TE1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAqLCBUcmFuc2FjdGlvbklkLCBYTG9nUmVjUHRyIGxzbiwK KwkJCQkJCQkJCQkgY29uc3QgY2hhciAqcHJlZml4LCBTaXplIG1lc3NhZ2Vfc2l6ZSwKKwkJCQkJ CQkJCQkgY29uc3QgY2hhciAqbWVzc2FnZSwgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBl IGNtZHR5cGUpOwogZXh0ZXJuIHZvaWQgUmVvcmRlckJ1ZmZlckNvbW1pdChSZW9yZGVyQnVmZmVy ICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsCiAJCQkJCQkJCVhMb2dSZWNQdHIgY29tbWl0X2xzbiwg WExvZ1JlY1B0ciBlbmRfbHNuLAogCQkJCQkJCQlUaW1lc3RhbXBUeiBjb21taXRfdGltZSwgUmVw T3JpZ2luSWQgb3JpZ2luX2lkLCBYTG9nUmVjUHRyIG9yaWdpbl9sc24pOwotLSAKMi4zOC4xCgo= --00000000000047050c05f1ae2f85 Content-Type: application/octet-stream; name="v60-0003-Support-DDL-deparse-of-the-rest-commands.patch" Content-Disposition: attachment; filename="v60-0003-Support-DDL-deparse-of-the-rest-commands.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lcm3fwee2 RnJvbSBhYWRlYWYxMDI2YTY0MzAwM2Q4ODQ2NTMzZDkyZjBkZWU1OGVhY2EzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiWmhlbmcgKFphbmUpIExpIiA8emhlbGxpQGFtYXpvbi5jb20+ CkRhdGU6IFNhdCwgNyBKYW4gMjAyMyAwNjoxMTozMyArMDAwMApTdWJqZWN0OiBbUEFUQ0ggMy83 XSBTdXBwb3J0IERETCBkZXBhcnNlIG9mIHRoZSByZXN0IGNvbW1hbmRzCgogICAgQ1JFQVRFL0RS T1AgQUNDRVNTIE1FVEhPRAogICAgQ1JFQVRFL0FMVEVSL0RST1AgQUdHUkVHQVRFCiAgICBDUkVB VEUvQUxURVIvRFJPUCBDQVNUCiAgICBDUkVBVEUvQUxURVIvRFJPUCBDT0xMQVRJT04KICAgIENP TU1FTlQKICAgIENSRUFURS9BTFRFUi9EUk9QIENPTlZFUlNJT04KICAgIEFMVEVSIERFRkFVTFQg UFJJVklMRUdFUwogICAgQ1JFQVRFL0FMVEVSL0RST1AgRE9NQUlOCiAgICBDUkVBVEUvQUxURVIv RFJPUCBFWFRFTlNJT04KICAgIENSRUFURS9BTFRFUi9EUk9QIEZPUkVJR04gREFUQSBXUkFQUEVS CiAgICBDUkVBVEUvQUxURVIvRFJPUCBGT1JFSUdOIFRBQkxFCiAgICBDUkVBVEUvQUxURVIgRlVO Q1RJT04vUFJPQ0VEVVJFCiAgICBHUkFOVAogICAgQ1JFQVRFL0RST1AgSU5ERVgKICAgIENSRUFU RS9BTFRFUi9EUk9QIExBTkdVQUdFCiAgICBDUkVBVEUvQUxURVIvRFJPUCBNQVRFUklBTElaRUQg VklFVwogICAgQ1JFQVRFL0RST1AgT1BFUkFUT1IgW0NMQVNTL0ZBTUlMWV0KICAgIENSRUFURS9B TFRFUi9EUk9QIFBPTElDWQogICAgUkVGUkVTSCBNQVRFUklBTElaRUQgVklFVwogICAgUkVWT0tF CiAgICBBTFRFUi9EUk9QIFJPVVRJTkUKICAgIENSRUFURS9BTFRFUi9EUk9QIFJVTEUKICAgIENS RUFURS9BTFRFUi9EUk9QIFNDSEVNQQogICAgQ1JFQVRFL0FMVEVSL0RST1AgU0VRVUVOQ0UKICAg IENSRUFURS9BTFRFUi9EUk9QIFNFUlZFUgogICAgQ1JFQVRFL0FMVEVSL0RST1AgU1RBVElTVElD UwogICAgQ1JFQVRFL0FMVEVSL0RST1AgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTi9QQVJTRVIv RElDVElPTkFSWS9URU1QTEFURQogICAgQ1JFQVRFL0RST1AgVFJBTlNGT1JNCiAgICBDUkVBVEUv QUxURVIgVFJJR0dFUgogICAgQ1JFQVRFL0FMVEVSL0RST1AgVFlQRQogICAgQ1JFQVRFL0FMVEVS L0RST1AgVVNFUiBNQVBQSU5HCiAgICBDUkVBVEUvQUxURVIvRFJPUCBWSUVXIC0tIE5vdGUgIzQK ICAgIFNFQ1VSSVRZIExBQkVMCgooTm90ZSAjMykgUmVtb3ZlZCBhbiB1bmRlc2lyYWJsZSAnb24n IGZyb20gdGhlIGlkZW50aXR5IHN0cmluZyBmb3IgVFJBTlNGT1JNCmluIGdldE9iamVjdElkZW50 aXR5UGFydHMuIFRoaXMgaXMgbmVlZGVkIHRvIG1ha2UgZGVwYXJzZSBvZiBEUk9QClRSQU5TRk9S TSBjb21tYW5kIHdvcmsgc2luY2UgJ29uJyBpcyBub3QgcHJlc2VudCBpbiB0aGUgY3VycmVudApE Uk9QIFRSQU5TRk9STSBzeW50YXguIEZvciBleGFtcGxlLCB0aGUgY29ycmVjdCBzeW50YXggaXMK RFJPUCBUUkFOU0ZPUk0gdHJmIEZPUiBJTlQgTEFOR1VBR0UgU1FMOwppbnN0ZWFkIG9mIERST1Ag VFJBTlNGT1JNIHRyZiBGT1IgSU5UIE9OIExBTkdVQUdFIFNRTDsKCihOb3RlICM0KSBGb3IgVklF V1NUTVQsIHdlIGNyZWF0ZWQgcGdfZ2V0X3ZpZXdkZWZfaW50ZXJuYWwgdG8gZ2V0IHRoZQpTRUxF Q1QgcXVlcnkgb2YgdGhlIHBlbmRpbmcgVklFV1NUTVQuIEluIHRoZSBjYXNlIHRoYXQgdGhlIENS RUFURSBWSUVXIGNvbW1hbmQKaXMgc3RpbGwgaW4gcHJvZ3Jlc3MsIHdlIHdvdWxkIG5lZWQgdG8g c2VhcmNoIHRoZSBzeXN0ZW0gY2FjaGUgUlVMRVJFTE5BTUUgdG8gZ2V0IHRoZQpyZXdyaXRlIHJ1 bGUgb2YgdGhlIHZpZXcgYXMgb3Bwb3NlIHRvIHF1ZXJ5aW5nIHBnX3Jld3JpdGUgYXMgaW4gcGdf Z2V0X3ZpZXdkZWZfd29ya2VyKCksCnRoZSBsYXR0ZXIgd2lsbCByZXR1cm4gZW1wdHkgcmVzdWx0 LgotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMgfCA2MTUwICsrKysrKysr KysrKysrKysrKysrKysrKysrKy0KIDEgZmlsZSBjaGFuZ2VkLCA2MDg5IGluc2VydGlvbnMoKyks IDYxIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9k ZXBhcnNlLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jCmluZGV4IDQzZWVj N2QxMzUuLjMyYjEyNjUzNGUgMTAwNzU1Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9k ZXBhcnNlLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYwpAQCAtMTUx LDYgKzE1MSw3IEBAIGJvb2wJCXZlcmJvc2UgPSB0cnVlOwogCiBzdGF0aWMgdm9pZCBhcHBlbmRf YXJyYXlfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQsIExpc3QgKmFycmF5KTsK IHN0YXRpYyB2b2lkIGFwcGVuZF9ib29sX29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJf Zm10LCBib29sIHZhbHVlKTsKK3N0YXRpYyB2b2lkIGFwcGVuZF9mbG9hdF9vYmplY3QoT2JqVHJl ZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCwgZmxvYXQ4IHZhbHVlKTsKIHN0YXRpYyB2b2lkIGFwcGVu ZF9udWxsX29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10KTsKIHN0YXRpYyB2b2lk IGFwcGVuZF9vYmplY3Rfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQsIE9ialRy ZWUgKnZhbHVlKTsKIHN0YXRpYyBjaGFyICphcHBlbmRfb2JqZWN0X3RvX2Zvcm1hdF9zdHJpbmco T2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCk7CkBAIC0xNjAsMTAgKzE2MSwxNCBAQCBzdGF0 aWMgdm9pZCBhcHBlbmRfc3RyaW5nX29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10 LCBjaGFyICpuYW1lLAogc3RhdGljIHZvaWQgZm9ybWF0X3R5cGVfZGV0YWlsZWQoT2lkIHR5cGVf b2lkLCBpbnQzMiB0eXBlbW9kLAogCQkJCQkJCQkgT2lkICpuc3BpZCwgY2hhciAqKnR5cG5hbWUs IGNoYXIgKip0eXBlbW9kc3RyLAogCQkJCQkJCQkgYm9vbCAqdHlwYXJyYXkpOworc3RhdGljIExp c3QgKkZ1bmN0aW9uR2V0RGVmYXVsdHModGV4dCAqcHJvYXJnZGVmYXVsdHMpOwogc3RhdGljIE9i akVsZW0gKm5ld19vYmplY3QoT2JqVHlwZSB0eXBlLCBjaGFyICpuYW1lKTsKIHN0YXRpYyBPYmpU cmVlICpuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoT2lkIGNsYXNzSWQsIE9pZCBvYmplY3RJ ZCk7CitzdGF0aWMgT2JqVHJlZSAqbmV3X29ianRyZWVfZm9yX3JvbGVzcGVjKFJvbGVTcGVjICpz cGVjKTsKIHN0YXRpYyBPYmpFbGVtICpuZXdfb2JqZWN0X29iamVjdChPYmpUcmVlICp2YWx1ZSk7 CiBzdGF0aWMgT2JqVHJlZSAqbmV3X29ianRyZWVfVkEoY2hhciAqZm10LCBpbnQgbnVtb2Jqcywu Li4pOworc3RhdGljIE9ialRyZWUgKm5ld19vYmp0cmVlKGNoYXIgKmZtdCk7CitzdGF0aWMgT2Jq RWxlbSAqbmV3X3N0cmluZ19vYmplY3QoY2hhciAqdmFsdWUpOwogc3RhdGljIEpzb25iVmFsdWUg Km9ianRyZWVfdG9fanNvbmJfcmVjKE9ialRyZWUgKnRyZWUsIEpzb25iUGFyc2VTdGF0ZSAqc3Rh dGUpOwogc3RhdGljIHZvaWQgcGdfZ2V0X2luZGV4ZGVmX2RldGFpbGVkKE9pZCBpbmRleHJlbGlk LAogCQkJCQkJCQkJIGNoYXIgKippbmRleF9hbSwKQEAgLTE3OCw4ICsxODMsMTggQEAgc3RhdGlj IE9ialRyZWUgKmRlcGFyc2VfQ29sdW1uRGVmKFJlbGF0aW9uIHJlbGF0aW9uLCBMaXN0ICpkcGNv bnRleHQsIGJvb2wgY29tcG8KIAkJCQkJCQkJICBDb2x1bW5EZWYgKmNvbGRlZiwgYm9vbCBpc19h bHRlciwgTGlzdCAqKmV4cHJzKTsKIHN0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0NvbHVtbklkZW50 aXR5KE9pZCBzZXFyZWxpZCwgY2hhciBpZGVudGl0eSwgYm9vbCBhbHRlcl90YWJsZSk7CiBzdGF0 aWMgT2JqVHJlZSAqZGVwYXJzZV9Db2x1bW5TZXRPcHRpb25zKEFsdGVyVGFibGVDbWQgKnN1YmNt ZCk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9EZWZpbmVTdG10X0FnZ3JlZ2F0ZShPaWQgb2Jq ZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9EZWZp bmVTdG10X0NvbGxhdGlvbihPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSwKKwkJCQkJ CQkJCQkJIE9iamVjdEFkZHJlc3MgZnJvbUNvbGxpZCk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJz ZV9EZWZpbmVTdG10X09wZXJhdG9yKE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKTsK K3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0RlZmluZVN0bXRfVHlwZShPaWQgb2JqZWN0SWQsIERl ZmluZVN0bXQgKmRlZmluZSk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9EZWZpbmVTdG10X1RT Q29uZmlnKE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lLCBPYmplY3RBZGRyZXNzIGNv cGllZCk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9EZWZpbmVTdG10X1RTUGFyc2VyKE9pZCBv YmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0Rl ZmluZVN0bXRfVFNEaWN0aW9uYXJ5KE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKTsK K3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0RlZmluZVN0bXRfVFNUZW1wbGF0ZShPaWQgb2JqZWN0 SWQsIERlZmluZVN0bXQgKmRlZmluZSk7CiAKIHN0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0RlZkVs ZW0oRGVmRWxlbSAqZWxlbSwgYm9vbCBpc19yZXNldCk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJz ZV9GdW5jdGlvblNldChWYXJpYWJsZVNldEtpbmQga2luZCwgY2hhciAqbmFtZSwgY2hhciAqdmFs dWUpOwogc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfT25Db21taXRDbGF1c2UoT25Db21taXRBY3Rp b24gb3B0aW9uKTsKIHN0YXRpYyBPYmpUcmVlICpkZXBhcnNlX1JlbFNldE9wdGlvbnMoQWx0ZXJU YWJsZUNtZCAqc3ViY21kKTsKIApAQCAtMTg4LDYgKzIwMyw3IEBAIHN0YXRpYyBpbmxpbmUgT2Jq RWxlbSAqZGVwYXJzZV9TZXFfQ3ljbGUoRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFs dGVyX3RhCiBzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfU2VxX0luY3JlbWVudEJ5KEZv cm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSk7CiBzdGF0aWMgaW5saW5l IE9iakVsZW0gKmRlcGFyc2VfU2VxX01pbnZhbHVlKEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwg Ym9vbCBhbHRlcl90YWJsZSk7CiBzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfU2VxX01h eHZhbHVlKEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSk7CitzdGF0 aWMgT2JqRWxlbSAqZGVwYXJzZV9TZXFfT3duZWRCeShPaWQgc2VxdWVuY2VJZCwgYm9vbCBhbHRl cl90YWJsZSk7CiBzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfU2VxX1Jlc3RhcnQoRm9y bV9wZ19zZXF1ZW5jZV9kYXRhIHNlcWRhdGEpOwogc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBh cnNlX1NlcV9TdGFydHdpdGgoRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3Rh YmxlKTsKIHN0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9TZXFfQXMoRGVmRWxlbSAqZWxl bSk7CkBAIC0yMDMsNiArMjE5LDggQEAgc3RhdGljIExpc3QgKmRlcGFyc2VfSW5oUmVsYXRpb25z KE9pZCBvYmplY3RJZCk7CiBzdGF0aWMgTGlzdCAqZGVwYXJzZV9UYWJsZUVsZW1lbnRzKFJlbGF0 aW9uIHJlbGF0aW9uLCBMaXN0ICp0YWJsZUVsZW1lbnRzLCBMaXN0ICpkcGNvbnRleHQsCiAJCQkJ CQkJCSAgIGJvb2wgdHlwZWQsIGJvb2wgY29tcG9zaXRlKTsKIAorc3RhdGljIGNoYXIgKkRvbWFp bkdldERlZmF1bHQoSGVhcFR1cGxlIGRvbVR1cCwgYm9vbCBtaXNzaW5nX29rKTsKKwogLyoKICAq IEFwcGVuZCBwcmVzZW50IGFzIGZhbHNlIHRvIGEgdHJlZS4KICAqLwpAQCAtMjEyLDYgKzIzMCwy NCBAQCBhcHBlbmRfbm90X3ByZXNlbnQoT2JqVHJlZSAqdHJlZSkKIAlhcHBlbmRfYm9vbF9vYmpl Y3QodHJlZSwgInByZXNlbnQiLCBmYWxzZSk7CiB9CiAKKy8qCisgKiBBcHBlbmQgYSBmbG9hdDgg cGFyYW1ldGVyIHRvIGEgdHJlZS4KKyAqLworc3RhdGljIHZvaWQKK2FwcGVuZF9mbG9hdF9vYmpl Y3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCwgZmxvYXQ4IHZhbHVlKQoreworCU9iakVs ZW0gICAgKnBhcmFtOworCWNoYXIJICAgKm9iamVjdF9uYW1lOworCisJQXNzZXJ0KHN1Yl9mbXQp OworCisJb2JqZWN0X25hbWUgPSBhcHBlbmRfb2JqZWN0X3RvX2Zvcm1hdF9zdHJpbmcodHJlZSwg c3ViX2ZtdCk7CisKKwlwYXJhbSA9IG5ld19vYmplY3QoT2JqVHlwZUZsb2F0LCBvYmplY3RfbmFt ZSk7CisJcGFyYW0tPnZhbHVlLmZsdCA9IHZhbHVlOworCWFwcGVuZF9wcmVtYWRlX29iamVjdCh0 cmVlLCBwYXJhbSk7Cit9CisKIC8qCiAgKiBBcHBlbmQgYW4gYXJyYXkgcGFyYW1ldGVyIHRvIGEg dHJlZS4KICAqLwpAQCAtNDIzLDYgKzQ1OSwzNCBAQCBhcHBlbmRfc3RyaW5nX29iamVjdChPYmpU cmVlICp0cmVlLCBjaGFyICpzdWJfZm10LCBjaGFyICogb2JqZWN0X25hbWUsCiAJYXBwZW5kX3By ZW1hZGVfb2JqZWN0KHRyZWUsIHBhcmFtKTsKIH0KIAorLyoKKyAqIEFwcGVuZCBhIE5VTEwtb3It cXVvdGVkLWxpdGVyYWwgY2xhdXNlLiAgVXNlZnVsIGZvciBDT01NRU5UIGFuZCBTRUNVUklUWQor ICogTEFCRUwuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqICV7bnVsbH1zICV7bGl0ZXJhbH1z CisgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfbGl0ZXJhbF9vcl9udWxsKE9ialRyZWUgKnBhcmVu dCwgY2hhciAqZWxlbW5hbWUsIGNoYXIgKnZhbHVlKQoreworCU9ialRyZWUgICAgKnRvcDsKKwlP YmpUcmVlICAgICpwYXJ0OworCisJdG9wID0gbmV3X29ianRyZWUoIiIpOworCXBhcnQgPSBuZXdf b2JqdHJlZV9WQSgiTlVMTCIsIDEsCisJCQkJCQkgICJwcmVzZW50IiwgT2JqVHlwZUJvb2wsICF2 YWx1ZSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QodG9wLCAiJXtudWxsfXMiLCBwYXJ0KTsKKwor CXBhcnQgPSBuZXdfb2JqdHJlZV9WQSgiIiwgMSwKKwkJCQkJCSAgInByZXNlbnQiLCBPYmpUeXBl Qm9vbCwgdmFsdWUgIT0gTlVMTCk7CisKKwlpZiAodmFsdWUpCisJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KHBhcnQsICIle3ZhbHVlfUwiLCAidmFsdWUiLCB2YWx1ZSk7CisJYXBwZW5kX29iamVjdF9v YmplY3QodG9wLCAiJXtsaXRlcmFsfXMiLCBwYXJ0KTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHBhcmVudCwgZWxlbW5hbWUsIHRvcCk7Cit9CisKIC8qCiAgKiBTaW1pbGFyIHRvIGZvcm1hdF90 eXBlX2V4dGVuZGVkLCBleGNlcHQgd2UgcmV0dXJuIGVhY2ggYml0IG9mIGluZm9ybWF0aW9uCiAg KiBzZXBhcmF0ZWx5OgpAQCAtNTI1LDYgKzU4OSwzMSBAQCBmb3JtYXRfdHlwZV9kZXRhaWxlZChP aWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2QsCiAJUmVsZWFzZVN5c0NhY2hlKHR1cGxlKTsKIH0K IAorLyoKKyAqIFJldHVybiB0aGUgZGVmYXVsdCB2YWx1ZXMgb2YgYXJndW1lbnRzIHRvIGEgZnVu Y3Rpb24sIGFzIGEgbGlzdCBvZgorICogZGVwYXJzZWQgZXhwcmVzc2lvbnMuCisgKi8KK3N0YXRp YyBMaXN0ICoKK0Z1bmN0aW9uR2V0RGVmYXVsdHModGV4dCAqcHJvYXJnZGVmYXVsdHMpCit7CisJ TGlzdAkgICAqbm9kZWRlZnM7CisJTGlzdAkgICAqc3RyZGVmcyA9IE5JTDsKKwlMaXN0Q2VsbCAg ICpjZWxsOworCisJbm9kZWRlZnMgPSAoTGlzdCAqKSBzdHJpbmdUb05vZGUodGV4dF90b19jc3Ry aW5nKHByb2FyZ2RlZmF1bHRzKSk7CisJaWYgKCFJc0Eobm9kZWRlZnMsIExpc3QpKQorCQllbG9n KEVSUk9SLCAicHJvYXJnZGVmYXVsdHMgaXMgbm90IGEgbGlzdCIpOworCisJZm9yZWFjaChjZWxs LCBub2RlZGVmcykKKwl7CisJCU5vZGUJICAgKm9uZWRlZiA9IGxmaXJzdChjZWxsKTsKKworCQlz dHJkZWZzID0gbGFwcGVuZChzdHJkZWZzLCBkZXBhcnNlX2V4cHJlc3Npb24ob25lZGVmLCBOSUws IGZhbHNlLCBmYWxzZSkpOworCX0KKworCXJldHVybiBzdHJkZWZzOworfQorCiAvKgogICogUmV0 dXJuIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIFJFTFBFUlNJU1RFTkNF IHZhbHVlLgogICovCkBAIC03MTQsNiArODAzLDU3IEBAIG5ld19vYmp0cmVlX2Zvcl90eXBlKE9p ZCB0eXBlSWQsIGludDMyIHR5cG1vZCkKIAkJCQkJCSAgInR5cGFycmF5IiwgT2JqVHlwZUJvb2ws IHR5cGVfYXJyYXkpOwogfQogCisvKgorICogSGVscGVyIHJvdXRpbmUgZm9yICV7fVIgb2JqZWN0 cywgd2l0aCByb2xlIHNwZWNpZmllZCBieSBSb2xlU3BlYyBub2RlLgorICogU3BlY2lhbCB2YWx1 ZXMgc3VjaCBhcyBST0xFU1BFQ19DVVJSRU5UX1VTRVIgYXJlIGV4cGFuZGVkIHRvIHRoZWlyIGZp bmFsCisgKiBuYW1lcy4KKyAqLworc3RhdGljIE9ialRyZWUgKgorbmV3X29ianRyZWVfZm9yX3Jv bGVzcGVjKFJvbGVTcGVjICpzcGVjKQoreworCWNoYXIJICAgKnJvbGV0eXBlOworCisJaWYgKHNw ZWMtPnJvbGV0eXBlICE9IFJPTEVTUEVDX1BVQkxJQykKKwkJcm9sZXR5cGUgPSBnZXRfcm9sZXNw ZWNfbmFtZShzcGVjKTsKKwllbHNlCisJCXJvbGV0eXBlID0gcHN0cmR1cCgiIik7CisKKwlyZXR1 cm4gbmV3X29ianRyZWVfVkEoTlVMTCwgMiwKKwkJCQkJCSAgImlzX3B1YmxpYyIsIE9ialR5cGVC b29sLCBzcGVjLT5yb2xldHlwZSA9PSBST0xFU1BFQ19QVUJMSUMsCisJCQkJCQkgICJyb2xlbmFt ZSIsIE9ialR5cGVTdHJpbmcsIHJvbGV0eXBlKTsKK30KKworLyoKKyAqIEhlbHBlciByb3V0aW5l IGZvciAle31SIG9iamVjdHMsIHdpdGggcm9sZSBzcGVjaWZpZWQgYnkgT0lELiAoQUNMX0lEX1BV QkxJQworICogbWVhbnMgdG8gdXNlICJwdWJsaWMiKS4KKyAqLworc3RhdGljIE9ialRyZWUgKgor bmV3X29ianRyZWVfZm9yX3JvbGVfaWQoT2lkIHJvbGVvaWQpCit7CisJT2JqVHJlZSAgICAqcm9s ZTsKKworCWlmIChyb2xlb2lkICE9IEFDTF9JRF9QVUJMSUMpCisJeworCQlIZWFwVHVwbGUJcm9s dHVwOworCQljaGFyCSAgICpyb2xlX25hbWU7CisKKwkJcm9sdHVwID0gU2VhcmNoU3lzQ2FjaGUx KEFVVEhPSUQsIE9iamVjdElkR2V0RGF0dW0ocm9sZW9pZCkpOworCQlpZiAoIUhlYXBUdXBsZUlz VmFsaWQocm9sdHVwKSkKKwkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBy b2xlIHdpdGggT0lEICV1Iiwgcm9sZW9pZCk7CisKKwkJcm9sZV9uYW1lID0gTmFtZVN0cigoKEZv cm1fcGdfYXV0aGlkKSBHRVRTVFJVQ1Qocm9sdHVwKSktPnJvbG5hbWUpOworCQlyb2xlID0gbmV3 X29ianRyZWVfVkEoIiV7cm9sZW5hbWV9SSIsIDEsCisJCQkJCQkJICAicm9sZW5hbWUiLCBPYmpU eXBlU3RyaW5nLCBwc3RyZHVwKHJvbGVfbmFtZSkpOworCisJCVJlbGVhc2VTeXNDYWNoZShyb2x0 dXApOworCX0KKwllbHNlCisJCXJvbGUgPSBuZXdfb2JqdHJlZV9WQSgiJXtyb2xlbmFtZX1JIiwg MSwKKwkJCQkJCQkgICJyb2xlbmFtZSIsIE9ialR5cGVTdHJpbmcsICJwdWJsaWMiKTsKKworCXJl dHVybiByb2xlOworfQorCiAvKgogICogQWxsb2NhdGUgYSBuZXcgb2JqZWN0IHRyZWUgdG8gc3Rv cmUgcGFyYW1ldGVyIHZhbHVlcyAtLSB2YXJhcmdzIHZlcnNpb24uCiAgKgpAQCAtNzkxLDYgKzkz MSwyMiBAQCBuZXdfb2JqdHJlZV9WQShjaGFyICpmbXQsIGludCBudW1vYmpzLC4uLikKIAlyZXR1 cm4gdHJlZTsKIH0KIAorLyoKKyAqIEFsbG9jYXRlIGEgbmV3IHN0cmluZyBvYmplY3QuCisgKi8K K3N0YXRpYyBPYmpFbGVtICoKK25ld19zdHJpbmdfb2JqZWN0KGNoYXIgKnZhbHVlKQoreworCU9i akVsZW0gICAgKnBhcmFtOworCisJQXNzZXJ0KHZhbHVlKTsKKworCXBhcmFtID0gbmV3X29iamVj dChPYmpUeXBlU3RyaW5nLCBOVUxMKTsKKwlwYXJhbS0+dmFsdWUuc3RyaW5nID0gdmFsdWU7CisK KwlyZXR1cm4gcGFyYW07Cit9CisKIC8qCiAgKiBQcm9jZXNzIHRoZSBwcmUtYnVpbHQgZm9ybWF0 IHN0cmluZyBmcm9tIHRoZSBPYmpUcmVlIGludG8gdGhlIG91dHB1dCBwYXJzZQogICogc3RhdGUu CkBAIC0xOTM0LDYgKzIwOTAsODMgQEAgZGVwYXJzZV9TZXFfTWludmFsdWUoRm9ybV9wZ19zZXF1 ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKQogCXJldHVybiBuZXdfb2JqZWN0X29iamVj dChyZXQpOwogfQogCisvKgorICogRGVwYXJzZSB0aGUgc2VxdWVuY2UgT1dORUQgQlkgY29tbWFu ZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogT1dORUQgQlkgJXtvd25lcn1ECisgKi8KK3N0 YXRpYyBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX093bmVkQnkoT2lkIHNlcXVlbmNlSWQsIGJvb2wg YWx0ZXJfdGFibGUpCit7CisJT2JqVHJlZSAgICAqcmV0ID0gTlVMTDsKKwlSZWxhdGlvbglkZXBS ZWw7CisJU3lzU2NhbkRlc2Mgc2NhbjsKKwlTY2FuS2V5RGF0YSBrZXlzWzNdOworCUhlYXBUdXBs ZQl0dXBsZTsKKworCWRlcFJlbCA9IHRhYmxlX29wZW4oRGVwZW5kUmVsYXRpb25JZCwgQWNjZXNz U2hhcmVMb2NrKTsKKwlTY2FuS2V5SW5pdCgma2V5c1swXSwKKwkJCQlBbnVtX3BnX2RlcGVuZF9j bGFzc2lkLAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJ ZEdldERhdHVtKFJlbGF0aW9uUmVsYXRpb25JZCkpOworCVNjYW5LZXlJbml0KCZrZXlzWzFdLAor CQkJCUFudW1fcGdfZGVwZW5kX29iamlkLAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9P SURFUSwKKwkJCQlPYmplY3RJZEdldERhdHVtKHNlcXVlbmNlSWQpKTsKKwlTY2FuS2V5SW5pdCgm a2V5c1syXSwKKwkJCQlBbnVtX3BnX2RlcGVuZF9vYmpzdWJpZCwKKwkJCQlCVEVxdWFsU3RyYXRl Z3lOdW1iZXIsIEZfSU5UNEVRLAorCQkJCUludDMyR2V0RGF0dW0oMCkpOworCisJc2NhbiA9IHN5 c3RhYmxlX2JlZ2luc2NhbihkZXBSZWwsIERlcGVuZERlcGVuZGVySW5kZXhJZCwgdHJ1ZSwKKwkJ CQkJCQkgIE5VTEwsIDMsIGtleXMpOworCXdoaWxlIChIZWFwVHVwbGVJc1ZhbGlkKHR1cGxlID0g c3lzdGFibGVfZ2V0bmV4dChzY2FuKSkpCisJeworCQlPaWQJCQlvd25lcklkOworCQlGb3JtX3Bn X2RlcGVuZCBkZXBmb3JtOworCQlPYmpUcmVlICAgICp0bXBfb2JqOworCQljaGFyCSAgICpjb2xu YW1lOworCisJCWRlcGZvcm0gPSAoRm9ybV9wZ19kZXBlbmQpIEdFVFNUUlVDVCh0dXBsZSk7CisK KwkJLyogT25seSBjb25zaWRlciBBVVRPIGRlcGVuZGVuY2llcyBvbiBwZ19jbGFzcyAqLworCQlp ZiAoZGVwZm9ybS0+ZGVwdHlwZSAhPSBERVBFTkRFTkNZX0FVVE8pCisJCQljb250aW51ZTsKKwkJ aWYgKGRlcGZvcm0tPnJlZmNsYXNzaWQgIT0gUmVsYXRpb25SZWxhdGlvbklkKQorCQkJY29udGlu dWU7CisJCWlmIChkZXBmb3JtLT5yZWZvYmpzdWJpZCA8PSAwKQorCQkJY29udGludWU7CisKKwkJ b3duZXJJZCA9IGRlcGZvcm0tPnJlZm9iamlkOworCQljb2xuYW1lID0gZ2V0X2F0dG5hbWUob3du ZXJJZCwgZGVwZm9ybS0+cmVmb2Jqc3ViaWQsIGZhbHNlKTsKKwkJaWYgKGNvbG5hbWUgPT0gTlVM TCkKKwkJCWNvbnRpbnVlOworCisJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVf aWQoUmVsYXRpb25SZWxhdGlvbklkLCBvd25lcklkKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3Qo dG1wX29iaiwgImF0dHJuYW1lIiwgImF0dHJuYW1lIiwgY29sbmFtZSk7CisJCXJldCA9IG5ld19v Ymp0cmVlX1ZBKCJPV05FRCBCWSAle293bmVyfUQiLCAyLAorCQkJCQkJCSAiY2xhdXNlIiwgT2Jq VHlwZVN0cmluZywgIm93bmVkIiwKKwkJCQkJCQkgIm93bmVyIiwgT2JqVHlwZU9iamVjdCwgdG1w X29iaik7CisJfQorCisJc3lzdGFibGVfZW5kc2NhbihzY2FuKTsKKwlyZWxhdGlvbl9jbG9zZShk ZXBSZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkvKgorCSAqIElmIHRoZXJlJ3Mgbm8gb3duZXIg Y29sdW1uLCBlbWl0IGFuIGVtcHR5IE9XTkVEIEJZIGVsZW1lbnQsIHNldCB1cCBzbworCSAqIHRo YXQgaXQgd29uJ3QgcHJpbnQgYW55dGhpbmcuCisJICovCisJaWYgKCFyZXQpCisJCS8qIFhYWCB0 aGlzIHNob3VsZG4ndCBoYXBwZW4gLi4uICovCisJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJPV05F RCBCWSAle293bmVyfUQiLCAzLAorCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm93 bmVkIiwKKwkJCQkJCQkgIm93bmVyIiwgT2JqVHlwZU51bGwsCisJCQkJCQkJICJwcmVzZW50Iiwg T2JqVHlwZUJvb2wsIGZhbHNlKTsKKworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChyZXQpOwor fQorCiAvKgogICogRGVwYXJzZSB0aGUgc2VxdWVuY2UgUkVTVEFSVCBvcHRpb24uCiAgKgpAQCAt MzQ4Miw5NiArMzcxNSw1ODkxIEBAIGRlcGFyc2VfZHJvcF9jb21tYW5kKGNvbnN0IGNoYXIgKm9i amlkZW50aXR5LCBjb25zdCBjaGFyICpvYmplY3R0eXBlLAogfQogCiAvKgotICogSGFuZGxlIGRl cGFyc2luZyBvZiBzaW1wbGUgY29tbWFuZHMuCisgKiBEZXBhcnNlIGFuIEFsdGVyQ29sbGF0aW9u U3RtdCAoQUxURVIgQ09MTEFUSU9OKQogICoKLSAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGNvdmVy IGFsbCBjYXNlcyBoYW5kbGVkIGluIFByb2Nlc3NVdGlsaXR5U2xvdy4KKyAqIEdpdmVuIGEgY29s bGF0aW9uIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4g T2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBhbHRlciBjb21tYW5kLgorICoKKyAqIFZlcmJv c2Ugc3ludGF4OgorICogQUxURVIgQ09MTEFUSU9OICV7aWRlbnRpdHl9TyBSRUZSRVNIIFZFUlNJ T04KICAqLwogc3RhdGljIE9ialRyZWUgKgotZGVwYXJzZV9zaW1wbGVfY29tbWFuZChDb2xsZWN0 ZWRDb21tYW5kICpjbWQpCitkZXBhcnNlX0FsdGVyQ29sbGF0aW9uKE9pZCBvYmplY3RJZCwgTm9k ZSAqcGFyc2V0cmVlKQogewotCU9pZAkJCW9iamVjdElkOwotCU5vZGUJICAgKnBhcnNldHJlZTsK KwlPYmpUcmVlICAgICpyZXQ7CisJSGVhcFR1cGxlCWNvbFR1cDsKKwlGb3JtX3BnX2NvbGxhdGlv biBjb2xGb3JtOwogCi0JQXNzZXJ0KGNtZC0+dHlwZSA9PSBTQ1RfU2ltcGxlKTsKKwljb2xUdXAg PSBTZWFyY2hTeXNDYWNoZTEoQ09MTE9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOwor CWlmICghSGVhcFR1cGxlSXNWYWxpZChjb2xUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9v a3VwIGZhaWxlZCBmb3IgY29sbGF0aW9uIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCWNvbEZv cm0gPSAoRm9ybV9wZ19jb2xsYXRpb24pIEdFVFNUUlVDVChjb2xUdXApOwogCi0JcGFyc2V0cmVl ID0gY21kLT5wYXJzZXRyZWU7Ci0Jb2JqZWN0SWQgPSBjbWQtPmQuc2ltcGxlLmFkZHJlc3Mub2Jq ZWN0SWQ7CisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTExBVElPTiAle2lkZW50aXR5 fU8gUkVGUkVTSCBWRVJTSU9OIiwgMSwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0 LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShjb2xGb3JtLT5jb2xsbmFtZXNwYWNl LAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKGNvbEZvcm0tPmNvbGxuYW1lKSkpOwogCi0JaWYgKGNt ZC0+aW5fZXh0ZW5zaW9uICYmIChub2RlVGFnKHBhcnNldHJlZSkgIT0gVF9DcmVhdGVFeHRlbnNp b25TdG10KSkKLQkJcmV0dXJuIE5VTEw7CisJUmVsZWFzZVN5c0NhY2hlKGNvbFR1cCk7CiAKLQkv KiBUaGlzIHN3aXRjaCBuZWVkcyB0byBoYW5kbGUgZXZlcnl0aGluZyB0aGF0IFByb2Nlc3NVdGls aXR5U2xvdyBkb2VzICovCi0Jc3dpdGNoIChub2RlVGFnKHBhcnNldHJlZSkpCi0JewotCQljYXNl IFRfQ3JlYXRlU2VxU3RtdDoKLQkJCXJldHVybiBkZXBhcnNlX0NyZWF0ZVNlcVN0bXQob2JqZWN0 SWQsIHBhcnNldHJlZSk7CisJcmV0dXJuIHJldDsKK30KIAotCQljYXNlIFRfQ3JlYXRlU3RtdDoK LQkJCXJldHVybiBkZXBhcnNlX0NyZWF0ZVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisvKgor ICogSGFuZGxlIGRlcGFyc2luZyBzZXR0aW5nIG9mIEZ1bmN0aW9uCisgKgorICogVmVyYm9zZSBz eW50YXgKKyAqIFJFU0VUIEFMTAorICogT1IKKyAqIFNFVCAle3NldF9uYW1lfUkgVE8gJXtzZXRf dmFsdWV9cworICogT1IKKyAqIFJFU0VUICV7c2V0X25hbWV9SQorICovCitzdGF0aWMgT2JqVHJl ZSAqCitkZXBhcnNlX0Z1bmN0aW9uU2V0KFZhcmlhYmxlU2V0S2luZCBraW5kLCBjaGFyICpuYW1l LCBjaGFyICp2YWx1ZSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CiAKLQkJY2FzZSBUX0luZGV4U3Rt dDoKLQkJCXJldHVybiBkZXBhcnNlX0luZGV4U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwlp ZiAoa2luZCA9PSBWQVJfUkVTRVRfQUxMKQorCQlyZXQgPSBuZXdfb2JqdHJlZSgiUkVTRVQgQUxM Iik7CisJZWxzZSBpZiAoa2luZCA9PSBWQVJfU0VUX1ZBTFVFKQorCXsKKwkJcmV0ID0gbmV3X29i anRyZWVfVkEoIlNFVCAle3NldF9uYW1lfUkiLCAxLAorCQkJCQkJCSAic2V0X25hbWUiLCBPYmpU eXBlU3RyaW5nLCBuYW1lKTsKIAotCQlkZWZhdWx0OgotCQkJZWxvZyhMT0csICJ1bnJlY29nbml6 ZWQgbm9kZSB0eXBlIGluIGRlcGFyc2UgY29tbWFuZDogJWQiLAotCQkJCSAoaW50KSBub2RlVGFn KHBhcnNldHJlZSkpOworCQkvKgorCQkgKiBTb21lIEdVQyB2YXJpYWJsZSBuYW1lcyBhcmUgJ0xJ U1QnIHR5cGUgYW5kIGhlbmNlIG11c3Qgbm90IGJlCisJCSAqIHF1b3RlZC4KKwkJICovCisJCWlm IChHZXRDb25maWdPcHRpb25GbGFncyhuYW1lLCB0cnVlKSAmIEdVQ19MSVNUX1FVT1RFKQorCQkJ YXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiVE8gJXtzZXRfdmFsdWV9cyIsICJzZXRfdmFsdWUi LCB2YWx1ZSk7CisJCWVsc2UKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIlRPICV7c2V0 X3ZhbHVlfUwiLCAic2V0X3ZhbHVlIiwgdmFsdWUpOwogCX0KKwllbHNlCisJCXJldCA9IG5ld19v Ymp0cmVlX1ZBKCJSRVNFVCAle3NldF9uYW1lfUkiLCAxLAorCQkJCQkJCSAic2V0X25hbWUiLCBP YmpUeXBlU3RyaW5nLCBuYW1lKTsKIAotCXJldHVybiBOVUxMOworCXJldHVybiByZXQ7CiB9CiAK IC8qCi0gKiBXb3JraG9yc2UgdG8gZGVwYXJzZSBhIENvbGxlY3RlZENvbW1hbmQuCisgKiBEZXBh cnNlIGFuIEFsdGVyRnVuY3Rpb25TdG10IChBTFRFUiBGVU5DVElPTi9ST1VUSU5FL1BST0NFRFVS RSkKKyAqCisgKiBHaXZlbiBhIGZ1bmN0aW9uIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBj cmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBhbHRlciBj b21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4OgorICogQUxURVIgRlVOQ1RJT04vUk9VVElO RS9QUk9DRURVUkUgJXtzaWduYXR1cmV9cyAle2RlZmluaXRpb246IH1zCiAgKi8KLWNoYXIgKgot ZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQoQ29sbGVjdGVkQ29tbWFuZCAqY21kLCBib29sIHZlcmJv c2VfbW9kZSkKK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJGdW5jdGlvbihPaWQgb2Jq ZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKIHsKLQlPdmVycmlkZVNlYXJjaFBhdGggKm92ZXJyaWRl UGF0aDsKLQlNZW1vcnlDb250ZXh0IG9sZGN4dDsKLQlNZW1vcnlDb250ZXh0IHRtcGN4dDsKLQlP YmpUcmVlICAgICp0cmVlOwotCWNoYXIJICAgKmNvbW1hbmQgPSBOVUxMOwotCVN0cmluZ0luZm9E YXRhIHN0cjsKKwlBbHRlckZ1bmN0aW9uU3RtdCAqbm9kZSA9IChBbHRlckZ1bmN0aW9uU3RtdCAq KSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUgICAgKnNpZ247CisJSGVh cFR1cGxlCXByb2NUdXA7CisJRm9ybV9wZ19wcm9jIHByb2NGb3JtOworCUxpc3QJICAgKnBhcmFt cyA9IE5JTDsKKwlMaXN0CSAgICplbGVtcyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCWlu dAkJCWk7CisKKwkvKiBHZXQgdGhlIHBnX3Byb2MgdHVwbGUgKi8KKwlwcm9jVHVwID0gU2VhcmNo U3lzQ2FjaGUxKFBST0NPSUQsIG9iamVjdElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJv Y1R1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBmdW5jdGlvbiB3 aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwlwcm9jRm9ybSA9IChGb3JtX3BnX3Byb2MpIEdFVFNU UlVDVChwcm9jVHVwKTsKKworCWlmIChwcm9jRm9ybS0+cHJva2luZCA9PSBQUk9LSU5EX1BST0NF RFVSRSkKKwkJcmV0ID0gbmV3X29ianRyZWUoIkFMVEVSIFBST0NFRFVSRSIpOworCWVsc2UKKwkJ cmV0ID0gbmV3X29ianRyZWUobm9kZS0+b2JqdHlwZSA9PSBPQkpFQ1RfUk9VVElORSA/CisJCQkJ CQkgICJBTFRFUiBST1VUSU5FIiA6ICJBTFRFUiBGVU5DVElPTiIpOwogCiAJLyoKLQkgKiBBbGxv Y2F0ZSBldmVyeXRoaW5nIGRvbmUgYnkgdGhlIGRlcGFyc2luZyByb3V0aW5lcyBpbnRvIGEgdGVt cCBjb250ZXh0LAotCSAqIHRvIGF2b2lkIGhhdmluZyB0byBzcHJpbmtsZSB0aGVtIHdpdGggbWVt b3J5IGhhbmRsaW5nIGNvZGUsIGJ1dAotCSAqIGFsbG9jYXRlIHRoZSBvdXRwdXQgU3RyaW5nSW5m byBiZWZvcmUgc3dpdGNoaW5nLgorCSAqIEFMVEVSIEZVTkNUSU9OIGRvZXMgbm90IGNoYW5nZSBz aWduYXR1cmUgc28gd2UgY2FuIHVzZSBjYXRhbG9nIHRvIGdldAorCSAqIGlucHV0IHR5cGUgT2lk cy4KIAkgKi8KLQlpbml0U3RyaW5nSW5mbygmc3RyKTsKLQl0bXBjeHQgPSBBbGxvY1NldENvbnRl eHRDcmVhdGUoQ3VycmVudE1lbW9yeUNvbnRleHQsCi0JCQkJCQkJCSAgICJkZXBhcnNlIGN0eCIs Ci0JCQkJCQkJCSAgIEFMTE9DU0VUX0RFRkFVTFRfTUlOU0laRSwKLQkJCQkJCQkJICAgQUxMT0NT RVRfREVGQVVMVF9JTklUU0laRSwKLQkJCQkJCQkJICAgQUxMT0NTRVRfREVGQVVMVF9NQVhTSVpF KTsKLQlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8odG1wY3h0KTsKKwlmb3IgKGkgPSAw OyBpIDwgcHJvY0Zvcm0tPnByb25hcmdzOyBpKyspCisJeworCQlPYmpUcmVlICAgICp0bXBfb2Jq OworCisJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiJXt0eXBlfVQiLCAxLAorCQkJCQkJCQki dHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl90eXBlKHByb2NG b3JtLT5wcm9hcmd0eXBlcy52YWx1ZXNbaV0sIC0xKSk7CisJCXBhcmFtcyA9IGxhcHBlbmQocGFy YW1zLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJfQorCisJc2lnbiA9IG5ld19vYmp0 cmVlX1ZBKCIle2lkZW50aXR5fUQgKCV7YXJndW1lbnRzOiwgfXMpIiwgMiwKKwkJCQkJCSAgImlk ZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSAgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l X2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsIG9iamVjdElkKSwKKwkJCQkJCSAgImFyZ3VtZW50cyIs IE9ialR5cGVBcnJheSwgcGFyYW1zKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7 c2lnbmF0dXJlfXMiLCBzaWduKTsKKworCWZvcmVhY2goY2VsbCwgbm9kZS0+YWN0aW9ucykKKwl7 CisJCURlZkVsZW0gICAgKmRlZmVsID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCQlPYmpU cmVlICAgICp0bXBfb2JqID0gTlVMTDsKKworCQlpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAi dm9sYXRpbGl0eSIpID09IDApCisJCQl0bXBfb2JqID0gbmV3X29ianRyZWUoc3RyVmFsKGRlZmVs LT5hcmcpKTsKKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic3RyaWN0IikgPT0g MCkKKwkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZShib29sVmFsKGRlZmVsLT5hcmcpID8KKwkJCQkJ CQkJICJSRVRVUk5TIE5VTEwgT04gTlVMTCBJTlBVVCIgOgorCQkJCQkJCQkgIkNBTExFRCBPTiBO VUxMIElOUFVUIik7CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInNlY3VyaXR5 IikgPT0gMCkKKwkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZShib29sVmFsKGRlZmVsLT5hcmcpID8K KwkJCQkJCQkJICJTRUNVUklUWSBERUZJTkVSIiA6ICJTRUNVUklUWSBJTlZPS0VSIik7CisJCWVs c2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgImxlYWtwcm9vZiIpID09IDApCisJCQl0bXBf b2JqID0gbmV3X29ianRyZWUoYm9vbFZhbChkZWZlbC0+YXJnKSA/CisJCQkJCQkJCSAiTEVBS1BS T09GIiA6ICJOT1QgTEVBS1BST09GIik7CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFt ZSwgImNvc3QiKSA9PSAwKQorCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJDT1NUICV7Y29z dH1uIiwgMSwKKwkJCQkJCQkJCSJjb3N0IiwgT2JqVHlwZUZsb2F0LAorCQkJCQkJCQkJZGVmR2V0 TnVtZXJpYyhkZWZlbCkpOworCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJyb3dz IikgPT0gMCkKKwkJeworCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlKCJST1dTIik7CisJCQlpZiAo ZGVmR2V0TnVtZXJpYyhkZWZlbCkgPT0gMCkKKwkJCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29i aik7CisJCQllbHNlCisJCQkJYXBwZW5kX2Zsb2F0X29iamVjdCh0bXBfb2JqLCAiJXtyb3dzfW4i LAorCQkJCQkJCQkJZGVmR2V0TnVtZXJpYyhkZWZlbCkpOworCQl9CisJCWVsc2UgaWYgKHN0cmNt cChkZWZlbC0+ZGVmbmFtZSwgInNldCIpID09IDApCisJCXsKKwkJCVZhcmlhYmxlU2V0U3RtdCAq c3N0bXQgPSAoVmFyaWFibGVTZXRTdG10ICopIGRlZmVsLT5hcmc7CisJCQljaGFyCSAgICp2YWx1 ZSA9IEV4dHJhY3RTZXRWYXJpYWJsZUFyZ3Moc3N0bXQpOworCisJCQl0bXBfb2JqID0gZGVwYXJz ZV9GdW5jdGlvblNldChzc3RtdC0+a2luZCwgc3N0bXQtPm5hbWUsIHZhbHVlKTsKKwkJfQorCQll bHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJzdXBwb3J0IikgPT0gMCkKKwkJeworCQkJ T2lkCQkJYXJndHlwZXNbMV07CisKKwkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZSgiU1VQUE9SVCIp OworCisJCQlBc3NlcnQocHJvY0Zvcm0tPnByb3N1cHBvcnQpOworCisJCQkvKgorCQkJICogV2Ug c2hvdWxkIHF1YWxpZnkgdGhlIHN1cHBvcnQgZnVuY3Rpb24ncyBuYW1lIGlmIGl0IHdvdWxkbid0 IGJlCisJCQkgKiByZXNvbHZlZCBieSBsb29rdXAgaW4gdGhlIGN1cnJlbnQgc2VhcmNoIHBhdGgu CisJCQkgKi8KKwkJCWFyZ3R5cGVzWzBdID0gSU5URVJOQUxPSUQ7CisJCQlhcHBlbmRfc3RyaW5n X29iamVjdCh0bXBfb2JqLCAiJXtuYW1lfXMiLCAibmFtZSIsCisJCQkJCQkJCSBnZW5lcmF0ZV9m dW5jdGlvbl9uYW1lKHByb2NGb3JtLT5wcm9zdXBwb3J0LCAxLAorCQkJCQkJCQkJCQkJCQlOSUws IGFyZ3R5cGVzLAorCQkJCQkJCQkJCQkJCQlmYWxzZSwgTlVMTCwKKwkJCQkJCQkJCQkJCQkJRVhQ Ul9LSU5EX05PTkUpKTsKKwkJfQorCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJw YXJhbGxlbCIpID09IDApCisJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIlBBUkFMTEVMICV7 dmFsdWV9cyIsIDEsCisJCQkJCQkJCQkidmFsdWUiLCBPYmpUeXBlU3RyaW5nLCBzdHJWYWwoZGVm ZWwtPmFyZykpOworCisJCWVsZW1zID0gbGFwcGVuZChlbGVtcywgbmV3X29iamVjdF9vYmplY3Qo dG1wX29iaikpOworCX0KKworCWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAiJXtkZWZpbml0aW9u OiB9cyIsIGVsZW1zKTsKKworCVJlbGVhc2VTeXNDYWNoZShwcm9jVHVwKTsKKworCXJldHVybiBy ZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyT2JqZWN0U2NoZW1hU3RtdCAoQUxURVIg Li4uIFNFVCBTQ0hFTUEgY29tbWFuZCkKKyAqCisgKiBHaXZlbiB0aGUgb2JqZWN0IGFkZHJlc3Mg YW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuCisgKiBPYmpUcmVl IHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAor ICogQUxURVIgJXMgJXtpZGVudGl0eX1zIFNFVCBTQ0hFTUEgJXtuZXdzY2hlbWF9SQorICovCitz dGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyT2JqZWN0U2NoZW1hU3RtdChPYmplY3RBZGRy ZXNzIGFkZHJlc3MsIE5vZGUgKnBhcnNldHJlZSwKKwkJCQkJCQkgIE9iamVjdEFkZHJlc3Mgb2xk X3NjaGVtYSkKK3sKKwlBbHRlck9iamVjdFNjaGVtYVN0bXQgKm5vZGUgPSAoQWx0ZXJPYmplY3RT Y2hlbWFTdG10ICopIHBhcnNldHJlZTsKKwljaGFyCSAgICppZGVudGl0eTsKKwljaGFyCSAgICpu ZXdfc2NoZW1hID0gbm9kZS0+bmV3c2NoZW1hOworCWNoYXIJICAgKm9sZF9zY2huYW1lOworCWNo YXIJICAgKmlkZW50OwogCiAJLyoKLQkgKiBNYW55IHJvdXRpbmVzIHVuZGVybHlpbmcgdGhpcyBv bmUgd2lsbCBpbnZva2UgcnVsZXV0aWxzLmMgZnVuY3Rpb25hbGl0eQotCSAqIHRvIG9idGFpbiBk ZXBhcnNlZCB2ZXJzaW9ucyBvZiBleHByZXNzaW9ucy4gIEluIHN1Y2ggcmVzdWx0cywgd2Ugd2Fu dAotCSAqIGFsbCBvYmplY3QgbmFtZXMgdG8gYmUgcXVhbGlmaWVkLCBzbyB0aGF0IHJlc3VsdHMg YXJlICJwb3J0YWJsZSIgdG8KLQkgKiBlbnZpcm9ubWVudHMgd2l0aCBkaWZmZXJlbnQgc2VhcmNo X3BhdGggc2V0dGluZ3MuICBSYXRoZXIgdGhhbiBpbmplY3QKLQkgKiB3aGF0IHdvdWxkIGJlIHJl cGV0aXRpdmUgY2FsbHMgdG8gb3ZlcnJpZGUgc2VhcmNoIHBhdGggYWxsIG92ZXIgdGhlCi0JICog cGxhY2UsIHdlIGRvIGl0IGNlbnRyYWxseSBoZXJlLgorCSAqIFNpbmNlIHRoZSBjb21tYW5kIGhh cyBhbHJlYWR5IHRha2VuIHBsYWNlIGZyb20gdGhlIHBvaW50IG9mIHZpZXcgb2YKKwkgKiBjYXRh bG9ncywgZ2V0T2JqZWN0SWRlbnRpdHkgcmV0dXJucyB0aGUgb2JqZWN0IG5hbWUgd2l0aCB0aGUg YWxyZWFkeQorCSAqIGNoYW5nZWQgc2NoZW1hLiAgVGhlIG91dHB1dCBvZiBvdXIgZGVwYXJzaW5n IG11c3QgcmV0dXJuIHRoZSBvcmlnaW5hbAorCSAqIHNjaGVtYSBuYW1lLCBob3dldmVyLCBzbyB3 ZSBjaG9wIHRoZSBzY2hlbWEgbmFtZSBvZmYgdGhlIGlkZW50aXR5CisJICogc3RyaW5nIGFuZCB0 aGVuIHByZXBlbmQgdGhlIHF1b3RlZCBzY2hlbWEgbmFtZS4KKwkgKgorCSAqIFhYWCBUaGlzIGlz IHByZXR0eSBjbHVua3kuIENhbiB3ZSBkbyBiZXR0ZXI/CiAJICovCi0Jb3ZlcnJpZGVQYXRoID0g R2V0T3ZlcnJpZGVTZWFyY2hQYXRoKEN1cnJlbnRNZW1vcnlDb250ZXh0KTsKLQlvdmVycmlkZVBh dGgtPnNjaGVtYXMgPSBOSUw7Ci0Jb3ZlcnJpZGVQYXRoLT5hZGRDYXRhbG9nID0gZmFsc2U7Ci0J b3ZlcnJpZGVQYXRoLT5hZGRUZW1wID0gdHJ1ZTsKLQlQdXNoT3ZlcnJpZGVTZWFyY2hQYXRoKG92 ZXJyaWRlUGF0aCk7CisJaWRlbnRpdHkgPSBnZXRPYmplY3RJZGVudGl0eSgmYWRkcmVzcywgZmFs c2UpOworCW9sZF9zY2huYW1lID0gZ2V0X25hbWVzcGFjZV9uYW1lKG9sZF9zY2hlbWEub2JqZWN0 SWQpOworCWlmICghb2xkX3NjaG5hbWUpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFp bGVkIGZvciBzY2hlbWEgd2l0aCBPSUQgJXUiLAorCQkJIG9sZF9zY2hlbWEub2JqZWN0SWQpOwor CisJaWRlbnQgPSBwc3ByaW50ZigiJXMlcyIsIHF1b3RlX2lkZW50aWZpZXIob2xkX3NjaG5hbWUp LAorCQkJCQkgaWRlbnRpdHkgKyBzdHJsZW4ocXVvdGVfaWRlbnRpZmllcihuZXdfc2NoZW1hKSkp OworCisJcmV0dXJuIG5ld19vYmp0cmVlX1ZBKCJBTFRFUiAle29ianR5cGV9cyAle2lkZW50aXR5 fXMgU0VUIFNDSEVNQSAle25ld3NjaGVtYX1JIiwgMywKKwkJCQkJCSAgIm9ianR5cGUiLCBPYmpU eXBlU3RyaW5nLAorCQkJCQkJICBzdHJpbmdpZnlfb2JqdHlwZShub2RlLT5vYmplY3RUeXBlLCBm YWxzZSksCisJCQkJCQkgICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIGlkZW50LAorCQkJCQkJ ICAibmV3c2NoZW1hIiwgT2JqVHlwZVN0cmluZywgbmV3X3NjaGVtYSk7Cit9CiAKLQl2ZXJib3Nl ID0gdmVyYm9zZV9tb2RlOworLyoKKyAqIERlcGFyc2UgYSBHUkFOVC9SRVZPS0UgY29tbWFuZC4K KyAqCisgKiBWZXJib3NlIHN5bnRheAorICogR1JBTlQgJXtwcml2aWxlZ2VzOiwgfXMgT04iICV7 b2JqdHlwZX1zICV7cHJpdnRhcmdldDosIH1zIFRPICV7Z3JhbnRlZXM6LCB9cworICogJXtncmFu dF9vcHRpb259cyBHUkFOVEVEIEJZICV7cm9sZW5hbWV9cworICogCQlPUgorICogUkVWT0tFICV7 cHJpdmlsZWdlczosIH1zIE9OIiAle29ianR5cGV9cyAle3ByaXZ0YXJnZXQ6LCB9cworICogRlJP TSAle2dyYW50ZWVzOiwgfXMgJXtncmFudF9vcHRpb259cyAle2Nhc2NhZGV9cworICovCitzdGF0 aWMgT2JqVHJlZSAqCitkZXBhcnNlX0dyYW50U3RtdChDb2xsZWN0ZWRDb21tYW5kICpjbWQpCit7 CisJSW50ZXJuYWxHcmFudCAqaXN0bXQ7CisJT2JqVHJlZSAgICAqcmV0OworCUxpc3QJICAgKmxp c3QgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKwlPaWQJCQljbGFzc0lkOworCU9ialRyZWUg ICAgKnRtcDsKIAotCXN3aXRjaCAoY21kLT50eXBlKQorCS8qIERvbid0IGRlcGFyc2UgU1FMIGNv bW1hbmRzIGdlbmVyYXRlZCB3aGlsZSBjcmVhdGluZyBleHRlbnNpb24gKi8KKwlpZiAoY21kLT5p bl9leHRlbnNpb24pCisJCXJldHVybiBOVUxMOworCisJaXN0bXQgPSBjbWQtPmQuZ3JhbnQuaXN0 bXQ7CisKKwkvKgorCSAqIElmIHRoZXJlIGFyZSBubyBvYmplY3RzIGZyb20gIkFMTCAuLi4gSU4g U0NIRU1BIiB0byBiZSBncmFudGVkLCB0aGVuCisJICogbm90aGluZyB0byBkby4KKwkgKi8KKwlp ZiAoaXN0bXQtPm9iamVjdHMgPT0gTklMKQorCQlyZXR1cm4gTlVMTDsKKworCXN3aXRjaCAoaXN0 bXQtPm9ianR5cGUpCiAJewotCQljYXNlIFNDVF9TaW1wbGU6Ci0JCQl0cmVlID0gZGVwYXJzZV9z aW1wbGVfY29tbWFuZChjbWQpOworCQljYXNlIE9CSkVDVF9DT0xVTU46CisJCWNhc2UgT0JKRUNU X1RBQkxFOgorCQljYXNlIE9CSkVDVF9TRVFVRU5DRToKKwkJCWNsYXNzSWQgPSBSZWxhdGlvblJl bGF0aW9uSWQ7CiAJCQlicmVhazsKLQkJY2FzZSBTQ1RfQWx0ZXJUYWJsZToKLQkJCXRyZWUgPSBk ZXBhcnNlX0FsdGVyUmVsYXRpb24oY21kKTsKKwkJY2FzZSBPQkpFQ1RfRE9NQUlOOgorCQljYXNl IE9CSkVDVF9UWVBFOgorCQkJY2xhc3NJZCA9IFR5cGVSZWxhdGlvbklkOwogCQkJYnJlYWs7Ci0J CWNhc2UgU0NUX0NyZWF0ZVRhYmxlQXM6Ci0JCQl0cmVlID0gZGVwYXJzZV9DcmVhdGVUYWJsZUFz U3RtdChjbWQpOworCQljYXNlIE9CSkVDVF9GRFc6CisJCQljbGFzc0lkID0gRm9yZWlnbkRhdGFX cmFwcGVyUmVsYXRpb25JZDsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9GT1JFSUdOX1NFUlZF UjoKKwkJCWNsYXNzSWQgPSBGb3JlaWduU2VydmVyUmVsYXRpb25JZDsKKwkJCWJyZWFrOworCQlj YXNlIE9CSkVDVF9GVU5DVElPTjoKKwkJY2FzZSBPQkpFQ1RfUFJPQ0VEVVJFOgorCQljYXNlIE9C SkVDVF9ST1VUSU5FOgorCQkJY2xhc3NJZCA9IFByb2NlZHVyZVJlbGF0aW9uSWQ7CisJCQlicmVh azsKKwkJY2FzZSBPQkpFQ1RfTEFOR1VBR0U6CisJCQljbGFzc0lkID0gTGFuZ3VhZ2VSZWxhdGlv bklkOworCQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX0xBUkdFT0JKRUNUOgorCQkJY2xhc3NJZCA9 IExhcmdlT2JqZWN0UmVsYXRpb25JZDsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9TQ0hFTUE6 CisJCQljbGFzc0lkID0gTmFtZXNwYWNlUmVsYXRpb25JZDsKKwkJCWJyZWFrOworCQljYXNlIE9C SkVDVF9EQVRBQkFTRToKKwkJY2FzZSBPQkpFQ1RfVEFCTEVTUEFDRToKKwkJCWNsYXNzSWQgPSBJ bnZhbGlkT2lkOworCQkJZWxvZyhFUlJPUiwgImdsb2JhbCBvYmplY3RzIG5vdCBzdXBwb3J0ZWQi KTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgT0JKRUNU IHZhbHVlICVkIiwgaXN0bXQtPm9ianR5cGUpOworCX0KKworCS8qIEdSQU5UIFRPIG9yIFJFVk9L RSBGUk9NICovCisJcmV0ID0gbmV3X29ianRyZWUoaXN0bXQtPmlzX2dyYW50ID8gIkdSQU5UIiA6 ICJSRVZPS0UiKTsKKworCS8qIEJ1aWxkIGEgbGlzdCBvZiBwcml2aWxlZ2VzIHRvIGdyYW50L3Jl dm9rZSAqLworCWlmIChpc3RtdC0+YWxsX3ByaXZzKQorCXsKKwkJdG1wID0gbmV3X29ianRyZWUo IkFMTCBQUklWSUxFR0VTIik7CisJCWxpc3QgPSBsaXN0X21ha2UxKG5ld19vYmplY3Rfb2JqZWN0 KHRtcCkpOworCX0KKwllbHNlCisJeworCQljaGFyICpwcml2OworCQlpZiAoaXN0bXQtPnByaXZp bGVnZXMgJiBBQ0xfSU5TRVJUKQorCQl7CisJCQlwcml2ID0gKGNoYXIgKilwcml2aWxlZ2VfdG9f c3RyaW5nKEFDTF9JTlNFUlQpOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19v YmplY3QocHJpdikpOworCQl9CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9TRUxFQ1Qp CisJCXsKKwkJCXByaXYgPSAoY2hhciAqKXByaXZpbGVnZV90b19zdHJpbmcoQUNMX1NFTEVDVCk7 CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdChwcml2KSk7CisJCX0K KwkJaWYgKGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX1VQREFURSkKKwkJeworCQkJcHJpdiA9IChj aGFyICopcHJpdmlsZWdlX3RvX3N0cmluZyhBQ0xfVVBEQVRFKTsKKwkJCWxpc3QgPSBsYXBwZW5k KGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KHByaXYpKTsKKwkJfQorCQlpZiAoaXN0bXQtPnByaXZp bGVnZXMgJiBBQ0xfREVMRVRFKQorCQl7CisJCQlwcml2ID0gKGNoYXIgKilwcml2aWxlZ2VfdG9f c3RyaW5nKEFDTF9ERUxFVEUpOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19v YmplY3QocHJpdikpOworCQl9CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9UUlVOQ0FU RSkKKwkJeworCQkJcHJpdiA9IChjaGFyICopcHJpdmlsZWdlX3RvX3N0cmluZyhBQ0xfVFJVTkNB VEUpOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QocHJpdikpOwor CQl9CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9SRUZFUkVOQ0VTKQorCQl7CisJCQlw cml2ID0gKGNoYXIgKilwcml2aWxlZ2VfdG9fc3RyaW5nKEFDTF9SRUZFUkVOQ0VTKTsKKwkJCWxp c3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KHByaXYpKTsKKwkJfQorCQlpZiAo aXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xfVFJJR0dFUikKKwkJeworCQkJcHJpdiA9IChjaGFyICop cHJpdmlsZWdlX3RvX3N0cmluZyhBQ0xfVFJJR0dFUik7CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0 LCBuZXdfc3RyaW5nX29iamVjdChwcml2KSk7CisJCX0KKwkJaWYgKGlzdG10LT5wcml2aWxlZ2Vz ICYgQUNMX0VYRUNVVEUpCisJCXsKKwkJCXByaXYgPSAoY2hhciAqKXByaXZpbGVnZV90b19zdHJp bmcoQUNMX0VYRUNVVEUpOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmpl Y3QocHJpdikpOworCQl9CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9VU0FHRSkKKwkJ eworCQkJcHJpdiA9IChjaGFyICopcHJpdmlsZWdlX3RvX3N0cmluZyhBQ0xfVVNBR0UpOworCQkJ bGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QocHJpdikpOworCQl9CisJCWlm IChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9DUkVBVEUpCisJCXsKKwkJCXByaXYgPSAoY2hhciAq KXByaXZpbGVnZV90b19zdHJpbmcoQUNMX0NSRUFURSk7CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0 LCBuZXdfc3RyaW5nX29iamVjdChwcml2KSk7CisJCX0KKwkJaWYgKGlzdG10LT5wcml2aWxlZ2Vz ICYgQUNMX0NSRUFURV9URU1QKQorCQl7CisJCQlwcml2ID0gKGNoYXIgKilwcml2aWxlZ2VfdG9f c3RyaW5nKEFDTF9DUkVBVEVfVEVNUCk7CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3Ry aW5nX29iamVjdChwcml2KSk7CisJCX0KKwkJaWYgKGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX0NP Tk5FQ1QpCisJCXsKKwkJCXByaXYgPSAoY2hhciAqKXByaXZpbGVnZV90b19zdHJpbmcoQUNMX0NP Tk5FQ1QpOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QocHJpdikp OworCQl9CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9NQUlOVEFJTikKKwkJeworCQkJ cHJpdiA9IChjaGFyICopcHJpdmlsZWdlX3RvX3N0cmluZyhBQ0xfTUFJTlRBSU4pOworCQkJbGlz dCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QocHJpdikpOworCQl9CisKKwkJaWYg KCFpc3RtdC0+aXNfZ3JhbnQgJiYgaXN0bXQtPmdyYW50X29wdGlvbikKKwkJCWFwcGVuZF9zdHJp bmdfb2JqZWN0KHJldCwgIiV7Z3JhbnRfb3B0aW9ufXMiLCAiZ3JhbnRfb3B0aW9uIiwKKwkJCQkJ CQkJIGlzdG10LT5ncmFudF9vcHRpb24gPyAiR1JBTlQgT1BUSU9OIEZPUiIgOiAiIik7CisKKwkJ aWYgKGlzdG10LT5jb2xfcHJpdnMgIT0gTklMKQorCQl7CisJCQlMaXN0Q2VsbCAgICpvY2VsbDsK KworCQkJZm9yZWFjaChvY2VsbCwgaXN0bXQtPmNvbF9wcml2cykKKwkJCXsKKwkJCQlBY2Nlc3NQ cml2ICpwcml2ID0gbGZpcnN0KG9jZWxsKTsKKwkJCQlMaXN0CSAgICpjb2xzID0gTklMOworCisJ CQkJZm9yZWFjaChjZWxsLCBwcml2LT5jb2xzKQorCQkJCXsKKwkJCQkJU3RyaW5nCSAgICpjb2xu YW1lID0gbGZpcnN0X25vZGUoU3RyaW5nLCBjZWxsKTsKKworCQkJCQljb2xzID0gbGFwcGVuZChj b2xzLAorCQkJCQkJCQkgICBuZXdfc3RyaW5nX29iamVjdChzdHJWYWwoY29sbmFtZSkpKTsKKwkJ CQl9CisKKwkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiKCV7Y29sczosIH1zKSAle3ByaXZ9cyIs IDIsCisJCQkJCQkJCQkgImNvbHMiLCBPYmpUeXBlQXJyYXksIGNvbHMsCisJCQkJCQkJCQkgInBy aXYiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJICBwcml2LT5wcml2X25hbWUgPyBwcml2LT5w cml2X25hbWUgOiAiQUxMIFBSSVZJTEVHRVMiKTsKKworCQkJCWxpc3QgPSBsYXBwZW5kKGxpc3Qs IG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQkJfQorCQl9CisJfQorCWFwcGVuZF9hcnJheV9v YmplY3QocmV0LCAiJXtwcml2aWxlZ2VzOiwgfXMgT04iLCBsaXN0KTsKKworCWFwcGVuZF9zdHJp bmdfb2JqZWN0KHJldCwgIiV7b2JqdHlwZX1zIiwgIm9ianR5cGUiLAorCQkJCQkJIChjaGFyICop c3RyaW5naWZ5X29ianR5cGUoaXN0bXQtPm9ianR5cGUsIHRydWUpKTsKKworCS8qIFRhcmdldCBv YmplY3RzLiAgV2UgdXNlIG9iamVjdCBpZGVudGl0aWVzIGhlcmUgKi8KKwlsaXN0ID0gTklMOwor CWZvcmVhY2goY2VsbCwgaXN0bXQtPm9iamVjdHMpCisJeworCQlPaWQJCQlvYmppZCA9IGxmaXJz dF9vaWQoY2VsbCk7CisJCU9iamVjdEFkZHJlc3MgYWRkcjsKKworCQlhZGRyLmNsYXNzSWQgPSBj bGFzc0lkOworCQlhZGRyLm9iamVjdElkID0gb2JqaWQ7CisJCWFkZHIub2JqZWN0U3ViSWQgPSAw OworCisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCIle2lkZW50aXR5fXMiLCAxLAorCQkJCQkJCSAi aWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCSBnZXRPYmplY3RJZGVudGl0eSgmYWRk ciwgZmFsc2UpKTsKKworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0 bXApKTsKKwl9CisJYXBwZW5kX2FycmF5X29iamVjdChyZXQsICIle3ByaXZ0YXJnZXQ6LCB9cyIs IGxpc3QpOworCisJYXBwZW5kX2Zvcm1hdF9zdHJpbmcocmV0LCBpc3RtdC0+aXNfZ3JhbnQgPyAi VE8iIDogIkZST00iKTsKKworCS8qIExpc3Qgb2YgZ3JhbnRlZXMgKi8KKwlsaXN0ID0gTklMOwor CWZvcmVhY2goY2VsbCwgaXN0bXQtPmdyYW50ZWVzKQorCXsKKwkJT2lkCQkJZ3JhbnRlZSA9IGxm aXJzdF9vaWQoY2VsbCk7CisKKwkJdG1wID0gbmV3X29ianRyZWVfZm9yX3JvbGVfaWQoZ3JhbnRl ZSk7CisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0K KworCWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAiJXtncmFudGVlczosIH1zIiwgbGlzdCk7CisK KwkvKiBUaGUgd29yZGluZyBvZiB0aGUgZ3JhbnQgb3B0aW9uIGlzIHZhcmlhYmxlIC4uLiAqLwor CWlmIChpc3RtdC0+aXNfZ3JhbnQpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7Z3Jh bnRfb3B0aW9ufXMiLCAiZ3JhbnRfb3B0aW9uIiwKKwkJCQkJCQkgaXN0bXQtPmdyYW50X29wdGlv biA/ICJXSVRIIEdSQU5UIE9QVElPTiIgOiAiIik7CisKKwlpZiAoaXN0bXQtPmdyYW50b3JfdWlk KQorCXsKKwkJSGVhcFR1cGxlCXJvbHR1cDsKKwkJY2hhcgkgICAqcm9sZW5hbWU7CisKKwkJcm9s dHVwID0gU2VhcmNoU3lzQ2FjaGUxKEFVVEhPSUQsIE9iamVjdElkR2V0RGF0dW0oaXN0bXQtPmdy YW50b3JfdWlkKSk7CisJCWlmICghSGVhcFR1cGxlSXNWYWxpZChyb2x0dXApKQorCQkJZWxvZyhF UlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHJvbGUgd2l0aCBPSUQgJXUiLAorCQkJCSBp c3RtdC0+Z3JhbnRvcl91aWQpOworCisJCXJvbGVuYW1lID0gTmFtZVN0cigoKEZvcm1fcGdfYXV0 aGlkKSBHRVRTVFJVQ1Qocm9sdHVwKSktPnJvbG5hbWUpOworCQlhcHBlbmRfc3RyaW5nX29iamVj dChyZXQsICJHUkFOVEVEIEJZICV7cm9sZW5hbWV9cyIsCisJCQkJCQkJICJyb2xlbmFtZSIsIHJv bGVuYW1lKTsKKwkJUmVsZWFzZVN5c0NhY2hlKHJvbHR1cCk7CisJfQorCisJaWYgKCFpc3RtdC0+ aXNfZ3JhbnQpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7Y2FzY2FkZX1zIiwgImNh c2NhZGUiLAorCQkJCQkJCSBpc3RtdC0+YmVoYXZpb3IgPT0gRFJPUF9DQVNDQURFID8gIkNBU0NB REUiIDogIiIpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJP cGVyYXRvclN0bXQgKEFMVEVSIE9QRVJBVE9SIC4uLiBTRVQgLi4uKS4KKyAqCisgKiBHaXZlbiBh biBvcGVyYXRvciBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJu IGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgY29tbWFuZC4KKyAqCisgKiBW ZXJib3NlIHN5bnRheAorICogQUxURVIgT1BFUkFUT1IgJXtpZGVudGl0eX1PICgle2xlZnRfdHlw ZX1ULCAle3JpZ2h0X3R5cGV9VCkKKyAqIFNFVCAoJXtlbGVtczosIH1zKQorICovCitzdGF0aWMg T2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyT3BlcmF0b3JTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAq cGFyc2V0cmVlKQoreworCUhlYXBUdXBsZQlvcHJUdXA7CisJQWx0ZXJPcGVyYXRvclN0bXQgKm5v ZGUgPSAoQWx0ZXJPcGVyYXRvclN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJldDsK KwlGb3JtX3BnX29wZXJhdG9yIG9wckZvcm07CisJTGlzdENlbGwgICAqY2VsbDsKKwlMaXN0CSAg ICpsaXN0ID0gTklMOworCisJb3ByVHVwID0gU2VhcmNoU3lzQ2FjaGUxKE9QRVJPSUQsIE9iamVj dElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQob3ByVHVwKSkK KwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wZXJhdG9yIHdpdGggT0lE ICV1Iiwgb2JqZWN0SWQpOworCW9wckZvcm0gPSAoRm9ybV9wZ19vcGVyYXRvcikgR0VUU1RSVUNU KG9wclR1cCk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgT1BFUkFUT1IgJXtpZGVu dGl0eX1PIiwgMSwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZShvcHJGb3JtLT5vcHJuYW1lc3BhY2UsCisJCQkJCQkJCQkJ CQkgIE5hbWVTdHIob3ByRm9ybS0+b3BybmFtZSkpKTsKKworCS8qIExFRlRBUkcgKi8KKwlpZiAo T2lkSXNWYWxpZChvcHJGb3JtLT5vcHJsZWZ0KSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0 LCAiKCV7bGVmdF90eXBlfVQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShvcHJGb3Jt LT5vcHJsZWZ0LCAtMSkpOworCWVsc2UKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiKCV7 bGVmdF90eXBlfXMiLCAibGVmdF90eXBlIiwgIk5PTkUiKTsKKworCS8qIFJJR0hUQVJHICovCisJ QXNzZXJ0KE9pZElzVmFsaWQob3ByRm9ybS0+b3BybGVmdCkpOworCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KHJldCwgIiwgJXtyaWdodF90eXBlfVQpIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlw ZShvcHJGb3JtLT5vcHJyaWdodCwgLTEpKTsKKworCWZvcmVhY2goY2VsbCwgbm9kZS0+b3B0aW9u cykKKwl7CisJCURlZkVsZW0gICAgKmVsZW0gPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisJ CU9ialRyZWUgICAgKnRtcF9vYmogPSBOVUxMOworCisJCWlmIChzdHJjbXAoZWxlbS0+ZGVmbmFt ZSwgInJlc3RyaWN0IikgPT0gMCkKKwkJeworCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJS RVNUUklDVD0iLCAxLAorCQkJCQkJCQkJImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJyZXN0cmlj dCIpOworCQkJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3BycmVzdCkpCisJCQkJYXBwZW5kX29i amVjdF9vYmplY3QodG1wX29iaiwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJ CSBvcHJGb3JtLT5vcHJyZXN0KSk7CisJCQllbHNlCisJCQkJYXBwZW5kX3N0cmluZ19vYmplY3Qo dG1wX29iaiwgIiV7cHJvY2VkdXJlfXMiLCAicHJvY2VkdXJlIiwKKwkJCQkJCQkJCSAiTk9ORSIp OworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAiam9pbiIpID09IDApCisJ CXsKKwkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiSk9JTj0iLCAxLAorCQkJCQkJCQkJImNs YXVzZSIsIE9ialR5cGVTdHJpbmcsICJqb2luIik7CisJCQlpZiAoT2lkSXNWYWxpZChvcHJGb3Jt LT5vcHJqb2luKSkKKwkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAiJXtwcm9jZWR1 cmV9RCIsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJl bGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJIG9wckZvcm0tPm9wcmpvaW4pKTsKKwkJCWVsc2UK KwkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBfb2JqLCAiJXtwcm9jZWR1cmV9cyIsICJwcm9j ZWR1cmUiLAorCQkJCQkJCQkJICJOT05FIik7CisJCX0KKworCQlBc3NlcnQodG1wX29iaik7CisJ CWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwl9CisK KwlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIlNFVCAoJXtlbGVtczosIH1zKSIsIGxpc3QpOwor CisJUmVsZWFzZVN5c0NhY2hlKG9wclR1cCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICog RGVwYXJzZSBhbiBBTFRFUiBPUEVSQVRPUiBGQU1JTFkgQUREL0RST1AgY29tbWFuZC4KKyAqCisg KiBHaXZlbiB0aGUgQ29sbGVjdGVkQ29tbWFuZCwgcmV0dXJuIGFuIE9ialRyZWUgcmVwcmVzZW50 aW5nIHRoZSBBbHRlcgorICogT3BlcmF0b3IgY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRh eAorICogQUxURVIgT1BFUkFUT1IgRkFNSUxZICV7aWRlbnRpdHl9RCBVU0lORyAle2FtbmFtZX1J IEFERC9EUk9QICV7aXRlbXM6LH1zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0 ZXJPcEZhbWlseShDb2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJT2JqVHJlZSAgICAqcmV0Owor CUFsdGVyT3BGYW1pbHlTdG10ICpzdG10ID0gKEFsdGVyT3BGYW1pbHlTdG10ICopIGNtZC0+cGFy c2V0cmVlOworCUhlYXBUdXBsZQlmdHA7CisJRm9ybV9wZ19vcGZhbWlseSBvcGZGb3JtOworCUxp c3QJICAgKmxpc3QgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKworCS8qIERvbid0IGRlcGFy c2UgU1FMIGNvbW1hbmRzIGdlbmVyYXRlZCB3aGlsZSBjcmVhdGluZyBleHRlbnNpb24gKi8KKwlp ZiAoY21kLT5pbl9leHRlbnNpb24pCisJCXJldHVybiBOVUxMOworCisJZnRwID0gU2VhcmNoU3lz Q2FjaGUxKE9QRkFNSUxZT0lELAorCQkJCQkJICBPYmplY3RJZEdldERhdHVtKGNtZC0+ZC5vcGZh bS5hZGRyZXNzLm9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGZ0cCkpCisJCWVs b2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGVyYXRvciBmYW1pbHkgd2l0aCBP SUQgJXUiLAorCQkJIGNtZC0+ZC5vcGZhbS5hZGRyZXNzLm9iamVjdElkKTsKKwlvcGZGb3JtID0g KEZvcm1fcGdfb3BmYW1pbHkpIEdFVFNUUlVDVChmdHApOworCisJcmV0ID0gbmV3X29ianRyZWVf VkEoIkFMVEVSIE9QRVJBVE9SIEZBTUlMWSAle2lkZW50aXR5fUQgVVNJTkcgJXthbW5hbWV9SSIs IDIsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWUob3BmRm9ybS0+b3BmbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBOYW1l U3RyKG9wZkZvcm0tPm9wZm5hbWUpKSwKKwkJCQkJCSAiYW1uYW1lIiwgT2JqVHlwZVN0cmluZywg c3RtdC0+YW1uYW1lKTsKKworCWZvcmVhY2goY2VsbCwgY21kLT5kLm9wZmFtLm9wZXJhdG9ycykK Kwl7CisJCU9wRmFtaWx5TWVtYmVyICpvcGVyID0gbGZpcnN0KGNlbGwpOworCQlPYmpUcmVlICAg ICp0bXBfb2JqOworCisJCS8qCisJCSAqIFZlcmJvc2Ugc3ludGF4CisJCSAqCisJCSAqIE9QRVJB VE9SICV7bnVtfW4gJXtvcGVyYXRvcn1PKCV7bHR5cGV9VCwgJXtydHlwZX1UKSAle3B1cnBvc2V9 cworCQkgKi8KKwkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJPUEVSQVRPUiAle251bX1uIiwg MSwKKwkJCQkJCQkJIm51bSIsIE9ialR5cGVJbnRlZ2VyLCBvcGVyLT5udW1iZXIpOworCisJCS8q IEFkZCB0aGUgb3BlcmF0b3IgbmFtZTsgdGhlIERST1AgY2FzZSBkb2Vzbid0IGhhdmUgdGhpcyAq LworCQlpZiAoIXN0bXQtPmlzRHJvcCkKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmos ICIle29wZXJhdG9yfU8iLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKE9w ZXJhdG9yUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCSBvcGVyLT5vYmplY3QpKTsKKworCQkv KiBBZGQgdGhlIHR5cGVzICovCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmosICIoJXts dHlwZX1ULCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKG9wZXItPmxlZnR0eXBlLCAt MSkpOworCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAiJXtydHlwZX1UKSIsCisJCQkJ CQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKG9wZXItPnJpZ2h0dHlwZSwgLTEpKTsKKworCQkvKiBB ZGQgdGhlIEZPUiBTRUFSQ0ggLyBGT1IgT1JERVIgQlkgY2xhdXNlOyBub3QgaW4gdGhlIERST1Ag Y2FzZSAqLworCQlpZiAoIXN0bXQtPmlzRHJvcCkKKwkJeworCQkJaWYgKG9wZXItPnNvcnRmYW1p bHkgPT0gSW52YWxpZE9pZCkKKwkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBfb2JqLCAiJXtw dXJwb3NlfXMiLCAicHVycG9zZSIsCisJCQkJCQkJCQkgIkZPUiBTRUFSQ0giKTsKKwkJCWVsc2UK KwkJCXsKKwkJCQlPYmpUcmVlICAgICpvcmRlcmJ5X29iajsKKworCQkJCW9yZGVyYnlfb2JqID0g bmV3X29ianRyZWVfVkEoIkZPUiBPUkRFUiBCWSAle29wZmFtaWx5fUQiLCAxLAorCQkJCQkJCQkJ CQkib3BmYW1pbHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJCQluZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWVfaWQoT3BlcmF0b3JGYW1pbHlSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCQkJ b3Blci0+c29ydGZhbWlseSkpOworCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmosICIl e3B1cnBvc2V9cyIsIG9yZGVyYnlfb2JqKTsKKwkJCX0KKwkJfQorCisJCWxpc3QgPSBsYXBwZW5k KGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwl9CisKKwlmb3JlYWNoKGNlbGws IGNtZC0+ZC5vcGZhbS5wcm9jZWR1cmVzKQorCXsKKwkJT3BGYW1pbHlNZW1iZXIgKnByb2MgPSBs Zmlyc3QoY2VsbCk7CisJCU9ialRyZWUgICAgKnRtcF9vYmo7CisKKwkJdG1wX29iaiA9IG5ld19v Ymp0cmVlX1ZBKCJGVU5DVElPTiAle251bX1uICgle2x0eXBlfVQsICV7cnR5cGV9VCkiLCAzLAor CQkJCQkJCQkibnVtIiwgT2JqVHlwZUludGVnZXIsIHByb2MtPm51bWJlciwKKwkJCQkJCQkJImx0 eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3R5cGUocHJvYy0+ bGVmdHR5cGUsIC0xKSwKKwkJCQkJCQkJInJ0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJ bmV3X29ianRyZWVfZm9yX3R5cGUocHJvYy0+cmlnaHR0eXBlLCAtMSkpOworCisJCS8qCisJCSAq IEFkZCB0aGUgZnVuY3Rpb24gbmFtZSBhbmQgYXJnIHR5cGVzOyB0aGUgRFJPUCBjYXNlIGRvZXNu J3QgaGF2ZQorCQkgKiB0aGlzCisJCSAqLworCQlpZiAoIXN0bXQtPmlzRHJvcCkKKwkJeworCQkJ SGVhcFR1cGxlCXByb2NUdXA7CisJCQlGb3JtX3BnX3Byb2MgcHJvY0Zvcm07CisJCQlPaWQJCSAg ICpwcm9hcmd0eXBlczsKKwkJCUxpc3QJICAgKmFyZ2xpc3QgPSBOSUw7CisJCQlpbnQJCQlpOwor CisJCQlwcm9jVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsIE9iamVjdElkR2V0RGF0dW0o cHJvYy0+b2JqZWN0KSk7CisJCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJvY1R1cCkpCisJCQkJ ZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHByb2NlZHVyZSB3aXRoIE9JRCAl dSIsCisJCQkJCSBwcm9jLT5vYmplY3QpOworCQkJcHJvY0Zvcm0gPSAoRm9ybV9wZ19wcm9jKSBH RVRTVFJVQ1QocHJvY1R1cCk7CisKKwkJCXByb2FyZ3R5cGVzID0gcHJvY0Zvcm0tPnByb2FyZ3R5 cGVzLnZhbHVlczsKKwkJCWZvciAoaSA9IDA7IGkgPCBwcm9jRm9ybS0+cHJvbmFyZ3M7IGkrKykK KwkJCXsKKwkJCQlPYmpUcmVlICAgICphcmc7CisKKwkJCQlhcmcgPSBuZXdfb2JqdHJlZV9mb3Jf dHlwZShwcm9hcmd0eXBlc1tpXSwgLTEpOworCQkJCWFyZ2xpc3QgPSBsYXBwZW5kKGFyZ2xpc3Qs IG5ld19vYmplY3Rfb2JqZWN0KGFyZykpOworCQkJfQorCisJCQlhcHBlbmRfb2JqZWN0X29iamVj dCh0bXBfb2JqLCAiJXtmdW5jdGlvbn1EIiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFs bmFtZShwcm9jRm9ybS0+cHJvbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkgIE5hbWVTdHIocHJv Y0Zvcm0tPnByb25hbWUpKSk7CisKKwkJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRtcF9vYmosICIo Iik7CisJCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcF9vYmosICIle2FyZ3R5cGVzOiwgfVQiLCBh cmdsaXN0KTsKKwkJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRtcF9vYmosICIpIik7CisKKwkJCVJl bGVhc2VTeXNDYWNoZShwcm9jVHVwKTsKKwkJfQorCisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5l d19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwl9CisKKwlpZiAoc3RtdC0+aXNEcm9wKQorCQlh cHBlbmRfZm9ybWF0X3N0cmluZyhyZXQsICJEUk9QIik7CisJZWxzZQorCQlhcHBlbmRfZm9ybWF0 X3N0cmluZyhyZXQsICJBREQiKTsKKworCWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAiJXtpdGVt czosIH1zIiwgbGlzdCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUoZnRwKTsKKworCXJldHVybiByZXQ7 Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyT3duZXJTdG10IChBTFRFUiAuLi4gT1dORVIg VE8gLi4uKS4KKyAqCisgKiBHaXZlbiB0aGUgb2JqZWN0IGFkZHJlc3MgYW5kIHRoZSBwYXJzZSB0 cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuCisgKiBPYmpUcmVlIHJlcHJlc2VudGluZyB0 aGUgYWx0ZXIgY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQUxURVIgJXMgJXtp ZGVudGl0eX1zIE9XTkVSIFRPICV7bmV3b3duZXJ9SQorICovCitzdGF0aWMgT2JqVHJlZSAqCitk ZXBhcnNlX0FsdGVyT3duZXJTdG10KE9iamVjdEFkZHJlc3MgYWRkcmVzcywgTm9kZSAqcGFyc2V0 cmVlKQoreworCUFsdGVyT3duZXJTdG10ICpub2RlID0gKEFsdGVyT3duZXJTdG10ICopIHBhcnNl dHJlZTsKKworCXJldHVybiBuZXdfb2JqdHJlZV9WQSgiQUxURVIgJXtvYmp0eXBlfXMgJXtpZGVu dGl0eX1zIE9XTkVSIFRPICV7bmV3b3duZXJ9SSIsIDMsCisJCQkJCQkgICJvYmp0eXBlIiwgT2Jq VHlwZVN0cmluZywKKwkJCQkJCSAgc3RyaW5naWZ5X29ianR5cGUobm9kZS0+b2JqZWN0VHlwZSwg ZmFsc2UpLAorCQkJCQkJICAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJICBnZXRP YmplY3RJZGVudGl0eSgmYWRkcmVzcywgZmFsc2UpLAorCQkJCQkJICAibmV3b3duZXIiLCBPYmpU eXBlU3RyaW5nLAorCQkJCQkJICBnZXRfcm9sZXNwZWNfbmFtZShub2RlLT5uZXdvd25lcikpOwor fQorCisvKgorICogRGVwYXJzZSBhbiBBbHRlclNlcVN0bXQuCisgKgorICogR2l2ZW4gYSBzZXF1 ZW5jZSBPSUQgYW5kIGEgcGFyc2UgdHJlZSB0aGF0IG1vZGlmaWVkIGl0LCByZXR1cm4gYW4gT2Jq VHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBhbHRlciBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ug c3ludGF4CisgKiBBTFRFUiBTRVFVRU5DRSAle2lkZW50aXR5fUQgJXtkZWZpbml0aW9uOiB9cwor ICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyU2VxU3RtdChPaWQgb2JqZWN0SWQs IE5vZGUgKnBhcnNldHJlZSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisJUmVsYXRpb24JcmVsYXRp b247CisJRm9ybV9wZ19zZXF1ZW5jZV9kYXRhIHNlcWRhdGE7CisJTGlzdAkgICAqZWxlbXMgPSBO SUw7CisJTGlzdENlbGwgICAqY2VsbDsKKwlGb3JtX3BnX3NlcXVlbmNlIHNlcWZvcm07CisJUmVs YXRpb24JcmVsOworCUhlYXBUdXBsZQlzZXF0dXBsZTsKKwlBbHRlclNlcVN0bXQgKmFsdGVyU2Vx U3RtdCA9IChBbHRlclNlcVN0bXQgKikgcGFyc2V0cmVlOworCisJLyoKKwkgKiBTZXF1ZW5jZSBm b3IgSURFTlRJVFkgQ09MVU1OIG91dHB1dCBzZXBhcmF0ZWx5ICh2aWEgQ1JFQVRFIFRBQkxFIG9y CisJICogQUxURVIgVEFCTEUpOyByZXR1cm4gZW1wdHkgaGVyZS4KKwkgKi8KKwlpZiAoYWx0ZXJT ZXFTdG10LT5mb3JfaWRlbnRpdHkpCisJCXJldHVybiBOVUxMOworCisJc2VxZGF0YSA9IGdldF9z ZXF1ZW5jZV92YWx1ZXMob2JqZWN0SWQpOworCisJcmVsYXRpb24gPSByZWxhdGlvbl9vcGVuKG9i amVjdElkLCBBY2Nlc3NTaGFyZUxvY2spOworCXJlbCA9IHRhYmxlX29wZW4oU2VxdWVuY2VSZWxh dGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwlzZXF0dXBsZSA9IFNlYXJjaFN5c0NhY2hlQ29w eTEoU0VRUkVMSUQsCisJCQkJCQkJCSAgIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlp ZiAoIUhlYXBUdXBsZUlzVmFsaWQoc2VxdHVwbGUpKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9v a3VwIGZhaWxlZCBmb3Igc2VxdWVuY2Ugd2l0aCBPSUQgICV1Iiwgb2JqZWN0SWQpOworCisJc2Vx Zm9ybSA9IChGb3JtX3BnX3NlcXVlbmNlKSBHRVRTVFJVQ1Qoc2VxdHVwbGUpOworCisJZm9yZWFj aChjZWxsLCAoKEFsdGVyU2VxU3RtdCAqKSBwYXJzZXRyZWUpLT5vcHRpb25zKQorCXsKKwkJRGVm RWxlbSAgICAqZWxlbSA9IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsKKwkJT2JqRWxlbSAgICAq bmV3ZWxtOworCisJCWlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgImNhY2hlIikgPT0gMCkKKwkJ CW5ld2VsbSA9IGRlcGFyc2VfU2VxX0NhY2hlKHNlcWZvcm0sIGZhbHNlKTsKKwkJZWxzZSBpZiAo c3RyY21wKGVsZW0tPmRlZm5hbWUsICJjeWNsZSIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNl X1NlcV9DeWNsZShzZXFmb3JtLCBmYWxzZSk7CisJCWVsc2UgaWYgKHN0cmNtcChlbGVtLT5kZWZu YW1lLCAiaW5jcmVtZW50IikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfU2VxX0luY3JlbWVu dEJ5KHNlcWZvcm0sIGZhbHNlKTsKKwkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJt aW52YWx1ZSIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1NlcV9NaW52YWx1ZShzZXFmb3Jt LCBmYWxzZSk7CisJCWVsc2UgaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAibWF4dmFsdWUiKSA9 PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9TZXFfTWF4dmFsdWUoc2VxZm9ybSwgZmFsc2UpOwor CQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgInN0YXJ0IikgPT0gMCkKKwkJCW5ld2Vs bSA9IGRlcGFyc2VfU2VxX1N0YXJ0d2l0aChzZXFmb3JtLCBmYWxzZSk7CisJCWVsc2UgaWYgKHN0 cmNtcChlbGVtLT5kZWZuYW1lLCAicmVzdGFydCIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNl X1NlcV9SZXN0YXJ0KHNlcWRhdGEpOworCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwg Im93bmVkX2J5IikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfU2VxX093bmVkQnkob2JqZWN0 SWQsIGZhbHNlKTsKKwkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJhcyIpID09IDAp CisJCQluZXdlbG0gPSBkZXBhcnNlX1NlcV9BcyhlbGVtKTsKKwkJZWxzZQorCQkJZWxvZyhFUlJP UiwgImludmFsaWQgc2VxdWVuY2Ugb3B0aW9uICVzIiwgZWxlbS0+ZGVmbmFtZSk7CisKKwkJZWxl bXMgPSBsYXBwZW5kKGVsZW1zLCBuZXdlbG0pOworCX0KKworCXJldCA9IG5ld19vYmp0cmVlX1ZB KCJBTFRFUiBTRVFVRU5DRSAle2lkZW50aXR5fUQgJXtkZWZpbml0aW9uOiB9cyIsIDIsCisJCQkJ CQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVh bG5hbWUocmVsYXRpb24tPnJkX3JlbC0+cmVsbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBSZWxh dGlvbkdldFJlbGF0aW9uTmFtZShyZWxhdGlvbikpLAorCQkJCQkJICJkZWZpbml0aW9uIiwgT2Jq VHlwZUFycmF5LCBlbGVtcyk7CisKKwl0YWJsZV9jbG9zZShyZWwsIFJvd0V4Y2x1c2l2ZUxvY2sp OworCXJlbGF0aW9uX2Nsb3NlKHJlbGF0aW9uLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJu IHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJUeXBlU3RtdC4KKyAqCisgKiBHaXZl biBhIHR5cGUgT0lEIGFuZCBhIHBhcnNlIHRyZWUgdGhhdCBtb2RpZmllZCBpdCwgcmV0dXJuIGFu IE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgdHlwZS4KKyAqCisgKiBWZXJib3Nl IHN5bnRheAorICogQUxURVIgVFlQRSAle2lkZW50aXR5fUQgKCV7ZGVmaW5pdGlvbjogfXMpCisg Ki8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJUeXBlU2V0U3RtdChPaWQgb2JqZWN0 SWQsIE5vZGUgKmNtZCkKK3sKKwlBbHRlclR5cGVTdG10ICphbHRlclR5cGVTZXRTdG10ID0gKEFs dGVyVHlwZVN0bXQgKikgY21kOworCUxpc3RDZWxsICAgKnBsOworCUxpc3QJICAgKmVsZW1zID0g TklMOworCUhlYXBUdXBsZQl0eXBUdXA7CisJRm9ybV9wZ190eXBlIHR5cEZvcm07CisKKwl0eXBU dXAgPSBTZWFyY2hTeXNDYWNoZTEoVFlQRU9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkp OworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0eXBUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUg bG9va3VwIGZhaWxlZCBmb3IgdHlwZSB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwl0eXBGb3Jt ID0gKEZvcm1fcGdfdHlwZSkgR0VUU1RSVUNUKHR5cFR1cCk7CisKKwlmb3JlYWNoKHBsLCBhbHRl clR5cGVTZXRTdG10LT5vcHRpb25zKQorCXsKKwkJRGVmRWxlbSAgICAqZGVmZWwgPSAoRGVmRWxl bSAqKSBsZmlyc3QocGwpOworCQlPYmpFbGVtICAgICpuZXdlbG07CisKKwkJaWYgKHN0cmNtcChk ZWZlbC0+ZGVmbmFtZSwgInN0b3JhZ2UiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9UeXBl X1N0b3JhZ2UodHlwRm9ybSk7CisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJyZWNlaXZl IikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfVHlwZV9SZWNlaXZlKHR5cEZvcm0pOworCQlp ZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic2VuZCIpID09IDApCisJCQluZXdlbG0gPSBkZXBh cnNlX1R5cGVfU2VuZCh0eXBGb3JtKTsKKwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInR5 cG1vZF9pbiIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1R5cGVfVHlwbW9kX0luKHR5cEZv cm0pOworCQlpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAidHlwbW9kX291dCIpID09IDApCisJ CQluZXdlbG0gPSBkZXBhcnNlX1R5cGVfVHlwbW9kX091dCh0eXBGb3JtKTsKKwkJaWYgKHN0cmNt cChkZWZlbC0+ZGVmbmFtZSwgImFuYWx5emUiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9U eXBlX0FuYWx5emUodHlwRm9ybSk7CisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJzdWJz Y3JpcHQiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9UeXBlX1N1YnNjcmlwdCh0eXBGb3Jt KTsKKwkJZWxzZQorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgdHlwZSBvcHRpb24gJXMiLCBkZWZl bC0+ZGVmbmFtZSk7CisKKwkJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBuZXdlbG0pOworCX0KKwor CVJlbGVhc2VTeXNDYWNoZSh0eXBUdXApOworCisJcmV0dXJuIG5ld19vYmp0cmVlX1ZBKCJBTFRF UiBUWVBFICV7aWRlbnRpdHl9RCBTRVQgKCV7ZGVmaW5pdGlvbjogfXMpIiwgMiwKKwkJCQkJCSAg ImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSAgbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lX2lkKFR5cGVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSAgb2JqZWN0SWQpLAorCQkJCQkJ ICAiZGVmaW5pdGlvbiIsIE9ialR5cGVBcnJheSwgZWxlbXMpOworfQorCisvKgorICogRGVwYXJz ZSBhIENvbXBvc2l0ZVR5cGVTdG10IChDUkVBVEUgVFlQRSBBUykKKyAqCisgKiBHaXZlbiBhIENv bXBvc2l0ZSB0eXBlIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1 cm4gYW4KKyAqIE9ialRyZWUgcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICoK KyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgVFlQRSAle2lkZW50aXR5fUQgQVMgKCV7Y29s dW1uczosIH1zKQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NvbXBvc2l0ZVR5cGVT dG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNvbXBvc2l0ZVR5cGVTdG10 ICpub2RlID0gKENvbXBvc2l0ZVR5cGVTdG10ICopIHBhcnNldHJlZTsKKwlIZWFwVHVwbGUJdHlw dHVwOworCUZvcm1fcGdfdHlwZSB0eXBmb3JtOworCVJlbGF0aW9uCXR5cGVyZWw7CisJTGlzdAkg ICAqZHBjb250ZXh0OworCUxpc3QJICAgKnRhYmxlZWx0cyA9IE5JTDsKKworCS8qIEZpbmQgdGhl IHBnX3R5cGUgZW50cnkgYW5kIG9wZW4gdGhlIGNvcnJlc3BvbmRpbmcgcmVsYXRpb24gKi8KKwl0 eXB0dXAgPSBTZWFyY2hTeXNDYWNoZTEoVFlQRU9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJ ZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0eXB0dXApKQorCQllbG9nKEVSUk9SLCAiY2Fj aGUgbG9va3VwIGZhaWxlZCBmb3IgdHlwZSB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwl0eXBm b3JtID0gKEZvcm1fcGdfdHlwZSkgR0VUU1RSVUNUKHR5cHR1cCk7CisJdHlwZXJlbCA9IHJlbGF0 aW9uX29wZW4odHlwZm9ybS0+dHlwcmVsaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlkcGNvbnRl eHQgPSBkZXBhcnNlX2NvbnRleHRfZm9yKFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHR5cGVyZWwp LAorCQkJCQkJCQkJUmVsYXRpb25HZXRSZWxpZCh0eXBlcmVsKSk7CisKKwl0YWJsZWVsdHMgPSBk ZXBhcnNlX1RhYmxlRWxlbWVudHModHlwZXJlbCwgbm9kZS0+Y29sZGVmbGlzdCwgZHBjb250ZXh0 LAorCQkJCQkJCQkJICBmYWxzZSwJLyogbm90IHR5cGVkICovCisJCQkJCQkJCQkgIHRydWUpOwkv KiBjb21wb3NpdGUgdHlwZSAqLworCisJdGFibGVfY2xvc2UodHlwZXJlbCwgQWNjZXNzU2hhcmVM b2NrKTsKKwlSZWxlYXNlU3lzQ2FjaGUodHlwdHVwKTsKKworCXJldHVybiBuZXdfb2JqdHJlZV9W QSgiQ1JFQVRFIFRZUEUgJXtpZGVudGl0eX1EIEFTICgle2NvbHVtbnM6LCB9cykiLCAyLAorCQkJ CQkJICAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJICBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWVfaWQoVHlwZVJlbGF0aW9uSWQsIG9iamVjdElkKSwKKwkJCQkJCSAgImNvbHVtbnMi LCBPYmpUeXBlQXJyYXksIHRhYmxlZWx0cyk7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRl Q29udmVyc2lvblN0bXQKKyAqCisgKiBHaXZlbiBhIGNvbnZlcnNpb24gT0lEIGFuZCB0aGUgcGFy c2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRp bmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFU RSAle2RlZmF1bHR9cyBDT05WRVJTSU9OICV7aWRlbnRpdHl9RCBGT1IgJXtzb3VyY2V9TCBUTyAl e2Rlc3R9TAorICogRlJPTSAle2Z1bmN0aW9ufUQKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVw YXJzZV9DcmVhdGVDb252ZXJzaW9uKE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQorewor CUhlYXBUdXBsZQljb25UdXA7CisJUmVsYXRpb24JY29udnJlbDsKKwlGb3JtX3BnX2NvbnZlcnNp b24gY29uRm9ybTsKKwlPYmpUcmVlICAgICpyZXQ7CisKKwljb252cmVsID0gdGFibGVfb3BlbihD b252ZXJzaW9uUmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwljb25UdXAgPSBnZXRfY2F0 YWxvZ19vYmplY3RfYnlfb2lkKGNvbnZyZWwsIEFudW1fcGdfY29udmVyc2lvbl9vaWQsIG9iamVj dElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoY29uVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNh Y2hlIGxvb2t1cCBmYWlsZWQgZm9yIGNvbnZlcnNpb24gd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7 CisJY29uRm9ybSA9IChGb3JtX3BnX2NvbnZlcnNpb24pIEdFVFNUUlVDVChjb25UdXApOworCisJ cmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSAle2RlZmF1bHR9cyBDT05WRVJTSU9OICV7aWRl bnRpdHl9RCBGT1IgJXtzb3VyY2V9TCBUTyAle2Rlc3R9TCBGUk9NICV7ZnVuY3Rpb259RCIsIDUs CisJCQkJCQkgICJkZWZhdWx0IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSAgY29uRm9ybS0+Y29u ZGVmYXVsdCA/ICJERUZBVUxUIiA6ICIiLAorCQkJCQkJICAiaWRlbnRpdHkiLCBPYmpUeXBlT2Jq ZWN0LAorCQkJCQkJICBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoY29uRm9ybS0+Y29ubmFtZXNw YWNlLAorCQkJCQkJCQkJCQkJICAgTmFtZVN0cihjb25Gb3JtLT5jb25uYW1lKSksCisJCQkJCQkg ICJzb3VyY2UiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJICAoY2hhciAqKXBnX2VuY29kaW5nX3Rv X2NoYXIoY29uRm9ybS0+Y29uZm9yZW5jb2RpbmcpLAorCQkJCQkJICAiZGVzdCIsIE9ialR5cGVT dHJpbmcsCisJCQkJCQkgIChjaGFyICopcGdfZW5jb2RpbmdfdG9fY2hhcihjb25Gb3JtLT5jb250 b2VuY29kaW5nKSwKKwkJCQkJCSAgImZ1bmN0aW9uIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSAg bmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJ CQkJCQkJICBjb25Gb3JtLT5jb25wcm9jKSk7CisKKwl0YWJsZV9jbG9zZShjb252cmVsLCBBY2Nl c3NTaGFyZUxvY2spOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDcmVh dGVFbnVtU3RtdCAoQ1JFQVRFIFRZUEUgQVMgRU5VTSkKKyAqCisgKiBHaXZlbiBhIEVudW0gdHlw ZSBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRy ZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqCisgKiBWZXJib3Nl IHN5bnRheAorICogQ1JFQVRFIFRZUEUgJXtpZGVudGl0eX1EIEFTIEVOVU0gKCV7dmFsdWVzOiwg fUwpCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlRW51bVN0bXQoT2lkIG9i amVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlRW51bVN0bXQgKm5vZGUgPSAoQ3Jl YXRlRW51bVN0bXQgKikgcGFyc2V0cmVlOworCUxpc3QJICAgKnZhbHVlcyA9IE5JTDsKKwlMaXN0 Q2VsbCAgICpjZWxsOworCisJZm9yZWFjaChjZWxsLCBub2RlLT52YWxzKQorCQl2YWx1ZXMgPSBs YXBwZW5kKHZhbHVlcywgbmV3X3N0cmluZ19vYmplY3Qoc3RyVmFsKGxmaXJzdF9ub2RlKFN0cmlu ZywgY2VsbCkpKSk7CisKKwlyZXR1cm4gbmV3X29ianRyZWVfVkEoIkNSRUFURSBUWVBFICV7aWRl bnRpdHl9RCBBUyBFTlVNICgle3ZhbHVlczosIH1MKSIsIDIsCisJCQkJCQkgICJpZGVudGl0eSIs IE9ialR5cGVPYmplY3QsCisJCQkJCQkgIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChUeXBl UmVsYXRpb25JZCwgb2JqZWN0SWQpLAorCQkJCQkJICAidmFsdWVzIiwgT2JqVHlwZUFycmF5LCB2 YWx1ZXMpOworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZUV4dGVuc2lvblN0bXQKKyAqCisg KiBHaXZlbiBhbiBleHRlbnNpb24gT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQg aXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1h bmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBFWFRFTlNJT04gJXtpZl9ub3Rf ZXhpc3RzfXMgJXtuYW1lfUkgJXtvcHRpb25zOiB9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitk ZXBhcnNlX0NyZWF0ZUV4dGVuc2lvblN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUp Cit7CisJQ3JlYXRlRXh0ZW5zaW9uU3RtdCAqbm9kZSA9IChDcmVhdGVFeHRlbnNpb25TdG10ICop IHBhcnNldHJlZTsKKwlSZWxhdGlvbglwZ19leHRlbnNpb247CisJSGVhcFR1cGxlCWV4dFR1cDsK KwlGb3JtX3BnX2V4dGVuc2lvbiBleHRGb3JtOworCU9ialRyZWUgICAgKnRtcDsKKwlMaXN0CSAg ICpsaXN0ID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisKKwlwZ19leHRlbnNpb24gPSB0YWJs ZV9vcGVuKEV4dGVuc2lvblJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJZXh0VHVwID0g Z2V0X2NhdGFsb2dfb2JqZWN0X2J5X29pZChwZ19leHRlbnNpb24sIEFudW1fcGdfZXh0ZW5zaW9u X29pZCwgb2JqZWN0SWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChleHRUdXApKQorCQllbG9n KEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgZXh0ZW5zaW9uIHdpdGggT0lEICV1Iiwg b2JqZWN0SWQpOworCWV4dEZvcm0gPSAoRm9ybV9wZ19leHRlbnNpb24pIEdFVFNUUlVDVChleHRU dXApOworCisJLyogTGlzdCBvZiBvcHRpb25zICovCisJZm9yZWFjaChjZWxsLCBub2RlLT5vcHRp b25zKQorCXsKKwkJRGVmRWxlbSAgICAqb3B0ID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOwor CisJCWlmIChzdHJjbXAob3B0LT5kZWZuYW1lLCAic2NoZW1hIikgPT0gMCkKKwkJeworCQkJLyog U2tpcCB0aGlzIG9uZTsgd2UgYWRkIG9uZSB1bmNvbmRpdGlvbmFsbHkgYmVsb3cgKi8KKwkJCWNv bnRpbnVlOworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChvcHQtPmRlZm5hbWUsICJuZXdfdmVyc2lv biIpID09IDApCisJCXsKKwkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJWRVJTSU9OICV7dmVyc2lv bn1MIiwgMiwKKwkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInZlcnNpb24iLAorCQkJ CQkJCQkgInZlcnNpb24iLCBPYmpUeXBlU3RyaW5nLCBkZWZHZXRTdHJpbmcob3B0KSk7CisJCQls aXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJfQorCQllbHNl IGlmIChzdHJjbXAob3B0LT5kZWZuYW1lLCAib2xkX3ZlcnNpb24iKSA9PSAwKQorCQl7CisJCQl0 bXAgPSBuZXdfb2JqdHJlZV9WQSgiRlJPTSAle3ZlcnNpb259TCIsIDIsCisJCQkJCQkJCSAidHlw ZSIsIE9ialR5cGVTdHJpbmcsICJmcm9tIiwKKwkJCQkJCQkJICJ2ZXJzaW9uIiwgT2JqVHlwZVN0 cmluZywgZGVmR2V0U3RyaW5nKG9wdCkpOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29i amVjdF9vYmplY3QodG1wKSk7CisJCX0KKwkJZWxzZQorCQkJZWxvZyhFUlJPUiwgInVuc3VwcG9y dGVkIG9wdGlvbiAlcyIsIG9wdC0+ZGVmbmFtZSk7CisJfQorCisJLyogQWRkIHRoZSBTQ0hFTUEg b3B0aW9uICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlNDSEVNQSAle3NjaGVtYX1JIiwgMiwK KwkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzY2hlbWEiLAorCQkJCQkJICJzY2hlbWEi LCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIGdldF9uYW1lc3BhY2VfbmFtZShleHRGb3JtLT5leHRu YW1lc3BhY2UpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXAp KTsKKwl0YWJsZV9jbG9zZShwZ19leHRlbnNpb24sIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1 cm4gbmV3X29ianRyZWVfVkEoIkNSRUFURSBFWFRFTlNJT04gJXtpZl9ub3RfZXhpc3RzfXMgJXtu YW1lfUkgJXtvcHRpb25zOiB9cyIsIDMsCisJCQkJCQkgICJpZl9ub3RfZXhpc3RzIiwgT2JqVHlw ZVN0cmluZywKKwkJCQkJCSAgbm9kZS0+aWZfbm90X2V4aXN0cyA/ICJJRiBOT1QgRVhJU1RTIiA6 ICIiLAorCQkJCQkJICAibmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPmV4dG5hbWUsCisJCQkJ CQkgICJvcHRpb25zIiwgT2JqVHlwZUFycmF5LCBsaXN0KTsKK30KKworLyoKKyAqIElmIGEgY29s dW1uIG5hbWUgaXMgc3BlY2lmaWVkLCBhZGQgYW4gZWxlbWVudCBmb3IgaXQ7IG90aGVyd2lzZSBp dCdzIGEKKyAqIHRhYmxlLWxldmVsIG9wdGlvbi4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVw YXJzZV9GZHdPcHRpb25zKExpc3QgKm9wdGlvbnMsIGNoYXIgKmNvbG5hbWUpCit7CisJT2JqVHJl ZSAgICAqcmV0OworCisJaWYgKGNvbG5hbWUpCisJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRF UiBDT0xVTU4gJXtjb2x1bW59SSIsIDEsCisJCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5n LCBjb2xuYW1lKTsKKwllbHNlCisJCXJldCA9IG5ld19vYmp0cmVlKCJPUFRJT05TIik7CisKKwlp ZiAob3B0aW9ucyAhPSBOSUwpCisJeworCQlMaXN0CSAgICpvcHRvdXQgPSBOSUw7CisJCUxpc3RD ZWxsICAgKmNlbGw7CisKKwkJZm9yZWFjaChjZWxsLCBvcHRpb25zKQorCQl7CisJCQlEZWZFbGVt ICAgICplbGVtOworCQkJT2JqVHJlZSAgICAqb3B0OworCisJCQllbGVtID0gKERlZkVsZW0gKikg bGZpcnN0KGNlbGwpOworCisJCQlzd2l0Y2ggKGVsZW0tPmRlZmFjdGlvbikKKwkJCXsKKwkJCQlj YXNlIERFRkVMRU1fVU5TUEVDOgorCQkJCQlvcHQgPSBuZXdfb2JqdHJlZV9WQSgiJXtsYWJlbH1J ICV7dmFsdWV9TCIsIDIsCisJCQkJCQkJCQkJICJsYWJlbCIsIE9ialR5cGVTdHJpbmcsIGVsZW0t PmRlZm5hbWUsCisJCQkJCQkJCQkJICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJ IGVsZW0tPmFyZyA/IGRlZkdldFN0cmluZyhlbGVtKSA6CisJCQkJCQkJCQkJIGRlZkdldEJvb2xl YW4oZWxlbSkgPyAiVFJVRSIgOiAiRkFMU0UiKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBERUZF TEVNX1NFVDoKKwkJCQkJb3B0ID0gbmV3X29ianRyZWVfVkEoIlNFVCAle2xhYmVsfUkgJXt2YWx1 ZX1MIiwgMiwKKwkJCQkJCQkJCQkgImxhYmVsIiwgT2JqVHlwZVN0cmluZywgZWxlbS0+ZGVmbmFt ZSwKKwkJCQkJCQkJCQkgInZhbHVlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkgZWxlbS0+ YXJnID8gZGVmR2V0U3RyaW5nKGVsZW0pIDoKKwkJCQkJCQkJCQkgZGVmR2V0Qm9vbGVhbihlbGVt KSA/ICJUUlVFIiA6ICJGQUxTRSIpOworCQkJCQlicmVhazsKKwkJCQljYXNlIERFRkVMRU1fQURE OgorCQkJCQlvcHQgPSBuZXdfb2JqdHJlZV9WQSgiQUREICV7bGFiZWx9SSAle3ZhbHVlfUwiLCAy LAorCQkJCQkJCQkJCSAibGFiZWwiLCBPYmpUeXBlU3RyaW5nLCBlbGVtLT5kZWZuYW1lLAorCQkJ CQkJCQkJCSAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCSBlbGVtLT5hcmcgPyBk ZWZHZXRTdHJpbmcoZWxlbSkgOgorCQkJCQkJCQkJCSBkZWZHZXRCb29sZWFuKGVsZW0pID8gIlRS VUUiIDogIkZBTFNFIik7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgREVGRUxFTV9EUk9QOgorCQkJ CQlvcHQgPSBuZXdfb2JqdHJlZV9WQSgiRFJPUCAle2xhYmVsfUkiLCAxLAorCQkJCQkJCQkJCSAi bGFiZWwiLCBPYmpUeXBlU3RyaW5nLCBlbGVtLT5kZWZuYW1lKTsKKwkJCQkJYnJlYWs7CisJCQkJ ZGVmYXVsdDoKKwkJCQkJZWxvZyhFUlJPUiwgImludmFsaWQgZGVmIGFjdGlvbiAlZCIsIGVsZW0t PmRlZmFjdGlvbik7CisJCQkJCW9wdCA9IE5VTEw7CisJCQl9CisKKwkJCW9wdG91dCA9IGxhcHBl bmQob3B0b3V0LCBuZXdfb2JqZWN0X29iamVjdChvcHQpKTsKKwkJfQorCisJCWFwcGVuZF9hcnJh eV9vYmplY3QocmV0LCAiKCV7b3B0aW9uOiAsfXMpIiwgb3B0b3V0KTsKKwl9CisJZWxzZQorCQlh cHBlbmRfbm90X3ByZXNlbnQocmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBh cnNlIGEgQ3JlYXRlRmR3U3RtdCAoQ1JFQVRFIEZPUkVJR04gREFUQSBXUkFQUEVSKQorICoKKyAq IEdpdmVuIGFuIEZEVyBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0 dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAq CisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFIEZPUkVJR04gREFUQSBXUkFQUEVSICV7aWRl bnRpdHl9SSAle2hhbmRsZXJ9cyAle3ZhbGlkYXRvcn1zICV7Z2VuZXJpY19vcHRpb25zfXMKKyAq Lworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVGZHdTdG10KE9pZCBvYmplY3RJZCwg Tm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZUZkd1N0bXQgKm5vZGUgPSAoQ3JlYXRlRmR3U3Rt dCAqKSBwYXJzZXRyZWU7CisJSGVhcFR1cGxlCWZkd1R1cDsKKwlGb3JtX3BnX2ZvcmVpZ25fZGF0 YV93cmFwcGVyIGZkd0Zvcm07CisJUmVsYXRpb24JcmVsOworCU9ialRyZWUgICAgKnJldDsKKwlP YmpUcmVlICAgICp0bXA7CisKKwlyZWwgPSB0YWJsZV9vcGVuKEZvcmVpZ25EYXRhV3JhcHBlclJl bGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJZmR3VHVwID0gU2VhcmNoU3lzQ2FjaGUx KEZPUkVJR05EQVRBV1JBUFBFUk9JRCwKKwkJCQkJCQkgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJ ZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChmZHdUdXApKQorCQllbG9nKEVSUk9SLCAiY2Fj aGUgbG9va3VwIGZhaWxlZCBmb3IgZm9yZWlnbi1kYXRhIHdyYXBwZXIgd2l0aCBPSUQgJXUiLAor CQkJIG9iamVjdElkKTsKKworCWZkd0Zvcm0gPSAoRm9ybV9wZ19mb3JlaWduX2RhdGFfd3JhcHBl cikgR0VUU1RSVUNUKGZkd1R1cCk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIEZP UkVJR04gREFUQSBXUkFQUEVSICV7aWRlbnRpdHl9SSIsIDEsCisJCQkJCQkgImlkZW50aXR5Iiwg T2JqVHlwZVN0cmluZywgTmFtZVN0cihmZHdGb3JtLT5mZHduYW1lKSk7CisKKwkvKiBBZGQgSEFO RExFUiBjbGF1c2UgKi8KKwlpZiAoIU9pZElzVmFsaWQoZmR3Rm9ybS0+ZmR3aGFuZGxlcikpCisJ CXRtcCA9IG5ld19vYmp0cmVlKCJOTyBIQU5ETEVSIik7CisJZWxzZQorCXsKKwkJdG1wID0gbmV3 X29ianRyZWVfVkEoIkhBTkRMRVIgJXtwcm9jZWR1cmV9RCIsIDEsCisJCQkJCQkJICJwcm9jZWR1 cmUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQo UHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIGZkd0Zvcm0tPmZkd2hhbmRsZXIp KTsKKwl9CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtoYW5kbGVyfXMiLCB0bXApOwor CisJLyogQWRkIFZBTElEQVRPUiBjbGF1c2UgKi8KKwlpZiAoIU9pZElzVmFsaWQoZmR3Rm9ybS0+ ZmR3dmFsaWRhdG9yKSkKKwkJdG1wID0gbmV3X29ianRyZWUoIk5PIFZBTElEQVRPUiIpOworCWVs c2UKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJWQUxJREFUT1IgJXtwcm9jZWR1cmV9RCIs IDEsCisJCQkJCQkJICJwcm9jZWR1cmUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCSBuZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJ IGZkd0Zvcm0tPmZkd3ZhbGlkYXRvcikpOworCX0KKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQs ICIle3ZhbGlkYXRvcn1zIiwgdG1wKTsKKworCS8qIEFkZCBhbiBPUFRJT05TIGNsYXVzZSwgaWYg YW55ICovCisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtnZW5lcmljX29wdGlvbnN9cyIs CisJCQkJCQkgZGVwYXJzZV9GZHdPcHRpb25zKG5vZGUtPm9wdGlvbnMsIE5VTEwpKTsKKworCVJl bGVhc2VTeXNDYWNoZShmZHdUdXApOworCXRhYmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9j ayk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhbiBBbHRlckZkd1N0bXQg KEFMVEVSIEZPUkVJR04gREFUQSBXUkFQUEVSKQorICoKKyAqIEdpdmVuIGFuIEZEVyBPSUQgYW5k IHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJl cHJlc2VudGluZyB0aGUgYWx0ZXIgY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICog QUxURVIgRk9SRUlHTiBEQVRBIFdSQVBQRVIgJXtpZGVudGl0eX1JICV7ZmR3X29wdGlvbnM6IH1z ICV7Z2VuZXJpY19vcHRpb25zfUQKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRl ckZkd1N0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQWx0ZXJGZHdTdG10 ICpub2RlID0gKEFsdGVyRmR3U3RtdCAqKSBwYXJzZXRyZWU7CisJSGVhcFR1cGxlCWZkd1R1cDsK KwlGb3JtX3BnX2ZvcmVpZ25fZGF0YV93cmFwcGVyIGZkd0Zvcm07CisJUmVsYXRpb24JcmVsOwor CU9ialRyZWUgICAgKnJldDsKKwlMaXN0CSAgICpmZHdfb3B0aW9ucyA9IE5JTDsKKwlMaXN0Q2Vs bCAgICpjZWxsOworCisJcmVsID0gdGFibGVfb3BlbihGb3JlaWduRGF0YVdyYXBwZXJSZWxhdGlv bklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCWZkd1R1cCA9IFNlYXJjaFN5c0NhY2hlMShGT1JF SUdOREFUQVdSQVBQRVJPSUQsCisJCQkJCQkJIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsK KwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoZmR3VHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxv b2t1cCBmYWlsZWQgZm9yIGZvcmVpZ24tZGF0YSB3cmFwcGVyIHdpdGggT0lEICV1IiwKKwkJCSBv YmplY3RJZCk7CisKKwlmZHdGb3JtID0gKEZvcm1fcGdfZm9yZWlnbl9kYXRhX3dyYXBwZXIpIEdF VFNUUlVDVChmZHdUdXApOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIEZPUkVJR04g REFUQSBXUkFQUEVSICV7aWRlbnRpdHl9SSIsIDEsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlw ZVN0cmluZywgTmFtZVN0cihmZHdGb3JtLT5mZHduYW1lKSk7CisKKwkvKgorCSAqIEl0ZXJhdGUg dGhyb3VnaCBvcHRpb25zLCB0byBzZWUgd2hhdCBjaGFuZ2VkLCBidXQgdXNlIGNhdGFsb2cgYXMg YQorCSAqIGJhc2lzIGZvciBuZXcgdmFsdWVzLgorCSAqLworCWZvcmVhY2goY2VsbCwgbm9kZS0+ ZnVuY19vcHRpb25zKQorCXsKKwkJRGVmRWxlbSAgICAqZWxlbTsKKwkJT2JqVHJlZSAgICAqdG1w OworCisJCWVsZW0gPSBsZmlyc3QoY2VsbCk7CisKKwkJaWYgKHBnX3N0cmNhc2VjbXAoZWxlbS0+ ZGVmbmFtZSwgImhhbmRsZXIiKSA9PSAwKQorCQl7CisJCQkvKiBhZGQgSEFORExFUiBjbGF1c2Ug Ki8KKwkJCWlmICghT2lkSXNWYWxpZChmZHdGb3JtLT5mZHdoYW5kbGVyKSkKKwkJCQl0bXAgPSBu ZXdfb2JqdHJlZSgiTk8gSEFORExFUiIpOworCQkJZWxzZQorCQkJeworCQkJCXRtcCA9IG5ld19v Ymp0cmVlX1ZBKCJIQU5ETEVSICV7cHJvY2VkdXJlfUQiLCAxLAorCQkJCQkJCQkJICJwcm9jZWR1 cmUiLAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxh dGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCSBmZHdGb3JtLT5mZHdoYW5kbGVyKSk7CisJCQl9CisJ CQlmZHdfb3B0aW9ucyA9IGxhcHBlbmQoZmR3X29wdGlvbnMsIG5ld19vYmplY3Rfb2JqZWN0KHRt cCkpOworCQl9CisJCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZWxlbS0+ZGVmbmFtZSwgInZhbGlk YXRvciIpID09IDApCisJCXsKKwkJCS8qIGFkZCBWQUxJREFUT1IgY2xhdXNlICovCisJCQlpZiAo IU9pZElzVmFsaWQoZmR3Rm9ybS0+ZmR3dmFsaWRhdG9yKSkKKwkJCQl0bXAgPSBuZXdfb2JqdHJl ZSgiTk8gVkFMSURBVE9SIik7CisJCQllbHNlCisJCQl7CisJCQkJdG1wID0gbmV3X29ianRyZWVf VkEoIlZBTElEQVRPUiAle3Byb2NlZHVyZX1EIiwgMSwKKwkJCQkJCQkJCSAicHJvY2VkdXJlIiwK KwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25J ZCwKKwkJCQkJCQkJCQkJCQkJCQkgZmR3Rm9ybS0+ZmR3dmFsaWRhdG9yKSk7CisJCQl9CisJCQlm ZHdfb3B0aW9ucyA9IGxhcHBlbmQoZmR3X29wdGlvbnMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkp OworCQl9CisJfQorCisJLyogQWRkIEhBTkRMRVIvVkFMSURBVE9SIGlmIHNwZWNpZmllZCAqLwor CWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAiJXtmZHdfb3B0aW9uczogfXMiLCBmZHdfb3B0aW9u cyk7CisKKwkvKiBBZGQgYW4gT1BUSU9OUyBjbGF1c2UsIGlmIGFueSAqLworCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KHJldCwgIiV7Z2VuZXJpY19vcHRpb25zfUQiLAorCQkJCQkJIGRlcGFyc2VfRmR3 T3B0aW9ucyhub2RlLT5vcHRpb25zLCBOVUxMKSk7CisKKwlSZWxlYXNlU3lzQ2FjaGUoZmR3VHVw KTsKKwl0YWJsZV9jbG9zZShyZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJcmV0dXJuIHJldDsK K30KKworLyoKKyAqIERlcGFyc2UgYSBDUkVBVEUgVFlQRSBBUyBSQU5HRSBzdGF0ZW1lbnQKKyAq CisgKiBHaXZlbiBhIFJhbmdlIHR5cGUgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0 ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNv bW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBUWVBFICV7aWRlbnRpdHl9 RCBBUyBSQU5HRSAoJXtkZWZpbml0aW9uOiwgfXMpCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2Rl cGFyc2VfQ3JlYXRlUmFuZ2VTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQorewor CU9ialRyZWUgICAgKnRtcDsKKwlMaXN0CSAgICpkZWZpbml0aW9uID0gTklMOworCVJlbGF0aW9u CXBnX3JhbmdlOworCUhlYXBUdXBsZQlyYW5nZVR1cDsKKwlGb3JtX3BnX3JhbmdlIHJhbmdlRm9y bTsKKwlTY2FuS2V5RGF0YSBrZXlbMV07CisJU3lzU2NhbkRlc2Mgc2NhbjsKKworCXBnX3Jhbmdl ID0gdGFibGVfb3BlbihSYW5nZVJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJU2Nh bktleUluaXQoJmtleVswXSwKKwkJCQlBbnVtX3BnX3JhbmdlX3JuZ3R5cGlkLAorCQkJCUJURXF1 YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdldERhdHVtKG9iamVjdElk KSk7CisKKwlzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKHBnX3JhbmdlLCBSYW5nZVR5cGlkSW5k ZXhJZCwgdHJ1ZSwKKwkJCQkJCQkgIE5VTEwsIDEsIGtleSk7CisKKwlyYW5nZVR1cCA9IHN5c3Rh YmxlX2dldG5leHQoc2Nhbik7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHJhbmdlVHVwKSkKKwkJ ZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHJhbmdlIHdpdGggdHlwZSBPSUQg JXUiLAorCQkJIG9iamVjdElkKTsKKworCXJhbmdlRm9ybSA9IChGb3JtX3BnX3JhbmdlKSBHRVRT VFJVQ1QocmFuZ2VUdXApOworCisJLyogU1VCVFlQRSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZB KCJTVUJUWVBFID0gJXt0eXBlfUQiLCAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5n LCAic3VidHlwZSIsCisJCQkJCQkgInR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZV9pZChUeXBlUmVsYXRpb25JZCwgcmFuZ2VGb3JtLT5ybmdzdWJ0 eXBlKSk7CisJZGVmaW5pdGlvbiA9IGxhcHBlbmQoZGVmaW5pdGlvbiwgbmV3X29iamVjdF9vYmpl Y3QodG1wKSk7CisKKwkvKiBTVUJUWVBFX09QQ0xBU1MgKi8KKwlpZiAoT2lkSXNWYWxpZChyYW5n ZUZvcm0tPnJuZ3N1Ym9wYykpCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiU1VCVFlQRV9P UENMQVNTID0gJXtvcGNsYXNzfUQiLCAyLAorCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmlu ZywgIm9wY2xhc3MiLAorCQkJCQkJCSAib3BjbGFzcyIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChPcGVyYXRvckNsYXNzUmVsYXRpb25JZCwKKwkJ CQkJCQkJCQkJCQkJIHJhbmdlRm9ybS0+cm5nc3Vib3BjKSk7CisJCWRlZmluaXRpb24gPSBsYXBw ZW5kKGRlZmluaXRpb24sIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKworCS8qIENPTExB VElPTiAqLworCWlmIChPaWRJc1ZhbGlkKHJhbmdlRm9ybS0+cm5nY29sbGF0aW9uKSkKKwl7CisJ CXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJDT0xMQVRJT04gPSAle2NvbGxhdGlvbn1EIiwgMiwKKwkJ CQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJjb2xsYXRpb24iLAorCQkJCQkJCSAiY29s bGF0aW9uIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l X2lkKENvbGxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSByYW5nZUZvcm0tPnJuZ2Nv bGxhdGlvbikpOworCQlkZWZpbml0aW9uID0gbGFwcGVuZChkZWZpbml0aW9uLCBuZXdfb2JqZWN0 X29iamVjdCh0bXApKTsKKwl9CisKKwkvKiBDQU5PTklDQUwgKi8KKwlpZiAoT2lkSXNWYWxpZChy YW5nZUZvcm0tPnJuZ2Nhbm9uaWNhbCkpCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQ0FO T05JQ0FMID0gJXtjYW5vbmljYWx9RCIsIDIsCisJCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3Ry aW5nLCAiY2Fub25pY2FsIiwKKwkJCQkJCQkgImNhbm9uaWNhbCIsIE9ialR5cGVPYmplY3QsCisJ CQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAor CQkJCQkJCQkJCQkJCQkgcmFuZ2VGb3JtLT5ybmdjYW5vbmljYWwpKTsKKwkJZGVmaW5pdGlvbiA9 IGxhcHBlbmQoZGVmaW5pdGlvbiwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJfQorCisJLyog U1VCVFlQRV9ESUZGICovCisJaWYgKE9pZElzVmFsaWQocmFuZ2VGb3JtLT5ybmdzdWJkaWZmKSkK Kwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJTVUJUWVBFX0RJRkYgPSAle3N1YnR5cGVfZGlm Zn1EIiwgMiwKKwkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJzdWJ0eXBlX2RpZmYi LAorCQkJCQkJCSAic3VidHlwZV9kaWZmIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJ CSByYW5nZUZvcm0tPnJuZ3N1YmRpZmYpKTsKKwkJZGVmaW5pdGlvbiA9IGxhcHBlbmQoZGVmaW5p dGlvbiwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJfQorCisJc3lzdGFibGVfZW5kc2Nhbihz Y2FuKTsKKwl0YWJsZV9jbG9zZShwZ19yYW5nZSwgUm93RXhjbHVzaXZlTG9jayk7CisKKwlyZXR1 cm4gbmV3X29ianRyZWVfVkEoIkNSRUFURSBUWVBFICV7aWRlbnRpdHl9RCBBUyBSQU5HRSAoJXtk ZWZpbml0aW9uOiwgfXMpIiwgMiwKKwkJCQkJCSAgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwK KwkJCQkJCSAgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFR5cGVSZWxhdGlvbklkLCBvYmpl Y3RJZCksCisJCQkJCQkgICJkZWZpbml0aW9uIiwgT2JqVHlwZUFycmF5LCBkZWZpbml0aW9uKTsK K30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJFbnVtU3RtdC4KKyAqCisgKiBHaXZlbiBhbiBl bnVtIE9JRCBhbmQgYSBwYXJzZSB0cmVlIHRoYXQgbW9kaWZpZWQgaXQsIHJldHVybiBhbiBPYmpU cmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGFsdGVyIHR5cGUuCisgKgorICogVmVyYm9zZSBzeW50 YXgKKyAqIEFMVEVSIFRZUEUgJXtpZGVudGl0eX1EIEFERCBWQUxVRSAle2lmX25vdF9leGlzdHN9 cyAle3ZhbHVlfUwKKyAqICV7YWZ0ZXJfb3JfYmVmb3JlfXMgJXtuZWlnaGJvcn1MCisgKiAJT1IK KyAqIEFMVEVSIFRZUEUgJXtpZGVudGl0eX1EIFJFTkFNRSBWQUxVRSAle3ZhbHVlfUwgVE8gJXtu ZXd2YWx1ZX1MCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJFbnVtU3RtdChP aWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlBbHRlckVudW1TdG10ICpub2RlID0g KEFsdGVyRW51bVN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJldDsKKworCXJldCA9 IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBUWVBFICV7aWRlbnRpdHl9RCIsIDEsCisJCQkJCQkgImlk ZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVf aWQoVHlwZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIG9iamVjdElkKSk7CisKKwlpZiAoIW5v ZGUtPm9sZFZhbCkKKwl7CisJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHJldCwgIkFERCBWQUxVRSIp OworCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle2lmX25vdF9leGlzdHN9cyIsICJpZl9u b3RfZXhpc3RzIiwKKwkJCQkJCQkgbm9kZS0+c2tpcElmTmV3VmFsRXhpc3RzID8gIklGIE5PVCBF WElTVFMiIDogIiIpOworCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7dmFsdWV9TCIs ICJ2YWx1ZSIsIG5vZGUtPm5ld1ZhbCk7CisKKwkJaWYgKG5vZGUtPm5ld1ZhbE5laWdoYm9yKQor CQl7CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle2FmdGVyX29yX2JlZm9yZX1zIiwK KwkJCQkJCQkJICJhZnRlcl9vcl9iZWZvcmUiLAorCQkJCQkJCQkgbm9kZS0+bmV3VmFsSXNBZnRl ciA/ICJBRlRFUiIgOiAiQkVGT1JFIik7CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIl e25laWdoYm9yfUwiLCAibmVpZ2hib3IiLAorCQkJCQkJCQkgbm9kZS0+bmV3VmFsTmVpZ2hib3Ip OworCQl9CisJfQorCWVsc2UKKwl7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIlJFTkFN RSBWQUxVRSAle3ZhbHVlfUwgVE8iLCAidmFsdWUiLAorCQkJCQkJCSBub2RlLT5vbGRWYWwpOwor CQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle25ld3ZhbHVlfUwiLCAibmV3dmFsdWUiLCBu b2RlLT5uZXdWYWwpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFu IEFsdGVyRXh0ZW5zaW9uU3RtdCAoQUxURVIgRVhURU5TSU9OIC4uIFVQREFURSBUTyBWRVJTSU9O KQorICoKKyAqIEdpdmVuIGFuIGV4dGVuc2lvbiBPSUQgYW5kIGEgcGFyc2UgdHJlZSB0aGF0IG1v ZGlmaWVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBhbHRlciB0 eXBlLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTFRFUiBFWFRFTlNJT04gJXtpZGVudGl0 eX1JIFVQREFURSAle29wdGlvbnM6IH1zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2Vf QWx0ZXJFeHRlbnNpb25TdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUFs dGVyRXh0ZW5zaW9uU3RtdCAqbm9kZSA9IChBbHRlckV4dGVuc2lvblN0bXQgKikgcGFyc2V0cmVl OworCVJlbGF0aW9uCXBnX2V4dGVuc2lvbjsKKwlIZWFwVHVwbGUJZXh0VHVwOworCUZvcm1fcGdf ZXh0ZW5zaW9uIGV4dEZvcm07CisJT2JqVHJlZSAgICAqcmV0OworCUxpc3QJICAgKmxpc3QgPSBO SUw7CisJTGlzdENlbGwgICAqY2VsbDsKKwlEZWZFbGVtICAgICpkX25ld192ZXJzaW9uID0gTlVM TDsKKworCXBnX2V4dGVuc2lvbiA9IHRhYmxlX29wZW4oRXh0ZW5zaW9uUmVsYXRpb25JZCwgQWNj ZXNzU2hhcmVMb2NrKTsKKwlleHRUdXAgPSBnZXRfY2F0YWxvZ19vYmplY3RfYnlfb2lkKHBnX2V4 dGVuc2lvbiwgQW51bV9wZ19leHRlbnNpb25fb2lkLCBvYmplY3RJZCk7CisJaWYgKCFIZWFwVHVw bGVJc1ZhbGlkKGV4dFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZv ciBleHRlbnNpb24gd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsKKwlleHRGb3JtID0gKEZv cm1fcGdfZXh0ZW5zaW9uKSBHRVRTVFJVQ1QoZXh0VHVwKTsKKworCWZvcmVhY2goY2VsbCwgbm9k ZS0+b3B0aW9ucykKKwl7CisJCURlZkVsZW0gICAgKm9wdCA9IChEZWZFbGVtICopIGxmaXJzdChj ZWxsKTsKKworCQlpZiAoc3RyY21wKG9wdC0+ZGVmbmFtZSwgIm5ld192ZXJzaW9uIikgPT0gMCkK KwkJeworCQkJT2JqVHJlZSAgICAqdG1wOworCisJCQlpZiAoZF9uZXdfdmVyc2lvbikKKwkJCQll bG9nKEVSUk9SLCAiY29uZmxpY3Rpbmcgb3IgcmVkdW5kYW50IG9wdGlvbnMgZm9yIGV4dGVuc2lv biB3aXRoIE9JRCAldSIsCisJCQkJCSBvYmplY3RJZCk7CisKKwkJCWRfbmV3X3ZlcnNpb24gPSBv cHQ7CisKKwkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJUTyAle3ZlcnNpb259TCIsIDIsCisJCQkJ CQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJ2ZXJzaW9uIiwKKwkJCQkJCQkJICJ2ZXJzaW9u IiwgT2JqVHlwZVN0cmluZywgZGVmR2V0U3RyaW5nKG9wdCkpOworCQkJbGlzdCA9IGxhcHBlbmQo bGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCX0KKwkJZWxzZQorCQkJZWxvZyhFUlJP UiwgInVuc3VwcG9ydGVkIG9wdGlvbiAlcyIsIG9wdC0+ZGVmbmFtZSk7CisJfQorCisJcmV0ID0g bmV3X29ianRyZWVfVkEoIkFMVEVSIEVYVEVOU0lPTiAle2lkZW50aXR5fUkgVVBEQVRFICV7b3B0 aW9uczogfXMiLCAyLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIE5hbWVTdHIo ZXh0Rm9ybS0+ZXh0bmFtZSksCisJCQkJCQkgIm9wdGlvbnMiLCBPYmpUeXBlQXJyYXksIGxpc3Qp OworCisJdGFibGVfY2xvc2UocGdfZXh0ZW5zaW9uLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0 dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJFeHRlbnNpb25Db250ZW50c1N0 bXQgKEFMVEVSIEVYVEVOU0lPTiBleHQgQUREL0RST1Agb2JqZWN0KQorICoKKyAqIFZlcmJvc2Ug c3ludGF4CisgKiBBTFRFUiBFWFRFTlNJT04gJXtleHRpZGVudGl0eX1JIEFERC9EUk9QICV7b2Jq aWRlbnRpdHl9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyRXh0ZW5zaW9u Q29udGVudHNTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlLAorCQkJCQkJCQkgICBP YmplY3RBZGRyZXNzIG9iamVjdEFkZHJlc3MpCit7CisJQWx0ZXJFeHRlbnNpb25Db250ZW50c1N0 bXQgKm5vZGUgPSAoQWx0ZXJFeHRlbnNpb25Db250ZW50c1N0bXQgKikgcGFyc2V0cmVlOworCisJ QXNzZXJ0KG5vZGUtPmFjdGlvbiA9PSArMSB8fCBub2RlLT5hY3Rpb24gPT0gLTEpOworCisJcmV0 dXJuIG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBFWFRFTlNJT04gJXtleHRpZGVudGl0eX1JICV7ZXh0 b3B0aW9ufXMgJXtleHRvYmp0eXBlfXMgJXtvYmppZGVudGl0eX1zIiwgNCwKKwkJCQkJCSAgImV4 dGlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywgbm9kZS0+ZXh0bmFtZSwKKwkJCQkJCSAgImV4dG9w dGlvbiIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgIG5vZGUtPmFjdGlvbiA9PSArMSA/ICJBREQi IDogIkRST1AiLAorCQkJCQkJICAiZXh0b2JqdHlwZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkg IHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPm9ianR5cGUsIGZhbHNlKSwKKwkJCQkJCSAgIm9iamlk ZW50aXR5IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSAgZ2V0T2JqZWN0SWRlbnRpdHkoJm9iamVj dEFkZHJlc3MsIGZhbHNlKSk7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIENyZWF0ZUNhc3RTdG10 LgorICoKKyAqIEdpdmVuIGEgc2VxdWVuY2UgT0lEIGFuZCBhIHBhcnNlIHRyZWUgdGhhdCBtb2Rp ZmllZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24g Y29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFIENBU1QgKCV7c291cmNl dHlwZX1UIEFTICV7dGFyZ2V0dHlwZX1UKSAle21lY2hhbmlzbX1zICV7Y29udGV4dH1zCisgKi8K K3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlQ2FzdFN0bXQoT2lkIG9iamVjdElkLCBO b2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlQ2FzdFN0bXQgKm5vZGUgPSAoQ3JlYXRlQ2FzdFN0 bXQgKikgcGFyc2V0cmVlOworCVJlbGF0aW9uCWNhc3RyZWw7CisJSGVhcFR1cGxlCWNhc3RUdXA7 CisJRm9ybV9wZ19jYXN0IGNhc3RGb3JtOworCU9ialRyZWUgICAgKnJldDsKKwljaGFyCSAgICpj b250ZXh0OworCisJY2FzdHJlbCA9IHRhYmxlX29wZW4oQ2FzdFJlbGF0aW9uSWQsIEFjY2Vzc1No YXJlTG9jayk7CisJY2FzdFR1cCA9IGdldF9jYXRhbG9nX29iamVjdF9ieV9vaWQoY2FzdHJlbCwg QW51bV9wZ19jYXN0X29pZCwgb2JqZWN0SWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChjYXN0 VHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGNhc3Qgd2l0aCBP SUQgJXUiLCBvYmplY3RJZCk7CisJY2FzdEZvcm0gPSAoRm9ybV9wZ19jYXN0KSBHRVRTVFJVQ1Qo Y2FzdFR1cCk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIENBU1QgKCV7c291cmNl dHlwZX1UIEFTICV7dGFyZ2V0dHlwZX1UKSIsIDIsCisJCQkJCQkgInNvdXJjZXR5cGUiLCBPYmpU eXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKGNhc3RGb3JtLT5jYXN0c291 cmNlLCAtMSksCisJCQkJCQkgInRhcmdldHR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5l d19vYmp0cmVlX2Zvcl90eXBlKGNhc3RGb3JtLT5jYXN0dGFyZ2V0LCAtMSkpOworCisJaWYgKG5v ZGUtPmlub3V0KQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle21lY2hhbmlzbX1zIiwg Im1lY2hhbmlzbSIsCisJCQkJCQkJICJXSVRIIElOT1VUIik7CisJZWxzZSBpZiAobm9kZS0+ZnVu YyA9PSBOVUxMKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle21lY2hhbmlzbX1zIiwg Im1lY2hhbmlzbSIsCisJCQkJCQkJICJXSVRIT1VUIEZVTkNUSU9OIik7CisJZWxzZQorCXsKKwkJ T2JqVHJlZSAgICAqdG1wX29iajsKKwkJU3RyaW5nSW5mb0RhdGEgZnVuYzsKKwkJSGVhcFR1cGxl CWZ1bmNUdXA7CisJCUZvcm1fcGdfcHJvYyBmdW5jRm9ybTsKKwkJaW50CQkJaTsKKworCQlmdW5j VHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsIGNhc3RGb3JtLT5jYXN0ZnVuYyk7CisJCWZ1 bmNGb3JtID0gKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKGZ1bmNUdXApOworCisJCWluaXRTdHJp bmdJbmZvKCZmdW5jKTsKKwkJYXBwZW5kU3RyaW5nSW5mbygmZnVuYywgIiVzKCIsCisJCQkJCQkg cXVvdGVfcXVhbGlmaWVkX2lkZW50aWZpZXIoZ2V0X25hbWVzcGFjZV9uYW1lKGZ1bmNGb3JtLT5w cm9uYW1lc3BhY2UpLAorCQkJCQkJCQkJCQkJCU5hbWVTdHIoZnVuY0Zvcm0tPnByb25hbWUpKSk7 CisJCWZvciAoaSA9IDA7IGkgPCBmdW5jRm9ybS0+cHJvbmFyZ3M7IGkrKykKKwkJeworCQkJaWYg KGkgIT0gMCkKKwkJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmZnVuYywgJywnKTsKKworCQkJYXBw ZW5kU3RyaW5nSW5mb1N0cmluZygmZnVuYywKKwkJCQkJCQkJICAgZm9ybWF0X3R5cGVfYmVfcXVh bGlmaWVkKGZ1bmNGb3JtLT5wcm9hcmd0eXBlcy52YWx1ZXNbaV0pKTsKKwkJfQorCQlhcHBlbmRT dHJpbmdJbmZvQ2hhcigmZnVuYywgJyknKTsKKworCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEo IldJVEggRlVOQ1RJT04gJXtjYXN0ZnVuY3Rpb259cyIsIDEsCisJCQkJCQkJCSJjYXN0ZnVuY3Rp b24iLCBPYmpUeXBlU3RyaW5nLCBmdW5jLmRhdGEpOworCQlhcHBlbmRfb2JqZWN0X29iamVjdChy ZXQsICIle21lY2hhbmlzbX1zIiwgdG1wX29iaik7CisKKwkJUmVsZWFzZVN5c0NhY2hlKGZ1bmNU dXApOworCX0KKworCXN3aXRjaCAobm9kZS0+Y29udGV4dCkKKwl7CisJCWNhc2UgQ09FUkNJT05f SU1QTElDSVQ6CisJCQljb250ZXh0ID0gIkFTIElNUExJQ0lUIjsKKwkJCWJyZWFrOworCQljYXNl IENPRVJDSU9OX0FTU0lHTk1FTlQ6CisJCQljb250ZXh0ID0gIkFTIEFTU0lHTk1FTlQiOworCQkJ YnJlYWs7CisJCWNhc2UgQ09FUkNJT05fRVhQTElDSVQ6CisJCQljb250ZXh0ID0gIiI7CisJCQli cmVhazsKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIGNvZXJjaW9uIGNvZGUg JWMiLCBub2RlLT5jb250ZXh0KTsKKwkJCXJldHVybiBOVUxMOwkJLyoga2VlcCBjb21waWxlciBx dWlldCAqLworCX0KKwlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle2NvbnRleHR9cyIsICJj b250ZXh0IiwgY29udGV4dCk7CisKKwl0YWJsZV9jbG9zZShjYXN0cmVsLCBBY2Nlc3NTaGFyZUxv Y2spOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQUxURVIgREVGQVVM VCBQUklWSUxFR0VTIHN0YXRlbWVudC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQUxURVIg REVGQVVMVCBQUklWSUxFR0VTICV7aW5fc2NoZW1hfXMgJXtmb3Jfcm9sZXN9cyAle2dyYW50fXMK KyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlckRlZmF1bHRQcml2aWxlZ2VzU3Rt dChDb2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJT2JqVHJlZSAgICAqcmV0OworCUFsdGVyRGVm YXVsdFByaXZpbGVnZXNTdG10ICpzdG10ID0gKEFsdGVyRGVmYXVsdFByaXZpbGVnZXNTdG10ICop IGNtZC0+cGFyc2V0cmVlOworCUxpc3QJICAgKnJvbGVzID0gTklMOworCUxpc3QJICAgKnNjaGVt YXMgPSBOSUw7CisJTGlzdAkgICAqZ3JhbnRlZXM7CisJTGlzdAkgICAqcHJpdnM7CisJTGlzdENl bGwgICAqY2VsbDsKKwlPYmpUcmVlICAgICp0bXA7CisJT2JqVHJlZSAgICAqZ3JhbnQ7CisJY2hh cgkgICAqb2JqdHlwZTsKKworCXJldCA9IG5ld19vYmp0cmVlKCJBTFRFUiBERUZBVUxUIFBSSVZJ TEVHRVMiKTsKKworCS8qIFNjYW4gdGhlIHBhcnNlIG5vZGUgdG8gZGlnIG91dCB0aGUgRk9SIFJP TEUgYW5kIElOIFNDSEVNQSBjbGF1c2VzICovCisJZm9yZWFjaChjZWxsLCBzdG10LT5vcHRpb25z KQorCXsKKwkJRGVmRWxlbSAgICAqb3B0ID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCQlM aXN0Q2VsbCAgICpjZWxsMjsKKworCQlBc3NlcnQoSXNBKG9wdCwgRGVmRWxlbSkpOworCQlBc3Nl cnQoSXNBKG9wdC0+YXJnLCBMaXN0KSk7CisJCWlmIChzdHJjbXAob3B0LT5kZWZuYW1lLCAicm9s ZXMiKSA9PSAwKQorCQl7CisJCQlmb3JlYWNoKGNlbGwyLCAoTGlzdCAqKSBvcHQtPmFyZykKKwkJ CXsKKwkJCQlSb2xlU3BlYyAgICpyb2xlc3BlYyA9IGxmaXJzdChjZWxsMik7CisJCQkJT2JqVHJl ZSAgICAqb2JqID0gbmV3X29ianRyZWVfZm9yX3JvbGVzcGVjKHJvbGVzcGVjKTsKKworCQkJCXJv bGVzID0gbGFwcGVuZChyb2xlcywgbmV3X29iamVjdF9vYmplY3Qob2JqKSk7CisJCQl9CisJCX0K KwkJZWxzZSBpZiAoc3RyY21wKG9wdC0+ZGVmbmFtZSwgInNjaGVtYXMiKSA9PSAwKQorCQl7CisJ CQlmb3JlYWNoKGNlbGwyLCAoTGlzdCAqKSBvcHQtPmFyZykKKwkJCXsKKwkJCQlTdHJpbmcJICAg KnZhbCA9IGxmaXJzdF9ub2RlKFN0cmluZywgY2VsbDIpOworCisJCQkJc2NoZW1hcyA9IGxhcHBl bmQoc2NoZW1hcywgbmV3X3N0cmluZ19vYmplY3Qoc3RyVmFsKHZhbCkpKTsKKwkJCX0KKwkJfQor CX0KKworCS8qIEFkZCB0aGUgSU4gU0NIRU1BIGNsYXVzZSwgaWYgYW55ICovCisJdG1wID0gbmV3 X29ianRyZWUoIklOIFNDSEVNQSIpOworCWFwcGVuZF9hcnJheV9vYmplY3QodG1wLCAiJXtzY2hl bWFzOiwgfUkiLCBzY2hlbWFzKTsKKwlpZiAoc2NoZW1hcyA9PSBOSUwpCisJCWFwcGVuZF9ub3Rf cHJlc2VudCh0bXApOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7aW5fc2NoZW1hfXMi LCB0bXApOworCisJLyogQWRkIHRoZSBGT1IgUk9MRSBjbGF1c2UsIGlmIGFueSAqLworCXRtcCA9 IG5ld19vYmp0cmVlKCJGT1IgUk9MRSIpOworCWFwcGVuZF9hcnJheV9vYmplY3QodG1wLCAiJXty b2xlczosIH1SIiwgcm9sZXMpOworCWlmIChyb2xlcyA9PSBOSUwpCisJCWFwcGVuZF9ub3RfcHJl c2VudCh0bXApOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7Zm9yX3JvbGVzfXMiLCB0 bXApOworCisJLyoKKwkgKiBBZGQgdGhlIEdSQU5UIHN1YmNvbW1hbmQKKwkgKiBWZXJib3NlIHN5 bnRheAorCSAqIEdSQU5UICV7cHJpdmlsZWdlczosIH1zIE9OICV7dGFyZ2V0fXMgVE8gJXtncmFu dGVlczosIH1SICV7Z3JhbnRfb3B0aW9ufXMKKwkgKiBvcgorCSAqIFJFVk9LRSAle2dyYW50X29w dGlvbn1zICV7cHJpdmlsZWdlczosIH1zIE9OICV7dGFyZ2V0fXMgRlJPTSAle2dyYW50ZWVzOiwg fVIKKwkgKi8KKwlpZiAoc3RtdC0+YWN0aW9uLT5pc19ncmFudCkKKwkJZ3JhbnQgPSBuZXdfb2Jq dHJlZSgiR1JBTlQiKTsKKwllbHNlCisJeworCQlncmFudCA9IG5ld19vYmp0cmVlKCJSRVZPS0Ui KTsKKworCQkvKiBBZGQgdGhlIEdSQU5UIE9QVElPTiBjbGF1c2UgZm9yIFJFVk9LRSBzdWJjb21t YW5kICovCisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJHUkFOVCBPUFRJT04gRk9SIiwgMSwKKwkJ CQkJCQkgInByZXNlbnQiLCBPYmpUeXBlQm9vbCwKKwkJCQkJCQkgc3RtdC0+YWN0aW9uLT5ncmFu dF9vcHRpb24pOworCQlhcHBlbmRfb2JqZWN0X29iamVjdChncmFudCwgIiV7Z3JhbnRfb3B0aW9u fXMiLCB0bXApOworCX0KKworCS8qCisJICogQWRkIHRoZSBwcml2aWxlZ2VzIGxpc3QuICBUaGlz IHVzZXMgdGhlIHBhcnNlciBzdHJ1Y3QsIGFzIG9wcG9zZWQgdG8KKwkgKiB0aGUgSW50ZXJuYWxH cmFudCBmb3JtYXQgdXNlZCBieSBHUkFOVC4gIFRoZXJlIGFyZSBlbm91Z2ggb3RoZXIKKwkgKiBk aWZmZXJlbmNlcyB0aGF0IHRoaXMgZG9lc24ndCBzZWVtIHdvcnRoIGltcHJvdmluZy4KKwkgKi8K KwlpZiAoc3RtdC0+YWN0aW9uLT5wcml2aWxlZ2VzID09IE5JTCkKKwkJcHJpdnMgPSBsaXN0X21h a2UxKG5ld19zdHJpbmdfb2JqZWN0KCJBTEwgUFJJVklMRUdFUyIpKTsKKwllbHNlCisJeworCQlw cml2cyA9IE5JTDsKKworCQlmb3JlYWNoKGNlbGwsIHN0bXQtPmFjdGlvbi0+cHJpdmlsZWdlcykK KwkJeworCQkJQWNjZXNzUHJpdiAqcHJpdiA9IGxmaXJzdChjZWxsKTsKKworCQkJQXNzZXJ0KHBy aXYtPmNvbHMgPT0gTklMKTsKKwkJCXByaXZzID0gbGFwcGVuZChwcml2cywgbmV3X3N0cmluZ19v YmplY3QocHJpdi0+cHJpdl9uYW1lKSk7CisJCX0KKwl9CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0 KGdyYW50LCAiJXtwcml2aWxlZ2VzOiwgfXMiLCBwcml2cyk7CisKKwlzd2l0Y2ggKGNtZC0+ZC5k ZWZwcml2cy5vYmp0eXBlKQorCXsKKwkJY2FzZSBPQkpFQ1RfVEFCTEU6CisJCQlvYmp0eXBlID0g IlRBQkxFUyI7CisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1RfRlVOQ1RJT046CisJCQlvYmp0eXBl ID0gIkZVTkNUSU9OUyI7CisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1RfUk9VVElORToKKwkJCW9i anR5cGUgPSAiUk9VVElORVMiOworCQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX1NFUVVFTkNFOgor CQkJb2JqdHlwZSA9ICJTRVFVRU5DRVMiOworCQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX1RZUEU6 CisJCQlvYmp0eXBlID0gIlRZUEVTIjsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9TQ0hFTUE6 CisJCQlvYmp0eXBlID0gIlNDSEVNQVMiOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllbG9n KEVSUk9SLCAiaW52YWxpZCBPQkpFQ1QgdmFsdWUgJWQgZm9yIGRlZmF1bHQgcHJpdmlsZWdlcyIs IGNtZC0+ZC5kZWZwcml2cy5vYmp0eXBlKTsKKwl9CisKKwkvKiBBZGQgdGhlIHRhcmdldCBvYmpl Y3QgdHlwZSAqLworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGdyYW50LCAiT04gJXt0YXJnZXR9cyIs ICJ0YXJnZXQiLCBvYmp0eXBlKTsKKworCS8qIEFkZCB0aGUgZ3JhbnRlZSBsaXN0ICovCisJZ3Jh bnRlZXMgPSBOSUw7CisJZm9yZWFjaChjZWxsLCBzdG10LT5hY3Rpb24tPmdyYW50ZWVzKQorCXsK KwkJUm9sZVNwZWMgICAqc3BlYyA9IChSb2xlU3BlYyAqKSBsZmlyc3QoY2VsbCk7CisJCU9ialRy ZWUgICAgKm9iaiA9IG5ld19vYmp0cmVlX2Zvcl9yb2xlc3BlYyhzcGVjKTsKKworCQlncmFudGVl cyA9IGxhcHBlbmQoZ3JhbnRlZXMsIG5ld19vYmplY3Rfb2JqZWN0KG9iaikpOworCX0KKworCWlm IChzdG10LT5hY3Rpb24tPmlzX2dyYW50KQorCXsKKwkJYXBwZW5kX2FycmF5X29iamVjdChncmFu dCwgIlRPICV7Z3JhbnRlZXM6LCB9UiIsIGdyYW50ZWVzKTsKKworCQkvKiBBZGQgdGhlIFdJVEgg R1JBTlQgT1BUSU9OIGNsYXVzZSBmb3IgR1JBTlQgc3ViY29tbWFuZCAqLworCQl0bXAgPSBuZXdf b2JqdHJlZV9WQSgiV0lUSCBHUkFOVCBPUFRJT04iLCAxLAorCQkJCQkJCSAicHJlc2VudCIsIE9i alR5cGVCb29sLAorCQkJCQkJCSBzdG10LT5hY3Rpb24tPmdyYW50X29wdGlvbik7CisJCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KGdyYW50LCAiJXtncmFudF9vcHRpb259cyIsIHRtcCk7CisJfQorCWVs c2UKKwkJYXBwZW5kX2FycmF5X29iamVjdChncmFudCwgIkZST00gJXtncmFudGVlczosIH1SIiwg Z3JhbnRlZXMpOworCisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtncmFudH1zIiwgZ3Jh bnQpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIENSRUFURSBET01B SU4KKyAqCisgKiBHaXZlbiBhIGZ1bmN0aW9uIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBj cmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlv biBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgRE9NQUlOICV7aWRl bnRpdHl9RCBBUyAle3R5cGV9VCAle25vdF9udWxsfXMgJXtjb25zdHJhaW50c31zCisgKiAle2Nv bGxhdGlvbn1zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlRG9tYWluKE9p ZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCU9ialRyZWUgICAgKnJldDsKKwlPYmpU cmVlICAgICp0bXBfb2JqOworCUhlYXBUdXBsZQl0eXBUdXA7CisJRm9ybV9wZ190eXBlIHR5cEZv cm07CisJTGlzdAkgICAqY29uc3RyYWludHM7CisJY2hhcgkgICAqZGVmdmFsOworCisJdHlwVHVw ID0gU2VhcmNoU3lzQ2FjaGUxKFRZUEVPSUQsIG9iamVjdElkKTsKKwlpZiAoIUhlYXBUdXBsZUlz VmFsaWQodHlwVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGRv bWFpbiB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwl0eXBGb3JtID0gKEZvcm1fcGdfdHlwZSkg R0VUU1RSVUNUKHR5cFR1cCk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIERPTUFJ TiAle2lkZW50aXR5fUQgQVMgJXt0eXBlfVQgJXtub3RfbnVsbH1zIiwgMywKKwkJCQkJCSAiaWRl bnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9p ZChUeXBlUmVsYXRpb25JZCwgb2JqZWN0SWQpLAorCQkJCQkJICJ0eXBlIiwgT2JqVHlwZU9iamVj dCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZSh0eXBGb3JtLT50eXBiYXNldHlwZSwKKwkJ CQkJCQkJCQkJICB0eXBGb3JtLT50eXB0eXBtb2QpLAorCQkJCQkJICJub3RfbnVsbCIsIE9ialR5 cGVTdHJpbmcsCisJCQkJCQkgdHlwRm9ybS0+dHlwbm90bnVsbCA/ICJOT1QgTlVMTCIgOiAiIik7 CisKKwljb25zdHJhaW50cyA9IG9idGFpbkNvbnN0cmFpbnRzKE5JTCwgSW52YWxpZE9pZCwgb2Jq ZWN0SWQpOworCWlmIChjb25zdHJhaW50cyA9PSBOSUwpCisJeworCQl0bXBfb2JqID0gbmV3X29i anRyZWUoIiIpOworCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7CisJfQorCWVsc2UKKwkJ dG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCIle2VsZW1lbnRzOiwgfXMiLCAxLAorCQkJCQkJCQki ZWxlbWVudHMiLCBPYmpUeXBlQXJyYXksIGNvbnN0cmFpbnRzKTsKKwlhcHBlbmRfb2JqZWN0X29i amVjdChyZXQsICIle2NvbnN0cmFpbnRzfXMiLCB0bXBfb2JqKTsKKworCXRtcF9vYmogPSBuZXdf b2JqdHJlZSgiQ09MTEFURSIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cGNvbGxhdGlv bikpCisJeworCQlPYmpUcmVlICAgICpjb2xsbmFtZTsKKworCQljb2xsbmFtZSA9IG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZV9pZChDb2xsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkgICB0 eXBGb3JtLT50eXBjb2xsYXRpb24pOworCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAi JXtuYW1lfUQiLCBjb2xsbmFtZSk7CisJfQorCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRt cF9vYmopOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7Y29sbGF0aW9ufXMiLCB0bXBf b2JqKTsKKworCWRlZnZhbCA9IERvbWFpbkdldERlZmF1bHQodHlwVHVwLCB0cnVlKTsKKwlpZiAo ZGVmdmFsKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICJERUZBVUxUICV7ZGVmYXVsdH1z IiwgImRlZmF1bHQiLCBkZWZ2YWwpOworCisJUmVsZWFzZVN5c0NhY2hlKHR5cFR1cCk7CisKKwly ZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZUZ1bmN0aW9uU3RtdCAoQ1JF QVRFIEZVTkNUSU9OKQorICoKKyAqIEdpdmVuIGEgZnVuY3Rpb24gT0lEIGFuZCB0aGUgcGFyc2Ug dHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcg dGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqCisgKiBDUkVB VEUgJXtvcl9yZXBsYWNlfXMgRlVOQ1RJT04gJXtzaWduYXR1cmV9cyBSRVRVUk5TICV7cmV0dXJu X3R5cGV9cworICogTEFOR1VBR0UgJXt0cmFuc2Zvcm1fdHlwZX1zICV7bGFuZ3VhZ2V9SSAle3dp bmRvd31zICV7dm9sYXRpbGl0eX1zCisgKiAle3BhcmFsbGVsX3NhZmV0eX1zICV7bGVha3Byb29m fXMgJXtzdHJpY3R9cyAle3NlY3VyaXR5X2RlZmluZXJ9cworICogJXtjb3N0fXMgJXtyb3dzfXMg JXtzdXBwb3J0fXMgJXtzZXRfb3B0aW9uczogfXMgQVMgJXtvYmpmaWxlfUwsCisgKiAle3N5bWJv bH1MCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlRnVuY3Rpb24oT2lkIG9i amVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlRnVuY3Rpb25TdG10ICpub2RlID0g KENyZWF0ZUZ1bmN0aW9uU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqcmV0OworCU9i alRyZWUgICAgKnRtcF9vYmo7CisJRGF0dW0JCXRtcGRhdHVtOworCWNoYXIJICAgKnNvdXJjZTsK KwljaGFyCSAgICpwcm9iaW4gPSBOVUxMOworCUxpc3QJICAgKnBhcmFtczsKKwlMaXN0CSAgICpk ZWZhdWx0czsKKwlMaXN0CSAgICpzZXRzID0gTklMOworCUxpc3QJICAgKnR5cGVzID0gTklMOwor CUxpc3RDZWxsICAgKmNlbGw7CisJTGlzdENlbGwgICAqY3VyZGVmOworCUxpc3RDZWxsICAgKnRh YmxlX3BhcmFtcyA9IE5VTEw7CisJSGVhcFR1cGxlCXByb2NUdXA7CisJRm9ybV9wZ19wcm9jIHBy b2NGb3JtOworCUhlYXBUdXBsZQlsYW5nVHVwOworCU9pZAkJICAgKnR5cGFycmF5OworCU9pZAkJ ICAgKnRyZnR5cGVzOworCUZvcm1fcGdfbGFuZ3VhZ2UgbGFuZ0Zvcm07CisJaW50CQkJaTsKKwlp bnQJCQl0eXBudW07CisJaW50CQkJbnR5cGVzOworCWludAkJCXBhcmFtY291bnQgPSBsaXN0X2xl bmd0aChub2RlLT5wYXJhbWV0ZXJzKTsKKwlib29sCQlpc251bGw7CisJYm9vbAkJaXNmdW5jdGlv bjsKKworCS8qIEdldCB0aGUgcGdfcHJvYyB0dXBsZSAqLworCXByb2NUdXAgPSBTZWFyY2hTeXND YWNoZTEoUFJPQ09JRCwgb2JqZWN0SWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChwcm9jVHVw KSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGZ1bmN0aW9uIHdpdGgg T0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisJcHJvY0Zvcm0gPSAoRm9ybV9wZ19wcm9jKSBHRVRT VFJVQ1QocHJvY1R1cCk7CisKKwkvKiBHZXQgdGhlIGNvcnJlc3BvbmRpbmcgcGdfbGFuZ3VhZ2Ug dHVwbGUgKi8KKwlsYW5nVHVwID0gU2VhcmNoU3lzQ2FjaGUxKExBTkdPSUQsIHByb2NGb3JtLT5w cm9sYW5nKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQobGFuZ1R1cCkpCisJCWVsb2coRVJST1Is ICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBsYW5ndWFnZSB3aXRoIE9JRCAldSIsCisJCQkgcHJv Y0Zvcm0tPnByb2xhbmcpOworCWxhbmdGb3JtID0gKEZvcm1fcGdfbGFuZ3VhZ2UpIEdFVFNUUlVD VChsYW5nVHVwKTsKKworCS8qCisJICogRGV0ZXJtaW5lIHVzZWZ1bCB2YWx1ZXMgZm9yIHByb3Ny YyBhbmQgcHJvYmluLiAgV2UgY29wZSB3aXRoIHByb2JpbgorCSAqIGJlaW5nIGVpdGhlciBOVUxM IG9yICItIiwgYnV0IHByb3NyYyBtdXN0IGhhdmUgYSB2YWxpZCB2YWx1ZS4KKwkgKi8KKwl0bXBk YXR1bSA9IFN5c0NhY2hlR2V0QXR0cihQUk9DT0lELCBwcm9jVHVwLAorCQkJCQkJCSAgIEFudW1f cGdfcHJvY19wcm9zcmMsICZpc251bGwpOworCWlmIChpc251bGwpCisJCWVsb2coRVJST1IsICJu dWxsIHByb3NyYyBpbiBmdW5jdGlvbiB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwlzb3VyY2Ug PSBUZXh0RGF0dW1HZXRDU3RyaW5nKHRtcGRhdHVtKTsKKworCS8qIERldGVybWluZSBhIHVzZWZ1 bCB2YWx1ZSBmb3IgcHJvYmluICovCisJdG1wZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoUFJPQ09J RCwgcHJvY1R1cCwKKwkJCQkJCQkgICBBbnVtX3BnX3Byb2NfcHJvYmluLCAmaXNudWxsKTsKKwlp ZiAoIWlzbnVsbCkKKwl7CisJCXByb2JpbiA9IFRleHREYXR1bUdldENTdHJpbmcodG1wZGF0dW0p OworCQlpZiAocHJvYmluWzBdID09ICdcMCcgfHwgc3RyY21wKHByb2JpbiwgIi0iKSA9PSAwKQor CQkJcHJvYmluID0gTlVMTDsKKwl9CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFICV7 b3JfcmVwbGFjZX1zIiwgMSwKKwkJCQkJCSAib3JfcmVwbGFjZSIsIE9ialR5cGVTdHJpbmcsCisJ CQkJCQkgbm9kZS0+cmVwbGFjZSA/ICJPUiBSRVBMQUNFIiA6ICIiKTsKKworCS8qCisJICogVG8g Y29uc3RydWN0IHRoZSBhcmd1bWVudHMgYXJyYXksIGV4dHJhY3QgdGhlIHR5cGUgT0lEcyBmcm9t IHRoZQorCSAqIGZ1bmN0aW9uJ3MgcGdfcHJvYyBlbnRyeS4gIElmIHByb25hcmdzIGVxdWFscyB0 aGUgcGFyYW1ldGVyIGxpc3QKKwkgKiBsZW5ndGgsIHRoZXJlIGFyZSBubyBPVVQgcGFyYW1ldGVy cyBhbmQgdGh1cyB3ZSBjYW4gZXh0cmFjdCB0aGUgdHlwZQorCSAqIE9JRCBmcm9tIHByb2FyZ3R5 cGVzOyBvdGhlcndpc2Ugd2UgbmVlZCB0byBkZWNvZGUgcHJvYWxsYXJndHlwZXMsIHdoaWNoCisJ ICogaXMgYSBiaXQgbW9yZSBpbnZvbHZlZC4KKwkgKi8KKwl0eXBhcnJheSA9IHBhbGxvYyhwYXJh bWNvdW50ICogc2l6ZW9mKE9pZCkpOworCWlmIChwYXJhbWNvdW50ID4gcHJvY0Zvcm0tPnByb25h cmdzKQorCXsKKwkJRGF0dW0JCWFsbHR5cGVzOworCQlEYXR1bQkgICAqdmFsdWVzOworCQlib29s CSAgICpudWxsczsKKwkJaW50CQkJbmVsZW1zOworCisJCWFsbHR5cGVzID0gU3lzQ2FjaGVHZXRB dHRyKFBST0NPSUQsIHByb2NUdXAsCisJCQkJCQkJCSAgIEFudW1fcGdfcHJvY19wcm9hbGxhcmd0 eXBlcywgJmlzbnVsbCk7CisJCWlmIChpc251bGwpCisJCQllbG9nKEVSUk9SLCAibnVsbCBwcm9h bGxhcmd0eXBlcywgbW9yZSBudW1iZXIgb2YgcGFyYW1ldGVycyB0aGFuIGFyZ3MgaW4gZnVuY3Rp b24gd2l0aCBPSUQgJXUiLAorCQkJCSBvYmplY3RJZCk7CisJCWRlY29uc3RydWN0X2FycmF5KERh dHVtR2V0QXJyYXlUeXBlUChhbGx0eXBlcyksCisJCQkJCQkgIE9JRE9JRCwgNCwgJ3QnLCAnaScs CisJCQkJCQkgICZ2YWx1ZXMsICZudWxscywgJm5lbGVtcyk7CisJCWlmIChuZWxlbXMgIT0gcGFy YW1jb3VudCkKKwkJCWVsb2coRVJST1IsICJtaXNtYXRjaGVkIHByb2FsbGFyZ2F0eXBlcyIpOwor CQlmb3IgKGkgPSAwOyBpIDwgcGFyYW1jb3VudDsgaSsrKQorCQkJdHlwYXJyYXlbaV0gPSB2YWx1 ZXNbaV07CisJfQorCWVsc2UKKwl7CisJCWZvciAoaSA9IDA7IGkgPCBwYXJhbWNvdW50OyBpKysp CisJCQl0eXBhcnJheVtpXSA9IHByb2NGb3JtLT5wcm9hcmd0eXBlcy52YWx1ZXNbaV07CisJfQor CisJLyoKKwkgKiBJZiB0aGVyZSBhcmUgYW55IGRlZmF1bHQgZXhwcmVzc2lvbnMsIHdlIHJlYWQg dGhlIGRlcGFyc2VkIGV4cHJlc3Npb24KKwkgKiBhcyBhIGxpc3Qgc28gdGhhdCB3ZSBjYW4gYXR0 YWNoIHRoZW0gdG8gZWFjaCBhcmd1bWVudC4KKwkgKi8KKwl0bXBkYXR1bSA9IFN5c0NhY2hlR2V0 QXR0cihQUk9DT0lELCBwcm9jVHVwLAorCQkJCQkJCSAgIEFudW1fcGdfcHJvY19wcm9hcmdkZWZh dWx0cywgJmlzbnVsbCk7CisJaWYgKCFpc251bGwpCisJeworCQlkZWZhdWx0cyA9IEZ1bmN0aW9u R2V0RGVmYXVsdHMoRGF0dW1HZXRUZXh0UCh0bXBkYXR1bSkpOworCQljdXJkZWYgPSBsaXN0X2hl YWQoZGVmYXVsdHMpOworCX0KKwllbHNlCisJeworCQlkZWZhdWx0cyA9IE5JTDsKKwkJY3VyZGVm ID0gTlVMTDsKKwl9CisKKwkvKgorCSAqIE5vdyBpdGVyYXRlIG92ZXIgZWFjaCBwYXJhbWV0ZXIg aW4gdGhlIHBhcnNlIHRyZWUgdG8gY3JlYXRlIHRoZQorCSAqIHBhcmFtZXRlcnMgYXJyYXkuCisJ ICovCisJcGFyYW1zID0gTklMOworCXR5cG51bSA9IDA7CisJZm9yZWFjaChjZWxsLCBub2RlLT5w YXJhbWV0ZXJzKQorCXsKKwkJRnVuY3Rpb25QYXJhbWV0ZXIgKnBhcmFtID0gKEZ1bmN0aW9uUGFy YW1ldGVyICopIGxmaXJzdChjZWxsKTsKKwkJT2JqVHJlZSAgICAqcGFyYW1fb2JqOworCQlPYmpU cmVlICAgICpkZWZhdWx0dmFsOworCQlPYmpUcmVlICAgICpuYW1lOworCisJCS8qCisJCSAqIEEg UEFSQU1fVEFCTEUgcGFyYW1ldGVyIGluZGljYXRlcyB0aGUgZW5kIG9mIGlucHV0IGFyZ3VtZW50 czsgdGhlCisJCSAqIGZvbGxvd2luZyBwYXJhbWV0ZXJzIGFyZSBwYXJ0IG9mIHRoZSByZXR1cm4g dHlwZS4gIFdlIGlnbm9yZSB0aGVtCisJCSAqIGhlcmUsIGJ1dCBrZWVwIHRyYWNrIG9mIHRoZSBj dXJyZW50IHBvc2l0aW9uIGluIHRoZSBsaXN0IHNvIHRoYXQgd2UKKwkJICogY2FuIGVhc2lseSBw cm9kdWNlIHRoZSByZXR1cm4gdHlwZSBiZWxvdy4KKwkJICovCisJCWlmIChwYXJhbS0+bW9kZSA9 PSBGVU5DX1BBUkFNX1RBQkxFKQorCQl7CisJCQl0YWJsZV9wYXJhbXMgPSBjZWxsOworCQkJYnJl YWs7CisJCX0KKworCQkvKgorCQkgKiBWZXJib3NlIHN5bnRheCBmb3IgcGFyYW1hdGVyOiAle21v ZGV9cyAle25hbWV9cyAle3R5cGV9VAorCQkgKiAle2RlZmF1bHR9cworCQkgKi8KKwkJcGFyYW1f b2JqID0gbmV3X29ianRyZWVfVkEoIiV7bW9kZX1zIiwgMSwKKwkJCQkJCQkJICAibW9kZSIsIE9i alR5cGVTdHJpbmcsCisJCQkJCQkJCSAgcGFyYW0tPm1vZGUgPT0gRlVOQ19QQVJBTV9PVVQgPyAi T1VUIiA6CisJCQkJCQkJCSAgcGFyYW0tPm1vZGUgPT0gRlVOQ19QQVJBTV9JTk9VVCA/ICJJTk9V VCIgOgorCQkJCQkJCQkgIHBhcmFtLT5tb2RlID09IEZVTkNfUEFSQU1fVkFSSUFESUMgPyAiVkFS SUFESUMiIDoKKwkJCQkJCQkJICAiSU4iKTsKKworCQkvKiBPcHRpb25hbCB3aG9sZXNhbGUgc3Vw cHJlc3Npb24gb2YgIm5hbWUiIG9jY3VycyBoZXJlICovCisJCW5hbWUgPSBuZXdfb2JqdHJlZSgi Iik7CisJCWlmIChwYXJhbS0+bmFtZSkKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KG5hbWUsICIl e25hbWV9SSIsICJuYW1lIiwgcGFyYW0tPm5hbWUpOworCQllbHNlCisJCXsKKwkJCWFwcGVuZF9u dWxsX29iamVjdChuYW1lLCAiJXtuYW1lfUkiKTsKKwkJCWFwcGVuZF9ub3RfcHJlc2VudChuYW1l KTsKKwkJfQorCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHBhcmFtX29iaiwgIiV7bmFtZX1zIiwg bmFtZSk7CisKKwkJZGVmYXVsdHZhbCA9IG5ld19vYmp0cmVlKCJERUZBVUxUIik7CisJCWlmIChQ b2ludGVySXNWYWxpZChwYXJhbS0+ZGVmZXhwcikpCisJCXsKKwkJCWNoYXIJICAgKmV4cHI7CisK KwkJCWlmIChjdXJkZWYgPT0gTlVMTCkKKwkJCQllbG9nKEVSUk9SLCAicHJvYXJnZGVmYXVsdHMg bGlzdCB0b28gc2hvcnQiKTsKKwkJCWV4cHIgPSBsZmlyc3QoY3VyZGVmKTsKKworCQkJYXBwZW5k X3N0cmluZ19vYmplY3QoZGVmYXVsdHZhbCwgIiV7dmFsdWV9cyIsICJ2YWx1ZSIsIGV4cHIpOwor CQkJY3VyZGVmID0gbG5leHQoZGVmYXVsdHMsIGN1cmRlZik7CisJCX0KKwkJZWxzZQorCQkJYXBw ZW5kX25vdF9wcmVzZW50KGRlZmF1bHR2YWwpOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHBh cmFtX29iaiwgIiV7dHlwZX1UIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUodHlwYXJy YXlbdHlwbnVtKytdLCAtMSkpOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHBhcmFtX29iaiwg IiV7ZGVmYXVsdH1zIiwgZGVmYXVsdHZhbCk7CisKKwkJcGFyYW1zID0gbGFwcGVuZChwYXJhbXMs IG5ld19vYmplY3Rfb2JqZWN0KHBhcmFtX29iaikpOworCX0KKworCXRtcF9vYmogPSBuZXdfb2Jq dHJlZV9WQSgiJXtpZGVudGl0eX1EIiwgMSwKKwkJCQkJCQkiaWRlbnRpdHkiLCBPYmpUeXBlT2Jq ZWN0LAorCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlv bklkLAorCQkJCQkJCQkJCQkJCQlvYmplY3RJZCkpOworCisJYXBwZW5kX2Zvcm1hdF9zdHJpbmco dG1wX29iaiwgIigiKTsKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcF9vYmosICIle2FyZ3VtZW50 czosIH1zIiwgcGFyYW1zKTsKKwlhcHBlbmRfZm9ybWF0X3N0cmluZyh0bXBfb2JqLCAiKSIpOwor CisJaXNmdW5jdGlvbiA9IChwcm9jRm9ybS0+cHJva2luZCAhPSBQUk9LSU5EX1BST0NFRFVSRSk7 CisKKwlpZiAoaXNmdW5jdGlvbikKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiRlVOQ1RJ T04gJXtzaWduYXR1cmV9cyIsIHRtcF9vYmopOworCWVsc2UKKwkJYXBwZW5kX29iamVjdF9vYmpl Y3QocmV0LCAiUFJPQ0VEVVJFICV7c2lnbmF0dXJlfXMiLCB0bXBfb2JqKTsKKworCS8qCisJICog QSByZXR1cm4gdHlwZSBjYW4gYWRvcHQgb25lIG9mIHR3byBmb3JtczogZWl0aGVyIGEgW1NFVE9G XSBzb21lX3R5cGUsCisJICogb3IgYSBUQUJMRShsaXN0LW9mLXR5cGVzKS4gIFdlIGNhbiB0ZWxs IHRoZSBzZWNvbmQgZm9ybSBiZWNhdXNlIHdlIHNhdworCSAqIGEgdGFibGUgcGFyYW0gYWJvdmUg d2hpbGUgc2Nhbm5pbmcgdGhlIGFyZ3VtZW50IGxpc3QuCisJICovCisJaWYgKHRhYmxlX3BhcmFt cyA9PSBOVUxMKQorCXsKKwkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCIiLCAxLAorCQkJCQkJ CQkicmV0dXJuX2Zvcm0iLCBPYmpUeXBlU3RyaW5nLCAicGxhaW4iKTsKKwkJYXBwZW5kX3N0cmlu Z19vYmplY3QodG1wX29iaiwgIiV7c2V0b2Z9cyIsICJzZXRvZiIsCisJCQkJCQkJIHByb2NGb3Jt LT5wcm9yZXRzZXQgPyAiU0VUT0YiIDogIiIpOworCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBf b2JqLCAiJXtyZXR0eXBlfVQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShwcm9jRm9y bS0+cHJvcmV0dHlwZSwgLTEpKTsKKwl9CisJZWxzZQorCXsKKwkJTGlzdAkgICAqcmV0dHlwZXMg PSBOSUw7CisJCU9ialRyZWUgICAgKnBhcmFtX29iajsKKworCQl0bXBfb2JqID0gbmV3X29ianRy ZWVfVkEoIlRBQkxFIiwgMSwKKwkJCQkJCQkJInJldHVybl9mb3JtIiwgT2JqVHlwZVN0cmluZywg InRhYmxlIik7CisJCWZvciAoOyB0YWJsZV9wYXJhbXMgIT0gTlVMTDsgdGFibGVfcGFyYW1zID0g bG5leHQobm9kZS0+cGFyYW1ldGVycywgdGFibGVfcGFyYW1zKSkKKwkJeworCQkJRnVuY3Rpb25Q YXJhbWV0ZXIgKnBhcmFtID0gbGZpcnN0KHRhYmxlX3BhcmFtcyk7CisKKwkJCXBhcmFtX29iaiA9 IG5ld19vYmp0cmVlX1ZBKCIle25hbWV9SSAle3R5cGV9VCIsIDIsCisJCQkJCQkJCQkgICJuYW1l IiwgT2JqVHlwZVN0cmluZywgcGFyYW0tPm5hbWUsCisJCQkJCQkJCQkgICJ0eXBlIiwgT2JqVHlw ZU9iamVjdCwKKwkJCQkJCQkJCSAgbmV3X29ianRyZWVfZm9yX3R5cGUodHlwYXJyYXlbdHlwbnVt KytdLCAtMSkpOworCQkJcmV0dHlwZXMgPSBsYXBwZW5kKHJldHR5cGVzLCBuZXdfb2JqZWN0X29i amVjdChwYXJhbV9vYmopKTsKKwkJfQorCisJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wX29iaiwg Iigle3JldHR5cGVzOiwgfXMpIiwgcmV0dHlwZXMpOworCX0KKworCWlmIChpc2Z1bmN0aW9uKQor CQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICJSRVRVUk5TICV7cmV0dXJuX3R5cGV9cyIsIHRt cF9vYmopOworCisJLyogVFJBTlNGT1JNIEZPUiBUWVBFICovCisJdG1wX29iaiA9IG5ld19vYmp0 cmVlKCJUUkFOU0ZPUk0iKTsKKworCW50eXBlcyA9IGdldF9mdW5jX3RyZnR5cGVzKHByb2NUdXAs ICZ0cmZ0eXBlcyk7CisJZm9yIChpID0gMDsgaSA8IG50eXBlczsgaSsrKQorCXsKKwkJdG1wX29i aiA9IG5ld19vYmp0cmVlX1ZBKCJGT1IgVFlQRSAle3R5cGV9VCIsIDEsCisJCQkJCQkJCSJ0eXBl IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3R5cGUodHJmdHlwZXNb aV0sIC0xKSk7CisJCXR5cGVzID0gbGFwcGVuZCh0eXBlcywgdG1wX29iaik7CisJfQorCisJaWYg KHR5cGVzKQorCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcF9vYmosICIle2Zvcl90eXBlOiwgfXMi LCB0eXBlcyk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7CisKKwlhcHBl bmRfb2JqZWN0X29iamVjdChyZXQsICIle3RyYW5zZm9ybV90eXBlfXMiLCB0bXBfb2JqKTsKKwor CWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIkxBTkdVQUdFICV7bGFuZ3VhZ2V9SSIsICJsYW5n dWFnZSIsCisJCQkJCQkgTmFtZVN0cihsYW5nRm9ybS0+bGFubmFtZSkpOworCisJaWYgKGlzZnVu Y3Rpb24pCisJeworCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle3dpbmRvd31zIiwgIndp bmRvdyIsCisJCQkJCQkJIHByb2NGb3JtLT5wcm9raW5kID09IFBST0tJTkRfV0lORE9XID8gIldJ TkRPVyIgOiAiIik7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7dm9sYXRpbGl0eX1z IiwgInZvbGF0aWxpdHkiLAorCQkJCQkJCSBwcm9jRm9ybS0+cHJvdm9sYXRpbGUgPT0gUFJPVk9M QVRJTEVfVk9MQVRJTEUgPworCQkJCQkJCSAiVk9MQVRJTEUiIDoKKwkJCQkJCQkgcHJvY0Zvcm0t PnByb3ZvbGF0aWxlID09IFBST1ZPTEFUSUxFX1NUQUJMRSA/CisJCQkJCQkJICJTVEFCTEUiIDog IklNTVVUQUJMRSIpOworCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7cGFyYWxsZWxf c2FmZXR5fXMiLAorCQkJCQkJCSAicGFyYWxsZWxfc2FmZXR5IiwKKwkJCQkJCQkgcHJvY0Zvcm0t PnByb3BhcmFsbGVsID09IFBST1BBUkFMTEVMX1NBRkUgPworCQkJCQkJCSAiUEFSQUxMRUwgU0FG RSIgOgorCQkJCQkJCSBwcm9jRm9ybS0+cHJvcGFyYWxsZWwgPT0gUFJPUEFSQUxMRUxfUkVTVFJJ Q1RFRCA/CisJCQkJCQkJICJQQVJBTExFTCBSRVNUUklDVEVEIiA6ICJQQVJBTExFTCBVTlNBRkUi KTsKKworCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle2xlYWtwcm9vZn1zIiwgImxlYWtw cm9vZiIsCisJCQkJCQkJIHByb2NGb3JtLT5wcm9sZWFrcHJvb2YgPyAiTEVBS1BST09GIiA6ICIi KTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXtzdHJpY3R9cyIsICJzdHJpY3QiLAor CQkJCQkJCSBwcm9jRm9ybS0+cHJvaXNzdHJpY3QgPworCQkJCQkJCSAiUkVUVVJOUyBOVUxMIE9O IE5VTEwgSU5QVVQiIDoKKwkJCQkJCQkgIkNBTExFRCBPTiBOVUxMIElOUFVUIik7CisKKwkJYXBw ZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXtzZWN1cml0eV9kZWZpbmVyfXMiLAorCQkJCQkJCSAi c2VjdXJpdHlfZGVmaW5lciIsCisJCQkJCQkJIHByb2NGb3JtLT5wcm9zZWNkZWYgPworCQkJCQkJ CSAiU0VDVVJJVFkgREVGSU5FUiIgOiAiU0VDVVJJVFkgSU5WT0tFUiIpOworCisJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHJldCwgIiV7Y29zdH1zIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfVkEoIkNP U1QgJXtjb3N0fW4iLCAxLAorCQkJCQkJCQkJCQkiY29zdCIsIE9ialR5cGVGbG9hdCwKKwkJCQkJ CQkJCQkJcHJvY0Zvcm0tPnByb2Nvc3QpKTsKKworCQl0bXBfb2JqID0gbmV3X29ianRyZWUoIlJP V1MiKTsKKwkJaWYgKHByb2NGb3JtLT5wcm9yb3dzID09IDApCisJCQlhcHBlbmRfbm90X3ByZXNl bnQodG1wX29iaik7CisJCWVsc2UKKwkJCWFwcGVuZF9mbG9hdF9vYmplY3QodG1wX29iaiwgIiV7 cm93c31uIiwgcHJvY0Zvcm0tPnByb3Jvd3MpOworCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQs ICIle3Jvd3N9cyIsIHRtcF9vYmopOworCisJCXRtcF9vYmogPSBuZXdfb2JqdHJlZSgiU1VQUE9S VCAle25hbWV9cyIpOworCQlpZiAocHJvY0Zvcm0tPnByb3N1cHBvcnQpCisJCXsKKwkJCU9pZAkJ CWFyZ3R5cGVzW10gPSB7IElOVEVSTkFMT0lEIH07CisKKwkJCS8qCisJCQkgKiBXZSBzaG91bGQg cXVhbGlmeSB0aGUgc3VwcG9ydCBmdW5jdGlvbidzIG5hbWUgaWYgaXQgd291bGRuJ3QgYmUKKwkJ CSAqIHJlc29sdmVkIGJ5IGxvb2t1cCBpbiB0aGUgY3VycmVudCBzZWFyY2ggcGF0aC4KKwkJCSAq LworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wX29iaiwgIiV7bmFtZX1zIiwgIm5hbWUiLAor CQkJCQkJCQkgZ2VuZXJhdGVfZnVuY3Rpb25fbmFtZShwcm9jRm9ybS0+cHJvc3VwcG9ydCwgMSwK KwkJCQkJCQkJCQkJCQkJTklMLCBhcmd0eXBlcywKKwkJCQkJCQkJCQkJCQkJZmFsc2UsIE5VTEws CisJCQkJCQkJCQkJCQkJCUVYUFJfS0lORF9OT05FKSk7CisJCX0KKwkJZWxzZQorCQkJYXBwZW5k X25vdF9wcmVzZW50KHRtcF9vYmopOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7 c3VwcG9ydH1zIiwgdG1wX29iaik7CisJfQorCisJZm9yZWFjaChjZWxsLCBub2RlLT5vcHRpb25z KQorCXsKKwkJRGVmRWxlbSAgICAqZGVmZWwgPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisK KwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInNldCIpID09IDApCisJCXsKKwkJCVZhcmlh YmxlU2V0U3RtdCAqc3N0bXQgPSAoVmFyaWFibGVTZXRTdG10ICopIGRlZmVsLT5hcmc7CisJCQlj aGFyCSAgICp2YWx1ZSA9IEV4dHJhY3RTZXRWYXJpYWJsZUFyZ3Moc3N0bXQpOworCisJCQl0bXBf b2JqID0gZGVwYXJzZV9GdW5jdGlvblNldChzc3RtdC0+a2luZCwgc3N0bXQtPm5hbWUsIHZhbHVl KTsKKwkJCXNldHMgPSBsYXBwZW5kKHNldHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsK KwkJfQorCX0KKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIiV7c2V0X29wdGlvbnM6IH1zIiwg c2V0cyk7CisKKwkvKiBBZGQgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gKi8KKwkodm9pZCkgU3lz Q2FjaGVHZXRBdHRyKFBST0NPSUQsIHByb2NUdXAsIEFudW1fcGdfcHJvY19wcm9zcWxib2R5LCAm aXNudWxsKTsKKwlpZiAocHJvY0Zvcm0tPnByb2xhbmcgPT0gU1FMbGFuZ3VhZ2VJZCAmJiAhaXNu dWxsKQorCXsKKwkJU3RyaW5nSW5mb0RhdGEgYnVmOworCisJCWluaXRTdHJpbmdJbmZvKCZidWYp OworCQlwcmludF9mdW5jdGlvbl9zcWxib2R5KCZidWYsIHByb2NUdXApOworCisJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHJldCwgIiV7ZGVmaW5pdGlvbn1zIiwgImRlZmluaXRpb24iLAorCQkJCQkJ CSBidWYuZGF0YSk7CisJfQorCWVsc2UgaWYgKHByb2JpbiA9PSBOVUxMKQorCQlhcHBlbmRfc3Ry aW5nX29iamVjdChyZXQsICJBUyAle2RlZmluaXRpb259TCIsICJkZWZpbml0aW9uIiwgc291cmNl KTsKKwllbHNlCisJeworCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICJBUyAle29iamZpbGV9 TCIsICJvYmpmaWxlIiwgcHJvYmluKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiLCAl e3N5bWJvbH1MIiwgInN5bWJvbCIsIHNvdXJjZSk7CisJfQorCisJUmVsZWFzZVN5c0NhY2hlKGxh bmdUdXApOworCVJlbGVhc2VTeXNDYWNoZShwcm9jVHVwKTsKKworCXJldHVybiByZXQ7Cit9CisK Ky8qCisgKiBEZXBhcnNlIGEgQ1JFQVRFIE9QRVJBVE9SIENMQVNTIGNvbW1hbmQuCisgKgorICog VmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBPUEVSQVRPUiBDTEFTUyAle2lkZW50aXR5fUQgJXtk ZWZhdWx0fXMgRk9SIFRZUEUgJXt0eXBlfVQgVVNJTkcKKyAqICV7YW1uYW1lfUkgJXtvcGZhbWls eX1zIEFTICV7aXRlbXM6LCB9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0 ZU9wQ2xhc3NTdG10KENvbGxlY3RlZENvbW1hbmQgKmNtZCkKK3sKKwlPaWQJCQlvcGNvaWQgPSBj bWQtPmQuY3JlYXRlb3BjLmFkZHJlc3Mub2JqZWN0SWQ7CisJSGVhcFR1cGxlCW9wY1R1cDsKKwlI ZWFwVHVwbGUJb3BmVHVwOworCUZvcm1fcGdfb3BmYW1pbHkgb3BmRm9ybTsKKwlGb3JtX3BnX29w Y2xhc3Mgb3BjRm9ybTsKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqdG1wX29iajsK KwlMaXN0CSAgICpsaXN0OworCUxpc3RDZWxsICAgKmNlbGw7CisKKwkvKiBEb24ndCBkZXBhcnNl IFNRTCBjb21tYW5kcyBnZW5lcmF0ZWQgd2hpbGUgY3JlYXRpbmcgZXh0ZW5zaW9uICovCisJaWYg KGNtZC0+aW5fZXh0ZW5zaW9uKQorCQlyZXR1cm4gTlVMTDsKKworCW9wY1R1cCA9IFNlYXJjaFN5 c0NhY2hlMShDTEFPSUQsIE9iamVjdElkR2V0RGF0dW0ob3Bjb2lkKSk7CisJaWYgKCFIZWFwVHVw bGVJc1ZhbGlkKG9wY1R1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZv ciBvcGNsYXNzIHdpdGggT0lEICV1Iiwgb3Bjb2lkKTsKKwlvcGNGb3JtID0gKEZvcm1fcGdfb3Bj bGFzcykgR0VUU1RSVUNUKG9wY1R1cCk7CisKKwlvcGZUdXAgPSBTZWFyY2hTeXNDYWNoZTEoT1BG QU1JTFlPSUQsIG9wY0Zvcm0tPm9wY2ZhbWlseSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKG9w ZlR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGVyYXRvciBm YW1pbHkgd2l0aCBPSUQgJXUiLCBvcGNGb3JtLT5vcGNmYW1pbHkpOworCW9wZkZvcm0gPSAoRm9y bV9wZ19vcGZhbWlseSkgR0VUU1RSVUNUKG9wZlR1cCk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9W QSgiQ1JFQVRFIE9QRVJBVE9SIENMQVNTICV7aWRlbnRpdHl9RCAle2RlZmF1bHR9cyBGT1IgVFlQ RSAle3R5cGV9VCBVU0lORyAle2FtbmFtZX1JIiwgNCwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpU eXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShvcGNGb3JtLT5vcGNu YW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIob3BjRm9ybS0+b3BjbmFtZSkpLAorCQkJ CQkJICJkZWZhdWx0IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBvcGNGb3JtLT5vcGNkZWZhdWx0 ID8gIkRFRkFVTFQiIDogIiIsCisJCQkJCQkgInR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl90eXBlKG9wY0Zvcm0tPm9wY2ludHlwZSwgLTEpLAorCQkJCQkJICJh bW5hbWUiLCBPYmpUeXBlU3RyaW5nLCBnZXRfYW1fbmFtZShvcGNGb3JtLT5vcGNtZXRob2QpKTsK KworCS8qCisJICogQWRkIHRoZSBGQU1JTFkgY2xhdXNlLCBidXQgaWYgaXQgaGFzIHRoZSBzYW1l IG5hbWUgYW5kIG5hbWVzcGFjZSBhcyB0aGUKKwkgKiBvcGNsYXNzLCB0aGVuIGhhdmUgaXQgZXhw YW5kIHRvIGVtcHR5IGJlY2F1c2UgaXQgd291bGQgY2F1c2UgYSBmYWlsdXJlCisJICogaWYgdGhl IG9wZmFtaWx5IHdhcyBjcmVhdGVkIGludGVybmFsbHkuCisJICovCisJdG1wX29iaiA9IG5ld19v Ymp0cmVlX1ZBKCJGQU1JTFkgJXtvcGZhbWlseX1EIiwgMSwKKwkJCQkJCQkib3BmYW1pbHkiLCBP YmpUeXBlT2JqZWN0LAorCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShvcGZGb3JtLT5v cGZuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJIE5hbWVTdHIob3BmRm9ybS0+b3BmbmFtZSkpKTsK KworCWlmIChzdHJjbXAoTmFtZVN0cihvcGZGb3JtLT5vcGZuYW1lKSwgTmFtZVN0cihvcGNGb3Jt LT5vcGNuYW1lKSkgPT0gMCAmJgorCQlvcGZGb3JtLT5vcGZuYW1lc3BhY2UgPT0gb3BjRm9ybS0+ b3BjbmFtZXNwYWNlKQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7CisKKwlhcHBlbmRf b2JqZWN0X29iamVjdChyZXQsICIle29wZmFtaWx5fXMiLCB0bXBfb2JqKTsKKworCS8qCisJICog QWRkIHRoZSBpbml0aWFsIGl0ZW0gbGlzdC4gIE5vdGUgd2UgYWx3YXlzIGFkZCB0aGUgU1RPUkFH RSBjbGF1c2UsIGV2ZW4KKwkgKiB3aGVuIGl0IGlzIGltcGxpY2l0IGluIHRoZSBvcmlnaW5hbCBj b21tYW5kLgorCSAqLworCXRtcF9vYmogPSBuZXdfb2JqdHJlZSgiU1RPUkFHRSIpOworCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmosICIle3R5cGV9VCIsCisJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3R5cGUoT2lkSXNWYWxpZChvcGNGb3JtLT5vcGNrZXl0eXBlKSA/CisJCQkJCQkJCQkJCSAg b3BjRm9ybS0+b3Bja2V5dHlwZSA6IG9wY0Zvcm0tPm9wY2ludHlwZSwKKwkJCQkJCQkJCQkJICAt MSkpOworCWxpc3QgPSBsaXN0X21ha2UxKG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwor CS8qIEFkZCB0aGUgZGVjbGFyZWQgb3BlcmF0b3JzICovCisJZm9yZWFjaChjZWxsLCBjbWQtPmQu Y3JlYXRlb3BjLm9wZXJhdG9ycykKKwl7CisJCU9wRmFtaWx5TWVtYmVyICpvcGVyID0gbGZpcnN0 KGNlbGwpOworCisJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiT1BFUkFUT1IgJXtudW19biAl e29wZXJhdG9yfU8oJXtsdHlwZX1ULCAle3J0eXBlfVQpIiwgNCwKKwkJCQkJCQkJIm51bSIsIE9i alR5cGVJbnRlZ2VyLCBvcGVyLT5udW1iZXIsCisJCQkJCQkJCSJvcGVyYXRvciIsIE9ialR5cGVP YmplY3QsCisJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChPcGVyYXRvclJlbGF0 aW9uSWQsCisJCQkJCQkJCQkJCQkJCQlvcGVyLT5vYmplY3QpLAorCQkJCQkJCQkibHR5cGUiLCBP YmpUeXBlT2JqZWN0LAorCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfdHlwZShvcGVyLT5sZWZ0dHlw ZSwgLTEpLAorCQkJCQkJCQkicnR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQluZXdfb2Jq dHJlZV9mb3JfdHlwZShvcGVyLT5yaWdodHR5cGUsIC0xKSk7CisKKwkJLyogQWRkIHRoZSBGT1Ig U0VBUkNIIC8gRk9SIE9SREVSIEJZIGNsYXVzZSAqLworCQlpZiAob3Blci0+c29ydGZhbWlseSA9 PSBJbnZhbGlkT2lkKQorCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wX29iaiwgIiV7cHVycG9z ZX1zIiwgInB1cnBvc2UiLAorCQkJCQkJCQkgIkZPUiBTRUFSQ0giKTsKKwkJZWxzZQorCQl7CisJ CQlPYmpUcmVlICAgICp0bXBfb2JqMjsKKworCQkJdG1wX29iajIgPSBuZXdfb2JqdHJlZSgiRk9S IE9SREVSIEJZICV7b3BmYW1pbHl9RCIpOworCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wX29i ajIsICJvcGZhbWlseSIsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoT3Bl cmF0b3JGYW1pbHlSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJIG9wZXItPnNvcnRmYW1pbHkp KTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmosICIle3B1cnBvc2V9cyIsIHRtcF9v YmoyKTsKKwkJfQorCisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRt cF9vYmopKTsKKwl9CisKKwkvKiBBZGQgdGhlIGRlY2xhcmVkIHN1cHBvcnQgZnVuY3Rpb25zICov CisJZm9yZWFjaChjZWxsLCBjbWQtPmQuY3JlYXRlb3BjLnByb2NlZHVyZXMpCisJeworCQlPcEZh bWlseU1lbWJlciAqcHJvYyA9IGxmaXJzdChjZWxsKTsKKwkJSGVhcFR1cGxlCXByb2NUdXA7CisJ CUZvcm1fcGdfcHJvYyBwcm9jRm9ybTsKKwkJT2lkCQkgICAqcHJvYXJndHlwZXM7CisJCUxpc3QJ ICAgKmFyZ2xpc3QgPSBOSUw7CisJCWludAkJCWk7CisKKwkJcHJvY1R1cCA9IFNlYXJjaFN5c0Nh Y2hlMShQUk9DT0lELCBPYmplY3RJZEdldERhdHVtKHByb2MtPm9iamVjdCkpOworCQlpZiAoIUhl YXBUdXBsZUlzVmFsaWQocHJvY1R1cCkpCisJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZh aWxlZCBmb3IgcHJvY2VkdXJlIHdpdGggT0lEICV1IiwKKwkJCQkgcHJvYy0+b2JqZWN0KTsKKwkJ cHJvY0Zvcm0gPSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1QocHJvY1R1cCk7CisKKwkJdG1wX29i aiA9IG5ld19vYmp0cmVlX1ZBKCJGVU5DVElPTiAle251bX1uICgle2x0eXBlfVQsICV7cnR5cGV9 VCkgJXtmdW5jdGlvbn1EIiwgNCwKKwkJCQkJCQkJIm51bSIsIE9ialR5cGVJbnRlZ2VyLCBwcm9j LT5udW1iZXIsCisJCQkJCQkJCSJsdHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCW5ld19v Ymp0cmVlX2Zvcl90eXBlKHByb2MtPmxlZnR0eXBlLCAtMSksCisJCQkJCQkJCSJydHlwZSIsIE9i alR5cGVPYmplY3QsCisJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl90eXBlKHByb2MtPnJpZ2h0dHlw ZSwgLTEpLAorCQkJCQkJCQkiZnVuY3Rpb24iLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQluZXdf b2JqdHJlZV9mb3JfcXVhbG5hbWUocHJvY0Zvcm0tPnByb25hbWVzcGFjZSwKKwkJCQkJCQkJCQkJ CQkJIE5hbWVTdHIocHJvY0Zvcm0tPnByb25hbWUpKSk7CisKKwkJcHJvYXJndHlwZXMgPSBwcm9j Rm9ybS0+cHJvYXJndHlwZXMudmFsdWVzOworCQlmb3IgKGkgPSAwOyBpIDwgcHJvY0Zvcm0tPnBy b25hcmdzOyBpKyspCisJCXsKKwkJCU9ialRyZWUgICAgKmFyZzsKKworCQkJYXJnID0gbmV3X29i anRyZWVfZm9yX3R5cGUocHJvYXJndHlwZXNbaV0sIC0xKTsKKwkJCWFyZ2xpc3QgPSBsYXBwZW5k KGFyZ2xpc3QsIG5ld19vYmplY3Rfb2JqZWN0KGFyZykpOworCQl9CisKKwkJYXBwZW5kX2Zvcm1h dF9zdHJpbmcodG1wX29iaiwgIigiKTsKKwkJYXBwZW5kX2FycmF5X29iamVjdCh0bXBfb2JqLCAi JXthcmd0eXBlczosIH1UIiwgYXJnbGlzdCk7CisJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRtcF9v YmosICIpIik7CisKKwkJUmVsZWFzZVN5c0NhY2hlKHByb2NUdXApOworCisJCWxpc3QgPSBsYXBw ZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwl9CisKKwlhcHBlbmRfYXJy YXlfb2JqZWN0KHJldCwgIkFTICV7aXRlbXM6LCB9cyIsIGxpc3QpOworCisJUmVsZWFzZVN5c0Nh Y2hlKG9wZlR1cCk7CisJUmVsZWFzZVN5c0NhY2hlKG9wY1R1cCk7CisKKwlyZXR1cm4gcmV0Owor fQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZU9wRmFtaWx5U3RtdCAoQ1JFQVRFIE9QRVJBVE9S IEZBTUlMWSkKKyAqCisgKiBHaXZlbiBhIG9wZXJhdG9yIGZhbWlseSBPSUQgYW5kIHRoZSBwYXJz ZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuCisgKiBPYmpUcmVlIHJlcHJlc2VudGlu ZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRF IE9QRVJBVE9SIEZBTUlMWSAle2lkZW50aXR5fUQgVVNJTkcgJXthbW5hbWV9SQorICovCitzdGF0 aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZU9wRmFtaWx5KE9pZCBvYmplY3RJZCwgTm9kZSAq cGFyc2V0cmVlKQoreworCUhlYXBUdXBsZQlvcGZUdXA7CisJSGVhcFR1cGxlCWFtVHVwOworCUZv cm1fcGdfb3BmYW1pbHkgb3BmRm9ybTsKKwlGb3JtX3BnX2FtCWFtRm9ybTsKKwlPYmpUcmVlICAg ICpyZXQ7CisKKwlvcGZUdXAgPSBTZWFyY2hTeXNDYWNoZTEoT1BGQU1JTFlPSUQsIE9iamVjdElk R2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQob3BmVHVwKSkKKwkJ ZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wZXJhdG9yIGZhbWlseSB3aXRo IE9JRCAldSIsIG9iamVjdElkKTsKKwlvcGZGb3JtID0gKEZvcm1fcGdfb3BmYW1pbHkpIEdFVFNU UlVDVChvcGZUdXApOworCisJYW1UdXAgPSBTZWFyY2hTeXNDYWNoZTEoQU1PSUQsIE9iamVjdElk R2V0RGF0dW0ob3BmRm9ybS0+b3BmbWV0aG9kKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGFt VHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGFjY2VzcyBtZXRo b2Qgd2l0aCBPSUQgJXUiLAorCQkJIG9wZkZvcm0tPm9wZm1ldGhvZCk7CisJYW1Gb3JtID0gKEZv cm1fcGdfYW0pIEdFVFNUUlVDVChhbVR1cCk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JF QVRFIE9QRVJBVE9SIEZBTUlMWSAle2lkZW50aXR5fUQgVVNJTkcgJXthbW5hbWV9SSIsIDIsCisJ CQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWUob3BmRm9ybS0+b3BmbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKG9w ZkZvcm0tPm9wZm5hbWUpKSwKKwkJCQkJCSAiYW1uYW1lIiwgT2JqVHlwZVN0cmluZywgTmFtZVN0 cihhbUZvcm0tPmFtbmFtZSkpOworCisJUmVsZWFzZVN5c0NhY2hlKGFtVHVwKTsKKwlSZWxlYXNl U3lzQ2FjaGUob3BmVHVwKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBBZGQgY29tbW9u IGNsYXVzZXMgdG8gQ3JlYXRlUG9saWN5IG9yIEFsdGVyUG9saWN5IGRlcGFyc2Ugb2JqZWN0cy4K KyAqLworc3RhdGljIHZvaWQKK2FkZF9wb2xpY3lfY2xhdXNlcyhPYmpUcmVlICpyZXQsIE9pZCBw b2xpY3lPaWQsIExpc3QgKnJvbGVzLCBib29sIGRvX3F1YWwsCisJCQkJICAgYm9vbCBkb193aXRo X2NoZWNrKQoreworCVJlbGF0aW9uCXBvbFJlbCA9IHRhYmxlX29wZW4oUG9saWN5UmVsYXRpb25J ZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlIZWFwVHVwbGUJcG9sVHVwID0gZ2V0X2NhdGFsb2dfb2Jq ZWN0X2J5X29pZChwb2xSZWwsIEFudW1fcGdfcG9saWN5X29pZCwgcG9saWN5T2lkKTsKKwlGb3Jt X3BnX3BvbGljeSBwb2xGb3JtOworCisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHBvbFR1cCkpCisJ CWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBwb2xpY3kgd2l0aCBPSUQgJXUi LCBwb2xpY3lPaWQpOworCisJcG9sRm9ybSA9IChGb3JtX3BnX3BvbGljeSkgR0VUU1RSVUNUKHBv bFR1cCk7CisKKwkvKiBBZGQgdGhlICJPTiB0YWJsZSIgY2xhdXNlICovCisJYXBwZW5kX29iamVj dF9vYmplY3QocmV0LCAiT04gJXt0YWJsZX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVh bG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSBwb2xGb3JtLT5wb2xy ZWxpZCkpOworCisJLyoKKwkgKiBBZGQgdGhlICJUTyByb2xlIiBjbGF1c2UsIGlmIGFueS4gIElu IHRoZSBDUkVBVEUgY2FzZSwgaXQgYWx3YXlzCisJICogY29udGFpbnMgYXQgbGVhc3QgUFVCTElD LCBidXQgaW4gdGhlIEFMVEVSIGNhc2UgaXQgbWlnaHQgYmUgZW1wdHkuCisJICovCisJaWYgKHJv bGVzKQorCXsKKwkJTGlzdAkgICAqbGlzdCA9IE5JTDsKKwkJTGlzdENlbGwgICAqY2VsbDsKKwor CQlmb3JlYWNoKGNlbGwsIHJvbGVzKQorCQl7CisJCQlSb2xlU3BlYyAgICpzcGVjID0gKFJvbGVT cGVjICopIGxmaXJzdChjZWxsKTsKKworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwKKwkJCQkJCSAg IG5ld19vYmplY3Rfb2JqZWN0KG5ld19vYmp0cmVlX2Zvcl9yb2xlc3BlYyhzcGVjKSkpOworCQl9 CisJCWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAiVE8gJXtyb2xlOiwgfVIiLCBsaXN0KTsKKwl9 CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQocmV0KTsKKworCS8qIEFkZCB0aGUgVVNJTkcg Y2xhdXNlLCBpZiBhbnkgKi8KKwlpZiAoZG9fcXVhbCkKKwl7CisJCURhdHVtCQlkZXBhcnNlZDsK KwkJRGF0dW0JCXN0b3JlZGV4cHI7CisJCWJvb2wJCWlzbnVsbDsKKworCQlzdG9yZWRleHByID0g aGVhcF9nZXRhdHRyKHBvbFR1cCwgQW51bV9wZ19wb2xpY3lfcG9scXVhbCwKKwkJCQkJCQkJICBS ZWxhdGlvbkdldERlc2NyKHBvbFJlbCksICZpc251bGwpOworCQlpZiAoaXNudWxsKQorCQkJZWxv ZyhFUlJPUiwgIm51bGwgcG9scXVhbCBleHByZXNzaW9uIGluIHBvbGljeSAldSIsIHBvbGljeU9p ZCk7CisJCWRlcGFyc2VkID0gRGlyZWN0RnVuY3Rpb25DYWxsMihwZ19nZXRfZXhwciwgc3RvcmVk ZXhwciwgcG9sRm9ybS0+cG9scmVsaWQpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICJV U0lORyAoJXtleHByZXNzaW9ufXMpIiwgImV4cHJlc3Npb24iLAorCQkJCQkJCSBUZXh0RGF0dW1H ZXRDU3RyaW5nKGRlcGFyc2VkKSk7CisJfQorCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHJl dCk7CisKKwkvKiBBZGQgdGhlIFdJVEggQ0hFQ0sgY2xhdXNlLCBpZiBhbnkgKi8KKwlpZiAoZG9f d2l0aF9jaGVjaykKKwl7CisJCURhdHVtCQlkZXBhcnNlZDsKKwkJRGF0dW0JCXN0b3JlZGV4cHI7 CisJCWJvb2wJCWlzbnVsbDsKKworCQlzdG9yZWRleHByID0gaGVhcF9nZXRhdHRyKHBvbFR1cCwg QW51bV9wZ19wb2xpY3lfcG9sd2l0aGNoZWNrLAorCQkJCQkJCQkgIFJlbGF0aW9uR2V0RGVzY3Io cG9sUmVsKSwgJmlzbnVsbCk7CisJCWlmIChpc251bGwpCisJCQllbG9nKEVSUk9SLCAibnVsbCBw b2x3aXRoY2hlY2sgZXhwcmVzc2lvbiBpbiBwb2xpY3kgJXUiLCBwb2xpY3lPaWQpOworCQlkZXBh cnNlZCA9IERpcmVjdEZ1bmN0aW9uQ2FsbDIocGdfZ2V0X2V4cHIsIHN0b3JlZGV4cHIsIHBvbEZv cm0tPnBvbHJlbGlkKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiV0lUSCBDSEVDSyAo JXtleHByZXNzaW9ufXMpIiwKKwkJCQkJCQkgImV4cHJlc3Npb24iLCBUZXh0RGF0dW1HZXRDU3Ry aW5nKGRlcGFyc2VkKSk7CisJfQorCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHJldCk7CisK KwlyZWxhdGlvbl9jbG9zZShwb2xSZWwsIEFjY2Vzc1NoYXJlTG9jayk7Cit9CisKKy8qCisgKiBE ZXBhcnNlIGEgQ3JlYXRlUG9saWN5U3RtdCAoQ1JFQVRFIFBPTElDWSkKKyAqCisgKiBHaXZlbiBh IHBvbGljeSBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFu IE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqCisgKiBW ZXJib3NlIHN5bnRheAorICogQ1JFQVRFIFBPTElDWSAle2lkZW50aXR5fUkKKyAqLworc3RhdGlj IE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVQb2xpY3lTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAq cGFyc2V0cmVlKQoreworCUNyZWF0ZVBvbGljeVN0bXQgKm5vZGUgPSAoQ3JlYXRlUG9saWN5U3Rt dCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqcmV0OworCisJcmV0ID0gbmV3X29ianRyZWVf VkEoIkNSRUFURSBQT0xJQ1kgJXtpZGVudGl0eX1JIiwgMSwKKwkJCQkJCSAiaWRlbnRpdHkiLCBP YmpUeXBlU3RyaW5nLCBub2RlLT5wb2xpY3lfbmFtZSk7CisKKwkvKiBBZGQgdGhlIHJlc3Qgb2Yg dGhlIHN0dWZmICovCisJYWRkX3BvbGljeV9jbGF1c2VzKHJldCwgb2JqZWN0SWQsIG5vZGUtPnJv bGVzLCBub2RlLT5xdWFsICE9IE5VTEwsCisJCQkJCSAgIG5vZGUtPndpdGhfY2hlY2sgIT0gTlVM TCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIEFsdGVyUG9saWN5U3Rt dCAoQUxURVIgUE9MSUNZKQorICoKKyAqIEdpdmVuIGEgcG9saWN5IE9JRCBhbmQgdGhlIHBhcnNl IHRyZWUgb2YgdGhlIEFMVEVSIFBPTElDWSBjb21tYW5kLCByZXR1cm4KKyAqIGFuIE9ialRyZWUg cmVwcmVzZW50aW5nIHRoZSBhbHRlciBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4Cisg KiBBTFRFUiBQT0xJQ1kgJXtpZGVudGl0eX1JCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFy c2VfQWx0ZXJQb2xpY3lTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUFs dGVyUG9saWN5U3RtdCAqbm9kZSA9IChBbHRlclBvbGljeVN0bXQgKikgcGFyc2V0cmVlOworCU9i alRyZWUgICAgKnJldDsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBQT0xJQ1kgJXtp ZGVudGl0eX1JIiwgMSwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5w b2xpY3lfbmFtZSk7CisKKwkvKiBBZGQgdGhlIHJlc3Qgb2YgdGhlIHN0dWZmICovCisJYWRkX3Bv bGljeV9jbGF1c2VzKHJldCwgb2JqZWN0SWQsIG5vZGUtPnJvbGVzLCBub2RlLT5xdWFsICE9IE5V TEwsCisJCQkJCSAgIG5vZGUtPndpdGhfY2hlY2sgIT0gTlVMTCk7CisKKwlyZXR1cm4gcmV0Owor fQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZVNjaGVtYVN0bXQuCisgKgorICogR2l2ZW4gYSBz Y2hlbWEgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBP YmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICogVmVy Ym9zZSBzeW50YXgKKyAqIENSRUFURSBTQ0hFTUEgJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1lfUkg JXthdXRob3JpemF0aW9ufXMKKyovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVNj aGVtYVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlU2NoZW1h U3RtdCAqbm9kZSA9IChDcmVhdGVTY2hlbWFTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAg ICpyZXQ7CisJT2JqVHJlZSAgICAqYXV0aDsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVB VEUgU0NIRU1BICV7aWZfbm90X2V4aXN0c31zICV7bmFtZX1JIiwgMiwKKwkJCQkJCSAiaWZfbm90 X2V4aXN0cyIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgbm9kZS0+aWZfbm90X2V4aXN0cyA/ICJJ RiBOT1QgRVhJU1RTIiA6ICIiLAorCQkJCQkJICJuYW1lIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJ CSBub2RlLT5zY2hlbWFuYW1lID8gbm9kZS0+c2NoZW1hbmFtZSA6ICIiKTsKKworCWF1dGggPSBu ZXdfb2JqdHJlZSgiQVVUSE9SSVpBVElPTiIpOworCWlmIChub2RlLT5hdXRocm9sZSkKKwkJYXBw ZW5kX3N0cmluZ19vYmplY3QoYXV0aCwgIiV7YXV0aG9yaXphdGlvbl9yb2xlfUkiLAorCQkJCQkJ CSAiYXV0aG9yaXphdGlvbl9yb2xlIiwKKwkJCQkJCQkgZ2V0X3JvbGVzcGVjX25hbWUobm9kZS0+ YXV0aHJvbGUpKTsKKwllbHNlCisJeworCQlhcHBlbmRfbnVsbF9vYmplY3QoYXV0aCwgIiV7YXV0 aG9yaXphdGlvbl9yb2xlfUkiKTsKKwkJYXBwZW5kX25vdF9wcmVzZW50KGF1dGgpOworCX0KKwlh cHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2F1dGhvcml6YXRpb259cyIsIGF1dGgpOworCisJ cmV0dXJuIHJldDsKK30KKworLyoKKyAqIFJldHVybiB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBhIGRv bWFpbi4KKyAqLworc3RhdGljIGNoYXIgKgorRG9tYWluR2V0RGVmYXVsdChIZWFwVHVwbGUgZG9t VHVwLCBib29sIG1pc3Npbmdfb2spCit7CisJRGF0dW0JCWRlZjsKKwlOb2RlCSAgICpkZWZ2YWw7 CisJY2hhcgkgICAqZGVmc3RyOworCWJvb2wJCWlzbnVsbDsKKworCWRlZiA9IFN5c0NhY2hlR2V0 QXR0cihUWVBFT0lELCBkb21UdXAsIEFudW1fcGdfdHlwZV90eXBkZWZhdWx0YmluLAorCQkJCQkJ ICAmaXNudWxsKTsKKwlpZiAoaXNudWxsKQorCXsKKwkJaWYgKCFtaXNzaW5nX29rKQorCQkJZWxv ZyhFUlJPUiwgImRvbWFpbiBcIiVzXCIgZG9lcyBub3QgaGF2ZSBhIGRlZmF1bHQgdmFsdWUiLAor CQkJCU5hbWVTdHIoKChGb3JtX3BnX3R5cGUpIEdFVFNUUlVDVChkb21UdXApKS0+dHlwbmFtZSkp OworCQllbHNlCisJCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlkZWZ2YWwgPSBzdHJpbmdUb05vZGUo VGV4dERhdHVtR2V0Q1N0cmluZyhkZWYpKTsKKwlkZWZzdHIgPSBkZXBhcnNlX2V4cHJlc3Npb24o ZGVmdmFsLCBOVUxMIC8qIGRwY29udGV4dD8gKi8gLAorCQkJCQkJCQlmYWxzZSwgZmFsc2UpOwor CisJcmV0dXJuIGRlZnN0cjsKK30KKworLyoKKyAqIERlcGFyc2UgYSBBbHRlckRvbWFpblN0bXQu CisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIEFMVEVSIERPTUFJTiAle2lkZW50aXR5fUQgRFJP UCBERUZBVUxUCisgKiBPUgorICogQUxURVIgRE9NQUlOICV7aWRlbnRpdHl9RCBTRVQgREVGQVVM VCAle2RlZmF1bHR9cworICogT1IKKyAqIEFMVEVSIERPTUFJTiAle2lkZW50aXR5fUQgRFJPUCBO T1QgTlVMTAorICogT1IKKyAqIEFMVEVSIERPTUFJTiAle2lkZW50aXR5fUQgU0VUIE5PVCBOVUxM CisgKiBPUgorICogQUxURVIgRE9NQUlOICV7aWRlbnRpdHl9RCBBREQgQ09OU1RSQUlOVCAle2Nv bnN0cmFpbnRfbmFtZX1zICV7ZGVmaW5pdGlvbn1zCisgKiBPUgorICogQUxURVIgRE9NQUlOICV7 aWRlbnRpdHl9RCBEUk9QIENPTlNUUkFJTlQgSUYgRVhJU1RTICV7Y29uc3RyYWludF9uYW1lfXMg JXtjYXNjYWRlfXMKKyAqIE9SCisgKiBBTFRFUiBET01BSU4gJXtpZGVudGl0eX1EIFZBTElEQVRF IENPTlNUUkFJTlQgJXtjb25zdHJhaW50X25hbWV9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitk ZXBhcnNlX0FsdGVyRG9tYWluU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSwKKwkJ CQkJCU9iamVjdEFkZHJlc3MgY29uc3RyYWludEFkZHIpCit7CisJQWx0ZXJEb21haW5TdG10ICpu b2RlID0gKEFsdGVyRG9tYWluU3RtdCAqKSBwYXJzZXRyZWU7CisJSGVhcFR1cGxlCWRvbVR1cDsK KwlGb3JtX3BnX3R5cGUgZG9tRm9ybTsKKwlPYmpUcmVlICAgICpyZXQ7CisKKwlkb21UdXAgPSBT ZWFyY2hTeXNDYWNoZTEoVFlQRU9JRCwgb2JqZWN0SWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxp ZChkb21UdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgZG9tYWlu IHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCWRvbUZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRT VFJVQ1QoZG9tVHVwKTsKKworCXN3aXRjaCAobm9kZS0+c3VidHlwZSkKKwl7CisJCWNhc2UgJ1Qn OgorCQkJLyogU0VUIERFRkFVTFQgLyBEUk9QIERFRkFVTFQgKi8KKwkJCWlmIChub2RlLT5kZWYg PT0gTlVMTCkKKwkJCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgRE9NQUlOICV7aWRlbnRp dHl9RCBEUk9QIERFRkFVTFQiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywg ImRyb3AgZGVmYXVsdCIsCisJCQkJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJ CQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoZG9tRm9ybS0+dHlwbmFtZXNwYWNlLAor CQkJCQkJCQkJCQkJCQkJICBOYW1lU3RyKGRvbUZvcm0tPnR5cG5hbWUpKSk7CisJCQllbHNlCisJ CQkJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIERPTUFJTiAle2lkZW50aXR5fUQgU0VUIERF RkFVTFQgJXtkZWZhdWx0fXMiLCAzLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywg InNldCBkZWZhdWx0IiwKKwkJCQkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJ CQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShkb21Gb3JtLT50eXBuYW1lc3BhY2UsCisJ CQkJCQkJCQkJCQkJCQkgIE5hbWVTdHIoZG9tRm9ybS0+dHlwbmFtZSkpLAorCQkJCQkJCQkJICJk ZWZhdWx0IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCSBEb21haW5HZXREZWZhdWx0KGRvbVR1 cCwgZmFsc2UpKTsKKwkJCWJyZWFrOworCQljYXNlICdOJzoKKwkJCS8qIERST1AgTk9UIE5VTEwg Ki8KKwkJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBET01BSU4gJXtpZGVudGl0eX1EIERS T1AgTk9UIE5VTEwiLCAyLAorCQkJCQkJCQkJICAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkcm9w IG5vdCBudWxsIiwKKwkJCQkJCQkJCSAgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJ CQkJCSAgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGRvbUZvcm0tPnR5cG5hbWVzcGFjZSwKKwkJ CQkJCQkJCQkJCQkJCSAgIE5hbWVTdHIoZG9tRm9ybS0+dHlwbmFtZSkpKTsKKwkJCWJyZWFrOwor CQljYXNlICdPJzoKKwkJCS8qIFNFVCBOT1QgTlVMTCAqLworCQkJcmV0ID0gbmV3X29ianRyZWVf VkEoIkFMVEVSIERPTUFJTiAle2lkZW50aXR5fUQgU0VUIE5PVCBOVUxMIiwgMiwKKwkJCQkJCQkJ ICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBub3QgbnVsbCIsCisJCQkJCQkJCSAiaWRlbnRp dHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGRv bUZvcm0tPnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJICBOYW1lU3RyKGRvbUZvcm0tPnR5 cG5hbWUpKSk7CisJCQlicmVhazsKKwkJY2FzZSAnQyc6CisJCQkvKgorCQkJICogQUREIENPTlNU UkFJTlQuICBPbmx5IENIRUNLIGNvbnN0cmFpbnRzIGFyZSBzdXBwb3J0ZWQgYnkKKwkJCSAqIGRv bWFpbnMKKwkJCSAqLworCQkJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIERPTUFJTiAle2lk ZW50aXR5fUQgQUREIENPTlNUUkFJTlQgJXtjb25zdHJhaW50X25hbWV9cyAle2RlZmluaXRpb259 cyIsIDQsCisJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJhZGQgY29uc3RyYWludCIs CisJCQkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkgbmV3X29ianRy ZWVfZm9yX3F1YWxuYW1lKGRvbUZvcm0tPnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJICBO YW1lU3RyKGRvbUZvcm0tPnR5cG5hbWUpKSwKKwkJCQkJCQkJICJjb25zdHJhaW50X25hbWUiLCBP YmpUeXBlU3RyaW5nLAorCQkJCQkJCQkgZ2V0X2NvbnN0cmFpbnRfbmFtZShjb25zdHJhaW50QWRk ci5vYmplY3RJZCksCisJCQkJCQkJCSAiZGVmaW5pdGlvbiIsIE9ialR5cGVTdHJpbmcsCisJCQkJ CQkJCSBwZ19nZXRfY29uc3RyYWludGRlZl9jb21tYW5kX3NpbXBsZShjb25zdHJhaW50QWRkci5v YmplY3RJZCkpOworCQkJYnJlYWs7CisJCWNhc2UgJ1YnOgorCQkJLyogVkFMSURBVEUgQ09OU1RS QUlOVCAqLworCQkJLyoKKwkJCSAqIFByb2Nlc3Mgc3VidHlwZT1zcGVjaWZpYyBvcHRpb25zLiBW YWxpZGF0aW9uIGEgY29uc3RyYWludAorCQkJICogcmVxdWlyZXMgaXRzIG5hbWUuCisJCQkgKi8K KwkJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBET01BSU4gJXtpZGVudGl0eX1EIFZBTElE QVRFIENPTlNUUkFJTlQgJXtjb25zdHJhaW50X25hbWV9cyIsIDMsCisJCQkJCQkJCSAidHlwZSIs IE9ialR5cGVTdHJpbmcsICJ2YWxpZGF0ZSBjb25zdHJhaW50IiwKKwkJCQkJCQkJICJpZGVudGl0 eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoZG9t Rm9ybS0+dHlwbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkgIE5hbWVTdHIoZG9tRm9ybS0+dHlw bmFtZSkpLAorCQkJCQkJCQkgImNvbnN0cmFpbnRfbmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUt Pm5hbWUpOworCQkJYnJlYWs7CisJCWNhc2UgJ1gnOgorCQkJeworCQkJCU9ialRyZWUgICAgKnRt cF9vYmo7CisKKwkJCQkvKiBEUk9QIENPTlNUUkFJTlQgKi8KKwkJCQlyZXQgPSBuZXdfb2JqdHJl ZV9WQSgiQUxURVIgRE9NQUlOICV7aWRlbnRpdHl9RCBEUk9QIENPTlNUUkFJTlQgSUYgRVhJU1RT ICV7Y29uc3RyYWludF9uYW1lfXMiLCAzLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmlu ZywgImRyb3AgY29uc3RyYWludCIsCisJCQkJCQkJCQkJImlkZW50aXR5IiwgT2JqVHlwZU9iamVj dCwKKwkJCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoZG9tRm9ybS0+dHlwbmFtZXNw YWNlLAorCQkJCQkJCQkJCQkJCQkJCU5hbWVTdHIoZG9tRm9ybS0+dHlwbmFtZSkpLAorCQkJCQkJ CQkJCSJjb25zdHJhaW50X25hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5uYW1lKTsKKworCQkJ CXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiQ0FTQ0FERSIsIDEsCisJCQkJCQkJCQkJInByZXNl bnQiLCBPYmpUeXBlQm9vbCwgbm9kZS0+YmVoYXZpb3IgPT0gRFJPUF9DQVNDQURFKTsKKworCQkJ CWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7Y2FzY2FkZX1zIiwgdG1wX29iaik7CisJCQl9 CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIHN1YnR5cGUg JWMiLCBub2RlLT5zdWJ0eXBlKTsKKwl9CisKKwkvKiBEb25lICovCisJUmVsZWFzZVN5c0NhY2hl KGRvbVR1cCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZVN0 YXRzU3RtdC4KKyAqCisgKiBHaXZlbiBhIHN0YXRpc3RpY3MgT0lEIGFuZCB0aGUgcGFyc2UgdHJl ZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhl IGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBTVEFU SVNUSUNTICV7aWZfbm90X2V4aXN0c31zICV7aWRlbnRpdHl9RCBPTiAle2V4cHI6LCB9cyBGUk9N ICV7c3RhdF90YWJsZV9pZGVudGl0eX1ECisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2Vf Q3JlYXRlU3RhdGlzdGljc1N0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJ Q3JlYXRlU3RhdHNTdG10ICpub2RlID0gKENyZWF0ZVN0YXRzU3RtdCAqKSBwYXJzZXRyZWU7CisJ Rm9ybV9wZ19zdGF0aXN0aWNfZXh0IHN0YXRmb3JtOworCU9ialRyZWUgICAgKnJldDsKKwlIZWFw VHVwbGUJdHVwOworCURhdHVtCQlkYXR1bTsKKwlib29sCQlpc251bGw7CisJTGlzdAkgICAqc3Rh dGV4cHJzID0gTklMOworCisJdHVwID0gU2VhcmNoU3lzQ2FjaGUxKFNUQVRFWFRPSUQsIE9iamVj dElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHVwKSkKKwkJ ZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHN0YXRpc3RpYyB3aXRoIE9JRCAl dSIsIG9iamVjdElkKTsKKworCXN0YXRmb3JtID0gKEZvcm1fcGdfc3RhdGlzdGljX2V4dCkgR0VU U1RSVUNUKHR1cCk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIFNUQVRJU1RJQ1Mg JXtpZl9ub3RfZXhpc3RzfXMgJXtpZGVudGl0eX1EIiwgMiwKKwkJCQkJCSAiaWZfbm90X2V4aXN0 cyIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgbm9kZS0+aWZfbm90X2V4aXN0cyA/ICJJRiBOT1Qg RVhJU1RTIiA6ICIiLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkg bmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHN0YXRmb3JtLT5zdHhuYW1lc3BhY2UsCisJCQkJCQkJ CQkJCQkgIE5hbWVTdHIoc3RhdGZvcm0tPnN0eG5hbWUpKSk7CisKKwlkYXR1bSA9IFN5c0NhY2hl R2V0QXR0cihTVEFURVhUT0lELCB0dXAsIEFudW1fcGdfc3RhdGlzdGljX2V4dF9zdHhleHBycywK KwkJCQkJCQkmaXNudWxsKTsKKwlpZiAoIWlzbnVsbCkKKwl7CisJCUxpc3RDZWxsICAgKmxjOwor CQlSZWxhdGlvbglzdGF0c3JlbDsKKwkJTGlzdAkgICAqY29udGV4dDsKKwkJTGlzdAkgICAqZXhw cnMgPSBOSUw7CisJCWNoYXIJICAgKmV4cHJzU3RyaW5nOworCisJCXN0YXRzcmVsID0gcmVsYXRp b25fb3BlbihzdGF0Zm9ybS0+c3R4cmVsaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCWNvbnRleHQg PSBkZXBhcnNlX2NvbnRleHRfZm9yKFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHN0YXRzcmVsKSwK KwkJCQkJCQkJCSAgUmVsYXRpb25HZXRSZWxpZChzdGF0c3JlbCkpOworCisJCWV4cHJzU3RyaW5n ID0gVGV4dERhdHVtR2V0Q1N0cmluZyhkYXR1bSk7CisJCWV4cHJzID0gKExpc3QgKikgc3RyaW5n VG9Ob2RlKGV4cHJzU3RyaW5nKTsKKworCQlmb3JlYWNoKGxjLCBleHBycykKKwkJeworCQkJTm9k ZQkgICAqZXhwciA9IChOb2RlICopIGxmaXJzdChsYyk7CisJCQljaGFyCSAgICpzdGF0ZXhwcjsK KworCQkJc3RhdGV4cHIgPSBkZXBhcnNlX2V4cHJlc3Npb24oZXhwciwgY29udGV4dCwgZmFsc2Us IGZhbHNlKTsKKwkJCXN0YXRleHBycyA9IGxhcHBlbmQoc3RhdGV4cHJzLCBuZXdfc3RyaW5nX29i amVjdChzdGF0ZXhwcikpOworCQl9CisKKwkJYXBwZW5kX2FycmF5X29iamVjdChyZXQsICJPTiAl e2V4cHI6LCB9cyIsIHN0YXRleHBycyk7CisJCXBmcmVlKGV4cHJzU3RyaW5nKTsKKwkJcmVsYXRp b25fY2xvc2Uoc3RhdHNyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisJfQorCisJZGF0dW0gPSBTeXND YWNoZUdldEF0dHIoU1RBVEVYVE9JRCwgdHVwLCBBbnVtX3BnX3N0YXRpc3RpY19leHRfc3R4a2V5 cywKKwkJCQkJCQkmaXNudWxsKTsKKwlpZiAoIWlzbnVsbCkKKwl7CisJCWludAkJCWtleW5vOwor CQljaGFyCSAgICphdHRuYW1lOworCQlMaXN0CSAgICpzdGF0Y29scyA9IE5JTDsKKwkJaW50MnZl Y3RvciAqaW5kb3B0aW9uOworCisJCWluZG9wdGlvbiA9IChpbnQydmVjdG9yICopIERhdHVtR2V0 UG9pbnRlcihkYXR1bSk7CisKKwkJZm9yIChrZXlubyA9IDA7IGtleW5vIDwgaW5kb3B0aW9uLT5k aW0xOyBrZXlubysrKQorCQl7CisJCQlhdHRuYW1lID0gZ2V0X2F0dG5hbWUoc3RhdGZvcm0tPnN0 eHJlbGlkLCBpbmRvcHRpb24tPnZhbHVlc1trZXlub10sCisJCQkJCQkJCSAgZmFsc2UpOworCQkJ c3RhdGNvbHMgPSBsYXBwZW5kKHN0YXRjb2xzLCBuZXdfc3RyaW5nX29iamVjdChhdHRuYW1lKSk7 CisJCX0KKworCQlpZiAoaW5kb3B0aW9uLT5kaW0xKQorCQl7CisJCQkvKiBBcHBlbmQgYSAnLCcg aWYgc3RhdGV4cHJzIGlzIHByZXNlbnQgZWxzZSBhcHBlbmQgJ09OJyAqLworCQkJYXBwZW5kX3N0 cmluZ19vYmplY3QocmV0LCAiJXtjb21tYX1zIiwgImNvbW1hIiwKKwkJCQkJCQkJIHN0YXRleHBy cyA/ICIsIiA6ICJPTiIpOworCQkJYXBwZW5kX2FycmF5X29iamVjdChyZXQsICIle2NvbHM6LCB9 cyIsIHN0YXRjb2xzKTsKKwkJfQorCX0KKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIkZS T00gJXtzdGF0X3RhYmxlX2lkZW50aXR5fUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFs bmFtZShnZXRfcmVsX25hbWVzcGFjZShzdGF0Zm9ybS0+c3R4cmVsaWQpLAorCQkJCQkJCQkJCQkJ ICBnZXRfcmVsX25hbWUoc3RhdGZvcm0tPnN0eHJlbGlkKSkpOworCisJUmVsZWFzZVN5c0NhY2hl KHR1cCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhbiBDcmVhdGVGb3Jl aWduU2VydmVyU3RtdCAoQ1JFQVRFIFNFUlZFUikKKyAqCisgKiBHaXZlbiBhIHNlcnZlciBPSUQg YW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAq IHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAor ICogQ1JFQVRFIFNFUlZFUiAle2lkZW50aXR5fUkgJXt0eXBlfXMgJXt2ZXJzaW9ufXMgRk9SRUlH TiBEQVRBIFdSQVBQRVIgJXtmZHd9SQorICogJXtnZW5lcmljX29wdGlvbnN9cworICovCitzdGF0 aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZUZvcmVpZ25TZXJ2ZXJTdG10KE9pZCBvYmplY3RJ ZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZUZvcmVpZ25TZXJ2ZXJTdG10ICpub2RlID0g KENyZWF0ZUZvcmVpZ25TZXJ2ZXJTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICpyZXQ7 CisJT2JqVHJlZSAgICAqdG1wOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBTRVJW RVIgJXtpZGVudGl0eX1JIiwgMSwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBu b2RlLT5zZXJ2ZXJuYW1lKTsKKworCS8qIEFkZCBhIFRZUEUgY2xhdXNlLCBpZiBhbnkgKi8KKwl0 bXAgPSBuZXdfb2JqdHJlZSgiVFlQRSIpOworCWlmIChub2RlLT5zZXJ2ZXJ0eXBlKQorCQlhcHBl bmRfc3RyaW5nX29iamVjdCh0bXAsICIle3R5cGV9TCIsICJ0eXBlIiwgbm9kZS0+c2VydmVydHlw ZSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwlhcHBlbmRfb2JqZWN0X29i amVjdChyZXQsICIle3R5cGV9cyIsIHRtcCk7CisKKwkvKiBBZGQgYSBWRVJTSU9OIGNsYXVzZSwg aWYgYW55ICovCisJdG1wID0gbmV3X29ianRyZWUoIlZFUlNJT04iKTsKKwlpZiAobm9kZS0+dmVy c2lvbikKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXt2ZXJzaW9ufUwiLCAidmVyc2lv biIsIG5vZGUtPnZlcnNpb24pOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcCk7CisJ YXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXt2ZXJzaW9ufXMiLCB0bXApOworCisJYXBwZW5k X3N0cmluZ19vYmplY3QocmV0LCAiRk9SRUlHTiBEQVRBIFdSQVBQRVIgJXtmZHd9SSIsICJmZHci LAorCQkJCQkJIG5vZGUtPmZkd25hbWUpOworCisJLyogQWRkIGFuIE9QVElPTlMgY2xhdXNlLCBp ZiBhbnkgKi8KKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2dlbmVyaWNfb3B0aW9uc31z IiwKKwkJCQkJCSBkZXBhcnNlX0Zkd09wdGlvbnMobm9kZS0+b3B0aW9ucywgTlVMTCkpOworCisJ cmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJGb3JlaWduU2VydmVyU3Rt dCAoQUxURVIgU0VSVkVSKQorICoKKyAqIEdpdmVuIGEgc2VydmVyIE9JRCBhbmQgdGhlIHBhcnNl IHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5n IHRoZSBhbHRlciBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTFRFUiBTRVJW RVIgJXtpZGVudGl0eX1JICV7dmVyc2lvbn1zICV7Z2VuZXJpY19vcHRpb25zfXMKKyAqLworc3Rh dGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlckZvcmVpZ25TZXJ2ZXJTdG10KE9pZCBvYmplY3RJ ZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUFsdGVyRm9yZWlnblNlcnZlclN0bXQgKm5vZGUgPSAo QWx0ZXJGb3JlaWduU2VydmVyU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqdG1wOwor CisJLyogQWRkIGEgVkVSU0lPTiBjbGF1c2UsIGlmIGFueSAqLworCXRtcCA9IG5ld19vYmp0cmVl KCJWRVJTSU9OIik7CisJaWYgKG5vZGUtPmhhc192ZXJzaW9uICYmIG5vZGUtPnZlcnNpb24pCisJ CWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7dmVyc2lvbn1MIiwgInZlcnNpb24iLCBub2Rl LT52ZXJzaW9uKTsKKwllbHNlIGlmIChub2RlLT5oYXNfdmVyc2lvbikKKwkJYXBwZW5kX3N0cmlu Z19vYmplY3QodG1wLCAidmVyc2lvbiIsICJ2ZXJzaW9uIiwgIk5VTEwiKTsKKwllbHNlCisJCWFw cGVuZF9ub3RfcHJlc2VudCh0bXApOworCisJcmV0dXJuIG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBT RVJWRVIgJXtpZGVudGl0eX1JICV7dmVyc2lvbn1zICV7Z2VuZXJpY19vcHRpb25zfXMiLCAzLAor CQkJCQkJICAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5zZXJ2ZXJuYW1lLAorCQkJ CQkJICAidmVyc2lvbiIsIE9ialR5cGVPYmplY3QsIHRtcCwKKwkJCQkJCSAgImdlbmVyaWNfb3B0 aW9ucyIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgIGRlcGFyc2VfRmR3T3B0aW9ucyhub2RlLT5v cHRpb25zLCBOVUxMKSk7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlUExhbmdTdG10Lgor ICoKKyAqIEdpdmVuIGEgbGFuZ3VhZ2UgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0 ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNv bW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSAle29yX3JlcGxhY2V9cyAl e3RydXN0ZWR9cyBMQU5HVUFHRSAle2lkZW50aXR5fXMgSEFORExFUiAle2hhbmRsZXJ9RAorICog JXtpbmxpbmV9cyAle3ZhbGlkYXRvcn1zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2Vf Q3JlYXRlTGFuZ1N0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRl UExhbmdTdG10ICpub2RlID0gKENyZWF0ZVBMYW5nU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJl ZSAgICAqcmV0OworCU9ialRyZWUgICAgKnRtcDsKKwlIZWFwVHVwbGUJbGFuZ1R1cDsKKwlGb3Jt X3BnX2xhbmd1YWdlIGxhbmdGb3JtOworCisJbGFuZ1R1cCA9IFNlYXJjaFN5c0NhY2hlMShMQU5H T0lELAorCQkJCQkJCSAgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1 cGxlSXNWYWxpZChsYW5nVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQg Zm9yIGxhbmd1YWdlIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCWxhbmdGb3JtID0gKEZvcm1f cGdfbGFuZ3VhZ2UpIEdFVFNUUlVDVChsYW5nVHVwKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZB KCJDUkVBVEUgJXtvcl9yZXBsYWNlfXMgJXt0cnVzdGVkfXMgTEFOR1VBR0UgJXtpZGVudGl0eX1z IiwgMywKKwkJCQkJCSAib3JfcmVwbGFjZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgbm9kZS0+ cmVwbGFjZSA/ICJPUiBSRVBMQUNFIiA6ICIiLAorCQkJCQkJICJ0cnVzdGVkIiwgT2JqVHlwZVN0 cmluZywKKwkJCQkJCSBsYW5nRm9ybS0+bGFucGx0cnVzdGVkID8gIlRSVVNURUQiIDogIiIsCisJ CQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywgbm9kZS0+cGxuYW1lKTsKKworCWlmIChu b2RlLT5wbGhhbmRsZXIgIT0gTklMKQorCXsKKwkJLyogQWRkIHRoZSBIQU5ETEVSIGNsYXVzZSAq LworCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICJIQU5ETEVSICV7aGFuZGxlcn1EIiwKKwkJ CQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJ CQkJCQkJCQkJCQkJCSBsYW5nRm9ybS0+bGFucGxjYWxsZm9pZCkpOworCisJCS8qIEFkZCB0aGUg SU5MSU5FIGNsYXVzZSwgaWYgYW55ICovCisJCXRtcCA9IG5ld19vYmp0cmVlKCJJTkxJTkUiKTsK KwkJaWYgKE9pZElzVmFsaWQobGFuZ0Zvcm0tPmxhbmlubGluZSkpCisJCXsKKwkJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHRtcCwgIiV7aGFuZGxlcl9uYW1lfUQiLAorCQkJCQkJCQkgbmV3X29ianRy ZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkg bGFuZ0Zvcm0tPmxhbmlubGluZSkpOworCQl9CisJCWVsc2UKKwkJCWFwcGVuZF9ub3RfcHJlc2Vu dCh0bXApOworCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2lubGluZX1zIiwgdG1wKTsK KworCQkvKiBBZGQgdGhlIFZBTElEQVRPUiBjbGF1c2UsIGlmIGFueSAqLworCQl0bXAgPSBuZXdf b2JqdHJlZSgiVkFMSURBVE9SIik7CisJCWlmIChPaWRJc1ZhbGlkKGxhbmdGb3JtLT5sYW52YWxp ZGF0b3IpKQorCQl7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle2hhbmRsZXJfbmFt ZX1EIiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxh dGlvbklkLAorCQkJCQkJCQkJCQkJCQkJIGxhbmdGb3JtLT5sYW52YWxpZGF0b3IpKTsKKwkJfQor CQllbHNlCisJCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwkJYXBwZW5kX29iamVjdF9vYmpl Y3QocmV0LCAiJXt2YWxpZGF0b3J9cyIsIHRtcCk7CisJfQorCisJUmVsZWFzZVN5c0NhY2hlKGxh bmdUdXApOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDcmVhdGVGb3Jl aWduVGFibGVTdG10IChDUkVBVEUgRk9SRUlHTiBUQUJMRSkuCisgKgorICogR2l2ZW4gYSB0YWJs ZSBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRy ZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqCisgKiBDUkVBVEUg Rk9SRUlHTiBUQUJMRSAle2lmX25vdF9leGlzdHN9cyAle2lkZW50aXR5fUQKKyAqIFsoJXt0YWJs ZV9lbGVtZW50czosIH1zKSAle2luaGVyaXRzfXMKKyAqICB8IFBBUlRJVElPTiBPRiAle3BhcmVu dF9pZGVudGl0eX1EICgle3R5cGVkX3RhYmxlX2VsZW1lbnRzOiwgfXMpICV7cGFydGl0aW9uX2Jv dW5kfXNdCisgKiBTRVJWRVIgJXtzZXJ2ZXJ9SSAle2dlbmVyaWNfb3B0aW9uc31zCisgKi8KK3N0 YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlRm9yZWlnblRhYmxlU3RtdChPaWQgb2JqZWN0 SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVGb3JlaWduVGFibGVTdG10ICpzdG10ID0g KENyZWF0ZUZvcmVpZ25UYWJsZVN0bXQgKikgcGFyc2V0cmVlOworCVJlbGF0aW9uCXJlbGF0aW9u ID0gcmVsYXRpb25fb3BlbihvYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlMaXN0CSAgICpk cGNvbnRleHQ7CisJT2JqVHJlZSAgICAqY3JlYXRlU3RtdDsKKwlPYmpUcmVlICAgICp0bXBvYmo7 CisJTGlzdAkgICAqdGFibGVlbHRzID0gTklMOworCisJY3JlYXRlU3RtdCA9IG5ld19vYmp0cmVl KCJDUkVBVEUgRk9SRUlHTiBUQUJMRSIpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRl U3RtdCwgIiV7aWZfbm90X2V4aXN0c31zIiwgImlmX25vdF9leGlzdHMiLAorCQkJCQkJIHN0bXQt PmJhc2UuaWZfbm90X2V4aXN0cyA/ICJJRiBOT1QgRVhJU1RTIiA6ICIiKTsKKworCXRtcG9iaiA9 IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShyZWxhdGlvbi0+cmRfcmVsLT5yZWxuYW1lc3BhY2Us CisJCQkJCQkJCSAgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbGF0aW9uKSk7CisJYXBwZW5k X29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7aWRlbnRpdHl9RCIsIHRtcG9iaik7CisKKwlk cGNvbnRleHQgPSBkZXBhcnNlX2NvbnRleHRfZm9yKFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJl bGF0aW9uKSwKKwkJCQkJCQkJCW9iamVjdElkKTsKKwlpZiAoc3RtdC0+YmFzZS5wYXJ0Ym91bmQp CisJeworCQkvKiBQYXJ0aXRpb25lZCB0YWJsZSAqLworCQlMaXN0CSAgICpwYXJlbnRzOworCQlP YmpFbGVtICAgICplbGVtOworCisJCXBhcmVudHMgPSBkZXBhcnNlX0luaFJlbGF0aW9ucyhvYmpl Y3RJZCk7CisJCWVsZW0gPSAoT2JqRWxlbSAqKSBsaW5pdGlhbChwYXJlbnRzKTsKKworCQlBc3Nl cnQobGlzdF9sZW5ndGgocGFyZW50cykgPT0gMSk7CisKKwkJYXBwZW5kX2Zvcm1hdF9zdHJpbmco Y3JlYXRlU3RtdCwgIlBBUlRJVElPTiBPRiIpOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNy ZWF0ZVN0bXQsICIle3BhcmVudF9pZGVudGl0eX1EIiwKKwkJCQkJCQkJCQkgZWxlbS0+dmFsdWUu b2JqZWN0KTsKKworCQl0YWJsZWVsdHMgPSBkZXBhcnNlX1RhYmxlRWxlbWVudHMocmVsYXRpb24s IHN0bXQtPmJhc2UudGFibGVFbHRzLCBkcGNvbnRleHQsCisJCQkJCQkJCQkJICB0cnVlLCAvKiB0 eXBlZCB0YWJsZSAqLworCQkJCQkJCQkJCSAgZmFsc2UpOwkvKiBub3QgY29tcG9zaXRlICovCisJ CXRhYmxlZWx0cyA9IG9idGFpbkNvbnN0cmFpbnRzKHRhYmxlZWx0cywgb2JqZWN0SWQsIEludmFs aWRPaWQpOworCisJCXRtcG9iaiA9IG5ld19vYmp0cmVlKCIiKTsKKwkJaWYgKHRhYmxlZWx0cykK KwkJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wb2JqLCAiKCV7ZWxlbWVudHM6LCB9cykiLCB0YWJs ZWVsdHMpOworCQllbHNlCisJCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wb2JqKTsKKworCQlhcHBl bmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10LCAiJXt0eXBlZF90YWJsZV9lbGVtZW50c31zIiwg dG1wb2JqKTsKKworCQkvKgorCQkgKiBBZGQgdGhlIHBhcnRpdGlvbl9ib3VuZF9zcGVjLCBpLmUu IHRoZSBGT1IgVkFMVUVTIGNsYXVzZS4KKwkJICogR2V0IHBnX2NsYXNzLnJlbHBhcnRib3VuZC4g V2UgY2Fubm90IHVzZSBwYXJ0Ym91bmQgaW4gdGhlIHBhcnNldHJlZQorCQkgKiBkaXJlY3RseSBh cyBpdCdzIHRoZSBvcmlnaW5hbCBwYXJ0Ym91bmQgZXhwcmVzc2lvbiB3aGljaCBoYXZlbid0CisJ CSAqIGJlZW4gdHJhbnNmb3JtZWQuCisJCSAqLworCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVh dGVTdG10LCAiJXtwYXJ0aXRpb25fYm91bmR9cyIsICJwYXJ0aXRpb25fYm91bmQiLAorCQkJCQkJ CSBSZWxhdGlvbkdldFBhcnRpdGlvbkJvdW5kKG9iamVjdElkKSk7CisKKwkJLyogTm8gUEFSVElU SU9OIEJZIGNsYXVzZSBmb3IgQ1JFQVRFIEZPUkVJR04gVEFCTEUgKi8KKwl9CisJZWxzZQorCXsK KwkJdGFibGVlbHRzID0gZGVwYXJzZV9UYWJsZUVsZW1lbnRzKHJlbGF0aW9uLCBzdG10LT5iYXNl LnRhYmxlRWx0cywgZHBjb250ZXh0LAorCQkJCQkJCQkJCSAgZmFsc2UsCQkvKiBub3QgdHlwZWQg dGFibGUgKi8KKwkJCQkJCQkJCQkgIGZhbHNlKTsJLyogbm90IGNvbXBvc2l0ZSAqLworCQl0YWJs ZWVsdHMgPSBvYnRhaW5Db25zdHJhaW50cyh0YWJsZWVsdHMsIG9iamVjdElkLCBJbnZhbGlkT2lk KTsKKworCQlpZiAodGFibGVlbHRzKQorCQkJYXBwZW5kX2FycmF5X29iamVjdChjcmVhdGVTdG10 LCAiKCV7dGFibGVfZWxlbWVudHM6LCB9cykiLCB0YWJsZWVsdHMpOworCQllbHNlCisJCQlhcHBl bmRfZm9ybWF0X3N0cmluZyhjcmVhdGVTdG10LCAiKCkiKTsKKworCQkvKgorCQkqIEFkZCBpbmhl cml0YW5jZSBzcGVjaWZpY2F0aW9uLiAgV2UgY2Fubm90IHNpbXBseSBzY2FuIHRoZSBsaXN0IG9m CisJCSogcGFyZW50cyBmcm9tIHRoZSBwYXJzZXIgbm9kZSwgYmVjYXVzZSB0aGF0IG1heSBsYWNr IHRoZSBhY3R1YWwKKwkJKiBxdWFsaWZpZWQgbmFtZXMgb2YgdGhlIHBhcmVudCByZWxhdGlvbnMu ICBSYXRoZXIgdGhhbiB0cnlpbmcgdG8KKwkJKiByZS1yZXNvbHZlIHRoZW0gZnJvbSB0aGUgaW5m b3JtYXRpb24gaW4gdGhlIHBhcnNlIG5vZGUsIGl0IHNlZW1zCisJCSogbW9yZSBhY2N1cmF0ZSBh bmQgY29udmVuaWVudCB0byBncmFiIGl0IGZyb20gcGdfaW5oZXJpdHMuCisJCSovCisJCXRtcG9i aiA9IG5ld19vYmp0cmVlKCJJTkhFUklUUyIpOworCQlpZiAoc3RtdC0+YmFzZS5pbmhSZWxhdGlv bnMgIT0gTklMKQorCQkJYXBwZW5kX2FycmF5X29iamVjdCh0bXBvYmosICIoJXtwYXJlbnRzOiwg fUQpIiwgZGVwYXJzZV9JbmhSZWxhdGlvbnMob2JqZWN0SWQpKTsKKwkJZWxzZQorCQl7CisJCQlh cHBlbmRfbnVsbF9vYmplY3QodG1wb2JqLCAiKCV7cGFyZW50czosIH1EKSIpOworCQkJYXBwZW5k X25vdF9wcmVzZW50KHRtcG9iaik7CisJCX0KKwkJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRl U3RtdCwgIiV7aW5oZXJpdHN9cyIsIHRtcG9iaik7CisJfQorCisJYXBwZW5kX3N0cmluZ19vYmpl Y3QoY3JlYXRlU3RtdCwgIlNFUlZFUiAle3NlcnZlcn1JIiwgInNlcnZlciIsIHN0bXQtPnNlcnZl cm5hbWUpOworCisJLyogYWRkIGFuIE9QVElPTlMgY2xhdXNlLCBpZiBhbnkgKi8KKwlhcHBlbmRf b2JqZWN0X29iamVjdChjcmVhdGVTdG10LCAiJXtnZW5lcmljX29wdGlvbnN9cyIsCisJCQkJCQkg ZGVwYXJzZV9GZHdPcHRpb25zKHN0bXQtPm9wdGlvbnMsIE5VTEwpKTsKKworCXJlbGF0aW9uX2Ns b3NlKHJlbGF0aW9uLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIGNyZWF0ZVN0bXQ7Cit9 CisKKy8qCisgKiBEZXBhcnNlIGEgRGVmaW5lU3RtdC4KKyAqLworc3RhdGljIE9ialRyZWUgKgor ZGVwYXJzZV9EZWZpbmVTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlLCBPYmplY3RB ZGRyZXNzIHNlY29uZGFyeU9iaikKK3sKKwlEZWZpbmVTdG10ICpkZWZpbmUgPSAoRGVmaW5lU3Rt dCAqKSBwYXJzZXRyZWU7CisKKwlzd2l0Y2ggKGRlZmluZS0+a2luZCkKKwl7CisJCWNhc2UgT0JK RUNUX0FHR1JFR0FURToKKwkJCXJldHVybiBkZXBhcnNlX0RlZmluZVN0bXRfQWdncmVnYXRlKG9i amVjdElkLCBkZWZpbmUpOworCisJCWNhc2UgT0JKRUNUX0NPTExBVElPTjoKKwkJCXJldHVybiBk ZXBhcnNlX0RlZmluZVN0bXRfQ29sbGF0aW9uKG9iamVjdElkLCBkZWZpbmUsIHNlY29uZGFyeU9i aik7CisKKwkJY2FzZSBPQkpFQ1RfT1BFUkFUT1I6CisJCQlyZXR1cm4gZGVwYXJzZV9EZWZpbmVT dG10X09wZXJhdG9yKG9iamVjdElkLCBkZWZpbmUpOworCisJCWNhc2UgT0JKRUNUX1RTQ09ORklH VVJBVElPTjoKKwkJCXJldHVybiBkZXBhcnNlX0RlZmluZVN0bXRfVFNDb25maWcob2JqZWN0SWQs IGRlZmluZSwgc2Vjb25kYXJ5T2JqKTsKKworCQljYXNlIE9CSkVDVF9UU0RJQ1RJT05BUlk6CisJ CQlyZXR1cm4gZGVwYXJzZV9EZWZpbmVTdG10X1RTRGljdGlvbmFyeShvYmplY3RJZCwgZGVmaW5l KTsKKworCQljYXNlIE9CSkVDVF9UU1BBUlNFUjoKKwkJCXJldHVybiBkZXBhcnNlX0RlZmluZVN0 bXRfVFNQYXJzZXIob2JqZWN0SWQsIGRlZmluZSk7CisKKwkJY2FzZSBPQkpFQ1RfVFNURU1QTEFU RToKKwkJCXJldHVybiBkZXBhcnNlX0RlZmluZVN0bXRfVFNUZW1wbGF0ZShvYmplY3RJZCwgZGVm aW5lKTsKKworCQljYXNlIE9CSkVDVF9UWVBFOgorCQkJcmV0dXJuIGRlcGFyc2VfRGVmaW5lU3Rt dF9UeXBlKG9iamVjdElkLCBkZWZpbmUpOworCisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAi dW5zdXBwb3J0ZWQgb2JqZWN0IGtpbmQ6ICVkIiwgZGVmaW5lLT5raW5kKTsKKwl9CisKKwlyZXR1 cm4gTlVMTDsKK30KKworLyoKKyAqIEZvcm0gYW4gT2JqRWxlbSB0byBiZSB1c2VkIGFzIGEgc2lu Z2xlIGFyZ3VtZW50IGluIGFuIGFnZ3JlZ2F0ZSBhcmd1bWVudAorICogbGlzdAorICovCitzdGF0 aWMgT2JqRWxlbSAqCitmb3JtX2FnZ19hcmd1bWVudChpbnQgaWR4LCBjaGFyICptb2RlcywgY2hh ciAqKm5hbWVzLCBPaWQgKnR5cGVzKQoreworCU9ialRyZWUJICAgKmFyZzsKKworCWFyZyA9IG5l d19vYmp0cmVlKCIiKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGFyZywgIiV7bW9kZX1zIiwg Im1vZGUiLAorCQkJCQkJIChtb2RlcyAmJiBtb2Rlc1tpZHhdID09ICd2JykgPyAiVkFSSUFESUMi IDogIiIpOworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGFyZywgIiV7bmFtZX1zIiwgIm5hbWUiLCBu YW1lcyA/IG5hbWVzW2lkeF0gOiAiIik7CisJYXBwZW5kX29iamVjdF9vYmplY3QoYXJnLCAiJXt0 eXBlfVQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHR5cGVzW2lkeF0sIC0xKSk7CisK KwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QoYXJnKTsKK30KKworLyoKKyAqIERlcGFyc2UgYSBE ZWZpbmVTdG10IChDUkVBVEUgQUdHUkVHQVRFKQorICoKKyAqIEdpdmVuIGEgYWdncmVnYXRlIE9J RCwgcmV0dXJuIGFuIE9ialRyZWUgcmVwcmVzZW50aW5nIHRoZSBDUkVBVEUgY29tbWFuZC4KKyAq CisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFIEFHR1JFR0FURSAle2lkZW50aXR5fUQoJXt0 eXBlc31zKSAoJXtlbGVtczosIH1zKQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0Rl ZmluZVN0bXRfQWdncmVnYXRlKE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKQorewor CUhlYXBUdXBsZSAgIGFnZ1R1cDsKKwlIZWFwVHVwbGUgICBwcm9jVHVwOworCU9ialRyZWUJICAg KnN0bXQ7CisJT2JqVHJlZQkgICAqdG1wOworCUxpc3QJICAgKmxpc3Q7CisJRGF0dW0JCWluaXR2 YWw7CisJYm9vbAkJaXNudWxsOworCUZvcm1fcGdfYWdncmVnYXRlIGFnZzsKKwlGb3JtX3BnX3By b2MgcHJvYzsKKwlGb3JtX3BnX29wZXJhdG9yIG9wOworCUhlYXBUdXBsZQl0dXA7CisKKwlhZ2dU dXAgPSBTZWFyY2hTeXNDYWNoZTEoQUdHRk5PSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQp KTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoYWdnVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hl IGxvb2t1cCBmYWlsZWQgZm9yIGFnZ3JlZ2F0ZSB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwlh Z2cgPSAoRm9ybV9wZ19hZ2dyZWdhdGUpIEdFVFNUUlVDVChhZ2dUdXApOworCisJcHJvY1R1cCA9 IFNlYXJjaFN5c0NhY2hlMShQUk9DT0lELCBPYmplY3RJZEdldERhdHVtKGFnZy0+YWdnZm5vaWQp KTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJvY1R1cCkpCisJCWVsb2coRVJST1IsICJjYWNo ZSBsb29rdXAgZmFpbGVkIGZvciBwcm9jZWR1cmUgd2l0aCBPSUQgJXUiLAorCQkJIGFnZy0+YWdn Zm5vaWQpOworCXByb2MgPSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1QocHJvY1R1cCk7CisKKwlz dG10ID0gbmV3X29ianRyZWUoIkNSRUFURSBBR0dSRUdBVEUiKTsKKworCWFwcGVuZF9vYmplY3Rf b2JqZWN0KHN0bXQsICIle2lkZW50aXR5fUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFs bmFtZShwcm9jLT5wcm9uYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIocHJvYy0+cHJv bmFtZSkpKTsKKworCS8qCisJICogQWRkIHRoZSBhcmd1bWVudCBsaXN0LiAgVGhlcmUgYXJlIHRo cmVlIGNhc2VzIHRvIGNvbnNpZGVyOgorCSAqCisJICogMS4gbm8gYXJndW1lbnRzLCBpbiB3aGlj aCBjYXNlIHRoZSBzaWduYXR1cmUgaXMgKCopLgorCSAqCisJICogMi4gTm90IGFuIG9yZGVyZWQt c2V0IGFnZ3JlZ2F0ZS4gIEluIHRoaXMgY2FzZSB0aGVyZSdzIG9uZSBvciBtb3JlCisJICogYXJn dW1lbnRzLgorCSAqCisJICogMy4gT3JkZXJlZC1zZXQgYWdncmVnYXRlcy4gVGhlc2UgaGF2ZSB6 ZXJvIG9yIG1vcmUgZGlyZWN0IGFyZ3VtZW50cywgYW5kCisJICogb25lIG9yIG1vcmUgb3JkZXJl ZCBhcmd1bWVudHMuCisJICoKKwkgKiBXZSBkb24ndCBuZWVkIHRvIGNvbnNpZGVyIGRlZmF1bHQg dmFsdWVzIG9yIHRhYmxlIHBhcmFtZXRlcnMsIGFuZCB0aGUKKwkgKiBvbmx5IG1vZGUgdGhhdCB3 ZSBuZWVkIHRvIGNvbnNpZGVyIGlzIFZBUklBRElDLgorCSAqLworCisJaWYgKHByb2MtPnByb25h cmdzID09IDApCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHN0bXQsICIoJXt0eXBlc31zKSIsICJ0 eXBlcyIsICIqIik7CisJZWxzZSBpZiAoIUFHR0tJTkRfSVNfT1JERVJFRF9TRVQoYWdnLT5hZ2dr aW5kKSkKKwl7CisJCWludAkJCWk7CisJCWludAkJCW5hcmdzOworCQlPaWQJCSAgICp0eXBlczsK KwkJY2hhcgkgICAqbW9kZXM7CisJCWNoYXIJICAqKm5hbWVzOworCisJCW5hcmdzID0gZ2V0X2Z1 bmNfYXJnX2luZm8ocHJvY1R1cCwgJnR5cGVzLCAmbmFtZXMsICZtb2Rlcyk7CisKKwkJLyogb25s eSBkaXJlY3QgYXJndW1lbnRzIGluIHRoaXMgY2FzZSAqLworCQlsaXN0ID0gTklMOworCQlmb3Ig KGkgPSAwOyBpIDwgbmFyZ3M7IGkrKykKKwkJeworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgZm9y bV9hZ2dfYXJndW1lbnQoaSwgbW9kZXMsIG5hbWVzLCB0eXBlcykpOworCQl9CisKKwkJdG1wID0g bmV3X29ianRyZWVfVkEoIiV7ZGlyZWN0OiwgfXMiLCAxLAorCQkJCQkJCSAiZGlyZWN0IiwgT2Jq VHlwZUFycmF5LCBsaXN0KTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3Qoc3RtdCwgIigle3R5cGVz fXMpIiwgdG1wKTsKKwl9CisJZWxzZQorCXsKKwkJaW50CQkJaTsKKwkJaW50CQkJbmFyZ3M7CisJ CU9pZAkJICAgKnR5cGVzOworCQljaGFyCSAgICptb2RlczsKKwkJY2hhcgkgICoqbmFtZXM7CisK KwkJbmFyZ3MgPSBnZXRfZnVuY19hcmdfaW5mbyhwcm9jVHVwLCAmdHlwZXMsICZuYW1lcywgJm1v ZGVzKTsKKworCQkvKiBkaXJlY3QgYXJndW1lbnRzIC4uLiAqLworCQlsaXN0ID0gTklMOworCQlm b3IgKGkgPSAwOyBpIDwgYWdnLT5hZ2dudW1kaXJlY3RhcmdzOyBpKyspCisJCXsKKwkJCWxpc3Qg PSBsYXBwZW5kKGxpc3QsIGZvcm1fYWdnX2FyZ3VtZW50KGksIG1vZGVzLCBuYW1lcywgdHlwZXMp KTsKKwkJfQorCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiJXtkaXJlY3Q6LCB9cyIsIDEsCisJCQkJ CQkJICJkaXJlY3QiLCBPYmpUeXBlQXJyYXksIGxpc3QpOworCisJCS8qCisJCSAqIC4uLiBhbmQg YWdncmVnYXRlZCBhcmd1bWVudHMuICBJZiB0aGUgbGFzdCBkaXJlY3QgYXJndW1lbnQgaXMKKwkJ ICogVkFSSUFESUMsIHdlIG5lZWQgdG8gcmVwZWF0IGl0IGhlcmUgcmF0aGVyIHRoYW4gc2VhcmNo aW5nIGZvciBtb3JlCisJCSAqIGFyZ3VtZW50cy4gIChTZWUgYWdncl9hcmdzIHByb2R1Y3Rpb24g aW4gZ3JhbS55IGZvciBhbiBleHBsYW5hdGlvbi4pCisJCSAqLworCQlpZiAobW9kZXMgJiYgbW9k ZXNbYWdnLT5hZ2dudW1kaXJlY3RhcmdzIC0gMV0gPT0gJ3YnKQorCQl7CisJCQlsaXN0ID0gbGlz dF9tYWtlMShmb3JtX2FnZ19hcmd1bWVudChhZ2ctPmFnZ251bWRpcmVjdGFyZ3MgLSAxLAorCQkJ CQkJCQkJCQkJbW9kZXMsIG5hbWVzLCB0eXBlcykpOworCQl9CisJCWVsc2UKKwkJeworCQkJbGlz dCA9IE5JTDsKKwkJCWZvciAoaSA9IGFnZy0+YWdnbnVtZGlyZWN0YXJnczsgaSA8IG5hcmdzOyBp KyspCisJCQl7CisJCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgZm9ybV9hZ2dfYXJndW1lbnQoaSwg bW9kZXMsIG5hbWVzLCB0eXBlcykpOworCQkJfQorCQl9CisJCWFwcGVuZF9hcnJheV9vYmplY3Qo dG1wLCAiT1JERVIgQlkgJXthZ2dyZWdhdGVkOiwgfXMiLCBsaXN0KTsKKworCQlhcHBlbmRfb2Jq ZWN0X29iamVjdChzdG10LCAiKCV7dHlwZXN9cykiLCB0bXApOworCX0KKworCS8qIEFkZCB0aGUg ZGVmaW5pdGlvbiBjbGF1c2UgKi8KKwlsaXN0ID0gTklMOworCisJLyogU0ZVTkMgKi8KKwl0bXAg PSBuZXdfb2JqdHJlZV9WQSgiU0ZVTkM9JXtwcm9jZWR1cmV9RCIsIDEsCisJCQkJCQkgInByb2Nl ZHVyZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lk KFByb2NlZHVyZVJlbGF0aW9uSWQsIGFnZy0+YWdndHJhbnNmbikpOworCWxpc3QgPSBsYXBwZW5k KGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogU1RZUEUgKi8KKwl0bXAgPSBu ZXdfb2JqdHJlZV9WQSgiU1RZUEU9JXt0eXBlfVQiLCAxLAorCQkJCQkJICJ0eXBlIiwgT2JqVHlw ZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShhZ2ctPmFnZ3RyYW5zdHlwZSwg LTEpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwor CS8qIFNTUEFDRSAqLworCWlmIChhZ2ctPmFnZ3RyYW5zc3BhY2UgIT0gMCkKKwl7CisJCXRtcCA9 IG5ld19vYmp0cmVlX1ZBKCJTU1BBQ0U9JXtzcGFjZX1uIiwgMSwKKwkJCQkJCQkgInNwYWNlIiwg T2JqVHlwZUludGVnZXIsIGFnZy0+YWdndHJhbnNzcGFjZSk7CisJfQorCWVsc2UKKwl7CisJCXRt cCA9IG5ld19vYmp0cmVlKCJTU1BBQ0U9JXtzcGFjZX1uIik7CisJCWFwcGVuZF9ib29sX29iamVj dCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCX0KKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdf b2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIEZJTkFMRlVOQyAqLworCWlmIChPaWRJc1ZhbGlk KGFnZy0+YWdnZmluYWxmbikpCisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJGSU5BTEZVTkM9JXtw cm9jZWR1cmV9RCIsIDEsCisJCQkJCQkJICJwcm9jZWR1cmUiLCBPYmpUeXBlT2JqZWN0LAorCQkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJ CQkJCQkJCQkJCQkJIGFnZy0+YWdnZmluYWxmbikpOworCWVsc2UKKwl7CisJCXRtcCA9IG5ld19v Ymp0cmVlKCJGSU5BTEZVTkM9JXtwcm9jZWR1cmV9RCIpOworCQlhcHBlbmRfYm9vbF9vYmplY3Qo dG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwl9CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29i amVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBGSU5BTEZVTkNfRVhUUkEgKi8KKwlpZiAoYWdnLT5h Z2dmaW5hbGV4dHJhKQorCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiRklOQUxGVU5DX0VYVFJBPSV7 dmFsdWV9cyIsIDEsCisJCQkJCQkJICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsICJ0cnVlIik7CisJ ZWxzZQorCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiRklOQUxGVU5DX0VYVFJBPSV7dmFsdWV9cyIs IDEsCisJCQkJCQkJICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsICJmYWxzZSIpOworCWxpc3QgPSBs YXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogSU5JVENPTkQgKi8K Kwlpbml0dmFsID0gU3lzQ2FjaGVHZXRBdHRyKEFHR0ZOT0lELCBhZ2dUdXAsCisJCQkJCQkJICBB bnVtX3BnX2FnZ3JlZ2F0ZV9hZ2dpbml0dmFsLAorCQkJCQkJCSAgJmlzbnVsbCk7CisJdG1wID0g bmV3X29ianRyZWUoIklOSVRDT05EPSIpOworCWlmICghaXNudWxsKQorCQl0bXAgPSBuZXdfb2Jq dHJlZV9WQSgiSU5JVENPTkQ9JXtpbml0dmFsfUwiLCAxLAorCQkJCQkJCSAiaW5pdHZhbCIsIE9i alR5cGVTdHJpbmcsIFRleHREYXR1bUdldENTdHJpbmcoaW5pdHZhbCkpOworCWVsc2UKKwl7CisJ CXRtcCA9IG5ld19vYmp0cmVlKCJJTklUQ09ORD0le2luaXR2YWx9TCIpOworCQlhcHBlbmRfYm9v bF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwl9CisJbGlzdCA9IGxhcHBlbmQobGlz dCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBNU0ZVTkMgKi8KKwlpZiAoT2lkSXNW YWxpZChhZ2ctPmFnZ210cmFuc2ZuKSkKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIk1TRlVOQz0l e3Byb2NlZHVyZX1EIiwgMSwKKwkJCQkJCQkgInByb2NlZHVyZSIsIE9ialR5cGVPYmplY3QsCisJ CQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLCBh Z2ctPmFnZ210cmFuc2ZuKSk7CisJZWxzZQorCXsKKwkJdG1wID0gbmV3X29ianRyZWUoIk1TRlVO Qz0le3Byb2NlZHVyZX1EIik7CisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50Iiwg ZmFsc2UpOworCX0KKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXAp KTsKKworCS8qIE1TVFlQRSAqLworCWlmIChPaWRJc1ZhbGlkKGFnZy0+YWdnbXRyYW5zdHlwZSkp CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJNU1RZUEU9JXt0eXBlfVQiLCAxLAorCQkJCQkJCSAi dHlwZSIsIE9ialR5cGVPYmplY3QsIG5ld19vYmp0cmVlX2Zvcl90eXBlKGFnZy0+YWdnbXRyYW5z dHlwZSwgLTEpKTsKKwllbHNlCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZSgiTVNUWVBFPSV7dHlw ZX1UIik7CisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCX0K KwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIE1T U1BBQ0UgKi8KKwlpZiAoYWdnLT5hZ2dtdHJhbnNzcGFjZSAhPSAwKQorCQl0bXAgPSBuZXdfb2Jq dHJlZV9WQSgiTVNTUEFDRT0le3NwYWNlfW4iLCAxLAorCQkJCQkJCSAic3BhY2UiLCBPYmpUeXBl SW50ZWdlcixhZ2ctPmFnZ210cmFuc3NwYWNlKTsKKwllbHNlCisJeworCQl0bXAgPSBuZXdfb2Jq dHJlZSgiTVNTUEFDRT0le3NwYWNlfW4iKTsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInBy ZXNlbnQiLCBmYWxzZSk7CisJfQorCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcCkpOworCisJLyogTUlOVkZVTkMgKi8KKwlpZiAoT2lkSXNWYWxpZChhZ2ctPmFnZ21p bnZ0cmFuc2ZuKSkKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIk1JTlZGVU5DPSV7dHlwZX1UIiwg MSwKKwkJCQkJCQkgInR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIGFnZy0+ YWdnbWludnRyYW5zZm4pKTsKKwllbHNlCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZSgiTUlOVkZV TkM9PSV7dHlwZX1UIik7CisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFs c2UpOworCX0KKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsK KworCS8qIE1GSU5BTEZVTkMgKi8KKwlpZiAoT2lkSXNWYWxpZChhZ2ctPmFnZ21maW5hbGZuKSkK KwkJdG1wID0gbmV3X29ianRyZWVfVkEoIk1GSU5BTEZVTkM9JXtwcm9jZWR1cmV9RCIsIDEsCisJ CQkJCQkJICJwcm9jZWR1cmUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIGFnZy0+ YWdnbWZpbmFsZm4pKTsKKwllbHNlCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZSgiTUZJTkFMRlVO Qz0le3Byb2NlZHVyZX1EIik7CisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50Iiwg ZmFsc2UpOworCX0KKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXAp KTsKKworCS8qIE1GSU5BTEZVTkNfRVhUUkEgKi8KKwlpZiAoYWdnLT5hZ2dtZmluYWxleHRyYSkK KwkJdG1wID0gbmV3X29ianRyZWVfVkEoIk1GSU5BTEZVTkNfRVhUUkE9JXt2YWx1ZX1zIiwgMSwK KwkJCQkJCQkgInZhbHVlIiwgT2JqVHlwZVN0cmluZywgInRydWUiKTsKKwllbHNlCisJeworCQl0 bXAgPSBuZXdfb2JqdHJlZSgiTUZJTkFMRlVOQ19FWFRSQT0le3ZhbHVlfXMiKTsKKwkJYXBwZW5k X2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJfQorCWxpc3QgPSBsYXBwZW5k KGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogTUlOSVRDT05EICovCisJaW5p dHZhbCA9IFN5c0NhY2hlR2V0QXR0cihBR0dGTk9JRCwgYWdnVHVwLAorCQkJCQkJCSAgQW51bV9w Z19hZ2dyZWdhdGVfYWdnbWluaXR2YWwsCisJCQkJCQkJICAmaXNudWxsKTsKKwlpZiAoIWlzbnVs bCkKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIk1JTklUQ09ORD0le2luaXR2YWx9TCIsIDEsCisJ CQkJCQkJICJpbml0dmFsIiwgT2JqVHlwZVN0cmluZywgVGV4dERhdHVtR2V0Q1N0cmluZyhpbml0 dmFsKSk7CisJZWxzZQorCXsKKwkJdG1wID0gbmV3X29ianRyZWUoIk1JTklUQ09ORD0le2luaXR2 YWx9TCIpOworCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwl9 CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBI WVBPVEhFVElDQUwgKi8KKwlpZiAoYWdnLT5hZ2draW5kID09IEFHR0tJTkRfSFlQT1RIRVRJQ0FM KQorCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiSFlQT1RIRVRJQ0FMPSV7dmFsdWV9cyIsIDEsCisJ CQkJCQkJICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsICJ0cnVlIik7CisJZWxzZQorCXsKKwkJdG1w ID0gbmV3X29ianRyZWUoIkhZUE9USEVUSUNBTD0le3ZhbHVlfXMiKTsKKwkJYXBwZW5kX2Jvb2xf b2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJfQorCWxpc3QgPSBsYXBwZW5kKGxpc3Qs IG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogU09SVE9QICovCisJaWYgKE9pZElzVmFs aWQoYWdnLT5hZ2dzb3J0b3ApKQorCXsKKwkJdHVwID0gU2VhcmNoU3lzQ2FjaGUxKE9QRVJPSUQs IE9iamVjdElkR2V0RGF0dW0oYWdnLT5hZ2dzb3J0b3ApKTsKKwkJaWYgKCFIZWFwVHVwbGVJc1Zh bGlkKHR1cCkpCisJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igb3BlcmF0 b3Igd2l0aCBPSUQgJXUiLCBhZ2ctPmFnZ3NvcnRvcCk7CisJCW9wID0gKEZvcm1fcGdfb3BlcmF0 b3IpIEdFVFNUUlVDVCh0dXApOworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiU09SVE9QPSV7b3Bl cmF0b3J9RCIsIDEsCisJCQkJCQkJICJvcGVyYXRvciIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShvcC0+b3BybmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJ CSAgTmFtZVN0cihvcC0+b3BybmFtZSkpKTsKKworCQlSZWxlYXNlU3lzQ2FjaGUodHVwKTsKKwl9 CisJZWxzZQorCXsKKwkJdG1wID0gbmV3X29ianRyZWUoIlNPUlRPUD0le29wZXJhdG9yfUQiKTsK KwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJfQorCWxpc3Qg PSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogRG9uZSB3aXRo IHRoZSBkZWZpbml0aW9uIGNsYXVzZSAqLworCWFwcGVuZF9hcnJheV9vYmplY3Qoc3RtdCwgIigl e2VsZW1zOiwgfXMpIiwgbGlzdCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUocHJvY1R1cCk7CisJUmVs ZWFzZVN5c0NhY2hlKGFnZ1R1cCk7CisKKwlyZXR1cm4gc3RtdDsKK30KKworLyoKKyAqIERlcGFy c2UgYSBEZWZpbmVTdG10IChDUkVBVEUgQ09MTEFUSU9OKQorICoKKyAqIEdpdmVuIGEgY29sbGF0 aW9uIE9JRCwgcmV0dXJuIGFuIE9ialRyZWUgcmVwcmVzZW50aW5nIHRoZSBDUkVBVEUgY29tbWFu ZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFIENPTExBVElPTiAle2lkZW50aXR5 fUQgRlJPTSAle2Zyb21faWRlbnRpdHl9RCAoJXtlbGVtczosIH1zKQorICovCitzdGF0aWMgT2Jq VHJlZSAqCitkZXBhcnNlX0RlZmluZVN0bXRfQ29sbGF0aW9uKE9pZCBvYmplY3RJZCwgRGVmaW5l U3RtdCAqZGVmaW5lLAorCQkJCQkJCSBPYmplY3RBZGRyZXNzIGZyb21Db2xsaWQpCit7CisJT2Jq VHJlZSAgICAqcmV0OworCUhlYXBUdXBsZQljb2xUdXA7CisJRm9ybV9wZ19jb2xsYXRpb24gY29s Rm9ybTsKKwlEYXR1bQkJZGF0dW07CisJYm9vbAkJaXNudWxsOworCU9ialRyZWUgICAgKnRtcDsK KwlMaXN0CSAgICpsaXN0ID0gTklMOworCisJY29sVHVwID0gU2VhcmNoU3lzQ2FjaGUxKENPTExP SUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQo Y29sVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGNvbGxhdGlv biB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwljb2xGb3JtID0gKEZvcm1fcGdfY29sbGF0aW9u KSBHRVRTVFJVQ1QoY29sVHVwKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgQ09M TEFUSU9OICV7aWRlbnRpdHl9RCIsIDEsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVj dCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoY29sRm9ybS0+Y29sbG5hbWVzcGFj ZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cihjb2xGb3JtLT5jb2xsbmFtZSkpKTsKKworCWlmIChP aWRJc1ZhbGlkKGZyb21Db2xsaWQub2JqZWN0SWQpKQorCXsKKwkJT2lkCQkJY29sbGlkID0gZnJv bUNvbGxpZC5vYmplY3RJZDsKKwkJSGVhcFR1cGxlCXRwOworCQlGb3JtX3BnX2NvbGxhdGlvbiBm cm9tQ29sRm9ybTsKKworCQkvKgorCQkgKiBDUkVBVEUgQ09MTEFUSU9OICV7aWRlbnRpdHl9RCBG Uk9NIGV4aXN0aW5nX2NvbGxhdGlvbjsKKwkJICovCisJCXRwID0gU2VhcmNoU3lzQ2FjaGUxKENP TExPSUQsIE9iamVjdElkR2V0RGF0dW0oY29sbGlkKSk7CisJCWlmICghSGVhcFR1cGxlSXNWYWxp ZCh0cCkpCisJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgY29sbGF0aW9u IHdpdGggT0lEICV1IiwgY29sbGlkKTsKKworCQlmcm9tQ29sRm9ybSA9IChGb3JtX3BnX2NvbGxh dGlvbikgR0VUU1RSVUNUKHRwKTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICJGUk9N ICV7ZnJvbV9pZGVudGl0eX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGZy b21Db2xGb3JtLT5jb2xsbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCSAgTmFtZVN0cihmcm9tQ29s Rm9ybS0+Y29sbG5hbWUpKSk7CisKKwkJUmVsZWFzZVN5c0NhY2hlKHRwKTsKKwkJUmVsZWFzZVN5 c0NhY2hlKGNvbFR1cCk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogTE9DQUxFICovCisJZGF0 dW0gPSBTeXNDYWNoZUdldEF0dHIoQ09MTE9JRCwgY29sVHVwLCBBbnVtX3BnX2NvbGxhdGlvbl9j b2xsaWN1bG9jYWxlLCAmaXNudWxsKTsKKwlpZiAoIWlzbnVsbCkKKwl7CisJCXRtcCA9IG5ld19v Ymp0cmVlX1ZBKCJMT0NBTEU9JXtsb2NhbGV9TCIsIDIsCisJCQkJCQkJICJjbGF1c2UiLCBPYmpU eXBlU3RyaW5nLCAibG9jYWxlIiwKKwkJCQkJCQkgImxvY2FsZSIsIE9ialR5cGVTdHJpbmcsCisJ CQkJCQkJIHBzcHJpbnRmKCIlcyIsIFRleHREYXR1bUdldENTdHJpbmcoZGF0dW0pKSk7CisJCWxp c3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKworCS8qIExD X0NPTExBVEUgKi8KKwlkYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihDT0xMT0lELCBjb2xUdXAsIEFu dW1fcGdfY29sbGF0aW9uX2NvbGxjb2xsYXRlLCAmaXNudWxsKTsKKwlpZiAoIWlzbnVsbCkKKwl7 CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJMQ19DT0xMQVRFPSV7Y29sbGF0ZX1MIiwgMiwKKwkJ CQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJjb2xsYXRlIiwKKwkJCQkJCQkgImNvbGxh dGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCSBwc3ByaW50ZigiJXMiLCBUZXh0RGF0dW1HZXRD U3RyaW5nKGRhdHVtKSkpOworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVj dCh0bXApKTsKKwl9CisKKwkvKiBMQ19DVFlQRSAqLworCWRhdHVtID0gU3lzQ2FjaGVHZXRBdHRy KENPTExPSUQsIGNvbFR1cCwgQW51bV9wZ19jb2xsYXRpb25fY29sbGN0eXBlLCAmaXNudWxsKTsK KwlpZiAoIWlzbnVsbCkKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJMQ19DVFlQRT0le2N0 eXBlfUwiLCAyLAorCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImN0eXBlIiwKKwkJ CQkJCQkgImN0eXBlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkgcHNwcmludGYoIiVzIiwgVGV4 dERhdHVtR2V0Q1N0cmluZyhkYXR1bSkpKTsKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29i amVjdF9vYmplY3QodG1wKSk7CisJfQorCisJLyogUFJPVklERVIgKi8KKwlpZiAoY29sRm9ybS0+ Y29sbHByb3ZpZGVyID09IENPTExQUk9WSURFUl9JQ1UpCisJeworCQl0bXAgPSBuZXdfb2JqdHJl ZV9WQSgiUFJPVklERVI9JXtwcm92aWRlcn1MIiwgMiwKKwkJCQkJCQkgImNsYXVzZSIsIE9ialR5 cGVTdHJpbmcsICJwcm92aWRlciIsCisJCQkJCQkJICJwcm92aWRlciIsIE9ialR5cGVTdHJpbmcs CisJCQkJCQkJIHBzcHJpbnRmKCIlcyIsICJpY3UiKSk7CisJCWxpc3QgPSBsYXBwZW5kKGxpc3Qs IG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKwllbHNlIGlmIChjb2xGb3JtLT5jb2xscHJv dmlkZXIgPT0gQ09MTFBST1ZJREVSX0xJQkMpCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgi UFJPVklERVI9JXtwcm92aWRlcn1MIiwgMiwKKwkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJp bmcsICJwcm92aWRlciIsCisJCQkJCQkJICJwcm92aWRlciIsIE9ialR5cGVTdHJpbmcsCisJCQkJ CQkJIHBzcHJpbnRmKCIlcyIsICJsaWJjIikpOworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdf b2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisKKwkvKiBERVRFUk1JTklTVElDICovCisJaWYgKGNv bEZvcm0tPmNvbGxpc2RldGVybWluaXN0aWMpCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgi REVURVJNSU5JU1RJQz0le2RldGVybWluaXN0aWN9TCIsIDIsCisJCQkJCQkJICJjbGF1c2UiLCBP YmpUeXBlU3RyaW5nLCAiZGV0ZXJtaW5pc3RpYyIsCisJCQkJCQkJICJkZXRlcm1pbmlzdGljIiwg T2JqVHlwZVN0cmluZywKKwkJCQkJCQkgcHNwcmludGYoIiVzIiwgInRydWUiKSk7CisJCWxpc3Qg PSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKworCS8qIFZFUlNJ T04gKi8KKwlkYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihDT0xMT0lELCBjb2xUdXAsIEFudW1fcGdf Y29sbGF0aW9uX2NvbGx2ZXJzaW9uLCAmaXNudWxsKTsKKwlpZiAoIWlzbnVsbCkKKwl7CisJCXRt cCA9IG5ld19vYmp0cmVlX1ZBKCJWRVJTSU9OPSV7dmVyc2lvbn1MIiwgMiwKKwkJCQkJCQkgImNs YXVzZSIsIE9ialR5cGVTdHJpbmcsICJ2ZXJzaW9uIiwKKwkJCQkJCQkgInZlcnNpb24iLCBPYmpU eXBlU3RyaW5nLAorCQkJCQkJCSBwc3ByaW50ZigiJXMiLCBUZXh0RGF0dW1HZXRDU3RyaW5nKGRh dHVtKSkpOworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsK Kwl9CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIigle2VsZW1zOiwgfXMpIiwgbGlzdCk7 CisJUmVsZWFzZVN5c0NhY2hlKGNvbFR1cCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICog RGVwYXJzZSBhIERlZmluZVN0bXQgKENSRUFURSBPUEVSQVRPUikKKyAqCisgKiBHaXZlbiBhIG9w ZXJhdG9yIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4g T2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICoKKyAqIFZl cmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgT1BFUkFUT1IgJXtpZGVudGl0eX1PICgle2VsZW1zOiwg fXMpCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmaW5lU3RtdF9PcGVyYXRvcihP aWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSkKK3sKKwlIZWFwVHVwbGUJb3ByVHVwOwor CU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICp0bXBfb2JqOworCUxpc3QJICAgKmxpc3Qg PSBOSUw7CisJRm9ybV9wZ19vcGVyYXRvciBvcHJGb3JtOworCisJb3ByVHVwID0gU2VhcmNoU3lz Q2FjaGUxKE9QRVJPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBU dXBsZUlzVmFsaWQob3ByVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQg Zm9yIG9wZXJhdG9yIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCW9wckZvcm0gPSAoRm9ybV9w Z19vcGVyYXRvcikgR0VUU1RSVUNUKG9wclR1cCk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgi Q1JFQVRFIE9QRVJBVE9SICV7aWRlbnRpdHl9TyIsIDEsCisJCQkJCQkgImlkZW50aXR5IiwgT2Jq VHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUob3ByRm9ybS0+b3By bmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKG9wckZvcm0tPm9wcm5hbWUpKSk7CisK KwkvKiBQUk9DRURVUkUgKi8KKwl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIlBST0NFRFVSRT0l e3Byb2NlZHVyZX1EIiwgMiwKKwkJCQkJCQkiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInByb2Nl ZHVyZSIsCisJCQkJCQkJInByb2NlZHVyZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJ CW9wckZvcm0tPm9wcmNvZGUpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29i amVjdCh0bXBfb2JqKSk7CisKKwkvKiBMRUZUQVJHICovCisJdG1wX29iaiA9IG5ld19vYmp0cmVl X1ZBKCJMRUZUQVJHPSIsIDEsCisJCQkJCQkJImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJsZWZ0 YXJnIik7CisJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3BybGVmdCkpCisJCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KHRtcF9vYmosICIle3R5cGV9VCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90 eXBlKG9wckZvcm0tPm9wcmxlZnQsIC0xKSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQo dG1wX29iaik7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wX29i aikpOworCisJLyogUklHSFRBUkcgKi8KKwl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIlJJR0hU QVJHPSIsIDEsCisJCQkJCQkJImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJyaWdodGFyZyIpOwor CWlmIChPaWRJc1ZhbGlkKG9wckZvcm0tPm9wcnJpZ2h0KSkKKwkJYXBwZW5kX29iamVjdF9vYmpl Y3QodG1wX29iaiwgIiV7dHlwZX1UIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUob3By Rm9ybS0+b3BycmlnaHQsIC0xKSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29i aik7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOwor CisJLyogQ09NTVVUQVRPUiAqLworCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiQ09NTVVUQVRP Uj0iLCAxLAorCQkJCQkJCSJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiY29tbXV0YXRvciIpOwor CWlmIChPaWRJc1ZhbGlkKG9wckZvcm0tPm9wcmNvbSkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHRtcF9vYmosICIle29wZXJ9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9p ZChPcGVyYXRvclJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBvcHJGb3JtLT5vcHJjb20pKTsK KwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKwlsaXN0ID0gbGFwcGVuZChs aXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisKKwkvKiBORUdBVE9SICovCisJdG1w X29iaiA9IG5ld19vYmp0cmVlX1ZBKCJORUdBVE9SPSIsIDEsCisJCQkJCQkJImNsYXVzZSIsIE9i alR5cGVTdHJpbmcsICJuZWdhdG9yIik7CisJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3BybmVn YXRlKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wX29iaiwgIiV7b3Blcn1EIiwKKwkJCQkJ CQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKE9wZXJhdG9yUmVsYXRpb25JZCwKKwkJCQkJ CQkJCQkJCQkJIG9wckZvcm0tPm9wcm5lZ2F0ZSkpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVz ZW50KHRtcF9vYmopOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRt cF9vYmopKTsKKworCS8qIFJFU1RSSUNUICovCisJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJS RVNUUklDVD0iLCAxLAorCQkJCQkJCSJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicmVzdHJpY3Qi KTsKKwlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJyZXN0KSkKKwkJYXBwZW5kX29iamVjdF9v YmplY3QodG1wX29iaiwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIG9wckZvcm0t Pm9wcnJlc3QpKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKwlsaXN0 ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisKKwkvKiBKT0lO ICovCisJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJKT0lOPSIsIDEsCisJCQkJCQkJImNsYXVz ZSIsIE9ialR5cGVTdHJpbmcsICJqb2luIik7CisJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3By am9pbikpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmosICIle3Byb2NlZHVyZX1EIiwK KwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQs CisJCQkJCQkJCQkJCQkJCSBvcHJGb3JtLT5vcHJqb2luKSk7CisJZWxzZQorCQlhcHBlbmRfbm90 X3ByZXNlbnQodG1wX29iaik7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmpl Y3QodG1wX29iaikpOworCisJLyogSEFTSEVTICovCisJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZB KCJIQVNIRVMiLCAxLAorCQkJCQkJCSJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiaGFzaGVzIik7 CisJaWYgKCFvcHJGb3JtLT5vcHJjYW5oYXNoKQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29i aik7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOwor CisJLyogTUVSR0VTICovCisJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJNRVJHRVMiLCAxLAor CQkJCQkJCSJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAibWVyZ2VzIik7CisJaWYgKCFvcHJGb3Jt LT5vcHJjYW5tZXJnZSkKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOworCWxpc3QgPSBs YXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKworCWFwcGVuZF9hcnJh eV9vYmplY3QocmV0LCAiKCV7ZWxlbXM6LCB9cykiLCBsaXN0KTsKKworCVJlbGVhc2VTeXNDYWNo ZShvcHJUdXApOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDUkVBVEUg VFlQRSBzdGF0ZW1lbnQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBUWVBFICV7 aWRlbnRpdHl9RCAle2VsZW1zOiwgfXMpCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2Vf RGVmaW5lU3RtdF9UeXBlKE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKQoreworCUhl YXBUdXBsZQl0eXBUdXA7CisJT2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUgICAgKnRtcDsKKwlM aXN0CSAgICpsaXN0ID0gTklMOworCWNoYXIJICAgKnN0cjsKKwlEYXR1bQkJZGZsdDsKKwlib29s CQlpc251bGw7CisJRm9ybV9wZ190eXBlIHR5cEZvcm07CisKKwl0eXBUdXAgPSBTZWFyY2hTeXND YWNoZTEoVFlQRU9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1 cGxlSXNWYWxpZCh0eXBUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBm b3IgdHlwZSB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwl0eXBGb3JtID0gKEZvcm1fcGdfdHlw ZSkgR0VUU1RSVUNUKHR5cFR1cCk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIFRZ UEUgJXtpZGVudGl0eX1EIiwgMSwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAor CQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZSh0eXBGb3JtLT50eXBuYW1lc3BhY2UsCisJ CQkJCQkJCQkJCQkgIE5hbWVTdHIodHlwRm9ybS0+dHlwbmFtZSkpKTsKKworCS8qIFNoZWxsIHR5 cGVzLiAqLworCWlmICghdHlwRm9ybS0+dHlwaXNkZWZpbmVkKQorCXsKKwkJUmVsZWFzZVN5c0Nh Y2hlKHR5cFR1cCk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogQWRkIHRoZSBkZWZpbml0aW9u IGNsYXVzZSAqLworCS8qIElOUFVUICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIihJTlBVVD0l e3Byb2NlZHVyZX1EIiwgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImlucHV0 IiwKKwkJCQkJCSAicHJvY2VkdXJlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgdHlw Rm9ybS0+dHlwaW5wdXQpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVj dCh0bXApKTsKKworCS8qIE9VVFBVVCAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJPVVRQVVQ9 JXtwcm9jZWR1cmV9RCIsIDIsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJvdXRw dXQiLAorCQkJCQkJICJwcm9jZWR1cmUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSB0 eXBGb3JtLT50eXBvdXRwdXQpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29i amVjdCh0bXApKTsKKworCS8qIFJFQ0VJVkUgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiUkVD RUlWRT0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicmVjZWl2ZSIpOwor CWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cHJlY2VpdmUpKQorCQlhcHBlbmRfb2JqZWN0X29i amVjdCh0bXAsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBy ZWNlaXZlKSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwlsaXN0ID0gbGFw cGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIFNFTkQgKi8KKwl0bXAg PSBuZXdfb2JqdHJlZV9WQSgiU0VORD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3Ry aW5nLCAic2VuZCIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cHNlbmQpKQorCQlhcHBl bmRfb2JqZWN0X29iamVjdCh0bXAsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRy ZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0 eXBGb3JtLT50eXBzZW5kKSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwls aXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIFRZUE1P RF9JTiAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJUWVBNT0RfSU49IiwgMSwKKwkJCQkJCSAi Y2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInR5cG1vZF9pbiIpOworCWlmIChPaWRJc1ZhbGlkKHR5 cEZvcm0tPnR5cG1vZGluKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwcm9jZWR1 cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxh dGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwbW9kaW4pKTsKKwllbHNlCisJCWFw cGVuZF9ub3RfcHJlc2VudCh0bXApOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rf b2JqZWN0KHRtcCkpOworCisJLyogVFlQTU9EX09VVCAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZB KCJUWVBNT0RfT1VUPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJ0eXBt b2Rfb3V0Iik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwbW9kb3V0KSkKKwkJYXBwZW5k X29iamVjdF9vYmplY3QodG1wLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlw Rm9ybS0+dHlwbW9kb3V0KSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwls aXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIEFOQUxZ WkUgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQU5BTFlaRT0iLCAxLAorCQkJCQkJICJjbGF1 c2UiLCBPYmpUeXBlU3RyaW5nLCAiYW5hbHl6ZSIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0t PnR5cGFuYWx5emUpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3Byb2NlZHVyZX1E IiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9u SWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBhbmFseXplKSk7CisJZWxzZQorCQlhcHBl bmRfbm90X3ByZXNlbnQodG1wKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29i amVjdCh0bXApKTsKKworCS8qIElOVEVSTkFMTEVOR1RIICovCisJaWYgKHR5cEZvcm0tPnR5cGxl biA9PSAtMSkKKwkJdG1wID0gbmV3X29ianRyZWUoIklOVEVSTkFMTEVOR1RIPVZBUklBQkxFIik7 CisJZWxzZQorCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiSU5URVJOQUxMRU5HVEg9JXt0eXBsZW59 biIsIDEsCisJCQkJCQkJICJ0eXBsZW4iLCBPYmpUeXBlSW50ZWdlciwgdHlwRm9ybS0+dHlwbGVu KTsKKworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJ LyogUEFTU0VEQllWQUxVRSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJQQVNTRURCWVZBTFVF IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInBhc3NlZGJ5dmFsdWUiKTsK KwlpZiAoIXR5cEZvcm0tPnR5cGJ5dmFsKQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwls aXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIFhYWCBp dCdzIG9kZCB0byByZXByZXNlbnQgYWxpZ25tZW50IHdpdGggc2NoZW1hLXF1YWxpZmllZCB0eXBl IG5hbWVzICovCisJc3dpdGNoICh0eXBGb3JtLT50eXBhbGlnbikKKwl7CisJCWNhc2UgJ2QnOgor CQkJc3RyID0gInBnX2NhdGFsb2cuZmxvYXQ4IjsKKwkJCWJyZWFrOworCQljYXNlICdpJzoKKwkJ CXN0ciA9ICJwZ19jYXRhbG9nLmludDQiOworCQkJYnJlYWs7CisJCWNhc2UgJ3MnOgorCQkJc3Ry ID0gInBnX2NhdGFsb2cuaW50MiI7CisJCQlicmVhazsKKwkJY2FzZSAnYyc6CisJCQlzdHIgPSAi cGdfY2F0YWxvZy5icGNoYXIiOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9S LCAiaW52YWxpZCBhbGlnbm1lbnQgJWMiLCB0eXBGb3JtLT50eXBhbGlnbik7CisJfQorCisJLyog QUxJR05NRU5UICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIkFMSUdOTUVOVD0le2FsaWdufXMi LCAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiYWxpZ25tZW50IiwKKwkJCQkJ CSAiYWxpZ24iLCBPYmpUeXBlU3RyaW5nLCBzdHIpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5l d19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogU1RPUkFHRSAqLworCXRtcCA9IG5ld19vYmp0 cmVlX1ZBKCJTVE9SQUdFPSV7c3RvcmFnZX1zIiwgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlw ZVN0cmluZywgInN0b3JhZ2UiLAorCQkJCQkJICJzdG9yYWdlIiwgT2JqVHlwZVN0cmluZywKKwkJ CQkJCSBnZXRfdHlwZV9zdG9yYWdlKHR5cEZvcm0tPnR5cHN0b3JhZ2UpKTsKKwlsaXN0ID0gbGFw cGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIENBVEVHT1JZICovCisJ dG1wID0gbmV3X29ianRyZWVfVkEoIkNBVEVHT1JZPSV7Y2F0ZWdvcnl9cyIsIDIsCisJCQkJCQkg ImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJjYXRlZ29yeSIsCisJCQkJCQkgImNhdGVnb3J5Iiwg T2JqVHlwZVN0cmluZywKKwkJCQkJCSBwc3ByaW50ZigiJWMiLCB0eXBGb3JtLT50eXBjYXRlZ29y eSkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJ LyogUFJFRkVSUkVEICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlBSRUZFUlJFRD0iLCAxLAor CQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicHJlZmVycmVkIik7CisJaWYgKCF0eXBG b3JtLT50eXBpc3ByZWZlcnJlZCkKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcCk7CisJbGlzdCA9 IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBERUZBVUxUICov CisJZGZsdCA9IFN5c0NhY2hlR2V0QXR0cihUWVBFT0lELCB0eXBUdXAsCisJCQkJCQkgICBBbnVt X3BnX3R5cGVfdHlwZGVmYXVsdCwKKwkJCQkJCSAgICZpc251bGwpOworCXRtcCA9IG5ld19vYmp0 cmVlX1ZBKCJERUZBVUxUPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJk ZWZhdWx0Iik7CisJaWYgKCFpc251bGwpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7 ZGVmYXVsdH1zIiwgImRlZmF1bHQiLAorCQkJCQkJCSBUZXh0RGF0dW1HZXRDU3RyaW5nKGRmbHQp KTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCWxpc3QgPSBsYXBwZW5kKGxp c3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogRUxFTUVOVCAqLworCXRtcCA9IG5l d19vYmp0cmVlX1ZBKCJFTEVNRU5UPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJp bmcsICJlbGVtZW50Iik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwZWxlbSkpCisJCWFw cGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgImVsZW0iLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf dHlwZSh0eXBGb3JtLT50eXBlbGVtLCAtMSkpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50 KHRtcCk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisK KwkvKiBERUxJTUlURVIgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiREVMSU1JVEVSPSIsIDEs CisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJkZWxpbWl0ZXIiKTsKKwlhcHBlbmRf c3RyaW5nX29iamVjdCh0bXAsICIle2RlbGltfUwiLCAiZGVsaW0iLAorCQkJCQkJIHBzcHJpbnRm KCIlYyIsIHR5cEZvcm0tPnR5cGRlbGltKSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29i amVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBDT0xMQVRBQkxFICovCisJdG1wID0gbmV3X29ianRy ZWVfVkEoIkNPTExBVEFCTEU9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywg ImNvbGxhdGFibGUiKTsKKwlpZiAoIU9pZElzVmFsaWQodHlwRm9ybS0+dHlwY29sbGF0aW9uKSkK KwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcCk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29i amVjdF9vYmplY3QodG1wKSk7CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIiV7ZWxlbXM6 LCB9cykiLCBsaXN0KTsKKworCVJlbGVhc2VTeXNDYWNoZSh0eXBUdXApOworCisJcmV0dXJuIHJl dDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDUkVBVEUgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElP TiBzdGF0ZW1lbnQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBURVhUIFNFQVJD SCBDT05GSUdVUkFUSU9OICV7aWRlbnRpdHl9RCAoJXtlbGVtczosIH1zKQorICovCitzdGF0aWMg T2JqVHJlZSAqCitkZXBhcnNlX0RlZmluZVN0bXRfVFNDb25maWcoT2lkIG9iamVjdElkLCBEZWZp bmVTdG10ICpkZWZpbmUsCisJCQkJCQkJT2JqZWN0QWRkcmVzcyBjb3BpZWQpCit7CisJSGVhcFR1 cGxlCXRzY1R1cDsKKwlIZWFwVHVwbGUJdHNwVHVwOworCU9ialRyZWUgICAgKnJldDsKKwlPYmpU cmVlICAgICp0bXA7CisJRm9ybV9wZ190c19jb25maWcgdHNjRm9ybTsKKwlGb3JtX3BnX3RzX3Bh cnNlciB0c3BGb3JtOworCUxpc3QJICAgKmxpc3QgPSBOSUw7CisKKwl0c2NUdXAgPSBTZWFyY2hT eXNDYWNoZTEoVFNDT05GSUdPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAo IUhlYXBUdXBsZUlzVmFsaWQodHNjVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBm YWlsZWQgZm9yIHRleHQgc2VhcmNoIGNvbmZpZ3VyYXRpb24gd2l0aCBPSUQgJXUiLAorCQkJIG9i amVjdElkKTsKKwl0c2NGb3JtID0gKEZvcm1fcGdfdHNfY29uZmlnKSBHRVRTVFJVQ1QodHNjVHVw KTsKKworCXRzcFR1cCA9IFNlYXJjaFN5c0NhY2hlMShUU1BBUlNFUk9JRCwgT2JqZWN0SWRHZXRE YXR1bSh0c2NGb3JtLT5jZmdwYXJzZXIpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHNwVHVw KSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHRleHQgc2VhcmNoIHBh cnNlciAldSIsCisJCQkgdHNjRm9ybS0+Y2ZncGFyc2VyKTsKKwl0c3BGb3JtID0gKEZvcm1fcGdf dHNfcGFyc2VyKSBHRVRTVFJVQ1QodHNwVHVwKTsKKworCS8qCisJICogQWRkIHRoZSBkZWZpbml0 aW9uIGNsYXVzZS4gIElmIHdlIGhhdmUgQ09QWSdlZCBhbiBleGlzdGluZyBjb25maWcsIGFkZAor CSAqIGEgQ09QWSBjbGF1c2U7IG90aGVyd2lzZSBhZGQgYSBQQVJTRVIgY2xhdXNlLgorCSAqLwor CS8qIENPUFkgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQ09QWT0iLCAxLAorCQkJCQkJICJj bGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiY29weSIpOworCWlmIChPaWRJc1ZhbGlkKGNvcGllZC5v YmplY3RJZCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7dHNjb25maWd9RCIsCisJ CQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChUU0NvbmZpZ1JlbGF0aW9uSWQsCisJ CQkJCQkJCQkJCQkJCSBjb3BpZWQub2JqZWN0SWQpKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJl c2VudCh0bXApOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkp OworCisJLyogUEFSU0VSICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlBBUlNFUj0iLCAxLAor CQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicGFyc2VyIik7CisJaWYgKGNvcGllZC5v YmplY3RJZCA9PSBJbnZhbGlkT2lkKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3Bh cnNlcn1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHRzcEZvcm0tPnByc25h bWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkgIE5hbWVTdHIodHNwRm9ybS0+cHJzbmFtZSkpKTsKKwll bHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5l d19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBU RVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OICV7aWRlbnRpdHl9RCAoJXtlbGVtczosIH1zKSIsIDIs CisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWUodHNjRm9ybS0+Y2ZnbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBOYW1lU3Ry KHRzY0Zvcm0tPmNmZ25hbWUpKSwKKwkJCQkJCSAiZWxlbXMiLCBPYmpUeXBlQXJyYXksIGxpc3Qp OworCisJUmVsZWFzZVN5c0NhY2hlKHRzcFR1cCk7CisJUmVsZWFzZVN5c0NhY2hlKHRzY1R1cCk7 CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDUkVBVEUgVEVYVCBTRUFSQ0gg UEFSU0VSIHN0YXRlbWVudC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFIFRFWFQg U0VBUkNIIFBBUlNFUiAle2lkZW50aXR5fUQgKCV7ZWxlbXM6LCB9cykKKyAqLworc3RhdGljIE9i alRyZWUgKgorZGVwYXJzZV9EZWZpbmVTdG10X1RTUGFyc2VyKE9pZCBvYmplY3RJZCwgRGVmaW5l U3RtdCAqZGVmaW5lKQoreworCUhlYXBUdXBsZQl0c3BUdXA7CisJT2JqVHJlZSAgICAqcmV0Owor CU9ialRyZWUgICAgKnRtcDsKKwlMaXN0CSAgICpsaXN0ID0gTklMOworCUZvcm1fcGdfdHNfcGFy c2VyIHRzcEZvcm07CisKKwl0c3BUdXAgPSBTZWFyY2hTeXNDYWNoZTEoVFNQQVJTRVJPSUQsIE9i amVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHNwVHVw KSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHRleHQgc2VhcmNoIHBh cnNlciB3aXRoIE9JRCAldSIsCisJCQkgb2JqZWN0SWQpOworCXRzcEZvcm0gPSAoRm9ybV9wZ190 c19wYXJzZXIpIEdFVFNUUlVDVCh0c3BUdXApOworCisJLyogQWRkIHRoZSBkZWZpbml0aW9uIGNs YXVzZSAqLworCS8qIFNUQVJUICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlNUQVJUPSV7cHJv Y2VkdXJlfUQiLCAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAic3RhcnQiLAor CQkJCQkJICJwcm9jZWR1cmUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSB0c3BGb3Jt LT5wcnNzdGFydCkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRt cCkpOworCisJLyogR0VUVE9LRU4gKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiR0VUVE9LRU49 JXtwcm9jZWR1cmV9RCIsIDIsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJnZXR0 b2tlbiIsCisJCQkJCQkgInByb2NlZHVyZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJ IHRzcEZvcm0tPnByc3Rva2VuKSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9v YmplY3QodG1wKSk7CisKKwkvKiBFTkQgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiRU5EPSV7 cHJvY2VkdXJlfUQiLCAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiZW5kIiwK KwkJCQkJCSAicHJvY2VkdXJlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgdHNwRm9y bS0+cHJzZW5kKSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1w KSk7CisKKwkvKiBMRVhUWVBFUyAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJMRVhUWVBFUz0l e3Byb2NlZHVyZX1EIiwgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImxleHR5 cGVzIiwKKwkJCQkJCSAicHJvY2VkdXJlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkg dHNwRm9ybS0+cHJzbGV4dHlwZSkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rf b2JqZWN0KHRtcCkpOworCisJLyogSEVBRExJTkUgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgi SEVBRExJTkU9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImhlYWRsaW5l Iik7CisJaWYgKE9pZElzVmFsaWQodHNwRm9ybS0+cHJzaGVhZGxpbmUpKQorCQlhcHBlbmRfb2Jq ZWN0X29iamVjdCh0bXAsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0c3BGb3Jt LT5wcnNoZWFkbGluZSkpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcCk7CisJbGlz dCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwlyZXQgPSBuZXdf b2JqdHJlZV9WQSgiQ1JFQVRFIFRFWFQgU0VBUkNIIFBBUlNFUiAle2lkZW50aXR5fUQgKCV7ZWxl bXM6LCB9cykiLCAyLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkg bmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHRzcEZvcm0tPnByc25hbWVzcGFjZSwKKwkJCQkJCQkJ CQkJCSAgTmFtZVN0cih0c3BGb3JtLT5wcnNuYW1lKSksCisJCQkJCQkgImVsZW1zIiwgT2JqVHlw ZUFycmF5LCBsaXN0KTsKKworCVJlbGVhc2VTeXNDYWNoZSh0c3BUdXApOworCXJldHVybiByZXQ7 Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ1JFQVRFIFRFWFQgU0VBUkNIIERJQ1RJT05BUlkgc3Rh dGVtZW50LgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgVEVYVCBTRUFSQ0ggRElD VElPTkFSWSAle2lkZW50aXR5fUQgKCV7ZWxlbXM6LCB9cykKKyAqLworc3RhdGljIE9ialRyZWUg KgorZGVwYXJzZV9EZWZpbmVTdG10X1RTRGljdGlvbmFyeShPaWQgb2JqZWN0SWQsIERlZmluZVN0 bXQgKmRlZmluZSkKK3sKKwlIZWFwVHVwbGUJdHNkVHVwOworCU9ialRyZWUgICAgKnJldDsKKwlP YmpUcmVlICAgICp0bXA7CisJTGlzdAkgICAqbGlzdCA9IE5JTDsKKwlEYXR1bQkJb3B0aW9uczsK Kwlib29sCQlpc251bGw7CisJRm9ybV9wZ190c19kaWN0IHRzZEZvcm07CisKKwl0c2RUdXAgPSBT ZWFyY2hTeXNDYWNoZTEoVFNESUNUT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJ aWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHRzZFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29r dXAgZmFpbGVkIGZvciB0ZXh0IHNlYXJjaCBkaWN0aW9uYXJ5IHdpdGggT0lEICV1IiwKKwkJCSBv YmplY3RJZCk7CisJdHNkRm9ybSA9IChGb3JtX3BnX3RzX2RpY3QpIEdFVFNUUlVDVCh0c2RUdXAp OworCisKKworCS8qIEFkZCB0aGUgZGVmaW5pdGlvbiBjbGF1c2UgKi8KKwkvKiBURU1QTEFURSAq LworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJURU1QTEFURT0iLCAxLAorCQkJCQkJICJjbGF1c2Ui LCBPYmpUeXBlU3RyaW5nLCAidGVtcGxhdGUiKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAs ICIle3RlbXBsYXRlfUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChUU1Rl bXBsYXRlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgdHNkRm9ybS0+ZGljdHRlbXBsYXRlKSk7 CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKgor CSAqIG9wdGlvbnMuICBYWFggdGhpcyBpcyBhIHByZXR0eSB1c2VsZXNzIHJlcHJlc2VudGF0aW9u LCBidXQgd2UgY2FuJ3QgZG8KKwkgKiBiZXR0ZXIgd2l0aG91dCBtb3JlIHRzX2NhY2hlLmMgY29v cGVyYXRpb24gLi4uCisJICovCisJb3B0aW9ucyA9IFN5c0NhY2hlR2V0QXR0cihUU0RJQ1RPSUQs IHRzZFR1cCwKKwkJCQkJCQkgIEFudW1fcGdfdHNfZGljdF9kaWN0aW5pdG9wdGlvbiwKKwkJCQkJ CQkgICZpc251bGwpOworCXRtcCA9IG5ld19vYmp0cmVlKCIiKTsKKwlpZiAoIWlzbnVsbCkKKwkJ YXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXtvcHRpb25zfXMiLCAib3B0aW9ucyIsCisJCQkJ CQkJIFRleHREYXR1bUdldENTdHJpbmcob3B0aW9ucykpOworCWVsc2UKKwkJYXBwZW5kX25vdF9w cmVzZW50KHRtcCk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1w KSk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIFRFWFQgU0VBUkNIIERJQ1RJT05B UlkgJXtpZGVudGl0eX1EICgle2VsZW1zOiwgfXMpIiwgMiwKKwkJCQkJCSAiaWRlbnRpdHkiLCBP YmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZSh0c2RGb3JtLT5k aWN0bmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKHRzZEZvcm0tPmRpY3RuYW1lKSks CisJCQkJCQkgImVsZW1zIiwgT2JqVHlwZUFycmF5LCBsaXN0KTsKKworCVJlbGVhc2VTeXNDYWNo ZSh0c2RUdXApOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ1JFQVRFIFRF WFQgU0VBUkNIIFRFTVBMQVRFIHN0YXRlbWVudC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICog Q1JFQVRFIFRFWFQgU0VBUkNIIFRFTVBMQVRFICV7aWRlbnRpdHl9RCAoJXtlbGVtczosIH1zKQor ICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0RlZmluZVN0bXRfVFNUZW1wbGF0ZShPaWQg b2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSkKK3sKKwlIZWFwVHVwbGUJdHN0VHVwOworCU9i alRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICp0bXA7CisJTGlzdAkgICAqbGlzdCA9IE5JTDsK KwlGb3JtX3BnX3RzX3RlbXBsYXRlIHRzdEZvcm07CisKKwl0c3RUdXAgPSBTZWFyY2hTeXNDYWNo ZTEoVFNURU1QTEFURU9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVh cFR1cGxlSXNWYWxpZCh0c3RUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxl ZCBmb3IgdGV4dCBzZWFyY2ggdGVtcGxhdGUgd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsK Kwl0c3RGb3JtID0gKEZvcm1fcGdfdHNfdGVtcGxhdGUpIEdFVFNUUlVDVCh0c3RUdXApOworCisJ LyogQWRkIHRoZSBkZWZpbml0aW9uIGNsYXVzZSAqLworCS8qIElOSVQgKi8KKwl0bXAgPSBuZXdf b2JqdHJlZV9WQSgiSU5JVD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAi aW5pdCIpOworCWlmIChPaWRJc1ZhbGlkKHRzdEZvcm0tPnRtcGxpbml0KSkKKwkJYXBwZW5kX29i amVjdF9vYmplY3QodG1wLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHN0Rm9y bS0+dG1wbGluaXQpKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCWxpc3Qg PSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogTEVYSVpFICov CisJdG1wID0gbmV3X29ianRyZWVfVkEoIkxFWElaRT0le3Byb2NlZHVyZX1EIiwgMiwKKwkJCQkJ CSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImxleGl6ZSIsCisJCQkJCQkgInByb2NlZHVyZSIs IE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2Nl ZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIHRzdEZvcm0tPnRtcGxsZXhpemUpKTsKKwls aXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCXJldCA9IG5l d19vYmp0cmVlX1ZBKCJDUkVBVEUgVEVYVCBTRUFSQ0ggVEVNUExBVEUgJXtpZGVudGl0eX1EICgl e2VsZW1zOiwgfXMpIiwgMiwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJ CQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZSh0c3RGb3JtLT50bXBsbmFtZXNwYWNlLAorCQkJ CQkJCQkJCQkJICBOYW1lU3RyKHRzdEZvcm0tPnRtcGxuYW1lKSksCisJCQkJCQkgImVsZW1zIiwg T2JqVHlwZUFycmF5LCBsaXN0KTsKKworCVJlbGVhc2VTeXNDYWNoZSh0c3RUdXApOworCXJldHVy biByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFMVEVSIFRFWFQgU0VBUkNIIENPTkZJR1VS QVRJT04gc3RhdGVtZW50LgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTFRFUiBURVhUIFNF QVJDSCBDT05GSUdVUkFUSU9OICV7aWRlbnRpdHl9RCBBREQgTUFQUElORworICogRk9SICV7dG9r ZW50eXBlOiwgfUkgV0lUSCAle2RpY3Rpb25hcmllczosIH1ECisgKglPUgorICogQUxURVIgVEVY VCBTRUFSQ0ggQ09ORklHVVJBVElPTiAle2lkZW50aXR5fUQgRFJPUCBNQVBQSU5HICV7aWZfZXhp c3RzfXMKKyAqIEZPUiAle3Rva2VudHlwZX1JCisgKglPUgorICogQUxURVIgVEVYVCBTRUFSQ0gg Q09ORklHVVJBVElPTiAle2lkZW50aXR5fUQgQUxURVIgTUFQUElORworICogRk9SICV7dG9rZW50 eXBlOiwgfUkgV0lUSCAle2RpY3Rpb25hcmllczosIH1ECisgKglPUgorICogQUxURVIgVEVYVCBT RUFSQ0ggQ09ORklHVVJBVElPTiAle2lkZW50aXR5fUQgQUxURVIgTUFQUElORworICogUkVQTEFD RSAle29sZF9kaWN0aW9uYXJ5fUQgV0lUSCAle25ld19kaWN0aW9uYXJ5fUQKKyAqCU9SCisgKiBB TFRFUiBURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OICV7aWRlbnRpdHl9RCBBTFRFUiBNQVBQSU5H CisgKiBGT1IgJXt0b2tlbnR5cGU6LCB9SSBSRVBMQUNFICV7b2xkX2RpY3Rpb25hcnl9RCBXSVRI ICV7bmV3X2RpY3Rpb25hcnl9RAorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVy VFNDb25maWd1cmF0aW9uU3RtdChDb2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJQWx0ZXJUU0Nv bmZpZ3VyYXRpb25TdG10ICpub2RlID0gKEFsdGVyVFNDb25maWd1cmF0aW9uU3RtdCAqKSBjbWQt PnBhcnNldHJlZTsKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqdG1wOworCUxpc3QJ ICAgKmxpc3QgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKwlpbnQJCQlpOworCisJcmV0ID0g bmV3X29ianRyZWUoIkFMVEVSIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04iKTsKKworCS8qIERl dGVybWluZSB0aGUgZm9ybWF0IHN0cmluZyBhcHByb3ByaWF0ZSB0byBlYWNoIHN1YmNvbW1hbmQg Ki8KKwlzd2l0Y2ggKG5vZGUtPmtpbmQpCisJeworCQljYXNlIEFMVEVSX1RTQ09ORklHX0FERF9N QVBQSU5HOgorCQkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtpZGVudGl0eX1EIEFERCBN QVBQSU5HIiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChjbWQtPmQuYXRz Y2ZnLmFkZHJlc3MuY2xhc3NJZCwKKwkJCQkJCQkJCQkJCQkJCSBjbWQtPmQuYXRzY2ZnLmFkZHJl c3Mub2JqZWN0SWQpKTsKKwkJCWJyZWFrOworCisJCWNhc2UgQUxURVJfVFNDT05GSUdfRFJPUF9N QVBQSU5HOgorCQkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtpZGVudGl0eX1EIERST1Ag TUFQUElORyIsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoY21kLT5kLmF0 c2NmZy5hZGRyZXNzLmNsYXNzSWQsCisJCQkJCQkJCQkJCQkJCQkgY21kLT5kLmF0c2NmZy5hZGRy ZXNzLm9iamVjdElkKSk7CisJCQl0bXAgPSBuZXdfb2JqdHJlZSgiSUYgRVhJU1RTIik7CisJCQlh cHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIG5vZGUtPm1pc3Npbmdfb2spOworCQkJ YXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtpZl9leGlzdHN9cyIsIHRtcCk7CisJCQlicmVh azsKKworCQljYXNlIEFMVEVSX1RTQ09ORklHX0FMVEVSX01BUFBJTkdfRk9SX1RPS0VOOgorCQlj YXNlIEFMVEVSX1RTQ09ORklHX1JFUExBQ0VfRElDVDoKKwkJY2FzZSBBTFRFUl9UU0NPTkZJR19S RVBMQUNFX0RJQ1RfRk9SX1RPS0VOOgorCQkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtp ZGVudGl0eX1EIEFMVEVSIE1BUFBJTkciLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lX2lkKGNtZC0+ZC5hdHNjZmcuYWRkcmVzcy5jbGFzc0lkLAorCQkJCQkJCQkJCQkJCQkJIGNt ZC0+ZC5hdHNjZmcuYWRkcmVzcy5vYmplY3RJZCkpOworCQkJYnJlYWs7CisJfQorCisJLyogQWRk IHRoZSBhZmZlY3RlZCB0b2tlbiBsaXN0LCBmb3Igc3ViY29tbWFuZHMgdGhhdCBoYXZlIG9uZSAq LworCWlmIChub2RlLT5raW5kID09IEFMVEVSX1RTQ09ORklHX0FERF9NQVBQSU5HIHx8CisJCW5v ZGUtPmtpbmQgPT0gQUxURVJfVFNDT05GSUdfQUxURVJfTUFQUElOR19GT1JfVE9LRU4gfHwKKwkJ bm9kZS0+a2luZCA9PSBBTFRFUl9UU0NPTkZJR19SRVBMQUNFX0RJQ1RfRk9SX1RPS0VOIHx8CisJ CW5vZGUtPmtpbmQgPT0gQUxURVJfVFNDT05GSUdfRFJPUF9NQVBQSU5HKQorCXsKKwkJZm9yZWFj aChjZWxsLCBub2RlLT50b2tlbnR5cGUpCisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3Ry aW5nX29iamVjdChzdHJWYWwobGZpcnN0KGNlbGwpKSkpOworCQlhcHBlbmRfYXJyYXlfb2JqZWN0 KHJldCwgIkZPUiAle3Rva2VudHlwZTosIH1JIiwgbGlzdCk7CisJfQorCisJLyogQWRkIGZ1cnRo ZXIgc3ViY29tbWFuZC1zcGVjaWZpYyBlbGVtZW50cyAqLworCWlmIChub2RlLT5raW5kID09IEFM VEVSX1RTQ09ORklHX0FERF9NQVBQSU5HIHx8CisJCW5vZGUtPmtpbmQgPT0gQUxURVJfVFNDT05G SUdfQUxURVJfTUFQUElOR19GT1JfVE9LRU4pCisJeworCQkvKiBBREQgTUFQUElORyBhbmQgQUxU RVIgTUFQUElORyBGT1IgbmVlZCBhIGxpc3Qgb2YgZGljdGlvbmFyaWVzICovCisJCWxpc3QgPSBO SUw7CisJCWZvciAoaSA9IDA7IGkgPCBjbWQtPmQuYXRzY2ZnLm5kaWN0czsgaSsrKQorCQl7CisJ CQlPYmpUcmVlICAgICpkaWN0X29iajsKKworCQkJZGljdF9vYmogPSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWVfaWQoVFNEaWN0aW9uYXJ5UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCSAgY21kLT5k LmF0c2NmZy5kaWN0SWRzW2ldKTsKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsCisJCQkJCQkgICBu ZXdfb2JqZWN0X29iamVjdChkaWN0X29iaikpOworCQl9CisJCWFwcGVuZF9hcnJheV9vYmplY3Qo cmV0LCAiV0lUSCAle2RpY3Rpb25hcmllczosIH1EIiwgbGlzdCk7CisJfQorCWVsc2UgaWYgKG5v ZGUtPmtpbmQgPT0gQUxURVJfVFNDT05GSUdfUkVQTEFDRV9ESUNUIHx8CisJCQkgbm9kZS0+a2lu ZCA9PSBBTFRFUl9UU0NPTkZJR19SRVBMQUNFX0RJQ1RfRk9SX1RPS0VOKQorCXsKKwkJLyogVGhl IFJFUExBQ0UgZm9ybXMgd2FudCBvbGQgYW5kIG5ldyBkaWN0aW9uYXJpZXMgKi8KKwkJQXNzZXJ0 KGNtZC0+ZC5hdHNjZmcubmRpY3RzID09IDIpOworCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQs ICJSRVBMQUNFICV7b2xkX2RpY3Rpb25hcnl9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZV9pZChUU0RpY3Rpb25hcnlSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgY21kLT5k LmF0c2NmZy5kaWN0SWRzWzBdKSk7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIldJVEgg JXtuZXdfZGljdGlvbmFyeX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lk KFRTRGljdGlvbmFyeVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBjbWQtPmQuYXRzY2ZnLmRp Y3RJZHNbMV0pKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhbiBB TFRFUiBURVhUIFNFQVJDSCBESUNUSU9OQVJZIHN0YXRlbWVudC4KKyAqCisgKiBWZXJib3NlIHN5 bnRheAorICogQUxURVIgVEVYVCBTRUFSQ0ggRElDVElPTkFSWSAle2lkZW50aXR5fUQgKCV7ZGVm aW5pdGlvbjosIH1zKQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyVFNEaWN0 aW9uYXJ5U3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlPYmpUcmVlICAg ICpyZXQ7CisJT2JqVHJlZSAgICAqdG1wOworCURhdHVtCQlvcHRpb25zOworCUxpc3QJICAgKmRl ZmluaXRpb24gPSBOSUw7CisJYm9vbAkJaXNudWxsOworCUhlYXBUdXBsZQl0c2RUdXA7CisJRm9y bV9wZ190c19kaWN0IHRzZEZvcm07CisKKwl0c2RUdXAgPSBTZWFyY2hTeXNDYWNoZTEoVFNESUNU T0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlk KHRzZFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0ZXh0IHNl YXJjaCBkaWN0aW9uYXJ5IHdpdGggT0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisJdHNkRm9ybSA9 IChGb3JtX3BnX3RzX2RpY3QpIEdFVFNUUlVDVCh0c2RUdXApOworCisJLyoKKwkgKiBBZGQgdGhl IGRlZmluaXRpb24gbGlzdCBhY2NvcmRpbmcgdG8gdGhlIHBnX3RzX2RpY3QgZGljdGluaXRvcHRp b24KKwkgKiBjb2x1bW4KKwkgKi8KKwlvcHRpb25zID0gU3lzQ2FjaGVHZXRBdHRyKFRTRElDVE9J RCwgdHNkVHVwLAorCQkJCQkJCSAgQW51bV9wZ190c19kaWN0X2RpY3Rpbml0b3B0aW9uLAorCQkJ CQkJCSAgJmlzbnVsbCk7CisJdG1wID0gbmV3X29ianRyZWUoIiIpOworCWlmICghaXNudWxsKQor CQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICIle29wdGlvbnN9cyIsICJvcHRpb25zIiwKKwkJ CQkJCQkgVGV4dERhdHVtR2V0Q1N0cmluZyhvcHRpb25zKSk7CisJZWxzZQorCQlhcHBlbmRfbm90 X3ByZXNlbnQodG1wKTsKKworCWRlZmluaXRpb24gPSBsYXBwZW5kKGRlZmluaXRpb24sIG5ld19v YmplY3Rfb2JqZWN0KHRtcCkpOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIFRFWFQg U0VBUkNIIERJQ1RJT05BUlkgJXtpZGVudGl0eX1EICgle2RlZmluaXRpb246LCB9cykiLCAyLAor CQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lKHRzZEZvcm0tPmRpY3RuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIo dHNkRm9ybS0+ZGljdG5hbWUpKSwKKwkJCQkJCSAiZGVmaW5pdGlvbiIsIE9ialR5cGVBcnJheSwg ZGVmaW5pdGlvbik7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHNkVHVwKTsKKwlyZXR1cm4gcmV0Owor fQorCisvKgorICogZGVwYXJzZV9WaWV3U3RtdAorICoJCWRlcGFyc2UgYSBWaWV3U3RtdAorICoK KyAqIEdpdmVuIGEgdmlldyBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwg cmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4K KyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFICV7b3JfcmVwbGFjZX1zICV7cGVyc2lz dGVuY2V9cyBWSUVXICV7aWRlbnRpdHl9RCBBUyAle3F1ZXJ5fXMKKyAqLworc3RhdGljIE9ialRy ZWUgKgorZGVwYXJzZV9WaWV3U3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sK KwlWaWV3U3RtdCAgICpub2RlID0gKFZpZXdTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAg ICpyZXQ7CisJUmVsYXRpb24JcmVsYXRpb247CisKKwlyZWxhdGlvbiA9IHJlbGF0aW9uX29wZW4o b2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JF QVRFICV7b3JfcmVwbGFjZX1zICV7cGVyc2lzdGVuY2V9cyBWSUVXICV7aWRlbnRpdHl9RCBBUyAl e3F1ZXJ5fXMiLCA0LAorCQkJCQkJICJvcl9yZXBsYWNlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJ CSBub2RlLT5yZXBsYWNlID8gIk9SIFJFUExBQ0UiIDogIiIsCisJCQkJCQkgInBlcnNpc3RlbmNl IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBnZXRfcGVyc2lzdGVuY2Vfc3RyKHJlbGF0aW9uLT5y ZF9yZWwtPnJlbHBlcnNpc3RlbmNlKSwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0 LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShyZWxhdGlvbi0+cmRfcmVsLT5yZWxu YW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbGF0aW9u KSksCisJCQkJCQkgInF1ZXJ5IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBwZ19nZXRfdmlld2Rl Zl9pbnRlcm5hbChvYmplY3RJZCkpOworCisJcmVsYXRpb25fY2xvc2UocmVsYXRpb24sIEFjY2Vz c1NoYXJlTG9jayk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgQ1JFQVRFIE1h dGVyaWFsaXplZCBWaWV3IHN0YXRlbWVudCwgaXQgaXMgYSB2YXJpYW50IG9mCisgKiBDcmVhdGVU YWJsZUFzU3RtdAorICoKKyAqIE5vdGUgdGhhdCBDUkVBVEUgVEFCTEUgQVMgU0VMRUNUIElOVE8g Y2FuIGFsc28gYmUgZGVwYXJzZWQgYnkKKyAqIGRlcGFyc2VfQ3JlYXRlVGFibGVBc1N0bXQgdG8g cmVtb3ZlIHRoZSBTRUxFQ1QgSU5UTyBjbGF1c2UuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAq IENSRUFURSAle3BlcnNpc3RlbmNlfXMgW01BVEVSSUFMSVpFRCBWSUVXIHwgVEFCTEVdICV7aWZf bm90X2V4aXN0c31zCisgKiAJCSV7aWRlbnRpdHl9RCAle2NvbHVtbnN9cyBbJXtvbl9jb21taXR9 c10gJXt0YWJsZXNwYWNlfXMKKyAqICAJCUFTICV7cXVlcnl9cyAle3dpdGhfbm9fZGF0YX1zIgor ICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVRhYmxlQXNTdG10X3ZhbmlsbGEo T2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlVGFibGVBc1N0bXQgKm5v ZGUgPSAoQ3JlYXRlVGFibGVBc1N0bXQgKikgcGFyc2V0cmVlOworCVJlbGF0aW9uCXJlbGF0aW9u ID0gcmVsYXRpb25fb3BlbihvYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlPYmpUcmVlICAg ICpyZXQ7CisJT2JqVHJlZSAgICAqdG1wOworCU9ialRyZWUgICAgKnRtcDI7CisJY2hhcgkgICAq Zm10OworCUxpc3QJICAgKmxpc3QgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKworCS8qIFJl amVjdCB1bnN1cHBvcnRlZCBjYXNlIHJpZ2h0IGF3YXkuICovCisJaWYgKCgoUXVlcnkgKikgKG5v ZGUtPnF1ZXJ5KSktPmNvbW1hbmRUeXBlID09IENNRF9VVElMSVRZKQorCQllbG9nKEVSUk9SLCAi dW5pbXBsZW1lbnRlZCBkZXBhcnNlIG9mIENSRUFURSBUQUJMRSBBUyBFWEVDVVRFIik7CisKKwkv KgorCSAqIE5vdGUgdGhhdCBJTlNFUlQgSU5UTyBpcyBkZXBhcnNlZCBhcyBDUkVBVEUgVEFCTEUg QVMuICBUaGV5IGFyZQorCSAqIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHN5bm9ueW1zIHNvIHRo ZXJlIGlzIG5vIGhhcm0gZnJvbSB0aGlzLgorCSAqLworCWlmIChub2RlLT5vYmp0eXBlID09IE9C SkVDVF9NQVRWSUVXKQorCQlmbXQgPSAiQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBNQVRFUklBTEla RUQgVklFVyAle2lmX25vdF9leGlzdHN9cyAle2lkZW50aXR5fUQiOworCWVsc2UKKwkJZm10ID0g IkNSRUFURSAle3BlcnNpc3RlbmNlfXMgVEFCTEUgJXtpZl9ub3RfZXhpc3RzfXMgJXtpZGVudGl0 eX1EIjsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMywKKwkJCQkJCSAicGVyc2lzdGVu Y2UiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIGdldF9wZXJzaXN0ZW5jZV9zdHIobm9kZS0+aW50 by0+cmVsLT5yZWxwZXJzaXN0ZW5jZSksCisJCQkJCQkgImlmX25vdF9leGlzdHMiLCBPYmpUeXBl U3RyaW5nLAorCQkJCQkJIG5vZGUtPmlmX25vdF9leGlzdHMgPyAiSUYgTk9UIEVYSVNUUyIgOiAi IiwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIG9iamVj dElkKSk7CisKKwkvKiBDT0xVTU5TIGNsYXVzZSAqLworCWlmIChub2RlLT5pbnRvLT5jb2xOYW1l cykKKwl7CisJCWZvcmVhY2goY2VsbCwgbm9kZS0+aW50by0+Y29sTmFtZXMpCisJCQlsaXN0ID0g bGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdChzdHJWYWwobGZpcnN0KGNlbGwpKSkpOwor CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCIoJXtjb2x1bW5zOiwgfUkpIiwgMSwKKwkJCQkJCQkg ImNvbHVtbnMiLCBPYmpUeXBlQXJyYXksIGxpc3QpOworCX0KKwllbHNlCisJCXRtcCA9IG5ld19v Ymp0cmVlX1ZBKCIiLCAxLAorCQkJCQkJCSAicHJlc2VudCIsIE9ialR5cGVCb29sLCBmYWxzZSk7 CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2NvbHVtbnN9cyIsIHRtcCk7CisKKwkv KiBVU0lORyBjbGF1c2UgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZSgiVVNJTkciKTsKKwlpZiAobm9k ZS0+aW50by0+YWNjZXNzTWV0aG9kKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICIle2Fj Y2Vzc19tZXRob2R9SSIsICJhY2Nlc3NfbWV0aG9kIiwKKwkJCQkJCQkgbm9kZS0+aW50by0+YWNj ZXNzTWV0aG9kKTsKKwllbHNlCisJeworCQlhcHBlbmRfbnVsbF9vYmplY3QodG1wLCAiJXthY2Nl c3NfbWV0aG9kfUkiKTsKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcCk7CisJfQorCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHJldCwgIiV7YWNjZXNzX21ldGhvZH1zIiwgdG1wKTsKKworCS8qIFdJVEgg Y2xhdXNlICovCisJdG1wID0gbmV3X29ianRyZWUoIldJVEgiKTsKKwlsaXN0ID0gTklMOworCisJ Zm9yZWFjaChjZWxsLCBub2RlLT5pbnRvLT5vcHRpb25zKQorCXsKKwkJRGVmRWxlbSAgICAqb3B0 ID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCisJCXRtcDIgPSBkZXBhcnNlX0RlZkVsZW0o b3B0LCBmYWxzZSk7CisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRt cDIpKTsKKwl9CisKKwlpZiAobGlzdCkKKwkJYXBwZW5kX2FycmF5X29iamVjdCh0bXAsICIoJXt3 aXRoOiwgfXMpIiwgbGlzdCk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwor CWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7d2l0aF9jbGF1c2V9cyIsIHRtcCk7CisKKwkv KiBPTiBDT01NSVQgY2xhdXNlLiAgQ1JFQVRFIE1BVEVSSUFMSVpFRCBWSUVXIGRvZXNuJ3QgaGF2 ZSBvbmUgKi8KKwlpZiAobm9kZS0+b2JqdHlwZSA9PSBPQkpFQ1RfVEFCTEUpCisJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHJldCwgIiV7b25fY29tbWl0fXMiLAorCQkJCQkJCSBkZXBhcnNlX09uQ29t bWl0Q2xhdXNlKG5vZGUtPmludG8tPm9uQ29tbWl0KSk7CisKKwkvKiBUQUJMRVNQQUNFIGNsYXVz ZSAqLworCXRtcCA9IG5ld19vYmp0cmVlKCJUQUJMRVNQQUNFICV7dGFibGVzcGFjZX1JIik7CisJ aWYgKG5vZGUtPmludG8tPnRhYmxlU3BhY2VOYW1lKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0 bXAsICIle3RhYmxlc3BhY2V9cyIsICJ0YWJsZXNwYWNlIiwKKwkJCQkJCQkgbm9kZS0+aW50by0+ dGFibGVTcGFjZU5hbWUpOworCWVsc2UKKwl7CisJCWFwcGVuZF9udWxsX29iamVjdCh0bXAsICIl e3RhYmxlc3BhY2V9SSIpOworCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwl9CisJYXBwZW5k X29iamVjdF9vYmplY3QocmV0LCAiJXt0YWJsZXNwYWNlfXMiLCB0bXApOworCisJLyogQWRkIHRo ZSBxdWVyeSAqLworCUFzc2VydChJc0Eobm9kZS0+cXVlcnksIFF1ZXJ5KSk7CisJYXBwZW5kX3N0 cmluZ19vYmplY3QocmV0LCAiQVMgJXtxdWVyeX1zIiwgInF1ZXJ5IiwKKwkJCQkJCSBwZ19nZXRf cXVlcnlkZWYoKFF1ZXJ5ICopIG5vZGUtPnF1ZXJ5LCBmYWxzZSkpOworCisJLyogQWRkIGEgV0lU SCBOTyBEQVRBIGNsYXVzZSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJXSVRIIE5PIERBVEEi LCAxLAorCQkJCQkJICJwcmVzZW50IiwgT2JqVHlwZUJvb2wsCisJCQkJCQkgbm9kZS0+aW50by0+ c2tpcERhdGEgPyB0cnVlIDogZmFsc2UpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7 d2l0aF9ub19kYXRhfXMiLCB0bXApOworCisJcmVsYXRpb25fY2xvc2UocmVsYXRpb24sIEFjY2Vz c1NoYXJlTG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0 ZVRyaWdTdG10IChDUkVBVEUgVFJJR0dFUikKKyAqCisgKiBHaXZlbiBhIHRyaWdnZXIgT0lEIGFu ZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiBy ZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgK KyAqIENSRUFURSAle2NvbnN0cmFpbnR9cyBUUklHR0VSICV7bmFtZX1JICV7dGltZX1zICV7ZXZl bnRzOiBPUiB9cyBPTgorICogJXtyZWxhdGlvbn1EICV7ZnJvbV90YWJsZX1zICV7Y29uc3RyYWlu dF9hdHRyczogfXMgRk9SIEVBQ0gKKyAqICV7Zm9yX2VhY2h9cyAle3doZW59cyBFWEVDVVRFIFBS T0NFRFVSRSAle2Z1bmN0aW9ufXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVh dGVUcmlnU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVUcmln U3RtdCAqbm9kZSA9IChDcmVhdGVUcmlnU3RtdCAqKSBwYXJzZXRyZWU7CisJUmVsYXRpb24JcGdf dHJpZ2dlcjsKKwlIZWFwVHVwbGUJdHJpZ1R1cDsKKwlGb3JtX3BnX3RyaWdnZXIgdHJpZ0Zvcm07 CisJT2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUgICAgKnRtcF9vYmo7CisJaW50CQkJdGduYXJn czsKKwlMaXN0CSAgICpsaXN0ID0gTklMOworCUxpc3QJICAgKmV2ZW50czsKKwljaGFyCSAgICp0 cmlndGltaW5nOworCisJcGdfdHJpZ2dlciA9IHRhYmxlX29wZW4oVHJpZ2dlclJlbGF0aW9uSWQs IEFjY2Vzc1NoYXJlTG9jayk7CisKKwl0cmlnVHVwID0gZ2V0X2NhdGFsb2dfb2JqZWN0X2J5X29p ZChwZ190cmlnZ2VyLCBBbnVtX3BnX3RyaWdnZXJfb2lkLCBvYmplY3RJZCk7CisJdHJpZ0Zvcm0g PSAoRm9ybV9wZ190cmlnZ2VyKSBHRVRTVFJVQ1QodHJpZ1R1cCk7CisKKwl0cmlndGltaW5nID0g bm9kZS0+dGltaW5nID09IFRSSUdHRVJfVFlQRV9CRUZPUkUgPyAiQkVGT1JFIiA6CisJCW5vZGUt PnRpbWluZyA9PSBUUklHR0VSX1RZUEVfQUZURVIgPyAiQUZURVIiIDoKKwkJbm9kZS0+dGltaW5n ID09IFRSSUdHRVJfVFlQRV9JTlNURUFEID8gIklOU1RFQUQgT0YiIDoKKwkJTlVMTDsKKwlpZiAo IXRyaWd0aW1pbmcpCisJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgdHJpZ2dlciB0aW1pbmcg dHlwZSAlZCIsIG5vZGUtPnRpbWluZyk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRF ICV7Y29uc3RyYWludH1zIFRSSUdHRVIgJXtuYW1lfUkgJXt0aW1lfXMiLCAzLAorCQkJCQkJICJj b25zdHJhaW50IiwgT2JqVHlwZVN0cmluZywgbm9kZS0+aXNjb25zdHJhaW50ID8gIkNPTlNUUkFJ TlQiIDogIiIsCisJCQkJCQkgIm5hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT50cmlnbmFtZSwK KwkJCQkJCSAidGltZSIsIE9ialR5cGVTdHJpbmcsIHRyaWd0aW1pbmcpOworCisJLyoKKwkgKiBE ZWNvZGUgdGhlIGV2ZW50cyB0aGF0IHRoZSB0cmlnZ2VyIGZpcmVzIGZvci4gIFRoZSBvdXRwdXQg aXMgYSBsaXN0OyBpbgorCSAqIG1vc3QgY2FzZXMgaXQgd2lsbCBqdXN0IGJlIGEgc3RyaW5nIHdp dGggdGhlIGV2ZW50IG5hbWUsIGJ1dCB3aGVuCisJICogdGhlcmUncyBhbiBVUERBVEUgd2l0aCBh IGxpc3Qgb2YgY29sdW1ucywgd2UgcmV0dXJuIGEgSlNPTiBvYmplY3QuCisJICovCisJZXZlbnRz ID0gTklMOworCWlmIChub2RlLT5ldmVudHMgJiBUUklHR0VSX1RZUEVfSU5TRVJUKQorCQlldmVu dHMgPSBsYXBwZW5kKGV2ZW50cywgbmV3X3N0cmluZ19vYmplY3QoIklOU0VSVCIpKTsKKwlpZiAo bm9kZS0+ZXZlbnRzICYgVFJJR0dFUl9UWVBFX0RFTEVURSkKKwkJZXZlbnRzID0gbGFwcGVuZChl dmVudHMsIG5ld19zdHJpbmdfb2JqZWN0KCJERUxFVEUiKSk7CisJaWYgKG5vZGUtPmV2ZW50cyAm IFRSSUdHRVJfVFlQRV9UUlVOQ0FURSkKKwkJZXZlbnRzID0gbGFwcGVuZChldmVudHMsIG5ld19z dHJpbmdfb2JqZWN0KCJUUlVOQ0FURSIpKTsKKwlpZiAobm9kZS0+ZXZlbnRzICYgVFJJR0dFUl9U WVBFX1VQREFURSkKKwl7CisJCWlmIChub2RlLT5jb2x1bW5zID09IE5JTCkKKwkJeworCQkJZXZl bnRzID0gbGFwcGVuZChldmVudHMsIG5ld19zdHJpbmdfb2JqZWN0KCJVUERBVEUiKSk7CisJCX0K KwkJZWxzZQorCQl7CisJCQlPYmpUcmVlICAgICp1cGRhdGU7CisJCQlMaXN0Q2VsbCAgICpjZWxs OworCQkJTGlzdAkgICAqY29scyA9IE5JTDsKKworCQkJLyoKKwkJCSAqIEN1cnJlbnRseSBvbmx5 IFVQREFURSBPRiBjYW4gYmUgb2JqZWN0cyBpbiB0aGUgb3V0cHV0IEpTT04sIGJ1dAorCQkJICog d2UgYWRkIGEgImtpbmQiIGVsZW1lbnQgc28gdGhhdCB1c2VyIGNvZGUgY2FuIGRpc3Rpbmd1aXNo CisJCQkgKiBwb3NzaWJsZSBmdXR1cmUgbmV3IGV2ZW50IHR5cGVzLgorCQkJICovCisJCQl1cGRh dGUgPSBuZXdfb2JqdHJlZV9WQSgiVVBEQVRFIE9GIiwgMSwKKwkJCQkJCQkJCSJraW5kIiwgT2Jq VHlwZVN0cmluZywgInVwZGF0ZV9vZiIpOworCisJCQlmb3JlYWNoKGNlbGwsIG5vZGUtPmNvbHVt bnMpCisJCQl7CisJCQkJY2hhcgkgICAqY29sbmFtZSA9IHN0clZhbChsZmlyc3QoY2VsbCkpOwor CisJCQkJY29scyA9IGxhcHBlbmQoY29scywgbmV3X3N0cmluZ19vYmplY3QoY29sbmFtZSkpOwor CQkJfQorCisJCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHVwZGF0ZSwgIiV7Y29sdW1uczosIH1JIiwg Y29scyk7CisKKwkJCWV2ZW50cyA9IGxhcHBlbmQoZXZlbnRzLCBuZXdfb2JqZWN0X29iamVjdCh1 cGRhdGUpKTsKKwkJfQorCX0KKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIiV7ZXZlbnRzOiBP UiB9cyIsIGV2ZW50cyk7CisKKwl0bXBfb2JqID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lk KFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkgdHJpZ0Zvcm0tPnRncmVsaWQpOworCWFw cGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIk9OICV7cmVsYXRpb259RCIsIHRtcF9vYmopOworCisJ dG1wX29iaiA9IG5ld19vYmp0cmVlKCJGUk9NIik7CisJaWYgKHRyaWdGb3JtLT50Z2NvbnN0cnJl bGlkKQorCXsKKwkJT2JqVHJlZSAgICAqcmVsOworCisJCXJlbCA9IG5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJICB0cmlnRm9ybS0+dGdj b25zdHJyZWxpZCk7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmosICIle3JlbGF0aW9u fUQiLCByZWwpOworCX0KKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKwlh cHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2Zyb21fdGFibGV9cyIsIHRtcF9vYmopOworCisJ aWYgKG5vZGUtPmRlZmVycmFibGUpCisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdf b2JqZWN0KCJERUZFUlJBQkxFIikpOworCWlmIChub2RlLT5pbml0ZGVmZXJyZWQpCisJCWxpc3Qg PSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KCJJTklUSUFMTFkgREVGRVJSRUQiKSk7 CisJYXBwZW5kX2FycmF5X29iamVjdChyZXQsICIle2NvbnN0cmFpbnRfYXR0cnM6IH1zIiwgbGlz dCk7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICJGT1IgRUFDSCAle2Zvcl9lYWNofXMi LCAiZm9yX2VhY2giLAorCQkJCQkJIG5vZGUtPnJvdyA/ICJST1ciIDogIlNUQVRFTUVOVCIpOwor CisJdG1wX29iaiA9IG5ld19vYmp0cmVlKCJXSEVOIik7CisJaWYgKG5vZGUtPndoZW5DbGF1c2Up CisJeworCQlOb2RlCSAgICp3aGVuQ2xhdXNlOworCQlEYXR1bQkJdmFsdWU7CisJCWJvb2wJCWlz bnVsbDsKKworCQl2YWx1ZSA9IGZhc3RnZXRhdHRyKHRyaWdUdXAsIEFudW1fcGdfdHJpZ2dlcl90 Z3F1YWwsCisJCQkJCQkJUmVsYXRpb25HZXREZXNjcihwZ190cmlnZ2VyKSwgJmlzbnVsbCk7CisJ CWlmIChpc251bGwpCisJCQllbG9nKEVSUk9SLCAibnVsbCB0Z3F1YWwgZm9yIHRyaWdnZXIgXCIl c1wiIiwKKwkJCQkgTmFtZVN0cih0cmlnRm9ybS0+dGduYW1lKSk7CisKKwkJd2hlbkNsYXVzZSA9 IHN0cmluZ1RvTm9kZShUZXh0RGF0dW1HZXRDU3RyaW5nKHZhbHVlKSk7CisJCWFwcGVuZF9zdHJp bmdfb2JqZWN0KHRtcF9vYmosICIoJXtjbGF1c2V9cykiLCAiY2xhdXNlIiwKKwkJCQkJCQkgcGdf Z2V0X3RyaWdnZXJfd2hlbmNsYXVzZSh0cmlnRm9ybSwKKwkJCQkJCQkJCQkJCQkgICB3aGVuQ2xh dXNlLAorCQkJCQkJCQkJCQkJCSAgIGZhbHNlKSk7CisJfQorCWVsc2UKKwkJYXBwZW5kX25vdF9w cmVzZW50KHRtcF9vYmopOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7d2hlbn1zIiwg dG1wX29iaik7CisKKwl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIiV7ZnVuY25hbWV9RCIsIDEs CisJCQkJCQkJImZ1bmNuYW1lIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQluZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJdHJpZ0Zv cm0tPnRnZm9pZCkpOworCWxpc3QgPSBOSUw7CisJdGduYXJncyA9IHRyaWdGb3JtLT50Z25hcmdz OworCWlmICh0Z25hcmdzID4gMCkKKwl7CisJCWJ5dGVhCSAgICp0Z2FyZ3M7CisJCWNoYXIJICAg KmFyZ3N0cjsKKwkJYm9vbAkJaXNudWxsOworCQlpbnQJCQlmaW5keDsKKwkJaW50CQkJbGVudGdh cmdzOworCQljaGFyCSAgICpwOworCisJCXRnYXJncyA9IERhdHVtR2V0Qnl0ZWFQKGZhc3RnZXRh dHRyKHRyaWdUdXAsCisJCQkJCQkJCQkJCUFudW1fcGdfdHJpZ2dlcl90Z2FyZ3MsCisJCQkJCQkJ CQkJCVJlbGF0aW9uR2V0RGVzY3IocGdfdHJpZ2dlciksCisJCQkJCQkJCQkJCSZpc251bGwpKTsK KwkJaWYgKGlzbnVsbCkKKwkJCWVsb2coRVJST1IsICJudWxsIHRnYXJncyBmb3IgdHJpZ2dlciBc IiVzXCIiLAorCQkJCSBOYW1lU3RyKHRyaWdGb3JtLT50Z25hbWUpKTsKKwkJYXJnc3RyID0gKGNo YXIgKikgVkFSREFUQSh0Z2FyZ3MpOworCQlsZW50Z2FyZ3MgPSBWQVJTSVpFX0FOWV9FWEhEUih0 Z2FyZ3MpOworCisJCXAgPSBhcmdzdHI7CisJCWZvciAoZmluZHggPSAwOyBmaW5keCA8IHRnbmFy Z3M7IGZpbmR4KyspCisJCXsKKwkJCXNpemVfdAkJdGxlbjsKKworCQkJLyogVmVyaWZ5IHRoYXQg dGhlIGFyZ3VtZW50IGVuY29kaW5nIGlzIGNvcnJlY3QgKi8KKwkJCXRsZW4gPSBzdHJsZW4ocCk7 CisJCQlpZiAocCArIHRsZW4gPj0gYXJnc3RyICsgbGVudGdhcmdzKQorCQkJCWVsb2coRVJST1Is ICJpbnZhbGlkIGFyZ3VtZW50IHN0cmluZyAoJXMpIGZvciB0cmlnZ2VyIFwiJXNcIiIsCisJCQkJ CSBhcmdzdHIsIE5hbWVTdHIodHJpZ0Zvcm0tPnRnbmFtZSkpOworCisJCQlsaXN0ID0gbGFwcGVu ZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdChwKSk7CisKKwkJCXAgKz0gdGxlbiArIDE7CisJCX0K Kwl9CisKKwlhcHBlbmRfZm9ybWF0X3N0cmluZyh0bXBfb2JqLCAiKCIpOworCWFwcGVuZF9hcnJh eV9vYmplY3QodG1wX29iaiwgIiV7YXJnczosIH1MIiwgbGlzdCk7CS8qIG1pZ2h0IGJlIE5JTCAq LworCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRtcF9vYmosICIpIik7CisKKwlhcHBlbmRfb2JqZWN0 X29iamVjdChyZXQsICJFWEVDVVRFIFBST0NFRFVSRSAle2Z1bmN0aW9ufXMiLCB0bXBfb2JqKTsK KworCXRhYmxlX2Nsb3NlKHBnX3RyaWdnZXIsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4g cmV0OworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZVVzZXJNYXBwaW5nU3RtdCAoQ1JFQVRF IFVTRVIgTUFQUElORykKKyAqCisgKiBHaXZlbiBhIFVzZXIgTWFwcGluZyBPSUQgYW5kIHRoZSBw YXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwKKyAqIHJldHVybiBhbiBPYmpUcmVlIHJlcHJlc2Vu dGluZyB0aGUgQ1JFQVRFIFVTRVIgTUFQUElORyBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3lu dGF4CisgKiBDUkVBVEUgVVNFUiBNQVBQSU5HIEZPUiAle3JvbGV9UiBTRVJWRVIgJXtzZXJ2ZXJ9 SQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVVzZXJNYXBwaW5nU3RtdChP aWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVVc2VyTWFwcGluZ1N0bXQg Km5vZGUgPSAoQ3JlYXRlVXNlck1hcHBpbmdTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAg ICpyZXQ7CisJUmVsYXRpb24JcmVsOworCUhlYXBUdXBsZQl0cDsKKwlGb3JtX3BnX3VzZXJfbWFw cGluZyBmb3JtOworCUZvcmVpZ25TZXJ2ZXIgKnNlcnZlcjsKKworCXJlbCA9IHRhYmxlX29wZW4o VXNlck1hcHBpbmdSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCS8qCisJICogTG9v a3VwIG9iamVjdCBpbiB0aGUgY2F0YWxvZywgc28gd2UgZG9uJ3QgaGF2ZSB0byBkZWFsIHdpdGgK KwkgKiBjdXJyZW50X3VzZXIgYW5kIHN1Y2guCisJICovCisJdHAgPSBTZWFyY2hTeXNDYWNoZTEo VVNFUk1BUFBJTkdPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBU dXBsZUlzVmFsaWQodHApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Ig dXNlciBtYXBwaW5nIHdpdGggT0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisKKwlmb3JtID0gKEZv cm1fcGdfdXNlcl9tYXBwaW5nKSBHRVRTVFJVQ1QodHApOworCisJc2VydmVyID0gR2V0Rm9yZWln blNlcnZlcihmb3JtLT51bXNlcnZlcik7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRF IFVTRVIgTUFQUElORyBGT1IgJXtyb2xlfVIgU0VSVkVSICV7c2VydmVyfUkgJXtnZW5lcmljX29w dGlvbnN9cyIsIDMsCisJCQkJCQkgInJvbGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19v Ymp0cmVlX2Zvcl9yb2xlX2lkKGZvcm0tPnVtdXNlciksCisJCQkJCQkgInNlcnZlciIsIE9ialR5 cGVTdHJpbmcsIHNlcnZlci0+c2VydmVybmFtZSwKKwkJCQkJCSAiZ2VuZXJpY19vcHRpb25zIiwg T2JqVHlwZU9iamVjdCwKKwkJCQkJCSBkZXBhcnNlX0Zkd09wdGlvbnMobm9kZS0+b3B0aW9ucywg TlVMTCkpOworCisJUmVsZWFzZVN5c0NhY2hlKHRwKTsKKwl0YWJsZV9jbG9zZShyZWwsIFJvd0V4 Y2x1c2l2ZUxvY2spOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBkZXBhcnNlX0FsdGVyVXNl ck1hcHBpbmcKKyAqCisgKiBHaXZlbiBhIFVzZXIgTWFwcGluZyBPSUQgYW5kIHRoZSBwYXJzZSB0 cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuCisgKiBPYmpUcmVlIHJlcHJlc2VudGluZyB0 aGUgYWx0ZXIgY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQUxURVIgVVNFUiBN QVBQSU5HIEZPUiAle3JvbGV9UiBTRVJWRVIgJXtzZXJ2ZXJ9SQorICovCitzdGF0aWMgT2JqVHJl ZSAqCitkZXBhcnNlX0FsdGVyVXNlck1hcHBpbmdTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFy c2V0cmVlKQoreworCUFsdGVyVXNlck1hcHBpbmdTdG10ICpub2RlID0gKEFsdGVyVXNlck1hcHBp bmdTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICpyZXQ7CisJUmVsYXRpb24JcmVsOwor CUhlYXBUdXBsZQl0cDsKKwlGb3JtX3BnX3VzZXJfbWFwcGluZyBmb3JtOworCUZvcmVpZ25TZXJ2 ZXIgKnNlcnZlcjsKKworCXJlbCA9IHRhYmxlX29wZW4oVXNlck1hcHBpbmdSZWxhdGlvbklkLCBS b3dFeGNsdXNpdmVMb2NrKTsKKworCS8qCisJICogTG9va3VwIG9iamVjdCBpbiB0aGUgY2F0YWxv Zywgc28gd2UgZG9uJ3QgaGF2ZSB0byBkZWFsIHdpdGgKKwkgKiBjdXJyZW50X3VzZXIgYW5kIHN1 Y2guCisJICovCisJdHAgPSBTZWFyY2hTeXNDYWNoZTEoVVNFUk1BUFBJTkdPSUQsIE9iamVjdElk R2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHApKQorCQllbG9n KEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdXNlciBtYXBwaW5nIHdpdGggT0lEICV1 IiwKKwkJCSBvYmplY3RJZCk7CisKKwlmb3JtID0gKEZvcm1fcGdfdXNlcl9tYXBwaW5nKSBHRVRT VFJVQ1QodHApOworCisJc2VydmVyID0gR2V0Rm9yZWlnblNlcnZlcihmb3JtLT51bXNlcnZlcik7 CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgVVNFUiBNQVBQSU5HIEZPUiAle3JvbGV9 UiBTRVJWRVIgJXtzZXJ2ZXJ9SSAle2dlbmVyaWNfb3B0aW9uc31zIiwgMywKKwkJCQkJCSAicm9s ZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3JvbGVfaWQoZm9ybS0+ dW11c2VyKSwKKwkJCQkJCSAic2VydmVyIiwgT2JqVHlwZVN0cmluZywgc2VydmVyLT5zZXJ2ZXJu YW1lLAorCQkJCQkJICJnZW5lcmljX29wdGlvbnMiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIGRl cGFyc2VfRmR3T3B0aW9ucyhub2RlLT5vcHRpb25zLCBOVUxMKSk7CisKKwlSZWxlYXNlU3lzQ2Fj aGUodHApOworCXRhYmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CisJcmV0dXJuIHJl dDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJTdGF0c1N0bXQgKEFMVEVSIFNUQVRJU1RJ Q1MpCisgKgorICogR2l2ZW4gYSBhbHRlciBzdGF0aXN0aWNzIE9JRCBhbmQgdGhlIHBhcnNlIHRy ZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4KKyAqIE9ialRyZWUgcmVwcmVzZW50aW5nIHRo ZSBhbHRlciBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTFRFUiBTVEFUSVNU SUNTICV7aWRlbnRpdHl9RCBTRVQgU1RBVElTVElDUyAle3RhcmdldH1uCisgKi8KK3N0YXRpYyBP YmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJTdGF0c1N0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJz ZXRyZWUpCit7CisJQWx0ZXJTdGF0c1N0bXQgKm5vZGUgPSAoQWx0ZXJTdGF0c1N0bXQgKikgcGFy c2V0cmVlOworCU9ialRyZWUgICAgKnJldDsKKwlIZWFwVHVwbGUJdHA7CisJRm9ybV9wZ19zdGF0 aXN0aWNfZXh0IHN0YXRmb3JtOworCisJaWYgKCFub2RlLT5zdHhzdGF0dGFyZ2V0KQorCQlyZXR1 cm4gTlVMTDsKKworCS8qIExvb2t1cCBvYmplY3QgaW4gdGhlIGNhdGFsb2cgKi8KKwl0cCA9IFNl YXJjaFN5c0NhY2hlMShTVEFURVhUT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJ aWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHRwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBm YWlsZWQgZm9yIHN0YXRpc3RpYyB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKworCXN0YXRmb3Jt ID0gKEZvcm1fcGdfc3RhdGlzdGljX2V4dCkgR0VUU1RSVUNUKHRwKTsKKwlyZXQgPSBuZXdfb2Jq dHJlZV9WQSgiQUxURVIgU1RBVElTVElDUyAle2lkZW50aXR5fUQgU0VUIFNUQVRJU1RJQ1MgJXt0 YXJnZXR9biIsIDIsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoc3RhdGZvcm0tPnN0eG5hbWVzcGFjZSwKKwkJCQkJCQkJ CQkJCSAgTmFtZVN0cihzdGF0Zm9ybS0+c3R4bmFtZSkpLAorCQkJCQkJICJ0YXJnZXQiLCBPYmpU eXBlSW50ZWdlciwgbm9kZS0+c3R4c3RhdHRhcmdldCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHAp OworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgUmVmcmVzaE1hdFZpZXdTdG10 IChSRUZSRVNIIE1BVEVSSUFMSVpFRCBWSUVXKQorICoKKyAqIEdpdmVuIGEgbWF0ZXJpYWxpemVk IHZpZXcgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbgor ICogT2JqVHJlZSByZXByZXNlbnRpbmcgdGhlIHJlZnJlc2ggY29tbWFuZC4KKyAqCisgKiBWZXJi b3NlIHN5bnRheAorICogUkVGUkVTSCBNQVRFUklBTElaRUQgVklFVyAle2NvbmN1cnJlbnRseX1z ICV7aWRlbnRpdHl9RCAle3dpdGhfbm9fZGF0YX1zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2Rl cGFyc2VfUmVmcmVzaE1hdFZpZXdTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQor eworCVJlZnJlc2hNYXRWaWV3U3RtdCAqbm9kZSA9IChSZWZyZXNoTWF0Vmlld1N0bXQgKikgcGFy c2V0cmVlOworCU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICp0bXA7CisKKwlyZXQgPSBu ZXdfb2JqdHJlZV9WQSgiUkVGUkVTSCBNQVRFUklBTElaRUQgVklFVyAle2NvbmN1cnJlbnRseX1z ICV7aWRlbnRpdHl9RCIsIDIsCisJCQkJCQkgImNvbmN1cnJlbnRseSIsIE9ialR5cGVTdHJpbmcs CisJCQkJCQkgbm9kZS0+Y29uY3VycmVudCA/ICJDT05DVVJSRU5UTFkiIDogIiIsCisJCQkJCQkg ImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSBvYmplY3RJZCkpOworCisJ LyogQWRkIGEgV0lUSCBOTyBEQVRBIGNsYXVzZSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJX SVRIIE5PIERBVEEiLCAxLAorCQkJCQkJICJwcmVzZW50IiwgT2JqVHlwZUJvb2wsCisJCQkJCQkg bm9kZS0+c2tpcERhdGEgPyB0cnVlIDogZmFsc2UpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJl dCwgIiV7d2l0aF9ub19kYXRhfXMiLCB0bXApOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAq IERlcGFyc2UgYSBSZW5hbWVTdG10LgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTFRFUiAl cyAle2lmX2V4aXN0c31zICV7aWRlbnRpdHl9RCBSRU5BTUUgVE8gJXtuZXduYW1lfUkKKyAqIE9S CisgKiBBTFRFUiBQT0xJQ1kgJXtpZl9leGlzdHN9cyAle3BvbGljeW5hbWV9SSBPTiAle2lkZW50 aXR5fUQgUkVOQU1FIFRPICV7bmV3bmFtZX1JCisgKiBPUgorICogQUxURVIgb2JqdHlwZSAle2lk ZW50aXR5fUQgUkVOQU1FIEFUVFJJQlVURSAle2NvbG5hbWV9SSBUTyAle25ld25hbWV9SSAle2Nh c2NhZGV9cworICogT1IKKyAqIEFMVEVSIG9ianR5cGUgJXtpZl9leGlzdHN9cyAlJXtpZGVudGl0 eX1EIFJFTkFNRSBDT0xVTU4gJXtjb2xuYW1lfUkgVE8gJXtuZXduYW1lfUkKKyAqIE9SCisgKiBB TFRFUiAlcyAlJXtpZGVudGl0eX1zIFJFTkFNRSBUTyAlJXtuZXduYW1lfUkKKyAqIE9SCisgKiBB TFRFUiAlcyAlJXtpZGVudGl0eX1EIFVTSU5HICUle2luZGV4X21ldGhvZH1zIFJFTkFNRSBUTyAl JXtuZXduYW1lfUkKKyAqIE9SCisgKiBBTFRFUiBTQ0hFTUEgJXtpZGVudGl0eX1JIFJFTkFNRSBU TyAle25ld25hbWV9SQorICogT1IKKyAqIEFMVEVSIFJVTEUgJXtydWxlbmFtZX1JIE9OICV7aWRl bnRpdHl9RCBSRU5BTUUgVE8gJXtuZXduYW1lfUkKKyAqIE9SCisgKiBBTFRFUiBUUklHR0VSICV7 dHJpZ2dlcm5hbWV9SSBPTiAle2lkZW50aXR5fUQgUkVOQU1FIFRPICV7bmV3bmFtZX1JCisgKiBP UgorICogQUxURVIgJXMgJSV7aWRlbnRpdHl9RCBSRU5BTUUgVE8gJSV7bmV3bmFtZX1JCisgKi8K K3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfUmVuYW1lU3RtdChPYmplY3RBZGRyZXNzIGFkZHJl c3MsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlSZW5hbWVTdG10ICpub2RlID0gKFJlbmFtZVN0bXQg KikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJldDsKKwlSZWxhdGlvbglyZWxhdGlvbjsKKwlP aWQJCQlzY2hlbWFJZDsKKworCS8qCisJICogSW4gYW4gQUxURVIgLi4gUkVOQU1FIGNvbW1hbmQs IHdlIGRvbid0IGhhdmUgdGhlIG9yaWdpbmFsIG5hbWUgb2YgdGhlCisJICogb2JqZWN0IGluIHN5 c3RlbSBjYXRhbG9nczogc2luY2Ugd2UgaW5zcGVjdCB0aGVtIGFmdGVyIHRoZSBjb21tYW5kIGhh cworCSAqIGV4ZWN1dGVkLCB0aGUgb2xkIG5hbWUgaXMgYWxyZWFkeSBnb25lLiAgVGhlcmVmb3Jl LCB3ZSBleHRyYWN0IGl0IGZyb20KKwkgKiB0aGUgcGFyc2Ugbm9kZS4gIE5vdGUgd2Ugc3RpbGwg ZXh0cmFjdCB0aGUgc2NoZW1hIG5hbWUgZnJvbSB0aGUgY2F0YWxvZworCSAqIChpdCBtaWdodCBu b3QgYmUgcHJlc2VudCBpbiB0aGUgcGFyc2Ugbm9kZSk7IGl0IGNhbm5vdCBwb3NzaWJseSBoYXZl CisJICogY2hhbmdlZCBhbnl3YXkuCisJICovCisJc3dpdGNoIChub2RlLT5yZW5hbWVUeXBlKQor CXsKKwkJY2FzZSBPQkpFQ1RfVEFCTEU6CisJCWNhc2UgT0JKRUNUX0lOREVYOgorCQljYXNlIE9C SkVDVF9TRVFVRU5DRToKKwkJY2FzZSBPQkpFQ1RfVklFVzoKKwkJY2FzZSBPQkpFQ1RfTUFUVklF VzoKKwkJCXJlbGF0aW9uID0gcmVsYXRpb25fb3BlbihhZGRyZXNzLm9iamVjdElkLCBBY2Nlc3NT aGFyZUxvY2spOworCQkJc2NoZW1hSWQgPSBSZWxhdGlvbkdldE5hbWVzcGFjZShyZWxhdGlvbik7 CisJCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgJXtvYmp0eXBlfXMgJXtpZl9leGlzdHN9 cyAle2lkZW50aXR5fUQgUkVOQU1FIFRPICV7bmV3bmFtZX1JIiwgNCwKKwkJCQkJCQkJICJvYmp0 eXBlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJIHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPnJl bmFtZVR5cGUsIGZhbHNlKSwKKwkJCQkJCQkJICJpZl9leGlzdHMiLCBPYmpUeXBlU3RyaW5nLAor CQkJCQkJCQkgbm9kZS0+bWlzc2luZ19vayA/ICJJRiBFWElTVFMiIDogIiIsCisJCQkJCQkJCSAi aWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lKHNjaGVtYUlkLAorCQkJCQkJCQkJCQkJCQkgIG5vZGUtPnJlbGF0aW9uLT5yZWxuYW1lKSwK KwkJCQkJCQkJICJuZXduYW1lIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJIG5vZGUtPm5ld25h bWUpOworCQkJcmVsYXRpb25fY2xvc2UocmVsYXRpb24sIEFjY2Vzc1NoYXJlTG9jayk7CisJCQli cmVhazsKKworCQljYXNlIE9CSkVDVF9QT0xJQ1k6CisJCQl7CisJCQkJSGVhcFR1cGxlCXBvbFR1 cDsKKwkJCQlGb3JtX3BnX3BvbGljeSBwb2xGb3JtOworCQkJCVJlbGF0aW9uCXBnX3BvbGljeTsK KwkJCQlTY2FuS2V5RGF0YSBrZXk7CisJCQkJU3lzU2NhbkRlc2Mgc2NhbjsKKworCQkJCXBnX3Bv bGljeSA9IHJlbGF0aW9uX29wZW4oUG9saWN5UmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsK KwkJCQlTY2FuS2V5SW5pdCgma2V5LCBBbnVtX3BnX3BvbGljeV9vaWQsCisJCQkJCQkJQlRFcXVh bFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCQkJCU9iamVjdElkR2V0RGF0dW0oYWRkcmVz cy5vYmplY3RJZCkpOworCQkJCXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4ocGdfcG9saWN5LCBQ b2xpY3lPaWRJbmRleElkLCB0cnVlLAorCQkJCQkJCQkJCSAgTlVMTCwgMSwgJmtleSk7CisJCQkJ cG9sVHVwID0gc3lzdGFibGVfZ2V0bmV4dChzY2FuKTsKKwkJCQlpZiAoIUhlYXBUdXBsZUlzVmFs aWQocG9sVHVwKSkKKwkJCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHBv bGljeSB3aXRoIE9JRCAldSIsCisJCQkJCQkgYWRkcmVzcy5vYmplY3RJZCk7CisJCQkJcG9sRm9y bSA9IChGb3JtX3BnX3BvbGljeSkgR0VUU1RSVUNUKHBvbFR1cCk7CisKKwkJCQlyZXQgPSBuZXdf b2JqdHJlZV9WQSgiQUxURVIgUE9MSUNZICV7aWZfZXhpc3RzfXMgJXtwb2xpY3luYW1lfUkgT04g JXtpZGVudGl0eX1EIFJFTkFNRSBUTyAle25ld25hbWV9SSIsIDQsCisJCQkJCQkJCQkgImlmX2V4 aXN0cyIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkgbm9kZS0+bWlzc2luZ19vayA/ICJJRiBF WElTVFMiIDogIiIsCisJCQkJCQkJCQkgInBvbGljeW5hbWUiLCBPYmpUeXBlU3RyaW5nLAorCQkJ CQkJCQkJIG5vZGUtPnN1Ym5hbWUsCisJCQkJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVj dCwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlv bklkLAorCQkJCQkJCQkJCQkJCQkJCSBwb2xGb3JtLT5wb2xyZWxpZCksCisJCQkJCQkJCQkgIm5l d25hbWUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJIG5vZGUtPm5ld25hbWUpOworCQkJCXN5 c3RhYmxlX2VuZHNjYW4oc2Nhbik7CisJCQkJcmVsYXRpb25fY2xvc2UocGdfcG9saWN5LCBBY2Nl c3NTaGFyZUxvY2spOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfQVRUUklCVVRF OgorCQljYXNlIE9CSkVDVF9DT0xVTU46CisJCQlyZWxhdGlvbiA9IHJlbGF0aW9uX29wZW4oYWRk cmVzcy5vYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCXNjaGVtYUlkID0gUmVsYXRpb25H ZXROYW1lc3BhY2UocmVsYXRpb24pOworCisJCQlpZiAobm9kZS0+cmVuYW1lVHlwZSA9PSBPQkpF Q1RfQVRUUklCVVRFKQorCQkJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBUWVBFICV7aWRl bnRpdHl9RCBSRU5BTUUgQVRUUklCVVRFICV7Y29sbmFtZX1JIiwgMiwKKwkJCQkJCQkJCSAiaWRl bnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZShzY2hlbWFJZCwKKwkJCQkJCQkJCQkJCQkJCSAgbm9kZS0+cmVsYXRpb24tPnJlbG5hbWUpLAor CQkJCQkJCQkJICJjb2xuYW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+c3VibmFtZSk7CisJCQll bHNlCisJCQl7CisJCQkJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSICV7b2JqdHlwZX1zIiwg MSwKKwkJCQkJCQkJCSAib2JqdHlwZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkgc3RyaW5n aWZ5X29ianR5cGUobm9kZS0+cmVsYXRpb25UeXBlLCBmYWxzZSkpOworCisJCQkJLyogQ29tcG9z aXRlIHR5cGVzIGRvIG5vdCBzdXBwb3J0IElGIEVYSVNUUyAqLworCQkJCWlmIChub2RlLT5yZW5h bWVUeXBlID09IE9CSkVDVF9DT0xVTU4pCisJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwg IiV7aWZfZXhpc3RzfXMiLAorCQkJCQkJCQkJCSAiaWZfZXhpc3RzIiwKKwkJCQkJCQkJCQkgbm9k ZS0+bWlzc2luZ19vayA/ICJJRiBFWElTVFMiIDogIiIpOworCisJCQkJYXBwZW5kX29iamVjdF9v YmplY3QocmV0LCAiJXtpZGVudGl0eX1EIiwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVh bG5hbWUoc2NoZW1hSWQsCisJCQkJCQkJCQkJCQkJCQkgIG5vZGUtPnJlbGF0aW9uLT5yZWxuYW1l KSk7CisJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiUkVOQU1FIENPTFVNTiAle2NvbG5h bWV9SSIsCisJCQkJCQkJCQkgImNvbG5hbWUiLCBub2RlLT5zdWJuYW1lKTsKKwkJCX0KKworCQkJ YXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiVE8gJXtuZXduYW1lfUkiLCAibmV3bmFtZSIsCisJ CQkJCQkJCSBub2RlLT5uZXduYW1lKTsKKworCQkJaWYgKG5vZGUtPnJlbmFtZVR5cGUgPT0gT0JK RUNUX0FUVFJJQlVURSkKKwkJCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2Nhc2NhZGV9 cyIsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfVkEoIkNBU0NBREUiLCAxLAorCQkJCQkJCQkJCQkJ CSJwcmVzZW50IiwgT2JqVHlwZUJvb2wsCisJCQkJCQkJCQkJCQkJbm9kZS0+YmVoYXZpb3IgPT0g RFJPUF9DQVNDQURFKSk7CisKKwkJCXJlbGF0aW9uX2Nsb3NlKHJlbGF0aW9uLCBBY2Nlc3NTaGFy ZUxvY2spOworCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfQUdHUkVHQVRFOgorCQljYXNlIE9C SkVDVF9GVU5DVElPTjoKKwkJY2FzZSBPQkpFQ1RfUk9VVElORToKKwkJCXsKKwkJCQljaGFyCSAg ICppZGVudDsKKwkJCQlIZWFwVHVwbGUJcHJvY3R1cDsKKwkJCQlGb3JtX3BnX3Byb2MgcHJvY2Zv cm07CisJCQkJTGlzdAkgICAqaWRlbnRpdHk7CisKKwkJCQlBc3NlcnQoSXNBKG5vZGUtPm9iamVj dCwgT2JqZWN0V2l0aEFyZ3MpKTsKKwkJCQlpZGVudGl0eSA9ICgoT2JqZWN0V2l0aEFyZ3MgKikg bm9kZS0+b2JqZWN0KS0+b2JqbmFtZTsKKworCQkJCXByb2N0dXAgPSBTZWFyY2hTeXNDYWNoZTEo UFJPQ09JRCwKKwkJCQkJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0oYWRkcmVzcy5vYmplY3RJZCkp OworCQkJCWlmICghSGVhcFR1cGxlSXNWYWxpZChwcm9jdHVwKSkKKwkJCQkJZWxvZyhFUlJPUiwg ImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHByb2NlZHVyZSB3aXRoIE9JRCAldSIsCisJCQkJCQkg YWRkcmVzcy5vYmplY3RJZCk7CisJCQkJcHJvY2Zvcm0gPSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJV Q1QocHJvY3R1cCk7CisKKwkJCQkvKiBYWFggZG9lcyB0aGlzIHdvcmsgZm9yIG9yZGVyZWQtc2V0 IGFnZ3JlZ2F0ZXM/ICovCisJCQkJaWRlbnQgPSBwc3ByaW50ZigiJXMlcyIsCisJCQkJCQkJCSBx dW90ZV9xdWFsaWZpZWRfaWRlbnRpZmllcihnZXRfbmFtZXNwYWNlX25hbWUocHJvY2Zvcm0tPnBy b25hbWVzcGFjZSksCisJCQkJCQkJCQkJCQkJCQlzdHJWYWwobGxhc3QoaWRlbnRpdHkpKSksCisJ CQkJCQkJCSBmb3JtYXRfcHJvY2VkdXJlX2FyZ3MoYWRkcmVzcy5vYmplY3RJZCwgdHJ1ZSkpOwor CisJCQkJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSICV7b2JqdHlwZX1zICV7aWRlbnRpdHl9 cyBSRU5BTUUgVE8gJXtuZXduYW1lfUkiLCAzLAorCQkJCQkJCQkJICJvYmp0eXBlIiwgT2JqVHlw ZVN0cmluZywKKwkJCQkJCQkJCSBzdHJpbmdpZnlfb2JqdHlwZShub2RlLT5yZW5hbWVUeXBlLCBm YWxzZSksCisJCQkJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywgaWRlbnQsCisJCQkJ CQkJCQkgIm5ld25hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5uZXduYW1lKTsKKworCQkJCVJl bGVhc2VTeXNDYWNoZShwcm9jdHVwKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNU X09QQ0xBU1M6CisJCQl7CisJCQkJSGVhcFR1cGxlCW9wY1R1cDsKKwkJCQlGb3JtX3BnX29wY2xh c3Mgb3BjRm9ybTsKKwkJCQlMaXN0CSAgICpvbGRuYW1lczsKKwkJCQljaGFyCSAgICpzY2hlbWFu YW1lOworCQkJCWNoYXIJICAgKm9wY25hbWU7CisKKwkJCQlvcGNUdXAgPSBTZWFyY2hTeXNDYWNo ZTEoQ0xBT0lELCBPYmplY3RJZEdldERhdHVtKGFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJCQlpZiAo IUhlYXBUdXBsZUlzVmFsaWQob3BjVHVwKSkKKwkJCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1 cCBmYWlsZWQgZm9yIG9wY2xhc3Mgd2l0aCBPSUQgJXUiLAorCQkJCQkJIGFkZHJlc3Mub2JqZWN0 SWQpOworCisJCQkJb3BjRm9ybSA9IChGb3JtX3BnX29wY2xhc3MpIEdFVFNUUlVDVChvcGNUdXAp OworCisJCQkJb2xkbmFtZXMgPSBsaXN0X2NvcHlfdGFpbCgoTGlzdCAqKSBub2RlLT5vYmplY3Qs IDEpOworCisJCQkJLyogRGVjb25zdHJ1Y3QgdGhlIG5hbWUgbGlzdCAqLworCQkJCURlY29uc3Ry dWN0UXVhbGlmaWVkTmFtZShvbGRuYW1lcywgJnNjaGVtYW5hbWUsICZvcGNuYW1lKTsKKworCQkJ CXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiAle29ianR5cGV9cyAle2lkZW50aXR5fUQgVVNJ TkcgJXtpbmRleF9tZXRob2R9cyBSRU5BTUUgVE8gJXtuZXduYW1lfUkiLCA0LAorCQkJCQkJCQkJ ICJvYmp0eXBlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCSBzdHJpbmdpZnlfb2JqdHlwZShu b2RlLT5yZW5hbWVUeXBlLCBmYWxzZSksCisJCQkJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9i amVjdCwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUob3BjRm9ybS0+b3BjbmFt ZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkJICBvcGNuYW1lKSwKKwkJCQkJCQkJCSAiaW5kZXhfbWV0 aG9kIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCSBnZXRfYW1fbmFtZShvcGNGb3JtLT5vcGNt ZXRob2QpLAorCQkJCQkJCQkJICJuZXduYW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+bmV3bmFt ZSk7CisKKwkJCQlSZWxlYXNlU3lzQ2FjaGUob3BjVHVwKTsKKwkJCX0KKwkJCWJyZWFrOworCisJ CWNhc2UgT0JKRUNUX09QRkFNSUxZOgorCQkJeworCQkJCUhlYXBUdXBsZQlvcGZUdXA7CisJCQkJ SGVhcFR1cGxlCWFtVHVwOworCQkJCUZvcm1fcGdfb3BmYW1pbHkgb3BmRm9ybTsKKwkJCQlGb3Jt X3BnX2FtCWFtRm9ybTsKKwkJCQlMaXN0CSAgICpvbGRuYW1lczsKKwkJCQljaGFyCSAgICpzY2hl bWFuYW1lOworCQkJCWNoYXIJICAgKm9wZm5hbWU7CisKKwkJCQlvcGZUdXAgPSBTZWFyY2hTeXND YWNoZTEoT1BGQU1JTFlPSUQsIGFkZHJlc3Mub2JqZWN0SWQpOworCQkJCWlmICghSGVhcFR1cGxl SXNWYWxpZChvcGZUdXApKQorCQkJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBm b3Igb3BlcmF0b3IgZmFtaWx5IHdpdGggT0lEICV1IiwKKwkJCQkJCSBhZGRyZXNzLm9iamVjdElk KTsKKwkJCQlvcGZGb3JtID0gKEZvcm1fcGdfb3BmYW1pbHkpIEdFVFNUUlVDVChvcGZUdXApOwor CisJCQkJYW1UdXAgPSBTZWFyY2hTeXNDYWNoZTEoQU1PSUQsIE9iamVjdElkR2V0RGF0dW0ob3Bm Rm9ybS0+b3BmbWV0aG9kKSk7CisJCQkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGFtVHVwKSkKKwkJ CQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGFjY2VzcyBtZXRob2Qgd2l0 aCBPSUQgJXUiLAorCQkJCQkJIG9wZkZvcm0tPm9wZm1ldGhvZCk7CisKKwkJCQlhbUZvcm0gPSAo Rm9ybV9wZ19hbSkgR0VUU1RSVUNUKGFtVHVwKTsKKworCQkJCW9sZG5hbWVzID0gbGlzdF9jb3B5 X3RhaWwoKExpc3QgKikgbm9kZS0+b2JqZWN0LCAxKTsKKworCQkJCS8qIERlY29uc3RydWN0IHRo ZSBuYW1lIGxpc3QgKi8KKwkJCQlEZWNvbnN0cnVjdFF1YWxpZmllZE5hbWUob2xkbmFtZXMsICZz Y2hlbWFuYW1lLCAmb3BmbmFtZSk7CisKKwkJCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIg JXtvYmp0eXBlfXMgJXtpZGVudGl0eX1EIFVTSU5HICV7aW5kZXhfbWV0aG9kfXMgUkVOQU1FIFRP ICV7bmV3bmFtZX1JIiwgNCwKKwkJCQkJCQkJCSAib2JqdHlwZSIsIE9ialR5cGVTdHJpbmcsCisJ CQkJCQkJCQkgc3RyaW5naWZ5X29ianR5cGUobm9kZS0+cmVuYW1lVHlwZSwgZmFsc2UpLAorCQkJ CQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lKG9wZkZvcm0tPm9wZm5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJCSAgb3Bm bmFtZSksCisJCQkJCQkJCQkgImluZGV4X21ldGhvZCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJ CQkgTmFtZVN0cihhbUZvcm0tPmFtbmFtZSksCisJCQkJCQkJCQkgIm5ld25hbWUiLCBPYmpUeXBl U3RyaW5nLCBub2RlLT5uZXduYW1lKTsKKworCQkJCVJlbGVhc2VTeXNDYWNoZShhbVR1cCk7CisJ CQkJUmVsZWFzZVN5c0NhY2hlKG9wZlR1cCk7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIE9C SkVDVF9TQ0hFTUE6CisJCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgU0NIRU1BICV7aWRl bnRpdHl9SSBSRU5BTUUgVE8gJXtuZXduYW1lfUkiLCAyLAorCQkJCQkJCQkgImlkZW50aXR5Iiwg T2JqVHlwZVN0cmluZywgbm9kZS0+c3VibmFtZSwKKwkJCQkJCQkJICJuZXduYW1lIiwgT2JqVHlw ZVN0cmluZywgbm9kZS0+bmV3bmFtZSk7CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9GRFc6 CisJCWNhc2UgT0JKRUNUX0xBTkdVQUdFOgorCQljYXNlIE9CSkVDVF9GT1JFSUdOX1NFUlZFUjoK KwkJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiAle29ianR5cGV9cyAle2lkZW50aXR5fXMg UkVOQU1FIFRPICV7bmV3bmFtZX1JIiwgMywKKwkJCQkJCQkJICJvYmp0eXBlIiwgT2JqVHlwZVN0 cmluZywKKwkJCQkJCQkJIHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPnJlbmFtZVR5cGUsIGZhbHNl KSwKKwkJCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCSBzdHJWYWwo Y2FzdE5vZGUoU3RyaW5nLCBub2RlLT5vYmplY3QpKSwKKwkJCQkJCQkJICJuZXduYW1lIiwgT2Jq VHlwZVN0cmluZywgbm9kZS0+bmV3bmFtZSk7CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9S VUxFOgorCQkJeworCQkJCUhlYXBUdXBsZQlyZXdyVHVwOworCQkJCUZvcm1fcGdfcmV3cml0ZSBy ZXdyRm9ybTsKKwkJCQlSZWxhdGlvbglwZ19yZXdyaXRlOworCisJCQkJcGdfcmV3cml0ZSA9IHJl bGF0aW9uX29wZW4oUmV3cml0ZVJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQkJcmV3 clR1cCA9IGdldF9jYXRhbG9nX29iamVjdF9ieV9vaWQocGdfcmV3cml0ZSwgQW51bV9wZ19yZXdy aXRlX29pZCwgYWRkcmVzcy5vYmplY3RJZCk7CisJCQkJcmV3ckZvcm0gPSAoRm9ybV9wZ19yZXdy aXRlKSBHRVRTVFJVQ1QocmV3clR1cCk7CisKKwkJCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxU RVIgUlVMRSAle3J1bGVuYW1lfUkgT04gJXtpZGVudGl0eX1EIFJFTkFNRSBUTyAle25ld25hbWV9 SSIsIDMsCisJCQkJCQkJCQkgInJ1bGVuYW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+c3VibmFt ZSwKKwkJCQkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJIG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJ CQkJIHJld3JGb3JtLT5ldl9jbGFzcyksCisJCQkJCQkJCQkgIm5ld25hbWUiLCBPYmpUeXBlU3Ry aW5nLCBub2RlLT5uZXduYW1lKTsKKwkJCQlyZWxhdGlvbl9jbG9zZShwZ19yZXdyaXRlLCBBY2Nl c3NTaGFyZUxvY2spOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfVFJJR0dFUjoK KwkJCXsKKwkJCQlIZWFwVHVwbGUJdHJpZ1R1cDsKKwkJCQlGb3JtX3BnX3RyaWdnZXIgdHJpZ0Zv cm07CisJCQkJUmVsYXRpb24JcGdfdHJpZ2dlcjsKKworCQkJCXBnX3RyaWdnZXIgPSByZWxhdGlv bl9vcGVuKFRyaWdnZXJSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJCXRyaWdUdXAg PSBnZXRfY2F0YWxvZ19vYmplY3RfYnlfb2lkKHBnX3RyaWdnZXIsIGdldF9vYmplY3RfYXR0bnVt X29pZChhZGRyZXNzLmNsYXNzSWQpLCBhZGRyZXNzLm9iamVjdElkKTsKKwkJCQl0cmlnRm9ybSA9 IChGb3JtX3BnX3RyaWdnZXIpIEdFVFNUUlVDVCh0cmlnVHVwKTsKKworCQkJCXJldCA9IG5ld19v Ymp0cmVlX1ZBKCJBTFRFUiBUUklHR0VSICV7dHJpZ2dlcm5hbWV9SSBPTiAle2lkZW50aXR5fUQg UkVOQU1FIFRPICV7bmV3bmFtZX1JIiwgMywKKwkJCQkJCQkJCSAidHJpZ2dlcm5hbWUiLCBPYmpU eXBlU3RyaW5nLCBub2RlLT5zdWJuYW1lLAorCQkJCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVP YmplY3QsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVs YXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkgdHJpZ0Zvcm0tPnRncmVsaWQpLAorCQkJCQkJCQkJ ICJuZXduYW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+bmV3bmFtZSk7CisKKwkJCQlyZWxhdGlv bl9jbG9zZShwZ190cmlnZ2VyLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJfQorCQkJYnJlYWs7CisK KwkJY2FzZSBPQkpFQ1RfQ09MTEFUSU9OOgorCQljYXNlIE9CSkVDVF9TVEFUSVNUSUNfRVhUOgor CQljYXNlIE9CSkVDVF9UWVBFOgorCQljYXNlIE9CSkVDVF9DT05WRVJTSU9OOgorCQljYXNlIE9C SkVDVF9ET01BSU46CisJCWNhc2UgT0JKRUNUX1RTRElDVElPTkFSWToKKwkJY2FzZSBPQkpFQ1Rf VFNQQVJTRVI6CisJCWNhc2UgT0JKRUNUX1RTVEVNUExBVEU6CisJCWNhc2UgT0JKRUNUX1RTQ09O RklHVVJBVElPTjoKKwkJCXsKKwkJCQlIZWFwVHVwbGUJb2JqVHVwOworCQkJCVJlbGF0aW9uCWNh dGFsb2c7CisJCQkJRGF0dW0JCW9iam5zcDsKKwkJCQlib29sCQlpc251bGw7CisJCQkJQXR0ck51 bWJlcglBbnVtX25hbWVzcGFjZTsKKwkJCQlMaXN0CSAgICppZGVudGl0eSA9IGNhc3ROb2RlKExp c3QsIG5vZGUtPm9iamVjdCk7CisKKwkJCQkvKiBPYnRhaW4gb2JqZWN0IHR1cGxlICovCisJCQkJ Y2F0YWxvZyA9IHJlbGF0aW9uX29wZW4oYWRkcmVzcy5jbGFzc0lkLCBBY2Nlc3NTaGFyZUxvY2sp OworCQkJCW9ialR1cCA9IGdldF9jYXRhbG9nX29iamVjdF9ieV9vaWQoY2F0YWxvZywgZ2V0X29i amVjdF9hdHRudW1fb2lkKGFkZHJlc3MuY2xhc3NJZCksIGFkZHJlc3Mub2JqZWN0SWQpOworCisJ CQkJLyogT2J0YWluIG5hbWVzcGFjZSAqLworCQkJCUFudW1fbmFtZXNwYWNlID0gZ2V0X29iamVj dF9hdHRudW1fbmFtZXNwYWNlKGFkZHJlc3MuY2xhc3NJZCk7CisJCQkJb2JqbnNwID0gaGVhcF9n ZXRhdHRyKG9ialR1cCwgQW51bV9uYW1lc3BhY2UsCisJCQkJCQkJCQkgIFJlbGF0aW9uR2V0RGVz Y3IoY2F0YWxvZyksICZpc251bGwpOworCQkJCWlmIChpc251bGwpCisJCQkJCWVsb2coRVJST1Is ICJpbnZhbGlkIE5VTEwgbmFtZXNwYWNlIik7CisKKwkJCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgi QUxURVIgJXtvYmp0eXBlfXMgJXtpZGVudGl0eX1EIFJFTkFNRSBUTyAle25ld25hbWV9SSIsIDMs CisJCQkJCQkJCQkgIm9ianR5cGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJIHN0cmluZ2lm eV9vYmp0eXBlKG5vZGUtPnJlbmFtZVR5cGUsIGZhbHNlKSwKKwkJCQkJCQkJCSAiaWRlbnRpdHki LCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShEYXR1 bUdldE9iamVjdElkKG9iam5zcCksCisJCQkJCQkJCQkJCQkJCQkgIHN0clZhbChsbGFzdChpZGVu dGl0eSkpKSwKKwkJCQkJCQkJCSAibmV3bmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPm5ld25h bWUpOworCQkJCXJlbGF0aW9uX2Nsb3NlKGNhdGFsb2csIEFjY2Vzc1NoYXJlTG9jayk7CisJCQl9 CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVuc3VwcG9ydGVkIG9i amVjdCB0eXBlICVkIiwgbm9kZS0+cmVuYW1lVHlwZSk7CisJfQorCisJcmV0dXJuIHJldDsKK30K KworLyoKKyAqIERlcGFyc2UgYSBBbHRlck9iamVjdERlcGVuZHNTdG10IChBTFRFUiAuLi4gREVQ RU5EUyBPTiAuLi4pLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTFRFUiBJTkRFWCAle2lk ZW50aXR5fUQgJXtub31zIERFUEVORFMgT04gRVhURU5TSU9OICV7bmV3bmFtZX1JCisgKi8KK3N0 YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJEZXBlbmRTdG10KE9pZCBvYmplY3RJZCwgTm9k ZSAqcGFyc2V0cmVlKQoreworCUFsdGVyT2JqZWN0RGVwZW5kc1N0bXQgKm5vZGUgPSAoQWx0ZXJP YmplY3REZXBlbmRzU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqcmV0ID0gTlVMTDsK KworCWlmIChub2RlLT5vYmplY3RUeXBlID09IE9CSkVDVF9JTkRFWCkKKwl7CisJCU9ialRyZWUg ICAgKnF1YWxpZmllZDsKKwkJUmVsYXRpb24JcmVsYXRpb24gPSByZWxhdGlvbl9vcGVuKG9iamVj dElkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJCXF1YWxpZmllZCA9IG5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZShyZWxhdGlvbi0+cmRfcmVsLT5yZWxuYW1lc3BhY2UsCisJCQkJCQkJCQkJCSBub2Rl LT5yZWxhdGlvbi0+cmVsbmFtZSk7CisJCXJlbGF0aW9uX2Nsb3NlKHJlbGF0aW9uLCBBY2Nlc3NT aGFyZUxvY2spOworCisJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBJTkRFWCAle2lkZW50 aXR5fUQgJXtub31zIERFUEVORFMgT04gRVhURU5TSU9OICV7bmV3bmFtZX1JIiwgMywKKwkJCQkJ CQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwgcXVhbGlmaWVkLAorCQkJCQkJCSAibm8iLCBP YmpUeXBlU3RyaW5nLAorCQkJCQkJCSBub2RlLT5yZW1vdmUgPyAiTk8iIDogIiIsCisJCQkJCQkJ ICJuZXduYW1lIiwgT2JqVHlwZVN0cmluZywgc3RyVmFsKG5vZGUtPmV4dG5hbWUpKTsKKwl9CisJ ZWxzZQorCQllbG9nKExPRywgInVucmVjb2duaXplZCBub2RlIHR5cGUgaW4gZGVwYXJzZSBjb21t YW5kOiAlZCIsCisJCQkgKGludCkgbm9kZVRhZyhwYXJzZXRyZWUpKTsKKworCXJldHVybiByZXQ7 Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgUnVsZVN0bXQgKENSRUFURSBSVUxFKS4KKyAqCisgKiBH aXZlbiBhIHJ1bGUgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVy biBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIHJ1bGUgY29tbWFuZC4KKyAqCisgKiBW ZXJib3NlIHN5bnRheAorICogQ1JFQVRFIFJVTEUgJXtvcl9yZXBsYWNlfXMgJXtpZGVudGl0eX1J IEFTIE9OICV7ZXZlbnR9cyBUTyAle3RhYmxlfUQKKyAqICV7d2hlcmVfY2xhdXNlfXMgRE8gJXtp bnN0ZWFkfXMgJXthY3Rpb25zOiwgfXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9S dWxlU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlSdWxlU3RtdCAgICpu b2RlID0gKFJ1bGVTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJl ZSAgICAqdG1wOworCVJlbGF0aW9uCXBnX3Jld3JpdGU7CisJRm9ybV9wZ19yZXdyaXRlIHJld3JG b3JtOworCUhlYXBUdXBsZQlyZXdyVHVwOworCVN5c1NjYW5EZXNjIHNjYW47CisJU2NhbktleURh dGEga2V5OworCURhdHVtCQlldl9xdWFsOworCURhdHVtCQlldl9hY3Rpb25zOworCWJvb2wJCWlz bnVsbDsKKwljaGFyCSAgICpxdWFsOworCUxpc3QJICAgKmFjdGlvbnM7CisJTGlzdAkgICAqbGlz dCA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCWNoYXIJICAgKmV2ZW50X3N0cjsKKworCXBn X3Jld3JpdGUgPSB0YWJsZV9vcGVuKFJld3JpdGVSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2sp OworCVNjYW5LZXlJbml0KCZrZXksCisJCQkJQW51bV9wZ19yZXdyaXRlX29pZCwKKwkJCQlCVEVx dWFsU3RyYXRlZ3lOdW1iZXIsCisJCQkJRl9PSURFUSwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJ ZCkpOworCisJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2NhbihwZ19yZXdyaXRlLCBSZXdyaXRlT2lk SW5kZXhJZCwgdHJ1ZSwKKwkJCQkJCQkgIE5VTEwsIDEsICZrZXkpOworCXJld3JUdXAgPSBzeXN0 YWJsZV9nZXRuZXh0KHNjYW4pOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChyZXdyVHVwKSkKKwkJ ZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHJld3JpdGUgcnVsZSB3aXRoIE9J RCAldSIsCisJCQkgb2JqZWN0SWQpOworCisJcmV3ckZvcm0gPSAoRm9ybV9wZ19yZXdyaXRlKSBH RVRTVFJVQ1QocmV3clR1cCk7CisKKwlldmVudF9zdHIgPSBub2RlLT5ldmVudCA9PSBDTURfU0VM RUNUID8gIlNFTEVDVCIgOgorCQlub2RlLT5ldmVudCA9PSBDTURfVVBEQVRFID8gIlVQREFURSIg OgorCQlub2RlLT5ldmVudCA9PSBDTURfREVMRVRFID8gIkRFTEVURSIgOgorCQlub2RlLT5ldmVu dCA9PSBDTURfSU5TRVJUID8gIklOU0VSVCIgOiBOVUxMOworCUFzc2VydChldmVudF9zdHIgIT0g TlVMTCk7CisKKwlldl9xdWFsID0gaGVhcF9nZXRhdHRyKHJld3JUdXAsIEFudW1fcGdfcmV3cml0 ZV9ldl9xdWFsLAorCQkJCQkJICAgUmVsYXRpb25HZXREZXNjcihwZ19yZXdyaXRlKSwgJmlzbnVs bCk7CisJZXZfYWN0aW9ucyA9IGhlYXBfZ2V0YXR0cihyZXdyVHVwLCBBbnVtX3BnX3Jld3JpdGVf ZXZfYWN0aW9uLAorCQkJCQkJCSAgUmVsYXRpb25HZXREZXNjcihwZ19yZXdyaXRlKSwgJmlzbnVs bCk7CisKKwlwZ19nZXRfcnVsZWRlZl9kZXRhaWxlZChldl9xdWFsLCBldl9hY3Rpb25zLCAmcXVh bCwgJmFjdGlvbnMpOworCisJdG1wID0gbmV3X29ianRyZWUoIiIpOworCWlmIChxdWFsKQorCQlh cHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICJXSEVSRSAle2NsYXVzZX1zIiwgImNsYXVzZSIsIHF1 YWwpOworCWVsc2UKKwl7CisJCWFwcGVuZF9udWxsX29iamVjdCh0bXAsICJXSEVSRSAle2NsYXVz ZX1zIik7CisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCX0KKworCWlmIChhY3Rpb25zID09 IE5JTCkKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QoIk5PVEhJTkci KSk7CisJZWxzZQorCXsKKwkJZm9yZWFjaChjZWxsLCBhY3Rpb25zKQorCQkJbGlzdCA9IGxhcHBl bmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QobGZpcnN0KGNlbGwpKSk7CisJfQorCisJcmV0ID0g bmV3X29ianRyZWVfVkEoIkNSRUFURSBSVUxFICV7b3JfcmVwbGFjZX1zICV7aWRlbnRpdHl9SSBB UyBPTiAle2V2ZW50fXMgVE8gJXt0YWJsZX1EICV7d2hlcmVfY2xhdXNlfXMgRE8gJXtpbnN0ZWFk fXMgJXthY3Rpb25zOiwgfXMiLCA3LAorCQkJCQkJICJvcl9yZXBsYWNlIiwgT2JqVHlwZVN0cmlu ZywKKwkJCQkJCSBub2RlLT5yZXBsYWNlID8gIk9SIFJFUExBQ0UiIDogIiIsCisJCQkJCQkgImlk ZW50aXR5IiwgT2JqVHlwZVN0cmluZywgbm9kZS0+cnVsZW5hbWUsCisJCQkJCQkgImV2ZW50Iiwg T2JqVHlwZVN0cmluZywgZXZlbnRfc3RyLAorCQkJCQkJICJ0YWJsZSIsIE9ialR5cGVPYmplY3Qs CisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwK KwkJCQkJCQkJCQkJCQkgcmV3ckZvcm0tPmV2X2NsYXNzKSwKKwkJCQkJCSAid2hlcmVfY2xhdXNl IiwgT2JqVHlwZU9iamVjdCwgdG1wLAorCQkJCQkJICJpbnN0ZWFkIiwgT2JqVHlwZVN0cmluZywK KwkJCQkJCSBub2RlLT5pbnN0ZWFkID8gIklOU1RFQUQiIDogIkFMU08iLAorCQkJCQkJICJhY3Rp b25zIiwgT2JqVHlwZUFycmF5LCBsaXN0KTsKKworCXN5c3RhYmxlX2VuZHNjYW4oc2Nhbik7CisJ dGFibGVfY2xvc2UocGdfcmV3cml0ZSwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiByZXQ7 Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlVHJhbnNmb3JtU3RtdCAoQ1JFQVRFIFRSQU5T Rk9STSkuCisgKgorICogR2l2ZW4gYSB0cmFuc2Zvcm0gT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0 aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIENS RUFURSBUUkFOU0ZPUk0gY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRF ICV7b3JfcmVwbGFjZX1zIFRSQU5TRk9STSBGT1IgJXt0eXBlbmFtZX1EIExBTkdVQUdFICV7bGFu Z3VhZ2V9SQorICogKCBGUk9NIFNRTCBXSVRIIEZVTkNUSU9OICV7c2lnbmF0dXJlfXMsIFRPIFNR TCBXSVRIIEZVTkNUSU9OCisgKiAle3NpZ25hdHVyZV90b2Z9cyApCisgKi8KK3N0YXRpYyBPYmpU cmVlICoKK2RlcGFyc2VfQ3JlYXRlVHJhbnNmb3JtU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBh cnNldHJlZSkKK3sKKwlDcmVhdGVUcmFuc2Zvcm1TdG10ICpub2RlID0gKENyZWF0ZVRyYW5zZm9y bVN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICpzaWdu YXR1cmU7CisJSGVhcFR1cGxlCXRyZlR1cDsKKwlIZWFwVHVwbGUJbGFuZ1R1cDsKKwlIZWFwVHVw bGUJcHJvY1R1cDsKKwlGb3JtX3BnX3RyYW5zZm9ybSB0cmZGb3JtOworCUZvcm1fcGdfbGFuZ3Vh Z2UgbGFuZ0Zvcm07CisJRm9ybV9wZ19wcm9jIHByb2NGb3JtOworCWludAkJCWk7CisKKwkvKiBH ZXQgdGhlIHBnX3RyYW5zZm9ybSB0dXBsZSAqLworCXRyZlR1cCA9IFNlYXJjaFN5c0NhY2hlMShU UkZPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFs aWQodHJmVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHRyYW5z Zm9ybSB3aXRoIE9JRCAldSIsCisJCQkgb2JqZWN0SWQpOworCXRyZkZvcm0gPSAoRm9ybV9wZ190 cmFuc2Zvcm0pIEdFVFNUUlVDVCh0cmZUdXApOworCisJLyogR2V0IHRoZSBjb3JyZXNwb25kaW5n IHBnX2xhbmd1YWdlIHR1cGxlICovCisJbGFuZ1R1cCA9IFNlYXJjaFN5c0NhY2hlMShMQU5HT0lE LCB0cmZGb3JtLT50cmZsYW5nKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQobGFuZ1R1cCkpCisJ CWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBsYW5ndWFnZSB3aXRoIE9JRCAl dSIsCisJCQkgdHJmRm9ybS0+dHJmbGFuZyk7CisJbGFuZ0Zvcm0gPSAoRm9ybV9wZ19sYW5ndWFn ZSkgR0VUU1RSVUNUKGxhbmdUdXApOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSAl e29yX3JlcGxhY2V9cyBUUkFOU0ZPUk0gRk9SICV7dHlwZW5hbWV9RCBMQU5HVUFHRSAle2xhbmd1 YWdlfUkiLCAzLAorCQkJCQkJICJvcl9yZXBsYWNlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBu b2RlLT5yZXBsYWNlID8gIk9SIFJFUExBQ0UiIDogIiIsCisJCQkJCQkgInR5cGVuYW1lIiwgT2Jq VHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoVHlwZVJlbGF0 aW9uSWQsCisJCQkJCQkJCQkJCQkJIHRyZkZvcm0tPnRyZnR5cGUpLAorCQkJCQkJICJsYW5ndWFn ZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgTmFtZVN0cihsYW5nRm9ybS0+bGFubmFtZSkpOwor CisJLyogRGVwYXJzZSB0aGUgdHJhbnNmb3JtX2VsZW1lbnRfbGlzdCAqLworCWlmIChPaWRJc1Zh bGlkKHRyZkZvcm0tPnRyZmZyb21zcWwpKQorCXsKKwkJTGlzdAkgICAqcGFyYW1zID0gTklMOwor CisJCS8qIEdldCB0aGUgcGdfcHJvYyB0dXBsZSBmb3IgdGhlIEZST00gRlVOQ1RJT04gKi8KKwkJ cHJvY1R1cCA9IFNlYXJjaFN5c0NhY2hlMShQUk9DT0lELCB0cmZGb3JtLT50cmZmcm9tc3FsKTsK KwkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHByb2NUdXApKQorCQkJZWxvZyhFUlJPUiwgImNhY2hl IGxvb2t1cCBmYWlsZWQgZm9yIGZ1bmN0aW9uIHdpdGggT0lEICV1IiwKKwkJCQkgdHJmRm9ybS0+ dHJmZnJvbXNxbCk7CisJCXByb2NGb3JtID0gKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKHByb2NU dXApOworCisJCS8qCisJCSAqIENSRUFURSBUUkFOU0ZPUk0gZG9lcyBub3QgY2hhbmdlIGZ1bmN0 aW9uIHNpZ25hdHVyZSBzbyB3ZSBjYW4gdXNlCisJCSAqIGNhdGFsb2cgdG8gZ2V0IGlucHV0IHR5 cGUgT2lkcy4KKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCBwcm9jRm9ybS0+cHJvbmFyZ3M7IGkr KykKKwkJeworCQkJT2JqVHJlZSAgICAqcGFyYW1fb2JqOworCisJCQlwYXJhbV9vYmogPSBuZXdf b2JqdHJlZV9WQSgiJXt0eXBlfVQiLCAxLAorCQkJCQkJCQkJICAidHlwZSIsIE9ialR5cGVPYmpl Y3QsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShwcm9jRm9ybS0+cHJvYXJndHlwZXMu dmFsdWVzW2ldLCAtMSkpOworCQkJcGFyYW1zID0gbGFwcGVuZChwYXJhbXMsIG5ld19vYmplY3Rf b2JqZWN0KHBhcmFtX29iaikpOworCQl9CisKKwkJc2lnbmF0dXJlID0gbmV3X29ianRyZWVfVkEo IiV7aWRlbnRpdHl9RCAoJXthcmd1bWVudHM6LCB9cykiLCAyLAorCQkJCQkJCQkgICAiaWRlbnRp dHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkgICBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUo cHJvY0Zvcm0tPnByb25hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJCU5hbWVTdHIocHJvY0Zvcm0t PnByb25hbWUpKSwKKwkJCQkJCQkJICAgImFyZ3VtZW50cyIsIE9ialR5cGVBcnJheSwgcGFyYW1z KTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIoRlJPTSBTUUwgV0lUSCBGVU5DVElP TiAle3NpZ25hdHVyZX1zIiwKKwkJCQkJCQkgc2lnbmF0dXJlKTsKKwkJUmVsZWFzZVN5c0NhY2hl KHByb2NUdXApOworCX0KKwlpZiAoT2lkSXNWYWxpZCh0cmZGb3JtLT50cmZ0b3NxbCkpCisJewor CQlMaXN0CSAgICpwYXJhbXMgPSBOSUw7CisKKwkJLyogQXBwZW5kIGEgJywnIGlmIHRyZmZyb21z cWwgaXMgcHJlc2VudCwgZWxzZSBhcHBlbmQgJygnICovCisJCWFwcGVuZF9mb3JtYXRfc3RyaW5n KHJldCwgT2lkSXNWYWxpZCh0cmZGb3JtLT50cmZmcm9tc3FsKSA/ICIsIiA6ICIoIik7CisKKwkJ LyogR2V0IHRoZSBwZ19wcm9jIHR1cGxlIGZvciB0aGUgVE8gRlVOQ1RJT04gKi8KKwkJcHJvY1R1 cCA9IFNlYXJjaFN5c0NhY2hlMShQUk9DT0lELCB0cmZGb3JtLT50cmZ0b3NxbCk7CisJCWlmICgh SGVhcFR1cGxlSXNWYWxpZChwcm9jVHVwKSkKKwkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAg ZmFpbGVkIGZvciBmdW5jdGlvbiB3aXRoIE9JRCAldSIsCisJCQkJIHRyZkZvcm0tPnRyZnRvc3Fs KTsKKwkJcHJvY0Zvcm0gPSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1QocHJvY1R1cCk7CisKKwkJ LyoKKwkJICogQ1JFQVRFIFRSQU5TRk9STSBkb2VzIG5vdCBjaGFuZ2UgZnVuY3Rpb24gc2lnbmF0 dXJlIHNvIHdlIGNhbiB1c2UKKwkJICogY2F0YWxvZyB0byBnZXQgaW5wdXQgdHlwZSBPaWRzLgor CQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IHByb2NGb3JtLT5wcm9uYXJnczsgaSsrKQorCQl7CisJ CQlPYmpUcmVlICAgICpwYXJhbV9vYmogPSBuZXdfb2JqdHJlZSgiIik7CisKKwkJCXBhcmFtX29i aiA9IG5ld19vYmp0cmVlX1ZBKCIle3R5cGV9VCIsIDEsCisJCQkJCQkJCQkgICJ0eXBlIiwgT2Jq VHlwZU9iamVjdCwKKwkJCQkJCQkJCSAgbmV3X29ianRyZWVfZm9yX3R5cGUocHJvY0Zvcm0tPnBy b2FyZ3R5cGVzLnZhbHVlc1tpXSwgLTEpKTsKKwkJCXBhcmFtcyA9IGxhcHBlbmQocGFyYW1zLCBu ZXdfb2JqZWN0X29iamVjdChwYXJhbV9vYmopKTsKKwkJfQorCisJCXNpZ25hdHVyZSA9IG5ld19v Ymp0cmVlX1ZBKCIle2lkZW50aXR5fUQgKCV7YXJndW1lbnRzOiwgfXMpIiwgMiwKKwkJCQkJCQkJ ICAgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJICAgbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lKHByb2NGb3JtLT5wcm9uYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCQlOYW1lU3Ry KHByb2NGb3JtLT5wcm9uYW1lKSksCisJCQkJCQkJCSAgICJhcmd1bWVudHMiLCBPYmpUeXBlQXJy YXksIHBhcmFtcyk7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiVE8gU1FMIFdJVEgg RlVOQ1RJT04gJXtzaWduYXR1cmVfdG9mfXMiLAorCQkJCQkJCSBzaWduYXR1cmUpOworCQlSZWxl YXNlU3lzQ2FjaGUocHJvY1R1cCk7CisJfQorCisJYXBwZW5kX2Zvcm1hdF9zdHJpbmcocmV0LCAi KSIpOworCisJUmVsZWFzZVN5c0NhY2hlKGxhbmdUdXApOworCVJlbGVhc2VTeXNDYWNoZSh0cmZU dXApOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ29tbWVudFN0bXQgd2hl biBpdCBwZXJ0YWlucyB0byBhIGNvbnN0cmFpbnQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAq IENPTU1FTlQgT04gQ09OU1RSQUlOVCAle2lkZW50aXR5fXMgT04gW0RPTUFJTl0gJXtwYXJlbnRv Ymp9cyBJUyAle2NvbW1lbnR9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NvbW1l bnRPbkNvbnN0cmFpbnRTbXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ29t bWVudFN0bXQgKm5vZGUgPSAoQ29tbWVudFN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAg KnJldDsKKwlIZWFwVHVwbGUJY29uc3RyVHVwOworCUZvcm1fcGdfY29uc3RyYWludCBjb25zdHJG b3JtOworCU9iamVjdEFkZHJlc3MgYWRkcjsKKworCUFzc2VydChub2RlLT5vYmp0eXBlID09IE9C SkVDVF9UQUJDT05TVFJBSU5UIHx8IG5vZGUtPm9ianR5cGUgPT0gT0JKRUNUX0RPTUNPTlNUUkFJ TlQpOworCisJY29uc3RyVHVwID0gU2VhcmNoU3lzQ2FjaGUxKENPTlNUUk9JRCwgb2JqZWN0SWQp OworCWlmICghSGVhcFR1cGxlSXNWYWxpZChjb25zdHJUdXApKQorCQllbG9nKEVSUk9SLCAiY2Fj aGUgbG9va3VwIGZhaWxlZCBmb3IgY29uc3RyYWludCB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsK Kwljb25zdHJGb3JtID0gKEZvcm1fcGdfY29uc3RyYWludCkgR0VUU1RSVUNUKGNvbnN0clR1cCk7 CisKKwlpZiAoT2lkSXNWYWxpZChjb25zdHJGb3JtLT5jb25yZWxpZCkpCisJCU9iamVjdEFkZHJl c3NTZXQoYWRkciwgUmVsYXRpb25SZWxhdGlvbklkLCBjb25zdHJGb3JtLT5jb25yZWxpZCk7CisJ ZWxzZQorCQlPYmplY3RBZGRyZXNzU2V0KGFkZHIsIFR5cGVSZWxhdGlvbklkLCBjb25zdHJGb3Jt LT5jb250eXBpZCk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ09NTUVOVCBPTiBDT05TVFJB SU5UICV7aWRlbnRpdHl9cyBPTiAle2RvbWFpbn1zICV7cGFyZW50b2JqfXMiLCAzLAorCQkJCQkJ ICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIHBzdHJkdXAoTmFtZVN0cihjb25zdHJGb3JtLT5j b25uYW1lKSksCisJCQkJCQkgImRvbWFpbiIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgKG5vZGUt Pm9ianR5cGUgPT0gT0JKRUNUX0RPTUNPTlNUUkFJTlQpID8gIkRPTUFJTiIgOiAiIiwKKwkJCQkJ CSAicGFyZW50b2JqIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBnZXRPYmplY3RJZGVudGl0eSgm YWRkciwgZmFsc2UpKTsKKworCS8qIEFkZCB0aGUgY29tbWVudCBjbGF1c2UgKi8KKwlhcHBlbmRf bGl0ZXJhbF9vcl9udWxsKHJldCwgIklTICV7Y29tbWVudH1zIiwgbm9kZS0+Y29tbWVudCk7CisK KwlSZWxlYXNlU3lzQ2FjaGUoY29uc3RyVHVwKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICog RGVwYXJzZSBhbiBDb21tZW50U3RtdCAoQ09NTUVOVCBPTiAuLi4pLgorICoKKyAqIEdpdmVuIHRo ZSBvYmplY3QgYWRkcmVzcyBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1 cm4gYW4KKyAqIE9ialRyZWUgcmVwcmVzZW50aW5nIHRoZSBjb21tZW50IGNvbW1hbmQuCisgKgor ICogVmVyYm9zZSBzeW50YXgKKyAqIENPTU1FTlQgT04gJXtvYmp0eXBlfXMgJXtpZGVudGl0eX1z IElTICV7Y29tbWVudH1zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ29tbWVudFN0 bXQoT2JqZWN0QWRkcmVzcyBhZGRyZXNzLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ29tbWVudFN0 bXQgKm5vZGUgPSAoQ29tbWVudFN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJldDsK KwljaGFyCSAgICppZGVudGl0eTsKKworCS8qCisJICogQ29uc3RyYWludHMgYXJlIHN1ZmZpY2ll bnRseSBkaWZmZXJlbnQgdGhhdCBpdCBpcyBlYXNpZXIgdG8gaGFuZGxlIHRoZW0KKwkgKiBzZXBh cmF0ZWx5LgorCSAqLworCWlmIChub2RlLT5vYmp0eXBlID09IE9CSkVDVF9ET01DT05TVFJBSU5U IHx8CisJCW5vZGUtPm9ianR5cGUgPT0gT0JKRUNUX1RBQkNPTlNUUkFJTlQpCisJeworCQlBc3Nl cnQoYWRkcmVzcy5jbGFzc0lkID09IENvbnN0cmFpbnRSZWxhdGlvbklkKTsKKwkJcmV0dXJuIGRl cGFyc2VfQ29tbWVudE9uQ29uc3RyYWludFNtdChhZGRyZXNzLm9iamVjdElkLCBwYXJzZXRyZWUp OworCX0KKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDT01NRU5UIE9OICV7b2JqdHlwZX1zIiwg MSwKKwkJCQkJCSAib2JqdHlwZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgKGNoYXIgKikgc3Ry aW5naWZ5X29ianR5cGUobm9kZS0+b2JqdHlwZSwgZmFsc2UpKTsKKworCS8qCisJICogQWRkIHRo ZSBvYmplY3QgaWRlbnRpdHkgY2xhdXNlLiAgRm9yIHplcm8gYXJndW1lbnQgYWdncmVnYXRlcyB3 ZSBuZWVkCisJICogdG8gYWRkIHRoZSAoKikgYml0OyBpbiBhbGwgb3RoZXIgY2FzZXMgd2UgY2Fu IGp1c3QgdXNlCisJICogZ2V0T2JqZWN0SWRlbnRpdHkuCisJICoKKwkgKiBYWFggc2hvdWxkbid0 IHdlIGluc3RlYWQgZml4IHRoZSBvYmplY3QgaWRlbnRpdGllcyBmb3IgemVyby1hcmd1bWVudAor CSAqIGFnZ3JlZ2F0ZXM/CisJICovCisJaWYgKG5vZGUtPm9ianR5cGUgPT0gT0JKRUNUX0FHR1JF R0FURSkKKwl7CisJCUhlYXBUdXBsZQlwcm9jVHVwOworCQlGb3JtX3BnX3Byb2MgcHJvY0Zvcm07 CisKKwkJcHJvY1R1cCA9IFNlYXJjaFN5c0NhY2hlMShQUk9DT0lELCBPYmplY3RJZEdldERhdHVt KGFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHByb2NUdXApKQor CQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHByb2NlZHVyZSB3aXRoIE9J RCAldSIsCisJCQkJIGFkZHJlc3Mub2JqZWN0SWQpOworCQlwcm9jRm9ybSA9IChGb3JtX3BnX3By b2MpIEdFVFNUUlVDVChwcm9jVHVwKTsKKwkJaWYgKHByb2NGb3JtLT5wcm9uYXJncyA9PSAwKQor CQkJaWRlbnRpdHkgPSBwc3ByaW50ZigiJXMoKikiLAorCQkJCQkJCQlxdW90ZV9xdWFsaWZpZWRf aWRlbnRpZmllcihnZXRfbmFtZXNwYWNlX25hbWUocHJvY0Zvcm0tPnByb25hbWVzcGFjZSksCisJ CQkJCQkJCQkJCQkJCSAgIE5hbWVTdHIocHJvY0Zvcm0tPnByb25hbWUpKSk7CisJCWVsc2UKKwkJ CWlkZW50aXR5ID0gZ2V0T2JqZWN0SWRlbnRpdHkoJmFkZHJlc3MsIGZhbHNlKTsKKwkJUmVsZWFz ZVN5c0NhY2hlKHByb2NUdXApOworCX0KKwllbHNlCisJCWlkZW50aXR5ID0gZ2V0T2JqZWN0SWRl bnRpdHkoJmFkZHJlc3MsIGZhbHNlKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7 aWRlbnRpdHl9cyIsICJpZGVudGl0eSIsIGlkZW50aXR5KTsKKworCS8qIEFkZCB0aGUgY29tbWVu dCBjbGF1c2U7IGNhbiBiZSBlaXRoZXIgTlVMTCBvciBhIHF1b3RlZCBsaXRlcmFsLiAqLworCWFw cGVuZF9saXRlcmFsX29yX251bGwocmV0LCAiSVMgJXtjb21tZW50fXMiLCBub2RlLT5jb21tZW50 KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgU2VjTGFiZWxTdG10IChT RUNVUklUWSBMQUJFTCkKKyAqCisgKiBHaXZlbiB0aGUgT2JqZWN0QWRkcmVzcyBvZiB0aGUgdGFy Z2V0IG9iamVjdCBhbmQgdGhlIHBhcnNlIHRyZWUgb2YgdGhlCisgKiBTRUNVUklUWSBMQUJFTCBj b21tYW5kLCByZXR1cm4gYW4gT2JqVHJlZSByZXByZXNlbnRpbmcgdGhlIFNFQ1VSSVRZIExBQkVM CisgKiBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBTRUNVUklUWSBMQUJFTCBG T1IgJXtwcm92aWRlcn1zIE9OICV7b2JqZWN0X3R5cGVfbmFtZX1zICV7aWRlbnRpdHl9cyBJUyAl e2xhYmVsfXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9TZWNMYWJlbFN0bXQoT2Jq ZWN0QWRkcmVzcyBhZGRyZXNzLCBOb2RlICpwYXJzZXRyZWUpCit7CisJU2VjTGFiZWxTdG10ICpu b2RlID0gKFNlY0xhYmVsU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZQkgICAqcmV0OworCisJ QXNzZXJ0KG5vZGUtPnByb3ZpZGVyKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJTRUNVUklU WSBMQUJFTCBGT1IgJXtwcm92aWRlcn1zIE9OICV7b2JqdHlwZX1zICV7aWRlbnRpdHl9cyIsIDMs CisJCQkJCQkgInByb3ZpZGVyIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+cHJvdmlkZXIsCisJCQkJ CQkgIm9ianR5cGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIHN0cmluZ2lmeV9vYmp0eXBlKG5v ZGUtPm9ianR5cGUsIGZhbHNlKSwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBn ZXRPYmplY3RJZGVudGl0eSgmYWRkcmVzcywgZmFsc2UpKTsKKworCS8qIEFkZCB0aGUgbGFiZWwg Y2xhdXNlOyBjYW4gYmUgZWl0aGVyIE5VTEwgb3IgYSBxdW90ZWQgbGl0ZXJhbC4gKi8KKwlhcHBl bmRfbGl0ZXJhbF9vcl9udWxsKHJldCwgIklTICV7bGFiZWx9cyIsIG5vZGUtPmxhYmVsKTsKKwor CXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlQW1TdG10IChDUkVBVEUg QUNDRVNTIE1FVEhPRCkuCisgKgorICogR2l2ZW4gYW4gYWNjZXNzIG1ldGhvZCBPSUQgYW5kIHRo ZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuCisgKiBPYmpUcmVlIHJlcHJl c2VudGluZyB0aGUgQ1JFQVRFIEFDQ0VTUyBNRVRIT0QgY29tbWFuZC4KKyAqCisgKiBWZXJib3Nl IHN5bnRheAorICogQ1JFQVRFIEFDQ0VTUyBNRVRIT0QgJXtpZGVudGl0eX1JIFRZUEUgJXthbV90 eXBlfXMgSEFORExFUiAle2hhbmRsZXJ9RAorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNl X0NyZWF0ZUFtU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlPYmpUcmVl ICAgICpyZXQ7CisJSGVhcFR1cGxlCWFtVHVwOworCUZvcm1fcGdfYW0JYW1Gb3JtOworCWNoYXIJ ICAgKmFtdHlwZTsKKworCWFtVHVwID0gU2VhcmNoU3lzQ2FjaGUxKEFNT0lELCBPYmplY3RJZEdl dERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGFtVHVwKSkKKwkJZWxv ZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGFjY2VzcyBtZXRob2Qgd2l0aCBPSUQg JXUiLAorCQkJIG9iamVjdElkKTsKKwlhbUZvcm0gPSAoRm9ybV9wZ19hbSkgR0VUU1RSVUNUKGFt VHVwKTsKKworCXN3aXRjaCAoYW1Gb3JtLT5hbXR5cGUpCisJeworCQljYXNlICdpJzoKKwkJCWFt dHlwZSA9ICJJTkRFWCI7CisJCQlicmVhazsKKwkJY2FzZSAndCc6CisJCQlhbXR5cGUgPSAiVEFC TEUiOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCB0eXBl ICVjIGZvciBhY2Nlc3MgbWV0aG9kIiwgYW1Gb3JtLT5hbXR5cGUpOworCX0KKworCXJldCA9IG5l d19vYmp0cmVlX1ZBKCJDUkVBVEUgQUNDRVNTIE1FVEhPRCAle2lkZW50aXR5fUkgVFlQRSAle2Ft X3R5cGV9cyBIQU5ETEVSICV7aGFuZGxlcn1EIiwgMywKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpU eXBlU3RyaW5nLAorCQkJCQkJIE5hbWVTdHIoYW1Gb3JtLT5hbW5hbWUpLAorCQkJCQkJICJhbV90 eXBlIiwgT2JqVHlwZVN0cmluZywgYW10eXBlLAorCQkJCQkJICJoYW5kbGVyIiwgT2JqVHlwZU9i amVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRp b25JZCwKKwkJCQkJCQkJCQkJCQkgYW1Gb3JtLT5hbWhhbmRsZXIpKTsKKworCVJlbGVhc2VTeXND YWNoZShhbVR1cCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogSGFuZGxlIGRlcGFyc2lu ZyBvZiBzaW1wbGUgY29tbWFuZHMuCisgKgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgY292ZXIg YWxsIGNhc2VzIGhhbmRsZWQgaW4gUHJvY2Vzc1V0aWxpdHlTbG93LgorICovCitzdGF0aWMgT2Jq VHJlZSAqCitkZXBhcnNlX3NpbXBsZV9jb21tYW5kKENvbGxlY3RlZENvbW1hbmQgKmNtZCkKK3sK KwlPaWQJCQlvYmplY3RJZDsKKwlOb2RlCSAgICpwYXJzZXRyZWU7CisKKwlBc3NlcnQoY21kLT50 eXBlID09IFNDVF9TaW1wbGUpOworCisJcGFyc2V0cmVlID0gY21kLT5wYXJzZXRyZWU7CisJb2Jq ZWN0SWQgPSBjbWQtPmQuc2ltcGxlLmFkZHJlc3Mub2JqZWN0SWQ7CisKKwlpZiAoY21kLT5pbl9l eHRlbnNpb24gJiYgKG5vZGVUYWcocGFyc2V0cmVlKSAhPSBUX0NyZWF0ZUV4dGVuc2lvblN0bXQp KQorCQlyZXR1cm4gTlVMTDsKKworCS8qIFRoaXMgc3dpdGNoIG5lZWRzIHRvIGhhbmRsZSBldmVy eXRoaW5nIHRoYXQgUHJvY2Vzc1V0aWxpdHlTbG93IGRvZXMgKi8KKwlzd2l0Y2ggKG5vZGVUYWco cGFyc2V0cmVlKSkKKwl7CisJCWNhc2UgVF9BbHRlckNvbGxhdGlvblN0bXQ6CisJCQlyZXR1cm4g ZGVwYXJzZV9BbHRlckNvbGxhdGlvbihvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRf QWx0ZXJEb21haW5TdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQWx0ZXJEb21haW5TdG10KG9iamVj dElkLCBwYXJzZXRyZWUsCisJCQkJCQkJCQkJICAgY21kLT5kLnNpbXBsZS5zZWNvbmRhcnlPYmpl Y3QpOworCisJCWNhc2UgVF9BbHRlckVudW1TdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQWx0ZXJF bnVtU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQWx0ZXJFeHRlbnNpb25D b250ZW50c1N0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9BbHRlckV4dGVuc2lvbkNvbnRlbnRzU3Rt dChvYmplY3RJZCwgcGFyc2V0cmVlLAorCQkJCQkJCQkJCQkJCSAgY21kLT5kLnNpbXBsZS5zZWNv bmRhcnlPYmplY3QpOworCisJCWNhc2UgVF9BbHRlckV4dGVuc2lvblN0bXQ6CisJCQlyZXR1cm4g ZGVwYXJzZV9BbHRlckV4dGVuc2lvblN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2Fz ZSBUX0FsdGVyRmR3U3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0FsdGVyRmR3U3RtdChvYmplY3RJ ZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQWx0ZXJGb3JlaWduU2VydmVyU3RtdDoKKwkJCXJl dHVybiBkZXBhcnNlX0FsdGVyRm9yZWlnblNlcnZlclN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7 CisKKwkJY2FzZSBUX0FsdGVyRnVuY3Rpb25TdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQWx0ZXJG dW5jdGlvbihvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQWx0ZXJPYmplY3REZXBl bmRzU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0FsdGVyRGVwZW5kU3RtdChvYmplY3RJZCwgcGFy c2V0cmVlKTsKKworCQljYXNlIFRfQWx0ZXJPYmplY3RTY2hlbWFTdG10OgorCQkJcmV0dXJuIGRl cGFyc2VfQWx0ZXJPYmplY3RTY2hlbWFTdG10KGNtZC0+ZC5zaW1wbGUuYWRkcmVzcywKKwkJCQkJ CQkJCQkJCSBwYXJzZXRyZWUsCisJCQkJCQkJCQkJCQkgY21kLT5kLnNpbXBsZS5zZWNvbmRhcnlP YmplY3QpOworCisJCWNhc2UgVF9BbHRlck9wZXJhdG9yU3RtdDoKKwkJCXJldHVybiBkZXBhcnNl X0FsdGVyT3BlcmF0b3JTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9BbHRl ck93bmVyU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0FsdGVyT3duZXJTdG10KGNtZC0+ZC5zaW1w bGUuYWRkcmVzcywgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQWx0ZXJQb2xpY3lTdG10OgorCQkJ cmV0dXJuIGRlcGFyc2VfQWx0ZXJQb2xpY3lTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJ CWNhc2UgVF9BbHRlclNlcVN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9BbHRlclNlcVN0bXQob2Jq ZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0FsdGVyU3RhdHNTdG10OgorCQkJcmV0dXJu IGRlcGFyc2VfQWx0ZXJTdGF0c1N0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBU X0FsdGVyVFNEaWN0aW9uYXJ5U3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0FsdGVyVFNEaWN0aW9u YXJ5U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQWx0ZXJUeXBlU3RtdDoK KwkJCXJldHVybiBkZXBhcnNlX0FsdGVyVHlwZVNldFN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7 CisKKwkJY2FzZSBUX0FsdGVyVXNlck1hcHBpbmdTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQWx0 ZXJVc2VyTWFwcGluZ1N0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0NvbW1l bnRTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQ29tbWVudFN0bXQoY21kLT5kLnNpbXBsZS5hZGRy ZXNzLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9Db21wb3NpdGVUeXBlU3RtdDoKKwkJCXJldHVy biBkZXBhcnNlX0NvbXBvc2l0ZVR5cGVTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNh c2UgVF9DcmVhdGVBbVN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVBbVN0bXQob2JqZWN0 SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0NyZWF0ZUNhc3RTdG10OgorCQkJcmV0dXJuIGRl cGFyc2VfQ3JlYXRlQ2FzdFN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0Ny ZWF0ZUNvbnZlcnNpb25TdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQ3JlYXRlQ29udmVyc2lvbihv YmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRlRG9tYWluU3RtdDoKKwkJCXJl dHVybiBkZXBhcnNlX0NyZWF0ZURvbWFpbihvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNl IFRfQ3JlYXRlRW51bVN0bXQ6CS8qIENSRUFURSBUWVBFIEFTIEVOVU0gKi8KKwkJCXJldHVybiBk ZXBhcnNlX0NyZWF0ZUVudW1TdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9D cmVhdGVFeHRlbnNpb25TdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQ3JlYXRlRXh0ZW5zaW9uU3Rt dChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRlRmR3U3RtdDoKKwkJCXJl dHVybiBkZXBhcnNlX0NyZWF0ZUZkd1N0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2Fz ZSBUX0NyZWF0ZUZvcmVpZ25TZXJ2ZXJTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQ3JlYXRlRm9y ZWlnblNlcnZlclN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0NyZWF0ZUZ1 bmN0aW9uU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0NyZWF0ZUZ1bmN0aW9uKG9iamVjdElkLCBw YXJzZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVPcEZhbWlseVN0bXQ6CisJCQlyZXR1cm4gZGVw YXJzZV9DcmVhdGVPcEZhbWlseShvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ3Jl YXRlUExhbmdTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQ3JlYXRlTGFuZ1N0bXQob2JqZWN0SWQs IHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0NyZWF0ZVBvbGljeVN0bXQ6CisJCQlyZXR1cm4gZGVw YXJzZV9DcmVhdGVQb2xpY3lTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9D cmVhdGVSYW5nZVN0bXQ6IC8qIENSRUFURSBUWVBFIEFTIFJBTkdFICovCisJCQlyZXR1cm4gZGVw YXJzZV9DcmVhdGVSYW5nZVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0Ny ZWF0ZVNjaGVtYVN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVTY2hlbWFTdG10KG9iamVj dElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVTZXFTdG10OgorCQkJcmV0dXJuIGRl cGFyc2VfQ3JlYXRlU2VxU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ3Jl YXRlU3RhdHNTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQ3JlYXRlU3RhdGlzdGljc1N0bXQob2Jq ZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0NyZWF0ZVN0bXQ6CisJCQlyZXR1cm4gZGVw YXJzZV9DcmVhdGVTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVG b3JlaWduVGFibGVTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQ3JlYXRlRm9yZWlnblRhYmxlU3Rt dChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRlVGFibGVBc1N0bXQ6CS8q IENSRUFURSBNQVRFUklBTElaRUQgVklFVyAqLworCQkJcmV0dXJuIGRlcGFyc2VfQ3JlYXRlVGFi bGVBc1N0bXRfdmFuaWxsYShvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRl VHJhbnNmb3JtU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0NyZWF0ZVRyYW5zZm9ybVN0bXQob2Jq ZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0NyZWF0ZVRyaWdTdG10OgorCQkJcmV0dXJu IGRlcGFyc2VfQ3JlYXRlVHJpZ1N0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBU X0NyZWF0ZVVzZXJNYXBwaW5nU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0NyZWF0ZVVzZXJNYXBw aW5nU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfRGVmaW5lU3RtdDoKKwkJ CXJldHVybiBkZXBhcnNlX0RlZmluZVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSwKKwkJCQkJCQkJ CSAgY21kLT5kLnNpbXBsZS5zZWNvbmRhcnlPYmplY3QpOworCisJCWNhc2UgVF9JbmRleFN0bXQ6 CisJCQlyZXR1cm4gZGVwYXJzZV9JbmRleFN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJ Y2FzZSBUX1JlZnJlc2hNYXRWaWV3U3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX1JlZnJlc2hNYXRW aWV3U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfUmVuYW1lU3RtdDoKKwkJ CXJldHVybiBkZXBhcnNlX1JlbmFtZVN0bXQoY21kLT5kLnNpbXBsZS5hZGRyZXNzLCBwYXJzZXRy ZWUpOworCisJCWNhc2UgVF9SdWxlU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX1J1bGVTdG10KG9i amVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9WaWV3U3RtdDoJCS8qIENSRUFURSBWSUVX ICovCisJCQlyZXR1cm4gZGVwYXJzZV9WaWV3U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwor CQljYXNlIFRfU2VjTGFiZWxTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfU2VjTGFiZWxTdG10KGNt ZC0+ZC5zaW1wbGUuYWRkcmVzcywgcGFyc2V0cmVlKTsKKworCQlkZWZhdWx0OgorCQkJZWxvZyhM T0csICJ1bnJlY29nbml6ZWQgbm9kZSB0eXBlIGluIGRlcGFyc2UgY29tbWFuZDogJWQiLAorCQkJ CSAoaW50KSBub2RlVGFnKHBhcnNldHJlZSkpOworCX0KKworCXJldHVybiBOVUxMOworfQorCisv KgorICogV29ya2hvcnNlIHRvIGRlcGFyc2UgYSBDb2xsZWN0ZWRDb21tYW5kLgorICovCitjaGFy ICoKK2RlcGFyc2VfdXRpbGl0eV9jb21tYW5kKENvbGxlY3RlZENvbW1hbmQgKmNtZCwgYm9vbCB2 ZXJib3NlX21vZGUpCit7CisJT3ZlcnJpZGVTZWFyY2hQYXRoICpvdmVycmlkZVBhdGg7CisJTWVt b3J5Q29udGV4dCBvbGRjeHQ7CisJTWVtb3J5Q29udGV4dCB0bXBjeHQ7CisJT2JqVHJlZSAgICAq dHJlZTsKKwljaGFyCSAgICpjb21tYW5kID0gTlVMTDsKKwlTdHJpbmdJbmZvRGF0YSBzdHI7CisK KwkvKgorCSAqIEFsbG9jYXRlIGV2ZXJ5dGhpbmcgZG9uZSBieSB0aGUgZGVwYXJzaW5nIHJvdXRp bmVzIGludG8gYSB0ZW1wIGNvbnRleHQsCisJICogdG8gYXZvaWQgaGF2aW5nIHRvIHNwcmlua2xl IHRoZW0gd2l0aCBtZW1vcnkgaGFuZGxpbmcgY29kZSwgYnV0CisJICogYWxsb2NhdGUgdGhlIG91 dHB1dCBTdHJpbmdJbmZvIGJlZm9yZSBzd2l0Y2hpbmcuCisJICovCisJaW5pdFN0cmluZ0luZm8o JnN0cik7CisJdG1wY3h0ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKEN1cnJlbnRNZW1vcnlDb250 ZXh0LAorCQkJCQkJCQkgICAiZGVwYXJzZSBjdHgiLAorCQkJCQkJCQkgICBBTExPQ1NFVF9ERUZB VUxUX01JTlNJWkUsCisJCQkJCQkJCSAgIEFMTE9DU0VUX0RFRkFVTFRfSU5JVFNJWkUsCisJCQkJ CQkJCSAgIEFMTE9DU0VUX0RFRkFVTFRfTUFYU0laRSk7CisJb2xkY3h0ID0gTWVtb3J5Q29udGV4 dFN3aXRjaFRvKHRtcGN4dCk7CisKKwkvKgorCSAqIE1hbnkgcm91dGluZXMgdW5kZXJseWluZyB0 aGlzIG9uZSB3aWxsIGludm9rZSBydWxldXRpbHMuYyBmdW5jdGlvbmFsaXR5CisJICogdG8gb2J0 YWluIGRlcGFyc2VkIHZlcnNpb25zIG9mIGV4cHJlc3Npb25zLiAgSW4gc3VjaCByZXN1bHRzLCB3 ZSB3YW50CisJICogYWxsIG9iamVjdCBuYW1lcyB0byBiZSBxdWFsaWZpZWQsIHNvIHRoYXQgcmVz dWx0cyBhcmUgInBvcnRhYmxlIiB0bworCSAqIGVudmlyb25tZW50cyB3aXRoIGRpZmZlcmVudCBz ZWFyY2hfcGF0aCBzZXR0aW5ncy4gIFJhdGhlciB0aGFuIGluamVjdAorCSAqIHdoYXQgd291bGQg YmUgcmVwZXRpdGl2ZSBjYWxscyB0byBvdmVycmlkZSBzZWFyY2ggcGF0aCBhbGwgb3ZlciB0aGUK KwkgKiBwbGFjZSwgd2UgZG8gaXQgY2VudHJhbGx5IGhlcmUuCisJICovCisJb3ZlcnJpZGVQYXRo ID0gR2V0T3ZlcnJpZGVTZWFyY2hQYXRoKEN1cnJlbnRNZW1vcnlDb250ZXh0KTsKKwlvdmVycmlk ZVBhdGgtPnNjaGVtYXMgPSBOSUw7CisJb3ZlcnJpZGVQYXRoLT5hZGRDYXRhbG9nID0gZmFsc2U7 CisJb3ZlcnJpZGVQYXRoLT5hZGRUZW1wID0gdHJ1ZTsKKwlQdXNoT3ZlcnJpZGVTZWFyY2hQYXRo KG92ZXJyaWRlUGF0aCk7CisKKwl2ZXJib3NlID0gdmVyYm9zZV9tb2RlOworCisJc3dpdGNoIChj bWQtPnR5cGUpCisJeworCQljYXNlIFNDVF9TaW1wbGU6CisJCQl0cmVlID0gZGVwYXJzZV9zaW1w bGVfY29tbWFuZChjbWQpOworCQkJYnJlYWs7CisJCWNhc2UgU0NUX0FsdGVyVGFibGU6CisJCQl0 cmVlID0gZGVwYXJzZV9BbHRlclJlbGF0aW9uKGNtZCk7CisJCQlicmVhazsKKwkJY2FzZSBTQ1Rf R3JhbnQ6CisJCQl0cmVlID0gZGVwYXJzZV9HcmFudFN0bXQoY21kKTsKKwkJCWJyZWFrOworCQlj YXNlIFNDVF9DcmVhdGVUYWJsZUFzOgorCQkJdHJlZSA9IGRlcGFyc2VfQ3JlYXRlVGFibGVBc1N0 bXQoY21kKTsKKwkJCWJyZWFrOworCQljYXNlIFNDVF9BbHRlck9wRmFtaWx5OgorCQkJdHJlZSA9 IGRlcGFyc2VfQWx0ZXJPcEZhbWlseShjbWQpOworCQkJYnJlYWs7CisJCWNhc2UgU0NUX0NyZWF0 ZU9wQ2xhc3M6CisJCQl0cmVlID0gZGVwYXJzZV9DcmVhdGVPcENsYXNzU3RtdChjbWQpOworCQkJ YnJlYWs7CisJCWNhc2UgU0NUX0FsdGVyRGVmYXVsdFByaXZpbGVnZXM6CisJCQl0cmVlID0gZGVw YXJzZV9BbHRlckRlZmF1bHRQcml2aWxlZ2VzU3RtdChjbWQpOworCQkJYnJlYWs7CisJCWNhc2Ug U0NUX0FsdGVyVFNDb25maWc6CisJCQl0cmVlID0gZGVwYXJzZV9BbHRlclRTQ29uZmlndXJhdGlv blN0bXQoY21kKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJZWxvZyhFUlJPUiwgInVuZXhw ZWN0ZWQgZGVwYXJzZSBub2RlIHR5cGUgJWQiLCBjbWQtPnR5cGUpOwotLSAKMi4zOC4xCgo= --00000000000047050c05f1ae2f85 Content-Type: application/octet-stream; name="v60-0007-Document-DDL-replication-and-DDL-deparser.patch" Content-Disposition: attachment; filename="v60-0007-Document-DDL-replication-and-DDL-deparser.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lcm3fwef6 RnJvbSAzNDZlNzQ0NjY1NmQ2YmU4ODVlMDkwYWE3NzRiYWM5NThmYmM1OTZkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiWmhlbmcgKFphbmUpIExpIiA8emhlbGxpQGFtYXpvbi5jb20+ CkRhdGU6IFNhdCwgNyBKYW4gMjAyMyAwMDo0MDoyNCArMDAwMApTdWJqZWN0OiBbUEFUQ0ggNy83 XSBEb2N1bWVudCBEREwgcmVwbGljYXRpb24gYW5kIERETCBkZXBhcnNlci4KCi0tLQogZG9jL3Ny Yy9zZ21sL2xvZ2ljYWwtcmVwbGljYXRpb24uc2dtbCB8IDEwNTUgKysrKysrKysrKysrKysrKysr KysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDEwNTUgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBh L2RvYy9zcmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwgYi9kb2Mvc3JjL3NnbWwvbG9n aWNhbC1yZXBsaWNhdGlvbi5zZ21sCmluZGV4IDdiOWJiMDBlNWEuLjI1ZTA0NzBmMTEgMTAwNjQ0 Ci0tLSBhL2RvYy9zcmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwKKysrIGIvZG9jL3Ny Yy9zZ21sL2xvZ2ljYWwtcmVwbGljYXRpb24uc2dtbApAQCAtMTQzNyw2ICsxNDM3LDEwNjEgQEAg dGVzdF9zdWI9IyBTRUxFQ1QgKiBGUk9NIHQxIE9SREVSIEJZIGlkOwogCiAgPC9zZWN0MT4KIAor IDxzZWN0MSBpZD0ibG9naWNhbC1yZXBsaWNhdGlvbi1kZGwiPgorICA8dGl0bGU+RERMIFJlcGxp Y2F0aW9uPC90aXRsZT4KKyAgPHBhcmE+CisgICAgRGF0YSBEZWZpbml0aW9uIENvbW1hbmRzIChE RExzKSBjYW4gYmUgcmVwbGljYXRlZCB1c2luZyBsb2dpY2FsIHJlcGxpY2F0aW9uLgorICAgIFdo aWxlIGVuYWJsZWQgdGhpcyBmZWF0dXJlIGF1dG9tYXRpY2FsbHkgcmVwbGljYXRlcyBzdXBwb3J0 ZWQgRERMIGNvbW1hbmRzCisgICAgdGhhdCBhcmUgc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkIG9uIGEg cHVibGlzaGVyIHRvIGEgc3Vic2NyaWJlci4gVGhpcyBpcworICAgIGVzcGVjaWFsbHkgdXNlZnVs IGlmIHlvdSBoYXZlIGxvdHMgc2NoZW1hIGNoYW5nZXMgb3ZlciB0aW1lIHRoYXQgbmVlZCByZXBs aWNhdGlvbi4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgIEZvciBleGFtcGxlLCB3aGVuIGVu YWJsZWQgYSBDUkVBVEUgVEFCTEUgY29tbWFuZCBleGVjdXRlZCBvbiB0aGUgcHVibGlzaGVyIGdl dHMKKyAgICBXQUwtbG9nZ2VkLCBhbmQgZm9yd2FyZGVkIHRvIHRoZSBzdWJzY3JpYmVyIHRvIHJl cGxheTsgYSBzdWJzZXF1ZW50ICJBTFRFUgorICAgIFNVQlNDUklQVElPTiAuLi4gUkVGUkVTSCBQ VUJMSUNBVElPTiIgaXMgcnVuIG9uIHRoZSBzdWJzY3JpZXIgZGF0YWJhc2Ugc28gYW55CisgICAg Zm9sbG93aW5nIERNTCBjaGFuZ2VzIG9uIHRoZSBuZXcgdGFibGUgY2FuIGJlIHJlcGxpY2F0ZWQg d2l0aG91dCBhIGhpdGNoLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICAgRERMIHJlcGxpY2F0 aW9uIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQsIGl0IGNhbiBiZSBlbmFibGVkIGF0IGRpZmZlcmVu dCBsZXZlbHMKKyAgICB1c2luZyB0aGUgZGRsIFBVQkxJQ0FUSU9OIG9wdGlvbi4gVGhpcyBvcHRp b24gY3VycmVudGx5IGhhcyB0d28gbGV2ZWxzIGFuZCBhcmUKKyAgICBvbmx5IGFsbG93ZWQgdG8g YmUgc2V0IGlmIHRoZSBQVUJMSUNBVElPTiBpcyBGT1IgQUxMIFRBQkxFUy4KKyAgPC9wYXJhPgor CisgIDxpdGVtaXplZGxpc3Q+CisgICAgPGxpc3RpdGVtPgorICAgICAgPHBhcmE+CisgICAgICAg IGFsbDogdGhpcyBvcHRpb24gZW5hYmxlcyByZXBsaWNhdGlvbiBvZiBhbGwgc3VwcG9ydGVkIERE TCBjb21tYW5kcy4KKyAgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorCisgICAgPGxpc3Rp dGVtPgorICAgICAgPHBhcmE+CisgICAgICAgIHRhYmxlOiB0aGlzIG9wdGlvbiBlbmFibGVzIHJl cGxpY2F0aW9uIG9mIFRhYmxlIERETCBjb21tYW5kcywKKyAgICAgICAgd2hpY2ggaW5jbHVkZToK KyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAg ICA8cGFyYT4KKyAgICAgICAgICAgICAgQ1JFQVRFL0FMVEVSL0RST1AgVEFCTEUKKyAgICAgICAg ICAgIDwvcGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorCisgICAgICAgICAgPGxpc3RpdGVt PgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgIENSRUFURSBUQUJMRSBBUworICAg ICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDwvbGlzdGl0ZW0+CisKKyAgICAgICAgPC9pdGVt aXplZGxpc3Q+CisgICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgPC9pdGVtaXplZGxp c3Q+CisKKyAgPHNlY3QyIGlkPSJkZGwtcmVwbGljYXRpb24tb3B0aW9uLWV4YW1wbGVzIj4KKyAg ICA8dGl0bGU+RXhhbXBsZXMgLSBTZXR1cCBEREwgUmVwbGljYXRpb24gb24gdGhlIFB1Ymxpc2hl cjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgIENyZWF0ZSBhIG5ldyBwdWJsaWNhdGlvbiB3 aXRoIGFsbCBkZGwgcmVwbGljYXRpb24gZW5hYmxlZDoKKzxwcm9ncmFtbGlzdGluZz4KK0NSRUFU RSBQVUJMSUNBVElPTiBteXB1YiBGT1IgQUxMIFRBQkxFUyB3aXRoIChkZGwgPSAnYWxsJyk7Cis8 L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgRW5hYmxlIHRhYmxl IGRkbCByZXBsaWNhdGlvbiBmb3IgYW4gZXhpc3RpbmcgUHVibGljYXRpb246Cis8cHJvZ3JhbWxp c3Rpbmc+CitBTFRFUiBQVUJMSUNBVElPTiBteXB1YiBTRVQgKGRkbCA9ICd0YWJsZScpOworPC9w cm9ncmFtbGlzdGluZz48L3BhcmE+CisKKyAgPC9zZWN0Mj4KKworICA8c2VjdDIgaWQ9ImRkbC1y ZXBsaWNhdGlvbi1zdXBwb3J0ZWQtY29tbWFuZHMiPgorICAgIDx0aXRsZT5TdXBwb3J0ZWQgRERM IGNvbW1hbmRzPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgVGhlIERETCBjb21tYW5kcyBz dXBwb3J0ZWQgZm9yIGxvZ2ljYWwgcmVwbGljYXRpb24gYXJlIGxpc3RlZCBpbiB0aGUgZm9sbG93 aW5nCisgICAgICBtYXRyaXguIE5vdGUgdGhhdCBnbG9iYWwgY29tbWFuZHMgY2FuIGJlIGV4ZWN1 dGVkIGF0IGFueSBkYXRhYmFzZSBhbmQgYXJlIGN1cnJlbnRseQorICAgICAgbm90IHN1cHBvcnRl ZCBmb3IgcmVwbGljYXRpb24sIGdsb2JhbCBjb21tYW5kcyBpbmNsdWRlIFJPTEUgc3RhdGVtZW50 cywgRGF0YWJhc2UKKyAgICAgIHN0YXRlbWVudHMsIFRhYmxlU3BhY2Ugc3RhdGVtZW50cyBhbmQg c29tZSBvZiB0aGUgR3JhbnRTdG10L1Jldm9rZVN0bXQgaWYgdGhlIHRhcmdldAorICAgICAgb2Jq ZWN0IGlzIGEgZ2xvYmFsIG9iamVjdC4KKyAgICA8L3BhcmE+CisKKyAgICA8dGFibGUgaWQ9ImRk bC1yZXBsaWNhdGlvbi1ieS1jb21tYW5kLXRhZyI+CisgICAgICA8dGl0bGU+RERMIFJlcGxpY2F0 aW9uIFN1cHBvcnQgYnkgQ29tbWFuZCBUYWc8L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIz Ij4KKyAgICAgICAgPGNvbHNwZWMgY29sbmFtZT0iY29sMSIgY29sd2lkdGg9IjIqIi8+CisgICAg ICAgIDxjb2xzcGVjIGNvbG5hbWU9ImNvbDIiIGNvbHdpZHRoPSIxKiIvPgorICAgICAgICA8Y29s c3BlYyBjb2xuYW1lPSJjb2wzIiBjb2x3aWR0aD0iMSoiLz4KKyAgICAgIDx0aGVhZD4KKyAgICAg ICA8cm93PgorICAgICAgICA8ZW50cnk+Q29tbWFuZCBUYWc8L2VudHJ5PgorICAgICAgICA8ZW50 cnk+Rm9yIFJlcGxpY2F0aW9uPC9lbnRyeT4KKyAgICAgICAgPGVudHJ5Pk5vdGVzPC9lbnRyeT4K KyAgICAgICA8L3Jvdz4KKyAgICAgIDwvdGhlYWQ+CisgICAgICA8dGJvZHk+CisgICAgICAgPHJv dz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBBR0dSRUdBVEU8 L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFs Plg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5 PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVm dCI+PGxpdGVyYWw+QUxURVIgQ0FTVDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkg YWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBDT0xMQVRJT048L2xpdGVy YWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xp dGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAg ICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxp dGVyYWw+QUxURVIgQ09OVkVSU0lPTjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkg YWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBEQVRBQkFTRTwvbGl0ZXJh bD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0 ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAg ICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0 ZXJhbD5BTFRFUiBERUZBVUxUIFBSSVZJTEVHRVM8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAg PGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxy b3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIgRE9NQUlOPC9s aXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5Y PC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4K KyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQi PjxsaXRlcmFsPkFMVEVSIEVWRU5UIFRSSUdHRVI8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAg PGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxy b3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIgRVhURU5TSU9O PC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJh bD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRy eT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249Imxl ZnQiPjxsaXRlcmFsPkFMVEVSIEZPUkVJR04gREFUQSBXUkFQUEVSPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50 cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4K KyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkFMVEVS IEZPUkVJR04gVEFCTEU8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJj ZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxl bnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIgRlVOQ1RJT048L2xpdGVyYWw+PC9lbnRy eT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9l bnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93 PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxU RVIgSU5ERVg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIi PjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0 Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBh bGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIgTEFOR1VBR0U8L2xpdGVyYWw+PC9lbnRyeT4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAg ICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIgTEFS R0UgT0JKRUNUPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVy Ij48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVm dCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjxsaXRlcmFsPkFMVEVSIE1BVEVSSUFMSVpFRCBWSUVXPC9saXRlcmFsPjwv ZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFs PjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8 L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFs PkFMVEVSIE9QRVJBVE9SPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i Y2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGln bj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkFMVEVSIE9QRVJBVE9SIENMQVNTPC9saXRlcmFs PjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRl cmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAg ICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRl cmFsPkFMVEVSIE9QRVJBVE9SIEZBTUlMWTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBQT0xJQ1k8L2xpdGVy YWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xp dGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAg ICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxp dGVyYWw+QUxURVIgUFJPQ0VEVVJFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBh bGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRy eSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkFMVEVSIFBVQkxJQ0FUSU9OPC9saXRl cmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9s aXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAg ICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxs aXRlcmFsPkFMVEVSIFJPTEU8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAg IDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIgUk9VVElORTwvbGl0ZXJhbD48L2Vu dHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48 L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9y b3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5B TFRFUiBSVUxFUjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRl ciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249Imxl ZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBTQ0hFTUE8L2xpdGVyYWw+PC9lbnRyeT4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAg ICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIgU0VR VUVOQ0U8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxs aXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48 L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGln bj0ibGVmdCI+PGxpdGVyYWw+QUxURVIgU0VSVkVSPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAg IDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8 cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkFMVEVSIFNUQVRJU1RJ Q1M8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRl cmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2Vu dHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i bGVmdCI+PGxpdGVyYWw+QUxURVIgU1VCU0NSSVBUSU9OPC9saXRlcmFsPjwvZW50cnk+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAg ICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkFMVEVSIFNZU1RF TTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVy YWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50 cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJs ZWZ0Ij48bGl0ZXJhbD5BTFRFUiBUQUJMRTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBUQUJMRVNQQUNFPC9s aXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4t PC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4K KyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQi PjxsaXRlcmFsPkFMVEVSIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT048L2xpdGVyYWw+PC9lbnRy eT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9l bnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93 PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxU RVIgVEVYVCBTRUFSQ0ggRElDVElPTkFSWTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBURVhUIFNFQVJDSCBQ QVJTRVI8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxs aXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48 L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGln bj0ibGVmdCI+PGxpdGVyYWw+QUxURVIgVEVYVCBTRUFSQ0ggVEVNUExBVEU8L2xpdGVyYWw+PC9l bnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+ PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwv cm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+ QUxURVIgVFJBTlNGT1JNPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i Y2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGln bj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkFMVEVSIFRSSUdHRVI8L2xpdGVyYWw+PC9lbnRy eT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9l bnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93 PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxU RVIgVFlQRTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+ PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQi PjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBVU0VSIE1BUFBJTkc8L2xpdGVyYWw+PC9lbnRyeT4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRy eT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93Pgor ICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIg VklFVzwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxp dGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwv ZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJsZWZ0Ij48bGl0ZXJhbD5BTkFMWVpFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRy eSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxl bnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkJFR0lOPC9saXRlcmFsPjwvZW50 cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwv ZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jv dz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNB TEw8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRl cmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2Vu dHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i bGVmdCI+PGxpdGVyYWw+Q0hFQ0tQT0lOVDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DTE9TRTwvbGl0ZXJhbD48L2Vu dHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48 L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9y b3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5D TE9TRSBDVVJTT1I8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50 ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJs ZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRy eSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q0xPU0UgQ1VSU09SIEFMTDwvbGl0ZXJhbD48L2VudHJ5 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2Vu dHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+ CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DTFVT VEVSPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0 ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9l bnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImxlZnQiPjxsaXRlcmFsPkNPTU1FTlQ8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q09NTUlUPC9saXRlcmFsPjwvZW50 cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwv ZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jv dz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNP TU1JVCBQUkVQQVJFRDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNl bnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DT1BZPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAg IDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8 cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNPUFkgRlJPTTwvbGl0 ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwv bGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+Cisg ICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48 bGl0ZXJhbD5DUkVBVEUgQUNDRVNTIE1FVEhPRDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJv dz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgQUdHUkVHQVRF PC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJh bD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRy eT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249Imxl ZnQiPjxsaXRlcmFsPkNSRUFURSBDQVNUPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRy eSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxl bnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBDT0xMQVRJT048L2xp dGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8 L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5Pgor ICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+ PGxpdGVyYWw+Q1JFQVRFIENPTlNUUkFJTlQ8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAg PGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRFIENPTlZFUlNJT048 L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFs Plg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5 PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVm dCI+PGxpdGVyYWw+Q1JFQVRFIERBVEFCQVNFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxl bnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAg IDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBET01BSU48L2xp dGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8 L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5Pgor ICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+ PGxpdGVyYWw+Q1JFQVRFIEVWRU5UIFRSSUdHRVI8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAg PGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxy b3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRFIEVYVEVOU0lP TjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVy YWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50 cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJs ZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgRk9SRUlHTiBEQVRBIFdSQVBQRVI8L2xpdGVyYWw+PC9lbnRy eT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9l bnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93 PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q1JF QVRFIEZPUkVJR04gVEFCTEU8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAg IDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRFIEZVTkNUSU9OPC9saXRlcmFsPjwv ZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFs PjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8 L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFs PkNSRUFURSBJTkRFWDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNl bnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgTEFOR1VBR0U8L2xpdGVyYWw+PC9lbnRy eT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9l bnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93 PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q1JF QVRFIE1BVEVSSUFMSVpFRCBWSUVXPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBh bGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRy eSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBPUEVSQVRPUjwvbGl0ZXJh bD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0 ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAg ICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0 ZXJhbD5DUkVBVEUgT1BFUkFUT1IgQ0xBU1M8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAg PGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRFIE9QRVJBVE9SIEZB TUlMWTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxp dGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwv ZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgUE9MSUNZPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAg IDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8 cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBQUk9DRURV UkU8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRl cmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2Vu dHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i bGVmdCI+PGxpdGVyYWw+Q1JFQVRFIFBVQkxJQ0FUSU9OPC9saXRlcmFsPjwvZW50cnk+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAg ICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBST0xF PC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJh bD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRy eT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249Imxl ZnQiPjxsaXRlcmFsPkNSRUFURSBSVUxFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRy eSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxl bnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBTQ0hFTUE8L2xpdGVy YWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xp dGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAg ICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxp dGVyYWw+Q1JFQVRFIFNFUVVFTkNFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBh bGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRy eSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBTRVJWRVI8L2xpdGVyYWw+ PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVy YWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAg IDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVy YWw+Q1JFQVRFIFNUQVRJU1RJQ1M8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRFIFNVQlNDUklQVElPTjwvbGl0 ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwv bGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+Cisg ICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48 bGl0ZXJhbD5DUkVBVEUgVEFCTEU8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRFIFRBQkxFIEFTPC9saXRlcmFs PjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRl cmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAg ICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRl cmFsPkNSRUFURSBUQUJMRVNQQUNFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBh bGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRy eSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBURVhUIFNFQVJDSCBDT05G SUdVUkFUSU9OPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVy Ij48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVm dCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBURVhUIFNFQVJDSCBESUNUSU9OQVJZPC9saXRl cmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9s aXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAg ICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxs aXRlcmFsPkNSRUFURSBURVhUIFNFQVJDSCBQQVJTRVI8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAg IDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRFIFRFWFQg U0VBUkNIIFRFTVBMQVRFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i Y2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGln bj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBUUkFOU0ZPUk08L2xpdGVyYWw+PC9l bnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+ PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwv cm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+ Q1JFQVRFIFRSSUdHRVI8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJj ZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxl bnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRFIFRZUEU8L2xpdGVyYWw+PC9lbnRyeT4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRy eT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93Pgor ICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRF IFVTRVIgTUFQUElORzwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNl bnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgVklFVzwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+Cisg ICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5ERUFMTE9D QVRFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0 ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9l bnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImxlZnQiPjxsaXRlcmFsPkRFQUxMT0NBVEUgQUxMPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAg IDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8 cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRFQ0xBUkUgQ1VSU09S PC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJh bD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRy eT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249Imxl ZnQiPjxsaXRlcmFsPkRFTEVURTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxp Z249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5ESVNDQVJEPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50 cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4K KyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRJU0NB UkQgQUxMPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48 bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+ PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxp Z249ImxlZnQiPjxsaXRlcmFsPkRJU0NBUkQgUExBTlM8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAg IDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RElTQ0FSRCBTRVFV RU5DRVM8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxs aXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48 L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGln bj0ibGVmdCI+PGxpdGVyYWw+RElTQ0FSRCBURU1QPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAg IDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8 cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRPPC9saXRlcmFsPjwv ZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFs PjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8 L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFs PkRST1AgQUNDRVNTIE1FVEhPRDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxp Z249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIEFHR1JFR0FURTwvbGl0ZXJhbD48 L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJh bD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAg PC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJh bD5EUk9QIENBU1Q8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50 ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJs ZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRy eSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBDT0xMQVRJT048L2xpdGVyYWw+PC9lbnRyeT4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRy eT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93Pgor ICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBD T05TVFJBSU5UPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVy Ij48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVm dCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1AgQ09OVkVSU0lPTjwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+Cisg ICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIERB VEFCQVNFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48 bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+ PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxp Z249ImxlZnQiPjxsaXRlcmFsPkRST1AgRE9NQUlOPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAg IDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8 cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1AgRVZFTlQgVFJJ R0dFUjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxp dGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwv ZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIEVYVEVOU0lPTjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAg PHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIEZPUkVJR04g REFUQSBXUkFQUEVSPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2Vu dGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i bGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1AgRk9SRUlHTiBUQUJMRTwvbGl0ZXJhbD48L2Vu dHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48 L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9y b3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5E Uk9QIEZVTkNUSU9OPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2Vu dGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i bGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1AgSU5ERVg8L2xpdGVyYWw+PC9lbnRyeT4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAg ICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBMQU5H VUFHRTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxp dGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwv ZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIE1BVEVSSUFMSVpFRCBWSUVXPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50 cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4K KyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1Ag T1BFUkFUT1I8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIi PjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0 Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBh bGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBPUEVSQVRPUiBDTEFTUzwvbGl0ZXJhbD48L2VudHJ5 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2Vu dHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+ CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9Q IE9QRVJBVE9SIEZBTUlMWTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxp Z249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAg PGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIE9XTkVEPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50 cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4K KyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1Ag UE9MSUNZPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48 bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+ PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxp Z249ImxlZnQiPjxsaXRlcmFsPkRST1AgUFJPQ0VEVVJFPC9saXRlcmFsPjwvZW50cnk+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAg ICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1AgUFVCTElD QVRJT048L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxs aXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48 L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGln bj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBST0xFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxl bnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAg IDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1AgUk9VVElORTwvbGl0 ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwv bGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+Cisg ICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48 bGl0ZXJhbD5EUk9QIFJVTEU8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAg IDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBTQ0hFTUE8L2xpdGVyYWw+PC9lbnRy eT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9l bnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93 PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJP UCBTRVFVRU5DRTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRl ciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249Imxl ZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIFNFUlZFUjwvbGl0ZXJhbD48L2VudHJ5PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAg ICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIFNUQVRJ U1RJQ1M8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxs aXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48 L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGln bj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBTVUJTQ1JJUFRJT048L2xpdGVyYWw+PC9lbnRyeT4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAg ICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBUQUJM RTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVy YWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50 cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJs ZWZ0Ij48bGl0ZXJhbD5EUk9QIFRBQkxFU1BBQ0U8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAg PGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxy b3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBURVhUIFNFQVJD SCBDT05GSUdVUkFUSU9OPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i Y2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGln bj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1AgVEVYVCBTRUFSQ0ggRElDVElPTkFSWTwv bGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+ WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+ CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0 Ij48bGl0ZXJhbD5EUk9QIFRFWFQgU0VBUkNIIFBBUlNFUjwvbGl0ZXJhbD48L2VudHJ5PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAg ICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIFRFWFQg U0VBUkNIIFRFTVBMQVRFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i Y2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGln bj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1AgVFJBTlNGT1JNPC9saXRlcmFsPjwvZW50 cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwv ZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jv dz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRS T1AgVFJJR0dFUjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRl ciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249Imxl ZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIFRZUEU8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAg IDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBVU0VSIE1B UFBJTkc8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxs aXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48 L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGln bj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBWSUVXPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxl bnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAg IDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkVYRUNVVEU8L2xpdGVyYWw+ PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVy YWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAg IDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVy YWw+RVhQTEFJTjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRl ciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249Imxl ZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5GRVRDSDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJv dz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5HUkFOVDwvbGl0ZXJhbD48 L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJh bD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAg PC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJh bD5HUkFOVCBST0xFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2Vu dGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i bGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPklNUE9SVCBGT1JFSUdOIFNDSEVNQTwvbGl0ZXJhbD48 L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJh bD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAg PC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJh bD5JTlNFUlQ8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIi PjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0 Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBh bGlnbj0ibGVmdCI+PGxpdGVyYWw+TElTVEVOPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxl bnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAg IDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkxPQUQ8L2xpdGVyYWw+PC9l bnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+ PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwv cm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+ TE9DSyBUQUJMRTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRl ciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249Imxl ZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5NRVJHRTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJv dz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5NT1ZFPC9saXRlcmFsPjwv ZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFs PjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8 L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFs Pk5PVElGWTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+ PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQi PjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJsZWZ0Ij48bGl0ZXJhbD5QUkVQQVJFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxl bnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAg IDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPlBSRVBBUkUgVFJBTlNBQ1RJ T048L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRl cmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2Vu dHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i bGVmdCI+PGxpdGVyYWw+UkVBU1NJR04gT1dORUQ8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAg PGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxy b3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+UkVGUkVTSCBNQVRFUklB TElaRUQgVklFVzwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRl ciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249Imxl ZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5SRUlOREVYPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAg IDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8 cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPlJFTEVBU0U8L2xpdGVy YWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xp dGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAg ICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxp dGVyYWw+UkVTRVQ8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50 ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJs ZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRy eSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+UkVWT0tFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAg IDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8 cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPlJFVk9LRSBST0xFPC9s aXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4t PC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4K KyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQi PjxsaXRlcmFsPlJPTExCQUNLPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGln bj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBh bGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPlJPTExCQUNLIFBSRVBBUkVEPC9saXRlcmFs PjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRl cmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAg ICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRl cmFsPlNBVkVQT0lOVDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNl bnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5TRUNVUklUWSBMQUJFTDwvbGl0ZXJhbD48L2VudHJ5 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2Vu dHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+ CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5TRVQ8 L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFs Pi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5 PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVm dCI+PGxpdGVyYWw+U0VUIENPTlNUUkFJTlRTPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxl bnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAg IDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPlNIT1c8L2xpdGVyYWw+PC9l bnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+ PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwv cm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+ U1RBUlQgVFJBTlNBQ1RJT048L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAg IDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+VU5MSVNURU48L2xpdGVyYWw+PC9lbnRyeT4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRy eT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93Pgor ICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+VVBEQVRF PC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJh bD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRy eT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249Imxl ZnQiPjxsaXRlcmFsPlZBQ1VVTTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxp Z249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgPC90YWJsZT4KKyAgPC9z ZWN0Mj4KKworICA8c2VjdDIgaWQ9ImRkbC1yZXBsaWNhdGlvbi1kZGwtZGVwYXJzZXIiPgorICAg IDx0aXRsZT5EREwgRGVwYXJzZXI8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgVGhlIERETCBk ZXBhcnNlciB1dGlsaXR5IGlzIGludm9rZWQgZHVyaW5nIHRoZSByZXBsaWNhdGlvbiBvZiBERExz LiBUaGUgRERMCisgICAgICBkZXBhcnNlciBpcyBjYXBhYmxlIG9mIGNvbnZlcnRpbmcgYSBEREwg Y29tbWFuZCBpbnRvIGZvcm1hdHRlZCBKU09OIGJsb2IsIHdpdGgKKyAgICAgIHRoZSBuZWNlc3Nh cnkgaW5mb3JtYXRpb24gdG8gcmVjb25zdHJ1Y3QgdGhlIERETCBjb21tYW5kcyBhdCB0aGUgZGVz dGluYXRpb24uIFRoZQorICAgICAgYmVuZWZpdCBvZiB1c2luZyB0aGUgZGVwYXJzZXIgb3V0cHV0 IGNvbXBhcmVkIHRvIHRoZSBvcmlnaW5hbCBjb21tYW5kIHN0cmluZworICAgICAgaW5jbHVkZXM6 CisgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBh cmE+CisgICAgICAgICAgICBFdmVyeSBkYXRhYmFzZSBvYmplY3QgaW4gdGhlIGRlcGFyc2VkIG91 dHB1dCBpcyBzY2hlbWEtcXVhbGlmaWVkLCBzbyB0aGF0CisgICAgICAgICAgICB0aGVyZSBhcmUg bm8gYW1iaWd1aXRpZXMgZXZlbiBpbiB0aGUgZmFjZSBvZiBzZWFyY2hfcGF0aCBjaGFuZ2VzLgor ICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKworICAgICAgICA8bGlzdGl0 ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgc3RydWN0dXJlZCBKU09OIGFu ZCB0aGUgZm9ybWF0dGVkIG91dHB1dCBtYWtlcyBpdCBwb3NzaWJsZSBmb3IKKyAgICAgICAgICAg IG1hY2hpbmUgZWRpdGluZy4gVGhpcyBjYW4gYmUgdXNlZnVsIGlmIHRoZSBzdWJzY3JpYmVyIGlz IG9uIGEgZGlmZmVyZW50CisgICAgICAgICAgICBQRyB2ZXJzaW9uIGFuZCBoYXMgY2VydGFpbiBE REwgc3ludGF4IGRpZmZlcmVuY2VzIHdoaWNoIG5lZWQgdG8gYmUKKyAgICAgICAgICAgIHJlc29s dmVkIGJlZm9yZSBhcHBseS4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+ CisKKyAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAg ICAgVGhlIERETCBkZXBhcnNlciBleHBvc2VzIHR3byBTUUwgZnVuY3Rpb25zOgorICAgICAgPGl0 ZW1pemVkbGlzdD4KKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAg ICAgICAgZGRsX2RlcGFyc2VfdG9fanNvbjogZ2l2ZW4gYSBDb2xsZWN0ZWRDb21tYW5kIGZyb20g ZXZlbnQgdHJpZ2dlciwKKyAgICAgICAgICAgIHJldHVybnMgYSBKU09OIHJlcHJlc2VudGF0aW9u IG9mIGl0LiBUaGUgY29tbWFuZCBpcyBleHBhbmRlZCBmdWxseQorICAgICAgICAgICAgc28gdGhh dCB0aGVyZSBhcmUgbm8gYW1iaWd1aXRpZXMgZXZlbiBpbiB0aGUgZmFjZSBvZiBzZWFyY2hfcGF0 aAorICAgICAgICAgICAgY2hhbmdlcy4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlz dGl0ZW0+CisgICAgICA8L2l0ZW1pemVkbGlzdD4KKworICAgICAgPGl0ZW1pemVkbGlzdD4KKyAg ICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgZGRsX2RlcGFy c2VfZXhwYW5kX2NvbW1hbmQ6IEV4cGFuZCBKU09OIGZvcm1hdCBEREwgZ2VuZXJhdGVkIGJ5Cisg ICAgICAgICAgICBkZGxfZGVwYXJzZV90b19qc29uIHRvIGEgcGxhaW4gRERMIGNvbW1hbmQuCisg ICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgPC9pdGVtaXplZGxp c3Q+CisgICAgPC9wYXJhPgorICA8L3NlY3QyPgorCisgPC9zZWN0MT4KKwogIDxzZWN0MSBpZD0i bG9naWNhbC1yZXBsaWNhdGlvbi1jb25mbGljdHMiPgogICA8dGl0bGU+Q29uZmxpY3RzPC90aXRs ZT4KIAotLSAKMi4zOC4xCgo= --00000000000047050c05f1ae2f85 Content-Type: application/octet-stream; name="v60-0006-Support-DDL-replication.patch" Content-Disposition: attachment; filename="v60-0006-Support-DDL-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lcm3fwef5 RnJvbSA2ODk2YzFjMDQ4ZDEzNWY2MmE0MzBmMDgzN2IxMzFlMjEwMzE5ZDU0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiWmhlbmcgKFphbmUpIExpIiA8emhlbGxpQGFtYXpvbi5jb20+ CkRhdGU6IFdlZCwgNCBKYW4gMjAyMyAyMTozMDoxMyArMDAwMApTdWJqZWN0OiBbUEFUQ0ggNi83 XSBTdXBwb3J0IERETCByZXBsaWNhdGlvbi4KClRvIHN1cHBvcnQgRERMIHJlcGxpY2F0aW9uLCB3 ZSB1c2UgZXZlbnQgdHJpZ2dlciBhbmQgRERMIGRlcGFyc2luZwpmYWNpbGl0aWVzLiBEdXJpbmcg Q1JFQVRFIFBVQkxJQ0FUSU9OIHdlIHJlZ2lzdGVyIGEgY29tbWFuZCBlbmQgdHJpZ2dlciB0aGF0 CmRlcGFyc2VzIHRoZSBEREwgKGlmIHRoZSBEREwgaXMgYW5ub3RhdGVkIGFzIGRkbHJlcGxvayBm b3IgRERMIHJlcGxpY2F0aW9uIGluCmNtZHRhZ2xpc3QuaCkgYXMgYSBKU09OIGJsb2IsIGFuZCBX QUwgbG9ncyBpdC4gVGhlIGV2ZW50IHRyaWdnZXIgaXMgYXV0b21hdGljYWxseQpyZW1vdmVkIGF0 IHRoZSB0aW1lIG9mIERST1AgUFVCTElDQVRJT04uIFRoZSBXQUxTZW5kZXIgZGVjb2RlcyB0aGUg V0FMIGFuZCBzZW5kcwppdCBkb3duc3RyZWFtIHNpbWlsYXIgdG8gb3RoZXIgRE1MIGNvbW1hbmRz LiBUaGUgc3Vic2NyaWJlciB0aGVuIGNvbnZlcnRzIEpTT04KYmFjayB0byB0aGUgRERMIGNvbW1h bmQgc3RyaW5nIGFuZCBleGVjdXRlcyBpdC4gSW4gdGhlIHN1YnNjcmliZXIsIHdlIGFsc28gYWRk CnRoZSBuZXdseSBhZGRlZCByZWwgdG8gcGdfc3Vic2NyaXB0aW9uX3JlbCBzbyB0aGF0IHRoZSBE TUwgY2hhbmdlcyBvbiB0aGUgbmV3CnRhYmxlIGNhbiBiZSByZXBsaWNhdGVkIHdpdGhvdXQgaGF2 aW5nIHRvIG1hbnVhbGx5IHJ1bgoiQUxURVIgU1VCU0NSSVBUSU9OIC4uLiBSRUZSRVNIIFBVQkxJ Q0FUSU9OIi4KCi0gRm9yIG5vbi1yZXdyaXRlIEFMVEVSIG9iamVjdCBjb21tYW5kIGFuZAotICAg ICBDUkVBVEUgb2JqZWN0IGNvbW1hbmQ6CndlIGRlcGFyc2UgdGhlIGNvbW1hbmQgYXQgZGRsX2Nv bW1hbmRfZW5kIGV2ZW50IHRyaWdnZXIgYW5kIFdBTCBsb2cgdGhlCmRlcGFyc2VkIGpzb24gc3Ry aW5nLiBUaGUgV0FMU2VuZGVyIGRlY29kZXMgdGhlIFdBTCBhbmQgc2VuZHMgaXQgdG8Kc3Vic2Ny aWJlciBpZiB0aGUgY3JlYXRlZC9hbHRlcmVkIHRhYmxlIGlzIHB1Ymxpc2hlZC4gSXQgc3VwcG9y dHMgbW9zdCBvZgpBTFRFUiBUQUJMRSBjb21tYW5kIGV4Y2VwdCBzb21lIGNvbW1hbmRzKERETCBy ZWxhdGVkIHRvIFBBUlRJVElPTkVEIFRBQkxFCi4uLikgdGhhdCBpbnRyb2R1Y2VkIHJlY2VudGx5 IHdoaWNoIGhhdmVuJ3QgYmVlbiBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQKZGRsX2RlcGFyc2Vy LCB3ZSB3aWxsIHN1cHBvcnQgdGhhdCBsYXRlci4KCi0gRm9yIERST1Agb2JqZWN0OgpUaGUgJ2Nv bW1hbmQgc3RhcnQnIGV2ZW50IGhhbmRsZXIgbG9ncyBhIGRkbCBtZXNzYWdlIHdpdGggdGhlIHJl bGlkcyBvZgp0aGUgdGFibGVzIHRoYXQgYXJlIGRyb3BwZWQgd2hpY2ggdGhlIG91dHB1dCBwbHVn aW4gKHBnb3V0cHV0KSBzdG9yZXMgaW4KaXRzIGludGVybmFsIGRhdGEgc3RydWN0dXJlIGFmdGVy IHZlcmlmeWluZyB0aGF0IGl0IGlzIGZvciBhIHRhYmxlIHRoYXQgaXMKcGFydCBvZiB0aGUgcHVi bGljYXRpb24uIExhdGVyIHRoZSAnY29tbWFuZCBlbmQnIGV2ZW50IGhhbmRsZXIgc2VuZHMgdGhl CmFjdHVhbCBkcm9wIG1lc3NhZ2UuIFBnb3V0cHV0IG9uIHJlY2VpdmluZyB0aGUgY29tbWFuZCBl bmQsIG9ubHkgc2VuZHMgb3V0CnRoZSBkcm9wIGNvbW1hbmQgb25seSBpZiBpdCBpcyBmb3Igb25l IG9mIHRoZSByZWxpZHMgbWFya2VkIGZvciBkZWxldGluZy4KVGhlIHJlYXNvbiB3ZSBoYXZlIHRv IGRvIHRoaXMgaXMgYmVjYXVzZSwgb25jZSB0aGUgbG9naWNhbCBkZWNvZGVyCnJlY2VpdmVzIHRo ZSAnY29tbWFuZCBlbmQnIG1lc3NhZ2UsICB0aGUgcmVsaWQgb2YgdGhlIHRhYmxlIGlzIG5vIGxv bmdlcgp2YWxpZCBhcyBpdCBoYXMgYmVlbiBkZWxldGVkIGFzIHBhcnQgb2YgaW52YWxpZGF0aW9u cyByZWNlaXZlZCBmb3IgdGhlCmRyb3AgdGFibGUgY29tbWFuZC4gSXQgaXMgbm8gbG9uZ2VyIHBv c3NpYmxlIHRvIHZlcmlmeSBpZiB0aGUgdGFibGUgaXMKcGFydCBvZiB0aGUgcHVibGljYXRpb24g bGlzdCBvciBub3QuIFRvIG1ha2UgdGhpcyBwb3NzaWJsZSwgSSBoYXZlIGFkZGVkCnR3byBtb3Jl IGVsZW1lbnRzIHRvIHRoZSBkZGwgeGxvZyBhbmQgZGRsIG1lc3NhZ2UsIChyZWxpZCBhbmQgY21k dHlwZSkuCgpXZSBjb3VsZCBoYXZlIGFsc28gaGFuZGxlZCBhbGwgdGhpcyBvbiB0aGUgc3Vic2Ny aWJlciBzaWRlIGFzIHdlbGwsIGJ1dAp0aGF0IHdvdWxkIG1lYW4gc2VuZGluZyBzcHVyaW91cyBk ZGwgbWVzc2FnZXMgZm9yIHRhYmxlcyB0aGF0IGFyZSBub3QgcGFydApvZiB0aGUgcHVibGljYXRp b24uCgotIEZvciB0YWJsZV9yZXdyaXRlIEFMVEVSIFRBQkxFIGNvbW1hbmQ6CihBTFRFUiBDT0xV TU4gVFlQRSwgQUREIENPTFVNTiBERUZBVUxULCBTRVQgTE9HR0VELCBTRVQgQUNDRVNTIE1FVEhP RCkKCndlIGRlcGFyc2UgdGhlIGNvbW1hbmQgYW5kIFdBTCBsb2cgdGhlIGRlcGFyc2VkIGpzb24g c3RyaW5nIGF0CnRhYmxlX3Jld3JpdGUgZXZlbnQgdHJpZ2dlci4gVGhlIFdBTFNlbmRlciBkZWNv ZGVzIHRoZSBXQUwgYW5kIHNlbmRzIGl0IHRvCnN1YnNjcmliZXIgaWYgdGhlIGFsdGVyZWQgdGFi bGUgaXMgcHVibGlzaGVkLiBUaGVuLCB0aGUgV0FMU2VuZGVyIHdpbGwKY29udmVydCB0aGUgdXBj b21pbmcgcmV3cml0ZSBJTlNFUlRzIHRvIFVQREFURXMgYW5kIHNlbmQgdGhlbSB0bwpzdWJzY3Jp YmVyIHNvIHRoYXQgdGhlIGRhdGEgYmV0d2VlbiBwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIgY2Fu IGFsd2F5cyBiZQpjb25zaXN0ZW50LiBOb3RlIHRoYXQgdGhlIHRhYmxlcyB0aGF0IHB1Ymxpc2gg cmV3cml0ZSBkZGwgbXVzdCBoYXZlIGEKcmVwbGljYSBpZGVudGl0eSBjb25maWd1cmVkIGluIG9y ZGVyIHRvIGJlIGFibGUgdG8gcmVwbGljYXRlIHRoZSB1cGNvbWluZwpyZXdyaXRlIFVQREFURXMu CgpXZSBkbyB0aGlzIHdheSBiZWNhdXNlIG9mIHR3byByZWFzb246CigxKSBUaGUgZGF0YSBiZWZv cmUgdGhlIHJld3JpdGUgZGRsIGNvdWxkIGFscmVhZHkgYmUgZGlmZmVyZW50IGFtb25nCnB1Ymxp c2hlciBhbmQgc3Vic2NyaWJlci4gVG8gbWFrZSBzdXJlIHRoZSBleHRyYSBkYXRhIGluIHN1YnNj cmliZXIgd2hpY2gKZG9lc24ndCBleGlzdCBpbiBwdWJsaXNoZXIgYWxzbyBnZXQgcmV3cml0dGVu LCB3ZSBuZWVkIHRvIGxldCB0aGUKc3Vic2NyaWJlciBleGVjdXRlIHRoZSBvcmlnaW5hbCByZXdy aXRlIGRkbCB0byByZXdyaXRlIGFsbCB0aGUgZGF0YSBhdApmaXJzdC4KCigyKSB0aGUgZGF0YSBh ZnRlciBleGVjdXRpbmcgcmV3cml0ZSBkZGwgY291bGQgYmUgZGlmZmVyZW50IGFtb25nCnB1Ymxp c2hlciBhbmQgc3Vic2NyaWJlcihkdWUgdG8gZGlmZmVyZW50IGZ1bmN0aW9ucy9vcGVyYXRvcnMg dXNlZCBkdXJpbmcKcmV3cml0ZSksIHNvIHdlIG5lZWQgdG8gcmVwbGljYXRlIHRoZSByZXdyaXRl IFVQREFURXMgdG8ga2VlcCB0aGUgZGF0YQpjb25zaXN0ZW50LgoKVE8gSU1QUk9WRToKVGhpcyBh cHByb2FjaCBjb3VsZCBiZSBpbXByb3ZlZCBieSBsZXR0aW5nIHRoZSBzdWJzY3JpYmVyIHRyeSB0 byB1cGRhdGUKdGhlIGV4dHJhIGRhdGEgaXRzZWxmIGluc3RlYWQgb2YgZG9pbmcgZnVsbHkgcmV3 cml0ZSBkZGwgYW5kIHVzZSB0aGUKdXBjb21pbmcgcmV3cml0ZSBVUERBVEVzIHRvIHJld3JpdGUg dGhlIHJlc3QgZGF0YS4gVG8gYWNoaWV2ZSB0aGlzLCB3ZQpjb3VsZCBtb2RpZnkgdGhlIGRlcGFy c2VkIGpzb24gc3RyaW5nIHRvIHRlbXBvcmFyaWx5IHJlbW92ZSB0aGUgcmV3cml0ZQpwYXJ0IGFu ZCBhZGQgc29tZSBsb2dpYyBpbiBzdWJzY3JpYmVyIHRvIHVwZGF0ZSB0aGUgZXh0cmEgZGF0YS4K QmVzaWRlcywgd2UgbWF5IG5vdCBuZWVkIHRvIHNlbmQgcmV3cml0ZSBjaGFuZ2VzIGZvciBhbGwg dHlwZSBvZiByZXdyaXRlCmRkbCwgZm9yIGV4YW1wbGUsIGl0IHNlZW1zIGZpbmUgdG8gc2tpcCBz ZW5kaW5nIHJld3JpdGUgY2hhbmdlcyBmb3IgQUxURVIKVEFCTEUgU0VUIExPR0dFRCBhcyB0aGUg ZGF0YSBpbiB0aGUgdGFibGUgZG9lc24ndCBhY3R1YWxseSBiZSBjaGFuZ2VkLiBXZQpjb3VsZCB1 c2UgdGhlIGRlcGFyc2VyIGFuZCBldmVudCB0cmlnZ2VyIHRvIGZpbHRlciB0aGVzZSBkZGxzIGFu ZCBza2lwCnNlbmRpbmcgcmV3cml0ZSBjaGFuZ2VzIGZvciB0aGVtLgotLS0KIHNyYy9iYWNrZW5k L2NhdGFsb2cvcGdfcHVibGljYXRpb24uYyAgICAgICAgICB8ICAgMiArCiBzcmMvYmFja2VuZC9j b21tYW5kcy9jcmVhdGVhcy5jICAgICAgICAgICAgICAgfCAgMTAgKwogc3JjL2JhY2tlbmQvY29t bWFuZHMvZXZlbnRfdHJpZ2dlci5jICAgICAgICAgIHwgMjgzICsrKysrKysrKystCiBzcmMvYmFj a2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyAgICAgICAgfCAxNjcgKysrKysrLQogc3Jj L2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgICAgICAgICAgICAgIHwgIDEwICstCiBzcmMv YmFja2VuZC9wYXJzZXIvcGFyc2VfdXRpbGNtZC5jICAgICAgICAgICAgfCAgIDEgKwogc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZSAgICAgIHwgICAxICsKIHNyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsdHJpZ2dlci5jICB8IDM1NyArKysrKysrKysrKysr Kwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sb2dpY2FsLmMgICAgIHwgIDQ5ICsr CiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL21lc29uLmJ1aWxkICAgfCAgIDEgKwog c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jICAgICAgIHwgIDQzICsrCiAu Li4vcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMgICAgICAgfCAgMjAgKy0KIHNy Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMgICAgICB8IDI0MCArKysrKysr KysKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMgICB8IDE5MCAr KysrKystCiBzcmMvYmFja2VuZC90Y29wL2NtZHRhZy5jICAgICAgICAgICAgICAgICAgICAgfCAg MjYgKy0KIHNyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jICAgICAgICAgICAgICAgICAgICB8ICAg MyArCiBzcmMvYmFja2VuZC91dGlscy9jYWNoZS9ldnRjYWNoZS5jICAgICAgICAgICAgfCAgIDIg Kwogc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYyAgICAgICAgICAgIHwgICAyICsK IHNyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMgICAgICAgICAgICAgICAgICAgICB8ICA0MCArLQog c3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaCAgICAgICAgICAgICAgICAgICAgIHwgICAyICsKIHNy Yy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsICAgICAgICAgICAgICB8ICAxMCArLQogc3Jj L2Jpbi9wc3FsL2Rlc2NyaWJlLmMgICAgICAgICAgICAgICAgICAgICAgIHwgIDQ0ICstCiBzcmMv aW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0ICAgICAgICAgICAgICAgfCAgMTIgKwogc3JjL2lu Y2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oICAgICAgICAgIHwgICA4ICsKIHNyYy9pbmNs dWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaCAgICAgICAgICB8ICAxMSArLQogc3JjL2luY2x1 ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmggICAgICAgIHwgICA0ICsKIHNyYy9pbmNsdWRl L3JlcGxpY2F0aW9uL291dHB1dF9wbHVnaW4uaCAgICAgICB8ICAxNSArLQogc3JjL2luY2x1ZGUv cmVwbGljYXRpb24vcGdvdXRwdXQuaCAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3Jl cGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaCAgICAgICB8ICAxMiArCiBzcmMvaW5jbHVkZS90Y29w L2NtZHRhZy5oICAgICAgICAgICAgICAgICAgICAgfCAgIDQgKy0KIHNyYy9pbmNsdWRlL3Rjb3Av Y21kdGFnbGlzdC5oICAgICAgICAgICAgICAgICB8IDM4NiArKysrKysrLS0tLS0tLS0KIHNyYy9p bmNsdWRlL3V0aWxzL2V2dGNhY2hlLmggICAgICAgICAgICAgICAgICB8ICAgMyArLQogLi4uL2V4 cGVjdGVkL2NyZWF0ZV90YWJsZS5vdXQgICAgICAgICAgICAgICAgIHwgICA3ICsKIC4uLi9zcWwv Y3JlYXRlX3RhYmxlLnNxbCAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL3BzcWwub3V0ICAgICAgICAgICAgfCAgIDYgKy0KIHNyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0ICAgICB8IDQyMCArKysrKysrKy0tLS0tLS0t CiAuLi4vc3Vic2NyaXB0aW9uL3QvMDMyX2RkbF9yZXBsaWNhdGlvbi5wbCAgICAgfCA0NjUgKysr KysrKysrKysrKysrKysrCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAg ICAgICAgfCAgIDUgKwogMzggZmlsZXMgY2hhbmdlZCwgMjQxMiBpbnNlcnRpb25zKCspLCA0NTEg ZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC9kZGx0cmlnZ2VyLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9zdWJzY3Jp cHRpb24vdC8wMzJfZGRsX3JlcGxpY2F0aW9uLnBsCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv Y2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNh dGlvbi5jCmluZGV4IDk1NzFjNjY5ZjcuLmM5ZWE1OGNhZGUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24uYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3Bn X3B1YmxpY2F0aW9uLmMKQEAgLTEwMDUsNiArMTAwNSw4IEBAIEdldFB1YmxpY2F0aW9uKE9pZCBw dWJpZCkKIAlwdWItPnB1YmFjdGlvbnMucHVidXBkYXRlID0gcHViZm9ybS0+cHVidXBkYXRlOwog CXB1Yi0+cHViYWN0aW9ucy5wdWJkZWxldGUgPSBwdWJmb3JtLT5wdWJkZWxldGU7CiAJcHViLT5w dWJhY3Rpb25zLnB1YnRydW5jYXRlID0gcHViZm9ybS0+cHVidHJ1bmNhdGU7CisJcHViLT5wdWJh Y3Rpb25zLnB1YmRkbF9hbGwgPSBwdWJmb3JtLT5wdWJkZGxfYWxsOworCXB1Yi0+cHViYWN0aW9u cy5wdWJkZGxfdGFibGUgPSBwdWJmb3JtLT5wdWJkZGxfdGFibGU7CiAJcHViLT5wdWJ2aWFyb290 ID0gcHViZm9ybS0+cHVidmlhcm9vdDsKIAogCVJlbGVhc2VTeXNDYWNoZSh0dXApOwpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYyBiL3NyYy9iYWNrZW5kL2NvbW1h bmRzL2NyZWF0ZWFzLmMKaW5kZXggZDZjNmQ1MTRmMy4uNzdkY2I5YzlkYiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5k cy9jcmVhdGVhcy5jCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9uYW1lc3Bh Y2UuaCIKICNpbmNsdWRlICJjYXRhbG9nL3RvYXN0aW5nLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMv Y3JlYXRlYXMuaCIKKyNpbmNsdWRlICJjb21tYW5kcy9ldmVudF90cmlnZ2VyLmgiCiAjaW5jbHVk ZSAiY29tbWFuZHMvbWF0dmlldy5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3ByZXBhcmUuaCIKICNp bmNsdWRlICJjb21tYW5kcy90YWJsZWNtZHMuaCIKQEAgLTE0Myw2ICsxNDQsMTUgQEAgY3JlYXRl X2N0YXNfaW50ZXJuYWwoTGlzdCAqYXR0ckxpc3QsIEludG9DbGF1c2UgKmludG8pCiAJCVN0b3Jl Vmlld1F1ZXJ5KGludG9SZWxhdGlvbkFkZHIub2JqZWN0SWQsIHF1ZXJ5LCBmYWxzZSk7CiAJCUNv bW1hbmRDb3VudGVySW5jcmVtZW50KCk7CiAJfQorCWVsc2UKKwl7CisJCS8qCisJCSAqIEZpcmUg dGhlIHRyaWdnZXIgZm9yIHRhYmxlX2luaXRfd3JpdGUgYWZ0ZXIgY3JlYXRpbmcgdGhlIHRhYmxl IHNvCisJCSAqIHRoYXQgd2UgY2FuIGFjY2VzcyB0aGUgY2F0YWxvZyBpbmZvIGFib3V0IHRoZSBu ZXdseSBjcmVhdGVkIHRhYmxlCisJCSAqIGluIHRoZSB0cmlnZ2VyIGZ1bmN0aW9uLgorCQkgKi8K KwkJRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGUoKE5vZGUgKikgY3JlYXRlLCBpbnRvUmVsYXRp b25BZGRyKTsKKwl9CiAKIAlyZXR1cm4gaW50b1JlbGF0aW9uQWRkcjsKIH0KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYyBiL3NyYy9iYWNrZW5kL2NvbW1h bmRzL2V2ZW50X3RyaWdnZXIuYwppbmRleCA2YmVhZTJhMTgxLi5lMGE2OTJiMDQ5IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMKKysrIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCkBAIC0zNyw4ICszNywxMSBAQAogI2luY2x1ZGUg Im1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZV9mdW5jLmgiCiAjaW5jbHVkZSAi cGdzdGF0LmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgorI2luY2x1ZGUg InJlcGxpY2F0aW9uL21lc3NhZ2UuaCIKICNpbmNsdWRlICJ0Y29wL2RlcGFyc2VfdXRpbGl0eS5o IgogI2luY2x1ZGUgInRjb3AvdXRpbGl0eS5oIgorI2luY2x1ZGUgInRjb3AvZGRsX2RlcGFyc2Uu aCIKICNpbmNsdWRlICJ1dGlscy9hY2wuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgog I2luY2x1ZGUgInV0aWxzL2V2dGNhY2hlLmgiCkBAIC05Miw3ICs5NSw4IEBAIENyZWF0ZUV2ZW50 VHJpZ2dlcihDcmVhdGVFdmVudFRyaWdTdG10ICpzdG10KQogCWlmIChzdHJjbXAoc3RtdC0+ZXZl bnRuYW1lLCAiZGRsX2NvbW1hbmRfc3RhcnQiKSAhPSAwICYmCiAJCXN0cmNtcChzdG10LT5ldmVu dG5hbWUsICJkZGxfY29tbWFuZF9lbmQiKSAhPSAwICYmCiAJCXN0cmNtcChzdG10LT5ldmVudG5h bWUsICJzcWxfZHJvcCIpICE9IDAgJiYKLQkJc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInRhYmxl X3Jld3JpdGUiKSAhPSAwKQorCQlzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAidGFibGVfcmV3cml0 ZSIpICE9IDAgJiYKKwkJc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInRhYmxlX2luaXRfd3JpdGUi KSAhPSAwKQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VS Uk9SKSwKIAkJCQkgZXJybXNnKCJ1bnJlY29nbml6ZWQgZXZlbnQgbmFtZSBcIiVzXCIiLApAQCAt MTE4LDcgKzEyMiw4IEBAIENyZWF0ZUV2ZW50VHJpZ2dlcihDcmVhdGVFdmVudFRyaWdTdG10ICpz dG10KQogCS8qIFZhbGlkYXRlIHRhZyBsaXN0LCBpZiBhbnkuICovCiAJaWYgKChzdHJjbXAoc3Rt dC0+ZXZlbnRuYW1lLCAiZGRsX2NvbW1hbmRfc3RhcnQiKSA9PSAwIHx8CiAJCSBzdHJjbXAoc3Rt dC0+ZXZlbnRuYW1lLCAiZGRsX2NvbW1hbmRfZW5kIikgPT0gMCB8fAotCQkgc3RyY21wKHN0bXQt PmV2ZW50bmFtZSwgInNxbF9kcm9wIikgPT0gMCkKKwkJIHN0cmNtcChzdG10LT5ldmVudG5hbWUs ICJzcWxfZHJvcCIpID09IDAgfHwKKwkJIHN0cmNtcChzdG10LT5ldmVudG5hbWUsICJ0YWJsZV9p bml0X3dyaXRlIikgPT0gMCkKIAkJJiYgdGFncyAhPSBOVUxMKQogCQl2YWxpZGF0ZV9kZGxfdGFn cygidGFnIiwgdGFncyk7CiAJZWxzZSBpZiAoc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInRhYmxl X3Jld3JpdGUiKSA9PSAwCkBAIC01NDQsNyArNTQ5LDggQEAgRXZlbnRUcmlnZ2VyQ29tbW9uU2V0 dXAoTm9kZSAqcGFyc2V0cmVlLAogCQlkYmd0YWcgPSBDcmVhdGVDb21tYW5kVGFnKHBhcnNldHJl ZSk7CiAJCWlmIChldmVudCA9PSBFVlRfRERMQ29tbWFuZFN0YXJ0IHx8CiAJCQlldmVudCA9PSBF VlRfRERMQ29tbWFuZEVuZCB8fAotCQkJZXZlbnQgPT0gRVZUX1NRTERyb3ApCisJCQlldmVudCA9 PSBFVlRfU1FMRHJvcCB8fAorCQkJZXZlbnQgPT0gRVZUX1RhYmxlSW5pdFdyaXRlKQogCQl7CiAJ CQlpZiAoIWNvbW1hbmRfdGFnX2V2ZW50X3RyaWdnZXJfb2soZGJndGFnKSkKIAkJCQllbG9nKEVS Uk9SLCAidW5leHBlY3RlZCBjb21tYW5kIHRhZyBcIiVzXCIiLCBHZXRDb21tYW5kVGFnTmFtZShk Ymd0YWcpKTsKQEAgLTgyNyw2ICs4MzMsMTQxIEBAIEV2ZW50VHJpZ2dlclRhYmxlUmV3cml0ZShO b2RlICpwYXJzZXRyZWUsIE9pZCB0YWJsZU9pZCwgaW50IHJlYXNvbikKIAlDb21tYW5kQ291bnRl ckluY3JlbWVudCgpOwogfQogCisKKy8qCisgKiBFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZVN0 YXJ0CisgKiAgICAgUHJlcGFyZSB0byByZWNlaXZlIGRhdGEgb24gYW4gQ1JFQVRFIFRBQkxFIEFT L1NFTEVUIElOVE8gY29tbWFuZCBhYm91dAorICogICAgIHRvIGJlIGV4ZWN1dGVkLgorICovCit2 b2lkCitFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZVN0YXJ0KE5vZGUgKnBhcnNldHJlZSkKK3sK KwlNZW1vcnlDb250ZXh0IG9sZGN4dDsKKwlDb2xsZWN0ZWRDb21tYW5kICpjb21tYW5kOworCUNy ZWF0ZVRhYmxlQXNTdG10ICpzdG10ID0gKENyZWF0ZVRhYmxlQXNTdG10ICopcGFyc2V0cmVlOwor CisJLyogaWdub3JlIGlmIGV2ZW50IHRyaWdnZXIgY29udGV4dCBub3Qgc2V0LCBvciBjb2xsZWN0 aW9uIGRpc2FibGVkICovCisJaWYgKCFjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUgfHwKKwkJY3Vy cmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jb21tYW5kQ29sbGVjdGlvbkluaGliaXRlZCkKKwkJcmV0 dXJuOworCisJb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGN1cnJlbnRFdmVudFRyaWdn ZXJTdGF0ZS0+Y3h0KTsKKworCWNvbW1hbmQgPSBwYWxsb2Moc2l6ZW9mKENvbGxlY3RlZENvbW1h bmQpKTsKKworCWNvbW1hbmQtPnR5cGUgPSAoc3RtdC0+b2JqdHlwZSA9PSBPQkpFQ1RfVEFCTEUp ID8gU0NUX0NyZWF0ZVRhYmxlQXMgOiBTQ1RfU2ltcGxlOworCWNvbW1hbmQtPmluX2V4dGVuc2lv biA9IGNyZWF0aW5nX2V4dGVuc2lvbjsKKwljb21tYW5kLT5kLmN0YXMuYWRkcmVzcyA9IEludmFs aWRPYmplY3RBZGRyZXNzOworCWNvbW1hbmQtPmQuY3Rhcy5yZWFsX2NyZWF0ZSA9IE5VTEw7CisJ Y29tbWFuZC0+cGFyc2V0cmVlID0gY29weU9iamVjdChwYXJzZXRyZWUpOworCisJY29tbWFuZC0+ cGFyZW50ID0gY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZDsKKwljdXJy ZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kID0gY29tbWFuZDsKKworCU1lbW9y eUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOworfQorCisvKgorICogRXZlbnRUcmlnZ2VyVGFibGVJ bml0V3JpdGVFbmQKKyAqCQlGaW5pc2ggdXAgc2F2aW5nIGFuIENSRUFURSBUQUJMRSBBUy9TRUxF Q1QgSU5UTyBjb21tYW5kLgorICoKKyAqIEZJWE1FIHRoaXMgQVBJIGlzbid0IGNvbnNpZGVyaW5n IHRoZSBwb3NzaWJpbGl0eSB0aGF0IGFuIHhhY3Qvc3VieGFjdCBpcworICogYWJvcnRlZCBwYXJ0 d2F5IHRocm91Z2guICBQcm9iYWJseSBpdCdzIGJlc3QgdG8gYWRkIGFuCisgKiBBdEVPU3ViWGFj dF9FdmVudFRyaWdnZXJzKCkgdG8gZml4IHRoaXMuCisgKi8KK3ZvaWQKK0V2ZW50VHJpZ2dlclRh YmxlSW5pdFdyaXRlRW5kKE9iamVjdEFkZHJlc3MgYWRkcmVzcykKK3sKKwlDb2xsZWN0ZWRDb21t YW5kICpwYXJlbnQ7CisJQ3JlYXRlVGFibGVBc1N0bXQgKnN0bXQ7CisKKwkvKiBpZ25vcmUgaWYg ZXZlbnQgdHJpZ2dlciBjb250ZXh0IG5vdCBzZXQsIG9yIGNvbGxlY3Rpb24gZGlzYWJsZWQgKi8K KwlpZiAoIWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZSB8fAorCQljdXJyZW50RXZlbnRUcmlnZ2Vy U3RhdGUtPmNvbW1hbmRDb2xsZWN0aW9uSW5oaWJpdGVkKQorCQlyZXR1cm47CisKKwlzdG10ID0g IChDcmVhdGVUYWJsZUFzU3RtdCAqKWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENv bW1hbmQtPnBhcnNldHJlZTsKKworCWlmIChzdG10LT5vYmp0eXBlID09IE9CSkVDVF9UQUJMRSkK Kwl7CisJCXBhcmVudCA9IGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQt PnBhcmVudDsKKworCQlwZnJlZShjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21t YW5kKTsKKworCQljdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kID0gcGFy ZW50OworCX0KKwllbHNlCisJeworCQlNZW1vcnlDb250ZXh0IG9sZGN4dDsKKworCQlvbGRjeHQg PSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jeHQpOwor CisJCWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQtPmQuc2ltcGxlLmFk ZHJlc3MgPSBhZGRyZXNzOworCQljdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmNvbW1hbmRMaXN0 ID0KKwkJCWxhcHBlbmQoY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jb21tYW5kTGlzdCwKKwkJ CQkJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZCk7CisKKwkJTWVtb3J5 Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7CisJfQorfQorCisvKgorICogRmlyZSB0YWJsZV9pbml0 X3Jld3JpdGUgdHJpZ2dlcnMuCisgKi8KK3ZvaWQKK0V2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRl KE5vZGUgKnJlYWxfY3JlYXRlLCBPYmplY3RBZGRyZXNzIGFkZHJlc3MpCit7CisJTGlzdAkgICAq cnVubGlzdDsKKwlFdmVudFRyaWdnZXJEYXRhIHRyaWdkYXRhOworCUNvbGxlY3RlZENvbW1hbmQg KmNvbW1hbmQ7CisKKwkvKgorCSAqIFNlZSBFdmVudFRyaWdnZXJERExDb21tYW5kU3RhcnQgZm9y IGEgZGlzY3Vzc2lvbiBhYm91dCB3aHkgZXZlbnQKKwkgKiB0cmlnZ2VycyBhcmUgZGlzYWJsZWQg aW4gc2luZ2xlIHVzZXIgbW9kZS4KKwkgKi8KKwlpZiAoIUlzVW5kZXJQb3N0bWFzdGVyKQorCQly ZXR1cm47CisKKwkvKgorCSAqIEFsc28gZG8gbm90aGluZyBpZiBvdXIgc3RhdGUgaXNuJ3Qgc2V0 IHVwLCB3aGljaCBpdCB3b24ndCBiZSBpZiB0aGVyZQorCSAqIHdlcmVuJ3QgYW55IHJlbGV2YW50 IGV2ZW50IHRyaWdnZXJzIGF0IHRoZSBzdGFydCBvZiB0aGUgY3VycmVudCBEREwKKwkgKiBjb21t YW5kLiAgVGhpcyB0ZXN0IG1pZ2h0IHRoZXJlZm9yZSBzZWVtIG9wdGlvbmFsLCBidXQgaXQncwor CSAqICpuZWNlc3NhcnkqLCBiZWNhdXNlIEV2ZW50VHJpZ2dlckNvbW1vblNldHVwIG1pZ2h0IGZp bmQgdHJpZ2dlcnMgdGhhdAorCSAqIGRpZG4ndCBleGlzdCBhdCB0aGUgdGltZSB0aGUgY29tbWFu ZCBzdGFydGVkLgorCSAqLworCWlmICghY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlKQorCQlyZXR1 cm47CisKKwkvKiBEbyBub3RoaW5nIGlmIG5vIGNvbW1hbmQgd2FzIGNvbGxlY3RlZC4gKi8KKwlp ZiAoIWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQpCisJCXJldHVybjsK KworCWNvbW1hbmQgPSBjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kOwor CisJcnVubGlzdCA9IEV2ZW50VHJpZ2dlckNvbW1vblNldHVwKGNvbW1hbmQtPnBhcnNldHJlZSwK KwkJCQkJCQkJCSAgRVZUX1RhYmxlSW5pdFdyaXRlLAorCQkJCQkJCQkJICAidGFibGVfaW5pdF93 cml0ZSIsCisJCQkJCQkJCQkgICZ0cmlnZGF0YSk7CisJaWYgKHJ1bmxpc3QgPT0gTklMKQorCQly ZXR1cm47CisKKwkvKiBTZXQgdGhlIHJlYWwgQ3JlYXRlVGFibGUgc3RhdG1lbnQgYW5kIG9iamVj dCBhZGRyZXNzICovCisJY29tbWFuZC0+ZC5jdGFzLnJlYWxfY3JlYXRlID0gcmVhbF9jcmVhdGU7 CisJY29tbWFuZC0+ZC5jdGFzLmFkZHJlc3MgPSBhZGRyZXNzOworCisJLyogUnVuIHRoZSB0cmln Z2Vycy4gKi8KKwlFdmVudFRyaWdnZXJJbnZva2UocnVubGlzdCwgJnRyaWdkYXRhKTsKKworCS8q IENsZWFudXAuICovCisJbGlzdF9mcmVlKHJ1bmxpc3QpOworCisJLyoKKwkgKiBNYWtlIHN1cmUg YW55dGhpbmcgdGhlIGV2ZW50IHRyaWdnZXJzIGRpZCB3aWxsIGJlIHZpc2libGUgdG8gdGhlIG1h aW4KKwkgKiBjb21tYW5kLgorCSAqLworCUNvbW1hbmRDb3VudGVySW5jcmVtZW50KCk7Cit9CisK IC8qCiAgKiBJbnZva2UgZWFjaCBldmVudCB0cmlnZ2VyIGluIGEgbGlzdCBvZiBldmVudCB0cmln Z2Vycy4KICAqLwpAQCAtMTEwOCw3ICsxMjQ5LDggQEAgdHJhY2tEcm9wcGVkT2JqZWN0c05lZWRl ZCh2b2lkKQogCSAqLwogCXJldHVybiAoRXZlbnRDYWNoZUxvb2t1cChFVlRfU1FMRHJvcCkgIT0g TklMKSB8fAogCQkoRXZlbnRDYWNoZUxvb2t1cChFVlRfVGFibGVSZXdyaXRlKSAhPSBOSUwpIHx8 Ci0JCShFdmVudENhY2hlTG9va3VwKEVWVF9ERExDb21tYW5kRW5kKSAhPSBOSUwpOworCQkoRXZl bnRDYWNoZUxvb2t1cChFVlRfRERMQ29tbWFuZEVuZCkgIT0gTklMKSB8fAorCQkoRXZlbnRDYWNo ZUxvb2t1cChFVlRfVGFibGVJbml0V3JpdGUpICE9IE5JTCk7CiB9CiAKIC8qCkBAIC0xNDk5LDYg KzE2NDEsNyBAQCBFdmVudFRyaWdnZXJBbHRlclRhYmxlU3RhcnQoTm9kZSAqcGFyc2V0cmVlKQog CiAJY29tbWFuZC0+ZC5hbHRlclRhYmxlLmNsYXNzSWQgPSBSZWxhdGlvblJlbGF0aW9uSWQ7CiAJ Y29tbWFuZC0+ZC5hbHRlclRhYmxlLm9iamVjdElkID0gSW52YWxpZE9pZDsKKwljb21tYW5kLT5k LmFsdGVyVGFibGUucmV3cml0ZSA9IGZhbHNlOwogCWNvbW1hbmQtPmQuYWx0ZXJUYWJsZS5zdWJj bWRzID0gTklMOwogCWNvbW1hbmQtPnBhcnNldHJlZSA9IGNvcHlPYmplY3QocGFyc2V0cmVlKTsK IApAQCAtMTUzMiw3ICsxNjc1LDcgQEAgRXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZVJlbGlkKE9pZCBv YmplY3RJZCkKICAqIGludGVybmFsbHksIHNvIHRoYXQncyBhbGwgdGhhdCB0aGlzIGNvZGUgbmVl ZHMgdG8gaGFuZGxlIGF0IHRoZSBtb21lbnQuCiAgKi8KIHZvaWQKLUV2ZW50VHJpZ2dlckNvbGxl Y3RBbHRlclRhYmxlU3ViY21kKE5vZGUgKnN1YmNtZCwgT2JqZWN0QWRkcmVzcyBhZGRyZXNzKQor RXZlbnRUcmlnZ2VyQ29sbGVjdEFsdGVyVGFibGVTdWJjbWQoTm9kZSAqc3ViY21kLCBPYmplY3RB ZGRyZXNzIGFkZHJlc3MsIGJvb2wgcmV3cml0ZSkKIHsKIAlNZW1vcnlDb250ZXh0IG9sZGN4dDsK IAlDb2xsZWN0ZWRBVFN1YmNtZCAqbmV3c3ViOwpAQCAtMTU1MiwxMiArMTY5NSwxNDAgQEAgRXZl bnRUcmlnZ2VyQ29sbGVjdEFsdGVyVGFibGVTdWJjbWQoTm9kZSAqc3ViY21kLCBPYmplY3RBZGRy ZXNzIGFkZHJlc3MpCiAJbmV3c3ViLT5hZGRyZXNzID0gYWRkcmVzczsKIAluZXdzdWItPnBhcnNl dHJlZSA9IGNvcHlPYmplY3Qoc3ViY21kKTsKIAorCWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+ Y3VycmVudENvbW1hbmQtPmQuYWx0ZXJUYWJsZS5yZXdyaXRlIHw9IHJld3JpdGU7CiAJY3VycmVu dEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZC0+ZC5hbHRlclRhYmxlLnN1YmNtZHMg PQogCQlsYXBwZW5kKGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQtPmQu YWx0ZXJUYWJsZS5zdWJjbWRzLCBuZXdzdWIpOwogCiAJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9s ZGN4dCk7CiB9CiAKKy8qCisgKiBFdmVudFRyaWdnZXJBbHRlclR5cGVTdGFydAorICoJCVNhdmUg ZGF0YSBhYm91dCBhIHNpbmdsZSBwYXJ0IG9mIGFuIEFMVEVSIFRZUEUuCisgKgorICogQUxURVIg VEFCTEUgY2FuIGhhdmUgbXVsdGlwbGUgc3ViY29tbWFuZHMgd2hpY2ggbWlnaHQgaW5jbHVkZSBE Uk9QIENPTFVNTgorICogY29tbWFuZCBhbmQgQUxURVIgVFlQRSByZWZlcnJpbmcgdGhlIGRyb3Ag Y29sdW1uIGluIFVTSU5HIGV4cHJlc3Npb24uCisgKiBBcyB0aGUgZHJvcHBlZCBjb2x1bW4gY2Fu bm90IGJlIGFjY2Vzc2VkIGFmdGVyIHRoZSBleGVjdXRpb24gb2YgRFJPUCBDT0xVTU4sCisgKiBh IHNwZWNpYWwgdHJpZ2dlciBpcyByZXF1aXJlZCB0byBoYW5kbGUgdGhpcyBjYXNlIGJlZm9yZSB0 aGUgZHJvcCBjb2x1bW4gaXMKKyAqIGV4ZWN1dGVkLgorICovCit2b2lkCitFdmVudFRyaWdnZXJB bHRlclR5cGVTdGFydChBbHRlclRhYmxlQ21kICpzdWJjbWQsIFJlbGF0aW9uIHJlbCkKK3sKKwlN ZW1vcnlDb250ZXh0IG9sZGN4dDsKKwlDb2xsZWN0ZWRBVFN1YmNtZCAqbmV3c3ViOworCUNvbHVt bkRlZiAgKmRlZjsKKwlSZWxhdGlvbglhdHRyZWxhdGlvbjsKKwlIZWFwVHVwbGUJaGVhcFR1cDsK KwlGb3JtX3BnX2F0dHJpYnV0ZSBhdHRUdXA7CisJQXR0ck51bWJlcglhdHRudW07CisJT2JqZWN0 QWRkcmVzcyBhZGRyZXNzOworCisJLyogaWdub3JlIGlmIGV2ZW50IHRyaWdnZXIgY29udGV4dCBu b3Qgc2V0LCBvciBjb2xsZWN0aW9uIGRpc2FibGVkICovCisJaWYgKCFjdXJyZW50RXZlbnRUcmln Z2VyU3RhdGUgfHwKKwkJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jb21tYW5kQ29sbGVjdGlv bkluaGliaXRlZCkKKwkJcmV0dXJuOworCisJQXNzZXJ0KElzQShzdWJjbWQsIEFsdGVyVGFibGVD bWQpKTsKKwlBc3NlcnQoc3ViY21kLT5zdWJ0eXBlID09IEFUX0FsdGVyQ29sdW1uVHlwZSk7CisJ QXNzZXJ0KGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQgIT0gTlVMTCk7 CisJQXNzZXJ0KE9pZElzVmFsaWQoY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29t bWFuZC0+ZC5hbHRlclRhYmxlLm9iamVjdElkKSk7CisKKwlkZWYgPSAoQ29sdW1uRGVmICopIHN1 YmNtZC0+ZGVmOworCUFzc2VydChJc0EoZGVmLCBDb2x1bW5EZWYpKTsKKworCW9sZGN4dCA9IE1l bW9yeUNvbnRleHRTd2l0Y2hUbyhjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN4dCk7CisKKwlu ZXdzdWIgPSBwYWxsb2Moc2l6ZW9mKENvbGxlY3RlZEFUU3ViY21kKSk7CisJbmV3c3ViLT5wYXJz ZXRyZWUgPSAoTm9kZSAqKWNvcHlPYmplY3Qoc3ViY21kKTsKKworCWF0dHJlbGF0aW9uID0gdGFi bGVfb3BlbihBdHRyaWJ1dGVSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCS8qIExv b2sgdXAgdGhlIHRhcmdldCBjb2x1bW4gKi8KKwloZWFwVHVwID0gU2VhcmNoU3lzQ2FjaGVDb3B5 QXR0TmFtZShSZWxhdGlvbkdldFJlbGlkKHJlbCksIHN1YmNtZC0+bmFtZSk7CisJaWYgKCFIZWFw VHVwbGVJc1ZhbGlkKGhlYXBUdXApKSAvKiBzaG91bGRuJ3QgaGFwcGVuICovCisJCWVyZXBvcnQo RVJST1IsCisJCQkJZXJyY29kZShFUlJDT0RFX1VOREVGSU5FRF9DT0xVTU4pLAorCQkJCWVycm1z ZygiY29sdW1uIFwiJXNcIiBvZiByZWxhdGlvbiBcIiVzXCIgZG9lcyBub3QgZXhpc3QiLAorCQkJ CQkgICBzdWJjbWQtPm5hbWUsIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkpKTsKKwlhdHRU dXAgPSAoRm9ybV9wZ19hdHRyaWJ1dGUpIEdFVFNUUlVDVChoZWFwVHVwKTsKKwlhdHRudW0gPSBh dHRUdXAtPmF0dG51bTsKKworCU9iamVjdEFkZHJlc3NTdWJTZXQoYWRkcmVzcywgUmVsYXRpb25S ZWxhdGlvbklkLAorCQkJCQkJUmVsYXRpb25HZXRSZWxpZChyZWwpLCBhdHRudW0pOworCWhlYXBf ZnJlZXR1cGxlKGhlYXBUdXApOworCXRhYmxlX2Nsb3NlKGF0dHJlbGF0aW9uLCBSb3dFeGNsdXNp dmVMb2NrKTsKKwluZXdzdWItPmFkZHJlc3MgPSBhZGRyZXNzOworCisJaWYgKGRlZi0+cmF3X2Rl ZmF1bHQpCisJeworCQljaGFyCSAgICpkZWZleHByOworCisJCWRlZmV4cHIgPSBub2RlVG9TdHJp bmcoZGVmLT5jb29rZWRfZGVmYXVsdCk7CisJCW5ld3N1Yi0+dXNpbmdleHByID0gVGV4dERhdHVt R2V0Q1N0cmluZyhEaXJlY3RGdW5jdGlvbkNhbGwyKHBnX2dldF9leHByLAorCQkJCQkJCQkJCQkJ CQkJCQlDU3RyaW5nR2V0VGV4dERhdHVtKGRlZmV4cHIpLAorCQkJCQkJCQkJCQkJCQkJCQlSZWxh dGlvbkdldFJlbGlkKHJlbCkpKTsKKwl9CisJZWxzZQorCQluZXdzdWItPnVzaW5nZXhwciA9IE5V TEw7CisKKwljdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kLT5kLmFsdGVy VGFibGUuc3ViY21kcyA9CisJCWxhcHBlbmQoY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJy ZW50Q29tbWFuZC0+ZC5hbHRlclRhYmxlLnN1YmNtZHMsIG5ld3N1Yik7CisKKwlNZW1vcnlDb250 ZXh0U3dpdGNoVG8ob2xkY3h0KTsKK30KKworLyoKKyAqIEV2ZW50VHJpZ2dlckFsdGVyVHlwZUVu ZAorICoJCUZpbmlzaCB1cCBzYXZpbmcgYW4gQUxURVIgVFlQRSBjb21tYW5kLCBhbmQgYWRkIGl0 IHRvIGNvbW1hbmQgbGlzdC4KKyAqLwordm9pZAorRXZlbnRUcmlnZ2VyQWx0ZXJUeXBlRW5kKE5v ZGUgKnN1YmNtZCwgT2JqZWN0QWRkcmVzcyBhZGRyZXNzLCBib29sIHJld3JpdGUpCit7CisJTWVt b3J5Q29udGV4dCBvbGRjeHQ7CisJQ29sbGVjdGVkQVRTdWJjbWQgKm5ld3N1YjsKKwlMaXN0Q2Vs bCAgICpjZWxsOworCUNvbGxlY3RlZENvbW1hbmQgKmNtZDsKKwlBbHRlclRhYmxlQ21kICphbHRz dWJjbWQgPSAoQWx0ZXJUYWJsZUNtZCAqKXN1YmNtZDsKKworCS8qIGlnbm9yZSBpZiBldmVudCB0 cmlnZ2VyIGNvbnRleHQgbm90IHNldCwgb3IgY29sbGVjdGlvbiBkaXNhYmxlZCAqLworCWlmICgh Y3VycmVudEV2ZW50VHJpZ2dlclN0YXRlIHx8CisJCWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+ Y29tbWFuZENvbGxlY3Rpb25JbmhpYml0ZWQpCisJCXJldHVybjsKKworCWNtZCA9IGN1cnJlbnRF dmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQ7CisKKwlBc3NlcnQoSXNBKHN1YmNtZCwg QWx0ZXJUYWJsZUNtZCkpOworCUFzc2VydChjbWQgIT0gTlVMTCk7CisJQXNzZXJ0KE9pZElzVmFs aWQoY21kLT5kLmFsdGVyVGFibGUub2JqZWN0SWQpKTsKKworCWZvcmVhY2goY2VsbCwgY21kLT5k LmFsdGVyVGFibGUuc3ViY21kcykKKwl7CisJCUNvbGxlY3RlZEFUU3ViY21kICpzdWIgPSAoQ29s bGVjdGVkQVRTdWJjbWQgKikgbGZpcnN0KGNlbGwpOworCQlBbHRlclRhYmxlQ21kICpjb2xsY21k ID0gKEFsdGVyVGFibGVDbWQgKikgc3ViLT5wYXJzZXRyZWU7CisKKwkJaWYgKGNvbGxjbWQtPnN1 YnR5cGUgPT0gYWx0c3ViY21kLT5zdWJ0eXBlICYmCisJCQlhZGRyZXNzLmNsYXNzSWQgPT0gc3Vi LT5hZGRyZXNzLmNsYXNzSWQgJiYKKwkJCWFkZHJlc3Mub2JqZWN0SWQgPT0gc3ViLT5hZGRyZXNz Lm9iamVjdElkICYmCisJCQlhZGRyZXNzLm9iamVjdFN1YklkID09IHN1Yi0+YWRkcmVzcy5vYmpl Y3RTdWJJZCkKKwkJeworCQkJY21kLT5kLmFsdGVyVGFibGUucmV3cml0ZSB8PSByZXdyaXRlOwor CQkJcmV0dXJuOworCQl9CisJfQorCisJb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGN1 cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3h0KTsKKworCW5ld3N1YiA9IHBhbGxvYyhzaXplb2Yo Q29sbGVjdGVkQVRTdWJjbWQpKTsKKwluZXdzdWItPmFkZHJlc3MgPSBhZGRyZXNzOworCW5ld3N1 Yi0+cGFyc2V0cmVlID0gY29weU9iamVjdChzdWJjbWQpOworCisJY21kLT5kLmFsdGVyVGFibGUu cmV3cml0ZSB8PSByZXdyaXRlOworCWNtZC0+ZC5hbHRlclRhYmxlLnN1YmNtZHMgPSBsYXBwZW5k KGNtZC0+ZC5hbHRlclRhYmxlLnN1YmNtZHMsIG5ld3N1Yik7CisKKwlNZW1vcnlDb250ZXh0U3dp dGNoVG8ob2xkY3h0KTsKK30KKwogLyoKICAqIEV2ZW50VHJpZ2dlckFsdGVyVGFibGVFbmQKICAq CQlGaW5pc2ggdXAgc2F2aW5nIGFuIEFMVEVSIFRBQkxFIGNvbW1hbmQsIGFuZCBhZGQgaXQgdG8g Y29tbWFuZCBsaXN0LgpAQCAtMTg0Myw2ICsyMTE0LDggQEAgcGdfZXZlbnRfdHJpZ2dlcl9kZGxf Y29tbWFuZHMoUEdfRlVOQ1RJT05fQVJHUykKIAkJCQkJCWFkZHIgPSBjbWQtPmQuY3JlYXRlb3Bj LmFkZHJlc3M7CiAJCQkJCWVsc2UgaWYgKGNtZC0+dHlwZSA9PSBTQ1RfQWx0ZXJUU0NvbmZpZykK IAkJCQkJCWFkZHIgPSBjbWQtPmQuYXRzY2ZnLmFkZHJlc3M7CisJCQkJCWVsc2UgaWYgKGNtZC0+ dHlwZSA9PSBTQ1RfQWx0ZXJUU0NvbmZpZykKKwkJCQkJCWFkZHIgPSBjbWQtPmQuY3Rhcy5hZGRy ZXNzOwogCiAJCQkJCS8qCiAJCQkJCSAqIElmIGFuIG9iamVjdCB3YXMgZHJvcHBlZCBpbiB0aGUg c2FtZSBjb21tYW5kIHdlIG1heSBlbmQKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRz L3B1YmxpY2F0aW9uY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRz LmMKaW5kZXggZjRiYTU3MjY5Ny4uNTE5N2Y0YTRhNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv Y29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVi bGljYXRpb25jbWRzLmMKQEAgLTM4LDEwICszOCwxMiBAQAogI2luY2x1ZGUgImNvbW1hbmRzL3B1 YmxpY2F0aW9uY21kcy5oIgogI2luY2x1ZGUgImZ1bmNhcGkuaCIKICNpbmNsdWRlICJtaXNjYWRt aW4uaCIKKyNpbmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIKICNpbmNsdWRlICJub2Rlcy9ub2Rl RnVuY3MuaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2VfY2xhdXNlLmgiCiAjaW5jbHVkZSAicGFy c2VyL3BhcnNlX2NvbGxhdGUuaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2VfcmVsYXRpb24uaCIK KyNpbmNsdWRlICJwYXJzZXIvcGFyc2VyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCiAj aW5jbHVkZSAidXRpbHMvYWNsLmgiCiAjaW5jbHVkZSAidXRpbHMvYXJyYXkuaCIKQEAgLTgyLDEw ICs4NCwxMiBAQCBzdGF0aWMgdm9pZCBQdWJsaWNhdGlvbkRyb3BTY2hlbWFzKE9pZCBwdWJpZCwg TGlzdCAqc2NoZW1hcywgYm9vbCBtaXNzaW5nX29rKTsKIHN0YXRpYyB2b2lkCiBwYXJzZV9wdWJs aWNhdGlvbl9vcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQkJCSAgTGlzdCAqb3B0aW9u cywKKwkJCQkJCSAgYm9vbCBmb3JfYWxsX3RhYmxlcywKIAkJCQkJCSAgYm9vbCAqcHVibGlzaF9n aXZlbiwKIAkJCQkJCSAgUHVibGljYXRpb25BY3Rpb25zICpwdWJhY3Rpb25zLAogCQkJCQkJICBi b29sICpwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdF9naXZlbiwKLQkJCQkJCSAgYm9vbCAqcHVi bGlzaF92aWFfcGFydGl0aW9uX3Jvb3QpCisJCQkJCQkgIGJvb2wgKnB1Ymxpc2hfdmlhX3BhcnRp dGlvbl9yb290LAorCQkJCQkJICBib29sICpkZGxfdHlwZV9naXZlbikKIHsKIAlMaXN0Q2VsbCAg ICpsYzsKIApAQCAtOTcsNiArMTAxLDggQEAgcGFyc2VfcHVibGljYXRpb25fb3B0aW9ucyhQYXJz ZVN0YXRlICpwc3RhdGUsCiAJcHViYWN0aW9ucy0+cHVidXBkYXRlID0gdHJ1ZTsKIAlwdWJhY3Rp b25zLT5wdWJkZWxldGUgPSB0cnVlOwogCXB1YmFjdGlvbnMtPnB1YnRydW5jYXRlID0gdHJ1ZTsK KwlwdWJhY3Rpb25zLT5wdWJkZGxfYWxsID0gZmFsc2U7CisJcHViYWN0aW9ucy0+cHViZGRsX3Rh YmxlID0gZmFsc2U7CiAJKnB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gZmFsc2U7CiAKIAkv KiBQYXJzZSBvcHRpb25zICovCkBAIC0xNTgsNiArMTY0LDUyIEBAIHBhcnNlX3B1YmxpY2F0aW9u X29wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJKnB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9y b290X2dpdmVuID0gdHJ1ZTsKIAkJCSpwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IGRlZkdl dEJvb2xlYW4oZGVmZWwpOwogCQl9CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwg ImRkbCIpID09IDApCisJCXsKKwkJCWNoYXIJICAgKmRkbF9sZXZlbDsKKwkJCUxpc3QJICAgKmRk bF9saXN0OworCQkJTGlzdENlbGwgICAqbGMzOworCisJCQlpZiAoKmRkbF90eXBlX2dpdmVuKQor CQkJCWVycm9yQ29uZmxpY3RpbmdEZWZFbGVtKGRlZmVsLCBwc3RhdGUpOworCisJCQlpZiAoIWZv cl9hbGxfdGFibGVzKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RF X1NZTlRBWF9FUlJPUiksCisJCQkJCQkgZXJybXNnKCJEREwgcmVwbGljYXRpb24gaXMgb25seSBz dXBwb3J0ZWQgaW4gRk9SIEFMTCBUQUJMRVMgcHVibGljYXRpb24iKSkpOworCQkJLyoKKwkJCSAq IElmIGRkbCBvcHRpb24gd2FzIGdpdmVuIG9ubHkgdGhlIGV4cGxpY2l0bHkgbGlzdGVkIGRkbCB0 eXBlcworCQkJICogc2hvdWxkIGJlIHB1Ymxpc2hlZC4KKwkJCSAqLworCQkJcHViYWN0aW9ucy0+ cHViZGRsX2FsbCA9IGZhbHNlOworCQkJcHViYWN0aW9ucy0+cHViZGRsX3RhYmxlID0gZmFsc2U7 CisKKwkJCSpkZGxfdHlwZV9naXZlbiA9IHRydWU7CisJCQlkZGxfbGV2ZWwgPSBkZWZHZXRTdHJp bmcoZGVmZWwpOworCisJCQlpZiAoIVNwbGl0SWRlbnRpZmllclN0cmluZyhkZGxfbGV2ZWwsICcs JywgJmRkbF9saXN0KSkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09E RV9TWU5UQVhfRVJST1IpLAorCQkJCQkJIGVycm1zZygiaW52YWxpZCBsaXN0IHN5bnRheCBmb3Ig XCJkZGxcIiBvcHRpb24iKSkpOworCisJCQkvKiBQcm9jZXNzIHRoZSBvcHRpb24gbGlzdC4gKi8K KwkJCWZvcmVhY2gobGMzLCBkZGxfbGlzdCkKKwkJCXsKKwkJCQljaGFyCSAgICpwdWJsaXNoX29w dCA9IChjaGFyICopIGxmaXJzdChsYzMpOworCisJCQkJaWYgKHN0cmNtcChwdWJsaXNoX29wdCwg ImFsbCIpID09IDApCisJCQkJeworCQkJCQlwdWJhY3Rpb25zLT5wdWJkZGxfYWxsID0gdHJ1ZTsK KwkJCQkJcHViYWN0aW9ucy0+cHViZGRsX3RhYmxlID0gdHJ1ZTsKKwkJCQl9CisJCQkJZWxzZSBp ZiAoc3RyY21wKHB1Ymxpc2hfb3B0LCAidGFibGUiKSA9PSAwKQorCQkJCQlwdWJhY3Rpb25zLT5w dWJkZGxfdGFibGUgPSB0cnVlOworCQkJCWVsc2UKKwkJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJ CQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJCQkJIGVycm1zZygidW5yZWNv Z25pemVkIFwiZGRsXCIgdmFsdWU6IFwiJXNcIiIsIHB1Ymxpc2hfb3B0KSkpOworCQkJfQorCQl9 CiAJCWVsc2UKIAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFY X0VSUk9SKSwKQEAgLTcyOCw2ICs3ODAsNTMgQEAgQ2hlY2tQdWJSZWxhdGlvbkNvbHVtbkxpc3Qo Y2hhciAqcHVibmFtZSwgTGlzdCAqdGFibGVzLAogCX0KIH0KIAorLyoKKyAqIENyZWF0ZSBldmVu dCB0cmlnZ2VyIHdoaWNoIGlzIHVzZWQgZm9yIERETCByZXBsaWNhdGlvbi4KKyAqLworc3RhdGlj IHZvaWQKK0NyZWF0ZURETFJlcGxpY2FFdmVudFRyaWdnZXIoY2hhciAqZXZlbnRuYW1lLCBDb21t YW5kVGFnICpjb21tYW5kcywKKwkJCQkJCQkgaW50IG5jb21tYW5kcywgT2JqZWN0QWRkcmVzcyBw dWJhZGRyZXNzLAorCQkJCQkJCSBPaWQgcHVib2lkKQoreworCWludAkJCWk7CisJTGlzdAkgICAq dGFncyA9IE5JTDsKKwlPaWQJCQl0cmlnZ2VyX2lkOworCU9iamVjdEFkZHJlc3MgcmVmZXJlbmNl ZDsKKwlDcmVhdGVFdmVudFRyaWdTdG10ICpkZGxfdHJpZ2dlcjsKKwljaGFyCQl0cmlnZ2VyX25h bWVbTkFNRURBVEFMRU5dOworCWNoYXIJCXRyaWdnZXJfZnVuY19uYW1lW05BTUVEQVRBTEVOXTsK KwlzdGF0aWMgY29uc3QgY2hhciAqdHJpZ2dlcl9uYW1lX3ByZWZpeCA9ICJwZ19kZXBhcnNlX3Ry aWdfJXNfJXUiOworCXN0YXRpYyBjb25zdCBjaGFyICp0cmlnZ2VyX2Z1bmNfcHJlZml4ID0gInB1 YmxpY2F0aW9uX2RlcGFyc2VfJXMiOworCisJZGRsX3RyaWdnZXIgPSBtYWtlTm9kZShDcmVhdGVF dmVudFRyaWdTdG10KTsKKworCXNucHJpbnRmKHRyaWdnZXJfbmFtZSwgc2l6ZW9mKHRyaWdnZXJf bmFtZSksIHRyaWdnZXJfbmFtZV9wcmVmaXgsCisJCQkgZXZlbnRuYW1lLCBwdWJvaWQpOworCXNu cHJpbnRmKHRyaWdnZXJfZnVuY19uYW1lLCBzaXplb2YodHJpZ2dlcl9mdW5jX25hbWUpLCB0cmln Z2VyX2Z1bmNfcHJlZml4LAorCQkJIGV2ZW50bmFtZSk7CisKKwlkZGxfdHJpZ2dlci0+dHJpZ25h bWUgPSBwc3RyZHVwKHRyaWdnZXJfbmFtZSk7CisJZGRsX3RyaWdnZXItPmV2ZW50bmFtZSA9IGV2 ZW50bmFtZTsKKwlkZGxfdHJpZ2dlci0+ZnVuY25hbWUgPSBTeXN0ZW1GdW5jTmFtZSh0cmlnZ2Vy X2Z1bmNfbmFtZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbmNvbW1hbmRzOyBpKyspCisJeworCQlT dHJpbmcJICAgKnRhZyA9IG1ha2VTdHJpbmcocHN0cmR1cChHZXRDb21tYW5kVGFnTmFtZShjb21t YW5kc1tpXSkpKTsKKworCQl0YWdzID0gbGFwcGVuZCh0YWdzLCB0YWcpOworCX0KKworCWRkbF90 cmlnZ2VyLT53aGVuY2xhdXNlID0gbGlzdF9tYWtlMShtYWtlRGVmRWxlbSgidGFnIiwgKE5vZGUg KikgdGFncywgLTEpKTsKKworCXRyaWdnZXJfaWQgPSBDcmVhdGVFdmVudFRyaWdnZXIoZGRsX3Ry aWdnZXIpOworCisJLyoKKwkgKiBSZWdpc3RlciB0aGUgZXZlbnQgdHJpZ2dlcnMgYXMgaW50ZXJu YWxseSBkZXBlbmRlbnQgb24gdGhlIHB1YmxpY2F0aW9uLgorCSAqLworCU9iamVjdEFkZHJlc3NT ZXQocmVmZXJlbmNlZCwgRXZlbnRUcmlnZ2VyUmVsYXRpb25JZCwgdHJpZ2dlcl9pZCk7CisJcmVj b3JkRGVwZW5kZW5jeU9uKCZyZWZlcmVuY2VkLCAmcHViYWRkcmVzcywgREVQRU5ERU5DWV9JTlRF Uk5BTCk7Cit9CisKIC8qCiAgKiBDcmVhdGUgbmV3IHB1YmxpY2F0aW9uLgogICovCkBAIC03NDEs NiArODQwLDcgQEAgQ3JlYXRlUHVibGljYXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVQ dWJsaWNhdGlvblN0bXQgKnN0bXQpCiAJRGF0dW0JCXZhbHVlc1tOYXR0c19wZ19wdWJsaWNhdGlv bl07CiAJSGVhcFR1cGxlCXR1cDsKIAlib29sCQlwdWJsaXNoX2dpdmVuOworCWJvb2wJCWRkbF90 eXBlX2dpdmVuOwogCVB1YmxpY2F0aW9uQWN0aW9ucyBwdWJhY3Rpb25zOwogCWJvb2wJCXB1Ymxp c2hfdmlhX3BhcnRpdGlvbl9yb290X2dpdmVuOwogCWJvb2wJCXB1Ymxpc2hfdmlhX3BhcnRpdGlv bl9yb290OwpAQCAtNzgxLDkgKzg4MSwxMSBAQCBDcmVhdGVQdWJsaWNhdGlvbihQYXJzZVN0YXRl ICpwc3RhdGUsIENyZWF0ZVB1YmxpY2F0aW9uU3RtdCAqc3RtdCkKIAogCXBhcnNlX3B1YmxpY2F0 aW9uX29wdGlvbnMocHN0YXRlLAogCQkJCQkJCSAgc3RtdC0+b3B0aW9ucywKKwkJCQkJCQkgIHN0 bXQtPmZvcl9hbGxfdGFibGVzLAogCQkJCQkJCSAgJnB1Ymxpc2hfZ2l2ZW4sICZwdWJhY3Rpb25z LAogCQkJCQkJCSAgJnB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290X2dpdmVuLAotCQkJCQkJCSAg JnB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290KTsKKwkJCQkJCQkgICZwdWJsaXNoX3ZpYV9wYXJ0 aXRpb25fcm9vdCwKKwkJCQkJCQkgICZkZGxfdHlwZV9naXZlbik7CiAKIAlwdWJvaWQgPSBHZXRO ZXdPaWRXaXRoSW5kZXgocmVsLCBQdWJsaWNhdGlvbk9iamVjdEluZGV4SWQsCiAJCQkJCQkJCUFu dW1fcGdfcHVibGljYXRpb25fb2lkKTsKQEAgLTc5OCw2ICs5MDAsMTAgQEAgQ3JlYXRlUHVibGlj YXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVQdWJsaWNhdGlvblN0bXQgKnN0bXQpCiAJ CUJvb2xHZXREYXR1bShwdWJhY3Rpb25zLnB1YmRlbGV0ZSk7CiAJdmFsdWVzW0FudW1fcGdfcHVi bGljYXRpb25fcHVidHJ1bmNhdGUgLSAxXSA9CiAJCUJvb2xHZXREYXR1bShwdWJhY3Rpb25zLnB1 YnRydW5jYXRlKTsKKwl2YWx1ZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9wdWJkZGxfYWxsIC0gMV0g PQorCQlCb29sR2V0RGF0dW0ocHViYWN0aW9ucy5wdWJkZGxfYWxsKTsKKwl2YWx1ZXNbQW51bV9w Z19wdWJsaWNhdGlvbl9wdWJkZGxfdGFibGUgLSAxXSA9CisJQm9vbEdldERhdHVtKHB1YmFjdGlv bnMucHViZGRsX3RhYmxlKTsKIAl2YWx1ZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9wdWJ2aWFyb290 IC0gMV0gPQogCQlCb29sR2V0RGF0dW0ocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QpOwogCkBA IC04NTgsNiArOTY0LDUwIEBAIENyZWF0ZVB1YmxpY2F0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwg Q3JlYXRlUHVibGljYXRpb25TdG10ICpzdG10KQogCQl9CiAJfQogCisJLyoKKwkgKiBDcmVhdGUg YW4gZXZlbnQgdHJpZ2dlciB0byBhbGxvdyBsb2dnaW5nIG9mIERETCBzdGF0ZW1lbnRzLgorCSAq CisJICovCisJaWYgKHB1YmFjdGlvbnMucHViZGRsX3RhYmxlIHx8IHB1YmFjdGlvbnMucHViZGRs X2FsbCkKKwl7CisJCUNvbW1hbmRUYWcJc3RhcnRfY29tbWFuZHNbXSA9IHtDTURUQUdfRFJPUF9U QUJMRX07CisJCUNvbW1hbmRUYWcJcmV3cml0ZV9jb21tYW5kc1tdID0ge0NNRFRBR19BTFRFUl9U QUJMRX07CisJCUNvbW1hbmRUYWcJaW5pdF9jb21tYW5kc1tdID0geworCQkJQ01EVEFHX0NSRUFU RV9UQUJMRV9BUywKKwkJCUNNRFRBR19TRUxFQ1RfSU5UTworCQl9OworCQlpbnQgbmNvbW1hbmRz ID0gMDsKKwkJQ29tbWFuZFRhZyAqZW5kX2NvbW1hbmRzOworCisJCWlmIChwdWJhY3Rpb25zLnB1 YmRkbF9hbGwpCisJCQllbmRfY29tbWFuZHMgPSBHZXRDb21tYW5kVGFnc0ZvckRETFJlcGwoJm5j b21tYW5kcyk7CisJCWVsc2UgaWYgKHB1YmFjdGlvbnMucHViZGRsX3RhYmxlKQorCQl7CisJCQlu Y29tbWFuZHMgPSAzOworCQkJZW5kX2NvbW1hbmRzID0gcGFsbG9jMChuY29tbWFuZHMgKiBzaXpl b2YoQ29tbWFuZFRhZykpOworCQkJZW5kX2NvbW1hbmRzWzBdID0gQ01EVEFHX0NSRUFURV9UQUJM RTsKKwkJCWVuZF9jb21tYW5kc1sxXSA9IENNRFRBR19BTFRFUl9UQUJMRTsKKwkJCWVuZF9jb21t YW5kc1syXSA9IENNRFRBR19EUk9QX1RBQkxFOworCQl9CisKKwkJLyogQ3JlYXRlIHRoZSBkZGxf Y29tbWFuZF9lbmQgZXZlbnQgdHJpZ2dlciAqLworCQlDcmVhdGVERExSZXBsaWNhRXZlbnRUcmln Z2VyKCJkZGxfY29tbWFuZF9lbmQiLCBlbmRfY29tbWFuZHMsCisJCQkJCQkJCQkgbmNvbW1hbmRz LCBteXNlbGYsIHB1Ym9pZCk7CisJCXBmcmVlKGVuZF9jb21tYW5kcyk7CisKKwkJLyogQ3JlYXRl IHRoZSBkZGxfY29tbWFuZF9zdGFydCBldmVudCB0cmlnZ2VyICovCisJCUNyZWF0ZURETFJlcGxp Y2FFdmVudFRyaWdnZXIoImRkbF9jb21tYW5kX3N0YXJ0Iiwgc3RhcnRfY29tbWFuZHMsCisJCQkJ CQkJCQkgbGVuZ3Rob2Yoc3RhcnRfY29tbWFuZHMpLCBteXNlbGYsIHB1Ym9pZCk7CisKKwkJLyog Q3JlYXRlIHRoZSB0YWJsZV9yZXdyaXRlIGV2ZW50IHRyaWdnZXIgKi8KKwkJQ3JlYXRlRERMUmVw bGljYUV2ZW50VHJpZ2dlcigidGFibGVfcmV3cml0ZSIsIHJld3JpdGVfY29tbWFuZHMsCisJCQkJ CQkJCQkgbGVuZ3Rob2YocmV3cml0ZV9jb21tYW5kcyksIG15c2VsZiwgcHVib2lkKTsKKworCQkv KiBDcmVhdGUgdGhlIHRhYmxlX2luaXRfd3JpdGUgZXZlbnQgdHJpZ2dlciAqLworCQlDcmVhdGVE RExSZXBsaWNhRXZlbnRUcmlnZ2VyKCJ0YWJsZV9pbml0X3dyaXRlIiwgaW5pdF9jb21tYW5kcywK KwkJCQkJCQkJCSBsZW5ndGhvZihpbml0X2NvbW1hbmRzKSwgbXlzZWxmLCBwdWJvaWQpOworCX0K KwogCXRhYmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CiAKIAlJbnZva2VPYmplY3RQ b3N0Q3JlYXRlSG9vayhQdWJsaWNhdGlvblJlbGF0aW9uSWQsIHB1Ym9pZCwgMCk7CkBAIC04ODIs NiArMTAzMiw3IEBAIEFsdGVyUHVibGljYXRpb25PcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwg QWx0ZXJQdWJsaWNhdGlvblN0bXQgKnN0bXQsCiAJYm9vbAkJcmVwbGFjZXNbTmF0dHNfcGdfcHVi bGljYXRpb25dOwogCURhdHVtCQl2YWx1ZXNbTmF0dHNfcGdfcHVibGljYXRpb25dOwogCWJvb2wJ CXB1Ymxpc2hfZ2l2ZW47CisJYm9vbAkJZGRsX3R5cGVfZ2l2ZW47CiAJUHVibGljYXRpb25BY3Rp b25zIHB1YmFjdGlvbnM7CiAJYm9vbAkJcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3RfZ2l2ZW47 CiAJYm9vbAkJcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3Q7CkBAIC04OTAsMTEgKzEwNDEsMTUg QEAgQWx0ZXJQdWJsaWNhdGlvbk9wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLCBBbHRlclB1Ymxp Y2F0aW9uU3RtdCAqc3RtdCwKIAlMaXN0CSAgICpyb290X3JlbGlkcyA9IE5JTDsKIAlMaXN0Q2Vs bCAgICpsYzsKIAorCXB1YmZvcm0gPSAoRm9ybV9wZ19wdWJsaWNhdGlvbikgR0VUU1RSVUNUKHR1 cCk7CisKIAlwYXJzZV9wdWJsaWNhdGlvbl9vcHRpb25zKHBzdGF0ZSwKIAkJCQkJCQkgIHN0bXQt Pm9wdGlvbnMsCisJCQkJCQkJICBwdWJmb3JtLT5wdWJhbGx0YWJsZXMsCiAJCQkJCQkJICAmcHVi bGlzaF9naXZlbiwgJnB1YmFjdGlvbnMsCiAJCQkJCQkJICAmcHVibGlzaF92aWFfcGFydGl0aW9u X3Jvb3RfZ2l2ZW4sCi0JCQkJCQkJICAmcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QpOworCQkJ CQkJCSAgJnB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290LAorCQkJCQkJCSAgJmRkbF90eXBlX2dp dmVuKTsKIAogCXB1YmZvcm0gPSAoRm9ybV9wZ19wdWJsaWNhdGlvbikgR0VUU1RSVUNUKHR1cCk7 CiAKQEAgLTk5Niw2ICsxMTUxLDEyIEBAIEFsdGVyUHVibGljYXRpb25PcHRpb25zKFBhcnNlU3Rh dGUgKnBzdGF0ZSwgQWx0ZXJQdWJsaWNhdGlvblN0bXQgKnN0bXQsCiAKIAkJdmFsdWVzW0FudW1f cGdfcHVibGljYXRpb25fcHVidHJ1bmNhdGUgLSAxXSA9IEJvb2xHZXREYXR1bShwdWJhY3Rpb25z LnB1YnRydW5jYXRlKTsKIAkJcmVwbGFjZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9wdWJ0cnVuY2F0 ZSAtIDFdID0gdHJ1ZTsKKworCQl2YWx1ZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9wdWJkZGxfYWxs IC0gMV0gPSBCb29sR2V0RGF0dW0ocHViYWN0aW9ucy5wdWJkZGxfYWxsKTsKKwkJcmVwbGFjZXNb QW51bV9wZ19wdWJsaWNhdGlvbl9wdWJkZGxfYWxsIC0gMV0gPSB0cnVlOworCisJCXZhbHVlc1tB bnVtX3BnX3B1YmxpY2F0aW9uX3B1YmRkbF90YWJsZSAtIDFdID0gQm9vbEdldERhdHVtKHB1YmFj dGlvbnMucHViZGRsX3RhYmxlKTsKKwkJcmVwbGFjZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9wdWJk ZGxfdGFibGUgLSAxXSA9IHRydWU7CiAJfQogCiAJaWYgKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9y b290X2dpdmVuKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwppbmRleCAxZGIzYmQ5ZTJlLi42ZmE2 ODdmNTA3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYworKysg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwpAQCAtNDY1MSw2ICs0NjUxLDkgQEAg QVRQcmVwQ21kKExpc3QgKip3cXVldWUsIFJlbGF0aW9uIHJlbCwgQWx0ZXJUYWJsZUNtZCAqY21k LAogCQkJY21kID0gQVRQYXJzZVRyYW5zZm9ybUNtZCh3cXVldWUsIHRhYiwgcmVsLCBjbWQsIHJl Y3Vyc2UsIGxvY2ttb2RlLAogCQkJCQkJCQkJICBBVF9QQVNTX1VOU0VULCBjb250ZXh0KTsKIAkJ CUFzc2VydChjbWQgIT0gTlVMTCk7CisKKwkJCUV2ZW50VHJpZ2dlckFsdGVyVHlwZVN0YXJ0KGNt ZCwgcmVsKTsKKwogCQkJLyogUGVyZm9ybXMgb3duIHJlY3Vyc2lvbiAqLwogCQkJQVRQcmVwQWx0 ZXJDb2x1bW5UeXBlKHdxdWV1ZSwgdGFiLCByZWwsIHJlY3Vyc2UsIHJlY3Vyc2luZywgY21kLAog CQkJCQkJCQkgIGxvY2ttb2RlLCBjb250ZXh0KTsKQEAgLTQ5MjIsNiArNDkyNSw3IEBAIEFURXhl Y0NtZChMaXN0ICoqd3F1ZXVlLCBBbHRlcmVkVGFibGVJbmZvICp0YWIsCiB7CiAJT2JqZWN0QWRk cmVzcyBhZGRyZXNzID0gSW52YWxpZE9iamVjdEFkZHJlc3M7CiAJUmVsYXRpb24JcmVsID0gdGFi LT5yZWw7CisJYm9vbAkJY29tbWFuZENvbGxlY3RlZCA9IGZhbHNlOwogCiAJc3dpdGNoIChjbWQt PnN1YnR5cGUpCiAJewpAQCAtNTA0NSw2ICs1MDQ5LDggQEAgQVRFeGVjQ21kKExpc3QgKip3cXVl dWUsIEFsdGVyZWRUYWJsZUluZm8gKnRhYiwKIAkJY2FzZSBBVF9BbHRlckNvbHVtblR5cGU6CS8q IEFMVEVSIENPTFVNTiBUWVBFICovCiAJCQkvKiBwYXJzZSB0cmFuc2Zvcm1hdGlvbiB3YXMgZG9u ZSBlYXJsaWVyICovCiAJCQlhZGRyZXNzID0gQVRFeGVjQWx0ZXJDb2x1bW5UeXBlKHRhYiwgcmVs LCBjbWQsIGxvY2ttb2RlKTsKKwkJCUV2ZW50VHJpZ2dlckFsdGVyVHlwZUVuZCgoTm9kZSAqKSBj bWQsIGFkZHJlc3MsIHRhYi0+cmV3cml0ZSk7CisJCQljb21tYW5kQ29sbGVjdGVkID0gdHJ1ZTsK IAkJCWJyZWFrOwogCQljYXNlIEFUX0FsdGVyQ29sdW1uR2VuZXJpY09wdGlvbnM6CS8qIEFMVEVS IENPTFVNTiBPUFRJT05TICovCiAJCQlhZGRyZXNzID0KQEAgLTUyMTcsOCArNTIyMyw4IEBAIEFU RXhlY0NtZChMaXN0ICoqd3F1ZXVlLCBBbHRlcmVkVGFibGVJbmZvICp0YWIsCiAJLyoKIAkgKiBS ZXBvcnQgdGhlIHN1YmNvbW1hbmQgdG8gaW50ZXJlc3RlZCBldmVudCB0cmlnZ2Vycy4KIAkgKi8K LQlpZiAoY21kKQotCQlFdmVudFRyaWdnZXJDb2xsZWN0QWx0ZXJUYWJsZVN1YmNtZCgoTm9kZSAq KSBjbWQsIGFkZHJlc3MpOworCWlmIChjbWQgJiYgIWNvbW1hbmRDb2xsZWN0ZWQpCisJCUV2ZW50 VHJpZ2dlckNvbGxlY3RBbHRlclRhYmxlU3ViY21kKChOb2RlICopIGNtZCwgYWRkcmVzcywgdGFi LT5yZXdyaXRlKTsKIAogCS8qCiAJICogQnVtcCB0aGUgY29tbWFuZCBjb3VudGVyIHRvIGVuc3Vy ZSB0aGUgbmV4dCBzdWJjb21tYW5kIGluIHRoZSBzZXF1ZW5jZQpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvcGFyc2VyL3BhcnNlX3V0aWxjbWQuYyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV91 dGlsY21kLmMKaW5kZXggYmZmYTlmOGRkMC4uNjNiMzgxNDllYyAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvcGFyc2VyL3BhcnNlX3V0aWxjbWQuYworKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFy c2VfdXRpbGNtZC5jCkBAIC0xMzk3LDYgKzEzOTcsNyBAQCBleHBhbmRUYWJsZUxpa2VDbGF1c2Uo UmFuZ2VWYXIgKmhlYXBSZWwsIFRhYmxlTGlrZUNsYXVzZSAqdGFibGVfbGlrZV9jbGF1c2UpCiAJ CWF0Y21kLT5jbWRzID0gYXRzdWJjbWRzOwogCQlhdGNtZC0+b2JqdHlwZSA9IE9CSkVDVF9UQUJM RTsKIAkJYXRjbWQtPm1pc3Npbmdfb2sgPSBmYWxzZTsKKwkJYXRjbWQtPnRhYmxlX2xpa2UgPSB0 cnVlOwogCQlyZXN1bHQgPSBsY29ucyhhdGNtZCwgcmVzdWx0KTsKIAl9CiAKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlCmluZGV4IGQ0ZjI5ZjhmZmMuLjIzYWJkNmZhNzkg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUKKysr IGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZQpAQCAtMTYsNiArMTYs NyBAQCBvdmVycmlkZSBDUFBGTEFHUyA6PSAtSSQoc3JjZGlyKSAkKENQUEZMQUdTKQogCiBPQkpT ID0gXAogCWRkbG1lc3NhZ2Uub1wKKwlkZGx0cmlnZ2VyLm9cCiAJZGVjb2RlLm8gXAogCWxhdW5j aGVyLm8gXAogCWxvZ2ljYWwubyBcCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL2RkbHRyaWdnZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwv ZGRsdHJpZ2dlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjU2MzI1 NzFmMGMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L2RkbHRyaWdnZXIuYwpAQCAtMCwwICsxLDM1NyBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgor ICogZGRsdHJpZ2dlci5jCisgKgkgIExvZ2ljYWwgRERMIG1lc3NhZ2VzLgorICoKKyAqIENvcHly aWdodCAoYykgMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisg KiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2Rk bHRyaWdnZXIuYworICoKKyAqIE5PVEVTCisgKgorICogRGVwYXJzZSB0aGUgZGRsIGNvbW1hbmQg YW5kIGxvZyBpdC4KKyAqCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAi cG9zdGdyZXMuaCIKKworI2luY2x1ZGUgImFjY2Vzcy90YWJsZS5oIgorI2luY2x1ZGUgImNhdGFs b2cvcGdfY2xhc3MuaCIKKyNpbmNsdWRlICJjb21tYW5kcy9ldmVudF90cmlnZ2VyLmgiCisjaW5j bHVkZSAiZnVuY2FwaS5oIgorI2luY2x1ZGUgImxpYi9pbGlzdC5oIgorI2luY2x1ZGUgInJlcGxp Y2F0aW9uL2RkbG1lc3NhZ2UuaCIKKyNpbmNsdWRlICJ0Y29wL2RkbF9kZXBhcnNlLmgiCisjaW5j bHVkZSAidXRpbHMvZm1ncnByb3Rvcy5oIgorI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgor CitleHRlcm4gRXZlbnRUcmlnZ2VyUXVlcnlTdGF0ZSAqY3VycmVudEV2ZW50VHJpZ2dlclN0YXRl OworCisvKgorICogRGVwYXJzZSB0aGUgZGRsIGNvbW1hbmQgYW5kIGxvZyBpdCBwcmlvciB0bwor ICogZXhlY3V0aW9uLiBDdXJyZW50bHkgb25seSB1c2VkIGZvciBEUk9QIFRBQkxFIGNvbW1hbmQK KyAqIHNvIHRoYXQgY2F0YWxvZyBjYW4gYmUgYWNjZXNzZWQgYmVmb3JlIGJlaW5nIGRlbGV0ZWQu CisgKiBUaGlzIGlzIHRvIGNoZWNrIGlmIHRoZSB0YWJsZSBpcyBwYXJ0IG9mIHRoZSBwdWJsaWNh dGlvbgorICogb3Igbm90LgorICovCitEYXR1bQorcHVibGljYXRpb25fZGVwYXJzZV9kZGxfY29t bWFuZF9zdGFydChQR19GVU5DVElPTl9BUkdTKQoreworCUV2ZW50VHJpZ2dlckRhdGEgKnRyaWdk YXRhOworCWNoYXIJICAgKmNvbW1hbmQgPSBwc3ByaW50ZigiRHJvcCB0YWJsZSBjb21tYW5kIHN0 YXJ0Iik7CisJRHJvcFN0bXQgICAqc3RtdDsKKwlMaXN0Q2VsbCAgICpjZWxsMTsKKworCWlmICgh Q0FMTEVEX0FTX0VWRU5UX1RSSUdHRVIoZmNpbmZvKSkKKwkJZWxvZyhFUlJPUiwgIm5vdCBmaXJl ZCBieSBldmVudCB0cmlnZ2VyIG1hbmFnZXIiKTsKKworCXRyaWdkYXRhID0gKEV2ZW50VHJpZ2dl ckRhdGEgKikgZmNpbmZvLT5jb250ZXh0OworCXN0bXQgPSAoRHJvcFN0bXQgKikgdHJpZ2RhdGEt PnBhcnNldHJlZTsKKworCS8qIEV4dHJhY3QgdGhlIHJlbGlkIGZyb20gdGhlIHBhcnNlIHRyZWUg Ki8KKwlmb3JlYWNoKGNlbGwxLCBzdG10LT5vYmplY3RzKQorCXsKKwkJY2hhcgkJcmVscGVyc2lz dDsKKwkJTm9kZQkgICAqb2JqZWN0ID0gbGZpcnN0KGNlbGwxKTsKKwkJT2JqZWN0QWRkcmVzcyBh ZGRyZXNzOworCQlSZWxhdGlvbglyZWxhdGlvbiA9IE5VTEw7CisKKwkJYWRkcmVzcyA9IGdldF9v YmplY3RfYWRkcmVzcyhzdG10LT5yZW1vdmVUeXBlLAorCQkJCQkJCQkJIG9iamVjdCwKKwkJCQkJ CQkJCSAmcmVsYXRpb24sCisJCQkJCQkJCQkgQWNjZXNzRXhjbHVzaXZlTG9jaywKKwkJCQkJCQkJ CSB0cnVlKTsKKworCQkvKiBPYmplY3QgZG9lcyBub3QgZXhpc3QsIG5vdGhpbmcgdG8gZG8gKi8K KwkJaWYgKCFyZWxhdGlvbikKKwkJCWNvbnRpbnVlOworCisJCXJlbHBlcnNpc3QgPSBnZXRfcmVs X3BlcnNpc3RlbmNlKGFkZHJlc3Mub2JqZWN0SWQpOworCisJCS8qCisJCSAqIERvIG5vdCBnZW5l cmF0ZSB3YWwgbG9nIGZvciBjb21tYW5kcyB3aG9zZSB0YXJnZXQgdGFibGUgaXMgYQorCQkgKiB0 ZW1wb3JhcnkgdGFibGUuCisJCSAqCisJCSAqIFdlIHdpbGwgZ2VuZXJhdGUgd2FsIGxvZ3MgZm9y IHVubG9nZ2VkIHRhYmxlcyBzbyB0aGF0IHVubG9nZ2VkCisJCSAqIHRhYmxlcyBjYW4gYWxzbyBi ZSBjcmVhdGVkIGFuZCBhbHRlcmVkIG9uIHRoZSBzdWJzY3JpYmVyIHNpZGUuIFRoaXMKKwkJICog bWFrZXMgaXQgcG9zc2libGUgdG8gZGlyZWN0bHkgcmVwbGF5IHRoZSBTRVQgTE9HR0VEIGNvbW1h bmQgYW5kIHRoZQorCQkgKiBpbmNvbWluZyByZXdyaXRlIG1lc3NhZ2Ugd2l0aG91dCBjcmVhdGlu ZyBhIG5ldyB0YWJsZS4KKwkJICovCisJCWlmIChyZWxwZXJzaXN0ICE9IFJFTFBFUlNJU1RFTkNF X1RFTVApCisJCQlMb2dMb2dpY2FsRERMTWVzc2FnZSgiZGVwYXJzZSIsIGFkZHJlc3Mub2JqZWN0 SWQsIERDVF9UYWJsZURyb3BTdGFydCwKKwkJCQkJCQkJIGNvbW1hbmQsIHN0cmxlbihjb21tYW5k KSArIDEpOworCisJCWlmIChyZWxhdGlvbikKKwkJCXRhYmxlX2Nsb3NlKHJlbGF0aW9uLCBOb0xv Y2spOworCX0KKwlyZXR1cm4gUG9pbnRlckdldERhdHVtKE5VTEwpOworfQorCisvKgorICogcHVi bGljYXRpb25fZGVwYXJzZV90YWJsZV9yZXdyaXRlCisgKgorICogRGVwYXJzZSB0aGUgZGRsIHRh YmxlIHJld3JpdGUgY29tbWFuZCBhbmQgbG9nIGl0LgorICovCitEYXR1bQorcHVibGljYXRpb25f ZGVwYXJzZV90YWJsZV9yZXdyaXRlKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJY2hhcgkJcmVscGVy c2lzdDsKKwlDb2xsZWN0ZWRDb21tYW5kICpjbWQ7CisJY2hhcgkgICAqanNvbl9zdHJpbmc7CisK KwlpZiAoIUNBTExFRF9BU19FVkVOVF9UUklHR0VSKGZjaW5mbykpCisJCWVsb2coRVJST1IsICJu b3QgZmlyZWQgYnkgZXZlbnQgdHJpZ2dlciBtYW5hZ2VyIik7CisKKwljbWQgPSBjdXJyZW50RXZl bnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kOworCisJQXNzZXJ0KGNtZCAmJiBjbWQtPmQu YWx0ZXJUYWJsZS5yZXdyaXRlKTsKKworCXJlbHBlcnNpc3QgPSBnZXRfcmVsX3BlcnNpc3RlbmNl KGNtZC0+ZC5hbHRlclRhYmxlLm9iamVjdElkKTsKKworCS8qCisJICogRG8gbm90IGdlbmVyYXRl IHdhbCBsb2cgZm9yIGNvbW1hbmRzIHdob3NlIHRhcmdldCB0YWJsZSBpcyBhIHRlbXBvcmFyeQor CSAqIHRhYmxlLgorCSAqCisJICogV2Ugd2lsbCBnZW5lcmF0ZSB3YWwgbG9ncyBmb3IgdW5sb2dn ZWQgdGFibGVzIHNvIHRoYXQgdW5sb2dnZWQgdGFibGVzCisJICogY2FuIGFsc28gYmUgY3JlYXRl ZCBhbmQgYWx0ZXJlZCBvbiB0aGUgc3Vic2NyaWJlciBzaWRlLiBUaGlzIG1ha2VzIGl0CisJICog cG9zc2libGUgdG8gZGlyZWN0bHkgcmVwbGF5IHRoZSBTRVQgTE9HR0VEIGNvbW1hbmQgYW5kIHRo ZSBpbmNvbWluZworCSAqIHJld3JpdGUgbWVzc2FnZSB3aXRob3V0IGNyZWF0aW5nIGEgbmV3IHRh YmxlLgorCSAqLworCWlmIChyZWxwZXJzaXN0ICE9IFJFTFBFUlNJU1RFTkNFX1RFTVApCisJewor CQkvKiBEZXBhcnNlIHRoZSBEREwgY29tbWFuZCBhbmQgV0FMIGxvZyBpdCB0byBhbGxvdyBkZWNv ZGluZyBvZiB0aGUgc2FtZS4gKi8KKwkJanNvbl9zdHJpbmcgPSBkZXBhcnNlX3V0aWxpdHlfY29t bWFuZChjbWQsIGZhbHNlKTsKKworCQlpZiAoanNvbl9zdHJpbmcgIT0gTlVMTCkKKwkJCUxvZ0xv Z2ljYWxERExNZXNzYWdlKCJkZXBhcnNlIiwgY21kLT5kLmFsdGVyVGFibGUub2JqZWN0SWQsIERD VF9UYWJsZUFsdGVyLAorCQkJCQkJCQkganNvbl9zdHJpbmcsIHN0cmxlbihqc29uX3N0cmluZykg KyAxKTsKKwl9CisKKwlyZXR1cm4gUG9pbnRlckdldERhdHVtKE5VTEwpOworfQorCisvKgorICog RGVwYXJzZSB0aGUgZGRsIGNvbW1hbmQgYW5kIGxvZyBpdC4gVGhpcyBmdW5jdGlvbgorICogaXMg Y2FsbGVkIGFmdGVyIHRoZSBleGVjdXRpb24gb2YgdGhlIGNvbW1hbmQgYnV0IGJlZm9yZSB0aGUK KyAqIHRyYW5zYWN0aW9uIGNvbW1pdHMuCisgKi8KK0RhdHVtCitwdWJsaWNhdGlvbl9kZXBhcnNl X2RkbF9jb21tYW5kX2VuZChQR19GVU5DVElPTl9BUkdTKQoreworCUxpc3RDZWxsICAgKmxjOwor CXNsaXN0X2l0ZXIJaXRlcjsKKwlEZXBhcnNlZENvbW1hbmRUeXBlIHR5cGU7CisJT2lkCQkJcmVs aWQ7CisJY2hhcgkJcmVsa2luZDsKKworCWlmICghQ0FMTEVEX0FTX0VWRU5UX1RSSUdHRVIoZmNp bmZvKSkKKwkJZWxvZyhFUlJPUiwgIm5vdCBmaXJlZCBieSBldmVudCB0cmlnZ2VyIG1hbmFnZXIi KTsKKworCWZvcmVhY2gobGMsIGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y29tbWFuZExpc3Qp CisJeworCQljaGFyCQlyZWxwZXJzaXN0ID0gUkVMUEVSU0lTVEVOQ0VfUEVSTUFORU5UOworCQlD b2xsZWN0ZWRDb21tYW5kICpjbWQgPSBsZmlyc3QobGMpOworCQljaGFyCSAgICpqc29uX3N0cmlu ZzsKKworCQkvKiBSZXdyaXRlIERETCBoYXMgYmVlbiBoYW5kbGVkIGluIHRhYmxlX3Jld3JpdGUg dHJpZ2dlciAqLworCQlpZiAoY21kLT5kLmFsdGVyVGFibGUucmV3cml0ZSkKKwkJeworCQkJUmVu YW1lU3RtdCAqcmVuYW1lU3RtdCA9IChSZW5hbWVTdG10ICopIGNtZC0+cGFyc2V0cmVlOworCisJ CQlpZiAocmVuYW1lU3RtdCAmJiByZW5hbWVTdG10LT5yZWxhdGlvblR5cGUgIT0gT0JKRUNUX1RZ UEUgJiYKKwkJCQlyZW5hbWVTdG10LT5yZWxhdGlvblR5cGUgIT0gT0JKRUNUX1RBQkxFKQorCQkJ CWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGNtZC0+dHlwZSA9PSBTQ1RfU2ltcGxlICYmCisJCQkh T2lkSXNWYWxpZChjbWQtPmQuc2ltcGxlLmFkZHJlc3Mub2JqZWN0SWQpKQorCQkJY29udGludWU7 CisKKwkJaWYgKGNtZC0+dHlwZSA9PSBTQ1RfQWx0ZXJUYWJsZSkKKwkJeworCQkJcmVsaWQgPSBj bWQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJZDsKKwkJCXR5cGUgPSBEQ1RfVGFibGVBbHRlcjsKKwkJ fQorCQllbHNlCisJCXsKKwkJCS8qIE9ubHkgU0NUX1NpbXBsZSBmb3Igbm93ICovCisJCQlyZWxp ZCA9IGNtZC0+ZC5zaW1wbGUuYWRkcmVzcy5vYmplY3RJZDsKKwkJCXR5cGUgPSBEQ1RfU2ltcGxl Q21kOworCQl9CisKKwkJcmVsa2luZCA9IGdldF9yZWxfcmVsa2luZChyZWxpZCk7CisJCWlmIChy ZWxraW5kKQorCQkJcmVscGVyc2lzdCA9IGdldF9yZWxfcGVyc2lzdGVuY2UocmVsaWQpOworCisJ CS8qCisJCSAqIERvIG5vdCBnZW5lcmF0ZSB3YWwgbG9nIGZvciBjb21tYW5kcyB3aG9zZSB0YXJn ZXQgdGFibGUgaXMgYQorCQkgKiB0ZW1wb3JhcnkgdGFibGUuCisJCSAqCisJCSAqIFdlIHdpbGwg Z2VuZXJhdGUgd2FsIGxvZ3MgZm9yIHVubG9nZ2VkIHRhYmxlcyBzbyB0aGF0IHVubG9nZ2VkCisJ CSAqIHRhYmxlcyBjYW4gYWxzbyBiZSBjcmVhdGVkIGFuZCBhbHRlcmVkIG9uIHRoZSBzdWJzY3Jp YmVyIHNpZGUuIFRoaXMKKwkJICogbWFrZXMgaXQgcG9zc2libGUgdG8gZGlyZWN0bHkgcmVwbGF5 IHRoZSBTRVQgTE9HR0VEIGNvbW1hbmQgYW5kIHRoZQorCQkgKiBpbmNvbWluZyByZXdyaXRlIG1l c3NhZ2Ugd2l0aG91dCBjcmVhdGluZyBhIG5ldyB0YWJsZS4KKwkJICovCisJCWlmIChyZWxwZXJz aXN0ICE9IFJFTFBFUlNJU1RFTkNFX1RFTVApCisJCXsKKwkJCS8qCisJCQkgKiBEZXBhcnNlIHRo ZSBEREwgY29tbWFuZCBhbmQgV0FMIGxvZyBpdCB0byBhbGxvdyBkZWNvZGluZyBvZiB0aGUKKwkJ CSAqIHNhbWUuCisJCQkgKi8KKwkJCWpzb25fc3RyaW5nID0gZGVwYXJzZV91dGlsaXR5X2NvbW1h bmQoY21kLCBmYWxzZSk7CisKKwkJCWlmIChqc29uX3N0cmluZyAhPSBOVUxMKQorCQkJCUxvZ0xv Z2ljYWxERExNZXNzYWdlKCJkZXBhcnNlIiwgcmVsaWQsIHR5cGUsIGpzb25fc3RyaW5nLAorCQkJ CQkJCQkJIHN0cmxlbihqc29uX3N0cmluZykgKyAxKTsKKwkJfQorCX0KKworCXNsaXN0X2ZvcmVh Y2goaXRlciwgJihjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPlNRTERyb3BMaXN0KSkKKwl7CisJ CXZvbGF0aWxlIFNRTERyb3BPYmplY3QgKm9iajsKKwkJRHJvcFN0bXQgICAqc3RtdDsKKwkJRXZl bnRUcmlnZ2VyRGF0YSAqdHJpZ2RhdGE7CisJCWNoYXIJICAgKmNvbW1hbmQ7CisJCURlcGFyc2Vk Q29tbWFuZFR5cGUgY21kdHlwZTsKKwkJY29uc3QgY2hhciAqdG1wdHlwZTsKKwkJT2JqZWN0Q2xh c3MJb2JqY2xhc3M7CisJCU9iamVjdEFkZHJlc3Mgb2JqYWRkcjsKKworCQl0cmlnZGF0YSA9IChF dmVudFRyaWdnZXJEYXRhICopIGZjaW5mby0+Y29udGV4dDsKKwkJc3RtdCA9IChEcm9wU3RtdCAq KSB0cmlnZGF0YS0+cGFyc2V0cmVlOworCisJCW9iaiA9IHNsaXN0X2NvbnRhaW5lcihTUUxEcm9w T2JqZWN0LCBuZXh0LCBpdGVyLmN1cik7CisJCW9iamFkZHIgPSBvYmotPmFkZHJlc3M7CisJCW9i amNsYXNzID0gZ2V0T2JqZWN0Q2xhc3MoJm9iamFkZHIpOworCisJCWlmIChzdHJjbXAob2JqLT5v YmplY3R0eXBlLCAidGFibGUiKSA9PSAwKQorCQkJY21kdHlwZSA9IERDVF9UYWJsZURyb3BFbmQ7 CisJCWVsc2UgaWYgKG9iamNsYXNzID09IE9DTEFTU19TQ0hFTUEgfHwKKwkJCQkgb2JqY2xhc3Mg PT0gT0NMQVNTX09QRVJBVE9SIHx8CisJCQkJIG9iamNsYXNzID09IE9DTEFTU19PUENMQVNTIHx8 CisJCQkJIG9iamNsYXNzID09IE9DTEFTU19PUEZBTUlMWSB8fAorCQkJCSBvYmpjbGFzcyA9PSBP Q0xBU1NfQ0FTVCB8fAorCQkJCSBvYmpjbGFzcyA9PSBPQ0xBU1NfVFlQRSB8fAorCQkJCSBvYmpj bGFzcyA9PSBPQ0xBU1NfVFJJR0dFUiB8fAorCQkJCSBvYmpjbGFzcyA9PSBPQ0xBU1NfQ09OVkVS U0lPTiB8fAorCQkJCSBvYmpjbGFzcyA9PSBPQ0xBU1NfUE9MSUNZIHx8CisJCQkJIG9iamNsYXNz ID09IE9DTEFTU19SRVdSSVRFIHx8CisJCQkJIG9iamNsYXNzID09IE9DTEFTU19FWFRFTlNJT04g fHwKKwkJCQkgb2JqY2xhc3MgPT0gT0NMQVNTX0ZEVyB8fAorCQkJCSBvYmpjbGFzcyA9PSBPQ0xB U1NfVFNDT05GSUcgfHwKKwkJCQkgb2JqY2xhc3MgPT0gT0NMQVNTX1RTRElDVCB8fAorCQkJCSBv YmpjbGFzcyA9PSBPQ0xBU1NfVFNURU1QTEFURSB8fAorCQkJCSBvYmpjbGFzcyA9PSBPQ0xBU1Nf VFNQQVJTRVIgfHwKKwkJCQkgb2JqY2xhc3MgPT0gT0NMQVNTX1RSQU5TRk9STSB8fAorCQkJCSBv YmpjbGFzcyA9PSBPQ0xBU1NfRk9SRUlHTl9TRVJWRVIgfHwKKwkJCQkgb2JqY2xhc3MgPT0gT0NM QVNTX0NPTExBVElPTiB8fAorCQkJCSBvYmpjbGFzcyA9PSBPQ0xBU1NfVVNFUl9NQVBQSU5HIHx8 CisJCQkJIG9iamNsYXNzID09IE9DTEFTU19MQU5HVUFHRSB8fAorCQkJCSBvYmpjbGFzcyA9PSBP Q0xBU1NfU1RBVElTVElDX0VYVCB8fAorCQkJCSBvYmpjbGFzcyA9PSBPQ0xBU1NfQU0gfHwKKwkJ CQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgImZvcmVpZ24gdGFibGUiKSA9PSAwIHx8CisJCQkJ IHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJpbmRleCIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9i ai0+b2JqZWN0dHlwZSwgInNlcXVlbmNlIikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmpl Y3R0eXBlLCAidmlldyIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgImZ1 bmN0aW9uIikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAibWF0ZXJpYWxp emVkIHZpZXciKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJwcm9jZWR1 cmUiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJyb3V0aW5lIikgPT0g MCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAiYWdncmVnYXRlIikgPT0gMCkKKwkJ CWNtZHR5cGUgPSBEQ1RfT2JqZWN0RHJvcDsKKwkJZWxzZQorCQkJY29udGludWU7CisKKwkJLyog Q2hhbmdlIGZvcmVpZ24tZGF0YSB3cmFwcGVyIHRvIGZvcmVpZ24gZGF0YSB3cmFwcGVyICovCisJ CWlmIChzdHJuY21wKG9iai0+b2JqZWN0dHlwZSwgImZvcmVpZ24tZGF0YSB3cmFwcGVyIiwgMjAp ID09IDApCisJCXsKKwkJCXRtcHR5cGUgPSBwc3RyZHVwKCJmb3JlaWduIGRhdGEgd3JhcHBlciIp OworCQkJY29tbWFuZCA9IGRlcGFyc2VfZHJvcF9jb21tYW5kKG9iai0+b2JqaWRlbnRpdHksIHRt cHR5cGUsCisJCQkJCQkJCQkJICAgc3RtdC0+YmVoYXZpb3IpOworCQl9CisKKwkJLyogQ2hhbmdl IHN0YXRpc3RpY3Mgb2JqZWN0IHRvIHN0YXRpc3RpY3MgKi8KKwkJZWxzZSBpZiAoc3RybmNtcChv YmotPm9iamVjdHR5cGUsICJzdGF0aXN0aWNzIG9iamVjdCIsCisJCQkJCQkgc3RybGVuKCJzdGF0 aXN0aWNzIG9iamVjdCIpKSA9PSAwKQorCQl7CisJCQl0bXB0eXBlID0gcHN0cmR1cCgic3RhdGlz dGljcyIpOworCQkJY29tbWFuZCA9IGRlcGFyc2VfZHJvcF9jb21tYW5kKG9iai0+b2JqaWRlbnRp dHksIHRtcHR5cGUsCisJCQkJCQkJCQkJICAgc3RtdC0+YmVoYXZpb3IpOworCQl9CisKKwkJLyoK KwkJICogT2JqZWN0IGlkZW50aXR5IG5lZWRzIHRvIGJlIG1vZGlmaWVkIHRvIG1ha2UgdGhlIGRy b3Agd29yaworCQkgKgorCQkgKiBGUk9NOiA8cm9sZT4gb24gc2VydmVyIDxzZXJ2ZXJuYW1lPiBU TyAgOiBmb3IgPHJvbGU+IHNlcnZlcgorCQkgKiA8c2VydmVybmFtZT4KKwkJICoKKwkJICovCisJ CWVsc2UgaWYgKHN0cm5jbXAob2JqLT5vYmplY3R0eXBlLCAidXNlciBtYXBwaW5nIiwgMTIpID09 IDApCisJCXsKKwkJCWNoYXIJICAgKm9uX3NlcnZlcjsKKworCQkJdG1wdHlwZSA9IHBhbGxvYyhz dHJsZW4ob2JqLT5vYmppZGVudGl0eSkgKyAyKTsKKwkJCW9uX3NlcnZlciA9IHN0cnN0cihvYmot Pm9iamlkZW50aXR5LCAib24gc2VydmVyIik7CisKKwkJCXNwcmludGYoKGNoYXIgKikgdG1wdHlw ZSwgImZvciAiKTsKKwkJCXN0cm5jYXQoKGNoYXIgKikgdG1wdHlwZSwgb2JqLT5vYmppZGVudGl0 eSwgb25fc2VydmVyIC0gb2JqLT5vYmppZGVudGl0eSk7CisJCQlzdHJjYXQoKGNoYXIgKikgdG1w dHlwZSwgb25fc2VydmVyICsgMyk7CisJCQljb21tYW5kID0gZGVwYXJzZV9kcm9wX2NvbW1hbmQo dG1wdHlwZSwgb2JqLT5vYmplY3R0eXBlLAorCQkJCQkJCQkJCSAgIHN0bXQtPmJlaGF2aW9yKTsK KwkJfQorCQllbHNlCisJCQljb21tYW5kID0gZGVwYXJzZV9kcm9wX2NvbW1hbmQob2JqLT5vYmpp ZGVudGl0eSwgb2JqLT5vYmplY3R0eXBlLAorCQkJCQkJCQkJCSAgIHN0bXQtPmJlaGF2aW9yKTsK KworCQlpZiAoY29tbWFuZCkKKwkJCUxvZ0xvZ2ljYWxERExNZXNzYWdlKCJkZXBhcnNlIiwgb2Jq LT5hZGRyZXNzLm9iamVjdElkLCBjbWR0eXBlLAorCQkJCQkJCQkgY29tbWFuZCwgc3RybGVuKGNv bW1hbmQpICsgMSk7CisJfQorCisJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxMKTsKK30KKwor CisvKgorICogcHVibGljYXRpb25fZGVwYXJzZV90YWJsZV9pbml0X3dyaXRlCisgKgorICogRGVw YXJzZSB0aGUgZGRsIHRhYmxlIGNyZWF0ZSBjb21tYW5kIGFuZCBsb2cgaXQuCisgKi8KK0RhdHVt CitwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX2luaXRfd3JpdGUoUEdfRlVOQ1RJT05fQVJHUykK K3sKKwljaGFyCQlyZWxwZXJzaXN0OworCUNvbGxlY3RlZENvbW1hbmQgKmNtZDsKKwljaGFyCSAg ICpqc29uX3N0cmluZzsKKworCWlmICghQ0FMTEVEX0FTX0VWRU5UX1RSSUdHRVIoZmNpbmZvKSkK KwkJZWxvZyhFUlJPUiwgIm5vdCBmaXJlZCBieSBldmVudCB0cmlnZ2VyIG1hbmFnZXIiKTsKKwor CWNtZCA9IGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQ7CisJQXNzZXJ0 KGNtZCk7CisKKwlyZWxwZXJzaXN0ID0gZ2V0X3JlbF9wZXJzaXN0ZW5jZShjbWQtPmQuc2ltcGxl LmFkZHJlc3Mub2JqZWN0SWQpOworCisJLyoKKwkgKiBEbyBub3QgZ2VuZXJhdGUgd2FsIGxvZyBm b3IgY29tbWFuZHMgd2hvc2UgdGFyZ2V0IHRhYmxlIGlzIGEgdGVtcG9yYXJ5CisJICogdGFibGUu CisJICoKKwkgKiBXZSB3aWxsIGdlbmVyYXRlIHdhbCBsb2dzIGZvciB1bmxvZ2dlZCB0YWJsZXMg c28gdGhhdCB1bmxvZ2dlZCB0YWJsZXMKKwkgKiBjYW4gYWxzbyBiZSBjcmVhdGVkIGFuZCBhbHRl cmVkIG9uIHRoZSBzdWJzY3JpYmVyIHNpZGUuIFRoaXMgbWFrZXMgaXQKKwkgKiBwb3NzaWJsZSB0 byBkaXJlY3RseSByZXBsYXkgdGhlIFNFVCBMT0dHRUQgY29tbWFuZCBhbmQgdGhlIGluY29taW5n CisJICogcmV3cml0ZSBtZXNzYWdlIHdpdGhvdXQgY3JlYXRpbmcgYSBuZXcgdGFibGUuCisJICov CisJaWYgKHJlbHBlcnNpc3QgPT0gUkVMUEVSU0lTVEVOQ0VfVEVNUCkKKwkJcmV0dXJuIFBvaW50 ZXJHZXREYXR1bShOVUxMKTsKKworCS8qIERlcGFyc2UgdGhlIERETCBjb21tYW5kIGFuZCBXQUwg bG9nIGl0IHRvIGFsbG93IGRlY29kaW5nIG9mIHRoZSBzYW1lLiAqLworCWpzb25fc3RyaW5nID0g ZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQoY21kLCBmYWxzZSk7CisKKwlpZiAoanNvbl9zdHJpbmcg IT0gTlVMTCkKKwkJTG9nTG9naWNhbERETE1lc3NhZ2UoImRlcGFyc2UiLCBjbWQtPmQuc2ltcGxl LmFkZHJlc3Mub2JqZWN0SWQsIERDVF9TaW1wbGVDbWQsCisJCQkJCQkJIGpzb25fc3RyaW5nLCBz dHJsZW4oanNvbl9zdHJpbmcpICsgMSk7CisKKwlyZXR1cm4gUG9pbnRlckdldERhdHVtKE5VTEwp OworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sb2dpY2Fs LmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWwuYwppbmRleCA0ZDg0 ZGY4MmY4Li44ZWY5NjE4NDU2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9s b2dpY2FsL2xvZ2ljYWwuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xv Z2ljYWwuYwpAQCAtOTUsNiArOTUsMTEgQEAgc3RhdGljIHZvaWQgc3RyZWFtX2NoYW5nZV9jYl93 cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4KIHN0YXRp YyB2b2lkIHN0cmVhbV9tZXNzYWdlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJl b3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJCQkJCSAgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwg Ym9vbCB0cmFuc2FjdGlvbmFsLAogCQkJCQkJCQkJICBjb25zdCBjaGFyICpwcmVmaXgsIFNpemUg bWVzc2FnZV9zaXplLCBjb25zdCBjaGFyICptZXNzYWdlKTsKK3N0YXRpYyB2b2lkIHN0cmVhbV9k ZGxfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhu LAorCQkJCQkJCQkJCSBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJCQkJCQkJCSBjb25zdCBj aGFyICpwcmVmaXgsCisJCQkJCQkJCQkJIE9pZCByZWxpZCwgRGVwYXJzZWRDb21tYW5kVHlwZSBj bWR0eXBlLAorCQkJCQkJCQkJCSBTaXplIG1lc3NhZ2Vfc2l6ZSwgY29uc3QgY2hhciAqbWVzc2Fn ZSk7CiBzdGF0aWMgdm9pZCBzdHJlYW1fdHJ1bmNhdGVfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVy ICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQkJCQkJICAgaW50IG5yZWxhdGlv bnMsIFJlbGF0aW9uIHJlbGF0aW9uc1tdLCBSZW9yZGVyQnVmZmVyQ2hhbmdlICpjaGFuZ2UpOwog CkBAIC0yNDAsNiArMjQ1LDcgQEAgU3RhcnR1cERlY29kaW5nQ29udGV4dChMaXN0ICpvdXRwdXRf cGx1Z2luX29wdGlvbnMsCiAJCShjdHgtPmNhbGxiYWNrcy5zdHJlYW1fY29tbWl0X2NiICE9IE5V TEwpIHx8CiAJCShjdHgtPmNhbGxiYWNrcy5zdHJlYW1fY2hhbmdlX2NiICE9IE5VTEwpIHx8CiAJ CShjdHgtPmNhbGxiYWNrcy5zdHJlYW1fbWVzc2FnZV9jYiAhPSBOVUxMKSB8fAorCQkoY3R4LT5j YWxsYmFja3Muc3RyZWFtX2RkbF9jYiAhPSBOVUxMKSB8fAogCQkoY3R4LT5jYWxsYmFja3Muc3Ry ZWFtX3RydW5jYXRlX2NiICE9IE5VTEwpOwogCiAJLyoKQEAgLTI1Nyw2ICsyNjMsNyBAQCBTdGFy dHVwRGVjb2RpbmdDb250ZXh0KExpc3QgKm91dHB1dF9wbHVnaW5fb3B0aW9ucywKIAljdHgtPnJl b3JkZXItPnN0cmVhbV9jb21taXQgPSBzdHJlYW1fY29tbWl0X2NiX3dyYXBwZXI7CiAJY3R4LT5y ZW9yZGVyLT5zdHJlYW1fY2hhbmdlID0gc3RyZWFtX2NoYW5nZV9jYl93cmFwcGVyOwogCWN0eC0+ cmVvcmRlci0+c3RyZWFtX21lc3NhZ2UgPSBzdHJlYW1fbWVzc2FnZV9jYl93cmFwcGVyOworCWN0 eC0+cmVvcmRlci0+c3RyZWFtX2RkbCA9IHN0cmVhbV9kZGxfY2Jfd3JhcHBlcjsKIAljdHgtPnJl b3JkZXItPnN0cmVhbV90cnVuY2F0ZSA9IHN0cmVhbV90cnVuY2F0ZV9jYl93cmFwcGVyOwogCiAK QEAgLTE1NzksNiArMTU4Niw0OCBAQCBzdHJlYW1fbWVzc2FnZV9jYl93cmFwcGVyKFJlb3JkZXJC dWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJZXJyb3JfY29udGV4dF9zdGFj ayA9IGVycmNhbGxiYWNrLnByZXZpb3VzOwogfQogCitzdGF0aWMgdm9pZAorc3RyZWFtX2RkbF9j Yl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJ CQkJCQkJIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCQkJIGNvbnN0IGNoYXIgKnByZWZp eCwgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJIFNpemUg bWVzc2FnZV9zaXplLAorCQkJCQkJCSBjb25zdCBjaGFyICptZXNzYWdlKQoreworCUxvZ2ljYWxE ZWNvZGluZ0NvbnRleHQgKmN0eCA9IGNhY2hlLT5wcml2YXRlX2RhdGE7CisJTG9naWNhbEVycm9y Q2FsbGJhY2tTdGF0ZSBzdGF0ZTsKKwlFcnJvckNvbnRleHRDYWxsYmFjayBlcnJjYWxsYmFjazsK KworCUFzc2VydCghY3R4LT5mYXN0X2ZvcndhcmQpOworCisJLyogV2UncmUgb25seSBzdXBwb3Nl ZCB0byBjYWxsIHRoaXMgd2hlbiBzdHJlYW1pbmcgaXMgc3VwcG9ydGVkLiAqLworCUFzc2VydChj dHgtPnN0cmVhbWluZyk7CisKKwkvKiB0aGlzIGNhbGxiYWNrIGlzIG9wdGlvbmFsICovCisJaWYg KGN0eC0+Y2FsbGJhY2tzLnN0cmVhbV9kZGxfY2IgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyog UHVzaCBjYWxsYmFjayArIGluZm8gb24gdGhlIGVycm9yIGNvbnRleHQgc3RhY2sgKi8KKwlzdGF0 ZS5jdHggPSBjdHg7CisJc3RhdGUuY2FsbGJhY2tfbmFtZSA9ICJzdHJlYW1fZGRsIjsKKwlzdGF0 ZS5yZXBvcnRfbG9jYXRpb24gPSBtZXNzYWdlX2xzbjsKKwllcnJjYWxsYmFjay5jYWxsYmFjayA9 IG91dHB1dF9wbHVnaW5fZXJyb3JfY2FsbGJhY2s7CisJZXJyY2FsbGJhY2suYXJnID0gKHZvaWQg KikgJnN0YXRlOworCWVycmNhbGxiYWNrLnByZXZpb3VzID0gZXJyb3JfY29udGV4dF9zdGFjazsK KwllcnJvcl9jb250ZXh0X3N0YWNrID0gJmVycmNhbGxiYWNrOworCisJLyogc2V0IG91dHB1dCBz dGF0ZSAqLworCWN0eC0+YWNjZXB0X3dyaXRlcyA9IHRydWU7CisJY3R4LT53cml0ZV94aWQgPSB0 eG4gIT0gTlVMTCA/IHR4bi0+eGlkIDogSW52YWxpZFRyYW5zYWN0aW9uSWQ7CisJY3R4LT53cml0 ZV9sb2NhdGlvbiA9IG1lc3NhZ2VfbHNuOworCisJLyogZG8gdGhlIGFjdHVhbCB3b3JrOiBjYWxs IGNhbGxiYWNrICovCisJY3R4LT5jYWxsYmFja3Muc3RyZWFtX2RkbF9jYihjdHgsIHR4biwgbWVz c2FnZV9sc24sIHByZWZpeCwgcmVsaWQsCisJCQkJCQkJCQkJY21kdHlwZSwgbWVzc2FnZV9zaXpl LCBtZXNzYWdlKTsKKworCS8qIFBvcCB0aGUgZXJyb3IgY29udGV4dCBzdGFjayAqLworCWVycm9y X2NvbnRleHRfc3RhY2sgPSBlcnJjYWxsYmFjay5wcmV2aW91czsKK30KKwogc3RhdGljIHZvaWQK IHN0cmVhbV90cnVuY2F0ZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVy QnVmZmVyVFhOICp0eG4sCiAJCQkJCQkgICBpbnQgbnJlbGF0aW9ucywgUmVsYXRpb24gcmVsYXRp b25zW10sCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL21lc29u LmJ1aWxkIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9tZXNvbi5idWlsZAppbmRl eCBjZGE5MTNkMGI4Li5iNzgxNjM3NWEzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvbWVzb24uYnVpbGQKQEAgLTIsNiArMiw3IEBACiAKIGJhY2tlbmRfc291cmNlcyArPSBm aWxlcygKICAgJ2RkbG1lc3NhZ2UuYycsCisgICdkZGx0cmlnZ2VyLmMnLAogICAnZGVjb2RlLmMn LAogICAnbGF1bmNoZXIuYycsCiAgICdsb2dpY2FsLmMnLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC9wcm90by5jCmluZGV4IGQwMGU5MGRkNWUuLjUzMzUzMTBmMzcgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYworKysgYi9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMKQEAgLTY2Myw2ICs2NjMsNDcgQEAgbG9naWNh bHJlcF93cml0ZV9tZXNzYWdlKFN0cmluZ0luZm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwgWExv Z1JlY1B0ciBsc24sCiAJcHFfc2VuZGJ5dGVzKG91dCwgbWVzc2FnZSwgc3opOwogfQogCisvKgor ICogUmVhZCBEREwgTUVTU0FHRSBmcm9tIHN0cmVhbQorICovCitjaGFyICoKK2xvZ2ljYWxyZXBf cmVhZF9kZGwoU3RyaW5nSW5mbyBpbiwgWExvZ1JlY1B0ciAqbHNuLAorCQkJCQkJICAgY29uc3Qg Y2hhciAqKnByZWZpeCwKKwkJCQkJCSAgIFNpemUgKnN6KQoreworCXVpbnQ4IGZsYWdzOworCWNo YXIgKm1zZzsKKworCWZsYWdzID0gcHFfZ2V0bXNnaW50KGluLCAxKTsKKwlpZiAoZmxhZ3MgIT0g MCkKKwkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBmbGFncyAldSBpbiBkZGwgbWVzc2FnZSIs IGZsYWdzKTsKKworCSpsc24gPSBwcV9nZXRtc2dpbnQ2NChpbik7CisJKnByZWZpeCA9IHBxX2dl dG1zZ3N0cmluZyhpbik7CisJKnN6ID0gcHFfZ2V0bXNnaW50KGluLCA0KTsKKwltc2cgPSAoY2hh ciAqKSBwcV9nZXRtc2dieXRlcyhpbiwgKnN6KTsKKworCXJldHVybiBtc2c7Cit9CisKKy8qCisg KiBXcml0ZSBEREwgTUVTU0FHRSB0byBzdHJlYW0KKyAqLwordm9pZAorbG9naWNhbHJlcF93cml0 ZV9kZGwoU3RyaW5nSW5mbyBvdXQsIFhMb2dSZWNQdHIgbHNuLAorCQkJCQkJCWNvbnN0IGNoYXIg KnByZWZpeCwgU2l6ZSBzeiwgY29uc3QgY2hhciAqbWVzc2FnZSkKK3sKKwl1aW50OAkJZmxhZ3Mg PSAwOworCisJcHFfc2VuZGJ5dGUob3V0LCBMT0dJQ0FMX1JFUF9NU0dfRERMKTsKKworCXBxX3Nl bmRpbnQ4KG91dCwgZmxhZ3MpOworCXBxX3NlbmRpbnQ2NChvdXQsIGxzbik7CisJcHFfc2VuZHN0 cmluZyhvdXQsIHByZWZpeCk7CisJcHFfc2VuZGludDMyKG91dCwgc3opOworCXBxX3NlbmRieXRl cyhvdXQsIG1lc3NhZ2UsIHN6KTsKK30KKwogLyoKICAqIFdyaXRlIHJlbGF0aW9uIGRlc2NyaXB0 aW9uIHRvIHRoZSBvdXRwdXQgc3RyZWFtLgogICovCkBAIC0xMjE5LDYgKzEyNjAsOCBAQCBsb2dp Y2FscmVwX21lc3NhZ2VfdHlwZShMb2dpY2FsUmVwTXNnVHlwZSBhY3Rpb24pCiAJCQlyZXR1cm4g IlRZUEUiOwogCQljYXNlIExPR0lDQUxfUkVQX01TR19NRVNTQUdFOgogCQkJcmV0dXJuICJNRVNT QUdFIjsKKwkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfRERMOgorCQkJcmV0dXJuICJEREwiOwogCQlj YXNlIExPR0lDQUxfUkVQX01TR19CRUdJTl9QUkVQQVJFOgogCQkJcmV0dXJuICJCRUdJTiBQUkVQ QVJFIjsKIAkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfUFJFUEFSRToKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jIGIvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMKaW5kZXggM2Y0MGRlYTI4MS4uMGJi MzU4ZjM4NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZW9y ZGVyYnVmZmVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVy YnVmZmVyLmMKQEAgLTIwNDgsMTIgKzIwNDgsMjAgQEAgc3RhdGljIGlubGluZSB2b2lkCiBSZW9y ZGVyQnVmZmVyQXBwbHlERExNZXNzYWdlKFJlb3JkZXJCdWZmZXIgKnJiLCBSZW9yZGVyQnVmZmVy VFhOICp0eG4sCiAJCQkJCQkJIFJlb3JkZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZSwgYm9vbCBzdHJl YW1pbmcpCiB7Ci0JcmItPmRkbChyYiwgdHhuLCBjaGFuZ2UtPmxzbiwKLQkJCWNoYW5nZS0+ZGF0 YS5kZGwucHJlZml4LAotCQkJY2hhbmdlLT5kYXRhLmRkbC5yZWxpZCwKLQkJCWNoYW5nZS0+ZGF0 YS5kZGwuY21kdHlwZSwKLQkJCWNoYW5nZS0+ZGF0YS5kZGwubWVzc2FnZV9zaXplLAotCQkJY2hh bmdlLT5kYXRhLmRkbC5tZXNzYWdlKTsKKwlpZiAoc3RyZWFtaW5nKQorCQlyYi0+c3RyZWFtX2Rk bChyYiwgdHhuLCBjaGFuZ2UtPmxzbiwKKwkJCQkJCQkgIGNoYW5nZS0+ZGF0YS5kZGwucHJlZml4 LAorCQkJCQkJCSAgY2hhbmdlLT5kYXRhLmRkbC5yZWxpZCwKKwkJCQkJCQkgIGNoYW5nZS0+ZGF0 YS5kZGwuY21kdHlwZSwKKwkJCQkJCQkgIGNoYW5nZS0+ZGF0YS5kZGwubWVzc2FnZV9zaXplLAor CQkJCQkJCSAgY2hhbmdlLT5kYXRhLmRkbC5tZXNzYWdlKTsKKwllbHNlCisJCXJiLT5kZGwocmIs IHR4biwgY2hhbmdlLT5sc24sCisJCQkJCSAgIGNoYW5nZS0+ZGF0YS5kZGwucHJlZml4LAorCQkJ CQkgICBjaGFuZ2UtPmRhdGEuZGRsLnJlbGlkLAorCQkJCQkgICBjaGFuZ2UtPmRhdGEuZGRsLmNt ZHR5cGUsCisJCQkJCSAgIGNoYW5nZS0+ZGF0YS5kZGwubWVzc2FnZV9zaXplLAorCQkJCQkgICBj aGFuZ2UtPmRhdGEuZGRsLm1lc3NhZ2UpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvd29ya2VyLmMKaW5kZXggZjg2NDllMTQyYy4uNTkxNDY5ZjJjOCAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYworKysgYi9zcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCkBAIC0xNTYsNiArMTU2LDcgQEAKICNp bmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIKICNpbmNs dWRlICJvcHRpbWl6ZXIvb3B0aW1pemVyLmgiCisjaW5jbHVkZSAicGFyc2VyL2FuYWx5emUuaCIK ICNpbmNsdWRlICJwYXJzZXIvcGFyc2VfcmVsYXRpb24uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIK ICNpbmNsdWRlICJwb3N0bWFzdGVyL2Jnd29ya2VyLmgiCkBAIC0xODAsNyArMTgxLDEwIEBACiAj aW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCiAjaW5j bHVkZSAic3RvcmFnZS9wcm9jYXJyYXkuaCIKKyNpbmNsdWRlICJ0Y29wL2RkbF9kZXBhcnNlLmgi CisjaW5jbHVkZSAidGNvcC9wcXVlcnkuaCIKICNpbmNsdWRlICJ0Y29wL3Rjb3Bwcm90LmgiCisj aW5jbHVkZSAidGNvcC91dGlsaXR5LmgiCiAjaW5jbHVkZSAidXRpbHMvYWNsLmgiCiAjaW5jbHVk ZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9jYXRjYWNoZS5oIgpAQCAtMjUw NCw2ICsyNTA4LDIzOCBAQCBhcHBseV9oYW5kbGVfdHJ1bmNhdGUoU3RyaW5nSW5mbyBzKQogCWVu ZF9yZXBsaWNhdGlvbl9zdGVwKCk7CiB9CiAKKy8qCisgKiBTcGVjaWFsIGhhbmRsaW5nIGZvciBD UkVBVEUgVEFCTEUgQVMgYW5kIFNFTEVDVCBJTlRPCisgKiB0byBub3QgcG9wdWxhdGUgZGF0YSBm cm9tIHRoZSBzb3VyY2UgdGFibGUgb24gdGhlIHN1YnNjcmliZXIuCisgKiBBbGxvdyB0aGUgZGF0 YSB0byBiZSByZXBsaWNhdGVkIHRocm91Z2ggSU5TRVJUcyBvbiB0aGUgcHVibGlzaGVyLgorICov CitzdGF0aWMgdm9pZAorcHJlcHJvY2Vzc19jcmVhdGVfdGFibGUoUmF3U3RtdCAqY29tbWFuZCkK K3sKKwlDb21tYW5kVGFnCWNvbW1hbmRUYWc7CisKKwljb21tYW5kVGFnID0gQ3JlYXRlQ29tbWFu ZFRhZygoTm9kZSAqKSBjb21tYW5kKTsKKworCXN3aXRjaCAoY29tbWFuZFRhZykKKwl7CisJCWNh c2UgQ01EVEFHX0NSRUFURV9UQUJMRV9BUzoKKwkJY2FzZSBDTURUQUdfU0VMRUNUX0lOVE86CisJ CQl7CisJCQkJQ3JlYXRlVGFibGVBc1N0bXQgKmNhc3RtdCA9IChDcmVhdGVUYWJsZUFzU3RtdCAq KSBjb21tYW5kLT5zdG10OworCisJCQkJaWYgKGNhc3RtdC0+b2JqdHlwZSA9PSBPQkpFQ1RfVEFC TEUpCisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBGb3JjZSBza2lwcGluZyBkYXRhIHBvcHVsYXRp b24gdG8gYXZvaWQgZGF0YQorCQkJCQkgKiBpbmNvbnNpc3RlbmN5LiBEYXRhIHNob3VsZCBiZSBy ZXBsaWNhdGVkIGZyb20gdGhlCisJCQkJCSAqIHB1Ymxpc2hlciBpbnN0ZWFkLgorCQkJCQkgKi8K KwkJCQkJY2FzdG10LT5pbnRvLT5za2lwRGF0YSA9IHRydWU7CisJCQkJfQorCQkJfQorCQkJYnJl YWs7CisJCWNhc2UgQ01EVEFHX1NFTEVDVDoKKwkJCXsKKwkJCQlTZWxlY3RTdG10ICpzc3RtdCA9 IChTZWxlY3RTdG10ICopIGNvbW1hbmQtPnN0bXQ7CisKKwkJCQlpZiAoc3N0bXQtPmludG9DbGF1 c2UgIT0gTlVMTCkKKwkJCQl7CisJCQkJCS8qCisJCQkJCSAqIEZvcmNlIHNraXBwaW5nIGRhdGEg cG9wdWxhdGlvbiB0byBhdm9pZCBkYXRhCisJCQkJCSAqIGluY29uc2lzdGVuY3kuIERhdGEgc2hv dWxkIGJlIHJlcGxpY2F0ZWQgZnJvbSB0aGUKKwkJCQkJICogcHVibGlzaGVyIGluc3RlYWQuCisJ CQkJCSAqLworCQkJCQlzc3RtdC0+aW50b0NsYXVzZS0+c2tpcERhdGEgPSB0cnVlOworCQkJCX0K KwkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJfQorfQorCisvKgorICog SGFuZGxlIENSRUFURSBUQUJMRSBjb21tYW5kCisgKgorICogQ2FsbCBBZGRTdWJzY3JpcHRpb25S ZWxTdGF0ZSBmb3IgQ1JFQVRFIExBQkVMIGNvbW1hbmQgdG8gc2V0IHRoZSByZWxzdGF0ZSB0bwor ICogU1VCUkVMX1NUQVRFX1JFQURZIHNvIERNTCBjaGFuZ2VzIG9uIHRoaXMgbmV3IHRhYmxlIGNh biBiZSByZXBsaWNhdGVkIHdpdGhvdXQKKyAqIGhhdmluZyB0byBtYW51YWxseSBydW4gImFsdGVy IHN1YnNjcmlwdGlvbiAuLi4gcmVmcmVzaCBwdWJsaWNhdGlvbiIKKyAqLworc3RhdGljIHZvaWQK K2hhbmRsZV9jcmVhdGVfdGFibGUoUmF3U3RtdCAqY29tbWFuZCkKK3sKKwlDb21tYW5kVGFnCWNv bW1hbmRUYWc7CisJUmFuZ2VWYXIgICAqcnYgPSBOVUxMOworCU9pZAkJCXJlbGlkOworCU9pZAkJ CXJlbG5hbWVzcGFjZSA9IEludmFsaWRPaWQ7CisJQ3JlYXRlU3RtdCAqY3N0bXQ7CisJY2hhcgkg ICAqc2NoZW1hbmFtZSA9IE5VTEw7CisJY2hhcgkgICAqcmVsbmFtZSA9IE5VTEw7CisKKwljb21t YW5kVGFnID0gQ3JlYXRlQ29tbWFuZFRhZygoTm9kZSAqKSBjb21tYW5kKTsKKwljc3RtdCA9IChD cmVhdGVTdG10ICopIGNvbW1hbmQtPnN0bXQ7CisJcnYgPSBjc3RtdC0+cmVsYXRpb247CisKKwlp ZiAoY29tbWFuZFRhZyA9PSBDTURUQUdfQ1JFQVRFX1RBQkxFKQorCXsKKwkJY3N0bXQgPSAoQ3Jl YXRlU3RtdCAqKSBjb21tYW5kLT5zdG10OworCQlydiA9IGNzdG10LT5yZWxhdGlvbjsKKwl9CisJ ZWxzZQorCXsKKwkJcmV0dXJuOworCX0KKworCWlmICghcnYpCisJCXJldHVybjsKKworCXNjaGVt YW5hbWUgPSBydi0+c2NoZW1hbmFtZTsKKwlyZWxuYW1lID0gcnYtPnJlbG5hbWU7CisKKwlpZiAo c2NoZW1hbmFtZSAhPSBOVUxMKQorCQlyZWxuYW1lc3BhY2UgPSBnZXRfbmFtZXNwYWNlX29pZChz Y2hlbWFuYW1lLCBmYWxzZSk7CisKKwlpZiAocmVsbmFtZXNwYWNlICE9IEludmFsaWRPaWQpCisJ CXJlbGlkID0gZ2V0X3JlbG5hbWVfcmVsaWQocmVsbmFtZSwgcmVsbmFtZXNwYWNlKTsKKwllbHNl CisJCXJlbGlkID0gUmVsbmFtZUdldFJlbGlkKHJlbG5hbWUpOworCisJaWYgKE9pZElzVmFsaWQo cmVsaWQpKQorCXsKKwkJQWRkU3Vic2NyaXB0aW9uUmVsU3RhdGUoTXlTdWJzY3JpcHRpb24tPm9p ZCwgcmVsaWQsCisJCQkJCQkJCVNVQlJFTF9TVEFURV9SRUFEWSwKKwkJCQkJCQkJSW52YWxpZFhM b2dSZWNQdHIpOworCQllcmVwb3J0KERFQlVHMSwKKwkJCQkoZXJybXNnX2ludGVybmFsKCJ0YWJs ZSBcIiVzXCIgYWRkZWQgdG8gc3Vic2NyaXB0aW9uIFwiJXNcIiIsCisJCQkJCQkJCSByZWxuYW1l LCBNeVN1YnNjcmlwdGlvbi0+bmFtZSkpKTsKKwl9Cit9CisKKy8qCisgKiBIYW5kbGUgRERMIHJl cGxpY2F0aW9uIG1lc3NhZ2VzLgorICovCitzdGF0aWMgdm9pZAorYXBwbHlfaGFuZGxlX2RkbChT dHJpbmdJbmZvIHMpCit7CisJWExvZ1JlY1B0cglsc247CisJY29uc3QgY2hhciAqcHJlZml4ID0g TlVMTDsKKwljaGFyCSAgICptZXNzYWdlID0gTlVMTDsKKwljaGFyCSAgICpkZGxfY29tbWFuZDsK KwlTaXplCQlzejsKKwlMaXN0CSAgICpwYXJzZXRyZWVfbGlzdDsKKwlMaXN0Q2VsbCAgICpwYXJz ZXRyZWVfaXRlbTsKKwlEZXN0UmVjZWl2ZXIgKnJlY2VpdmVyOworCU1lbW9yeUNvbnRleHQgb2xk Y29udGV4dDsKKwljb25zdCBjaGFyICpzYXZlX2RlYnVnX3F1ZXJ5X3N0cmluZyA9IGRlYnVnX3F1 ZXJ5X3N0cmluZzsKKworCW1lc3NhZ2UgPSBsb2dpY2FscmVwX3JlYWRfZGRsKHMsICZsc24sICZw cmVmaXgsICZzeik7CisKKwkvKiBNYWtlIHN1cmUgd2UgYXJlIGluIGEgdHJhbnNhY3Rpb24gY29t bWFuZCAqLworCWJlZ2luX3JlcGxpY2F0aW9uX3N0ZXAoKTsKKworCWRkbF9jb21tYW5kID0gZGVw YXJzZV9kZGxfanNvbl90b19zdHJpbmcobWVzc2FnZSk7CisJZGVidWdfcXVlcnlfc3RyaW5nID0g ZGRsX2NvbW1hbmQ7CisKKwkvKiBEZXN0Tm9uZSBmb3IgbG9naWNhbCByZXBsaWNhdGlvbiAqLwor CXJlY2VpdmVyID0gQ3JlYXRlRGVzdFJlY2VpdmVyKERlc3ROb25lKTsKKwlwYXJzZXRyZWVfbGlz dCA9IHBnX3BhcnNlX3F1ZXJ5KGRkbF9jb21tYW5kKTsKKworCWZvcmVhY2gocGFyc2V0cmVlX2l0 ZW0sIHBhcnNldHJlZV9saXN0KQorCXsKKwkJTGlzdAkgICAqcGxhbnRyZWVfbGlzdDsKKwkJTGlz dAkgICAqcXVlcnl0cmVlX2xpc3Q7CisJCVJhd1N0bXQgICAgKmNvbW1hbmQgPSAoUmF3U3RtdCAq KSBsZmlyc3QocGFyc2V0cmVlX2l0ZW0pOworCQlDb21tYW5kVGFnCWNvbW1hbmRUYWc7CisJCU1l bW9yeUNvbnRleHQgcGVyX3BhcnNldHJlZV9jb250ZXh0ID0gTlVMTDsKKwkJUG9ydGFsCQlwb3J0 YWw7CisJCWJvb2wJCXNuYXBzaG90X3NldCA9IGZhbHNlOworCisJCWNvbW1hbmRUYWcgPSBDcmVh dGVDb21tYW5kVGFnKChOb2RlICopIGNvbW1hbmQpOworCisJCS8qIElmIHdlIGdvdCBhIGNhbmNl bCBzaWduYWwgaW4gcGFyc2luZyBvciBwcmlvciBjb21tYW5kLCBxdWl0ICovCisJCUNIRUNLX0ZP Ul9JTlRFUlJVUFRTKCk7CisKKwkJLyogUmVtb3ZlIGRhdGEgcG9wdWxhdGlvbiBmcm9tIHRoZSBj b21tYW5kICovCisJCXByZXByb2Nlc3NfY3JlYXRlX3RhYmxlKGNvbW1hbmQpOworCisJCS8qCisJ CSAqIFNldCB1cCBhIHNuYXBzaG90IGlmIHBhcnNlIGFuYWx5c2lzL3BsYW5uaW5nIHdpbGwgbmVl ZCBvbmUuCisJCSAqLworCQlpZiAoYW5hbHl6ZV9yZXF1aXJlc19zbmFwc2hvdChjb21tYW5kKSkK KwkJeworCQkJUHVzaEFjdGl2ZVNuYXBzaG90KEdldFRyYW5zYWN0aW9uU25hcHNob3QoKSk7CisJ CQlzbmFwc2hvdF9zZXQgPSB0cnVlOworCQl9CisKKwkJLyoKKwkJICogV2UgZG8gdGhlIHdvcmsg Zm9yIGVhY2ggcGFyc2V0cmVlIGluIGEgc2hvcnQtbGl2ZWQgY29udGV4dCwgdG8KKwkJICogbGlt aXQgdGhlIG1lbW9yeSB1c2VkIHdoZW4gdGhlcmUgYXJlIG1hbnkgY29tbWFuZHMgaW4gdGhlIHN0 cmluZy4KKwkJICovCisJCXBlcl9wYXJzZXRyZWVfY29udGV4dCA9CisJCQlBbGxvY1NldENvbnRl eHRDcmVhdGUoQ3VycmVudE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCSAgImV4ZWN1dGVfc3FsX3N0 cmluZyBwZXItc3RhdGVtZW50IGNvbnRleHQiLAorCQkJCQkJCQkgIEFMTE9DU0VUX0RFRkFVTFRf U0laRVMpOworCQlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHBlcl9wYXJzZXRy ZWVfY29udGV4dCk7CisKKwkJcXVlcnl0cmVlX2xpc3QgPSBwZ19hbmFseXplX2FuZF9yZXdyaXRl X2ZpeGVkcGFyYW1zKGNvbW1hbmQsCisJCQkJCQkJCQkJCQkJCQlkZGxfY29tbWFuZCwKKwkJCQkJ CQkJCQkJCQkJCU5VTEwsIDAsIE5VTEwpOworCisJCXBsYW50cmVlX2xpc3QgPSBwZ19wbGFuX3F1 ZXJpZXMocXVlcnl0cmVlX2xpc3QsIGRkbF9jb21tYW5kLCAwLCBOVUxMKTsKKworCQkvKiBEb25l IHdpdGggdGhlIHNuYXBzaG90IHVzZWQgZm9yIHBhcnNpbmcvcGxhbm5pbmcgKi8KKwkJaWYgKHNu YXBzaG90X3NldCkKKwkJCVBvcEFjdGl2ZVNuYXBzaG90KCk7CisKKwkJcG9ydGFsID0gQ3JlYXRl UG9ydGFsKCJsb2dpY2FsIHJlcGxpY2F0aW9uIiwgdHJ1ZSwgdHJ1ZSk7CisKKwkJLyoKKwkJICog V2UgZG9uJ3QgaGF2ZSB0byBjb3B5IGFueXRoaW5nIGludG8gdGhlIHBvcnRhbCwgYmVjYXVzZSBl dmVyeXRoaW5nCisJCSAqIHdlIGFyZSBwYXNzaW5nIGhlcmUgaXMgaW4gQXBwbHlNZXNzYWdlQ29u dGV4dCBvciB0aGUKKwkJICogcGVyX3BhcnNldHJlZV9jb250ZXh0LCBhbmQgc28gd2lsbCBvdXRs aXZlIHRoZSBwb3J0YWwgYW55d2F5LgorCQkgKi8KKwkJUG9ydGFsRGVmaW5lUXVlcnkocG9ydGFs LAorCQkJCQkJICBOVUxMLAorCQkJCQkJICBkZGxfY29tbWFuZCwKKwkJCQkJCSAgY29tbWFuZFRh ZywKKwkJCQkJCSAgcGxhbnRyZWVfbGlzdCwKKwkJCQkJCSAgTlVMTCk7CisKKwkJLyoKKwkJICog U3RhcnQgdGhlIHBvcnRhbC4gIE5vIHBhcmFtZXRlcnMgaGVyZS4KKwkJICovCisJCVBvcnRhbFN0 YXJ0KHBvcnRhbCwgTlVMTCwgMCwgSW52YWxpZFNuYXBzaG90KTsKKworCQkvKgorCQkgKiBTd2l0 Y2ggYmFjayB0byB0cmFuc2FjdGlvbiBjb250ZXh0IGZvciBleGVjdXRpb24uCisJCSAqLworCQlN ZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisKKwkJKHZvaWQpIFBvcnRhbFJ1bihw b3J0YWwsCisJCQkJCQkgRkVUQ0hfQUxMLAorCQkJCQkJIHRydWUsCisJCQkJCQkgdHJ1ZSwKKwkJ CQkJCSByZWNlaXZlciwKKwkJCQkJCSByZWNlaXZlciwKKwkJCQkJCSBOVUxMKTsKKworCQlQb3J0 YWxEcm9wKHBvcnRhbCwgZmFsc2UpOworCisJCUNvbW1hbmRDb3VudGVySW5jcmVtZW50KCk7CisK KwkJLyoKKwkJICogVGFibGUgY3JlYXRlZCBieSBEREwgcmVwbGljYXRpb24gKGRhdGFiYXNlIGxl dmVsKSBpcyBhdXRvbWF0aWNhbGx5CisJCSAqIGFkZGVkIHRvIHRoZSBzdWJzY3JpcHRpb24gaGVy ZS4KKwkJICovCisJCWhhbmRsZV9jcmVhdGVfdGFibGUoY29tbWFuZCk7CisKKwkJLyogTm93IHdl IG1heSBkcm9wIHRoZSBwZXItcGFyc2V0cmVlIGNvbnRleHQsIGlmIG9uZSB3YXMgY3JlYXRlZC4g Ki8KKwkJTWVtb3J5Q29udGV4dERlbGV0ZShwZXJfcGFyc2V0cmVlX2NvbnRleHQpOworCX0KKwor CWRlYnVnX3F1ZXJ5X3N0cmluZyA9IHNhdmVfZGVidWdfcXVlcnlfc3RyaW5nOworCWVuZF9yZXBs aWNhdGlvbl9zdGVwKCk7Cit9CiAKIC8qCiAgKiBMb2dpY2FsIHJlcGxpY2F0aW9uIHByb3RvY29s IG1lc3NhZ2UgZGlzcGF0Y2hlci4KQEAgLTI1NjksNiArMjgwNSwxMCBAQCBhcHBseV9kaXNwYXRj aChTdHJpbmdJbmZvIHMpCiAJCQkgKi8KIAkJCWJyZWFrOwogCisJCWNhc2UgTE9HSUNBTF9SRVBf TVNHX0RETDoKKwkJCWFwcGx5X2hhbmRsZV9kZGwocyk7CisJCQlicmVhazsKKwogCQljYXNlIExP R0lDQUxfUkVQX01TR19TVFJFQU1fU1RBUlQ6CiAJCQlhcHBseV9oYW5kbGVfc3RyZWFtX3N0YXJ0 KHMpOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291 dHB1dC9wZ291dHB1dC5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRw dXQuYwppbmRleCA4NzZhZGFiMzhlLi40OGY5ZGU3MDI4IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMKQEAgLTUzLDYgKzUzLDExIEBAIHN0YXRpYyB2b2lk IHBnb3V0cHV0X21lc3NhZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAogCQkJCQkJCSBS ZW9yZGVyQnVmZmVyVFhOICp0eG4sIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCiAJCQkJCQkJIGJv b2wgdHJhbnNhY3Rpb25hbCwgY29uc3QgY2hhciAqcHJlZml4LAogCQkJCQkJCSBTaXplIHN6LCBj b25zdCBjaGFyICptZXNzYWdlKTsKK3N0YXRpYyB2b2lkIHBnb3V0cHV0X2RkbChMb2dpY2FsRGVj b2RpbmdDb250ZXh0ICpjdHgsCisJCQkJCQkJCVJlb3JkZXJCdWZmZXJUWE4gKnR4biwgWExvZ1Jl Y1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJY29uc3QgY2hhciAqcHJlZml4LCBPaWQgcmVsaWQs CisJCQkJCQkJCURlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkJU2l6ZSBzeiwg Y29uc3QgY2hhciAqbWVzc2FnZSk7CiBzdGF0aWMgYm9vbCBwZ291dHB1dF9vcmlnaW5fZmlsdGVy KExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKIAkJCQkJCQkJICAgUmVwT3JpZ2luSWQgb3Jp Z2luX2lkKTsKIHN0YXRpYyB2b2lkIHBnb3V0cHV0X2JlZ2luX3ByZXBhcmVfdHhuKExvZ2ljYWxE ZWNvZGluZ0NvbnRleHQgKmN0eCwKQEAgLTI1Niw2ICsyNjEsNyBAQCBfUEdfb3V0cHV0X3BsdWdp bl9pbml0KE91dHB1dFBsdWdpbkNhbGxiYWNrcyAqY2IpCiAJY2ItPmNoYW5nZV9jYiA9IHBnb3V0 cHV0X2NoYW5nZTsKIAljYi0+dHJ1bmNhdGVfY2IgPSBwZ291dHB1dF90cnVuY2F0ZTsKIAljYi0+ bWVzc2FnZV9jYiA9IHBnb3V0cHV0X21lc3NhZ2U7CisJY2ItPmRkbF9jYiA9IHBnb3V0cHV0X2Rk bDsKIAljYi0+Y29tbWl0X2NiID0gcGdvdXRwdXRfY29tbWl0X3R4bjsKIAogCWNiLT5iZWdpbl9w cmVwYXJlX2NiID0gcGdvdXRwdXRfYmVnaW5fcHJlcGFyZV90eG47CkBAIC0yNzIsNiArMjc4LDcg QEAgX1BHX291dHB1dF9wbHVnaW5faW5pdChPdXRwdXRQbHVnaW5DYWxsYmFja3MgKmNiKQogCWNi LT5zdHJlYW1fY29tbWl0X2NiID0gcGdvdXRwdXRfc3RyZWFtX2NvbW1pdDsKIAljYi0+c3RyZWFt X2NoYW5nZV9jYiA9IHBnb3V0cHV0X2NoYW5nZTsKIAljYi0+c3RyZWFtX21lc3NhZ2VfY2IgPSBw Z291dHB1dF9tZXNzYWdlOworCWNiLT5zdHJlYW1fZGRsX2NiID0gcGdvdXRwdXRfZGRsOwogCWNi LT5zdHJlYW1fdHJ1bmNhdGVfY2IgPSBwZ291dHB1dF90cnVuY2F0ZTsKIAkvKiB0cmFuc2FjdGlv biBzdHJlYW1pbmcgLSB0d28tcGhhc2UgY29tbWl0ICovCiAJY2ItPnN0cmVhbV9wcmVwYXJlX2Ni ID0gcGdvdXRwdXRfc3RyZWFtX3ByZXBhcmVfdHhuOwpAQCAtNDI2LDYgKzQzMyw3IEBAIHBnb3V0 cHV0X3N0YXJ0dXAoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBPdXRwdXRQbHVnaW5PcHRp b25zICpvcHQsCiAKIAkvKiBUaGlzIHBsdWdpbiB1c2VzIGJpbmFyeSBwcm90b2NvbC4gKi8KIAlv cHQtPm91dHB1dF90eXBlID0gT1VUUFVUX1BMVUdJTl9CSU5BUllfT1VUUFVUOworCW9wdC0+cmVj ZWl2ZV9yZXdyaXRlcyA9IHRydWU7CiAKIAkvKgogCSAqIFRoaXMgaXMgcmVwbGljYXRpb24gc3Rh cnQgYW5kIG5vdCBzbG90IGluaXRpYWxpemF0aW9uLgpAQCAtNDk5LDYgKzUwNyw3IEBAIHBnb3V0 cHV0X3N0YXJ0dXAoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBPdXRwdXRQbHVnaW5PcHRp b25zICpvcHQsCiAKIAkJLyogSW5pdCBwdWJsaWNhdGlvbiBzdGF0ZS4gKi8KIAkJZGF0YS0+cHVi bGljYXRpb25zID0gTklMOworCQlkYXRhLT5kZWxldGVkX3JlbGlkcyA9IE5JTDsKIAkJcHVibGlj YXRpb25zX3ZhbGlkID0gZmFsc2U7CiAJCUNhY2hlUmVnaXN0ZXJTeXNjYWNoZUNhbGxiYWNrKFBV QkxJQ0FUSU9OT0lELAogCQkJCQkJCQkJICBwdWJsaWNhdGlvbl9pbnZhbGlkYXRpb25fY2IsCkBA IC0xMzc3LDkgKzEzODYsMjIgQEAgcGdvdXRwdXRfY2hhbmdlKExvZ2ljYWxEZWNvZGluZ0NvbnRl eHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCVJlb3JkZXJCdWZmZXJDaGFuZ2VUeXBl IGFjdGlvbiA9IGNoYW5nZS0+YWN0aW9uOwogCVR1cGxlVGFibGVTbG90ICpvbGRfc2xvdCA9IE5V TEw7CiAJVHVwbGVUYWJsZVNsb3QgKm5ld19zbG90ID0gTlVMTDsKKwlib29sCQl0YWJsZV9yZXdy aXRlID0gZmFsc2U7CiAKIAl1cGRhdGVfcmVwbGljYXRpb25fcHJvZ3Jlc3MoY3R4LCBmYWxzZSk7 CiAKKwkvKgorCSAqIEZvciBoZWFwIHJld3JpdGVzLCB3ZSBtaWdodCBuZWVkIHRvIHJlcGxpY2F0 ZSB0aGVtIGlmIHRoZSByZXdyaXR0ZW4KKwkgKiB0YWJsZSBwdWJsaXNoZXMgcmV3cml0ZSBkZGwg bWVzc2FnZS4gU28gZ2V0IHRoZSBhY3R1YWwgcmVsYXRpb24gaGVyZQorCSAqIGFuZCBjaGVjayB0 aGUgcHViYWN0aW9uIGxhdGVyLgorCSAqLworCWlmIChyZWxhdGlvbi0+cmRfcmVsLT5yZWxyZXdy aXRlKQorCXsKKwkJdGFibGVfcmV3cml0ZSA9IHRydWU7CisJCXJlbGF0aW9uID0gUmVsYXRpb25J ZEdldFJlbGF0aW9uKHJlbGF0aW9uLT5yZF9yZWwtPnJlbHJld3JpdGUpOworCQl0YXJnZXRyZWwg PSByZWxhdGlvbjsKKwl9CisKIAlpZiAoIWlzX3B1Ymxpc2hhYmxlX3JlbGF0aW9uKHJlbGF0aW9u KSkKIAkJcmV0dXJuOwogCkBAIC0xNDEzLDYgKzE0MzUsMTMgQEAgcGdvdXRwdXRfY2hhbmdlKExv Z2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJQXNz ZXJ0KGZhbHNlKTsKIAl9CiAKKwkvKgorCSAqIFdlIGRvbid0IHB1Ymxpc2ggdGFibGUgcmV3cml0 ZSBjaGFuZ2UgdW5sZXNzIHdlIHB1Ymxpc2ggdGhlIHJld3JpdGUgZGRsCisJICogbWVzc2FnZS4K KwkgKi8KKwlpZiAodGFibGVfcmV3cml0ZSAmJiAhcmVsZW50cnktPnB1YmFjdGlvbnMucHViZGRs X3RhYmxlKQorCQlyZXR1cm47CisKIAkvKiBBdm9pZCBsZWFraW5nIG1lbW9yeSBieSB1c2luZyBh bmQgcmVzZXR0aW5nIG91ciBvd24gY29udGV4dCAqLwogCW9sZCA9IE1lbW9yeUNvbnRleHRTd2l0 Y2hUbyhkYXRhLT5jb250ZXh0KTsKIApAQCAtMTQ0Miw4ICsxNDcxLDggQEAgcGdvdXRwdXRfY2hh bmdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAog CQkJfQogCiAJCQkvKiBDaGVjayByb3cgZmlsdGVyICovCi0JCQlpZiAoIXBnb3V0cHV0X3Jvd19m aWx0ZXIodGFyZ2V0cmVsLCBOVUxMLCAmbmV3X3Nsb3QsIHJlbGVudHJ5LAotCQkJCQkJCQkJICZh Y3Rpb24pKQorCQkJaWYgKCF0YWJsZV9yZXdyaXRlICYmCisJCQkJIXBnb3V0cHV0X3Jvd19maWx0 ZXIodGFyZ2V0cmVsLCBOVUxMLCAmbmV3X3Nsb3QsIHJlbGVudHJ5LCAmYWN0aW9uKSkKIAkJCQli cmVhazsKIAogCQkJLyoKQEAgLTE0NjMsOCArMTQ5MiwxOSBAQCBwZ291dHB1dF9jaGFuZ2UoTG9n aWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQltYXli ZV9zZW5kX3NjaGVtYShjdHgsIGNoYW5nZSwgcmVsYXRpb24sIHJlbGVudHJ5KTsKIAogCQkJT3V0 cHV0UGx1Z2luUHJlcGFyZVdyaXRlKGN0eCwgdHJ1ZSk7Ci0JCQlsb2dpY2FscmVwX3dyaXRlX2lu c2VydChjdHgtPm91dCwgeGlkLCB0YXJnZXRyZWwsIG5ld19zbG90LAotCQkJCQkJCQkJZGF0YS0+ YmluYXJ5LCByZWxlbnRyeS0+Y29sdW1ucyk7CisKKwkJCS8qCisJCQkgKiBDb252ZXJ0IHRoZSBy ZXdyaXRlIGluc2VydHMgdG8gdXBkYXRlcyBzbyB0aGF0IHRoZSBzdWJzY3JpYmVyCisJCQkgKiBj YW4gcmVwbGF5IGl0LiBUaGlzIGlzIG5lZWRlZCB0byBtYWtlIHN1cmUgdGhlIGRhdGEgYmV0d2Vl bgorCQkJICogcHVibGlzaGVyIGFuZCBzdWJzY3JpYmVyIGlzIGNvbnNpc3RlbnQuCisJCQkgKi8K KwkJCWlmICh0YWJsZV9yZXdyaXRlKQorCQkJCWxvZ2ljYWxyZXBfd3JpdGVfdXBkYXRlKGN0eC0+ b3V0LCB4aWQsIHRhcmdldHJlbCwKKwkJCQkJCQkJCQlOVUxMLCBuZXdfc2xvdCwgZGF0YS0+Ymlu YXJ5LAorCQkJCQkJCQkJCXJlbGVudHJ5LT5jb2x1bW5zKTsKKwkJCWVsc2UKKwkJCQlsb2dpY2Fs cmVwX3dyaXRlX2luc2VydChjdHgtPm91dCwgeGlkLCB0YXJnZXRyZWwsIG5ld19zbG90LAorCQkJ CQkJCQkJCWRhdGEtPmJpbmFyeSwgcmVsZW50cnktPmNvbHVtbnMpOwogCQkJT3V0cHV0UGx1Z2lu V3JpdGUoY3R4LCB0cnVlKTsKIAkJCWJyZWFrOwogCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5H RV9VUERBVEU6CkBAIC0xNTk2LDYgKzE2MzYsOSBAQCBwZ291dHB1dF9jaGFuZ2UoTG9naWNhbERl Y29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCWFuY2VzdG9yID0g TlVMTDsKIAl9CiAKKwlpZiAodGFibGVfcmV3cml0ZSkKKwkJUmVsYXRpb25DbG9zZShyZWxhdGlv bik7CisKIAkvKiBDbGVhbnVwICovCiAJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZCk7CiAJTWVt b3J5Q29udGV4dFJlc2V0KGRhdGEtPmNvbnRleHQpOwpAQCAtMTcxNCw2ICsxNzU3LDEzOCBAQCBw Z291dHB1dF9tZXNzYWdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZl clRYTiAqdHhuLAogCU91dHB1dFBsdWdpbldyaXRlKGN0eCwgdHJ1ZSk7CiB9CiAKKy8qCisgKiBT ZW5kIHRoZSBkZWNvZGVkIERETCBvdmVyIHdpcmUuCisgKi8KK3N0YXRpYyB2b2lkCitwZ291dHB1 dF9kZGwoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4s CisJCQkJCVhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCWNvbnN0IGNoYXIgKnByZWZpeCwg T2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCVNpemUgc3osIGNv bnN0IGNoYXIgKm1lc3NhZ2UpCit7CisJUEdPdXRwdXREYXRhICpkYXRhID0gKFBHT3V0cHV0RGF0 YSAqKSBjdHgtPm91dHB1dF9wbHVnaW5fcHJpdmF0ZTsKKwlQR091dHB1dFR4bkRhdGEgKnR4bmRh dGEgPSAoUEdPdXRwdXRUeG5EYXRhICopIHR4bi0+b3V0cHV0X3BsdWdpbl9wcml2YXRlOworCVJl bGF0aW9uCXJlbGF0aW9uID0gTlVMTDsKKwlSZWxhdGlvblN5bmNFbnRyeSAqcmVsZW50cnk7CisK Kwlzd2l0Y2ggKGNtZHR5cGUpCisJeworCQljYXNlIERDVF9UYWJsZURyb3BTdGFydDoKKworCQkJ LyoKKwkJCSAqIE9uIERST1Agc3RhcnQsIGFkZCB0aGUgcmVsaWQgdG8gYSBkZWxldGVkX3JlbGlk IGxpc3QgaWYgdGhlCisJCQkgKiByZWxpZCBpcyBwYXJ0IG9mIGEgcHVibGljYXRpb24gdGhhdCBz dXBwb3J0cyBkZGwgcHVibGljYXRpb24uCisJCQkgKiBXZSBuZWVkIHRoaXMgYmVjYXVzZSBvbiBE Uk9QIGVuZCwgdGhlIHJlbGlkIHdpbGwgbm8gbG9uZ2VyIGJlCisJCQkgKiB2YWxpZC4gTGF0ZXIg b24gRHJvcCBlbmQsIHZlcmlmeSB0aGF0IHRoZSBkcm9wIGlzIGZvciBhIHJlbGlkCisJCQkgKiB0 aGF0IGlzIG9uIHRoZSBkZWxldGVkX3JpZCBsaXN0LCBhbmQgb25seSB0aGVuIHNlbmQgdGhlIGRk bAorCQkJICogbWVzc2FnZS4KKwkJCSAqLworCQkJcmVsYXRpb24gPSBSZWxhdGlvbklkR2V0UmVs YXRpb24ocmVsaWQpOworCisJCQlBc3NlcnQocmVsYXRpb24pOworCQkJcmVsZW50cnkgPSBnZXRf cmVsX3N5bmNfZW50cnkoZGF0YSwgcmVsYXRpb24pOworCisJCQlpZiAocmVsZW50cnktPnB1YmFj dGlvbnMucHViZGRsX3RhYmxlKQorCQkJCWRhdGEtPmRlbGV0ZWRfcmVsaWRzID0gbGFwcGVuZF9v aWQoZGF0YS0+ZGVsZXRlZF9yZWxpZHMsIHJlbGlkKTsKKworCQkJUmVsYXRpb25DbG9zZShyZWxh dGlvbik7CisJCQlyZXR1cm47CisKKwkJY2FzZSBEQ1RfVGFibGVEcm9wRW5kOgorCQkJaWYgKCFs aXN0X21lbWJlcl9vaWQoZGF0YS0+ZGVsZXRlZF9yZWxpZHMsIHJlbGlkKSkKKwkJCQlyZXR1cm47 CisJCQllbHNlCisJCQkJZGF0YS0+ZGVsZXRlZF9yZWxpZHMgPSBsaXN0X2RlbGV0ZV9vaWQoZGF0 YS0+ZGVsZXRlZF9yZWxpZHMsIHJlbGlkKTsKKwkJCWJyZWFrOworCisJCWNhc2UgRENUX1RhYmxl QWx0ZXI6CisKKwkJCS8qCisJCQkgKiBGb3IgdGFibGUgcmV3cml0ZSBkZGwsIHdlIGZpcnN0IHNl bmQgdGhlIG9yaWdpbmFsIGRkbCBtZXNzYWdlCisJCQkgKiB0byBzdWJzY3JpYmVyLCB0aGVuIGNv bnZlcnQgdGhlIHVwY29taW5nIHJld3JpdGUgSU5TRVJUIHRvCisJCQkgKiBVUERBVEUgYW5kIHNl bmQgdGhlbSB0byBzdWJzY3JpYmVyIHNvIHRoYXQgdGhlIGRhdGEgYmV0d2VlbgorCQkJICogcHVi bGlzaGVyIGFuZCBzdWJzY3JpYmVyIGNhbiBhbHdheXMgYmUgY29uc2lzdGVudC4KKwkJCSAqCisJ CQkgKiBXZSBkbyB0aGlzIHdheSBiZWNhdXNlIG9mIHR3byByZWFzb246CisJCQkgKgorCQkJICog KDEpIFRoZSBkYXRhIGJlZm9yZSB0aGUgcmV3cml0ZSBkZGwgY291bGQgYWxyZWFkeSBiZSBkaWZm ZXJlbnQKKwkJCSAqIGFtb25nIHB1Ymxpc2hlciBhbmQgc3Vic2NyaWJlci4gVG8gbWFrZSBzdXJl IHRoZSBleHRyYSBkYXRhIGluCisJCQkgKiBzdWJzY3JpYmVyIHdoaWNoIGRvZXNuJ3QgZXhpc3Qg aW4gcHVibGlzaGVyIGFsc28gZ2V0IHJld3JpdHRlbiwKKwkJCSAqIHdlIG5lZWQgdG8gbGV0IHRo ZSBzdWJzY3JpYmVyIGV4ZWN1dGUgdGhlIG9yaWdpbmFsIHJld3JpdGUgZGRsCisJCQkgKiB0byBy ZXdyaXRlIGFsbCB0aGUgZGF0YSBhdCBmaXJzdC4KKwkJCSAqCisJCQkgKiAoMikgdGhlIGRhdGEg YWZ0ZXIgZXhlY3V0aW5nIHJld3JpdGUgZGRsIGNvdWxkIGJlIGRpZmZlcmVudAorCQkJICogYW1v bmcgcHVibGlzaGVyIGFuZCBzdWJzY3JpYmVyKGR1ZSB0byBkaWZmZXJlbnQKKwkJCSAqIGZ1bmN0 aW9ucy9vcGVyYXRvcnMgdXNlZCBkdXJpbmcgcmV3cml0ZSksIHNvIHdlIG5lZWQgdG8KKwkJCSAq IHJlcGxpY2F0ZSB0aGUgcmV3cml0ZSBVUERBVEVzIHRvIGtlZXAgdGhlIGRhdGEgY29uc2lzdGVu dC4KKwkJCSAqCisJCQkgKiBUTyBJTVBST1ZFOiBXZSBjb3VsZCBpbXByb3ZlIHRoaXMgYnkgbGV0 dGluZyB0aGUgc3Vic2NyaWJlcgorCQkJICogb25seSByZXdyaXRlIHRoZSBleHRyYSBkYXRhIGlu c3RlYWQgb2YgZG9pbmcgZnVsbHkgcmV3cml0ZSBhbmQKKwkJCSAqIHVzZSB0aGUgdXBjb21pbmcg cmV3cml0ZSBVUERBVEVzIHRvIHJld3JpdGUgdGhlIHJlc3QgZGF0YS4KKwkJCSAqIEJlc2lkZXMs IHdlIG1heSBub3QgbmVlZCB0byBzZW5kIHJld3JpdGUgY2hhbmdlcyBmb3IgYWxsIHR5cGUKKwkJ CSAqIG9mIHJld3JpdGUgZGRsLCBmb3IgZXhhbXBsZSwgaXQgc2VlbXMgZmluZSB0byBza2lwIHNl bmRpbmcKKwkJCSAqIHJld3JpdGUgY2hhbmdlcyBmb3IgQUxURVIgVEFCTEUgU0VUIExPR0dFRCBh cyB0aGUgZGF0YSBpbiB0aGUKKwkJCSAqIHRhYmxlIGRvZXNuJ3QgYWN0dWFsbHkgYmUgY2hhbmdl ZC4KKwkJCSAqLworCQkJcmVsYXRpb24gPSBSZWxhdGlvbklkR2V0UmVsYXRpb24ocmVsaWQpOwor CQkJQXNzZXJ0KHJlbGF0aW9uKTsKKworCQkJcmVsZW50cnkgPSBnZXRfcmVsX3N5bmNfZW50cnko ZGF0YSwgcmVsYXRpb24pOworCisJCQkvKgorCQkJICogU2tpcCBzZW5kaW5nIHRoaXMgZGRsIGlm IHdlIGRvbid0IHB1Ymxpc2ggZGRsIG1lc3NhZ2Ugb3IgdGhlCisJCQkgKiBkZGwgbmVlZCB0byBi ZSBwdWJsaXNoZWQgdmlhIGl0cyByb290IHJlbGF0aW9uLgorCQkJICovCisJCQlpZiAoIXJlbGVu dHJ5LT5wdWJhY3Rpb25zLnB1YmRkbF90YWJsZSB8fAorCQkJCXJlbGVudHJ5LT5wdWJsaXNoX2Fz X3JlbGlkICE9IHJlbGlkKQorCQkJeworCQkJCVJlbGF0aW9uQ2xvc2UocmVsYXRpb24pOworCQkJ CXJldHVybjsKKwkJCX0KKworCQkJYnJlYWs7CisKKwkJY2FzZSBEQ1RfU2ltcGxlQ21kOgorCQkJ cmVsYXRpb24gPSBSZWxhdGlvbklkR2V0UmVsYXRpb24ocmVsaWQpOworCisJCQlpZiAocmVsYXRp b24gPT0gTlVMTCkKKwkJCQlicmVhazsKKworCQkJcmVsZW50cnkgPSBnZXRfcmVsX3N5bmNfZW50 cnkoZGF0YSwgcmVsYXRpb24pOworCisJCQlpZiAoIXJlbGVudHJ5LT5wdWJhY3Rpb25zLnB1YmRk bF90YWJsZSkKKwkJCXsKKwkJCQlSZWxhdGlvbkNsb3NlKHJlbGF0aW9uKTsKKwkJCQlyZXR1cm47 CisJCQl9CisKKwkJCWJyZWFrOworCisJCWNhc2UgRENUX09iamVjdERyb3A6CisJCQkvKiBkbyBu b3RoaW5nICovCisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVuc3Vw cG9ydGVkIHR5cGUgJWQiLCBjbWR0eXBlKTsKKwkJCWJyZWFrOworCX0KKworCS8qIFNlbmQgQkVH SU4gaWYgd2UgaGF2ZW4ndCB5ZXQgKi8KKwlpZiAodHhuZGF0YSAmJiAhdHhuZGF0YS0+c2VudF9i ZWdpbl90eG4pCisJCXBnb3V0cHV0X3NlbmRfYmVnaW4oY3R4LCB0eG4pOworCisJT3V0cHV0UGx1 Z2luUHJlcGFyZVdyaXRlKGN0eCwgdHJ1ZSk7CisJbG9naWNhbHJlcF93cml0ZV9kZGwoY3R4LT5v dXQsCisJCQkJCQkJCW1lc3NhZ2VfbHNuLAorCQkJCQkJCQlwcmVmaXgsCisJCQkJCQkJCXN6LAor CQkJCQkJCQltZXNzYWdlKTsKKwlPdXRwdXRQbHVnaW5Xcml0ZShjdHgsIHRydWUpOworCisJaWYg KHJlbGF0aW9uKQorCQlSZWxhdGlvbkNsb3NlKHJlbGF0aW9uKTsKK30KKwogLyoKICAqIFJldHVy biB0cnVlIGlmIHRoZSBkYXRhIGlzIGFzc29jaWF0ZWQgd2l0aCBhbiBvcmlnaW4gYW5kIHRoZSB1 c2VyIGhhcwogICogcmVxdWVzdGVkIHRoZSBjaGFuZ2VzIHRoYXQgZG9uJ3QgaGF2ZSBhbiBvcmln aW4sIGZhbHNlIG90aGVyd2lzZS4KQEAgLTIwMTAsNyArMjE4NSw4IEBAIGdldF9yZWxfc3luY19l bnRyeShQR091dHB1dERhdGEgKmRhdGEsIFJlbGF0aW9uIHJlbGF0aW9uKQogCQllbnRyeS0+c2No ZW1hX3NlbnQgPSBmYWxzZTsKIAkJZW50cnktPnN0cmVhbWVkX3R4bnMgPSBOSUw7CiAJCWVudHJ5 LT5wdWJhY3Rpb25zLnB1Ymluc2VydCA9IGVudHJ5LT5wdWJhY3Rpb25zLnB1YnVwZGF0ZSA9Ci0J CQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZWxldGUgPSBlbnRyeS0+cHViYWN0aW9ucy5wdWJ0cnVu Y2F0ZSA9IGZhbHNlOworCQkJZW50cnktPnB1YmFjdGlvbnMucHViZGVsZXRlID0gZW50cnktPnB1 YmFjdGlvbnMucHVidHJ1bmNhdGUgPQorCQkJZW50cnktPnB1YmFjdGlvbnMucHViZGRsX2FsbCA9 IGVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbF90YWJsZSA9IGZhbHNlOwogCQllbnRyeS0+bmV3X3Ns b3QgPSBOVUxMOwogCQllbnRyeS0+b2xkX3Nsb3QgPSBOVUxMOwogCQltZW1zZXQoZW50cnktPmV4 cHJzdGF0ZSwgMCwgc2l6ZW9mKGVudHJ5LT5leHByc3RhdGUpKTsKQEAgLTIwNjgsNiArMjI0NCw4 IEBAIGdldF9yZWxfc3luY19lbnRyeShQR091dHB1dERhdGEgKmRhdGEsIFJlbGF0aW9uIHJlbGF0 aW9uKQogCQllbnRyeS0+cHViYWN0aW9ucy5wdWJ1cGRhdGUgPSBmYWxzZTsKIAkJZW50cnktPnB1 YmFjdGlvbnMucHViZGVsZXRlID0gZmFsc2U7CiAJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YnRydW5j YXRlID0gZmFsc2U7CisJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbF9hbGwgPSBmYWxzZTsKKwkJ ZW50cnktPnB1YmFjdGlvbnMucHViZGRsX3RhYmxlID0gZmFsc2U7CiAKIAkJLyoKIAkJICogVHVw bGUgc2xvdHMgY2xlYW51cHMuIChXaWxsIGJlIHJlYnVpbHQgbGF0ZXIgaWYgbmVlZGVkKS4KQEAg LTIxODEsNiArMjM1OSw4IEBAIGdldF9yZWxfc3luY19lbnRyeShQR091dHB1dERhdGEgKmRhdGEs IFJlbGF0aW9uIHJlbGF0aW9uKQogCQkJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YnVwZGF0ZSB8PSBw dWItPnB1YmFjdGlvbnMucHVidXBkYXRlOwogCQkJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YmRlbGV0 ZSB8PSBwdWItPnB1YmFjdGlvbnMucHViZGVsZXRlOwogCQkJCWVudHJ5LT5wdWJhY3Rpb25zLnB1 YnRydW5jYXRlIHw9IHB1Yi0+cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZTsKKwkJCQllbnRyeS0+cHVi YWN0aW9ucy5wdWJkZGxfYWxsIHw9IHB1Yi0+cHViYWN0aW9ucy5wdWJkZGxfYWxsOworCQkJCWVu dHJ5LT5wdWJhY3Rpb25zLnB1YmRkbF90YWJsZSB8PSBwdWItPnB1YmFjdGlvbnMucHViZGRsX3Rh YmxlOwogCiAJCQkJLyoKIAkJCQkgKiBXZSB3YW50IHRvIHB1Ymxpc2ggdGhlIGNoYW5nZXMgYXMg dGhlIHRvcC1tb3N0IGFuY2VzdG9yCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC90Y29wL2NtZHRh Zy5jIGIvc3JjL2JhY2tlbmQvdGNvcC9jbWR0YWcuYwppbmRleCA0YmQ3MTNhMGI0Li5jZTA5YzVm MjMzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC90Y29wL2NtZHRhZy5jCisrKyBiL3NyYy9iYWNr ZW5kL3Rjb3AvY21kdGFnLmMKQEAgLTI2LDEwICsyNiwxMSBAQCB0eXBlZGVmIHN0cnVjdCBDb21t YW5kVGFnQmVoYXZpb3IKIAljb25zdCBib29sCXRhYmxlX3Jld3JpdGVfb2s7CiAJY29uc3QgYm9v bAlkaXNwbGF5X3Jvd2NvdW50OwkvKiBzaG91bGQgdGhlIG51bWJlciBvZiByb3dzIGFmZmVjdGVk IGJlCiAJCQkJCQkJCQkgKiBzaG93biBpbiB0aGUgY29tbWFuZCBjb21wbGV0aW9uIHN0cmluZyAq LworCWNvbnN0IGJvb2wJZGRsX3JlcGxpY2F0aW9uX29rOwogfSBDb21tYW5kVGFnQmVoYXZpb3I7 CiAKLSNkZWZpbmUgUEdfQ01EVEFHKHRhZywgbmFtZSwgZXZ0cmdvaywgcndyb2ssIHJvd2NudCkg XAotCXsgbmFtZSwgKHVpbnQ4KSAoc2l6ZW9mKG5hbWUpIC0gMSksIGV2dHJnb2ssIHJ3cm9rLCBy b3djbnQgfSwKKyNkZWZpbmUgUEdfQ01EVEFHKHRhZywgbmFtZSwgZXZ0cmdvaywgcndyb2ssIHJv d2NudCwgZGRscmVwbG9rKSBcCisJeyBuYW1lLCAodWludDgpIChzaXplb2YobmFtZSkgLSAxKSwg ZXZ0cmdvaywgcndyb2ssIHJvd2NudCwgZGRscmVwbG9rIH0sCiAKIHN0YXRpYyBjb25zdCBDb21t YW5kVGFnQmVoYXZpb3IgdGFnX2JlaGF2aW9yW0NPTU1BTkRfVEFHX05FWFRUQUddID0gewogI2lu Y2x1ZGUgInRjb3AvY21kdGFnbGlzdC5oIgpAQCAtNTcsNiArNTgsMjEgQEAgR2V0Q29tbWFuZFRh Z05hbWVBbmRMZW4oQ29tbWFuZFRhZyBjb21tYW5kVGFnLCBTaXplICpsZW4pCiAJcmV0dXJuIHRh Z19iZWhhdmlvcltjb21tYW5kVGFnXS5uYW1lOwogfQogCitDb21tYW5kVGFnICoKK0dldENvbW1h bmRUYWdzRm9yRERMUmVwbChpbnQgKm5jb21tYW5kcykKK3sKKwlDb21tYW5kVGFnICpkZGxyZXBs X2NvbW1hbmRzID0gcGFsbG9jMChDT01NQU5EX1RBR19ORVhUVEFHICogc2l6ZW9mKENvbW1hbmRU YWcpKTsKKwkqbmNvbW1hbmRzID0gMDsKKworCWZvcihpbnQgaSA9IDA7IGkgPCBDT01NQU5EX1RB R19ORVhUVEFHOyBpKyspCisJeworCQlpZiAodGFnX2JlaGF2aW9yW2ldLmRkbF9yZXBsaWNhdGlv bl9vaykKKwkJCWRkbHJlcGxfY29tbWFuZHNbKCpuY29tbWFuZHMpKytdID0gKENvbW1hbmRUYWcp IGk7CisJfQorCisJcmV0dXJuIGRkbHJlcGxfY29tbWFuZHM7Cit9CisKIGJvb2wKIGNvbW1hbmRf dGFnX2Rpc3BsYXlfcm93Y291bnQoQ29tbWFuZFRhZyBjb21tYW5kVGFnKQogewpAQCAtNzUsNiAr OTEsMTIgQEAgY29tbWFuZF90YWdfdGFibGVfcmV3cml0ZV9vayhDb21tYW5kVGFnIGNvbW1hbmRU YWcpCiAJcmV0dXJuIHRhZ19iZWhhdmlvcltjb21tYW5kVGFnXS50YWJsZV9yZXdyaXRlX29rOwog fQogCitib29sCitjb21tYW5kX3RhZ19kZGxfcmVwbGljYXRpb25fb2soQ29tbWFuZFRhZyBjb21t YW5kVGFnKQoreworCXJldHVybiB0YWdfYmVoYXZpb3JbY29tbWFuZFRhZ10uZGRsX3JlcGxpY2F0 aW9uX29rOworfQorCiAvKgogICogU2VhcmNoIENvbW1hbmRUYWcgYnkgbmFtZQogICoKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jIGIvc3JjL2JhY2tlbmQvdGNvcC91dGls aXR5LmMKaW5kZXggMWU4M2NmZTM5My4uMmJmYjFhNmNjOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvdGNvcC91dGlsaXR5LmMKKysrIGIvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMKQEAgLTE2 NjYsOCArMTY2NiwxMSBAQCBQcm9jZXNzVXRpbGl0eVNsb3coUGFyc2VTdGF0ZSAqcHN0YXRlLAog CQkJCWJyZWFrOwogCiAJCQljYXNlIFRfQ3JlYXRlVGFibGVBc1N0bXQ6CisJCQkJRXZlbnRUcmln Z2VyVGFibGVJbml0V3JpdGVTdGFydChwYXJzZXRyZWUpOwogCQkJCWFkZHJlc3MgPSBFeGVjQ3Jl YXRlVGFibGVBcyhwc3RhdGUsIChDcmVhdGVUYWJsZUFzU3RtdCAqKSBwYXJzZXRyZWUsCiAJCQkJ CQkJCQkJCXBhcmFtcywgcXVlcnlFbnYsIHFjKTsKKwkJCQlFdmVudFRyaWdnZXJUYWJsZUluaXRX cml0ZUVuZChhZGRyZXNzKTsKKwkJCQljb21tYW5kQ29sbGVjdGVkID0gdHJ1ZTsKIAkJCQlicmVh azsKIAogCQkJY2FzZSBUX1JlZnJlc2hNYXRWaWV3U3RtdDoKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3V0aWxzL2NhY2hlL2V2dGNhY2hlLmMgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9ldnRj YWNoZS5jCmluZGV4IDFmNWU3ZWI0YzYuLmYyYTlmNWRjYzIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3V0aWxzL2NhY2hlL2V2dGNhY2hlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUv ZXZ0Y2FjaGUuYwpAQCAtMTY3LDYgKzE2Nyw4IEBAIEJ1aWxkRXZlbnRUcmlnZ2VyQ2FjaGUodm9p ZCkKIAkJCWV2ZW50ID0gRVZUX1NRTERyb3A7CiAJCWVsc2UgaWYgKHN0cmNtcChldnRldmVudCwg InRhYmxlX3Jld3JpdGUiKSA9PSAwKQogCQkJZXZlbnQgPSBFVlRfVGFibGVSZXdyaXRlOworCQll bHNlIGlmIChzdHJjbXAoZXZ0ZXZlbnQsICJ0YWJsZV9pbml0X3dyaXRlIikgPT0gMCkKKwkJCWV2 ZW50ID0gRVZUX1RhYmxlSW5pdFdyaXRlOwogCQllbHNlCiAJCQljb250aW51ZTsKIApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYyBiL3NyYy9iYWNrZW5kL3V0 aWxzL2NhY2hlL3JlbGNhY2hlLmMKaW5kZXggZDE3MWNmY2YyZi4uNWY4ZmIwNDRmYiAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYworKysgYi9zcmMvYmFja2Vu ZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jCkBAIC01NjkwLDYgKzU2OTAsOCBAQCBSZWxhdGlvbkJ1 aWxkUHVibGljYXRpb25EZXNjKFJlbGF0aW9uIHJlbGF0aW9uLCBQdWJsaWNhdGlvbkRlc2MgKnB1 YmRlc2MpCiAJCXB1YmRlc2MtPnB1YmFjdGlvbnMucHVidXBkYXRlIHw9IHB1YmZvcm0tPnB1YnVw ZGF0ZTsKIAkJcHViZGVzYy0+cHViYWN0aW9ucy5wdWJkZWxldGUgfD0gcHViZm9ybS0+cHViZGVs ZXRlOwogCQlwdWJkZXNjLT5wdWJhY3Rpb25zLnB1YnRydW5jYXRlIHw9IHB1YmZvcm0tPnB1YnRy dW5jYXRlOworCQlwdWJkZXNjLT5wdWJhY3Rpb25zLnB1YmRkbF9hbGwgfD0gcHViZm9ybS0+cHVi ZGRsX2FsbDsKKwkJcHViZGVzYy0+cHViYWN0aW9ucy5wdWJkZGxfdGFibGUgfD0gcHViZm9ybS0+ cHViZGRsX3RhYmxlOwogCiAJCS8qCiAJCSAqIENoZWNrIGlmIGFsbCBjb2x1bW5zIHJlZmVyZW5j ZWQgaW4gdGhlIGZpbHRlciBleHByZXNzaW9uIGFyZSBwYXJ0CmRpZmYgLS1naXQgYS9zcmMvYmlu L3BnX2R1bXAvcGdfZHVtcC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwppbmRleCAzMDcx OGRkNzU4Li4zNDZkMjI5NDc2IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5j CisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKQEAgLTM5NDksNiArMzk0OSw4IEBAIGdl dFB1YmxpY2F0aW9ucyhBcmNoaXZlICpmb3V0LCBpbnQgKm51bVB1YmxpY2F0aW9ucykKIAlpbnQJ CQlpX3B1YnVwZGF0ZTsKIAlpbnQJCQlpX3B1YmRlbGV0ZTsKIAlpbnQJCQlpX3B1YnRydW5jYXRl OworCWludAkJCWlfcHViZGRsX2FsbDsKKwlpbnQJCQlpX3B1YmRkbF90YWJsZTsKIAlpbnQJCQlp X3B1YnZpYXJvb3Q7CiAJaW50CQkJaSwKIAkJCQludHVwczsKQEAgLTM5NjQsMjMgKzM5NjYsMjMg QEAgZ2V0UHVibGljYXRpb25zKEFyY2hpdmUgKmZvdXQsIGludCAqbnVtUHVibGljYXRpb25zKQog CXJlc2V0UFFFeHBCdWZmZXIocXVlcnkpOwogCiAJLyogR2V0IHRoZSBwdWJsaWNhdGlvbnMuICov Ci0JaWYgKGZvdXQtPnJlbW90ZVZlcnNpb24gPj0gMTMwMDAwKQorCWlmIChmb3V0LT5yZW1vdGVW ZXJzaW9uID49IDE2MDAwMCkKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksCiAJCQkJCQkJ ICJTRUxFQ1QgcC50YWJsZW9pZCwgcC5vaWQsIHAucHVibmFtZSwgIgogCQkJCQkJCSAicC5wdWJv d25lciwgIgotCQkJCQkJCSAicC5wdWJhbGx0YWJsZXMsIHAucHViaW5zZXJ0LCBwLnB1YnVwZGF0 ZSwgcC5wdWJkZWxldGUsIHAucHVidHJ1bmNhdGUsIHAucHVidmlhcm9vdCAiCisJCQkJCQkJICJw LnB1YmFsbHRhYmxlcywgcC5wdWJpbnNlcnQsIHAucHVidXBkYXRlLCBwLnB1YmRlbGV0ZSwgcC5w dWJ0cnVuY2F0ZSwgcC5wdWJkZGxfYWxsLCBwLnB1YmRkbF90YWJsZSwgcC5wdWJ2aWFyb290ICIK IAkJCQkJCQkgIkZST00gcGdfcHVibGljYXRpb24gcCIpOwogCWVsc2UgaWYgKGZvdXQtPnJlbW90 ZVZlcnNpb24gPj0gMTEwMDAwKQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwKIAkJCQkJ CQkgIlNFTEVDVCBwLnRhYmxlb2lkLCBwLm9pZCwgcC5wdWJuYW1lLCAiCiAJCQkJCQkJICJwLnB1 Ym93bmVyLCAiCi0JCQkJCQkJICJwLnB1YmFsbHRhYmxlcywgcC5wdWJpbnNlcnQsIHAucHVidXBk YXRlLCBwLnB1YmRlbGV0ZSwgcC5wdWJ0cnVuY2F0ZSwgZmFsc2UgQVMgcHVidmlhcm9vdCAiCisJ CQkJCQkJICJwLnB1YmFsbHRhYmxlcywgcC5wdWJpbnNlcnQsIHAucHVidXBkYXRlLCBwLnB1YmRl bGV0ZSwgcC5wdWJ0cnVuY2F0ZSwgZmFsc2UgYXMgcC5wdWJkZGxfYWxsLCBmYWxzZSBhcyBwLnB1 YmRkbF90YWJsZSwgZmFsc2UgQVMgcHVidmlhcm9vdCAiCiAJCQkJCQkJICJGUk9NIHBnX3B1Ymxp Y2F0aW9uIHAiKTsKIAllbHNlCiAJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LAogCQkJCQkJ CSAiU0VMRUNUIHAudGFibGVvaWQsIHAub2lkLCBwLnB1Ym5hbWUsICIKIAkJCQkJCQkgInAucHVi b3duZXIsICIKLQkJCQkJCQkgInAucHViYWxsdGFibGVzLCBwLnB1Ymluc2VydCwgcC5wdWJ1cGRh dGUsIHAucHViZGVsZXRlLCBmYWxzZSBBUyBwdWJ0cnVuY2F0ZSwgZmFsc2UgQVMgcHVidmlhcm9v dCAiCisJCQkJCQkJICJwLnB1YmFsbHRhYmxlcywgcC5wdWJpbnNlcnQsIHAucHVidXBkYXRlLCBw LnB1YmRlbGV0ZSwgZmFsc2UgQVMgcHVidHJ1bmNhdGUsIGZhbHNlIGFzIHAucHViZGRsX2FsbCwg ZmFsc2UgYXMgcC5wdWJkZGxfdGFibGUsIGZhbHNlIEFTIHB1YnZpYXJvb3QgIgogCQkJCQkJCSAi RlJPTSBwZ19wdWJsaWNhdGlvbiBwIik7CiAKIAlyZXMgPSBFeGVjdXRlU3FsUXVlcnkoZm91dCwg cXVlcnktPmRhdGEsIFBHUkVTX1RVUExFU19PSyk7CkBAIC0zOTk2LDYgKzM5OTgsOCBAQCBnZXRQ dWJsaWNhdGlvbnMoQXJjaGl2ZSAqZm91dCwgaW50ICpudW1QdWJsaWNhdGlvbnMpCiAJaV9wdWJ1 cGRhdGUgPSBQUWZudW1iZXIocmVzLCAicHVidXBkYXRlIik7CiAJaV9wdWJkZWxldGUgPSBQUWZu dW1iZXIocmVzLCAicHViZGVsZXRlIik7CiAJaV9wdWJ0cnVuY2F0ZSA9IFBRZm51bWJlcihyZXMs ICJwdWJ0cnVuY2F0ZSIpOworCWlfcHViZGRsX2FsbCA9IFBRZm51bWJlcihyZXMsICJwdWJkZGxf YWxsIik7CisJaV9wdWJkZGxfdGFibGUgPSBQUWZudW1iZXIocmVzLCAicHViZGRsX3RhYmxlIik7 CiAJaV9wdWJ2aWFyb290ID0gUFFmbnVtYmVyKHJlcywgInB1YnZpYXJvb3QiKTsKIAogCXB1Ymlu Zm8gPSBwZ19tYWxsb2MobnR1cHMgKiBzaXplb2YoUHVibGljYXRpb25JbmZvKSk7CkBAIC00MDE5 LDYgKzQwMjMsMTAgQEAgZ2V0UHVibGljYXRpb25zKEFyY2hpdmUgKmZvdXQsIGludCAqbnVtUHVi bGljYXRpb25zKQogCQkJKHN0cmNtcChQUWdldHZhbHVlKHJlcywgaSwgaV9wdWJkZWxldGUpLCAi dCIpID09IDApOwogCQlwdWJpbmZvW2ldLnB1YnRydW5jYXRlID0KIAkJCShzdHJjbXAoUFFnZXR2 YWx1ZShyZXMsIGksIGlfcHVidHJ1bmNhdGUpLCAidCIpID09IDApOworCQlwdWJpbmZvW2ldLnB1 YmRkbF9hbGwgPQorCQkJKHN0cmNtcChQUWdldHZhbHVlKHJlcywgaSwgaV9wdWJkZGxfYWxsKSwg InQiKSA9PSAwKTsKKwkJcHViaW5mb1tpXS5wdWJkZGxfdGFibGUgPQorCQkJKHN0cmNtcChQUWdl dHZhbHVlKHJlcywgaSwgaV9wdWJkZGxfdGFibGUpLCAidCIpID09IDApOwogCQlwdWJpbmZvW2ld LnB1YnZpYXJvb3QgPQogCQkJKHN0cmNtcChQUWdldHZhbHVlKHJlcywgaSwgaV9wdWJ2aWFyb290 KSwgInQiKSA9PSAwKTsKIApAQCAtNDA5OCw3ICs0MTA2LDI5IEBAIGR1bXBQdWJsaWNhdGlvbihB cmNoaXZlICpmb3V0LCBjb25zdCBQdWJsaWNhdGlvbkluZm8gKnB1YmluZm8pCiAJCWZpcnN0ID0g ZmFsc2U7CiAJfQogCi0JYXBwZW5kUFFFeHBCdWZmZXJDaGFyKHF1ZXJ5LCAnXCcnKTsKKwlhcHBl bmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIiciKTsKKworCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1 ZXJ5LCAiLCBkZGwgPSAnIik7CisJZmlyc3QgPSB0cnVlOworCWlmIChwdWJpbmZvLT5wdWJkZGxf YWxsKQorCXsKKwkJaWYgKCFmaXJzdCkKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LCAi LCAiKTsKKworCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgImFsbCIpOworCQlmaXJzdCA9 IGZhbHNlOworCX0KKworCWlmIChwdWJpbmZvLT5wdWJkZGxfdGFibGUpCisJeworCQlpZiAoIWZp cnN0KQorCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICIsICIpOworCisJCWFwcGVuZFBR RXhwQnVmZmVyU3RyKHF1ZXJ5LCAidGFibGUiKTsKKwkJZmlyc3QgPSBmYWxzZTsKKwl9CisKKwlh cHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIiciKTsKIAogCWlmIChwdWJpbmZvLT5wdWJ2aWFy b290KQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIiwgcHVibGlzaF92aWFfcGFydGl0 aW9uX3Jvb3QgPSB0cnVlIik7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5o IGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaAppbmRleCBlN2NiZDhkN2VkLi5lMzI2NzQwZGEz IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oCisrKyBiL3NyYy9iaW4vcGdf ZHVtcC9wZ19kdW1wLmgKQEAgLTYxOSw2ICs2MTksOCBAQCB0eXBlZGVmIHN0cnVjdCBfUHVibGlj YXRpb25JbmZvCiAJYm9vbAkJcHVidXBkYXRlOwogCWJvb2wJCXB1YmRlbGV0ZTsKIAlib29sCQlw dWJ0cnVuY2F0ZTsKKwlib29sCQlwdWJkZGxfYWxsOworCWJvb2wJCXB1YmRkbF90YWJsZTsKIAli b29sCQlwdWJ2aWFyb290OwogfSBQdWJsaWNhdGlvbkluZm87CiAKZGlmZiAtLWdpdCBhL3NyYy9i aW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsIGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1 bXAucGwKaW5kZXggMmVlZWYyYTQ3OC4uMTZiNGRhZjRlYSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9w Z19kdW1wL3QvMDAyX3BnX2R1bXAucGwKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1 bXAucGwKQEAgLTI0ODQsNyArMjQ4NCw3IEBAIG15ICV0ZXN0cyA9ICgKIAkJY3JlYXRlX29yZGVy ID0+IDUwLAogCQljcmVhdGVfc3FsICAgPT4gJ0NSRUFURSBQVUJMSUNBVElPTiBwdWIxOycsCiAJ CXJlZ2V4cCAgICAgICA9PiBxci9eCi0JCQlcUUNSRUFURSBQVUJMSUNBVElPTiBwdWIxIFdJVEgg KHB1Ymxpc2ggPSAnaW5zZXJ0LCB1cGRhdGUsIGRlbGV0ZSwgdHJ1bmNhdGUnKTtcRQorCQkJXFFD UkVBVEUgUFVCTElDQVRJT04gcHViMSBXSVRIIChwdWJsaXNoID0gJ2luc2VydCwgdXBkYXRlLCBk ZWxldGUsIHRydW5jYXRlJywgZGRsID0gJycpO1xFCiAJCQkveG0sCiAJCWxpa2UgPT4geyAlZnVs bF9ydW5zLCBzZWN0aW9uX3Bvc3RfZGF0YSA9PiAxLCB9LAogCX0sCkBAIC0yNDkzLDkgKzI0OTMs OSBAQCBteSAldGVzdHMgPSAoCiAJCWNyZWF0ZV9vcmRlciA9PiA1MCwKIAkJY3JlYXRlX3NxbCAg ID0+ICdDUkVBVEUgUFVCTElDQVRJT04gcHViMgogCQkJCQkJIEZPUiBBTEwgVEFCTEVTCi0JCQkJ CQkgV0lUSCAocHVibGlzaCA9IFwnXCcpOycsCisJCQkJCQkgV0lUSCAocHVibGlzaCA9IFwnXCcs IGRkbCA9IFwnXCcpOycsCiAJCXJlZ2V4cCA9PiBxci9eCi0JCQlcUUNSRUFURSBQVUJMSUNBVElP TiBwdWIyIEZPUiBBTEwgVEFCTEVTIFdJVEggKHB1Ymxpc2ggPSAnJyk7XEUKKwkJCVxRQ1JFQVRF IFBVQkxJQ0FUSU9OIHB1YjIgRk9SIEFMTCBUQUJMRVMgV0lUSCAocHVibGlzaCA9ICcnLCBkZGwg PSAnJyk7XEUKIAkJCS94bSwKIAkJbGlrZSA9PiB7ICVmdWxsX3J1bnMsIHNlY3Rpb25fcG9zdF9k YXRhID0+IDEsIH0sCiAJfSwKQEAgLTI1MDQsNyArMjUwNCw3IEBAIG15ICV0ZXN0cyA9ICgKIAkJ Y3JlYXRlX29yZGVyID0+IDUwLAogCQljcmVhdGVfc3FsICAgPT4gJ0NSRUFURSBQVUJMSUNBVElP TiBwdWIzOycsCiAJCXJlZ2V4cCAgICAgICA9PiBxci9eCi0JCQlcUUNSRUFURSBQVUJMSUNBVElP TiBwdWIzIFdJVEggKHB1Ymxpc2ggPSAnaW5zZXJ0LCB1cGRhdGUsIGRlbGV0ZSwgdHJ1bmNhdGUn KTtcRQorCQkJXFFDUkVBVEUgUFVCTElDQVRJT04gcHViMyBXSVRIIChwdWJsaXNoID0gJ2luc2Vy dCwgdXBkYXRlLCBkZWxldGUsIHRydW5jYXRlJywgZGRsID0gJycpO1xFCiAJCQkveG0sCiAJCWxp a2UgPT4geyAlZnVsbF9ydW5zLCBzZWN0aW9uX3Bvc3RfZGF0YSA9PiAxLCB9LAogCX0sCkBAIC0y NTEzLDcgKzI1MTMsNyBAQCBteSAldGVzdHMgPSAoCiAJCWNyZWF0ZV9vcmRlciA9PiA1MCwKIAkJ Y3JlYXRlX3NxbCAgID0+ICdDUkVBVEUgUFVCTElDQVRJT04gcHViNDsnLAogCQlyZWdleHAgICAg ICAgPT4gcXIvXgotCQkJXFFDUkVBVEUgUFVCTElDQVRJT04gcHViNCBXSVRIIChwdWJsaXNoID0g J2luc2VydCwgdXBkYXRlLCBkZWxldGUsIHRydW5jYXRlJyk7XEUKKwkJCVxRQ1JFQVRFIFBVQkxJ Q0FUSU9OIHB1YjQgV0lUSCAocHVibGlzaCA9ICdpbnNlcnQsIHVwZGF0ZSwgZGVsZXRlLCB0cnVu Y2F0ZScsIGRkbCA9ICcnKTtcRQogCQkJL3htLAogCQlsaWtlID0+IHsgJWZ1bGxfcnVucywgc2Vj dGlvbl9wb3N0X2RhdGEgPT4gMSwgfSwKIAl9LApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wc3FsL2Rl c2NyaWJlLmMgYi9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYwppbmRleCBlMjgwYjZmNzZjLi4yYTQ2 YjdjYWIxIDEwMDY0NAotLS0gYS9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYworKysgYi9zcmMvYmlu L3BzcWwvZGVzY3JpYmUuYwpAQCAtNjE2Miw3ICs2MTYyLDcgQEAgbGlzdFB1YmxpY2F0aW9ucyhj b25zdCBjaGFyICpwYXR0ZXJuKQogCVBRRXhwQnVmZmVyRGF0YSBidWY7CiAJUEdyZXN1bHQgICAq cmVzOwogCXByaW50UXVlcnlPcHQgbXlvcHQgPSBwc2V0LnBvcHQ7Ci0Jc3RhdGljIGNvbnN0IGJv b2wgdHJhbnNsYXRlX2NvbHVtbnNbXSA9IHtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFs c2UsIGZhbHNlLCBmYWxzZSwgZmFsc2V9OworCXN0YXRpYyBjb25zdCBib29sIHRyYW5zbGF0ZV9j b2x1bW5zW10gPSB7ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFs c2UsIGZhbHNlLCBmYWxzZSwgZmFsc2V9OwogCiAJaWYgKHBzZXQuc3ZlcnNpb24gPCAxMDAwMDAp CiAJewpAQCAtNjE3OSwxMyArNjE3OSwyMyBAQCBsaXN0UHVibGljYXRpb25zKGNvbnN0IGNoYXIg KnBhdHRlcm4pCiAJcHJpbnRmUFFFeHBCdWZmZXIoJmJ1ZiwKIAkJCQkJICAiU0VMRUNUIHB1Ym5h bWUgQVMgXCIlc1wiLFxuIgogCQkJCQkgICIgIHBnX2NhdGFsb2cucGdfZ2V0X3VzZXJieWlkKHB1 Ym93bmVyKSBBUyBcIiVzXCIsXG4iCi0JCQkJCSAgIiAgcHViYWxsdGFibGVzIEFTIFwiJXNcIixc biIKLQkJCQkJICAiICBwdWJpbnNlcnQgQVMgXCIlc1wiLFxuIgotCQkJCQkgICIgIHB1YnVwZGF0 ZSBBUyBcIiVzXCIsXG4iCi0JCQkJCSAgIiAgcHViZGVsZXRlIEFTIFwiJXNcIiIsCisJCQkJCSAg IiAgcHViYWxsdGFibGVzIEFTIFwiJXNcIiIsCiAJCQkJCSAgZ2V0dGV4dF9ub29wKCJOYW1lIiks CiAJCQkJCSAgZ2V0dGV4dF9ub29wKCJPd25lciIpLAotCQkJCQkgIGdldHRleHRfbm9vcCgiQWxs IHRhYmxlcyIpLAorCQkJCQkgIGdldHRleHRfbm9vcCgiQWxsIHRhYmxlcyIpKTsKKwlpZiAocHNl dC5zdmVyc2lvbiA+PSAxNjAwMDApCisJeworCQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAorCQkJ CQkJICAiLFxuICBwdWJkZGxfYWxsIEFTIFwiJXNcIiIsCisJCQkJCQkgIGdldHRleHRfbm9vcCgi QWxsIERETHMiKSk7CisJCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsCisJCQkJCQkgICIsXG4gIHB1 YmRkbF90YWJsZSBBUyBcIiVzXCIiLAorCQkJCQkJICBnZXR0ZXh0X25vb3AoIlRhYmxlIERETHMi KSk7CisJfQorCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsCisJCQkJCSAgIixcbiAgcHViaW5zZXJ0 IEFTIFwiJXNcIixcbiIKKwkJCQkJICAiICBwdWJ1cGRhdGUgQVMgXCIlc1wiLFxuIgorCQkJCQkg ICIgIHB1YmRlbGV0ZSBBUyBcIiVzXCIiLAogCQkJCQkgIGdldHRleHRfbm9vcCgiSW5zZXJ0cyIp LAogCQkJCQkgIGdldHRleHRfbm9vcCgiVXBkYXRlcyIpLAogCQkJCQkgIGdldHRleHRfbm9vcCgi RGVsZXRlcyIpKTsKQEAgLTYxOTcsNyArNjIwNyw2IEBAIGxpc3RQdWJsaWNhdGlvbnMoY29uc3Qg Y2hhciAqcGF0dGVybikKIAkJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwKIAkJCQkJCSAgIixcbiAg cHVidmlhcm9vdCBBUyBcIiVzXCIiLAogCQkJCQkJICBnZXR0ZXh0X25vb3AoIlZpYSByb290Iikp OwotCiAJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmJ1ZiwKIAkJCQkJCSAiXG5GUk9NIHBnX2NhdGFs b2cucGdfcHVibGljYXRpb25cbiIpOwogCkBAIC02Mjg3LDYgKzYyOTYsNyBAQCBkZXNjcmliZVB1 YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCVBHcmVzdWx0ICAgKnJlczsKIAlib29s CQloYXNfcHVidHJ1bmNhdGU7CiAJYm9vbAkJaGFzX3B1YnZpYXJvb3Q7CisJYm9vbAkJaGFzX3B1 YmRkbDsKIAogCVBRRXhwQnVmZmVyRGF0YSB0aXRsZTsKIAlwcmludFRhYmxlQ29udGVudCBjb250 OwpAQCAtNjMwMywxMyArNjMxMywxOSBAQCBkZXNjcmliZVB1YmxpY2F0aW9ucyhjb25zdCBjaGFy ICpwYXR0ZXJuKQogCiAJaGFzX3B1YnRydW5jYXRlID0gKHBzZXQuc3ZlcnNpb24gPj0gMTEwMDAw KTsKIAloYXNfcHVidmlhcm9vdCA9IChwc2V0LnN2ZXJzaW9uID49IDEzMDAwMCk7CisJaGFzX3B1 YmRkbCA9ICAocHNldC5zdmVyc2lvbiA+PSAxNjAwMDApOwogCiAJaW5pdFBRRXhwQnVmZmVyKCZi dWYpOwogCiAJcHJpbnRmUFFFeHBCdWZmZXIoJmJ1ZiwKIAkJCQkJICAiU0VMRUNUIG9pZCwgcHVi bmFtZSxcbiIKIAkJCQkJICAiICBwZ19jYXRhbG9nLnBnX2dldF91c2VyYnlpZChwdWJvd25lcikg QVMgb3duZXIsXG4iCi0JCQkJCSAgIiAgcHViYWxsdGFibGVzLCBwdWJpbnNlcnQsIHB1YnVwZGF0 ZSwgcHViZGVsZXRlIik7CisJCQkJCSAgIiAgcHViYWxsdGFibGVzIik7CisJaWYgKGhhc19wdWJk ZGwpCisJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZidWYsCisJCQkJCQkJICIsIHB1YmRkbF9hbGws IHB1YmRkbF90YWJsZSIpOworCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZidWYsCisJCQkJCQkgIiwg IHB1Ymluc2VydCwgcHVidXBkYXRlLCBwdWJkZWxldGUiKTsKIAlpZiAoaGFzX3B1YnRydW5jYXRl KQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVmLAogCQkJCQkJCSAiLCBwdWJ0cnVuY2F0ZSIp OwpAQCAtNjM2Nyw2ICs2MzgzLDggQEAgZGVzY3JpYmVQdWJsaWNhdGlvbnMoY29uc3QgY2hhciAq cGF0dGVybikKIAkJCW5jb2xzKys7CiAJCWlmIChoYXNfcHVidmlhcm9vdCkKIAkJCW5jb2xzKys7 CisJCWlmIChoYXNfcHViZGRsKQorCQkJbmNvbHMgKz0gMjsKIAogCQlpbml0UFFFeHBCdWZmZXIo JnRpdGxlKTsKIAkJcHJpbnRmUFFFeHBCdWZmZXIoJnRpdGxlLCBfKCJQdWJsaWNhdGlvbiAlcyIp LCBwdWJuYW1lKTsKQEAgLTYzNzQsNiArNjM5MiwxMSBAQCBkZXNjcmliZVB1YmxpY2F0aW9ucyhj b25zdCBjaGFyICpwYXR0ZXJuKQogCiAJCXByaW50VGFibGVBZGRIZWFkZXIoJmNvbnQsIGdldHRl eHRfbm9vcCgiT3duZXIiKSwgdHJ1ZSwgYWxpZ24pOwogCQlwcmludFRhYmxlQWRkSGVhZGVyKCZj b250LCBnZXR0ZXh0X25vb3AoIkFsbCB0YWJsZXMiKSwgdHJ1ZSwgYWxpZ24pOworCQlpZiAoaGFz X3B1YmRkbCkKKwkJeworCQkJcHJpbnRUYWJsZUFkZEhlYWRlcigmY29udCwgZ2V0dGV4dF9ub29w KCJBbGwgRERMcyIpLCB0cnVlLCBhbGlnbik7CisJCQlwcmludFRhYmxlQWRkSGVhZGVyKCZjb250 LCBnZXR0ZXh0X25vb3AoIlRhYmxlIERETHMiKSwgdHJ1ZSwgYWxpZ24pOworCQl9CiAJCXByaW50 VGFibGVBZGRIZWFkZXIoJmNvbnQsIGdldHRleHRfbm9vcCgiSW5zZXJ0cyIpLCB0cnVlLCBhbGln bik7CiAJCXByaW50VGFibGVBZGRIZWFkZXIoJmNvbnQsIGdldHRleHRfbm9vcCgiVXBkYXRlcyIp LCB0cnVlLCBhbGlnbik7CiAJCXByaW50VGFibGVBZGRIZWFkZXIoJmNvbnQsIGdldHRleHRfbm9v cCgiRGVsZXRlcyIpLCB0cnVlLCBhbGlnbik7CkBAIC02MzkxLDYgKzY0MTQsMTEgQEAgZGVzY3Jp YmVQdWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikKIAkJCXByaW50VGFibGVBZGRDZWxs KCZjb250LCBQUWdldHZhbHVlKHJlcywgaSwgNyksIGZhbHNlLCBmYWxzZSk7CiAJCWlmIChoYXNf cHVidmlhcm9vdCkKIAkJCXByaW50VGFibGVBZGRDZWxsKCZjb250LCBQUWdldHZhbHVlKHJlcywg aSwgOCksIGZhbHNlLCBmYWxzZSk7CisJCWlmIChoYXNfcHViZGRsKQorCQl7CisJCQlwcmludFRh YmxlQWRkQ2VsbCgmY29udCwgUFFnZXR2YWx1ZShyZXMsIGksIDkpLCBmYWxzZSwgZmFsc2UpOwor CQkJcHJpbnRUYWJsZUFkZENlbGwoJmNvbnQsIFBRZ2V0dmFsdWUocmVzLCBpLCAxMCksIGZhbHNl LCBmYWxzZSk7CisJCX0KIAogCQlpZiAoIXB1YmFsbHRhYmxlcykKIAkJewpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdf cHJvYy5kYXQKaW5kZXggZjQ1NmVmYjU5Zi4uNDAxZGFiZTAxYiAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3By b2MuZGF0CkBAIC0xMTkwMSw0ICsxMTkwMSwxNiBAQAogeyBvaWQgPT4gJzQ2NDMnLCBkZXNjciA9 PiAnZXhwYW5kIEpTT04gZm9ybWF0IERETCB0byBhIHBsYWluIERETCBjb21tYW5kJywKICAgcHJv bmFtZSA9PiAnZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQnLCBwcm9yZXR0eXBlID0+ICd0ZXh0 JywKICAgcHJvYXJndHlwZXMgPT4gJ3RleHQnLCBwcm9zcmMgPT4gJ2RkbF9kZXBhcnNlX2V4cGFu ZF9jb21tYW5kJyB9LAoreyBvaWQgPT4gJzQ2NDQnLCBkZXNjciA9PiAndHJpZ2dlciBmb3IgZGRs IGNvbW1hbmQgZGVwYXJzZSBlbmQnLAorICBwcm9uYW1lID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNl X2RkbF9jb21tYW5kX2VuZCcsIHByb3JldHR5cGUgPT4gJ2V2ZW50X3RyaWdnZXInLAorICBwcm9h cmd0eXBlcyA9PiAnJywgcHJvc3JjID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX2RkbF9jb21tYW5k X2VuZCcgfSwKK3sgb2lkID0+ICc0NjQ1JywgZGVzY3IgPT4gJ3RyaWdnZXIgZm9yIGRkbCBjb21t YW5kIGRlcGFyc2Ugc3RhcnQnLAorICBwcm9uYW1lID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX2Rk bF9jb21tYW5kX3N0YXJ0JywgcHJvcmV0dHlwZSA9PiAnZXZlbnRfdHJpZ2dlcicsCisgIHByb2Fy Z3R5cGVzID0+ICcnLCBwcm9zcmMgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2VfZGRsX2NvbW1hbmRf c3RhcnQnIH0sCit7IG9pZCA9PiAnNDY0NicsIGRlc2NyID0+ICd0cmlnZ2VyIGZvciBkZGwgY29t bWFuZCBkZXBhcnNlIHRhYmxlIHJld3JpdGUnLAorICBwcm9uYW1lID0+ICdwdWJsaWNhdGlvbl9k ZXBhcnNlX3RhYmxlX3Jld3JpdGUnLCBwcm9yZXR0eXBlID0+ICdldmVudF90cmlnZ2VyJywKKyAg cHJvYXJndHlwZXMgPT4gJycsIHByb3NyYyA9PiAncHVibGljYXRpb25fZGVwYXJzZV90YWJsZV9y ZXdyaXRlJyB9LAoreyBvaWQgPT4gJzQ2NDcnLCBkZXNjciA9PiAndHJpZ2dlciBmb3IgZGRsIGNv bW1hbmQgZGVwYXJzZSB0YWJsZSBpbml0JywKKyAgcHJvbmFtZSA9PiAncHVibGljYXRpb25fZGVw YXJzZV90YWJsZV9pbml0X3dyaXRlJywgcHJvcmV0dHlwZSA9PiAnZXZlbnRfdHJpZ2dlcicsCisg IHByb2FyZ3R5cGVzID0+ICcnLCBwcm9zcmMgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVf aW5pdF93cml0ZScgfSwKIF0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVi bGljYXRpb24uaCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb24uaAppbmRleCA2 ZWNhYTJhMDFlLi5kNjM2ZGNjZGNlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3Bn X3B1YmxpY2F0aW9uLmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5o CkBAIC01NCw2ICs1NCwxMiBAQCBDQVRBTE9HKHBnX3B1YmxpY2F0aW9uLDYxMDQsUHVibGljYXRp b25SZWxhdGlvbklkKQogCiAJLyogdHJ1ZSBpZiBwYXJ0aXRpb24gY2hhbmdlcyBhcmUgcHVibGlz aGVkIHVzaW5nIHJvb3Qgc2NoZW1hICovCiAJYm9vbAkJcHVidmlhcm9vdDsKKworCS8qIHRydWUg aWYgYWxsIHN1cHBvcnRlZCBkZGxzIGFyZSBwdWJsaXNoZWQgKi8KKwlib29sCQlwdWJkZGxfYWxs OworCisJLyogdHJ1ZSBpZiB0YWJsZSBkZGxzIGFyZSBwdWJsaXNoZWQgKi8KKwlib29sCQlwdWJk ZGxfdGFibGU7CiB9IEZvcm1EYXRhX3BnX3B1YmxpY2F0aW9uOwogCiAvKiAtLS0tLS0tLS0tLS0t LS0tCkBAIC03Miw2ICs3OCw4IEBAIHR5cGVkZWYgc3RydWN0IFB1YmxpY2F0aW9uQWN0aW9ucwog CWJvb2wJCXB1YnVwZGF0ZTsKIAlib29sCQlwdWJkZWxldGU7CiAJYm9vbAkJcHVidHJ1bmNhdGU7 CisJYm9vbAkJcHViZGRsX2FsbDsKKwlib29sCQlwdWJkZGxfdGFibGU7CiB9IFB1YmxpY2F0aW9u QWN0aW9uczsKIAogdHlwZWRlZiBzdHJ1Y3QgUHVibGljYXRpb25EZXNjCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmggYi9zcmMvaW5jbHVkZS9jb21tYW5k cy9ldmVudF90cmlnZ2VyLmgKaW5kZXggNDhjNjVlZjUzYy4uY2JhNGU3MjQ1NSAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oCisrKyBiL3NyYy9pbmNsdWRl L2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaApAQCAtOTQsNiArOTQsMTAgQEAgZXh0ZXJuIHZvaWQg RXZlbnRUcmlnZ2VyRERMQ29tbWFuZEVuZChOb2RlICpwYXJzZXRyZWUpOwogZXh0ZXJuIHZvaWQg RXZlbnRUcmlnZ2VyU1FMRHJvcChOb2RlICpwYXJzZXRyZWUpOwogZXh0ZXJuIHZvaWQgRXZlbnRU cmlnZ2VyVGFibGVSZXdyaXRlKE5vZGUgKnBhcnNldHJlZSwgT2lkIHRhYmxlT2lkLCBpbnQgcmVh c29uKTsKIAorZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGVTdGFydChOb2Rl ICpwYXJzZXRyZWUpOworZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGUoTm9k ZSAqcGFyc2V0cmVlLCBPYmplY3RBZGRyZXNzIGFkZHJlc3MpOworZXh0ZXJuIHZvaWQgRXZlbnRU cmlnZ2VyVGFibGVJbml0V3JpdGVFbmQoT2JqZWN0QWRkcmVzcyBhZGRyZXNzKTsKKwogZXh0ZXJu IGJvb2wgRXZlbnRUcmlnZ2VyQmVnaW5Db21wbGV0ZVF1ZXJ5KHZvaWQpOwogZXh0ZXJuIHZvaWQg RXZlbnRUcmlnZ2VyRW5kQ29tcGxldGVRdWVyeSh2b2lkKTsKIGV4dGVybiBib29sIHRyYWNrRHJv cHBlZE9iamVjdHNOZWVkZWQodm9pZCk7CkBAIC0xMTAsNyArMTE0LDEyIEBAIGV4dGVybiB2b2lk IEV2ZW50VHJpZ2dlckNvbGxlY3RTaW1wbGVDb21tYW5kKE9iamVjdEFkZHJlc3MgYWRkcmVzcywK IGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckFsdGVyVGFibGVTdGFydChOb2RlICpwYXJzZXRyZWUp OwogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZVJlbGlkKE9pZCBvYmplY3RJZCk7 CiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJDb2xsZWN0QWx0ZXJUYWJsZVN1YmNtZChOb2RlICpz dWJjbWQsCi0JCQkJCQkJCQkJCQlPYmplY3RBZGRyZXNzIGFkZHJlc3MpOworCQkJCQkJCQkJCQkJ T2JqZWN0QWRkcmVzcyBhZGRyZXNzLAorCQkJCQkJCQkJCQkJYm9vbCByZXdyaXRlKTsKKworZXh0 ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQWx0ZXJUeXBlU3RhcnQoQWx0ZXJUYWJsZUNtZCAqc3ViY21k LCBSZWxhdGlvbiByZWwpOworZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQWx0ZXJUeXBlRW5kKE5v ZGUgKnN1YmNtZCwgT2JqZWN0QWRkcmVzcyBhZGRyZXNzLAorCQkJCQkJCQkJIGJvb2wgcmV3cml0 ZSk7CiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJBbHRlclRhYmxlRW5kKHZvaWQpOwogCiBleHRl cm4gdm9pZCBFdmVudFRyaWdnZXJDb2xsZWN0R3JhbnQoSW50ZXJuYWxHcmFudCAqaXN0bXQpOwpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmggYi9zcmMv aW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8uaAppbmRleCBkNjQyNjQzYWFlLi41Mzcx MDY1NTYwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8u aAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8uaApAQCAtNjEsNiAr NjEsNyBAQCB0eXBlZGVmIGVudW0gTG9naWNhbFJlcE1zZ1R5cGUKIAlMT0dJQ0FMX1JFUF9NU0df UkVMQVRJT04gPSAnUicsCiAJTE9HSUNBTF9SRVBfTVNHX1RZUEUgPSAnWScsCiAJTE9HSUNBTF9S RVBfTVNHX01FU1NBR0UgPSAnTScsCisJTE9HSUNBTF9SRVBfTVNHX0RETCA9ICdMJywKIAlMT0dJ Q0FMX1JFUF9NU0dfQkVHSU5fUFJFUEFSRSA9ICdiJywKIAlMT0dJQ0FMX1JFUF9NU0dfUFJFUEFS RSA9ICdQJywKIAlMT0dJQ0FMX1JFUF9NU0dfQ09NTUlUX1BSRVBBUkVEID0gJ0snLApAQCAtMjMw LDYgKzIzMSw5IEBAIGV4dGVybiBMaXN0ICpsb2dpY2FscmVwX3JlYWRfdHJ1bmNhdGUoU3RyaW5n SW5mbyBpbiwKIAkJCQkJCQkJCSAgYm9vbCAqY2FzY2FkZSwgYm9vbCAqcmVzdGFydF9zZXFzKTsK IGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd3JpdGVfbWVzc2FnZShTdHJpbmdJbmZvIG91dCwgVHJh bnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIgbHNuLAogCQkJCQkJCQkJIGJvb2wgdHJhbnNhY3Rp b25hbCwgY29uc3QgY2hhciAqcHJlZml4LCBTaXplIHN6LCBjb25zdCBjaGFyICptZXNzYWdlKTsK K2V4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd3JpdGVfZGRsKFN0cmluZ0luZm8gb3V0LCBYTG9nUmVj UHRyIGxzbiwKKwkJCQkJCQkJCQljb25zdCBjaGFyICpwcmVmaXgsIFNpemUgc3osIGNvbnN0IGNo YXIgKm1lc3NhZ2UpOworZXh0ZXJuIGNoYXIgKmxvZ2ljYWxyZXBfcmVhZF9kZGwoU3RyaW5nSW5m byBpbiwgWExvZ1JlY1B0ciAqbHNuLCBjb25zdCBjaGFyICoqcHJlZml4LCBTaXplICpzeik7CiBl eHRlcm4gdm9pZCBsb2dpY2FscmVwX3dyaXRlX3JlbChTdHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rp b25JZCB4aWQsCiAJCQkJCQkJCSBSZWxhdGlvbiByZWwsIEJpdG1hcHNldCAqY29sdW1ucyk7CiBl eHRlcm4gTG9naWNhbFJlcFJlbGF0aW9uICpsb2dpY2FscmVwX3JlYWRfcmVsKFN0cmluZ0luZm8g aW4pOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3V0cHV0X3BsdWdpbi5o IGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3V0cHV0X3BsdWdpbi5oCmluZGV4IDVlZDVlNmE3 YmMuLjQ0YmFmNDA3MjAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL291dHB1 dF9wbHVnaW4uaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9vdXRwdXRfcGx1Z2luLmgK QEAgLTksNyArOSw2IEBACiAjaWZuZGVmIE9VVFBVVF9QTFVHSU5fSAogI2RlZmluZSBPVVRQVVRf UExVR0lOX0gKIAotI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKICNpbmNsdWRl ICJyZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVyLmgiCiAKIHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdD b250ZXh0OwpAQCAtMjE0LDYgKzIxMywxOSBAQCB0eXBlZGVmIHZvaWQgKCpMb2dpY2FsRGVjb2Rl U3RyZWFtTWVzc2FnZUNCKSAoc3RydWN0IExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eAogCQkJ CQkJCQkJCQkgIFNpemUgbWVzc2FnZV9zaXplLAogCQkJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKm1l c3NhZ2UpOwogCisvKgorICogQ2FsbGJhY2sgZm9yIHN0cmVhbWluZyBsb2dpY2FsIGRlY29kaW5n IERETCBtZXNzYWdlcyBmcm9tIGluLXByb2dyZXNzCisgKiB0cmFuc2FjdGlvbnMuCisgKi8KK3R5 cGVkZWYgdm9pZCAoKkxvZ2ljYWxEZWNvZGVTdHJlYW1ERExNZXNzYWdlQ0IpIChzdHJ1Y3QgTG9n aWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAorCQkJCQkJCQkJCQkJIFJlb3JkZXJCdWZmZXJUWE4g KnR4biwKKwkJCQkJCQkJCQkJCSBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJCQkJCQkJCQkJ IGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJCQkJCQkJCSBPaWQgcmVsaWQsCisJCQkJCQkJCQkJ CQkgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkJCQkJCQkJIFNpemUgbWVzc2Fn ZV9zaXplLAorCQkJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworCiAvKgogICogQ2Fs bGJhY2sgZm9yIHN0cmVhbWluZyB0cnVuY2F0ZXMgZnJvbSBpbi1wcm9ncmVzcyB0cmFuc2FjdGlv bnMuCiAgKi8KQEAgLTI1Myw2ICsyNjUsNyBAQCB0eXBlZGVmIHN0cnVjdCBPdXRwdXRQbHVnaW5D YWxsYmFja3MKIAlMb2dpY2FsRGVjb2RlU3RyZWFtQ29tbWl0Q0Igc3RyZWFtX2NvbW1pdF9jYjsK IAlMb2dpY2FsRGVjb2RlU3RyZWFtQ2hhbmdlQ0Igc3RyZWFtX2NoYW5nZV9jYjsKIAlMb2dpY2Fs RGVjb2RlU3RyZWFtTWVzc2FnZUNCIHN0cmVhbV9tZXNzYWdlX2NiOworCUxvZ2ljYWxEZWNvZGVT dHJlYW1ERExNZXNzYWdlQ0Igc3RyZWFtX2RkbF9jYjsKIAlMb2dpY2FsRGVjb2RlU3RyZWFtVHJ1 bmNhdGVDQiBzdHJlYW1fdHJ1bmNhdGVfY2I7CiB9IE91dHB1dFBsdWdpbkNhbGxiYWNrczsKIApk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcGdvdXRwdXQuaCBiL3NyYy9pbmNs dWRlL3JlcGxpY2F0aW9uL3Bnb3V0cHV0LmgKaW5kZXggNjYzMzExYWZhOS4uOGY2ODEwYmNjNSAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcGdvdXRwdXQuaAorKysgYi9zcmMv aW5jbHVkZS9yZXBsaWNhdGlvbi9wZ291dHB1dC5oCkBAIC0yNSw2ICsyNSw3IEBAIHR5cGVkZWYg c3RydWN0IFBHT3V0cHV0RGF0YQogCXVpbnQzMgkJcHJvdG9jb2xfdmVyc2lvbjsKIAlMaXN0CSAg ICpwdWJsaWNhdGlvbl9uYW1lczsKIAlMaXN0CSAgICpwdWJsaWNhdGlvbnM7CisJTGlzdAkgICAq ZGVsZXRlZF9yZWxpZHM7CiAJYm9vbAkJYmluYXJ5OwogCWJvb2wJCXN0cmVhbWluZzsKIAlib29s CQltZXNzYWdlczsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJi dWZmZXIuaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaAppbmRleCBj OGYzMjRmZmJhLi44YmE3MDlkOGNlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi9yZW9yZGVyYnVmZmVyLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1 ZmZlci5oCkBAIC01MzksNiArNTM5LDE3IEBAIHR5cGVkZWYgdm9pZCAoKlJlb3JkZXJCdWZmZXJT dHJlYW1NZXNzYWdlQ0IpICgKIAkJCQkJCQkJCQkJICBjb25zdCBjaGFyICpwcmVmaXgsIFNpemUg c3osCiAJCQkJCQkJCQkJCSAgY29uc3QgY2hhciAqbWVzc2FnZSk7CiAKKy8qIHN0cmVhbSBEREwg bWVzc2FnZSBjYWxsYmFjayBzaWduYXR1cmUgKi8KK3R5cGVkZWYgdm9pZCAoKlJlb3JkZXJCdWZm ZXJTdHJlYW1ERExNZXNzYWdlQ0IpICgKKwkJCQkJCQkJCQkJCSBSZW9yZGVyQnVmZmVyICpyYiwK KwkJCQkJCQkJCQkJCSBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJCQkJCQkgWExvZ1Jl Y1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJCQkJCSBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJ CQkJCQkJCQkgT2lkIHJlbGlkLAorCQkJCQkJCQkJCQkJIERlcGFyc2VkQ29tbWFuZFR5cGUgY21k dHlwZSwKKwkJCQkJCQkJCQkJCSBTaXplIHN6LAorCQkJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKm1l c3NhZ2UpOworCiAvKiBzdHJlYW0gdHJ1bmNhdGUgY2FsbGJhY2sgc2lnbmF0dXJlICovCiB0eXBl ZGVmIHZvaWQgKCpSZW9yZGVyQnVmZmVyU3RyZWFtVHJ1bmNhdGVDQikgKAogCQkJCQkJCQkJCQkg ICBSZW9yZGVyQnVmZmVyICpyYiwKQEAgLTYwOSw2ICs2MjAsNyBAQCBzdHJ1Y3QgUmVvcmRlckJ1 ZmZlcgogCVJlb3JkZXJCdWZmZXJTdHJlYW1Db21taXRDQiBzdHJlYW1fY29tbWl0OwogCVJlb3Jk ZXJCdWZmZXJTdHJlYW1DaGFuZ2VDQiBzdHJlYW1fY2hhbmdlOwogCVJlb3JkZXJCdWZmZXJTdHJl YW1NZXNzYWdlQ0Igc3RyZWFtX21lc3NhZ2U7CisJUmVvcmRlckJ1ZmZlclN0cmVhbURETE1lc3Nh Z2VDQiBzdHJlYW1fZGRsOwogCVJlb3JkZXJCdWZmZXJTdHJlYW1UcnVuY2F0ZUNCIHN0cmVhbV90 cnVuY2F0ZTsKIAogCS8qCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS90Y29wL2NtZHRhZy5oIGIv c3JjL2luY2x1ZGUvdGNvcC9jbWR0YWcuaAppbmRleCAxZTc1MTRkY2ZmLi4wNzZjMjdlNjQyIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS90Y29wL2NtZHRhZy5oCisrKyBiL3NyYy9pbmNsdWRlL3Rj b3AvY21kdGFnLmgKQEAgLTE2LDcgKzE2LDcgQEAKIC8qIGJ1ZmZlciBzaXplIHJlcXVpcmVkIGZv ciBjb21tYW5kIGNvbXBsZXRpb24gdGFncyAqLwogI2RlZmluZSBDT01QTEVUSU9OX1RBR19CVUZT SVpFCTY0CiAKLSNkZWZpbmUgUEdfQ01EVEFHKHRhZywgbmFtZSwgZXZ0cmdvaywgcndyb2ssIHJv d2NudCkgXAorI2RlZmluZSBQR19DTURUQUcodGFnLCBuYW1lLCBldnRyZ29rLCByd3Jvaywgcm93 Y250LCBkZGxyZXBsb2spIFwKIAl0YWcsCiAKIHR5cGVkZWYgZW51bSBDb21tYW5kVGFnCkBAIC01 Myw5ICs1MywxMSBAQCBDb3B5UXVlcnlDb21wbGV0aW9uKFF1ZXJ5Q29tcGxldGlvbiAqZHN0LCBj b25zdCBRdWVyeUNvbXBsZXRpb24gKnNyYykKIGV4dGVybiB2b2lkIEluaXRpYWxpemVRdWVyeUNv bXBsZXRpb24oUXVlcnlDb21wbGV0aW9uICpxYyk7CiBleHRlcm4gY29uc3QgY2hhciAqR2V0Q29t bWFuZFRhZ05hbWUoQ29tbWFuZFRhZyBjb21tYW5kVGFnKTsKIGV4dGVybiBjb25zdCBjaGFyICpH ZXRDb21tYW5kVGFnTmFtZUFuZExlbihDb21tYW5kVGFnIGNvbW1hbmRUYWcsIFNpemUgKmxlbik7 CitleHRlcm4gQ29tbWFuZFRhZyAqR2V0Q29tbWFuZFRhZ3NGb3JERExSZXBsKGludCAqbmNvbW1h bmRzKTsKIGV4dGVybiBib29sIGNvbW1hbmRfdGFnX2Rpc3BsYXlfcm93Y291bnQoQ29tbWFuZFRh ZyBjb21tYW5kVGFnKTsKIGV4dGVybiBib29sIGNvbW1hbmRfdGFnX2V2ZW50X3RyaWdnZXJfb2so Q29tbWFuZFRhZyBjb21tYW5kVGFnKTsKIGV4dGVybiBib29sIGNvbW1hbmRfdGFnX3RhYmxlX3Jl d3JpdGVfb2soQ29tbWFuZFRhZyBjb21tYW5kVGFnKTsKK2V4dGVybiBib29sIGNvbW1hbmRfdGFn X2RkbF9yZXBsaWNhdGlvbl9vayhDb21tYW5kVGFnIGNvbW1hbmRUYWcpOwogZXh0ZXJuIENvbW1h bmRUYWcgR2V0Q29tbWFuZFRhZ0VudW0oY29uc3QgY2hhciAqY29tbWFuZG5hbWUpOwogZXh0ZXJu IFNpemUgQnVpbGRRdWVyeUNvbXBsZXRpb25TdHJpbmcoY2hhciAqYnVmZiwgY29uc3QgUXVlcnlD b21wbGV0aW9uICpxYywKIAkJCQkJCQkJCSAgIGJvb2wgbmFtZW9ubHkpOwpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvdGNvcC9jbWR0YWdsaXN0LmggYi9zcmMvaW5jbHVkZS90Y29wL2NtZHRhZ2xp c3QuaAppbmRleCBlNzM4YWMxYzA5Li45MmMzOTM4ZGZiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS90Y29wL2NtZHRhZ2xpc3QuaAorKysgYi9zcmMvaW5jbHVkZS90Y29wL2NtZHRhZ2xpc3QuaApA QCAtMjMsMTk2ICsyMywxOTYgQEAKICAqIHRleHR1YWwgbmFtZSwgc28gdGhhdCB3ZSBjYW4gYnNl YXJjaCBvbiBpdDsgc2VlIEdldENvbW1hbmRUYWdFbnVtKCkuCiAgKi8KIAotLyogc3ltYm9sIG5h bWUsIHRleHR1YWwgbmFtZSwgZXZlbnRfdHJpZ2dlcl9vaywgdGFibGVfcmV3cml0ZV9vaywgcm93 Y291bnQgKi8KLVBHX0NNRFRBRyhDTURUQUdfVU5LTk9XTiwgIj8/PyIsIGZhbHNlLCBmYWxzZSwg ZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX0FDQ0VTU19NRVRIT0QsICJBTFRFUiBBQ0NF U1MgTUVUSE9EIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9B R0dSRUdBVEUsICJBTFRFUiBBR0dSRUdBVEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURU QUcoQ01EVEFHX0FMVEVSX0NBU1QsICJBTFRFUiBDQVNUIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQot UEdfQ01EVEFHKENNRFRBR19BTFRFUl9DT0xMQVRJT04sICJBTFRFUiBDT0xMQVRJT04iLCB0cnVl LCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX0NPTlNUUkFJTlQsICJBTFRF UiBDT05TVFJBSU5UIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRF Ul9DT05WRVJTSU9OLCAiQUxURVIgQ09OVkVSU0lPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBH X0NNRFRBRyhDTURUQUdfQUxURVJfREFUQUJBU0UsICJBTFRFUiBEQVRBQkFTRSIsIGZhbHNlLCBm YWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX0RFRkFVTFRfUFJJVklMRUdFUywg IkFMVEVSIERFRkFVTFQgUFJJVklMRUdFUyIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRB RyhDTURUQUdfQUxURVJfRE9NQUlOLCAiQUxURVIgRE9NQUlOIiwgdHJ1ZSwgZmFsc2UsIGZhbHNl KQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9FVkVOVF9UUklHR0VSLCAiQUxURVIgRVZFTlQgVFJJ R0dFUiIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX0VYVEVO U0lPTiwgIkFMVEVSIEVYVEVOU0lPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhD TURUQUdfQUxURVJfRk9SRUlHTl9EQVRBX1dSQVBQRVIsICJBTFRFUiBGT1JFSUdOIERBVEEgV1JB UFBFUiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfRk9SRUlH Tl9UQUJMRSwgIkFMVEVSIEZPUkVJR04gVEFCTEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19D TURUQUcoQ01EVEFHX0FMVEVSX0ZVTkNUSU9OLCAiQUxURVIgRlVOQ1RJT04iLCB0cnVlLCBmYWxz ZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX0lOREVYLCAiQUxURVIgSU5ERVgiLCB0 cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX0xBTkdVQUdFLCAiQUxU RVIgTEFOR1VBR0UiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVS X0xBUkdFX09CSkVDVCwgIkFMVEVSIExBUkdFIE9CSkVDVCIsIHRydWUsIGZhbHNlLCBmYWxzZSkK LVBHX0NNRFRBRyhDTURUQUdfQUxURVJfTUFURVJJQUxJWkVEX1ZJRVcsICJBTFRFUiBNQVRFUklB TElaRUQgVklFVyIsIHRydWUsIHRydWUsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9P UEVSQVRPUiwgIkFMVEVSIE9QRVJBVE9SIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFH KENNRFRBR19BTFRFUl9PUEVSQVRPUl9DTEFTUywgIkFMVEVSIE9QRVJBVE9SIENMQVNTIiwgdHJ1 ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9PUEVSQVRPUl9GQU1JTFks ICJBTFRFUiBPUEVSQVRPUiBGQU1JTFkiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUco Q01EVEFHX0FMVEVSX1BPTElDWSwgIkFMVEVSIFBPTElDWSIsIHRydWUsIGZhbHNlLCBmYWxzZSkK LVBHX0NNRFRBRyhDTURUQUdfQUxURVJfUFJPQ0VEVVJFLCAiQUxURVIgUFJPQ0VEVVJFIiwgdHJ1 ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9QVUJMSUNBVElPTiwgIkFM VEVSIFBVQkxJQ0FUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19B TFRFUl9ST0xFLCAiQUxURVIgUk9MRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUco Q01EVEFHX0FMVEVSX1JPVVRJTkUsICJBTFRFUiBST1VUSU5FIiwgdHJ1ZSwgZmFsc2UsIGZhbHNl KQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9SVUxFLCAiQUxURVIgUlVMRSIsIHRydWUsIGZhbHNl LCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfU0NIRU1BLCAiQUxURVIgU0NIRU1BIiwg dHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9TRVFVRU5DRSwgIkFM VEVSIFNFUVVFTkNFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRF Ul9TRVJWRVIsICJBTFRFUiBTRVJWRVIiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUco Q01EVEFHX0FMVEVSX1NUQVRJU1RJQ1MsICJBTFRFUiBTVEFUSVNUSUNTIiwgdHJ1ZSwgZmFsc2Us IGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9TVUJTQ1JJUFRJT04sICJBTFRFUiBTVUJT Q1JJUFRJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX1NZ U1RFTSwgIkFMVEVSIFNZU1RFTSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01E VEFHX0FMVEVSX1RBQkxFLCAiQUxURVIgVEFCTEUiLCB0cnVlLCB0cnVlLCBmYWxzZSkKLVBHX0NN RFRBRyhDTURUQUdfQUxURVJfVEFCTEVTUEFDRSwgIkFMVEVSIFRBQkxFU1BBQ0UiLCBmYWxzZSwg ZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9URVhUX1NFQVJDSF9DT05GSUdV UkFUSU9OLCAiQUxURVIgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiIsIHRydWUsIGZhbHNlLCBm YWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfVEVYVF9TRUFSQ0hfRElDVElPTkFSWSwgIkFM VEVSIFRFWFQgU0VBUkNIIERJQ1RJT05BUlkiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURU QUcoQ01EVEFHX0FMVEVSX1RFWFRfU0VBUkNIX1BBUlNFUiwgIkFMVEVSIFRFWFQgU0VBUkNIIFBB UlNFUiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfVEVYVF9T RUFSQ0hfVEVNUExBVEUsICJBTFRFUiBURVhUIFNFQVJDSCBURU1QTEFURSIsIHRydWUsIGZhbHNl LCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfVFJBTlNGT1JNLCAiQUxURVIgVFJBTlNG T1JNIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9UUklHR0VS LCAiQUxURVIgVFJJR0dFUiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdf QUxURVJfVFlQRSwgIkFMVEVSIFRZUEUiLCB0cnVlLCB0cnVlLCBmYWxzZSkKLVBHX0NNRFRBRyhD TURUQUdfQUxURVJfVVNFUl9NQVBQSU5HLCAiQUxURVIgVVNFUiBNQVBQSU5HIiwgdHJ1ZSwgZmFs c2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9WSUVXLCAiQUxURVIgVklFVyIsIHRy dWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQU5BTFlaRSwgIkFOQUxZWkUiLCBm YWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19CRUdJTiwgIkJFR0lOIiwgZmFs c2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ0FMTCwgIkNBTEwiLCBmYWxzZSwg ZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DSEVDS1BPSU5ULCAiQ0hFQ0tQT0lOVCIs IGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NMT1NFLCAiQ0xPU0UiLCBm YWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DTE9TRV9DVVJTT1IsICJDTE9T RSBDVVJTT1IiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DTE9TRV9D VVJTT1JfQUxMLCAiQ0xPU0UgQ1VSU09SIEFMTCIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19D TURUQUcoQ01EVEFHX0NMVVNURVIsICJDTFVTVEVSIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBH X0NNRFRBRyhDTURUQUdfQ09NTUVOVCwgIkNPTU1FTlQiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1Q R19DTURUQUcoQ01EVEFHX0NPTU1JVCwgIkNPTU1JVCIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1Q R19DTURUQUcoQ01EVEFHX0NPTU1JVF9QUkVQQVJFRCwgIkNPTU1JVCBQUkVQQVJFRCIsIGZhbHNl LCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NPUFksICJDT1BZIiwgZmFsc2UsIGZh bHNlLCB0cnVlKQotUEdfQ01EVEFHKENNRFRBR19DT1BZX0ZST00sICJDT1BZIEZST00iLCBmYWxz ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfQUNDRVNTX01FVEhPRCwg IkNSRUFURSBBQ0NFU1MgTUVUSE9EIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENN RFRBR19DUkVBVEVfQUdHUkVHQVRFLCAiQ1JFQVRFIEFHR1JFR0FURSIsIHRydWUsIGZhbHNlLCBm YWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX0NBU1QsICJDUkVBVEUgQ0FTVCIsIHRydWUs IGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX0NPTExBVElPTiwgIkNSRUFU RSBDT0xMQVRJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFU RV9DT05TVFJBSU5ULCAiQ1JFQVRFIENPTlNUUkFJTlQiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1Q R19DTURUQUcoQ01EVEFHX0NSRUFURV9DT05WRVJTSU9OLCAiQ1JFQVRFIENPTlZFUlNJT04iLCB0 cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9EQVRBQkFTRSwgIkNS RUFURSBEQVRBQkFTRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NS RUFURV9ET01BSU4sICJDUkVBVEUgRE9NQUlOIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01E VEFHKENNRFRBR19DUkVBVEVfRVZFTlRfVFJJR0dFUiwgIkNSRUFURSBFVkVOVCBUUklHR0VSIiwg ZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX0VYVEVOU0lPTiwg IkNSRUFURSBFWFRFTlNJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFH X0NSRUFURV9GT1JFSUdOX0RBVEFfV1JBUFBFUiwgIkNSRUFURSBGT1JFSUdOIERBVEEgV1JBUFBF UiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX0ZPUkVJR05f VEFCTEUsICJDUkVBVEUgRk9SRUlHTiBUQUJMRSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NN RFRBRyhDTURUQUdfQ1JFQVRFX0ZVTkNUSU9OLCAiQ1JFQVRFIEZVTkNUSU9OIiwgdHJ1ZSwgZmFs c2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfSU5ERVgsICJDUkVBVEUgSU5ERVgi LCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9MQU5HVUFHRSwg IkNSRUFURSBMQU5HVUFHRSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdf Q1JFQVRFX01BVEVSSUFMSVpFRF9WSUVXLCAiQ1JFQVRFIE1BVEVSSUFMSVpFRCBWSUVXIiwgdHJ1 ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfT1BFUkFUT1IsICJDUkVB VEUgT1BFUkFUT1IiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFU RV9PUEVSQVRPUl9DTEFTUywgIkNSRUFURSBPUEVSQVRPUiBDTEFTUyIsIHRydWUsIGZhbHNlLCBm YWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX09QRVJBVE9SX0ZBTUlMWSwgIkNSRUFURSBP UEVSQVRPUiBGQU1JTFkiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NS RUFURV9QT0xJQ1ksICJDUkVBVEUgUE9MSUNZIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01E VEFHKENNRFRBR19DUkVBVEVfUFJPQ0VEVVJFLCAiQ1JFQVRFIFBST0NFRFVSRSIsIHRydWUsIGZh bHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1BVQkxJQ0FUSU9OLCAiQ1JFQVRF IFBVQkxJQ0FUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVB VEVfUk9MRSwgIkNSRUFURSBST0xFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhD TURUQUdfQ1JFQVRFX1JPVVRJTkUsICJDUkVBVEUgUk9VVElORSIsIHRydWUsIGZhbHNlLCBmYWxz ZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1JVTEUsICJDUkVBVEUgUlVMRSIsIHRydWUsIGZh bHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1NDSEVNQSwgIkNSRUFURSBTQ0hF TUEiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9TRVFVRU5D RSwgIkNSRUFURSBTRVFVRU5DRSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURU QUdfQ1JFQVRFX1NFUlZFUiwgIkNSRUFURSBTRVJWRVIiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1Q R19DTURUQUcoQ01EVEFHX0NSRUFURV9TVEFUSVNUSUNTLCAiQ1JFQVRFIFNUQVRJU1RJQ1MiLCB0 cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9TVUJTQ1JJUFRJT04s ICJDUkVBVEUgU1VCU0NSSVBUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENN RFRBR19DUkVBVEVfVEFCTEUsICJDUkVBVEUgVEFCTEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1Q R19DTURUQUcoQ01EVEFHX0NSRUFURV9UQUJMRV9BUywgIkNSRUFURSBUQUJMRSBBUyIsIHRydWUs IGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1RBQkxFU1BBQ0UsICJDUkVB VEUgVEFCTEVTUEFDRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NS RUFURV9URVhUX1NFQVJDSF9DT05GSUdVUkFUSU9OLCAiQ1JFQVRFIFRFWFQgU0VBUkNIIENPTkZJ R1VSQVRJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9U RVhUX1NFQVJDSF9ESUNUSU9OQVJZLCAiQ1JFQVRFIFRFWFQgU0VBUkNIIERJQ1RJT05BUlkiLCB0 cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9URVhUX1NFQVJDSF9Q QVJTRVIsICJDUkVBVEUgVEVYVCBTRUFSQ0ggUEFSU0VSIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQot UEdfQ01EVEFHKENNRFRBR19DUkVBVEVfVEVYVF9TRUFSQ0hfVEVNUExBVEUsICJDUkVBVEUgVEVY VCBTRUFSQ0ggVEVNUExBVEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFH X0NSRUFURV9UUkFOU0ZPUk0sICJDUkVBVEUgVFJBTlNGT1JNIiwgdHJ1ZSwgZmFsc2UsIGZhbHNl KQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfVFJJR0dFUiwgIkNSRUFURSBUUklHR0VSIiwgdHJ1 ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfVFlQRSwgIkNSRUFURSBU WVBFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfVVNFUl9N QVBQSU5HLCAiQ1JFQVRFIFVTRVIgTUFQUElORyIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NN RFRBRyhDTURUQUdfQ1JFQVRFX1ZJRVcsICJDUkVBVEUgVklFVyIsIHRydWUsIGZhbHNlLCBmYWxz ZSkKLVBHX0NNRFRBRyhDTURUQUdfREVBTExPQ0FURSwgIkRFQUxMT0NBVEUiLCBmYWxzZSwgZmFs c2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19ERUFMTE9DQVRFX0FMTCwgIkRFQUxMT0NBVEUg QUxMIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfREVDTEFSRV9DVVJT T1IsICJERUNMQVJFIENVUlNPUiIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01E VEFHX0RFTEVURSwgIkRFTEVURSIsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKLVBHX0NNRFRBRyhDTURU QUdfRElTQ0FSRCwgIkRJU0NBUkQiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENN RFRBR19ESVNDQVJEX0FMTCwgIkRJU0NBUkQgQUxMIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBH X0NNRFRBRyhDTURUQUdfRElTQ0FSRF9QTEFOUywgIkRJU0NBUkQgUExBTlMiLCBmYWxzZSwgZmFs c2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19ESVNDQVJEX1NFUVVFTkNFUywgIkRJU0NBUkQg U0VRVUVOQ0VTIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRElTQ0FS RF9URU1QLCAiRElTQ0FSRCBURU1QIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhD TURUQUdfRE8sICJETyIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RS T1BfQUNDRVNTX01FVEhPRCwgIkRST1AgQUNDRVNTIE1FVEhPRCIsIHRydWUsIGZhbHNlLCBmYWxz ZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9BR0dSRUdBVEUsICJEUk9QIEFHR1JFR0FURSIsIHRy dWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9DQVNULCAiRFJPUCBDQVNU IiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX0NPTExBVElPTiwg IkRST1AgQ09MTEFUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19E Uk9QX0NPTlNUUkFJTlQsICJEUk9QIENPTlNUUkFJTlQiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1Q R19DTURUQUcoQ01EVEFHX0RST1BfQ09OVkVSU0lPTiwgIkRST1AgQ09OVkVSU0lPTiIsIHRydWUs IGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9EQVRBQkFTRSwgIkRST1AgREFU QUJBU0UiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX0RPTUFJ TiwgIkRST1AgRE9NQUlOIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19E Uk9QX0VWRU5UX1RSSUdHRVIsICJEUk9QIEVWRU5UIFRSSUdHRVIiLCBmYWxzZSwgZmFsc2UsIGZh bHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX0VYVEVOU0lPTiwgIkRST1AgRVhURU5TSU9OIiwg dHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX0ZPUkVJR05fREFUQV9X UkFQUEVSLCAiRFJPUCBGT1JFSUdOIERBVEEgV1JBUFBFUiIsIHRydWUsIGZhbHNlLCBmYWxzZSkK LVBHX0NNRFRBRyhDTURUQUdfRFJPUF9GT1JFSUdOX1RBQkxFLCAiRFJPUCBGT1JFSUdOIFRBQkxF IiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX0ZVTkNUSU9OLCAi RFJPUCBGVU5DVElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJP UF9JTkRFWCwgIkRST1AgSU5ERVgiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01E VEFHX0RST1BfTEFOR1VBR0UsICJEUk9QIExBTkdVQUdFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQot UEdfQ01EVEFHKENNRFRBR19EUk9QX01BVEVSSUFMSVpFRF9WSUVXLCAiRFJPUCBNQVRFUklBTEla RUQgVklFVyIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9PUEVS QVRPUiwgIkRST1AgT1BFUkFUT1IiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01E VEFHX0RST1BfT1BFUkFUT1JfQ0xBU1MsICJEUk9QIE9QRVJBVE9SIENMQVNTIiwgdHJ1ZSwgZmFs c2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX09QRVJBVE9SX0ZBTUlMWSwgIkRST1Ag T1BFUkFUT1IgRkFNSUxZIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19E Uk9QX09XTkVELCAiRFJPUCBPV05FRCIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhD TURUQUdfRFJPUF9QT0xJQ1ksICJEUk9QIFBPTElDWSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBH X0NNRFRBRyhDTURUQUdfRFJPUF9QUk9DRURVUkUsICJEUk9QIFBST0NFRFVSRSIsIHRydWUsIGZh bHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9QVUJMSUNBVElPTiwgIkRST1AgUFVC TElDQVRJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfUk9M RSwgIkRST1AgUk9MRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RS T1BfUk9VVElORSwgIkRST1AgUk9VVElORSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRB RyhDTURUQUdfRFJPUF9SVUxFLCAiRFJPUCBSVUxFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdf Q01EVEFHKENNRFRBR19EUk9QX1NDSEVNQSwgIkRST1AgU0NIRU1BIiwgdHJ1ZSwgZmFsc2UsIGZh bHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX1NFUVVFTkNFLCAiRFJPUCBTRVFVRU5DRSIsIHRy dWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9TRVJWRVIsICJEUk9QIFNF UlZFUiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9TVEFUSVNU SUNTLCAiRFJPUCBTVEFUSVNUSUNTIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENN RFRBR19EUk9QX1NVQlNDUklQVElPTiwgIkRST1AgU1VCU0NSSVBUSU9OIiwgdHJ1ZSwgZmFsc2Us IGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX1RBQkxFLCAiRFJPUCBUQUJMRSIsIHRydWUs IGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9UQUJMRVNQQUNFLCAiRFJPUCBU QUJMRVNQQUNFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9U RVhUX1NFQVJDSF9DT05GSUdVUkFUSU9OLCAiRFJPUCBURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9O IiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX1RFWFRfU0VBUkNI X0RJQ1RJT05BUlksICJEUk9QIFRFWFQgU0VBUkNIIERJQ1RJT05BUlkiLCB0cnVlLCBmYWxzZSwg ZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfVEVYVF9TRUFSQ0hfUEFSU0VSLCAiRFJPUCBU RVhUIFNFQVJDSCBQQVJTRVIiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFH X0RST1BfVEVYVF9TRUFSQ0hfVEVNUExBVEUsICJEUk9QIFRFWFQgU0VBUkNIIFRFTVBMQVRFIiwg dHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX1RSQU5TRk9STSwgIkRS T1AgVFJBTlNGT1JNIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9Q X1RSSUdHRVIsICJEUk9QIFRSSUdHRVIiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUco Q01EVEFHX0RST1BfVFlQRSwgIkRST1AgVFlQRSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NN RFRBRyhDTURUQUdfRFJPUF9VU0VSX01BUFBJTkcsICJEUk9QIFVTRVIgTUFQUElORyIsIHRydWUs IGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9WSUVXLCAiRFJPUCBWSUVXIiwg dHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19FWEVDVVRFLCAiRVhFQ1VURSIs IGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0VYUExBSU4sICJFWFBMQUlO IiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRkVUQ0gsICJGRVRDSCIs IGZhbHNlLCBmYWxzZSwgdHJ1ZSkKLVBHX0NNRFRBRyhDTURUQUdfR1JBTlQsICJHUkFOVCIsIHRy dWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfR1JBTlRfUk9MRSwgIkdSQU5UIFJP TEUiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19JTVBPUlRfRk9SRUlH Tl9TQ0hFTUEsICJJTVBPUlQgRk9SRUlHTiBTQ0hFTUEiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1Q R19DTURUQUcoQ01EVEFHX0lOU0VSVCwgIklOU0VSVCIsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKLVBH X0NNRFRBRyhDTURUQUdfTElTVEVOLCAiTElTVEVOIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBH X0NNRFRBRyhDTURUQUdfTE9BRCwgIkxPQUQiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01E VEFHKENNRFRBR19MT0NLX1RBQkxFLCAiTE9DSyBUQUJMRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2Up Ci1QR19DTURUQUcoQ01EVEFHX01FUkdFLCAiTUVSR0UiLCBmYWxzZSwgZmFsc2UsIHRydWUpCi1Q R19DTURUQUcoQ01EVEFHX01PVkUsICJNT1ZFIiwgZmFsc2UsIGZhbHNlLCB0cnVlKQotUEdfQ01E VEFHKENNRFRBR19OT1RJRlksICJOT1RJRlkiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01E VEFHKENNRFRBR19QUkVQQVJFLCAiUFJFUEFSRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19D TURUQUcoQ01EVEFHX1BSRVBBUkVfVFJBTlNBQ1RJT04sICJQUkVQQVJFIFRSQU5TQUNUSU9OIiwg ZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfUkVBU1NJR05fT1dORUQsICJS RUFTU0lHTiBPV05FRCIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX1JF RlJFU0hfTUFURVJJQUxJWkVEX1ZJRVcsICJSRUZSRVNIIE1BVEVSSUFMSVpFRCBWSUVXIiwgdHJ1 ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19SRUlOREVYLCAiUkVJTkRFWCIsIGZh bHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX1JFTEVBU0UsICJSRUxFQVNFIiwg ZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfUkVTRVQsICJSRVNFVCIsIGZh bHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX1JFVk9LRSwgIlJFVk9LRSIsIHRy dWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfUkVWT0tFX1JPTEUsICJSRVZPS0Ug Uk9MRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX1JPTExCQUNLLCAi Uk9MTEJBQ0siLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19ST0xMQkFD S19QUkVQQVJFRCwgIlJPTExCQUNLIFBSRVBBUkVEIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBH X0NNRFRBRyhDTURUQUdfU0FWRVBPSU5ULCAiU0FWRVBPSU5UIiwgZmFsc2UsIGZhbHNlLCBmYWxz ZSkKLVBHX0NNRFRBRyhDTURUQUdfU0VDVVJJVFlfTEFCRUwsICJTRUNVUklUWSBMQUJFTCIsIHRy dWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfU0VMRUNULCAiU0VMRUNUIiwgZmFs c2UsIGZhbHNlLCB0cnVlKQotUEdfQ01EVEFHKENNRFRBR19TRUxFQ1RfRk9SX0tFWV9TSEFSRSwg IlNFTEVDVCBGT1IgS0VZIFNIQVJFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhD TURUQUdfU0VMRUNUX0ZPUl9OT19LRVlfVVBEQVRFLCAiU0VMRUNUIEZPUiBOTyBLRVkgVVBEQVRF IiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfU0VMRUNUX0ZPUl9TSEFS RSwgIlNFTEVDVCBGT1IgU0hBUkUiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENN RFRBR19TRUxFQ1RfRk9SX1VQREFURSwgIlNFTEVDVCBGT1IgVVBEQVRFIiwgZmFsc2UsIGZhbHNl LCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfU0VMRUNUX0lOVE8sICJTRUxFQ1QgSU5UTyIsIHRy dWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfU0VULCAiU0VUIiwgZmFsc2UsIGZh bHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfU0VUX0NPTlNUUkFJTlRTLCAiU0VUIENPTlNU UkFJTlRTIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfU0hPVywgIlNI T1ciLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19TVEFSVF9UUkFOU0FD VElPTiwgIlNUQVJUIFRSQU5TQUNUSU9OIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRB RyhDTURUQUdfVFJVTkNBVEVfVEFCTEUsICJUUlVOQ0FURSBUQUJMRSIsIGZhbHNlLCBmYWxzZSwg ZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX1VOTElTVEVOLCAiVU5MSVNURU4iLCBmYWxzZSwgZmFs c2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19VUERBVEUsICJVUERBVEUiLCBmYWxzZSwgZmFs c2UsIHRydWUpCi1QR19DTURUQUcoQ01EVEFHX1ZBQ1VVTSwgIlZBQ1VVTSIsIGZhbHNlLCBmYWxz ZSwgZmFsc2UpCisvKiBzeW1ib2wgbmFtZSwgdGV4dHVhbCBuYW1lLCBldmVudF90cmlnZ2VyX29r LCB0YWJsZV9yZXdyaXRlX29rLCByb3djb3VudCwgZGRscmVwbG9rICovCitQR19DTURUQUcoQ01E VEFHX1VOS05PV04sICI/Pz8iLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRB RyhDTURUQUdfQUxURVJfQUNDRVNTX01FVEhPRCwgIkFMVEVSIEFDQ0VTUyBNRVRIT0QiLCB0cnVl LCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9BR0dSRUdBVEUs ICJBTFRFUiBBR0dSRUdBVEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUco Q01EVEFHX0FMVEVSX0NBU1QsICJBTFRFUiBDQVNUIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVl KQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9DT0xMQVRJT04sICJBTFRFUiBDT0xMQVRJT04iLCB0 cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX0NPTlNUUkFJ TlQsICJBTFRFUiBDT05TVFJBSU5UIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NN RFRBRyhDTURUQUdfQUxURVJfQ09OVkVSU0lPTiwgIkFMVEVSIENPTlZFUlNJT04iLCB0cnVlLCBm YWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX0RBVEFCQVNFLCAiQUxU RVIgREFUQUJBU0UiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURU QUdfQUxURVJfREVGQVVMVF9QUklWSUxFR0VTLCAiQUxURVIgREVGQVVMVCBQUklWSUxFR0VTIiwg dHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9ET01BSU4s ICJBTFRFUiBET01BSU4iLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01E VEFHX0FMVEVSX0VWRU5UX1RSSUdHRVIsICJBTFRFUiBFVkVOVCBUUklHR0VSIiwgZmFsc2UsIGZh bHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX0VYVEVOU0lPTiwgIkFM VEVSIEVYVEVOU0lPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURU QUdfQUxURVJfRk9SRUlHTl9EQVRBX1dSQVBQRVIsICJBTFRFUiBGT1JFSUdOIERBVEEgV1JBUFBF UiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfRk9S RUlHTl9UQUJMRSwgIkFMVEVSIEZPUkVJR04gVEFCTEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRy dWUpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX0ZVTkNUSU9OLCAiQUxURVIgRlVOQ1RJT04iLCB0 cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX0lOREVYLCAi QUxURVIgSU5ERVgiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFH X0FMVEVSX0xBTkdVQUdFLCAiQUxURVIgTEFOR1VBR0UiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRy dWUpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX0xBUkdFX09CSkVDVCwgIkFMVEVSIExBUkdFIE9C SkVDVCIsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0FMVEVS X01BVEVSSUFMSVpFRF9WSUVXLCAiQUxURVIgTUFURVJJQUxJWkVEIFZJRVciLCB0cnVlLCB0cnVl LCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfT1BFUkFUT1IsICJBTFRFUiBP UEVSQVRPUiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxU RVJfT1BFUkFUT1JfQ0xBU1MsICJBTFRFUiBPUEVSQVRPUiBDTEFTUyIsIHRydWUsIGZhbHNlLCBm YWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfT1BFUkFUT1JfRkFNSUxZLCAiQUxU RVIgT1BFUkFUT1IgRkFNSUxZIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFH KENNRFRBR19BTFRFUl9QT0xJQ1ksICJBTFRFUiBQT0xJQ1kiLCB0cnVlLCBmYWxzZSwgZmFsc2Us IHRydWUpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX1BST0NFRFVSRSwgIkFMVEVSIFBST0NFRFVS RSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfUFVC TElDQVRJT04sICJBTFRFUiBQVUJMSUNBVElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2Up CitQR19DTURUQUcoQ01EVEFHX0FMVEVSX1JPTEUsICJBTFRFUiBST0xFIiwgZmFsc2UsIGZhbHNl LCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX1JPVVRJTkUsICJBTFRFUiBS T1VUSU5FIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRF Ul9SVUxFLCAiQUxURVIgUlVMRSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRB RyhDTURUQUdfQUxURVJfU0NIRU1BLCAiQUxURVIgU0NIRU1BIiwgdHJ1ZSwgZmFsc2UsIGZhbHNl LCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9TRVFVRU5DRSwgIkFMVEVSIFNFUVVFTkNF IiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9TRVJW RVIsICJBTFRFUiBTRVJWRVIiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUco Q01EVEFHX0FMVEVSX1NUQVRJU1RJQ1MsICJBTFRFUiBTVEFUSVNUSUNTIiwgdHJ1ZSwgZmFsc2Us IGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9TVUJTQ1JJUFRJT04sICJBTFRF UiBTVUJTQ1JJUFRJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENN RFRBR19BTFRFUl9TWVNURU0sICJBTFRFUiBTWVNURU0iLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBm YWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfVEFCTEUsICJBTFRFUiBUQUJMRSIsIHRydWUs IHRydWUsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9UQUJMRVNQQUNFLCAi QUxURVIgVEFCTEVTUEFDRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFH KENNRFRBR19BTFRFUl9URVhUX1NFQVJDSF9DT05GSUdVUkFUSU9OLCAiQUxURVIgVEVYVCBTRUFS Q0ggQ09ORklHVVJBVElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhD TURUQUdfQUxURVJfVEVYVF9TRUFSQ0hfRElDVElPTkFSWSwgIkFMVEVSIFRFWFQgU0VBUkNIIERJ Q1RJT05BUlkiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0FM VEVSX1RFWFRfU0VBUkNIX1BBUlNFUiwgIkFMVEVSIFRFWFQgU0VBUkNIIFBBUlNFUiIsIHRydWUs IGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfVEVYVF9TRUFSQ0hf VEVNUExBVEUsICJBTFRFUiBURVhUIFNFQVJDSCBURU1QTEFURSIsIHRydWUsIGZhbHNlLCBmYWxz ZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfVFJBTlNGT1JNLCAiQUxURVIgVFJBTlNG T1JNIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJf VFJJR0dFUiwgIkFMVEVSIFRSSUdHRVIiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19D TURUQUcoQ01EVEFHX0FMVEVSX1RZUEUsICJBTFRFUiBUWVBFIiwgdHJ1ZSwgdHJ1ZSwgZmFsc2Us IHRydWUpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX1VTRVJfTUFQUElORywgIkFMVEVSIFVTRVIg TUFQUElORyIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxU RVJfVklFVywgIkFMVEVSIFZJRVciLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURU QUcoQ01EVEFHX0FOQUxZWkUsICJBTkFMWVpFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2Up CitQR19DTURUQUcoQ01EVEFHX0JFR0lOLCAiQkVHSU4iLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBm YWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQ0FMTCwgIkNBTEwiLCBmYWxzZSwgZmFsc2UsIGZhbHNl LCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQ0hFQ0tQT0lOVCwgIkNIRUNLUE9JTlQiLCBmYWxz ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQ0xPU0UsICJDTE9TRSIs IGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19DTE9TRV9DVVJT T1IsICJDTE9TRSBDVVJTT1IiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRB RyhDTURUQUdfQ0xPU0VfQ1VSU09SX0FMTCwgIkNMT1NFIENVUlNPUiBBTEwiLCBmYWxzZSwgZmFs c2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQ0xVU1RFUiwgIkNMVVNURVIiLCBm YWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQ09NTUVOVCwgIkNP TU1FTlQiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0NPTU1J VCwgIkNPTU1JVCIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRB R19DT01NSVRfUFJFUEFSRUQsICJDT01NSVQgUFJFUEFSRUQiLCBmYWxzZSwgZmFsc2UsIGZhbHNl LCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQ09QWSwgIkNPUFkiLCBmYWxzZSwgZmFsc2UsIHRy dWUsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19DT1BZX0ZST00sICJDT1BZIEZST00iLCBmYWxz ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX0FDQ0VTU19N RVRIT0QsICJDUkVBVEUgQUNDRVNTIE1FVEhPRCIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkK K1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX0FHR1JFR0FURSwgIkNSRUFURSBBR0dSRUdBVEUiLCB0 cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9DQVNULCAi Q1JFQVRFIENBU1QiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFH X0NSRUFURV9DT0xMQVRJT04sICJDUkVBVEUgQ09MTEFUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNl LCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfQ09OU1RSQUlOVCwgIkNSRUFURSBDT05T VFJBSU5UIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JF QVRFX0NPTlZFUlNJT04sICJDUkVBVEUgQ09OVkVSU0lPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSwg dHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX0RBVEFCQVNFLCAiQ1JFQVRFIERBVEFCQVNF IiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9E T01BSU4sICJDUkVBVEUgRE9NQUlOIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01E VEFHKENNRFRBR19DUkVBVEVfRVZFTlRfVFJJR0dFUiwgIkNSRUFURSBFVkVOVCBUUklHR0VSIiwg ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9FWFRF TlNJT04sICJDUkVBVEUgRVhURU5TSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdf Q01EVEFHKENNRFRBR19DUkVBVEVfRk9SRUlHTl9EQVRBX1dSQVBQRVIsICJDUkVBVEUgRk9SRUlH TiBEQVRBIFdSQVBQRVIiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01E VEFHX0NSRUFURV9GT1JFSUdOX1RBQkxFLCAiQ1JFQVRFIEZPUkVJR04gVEFCTEUiLCB0cnVlLCBm YWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9GVU5DVElPTiwgIkNS RUFURSBGVU5DVElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURU QUdfQ1JFQVRFX0lOREVYLCAiQ1JFQVRFIElOREVYIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVl KQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfTEFOR1VBR0UsICJDUkVBVEUgTEFOR1VBR0UiLCB0 cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9NQVRFUklB TElaRURfVklFVywgIkNSRUFURSBNQVRFUklBTElaRUQgVklFVyIsIHRydWUsIGZhbHNlLCBmYWxz ZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX09QRVJBVE9SLCAiQ1JFQVRFIE9QRVJB VE9SIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVf T1BFUkFUT1JfQ0xBU1MsICJDUkVBVEUgT1BFUkFUT1IgQ0xBU1MiLCB0cnVlLCBmYWxzZSwgZmFs c2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9PUEVSQVRPUl9GQU1JTFksICJDUkVB VEUgT1BFUkFUT1IgRkFNSUxZIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFH KENNRFRBR19DUkVBVEVfUE9MSUNZLCAiQ1JFQVRFIFBPTElDWSIsIHRydWUsIGZhbHNlLCBmYWxz ZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1BST0NFRFVSRSwgIkNSRUFURSBQUk9D RURVUkUiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0NSRUFU RV9QVUJMSUNBVElPTiwgIkNSRUFURSBQVUJMSUNBVElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSwg ZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9ST0xFLCAiQ1JFQVRFIFJPTEUiLCBmYWxz ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1JPVVRJTkUs ICJDUkVBVEUgUk9VVElORSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUco Q01EVEFHX0NSRUFURV9SVUxFLCAiQ1JFQVRFIFJVTEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRy dWUpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9TQ0hFTUEsICJDUkVBVEUgU0NIRU1BIiwgdHJ1 ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfU0VRVUVOQ0Us ICJDUkVBVEUgU0VRVUVOQ0UiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUco Q01EVEFHX0NSRUFURV9TRVJWRVIsICJDUkVBVEUgU0VSVkVSIiwgdHJ1ZSwgZmFsc2UsIGZhbHNl LCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfU1RBVElTVElDUywgIkNSRUFURSBTVEFU SVNUSUNTIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVB VEVfU1VCU0NSSVBUSU9OLCAiQ1JFQVRFIFNVQlNDUklQVElPTiIsIHRydWUsIGZhbHNlLCBmYWxz ZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9UQUJMRSwgIkNSRUFURSBUQUJMRSIs IHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1RBQkxF X0FTLCAiQ1JFQVRFIFRBQkxFIEFTIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NN RFRBRyhDTURUQUdfQ1JFQVRFX1RBQkxFU1BBQ0UsICJDUkVBVEUgVEFCTEVTUEFDRSIsIGZhbHNl LCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfVEVYVF9TRUFS Q0hfQ09ORklHVVJBVElPTiwgIkNSRUFURSBURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OIiwgdHJ1 ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfVEVYVF9TRUFS Q0hfRElDVElPTkFSWSwgIkNSRUFURSBURVhUIFNFQVJDSCBESUNUSU9OQVJZIiwgdHJ1ZSwgZmFs c2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfVEVYVF9TRUFSQ0hfUEFS U0VSLCAiQ1JFQVRFIFRFWFQgU0VBUkNIIFBBUlNFUiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1 ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1RFWFRfU0VBUkNIX1RFTVBMQVRFLCAiQ1JFQVRF IFRFWFQgU0VBUkNIIFRFTVBMQVRFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01E VEFHKENNRFRBR19DUkVBVEVfVFJBTlNGT1JNLCAiQ1JFQVRFIFRSQU5TRk9STSIsIHRydWUsIGZh bHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1RSSUdHRVIsICJDUkVB VEUgVFJJR0dFUiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdf Q1JFQVRFX1RZUEUsICJDUkVBVEUgVFlQRSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BH X0NNRFRBRyhDTURUQUdfQ1JFQVRFX1VTRVJfTUFQUElORywgIkNSRUFURSBVU0VSIE1BUFBJTkci LCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9WSUVX LCAiQ1JFQVRFIFZJRVciLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01E VEFHX0RFQUxMT0NBVEUsICJERUFMTE9DQVRFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2Up CitQR19DTURUQUcoQ01EVEFHX0RFQUxMT0NBVEVfQUxMLCAiREVBTExPQ0FURSBBTEwiLCBmYWxz ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfREVDTEFSRV9DVVJTT1Is ICJERUNMQVJFIENVUlNPUiIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFH KENNRFRBR19ERUxFVEUsICJERUxFVEUiLCBmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlKQorUEdf Q01EVEFHKENNRFRBR19ESVNDQVJELCAiRElTQ0FSRCIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZh bHNlKQorUEdfQ01EVEFHKENNRFRBR19ESVNDQVJEX0FMTCwgIkRJU0NBUkQgQUxMIiwgZmFsc2Us IGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0RJU0NBUkRfUExBTlMsICJE SVNDQVJEIFBMQU5TIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01E VEFHX0RJU0NBUkRfU0VRVUVOQ0VTLCAiRElTQ0FSRCBTRVFVRU5DRVMiLCBmYWxzZSwgZmFsc2Us IGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfRElTQ0FSRF9URU1QLCAiRElTQ0FSRCBU RU1QIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0RPLCAi RE8iLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9B Q0NFU1NfTUVUSE9ELCAiRFJPUCBBQ0NFU1MgTUVUSE9EIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0 cnVlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX0FHR1JFR0FURSwgIkRST1AgQUdHUkVHQVRFIiwg dHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX0NBU1QsICJE Uk9QIENBU1QiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RS T1BfQ09MTEFUSU9OLCAiRFJPUCBDT0xMQVRJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUp CitQR19DTURUQUcoQ01EVEFHX0RST1BfQ09OU1RSQUlOVCwgIkRST1AgQ09OU1RSQUlOVCIsIHRy dWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0RST1BfQ09OVkVSU0lP TiwgIkRST1AgQ09OVkVSU0lPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRB RyhDTURUQUdfRFJPUF9EQVRBQkFTRSwgIkRST1AgREFUQUJBU0UiLCBmYWxzZSwgZmFsc2UsIGZh bHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9ET01BSU4sICJEUk9QIERPTUFJTiIs IHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9FVkVOVF9U UklHR0VSLCAiRFJPUCBFVkVOVCBUUklHR0VSIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2Up CitQR19DTURUQUcoQ01EVEFHX0RST1BfRVhURU5TSU9OLCAiRFJPUCBFWFRFTlNJT04iLCB0cnVl LCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RST1BfRk9SRUlHTl9EQVRB X1dSQVBQRVIsICJEUk9QIEZPUkVJR04gREFUQSBXUkFQUEVSIiwgdHJ1ZSwgZmFsc2UsIGZhbHNl LCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX0ZPUkVJR05fVEFCTEUsICJEUk9QIEZPUkVJ R04gVEFCTEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RS T1BfRlVOQ1RJT04sICJEUk9QIEZVTkNUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQor UEdfQ01EVEFHKENNRFRBR19EUk9QX0lOREVYLCAiRFJPUCBJTkRFWCIsIHRydWUsIGZhbHNlLCBm YWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9MQU5HVUFHRSwgIkRST1AgTEFOR1VB R0UiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RST1BfTUFU RVJJQUxJWkVEX1ZJRVcsICJEUk9QIE1BVEVSSUFMSVpFRCBWSUVXIiwgdHJ1ZSwgZmFsc2UsIGZh bHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX09QRVJBVE9SLCAiRFJPUCBPUEVSQVRP UiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9PUEVS QVRPUl9DTEFTUywgIkRST1AgT1BFUkFUT1IgQ0xBU1MiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRy dWUpCitQR19DTURUQUcoQ01EVEFHX0RST1BfT1BFUkFUT1JfRkFNSUxZLCAiRFJPUCBPUEVSQVRP UiBGQU1JTFkiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RS T1BfT1dORUQsICJEUk9QIE9XTkVEIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NN RFRBRyhDTURUQUdfRFJPUF9QT0xJQ1ksICJEUk9QIFBPTElDWSIsIHRydWUsIGZhbHNlLCBmYWxz ZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9QUk9DRURVUkUsICJEUk9QIFBST0NFRFVS RSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9QVUJM SUNBVElPTiwgIkRST1AgUFVCTElDQVRJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQor UEdfQ01EVEFHKENNRFRBR19EUk9QX1JPTEUsICJEUk9QIFJPTEUiLCBmYWxzZSwgZmFsc2UsIGZh bHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9ST1VUSU5FLCAiRFJPUCBST1VUSU5F IiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX1JVTEUs ICJEUk9QIFJVTEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFH X0RST1BfU0NIRU1BLCAiRFJPUCBTQ0hFTUEiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQ R19DTURUQUcoQ01EVEFHX0RST1BfU0VRVUVOQ0UsICJEUk9QIFNFUVVFTkNFIiwgdHJ1ZSwgZmFs c2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX1NFUlZFUiwgIkRST1AgU0VS VkVSIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX1NU QVRJU1RJQ1MsICJEUk9QIFNUQVRJU1RJQ1MiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQ R19DTURUQUcoQ01EVEFHX0RST1BfU1VCU0NSSVBUSU9OLCAiRFJPUCBTVUJTQ1JJUFRJT04iLCB0 cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX1RBQkxFLCAi RFJPUCBUQUJMRSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdf RFJPUF9UQUJMRVNQQUNFLCAiRFJPUCBUQUJMRVNQQUNFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwg ZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0RST1BfVEVYVF9TRUFSQ0hfQ09ORklHVVJBVElPTiwg IkRST1AgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1 ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9URVhUX1NFQVJDSF9ESUNUSU9OQVJZLCAiRFJPUCBU RVhUIFNFQVJDSCBESUNUSU9OQVJZIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01E VEFHKENNRFRBR19EUk9QX1RFWFRfU0VBUkNIX1BBUlNFUiwgIkRST1AgVEVYVCBTRUFSQ0ggUEFS U0VSIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX1RF WFRfU0VBUkNIX1RFTVBMQVRFLCAiRFJPUCBURVhUIFNFQVJDSCBURU1QTEFURSIsIHRydWUsIGZh bHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9UUkFOU0ZPUk0sICJEUk9Q IFRSQU5TRk9STSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdf RFJPUF9UUklHR0VSLCAiRFJPUCBUUklHR0VSIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQor UEdfQ01EVEFHKENNRFRBR19EUk9QX1RZUEUsICJEUk9QIFRZUEUiLCB0cnVlLCBmYWxzZSwgZmFs c2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RST1BfVVNFUl9NQVBQSU5HLCAiRFJPUCBVU0VS IE1BUFBJTkciLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RS T1BfVklFVywgIkRST1AgVklFVyIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRB RyhDTURUQUdfRVhFQ1VURSwgIkVYRUNVVEUiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkK K1BHX0NNRFRBRyhDTURUQUdfRVhQTEFJTiwgIkVYUExBSU4iLCBmYWxzZSwgZmFsc2UsIGZhbHNl LCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfRkVUQ0gsICJGRVRDSCIsIGZhbHNlLCBmYWxzZSwg dHJ1ZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0dSQU5ULCAiR1JBTlQiLCB0cnVlLCBmYWxz ZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0dSQU5UX1JPTEUsICJHUkFOVCBST0xF IiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0lNUE9SVF9G T1JFSUdOX1NDSEVNQSwgIklNUE9SVCBGT1JFSUdOIFNDSEVNQSIsIHRydWUsIGZhbHNlLCBmYWxz ZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfSU5TRVJULCAiSU5TRVJUIiwgZmFsc2UsIGZhbHNl LCB0cnVlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfTElTVEVOLCAiTElTVEVOIiwgZmFsc2Us IGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0xPQUQsICJMT0FEIiwgZmFs c2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0xPQ0tfVEFCTEUsICJM T0NLIFRBQkxFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFH X01FUkdFLCAiTUVSR0UiLCBmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlKQorUEdfQ01EVEFHKENN RFRBR19NT1ZFLCAiTU9WRSIsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UpCitQR19DTURUQUco Q01EVEFHX05PVElGWSwgIk5PVElGWSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdf Q01EVEFHKENNRFRBR19QUkVQQVJFLCAiUFJFUEFSRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZh bHNlKQorUEdfQ01EVEFHKENNRFRBR19QUkVQQVJFX1RSQU5TQUNUSU9OLCAiUFJFUEFSRSBUUkFO U0FDVElPTiIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19S RUFTU0lHTl9PV05FRCwgIlJFQVNTSUdOIE9XTkVEIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFs c2UpCitQR19DTURUQUcoQ01EVEFHX1JFRlJFU0hfTUFURVJJQUxJWkVEX1ZJRVcsICJSRUZSRVNI IE1BVEVSSUFMSVpFRCBWSUVXIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFH KENNRFRBR19SRUlOREVYLCAiUkVJTkRFWCIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQor UEdfQ01EVEFHKENNRFRBR19SRUxFQVNFLCAiUkVMRUFTRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2Us IGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19SRVNFVCwgIlJFU0VUIiwgZmFsc2UsIGZhbHNlLCBm YWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX1JFVk9LRSwgIlJFVk9LRSIsIHRydWUsIGZh bHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfUkVWT0tFX1JPTEUsICJSRVZPS0Ug Uk9MRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19ST0xM QkFDSywgIlJPTExCQUNLIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUco Q01EVEFHX1JPTExCQUNLX1BSRVBBUkVELCAiUk9MTEJBQ0sgUFJFUEFSRUQiLCBmYWxzZSwgZmFs c2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfU0FWRVBPSU5ULCAiU0FWRVBPSU5U IiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX1NFQ1VSSVRZ X0xBQkVMLCAiU0VDVVJJVFkgTEFCRUwiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19D TURUQUcoQ01EVEFHX1NFTEVDVCwgIlNFTEVDVCIsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2Up CitQR19DTURUQUcoQ01EVEFHX1NFTEVDVF9GT1JfS0VZX1NIQVJFLCAiU0VMRUNUIEZPUiBLRVkg U0hBUkUiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfU0VM RUNUX0ZPUl9OT19LRVlfVVBEQVRFLCAiU0VMRUNUIEZPUiBOTyBLRVkgVVBEQVRFIiwgZmFsc2Us IGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX1NFTEVDVF9GT1JfU0hBUkUs ICJTRUxFQ1QgRk9SIFNIQVJFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURU QUcoQ01EVEFHX1NFTEVDVF9GT1JfVVBEQVRFLCAiU0VMRUNUIEZPUiBVUERBVEUiLCBmYWxzZSwg ZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfU0VMRUNUX0lOVE8sICJTRUxF Q1QgSU5UTyIsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX1NF VCwgIlNFVCIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19T RVRfQ09OU1RSQUlOVFMsICJTRVQgQ09OU1RSQUlOVFMiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBm YWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfU0hPVywgIlNIT1ciLCBmYWxzZSwgZmFsc2UsIGZhbHNl LCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfU1RBUlRfVFJBTlNBQ1RJT04sICJTVEFSVCBUUkFO U0FDVElPTiIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19U UlVOQ0FURV9UQUJMRSwgIlRSVU5DQVRFIFRBQkxFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFs c2UpCitQR19DTURUQUcoQ01EVEFHX1VOTElTVEVOLCAiVU5MSVNURU4iLCBmYWxzZSwgZmFsc2Us IGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfVVBEQVRFLCAiVVBEQVRFIiwgZmFsc2Us IGZhbHNlLCB0cnVlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfVkFDVVVNLCAiVkFDVVVNIiwg ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGls cy9ldnRjYWNoZS5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvZXZ0Y2FjaGUuaAppbmRleCBkMzQwMDI2 NTE4Li45MWQ0YmRkNmIzIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9ldnRjYWNoZS5o CisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2V2dGNhY2hlLmgKQEAgLTIyLDcgKzIyLDggQEAgdHlw ZWRlZiBlbnVtCiAJRVZUX0RETENvbW1hbmRTdGFydCwKIAlFVlRfRERMQ29tbWFuZEVuZCwKIAlF VlRfU1FMRHJvcCwKLQlFVlRfVGFibGVSZXdyaXRlCisJRVZUX1RhYmxlUmV3cml0ZSwKKwlFVlRf VGFibGVJbml0V3JpdGUKIH0gRXZlbnRUcmlnZ2VyRXZlbnQ7CiAKIHR5cGVkZWYgc3RydWN0CmRp ZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBl Y3RlZC9jcmVhdGVfdGFibGUub3V0IGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNl X3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX3RhYmxlLm91dAppbmRleCA5ZWVhYTFjY2MxLi44ZTZm ZmE5ODkzIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVn cmVzcy9leHBlY3RlZC9jcmVhdGVfdGFibGUub3V0CisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVz dF9kZGxfZGVwYXJzZV9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV90YWJsZS5vdXQKQEAgLTIwLDYg KzIwLDEzIEBAIE5PVElDRTogIHJlLWZvcm1lZCBjb21tYW5kOiBBTFRFUiBUQUJMRSBwdWJsaWMu Y3RsdDEgQUxURVIgQ09MVU1OIGEgU0VUIFNUT1JBR0UKIEFMVEVSIFRBQkxFIGN0bHQxIEFMVEVS IENPTFVNTiBiIFNFVCBTVE9SQUdFIEVYVEVSTkFMOwogTk9USUNFOiAgZGVwYXJzZWQganNvbjog eyJmbXQiOiAiQUxURVIgJXtvYmp0eXBlfXMgJXtpZGVudGl0eX1EICV7c3ViY21kczosIH1zIiwg Im9ianR5cGUiOiAiVEFCTEUiLCAic3ViY21kcyI6IFt7ImZtdCI6ICJBTFRFUiBDT0xVTU4gJXtj b2x1bW59SSBTRVQgU1RPUkFHRSAle3N0b3JhZ2V9cyIsICJ0eXBlIjogInNldCBzdG9yYWdlIiwg ImNvbHVtbiI6ICJiIiwgInN0b3JhZ2UiOiAiZXh0ZXJuYWwifV0sICJpZGVudGl0eSI6IHsib2Jq bmFtZSI6ICJjdGx0MSIsICJzY2hlbWFuYW1lIjogInB1YmxpYyJ9fQogTk9USUNFOiAgcmUtZm9y bWVkIGNvbW1hbmQ6IEFMVEVSIFRBQkxFIHB1YmxpYy5jdGx0MSBBTFRFUiBDT0xVTU4gYiBTRVQg U1RPUkFHRSBleHRlcm5hbAorQ1JFQVRFIFRBQkxFIGN0bHQxX2xpa2UgKExJS0UgY3RsdDEgSU5D TFVESU5HIEFMTCk7CitOT1RJQ0U6ICBkZXBhcnNlZCBqc29uOiB7ImZtdCI6ICJDUkVBVEUgJXtw ZXJzaXN0ZW5jZX1zIFRBQkxFICV7aWZfbm90X2V4aXN0c31zICV7aWRlbnRpdHl9RCAoJXt0YWJs ZV9lbGVtZW50czosIH1zKSAle2luaGVyaXRzfXMgJXt0YWJsZXNwYWNlfXMgJXtvbl9jb21taXR9 cyAle3BhcnRpdGlvbl9ieX1zICV7YWNjZXNzX21ldGhvZH1zICV7d2l0aF9jbGF1c2V9cyIsICJp ZGVudGl0eSI6IHsib2JqbmFtZSI6ICJjdGx0MV9saWtlIiwgInNjaGVtYW5hbWUiOiAicHVibGlj In0sICJpbmhlcml0cyI6IHsiZm10IjogIklOSEVSSVRTICgle3BhcmVudHM6LCB9RCkiLCAicGFy ZW50cyI6IG51bGwsICJwcmVzZW50IjogZmFsc2V9LCAib25fY29tbWl0IjogeyJmbXQiOiAiT04g Q09NTUlUICV7b25fY29tbWl0X3ZhbHVlfXMiLCAicHJlc2VudCI6IGZhbHNlLCAib25fY29tbWl0 X3ZhbHVlIjogbnVsbH0sICJ0YWJsZXNwYWNlIjogeyJmbXQiOiAiVEFCTEVTUEFDRSAle3RhYmxl c3BhY2V9SSIsICJwcmVzZW50IjogZmFsc2UsICJ0YWJsZXNwYWNlIjogbnVsbH0sICJwZXJzaXN0 ZW5jZSI6ICIiLCAid2l0aF9jbGF1c2UiOiB7ImZtdCI6ICJXSVRIIiwgInByZXNlbnQiOiBmYWxz ZX0sICJwYXJ0aXRpb25fYnkiOiB7ImZtdCI6ICJQQVJUSVRJT04gQlkgJXtkZWZpbml0aW9ufXMi LCAicHJlc2VudCI6IGZhbHNlLCAiZGVmaW5pdGlvbiI6IG51bGx9LCAiYWNjZXNzX21ldGhvZCI6 IHsiZm10IjogIlVTSU5HICV7YWNjZXNzX21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImFj Y2Vzc19tZXRob2QiOiBudWxsfSwgImlmX25vdF9leGlzdHMiOiAiIiwgInRhYmxlX2VsZW1lbnRz IjogW3siZm10IjogIiV7bmFtZX1JICV7Y29sdHlwZX1UIFNUT1JBR0UgJXtjb2xzdG9yYWdlfXMg JXtjb21wcmVzc2lvbn1zICV7Y29sbGF0aW9ufXMgJXtub3RfbnVsbH1zICV7ZGVmYXVsdH1zICV7 Z2VuZXJhdGVkX2NvbHVtbn1zIiwgIm5hbWUiOiAiYSIsICJ0eXBlIjogImNvbHVtbiIsICJjb2x0 eXBlIjogeyJ0eXBtb2QiOiAiIiwgInR5cGFycmF5IjogZmFsc2UsICJ0eXBlbmFtZSI6ICJ0ZXh0 IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9LCAiZGVmYXVsdCI6IHsiZm10IjogIkRFRkFV TFQiLCAicHJlc2VudCI6IGZhbHNlfSwgIm5vdF9udWxsIjogIiIsICJjb2xsYXRpb24iOiB7ImZt dCI6ICJDT0xMQVRFICV7bmFtZX1EIiwgIm5hbWUiOiB7Im9iam5hbWUiOiAiZGVmYXVsdCIsICJz Y2hlbWFuYW1lIjogInBnX2NhdGFsb2cifX0sICJjb2xzdG9yYWdlIjogIm1haW4iLCAiY29tcHJl c3Npb24iOiB7ImZtdCI6ICJDT01QUkVTU0lPTiAle2NvbXByZXNzaW9uX21ldGhvZH1JIiwgInBy ZXNlbnQiOiBmYWxzZSwgImNvbXByZXNzaW9uX21ldGhvZCI6IG51bGx9LCAiZ2VuZXJhdGVkX2Nv bHVtbiI6IHsiZm10IjogIkdFTkVSQVRFRCBBTFdBWVMgQVMiLCAicHJlc2VudCI6IGZhbHNlfX0s IHsiZm10IjogIiV7bmFtZX1JICV7Y29sdHlwZX1UIFNUT1JBR0UgJXtjb2xzdG9yYWdlfXMgJXtj b21wcmVzc2lvbn1zICV7Y29sbGF0aW9ufXMgJXtub3RfbnVsbH1zICV7ZGVmYXVsdH1zICV7Z2Vu ZXJhdGVkX2NvbHVtbn1zIiwgIm5hbWUiOiAiYiIsICJ0eXBlIjogImNvbHVtbiIsICJjb2x0eXBl IjogeyJ0eXBtb2QiOiAiIiwgInR5cGFycmF5IjogZmFsc2UsICJ0eXBlbmFtZSI6ICJ0ZXh0Iiwg InNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9LCAiZGVmYXVsdCI6IHsiZm10IjogIkRFRkFVTFQi LCAicHJlc2VudCI6IGZhbHNlfSwgIm5vdF9udWxsIjogIiIsICJjb2xsYXRpb24iOiB7ImZtdCI6 ICJDT0xMQVRFICV7bmFtZX1EIiwgIm5hbWUiOiB7Im9iam5hbWUiOiAiZGVmYXVsdCIsICJzY2hl bWFuYW1lIjogInBnX2NhdGFsb2cifX0sICJjb2xzdG9yYWdlIjogImV4dGVybmFsIiwgImNvbXBy ZXNzaW9uIjogeyJmbXQiOiAiQ09NUFJFU1NJT04gJXtjb21wcmVzc2lvbl9tZXRob2R9SSIsICJw cmVzZW50IjogZmFsc2UsICJjb21wcmVzc2lvbl9tZXRob2QiOiBudWxsfSwgImdlbmVyYXRlZF9j b2x1bW4iOiB7ImZtdCI6ICJHRU5FUkFURUQgQUxXQVlTIEFTIiwgInByZXNlbnQiOiBmYWxzZX19 LCB7ImZtdCI6ICJDT05TVFJBSU5UICV7bmFtZX1JICV7ZGVmaW5pdGlvbn1zIiwgIm5hbWUiOiAi Y3RsdDFfYV9jaGVjayIsICJ0eXBlIjogImNvbnN0cmFpbnQiLCAiY29udHlwZSI6ICJjaGVjayIs ICJkZWZpbml0aW9uIjogIkNIRUNLICgocGdfY2F0YWxvZy5sZW5ndGgoYSkgT1BFUkFUT1IocGdf Y2F0YWxvZy4+KSAyKSkifSwgeyJmbXQiOiAiQ09OU1RSQUlOVCAle25hbWV9SSAle2RlZmluaXRp b259cyIsICJuYW1lIjogImN0bHQxX2xpa2VfcGtleSIsICJ0eXBlIjogImNvbnN0cmFpbnQiLCAi Y29udHlwZSI6ICJwcmltYXJ5IGtleSIsICJkZWZpbml0aW9uIjogIlBSSU1BUlkgS0VZIChhKSJ9 XX0KK05PVElDRTogIHJlLWZvcm1lZCBjb21tYW5kOiBDUkVBVEUgIFRBQkxFICBwdWJsaWMuY3Rs dDFfbGlrZSAoYSBwZ19jYXRhbG9nLnRleHQgU1RPUkFHRSBtYWluICBDT0xMQVRFIHBnX2NhdGFs b2cuImRlZmF1bHQiICAgLCBiIHBnX2NhdGFsb2cudGV4dCBTVE9SQUdFIGV4dGVybmFsICBDT0xM QVRFIHBnX2NhdGFsb2cuImRlZmF1bHQiICAgLCBDT05TVFJBSU5UIGN0bHQxX2FfY2hlY2sgQ0hF Q0sgKChwZ19jYXRhbG9nLmxlbmd0aChhKSBPUEVSQVRPUihwZ19jYXRhbG9nLj4pIDIpKSwgQ09O U1RSQUlOVCBjdGx0MV9saWtlX3BrZXkgUFJJTUFSWSBLRVkgKGEpKSAgICAgIAorTk9USUNFOiAg ZGVwYXJzZWQganNvbjogPE5VTEw+CitOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDogPE5VTEw+ CitOT1RJQ0U6ICBkZXBhcnNlZCBqc29uOiA8TlVMTD4KK05PVElDRTogIHJlLWZvcm1lZCBjb21t YW5kOiA8TlVMTD4KIC0tIFRlc3QgZm9yZWlnbiBrZXkgY29uc3RyYWludCBpcyBoYW5kbGVkIGlu IGEgZm9sbG93aW5nIEFMVEVSIFRBQkxFIEFERCBDT05TVFJBSU5UIEZPUkVJR04gS0VZIFJFRkVS RU5DRVMgc3ViY29tbWFuZAogQ1JFQVRFIFRBQkxFIHByb2R1Y3QgKGlkIGludCBQUklNQVJZIEtF WSwgbmFtZSB0ZXh0KTsKIE5PVElDRTogIGRlcGFyc2VkIGpzb246IHsiZm10IjogIkNSRUFURSAl e3BlcnNpc3RlbmNlfXMgVEFCTEUgJXtpZl9ub3RfZXhpc3RzfXMgJXtpZGVudGl0eX1EICgle3Rh YmxlX2VsZW1lbnRzOiwgfXMpICV7aW5oZXJpdHN9cyAle3RhYmxlc3BhY2V9cyAle29uX2NvbW1p dH1zICV7cGFydGl0aW9uX2J5fXMgJXthY2Nlc3NfbWV0aG9kfXMgJXt3aXRoX2NsYXVzZX1zIiwg ImlkZW50aXR5IjogeyJvYmpuYW1lIjogInByb2R1Y3QiLCAic2NoZW1hbmFtZSI6ICJwdWJsaWMi fSwgImluaGVyaXRzIjogeyJmbXQiOiAiSU5IRVJJVFMgKCV7cGFyZW50czosIH1EKSIsICJwYXJl bnRzIjogbnVsbCwgInByZXNlbnQiOiBmYWxzZX0sICJvbl9jb21taXQiOiB7ImZtdCI6ICJPTiBD T01NSVQgJXtvbl9jb21taXRfdmFsdWV9cyIsICJwcmVzZW50IjogZmFsc2UsICJvbl9jb21taXRf dmFsdWUiOiBudWxsfSwgInRhYmxlc3BhY2UiOiB7ImZtdCI6ICJUQUJMRVNQQUNFICV7dGFibGVz cGFjZX1JIiwgInByZXNlbnQiOiBmYWxzZSwgInRhYmxlc3BhY2UiOiBudWxsfSwgInBlcnNpc3Rl bmNlIjogIiIsICJ3aXRoX2NsYXVzZSI6IHsiZm10IjogIldJVEgiLCAicHJlc2VudCI6IGZhbHNl fSwgInBhcnRpdGlvbl9ieSI6IHsiZm10IjogIlBBUlRJVElPTiBCWSAle2RlZmluaXRpb259cyIs ICJwcmVzZW50IjogZmFsc2UsICJkZWZpbml0aW9uIjogbnVsbH0sICJhY2Nlc3NfbWV0aG9kIjog eyJmbXQiOiAiVVNJTkcgJXthY2Nlc3NfbWV0aG9kfUkiLCAicHJlc2VudCI6IGZhbHNlLCAiYWNj ZXNzX21ldGhvZCI6IG51bGx9LCAiaWZfbm90X2V4aXN0cyI6ICIiLCAidGFibGVfZWxlbWVudHMi OiBbeyJmbXQiOiAiJXtuYW1lfUkgJXtjb2x0eXBlfVQgU1RPUkFHRSAle2NvbHN0b3JhZ2V9cyAl e2NvbXByZXNzaW9ufXMgJXtjb2xsYXRpb259cyAle25vdF9udWxsfXMgJXtkZWZhdWx0fXMgJXtn ZW5lcmF0ZWRfY29sdW1ufXMiLCAibmFtZSI6ICJpZCIsICJ0eXBlIjogImNvbHVtbiIsICJjb2x0 eXBlIjogeyJ0eXBtb2QiOiAiIiwgInR5cGFycmF5IjogZmFsc2UsICJ0eXBlbmFtZSI6ICJpbnQ0 IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9LCAiZGVmYXVsdCI6IHsiZm10IjogIkRFRkFV TFQiLCAicHJlc2VudCI6IGZhbHNlfSwgIm5vdF9udWxsIjogIiIsICJjb2xsYXRpb24iOiB7ImZt dCI6ICJDT0xMQVRFIiwgInByZXNlbnQiOiBmYWxzZX0sICJjb2xzdG9yYWdlIjogInBsYWluIiwg ImNvbXByZXNzaW9uIjogeyJmbXQiOiAiQ09NUFJFU1NJT04gJXtjb21wcmVzc2lvbl9tZXRob2R9 SSIsICJwcmVzZW50IjogZmFsc2UsICJjb21wcmVzc2lvbl9tZXRob2QiOiBudWxsfSwgImdlbmVy YXRlZF9jb2x1bW4iOiB7ImZtdCI6ICJHRU5FUkFURUQgQUxXQVlTIEFTIiwgInByZXNlbnQiOiBm YWxzZX19LCB7ImZtdCI6ICIle25hbWV9SSAle2NvbHR5cGV9VCBTVE9SQUdFICV7Y29sc3RvcmFn ZX1zICV7Y29tcHJlc3Npb259cyAle2NvbGxhdGlvbn1zICV7bm90X251bGx9cyAle2RlZmF1bHR9 cyAle2dlbmVyYXRlZF9jb2x1bW59cyIsICJuYW1lIjogIm5hbWUiLCAidHlwZSI6ICJjb2x1bW4i LCAiY29sdHlwZSI6IHsidHlwbW9kIjogIiIsICJ0eXBhcnJheSI6IGZhbHNlLCAidHlwZW5hbWUi OiAidGV4dCIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2cifSwgImRlZmF1bHQiOiB7ImZtdCI6 ICJERUZBVUxUIiwgInByZXNlbnQiOiBmYWxzZX0sICJub3RfbnVsbCI6ICIiLCAiY29sbGF0aW9u IjogeyJmbXQiOiAiQ09MTEFURSAle25hbWV9RCIsICJuYW1lIjogeyJvYmpuYW1lIjogImRlZmF1 bHQiLCAic2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn19LCAiY29sc3RvcmFnZSI6ICJleHRlbmRl ZCIsICJjb21wcmVzc2lvbiI6IHsiZm10IjogIkNPTVBSRVNTSU9OICV7Y29tcHJlc3Npb25fbWV0 aG9kfUkiLCAicHJlc2VudCI6IGZhbHNlLCAiY29tcHJlc3Npb25fbWV0aG9kIjogbnVsbH0sICJn ZW5lcmF0ZWRfY29sdW1uIjogeyJmbXQiOiAiR0VORVJBVEVEIEFMV0FZUyBBUyIsICJwcmVzZW50 IjogZmFsc2V9fSwgeyJmbXQiOiAiQ09OU1RSQUlOVCAle25hbWV9SSAle2RlZmluaXRpb259cyIs ICJuYW1lIjogInByb2R1Y3RfcGtleSIsICJ0eXBlIjogImNvbnN0cmFpbnQiLCAiY29udHlwZSI6 ICJwcmltYXJ5IGtleSIsICJkZWZpbml0aW9uIjogIlBSSU1BUlkgS0VZIChpZCkifV19CmRpZmYg LS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9zcWwvY3Jl YXRlX3RhYmxlLnNxbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNz L3NxbC9jcmVhdGVfdGFibGUuc3FsCmluZGV4IDk5N2QyZjU0ZmIuLjFjNWYwYzIwNmEgMTAwNjQ0 Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC9jcmVh dGVfdGFibGUuc3FsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdy ZXNzL3NxbC9jcmVhdGVfdGFibGUuc3FsCkBAIC05LDYgKzksNyBAQCBDUkVBVEUgVU5JUVVFIElO REVYIGNvdmVyaW5nX2luZGV4IG9uIHNpbXBsZV90YWJsZSAoaWQpIElOQ0xVREUgKG5hbWUpOwog Q1JFQVRFIFRBQkxFIGN0bHQxIChhIHRleHQgQ0hFQ0sgKGxlbmd0aChhKSA+IDIpIFBSSU1BUlkg S0VZLCBiIHRleHQpOwogQUxURVIgVEFCTEUgY3RsdDEgQUxURVIgQ09MVU1OIGEgU0VUIFNUT1JB R0UgTUFJTjsKIEFMVEVSIFRBQkxFIGN0bHQxIEFMVEVSIENPTFVNTiBiIFNFVCBTVE9SQUdFIEVY VEVSTkFMOworQ1JFQVRFIFRBQkxFIGN0bHQxX2xpa2UgKExJS0UgY3RsdDEgSU5DTFVESU5HIEFM TCk7CiAKIC0tIFRlc3QgZm9yZWlnbiBrZXkgY29uc3RyYWludCBpcyBoYW5kbGVkIGluIGEgZm9s bG93aW5nIEFMVEVSIFRBQkxFIEFERCBDT05TVFJBSU5UIEZPUkVJR04gS0VZIFJFRkVSRU5DRVMg c3ViY29tbWFuZAogQ1JFQVRFIFRBQkxFIHByb2R1Y3QgKGlkIGludCBQUklNQVJZIEtFWSwgbmFt ZSB0ZXh0KTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHNxbC5vdXQg Yi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwub3V0CmluZGV4IDhmYzYyY2ViZDIuLmQ4 YWZmYWU2OTggMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHNxbC5vdXQK KysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wc3FsLm91dApAQCAtNjE5NCw5ICs2MTk0 LDkgQEAgTGlzdCBvZiBzY2hlbWFzCiAoMCByb3dzKQogCiBcZFJwICJuby5zdWNoLnB1YmxpY2F0 aW9uIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMK LSBOYW1lIHwgT3duZXIgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMK KyBOYW1lIHwgT3duZXIgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0r LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQogKDAgcm93cykKIAogXGRS cyAibm8uc3VjaC5zdWJzY3JpcHRpb24iCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL3B1YmxpY2F0aW9uLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGlj YXRpb24ub3V0CmluZGV4IDQyN2Y4N2VhMDcuLmIyMzE3ZTc5YmUgMTAwNjQ0Ci0tLSBhL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0CkBAIC0zMCwyMCArMzAsMjAgQEAgRVJST1I6ICBj b25mbGljdGluZyBvciByZWR1bmRhbnQgb3B0aW9ucwogTElORSAxOiAuLi51Yl94eHggV0lUSCAo cHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSAndHJ1ZScsIHB1Ymxpc2hfdmkuLi4KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBe CiBcZFJwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlz dCBvZiBwdWJsaWNhdGlvbnMKLSAgICAgICAgTmFtZSAgICAgICAgfCAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLQotIHRlc3RwaWJfaW5zX3RydW5jdCB8IHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBm ICAgICAgICAgfCBmCi0gdGVzdHB1Yl9kZWZhdWx0ICAgIHwgcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAg ICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucworICAgICAgICBOYW1lICAgICAgICB8ICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMg fCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tCisgdGVzdHBpYl9pbnNfdHJ1bmN0IHwgcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKKyB0ZXN0cHViX2RlZmF1bHQg ICAgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBm ICAgICAgICAgIHwgZiAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgog KDIgcm93cykKIAogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9kZWZhdWx0IFNFVCAocHVibGlz aCA9ICdpbnNlcnQsIHVwZGF0ZSwgZGVsZXRlJyk7CiBcZFJwCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKLSAgICAgICAg TmFtZSAgICAgICAgfCAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHRlc3Rw aWJfaW5zX3RydW5jdCB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0 ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCi0gdGVzdHB1Yl9kZWZh dWx0ICAgIHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9u cworICAgICAgICBOYW1lICAgICAgICB8ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0 YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgdGVz dHBpYl9pbnNfdHJ1bmN0IHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8 IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYg ICAgICAgICB8IGYKKyB0ZXN0cHViX2RlZmF1bHQgICAgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwgZgogKDIgcm93cykKIAogLS0tIGFkZGluZyB0YWJs ZXMKQEAgLTg3LDEwICs4NywxMCBAQCBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogLS0gc2hv dWxkIGJlIGFibGUgdG8gYWRkIHNjaGVtYSB0byAnRk9SIFRBQkxFJyBwdWJsaWNhdGlvbgogQUxU RVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBBREQgVEFCTEVTIElOIFNDSEVNQSBwdWJf dGVzdDsKIFxkUnArIHRlc3RwdWJfZm9ydGFibGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZQotICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0 ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZQorICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVz c19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlczoKICAg ICAicHVibGljLnRlc3RwdWJfdGJsMSIKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CkBAIC05OSwyMCAr OTksMjAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIC0tIHNob3VsZCBiZSBhYmxlIHRvIGRyb3Ag c2NoZW1hIGZyb20gJ0ZPUiBUQUJMRScgcHVibGljYXRpb24KIEFMVEVSIFBVQkxJQ0FUSU9OIHRl c3RwdWJfZm9ydGFibGUgRFJPUCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0OwogXGRScCsgdGVz dHB1Yl9mb3J0YWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1 Yl90YmwxIgogCiAtLSBzaG91bGQgYmUgYWJsZSB0byBzZXQgc2NoZW1hIHRvICdGT1IgVEFCTEUn IHB1YmxpY2F0aW9uCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlIFNFVCBUQUJM RVMgSU4gU0NIRU1BIHB1Yl90ZXN0OwogXGRScCsgdGVzdHB1Yl9mb3J0YWJsZQotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCi0gICAg ICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwg RGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxl CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFi bGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAg ICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAg IHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QiCiAKQEAgLTEyMywxMCAr MTIzLDEwIEBAIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnNjaGVtYSBGT1IgVEFCTEVT IElOIFNDSEVNQSBwdWJfdGVzdDsKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX2Zvcl90Ymxf c2NoZW1hIEZPUiBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0LCBUQUJMRSBwdWJfdGVzdC50ZXN0 cHViX25vcGs7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogXGRScCsgdGVzdHB1Yl9mb3Jf dGJsX3NjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0 cHViX2Zvcl90Ymxfc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNh dGlvbiB0ZXN0cHViX2Zvcl90Ymxfc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwg RGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJfdGVzdC50 ZXN0cHViX25vcGsiCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgpAQCAtMTM1LDEwICsxMzUsMTAgQEAg VGFibGVzIGZyb20gc2NoZW1hczoKIC0tIHNob3VsZCBiZSBhYmxlIHRvIGFkZCBhIHRhYmxlIG9m IHRoZSBzYW1lIHNjaGVtYSB0byB0aGUgc2NoZW1hIHB1YmxpY2F0aW9uCiBBTFRFUiBQVUJMSUNB VElPTiB0ZXN0cHViX2ZvcnNjaGVtYSBBREQgVEFCTEUgcHViX3Rlc3QudGVzdHB1Yl9ub3BrOwog XGRScCsgdGVzdHB1Yl9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBW aWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVi X3Rlc3QudGVzdHB1Yl9ub3BrIgogVGFibGVzIGZyb20gc2NoZW1hczoKQEAgLTE0NywxMCArMTQ3 LDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAtLSBzaG91bGQgYmUgYWJsZSB0byBkcm9wIHRo ZSB0YWJsZQogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3JzY2hlbWEgRFJPUCBUQUJMRSBw dWJfdGVzdC50ZXN0cHViX25vcGs7CiBcZFJwKyB0ZXN0cHViX2ZvcnNjaGVtYQotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yc2NoZW1hCi0gICAg ICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwg RGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yc2NoZW1h CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFi bGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAg ICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAg IHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QiCiAKQEAgLTE2MSwxMCAr MTYxLDEwIEBAIEVSUk9SOiAgcmVsYXRpb24gInRlc3RwdWJfbm9wayIgaXMgbm90IHBhcnQgb2Yg dGhlIHB1YmxpY2F0aW9uCiAtLSBzaG91bGQgYmUgYWJsZSB0byBzZXQgdGFibGUgdG8gc2NoZW1h IHB1YmxpY2F0aW9uCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnNjaGVtYSBTRVQgVEFC TEUgcHViX3Rlc3QudGVzdHB1Yl9ub3BrOwogXGRScCsgdGVzdHB1Yl9mb3JzY2hlbWEKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVtYQot ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNj aGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8 IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBW aWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYg ICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgICB8IGYKIFRhYmxlczoKICAgICAicHViX3Rlc3QudGVzdHB1Yl9ub3BrIgogCkBAIC0xODYs MTAgKzE4NiwxMCBAQCBQdWJsaWNhdGlvbnM6CiAgICAgInRlc3RwdWJfZm9yYWxsdGFibGVzIgog CiBcZFJwKyB0ZXN0cHViX2ZvcmFsbHRhYmxlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JhbGx0YWJsZXMKLSAgICAgICAgICBPd25lciAgICAg ICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNh dGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJl Z3Jlc3NfcHVibGljYXRpb25fdXNlciB8IHQgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcmFsbHRhYmxlcworICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgdCAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKICgxIHJvdykK IAogRFJPUCBUQUJMRSB0ZXN0cHViX3RibDI7CkBAIC0yMDEsMTkgKzIwMSwxOSBAQCBDUkVBVEUg UFVCTElDQVRJT04gdGVzdHB1YjMgRk9SIFRBQkxFIHRlc3RwdWJfdGJsMzsKIENSRUFURSBQVUJM SUNBVElPTiB0ZXN0cHViNCBGT1IgVEFCTEUgT05MWSB0ZXN0cHViX3RibDM7CiBSRVNFVCBjbGll bnRfbWluX21lc3NhZ2VzOwogXGRScCsgdGVzdHB1YjMKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzCi0gICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjMKKyAgICAgICAgICBPd25lciAgICAg ICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1 YmxpYy50ZXN0cHViX3RibDMiCiAgICAgInB1YmxpYy50ZXN0cHViX3RibDNhIgogCiBcZFJwKyB0 ZXN0cHViNAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24g dGVzdHB1YjQKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0 cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYg ICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViNAorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwg RERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0 ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfdGJsMyIKIApAQCAt MjM0LDEwICsyMzQsMTAgQEAgVVBEQVRFIHRlc3RwdWJfcGFydGVkMSBTRVQgYSA9IDE7CiAtLSBv bmx5IHBhcmVudCBpcyBsaXN0ZWQgYXMgYmVpbmcgaW4gcHVibGljYXRpb24sIG5vdCB0aGUgcGFy dGl0aW9uCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnBhcnRlZCBBREQgVEFCTEUgdGVz dHB1Yl9wYXJ0ZWQ7CiBcZFJwKyB0ZXN0cHViX2ZvcnBhcnRlZAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ycGFydGVkCi0gICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ycGFydGVkCisgICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0K KyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAg ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFi bGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl9wYXJ0ZWQiCiAKQEAgLTI1MiwxMCArMjUyLDEwIEBA IEFMVEVSIFRBQkxFIHRlc3RwdWJfcGFydGVkIERFVEFDSCBQQVJUSVRJT04gdGVzdHB1Yl9wYXJ0 ZWQxOwogVVBEQVRFIHRlc3RwdWJfcGFydGVkMSBTRVQgYSA9IDE7CiBBTFRFUiBQVUJMSUNBVElP TiB0ZXN0cHViX2ZvcnBhcnRlZCBTRVQgKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1 ZSk7CiBcZFJwKyB0ZXN0cHViX2ZvcnBhcnRlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ycGFydGVkCi0gICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICAgIHwgdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ycGFydGVkCisgICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMg fCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgdAogVGFibGVzOgogICAg ICJwdWJsaWMudGVzdHB1Yl9wYXJ0ZWQiCiAKQEAgLTI4NCwxMCArMjg0LDEwIEBAIFNFVCBjbGll bnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViNSBG T1IgVEFCTEUgdGVzdHB1Yl9yZl90YmwxLCB0ZXN0cHViX3JmX3RibDIgV0hFUkUgKGMgPD4gJ3Rl c3QnIEFORCBkIDwgNSkgV0lUSCAocHVibGlzaCA9ICdpbnNlcnQnKTsKIFJFU0VUIGNsaWVudF9t aW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0cHViNQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUKLSAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAg ICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQorICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAg fCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGlj LnRlc3RwdWJfcmZfdGJsMSIKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMiIgV0hFUkUgKChj IDw+ICd0ZXN0Jzo6dGV4dCkgQU5EIChkIDwgNSkpCkBAIC0zMDAsMTAgKzMwMCwxMCBAQCBUYWJs ZXM6CiAKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI1IEFERCBUQUJMRSB0ZXN0cHViX3JmX3Ri bDMgV0hFUkUgKGUgPiAxMDAwIEFORCBlIDwgMjAwMCk7CiBcZFJwKyB0ZXN0cHViNQotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUKLSAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQorICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERE THMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYK IFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMSIKICAgICAicHVibGljLnRlc3Rw dWJfcmZfdGJsMiIgV0hFUkUgKChjIDw+ICd0ZXN0Jzo6dGV4dCkgQU5EIChkIDwgNSkpCkBAIC0z MTksMTAgKzMxOSwxMCBAQCBQdWJsaWNhdGlvbnM6CiAKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3Rw dWI1IERST1AgVEFCTEUgdGVzdHB1Yl9yZl90YmwyOwogXGRScCsgdGVzdHB1YjUKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1Ci0gICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUKKyAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYg ICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCiBU YWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDEiCiAgICAgInB1YmxpYy50ZXN0cHVi X3JmX3RibDMiIFdIRVJFICgoZSA+IDEwMDApIEFORCAoZSA8IDIwMDApKQpAQCAtMzMwLDEwICsz MzAsMTAgQEAgVGFibGVzOgogLS0gcmVtb3ZlIHRlc3RwdWJfcmZfdGJsMSBhbmQgYWRkIHRlc3Rw dWJfcmZfdGJsMyBhZ2FpbiAoYW5vdGhlciBXSEVSRSBleHByZXNzaW9uKQogQUxURVIgUFVCTElD QVRJT04gdGVzdHB1YjUgU0VUIFRBQkxFIHRlc3RwdWJfcmZfdGJsMyBXSEVSRSAoZSA+IDMwMCBB TkQgZSA8IDUwMCk7CiBcZFJwKyB0ZXN0cHViNQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUKLSAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAg ICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQorICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAg fCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGlj LnRlc3RwdWJfcmZfdGJsMyIgV0hFUkUgKChlID4gMzAwKSBBTkQgKGUgPCA1MDApKQogCkBAIC0z NjYsMTAgKzM2NiwxMCBAQCBTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7CiBDUkVB VEUgUFVCTElDQVRJT04gdGVzdHB1Yl9zeW50YXgxIEZPUiBUQUJMRSB0ZXN0cHViX3JmX3RibDEs IE9OTFkgdGVzdHB1Yl9yZl90YmwzIFdIRVJFIChlIDwgOTk5KSBXSVRIIChwdWJsaXNoID0gJ2lu c2VydCcpOwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKIFxkUnArIHRlc3RwdWJfc3ludGF4 MQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX3N5 bnRheDEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWJfc3ludGF4MQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwg RERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0 ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8 IGYgICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMSIKICAg ICAicHVibGljLnRlc3RwdWJfcmZfdGJsMyIgV0hFUkUgKGUgPCA5OTkpCkBAIC0zNzksMTAgKzM3 OSwxMCBAQCBTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7CiBDUkVBVEUgUFVCTElD QVRJT04gdGVzdHB1Yl9zeW50YXgyIEZPUiBUQUJMRSB0ZXN0cHViX3JmX3RibDEsIHRlc3RwdWJf cmZfc2NoZW1hMS50ZXN0cHViX3JmX3RibDUgV0hFUkUgKGggPCA5OTkpIFdJVEggKHB1Ymxpc2gg PSAnaW5zZXJ0Jyk7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogXGRScCsgdGVzdHB1Yl9z eW50YXgyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWJfc3ludGF4MgotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24g dGVzdHB1Yl9zeW50YXgyCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAg ICAgIHwgZiAgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl9yZl90Ymwx IgogICAgICJ0ZXN0cHViX3JmX3NjaGVtYTEudGVzdHB1Yl9yZl90Ymw1IiBXSEVSRSAoaCA8IDk5 OSkKQEAgLTQ5NywxMCArNDk3LDEwIEBAIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViNiBGT1Ig VEFCTEVTIElOIFNDSEVNQSB0ZXN0cHViX3JmX3NjaGVtYTI7CiBBTFRFUiBQVUJMSUNBVElPTiB0 ZXN0cHViNiBTRVQgVEFCTEVTIElOIFNDSEVNQSB0ZXN0cHViX3JmX3NjaGVtYTIsIFRBQkxFIHRl c3RwdWJfcmZfc2NoZW1hMi50ZXN0cHViX3JmX3RibDYgV0hFUkUgKGkgPCA5OSk7CiBSRVNFVCBj bGllbnRfbWluX21lc3NhZ2VzOwogXGRScCsgdGVzdHB1YjYKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI2Ci0gICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5j YXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjYKKyAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAg InRlc3RwdWJfcmZfc2NoZW1hMi50ZXN0cHViX3JmX3RibDYiIFdIRVJFIChpIDwgOTkpCiBUYWJs ZXMgZnJvbSBzY2hlbWFzOgpAQCAtNzE0LDEwICs3MTQsMTAgQEAgQ1JFQVRFIFBVQkxJQ0FUSU9O IHRlc3RwdWJfdGFibGVfaW5zIFdJVEggKHB1Ymxpc2ggPSAnaW5zZXJ0LCB0cnVuY2F0ZScpOwog UkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfdGFi bGVfaW5zIEFERCBUQUJMRSB0ZXN0cHViX3RibDUgKGEpOwkJLS0gb2sKIFxkUnArIHRlc3RwdWJf dGFibGVfaW5zCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVz dHB1Yl90YWJsZV9pbnMKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwg SW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl ciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCB0ICAgICAgICAg fCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1Yl90YWJsZV9pbnMKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8 IGYgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3Ri bDUiIChhKQogCkBAIC04OTEsMTAgKzg5MSwxMCBAQCBDUkVBVEUgVEFCTEUgdGVzdHB1Yl90Ymxf Ym90aF9maWx0ZXJzIChhIGludCwgYiBpbnQsIGMgaW50LCBQUklNQVJZIEtFWSAoYSxjKSk7CiBB TFRFUiBUQUJMRSB0ZXN0cHViX3RibF9ib3RoX2ZpbHRlcnMgUkVQTElDQSBJREVOVElUWSBVU0lO RyBJTkRFWCB0ZXN0cHViX3RibF9ib3RoX2ZpbHRlcnNfcGtleTsKIEFMVEVSIFBVQkxJQ0FUSU9O IHRlc3RwdWJfYm90aF9maWx0ZXJzIEFERCBUQUJMRSB0ZXN0cHViX3RibF9ib3RoX2ZpbHRlcnMg KGEsYykgV0hFUkUgKGMgIT0gMSk7CiBcZFJwKyB0ZXN0cHViX2JvdGhfZmlsdGVycwotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9ib3RoX2ZpbHRlcnMK LSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2JvdGhf ZmlsdGVycworICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERM cyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8 IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfdGJsX2JvdGhfZmlsdGVy cyIgKGEsIGMpIFdIRVJFIChjIDw+IDEpCiAKQEAgLTEwOTksMTAgKzEwOTksMTAgQEAgRVJST1I6 ICByZWxhdGlvbiAidGVzdHB1Yl90YmwxIiBpcyBhbHJlYWR5IG1lbWJlciBvZiBwdWJsaWNhdGlv biAidGVzdHB1Yl9mb3J0YmwKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRibCBGT1Ig VEFCTEUgdGVzdHB1Yl90YmwxOwogRVJST1I6ICBwdWJsaWNhdGlvbiAidGVzdHB1Yl9mb3J0Ymwi IGFscmVhZHkgZXhpc3RzCiBcZFJwKyB0ZXN0cHViX2ZvcnRibAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YmwKLSAgICAgICAgICBPd25l ciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwg VHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRibAorICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisg cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxl czoKICAgICAicHViX3Rlc3QudGVzdHB1Yl9ub3BrIgogICAgICJwdWJsaWMudGVzdHB1Yl90Ymwx IgpAQCAtMTE0MCwxMCArMTE0MCwxMCBAQCBQdWJsaWNhdGlvbnM6CiAgICAgInRlc3RwdWJfZm9y dGJsIgogCiBcZFJwKyB0ZXN0cHViX2RlZmF1bHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9kZWZhdWx0Ci0gICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2RlZmF1bHQKKyAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAg InB1Yl90ZXN0LnRlc3RwdWJfbm9wayIKICAgICAicHVibGljLnRlc3RwdWJfdGJsMSIKQEAgLTEy MjEsMTAgKzEyMjEsMTAgQEAgUkVWT0tFIENSRUFURSBPTiBEQVRBQkFTRSByZWdyZXNzaW9uIEZS T00gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyMjsKIERST1AgVEFCTEUgdGVzdHB1Yl9wYXJ0ZWQ7 CiBEUk9QIFRBQkxFIHRlc3RwdWJfdGJsMTsKIFxkUnArIHRlc3RwdWJfZGVmYXVsdAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2RlZmF1bHQKLSAg ICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMg fCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZGVmYXVs dAorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRh YmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAg ICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAg ICB8IGYKICgxIHJvdykKIAogLS0gZmFpbCAtIG11c3QgYmUgb3duZXIgb2YgcHVibGljYXRpb24K QEAgLTEyMzQsMjAgKzEyMzQsMjAgQEAgRVJST1I6ICBtdXN0IGJlIG93bmVyIG9mIHB1YmxpY2F0 aW9uIHRlc3RwdWJfZGVmYXVsdAogUkVTRVQgUk9MRTsKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3Rw dWJfZGVmYXVsdCBSRU5BTUUgVE8gdGVzdHB1Yl9mb287CiBcZFJwIHRlc3RwdWJfZm9vCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlv bnMKLSAgICBOYW1lICAgICB8ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMg fCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSB0ZXN0cHVi X2ZvbyB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKKyAg ICBOYW1lICAgICB8ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwg RERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0 ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyB0ZXN0cHViX2ZvbyB8IHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmCiAoMSByb3cpCiAKIC0t IHJlbmFtZSBiYWNrIHRvIGtlZXAgdGhlIHJlc3Qgc2ltcGxlCiBBTFRFUiBQVUJMSUNBVElPTiB0 ZXN0cHViX2ZvbyBSRU5BTUUgVE8gdGVzdHB1Yl9kZWZhdWx0OwogQUxURVIgUFVCTElDQVRJT04g dGVzdHB1Yl9kZWZhdWx0IE9XTkVSIFRPIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlcjI7CiBcZFJw IHRlc3RwdWJfZGVmYXVsdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKLSAgICAgIE5hbWUgICAgICAgfCAgICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRl cyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gdGVzdHB1Yl9kZWZhdWx0IHwgcmVncmVzc19wdWJs aWNhdGlvbl91c2VyMiB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucworICAgICAgTmFtZSAgICAgICB8 ICAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJs ZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgCistLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyB0ZXN0cHViX2RlZmF1bHQgfCByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYKICgxIHJvdykKIAogLS0g YWRkaW5nIHNjaGVtYXMgYW5kIHRhYmxlcwpAQCAtMTI2MywxOSArMTI2MywxOSBAQCBDUkVBVEUg VEFCTEUgIkNVUlJFTlRfU0NIRU1BIi4iQ1VSUkVOVF9TQ0hFTUEiKGlkIGludCk7CiBTRVQgY2xp ZW50X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7CiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjFf Zm9yc2NoZW1hIEZPUiBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MTsKIFxkUnArIHRlc3RwdWIx X2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRl c3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMg fCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg ICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNh dGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl ciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJw dWJfdGVzdDEiCiAKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViMl9mb3JzY2hlbWEgRk9SIFRB QkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxLCBwdWJfdGVzdDIsIHB1Yl90ZXN0MzsKIFxkUnArIHRl c3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0 YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9v dCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViMl9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMg fCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgog ICAgICJwdWJfdGVzdDEiCiAgICAgInB1Yl90ZXN0MiIKQEAgLTEyODksNDQgKzEyODksNDQgQEAg Q1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWI2X2ZvcnNjaGVtYSBGT1IgVEFCTEVTIElOIFNDSEVN QSAiQ1VSUkVOVF9TQ0hFTUEiLCBDVVIKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRh YmxlIEZPUiBUQUJMRSAiQ1VSUkVOVF9TQ0hFTUEiLiJDVVJSRU5UX1NDSEVNQSI7CiBSRVNFVCBj bGllbnRfbWluX21lc3NhZ2VzOwogXGRScCsgdGVzdHB1YjNfZm9yc2NoZW1hCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjNfZm9yc2NoZW1hCi0gICAg ICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwg RGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzX2ZvcnNjaGVt YQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRh YmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAg ICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg ICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1YmxpYyIKIAogXGRScCsgdGVzdHB1 YjRfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24g dGVzdHB1YjRfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1Ymxp Y2F0aW9uIHRlc3RwdWI0X2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAg IkNVUlJFTlRfU0NIRU1BIgogCiBcZFJwKyB0ZXN0cHViNV9mb3JzY2hlbWEKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNV9mb3JzY2hlbWEKLSAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjVfZm9yc2NoZW1h CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFi bGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAg ICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAg IHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAiQ1VSUkVOVF9TQ0hFTUEiCiAgICAgInB1 YmxpYyIKIAogXGRScCsgdGVzdHB1YjZfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjZfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0K LSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI2X2ZvcnNjaGVtYQorICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisg cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxl cyBmcm9tIHNjaGVtYXM6CiAgICAgIkNVUlJFTlRfU0NIRU1BIgogICAgICJwdWJsaWMiCiAKIFxk UnArIHRlc3RwdWJfZm9ydGFibGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVi bGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZQorICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlczoKICAgICAiQ1VSUkVO VF9TQ0hFTUEuQ1VSUkVOVF9TQ0hFTUEiCiAKQEAgLTEzNjAsMTAgKzEzNjAsMTAgQEAgRVJST1I6 ICBzY2hlbWEgInRlc3RwdWJfdmlldyIgZG9lcyBub3QgZXhpc3QKIC0tIGRyb3BwaW5nIHRoZSBz Y2hlbWEgc2hvdWxkIHJlZmxlY3QgdGhlIGNoYW5nZSBpbiBwdWJsaWNhdGlvbgogRFJPUCBTQ0hF TUEgcHViX3Rlc3QzOwogXGRScCsgdGVzdHB1YjJfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjJfZm9yc2NoZW1hCi0gICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRl cyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQorICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERE THMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYK IFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpA QCAtMTM3MSwyMCArMTM3MSwyMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogLS0gcmVuYW1pbmcg dGhlIHNjaGVtYSBzaG91bGQgcmVmbGVjdCB0aGUgY2hhbmdlIGluIHB1YmxpY2F0aW9uCiBBTFRF UiBTQ0hFTUEgcHViX3Rlc3QxIFJFTkFNRSB0byBwdWJfdGVzdDFfcmVuYW1lZDsKIFxkUnArIHRl c3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0 YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9v dCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViMl9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMg fCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgog ICAgICJwdWJfdGVzdDFfcmVuYW1lZCIKICAgICAicHViX3Rlc3QyIgogCiBBTFRFUiBTQ0hFTUEg cHViX3Rlc3QxX3JlbmFtZWQgUkVOQU1FIHRvIHB1Yl90ZXN0MTsKIFxkUnArIHRlc3RwdWIyX2Zv cnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWIyX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8 IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViMl9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJf dGVzdDEiCiAgICAgInB1Yl90ZXN0MiIKQEAgLTEzOTIsMTAgKzEzOTIsMTAgQEAgVGFibGVzIGZy b20gc2NoZW1hczoKIC0tIGFsdGVyIHB1YmxpY2F0aW9uIGFkZCBzY2hlbWEKIEFMVEVSIFBVQkxJ Q0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBBREQgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDI7 CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAg ICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVz IHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMg fCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzIGZyb20g c2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogICAgICJwdWJfdGVzdDIiCkBAIC0xNDA0LDEwICsx NDA0LDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHVi MV9mb3JzY2hlbWEgQUREIFRBQkxFUyBJTiBTQ0hFTUEgbm9uX2V4aXN0ZW50X3NjaGVtYTsKIEVS Uk9SOiAgc2NoZW1hICJub25fZXhpc3RlbnRfc2NoZW1hIiBkb2VzIG5vdCBleGlzdAogXGRScCsg dGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6 CiAgICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTQxNiwxMCArMTQxNiwxMCBA QCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2No ZW1hIEFERCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MTsKIEVSUk9SOiAgc2NoZW1hICJwdWJf dGVzdDEiIGlzIGFscmVhZHkgbWVtYmVyIG9mIHB1YmxpY2F0aW9uICJ0ZXN0cHViMV9mb3JzY2hl bWEiCiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAg ICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNh dGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJl Z3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2Vy dHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzIGZy b20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogICAgICJwdWJfdGVzdDIiCkBAIC0xNDI3LDEw ICsxNDI3LDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAtLSBhbHRlciBwdWJsaWNhdGlvbiBk cm9wIHNjaGVtYQogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIERST1AgVEFC TEVTIElOIFNDSEVNQSBwdWJfdGVzdDI7CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEK LSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9y c2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExz IHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg ZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogCkBAIC0x NDM4LDEwICsxNDM4LDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiBBTFRFUiBQVUJMSUNBVElP TiB0ZXN0cHViMV9mb3JzY2hlbWEgRFJPUCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MjsKIEVS Uk9SOiAgdGFibGVzIGZyb20gc2NoZW1hICJwdWJfdGVzdDIiIGFyZSBub3QgcGFydCBvZiB0aGUg cHVibGljYXRpb24KIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMg fCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYg ICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBU YWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAKQEAgLTE0NDksMjkgKzE0NDks MjkgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2Zv cnNjaGVtYSBEUk9QIFRBQkxFUyBJTiBTQ0hFTUEgbm9uX2V4aXN0ZW50X3NjaGVtYTsKIEVSUk9S OiAgc2NoZW1hICJub25fZXhpc3RlbnRfc2NoZW1hIiBkb2VzIG5vdCBleGlzdAogXGRScCsgdGVz dHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAg ICAgInB1Yl90ZXN0MSIKIAogLS0gZHJvcCBhbGwgc2NoZW1hcwogQUxURVIgUFVCTElDQVRJT04g dGVzdHB1YjFfZm9yc2NoZW1hIERST1AgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDE7CiBcZFJw KyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogKDEgcm93KQogCiAtLSBhbHRl ciBwdWJsaWNhdGlvbiBzZXQgbXVsdGlwbGUgc2NoZW1hCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0 cHViMV9mb3JzY2hlbWEgU0VUIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxLCBwdWJfdGVzdDI7 CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAg ICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVz IHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMg fCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzIGZyb20g c2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogICAgICJwdWJfdGVzdDIiCkBAIC0xNDgwLDEwICsx NDgwLDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHVi MV9mb3JzY2hlbWEgU0VUIFRBQkxFUyBJTiBTQ0hFTUEgbm9uX2V4aXN0ZW50X3NjaGVtYTsKIEVS Uk9SOiAgc2NoZW1hICJub25fZXhpc3RlbnRfc2NoZW1hIiBkb2VzIG5vdCBleGlzdAogXGRScCsg dGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6 CiAgICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTQ5MiwxMCArMTQ5MiwxMCBA QCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogLS0gcmVtb3ZpbmcgdGhlIGR1cGxpY2F0ZSBzY2hlbWFz CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgU0VUIFRBQkxFUyBJTiBTQ0hF TUEgcHViX3Rlc3QxLCBwdWJfdGVzdDE7CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEK LSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9y c2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExz IHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg ZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogCkBAIC0x NTc0LDE4ICsxNTc0LDE4IEBAIFNFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKIENS RUFURSBQVUJMSUNBVElPTiB0ZXN0cHViM19mb3JzY2hlbWE7CiBSRVNFVCBjbGllbnRfbWluX21l c3NhZ2VzOwogXGRScCsgdGVzdHB1YjNfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjNfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0K LSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzX2ZvcnNjaGVtYQorICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisg cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKICgxIHJv dykKIAogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjNfZm9yc2NoZW1hIFNFVCBUQUJMRVMgSU4g U0NIRU1BIHB1Yl90ZXN0MTsKIFxkUnArIHRlc3RwdWIzX2ZvcnNjaGVtYQotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzX2ZvcnNjaGVtYQotICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViM19mb3JzY2hlbWEK KyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJs ZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAg ICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAg fCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAKQEAgLTE1OTUsMjAg KzE1OTUsMjAgQEAgQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9yc2NoZW1hX2ZvcnRhYmxl IEZPUiBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MSwgVEEKIENSRUFURSBQVUJMSUNBVElPTiB0 ZXN0cHViX2ZvcnRhYmxlX2ZvcnNjaGVtYSBGT1IgVEFCTEUgcHViX3Rlc3QyLnRibDEsIFRBQkxF UyBJTiBTQ0hFTUEgcHViX3Rlc3QxOwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKIFxkUnAr IHRlc3RwdWJfZm9yc2NoZW1hX2ZvcnRhYmxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVtYV9mb3J0YWJsZQotICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0g cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yc2NoZW1hX2ZvcnRhYmxlCisgICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0K KyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAg ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFi bGVzOgogICAgICJwdWJfdGVzdDIudGJsMSIKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1 Yl90ZXN0MSIKIAogXGRScCsgdGVzdHB1Yl9mb3J0YWJsZV9mb3JzY2hlbWEKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGVfZm9yc2NoZW1hCi0g ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZV9m b3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERE THMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVz IHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1Yl90ZXN0Mi50YmwxIgogVGFibGVzIGZyb20g c2NoZW1hczoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzMl9kZGxfcmVw bGljYXRpb24ucGwgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzJfZGRsX3JlcGxpY2F0aW9u LnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjRiYzRmZjIyMTIKLS0t IC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzJfZGRsX3JlcGxpY2F0 aW9uLnBsCkBAIC0wLDAgKzEsNDY1IEBACisjIENvcHlyaWdodCAoYykgMjAyMiwgUG9zdGdyZVNR TCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyMgUmVncmVzc2lvbiB0ZXN0cyBmb3IgbG9naWNh bCByZXBsaWNhdGlvbiBvZiBERExzCisjCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNl IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7 Cit1c2UgVGVzdDo6TW9yZTsKKworbXkgJG5vZGVfcHVibGlzaGVyID0gUG9zdGdyZVNRTDo6VGVz dDo6Q2x1c3Rlci0+bmV3KCdwdWJsaXNoZXInKTsKKyRub2RlX3B1Ymxpc2hlci0+aW5pdChhbGxv d3Nfc3RyZWFtaW5nID0+ICdsb2dpY2FsJyk7Ciskbm9kZV9wdWJsaXNoZXItPnN0YXJ0OworCitt eSAkbm9kZV9zdWJzY3JpYmVyID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdzdWJz Y3JpYmVyJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5pbml0KGFsbG93c19zdHJlYW1pbmcgPT4gJ2xv Z2ljYWwnKTsKKyRub2RlX3N1YnNjcmliZXItPnN0YXJ0OworCitteSAkZGRsID0gIkNSRUFURSBU QUJMRSB0ZXN0X3JlcChpZCBpbnQgcHJpbWFyeSBrZXksIG5hbWUgdmFyY2hhciwgdmFsdWUgaW50 ZWdlcik7IjsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICRkZGwpOwor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3Rf cmVwIFZBTFVFUyAoMSwgJ2RhdGExJywgMSk7Iik7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgJGRkbCk7CisKK215ICRwdWJsaXNoZXJfY29ubnN0ciA9ICRub2RlX3B1 Ymxpc2hlci0+Y29ubnN0ciAuICcgZGJuYW1lPXBvc3RncmVzJzsKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBQVUJMSUNBVElPTiBteXB1YiBGT1IgQUxM IFRBQkxFUyB3aXRoIChwdWJsaXNoID0gJ2luc2VydCwgdXBkYXRlLCBkZWxldGUnLCBkZGwgPSAn YWxsJyk7Iik7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JF QVRFIFNVQlNDUklQVElPTiBteXN1YiBDT05ORUNUSU9OICckcHVibGlzaGVyX2Nvbm5zdHInIFBV QkxJQ0FUSU9OIG15cHViOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdt eXN1YicpOworCisjIE1ha2Ugc3VyZSB3ZSBoYXZlIGZ1bGx5IHN5bmNocm9uaXplZCB0aGUgdGFi bGUuCisjIFRoaXMgcHJldmVudHMgQUxURVIgVEFCTEUgY29tbWFuZCBiZWxvdyBmcm9tIGJlaW5n IGV4ZWN1dGVkIGR1cmluZyB0YWJsZSBzeW5jaHJvbml6YXRpb24uCiskbm9kZV9zdWJzY3JpYmVy LT5wb2xsX3F1ZXJ5X3VudGlsKCdwb3N0Z3JlcycsCisgICAiU0VMRUNUIENPVU5UKDEpID0gMCBG Uk9NIHBnX3N1YnNjcmlwdGlvbl9yZWwgc3IgV0hFUkUgc3Iuc3JzdWJzdGF0ZSBOT1QgSU4gKCdz JywgJ3InKSBBTkQgc3Iuc3JyZWxpZCA9ICd0ZXN0X3JlcCc6OnJlZ2NsYXNzIgorKTsKKworIyBU ZXN0IEFMVEVSIFRBQkxFIEFERAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIkFMVEVSIFRBQkxFIHRlc3RfcmVwIEFERCBjNCBpbnQ7Iik7Ciskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9yZXAgVkFMVUVTICgyLCAn ZGF0YTInLCAyLCAyKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlz dWInKTsKK215ICRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfcmVwIFdIRVJFIGM0ID0gMjsiKTsKK2lzKCRy ZXN1bHQsIHFxKDEpLCAnQUxURVIgdGVzdF9yZXAgQUREIHJlcGxpY2F0ZWQnKTsKKworIyBUZXN0 IEFMVEVSIFRBQkxFIERST1AKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBEUk9QIGM0OyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIkRFTEVURSBGUk9NIHRlc3RfcmVwIHdoZXJlIGlkID0gMjsiKTsK KyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAk bm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBm cm9tIHRlc3RfcmVwOyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdBTFRFUiB0ZXN0X3JlcCBEUk9Q IHJlcGxpY2F0ZWQnKTsKKworIyBUZXN0IEFMVEVSIFRBQkxFIEFMVEVSIFRZUEUKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBBTFRF UiB2YWx1ZSBUWVBFIHZhcmNoYXIiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDMsICdkYXRhMycsICczJyk7Iik7 Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0g JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikg RlJPTSB0ZXN0X3JlcCBXSEVSRSB2YWx1ZSA9ICczJzsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAn QUxURVIgdGVzdF9yZXAgQUxURVIgQ09MVU1OIFRZUEUgcmVwbGljYXRlZCcpOworCisjIFRlc3Qg QUxURVIgVEFCTEUgQUxURVIgU0VUIERFRkFVTFQKKyMgQ2hlY2sgaWYgd2UgaGF2ZSB0aGUgZGVm YXVsdCB2YWx1ZSBhZnRlciB0aGUgZGlyZWN0IGluc2VydCB0byBzdWJzY3JpYmVyIG5vZGUuCisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQUxURVIgVEFCTEUgdGVzdF9y ZXAgQUxURVIgQ09MVU1OIHZhbHVlIFNFVCBERUZBVUxUICdmb28nIik7Ciskbm9kZV9wdWJsaXNo ZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVFUyAoNCwgJ2RhdGE0Jyk7 Iik7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJT RUxFQ1QgdmFsdWUgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDQ7Iik7CitpcygkcmVzdWx0LCAn Zm9vJywgJ0FMVEVSIHRlc3RfcmVwIEFMVEVSIFNFVCBERUZBVUxUIHJlcGxpY2F0ZWQnKTsKKwor IyBUZXN0IEFMVEVSIFRBQkxFIEFMVEVSIERST1AgREVGQVVMVAorIyBDaGVjayBpZiB3ZSBkb24n dCBoYXZlIHRoZSBkZWZhdWx0IHZhbHVlIHByZXZpb3VzbHkgZGVmaW5lZC4KKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBBTFRFUiBD T0xVTU4gdmFsdWUgRFJPUCBERUZBVUxUOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9j YXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDUsICdkYXRhNScpOyIpOworJHJlc3VsdCA9 ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIHZhbHVlIElT IE5VTEwgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDU7Iik7CitpcygkcmVzdWx0LCBxKHQpLCAn QUxURVIgdGVzdF9yZXAgQUxURVIgRFJPUCBERUZBVUxUIHJlcGxpY2F0ZWQnKTsKKworIyBUZXN0 IEFMVEVSIFRBQkxFIEFMVEVSIFNFVCBOT1QgTlVMTAorIyBSZW1vdmUgdGhlIGV4aXN0aW5nIHJl Y29yZCB0aGF0IGNvbnRhaW5zIG51bGwgdmFsdWUgZmlyc3QuCitteSAoJHN0ZG91dCwgJHN0ZGVy cik7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRFTEVURSBGUk9N IHRlc3RfcmVwIFdIRVJFIGlkID0gNTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBBTFRFUiB2YWx1ZSBTRVQgTk9UIE5VTEw7 Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9z dWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMg KDYsICdkYXRhNicpOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3Rk ZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9 fiAvRVJST1I6ICBudWxsIHZhbHVlIGluIGNvbHVtbiBcInZhbHVlXCIgb2YgcmVsYXRpb24gXCJ0 ZXN0X3JlcFwiIHZpb2xhdGVzIG5vdC1udWxsIGNvbnN0cmFpbnQvCisgIG9yIGRpZSAiZmFpbGVk IHRvIHJlcGxpY2F0ZSBBTFRFUiBUQUJMRSBBTFRFUiBTRVQgTk9UIE5VTEwiOworCisjIFRlc3Qg QUxURVIgVEFCTEUgQUxURVIgRFJPUCBOT1QgTlVMTAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkFMVEVSIFRBQkxFIHRlc3RfcmVwIEFMVEVSIHZhbHVlIERST1AgTk9U IE5VTEw7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Cisj IEluc2VydCBzYW1lIGRhdGEgdGhhdCBoYXMgTlVMTCB2YWx1ZS4gVGhpcyBmYWlsZWQgYmVmb3Jl IGJ1dCBub3cgc2hvdWxkIHN1Y2NlZWQuCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVFUyAoNiwgJ2RhdGE2Jyk7Iik7Cisk cmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1Qg dmFsdWUgSVMgTlVMTCBGUk9NIHRlc3RfcmVwIFdIRVJFIGlkID0gNjsiKTsKK2lzKCRyZXN1bHQs IHEodCksICJBTFRFUiB0ZXN0X3JlcCBBTFRFUiBEUk9QIE5PVCBOVUxMIHJlcGxpY2F0ZWQiKTsK KworIyBUZXN0IEFMVEVSIFRBQkxFIFNFVCBVTkxPR0dFRAorJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgJ0FMVEVSIFRBQkxFIHRlc3RfcmVwIFNFVCBVTkxPR0dFRDsnKTsK KyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMg KDcsICdkYXRhNycsICc3Jyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAo J215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDc7Iik7Citpcygk cmVzdWx0LCBxcSgwKSwgJ0FMVEVSIHRlc3RfcmVwIFNFVCBVTkxPR0dFRCByZXBsaWNhdGVkJyk7 CisKKyMgVGVzdCBBTFRFUiBUQUJMRSBTRVQgTE9HR0VECiskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAnQUxURVIgVEFCTEUgdGVzdF9yZXAgU0VUIExPR0dFRDsnKTsKKyRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDgs ICdkYXRhOCcsICc4Jyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215 c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDg7Iik7CitpcygkcmVz dWx0LCBxcSgxKSwgJ0FMVEVSIHRlc3RfcmVwIFNFVCBMT0dHRUQgcmVwbGljYXRlZCcpOworCisj IFRlc3QgQ1JFQVRFIFRBQkxFIGFuZCBETUwgY2hhbmdlcworJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGEgaW50LCBiIHZhcmNoYXIpOyIp OworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9 ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCop IGZyb20gcGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAnOyIpOworaXMoJHJlc3VsdCwg cXEoMSksICdDUkVBVEUgdG1wIGlzIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgdmFsdWVzICgxLCAnYScpIik7Cisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIHZh bHVlcyAoMiwgJ2InKSIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1 YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi U0VMRUNUIGNvdW50KCopIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoMiksICdETUwgQ2hh bmdlcyB0byB0bXAgYXJlIHJlcGxpY2F0ZWQnKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSBJTkhF UklUUworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJM RSB0bXAyIChjMyBpbnQpIElOSEVSSVRTICh0bXApOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcDIgVkFMVUVTICgxLCAnYScsIDEpOyIp OworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9 ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCop IGZyb20gcGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAyJzsiKTsKK2lzKCRyZXN1bHQs IHFxKDEpLCAnQ1JFQVRFIFRBQkxFIElOSEVSSVRTIGlzIHJlcGxpY2F0ZWQnKTsKKyRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgq KSBmcm9tIHRtcDI7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ2luc2VydGluZyBzb21lIGRhdGEg dG8gaW5oZXJpdGVkIHRhYmxlIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDIiKTsKKworIyBUZXN0IENSRUFURSBUQUJM RSBMSUtFCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRB QkxFIHRtcDMgKGMzIGludCwgTElLRSB0bXApOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcDMgVkFMVUVTICgxLCAxLCAnYScpOyIpOwor JG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZy b20gcGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAzJzsiKTsKK2lzKCRyZXN1bHQsIHFx KDEpLCAnQ1JFQVRFIFRBQkxFIExJS0UgcmVwbGljYXRlZCcpOworJHJlc3VsdCA9ICRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1w MzsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnaW5zZXJ0IHNvbWUgZGF0YSB0byBhIHRhYmxlIGRl ZmluZWQgd2l0aCBMSUtFIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDMiKTsKKworIyBUZXN0IERST1AgVEFCTEUKKyRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDsiKTsK KyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAk bm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBm cm9tIHBnX3RhYmxlcyB3aGVyZSB0YWJsZW5hbWUgPSAndG1wJzsiKTsKK2lzKCRyZXN1bHQsIHFx KDApLCAnVEFCTEUgdG1wIGlzIGRyb3BwZWQnKTsKKworIyBUZXN0IENSRUFURSBVTkxPR0dFRCBU QUJMRQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBVTkxP R0dFRCBUQUJMRSB0bXAgKGlkIGludCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7Ciskbm9kZV9wdWJsaXNo ZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJvbSBwZ190YWJsZXMg d2hlcmUgdGFibGVuYW1lID0gJ3RtcCc7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0NSRUFURSBV TkxPR0dFRCBUQUJMRSBpcyByZXBsaWNhdGVkIGNvcnJlY3RseScpOworJHJlc3VsdCA9ICRub2Rl X3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20g dG1wOyIpOworaXMoJHJlc3VsdCwgcXEoMCksICdpbnNlcnRpbmcgZGF0YSB0byB1bmxvZ2dlZCB0 YWJsZSBpcyBub3QgcmVwbGljYXRlZCBjb3JyZWN0bHknKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworCisjIFRlc3QgQ1JFQVRFIFRB QkxFIElGIE5PVCBFWElTVFMKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyB0bXAgKGlkIGludCk7Iik7Ciskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7 Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0 ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQo KikgZnJvbSBwZ190YWJsZXMgd2hlcmUgdGFibGVuYW1lID0gJ3RtcCc7Iik7CitpcygkcmVzdWx0 LCBxcSgxKSwgJ0NSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHJlcGxpY2F0ZWQnKTsKKyRyZXN1 bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3Vu dCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnaW5zZXJ0aW5nIGRhdGEgdG8g YSB0YWJsZSByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSBJRiBOT1QgRVhJ U1RTIChjaGVjayBpZiB3ZSBza2lwIHRvIGNyZWF0ZSBhIHRhYmxlCisjIHdoZW4gd2UgaGF2ZSB0 aGUgdGFibGUgb24gdGhlIHN1YnNjcmliZXIgaW4gYWR2YW5jZSwgYW5kIGlmIHdlIHN1Y2NlZWQK KyMgaW4gcmVwbGljYXRpbmcgY2hhbmdlcy4pCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCk7Iik7Ciskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgdG1w IChpZCBpbnQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklO U0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9j YXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEo MSksICdDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKworIyBUZXN0 IENSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIChjaGVjayBpZiB3ZSBza2lwIHRvIGNyZWF0ZSBh IHRhYmxlCisjIHdoZW4gd2UgaGF2ZSB0aGUgdGFibGUgb24gdGhlIHB1Ymxpc2hlciwgYnV0IG5v dCBvbiB0aGUgc3Vic2NyaWJlci4pCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyB0bXAgKGlkIGlu dCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElO VE8gdG1wIFZBTFVFUyAoMSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAo J215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJTRUxFQ1QgY291bnQoKikgZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0NS RUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworCisjIFRlc3QgQ1JFQVRF IFRBQkxFIHdpdGggY29sbGF0ZQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIkNSRUFURSBUQUJMRSB0bXAgKG5hbWUgdGV4dCBDT0xMQVRFIFwiQ1wiKTsiKTsKKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVT ICgnZm9vJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7 CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxF Q1QgY29sbGF0aW9uX25hbWUgRlJPTSBpbmZvcm1hdGlvbl9zY2hlbWEuY29sdW1ucyBXSEVSRSB0 YWJsZV9uYW1lID0gJ3RtcCc7Iik7CitpcygkcmVzdWx0LCBxcShDKSwgJ0NSRUFURSBUQUJMRSB3 aXRoIGNvbGxhdGUgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgd2l0aCBu YW1lZCBjb25zdHJhaW50Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi Q1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50IENPTlNUUkFJTlQgXCJtdXN0IGJlIGJpZ2dlciB0aGFu IDEwXCIgQ0hFQ0sgKGlkID4gMTApKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0 Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VS VCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJ CQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOwor JHN0ZGVyciA9fiAvRVJST1I6ICBuZXcgcm93IGZvciByZWxhdGlvbiAidG1wIiB2aW9sYXRlcyBj aGVjayBjb25zdHJhaW50ICJtdXN0IGJlIGJpZ2dlciB0aGFuIDEwIi8KKyAgb3IgZGllICJmYWls ZWQgdG8gcmVwbGljYXRlIG5hbWVkIGNvbnN0cmFpbnQgYXQgY3JlYXRpbmcgdGFibGUiOworJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOwor CisjIFRlc3QgQ1JFQVRFIFRBQkxFIHdpdGggdmFyaW91cyB0eXBlcyBvZiBjb25zdHJhaW50cy4K KyMgTk9UIE5VTEwgY29uc3RyYWludAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCwgbmFtZSB0ZXh0IE5PVCBOVUxMKTsiKTsK KyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNj cmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIsCisJ CQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAor CQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBudWxsIHZh bHVlIGluIGNvbHVtbiAibmFtZSIgb2YgcmVsYXRpb24gInRtcCIgdmlvbGF0ZXMgbm90LW51bGwg Y29uc3RyYWludC8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIG5vbiBudWxsIGNvbnN0 cmFpbnQgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIE5VTEwgY29uc3RyYWludAorJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGlu dCwgbmFtZSB0ZXh0IE5VTEwpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVw KCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNF UlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBuYW1lIElTIE5VTEwgRlJPTSB0bXA7Iik7Citp cygkcmVzdWx0LCBxcSh0KSwgIkNSRUFURSBUQUJMRSB3aXRoIE5VTEwgY29uc3RyYWludCByZXBs aWNhdGVkIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBU QUJMRSB0bXAiKTsKKworIyBDSEVDSyBjb25zdHJhaW50Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50LCBwcm9kdWN0X2FtZSB0 ZXh0LCBwcmljZSBpbnQgQ0hFQ0sgKHByaWNlID4gMCkpOyIpOworJG5vZGVfcHVibGlzaGVyLT53 YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9zdGdy ZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSwgJ2ZvbycsIC0xMDApOyIsCisJCQkJCSAg IG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkg ICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBuZXcgcm93IGZvciBy ZWxhdGlvbiAidG1wIiB2aW9sYXRlcyBjaGVjayBjb25zdHJhaW50ICJ0bXBfcHJpY2VfY2hlY2si LworICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgQ0hFQ0sgY29uc3RyYWludCI7Ciskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXA7Iik7CisK KyMgREVGQVVMVAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFU RSBUQUJMRSB0bXAgKGlkIGludCwgbmFtZSB0ZXh0IERFRkFVTFQgJ2ZvbycpOyIpOworJG5vZGVf cHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRy ZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBu YW1lIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoZm9vKSwgIkNSRUFURSBUQUJMRSB3aXRo IGRlZmF1bHQgdmFsdWUgcmVwbGljYXRlZCIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7CisKKyMgVU5JUVVFIGNvbnN0cmFpbnQKKyRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChp ZCBpbnQgVU5JUVVFKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9m b3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywg IklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4g MCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRv dXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBkdXBsaWNhdGUga2V5IHZhbHVlIHZpb2xhdGVzIHVu aXF1ZSBjb25zdHJhaW50ICJ0bXBfaWRfa2V5Ii8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGlj YXRlIGNvbnN0cmFpbnQgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIFBSSU1BUlkgS0VZCisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAo aWQgaW50IFBSSU1BUlkgS0VZLCBuYW1lIHRleHQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEsICdmb28nKTsiKTsK KyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNj cmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEsICdiYXIn KTsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0 ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAg ZHVwbGljYXRlIGtleSB2YWx1ZSB2aW9sYXRlcyB1bmlxdWUgY29uc3RyYWludCAidG1wX3BrZXki LworICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgcHJpbWFyeSBrZXkgYXQgY3JlYXRpbmcg dGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFC TEUgdG1wOyIpOworCisjIEVYQ0xVREUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJDUkVBVEUgVEFCTEUgY2lyY2xlcyAoYyBjaXJjbGUsIEVYQ0xVREUgVVNJTkcgZ2lz dCAoYyBXSVRIICYmKSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiSU5TRVJUIElOVE8gY2lyY2xlcyBWQUxVRVMgKCc8KDEsIDEpLCAxPic6OmNpcmNsZSk7Iik7 Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJz Y3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyBjaXJjbGVzIFZBTFVFUyAoJzwo MSwgMSksIDE+Jzo6Y2lyY2xlKTsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJ CSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRz dGRlcnIgPX4gL0VSUk9SOiAgY29uZmxpY3Rpbmcga2V5IHZhbHVlIHZpb2xhdGVzIGV4Y2x1c2lv biBjb25zdHJhaW50ICJjaXJjbGVzX2NfZXhjbCIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxp Y2F0ZSBFWENMVURFIGF0IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIGNpcmNsZXMiKTsKKworIyBSRUZFUkVOQ0VTCisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHByb2R1 Y3QgKGlkIGludCBQUklNQVJZIEtFWSwgbmFtZSB0ZXh0KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyBwcm9kdWN0IFZBTFVFUyAoMSwgJ2Zv bycpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJ TlRPIHByb2R1Y3QgVkFMVUVTICgyLCAnYmFyJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIG9yZGVycyAob3JkZXJfaWQgaW50IFBSSU1B UlkgS0VZLCBwcm9kdWN0X2lkIGludCBSRUZFUkVOQ0VTIHByb2R1Y3QgKGlkKSkiKTsKKyRub2Rl X3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXIt PnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIG9yZGVycyBWQUxVRVMgKDEsIDEwKSIsCisJ CQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAor CQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBpbnNlcnQg b3IgdXBkYXRlIG9uIHRhYmxlICJvcmRlcnMiIHZpb2xhdGVzIGZvcmVpZ24ga2V5IGNvbnN0cmFp bnQgIm9yZGVyc19wcm9kdWN0X2lkX2ZrZXkiLworICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNh dGUgUkVGRVJFTkNFUyBhdCBjcmVhdGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSBvcmRlcnMiKTsKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHByb2R1Y3QiKTsKKworIyBERUZFUlJB QkxFCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxF IHRtcCAoaWQgaW50IFBSSU1BUlkgS0VZIERFRkVSUkFCTEUsIG5hbWUgdGV4dCk7Iik7Ciskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVF UyAoMSwgJ2ZvbycpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDIsICdiYXInKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+ d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyMgUXVpY2sgY2hlY2sgb2YgZGVmZXJyYWJsZSBj bGF1c2UKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiVVBEQVRFIHRt cCBTRVQgaWQgPSBpZCArIDE7Iik7CisjIEFsc28sIGV4ZWN1dGUgYSB0ZXN0IHRoYXQgc2hvdWxk IGZhaWwgZm9yIElOSVRJQUxMWSBJTU1FRElBVEUodGhlIGRlZmF1bHQpCiskbm9kZV9zdWJzY3Jp YmVyLT5wc3FsKCdwb3N0Z3JlcycsIHFxKAorQkVHSU47CitVUERBVEUgdG1wIFNFVCBpZCA9IGlk ICsgMTsKK0lOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDMsICdmb29iYXInKTsKK0RFTEVURSBGUk9N IHRtcCBXSEVSRSBpZCA9IDM7CitDT01NSVQ7CispLCBvbl9lcnJvcl9zdG9wID0+IDAsIHN0ZGVy ciA9PiBcJHN0ZGVyciwgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAg ZHVwbGljYXRlIGtleSB2YWx1ZSB2aW9sYXRlcyB1bmlxdWUgY29uc3RyYWludCAidG1wX3BrZXki LworICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgREVGRVJSQUJMRSBhdCBjcmVhdGluZyB0 YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJM RSB0bXA7Iik7CisKKyMgTk9UIERFRkVSUkFCTEUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQgUFJJTUFSWSBLRVkgTk9UIERF RkVSUkFCTEUsIG5hbWUgdGV4dCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSwgJ2ZvbycpOyIpOworJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDIs ICdiYXInKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsK KyRub2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIlVQREFURSB0bXAgU0VUIGlkID0g aWQgKyAxOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+ IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJS T1I6ICBkdXBsaWNhdGUga2V5IHZhbHVlIHZpb2xhdGVzIHVuaXF1ZSBjb25zdHJhaW50ICJ0bXBf cGtleSIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSBOT1QgREVGRVJSQUJMRSBhdCBj cmVhdGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi RFJPUCBUQUJMRSB0bXA7Iik7CisKKyMgREVGRVJSQUJMRSBhbmQgSU5JVElBTExZIERFRkVSUkVE Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRt cCAoaWQgaW50IFBSSU1BUlkgS0VZIERFRkVSUkFCTEUgSU5JVElBTExZIERFRkVSUkVELCBuYW1l IHRleHQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VS VCBJTlRPIHRtcCBWQUxVRVMgKDEsICdmb28nKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgyLCAnYmFyJyk7Iik7Cisk bm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CisjIFF1aWNrIGNoZWNr IG9mIGRlZmVycmFibGUgY2xhdXNlCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIlVQREFURSB0bXAgU0VUIGlkID0gaWQgKyAxOyIpOworIyBBbHNvLCBleGVjdXRlIGEg dGVzdCB0aGF0IHNob3VsZCBzdWNjZWVkIGZvciBJTklUSUFMTFkgREVGRVJSRUQKKyRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKK0JFR0lOOworVVBEQVRFIHRtcCBT RVQgaWQgPSBpZCArIDE7CitJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgzLCAnZm9vYmFyJyk7CitE RUxFVEUgRlJPTSB0bXAgV0hFUkUgaWQgPSAzOworQ09NTUlUOworKSk7Ciskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXA7Iik7CisKKyMgVGVzdCBD UkVBVEUgVEFCTEUgd2l0aCB0YWJsZSBjb25zdHJhaW50CisjIFdlIHdpbGwgc2V0IHR3byBjaGVj a3MgYW5kIGNvbmR1Y3QgdHdvIGluc2VydHMgdGhhdCBzaG91bGQgZmFpbCByZXNwZWN0aXZlbHku Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgVEFCTEUg dG1wIChwcmljZSBpbnQsIGRpc2NvdW50ZWRfcHJpY2UgaW50LCBDSEVDSyAoZGlzY291bnRlZF9w cmljZSA+IDAgQU5EIHByaWNlID4gZGlzY291bnRlZF9wcmljZSkpOyIpOworJG5vZGVfcHVibGlz aGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgn cG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMTAwLCAwKTsiLAorCQkJCQkgICBv bl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAg c3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgbmV3IHJvdyBmb3IgcmVs YXRpb24gInRtcCIgdmlvbGF0ZXMgY2hlY2sgY29uc3RyYWludCAidG1wX2NoZWNrIi8KKyAgb3Ig ZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIHRhYmxlIGNvbnN0cmFpbnQgKGZpcnN0IGNvbmRpdGlv bikgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMn LCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoNTAsIDEwMCk7IiwKKwkJCQkJICAgb25fZXJyb3Jf c3RvcCA9PiAwLAorCQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0ZG91dCA9 PiBcJHN0ZG91dCk7Ciskc3RkZXJyID1+IC9FUlJPUjogIG5ldyByb3cgZm9yIHJlbGF0aW9uICJ0 bXAiIHZpb2xhdGVzIGNoZWNrIGNvbnN0cmFpbnQgInRtcF9jaGVjayIvCisgIG9yIGRpZSAiZmFp bGVkIHRvIHJlcGxpY2F0ZSB0YWJsZSBjb25zdHJhaW50IChzZWNvbmQgY29uZGl0aW9uKSBhdCBj cmVhdGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi RFJPUCBUQUJMRSB0bXA7Iik7CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgV0lUSCBzdHJvcmFnZV9w YXJhbWV0ZXIKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUg VEFCTEUgdG1wIChpZCBpbnQpIFdJVEggKGZpbGxmYWN0b3IgPSA4MCk7Iik7Ciskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7 Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9z dWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgcmVsb3B0aW9ucyBGUk9NIHBnX2Ns YXNzIFdIRVJFIHJlbG5hbWUgPSAndG1wJzsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAs CisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0 KTsKKyRzdGRvdXQgPX4gL3tmaWxsZmFjdG9yPTgwfS8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVw bGljYXRlIHN0b3JhZ2Ugb3B0aW9uIjsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1 bHQsIHFxKDEpLCAnQ1JFQVRFIFRBQkxFIHdpdGggc3RvcmFnZV9wYXJhbWV0ZXIgcmVwbGljYXRl ZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUg dG1wOyIpOworCisjIFRlc3QgQ1JFQVRFIFRBQkxFIFRBQkxFU1BBQ0UgKGNyZWF0aW5nIGEgdGFi bGVzcGFjZSBpcyBub3QgcmVwbGljYXRlZCkKKyMgUHJlcGFyZSB0aGUgZGlyZWN0b3JpZXMgZm9y IHRoZSBwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIgZmlyc3QuCitteSAoJGJhc2VkaXIsICR0YWJs ZXNwYWNlX2Rpcik7CisKKyRiYXNlZGlyID0gJG5vZGVfcHVibGlzaGVyLT5iYXNlZGlyOworJHRh Ymxlc3BhY2VfZGlyID0gIiRiYXNlZGlyL3RibHNwY19wdWIiOworbWtkaXIoJHRhYmxlc3BhY2Vf ZGlyKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFC TEVTUEFDRSBteXRibHNwYyBMT0NBVElPTiAnJHRhYmxlc3BhY2VfZGlyJzsiKTsKKyRiYXNlZGly ID0gJG5vZGVfc3Vic2NyaWJlci0+YmFzZWRpcjsKKyR0YWJsZXNwYWNlX2RpciA9ICIkYmFzZWRp ci90YmxzcGNfc3ViIjsKK21rZGlyICgkdGFibGVzcGFjZV9kaXIpOworJG5vZGVfc3Vic2NyaWJl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEVTUEFDRSBteXRibHNwYyBMT0NB VElPTiAnJHRhYmxlc3BhY2VfZGlyJzsiKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCkgVEFCTEVTUEFDRSBteXRibHNw YzsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5U TyB0bXAgVkFMVUVTICgxKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgn bXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnQ1JF QVRFIFRBQkxFIFRBQkxFU1BBQ0UgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIFRlc3QgQ1JFQVRFIFRZ UEUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVFlQRSBt eXR5cGUgQVMgKGlkIGludCwgbmFtZSB0ZXh0LCBhZ2UgaW50KTsiKTsKKyRub2RlX3B1Ymxpc2hl ci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIE9GIG15dHlwZTsiKTsKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxLCAn YmFyJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Cisk cmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1Qg Y291bnQoKikgZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0NSRUFURSBUQUJMRSBP RiByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi RFJPUCBUQUJMRSB0bXAiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJEUk9QIFRZUEUgbXl0eXBlIik7CisKKyMgVGVzdCBDUkVBVEUgRU5VTSBUWVBFCiskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRZUEUgbXllbnVtdHlwZSBB UyBFTlVNICgnbmV3JywgJ29wZW4nLCAnY2xvc2VkJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndh aXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoc3RhdHVzIG15ZW51bXR5cGUpOyIpOworJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMg KCduZXcnKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsK KyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVD VCAqIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEobmV3KSwgJ0NSRUFURSBUQUJMRSBPRiBy ZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJP UCBUQUJMRSB0bXAiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJE Uk9QIFRZUEUgbXllbnVtdHlwZSIpOworCisjIFRlc3QgQ1JFQVRFIFJBTkdFIFRZUEUKKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVFlQRSBmbG9hdDhfcmFu Z2UgQVMgUkFOR0UgKHN1YnR5cGUgPSBmbG9hdDgsIHN1YnR5cGVfZGlmZiA9IGZsb2F0OG1pKTsi KTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wICh2YWwgZmxv YXQ4X3JhbmdlKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJp bnNlcnQgaW50byB0bXAgdmFsdWVzKGZsb2F0OF9yYW5nZSgtMTIuMzQsICcxLjExMTExM2UzJykp OyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3Vs dCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUICogZnJv bSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcShbLTEyLjM0LDExMTEuMTEzXCkpLCAnQ1JFQVRFIFRB QkxFIE9GIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJEUk9QIFRBQkxFIHRtcCIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIkRST1AgVFlQRSBmbG9hdDhfcmFuZ2UiKTsKKworIyBUZXN0IENSRUFURSBCQVNFIERB VEEgVFlQRSBhbmQgdXNlIGl0IGluIHRhYmxlIGRlZmluaXRpb24KKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICIKK0NSRUFURSBUWVBFIGludDQyOworQ1JFQVRFIEZVTkNU SU9OIGludDQyX2luKGNzdHJpbmcpCisgICBSRVRVUk5TIGludDQyCisgICBBUyAnaW50NGluJwor ICAgTEFOR1VBR0UgaW50ZXJuYWwgU1RSSUNUIElNTVVUQUJMRTsKK0NSRUFURSBGVU5DVElPTiBp bnQ0Ml9vdXQoaW50NDIpCisgICBSRVRVUk5TIGNzdHJpbmcKKyAgIEFTICdpbnQ0b3V0JworICAg TEFOR1VBR0UgaW50ZXJuYWwgU1RSSUNUIElNTVVUQUJMRTsKK0NSRUFURSBUWVBFIGludDQyICgK KyAgIGludGVybmFsbGVuZ3RoID0gNCwKKyAgIGlucHV0ID0gaW50NDJfaW4sCisgICBvdXRwdXQg PSBpbnQ0Ml9vdXQsCisgICBhbGlnbm1lbnQgPSBpbnQ0LAorICAgZGVmYXVsdCA9IDQyLAorICAg cGFzc2VkYnl2YWx1ZQorKTsKK0NSRUFURSBUQUJMRSB0bXAgKGYxIGludDQyKTsKK0lOU0VSVCBJ TlRPIHRtcCBERUZBVUxUIFZBTFVFUzsKKyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9j YXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiU0VMRUNUICogZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSg0MiksICdD UkVBVEUgVEFCTEUgT0YgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiRFJPUCBUWVBFIGludDQyIGNhc2NhZGUiKTsKKworcGFzcyAiRERMIHJl cGxpY2F0aW9uIHRlc3RzIHBhc3NlZDoiOworCiskbm9kZV9zdWJzY3JpYmVyLT5zdG9wOworJG5v ZGVfcHVibGlzaGVyLT5zdG9wOworCitkb25lX3Rlc3RpbmcoKTsKZGlmZiAtLWdpdCBhL3NyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QKaW5kZXggNWNkOGFmOWU2Ni4uMWRmNjY2NTNmNyAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QKQEAgLTU1OSw2ICs1NTksNyBAQCBEZWZFbGVtQWN0aW9uCiBEZWZhdWx0QUNMSW5mbwog RGVmaW5lU3RtdAogRGVsZXRlU3RtdAorRGVwYXJzZWRDb21tYW5kVHlwZQogRGVwZW5kZW5jeUdl bmVyYXRvcgogRGVwZW5kZW5jeUdlbmVyYXRvckRhdGEKIERlcGVuZGVuY3lUeXBlCkBAIC0xNDM5 LDYgKzE0NDAsOCBAQCBMb2dpY2FsRGVjb2RlQmVnaW5QcmVwYXJlQ0IKIExvZ2ljYWxEZWNvZGVD aGFuZ2VDQgogTG9naWNhbERlY29kZUNvbW1pdENCCiBMb2dpY2FsRGVjb2RlQ29tbWl0UHJlcGFy ZWRDQgorTG9naWNhbERlY29kZURETE1lc3NhZ2VDQgorTG9naWNhbERlY29kZVN0cmVhbURETE1l c3NhZ2VDQgogTG9naWNhbERlY29kZUZpbHRlckJ5T3JpZ2luQ0IKIExvZ2ljYWxEZWNvZGVGaWx0 ZXJQcmVwYXJlQ0IKIExvZ2ljYWxEZWNvZGVNZXNzYWdlQ0IKQEAgLTIyODcsNiArMjI5MCw4IEBA IFJlb3JkZXJCdWZmZXJDaGFuZ2UKIFJlb3JkZXJCdWZmZXJDaGFuZ2VUeXBlCiBSZW9yZGVyQnVm ZmVyQ29tbWl0Q0IKIFJlb3JkZXJCdWZmZXJDb21taXRQcmVwYXJlZENCCitSZW9yZGVyQnVmZmVy RERMTWVzc2FnZUNCCitSZW9yZGVyQnVmZmVyU3RyZWFtRERMTWVzc2FnZUNCCiBSZW9yZGVyQnVm ZmVyRGlza0NoYW5nZQogUmVvcmRlckJ1ZmZlckl0ZXJUWE5FbnRyeQogUmVvcmRlckJ1ZmZlckl0 ZXJUWE5TdGF0ZQotLSAKMi4zOC4xCgo= --00000000000047050c05f1ae2f85--