Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vWanc-005Grw-1z for pgsql-hackers@arkaria.postgresql.org; Fri, 19 Dec 2025 13:45:42 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vWanb-007oWR-20 for pgsql-hackers@arkaria.postgresql.org; Fri, 19 Dec 2025 13:45:40 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vWanb-007oWJ-0O for pgsql-hackers@lists.postgresql.org; Fri, 19 Dec 2025 13:45:40 +0000 Received: from mail-dl1-x1229.google.com ([2607:f8b0:4864:20::1229]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vWanX-001bhC-2L for pgsql-hackers@postgresql.org; Fri, 19 Dec 2025 13:45:39 +0000 Received: by mail-dl1-x1229.google.com with SMTP id a92af1059eb24-11b6bc976d6so4223408c88.0 for ; Fri, 19 Dec 2025 05:45:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1766151933; x=1766756733; darn=postgresql.org; h=in-reply-to:references:subject:cc:to:from:message-id:date :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=vOLqcmCqhx5fVtRNvN7bCqUVT9DmvNeFKdvsDBGkpm8=; b=I69Jvb2ysUYKANOwH2NyYPSo9m591oNO3NFe0ZvdzAGf+5qebqqLaJyR+tj3IRqeLd W3hUF20L+2DqhAE4LEBmGATZZ2dLASo/DN+cXbfvJDkK5IjYqLmwr62ngWmTvc/6iVax ZYBQYdVhfn3v2sk3JzfB+x6BU7HKSFwvaj9CKO0/qjm22XhfVWmRwVIjcVtXkFTvlzqg id8UYwZ3huZ8dztmi0qi3Ps3ht9nMpWxFQQtIdiTKDJzEv9/YtGU5XH0VSuPdR6b2lW+ VKNZhNyKwKf5N/YVuXDGElkxYceCVRrXIRicRqsAexwGuSlrCKteZUF+GkdS+r3bClYY bfDA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766151933; x=1766756733; h=in-reply-to:references:subject:cc:to:from:message-id:date :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=vOLqcmCqhx5fVtRNvN7bCqUVT9DmvNeFKdvsDBGkpm8=; b=DM8vhf/GY7lhZTsNhhAhdPG4lVAviumCNmqOgk+zxXnhDi26Phd7u1KcE4Bwba449w aPgHOF3swZtxfJmFcqcKrS9HEZEEWEP+9vWiq/p7WwwH/rs+OwoUo39Nz2TY/gCrb0gB 5Dze6PiVbJXtnKHX5j5kakEASBFu1VUIAyiRGVSU83l5OhtXhGlg2CLqYQYG+/s+0O9y sNrhy1vaNp2b7Df9ziRHRp4gA3Ub98syNExyJdbBySMULM2WWHtDrYORXLL7cY+MMfKZ mtmE1btv6nz1dEG91xWUFvvccxFSDEz9TExDMQTtpJJT0J5eBuOBLnRsDDhYMZyBb8bz n3tg== X-Forwarded-Encrypted: i=1; AJvYcCUbOJlMLqWbDor8CaVbVJkR2MjcQWwIEb/SObdcdmKR/GArFhU/hnY+7Muzjy+Qt/aHYHhyAVMrX4z7nrcd@postgresql.org X-Gm-Message-State: AOJu0YytrxiDudr0Z/R7I6n4cLab8O+J497wo2YRT7lI55ZAIRBZLi4i Leru5RuuGoYDqV37eb9a8RCxHZY468jT+IDhPMSxbrDSTG+AdiS8qMJ5 X-Gm-Gg: AY/fxX486eWVrQTycjwZppr85PmrSGSn4uTKEJd2vqqU5AeVcRAys4ssUJTGg+SfTd3 ho3bM0iJj0HF80e50Oif2E/2LiQWrKO8VWIpomZYGqI5GHmq80iKH04s/O7X9uZnjM3VymLoY8B yyUnewxMxWaToev9dKu+dkcbJrMfcnS1uej0YAIa4ctpcbSgdacr2gVJfOvWTn1fKhDoW+ikrKp 9jOQuDycnSbtCK9kyyNeBXis/glFYItbSlCrgX9H/qvCkvRkmw8vcP3/+J+csZPHqFxeT32h94E dt8lC2eof44zpUGZe1jvbpZ9wbvQ9La+44lngZC+2pn6eDozQ23hBPybB/RgmLXquWXboUg7rij tZCRj3NJmJbxwmzhby7LP7l1Kd0s8e9MgjUQAOPXiZYj+ehecc5MGKaCtuYNZpxsBll6U3l61Qt lAgyTs6QanuWjyEdOSIVOe5jgJ3iF4ZlLBXSCPVwGFBvOA X-Google-Smtp-Source: AGHT+IFueuLGmlLhxjcU6fKFyLllL0SjRMs8bRhOS7RnDxy0/0y0zIUbTyvhBIoDhHz6LQkhYfwydQ== X-Received: by 2002:a05:7022:698b:b0:11b:9386:a38f with SMTP id a92af1059eb24-12061991877mr6899235c88.22.1766151933083; Fri, 19 Dec 2025 05:45:33 -0800 (PST) Received: from localhost ([2804:14d:328a:a59c:c556:594d:7976:9c07]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-1217254c734sm7739280c88.13.2025.12.19.05.45.30 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 19 Dec 2025 05:45:32 -0800 (PST) Content-Type: multipart/mixed; boundary=ba79e69925b52b52a6cf67524035fc64a4cd23c5da753b45f7537702bba2 Mime-Version: 1.0 Date: Fri, 19 Dec 2025 10:45:29 -0300 Message-Id: From: "Matheus Alcantara" To: "Alexander Pyhalov" , "Matheus Alcantara" Cc: "Alena Rybakina" , "Pgsql Hackers" Subject: Re: Asynchronous MergeAppend X-Mailer: aerc 0.21.0 References: <59be194c5a409fb9fc9f2031581b8a44@postgrespro.ru> <764dd8b8-6374-4f5a-aac7-d8e3f6ebe5fd@postgrespro.ru> <159b591411bb2c81332018927acbd509@postgrespro.ru> <2fb1d9923b6995492e7b163e6cb95402@postgrespro.ru> In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --ba79e69925b52b52a6cf67524035fc64a4cd23c5da753b45f7537702bba2 Content-Type: multipart/alternative; boundary=c83ab4b2283e256ce91533e053ee5b0cbe90669a590ed839c611c18c5cad --c83ab4b2283e256ce91533e053ee5b0cbe90669a590ed839c611c18c5cad Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Content-Type: text/plain; charset=UTF-8 On Thu Dec 18, 2025 at 6:56 AM -03, Alexander Pyhalov wrote: >> + noccurred =3D WaitEventSetWait(node->ms_eventset, -1 /* no timeout */ = ,=20 >> occurred_event, >> + nevents, WAIT_EVENT_APPEND_READY); >>=20 >> Should we use the same WAIT_EVENT_APPEND_READY or create a new wait >> event for merge append? > > I'm not sure that new wait event is needed - for observability I think=20 > it's not critical > to distinguish Append and MergeAppend when they waited for foreign=20 > scans. But also it's perhaps > doesn't do any harm to record specific wait event. > Ok, I think that we can keep this way for now and let's see if a new wait event is really needed. >> I've created Appender and AppenderState types that are used by >> Append/MergeAppend and AppendState/MergeAppendState respectively (I >> should have think in a better name for these base type, ideas are >> welcome). The execAppend.c was created to have the functions that can=20 >> be >> reused by Append and MergeAppend execution. I've tried to remove >> duplicated code blocks that was almost the same and that didn't require >> much refactoring. > > Overall I like new Appender node. Splitting code in this way really=20 > helps to avoid code duplication. > However, some similar code is still needed, because logic of getting new= =20 > tuples is different. > Indeed.=20 > Some minor issues I've noticed. > 1) ExecReScanAppender() sets node->needrequest to NULL.=20 > ExecReScanAppend() calls bms_free(node->as.needrequest) immediately=20 > after this. The same is true for ExecReScanMergeAppend(). We should move= =20 > it to ExecReScanAppender(). > Fixed > 2) In src/backend/executor/execAppend.c: > planstates are named as mergeplans in ExecEndAppender(), perhaps,=20 > appendplans or subplans are better names. > Fixed > ExecInitAppender() could use palloc_array() to allocate appendplanstates= =20 > - as ExecInitMergeAppend(). > Fixed -- Matheus Alcantara EDB: http://www.enterprisedb.com --c83ab4b2283e256ce91533e053ee5b0cbe90669a590ed839c611c18c5cad-- --ba79e69925b52b52a6cf67524035fc64a4cd23c5da753b45f7537702bba2 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v10-0001-mark_async_capable-subpath-should-match-subplan.patch Content-Type: text/plain; charset=utf-8; name=v10-0001-mark_async_capable-subpath-should-match-subplan.patch RnJvbSAyMTQyMDdhYjVkYzJjMmNkZGUxMmYwY2MyZWE0NzFmN2NjNTRkYTgwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kZXIgUHloYWxvdiA8YS5weWhhbG92QHBvc3RncmVz cHJvLnJ1PgpEYXRlOiBTYXQsIDE1IE5vdiAyMDI1IDEwOjE2OjI1ICswMzAwClN1YmplY3Q6IFtQ QVRDSCB2MTAgMS8zXSBtYXJrX2FzeW5jX2NhcGFibGUoKTogc3VicGF0aCBzaG91bGQgbWF0Y2gg c3VicGxhbgoKbWFya19hc3luY19jYXBhYmxlKCkgYmVsaWV2ZXMgdGhhdCBwYXRoIGNvcnJlc3Bv bmRzIHRvIHBsYW4uIFRoaXMgaXMKbm90IHRydWUgd2hlbiBjcmVhdGVfW21lcmdlX11hcHBlbmRf cGxhbigpIGluc2VydHMgc29ydCBub2RlLiBJbgp0aGlzIGNhc2UgbWFya19hc3luY19jYXBhYmxl KCkgY2FuIHRyZWF0IFNvcnQgcGxhbiBub2RlIGFzIHNvbWUKb3RoZXIgYW5kIGNyYXNoLiBGaXgg dGhpcyBieSBoYW5kbGluZyB0aGUgU29ydCBub2RlIHNlcGFyYXRlbHkuCgpUaGlzIGlzIG5lZWRl ZCB0byBtYWtlIE1lcmdlQXBwZW5kIG5vZGUgYXN5bmMtY2FwYWJsZSB0aGF0IHdpbGwKYmUgaW1w bGVtZW50ZWQgaW4gYSBuZXh0IGNvbW1pdC4KLS0tCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxh bi9jcmVhdGVwbGFuLmMgfCAxOCArKysrKysrKysrLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAx MCBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFu L2NyZWF0ZXBsYW4uYwppbmRleCBiYzQxN2Y5Mzg0MC4uODRmNjBjNDg2NTMgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYworKysgYi9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMKQEAgLTExMzksMTAgKzExMzksMTIgQEAgbWFy a19hc3luY19jYXBhYmxlX3BsYW4oUGxhbiAqcGxhbiwgUGF0aCAqcGF0aCkKIAkJCQlTdWJxdWVy eVNjYW4gKnNjYW5fcGxhbiA9IChTdWJxdWVyeVNjYW4gKikgcGxhbjsKIAogCQkJCS8qCi0JCQkJ ICogSWYgdGhlIGdlbmVyYXRlZCBwbGFuIG5vZGUgaW5jbHVkZXMgYSBnYXRpbmcgUmVzdWx0IG5v ZGUsCi0JCQkJICogd2UgY2FuJ3QgZXhlY3V0ZSBpdCBhc3luY2hyb25vdXNseS4KKwkJCQkgKiBD aGVjayB0aGF0IHBsYW4gaXMgcmVhbGx5IGEgU3VicXVlcnlTY2FuIGJlZm9yZSB1c2luZyBpdC4K KwkJCQkgKiBJdCBjYW4gYmUgbm90IHRydWUsIGlmIHRoZSBnZW5lcmF0ZWQgcGxhbiBub2RlIGlu Y2x1ZGVzIGEKKwkJCQkgKiBnYXRpbmcgUmVzdWx0IG5vZGUgb3IgYSBTb3J0IG5vZGUuIEluIHN1 Y2ggY2FzZSB3ZSBjYW4ndAorCQkJCSAqIGV4ZWN1dGUgaXQgYXN5bmNocm9ub3VzbHkuCiAJCQkJ ICovCi0JCQkJaWYgKElzQShwbGFuLCBSZXN1bHQpKQorCQkJCWlmICghSXNBKHBsYW4sIFN1YnF1 ZXJ5U2NhbikpCiAJCQkJCXJldHVybiBmYWxzZTsKIAogCQkJCS8qCkBAIC0xMTYwLDEwICsxMTYy LDEwIEBAIG1hcmtfYXN5bmNfY2FwYWJsZV9wbGFuKFBsYW4gKnBsYW4sIFBhdGggKnBhdGgpCiAJ CQkJRmR3Um91dGluZSAqZmR3cm91dGluZSA9IHBhdGgtPnBhcmVudC0+ZmR3cm91dGluZTsKIAog CQkJCS8qCi0JCQkJICogSWYgdGhlIGdlbmVyYXRlZCBwbGFuIG5vZGUgaW5jbHVkZXMgYSBnYXRp bmcgUmVzdWx0IG5vZGUsCi0JCQkJICogd2UgY2FuJ3QgZXhlY3V0ZSBpdCBhc3luY2hyb25vdXNs eS4KKwkJCQkgKiBJZiB0aGUgZ2VuZXJhdGVkIHBsYW4gbm9kZSBpbmNsdWRlcyBhIGdhdGluZyBS ZXN1bHQgbm9kZSBvcgorCQkJCSAqIGEgU29ydCBub2RlLCB3ZSBjYW4ndCBleGVjdXRlIGl0IGFz eW5jaHJvbm91c2x5LgogCQkJCSAqLwotCQkJCWlmIChJc0EocGxhbiwgUmVzdWx0KSkKKwkJCQlp ZiAoSXNBKHBsYW4sIFJlc3VsdCkgfHwgSXNBKHBsYW4sIFNvcnQpKQogCQkJCQlyZXR1cm4gZmFs c2U7CiAKIAkJCQlBc3NlcnQoZmR3cm91dGluZSAhPSBOVUxMKTsKQEAgLTExNzYsOSArMTE3OCw5 IEBAIG1hcmtfYXN5bmNfY2FwYWJsZV9wbGFuKFBsYW4gKnBsYW4sIFBhdGggKnBhdGgpCiAKIAkJ CS8qCiAJCQkgKiBJZiB0aGUgZ2VuZXJhdGVkIHBsYW4gbm9kZSBpbmNsdWRlcyBhIFJlc3VsdCBu b2RlIGZvciB0aGUKLQkJCSAqIHByb2plY3Rpb24sIHdlIGNhbid0IGV4ZWN1dGUgaXQgYXN5bmNo cm9ub3VzbHkuCisJCQkgKiBwcm9qZWN0aW9uIG9yIGEgU29ydCBub2RlLCB3ZSBjYW4ndCBleGVj dXRlIGl0IGFzeW5jaHJvbm91c2x5LgogCQkJICovCi0JCQlpZiAoSXNBKHBsYW4sIFJlc3VsdCkp CisJCQlpZiAoSXNBKHBsYW4sIFJlc3VsdCkgfHwgSXNBKHBsYW4sIFNvcnQpKQogCQkJCXJldHVy biBmYWxzZTsKIAogCQkJLyoKLS0gCjIuNTEuMgoK --ba79e69925b52b52a6cf67524035fc64a4cd23c5da753b45f7537702bba2 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v10-0002-MergeAppend-should-support-Async-Foreign-Scan-su.patch Content-Type: text/plain; charset=utf-8; name=v10-0002-MergeAppend-should-support-Async-Foreign-Scan-su.patch RnJvbSA5NTJmZWY2ZTlmMDVmNjYwOTYzNmU4MmI2MmRjMGY5ZjRlY2U2NDlmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kZXIgUHloYWxvdiA8YS5weWhhbG92QHBvc3RncmVz cHJvLnJ1PgpEYXRlOiBTYXQsIDE1IE5vdiAyMDI1IDEwOjIzOjQ3ICswMzAwClN1YmplY3Q6IFtQ QVRDSCB2MTAgMi8zXSBNZXJnZUFwcGVuZCBzaG91bGQgc3VwcG9ydCBBc3luYyBGb3JlaWduIFNj YW4KIHN1YnBsYW5zCgotLS0KIC4uLi9wb3N0Z3Jlc19mZHcvZXhwZWN0ZWQvcG9zdGdyZXNfZmR3 Lm91dCAgICB8IDI4OCArKysrKysrKysrKwogY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNf ZmR3LmMgICAgICAgICAgIHwgIDEwICstCiBjb250cmliL3Bvc3RncmVzX2Zkdy9zcWwvcG9zdGdy ZXNfZmR3LnNxbCAgICAgfCAgODcgKysrKwogZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sICAgICAg ICAgICAgICAgICAgICAgIHwgIDE0ICsKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNBc3luYy5j ICAgICAgICAgICAgICB8ICAgNCArCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQXBwZW5kLmMg ICAgICAgICAgICAgfCAgMjQgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVu ZC5jICAgICAgICB8IDQ3MSArKysrKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL29wdGltaXpl ci9wYXRoL2Nvc3RzaXplLmMgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIv cGxhbi9jcmVhdGVwbGFuLmMgICAgICAgfCAgIDkgKwogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9n dWNfcGFyYW1ldGVycy5kYXQgICAgIHwgICA4ICsKIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9z dGdyZXNxbC5jb25mLnNhbXBsZSB8ICAgMSArCiBzcmMvaW5jbHVkZS9leGVjdXRvci9ub2RlTWVy Z2VBcHBlbmQuaCAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgg ICAgICAgICAgICAgICAgIHwgIDU5ICsrKwogc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaCAg ICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmll d3Mub3V0ICAgICAgICB8ICAgMyArLQogMTUgZmlsZXMgY2hhbmdlZCwgOTUxIGluc2VydGlvbnMo KyksIDMwIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2V4 cGVjdGVkL3Bvc3RncmVzX2Zkdy5vdXQgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9w b3N0Z3Jlc19mZHcub3V0CmluZGV4IDQ4ZTMxODViMjI3Li5lMjI0MGQzNGQyMSAxMDA2NDQKLS0t IGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvZXhwZWN0ZWQvcG9zdGdyZXNfZmR3Lm91dAorKysgYi9j b250cmliL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0CkBAIC0xMTU1Niw2 ICsxMTU1Niw0NiBAQCBTRUxFQ1QgKiBGUk9NIHJlc3VsdF90YmwgT1JERVIgQlkgYTsKICgyIHJv d3MpCiAKIERFTEVURSBGUk9NIHJlc3VsdF90Ymw7CistLSBUZXN0IE1lcmdlIEFwcGVuZAorRVhQ TEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBhc3luY19wdCBXSEVSRSBi ICUgMTAwID0gMCBPUkRFUiBCWSBiLCBhOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBN ZXJnZSBBcHBlbmQKKyAgIFNvcnQgS2V5OiBhc3luY19wdC5iLCBhc3luY19wdC5hCisgICAtPiAg QXN5bmMgRm9yZWlnbiBTY2FuIG9uIHB1YmxpYy5hc3luY19wMSBhc3luY19wdF8xCisgICAgICAg ICBPdXRwdXQ6IGFzeW5jX3B0XzEuYSwgYXN5bmNfcHRfMS5iLCBhc3luY19wdF8xLmMKKyAgICAg ICAgIFJlbW90ZSBTUUw6IFNFTEVDVCBhLCBiLCBjIEZST00gcHVibGljLmJhc2VfdGJsMSBXSEVS RSAoKChiICUgMTAwKSA9IDApKSBPUkRFUiBCWSBiIEFTQyBOVUxMUyBMQVNULCBhIEFTQyBOVUxM UyBMQVNUCisgICAtPiAgQXN5bmMgRm9yZWlnbiBTY2FuIG9uIHB1YmxpYy5hc3luY19wMiBhc3lu Y19wdF8yCisgICAgICAgICBPdXRwdXQ6IGFzeW5jX3B0XzIuYSwgYXN5bmNfcHRfMi5iLCBhc3lu Y19wdF8yLmMKKyAgICAgICAgIFJlbW90ZSBTUUw6IFNFTEVDVCBhLCBiLCBjIEZST00gcHVibGlj LmJhc2VfdGJsMiBXSEVSRSAoKChiICUgMTAwKSA9IDApKSBPUkRFUiBCWSBiIEFTQyBOVUxMUyBM QVNULCBhIEFTQyBOVUxMUyBMQVNUCisoOCByb3dzKQorCitTRUxFQ1QgKiBGUk9NIGFzeW5jX3B0 IFdIRVJFIGIgJSAxMDAgPSAwIE9SREVSIEJZIGIsIGE7CisgIGEgICB8ICBiICB8ICBjICAgCist LS0tLS0rLS0tLS0rLS0tLS0tCisgMTAwMCB8ICAgMCB8IDAwMDAKKyAyMDAwIHwgICAwIHwgMDAw MAorIDExMDAgfCAxMDAgfCAwMTAwCisgMjEwMCB8IDEwMCB8IDAxMDAKKyAxMjAwIHwgMjAwIHwg MDIwMAorIDIyMDAgfCAyMDAgfCAwMjAwCisgMTMwMCB8IDMwMCB8IDAzMDAKKyAyMzAwIHwgMzAw IHwgMDMwMAorIDE0MDAgfCA0MDAgfCAwNDAwCisgMjQwMCB8IDQwMCB8IDA0MDAKKyAxNTAwIHwg NTAwIHwgMDUwMAorIDI1MDAgfCA1MDAgfCAwNTAwCisgMTYwMCB8IDYwMCB8IDA2MDAKKyAyNjAw IHwgNjAwIHwgMDYwMAorIDE3MDAgfCA3MDAgfCAwNzAwCisgMjcwMCB8IDcwMCB8IDA3MDAKKyAx ODAwIHwgODAwIHwgMDgwMAorIDI4MDAgfCA4MDAgfCAwODAwCisgMTkwMCB8IDkwMCB8IDA5MDAK KyAyOTAwIHwgOTAwIHwgMDkwMAorKDIwIHJvd3MpCisKIC0tIFRlc3QgZXJyb3IgaGFuZGxpbmcs IGlmIGFjY2Vzc2luZyBvbmUgb2YgdGhlIGZvcmVpZ24gcGFydGl0aW9ucyBlcnJvcnMgb3V0CiBD UkVBVEUgRk9SRUlHTiBUQUJMRSBhc3luY19wX2Jyb2tlbiBQQVJUSVRJT04gT0YgYXN5bmNfcHQg Rk9SIFZBTFVFUyBGUk9NICgxMDAwMCkgVE8gKDEwMDAxKQogICBTRVJWRVIgbG9vcGJhY2sgT1BU SU9OUyAodGFibGVfbmFtZSAnbm9uX2V4aXN0ZW50X3RhYmxlJyk7CkBAIC0xMTYwNCw2ICsxMTY0 NCw3NiBAQCBDT1BZIGFzeW5jX3B0IFRPIHN0ZG91dDsgLS1lcnJvcgogRVJST1I6ICBjYW5ub3Qg Y29weSBmcm9tIGZvcmVpZ24gdGFibGUgImFzeW5jX3AxIgogREVUQUlMOiAgUGFydGl0aW9uICJh c3luY19wMSIgaXMgYSBmb3JlaWduIHRhYmxlIGluIHBhcnRpdGlvbmVkIHRhYmxlICJhc3luY19w dCIKIEhJTlQ6ICBUcnkgdGhlIENPUFkgKFNFTEVDVCAuLi4pIFRPIHZhcmlhbnQuCistLSBUZXN0 IE1lcmdlIEFwcGVuZAorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJP TSBhc3luY19wdCBXSEVSRSBiID09PSA1MDUgT1JERVIgQlkgYiwgYTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgQXBwZW5kCisgICBTb3J0IEtleTogYXN5bmNf cHQuYiwgYXN5bmNfcHQuYQorICAgLT4gIEFzeW5jIEZvcmVpZ24gU2NhbiBvbiBwdWJsaWMuYXN5 bmNfcDEgYXN5bmNfcHRfMQorICAgICAgICAgT3V0cHV0OiBhc3luY19wdF8xLmEsIGFzeW5jX3B0 XzEuYiwgYXN5bmNfcHRfMS5jCisgICAgICAgICBGaWx0ZXI6IChhc3luY19wdF8xLmIgPT09IDUw NSkKKyAgICAgICAgIFJlbW90ZSBTUUw6IFNFTEVDVCBhLCBiLCBjIEZST00gcHVibGljLmJhc2Vf dGJsMSBPUkRFUiBCWSBiIEFTQyBOVUxMUyBMQVNULCBhIEFTQyBOVUxMUyBMQVNUCisgICAtPiAg QXN5bmMgRm9yZWlnbiBTY2FuIG9uIHB1YmxpYy5hc3luY19wMiBhc3luY19wdF8yCisgICAgICAg ICBPdXRwdXQ6IGFzeW5jX3B0XzIuYSwgYXN5bmNfcHRfMi5iLCBhc3luY19wdF8yLmMKKyAgICAg ICAgIEZpbHRlcjogKGFzeW5jX3B0XzIuYiA9PT0gNTA1KQorICAgICAgICAgUmVtb3RlIFNRTDog U0VMRUNUIGEsIGIsIGMgRlJPTSBwdWJsaWMuYmFzZV90YmwyIE9SREVSIEJZIGIgQVNDIE5VTExT IExBU1QsIGEgQVNDIE5VTExTIExBU1QKKyAgIC0+ICBBc3luYyBGb3JlaWduIFNjYW4gb24gcHVi bGljLmFzeW5jX3AzIGFzeW5jX3B0XzMKKyAgICAgICAgIE91dHB1dDogYXN5bmNfcHRfMy5hLCBh c3luY19wdF8zLmIsIGFzeW5jX3B0XzMuYworICAgICAgICAgRmlsdGVyOiAoYXN5bmNfcHRfMy5i ID09PSA1MDUpCisgICAgICAgICBSZW1vdGUgU1FMOiBTRUxFQ1QgYSwgYiwgYyBGUk9NIHB1Ymxp Yy5iYXNlX3RibDMgT1JERVIgQlkgYiBBU0MgTlVMTFMgTEFTVCwgYSBBU0MgTlVMTFMgTEFTVAor KDE0IHJvd3MpCisKK1NFTEVDVCAqIEZST00gYXN5bmNfcHQgV0hFUkUgYiA9PT0gNTA1IE9SREVS IEJZIGIsIGE7CisgIGEgICB8ICBiICB8ICBjICAgCistLS0tLS0rLS0tLS0rLS0tLS0tCisgMTUw NSB8IDUwNSB8IDA1MDUKKyAyNTA1IHwgNTA1IHwgMDUwNQorIDM1MDUgfCA1MDUgfCAwNTA1Ciso MyByb3dzKQorCistLSBUZXN0IGFzeW5jIE1lcmdlIEFwcGVuZCByZXNjYW4KK0VYUExBSU4gKFZF UkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVAorCUFSUkFZKFNFTEVDVCBmLmkgRlJPTSAoU0VMRUNU IGIgKyBnLmkgRlJPTSBhc3luY19wdCBXSEVSRSBhID4gZy5pIE9SREVSIEJZIGIpIGYoaSkgT1JE RVIgQlkgZi5pIExJTUlUIDEwKQorRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMykgZyhpKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBGdW5jdGlvbiBTY2FuIG9uIHBnX2Nh dGFsb2cuZ2VuZXJhdGVfc2VyaWVzIGcKKyAgIE91dHB1dDogQVJSQVkoU3ViUGxhbiBhcnJheV8x KQorICAgRnVuY3Rpb24gQ2FsbDogZ2VuZXJhdGVfc2VyaWVzKDEsIDMpCisgICBTdWJQbGFuIGFy cmF5XzEKKyAgICAgLT4gIExpbWl0CisgICAgICAgICAgIE91dHB1dDogZi5pCisgICAgICAgICAg IC0+ICBTb3J0CisgICAgICAgICAgICAgICAgIE91dHB1dDogZi5pCisgICAgICAgICAgICAgICAg IFNvcnQgS2V5OiBmLmkKKyAgICAgICAgICAgICAgICAgLT4gIFN1YnF1ZXJ5IFNjYW4gb24gZgor ICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IGYuaQorICAgICAgICAgICAgICAgICAgICAg ICAtPiAgTWVyZ2UgQXBwZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcnQgS2V5 OiBhc3luY19wdC5iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBBc3luYyBGb3Jl aWduIFNjYW4gb24gcHVibGljLmFzeW5jX3AxIGFzeW5jX3B0XzEKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgT3V0cHV0OiAoYXN5bmNfcHRfMS5iICsgZy5pKSwgYXN5bmNfcHRf MS5iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbW90ZSBTUUw6IFNFTEVD VCBiIEZST00gcHVibGljLmJhc2VfdGJsMSBXSEVSRSAoKGEgPiAkMTo6aW50ZWdlcikpIE9SREVS IEJZIGIgQVNDIE5VTExTIExBU1QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEFz eW5jIEZvcmVpZ24gU2NhbiBvbiBwdWJsaWMuYXN5bmNfcDIgYXN5bmNfcHRfMgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IChhc3luY19wdF8yLmIgKyBnLmkpLCBh c3luY19wdF8yLmIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVtb3RlIFNR TDogU0VMRUNUIGIgRlJPTSBwdWJsaWMuYmFzZV90YmwyIFdIRVJFICgoYSA+ICQxOjppbnRlZ2Vy KSkgT1JERVIgQlkgYiBBU0MgTlVMTFMgTEFTVAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAtPiAgQXN5bmMgRm9yZWlnbiBTY2FuIG9uIHB1YmxpYy5hc3luY19wMyBhc3luY19wdF8zCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogKGFzeW5jX3B0XzMuYiAr IGcuaSksIGFzeW5jX3B0XzMuYgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBS ZW1vdGUgU1FMOiBTRUxFQ1QgYiBGUk9NIHB1YmxpYy5iYXNlX3RibDMgV0hFUkUgKChhID4gJDE6 OmludGVnZXIpKSBPUkRFUiBCWSBiIEFTQyBOVUxMUyBMQVNUCisoMjIgcm93cykKKworU0VMRUNU CisJQVJSQVkoU0VMRUNUIGYuaSBGUk9NIChTRUxFQ1QgYiArIGcuaSBGUk9NIGFzeW5jX3B0IFdI RVJFIGEgPiBnLmkgT1JERVIgQlkgYikgZihpKSBPUkRFUiBCWSBmLmkgTElNSVQgMTApCitGUk9N IGdlbmVyYXRlX3NlcmllcygxLCAzKSBnKGkpOworICAgICAgICAgICBhcnJheSAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB7MSwxLDEsNiw2LDYsMTEsMTEsMTEsMTZ9 CisgezIsMiwyLDcsNyw3LDEyLDEyLDEyLDE3fQorIHszLDMsMyw4LDgsOCwxMywxMywxMywxOH0K KygzIHJvd3MpCisKIERST1AgRk9SRUlHTiBUQUJMRSBhc3luY19wMzsKIERST1AgVEFCTEUgYmFz ZV90YmwzOwogLS0gQ2hlY2sgY2FzZSB3aGVyZSB0aGUgcGFydGl0aW9uZWQgdGFibGUgaGFzIGxv Y2FsL3JlbW90ZSBwYXJ0aXRpb25zCkBAIC0xMTYzOSw2ICsxMTc0OSwzNyBAQCBTRUxFQ1QgKiBG Uk9NIHJlc3VsdF90YmwgT1JERVIgQlkgYTsKICgzIHJvd3MpCiAKIERFTEVURSBGUk9NIHJlc3Vs dF90Ymw7CistLSBUZXN0IE1lcmdlIEFwcGVuZAorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZG KQorU0VMRUNUICogRlJPTSBhc3luY19wdCBXSEVSRSBiID09PSA1MDUgT1JERVIgQlkgYiwgYTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgQXBwZW5kCisgICBT b3J0IEtleTogYXN5bmNfcHQuYiwgYXN5bmNfcHQuYQorICAgLT4gIEFzeW5jIEZvcmVpZ24gU2Nh biBvbiBwdWJsaWMuYXN5bmNfcDEgYXN5bmNfcHRfMQorICAgICAgICAgT3V0cHV0OiBhc3luY19w dF8xLmEsIGFzeW5jX3B0XzEuYiwgYXN5bmNfcHRfMS5jCisgICAgICAgICBGaWx0ZXI6IChhc3lu Y19wdF8xLmIgPT09IDUwNSkKKyAgICAgICAgIFJlbW90ZSBTUUw6IFNFTEVDVCBhLCBiLCBjIEZS T00gcHVibGljLmJhc2VfdGJsMSBPUkRFUiBCWSBiIEFTQyBOVUxMUyBMQVNULCBhIEFTQyBOVUxM UyBMQVNUCisgICAtPiAgQXN5bmMgRm9yZWlnbiBTY2FuIG9uIHB1YmxpYy5hc3luY19wMiBhc3lu Y19wdF8yCisgICAgICAgICBPdXRwdXQ6IGFzeW5jX3B0XzIuYSwgYXN5bmNfcHRfMi5iLCBhc3lu Y19wdF8yLmMKKyAgICAgICAgIEZpbHRlcjogKGFzeW5jX3B0XzIuYiA9PT0gNTA1KQorICAgICAg ICAgUmVtb3RlIFNRTDogU0VMRUNUIGEsIGIsIGMgRlJPTSBwdWJsaWMuYmFzZV90YmwyIE9SREVS IEJZIGIgQVNDIE5VTExTIExBU1QsIGEgQVNDIE5VTExTIExBU1QKKyAgIC0+ICBTb3J0CisgICAg ICAgICBPdXRwdXQ6IGFzeW5jX3B0XzMuYSwgYXN5bmNfcHRfMy5iLCBhc3luY19wdF8zLmMKKyAg ICAgICAgIFNvcnQgS2V5OiBhc3luY19wdF8zLmIsIGFzeW5jX3B0XzMuYQorICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIHB1YmxpYy5hc3luY19wMyBhc3luY19wdF8zCisgICAgICAgICAgICAgICBP dXRwdXQ6IGFzeW5jX3B0XzMuYSwgYXN5bmNfcHRfMy5iLCBhc3luY19wdF8zLmMKKyAgICAgICAg ICAgICAgIEZpbHRlcjogKGFzeW5jX3B0XzMuYiA9PT0gNTA1KQorKDE2IHJvd3MpCisKK1NFTEVD VCAqIEZST00gYXN5bmNfcHQgV0hFUkUgYiA9PT0gNTA1IE9SREVSIEJZIGIsIGE7CisgIGEgICB8 ICBiICB8ICBjICAgCistLS0tLS0rLS0tLS0rLS0tLS0tCisgMTUwNSB8IDUwNSB8IDA1MDUKKyAy NTA1IHwgNTA1IHwgMDUwNQorIDM1MDUgfCA1MDUgfCAwNTA1CisoMyByb3dzKQorCiAtLSBwYXJ0 aXRpb253aXNlIGpvaW5zCiBTRVQgZW5hYmxlX3BhcnRpdGlvbndpc2Vfam9pbiBUTyB0cnVlOwog Q1JFQVRFIFRBQkxFIGpvaW5fdGJsIChhMSBpbnQsIGIxIGludCwgYzEgdGV4dCwgYTIgaW50LCBi MiBpbnQsIGMyIHRleHQpOwpAQCAtMTI0MjEsNiArMTI1NjIsMTUzIEBAIFNFTEVDVCBhIEZST00g YmFzZV90YmwgV0hFUkUgKGEsIHJhbmRvbSgpID4gMCkgSU4gKFNFTEVDVCBhLCByYW5kb20oKSA+ IDAgRlJPTSBmCiBEUk9QIEZPUkVJR04gVEFCTEUgZm9yZWlnbl90YmwgQ0FTQ0FERTsKIE5PVElD RTogIGRyb3AgY2FzY2FkZXMgdG8gZm9yZWlnbiB0YWJsZSBmb3JlaWduX3RibDIKIERST1AgVEFC TEUgYmFzZV90Ymw7CistLSBUZXN0IGFzeW5jIE1lcmdlIEFwcGVuZAorQ1JFQVRFIFRBQkxFIGRp c3RyMSAoaSBpbnQsIGogaW50LCBrIHRleHQpIFBBUlRJVElPTiBCWSBIQVNIIChpKTsKK0NSRUFU RSBUQUJMRSBiYXNlMSAoaSBpbnQsIGogaW50LCBrIHRleHQpOworQ1JFQVRFIFRBQkxFIGJhc2Uy IChpIGludCwgaiBpbnQsIGsgdGV4dCk7CitDUkVBVEUgRk9SRUlHTiBUQUJMRSBkaXN0cjFfcDEg UEFSVElUSU9OIE9GIGRpc3RyMSBGT1IgVkFMVUVTIFdJVEggKE1PRFVMVVMgMiwgUkVNQUlOREVS IDApCitTRVJWRVIgbG9vcGJhY2sgT1BUSU9OUyAodGFibGVfbmFtZSAnYmFzZTEnKTsKK0NSRUFU RSBGT1JFSUdOIFRBQkxFIGRpc3RyMV9wMiBQQVJUSVRJT04gT0YgZGlzdHIxIEZPUiBWQUxVRVMg V0lUSCAoTU9EVUxVUyAyLCBSRU1BSU5ERVIgMSkKK1NFUlZFUiBsb29wYmFjayBPUFRJT05TICh0 YWJsZV9uYW1lICdiYXNlMicpOworQ1JFQVRFIFRBQkxFIGRpc3RyMiAoaSBpbnQsIGogaW50LCBr IHRleHQpIFBBUlRJVElPTiBCWSBIQVNIIChpKTsKK0NSRUFURSBUQUJMRSBiYXNlMyAoaSBpbnQs IGogaW50LCBrIHRleHQpOworQ1JFQVRFIFRBQkxFIGJhc2U0IChpIGludCwgaiBpbnQsIGsgdGV4 dCk7CitDUkVBVEUgRk9SRUlHTiBUQUJMRSBkaXN0cjJfcDEgUEFSVElUSU9OIE9GIGRpc3RyMiBG T1IgVkFMVUVTIFdJVEggKE1PRFVMVVMgMiwgUkVNQUlOREVSIDApCitTRVJWRVIgbG9vcGJhY2sg T1BUSU9OUyAodGFibGVfbmFtZSAnYmFzZTMnKTsKK0NSRUFURSBGT1JFSUdOIFRBQkxFIGRpc3Ry Ml9wMiBQQVJUSVRJT04gT0YgZGlzdHIyIEZPUiBWQUxVRVMgV0lUSCAoTU9EVUxVUyAyLCBSRU1B SU5ERVIgMSkKK1NFUlZFUiBsb29wYmFjayBPUFRJT05TICh0YWJsZV9uYW1lICdiYXNlNCcpOwor SU5TRVJUIElOVE8gZGlzdHIxCitTRUxFQ1QgaSwgaSoxMCwgJ2RhdGFfJyB8fCBpIEZST00gZ2Vu ZXJhdGVfc2VyaWVzKDEsIDEwMDApIGk7CitJTlNFUlQgSU5UTyBkaXN0cjIKK1NFTEVDVCBpLCBp KjEwLCAnZGF0YV8nIHx8IGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwKSBpOworQU5BTFla RSBkaXN0cjFfcDE7CitBTkFMWVpFIGRpc3RyMV9wMjsKK0FOQUxZWkUgZGlzdHIyX3AxOworQU5B TFlaRSBkaXN0cjJfcDI7CitTRVQgZW5hYmxlX3BhcnRpdGlvbndpc2Vfam9pbiBUTyBPTjsKKy0t IFRlc3Qgam9pbnMgd2l0aCBhc3luYyBNZXJnZSBBcHBlbmQKK0VYUExBSU4gKFZFUkJPU0UsIENP U1RTIE9GRikKK1NFTEVDVCAqIEZST00gZGlzdHIxLCBkaXN0cjIgV0hFUkUgZGlzdHIxLmk9ZGlz dHIyLmkgQU5EIGRpc3RyMi5qID4gOTAgYW5kIGRpc3RyMi5rIGxpa2UgJ2RhdGElJworT1JERVIg QlkgZGlzdHIyLmkgTElNSVQgMTA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTGltaXQK KyAgIE91dHB1dDogZGlzdHIxLmksIGRpc3RyMS5qLCBkaXN0cjEuaywgZGlzdHIyLmksIGRpc3Ry Mi5qLCBkaXN0cjIuaworICAgLT4gIE1lcmdlIEFwcGVuZAorICAgICAgICAgU29ydCBLZXk6IGRp c3RyMS5pCisgICAgICAgICAtPiAgQXN5bmMgRm9yZWlnbiBTY2FuCisgICAgICAgICAgICAgICBP dXRwdXQ6IGRpc3RyMV8xLmksIGRpc3RyMV8xLmosIGRpc3RyMV8xLmssIGRpc3RyMl8xLmksIGRp c3RyMl8xLmosIGRpc3RyMl8xLmsKKyAgICAgICAgICAgICAgIFJlbGF0aW9uczogKHB1YmxpYy5k aXN0cjFfcDEgZGlzdHIxXzEpIElOTkVSIEpPSU4gKHB1YmxpYy5kaXN0cjJfcDEgZGlzdHIyXzEp CisgICAgICAgICAgICAgICBSZW1vdGUgU1FMOiBTRUxFQ1QgcjMuaSwgcjMuaiwgcjMuaywgcjUu aSwgcjUuaiwgcjUuayBGUk9NIChwdWJsaWMuYmFzZTEgcjMgSU5ORVIgSk9JTiBwdWJsaWMuYmFz ZTMgcjUgT04gKCgocjMuaSA9IHI1LmkpKSBBTkQgKChyNS5qID4gOTApKSBBTkQgKChyNS5rIH5+ ICdkYXRhJScpKSkpIE9SREVSIEJZIHIzLmkgQVNDIE5VTExTIExBU1QKKyAgICAgICAgIC0+ICBB c3luYyBGb3JlaWduIFNjYW4KKyAgICAgICAgICAgICAgIE91dHB1dDogZGlzdHIxXzIuaSwgZGlz dHIxXzIuaiwgZGlzdHIxXzIuaywgZGlzdHIyXzIuaSwgZGlzdHIyXzIuaiwgZGlzdHIyXzIuawor ICAgICAgICAgICAgICAgUmVsYXRpb25zOiAocHVibGljLmRpc3RyMV9wMiBkaXN0cjFfMikgSU5O RVIgSk9JTiAocHVibGljLmRpc3RyMl9wMiBkaXN0cjJfMikKKyAgICAgICAgICAgICAgIFJlbW90 ZSBTUUw6IFNFTEVDVCByNC5pLCByNC5qLCByNC5rLCByNi5pLCByNi5qLCByNi5rIEZST00gKHB1 YmxpYy5iYXNlMiByNCBJTk5FUiBKT0lOIHB1YmxpYy5iYXNlNCByNiBPTiAoKChyNC5pID0gcjYu aSkpIEFORCAoKHI2LmogPiA5MCkpIEFORCAoKHI2Lmsgfn4gJ2RhdGElJykpKSkgT1JERVIgQlkg cjQuaSBBU0MgTlVMTFMgTEFTVAorKDEyIHJvd3MpCisKK1NFTEVDVCAqIEZST00gZGlzdHIxLCBk aXN0cjIgV0hFUkUgZGlzdHIxLmk9ZGlzdHIyLmkgQU5EIGRpc3RyMi5qID4gOTAgYW5kIGRpc3Ry Mi5rIGxpa2UgJ2RhdGElJworT1JERVIgQlkgZGlzdHIyLmkgTElNSVQgMTA7CisgaSAgfCAgaiAg fCAgICBrICAgIHwgaSAgfCAgaiAgfCAgICBrICAgIAorLS0tLSstLS0tLSstLS0tLS0tLS0rLS0t LSstLS0tLSstLS0tLS0tLS0KKyAxMCB8IDEwMCB8IGRhdGFfMTAgfCAxMCB8IDEwMCB8IGRhdGFf MTAKKyAxMSB8IDExMCB8IGRhdGFfMTEgfCAxMSB8IDExMCB8IGRhdGFfMTEKKyAxMiB8IDEyMCB8 IGRhdGFfMTIgfCAxMiB8IDEyMCB8IGRhdGFfMTIKKyAxMyB8IDEzMCB8IGRhdGFfMTMgfCAxMyB8 IDEzMCB8IGRhdGFfMTMKKyAxNCB8IDE0MCB8IGRhdGFfMTQgfCAxNCB8IDE0MCB8IGRhdGFfMTQK KyAxNSB8IDE1MCB8IGRhdGFfMTUgfCAxNSB8IDE1MCB8IGRhdGFfMTUKKyAxNiB8IDE2MCB8IGRh dGFfMTYgfCAxNiB8IDE2MCB8IGRhdGFfMTYKKyAxNyB8IDE3MCB8IGRhdGFfMTcgfCAxNyB8IDE3 MCB8IGRhdGFfMTcKKyAxOCB8IDE4MCB8IGRhdGFfMTggfCAxOCB8IDE4MCB8IGRhdGFfMTgKKyAx OSB8IDE5MCB8IGRhdGFfMTkgfCAxOSB8IDE5MCB8IGRhdGFfMTkKKygxMCByb3dzKQorCitFWFBM QUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIGRpc3RyMSBMRUZUIEpPSU4g ZGlzdHIyIE9OIGRpc3RyMS5pPWRpc3RyMi5pIEFORCBkaXN0cjIuayBsaWtlICdkYXRhJScgV0hF UkUgIGRpc3RyMS5pID4gOTAKK09SREVSIEJZIGRpc3RyMS5pIExJTUlUIDIwOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgTGltaXQKKyAgIE91dHB1dDogZGlzdHIxLmksIGRpc3RyMS5q LCBkaXN0cjEuaywgZGlzdHIyLmksIGRpc3RyMi5qLCBkaXN0cjIuaworICAgLT4gIE1lcmdlIEFw cGVuZAorICAgICAgICAgU29ydCBLZXk6IGRpc3RyMS5pCisgICAgICAgICAtPiAgQXN5bmMgRm9y ZWlnbiBTY2FuCisgICAgICAgICAgICAgICBPdXRwdXQ6IGRpc3RyMV8xLmksIGRpc3RyMV8xLmos IGRpc3RyMV8xLmssIGRpc3RyMl8xLmksIGRpc3RyMl8xLmosIGRpc3RyMl8xLmsKKyAgICAgICAg ICAgICAgIFJlbGF0aW9uczogKHB1YmxpYy5kaXN0cjFfcDEgZGlzdHIxXzEpIExFRlQgSk9JTiAo cHVibGljLmRpc3RyMl9wMSBkaXN0cjJfMSkKKyAgICAgICAgICAgICAgIFJlbW90ZSBTUUw6IFNF TEVDVCByNC5pLCByNC5qLCByNC5rLCByNi5pLCByNi5qLCByNi5rIEZST00gKHB1YmxpYy5iYXNl MSByNCBMRUZUIEpPSU4gcHVibGljLmJhc2UzIHI2IE9OICgoKHI0LmkgPSByNi5pKSkgQU5EICgo cjYuayB+fiAnZGF0YSUnKSkpKSBXSEVSRSAoKHI0LmkgPiA5MCkpIE9SREVSIEJZIHI0LmkgQVND IE5VTExTIExBU1QKKyAgICAgICAgIC0+ICBBc3luYyBGb3JlaWduIFNjYW4KKyAgICAgICAgICAg ICAgIE91dHB1dDogZGlzdHIxXzIuaSwgZGlzdHIxXzIuaiwgZGlzdHIxXzIuaywgZGlzdHIyXzIu aSwgZGlzdHIyXzIuaiwgZGlzdHIyXzIuaworICAgICAgICAgICAgICAgUmVsYXRpb25zOiAocHVi bGljLmRpc3RyMV9wMiBkaXN0cjFfMikgTEVGVCBKT0lOIChwdWJsaWMuZGlzdHIyX3AyIGRpc3Ry Ml8yKQorICAgICAgICAgICAgICAgUmVtb3RlIFNRTDogU0VMRUNUIHI1LmksIHI1LmosIHI1Lmss IHI3LmksIHI3LmosIHI3LmsgRlJPTSAocHVibGljLmJhc2UyIHI1IExFRlQgSk9JTiBwdWJsaWMu YmFzZTQgcjcgT04gKCgocjUuaSA9IHI3LmkpKSBBTkQgKChyNy5rIH5+ICdkYXRhJScpKSkpIFdI RVJFICgocjUuaSA+IDkwKSkgT1JERVIgQlkgcjUuaSBBU0MgTlVMTFMgTEFTVAorKDEyIHJvd3Mp CisKK1NFTEVDVCAqIEZST00gZGlzdHIxIExFRlQgSk9JTiBkaXN0cjIgT04gIGRpc3RyMS5pPWRp c3RyMi5pIEFORCBkaXN0cjIuayBsaWtlICdkYXRhJScgV0hFUkUgZGlzdHIxLmkgPiA5MAorT1JE RVIgQlkgZGlzdHIxLmkgTElNSVQgMjA7CisgIGkgIHwgIGogICB8ICAgIGsgICAgIHwgIGkgIHwg IGogICB8ICAgIGsgICAgIAorLS0tLS0rLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tKy0t LS0tLS0tLS0KKyAgOTEgfCAgOTEwIHwgZGF0YV85MSAgfCAgOTEgfCAgOTEwIHwgZGF0YV85MQor ICA5MiB8ICA5MjAgfCBkYXRhXzkyICB8ICA5MiB8ICA5MjAgfCBkYXRhXzkyCisgIDkzIHwgIDkz MCB8IGRhdGFfOTMgIHwgIDkzIHwgIDkzMCB8IGRhdGFfOTMKKyAgOTQgfCAgOTQwIHwgZGF0YV85 NCAgfCAgOTQgfCAgOTQwIHwgZGF0YV85NAorICA5NSB8ICA5NTAgfCBkYXRhXzk1ICB8ICA5NSB8 ICA5NTAgfCBkYXRhXzk1CisgIDk2IHwgIDk2MCB8IGRhdGFfOTYgIHwgIDk2IHwgIDk2MCB8IGRh dGFfOTYKKyAgOTcgfCAgOTcwIHwgZGF0YV85NyAgfCAgOTcgfCAgOTcwIHwgZGF0YV85NworICA5 OCB8ICA5ODAgfCBkYXRhXzk4ICB8ICA5OCB8ICA5ODAgfCBkYXRhXzk4CisgIDk5IHwgIDk5MCB8 IGRhdGFfOTkgIHwgIDk5IHwgIDk5MCB8IGRhdGFfOTkKKyAxMDAgfCAxMDAwIHwgZGF0YV8xMDAg fCAxMDAgfCAxMDAwIHwgZGF0YV8xMDAKKyAxMDEgfCAxMDEwIHwgZGF0YV8xMDEgfCAgICAgfCAg ICAgIHwgCisgMTAyIHwgMTAyMCB8IGRhdGFfMTAyIHwgICAgIHwgICAgICB8IAorIDEwMyB8IDEw MzAgfCBkYXRhXzEwMyB8ICAgICB8ICAgICAgfCAKKyAxMDQgfCAxMDQwIHwgZGF0YV8xMDQgfCAg ICAgfCAgICAgIHwgCisgMTA1IHwgMTA1MCB8IGRhdGFfMTA1IHwgICAgIHwgICAgICB8IAorIDEw NiB8IDEwNjAgfCBkYXRhXzEwNiB8ICAgICB8ICAgICAgfCAKKyAxMDcgfCAxMDcwIHwgZGF0YV8x MDcgfCAgICAgfCAgICAgIHwgCisgMTA4IHwgMTA4MCB8IGRhdGFfMTA4IHwgICAgIHwgICAgICB8 IAorIDEwOSB8IDEwOTAgfCBkYXRhXzEwOSB8ICAgICB8ICAgICAgfCAKKyAxMTAgfCAxMTAwIHwg ZGF0YV8xMTAgfCAgICAgfCAgICAgIHwgCisoMjAgcm93cykKKworLS0gVGVzdCBwcnVuaW5nIHdp dGggYXN5bmMgTWVyZ2UgQXBwZW5kCitERUxFVEUgRlJPTSBkaXN0cjI7CitJTlNFUlQgSU5UTyBk aXN0cjIKK1NFTEVDVCBpJTEwLCBpKjEwLCAnZGF0YV8nIHx8IGkgRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoMSwgMTAwMCkgaTsKK0RFQUxMT0NBVEUgQUxMOworU0VUIHBsYW5fY2FjaGVfbW9kZSBUTyBm b3JjZV9nZW5lcmljX3BsYW47CitQUkVQQVJFIGFzeW5jX3B0X3F1ZXJ5IChpbnQsIGludCkgQVMK KyAgU0VMRUNUICogRlJPTSBkaXN0cjIgV0hFUkUgaSA9IEFOWShBUlJBWVskMSwgJDJdKQorICBP UkRFUiBCWSBpLGoKKyAgTElNSVQgMTA7CitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCisJ RVhFQ1VURSBhc3luY19wdF9xdWVyeSgxLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgTGltaXQKKyAgIE91dHB1dDogZGlzdHIyLmksIGRpc3RyMi5qLCBkaXN0cjIuaworICAg LT4gIE1lcmdlIEFwcGVuZAorICAgICAgICAgU29ydCBLZXk6IGRpc3RyMi5pLCBkaXN0cjIuagor ICAgICAgICAgU3VicGxhbnMgUmVtb3ZlZDogMQorICAgICAgICAgLT4gIEFzeW5jIEZvcmVpZ24g U2NhbiBvbiBwdWJsaWMuZGlzdHIyX3AxIGRpc3RyMl8xCisgICAgICAgICAgICAgICBPdXRwdXQ6 IGRpc3RyMl8xLmksIGRpc3RyMl8xLmosIGRpc3RyMl8xLmsKKyAgICAgICAgICAgICAgIFJlbW90 ZSBTUUw6IFNFTEVDVCBpLCBqLCBrIEZST00gcHVibGljLmJhc2UzIFdIRVJFICgoaSA9IEFOWSAo QVJSQVlbJDE6OmludGVnZXIsICQyOjppbnRlZ2VyXSkpKSBPUkRFUiBCWSBpIEFTQyBOVUxMUyBM QVNULCBqIEFTQyBOVUxMUyBMQVNUCisoOCByb3dzKQorCitFWEVDVVRFIGFzeW5jX3B0X3F1ZXJ5 KDEsIDEpOworIGkgfCAgaiAgfCAgICBrICAgIAorLS0tKy0tLS0tKy0tLS0tLS0tLQorIDEgfCAg MTAgfCBkYXRhXzEKKyAxIHwgMTEwIHwgZGF0YV8xMQorIDEgfCAyMTAgfCBkYXRhXzIxCisgMSB8 IDMxMCB8IGRhdGFfMzEKKyAxIHwgNDEwIHwgZGF0YV80MQorIDEgfCA1MTAgfCBkYXRhXzUxCisg MSB8IDYxMCB8IGRhdGFfNjEKKyAxIHwgNzEwIHwgZGF0YV83MQorIDEgfCA4MTAgfCBkYXRhXzgx CisgMSB8IDkxMCB8IGRhdGFfOTEKKygxMCByb3dzKQorCitSRVNFVCBwbGFuX2NhY2hlX21vZGU7 CitSRVNFVCBlbmFibGVfcGFydGl0aW9ud2lzZV9qb2luOworRFJPUCBUQUJMRSBkaXN0cjEsIGRp c3RyMiwgYmFzZTEsIGJhc2UyLCBiYXNlMywgYmFzZTQ7CiBBTFRFUiBTRVJWRVIgbG9vcGJhY2sg T1BUSU9OUyAoRFJPUCBhc3luY19jYXBhYmxlKTsKIEFMVEVSIFNFUlZFUiBsb29wYmFjazIgT1BU SU9OUyAoRFJPUCBhc3luY19jYXBhYmxlKTsKIC0tID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL2Nv bnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcv cG9zdGdyZXNfZmR3LmMKaW5kZXggNWUxNzhjMjFiMzkuLmJkNTUxYTFkYjcyIDEwMDY0NAotLS0g YS9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYworKysgYi9jb250cmliL3Bvc3Rn cmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYwpAQCAtNzIxMywxMiArNzIxMywxNiBAQCBwb3N0Z3Jlc0Zv cmVpZ25Bc3luY0NvbmZpZ3VyZVdhaXQoQXN5bmNSZXF1ZXN0ICphcmVxKQogCUZvcmVpZ25TY2Fu U3RhdGUgKm5vZGUgPSAoRm9yZWlnblNjYW5TdGF0ZSAqKSBhcmVxLT5yZXF1ZXN0ZWU7CiAJUGdG ZHdTY2FuU3RhdGUgKmZzc3RhdGUgPSAoUGdGZHdTY2FuU3RhdGUgKikgbm9kZS0+ZmR3X3N0YXRl OwogCUFzeW5jUmVxdWVzdCAqcGVuZGluZ0FyZXEgPSBmc3N0YXRlLT5jb25uX3N0YXRlLT5wZW5k aW5nQXJlcTsKLQlBcHBlbmRTdGF0ZSAqcmVxdWVzdG9yID0gKEFwcGVuZFN0YXRlICopIGFyZXEt PnJlcXVlc3RvcjsKLQlXYWl0RXZlbnRTZXQgKnNldCA9IHJlcXVlc3Rvci0+YXNfZXZlbnRzZXQ7 CisJUGxhblN0YXRlICAqcmVxdWVzdG9yID0gYXJlcS0+cmVxdWVzdG9yOworCVdhaXRFdmVudFNl dCAqc2V0OworCUJpdG1hcHNldCAgKm5lZWRyZXF1ZXN0OwogCiAJLyogVGhpcyBzaG91bGQgbm90 IGJlIGNhbGxlZCB1bmxlc3MgY2FsbGJhY2tfcGVuZGluZyAqLwogCUFzc2VydChhcmVxLT5jYWxs YmFja19wZW5kaW5nKTsKIAorCXNldCA9IEdldEFwcGVuZEV2ZW50U2V0KHJlcXVlc3Rvcik7CisJ bmVlZHJlcXVlc3QgPSBHZXROZWVkUmVxdWVzdChyZXF1ZXN0b3IpOworCiAJLyoKIAkgKiBJZiBw cm9jZXNzX3BlbmRpbmdfcmVxdWVzdCgpIGhhcyBiZWVuIGludm9rZWQgb24gdGhlIGdpdmVuIHJl cXVlc3QKIAkgKiBiZWZvcmUgd2UgZ2V0IGhlcmUsIHdlIG1pZ2h0IGhhdmUgc29tZSB0dXBsZXMg YWxyZWFkeTsgaW4gd2hpY2ggY2FzZQpAQCAtNzI1Niw3ICs3MjYwLDcgQEAgcG9zdGdyZXNGb3Jl aWduQXN5bmNDb25maWd1cmVXYWl0KEFzeW5jUmVxdWVzdCAqYXJlcSkKIAkJICogYmVsb3csIGJl Y2F1c2Ugd2UgbWlnaHQgb3RoZXJ3aXNlIGVuZCB1cCB3aXRoIG5vIGNvbmZpZ3VyZWQgZXZlbnRz CiAJCSAqIG90aGVyIHRoYW4gdGhlIHBvc3RtYXN0ZXIgZGVhdGggZXZlbnQuCiAJCSAqLwotCQlp ZiAoIWJtc19pc19lbXB0eShyZXF1ZXN0b3ItPmFzX25lZWRyZXF1ZXN0KSkKKwkJaWYgKCFibXNf aXNfZW1wdHkobmVlZHJlcXVlc3QpKQogCQkJcmV0dXJuOwogCQlpZiAoR2V0TnVtUmVnaXN0ZXJl ZFdhaXRFdmVudHMoc2V0KSA+IDEpCiAJCQlyZXR1cm47CmRpZmYgLS1naXQgYS9jb250cmliL3Bv c3RncmVzX2Zkdy9zcWwvcG9zdGdyZXNfZmR3LnNxbCBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Nx bC9wb3N0Z3Jlc19mZHcuc3FsCmluZGV4IDlhOGY5ZTI4MTM1Li5hYTM4OGNiMDI3ZiAxMDA2NDQK LS0tIGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvc3FsL3Bvc3RncmVzX2Zkdy5zcWwKKysrIGIvY29u dHJpYi9wb3N0Z3Jlc19mZHcvc3FsL3Bvc3RncmVzX2Zkdy5zcWwKQEAgLTM5MjEsNiArMzkyMSwx MSBAQCBJTlNFUlQgSU5UTyByZXN1bHRfdGJsIFNFTEVDVCBhLCBiLCAnQUFBJyB8fCBjIEZST00g YXN5bmNfcHQgV0hFUkUgYiA9PT0gNTA1OwogU0VMRUNUICogRlJPTSByZXN1bHRfdGJsIE9SREVS IEJZIGE7CiBERUxFVEUgRlJPTSByZXN1bHRfdGJsOwogCistLSBUZXN0IE1lcmdlIEFwcGVuZAor RVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBhc3luY19wdCBXSEVS RSBiICUgMTAwID0gMCBPUkRFUiBCWSBiLCBhOworU0VMRUNUICogRlJPTSBhc3luY19wdCBXSEVS RSBiICUgMTAwID0gMCBPUkRFUiBCWSBiLCBhOworCiAtLSBUZXN0IGVycm9yIGhhbmRsaW5nLCBp ZiBhY2Nlc3Npbmcgb25lIG9mIHRoZSBmb3JlaWduIHBhcnRpdGlvbnMgZXJyb3JzIG91dAogQ1JF QVRFIEZPUkVJR04gVEFCTEUgYXN5bmNfcF9icm9rZW4gUEFSVElUSU9OIE9GIGFzeW5jX3B0IEZP UiBWQUxVRVMgRlJPTSAoMTAwMDApIFRPICgxMDAwMSkKICAgU0VSVkVSIGxvb3BiYWNrIE9QVElP TlMgKHRhYmxlX25hbWUgJ25vbl9leGlzdGVudF90YWJsZScpOwpAQCAtMzk0NCw2ICszOTQ5LDIw IEBAIERFTEVURSBGUk9NIHJlc3VsdF90Ymw7CiAtLSBUZXN0IENPUFkgVE8gd2hlbiBmb3JlaWdu IHRhYmxlIGlzIHBhcnRpdGlvbgogQ09QWSBhc3luY19wdCBUTyBzdGRvdXQ7IC0tZXJyb3IKIAor LS0gVGVzdCBNZXJnZSBBcHBlbmQKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVD VCAqIEZST00gYXN5bmNfcHQgV0hFUkUgYiA9PT0gNTA1IE9SREVSIEJZIGIsIGE7CitTRUxFQ1Qg KiBGUk9NIGFzeW5jX3B0IFdIRVJFIGIgPT09IDUwNSBPUkRFUiBCWSBiLCBhOworCistLSBUZXN0 IGFzeW5jIE1lcmdlIEFwcGVuZCByZXNjYW4KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikK K1NFTEVDVAorCUFSUkFZKFNFTEVDVCBmLmkgRlJPTSAoU0VMRUNUIGIgKyBnLmkgRlJPTSBhc3lu Y19wdCBXSEVSRSBhID4gZy5pIE9SREVSIEJZIGIpIGYoaSkgT1JERVIgQlkgZi5pIExJTUlUIDEw KQorRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMykgZyhpKTsKK1NFTEVDVAorCUFSUkFZKFNFTEVD VCBmLmkgRlJPTSAoU0VMRUNUIGIgKyBnLmkgRlJPTSBhc3luY19wdCBXSEVSRSBhID4gZy5pIE9S REVSIEJZIGIpIGYoaSkgT1JERVIgQlkgZi5pIExJTUlUIDEwKQorRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoMSwgMykgZyhpKTsKKwogRFJPUCBGT1JFSUdOIFRBQkxFIGFzeW5jX3AzOwogRFJPUCBUQUJM RSBiYXNlX3RibDM7CiAKQEAgLTM5NTksNiArMzk3OCwxMSBAQCBJTlNFUlQgSU5UTyByZXN1bHRf dGJsIFNFTEVDVCAqIEZST00gYXN5bmNfcHQgV0hFUkUgYiA9PT0gNTA1OwogU0VMRUNUICogRlJP TSByZXN1bHRfdGJsIE9SREVSIEJZIGE7CiBERUxFVEUgRlJPTSByZXN1bHRfdGJsOwogCistLSBU ZXN0IE1lcmdlIEFwcGVuZAorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUICog RlJPTSBhc3luY19wdCBXSEVSRSBiID09PSA1MDUgT1JERVIgQlkgYiwgYTsKK1NFTEVDVCAqIEZS T00gYXN5bmNfcHQgV0hFUkUgYiA9PT0gNTA1IE9SREVSIEJZIGIsIGE7CisKIC0tIHBhcnRpdGlv bndpc2Ugam9pbnMKIFNFVCBlbmFibGVfcGFydGl0aW9ud2lzZV9qb2luIFRPIHRydWU7CiAKQEAg LTQxOTcsNiArNDIyMSw2OSBAQCBTRUxFQ1QgYSBGUk9NIGJhc2VfdGJsIFdIRVJFIChhLCByYW5k b20oKSA+IDApIElOIChTRUxFQ1QgYSwgcmFuZG9tKCkgPiAwIEZST00gZgogRFJPUCBGT1JFSUdO IFRBQkxFIGZvcmVpZ25fdGJsIENBU0NBREU7CiBEUk9QIFRBQkxFIGJhc2VfdGJsOwogCistLSBU ZXN0IGFzeW5jIE1lcmdlIEFwcGVuZAorQ1JFQVRFIFRBQkxFIGRpc3RyMSAoaSBpbnQsIGogaW50 LCBrIHRleHQpIFBBUlRJVElPTiBCWSBIQVNIIChpKTsKK0NSRUFURSBUQUJMRSBiYXNlMSAoaSBp bnQsIGogaW50LCBrIHRleHQpOworQ1JFQVRFIFRBQkxFIGJhc2UyIChpIGludCwgaiBpbnQsIGsg dGV4dCk7CitDUkVBVEUgRk9SRUlHTiBUQUJMRSBkaXN0cjFfcDEgUEFSVElUSU9OIE9GIGRpc3Ry MSBGT1IgVkFMVUVTIFdJVEggKE1PRFVMVVMgMiwgUkVNQUlOREVSIDApCitTRVJWRVIgbG9vcGJh Y2sgT1BUSU9OUyAodGFibGVfbmFtZSAnYmFzZTEnKTsKK0NSRUFURSBGT1JFSUdOIFRBQkxFIGRp c3RyMV9wMiBQQVJUSVRJT04gT0YgZGlzdHIxIEZPUiBWQUxVRVMgV0lUSCAoTU9EVUxVUyAyLCBS RU1BSU5ERVIgMSkKK1NFUlZFUiBsb29wYmFjayBPUFRJT05TICh0YWJsZV9uYW1lICdiYXNlMicp OworCitDUkVBVEUgVEFCTEUgZGlzdHIyIChpIGludCwgaiBpbnQsIGsgdGV4dCkgUEFSVElUSU9O IEJZIEhBU0ggKGkpOworQ1JFQVRFIFRBQkxFIGJhc2UzIChpIGludCwgaiBpbnQsIGsgdGV4dCk7 CitDUkVBVEUgVEFCTEUgYmFzZTQgKGkgaW50LCBqIGludCwgayB0ZXh0KTsKK0NSRUFURSBGT1JF SUdOIFRBQkxFIGRpc3RyMl9wMSBQQVJUSVRJT04gT0YgZGlzdHIyIEZPUiBWQUxVRVMgV0lUSCAo TU9EVUxVUyAyLCBSRU1BSU5ERVIgMCkKK1NFUlZFUiBsb29wYmFjayBPUFRJT05TICh0YWJsZV9u YW1lICdiYXNlMycpOworQ1JFQVRFIEZPUkVJR04gVEFCTEUgZGlzdHIyX3AyIFBBUlRJVElPTiBP RiBkaXN0cjIgRk9SIFZBTFVFUyBXSVRIIChNT0RVTFVTIDIsIFJFTUFJTkRFUiAxKQorU0VSVkVS IGxvb3BiYWNrIE9QVElPTlMgKHRhYmxlX25hbWUgJ2Jhc2U0Jyk7CisKK0lOU0VSVCBJTlRPIGRp c3RyMQorU0VMRUNUIGksIGkqMTAsICdkYXRhXycgfHwgaSBGUk9NIGdlbmVyYXRlX3Nlcmllcygx LCAxMDAwKSBpOworCitJTlNFUlQgSU5UTyBkaXN0cjIKK1NFTEVDVCBpLCBpKjEwLCAnZGF0YV8n IHx8IGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwKSBpOworCitBTkFMWVpFIGRpc3RyMV9w MTsKK0FOQUxZWkUgZGlzdHIxX3AyOworQU5BTFlaRSBkaXN0cjJfcDE7CitBTkFMWVpFIGRpc3Ry Ml9wMjsKKworU0VUIGVuYWJsZV9wYXJ0aXRpb253aXNlX2pvaW4gVE8gT047CisKKy0tIFRlc3Qg am9pbnMgd2l0aCBhc3luYyBNZXJnZSBBcHBlbmQKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9G RikKK1NFTEVDVCAqIEZST00gZGlzdHIxLCBkaXN0cjIgV0hFUkUgZGlzdHIxLmk9ZGlzdHIyLmkg QU5EIGRpc3RyMi5qID4gOTAgYW5kIGRpc3RyMi5rIGxpa2UgJ2RhdGElJworT1JERVIgQlkgZGlz dHIyLmkgTElNSVQgMTA7CitTRUxFQ1QgKiBGUk9NIGRpc3RyMSwgZGlzdHIyIFdIRVJFIGRpc3Ry MS5pPWRpc3RyMi5pIEFORCBkaXN0cjIuaiA+IDkwIGFuZCBkaXN0cjIuayBsaWtlICdkYXRhJScK K09SREVSIEJZIGRpc3RyMi5pIExJTUlUIDEwOworCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBP RkYpCitTRUxFQ1QgKiBGUk9NIGRpc3RyMSBMRUZUIEpPSU4gZGlzdHIyIE9OIGRpc3RyMS5pPWRp c3RyMi5pIEFORCBkaXN0cjIuayBsaWtlICdkYXRhJScgV0hFUkUgIGRpc3RyMS5pID4gOTAKK09S REVSIEJZIGRpc3RyMS5pIExJTUlUIDIwOworU0VMRUNUICogRlJPTSBkaXN0cjEgTEVGVCBKT0lO IGRpc3RyMiBPTiAgZGlzdHIxLmk9ZGlzdHIyLmkgQU5EIGRpc3RyMi5rIGxpa2UgJ2RhdGElJyBX SEVSRSBkaXN0cjEuaSA+IDkwCitPUkRFUiBCWSBkaXN0cjEuaSBMSU1JVCAyMDsKKworLS0gVGVz dCBwcnVuaW5nIHdpdGggYXN5bmMgTWVyZ2UgQXBwZW5kCitERUxFVEUgRlJPTSBkaXN0cjI7CitJ TlNFUlQgSU5UTyBkaXN0cjIKK1NFTEVDVCBpJTEwLCBpKjEwLCAnZGF0YV8nIHx8IGkgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMCkgaTsKKworREVBTExPQ0FURSBBTEw7CitTRVQgcGxhbl9j YWNoZV9tb2RlIFRPIGZvcmNlX2dlbmVyaWNfcGxhbjsKK1BSRVBBUkUgYXN5bmNfcHRfcXVlcnkg KGludCwgaW50KSBBUworICBTRUxFQ1QgKiBGUk9NIGRpc3RyMiBXSEVSRSBpID0gQU5ZKEFSUkFZ WyQxLCAkMl0pCisgIE9SREVSIEJZIGksagorICBMSU1JVCAxMDsKK0VYUExBSU4gKFZFUkJPU0Us IENPU1RTIE9GRikKKwlFWEVDVVRFIGFzeW5jX3B0X3F1ZXJ5KDEsIDEpOworRVhFQ1VURSBhc3lu Y19wdF9xdWVyeSgxLCAxKTsKK1JFU0VUIHBsYW5fY2FjaGVfbW9kZTsKKworUkVTRVQgZW5hYmxl X3BhcnRpdGlvbndpc2Vfam9pbjsKKworRFJPUCBUQUJMRSBkaXN0cjEsIGRpc3RyMiwgYmFzZTEs IGJhc2UyLCBiYXNlMywgYmFzZTQ7CisKIEFMVEVSIFNFUlZFUiBsb29wYmFjayBPUFRJT05TIChE Uk9QIGFzeW5jX2NhcGFibGUpOwogQUxURVIgU0VSVkVSIGxvb3BiYWNrMiBPUFRJT05TIChEUk9Q IGFzeW5jX2NhcGFibGUpOwogCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwg Yi9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKaW5kZXggNDA1Yzk2ODliZDAuLjE2NWE1YTU5NjJl IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21s L2NvbmZpZy5zZ21sCkBAIC01NDYxLDYgKzU0NjEsMjAgQEAgQU5ZIDxyZXBsYWNlYWJsZSBjbGFz cz0icGFyYW1ldGVyIj5udW1fc3luYzwvcmVwbGFjZWFibGU+ICggPHJlcGxhY2VhYmxlIGNsYXNz PSIKICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAgIDx2YXJs aXN0ZW50cnkgaWQ9Imd1Yy1lbmFibGUtYXN5bmMtbWVyZ2UtYXBwZW5kIiB4cmVmbGFiZWw9ImVu YWJsZV9hc3luY19tZXJnZV9hcHBlbmQiPgorICAgICAgPHRlcm0+PHZhcm5hbWU+ZW5hYmxlX2Fz eW5jX21lcmdlX2FwcGVuZDwvdmFybmFtZT4gKDx0eXBlPmJvb2xlYW48L3R5cGU+KQorICAgICAg PGluZGV4dGVybT4KKyAgICAgICA8cHJpbWFyeT48dmFybmFtZT5lbmFibGVfYXN5bmNfbWVyZ2Vf YXBwZW5kPC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAg IDwvaW5kZXh0ZXJtPgorICAgICAgPC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxw YXJhPgorICAgICAgICBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBxdWVyeSBwbGFubmVyJ3MgdXNl IG9mIGFzeW5jLWF3YXJlCisgICAgICAgIG1lcmdlIGFwcGVuZCBwbGFuIHR5cGVzLiBUaGUgZGVm YXVsdCBpcyA8bGl0ZXJhbD5vbjwvbGl0ZXJhbD4uCisgICAgICAgPC9wYXJhPgorICAgICAgPC9s aXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKICAgICAgPHZhcmxpc3RlbnRyeSBpZD0i Z3VjLWVuYWJsZS1iaXRtYXBzY2FuIiB4cmVmbGFiZWw9ImVuYWJsZV9iaXRtYXBzY2FuIj4KICAg ICAgIDx0ZXJtPjx2YXJuYW1lPmVuYWJsZV9iaXRtYXBzY2FuPC92YXJuYW1lPiAoPHR5cGU+Ym9v bGVhbjwvdHlwZT4pCiAgICAgICA8aW5kZXh0ZXJtPgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv ZXhlY3V0b3IvZXhlY0FzeW5jLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjQXN5bmMuYwpp bmRleCA1ZDNjYWJlNzNlMy4uNmRjMTllYmMzNzQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNBc3luYy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNBc3luYy5j CkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY0FzeW5jLmgiCiAjaW5j bHVkZSAiZXhlY3V0b3IvZXhlY3V0b3IuaCIKICNpbmNsdWRlICJleGVjdXRvci9ub2RlQXBwZW5k LmgiCisjaW5jbHVkZSAiZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmgiCiAjaW5jbHVkZSAiZXhl Y3V0b3Ivbm9kZUZvcmVpZ25zY2FuLmgiCiAKIC8qCkBAIC0xMjEsNiArMTIyLDkgQEAgRXhlY0Fz eW5jUmVzcG9uc2UoQXN5bmNSZXF1ZXN0ICphcmVxKQogCQljYXNlIFRfQXBwZW5kU3RhdGU6CiAJ CQlFeGVjQXN5bmNBcHBlbmRSZXNwb25zZShhcmVxKTsKIAkJCWJyZWFrOworCQljYXNlIFRfTWVy Z2VBcHBlbmRTdGF0ZToKKwkJCUV4ZWNBc3luY01lcmdlQXBwZW5kUmVzcG9uc2UoYXJlcSk7CisJ CQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCS8qIElmIHRoZSBub2RlIGRvZXNuJ3Qgc3VwcG9ydCBh c3luYywgY2FsbGVyIG1lc3NlZCB1cC4gKi8KIAkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQg bm9kZSB0eXBlOiAlZCIsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQXBw ZW5kLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQXBwZW5kLmMKaW5kZXggNzdjNGRkOWU0 YjEuLmRmYmM3YjUxMGM0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQXBw ZW5kLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVuZC5jCkBAIC0xMTg3LDEw ICsxMTg3LDcgQEAgRXhlY0FzeW5jQXBwZW5kUmVzcG9uc2UoQXN5bmNSZXF1ZXN0ICphcmVxKQog c3RhdGljIHZvaWQKIGNsYXNzaWZ5X21hdGNoaW5nX3N1YnBsYW5zKEFwcGVuZFN0YXRlICpub2Rl KQogewotCUJpdG1hcHNldCAgKnZhbGlkX2FzeW5jcGxhbnM7Ci0KIAlBc3NlcnQobm9kZS0+YXNf dmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCk7Ci0JQXNzZXJ0KG5vZGUtPmFzX3ZhbGlkX2FzeW5j cGxhbnMgPT0gTlVMTCk7CiAKIAkvKiBOb3RoaW5nIHRvIGRvIGlmIHRoZXJlIGFyZSBubyB2YWxp ZCBzdWJwbGFucy4gKi8KIAlpZiAoYm1zX2lzX2VtcHR5KG5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5z KSkKQEAgLTEyMDAsMjEgKzExOTcsMTAgQEAgY2xhc3NpZnlfbWF0Y2hpbmdfc3VicGxhbnMoQXBw ZW5kU3RhdGUgKm5vZGUpCiAJCXJldHVybjsKIAl9CiAKLQkvKiBOb3RoaW5nIHRvIGRvIGlmIHRo ZXJlIGFyZSBubyB2YWxpZCBhc3luYyBzdWJwbGFucy4gKi8KLQlpZiAoIWJtc19vdmVybGFwKG5v ZGUtPmFzX3ZhbGlkX3N1YnBsYW5zLCBub2RlLT5hc19hc3luY3BsYW5zKSkKLQl7CisJLyogTm8g dmFsaWQgYXN5bmMgc3VicGxhbnMgaWRlbnRpZmllZC4gKi8KKwlpZiAoIWNsYXNzaWZ5X21hdGNo aW5nX3N1YnBsYW5zX2NvbW1vbigKKwkJCQkJCQkJCQkgICAmbm9kZS0+YXNfdmFsaWRfc3VicGxh bnMsCisJCQkJCQkJCQkJICAgbm9kZS0+YXNfYXN5bmNwbGFucywKKwkJCQkJCQkJCQkgICAmbm9k ZS0+YXNfdmFsaWRfYXN5bmNwbGFucykpCiAJCW5vZGUtPmFzX25hc3luY3JlbWFpbiA9IDA7Ci0J CXJldHVybjsKLQl9Ci0KLQkvKiBHZXQgdmFsaWQgYXN5bmMgc3VicGxhbnMuICovCi0JdmFsaWRf YXN5bmNwbGFucyA9IGJtc19pbnRlcnNlY3Qobm9kZS0+YXNfYXN5bmNwbGFucywKLQkJCQkJCQkJ CSBub2RlLT5hc192YWxpZF9zdWJwbGFucyk7Ci0KLQkvKiBBZGp1c3QgdGhlIHZhbGlkIHN1YnBs YW5zIHRvIGNvbnRhaW4gc3luYyBzdWJwbGFucyBvbmx5LiAqLwotCW5vZGUtPmFzX3ZhbGlkX3N1 YnBsYW5zID0gYm1zX2RlbF9tZW1iZXJzKG5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zLAotCQkJCQkJ CQkJCQkgIHZhbGlkX2FzeW5jcGxhbnMpOwotCi0JLyogU2F2ZSB2YWxpZCBhc3luYyBzdWJwbGFu cy4gKi8KLQlub2RlLT5hc192YWxpZF9hc3luY3BsYW5zID0gdmFsaWRfYXN5bmNwbGFuczsKIH0K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5jIGIvc3Jj L2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMKaW5kZXggMzAwYmNkNWNmMzMuLmYx YzI2N2ViOWViIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2VBcHBl bmQuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYwpAQCAtMzks MTAgKzM5LDE1IEBACiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKIAogI2luY2x1ZGUgImV4ZWN1dG9y L2V4ZWN1dG9yLmgiCisjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY0FzeW5jLmgiCiAjaW5jbHVkZSAi ZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL25vZGVNZXJnZUFw cGVuZC5oIgogI2luY2x1ZGUgImxpYi9iaW5hcnloZWFwLmgiCiAjaW5jbHVkZSAibWlzY2FkbWlu LmgiCisjaW5jbHVkZSAic3RvcmFnZS9sYXRjaC5oIgorI2luY2x1ZGUgInV0aWxzL3dhaXRfZXZl bnQuaCIKKworI2RlZmluZSBFVkVOVF9CVUZGRVJfU0laRSAgICAgICAgICAgICAgICAgICAgIDE2 CiAKIC8qCiAgKiBXZSBoYXZlIG9uZSBzbG90IGZvciBlYWNoIGl0ZW0gaW4gdGhlIGhlYXAgYXJy YXkuICBXZSB1c2UgU2xvdE51bWJlcgpAQCAtNTQsNiArNTksMTIgQEAgdHlwZWRlZiBpbnQzMiBT bG90TnVtYmVyOwogc3RhdGljIFR1cGxlVGFibGVTbG90ICpFeGVjTWVyZ2VBcHBlbmQoUGxhblN0 YXRlICpwc3RhdGUpOwogc3RhdGljIGludAloZWFwX2NvbXBhcmVfc2xvdHMoRGF0dW0gYSwgRGF0 dW0gYiwgdm9pZCAqYXJnKTsKIAorc3RhdGljIHZvaWQgY2xhc3NpZnlfbWF0Y2hpbmdfc3VicGxh bnMoTWVyZ2VBcHBlbmRTdGF0ZSAqbm9kZSk7CitzdGF0aWMgdm9pZCBFeGVjTWVyZ2VBcHBlbmRB c3luY0JlZ2luKE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUpOworc3RhdGljIHZvaWQgRXhlY01lcmdl QXBwZW5kQXN5bmNHZXROZXh0KE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUsIGludCBtcGxhbik7Citz dGF0aWMgYm9vbCBFeGVjTWVyZ2VBcHBlbmRBc3luY1JlcXVlc3QoTWVyZ2VBcHBlbmRTdGF0ZSAq bm9kZSwgaW50IG1wbGFuKTsKK3N0YXRpYyB2b2lkIEV4ZWNNZXJnZUFwcGVuZEFzeW5jRXZlbnRX YWl0KE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUpOworCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCQlFeGVjSW5p dE1lcmdlQXBwZW5kCkBAIC03MSw2ICs4Miw4IEBAIEV4ZWNJbml0TWVyZ2VBcHBlbmQoTWVyZ2VB cHBlbmQgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCWludAkJCW5wbGFuczsK IAlpbnQJCQlpLAogCQkJCWo7CisJQml0bWFwc2V0ICAqYXN5bmNwbGFuczsKKwlpbnQJCQluYXN5 bmNwbGFuczsKIAogCS8qIGNoZWNrIGZvciB1bnN1cHBvcnRlZCBmbGFncyAqLwogCUFzc2VydCgh KGVmbGFncyAmIChFWEVDX0ZMQUdfQkFDS1dBUkQgfCBFWEVDX0ZMQUdfTUFSSykpKTsKQEAgLTEw Niw3ICsxMTksMTAgQEAgRXhlY0luaXRNZXJnZUFwcGVuZChNZXJnZUFwcGVuZCAqbm9kZSwgRVN0 YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJCSAqIGxhdGVyIGNhbGxzIHRvIEV4ZWNGaW5kTWF0 Y2hpbmdTdWJQbGFucy4KIAkJICovCiAJCWlmICghcHJ1bmVzdGF0ZS0+ZG9fZXhlY19wcnVuZSAm JiBucGxhbnMgPiAwKQorCQl7CiAJCQltZXJnZXN0YXRlLT5tc192YWxpZF9zdWJwbGFucyA9IGJt c19hZGRfcmFuZ2UoTlVMTCwgMCwgbnBsYW5zIC0gMSk7CisJCQltZXJnZXN0YXRlLT5tc192YWxp ZF9zdWJwbGFuc19pZGVudGlmaWVkID0gdHJ1ZTsKKwkJfQogCX0KIAllbHNlCiAJewpAQCAtMTE5 LDYgKzEzNSw3IEBAIEV4ZWNJbml0TWVyZ2VBcHBlbmQoTWVyZ2VBcHBlbmQgKm5vZGUsIEVTdGF0 ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCQlBc3NlcnQobnBsYW5zID4gMCk7CiAJCW1lcmdlc3Rh dGUtPm1zX3ZhbGlkX3N1YnBsYW5zID0gdmFsaWRzdWJwbGFucyA9CiAJCQlibXNfYWRkX3Jhbmdl KE5VTEwsIDAsIG5wbGFucyAtIDEpOworCQltZXJnZXN0YXRlLT5tc192YWxpZF9zdWJwbGFuc19p ZGVudGlmaWVkID0gdHJ1ZTsKIAkJbWVyZ2VzdGF0ZS0+bXNfcHJ1bmVfc3RhdGUgPSBOVUxMOwog CX0KIApAQCAtMTM1LDExICsxNTIsMjUgQEAgRXhlY0luaXRNZXJnZUFwcGVuZChNZXJnZUFwcGVu ZCAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJICogdGhlIHJlc3VsdHMgaW50 byB0aGUgbWVyZ2VwbGFuc3RhdGVzIGFycmF5LgogCSAqLwogCWogPSAwOworCWFzeW5jcGxhbnMg PSBOVUxMOworCW5hc3luY3BsYW5zID0gMDsKKwogCWkgPSAtMTsKIAl3aGlsZSAoKGkgPSBibXNf bmV4dF9tZW1iZXIodmFsaWRzdWJwbGFucywgaSkpID49IDApCiAJewogCQlQbGFuCSAgICppbml0 Tm9kZSA9IChQbGFuICopIGxpc3RfbnRoKG5vZGUtPm1lcmdlcGxhbnMsIGkpOwogCisJCS8qCisJ CSAqIFJlY29yZCBhc3luYyBzdWJwbGFucy4gIFdoZW4gZXhlY3V0aW5nIEV2YWxQbGFuUXVhbCwg d2UgdHJlYXQgdGhlbQorCQkgKiBhcyBzeW5jIG9uZXM7IGRvbid0IGRvIHRoaXMgd2hlbiBpbml0 aWFsaXppbmcgYW4gRXZhbFBsYW5RdWFsIHBsYW4KKwkJICogdHJlZS4KKwkJICovCisJCWlmIChp bml0Tm9kZS0+YXN5bmNfY2FwYWJsZSAmJiBlc3RhdGUtPmVzX2VwcV9hY3RpdmUgPT0gTlVMTCkK KwkJeworCQkJYXN5bmNwbGFucyA9IGJtc19hZGRfbWVtYmVyKGFzeW5jcGxhbnMsIGopOworCQkJ bmFzeW5jcGxhbnMrKzsKKwkJfQorCiAJCW1lcmdlcGxhbnN0YXRlc1tqKytdID0gRXhlY0luaXRO b2RlKGluaXROb2RlLCBlc3RhdGUsIGVmbGFncyk7CiAJfQogCkBAIC0xNzAsNiArMjAxLDQ1IEBA IEV4ZWNJbml0TWVyZ2VBcHBlbmQoTWVyZ2VBcHBlbmQgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBp bnQgZWZsYWdzKQogCSAqLwogCW1lcmdlc3RhdGUtPnBzLnBzX1Byb2pJbmZvID0gTlVMTDsKIAor CS8qIEluaXRpYWxpemUgYXN5bmMgc3RhdGUgKi8KKwltZXJnZXN0YXRlLT5tc19hc3luY3BsYW5z ID0gYXN5bmNwbGFuczsKKwltZXJnZXN0YXRlLT5tc19uYXN5bmNwbGFucyA9IG5hc3luY3BsYW5z OworCW1lcmdlc3RhdGUtPm1zX2FzeW5jcmVxdWVzdHMgPSBOVUxMOworCW1lcmdlc3RhdGUtPm1z X2FzeW5jcmVzdWx0cyA9IE5VTEw7CisJbWVyZ2VzdGF0ZS0+bXNfaGFzX2FzeW5jcmVzdWx0cyA9 IE5VTEw7CisJbWVyZ2VzdGF0ZS0+bXNfYXN5bmNyZW1haW4gPSBOVUxMOworCW1lcmdlc3RhdGUt Pm1zX25lZWRyZXF1ZXN0ID0gTlVMTDsKKwltZXJnZXN0YXRlLT5tc19ldmVudHNldCA9IE5VTEw7 CisJbWVyZ2VzdGF0ZS0+bXNfdmFsaWRfYXN5bmNwbGFucyA9IE5VTEw7CisKKwlpZiAobmFzeW5j cGxhbnMgPiAwKQorCXsKKwkJbWVyZ2VzdGF0ZS0+bXNfYXN5bmNyZXF1ZXN0cyA9IChBc3luY1Jl cXVlc3QgKiopCisJCQlwYWxsb2MwKG5wbGFucyAqIHNpemVvZihBc3luY1JlcXVlc3QgKikpOwor CisJCWkgPSAtMTsKKwkJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKGFzeW5jcGxhbnMsIGkp KSA+PSAwKQorCQl7CisJCQlBc3luY1JlcXVlc3QgKmFyZXE7CisKKwkJCWFyZXEgPSBwYWxsb2Mo c2l6ZW9mKEFzeW5jUmVxdWVzdCkpOworCQkJYXJlcS0+cmVxdWVzdG9yID0gKFBsYW5TdGF0ZSAq KSBtZXJnZXN0YXRlOworCQkJYXJlcS0+cmVxdWVzdGVlID0gbWVyZ2VwbGFuc3RhdGVzW2ldOwor CQkJYXJlcS0+cmVxdWVzdF9pbmRleCA9IGk7CisJCQlhcmVxLT5jYWxsYmFja19wZW5kaW5nID0g ZmFsc2U7CisJCQlhcmVxLT5yZXF1ZXN0X2NvbXBsZXRlID0gZmFsc2U7CisJCQlhcmVxLT5yZXN1 bHQgPSBOVUxMOworCisJCQltZXJnZXN0YXRlLT5tc19hc3luY3JlcXVlc3RzW2ldID0gYXJlcTsK KwkJfQorCisJCW1lcmdlc3RhdGUtPm1zX2FzeW5jcmVzdWx0cyA9IChUdXBsZVRhYmxlU2xvdCAq KikKKwkJCXBhbGxvYzAobnBsYW5zICogc2l6ZW9mKFR1cGxlVGFibGVTbG90ICopKTsKKworCQlp ZiAobWVyZ2VzdGF0ZS0+bXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCkKKwkJCWNsYXNzaWZ5 X21hdGNoaW5nX3N1YnBsYW5zKG1lcmdlc3RhdGUpOworCX0KKwogCS8qCiAJICogaW5pdGlhbGl6 ZSBzb3J0LWtleSBpbmZvcm1hdGlvbgogCSAqLwpAQCAtMjI2LDE0ICsyOTYsMTggQEAgRXhlY01l cmdlQXBwZW5kKFBsYW5TdGF0ZSAqcHN0YXRlKQogCQlpZiAobm9kZS0+bXNfbnBsYW5zID09IDAp CiAJCQlyZXR1cm4gRXhlY0NsZWFyVHVwbGUobm9kZS0+cHMucHNfUmVzdWx0VHVwbGVTbG90KTsK IAotCQkvKgotCQkgKiBJZiB3ZSd2ZSB5ZXQgdG8gZGV0ZXJtaW5lIHRoZSB2YWxpZCBzdWJwbGFu cyB0aGVuIGRvIHNvIG5vdy4gIElmCi0JCSAqIHJ1bi10aW1lIHBydW5pbmcgaXMgZGlzYWJsZWQg dGhlbiB0aGUgdmFsaWQgc3VicGxhbnMgd2lsbCBhbHdheXMgYmUKLQkJICogc2V0IHRvIGFsbCBz dWJwbGFucy4KLQkJICovCi0JCWlmIChub2RlLT5tc192YWxpZF9zdWJwbGFucyA9PSBOVUxMKQor CQkvKiBJZiB3ZSd2ZSB5ZXQgdG8gZGV0ZXJtaW5lIHRoZSB2YWxpZCBzdWJwbGFucyB0aGVuIGRv IHNvIG5vdy4gKi8KKwkJaWYgKCFub2RlLT5tc192YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkKQor CQl7CiAJCQlub2RlLT5tc192YWxpZF9zdWJwbGFucyA9CiAJCQkJRXhlY0ZpbmRNYXRjaGluZ1N1 YlBsYW5zKG5vZGUtPm1zX3BydW5lX3N0YXRlLCBmYWxzZSwgTlVMTCk7CisJCQlub2RlLT5tc192 YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkID0gdHJ1ZTsKKwkJCWNsYXNzaWZ5X21hdGNoaW5nX3N1 YnBsYW5zKG5vZGUpOworCQl9CisKKwkJLyogSWYgdGhlcmUgYXJlIGFueSBhc3luYyBzdWJwbGFu cywgYmVnaW4gZXhlY3V0aW5nIHRoZW0uICovCisJCWlmIChub2RlLT5tc19uYXN5bmNwbGFucyA+ IDApCisJCQlFeGVjTWVyZ2VBcHBlbmRBc3luY0JlZ2luKG5vZGUpOwogCiAJCS8qCiAJCSAqIEZp cnN0IHRpbWUgdGhyb3VnaDogcHVsbCB0aGUgZmlyc3QgdHVwbGUgZnJvbSBlYWNoIHZhbGlkIHN1 YnBsYW4sCkBAIC0yNDYsNiArMzIwLDE2IEBAIEV4ZWNNZXJnZUFwcGVuZChQbGFuU3RhdGUgKnBz dGF0ZSkKIAkJCWlmICghVHVwSXNOdWxsKG5vZGUtPm1zX3Nsb3RzW2ldKSkKIAkJCQliaW5hcnlo ZWFwX2FkZF91bm9yZGVyZWQobm9kZS0+bXNfaGVhcCwgSW50MzJHZXREYXR1bShpKSk7CiAJCX0K KworCQkvKiBMb29rIGF0IHZhbGlkIGFzeW5jIHN1YnBsYW5zICovCisJCWkgPSAtMTsKKwkJd2hp bGUgKChpID0gYm1zX25leHRfbWVtYmVyKG5vZGUtPm1zX3ZhbGlkX2FzeW5jcGxhbnMsIGkpKSA+ PSAwKQorCQl7CisJCQlFeGVjTWVyZ2VBcHBlbmRBc3luY0dldE5leHQobm9kZSwgaSk7CisJCQlp ZiAoIVR1cElzTnVsbChub2RlLT5tc19zbG90c1tpXSkpCisJCQkJYmluYXJ5aGVhcF9hZGRfdW5v cmRlcmVkKG5vZGUtPm1zX2hlYXAsIEludDMyR2V0RGF0dW0oaSkpOworCQl9CisKIAkJYmluYXJ5 aGVhcF9idWlsZChub2RlLT5tc19oZWFwKTsKIAkJbm9kZS0+bXNfaW5pdGlhbGl6ZWQgPSB0cnVl OwogCX0KQEAgLTI2MCw3ICszNDQsMTMgQEAgRXhlY01lcmdlQXBwZW5kKFBsYW5TdGF0ZSAqcHN0 YXRlKQogCQkgKiB0byBub3QgcHVsbCB0dXBsZXMgdW50aWwgbmVjZXNzYXJ5LikKIAkJICovCiAJ CWkgPSBEYXR1bUdldEludDMyKGJpbmFyeWhlYXBfZmlyc3Qobm9kZS0+bXNfaGVhcCkpOwotCQlu b2RlLT5tc19zbG90c1tpXSA9IEV4ZWNQcm9jTm9kZShub2RlLT5tZXJnZXBsYW5zW2ldKTsKKwkJ aWYgKGJtc19pc19tZW1iZXIoaSwgbm9kZS0+bXNfYXN5bmNwbGFucykpCisJCQlFeGVjTWVyZ2VB cHBlbmRBc3luY0dldE5leHQobm9kZSwgaSk7CisJCWVsc2UKKwkJeworCQkJQXNzZXJ0KGJtc19p c19tZW1iZXIoaSwgbm9kZS0+bXNfdmFsaWRfc3VicGxhbnMpKTsKKwkJCW5vZGUtPm1zX3Nsb3Rz W2ldID0gRXhlY1Byb2NOb2RlKG5vZGUtPm1lcmdlcGxhbnNbaV0pOworCQl9CiAJCWlmICghVHVw SXNOdWxsKG5vZGUtPm1zX3Nsb3RzW2ldKSkKIAkJCWJpbmFyeWhlYXBfcmVwbGFjZV9maXJzdChu b2RlLT5tc19oZWFwLCBJbnQzMkdldERhdHVtKGkpKTsKIAkJZWxzZQpAQCAtMjc2LDYgKzM2Niw4 IEBAIEV4ZWNNZXJnZUFwcGVuZChQbGFuU3RhdGUgKnBzdGF0ZSkKIAl7CiAJCWkgPSBEYXR1bUdl dEludDMyKGJpbmFyeWhlYXBfZmlyc3Qobm9kZS0+bXNfaGVhcCkpOwogCQlyZXN1bHQgPSBub2Rl LT5tc19zbG90c1tpXTsKKwkJLyogRm9yIGFzeW5jIHBsYW4gcmVjb3JkIHRoYXQgd2UgY2FuIGdl dCB0aGUgbmV4dCB0dXBsZSAqLworCQlub2RlLT5tc19oYXNfYXN5bmNyZXN1bHRzID0gYm1zX2Rl bF9tZW1iZXIobm9kZS0+bXNfaGFzX2FzeW5jcmVzdWx0cywgaSk7CiAJfQogCiAJcmV0dXJuIHJl c3VsdDsKQEAgLTM1NSw2ICs0NDcsNyBAQCB2b2lkCiBFeGVjUmVTY2FuTWVyZ2VBcHBlbmQoTWVy Z2VBcHBlbmRTdGF0ZSAqbm9kZSkKIHsKIAlpbnQJCQlpOworCWludAkJCW5hc3luY3BsYW5zID0g bm9kZS0+bXNfbmFzeW5jcGxhbnM7CiAKIAkvKgogCSAqIElmIGFueSBQQVJBTV9FWEVDIFBhcmFt cyB1c2VkIGluIHBydW5pbmcgZXhwcmVzc2lvbnMgaGF2ZSBjaGFuZ2VkLCB0aGVuCkBAIC0zNjUs OCArNDU4LDExIEBAIEV4ZWNSZVNjYW5NZXJnZUFwcGVuZChNZXJnZUFwcGVuZFN0YXRlICpub2Rl KQogCQlibXNfb3ZlcmxhcChub2RlLT5wcy5jaGdQYXJhbSwKIAkJCQkJbm9kZS0+bXNfcHJ1bmVf c3RhdGUtPmV4ZWNwYXJhbWlkcykpCiAJeworCQlub2RlLT5tc192YWxpZF9zdWJwbGFuc19pZGVu dGlmaWVkID0gZmFsc2U7CiAJCWJtc19mcmVlKG5vZGUtPm1zX3ZhbGlkX3N1YnBsYW5zKTsKIAkJ bm9kZS0+bXNfdmFsaWRfc3VicGxhbnMgPSBOVUxMOworCQlibXNfZnJlZShub2RlLT5tc192YWxp ZF9hc3luY3BsYW5zKTsKKwkJbm9kZS0+bXNfdmFsaWRfYXN5bmNwbGFucyA9IE5VTEw7CiAJfQog CiAJZm9yIChpID0gMDsgaSA8IG5vZGUtPm1zX25wbGFuczsgaSsrKQpAQCAtMzg3LDYgKzQ4Mywz NjcgQEAgRXhlY1JlU2Nhbk1lcmdlQXBwZW5kKE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUpCiAJCWlm IChzdWJub2RlLT5jaGdQYXJhbSA9PSBOVUxMKQogCQkJRXhlY1JlU2NhbihzdWJub2RlKTsKIAl9 CisKKwkvKiBSZXNldCBhc3luYyBzdGF0ZSAqLworCWlmIChuYXN5bmNwbGFucyA+IDApCisJewor CQlpID0gLTE7CisJCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihub2RlLT5tc19hc3luY3Bs YW5zLCBpKSkgPj0gMCkKKwkJeworCQkJQXN5bmNSZXF1ZXN0ICphcmVxID0gbm9kZS0+bXNfYXN5 bmNyZXF1ZXN0c1tpXTsKKworCQkJYXJlcS0+Y2FsbGJhY2tfcGVuZGluZyA9IGZhbHNlOworCQkJ YXJlcS0+cmVxdWVzdF9jb21wbGV0ZSA9IGZhbHNlOworCQkJYXJlcS0+cmVzdWx0ID0gTlVMTDsK KwkJfQorCisJCWJtc19mcmVlKG5vZGUtPm1zX2FzeW5jcmVtYWluKTsKKwkJbm9kZS0+bXNfYXN5 bmNyZW1haW4gPSBOVUxMOworCQlibXNfZnJlZShub2RlLT5tc19uZWVkcmVxdWVzdCk7CisJCW5v ZGUtPm1zX25lZWRyZXF1ZXN0ID0gTlVMTDsKKwkJYm1zX2ZyZWUobm9kZS0+bXNfaGFzX2FzeW5j cmVzdWx0cyk7CisJCW5vZGUtPm1zX2hhc19hc3luY3Jlc3VsdHMgPSBOVUxMOworCX0KIAliaW5h cnloZWFwX3Jlc2V0KG5vZGUtPm1zX2hlYXApOwogCW5vZGUtPm1zX2luaXRpYWxpemVkID0gZmFs c2U7CiB9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgICAgICAgICAgICBjbGFzc2lmeV9tYXRjaGluZ19z dWJwbGFucworICoKKyAqICAgICAgICAgICAgICBDbGFzc2lmeSB0aGUgbm9kZSdzIG1zX3ZhbGlk X3N1YnBsYW5zIGludG8gc3luYyBvbmVzIGFuZAorICogICAgICAgICAgICAgIGFzeW5jIG9uZXMs IGFkanVzdCBpdCB0byBjb250YWluIHN5bmMgb25lcyBvbmx5LCBhbmQgc2F2ZQorICogICAgICAg ICAgICAgIGFzeW5jIG9uZXMgaW4gdGhlIG5vZGUncyBtc192YWxpZF9hc3luY3BsYW5zLgorICog LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICovCitzdGF0aWMgdm9pZAorY2xhc3NpZnlfbWF0Y2hpbmdfc3VicGxhbnMoTWVy Z2VBcHBlbmRTdGF0ZSAqbm9kZSkKK3sKKwlBc3NlcnQobm9kZS0+bXNfdmFsaWRfc3VicGxhbnNf aWRlbnRpZmllZCk7CisKKwkvKiBOb3RoaW5nIHRvIGRvIGlmIHRoZXJlIGFyZSBubyB2YWxpZCBz dWJwbGFucy4gKi8KKwlpZiAoYm1zX2lzX2VtcHR5KG5vZGUtPm1zX3ZhbGlkX3N1YnBsYW5zKSkK Kwl7CisJCW5vZGUtPm1zX2FzeW5jcmVtYWluID0gTlVMTDsKKwkJcmV0dXJuOworCX0KKworCS8q IE5vIHZhbGlkIGFzeW5jIHN1YnBsYW5zIGlkZW50aWZpZWQuICovCisJaWYgKCFjbGFzc2lmeV9t YXRjaGluZ19zdWJwbGFuc19jb21tb24oCisJCQkJCQkJCQkJICAgJm5vZGUtPm1zX3ZhbGlkX3N1 YnBsYW5zLAorCQkJCQkJCQkJCSAgIG5vZGUtPm1zX2FzeW5jcGxhbnMsCisJCQkJCQkJCQkJICAg Jm5vZGUtPm1zX3ZhbGlkX2FzeW5jcGxhbnMpKQorCQlub2RlLT5tc19hc3luY3JlbWFpbiA9IE5V TEw7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgICAgICAgICAgICBFeGVjTWVyZ2VBcHBlbmRBc3lu Y0JlZ2luCisgKgorICogICAgICAgICAgICAgIEJlZ2luIGV4ZWN1dGluZyBkZXNpZ25lZCBhc3lu Yy1jYXBhYmxlIHN1YnBsYW5zLgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCitzdGF0aWMgdm9pZAorRXhlY01l cmdlQXBwZW5kQXN5bmNCZWdpbihNZXJnZUFwcGVuZFN0YXRlICpub2RlKQoreworCWludAkJCWk7 CisKKwkvKiBCYWNrd2FyZCBzY2FuIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYXN5bmMtYXdhcmUgTWVy Z2VBcHBlbmRzLiAqLworCUFzc2VydChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKG5vZGUtPnBzLnN0 YXRlLT5lc19kaXJlY3Rpb24pKTsKKworCS8qIFdlIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgd2hl biB0aGVyZSBhcmUgbm8gc3VicGxhbnMgKi8KKwlBc3NlcnQobm9kZS0+bXNfbnBsYW5zID4gMCk7 CisKKwkvKiBXZSBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIHdoZW4gdGhlcmUgYXJlIG5vIGFzeW5j IHN1YnBsYW5zLiAqLworCUFzc2VydChub2RlLT5tc19uYXN5bmNwbGFucyA+IDApOworCisJLyog RXhlY01lcmdlQXBwZW5kKCkgaWRlbnRpZmllcyB2YWxpZCBzdWJwbGFucyAqLworCUFzc2VydChu b2RlLT5tc192YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkKTsKKworCS8qIEluaXRpYWxpemUgc3Rh dGUgdmFyaWFibGVzLiAqLworCW5vZGUtPm1zX2FzeW5jcmVtYWluID0gYm1zX2NvcHkobm9kZS0+ bXNfdmFsaWRfYXN5bmNwbGFucyk7CisKKwkvKiBOb3RoaW5nIHRvIGRvIGlmIHRoZXJlIGFyZSBu byB2YWxpZCBhc3luYyBzdWJwbGFucy4gKi8KKwlpZiAoYm1zX2lzX2VtcHR5KG5vZGUtPm1zX2Fz eW5jcmVtYWluKSkKKwkJcmV0dXJuOworCisJLyogTWFrZSBhIHJlcXVlc3QgZm9yIGVhY2ggb2Yg dGhlIHZhbGlkIGFzeW5jIHN1YnBsYW5zLiAqLworCWkgPSAtMTsKKwl3aGlsZSAoKGkgPSBibXNf bmV4dF9tZW1iZXIobm9kZS0+bXNfdmFsaWRfYXN5bmNwbGFucywgaSkpID49IDApCisJeworCQlB c3luY1JlcXVlc3QgKmFyZXEgPSBub2RlLT5tc19hc3luY3JlcXVlc3RzW2ldOworCisJCUFzc2Vy dChhcmVxLT5yZXF1ZXN0X2luZGV4ID09IGkpOworCQlBc3NlcnQoIWFyZXEtPmNhbGxiYWNrX3Bl bmRpbmcpOworCisJCS8qIERvIHRoZSBhY3R1YWwgd29yay4gKi8KKwkJRXhlY0FzeW5jUmVxdWVz dChhcmVxKTsKKwl9Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgICAgICAgICAgICBFeGVjTWVyZ2VB cHBlbmRBc3luY0dldE5leHQKKyAqCisgKiAgICAgICAgICAgICAgR2V0IHRoZSBuZXh0IHR1cGxl IGZyb20gc3BlY2lmaWVkIGFzeW5jaHJvbm91cyBzdWJwbGFuLgorICogLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCitz dGF0aWMgdm9pZAorRXhlY01lcmdlQXBwZW5kQXN5bmNHZXROZXh0KE1lcmdlQXBwZW5kU3RhdGUg Km5vZGUsIGludCBtcGxhbikKK3sKKwlub2RlLT5tc19zbG90c1ttcGxhbl0gPSBOVUxMOworCisJ LyogUmVxdWVzdCBhIHR1cGxlIGFzeW5jaHJvbm91c2x5LiAqLworCWlmIChFeGVjTWVyZ2VBcHBl bmRBc3luY1JlcXVlc3Qobm9kZSwgbXBsYW4pKQorCQlyZXR1cm47CisKKwkvKgorCSAqIG5vZGUt Pm1zX2FzeW5jcmVtYWluIGNhbiBiZSBOVUxMIGlmIHdlIGhhdmUgZmV0Y2hlZCB0dXBsZXMsIGJ1 dCBoYXZlbid0CisJICogcmV0dXJuZWQgdGhlbSB5ZXQuIEluIHRoaXMgY2FzZSBFeGVjTWVyZ2VB cHBlbmRBc3luY1JlcXVlc3QoKSBhYm92ZQorCSAqIGp1c3QgcmV0dXJucyB0dXBsZXMgd2l0aG91 dCBwZXJmb3JtaW5nIGEgcmVxdWVzdC4KKwkgKi8KKwl3aGlsZSAoYm1zX2lzX21lbWJlcihtcGxh biwgbm9kZS0+bXNfYXN5bmNyZW1haW4pKQorCXsKKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsK KworCQkvKiBXYWl0IG9yIHBvbGwgZm9yIGFzeW5jIGV2ZW50cy4gKi8KKwkJRXhlY01lcmdlQXBw ZW5kQXN5bmNFdmVudFdhaXQobm9kZSk7CisKKwkJLyogUmVxdWVzdCBhIHR1cGxlIGFzeW5jaHJv bm91c2x5LiAqLworCQlpZiAoRXhlY01lcmdlQXBwZW5kQXN5bmNSZXF1ZXN0KG5vZGUsIG1wbGFu KSkKKwkJCXJldHVybjsKKworCQkvKgorCQkgKiBXYWl0aW5nIHVudGlsIHRoZXJlJ3Mgbm8gYXN5 bmMgcmVxdWVzdHMgcGVuZGluZyBvciB3ZSBnb3Qgc29tZQorCQkgKiB0dXBsZXMgZnJvbSBvdXIg cmVxdWVzdAorCQkgKi8KKwl9CisKKwkvKiBObyB0dXBsZXMgKi8KKwlyZXR1cm47Cit9CisKKy8q IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqICAgICAgICAgICAgICBFeGVjTWVyZ2VBcHBlbmRBc3luY1JlcXVlc3QKKyAq CisgKiAgICAgICAgICAgICAgUmVxdWVzdCBhIHR1cGxlIGFzeW5jaHJvbm91c2x5LgorICogLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICovCitzdGF0aWMgYm9vbAorRXhlY01lcmdlQXBwZW5kQXN5bmNSZXF1ZXN0KE1lcmdl QXBwZW5kU3RhdGUgKm5vZGUsIGludCBtcGxhbikKK3sKKwlCaXRtYXBzZXQgICpuZWVkcmVxdWVz dDsKKwlpbnQJCQlpOworCisJLyoKKwkgKiBJZiB3ZSd2ZSBhbHJlYWR5IGZldGNoZWQgbmVjZXNz YXJ5IGRhdGEsIGp1c3QgcmV0dXJuIGl0CisJICovCisJaWYgKGJtc19pc19tZW1iZXIobXBsYW4s IG5vZGUtPm1zX2hhc19hc3luY3Jlc3VsdHMpKQorCXsKKwkJbm9kZS0+bXNfc2xvdHNbbXBsYW5d ID0gbm9kZS0+bXNfYXN5bmNyZXN1bHRzW21wbGFuXTsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJ LyoKKwkgKiBHZXQgYSBsaXN0IG9mIG1lbWJlcnMgd2hpY2ggY2FuIHByb2Nlc3MgcmVxdWVzdCBh bmQgZG9uJ3QgaGF2ZSBkYXRhCisJICogcmVhZHkuCisJICovCisJbmVlZHJlcXVlc3QgPSBOVUxM OworCWkgPSAtMTsKKwl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIobm9kZS0+bXNfbmVlZHJl cXVlc3QsIGkpKSA+PSAwKQorCXsKKwkJaWYgKCFibXNfaXNfbWVtYmVyKGksIG5vZGUtPm1zX2hh c19hc3luY3Jlc3VsdHMpKQorCQkJbmVlZHJlcXVlc3QgPSBibXNfYWRkX21lbWJlcihuZWVkcmVx dWVzdCwgaSk7CisJfQorCisJLyoKKwkgKiBJZiB0aGVyZSdzIG5vIG1lbWJlcnMsIHdoaWNoIHN0 aWxsIG5lZWQgcmVxdWVzdCwgbm8gbmVlZCB0byBzZW5kIGl0LgorCSAqLworCWlmIChibXNfaXNf ZW1wdHkobmVlZHJlcXVlc3QpKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBDbGVhciBtc19uZWVk cmVxdWVzdCBmbGFnLCBhcyB3ZSBhcmUgZ29pbmcgdG8gc2VuZCByZXF1ZXN0cyBub3cgKi8KKwlu b2RlLT5tc19uZWVkcmVxdWVzdCA9IGJtc19kZWxfbWVtYmVycyhub2RlLT5tc19uZWVkcmVxdWVz dCwgbmVlZHJlcXVlc3QpOworCisJLyogTWFrZSBhIG5ldyByZXF1ZXN0IGZvciBlYWNoIG9mIHRo ZSBhc3luYyBzdWJwbGFucyB0aGF0IG5lZWQgaXQuICovCisJaSA9IC0xOworCXdoaWxlICgoaSA9 IGJtc19uZXh0X21lbWJlcihuZWVkcmVxdWVzdCwgaSkpID49IDApCisJeworCQlBc3luY1JlcXVl c3QgKmFyZXEgPSBub2RlLT5tc19hc3luY3JlcXVlc3RzW2ldOworCisJCS8qCisJCSAqIFdlJ3Zl IGp1c3QgY2hlY2tlZCB0aGF0IHN1YnBsYW4gZG9lc24ndCBhbHJlYWR5IGhhdmUgc29tZSBmZXRj aGVkCisJCSAqIGRhdGEKKwkJICovCisJCUFzc2VydCghYm1zX2lzX21lbWJlcihpLCBub2RlLT5t c19oYXNfYXN5bmNyZXN1bHRzKSk7CisKKwkJLyogRG8gdGhlIGFjdHVhbCB3b3JrLiAqLworCQlF eGVjQXN5bmNSZXF1ZXN0KGFyZXEpOworCX0KKwlibXNfZnJlZShuZWVkcmVxdWVzdCk7CisKKwkv KiBSZXR1cm4gbmVlZGVkIGFzeW5jaHJvbm91c2x5LWdlbmVyYXRlZCByZXN1bHRzIGlmIGFueS4g Ki8KKwlpZiAoYm1zX2lzX21lbWJlcihtcGxhbiwgbm9kZS0+bXNfaGFzX2FzeW5jcmVzdWx0cykp CisJeworCQlub2RlLT5tc19zbG90c1ttcGxhbl0gPSBub2RlLT5tc19hc3luY3Jlc3VsdHNbbXBs YW5dOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqICAgICAgICAgICAgICBFeGVjQXN5bmNNZXJnZUFwcGVuZFJlc3BvbnNlCisgKgorICog ICAgICAgICAgICAgIFJlY2VpdmUgYSByZXNwb25zZSBmcm9tIGFuIGFzeW5jaHJvbm91cyByZXF1 ZXN0IHdlIG1hZGUuCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK3ZvaWQKK0V4ZWNBc3luY01lcmdlQXBwZW5k UmVzcG9uc2UoQXN5bmNSZXF1ZXN0ICphcmVxKQoreworCU1lcmdlQXBwZW5kU3RhdGUgKm5vZGUg PSAoTWVyZ2VBcHBlbmRTdGF0ZSAqKSBhcmVxLT5yZXF1ZXN0b3I7CisJVHVwbGVUYWJsZVNsb3Qg KnNsb3QgPSBhcmVxLT5yZXN1bHQ7CisKKwkvKiBUaGUgcmVzdWx0IHNob3VsZCBiZSBhIFR1cGxl VGFibGVTbG90IG9yIE5VTEwuICovCisJQXNzZXJ0KHNsb3QgPT0gTlVMTCB8fCBJc0Eoc2xvdCwg VHVwbGVUYWJsZVNsb3QpKTsKKwkvKiBXZSBzaG91bGQgaGFuZGxlIHByZXZpb3VzIGFzeW5jIHJl c3VsdCBwcmlvciB0byBnZXR0aW5nIG5ldyBvbmUgKi8KKwlBc3NlcnQoIWJtc19pc19tZW1iZXIo YXJlcS0+cmVxdWVzdF9pbmRleCwgbm9kZS0+bXNfaGFzX2FzeW5jcmVzdWx0cykpOworCisJbm9k ZS0+bXNfYXN5bmNyZXN1bHRzW2FyZXEtPnJlcXVlc3RfaW5kZXhdID0gTlVMTDsKKwkvKiBOb3Ro aW5nIHRvIGRvIGlmIHRoZSByZXF1ZXN0IGlzIHBlbmRpbmcuICovCisJaWYgKCFhcmVxLT5yZXF1 ZXN0X2NvbXBsZXRlKQorCXsKKwkJLyogVGhlIHJlcXVlc3Qgd291bGQgaGF2ZSBiZWVuIHBlbmRp bmcgZm9yIGEgY2FsbGJhY2suICovCisJCUFzc2VydChhcmVxLT5jYWxsYmFja19wZW5kaW5nKTsK KwkJcmV0dXJuOworCX0KKworCS8qIElmIHRoZSByZXN1bHQgaXMgTlVMTCBvciBhbiBlbXB0eSBz bG90LCB0aGVyZSdzIG5vdGhpbmcgbW9yZSB0byBkby4gKi8KKwlpZiAoVHVwSXNOdWxsKHNsb3Qp KQorCXsKKwkJLyogVGhlIGVuZGluZyBzdWJwbGFuIHdvdWxkbid0IGhhdmUgYmVlbiBwZW5kaW5n IGZvciBhIGNhbGxiYWNrLiAqLworCQlBc3NlcnQoIWFyZXEtPmNhbGxiYWNrX3BlbmRpbmcpOwor CQlub2RlLT5tc19hc3luY3JlbWFpbiA9IGJtc19kZWxfbWVtYmVyKG5vZGUtPm1zX2FzeW5jcmVt YWluLAorCQkJCQkJCQkJCQkgIGFyZXEtPnJlcXVlc3RfaW5kZXgpOworCQlyZXR1cm47CisJfQor CisJLyogTWFyayB0aGF0IHRoZSBhc3luYyByZXF1ZXN0IGhhcyBhIHJlc3VsdCAqLworCW5vZGUt Pm1zX2hhc19hc3luY3Jlc3VsdHMgPSBibXNfYWRkX21lbWJlcihub2RlLT5tc19oYXNfYXN5bmNy ZXN1bHRzLAorCQkJCQkJCQkJCQkgICBhcmVxLT5yZXF1ZXN0X2luZGV4KTsKKwkvKiBTYXZlIHJl c3VsdCBzbyB3ZSBjYW4gcmV0dXJuIGl0LiAqLworCW5vZGUtPm1zX2FzeW5jcmVzdWx0c1thcmVx LT5yZXF1ZXN0X2luZGV4XSA9IHNsb3Q7CisKKwkvKgorCSAqIE1hcmsgdGhlIHN1YnBsYW4gdGhh dCByZXR1cm5lZCBhIHJlc3VsdCBhcyByZWFkeSBmb3IgYSBuZXcgcmVxdWVzdC4gIFdlCisJICog ZG9uJ3QgbGF1bmNoIGFub3RoZXIgb25lIGhlcmUgaW1tZWRpYXRlbHkgYmVjYXVzZSBpdCBtaWdo dCBjb21wbGV0ZS4KKwkgKi8KKwlub2RlLT5tc19uZWVkcmVxdWVzdCA9IGJtc19hZGRfbWVtYmVy KG5vZGUtPm1zX25lZWRyZXF1ZXN0LAorCQkJCQkJCQkJCSAgYXJlcS0+cmVxdWVzdF9pbmRleCk7 Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqCQlFeGVjTWVyZ2VBcHBlbmRBc3luY0V2ZW50V2FpdAorICoK KyAqCQlXYWl0IG9yIHBvbGwgZm9yIGZpbGUgZGVzY3JpcHRvciBldmVudHMgYW5kIGZpcmUgY2Fs bGJhY2tzLgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICovCitzdGF0aWMgdm9pZAorRXhlY01lcmdlQXBwZW5kQXN5 bmNFdmVudFdhaXQoTWVyZ2VBcHBlbmRTdGF0ZSAqbm9kZSkKK3sKKwlpbnQJCQluZXZlbnRzID0g bm9kZS0+bXNfbmFzeW5jcGxhbnMgKyAyOyAvKiBvbmUgZm9yIFBNIGRlYXRoIGFuZAorCQkJCQkJ CQkJCQkJCSAqIG9uZSBmb3IgbGF0Y2ggKi8KKwlXYWl0RXZlbnQJb2NjdXJyZWRfZXZlbnRbRVZF TlRfQlVGRkVSX1NJWkVdOworCWludAkJCW5vY2N1cnJlZDsKKwlpbnQJCQlpOworCisJLyogV2Ug c2hvdWxkIG5ldmVyIGJlIGNhbGxlZCB3aGVuIHRoZXJlIGFyZSBubyB2YWxpZCBhc3luYyBzdWJw bGFucy4gKi8KKwlBc3NlcnQoYm1zX251bV9tZW1iZXJzKG5vZGUtPm1zX2FzeW5jcmVtYWluKSA+ IDApOworCisJbm9kZS0+bXNfZXZlbnRzZXQgPSBDcmVhdGVXYWl0RXZlbnRTZXQoQ3VycmVudFJl c291cmNlT3duZXIsIG5ldmVudHMpOworCUFkZFdhaXRFdmVudFRvU2V0KG5vZGUtPm1zX2V2ZW50 c2V0LCBXTF9FWElUX09OX1BNX0RFQVRILCBQR0lOVkFMSURfU09DS0VULAorCQkJCQkgIE5VTEws IE5VTEwpOworCisJLyogR2l2ZSBlYWNoIHdhaXRpbmcgc3VicGxhbiBhIGNoYW5jZSB0byBhZGQg YW4gZXZlbnQuICovCisJaSA9IC0xOworCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihub2Rl LT5tc19hc3luY3BsYW5zLCBpKSkgPj0gMCkKKwl7CisJCUFzeW5jUmVxdWVzdCAqYXJlcSA9IG5v ZGUtPm1zX2FzeW5jcmVxdWVzdHNbaV07CisKKwkJaWYgKGFyZXEtPmNhbGxiYWNrX3BlbmRpbmcp CisJCQlFeGVjQXN5bmNDb25maWd1cmVXYWl0KGFyZXEpOworCX0KKworCS8qCisJICogTm8gbmVl ZCBmb3IgZnVydGhlciBwcm9jZXNzaW5nIGlmIG5vbmUgb2YgdGhlIHN1YnBsYW5zIGNvbmZpZ3Vy ZWQgYW55CisJICogZXZlbnRzLgorCSAqLworCWlmIChHZXROdW1SZWdpc3RlcmVkV2FpdEV2ZW50 cyhub2RlLT5tc19ldmVudHNldCkgPT0gMSkKKwl7CisJCUZyZWVXYWl0RXZlbnRTZXQobm9kZS0+ bXNfZXZlbnRzZXQpOworCQlub2RlLT5tc19ldmVudHNldCA9IE5VTEw7CisJCXJldHVybjsKKwl9 CisKKwkvKgorCSAqIEFkZCB0aGUgcHJvY2VzcyBsYXRjaCB0byB0aGUgc2V0LCBzbyB0aGF0IHdl IHdha2UgdXAgdG8gcHJvY2VzcyB0aGUKKwkgKiBzdGFuZGFyZCBpbnRlcnJ1cHRzIHdpdGggQ0hF Q0tfRk9SX0lOVEVSUlVQVFMoKS4KKwkgKgorCSAqIE5PVEU6IEZvciBoaXN0b3JpY2FsIHJlYXNv bnMsIGl0J3MgaW1wb3J0YW50IHRoYXQgdGhpcyBpcyBhZGRlZCB0byB0aGUKKwkgKiBXYWl0RXZl bnRTZXQgYWZ0ZXIgdGhlIEV4ZWNBc3luY0NvbmZpZ3VyZVdhaXQoKSBjYWxscy4gIE5hbWVseSwK KwkgKiBwb3N0Z3Jlc19mZHcgY2FsbHMgIkdldE51bVJlZ2lzdGVyZWRXYWl0RXZlbnRzKHNldCkg PT0gMSIgdG8gY2hlY2sgaWYKKwkgKiBhbnkgb3RoZXIgZXZlbnRzIGFyZSBpbiB0aGUgc2V0LiAg VGhhdCdzIGEgcG9vciBkZXNpZ24sIGl0J3MKKwkgKiBxdWVzdGlvbmFibGUgZm9yIHBvc3RncmVz X2ZkdyB0byBiZSBkb2luZyB0aGF0IGluIHRoZSBmaXJzdCBwbGFjZSwgYnV0CisJICogd2UgY2Fu bm90IGNoYW5nZSBpdCBub3cuICBUaGUgcGF0dGVybiBoYXMgcG9zc2libHkgYmVlbiBjb3BpZWQg dG8gb3RoZXIKKwkgKiBleHRlbnNpb25zIHRvby4KKwkgKi8KKwlBZGRXYWl0RXZlbnRUb1NldChu b2RlLT5tc19ldmVudHNldCwgV0xfTEFUQ0hfU0VULCBQR0lOVkFMSURfU09DS0VULAorCQkJCQkg IE15TGF0Y2gsIE5VTEwpOworCisJLyogUmV0dXJuIGF0IG1vc3QgRVZFTlRfQlVGRkVSX1NJWkUg ZXZlbnRzIGluIG9uZSBjYWxsLiAqLworCWlmIChuZXZlbnRzID4gRVZFTlRfQlVGRkVSX1NJWkUp CisJCW5ldmVudHMgPSBFVkVOVF9CVUZGRVJfU0laRTsKKworCS8qCisJICogV2FpdCB1bnRpbCBh dCBsZWFzdCBvbmUgZXZlbnQgb2NjdXJzLgorCSAqLworCW5vY2N1cnJlZCA9IFdhaXRFdmVudFNl dFdhaXQobm9kZS0+bXNfZXZlbnRzZXQsIC0xIC8qIG5vIHRpbWVvdXQgKi8gLCBvY2N1cnJlZF9l dmVudCwKKwkJCQkJCQkJIG5ldmVudHMsIFdBSVRfRVZFTlRfQVBQRU5EX1JFQURZKTsKKwlGcmVl V2FpdEV2ZW50U2V0KG5vZGUtPm1zX2V2ZW50c2V0KTsKKwlub2RlLT5tc19ldmVudHNldCA9IE5V TEw7CisJaWYgKG5vY2N1cnJlZCA9PSAwKQorCQlyZXR1cm47CisKKwkvKiBEZWxpdmVyIG5vdGlm aWNhdGlvbnMuICovCisJZm9yIChpID0gMDsgaSA8IG5vY2N1cnJlZDsgaSsrKQorCXsKKwkJV2Fp dEV2ZW50ICAqdyA9ICZvY2N1cnJlZF9ldmVudFtpXTsKKworCQkvKgorCQkgKiBFYWNoIHdhaXRp bmcgc3VicGxhbiBzaG91bGQgaGF2ZSByZWdpc3RlcmVkIGl0cyB3YWl0IGV2ZW50IHdpdGgKKwkJ ICogdXNlcl9kYXRhIHBvaW50aW5nIGJhY2sgdG8gaXRzIEFzeW5jUmVxdWVzdC4KKwkJICovCisJ CWlmICgody0+ZXZlbnRzICYgV0xfU09DS0VUX1JFQURBQkxFKSAhPSAwKQorCQl7CisJCQlBc3lu Y1JlcXVlc3QgKmFyZXEgPSAoQXN5bmNSZXF1ZXN0ICopIHctPnVzZXJfZGF0YTsKKworCQkJaWYg KGFyZXEtPmNhbGxiYWNrX3BlbmRpbmcpCisJCQl7CisJCQkJLyoKKwkJCQkgKiBNYXJrIGl0IGFz IG5vIGxvbmdlciBuZWVkaW5nIGEgY2FsbGJhY2suICBXZSBtdXN0IGRvIHRoaXMKKwkJCQkgKiBi ZWZvcmUgZGlzcGF0Y2hpbmcgdGhlIGNhbGxiYWNrIGluIGNhc2UgdGhlIGNhbGxiYWNrIHJlc2V0 cworCQkJCSAqIHRoZSBmbGFnLgorCQkJCSAqLworCQkJCWFyZXEtPmNhbGxiYWNrX3BlbmRpbmcg PSBmYWxzZTsKKworCQkJCS8qIERvIHRoZSBhY3R1YWwgd29yay4gKi8KKwkJCQlFeGVjQXN5bmNO b3RpZnkoYXJlcSk7CisJCQl9CisJCX0KKworCQkvKiBIYW5kbGUgc3RhbmRhcmQgaW50ZXJydXB0 cyAqLworCQlpZiAoKHctPmV2ZW50cyAmIFdMX0xBVENIX1NFVCkgIT0gMCkKKwkJeworCQkJUmVz ZXRMYXRjaChNeUxhdGNoKTsKKwkJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisJCX0KKwl9Cit9 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jIGIvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYwppbmRleCBhMzljYzc5M2I0ZC4uMDE3 ZTU5NzczNjkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXpl LmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYwpAQCAtMTYzLDYg KzE2Myw3IEBAIGJvb2wJCWVuYWJsZV9wYXJhbGxlbF9oYXNoID0gdHJ1ZTsKIGJvb2wJCWVuYWJs ZV9wYXJ0aXRpb25fcHJ1bmluZyA9IHRydWU7CiBib29sCQllbmFibGVfcHJlc29ydGVkX2FnZ3Jl Z2F0ZSA9IHRydWU7CiBib29sCQllbmFibGVfYXN5bmNfYXBwZW5kID0gdHJ1ZTsKK2Jvb2wJCWVu YWJsZV9hc3luY19tZXJnZV9hcHBlbmQgPSB0cnVlOwogCiB0eXBlZGVmIHN0cnVjdAogewpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jIGIvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCmluZGV4IDg0ZjYwYzQ4NjUzLi4yNDMy NWQ0MmYwZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxh bi5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYwpAQCAtMTQ2 Niw2ICsxNDY2LDcgQEAgY3JlYXRlX21lcmdlX2FwcGVuZF9wbGFuKFBsYW5uZXJJbmZvICpyb290 LCBNZXJnZUFwcGVuZFBhdGggKmJlc3RfcGF0aCwKIAlMaXN0CSAgICpzdWJwbGFucyA9IE5JTDsK IAlMaXN0Q2VsbCAgICpzdWJwYXRoczsKIAlSZWxPcHRJbmZvICpyZWwgPSBiZXN0X3BhdGgtPnBh dGgucGFyZW50OworCWJvb2wJCWNvbnNpZGVyX2FzeW5jID0gZmFsc2U7CiAKIAkvKgogCSAqIFdl IGRvbid0IGhhdmUgdGhlIGFjdHVhbCBjcmVhdGlvbiBvZiB0aGUgTWVyZ2VBcHBlbmQgbm9kZSBz cGxpdCBvdXQKQEAgLTE0ODAsNiArMTQ4MSwxMCBAQCBjcmVhdGVfbWVyZ2VfYXBwZW5kX3BsYW4o UGxhbm5lckluZm8gKnJvb3QsIE1lcmdlQXBwZW5kUGF0aCAqYmVzdF9wYXRoLAogCXBsYW4tPnJp Z2h0dHJlZSA9IE5VTEw7CiAJbm9kZS0+YXBwcmVsaWRzID0gcmVsLT5yZWxpZHM7CiAKKwljb25z aWRlcl9hc3luYyA9IChlbmFibGVfYXN5bmNfbWVyZ2VfYXBwZW5kICYmCisJCQkJCSAgIWJlc3Rf cGF0aC0+cGF0aC5wYXJhbGxlbF9zYWZlICYmCisJCQkJCSAgbGlzdF9sZW5ndGgoYmVzdF9wYXRo LT5zdWJwYXRocykgPiAxKTsKKwogCS8qCiAJICogQ29tcHV0ZSBzb3J0IGNvbHVtbiBpbmZvLCBh bmQgYWRqdXN0IE1lcmdlQXBwZW5kJ3MgdGxpc3QgYXMgbmVlZGVkLgogCSAqIEJlY2F1c2Ugd2Ug cGFzcyBhZGp1c3RfdGxpc3RfaW5fcGxhY2UgPSB0cnVlLCB3ZSBtYXkgaWdub3JlIHRoZQpAQCAt MTU4MCw2ICsxNTg1LDEwIEBAIGNyZWF0ZV9tZXJnZV9hcHBlbmRfcGxhbihQbGFubmVySW5mbyAq cm9vdCwgTWVyZ2VBcHBlbmRQYXRoICpiZXN0X3BhdGgsCiAJCQlzdWJwbGFuID0gc29ydF9wbGFu OwogCQl9CiAKKwkJLyogSWYgbmVlZGVkLCBjaGVjayB0byBzZWUgaWYgc3VicGxhbiBjYW4gYmUg ZXhlY3V0ZWQgYXN5bmNocm9ub3VzbHkgKi8KKwkJaWYgKGNvbnNpZGVyX2FzeW5jKQorCQkJbWFy a19hc3luY19jYXBhYmxlX3BsYW4oc3VicGxhbiwgc3VicGF0aCk7CisKIAkJc3VicGxhbnMgPSBs YXBwZW5kKHN1YnBsYW5zLCBzdWJwbGFuKTsKIAl9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0IGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9n dWNfcGFyYW1ldGVycy5kYXQKaW5kZXggM2I5ZDgzNDkwNzguLmJkYjhmYzFiM2FkIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdAorKysgYi9zcmMv YmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdApAQCAtODEyLDYgKzgxMiwxNCBA QAogICBib290X3ZhbCA9PiAndHJ1ZScsCiB9LAogCit7IG5hbWUgPT4gJ2VuYWJsZV9hc3luY19t ZXJnZV9hcHBlbmQnLCB0eXBlID0+ICdib29sJywgY29udGV4dCA9PiAnUEdDX1VTRVJTRVQnLCBn cm91cCA9PiAnUVVFUllfVFVOSU5HX01FVEhPRCcsCisgIHNob3J0X2Rlc2MgPT4gJ0VuYWJsZXMg dGhlIHBsYW5uZXJcJ3MgdXNlIG9mIGFzeW5jIG1lcmdlIGFwcGVuZCBwbGFucy4nLAorICBmbGFn cyA9PiAnR1VDX0VYUExBSU4nLAorICB2YXJpYWJsZSA9PiAnZW5hYmxlX2FzeW5jX21lcmdlX2Fw cGVuZCcsCisgIGJvb3RfdmFsID0+ICd0cnVlJywKK30sCisKKwogeyBuYW1lID0+ICdlbmFibGVf Yml0bWFwc2NhbicsIHR5cGUgPT4gJ2Jvb2wnLCBjb250ZXh0ID0+ICdQR0NfVVNFUlNFVCcsIGdy b3VwID0+ICdRVUVSWV9UVU5JTkdfTUVUSE9EJywKICAgc2hvcnRfZGVzYyA9PiAnRW5hYmxlcyB0 aGUgcGxhbm5lclwncyB1c2Ugb2YgYml0bWFwLXNjYW4gcGxhbnMuJywKICAgZmxhZ3MgPT4gJ0dV Q19FWFBMQUlOJywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNx bC5jb25mLnNhbXBsZSBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNh bXBsZQppbmRleCBkYzllMjI1NWY4YS4uZDk0OWQyYWFkMDQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQorKysgYi9zcmMvYmFja2VuZC91 dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKQEAgLTQwNSw2ICs0MDUsNyBAQAogIyAt IFBsYW5uZXIgTWV0aG9kIENvbmZpZ3VyYXRpb24gLQogCiAjZW5hYmxlX2FzeW5jX2FwcGVuZCA9 IG9uCisjZW5hYmxlX2FzeW5jX21lcmdlX2FwcGVuZCA9IG9uCiAjZW5hYmxlX2JpdG1hcHNjYW4g PSBvbgogI2VuYWJsZV9nYXRoZXJtZXJnZSA9IG9uCiAjZW5hYmxlX2hhc2hhZ2cgPSBvbgpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmggYi9zcmMvaW5j bHVkZS9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuaAppbmRleCA0ZWIwNWRjMzBkNi4uZTNmZGIy NmVjZTYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5o CisrKyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5oCkBAIC0xOSw1ICsx OSw2IEBACiBleHRlcm4gTWVyZ2VBcHBlbmRTdGF0ZSAqRXhlY0luaXRNZXJnZUFwcGVuZChNZXJn ZUFwcGVuZCAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpOwogZXh0ZXJuIHZvaWQg RXhlY0VuZE1lcmdlQXBwZW5kKE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUpOwogZXh0ZXJuIHZvaWQg RXhlY1JlU2Nhbk1lcmdlQXBwZW5kKE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUpOworZXh0ZXJuIHZv aWQgRXhlY0FzeW5jTWVyZ2VBcHBlbmRSZXNwb25zZShBc3luY1JlcXVlc3QgKmFyZXEpOwogCiAj ZW5kaWYJCQkJCQkJLyogTk9ERU1FUkdFQVBQRU5EX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL25vZGVzL2V4ZWNub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKaW5k ZXggMzk2ODQyOWY5OTEuLjU4ODdjYmY0ZjE2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rl cy9leGVjbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaApAQCAtMTU0 NSwxMCArMTU0NSw2OSBAQCB0eXBlZGVmIHN0cnVjdCBNZXJnZUFwcGVuZFN0YXRlCiAJVHVwbGVU YWJsZVNsb3QgKiptc19zbG90czsJLyogYXJyYXkgb2YgbGVuZ3RoIG1zX25wbGFucyAqLwogCXN0 cnVjdCBiaW5hcnloZWFwICptc19oZWFwOyAvKiBiaW5hcnkgaGVhcCBvZiBzbG90IGluZGljZXMg Ki8KIAlib29sCQltc19pbml0aWFsaXplZDsgLyogYXJlIHN1YnBsYW5zIHN0YXJ0ZWQ/ICovCisJ Qml0bWFwc2V0ICAqbXNfYXN5bmNwbGFuczsJLyogYXN5bmNocm9ub3VzIHBsYW5zIGluZGV4ZXMg Ki8KKwlpbnQJCQltc19uYXN5bmNwbGFuczsgLyogIyBvZiBhc3luY2hyb25vdXMgcGxhbnMgKi8K KwlBc3luY1JlcXVlc3QgKiptc19hc3luY3JlcXVlc3RzOwkvKiBhcnJheSBvZiBBc3luY1JlcXVl c3RzICovCisJVHVwbGVUYWJsZVNsb3QgKiptc19hc3luY3Jlc3VsdHM7CS8qIHVucmV0dXJuZWQg cmVzdWx0cyBvZiBhc3luYyBwbGFucyAqLworCUJpdG1hcHNldCAgKm1zX2hhc19hc3luY3Jlc3Vs dHM7CS8qIHBsYW5zIHdoaWNoIGhhdmUgYXN5bmMgcmVzdWx0cyAqLworCUJpdG1hcHNldCAgKm1z X2FzeW5jcmVtYWluOyAvKiByZW1haW5pbmcgYXN5bmNocm9ub3VzIHBsYW5zICovCisJQml0bWFw c2V0ICAqbXNfbmVlZHJlcXVlc3Q7IC8qIGFzeW5jaHJvbm91cyBwbGFucyBuZWVkaW5nIGEgbmV3 IHJlcXVlc3QgKi8KKwlzdHJ1Y3QgV2FpdEV2ZW50U2V0ICptc19ldmVudHNldDsJLyogV2FpdEV2 ZW50U2V0IHVzZWQgdG8gY29uZmlndXJlIGZpbGUKKwkJCQkJCQkJCQkgKiBkZXNjcmlwdG9yIHdh aXQgZXZlbnRzICovCiAJc3RydWN0IFBhcnRpdGlvblBydW5lU3RhdGUgKm1zX3BydW5lX3N0YXRl OworCWJvb2wJCW1zX3ZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQ7CS8qIGlzIG1zX3ZhbGlkX3N1 YnBsYW5zIHZhbGlkPyAqLwogCUJpdG1hcHNldCAgKm1zX3ZhbGlkX3N1YnBsYW5zOworCUJpdG1h cHNldCAgKm1zX3ZhbGlkX2FzeW5jcGxhbnM7CS8qIHZhbGlkIGFzeW5jaHJvbm91cyBwbGFucyBp bmRleGVzICovCiB9IE1lcmdlQXBwZW5kU3RhdGU7CiAKKy8qIEdldHRlcnMgZm9yIEFwcGVuZFN0 YXRlIGFuZCBNZXJnZUFwcGVuZFN0YXRlICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBXYWl0RXZl bnRTZXQgKgorR2V0QXBwZW5kRXZlbnRTZXQoUGxhblN0YXRlICpwcykKK3sKKwlBc3NlcnQoSXNB KHBzLCBBcHBlbmRTdGF0ZSkgfHwgSXNBKHBzLCBNZXJnZUFwcGVuZFN0YXRlKSk7CisKKwlpZiAo SXNBKHBzLCBBcHBlbmRTdGF0ZSkpCisJCXJldHVybiAoKEFwcGVuZFN0YXRlICopIHBzKS0+YXNf ZXZlbnRzZXQ7CisJZWxzZQorCQlyZXR1cm4gKChNZXJnZUFwcGVuZFN0YXRlICopIHBzKS0+bXNf ZXZlbnRzZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgQml0bWFwc2V0ICoKK0dldE5lZWRSZXF1ZXN0 KFBsYW5TdGF0ZSAqcHMpCit7CisJQXNzZXJ0KElzQShwcywgQXBwZW5kU3RhdGUpIHx8IElzQShw cywgTWVyZ2VBcHBlbmRTdGF0ZSkpOworCisJaWYgKElzQShwcywgQXBwZW5kU3RhdGUpKQorCQly ZXR1cm4gKChBcHBlbmRTdGF0ZSAqKSBwcyktPmFzX25lZWRyZXF1ZXN0OworCWVsc2UKKwkJcmV0 dXJuICgoTWVyZ2VBcHBlbmRTdGF0ZSAqKSBwcyktPm1zX25lZWRyZXF1ZXN0OworfQorCisvKiBD b21tb24gcGFydCBvZiBjbGFzc2lmeV9tYXRjaGluZ19zdWJwbGFucygpIGZvciBBcHBlbmQgYW5k IE1lcmdlQXBwZW5kICovCitzdGF0aWMgaW5saW5lIGJvb2wKK2NsYXNzaWZ5X21hdGNoaW5nX3N1 YnBsYW5zX2NvbW1vbihCaXRtYXBzZXQgKip2YWxpZF9zdWJwbGFucywKKwkJCQkJCQkJICBCaXRt YXBzZXQgKmFzeW5jcGxhbnMsCisJCQkJCQkJCSAgQml0bWFwc2V0ICoqdmFsaWRfYXN5bmNwbGFu cykKK3sKKwlBc3NlcnQoKnZhbGlkX2FzeW5jcGxhbnMgPT0gTlVMTCk7CisKKwkvKiBDaGVja2Vk IGJ5IGNsYXNzaWZ5X21hdGNoaW5nX3N1YnBsYW5zKCkgKi8KKwlBc3NlcnQoIWJtc19pc19lbXB0 eSgqdmFsaWRfc3VicGxhbnMpKTsKKworCS8qIE5vdGhpbmcgdG8gZG8gaWYgdGhlcmUgYXJlIG5v IHZhbGlkIGFzeW5jIHN1YnBsYW5zLiAqLworCWlmICghYm1zX292ZXJsYXAoKnZhbGlkX3N1YnBs YW5zLCBhc3luY3BsYW5zKSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogR2V0IHZhbGlkIGFzeW5j IHN1YnBsYW5zLiAqLworCSp2YWxpZF9hc3luY3BsYW5zID0gYm1zX2ludGVyc2VjdChhc3luY3Bs YW5zLAorCQkJCQkJCQkJICAqdmFsaWRfc3VicGxhbnMpOworCisJLyogQWRqdXN0IHRoZSB2YWxp ZCBzdWJwbGFucyB0byBjb250YWluIHN5bmMgc3VicGxhbnMgb25seS4gKi8KKwkqdmFsaWRfc3Vi cGxhbnMgPSBibXNfZGVsX21lbWJlcnMoKnZhbGlkX3N1YnBsYW5zLAorCQkJCQkJCQkJICAqdmFs aWRfYXN5bmNwbGFucyk7CisJcmV0dXJuIHRydWU7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0K ICAqCSBSZWN1cnNpdmVVbmlvblN0YXRlIGluZm9ybWF0aW9uCiAgKgpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmgK aW5kZXggYjUyM2JjZGE4ZjMuLmZlZTQ5MWI3N2FkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9v cHRpbWl6ZXIvY29zdC5oCisrKyBiL3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmgKQEAgLTcw LDYgKzcwLDcgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX3BhcmFsbGVsX2hhc2g7 CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfcGFydGl0aW9uX3BydW5pbmc7CiBleHRl cm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfcHJlc29ydGVkX2FnZ3JlZ2F0ZTsKIGV4dGVybiBQ R0RMTElNUE9SVCBib29sIGVuYWJsZV9hc3luY19hcHBlbmQ7CitleHRlcm4gUEdETExJTVBPUlQg Ym9vbCBlbmFibGVfYXN5bmNfbWVyZ2VfYXBwZW5kOwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBj b25zdHJhaW50X2V4Y2x1c2lvbjsKIAogZXh0ZXJuIGRvdWJsZSBpbmRleF9wYWdlc19mZXRjaGVk KGRvdWJsZSB0dXBsZXNfZmV0Y2hlZCwgQmxvY2tOdW1iZXIgcGFnZXMsCmRpZmYgLS1naXQgYS9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvc3lzdmlld3Mub3V0CmluZGV4IDA0MTFkYjgzMmYxLi4xOTRiMWY5NTI4OSAxMDA2 NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQKKysrIGIvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQKQEAgLTE0OSw2ICsxNDksNyBAQCBz ZWxlY3QgbmFtZSwgc2V0dGluZyBmcm9tIHBnX3NldHRpbmdzIHdoZXJlIG5hbWUgbGlrZSAnZW5h YmxlJSc7CiAgICAgICAgICAgICAgIG5hbWUgICAgICAgICAgICAgIHwgc2V0dGluZyAKIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLQogIGVuYWJsZV9hc3luY19hcHBl bmQgICAgICAgICAgICB8IG9uCisgZW5hYmxlX2FzeW5jX21lcmdlX2FwcGVuZCAgICAgIHwgb24K ICBlbmFibGVfYml0bWFwc2NhbiAgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV9kaXN0aW5jdF9y ZW9yZGVyaW5nICAgICB8IG9uCiAgZW5hYmxlX2VhZ2VyX2FnZ3JlZ2F0ZSAgICAgICAgIHwgb24K QEAgLTE3Myw3ICsxNzQsNyBAQCBzZWxlY3QgbmFtZSwgc2V0dGluZyBmcm9tIHBnX3NldHRpbmdz IHdoZXJlIG5hbWUgbGlrZSAnZW5hYmxlJSc7CiAgZW5hYmxlX3NlcXNjYW4gICAgICAgICAgICAg ICAgIHwgb24KICBlbmFibGVfc29ydCAgICAgICAgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV90 aWRzY2FuICAgICAgICAgICAgICAgICB8IG9uCi0oMjUgcm93cykKKygyNiByb3dzKQogCiAtLSBU aGVyZSBhcmUgYWx3YXlzIHdhaXQgZXZlbnQgZGVzY3JpcHRpb25zIGZvciB2YXJpb3VzIHR5cGVz LiAgSW5qZWN0aW9uUG9pbnQKIC0tIG1heSBiZSBwcmVzZW50IG9yIGFic2VudCwgZGVwZW5kaW5n IG9uIGhpc3Rvcnkgc2luY2UgbGFzdCBwb3N0bWFzdGVyIHN0YXJ0LgotLSAKMi41MS4yCgo= --ba79e69925b52b52a6cf67524035fc64a4cd23c5da753b45f7537702bba2 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v10-0003-Create-execAppend.c-to-avoid-duplicated-code-on-.patch Content-Type: text/plain; charset=utf-8; name=v10-0003-Create-execAppend.c-to-avoid-duplicated-code-on-.patch RnJvbSA0YjA4ZTE5ZGUyYTUyYTQ3OWEzZjNmOGM1ZGI2NjAxNzcwZTRjM2FhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXRoZXVzIEFsY2FudGFyYSA8bXRocy5kZXZAcG0ubWU+CkRh dGU6IFR1ZSwgMTYgRGVjIDIwMjUgMTY6MzI6MTQgLTAzMDAKU3ViamVjdDogW1BBVENIIHYxMCAz LzNdIENyZWF0ZSBleGVjQXBwZW5kLmMgdG8gYXZvaWQgZHVwbGljYXRlZCBjb2RlIG9uCiBbTWVy Z2VdQXBwZW5kCgotLS0KIGNvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYyB8 ICAgNCArLQogY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMgICAgIHwgICA4ICst CiBzcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMgICAgICAgICAgfCAgMjYgKy0KIHNyYy9i YWNrZW5kL2V4ZWN1dG9yL01ha2VmaWxlICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9l eGVjdXRvci9leGVjQW1pLmMgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9y L2V4ZWNBcHBlbmQuYyAgICAgICB8IDQxMCArKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2Vu ZC9leGVjdXRvci9leGVjQ3VycmVudC5jICAgICAgfCAgIDQgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNQcm9jbm9kZS5jICAgICB8ICAgOCArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvbWVz b24uYnVpbGQgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBcHBlbmQu YyAgICAgICB8IDQ5NyArKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0KIHNyYy9iYWNrZW5kL2V4ZWN1 dG9yL25vZGVNZXJnZUFwcGVuZC5jICB8IDQxNiArKystLS0tLS0tLS0tLS0tLS0tLQogc3JjL2Jh Y2tlbmQvbm9kZXMvbm9kZUZ1bmNzLmMgICAgICAgICAgIHwgICA4ICstCiBzcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMgfCAgMzQgKy0KIHNyYy9iYWNrZW5kL29wdGltaXpl ci9wbGFuL3NldHJlZnMuYyAgICB8ICA0NCArLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFu L3N1YnNlbGVjdC5jICB8ICAgNCArLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5j ICAgICAgIHwgICA4ICstCiBzcmMvaW5jbHVkZS9leGVjdXRvci9leGVjQXBwZW5kLmggICAgICAg fCAgMzMgKysKIHNyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oICAgICAgICAgICB8ICA4MCAr Ky0tCiBzcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaCAgICAgICAgICAgfCAgNDUgKy0tCiAx OSBmaWxlcyBjaGFuZ2VkLCA3MjAgaW5zZXJ0aW9ucygrKSwgOTEzIGRlbGV0aW9ucygtKQogY3Jl YXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNBcHBlbmQuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNBcHBlbmQuaAoKZGlmZiAtLWdp dCBhL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYyBiL2NvbnRyaWIvcGdf b3ZlcmV4cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYwppbmRleCBmY2RjMTcwMTJkYS4uN2YxOGMyYWIw NmMgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYwor KysgYi9jb250cmliL3BnX292ZXJleHBsYWluL3BnX292ZXJleHBsYWluLmMKQEAgLTIyOCwxMiAr MjI4LDEyIEBAIG92ZXJleHBsYWluX3Blcl9ub2RlX2hvb2soUGxhblN0YXRlICpwbGFuc3RhdGUs IExpc3QgKmFuY2VzdG9ycywKIAkJCQlicmVhazsKIAkJCWNhc2UgVF9BcHBlbmQ6CiAJCQkJb3Zl cmV4cGxhaW5fYml0bWFwc2V0KCJBcHBlbmQgUlRJcyIsCi0JCQkJCQkJCQkgICgoQXBwZW5kICop IHBsYW4pLT5hcHByZWxpZHMsCisJCQkJCQkJCQkgICgoQXBwZW5kICopIHBsYW4pLT5hcC5hcHBy ZWxpZHMsCiAJCQkJCQkJCQkgIGVzKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgVF9NZXJnZUFwcGVu ZDoKIAkJCQlvdmVyZXhwbGFpbl9iaXRtYXBzZXQoIkFwcGVuZCBSVElzIiwKLQkJCQkJCQkJCSAg KChNZXJnZUFwcGVuZCAqKSBwbGFuKS0+YXBwcmVsaWRzLAorCQkJCQkJCQkJICAoKE1lcmdlQXBw ZW5kICopIHBsYW4pLT5hcC5hcHByZWxpZHMsCiAJCQkJCQkJCQkgIGVzKTsKIAkJCQlicmVhazsK IAkJCWNhc2UgVF9SZXN1bHQ6CmRpZmYgLS1naXQgYS9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0 Z3Jlc19mZHcuYyBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jCmluZGV4IGJk NTUxYTFkYjcyLi5iMDFhZDQwYWQxNyAxMDA2NDQKLS0tIGEvY29udHJpYi9wb3N0Z3Jlc19mZHcv cG9zdGdyZXNfZmR3LmMKKysrIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMK QEAgLTI0MTIsOCArMjQxMiw4IEBAIGZpbmRfbW9kaWZ5dGFibGVfc3VicGxhbihQbGFubmVySW5m byAqcm9vdCwKIAl7CiAJCUFwcGVuZAkgICAqYXBwZW5kcGxhbiA9IChBcHBlbmQgKikgc3VicGxh bjsKIAotCQlpZiAoc3VicGxhbl9pbmRleCA8IGxpc3RfbGVuZ3RoKGFwcGVuZHBsYW4tPmFwcGVu ZHBsYW5zKSkKLQkJCXN1YnBsYW4gPSAoUGxhbiAqKSBsaXN0X250aChhcHBlbmRwbGFuLT5hcHBl bmRwbGFucywgc3VicGxhbl9pbmRleCk7CisJCWlmIChzdWJwbGFuX2luZGV4IDwgbGlzdF9sZW5n dGgoYXBwZW5kcGxhbi0+YXAuc3VicGxhbnMpKQorCQkJc3VicGxhbiA9IChQbGFuICopIGxpc3Rf bnRoKGFwcGVuZHBsYW4tPmFwLnN1YnBsYW5zLCBzdWJwbGFuX2luZGV4KTsKIAl9CiAJZWxzZSBp ZiAoSXNBKHN1YnBsYW4sIFJlc3VsdCkgJiYKIAkJCSBvdXRlclBsYW4oc3VicGxhbikgIT0gTlVM TCAmJgpAQCAtMjQyMSw4ICsyNDIxLDggQEAgZmluZF9tb2RpZnl0YWJsZV9zdWJwbGFuKFBsYW5u ZXJJbmZvICpyb290LAogCXsKIAkJQXBwZW5kCSAgICphcHBlbmRwbGFuID0gKEFwcGVuZCAqKSBv dXRlclBsYW4oc3VicGxhbik7CiAKLQkJaWYgKHN1YnBsYW5faW5kZXggPCBsaXN0X2xlbmd0aChh cHBlbmRwbGFuLT5hcHBlbmRwbGFucykpCi0JCQlzdWJwbGFuID0gKFBsYW4gKikgbGlzdF9udGgo YXBwZW5kcGxhbi0+YXBwZW5kcGxhbnMsIHN1YnBsYW5faW5kZXgpOworCQlpZiAoc3VicGxhbl9p bmRleCA8IGxpc3RfbGVuZ3RoKGFwcGVuZHBsYW4tPmFwLnN1YnBsYW5zKSkKKwkJCXN1YnBsYW4g PSAoUGxhbiAqKSBsaXN0X250aChhcHBlbmRwbGFuLT5hcC5zdWJwbGFucywgc3VicGxhbl9pbmRl eCk7CiAJfQogCiAJLyogTm93LCBoYXZlIHdlIGdvdCBhIEZvcmVpZ25TY2FuIG9uIHRoZSBkZXNp cmVkIHJlbD8gKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyBi L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwppbmRleCA1YTYzOTA2MzFlYi4uM2VhYTFm NzQ1OWUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYworKysgYi9z cmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKQEAgLTEyMjQsMTEgKzEyMjQsMTEgQEAgRXhw bGFpblByZVNjYW5Ob2RlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBCaXRtYXBzZXQgKipyZWxzX3Vz ZWQpCiAJCQlicmVhazsKIAkJY2FzZSBUX0FwcGVuZDoKIAkJCSpyZWxzX3VzZWQgPSBibXNfYWRk X21lbWJlcnMoKnJlbHNfdXNlZCwKLQkJCQkJCQkJCQkgKChBcHBlbmQgKikgcGxhbiktPmFwcHJl bGlkcyk7CisJCQkJCQkJCQkJICgoQXBwZW5kICopIHBsYW4pLT5hcC5hcHByZWxpZHMpOwogCQkJ YnJlYWs7CiAJCWNhc2UgVF9NZXJnZUFwcGVuZDoKIAkJCSpyZWxzX3VzZWQgPSBibXNfYWRkX21l bWJlcnMoKnJlbHNfdXNlZCwKLQkJCQkJCQkJCQkgKChNZXJnZUFwcGVuZCAqKSBwbGFuKS0+YXBw cmVsaWRzKTsKKwkJCQkJCQkJCQkgKChNZXJnZUFwcGVuZCAqKSBwbGFuKS0+YXAuYXBwcmVsaWRz KTsKIAkJCWJyZWFrOwogCQljYXNlIFRfUmVzdWx0OgogCQkJKnJlbHNfdXNlZCA9IGJtc19hZGRf bWVtYmVycygqcmVsc191c2VkLApAQCAtMTI3Miw3ICsxMjcyLDcgQEAgcGxhbl9pc19kaXNhYmxl ZChQbGFuICpwbGFuKQogCQkgKiBpbmNsdWRlcyBhbnkgcnVuLXRpbWUgcHJ1bmVkIGNoaWxkcmVu LiAgSWdub3JpbmcgdGhvc2UgY291bGQgZ2l2ZQogCQkgKiB1cyB0aGUgaW5jb3JyZWN0IG51bWJl ciBvZiBkaXNhYmxlZCBub2Rlcy4KIAkJICovCi0JCWZvcmVhY2gobGMsIGFwbGFuLT5hcHBlbmRw bGFucykKKwkJZm9yZWFjaChsYywgYXBsYW4tPmFwLnN1YnBsYW5zKQogCQl7CiAJCQlQbGFuCSAg ICpzdWJwbGFuID0gbGZpcnN0KGxjKTsKIApAQCAtMTI4OSw3ICsxMjg5LDcgQEAgcGxhbl9pc19k aXNhYmxlZChQbGFuICpwbGFuKQogCQkgKiBpbmNsdWRlcyBhbnkgcnVuLXRpbWUgcHJ1bmVkIGNo aWxkcmVuLiAgSWdub3JpbmcgdGhvc2UgY291bGQgZ2l2ZQogCQkgKiB1cyB0aGUgaW5jb3JyZWN0 IG51bWJlciBvZiBkaXNhYmxlZCBub2Rlcy4KIAkJICovCi0JCWZvcmVhY2gobGMsIG1hcGxhbi0+ bWVyZ2VwbGFucykKKwkJZm9yZWFjaChsYywgbWFwbGFuLT5hcC5zdWJwbGFucykKIAkJewogCQkJ UGxhbgkgICAqc3VicGxhbiA9IGxmaXJzdChsYyk7CiAKQEAgLTIzMzYsMTMgKzIzMzYsMTMgQEAg RXhwbGFpbk5vZGUoUGxhblN0YXRlICpwbGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAlzd2l0 Y2ggKG5vZGVUYWcocGxhbikpCiAJewogCQljYXNlIFRfQXBwZW5kOgotCQkJRXhwbGFpbk1pc3Np bmdNZW1iZXJzKCgoQXBwZW5kU3RhdGUgKikgcGxhbnN0YXRlKS0+YXNfbnBsYW5zLAotCQkJCQkJ CQkgIGxpc3RfbGVuZ3RoKCgoQXBwZW5kICopIHBsYW4pLT5hcHBlbmRwbGFucyksCisJCQlFeHBs YWluTWlzc2luZ01lbWJlcnMoKChBcHBlbmRTdGF0ZSAqKSBwbGFuc3RhdGUpLT5hcy5ucGxhbnMs CisJCQkJCQkJCSAgbGlzdF9sZW5ndGgoKChBcHBlbmQgKikgcGxhbiktPmFwLnN1YnBsYW5zKSwK IAkJCQkJCQkJICBlcyk7CiAJCQlicmVhazsKIAkJY2FzZSBUX01lcmdlQXBwZW5kOgotCQkJRXhw bGFpbk1pc3NpbmdNZW1iZXJzKCgoTWVyZ2VBcHBlbmRTdGF0ZSAqKSBwbGFuc3RhdGUpLT5tc19u cGxhbnMsCi0JCQkJCQkJCSAgbGlzdF9sZW5ndGgoKChNZXJnZUFwcGVuZCAqKSBwbGFuKS0+bWVy Z2VwbGFucyksCisJCQlFeHBsYWluTWlzc2luZ01lbWJlcnMoKChNZXJnZUFwcGVuZFN0YXRlICop IHBsYW5zdGF0ZSktPm1zLm5wbGFucywKKwkJCQkJCQkJICBsaXN0X2xlbmd0aCgoKE1lcmdlQXBw ZW5kICopIHBsYW4pLT5hcC5zdWJwbGFucyksCiAJCQkJCQkJCSAgZXMpOwogCQkJYnJlYWs7CiAJ CWRlZmF1bHQ6CkBAIC0yMzg2LDEzICsyMzg2LDEzIEBAIEV4cGxhaW5Ob2RlKFBsYW5TdGF0ZSAq cGxhbnN0YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJc3dpdGNoIChub2RlVGFnKHBsYW4pKQogCXsK IAkJY2FzZSBUX0FwcGVuZDoKLQkJCUV4cGxhaW5NZW1iZXJOb2RlcygoKEFwcGVuZFN0YXRlICop IHBsYW5zdGF0ZSktPmFwcGVuZHBsYW5zLAotCQkJCQkJCSAgICgoQXBwZW5kU3RhdGUgKikgcGxh bnN0YXRlKS0+YXNfbnBsYW5zLAorCQkJRXhwbGFpbk1lbWJlck5vZGVzKCgoQXBwZW5kU3RhdGUg KikgcGxhbnN0YXRlKS0+YXMucGxhbnMsCisJCQkJCQkJICAgKChBcHBlbmRTdGF0ZSAqKSBwbGFu c3RhdGUpLT5hcy5ucGxhbnMsCiAJCQkJCQkJICAgYW5jZXN0b3JzLCBlcyk7CiAJCQlicmVhazsK IAkJY2FzZSBUX01lcmdlQXBwZW5kOgotCQkJRXhwbGFpbk1lbWJlck5vZGVzKCgoTWVyZ2VBcHBl bmRTdGF0ZSAqKSBwbGFuc3RhdGUpLT5tZXJnZXBsYW5zLAotCQkJCQkJCSAgICgoTWVyZ2VBcHBl bmRTdGF0ZSAqKSBwbGFuc3RhdGUpLT5tc19ucGxhbnMsCisJCQlFeHBsYWluTWVtYmVyTm9kZXMo KChNZXJnZUFwcGVuZFN0YXRlICopIHBsYW5zdGF0ZSktPm1zLnBsYW5zLAorCQkJCQkJCSAgICgo TWVyZ2VBcHBlbmRTdGF0ZSAqKSBwbGFuc3RhdGUpLT5tcy5ucGxhbnMsCiAJCQkJCQkJICAgYW5j ZXN0b3JzLCBlcyk7CiAJCQlicmVhazsKIAkJY2FzZSBUX0JpdG1hcEFuZDoKQEAgLTI2MDYsNyAr MjYwNiw3IEBAIHN0YXRpYyB2b2lkCiBzaG93X21lcmdlX2FwcGVuZF9rZXlzKE1lcmdlQXBwZW5k U3RhdGUgKm1zdGF0ZSwgTGlzdCAqYW5jZXN0b3JzLAogCQkJCQkgICBFeHBsYWluU3RhdGUgKmVz KQogewotCU1lcmdlQXBwZW5kICpwbGFuID0gKE1lcmdlQXBwZW5kICopIG1zdGF0ZS0+cHMucGxh bjsKKwlNZXJnZUFwcGVuZCAqcGxhbiA9IChNZXJnZUFwcGVuZCAqKSBtc3RhdGUtPm1zLnBzLnBs YW47CiAKIAlzaG93X3NvcnRfZ3JvdXBfa2V5cygoUGxhblN0YXRlICopIG1zdGF0ZSwgIlNvcnQg S2V5IiwKIAkJCQkJCSBwbGFuLT5udW1Db2xzLCAwLCBwbGFuLT5zb3J0Q29sSWR4LApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9leGVjdXRv ci9NYWtlZmlsZQppbmRleCAxMTExOGQwY2UwMi4uNjZiNjJmY2E5MjEgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL01h a2VmaWxlCkBAIC0xNSw2ICsxNSw3IEBAIGluY2x1ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9NYWtl ZmlsZS5nbG9iYWwKIE9CSlMgPSBcCiAJZXhlY0FtaS5vIFwKIAlleGVjQXN5bmMubyBcCisJZXhl Y0FwcGVuZC5vIFwKIAlleGVjQ3VycmVudC5vIFwKIAlleGVjRXhwci5vIFwKIAlleGVjRXhwcklu dGVycC5vIFwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNBbWkuYyBiL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNBbWkuYwppbmRleCAxZDBlOGFkNTdiNC4uNWM4OTcwNDhi YTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNBbWkuYworKysgYi9zcmMv YmFja2VuZC9leGVjdXRvci9leGVjQW1pLmMKQEAgLTUzNyw3ICs1MzcsNyBAQCBFeGVjU3VwcG9y dHNCYWNrd2FyZFNjYW4oUGxhbiAqbm9kZSkKIAkJCQlpZiAoKChBcHBlbmQgKikgbm9kZSktPm5h c3luY3BsYW5zID4gMCkKIAkJCQkJcmV0dXJuIGZhbHNlOwogCi0JCQkJZm9yZWFjaChsLCAoKEFw cGVuZCAqKSBub2RlKS0+YXBwZW5kcGxhbnMpCisJCQkJZm9yZWFjaChsLCAoKEFwcGVuZCAqKSBu b2RlKS0+YXAuc3VicGxhbnMpCiAJCQkJewogCQkJCQlpZiAoIUV4ZWNTdXBwb3J0c0JhY2t3YXJk U2NhbigoUGxhbiAqKSBsZmlyc3QobCkpKQogCQkJCQkJcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FwcGVuZC5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0 b3IvZXhlY0FwcGVuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4x ZGRmNzE3Y2Y5NQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNB cHBlbmQuYwpAQCAtMCwwICsxLDQxMCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZXhl Y0FwcGVuZC5jCisgKgkgIFRoaXMgY29kZSBwcm92aWRlcyBzdXBwb3J0IGZ1bmN0aW9ucyBmb3Ig ZXhlY3V0aW5nIE1lcmdlQXBwZW5kIGFuZCBBcHBlbmQKKyAqCSAgbm9kZXMuCisgKgorICogUG9y dGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3Bt ZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhl IFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJ ICBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjQXBwZW5kLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY3V0 b3IuaCIKKyNpbmNsdWRlICJleGVjdXRvci9leGVjQXBwZW5kLmgiCisjaW5jbHVkZSAiZXhlY3V0 b3IvZXhlY0FzeW5jLmgiCisjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5oIgorI2lu Y2x1ZGUgInN0b3JhZ2UvbGF0Y2guaCIKKyNpbmNsdWRlICJzdG9yYWdlL3dhaXRldmVudHNldC5o IgorI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorCisjZGVmaW5lIEVWRU5UX0JVRkZFUl9TSVpFCQkJ MTYKKworLyogIEJlZ2luIGFsbCBvZiB0aGUgc3Vic2NhbnMgb2YgYW4gQXBwZW5kZXIgbm9kZS4g Ki8KK3ZvaWQKK0V4ZWNJbml0QXBwZW5kZXIoQXBwZW5kZXJTdGF0ZSAqIHN0YXRlLAorCQkJCSBB cHBlbmRlciAqIG5vZGUsCisJCQkJIEVTdGF0ZSAqZXN0YXRlLAorCQkJCSBpbnQgZWZsYWdzLAor CQkJCSBpbnQgZmlyc3RfcGFydGlhbF9wbGFuLAorCQkJCSBpbnQgKmZpcnN0X3ZhbGlkX3BhcnRp YWxfcGxhbikKK3sKKwlQbGFuU3RhdGUgKiphcHBlbmRwbGFuc3RhdGVzOworCWNvbnN0IFR1cGxl VGFibGVTbG90T3BzICphcHBlbmRvcHM7CisJQml0bWFwc2V0ICAqdmFsaWRzdWJwbGFuczsKKwlC aXRtYXBzZXQgICphc3luY3BsYW5zOworCWludAkJCW5wbGFuczsKKwlpbnQJCQluYXN5bmNwbGFu czsKKwlpbnQJCQlmaXJzdHZhbGlkOworCWludAkJCWksCisJCQkJajsKKworCS8qIElmIHJ1bi10 aW1lIHBhcnRpdGlvbiBwcnVuaW5nIGlzIGVuYWJsZWQsIHRoZW4gc2V0IHRoYXQgdXAgbm93ICov CisJaWYgKG5vZGUtPnBhcnRfcHJ1bmVfaW5kZXggPj0gMCkKKwl7CisJCVBhcnRpdGlvblBydW5l U3RhdGUgKnBydW5lc3RhdGU7CisKKwkJLyoKKwkJICogU2V0IHVwIHBydW5pbmcgZGF0YSBzdHJ1 Y3R1cmUuICBUaGlzIGFsc28gaW5pdGlhbGl6ZXMgdGhlIHNldCBvZgorCQkgKiBzdWJwbGFucyB0 byBpbml0aWFsaXplICh2YWxpZHN1YnBsYW5zKSBieSB0YWtpbmcgaW50byBhY2NvdW50IHRoZQor CQkgKiByZXN1bHQgb2YgcGVyZm9ybWluZyBpbml0aWFsIHBydW5pbmcgaWYgYW55LgorCQkgKi8K KwkJcHJ1bmVzdGF0ZSA9IEV4ZWNJbml0UGFydGl0aW9uRXhlY1BydW5pbmcoJnN0YXRlLT5wcywK KwkJCQkJCQkJCQkJCSAgbGlzdF9sZW5ndGgobm9kZS0+c3VicGxhbnMpLAorCQkJCQkJCQkJCQkJ ICBub2RlLT5wYXJ0X3BydW5lX2luZGV4LAorCQkJCQkJCQkJCQkJICBub2RlLT5hcHByZWxpZHMs CisJCQkJCQkJCQkJCQkgICZ2YWxpZHN1YnBsYW5zKTsKKwkJc3RhdGUtPnBydW5lX3N0YXRlID0g cHJ1bmVzdGF0ZTsKKwkJbnBsYW5zID0gYm1zX251bV9tZW1iZXJzKHZhbGlkc3VicGxhbnMpOwor CisJCS8qCisJCSAqIFdoZW4gbm8gcnVuLXRpbWUgcHJ1bmluZyBpcyByZXF1aXJlZCBhbmQgdGhl cmUncyBhdCBsZWFzdCBvbmUKKwkJICogc3VicGxhbiwgd2UgY2FuIGZpbGwgYXNfdmFsaWRfc3Vi cGxhbnMgaW1tZWRpYXRlbHksIHByZXZlbnRpbmcKKwkJICogbGF0ZXIgY2FsbHMgdG8gRXhlY0Zp bmRNYXRjaGluZ1N1YlBsYW5zLgorCQkgKi8KKwkJaWYgKCFwcnVuZXN0YXRlLT5kb19leGVjX3By dW5lICYmIG5wbGFucyA+IDApCisJCXsKKwkJCXN0YXRlLT52YWxpZF9zdWJwbGFucyA9IGJtc19h ZGRfcmFuZ2UoTlVMTCwgMCwgbnBsYW5zIC0gMSk7CisJCQlzdGF0ZS0+dmFsaWRfc3VicGxhbnNf aWRlbnRpZmllZCA9IHRydWU7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJbnBsYW5zID0gbGlzdF9s ZW5ndGgobm9kZS0+c3VicGxhbnMpOworCisJCS8qCisJCSAqIFdoZW4gcnVuLXRpbWUgcGFydGl0 aW9uIHBydW5pbmcgaXMgbm90IGVuYWJsZWQgd2UgY2FuIGp1c3QgbWFyayBhbGwKKwkJICogc3Vi cGxhbnMgYXMgdmFsaWQ7IHRoZXkgbXVzdCBhbHNvIGFsbCBiZSBpbml0aWFsaXplZC4KKwkJICov CisJCUFzc2VydChucGxhbnMgPiAwKTsKKwkJc3RhdGUtPnZhbGlkX3N1YnBsYW5zID0gdmFsaWRz dWJwbGFucyA9CisJCQlibXNfYWRkX3JhbmdlKE5VTEwsIDAsIG5wbGFucyAtIDEpOworCQlzdGF0 ZS0+dmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCA9IHRydWU7CisJCXN0YXRlLT5wcnVuZV9zdGF0 ZSA9IE5VTEw7CisJfQorCisJYXBwZW5kcGxhbnN0YXRlcyA9IHBhbGxvYzBfYXJyYXkoUGxhblN0 YXRlICosIG5wbGFucyk7CisKKwkvKgorCSAqIGNhbGwgRXhlY0luaXROb2RlIG9uIGVhY2ggb2Yg dGhlIHZhbGlkIHBsYW5zIHRvIGJlIGV4ZWN1dGVkIGFuZCBzYXZlCisJICogdGhlIHJlc3VsdHMg aW50byB0aGUgYXBwZW5kcGxhbnN0YXRlcyBhcnJheS4KKwkgKgorCSAqIFdoaWxlIGF0IGl0LCBm aW5kIG91dCB0aGUgZmlyc3QgdmFsaWQgcGFydGlhbCBwbGFuLgorCSAqLworCWogPSAwOworCWFz eW5jcGxhbnMgPSBOVUxMOworCW5hc3luY3BsYW5zID0gMDsKKwlmaXJzdHZhbGlkID0gbnBsYW5z OworCWkgPSAtMTsKKwl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIodmFsaWRzdWJwbGFucywg aSkpID49IDApCisJeworCQlQbGFuCSAgICppbml0Tm9kZSA9IChQbGFuICopIGxpc3RfbnRoKG5v ZGUtPnN1YnBsYW5zLCBpKTsKKworCQkvKgorCQkgKiBSZWNvcmQgYXN5bmMgc3VicGxhbnMuICBX aGVuIGV4ZWN1dGluZyBFdmFsUGxhblF1YWwsIHdlIHRyZWF0IHRoZW0KKwkJICogYXMgc3luYyBv bmVzOyBkb24ndCBkbyB0aGlzIHdoZW4gaW5pdGlhbGl6aW5nIGFuIEV2YWxQbGFuUXVhbCBwbGFu CisJCSAqIHRyZWUuCisJCSAqLworCQlpZiAoaW5pdE5vZGUtPmFzeW5jX2NhcGFibGUgJiYgZXN0 YXRlLT5lc19lcHFfYWN0aXZlID09IE5VTEwpCisJCXsKKwkJCWFzeW5jcGxhbnMgPSBibXNfYWRk X21lbWJlcihhc3luY3BsYW5zLCBqKTsKKwkJCW5hc3luY3BsYW5zKys7CisJCX0KKworCQkvKgor CQkgKiBSZWNvcmQgdGhlIGxvd2VzdCBhcHBlbmRwbGFucyBpbmRleCB3aGljaCBpcyBhIHZhbGlk IHBhcnRpYWwgcGxhbi4KKwkJICovCisJCWlmIChmaXJzdF92YWxpZF9wYXJ0aWFsX3BsYW4gJiYg aSA+PSBmaXJzdF9wYXJ0aWFsX3BsYW4gJiYgaiA8IGZpcnN0dmFsaWQpCisJCQlmaXJzdHZhbGlk ID0gajsKKworCQlhcHBlbmRwbGFuc3RhdGVzW2orK10gPSBFeGVjSW5pdE5vZGUoaW5pdE5vZGUs IGVzdGF0ZSwgZWZsYWdzKTsKKwl9CisKKwlpZiAoZmlyc3RfdmFsaWRfcGFydGlhbF9wbGFuKQor CQkqZmlyc3RfdmFsaWRfcGFydGlhbF9wbGFuID0gZmlyc3R2YWxpZDsKKworCXN0YXRlLT5wbGFu cyA9IGFwcGVuZHBsYW5zdGF0ZXM7CisJc3RhdGUtPm5wbGFucyA9IG5wbGFuczsKKworCS8qCisJ ICogSW5pdGlhbGl6ZSBBcHBlbmQncyByZXN1bHQgdHVwbGUgdHlwZSBhbmQgc2xvdC4gIElmIHRo ZSBjaGlsZCBwbGFucyBhbGwKKwkgKiBwcm9kdWNlIHRoZSBzYW1lIGZpeGVkIHNsb3QgdHlwZSwg d2UgY2FuIHVzZSB0aGF0IHNsb3QgdHlwZTsgb3RoZXJ3aXNlCisJICogbWFrZSBhIHZpcnR1YWwg c2xvdC4gIChOb3RlIHRoYXQgdGhlIHJlc3VsdCBzbG90IGl0c2VsZiBpcyB1c2VkIG9ubHkgdG8K KwkgKiByZXR1cm4gYSBudWxsIHR1cGxlIGF0IGVuZCBvZiBleGVjdXRpb247IHJlYWwgdHVwbGVz IGFyZSByZXR1cm5lZCB0bworCSAqIHRoZSBjYWxsZXIgaW4gdGhlIGNoaWxkcmVuJ3Mgb3duIHJl c3VsdCBzbG90cy4gIFdoYXQgd2UgYXJlIGRvaW5nIGhlcmUKKwkgKiBpcyBhbGxvd2luZyB0aGUg cGFyZW50IHBsYW4gbm9kZSB0byBvcHRpbWl6ZSBpZiB0aGUgQXBwZW5kIHdpbGwgcmV0dXJuCisJ ICogb25seSBvbmUga2luZCBvZiBzbG90LikKKwkgKi8KKwlhcHBlbmRvcHMgPSBFeGVjR2V0Q29t bW9uU2xvdE9wcyhhcHBlbmRwbGFuc3RhdGVzLCBqKTsKKwlpZiAoYXBwZW5kb3BzICE9IE5VTEwp CisJeworCQlFeGVjSW5pdFJlc3VsdFR1cGxlU2xvdFRMKCZzdGF0ZS0+cHMsIGFwcGVuZG9wcyk7 CisJfQorCWVsc2UKKwl7CisJCUV4ZWNJbml0UmVzdWx0VHVwbGVTbG90VEwoJnN0YXRlLT5wcywg JlRUU09wc1ZpcnR1YWwpOworCQkvKiBzaG93IHRoYXQgdGhlIG91dHB1dCBzbG90IHR5cGUgaXMg bm90IGZpeGVkICovCisJCXN0YXRlLT5wcy5yZXN1bHRvcHNzZXQgPSB0cnVlOworCQlzdGF0ZS0+ cHMucmVzdWx0b3BzZml4ZWQgPSBmYWxzZTsKKwl9CisKKwkvKiBJbml0aWFsaXplIGFzeW5jIHN0 YXRlICovCisJc3RhdGUtPmFzeW5jcGxhbnMgPSBhc3luY3BsYW5zOworCXN0YXRlLT5uYXN5bmNw bGFucyA9IG5hc3luY3BsYW5zOworCXN0YXRlLT5hc3luY3JlcXVlc3RzID0gTlVMTDsKKwlzdGF0 ZS0+YXN5bmNyZXN1bHRzID0gTlVMTDsKKwlzdGF0ZS0+bmVlZHJlcXVlc3QgPSBOVUxMOworCXN0 YXRlLT5ldmVudHNldCA9IE5VTEw7CisJc3RhdGUtPnZhbGlkX2FzeW5jcGxhbnMgPSBOVUxMOwor CisJaWYgKG5hc3luY3BsYW5zID4gMCkKKwl7CisJCXN0YXRlLT5hc3luY3JlcXVlc3RzID0gKEFz eW5jUmVxdWVzdCAqKikKKwkJCXBhbGxvYzAobnBsYW5zICogc2l6ZW9mKEFzeW5jUmVxdWVzdCAq KSk7CisKKwkJaSA9IC0xOworCQl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIoYXN5bmNwbGFu cywgaSkpID49IDApCisJCXsKKwkJCUFzeW5jUmVxdWVzdCAqYXJlcTsKKworCQkJYXJlcSA9IHBh bGxvY19vYmplY3QoQXN5bmNSZXF1ZXN0KTsKKwkJCWFyZXEtPnJlcXVlc3RvciA9IChQbGFuU3Rh dGUgKikgc3RhdGU7CisJCQlhcmVxLT5yZXF1ZXN0ZWUgPSBhcHBlbmRwbGFuc3RhdGVzW2ldOwor CQkJYXJlcS0+cmVxdWVzdF9pbmRleCA9IGk7CisJCQlhcmVxLT5jYWxsYmFja19wZW5kaW5nID0g ZmFsc2U7CisJCQlhcmVxLT5yZXF1ZXN0X2NvbXBsZXRlID0gZmFsc2U7CisJCQlhcmVxLT5yZXN1 bHQgPSBOVUxMOworCisJCQlzdGF0ZS0+YXN5bmNyZXF1ZXN0c1tpXSA9IGFyZXE7CisJCX0KKwor CQkvKgorCQkgKiBBcHBlbmRTdGF0ZSBhbmQgTWVyZ2VBcHBlbmRTdGF0ZSBoYXZlIHNsaWdodGx5 IGRpZmZlcmVudCBhbGxvY2F0aW9uCisJCSAqIHNpemVzIGZvciBhc3luY3Jlc3VsdHMgaW4gdGhl IG9yaWdpbmFsIGNvZGUsIGJ1dCB3ZSB1bmlmeSB0byB0aGUKKwkJICogbGFyZ2VyIHJlcXVpcmVt ZW50IG9yIHNwZWNpZmljIG5wbGFucyBpZiByZXF1aXJlZC4KKwkJICovCisJCXN0YXRlLT5hc3lu Y3Jlc3VsdHMgPSAoVHVwbGVUYWJsZVNsb3QgKiopCisJCQlwYWxsb2MwKG5wbGFucyAqIHNpemVv ZihUdXBsZVRhYmxlU2xvdCAqKSk7CisJfQorCisJLyoKKwkgKiBNaXNjZWxsYW5lb3VzIGluaXRp YWxpemF0aW9uCisJICovCisJc3RhdGUtPnBzLnBzX1Byb2pJbmZvID0gTlVMTDsKK30KKwordm9p ZAorRXhlY1JlU2NhbkFwcGVuZGVyKEFwcGVuZGVyU3RhdGUgKiBub2RlKQoreworCWludAkJCWk7 CisJaW50CQkJbmFzeW5jcGxhbnMgPSBub2RlLT5uYXN5bmNwbGFuczsKKworCS8qCisJICogSWYg YW55IFBBUkFNX0VYRUMgUGFyYW1zIHVzZWQgaW4gcHJ1bmluZyBleHByZXNzaW9ucyBoYXZlIGNo YW5nZWQsIHRoZW4KKwkgKiB3ZSdkIGJldHRlciB1bnNldCB0aGUgdmFsaWQgc3VicGxhbnMgc28g dGhhdCB0aGV5IGFyZSByZXNlbGVjdGVkIGZvcgorCSAqIHRoZSBuZXcgcGFyYW1ldGVyIHZhbHVl cy4KKwkgKi8KKwlpZiAobm9kZS0+cHJ1bmVfc3RhdGUgJiYKKwkJYm1zX292ZXJsYXAobm9kZS0+ cHMuY2hnUGFyYW0sCisJCQkJCW5vZGUtPnBydW5lX3N0YXRlLT5leGVjcGFyYW1pZHMpKQorCXsK KwkJbm9kZS0+dmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCA9IGZhbHNlOworCQlibXNfZnJlZShu b2RlLT52YWxpZF9zdWJwbGFucyk7CisJCW5vZGUtPnZhbGlkX3N1YnBsYW5zID0gTlVMTDsKKwkJ Ym1zX2ZyZWUobm9kZS0+dmFsaWRfYXN5bmNwbGFucyk7CisJCW5vZGUtPnZhbGlkX2FzeW5jcGxh bnMgPSBOVUxMOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBub2RlLT5ucGxhbnM7IGkrKykKKwl7 CisJCVBsYW5TdGF0ZSAgKnN1Ym5vZGUgPSBub2RlLT5wbGFuc1tpXTsKKworCQkvKgorCQkgKiBF eGVjUmVTY2FuIGRvZXNuJ3Qga25vdyBhYm91dCBteSBzdWJwbGFucywgc28gSSBoYXZlIHRvIGRv CisJCSAqIGNoYW5nZWQtcGFyYW1ldGVyIHNpZ25hbGluZyBteXNlbGYuCisJCSAqLworCQlpZiAo bm9kZS0+cHMuY2hnUGFyYW0gIT0gTlVMTCkKKwkJCVVwZGF0ZUNoYW5nZWRQYXJhbVNldChzdWJu b2RlLCBub2RlLT5wcy5jaGdQYXJhbSk7CisKKwkJLyoKKwkJICogSWYgY2hnUGFyYW0gb2Ygc3Vi bm9kZSBpcyBub3QgbnVsbCB0aGVuIHBsYW4gd2lsbCBiZSByZS1zY2FubmVkIGJ5CisJCSAqIGZp cnN0IEV4ZWNQcm9jTm9kZS4KKwkJICovCisJCWlmIChzdWJub2RlLT5jaGdQYXJhbSA9PSBOVUxM KQorCQkJRXhlY1JlU2NhbihzdWJub2RlKTsKKwl9CisKKwkvKiBSZXNldCBhc3luYyBzdGF0ZSAq LworCWlmIChuYXN5bmNwbGFucyA+IDApCisJeworCQlpID0gLTE7CisJCXdoaWxlICgoaSA9IGJt c19uZXh0X21lbWJlcihub2RlLT5hc3luY3BsYW5zLCBpKSkgPj0gMCkKKwkJeworCQkJQXN5bmNS ZXF1ZXN0ICphcmVxID0gbm9kZS0+YXN5bmNyZXF1ZXN0c1tpXTsKKworCQkJYXJlcS0+Y2FsbGJh Y2tfcGVuZGluZyA9IGZhbHNlOworCQkJYXJlcS0+cmVxdWVzdF9jb21wbGV0ZSA9IGZhbHNlOwor CQkJYXJlcS0+cmVzdWx0ID0gTlVMTDsKKwkJfQorCisJCWJtc19mcmVlKG5vZGUtPm5lZWRyZXF1 ZXN0KTsKKwkJbm9kZS0+bmVlZHJlcXVlc3QgPSBOVUxMOworCX0KK30KKworLyogIFdhaXQgb3Ig cG9sbCBmb3IgZmlsZSBkZXNjcmlwdG9yIGV2ZW50cyBhbmQgZmlyZSBjYWxsYmFja3MuICovCit2 b2lkCitFeGVjQXBwZW5kZXJBc3luY0V2ZW50V2FpdChBcHBlbmRlclN0YXRlICogbm9kZSwgaW50 IHRpbWVvdXQsIHVpbnQzMiB3YWl0X2V2ZW50X2luZm8pCit7CisJaW50CQkJbmV2ZW50cyA9IG5v ZGUtPm5hc3luY3BsYW5zICsgMjsJLyogb25lIGZvciBQTSBkZWF0aCBhbmQKKwkJCQkJCQkJCQkJ CQkgKiBvbmUgZm9yIGxhdGNoICovCisJaW50CQkJbm9jY3VycmVkOworCWludAkJCWk7CisJV2Fp dEV2ZW50CW9jY3VycmVkX2V2ZW50W0VWRU5UX0JVRkZFUl9TSVpFXTsKKworCUFzc2VydChub2Rl LT5ldmVudHNldCA9PSBOVUxMKTsKKworCW5vZGUtPmV2ZW50c2V0ID0gQ3JlYXRlV2FpdEV2ZW50 U2V0KEN1cnJlbnRSZXNvdXJjZU93bmVyLCBuZXZlbnRzKTsKKwlBZGRXYWl0RXZlbnRUb1NldChu b2RlLT5ldmVudHNldCwgV0xfRVhJVF9PTl9QTV9ERUFUSCwgUEdJTlZBTElEX1NPQ0tFVCwKKwkJ CQkJICBOVUxMLCBOVUxMKTsKKworCS8qIEdpdmUgZWFjaCB3YWl0aW5nIHN1YnBsYW4gYSBjaGFu Y2UgdG8gYWRkIGFuIGV2ZW50LiAqLworCWkgPSAtMTsKKwl3aGlsZSAoKGkgPSBibXNfbmV4dF9t ZW1iZXIobm9kZS0+YXN5bmNwbGFucywgaSkpID49IDApCisJeworCQlBc3luY1JlcXVlc3QgKmFy ZXEgPSBub2RlLT5hc3luY3JlcXVlc3RzW2ldOworCisJCWlmIChhcmVxLT5jYWxsYmFja19wZW5k aW5nKQorCQkJRXhlY0FzeW5jQ29uZmlndXJlV2FpdChhcmVxKTsKKwl9CisKKwkvKgorCSAqIE5v IG5lZWQgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZyBpZiBub25lIG9mIHRoZSBzdWJwbGFucyBjb25m aWd1cmVkIGFueQorCSAqIGV2ZW50cy4KKwkgKi8KKwlpZiAoR2V0TnVtUmVnaXN0ZXJlZFdhaXRF dmVudHMobm9kZS0+ZXZlbnRzZXQpID09IDEpCisJeworCQlGcmVlV2FpdEV2ZW50U2V0KG5vZGUt PmV2ZW50c2V0KTsKKwkJbm9kZS0+ZXZlbnRzZXQgPSBOVUxMOworCQlyZXR1cm47CisJfQorCisJ LyoKKwkgKiBBZGQgdGhlIHByb2Nlc3MgbGF0Y2ggdG8gdGhlIHNldCwgc28gdGhhdCB3ZSB3YWtl IHVwIHRvIHByb2Nlc3MgdGhlCisJICogc3RhbmRhcmQgaW50ZXJydXB0cyB3aXRoIENIRUNLX0ZP Ul9JTlRFUlJVUFRTKCkuCisJICoKKwkgKiBOT1RFOiBGb3IgaGlzdG9yaWNhbCByZWFzb25zLCBp dCdzIGltcG9ydGFudCB0aGF0IHRoaXMgaXMgYWRkZWQgdG8gdGhlCisJICogV2FpdEV2ZW50U2V0 IGFmdGVyIHRoZSBFeGVjQXN5bmNDb25maWd1cmVXYWl0KCkgY2FsbHMuICBOYW1lbHksCisJICog cG9zdGdyZXNfZmR3IGNhbGxzICJHZXROdW1SZWdpc3RlcmVkV2FpdEV2ZW50cyhzZXQpID09IDEi IHRvIGNoZWNrIGlmCisJICogYW55IG90aGVyIGV2ZW50cyBhcmUgaW4gdGhlIHNldC4gIFRoYXQn cyBhIHBvb3IgZGVzaWduLCBpdCdzCisJICogcXVlc3Rpb25hYmxlIGZvciBwb3N0Z3Jlc19mZHcg dG8gYmUgZG9pbmcgdGhhdCBpbiB0aGUgZmlyc3QgcGxhY2UsIGJ1dAorCSAqIHdlIGNhbm5vdCBj aGFuZ2UgaXQgbm93LiAgVGhlIHBhdHRlcm4gaGFzIHBvc3NpYmx5IGJlZW4gY29waWVkIHRvIG90 aGVyCisJICogZXh0ZW5zaW9ucyB0b28uCisJICovCisJQWRkV2FpdEV2ZW50VG9TZXQobm9kZS0+ ZXZlbnRzZXQsIFdMX0xBVENIX1NFVCwgUEdJTlZBTElEX1NPQ0tFVCwKKwkJCQkJICBNeUxhdGNo LCBOVUxMKTsKKworCS8qIFJldHVybiBhdCBtb3N0IEVWRU5UX0JVRkZFUl9TSVpFIGV2ZW50cyBp biBvbmUgY2FsbC4gKi8KKwlpZiAobmV2ZW50cyA+IEVWRU5UX0JVRkZFUl9TSVpFKQorCQluZXZl bnRzID0gRVZFTlRfQlVGRkVSX1NJWkU7CisKKwkvKiBXYWl0IHVudGlsIGF0IGxlYXN0IG9uZSBl dmVudCBvY2N1cnMuICovCisJbm9jY3VycmVkID0gV2FpdEV2ZW50U2V0V2FpdChub2RlLT5ldmVu dHNldCwgdGltZW91dCwgb2NjdXJyZWRfZXZlbnQsCisJCQkJCQkJCSBuZXZlbnRzLCB3YWl0X2V2 ZW50X2luZm8pOworCisKKwlGcmVlV2FpdEV2ZW50U2V0KG5vZGUtPmV2ZW50c2V0KTsKKwlub2Rl LT5ldmVudHNldCA9IE5VTEw7CisJaWYgKG5vY2N1cnJlZCA9PSAwKQorCQlyZXR1cm47CisKKwor CS8qIERlbGl2ZXIgbm90aWZpY2F0aW9ucy4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgbm9jY3VycmVk OyBpKyspCisJeworCQlXYWl0RXZlbnQgICp3ID0gJm9jY3VycmVkX2V2ZW50W2ldOworCisJCS8q CisJCSAqIEVhY2ggd2FpdGluZyBzdWJwbGFuIHNob3VsZCBoYXZlIHJlZ2lzdGVyZWQgaXRzIHdh aXQgZXZlbnQgd2l0aAorCQkgKiB1c2VyX2RhdGEgcG9pbnRpbmcgYmFjayB0byBpdHMgQXN5bmNS ZXF1ZXN0LgorCQkgKi8KKwkJaWYgKCh3LT5ldmVudHMgJiBXTF9TT0NLRVRfUkVBREFCTEUpICE9 IDApCisJCXsKKwkJCUFzeW5jUmVxdWVzdCAqYXJlcSA9IChBc3luY1JlcXVlc3QgKikgdy0+dXNl cl9kYXRhOworCisJCQlpZiAoYXJlcS0+Y2FsbGJhY2tfcGVuZGluZykKKwkJCXsKKwkJCQkvKgor CQkJCSAqIE1hcmsgaXQgYXMgbm8gbG9uZ2VyIG5lZWRpbmcgYSBjYWxsYmFjay4gIFdlIG11c3Qg ZG8gdGhpcworCQkJCSAqIGJlZm9yZSBkaXNwYXRjaGluZyB0aGUgY2FsbGJhY2sgaW4gY2FzZSB0 aGUgY2FsbGJhY2sgcmVzZXRzCisJCQkJICogdGhlIGZsYWcuCisJCQkJICovCisJCQkJYXJlcS0+ Y2FsbGJhY2tfcGVuZGluZyA9IGZhbHNlOworCisJCQkJLyogRG8gdGhlIGFjdHVhbCB3b3JrLiAq LworCQkJCUV4ZWNBc3luY05vdGlmeShhcmVxKTsKKwkJCX0KKwkJfQorCisJCS8qIEhhbmRsZSBz dGFuZGFyZCBpbnRlcnJ1cHRzICovCisJCWlmICgody0+ZXZlbnRzICYgV0xfTEFUQ0hfU0VUKSAh PSAwKQorCQl7CisJCQlSZXNldExhdGNoKE15TGF0Y2gpOworCQkJQ0hFQ0tfRk9SX0lOVEVSUlVQ VFMoKTsKKwkJfQorCX0KK30KKworLyogIEJlZ2luIGV4ZWN1dGluZyBhc3luYy1jYXBhYmxlIHN1 YnBsYW5zLiAqLwordm9pZAorRXhlY0FwcGVuZGVyQXN5bmNCZWdpbihBcHBlbmRlclN0YXRlICog bm9kZSkKK3sKKwlpbnQJCQlpOworCisJLyogQmFja3dhcmQgc2NhbiBpcyBub3Qgc3VwcG9ydGVk IGJ5IGFzeW5jLWF3YXJlIEFwcGVuZHMuICovCisJQXNzZXJ0KFNjYW5EaXJlY3Rpb25Jc0Zvcndh cmQobm9kZS0+cHMuc3RhdGUtPmVzX2RpcmVjdGlvbikpOworCisJLyogV2Ugc2hvdWxkIG5ldmVy IGJlIGNhbGxlZCB3aGVuIHRoZXJlIGFyZSBubyBzdWJwbGFucyAqLworCUFzc2VydChub2RlLT5u cGxhbnMgPiAwKTsKKworCS8qIFdlIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgd2hlbiB0aGVyZSBh cmUgbm8gYXN5bmMgc3VicGxhbnMuICovCisJQXNzZXJ0KG5vZGUtPm5hc3luY3BsYW5zID4gMCk7 CisKKwkvKiBNYWtlIGEgcmVxdWVzdCBmb3IgZWFjaCBvZiB0aGUgdmFsaWQgYXN5bmMgc3VicGxh bnMuICovCisJaSA9IC0xOworCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihub2RlLT52YWxp ZF9hc3luY3BsYW5zLCBpKSkgPj0gMCkKKwl7CisJCUFzeW5jUmVxdWVzdCAqYXJlcSA9IG5vZGUt PmFzeW5jcmVxdWVzdHNbaV07CisKKwkJQXNzZXJ0KGFyZXEtPnJlcXVlc3RfaW5kZXggPT0gaSk7 CisJCUFzc2VydCghYXJlcS0+Y2FsbGJhY2tfcGVuZGluZyk7CisKKwkJLyogRG8gdGhlIGFjdHVh bCB3b3JrLiAqLworCQlFeGVjQXN5bmNSZXF1ZXN0KGFyZXEpOworCX0KK30KKworLyogIFNodXRz IGRvd24gdGhlIHN1YnBsYW5zIG9mIGFuIEFwcGVuZGVyIG5vZGUuICovCit2b2lkCitFeGVjRW5k QXBwZW5kZXIoQXBwZW5kZXJTdGF0ZSAqIG5vZGUpCit7CisJUGxhblN0YXRlICoqc3VicGxhbnM7 CisJaW50CQkJbnBsYW5zOworCWludAkJCWk7CisKKwkvKgorCSAqIGdldCBpbmZvcm1hdGlvbiBm cm9tIHRoZSBub2RlCisJICovCisJc3VicGxhbnMgPSBub2RlLT5wbGFuczsKKwlucGxhbnMgPSBu b2RlLT5ucGxhbnM7CisKKwkvKgorCSAqIHNodXQgZG93biBlYWNoIG9mIHRoZSBzdWJzY2Fucwor CSAqLworCWZvciAoaSA9IDA7IGkgPCBucGxhbnM7IGkrKykKKwkJRXhlY0VuZE5vZGUoc3VicGxh bnNbaV0pOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0N1cnJlbnQu YyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNDdXJyZW50LmMKaW5kZXggM2JmZGMwMjMwZmYu LmU4Y2YyZWFkOGE4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjQ3VycmVu dC5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNDdXJyZW50LmMKQEAgLTM3NSw5ICsz NzUsOSBAQCBzZWFyY2hfcGxhbl90cmVlKFBsYW5TdGF0ZSAqbm9kZSwgT2lkIHRhYmxlX29pZCwK IAkJCQlBcHBlbmRTdGF0ZSAqYXN0YXRlID0gKEFwcGVuZFN0YXRlICopIG5vZGU7CiAJCQkJaW50 CQkJaTsKIAotCQkJCWZvciAoaSA9IDA7IGkgPCBhc3RhdGUtPmFzX25wbGFuczsgaSsrKQorCQkJ CWZvciAoaSA9IDA7IGkgPCBhc3RhdGUtPmFzLm5wbGFuczsgaSsrKQogCQkJCXsKLQkJCQkJU2Nh blN0YXRlICAqZWxlbSA9IHNlYXJjaF9wbGFuX3RyZWUoYXN0YXRlLT5hcHBlbmRwbGFuc1tpXSwK KwkJCQkJU2NhblN0YXRlICAqZWxlbSA9IHNlYXJjaF9wbGFuX3RyZWUoYXN0YXRlLT5hcy5wbGFu c1tpXSwKIAkJCQkJCQkJCQkJCQkJdGFibGVfb2lkLAogCQkJCQkJCQkJCQkJCQlwZW5kaW5nX3Jl c2Nhbik7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQcm9jbm9kZS5j IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1Byb2Nub2RlLmMKaW5kZXggZjVmOWNmYmVlYWQu LjNlYjFkZTFjZDMwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUHJvY25v ZGUuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUHJvY25vZGUuYwpAQCAtOTEwLDgg KzkxMCw4IEBAIEV4ZWNTZXRUdXBsZUJvdW5kKGludDY0IHR1cGxlc19uZWVkZWQsIFBsYW5TdGF0 ZSAqY2hpbGRfbm9kZSkKIAkJQXBwZW5kU3RhdGUgKmFTdGF0ZSA9IChBcHBlbmRTdGF0ZSAqKSBj aGlsZF9ub2RlOwogCQlpbnQJCQlpOwogCi0JCWZvciAoaSA9IDA7IGkgPCBhU3RhdGUtPmFzX25w bGFuczsgaSsrKQotCQkJRXhlY1NldFR1cGxlQm91bmQodHVwbGVzX25lZWRlZCwgYVN0YXRlLT5h cHBlbmRwbGFuc1tpXSk7CisJCWZvciAoaSA9IDA7IGkgPCBhU3RhdGUtPmFzLm5wbGFuczsgaSsr KQorCQkJRXhlY1NldFR1cGxlQm91bmQodHVwbGVzX25lZWRlZCwgYVN0YXRlLT5hcy5wbGFuc1tp XSk7CiAJfQogCWVsc2UgaWYgKElzQShjaGlsZF9ub2RlLCBNZXJnZUFwcGVuZFN0YXRlKSkKIAl7 CkBAIC05MjMsOCArOTIzLDggQEAgRXhlY1NldFR1cGxlQm91bmQoaW50NjQgdHVwbGVzX25lZWRl ZCwgUGxhblN0YXRlICpjaGlsZF9ub2RlKQogCQlNZXJnZUFwcGVuZFN0YXRlICptYVN0YXRlID0g KE1lcmdlQXBwZW5kU3RhdGUgKikgY2hpbGRfbm9kZTsKIAkJaW50CQkJaTsKIAotCQlmb3IgKGkg PSAwOyBpIDwgbWFTdGF0ZS0+bXNfbnBsYW5zOyBpKyspCi0JCQlFeGVjU2V0VHVwbGVCb3VuZCh0 dXBsZXNfbmVlZGVkLCBtYVN0YXRlLT5tZXJnZXBsYW5zW2ldKTsKKwkJZm9yIChpID0gMDsgaSA8 IG1hU3RhdGUtPm1zLm5wbGFuczsgaSsrKQorCQkJRXhlY1NldFR1cGxlQm91bmQodHVwbGVzX25l ZWRlZCwgbWFTdGF0ZS0+bXMucGxhbnNbaV0pOwogCX0KIAllbHNlIGlmIChJc0EoY2hpbGRfbm9k ZSwgUmVzdWx0U3RhdGUpKQogCXsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL21l c29uLmJ1aWxkIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvbWVzb24uYnVpbGQKaW5kZXggMmNlYTQx Zjg3NzEuLmI1Y2I3MTBhNTlmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9tZXNv bi5idWlsZAorKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9tZXNvbi5idWlsZApAQCAtMyw2ICsz LDcgQEAKIGJhY2tlbmRfc291cmNlcyArPSBmaWxlcygKICAgJ2V4ZWNBbWkuYycsCiAgICdleGVj QXN5bmMuYycsCisgICdleGVjQXBwZW5kLmMnLAogICAnZXhlY0N1cnJlbnQuYycsCiAgICdleGVj RXhwci5jJywKICAgJ2V4ZWNFeHBySW50ZXJwLmMnLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv ZXhlY3V0b3Ivbm9kZUFwcGVuZC5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVuZC5j CmluZGV4IGRmYmM3YjUxMGM0Li41YzM5ZWUyNzVkMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv ZXhlY3V0b3Ivbm9kZUFwcGVuZC5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBcHBl bmQuYwpAQCAtNTcsMTMgKzU3LDEzIEBACiAKICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCisjaW5j bHVkZSAiZXhlY3V0b3IvZXhlY0FwcGVuZC5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWNBc3lu Yy5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uaCIKICNpbmNsdWRlICJleGVj dXRvci9leGVjdXRvci5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL25vZGVBcHBlbmQuaCIKICNpbmNs dWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKLSNpbmNsdWRlICJzdG9yYWdl L2xhdGNoLmgiCiAKIC8qIFNoYXJlZCBzdGF0ZSBmb3IgcGFyYWxsZWwtYXdhcmUgQXBwZW5kLiAq Lwogc3RydWN0IFBhcmFsbGVsQXBwZW5kU3RhdGUKQEAgLTEwOSwxNSArMTA5LDYgQEAgQXBwZW5k U3RhdGUgKgogRXhlY0luaXRBcHBlbmQoQXBwZW5kICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50 IGVmbGFncykKIHsKIAlBcHBlbmRTdGF0ZSAqYXBwZW5kc3RhdGUgPSBtYWtlTm9kZShBcHBlbmRT dGF0ZSk7Ci0JUGxhblN0YXRlICoqYXBwZW5kcGxhbnN0YXRlczsKLQljb25zdCBUdXBsZVRhYmxl U2xvdE9wcyAqYXBwZW5kb3BzOwotCUJpdG1hcHNldCAgKnZhbGlkc3VicGxhbnM7Ci0JQml0bWFw c2V0ICAqYXN5bmNwbGFuczsKLQlpbnQJCQlucGxhbnM7Ci0JaW50CQkJbmFzeW5jcGxhbnM7Ci0J aW50CQkJZmlyc3R2YWxpZDsKLQlpbnQJCQlpLAotCQkJCWo7CiAKIAkvKiBjaGVjayBmb3IgdW5z dXBwb3J0ZWQgZmxhZ3MgKi8KIAlBc3NlcnQoIShlZmxhZ3MgJiBFWEVDX0ZMQUdfTUFSSykpOwpA QCAtMTI1LDE2NyArMTE2LDI3IEBAIEV4ZWNJbml0QXBwZW5kKEFwcGVuZCAqbm9kZSwgRVN0YXRl ICplc3RhdGUsIGludCBlZmxhZ3MpCiAJLyoKIAkgKiBjcmVhdGUgbmV3IEFwcGVuZFN0YXRlIGZv ciBvdXIgYXBwZW5kIG5vZGUKIAkgKi8KLQlhcHBlbmRzdGF0ZS0+cHMucGxhbiA9IChQbGFuICop IG5vZGU7Ci0JYXBwZW5kc3RhdGUtPnBzLnN0YXRlID0gZXN0YXRlOwotCWFwcGVuZHN0YXRlLT5w cy5FeGVjUHJvY05vZGUgPSBFeGVjQXBwZW5kOworCWFwcGVuZHN0YXRlLT5hcy5wcy5wbGFuID0g KFBsYW4gKikgbm9kZTsKKwlhcHBlbmRzdGF0ZS0+YXMucHMuc3RhdGUgPSBlc3RhdGU7CisJYXBw ZW5kc3RhdGUtPmFzLnBzLkV4ZWNQcm9jTm9kZSA9IEV4ZWNBcHBlbmQ7CiAKIAkvKiBMZXQgY2hv b3NlX25leHRfc3VicGxhbl8qIGZ1bmN0aW9uIGhhbmRsZSBzZXR0aW5nIHRoZSBmaXJzdCBzdWJw bGFuICovCiAJYXBwZW5kc3RhdGUtPmFzX3doaWNocGxhbiA9IElOVkFMSURfU1VCUExBTl9JTkRF WDsKIAlhcHBlbmRzdGF0ZS0+YXNfc3luY2RvbmUgPSBmYWxzZTsKIAlhcHBlbmRzdGF0ZS0+YXNf YmVndW4gPSBmYWxzZTsKIAotCS8qIElmIHJ1bi10aW1lIHBhcnRpdGlvbiBwcnVuaW5nIGlzIGVu YWJsZWQsIHRoZW4gc2V0IHRoYXQgdXAgbm93ICovCi0JaWYgKG5vZGUtPnBhcnRfcHJ1bmVfaW5k ZXggPj0gMCkKLQl7Ci0JCVBhcnRpdGlvblBydW5lU3RhdGUgKnBydW5lc3RhdGU7Ci0KLQkJLyoK LQkJICogU2V0IHVwIHBydW5pbmcgZGF0YSBzdHJ1Y3R1cmUuICBUaGlzIGFsc28gaW5pdGlhbGl6 ZXMgdGhlIHNldCBvZgotCQkgKiBzdWJwbGFucyB0byBpbml0aWFsaXplICh2YWxpZHN1YnBsYW5z KSBieSB0YWtpbmcgaW50byBhY2NvdW50IHRoZQotCQkgKiByZXN1bHQgb2YgcGVyZm9ybWluZyBp bml0aWFsIHBydW5pbmcgaWYgYW55LgotCQkgKi8KLQkJcHJ1bmVzdGF0ZSA9IEV4ZWNJbml0UGFy dGl0aW9uRXhlY1BydW5pbmcoJmFwcGVuZHN0YXRlLT5wcywKLQkJCQkJCQkJCQkJCSAgbGlzdF9s ZW5ndGgobm9kZS0+YXBwZW5kcGxhbnMpLAotCQkJCQkJCQkJCQkJICBub2RlLT5wYXJ0X3BydW5l X2luZGV4LAotCQkJCQkJCQkJCQkJICBub2RlLT5hcHByZWxpZHMsCi0JCQkJCQkJCQkJCQkgICZ2 YWxpZHN1YnBsYW5zKTsKLQkJYXBwZW5kc3RhdGUtPmFzX3BydW5lX3N0YXRlID0gcHJ1bmVzdGF0 ZTsKLQkJbnBsYW5zID0gYm1zX251bV9tZW1iZXJzKHZhbGlkc3VicGxhbnMpOwotCi0JCS8qCi0J CSAqIFdoZW4gbm8gcnVuLXRpbWUgcHJ1bmluZyBpcyByZXF1aXJlZCBhbmQgdGhlcmUncyBhdCBs ZWFzdCBvbmUKLQkJICogc3VicGxhbiwgd2UgY2FuIGZpbGwgYXNfdmFsaWRfc3VicGxhbnMgaW1t ZWRpYXRlbHksIHByZXZlbnRpbmcKLQkJICogbGF0ZXIgY2FsbHMgdG8gRXhlY0ZpbmRNYXRjaGlu Z1N1YlBsYW5zLgotCQkgKi8KLQkJaWYgKCFwcnVuZXN0YXRlLT5kb19leGVjX3BydW5lICYmIG5w bGFucyA+IDApCi0JCXsKLQkJCWFwcGVuZHN0YXRlLT5hc192YWxpZF9zdWJwbGFucyA9IGJtc19h ZGRfcmFuZ2UoTlVMTCwgMCwgbnBsYW5zIC0gMSk7Ci0JCQlhcHBlbmRzdGF0ZS0+YXNfdmFsaWRf c3VicGxhbnNfaWRlbnRpZmllZCA9IHRydWU7Ci0JCX0KLQl9Ci0JZWxzZQotCXsKLQkJbnBsYW5z ID0gbGlzdF9sZW5ndGgobm9kZS0+YXBwZW5kcGxhbnMpOwotCi0JCS8qCi0JCSAqIFdoZW4gcnVu LXRpbWUgcGFydGl0aW9uIHBydW5pbmcgaXMgbm90IGVuYWJsZWQgd2UgY2FuIGp1c3QgbWFyayBh bGwKLQkJICogc3VicGxhbnMgYXMgdmFsaWQ7IHRoZXkgbXVzdCBhbHNvIGFsbCBiZSBpbml0aWFs aXplZC4KLQkJICovCi0JCUFzc2VydChucGxhbnMgPiAwKTsKLQkJYXBwZW5kc3RhdGUtPmFzX3Zh bGlkX3N1YnBsYW5zID0gdmFsaWRzdWJwbGFucyA9Ci0JCQlibXNfYWRkX3JhbmdlKE5VTEwsIDAs IG5wbGFucyAtIDEpOwotCQlhcHBlbmRzdGF0ZS0+YXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmll ZCA9IHRydWU7Ci0JCWFwcGVuZHN0YXRlLT5hc19wcnVuZV9zdGF0ZSA9IE5VTEw7Ci0JfQotCi0J YXBwZW5kcGxhbnN0YXRlcyA9IChQbGFuU3RhdGUgKiopIHBhbGxvYyhucGxhbnMgKgotCQkJCQkJ CQkJCQkgc2l6ZW9mKFBsYW5TdGF0ZSAqKSk7Ci0KLQkvKgotCSAqIGNhbGwgRXhlY0luaXROb2Rl IG9uIGVhY2ggb2YgdGhlIHZhbGlkIHBsYW5zIHRvIGJlIGV4ZWN1dGVkIGFuZCBzYXZlCi0JICog dGhlIHJlc3VsdHMgaW50byB0aGUgYXBwZW5kcGxhbnN0YXRlcyBhcnJheS4KLQkgKgotCSAqIFdo aWxlIGF0IGl0LCBmaW5kIG91dCB0aGUgZmlyc3QgdmFsaWQgcGFydGlhbCBwbGFuLgotCSAqLwot CWogPSAwOwotCWFzeW5jcGxhbnMgPSBOVUxMOwotCW5hc3luY3BsYW5zID0gMDsKLQlmaXJzdHZh bGlkID0gbnBsYW5zOwotCWkgPSAtMTsKLQl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIodmFs aWRzdWJwbGFucywgaSkpID49IDApCi0JewotCQlQbGFuCSAgICppbml0Tm9kZSA9IChQbGFuICop IGxpc3RfbnRoKG5vZGUtPmFwcGVuZHBsYW5zLCBpKTsKLQotCQkvKgotCQkgKiBSZWNvcmQgYXN5 bmMgc3VicGxhbnMuICBXaGVuIGV4ZWN1dGluZyBFdmFsUGxhblF1YWwsIHdlIHRyZWF0IHRoZW0K LQkJICogYXMgc3luYyBvbmVzOyBkb24ndCBkbyB0aGlzIHdoZW4gaW5pdGlhbGl6aW5nIGFuIEV2 YWxQbGFuUXVhbCBwbGFuCi0JCSAqIHRyZWUuCi0JCSAqLwotCQlpZiAoaW5pdE5vZGUtPmFzeW5j X2NhcGFibGUgJiYgZXN0YXRlLT5lc19lcHFfYWN0aXZlID09IE5VTEwpCi0JCXsKLQkJCWFzeW5j cGxhbnMgPSBibXNfYWRkX21lbWJlcihhc3luY3BsYW5zLCBqKTsKLQkJCW5hc3luY3BsYW5zKys7 Ci0JCX0KLQotCQkvKgotCQkgKiBSZWNvcmQgdGhlIGxvd2VzdCBhcHBlbmRwbGFucyBpbmRleCB3 aGljaCBpcyBhIHZhbGlkIHBhcnRpYWwgcGxhbi4KLQkJICovCi0JCWlmIChpID49IG5vZGUtPmZp cnN0X3BhcnRpYWxfcGxhbiAmJiBqIDwgZmlyc3R2YWxpZCkKLQkJCWZpcnN0dmFsaWQgPSBqOwot Ci0JCWFwcGVuZHBsYW5zdGF0ZXNbaisrXSA9IEV4ZWNJbml0Tm9kZShpbml0Tm9kZSwgZXN0YXRl LCBlZmxhZ3MpOwotCX0KLQotCWFwcGVuZHN0YXRlLT5hc19maXJzdF9wYXJ0aWFsX3BsYW4gPSBm aXJzdHZhbGlkOwotCWFwcGVuZHN0YXRlLT5hcHBlbmRwbGFucyA9IGFwcGVuZHBsYW5zdGF0ZXM7 Ci0JYXBwZW5kc3RhdGUtPmFzX25wbGFucyA9IG5wbGFuczsKKwkvKiBJbml0aWFsaXplIGNvbW1v biBmaWVsZHMgKi8KKwlFeGVjSW5pdEFwcGVuZGVyKCZhcHBlbmRzdGF0ZS0+YXMsCisJCQkJCSAm bm9kZS0+YXAsCisJCQkJCSBlc3RhdGUsCisJCQkJCSBlZmxhZ3MsCisJCQkJCSBub2RlLT5maXJz dF9wYXJ0aWFsX3BsYW4sCisJCQkJCSAmYXBwZW5kc3RhdGUtPmFzX2ZpcnN0X3BhcnRpYWxfcGxh bik7CiAKLQkvKgotCSAqIEluaXRpYWxpemUgQXBwZW5kJ3MgcmVzdWx0IHR1cGxlIHR5cGUgYW5k IHNsb3QuICBJZiB0aGUgY2hpbGQgcGxhbnMgYWxsCi0JICogcHJvZHVjZSB0aGUgc2FtZSBmaXhl ZCBzbG90IHR5cGUsIHdlIGNhbiB1c2UgdGhhdCBzbG90IHR5cGU7IG90aGVyd2lzZQotCSAqIG1h a2UgYSB2aXJ0dWFsIHNsb3QuICAoTm90ZSB0aGF0IHRoZSByZXN1bHQgc2xvdCBpdHNlbGYgaXMg dXNlZCBvbmx5IHRvCi0JICogcmV0dXJuIGEgbnVsbCB0dXBsZSBhdCBlbmQgb2YgZXhlY3V0aW9u OyByZWFsIHR1cGxlcyBhcmUgcmV0dXJuZWQgdG8KLQkgKiB0aGUgY2FsbGVyIGluIHRoZSBjaGls ZHJlbidzIG93biByZXN1bHQgc2xvdHMuICBXaGF0IHdlIGFyZSBkb2luZyBoZXJlCi0JICogaXMg YWxsb3dpbmcgdGhlIHBhcmVudCBwbGFuIG5vZGUgdG8gb3B0aW1pemUgaWYgdGhlIEFwcGVuZCB3 aWxsIHJldHVybgotCSAqIG9ubHkgb25lIGtpbmQgb2Ygc2xvdC4pCi0JICovCi0JYXBwZW5kb3Bz ID0gRXhlY0dldENvbW1vblNsb3RPcHMoYXBwZW5kcGxhbnN0YXRlcywgaik7Ci0JaWYgKGFwcGVu ZG9wcyAhPSBOVUxMKQotCXsKLQkJRXhlY0luaXRSZXN1bHRUdXBsZVNsb3RUTCgmYXBwZW5kc3Rh dGUtPnBzLCBhcHBlbmRvcHMpOwotCX0KLQllbHNlCi0JewotCQlFeGVjSW5pdFJlc3VsdFR1cGxl U2xvdFRMKCZhcHBlbmRzdGF0ZS0+cHMsICZUVFNPcHNWaXJ0dWFsKTsKLQkJLyogc2hvdyB0aGF0 IHRoZSBvdXRwdXQgc2xvdCB0eXBlIGlzIG5vdCBmaXhlZCAqLwotCQlhcHBlbmRzdGF0ZS0+cHMu cmVzdWx0b3Bzc2V0ID0gdHJ1ZTsKLQkJYXBwZW5kc3RhdGUtPnBzLnJlc3VsdG9wc2ZpeGVkID0g ZmFsc2U7Ci0JfQorCWlmIChhcHBlbmRzdGF0ZS0+YXMubmFzeW5jcGxhbnMgPiAwICYmIGFwcGVu ZHN0YXRlLT5hcy52YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkKQorCQljbGFzc2lmeV9tYXRjaGlu Z19zdWJwbGFucyhhcHBlbmRzdGF0ZSk7CiAKLQkvKiBJbml0aWFsaXplIGFzeW5jIHN0YXRlICov Ci0JYXBwZW5kc3RhdGUtPmFzX2FzeW5jcGxhbnMgPSBhc3luY3BsYW5zOwotCWFwcGVuZHN0YXRl LT5hc19uYXN5bmNwbGFucyA9IG5hc3luY3BsYW5zOwotCWFwcGVuZHN0YXRlLT5hc19hc3luY3Jl cXVlc3RzID0gTlVMTDsKLQlhcHBlbmRzdGF0ZS0+YXNfYXN5bmNyZXN1bHRzID0gTlVMTDsKLQlh cHBlbmRzdGF0ZS0+YXNfbmFzeW5jcmVzdWx0cyA9IDA7CiAJYXBwZW5kc3RhdGUtPmFzX25hc3lu Y3JlbWFpbiA9IDA7Ci0JYXBwZW5kc3RhdGUtPmFzX25lZWRyZXF1ZXN0ID0gTlVMTDsKLQlhcHBl bmRzdGF0ZS0+YXNfZXZlbnRzZXQgPSBOVUxMOwotCWFwcGVuZHN0YXRlLT5hc192YWxpZF9hc3lu Y3BsYW5zID0gTlVMTDsKLQotCWlmIChuYXN5bmNwbGFucyA+IDApCi0JewotCQlhcHBlbmRzdGF0 ZS0+YXNfYXN5bmNyZXF1ZXN0cyA9IChBc3luY1JlcXVlc3QgKiopCi0JCQlwYWxsb2MwKG5wbGFu cyAqIHNpemVvZihBc3luY1JlcXVlc3QgKikpOwotCi0JCWkgPSAtMTsKLQkJd2hpbGUgKChpID0g Ym1zX25leHRfbWVtYmVyKGFzeW5jcGxhbnMsIGkpKSA+PSAwKQotCQl7Ci0JCQlBc3luY1JlcXVl c3QgKmFyZXE7Ci0KLQkJCWFyZXEgPSBwYWxsb2Nfb2JqZWN0KEFzeW5jUmVxdWVzdCk7Ci0JCQlh cmVxLT5yZXF1ZXN0b3IgPSAoUGxhblN0YXRlICopIGFwcGVuZHN0YXRlOwotCQkJYXJlcS0+cmVx dWVzdGVlID0gYXBwZW5kcGxhbnN0YXRlc1tpXTsKLQkJCWFyZXEtPnJlcXVlc3RfaW5kZXggPSBp OwotCQkJYXJlcS0+Y2FsbGJhY2tfcGVuZGluZyA9IGZhbHNlOwotCQkJYXJlcS0+cmVxdWVzdF9j b21wbGV0ZSA9IGZhbHNlOwotCQkJYXJlcS0+cmVzdWx0ID0gTlVMTDsKLQotCQkJYXBwZW5kc3Rh dGUtPmFzX2FzeW5jcmVxdWVzdHNbaV0gPSBhcmVxOwotCQl9Ci0KLQkJYXBwZW5kc3RhdGUtPmFz X2FzeW5jcmVzdWx0cyA9IChUdXBsZVRhYmxlU2xvdCAqKikKLQkJCXBhbGxvYzAobmFzeW5jcGxh bnMgKiBzaXplb2YoVHVwbGVUYWJsZVNsb3QgKikpOwotCi0JCWlmIChhcHBlbmRzdGF0ZS0+YXNf dmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCkKLQkJCWNsYXNzaWZ5X21hdGNoaW5nX3N1YnBsYW5z KGFwcGVuZHN0YXRlKTsKLQl9Ci0KLQkvKgotCSAqIE1pc2NlbGxhbmVvdXMgaW5pdGlhbGl6YXRp b24KLQkgKi8KLQotCWFwcGVuZHN0YXRlLT5wcy5wc19Qcm9qSW5mbyA9IE5VTEw7CiAKIAkvKiBG b3IgcGFyYWxsZWwgcXVlcnksIHRoaXMgd2lsbCBiZSBvdmVycmlkZGVuIGxhdGVyLiAqLwogCWFw cGVuZHN0YXRlLT5jaG9vc2VfbmV4dF9zdWJwbGFuID0gY2hvb3NlX25leHRfc3VicGxhbl9sb2Nh bGx5OwpAQCAtMzE1LDExICsxNjYsMTEgQEAgRXhlY0FwcGVuZChQbGFuU3RhdGUgKnBzdGF0ZSkK IAkJQXNzZXJ0KCFub2RlLT5hc19zeW5jZG9uZSk7CiAKIAkJLyogTm90aGluZyB0byBkbyBpZiB0 aGVyZSBhcmUgbm8gc3VicGxhbnMgKi8KLQkJaWYgKG5vZGUtPmFzX25wbGFucyA9PSAwKQotCQkJ cmV0dXJuIEV4ZWNDbGVhclR1cGxlKG5vZGUtPnBzLnBzX1Jlc3VsdFR1cGxlU2xvdCk7CisJCWlm IChub2RlLT5hcy5ucGxhbnMgPT0gMCkKKwkJCXJldHVybiBFeGVjQ2xlYXJUdXBsZShub2RlLT5h cy5wcy5wc19SZXN1bHRUdXBsZVNsb3QpOwogCiAJCS8qIElmIHRoZXJlIGFyZSBhbnkgYXN5bmMg c3VicGxhbnMsIGJlZ2luIGV4ZWN1dGluZyB0aGVtLiAqLwotCQlpZiAobm9kZS0+YXNfbmFzeW5j cGxhbnMgPiAwKQorCQlpZiAobm9kZS0+YXMubmFzeW5jcGxhbnMgPiAwKQogCQkJRXhlY0FwcGVu ZEFzeW5jQmVnaW4obm9kZSk7CiAKIAkJLyoKQEAgLTMyNywxMSArMTc4LDExIEBAIEV4ZWNBcHBl bmQoUGxhblN0YXRlICpwc3RhdGUpCiAJCSAqIHByb2NlZWRpbmcuCiAJCSAqLwogCQlpZiAoIW5v ZGUtPmNob29zZV9uZXh0X3N1YnBsYW4obm9kZSkgJiYgbm9kZS0+YXNfbmFzeW5jcmVtYWluID09 IDApCi0JCQlyZXR1cm4gRXhlY0NsZWFyVHVwbGUobm9kZS0+cHMucHNfUmVzdWx0VHVwbGVTbG90 KTsKKwkJCXJldHVybiBFeGVjQ2xlYXJUdXBsZShub2RlLT5hcy5wcy5wc19SZXN1bHRUdXBsZVNs b3QpOwogCiAJCUFzc2VydChub2RlLT5hc19zeW5jZG9uZSB8fAogCQkJICAgKG5vZGUtPmFzX3do aWNocGxhbiA+PSAwICYmCi0JCQkJbm9kZS0+YXNfd2hpY2hwbGFuIDwgbm9kZS0+YXNfbnBsYW5z KSk7CisJCQkJbm9kZS0+YXNfd2hpY2hwbGFuIDwgbm9kZS0+YXMubnBsYW5zKSk7CiAKIAkJLyog QW5kIHdlJ3JlIGluaXRpYWxpemVkLiAqLwogCQlub2RlLT5hc19iZWd1biA9IHRydWU7CkBAIC0z NDYsMTkgKzE5NywxOSBAQCBFeGVjQXBwZW5kKFBsYW5TdGF0ZSAqcHN0YXRlKQogCQkvKgogCQkg KiB0cnkgdG8gZ2V0IGEgdHVwbGUgZnJvbSBhbiBhc3luYyBzdWJwbGFuIGlmIGFueQogCQkgKi8K LQkJaWYgKG5vZGUtPmFzX3N5bmNkb25lIHx8ICFibXNfaXNfZW1wdHkobm9kZS0+YXNfbmVlZHJl cXVlc3QpKQorCQlpZiAobm9kZS0+YXNfc3luY2RvbmUgfHwgIWJtc19pc19lbXB0eShub2RlLT5h cy5uZWVkcmVxdWVzdCkpCiAJCXsKIAkJCWlmIChFeGVjQXBwZW5kQXN5bmNHZXROZXh0KG5vZGUs ICZyZXN1bHQpKQogCQkJCXJldHVybiByZXN1bHQ7CiAJCQlBc3NlcnQoIW5vZGUtPmFzX3N5bmNk b25lKTsKLQkJCUFzc2VydChibXNfaXNfZW1wdHkobm9kZS0+YXNfbmVlZHJlcXVlc3QpKTsKKwkJ CUFzc2VydChibXNfaXNfZW1wdHkobm9kZS0+YXMubmVlZHJlcXVlc3QpKTsKIAkJfQogCiAJCS8q CiAJCSAqIGZpZ3VyZSBvdXQgd2hpY2ggc3luYyBzdWJwbGFuIHdlIGFyZSBjdXJyZW50bHkgcHJv Y2Vzc2luZwogCQkgKi8KLQkJQXNzZXJ0KG5vZGUtPmFzX3doaWNocGxhbiA+PSAwICYmIG5vZGUt PmFzX3doaWNocGxhbiA8IG5vZGUtPmFzX25wbGFucyk7Ci0JCXN1Ym5vZGUgPSBub2RlLT5hcHBl bmRwbGFuc1tub2RlLT5hc193aGljaHBsYW5dOworCQlBc3NlcnQobm9kZS0+YXNfd2hpY2hwbGFu ID49IDAgJiYgbm9kZS0+YXNfd2hpY2hwbGFuIDwgbm9kZS0+YXMubnBsYW5zKTsKKwkJc3Vibm9k ZSA9IG5vZGUtPmFzLnBsYW5zW25vZGUtPmFzX3doaWNocGxhbl07CiAKIAkJLyoKIAkJICogZ2V0 IGEgdHVwbGUgZnJvbSB0aGUgc3VicGxhbgpAQCAtMzg1LDcgKzIzNiw3IEBAIEV4ZWNBcHBlbmQo UGxhblN0YXRlICpwc3RhdGUpCiAKIAkJLyogY2hvb3NlIG5ldyBzeW5jIHN1YnBsYW47IGlmIG5v IHN5bmMvYXN5bmMgc3VicGxhbnMsIHdlJ3JlIGRvbmUgKi8KIAkJaWYgKCFub2RlLT5jaG9vc2Vf bmV4dF9zdWJwbGFuKG5vZGUpICYmIG5vZGUtPmFzX25hc3luY3JlbWFpbiA9PSAwKQotCQkJcmV0 dXJuIEV4ZWNDbGVhclR1cGxlKG5vZGUtPnBzLnBzX1Jlc3VsdFR1cGxlU2xvdCk7CisJCQlyZXR1 cm4gRXhlY0NsZWFyVHVwbGUobm9kZS0+YXMucHMucHNfUmVzdWx0VHVwbGVTbG90KTsKIAl9CiB9 CiAKQEAgLTQwMCw4MSArMjUxLDIyIEBAIEV4ZWNBcHBlbmQoUGxhblN0YXRlICpwc3RhdGUpCiB2 b2lkCiBFeGVjRW5kQXBwZW5kKEFwcGVuZFN0YXRlICpub2RlKQogewotCVBsYW5TdGF0ZSAqKmFw cGVuZHBsYW5zOwotCWludAkJCW5wbGFuczsKLQlpbnQJCQlpOwotCi0JLyoKLQkgKiBnZXQgaW5m b3JtYXRpb24gZnJvbSB0aGUgbm9kZQotCSAqLwotCWFwcGVuZHBsYW5zID0gbm9kZS0+YXBwZW5k cGxhbnM7Ci0JbnBsYW5zID0gbm9kZS0+YXNfbnBsYW5zOwotCi0JLyoKLQkgKiBzaHV0IGRvd24g ZWFjaCBvZiB0aGUgc3Vic2NhbnMKLQkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbnBsYW5zOyBpKysp Ci0JCUV4ZWNFbmROb2RlKGFwcGVuZHBsYW5zW2ldKTsKKwlFeGVjRW5kQXBwZW5kZXIoJm5vZGUt PmFzKTsKIH0KIAogdm9pZAogRXhlY1JlU2NhbkFwcGVuZChBcHBlbmRTdGF0ZSAqbm9kZSkKIHsK LQlpbnQJCQluYXN5bmNwbGFucyA9IG5vZGUtPmFzX25hc3luY3BsYW5zOwotCWludAkJCWk7Ci0K LQkvKgotCSAqIElmIGFueSBQQVJBTV9FWEVDIFBhcmFtcyB1c2VkIGluIHBydW5pbmcgZXhwcmVz c2lvbnMgaGF2ZSBjaGFuZ2VkLCB0aGVuCi0JICogd2UnZCBiZXR0ZXIgdW5zZXQgdGhlIHZhbGlk IHN1YnBsYW5zIHNvIHRoYXQgdGhleSBhcmUgcmVzZWxlY3RlZCBmb3IKLQkgKiB0aGUgbmV3IHBh cmFtZXRlciB2YWx1ZXMuCi0JICovCi0JaWYgKG5vZGUtPmFzX3BydW5lX3N0YXRlICYmCi0JCWJt c19vdmVybGFwKG5vZGUtPnBzLmNoZ1BhcmFtLAotCQkJCQlub2RlLT5hc19wcnVuZV9zdGF0ZS0+ ZXhlY3BhcmFtaWRzKSkKLQl7Ci0JCW5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQg PSBmYWxzZTsKLQkJYm1zX2ZyZWUobm9kZS0+YXNfdmFsaWRfc3VicGxhbnMpOwotCQlub2RlLT5h c192YWxpZF9zdWJwbGFucyA9IE5VTEw7Ci0JCWJtc19mcmVlKG5vZGUtPmFzX3ZhbGlkX2FzeW5j cGxhbnMpOwotCQlub2RlLT5hc192YWxpZF9hc3luY3BsYW5zID0gTlVMTDsKLQl9Ci0KLQlmb3Ig KGkgPSAwOyBpIDwgbm9kZS0+YXNfbnBsYW5zOyBpKyspCi0JewotCQlQbGFuU3RhdGUgICpzdWJu b2RlID0gbm9kZS0+YXBwZW5kcGxhbnNbaV07CiAKLQkJLyoKLQkJICogRXhlY1JlU2NhbiBkb2Vz bid0IGtub3cgYWJvdXQgbXkgc3VicGxhbnMsIHNvIEkgaGF2ZSB0byBkbwotCQkgKiBjaGFuZ2Vk LXBhcmFtZXRlciBzaWduYWxpbmcgbXlzZWxmLgotCQkgKi8KLQkJaWYgKG5vZGUtPnBzLmNoZ1Bh cmFtICE9IE5VTEwpCi0JCQlVcGRhdGVDaGFuZ2VkUGFyYW1TZXQoc3Vibm9kZSwgbm9kZS0+cHMu Y2hnUGFyYW0pOworCWludAkJCW5hc3luY3BsYW5zID0gbm9kZS0+YXMubmFzeW5jcGxhbnM7CiAK LQkJLyoKLQkJICogSWYgY2hnUGFyYW0gb2Ygc3Vibm9kZSBpcyBub3QgbnVsbCB0aGVuIHBsYW4g d2lsbCBiZSByZS1zY2FubmVkIGJ5Ci0JCSAqIGZpcnN0IEV4ZWNQcm9jTm9kZSBvciBieSBmaXJz dCBFeGVjQXN5bmNSZXF1ZXN0LgotCQkgKi8KLQkJaWYgKHN1Ym5vZGUtPmNoZ1BhcmFtID09IE5V TEwpCi0JCQlFeGVjUmVTY2FuKHN1Ym5vZGUpOwotCX0KKwlFeGVjUmVTY2FuQXBwZW5kZXIoJm5v ZGUtPmFzKTsKIAotCS8qIFJlc2V0IGFzeW5jIHN0YXRlICovCisJLyogUmVzZXQgc3BlY2lmaWMg YXBwZW5kIGFzeW5jIHN0YXRlICovCiAJaWYgKG5hc3luY3BsYW5zID4gMCkKIAl7Ci0JCWkgPSAt MTsKLQkJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKG5vZGUtPmFzX2FzeW5jcGxhbnMsIGkp KSA+PSAwKQotCQl7Ci0JCQlBc3luY1JlcXVlc3QgKmFyZXEgPSBub2RlLT5hc19hc3luY3JlcXVl c3RzW2ldOwotCi0JCQlhcmVxLT5jYWxsYmFja19wZW5kaW5nID0gZmFsc2U7Ci0JCQlhcmVxLT5y ZXF1ZXN0X2NvbXBsZXRlID0gZmFsc2U7Ci0JCQlhcmVxLT5yZXN1bHQgPSBOVUxMOwotCQl9Ci0K IAkJbm9kZS0+YXNfbmFzeW5jcmVzdWx0cyA9IDA7CiAJCW5vZGUtPmFzX25hc3luY3JlbWFpbiA9 IDA7Ci0JCWJtc19mcmVlKG5vZGUtPmFzX25lZWRyZXF1ZXN0KTsKLQkJbm9kZS0+YXNfbmVlZHJl cXVlc3QgPSBOVUxMOwogCX0KIAogCS8qIExldCBjaG9vc2VfbmV4dF9zdWJwbGFuXyogZnVuY3Rp b24gaGFuZGxlIHNldHRpbmcgdGhlIGZpcnN0IHN1YnBsYW4gKi8KQEAgLTUwMSw3ICsyOTMsNyBA QCBFeGVjQXBwZW5kRXN0aW1hdGUoQXBwZW5kU3RhdGUgKm5vZGUsCiB7CiAJbm9kZS0+cHN0YXRl X2xlbiA9CiAJCWFkZF9zaXplKG9mZnNldG9mKFBhcmFsbGVsQXBwZW5kU3RhdGUsIHBhX2Zpbmlz aGVkKSwKLQkJCQkgc2l6ZW9mKGJvb2wpICogbm9kZS0+YXNfbnBsYW5zKTsKKwkJCQkgc2l6ZW9m KGJvb2wpICogbm9kZS0+YXMubnBsYW5zKTsKIAogCXNobV90b2NfZXN0aW1hdGVfY2h1bmsoJnBj eHQtPmVzdGltYXRvciwgbm9kZS0+cHN0YXRlX2xlbik7CiAJc2htX3RvY19lc3RpbWF0ZV9rZXlz KCZwY3h0LT5lc3RpbWF0b3IsIDEpOwpAQCAtNTIzLDcgKzMxNSw3IEBAIEV4ZWNBcHBlbmRJbml0 aWFsaXplRFNNKEFwcGVuZFN0YXRlICpub2RlLAogCXBzdGF0ZSA9IHNobV90b2NfYWxsb2NhdGUo cGN4dC0+dG9jLCBub2RlLT5wc3RhdGVfbGVuKTsKIAltZW1zZXQocHN0YXRlLCAwLCBub2RlLT5w c3RhdGVfbGVuKTsKIAlMV0xvY2tJbml0aWFsaXplKCZwc3RhdGUtPnBhX2xvY2ssIExXVFJBTkNI RV9QQVJBTExFTF9BUFBFTkQpOwotCXNobV90b2NfaW5zZXJ0KHBjeHQtPnRvYywgbm9kZS0+cHMu cGxhbi0+cGxhbl9ub2RlX2lkLCBwc3RhdGUpOworCXNobV90b2NfaW5zZXJ0KHBjeHQtPnRvYywg bm9kZS0+YXMucHMucGxhbi0+cGxhbl9ub2RlX2lkLCBwc3RhdGUpOwogCiAJbm9kZS0+YXNfcHN0 YXRlID0gcHN0YXRlOwogCW5vZGUtPmNob29zZV9uZXh0X3N1YnBsYW4gPSBjaG9vc2VfbmV4dF9z dWJwbGFuX2Zvcl9sZWFkZXI7CkBAIC01NDEsNyArMzMzLDcgQEAgRXhlY0FwcGVuZFJlSW5pdGlh bGl6ZURTTShBcHBlbmRTdGF0ZSAqbm9kZSwgUGFyYWxsZWxDb250ZXh0ICpwY3h0KQogCVBhcmFs bGVsQXBwZW5kU3RhdGUgKnBzdGF0ZSA9IG5vZGUtPmFzX3BzdGF0ZTsKIAogCXBzdGF0ZS0+cGFf bmV4dF9wbGFuID0gMDsKLQltZW1zZXQocHN0YXRlLT5wYV9maW5pc2hlZCwgMCwgc2l6ZW9mKGJv b2wpICogbm9kZS0+YXNfbnBsYW5zKTsKKwltZW1zZXQocHN0YXRlLT5wYV9maW5pc2hlZCwgMCwg c2l6ZW9mKGJvb2wpICogbm9kZS0+YXMubnBsYW5zKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNTU0 LDcgKzM0Niw3IEBAIEV4ZWNBcHBlbmRSZUluaXRpYWxpemVEU00oQXBwZW5kU3RhdGUgKm5vZGUs IFBhcmFsbGVsQ29udGV4dCAqcGN4dCkKIHZvaWQKIEV4ZWNBcHBlbmRJbml0aWFsaXplV29ya2Vy KEFwcGVuZFN0YXRlICpub2RlLCBQYXJhbGxlbFdvcmtlckNvbnRleHQgKnB3Y3h0KQogewotCW5v ZGUtPmFzX3BzdGF0ZSA9IHNobV90b2NfbG9va3VwKHB3Y3h0LT50b2MsIG5vZGUtPnBzLnBsYW4t PnBsYW5fbm9kZV9pZCwgZmFsc2UpOworCW5vZGUtPmFzX3BzdGF0ZSA9IHNobV90b2NfbG9va3Vw KHB3Y3h0LT50b2MsIG5vZGUtPmFzLnBzLnBsYW4tPnBsYW5fbm9kZV9pZCwgZmFsc2UpOwogCW5v ZGUtPmNob29zZV9uZXh0X3N1YnBsYW4gPSBjaG9vc2VfbmV4dF9zdWJwbGFuX2Zvcl93b3JrZXI7 CiB9CiAKQEAgLTU3Miw3ICszNjQsNyBAQCBjaG9vc2VfbmV4dF9zdWJwbGFuX2xvY2FsbHkoQXBw ZW5kU3RhdGUgKm5vZGUpCiAJaW50CQkJbmV4dHBsYW47CiAKIAkvKiBXZSBzaG91bGQgbmV2ZXIg YmUgY2FsbGVkIHdoZW4gdGhlcmUgYXJlIG5vIHN1YnBsYW5zICovCi0JQXNzZXJ0KG5vZGUtPmFz X25wbGFucyA+IDApOworCUFzc2VydChub2RlLT5hcy5ucGxhbnMgPiAwKTsKIAogCS8qIE5vdGhp bmcgdG8gZG8gaWYgc3luY2RvbmUgKi8KIAlpZiAobm9kZS0+YXNfc3luY2RvbmUpCkBAIC01ODcs MzMgKzM3OSwzMyBAQCBjaG9vc2VfbmV4dF9zdWJwbGFuX2xvY2FsbHkoQXBwZW5kU3RhdGUgKm5v ZGUpCiAJICovCiAJaWYgKHdoaWNocGxhbiA9PSBJTlZBTElEX1NVQlBMQU5fSU5ERVgpCiAJewot CQlpZiAobm9kZS0+YXNfbmFzeW5jcGxhbnMgPiAwKQorCQlpZiAobm9kZS0+YXMubmFzeW5jcGxh bnMgPiAwKQogCQl7CiAJCQkvKiBXZSdkIGhhdmUgZmlsbGVkIGFzX3ZhbGlkX3N1YnBsYW5zIGFs cmVhZHkgKi8KLQkJCUFzc2VydChub2RlLT5hc192YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkKTsK KwkJCUFzc2VydChub2RlLT5hcy52YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkKTsKIAkJfQotCQll bHNlIGlmICghbm9kZS0+YXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCkKKwkJZWxzZSBpZiAo IW5vZGUtPmFzLnZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQpCiAJCXsKLQkJCW5vZGUtPmFzX3Zh bGlkX3N1YnBsYW5zID0KLQkJCQlFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMobm9kZS0+YXNfcHJ1 bmVfc3RhdGUsIGZhbHNlLCBOVUxMKTsKLQkJCW5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zX2lkZW50 aWZpZWQgPSB0cnVlOworCQkJbm9kZS0+YXMudmFsaWRfc3VicGxhbnMgPQorCQkJCUV4ZWNGaW5k TWF0Y2hpbmdTdWJQbGFucyhub2RlLT5hcy5wcnVuZV9zdGF0ZSwgZmFsc2UsIE5VTEwpOworCQkJ bm9kZS0+YXMudmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCA9IHRydWU7CiAJCX0KIAogCQl3aGlj aHBsYW4gPSAtMTsKIAl9CiAKIAkvKiBFbnN1cmUgd2hpY2hwbGFuIGlzIHdpdGhpbiB0aGUgZXhw ZWN0ZWQgcmFuZ2UgKi8KLQlBc3NlcnQod2hpY2hwbGFuID49IC0xICYmIHdoaWNocGxhbiA8PSBu b2RlLT5hc19ucGxhbnMpOworCUFzc2VydCh3aGljaHBsYW4gPj0gLTEgJiYgd2hpY2hwbGFuIDw9 IG5vZGUtPmFzLm5wbGFucyk7CiAKLQlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChub2RlLT5w cy5zdGF0ZS0+ZXNfZGlyZWN0aW9uKSkKLQkJbmV4dHBsYW4gPSBibXNfbmV4dF9tZW1iZXIobm9k ZS0+YXNfdmFsaWRfc3VicGxhbnMsIHdoaWNocGxhbik7CisJaWYgKFNjYW5EaXJlY3Rpb25Jc0Zv cndhcmQobm9kZS0+YXMucHMuc3RhdGUtPmVzX2RpcmVjdGlvbikpCisJCW5leHRwbGFuID0gYm1z X25leHRfbWVtYmVyKG5vZGUtPmFzLnZhbGlkX3N1YnBsYW5zLCB3aGljaHBsYW4pOwogCWVsc2UK LQkJbmV4dHBsYW4gPSBibXNfcHJldl9tZW1iZXIobm9kZS0+YXNfdmFsaWRfc3VicGxhbnMsIHdo aWNocGxhbik7CisJCW5leHRwbGFuID0gYm1zX3ByZXZfbWVtYmVyKG5vZGUtPmFzLnZhbGlkX3N1 YnBsYW5zLCB3aGljaHBsYW4pOwogCiAJaWYgKG5leHRwbGFuIDwgMCkKIAl7CiAJCS8qIFNldCBh c19zeW5jZG9uZSBpZiBpbiBhc3luYyBtb2RlICovCi0JCWlmIChub2RlLT5hc19uYXN5bmNwbGFu cyA+IDApCisJCWlmIChub2RlLT5hcy5uYXN5bmNwbGFucyA+IDApCiAJCQlub2RlLT5hc19zeW5j ZG9uZSA9IHRydWU7CiAJCXJldHVybiBmYWxzZTsKIAl9CkBAIC02MzcsMTAgKzQyOSwxMCBAQCBj aG9vc2VfbmV4dF9zdWJwbGFuX2Zvcl9sZWFkZXIoQXBwZW5kU3RhdGUgKm5vZGUpCiAJUGFyYWxs ZWxBcHBlbmRTdGF0ZSAqcHN0YXRlID0gbm9kZS0+YXNfcHN0YXRlOwogCiAJLyogQmFja3dhcmQg c2NhbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHBhcmFsbGVsLWF3YXJlIHBsYW5zICovCi0JQXNzZXJ0 KFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQobm9kZS0+cHMuc3RhdGUtPmVzX2RpcmVjdGlvbikpOwor CUFzc2VydChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKG5vZGUtPmFzLnBzLnN0YXRlLT5lc19kaXJl Y3Rpb24pKTsKIAogCS8qIFdlIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgd2hlbiB0aGVyZSBhcmUg bm8gc3VicGxhbnMgKi8KLQlBc3NlcnQobm9kZS0+YXNfbnBsYW5zID4gMCk7CisJQXNzZXJ0KG5v ZGUtPmFzLm5wbGFucyA+IDApOwogCiAJTFdMb2NrQWNxdWlyZSgmcHN0YXRlLT5wYV9sb2NrLCBM V19FWENMVVNJVkUpOwogCkBAIC02NTIsMTggKzQ0NCwxOCBAQCBjaG9vc2VfbmV4dF9zdWJwbGFu X2Zvcl9sZWFkZXIoQXBwZW5kU3RhdGUgKm5vZGUpCiAJZWxzZQogCXsKIAkJLyogU3RhcnQgd2l0 aCBsYXN0IHN1YnBsYW4uICovCi0JCW5vZGUtPmFzX3doaWNocGxhbiA9IG5vZGUtPmFzX25wbGFu cyAtIDE7CisJCW5vZGUtPmFzX3doaWNocGxhbiA9IG5vZGUtPmFzLm5wbGFucyAtIDE7CiAKIAkJ LyoKIAkJICogSWYgd2UndmUgeWV0IHRvIGRldGVybWluZSB0aGUgdmFsaWQgc3VicGxhbnMgdGhl biBkbyBzbyBub3cuICBJZgogCQkgKiBydW4tdGltZSBwcnVuaW5nIGlzIGRpc2FibGVkIHRoZW4g dGhlIHZhbGlkIHN1YnBsYW5zIHdpbGwgYWx3YXlzIGJlCiAJCSAqIHNldCB0byBhbGwgc3VicGxh bnMuCiAJCSAqLwotCQlpZiAoIW5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQpCisJ CWlmICghbm9kZS0+YXMudmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCkKIAkJewotCQkJbm9kZS0+ YXNfdmFsaWRfc3VicGxhbnMgPQotCQkJCUV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhub2RlLT5h c19wcnVuZV9zdGF0ZSwgZmFsc2UsIE5VTEwpOwotCQkJbm9kZS0+YXNfdmFsaWRfc3VicGxhbnNf aWRlbnRpZmllZCA9IHRydWU7CisJCQlub2RlLT5hcy52YWxpZF9zdWJwbGFucyA9CisJCQkJRXhl Y0ZpbmRNYXRjaGluZ1N1YlBsYW5zKG5vZGUtPmFzLnBydW5lX3N0YXRlLCBmYWxzZSwgTlVMTCk7 CisJCQlub2RlLT5hcy52YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkID0gdHJ1ZTsKIAogCQkJLyoK IAkJCSAqIE1hcmsgZWFjaCBpbnZhbGlkIHBsYW4gYXMgZmluaXNoZWQgdG8gYWxsb3cgdGhlIGxv b3AgYmVsb3cgdG8KQEAgLTcxOSwxMCArNTExLDEwIEBAIGNob29zZV9uZXh0X3N1YnBsYW5fZm9y X3dvcmtlcihBcHBlbmRTdGF0ZSAqbm9kZSkKIAlQYXJhbGxlbEFwcGVuZFN0YXRlICpwc3RhdGUg PSBub2RlLT5hc19wc3RhdGU7CiAKIAkvKiBCYWNrd2FyZCBzY2FuIGlzIG5vdCBzdXBwb3J0ZWQg YnkgcGFyYWxsZWwtYXdhcmUgcGxhbnMgKi8KLQlBc3NlcnQoU2NhbkRpcmVjdGlvbklzRm9yd2Fy ZChub2RlLT5wcy5zdGF0ZS0+ZXNfZGlyZWN0aW9uKSk7CisJQXNzZXJ0KFNjYW5EaXJlY3Rpb25J c0ZvcndhcmQobm9kZS0+YXMucHMuc3RhdGUtPmVzX2RpcmVjdGlvbikpOwogCiAJLyogV2Ugc2hv dWxkIG5ldmVyIGJlIGNhbGxlZCB3aGVuIHRoZXJlIGFyZSBubyBzdWJwbGFucyAqLwotCUFzc2Vy dChub2RlLT5hc19ucGxhbnMgPiAwKTsKKwlBc3NlcnQobm9kZS0+YXMubnBsYW5zID4gMCk7CiAK IAlMV0xvY2tBY3F1aXJlKCZwc3RhdGUtPnBhX2xvY2ssIExXX0VYQ0xVU0lWRSk7CiAKQEAgLTcz NSwxMSArNTI3LDExIEBAIGNob29zZV9uZXh0X3N1YnBsYW5fZm9yX3dvcmtlcihBcHBlbmRTdGF0 ZSAqbm9kZSkKIAkgKiBydW4tdGltZSBwcnVuaW5nIGlzIGRpc2FibGVkIHRoZW4gdGhlIHZhbGlk IHN1YnBsYW5zIHdpbGwgYWx3YXlzIGJlIHNldAogCSAqIHRvIGFsbCBzdWJwbGFucy4KIAkgKi8K LQllbHNlIGlmICghbm9kZS0+YXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCkKKwllbHNlIGlm ICghbm9kZS0+YXMudmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCkKIAl7Ci0JCW5vZGUtPmFzX3Zh bGlkX3N1YnBsYW5zID0KLQkJCUV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhub2RlLT5hc19wcnVu ZV9zdGF0ZSwgZmFsc2UsIE5VTEwpOwotCQlub2RlLT5hc192YWxpZF9zdWJwbGFuc19pZGVudGlm aWVkID0gdHJ1ZTsKKwkJbm9kZS0+YXMudmFsaWRfc3VicGxhbnMgPQorCQkJRXhlY0ZpbmRNYXRj aGluZ1N1YlBsYW5zKG5vZGUtPmFzLnBydW5lX3N0YXRlLCBmYWxzZSwgTlVMTCk7CisJCW5vZGUt PmFzLnZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQgPSB0cnVlOwogCiAJCW1hcmtfaW52YWxpZF9z dWJwbGFuc19hc19maW5pc2hlZChub2RlKTsKIAl9CkBAIC03NTksNyArNTUxLDcgQEAgY2hvb3Nl X25leHRfc3VicGxhbl9mb3Jfd29ya2VyKEFwcGVuZFN0YXRlICpub2RlKQogCXsKIAkJaW50CQkJ bmV4dHBsYW47CiAKLQkJbmV4dHBsYW4gPSBibXNfbmV4dF9tZW1iZXIobm9kZS0+YXNfdmFsaWRf c3VicGxhbnMsCisJCW5leHRwbGFuID0gYm1zX25leHRfbWVtYmVyKG5vZGUtPmFzLnZhbGlkX3N1 YnBsYW5zLAogCQkJCQkJCQkgICBwc3RhdGUtPnBhX25leHRfcGxhbik7CiAJCWlmIChuZXh0cGxh biA+PSAwKQogCQl7CkBAIC03NzIsNyArNTY0LDcgQEAgY2hvb3NlX25leHRfc3VicGxhbl9mb3Jf d29ya2VyKEFwcGVuZFN0YXRlICpub2RlKQogCQkJICogVHJ5IGxvb3BpbmcgYmFjayB0byB0aGUg Zmlyc3QgdmFsaWQgcGFydGlhbCBwbGFuLCBpZiB0aGVyZSBpcwogCQkJICogb25lLiAgSWYgdGhl cmUgaXNuJ3QsIGFycmFuZ2UgdG8gYmFpbCBvdXQgYmVsb3cuCiAJCQkgKi8KLQkJCW5leHRwbGFu ID0gYm1zX25leHRfbWVtYmVyKG5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zLAorCQkJbmV4dHBsYW4g PSBibXNfbmV4dF9tZW1iZXIobm9kZS0+YXMudmFsaWRfc3VicGxhbnMsCiAJCQkJCQkJCQkgICBu b2RlLT5hc19maXJzdF9wYXJ0aWFsX3BsYW4gLSAxKTsKIAkJCXBzdGF0ZS0+cGFfbmV4dF9wbGFu ID0KIAkJCQluZXh0cGxhbiA8IDAgPyBub2RlLT5hc193aGljaHBsYW4gOiBuZXh0cGxhbjsKQEAg LTc5Nyw3ICs1ODksNyBAQCBjaG9vc2VfbmV4dF9zdWJwbGFuX2Zvcl93b3JrZXIoQXBwZW5kU3Rh dGUgKm5vZGUpCiAKIAkvKiBQaWNrIHRoZSBwbGFuIHdlIGZvdW5kLCBhbmQgYWR2YW5jZSBwYV9u ZXh0X3BsYW4gb25lIG1vcmUgdGltZS4gKi8KIAlub2RlLT5hc193aGljaHBsYW4gPSBwc3RhdGUt PnBhX25leHRfcGxhbjsKLQlwc3RhdGUtPnBhX25leHRfcGxhbiA9IGJtc19uZXh0X21lbWJlcihu b2RlLT5hc192YWxpZF9zdWJwbGFucywKKwlwc3RhdGUtPnBhX25leHRfcGxhbiA9IGJtc19uZXh0 X21lbWJlcihub2RlLT5hcy52YWxpZF9zdWJwbGFucywKIAkJCQkJCQkJCQkgICBwc3RhdGUtPnBh X25leHRfcGxhbik7CiAKIAkvKgpAQCAtODA2LDcgKzU5OCw3IEBAIGNob29zZV9uZXh0X3N1YnBs YW5fZm9yX3dvcmtlcihBcHBlbmRTdGF0ZSAqbm9kZSkKIAkgKi8KIAlpZiAocHN0YXRlLT5wYV9u ZXh0X3BsYW4gPCAwKQogCXsKLQkJaW50CQkJbmV4dHBsYW4gPSBibXNfbmV4dF9tZW1iZXIobm9k ZS0+YXNfdmFsaWRfc3VicGxhbnMsCisJCWludAkJCW5leHRwbGFuID0gYm1zX25leHRfbWVtYmVy KG5vZGUtPmFzLnZhbGlkX3N1YnBsYW5zLAogCQkJCQkJCQkJCQkgICBub2RlLT5hc19maXJzdF9w YXJ0aWFsX3BsYW4gLSAxKTsKIAogCQlpZiAobmV4dHBsYW4gPj0gMCkKQEAgLTg0OCwxNiArNjQw LDE2IEBAIG1hcmtfaW52YWxpZF9zdWJwbGFuc19hc19maW5pc2hlZChBcHBlbmRTdGF0ZSAqbm9k ZSkKIAlBc3NlcnQobm9kZS0+YXNfcHN0YXRlKTsKIAogCS8qIFNob3VsZG4ndCBoYXZlIGJlZW4g Y2FsbGVkIHdoZW4gcnVuLXRpbWUgcHJ1bmluZyBpcyBub3QgZW5hYmxlZCAqLwotCUFzc2VydChu b2RlLT5hc19wcnVuZV9zdGF0ZSk7CisJQXNzZXJ0KG5vZGUtPmFzLnBydW5lX3N0YXRlKTsKIAog CS8qIE5vdGhpbmcgdG8gZG8gaWYgYWxsIHBsYW5zIGFyZSB2YWxpZCAqLwotCWlmIChibXNfbnVt X21lbWJlcnMobm9kZS0+YXNfdmFsaWRfc3VicGxhbnMpID09IG5vZGUtPmFzX25wbGFucykKKwlp ZiAoYm1zX251bV9tZW1iZXJzKG5vZGUtPmFzLnZhbGlkX3N1YnBsYW5zKSA9PSBub2RlLT5hcy5u cGxhbnMpCiAJCXJldHVybjsKIAogCS8qIE1hcmsgYWxsIG5vbi12YWxpZCBwbGFucyBhcyBmaW5p c2hlZCAqLwotCWZvciAoaSA9IDA7IGkgPCBub2RlLT5hc19ucGxhbnM7IGkrKykKKwlmb3IgKGkg PSAwOyBpIDwgbm9kZS0+YXMubnBsYW5zOyBpKyspCiAJewotCQlpZiAoIWJtc19pc19tZW1iZXIo aSwgbm9kZS0+YXNfdmFsaWRfc3VicGxhbnMpKQorCQlpZiAoIWJtc19pc19tZW1iZXIoaSwgbm9k ZS0+YXMudmFsaWRfc3VicGxhbnMpKQogCQkJbm9kZS0+YXNfcHN0YXRlLT5wYV9maW5pc2hlZFtp XSA9IHRydWU7CiAJfQogfQpAQCAtODc2LDQ3ICs2NjgsMjUgQEAgbWFya19pbnZhbGlkX3N1YnBs YW5zX2FzX2ZpbmlzaGVkKEFwcGVuZFN0YXRlICpub2RlKQogc3RhdGljIHZvaWQKIEV4ZWNBcHBl bmRBc3luY0JlZ2luKEFwcGVuZFN0YXRlICpub2RlKQogewotCWludAkJCWk7Ci0KLQkvKiBCYWNr d2FyZCBzY2FuIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYXN5bmMtYXdhcmUgQXBwZW5kcy4gKi8KLQlB c3NlcnQoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChub2RlLT5wcy5zdGF0ZS0+ZXNfZGlyZWN0aW9u KSk7Ci0KLQkvKiBXZSBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIHdoZW4gdGhlcmUgYXJlIG5vIHN1 YnBsYW5zICovCi0JQXNzZXJ0KG5vZGUtPmFzX25wbGFucyA+IDApOwotCi0JLyogV2Ugc2hvdWxk IG5ldmVyIGJlIGNhbGxlZCB3aGVuIHRoZXJlIGFyZSBubyBhc3luYyBzdWJwbGFucy4gKi8KLQlB c3NlcnQobm9kZS0+YXNfbmFzeW5jcGxhbnMgPiAwKTsKLQogCS8qIElmIHdlJ3ZlIHlldCB0byBk ZXRlcm1pbmUgdGhlIHZhbGlkIHN1YnBsYW5zIHRoZW4gZG8gc28gbm93LiAqLwotCWlmICghbm9k ZS0+YXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCkKKwlpZiAoIW5vZGUtPmFzLnZhbGlkX3N1 YnBsYW5zX2lkZW50aWZpZWQpCiAJewotCQlub2RlLT5hc192YWxpZF9zdWJwbGFucyA9Ci0JCQlF eGVjRmluZE1hdGNoaW5nU3ViUGxhbnMobm9kZS0+YXNfcHJ1bmVfc3RhdGUsIGZhbHNlLCBOVUxM KTsKLQkJbm9kZS0+YXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCA9IHRydWU7CisJCW5vZGUt PmFzLnZhbGlkX3N1YnBsYW5zID0KKwkJCUV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhub2RlLT5h cy5wcnVuZV9zdGF0ZSwgZmFsc2UsIE5VTEwpOworCQlub2RlLT5hcy52YWxpZF9zdWJwbGFuc19p ZGVudGlmaWVkID0gdHJ1ZTsKIAogCQljbGFzc2lmeV9tYXRjaGluZ19zdWJwbGFucyhub2RlKTsK IAl9CiAKIAkvKiBJbml0aWFsaXplIHN0YXRlIHZhcmlhYmxlcy4gKi8KLQlub2RlLT5hc19zeW5j ZG9uZSA9IGJtc19pc19lbXB0eShub2RlLT5hc192YWxpZF9zdWJwbGFucyk7Ci0Jbm9kZS0+YXNf bmFzeW5jcmVtYWluID0gYm1zX251bV9tZW1iZXJzKG5vZGUtPmFzX3ZhbGlkX2FzeW5jcGxhbnMp OworCW5vZGUtPmFzX3N5bmNkb25lID0gYm1zX2lzX2VtcHR5KG5vZGUtPmFzLnZhbGlkX3N1YnBs YW5zKTsKKwlub2RlLT5hc19uYXN5bmNyZW1haW4gPSBibXNfbnVtX21lbWJlcnMobm9kZS0+YXMu dmFsaWRfYXN5bmNwbGFucyk7CiAKIAkvKiBOb3RoaW5nIHRvIGRvIGlmIHRoZXJlIGFyZSBubyB2 YWxpZCBhc3luYyBzdWJwbGFucy4gKi8KIAlpZiAobm9kZS0+YXNfbmFzeW5jcmVtYWluID09IDAp CiAJCXJldHVybjsKIAotCS8qIE1ha2UgYSByZXF1ZXN0IGZvciBlYWNoIG9mIHRoZSB2YWxpZCBh c3luYyBzdWJwbGFucy4gKi8KLQlpID0gLTE7Ci0Jd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVy KG5vZGUtPmFzX3ZhbGlkX2FzeW5jcGxhbnMsIGkpKSA+PSAwKQotCXsKLQkJQXN5bmNSZXF1ZXN0 ICphcmVxID0gbm9kZS0+YXNfYXN5bmNyZXF1ZXN0c1tpXTsKLQotCQlBc3NlcnQoYXJlcS0+cmVx dWVzdF9pbmRleCA9PSBpKTsKLQkJQXNzZXJ0KCFhcmVxLT5jYWxsYmFja19wZW5kaW5nKTsKLQot CQkvKiBEbyB0aGUgYWN0dWFsIHdvcmsuICovCi0JCUV4ZWNBc3luY1JlcXVlc3QoYXJlcSk7Ci0J fQorCUV4ZWNBcHBlbmRlckFzeW5jQmVnaW4oJm5vZGUtPmFzKTsKIH0KIAogLyogLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpA QCAtOTYxLDcgKzczMSw3IEBAIEV4ZWNBcHBlbmRBc3luY0dldE5leHQoQXBwZW5kU3RhdGUgKm5v ZGUsIFR1cGxlVGFibGVTbG90ICoqcmVzdWx0KQogCWlmIChub2RlLT5hc19zeW5jZG9uZSkKIAl7 CiAJCUFzc2VydChub2RlLT5hc19uYXN5bmNyZW1haW4gPT0gMCk7Ci0JCSpyZXN1bHQgPSBFeGVj Q2xlYXJUdXBsZShub2RlLT5wcy5wc19SZXN1bHRUdXBsZVNsb3QpOworCQkqcmVzdWx0ID0gRXhl Y0NsZWFyVHVwbGUobm9kZS0+YXMucHMucHNfUmVzdWx0VHVwbGVTbG90KTsKIAkJcmV0dXJuIHRy dWU7CiAJfQogCkBAIC05ODEsNyArNzUxLDcgQEAgRXhlY0FwcGVuZEFzeW5jUmVxdWVzdChBcHBl bmRTdGF0ZSAqbm9kZSwgVHVwbGVUYWJsZVNsb3QgKipyZXN1bHQpCiAJaW50CQkJaTsKIAogCS8q IE5vdGhpbmcgdG8gZG8gaWYgdGhlcmUgYXJlIG5vIGFzeW5jIHN1YnBsYW5zIG5lZWRpbmcgYSBu ZXcgcmVxdWVzdC4gKi8KLQlpZiAoYm1zX2lzX2VtcHR5KG5vZGUtPmFzX25lZWRyZXF1ZXN0KSkK KwlpZiAoYm1zX2lzX2VtcHR5KG5vZGUtPmFzLm5lZWRyZXF1ZXN0KSkKIAl7CiAJCUFzc2VydChu b2RlLT5hc19uYXN5bmNyZXN1bHRzID09IDApOwogCQlyZXR1cm4gZmFsc2U7CkBAIC05OTQsMTcg Kzc2NCwxNyBAQCBFeGVjQXBwZW5kQXN5bmNSZXF1ZXN0KEFwcGVuZFN0YXRlICpub2RlLCBUdXBs ZVRhYmxlU2xvdCAqKnJlc3VsdCkKIAlpZiAobm9kZS0+YXNfbmFzeW5jcmVzdWx0cyA+IDApCiAJ ewogCQktLW5vZGUtPmFzX25hc3luY3Jlc3VsdHM7Ci0JCSpyZXN1bHQgPSBub2RlLT5hc19hc3lu Y3Jlc3VsdHNbbm9kZS0+YXNfbmFzeW5jcmVzdWx0c107CisJCSpyZXN1bHQgPSBub2RlLT5hcy5h c3luY3Jlc3VsdHNbbm9kZS0+YXNfbmFzeW5jcmVzdWx0c107CiAJCXJldHVybiB0cnVlOwogCX0K IAogCS8qIE1ha2UgYSBuZXcgcmVxdWVzdCBmb3IgZWFjaCBvZiB0aGUgYXN5bmMgc3VicGxhbnMg dGhhdCBuZWVkIGl0LiAqLwotCW5lZWRyZXF1ZXN0ID0gbm9kZS0+YXNfbmVlZHJlcXVlc3Q7Ci0J bm9kZS0+YXNfbmVlZHJlcXVlc3QgPSBOVUxMOworCW5lZWRyZXF1ZXN0ID0gbm9kZS0+YXMubmVl ZHJlcXVlc3Q7CisJbm9kZS0+YXMubmVlZHJlcXVlc3QgPSBOVUxMOwogCWkgPSAtMTsKIAl3aGls ZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIobmVlZHJlcXVlc3QsIGkpKSA+PSAwKQogCXsKLQkJQXN5 bmNSZXF1ZXN0ICphcmVxID0gbm9kZS0+YXNfYXN5bmNyZXF1ZXN0c1tpXTsKKwkJQXN5bmNSZXF1 ZXN0ICphcmVxID0gbm9kZS0+YXMuYXN5bmNyZXF1ZXN0c1tpXTsKIAogCQkvKiBEbyB0aGUgYWN0 dWFsIHdvcmsuICovCiAJCUV4ZWNBc3luY1JlcXVlc3QoYXJlcSk7CkBAIC0xMDE1LDcgKzc4NSw3 IEBAIEV4ZWNBcHBlbmRBc3luY1JlcXVlc3QoQXBwZW5kU3RhdGUgKm5vZGUsIFR1cGxlVGFibGVT bG90ICoqcmVzdWx0KQogCWlmIChub2RlLT5hc19uYXN5bmNyZXN1bHRzID4gMCkKIAl7CiAJCS0t bm9kZS0+YXNfbmFzeW5jcmVzdWx0czsKLQkJKnJlc3VsdCA9IG5vZGUtPmFzX2FzeW5jcmVzdWx0 c1tub2RlLT5hc19uYXN5bmNyZXN1bHRzXTsKKwkJKnJlc3VsdCA9IG5vZGUtPmFzLmFzeW5jcmVz dWx0c1tub2RlLT5hc19uYXN5bmNyZXN1bHRzXTsKIAkJcmV0dXJuIHRydWU7CiAJfQogCkBAIC0x MDMxLDEwNSArODAxLDEyIEBAIEV4ZWNBcHBlbmRBc3luY1JlcXVlc3QoQXBwZW5kU3RhdGUgKm5v ZGUsIFR1cGxlVGFibGVTbG90ICoqcmVzdWx0KQogc3RhdGljIHZvaWQKIEV4ZWNBcHBlbmRBc3lu Y0V2ZW50V2FpdChBcHBlbmRTdGF0ZSAqbm9kZSkKIHsKLQlpbnQJCQluZXZlbnRzID0gbm9kZS0+ YXNfbmFzeW5jcGxhbnMgKyAyOwogCWxvbmcJCXRpbWVvdXQgPSBub2RlLT5hc19zeW5jZG9uZSA/ IC0xIDogMDsKLQlXYWl0RXZlbnQJb2NjdXJyZWRfZXZlbnRbRVZFTlRfQlVGRkVSX1NJWkVdOwot CWludAkJCW5vY2N1cnJlZDsKLQlpbnQJCQlpOwogCiAJLyogV2Ugc2hvdWxkIG5ldmVyIGJlIGNh bGxlZCB3aGVuIHRoZXJlIGFyZSBubyB2YWxpZCBhc3luYyBzdWJwbGFucy4gKi8KIAlBc3NlcnQo bm9kZS0+YXNfbmFzeW5jcmVtYWluID4gMCk7CiAKLQlBc3NlcnQobm9kZS0+YXNfZXZlbnRzZXQg PT0gTlVMTCk7Ci0Jbm9kZS0+YXNfZXZlbnRzZXQgPSBDcmVhdGVXYWl0RXZlbnRTZXQoQ3VycmVu dFJlc291cmNlT3duZXIsIG5ldmVudHMpOwotCUFkZFdhaXRFdmVudFRvU2V0KG5vZGUtPmFzX2V2 ZW50c2V0LCBXTF9FWElUX09OX1BNX0RFQVRILCBQR0lOVkFMSURfU09DS0VULAotCQkJCQkgIE5V TEwsIE5VTEwpOwotCi0JLyogR2l2ZSBlYWNoIHdhaXRpbmcgc3VicGxhbiBhIGNoYW5jZSB0byBh ZGQgYW4gZXZlbnQuICovCi0JaSA9IC0xOwotCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihu b2RlLT5hc19hc3luY3BsYW5zLCBpKSkgPj0gMCkKLQl7Ci0JCUFzeW5jUmVxdWVzdCAqYXJlcSA9 IG5vZGUtPmFzX2FzeW5jcmVxdWVzdHNbaV07Ci0KLQkJaWYgKGFyZXEtPmNhbGxiYWNrX3BlbmRp bmcpCi0JCQlFeGVjQXN5bmNDb25maWd1cmVXYWl0KGFyZXEpOwotCX0KLQotCS8qCi0JICogTm8g bmVlZCBmb3IgZnVydGhlciBwcm9jZXNzaW5nIGlmIG5vbmUgb2YgdGhlIHN1YnBsYW5zIGNvbmZp Z3VyZWQgYW55Ci0JICogZXZlbnRzLgotCSAqLwotCWlmIChHZXROdW1SZWdpc3RlcmVkV2FpdEV2 ZW50cyhub2RlLT5hc19ldmVudHNldCkgPT0gMSkKLQl7Ci0JCUZyZWVXYWl0RXZlbnRTZXQobm9k ZS0+YXNfZXZlbnRzZXQpOwotCQlub2RlLT5hc19ldmVudHNldCA9IE5VTEw7Ci0JCXJldHVybjsK LQl9Ci0KLQkvKgotCSAqIEFkZCB0aGUgcHJvY2VzcyBsYXRjaCB0byB0aGUgc2V0LCBzbyB0aGF0 IHdlIHdha2UgdXAgdG8gcHJvY2VzcyB0aGUKLQkgKiBzdGFuZGFyZCBpbnRlcnJ1cHRzIHdpdGgg Q0hFQ0tfRk9SX0lOVEVSUlVQVFMoKS4KLQkgKgotCSAqIE5PVEU6IEZvciBoaXN0b3JpY2FsIHJl YXNvbnMsIGl0J3MgaW1wb3J0YW50IHRoYXQgdGhpcyBpcyBhZGRlZCB0byB0aGUKLQkgKiBXYWl0 RXZlbnRTZXQgYWZ0ZXIgdGhlIEV4ZWNBc3luY0NvbmZpZ3VyZVdhaXQoKSBjYWxscy4gIE5hbWVs eSwKLQkgKiBwb3N0Z3Jlc19mZHcgY2FsbHMgIkdldE51bVJlZ2lzdGVyZWRXYWl0RXZlbnRzKHNl dCkgPT0gMSIgdG8gY2hlY2sgaWYKLQkgKiBhbnkgb3RoZXIgZXZlbnRzIGFyZSBpbiB0aGUgc2V0 LiAgVGhhdCdzIGEgcG9vciBkZXNpZ24sIGl0J3MKLQkgKiBxdWVzdGlvbmFibGUgZm9yIHBvc3Rn cmVzX2ZkdyB0byBiZSBkb2luZyB0aGF0IGluIHRoZSBmaXJzdCBwbGFjZSwgYnV0Ci0JICogd2Ug Y2Fubm90IGNoYW5nZSBpdCBub3cuICBUaGUgcGF0dGVybiBoYXMgcG9zc2libHkgYmVlbiBjb3Bp ZWQgdG8gb3RoZXIKLQkgKiBleHRlbnNpb25zIHRvby4KLQkgKi8KLQlBZGRXYWl0RXZlbnRUb1Nl dChub2RlLT5hc19ldmVudHNldCwgV0xfTEFUQ0hfU0VULCBQR0lOVkFMSURfU09DS0VULAotCQkJ CQkgIE15TGF0Y2gsIE5VTEwpOwotCi0JLyogUmV0dXJuIGF0IG1vc3QgRVZFTlRfQlVGRkVSX1NJ WkUgZXZlbnRzIGluIG9uZSBjYWxsLiAqLwotCWlmIChuZXZlbnRzID4gRVZFTlRfQlVGRkVSX1NJ WkUpCi0JCW5ldmVudHMgPSBFVkVOVF9CVUZGRVJfU0laRTsKLQotCS8qCi0JICogSWYgdGhlIHRp bWVvdXQgaXMgLTEsIHdhaXQgdW50aWwgYXQgbGVhc3Qgb25lIGV2ZW50IG9jY3Vycy4gIElmIHRo ZQotCSAqIHRpbWVvdXQgaXMgMCwgcG9sbCBmb3IgZXZlbnRzLCBidXQgZG8gbm90IHdhaXQgYXQg YWxsLgotCSAqLwotCW5vY2N1cnJlZCA9IFdhaXRFdmVudFNldFdhaXQobm9kZS0+YXNfZXZlbnRz ZXQsIHRpbWVvdXQsIG9jY3VycmVkX2V2ZW50LAotCQkJCQkJCQkgbmV2ZW50cywgV0FJVF9FVkVO VF9BUFBFTkRfUkVBRFkpOwotCUZyZWVXYWl0RXZlbnRTZXQobm9kZS0+YXNfZXZlbnRzZXQpOwot CW5vZGUtPmFzX2V2ZW50c2V0ID0gTlVMTDsKLQlpZiAobm9jY3VycmVkID09IDApCi0JCXJldHVy bjsKLQotCS8qIERlbGl2ZXIgbm90aWZpY2F0aW9ucy4gKi8KLQlmb3IgKGkgPSAwOyBpIDwgbm9j Y3VycmVkOyBpKyspCi0JewotCQlXYWl0RXZlbnQgICp3ID0gJm9jY3VycmVkX2V2ZW50W2ldOwot Ci0JCS8qCi0JCSAqIEVhY2ggd2FpdGluZyBzdWJwbGFuIHNob3VsZCBoYXZlIHJlZ2lzdGVyZWQg aXRzIHdhaXQgZXZlbnQgd2l0aAotCQkgKiB1c2VyX2RhdGEgcG9pbnRpbmcgYmFjayB0byBpdHMg QXN5bmNSZXF1ZXN0LgotCQkgKi8KLQkJaWYgKCh3LT5ldmVudHMgJiBXTF9TT0NLRVRfUkVBREFC TEUpICE9IDApCi0JCXsKLQkJCUFzeW5jUmVxdWVzdCAqYXJlcSA9IChBc3luY1JlcXVlc3QgKikg dy0+dXNlcl9kYXRhOwotCi0JCQlpZiAoYXJlcS0+Y2FsbGJhY2tfcGVuZGluZykKLQkJCXsKLQkJ CQkvKgotCQkJCSAqIE1hcmsgaXQgYXMgbm8gbG9uZ2VyIG5lZWRpbmcgYSBjYWxsYmFjay4gIFdl IG11c3QgZG8gdGhpcwotCQkJCSAqIGJlZm9yZSBkaXNwYXRjaGluZyB0aGUgY2FsbGJhY2sgaW4g Y2FzZSB0aGUgY2FsbGJhY2sgcmVzZXRzCi0JCQkJICogdGhlIGZsYWcuCi0JCQkJICovCi0JCQkJ YXJlcS0+Y2FsbGJhY2tfcGVuZGluZyA9IGZhbHNlOwotCi0JCQkJLyogRG8gdGhlIGFjdHVhbCB3 b3JrLiAqLwotCQkJCUV4ZWNBc3luY05vdGlmeShhcmVxKTsKLQkJCX0KLQkJfQotCi0JCS8qIEhh bmRsZSBzdGFuZGFyZCBpbnRlcnJ1cHRzICovCi0JCWlmICgody0+ZXZlbnRzICYgV0xfTEFUQ0hf U0VUKSAhPSAwKQotCQl7Ci0JCQlSZXNldExhdGNoKE15TGF0Y2gpOwotCQkJQ0hFQ0tfRk9SX0lO VEVSUlVQVFMoKTsKLQkJfQotCX0KKwlFeGVjQXBwZW5kZXJBc3luY0V2ZW50V2FpdCgmbm9kZS0+ YXMsIHRpbWVvdXQsIFdBSVRfRVZFTlRfQVBQRU5EX1JFQURZKTsKIH0KIAogLyogLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpA QCAtMTE2NSwxNCArODQyLDE0IEBAIEV4ZWNBc3luY0FwcGVuZFJlc3BvbnNlKEFzeW5jUmVxdWVz dCAqYXJlcSkKIAl9CiAKIAkvKiBTYXZlIHJlc3VsdCBzbyB3ZSBjYW4gcmV0dXJuIGl0LiAqLwot CUFzc2VydChub2RlLT5hc19uYXN5bmNyZXN1bHRzIDwgbm9kZS0+YXNfbmFzeW5jcGxhbnMpOwot CW5vZGUtPmFzX2FzeW5jcmVzdWx0c1tub2RlLT5hc19uYXN5bmNyZXN1bHRzKytdID0gc2xvdDsK KwlBc3NlcnQobm9kZS0+YXNfbmFzeW5jcmVzdWx0cyA8IG5vZGUtPmFzLm5hc3luY3BsYW5zKTsK Kwlub2RlLT5hcy5hc3luY3Jlc3VsdHNbbm9kZS0+YXNfbmFzeW5jcmVzdWx0cysrXSA9IHNsb3Q7 CiAKIAkvKgogCSAqIE1hcmsgdGhlIHN1YnBsYW4gdGhhdCByZXR1cm5lZCBhIHJlc3VsdCBhcyBy ZWFkeSBmb3IgYSBuZXcgcmVxdWVzdC4gIFdlCiAJICogZG9uJ3QgbGF1bmNoIGFub3RoZXIgb25l IGhlcmUgaW1tZWRpYXRlbHkgYmVjYXVzZSBpdCBtaWdodCBjb21wbGV0ZS4KIAkgKi8KLQlub2Rl LT5hc19uZWVkcmVxdWVzdCA9IGJtc19hZGRfbWVtYmVyKG5vZGUtPmFzX25lZWRyZXF1ZXN0LAor CW5vZGUtPmFzLm5lZWRyZXF1ZXN0ID0gYm1zX2FkZF9tZW1iZXIobm9kZS0+YXMubmVlZHJlcXVl c3QsCiAJCQkJCQkJCQkJICBhcmVxLT5yZXF1ZXN0X2luZGV4KTsKIH0KIApAQCAtMTE4NywxMCAr ODY0LDEwIEBAIEV4ZWNBc3luY0FwcGVuZFJlc3BvbnNlKEFzeW5jUmVxdWVzdCAqYXJlcSkKIHN0 YXRpYyB2b2lkCiBjbGFzc2lmeV9tYXRjaGluZ19zdWJwbGFucyhBcHBlbmRTdGF0ZSAqbm9kZSkK IHsKLQlBc3NlcnQobm9kZS0+YXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCk7CisJQXNzZXJ0 KG5vZGUtPmFzLnZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQpOwogCiAJLyogTm90aGluZyB0byBk byBpZiB0aGVyZSBhcmUgbm8gdmFsaWQgc3VicGxhbnMuICovCi0JaWYgKGJtc19pc19lbXB0eShu b2RlLT5hc192YWxpZF9zdWJwbGFucykpCisJaWYgKGJtc19pc19lbXB0eShub2RlLT5hcy52YWxp ZF9zdWJwbGFucykpCiAJewogCQlub2RlLT5hc19zeW5jZG9uZSA9IHRydWU7CiAJCW5vZGUtPmFz X25hc3luY3JlbWFpbiA9IDA7CkBAIC0xMTk5LDggKzg3Niw4IEBAIGNsYXNzaWZ5X21hdGNoaW5n X3N1YnBsYW5zKEFwcGVuZFN0YXRlICpub2RlKQogCiAJLyogTm8gdmFsaWQgYXN5bmMgc3VicGxh bnMgaWRlbnRpZmllZC4gKi8KIAlpZiAoIWNsYXNzaWZ5X21hdGNoaW5nX3N1YnBsYW5zX2NvbW1v bigKLQkJCQkJCQkJCQkgICAmbm9kZS0+YXNfdmFsaWRfc3VicGxhbnMsCi0JCQkJCQkJCQkJICAg bm9kZS0+YXNfYXN5bmNwbGFucywKLQkJCQkJCQkJCQkgICAmbm9kZS0+YXNfdmFsaWRfYXN5bmNw bGFucykpCisJCQkJCQkJCQkJICAgJm5vZGUtPmFzLnZhbGlkX3N1YnBsYW5zLAorCQkJCQkJCQkJ CSAgIG5vZGUtPmFzLmFzeW5jcGxhbnMsCisJCQkJCQkJCQkJICAgJm5vZGUtPmFzLnZhbGlkX2Fz eW5jcGxhbnMpKQogCQlub2RlLT5hc19uYXN5bmNyZW1haW4gPSAwOwogfQpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMgYi9zcmMvYmFja2VuZC9leGVj dXRvci9ub2RlTWVyZ2VBcHBlbmQuYwppbmRleCBmMWMyNjdlYjllYi4uZTFhMjA3YWViODUgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5jCisrKyBiL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5jCkBAIC0zOCw2ICszOCw3IEBACiAK ICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCisjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY0FwcGVuZC5o IgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWN1dG9yLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhl Y0FzeW5jLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5oIgpAQCAtNzYsMTQg Kzc3LDcgQEAgTWVyZ2VBcHBlbmRTdGF0ZSAqCiBFeGVjSW5pdE1lcmdlQXBwZW5kKE1lcmdlQXBw ZW5kICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIHsKIAlNZXJnZUFwcGVuZFN0 YXRlICptZXJnZXN0YXRlID0gbWFrZU5vZGUoTWVyZ2VBcHBlbmRTdGF0ZSk7Ci0JUGxhblN0YXRl ICoqbWVyZ2VwbGFuc3RhdGVzOwotCWNvbnN0IFR1cGxlVGFibGVTbG90T3BzICptZXJnZW9wczsK LQlCaXRtYXBzZXQgICp2YWxpZHN1YnBsYW5zOwotCWludAkJCW5wbGFuczsKLQlpbnQJCQlpLAot CQkJCWo7Ci0JQml0bWFwc2V0ICAqYXN5bmNwbGFuczsKLQlpbnQJCQluYXN5bmNwbGFuczsKKwlp bnQJCQlpOwogCiAJLyogY2hlY2sgZm9yIHVuc3VwcG9ydGVkIGZsYWdzICovCiAJQXNzZXJ0KCEo ZWZsYWdzICYgKEVYRUNfRkxBR19CQUNLV0FSRCB8IEVYRUNfRkxBR19NQVJLKSkpOwpAQCAtOTEs MTU0ICs4NSwyNyBAQCBFeGVjSW5pdE1lcmdlQXBwZW5kKE1lcmdlQXBwZW5kICpub2RlLCBFU3Rh dGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkvKgogCSAqIGNyZWF0ZSBuZXcgTWVyZ2VBcHBlbmRT dGF0ZSBmb3Igb3VyIG5vZGUKIAkgKi8KLQltZXJnZXN0YXRlLT5wcy5wbGFuID0gKFBsYW4gKikg bm9kZTsKLQltZXJnZXN0YXRlLT5wcy5zdGF0ZSA9IGVzdGF0ZTsKLQltZXJnZXN0YXRlLT5wcy5F eGVjUHJvY05vZGUgPSBFeGVjTWVyZ2VBcHBlbmQ7Ci0KLQkvKiBJZiBydW4tdGltZSBwYXJ0aXRp b24gcHJ1bmluZyBpcyBlbmFibGVkLCB0aGVuIHNldCB0aGF0IHVwIG5vdyAqLwotCWlmIChub2Rl LT5wYXJ0X3BydW5lX2luZGV4ID49IDApCi0JewotCQlQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVu ZXN0YXRlOwotCi0JCS8qCi0JCSAqIFNldCB1cCBwcnVuaW5nIGRhdGEgc3RydWN0dXJlLiAgVGhp cyBhbHNvIGluaXRpYWxpemVzIHRoZSBzZXQgb2YKLQkJICogc3VicGxhbnMgdG8gaW5pdGlhbGl6 ZSAodmFsaWRzdWJwbGFucykgYnkgdGFraW5nIGludG8gYWNjb3VudCB0aGUKLQkJICogcmVzdWx0 IG9mIHBlcmZvcm1pbmcgaW5pdGlhbCBwcnVuaW5nIGlmIGFueS4KLQkJICovCi0JCXBydW5lc3Rh dGUgPSBFeGVjSW5pdFBhcnRpdGlvbkV4ZWNQcnVuaW5nKCZtZXJnZXN0YXRlLT5wcywKLQkJCQkJ CQkJCQkJCSAgbGlzdF9sZW5ndGgobm9kZS0+bWVyZ2VwbGFucyksCi0JCQkJCQkJCQkJCQkgIG5v ZGUtPnBhcnRfcHJ1bmVfaW5kZXgsCi0JCQkJCQkJCQkJCQkgIG5vZGUtPmFwcHJlbGlkcywKLQkJ CQkJCQkJCQkJCSAgJnZhbGlkc3VicGxhbnMpOwotCQltZXJnZXN0YXRlLT5tc19wcnVuZV9zdGF0 ZSA9IHBydW5lc3RhdGU7Ci0JCW5wbGFucyA9IGJtc19udW1fbWVtYmVycyh2YWxpZHN1YnBsYW5z KTsKLQotCQkvKgotCQkgKiBXaGVuIG5vIHJ1bi10aW1lIHBydW5pbmcgaXMgcmVxdWlyZWQgYW5k IHRoZXJlJ3MgYXQgbGVhc3Qgb25lCi0JCSAqIHN1YnBsYW4sIHdlIGNhbiBmaWxsIG1zX3ZhbGlk X3N1YnBsYW5zIGltbWVkaWF0ZWx5LCBwcmV2ZW50aW5nCi0JCSAqIGxhdGVyIGNhbGxzIHRvIEV4 ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucy4KLQkJICovCi0JCWlmICghcHJ1bmVzdGF0ZS0+ZG9fZXhl Y19wcnVuZSAmJiBucGxhbnMgPiAwKQotCQl7Ci0JCQltZXJnZXN0YXRlLT5tc192YWxpZF9zdWJw bGFucyA9IGJtc19hZGRfcmFuZ2UoTlVMTCwgMCwgbnBsYW5zIC0gMSk7Ci0JCQltZXJnZXN0YXRl LT5tc192YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkID0gdHJ1ZTsKLQkJfQotCX0KLQllbHNlCi0J ewotCQlucGxhbnMgPSBsaXN0X2xlbmd0aChub2RlLT5tZXJnZXBsYW5zKTsKLQotCQkvKgotCQkg KiBXaGVuIHJ1bi10aW1lIHBhcnRpdGlvbiBwcnVuaW5nIGlzIG5vdCBlbmFibGVkIHdlIGNhbiBq dXN0IG1hcmsgYWxsCi0JCSAqIHN1YnBsYW5zIGFzIHZhbGlkOyB0aGV5IG11c3QgYWxzbyBhbGwg YmUgaW5pdGlhbGl6ZWQuCi0JCSAqLwotCQlBc3NlcnQobnBsYW5zID4gMCk7Ci0JCW1lcmdlc3Rh dGUtPm1zX3ZhbGlkX3N1YnBsYW5zID0gdmFsaWRzdWJwbGFucyA9Ci0JCQlibXNfYWRkX3Jhbmdl KE5VTEwsIDAsIG5wbGFucyAtIDEpOwotCQltZXJnZXN0YXRlLT5tc192YWxpZF9zdWJwbGFuc19p ZGVudGlmaWVkID0gdHJ1ZTsKLQkJbWVyZ2VzdGF0ZS0+bXNfcHJ1bmVfc3RhdGUgPSBOVUxMOwot CX0KLQotCW1lcmdlcGxhbnN0YXRlcyA9IHBhbGxvY19hcnJheShQbGFuU3RhdGUgKiwgbnBsYW5z KTsKLQltZXJnZXN0YXRlLT5tZXJnZXBsYW5zID0gbWVyZ2VwbGFuc3RhdGVzOwotCW1lcmdlc3Rh dGUtPm1zX25wbGFucyA9IG5wbGFuczsKLQotCW1lcmdlc3RhdGUtPm1zX3Nsb3RzID0gcGFsbG9j MF9hcnJheShUdXBsZVRhYmxlU2xvdCAqLCBucGxhbnMpOwotCW1lcmdlc3RhdGUtPm1zX2hlYXAg PSBiaW5hcnloZWFwX2FsbG9jYXRlKG5wbGFucywgaGVhcF9jb21wYXJlX3Nsb3RzLAorCW1lcmdl c3RhdGUtPm1zLnBzLnBsYW4gPSAoUGxhbiAqKSBub2RlOworCW1lcmdlc3RhdGUtPm1zLnBzLnN0 YXRlID0gZXN0YXRlOworCW1lcmdlc3RhdGUtPm1zLnBzLkV4ZWNQcm9jTm9kZSA9IEV4ZWNNZXJn ZUFwcGVuZDsKKworCS8qIEluaXRpYWxpemUgY29tbW9uIGZpZWxkcyAqLworCUV4ZWNJbml0QXBw ZW5kZXIoJm1lcmdlc3RhdGUtPm1zLAorCQkJCQkgJm5vZGUtPmFwLAorCQkJCQkgZXN0YXRlLAor CQkJCQkgZWZsYWdzLAorCQkJCQkgLTEsCisJCQkJCSBOVUxMKTsKKworCWlmIChtZXJnZXN0YXRl LT5tcy5uYXN5bmNwbGFucyA+IDAgJiYgbWVyZ2VzdGF0ZS0+bXMudmFsaWRfc3VicGxhbnNfaWRl bnRpZmllZCkKKwkJY2xhc3NpZnlfbWF0Y2hpbmdfc3VicGxhbnMobWVyZ2VzdGF0ZSk7CisKKwlt ZXJnZXN0YXRlLT5tc19zbG90cyA9IHBhbGxvYzBfYXJyYXkoVHVwbGVUYWJsZVNsb3QgKiwgbWVy Z2VzdGF0ZS0+bXMubnBsYW5zKTsKKwltZXJnZXN0YXRlLT5tc19oZWFwID0gYmluYXJ5aGVhcF9h bGxvY2F0ZShtZXJnZXN0YXRlLT5tcy5ucGxhbnMsIGhlYXBfY29tcGFyZV9zbG90cywKIAkJCQkJ CQkJCQkJICBtZXJnZXN0YXRlKTsKIAotCS8qCi0JICogY2FsbCBFeGVjSW5pdE5vZGUgb24gZWFj aCBvZiB0aGUgdmFsaWQgcGxhbnMgdG8gYmUgZXhlY3V0ZWQgYW5kIHNhdmUKLQkgKiB0aGUgcmVz dWx0cyBpbnRvIHRoZSBtZXJnZXBsYW5zdGF0ZXMgYXJyYXkuCi0JICovCi0JaiA9IDA7Ci0JYXN5 bmNwbGFucyA9IE5VTEw7Ci0JbmFzeW5jcGxhbnMgPSAwOwotCi0JaSA9IC0xOwotCXdoaWxlICgo aSA9IGJtc19uZXh0X21lbWJlcih2YWxpZHN1YnBsYW5zLCBpKSkgPj0gMCkKLQl7Ci0JCVBsYW4J ICAgKmluaXROb2RlID0gKFBsYW4gKikgbGlzdF9udGgobm9kZS0+bWVyZ2VwbGFucywgaSk7Ci0K LQkJLyoKLQkJICogUmVjb3JkIGFzeW5jIHN1YnBsYW5zLiAgV2hlbiBleGVjdXRpbmcgRXZhbFBs YW5RdWFsLCB3ZSB0cmVhdCB0aGVtCi0JCSAqIGFzIHN5bmMgb25lczsgZG9uJ3QgZG8gdGhpcyB3 aGVuIGluaXRpYWxpemluZyBhbiBFdmFsUGxhblF1YWwgcGxhbgotCQkgKiB0cmVlLgotCQkgKi8K LQkJaWYgKGluaXROb2RlLT5hc3luY19jYXBhYmxlICYmIGVzdGF0ZS0+ZXNfZXBxX2FjdGl2ZSA9 PSBOVUxMKQotCQl7Ci0JCQlhc3luY3BsYW5zID0gYm1zX2FkZF9tZW1iZXIoYXN5bmNwbGFucywg aik7Ci0JCQluYXN5bmNwbGFucysrOwotCQl9Ci0KLQkJbWVyZ2VwbGFuc3RhdGVzW2orK10gPSBF eGVjSW5pdE5vZGUoaW5pdE5vZGUsIGVzdGF0ZSwgZWZsYWdzKTsKLQl9Ci0KLQkvKgotCSAqIElu aXRpYWxpemUgTWVyZ2VBcHBlbmQncyByZXN1bHQgdHVwbGUgdHlwZSBhbmQgc2xvdC4gIElmIHRo ZSBjaGlsZAotCSAqIHBsYW5zIGFsbCBwcm9kdWNlIHRoZSBzYW1lIGZpeGVkIHNsb3QgdHlwZSwg d2UgY2FuIHVzZSB0aGF0IHNsb3QgdHlwZTsKLQkgKiBvdGhlcndpc2UgbWFrZSBhIHZpcnR1YWwg c2xvdC4gIChOb3RlIHRoYXQgdGhlIHJlc3VsdCBzbG90IGl0c2VsZiBpcwotCSAqIHVzZWQgb25s eSB0byByZXR1cm4gYSBudWxsIHR1cGxlIGF0IGVuZCBvZiBleGVjdXRpb247IHJlYWwgdHVwbGVz IGFyZQotCSAqIHJldHVybmVkIHRvIHRoZSBjYWxsZXIgaW4gdGhlIGNoaWxkcmVuJ3Mgb3duIHJl c3VsdCBzbG90cy4gIFdoYXQgd2UgYXJlCi0JICogZG9pbmcgaGVyZSBpcyBhbGxvd2luZyB0aGUg cGFyZW50IHBsYW4gbm9kZSB0byBvcHRpbWl6ZSBpZiB0aGUKLQkgKiBNZXJnZUFwcGVuZCB3aWxs IHJldHVybiBvbmx5IG9uZSBraW5kIG9mIHNsb3QuKQotCSAqLwotCW1lcmdlb3BzID0gRXhlY0dl dENvbW1vblNsb3RPcHMobWVyZ2VwbGFuc3RhdGVzLCBqKTsKLQlpZiAobWVyZ2VvcHMgIT0gTlVM TCkKLQl7Ci0JCUV4ZWNJbml0UmVzdWx0VHVwbGVTbG90VEwoJm1lcmdlc3RhdGUtPnBzLCBtZXJn ZW9wcyk7Ci0JfQotCWVsc2UKLQl7Ci0JCUV4ZWNJbml0UmVzdWx0VHVwbGVTbG90VEwoJm1lcmdl c3RhdGUtPnBzLCAmVFRTT3BzVmlydHVhbCk7Ci0JCS8qIHNob3cgdGhhdCB0aGUgb3V0cHV0IHNs b3QgdHlwZSBpcyBub3QgZml4ZWQgKi8KLQkJbWVyZ2VzdGF0ZS0+cHMucmVzdWx0b3Bzc2V0ID0g dHJ1ZTsKLQkJbWVyZ2VzdGF0ZS0+cHMucmVzdWx0b3BzZml4ZWQgPSBmYWxzZTsKLQl9Ci0KLQkv KgotCSAqIE1pc2NlbGxhbmVvdXMgaW5pdGlhbGl6YXRpb24KLQkgKi8KLQltZXJnZXN0YXRlLT5w cy5wc19Qcm9qSW5mbyA9IE5VTEw7Ci0KLQkvKiBJbml0aWFsaXplIGFzeW5jIHN0YXRlICovCi0J bWVyZ2VzdGF0ZS0+bXNfYXN5bmNwbGFucyA9IGFzeW5jcGxhbnM7Ci0JbWVyZ2VzdGF0ZS0+bXNf bmFzeW5jcGxhbnMgPSBuYXN5bmNwbGFuczsKLQltZXJnZXN0YXRlLT5tc19hc3luY3JlcXVlc3Rz ID0gTlVMTDsKLQltZXJnZXN0YXRlLT5tc19hc3luY3Jlc3VsdHMgPSBOVUxMOwogCW1lcmdlc3Rh dGUtPm1zX2hhc19hc3luY3Jlc3VsdHMgPSBOVUxMOwogCW1lcmdlc3RhdGUtPm1zX2FzeW5jcmVt YWluID0gTlVMTDsKLQltZXJnZXN0YXRlLT5tc19uZWVkcmVxdWVzdCA9IE5VTEw7Ci0JbWVyZ2Vz dGF0ZS0+bXNfZXZlbnRzZXQgPSBOVUxMOwotCW1lcmdlc3RhdGUtPm1zX3ZhbGlkX2FzeW5jcGxh bnMgPSBOVUxMOwotCi0JaWYgKG5hc3luY3BsYW5zID4gMCkKLQl7Ci0JCW1lcmdlc3RhdGUtPm1z X2FzeW5jcmVxdWVzdHMgPSAoQXN5bmNSZXF1ZXN0ICoqKQotCQkJcGFsbG9jMChucGxhbnMgKiBz aXplb2YoQXN5bmNSZXF1ZXN0ICopKTsKLQotCQlpID0gLTE7Ci0JCXdoaWxlICgoaSA9IGJtc19u ZXh0X21lbWJlcihhc3luY3BsYW5zLCBpKSkgPj0gMCkKLQkJewotCQkJQXN5bmNSZXF1ZXN0ICph cmVxOwotCi0JCQlhcmVxID0gcGFsbG9jKHNpemVvZihBc3luY1JlcXVlc3QpKTsKLQkJCWFyZXEt PnJlcXVlc3RvciA9IChQbGFuU3RhdGUgKikgbWVyZ2VzdGF0ZTsKLQkJCWFyZXEtPnJlcXVlc3Rl ZSA9IG1lcmdlcGxhbnN0YXRlc1tpXTsKLQkJCWFyZXEtPnJlcXVlc3RfaW5kZXggPSBpOwotCQkJ YXJlcS0+Y2FsbGJhY2tfcGVuZGluZyA9IGZhbHNlOwotCQkJYXJlcS0+cmVxdWVzdF9jb21wbGV0 ZSA9IGZhbHNlOwotCQkJYXJlcS0+cmVzdWx0ID0gTlVMTDsKLQotCQkJbWVyZ2VzdGF0ZS0+bXNf YXN5bmNyZXF1ZXN0c1tpXSA9IGFyZXE7Ci0JCX0KLQotCQltZXJnZXN0YXRlLT5tc19hc3luY3Jl c3VsdHMgPSAoVHVwbGVUYWJsZVNsb3QgKiopCi0JCQlwYWxsb2MwKG5wbGFucyAqIHNpemVvZihU dXBsZVRhYmxlU2xvdCAqKSk7Ci0KLQkJaWYgKG1lcmdlc3RhdGUtPm1zX3ZhbGlkX3N1YnBsYW5z X2lkZW50aWZpZWQpCi0JCQljbGFzc2lmeV9tYXRjaGluZ19zdWJwbGFucyhtZXJnZXN0YXRlKTsK LQl9CiAKIAkvKgogCSAqIGluaXRpYWxpemUgc29ydC1rZXkgaW5mb3JtYXRpb24KQEAgLTI5Mywy MCArMTYwLDIwIEBAIEV4ZWNNZXJnZUFwcGVuZChQbGFuU3RhdGUgKnBzdGF0ZSkKIAlpZiAoIW5v ZGUtPm1zX2luaXRpYWxpemVkKQogCXsKIAkJLyogTm90aGluZyB0byBkbyBpZiBhbGwgc3VicGxh bnMgd2VyZSBwcnVuZWQgKi8KLQkJaWYgKG5vZGUtPm1zX25wbGFucyA9PSAwKQotCQkJcmV0dXJu IEV4ZWNDbGVhclR1cGxlKG5vZGUtPnBzLnBzX1Jlc3VsdFR1cGxlU2xvdCk7CisJCWlmIChub2Rl LT5tcy5ucGxhbnMgPT0gMCkKKwkJCXJldHVybiBFeGVjQ2xlYXJUdXBsZShub2RlLT5tcy5wcy5w c19SZXN1bHRUdXBsZVNsb3QpOwogCiAJCS8qIElmIHdlJ3ZlIHlldCB0byBkZXRlcm1pbmUgdGhl IHZhbGlkIHN1YnBsYW5zIHRoZW4gZG8gc28gbm93LiAqLwotCQlpZiAoIW5vZGUtPm1zX3ZhbGlk X3N1YnBsYW5zX2lkZW50aWZpZWQpCisJCWlmICghbm9kZS0+bXMudmFsaWRfc3VicGxhbnNfaWRl bnRpZmllZCkKIAkJewotCQkJbm9kZS0+bXNfdmFsaWRfc3VicGxhbnMgPQotCQkJCUV4ZWNGaW5k TWF0Y2hpbmdTdWJQbGFucyhub2RlLT5tc19wcnVuZV9zdGF0ZSwgZmFsc2UsIE5VTEwpOwotCQkJ bm9kZS0+bXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCA9IHRydWU7CisJCQlub2RlLT5tcy52 YWxpZF9zdWJwbGFucyA9CisJCQkJRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKG5vZGUtPm1zLnBy dW5lX3N0YXRlLCBmYWxzZSwgTlVMTCk7CisJCQlub2RlLT5tcy52YWxpZF9zdWJwbGFuc19pZGVu dGlmaWVkID0gdHJ1ZTsKIAkJCWNsYXNzaWZ5X21hdGNoaW5nX3N1YnBsYW5zKG5vZGUpOwogCQl9 CiAKIAkJLyogSWYgdGhlcmUgYXJlIGFueSBhc3luYyBzdWJwbGFucywgYmVnaW4gZXhlY3V0aW5n IHRoZW0uICovCi0JCWlmIChub2RlLT5tc19uYXN5bmNwbGFucyA+IDApCisJCWlmIChub2RlLT5t cy5uYXN5bmNwbGFucyA+IDApCiAJCQlFeGVjTWVyZ2VBcHBlbmRBc3luY0JlZ2luKG5vZGUpOwog CiAJCS8qCkBAIC0zMTQsMTYgKzE4MSwxNiBAQCBFeGVjTWVyZ2VBcHBlbmQoUGxhblN0YXRlICpw c3RhdGUpCiAJCSAqIGFuZCBzZXQgdXAgdGhlIGhlYXAuCiAJCSAqLwogCQlpID0gLTE7Ci0JCXdo aWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihub2RlLT5tc192YWxpZF9zdWJwbGFucywgaSkpID49 IDApCisJCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihub2RlLT5tcy52YWxpZF9zdWJwbGFu cywgaSkpID49IDApCiAJCXsKLQkJCW5vZGUtPm1zX3Nsb3RzW2ldID0gRXhlY1Byb2NOb2RlKG5v ZGUtPm1lcmdlcGxhbnNbaV0pOworCQkJbm9kZS0+bXNfc2xvdHNbaV0gPSBFeGVjUHJvY05vZGUo bm9kZS0+bXMucGxhbnNbaV0pOwogCQkJaWYgKCFUdXBJc051bGwobm9kZS0+bXNfc2xvdHNbaV0p KQogCQkJCWJpbmFyeWhlYXBfYWRkX3Vub3JkZXJlZChub2RlLT5tc19oZWFwLCBJbnQzMkdldERh dHVtKGkpKTsKIAkJfQogCiAJCS8qIExvb2sgYXQgdmFsaWQgYXN5bmMgc3VicGxhbnMgKi8KIAkJ aSA9IC0xOwotCQl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIobm9kZS0+bXNfdmFsaWRfYXN5 bmNwbGFucywgaSkpID49IDApCisJCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihub2RlLT5t cy52YWxpZF9hc3luY3BsYW5zLCBpKSkgPj0gMCkKIAkJewogCQkJRXhlY01lcmdlQXBwZW5kQXN5 bmNHZXROZXh0KG5vZGUsIGkpOwogCQkJaWYgKCFUdXBJc051bGwobm9kZS0+bXNfc2xvdHNbaV0p KQpAQCAtMzQ0LDEyICsyMTEsMTIgQEAgRXhlY01lcmdlQXBwZW5kKFBsYW5TdGF0ZSAqcHN0YXRl KQogCQkgKiB0byBub3QgcHVsbCB0dXBsZXMgdW50aWwgbmVjZXNzYXJ5LikKIAkJICovCiAJCWkg PSBEYXR1bUdldEludDMyKGJpbmFyeWhlYXBfZmlyc3Qobm9kZS0+bXNfaGVhcCkpOwotCQlpZiAo Ym1zX2lzX21lbWJlcihpLCBub2RlLT5tc19hc3luY3BsYW5zKSkKKwkJaWYgKGJtc19pc19tZW1i ZXIoaSwgbm9kZS0+bXMuYXN5bmNwbGFucykpCiAJCQlFeGVjTWVyZ2VBcHBlbmRBc3luY0dldE5l eHQobm9kZSwgaSk7CiAJCWVsc2UKIAkJewotCQkJQXNzZXJ0KGJtc19pc19tZW1iZXIoaSwgbm9k ZS0+bXNfdmFsaWRfc3VicGxhbnMpKTsKLQkJCW5vZGUtPm1zX3Nsb3RzW2ldID0gRXhlY1Byb2NO b2RlKG5vZGUtPm1lcmdlcGxhbnNbaV0pOworCQkJQXNzZXJ0KGJtc19pc19tZW1iZXIoaSwgbm9k ZS0+bXMudmFsaWRfc3VicGxhbnMpKTsKKwkJCW5vZGUtPm1zX3Nsb3RzW2ldID0gRXhlY1Byb2NO b2RlKG5vZGUtPm1zLnBsYW5zW2ldKTsKIAkJfQogCQlpZiAoIVR1cElzTnVsbChub2RlLT5tc19z bG90c1tpXSkpCiAJCQliaW5hcnloZWFwX3JlcGxhY2VfZmlyc3Qobm9kZS0+bXNfaGVhcCwgSW50 MzJHZXREYXR1bShpKSk7CkBAIC0zNjAsNyArMjI3LDcgQEAgRXhlY01lcmdlQXBwZW5kKFBsYW5T dGF0ZSAqcHN0YXRlKQogCWlmIChiaW5hcnloZWFwX2VtcHR5KG5vZGUtPm1zX2hlYXApKQogCXsK IAkJLyogQWxsIHRoZSBzdWJwbGFucyBhcmUgZXhoYXVzdGVkLCBhbmQgc28gaXMgdGhlIGhlYXAg Ki8KLQkJcmVzdWx0ID0gRXhlY0NsZWFyVHVwbGUobm9kZS0+cHMucHNfUmVzdWx0VHVwbGVTbG90 KTsKKwkJcmVzdWx0ID0gRXhlY0NsZWFyVHVwbGUobm9kZS0+bXMucHMucHNfUmVzdWx0VHVwbGVT bG90KTsKIAl9CiAJZWxzZQogCXsKQEAgLTQyNiw4MSArMjkzLDIxIEBAIGhlYXBfY29tcGFyZV9z bG90cyhEYXR1bSBhLCBEYXR1bSBiLCB2b2lkICphcmcpCiB2b2lkCiBFeGVjRW5kTWVyZ2VBcHBl bmQoTWVyZ2VBcHBlbmRTdGF0ZSAqbm9kZSkKIHsKLQlQbGFuU3RhdGUgKiptZXJnZXBsYW5zOwot CWludAkJCW5wbGFuczsKLQlpbnQJCQlpOwotCi0JLyoKLQkgKiBnZXQgaW5mb3JtYXRpb24gZnJv bSB0aGUgbm9kZQotCSAqLwotCW1lcmdlcGxhbnMgPSBub2RlLT5tZXJnZXBsYW5zOwotCW5wbGFu cyA9IG5vZGUtPm1zX25wbGFuczsKLQotCS8qCi0JICogc2h1dCBkb3duIGVhY2ggb2YgdGhlIHN1 YnNjYW5zCi0JICovCi0JZm9yIChpID0gMDsgaSA8IG5wbGFuczsgaSsrKQotCQlFeGVjRW5kTm9k ZShtZXJnZXBsYW5zW2ldKTsKKwlFeGVjRW5kQXBwZW5kZXIoJm5vZGUtPm1zKTsKIH0KIAogdm9p ZAogRXhlY1JlU2Nhbk1lcmdlQXBwZW5kKE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUpCiB7Ci0JaW50 CQkJaTsKLQlpbnQJCQluYXN5bmNwbGFucyA9IG5vZGUtPm1zX25hc3luY3BsYW5zOworCWludAkJ CW5hc3luY3BsYW5zID0gbm9kZS0+bXMubmFzeW5jcGxhbnM7CiAKLQkvKgotCSAqIElmIGFueSBQ QVJBTV9FWEVDIFBhcmFtcyB1c2VkIGluIHBydW5pbmcgZXhwcmVzc2lvbnMgaGF2ZSBjaGFuZ2Vk LCB0aGVuCi0JICogd2UnZCBiZXR0ZXIgdW5zZXQgdGhlIHZhbGlkIHN1YnBsYW5zIHNvIHRoYXQg dGhleSBhcmUgcmVzZWxlY3RlZCBmb3IKLQkgKiB0aGUgbmV3IHBhcmFtZXRlciB2YWx1ZXMuCi0J ICovCi0JaWYgKG5vZGUtPm1zX3BydW5lX3N0YXRlICYmCi0JCWJtc19vdmVybGFwKG5vZGUtPnBz LmNoZ1BhcmFtLAotCQkJCQlub2RlLT5tc19wcnVuZV9zdGF0ZS0+ZXhlY3BhcmFtaWRzKSkKLQl7 Ci0JCW5vZGUtPm1zX3ZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQgPSBmYWxzZTsKLQkJYm1zX2Zy ZWUobm9kZS0+bXNfdmFsaWRfc3VicGxhbnMpOwotCQlub2RlLT5tc192YWxpZF9zdWJwbGFucyA9 IE5VTEw7Ci0JCWJtc19mcmVlKG5vZGUtPm1zX3ZhbGlkX2FzeW5jcGxhbnMpOwotCQlub2RlLT5t c192YWxpZF9hc3luY3BsYW5zID0gTlVMTDsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbm9kZS0+ bXNfbnBsYW5zOyBpKyspCi0JewotCQlQbGFuU3RhdGUgICpzdWJub2RlID0gbm9kZS0+bWVyZ2Vw bGFuc1tpXTsKLQotCQkvKgotCQkgKiBFeGVjUmVTY2FuIGRvZXNuJ3Qga25vdyBhYm91dCBteSBz dWJwbGFucywgc28gSSBoYXZlIHRvIGRvCi0JCSAqIGNoYW5nZWQtcGFyYW1ldGVyIHNpZ25hbGlu ZyBteXNlbGYuCi0JCSAqLwotCQlpZiAobm9kZS0+cHMuY2hnUGFyYW0gIT0gTlVMTCkKLQkJCVVw ZGF0ZUNoYW5nZWRQYXJhbVNldChzdWJub2RlLCBub2RlLT5wcy5jaGdQYXJhbSk7Ci0KLQkJLyoK LQkJICogSWYgY2hnUGFyYW0gb2Ygc3Vibm9kZSBpcyBub3QgbnVsbCB0aGVuIHBsYW4gd2lsbCBi ZSByZS1zY2FubmVkIGJ5Ci0JCSAqIGZpcnN0IEV4ZWNQcm9jTm9kZS4KLQkJICovCi0JCWlmIChz dWJub2RlLT5jaGdQYXJhbSA9PSBOVUxMKQotCQkJRXhlY1JlU2NhbihzdWJub2RlKTsKLQl9CisJ RXhlY1JlU2NhbkFwcGVuZGVyKCZub2RlLT5tcyk7CiAKLQkvKiBSZXNldCBhc3luYyBzdGF0ZSAq LworCS8qIFJlc2V0IHNwZWNpZmljIG1lcmdlIGFwcGVuZCBhc3luYyBzdGF0ZSAqLwogCWlmIChu YXN5bmNwbGFucyA+IDApCiAJewotCQlpID0gLTE7Ci0JCXdoaWxlICgoaSA9IGJtc19uZXh0X21l bWJlcihub2RlLT5tc19hc3luY3BsYW5zLCBpKSkgPj0gMCkKLQkJewotCQkJQXN5bmNSZXF1ZXN0 ICphcmVxID0gbm9kZS0+bXNfYXN5bmNyZXF1ZXN0c1tpXTsKLQotCQkJYXJlcS0+Y2FsbGJhY2tf cGVuZGluZyA9IGZhbHNlOwotCQkJYXJlcS0+cmVxdWVzdF9jb21wbGV0ZSA9IGZhbHNlOwotCQkJ YXJlcS0+cmVzdWx0ID0gTlVMTDsKLQkJfQotCiAJCWJtc19mcmVlKG5vZGUtPm1zX2FzeW5jcmVt YWluKTsKIAkJbm9kZS0+bXNfYXN5bmNyZW1haW4gPSBOVUxMOwotCQlibXNfZnJlZShub2RlLT5t c19uZWVkcmVxdWVzdCk7Ci0JCW5vZGUtPm1zX25lZWRyZXF1ZXN0ID0gTlVMTDsKIAkJYm1zX2Zy ZWUobm9kZS0+bXNfaGFzX2FzeW5jcmVzdWx0cyk7CiAJCW5vZGUtPm1zX2hhc19hc3luY3Jlc3Vs dHMgPSBOVUxMOwogCX0KQEAgLTUxOSwxMCArMzI2LDEwIEBAIEV4ZWNSZVNjYW5NZXJnZUFwcGVu ZChNZXJnZUFwcGVuZFN0YXRlICpub2RlKQogc3RhdGljIHZvaWQKIGNsYXNzaWZ5X21hdGNoaW5n X3N1YnBsYW5zKE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUpCiB7Ci0JQXNzZXJ0KG5vZGUtPm1zX3Zh bGlkX3N1YnBsYW5zX2lkZW50aWZpZWQpOworCUFzc2VydChub2RlLT5tcy52YWxpZF9zdWJwbGFu c19pZGVudGlmaWVkKTsKIAogCS8qIE5vdGhpbmcgdG8gZG8gaWYgdGhlcmUgYXJlIG5vIHZhbGlk IHN1YnBsYW5zLiAqLwotCWlmIChibXNfaXNfZW1wdHkobm9kZS0+bXNfdmFsaWRfc3VicGxhbnMp KQorCWlmIChibXNfaXNfZW1wdHkobm9kZS0+bXMudmFsaWRfc3VicGxhbnMpKQogCXsKIAkJbm9k ZS0+bXNfYXN5bmNyZW1haW4gPSBOVUxMOwogCQlyZXR1cm47CkBAIC01MzAsOSArMzM3LDkgQEAg Y2xhc3NpZnlfbWF0Y2hpbmdfc3VicGxhbnMoTWVyZ2VBcHBlbmRTdGF0ZSAqbm9kZSkKIAogCS8q IE5vIHZhbGlkIGFzeW5jIHN1YnBsYW5zIGlkZW50aWZpZWQuICovCiAJaWYgKCFjbGFzc2lmeV9t YXRjaGluZ19zdWJwbGFuc19jb21tb24oCi0JCQkJCQkJCQkJICAgJm5vZGUtPm1zX3ZhbGlkX3N1 YnBsYW5zLAotCQkJCQkJCQkJCSAgIG5vZGUtPm1zX2FzeW5jcGxhbnMsCi0JCQkJCQkJCQkJICAg Jm5vZGUtPm1zX3ZhbGlkX2FzeW5jcGxhbnMpKQorCQkJCQkJCQkJCSAgICZub2RlLT5tcy52YWxp ZF9zdWJwbGFucywKKwkJCQkJCQkJCQkgICBub2RlLT5tcy5hc3luY3BsYW5zLAorCQkJCQkJCQkJ CSAgICZub2RlLT5tcy52YWxpZF9hc3luY3BsYW5zKSkKIAkJbm9kZS0+bXNfYXN5bmNyZW1haW4g PSBOVUxMOwogfQogCkBAIC01NDUsMzkgKzM1MiwxNyBAQCBjbGFzc2lmeV9tYXRjaGluZ19zdWJw bGFucyhNZXJnZUFwcGVuZFN0YXRlICpub2RlKQogc3RhdGljIHZvaWQKIEV4ZWNNZXJnZUFwcGVu ZEFzeW5jQmVnaW4oTWVyZ2VBcHBlbmRTdGF0ZSAqbm9kZSkKIHsKLQlpbnQJCQlpOwotCi0JLyog QmFja3dhcmQgc2NhbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFzeW5jLWF3YXJlIE1lcmdlQXBwZW5k cy4gKi8KLQlBc3NlcnQoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChub2RlLT5wcy5zdGF0ZS0+ZXNf ZGlyZWN0aW9uKSk7Ci0KLQkvKiBXZSBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIHdoZW4gdGhlcmUg YXJlIG5vIHN1YnBsYW5zICovCi0JQXNzZXJ0KG5vZGUtPm1zX25wbGFucyA+IDApOwotCi0JLyog V2Ugc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCB3aGVuIHRoZXJlIGFyZSBubyBhc3luYyBzdWJwbGFu cy4gKi8KLQlBc3NlcnQobm9kZS0+bXNfbmFzeW5jcGxhbnMgPiAwKTsKLQogCS8qIEV4ZWNNZXJn ZUFwcGVuZCgpIGlkZW50aWZpZXMgdmFsaWQgc3VicGxhbnMgKi8KLQlBc3NlcnQobm9kZS0+bXNf dmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCk7CisJQXNzZXJ0KG5vZGUtPm1zLnZhbGlkX3N1YnBs YW5zX2lkZW50aWZpZWQpOwogCiAJLyogSW5pdGlhbGl6ZSBzdGF0ZSB2YXJpYWJsZXMuICovCi0J bm9kZS0+bXNfYXN5bmNyZW1haW4gPSBibXNfY29weShub2RlLT5tc192YWxpZF9hc3luY3BsYW5z KTsKKwlub2RlLT5tc19hc3luY3JlbWFpbiA9IGJtc19jb3B5KG5vZGUtPm1zLnZhbGlkX2FzeW5j cGxhbnMpOwogCiAJLyogTm90aGluZyB0byBkbyBpZiB0aGVyZSBhcmUgbm8gdmFsaWQgYXN5bmMg c3VicGxhbnMuICovCiAJaWYgKGJtc19pc19lbXB0eShub2RlLT5tc19hc3luY3JlbWFpbikpCiAJ CXJldHVybjsKIAotCS8qIE1ha2UgYSByZXF1ZXN0IGZvciBlYWNoIG9mIHRoZSB2YWxpZCBhc3lu YyBzdWJwbGFucy4gKi8KLQlpID0gLTE7Ci0Jd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKG5v ZGUtPm1zX3ZhbGlkX2FzeW5jcGxhbnMsIGkpKSA+PSAwKQotCXsKLQkJQXN5bmNSZXF1ZXN0ICph cmVxID0gbm9kZS0+bXNfYXN5bmNyZXF1ZXN0c1tpXTsKLQotCQlBc3NlcnQoYXJlcS0+cmVxdWVz dF9pbmRleCA9PSBpKTsKLQkJQXNzZXJ0KCFhcmVxLT5jYWxsYmFja19wZW5kaW5nKTsKLQotCQkv KiBEbyB0aGUgYWN0dWFsIHdvcmsuICovCi0JCUV4ZWNBc3luY1JlcXVlc3QoYXJlcSk7Ci0JfQor CUV4ZWNBcHBlbmRlckFzeW5jQmVnaW4oJm5vZGUtPm1zKTsKIH0KIAogLyogLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAt NjM4LDcgKzQyMyw3IEBAIEV4ZWNNZXJnZUFwcGVuZEFzeW5jUmVxdWVzdChNZXJnZUFwcGVuZFN0 YXRlICpub2RlLCBpbnQgbXBsYW4pCiAJICovCiAJaWYgKGJtc19pc19tZW1iZXIobXBsYW4sIG5v ZGUtPm1zX2hhc19hc3luY3Jlc3VsdHMpKQogCXsKLQkJbm9kZS0+bXNfc2xvdHNbbXBsYW5dID0g bm9kZS0+bXNfYXN5bmNyZXN1bHRzW21wbGFuXTsKKwkJbm9kZS0+bXNfc2xvdHNbbXBsYW5dID0g bm9kZS0+bXMuYXN5bmNyZXN1bHRzW21wbGFuXTsKIAkJcmV0dXJuIHRydWU7CiAJfQogCkBAIC02 NDgsNyArNDMzLDcgQEAgRXhlY01lcmdlQXBwZW5kQXN5bmNSZXF1ZXN0KE1lcmdlQXBwZW5kU3Rh dGUgKm5vZGUsIGludCBtcGxhbikKIAkgKi8KIAluZWVkcmVxdWVzdCA9IE5VTEw7CiAJaSA9IC0x OwotCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihub2RlLT5tc19uZWVkcmVxdWVzdCwgaSkp ID49IDApCisJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKG5vZGUtPm1zLm5lZWRyZXF1ZXN0 LCBpKSkgPj0gMCkKIAl7CiAJCWlmICghYm1zX2lzX21lbWJlcihpLCBub2RlLT5tc19oYXNfYXN5 bmNyZXN1bHRzKSkKIAkJCW5lZWRyZXF1ZXN0ID0gYm1zX2FkZF9tZW1iZXIobmVlZHJlcXVlc3Qs IGkpOwpAQCAtNjYxLDEzICs0NDYsMTMgQEAgRXhlY01lcmdlQXBwZW5kQXN5bmNSZXF1ZXN0KE1l cmdlQXBwZW5kU3RhdGUgKm5vZGUsIGludCBtcGxhbikKIAkJcmV0dXJuIGZhbHNlOwogCiAJLyog Q2xlYXIgbXNfbmVlZHJlcXVlc3QgZmxhZywgYXMgd2UgYXJlIGdvaW5nIHRvIHNlbmQgcmVxdWVz dHMgbm93ICovCi0Jbm9kZS0+bXNfbmVlZHJlcXVlc3QgPSBibXNfZGVsX21lbWJlcnMobm9kZS0+ bXNfbmVlZHJlcXVlc3QsIG5lZWRyZXF1ZXN0KTsKKwlub2RlLT5tcy5uZWVkcmVxdWVzdCA9IGJt c19kZWxfbWVtYmVycyhub2RlLT5tcy5uZWVkcmVxdWVzdCwgbmVlZHJlcXVlc3QpOwogCiAJLyog TWFrZSBhIG5ldyByZXF1ZXN0IGZvciBlYWNoIG9mIHRoZSBhc3luYyBzdWJwbGFucyB0aGF0IG5l ZWQgaXQuICovCiAJaSA9IC0xOwogCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihuZWVkcmVx dWVzdCwgaSkpID49IDApCiAJewotCQlBc3luY1JlcXVlc3QgKmFyZXEgPSBub2RlLT5tc19hc3lu Y3JlcXVlc3RzW2ldOworCQlBc3luY1JlcXVlc3QgKmFyZXEgPSBub2RlLT5tcy5hc3luY3JlcXVl c3RzW2ldOwogCiAJCS8qCiAJCSAqIFdlJ3ZlIGp1c3QgY2hlY2tlZCB0aGF0IHN1YnBsYW4gZG9l c24ndCBhbHJlYWR5IGhhdmUgc29tZSBmZXRjaGVkCkBAIC02ODMsNyArNDY4LDcgQEAgRXhlY01l cmdlQXBwZW5kQXN5bmNSZXF1ZXN0KE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUsIGludCBtcGxhbikK IAkvKiBSZXR1cm4gbmVlZGVkIGFzeW5jaHJvbm91c2x5LWdlbmVyYXRlZCByZXN1bHRzIGlmIGFu eS4gKi8KIAlpZiAoYm1zX2lzX21lbWJlcihtcGxhbiwgbm9kZS0+bXNfaGFzX2FzeW5jcmVzdWx0 cykpCiAJewotCQlub2RlLT5tc19zbG90c1ttcGxhbl0gPSBub2RlLT5tc19hc3luY3Jlc3VsdHNb bXBsYW5dOworCQlub2RlLT5tc19zbG90c1ttcGxhbl0gPSBub2RlLT5tcy5hc3luY3Jlc3VsdHNb bXBsYW5dOwogCQlyZXR1cm4gdHJ1ZTsKIAl9CiAKQEAgLTcwNyw3ICs0OTIsNyBAQCBFeGVjQXN5 bmNNZXJnZUFwcGVuZFJlc3BvbnNlKEFzeW5jUmVxdWVzdCAqYXJlcSkKIAkvKiBXZSBzaG91bGQg aGFuZGxlIHByZXZpb3VzIGFzeW5jIHJlc3VsdCBwcmlvciB0byBnZXR0aW5nIG5ldyBvbmUgKi8K IAlBc3NlcnQoIWJtc19pc19tZW1iZXIoYXJlcS0+cmVxdWVzdF9pbmRleCwgbm9kZS0+bXNfaGFz X2FzeW5jcmVzdWx0cykpOwogCi0Jbm9kZS0+bXNfYXN5bmNyZXN1bHRzW2FyZXEtPnJlcXVlc3Rf aW5kZXhdID0gTlVMTDsKKwlub2RlLT5tcy5hc3luY3Jlc3VsdHNbYXJlcS0+cmVxdWVzdF9pbmRl eF0gPSBOVUxMOwogCS8qIE5vdGhpbmcgdG8gZG8gaWYgdGhlIHJlcXVlc3QgaXMgcGVuZGluZy4g Ki8KIAlpZiAoIWFyZXEtPnJlcXVlc3RfY29tcGxldGUpCiAJewpAQCAtNzMwLDEzICs1MTUsMTMg QEAgRXhlY0FzeW5jTWVyZ2VBcHBlbmRSZXNwb25zZShBc3luY1JlcXVlc3QgKmFyZXEpCiAJbm9k ZS0+bXNfaGFzX2FzeW5jcmVzdWx0cyA9IGJtc19hZGRfbWVtYmVyKG5vZGUtPm1zX2hhc19hc3lu Y3Jlc3VsdHMsCiAJCQkJCQkJCQkJCSAgIGFyZXEtPnJlcXVlc3RfaW5kZXgpOwogCS8qIFNhdmUg cmVzdWx0IHNvIHdlIGNhbiByZXR1cm4gaXQuICovCi0Jbm9kZS0+bXNfYXN5bmNyZXN1bHRzW2Fy ZXEtPnJlcXVlc3RfaW5kZXhdID0gc2xvdDsKKwlub2RlLT5tcy5hc3luY3Jlc3VsdHNbYXJlcS0+ cmVxdWVzdF9pbmRleF0gPSBzbG90OwogCiAJLyoKIAkgKiBNYXJrIHRoZSBzdWJwbGFuIHRoYXQg cmV0dXJuZWQgYSByZXN1bHQgYXMgcmVhZHkgZm9yIGEgbmV3IHJlcXVlc3QuICBXZQogCSAqIGRv bid0IGxhdW5jaCBhbm90aGVyIG9uZSBoZXJlIGltbWVkaWF0ZWx5IGJlY2F1c2UgaXQgbWlnaHQg Y29tcGxldGUuCiAJICovCi0Jbm9kZS0+bXNfbmVlZHJlcXVlc3QgPSBibXNfYWRkX21lbWJlcihu b2RlLT5tc19uZWVkcmVxdWVzdCwKKwlub2RlLT5tcy5uZWVkcmVxdWVzdCA9IGJtc19hZGRfbWVt YmVyKG5vZGUtPm1zLm5lZWRyZXF1ZXN0LAogCQkJCQkJCQkJCSAgYXJlcS0+cmVxdWVzdF9pbmRl eCk7CiB9CiAKQEAgLTc0OSwxMDEgKzUzNCw4IEBAIEV4ZWNBc3luY01lcmdlQXBwZW5kUmVzcG9u c2UoQXN5bmNSZXF1ZXN0ICphcmVxKQogc3RhdGljIHZvaWQKIEV4ZWNNZXJnZUFwcGVuZEFzeW5j RXZlbnRXYWl0KE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUpCiB7Ci0JaW50CQkJbmV2ZW50cyA9IG5v ZGUtPm1zX25hc3luY3BsYW5zICsgMjsgLyogb25lIGZvciBQTSBkZWF0aCBhbmQKLQkJCQkJCQkJ CQkJCQkgKiBvbmUgZm9yIGxhdGNoICovCi0JV2FpdEV2ZW50CW9jY3VycmVkX2V2ZW50W0VWRU5U X0JVRkZFUl9TSVpFXTsKLQlpbnQJCQlub2NjdXJyZWQ7Ci0JaW50CQkJaTsKLQogCS8qIFdlIHNo b3VsZCBuZXZlciBiZSBjYWxsZWQgd2hlbiB0aGVyZSBhcmUgbm8gdmFsaWQgYXN5bmMgc3VicGxh bnMuICovCiAJQXNzZXJ0KGJtc19udW1fbWVtYmVycyhub2RlLT5tc19hc3luY3JlbWFpbikgPiAw KTsKIAotCW5vZGUtPm1zX2V2ZW50c2V0ID0gQ3JlYXRlV2FpdEV2ZW50U2V0KEN1cnJlbnRSZXNv dXJjZU93bmVyLCBuZXZlbnRzKTsKLQlBZGRXYWl0RXZlbnRUb1NldChub2RlLT5tc19ldmVudHNl dCwgV0xfRVhJVF9PTl9QTV9ERUFUSCwgUEdJTlZBTElEX1NPQ0tFVCwKLQkJCQkJICBOVUxMLCBO VUxMKTsKLQotCS8qIEdpdmUgZWFjaCB3YWl0aW5nIHN1YnBsYW4gYSBjaGFuY2UgdG8gYWRkIGFu IGV2ZW50LiAqLwotCWkgPSAtMTsKLQl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIobm9kZS0+ bXNfYXN5bmNwbGFucywgaSkpID49IDApCi0JewotCQlBc3luY1JlcXVlc3QgKmFyZXEgPSBub2Rl LT5tc19hc3luY3JlcXVlc3RzW2ldOwotCi0JCWlmIChhcmVxLT5jYWxsYmFja19wZW5kaW5nKQot CQkJRXhlY0FzeW5jQ29uZmlndXJlV2FpdChhcmVxKTsKLQl9Ci0KLQkvKgotCSAqIE5vIG5lZWQg Zm9yIGZ1cnRoZXIgcHJvY2Vzc2luZyBpZiBub25lIG9mIHRoZSBzdWJwbGFucyBjb25maWd1cmVk IGFueQotCSAqIGV2ZW50cy4KLQkgKi8KLQlpZiAoR2V0TnVtUmVnaXN0ZXJlZFdhaXRFdmVudHMo bm9kZS0+bXNfZXZlbnRzZXQpID09IDEpCi0JewotCQlGcmVlV2FpdEV2ZW50U2V0KG5vZGUtPm1z X2V2ZW50c2V0KTsKLQkJbm9kZS0+bXNfZXZlbnRzZXQgPSBOVUxMOwotCQlyZXR1cm47Ci0JfQot Ci0JLyoKLQkgKiBBZGQgdGhlIHByb2Nlc3MgbGF0Y2ggdG8gdGhlIHNldCwgc28gdGhhdCB3ZSB3 YWtlIHVwIHRvIHByb2Nlc3MgdGhlCi0JICogc3RhbmRhcmQgaW50ZXJydXB0cyB3aXRoIENIRUNL X0ZPUl9JTlRFUlJVUFRTKCkuCi0JICoKLQkgKiBOT1RFOiBGb3IgaGlzdG9yaWNhbCByZWFzb25z LCBpdCdzIGltcG9ydGFudCB0aGF0IHRoaXMgaXMgYWRkZWQgdG8gdGhlCi0JICogV2FpdEV2ZW50 U2V0IGFmdGVyIHRoZSBFeGVjQXN5bmNDb25maWd1cmVXYWl0KCkgY2FsbHMuICBOYW1lbHksCi0J ICogcG9zdGdyZXNfZmR3IGNhbGxzICJHZXROdW1SZWdpc3RlcmVkV2FpdEV2ZW50cyhzZXQpID09 IDEiIHRvIGNoZWNrIGlmCi0JICogYW55IG90aGVyIGV2ZW50cyBhcmUgaW4gdGhlIHNldC4gIFRo YXQncyBhIHBvb3IgZGVzaWduLCBpdCdzCi0JICogcXVlc3Rpb25hYmxlIGZvciBwb3N0Z3Jlc19m ZHcgdG8gYmUgZG9pbmcgdGhhdCBpbiB0aGUgZmlyc3QgcGxhY2UsIGJ1dAotCSAqIHdlIGNhbm5v dCBjaGFuZ2UgaXQgbm93LiAgVGhlIHBhdHRlcm4gaGFzIHBvc3NpYmx5IGJlZW4gY29waWVkIHRv IG90aGVyCi0JICogZXh0ZW5zaW9ucyB0b28uCi0JICovCi0JQWRkV2FpdEV2ZW50VG9TZXQobm9k ZS0+bXNfZXZlbnRzZXQsIFdMX0xBVENIX1NFVCwgUEdJTlZBTElEX1NPQ0tFVCwKLQkJCQkJICBN eUxhdGNoLCBOVUxMKTsKLQotCS8qIFJldHVybiBhdCBtb3N0IEVWRU5UX0JVRkZFUl9TSVpFIGV2 ZW50cyBpbiBvbmUgY2FsbC4gKi8KLQlpZiAobmV2ZW50cyA+IEVWRU5UX0JVRkZFUl9TSVpFKQot CQluZXZlbnRzID0gRVZFTlRfQlVGRkVSX1NJWkU7Ci0KLQkvKgotCSAqIFdhaXQgdW50aWwgYXQg bGVhc3Qgb25lIGV2ZW50IG9jY3Vycy4KLQkgKi8KLQlub2NjdXJyZWQgPSBXYWl0RXZlbnRTZXRX YWl0KG5vZGUtPm1zX2V2ZW50c2V0LCAtMSAvKiBubyB0aW1lb3V0ICovICwgb2NjdXJyZWRfZXZl bnQsCi0JCQkJCQkJCSBuZXZlbnRzLCBXQUlUX0VWRU5UX0FQUEVORF9SRUFEWSk7Ci0JRnJlZVdh aXRFdmVudFNldChub2RlLT5tc19ldmVudHNldCk7Ci0Jbm9kZS0+bXNfZXZlbnRzZXQgPSBOVUxM OwotCWlmIChub2NjdXJyZWQgPT0gMCkKLQkJcmV0dXJuOwotCi0JLyogRGVsaXZlciBub3RpZmlj YXRpb25zLiAqLwotCWZvciAoaSA9IDA7IGkgPCBub2NjdXJyZWQ7IGkrKykKLQl7Ci0JCVdhaXRF dmVudCAgKncgPSAmb2NjdXJyZWRfZXZlbnRbaV07Ci0KLQkJLyoKLQkJICogRWFjaCB3YWl0aW5n IHN1YnBsYW4gc2hvdWxkIGhhdmUgcmVnaXN0ZXJlZCBpdHMgd2FpdCBldmVudCB3aXRoCi0JCSAq IHVzZXJfZGF0YSBwb2ludGluZyBiYWNrIHRvIGl0cyBBc3luY1JlcXVlc3QuCi0JCSAqLwotCQlp ZiAoKHctPmV2ZW50cyAmIFdMX1NPQ0tFVF9SRUFEQUJMRSkgIT0gMCkKLQkJewotCQkJQXN5bmNS ZXF1ZXN0ICphcmVxID0gKEFzeW5jUmVxdWVzdCAqKSB3LT51c2VyX2RhdGE7Ci0KLQkJCWlmIChh cmVxLT5jYWxsYmFja19wZW5kaW5nKQotCQkJewotCQkJCS8qCi0JCQkJICogTWFyayBpdCBhcyBu byBsb25nZXIgbmVlZGluZyBhIGNhbGxiYWNrLiAgV2UgbXVzdCBkbyB0aGlzCi0JCQkJICogYmVm b3JlIGRpc3BhdGNoaW5nIHRoZSBjYWxsYmFjayBpbiBjYXNlIHRoZSBjYWxsYmFjayByZXNldHMK LQkJCQkgKiB0aGUgZmxhZy4KLQkJCQkgKi8KLQkJCQlhcmVxLT5jYWxsYmFja19wZW5kaW5nID0g ZmFsc2U7Ci0KLQkJCQkvKiBEbyB0aGUgYWN0dWFsIHdvcmsuICovCi0JCQkJRXhlY0FzeW5jTm90 aWZ5KGFyZXEpOwotCQkJfQotCQl9Ci0KLQkJLyogSGFuZGxlIHN0YW5kYXJkIGludGVycnVwdHMg Ki8KLQkJaWYgKCh3LT5ldmVudHMgJiBXTF9MQVRDSF9TRVQpICE9IDApCi0JCXsKLQkJCVJlc2V0 TGF0Y2goTXlMYXRjaCk7Ci0JCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwotCQl9Ci0JfQorCUV4 ZWNBcHBlbmRlckFzeW5jRXZlbnRXYWl0KCZub2RlLT5tcywgLTEgLyogbm8gdGltZW91dCAqLyAs IFdBSVRfRVZFTlRfQVBQRU5EX1JFQURZKTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25v ZGVzL25vZGVGdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvbm9kZUZ1bmNzLmMKaW5kZXggMDI0 YTJiMmZkODQuLjJmNGUyYWU2ZDM5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9ub2Rl RnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9ub2RlRnVuY3MuYwpAQCAtNDc1MSwxNCAr NDc1MSwxNCBAQCBwbGFuc3RhdGVfdHJlZV93YWxrZXJfaW1wbChQbGFuU3RhdGUgKnBsYW5zdGF0 ZSwKIAlzd2l0Y2ggKG5vZGVUYWcocGxhbikpCiAJewogCQljYXNlIFRfQXBwZW5kOgotCQkJaWYg KHBsYW5zdGF0ZV93YWxrX21lbWJlcnMoKChBcHBlbmRTdGF0ZSAqKSBwbGFuc3RhdGUpLT5hcHBl bmRwbGFucywKLQkJCQkJCQkJCSAgICgoQXBwZW5kU3RhdGUgKikgcGxhbnN0YXRlKS0+YXNfbnBs YW5zLAorCQkJaWYgKHBsYW5zdGF0ZV93YWxrX21lbWJlcnMoKChBcHBlbmRTdGF0ZSAqKSBwbGFu c3RhdGUpLT5hcy5wbGFucywKKwkJCQkJCQkJCSAgICgoQXBwZW5kU3RhdGUgKikgcGxhbnN0YXRl KS0+YXMubnBsYW5zLAogCQkJCQkJCQkJICAgd2Fsa2VyLCBjb250ZXh0KSkKIAkJCQlyZXR1cm4g dHJ1ZTsKIAkJCWJyZWFrOwogCQljYXNlIFRfTWVyZ2VBcHBlbmQ6Ci0JCQlpZiAocGxhbnN0YXRl X3dhbGtfbWVtYmVycygoKE1lcmdlQXBwZW5kU3RhdGUgKikgcGxhbnN0YXRlKS0+bWVyZ2VwbGFu cywKLQkJCQkJCQkJCSAgICgoTWVyZ2VBcHBlbmRTdGF0ZSAqKSBwbGFuc3RhdGUpLT5tc19ucGxh bnMsCisJCQlpZiAocGxhbnN0YXRlX3dhbGtfbWVtYmVycygoKE1lcmdlQXBwZW5kU3RhdGUgKikg cGxhbnN0YXRlKS0+bXMucGxhbnMsCisJCQkJCQkJCQkgICAoKE1lcmdlQXBwZW5kU3RhdGUgKikg cGxhbnN0YXRlKS0+bXMubnBsYW5zLAogCQkJCQkJCQkJICAgd2Fsa2VyLCBjb250ZXh0KSkKIAkJ CQlyZXR1cm4gdHJ1ZTsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BsYW4vY3JlYXRlcGxhbi5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRl cGxhbi5jCmluZGV4IDI0MzI1ZDQyZjBkLi5iYjg0MDQwZThmOSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGlt aXplci9wbGFuL2NyZWF0ZXBsYW4uYwpAQCAtMTI2MiwxMSArMTI2MiwxMSBAQCBjcmVhdGVfYXBw ZW5kX3BsYW4oUGxhbm5lckluZm8gKnJvb3QsIEFwcGVuZFBhdGggKmJlc3RfcGF0aCwgaW50IGZs YWdzKQogCSAqIGNoaWxkIHBsYW5zLCB0byBtYWtlIGNyb3NzLWNoZWNraW5nIHRoZSBzb3J0IGlu Zm8gZWFzaWVyLgogCSAqLwogCXBsYW4gPSBtYWtlTm9kZShBcHBlbmQpOwotCXBsYW4tPnBsYW4u dGFyZ2V0bGlzdCA9IHRsaXN0OwotCXBsYW4tPnBsYW4ucXVhbCA9IE5JTDsKLQlwbGFuLT5wbGFu LmxlZnR0cmVlID0gTlVMTDsKLQlwbGFuLT5wbGFuLnJpZ2h0dHJlZSA9IE5VTEw7Ci0JcGxhbi0+ YXBwcmVsaWRzID0gcmVsLT5yZWxpZHM7CisJcGxhbi0+YXAucGxhbi50YXJnZXRsaXN0ID0gdGxp c3Q7CisJcGxhbi0+YXAucGxhbi5xdWFsID0gTklMOworCXBsYW4tPmFwLnBsYW4ubGVmdHRyZWUg PSBOVUxMOworCXBsYW4tPmFwLnBsYW4ucmlnaHR0cmVlID0gTlVMTDsKKwlwbGFuLT5hcC5hcHBy ZWxpZHMgPSByZWwtPnJlbGlkczsKIAogCWlmIChwYXRoa2V5cyAhPSBOSUwpCiAJewpAQCAtMTI4 NSw3ICsxMjg1LDcgQEAgY3JlYXRlX2FwcGVuZF9wbGFuKFBsYW5uZXJJbmZvICpyb290LCBBcHBl bmRQYXRoICpiZXN0X3BhdGgsIGludCBmbGFncykKIAkJCQkJCQkJCQkgICZub2RlU29ydE9wZXJh dG9ycywKIAkJCQkJCQkJCQkgICZub2RlQ29sbGF0aW9ucywKIAkJCQkJCQkJCQkgICZub2RlTnVs bHNGaXJzdCk7Ci0JCXRsaXN0X3dhc19jaGFuZ2VkID0gKG9yaWdfdGxpc3RfbGVuZ3RoICE9IGxp c3RfbGVuZ3RoKHBsYW4tPnBsYW4udGFyZ2V0bGlzdCkpOworCQl0bGlzdF93YXNfY2hhbmdlZCA9 IChvcmlnX3RsaXN0X2xlbmd0aCAhPSBsaXN0X2xlbmd0aChwbGFuLT5hcC5wbGFuLnRhcmdldGxp c3QpKTsKIAl9CiAKIAkvKiBJZiBhcHByb3ByaWF0ZSwgY29uc2lkZXIgYXN5bmMgYXBwZW5kICov CkBAIC0xMzk1LDcgKzEzOTUsNyBAQCBjcmVhdGVfYXBwZW5kX3BsYW4oUGxhbm5lckluZm8gKnJv b3QsIEFwcGVuZFBhdGggKmJlc3RfcGF0aCwgaW50IGZsYWdzKQogCX0KIAogCS8qIFNldCBiZWxv dyBpZiB3ZSBmaW5kIHF1YWxzIHRoYXQgd2UgY2FuIHVzZSB0byBydW4tdGltZSBwcnVuZSAqLwot CXBsYW4tPnBhcnRfcHJ1bmVfaW5kZXggPSAtMTsKKwlwbGFuLT5hcC5wYXJ0X3BydW5lX2luZGV4 ID0gLTE7CiAKIAkvKgogCSAqIElmIGFueSBxdWFscyBleGlzdCwgdGhleSBtYXkgYmUgdXNlZnVs IHRvIHBlcmZvcm0gZnVydGhlciBwYXJ0aXRpb24KQEAgLTE0MjAsMTYgKzE0MjAsMTYgQEAgY3Jl YXRlX2FwcGVuZF9wbGFuKFBsYW5uZXJJbmZvICpyb290LCBBcHBlbmRQYXRoICpiZXN0X3BhdGgs IGludCBmbGFncykKIAkJfQogCiAJCWlmIChwcnVuZXF1YWwgIT0gTklMKQotCQkJcGxhbi0+cGFy dF9wcnVuZV9pbmRleCA9IG1ha2VfcGFydGl0aW9uX3BydW5laW5mbyhyb290LCByZWwsCisJCQlw bGFuLT5hcC5wYXJ0X3BydW5lX2luZGV4ID0gbWFrZV9wYXJ0aXRpb25fcHJ1bmVpbmZvKHJvb3Qs IHJlbCwKIAkJCQkJCQkJCQkJCQkJCSAgYmVzdF9wYXRoLT5zdWJwYXRocywKIAkJCQkJCQkJCQkJ CQkJCSAgcHJ1bmVxdWFsKTsKIAl9CiAKLQlwbGFuLT5hcHBlbmRwbGFucyA9IHN1YnBsYW5zOwor CXBsYW4tPmFwLnN1YnBsYW5zID0gc3VicGxhbnM7CiAJcGxhbi0+bmFzeW5jcGxhbnMgPSBuYXN5 bmNwbGFuczsKIAlwbGFuLT5maXJzdF9wYXJ0aWFsX3BsYW4gPSBiZXN0X3BhdGgtPmZpcnN0X3Bh cnRpYWxfcGF0aDsKIAotCWNvcHlfZ2VuZXJpY19wYXRoX2luZm8oJnBsYW4tPnBsYW4sIChQYXRo ICopIGJlc3RfcGF0aCk7CisJY29weV9nZW5lcmljX3BhdGhfaW5mbygmcGxhbi0+YXAucGxhbiwg KFBhdGggKikgYmVzdF9wYXRoKTsKIAogCS8qCiAJICogSWYgcHJlcGFyZV9zb3J0X2Zyb21fcGF0 aGtleXMgYWRkZWQgc29ydCBjb2x1bW5zLCBidXQgd2Ugd2VyZSB0b2xkIHRvCkBAIC0xNDM4LDkg KzE0MzgsOSBAQCBjcmVhdGVfYXBwZW5kX3BsYW4oUGxhbm5lckluZm8gKnJvb3QsIEFwcGVuZFBh dGggKmJlc3RfcGF0aCwgaW50IGZsYWdzKQogCSAqLwogCWlmICh0bGlzdF93YXNfY2hhbmdlZCAm JiAoZmxhZ3MgJiAoQ1BfRVhBQ1RfVExJU1QgfCBDUF9TTUFMTF9UTElTVCkpKQogCXsKLQkJdGxp c3QgPSBsaXN0X2NvcHlfaGVhZChwbGFuLT5wbGFuLnRhcmdldGxpc3QsIG9yaWdfdGxpc3RfbGVu Z3RoKTsKKwkJdGxpc3QgPSBsaXN0X2NvcHlfaGVhZChwbGFuLT5hcC5wbGFuLnRhcmdldGxpc3Qs IG9yaWdfdGxpc3RfbGVuZ3RoKTsKIAkJcmV0dXJuIGluamVjdF9wcm9qZWN0aW9uX3BsYW4oKFBs YW4gKikgcGxhbiwgdGxpc3QsCi0JCQkJCQkJCQkgIHBsYW4tPnBsYW4ucGFyYWxsZWxfc2FmZSk7 CisJCQkJCQkJCQkgIHBsYW4tPmFwLnBsYW4ucGFyYWxsZWxfc2FmZSk7CiAJfQogCWVsc2UKIAkJ cmV0dXJuIChQbGFuICopIHBsYW47CkBAIC0xNDU4LDcgKzE0NTgsNyBAQCBjcmVhdGVfbWVyZ2Vf YXBwZW5kX3BsYW4oUGxhbm5lckluZm8gKnJvb3QsIE1lcmdlQXBwZW5kUGF0aCAqYmVzdF9wYXRo LAogCQkJCQkJIGludCBmbGFncykKIHsKIAlNZXJnZUFwcGVuZCAqbm9kZSA9IG1ha2VOb2RlKE1l cmdlQXBwZW5kKTsKLQlQbGFuCSAgICpwbGFuID0gJm5vZGUtPnBsYW47CisJUGxhbgkgICAqcGxh biA9ICZub2RlLT5hcC5wbGFuOwogCUxpc3QJICAgKnRsaXN0ID0gYnVpbGRfcGF0aF90bGlzdChy b290LCAmYmVzdF9wYXRoLT5wYXRoKTsKIAlpbnQJCQlvcmlnX3RsaXN0X2xlbmd0aCA9IGxpc3Rf bGVuZ3RoKHRsaXN0KTsKIAlib29sCQl0bGlzdF93YXNfY2hhbmdlZDsKQEAgLTE0NzksNyArMTQ3 OSw3IEBAIGNyZWF0ZV9tZXJnZV9hcHBlbmRfcGxhbihQbGFubmVySW5mbyAqcm9vdCwgTWVyZ2VB cHBlbmRQYXRoICpiZXN0X3BhdGgsCiAJcGxhbi0+cXVhbCA9IE5JTDsKIAlwbGFuLT5sZWZ0dHJl ZSA9IE5VTEw7CiAJcGxhbi0+cmlnaHR0cmVlID0gTlVMTDsKLQlub2RlLT5hcHByZWxpZHMgPSBy ZWwtPnJlbGlkczsKKwlub2RlLT5hcC5hcHByZWxpZHMgPSByZWwtPnJlbGlkczsKIAogCWNvbnNp ZGVyX2FzeW5jID0gKGVuYWJsZV9hc3luY19tZXJnZV9hcHBlbmQgJiYKIAkJCQkJICAhYmVzdF9w YXRoLT5wYXRoLnBhcmFsbGVsX3NhZmUgJiYKQEAgLTE1OTMsNyArMTU5Myw3IEBAIGNyZWF0ZV9t ZXJnZV9hcHBlbmRfcGxhbihQbGFubmVySW5mbyAqcm9vdCwgTWVyZ2VBcHBlbmRQYXRoICpiZXN0 X3BhdGgsCiAJfQogCiAJLyogU2V0IGJlbG93IGlmIHdlIGZpbmQgcXVhbHMgdGhhdCB3ZSBjYW4g dXNlIHRvIHJ1bi10aW1lIHBydW5lICovCi0Jbm9kZS0+cGFydF9wcnVuZV9pbmRleCA9IC0xOwor CW5vZGUtPmFwLnBhcnRfcHJ1bmVfaW5kZXggPSAtMTsKIAogCS8qCiAJICogSWYgYW55IHF1YWxz IGV4aXN0LCB0aGV5IG1heSBiZSB1c2VmdWwgdG8gcGVyZm9ybSBmdXJ0aGVyIHBhcnRpdGlvbgpA QCAtMTYxMCwxMiArMTYxMCwxMiBAQCBjcmVhdGVfbWVyZ2VfYXBwZW5kX3BsYW4oUGxhbm5lcklu Zm8gKnJvb3QsIE1lcmdlQXBwZW5kUGF0aCAqYmVzdF9wYXRoLAogCQlBc3NlcnQoYmVzdF9wYXRo LT5wYXRoLnBhcmFtX2luZm8gPT0gTlVMTCk7CiAKIAkJaWYgKHBydW5lcXVhbCAhPSBOSUwpCi0J CQlub2RlLT5wYXJ0X3BydW5lX2luZGV4ID0gbWFrZV9wYXJ0aXRpb25fcHJ1bmVpbmZvKHJvb3Qs IHJlbCwKKwkJCW5vZGUtPmFwLnBhcnRfcHJ1bmVfaW5kZXggPSBtYWtlX3BhcnRpdGlvbl9wcnVu ZWluZm8ocm9vdCwgcmVsLAogCQkJCQkJCQkJCQkJCQkJICBiZXN0X3BhdGgtPnN1YnBhdGhzLAog CQkJCQkJCQkJCQkJCQkJICBwcnVuZXF1YWwpOwogCX0KIAotCW5vZGUtPm1lcmdlcGxhbnMgPSBz dWJwbGFuczsKKwlub2RlLT5hcC5zdWJwbGFucyA9IHN1YnBsYW5zOwogCiAJLyoKIAkgKiBJZiBw cmVwYXJlX3NvcnRfZnJvbV9wYXRoa2V5cyBhZGRlZCBzb3J0IGNvbHVtbnMsIGJ1dCB3ZSB3ZXJl IHRvbGQgdG8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMu YyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYwppbmRleCBjZDdlYTFlNmI1 OC4uYTU5NWYzNGM4N2IgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3Nl dHJlZnMuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMKQEAgLTE4 NTAsMTAgKzE4NTAsMTAgQEAgc2V0X2FwcGVuZF9yZWZlcmVuY2VzKFBsYW5uZXJJbmZvICpyb290 LAogCSAqIGNoZWNrIHF1YWxzLiAgSWYgaXQncyBnb3QgZXhhY3RseSBvbmUgY2hpbGQgcGxhbiwg dGhlbiBpdCdzIG5vdCBkb2luZwogCSAqIGFueXRoaW5nIHVzZWZ1bCBhdCBhbGwsIGFuZCB3ZSBj YW4gc3RyaXAgaXQgb3V0LgogCSAqLwotCUFzc2VydChhcGxhbi0+cGxhbi5xdWFsID09IE5JTCk7 CisJQXNzZXJ0KGFwbGFuLT5hcC5wbGFuLnF1YWwgPT0gTklMKTsKIAogCS8qIEZpcnN0LCB3ZSBn b3R0YSByZWN1cnNlIG9uIHRoZSBjaGlsZHJlbiAqLwotCWZvcmVhY2gobCwgYXBsYW4tPmFwcGVu ZHBsYW5zKQorCWZvcmVhY2gobCwgYXBsYW4tPmFwLnN1YnBsYW5zKQogCXsKIAkJbGZpcnN0KGwp ID0gc2V0X3BsYW5fcmVmcyhyb290LCAoUGxhbiAqKSBsZmlyc3QobCksIHJ0b2Zmc2V0KTsKIAl9 CkBAIC0xODY2LDExICsxODY2LDExIEBAIHNldF9hcHBlbmRfcmVmZXJlbmNlcyhQbGFubmVySW5m byAqcm9vdCwKIAkgKiBwbGFuIG1heSBleGVjdXRlIHRoZSBub24tcGFyYWxsZWwgYXdhcmUgY2hp bGQgbXVsdGlwbGUgdGltZXMuICAoSWYgeW91CiAJICogY2hhbmdlIHRoZXNlIHJ1bGVzLCB1cGRh dGUgY3JlYXRlX2FwcGVuZF9wYXRoIHRvIG1hdGNoLikKIAkgKi8KLQlpZiAobGlzdF9sZW5ndGgo YXBsYW4tPmFwcGVuZHBsYW5zKSA9PSAxKQorCWlmIChsaXN0X2xlbmd0aChhcGxhbi0+YXAuc3Vi cGxhbnMpID09IDEpCiAJewotCQlQbGFuCSAgICpwID0gKFBsYW4gKikgbGluaXRpYWwoYXBsYW4t PmFwcGVuZHBsYW5zKTsKKwkJUGxhbgkgICAqcCA9IChQbGFuICopIGxpbml0aWFsKGFwbGFuLT5h cC5zdWJwbGFucyk7CiAKLQkJaWYgKHAtPnBhcmFsbGVsX2F3YXJlID09IGFwbGFuLT5wbGFuLnBh cmFsbGVsX2F3YXJlKQorCQlpZiAocC0+cGFyYWxsZWxfYXdhcmUgPT0gYXBsYW4tPmFwLnBsYW4u cGFyYWxsZWxfYXdhcmUpCiAJCQlyZXR1cm4gY2xlYW5fdXBfcmVtb3ZlZF9wbGFuX2xldmVsKChQ bGFuICopIGFwbGFuLCBwKTsKIAl9CiAKQEAgLTE4ODEsMTkgKzE4ODEsMTkgQEAgc2V0X2FwcGVu ZF9yZWZlcmVuY2VzKFBsYW5uZXJJbmZvICpyb290LAogCSAqLwogCXNldF9kdW1teV90bGlzdF9y ZWZlcmVuY2VzKChQbGFuICopIGFwbGFuLCBydG9mZnNldCk7CiAKLQlhcGxhbi0+YXBwcmVsaWRz ID0gb2Zmc2V0X3JlbGlkX3NldChhcGxhbi0+YXBwcmVsaWRzLCBydG9mZnNldCk7CisJYXBsYW4t PmFwLmFwcHJlbGlkcyA9IG9mZnNldF9yZWxpZF9zZXQoYXBsYW4tPmFwLmFwcHJlbGlkcywgcnRv ZmZzZXQpOwogCiAJLyoKIAkgKiBBZGQgUGFydGl0aW9uUHJ1bmVJbmZvLCBpZiBhbnksIHRvIFBs YW5uZXJHbG9iYWwgYW5kIHVwZGF0ZSB0aGUgaW5kZXguCiAJICogQWxzbyB1cGRhdGUgdGhlIFJU IGluZGV4ZXMgcHJlc2VudCBpbiBpdCB0byBhZGQgdGhlIG9mZnNldC4KIAkgKi8KLQlpZiAoYXBs YW4tPnBhcnRfcHJ1bmVfaW5kZXggPj0gMCkKLQkJYXBsYW4tPnBhcnRfcHJ1bmVfaW5kZXggPQot CQkJcmVnaXN0ZXJfcGFydHBydW5laW5mbyhyb290LCBhcGxhbi0+cGFydF9wcnVuZV9pbmRleCwg cnRvZmZzZXQpOworCWlmIChhcGxhbi0+YXAucGFydF9wcnVuZV9pbmRleCA+PSAwKQorCQlhcGxh bi0+YXAucGFydF9wcnVuZV9pbmRleCA9CisJCQlyZWdpc3Rlcl9wYXJ0cHJ1bmVpbmZvKHJvb3Qs IGFwbGFuLT5hcC5wYXJ0X3BydW5lX2luZGV4LCBydG9mZnNldCk7CiAKIAkvKiBXZSBkb24ndCBu ZWVkIHRvIHJlY3Vyc2UgdG8gbGVmdHRyZWUgb3IgcmlnaHR0cmVlIC4uLiAqLwotCUFzc2VydChh cGxhbi0+cGxhbi5sZWZ0dHJlZSA9PSBOVUxMKTsKLQlBc3NlcnQoYXBsYW4tPnBsYW4ucmlnaHR0 cmVlID09IE5VTEwpOworCUFzc2VydChhcGxhbi0+YXAucGxhbi5sZWZ0dHJlZSA9PSBOVUxMKTsK KwlBc3NlcnQoYXBsYW4tPmFwLnBsYW4ucmlnaHR0cmVlID09IE5VTEwpOwogCiAJcmV0dXJuIChQ bGFuICopIGFwbGFuOwogfQpAQCAtMTkxNywxMCArMTkxNywxMCBAQCBzZXRfbWVyZ2VhcHBlbmRf cmVmZXJlbmNlcyhQbGFubmVySW5mbyAqcm9vdCwKIAkgKiBvciBjaGVjayBxdWFscy4gIElmIGl0 J3MgZ290IGV4YWN0bHkgb25lIGNoaWxkIHBsYW4sIHRoZW4gaXQncyBub3QKIAkgKiBkb2luZyBh bnl0aGluZyB1c2VmdWwgYXQgYWxsLCBhbmQgd2UgY2FuIHN0cmlwIGl0IG91dC4KIAkgKi8KLQlB c3NlcnQobXBsYW4tPnBsYW4ucXVhbCA9PSBOSUwpOworCUFzc2VydChtcGxhbi0+YXAucGxhbi5x dWFsID09IE5JTCk7CiAKIAkvKiBGaXJzdCwgd2UgZ290dGEgcmVjdXJzZSBvbiB0aGUgY2hpbGRy ZW4gKi8KLQlmb3JlYWNoKGwsIG1wbGFuLT5tZXJnZXBsYW5zKQorCWZvcmVhY2gobCwgbXBsYW4t PmFwLnN1YnBsYW5zKQogCXsKIAkJbGZpcnN0KGwpID0gc2V0X3BsYW5fcmVmcyhyb290LCAoUGxh biAqKSBsZmlyc3QobCksIHJ0b2Zmc2V0KTsKIAl9CkBAIC0xOTM0LDExICsxOTM0LDExIEBAIHNl dF9tZXJnZWFwcGVuZF9yZWZlcmVuY2VzKFBsYW5uZXJJbmZvICpyb290LAogCSAqIG11bHRpcGxl IHRpbWVzLiAgKElmIHlvdSBjaGFuZ2UgdGhlc2UgcnVsZXMsIHVwZGF0ZQogCSAqIGNyZWF0ZV9t ZXJnZV9hcHBlbmRfcGF0aCB0byBtYXRjaC4pCiAJICovCi0JaWYgKGxpc3RfbGVuZ3RoKG1wbGFu LT5tZXJnZXBsYW5zKSA9PSAxKQorCWlmIChsaXN0X2xlbmd0aChtcGxhbi0+YXAuc3VicGxhbnMp ID09IDEpCiAJewotCQlQbGFuCSAgICpwID0gKFBsYW4gKikgbGluaXRpYWwobXBsYW4tPm1lcmdl cGxhbnMpOworCQlQbGFuCSAgICpwID0gKFBsYW4gKikgbGluaXRpYWwobXBsYW4tPmFwLnN1YnBs YW5zKTsKIAotCQlpZiAocC0+cGFyYWxsZWxfYXdhcmUgPT0gbXBsYW4tPnBsYW4ucGFyYWxsZWxf YXdhcmUpCisJCWlmIChwLT5wYXJhbGxlbF9hd2FyZSA9PSBtcGxhbi0+YXAucGxhbi5wYXJhbGxl bF9hd2FyZSkKIAkJCXJldHVybiBjbGVhbl91cF9yZW1vdmVkX3BsYW5fbGV2ZWwoKFBsYW4gKikg bXBsYW4sIHApOwogCX0KIApAQCAtMTk0OSwxOSArMTk0OSwxOSBAQCBzZXRfbWVyZ2VhcHBlbmRf cmVmZXJlbmNlcyhQbGFubmVySW5mbyAqcm9vdCwKIAkgKi8KIAlzZXRfZHVtbXlfdGxpc3RfcmVm ZXJlbmNlcygoUGxhbiAqKSBtcGxhbiwgcnRvZmZzZXQpOwogCi0JbXBsYW4tPmFwcHJlbGlkcyA9 IG9mZnNldF9yZWxpZF9zZXQobXBsYW4tPmFwcHJlbGlkcywgcnRvZmZzZXQpOworCW1wbGFuLT5h cC5hcHByZWxpZHMgPSBvZmZzZXRfcmVsaWRfc2V0KG1wbGFuLT5hcC5hcHByZWxpZHMsIHJ0b2Zm c2V0KTsKIAogCS8qCiAJICogQWRkIFBhcnRpdGlvblBydW5lSW5mbywgaWYgYW55LCB0byBQbGFu bmVyR2xvYmFsIGFuZCB1cGRhdGUgdGhlIGluZGV4LgogCSAqIEFsc28gdXBkYXRlIHRoZSBSVCBp bmRleGVzIHByZXNlbnQgaW4gaXQgdG8gYWRkIHRoZSBvZmZzZXQuCiAJICovCi0JaWYgKG1wbGFu LT5wYXJ0X3BydW5lX2luZGV4ID49IDApCi0JCW1wbGFuLT5wYXJ0X3BydW5lX2luZGV4ID0KLQkJ CXJlZ2lzdGVyX3BhcnRwcnVuZWluZm8ocm9vdCwgbXBsYW4tPnBhcnRfcHJ1bmVfaW5kZXgsIHJ0 b2Zmc2V0KTsKKwlpZiAobXBsYW4tPmFwLnBhcnRfcHJ1bmVfaW5kZXggPj0gMCkKKwkJbXBsYW4t PmFwLnBhcnRfcHJ1bmVfaW5kZXggPQorCQkJcmVnaXN0ZXJfcGFydHBydW5laW5mbyhyb290LCBt cGxhbi0+YXAucGFydF9wcnVuZV9pbmRleCwgcnRvZmZzZXQpOwogCiAJLyogV2UgZG9uJ3QgbmVl ZCB0byByZWN1cnNlIHRvIGxlZnR0cmVlIG9yIHJpZ2h0dHJlZSAuLi4gKi8KLQlBc3NlcnQobXBs YW4tPnBsYW4ubGVmdHRyZWUgPT0gTlVMTCk7Ci0JQXNzZXJ0KG1wbGFuLT5wbGFuLnJpZ2h0dHJl ZSA9PSBOVUxMKTsKKwlBc3NlcnQobXBsYW4tPmFwLnBsYW4ubGVmdHRyZWUgPT0gTlVMTCk7CisJ QXNzZXJ0KG1wbGFuLT5hcC5wbGFuLnJpZ2h0dHJlZSA9PSBOVUxMKTsKIAogCXJldHVybiAoUGxh biAqKSBtcGxhbjsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3N1 YnNlbGVjdC5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc3Vic2VsZWN0LmMKaW5kZXgg ZmY2M2QyMGY4ZDUuLmViNjE2Yzk3N2JjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGxhbi9zdWJzZWxlY3QuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zdWJz ZWxlY3QuYwpAQCAtMjc1OSw3ICsyNzU5LDcgQEAgZmluYWxpemVfcGxhbihQbGFubmVySW5mbyAq cm9vdCwgUGxhbiAqcGxhbiwKIAogCQljYXNlIFRfQXBwZW5kOgogCQkJewotCQkJCWZvcmVhY2go bCwgKChBcHBlbmQgKikgcGxhbiktPmFwcGVuZHBsYW5zKQorCQkJCWZvcmVhY2gobCwgKChBcHBl bmQgKikgcGxhbiktPmFwLnN1YnBsYW5zKQogCQkJCXsKIAkJCQkJY29udGV4dC5wYXJhbWlkcyA9 CiAJCQkJCQlibXNfYWRkX21lbWJlcnMoY29udGV4dC5wYXJhbWlkcywKQEAgLTI3NzQsNyArMjc3 NCw3IEBAIGZpbmFsaXplX3BsYW4oUGxhbm5lckluZm8gKnJvb3QsIFBsYW4gKnBsYW4sCiAKIAkJ Y2FzZSBUX01lcmdlQXBwZW5kOgogCQkJewotCQkJCWZvcmVhY2gobCwgKChNZXJnZUFwcGVuZCAq KSBwbGFuKS0+bWVyZ2VwbGFucykKKwkJCQlmb3JlYWNoKGwsICgoTWVyZ2VBcHBlbmQgKikgcGxh biktPmFwLnN1YnBsYW5zKQogCQkJCXsKIAkJCQkJY29udGV4dC5wYXJhbWlkcyA9CiAJCQkJCQli bXNfYWRkX21lbWJlcnMoY29udGV4dC5wYXJhbWlkcywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9ydWxldXRpbHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMu YwppbmRleCA5Zjg1ZWI4NmRhMS4uY2U1N2Y4MGU1ZTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9ydWxldXRpbHMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0 aWxzLmMKQEAgLTUxNjMsOSArNTE2Myw5IEBAIHNldF9kZXBhcnNlX3BsYW4oZGVwYXJzZV9uYW1l c3BhY2UgKmRwbnMsIFBsYW4gKnBsYW4pCiAJICogbmF0dXJhbCBjaG9pY2UuCiAJICovCiAJaWYg KElzQShwbGFuLCBBcHBlbmQpKQotCQlkcG5zLT5vdXRlcl9wbGFuID0gbGluaXRpYWwoKChBcHBl bmQgKikgcGxhbiktPmFwcGVuZHBsYW5zKTsKKwkJZHBucy0+b3V0ZXJfcGxhbiA9IGxpbml0aWFs KCgoQXBwZW5kICopIHBsYW4pLT5hcC5zdWJwbGFucyk7CiAJZWxzZSBpZiAoSXNBKHBsYW4sIE1l cmdlQXBwZW5kKSkKLQkJZHBucy0+b3V0ZXJfcGxhbiA9IGxpbml0aWFsKCgoTWVyZ2VBcHBlbmQg KikgcGxhbiktPm1lcmdlcGxhbnMpOworCQlkcG5zLT5vdXRlcl9wbGFuID0gbGluaXRpYWwoKChN ZXJnZUFwcGVuZCAqKSBwbGFuKS0+YXAuc3VicGxhbnMpOwogCWVsc2UKIAkJZHBucy0+b3V0ZXJf cGxhbiA9IG91dGVyUGxhbihwbGFuKTsKIApAQCAtNzk1NSwxMCArNzk1NSwxMCBAQCByZXNvbHZl X3NwZWNpYWxfdmFybm8oTm9kZSAqbm9kZSwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0LAogCiAJ CWlmIChJc0EoZHBucy0+cGxhbiwgQXBwZW5kKSkKIAkJCWNvbnRleHQtPmFwcGVuZHBhcmVudHMg PSBibXNfdW5pb24oY29udGV4dC0+YXBwZW5kcGFyZW50cywKLQkJCQkJCQkJCQkJICAgKChBcHBl bmQgKikgZHBucy0+cGxhbiktPmFwcHJlbGlkcyk7CisJCQkJCQkJCQkJCSAgICgoQXBwZW5kICop IGRwbnMtPnBsYW4pLT5hcC5hcHByZWxpZHMpOwogCQllbHNlIGlmIChJc0EoZHBucy0+cGxhbiwg TWVyZ2VBcHBlbmQpKQogCQkJY29udGV4dC0+YXBwZW5kcGFyZW50cyA9IGJtc191bmlvbihjb250 ZXh0LT5hcHBlbmRwYXJlbnRzLAotCQkJCQkJCQkJCQkgICAoKE1lcmdlQXBwZW5kICopIGRwbnMt PnBsYW4pLT5hcHByZWxpZHMpOworCQkJCQkJCQkJCQkgICAoKE1lcmdlQXBwZW5kICopIGRwbnMt PnBsYW4pLT5hcC5hcHByZWxpZHMpOwogCiAJCXB1c2hfY2hpbGRfcGxhbihkcG5zLCBkcG5zLT5v dXRlcl9wbGFuLCAmc2F2ZV9kcG5zKTsKIAkJcmVzb2x2ZV9zcGVjaWFsX3Zhcm5vKChOb2RlICop IHRsZS0+ZXhwciwgY29udGV4dCwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4 ZWNBcHBlbmQuaCBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNBcHBlbmQuaApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYzEwMzBkYzUyODIKLS0tIC9kZXYvbnVsbAor KysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjQXBwZW5kLmgKQEAgLTAsMCArMSwzMyBAQAor LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKiBleGVjQXBwZW5kLmgKKyAqCQlTdXBwb3J0IGZ1bmN0aW9u cyBmb3IgTWVyZ2VBcHBlbmQgYW5kIEFwcGVuZCBub2Rlcy4KKyAqCisgKiBQb3J0aW9ucyBDb3B5 cmlnaHQgKGMpIDE5OTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAK KyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0 eSBvZiBDYWxpZm9ybmlhCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCQlzcmMvaW5jbHVkZS9l eGVjdXRvci9leGVjQXBwZW5kLmgKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpZm5kZWYg RVhFQ0FQUEVORF9ICisjZGVmaW5lIEVYRUNBUFBFTkRfSAorCisjaW5jbHVkZSAibm9kZXMvZXhl Y25vZGVzLmgiCisKK3ZvaWQJCUV4ZWNJbml0QXBwZW5kZXIoQXBwZW5kZXJTdGF0ZSAqIHN0YXRl LAorCQkJCQkJCSBBcHBlbmRlciAqIG5vZGUsCisJCQkJCQkJIEVTdGF0ZSAqZXN0YXRlLAorCQkJ CQkJCSBpbnQgZWZsYWdzLAorCQkJCQkJCSBpbnQgZmlyc3RfcGFydGlhbF9wbGFuLAorCQkJCQkJ CSBpbnQgKmZpcnN0X3ZhbGlkX3BhcnRpYWxfcGxhbik7CisKK3ZvaWQJCUV4ZWNFbmRBcHBlbmRl cihBcHBlbmRlclN0YXRlICogbm9kZSk7CisKK3ZvaWQJCUV4ZWNSZVNjYW5BcHBlbmRlcihBcHBl bmRlclN0YXRlICogbm9kZSk7CisKK3ZvaWQJCUV4ZWNBcHBlbmRlckFzeW5jQmVnaW4oQXBwZW5k ZXJTdGF0ZSAqIG5vZGUpOworCit2b2lkCQlFeGVjQXBwZW5kZXJBc3luY0V2ZW50V2FpdChBcHBl bmRlclN0YXRlICogbm9kZSwgaW50IHRpbWVvdXQsIHVpbnQzMiB3YWl0X2V2ZW50X2luZm8pOwor CisjZW5kaWYJCQkJCQkJLyogRVhFQ0FQUEVORF9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9ub2Rlcy9leGVjbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCmluZGV4 IDU4ODdjYmY0ZjE2Li42OTEyM2EzMWJiZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMv ZXhlY25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKQEAgLTE0NzIs NiArMTQ3MiwyNyBAQCB0eXBlZGVmIHN0cnVjdCBNb2RpZnlUYWJsZVN0YXRlCiAJTGlzdAkgICAq bXRfbWVyZ2VKb2luQ29uZGl0aW9uczsKIH0gTW9kaWZ5VGFibGVTdGF0ZTsKIAordHlwZWRlZiBz dHJ1Y3QgQXBwZW5kZXJTdGF0ZQoreworCVBsYW5TdGF0ZQlwczsJCQkJLyogaXRzIGZpcnN0IGZp ZWxkIGlzIE5vZGVUYWcgKi8KKwlQbGFuU3RhdGUgKipwbGFuczsJCQkvKiBhcnJheSBvZiBQbGFu U3RhdGVzIGZvciBteSBpbnB1dHMgKi8KKwlpbnQJCQlucGxhbnM7CisKKwkvKiBBc3luY2hyb25v dXMgZXhlY3V0aW9uIHN0YXRlICovCisJQml0bWFwc2V0ICAqYXN5bmNwbGFuczsJCS8qIGFzeW5j aHJvbm91cyBwbGFucyBpbmRleGVzICovCisJaW50CQkJbmFzeW5jcGxhbnM7CS8qICMgb2YgYXN5 bmNocm9ub3VzIHBsYW5zICovCisJQXN5bmNSZXF1ZXN0ICoqYXN5bmNyZXF1ZXN0czsJLyogYXJy YXkgb2YgQXN5bmNSZXF1ZXN0cyAqLworCVR1cGxlVGFibGVTbG90ICoqYXN5bmNyZXN1bHRzOwkv KiB1bnJldHVybmVkIHJlc3VsdHMgb2YgYXN5bmMgcGxhbnMgKi8KKwlCaXRtYXBzZXQgICpuZWVk cmVxdWVzdDsJLyogYXN5bmNocm9ub3VzIHBsYW5zIG5lZWRpbmcgYSBuZXcgcmVxdWVzdCAqLwor CXN0cnVjdCBXYWl0RXZlbnRTZXQgKmV2ZW50c2V0OwkvKiBXYWl0RXZlbnRTZXQgZm9yIGZpbGUg ZGVzY3JpcHRvciB3YWl0cyAqLworCisJLyogUGFydGl0aW9uIHBydW5pbmcgc3RhdGUgKi8KKwlz dHJ1Y3QgUGFydGl0aW9uUHJ1bmVTdGF0ZSAqcHJ1bmVfc3RhdGU7CisJYm9vbAkJdmFsaWRfc3Vi cGxhbnNfaWRlbnRpZmllZDsKKwlCaXRtYXBzZXQgICp2YWxpZF9zdWJwbGFuczsKKwlCaXRtYXBz ZXQgICp2YWxpZF9hc3luY3BsYW5zOwkvKiB2YWxpZCBhc3luY2hyb25vdXMgcGxhbnMgaW5kZXhl cyAqLworfQkJCUFwcGVuZGVyU3RhdGU7CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0KICAqCSBBcHBl bmRTdGF0ZSBpbmZvcm1hdGlvbgogICoKQEAgLTE0OTMsMzEgKzE1MTQsMjAgQEAgc3RydWN0IFBh cnRpdGlvblBydW5lU3RhdGU7CiAKIHN0cnVjdCBBcHBlbmRTdGF0ZQogewotCVBsYW5TdGF0ZQlw czsJCQkJLyogaXRzIGZpcnN0IGZpZWxkIGlzIE5vZGVUYWcgKi8KLQlQbGFuU3RhdGUgKiphcHBl bmRwbGFuczsJLyogYXJyYXkgb2YgUGxhblN0YXRlcyBmb3IgbXkgaW5wdXRzICovCi0JaW50CQkJ YXNfbnBsYW5zOworCUFwcGVuZGVyU3RhdGUgYXM7CisKIAlpbnQJCQlhc193aGljaHBsYW47CiAJ Ym9vbAkJYXNfYmVndW47CQkvKiBmYWxzZSBtZWFucyBuZWVkIHRvIGluaXRpYWxpemUgKi8KLQlC aXRtYXBzZXQgICphc19hc3luY3BsYW5zOwkvKiBhc3luY2hyb25vdXMgcGxhbnMgaW5kZXhlcyAq LwotCWludAkJCWFzX25hc3luY3BsYW5zOyAvKiAjIG9mIGFzeW5jaHJvbm91cyBwbGFucyAqLwot CUFzeW5jUmVxdWVzdCAqKmFzX2FzeW5jcmVxdWVzdHM7CS8qIGFycmF5IG9mIEFzeW5jUmVxdWVz dHMgKi8KLQlUdXBsZVRhYmxlU2xvdCAqKmFzX2FzeW5jcmVzdWx0czsJLyogdW5yZXR1cm5lZCBy ZXN1bHRzIG9mIGFzeW5jIHBsYW5zICovCi0JaW50CQkJYXNfbmFzeW5jcmVzdWx0czsJLyogIyBv ZiB2YWxpZCBlbnRyaWVzIGluIGFzX2FzeW5jcmVzdWx0cyAqLwotCWJvb2wJCWFzX3N5bmNkb25l OwkvKiB0cnVlIGlmIGFsbCBzeW5jaHJvbm91cyBwbGFucyBkb25lIGluCi0JCQkJCQkJCSAqIGFz eW5jaHJvbm91cyBtb2RlLCBlbHNlIGZhbHNlICovCisJaW50CQkJYXNfbmFzeW5jcmVzdWx0czsJ LyogIyBvZiB2YWxpZCBlbnRyaWVzIGluIGFzeW5jcmVzdWx0cyAqLworCWJvb2wJCWFzX3N5bmNk b25lOwkvKiBhbGwgc3luYyBwbGFucyBkb25lIGluIGFzeW5jIG1vZGU/ICovCiAJaW50CQkJYXNf bmFzeW5jcmVtYWluOwkvKiAjIG9mIHJlbWFpbmluZyBhc3luY2hyb25vdXMgcGxhbnMgKi8KLQlC aXRtYXBzZXQgICphc19uZWVkcmVxdWVzdDsgLyogYXN5bmNocm9ub3VzIHBsYW5zIG5lZWRpbmcg YSBuZXcgcmVxdWVzdCAqLwotCXN0cnVjdCBXYWl0RXZlbnRTZXQgKmFzX2V2ZW50c2V0OwkvKiBX YWl0RXZlbnRTZXQgdXNlZCB0byBjb25maWd1cmUgZmlsZQotCQkJCQkJCQkJCSAqIGRlc2NyaXB0 b3Igd2FpdCBldmVudHMgKi8KLQlpbnQJCQlhc19maXJzdF9wYXJ0aWFsX3BsYW47CS8qIEluZGV4 IG9mICdhcHBlbmRwbGFucycgY29udGFpbmluZwotCQkJCQkJCQkJCSAqIHRoZSBmaXJzdCBwYXJ0 aWFsIHBsYW4gKi8KLQlQYXJhbGxlbEFwcGVuZFN0YXRlICphc19wc3RhdGU7IC8qIHBhcmFsbGVs IGNvb3JkaW5hdGlvbiBpbmZvICovCi0JU2l6ZQkJcHN0YXRlX2xlbjsJCS8qIHNpemUgb2YgcGFy YWxsZWwgY29vcmRpbmF0aW9uIGluZm8gKi8KLQlzdHJ1Y3QgUGFydGl0aW9uUHJ1bmVTdGF0ZSAq YXNfcHJ1bmVfc3RhdGU7Ci0JYm9vbAkJYXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZDsJLyog aXMgYXNfdmFsaWRfc3VicGxhbnMgdmFsaWQ/ICovCi0JQml0bWFwc2V0ICAqYXNfdmFsaWRfc3Vi cGxhbnM7Ci0JQml0bWFwc2V0ICAqYXNfdmFsaWRfYXN5bmNwbGFuczsJLyogdmFsaWQgYXN5bmNo cm9ub3VzIHBsYW5zIGluZGV4ZXMgKi8KLQlib29sCQkoKmNob29zZV9uZXh0X3N1YnBsYW4pIChB cHBlbmRTdGF0ZSAqKTsKKwlpbnQJCQlhc19maXJzdF9wYXJ0aWFsX3BsYW47CisKKwkvKiBQYXJh bGxlbCBhcHBlbmQgc3BlY2lmaWMgKi8KKwlQYXJhbGxlbEFwcGVuZFN0YXRlICphc19wc3RhdGU7 CisJU2l6ZQkJcHN0YXRlX2xlbjsKKworCWJvb2wJCSgqY2hvb3NlX25leHRfc3VicGxhbikgKHN0 cnVjdCBBcHBlbmRTdGF0ZSAqKTsKIH07CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0KQEAgLTE1Mzcs MjcgKzE1NDcsMTcgQEAgc3RydWN0IEFwcGVuZFN0YXRlCiAgKi8KIHR5cGVkZWYgc3RydWN0IE1l cmdlQXBwZW5kU3RhdGUKIHsKLQlQbGFuU3RhdGUJcHM7CQkJCS8qIGl0cyBmaXJzdCBmaWVsZCBp cyBOb2RlVGFnICovCi0JUGxhblN0YXRlICoqbWVyZ2VwbGFuczsJCS8qIGFycmF5IG9mIFBsYW5T dGF0ZXMgZm9yIG15IGlucHV0cyAqLwotCWludAkJCW1zX25wbGFuczsKKwlBcHBlbmRlclN0YXRl IG1zOworCiAJaW50CQkJbXNfbmtleXM7CiAJU29ydFN1cHBvcnQgbXNfc29ydGtleXM7CS8qIGFy cmF5IG9mIGxlbmd0aCBtc19ua2V5cyAqLwogCVR1cGxlVGFibGVTbG90ICoqbXNfc2xvdHM7CS8q IGFycmF5IG9mIGxlbmd0aCBtc19ucGxhbnMgKi8KIAlzdHJ1Y3QgYmluYXJ5aGVhcCAqbXNfaGVh cDsgLyogYmluYXJ5IGhlYXAgb2Ygc2xvdCBpbmRpY2VzICovCiAJYm9vbAkJbXNfaW5pdGlhbGl6 ZWQ7IC8qIGFyZSBzdWJwbGFucyBzdGFydGVkPyAqLwotCUJpdG1hcHNldCAgKm1zX2FzeW5jcGxh bnM7CS8qIGFzeW5jaHJvbm91cyBwbGFucyBpbmRleGVzICovCi0JaW50CQkJbXNfbmFzeW5jcGxh bnM7IC8qICMgb2YgYXN5bmNocm9ub3VzIHBsYW5zICovCi0JQXN5bmNSZXF1ZXN0ICoqbXNfYXN5 bmNyZXF1ZXN0czsJLyogYXJyYXkgb2YgQXN5bmNSZXF1ZXN0cyAqLwotCVR1cGxlVGFibGVTbG90 ICoqbXNfYXN5bmNyZXN1bHRzOwkvKiB1bnJldHVybmVkIHJlc3VsdHMgb2YgYXN5bmMgcGxhbnMg Ki8KKworCS8qIE1lcmdlLXNwZWNpZmljIGFzeW5jIHRyYWNraW5nICovCiAJQml0bWFwc2V0ICAq bXNfaGFzX2FzeW5jcmVzdWx0czsJLyogcGxhbnMgd2hpY2ggaGF2ZSBhc3luYyByZXN1bHRzICov CiAJQml0bWFwc2V0ICAqbXNfYXN5bmNyZW1haW47IC8qIHJlbWFpbmluZyBhc3luY2hyb25vdXMg cGxhbnMgKi8KLQlCaXRtYXBzZXQgICptc19uZWVkcmVxdWVzdDsgLyogYXN5bmNocm9ub3VzIHBs YW5zIG5lZWRpbmcgYSBuZXcgcmVxdWVzdCAqLwotCXN0cnVjdCBXYWl0RXZlbnRTZXQgKm1zX2V2 ZW50c2V0OwkvKiBXYWl0RXZlbnRTZXQgdXNlZCB0byBjb25maWd1cmUgZmlsZQotCQkJCQkJCQkJ CSAqIGRlc2NyaXB0b3Igd2FpdCBldmVudHMgKi8KLQlzdHJ1Y3QgUGFydGl0aW9uUHJ1bmVTdGF0 ZSAqbXNfcHJ1bmVfc3RhdGU7Ci0JYm9vbAkJbXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZDsJ LyogaXMgbXNfdmFsaWRfc3VicGxhbnMgdmFsaWQ/ICovCi0JQml0bWFwc2V0ICAqbXNfdmFsaWRf c3VicGxhbnM7Ci0JQml0bWFwc2V0ICAqbXNfdmFsaWRfYXN5bmNwbGFuczsJLyogdmFsaWQgYXN5 bmNocm9ub3VzIHBsYW5zIGluZGV4ZXMgKi8KIH0gTWVyZ2VBcHBlbmRTdGF0ZTsKIAogLyogR2V0 dGVycyBmb3IgQXBwZW5kU3RhdGUgYW5kIE1lcmdlQXBwZW5kU3RhdGUgKi8KQEAgLTE1NjcsOSAr MTU2Nyw5IEBAIEdldEFwcGVuZEV2ZW50U2V0KFBsYW5TdGF0ZSAqcHMpCiAJQXNzZXJ0KElzQShw cywgQXBwZW5kU3RhdGUpIHx8IElzQShwcywgTWVyZ2VBcHBlbmRTdGF0ZSkpOwogCiAJaWYgKElz QShwcywgQXBwZW5kU3RhdGUpKQotCQlyZXR1cm4gKChBcHBlbmRTdGF0ZSAqKSBwcyktPmFzX2V2 ZW50c2V0OworCQlyZXR1cm4gKChBcHBlbmRTdGF0ZSAqKSBwcyktPmFzLmV2ZW50c2V0OwogCWVs c2UKLQkJcmV0dXJuICgoTWVyZ2VBcHBlbmRTdGF0ZSAqKSBwcyktPm1zX2V2ZW50c2V0OworCQly ZXR1cm4gKChNZXJnZUFwcGVuZFN0YXRlICopIHBzKS0+bXMuZXZlbnRzZXQ7CiB9CiAKIHN0YXRp YyBpbmxpbmUgQml0bWFwc2V0ICoKQEAgLTE1NzgsOSArMTU3OCw5IEBAIEdldE5lZWRSZXF1ZXN0 KFBsYW5TdGF0ZSAqcHMpCiAJQXNzZXJ0KElzQShwcywgQXBwZW5kU3RhdGUpIHx8IElzQShwcywg TWVyZ2VBcHBlbmRTdGF0ZSkpOwogCiAJaWYgKElzQShwcywgQXBwZW5kU3RhdGUpKQotCQlyZXR1 cm4gKChBcHBlbmRTdGF0ZSAqKSBwcyktPmFzX25lZWRyZXF1ZXN0OworCQlyZXR1cm4gKChBcHBl bmRTdGF0ZSAqKSBwcyktPmFzLm5lZWRyZXF1ZXN0OwogCWVsc2UKLQkJcmV0dXJuICgoTWVyZ2VB cHBlbmRTdGF0ZSAqKSBwcyktPm1zX25lZWRyZXF1ZXN0OworCQlyZXR1cm4gKChNZXJnZUFwcGVu ZFN0YXRlICopIHBzKS0+bXMubmVlZHJlcXVlc3Q7CiB9CiAKIC8qIENvbW1vbiBwYXJ0IG9mIGNs YXNzaWZ5X21hdGNoaW5nX3N1YnBsYW5zKCkgZm9yIEFwcGVuZCBhbmQgTWVyZ2VBcHBlbmQgKi8K ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oIGIvc3JjL2luY2x1ZGUv bm9kZXMvcGxhbm5vZGVzLmgKaW5kZXggYzQzOTNhOTQzMjEuLjMwYzIwZTgwYjQwIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rl cy9wbGFubm9kZXMuaApAQCAtMzgwLDYgKzM4MCwyMCBAQCB0eXBlZGVmIHN0cnVjdCBNb2RpZnlU YWJsZQogCiBzdHJ1Y3QgUGFydGl0aW9uUHJ1bmVJbmZvOwkJLyogZm9yd2FyZCByZWZlcmVuY2Ug dG8gc3RydWN0IGJlbG93ICovCiAKK3R5cGVkZWYgc3RydWN0IEFwcGVuZGVyCit7CisJUGxhbgkJ cGxhbjsJCQkvKiBpdHMgZmlyc3QgZmllbGQgaXMgTm9kZVRhZyAqLworCUJpdG1hcHNldCAgKmFw cHJlbGlkczsJCS8qIFJUSXMgb2YgYXBwZW5kcmVsKHMpIGZvcm1lZCBieSB0aGlzIG5vZGUgKi8K KwlMaXN0CSAgICpzdWJwbGFuczsJCS8qIExpc3Qgb2YgUGxhbnMgKGZvcm1lcmx5CisJCQkJCQkJ CSAqIGFwcGVuZHBsYW5zL21lcmdlcGxhbnMpICovCisKKwkvKgorCSAqIEluZGV4IGludG8gUGxh bm5lZFN0bXQucGFydFBydW5lSW5mb3MgYW5kIHBhcmFsbGVsIGxpc3RzIGluIEVTdGF0ZS4gU2V0 CisJICogdG8gLTEgaWYgbm8gcnVuLXRpbWUgcHJ1bmluZyBpcyB1c2VkLgorCSAqLworCWludAkJ CXBhcnRfcHJ1bmVfaW5kZXg7Cit9CQkJQXBwZW5kZXI7CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0K ICAqCSBBcHBlbmQgbm9kZSAtCiAgKgkJR2VuZXJhdGUgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhl IHJlc3VsdHMgb2Ygc3ViLXBsYW5zLgpAQCAtMzg3LDI1ICs0MDEsMTYgQEAgc3RydWN0IFBhcnRp dGlvblBydW5lSW5mbzsJCS8qIGZvcndhcmQgcmVmZXJlbmNlIHRvIHN0cnVjdCBiZWxvdyAqLwog ICovCiB0eXBlZGVmIHN0cnVjdCBBcHBlbmQKIHsKLQlQbGFuCQlwbGFuOwotCS8qIFJUSXMgb2Yg YXBwZW5kcmVsKHMpIGZvcm1lZCBieSB0aGlzIG5vZGUgKi8KLQlCaXRtYXBzZXQgICphcHByZWxp ZHM7Ci0JTGlzdAkgICAqYXBwZW5kcGxhbnM7CisJQXBwZW5kZXIJYXA7CisKIAkvKiAjIG9mIGFz eW5jaHJvbm91cyBwbGFucyAqLwogCWludAkJCW5hc3luY3BsYW5zOwogCiAJLyoKLQkgKiBBbGwg J2FwcGVuZHBsYW5zJyBwcmVjZWRpbmcgdGhpcyBpbmRleCBhcmUgbm9uLXBhcnRpYWwgcGxhbnMu IEFsbAotCSAqICdhcHBlbmRwbGFucycgZnJvbSB0aGlzIGluZGV4IG9ud2FyZHMgYXJlIHBhcnRp YWwgcGxhbnMuCisJICogQWxsICdzdWJwbGFucycgcHJlY2VkaW5nIHRoaXMgaW5kZXggYXJlIG5v bi1wYXJ0aWFsIHBsYW5zLiBBbGwKKwkgKiAnc3VicGxhbnMnIGZyb20gdGhpcyBpbmRleCBvbndh cmRzIGFyZSBwYXJ0aWFsIHBsYW5zLgogCSAqLwogCWludAkJCWZpcnN0X3BhcnRpYWxfcGxhbjsK LQotCS8qCi0JICogSW5kZXggaW50byBQbGFubmVkU3RtdC5wYXJ0UHJ1bmVJbmZvcyBhbmQgcGFy YWxsZWwgbGlzdHMgaW4gRVN0YXRlOgotCSAqIGVzX3BhcnRfcHJ1bmVfc3RhdGVzIGFuZCBlc19w YXJ0X3BydW5lX3Jlc3VsdHMuIFNldCB0byAtMSBpZiBubwotCSAqIHJ1bi10aW1lIHBydW5pbmcg aXMgdXNlZC4KLQkgKi8KLQlpbnQJCQlwYXJ0X3BydW5lX2luZGV4OwogfSBBcHBlbmQ7CiAKIC8q IC0tLS0tLS0tLS0tLS0tLS0KQEAgLTQxNSwxMiArNDIwLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQXBw ZW5kCiAgKi8KIHR5cGVkZWYgc3RydWN0IE1lcmdlQXBwZW5kCiB7Ci0JUGxhbgkJcGxhbjsKLQot CS8qIFJUSXMgb2YgYXBwZW5kcmVsKHMpIGZvcm1lZCBieSB0aGlzIG5vZGUgKi8KLQlCaXRtYXBz ZXQgICphcHByZWxpZHM7Ci0KLQlMaXN0CSAgICptZXJnZXBsYW5zOworCUFwcGVuZGVyCWFwOwog CiAJLyogdGhlc2UgZmllbGRzIGFyZSBqdXN0IGxpa2UgdGhlIHNvcnQta2V5IGluZm8gaW4gc3Ry dWN0IFNvcnQ6ICovCiAKQEAgLTQzOCwxMyArNDM4LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgTWVyZ2VB cHBlbmQKIAogCS8qIE5VTExTIEZJUlNUL0xBU1QgZGlyZWN0aW9ucyAqLwogCWJvb2wJICAgKm51 bGxzRmlyc3QgcGdfbm9kZV9hdHRyKGFycmF5X3NpemUobnVtQ29scykpOwotCi0JLyoKLQkgKiBJ bmRleCBpbnRvIFBsYW5uZWRTdG10LnBhcnRQcnVuZUluZm9zIGFuZCBwYXJhbGxlbCBsaXN0cyBp biBFU3RhdGU6Ci0JICogZXNfcGFydF9wcnVuZV9zdGF0ZXMgYW5kIGVzX3BhcnRfcHJ1bmVfcmVz dWx0cy4gU2V0IHRvIC0xIGlmIG5vCi0JICogcnVuLXRpbWUgcHJ1bmluZyBpcyB1c2VkLgotCSAq LwotCWludAkJCXBhcnRfcHJ1bmVfaW5kZXg7CiB9IE1lcmdlQXBwZW5kOwogCiAvKiAtLS0tLS0t LS0tLS0tLS0tCi0tIAoyLjUxLjIKCg== --ba79e69925b52b52a6cf67524035fc64a4cd23c5da753b45f7537702bba2--