Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rmWzy-008S6F-Af for pgsql-hackers@arkaria.postgresql.org; Tue, 19 Mar 2024 10:47:15 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1rmWyy-00Crlo-3x for pgsql-hackers@arkaria.postgresql.org; Tue, 19 Mar 2024 10:46:12 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rmWyx-00Crlc-6y for pgsql-hackers@lists.postgresql.org; Tue, 19 Mar 2024 10:46:12 +0000 Received: from mail-pg1-x534.google.com ([2607:f8b0:4864:20::534]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1rmWyq-005LbP-Ly for pgsql-hackers@postgresql.org; Tue, 19 Mar 2024 10:46:11 +0000 Received: by mail-pg1-x534.google.com with SMTP id 41be03b00d2f7-5c66b093b86so4677200a12.0 for ; Tue, 19 Mar 2024 03:46:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1710845163; x=1711449963; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=ubdsW65PLUAPFeaKZnLARuiwDoRPkuL+3BgdJXjtveY=; b=VvbAnOSVh34MGSVeTGXggf2n0DKOct6hTbHE17W0QOOopUL3BWW65OzZROJ1adXUn8 zZFCsGXxHfgQG0QMW1D06SvV9qSEQqXp6+7xB0RWVUDe6ogI+bCopDRtqTyCfhI2l9cQ 29mmCI5W87UoJnWGR3hEOcc0udcS6jfrBysxkIEupzRBu0ieI8KizNZijLUmqRYOHB+t g0yM9ApvN302vRCUSaNmL66zOCFYnEillmvINJJdkAAWdVptiAHsUmRbf7h3Oz/HyyLg o5ry8GGnNX14bIuE3icNaEw1HG/SZz83XHBnLLhnA2QokpC4IYZwisu5z5rsUwyhLkrP fVGA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710845163; x=1711449963; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=ubdsW65PLUAPFeaKZnLARuiwDoRPkuL+3BgdJXjtveY=; b=xUWHXjIPVbMxknSTMJvr5Q/PPNnDkC5QieDfAzl7xNVlKlF+jiLawhkyjPBpJxzYn4 wO1/92BWGvE5IkvMDC8OkrOHGPrEFDbieFcxb5ARFDOSApuRfBgR2VvjSLZjzyuN48+p fu3sD0x9Y7o4Z+bRLj3Pm7be00Cz8zOtip5OM4rxKhDNJD5873rvh6bDiv2QIL7U57VP +ikTtrzLldJFrmI6+aHQvqIjprXKtQ+eKUXQhUScE4gZvDZJmJ+AjkyOij5EVtaX98SI oFUFNuX3692D+FBNqcqYrJzR53Bpq3Xxz3yWMXBkYZUVNln9G26N5DkH0V6mZ6Co8jbm Ohdg== X-Forwarded-Encrypted: i=1; AJvYcCWWv4Lc/8FVZ92Ez9ZtECxHVgOjN8iSDep0W6QYxnjBYGOg4EUYc1o2HZqCMmvrXmocqL35wasCuHUA43J92PdOdq7Fz5D1NXnFkiSH X-Gm-Message-State: AOJu0YyU9QDO6zlvk2oleeNa3BiUj8wInCoRC6Kh0j9GTl6FjWcm0R7l Lwb+y/ZLAnObdkXm3WqPjVZtkLU9ggNYpcBcbtIRgXxQemb5/4jQ5It2XahiuzsPjnksgol4zzp Z7J+bhMwP00esNynj7yHcj7RPw2E= X-Google-Smtp-Source: AGHT+IHi3h1An0ow3NOH4bXfcTq5tPX/xenM8XINKmkm7pXpCnR0PaTQx9TqTW488snjDf88Z6viyrNcZS1ZEhwPPu4= X-Received: by 2002:a17:90b:3646:b0:29c:6146:6adb with SMTP id nh6-20020a17090b364600b0029c61466adbmr3341162pjb.12.1710845162738; Tue, 19 Mar 2024 03:46:02 -0700 (PDT) MIME-Version: 1.0 References: <1cee81f3-312f-30e3-0282-c4df7ee72f93@xs4all.nl> <202403041503.5momp6knupgo@alvherre.pgsql> <562e5ad9-1357-4752-ad28-7e56740f74f8@enterprisedb.com> In-Reply-To: From: Amit Langote Date: Tue, 19 Mar 2024 19:45:43 +0900 Message-ID: Subject: Re: remaining sql/json patches To: Tomas Vondra Cc: Himanshu Upadhyaya , Alvaro Herrera , Erik Rijkers , jian he , Andres Freund , Andrew Dunstan , PostgreSQL-development Content-Type: multipart/mixed; boundary="00000000000030f4180614012e4f" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000030f4180614012e4f Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, On Thu, Mar 7, 2024 at 9:06=E2=80=AFPM Amit Langote wrote: > This boils down to the difference in the cast expression chosen to > convert the source value to int in the two cases. > > The case where the source value has no quotes, the chosen cast > expression is a FuncExpr for function numeric_int4(), which has no way > to suppress errors. When the source value has quotes, the cast > expression is a CoerceViaIO expression, which can suppress the error. > The default behavior is to suppress the error and return NULL, so the > correct behavior is when the source value has quotes. > > I think we'll need either: > > * fix the code in 0001 to avoid getting numeric_int4() in this case, > and generally cast functions that don't have soft-error handling > support, in favor of using IO coercion. > * fix FuncExpr (like CoerceViaIO) to respect SQL/JSON's request to > suppress errors and fix downstream functions like numeric_int4() to > comply by handling errors softly. > > I'm inclined to go with the 1st option as we already have the > infrastructure in place -- input functions can all handle errors > softly. I've adjusted the coercion-handling code to deal with this and similar cases to use coercion by calling the target type's input function in more cases. The resulting refactoring allowed me to drop a bunch of code and node structs, notably, the JsonCoercion and JsonItemCoercion nodes. Going with input function based coercion as opposed to using casts means the coercion may fail in more cases than before but I think that's acceptable. For example, the following case did not fail before because they'd use numeric_int() cast function to convert 1.234 to an integer: select json_value('{"a": 1.234}', '$.a' returning int error on error); ERROR: invalid input syntax for type integer: "1.234" It is same error as this case, where the source numerical value is specified as a string: select json_value('{"a": "1.234"}', '$.a' returning int error on error); ERROR: invalid input syntax for type integer: "1.234" I had hoped to get rid of all instances of using casts and standardize on coercion at runtime using input functions and json_populate_type(), but there are a few cases where casts produce saner results and also harmless (error-safe), such as cases where the target types are domains or are types with typmod. I've also tried to address most of Jian He's comments and a bunch of cleanups of my own. Attaching 0002 as the delta over v42 containing all of those changes. I intend to commit 0001+0002 after a bit more polishing. --=20 Thanks, Amit Langote --00000000000030f4180614012e4f Content-Type: application/octet-stream; name="v43-0002-Many-fixes-and-refactoring.patch" Content-Disposition: attachment; filename="v43-0002-Many-fixes-and-refactoring.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lty8z54y1 RnJvbSA5M2EwYzFlMTViZjQ5NTZjNzZlOGJhMWVmMjBjYjc5ZjcxMDczZGMyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFR1ZSwgMTIgTWFyIDIwMjQgMTM6MjA6MzQgKzA5MDAKU3ViamVjdDogW1BBVENIIHY0 MyAyLzNdIE1hbnkgZml4ZXMgYW5kIHJlZmFjdG9yaW5nCgotLS0KIGRvYy9zcmMvc2dtbC9mdW5j LnNnbWwgICAgICAgICAgICAgICAgICAgICAgICB8ICAxNCArLQogc3JjL2JhY2tlbmQvZXhlY3V0 b3IvZXhlY0V4cHIuYyAgICAgICAgICAgICAgIHwgMjU5ICsrKysrLS0tLS0tLQogc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAuYyAgICAgICAgIHwgMjU1ICsrKysrLS0tLS0tLQog c3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF9leHByLmMgICAgICAgICAgIHwgIDgyICstLS0K IHNyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5jcy5jICAgICAgICAgICAgICAgICB8ICAgNiArLQog c3JjL2JhY2tlbmQvbm9kZXMvbm9kZUZ1bmNzLmMgICAgICAgICAgICAgICAgIHwgMTE5ICstLS0t LQogc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueSAgICAgICAgICAgICAgICAgICAgIHwgICA0ICst CiBzcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZXhwci5jICAgICAgICAgICAgICAgfCAzOTQgKysr KysrKy0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfdGFyZ2V0LmMgICAgICAg ICAgICAgfCAgIDMgKwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jICAgICAgICAg ICAgIHwgICAzICsKIHNyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNFeHByLmggICAgICAgICAgICAg ICB8ICAgNSArLQogc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggICAgICAgICAgICAgICAg IHwgIDIyICstCiBzcmMvaW5jbHVkZS9ub2Rlcy9tYWtlZnVuY3MuaCAgICAgICAgICAgICAgICAg fCAgIDQgKy0KIHNyYy9pbmNsdWRlL25vZGVzL3ByaW1ub2Rlcy5oICAgICAgICAgICAgICAgICB8 ICA5MSArLS0tCiAuLi4vcmVncmVzcy9leHBlY3RlZC9zcWxqc29uX3F1ZXJ5ZnVuY3Mub3V0ICAg fCAgNjIgKy0tCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9zcWxqc29uX3F1ZXJ5ZnVuY3Muc3FsICAg fCAgMjMgKy0KIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgICAgICB8 ICAgMiAtCiAxNyBmaWxlcyBjaGFuZ2VkLCA0ODEgaW5zZXJ0aW9ucygrKSwgODY3IGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9mdW5jLnNnbWwgYi9kb2Mvc3JjL3NnbWwv ZnVuYy5zZ21sCmluZGV4IDcwZmExZjZjNjkuLjc1NGE1MmZiNDggMTAwNjQ0Ci0tLSBhL2RvYy9z cmMvc2dtbC9mdW5jLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbApAQCAtMTg2MDUs MTYgKzE4NjA1LDYgQEAgJC4qID8gKEAgbGlrZV9yZWdleCAiXlxcZCskIikKICAgIDxyZXBsYWNl YWJsZT5wYXRoX2V4cHJlc3Npb248L3JlcGxhY2VhYmxlPiBjYW4gY29udGFpbi4KICAgPC9wYXJh PgogCi0gIDxub3RlPgotICAgPHBhcmE+Ci0gICAgU1FML0pTT04gcXVlcnkgZnVuY3Rpb25zIGN1 cnJlbnRseSBvbmx5IGFjY2VwdCB2YWx1ZXMgb2YgdGhlCi0gICAgPHR5cGU+anNvbmI8L3R5cGU+ IHR5cGUsIGJlY2F1c2UgdGhlIFNRTC9KU09OIHBhdGggbGFuZ3VhZ2Ugb25seQotICAgIHN1cHBv cnRzIHRob3NlLCBzbyBpdCBtaWdodCBiZSBuZWNlc3NhcnkgdG8gY2FzdCB0aGUKLSAgICA8cmVw bGFjZWFibGU+Y29udGV4dF9pdGVtPC9yZXBsYWNlYWJsZT4gYXJndW1lbnQgb2YgdGhlc2UgZnVu Y3Rpb25zIHRvCi0gICAgPHR5cGU+anNvbmI8L3R5cGU+LgotICAgPC9wYXJhPgotICA8L25vdGU+ Ci0KICAgPHRhYmxlIGlkPSJmdW5jdGlvbnMtc3FsanNvbi1xdWVyeWluZyI+CiAgICA8dGl0bGU+ U1FML0pTT04gUXVlcnkgRnVuY3Rpb25zPC90aXRsZT4KICAgIDx0Z3JvdXAgY29scz0iMSI+CkBA IC0xODY4NCw3ICsxODY3NCw3IEBAIEVSUk9SOiAganNvbnBhdGggYXJyYXkgc3Vic2NyaXB0IGlz IG91dCBvZiBib3VuZHMKICAgICAgICAgPG9wdGlvbmFsPiB7IDxsaXRlcmFsPkVSUk9SPC9saXRl cmFsPiB8IDxsaXRlcmFsPk5VTEw8L2xpdGVyYWw+IHwgPGxpdGVyYWw+RU1QVFk8L2xpdGVyYWw+ IHsgPG9wdGlvbmFsPiA8bGl0ZXJhbD5BUlJBWTwvbGl0ZXJhbD4gPC9vcHRpb25hbD4gfCA8bGl0 ZXJhbD5PQkpFQ1Q8L2xpdGVyYWw+IH0gfCA8bGl0ZXJhbD5ERUZBVUxUPC9saXRlcmFsPiA8cmVw bGFjZWFibGU+ZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+IH0gPGxpdGVyYWw+T04gRVJST1I8L2xp dGVyYWw+IDwvb3B0aW9uYWw+KQogICAgICAgPC9wYXJhPgogICAgICAgIDxwYXJhPgotICAgICAg ICBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgdGhlCisgICAgICAgIFJldHVybnMgdGhl IHJlc3VsdCBvZiBhcHBseWluZyB0aGUgU1FML0pTT04KICAgICAgICAgPHJlcGxhY2VhYmxlPnBh dGhfZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+IHRvIHRoZQogICAgICAgICA8cmVwbGFjZWFibGU+ Y29udGV4dF9pdGVtPC9yZXBsYWNlYWJsZT4gdXNpbmcgdGhlCiAgICAgICAgIDxsaXRlcmFsPlBB U1NJTkc8L2xpdGVyYWw+IDxyZXBsYWNlYWJsZT52YWx1ZTwvcmVwbGFjZWFibGU+cy4KQEAgLTE4 NzYyLDcgKzE4NzUyLDcgQEAgREVUQUlMOiAgTWlzc2luZyAiXSIgYWZ0ZXIgYXJyYXkgZGltZW5z aW9ucy4KICAgICAgICAgPG9wdGlvbmFsPiB7IDxsaXRlcmFsPkVSUk9SPC9saXRlcmFsPiB8IDxs aXRlcmFsPk5VTEw8L2xpdGVyYWw+IHwgPGxpdGVyYWw+REVGQVVMVDwvbGl0ZXJhbD4gPHJlcGxh Y2VhYmxlPmV4cHJlc3Npb248L3JlcGxhY2VhYmxlPiB9IDxsaXRlcmFsPk9OIEVSUk9SPC9saXRl cmFsPiA8L29wdGlvbmFsPikKICAgICAgICA8L3BhcmE+CiAgICAgICAgPHBhcmE+Ci0gICAgICAg IFJldHVybnMgdGhlIHJlc3VsdCBvZiBhcHBseWluZyB0aGUKKyAgICAgICAgUmV0dXJucyB0aGUg cmVzdWx0IG9mIGFwcGx5aW5nIHRoZSBTUUwvSlNPTgogICAgICAgICA8cmVwbGFjZWFibGU+cGF0 aF9leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4gdG8gdGhlCiAgICAgICAgIDxyZXBsYWNlYWJsZT5j b250ZXh0X2l0ZW08L3JlcGxhY2VhYmxlPiB1c2luZyB0aGUKICAgICAgICAgPGxpdGVyYWw+UEFT U0lORzwvbGl0ZXJhbD4gPHJlcGxhY2VhYmxlPnZhbHVlPC9yZXBsYWNlYWJsZT5zLgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHIuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNFeHByLmMKaW5kZXggZTVjOTJlZmQ2MS4uMjI2OTY0MjkzNCAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHIuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRv ci9leGVjRXhwci5jCkBAIC04OCwxMiArODgsMTIgQEAgc3RhdGljIHZvaWQgRXhlY0J1aWxkQWdn VHJhbnNDYWxsKEV4cHJTdGF0ZSAqc3RhdGUsIEFnZ1N0YXRlICphZ2dzdGF0ZSwKIAkJCQkJCQkJ ICBGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywgQWdnU3RhdGVQZXJUcmFucyBwZXJ0cmFucywKIAkJ CQkJCQkJICBpbnQgdHJhbnNubywgaW50IHNldG5vLCBpbnQgc2V0b2ZmLCBib29sIGlzaGFzaCwK IAkJCQkJCQkJICBib29sIG51bGxjaGVjayk7Ci1zdGF0aWMgdm9pZCBFeGVjSW5pdEpzb25FeHBy KEpzb25FeHByICpqZXhwciwgRXhwclN0YXRlICpzdGF0ZSwKK3N0YXRpYyB2b2lkIEV4ZWNJbml0 SnNvbkV4cHIoSnNvbkV4cHIgKmpzZXhwciwgRXhwclN0YXRlICpzdGF0ZSwKIAkJCQkJCQkgRGF0 dW0gKnJlc3YsIGJvb2wgKnJlc251bGwsCiAJCQkJCQkJIEV4cHJFdmFsU3RlcCAqc2NyYXRjaCk7 Ci1zdGF0aWMgaW50CUV4ZWNJbml0SnNvbkV4cHJDb2VyY2lvbihFeHByU3RhdGUgKnN0YXRlLCBO b2RlICpjb2VyY2lvbiwKLQkJCQkJCQkJCSBFcnJvclNhdmVDb250ZXh0ICplc2NvbnRleHQsCi0J CQkJCQkJCQkgRGF0dW0gKnJlc3YsIGJvb2wgKnJlc251bGwpOworc3RhdGljIHZvaWQgRXhlY0lu aXRKc29uQ29lcmNpb24oRXhwclN0YXRlICpzdGF0ZSwgSnNvblJldHVybmluZyAqcmV0dXJuaW5n LAorCQkJCQkgRXJyb3JTYXZlQ29udGV4dCAqZXNjb250ZXh0LAorCQkJCQkgRGF0dW0gKnJlc3Ys IGJvb2wgKnJlc251bGwpOwogCiAKIC8qCkBAIC0yNDM0LDkgKzI0MzQsOSBAQCBFeGVjSW5pdEV4 cHJSZWMoRXhwciAqbm9kZSwgRXhwclN0YXRlICpzdGF0ZSwKIAogCQljYXNlIFRfSnNvbkV4cHI6 CiAJCQl7Ci0JCQkJSnNvbkV4cHIgICAqamV4cHIgPSBjYXN0Tm9kZShKc29uRXhwciwgbm9kZSk7 CisJCQkJSnNvbkV4cHIgICAqanNleHByID0gY2FzdE5vZGUoSnNvbkV4cHIsIG5vZGUpOwogCi0J CQkJRXhlY0luaXRKc29uRXhwcihqZXhwciwgc3RhdGUsIHJlc3YsIHJlc251bGwsICZzY3JhdGNo KTsKKwkJCQlFeGVjSW5pdEpzb25FeHByKGpzZXhwciwgc3RhdGUsIHJlc3YsIHJlc251bGwsICZz Y3JhdGNoKTsKIAkJCQlicmVhazsKIAkJCX0KIApAQCAtNDIxMywyNiArNDIxMywyOCBAQCBFeGVj QnVpbGRQYXJhbVNldEVxdWFsKFR1cGxlRGVzYyBkZXNjLAogICogUHVzaCBzdGVwcyB0byBldmFs dWF0ZSBhIEpzb25FeHByIGFuZCBpdHMgdmFyaW91cyBzdWJzaWRpYXJ5IGV4cHJlc3Npb25zLgog ICovCiBzdGF0aWMgdm9pZAotRXhlY0luaXRKc29uRXhwcihKc29uRXhwciAqamV4cHIsIEV4cHJT dGF0ZSAqc3RhdGUsCitFeGVjSW5pdEpzb25FeHByKEpzb25FeHByICpqc2V4cHIsIEV4cHJTdGF0 ZSAqc3RhdGUsCiAJCQkJIERhdHVtICpyZXN2LCBib29sICpyZXNudWxsLAogCQkJCSBFeHByRXZh bFN0ZXAgKnNjcmF0Y2gpCiB7CiAJSnNvbkV4cHJTdGF0ZSAqanNlc3RhdGUgPSBwYWxsb2MwKHNp emVvZihKc29uRXhwclN0YXRlKSk7CisJRXJyb3JTYXZlQ29udGV4dCAqZXNjb250ZXh0ID0KKwkJ anNleHByLT5vbl9lcnJvci0+YnR5cGUgIT0gSlNPTl9CRUhBVklPUl9FUlJPUiA/CisJCSZqc2Vz dGF0ZS0+ZXNjb250ZXh0IDogTlVMTDsKIAlMaXN0Q2VsbCAgICphcmdleHBybGM7CiAJTGlzdENl bGwgICAqYXJnbmFtZWxjOwogCUxpc3QJICAgKmp1bXBzX2lmX3NraXAgPSBOSUw7Ci0JTGlzdAkg ICAqanVtcHNfdG9fY29lcmNlX2ZpbmlzaCA9IE5JTDsKIAlMaXN0CSAgICpqdW1wc190b19lbmQg PSBOSUw7CiAJTGlzdENlbGwgICAqbGM7CiAJRXhwckV2YWxTdGVwICphczsKIAotCWpzZXN0YXRl LT5qc2V4cHIgPSBqZXhwcjsKKwlqc2VzdGF0ZS0+anNleHByID0ganNleHByOwogCiAJLyoKIAkg KiBFdmFsdWF0ZSBmb3JtYXR0ZWRfZXhwciBzdG9yaW5nIHRoZSByZXN1bHQgaW50bwogCSAqIGpz ZXN0YXRlLT5mb3JtYXR0ZWRfZXhwci4KIAkgKi8KLQlFeGVjSW5pdEV4cHJSZWMoKEV4cHIgKikg amV4cHItPmZvcm1hdHRlZF9leHByLCBzdGF0ZSwKKwlFeGVjSW5pdEV4cHJSZWMoKEV4cHIgKikg anNleHByLT5mb3JtYXR0ZWRfZXhwciwgc3RhdGUsCiAJCQkJCSZqc2VzdGF0ZS0+Zm9ybWF0dGVk X2V4cHIudmFsdWUsCiAJCQkJCSZqc2VzdGF0ZS0+Zm9ybWF0dGVkX2V4cHIuaXNudWxsKTsKIApA QCAtNDI0Nyw3ICs0MjQ5LDcgQEAgRXhlY0luaXRKc29uRXhwcihKc29uRXhwciAqamV4cHIsIEV4 cHJTdGF0ZSAqc3RhdGUsCiAJICogRXZhbHVhdGUgcGF0aHNwZWMgZXhwcmVzc2lvbiBzdG9yaW5n IHRoZSByZXN1bHQgaW50bwogCSAqIGpzZXN0YXRlLT5wYXRoc3BlYy4KIAkgKi8KLQlFeGVjSW5p dEV4cHJSZWMoKEV4cHIgKikgamV4cHItPnBhdGhfc3BlYywgc3RhdGUsCisJRXhlY0luaXRFeHBy UmVjKChFeHByICopIGpzZXhwci0+cGF0aF9zcGVjLCBzdGF0ZSwKIAkJCQkJJmpzZXN0YXRlLT5w YXRoc3BlYy52YWx1ZSwKIAkJCQkJJmpzZXN0YXRlLT5wYXRoc3BlYy5pc251bGwpOwogCkBAIC00 MjYwLDggKzQyNjIsOCBAQCBFeGVjSW5pdEpzb25FeHByKEpzb25FeHByICpqZXhwciwgRXhwclN0 YXRlICpzdGF0ZSwKIAogCS8qIFN0ZXBzIHRvIGNvbXB1dGUgUEFTU0lORyBhcmdzLiAqLwogCWpz ZXN0YXRlLT5hcmdzID0gTklMOwotCWZvcmJvdGgoYXJnZXhwcmxjLCBqZXhwci0+cGFzc2luZ192 YWx1ZXMsCi0JCQlhcmduYW1lbGMsIGpleHByLT5wYXNzaW5nX25hbWVzKQorCWZvcmJvdGgoYXJn ZXhwcmxjLCBqc2V4cHItPnBhc3NpbmdfdmFsdWVzLAorCQkJYXJnbmFtZWxjLCBqc2V4cHItPnBh c3NpbmdfbmFtZXMpCiAJewogCQlFeHByCSAgICphcmdleHByID0gKEV4cHIgKikgbGZpcnN0KGFy Z2V4cHJsYyk7CiAJCVN0cmluZwkgICAqYXJnbmFtZSA9IGxmaXJzdF9ub2RlKFN0cmluZywgYXJn bmFtZWxjKTsKQEAgLTQzMDAsOCArNDMwMiw4IEBAIEV4ZWNJbml0SnNvbkV4cHIoSnNvbkV4cHIg KmpleHByLCBFeHByU3RhdGUgKnN0YXRlLAogCXNjcmF0Y2gtPmQuY29uc3R2YWwuaXNudWxsID0g dHJ1ZTsKIAlFeHByRXZhbFB1c2hTdGVwKHN0YXRlLCBzY3JhdGNoKTsKIAotCS8qIEp1bXAgdG8g Y29lcmNlIHRoZSBOVUxMIHVzaW5nIHJlc3VsdF9jb2VyY2lvbiBpZiBwcmVzZW50LiAqLwotCWlm IChqZXhwci0+cmVzdWx0X2NvZXJjaW9uKQorCS8qIEp1bXAgdG8gY29lcmNlIHRoZSBOVUxMIHVz aW5nIGNvZXJjaW9uX2V4cHIgaWYgcHJlc2VudC4gKi8KKwlpZiAoanNleHByLT5jb2VyY2lvbl9l eHByKQogCXsKIAkJc2NyYXRjaC0+b3Bjb2RlID0gRUVPUF9KVU1QOwogCQlzY3JhdGNoLT5kLmp1 bXAuanVtcGRvbmUgPSBzdGF0ZS0+c3RlcHNfbGVuICsgMTsKQEAgLTQzMDksODEgKzQzMTEsODAg QEAgRXhlY0luaXRKc29uRXhwcihKc29uRXhwciAqamV4cHIsIEV4cHJTdGF0ZSAqc3RhdGUsCiAJ fQogCiAJLyoKLQkgKiBTdGVwcyB0byBjb2VyY2UgdGhlIHJlc3VsdCB2YWx1ZSBjb21wdXRlZCBi eSBFRU9QX0pTT05FWFBSX1BBVEguIFRvCi0JICogaGFuZGxlIGNvZXJjaW9uIGVycm9ycyBzb2Z0 bHksIHVzZSB0aGUgZm9sbG93aW5nIEVycm9yU2F2ZUNvbnRleHQgd2hlbgotCSAqIGluaXRpYWxp emluZyB0aGUgY29lcmNpb24gZXhwcmVzc2lvbnMsIGluY2x1ZGluZyBhbnkgSnNvbkNvZXJjaW9u Ci0JICogbm9kZXMuCisJICogVG8gaGFuZGxlIGNvZXJjaW9uIGVycm9ycyBzb2Z0bHksIHVzZSB0 aGUgZm9sbG93aW5nIEVycm9yU2F2ZUNvbnRleHQKKwkgKiB0byBwYXNzIHRvIEV4ZWNJbml0RXhw clJlYygpIHdoZW4gaW5pdGlhbGl6aW5nIHRoZSBjb2VyY2lvbiBleHByZXNzaW9ucworCSAqIGFu ZCBpbiB0aGUgRUVPUF9KU09ORVhQUl9DT0VSQ0lPTiBzdGVwLgogCSAqLwogCWpzZXN0YXRlLT5l c2NvbnRleHQudHlwZSA9IFRfRXJyb3JTYXZlQ29udGV4dDsKLQlpZiAoamV4cHItPnJlc3VsdF9j b2VyY2lvbikKKworCS8qIFN0ZXBzIHRvIGNvZXJjZSB0aGUgcmVzdWx0IHZhbHVlIGNvbXB1dGVk IGJ5IEVFT1BfSlNPTkVYUFJfUEFUSC4gKi8KKwlqc2VzdGF0ZS0+anVtcF9ldmFsX2NvZXJjaW9u X2V4cHIgPSAtMTsKKwlpZiAoanNleHByLT5jb2VyY2lvbl9leHByKQogCXsKLQkJanNlc3RhdGUt Pmp1bXBfZXZhbF9yZXN1bHRfY29lcmNpb24gPQotCQkJRXhlY0luaXRKc29uRXhwckNvZXJjaW9u KHN0YXRlLCBqZXhwci0+cmVzdWx0X2NvZXJjaW9uLAotCQkJCQkJCQkJIGpleHByLT5vbl9lcnJv ci0+YnR5cGUgIT0gSlNPTl9CRUhBVklPUl9FUlJPUiA/Ci0JCQkJCQkJCQkgJmpzZXN0YXRlLT5l c2NvbnRleHQgOiBOVUxMLAotCQkJCQkJCQkJIHJlc3YsIHJlc251bGwpOwotCQkvKiBKdW1wIHRv IENPRVJDSU9OX0ZJTklTSC4gKi8KLQkJc2NyYXRjaC0+b3Bjb2RlID0gRUVPUF9KVU1QOwotCQlz Y3JhdGNoLT5kLmp1bXAuanVtcGRvbmUgPSAtMTsJLyogc2V0IGJlbG93ICovCi0JCWp1bXBzX3Rv X2NvZXJjZV9maW5pc2ggPSBsYXBwZW5kX2ludChqdW1wc190b19jb2VyY2VfZmluaXNoLAotCQkJ CQkJCQkJCQkgc3RhdGUtPnN0ZXBzX2xlbik7Ci0JCUV4cHJFdmFsUHVzaFN0ZXAoc3RhdGUsIHNj cmF0Y2gpOwotCX0KLQllbHNlCi0JCWpzZXN0YXRlLT5qdW1wX2V2YWxfcmVzdWx0X2NvZXJjaW9u ID0gLTE7CisJCURhdHVtCSAgICpzYXZlX2lubmVybW9zdF9jYXNldmFsOworCQlib29sCSAgICpz YXZlX2lubmVybW9zdF9jYXNlbnVsbDsKKwkJRXJyb3JTYXZlQ29udGV4dCAqc2F2ZV9lc2NvbnRl eHQ7CiAKLQkvKiBTdGVwcyBmb3IgY29lcmNpbmcgSnNvbkl0ZW1UeXBlIHZhbHVlcyByZXR1cm5l ZCBieSBKc29uUGF0aFZhbHVlKCkuICovCi0JaWYgKGpleHByLT5pdGVtX2NvZXJjaW9ucykKKwkJ anNlc3RhdGUtPmp1bXBfZXZhbF9jb2VyY2lvbl9leHByID0gc3RhdGUtPnN0ZXBzX2xlbjsKKwkJ c2F2ZV9pbm5lcm1vc3RfY2FzZXZhbCA9IHN0YXRlLT5pbm5lcm1vc3RfY2FzZXZhbDsKKwkJc2F2 ZV9pbm5lcm1vc3RfY2FzZW51bGwgPSBzdGF0ZS0+aW5uZXJtb3N0X2Nhc2VudWxsOworCQlzYXZl X2VzY29udGV4dCA9IHN0YXRlLT5lc2NvbnRleHQ7CisKKwkJc3RhdGUtPmlubmVybW9zdF9jYXNl dmFsID0gcmVzdjsKKwkJc3RhdGUtPmlubmVybW9zdF9jYXNlbnVsbCA9IHJlc251bGw7CisJCXN0 YXRlLT5lc2NvbnRleHQgPSBlc2NvbnRleHQ7CisKKwkJRXhlY0luaXRFeHByUmVjKChFeHByICop IGpzZXhwci0+Y29lcmNpb25fZXhwciwgc3RhdGUsIHJlc3YsIHJlc251bGwpOworCisJCXN0YXRl LT5pbm5lcm1vc3RfY2FzZXZhbCA9IHNhdmVfaW5uZXJtb3N0X2Nhc2V2YWw7CisJCXN0YXRlLT5p bm5lcm1vc3RfY2FzZW51bGwgPSBzYXZlX2lubmVybW9zdF9jYXNlbnVsbDsKKwkJc3RhdGUtPmVz Y29udGV4dCA9IHNhdmVfZXNjb250ZXh0OworCX0KKwllbHNlIGlmIChqc2V4cHItPnVzZV9qc29u X2NvZXJjaW9uKQorCXsKKwkJanNlc3RhdGUtPmp1bXBfZXZhbF9jb2VyY2lvbl9leHByID0gc3Rh dGUtPnN0ZXBzX2xlbjsKKwkJRXhlY0luaXRKc29uQ29lcmNpb24oc3RhdGUsIGpzZXhwci0+cmV0 dXJuaW5nLCBlc2NvbnRleHQsIHJlc3YsIHJlc251bGwpOworCX0KKwllbHNlIGlmIChqc2V4cHIt PnVzZV9pb19jb2VyY2lvbikKIAl7CiAJCS8qCi0JCSAqIEhlcmUgd2UgY3JlYXRlIHRoZSBzdGVw cyBmb3IgZWFjaCBKc29uSXRlbVR5cGUgdHlwZSdzIGNvZXJjaW9uCi0JCSAqIGV4cHJlc3Npb24g YW5kIGFsc28gc3RvcmUgYSBmbGFnIHdoZXRoZXIgdGhlIGNvZXJjaW9uIGlzIGEgY2FzdAotCQkg KiBleHByZXNzaW9uLiAgRXhlY1ByZXBhcmVKc29uSXRlbUNvZXJjaW9uKCkgY2FsbGVkIGJ5Ci0J CSAqIEV4ZWNFdmFsSnNvbkV4cHJQYXRoKCkgd2lsbCBtYXAgYSBnaXZlbiBKc29uYlZhbHVlIHJl dHVybmVkIGJ5Ci0JCSAqIEpzb25QYXRoVmFsdWUoKSB0byBpdHMgIEpzb25JdGVtVHlwZSdzIGV4 cHJlc3Npb24ncyBzdGVwIGFkZHJlc3MKLQkJICogYW5kIHRoZSBmbGFnIGJ5IGluZGV4aW5nIHRo ZSBmb2xsb3dpbmcgYXJyYXlzIHdpdGggSnNvbkl0ZW1UeXBlCi0JCSAqIGVudW0gdmFsdWUuCisJ CSAqIE9ubHkgaW5pdGlhbGl6ZSB0aGUgRnVuY3Rpb25DYWxsSW5mbyBmb3IgdGhlIHRhcmdldCB0 eXBlJ3MgaW5wdXQKKwkJICogZnVuY3Rpb24sIHdoaWNoIGlzIGNhbGxlZCBieSBFeGVjRXZhbEpz b25FeHByUGF0aCgpIGl0c2VsZiwgc28gbm8KKwkJICogYWRkaXRpb25hbCBzdGVwIGlzIG5lY2Vz c2FyeS4KIAkJICovCi0JCWpzZXN0YXRlLT5udW1faXRlbV9jb2VyY2lvbnMgPSBsaXN0X2xlbmd0 aChqZXhwci0+aXRlbV9jb2VyY2lvbnMpOwotCQlqc2VzdGF0ZS0+ZXZhbF9pdGVtX2NvZXJjaW9u X2p1bXBzID0gKGludCAqKQotCQkJcGFsbG9jKGpzZXN0YXRlLT5udW1faXRlbV9jb2VyY2lvbnMg KiBzaXplb2YoaW50KSk7Ci0JCWpzZXN0YXRlLT5pdGVtX2NvZXJjaW9uX2lzX2Nhc3QgPSAoYm9v bCAqKQotCQkJcGFsbG9jMChqc2VzdGF0ZS0+bnVtX2l0ZW1fY29lcmNpb25zICogc2l6ZW9mKGJv b2wpKTsKLQkJZm9yZWFjaChsYywgamV4cHItPml0ZW1fY29lcmNpb25zKQotCQl7Ci0JCQlKc29u SXRlbUNvZXJjaW9uICppdGVtX2NvZXJjaW9uID0gbGZpcnN0KGxjKTsKLQkJCU5vZGUJICAgKmNv ZXJjaW9uID0gaXRlbV9jb2VyY2lvbi0+Y29lcmNpb247Ci0KLQkJCWpzZXN0YXRlLT5pdGVtX2Nv ZXJjaW9uX2lzX2Nhc3RbaXRlbV9jb2VyY2lvbi0+aXRlbV90eXBlXSA9Ci0JCQkJKGNvZXJjaW9u ICE9IE5VTEwgJiYgIUlzQShjb2VyY2lvbiwgSnNvbkNvZXJjaW9uKSk7Ci0JCQlqc2VzdGF0ZS0+ ZXZhbF9pdGVtX2NvZXJjaW9uX2p1bXBzW2l0ZW1fY29lcmNpb24tPml0ZW1fdHlwZV0gPQotCQkJ CUV4ZWNJbml0SnNvbkV4cHJDb2VyY2lvbihzdGF0ZSwgY29lcmNpb24sCi0JCQkJCQkJCQkJIGpl eHByLT5vbl9lcnJvci0+YnR5cGUgIT0gSlNPTl9CRUhBVklPUl9FUlJPUiA/Ci0JCQkJCQkJCQkJ ICZqc2VzdGF0ZS0+ZXNjb250ZXh0IDogTlVMTCwKLQkJCQkJCQkJCQkgcmVzdiwgcmVzbnVsbCk7 Ci0KLQkJCS8qIEp1bXAgdG8gQ09FUkNJT05fRklOSVNILiAqLwotCQkJc2NyYXRjaC0+b3Bjb2Rl ID0gRUVPUF9KVU1QOwotCQkJc2NyYXRjaC0+ZC5qdW1wLmp1bXBkb25lID0gLTE7CS8qIHNldCBi ZWxvdyAqLwotCQkJanVtcHNfdG9fY29lcmNlX2ZpbmlzaCA9IGxhcHBlbmRfaW50KGp1bXBzX3Rv X2NvZXJjZV9maW5pc2gsCi0JCQkJCQkJCQkJCQkgc3RhdGUtPnN0ZXBzX2xlbik7Ci0JCQlFeHBy RXZhbFB1c2hTdGVwKHN0YXRlLCBzY3JhdGNoKTsKLQkJfQorCQlPaWQJCQl0eXBpbnB1dDsKKwkJ T2lkCQkJdHlwaW9wYXJhbTsKKwkJRm1nckluZm8gICAqZmluZm87CisJCUZ1bmN0aW9uQ2FsbElu Zm8gZmNpbmZvOworCisJCWdldFR5cGVJbnB1dEluZm8oanNleHByLT5yZXR1cm5pbmctPnR5cGlk LCAmdHlwaW5wdXQsICZ0eXBpb3BhcmFtKTsKKwkJZmluZm8gPSBwYWxsb2MwKHNpemVvZihGbWdy SW5mbykpOworCQlmY2luZm8gPSBwYWxsb2MwKFNpemVGb3JGdW5jdGlvbkNhbGxJbmZvKDMpKTsK KwkJZm1ncl9pbmZvKHR5cGlucHV0LCBmaW5mbyk7CisJCWZtZ3JfaW5mb19zZXRfZXhwcigoTm9k ZSAqKSBqc2V4cHItPnJldHVybmluZywgZmluZm8pOworCQlJbml0RnVuY3Rpb25DYWxsSW5mb0Rh dGEoKmZjaW5mbywgZmluZm8sIDMsIEludmFsaWRPaWQsIE5VTEwsIE5VTEwpOworCisJCS8qCisJ CSAqIFdlIGNhbiBwcmVsb2FkIHRoZSBzZWNvbmQgYW5kIHRoaXJkIGFyZ3VtZW50cyBmb3IgdGhl IGlucHV0CisJCSAqIGZ1bmN0aW9uLCBzaW5jZSB0aGV5J3JlIGNvbnN0YW50cy4KKwkJICovCisJ CWZjaW5mby0+YXJnc1sxXS52YWx1ZSA9IE9iamVjdElkR2V0RGF0dW0odHlwaW9wYXJhbSk7CisJ CWZjaW5mby0+YXJnc1sxXS5pc251bGwgPSBmYWxzZTsKKwkJZmNpbmZvLT5hcmdzWzJdLnZhbHVl ID0gSW50MzJHZXREYXR1bShqc2V4cHItPnJldHVybmluZy0+dHlwbW9kKTsKKwkJZmNpbmZvLT5h cmdzWzJdLmlzbnVsbCA9IGZhbHNlOworCQlmY2luZm8tPmNvbnRleHQgPSAoTm9kZSAqKSBlc2Nv bnRleHQ7CisKKwkJanNlc3RhdGUtPmlucHV0X2ZpbmZvID0gZmluZm87CisJCWpzZXN0YXRlLT5p bnB1dF9mY2luZm8gPSBmY2luZm87CiAJfQogCiAJLyoKLQkgKiBBZGQgc3RlcCB0byByZXNldCB0 aGUgRXJyb3JTYXZlQ29udGV4dCBhbmQgc2V0IEpzb25FeHByU3RhdGUuZXJyb3IgaWYKLQkgKiB0 aGUgY29lcmNpb24gZXZhbHVhdGlvbiByYW4gaW50byBhbiBlcnJvciBidXQgd2FzIG5vdCB0aHJv d24gYmVjYXVzZSBvZgotCSAqIHRoZSBPTiBFUlJPUiBiZWhhdmlvci4KKwkgKiBBZGQgYSBzcGVj aWFsIHN0ZXAgdG8gY2hlY2sgaWYgdGhlIGNvZXJjaW9uIGV2YWx1YXRpb24gcmFuIGludG8gYW4K KwkgKiBlcnJvciBidXQgd2FzIG5vdCB0aHJvd24gYmVjYXVzZSBvZiB0aGUgT04gRVJST1IgYmVo YXZpb3IgYW5kIHNldAorCSAqIEpzb25FeHByU3RhdGUuZXJyb3IgaWYgc28uCiAJICovCi0JaWYg KGpleHByLT5yZXN1bHRfY29lcmNpb24gfHwgamV4cHItPml0ZW1fY29lcmNpb25zKQorCWlmIChq c2VzdGF0ZS0+anVtcF9ldmFsX2NvZXJjaW9uX2V4cHIgPj0gMCkKIAl7Ci0JCWZvcmVhY2gobGMs IGp1bXBzX3RvX2NvZXJjZV9maW5pc2gpCi0JCXsKLQkJCWFzID0gJnN0YXRlLT5zdGVwc1tsZmly c3RfaW50KGxjKV07Ci0JCQlhcy0+ZC5qdW1wLmp1bXBkb25lID0gc3RhdGUtPnN0ZXBzX2xlbjsK LQkJfQotCiAJCXNjcmF0Y2gtPm9wY29kZSA9IEVFT1BfSlNPTkVYUFJfQ09FUkNJT05fRklOSVNI OwogCQlzY3JhdGNoLT5kLmpzb25leHByLmpzZXN0YXRlID0ganNlc3RhdGU7CiAJCUV4cHJFdmFs UHVzaFN0ZXAoc3RhdGUsIHNjcmF0Y2gpOwpAQCAtNDM5Niw4ICs0Mzk3LDggQEAgRXhlY0luaXRK c29uRXhwcihKc29uRXhwciAqamV4cHIsIEV4cHJTdGF0ZSAqc3RhdGUsCiAJICogb2NjdXIgZHVy aW5nIEVFT1BfSlNPTkVYUFJfUEFUSCBldmFsdWF0aW9uIGFuZCBzdWJzZXF1ZW50IGNvZXJjaW9u CiAJICogZXZhbHVhdGlvbi4KIAkgKi8KLQlpZiAoamV4cHItPm9uX2Vycm9yICYmCi0JCWpleHBy LT5vbl9lcnJvci0+YnR5cGUgIT0gSlNPTl9CRUhBVklPUl9FUlJPUikKKwlpZiAoanNleHByLT5v bl9lcnJvciAmJgorCQlqc2V4cHItPm9uX2Vycm9yLT5idHlwZSAhPSBKU09OX0JFSEFWSU9SX0VS Uk9SKQogCXsKIAkJanNlc3RhdGUtPmp1bXBfZXJyb3IgPSBzdGF0ZS0+c3RlcHNfbGVuOwogCQlz Y3JhdGNoLT5vcGNvZGUgPSBFRU9QX0pVTVBfSUZfTk9UX1RSVUU7CkBAIC00NDEzLDE0ICs0NDE0 LDEzIEBAIEV4ZWNJbml0SnNvbkV4cHIoSnNvbkV4cHIgKmpleHByLCBFeHByU3RhdGUgKnN0YXRl LAogCQlFeHByRXZhbFB1c2hTdGVwKHN0YXRlLCBzY3JhdGNoKTsKIAogCQkvKiBTdGVwcyB0byBl dmFsdWF0ZSB0aGUgT04gRVJST1IgZXhwcmVzc2lvbiAqLwotCQlFeGVjSW5pdEV4cHJSZWMoKEV4 cHIgKikgamV4cHItPm9uX2Vycm9yLT5leHByLAorCQlFeGVjSW5pdEV4cHJSZWMoKEV4cHIgKikg anNleHByLT5vbl9lcnJvci0+ZXhwciwKIAkJCQkJCXN0YXRlLCByZXN2LCByZXNudWxsKTsKIAog CQkvKiBTdGVwcyB0byBjb2VyY2UgdGhlIE9OIEVSUk9SIGV4cHJlc3Npb24gaWYgbmVlZGVkICov Ci0JCSh2b2lkKSBFeGVjSW5pdEpzb25FeHByQ29lcmNpb24oc3RhdGUsCi0JCQkJCQkJCQkJKE5v ZGUgKikgamV4cHItPm9uX2Vycm9yLT5jb2VyY2lvbiwKLQkJCQkJCQkJCQkmanNlc3RhdGUtPmVz Y29udGV4dCwKLQkJCQkJCQkJCQlyZXN2LCByZXNudWxsKTsKKwkJaWYgKGpzZXhwci0+b25fZXJy b3ItPmNvZXJjZSkKKwkJCUV4ZWNJbml0SnNvbkNvZXJjaW9uKHN0YXRlLCBqc2V4cHItPnJldHVy bmluZywgZXNjb250ZXh0LCByZXN2LAorCQkJCQkJCQkgcmVzbnVsbCk7CiAKIAkJanVtcHNfdG9f ZW5kID0gbGFwcGVuZF9pbnQoanVtcHNfdG9fZW5kLCBzdGF0ZS0+c3RlcHNfbGVuKTsKIAkJc2Ny YXRjaC0+b3Bjb2RlID0gRUVPUF9KVU1QOwpAQCAtNDQyOSw4ICs0NDI5LDggQEAgRXhlY0luaXRK c29uRXhwcihKc29uRXhwciAqamV4cHIsIEV4cHJTdGF0ZSAqc3RhdGUsCiAJfQogCiAJLyogU3Rl cCB0byBoYW5kbGUgT04gRU1QVFkgYmVoYXZpb3JzLiAqLwotCWlmIChqZXhwci0+b25fZW1wdHkg IT0gTlVMTCAmJgotCQlqZXhwci0+b25fZW1wdHktPmJ0eXBlICE9IEpTT05fQkVIQVZJT1JfRVJS T1IpCisJaWYgKGpzZXhwci0+b25fZW1wdHkgIT0gTlVMTCAmJgorCQlqc2V4cHItPm9uX2VtcHR5 LT5idHlwZSAhPSBKU09OX0JFSEFWSU9SX0VSUk9SKQogCXsKIAkJanNlc3RhdGUtPmp1bXBfZW1w dHkgPSBzdGF0ZS0+c3RlcHNfbGVuOwogCkBAIC00NDQyLDE0ICs0NDQyLDEzIEBAIEV4ZWNJbml0 SnNvbkV4cHIoSnNvbkV4cHIgKmpleHByLCBFeHByU3RhdGUgKnN0YXRlLAogCQlFeHByRXZhbFB1 c2hTdGVwKHN0YXRlLCBzY3JhdGNoKTsKIAogCQkvKiBTdGVwcyB0byBldmFsdWF0ZSB0aGUgT04g RU1QVFkgZXhwcmVzc2lvbiAqLwotCQlFeGVjSW5pdEV4cHJSZWMoKEV4cHIgKikgamV4cHItPm9u X2VtcHR5LT5leHByLAorCQlFeGVjSW5pdEV4cHJSZWMoKEV4cHIgKikganNleHByLT5vbl9lbXB0 eS0+ZXhwciwKIAkJCQkJCXN0YXRlLCByZXN2LCByZXNudWxsKTsKIAogCQkvKiBTdGVwcyB0byBj b2VyY2UgdGhlIE9OIEVNUFRZIGV4cHJlc3Npb24gaWYgbmVlZGVkICovCi0JCSh2b2lkKSBFeGVj SW5pdEpzb25FeHByQ29lcmNpb24oc3RhdGUsCi0JCQkJCQkJCQkJKE5vZGUgKikgamV4cHItPm9u X2VtcHR5LT5jb2VyY2lvbiwKLQkJCQkJCQkJCQkmanNlc3RhdGUtPmVzY29udGV4dCwKLQkJCQkJ CQkJCQlyZXN2LCByZXNudWxsKTsKKwkJaWYgKGpzZXhwci0+b25fZW1wdHktPmNvZXJjZSkKKwkJ CUV4ZWNJbml0SnNvbkNvZXJjaW9uKHN0YXRlLCBqc2V4cHItPnJldHVybmluZywgZXNjb250ZXh0 LCByZXN2LAorCQkJCQkJCQkgcmVzbnVsbCk7CiAKIAkJc2NyYXRjaC0+b3Bjb2RlID0gRUVPUF9K VU1QOwogCQlzY3JhdGNoLT5kLmp1bXAuanVtcGRvbmUgPSAtMTsJLyogc2V0IGJlbG93ICovCkBA IC00NDY2LDY0ICs0NDY1LDI0IEBAIEV4ZWNJbml0SnNvbkV4cHIoSnNvbkV4cHIgKmpleHByLCBF eHByU3RhdGUgKnN0YXRlLAogCWpzZXN0YXRlLT5qdW1wX2VuZCA9IHN0YXRlLT5zdGVwc19sZW47 CiB9CiAKLS8qIEluaXRpYWxpemUgb25lIEpzb25Db2VyY2lvbiBmb3IgZXhlY3V0aW9uLiAqLwot c3RhdGljIGludAotRXhlY0luaXRKc29uRXhwckNvZXJjaW9uKEV4cHJTdGF0ZSAqc3RhdGUsIE5v ZGUgKmNvZXJjaW9uX2V4cHIsCi0JCQkJCQkgRXJyb3JTYXZlQ29udGV4dCAqZXNjb250ZXh0LAot CQkJCQkJIERhdHVtICpyZXN2LCBib29sICpyZXNudWxsKQorLyoKKyAqIEluaXRpYWxpemUgYSBF RU9QX0pTT05FWFBSX0NPRVJDSU9OIHN0ZXAgdG8gY29lcmNlIHRoZSB2YWx1ZSBnaXZlbiBpbiBy ZXN2CisgKiB0byB0aGUgZ2l2ZW4gUkVUVVJOSU5HIHR5cGUuCisgKi8KK3N0YXRpYyB2b2lkCitF eGVjSW5pdEpzb25Db2VyY2lvbihFeHByU3RhdGUgKnN0YXRlLCBKc29uUmV0dXJuaW5nICpyZXR1 cm5pbmcsCisJCQkJCSBFcnJvclNhdmVDb250ZXh0ICplc2NvbnRleHQsCisJCQkJCSBEYXR1bSAq cmVzdiwgYm9vbCAqcmVzbnVsbCkKIHsKLQlpbnQJCQlqdW1wX2V2YWxfY29lcmNpb247Ci0JRGF0 dW0JICAgKnNhdmVfaW5uZXJtb3N0X2Nhc2V2YWw7Ci0JYm9vbAkgICAqc2F2ZV9pbm5lcm1vc3Rf Y2FzZW51bGw7Ci0JRXJyb3JTYXZlQ29udGV4dCAqc2F2ZV9lc2NvbnRleHQ7Ci0KLQlpZiAoY29l cmNpb25fZXhwciA9PSBOVUxMKQotCQlyZXR1cm4gLTE7Ci0KLQlqdW1wX2V2YWxfY29lcmNpb24g PSBzdGF0ZS0+c3RlcHNfbGVuOwotCWlmIChJc0EoY29lcmNpb25fZXhwciwgSnNvbkNvZXJjaW9u KSkKLQl7Ci0JCUpzb25Db2VyY2lvbiAqY29lcmNpb24gPSAoSnNvbkNvZXJjaW9uICopIGNvZXJj aW9uX2V4cHI7Ci0JCUV4cHJFdmFsU3RlcCBzY3JhdGNoID0gezB9OwotCQlPaWQJCQl0eXBpbnB1 dDsKLQkJRm1nckluZm8gICAqZmluZm87Ci0JCU9pZAkJCXR5cGlvcGFyYW07Ci0KLQkJZ2V0VHlw ZUlucHV0SW5mbygoKEpzb25Db2VyY2lvbiAqKSBjb2VyY2lvbiktPnRhcmdldHR5cGUsCi0JCQkJ CQkgJnR5cGlucHV0LCAmdHlwaW9wYXJhbSk7Ci0JCWZpbmZvID0gcGFsbG9jMChzaXplb2YoRm1n ckluZm8pKTsKLQkJZm1ncl9pbmZvKHR5cGlucHV0LCBmaW5mbyk7Ci0KLQkJc2NyYXRjaC5vcGNv ZGUgPSBFRU9QX0pTT05FWFBSX0NPRVJDSU9OOwotCQlzY3JhdGNoLnJlc3ZhbHVlID0gcmVzdjsK LQkJc2NyYXRjaC5yZXNudWxsID0gcmVzbnVsbDsKLQkJc2NyYXRjaC5kLmpzb25leHByX2NvZXJj aW9uLmNvZXJjaW9uID0gY29lcmNpb247Ci0JCXNjcmF0Y2guZC5qc29uZXhwcl9jb2VyY2lvbi5p bnB1dF9maW5mbyA9IGZpbmZvOwotCQlzY3JhdGNoLmQuanNvbmV4cHJfY29lcmNpb24udHlwaW9w YXJhbSA9IHR5cGlvcGFyYW07Ci0JCXNjcmF0Y2guZC5qc29uZXhwcl9jb2VyY2lvbi5qc29uX3Bv cHVsYXRlX3R5cGVfY2FjaGUgPSBOVUxMOwotCQlzY3JhdGNoLmQuanNvbmV4cHJfY29lcmNpb24u ZXNjb250ZXh0ID0gZXNjb250ZXh0OwotCQlFeHByRXZhbFB1c2hTdGVwKHN0YXRlLCAmc2NyYXRj aCk7Ci0JCS8qIEluaXRpYWxpemUgdGhlIGNhc3QgZXhwcmVzc2lvbiBiZWxvdywgaWYgYW55LiAq LwotCQlpZiAoY29lcmNpb24tPmNhc3RfZXhwciAhPSBOVUxMKQotCQkJY29lcmNpb25fZXhwciA9 IGNvZXJjaW9uLT5jYXN0X2V4cHI7Ci0JCWVsc2UKLQkJCXJldHVybiBqdW1wX2V2YWxfY29lcmNp b247Ci0JfQotCi0JLyogUHVzaCBzdGVwKHMpIHRvIGNvbXB1dGUgY3N0YXRlLT5jb2VyY2lvbi4g Ki8KLQlzYXZlX2lubmVybW9zdF9jYXNldmFsID0gc3RhdGUtPmlubmVybW9zdF9jYXNldmFsOwot CXNhdmVfaW5uZXJtb3N0X2Nhc2VudWxsID0gc3RhdGUtPmlubmVybW9zdF9jYXNlbnVsbDsKLQlz YXZlX2VzY29udGV4dCA9IHN0YXRlLT5lc2NvbnRleHQ7Ci0KLQlzdGF0ZS0+aW5uZXJtb3N0X2Nh c2V2YWwgPSByZXN2OwotCXN0YXRlLT5pbm5lcm1vc3RfY2FzZW51bGwgPSByZXNudWxsOwotCXN0 YXRlLT5lc2NvbnRleHQgPSBlc2NvbnRleHQ7Ci0KLQlFeGVjSW5pdEV4cHJSZWMoKEV4cHIgKikg Y29lcmNpb25fZXhwciwgc3RhdGUsIHJlc3YsIHJlc251bGwpOwotCi0Jc3RhdGUtPmlubmVybW9z dF9jYXNldmFsID0gc2F2ZV9pbm5lcm1vc3RfY2FzZXZhbDsKLQlzdGF0ZS0+aW5uZXJtb3N0X2Nh c2VudWxsID0gc2F2ZV9pbm5lcm1vc3RfY2FzZW51bGw7Ci0Jc3RhdGUtPmVzY29udGV4dCA9IHNh dmVfZXNjb250ZXh0OworCUV4cHJFdmFsU3RlcCBzY3JhdGNoID0gezB9OwogCi0JcmV0dXJuIGp1 bXBfZXZhbF9jb2VyY2lvbjsKKwkvKiBGb3IganNvbl9wb3B1bGF0ZV90eXBlKCkgKi8KKwlzY3Jh dGNoLm9wY29kZSA9IEVFT1BfSlNPTkVYUFJfQ09FUkNJT047CisJc2NyYXRjaC5yZXN2YWx1ZSA9 IHJlc3Y7CisJc2NyYXRjaC5yZXNudWxsID0gcmVzbnVsbDsKKwlzY3JhdGNoLmQuanNvbmV4cHJf Y29lcmNpb24udGFyZ2V0dHlwZSA9IHJldHVybmluZy0+dHlwaWQ7CisJc2NyYXRjaC5kLmpzb25l eHByX2NvZXJjaW9uLnRhcmdldHR5cG1vZCA9IHJldHVybmluZy0+dHlwbW9kOworCXNjcmF0Y2gu ZC5qc29uZXhwcl9jb2VyY2lvbi5qc29uX3BvcHVsYXRlX3R5cGVfY2FjaGUgPSBOVUxMOworCXNj cmF0Y2guZC5qc29uZXhwcl9jb2VyY2lvbi5lc2NvbnRleHQgPSBlc2NvbnRleHQ7CisJRXhwckV2 YWxQdXNoU3RlcChzdGF0ZSwgJnNjcmF0Y2gpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv ZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBy SW50ZXJwLmMKaW5kZXggMmQ2YjExYmIzNC4uZGVhMzAwNmRlYyAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRv ci9leGVjRXhwckludGVycC5jCkBAIC0xODAsMTAgKzE4MCw3IEBAIHN0YXRpYyBwZ19hdHRyaWJ1 dGVfYWx3YXlzX2lubGluZSB2b2lkIEV4ZWNBZ2dQbGFpblRyYW5zQnlSZWYoQWdnU3RhdGUgKmFn Z3N0YXRlCiAJCQkJCQkJCQkJCQkJCQkgIEFnZ1N0YXRlUGVyR3JvdXAgcGVyZ3JvdXAsCiAJCQkJ CQkJCQkJCQkJCQkgIEV4cHJDb250ZXh0ICphZ2djb250ZXh0LAogCQkJCQkJCQkJCQkJCQkJICBp bnQgc2V0bm8pOwotc3RhdGljIHZvaWQgRXhlY1ByZXBhcmVKc29uSXRlbUNvZXJjaW9uKEpzb25i VmFsdWUgKml0ZW0sIEpzb25FeHByU3RhdGUgKmpzZXN0YXRlLAotCQkJCQkJCQkJCWJvb2wgdGhy b3dfZXJyb3IsCi0JCQkJCQkJCQkJaW50ICpqdW1wX2V2YWxfaXRlbV9jb2VyY2lvbiwKLQkJCQkJ CQkJCQlEYXR1bSAqcmVzdmFsdWUsIGJvb2wgKnJlc251bGwpOworc3RhdGljIGNoYXIgKkV4ZWNH ZXRKc29uVmFsdWVJdGVtU3RyaW5nKEpzb25iVmFsdWUgKml0ZW0sIGJvb2wgKnJlc251bGwpOwog CiAvKgogICogU2NhbGFyQXJyYXlPcEV4cHJIYXNoRW50cnkKQEAgLTQyNjksMTUgKzQyNjYsMTQg QEAgRXhlY0V2YWxKc29uRXhwclBhdGgoRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpv cCwKIAkJCQkJIEV4cHJDb250ZXh0ICplY29udGV4dCkKIHsKIAlKc29uRXhwclN0YXRlICpqc2Vz dGF0ZSA9IG9wLT5kLmpzb25leHByLmpzZXN0YXRlOwotCUpzb25FeHByICAgKmpleHByID0ganNl c3RhdGUtPmpzZXhwcjsKKwlKc29uRXhwciAgICpqc2V4cHIgPSBqc2VzdGF0ZS0+anNleHByOwog CURhdHVtCQlpdGVtOwogCUpzb25QYXRoICAgKnBhdGg7Ci0JYm9vbAkJdGhyb3dfZXJyb3IgPSBq ZXhwci0+b25fZXJyb3ItPmJ0eXBlID09IEpTT05fQkVIQVZJT1JfRVJST1I7CisJYm9vbAkJdGhy b3dfZXJyb3IgPSBqc2V4cHItPm9uX2Vycm9yLT5idHlwZSA9PSBKU09OX0JFSEFWSU9SX0VSUk9S OwogCWJvb2wJICAgIGVycm9yID0gZmFsc2UsCiAJCQkJZW1wdHkgPSBmYWxzZTsKLQotCS8qIE1p Z2h0IGdldCBvdmVycmlkZGVuIGZvciBKU09OX1ZBTFVFX09QIGJ5IGFuIHBlci1pdGVtIGNvZXJj aW9uLiAqLwotCWludAkJCWp1bXBfZXZhbF9jb2VyY2lvbiA9IGpzZXN0YXRlLT5qdW1wX2V2YWxf cmVzdWx0X2NvZXJjaW9uOworCWludAkJCWp1bXBfZXZhbF9jb2VyY2lvbiA9IGpzZXN0YXRlLT5q dW1wX2V2YWxfY29lcmNpb25fZXhwcjsKKwljaGFyCSAgICp2YWxfc3RyaW5nID0gTlVMTDsKIAog CWl0ZW0gPSBqc2VzdGF0ZS0+Zm9ybWF0dGVkX2V4cHIudmFsdWU7CiAJcGF0aCA9IERhdHVtR2V0 SnNvblBhdGhQKGpzZXN0YXRlLT5wYXRoc3BlYy52YWx1ZSk7CkBAIC00Mjg1LDcgKzQyODEsOCBA QCBFeGVjRXZhbEpzb25FeHByUGF0aChFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAgKm9w LAogCS8qIFNldCBlcnJvci9lbXB0eSB0byBmYWxzZS4gKi8KIAltZW1zZXQoJmpzZXN0YXRlLT5l cnJvciwgMCwgc2l6ZW9mKE51bGxhYmxlRGF0dW0pKTsKIAltZW1zZXQoJmpzZXN0YXRlLT5lbXB0 eSwgMCwgc2l6ZW9mKE51bGxhYmxlRGF0dW0pKTsKLQlzd2l0Y2ggKGpleHByLT5vcCkKKwlqc2Vz dGF0ZS0+ZXNjb250ZXh0LmVycm9yX29jY3VycmVkID0gZmFsc2U7CisJc3dpdGNoIChqc2V4cHIt Pm9wKQogCXsKIAkJY2FzZSBKU09OX0VYSVNUU19PUDoKIAkJCXsKQEAgLTQzMDIsMTIgKzQyOTks MjcgQEAgRXhlY0V2YWxKc29uRXhwclBhdGgoRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVw ICpvcCwKIAkJCWJyZWFrOwogCiAJCWNhc2UgSlNPTl9RVUVSWV9PUDoKLQkJCSpvcC0+cmVzdmFs dWUgPSBKc29uUGF0aFF1ZXJ5KGl0ZW0sIHBhdGgsIGpleHByLT53cmFwcGVyLCAmZW1wdHksCisJ CQkqb3AtPnJlc3ZhbHVlID0gSnNvblBhdGhRdWVyeShpdGVtLCBwYXRoLCBqc2V4cHItPndyYXBw ZXIsICZlbXB0eSwKIAkJCQkJCQkJCQkgICF0aHJvd19lcnJvciA/ICZlcnJvciA6IE5VTEwsCiAJ CQkJCQkJCQkJICBqc2VzdGF0ZS0+YXJncyk7CiAKLQkJCWlmICghZXJyb3IgJiYgIWVtcHR5KQot CQkJCSpvcC0+cmVzbnVsbCA9IChEYXR1bUdldFBvaW50ZXIoKm9wLT5yZXN2YWx1ZSkgPT0gTlVM TCk7CisJCQkqb3AtPnJlc251bGwgPSAoRGF0dW1HZXRQb2ludGVyKCpvcC0+cmVzdmFsdWUpID09 IE5VTEwpOworCisJCQkvKiBIYW5kbGUgT01JVCBRVU9URVMuICovCisJCQlpZiAoISpvcC0+cmVz bnVsbCAmJiBqc2V4cHItPm9taXRfcXVvdGVzKQorCQkJeworCQkJCXZhbF9zdHJpbmcgPSBKc29u YlVucXVvdGUoRGF0dW1HZXRKc29uYlAoKm9wLT5yZXN2YWx1ZSkpOworCisJCQkJLyoKKwkJCQkg KiBQYXNzIHRoZSBzdHJpbmcgYXMgYSB0ZXh0IHZhbHVlIHRvIHRoZSBjYXN0IGV4cHJlc3Npb24K KwkJCQkgKiBpZiBhbnkuICBJZiBub3QsIHVzZSB0aGUgaW5wdXQgZnVuY3Rpb24gY2FsbCBiZWxv dyB0bworCQkJCSAqIGRvIHRoZSBjb2VyY2lvbi4KKwkJCQkgKi8KKwkJCQlpZiAoanVtcF9ldmFs X2NvZXJjaW9uID49IDApCisJCQkJCSpvcC0+cmVzdmFsdWUgPQorCQkJCQkJRGlyZWN0RnVuY3Rp b25DYWxsMSh0ZXh0aW4sCisJCQkJCQkJCQkJCVBvaW50ZXJHZXREYXR1bSh2YWxfc3RyaW5nKSk7 CisJCQl9CiAJCQlicmVhazsKIAogCQljYXNlIEpTT05fVkFMVUVfT1A6CkBAIC00MzE4LDQ3ICs0 MzMwLDY5IEBAIEV4ZWNFdmFsSnNvbkV4cHJQYXRoKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJFdmFs U3RlcCAqb3AsCiAKIAkJCQlpZiAoamJ2ID09IE5VTEwpCiAJCQkJewotCQkJCQkvKiBXaWxsIGJl IGNvZXJjZWQgd2l0aCByZXN1bHRfY29lcmNpb24uICovCisJCQkJCS8qIFdpbGwgYmUgY29lcmNl ZCB3aXRoIGNvZXJjaW9uX2V4cHIuICovCiAJCQkJCSpvcC0+cmVzdmFsdWUgPSAoRGF0dW0pIDA7 CiAJCQkJCSpvcC0+cmVzbnVsbCA9IHRydWU7CiAJCQkJfQogCQkJCWVsc2UgaWYgKCFlcnJvciAm JiAhZW1wdHkpCiAJCQkJewotCQkJCQkvKgotCQkJCQkgKiBJZiB0aGUgcmVxdWVzdGVkIG91dHB1 dCB0eXBlIGlzIGpzb24oYiksIHVzZQotCQkJCQkgKiByZXN1bHRfY29lcmNpb24gdG8gZG8gdGhl IGNvZXJjaW9uLgotCQkJCQkgKi8KLQkJCQkJaWYgKGpleHByLT5yZXR1cm5pbmctPnR5cGlkID09 IEpTT05PSUQgfHwKLQkJCQkJCWpleHByLT5yZXR1cm5pbmctPnR5cGlkID09IEpTT05CT0lEKQor CQkJCQlpZiAoanNleHByLT5yZXR1cm5pbmctPnR5cGlkID09IEpTT05PSUQgfHwKKwkJCQkJCWpz ZXhwci0+cmV0dXJuaW5nLT50eXBpZCA9PSBKU09OQk9JRCkKIAkJCQkJewotCQkJCQkJKm9wLT5y ZXN2YWx1ZSA9IEpzb25iUEdldERhdHVtKEpzb25iVmFsdWVUb0pzb25iKGpidikpOwotCQkJCQkJ Km9wLT5yZXNudWxsID0gZmFsc2U7CisJCQkJCQl2YWxfc3RyaW5nID0gRGF0dW1HZXRDU3RyaW5n KERpcmVjdEZ1bmN0aW9uQ2FsbDEoanNvbmJfb3V0LAorCQkJCQkJCQkJCQkJCQlKc29uYlBHZXRE YXR1bShKc29uYlZhbHVlVG9Kc29uYihqYnYpKSkpOwogCQkJCQl9CiAJCQkJCWVsc2UKIAkJCQkJ eworCQkJCQkJdmFsX3N0cmluZyA9IEV4ZWNHZXRKc29uVmFsdWVJdGVtU3RyaW5nKGpidiwgb3At PnJlc251bGwpOworCiAJCQkJCQkvKgotCQkJCQkJICogRWxzZSwgdXNlIG9uZSBvZiB0aGUgaXRl bV9jb2VyY2lvbnMuCi0JCQkJCQkgKgotCQkJCQkJICogRXJyb3Igb3V0IGlmIG5vIGNhc3QgZXhw cmVzc2lvbiBleGlzdHMuCisJCQkJCQkgKiBQYXNzIHRoZSBzdHJpbmcgYXMgYSB0ZXh0IHZhbHVl IHRvIHRoZSBjYXN0IGV4cHJlc3Npb24KKwkJCQkJCSAqIGlmIGFueS4gIElmIG5vdCwgdXNlIHRo ZSBpbnB1dCBmdW5jdGlvbiBjYWxsIGJlbG93IHRvCisJCQkJCQkgKiBkbyB0aGUgY29lcmNpb24u CiAJCQkJCQkgKi8KLQkJCQkJCUV4ZWNQcmVwYXJlSnNvbkl0ZW1Db2VyY2lvbihqYnYsIGpzZXN0 YXRlLCB0aHJvd19lcnJvciwKLQkJCQkJCQkJCQkJCQkmanVtcF9ldmFsX2NvZXJjaW9uLAotCQkJ CQkJCQkJCQkJCW9wLT5yZXN2YWx1ZSwgb3AtPnJlc251bGwpOworCQkJCQkJKm9wLT5yZXN2YWx1 ZSA9IFBvaW50ZXJHZXREYXR1bSh2YWxfc3RyaW5nKTsKKwkJCQkJCWlmIChqdW1wX2V2YWxfY29l cmNpb24gPj0gMCkKKwkJCQkJCQkqb3AtPnJlc3ZhbHVlID0gRGlyZWN0RnVuY3Rpb25DYWxsMSh0 ZXh0aW4sICpvcC0+cmVzdmFsdWUpOwogCQkJCQl9CiAJCQkJfQogCQkJCWJyZWFrOwogCQkJfQog CiAJCWRlZmF1bHQ6Ci0JCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIFNRTC9KU09OIGV4cHJl c3Npb24gb3AgJWQiLCBqZXhwci0+b3ApOworCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBT UUwvSlNPTiBleHByZXNzaW9uIG9wICVkIiwKKwkJCQkgKGludCkganNleHByLT5vcCk7CiAJCQly ZXR1cm4gZmFsc2U7CiAJfQogCisJLyoKKwkgKiBDb2VyY2UgdGhlIHJlc3VsdCB2YWx1ZSBieSBj YWxsaW5nIHRoZSBpbnB1dCBmdW5jdGlvbiBjb2VyY2lvbi4KKwkgKiAqb3AtPnJlc3ZhbHVlIG11 c3QgcG9pbnQgdG8gQyBzdHJpbmcgaW4gdGhpcyBjYXNlLgorCSAqLworCWlmICghKm9wLT5yZXNu dWxsICYmIGpzZXhwci0+dXNlX2lvX2NvZXJjaW9uKQorCXsKKwkJRnVuY3Rpb25DYWxsSW5mbyBm Y2luZm87CisKKwkJZmNpbmZvID0ganNlc3RhdGUtPmlucHV0X2ZjaW5mbzsKKwkJQXNzZXJ0KGZj aW5mbyAhPSBOVUxMKTsKKwkJQXNzZXJ0KHZhbF9zdHJpbmcgIT0gTlVMTCk7CisJCWZjaW5mby0+ YXJnc1swXS52YWx1ZSA9IFBvaW50ZXJHZXREYXR1bSh2YWxfc3RyaW5nKTsKKwkJZmNpbmZvLT5h cmdzWzBdLmlzbnVsbCA9ICpvcC0+cmVzbnVsbDsKKwkJLyogc2Vjb25kIGFuZCB0aGlyZCBhcmd1 bWVudHMgYXJlIGFscmVhZHkgc2V0IHVwICovCisKKwkJZmNpbmZvLT5pc251bGwgPSBmYWxzZTsK KwkJKm9wLT5yZXN2YWx1ZSA9IEZ1bmN0aW9uQ2FsbEludm9rZShmY2luZm8pOworCQlpZiAoU09G VF9FUlJPUl9PQ0NVUlJFRCgmanNlc3RhdGUtPmVzY29udGV4dCkpCisJCQllcnJvciA9IHRydWU7 CisKKwkJanVtcF9ldmFsX2NvZXJjaW9uID0gLTE7CisJfQorCiAJaWYgKGVtcHR5KQogCXsKLQkJ aWYgKGpleHByLT5vbl9lbXB0eSkKKwkJaWYgKGpzZXhwci0+b25fZW1wdHkpCiAJCXsKLQkJCWlm IChqZXhwci0+b25fZW1wdHktPmJ0eXBlID09IEpTT05fQkVIQVZJT1JfRVJST1IpCisJCQlpZiAo anNleHByLT5vbl9lbXB0eS0+YnR5cGUgPT0gSlNPTl9CRUhBVklPUl9FUlJPUikKIAkJCQllcmVw b3J0KEVSUk9SLAogCQkJCQkJZXJyY29kZShFUlJDT0RFX05PX1NRTF9KU09OX0lURU0pLAogCQkJ CQkJZXJybXNnKCJubyBTUUwvSlNPTiBpdGVtIikpOwpAQCAtNDM2OCw3ICs0NDAyLDcgQEAgRXhl Y0V2YWxKc29uRXhwclBhdGgoRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCwKIAkJ CUFzc2VydChqc2VzdGF0ZS0+anVtcF9lbXB0eSA+PSAwKTsKIAkJCXJldHVybiBqc2VzdGF0ZS0+ anVtcF9lbXB0eTsKIAkJfQotCQllbHNlIGlmIChqZXhwci0+b25fZXJyb3ItPmJ0eXBlID09IEpT T05fQkVIQVZJT1JfRVJST1IpCisJCWVsc2UgaWYgKGpzZXhwci0+b25fZXJyb3ItPmJ0eXBlID09 IEpTT05fQkVIQVZJT1JfRVJST1IpCiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQllcnJjb2RlKEVS UkNPREVfTk9fU1FMX0pTT05fSVRFTSksCiAJCQkJCWVycm1zZygibm8gU1FML0pTT04gaXRlbSIp KTsKQEAgLTQzOTYsMzEgKzQ0MzAsMTggQEAgRXhlY0V2YWxKc29uRXhwclBhdGgoRXhwclN0YXRl ICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCwKIH0KIAogLyoKLSAqIFNlbGVjdHMgYSBjb2VyY2lv biBmb3IgYSBnaXZlbiBKc29uYlZhbHVlIGJhc2VkIG9uIGl0cyB0eXBlLgotICoKLSAqIE9uIHJl dHVybiwgKnJlc3ZhbHVlIGFuZCAqcmVzbnVsbCBhcmUgc2V0IHRvIHRoZSB2YWx1ZSBleHRyYWN0 ZWQgZnJvbSB0aGUKLSAqIEpzb25iVmFsdWUgYW5kICpqdW1wX2V2YWxfaXRlbV9jb2VyY2lvbiBp cyBzZXQgdG8gdGhlIHN0ZXAgYWRkcmVzcyBvZiB0aGUKLSAqIGNvZXJjaW9uIGV4cHJlc3Npb24u CisgKiBDb252ZXJ0IHRoZSBhIGdpdmVuIEpzb25iVmFsdWUgdG8gaXRzIEMgc3RyaW5nIHJlcHJl c2VudGF0aW9uCiAgKgotICogSWYgdGhlIGZvdW5kIGV4cHJlc3Npb24gaXMgYSBKc29uQ29lcmNp b24gbm9kZSB0aGF0IG1lYW5zIHRoZSBwYXJzZXIKLSAqIGRpZG50JyBmaW5kIGEgY2FzdCB0byBk byB0aGUgY29lcmNpb24sIHNvIHRocm93IGFuIGVycm9yIGlmIHRoZQotICogT04gRVJST1IgYmVo YXZpb3Igc2F5cyB0byBkbyBzby4KKyAqIFJldHVybnMgdGhlIHN0cmluZyBhcyBhIERhdHVtIHNl dHRpbmcgKnJlc251bGwgaWYgdGhlIEpzb25iVmFsdWUgaXMgYQorICogYSBqYnZOdWxsLgogICov Ci1zdGF0aWMgdm9pZAotRXhlY1ByZXBhcmVKc29uSXRlbUNvZXJjaW9uKEpzb25iVmFsdWUgKml0 ZW0sIEpzb25FeHByU3RhdGUgKmpzZXN0YXRlLAotCQkJCQkJCWJvb2wgdGhyb3dfZXJyb3IsCi0J CQkJCQkJaW50ICpqdW1wX2V2YWxfaXRlbV9jb2VyY2lvbiwKLQkJCQkJCQlEYXR1bSAqcmVzdmFs dWUsIGJvb2wgKnJlc251bGwpCitzdGF0aWMgY2hhciAqCitFeGVjR2V0SnNvblZhbHVlSXRlbVN0 cmluZyhKc29uYlZhbHVlICppdGVtLCBib29sICpyZXNudWxsKQogewotCWludAkJICAgKmV2YWxf aXRlbV9jb2VyY2lvbl9qdW1wcyA9IGpzZXN0YXRlLT5ldmFsX2l0ZW1fY29lcmNpb25fanVtcHM7 Ci0JYm9vbAkgICAqaXRlbV9jb2VyY2lvbl9pc19jYXN0ID0ganNlc3RhdGUtPml0ZW1fY29lcmNp b25faXNfY2FzdDsKLQlib29sCQlpc19jYXN0OwotCWludAkJCWp1bXBfdG87Ci0JSnNvbmJWYWx1 ZQlidWY7Ci0KIAlpZiAoaXRlbS0+dHlwZSA9PSBqYnZCaW5hcnkgJiYgSnNvbkNvbnRhaW5lcklz U2NhbGFyKGl0ZW0tPnZhbC5iaW5hcnkuZGF0YSkpCiAJewogCQlib29sCQlpc19zY2FsYXIgUEdf VVNFRF9GT1JfQVNTRVJUU19PTkxZOworCQlKc29uYlZhbHVlCWJ1ZjsKIAogCQlpc19zY2FsYXIg PSBKc29uYkV4dHJhY3RTY2FsYXIoaXRlbS0+dmFsLmJpbmFyeS5kYXRhLCAmYnVmKTsKIAkJaXRl bSA9ICZidWY7CkBAIC00NDMzLDU2ICs0NDU0LDQ0IEBAIEV4ZWNQcmVwYXJlSnNvbkl0ZW1Db2Vy Y2lvbihKc29uYlZhbHVlICppdGVtLCBKc29uRXhwclN0YXRlICpqc2VzdGF0ZSwKIAlzd2l0Y2gg KGl0ZW0tPnR5cGUpCiAJewogCQljYXNlIGpidk51bGw6Ci0JCQlpc19jYXN0ID0gaXRlbV9jb2Vy Y2lvbl9pc19jYXN0W0pzb25JdGVtVHlwZU51bGxdOwotCQkJanVtcF90byA9IGV2YWxfaXRlbV9j b2VyY2lvbl9qdW1wc1tKc29uSXRlbVR5cGVOdWxsXTsKLQkJCSpyZXN2YWx1ZSA9IChEYXR1bSkg MDsKIAkJCSpyZXNudWxsID0gdHJ1ZTsKLQkJCWJyZWFrOworCQkJcmV0dXJuIE5VTEw7CiAKIAkJ Y2FzZSBqYnZTdHJpbmc6Ci0JCQlpc19jYXN0ID0gaXRlbV9jb2VyY2lvbl9pc19jYXN0W0pzb25J dGVtVHlwZVN0cmluZ107Ci0JCQlqdW1wX3RvID0gZXZhbF9pdGVtX2NvZXJjaW9uX2p1bXBzW0pz b25JdGVtVHlwZVN0cmluZ107Ci0JCQkqcmVzdmFsdWUgPQotCQkJCVBvaW50ZXJHZXREYXR1bShj c3RyaW5nX3RvX3RleHRfd2l0aF9sZW4oaXRlbS0+dmFsLnN0cmluZy52YWwsCi0JCQkJCQkJCQkJ CQkJCSBpdGVtLT52YWwuc3RyaW5nLmxlbikpOwotCQkJYnJlYWs7CisJCQl7CisJCQkJY2hhciAq c3RyID0gcGFsbG9jKGl0ZW0tPnZhbC5zdHJpbmcubGVuICsgMSk7CisKKwkJCQltZW1jcHkoc3Ry LCBpdGVtLT52YWwuc3RyaW5nLnZhbCwgaXRlbS0+dmFsLnN0cmluZy5sZW4pOworCQkJCXN0cltp dGVtLT52YWwuc3RyaW5nLmxlbl0gPSAnXDAnOworCQkJCXJldHVybiBzdHI7CisJCQl9CiAKIAkJ Y2FzZSBqYnZOdW1lcmljOgotCQkJaXNfY2FzdCA9IGl0ZW1fY29lcmNpb25faXNfY2FzdFtKc29u SXRlbVR5cGVOdW1lcmljXTsKLQkJCWp1bXBfdG8gPSBldmFsX2l0ZW1fY29lcmNpb25fanVtcHNb SnNvbkl0ZW1UeXBlTnVtZXJpY107Ci0JCQkqcmVzdmFsdWUgPSBOdW1lcmljR2V0RGF0dW0oaXRl bS0+dmFsLm51bWVyaWMpOwotCQkJYnJlYWs7CisJCQlyZXR1cm4gRGF0dW1HZXRDU3RyaW5nKERp cmVjdEZ1bmN0aW9uQ2FsbDEobnVtZXJpY19vdXQsCisJCQkJCQkJCQkJCQkgICBOdW1lcmljR2V0 RGF0dW0oaXRlbS0+dmFsLm51bWVyaWMpKSk7CiAKIAkJY2FzZSBqYnZCb29sOgotCQkJaXNfY2Fz dCA9IGl0ZW1fY29lcmNpb25faXNfY2FzdFtKc29uSXRlbVR5cGVCb29sZWFuXTsKLQkJCWp1bXBf dG8gPSBldmFsX2l0ZW1fY29lcmNpb25fanVtcHNbSnNvbkl0ZW1UeXBlQm9vbGVhbl07Ci0JCQkq cmVzdmFsdWUgPSBCb29sR2V0RGF0dW0oaXRlbS0+dmFsLmJvb2xlYW4pOwotCQkJYnJlYWs7CisJ CQlyZXR1cm4gRGF0dW1HZXRDU3RyaW5nKERpcmVjdEZ1bmN0aW9uQ2FsbDEoYm9vbG91dCwKKwkJ CQkJCQkJCSAgIEJvb2xHZXREYXR1bShpdGVtLT52YWwuYm9vbGVhbikpKTsKIAogCQljYXNlIGpi dkRhdGV0aW1lOgotCQkJKnJlc3ZhbHVlID0gaXRlbS0+dmFsLmRhdGV0aW1lLnZhbHVlOwogCQkJ c3dpdGNoIChpdGVtLT52YWwuZGF0ZXRpbWUudHlwaWQpCiAJCQl7CiAJCQkJY2FzZSBEQVRFT0lE OgotCQkJCQlpc19jYXN0ID0gaXRlbV9jb2VyY2lvbl9pc19jYXN0W0pzb25JdGVtVHlwZURhdGVd OwotCQkJCQlqdW1wX3RvID0gZXZhbF9pdGVtX2NvZXJjaW9uX2p1bXBzW0pzb25JdGVtVHlwZURh dGVdOwotCQkJCQlicmVhazsKKwkJCQkJcmV0dXJuIERhdHVtR2V0Q1N0cmluZyhEaXJlY3RGdW5j dGlvbkNhbGwxKGRhdGVfb3V0LAorCQkJCQkJCQkJCQkgICBpdGVtLT52YWwuZGF0ZXRpbWUudmFs dWUpKTsKIAkJCQljYXNlIFRJTUVPSUQ6Ci0JCQkJCWlzX2Nhc3QgPSBpdGVtX2NvZXJjaW9uX2lz X2Nhc3RbSnNvbkl0ZW1UeXBlVGltZV07Ci0JCQkJCWp1bXBfdG8gPSBldmFsX2l0ZW1fY29lcmNp b25fanVtcHNbSnNvbkl0ZW1UeXBlVGltZV07Ci0JCQkJCWJyZWFrOworCQkJCQlyZXR1cm4gRGF0 dW1HZXRDU3RyaW5nKERpcmVjdEZ1bmN0aW9uQ2FsbDEodGltZV9vdXQsCisJCQkJCQkJCQkJCSAg IGl0ZW0tPnZhbC5kYXRldGltZS52YWx1ZSkpOwogCQkJCWNhc2UgVElNRVRaT0lEOgotCQkJCQlp c19jYXN0ID0gaXRlbV9jb2VyY2lvbl9pc19jYXN0W0pzb25JdGVtVHlwZVRpbWV0el07Ci0JCQkJ CWp1bXBfdG8gPSBldmFsX2l0ZW1fY29lcmNpb25fanVtcHNbSnNvbkl0ZW1UeXBlVGltZXR6XTsK LQkJCQkJYnJlYWs7CisJCQkJCXJldHVybiBEYXR1bUdldENTdHJpbmcoRGlyZWN0RnVuY3Rpb25D YWxsMSh0aW1ldHpfb3V0LAorCQkJCQkJCQkJCQkgICBpdGVtLT52YWwuZGF0ZXRpbWUudmFsdWUp KTsKIAkJCQljYXNlIFRJTUVTVEFNUE9JRDoKLQkJCQkJaXNfY2FzdCA9IGl0ZW1fY29lcmNpb25f aXNfY2FzdFtKc29uSXRlbVR5cGVUaW1lc3RhbXBdOwotCQkJCQlqdW1wX3RvID0gZXZhbF9pdGVt X2NvZXJjaW9uX2p1bXBzW0pzb25JdGVtVHlwZVRpbWVzdGFtcF07Ci0JCQkJCWJyZWFrOworCQkJ CQlyZXR1cm4gRGF0dW1HZXRDU3RyaW5nKERpcmVjdEZ1bmN0aW9uQ2FsbDEodGltZXN0YW1wX291 dCwKKwkJCQkJCQkJCQkJICAgaXRlbS0+dmFsLmRhdGV0aW1lLnZhbHVlKSk7CiAJCQkJY2FzZSBU SU1FU1RBTVBUWk9JRDoKLQkJCQkJaXNfY2FzdCA9IGl0ZW1fY29lcmNpb25faXNfY2FzdFtKc29u SXRlbVR5cGVUaW1lc3RhbXB0el07Ci0JCQkJCWp1bXBfdG8gPSBldmFsX2l0ZW1fY29lcmNpb25f anVtcHNbSnNvbkl0ZW1UeXBlVGltZXN0YW1wdHpdOwotCQkJCQlicmVhazsKKwkJCQkJcmV0dXJu IERhdHVtR2V0Q1N0cmluZyhEaXJlY3RGdW5jdGlvbkNhbGwxKHRpbWVzdGFtcHR6X291dCwKKwkJ CQkJCQkJCQkJICAgaXRlbS0+dmFsLmRhdGV0aW1lLnZhbHVlKSk7CiAJCQkJZGVmYXVsdDoKIAkJ CQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQganNvbmIgZGF0ZXRpbWUgdHlwZSBvaWQgJXUiLAog CQkJCQkJIGl0ZW0tPnZhbC5kYXRldGltZS50eXBpZCk7CkBAIC00NDkyLDM3ICs0NTAxLDIxIEBA IEV4ZWNQcmVwYXJlSnNvbkl0ZW1Db2VyY2lvbihKc29uYlZhbHVlICppdGVtLCBKc29uRXhwclN0 YXRlICpqc2VzdGF0ZSwKIAkJY2FzZSBqYnZBcnJheToKIAkJY2FzZSBqYnZPYmplY3Q6CiAJCWNh c2UgamJ2QmluYXJ5OgotCQkJaXNfY2FzdCA9IGl0ZW1fY29lcmNpb25faXNfY2FzdFtKc29uSXRl bVR5cGVDb21wb3NpdGVdOwotCQkJanVtcF90byA9IGV2YWxfaXRlbV9jb2VyY2lvbl9qdW1wc1tK c29uSXRlbVR5cGVDb21wb3NpdGVdOwotCQkJKnJlc3ZhbHVlID0gSnNvbmJQR2V0RGF0dW0oSnNv bmJWYWx1ZVRvSnNvbmIoaXRlbSkpOwotCQkJYnJlYWs7CisJCQlyZXR1cm4gRGF0dW1HZXRDU3Ry aW5nKERpcmVjdEZ1bmN0aW9uQ2FsbDEoanNvbmJfb3V0LAorCQkJCQkJCQkJICAgSnNvbmJQR2V0 RGF0dW0oSnNvbmJWYWx1ZVRvSnNvbmIoaXRlbSkpKSk7CiAKIAkJZGVmYXVsdDoKIAkJCWVsb2co RVJST1IsICJ1bmV4cGVjdGVkIGpzb25iIHZhbHVlIHR5cGUgJWQiLCBpdGVtLT50eXBlKTsKIAl9 CiAKLQkvKiBJZiB0aGUgZXhwcmVzc2lvbiBpcyBub3QgYSBjYXN0IGV4cHJlc3Npb24sIHRocm93 IGFuIGVycm9yLiAqLwotCWlmIChqdW1wX3RvID49IDAgJiYgIWlzX2Nhc3QpCi0JewotCQlpZiAo dGhyb3dfZXJyb3IpCi0JCQllcmVwb3J0KEVSUk9SLAotCQkJCQllcnJjb2RlKEVSUkNPREVfU1FM X0pTT05fSVRFTV9DQU5OT1RfQkVfQ0FTVF9UT19UQVJHRVRfVFlQRSksCi0JCQkJCWVycm1zZygi U1FML0pTT04gaXRlbSBjYW5ub3QgYmUgY2FzdCB0byB0YXJnZXQgdHlwZSIpKTsKLQotCQkqcmVz dmFsdWUgPSAoRGF0dW0pIDA7Ci0JCSpyZXNudWxsID0gdHJ1ZTsKLQl9Ci0KLQkqanVtcF9ldmFs X2l0ZW1fY29lcmNpb24gPSBqdW1wX3RvOworCUFzc2VydChmYWxzZSk7CisJKnJlc251bGwgPSB0 cnVlOworCXJldHVybiBOVUxMOwogfQogCiAvKgotICogQ29lcmNlIGEganNvbmIgb3IgYSBzY2Fs YXIgc3RyaW5nIHZhbHVlIHByb2R1Y2VkIGJ5IEV4ZWNFdmFsSnNvbkV4cHJQYXRoKCkKLSAqIG9y IGFuIE9OIEVSUk9SIC8gRU1QVFkgYmVoYXZpb3IgZXhwcmVzc2lvbiB0byB0aGUgdGFyZ2V0IHR5 cGUuCi0gKgotICogVGhpcyBpcyBhbHNvIHJlc3BvbnNpYmxlIGZvciByZW1vdmluZyBhbnkgcXVv dGVzIHByZXNlbnQgaW4gdGhlIHNvdXJjZQotICogdmFsdWUgaWYgSnNvbkNvZXJjaW9uLm9taXRf cXVvdGVzIGlzIHRydWUgYmVmb3JlIGNvZXJjaW5nIHRvIHRoZSB0YXJnZXQKLSAqIHR5cGUuCisg KiBDb2VyY2UgYSBqc29uYiB2YWx1ZSBwcm9kdWNlZCBieSBFeGVjRXZhbEpzb25FeHByUGF0aCgp IG9yIGFuIE9OIEVSUk9SIC8KKyAqIE9OIEVNUFRZIGJlaGF2aW9yIGV4cHJlc3Npb24gdG8gdGhl IHRhcmdldCB0eXBlLgogICoKICAqIEFueSBzb2Z0IGVycm9ycyB0aGF0IG9jY3VyIGhlcmUgd2ls bCBiZSBjaGVja2VkIGJ5CiAgKiBFRU9QX0pTT05FWFBSX0NPRVJDSU9OX0ZJTklTSCB0aGF0IHdp bGwgcnVuIGFmdGVyIHRoaXMuCkBAIC00NTMxLDQ4ICs0NTI0LDE0IEBAIHZvaWQKIEV4ZWNFdmFs SnNvbkNvZXJjaW9uKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJFdmFsU3RlcCAqb3AsCiAJCQkJCSBF eHByQ29udGV4dCAqZWNvbnRleHQpCiB7Ci0JSnNvbkNvZXJjaW9uICpjb2VyY2lvbiA9IG9wLT5k Lmpzb25leHByX2NvZXJjaW9uLmNvZXJjaW9uOwogCUVycm9yU2F2ZUNvbnRleHQgKmVzY29udGV4 dCA9IG9wLT5kLmpzb25leHByX2NvZXJjaW9uLmVzY29udGV4dDsKLQlEYXR1bQkJcmVzID0gKm9w LT5yZXN2YWx1ZTsKIAotCS8qCi0JICogSGFuZGxlIE9NSVQgUVVPVEVTLgotCSAqCi0JICogTm9y bWFsbHksIGpzb25fcG9wdWxhdGVfdHlwZSgpIGlzIHRoZSBwbGFjZSB0byBjb2VyY2UganNvbmIg dmFsdWVzIHRvCi0JICogdGhlIHJlcXVlc3RlZCB0YXJnZXQgdHlwZSwgaW5jbHVkaW5nIHRob3Nl IHRoYXQgYXJlIHNjYWxhciBzdHJpbmdzLCBidXQKLQkgKiBpdCBkb2Vzbid0IGhhdmUgdGhlIHN1 cHBvcnQgZm9yIHJlbW92aW5nIHF1b3RlcyB0byBpbXBsZW1lbnQgdGhlCi0JICogT01JVCBRVU9U RVMgY2xhdXNlLCBzbyB3ZSBoYW5kbGUgaXQgaGVyZS4KLQkgKi8KLQlpZiAoY29lcmNpb24tPm9t aXRfcXVvdGVzKQotCXsKLQkJRm1nckluZm8gICAqaW5wdXRfZmluZm8gPSBvcC0+ZC5qc29uZXhw cl9jb2VyY2lvbi5pbnB1dF9maW5mbzsKLQkJT2lkCQkJdHlwaW9wYXJhbSA9IG9wLT5kLmpzb25l eHByX2NvZXJjaW9uLnR5cGlvcGFyYW07Ci0JCWNoYXIJICAgKnZhbCA9ICEqb3AtPnJlc251bGwg PwotCQkJSnNvbmJVbnF1b3RlKERhdHVtR2V0SnNvbmJQKHJlcykpIDogTlVMTDsKLQotCQkvKgot CQkgKiBJZiB0aGUgY29lcmNpb24gbXVzdCBiZSBkb25lIHVzaW5nIGEgY2FzdCBleHByZXNzaW9u LCBwYXNzIHRvIGl0Ci0JCSAqIHRoZSB0ZXh0IHZlcnNpb24gb2YgdGhlIHF1b3RlLXN0cmlwcGVk IHN0cmluZy4gIElmIG5vdCwgZmluaXNoIHRoZQotCQkgKiBjb2VyY2lvbiBieSBjYWxsaW5nIHRo ZSBpbnB1dCBmdW5jdGlvbi4KLQkJICovCi0JCWlmIChjb2VyY2lvbi0+Y2FzdF9leHByKQotCQkJ Km9wLT5yZXN2YWx1ZSA9IERpcmVjdEZ1bmN0aW9uQ2FsbDEodGV4dGluLAotCQkJCQkJCQkJCQkJ Q1N0cmluZ0dldERhdHVtKHZhbCkpOwotCQllbHNlCi0JCQkodm9pZCkgSW5wdXRGdW5jdGlvbkNh bGxTYWZlKGlucHV0X2ZpbmZvLCB2YWwsIHR5cGlvcGFyYW0sCi0JCQkJCQkJCQkJIGNvZXJjaW9u LT50YXJnZXR0eXBtb2QsCi0JCQkJCQkJCQkJIChOb2RlICopIGVzY29udGV4dCwKLQkJCQkJCQkJ CQkgb3AtPnJlc3ZhbHVlKTsKLQl9Ci0JZWxzZQotCXsKLQkJKm9wLT5yZXN2YWx1ZSA9IGpzb25f cG9wdWxhdGVfdHlwZShyZXMsIEpTT05CT0lELAotCQkJCQkJCQkJCSAgIGNvZXJjaW9uLT50YXJn ZXR0eXBlLAotCQkJCQkJCQkJCSAgIGNvZXJjaW9uLT50YXJnZXR0eXBtb2QsCi0JCQkJCQkJCQkJ ICAgJm9wLT5kLmpzb25leHByX2NvZXJjaW9uLmpzb25fcG9wdWxhdGVfdHlwZV9jYWNoZSwKLQkJ CQkJCQkJCQkgICBlY29udGV4dC0+ZWN4dF9wZXJfcXVlcnlfbWVtb3J5LAotCQkJCQkJCQkJCSAg IG9wLT5yZXNudWxsLCAoTm9kZSAqKSBlc2NvbnRleHQpOwotCX0KKwkqb3AtPnJlc3ZhbHVlID0g anNvbl9wb3B1bGF0ZV90eXBlKCpvcC0+cmVzdmFsdWUsIEpTT05CT0lELAorCQkJCQkJCQkJICAg b3AtPmQuanNvbmV4cHJfY29lcmNpb24udGFyZ2V0dHlwZSwKKwkJCQkJCQkJCSAgIG9wLT5kLmpz b25leHByX2NvZXJjaW9uLnRhcmdldHR5cG1vZCwKKwkJCQkJCQkJCSAgICZvcC0+ZC5qc29uZXhw cl9jb2VyY2lvbi5qc29uX3BvcHVsYXRlX3R5cGVfY2FjaGUsCisJCQkJCQkJCQkgICBlY29udGV4 dC0+ZWN4dF9wZXJfcXVlcnlfbWVtb3J5LAorCQkJCQkJCQkJICAgb3AtPnJlc251bGwsIChOb2Rl ICopIGVzY29udGV4dCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9qaXQvbGx2 bS9sbHZtaml0X2V4cHIuYyBiL3NyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfZXhwci5jCmlu ZGV4IDBjNGQ1OTUzZGMuLjJjNDkxMDAyNTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2ppdC9s bHZtL2xsdm1qaXRfZXhwci5jCisrKyBiL3NyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfZXhw ci5jCkBAIC0xOTUwLDEwICsxOTUwLDggQEAgbGx2bV9jb21waWxlX2V4cHIoRXhwclN0YXRlICpz dGF0ZSkKIAkJCQkJICovCiAJCQkJCWlmIChqc2VzdGF0ZS0+anVtcF9lbXB0eSA+PSAwIHx8CiAJ CQkJCQlqc2VzdGF0ZS0+anVtcF9lcnJvciA+PSAwIHx8Ci0JCQkJCQlqc2VzdGF0ZS0+anVtcF9l dmFsX3Jlc3VsdF9jb2VyY2lvbiA+PSAwIHx8Ci0JCQkJCQlqc2VzdGF0ZS0+bnVtX2l0ZW1fY29l cmNpb25zID4gMCkKKwkJCQkJCWpzZXN0YXRlLT5qdW1wX2V2YWxfY29lcmNpb25fZXhwciA+PSAw KQogCQkJCQl7Ci0JCQkJCQlpbnQJCQlpOwogCQkJCQkJTExWTVZhbHVlUmVmIHZfanVtcF9lbXB0 eTsKIAkJCQkJCUxMVk1WYWx1ZVJlZiB2X2p1bXBfZXJyb3I7CiAJCQkJCQlMTFZNVmFsdWVSZWYg dl9qdW1wX2NvZXJjaW9uOwpAQCAtMTk2MSw4ICsxOTU5LDcgQEAgbGx2bV9jb21waWxlX2V4cHIo RXhwclN0YXRlICpzdGF0ZSkKIAkJCQkJCUxMVk1CYXNpY0Jsb2NrUmVmIGJfZG9uZSwKIAkJCQkJ CQkJCWJfZW1wdHksCiAJCQkJCQkJCQliX2Vycm9yLAotCQkJCQkJCQkJYl9yZXN1bHRfY29lcmNp b24sCi0JCQkJCQkJCSAgICpiX2l0ZW1fY29lcmNpb25zID0gTlVMTDsKKwkJCQkJCQkJCWJfY29l cmNpb25fZXhwcjsKIAogCQkJCQkJYl9lbXB0eSA9CiAJCQkJCQkJbF9iYl9iZWZvcmVfdihvcGJs b2Nrc1tvcG5vICsgMV0sCkBAIC0xOTcwLDIxICsxOTY3LDkgQEAgbGx2bV9jb21waWxlX2V4cHIo RXhwclN0YXRlICpzdGF0ZSkKIAkJCQkJCWJfZXJyb3IgPQogCQkJCQkJCWxfYmJfYmVmb3JlX3Yo b3BibG9ja3Nbb3BubyArIDFdLAogCQkJCQkJCQkJCSAgIm9wLiVkLmpzb25leHByX2Vycm9yIiwg b3Bubyk7Ci0JCQkJCQliX3Jlc3VsdF9jb2VyY2lvbiA9CisJCQkJCQliX2NvZXJjaW9uX2V4cHIg PQogCQkJCQkJCWxfYmJfYmVmb3JlX3Yob3BibG9ja3Nbb3BubyArIDFdLAotCQkJCQkJCQkJCSAg Im9wLiVkLmpzb25leHByX3Jlc3VsdF9jb2VyY2lvbiIsIG9wbm8pOwotCQkJCQkJaWYgKGpzZXN0 YXRlLT5udW1faXRlbV9jb2VyY2lvbnMgPiAwKQotCQkJCQkJewotCQkJCQkJCWJfaXRlbV9jb2Vy Y2lvbnMgPSBwYWxsb2Moc2l6ZW9mKExMVk1CYXNpY0Jsb2NrUmVmKSAqCi0JCQkJCQkJCQkJCQkJ ICBqc2VzdGF0ZS0+bnVtX2l0ZW1fY29lcmNpb25zKTsKLQkJCQkJCQlmb3IgKGkgPSAwOyBpIDwg anNlc3RhdGUtPm51bV9pdGVtX2NvZXJjaW9uczsgaSsrKQotCQkJCQkJCXsKLQkJCQkJCQkJYl9p dGVtX2NvZXJjaW9uc1tpXSA9Ci0JCQkJCQkJCQlsX2JiX2JlZm9yZV92KG9wYmxvY2tzW29wbm8g KyAxXSwKLQkJCQkJCQkJCQkJCSAgIm9wLiVkLmpzb25leHByX2l0ZW1fY29lcmNpb24uJWQiLAot CQkJCQkJCQkJCQkJICBvcG5vLCBpKTsKLQkJCQkJCQl9Ci0JCQkJCQl9CisJCQkJCQkJCQkJICAi b3AuJWQuanNvbmV4cHJfY29lcmNpb25fZXhwciIsIG9wbm8pOwogCQkJCQkJYl9kb25lID0KIAkJ CQkJCQlsX2JiX2JlZm9yZV92KG9wYmxvY2tzW29wbm8gKyAxXSwKIAkJCQkJCQkJCQkgICJvcC4l ZC5qc29uZXhwcl9kb25lIiwgb3Bubyk7CkBAIC0xOTkyLDY2ICsxOTc3LDQ1IEBAIGxsdm1fY29t cGlsZV9leHByKEV4cHJTdGF0ZSAqc3RhdGUpCiAJCQkJCQl2X3N3aXRjaCA9IExMVk1CdWlsZFN3 aXRjaChiLAogCQkJCQkJCQkJCQkJICAgdl9yZXQsCiAJCQkJCQkJCQkJCQkgICBiX2RvbmUsCi0J CQkJCQkJCQkJCQkgICBqc2VzdGF0ZS0+bnVtX2l0ZW1fY29lcmNpb25zICsgMyk7CisJCQkJCQkJ CQkJCQkgICAzKTsKIAkJCQkJCS8qIFJldHVybmVkIGpzZXN0YXRlLT5qdW1wX2VtcHR5PyAqLwog CQkJCQkJaWYgKGpzZXN0YXRlLT5qdW1wX2VtcHR5ID49IDApCiAJCQkJCQl7CiAJCQkJCQkJdl9q dW1wX2VtcHR5ID0gbF9pbnQzMl9jb25zdChsYywganNlc3RhdGUtPmp1bXBfZW1wdHkpOwogCQkJ CQkJCUxMVk1BZGRDYXNlKHZfc3dpdGNoLCB2X2p1bXBfZW1wdHksIGJfZW1wdHkpOwogCQkJCQkJ fQotCQkJCQkJLyogUmV0dXJuZWQganNlc3RhdGUtPmp1bXBfZXJyb3I/ICovCi0JCQkJCQlpZiAo anNlc3RhdGUtPmp1bXBfZXJyb3IgPj0gMCkKLQkJCQkJCXsKLQkJCQkJCQl2X2p1bXBfZXJyb3Ig PSBsX2ludDMyX2NvbnN0KGxjLCBqc2VzdGF0ZS0+anVtcF9lcnJvcik7Ci0JCQkJCQkJTExWTUFk ZENhc2Uodl9zd2l0Y2gsIHZfanVtcF9lcnJvciwgYl9lcnJvcik7Ci0JCQkJCQl9Ci0JCQkJCQkv KiBSZXR1cm5lZCBqc2VzdGF0ZS0+anVtcF9ldmFsX3Jlc3VsdF9jb2VyY2lvbj8gKi8KLQkJCQkJ CWlmIChqc2VzdGF0ZS0+anVtcF9ldmFsX3Jlc3VsdF9jb2VyY2lvbiA+PSAwKQotCQkJCQkJewot CQkJCQkJCXZfanVtcF9jb2VyY2lvbiA9IGxfaW50MzJfY29uc3QobGMsIGpzZXN0YXRlLT5qdW1w X2V2YWxfcmVzdWx0X2NvZXJjaW9uKTsKLQkJCQkJCQlMTFZNQWRkQ2FzZSh2X3N3aXRjaCwgdl9q dW1wX2NvZXJjaW9uLCBiX3Jlc3VsdF9jb2VyY2lvbik7Ci0JCQkJCQl9Ci0KLQkJCQkJCS8qCi0J CQkJCQkgKiBSZXR1cm5lZCBvbmUgb2YKLQkJCQkJCSAqIGpzZXN0YXRlLT5ldmFsX2l0ZW1fY29l cmNpb25fanVtcHNbXT8KLQkJCQkJCSAqLwotCQkJCQkJZm9yIChpID0gMDsgaSA8IGpzZXN0YXRl LT5udW1faXRlbV9jb2VyY2lvbnM7IGkrKykKLQkJCQkJCXsKLQkJCQkJCQlpZiAoanNlc3RhdGUt PmV2YWxfaXRlbV9jb2VyY2lvbl9qdW1wc1tpXSA+PSAwKQotCQkJCQkJCXsKLQkJCQkJCQkJdl9q dW1wX2NvZXJjaW9uID0gbF9pbnQzMl9jb25zdChsYywganNlc3RhdGUtPmV2YWxfaXRlbV9jb2Vy Y2lvbl9qdW1wc1tpXSk7Ci0JCQkJCQkJCUxMVk1BZGRDYXNlKHZfc3dpdGNoLCB2X2p1bXBfY29l cmNpb24sIGJfaXRlbV9jb2VyY2lvbnNbaV0pOwotCQkJCQkJCX0KLQkJCQkJCX0KLQogCQkJCQkJ LyogT04gRU1QVFkgY29kZSAqLwogCQkJCQkJTExWTVBvc2l0aW9uQnVpbGRlckF0RW5kKGIsIGJf ZW1wdHkpOwogCQkJCQkJaWYgKGpzZXN0YXRlLT5qdW1wX2VtcHR5ID49IDApCiAJCQkJCQkJTExW TUJ1aWxkQnIoYiwgb3BibG9ja3NbanNlc3RhdGUtPmp1bXBfZW1wdHldKTsKIAkJCQkJCWVsc2UK IAkJCQkJCQlMTFZNQnVpbGRVbnJlYWNoYWJsZShiKTsKKworCQkJCQkJLyogUmV0dXJuZWQganNl c3RhdGUtPmp1bXBfZXJyb3I/ICovCisJCQkJCQlpZiAoanNlc3RhdGUtPmp1bXBfZXJyb3IgPj0g MCkKKwkJCQkJCXsKKwkJCQkJCQl2X2p1bXBfZXJyb3IgPSBsX2ludDMyX2NvbnN0KGxjLCBqc2Vz dGF0ZS0+anVtcF9lcnJvcik7CisJCQkJCQkJTExWTUFkZENhc2Uodl9zd2l0Y2gsIHZfanVtcF9l cnJvciwgYl9lcnJvcik7CisJCQkJCQl9CiAJCQkJCQkvKiBPTiBFUlJPUiBjb2RlICovCiAJCQkJ CQlMTFZNUG9zaXRpb25CdWlsZGVyQXRFbmQoYiwgYl9lcnJvcik7CiAJCQkJCQlpZiAoanNlc3Rh dGUtPmp1bXBfZXJyb3IgPj0gMCkKIAkJCQkJCQlMTFZNQnVpbGRCcihiLCBvcGJsb2Nrc1tqc2Vz dGF0ZS0+anVtcF9lcnJvcl0pOwogCQkJCQkJZWxzZQogCQkJCQkJCUxMVk1CdWlsZFVucmVhY2hh YmxlKGIpOwotCQkJCQkJLyogcmVzdWx0X2NvZXJjaW9uIGNvZGUgKi8KLQkJCQkJCUxMVk1Qb3Np dGlvbkJ1aWxkZXJBdEVuZChiLCBiX3Jlc3VsdF9jb2VyY2lvbik7Ci0JCQkJCQlpZiAoanNlc3Rh dGUtPmp1bXBfZXZhbF9yZXN1bHRfY29lcmNpb24gPj0gMCkKLQkJCQkJCQlMTFZNQnVpbGRCcihi LCBvcGJsb2Nrc1tqc2VzdGF0ZS0+anVtcF9ldmFsX3Jlc3VsdF9jb2VyY2lvbl0pOwotCQkJCQkJ ZWxzZQotCQkJCQkJCUxMVk1CdWlsZFVucmVhY2hhYmxlKGIpOwotCQkJCQkJLyogaXRlbSBjb2Vy Y2lvbiBjb2RlIGJsb2NrcyAqLwotCQkJCQkJZm9yIChpID0gMDsgaSA8IGpzZXN0YXRlLT5udW1f aXRlbV9jb2VyY2lvbnM7IGkrKykKKworCQkJCQkJLyogUmV0dXJuZWQganNlc3RhdGUtPmp1bXBf ZXZhbF9jb2VyY2lvbl9leHByPyAqLworCQkJCQkJaWYgKGpzZXN0YXRlLT5qdW1wX2V2YWxfY29l cmNpb25fZXhwciA+PSAwKQogCQkJCQkJewotCQkJCQkJCUxMVk1Qb3NpdGlvbkJ1aWxkZXJBdEVu ZChiLCBiX2l0ZW1fY29lcmNpb25zW2ldKTsKLQkJCQkJCQlpZiAoanNlc3RhdGUtPmV2YWxfaXRl bV9jb2VyY2lvbl9qdW1wc1tpXSA+PSAwKQotCQkJCQkJCQlMTFZNQnVpbGRCcihiLCBvcGJsb2Nr c1tqc2VzdGF0ZS0+ZXZhbF9pdGVtX2NvZXJjaW9uX2p1bXBzW2ldXSk7Ci0JCQkJCQkJZWxzZQot CQkJCQkJCQlMTFZNQnVpbGRVbnJlYWNoYWJsZShiKTsKKwkJCQkJCQl2X2p1bXBfY29lcmNpb24g PSBsX2ludDMyX2NvbnN0KGxjLCBqc2VzdGF0ZS0+anVtcF9ldmFsX2NvZXJjaW9uX2V4cHIpOwor CQkJCQkJCUxMVk1BZGRDYXNlKHZfc3dpdGNoLCB2X2p1bXBfY29lcmNpb24sIGJfY29lcmNpb25f ZXhwcik7CiAJCQkJCQl9CisJCQkJCQkvKiBjb2VyY2lvbl9leHByIGNvZGUgKi8KKwkJCQkJCUxM Vk1Qb3NpdGlvbkJ1aWxkZXJBdEVuZChiLCBiX2NvZXJjaW9uX2V4cHIpOworCQkJCQkJaWYgKGpz ZXN0YXRlLT5qdW1wX2V2YWxfY29lcmNpb25fZXhwciA+PSAwKQorCQkJCQkJCUxMVk1CdWlsZEJy KGIsIG9wYmxvY2tzW2pzZXN0YXRlLT5qdW1wX2V2YWxfY29lcmNpb25fZXhwcl0pOworCQkJCQkJ ZWxzZQorCQkJCQkJCUxMVk1CdWlsZFVucmVhY2hhYmxlKGIpOwogCiAJCQkJCQlMTFZNUG9zaXRp b25CdWlsZGVyQXRFbmQoYiwgYl9kb25lKTsKIAkJCQkJfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvbm9kZXMvbWFrZWZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9tYWtlZnVuY3MuYwppbmRl eCA1MzhjY2IzMGFhLi5iMTNjZmE0MjAxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9t YWtlZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9tYWtlZnVuY3MuYwpAQCAtODYxLDE0 ICs4NjEsMTIgQEAgbWFrZUpzb25WYWx1ZUV4cHIoRXhwciAqcmF3X2V4cHIsIEV4cHIgKmZvcm1h dHRlZF9leHByLAogICoJICBjcmVhdGVzIGEgSnNvbkJlaGF2aW9yIG5vZGUKICAqLwogSnNvbkJl aGF2aW9yICoKLW1ha2VKc29uQmVoYXZpb3IoSnNvbkJlaGF2aW9yVHlwZSB0eXBlLCBOb2RlICpl eHByLCBKc29uQ29lcmNpb24gKmNvZXJjaW9uLAotCQkJCSBpbnQgbG9jYXRpb24pCittYWtlSnNv bkJlaGF2aW9yKEpzb25CZWhhdmlvclR5cGUgYnR5cGUsIE5vZGUgKmV4cHIsIGludCBsb2NhdGlv bikKIHsKIAlKc29uQmVoYXZpb3IgKmJlaGF2aW9yID0gbWFrZU5vZGUoSnNvbkJlaGF2aW9yKTsK IAotCWJlaGF2aW9yLT5idHlwZSA9IHR5cGU7CisJYmVoYXZpb3ItPmJ0eXBlID0gYnR5cGU7CiAJ YmVoYXZpb3ItPmV4cHIgPSBleHByOwotCWJlaGF2aW9yLT5jb2VyY2lvbiA9IGNvZXJjaW9uOwog CWJlaGF2aW9yLT5sb2NhdGlvbiA9IGxvY2F0aW9uOwogCiAJcmV0dXJuIGJlaGF2aW9yOwpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvbm9kZUZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rl cy9ub2RlRnVuY3MuYwppbmRleCBkNzk0MTkyZmFlLi5hZWZkY2RiOWVjIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9ub2Rlcy9ub2RlRnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9ub2Rl RnVuY3MuYwpAQCAtMjQzLDI0ICsyNDMsMTEgQEAgZXhwclR5cGUoY29uc3QgTm9kZSAqZXhwcikK IAkJCQl0eXBlID0gamV4cHItPnJldHVybmluZy0+dHlwaWQ7CiAJCQkJYnJlYWs7CiAJCQl9Ci0J CWNhc2UgVF9Kc29uQ29lcmNpb246Ci0JCQl7Ci0JCQkJY29uc3QgSnNvbkNvZXJjaW9uICpjb2Vy Y2lvbiA9IChjb25zdCBKc29uQ29lcmNpb24gKikgZXhwcjsKLQotCQkJCXR5cGUgPSBjb2VyY2lv bi0+dGFyZ2V0dHlwZTsKLQkJCQlicmVhazsKLQkJCX0KLQkJY2FzZSBUX0pzb25JdGVtQ29lcmNp b246Ci0JCQl0eXBlID0gZXhwclR5cGUoKChKc29uSXRlbUNvZXJjaW9uICopIGV4cHIpLT5jb2Vy Y2lvbik7Ci0JCQlicmVhazsKIAkJY2FzZSBUX0pzb25CZWhhdmlvcjoKIAkJCXsKIAkJCQljb25z dCBKc29uQmVoYXZpb3IgKmJlaGF2aW9yID0gKGNvbnN0IEpzb25CZWhhdmlvciAqKSBleHByOwog Ci0JCQkJaWYgKGJlaGF2aW9yLT5jb2VyY2lvbikKLQkJCQkJdHlwZSA9IGV4cHJUeXBlKChOb2Rl ICopIGJlaGF2aW9yLT5jb2VyY2lvbik7Ci0JCQkJZWxzZQotCQkJCQl0eXBlID0gZXhwclR5cGUo YmVoYXZpb3ItPmV4cHIpOworCQkJCXR5cGUgPSBleHByVHlwZShiZWhhdmlvci0+ZXhwcik7CiAJ CQkJYnJlYWs7CiAJCQl9CiAJCWNhc2UgVF9OdWxsVGVzdDoKQEAgLTUyNywyMyArNTE0LDExIEBA IGV4cHJUeXBtb2QoY29uc3QgTm9kZSAqZXhwcikKIAkJCQlyZXR1cm4gamV4cHItPnJldHVybmlu Zy0+dHlwbW9kOwogCQkJfQogCQkJYnJlYWs7Ci0JCWNhc2UgVF9Kc29uQ29lcmNpb246Ci0JCQl7 Ci0JCQkJY29uc3QgSnNvbkNvZXJjaW9uICpjb2VyY2lvbiA9IChjb25zdCBKc29uQ29lcmNpb24g KikgZXhwcjsKLQotCQkJCXJldHVybiBjb2VyY2lvbi0+dGFyZ2V0dHlwbW9kOwotCQkJfQotCQkJ YnJlYWs7Ci0JCWNhc2UgVF9Kc29uSXRlbUNvZXJjaW9uOgotCQkJcmV0dXJuIGV4cHJUeXBtb2Qo KChKc29uSXRlbUNvZXJjaW9uICopIGV4cHIpLT5jb2VyY2lvbik7CiAJCWNhc2UgVF9Kc29uQmVo YXZpb3I6CiAJCQl7CiAJCQkJY29uc3QgSnNvbkJlaGF2aW9yICpiZWhhdmlvciA9IChjb25zdCBK c29uQmVoYXZpb3IgKikgZXhwcjsKIAotCQkJCWlmIChiZWhhdmlvci0+Y29lcmNpb24pCi0JCQkJ CXJldHVybiBleHByVHlwbW9kKChOb2RlICopIGJlaGF2aW9yLT5jb2VyY2lvbik7Ci0JCQkJZWxz ZQotCQkJCQlyZXR1cm4gZXhwclR5cG1vZChiZWhhdmlvci0+ZXhwcik7CisJCQkJcmV0dXJuIGV4 cHJUeXBtb2QoYmVoYXZpb3ItPmV4cHIpOwogCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgVF9Db2Vy Y2VUb0RvbWFpbjoKQEAgLTEwMjYsMjEgKzEwMDEsMTYgQEAgZXhwckNvbGxhdGlvbihjb25zdCBO b2RlICpleHByKQogCQkJY29sbCA9IEludmFsaWRPaWQ7CS8qIC4uLiBzbyBpdCBoYXMgbm8gY29s bGF0aW9uICovCiAJCQlicmVhazsKIAkJY2FzZSBUX0pzb25FeHByOgotCQkJY29sbCA9IGV4cHJD b2xsYXRpb24oKChKc29uRXhwciAqKSBleHByKS0+cmVzdWx0X2NvZXJjaW9uKTsKLQkJCWJyZWFr OwotCQljYXNlIFRfSnNvbkNvZXJjaW9uOgotCQkJY29sbCA9ICgoY29uc3QgSnNvbkNvZXJjaW9u ICopIGV4cHIpLT5jb2xsYXRpb247Ci0JCQlicmVhazsKLQkJY2FzZSBUX0pzb25JdGVtQ29lcmNp b246Ci0JCQljb2xsID0gZXhwckNvbGxhdGlvbigoKEpzb25JdGVtQ29lcmNpb24gKikgZXhwcikt PmNvZXJjaW9uKTsKKwkJCWlmICgoKEpzb25FeHByICopIGV4cHIpLT5jb2VyY2lvbl9leHByKQor CQkJCWNvbGwgPSBleHByQ29sbGF0aW9uKCgoSnNvbkV4cHIgKikgZXhwciktPmNvZXJjaW9uX2V4 cHIpOworCQkJZWxzZQorCQkJCWNvbGwgPSAoKEpzb25FeHByICopIGV4cHIpLT5jb2xsYXRpb247 CiAJCQlicmVhazsKIAkJY2FzZSBUX0pzb25CZWhhdmlvcjoKIAkJCXsKIAkJCQlKc29uQmVoYXZp b3IgKmJlaGF2aW9yID0gKEpzb25CZWhhdmlvciAqKSBleHByOwogCi0JCQkJaWYgKGJlaGF2aW9y LT5jb2VyY2lvbikKLQkJCQkJY29sbCA9IGV4cHJDb2xsYXRpb24oKE5vZGUgKikgYmVoYXZpb3It PmNvZXJjaW9uKTsKLQkJCQllbHNlIGlmIChiZWhhdmlvci0+ZXhwcikKKwkJCQlpZiAoYmVoYXZp b3ItPmV4cHIpCiAJCQkJCWNvbGwgPSBleHByQ29sbGF0aW9uKGJlaGF2aW9yLT5leHByKTsKIAkJ CQllbHNlCiAJCQkJCWNvbGwgPSBJbnZhbGlkT2lkOwpAQCAtMTI4OSwyOCArMTI1OSwxMCBAQCBl eHByU2V0Q29sbGF0aW9uKE5vZGUgKmV4cHIsIE9pZCBjb2xsYXRpb24pCiAJCQl7CiAJCQkJSnNv bkV4cHIgICAqamV4cHIgPSAoSnNvbkV4cHIgKikgZXhwcjsKIAotCQkJCWlmIChqZXhwci0+cmVz dWx0X2NvZXJjaW9uKQotCQkJCQlleHByU2V0Q29sbGF0aW9uKChOb2RlICopIGpleHByLT5yZXN1 bHRfY29lcmNpb24sIGNvbGxhdGlvbik7CisJCQkJaWYgKGpleHByLT5jb2VyY2lvbl9leHByKQor CQkJCQlleHByU2V0Q29sbGF0aW9uKChOb2RlICopIGpleHByLT5jb2VyY2lvbl9leHByLCBjb2xs YXRpb24pOwogCQkJCWVsc2UKLQkJCQkJQXNzZXJ0KCFPaWRJc1ZhbGlkKGNvbGxhdGlvbikpOyAv KiByZXN1bHQgaXMgYWx3YXlzIGEKLQkJCQkJCQkJCQkJCQkgKiBqc29uW2JdIHR5cGUgKi8KLQkJ CX0KLQkJCWJyZWFrOwotCQljYXNlIFRfSnNvbkl0ZW1Db2VyY2lvbjoKLQkJCXsKLQkJCQlKc29u SXRlbUNvZXJjaW9uICppdGVtX2NvZXJjaW9uID0gKEpzb25JdGVtQ29lcmNpb24gKikgZXhwcjsK LQotCQkJCWlmIChpdGVtX2NvZXJjaW9uLT5jb2VyY2lvbikKLQkJCQkJZXhwclNldENvbGxhdGlv bihpdGVtX2NvZXJjaW9uLT5jb2VyY2lvbiwgY29sbGF0aW9uKTsKLQkJCX0KLQkJCWJyZWFrOwot CQljYXNlIFRfSnNvbkNvZXJjaW9uOgotCQkJewotCQkJCUpzb25Db2VyY2lvbiAqY29lcmNpb24g PSAoSnNvbkNvZXJjaW9uICopIGV4cHI7Ci0KLQkJCQlpZiAoY29lcmNpb24tPmNhc3RfZXhwcikK LQkJCQkJZXhwclNldENvbGxhdGlvbihjb2VyY2lvbi0+Y2FzdF9leHByLCBjb2xsYXRpb24pOwot CQkJCWNvZXJjaW9uLT5jb2xsYXRpb24gPSBjb2xsYXRpb247CisJCQkJCWpleHByLT5jb2xsYXRp b24gPSBjb2xsYXRpb247CiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBUX0pzb25CZWhhdmlvcjoK QEAgLTEzMTksOCArMTI3MSw2IEBAIGV4cHJTZXRDb2xsYXRpb24oTm9kZSAqZXhwciwgT2lkIGNv bGxhdGlvbikKIAogCQkJCWlmIChiZWhhdmlvci0+ZXhwcikKIAkJCQkJZXhwclNldENvbGxhdGlv bihiZWhhdmlvci0+ZXhwciwgY29sbGF0aW9uKTsKLQkJCQlpZiAoYmVoYXZpb3ItPmNvZXJjaW9u KQotCQkJCQlleHByU2V0Q29sbGF0aW9uKChOb2RlICopIGJlaGF2aW9yLT5jb2VyY2lvbiwgY29s bGF0aW9uKTsKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIFRfTnVsbFRlc3Q6CkBAIC0yNDAwLDkg KzIzNTAsOSBAQCBleHByZXNzaW9uX3RyZWVfd2Fsa2VyX2ltcGwoTm9kZSAqbm9kZSwKIAogCQkJ CWlmIChXQUxLKGpleHByLT5mb3JtYXR0ZWRfZXhwcikpCiAJCQkJCXJldHVybiB0cnVlOwotCQkJ CWlmIChXQUxLKGpleHByLT5yZXN1bHRfY29lcmNpb24pKQorCQkJCWlmIChXQUxLKGpleHByLT5w YXRoX3NwZWMpKQogCQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCQlpZiAoV0FMSyhqZXhwci0+aXRlbV9j b2VyY2lvbnMpKQorCQkJCWlmIChXQUxLKGpleHByLT5jb2VyY2lvbl9leHByKSkKIAkJCQkJcmV0 dXJuIHRydWU7CiAJCQkJaWYgKFdBTEsoamV4cHItPnBhc3NpbmdfdmFsdWVzKSkKIAkJCQkJcmV0 dXJuIHRydWU7CkBAIC0yNDEzLDMwICsyMzYzLDEyIEBAIGV4cHJlc3Npb25fdHJlZV93YWxrZXJf aW1wbChOb2RlICpub2RlLAogCQkJCQlyZXR1cm4gdHJ1ZTsKIAkJCX0KIAkJCWJyZWFrOwotCQlj YXNlIFRfSnNvbkNvZXJjaW9uOgotCQkJewotCQkJCUpzb25Db2VyY2lvbiAqY29lcmNpb24gPSAo SnNvbkNvZXJjaW9uICopIG5vZGU7Ci0KLQkJCQlpZiAoV0FMSyhjb2VyY2lvbi0+Y2FzdF9leHBy KSkKLQkJCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBUX0pzb25JdGVt Q29lcmNpb246Ci0JCQl7Ci0JCQkJSnNvbkl0ZW1Db2VyY2lvbiAqaXRlbV9jb2VyY2lvbiA9IChK c29uSXRlbUNvZXJjaW9uICopIG5vZGU7Ci0KLQkJCQlpZiAoV0FMSyhpdGVtX2NvZXJjaW9uLT5j b2VyY2lvbikpCi0JCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQkJYnJlYWs7CiAJCWNhc2UgVF9K c29uQmVoYXZpb3I6CiAJCQl7CiAJCQkJSnNvbkJlaGF2aW9yICpiZWhhdmlvciA9IChKc29uQmVo YXZpb3IgKikgbm9kZTsKIAogCQkJCWlmIChXQUxLKGJlaGF2aW9yLT5leHByKSkKIAkJCQkJcmV0 dXJuIHRydWU7Ci0JCQkJaWYgKFdBTEsoYmVoYXZpb3ItPmNvZXJjaW9uKSkKLQkJCQkJcmV0dXJu IHRydWU7CiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBUX051bGxUZXN0OgpAQCAtMzQ0OSwxMCAr MzM4MSw5IEBAIGV4cHJlc3Npb25fdHJlZV9tdXRhdG9yX2ltcGwoTm9kZSAqbm9kZSwKIAkJCQlK c29uRXhwciAgICpuZXdub2RlOwogCiAJCQkJRkxBVENPUFkobmV3bm9kZSwgamV4cHIsIEpzb25F eHByKTsKLQkJCQlNVVRBVEUobmV3bm9kZS0+cGF0aF9zcGVjLCBqZXhwci0+cGF0aF9zcGVjLCBO b2RlICopOwogCQkJCU1VVEFURShuZXdub2RlLT5mb3JtYXR0ZWRfZXhwciwgamV4cHItPmZvcm1h dHRlZF9leHByLCBOb2RlICopOwotCQkJCU1VVEFURShuZXdub2RlLT5yZXN1bHRfY29lcmNpb24s IGpleHByLT5yZXN1bHRfY29lcmNpb24sIE5vZGUgKik7Ci0JCQkJTVVUQVRFKG5ld25vZGUtPml0 ZW1fY29lcmNpb25zLCBqZXhwci0+aXRlbV9jb2VyY2lvbnMsIExpc3QgKik7CisJCQkJTVVUQVRF KG5ld25vZGUtPnBhdGhfc3BlYywgamV4cHItPnBhdGhfc3BlYywgTm9kZSAqKTsKKwkJCQlNVVRB VEUobmV3bm9kZS0+Y29lcmNpb25fZXhwciwgamV4cHItPmNvZXJjaW9uX2V4cHIsIE5vZGUgKik7 CiAJCQkJTVVUQVRFKG5ld25vZGUtPnBhc3NpbmdfdmFsdWVzLCBqZXhwci0+cGFzc2luZ192YWx1 ZXMsIExpc3QgKik7CiAJCQkJLyogYXNzdW1lIG11dGF0b3IgZG9lcyBub3QgY2FyZSBhYm91dCBw YXNzaW5nX25hbWVzICovCiAJCQkJTVVUQVRFKG5ld25vZGUtPm9uX2VtcHR5LCBqZXhwci0+b25f ZW1wdHksIEpzb25CZWhhdmlvciAqKTsKQEAgLTM0NjAsMjUgKzMzOTEsNiBAQCBleHByZXNzaW9u X3RyZWVfbXV0YXRvcl9pbXBsKE5vZGUgKm5vZGUsCiAJCQkJcmV0dXJuIChOb2RlICopIG5ld25v ZGU7CiAJCQl9CiAJCQlicmVhazsKLQkJY2FzZSBUX0pzb25Db2VyY2lvbjoKLQkJCXsKLQkJCQlK c29uQ29lcmNpb24gKmNvZXJjaW9uID0gKEpzb25Db2VyY2lvbiAqKSBub2RlOwotCQkJCUpzb25D b2VyY2lvbiAqbmV3bm9kZTsKLQotCQkJCUZMQVRDT1BZKG5ld25vZGUsIGNvZXJjaW9uLCBKc29u Q29lcmNpb24pOwotCQkJCU1VVEFURShuZXdub2RlLT5jYXN0X2V4cHIsIGNvZXJjaW9uLT5jYXN0 X2V4cHIsIE5vZGUgKik7Ci0JCQkJcmV0dXJuIChOb2RlICopIG5ld25vZGU7Ci0JCQl9Ci0JCWNh c2UgVF9Kc29uSXRlbUNvZXJjaW9uOgotCQkJewotCQkJCUpzb25JdGVtQ29lcmNpb24gKml0ZW1f Y29lcmNpb24gPSAoSnNvbkl0ZW1Db2VyY2lvbiAqKSBub2RlOwotCQkJCUpzb25JdGVtQ29lcmNp b24gKm5ld25vZGU7Ci0KLQkJCQlGTEFUQ09QWShuZXdub2RlLCBpdGVtX2NvZXJjaW9uLCBKc29u SXRlbUNvZXJjaW9uKTsKLQkJCQlNVVRBVEUobmV3bm9kZS0+Y29lcmNpb24sIGl0ZW1fY29lcmNp b24tPmNvZXJjaW9uLCBOb2RlICopOwotCQkJCXJldHVybiAoTm9kZSAqKSBuZXdub2RlOwotCQkJ fQotCQkJYnJlYWs7CiAJCWNhc2UgVF9Kc29uQmVoYXZpb3I6CiAJCQl7CiAJCQkJSnNvbkJlaGF2 aW9yICpiZWhhdmlvciA9IChKc29uQmVoYXZpb3IgKikgbm9kZTsKQEAgLTM0ODYsNyArMzM5OCw2 IEBAIGV4cHJlc3Npb25fdHJlZV9tdXRhdG9yX2ltcGwoTm9kZSAqbm9kZSwKIAogCQkJCUZMQVRD T1BZKG5ld25vZGUsIGJlaGF2aW9yLCBKc29uQmVoYXZpb3IpOwogCQkJCU1VVEFURShuZXdub2Rl LT5leHByLCBiZWhhdmlvci0+ZXhwciwgTm9kZSAqKTsKLQkJCQlNVVRBVEUobmV3bm9kZS0+Y29l cmNpb24sIGJlaGF2aW9yLT5jb2VyY2lvbiwgSnNvbkNvZXJjaW9uICopOwogCQkJCXJldHVybiAo Tm9kZSAqKSBuZXdub2RlOwogCQkJfQogCQkJYnJlYWs7CkBAIC00MjA1LDggKzQxMTYsNiBAQCBy YXdfZXhwcmVzc2lvbl90cmVlX3dhbGtlcl9pbXBsKE5vZGUgKm5vZGUsCiAKIAkJCQlpZiAoV0FM SyhqYi0+ZXhwcikpCiAJCQkJCXJldHVybiB0cnVlOwotCQkJCWlmIChXQUxLKGpiLT5jb2VyY2lv bikpCi0JCQkJCXJldHVybiB0cnVlOwogCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgVF9OdWxsVGVz dDoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkgYi9zcmMvYmFja2VuZC9w YXJzZXIvZ3JhbS55CmluZGV4IDkxMzU0YjgxNzguLmMyNDdlZWZiMGMgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQpA QCAtMTY2MzIsOSArMTY2MzIsOSBAQCBqc29uX3dyYXBwZXJfYmVoYXZpb3I6CiAKIGpzb25fYmVo YXZpb3I6CiAJCQlERUZBVUxUIGFfZXhwcgotCQkJCXsgJCQgPSAoTm9kZSAqKSBtYWtlSnNvbkJl aGF2aW9yKEpTT05fQkVIQVZJT1JfREVGQVVMVCwgJDIsIE5VTEwsIEAxKTsgfQorCQkJCXsgJCQg PSAoTm9kZSAqKSBtYWtlSnNvbkJlaGF2aW9yKEpTT05fQkVIQVZJT1JfREVGQVVMVCwgJDIsIEAx KTsgfQogCQkJfCBqc29uX2JlaGF2aW9yX3R5cGUKLQkJCQl7ICQkID0gKE5vZGUgKikgbWFrZUpz b25CZWhhdmlvcigkMSwgTlVMTCwgTlVMTCwgQDEpOyB9CisJCQkJeyAkJCA9IChOb2RlICopIG1h a2VKc29uQmVoYXZpb3IoJDEsIE5VTEwsIEAxKTsgfQogCQk7CiAKIGpzb25fYmVoYXZpb3JfdHlw ZToKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9leHByLmMgYi9zcmMvYmFj a2VuZC9wYXJzZXIvcGFyc2VfZXhwci5jCmluZGV4IDVhNTEzMGIxNjAuLmE4OTg0NDllZDQgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9leHByLmMKKysrIGIvc3JjL2JhY2tl bmQvcGFyc2VyL3BhcnNlX2V4cHIuYwpAQCAtOTMsMTkgKzkzLDEwIEBAIHN0YXRpYyBOb2RlICp0 cmFuc2Zvcm1Kc29uU2NhbGFyRXhwcihQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25TY2FsYXJFeHBy ICpleHByKTsKIHN0YXRpYyBOb2RlICp0cmFuc2Zvcm1Kc29uU2VyaWFsaXplRXhwcihQYXJzZVN0 YXRlICpwc3RhdGUsCiAJCQkJCQkJCQkJSnNvblNlcmlhbGl6ZUV4cHIgKmV4cHIpOwogc3RhdGlj IE5vZGUgKnRyYW5zZm9ybUpzb25GdW5jRXhwcihQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25GdW5j RXhwciAqcCk7Ci1zdGF0aWMgSnNvbkV4cHIgKnRyYW5zZm9ybUpzb25FeHByQ29tbW9uKFBhcnNl U3RhdGUgKnBzdGF0ZSwgSnNvbkZ1bmNFeHByICpmdW5jLAotCQkJCQkJCQkJCSBjb25zdCBjaGFy ICpjb25zdHJ1Y3ROYW1lKTsKIHN0YXRpYyB2b2lkIHRyYW5zZm9ybUpzb25QYXNzaW5nQXJncyhQ YXJzZVN0YXRlICpwc3RhdGUsIGNvbnN0IGNoYXIgKmNvbnN0cnVjdE5hbWUsCiAJCQkJCQkJCQkg SnNvbkZvcm1hdFR5cGUgZm9ybWF0LCBMaXN0ICphcmdzLAogCQkJCQkJCQkJIExpc3QgKipwYXNz aW5nX3ZhbHVlcywgTGlzdCAqKnBhc3NpbmdfbmFtZXMpOwotc3RhdGljIE5vZGUgKmNvZXJjZUpz b25GdW5jRXhwck91dHB1dChQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25FeHByICpqc2V4cHIpOwot c3RhdGljIE9pZAlKc29uRnVuY0V4cHJEZWZhdWx0UmV0dXJuVHlwZShKc29uRXhwciAqanNleHBy KTsKLXN0YXRpYyBOb2RlICpjb2VyY2VKc29uRXhwcihQYXJzZVN0YXRlICpwc3RhdGUsIE5vZGUg KmV4cHIsCi0JCQkJCQkJY29uc3QgSnNvblJldHVybmluZyAqcmV0dXJuaW5nLCBib29sIG9taXRf cXVvdGVzKTsKLXN0YXRpYyBKc29uQ29lcmNpb24gKm1ha2VKc29uQ29lcmNpb24oY29uc3QgSnNv blJldHVybmluZyAqcmV0dXJuaW5nLAotCQkJCQkJCQkJICBib29sIG9taXRfcXVvdGVzLCBOb2Rl ICpjYXN0X2V4cHIpOwotc3RhdGljIExpc3QgKkluaXRKc29uSXRlbUNvZXJjaW9ucyhQYXJzZVN0 YXRlICpwc3RhdGUsIGNvbnN0IEpzb25SZXR1cm5pbmcgKnJldHVybmluZywKLQkJCQkJCQkJICAg T2lkIGNvbnRleHRJdGVtVHlwZUlkKTsKK3N0YXRpYyB2b2lkIGNvZXJjZUpzb25FeHByT3V0cHV0 KFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvbkV4cHIgKmpzZXhwcik7CiBzdGF0aWMgSnNvbkJlaGF2 aW9yICp0cmFuc2Zvcm1Kc29uQmVoYXZpb3IoUGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29uQmVoYXZp b3IgKmJlaGF2aW9yLAogCQkJCQkJCQkJCSAgIEpzb25CZWhhdmlvclR5cGUgZGVmYXVsdF9iZWhh dmlvciwKIAkJCQkJCQkJCQkgICBKc29uUmV0dXJuaW5nICpyZXR1cm5pbmcpOwpAQCAtNDI1OCwy MiArNDI0OSwyNyBAQCB0cmFuc2Zvcm1Kc29uU2VyaWFsaXplRXhwcihQYXJzZVN0YXRlICpwc3Rh dGUsIEpzb25TZXJpYWxpemVFeHByICpleHByKQogc3RhdGljIE5vZGUgKgogdHJhbnNmb3JtSnNv bkZ1bmNFeHByKFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvbkZ1bmNFeHByICpmdW5jKQogewotCUpz b25FeHByICAgKmpzZXhwciA9IE5VTEw7CisJSnNvbkV4cHIgICAqanNleHByOworCU5vZGUJICAg KnBhdGhfc3BlYzsKIAljb25zdCBjaGFyICpmdW5jX25hbWUgPSBOVUxMOworCUpzb25Gb3JtYXRU eXBlIGRlZmF1bHRfZm9ybWF0OwogCiAJc3dpdGNoIChmdW5jLT5vcCkKIAl7CiAJCWNhc2UgSlNP Tl9FWElTVFNfT1A6CiAJCQlmdW5jX25hbWUgPSAiSlNPTl9FWElTVFMiOworCQkJZGVmYXVsdF9m b3JtYXQgPSBKU19GT1JNQVRfREVGQVVMVDsKIAkJCWJyZWFrOwogCQljYXNlIEpTT05fUVVFUllf T1A6CiAJCQlmdW5jX25hbWUgPSAiSlNPTl9RVUVSWSI7CisJCQlkZWZhdWx0X2Zvcm1hdCA9IEpT X0ZPUk1BVF9KU09OQjsKIAkJCWJyZWFrOwogCQljYXNlIEpTT05fVkFMVUVfT1A6CiAJCQlmdW5j X25hbWUgPSAiSlNPTl9WQUxVRSI7CisJCQlkZWZhdWx0X2Zvcm1hdCA9IEpTX0ZPUk1BVF9ERUZB VUxUOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQllbG9nKEVSUk9SLCAiaW52YWxpZCBKc29u RnVuY0V4cHIgb3AiKTsKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIEpzb25GdW5jRXhwciBvcCAl ZCIsIChpbnQpIGZ1bmMtPm9wKTsKIAkJCWJyZWFrOwogCX0KIApAQCAtNDI4OSw3ICs0Mjg1LDcg QEAgdHJhbnNmb3JtSnNvbkZ1bmNFeHByKFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvbkZ1bmNFeHBy ICpmdW5jKQogCQkJZm9ybWF0LT5lbmNvZGluZyAhPSBKU19FTkNfREVGQVVMVCkKIAkJCWVyZXBv cnQoRVJST1IsCiAJCQkJCWVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAotCQkJCQllcnJt c2coImNhbm5vdCBzcGVjaWZ5IEZPUk1BVCBpbiBSRVRVUk5JTkcgY2xhdXNlIG9mICVzKCkiLAor CQkJCQllcnJtc2coImNhbm5vdCBzcGVjaWZ5IEZPUk1BVCBKU09OIGluIFJFVFVSTklORyBjbGF1 c2Ugb2YgJXMoKSIsCiAJCQkJCQkgICBmdW5jX25hbWUpLAogCQkJCQlwYXJzZXJfZXJycG9zaXRp b24ocHN0YXRlLCBmb3JtYXQtPmxvY2F0aW9uKSk7CiAJfQpAQCAtNDMwNCw3ICs0MzAwLDQ5IEBA IHRyYW5zZm9ybUpzb25GdW5jRXhwcihQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25GdW5jRXhwciAq ZnVuYykKIAkJCQllcnJtc2coIlNRTC9KU09OIFFVT1RFUyBiZWhhdmlvciBtdXN0IG5vdCBiZSBz cGVjaWZpZWQgd2hlbiBXSVRIIFdSQVBQRVIgaXMgdXNlZCIpLAogCQkJCXBhcnNlcl9lcnJwb3Np dGlvbihwc3RhdGUsIGZ1bmMtPmxvY2F0aW9uKSk7CiAKLQlqc2V4cHIgPSB0cmFuc2Zvcm1Kc29u RXhwckNvbW1vbihwc3RhdGUsIGZ1bmMsIGZ1bmNfbmFtZSk7CisJanNleHByID0gbWFrZU5vZGUo SnNvbkV4cHIpOworCWpzZXhwci0+bG9jYXRpb24gPSBmdW5jLT5sb2NhdGlvbjsKKwlqc2V4cHIt Pm9wID0gZnVuYy0+b3A7CisJanNleHByLT5mb3JtYXR0ZWRfZXhwciA9IHRyYW5zZm9ybUpzb25W YWx1ZUV4cHIocHN0YXRlLCBmdW5jX25hbWUsCisJCQkJCQkJCQkJCQkJZnVuYy0+Y29udGV4dF9p dGVtLAorCQkJCQkJCQkJCQkJCWRlZmF1bHRfZm9ybWF0LAorCQkJCQkJCQkJCQkJCUpTT05CT0lE LCBmYWxzZSk7CisKKwkvKgorCSAqIGpzb25wYXRoIG1hY2hpbmVyeSBjYW4gb25seSBoYW5kbGUg anNvbmIgZG9jdW1lbnRzLCBzbyBjb2VyY2UgdGhlIGlucHV0CisJICogaWYgbm90IGFscmVhZHkg b2YganNvbmIgdHlwZS4KKwkgKi8KKwlpZiAoZXhwclR5cGUoanNleHByLT5mb3JtYXR0ZWRfZXhw cikgIT0gSlNPTkJPSUQpCisJCWpzZXhwci0+Zm9ybWF0dGVkX2V4cHIgPSBjb2VyY2VfdG9fc3Bl Y2lmaWNfdHlwZShwc3RhdGUsCisJCQkJCQkJCQkJCQkJCSBqc2V4cHItPmZvcm1hdHRlZF9leHBy LCBKU09OQk9JRCwKKwkJCQkJCQkJCQkJCQkJIGZ1bmNfbmFtZSk7CisJanNleHByLT5mb3JtYXQg PSBmdW5jLT5jb250ZXh0X2l0ZW0tPmZvcm1hdDsKKworCXBhdGhfc3BlYyA9IHRyYW5zZm9ybUV4 cHJSZWN1cnNlKHBzdGF0ZSwgZnVuYy0+cGF0aHNwZWMpOworCXBhdGhfc3BlYyA9CWNvZXJjZV90 b190YXJnZXRfdHlwZShwc3RhdGUsIHBhdGhfc3BlYywgZXhwclR5cGUocGF0aF9zcGVjKSwKKwkJ CQkJCQkJCSAgSlNPTlBBVEhPSUQsIC0xLAorCQkJCQkJCQkJICBDT0VSQ0lPTl9FWFBMSUNJVCwg Q09FUkNFX0lNUExJQ0lUX0NBU1QsCisJCQkJCQkJCQkgIGV4cHJMb2NhdGlvbihwYXRoX3NwZWMp KTsKKwlpZiAocGF0aF9zcGVjID09IE5VTEwpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNv ZGUoRVJSQ09ERV9EQVRBVFlQRV9NSVNNQVRDSCksCisJCQkJIGVycm1zZygiSlNPTiBwYXRoIGV4 cHJlc3Npb24gbXVzdCBiZSBvZiB0eXBlICVzLCBub3Qgb2YgdHlwZSAlcyIsCisJCQkJCQkianNv bnBhdGgiLCBmb3JtYXRfdHlwZV9iZShleHByVHlwZShwYXRoX3NwZWMpKSksCisJCQkJIHBhcnNl cl9lcnJwb3NpdGlvbihwc3RhdGUsIGV4cHJMb2NhdGlvbihwYXRoX3NwZWMpKSkpOworCWpzZXhw ci0+cGF0aF9zcGVjID0gcGF0aF9zcGVjOworCisJLyoKKwkgKiBUcmFuc2Zvcm0gYW5kIGNvZXJj ZSB0byBqc29uW2JdIHBhc3NpbmcgYXJndW1lbnRzLCB3aG9zZSBmb3JtYXQgaXMKKwkgKiBkZXRl cm1pbmVkIGJ5IGNvbnRleHQgaXRlbSB0eXBlLgorCSAqLworCXRyYW5zZm9ybUpzb25QYXNzaW5n QXJncyhwc3RhdGUsIGZ1bmNfbmFtZSwKKwkJCQkJCQkgZXhwclR5cGUoanNleHByLT5mb3JtYXR0 ZWRfZXhwcikgPT0gSlNPTkJPSUQgPworCQkJCQkJCSBKU19GT1JNQVRfSlNPTkIgOiBKU19GT1JN QVRfSlNPTiwKKwkJCQkJCQkgZnVuYy0+cGFzc2luZywKKwkJCQkJCQkgJmpzZXhwci0+cGFzc2lu Z192YWx1ZXMsCisJCQkJCQkJICZqc2V4cHItPnBhc3NpbmdfbmFtZXMpOworCisJanNleHByLT5y ZXR1cm5pbmcgPSB0cmFuc2Zvcm1Kc29uT3V0cHV0KHBzdGF0ZSwgZnVuYy0+b3V0cHV0LCBmYWxz ZSk7CiAKIAlzd2l0Y2ggKGZ1bmMtPm9wKQogCXsKQEAgLTQzMzUsMTEgKzQzNzMsMTEgQEAgdHJh bnNmb3JtSnNvbkZ1bmNFeHByKFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvbkZ1bmNFeHByICpmdW5j KQogCQkJewogCQkJCUpzb25SZXR1cm5pbmcgKnJldCA9IGpzZXhwci0+cmV0dXJuaW5nOwogCi0J CQkJcmV0LT50eXBpZCA9IEpzb25GdW5jRXhwckRlZmF1bHRSZXR1cm5UeXBlKGpzZXhwcik7CisJ CQkJcmV0LT50eXBpZCA9IEpTT05CT0lEOwogCQkJCXJldC0+dHlwbW9kID0gLTE7CiAJCQl9CiAK LQkJCWpzZXhwci0+cmVzdWx0X2NvZXJjaW9uID0gY29lcmNlSnNvbkZ1bmNFeHByT3V0cHV0KHBz dGF0ZSwganNleHByKTsKKwkJCWNvZXJjZUpzb25FeHByT3V0cHV0KHBzdGF0ZSwganNleHByKTsK IAogCQkJaWYgKGZ1bmMtPm9uX2VtcHR5KQogCQkJCWpzZXhwci0+b25fZW1wdHkgPSB0cmFuc2Zv cm1Kc29uQmVoYXZpb3IocHN0YXRlLApAQCAtNDM1Myw3ICs0MzkxLDcgQEAgdHJhbnNmb3JtSnNv bkZ1bmNFeHByKFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvbkZ1bmNFeHByICpmdW5jKQogCiAJCWNh c2UgSlNPTl9WQUxVRV9PUDoKIAkJCS8qIEFsd2F5cyBvbWl0IHF1b3RlcyBmcm9tIHNjYWxhciBz dHJpbmdzLiAqLwotCQkJanNleHByLT5vbWl0X3F1b3RlcyA9IChmdW5jLT5xdW90ZXMgPT0gSlNf UVVPVEVTX09NSVQpOworCQkJanNleHByLT5vbWl0X3F1b3RlcyA9IHRydWU7CiAKIAkJCS8qIEpT T05fVkFMVUUgcmV0dXJucyB0ZXh0IGJ5IGRlZmF1bHQuICovCiAJCQlpZiAoIU9pZElzVmFsaWQo anNleHByLT5yZXR1cm5pbmctPnR5cGlkKSkKQEAgLTQzNjksMTYgKzQ0MDcsNyBAQCB0cmFuc2Zv cm1Kc29uRnVuY0V4cHIoUGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29uRnVuY0V4cHIgKmZ1bmMpCiAJ CQlqc2V4cHItPnJldHVybmluZy0+Zm9ybWF0LT5mb3JtYXRfdHlwZSA9IEpTX0ZPUk1BVF9ERUZB VUxUOwogCQkJanNleHByLT5yZXR1cm5pbmctPmZvcm1hdC0+ZW5jb2RpbmcgPSBKU19FTkNfREVG QVVMVDsKIAotCQkJanNleHByLT5yZXN1bHRfY29lcmNpb24gPSBjb2VyY2VKc29uRnVuY0V4cHJP dXRwdXQocHN0YXRlLCBqc2V4cHIpOwotCi0JCQkvKgotCQkJICogSW5pdGlhbGl6ZSBleHByZXNz aW9ucyB0byBjb2VyY2UgdGhlIHNjYWxhciB2YWx1ZSByZXR1cm5lZCBieQotCQkJICogSnNvblBh dGhWYWx1ZSgpIHRvIHRoZSAicmV0dXJuaW5nIiB0eXBlLgotCQkJICovCi0JCQlpZiAoanNleHBy LT5yZXN1bHRfY29lcmNpb24pCi0JCQkJanNleHByLT5pdGVtX2NvZXJjaW9ucyA9Ci0JCQkJCUlu aXRKc29uSXRlbUNvZXJjaW9ucyhwc3RhdGUsIGpzZXhwci0+cmV0dXJuaW5nLAotCQkJCQkJCQkJ CSAgZXhwclR5cGUoanNleHByLT5mb3JtYXR0ZWRfZXhwcikpOworCQkJY29lcmNlSnNvbkV4cHJP dXRwdXQocHN0YXRlLCBqc2V4cHIpOwogCiAJCQlpZiAoZnVuYy0+b25fZW1wdHkpCiAJCQkJanNl eHByLT5vbl9lbXB0eSA9IHRyYW5zZm9ybUpzb25CZWhhdmlvcihwc3RhdGUsCkBAIC00MzkxLDcw ICs0NDIwLDEzIEBAIHRyYW5zZm9ybUpzb25GdW5jRXhwcihQYXJzZVN0YXRlICpwc3RhdGUsIEpz b25GdW5jRXhwciAqZnVuYykKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6Ci0JCQllbG9nKEVSUk9S LCAiaW52YWxpZCBKc29uRnVuY0V4cHIgb3AiKTsKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIEpz b25GdW5jRXhwciBvcCAlZCIsIChpbnQpIGZ1bmMtPm9wKTsKIAkJCWJyZWFrOwogCX0KIAogCXJl dHVybiAoTm9kZSAqKSBqc2V4cHI7CiB9CiAKLS8qCi0gKiBDb21tb24gY29kZSBmb3IgSlNPTl9W QUxVRSwgSlNPTl9RVUVSWSwgSlNPTl9FWElTVFMgdHJhbnNmb3JtYXRpb24KLSAqIGludG8gYSBK c29uRXhwciBub2RlLgotICovCi1zdGF0aWMgSnNvbkV4cHIgKgotdHJhbnNmb3JtSnNvbkV4cHJD b21tb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29uRnVuY0V4cHIgKmZ1bmMsCi0JCQkJCQljb25z dCBjaGFyICpjb25zdHJ1Y3ROYW1lKQotewotCUpzb25FeHByICAgKmpzZXhwciA9IG1ha2VOb2Rl KEpzb25FeHByKTsKLQlOb2RlCSAgICpwYXRoX3NwZWM7Ci0KLQlqc2V4cHItPmxvY2F0aW9uID0g ZnVuYy0+bG9jYXRpb247Ci0JanNleHByLT5vcCA9IGZ1bmMtPm9wOwotCWpzZXhwci0+Zm9ybWF0 dGVkX2V4cHIgPSB0cmFuc2Zvcm1Kc29uVmFsdWVFeHByKHBzdGF0ZSwgY29uc3RydWN0TmFtZSwK LQkJCQkJCQkJCQkJCQlmdW5jLT5jb250ZXh0X2l0ZW0sCi0JCQkJCQkJCQkJCQkJSlNfRk9STUFU X0pTT04sCi0JCQkJCQkJCQkJCQkJSW52YWxpZE9pZCwgZmFsc2UpOwotCi0JaWYgKGV4cHJUeXBl KGpzZXhwci0+Zm9ybWF0dGVkX2V4cHIpICE9IEpTT05CT0lEKQotCQllcmVwb3J0KEVSUk9SLAot CQkJCWVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAotCQkJCWVycm1zZygi JXMoKSBpcyBub3QgeWV0IGltcGxlbWVudGVkIGZvciB0aGUganNvbiB0eXBlIiwKLQkJCQkJICAg Y29uc3RydWN0TmFtZSksCi0JCQkJZXJyaGludCgiVHJ5IGNhc3RpbmcgdGhlIGFyZ3VtZW50IHRv IGpzb25iIiksCi0JCQkJcGFyc2VyX2VycnBvc2l0aW9uKHBzdGF0ZSwgZXhwckxvY2F0aW9uKGpz ZXhwci0+Zm9ybWF0dGVkX2V4cHIpKSk7Ci0KLQlqc2V4cHItPmZvcm1hdCA9IGZ1bmMtPmNvbnRl eHRfaXRlbS0+Zm9ybWF0OwotCi0JcGF0aF9zcGVjID0gdHJhbnNmb3JtRXhwclJlY3Vyc2UocHN0 YXRlLCBmdW5jLT5wYXRoc3BlYyk7Ci0JanNleHByLT5wYXRoX3NwZWMgPQotCQljb2VyY2VfdG9f dGFyZ2V0X3R5cGUocHN0YXRlLCBwYXRoX3NwZWMsIGV4cHJUeXBlKHBhdGhfc3BlYyksCi0JCQkJ CQkJICBKU09OUEFUSE9JRCwgLTEsCi0JCQkJCQkJICBDT0VSQ0lPTl9FWFBMSUNJVCwgQ09FUkNF X0lNUExJQ0lUX0NBU1QsCi0JCQkJCQkJICBleHByTG9jYXRpb24ocGF0aF9zcGVjKSk7Ci0JaWYg KCFqc2V4cHItPnBhdGhfc3BlYykKLQkJZXJlcG9ydChFUlJPUiwKLQkJCQkoZXJyY29kZShFUlJD T0RFX0RBVEFUWVBFX01JU01BVENIKSwKLQkJCQkgZXJybXNnKCJKU09OIHBhdGggZXhwcmVzc2lv biBtdXN0IGJlIG9mIHR5cGUgJXMsIG5vdCBvZiB0eXBlICVzIiwKLQkJCQkJCSJqc29ucGF0aCIs IGZvcm1hdF90eXBlX2JlKGV4cHJUeXBlKHBhdGhfc3BlYykpKSwKLQkJCQkgcGFyc2VyX2VycnBv c2l0aW9uKHBzdGF0ZSwgZXhwckxvY2F0aW9uKHBhdGhfc3BlYykpKSk7Ci0KLQkvKgotCSAqIFRy YW5zZm9ybSBhbmQgY29lcmNlIHRvIGpzb25bYl0gcGFzc2luZyBhcmd1bWVudHMsIHdob3NlIGZv cm1hdCBpcwotCSAqIGRldGVybWluZWQgYnkgY29udGV4dCBpdGVtIHR5cGUuCi0JICovCi0JdHJh bnNmb3JtSnNvblBhc3NpbmdBcmdzKHBzdGF0ZSwgY29uc3RydWN0TmFtZSwKLQkJCQkJCQkgZXhw clR5cGUoanNleHByLT5mb3JtYXR0ZWRfZXhwcikgPT0gSlNPTkJPSUQgPwotCQkJCQkJCSBKU19G T1JNQVRfSlNPTkIgOiBKU19GT1JNQVRfSlNPTiwKLQkJCQkJCQkgZnVuYy0+cGFzc2luZywKLQkJ CQkJCQkgJmpzZXhwci0+cGFzc2luZ192YWx1ZXMsCi0JCQkJCQkJICZqc2V4cHItPnBhc3Npbmdf bmFtZXMpOwotCi0JanNleHByLT5yZXR1cm5pbmcgPSB0cmFuc2Zvcm1Kc29uT3V0cHV0KHBzdGF0 ZSwgZnVuYy0+b3V0cHV0LCBmYWxzZSk7Ci0KLQlyZXR1cm4ganNleHByOwotfQotCiAvKgogICog VHJhbnNmb3JtIGEgSlNPTiBQQVNTSU5HIGNsYXVzZS4KICAqLwpAQCAtNDQ4MSwyOSArNDQ1Myw0 NyBAQCB0cmFuc2Zvcm1Kc29uUGFzc2luZ0FyZ3MoUGFyc2VTdGF0ZSAqcHN0YXRlLCBjb25zdCBj aGFyICpjb25zdHJ1Y3ROYW1lLAogfQogCiAvKgotICogQ3JlYXRlIGFuIGV4cHJlc3Npb24gdG8g Y29lcmNlIHRoZSBvdXRwdXQgb2YgSlNPTl9WQUxVRSgpIC8gSlNPTl9RVUVSWSgpCi0gKiB0byB0 aGUgb3V0cHV0IHR5cGUsIGlmIG5lZWRlZC4KKyAqIFNldCB1cCB0byBjb2VyY2UgdGhlIHJlc3Vs dCB2YWx1ZSBvZiBKU09OX1ZBTFVFKCkgLyBKU09OX1FVRVJZKCkgdG8gdGhlCisgKiBSRVRVUk5J TkcgdHlwZSAoZGVmYXVsdCBvciB1c2VyLXNwZWNpZmllZCksIGlmIG5lZWRlZC4KICAqLwotc3Rh dGljIE5vZGUgKgotY29lcmNlSnNvbkZ1bmNFeHByT3V0cHV0KFBhcnNlU3RhdGUgKnBzdGF0ZSwg SnNvbkV4cHIgKmpzZXhwcikKK3N0YXRpYyB2b2lkCitjb2VyY2VKc29uRXhwck91dHB1dChQYXJz ZVN0YXRlICpwc3RhdGUsIEpzb25FeHByICpqc2V4cHIpCiB7CiAJSnNvblJldHVybmluZyAqcmV0 dXJuaW5nID0ganNleHByLT5yZXR1cm5pbmc7CiAJTm9kZQkgICAqY29udGV4dF9pdGVtID0ganNl eHByLT5mb3JtYXR0ZWRfZXhwcjsKLQlOb2RlCSAgICpjb2VyY2lvbl9leHByID0gTlVMTDsKIAlp bnQJCQlkZWZhdWx0X3R5cG1vZDsKIAlPaWQJCQlkZWZhdWx0X3R5cGlkOwogCWJvb2wJCW9taXRf cXVvdGVzID0KIAkJanNleHByLT5vcCA9PSBKU09OX1FVRVJZX09QICYmIGpzZXhwci0+b21pdF9x dW90ZXM7CisJTm9kZQkgICAqY29lcmNpb25fZXhwciA9IE5VTEw7CiAKIAlBc3NlcnQocmV0dXJu aW5nKTsKIAogCS8qCi0JICogQ2FzdCBmdW5jdGlvbnMgZnJvbSBqc29uYiB0byB0aGUgZm9sbG93 aW5nIHR5cGVzIChqc29uYl9ib29sKCkgZXQgYWwpCi0JICogZG9uJ3QgaGFuZGxlIGVycm9ycyBz b2Z0bHksIHNvIGZvcmNlIHRvIHVzZSBqc29uX3BvcHVsYXRlX3R5cGUoKSB1c2luZwotCSAqIGEg SnNvbkNvZXJjaW9uIG5vZGUgc28gdGhhdCBhbnkgZXJyb3JzIGFyZSBoYW5kbGVkIGFwcHJvcHJp YXRlbHkuCisJICogQ2hlY2sgZm9yIGNhc2VzIHdoZXJlIHRoZSBjb2VyY2lvbiBzaG91bGQgYmUg aGFuZGxlZCBhdCBydW50aW1lLCB0aGF0CisJICogaXMsIHdpdGhvdXQgdXNpbmcgYSBjYXN0IGV4 cHJlc3Npb24uCiAJICovCi0JaWYgKGpzZXhwci0+b3AgPT0gSlNPTl9RVUVSWV9PUCkKKwlpZiAo anNleHByLT5vcCA9PSBKU09OX1ZBTFVFX09QKQogCXsKKwkJLyoKKwkJICogVXNlIGNhc3QgZXhw cmVzc2lvbnMgZm9yIHR5cGVzIHdpdGggdHlwbW9kIGFuZCBkb21haW4gdHlwZXMuCisJCSAqLwor CQlpZiAocmV0dXJuaW5nLT50eXBtb2QgPT0gLTEgJiYKKwkJCWdldF90eXB0eXBlKHJldHVybmlu Zy0+dHlwaWQpICE9IFRZUFRZUEVfRE9NQUlOKQorCQl7CisJCQlqc2V4cHItPnVzZV9pb19jb2Vy Y2lvbiA9IHRydWU7CisJCQlyZXR1cm47CisJCX0KKwl9CisJZWxzZSBpZiAoanNleHByLT5vcCA9 PSBKU09OX1FVRVJZX09QKQorCXsKKwkJLyoKKwkJICogQ2FzdCBmdW5jdGlvbnMgZnJvbSBqc29u YiB0byB0aGUgZm9sbG93aW5nIHR5cGVzIChqc29uYl9ib29sKCkgZXQKKwkJICogYWwpIGRvbid0 IGhhbmRsZSBlcnJvcnMgc29mdGx5LCBzbyBjb2VyY2UgZWl0aGVyIGJ5IGNhbGxpbmcKKwkJICog anNvbl9wb3B1bGF0ZV90eXBlKCkgb3IgdGhlIHR5cGUncyBpbnB1dCBmdW5jdGlvbiBzbyB0aGF0 IGFueQorCQkgKiBlcnJvcnMgYXJlIGhhbmRsZWQgYXBwcm9wcmlhdGVseS4gVGhlIGxhdHRlciBv bmx5IGlmIE9NSVQgUVVPVEVTCisJCSAqIGlzIHRydWUuCisJCSAqLwogCQlzd2l0Y2ggKHJldHVy bmluZy0+dHlwaWQpCiAJCXsKIAkJCWNhc2UgQk9PTE9JRDoKQEAgLTQ1MTMsMTczICs0NTAzLDY4 IEBAIGNvZXJjZUpzb25GdW5jRXhwck91dHB1dChQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25FeHBy ICpqc2V4cHIpCiAJCQljYXNlIElOVDhPSUQ6CiAJCQljYXNlIEZMT0FUNE9JRDoKIAkJCWNhc2Ug RkxPQVQ4T0lEOgotCQkJCXJldHVybiAoTm9kZSAqKSBtYWtlSnNvbkNvZXJjaW9uKHJldHVybmlu Zywgb21pdF9xdW90ZXMsIE5VTEwpOworCQkJCWlmIChqc2V4cHItPm9taXRfcXVvdGVzKQorCQkJ CQlqc2V4cHItPnVzZV9pb19jb2VyY2lvbiA9IHRydWU7CisJCQkJZWxzZQorCQkJCQlqc2V4cHIt PnVzZV9qc29uX2NvZXJjaW9uID0gdHJ1ZTsKKwkJCQlyZXR1cm47CiAJCQlkZWZhdWx0OgogCQkJ CWJyZWFrOwogCQl9CiAJfQogCi0JZGVmYXVsdF90eXBpZCA9IEpzb25GdW5jRXhwckRlZmF1bHRS ZXR1cm5UeXBlKGpzZXhwcik7Ci0JZGVmYXVsdF90eXBtb2QgPSAtMTsKKwkvKiBMb29rIHVwIGEg Y2FzdCBleHByZXNzaW9uLiAqLworCisJLyoKKwkgKiBGb3IgSlNPTl9WQUxVRSgpIGFuZCBmb3Ig SlNPTl9RVUVSWSgpIHdoZW4gT01JVCBRVU9URVMgaXMgdHJ1ZSwKKwkgKiBFeGVjRXZhbEpzb25F eHByUGF0aCgpIHdpbGwgY29udmVydCBhIHF1b3RlLXN0cmlwcGVkIHNvdXJjZSB2YWx1ZSB0bwor CSAqIGl0cyB0ZXh0IHJlcHJlc2VudGF0aW9uLCBzbyB1c2UgVEVYVE9JRCBhcyB0aGUgc291cmNl IHR5cGUuCisJICovCisJaWYgKG9taXRfcXVvdGVzIHx8IGpzZXhwci0+b3AgPT0gSlNPTl9WQUxV RV9PUCkKKwl7CisJCWRlZmF1bHRfdHlwaWQgPSBURVhUT0lEOworCQlkZWZhdWx0X3R5cG1vZCA9 IC0xOworCX0KKwllbHNlCisJeworCQlkZWZhdWx0X3R5cGlkID0gZXhwclR5cGUoY29udGV4dF9p dGVtKTsKKwkJZGVmYXVsdF90eXBtb2QgPSBleHByVHlwbW9kKGNvbnRleHRfaXRlbSk7CisJfQor CiAJaWYgKHJldHVybmluZy0+dHlwaWQgIT0gZGVmYXVsdF90eXBpZCB8fAotCQlyZXR1cm5pbmct PnR5cG1vZCAhPSBkZWZhdWx0X3R5cG1vZCB8fAotCQlvbWl0X3F1b3RlcykKKwkJcmV0dXJuaW5n LT50eXBtb2QgIT0gZGVmYXVsdF90eXBtb2QpCiAJewogCQkvKgogCQkgKiBXZSBhYnVzZSBDYXNl VGVzdEV4cHIgaGVyZSBhcyBwbGFjZWhvbGRlciB0byBwYXNzIHRoZSByZXN1bHQgb2YKLQkJICog ZXZhbHVhdGluZyB0aGUgSlNPTl9WQUxVRS9RVUVSWSBqc29ucGF0aCBleHByZXNzaW9uIGFzIGlu cHV0IHRvIHRoZQotCQkgKiBjb2VyY2lvbiBleHByZXNzaW9uLgorCQkgKiBqc29ucGF0aCBldmFs dWF0aW9uIGFzIGlucHV0IHRvIHRoZSBjb2VyY2lvbiBleHByZXNzaW9uLgogCQkgKi8KIAkJQ2Fz ZVRlc3RFeHByICpwbGFjZWhvbGRlciA9IG1ha2VOb2RlKENhc2VUZXN0RXhwcik7CiAKLQkJLyoK LQkJICogV2hlbiBPTUlUIFFVT1RFUyBpcyB0cnVlLCBFeGVjRXZhbEpzb25Db2VyY2lvbigpIHdp bGwgY29udmVydCBhCi0JCSAqIHF1b3RlLXN0cmlwcGVkIHNvdXJjZSB2YWx1ZSB0byBpdHMgdGV4 dCByZXByZXNlbnRhdGlvbiwgc28gdXNlCi0JCSAqIFRFWFRPSUQgYXMgdGhlIHNvdXJjZSB0eXBl LgotCQkgKi8KLQkJcGxhY2Vob2xkZXItPnR5cGVJZCA9IG9taXRfcXVvdGVzID8gVEVYVE9JRCA6 IGV4cHJUeXBlKGNvbnRleHRfaXRlbSk7Ci0JCXBsYWNlaG9sZGVyLT50eXBlTW9kID0gb21pdF9x dW90ZXMgPyAtMSA6IGV4cHJUeXBtb2QoY29udGV4dF9pdGVtKTsKLQotCQlBc3NlcnQocGxhY2Vo b2xkZXItPnR5cGVJZCA9PSBkZWZhdWx0X3R5cGlkIHx8Ci0JCQkgICBwbGFjZWhvbGRlci0+dHlw ZUlkID09IFRFWFRPSUQpOwotCQlBc3NlcnQocGxhY2Vob2xkZXItPnR5cGVNb2QgPT0gZGVmYXVs dF90eXBtb2QgfHwKLQkJCSAgIHBsYWNlaG9sZGVyLT50eXBlTW9kID09IC0xKTsKKwkJcGxhY2Vo b2xkZXItPnR5cGVJZCA9IGRlZmF1bHRfdHlwaWQ7CisJCXBsYWNlaG9sZGVyLT50eXBlTW9kID0g ZGVmYXVsdF90eXBtb2Q7CiAKLQkJY29lcmNpb25fZXhwciA9IGNvZXJjZUpzb25FeHByKHBzdGF0 ZSwgKE5vZGUgKikgcGxhY2Vob2xkZXIsCi0JCQkJCQkJCQkgICByZXR1cm5pbmcsIG9taXRfcXVv dGVzKTsKKwkJY29lcmNpb25fZXhwciA9IGNvZXJjZUpzb25GdW5jRXhwcihwc3RhdGUsIChOb2Rl ICopIHBsYWNlaG9sZGVyLAorCQkJCQkJCQkJCSAgIHJldHVybmluZywgZmFsc2UpOworCQlpZiAo Y29lcmNpb25fZXhwciA9PSAoTm9kZSAqKSBwbGFjZWhvbGRlcikKKwkJCWNvZXJjaW9uX2V4cHIg PSBOVUxMOwogCX0KIAotCXJldHVybiBjb2VyY2lvbl9leHByOwotfQotCi0vKiBSZXR1cm5zIHRo ZSBkZWZhdWx0IHR5cGUgZm9yIGEgZ2l2ZW4gSnNvbkV4cHIgZm9yIGEgZ2l2ZW4gSnNvbkZvcm1h dC4gKi8KLXN0YXRpYyBPaWQKLUpzb25GdW5jRXhwckRlZmF1bHRSZXR1cm5UeXBlKEpzb25FeHBy ICpqc2V4cHIpCi17Ci0JSnNvbkZvcm1hdCAqZm9ybWF0ID0ganNleHByLT5mb3JtYXQ7Ci0JTm9k ZQkgICAqY29udGV4dF9pdGVtID0ganNleHByLT5mb3JtYXR0ZWRfZXhwcjsKLQotCUFzc2VydChm b3JtYXQpOwotCWlmIChmb3JtYXQtPmZvcm1hdF90eXBlID09IEpTX0ZPUk1BVF9KU09OQikKLQkJ cmV0dXJuIEpTT05CT0lEOwotCWVsc2UgaWYgKGZvcm1hdC0+Zm9ybWF0X3R5cGUgPT0gSlNfRk9S TUFUX0RFRkFVTFQgJiYKLQkJCSBleHByVHlwZShjb250ZXh0X2l0ZW0pID09IEpTT05CT0lEKQot CQlyZXR1cm4gSlNPTkJPSUQ7Ci0KLQlyZXR1cm4gSlNPTk9JRDsKLX0KLQotLyoKLSAqIFJldHVy bnMgYSBKc29uQ29lcmNpb24gbm9kZSB0byBjb2VyY2UgYSBqc29uYi12YWx1ZWQgZXhwcmVzc2lv biB0byB0aGUKLSAqIHRhcmdldCB0eXBlIGdpdmVuIGJ5ICdyZXR1cm5pbmcnIHVzaW5nIGVpdGhl ciBqc29uX3BvcHVsYXRlX3R5cGUoKSBvcgotICogYnkgdXNpbmcgdGhlIHRhcmdldCB0eXBlJ3Mg aW5wdXQgZnVuY3Rpb24uCi0gKi8KLXN0YXRpYyBKc29uQ29lcmNpb24gKgotbWFrZUpzb25Db2Vy Y2lvbihjb25zdCBKc29uUmV0dXJuaW5nICpyZXR1cm5pbmcsIGJvb2wgb21pdF9xdW90ZXMsCi0J CQkJIE5vZGUgKmNhc3RfZXhwcikKLXsKLQlKc29uQ29lcmNpb24gKmNvZXJjaW9uID0gbWFrZU5v ZGUoSnNvbkNvZXJjaW9uKTsKKwlqc2V4cHItPmNvZXJjaW9uX2V4cHIgPSBjb2VyY2lvbl9leHBy OwogCi0JY29lcmNpb24tPnRhcmdldHR5cGUgPSByZXR1cm5pbmctPnR5cGlkOwotCWNvZXJjaW9u LT50YXJnZXR0eXBtb2QgPSByZXR1cm5pbmctPnR5cG1vZDsKLQljb2VyY2lvbi0+b21pdF9xdW90 ZXMgPSBvbWl0X3F1b3RlczsKLQljb2VyY2lvbi0+Y2FzdF9leHByID0gY2FzdF9leHByOwotCi0J cmV0dXJuIGNvZXJjaW9uOwotfQotCi0vKgotICogQ29lcmNlIHRoZSByZXN1bHQgb2YgSlNPTl9W QUxVRSAvIEpTT05fUVVFUlkgKCkgKG9yIGEgYmVoYXZpb3IgZXhwcmVzc2lvbikKLSAqIHRvIHRo ZSBvdXRwdXQgdHlwZQotICoKLSAqIFJldHVybnMgTlVMTCBpZiBubyBjb2VyY2lvbiBuZWVkZWQg KHRoZSBpbnB1dCBleHByZXNzc2lvbiBpcyBhbHJlYWR5IG9mIHRoZQotICogZGVzaXJlZCB0eXBl KSBhbmQgT01JVCBRVU9URVMgaXMgZmFsc2UuCi0gKgotICogUmV0dXJucyBhIEpzb25Db2VyY2lv biBub2RlIGlmIHRoZSBjYXN0IHdhcyBub3QgZm91bmQgb3IgaWYgT01JVCBRVU9URVMgaXMKLSAq IHRydWUuCi0gKi8KLXN0YXRpYyBOb2RlICoKLWNvZXJjZUpzb25FeHByKFBhcnNlU3RhdGUgKnBz dGF0ZSwgTm9kZSAqZXhwciwgY29uc3QgSnNvblJldHVybmluZyAqcmV0dXJuaW5nLAotCQkJICAg Ym9vbCBvbWl0X3F1b3RlcykKLXsKLQlOb2RlCSAgICpjb2VyY2VkX2V4cHI7Ci0KLQlBc3NlcnQo ZXhwciAhPSBOVUxMKTsKLQljb2VyY2VkX2V4cHIgPSBjb2VyY2VKc29uRnVuY0V4cHIocHN0YXRl LCBleHByLCByZXR1cm5pbmcsIGZhbHNlKTsKLQotCWlmIChjb2VyY2VkX2V4cHIgPT0gZXhwciAm JiAhb21pdF9xdW90ZXMpCi0JCXJldHVybiBOVUxMOwotCi0JLyogVXNlIGNvZXJjZWRfZXhwciBm b3IgSnNvbkNvZXJjaW9uLmNhc3RfZXhwciBpZmYgY29lcmNpb24gaXMgbmVlZGVkLiAqLwotCWlm IChjb2VyY2VkX2V4cHIgPT0gTlVMTCB8fCBvbWl0X3F1b3RlcykKLQkJcmV0dXJuIChOb2RlICop IG1ha2VKc29uQ29lcmNpb24ocmV0dXJuaW5nLCBvbWl0X3F1b3RlcywKLQkJCQkJCQkJCQkgY29l cmNlZF9leHByID09IGV4cHIgPwotCQkJCQkJCQkJCSBOVUxMIDogY29lcmNlZF9leHByKTsKLQot CXJldHVybiBjb2VyY2VkX2V4cHI7Ci19Ci0KLS8qCi0gKiBJbml0aWFsaXplIEpzb25Db2VyY2lv biBub2RlcyBmb3IgY29lcmNpbmcgYSBnaXZlbiBKU09OIGl0ZW0gdmFsdWUgcHJvZHVjZWQKLSAq IGJ5IEpTT05fVkFMVUUgdG8gdGhlIHRhcmdldCAicmV0dXJuaW5nIiB0eXBlOyBhbHNvIHNlZQot ICogRXhlY1ByZXBhcmVKc29uSXRlbUNvZXJjaW9uKCkuCi0gKi8KLXN0YXRpYyBMaXN0ICoKLUlu aXRKc29uSXRlbUNvZXJjaW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsIGNvbnN0IEpzb25SZXR1cm5p bmcgKnJldHVybmluZywKLQkJCQkJICBPaWQgY29udGV4dEl0ZW1UeXBlSWQpCi17Ci0JTGlzdAkg ICAqaXRlbV9jb2VyY2lvbnMgPSBOSUw7Ci0JaW50CQkJaTsKLQlPaWQJCQl0eXBlb2lkOwotCXN0 cnVjdAotCXsKLQkJSnNvbkl0ZW1UeXBlIGl0ZW1fdHlwZTsKLQkJT2lkCQkJdHlwZW9pZDsKLQl9 CQkJaXRlbV90eXBlc1tdID0KLQl7Ci0JCXtKc29uSXRlbVR5cGVOdWxsLCBVTktOT1dOT0lEfSwK LQkJe0pzb25JdGVtVHlwZVN0cmluZywgVEVYVE9JRH0sCi0JCXtKc29uSXRlbVR5cGVOdW1lcmlj LCBOVU1FUklDT0lEfSwKLQkJe0pzb25JdGVtVHlwZUJvb2xlYW4sIEJPT0xPSUR9LAotCQl7SnNv bkl0ZW1UeXBlRGF0ZSwgREFURU9JRH0sCi0JCXtKc29uSXRlbVR5cGVUaW1lLCBUSU1FT0lEfSwK LQkJe0pzb25JdGVtVHlwZVRpbWV0eiwgVElNRVRaT0lEfSwKLQkJe0pzb25JdGVtVHlwZVRpbWVz dGFtcCwgVElNRVNUQU1QT0lEfSwKLQkJe0pzb25JdGVtVHlwZVRpbWVzdGFtcHR6LCBUSU1FU1RB TVBUWk9JRH0sCi0JCXtKc29uSXRlbVR5cGVDb21wb3NpdGUsIGNvbnRleHRJdGVtVHlwZUlkfSwK LQkJe0pzb25JdGVtVHlwZUludmFsaWQsIEludmFsaWRPaWR9Ci0JfTsKLQotCWZvciAoaSA9IDA7 IE9pZElzVmFsaWQodHlwZW9pZCA9IGl0ZW1fdHlwZXNbaV0udHlwZW9pZCk7IGkrKykKKwlpZiAo Y29lcmNpb25fZXhwciA9PSBOVUxMKQogCXsKLQkJTm9kZQkgICAqZXhwcjsKLQkJSnNvbkl0ZW1D b2VyY2lvbiAqaXRlbV9jb2VyY2lvbiA9IG1ha2VOb2RlKEpzb25JdGVtQ29lcmNpb24pOwotCi0J CWlmICh0eXBlb2lkID09IFVOS05PV05PSUQpCi0JCXsKLQkJCWV4cHIgPSAoTm9kZSAqKSBtYWtl TnVsbENvbnN0KFVOS05PV05PSUQsIC0xLCBJbnZhbGlkT2lkKTsKLQkJfQorCQkvKgorCQkgKiBF aXRoZXIgbm8gY2FzdCB3YXMgZm91bmQgb3IgY29lcmNpb24gaXMgdW5uZWNlc3NhcnkgYnV0IHN0 aWxsIG11c3QKKwkJICogY29udmVydCB0aGUgc3RyaW5nIHZhbHVlIHRvIHRoZSBvdXRwdXQgdHlw ZS4KKwkJICovCisJCWlmIChvbWl0X3F1b3RlcyB8fCBqc2V4cHItPm9wID09IEpTT05fVkFMVUVf T1ApCisJCQlqc2V4cHItPnVzZV9pb19jb2VyY2lvbiA9IHRydWU7CiAJCWVsc2UKLQkJewotCQkJ Q2FzZVRlc3RFeHByICpwbGFjZWhvbGRlciA9IG1ha2VOb2RlKENhc2VUZXN0RXhwcik7Ci0KLQkJ CS8qCi0JCQkgKiBXZSBhYnVzZSBDYXNlVGVzdEV4cHIgaGVyZSBhcyBwbGFjZWhvbGRlciB0byBw YXNzIHRoZSByZXN1bHQgb2YKLQkJCSAqIEpTT05fVkFMVUUganNvbnBhdGggZXhwcmVzc2lvbiB0 byB0aGUgY29lcmNpb24gZnVuY3Rpb24uCi0JCQkgKi8KLQkJCXBsYWNlaG9sZGVyLT50eXBlSWQg PSBpdGVtX3R5cGVzW2ldLnR5cGVvaWQ7Ci0JCQlwbGFjZWhvbGRlci0+dHlwZU1vZCA9IC0xOwot CQkJcGxhY2Vob2xkZXItPmNvbGxhdGlvbiA9IEludmFsaWRPaWQ7Ci0KLQkJCWV4cHIgPSAoTm9k ZSAqKSBwbGFjZWhvbGRlcjsKLQkJfQotCi0JCWl0ZW1fY29lcmNpb24tPml0ZW1fdHlwZSA9IGl0 ZW1fdHlwZXNbaV0uaXRlbV90eXBlOwotCQlpdGVtX2NvZXJjaW9uLT5jb2VyY2lvbiA9IGNvZXJj ZUpzb25FeHByKHBzdGF0ZSwgZXhwciwgcmV0dXJuaW5nLCBmYWxzZSk7Ci0JCWl0ZW1fY29lcmNp b25zID0gbGFwcGVuZChpdGVtX2NvZXJjaW9ucywgaXRlbV9jb2VyY2lvbik7CisJCQlqc2V4cHIt PnVzZV9qc29uX2NvZXJjaW9uID0gdHJ1ZTsKIAl9CiAKLQlyZXR1cm4gaXRlbV9jb2VyY2lvbnM7 CisJQXNzZXJ0KGpzZXhwci0+Y29lcmNpb25fZXhwciAhPSBOVUxMIHx8CisJCSAgIChqc2V4cHIt PnVzZV9pb19jb2VyY2lvbiAhPSBqc2V4cHItPnVzZV9qc29uX2NvZXJjaW9uKSk7CiB9CiAKIC8q CkBAIC00NzU4LDE2ICs0NjQzLDE2IEBAIHRyYW5zZm9ybUpzb25CZWhhdmlvcihQYXJzZVN0YXRl ICpwc3RhdGUsIEpzb25CZWhhdmlvciAqYmVoYXZpb3IsCiAJCQkJCSAgSnNvbkJlaGF2aW9yVHlw ZSBkZWZhdWx0X2JlaGF2aW9yLAogCQkJCQkgIEpzb25SZXR1cm5pbmcgKnJldHVybmluZykKIHsK LQlKc29uQmVoYXZpb3JUeXBlIGJlaGF2aW9yX3R5cGUgPSBkZWZhdWx0X2JlaGF2aW9yOworCUpz b25CZWhhdmlvclR5cGUgYnR5cGUgPSBkZWZhdWx0X2JlaGF2aW9yOwogCU5vZGUJICAgKmV4cHIg PSBOVUxMOwotCUpzb25Db2VyY2lvbiAqY29lcmNpb24gPSBOVUxMOworCWJvb2wJCWNvZXJjZSA9 IGZhbHNlOwogCWludAkJCWxvY2F0aW9uID0gLTE7CiAKIAlpZiAoYmVoYXZpb3IpCiAJewotCQli ZWhhdmlvcl90eXBlID0gYmVoYXZpb3ItPmJ0eXBlOworCQlidHlwZSA9IGJlaGF2aW9yLT5idHlw ZTsKIAkJbG9jYXRpb24gPSBiZWhhdmlvci0+bG9jYXRpb247Ci0JCWlmIChiZWhhdmlvcl90eXBl ID09IEpTT05fQkVIQVZJT1JfREVGQVVMVCkKKwkJaWYgKGJ0eXBlID09IEpTT05fQkVIQVZJT1Jf REVGQVVMVCkKIAkJewogCQkJZXhwciA9IHRyYW5zZm9ybUV4cHJSZWN1cnNlKHBzdGF0ZSwgYmVo YXZpb3ItPmV4cHIpOwogCQkJaWYgKCFJc0EoZXhwciwgQ29uc3QpICYmICFJc0EoZXhwciwgRnVu Y0V4cHIpICYmCkBAIC00NzkxLDggKzQ2NzYsOCBAQCB0cmFuc2Zvcm1Kc29uQmVoYXZpb3IoUGFy c2VTdGF0ZSAqcHN0YXRlLCBKc29uQmVoYXZpb3IgKmJlaGF2aW9yLAogCQl9CiAJfQogCi0JaWYg KGV4cHIgPT0gTlVMTCAmJiBiZWhhdmlvcl90eXBlICE9IEpTT05fQkVIQVZJT1JfRVJST1IpCi0J CWV4cHIgPSBHZXRKc29uQmVoYXZpb3JDb25zdEV4cHIoYmVoYXZpb3JfdHlwZSwgbG9jYXRpb24p OworCWlmIChleHByID09IE5VTEwgJiYgYnR5cGUgIT0gSlNPTl9CRUhBVklPUl9FUlJPUikKKwkJ ZXhwciA9IEdldEpzb25CZWhhdmlvckNvbnN0RXhwcihidHlwZSwgbG9jYXRpb24pOwogCiAJaWYg KGV4cHIpCiAJewpAQCAtNDgwMSwxNSArNDY4NiwxNSBAQCB0cmFuc2Zvcm1Kc29uQmVoYXZpb3Io UGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29uQmVoYXZpb3IgKmJlaGF2aW9yLAogCiAJCS8qCiAJCSAq IENvZXJjZSBOVUxMcyBhbmQgImludGVybmFsIiAodGhhdCBpcywgbm90IHNwZWNpZmllZCBieSB0 aGUgdXNlcikKLQkJICoganNvbmItdmFsdWVkIGV4cHJlc3Npb25zIHdpdGggYSBKc29uQ29lcmNp b24gbm9kZS4KKwkJICoganNvbmItdmFsdWVkIGV4cHJlc3Npb25zIGF0IHJ1bnRpbWUgdXNpbmcg anNvbl9wb3B1bGF0ZV90eXBlKCkuCiAJCSAqCiAJCSAqIEZvciBvdGhlciAodXNlci1zcGVjaWZp ZWQpIG5vbi1OVUxMIHZhbHVlcywgdHJ5IHRvIGZpbmQgYSBjYXN0IGFuZAogCQkgKiBlcnJvciBv dXQgaWYgb25lIGlzIG5vdCBmb3VuZC4KIAkJICovCiAJCWlmIChpc251bGwgfHwKIAkJCShleHBy VHlwZShleHByKSA9PSBKU09OQk9JRCAmJgotCQkJIGJlaGF2aW9yX3R5cGUgPT0gZGVmYXVsdF9i ZWhhdmlvcikpCi0JCQljb2VyY2lvbiA9IG1ha2VKc29uQ29lcmNpb24ocmV0dXJuaW5nLCBmYWxz ZSwgTlVMTCk7CisJCQkgYnR5cGUgPT0gZGVmYXVsdF9iZWhhdmlvcikpCisJCQljb2VyY2UgPSB0 cnVlOwogCQllbHNlCiAJCQljb2VyY2VkX2V4cHIgPQogCQkJCWNvZXJjZV90b190YXJnZXRfdHlw ZShwc3RhdGUsIGV4cHIsIGV4cHJUeXBlKGV4cHIpLApAQCAtNDgyOCw1ICs0NzEzLDEyIEBAIHRy YW5zZm9ybUpzb25CZWhhdmlvcihQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25CZWhhdmlvciAqYmVo YXZpb3IsCiAJCQlleHByID0gY29lcmNlZF9leHByOwogCX0KIAotCXJldHVybiBtYWtlSnNvbkJl aGF2aW9yKGJlaGF2aW9yX3R5cGUsIGV4cHIsIGNvZXJjaW9uLCBsb2NhdGlvbik7CisJaWYgKGJl aGF2aW9yKQorCQliZWhhdmlvci0+ZXhwciA9IGV4cHI7CisJZWxzZQorCQliZWhhdmlvciA9IG1h a2VKc29uQmVoYXZpb3IoYnR5cGUsIGV4cHIsIGxvY2F0aW9uKTsKKworCWJlaGF2aW9yLT5jb2Vy Y2UgPSBjb2VyY2U7CisKKwlyZXR1cm4gYmVoYXZpb3I7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9wYXJzZXIvcGFyc2VfdGFyZ2V0LmMgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfdGFy Z2V0LmMKaW5kZXggMzgzZWZlNWI2Yy4uMTI3NmYzMzYwNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvcGFyc2VyL3BhcnNlX3RhcmdldC5jCisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV90 YXJnZXQuYwpAQCAtMjAxOSw2ICsyMDE5LDkgQEAgRmlndXJlQ29sbmFtZUludGVybmFsKE5vZGUg Km5vZGUsIGNoYXIgKipuYW1lKQogCQkJCWNhc2UgSlNPTl9WQUxVRV9PUDoKIAkJCQkJKm5hbWUg PSAianNvbl92YWx1ZSI7CiAJCQkJCXJldHVybiAyOworCQkJCWRlZmF1bHQ6CisJCQkJCWVsb2co RVJST1IsICJ1bnJlY29nbml6ZWQgSnNvbkV4cHIgb3A6ICVkIiwKKwkJCQkJCSAoaW50KSAoKEpz b25GdW5jRXhwciAqKSBub2RlKS0+b3ApOwogCQkJfQogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMgYi9zcmMvYmFja2Vu ZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKaW5kZXggMDUzOWMyNDI0Zi4uMTU1Mjc0ZDdlOCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jCisrKyBiL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYwpAQCAtOTg4Niw2ICs5ODg2LDkgQEAgZ2V0X3J1bGVf ZXhwcihOb2RlICpub2RlLCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQsCiAJCQkJCWNhc2UgSlNP Tl9WQUxVRV9PUDoKIAkJCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiSlNPTl9WQUxV RSgiKTsKIAkJCQkJCWJyZWFrOworCQkJCQlkZWZhdWx0OgorCQkJCQkJZWxvZyhFUlJPUiwgInVu cmVjb2duaXplZCBKc29uRXhwciBvcDogJWQiLAorCQkJCQkJCSAoaW50KSBqZXhwci0+b3ApOwog CQkJCX0KIAogCQkJCWdldF9ydWxlX2V4cHIoamV4cHItPmZvcm1hdHRlZF9leHByLCBjb250ZXh0 LCBzaG93aW1wbGljaXQpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0V4 cHIuaCBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNFeHByLmgKaW5kZXggNGJiZjRhY2RmNi4u NjQ2OTgyMDJhNSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0V4cHIuaAor KysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjRXhwci5oCkBAIC03MDUsOSArNzA1LDggQEAg dHlwZWRlZiBzdHJ1Y3QgRXhwckV2YWxTdGVwCiAJCS8qIGZvciBFRU9QX0pTT05FWFBSX0NPRVJD SU9OICovCiAJCXN0cnVjdAogCQl7Ci0JCQlKc29uQ29lcmNpb24gKmNvZXJjaW9uOwotCQkJRm1n ckluZm8gICAqaW5wdXRfZmluZm87Ci0JCQlPaWQJCQl0eXBpb3BhcmFtOworCQkJT2lkCQkJdGFy Z2V0dHlwZTsKKwkJCWludDMyCQl0YXJnZXR0eXBtb2Q7CiAJCQl2b2lkCSAgICpqc29uX3BvcHVs YXRlX3R5cGVfY2FjaGU7CiAJCQlFcnJvclNhdmVDb250ZXh0ICplc2NvbnRleHQ7CiAJCX0JCQlq c29uZXhwcl9jb2VyY2lvbjsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rl cy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKaW5kZXggY2QyY2U2M2ZhMS4uYjE3 ZmE1MmQ4MiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKKysrIGIv c3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKQEAgLTEwMjgsNiArMTAyOCwxMCBAQCB0eXBl ZGVmIHN0cnVjdCBKc29uRXhwclN0YXRlCiAJLyogSnNvblBhdGhWYXJpYWJsZSBlbnRyaWVzIGZv ciBwYXNzaW5nX3ZhbHVlcyAqLwogCUxpc3QJICAgKmFyZ3M7CiAKKwkvKiBUeXBlIGlucHV0IGZ1 bmN0aW9uIGluZm8gZm9yIEpTT05fVkFMVUUoKSByZXN1bHQgY29lcmNpb24uICovCisJRm1ncklu Zm8gICAqaW5wdXRfZmluZm87CisJRnVuY3Rpb25DYWxsSW5mbyBpbnB1dF9mY2luZm87CisKIAkv KgogCSAqIEFkZHJlc3NlcyBvZiBzdGVwcyB0aGF0IGltcGxlbWVudCB0aGUgbm9uLUVSUk9SIHZh cmlhbnQgb2YgT04gRU1QVFkKIAkgKiBhbmQgT04gRVJST1IgYmVoYXZpb3JzLCByZXNwZWN0aXZl bHkuCkBAIC0xMDM5LDIyICsxMDQzLDEwIEBAIHR5cGVkZWYgc3RydWN0IEpzb25FeHByU3RhdGUK IAkgKiBBZGRyZXNzZXMgb2Ygc3RlcHMgdG8gY29lcmNlIHRoZSByZXN1bHQgdmFsdWUgb2YganNv bnBhdGggZXZhbHVhdGlvbiB0bwogCSAqIHRoZSBSRVRVUk5JTkcgdHlwZS4KIAkgKgotCSAqIGp1 bXBfZXZhbF9yZXN1bHRfY29lcmNpb24gcG9pbnRzIHRvIHRoZSBzdGVwIHRvIGV2YWx1YXRlIHRo ZSBjb2VyY2lvbgotCSAqIGdpdmVuIGluIEpzb25FeHByLnJlc3VsdF9jb2VyY2lvbi4gIC0xIGlm IG5vIGNvZXJjaW9uIGlzIG5lY2Vzc2FyeS4KLQkgKgotCSAqIE9ubHkgdmFsaWQgZm9yIEpTT05f VkFMVUUsIGV2YWxfaXRlbV9jb2VyY2lvbl9qdW1wcyBpcyBhbiBhcnJheSBvZgotCSAqIG51bV9p dGVtX2NvZXJjaW9ucyBlbGVtZW50cyBlYWNoIGNvbnRhaW5pbmcgYSBzdGVwIGFkZHJlc3MgdG8g Y29lcmNlCi0JICogYSB2YWx1ZSBvZiBnaXZlbiBKc29uSXRlbVR5cGUgcmV0dXJuZWQgYnkgSnNv blBhdGhWYWx1ZSgpIHRvIHRoZQotCSAqIFJFVFVSTklORyB0eXBlLCBvciAtMSBpZiBubyBjb2Vy Y2lvbiBpcyBuZWNlc3NhcnkuCi0JICogaXRlbV9jb2VyY2lvbl9pc19jYXN0IGlzIGFuIGFycmF5 IG9mIGJvb2xlYW4gZmxhZ3Mgb2YgdGhlIHNhbWUgbGVuZ3RoCi0JICogdGhhdCBpbmRpY2F0ZXMg d2hldGhlciBlYWNoIHZhbGlkIHN0ZXAgYWRkcmVzcyBpbiB0aGUKLQkgKiBldmFsX2l0ZW1fY29l cmNpb25fanVtcHMgYXJyYXkgY29ycmVzcG9uZHMgdG8gYSBjYXN0IGV4cHJlc3Npb24gb3IgYQot CSAqIEpzb25Db2VyY2lvbiBub2RlLgorCSAqIGp1bXBfZXZhbF9jb2VyY2lvbl9leHByIHBvaW50 cyB0byB0aGUgc3RlcCB0byBldmFsdWF0ZSB0aGUgY29lcmNpb24KKwkgKiBnaXZlbiBpbiBKc29u RXhwci5jb2VyY2lvbl9leHByLiAgLTEgaWYgbm8gY29lcmNpb24gaXMgbmVjZXNzYXJ5LgogCSAq LwotCWludAkJCWp1bXBfZXZhbF9yZXN1bHRfY29lcmNpb247Ci0JaW50CQkJbnVtX2l0ZW1fY29l cmNpb25zOwotCWludAkJICAgKmV2YWxfaXRlbV9jb2VyY2lvbl9qdW1wczsKLQlib29sCSAgICpp dGVtX2NvZXJjaW9uX2lzX2Nhc3Q7CisJaW50CQkJanVtcF9ldmFsX2NvZXJjaW9uX2V4cHI7CiAK IAkvKgogCSAqIEFkZHJlc3MgdG8ganVtcCB0byB3aGVuIHNraXBwaW5nIGFsbCB0aGUgc3RlcHMg YWZ0ZXIgcGVyZm9ybWluZwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvbWFrZWZ1bmNz LmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9tYWtlZnVuY3MuaAppbmRleCA5MWQ5NWZjNTJiLi5mZGM3 ODI3MGU1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9tYWtlZnVuY3MuaAorKysgYi9z cmMvaW5jbHVkZS9ub2Rlcy9tYWtlZnVuY3MuaApAQCAtMTEyLDExICsxMTIsMTEgQEAgZXh0ZXJu IEpzb25Gb3JtYXQgKm1ha2VKc29uRm9ybWF0KEpzb25Gb3JtYXRUeXBlIHR5cGUsIEpzb25FbmNv ZGluZyBlbmNvZGluZywKIAkJCQkJCQkJICBpbnQgbG9jYXRpb24pOwogZXh0ZXJuIEpzb25WYWx1 ZUV4cHIgKm1ha2VKc29uVmFsdWVFeHByKEV4cHIgKnJhd19leHByLCBFeHByICpmb3JtYXR0ZWRf ZXhwciwKIAkJCQkJCQkJCQlKc29uRm9ybWF0ICpmb3JtYXQpOwotZXh0ZXJuIEpzb25CZWhhdmlv ciAqbWFrZUpzb25CZWhhdmlvcihKc29uQmVoYXZpb3JUeXBlIHR5cGUsIE5vZGUgKmV4cHIsCi0J CQkJCQkJCQkgIEpzb25Db2VyY2lvbiAqY29lcmNpb24sIGludCBsb2NhdGlvbik7CiBleHRlcm4g Tm9kZSAqbWFrZUpzb25LZXlWYWx1ZShOb2RlICprZXksIE5vZGUgKnZhbHVlKTsKIGV4dGVybiBO b2RlICptYWtlSnNvbklzUHJlZGljYXRlKE5vZGUgKmV4cHIsIEpzb25Gb3JtYXQgKmZvcm1hdCwK IAkJCQkJCQkJIEpzb25WYWx1ZVR5cGUgaXRlbV90eXBlLCBib29sIHVuaXF1ZV9rZXlzLAogCQkJ CQkJCQkgaW50IGxvY2F0aW9uKTsKK2V4dGVybiBKc29uQmVoYXZpb3IgKm1ha2VKc29uQmVoYXZp b3IoSnNvbkJlaGF2aW9yVHlwZSBidHlwZSwgTm9kZSAqZXhwciwKKwkJCQkJCQkJCSAgaW50IGxv Y2F0aW9uKTsKIAogI2VuZGlmCQkJCQkJCS8qIE1BS0VGVU5DX0ggKi8KZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL25vZGVzL3ByaW1ub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5vZGVz LmgKaW5kZXggMzc3OTgyZjhmYS4uNmRhMDliY2I1ZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv bm9kZXMvcHJpbW5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5vZGVzLmgKQEAg LTE3MjUsNzcgKzE3MjUsMTMgQEAgdHlwZWRlZiBlbnVtIEpzb25CZWhhdmlvclR5cGUKIAlKU09O X0JFSEFWSU9SX0RFRkFVTFQsCiB9IEpzb25CZWhhdmlvclR5cGU7CiAKLS8qCi0gKiBKc29uQ29l cmNpb24KLSAqCQlJbmZvcm1hdGlvbiBhYm91dCBjb2VyY2luZyBhIFNRTC9KU09OIHZhbHVlIHRv IHRoZSBzcGVjaWZpZWQKLSAqCQl0eXBlIGF0IHJ1bnRpbWUKLSAqCi0gKiBBIG5vZGUgb2YgdGhp cyB0eXBlIGlzIGNyZWF0ZWQgaWYgdGhlIHBhcnNlciBjYW5ub3QgZmluZCBhIGNhc3QgZXhwcmVz c2lvbgotICogdXNpbmcgY29lcmNlX3R5cGUoKSBvciBpZiBPTUlUIFFVT1RFUyBpcyBzcGVjaWZp ZWQgZm9yIEpTT05fUVVFUlk7IHNlZQotICogY29lcmNlSnNvbkZ1bmNFeHByT3V0cHV0KCkuCi0g KgotICogSWYgaXQncyB0aGUgbGF0dGVyLCAnY2FzdF9leHByJyBtYXkgY29udGFpbiB0aGUgY2Fz dCBleHByZXNzaW9uLCBldmFsdWF0ZWQKLSAqIHNlcGFyYXRlbHkgZnJvbSB0aGlzIG5vZGUsIHRo YXQgd2lsbCBkbyB0aGUgYWN0dWFsIGNvZXJjaW9uIG9mIHRoZQotICogcXVvdGUtc3RyaXBwZWQg c3RyaW5nLiAgSWYgbm8gY2FzdCBleHByZXNzaW9uIGlzIGdpdmVuLCB0aGUgc3RyaW5nIHdpbGwg YmUKLSAqIGNvZXJjZWQgYnkgY2FsbGluZyB0aGUgdGFyZ2V0IHR5cGUncyBpbnB1dCBmdW5jdGlv bi4gIFNlZQotICogRXhlY0V2YWxKc29uQ29lcmNpb24oKS4KLSAqLwotdHlwZWRlZiBzdHJ1Y3Qg SnNvbkNvZXJjaW9uCi17Ci0JTm9kZVRhZwkJdHlwZTsKLQotCU9pZAkJCXRhcmdldHR5cGU7Ci0J aW50MzIJCXRhcmdldHR5cG1vZDsKLQlib29sCQlvbWl0X3F1b3RlczsJLyogT01JVCBRVU9URVMg c3BlY2lmaWVkIGZvciBKU09OX1FVRVJZPyAqLwotCU5vZGUJICAgKmNhc3RfZXhwcjsJCS8qIGNv ZXJjaW9uIGNhc3QgZXhwcmVzc2lvbiBvciBOVUxMICovCi0JT2lkCQkJY29sbGF0aW9uOwotfSBK c29uQ29lcmNpb247Ci0KLS8qCi0gKiBKc29uSXRlbVR5cGUKLSAqCQlQb3NzaWJsZSB0eXBlcyBm b3Igc2NhbGFyIHZhbHVlcyByZXR1cm5lZCBieSBKU09OX1ZBTFVFKCkKLSAqCi0gKiBUaGUgY29t bWVudCBuZXh0IHRvIGVhY2ggaXRlbSB0eXBlIG1lbnRpb25zIHRoZSBjb3JyZXNwb25kaW5nCi0g KiBKc29uYlZhbHVlLmpidlR5cGUuCi0gKi8KLXR5cGVkZWYgZW51bSBKc29uSXRlbVR5cGUKLXsK LQlKc29uSXRlbVR5cGVOdWxsLAkJCS8qIGpidk51bGwgKi8KLQlKc29uSXRlbVR5cGVTdHJpbmcs CQkJLyogamJ2U3RyaW5nICovCi0JSnNvbkl0ZW1UeXBlTnVtZXJpYywJCS8qIGpidk51bWVyaWMg Ki8KLQlKc29uSXRlbVR5cGVCb29sZWFuLAkJLyogamJ2Qm9vbCAqLwotCUpzb25JdGVtVHlwZURh dGUsCQkJLyogamJ2RGF0ZXRpbWU6IERBVEVPSUQgKi8KLQlKc29uSXRlbVR5cGVUaW1lLAkJCS8q IGpidkRhdGV0aW1lOiBUSU1FT0lEICovCi0JSnNvbkl0ZW1UeXBlVGltZXR6LAkJCS8qIGpidkRh dGV0aW1lOiBUSU1FVFpPSUQgKi8KLQlKc29uSXRlbVR5cGVUaW1lc3RhbXAsCQkvKiBqYnZEYXRl dGltZTogVElNRVNUQU1QT0lEICovCi0JSnNvbkl0ZW1UeXBlVGltZXN0YW1wdHosCS8qIGpidkRh dGV0aW1lOiBUSU1FU1RBTVBUWk9JRCAqLwotCUpzb25JdGVtVHlwZUNvbXBvc2l0ZSwJCS8qIGpi dkFycmF5LCBqYnZPYmplY3QsIGpidkJpbmFyeSAqLwotCUpzb25JdGVtVHlwZUludmFsaWQsCi19 IEpzb25JdGVtVHlwZTsKLQotLyoKLSAqIEpzb25JdGVtQ29lcmNpb24KLSAqCQlDb2VyY2lvbiBl eHByZXNzaW9uIGZvciB0aGUgZ2l2ZW4gSnNvbkl0ZW1UeXBlCi0gKgotICogSWYgbm90IE5VTEws ICdjb2VyY2lvbicgZ2l2ZW4gdGhlIGV4cHJlc3Npb24gbm9kZSB0byBjb252ZXJ0IGEgc2NhbGFy IHZhbHVlCi0gKiBleHRyYWN0ZWQgZnJvbSBhIEpzb25iVmFsdWUgb2YgdGhlIGdpdmVuIHR5cGUg dG8gdGhlIHRhcmdldCB0eXBlIGdpdmVuIGJ5Ci0gKiBKc29uRXhwci5yZXR1cm5pbmcuICBOVUxM IG1lYW5zIHRoZSBjb2VyY2lvbiBpcyB1bm5lY2Vzc2FyeS4KLSAqLwotdHlwZWRlZiBzdHJ1Y3Qg SnNvbkl0ZW1Db2VyY2lvbgotewotCU5vZGVUYWcJCXR5cGU7Ci0KLQlKc29uSXRlbVR5cGUgaXRl bV90eXBlOwotCU5vZGUJICAgKmNvZXJjaW9uOwotfSBKc29uSXRlbUNvZXJjaW9uOwotCiAvKgog ICogSnNvbkJlaGF2aW9yCiAgKgkJSW5mb3JtYXRpb24gYWJvdXQgT04gRVJST1IgLyBPTiBFTVBU WSBiZWhhdmlvcnMgb2YgSlNPTl9WQUxVRSgpLAogICoJCUpTT05fUVVFUlkoKSwgYW5kIEpTT05f RVhJU1RTKCkKICAqCiAgKiAnZXhwcicgaXMgdGhlIGV4cHJlc3Npb24gdG8gZW1pdCB3aGVuIGEg Z2l2ZW4gYmVoYXZpb3IgKEVNUFRZIG9yIEVSUk9SKQotICogb2NjdXJzIG9uIGV2YWx1YXRpbmcg dGhlIFNRTC9KU09OIHF1ZXJ5IGZ1bmN0aW9uLiAgJ2NvZXJjaW9uJyBpcyBzZXQKKyAqIG9jY3Vy cyBvbiBldmFsdWF0aW5nIHRoZSBTUUwvSlNPTiBxdWVyeSBmdW5jdGlvbi4gICdjb2VyY2UnIGlz IHNldCB0byB0cnVlCiAgKiBpZiAnZXhwcicgaXNuJ3QgYWxyZWFkeSBvZiB0aGUgZXhwZWN0ZWQg dGFyZ2V0IHR5cGUgZ2l2ZW4gYnkKICAqIEpzb25FeHByLnJldHVybmluZy4KICAqLwpAQCAtMTgw NSw4ICsxNzQxLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgSnNvbkJlaGF2aW9yCiAKIAlKc29uQmVoYXZp b3JUeXBlIGJ0eXBlOwogCU5vZGUJICAgKmV4cHI7Ci0JSnNvbkNvZXJjaW9uICpjb2VyY2lvbjsJ CS8qIHRvIGNvZXJjZSBiZWhhdmlvciBleHByZXNzaW9uIHdoZW4gdGhlcmUgaXMKLQkJCQkJCQkJ ICogbm8gY2FzdCB0byB0aGUgdGFyZ2V0IHR5cGUgKi8KKwlib29sCQljb2VyY2U7CiAJaW50CQkJ bG9jYXRpb247CQkvKiB0b2tlbiBsb2NhdGlvbiwgb3IgLTEgaWYgdW5rbm93biAqLwogfSBKc29u QmVoYXZpb3I7CiAKQEAgLTE4NTMsMTYgKzE3ODgsMTcgQEAgdHlwZWRlZiBzdHJ1Y3QgSnNvbkV4 cHIKIAlKc29uQmVoYXZpb3IgKm9uX2Vycm9yOwogCiAJLyoKLQkgKiBFeHByZXNzaW9uIHRvIGNv bnZlcnQgdGhlIHJlc3VsdCBvZiBqc29ucGF0aCBmdW5jdGlvbnMgdG8gdGhlIFJFVFVSTklORwot CSAqIHR5cGUKLQkgKi8KLQlOb2RlCSAgICpyZXN1bHRfY29lcmNpb247Ci0KLQkvKgotCSAqIExp c3Qgb2YgZXhwcmVzc2lvbnMgZm9yIGNvZXJjaW5nIEpTT05fVkFMVUUoKSByZXN1bHQgdmFsdWVz LCBjb250YWluaW5nCi0JICogb25lIGVsZW1lbnQgZm9yIGV2ZXJ5IEpzb25JdGVtVHlwZS4KKwkg KiBJbmZvcm1hdGlvbiBhYm91dCBjb252ZXJ0aW5nIHRoZSByZXN1bHQgb2YganNvbnBhdGggZnVu Y3Rpb25zCisJICogSnNvblBhdGhRdWVyeSgpIGFuZCBKc29uUGF0aFZhbHVlKCkgdG8gdGhlIFJF VFVSTklORyB0eXBlLgorCSAqCisJICogY29lcmNpb25fZXhwciBpcyBhIGNhc3QgZXhwcmVzc2lv biBpZiB0aGUgcGFyc2VyIGNhbiBmaW5kIGl0IGZvciB0aGUKKwkgKiBzb3VyY2UgYW5kIHRoZSB0 YXJnZXQgdHlwZS4gIElmIG5vdCwgZWl0aGVyIHVzZV9pb19jb2VyY2lvbiBvcgorCSAqIHVzZV9q c29uX2NvZXJjaW9uIGlzIHNldCB0byBkZXRlcm1pbmUgdGhlIGNvZXJjaW9uIG1ldGhvZCB0byB1 c2UgYXQKKwkgKiBydW50aW1lOyBzZWUgY29lcmNlSnNvbkV4cHJPdXRwdXQoKSBhbmQgRXhlY0lu aXRKc29uRXhwcigpLgogCSAqLwotCUxpc3QJICAgKml0ZW1fY29lcmNpb25zOworCU5vZGUJICAg KmNvZXJjaW9uX2V4cHI7CisJYm9vbAkJdXNlX2lvX2NvZXJjaW9uOworCWJvb2wJCXVzZV9qc29u X2NvZXJjaW9uOwogCiAJLyogV1JBUFBFUiBzcGVjaWZpY2F0aW9uIGZvciBKU09OX1FVRVJZICov CiAJSnNvbldyYXBwZXIgd3JhcHBlcjsKQEAgLTE4NzAsNiArMTgwNiw5IEBAIHR5cGVkZWYgc3Ry dWN0IEpzb25FeHByCiAJLyogS0VFUCBvciBPTUlUIFFVT1RFUyBmb3Igc2luZ2xldG9uIHNjYWxh cnMgcmV0dXJuZWQgYnkgSlNPTl9RVUVSWSgpICovCiAJYm9vbAkJb21pdF9xdW90ZXM7CiAKKwkv KiBKc29uRXhwcidzIGNvbGxhdGlvbiwgaWYgY29lcmNpb25fZXhwciBpcyBOVUxMLiAqLworCU9p ZAkJCWNvbGxhdGlvbjsKKwogCS8qIE9yaWdpbmFsIEpzb25GdW5jRXhwcidzIGxvY2F0aW9uICov CiAJaW50CQkJbG9jYXRpb247CiB9IEpzb25FeHByOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9zcWxqc29uX3F1ZXJ5ZnVuY3Mub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9zcWxqc29uX3F1ZXJ5ZnVuY3Mub3V0CmluZGV4IGY1YjU3NDY1ZDYuLjVhNTM3ZDA2 NTUgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3FsanNvbl9xdWVyeWZ1 bmNzLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3NxbGpzb25fcXVlcnlmdW5j cy5vdXQKQEAgLTEsMTAgKzEsNCBAQAogLS0gSlNPTl9FWElTVFMKLS0tIGpzb24gYXJndW1lbnRz IGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkCi1TRUxFQ1QgSlNPTl9FWElTVFMoTlVMTCBGT1JNQVQg SlNPTiwgJyQnKTsKLUVSUk9SOiAgSlNPTl9FWElTVFMoKSBpcyBub3QgeWV0IGltcGxlbWVudGVk IGZvciB0aGUganNvbiB0eXBlCi1MSU5FIDE6IFNFTEVDVCBKU09OX0VYSVNUUyhOVUxMIEZPUk1B VCBKU09OLCAnJCcpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgXgotSElOVDogIFRyeSBj YXN0aW5nIHRoZSBhcmd1bWVudCB0byBqc29uYgogU0VMRUNUIEpTT05fRVhJU1RTKE5VTEw6Ompz b25iLCAnJCcpOwogIGpzb25fZXhpc3RzIAogLS0tLS0tLS0tLS0tLQpAQCAtMTQ3LDEyICsxNDEs NiBAQCBTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJzEnLCAnJC5hID4gMicgRVJST1IgT04gRVJS T1IpOwogKDEgcm93KQogCiAtLSBKU09OX1ZBTFVFCi0tLSBqc29uIGFyZ3VtZW50cyBjdXJyZW50 bHkgbm90IHN1cHBvcnRlZAotU0VMRUNUIEpTT05fVkFMVUUoTlVMTCBGT1JNQVQgSlNPTiwgJyQn KTsKLUVSUk9SOiAgSlNPTl9WQUxVRSgpIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQgZm9yIHRoZSBq c29uIHR5cGUKLUxJTkUgMTogU0VMRUNUIEpTT05fVkFMVUUoTlVMTCBGT1JNQVQgSlNPTiwgJyQn KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgXgotSElOVDogIFRyeSBjYXN0aW5nIHRoZSBh cmd1bWVudCB0byBqc29uYgogU0VMRUNUIEpTT05fVkFMVUUoTlVMTDo6anNvbmIsICckJyk7CiAg anNvbl92YWx1ZSAKIC0tLS0tLS0tLS0tLQpAQCAtMTc0LDcgKzE2Miw3IEBAIFNFTEVDVCBKU09O X1ZBTFVFKGpzb25iICdudWxsJywgJyQnIFJFVFVSTklORyBpbnQpOwogU0VMRUNUIEpTT05fVkFM VUUoanNvbmIgJ3RydWUnLCAnJCcpOwogIGpzb25fdmFsdWUgCiAtLS0tLS0tLS0tLS0KLSB0cnVl CisgdAogKDEgcm93KQogCiBTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAndHJ1ZScsICckJyBSRVRV Uk5JTkcgYm9vbCk7CkBAIC0yMDMsNyArMTkxLDExIEBAIFNFTEVDVCBKU09OX1ZBTFVFKGpzb25i ICcxMjMnLCAnJCcgUkVUVVJOSU5HIHRleHQpOwogCiAvKiBqc29uYiBieXRlYSA/Pz8gKi8KIFNF TEVDVCBKU09OX1ZBTFVFKGpzb25iICcxMjMnLCAnJCcgUkVUVVJOSU5HIGJ5dGVhIEVSUk9SIE9O IEVSUk9SKTsKLUVSUk9SOiAgU1FML0pTT04gaXRlbSBjYW5ub3QgYmUgY2FzdCB0byB0YXJnZXQg dHlwZQorIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyBceDMxMzIzMworKDEgcm93KQorCiBT RUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMS4yMycsICckJyk7CiAganNvbl92YWx1ZSAKIC0tLS0t LS0tLS0tLQpAQCAtMjEzLDcgKzIwNSw3IEBAIFNFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxLjIz JywgJyQnKTsKIFNFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxLjIzJywgJyQnIFJFVFVSTklORyBp bnQpOwogIGpzb25fdmFsdWUgCiAtLS0tLS0tLS0tLS0KLSAgICAgICAgICAxCisgICAgICAgICAg IAogKDEgcm93KQogCiBTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnIjEuMjMiJywgJyQnIFJFVFVS TklORyBudW1lcmljKTsKQEAgLTMyOSwxMSArMzIxLDcgQEAgU0VMRUNUIEpTT05fVkFMVUUoanNv bmIgJzEnLCAgJyQuYScgUkVUVVJOSU5HIHNxbGpzb25iX2ludF9ub3RfbnVsbCBERUZBVUxUIDIg T04KICgxIHJvdykKIAogU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAgJyQuYScgUkVUVVJO SU5HIHNxbGpzb25iX2ludF9ub3RfbnVsbCBERUZBVUxUIE5VTEwgT04gRU1QVFkgRVJST1IgT04g RVJST1IpOwotIGpzb25fdmFsdWUgCi0tLS0tLS0tLS0tLS0KLSAgICAgICAgICAgCi0oMSByb3cp Ci0KK0VSUk9SOiAgZG9tYWluIHNxbGpzb25iX2ludF9ub3RfbnVsbCBkb2VzIG5vdCBhbGxvdyBu dWxsIHZhbHVlcwogQ1JFQVRFIFRZUEUgcmFpbmJvdyBBUyBFTlVNICgncmVkJywgJ29yYW5nZScs ICd5ZWxsb3cnLCAnZ3JlZW4nLCAnYmx1ZScsICdwdXJwbGUnKTsKIENSRUFURSBET01BSU4gcmdi IEFTIHJhaW5ib3cgQ0hFQ0sgKFZBTFVFIElOICgncmVkJywgJ2dyZWVuJywgJ2JsdWUnKSk7CiBT RUxFQ1QgSlNPTl9WQUxVRSgnInB1cnBsZSInOjpqc29uYiwgJ2xheCAkWypdJyBSRVRVUk5JTkcg cmdiKTsKQEAgLTQzMyw3ICs0MjEsNyBAQCBTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnWyIxIl0n LCAnJFsqXScgUkVUVVJOSU5HIGludCBERUZBVUxUIDIgKyAzIE9OIEVSUk9SKTsKICgxIHJvdykK IAogU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ1siMSJdJywgJyRbKl0nIFJFVFVSTklORyBpbnQg Rk9STUFUIEpTT04pOyAtLSBSRVRVUk5JTkcgRk9STUFUIG5vdCBhbGxvd2VkCi1FUlJPUjogIGNh bm5vdCBzcGVjaWZ5IEZPUk1BVCBpbiBSRVRVUk5JTkcgY2xhdXNlIG9mIEpTT05fVkFMVUUoKQor RVJST1I6ICBjYW5ub3Qgc3BlY2lmeSBGT1JNQVQgSlNPTiBpbiBSRVRVUk5JTkcgY2xhdXNlIG9m IEpTT05fVkFMVUUoKQogTElORSAxOiAuLi5DVCBKU09OX1ZBTFVFKGpzb25iICdbIjEiXScsICck WypdJyBSRVRVUk5JTkcgaW50IEZPUk1BVCBKU08uLi4KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCiAtLSBSRVRVR05JTkcgcHNl dWRvLXR5cGVzIG5vdCBhbGxvd2VkCkBAIC01MzEsMTMgKzUxOSwxMiBAQCBTRUxFQ1QgSlNPTl9W QUxVRShqc29uYiAnbnVsbCcsICckdHMnIFBBU1NJTkcgdGltZXN0YW1wdHogJzIwMTgtMDItMjEg MTI6MzQ6NTYgKwogICIyMDE4LTAyLTIxVDAyOjM0OjU2KzAwOjAwIgogKDEgcm93KQogCistLSBU ZXN0IHRoYXQgbnVtZXJpYyBKU09OIHZhbHVlcyBhcmUgY29lcmNlZCB1bmlmb3JtbHkKK3NlbGVj dCBqc29uX3ZhbHVlKCd7ImEiOiAxLjIzNH0nLCAnJC5hJyByZXR1cm5pbmcgaW50IGVycm9yIG9u IGVycm9yKTsKK0VSUk9SOiAgaW52YWxpZCBpbnB1dCBzeW50YXggZm9yIHR5cGUgaW50ZWdlcjog IjEuMjM0Igorc2VsZWN0IGpzb25fdmFsdWUoJ3siYSI6ICIxLjIzNCJ9JywgJyQuYScgcmV0dXJu aW5nIGludCBlcnJvciBvbiBlcnJvcik7CitFUlJPUjogIGludmFsaWQgaW5wdXQgc3ludGF4IGZv ciB0eXBlIGludGVnZXI6ICIxLjIzNCIKIC0tIEpTT05fUVVFUlkKLS0tIGpzb24gYXJndW1lbnRz IGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkCi1TRUxFQ1QgSlNPTl9RVUVSWShOVUxMIEZPUk1BVCBK U09OLCAnJCcpOwotRVJST1I6ICBKU09OX1FVRVJZKCkgaXMgbm90IHlldCBpbXBsZW1lbnRlZCBm b3IgdGhlIGpzb24gdHlwZQotTElORSAxOiBTRUxFQ1QgSlNPTl9RVUVSWShOVUxMIEZPUk1BVCBK U09OLCAnJCcpOwotICAgICAgICAgICAgICAgICAgICAgICAgICBeCi1ISU5UOiAgVHJ5IGNhc3Rp bmcgdGhlIGFyZ3VtZW50IHRvIGpzb25iCiBTRUxFQ1QgSlNPTl9WQUxVRShOVUxMOjpqc29uYiwg JyQnKTsKICBqc29uX3ZhbHVlIAogLS0tLS0tLS0tLS0tCkBAIC0xMjU5LDMgKzEyNDYsMjQgQEAg U0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ3siYSI6IDEyM30nLCAnJCcgfHwgJy4nIHx8ICdhJyBX SVRIIFdSQVBQRVIpOwogLS0gU2hvdWxkIGZhaWwgKGludmFsaWQgcGF0aCkKIFNFTEVDVCBKU09O X1FVRVJZKGpzb25iICd7ImEiOiAxMjN9JywgJ2Vycm9yJyB8fCAnICcgfHwgJ2Vycm9yJyk7CiBF UlJPUjogIHN5bnRheCBlcnJvciBhdCBvciBuZWFyICIgIiBvZiBqc29ucGF0aCBpbnB1dAorLS0g Tm9uLWpzb25iIGlucHV0cyBhdXRvbWF0aWNhbGx5IGNvZXJjZWQgdG8ganNvbmIKK1NFTEVDVCBK U09OX0VYSVNUUyhqc29uICd7ImEiOiAxMjN9JywgJyQnIHx8ICcuJyB8fCAnYScpOworIGpzb25f ZXhpc3RzIAorLS0tLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlko TlVMTCBGT1JNQVQgSlNPTiwgJyQnKTsKKyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0tCisgCiso MSByb3cpCisKKy0tIFRlc3Qgbm9uLWNvbnN0IGpzb25wYXRoCitDUkVBVEUgVEVNUCBUQUJMRSBq c29ucGF0aHMgKHBhdGgpIEFTIFNFTEVDVCAnJCc7CitTRUxFQ1QganNvbl92YWx1ZSgnImFhYSIn LCBwYXRoIFJFVFVSTklORyBqc29uKSBGUk9NIGpzb25wYXRoczsKKyBqc29uX3ZhbHVlIAorLS0t LS0tLS0tLS0tCisgImFhYSIKKygxIHJvdykKKwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVz cy9zcWwvc3FsanNvbl9xdWVyeWZ1bmNzLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3NxbGpz b25fcXVlcnlmdW5jcy5zcWwKaW5kZXggNWJlMmQ4ZTNmOC4uZDAxYjE3MjM3NiAxMDA2NDQKLS0t IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3FsanNvbl9xdWVyeWZ1bmNzLnNxbAorKysgYi9zcmMv dGVzdC9yZWdyZXNzL3NxbC9zcWxqc29uX3F1ZXJ5ZnVuY3Muc3FsCkBAIC0xLDggKzEsNCBAQAog LS0gSlNPTl9FWElTVFMKLQotLS0ganNvbiBhcmd1bWVudHMgY3VycmVudGx5IG5vdCBzdXBwb3J0 ZWQKLVNFTEVDVCBKU09OX0VYSVNUUyhOVUxMIEZPUk1BVCBKU09OLCAnJCcpOwotCiBTRUxFQ1Qg SlNPTl9FWElTVFMoTlVMTDo6anNvbmIsICckJyk7CiBTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIg J1tdJywgJyQnKTsKIFNFTEVDVCBKU09OX0VYSVNUUyhKU09OX09CSkVDVChSRVRVUk5JTkcganNv bmIpLCAnJCcpOwpAQCAtMzUsMTAgKzMxLDYgQEAgU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICcx JywgJyQgPiAyJyk7CiBTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJzEnLCAnJC5hID4gMicgRVJS T1IgT04gRVJST1IpOwogCiAtLSBKU09OX1ZBTFVFCi0KLS0tIGpzb24gYXJndW1lbnRzIGN1cnJl bnRseSBub3Qgc3VwcG9ydGVkCi1TRUxFQ1QgSlNPTl9WQUxVRShOVUxMIEZPUk1BVCBKU09OLCAn JCcpOwotCiBTRUxFQ1QgSlNPTl9WQUxVRShOVUxMOjpqc29uYiwgJyQnKTsKIAogU0VMRUNUIEpT T05fVkFMVUUoanNvbmIgJ251bGwnLCAnJCcpOwpAQCAtMTQzLDEwICsxMzUsMTEgQEAgU0VMRUNU IEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAnJHRzJyBQQVNTSU5HIHRpbWVzdGFtcCAnMjAxOC0w Mi0yMSAxMjozNDo1NiArMTAKIFNFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdudWxsJywgJyR0cycg UEFTU0lORyB0aW1lc3RhbXB0eiAnMjAxOC0wMi0yMSAxMjozNDo1NiArMTAnIEFTIHRzIFJFVFVS TklORyBqc29uKTsKIFNFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdudWxsJywgJyR0cycgUEFTU0lO RyB0aW1lc3RhbXB0eiAnMjAxOC0wMi0yMSAxMjozNDo1NiArMTAnIEFTIHRzIFJFVFVSTklORyBq c29uYik7CiAKLS0tIEpTT05fUVVFUlkKKy0tIFRlc3QgdGhhdCBudW1lcmljIEpTT04gdmFsdWVz IGFyZSBjb2VyY2VkIHVuaWZvcm1seQorc2VsZWN0IGpzb25fdmFsdWUoJ3siYSI6IDEuMjM0fScs ICckLmEnIHJldHVybmluZyBpbnQgZXJyb3Igb24gZXJyb3IpOworc2VsZWN0IGpzb25fdmFsdWUo J3siYSI6ICIxLjIzNCJ9JywgJyQuYScgcmV0dXJuaW5nIGludCBlcnJvciBvbiBlcnJvcik7CiAK LS0tIGpzb24gYXJndW1lbnRzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkCi1TRUxFQ1QgSlNPTl9R VUVSWShOVUxMIEZPUk1BVCBKU09OLCAnJCcpOworLS0gSlNPTl9RVUVSWQogCiBTRUxFQ1QgSlNP Tl9WQUxVRShOVUxMOjpqc29uYiwgJyQnKTsKIApAQCAtNDI1LDMgKzQxOCwxMSBAQCBTRUxFQ1Qg SlNPTl9RVUVSWShqc29uYiAneyJhIjogMTIzfScsICckJyB8fCAnLicgfHwgJ2EnKTsKIFNFTEVD VCBKU09OX1FVRVJZKGpzb25iICd7ImEiOiAxMjN9JywgJyQnIHx8ICcuJyB8fCAnYScgV0lUSCBX UkFQUEVSKTsKIC0tIFNob3VsZCBmYWlsIChpbnZhbGlkIHBhdGgpCiBTRUxFQ1QgSlNPTl9RVUVS WShqc29uYiAneyJhIjogMTIzfScsICdlcnJvcicgfHwgJyAnIHx8ICdlcnJvcicpOworCistLSBO b24tanNvbmIgaW5wdXRzIGF1dG9tYXRpY2FsbHkgY29lcmNlZCB0byBqc29uYgorU0VMRUNUIEpT T05fRVhJU1RTKGpzb24gJ3siYSI6IDEyM30nLCAnJCcgfHwgJy4nIHx8ICdhJyk7CitTRUxFQ1Qg SlNPTl9RVUVSWShOVUxMIEZPUk1BVCBKU09OLCAnJCcpOworCistLSBUZXN0IG5vbi1jb25zdCBq c29ucGF0aAorQ1JFQVRFIFRFTVAgVEFCTEUganNvbnBhdGhzIChwYXRoKSBBUyBTRUxFQ1QgJyQn OworU0VMRUNUIGpzb25fdmFsdWUoJyJhYWEiJywgcGF0aCBSRVRVUk5JTkcganNvbikgRlJPTSBq c29ucGF0aHM7CmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBi L3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDYxNmUzMTVlYzQuLjdiMDM5 NTUxMGQgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBi L3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0xMjgwLDcgKzEyODAsNiBAQCBK c29uQXJyYXlRdWVyeUNvbnN0cnVjdG9yCiBKc29uQmFzZU9iamVjdEluZm8KIEpzb25CZWhhdmlv cgogSnNvbkJlaGF2aW9yVHlwZQotSnNvbkNvZXJjaW9uCiBKc29uQ29uc3RydWN0b3JFeHByCiBK c29uQ29uc3RydWN0b3JFeHByU3RhdGUKIEpzb25Db25zdHJ1Y3RvclR5cGUKQEAgLTEyOTMsNyAr MTI5Miw2IEBAIEpzb25Gb3JtYXQKIEpzb25Gb3JtYXRUeXBlCiBKc29uSGFzaEVudHJ5CiBKc29u SXNQcmVkaWNhdGUKLUpzb25JdGVtQ29lcmNpb24KIEpzb25JdGVtVHlwZQogSnNvbkl0ZXJhdGVT dHJpbmdWYWx1ZXNBY3Rpb24KIEpzb25LZXlWYWx1ZQotLSAKMi40My4wCgo= --00000000000030f4180614012e4f Content-Type: application/octet-stream; name="v43-0003-JSON_TABLE.patch" Content-Disposition: attachment; filename="v43-0003-JSON_TABLE.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lty8z54z2 RnJvbSBkMzA3MzFhMTE1MmUxZGZjNjQ4NmZmMDdkZGE0Y2FlMzRhOTUxYzgyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFRodSwgMTggSmFuIDIwMjQgMTg6MDA6MDYgKzA5MDAKU3ViamVjdDogW1BBVENIIHY0 MyAzLzNdIEpTT05fVEFCTEUKTUlNRS1WZXJzaW9uOiAxLjAKQ29udGVudC1UeXBlOiB0ZXh0L3Bs YWluOyBjaGFyc2V0PVVURi04CkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKClRoaXMg ZmVhdHVyZSBhbGxvd3MganNvbmIgZGF0YSB0byBiZSB0cmVhdGVkIGFzIGEgdGFibGUgYW5kIHRo dXMKdXNlZCBpbiBhIEZST00gY2xhdXNlIGxpa2Ugb3RoZXIgdGFidWxhciBkYXRhLiBEYXRhIGNh biBiZSBzZWxlY3RlZApmcm9tIHRoZSBqc29uYiB1c2luZyBqc29ucGF0aCBleHByZXNzaW9ucywg YW5kIGhvaXN0ZWQgb3V0IG9mIG5lc3RlZApzdHJ1Y3R1cmVzIGluIHRoZSBqc29uYiB0byBmb3Jt IG11bHRpcGxlIHJvd3MsIG1vcmUgb3IgbGVzcyBsaWtlIGFuCm91dGVyIGpvaW4uCgpUaGlzIGFs c28gYWRkcyB0aGUgUExBTiBjbGF1c2VzIGZvciBKU09OX1RBQkxFLCB3aGljaCBhbGxvdyB0aGUg dXNlcgp0byBzcGVjaWZ5IGhvdyBkYXRhIGZyb20gbmVzdGVkIHBhdGhzIGFyZSBqb2luZWQsIGFs bG93aW5nCmNvbnNpZGVyYWJsZSBmcmVlZG9tIGluIHNoYXBpbmcgdGhlIHRhYnVsYXIgb3V0cHV0 IG9mIEpTT05fVEFCTEUuClBMQU4gREVGQVVMVCBhbGxvd3MgdGhlIHVzZXIgdG8gc3BlY2lmeSB0 aGUgZ2xvYmFsIHN0cmF0ZWdpZXMgd2hlbgpkZWFsaW5nIHdpdGggc2libGluZyBvciBjaGlsZCBu ZXN0ZWQgcGF0aHMuIFRoZSBpcyBvZnRlbiBzdWZmaWNpZW50CnRvIGFjaGlldmUgdGhlIG5lY2Vz c2FyeSBnb2FsLCBhbmQgaXMgY29uc2lkZXJhYmx5IHNpbXBsZXIgdGhhbiB0aGUKZnVsbCBQTEFO IGNsYXVzZSwgd2hpY2ggYWxsb3dzIHRoZSB1c2VyIHRvIHNwZWNpZnkgdGhlIHN0cmF0ZWd5IHRv IGJlCnVzZWQgZm9yIGVhY2ggbmFtZWQgbmVzdGVkIHBhdGguCgpBdXRob3I6IE5pa2l0YSBHbHVr aG92IDxuLmdsdWhvdkBwb3N0Z3Jlc3Byby5ydT4KQXV0aG9yOiBUZW9kb3IgU2lnYWV2IDx0ZW9k b3JAc2lnYWV2LnJ1PgpBdXRob3I6IE9sZWcgQmFydHVub3YgPG9iYXJ0dW5vdkBnbWFpbC5jb20+ CkF1dGhvcjogQWxleGFuZGVyIEtvcm90a292IDxhZWtvcm90a292QGdtYWlsLmNvbT4KQXV0aG9y OiBBbmRyZXcgRHVuc3RhbiA8YW5kcmV3QGR1bnNsYW5lLm5ldD4KQXV0aG9yOiBBbWl0IExhbmdv dGUgPGFtaXRsYW5nb3RlMDlAZ21haWwuY29tPgpBdXRob3I6IEppYW4gSGUgPGppYW4udW5pdmVy c2FsaXR5QGdtYWlsLmNvbT4KClJldmlld2VycyBoYXZlIGluY2x1ZGVkIChpbiBubyBwYXJ0aWN1 bGFyIG9yZGVyKSBBbmRyZXMgRnJldW5kLCBBbGV4YW5kZXIKS29yb3Rrb3YsIFBhdmVsIFN0ZWh1 bGUsIEFuZHJldyBBbHN1cCwgRXJpayBSaWprZXJzLCBaaWhvbmcgWXUsCkhpbWFuc2h1IFVwYWRo eWF5YSwgRGFuaWVsIEd1c3RhZnNzb24sIEp1c3RpbiBQcnl6YnksIMOBbHZhcm8gSGVycmVyYSwK amlhbiBoZQoKRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9jZDBiYjkzNS0wMTU4LTc4 YTctMDhiNS05MDQ4ODZkZWFjNGJAcG9zdGdyZXNwcm8ucnUKRGlzY3Vzc2lvbjogaHR0cHM6Ly9w b3N0Z3IuZXMvbS8yMDIyMDYxNjIzMzEzMC5ycGFyaXZhZmlwdDZkb2ozQGFsYXAzLmFuYXJhemVs LmRlCkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vYWJkOWI4M2ItYWE2Ni1mMjMwLTNk NmQtNzM0ODE3ZjA5OTVkJTQwcG9zdGdyZXNxbC5vcmcKRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0 Z3IuZXMvbS9DQStIaXdxRTRYVGRmYjFuVz1Pam95X3RRU1JoWXQtcV9rYjZpNWQ0eGNLeXJMQzFO YmdAbWFpbC5nbWFpbC5jb20KLS0tCiBkb2Mvc3JjL3NnbWwvZnVuYy5zZ21sICAgICAgICAgICAg ICAgICAgICAgICAgfCAgNTEwICsrKysrKysKIHNyYy9iYWNrZW5kL2NhdGFsb2cvc3FsX2ZlYXR1 cmVzLnR4dCAgICAgICAgICB8ICAgIDYgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4u YyAgICAgICAgICAgICAgICB8ICAgMjEgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBy SW50ZXJwLmMgICAgICAgICB8ICAgIDYgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVRhYmxl RnVuY3NjYW4uYyAgICAgIHwgICAyNyArLQogc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNzLmMg ICAgICAgICAgICAgICAgIHwgIDEwOCArKwogc3JjL2JhY2tlbmQvbm9kZXMvbm9kZUZ1bmNzLmMg ICAgICAgICAgICAgICAgIHwgICAzOCArCiBzcmMvYmFja2VuZC9wYXJzZXIvTWFrZWZpbGUgICAg ICAgICAgICAgICAgICAgfCAgICAxICsKIHNyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkgICAgICAg ICAgICAgICAgICAgICB8ICAyOTkgKysrLQogc3JjL2JhY2tlbmQvcGFyc2VyL21lc29uLmJ1aWxk ICAgICAgICAgICAgICAgIHwgICAgMSArCiBzcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfY2xhdXNl LmMgICAgICAgICAgICAgfCAgIDE0ICstCiBzcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZXhwci5j ICAgICAgICAgICAgICAgfCAgIDUzICstCiBzcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfanNvbnRh YmxlLmMgICAgICAgICAgfCAgNzE3ICsrKysrKysrKwogc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNl X3JlbGF0aW9uLmMgICAgICAgICAgIHwgICAgNiArLQogc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNl X3RhcmdldC5jICAgICAgICAgICAgIHwgICAgMyArCiBzcmMvYmFja2VuZC91dGlscy9hZHQvanNv bnBhdGhfZXhlYy5jICAgICAgICAgfCAgNTQ3ICsrKysrKysKIHNyYy9iYWNrZW5kL3V0aWxzL2Fk dC9ydWxldXRpbHMuYyAgICAgICAgICAgICB8ICAyNzYgKysrLQogc3JjL2luY2x1ZGUvbm9kZXMv ZXhlY25vZGVzLmggICAgICAgICAgICAgICAgIHwgICAgMiArCiBzcmMvaW5jbHVkZS9ub2Rlcy9t YWtlZnVuY3MuaCAgICAgICAgICAgICAgICAgfCAgICA5ICsKIHNyYy9pbmNsdWRlL25vZGVzL3Bh cnNlbm9kZXMuaCAgICAgICAgICAgICAgICB8ICAxMDkgKysKIHNyYy9pbmNsdWRlL25vZGVzL3By aW1ub2Rlcy5oICAgICAgICAgICAgICAgICB8ICAgNjAgKy0KIHNyYy9pbmNsdWRlL3BhcnNlci9r d2xpc3QuaCAgICAgICAgICAgICAgICAgICB8ICAgIDQgKwogc3JjL2luY2x1ZGUvcGFyc2VyL3Bh cnNlX2NsYXVzZS5oICAgICAgICAgICAgIHwgICAgMyArCiBzcmMvaW5jbHVkZS91dGlscy9qc29u cGF0aC5oICAgICAgICAgICAgICAgICAgfCAgICAzICsKIHNyYy9pbnRlcmZhY2VzL2VjcGcvdGVz dC9lY3BnX3NjaGVkdWxlICAgICAgICB8ICAgIDEgKwogLi4uL3Rlc3QvZXhwZWN0ZWQvc3FsLXNx bGpzb25fanNvbnRhYmxlLmMgICAgIHwgIDEzMiArKwogLi4uL2V4cGVjdGVkL3NxbC1zcWxqc29u X2pzb250YWJsZS5zdGRlcnIgICAgIHwgICAyMCArCiAuLi4vZXhwZWN0ZWQvc3FsLXNxbGpzb25f anNvbnRhYmxlLnN0ZG91dCAgICAgfCAgICAwCiBzcmMvaW50ZXJmYWNlcy9lY3BnL3Rlc3Qvc3Fs L01ha2VmaWxlICAgICAgICAgfCAgICAxICsKIHNyYy9pbnRlcmZhY2VzL2VjcGcvdGVzdC9zcWwv bWVzb24uYnVpbGQgICAgICB8ICAgIDEgKwogLi4uL2VjcGcvdGVzdC9zcWwvc3FsanNvbl9qc29u dGFibGUucGdjICAgICAgIHwgICAzMiArCiAuLi4vcmVncmVzcy9leHBlY3RlZC9zcWxqc29uX2pz b250YWJsZS5vdXQgICAgfCAxMzUzICsrKysrKysrKysrKysrKysrCiBzcmMvdGVzdC9yZWdyZXNz L3BhcmFsbGVsX3NjaGVkdWxlICAgICAgICAgICAgfCAgICAyICstCiBzcmMvdGVzdC9yZWdyZXNz L3NxbC9zcWxqc29uX2pzb250YWJsZS5zcWwgICAgfCAgNzM2ICsrKysrKysrKwogc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAgICAgIHwgICAxNiArCiAzNSBmaWxlcyBj aGFuZ2VkLCA1MDY3IGluc2VydGlvbnMoKyksIDUwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUg MTAwNjQ0IHNyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9qc29udGFibGUuYwogY3JlYXRlIG1vZGUg MTAwNjQ0IHNyYy9pbnRlcmZhY2VzL2VjcGcvdGVzdC9leHBlY3RlZC9zcWwtc3FsanNvbl9qc29u dGFibGUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbnRlcmZhY2VzL2VjcGcvdGVzdC9leHBl Y3RlZC9zcWwtc3FsanNvbl9qc29udGFibGUuc3RkZXJyCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3Jj L2ludGVyZmFjZXMvZWNwZy90ZXN0L2V4cGVjdGVkL3NxbC1zcWxqc29uX2pzb250YWJsZS5zdGRv dXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW50ZXJmYWNlcy9lY3BnL3Rlc3Qvc3FsL3NxbGpz b25fanNvbnRhYmxlLnBnYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvc3FsanNvbl9qc29udGFibGUub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3Qv cmVncmVzcy9zcWwvc3FsanNvbl9qc29udGFibGUuc3FsCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9z Z21sL2Z1bmMuc2dtbCBiL2RvYy9zcmMvc2dtbC9mdW5jLnNnbWwKaW5kZXggNzU0YTUyZmI0OC4u NzU2OTkyOGIxNiAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbAorKysgYi9kb2Mv c3JjL3NnbWwvZnVuYy5zZ21sCkBAIC0xODgwMCw2ICsxODgwMCw1MTYgQEAgREVUQUlMOiAgTWlz c2luZyAiXSIgYWZ0ZXIgYXJyYXkgZGltZW5zaW9ucy4KICAgIDwvdGdyb3VwPgogICA8L3RhYmxl PgogICA8L3NlY3QyPgorCisgPHNlY3QyIGlkPSJmdW5jdGlvbnMtc3FsanNvbi10YWJsZSI+Cisg IDx0aXRsZT5KU09OX1RBQkxFPC90aXRsZT4KKyAgPGluZGV4dGVybT4KKyAgIDxwcmltYXJ5Pmpz b25fdGFibGU8L3ByaW1hcnk+CisgIDwvaW5kZXh0ZXJtPgorCisgIDxwYXJhPgorICAgPGZ1bmN0 aW9uPmpzb25fdGFibGU8L2Z1bmN0aW9uPiBpcyBhbiBTUUwvSlNPTiBmdW5jdGlvbiB3aGljaAor ICAgcXVlcmllcyA8YWNyb255bT5KU09OPC9hY3JvbnltPiBkYXRhCisgICBhbmQgcHJlc2VudHMg dGhlIHJlc3VsdHMgYXMgYSByZWxhdGlvbmFsIHZpZXcsIHdoaWNoIGNhbiBiZSBhY2Nlc3NlZCBh cyBhCisgICByZWd1bGFyIFNRTCB0YWJsZS4gWW91IGNhbiBvbmx5IHVzZSA8ZnVuY3Rpb24+anNv bl90YWJsZTwvZnVuY3Rpb24+IGluc2lkZSB0aGUKKyAgIDxsaXRlcmFsPkZST008L2xpdGVyYWw+ IGNsYXVzZSBvZiBhIDxsaXRlcmFsPlNFTEVDVDwvbGl0ZXJhbD4gc3RhdGVtZW50LgorICA8L3Bh cmE+CisKKyAgPHBhcmE+CisgICBUYWtpbmcgSlNPTiBkYXRhIGFzIGlucHV0LCA8ZnVuY3Rpb24+ anNvbl90YWJsZTwvZnVuY3Rpb24+IHVzZXMKKyAgIGEgcGF0aCBleHByZXNzaW9uIHRvIGV4dHJh Y3QgYSBwYXJ0IG9mIHRoZSBwcm92aWRlZCBkYXRhIHRoYXQKKyAgIHdpbGwgYmUgdXNlZCBhcyBh IDxmaXJzdHRlcm0+cm93IHBhdHRlcm48L2ZpcnN0dGVybT4gZm9yIHRoZQorICAgY29uc3RydWN0 ZWQgdmlldy4gRWFjaCBTUUwvSlNPTiBpdGVtIGF0IHRoZSB0b3AgbGV2ZWwgb2YgdGhlIHJvdyBw YXR0ZXJuIHNlcnZlcworICAgYXMgdGhlIHNvdXJjZSBmb3IgYSBzZXBhcmF0ZSByb3cgaW4gdGhl IGNvbnN0cnVjdGVkIHJlbGF0aW9uYWwgdmlldy4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAg VG8gc3BsaXQgdGhlIHJvdyBwYXR0ZXJuIGludG8gY29sdW1ucywgPGZ1bmN0aW9uPmpzb25fdGFi bGU8L2Z1bmN0aW9uPgorICAgcHJvdmlkZXMgdGhlIDxsaXRlcmFsPkNPTFVNTlM8L2xpdGVyYWw+ IGNsYXVzZSB0aGF0IGRlZmluZXMgdGhlCisgICBzY2hlbWEgb2YgdGhlIGNyZWF0ZWQgdmlldy4g Rm9yIGVhY2ggY29sdW1uIHRvIGJlIGNvbnN0cnVjdGVkLAorICAgdGhpcyBjbGF1c2UgcHJvdmlk ZXMgYSBzZXBhcmF0ZSBwYXRoIGV4cHJlc3Npb24gdGhhdCBldmFsdWF0ZXMKKyAgIHRoZSByb3cg cGF0dGVybiwgZXh0cmFjdHMgYSBKU09OIGl0ZW0sIGFuZCByZXR1cm5zIGl0IGFzIGEKKyAgIHNl cGFyYXRlIFNRTCB2YWx1ZSBmb3IgdGhlIHNwZWNpZmllZCBjb2x1bW4uIElmIHRoZSByZXF1aXJl ZCB2YWx1ZQorICAgaXMgc3RvcmVkIGluIGEgbmVzdGVkIGxldmVsIG9mIHRoZSByb3cgcGF0dGVy biwgaXQgY2FuIGJlIGV4dHJhY3RlZAorICAgdXNpbmcgdGhlIDxsaXRlcmFsPk5FU1RFRCBQQVRI PC9saXRlcmFsPiBzdWJjbGF1c2UuIEpvaW5pbmcgdGhlCisgICBjb2x1bW5zIHJldHVybmVkIGJ5 IDxsaXRlcmFsPk5FU1RFRCBQQVRIPC9saXRlcmFsPiBjYW4gYWRkIG11bHRpcGxlCisgICBuZXcg cm93cyB0byB0aGUgY29uc3RydWN0ZWQgdmlldy4gU3VjaCByb3dzIGFyZSBjYWxsZWQKKyAgIDxm aXJzdHRlcm0+Y2hpbGQgcm93czwvZmlyc3R0ZXJtPiwgYXMgb3Bwb3NlZCB0byB0aGUgPGZpcnN0 dGVybT5wYXJlbnQgcm93PC9maXJzdHRlcm0+CisgICB0aGF0IGdlbmVyYXRlcyB0aGVtLgorICA8 L3BhcmE+CisKKyAgPHBhcmE+CisgICBUaGUgcm93cyBwcm9kdWNlZCBieSA8ZnVuY3Rpb24+SlNP Tl9UQUJMRTwvZnVuY3Rpb24+IGFyZSBsYXRlcmFsbHkKKyAgIGpvaW5lZCB0byB0aGUgcm93IHRo YXQgZ2VuZXJhdGVkIHRoZW0sIHNvIHlvdSBkbyBub3QgaGF2ZSB0byBleHBsaWNpdGx5IGpvaW4K KyAgIHRoZSBjb25zdHJ1Y3RlZCB2aWV3IHdpdGggdGhlIG9yaWdpbmFsIHRhYmxlIGhvbGRpbmcg PGFjcm9ueW0+SlNPTjwvYWNyb255bT4KKyAgIGRhdGEuIE9wdGlvbmFsbHksIHlvdSBjYW4gc3Bl Y2lmeSBob3cgdG8gam9pbiB0aGUgY29sdW1ucyByZXR1cm5lZAorICAgYnkgPGxpdGVyYWw+TkVT VEVEIFBBVEg8L2xpdGVyYWw+IHVzaW5nIHRoZSA8bGl0ZXJhbD5QTEFOPC9saXRlcmFsPiBjbGF1 c2UuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIEVhY2ggPGxpdGVyYWw+TkVTVEVEIFBBVEg8 L2xpdGVyYWw+IGNsYXVzZSBjYW4gZ2VuZXJhdGUgb25lIG9yIG1vcmUKKyAgIGNvbHVtbnMuIENv bHVtbnMgcHJvZHVjZWQgYnkgPGxpdGVyYWw+TkVTVEVEIFBBVEg8L2xpdGVyYWw+cyBhdCB0aGUK KyAgIHNhbWUgbGV2ZWwgYXJlIGNvbnNpZGVyZWQgdG8gYmUgPGZpcnN0dGVybT5zaWJsaW5nczwv Zmlyc3R0ZXJtPiwKKyAgIHdoaWxlIGEgY29sdW1uIHByb2R1Y2VkIGJ5IGEgPGxpdGVyYWw+TkVT VEVEIFBBVEg8L2xpdGVyYWw+IGlzCisgICBjb25zaWRlcmVkIHRvIGJlIGEgY2hpbGQgb2YgdGhl IGNvbHVtbiBwcm9kdWNlZCBieSBhCisgICA8bGl0ZXJhbD5ORVNURUQgUEFUSDwvbGl0ZXJhbD4g b3Igcm93IGV4cHJlc3Npb24gYXQgYSBoaWdoZXIgbGV2ZWwuCisgICBTaWJsaW5nIGNvbHVtbnMg YXJlIGFsd2F5cyBqb2luZWQgZmlyc3QuIE9uY2UgdGhleSBhcmUgcHJvY2Vzc2VkLAorICAgdGhl IHJlc3VsdGluZyByb3dzIGFyZSBqb2luZWQgdG8gdGhlIHBhcmVudCByb3cuCisgIDwvcGFyYT4K KworICA8cGFyYT4KKyAgIFRoZSBzeW50YXggaXM6CisgIDwvcGFyYT4KKworPHN5bm9wc2lzPgor SlNPTl9UQUJMRSAoCisgIDxyZXBsYWNlYWJsZT5jb250ZXh0X2l0ZW08L3JlcGxhY2VhYmxlPiwg PHJlcGxhY2VhYmxlPnBhdGhfZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+IDxvcHRpb25hbD4gQVMg PHJlcGxhY2VhYmxlPmpzb25fcGF0aF9uYW1lPC9yZXBsYWNlYWJsZT4gPC9vcHRpb25hbD4gPG9w dGlvbmFsPiBQQVNTSU5HIHsgPHJlcGxhY2VhYmxlPnZhbHVlPC9yZXBsYWNlYWJsZT4gQVMgPHJl cGxhY2VhYmxlPnZhcm5hbWU8L3JlcGxhY2VhYmxlPiB9IDxvcHRpb25hbD4sIC4uLjwvb3B0aW9u YWw+IDwvb3B0aW9uYWw+CisgIENPTFVNTlMgKCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRl ciI+anNvbl90YWJsZV9jb2x1bW48L3JlcGxhY2VhYmxlPiA8b3B0aW9uYWw+LCAuLi48L29wdGlv bmFsPiApCisgIDxvcHRpb25hbD4geyA8bGl0ZXJhbD5FUlJPUjwvbGl0ZXJhbD4gfCA8bGl0ZXJh bD5FTVBUWTwvbGl0ZXJhbD4gfSA8bGl0ZXJhbD5PTiBFUlJPUjwvbGl0ZXJhbD4gPC9vcHRpb25h bD4KKyAgPG9wdGlvbmFsPgorICAgIFBMQU4gKCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRl ciI+anNvbl90YWJsZV9wbGFuPC9yZXBsYWNlYWJsZT4gKSB8CisgICAgUExBTiBERUZBVUxUICgg eyBJTk5FUiB8IE9VVEVSIH0gPG9wdGlvbmFsPiAsIHsgQ1JPU1MgfCBVTklPTiB9IDwvb3B0aW9u YWw+CisgICAgICAgICAgICAgICAgIHwgeyBDUk9TUyB8IFVOSU9OIH0gPG9wdGlvbmFsPiAsIHsg SU5ORVIgfCBPVVRFUiB9IDwvb3B0aW9uYWw+ICkKKyAgPC9vcHRpb25hbD4KKykKKworPHBocmFz ZT4KK3doZXJlIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5qc29uX3RhYmxlX2NvbHVt bjwvcmVwbGFjZWFibGU+IGlzOgorPC9waHJhc2U+CisgICAgPHJlcGxhY2VhYmxlPm5hbWU8L3Jl cGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+dHlwZTwvcmVwbGFjZWFibGU+IDxvcHRpb25hbD4gUEFU SCA8cmVwbGFjZWFibGU+anNvbl9wYXRoX3NwZWNpZmljYXRpb248L3JlcGxhY2VhYmxlPiA8L29w dGlvbmFsPgorICAgICAgICA8b3B0aW9uYWw+IHsgV0lUSE9VVCB8IFdJVEggeyBDT05ESVRJT05B TCB8IDxvcHRpb25hbD5VTkNPTkRJVElPTkFMPC9vcHRpb25hbD4gfSB9IDxvcHRpb25hbD4gQVJS QVkgPC9vcHRpb25hbD4gV1JBUFBFUiA8L29wdGlvbmFsPgorICAgICAgICA8b3B0aW9uYWw+IHsg S0VFUCB8IE9NSVQgfSBRVU9URVMgPG9wdGlvbmFsPiBPTiBTQ0FMQVIgU1RSSU5HIDwvb3B0aW9u YWw+IDwvb3B0aW9uYWw+CisgICAgICAgIDxvcHRpb25hbD4geyBFUlJPUiB8IE5VTEwgfCBERUZB VUxUIDxyZXBsYWNlYWJsZT5leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4gfSBPTiBFTVBUWSA8L29w dGlvbmFsPgorICAgICAgICA8b3B0aW9uYWw+IHsgRVJST1IgfCBOVUxMIHwgREVGQVVMVCA8cmVw bGFjZWFibGU+ZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+IH0gT04gRVJST1IgPC9vcHRpb25hbD4K KyAgfCA8cmVwbGFjZWFibGU+bmFtZTwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT50eXBlPC9y ZXBsYWNlYWJsZT4gRk9STUFUIEpTT04gPG9wdGlvbmFsPkVOQ09ESU5HIDxsaXRlcmFsPlVURjg8 L2xpdGVyYWw+PC9vcHRpb25hbD4KKyAgICAgICAgPG9wdGlvbmFsPiBQQVRIIDxyZXBsYWNlYWJs ZT5qc29uX3BhdGhfc3BlY2lmaWNhdGlvbjwvcmVwbGFjZWFibGU+IDwvb3B0aW9uYWw+CisgICAg ICAgIDxvcHRpb25hbD4geyBXSVRIT1VUIHwgV0lUSCB7IENPTkRJVElPTkFMIHwgPG9wdGlvbmFs PlVOQ09ORElUSU9OQUw8L29wdGlvbmFsPiB9IH0gPG9wdGlvbmFsPiBBUlJBWSA8L29wdGlvbmFs PiBXUkFQUEVSIDwvb3B0aW9uYWw+CisgICAgICAgIDxvcHRpb25hbD4geyBLRUVQIHwgT01JVCB9 IFFVT1RFUyA8b3B0aW9uYWw+IE9OIFNDQUxBUiBTVFJJTkcgPC9vcHRpb25hbD4gPC9vcHRpb25h bD4KKyAgICAgICAgPG9wdGlvbmFsPiB7IEVSUk9SIHwgTlVMTCB8IEVNUFRZIHsgQVJSQVkgfCBP QkpFQ1QgfSB8IERFRkFVTFQgPHJlcGxhY2VhYmxlPmV4cHJlc3Npb248L3JlcGxhY2VhYmxlPiB9 IE9OIEVNUFRZIDwvb3B0aW9uYWw+CisgICAgICAgIDxvcHRpb25hbD4geyBFUlJPUiB8IE5VTEwg fCBFTVBUWSB7IEFSUkFZIHwgT0JKRUNUIH0gfCBERUZBVUxUIDxyZXBsYWNlYWJsZT5leHByZXNz aW9uPC9yZXBsYWNlYWJsZT4gfSBPTiBFUlJPUiA8L29wdGlvbmFsPgorICB8IDxyZXBsYWNlYWJs ZT5uYW1lPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPnR5cGU8L3JlcGxhY2VhYmxlPiBFWElT VFMgPG9wdGlvbmFsPiBQQVRIIDxyZXBsYWNlYWJsZT5qc29uX3BhdGhfc3BlY2lmaWNhdGlvbjwv cmVwbGFjZWFibGU+IDwvb3B0aW9uYWw+CisgICAgICAgIDxvcHRpb25hbD4geyBFUlJPUiB8IFRS VUUgfCBGQUxTRSB8IFVOS05PV04gfSBPTiBFUlJPUiA8L29wdGlvbmFsPgorICB8IE5FU1RFRCBQ QVRIIDxyZXBsYWNlYWJsZT5qc29uX3BhdGhfc3BlY2lmaWNhdGlvbjwvcmVwbGFjZWFibGU+IDxv cHRpb25hbD4gQVMgPHJlcGxhY2VhYmxlPnBhdGhfbmFtZTwvcmVwbGFjZWFibGU+IDwvb3B0aW9u YWw+CisgICAgICAgIENPTFVNTlMgKCA8cmVwbGFjZWFibGU+anNvbl90YWJsZV9jb2x1bW48L3Jl cGxhY2VhYmxlPiA8b3B0aW9uYWw+LCAuLi48L29wdGlvbmFsPiApCisgIHwgPHJlcGxhY2VhYmxl Pm5hbWU8L3JlcGxhY2VhYmxlPiBGT1IgT1JESU5BTElUWQorPHBocmFzZT4KKzxyZXBsYWNlYWJs ZT5qc29uX3RhYmxlX3BsYW48L3JlcGxhY2VhYmxlPiBpczoKKzwvcGhyYXNlPgorICAgIDxyZXBs YWNlYWJsZT5qc29uX3BhdGhfbmFtZTwvcmVwbGFjZWFibGU+IDxvcHRpb25hbD4geyBPVVRFUiB8 IElOTkVSIH0gPHJlcGxhY2VhYmxlPmpzb25fdGFibGVfcGxhbl9wcmltYXJ5PC9yZXBsYWNlYWJs ZT4gPC9vcHRpb25hbD4KKyAgfCA8cmVwbGFjZWFibGU+anNvbl90YWJsZV9wbGFuX3ByaW1hcnk8 L3JlcGxhY2VhYmxlPiB7IFVOSU9OIDxyZXBsYWNlYWJsZT5qc29uX3RhYmxlX3BsYW5fcHJpbWFy eTwvcmVwbGFjZWFibGU+IH0gPG9wdGlvbmFsPi4uLjwvb3B0aW9uYWw+CisgIHwgPHJlcGxhY2Vh YmxlPmpzb25fdGFibGVfcGxhbl9wcmltYXJ5PC9yZXBsYWNlYWJsZT4geyBDUk9TUyA8cmVwbGFj ZWFibGU+anNvbl90YWJsZV9wbGFuX3ByaW1hcnk8L3JlcGxhY2VhYmxlPiB9IDxvcHRpb25hbD4u Li48L29wdGlvbmFsPgorPHBocmFzZT4KKzxyZXBsYWNlYWJsZT5qc29uX3RhYmxlX3BsYW5fcHJp bWFyeTwvcmVwbGFjZWFibGU+IGlzOgorPC9waHJhc2U+CisgICAgPHJlcGxhY2VhYmxlPmpzb25f cGF0aF9uYW1lPC9yZXBsYWNlYWJsZT4gfCAoIDxyZXBsYWNlYWJsZT5qc29uX3RhYmxlX3BsYW48 L3JlcGxhY2VhYmxlPiApCis8L3N5bm9wc2lzPgorCisgIDxwYXJhPgorICAgRWFjaCBzeW50YXgg ZWxlbWVudCBpcyBkZXNjcmliZWQgYmVsb3cgaW4gbW9yZSBkZXRhaWwuCisgIDwvcGFyYT4KKwor ICA8dmFyaWFibGVsaXN0PgorICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAgICAgPGxp dGVyYWw+PHJlcGxhY2VhYmxlPmNvbnRleHRfaXRlbTwvcmVwbGFjZWFibGU+LCA8cmVwbGFjZWFi bGU+cGF0aF9leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4gPG9wdGlvbmFsPiA8bGl0ZXJhbD5BUzwv bGl0ZXJhbD4gPHJlcGxhY2VhYmxlPmpzb25fcGF0aF9uYW1lPC9yZXBsYWNlYWJsZT4gPC9vcHRp b25hbD4gPG9wdGlvbmFsPiA8bGl0ZXJhbD5QQVNTSU5HPC9saXRlcmFsPiB7IDxyZXBsYWNlYWJs ZT52YWx1ZTwvcmVwbGFjZWFibGU+IDxsaXRlcmFsPkFTPC9saXRlcmFsPiA8cmVwbGFjZWFibGU+ dmFybmFtZTwvcmVwbGFjZWFibGU+IH0gPG9wdGlvbmFsPiwgLi4uPC9vcHRpb25hbD48L29wdGlv bmFsPjwvbGl0ZXJhbD4KKyAgICA8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAgIDxwYXJhPgor ICAgICBUaGUgaW5wdXQgZGF0YSB0byBxdWVyeSwgdGhlIEpTT04gcGF0aCBleHByZXNzaW9uIGRl ZmluaW5nIHRoZSBxdWVyeSwKKyAgICAgYW5kIGFuIG9wdGlvbmFsIDxsaXRlcmFsPlBBU1NJTkc8 L2xpdGVyYWw+IGNsYXVzZSwgd2hpY2ggY2FuIHByb3ZpZGUgZGF0YQorICAgICB2YWx1ZXMgdG8g dGhlIDxyZXBsYWNlYWJsZT5wYXRoX2V4cHJlc3Npb248L3JlcGxhY2VhYmxlPi4KKyAgICAgVGhl IHJlc3VsdCBvZiB0aGUgaW5wdXQgZGF0YQorICAgICBldmFsdWF0aW9uIGlzIGNhbGxlZCB0aGUg PGZpcnN0dGVybT5yb3cgcGF0dGVybjwvZmlyc3R0ZXJtPi4gVGhlIHJvdworICAgICBwYXR0ZXJu IGlzIHVzZWQgYXMgdGhlIHNvdXJjZSBmb3Igcm93IHZhbHVlcyBpbiB0aGUgY29uc3RydWN0ZWQg dmlldy4KKyAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5Pgor CisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgorICAgICA8bGl0ZXJhbD5DT0xVTU5TPC9s aXRlcmFsPiggPHJlcGxhY2VhYmxlPmpzb25fdGFibGVfY29sdW1uPC9yZXBsYWNlYWJsZT4gPG9w dGlvbmFsPiwgLi4uPC9vcHRpb25hbD4gKQorICAgIDwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisK KyAgICA8cGFyYT4KKyAgICAgVGhlIDxsaXRlcmFsPkNPTFVNTlM8L2xpdGVyYWw+IGNsYXVzZSBk ZWZpbmluZyB0aGUgc2NoZW1hIG9mIHRoZQorICAgICBjb25zdHJ1Y3RlZCB2aWV3LiBJbiB0aGlz IGNsYXVzZSwgeW91IG11c3Qgc3BlY2lmeSBhbGwgdGhlIGNvbHVtbnMKKyAgICAgdG8gYmUgZmls bGVkIHdpdGggU1FML0pTT04gaXRlbXMuCisgICAgIFRoZSA8cmVwbGFjZWFibGU+anNvbl90YWJs ZV9jb2x1bW48L3JlcGxhY2VhYmxlPgorICAgICBleHByZXNzaW9uIGhhcyB0aGUgZm9sbG93aW5n IHN5bnRheCB2YXJpYW50czoKKyAgICA8L3BhcmE+CisKKyAgPHZhcmlhYmxlbGlzdD4KKyAgIDx2 YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+CisgICAgIDxsaXRlcmFsPjxyZXBsYWNlYWJsZT5uYW1l PC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPnR5cGU8L3JlcGxhY2VhYmxlPgorICAgICAgICAg IDxvcHRpb25hbD4gPGxpdGVyYWw+UEFUSDwvbGl0ZXJhbD4gPHJlcGxhY2VhYmxlPmpzb25fcGF0 aF9zcGVjaWZpY2F0aW9uPC9yZXBsYWNlYWJsZT4gPC9vcHRpb25hbD48L2xpdGVyYWw+CisgICAg PC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKworICAgIDxwYXJhPgorICAgICBJbnNlcnRzIGEgc2lu Z2xlIFNRTC9KU09OIGl0ZW0gaW50byB0aGUgb3V0cHV0IHJvdy4KKyAgICA8L3BhcmE+CisgICAg PHBhcmE+CisgICAgIFRoZSBwcm92aWRlZCA8bGl0ZXJhbD5QQVRIPC9saXRlcmFsPiBleHByZXNz aW9uIGlzIGV2YWx1YXRlZCBhbmQKKyAgICAgdGhlIGNvbHVtbiBpcyBmaWxsZWQgd2l0aCB0aGUg cHJvZHVjZWQgU1FML0pTT04gaXRlbSwgb25lIGZvciBlYWNoIHJvdy4KKyAgICAgSWYgdGhlIDxs aXRlcmFsPlBBVEg8L2xpdGVyYWw+IGV4cHJlc3Npb24gaXMgb21pdHRlZCwKKyAgICAgPGZ1bmN0 aW9uPkpTT05fVEFCTEU8L2Z1bmN0aW9uPiB1c2VzIHRoZQorICAgICA8bGl0ZXJhbD4kLjxyZXBs YWNlYWJsZT5uYW1lPC9yZXBsYWNlYWJsZT48L2xpdGVyYWw+IHBhdGggZXhwcmVzc2lvbiwKKyAg ICAgd2hlcmUgPHJlcGxhY2VhYmxlPm5hbWU8L3JlcGxhY2VhYmxlPiBpcyB0aGUgcHJvdmlkZWQg Y29sdW1uIG5hbWUuCisgICAgIEluIHRoaXMgY2FzZSwgdGhlIGNvbHVtbiBuYW1lIG11c3QgY29y cmVzcG9uZCB0byBvbmUgb2YgdGhlCisgICAgIGtleXMgd2l0aGluIHRoZSBTUUwvSlNPTiBpdGVt IHByb2R1Y2VkIGJ5IHRoZSByb3cgcGF0dGVybi4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+Cisg ICAgIE9wdGlvbmFsbHksIHlvdSBjYW4gc3BlY2lmeSA8bGl0ZXJhbD5XUkFQUEVSPC9saXRlcmFs PiwKKyAgICAgPGxpdGVyYWw+UVVPVEVTPC9saXRlcmFsPiBjbGF1c2VzIHRvIGZvcm1hdCB0aGUg b3V0cHV0IGFuZAorICAgICA8bGl0ZXJhbD5PTiBFTVBUWTwvbGl0ZXJhbD4gYW5kIDxsaXRlcmFs Pk9OIEVSUk9SPC9saXRlcmFsPiB0byBoYW5kbGUKKyAgICAgdGhvc2UgbWlzc2luZyB2YWx1ZXMg YW5kIHN0cnVjdHVyYWwgZXJyb3JzLCByZXNwZWN0aXZlbHkuCisgICAgPC9wYXJhPgorICAgIDxu b3RlPgorICAgICA8cGFyYT4KKyAgICAgIFRoaXMgY2xhdXNlIGlzIGludGVybmFsbHkgdHVybmVk IGludG8gYW5kIGhhcyB0aGUgc2FtZSBzZW1hbnRpY3MgYXMKKyAgICAgIDxmdW5jdGlvbj5qc29u X3ZhbHVlPC9mdW5jdGlvbj4gYW5kIDxmdW5jdGlvbj5qc29uX3F1ZXJ5PC9mdW5jdGlvbj4uCisg ICAgICBUaGUgbGF0dGVyIGlmIHRoZSBzcGVjaWZpZWQgdHlwZSBpcyBub3QgYSBzY2FsYXIgdHlw ZSBvciBpZgorICAgICAgPGxpdGVyYWw+V1JBUFBFUjwvbGl0ZXJhbD4gb3IgPGxpdGVyYWw+UVVP VEVTPC9saXRlcmFsPiBjbGF1c2UgaXMKKyAgICAgIHByZXNlbnQuCisgICAgIDwvcGFyYT4KKyAg ICA8L25vdGU+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFy bGlzdGVudHJ5PgorICAgIDx0ZXJtPgorICAgICA8cmVwbGFjZWFibGU+bmFtZTwvcmVwbGFjZWFi bGU+IDxyZXBsYWNlYWJsZT50eXBlPC9yZXBsYWNlYWJsZT4gPGxpdGVyYWw+Rk9STUFUIEpTT048 L2xpdGVyYWw+IDxvcHRpb25hbD5FTkNPRElORyA8bGl0ZXJhbD5VVEY4PC9saXRlcmFsPjwvb3B0 aW9uYWw+CisgICAgICAgICAgPG9wdGlvbmFsPiA8bGl0ZXJhbD5QQVRIPC9saXRlcmFsPiA8cmVw bGFjZWFibGU+anNvbl9wYXRoX3NwZWNpZmljYXRpb248L3JlcGxhY2VhYmxlPiA8L29wdGlvbmFs PgorICAgIDwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisKKyAgICA8cGFyYT4KKyAgICAgSW5zZXJ0 cyBhIGNvbXBvc2l0ZSBTUUwvSlNPTiBpdGVtIGludG8gdGhlIG91dHB1dCByb3cuCisgICAgPC9w YXJhPgorICAgIDxwYXJhPgorICAgICBUaGUgcHJvdmlkZWQgPGxpdGVyYWw+UEFUSDwvbGl0ZXJh bD4gZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQgYW5kCisgICAgIHRoZSBjb2x1bW4gaXMgZmlsbGVk IHdpdGggdGhlIHByb2R1Y2VkIFNRTC9KU09OIGl0ZW0uICBJZiB0aGUKKyAgICAgPGxpdGVyYWw+ UEFUSDwvbGl0ZXJhbD4gZXhwcmVzc2lvbiBpcyBvbWl0dGVkLCBwYXRoIGV4cHJlc3Npb24KKyAg ICAgPGxpdGVyYWw+JC48cmVwbGFjZWFibGU+bmFtZTwvcmVwbGFjZWFibGU+PC9saXRlcmFsPiBp cyB1c2VkLAorICAgICB3aGVyZSA8cmVwbGFjZWFibGU+bmFtZTwvcmVwbGFjZWFibGU+IGlzIHRo ZSBwcm92aWRlZCBjb2x1bW4gbmFtZS4KKyAgICAgSW4gdGhpcyBjYXNlLCB0aGUgY29sdW1uIG5h bWUgbXVzdCBjb3JyZXNwb25kIHRvIG9uZSBvZiB0aGUKKyAgICAga2V5cyB3aXRoaW4gdGhlIFNR TC9KU09OIGl0ZW0gcHJvZHVjZWQgYnkgdGhlIHJvdyBwYXR0ZXJuLgorICAgIDwvcGFyYT4KKyAg ICA8cGFyYT4KKyAgICAgT3B0aW9uYWxseSwgeW91IGNhbiBzcGVjaWZ5IDxsaXRlcmFsPldSQVBQ RVI8L2xpdGVyYWw+LAorICAgICA8bGl0ZXJhbD5RVU9URVM8L2xpdGVyYWw+IGNsYXVzZXMgdG8g Zm9ybWF0IHRoZSBvdXRwdXQgYW5kCisgICAgIDxsaXRlcmFsPk9OIEVNUFRZPC9saXRlcmFsPiBh bmQgPGxpdGVyYWw+T04gRVJST1I8L2xpdGVyYWw+IHRvIGhhbmRsZQorICAgICB0aG9zZSBzY2Vu YXJpb3MgYXBwcm9wcmlhdGVseS4KKyAgICA8L3BhcmE+CisgICAgPG5vdGU+CisgICAgIDxwYXJh PgorICAgICAgVGhpcyBjbGF1c2UgaXMgaW50ZXJuYWxseSB0dXJuZWQgaW50byBhbmQgaGFzIHRo ZSBzYW1lIHNlbWFudGljcyBhcworICAgICAgPGZ1bmN0aW9uPmpzb25fcXVlcnk8L2Z1bmN0aW9u Pi4KKyAgICAgPC9wYXJhPgorICAgIDwvbm90ZT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJs aXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+CisgICAgICAgPHJlcGxh Y2VhYmxlPm5hbWU8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+dHlwZTwvcmVwbGFjZWFibGU+ CisgICAgICAgPGxpdGVyYWw+RVhJU1RTPC9saXRlcmFsPiA8b3B0aW9uYWw+IDxsaXRlcmFsPlBB VEg8L2xpdGVyYWw+IDxyZXBsYWNlYWJsZT5qc29uX3BhdGhfc3BlY2lmaWNhdGlvbjwvcmVwbGFj ZWFibGU+IDwvb3B0aW9uYWw+CisgICAgPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKworICAgIDxw YXJhPgorICAgICBJbnNlcnRzIGEgYm9vbGVhbiBpdGVtIGludG8gZWFjaCBvdXRwdXQgcm93Lgor ICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgVGhlIHZhbHVlIGNvcnJlc3BvbmRzIHRvIHdo ZXRoZXIgZXZhbHVhdGluZyB0aGUgPGxpdGVyYWw+UEFUSDwvbGl0ZXJhbD4KKyAgICAgZXhwcmVz c2lvbiB5aWVsZHMgYW55IFNRTC9KU09OIGl0ZW1zLiAgSWYgdGhlIDxsaXRlcmFsPlBBVEg8L2xp dGVyYWw+CisgICAgIGV4cHJlc3Npb24gaXMgb21pdHRlZCwgcGF0aCBleHByZXNzaW9uCisgICAg IDxsaXRlcmFsPiQuPHJlcGxhY2VhYmxlPm5hbWU8L3JlcGxhY2VhYmxlPjwvbGl0ZXJhbD4gaXMg dXNlZCwKKyAgICAgd2hlcmUgPHJlcGxhY2VhYmxlPm5hbWU8L3JlcGxhY2VhYmxlPiBpcyB0aGUg cHJvdmlkZWQgY29sdW1uIG5hbWUuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICBUaGUg c3BlY2lmaWVkIDxwYXJhbWV0ZXI+dHlwZTwvcGFyYW1ldGVyPiBzaG91bGQgaGF2ZSBhIGNhc3Qg ZnJvbSB0aGUKKyAgICAgPHR5cGU+Ym9vbGVhbjwvdHlwZT4uCisgICAgPC9wYXJhPgorICAgIDxw YXJhPgorICAgICBPcHRpb25hbGx5LCB5b3UgY2FuIGFkZCA8bGl0ZXJhbD5PTiBFUlJPUjwvbGl0 ZXJhbD4gY2xhdXNlIHRvIGRlZmluZQorICAgICBlcnJvciBiZWhhdmlvci4KKyAgICA8L3BhcmE+ CisgICAgPG5vdGU+CisgICAgIDxwYXJhPgorICAgICAgVGhpcyBjbGF1c2UgaXMgaW50ZXJuYWxs eSB0dXJuZWQgaW50byBhbmQgaGFzIHRoZSBzYW1lIHNlbWFudGljcyBhcworICAgICAgPGZ1bmN0 aW9uPmpzb25fZXhpc3RzPC9mdW5jdGlvbj4uCisgICAgIDwvcGFyYT4KKyAgICA8L25vdGU+Cisg ICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5Pgor ICAgIDx0ZXJtPgorICAgICAgPGxpdGVyYWw+TkVTVEVEIFBBVEg8L2xpdGVyYWw+IDxyZXBsYWNl YWJsZT5qc29uX3BhdGhfc3BlY2lmaWNhdGlvbjwvcmVwbGFjZWFibGU+IDxvcHRpb25hbD4gPGxp dGVyYWw+QVM8L2xpdGVyYWw+IDxyZXBsYWNlYWJsZT5qc29uX3BhdGhfbmFtZTwvcmVwbGFjZWFi bGU+IDwvb3B0aW9uYWw+CisgICAgICAgICAgPGxpdGVyYWw+Q09MVU1OUzwvbGl0ZXJhbD4gKCA8 cmVwbGFjZWFibGU+anNvbl90YWJsZV9jb2x1bW48L3JlcGxhY2VhYmxlPiA8b3B0aW9uYWw+LCAu Li48L29wdGlvbmFsPiApCisgICAgPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKworICAgIDxwYXJh PgorICAgICBFeHRyYWN0cyBTUUwvSlNPTiBpdGVtcyBmcm9tIG5lc3RlZCBsZXZlbHMgb2YgdGhl IHJvdyBwYXR0ZXJuLAorICAgICBnZW5lcmF0ZXMgb25lIG9yIG1vcmUgY29sdW1ucyBhcyBkZWZp bmVkIGJ5IHRoZSA8bGl0ZXJhbD5DT0xVTU5TPC9saXRlcmFsPgorICAgICBzdWJjbGF1c2UsIGFu ZCBpbnNlcnRzIHRoZSBleHRyYWN0ZWQgU1FML0pTT04gaXRlbXMgaW50byBlYWNoIHJvdyBvZiB0 aGVzZSBjb2x1bW5zLgorICAgICBUaGUgPHJlcGxhY2VhYmxlPmpzb25fdGFibGVfY29sdW1uPC9y ZXBsYWNlYWJsZT4gZXhwcmVzc2lvbiBpbiB0aGUKKyAgICAgPGxpdGVyYWw+Q09MVU1OUzwvbGl0 ZXJhbD4gc3ViY2xhdXNlIHVzZXMgdGhlIHNhbWUgc3ludGF4IGFzIGluIHRoZQorICAgICBwYXJl bnQgPGxpdGVyYWw+Q09MVU1OUzwvbGl0ZXJhbD4gY2xhdXNlLgorICAgIDwvcGFyYT4KKworICAg IDxwYXJhPgorICAgICBUaGUgPGxpdGVyYWw+TkVTVEVEIFBBVEg8L2xpdGVyYWw+IHN5bnRheCBp cyByZWN1cnNpdmUsCisgICAgIHNvIHlvdSBjYW4gZ28gZG93biBtdWx0aXBsZSBuZXN0ZWQgbGV2 ZWxzIGJ5IHNwZWNpZnlpbmcgc2V2ZXJhbAorICAgICA8bGl0ZXJhbD5ORVNURUQgUEFUSDwvbGl0 ZXJhbD4gc3ViY2xhdXNlcyB3aXRoaW4gZWFjaCBvdGhlci4KKyAgICAgSXQgYWxsb3dzIHRvIHVu bmVzdCB0aGUgaGllcmFyY2h5IG9mIEpTT04gb2JqZWN0cyBhbmQgYXJyYXlzCisgICAgIGluIGEg c2luZ2xlIGZ1bmN0aW9uIGludm9jYXRpb24gcmF0aGVyIHRoYW4gY2hhaW5pbmcgc2V2ZXJhbAor ICAgICA8ZnVuY3Rpb24+SlNPTl9UQUJMRTwvZnVuY3Rpb24+IGV4cHJlc3Npb25zIGluIGFuIFNR TCBzdGF0ZW1lbnQuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgIFlvdSBjYW4gdXNl IHRoZSA8bGl0ZXJhbD5QTEFOPC9saXRlcmFsPiBjbGF1c2UgdG8gZGVmaW5lIGhvdworICAgICB0 byBqb2luIHRoZSBjb2x1bW5zIHJldHVybmVkIGJ5IDxsaXRlcmFsPk5FU1RFRCBQQVRIPC9saXRl cmFsPiBjbGF1c2VzLgorICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0 ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+CisgICAgIDxyZXBsYWNlYWJs ZT5uYW1lPC9yZXBsYWNlYWJsZT4gPGxpdGVyYWw+Rk9SIE9SRElOQUxJVFk8L2xpdGVyYWw+Cisg ICAgPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKworICAgIDxwYXJhPgorICAgICBBZGRzIGFuIG9y ZGluYWxpdHkgY29sdW1uIHRoYXQgcHJvdmlkZXMgc2VxdWVudGlhbCByb3cgbnVtYmVyaW5nLgor ICAgICBZb3UgY2FuIGhhdmUgb25seSBvbmUgb3JkaW5hbGl0eSBjb2x1bW4gcGVyIHRhYmxlLiBS b3cgbnVtYmVyaW5nCisgICAgIGlzIDEtYmFzZWQuIEZvciBjaGlsZCByb3dzIHRoYXQgcmVzdWx0 IGZyb20gdGhlIDxsaXRlcmFsPk5FU1RFRCBQQVRIPC9saXRlcmFsPgorICAgICBjbGF1c2VzLCB0 aGUgcGFyZW50IHJvdyBudW1iZXIgaXMgcmVwZWF0ZWQuCisgICAgPC9wYXJhPgorICAgIDwvbGlz dGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKyAgPC92YXJpYWJsZWxpc3Q+CisKKyAgICA8L2xp c3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRl cm0+CisgICAgIDxsaXRlcmFsPkFTPC9saXRlcmFsPiA8cmVwbGFjZWFibGU+anNvbl9wYXRoX25h bWU8L3JlcGxhY2VhYmxlPgorICAgIDwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisKKyAgICA8cGFy YT4KKyAgICAgVGhlIG9wdGlvbmFsIDxyZXBsYWNlYWJsZT5qc29uX3BhdGhfbmFtZTwvcmVwbGFj ZWFibGU+IHNlcnZlcyBhcyBhbgorICAgICBpZGVudGlmaWVyIG9mIHRoZSBwcm92aWRlZCA8cmVw bGFjZWFibGU+anNvbl9wYXRoX3NwZWNpZmljYXRpb248L3JlcGxhY2VhYmxlPi4KKyAgICAgVGhl IHBhdGggbmFtZSBtdXN0IGJlIHVuaXF1ZSBhbmQgZGlzdGluY3QgZnJvbSB0aGUgY29sdW1uIG5h bWVzLgorICAgICBXaGVuIHVzaW5nIHRoZSA8bGl0ZXJhbD5QTEFOPC9saXRlcmFsPiBjbGF1c2Us IHlvdSBtdXN0IHNwZWNpZnkgdGhlIG5hbWVzCisgICAgIGZvciBhbGwgdGhlIHBhdGhzLCBpbmNs dWRpbmcgdGhlIHJvdyBwYXR0ZXJuLiBFYWNoIHBhdGggbmFtZSBjYW4gYXBwZWFyIGluCisgICAg IHRoZSA8bGl0ZXJhbD5QTEFOPC9saXRlcmFsPiBjbGF1c2Ugb25seSBvbmNlLgorICAgIDwvcGFy YT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50 cnk+CisgICAgPHRlcm0+CisgICAgIDxsaXRlcmFsPlBMQU48L2xpdGVyYWw+ICggPHJlcGxhY2Vh YmxlPmpzb25fdGFibGVfcGxhbjwvcmVwbGFjZWFibGU+ICkKKyAgICA8L3Rlcm0+CisgICAgPGxp c3RpdGVtPgorCisgICAgPHBhcmE+CisgICAgIERlZmluZXMgaG93IHRvIGpvaW4gdGhlIGRhdGEg cmV0dXJuZWQgYnkgPGxpdGVyYWw+TkVTVEVEIFBBVEg8L2xpdGVyYWw+CisgICAgIGNsYXVzZXMg dG8gdGhlIGNvbnN0cnVjdGVkIHZpZXcuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICBU byBqb2luIGNvbHVtbnMgd2l0aCBwYXJlbnQvY2hpbGQgcmVsYXRpb25zaGlwLCB5b3UgY2FuIHVz ZToKKyAgICA8L3BhcmE+CisgIDx2YXJpYWJsZWxpc3Q+CisgICA8dmFybGlzdGVudHJ5PgorICAg IDx0ZXJtPgorICAgICA8bGl0ZXJhbD5JTk5FUjwvbGl0ZXJhbD4KKyAgICA8L3Rlcm0+CisgICAg PGxpc3RpdGVtPgorCisgICAgPHBhcmE+CisgICAgIFVzZSA8bGl0ZXJhbD5JTk5FUiBKT0lOPC9s aXRlcmFsPiwgc28gdGhhdCB0aGUgcGFyZW50IHJvdworICAgICBpcyBvbWl0dGVkIGZyb20gdGhl IG91dHB1dCBpZiBpdCBkb2VzIG5vdCBoYXZlIGFueSBjaGlsZCByb3dzCisgICAgIGFmdGVyIGpv aW5pbmcgdGhlIGRhdGEgcmV0dXJuZWQgYnkgPGxpdGVyYWw+TkVTVEVEIFBBVEg8L2xpdGVyYWw+ LgorICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAg IDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+CisgICAgIDxsaXRlcmFsPk9VVEVSPC9saXRlcmFs PgorICAgIDwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisKKyAgICA8cGFyYT4KKyAgICAgVXNlIDxs aXRlcmFsPkxFRlQgT1VURVIgSk9JTjwvbGl0ZXJhbD4sIHNvIHRoYXQgdGhlIHBhcmVudCByb3cK KyAgICAgaXMgYWx3YXlzIGluY2x1ZGVkIGludG8gdGhlIG91dHB1dCBldmVuIGlmIGl0IGRvZXMg bm90IGhhdmUgYW55IGNoaWxkIHJvd3MKKyAgICAgYWZ0ZXIgam9pbmluZyB0aGUgZGF0YSByZXR1 cm5lZCBieSA8bGl0ZXJhbD5ORVNURUQgUEFUSDwvbGl0ZXJhbD4sIHdpdGggTlVMTCB2YWx1ZXMK KyAgICAgaW5zZXJ0ZWQgaW50byB0aGUgY2hpbGQgY29sdW1ucyBpZiB0aGUgY29ycmVzcG9uZGlu ZworICAgICB2YWx1ZXMgYXJlIG1pc3NpbmcuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAg ICBUaGlzIGlzIHRoZSBkZWZhdWx0IG9wdGlvbiBmb3Igam9pbmluZyBjb2x1bW5zIHdpdGggcGFy ZW50L2NoaWxkIHJlbGF0aW9uc2hpcC4KKyAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAg IDwvdmFybGlzdGVudHJ5PgorICA8L3ZhcmlhYmxlbGlzdD4KKworICAgICA8cGFyYT4KKyAgICAg VG8gam9pbiBzaWJsaW5nIGNvbHVtbnMsIHlvdSBjYW4gdXNlOgorICAgIDwvcGFyYT4KKworICA8 dmFyaWFibGVsaXN0PgorICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAgICAgPGxpdGVy YWw+VU5JT048L2xpdGVyYWw+CisgICAgPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKworICAgIDxw YXJhPgorICAgICBHZW5lcmF0ZSBvbmUgcm93IGZvciBlYWNoIHZhbHVlIHByb2R1Y2VkIGJ5IGVh Y2ggb2YgdGhlIHNpYmxpbmcKKyAgICAgY29sdW1ucy4gVGhlIGNvbHVtbnMgZnJvbSB0aGUgb3Ro ZXIgc2libGluZ3MgYXJlIHNldCB0byBudWxsLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAg ICAgVGhpcyBpcyB0aGUgZGVmYXVsdCBvcHRpb24gZm9yIGpvaW5pbmcgc2libGluZyBjb2x1bW5z LgorICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAg IDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+CisgICAgIDxsaXRlcmFsPkNST1NTPC9saXRlcmFs PgorICAgIDwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisKKyAgICA8cGFyYT4KKyAgICAgR2VuZXJh dGUgb25lIHJvdyBmb3IgZWFjaCBjb21iaW5hdGlvbiBvZiB2YWx1ZXMgZnJvbSB0aGUgc2libGlu ZyBjb2x1bW5zLgorICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50 cnk+CisKKyAgPC92YXJpYWJsZWxpc3Q+CisKKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0 ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+CisgICAgIDxsaXRlcmFsPlBM QU4gREVGQVVMVDwvbGl0ZXJhbD4gKCA8bGl0ZXJhbD48cmVwbGFjZWFibGU+T1VURVIgfCBJTk5F UjwvcmVwbGFjZWFibGU+IDxvcHRpb25hbD4sIDxyZXBsYWNlYWJsZT5VTklPTiB8IENST1NTPC9y ZXBsYWNlYWJsZT4gPC9vcHRpb25hbD48L2xpdGVyYWw+ICkKKyAgICA8L3Rlcm0+CisgICAgPGxp c3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIFRoZSB0ZXJtcyBjYW4gYWxzbyBiZSBzcGVjaWZp ZWQgaW4gcmV2ZXJzZSBvcmRlci4gVGhlCisgICAgICA8bGl0ZXJhbD5JTk5FUjwvbGl0ZXJhbD4g b3IgPGxpdGVyYWw+T1VURVI8L2xpdGVyYWw+IG9wdGlvbiBkZWZpbmVzIHRoZQorICAgICAgam9p bmluZyBwbGFuIGZvciBwYXJlbnQvY2hpbGQgY29sdW1ucywgd2hpbGUgPGxpdGVyYWw+VU5JT048 L2xpdGVyYWw+IG9yCisgICAgICA8bGl0ZXJhbD5DUk9TUzwvbGl0ZXJhbD4gYWZmZWN0cyBqb2lu cyBvZiBzaWJsaW5nIGNvbHVtbnMuIFRoaXMgZm9ybQorICAgICAgb2YgPGxpdGVyYWw+UExBTjwv bGl0ZXJhbD4gb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IHBsYW4gZm9yCisgICAgICBhbGwgY29sdW1u cyBhdCBvbmNlLiBFdmVuIHRob3VnaCB0aGUgcGF0aCBuYW1lcyBhcmUgbm90IGluY2x1ZGVkIGlu IHRoZQorICAgICAgPGxpdGVyYWw+UExBTiBERUZBVUxUPC9saXRlcmFsPiBmb3JtLCB0byBjb25m b3JtIHRvIHRoZSBTUUwvSlNPTiBzdGFuZGFyZAorICAgICAgdGhleSBtdXN0IGJlIHByb3ZpZGVk IGZvciBhbGwgdGhlIHBhdGhzIGlmIHRoZSA8bGl0ZXJhbD5QTEFOPC9saXRlcmFsPgorICAgICAg Y2xhdXNlIGlzIHVzZWQuCisgICAgIDwvcGFyYT4KKyAgICAgPHBhcmE+CisgICAgICA8bGl0ZXJh bD5QTEFOIERFRkFVTFQ8L2xpdGVyYWw+IGlzIHNpbXBsZXIgdGhhbiBzcGVjaWZ5aW5nIGEgY29t cGxldGUKKyAgICAgIDxsaXRlcmFsPlBMQU48L2xpdGVyYWw+LCBhbmQgaXMgb2Z0ZW4gYWxsIHRo YXQgaXMgcmVxdWlyZWQgdG8gZ2V0IHRoZSBkZXNpcmVkCisgICAgICBvdXRwdXQuCisgICAgIDwv cGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisgIDwvdmFyaWFibGVs aXN0PgorCisgIDxwYXJhPkV4YW1wbGVzPC9wYXJhPgorCisgICAgIDxwYXJhPgorICAgICBJbiB0 aGVzZSBleGFtcGxlcyB0aGUgZm9sbG93aW5nIHNtYWxsIHRhYmxlIHN0b3Jpbmcgc29tZSBKU09O IGRhdGEgd2lsbCBiZSB1c2VkOgorPHByb2dyYW1saXN0aW5nPgorQ1JFQVRFIFRBQkxFIG15X2Zp bG1zICgganMganNvbmIgKTsKKworSU5TRVJUIElOVE8gbXlfZmlsbXMgVkFMVUVTICgKKyd7ICJm YXZvcml0ZXMiIDogWworICAgeyAia2luZCIgOiAiY29tZWR5IiwgImZpbG1zIiA6IFsKKyAgICAg eyAidGl0bGUiIDogIkJhbmFuYXMiLAorICAgICAgICJkaXJlY3RvciIgOiAiV29vZHkgQWxsZW4i fSwKKyAgICAgeyAidGl0bGUiIDogIlRoZSBEaW5uZXIgR2FtZSIsCisgICAgICAgImRpcmVjdG9y IiA6ICJGcmFuY2lzIFZlYmVyIiB9IF0gfSwKKyAgIHsgImtpbmQiIDogImhvcnJvciIsICJmaWxt cyIgOiBbCisgICAgIHsgInRpdGxlIiA6ICJQc3ljaG8iLAorICAgICAgICJkaXJlY3RvciIgOiAi QWxmcmVkIEhpdGNoY29jayIgfSBdIH0sCisgICB7ICJraW5kIiA6ICJ0aHJpbGxlciIsICJmaWxt cyIgOiBbCisgICAgIHsgInRpdGxlIiA6ICJWZXJ0aWdvIiwKKyAgICAgICAiZGlyZWN0b3IiIDog IkFsZnJlZCBIaXRjaGNvY2siIH0gXSB9LAorICAgeyAia2luZCIgOiAiZHJhbWEiLCAiZmlsbXMi IDogWworICAgICB7ICJ0aXRsZSIgOiAiWW9qaW1ibyIsCisgICAgICAgImRpcmVjdG9yIiA6ICJB a2lyYSBLdXJvc2F3YSIgfSBdIH0KKyAgXSB9Jyk7Cis8L3Byb2dyYW1saXN0aW5nPgorICAgICA8 L3BhcmE+CisgICAgIDxwYXJhPgorICAgICAgUXVlcnkgdGhlIDxzdHJ1Y3RuYW1lPm15X2ZpbG1z PC9zdHJ1Y3RuYW1lPiB0YWJsZSBob2xkaW5nCisgICAgICBzb21lIEpTT04gZGF0YSBhYm91dCB0 aGUgZmlsbXMgYW5kIGNyZWF0ZSBhIHZpZXcgdGhhdAorICAgICAgZGlzdHJpYnV0ZXMgdGhlIGZp bG0gZ2VucmUsIHRpdGxlLCBhbmQgZGlyZWN0b3IgYmV0d2VlbiBzZXBhcmF0ZSBjb2x1bW5zOgor PHNjcmVlbj4KK1NFTEVDVCBqdC4qIEZST00KKyBteV9maWxtcywKKyBKU09OX1RBQkxFICgganMs ICckLmZhdm9yaXRlc1sqXScgQ09MVU1OUyAoCisgICBpZCBGT1IgT1JESU5BTElUWSwKKyAgIGtp bmQgdGV4dCBQQVRIICckLmtpbmQnLAorICAgTkVTVEVEIFBBVEggJyQuZmlsbXNbKl0nIENPTFVN TlMgKAorICAgICB0aXRsZSB0ZXh0IFBBVEggJyQudGl0bGUnLAorICAgICBkaXJlY3RvciB0ZXh0 IFBBVEggJyQuZGlyZWN0b3InKSkpIEFTIGp0OworLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tCisgaWQgfCAgIGtpbmQgICB8ICAgICAgIHRpdGxl ICAgICAgfCAgICBkaXJlY3RvcgorLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0tCisgMSAgfCBjb21lZHkgICB8IEJhbmFuYXMgICAgICAgICAgfCBX b29keSBBbGxlbgorIDEgIHwgY29tZWR5ICAgfCBUaGUgRGlubmVyIEdhbWUgIHwgRnJhbmNpcyBW ZWJlcgorIDIgIHwgaG9ycm9yICAgfCBQc3ljaG8gICAgICAgICAgIHwgQWxmcmVkIEhpdGNoY29j aworIDMgIHwgdGhyaWxsZXIgfCBWZXJ0aWdvICAgICAgICAgIHwgQWxmcmVkIEhpdGNoY29jawor IDQgIHwgZHJhbWEgICAgfCBZb2ppbWJvICAgICAgICAgIHwgQWtpcmEgS3Vyb3Nhd2EKKyAoNSBy b3dzKQorPC9zY3JlZW4+CisgICAgIDwvcGFyYT4KKworICAgICA8cGFyYT4KKyAgICAgIEZpbmQg YSBkaXJlY3RvciB0aGF0IGhhcyBkb25lIGZpbG1zIGluIHR3byBkaWZmZXJlbnQgZ2VucmVzOgor PHNjcmVlbj4KK1NFTEVDVAorICBkaXJlY3RvcjEgQVMgZGlyZWN0b3IsIHRpdGxlMSwga2luZDEs IHRpdGxlMiwga2luZDIKK0ZST00KKyAgbXlfZmlsbXMsCisgIEpTT05fVEFCTEUgKCBqcywgJyQu ZmF2b3JpdGVzJyBBUyBmYXZzIENPTFVNTlMgKAorICAgIE5FU1RFRCBQQVRIICckWypdJyBBUyBm aWxtczEgQ09MVU1OUyAoCisgICAgICBraW5kMSB0ZXh0IFBBVEggJyQua2luZCcsCisgICAgICBO RVNURUQgUEFUSCAnJC5maWxtc1sqXScgQVMgZmlsbTEgQ09MVU1OUyAoCisgICAgICAgIHRpdGxl MSB0ZXh0IFBBVEggJyQudGl0bGUnLAorICAgICAgICBkaXJlY3RvcjEgdGV4dCBQQVRIICckLmRp cmVjdG9yJykKKyAgICApLAorICAgIE5FU1RFRCBQQVRIICckWypdJyBBUyBmaWxtczIgQ09MVU1O UyAoCisgICAgICBraW5kMiB0ZXh0IFBBVEggJyQua2luZCcsCisgICAgICBORVNURUQgUEFUSCAn JC5maWxtc1sqXScgQVMgZmlsbTIgQ09MVU1OUyAoCisgICAgICAgIHRpdGxlMiB0ZXh0IFBBVEgg JyQudGl0bGUnLAorICAgICAgICBkaXJlY3RvcjIgdGV4dCBQQVRIICckLmRpcmVjdG9yJworICAg ICAgKQorICAgICkKKyAgICkKKyAgIFBMQU4gKGZhdnMgT1VURVIgKChmaWxtczEgSU5ORVIgZmls bTEpIENST1NTIChmaWxtczIgSU5ORVIgZmlsbTIpKSkKKyAgKSBBUyBqdAorIFdIRVJFIGtpbmQx ID4ga2luZDIgQU5EIGRpcmVjdG9yMSA9IGRpcmVjdG9yMjsKKworICAgICBkaXJlY3RvciAgICAg fCB0aXRsZTEgIHwgIGtpbmQxICAgfCB0aXRsZTIgfCBraW5kMgorLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tCisgQWxmcmVkIEhpdGNoY29j ayB8IFZlcnRpZ28gfCB0aHJpbGxlciB8IFBzeWNobyB8IGhvcnJvcgorKDEgcm93KQorPC9zY3Jl ZW4+CisgICAgIDwvcGFyYT4KKyAgPC9zZWN0Mj4KKwogIDwvc2VjdDE+CiAKICA8c2VjdDEgaWQ9 ImZ1bmN0aW9ucy1zZXF1ZW5jZSI+CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL3Nx bF9mZWF0dXJlcy50eHQgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3NxbF9mZWF0dXJlcy50eHQKaW5k ZXggODBhYzU5ZmJhNC4uYTBlNjNmNDU0ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxv Zy9zcWxfZmVhdHVyZXMudHh0CisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3FsX2ZlYXR1cmVz LnR4dApAQCAtNTUwLDEwICs1NTAsMTAgQEAgVDgxNAlDb2xvbiBpbiBKU09OX09CSkVDVCBvciBK U09OX09CSkVDVEFHRwkJCVlFUwogVDgyMQlCYXNpYyBTUUwvSlNPTiBxdWVyeSBvcGVyYXRvcnMJ CQlZRVMJCiBUODIyCVNRTC9KU09OOiBJUyBKU09OIFdJVEggVU5JUVVFIEtFWVMgcHJlZGljYXRl CQkJWUVTCQogVDgyMwlTUUwvSlNPTjogUEFTU0lORyBjbGF1c2UJCQlZRVMJCi1UODI0CUpTT05f VEFCTEU6IHNwZWNpZmljIFBMQU4gY2xhdXNlCQkJTk8JCitUODI0CUpTT05fVEFCTEU6IHNwZWNp ZmljIFBMQU4gY2xhdXNlCQkJWUVTCQogVDgyNQlTUUwvSlNPTjogT04gRU1QVFkgYW5kIE9OIEVS Uk9SIGNsYXVzZXMJCQlZRVMJCiBUODI2CUdlbmVyYWwgdmFsdWUgZXhwcmVzc2lvbiBpbiBPTiBF UlJPUiBvciBPTiBFTVBUWSBjbGF1c2VzCQkJWUVTCQotVDgyNwlKU09OX1RBQkxFOiBzaWJsaW5n IE5FU1RFRCBDT0xVTU5TIGNsYXVzZXMJCQlOTwkKK1Q4MjcJSlNPTl9UQUJMRTogc2libGluZyBO RVNURUQgQ09MVU1OUyBjbGF1c2VzCQkJWUVTCQogVDgyOAlKU09OX1FVRVJZCQkJWUVTCQogVDgy OQlKU09OX1FVRVJZOiBhcnJheSB3cmFwcGVyIG9wdGlvbnMJCQlZRVMJCiBUODMwCUVuZm9yY2lu ZyB1bmlxdWUga2V5cyBpbiBTUUwvSlNPTiBjb25zdHJ1Y3RvciBmdW5jdGlvbnMJCQlZRVMJCkBA IC01NjQsNyArNTY0LDcgQEAgVDgzNAlTUUwvSlNPTiBwYXRoIGxhbmd1YWdlOiB3aWxkY2FyZCBt ZW1iZXIgYWNjZXNzb3IJCQlZRVMKIFQ4MzUJU1FML0pTT04gcGF0aCBsYW5ndWFnZTogZmlsdGVy IGV4cHJlc3Npb25zCQkJWUVTCQogVDgzNglTUUwvSlNPTiBwYXRoIGxhbmd1YWdlOiBzdGFydHMg d2l0aCBwcmVkaWNhdGUJCQlZRVMJCiBUODM3CVNRTC9KU09OIHBhdGggbGFuZ3VhZ2U6IHJlZ2V4 X2xpa2UgcHJlZGljYXRlCQkJWUVTCQotVDgzOAlKU09OX1RBQkxFOiBQTEFOIERFRkFVTFQgY2xh dXNlCQkJTk8JCitUODM4CUpTT05fVEFCTEU6IFBMQU4gREVGQVVMVCBjbGF1c2UJCQlZRVMJCiBU ODM5CUZvcm1hdHRlZCBjYXN0IG9mIGRhdGV0aW1lcyB0by9mcm9tIGNoYXJhY3RlciBzdHJpbmdz CQkJTk8JCiBUODQwCUhleCBpbnRlZ2VyIGxpdGVyYWxzIGluIFNRTC9KU09OIHBhdGggbGFuZ3Vh Z2UJCQlZRVMJCiBUODUxCVNRTC9KU09OOiBvcHRpb25hbCBrZXl3b3JkcyBmb3IgZGVmYXVsdCBz eW50YXgJCQlZRVMJCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKaW5kZXggYTlkNTA1NmFmNC4uMGRmNDdk Y2NiNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCisrKyBiL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwpAQCAtNDAwMiw5ICs0MDAyLDI0IEBAIEV4cGxh aW5UYXJnZXRSZWwoUGxhbiAqcGxhbiwgSW5kZXggcnRpLCBFeHBsYWluU3RhdGUgKmVzKQogCQkJ fQogCQkJYnJlYWs7CiAJCWNhc2UgVF9UYWJsZUZ1bmNTY2FuOgotCQkJQXNzZXJ0KHJ0ZS0+cnRl a2luZCA9PSBSVEVfVEFCTEVGVU5DKTsKLQkJCW9iamVjdG5hbWUgPSAieG1sdGFibGUiOwotCQkJ b2JqZWN0dGFnID0gIlRhYmxlIEZ1bmN0aW9uIE5hbWUiOworCQkJeworCQkJCVRhYmxlRnVuYyAq dGFibGVmdW5jID0gKChUYWJsZUZ1bmNTY2FuICopIHBsYW4pLT50YWJsZWZ1bmM7CisKKwkJCQlB c3NlcnQocnRlLT5ydGVraW5kID09IFJURV9UQUJMRUZVTkMpOworCQkJCXN3aXRjaCAodGFibGVm dW5jLT5mdW5jdHlwZSkKKwkJCQl7CisJCQkJCWNhc2UgVEZUX1hNTFRBQkxFOgorCQkJCQkJb2Jq ZWN0bmFtZSA9ICJ4bWx0YWJsZSI7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBURlRfSlNPTl9U QUJMRToKKwkJCQkJCW9iamVjdG5hbWUgPSAianNvbl90YWJsZSI7CisJCQkJCQlicmVhazsKKwkJ CQkJZGVmYXVsdDoKKwkJCQkJCWVsb2coRVJST1IsICJpbnZhbGlkIFRhYmxlRnVuYyB0eXBlICVk IiwKKwkJCQkJCQkgKGludCkgdGFibGVmdW5jLT5mdW5jdHlwZSk7CisJCQkJfQorCQkJCW9iamVj dHRhZyA9ICJUYWJsZSBGdW5jdGlvbiBOYW1lIjsKKwkJCX0KIAkJCWJyZWFrOwogCQljYXNlIFRf VmFsdWVzU2NhbjoKIAkJCUFzc2VydChydGUtPnJ0ZWtpbmQgPT0gUlRFX1ZBTFVFUyk7CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwckludGVycC5jIGIvc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAuYwppbmRleCBkZWEzMDA2ZGVjLi44NTczMGMyOTg1 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwckludGVycC5jCisrKyBi L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMKQEAgLTQzNTksNiArNDM1OSwx MiBAQCBFeGVjRXZhbEpzb25FeHByUGF0aChFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAg Km9wLAogCQkJCWJyZWFrOwogCQkJfQogCisJCWNhc2UgSlNPTl9UQUJMRV9PUDoKKwkJCWp1bXBf ZXZhbF9jb2VyY2lvbiA9IC0xOworCQkJKm9wLT5yZXN2YWx1ZSA9IGl0ZW07CisJCQkqb3AtPnJl c251bGwgPSBmYWxzZTsKKwkJCWJyZWFrOworCiAJCWRlZmF1bHQ6CiAJCQllbG9nKEVSUk9SLCAi dW5yZWNvZ25pemVkIFNRTC9KU09OIGV4cHJlc3Npb24gb3AgJWQiLAogCQkJCSAoaW50KSBqc2V4 cHItPm9wKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVUYWJsZUZ1bmNz Y2FuLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlVGFibGVGdW5jc2Nhbi5jCmluZGV4IDcy Y2EzNGEyMjguLjk5ZmI5Mjg5NGMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25v ZGVUYWJsZUZ1bmNzY2FuLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVRhYmxlRnVu Y3NjYW4uYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1 ZGUgIm5vZGVzL2V4ZWNub2Rlcy5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5j bHVkZSAidXRpbHMvanNvbnBhdGguaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKICNp bmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3htbC5oIgpAQCAtMTYx LDggKzE2Miw5IEBAIEV4ZWNJbml0VGFibGVGdW5jU2NhbihUYWJsZUZ1bmNTY2FuICpub2RlLCBF U3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAlzY2Fuc3RhdGUtPnNzLnBzLnF1YWwgPQogCQlF eGVjSW5pdFF1YWwobm9kZS0+c2Nhbi5wbGFuLnF1YWwsICZzY2Fuc3RhdGUtPnNzLnBzKTsKIAot CS8qIE9ubHkgWE1MVEFCTEUgaXMgc3VwcG9ydGVkIGN1cnJlbnRseSAqLwotCXNjYW5zdGF0ZS0+ cm91dGluZSA9ICZYbWxUYWJsZVJvdXRpbmU7CisJLyogT25seSBYTUxUQUJMRSBhbmQgSlNPTl9U QUJMRSBhcmUgc3VwcG9ydGVkIGN1cnJlbnRseSAqLworCXNjYW5zdGF0ZS0+cm91dGluZSA9CisJ CXRmLT5mdW5jdHlwZSA9PSBURlRfWE1MVEFCTEUgPyAmWG1sVGFibGVSb3V0aW5lIDogJkpzb25i VGFibGVSb3V0aW5lOwogCiAJc2NhbnN0YXRlLT5wZXJUYWJsZUN4dCA9CiAJCUFsbG9jU2V0Q29u dGV4dENyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwKQEAgLTE4Miw2ICsxODQsMTAgQEAgRXhl Y0luaXRUYWJsZUZ1bmNTY2FuKFRhYmxlRnVuY1NjYW4gKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBp bnQgZWZsYWdzKQogCQlFeGVjSW5pdEV4cHJMaXN0KHRmLT5jb2xleHBycywgKFBsYW5TdGF0ZSAq KSBzY2Fuc3RhdGUpOwogCXNjYW5zdGF0ZS0+Y29sZGVmZXhwcnMgPQogCQlFeGVjSW5pdEV4cHJM aXN0KHRmLT5jb2xkZWZleHBycywgKFBsYW5TdGF0ZSAqKSBzY2Fuc3RhdGUpOworCXNjYW5zdGF0 ZS0+Y29sdmFsZXhwcnMgPQorCQlFeGVjSW5pdEV4cHJMaXN0KHRmLT5jb2x2YWxleHBycywgKFBs YW5TdGF0ZSAqKSBzY2Fuc3RhdGUpOworCXNjYW5zdGF0ZS0+cGFzc2luZ3ZhbGV4cHJzID0KKwkJ RXhlY0luaXRFeHByTGlzdCh0Zi0+cGFzc2luZ3ZhbGV4cHJzLCAoUGxhblN0YXRlICopIHNjYW5z dGF0ZSk7CiAKIAlzY2Fuc3RhdGUtPm5vdG51bGxzID0gdGYtPm5vdG51bGxzOwogCkBAIC0zNjks MTQgKzM3NSwxNyBAQCB0ZnVuY0luaXRpYWxpemUoVGFibGVGdW5jU2NhblN0YXRlICp0c3RhdGUs IEV4cHJDb250ZXh0ICplY29udGV4dCwgRGF0dW0gZG9jKQogCQlyb3V0aW5lLT5TZXROYW1lc3Bh Y2UodHN0YXRlLCBuc19uYW1lLCBuc191cmkpOwogCX0KIAotCS8qIEluc3RhbGwgdGhlIHJvdyBm aWx0ZXIgZXhwcmVzc2lvbiBpbnRvIHRoZSB0YWJsZSBidWlsZGVyIGNvbnRleHQgKi8KLQl2YWx1 ZSA9IEV4ZWNFdmFsRXhwcih0c3RhdGUtPnJvd2V4cHIsIGVjb250ZXh0LCAmaXNudWxsKTsKLQlp ZiAoaXNudWxsKQotCQllcmVwb3J0KEVSUk9SLAotCQkJCShlcnJjb2RlKEVSUkNPREVfTlVMTF9W QUxVRV9OT1RfQUxMT1dFRCksCi0JCQkJIGVycm1zZygicm93IGZpbHRlciBleHByZXNzaW9uIG11 c3Qgbm90IGJlIG51bGwiKSkpOworCWlmIChyb3V0aW5lLT5TZXRSb3dGaWx0ZXIpCisJeworCQkv KiBJbnN0YWxsIHRoZSByb3cgZmlsdGVyIGV4cHJlc3Npb24gaW50byB0aGUgdGFibGUgYnVpbGRl ciBjb250ZXh0ICovCisJCXZhbHVlID0gRXhlY0V2YWxFeHByKHRzdGF0ZS0+cm93ZXhwciwgZWNv bnRleHQsICZpc251bGwpOworCQlpZiAoaXNudWxsKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJ KGVycmNvZGUoRVJSQ09ERV9OVUxMX1ZBTFVFX05PVF9BTExPV0VEKSwKKwkJCQkJIGVycm1zZygi cm93IGZpbHRlciBleHByZXNzaW9uIG11c3Qgbm90IGJlIG51bGwiKSkpOwogCi0Jcm91dGluZS0+ U2V0Um93RmlsdGVyKHRzdGF0ZSwgVGV4dERhdHVtR2V0Q1N0cmluZyh2YWx1ZSkpOworCQlyb3V0 aW5lLT5TZXRSb3dGaWx0ZXIodHN0YXRlLCBUZXh0RGF0dW1HZXRDU3RyaW5nKHZhbHVlKSk7CisJ fQogCiAJLyoKIAkgKiBJbnN0YWxsIHRoZSBjb2x1bW4gZmlsdGVyIGV4cHJlc3Npb25zIGludG8g dGhlIHRhYmxlIGJ1aWxkZXIgY29udGV4dC4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVz L21ha2VmdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNzLmMKaW5kZXggYjEzY2Zh NDIwMS4uNWI2YWViZmMzMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNz LmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNzLmMKQEAgLTUzNyw2ICs1MzcsMjIg QEAgbWFrZUZ1bmNFeHByKE9pZCBmdW5jaWQsIE9pZCByZXR0eXBlLCBMaXN0ICphcmdzLAogCXJl dHVybiBmdW5jZXhwcjsKIH0KIAorLyoKKyAqIG1ha2VTdHJpbmdDb25zdCAtCisgKiAJYnVpbGQg YSBBX0NvbnN0IG5vZGUgb2YgdHlwZSBUX1N0cmluZyBmb3IgZ2l2ZW4gc3RyaW5nCisgKi8KK05v ZGUgKgorbWFrZVN0cmluZ0NvbnN0KGNoYXIgKnN0ciwgaW50IGxvY2F0aW9uKQoreworCUFfQ29u c3QJICAgKm4gPSBtYWtlTm9kZShBX0NvbnN0KTsKKworCW4tPnZhbC5zdmFsLnR5cGUgPSBUX1N0 cmluZzsKKwluLT52YWwuc3ZhbC5zdmFsID0gc3RyOworCW4tPmxvY2F0aW9uID0gbG9jYXRpb247 CisKKyAgIHJldHVybiAoTm9kZSAqKSBuOworfQorCiAvKgogICogbWFrZURlZkVsZW0gLQogICoJ YnVpbGQgYSBEZWZFbGVtIG5vZGUKQEAgLTg3Miw2ICs4ODgsOTggQEAgbWFrZUpzb25CZWhhdmlv cihKc29uQmVoYXZpb3JUeXBlIGJ0eXBlLCBOb2RlICpleHByLCBpbnQgbG9jYXRpb24pCiAJcmV0 dXJuIGJlaGF2aW9yOwogfQogCisvKgorICogbWFrZUpzb25UYWJsZVBhdGggLQorICoJCU1ha2Ug SnNvblRhYmxlUGF0aCBub2RlIGZyb20gZ2l2ZW4gcGF0aCBzdHJpbmcgYW5kIG5hbWUgKGlmIGFu eSkKKyAqLworSnNvblRhYmxlUGF0aCAqCittYWtlSnNvblRhYmxlUGF0aChDb25zdCAqcGF0aHZh bHVlLCBjaGFyICpwYXRobmFtZSkKK3sKKwlKc29uVGFibGVQYXRoICpwYXRoID0gbWFrZU5vZGUo SnNvblRhYmxlUGF0aCk7CisKKwlBc3NlcnQoSXNBKHBhdGh2YWx1ZSwgQ29uc3QpKTsKKwlwYXRo LT52YWx1ZSA9IHBhdGh2YWx1ZTsKKwlpZiAocGF0aG5hbWUpCisJCXBhdGgtPm5hbWUgPSBwYXRo bmFtZTsKKworCXJldHVybiBwYXRoOworfQorCisvKgorICogbWFrZUpzb25UYWJsZVBhdGhTcGVj IC0KKyAqCQlNYWtlIEpzb25UYWJsZVBhdGhTcGVjIG5vZGUgZnJvbSBnaXZlbiBwYXRoIHN0cmlu ZyBhbmQgbmFtZSAoaWYgYW55KQorICovCitOb2RlICoKK21ha2VKc29uVGFibGVQYXRoU3BlYyhj aGFyICpzdHJpbmcsIGNoYXIgKm5hbWUsIGludCBzdHJpbmdfbG9jYXRpb24sCisJCQkJCSAgaW50 IG5hbWVfbG9jYXRpb24pCit7CisJSnNvblRhYmxlUGF0aFNwZWMgKnBhdGhzcGVjID0gbWFrZU5v ZGUoSnNvblRhYmxlUGF0aFNwZWMpOworCisJQXNzZXJ0KHN0cmluZyAhPSBOVUxMKTsKKwlwYXRo c3BlYy0+c3RyaW5nID0gbWFrZVN0cmluZ0NvbnN0KHN0cmluZywgc3RyaW5nX2xvY2F0aW9uKTsK KwlpZiAobmFtZSAhPSBOVUxMKQorCQlwYXRoc3BlYy0+bmFtZSA9IHBzdHJkdXAobmFtZSk7CisK KwlwYXRoc3BlYy0+bmFtZV9sb2NhdGlvbiA9IG5hbWVfbG9jYXRpb247CisJcGF0aHNwZWMtPmxv Y2F0aW9uID0gc3RyaW5nX2xvY2F0aW9uOworCisJcmV0dXJuIChOb2RlICopIHBhdGhzcGVjOwor fQorCisvKgorICogbWFrZUpzb25UYWJsZURlZmF1bHRQbGFuIC0KKyAqCSAgIGNyZWF0ZXMgYSBK c29uVGFibGVQbGFuU3BlYyBub2RlIHRvIHJlcHJlc2VudCBhICJkZWZhdWx0IiBKU09OX1RBQkxF IHBsYW4KKyAqCSAgIHdpdGggZ2l2ZW4gam9pbiBzdHJhdGVneQorICovCitOb2RlICoKK21ha2VK c29uVGFibGVEZWZhdWx0UGxhbihKc29uVGFibGVQbGFuSm9pblR5cGUgam9pbl90eXBlLCBpbnQg bG9jYXRpb24pCit7CisJSnNvblRhYmxlUGxhblNwZWMgKm4gPSBtYWtlTm9kZShKc29uVGFibGVQ bGFuU3BlYyk7CisKKwluLT5wbGFuX3R5cGUgPSBKU1RQX0RFRkFVTFQ7CisJbi0+am9pbl90eXBl ID0gam9pbl90eXBlOworCW4tPmxvY2F0aW9uID0gbG9jYXRpb247CisKKwlyZXR1cm4gKE5vZGUg KikgbjsKK30KKworLyoKKyAqIG1ha2VKc29uVGFibGVTaW1wbGVQbGFuIC0KKyAqCSAgIGNyZWF0 ZXMgYSBKc29uVGFibGVQbGFuU3BlYyBub2RlIHRvIHJlcHJlc2VudCBhICJzaW1wbGUiIEpTT05f VEFCTEUgcGxhbgorICoJICAgZm9yIGdpdmVuIFBBVEgKKyAqLworTm9kZSAqCittYWtlSnNvblRh YmxlU2ltcGxlUGxhbihjaGFyICpwYXRobmFtZSwgaW50IGxvY2F0aW9uKQoreworCUpzb25UYWJs ZVBsYW5TcGVjICpuID0gbWFrZU5vZGUoSnNvblRhYmxlUGxhblNwZWMpOworCisJbi0+cGxhbl90 eXBlID0gSlNUUF9TSU1QTEU7CisJbi0+cGF0aG5hbWUgPSBwYXRobmFtZTsKKwluLT5sb2NhdGlv biA9IGxvY2F0aW9uOworCisJcmV0dXJuIChOb2RlICopIG47Cit9CisKKy8qCisgKiBtYWtlSnNv blRhYmxlSm9pbmVkUGxhbiAtCisgKgkgICBjcmVhdGVzIGEgSnNvblRhYmxlUGxhblNwZWMgbm9k ZSB0byByZXByZXNlbnQgam9pbiBiZXR3ZWVuIHRoZSBnaXZlbgorICoJICAgcGFpciBvZiBwbGFu cworICovCitOb2RlICoKK21ha2VKc29uVGFibGVKb2luZWRQbGFuKEpzb25UYWJsZVBsYW5Kb2lu VHlwZSB0eXBlLCBOb2RlICpwbGFuMSwgTm9kZSAqcGxhbjIsCisJCQkJCQlpbnQgbG9jYXRpb24p Cit7CisJSnNvblRhYmxlUGxhblNwZWMgKm4gPSBtYWtlTm9kZShKc29uVGFibGVQbGFuU3BlYyk7 CisKKwluLT5wbGFuX3R5cGUgPSBKU1RQX0pPSU5FRDsKKwluLT5qb2luX3R5cGUgPSB0eXBlOwor CW4tPnBsYW4xID0gY2FzdE5vZGUoSnNvblRhYmxlUGxhblNwZWMsIHBsYW4xKTsKKwluLT5wbGFu MiA9IGNhc3ROb2RlKEpzb25UYWJsZVBsYW5TcGVjLCBwbGFuMik7CisJbi0+bG9jYXRpb24gPSBs b2NhdGlvbjsKKworCXJldHVybiAoTm9kZSAqKSBuOworfQorCiAvKgogICogbWFrZUpzb25LZXlW YWx1ZSAtCiAgKgkgIGNyZWF0ZXMgYSBKc29uS2V5VmFsdWUgbm9kZQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvbm9kZXMvbm9kZUZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9ub2RlRnVuY3Mu YwppbmRleCBhZWZkY2RiOWVjLi45M2QwOTQ1MGQ1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9u b2Rlcy9ub2RlRnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9ub2RlRnVuY3MuYwpAQCAt MjY0NCw2ICsyNjQ0LDEwIEBAIGV4cHJlc3Npb25fdHJlZV93YWxrZXJfaW1wbChOb2RlICpub2Rl LAogCQkJCQlyZXR1cm4gdHJ1ZTsKIAkJCQlpZiAoV0FMSyh0Zi0+Y29sZGVmZXhwcnMpKQogCQkJ CQlyZXR1cm4gdHJ1ZTsKKwkJCQlpZiAoV0FMSyh0Zi0+Y29sdmFsZXhwcnMpKQorCQkJCQlyZXR1 cm4gdHJ1ZTsKKwkJCQlpZiAoV0FMSyh0Zi0+cGFzc2luZ3ZhbGV4cHJzKSkKKwkJCQkJcmV0dXJu IHRydWU7CiAJCQl9CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKQEAgLTM2OTQsNiArMzY5OCw4IEBA IGV4cHJlc3Npb25fdHJlZV9tdXRhdG9yX2ltcGwoTm9kZSAqbm9kZSwKIAkJCQlNVVRBVEUobmV3 bm9kZS0+cm93ZXhwciwgdGYtPnJvd2V4cHIsIE5vZGUgKik7CiAJCQkJTVVUQVRFKG5ld25vZGUt PmNvbGV4cHJzLCB0Zi0+Y29sZXhwcnMsIExpc3QgKik7CiAJCQkJTVVUQVRFKG5ld25vZGUtPmNv bGRlZmV4cHJzLCB0Zi0+Y29sZGVmZXhwcnMsIExpc3QgKik7CisJCQkJTVVUQVRFKG5ld25vZGUt PmNvbHZhbGV4cHJzLCB0Zi0+Y29sdmFsZXhwcnMsIExpc3QgKik7CisJCQkJTVVUQVRFKG5ld25v ZGUtPnBhc3Npbmd2YWxleHBycywgdGYtPnBhc3Npbmd2YWxleHBycywgTGlzdCAqKTsKIAkJCQly ZXR1cm4gKE5vZGUgKikgbmV3bm9kZTsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtNDExOCw2ICs0MTI0 LDM4IEBAIHJhd19leHByZXNzaW9uX3RyZWVfd2Fsa2VyX2ltcGwoTm9kZSAqbm9kZSwKIAkJCQkJ cmV0dXJuIHRydWU7CiAJCQl9CiAJCQlicmVhazsKKwkJY2FzZSBUX0pzb25UYWJsZToKKwkJCXsK KwkJCQlKc29uVGFibGUgICpqdCA9IChKc29uVGFibGUgKikgbm9kZTsKKworCQkJCWlmIChXQUxL KGp0LT5jb250ZXh0X2l0ZW0pKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQlpZiAoV0FMSyhqdC0+ cGF0aHNwZWMpKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQlpZiAoV0FMSyhqdC0+cGFzc2luZykp CisJCQkJCXJldHVybiB0cnVlOworCQkJCWlmIChXQUxLKGp0LT5jb2x1bW5zKSkKKwkJCQkJcmV0 dXJuIHRydWU7CisJCQkJaWYgKFdBTEsoanQtPm9uX2Vycm9yKSkKKwkJCQkJcmV0dXJuIHRydWU7 CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBUX0pzb25UYWJsZUNvbHVtbjoKKwkJCXsKKwkJCQlK c29uVGFibGVDb2x1bW4gKmp0YyA9IChKc29uVGFibGVDb2x1bW4gKikgbm9kZTsKKworCQkJCWlm IChXQUxLKGp0Yy0+dHlwZU5hbWUpKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQlpZiAoV0FMSyhq dGMtPm9uX2VtcHR5KSkKKwkJCQkJcmV0dXJuIHRydWU7CisJCQkJaWYgKFdBTEsoanRjLT5vbl9l cnJvcikpCisJCQkJCXJldHVybiB0cnVlOworCQkJCWlmIChqdGMtPmNvbHR5cGUgPT0gSlRDX05F U1RFRCAmJiBXQUxLKGp0Yy0+Y29sdW1ucykpCisJCQkJCXJldHVybiB0cnVlOworCQkJfQorCQkJ YnJlYWs7CisJCWNhc2UgVF9Kc29uVGFibGVQYXRoU3BlYzoKKwkJCXJldHVybiBXQUxLKCgoSnNv blRhYmxlUGF0aFNwZWMgKikgbm9kZSktPnN0cmluZyk7CiAJCWNhc2UgVF9OdWxsVGVzdDoKIAkJ CXJldHVybiBXQUxLKCgoTnVsbFRlc3QgKikgbm9kZSktPmFyZyk7CiAJCWNhc2UgVF9Cb29sZWFu VGVzdDoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9NYWtlZmlsZSBiL3NyYy9iYWNr ZW5kL3BhcnNlci9NYWtlZmlsZQppbmRleCA0MDFjMTY2ODZjLi4zMTYyYTAxZjMwIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvTWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2Vy L01ha2VmaWxlCkBAIC0yMyw2ICsyMyw3IEBAIE9CSlMgPSBcCiAJcGFyc2VfZW5yLm8gXAogCXBh cnNlX2V4cHIubyBcCiAJcGFyc2VfZnVuYy5vIFwKKwlwYXJzZV9qc29udGFibGUubyBcCiAJcGFy c2VfbWVyZ2UubyBcCiAJcGFyc2Vfbm9kZS5vIFwKIAlwYXJzZV9vcGVyLm8gXApkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueSBiL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkK aW5kZXggYzI0N2VlZmIwYy4uZWVmMGUxYzI5NCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFy c2VyL2dyYW0ueQorKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55CkBAIC0xNzAsNyArMTcw LDYgQEAgc3RhdGljIHZvaWQgdXBkYXRlUmF3U3RtdEVuZChSYXdTdG10ICpycywgaW50IGVuZF9s b2NhdGlvbik7CiBzdGF0aWMgTm9kZSAqbWFrZUNvbHVtblJlZihjaGFyICpjb2xuYW1lLCBMaXN0 ICppbmRpcmVjdGlvbiwKIAkJCQkJCSAgIGludCBsb2NhdGlvbiwgY29yZV95eXNjYW5fdCB5eXNj YW5uZXIpOwogc3RhdGljIE5vZGUgKm1ha2VUeXBlQ2FzdChOb2RlICphcmcsIFR5cGVOYW1lICp0 eXBlbmFtZSwgaW50IGxvY2F0aW9uKTsKLXN0YXRpYyBOb2RlICptYWtlU3RyaW5nQ29uc3QoY2hh ciAqc3RyLCBpbnQgbG9jYXRpb24pOwogc3RhdGljIE5vZGUgKm1ha2VTdHJpbmdDb25zdENhc3Qo Y2hhciAqc3RyLCBpbnQgbG9jYXRpb24sIFR5cGVOYW1lICp0eXBlbmFtZSk7CiBzdGF0aWMgTm9k ZSAqbWFrZUludENvbnN0KGludCB2YWwsIGludCBsb2NhdGlvbik7CiBzdGF0aWMgTm9kZSAqbWFr ZUZsb2F0Q29uc3QoY2hhciAqc3RyLCBpbnQgbG9jYXRpb24pOwpAQCAtNjU2LDE1ICs2NTUsMzEg QEAgc3RhdGljIE5vZGUgKm1ha2VSZWN1cnNpdmVWaWV3U2VsZWN0KGNoYXIgKnJlbG5hbWUsIExp c3QgKmFsaWFzZXMsIE5vZGUgKnF1ZXJ5KTsKIAkJCQlqc29uX2FyZ3VtZW50CiAJCQkJanNvbl9i ZWhhdmlvcgogCQkJCWpzb25fb25fZXJyb3JfY2xhdXNlX29wdAorCQkJCWpzb25fdGFibGUKKwkJ CQlqc29uX3RhYmxlX2NvbHVtbl9kZWZpbml0aW9uCisJCQkJanNvbl90YWJsZV9jb2x1bW5fcGF0 aF9jbGF1c2Vfb3B0CisJCQkJanNvbl90YWJsZV9wbGFuX2NsYXVzZV9vcHQKKwkJCQlqc29uX3Rh YmxlX3BsYW4KKwkJCQlqc29uX3RhYmxlX3BsYW5fc2ltcGxlCisJCQkJanNvbl90YWJsZV9wbGFu X291dGVyCisJCQkJanNvbl90YWJsZV9wbGFuX2lubmVyCisJCQkJanNvbl90YWJsZV9wbGFuX3Vu aW9uCisJCQkJanNvbl90YWJsZV9wbGFuX2Nyb3NzCisJCQkJanNvbl90YWJsZV9wbGFuX3ByaW1h cnkKICV0eXBlIDxsaXN0Pglqc29uX25hbWVfYW5kX3ZhbHVlX2xpc3QKIAkJCQlqc29uX3ZhbHVl X2V4cHJfbGlzdAogCQkJCWpzb25fYXJyYXlfYWdncmVnYXRlX29yZGVyX2J5X2NsYXVzZV9vcHQK IAkJCQlqc29uX2FyZ3VtZW50cwogCQkJCWpzb25fYmVoYXZpb3JfY2xhdXNlX29wdAogCQkJCWpz b25fcGFzc2luZ19jbGF1c2Vfb3B0CisJCQkJanNvbl90YWJsZV9jb2x1bW5fZGVmaW5pdGlvbl9s aXN0CisldHlwZSA8c3RyPgkJanNvbl90YWJsZV9wYXRoX25hbWVfb3B0CiAldHlwZSA8aXZhbD4J anNvbl9iZWhhdmlvcl90eXBlCiAJCQkJanNvbl9wcmVkaWNhdGVfdHlwZV9jb25zdHJhaW50CiAJ CQkJanNvbl9xdW90ZXNfY2xhdXNlX29wdAorCQkJCWpzb25fdGFibGVfZGVmYXVsdF9wbGFuX2No b2ljZXMKKwkJCQlqc29uX3RhYmxlX2RlZmF1bHRfcGxhbl9pbm5lcl9vdXRlcgorCQkJCWpzb25f dGFibGVfZGVmYXVsdF9wbGFuX3VuaW9uX2Nyb3NzCiAJCQkJanNvbl93cmFwcGVyX2JlaGF2aW9y CiAldHlwZSA8Ym9vbGVhbj4JanNvbl9rZXlfdW5pcXVlbmVzc19jb25zdHJhaW50X29wdAogCQkJ CWpzb25fb2JqZWN0X2NvbnN0cnVjdG9yX251bGxfY2xhdXNlX29wdApAQCAtNzM0LDcgKzc0OSw3 IEBAIHN0YXRpYyBOb2RlICptYWtlUmVjdXJzaXZlVmlld1NlbGVjdChjaGFyICpyZWxuYW1lLCBM aXN0ICphbGlhc2VzLCBOb2RlICpxdWVyeSk7CiAJSU5URVJTRUNUIElOVEVSVkFMIElOVE8gSU5W T0tFUiBJUyBJU05VTEwgSVNPTEFUSU9OCiAKIAlKT0lOIEpTT04gSlNPTl9BUlJBWSBKU09OX0FS UkFZQUdHIEpTT05fRVhJU1RTIEpTT05fT0JKRUNUIEpTT05fT0JKRUNUQUdHCi0JSlNPTl9RVUVS WSBKU09OX1NDQUxBUiBKU09OX1NFUklBTElaRSBKU09OX1ZBTFVFCisJSlNPTl9RVUVSWSBKU09O X1NDQUxBUiBKU09OX1NFUklBTElaRSBKU09OX1RBQkxFIEpTT05fVkFMVUUKIAogCUtFRVAgS0VZ IEtFWVMKIApAQCAtNzQ1LDggKzc2MCw4IEBAIHN0YXRpYyBOb2RlICptYWtlUmVjdXJzaXZlVmll d1NlbGVjdChjaGFyICpyZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpxdWVyeSk7CiAJTUFQ UElORyBNQVRDSCBNQVRDSEVEIE1BVEVSSUFMSVpFRCBNQVhWQUxVRSBNRVJHRSBNRVJHRV9BQ1RJ T04gTUVUSE9ECiAJTUlOVVRFX1AgTUlOVkFMVUUgTU9ERSBNT05USF9QIE1PVkUKIAotCU5BTUVf UCBOQU1FUyBOQVRJT05BTCBOQVRVUkFMIE5DSEFSIE5FVyBORVhUIE5GQyBORkQgTkZLQyBORktE IE5PIE5PTkUKLQlOT1JNQUxJWkUgTk9STUFMSVpFRAorCU5BTUVfUCBOQU1FUyBOQVRJT05BTCBO QVRVUkFMIE5DSEFSIE5FU1RFRCBORVcgTkVYVCBORkMgTkZEIE5GS0MgTkZLRCBOTworCU5PTkUg Tk9STUFMSVpFIE5PUk1BTElaRUQKIAlOT1QgTk9USElORyBOT1RJRlkgTk9UTlVMTCBOT1dBSVQg TlVMTF9QIE5VTExJRgogCU5VTExTX1AgTlVNRVJJQwogCkBAIC03NTQsOCArNzY5LDggQEAgc3Rh dGljIE5vZGUgKm1ha2VSZWN1cnNpdmVWaWV3U2VsZWN0KGNoYXIgKnJlbG5hbWUsIExpc3QgKmFs aWFzZXMsIE5vZGUgKnF1ZXJ5KTsKIAlPUkRFUiBPUkRJTkFMSVRZIE9USEVSUyBPVVRfUCBPVVRF Ul9QCiAJT1ZFUiBPVkVSTEFQUyBPVkVSTEFZIE9WRVJSSURJTkcgT1dORUQgT1dORVIKIAotCVBB UkFMTEVMIFBBUkFNRVRFUiBQQVJTRVIgUEFSVElBTCBQQVJUSVRJT04gUEFTU0lORyBQQVNTV09S RAotCVBMQUNJTkcgUExBTlMgUE9MSUNZCisJUEFSQUxMRUwgUEFSQU1FVEVSIFBBUlNFUiBQQVJU SUFMIFBBUlRJVElPTiBQQVNTSU5HIFBBU1NXT1JEIFBBVEgKKwlQTEFDSU5HIFBMQU4gUExBTlMg UE9MSUNZCiAJUE9TSVRJT04gUFJFQ0VESU5HIFBSRUNJU0lPTiBQUkVTRVJWRSBQUkVQQVJFIFBS RVBBUkVEIFBSSU1BUlkKIAlQUklPUiBQUklWSUxFR0VTIFBST0NFRFVSQUwgUFJPQ0VEVVJFIFBS T0NFRFVSRVMgUFJPR1JBTSBQVUJMSUNBVElPTgogCkBAIC04NzMsMTAgKzg4OCwxMyBAQCBzdGF0 aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFtZSwgTGlzdCAqYWxp YXNlcywgTm9kZSAqcXVlcnkpOwogICogdGhlIHNhbWUgcHJlY2VkZW5jZSBhcyBJREVOVC4gIFRo aXMgYWxsb3dzIHJlc29sdmluZyBjb25mbGljdHMgaW4gdGhlCiAgKiBqc29uX3ByZWRpY2F0ZV90 eXBlX2NvbnN0cmFpbnQgYW5kIGpzb25fa2V5X3VuaXF1ZW5lc3NfY29uc3RyYWludF9vcHQKICAq IHByb2R1Y3Rpb25zIChzZWUgY29tbWVudHMgdGhlcmUpLgorICoKKyAqIExpa2UgdGhlIFVOQk9V TkRFRCBQUkVDRURJTkcvRk9MTE9XSU5HIGNhc2UsIE5FU1RFRCBpcyBhc3NpZ25lZCBhIGxvd2Vy CisgKiBwcmVjZWRlbmNlIHRoYW4gUEFUSCB0byBmaXggYW1iaWd1aXR5IGluIHRoZSBqc29uX3Rh YmxlIHByb2R1Y3Rpb24uCiAgKi8KLSVub25hc3NvYwlVTkJPVU5ERUQJCS8qIGlkZWFsbHkgd291 bGQgaGF2ZSBzYW1lIHByZWNlZGVuY2UgYXMgSURFTlQgKi8KKyVub25hc3NvYwlVTkJPVU5ERUQg TkVTVEVEIC8qIGlkZWFsbHkgd291bGQgaGF2ZSBzYW1lIHByZWNlZGVuY2UgYXMgSURFTlQgKi8K ICVub25hc3NvYwlJREVOVCBQQVJUSVRJT04gUkFOR0UgUk9XUyBHUk9VUFMgUFJFQ0VESU5HIEZP TExPV0lORyBDVUJFIFJPTExVUAotCQkJU0VUIEtFWVMgT0JKRUNUX1AgU0NBTEFSIFZBTFVFX1Ag V0lUSCBXSVRIT1VUCisJCQlTRVQgS0VZUyBPQkpFQ1RfUCBTQ0FMQVIgVkFMVUVfUCBXSVRIIFdJ VEhPVVQgUEFUSAogJWxlZnQJCU9wIE9QRVJBVE9SCQkvKiBtdWx0aS1jaGFyYWN0ZXIgb3BzIGFu ZCB1c2VyLWRlZmluZWQgb3BlcmF0b3JzICovCiAlbGVmdAkJJysnICctJwogJWxlZnQJCScqJyAn LycgJyUnCkBAIC04OTcsNyArOTE1LDYgQEAgc3RhdGljIE5vZGUgKm1ha2VSZWN1cnNpdmVWaWV3 U2VsZWN0KGNoYXIgKnJlbG5hbWUsIExpc3QgKmFsaWFzZXMsIE5vZGUgKnF1ZXJ5KTsKICAqIGxl ZnQtYXNzb2NpYXRpdml0eSBhbW9uZyB0aGUgSk9JTiBydWxlcyB0aGVtc2VsdmVzLgogICovCiAl bGVmdAkJSk9JTiBDUk9TUyBMRUZUIEZVTEwgUklHSFQgSU5ORVJfUCBOQVRVUkFMCi0KICUlCiAK IC8qCkBAIC0xMzQ1Myw2ICsxMzQ3MCwyMSBAQCB0YWJsZV9yZWY6CXJlbGF0aW9uX2V4cHIgb3B0 X2FsaWFzX2NsYXVzZQogCQkJCQkkMi0+YWxpYXMgPSAkNDsKIAkJCQkJJCQgPSAoTm9kZSAqKSAk MjsKIAkJCQl9CisJCQl8IGpzb25fdGFibGUgb3B0X2FsaWFzX2NsYXVzZQorCQkJCXsKKwkJCQkJ SnNvblRhYmxlICAqanQgPSBjYXN0Tm9kZShKc29uVGFibGUsICQxKTsKKworCQkJCQlqdC0+YWxp YXMgPSAkMjsKKwkJCQkJJCQgPSAoTm9kZSAqKSBqdDsKKwkJCQl9CisJCQl8IExBVEVSQUxfUCBq c29uX3RhYmxlIG9wdF9hbGlhc19jbGF1c2UKKwkJCQl7CisJCQkJCUpzb25UYWJsZSAgKmp0ID0g Y2FzdE5vZGUoSnNvblRhYmxlLCAkMik7CisKKwkJCQkJanQtPmFsaWFzID0gJDM7CisJCQkJCWp0 LT5sYXRlcmFsID0gdHJ1ZTsKKwkJCQkJJCQgPSAoTm9kZSAqKSBqdDsKKwkJCQl9CiAJCTsKIAog CkBAIC0xNDAyMCw2ICsxNDA1Miw4IEBAIHhtbHRhYmxlX2NvbHVtbl9vcHRpb25fZWw6CiAJCQkJ eyAkJCA9IG1ha2VEZWZFbGVtKCJpc19ub3RfbnVsbCIsIChOb2RlICopIG1ha2VCb29sZWFuKHRy dWUpLCBAMSk7IH0KIAkJCXwgTlVMTF9QCiAJCQkJeyAkJCA9IG1ha2VEZWZFbGVtKCJpc19ub3Rf bnVsbCIsIChOb2RlICopIG1ha2VCb29sZWFuKGZhbHNlKSwgQDEpOyB9CisJCQl8IFBBVEggYl9l eHByCisJCQkJeyAkJCA9IG1ha2VEZWZFbGVtKCJwYXRoIiwgJDIsIEAxKTsgfQogCQk7CiAKIHht bF9uYW1lc3BhY2VfbGlzdDoKQEAgLTE0MDQ4LDYgKzE0MDgyLDIzMyBAQCB4bWxfbmFtZXNwYWNl X2VsOgogCQkJCX0KIAkJOwogCitqc29uX3RhYmxlOgorCQkJSlNPTl9UQUJMRSAnKCcKKwkJCQlq c29uX3ZhbHVlX2V4cHIgJywnIGFfZXhwciBqc29uX3RhYmxlX3BhdGhfbmFtZV9vcHQKKwkJCQlq c29uX3Bhc3NpbmdfY2xhdXNlX29wdAorCQkJCUNPTFVNTlMgJygnIGpzb25fdGFibGVfY29sdW1u X2RlZmluaXRpb25fbGlzdCAnKScKKwkJCQlqc29uX3RhYmxlX3BsYW5fY2xhdXNlX29wdAorCQkJ CWpzb25fb25fZXJyb3JfY2xhdXNlX29wdAorCQkJJyknCisJCQkJeworCQkJCQlKc29uVGFibGUg Km4gPSBtYWtlTm9kZShKc29uVGFibGUpOworCQkJCQljaGFyCSAgKnBhdGhzdHJpbmc7CisKKwkJ CQkJbi0+Y29udGV4dF9pdGVtID0gKEpzb25WYWx1ZUV4cHIgKikgJDM7CisJCQkJCWlmICghSXNB KCQ1LCBBX0NvbnN0KSB8fAorCQkJCQkJY2FzdE5vZGUoQV9Db25zdCwgJDUpLT52YWwubm9kZS50 eXBlICE9IFRfU3RyaW5nKQorCQkJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCQkJZXJyY29kZShF UlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJCQkJCWVycm1zZygib25seSBzdHJp bmcgY29uc3RhbnRzIGFyZSBzdXBwb3J0ZWQgaW4gSlNPTl9UQUJMRSIKKwkJCQkJCQkJCSAgICIg cGF0aCBzcGVjaWZpY2F0aW9uIiksCisJCQkJCQkJCXBhcnNlcl9lcnJwb3NpdGlvbihANSkpOwor CQkJCQlwYXRoc3RyaW5nID0gY2FzdE5vZGUoQV9Db25zdCwgJDUpLT52YWwuc3ZhbC5zdmFsOwor CQkJCQluLT5wYXRoc3BlYyA9IChKc29uVGFibGVQYXRoU3BlYyAqKQorCQkJCQkJbWFrZUpzb25U YWJsZVBhdGhTcGVjKHBhdGhzdHJpbmcsICQ2LCBANSwgQDYpOworCQkJCQluLT5wYXNzaW5nID0g JDc7CisJCQkJCW4tPmNvbHVtbnMgPSAkMTA7CisJCQkJCW4tPnBsYW5zcGVjID0gKEpzb25UYWJs ZVBsYW5TcGVjICopICQxMjsKKwkJCQkJbi0+b25fZXJyb3IgPSAoSnNvbkJlaGF2aW9yICopICQx MzsKKwkJCQkJbi0+bG9jYXRpb24gPSBAMTsKKwkJCQkJJCQgPSAoTm9kZSAqKSBuOworCQkJCX0K KwkJOworCitqc29uX3RhYmxlX3BhdGhfbmFtZV9vcHQ6CisJCQlBUyBuYW1lCQkJeyAkJCA9ICQy OyB9CisJCQl8IC8qIGVtcHR5ICovCXsgJCQgPSBOVUxMOyB9CisJCTsKKworanNvbl90YWJsZV9j b2x1bW5fZGVmaW5pdGlvbl9saXN0OgorCQkJanNvbl90YWJsZV9jb2x1bW5fZGVmaW5pdGlvbgor CQkJCXsgJCQgPSBsaXN0X21ha2UxKCQxKTsgfQorCQkJfCBqc29uX3RhYmxlX2NvbHVtbl9kZWZp bml0aW9uX2xpc3QgJywnIGpzb25fdGFibGVfY29sdW1uX2RlZmluaXRpb24KKwkJCQl7ICQkID0g bGFwcGVuZCgkMSwgJDMpOyB9CisJCTsKKworanNvbl90YWJsZV9jb2x1bW5fZGVmaW5pdGlvbjoK KwkJCUNvbElkIEZPUiBPUkRJTkFMSVRZCisJCQkJeworCQkJCQlKc29uVGFibGVDb2x1bW4gKm4g PSBtYWtlTm9kZShKc29uVGFibGVDb2x1bW4pOworCisJCQkJCW4tPmNvbHR5cGUgPSBKVENfRk9S X09SRElOQUxJVFk7CisJCQkJCW4tPm5hbWUgPSAkMTsKKwkJCQkJbi0+bG9jYXRpb24gPSBAMTsK KwkJCQkJJCQgPSAoTm9kZSAqKSBuOworCQkJCX0KKwkJCXwgQ29sSWQgVHlwZW5hbWUKKwkJCQlq c29uX3RhYmxlX2NvbHVtbl9wYXRoX2NsYXVzZV9vcHQKKwkJCQlqc29uX3dyYXBwZXJfYmVoYXZp b3IKKwkJCQlqc29uX3F1b3Rlc19jbGF1c2Vfb3B0CisJCQkJanNvbl9iZWhhdmlvcl9jbGF1c2Vf b3B0CisJCQkJeworCQkJCQlKc29uVGFibGVDb2x1bW4gKm4gPSBtYWtlTm9kZShKc29uVGFibGVD b2x1bW4pOworCisJCQkJCW4tPmNvbHR5cGUgPSBKVENfUkVHVUxBUjsKKwkJCQkJbi0+bmFtZSA9 ICQxOworCQkJCQluLT50eXBlTmFtZSA9ICQyOworCQkJCQluLT5mb3JtYXQgPSBtYWtlSnNvbkZv cm1hdChKU19GT1JNQVRfREVGQVVMVCwgSlNfRU5DX0RFRkFVTFQsIC0xKTsKKwkJCQkJbi0+cGF0 aHNwZWMgPSAoSnNvblRhYmxlUGF0aFNwZWMgKikgJDM7CisJCQkJCW4tPndyYXBwZXIgPSAkNDsg LyogZGlzYWxsb3dlZCBkdXJpbmcgcGFyc2UtYW5hbHlzaXMhICovCisJCQkJCW4tPnF1b3RlcyA9 ICQ1OyAvKiBkaXNhbGxvd2VkIGR1cmluZyBwYXJzZS1hbmFseXNpcyEgKi8KKwkJCQkJbi0+b25f ZW1wdHkgPSAoSnNvbkJlaGF2aW9yICopIGxpbml0aWFsKCQ2KTsKKwkJCQkJbi0+b25fZXJyb3Ig PSAoSnNvbkJlaGF2aW9yICopIGxzZWNvbmQoJDYpOworCQkJCQluLT5sb2NhdGlvbiA9IEAxOwor CQkJCQkkJCA9IChOb2RlICopIG47CisJCQkJfQorCQkJfCBDb2xJZCBUeXBlbmFtZSBqc29uX2Zv cm1hdF9jbGF1c2UKKwkJCQlqc29uX3RhYmxlX2NvbHVtbl9wYXRoX2NsYXVzZV9vcHQKKwkJCQlq c29uX3dyYXBwZXJfYmVoYXZpb3IKKwkJCQlqc29uX3F1b3Rlc19jbGF1c2Vfb3B0CisJCQkJanNv bl9iZWhhdmlvcl9jbGF1c2Vfb3B0CisJCQkJeworCQkJCQlKc29uVGFibGVDb2x1bW4gKm4gPSBt YWtlTm9kZShKc29uVGFibGVDb2x1bW4pOworCisJCQkJCW4tPmNvbHR5cGUgPSBKVENfRk9STUFU VEVEOworCQkJCQluLT5uYW1lID0gJDE7CisJCQkJCW4tPnR5cGVOYW1lID0gJDI7CisJCQkJCW4t PmZvcm1hdCA9IChKc29uRm9ybWF0ICopICQzOworCQkJCQluLT5wYXRoc3BlYyA9IChKc29uVGFi bGVQYXRoU3BlYyAqKSAkNDsKKwkJCQkJbi0+d3JhcHBlciA9ICQ1OworCQkJCQluLT5xdW90ZXMg PSAkNjsKKwkJCQkJbi0+b25fZW1wdHkgPSAoSnNvbkJlaGF2aW9yICopIGxpbml0aWFsKCQ3KTsK KwkJCQkJbi0+b25fZXJyb3IgPSAoSnNvbkJlaGF2aW9yICopIGxzZWNvbmQoJDcpOworCQkJCQlu LT5sb2NhdGlvbiA9IEAxOworCQkJCQkkJCA9IChOb2RlICopIG47CisJCQkJfQorCQkJfCBDb2xJ ZCBUeXBlbmFtZQorCQkJCUVYSVNUUyBqc29uX3RhYmxlX2NvbHVtbl9wYXRoX2NsYXVzZV9vcHQK KwkJCQlqc29uX2JlaGF2aW9yX2NsYXVzZV9vcHQKKwkJCQl7CisJCQkJCUpzb25UYWJsZUNvbHVt biAqbiA9IG1ha2VOb2RlKEpzb25UYWJsZUNvbHVtbik7CisKKwkJCQkJbi0+Y29sdHlwZSA9IEpU Q19FWElTVFM7CisJCQkJCW4tPm5hbWUgPSAkMTsKKwkJCQkJbi0+dHlwZU5hbWUgPSAkMjsKKwkJ CQkJbi0+Zm9ybWF0ID0gbWFrZUpzb25Gb3JtYXQoSlNfRk9STUFUX0RFRkFVTFQsIEpTX0VOQ19E RUZBVUxULCAtMSk7CisJCQkJCW4tPndyYXBwZXIgPSBKU1dfTk9ORTsKKwkJCQkJbi0+cXVvdGVz ID0gSlNfUVVPVEVTX1VOU1BFQzsKKwkJCQkJbi0+cGF0aHNwZWMgPSAoSnNvblRhYmxlUGF0aFNw ZWMgKikgJDQ7CisJCQkJCW4tPm9uX2VtcHR5ID0gKEpzb25CZWhhdmlvciAqKSBsaW5pdGlhbCgk NSk7CisJCQkJCW4tPm9uX2Vycm9yID0gKEpzb25CZWhhdmlvciAqKSBsc2Vjb25kKCQ1KTsKKwkJ CQkJbi0+bG9jYXRpb24gPSBAMTsKKwkJCQkJJCQgPSAoTm9kZSAqKSBuOworCQkJCX0KKwkJCXwg TkVTVEVEIHBhdGhfb3B0IFNjb25zdAorCQkJCUNPTFVNTlMgJygnIGpzb25fdGFibGVfY29sdW1u X2RlZmluaXRpb25fbGlzdCAnKScKKwkJCQl7CisJCQkJCUpzb25UYWJsZUNvbHVtbiAqbiA9IG1h a2VOb2RlKEpzb25UYWJsZUNvbHVtbik7CisKKwkJCQkJbi0+Y29sdHlwZSA9IEpUQ19ORVNURUQ7 CisJCQkJCW4tPnBhdGhzcGVjID0gKEpzb25UYWJsZVBhdGhTcGVjICopCisJCQkJCQltYWtlSnNv blRhYmxlUGF0aFNwZWMoJDMsIE5VTEwsIEAzLCAtMSk7CisJCQkJCW4tPmNvbHVtbnMgPSAkNjsK KwkJCQkJbi0+bG9jYXRpb24gPSBAMTsKKwkJCQkJJCQgPSAoTm9kZSAqKSBuOworCQkJCX0KKwkJ CXwgTkVTVEVEIHBhdGhfb3B0IFNjb25zdCBBUyBuYW1lCisJCQkJQ09MVU1OUyAnKCcganNvbl90 YWJsZV9jb2x1bW5fZGVmaW5pdGlvbl9saXN0ICcpJworCQkJCXsKKwkJCQkJSnNvblRhYmxlQ29s dW1uICpuID0gbWFrZU5vZGUoSnNvblRhYmxlQ29sdW1uKTsKKworCQkJCQluLT5jb2x0eXBlID0g SlRDX05FU1RFRDsKKwkJCQkJbi0+cGF0aHNwZWMgPSAoSnNvblRhYmxlUGF0aFNwZWMgKikKKwkJ CQkJCW1ha2VKc29uVGFibGVQYXRoU3BlYygkMywgJDUsIEAzLCBANSk7CisJCQkJCW4tPmNvbHVt bnMgPSAkODsKKwkJCQkJbi0+bG9jYXRpb24gPSBAMTsKKwkJCQkJJCQgPSAoTm9kZSAqKSBuOwor CQkJCX0KKwkJOworCitwYXRoX29wdDoKKwkJCVBBVEgKKwkJCXwgLyogRU1QVFkgKi8KKwkJOwor Citqc29uX3RhYmxlX2NvbHVtbl9wYXRoX2NsYXVzZV9vcHQ6CisJCQlQQVRIIFNjb25zdAorCQkJ CXsgJCQgPSBtYWtlSnNvblRhYmxlUGF0aFNwZWMoJDIsIE5VTEwsIEAyLCAtMSk7IH0KKwkJCXwg LyogRU1QVFkgKi8KKwkJCQl7ICQkID0gTlVMTDsgfQorCQk7CisKK2pzb25fdGFibGVfcGxhbl9j bGF1c2Vfb3B0OgorCQkJUExBTiAnKCcganNvbl90YWJsZV9wbGFuICcpJworCQkJCXsgJCQgPSAk MzsgfQorCQkJfCBQTEFOIERFRkFVTFQgJygnIGpzb25fdGFibGVfZGVmYXVsdF9wbGFuX2Nob2lj ZXMgJyknCisJCQkJeyAkJCA9IG1ha2VKc29uVGFibGVEZWZhdWx0UGxhbigkNCwgQDEpOyB9CisJ CQl8IC8qIEVNUFRZICovCisJCQkJeyAkJCA9IE5VTEw7IH0KKwkJOworCitqc29uX3RhYmxlX3Bs YW46CisJCQlqc29uX3RhYmxlX3BsYW5fc2ltcGxlCisJCQl8IGpzb25fdGFibGVfcGxhbl9vdXRl cgorCQkJfCBqc29uX3RhYmxlX3BsYW5faW5uZXIKKwkJCXwganNvbl90YWJsZV9wbGFuX3VuaW9u CisJCQl8IGpzb25fdGFibGVfcGxhbl9jcm9zcworCQk7CisKK2pzb25fdGFibGVfcGxhbl9zaW1w bGU6CisJCQluYW1lCisJCQkJeyAkJCA9IG1ha2VKc29uVGFibGVTaW1wbGVQbGFuKCQxLCBAMSk7 IH0KKwkJOworCitqc29uX3RhYmxlX3BsYW5fb3V0ZXI6CisJCQlqc29uX3RhYmxlX3BsYW5fc2lt cGxlIE9VVEVSX1AganNvbl90YWJsZV9wbGFuX3ByaW1hcnkKKwkJCQl7ICQkID0gbWFrZUpzb25U YWJsZUpvaW5lZFBsYW4oSlNUUF9KT0lOX09VVEVSLCAkMSwgJDMsIEAxKTsgfQorCQk7CisKK2pz b25fdGFibGVfcGxhbl9pbm5lcjoKKwkJCWpzb25fdGFibGVfcGxhbl9zaW1wbGUgSU5ORVJfUCBq c29uX3RhYmxlX3BsYW5fcHJpbWFyeQorCQkJCXsgJCQgPSBtYWtlSnNvblRhYmxlSm9pbmVkUGxh bihKU1RQX0pPSU5fSU5ORVIsICQxLCAkMywgQDEpOyB9CisJCTsKKworanNvbl90YWJsZV9wbGFu X3VuaW9uOgorCQkJanNvbl90YWJsZV9wbGFuX3ByaW1hcnkgVU5JT04ganNvbl90YWJsZV9wbGFu X3ByaW1hcnkKKwkJCQl7ICQkID0gbWFrZUpzb25UYWJsZUpvaW5lZFBsYW4oSlNUUF9KT0lOX1VO SU9OLCAkMSwgJDMsIEAxKTsgfQorCQkJfCBqc29uX3RhYmxlX3BsYW5fdW5pb24gVU5JT04ganNv bl90YWJsZV9wbGFuX3ByaW1hcnkKKwkJCQl7ICQkID0gbWFrZUpzb25UYWJsZUpvaW5lZFBsYW4o SlNUUF9KT0lOX1VOSU9OLCAkMSwgJDMsIEAxKTsgfQorCQk7CisKK2pzb25fdGFibGVfcGxhbl9j cm9zczoKKwkJCWpzb25fdGFibGVfcGxhbl9wcmltYXJ5IENST1NTIGpzb25fdGFibGVfcGxhbl9w cmltYXJ5CisJCQkJeyAkJCA9IG1ha2VKc29uVGFibGVKb2luZWRQbGFuKEpTVFBfSk9JTl9DUk9T UywgJDEsICQzLCBAMSk7IH0KKwkJCXwganNvbl90YWJsZV9wbGFuX2Nyb3NzIENST1NTIGpzb25f dGFibGVfcGxhbl9wcmltYXJ5CisJCQkJeyAkJCA9IG1ha2VKc29uVGFibGVKb2luZWRQbGFuKEpT VFBfSk9JTl9DUk9TUywgJDEsICQzLCBAMSk7IH0KKwkJOworCitqc29uX3RhYmxlX3BsYW5fcHJp bWFyeToKKwkJCWpzb25fdGFibGVfcGxhbl9zaW1wbGUKKwkJCQl7ICQkID0gJDE7IH0KKwkJCXwg JygnIGpzb25fdGFibGVfcGxhbiAnKScKKwkJCQl7CisJCQkJCWNhc3ROb2RlKEpzb25UYWJsZVBs YW5TcGVjLCAkMiktPmxvY2F0aW9uID0gQDE7CisJCQkJCSQkID0gJDI7CisJCQkJfQorCQk7CisK K2pzb25fdGFibGVfZGVmYXVsdF9wbGFuX2Nob2ljZXM6CisJCQlqc29uX3RhYmxlX2RlZmF1bHRf cGxhbl9pbm5lcl9vdXRlcgorCQkJCXsgJCQgPSAkMSB8IEpTVFBfSk9JTl9VTklPTjsgfQorCQkJ fCBqc29uX3RhYmxlX2RlZmF1bHRfcGxhbl91bmlvbl9jcm9zcworCQkJCXsgJCQgPSAkMSB8IEpT VFBfSk9JTl9PVVRFUjsgfQorCQkJfCBqc29uX3RhYmxlX2RlZmF1bHRfcGxhbl9pbm5lcl9vdXRl ciAnLCcganNvbl90YWJsZV9kZWZhdWx0X3BsYW5fdW5pb25fY3Jvc3MKKwkJCQl7ICQkID0gJDEg fCAkMzsgfQorCQkJfCBqc29uX3RhYmxlX2RlZmF1bHRfcGxhbl91bmlvbl9jcm9zcyAnLCcganNv bl90YWJsZV9kZWZhdWx0X3BsYW5faW5uZXJfb3V0ZXIKKwkJCQl7ICQkID0gJDEgfCAkMzsgfQor CQk7CisKK2pzb25fdGFibGVfZGVmYXVsdF9wbGFuX2lubmVyX291dGVyOgorCQkJSU5ORVJfUAkJ CQkJCXsgJCQgPSBKU1RQX0pPSU5fSU5ORVI7IH0KKwkJCXwgT1VURVJfUAkJCQkJeyAkJCA9IEpT VFBfSk9JTl9PVVRFUjsgfQorCQk7CisKK2pzb25fdGFibGVfZGVmYXVsdF9wbGFuX3VuaW9uX2Ny b3NzOgorCQkJVU5JT04JCQkJCQl7ICQkID0gSlNUUF9KT0lOX1VOSU9OOyB9CisJCQl8IENST1NT CQkJCQkJeyAkJCA9IEpTVFBfSk9JTl9DUk9TUzsgfQorCQk7CisKIC8qKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKgogICoKICAqCVR5cGUgc3ludGF4CkBAIC0xNzQ1Nyw2ICsxNzcxOCw3IEBAIHVucmVzZXJ2 ZWRfa2V5d29yZDoKIAkJCXwgTU9WRQogCQkJfCBOQU1FX1AKIAkJCXwgTkFNRVMKKwkJCXwgTkVT VEVECiAJCQl8IE5FVwogCQkJfCBORVhUCiAJCQl8IE5GQwpAQCAtMTc0OTEsNiArMTc3NTMsOCBA QCB1bnJlc2VydmVkX2tleXdvcmQ6CiAJCQl8IFBBUlRJVElPTgogCQkJfCBQQVNTSU5HCiAJCQl8 IFBBU1NXT1JECisJCQl8IFBBVEgKKwkJCXwgUExBTgogCQkJfCBQTEFOUwogCQkJfCBQT0xJQ1kK IAkJCXwgUFJFQ0VESU5HCkBAIC0xNzY1NSw2ICsxNzkxOSw3IEBAIGNvbF9uYW1lX2tleXdvcmQ6 CiAJCQl8IEpTT05fUVVFUlkKIAkJCXwgSlNPTl9TQ0FMQVIKIAkJCXwgSlNPTl9TRVJJQUxJWkUK KwkJCXwgSlNPTl9UQUJMRQogCQkJfCBKU09OX1ZBTFVFCiAJCQl8IExFQVNUCiAJCQl8IE1FUkdF X0FDVElPTgpAQCAtMTgwMjQsNiArMTgyODksNyBAQCBiYXJlX2xhYmVsX2tleXdvcmQ6CiAJCQl8 IEpTT05fUVVFUlkKIAkJCXwgSlNPTl9TQ0FMQVIKIAkJCXwgSlNPTl9TRVJJQUxJWkUKKwkJCXwg SlNPTl9UQUJMRQogCQkJfCBKU09OX1ZBTFVFCiAJCQl8IEtFRVAKIAkJCXwgS0VZCkBAIC0xODA2 NCw2ICsxODMzMCw3IEBAIGJhcmVfbGFiZWxfa2V5d29yZDoKIAkJCXwgTkFUSU9OQUwKIAkJCXwg TkFUVVJBTAogCQkJfCBOQ0hBUgorCQkJfCBORVNURUQKIAkJCXwgTkVXCiAJCQl8IE5FWFQKIAkJ CXwgTkZDCkBAIC0xODEwOCw3ICsxODM3NSw5IEBAIGJhcmVfbGFiZWxfa2V5d29yZDoKIAkJCXwg UEFSVElUSU9OCiAJCQl8IFBBU1NJTkcKIAkJCXwgUEFTU1dPUkQKKwkJCXwgUEFUSAogCQkJfCBQ TEFDSU5HCisJCQl8IFBMQU4KIAkJCXwgUExBTlMKIAkJCXwgUE9MSUNZCiAJCQl8IFBPU0lUSU9O CkBAIC0xODM3NiwxOCArMTg2NDUsNiBAQCBtYWtlVHlwZUNhc3QoTm9kZSAqYXJnLCBUeXBlTmFt ZSAqdHlwZW5hbWUsIGludCBsb2NhdGlvbikKIAlyZXR1cm4gKE5vZGUgKikgbjsKIH0KIAotc3Rh dGljIE5vZGUgKgotbWFrZVN0cmluZ0NvbnN0KGNoYXIgKnN0ciwgaW50IGxvY2F0aW9uKQotewot CUFfQ29uc3QJICAgKm4gPSBtYWtlTm9kZShBX0NvbnN0KTsKLQotCW4tPnZhbC5zdmFsLnR5cGUg PSBUX1N0cmluZzsKLQluLT52YWwuc3ZhbC5zdmFsID0gc3RyOwotCW4tPmxvY2F0aW9uID0gbG9j YXRpb247Ci0KLSAgIHJldHVybiAoTm9kZSAqKSBuOwotfQotCiBzdGF0aWMgTm9kZSAqCiBtYWtl U3RyaW5nQ29uc3RDYXN0KGNoYXIgKnN0ciwgaW50IGxvY2F0aW9uLCBUeXBlTmFtZSAqdHlwZW5h bWUpCiB7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvbWVzb24uYnVpbGQgYi9zcmMv YmFja2VuZC9wYXJzZXIvbWVzb24uYnVpbGQKaW5kZXggOGU4Mjk1NjQwYi4uNTczZDcwYjNkMSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iYWNr ZW5kL3BhcnNlci9tZXNvbi5idWlsZApAQCAtMTAsNiArMTAsNyBAQCBiYWNrZW5kX3NvdXJjZXMg Kz0gZmlsZXMoCiAgICdwYXJzZV9lbnIuYycsCiAgICdwYXJzZV9leHByLmMnLAogICAncGFyc2Vf ZnVuYy5jJywKKyAgJ3BhcnNlX2pzb250YWJsZS5jJywKICAgJ3BhcnNlX21lcmdlLmMnLAogICAn cGFyc2Vfbm9kZS5jJywKICAgJ3BhcnNlX29wZXIuYycsCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9wYXJzZXIvcGFyc2VfY2xhdXNlLmMgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfY2xhdXNl LmMKaW5kZXggZDJhYzg2Nzc3Yy4uODE4ZGM1M2FlYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv cGFyc2VyL3BhcnNlX2NsYXVzZS5jCisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9jbGF1 c2UuYwpAQCAtNjk1LDcgKzY5NSwxMSBAQCB0cmFuc2Zvcm1SYW5nZVRhYmxlRnVuYyhQYXJzZVN0 YXRlICpwc3RhdGUsIFJhbmdlVGFibGVGdW5jICpydGYpCiAJY2hhcgkgICoqbmFtZXM7CiAJaW50 CQkJY29sbm87CiAKLQkvKiBDdXJyZW50bHkgb25seSBYTUxUQUJMRSBpcyBzdXBwb3J0ZWQgKi8K KwkvKgorCSAqIEN1cnJlbnRseSB3ZSBvbmx5IHN1cHBvcnQgWE1MVEFCTEUgaGVyZS4gIFNlZSB0 cmFuc2Zvcm1Kc29uVGFibGUoKSBmb3IKKwkgKiBKU09OX1RBQkxFIHN1cHBvcnQuCisJICovCisJ dGYtPmZ1bmN0eXBlID0gVEZUX1hNTFRBQkxFOwogCWNvbnN0cnVjdE5hbWUgPSAiWE1MVEFCTEUi OwogCWRvY1R5cGUgPSBYTUxPSUQ7CiAKQEAgLTExMDIsMTMgKzExMDYsMTcgQEAgdHJhbnNmb3Jt RnJvbUNsYXVzZUl0ZW0oUGFyc2VTdGF0ZSAqcHN0YXRlLCBOb2RlICpuLAogCQlydHItPnJ0aW5k ZXggPSBuc2l0ZW0tPnBfcnRpbmRleDsKIAkJcmV0dXJuIChOb2RlICopIHJ0cjsKIAl9Ci0JZWxz ZSBpZiAoSXNBKG4sIFJhbmdlVGFibGVGdW5jKSkKKwllbHNlIGlmIChJc0EobiwgUmFuZ2VUYWJs ZUZ1bmMpIHx8IElzQShuLCBKc29uVGFibGUpKQogCXsKIAkJLyogdGFibGUgZnVuY3Rpb24gaXMg bGlrZSBhIHBsYWluIHJlbGF0aW9uICovCiAJCVJhbmdlVGJsUmVmICpydHI7CiAJCVBhcnNlTmFt ZXNwYWNlSXRlbSAqbnNpdGVtOwogCi0JCW5zaXRlbSA9IHRyYW5zZm9ybVJhbmdlVGFibGVGdW5j KHBzdGF0ZSwgKFJhbmdlVGFibGVGdW5jICopIG4pOworCQlpZiAoSXNBKG4sIFJhbmdlVGFibGVG dW5jKSkKKwkJCW5zaXRlbSA9IHRyYW5zZm9ybVJhbmdlVGFibGVGdW5jKHBzdGF0ZSwgKFJhbmdl VGFibGVGdW5jICopIG4pOworCQllbHNlCisJCQluc2l0ZW0gPSB0cmFuc2Zvcm1Kc29uVGFibGUo cHN0YXRlLCAoSnNvblRhYmxlICopIG4pOworCiAJCSp0b3BfbnNpdGVtID0gbnNpdGVtOwogCQkq bmFtZXNwYWNlID0gbGlzdF9tYWtlMShuc2l0ZW0pOwogCQlydHIgPSBtYWtlTm9kZShSYW5nZVRi bFJlZik7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZXhwci5jIGIvc3Jj L2JhY2tlbmQvcGFyc2VyL3BhcnNlX2V4cHIuYwppbmRleCBhODk4NDQ5ZWQ0Li5hMTQ2YzgyYjRm IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZXhwci5jCisrKyBiL3NyYy9i YWNrZW5kL3BhcnNlci9wYXJzZV9leHByLmMKQEAgLTQyNDQsNyArNDI0NCw4IEBAIHRyYW5zZm9y bUpzb25TZXJpYWxpemVFeHByKFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvblNlcmlhbGl6ZUV4cHIg KmV4cHIpCiB9CiAKIC8qCi0gKiBUcmFuc2Zvcm0gSlNPTl9WQUxVRSwgSlNPTl9RVUVSWSwgSlNP Tl9FWElTVFMgZnVuY3Rpb25zIGludG8gYSBKc29uRXhwciBub2RlLgorICogVHJhbnNmb3JtIEpT T05fVkFMVUUsIEpTT05fUVVFUlksIEpTT05fRVhJU1RTLCBKU09OX1RBQkxFIGZ1bmN0aW9ucyBp bnRvCisgKiBhIEpzb25FeHByIG5vZGUuCiAgKi8KIHN0YXRpYyBOb2RlICoKIHRyYW5zZm9ybUpz b25GdW5jRXhwcihQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25GdW5jRXhwciAqZnVuYykKQEAgLTQy NjgsNiArNDI2OSw5IEBAIHRyYW5zZm9ybUpzb25GdW5jRXhwcihQYXJzZVN0YXRlICpwc3RhdGUs IEpzb25GdW5jRXhwciAqZnVuYykKIAkJCWZ1bmNfbmFtZSA9ICJKU09OX1ZBTFVFIjsKIAkJCWRl ZmF1bHRfZm9ybWF0ID0gSlNfRk9STUFUX0RFRkFVTFQ7CiAJCQlicmVhazsKKwkJY2FzZSBKU09O X1RBQkxFX09QOgorCQkJZnVuY19uYW1lID0gIkpTT05fVEFCTEUiOworCQkJYnJlYWs7CiAJCWRl ZmF1bHQ6CiAJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBKc29uRnVuY0V4cHIgb3AgJWQiLCAoaW50 KSBmdW5jLT5vcCk7CiAJCQlicmVhazsKQEAgLTQzNTQsNiArNDM1OCw0MiBAQCB0cmFuc2Zvcm1K c29uRnVuY0V4cHIoUGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29uRnVuY0V4cHIgKmZ1bmMpCiAJCQkJ anNleHByLT5yZXR1cm5pbmctPnR5cG1vZCA9IC0xOwogCQkJfQogCisJCQkvKiBKU09OX1RBQkxF KCkgQ09MVU1OUyBjYW4gc3BlY2lmeSBhIG5vbi1ib29sZWFuIHR5cGUuICovCisJCQlpZiAoanNl eHByLT5yZXR1cm5pbmctPnR5cGlkICE9IEJPT0xPSUQpCisJCQl7CisJCQkJTm9kZQkgICAqY29l cmNpb25fZXhwcjsKKwkJCQlDYXNlVGVzdEV4cHIgKnBsYWNlaG9sZGVyID0gbWFrZU5vZGUoQ2Fz ZVRlc3RFeHByKTsKKwkJCQlpbnQJCQlsb2NhdGlvbiA9IGV4cHJMb2NhdGlvbigoTm9kZSAqKSBq c2V4cHIpOworCisJCQkJLyoKKwkJCQkgKiBXZSBhYnVzZSBDYXNlVGVzdEV4cHIgaGVyZSBhcyBw bGFjZWhvbGRlciB0byBwYXNzIHRoZQorCQkJCSAqIHJlc3VsdCBvZiBldmFsdWF0aW5nIEpTT05f RVhJU1RTIHRvIHRoZSBjb2VyY2lvbgorCQkJCSAqIGV4cHJlc3Npb24uCisJCQkJICovCisJCQkJ cGxhY2Vob2xkZXItPnR5cGVJZCA9IEJPT0xPSUQ7CisJCQkJcGxhY2Vob2xkZXItPnR5cGVNb2Qg PSAtMTsKKwkJCQlwbGFjZWhvbGRlci0+Y29sbGF0aW9uID0gSW52YWxpZE9pZDsKKworCQkJCWNv ZXJjaW9uX2V4cHIgPQorCQkJCQljb2VyY2VfdG9fdGFyZ2V0X3R5cGUocHN0YXRlLCAoTm9kZSAq KSBwbGFjZWhvbGRlciwgQk9PTE9JRCwKKwkJCQkJCQkJCQkgIGpzZXhwci0+cmV0dXJuaW5nLT50 eXBpZCwKKwkJCQkJCQkJCQkgIGpzZXhwci0+cmV0dXJuaW5nLT50eXBtb2QsCisJCQkJCQkJCQkJ ICBDT0VSQ0lPTl9FWFBMSUNJVCwKKwkJCQkJCQkJCQkgIENPRVJDRV9JTVBMSUNJVF9DQVNULAor CQkJCQkJCQkJCSAgbG9jYXRpb24pOworCisJCQkJaWYgKGNvZXJjaW9uX2V4cHIgPT0gTlVMTCkK KwkJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCQkoZXJyY29kZShFUlJDT0RFX0NBTk5PVF9DT0VS Q0UpLAorCQkJCQkJCSBlcnJtc2coImNhbm5vdCBjYXN0IHR5cGUgJXMgdG8gJXMiLAorCQkJCQkJ CQkJZm9ybWF0X3R5cGVfYmUoQk9PTE9JRCksCisJCQkJCQkJCQlmb3JtYXRfdHlwZV9iZShqc2V4 cHItPnJldHVybmluZy0+dHlwaWQpKSwKKwkJCQkJCQkgcGFyc2VyX2NvZXJjaW9uX2VycnBvc2l0 aW9uKHBzdGF0ZSwgbG9jYXRpb24sIChOb2RlICopIGpzZXhwcikpKTsKKworCQkJCWlmIChjb2Vy Y2lvbl9leHByICE9IChOb2RlICopIHBsYWNlaG9sZGVyKQorCQkJCQlqc2V4cHItPmNvZXJjaW9u X2V4cHIgPSBjb2VyY2lvbl9leHByOworCQkJfQorCiAJCQlqc2V4cHItPm9uX2Vycm9yID0gdHJh bnNmb3JtSnNvbkJlaGF2aW9yKHBzdGF0ZSwgZnVuYy0+b25fZXJyb3IsCiAJCQkJCQkJCQkJCQkJ IEpTT05fQkVIQVZJT1JfRkFMU0UsCiAJCQkJCQkJCQkJCQkJIGpzZXhwci0+cmV0dXJuaW5nKTsK QEAgLTQ0MTksNiArNDQ1OSwxNyBAQCB0cmFuc2Zvcm1Kc29uRnVuY0V4cHIoUGFyc2VTdGF0ZSAq cHN0YXRlLCBKc29uRnVuY0V4cHIgKmZ1bmMpCiAJCQkJCQkJCQkJCQkJIGpzZXhwci0+cmV0dXJu aW5nKTsKIAkJCWJyZWFrOwogCisJCWNhc2UgSlNPTl9UQUJMRV9PUDoKKwkJCWlmICghT2lkSXNW YWxpZChqc2V4cHItPnJldHVybmluZy0+dHlwaWQpKQorCQkJeworCQkJCWpzZXhwci0+cmV0dXJu aW5nLT50eXBpZCA9IGV4cHJUeXBlKGpzZXhwci0+Zm9ybWF0dGVkX2V4cHIpOworCQkJCWpzZXhw ci0+cmV0dXJuaW5nLT50eXBtb2QgPSAtMTsKKwkJCX0KKwkJCWpzZXhwci0+b25fZXJyb3IgPSB0 cmFuc2Zvcm1Kc29uQmVoYXZpb3IocHN0YXRlLCBmdW5jLT5vbl9lcnJvciwKKwkJCQkJCQkJCQkJ CQkgSlNPTl9CRUhBVklPUl9FTVBUWSwKKwkJCQkJCQkJCQkJCQkganNleHByLT5yZXR1cm5pbmcp OworCQkJYnJlYWs7CisKIAkJZGVmYXVsdDoKIAkJCWVsb2coRVJST1IsICJpbnZhbGlkIEpzb25G dW5jRXhwciBvcCAlZCIsIChpbnQpIGZ1bmMtPm9wKTsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2pzb250YWJsZS5jIGIvc3JjL2JhY2tlbmQvcGFyc2Vy L3BhcnNlX2pzb250YWJsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAu LjBiZTlhYWJmNDgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2Vf anNvbnRhYmxlLmMKQEAgLTAsMCArMSw3MTcgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAq IHBhcnNlX2pzb250YWJsZS5jCisgKgkgIHBhcnNpbmcgb2YgSlNPTl9UQUJMRQorICoKKyAqIFBv cnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDI0LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9w bWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRo ZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKgorICogSURFTlRJRklDQVRJT04KKyAq CSAgc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2pzb250YWJsZS5jCisgKgorICotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJjYXRhbG9n L3BnX2NvbGxhdGlvbi5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgorI2luY2x1ZGUg Im1pc2NhZG1pbi5oIgorI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgorI2luY2x1ZGUgIm5v ZGVzL25vZGVGdW5jcy5oIgorI2luY2x1ZGUgIm9wdGltaXplci9vcHRpbWl6ZXIuaCIKKyNpbmNs dWRlICJwYXJzZXIvcGFyc2VfY2xhdXNlLmgiCisjaW5jbHVkZSAicGFyc2VyL3BhcnNlX2NvbGxh dGUuaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2VfZXhwci5oIgorI2luY2x1ZGUgInBhcnNlci9w YXJzZV9yZWxhdGlvbi5oIgorI2luY2x1ZGUgInBhcnNlci9wYXJzZV90eXBlLmgiCisjaW5jbHVk ZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9qc29uLmgiCisjaW5jbHVkZSAi dXRpbHMvbHN5c2NhY2hlLmgiCisKKy8qIENvbnRleHQgZm9yIEpTT05fVEFCTEUgdHJhbnNmb3Jt YXRpb24gKi8KK3R5cGVkZWYgc3RydWN0IEpzb25UYWJsZVBhcnNlQ29udGV4dAoreworCVBhcnNl U3RhdGUgKnBzdGF0ZTsJCQkvKiBwYXJzaW5nIHN0YXRlICovCisJSnNvblRhYmxlICAqdGFibGU7 CQkJLyogdW50cmFuc2Zvcm1lZCBub2RlICovCisJVGFibGVGdW5jICAqdGFibGVmdW5jOwkJLyog dHJhbnNmb3JtZWQgbm9kZQkqLworCUxpc3QJICAgKnBhdGhOYW1lczsJCS8qIGxpc3Qgb2YgYWxs IHBhdGggYW5kIGNvbHVtbnMgbmFtZXMgKi8KKwlpbnQJCQlwYXRoTmFtZUlkOwkJLyogcGF0aCBu YW1lIGlkIGNvdW50ZXIgKi8KKwlPaWQJCQljb250ZXh0SXRlbVR5cGlkOwkvKiB0eXBlIG9pZCBv ZiBjb250ZXh0IGl0ZW0gKGpzb24vanNvbmIpICovCit9CQkJSnNvblRhYmxlUGFyc2VDb250ZXh0 OworCitzdGF0aWMgSnNvblRhYmxlUGxhbiAqdHJhbnNmb3JtSnNvblRhYmxlQ29sdW1ucyhKc29u VGFibGVQYXJzZUNvbnRleHQgKiBjeHQsCisJCQkJCQkJCQkJCQlKc29uVGFibGVQbGFuU3BlYyAq cGxhbnNwZWMsCisJCQkJCQkJCQkJCQlMaXN0ICpjb2x1bW5zLAorCQkJCQkJCQkJCQkJSnNvblRh YmxlUGF0aFNwZWMgKnBhdGhzcGVjKTsKKworLyoKKyAqIFRyYW5zZm9ybSBKU09OX1RBQkxFIGNv bHVtbgorICogICAtIHJlZ3VsYXIgY29sdW1uIGludG8gSlNPTl9WQUxVRSgpCisgKiAgIC0gRk9S TUFUIEpTT04gY29sdW1uIGludG8gSlNPTl9RVUVSWSgpCisgKiAgIC0gRVhJU1RTIGNvbHVtbiBp bnRvIEpTT05fRVhJU1RTKCkKKyAqLworc3RhdGljIE5vZGUgKgordHJhbnNmb3JtSnNvblRhYmxl Q29sdW1uKEpzb25UYWJsZUNvbHVtbiAqanRjLCBOb2RlICpjb250ZXh0SXRlbUV4cHIsCisJCQkJ CQkgTGlzdCAqcGFzc2luZ0FyZ3MsIGJvb2wgZXJyb3JPbkVycm9yKQoreworCUpzb25GdW5jRXhw ciAqamZleHByID0gbWFrZU5vZGUoSnNvbkZ1bmNFeHByKTsKKwlOb2RlCSAgICpwYXRoc3BlYzsK KwlKc29uRm9ybWF0ICpkZWZhdWx0X2Zvcm1hdDsKKworCWlmIChqdGMtPmNvbHR5cGUgPT0gSlRD X1JFR1VMQVIpCisJCWpmZXhwci0+b3AgPSBKU09OX1ZBTFVFX09QOworCWVsc2UgaWYgKGp0Yy0+ Y29sdHlwZSA9PSBKVENfRVhJU1RTKQorCQlqZmV4cHItPm9wID0gSlNPTl9FWElTVFNfT1A7CisJ ZWxzZQorCQlqZmV4cHItPm9wID0gSlNPTl9RVUVSWV9PUDsKKwlqZmV4cHItPm91dHB1dCA9IG1h a2VOb2RlKEpzb25PdXRwdXQpOworCWpmZXhwci0+b25fZW1wdHkgPSBqdGMtPm9uX2VtcHR5Owor CWpmZXhwci0+b25fZXJyb3IgPSBqdGMtPm9uX2Vycm9yOworCWlmIChqZmV4cHItPm9uX2Vycm9y ID09IE5VTEwgJiYgZXJyb3JPbkVycm9yKQorCQlqZmV4cHItPm9uX2Vycm9yID0gbWFrZUpzb25C ZWhhdmlvcihKU09OX0JFSEFWSU9SX0VSUk9SLCBOVUxMLCAtMSk7CisJamZleHByLT5xdW90ZXMg PSBqdGMtPnF1b3RlczsKKwlqZmV4cHItPndyYXBwZXIgPSBqdGMtPndyYXBwZXI7CisJamZleHBy LT5sb2NhdGlvbiA9IGp0Yy0+bG9jYXRpb247CisKKwlqZmV4cHItPm91dHB1dC0+dHlwZU5hbWUg PSBqdGMtPnR5cGVOYW1lOworCWpmZXhwci0+b3V0cHV0LT5yZXR1cm5pbmcgPSBtYWtlTm9kZShK c29uUmV0dXJuaW5nKTsKKwlqZmV4cHItPm91dHB1dC0+cmV0dXJuaW5nLT5mb3JtYXQgPSBqdGMt PmZvcm1hdDsKKworCWRlZmF1bHRfZm9ybWF0ID0gbWFrZUpzb25Gb3JtYXQoSlNfRk9STUFUX0RF RkFVTFQsIEpTX0VOQ19ERUZBVUxULCAtMSk7CisKKwlpZiAoanRjLT5wYXRoc3BlYykKKwkJcGF0 aHNwZWMgPSAoTm9kZSAqKSBqdGMtPnBhdGhzcGVjLT5zdHJpbmc7CisJZWxzZQorCXsKKwkJLyog Q29uc3RydWN0IGRlZmF1bHQgcGF0aCBhcyAnJC4iY29sdW1uX25hbWUiJyAqLworCQlTdHJpbmdJ bmZvRGF0YSBwYXRoOworCisJCWluaXRTdHJpbmdJbmZvKCZwYXRoKTsKKworCQlhcHBlbmRTdHJp bmdJbmZvU3RyaW5nKCZwYXRoLCAiJC4iKTsKKwkJZXNjYXBlX2pzb24oJnBhdGgsIGp0Yy0+bmFt ZSk7CisKKwkJcGF0aHNwZWMgPSBtYWtlU3RyaW5nQ29uc3QocGF0aC5kYXRhLCAtMSk7CisJfQor CisJamZleHByLT5jb250ZXh0X2l0ZW0gPQltYWtlSnNvblZhbHVlRXhwcigoRXhwciAqKSBjb250 ZXh0SXRlbUV4cHIsIE5VTEwsCisJCQkJCQkJCQkJCSAgZGVmYXVsdF9mb3JtYXQpOworCWpmZXhw ci0+cGF0aHNwZWMgPSBwYXRoc3BlYzsKKwlqZmV4cHItPnBhdGhuYW1lID0gTlVMTDsKKwlqZmV4 cHItPnBhc3NpbmcgPSBwYXNzaW5nQXJnczsKKworCXJldHVybiAoTm9kZSAqKSBqZmV4cHI7Cit9 CisKKy8qCisgKiBSZWdpc3RlciBhIGNvbHVtbi9wYXRoIG5hbWUgaW4gdGhlIHBhdGggbmFtZSBs aXN0LCBmbGFnZ2luZyBpZiB0aGUgbmFtZSBpcworICogYWxyZWFkeSB0YWtlbiBieSBhbm90aGVy IGNvbHVtbi9wYXRoLgorICovCitzdGF0aWMgdm9pZAorcmVnaXN0ZXJKc29uVGFibGVDb2x1bW4o SnNvblRhYmxlUGFyc2VDb250ZXh0ICogY3h0LCBjaGFyICpjb2xuYW1lLAorCQkJCQkJaW50IGxv Y2F0aW9uKQoreworCUxpc3RDZWxsICAgKmxjOworCisJZm9yZWFjaChsYywgY3h0LT5wYXRoTmFt ZXMpCisJeworCQlpZiAoc3RyY21wKGNvbG5hbWUsIChjb25zdCBjaGFyICopIGxmaXJzdChsYykp ID09IDApCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQllcnJjb2RlKEVSUkNPREVfRFVQTElDQVRF X0FMSUFTKSwKKwkJCQkJZXJybXNnKCJkdXBsaWNhdGUgSlNPTl9UQUJMRSBjb2x1bW4gbmFtZTog JXMiLCBjb2xuYW1lKSwKKwkJCQkJcGFyc2VyX2VycnBvc2l0aW9uKGN4dC0+cHN0YXRlLCBsb2Nh dGlvbikpOworCX0KKworCWN4dC0+cGF0aE5hbWVzID0gbGFwcGVuZChjeHQtPnBhdGhOYW1lcywg Y29sbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkCityZWdpc3Rlckpzb25UYWJsZVBhdGgoSnNvblRh YmxlUGFyc2VDb250ZXh0ICogY3h0LCBjaGFyICpwYXRobmFtZSwKKwkJCQkJICBpbnQgbG9jYXRp b24pCit7CisJTGlzdENlbGwgICAqbGM7CisKKwlmb3JlYWNoKGxjLCBjeHQtPnBhdGhOYW1lcykK Kwl7CisJCWlmIChzdHJjbXAocGF0aG5hbWUsIChjb25zdCBjaGFyICopIGxmaXJzdChsYykpID09 IDApCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQllcnJjb2RlKEVSUkNPREVfRFVQTElDQVRFX0FM SUFTKSwKKwkJCQkJZXJybXNnKCJkdXBsaWNhdGUgSlNPTl9UQUJMRSBwYXRoIG5hbWU6ICVzIiwg cGF0aG5hbWUpLAorCQkJCQlwYXJzZXJfZXJycG9zaXRpb24oY3h0LT5wc3RhdGUsIGxvY2F0aW9u KSk7CisJfQorCisJY3h0LT5wYXRoTmFtZXMgPSBsYXBwZW5kKGN4dC0+cGF0aE5hbWVzLCBwYXRo bmFtZSk7Cit9CisKKy8qCisgKiBSZWN1cnNpdmVseSByZWdpc3RlciBhbGwgbmVzdGVkIGNvbHVt biBuYW1lcyBpbiB0aGUgc2hhcmVkIGNvbHVtbnMvcGF0aCBuYW1lCisgKiBsaXN0LgorICovCitz dGF0aWMgdm9pZAorcmVnaXN0ZXJBbGxKc29uVGFibGVDb2x1bW5zQW5kUGF0aHMoSnNvblRhYmxl UGFyc2VDb250ZXh0ICogY3h0LAorCQkJCQkJCQkJTGlzdCAqY29sdW1ucykKK3sKKwlMaXN0Q2Vs bCAgICpsYzsKKworCWZvcmVhY2gobGMsIGNvbHVtbnMpCisJeworCQlKc29uVGFibGVDb2x1bW4g Kmp0YyA9IGNhc3ROb2RlKEpzb25UYWJsZUNvbHVtbiwgbGZpcnN0KGxjKSk7CisKKwkJaWYgKGp0 Yy0+Y29sdHlwZSA9PSBKVENfTkVTVEVEKQorCQl7CisJCQlpZiAoanRjLT5wYXRoc3BlYy0+bmFt ZSkKKwkJCQlyZWdpc3Rlckpzb25UYWJsZVBhdGgoY3h0LCBqdGMtPnBhdGhzcGVjLT5uYW1lLAor CQkJCQkJCQkJICBqdGMtPnBhdGhzcGVjLT5uYW1lX2xvY2F0aW9uKTsKKworCQkJcmVnaXN0ZXJB bGxKc29uVGFibGVDb2x1bW5zQW5kUGF0aHMoY3h0LCBqdGMtPmNvbHVtbnMpOworCQl9CisJCWVs c2UKKwkJeworCQkJcmVnaXN0ZXJKc29uVGFibGVDb2x1bW4oY3h0LCBqdGMtPm5hbWUsIGp0Yy0+ bG9jYXRpb24pOworCQl9CisJfQorfQorCisvKiBHZW5lcmF0ZSBhIG5ldyB1bmlxdWUgSlNPTl9U QUJMRSBwYXRoIG5hbWUuICovCitzdGF0aWMgY2hhciAqCitnZW5lcmF0ZUpzb25UYWJsZVBhdGhO YW1lKEpzb25UYWJsZVBhcnNlQ29udGV4dCAqIGN4dCkKK3sKKwljaGFyCQluYW1lYnVmWzMyXTsK KwljaGFyCSAgICpuYW1lID0gbmFtZWJ1ZjsKKworCXNucHJpbnRmKG5hbWVidWYsIHNpemVvZihu YW1lYnVmKSwgImpzb25fdGFibGVfcGF0aF8lZCIsCisJCQkgY3h0LT5wYXRoTmFtZUlkKyspOwor CisJbmFtZSA9IHBzdHJkdXAobmFtZSk7CisJY3h0LT5wYXRoTmFtZXMgPSBsYXBwZW5kKGN4dC0+ cGF0aE5hbWVzLCBuYW1lKTsKKworCXJldHVybiBuYW1lOworfQorCisvKiBDb2xsZWN0IHNpYmxp bmcgcGF0aCBuYW1lcyBmcm9tIHBsYW4gdG8gdGhlIHNwZWNpZmllZCBsaXN0LiAqLworc3RhdGlj IHZvaWQKK2NvbGxlY3RTaWJsaW5nUGF0aHNJbkpzb25UYWJsZVBsYW4oSnNvblRhYmxlUGxhblNw ZWMgKnBsYW4sIExpc3QgKipwYXRocykKK3sKKwlpZiAocGxhbi0+cGxhbl90eXBlID09IEpTVFBf U0lNUExFKQorCQkqcGF0aHMgPSBsYXBwZW5kKCpwYXRocywgcGxhbi0+cGF0aG5hbWUpOworCWVs c2UgaWYgKHBsYW4tPnBsYW5fdHlwZSA9PSBKU1RQX0pPSU5FRCkKKwl7CisJCWlmIChwbGFuLT5q b2luX3R5cGUgPT0gSlNUUF9KT0lOX0lOTkVSIHx8CisJCQlwbGFuLT5qb2luX3R5cGUgPT0gSlNU UF9KT0lOX09VVEVSKQorCQl7CisJCQlBc3NlcnQocGxhbi0+cGxhbjEtPnBsYW5fdHlwZSA9PSBK U1RQX1NJTVBMRSk7CisJCQkqcGF0aHMgPSBsYXBwZW5kKCpwYXRocywgcGxhbi0+cGxhbjEtPnBh dGhuYW1lKTsKKwkJfQorCQllbHNlIGlmIChwbGFuLT5qb2luX3R5cGUgPT0gSlNUUF9KT0lOX0NS T1NTIHx8CisJCQkJIHBsYW4tPmpvaW5fdHlwZSA9PSBKU1RQX0pPSU5fVU5JT04pCisJCXsKKwkJ CWNvbGxlY3RTaWJsaW5nUGF0aHNJbkpzb25UYWJsZVBsYW4ocGxhbi0+cGxhbjEsIHBhdGhzKTsK KwkJCWNvbGxlY3RTaWJsaW5nUGF0aHNJbkpzb25UYWJsZVBsYW4ocGxhbi0+cGxhbjIsIHBhdGhz KTsKKwkJfQorCQllbHNlCisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBKU09OX1RBQkxFIGpvaW4g dHlwZSAlZCIsCisJCQkJIHBsYW4tPmpvaW5fdHlwZSk7CisJfQorfQorCisvKgorICogVmFsaWRh dGUgY2hpbGQgSlNPTl9UQUJMRSBwbGFuIGJ5IGNoZWNraW5nIHRoYXQ6CisgKiAgLSBhbGwgbmVz dGVkIGNvbHVtbnMgaGF2ZSBwYXRoIG5hbWVzIHNwZWNpZmllZAorICogIC0gYWxsIG5lc3RlZCBj b2x1bW5zIGhhdmUgY29ycmVzcG9uZGluZyBub2RlIGluIHRoZSBzaWJsaW5nIHBsYW4KKyAqICAt IHBsYW4gZG9lcyBub3QgY29udGFpbiBkdXBsaWNhdGUgb3IgZXh0cmEgbm9kZXMKKyAqLworc3Rh dGljIHZvaWQKK3ZhbGlkYXRlSnNvblRhYmxlQ2hpbGRQbGFuKFBhcnNlU3RhdGUgKnBzdGF0ZSwg SnNvblRhYmxlUGxhblNwZWMgKnBsYW4sCisJCQkJCQkgICBMaXN0ICpjb2x1bW5zKQoreworCUxp c3RDZWxsICAgKmxjMTsKKwlMaXN0CSAgICpzaWJsaW5ncyA9IE5JTDsKKwlpbnQJCQluY2hpbGRy ZW4gPSAwOworCisJaWYgKHBsYW4pCisJCWNvbGxlY3RTaWJsaW5nUGF0aHNJbkpzb25UYWJsZVBs YW4ocGxhbiwgJnNpYmxpbmdzKTsKKworCWZvcmVhY2gobGMxLCBjb2x1bW5zKQorCXsKKwkJSnNv blRhYmxlQ29sdW1uICpqdGMgPSBjYXN0Tm9kZShKc29uVGFibGVDb2x1bW4sIGxmaXJzdChsYzEp KTsKKworCQlpZiAoanRjLT5jb2x0eXBlID09IEpUQ19ORVNURUQpCisJCXsKKwkJCUxpc3RDZWxs ICAgKmxjMjsKKwkJCWJvb2wJCWZvdW5kID0gZmFsc2U7CisKKwkJCWlmIChqdGMtPnBhdGhzcGVj LT5uYW1lID09IE5VTEwpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCWVycmNvZGUoRVJSQ09E RV9TWU5UQVhfRVJST1IpLAorCQkJCQkJZXJybXNnKCJuZXN0ZWQgSlNPTl9UQUJMRSBjb2x1bW5z IG11c3QgY29udGFpbiIKKwkJCQkJCQkJIiBhbiBleHBsaWNpdCBBUyBwYXRobmFtZSBzcGVjaWZp Y2F0aW9uIgorCQkJCQkJCQkiIGlmIGFuIGV4cGxpY2l0IFBMQU4gY2xhdXNlIGlzIHVzZWQiKSwK KwkJCQkJCXBhcnNlcl9lcnJwb3NpdGlvbihwc3RhdGUsIGp0Yy0+bG9jYXRpb24pKTsKKworCQkJ LyogZmluZCBuZXN0ZWQgcGF0aCBuYW1lIGluIHRoZSBsaXN0IG9mIHNpYmxpbmcgcGF0aCBuYW1l cyAqLworCQkJZm9yZWFjaChsYzIsIHNpYmxpbmdzKQorCQkJeworCQkJCWlmICgoZm91bmQgPSAh c3RyY21wKGp0Yy0+cGF0aHNwZWMtPm5hbWUsIGxmaXJzdChsYzIpKSkpCisJCQkJCWJyZWFrOwor CQkJfQorCisJCQlpZiAoIWZvdW5kKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQllcnJjb2Rl KEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKKwkJCQkJCWVycm1zZygiaW52YWxpZCBKU09OX1RBQkxF IHNwZWNpZmljYXRpb24iKSwKKwkJCQkJCWVycmRldGFpbCgiUExBTiBjbGF1c2UgZm9yIG5lc3Rl ZCBwYXRoICVzIHdhcyBub3QgZm91bmQuIiwKKwkJCQkJCQkJICBqdGMtPnBhdGhzcGVjLT5uYW1l KSwKKwkJCQkJCXBhcnNlcl9lcnJwb3NpdGlvbihwc3RhdGUsIGp0Yy0+bG9jYXRpb24pKTsKKwor CQkJbmNoaWxkcmVuKys7CisJCX0KKwl9CisKKwlpZiAobGlzdF9sZW5ndGgoc2libGluZ3MpID4g bmNoaWxkcmVuKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCWVycmNvZGUoRVJSQ09ERV9TWU5UQVhf RVJST1IpLAorCQkJCWVycm1zZygiaW52YWxpZCBKU09OX1RBQkxFIHBsYW4gY2xhdXNlIiksCisJ CQkJZXJyZGV0YWlsKCJQTEFOIGNsYXVzZSBjb250YWlucyBzb21lIGV4dHJhIG9yIGR1cGxpY2F0 ZSBzaWJsaW5nIG5vZGVzLiIpLAorCQkJCXBhcnNlcl9lcnJwb3NpdGlvbihwc3RhdGUsIHBsYW4g PyBwbGFuLT5sb2NhdGlvbiA6IC0xKSk7Cit9CisKK3N0YXRpYyBKc29uVGFibGVDb2x1bW4gKgor ZmluZE5lc3RlZEpzb25UYWJsZUNvbHVtbihMaXN0ICpjb2x1bW5zLCBjb25zdCBjaGFyICpwYXRo bmFtZSkKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKworCWZvcmVhY2gobGMsIGNvbHVtbnMpCisJewor CQlKc29uVGFibGVDb2x1bW4gKmp0YyA9IGNhc3ROb2RlKEpzb25UYWJsZUNvbHVtbiwgbGZpcnN0 KGxjKSk7CisKKwkJaWYgKGp0Yy0+Y29sdHlwZSA9PSBKVENfTkVTVEVEICYmCisJCQlqdGMtPnBh dGhzcGVjLT5uYW1lICYmCisJCQkhc3RyY21wKGp0Yy0+cGF0aHNwZWMtPm5hbWUsIHBhdGhuYW1l KSkKKwkJCXJldHVybiBqdGM7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBOb2Rl ICoKK3RyYW5zZm9ybU5lc3RlZEpzb25UYWJsZUNvbHVtbihKc29uVGFibGVQYXJzZUNvbnRleHQg KiBjeHQsIEpzb25UYWJsZUNvbHVtbiAqanRjLAorCQkJCQkJCSAgIEpzb25UYWJsZVBsYW5TcGVj ICpwbGFuc3BlYykKK3sKKwlpZiAoanRjLT5wYXRoc3BlYy0+bmFtZSA9PSBOVUxMKQorCXsKKwkJ aWYgKGN4dC0+dGFibGUtPnBsYW5zcGVjICE9IE5VTEwpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJ CQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJCSBlcnJtc2coImludmFsaWQg SlNPTl9UQUJMRSBleHByZXNzaW9uIiksCisJCQkJCSBlcnJkZXRhaWwoIkpTT05fVEFCTEUgcGF0 aCBtdXN0IGNvbnRhaW4iCisJCQkJCQkJICAgIiBleHBsaWNpdCBBUyBwYXRobmFtZSBzcGVjaWZp Y2F0aW9uIGlmIgorCQkJCQkJCSAgICIgZXhwbGljaXQgUExBTiBjbGF1c2UgaXMgdXNlZCIpLAor CQkJCQkgcGFyc2VyX2VycnBvc2l0aW9uKGN4dC0+cHN0YXRlLCBqdGMtPmxvY2F0aW9uKSkpOwor CisJCWp0Yy0+cGF0aHNwZWMtPm5hbWUgPSBnZW5lcmF0ZUpzb25UYWJsZVBhdGhOYW1lKGN4dCk7 CisJfQorCisJcmV0dXJuIChOb2RlICopIHRyYW5zZm9ybUpzb25UYWJsZUNvbHVtbnMoY3h0LCBw bGFuc3BlYywganRjLT5jb2x1bW5zLAorCQkJCQkJCQkJCQkgIGp0Yy0+cGF0aHNwZWMpOworfQor CitzdGF0aWMgTm9kZSAqCittYWtlSnNvblRhYmxlU2libGluZ0pvaW4oYm9vbCBjcm9zcywgTm9k ZSAqbG5vZGUsIE5vZGUgKnJub2RlKQoreworCUpzb25UYWJsZVNpYmxpbmcgKmpvaW4gPSBtYWtl Tm9kZShKc29uVGFibGVTaWJsaW5nKTsKKworCWpvaW4tPmxhcmcgPSBsbm9kZTsKKwlqb2luLT5y YXJnID0gcm5vZGU7CisJam9pbi0+Y3Jvc3MgPSBjcm9zczsKKworCXJldHVybiAoTm9kZSAqKSBq b2luOworfQorCisvKgorICogUmVjdXJzaXZlbHkgdHJhbnNmb3JtIGNoaWxkIEpTT05fVEFCTEUg cGxhbi4KKyAqCisgKiBEZWZhdWx0IHBsYW4gaXMgdHJhbnNmb3JtZWQgaW50byBhIGNyb3NzL3Vu aW9uIGpvaW4gb2YgaXRzIG5lc3RlZCBjb2x1bW5zLgorICogU2ltcGxlIGFuZCBvdXRlci9pbm5l ciBwbGFucyBhcmUgdHJhbnNmb3JtZWQgaW50byBhIEpzb25UYWJsZVBsYW4gYnkKKyAqIGZpbmRp bmcgYW5kIHRyYW5zZm9ybWluZyBjb3JyZXNwb25kaW5nIG5lc3RlZCBjb2x1bW4uCisgKiBTaWJs aW5nIHBsYW5zIGFyZSByZWN1cnNpdmVseSB0cmFuc2Zvcm1lZCBpbnRvIGEgSnNvblRhYmxlU2li bGluZy4KKyAqLworc3RhdGljIE5vZGUgKgordHJhbnNmb3JtSnNvblRhYmxlQ2hpbGRQbGFuKEpz b25UYWJsZVBhcnNlQ29udGV4dCAqIGN4dCwKKwkJCQkJCQlKc29uVGFibGVQbGFuU3BlYyAqcGxh biwKKwkJCQkJCQlMaXN0ICpjb2x1bW5zKQoreworCUpzb25UYWJsZUNvbHVtbiAqanRjID0gTlVM TDsKKworCWlmICghcGxhbiB8fCBwbGFuLT5wbGFuX3R5cGUgPT0gSlNUUF9ERUZBVUxUKQorCXsK KwkJLyogdW5zcGVjaWZpZWQgb3IgZGVmYXVsdCBwbGFuICovCisJCU5vZGUJICAgKnJlcyA9IE5V TEw7CisJCUxpc3RDZWxsICAgKmxjOworCQlib29sCQljcm9zcyA9IHBsYW4gJiYgKHBsYW4tPmpv aW5fdHlwZSAmIEpTVFBfSk9JTl9DUk9TUyk7CisKKwkJLyogdHJhbnNmb3JtIGFsbCBuZXN0ZWQg Y29sdW1ucyBpbnRvIGNyb3NzL3VuaW9uIGpvaW4gKi8KKwkJZm9yZWFjaChsYywgY29sdW1ucykK KwkJeworCQkJSnNvblRhYmxlQ29sdW1uICpjb2wgPSBjYXN0Tm9kZShKc29uVGFibGVDb2x1bW4s IGxmaXJzdChsYykpOworCQkJTm9kZQkgICAqbm9kZTsKKworCQkJaWYgKGNvbC0+Y29sdHlwZSAh PSBKVENfTkVTVEVEKQorCQkJCWNvbnRpbnVlOworCisJCQlub2RlID0gdHJhbnNmb3JtTmVzdGVk SnNvblRhYmxlQ29sdW1uKGN4dCwgY29sLCBwbGFuKTsKKworCQkJLyogam9pbiB0cmFuc2Zvcm1l ZCBub2RlIHdpdGggcHJldmlvdXMgc2libGluZyBub2RlcyAqLworCQkJcmVzID0gcmVzID8gbWFr ZUpzb25UYWJsZVNpYmxpbmdKb2luKGNyb3NzLCByZXMsIG5vZGUpIDogbm9kZTsKKwkJfQorCisJ CXJldHVybiByZXM7CisJfQorCWVsc2UgaWYgKHBsYW4tPnBsYW5fdHlwZSA9PSBKU1RQX1NJTVBM RSkKKwl7CisJCWp0YyA9IGZpbmROZXN0ZWRKc29uVGFibGVDb2x1bW4oY29sdW1ucywgcGxhbi0+ cGF0aG5hbWUpOworCX0KKwllbHNlIGlmIChwbGFuLT5wbGFuX3R5cGUgPT0gSlNUUF9KT0lORUQp CisJeworCQlpZiAocGxhbi0+am9pbl90eXBlID09IEpTVFBfSk9JTl9JTk5FUiB8fAorCQkJcGxh bi0+am9pbl90eXBlID09IEpTVFBfSk9JTl9PVVRFUikKKwkJeworCQkJQXNzZXJ0KHBsYW4tPnBs YW4xLT5wbGFuX3R5cGUgPT0gSlNUUF9TSU1QTEUpOworCQkJanRjID0gZmluZE5lc3RlZEpzb25U YWJsZUNvbHVtbihjb2x1bW5zLCBwbGFuLT5wbGFuMS0+cGF0aG5hbWUpOworCQl9CisJCWVsc2UK KwkJeworCQkJTm9kZQkgICAqbm9kZTEgPSB0cmFuc2Zvcm1Kc29uVGFibGVDaGlsZFBsYW4oY3h0 LCBwbGFuLT5wbGFuMSwKKwkJCQkJCQkJCQkJCQkJCWNvbHVtbnMpOworCQkJTm9kZQkgICAqbm9k ZTIgPSB0cmFuc2Zvcm1Kc29uVGFibGVDaGlsZFBsYW4oY3h0LCBwbGFuLT5wbGFuMiwKKwkJCQkJ CQkJCQkJCQkJCWNvbHVtbnMpOworCisJCQlyZXR1cm4gbWFrZUpzb25UYWJsZVNpYmxpbmdKb2lu KHBsYW4tPmpvaW5fdHlwZSA9PSBKU1RQX0pPSU5fQ1JPU1MsCisJCQkJCQkJCQkJCW5vZGUxLCBu b2RlMik7CisJCX0KKwl9CisJZWxzZQorCQllbG9nKEVSUk9SLCAiaW52YWxpZCBKU09OX1RBQkxF IHBsYW4gdHlwZSAlZCIsIHBsYW4tPnBsYW5fdHlwZSk7CisKKwlpZiAoIWp0YykKKwkJZXJlcG9y dChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJIGVycm1z ZygiaW52YWxpZCBKU09OX1RBQkxFIHBsYW4gY2xhdXNlIiksCisJCQkJIGVycmRldGFpbCgiUEFU SCBuYW1lIHdhcyAlcyBub3QgZm91bmQgaW4gbmVzdGVkIGNvbHVtbnMgbGlzdC4iLAorCQkJCQkJ ICAgcGxhbi0+cGF0aG5hbWUpLAorCQkJCSBwYXJzZXJfZXJycG9zaXRpb24oY3h0LT5wc3RhdGUs IHBsYW4tPmxvY2F0aW9uKSkpOworCisJcmV0dXJuIHRyYW5zZm9ybU5lc3RlZEpzb25UYWJsZUNv bHVtbihjeHQsIGp0YywgcGxhbik7Cit9CisKKy8qIENoZWNrIHdoZXRoZXIgdHlwZSBpcyBqc29u L2pzb25iLCBhcnJheSwgb3IgcmVjb3JkLiAqLworc3RhdGljIGJvb2wKK3R5cGVJc0NvbXBvc2l0 ZShPaWQgdHlwaWQpCit7CisJY2hhcgkJdHlwdHlwZTsKKworCWlmICh0eXBpZCA9PSBKU09OT0lE IHx8CisJCXR5cGlkID09IEpTT05CT0lEIHx8CisJCXR5cGlkID09IFJFQ09SRE9JRCB8fAorCQl0 eXBlX2lzX2FycmF5KHR5cGlkKSkKKwkJcmV0dXJuIHRydWU7CisKKwl0eXB0eXBlID0gZ2V0X3R5 cHR5cGUodHlwaWQpOworCisJaWYgKHR5cHR5cGUgPT0gVFlQVFlQRV9DT01QT1NJVEUpCisJCXJl dHVybiB0cnVlOworCisJaWYgKHR5cHR5cGUgPT0gVFlQVFlQRV9ET01BSU4pCisJCXJldHVybiB0 eXBlSXNDb21wb3NpdGUoZ2V0QmFzZVR5cGUodHlwaWQpKTsKKworCXJldHVybiBmYWxzZTsKK30K KworLyogQXBwZW5kIHRyYW5zZm9ybWVkIG5vbi1uZXN0ZWQgSlNPTl9UQUJMRSBjb2x1bW5zIHRv IHRoZSBUYWJsZUZ1bmMgbm9kZSAqLworc3RhdGljIHZvaWQKK2FwcGVuZEpzb25UYWJsZUNvbHVt bnMoSnNvblRhYmxlUGFyc2VDb250ZXh0ICogY3h0LCBMaXN0ICpjb2x1bW5zKQoreworCUxpc3RD ZWxsICAgKmNvbDsKKwlQYXJzZVN0YXRlICpwc3RhdGUgPSBjeHQtPnBzdGF0ZTsKKwlKc29uVGFi bGUgICpqdCA9IGN4dC0+dGFibGU7CisJVGFibGVGdW5jICAqdGYgPSBjeHQtPnRhYmxlZnVuYzsK Kwlib29sCQlvcmRpbmFsaXR5X2ZvdW5kID0gZmFsc2U7CisJSnNvbkJlaGF2aW9yICpvbl9lcnJv ciA9IGp0LT5vbl9lcnJvcjsKKwlib29sCQllcnJvck9uRXJyb3IgPSBvbl9lcnJvciAmJgorCQlv bl9lcnJvci0+YnR5cGUgPT0gSlNPTl9CRUhBVklPUl9FUlJPUjsKKworCWZvcmVhY2goY29sLCBj b2x1bW5zKQorCXsKKwkJSnNvblRhYmxlQ29sdW1uICpyYXdjID0gY2FzdE5vZGUoSnNvblRhYmxl Q29sdW1uLCBsZmlyc3QoY29sKSk7CisJCU9pZAkJCXR5cGlkOworCQlpbnQzMgkJdHlwbW9kOwor CQlOb2RlCSAgICpjb2xleHByOworCisJCWlmIChyYXdjLT5uYW1lKQorCQkJdGYtPmNvbG5hbWVz ID0gbGFwcGVuZCh0Zi0+Y29sbmFtZXMsCisJCQkJCQkJCSAgIG1ha2VTdHJpbmcocHN0cmR1cChy YXdjLT5uYW1lKSkpOworCisJCS8qCisJCSAqIERldGVybWluZSB0aGUgdHlwZSBhbmQgdHlwbW9k IGZvciB0aGUgbmV3IGNvbHVtbi4gRk9SIE9SRElOQUxJVFkKKwkJICogY29sdW1ucyBhcmUgSU5U RUdFUiBieSBzdGFuZGFyZDsgdGhlIG90aGVycyBhcmUgdXNlci1zcGVjaWZpZWQuCisJCSAqLwor CQlzd2l0Y2ggKHJhd2MtPmNvbHR5cGUpCisJCXsKKwkJCWNhc2UgSlRDX0ZPUl9PUkRJTkFMSVRZ OgorCQkJCWlmIChvcmRpbmFsaXR5X2ZvdW5kKQorCQkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJ CShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKKwkJCQkJCQkgZXJybXNnKCJjYW5ub3Qg dXNlIG1vcmUgdGhhbiBvbmUgRk9SIE9SRElOQUxJVFkgY29sdW1uIiksCisJCQkJCQkJIHBhcnNl cl9lcnJwb3NpdGlvbihwc3RhdGUsIHJhd2MtPmxvY2F0aW9uKSkpOworCQkJCW9yZGluYWxpdHlf Zm91bmQgPSB0cnVlOworCQkJCWNvbGV4cHIgPSBOVUxMOworCQkJCXR5cGlkID0gSU5UNE9JRDsK KwkJCQl0eXBtb2QgPSAtMTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBKVENfUkVHVUxBUjoKKwkJ CQl0eXBlbmFtZVR5cGVJZEFuZE1vZChwc3RhdGUsIHJhd2MtPnR5cGVOYW1lLCAmdHlwaWQsICZ0 eXBtb2QpOworCisJCQkJLyoKKwkJCQkgKiBVc2UgaW1wbGljaXQgRk9STUFUIEpTT04gZm9yIGNv bXBvc2l0ZSB0eXBlcyAoYXJyYXlzIGFuZAorCQkJCSAqIHJlY29yZHMpIG9yIGlmIGEgbm9uLWRl ZmF1bHQgV1JBUFBFUiAvIFFVT1RFUyBiZWhhdmlvcgorCQkJCSAqIGlzIHNwZWNpZmllZC4KKwkJ CQkgKi8KKwkJCQlpZiAodHlwZUlzQ29tcG9zaXRlKHR5cGlkKSB8fAorCQkJCQlyYXdjLT5xdW90 ZXMgIT0gSlNfUVVPVEVTX1VOU1BFQyB8fAorCQkJCQlyYXdjLT53cmFwcGVyICE9IEpTV19VTlNQ RUMpCisJCQkJCXJhd2MtPmNvbHR5cGUgPSBKVENfRk9STUFUVEVEOworCisJCQkJLyogRkFMTFRI Uk9VR0ggKi8KKwkJCWNhc2UgSlRDX0ZPUk1BVFRFRDoKKwkJCWNhc2UgSlRDX0VYSVNUUzoKKwkJ CQl7CisJCQkJCU5vZGUJICAgKmplOworCQkJCQlDYXNlVGVzdEV4cHIgKnBhcmFtID0gbWFrZU5v ZGUoQ2FzZVRlc3RFeHByKTsKKworCQkJCQlwYXJhbS0+Y29sbGF0aW9uID0gSW52YWxpZE9pZDsK KwkJCQkJcGFyYW0tPnR5cGVJZCA9IGN4dC0+Y29udGV4dEl0ZW1UeXBpZDsKKwkJCQkJcGFyYW0t PnR5cGVNb2QgPSAtMTsKKworCQkJCQlqZSA9IHRyYW5zZm9ybUpzb25UYWJsZUNvbHVtbihyYXdj LCAoTm9kZSAqKSBwYXJhbSwKKwkJCQkJCQkJCQkJCSAgTklMLCBlcnJvck9uRXJyb3IpOworCisJ CQkJCWNvbGV4cHIgPSB0cmFuc2Zvcm1FeHByKHBzdGF0ZSwgamUsIEVYUFJfS0lORF9GUk9NX0ZV TkNUSU9OKTsKKwkJCQkJYXNzaWduX2V4cHJfY29sbGF0aW9ucyhwc3RhdGUsIGNvbGV4cHIpOwor CisJCQkJCXR5cGlkID0gZXhwclR5cGUoY29sZXhwcik7CisJCQkJCXR5cG1vZCA9IGV4cHJUeXBt b2QoY29sZXhwcik7CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJY2FzZSBKVENfTkVTVEVEOgor CQkJCWNvbnRpbnVlOworCisJCQlkZWZhdWx0OgorCQkJCWVsb2coRVJST1IsICJ1bmtub3duIEpT T05fVEFCTEUgY29sdW1uIHR5cGU6ICVkIiwgcmF3Yy0+Y29sdHlwZSk7CisJCQkJYnJlYWs7CisJ CX0KKworCQl0Zi0+Y29sdHlwZXMgPSBsYXBwZW5kX29pZCh0Zi0+Y29sdHlwZXMsIHR5cGlkKTsK KwkJdGYtPmNvbHR5cG1vZHMgPSBsYXBwZW5kX2ludCh0Zi0+Y29sdHlwbW9kcywgdHlwbW9kKTsK KwkJdGYtPmNvbGNvbGxhdGlvbnMgPSBsYXBwZW5kX29pZCh0Zi0+Y29sY29sbGF0aW9ucywgZ2V0 X3R5cGNvbGxhdGlvbih0eXBpZCkpOworCQl0Zi0+Y29sdmFsZXhwcnMgPSBsYXBwZW5kKHRmLT5j b2x2YWxleHBycywgY29sZXhwcik7CisJfQorfQorCisvKgorICogQ3JlYXRlIHRyYW5zZm9ybWVk IEpTT05fVEFCTEUgcGFyZW50IHBsYW4gbm9kZSBieSBhcHBlbmRpbmcgYWxsIG5vbi1uZXN0ZWQK KyAqIGNvbHVtbnMgdG8gdGhlIFRhYmxlRnVuYyBub2RlIGFuZCByZW1lbWJlcmluZyB0aGVpciBp bmRpY2VzIGluIHRoZQorICogY29sdmFsZXhwcnMgbGlzdC4KKyAqLworc3RhdGljIEpzb25UYWJs ZVBsYW4gKgorbWFrZVBhcmVudEpzb25UYWJsZVBsYW4oSnNvblRhYmxlUGFyc2VDb250ZXh0ICog Y3h0LCBKc29uVGFibGVQYXRoU3BlYyAqcGF0aHNwZWMsCisJCQkJCQlMaXN0ICpjb2x1bW5zKQor eworCUpzb25UYWJsZVBsYW4gKnBsYW4gPSBtYWtlTm9kZShKc29uVGFibGVQbGFuKTsKKwlKc29u QmVoYXZpb3IgKm9uX2Vycm9yID0gY3h0LT50YWJsZS0+b25fZXJyb3I7CisJY2hhcgkJICpwYXRo c3RyaW5nOworCUNvbnN0CQkgKnZhbHVlOworCisJQXNzZXJ0KElzQShwYXRoc3BlYy0+c3RyaW5n LCBBX0NvbnN0KSk7CisJcGF0aHN0cmluZyA9IGNhc3ROb2RlKEFfQ29uc3QsIHBhdGhzcGVjLT5z dHJpbmcpLT52YWwuc3ZhbC5zdmFsOworCXZhbHVlID0gbWFrZUNvbnN0KEpTT05QQVRIT0lELCAt MSwgSW52YWxpZE9pZCwgLTEsCisJCQkJCSAgRGlyZWN0RnVuY3Rpb25DYWxsMShqc29ucGF0aF9p biwKKwkJCQkJCQkJCQkgIENTdHJpbmdHZXREYXR1bShwYXRoc3RyaW5nKSksCisJCQkJCSAgZmFs c2UsIGZhbHNlKTsKKwlwbGFuLT5wYXRoID0gbWFrZUpzb25UYWJsZVBhdGgodmFsdWUsIHBhdGhz cGVjLT5uYW1lKTsKKworCS8qIHNhdmUgc3RhcnQgb2YgY29sdW1uIHJhbmdlICovCisJcGxhbi0+ Y29sTWluID0gbGlzdF9sZW5ndGgoY3h0LT50YWJsZWZ1bmMtPmNvbHZhbGV4cHJzKTsKKworCWFw cGVuZEpzb25UYWJsZUNvbHVtbnMoY3h0LCBjb2x1bW5zKTsKKworCS8qIHNhdmUgZW5kIG9mIGNv bHVtbiByYW5nZSAqLworCXBsYW4tPmNvbE1heCA9IGxpc3RfbGVuZ3RoKGN4dC0+dGFibGVmdW5j LT5jb2x2YWxleHBycykgLSAxOworCisJcGxhbi0+ZXJyb3JPbkVycm9yID0gb25fZXJyb3IgJiYg b25fZXJyb3ItPmJ0eXBlID09IEpTT05fQkVIQVZJT1JfRVJST1I7CisKKwlyZXR1cm4gcGxhbjsK K30KKworc3RhdGljIEpzb25UYWJsZVBsYW4gKgordHJhbnNmb3JtSnNvblRhYmxlQ29sdW1ucyhK c29uVGFibGVQYXJzZUNvbnRleHQgKiBjeHQsCisJCQkJCQkgIEpzb25UYWJsZVBsYW5TcGVjICpw bGFuc3BlYywKKwkJCQkJCSAgTGlzdCAqY29sdW1ucywKKwkJCQkJCSAgSnNvblRhYmxlUGF0aFNw ZWMgKnBhdGhzcGVjKQoreworCUpzb25UYWJsZVBsYW4gKnBsYW47CisJSnNvblRhYmxlUGxhblNw ZWMgKmNoaWxkUGxhblNwZWM7CisJYm9vbAkJZGVmYXVsdFBsYW4gPSBwbGFuc3BlYyA9PSBOVUxM IHx8CisJCXBsYW5zcGVjLT5wbGFuX3R5cGUgPT0gSlNUUF9ERUZBVUxUOworCisJaWYgKGRlZmF1 bHRQbGFuKQorCQljaGlsZFBsYW5TcGVjID0gcGxhbnNwZWM7CisJZWxzZQorCXsKKwkJLyogdmFs aWRhdGUgcGFyZW50IGFuZCBjaGlsZCBwbGFucyAqLworCQlKc29uVGFibGVQbGFuU3BlYyAqcGFy ZW50UGxhblNwZWM7CisKKwkJaWYgKHBsYW5zcGVjLT5wbGFuX3R5cGUgPT0gSlNUUF9KT0lORUQp CisJCXsKKwkJCWlmIChwbGFuc3BlYy0+am9pbl90eXBlICE9IEpTVFBfSk9JTl9JTk5FUiAmJgor CQkJCXBsYW5zcGVjLT5qb2luX3R5cGUgIT0gSlNUUF9KT0lOX09VVEVSKQorCQkJCWVyZXBvcnQo RVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJCQkgZXJy bXNnKCJpbnZhbGlkIEpTT05fVEFCTEUgcGxhbiBjbGF1c2UiKSwKKwkJCQkJCSBlcnJkZXRhaWwo IkV4cGVjdGVkIElOTkVSIG9yIE9VVEVSLiIpLAorCQkJCQkJIHBhcnNlcl9lcnJwb3NpdGlvbihj eHQtPnBzdGF0ZSwgcGxhbnNwZWMtPmxvY2F0aW9uKSkpOworCisJCQlwYXJlbnRQbGFuU3BlYyA9 IHBsYW5zcGVjLT5wbGFuMTsKKwkJCWNoaWxkUGxhblNwZWMgPSBwbGFuc3BlYy0+cGxhbjI7CisK KwkJCUFzc2VydChwYXJlbnRQbGFuU3BlYy0+cGxhbl90eXBlICE9IEpTVFBfSk9JTkVEKTsKKwkJ CUFzc2VydChwYXJlbnRQbGFuU3BlYy0+cGF0aG5hbWUpOworCQl9CisJCWVsc2UKKwkJeworCQkJ cGFyZW50UGxhblNwZWMgPSBwbGFuc3BlYzsKKwkJCWNoaWxkUGxhblNwZWMgPSBOVUxMOworCQl9 CisKKwkJaWYgKHN0cmNtcChwYXJlbnRQbGFuU3BlYy0+cGF0aG5hbWUsIHBhdGhzcGVjLT5uYW1l KSAhPSAwKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhf RVJST1IpLAorCQkJCQkgZXJybXNnKCJpbnZhbGlkIEpTT05fVEFCTEUgcGxhbiIpLAorCQkJCQkg ZXJyZGV0YWlsKCJQQVRIIG5hbWUgbWlzbWF0Y2g6IGV4cGVjdGVkICVzIGJ1dCAlcyBpcyBnaXZl bi4iLAorCQkJCQkJCSAgIHBhdGhzcGVjLT5uYW1lLCBwYXJlbnRQbGFuU3BlYy0+cGF0aG5hbWUp LAorCQkJCQkgcGFyc2VyX2VycnBvc2l0aW9uKGN4dC0+cHN0YXRlLCBwbGFuc3BlYy0+bG9jYXRp b24pKSk7CisKKwkJdmFsaWRhdGVKc29uVGFibGVDaGlsZFBsYW4oY3h0LT5wc3RhdGUsIGNoaWxk UGxhblNwZWMsIGNvbHVtbnMpOworCX0KKworCS8qIHRyYW5zZm9ybSBvbmx5IG5vbi1uZXN0ZWQg Y29sdW1ucyAqLworCXBsYW4gPSBtYWtlUGFyZW50SnNvblRhYmxlUGxhbihjeHQsIHBhdGhzcGVj LCBjb2x1bW5zKTsKKworCWlmIChjaGlsZFBsYW5TcGVjIHx8IGRlZmF1bHRQbGFuKQorCXsKKwkJ LyogdHJhbnNmb3JtIHJlY3Vyc2l2ZWx5IG5lc3RlZCBjb2x1bW5zICovCisJCXBsYW4tPmNoaWxk ID0gdHJhbnNmb3JtSnNvblRhYmxlQ2hpbGRQbGFuKGN4dCwgY2hpbGRQbGFuU3BlYywgY29sdW1u cyk7CisJCWlmIChwbGFuLT5jaGlsZCkKKwkJCXBsYW4tPm91dGVySm9pbiA9IHBsYW5zcGVjID09 IE5VTEwgfHwKKwkJCQkocGxhbnNwZWMtPmpvaW5fdHlwZSAmIEpTVFBfSk9JTl9PVVRFUik7CisJ CS8qIGVsc2U6IGRlZmF1bHQgcGxhbiBjYXNlLCBubyBjaGlsZHJlbiBmb3VuZCAqLworCX0KKwor CXJldHVybiBwbGFuOworfQorCisvKgorICogdHJhbnNmb3JtSnNvblRhYmxlIC0KKyAqCQkJVHJh bnNmb3JtIGEgcmF3IEpzb25UYWJsZSBpbnRvIFRhYmxlRnVuYy4KKyAqCisgKiBUcmFuc2Zvcm0g dGhlIGRvY3VtZW50LWdlbmVyYXRpbmcgZXhwcmVzc2lvbiwgdGhlIHJvdy1nZW5lcmF0aW5nIGV4 cHJlc3Npb24sCisgKiB0aGUgY29sdW1uLWdlbmVyYXRpbmcgZXhwcmVzc2lvbnMsIGFuZCB0aGUg ZGVmYXVsdCB2YWx1ZSBleHByZXNzaW9ucy4KKyAqLworUGFyc2VOYW1lc3BhY2VJdGVtICoKK3Ry YW5zZm9ybUpzb25UYWJsZShQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25UYWJsZSAqanQpCit7CisJ SnNvblRhYmxlUGFyc2VDb250ZXh0IGN4dDsKKwlUYWJsZUZ1bmMgICp0ZiA9IG1ha2VOb2RlKFRh YmxlRnVuYyk7CisJSnNvbkZ1bmNFeHByICpqZmUgPSBtYWtlTm9kZShKc29uRnVuY0V4cHIpOwor CUpzb25FeHByICAgKmplOworCUpzb25UYWJsZVBsYW5TcGVjICpwbGFuID0ganQtPnBsYW5zcGVj OworCUpzb25UYWJsZVBhdGhTcGVjICpyb290UGF0aFNwZWMgPSBqdC0+cGF0aHNwZWM7CisJYm9v bAkJaXNfbGF0ZXJhbDsKKworCUFzc2VydChJc0Eocm9vdFBhdGhTcGVjLT5zdHJpbmcsIEFfQ29u c3QpICYmCisJCSAgIGNhc3ROb2RlKEFfQ29uc3QsIHJvb3RQYXRoU3BlYy0+c3RyaW5nKS0+dmFs Lm5vZGUudHlwZSA9PSBUX1N0cmluZyk7CisKKwljeHQucHN0YXRlID0gcHN0YXRlOworCWN4dC50 YWJsZSA9IGp0OworCWN4dC50YWJsZWZ1bmMgPSB0ZjsKKwljeHQucGF0aE5hbWVzID0gTklMOwor CWN4dC5wYXRoTmFtZUlkID0gMDsKKworCWlmIChyb290UGF0aFNwZWMtPm5hbWUpCisJCXJlZ2lz dGVySnNvblRhYmxlUGF0aCgmY3h0LCByb290UGF0aFNwZWMtPm5hbWUsCisJCQkJCQkJICByb290 UGF0aFNwZWMtPm5hbWVfbG9jYXRpb24pOworCWVsc2UKKwl7CisJCWlmIChqdC0+cGxhbnNwZWMg IT0gTlVMTCkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFY X0VSUk9SKSwKKwkJCQkJIGVycm1zZygiaW52YWxpZCBKU09OX1RBQkxFIGV4cHJlc3Npb24iKSwK KwkJCQkJIGVycmRldGFpbCgiSlNPTl9UQUJMRSBwYXRoIG11c3QgY29udGFpbiIKKwkJCQkJCQkg ICAiIGV4cGxpY2l0IEFTIHBhdGhuYW1lIHNwZWNpZmljYXRpb24gaWYiCisJCQkJCQkJICAgIiBl eHBsaWNpdCBQTEFOIGNsYXVzZSBpcyB1c2VkIiksCisJCQkJCSBwYXJzZXJfZXJycG9zaXRpb24o cHN0YXRlLCByb290UGF0aFNwZWMtPmxvY2F0aW9uKSkpOworCisJCXJvb3RQYXRoU3BlYy0+bmFt ZSA9IGdlbmVyYXRlSnNvblRhYmxlUGF0aE5hbWUoJmN4dCk7CisJfQorCisJcmVnaXN0ZXJBbGxK c29uVGFibGVDb2x1bW5zQW5kUGF0aHMoJmN4dCwganQtPmNvbHVtbnMpOworCisJamZlLT5vcCA9 IEpTT05fVEFCTEVfT1A7CisJamZlLT5jb250ZXh0X2l0ZW0gPQlqdC0+Y29udGV4dF9pdGVtOwor CWpmZS0+cGF0aHNwZWMgPSAoTm9kZSAqKSByb290UGF0aFNwZWMtPnN0cmluZzsKKwlqZmUtPnBh dGhuYW1lID0gcm9vdFBhdGhTcGVjLT5uYW1lOworCWpmZS0+cGFzc2luZyA9IGp0LT5wYXNzaW5n OworCWpmZS0+b25fZW1wdHkgPSBOVUxMOworCWpmZS0+b25fZXJyb3IgPSBqdC0+b25fZXJyb3I7 CisJamZlLT5sb2NhdGlvbiA9IGp0LT5sb2NhdGlvbjsKKworCS8qCisJICogV2UgbWFrZSBsYXRl cmFsX29ubHkgbmFtZXMgb2YgdGhpcyBsZXZlbCB2aXNpYmxlLCB3aGV0aGVyIG9yIG5vdCB0aGUK KwkgKiBSYW5nZVRhYmxlRnVuYyBpcyBleHBsaWNpdGx5IG1hcmtlZCBMQVRFUkFMLiAgVGhpcyBp cyBuZWVkZWQgZm9yIFNRTAorCSAqIHNwZWMgY29tcGxpYW5jZSBhbmQgc2VlbXMgdXNlZnVsIG9u IGNvbnZlbmllbmNlIGdyb3VuZHMgZm9yIGFsbAorCSAqIGZ1bmN0aW9ucyBpbiBGUk9NLgorCSAq CisJICogKExBVEVSQUwgY2FuJ3QgbmVzdCB3aXRoaW4gYSBzaW5nbGUgcHN0YXRlIGxldmVsLCBz byB3ZSBkb24ndCBuZWVkCisJICogc2F2ZS9yZXN0b3JlIGxvZ2ljIGhlcmUuKQorCSAqLworCUFz c2VydCghcHN0YXRlLT5wX2xhdGVyYWxfYWN0aXZlKTsKKwlwc3RhdGUtPnBfbGF0ZXJhbF9hY3Rp dmUgPSB0cnVlOworCisJdGYtPmZ1bmN0eXBlID0gVEZUX0pTT05fVEFCTEU7CisJdGYtPmRvY2V4 cHIgPSB0cmFuc2Zvcm1FeHByKHBzdGF0ZSwgKE5vZGUgKikgamZlLCBFWFBSX0tJTkRfRlJPTV9G VU5DVElPTik7CisKKwljeHQuY29udGV4dEl0ZW1UeXBpZCA9IGV4cHJUeXBlKHRmLT5kb2NleHBy KTsKKworCXRmLT5wbGFuID0gKE5vZGUgKikgdHJhbnNmb3JtSnNvblRhYmxlQ29sdW1ucygmY3h0 LCBwbGFuLCBqdC0+Y29sdW1ucywKKwkJCQkJCQkJCQkJCSAgcm9vdFBhdGhTcGVjKTsKKworCS8q IEFsc28gc2F2ZSBhIGNvcHkgb2YgdGhlIFBBU1NJTkcgYXJndW1lbnRzIGluIHRoZSBUYWJsZUZ1 bmMgbm9kZS4gKi8KKwlqZSA9IChKc29uRXhwciAqKSB0Zi0+ZG9jZXhwcjsKKwl0Zi0+cGFzc2lu Z3ZhbGV4cHJzID0gY29weU9iamVjdChqZS0+cGFzc2luZ192YWx1ZXMpOworCisJdGYtPm9yZGlu YWxpdHljb2wgPSAtMTsJCS8qIHVuZGVmaW5lIG9yZGluYWxpdHkgY29sdW1uIG51bWJlciAqLwor CXRmLT5sb2NhdGlvbiA9IGp0LT5sb2NhdGlvbjsKKworCXBzdGF0ZS0+cF9sYXRlcmFsX2FjdGl2 ZSA9IGZhbHNlOworCisJLyoKKwkgKiBNYXJrIHRoZSBSVEUgYXMgTEFURVJBTCBpZiB0aGUgdXNl ciBzYWlkIExBVEVSQUwgZXhwbGljaXRseSwgb3IgaWYKKwkgKiB0aGVyZSBhcmUgYW55IGxhdGVy YWwgY3Jvc3MtcmVmZXJlbmNlcyBpbiBpdC4KKwkgKi8KKwlpc19sYXRlcmFsID0ganQtPmxhdGVy YWwgfHwgY29udGFpbl92YXJzX29mX2xldmVsKChOb2RlICopIHRmLCAwKTsKKworCXJldHVybiBh ZGRSYW5nZVRhYmxlRW50cnlGb3JUYWJsZUZ1bmMocHN0YXRlLAorCQkJCQkJCQkJCSAgdGYsIGp0 LT5hbGlhcywgaXNfbGF0ZXJhbCwgdHJ1ZSk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9w YXJzZXIvcGFyc2VfcmVsYXRpb24uYyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9yZWxhdGlv bi5jCmluZGV4IDQyN2I3MzI1ZGIuLjdjYTc5M2EzNjkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3BhcnNlci9wYXJzZV9yZWxhdGlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9y ZWxhdGlvbi5jCkBAIC0yMDcxLDggKzIwNzEsNiBAQCBhZGRSYW5nZVRhYmxlRW50cnlGb3JUYWJs ZUZ1bmMoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCUFzc2VydChsaXN0X2xlbmd0aCh0Zi0+Y29sdHlw bW9kcykgPT0gbGlzdF9sZW5ndGgodGYtPmNvbG5hbWVzKSk7CiAJQXNzZXJ0KGxpc3RfbGVuZ3Ro KHRmLT5jb2xjb2xsYXRpb25zKSA9PSBsaXN0X2xlbmd0aCh0Zi0+Y29sbmFtZXMpKTsKIAotCXJl Zm5hbWUgPSBhbGlhcyA/IGFsaWFzLT5hbGlhc25hbWUgOiBwc3RyZHVwKCJ4bWx0YWJsZSIpOwot CiAJcnRlLT5ydGVraW5kID0gUlRFX1RBQkxFRlVOQzsKIAlydGUtPnJlbGlkID0gSW52YWxpZE9p ZDsKIAlydGUtPnN1YnF1ZXJ5ID0gTlVMTDsKQEAgLTIwODIsNiArMjA4MCw4IEBAIGFkZFJhbmdl VGFibGVFbnRyeUZvclRhYmxlRnVuYyhQYXJzZVN0YXRlICpwc3RhdGUsCiAJcnRlLT5jb2xjb2xs YXRpb25zID0gdGYtPmNvbGNvbGxhdGlvbnM7CiAJcnRlLT5hbGlhcyA9IGFsaWFzOwogCisJcmVm bmFtZSA9IGFsaWFzID8gYWxpYXMtPmFsaWFzbmFtZSA6CisJCXBzdHJkdXAodGYtPmZ1bmN0eXBl ID09IFRGVF9YTUxUQUJMRSA/ICJ4bWx0YWJsZSIgOiAianNvbl90YWJsZSIpOwogCWVyZWYgPSBh bGlhcyA/IGNvcHlPYmplY3QoYWxpYXMpIDogbWFrZUFsaWFzKHJlZm5hbWUsIE5JTCk7CiAJbnVt YWxpYXNlcyA9IGxpc3RfbGVuZ3RoKGVyZWYtPmNvbG5hbWVzKTsKIApAQCAtMjA5NCw3ICsyMDk0 LDcgQEAgYWRkUmFuZ2VUYWJsZUVudHJ5Rm9yVGFibGVGdW5jKFBhcnNlU3RhdGUgKnBzdGF0ZSwK IAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfQ09MVU1OX1JF RkVSRU5DRSksCiAJCQkJIGVycm1zZygiJXMgZnVuY3Rpb24gaGFzICVkIGNvbHVtbnMgYXZhaWxh YmxlIGJ1dCAlZCBjb2x1bW5zIHNwZWNpZmllZCIsCi0JCQkJCQkiWE1MVEFCTEUiLAorCQkJCQkJ dGYtPmZ1bmN0eXBlID09IFRGVF9YTUxUQUJMRSA/ICJYTUxUQUJMRSIgOiAiSlNPTl9UQUJMRSIs CiAJCQkJCQlsaXN0X2xlbmd0aCh0Zi0+Y29sbmFtZXMpLCBudW1hbGlhc2VzKSkpOwogCiAJcnRl LT5lcmVmID0gZXJlZjsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV90YXJn ZXQuYyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV90YXJnZXQuYwppbmRleCAxMjc2ZjMzNjA0 Li40MzBlNTE5NGZkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfdGFyZ2V0 LmMKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3RhcmdldC5jCkBAIC0yMDE5LDYgKzIw MTksOSBAQCBGaWd1cmVDb2xuYW1lSW50ZXJuYWwoTm9kZSAqbm9kZSwgY2hhciAqKm5hbWUpCiAJ CQkJY2FzZSBKU09OX1ZBTFVFX09QOgogCQkJCQkqbmFtZSA9ICJqc29uX3ZhbHVlIjsKIAkJCQkJ cmV0dXJuIDI7CisJCQkJY2FzZSBKU09OX1RBQkxFX09QOgorCQkJCQkqbmFtZSA9ICJqc29uX3Rh YmxlIjsKKwkJCQkJcmV0dXJuIDI7CiAJCQkJZGVmYXVsdDoKIAkJCQkJZWxvZyhFUlJPUiwgInVu cmVjb2duaXplZCBKc29uRXhwciBvcDogJWQiLAogCQkJCQkJIChpbnQpICgoSnNvbkZ1bmNFeHBy ICopIG5vZGUpLT5vcCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbnBh dGhfZXhlYy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25wYXRoX2V4ZWMuYwppbmRleCAx ZDJkMDI0NWU4Li40NGQ5N2QwMGY0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQv anNvbnBhdGhfZXhlYy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29ucGF0aF9leGVj LmMKQEAgLTYxLDkgKzYxLDExIEBACiAKICNpbmNsdWRlICJjYXRhbG9nL3BnX2NvbGxhdGlvbi5o IgogI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgorI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWNF eHByLmgiCiAjaW5jbHVkZSAiZnVuY2FwaS5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2lu Y2x1ZGUgIm5vZGVzL21pc2Nub2Rlcy5oIgorI2luY2x1ZGUgIm5vZGVzL25vZGVGdW5jcy5oIgog I2luY2x1ZGUgInJlZ2V4L3JlZ2V4LmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNp bmNsdWRlICJ1dGlscy9kYXRlLmgiCkBAIC03MSw2ICs3Myw4IEBACiAjaW5jbHVkZSAidXRpbHMv ZmxvYXQuaCIKICNpbmNsdWRlICJ1dGlscy9mb3JtYXR0aW5nLmgiCiAjaW5jbHVkZSAidXRpbHMv anNvbnBhdGguaCIKKyNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKKyNpbmNsdWRlICJ1dGls cy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3RpbWVzdGFtcC5oIgogCiAvKgpAQCAtMTU0 LDYgKzE1OCw2MCBAQCB0eXBlZGVmIHN0cnVjdCBKc29uVmFsdWVMaXN0SXRlcmF0b3IKIAlMaXN0 Q2VsbCAgICpuZXh0OwogfSBKc29uVmFsdWVMaXN0SXRlcmF0b3I7CiAKKy8qIFN0cnVjdHVyZXMg Zm9yIEpTT05fVEFCTEUgZXhlY3V0aW9uICAqLworCit0eXBlZGVmIGVudW0gSnNvblRhYmxlUGxh blN0YXRlVHlwZQoreworCUpTT05fVEFCTEVfU0NBTl9TVEFURSA9IDAsCisJSlNPTl9UQUJMRV9K T0lOX1NUQVRFLAorfQkJCUpzb25UYWJsZVBsYW5TdGF0ZVR5cGU7CisKK3R5cGVkZWYgc3RydWN0 IEpzb25UYWJsZVBsYW5TdGF0ZQoreworCUpzb25UYWJsZVBsYW5TdGF0ZVR5cGUgdHlwZTsKKwor CXN0cnVjdCBKc29uVGFibGVQbGFuU3RhdGUgKnBhcmVudDsKKwlzdHJ1Y3QgSnNvblRhYmxlUGxh blN0YXRlICpuZXN0ZWQ7Cit9CQkJSnNvblRhYmxlUGxhblN0YXRlOworCit0eXBlZGVmIHN0cnVj dCBKc29uVGFibGVTY2FuU3RhdGUKK3sKKwlKc29uVGFibGVQbGFuU3RhdGUgcGxhbjsKKworCU1l bW9yeUNvbnRleHQgbWN4dDsKKwlKc29uUGF0aCAgICpwYXRoOworCUxpc3QJICAgKmFyZ3M7CisJ SnNvblZhbHVlTGlzdCBmb3VuZDsKKwlKc29uVmFsdWVMaXN0SXRlcmF0b3IgaXRlcjsKKwlEYXR1 bQkJY3VycmVudDsKKwlpbnQJCQlvcmRpbmFsOworCWJvb2wJCWN1cnJlbnRJc051bGw7CisJYm9v bAkJb3V0ZXJKb2luOworCWJvb2wJCWVycm9yT25FcnJvcjsKKwlib29sCQlhZHZhbmNlTmVzdGVk OworCWJvb2wJCXJlc2V0OworfSBKc29uVGFibGVTY2FuU3RhdGU7CisKK3R5cGVkZWYgc3RydWN0 IEpzb25UYWJsZUpvaW5TdGF0ZQoreworCUpzb25UYWJsZVBsYW5TdGF0ZSBwbGFuOworCisJSnNv blRhYmxlUGxhblN0YXRlICpsZWZ0OworCUpzb25UYWJsZVBsYW5TdGF0ZSAqcmlnaHQ7CisJYm9v bAkJY3Jvc3M7CisJYm9vbAkJYWR2YW5jZVJpZ2h0OworfSBKc29uVGFibGVKb2luU3RhdGU7CisK Ky8qIHJhbmRvbSBudW1iZXIgdG8gaWRlbnRpZnkgSnNvblRhYmxlRXhlY0NvbnRleHQgKi8KKyNk ZWZpbmUgSlNPTl9UQUJMRV9FWEVDX0NPTlRFWFRfTUFHSUMJCTQxODM1Mjg2NworCit0eXBlZGVm IHN0cnVjdCBKc29uVGFibGVFeGVjQ29udGV4dAoreworCWludAkJCW1hZ2ljOworCUpzb25UYWJs ZVNjYW5TdGF0ZSAqKmNvbGV4cHJzY2FuczsKKwlKc29uVGFibGVTY2FuU3RhdGUgKnJvb3Q7Cit9 CQkJSnNvblRhYmxlRXhlY0NvbnRleHQ7CisKIC8qIHN0cmljdC9sYXggZmxhZ3MgaXMgZGVjb21w b3NlZCBpbnRvIGZvdXIgW3VuXXdyYXAvZXJyb3IgZmxhZ3MgKi8KICNkZWZpbmUganNwU3RyaWN0 QWJzZW5jZU9mRXJyb3JzKGN4dCkJKCEoY3h0KS0+bGF4TW9kZSkKICNkZWZpbmUganNwQXV0b1Vu d3JhcChjeHQpCQkJCSgoY3h0KS0+bGF4TW9kZSkKQEAgLTI1Myw2ICszMTEsNyBAQCBzdGF0aWMg SnNvblBhdGhFeGVjUmVzdWx0IGdldEFycmF5SW5kZXgoSnNvblBhdGhFeGVjQ29udGV4dCAqY3h0 LAogCQkJCQkJCQkJCUpzb25QYXRoSXRlbSAqanNwLCBKc29uYlZhbHVlICpqYiwgaW50MzIgKmlu ZGV4KTsKIHN0YXRpYyBKc29uQmFzZU9iamVjdEluZm8gc2V0QmFzZU9iamVjdChKc29uUGF0aEV4 ZWNDb250ZXh0ICpjeHQsCiAJCQkJCQkJCQkJSnNvbmJWYWx1ZSAqamJ2LCBpbnQzMiBpZCk7Citz dGF0aWMgdm9pZCBKc29uVmFsdWVMaXN0Q2xlYXIoSnNvblZhbHVlTGlzdCAqanZsKTsKIHN0YXRp YyB2b2lkIEpzb25WYWx1ZUxpc3RBcHBlbmQoSnNvblZhbHVlTGlzdCAqanZsLCBKc29uYlZhbHVl ICpqYnYpOwogc3RhdGljIGludAlKc29uVmFsdWVMaXN0TGVuZ3RoKGNvbnN0IEpzb25WYWx1ZUxp c3QgKmp2bCk7CiBzdGF0aWMgYm9vbCBKc29uVmFsdWVMaXN0SXNFbXB0eShKc29uVmFsdWVMaXN0 ICpqdmwpOwpAQCAtMjcyLDYgKzMzMSwzMiBAQCBzdGF0aWMgaW50CWNvbXBhcmVEYXRldGltZShE YXR1bSB2YWwxLCBPaWQgdHlwaWQxLCBEYXR1bSB2YWwyLCBPaWQgdHlwaWQyLAogc3RhdGljIHZv aWQgY2hlY2tUaW1lem9uZUlzVXNlZEZvckNhc3QoYm9vbCB1c2VUeiwgY29uc3QgY2hhciAqdHlw ZTEsCiAJCQkJCQkJCQkgICBjb25zdCBjaGFyICp0eXBlMik7CiAKKworc3RhdGljIEpzb25UYWJs ZVBsYW5TdGF0ZSAqIEpzb25UYWJsZUluaXRQbGFuU3RhdGUoSnNvblRhYmxlRXhlY0NvbnRleHQg KiBjeHQsCisJCQkJCQkJCQkJCQkgICBOb2RlICpwbGFuLAorCQkJCQkJCQkJCQkJICAgSnNvblRh YmxlUGxhblN0YXRlICogcGFyZW50KTsKK3N0YXRpYyBib29sIEpzb25UYWJsZVBsYW5OZXh0Um93 KEpzb25UYWJsZVBsYW5TdGF0ZSAqIHN0YXRlKTsKK3N0YXRpYyBib29sIEpzb25UYWJsZVNjYW5O ZXh0Um93KEpzb25UYWJsZVNjYW5TdGF0ZSAqc2Nhbik7CisKK3N0YXRpYyB2b2lkIEpzb25UYWJs ZUluaXRPcGFxdWUoVGFibGVGdW5jU2NhblN0YXRlICpzdGF0ZSwgaW50IG5hdHRzKTsKK3N0YXRp YyB2b2lkIEpzb25UYWJsZVNldERvY3VtZW50KFRhYmxlRnVuY1NjYW5TdGF0ZSAqc3RhdGUsIERh dHVtIHZhbHVlKTsKK3N0YXRpYyBib29sIEpzb25UYWJsZUZldGNoUm93KFRhYmxlRnVuY1NjYW5T dGF0ZSAqc3RhdGUpOworc3RhdGljIERhdHVtIEpzb25UYWJsZUdldFZhbHVlKFRhYmxlRnVuY1Nj YW5TdGF0ZSAqc3RhdGUsIGludCBjb2xudW0sCisJCQkJICBPaWQgdHlwaWQsIGludDMyIHR5cG1v ZCwgYm9vbCAqaXNudWxsKTsKK3N0YXRpYyB2b2lkIEpzb25UYWJsZURlc3Ryb3lPcGFxdWUoVGFi bGVGdW5jU2NhblN0YXRlICpzdGF0ZSk7CisKK2NvbnN0IFRhYmxlRnVuY1JvdXRpbmUgSnNvbmJU YWJsZVJvdXRpbmUgPQoreworCUpzb25UYWJsZUluaXRPcGFxdWUsCisJSnNvblRhYmxlU2V0RG9j dW1lbnQsCisJTlVMTCwKKwlOVUxMLAorCU5VTEwsCisJSnNvblRhYmxlRmV0Y2hSb3csCisJSnNv blRhYmxlR2V0VmFsdWUsCisJSnNvblRhYmxlRGVzdHJveU9wYXF1ZQorfTsKKwogLyoqKioqKioq KioqKioqKioqKiBVc2VyIGludGVyZmFjZSB0byBKc29uUGF0aCBleGVjdXRvciAqKioqKioqKioq KioqKioqKioqKi8KIAogLyoKQEAgLTMzODMsNiArMzQ2OCwxMyBAQCBzZXRCYXNlT2JqZWN0KEpz b25QYXRoRXhlY0NvbnRleHQgKmN4dCwgSnNvbmJWYWx1ZSAqamJ2LCBpbnQzMiBpZCkKIAlyZXR1 cm4gYmFzZU9iamVjdDsKIH0KIAorc3RhdGljIHZvaWQKK0pzb25WYWx1ZUxpc3RDbGVhcihKc29u VmFsdWVMaXN0ICpqdmwpCit7CisJanZsLT5zaW5nbGV0b24gPSBOVUxMOworCWp2bC0+bGlzdCA9 IE5VTEw7Cit9CisKIHN0YXRpYyB2b2lkCiBKc29uVmFsdWVMaXN0QXBwZW5kKEpzb25WYWx1ZUxp c3QgKmp2bCwgSnNvbmJWYWx1ZSAqamJ2KQogewpAQCAtMzkxOCwzICs0MDEwLDQ1OCBAQCBKc29u UGF0aFZhbHVlKERhdHVtIGpiLCBKc29uUGF0aCAqanAsIGJvb2wgKmVtcHR5LCBib29sICplcnJv ciwgTGlzdCAqdmFycykKIAogCXJldHVybiByZXM7CiB9CisKKy8qKioqKioqKioqKioqKioqKioq KioqKiogSlNPTl9UQUJMRSBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqLwor CisvKgorICogUmV0dXJucyBwcml2YXRlIGRhdGEgZnJvbSBleGVjdXRvciBzdGF0ZS4gRW5zdXJl IHZhbGlkaXR5IGJ5IGNoZWNrIHdpdGgKKyAqIE1BR0lDIG51bWJlci4KKyAqLworc3RhdGljIGlu bGluZSBKc29uVGFibGVFeGVjQ29udGV4dCAqCitHZXRKc29uVGFibGVFeGVjQ29udGV4dChUYWJs ZUZ1bmNTY2FuU3RhdGUgKnN0YXRlLCBjb25zdCBjaGFyICpmbmFtZSkKK3sKKwlKc29uVGFibGVF eGVjQ29udGV4dCAqcmVzdWx0OworCisJaWYgKCFJc0Eoc3RhdGUsIFRhYmxlRnVuY1NjYW5TdGF0 ZSkpCisJCWVsb2coRVJST1IsICIlcyBjYWxsZWQgd2l0aCBpbnZhbGlkIFRhYmxlRnVuY1NjYW5T dGF0ZSIsIGZuYW1lKTsKKwlyZXN1bHQgPSAoSnNvblRhYmxlRXhlY0NvbnRleHQgKikgc3RhdGUt Pm9wYXF1ZTsKKwlpZiAocmVzdWx0LT5tYWdpYyAhPSBKU09OX1RBQkxFX0VYRUNfQ09OVEVYVF9N QUdJQykKKwkJZWxvZyhFUlJPUiwgIiVzIGNhbGxlZCB3aXRoIGludmFsaWQgVGFibGVGdW5jU2Nh blN0YXRlIiwgZm5hbWUpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyogUmVjdXJzaXZlbHkg aW5pdGlhbGl6ZSBKU09OX1RBQkxFIHNjYW4gLyBqb2luIHN0YXRlICovCitzdGF0aWMgSnNvblRh YmxlSm9pblN0YXRlICoKK0pzb25UYWJsZUluaXRKb2luU3RhdGUoSnNvblRhYmxlRXhlY0NvbnRl eHQgKiBjeHQsIEpzb25UYWJsZVNpYmxpbmcgKnBsYW4sCisJCQkJCSAgIEpzb25UYWJsZVBsYW5T dGF0ZSAqIHBhcmVudCkKK3sKKwlKc29uVGFibGVKb2luU3RhdGUgKmpvaW4gPSBwYWxsb2MwKHNp emVvZigqam9pbikpOworCisJam9pbi0+cGxhbi50eXBlID0gSlNPTl9UQUJMRV9KT0lOX1NUQVRF OworCS8qIHBhcmVudCBhbmQgbmVzdGVkIG5vdCBzZXQuICovCisKKwlqb2luLT5jcm9zcyA9IHBs YW4tPmNyb3NzOworCWpvaW4tPmxlZnQgPSBKc29uVGFibGVJbml0UGxhblN0YXRlKGN4dCwgcGxh bi0+bGFyZywgcGFyZW50KTsKKwlqb2luLT5yaWdodCA9IEpzb25UYWJsZUluaXRQbGFuU3RhdGUo Y3h0LCBwbGFuLT5yYXJnLCBwYXJlbnQpOworCisJcmV0dXJuIGpvaW47Cit9CisKK3N0YXRpYyBK c29uVGFibGVTY2FuU3RhdGUgKgorSnNvblRhYmxlSW5pdFNjYW5TdGF0ZShKc29uVGFibGVFeGVj Q29udGV4dCAqIGN4dCwKKwkJCQkJICAgSnNvblRhYmxlUGxhbiAqcGxhbiwKKwkJCQkJICAgSnNv blRhYmxlUGxhblN0YXRlICpwYXJlbnQsCisJCQkJCSAgIExpc3QgKmFyZ3MsIE1lbW9yeUNvbnRl eHQgbWN4dCkKK3sKKwlKc29uVGFibGVTY2FuU3RhdGUgKnNjYW4gPSBwYWxsb2MwKHNpemVvZigq c2NhbikpOworCWludAkJCWk7CisKKwlzY2FuLT5wbGFuLnR5cGUgPSBKU09OX1RBQkxFX1NDQU5f U1RBVEU7CisJc2Nhbi0+cGxhbi5wYXJlbnQgPSBwYXJlbnQ7CisKKwlzY2FuLT5vdXRlckpvaW4g PSBwbGFuLT5vdXRlckpvaW47CisJc2Nhbi0+ZXJyb3JPbkVycm9yID0gcGxhbi0+ZXJyb3JPbkVy cm9yOworCXNjYW4tPnBhdGggPSBEYXR1bUdldEpzb25QYXRoUChwbGFuLT5wYXRoLT52YWx1ZS0+ Y29uc3R2YWx1ZSk7CisJc2Nhbi0+YXJncyA9IGFyZ3M7CisJc2Nhbi0+bWN4dCA9IEFsbG9jU2V0 Q29udGV4dENyZWF0ZShtY3h0LCAiSnNvblRhYmxlRXhlY0NvbnRleHQiLAorCQkJCQkJCQkJICAg QUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7CisKKwkvKgorCSAqIFNldCBhZnRlciBzZXR0aW5ncyBz Y2FuLT5hcmdzIGFuZCBzY2FuLT5tY3h0LCBiZWNhdXNlIHRoZSByZWN1cnNpdmUKKwkgKiBjYWxs IHdhbnRzIHRvIHVzZSB0aG9zZSB2YWx1ZXMuCisJICovCisJc2Nhbi0+cGxhbi5uZXN0ZWQgPSBw bGFuLT5jaGlsZCA/CisJCUpzb25UYWJsZUluaXRQbGFuU3RhdGUoY3h0LCBwbGFuLT5jaGlsZCwg KEpzb25UYWJsZVBsYW5TdGF0ZSAqKSBzY2FuKSA6CisJCU5VTEw7CisKKwlzY2FuLT5jdXJyZW50 ID0gUG9pbnRlckdldERhdHVtKE5VTEwpOworCXNjYW4tPmN1cnJlbnRJc051bGwgPSB0cnVlOwor CisJZm9yIChpID0gcGxhbi0+Y29sTWluOyBpIDw9IHBsYW4tPmNvbE1heDsgaSsrKQorCQljeHQt PmNvbGV4cHJzY2Fuc1tpXSA9IHNjYW47CisKKwlyZXR1cm4gc2NhbjsKK30KKworLyogUmVjdXJz aXZlbHkgaW5pdGlhbGl6ZSBKU09OX1RBQkxFIHNjYW4gc3RhdGUgKi8KK3N0YXRpYyBKc29uVGFi bGVQbGFuU3RhdGUgKgorSnNvblRhYmxlSW5pdFBsYW5TdGF0ZShKc29uVGFibGVFeGVjQ29udGV4 dCAqIGN4dCwgTm9kZSAqcGxhbiwKKwkJCQkJICAgSnNvblRhYmxlUGxhblN0YXRlICogcGFyZW50 KQoreworCUpzb25UYWJsZVBsYW5TdGF0ZSAqc3RhdGU7CisKKwlpZiAoSXNBKHBsYW4sIEpzb25U YWJsZVNpYmxpbmcpKQorCXsKKwkJSnNvblRhYmxlU2libGluZyAqam9pbiA9IChKc29uVGFibGVT aWJsaW5nICopIHBsYW47CisKKwkJc3RhdGUgPSAoSnNvblRhYmxlUGxhblN0YXRlICopCisJCQlK c29uVGFibGVJbml0Sm9pblN0YXRlKGN4dCwgam9pbiwgcGFyZW50KTsKKwl9CisJZWxzZQorCXsK KwkJSnNvblRhYmxlUGxhbiAqc2NhbiA9IGNhc3ROb2RlKEpzb25UYWJsZVBsYW4sIHBsYW4pOwor CQlKc29uVGFibGVTY2FuU3RhdGUgKnBhcmVudF9zY2FuID0gKEpzb25UYWJsZVNjYW5TdGF0ZSAq KSBwYXJlbnQ7CisKKwkJQXNzZXJ0KHBhcmVudF9zY2FuKTsKKwkJc3RhdGUgPSAoSnNvblRhYmxl UGxhblN0YXRlICopCisJCQlKc29uVGFibGVJbml0U2NhblN0YXRlKGN4dCwgc2NhbiwgcGFyZW50 LCBwYXJlbnRfc2Nhbi0+YXJncywKKwkJCQkJCQkJICAgcGFyZW50X3NjYW4tPm1jeHQpOworCX0K KworCXJldHVybiBzdGF0ZTsKK30KKworLyoKKyAqIEpzb25UYWJsZUluaXRPcGFxdWUKKyAqCQlG aWxsIGluIFRhYmxlRnVuY1NjYW5TdGF0ZS0+b3BhcXVlIGZvciBKc29uVGFibGUgcHJvY2Vzc29y CisgKi8KK3N0YXRpYyB2b2lkCitKc29uVGFibGVJbml0T3BhcXVlKFRhYmxlRnVuY1NjYW5TdGF0 ZSAqc3RhdGUsIGludCBuYXR0cykKK3sKKwlKc29uVGFibGVFeGVjQ29udGV4dCAqY3h0OworCVBs YW5TdGF0ZSAgKnBzID0gJnN0YXRlLT5zcy5wczsKKwlUYWJsZUZ1bmNTY2FuICp0ZnMgPSBjYXN0 Tm9kZShUYWJsZUZ1bmNTY2FuLCBwcy0+cGxhbik7CisJVGFibGVGdW5jICAqdGYgPSB0ZnMtPnRh YmxlZnVuYzsKKwlKc29uVGFibGVQbGFuICpyb290ID0gY2FzdE5vZGUoSnNvblRhYmxlUGxhbiwg dGYtPnBsYW4pOworCUpzb25FeHByICAgKmplID0gY2FzdE5vZGUoSnNvbkV4cHIsIHRmLT5kb2Nl eHByKTsKKwlMaXN0CSAgICphcmdzID0gTklMOworCisJY3h0ID0gcGFsbG9jMChzaXplb2YoSnNv blRhYmxlRXhlY0NvbnRleHQpKTsKKwljeHQtPm1hZ2ljID0gSlNPTl9UQUJMRV9FWEVDX0NPTlRF WFRfTUFHSUM7CisKKwlpZiAoc3RhdGUtPnBhc3Npbmd2YWxleHBycykKKwl7CisJCUxpc3RDZWxs ICAgKmV4cHJsYzsKKwkJTGlzdENlbGwgICAqbmFtZWxjOworCisJCUFzc2VydChsaXN0X2xlbmd0 aChzdGF0ZS0+cGFzc2luZ3ZhbGV4cHJzKSA9PQorCQkJICAgbGlzdF9sZW5ndGgoamUtPnBhc3Np bmdfbmFtZXMpKTsKKwkJZm9yYm90aChleHBybGMsIHN0YXRlLT5wYXNzaW5ndmFsZXhwcnMsCisJ CQkJbmFtZWxjLCBqZS0+cGFzc2luZ19uYW1lcykKKwkJeworCQkJRXhwclN0YXRlICAqc3RhdGUg PSBsZmlyc3Rfbm9kZShFeHByU3RhdGUsIGV4cHJsYyk7CisJCQlTdHJpbmcJICAgKm5hbWUgPSBs Zmlyc3Rfbm9kZShTdHJpbmcsIG5hbWVsYyk7CisJCQlKc29uUGF0aFZhcmlhYmxlICp2YXIgPSBw YWxsb2Moc2l6ZW9mKCp2YXIpKTsKKworCQkJdmFyLT5uYW1lID0gcHN0cmR1cChuYW1lLT5zdmFs KTsKKwkJCXZhci0+dHlwaWQgPSBleHByVHlwZSgoTm9kZSAqKSBzdGF0ZS0+ZXhwcik7CisJCQl2 YXItPnR5cG1vZCA9IGV4cHJUeXBtb2QoKE5vZGUgKikgc3RhdGUtPmV4cHIpOworCisJCQkvKgor CQkJICogRXZhbHVhdGUgdGhlIGV4cHJlc3Npb24gYW5kIHNhdmUgdGhlIHZhbHVlIHRvIGJlIHJl dHVybmVkIGJ5CisJCQkgKiBHZXRKc29uUGF0aFZhcigpLgorCQkJICovCisJCQl2YXItPnZhbHVl ID0gRXhlY0V2YWxFeHByKHN0YXRlLCBwcy0+cHNfRXhwckNvbnRleHQsCisJCQkJCQkJCQkgICZ2 YXItPmlzbnVsbCk7CisKKwkJCWFyZ3MgPSBsYXBwZW5kKGFyZ3MsIHZhcik7CisJCX0KKwl9CisK KwljeHQtPmNvbGV4cHJzY2FucyA9IHBhbGxvYyhzaXplb2YoSnNvblRhYmxlU2NhblN0YXRlICop ICoKKwkJCQkJCQkgICBsaXN0X2xlbmd0aCh0Zi0+Y29sdmFsZXhwcnMpKTsKKworCWN4dC0+cm9v dCA9IEpzb25UYWJsZUluaXRTY2FuU3RhdGUoY3h0LCByb290LCBOVUxMLCBhcmdzLAorCQkJCQkJ CQkJICAgQ3VycmVudE1lbW9yeUNvbnRleHQpOworCXN0YXRlLT5vcGFxdWUgPSBjeHQ7Cit9CisK Ky8qIFJlc2V0IHNjYW4gaXRlcmF0b3IgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgaXRlbSBsaXN0 ICovCitzdGF0aWMgdm9pZAorSnNvblRhYmxlUmVzY2FuKEpzb25UYWJsZVNjYW5TdGF0ZSAqc2Nh bikKK3sKKwlKc29uVmFsdWVMaXN0SW5pdEl0ZXJhdG9yKCZzY2FuLT5mb3VuZCwgJnNjYW4tPml0 ZXIpOworCXNjYW4tPmN1cnJlbnQgPSBQb2ludGVyR2V0RGF0dW0oTlVMTCk7CisJc2Nhbi0+Y3Vy cmVudElzTnVsbCA9IHRydWU7CisJc2Nhbi0+YWR2YW5jZU5lc3RlZCA9IGZhbHNlOworCXNjYW4t Pm9yZGluYWwgPSAwOworfQorCisvKiBSZXNldCBjb250ZXh0IGl0ZW0gb2YgYSBzY2FuLCBleGVj dXRlIEpTT04gcGF0aCBhbmQgcmVzZXQgYSBzY2FuICovCitzdGF0aWMgdm9pZAorSnNvblRhYmxl UmVzZXRDb250ZXh0SXRlbShKc29uVGFibGVTY2FuU3RhdGUgKnNjYW4sIERhdHVtIGl0ZW0pCit7 CisJTWVtb3J5Q29udGV4dCBvbGRjeHQ7CisJSnNvblBhdGhFeGVjUmVzdWx0IHJlczsKKwlKc29u YgkgICAqanMgPSAoSnNvbmIgKikgRGF0dW1HZXRKc29uYlAoaXRlbSk7CisKKwlKc29uVmFsdWVM aXN0Q2xlYXIoJnNjYW4tPmZvdW5kKTsKKworCU1lbW9yeUNvbnRleHRSZXNldE9ubHkoc2Nhbi0+ bWN4dCk7CisKKwlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oc2Nhbi0+bWN4dCk7CisK KwlyZXMgPSBleGVjdXRlSnNvblBhdGgoc2Nhbi0+cGF0aCwgc2Nhbi0+YXJncywKKwkJCQkJCSAg R2V0SnNvblBhdGhWYXIsIENvdW50SnNvblBhdGhWYXJzLAorCQkJCQkJICBqcywgc2Nhbi0+ZXJy b3JPbkVycm9yLCAmc2Nhbi0+Zm91bmQsCisJCQkJCQkgIGZhbHNlIC8qIEZJWE1FICovICk7CisK KwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKKworCWlmIChqcGVySXNFcnJvcihyZXMp KQorCXsKKwkJQXNzZXJ0KCFzY2FuLT5lcnJvck9uRXJyb3IpOworCQlKc29uVmFsdWVMaXN0Q2xl YXIoJnNjYW4tPmZvdW5kKTsJLyogRU1QVFkgT04gRVJST1IgY2FzZSAqLworCX0KKworCUpzb25U YWJsZVJlc2NhbihzY2FuKTsKK30KKworLyoKKyAqIEpzb25UYWJsZVNldERvY3VtZW50CisgKgkJ SW5zdGFsbCB0aGUgaW5wdXQgZG9jdW1lbnQKKyAqLworc3RhdGljIHZvaWQKK0pzb25UYWJsZVNl dERvY3VtZW50KFRhYmxlRnVuY1NjYW5TdGF0ZSAqc3RhdGUsIERhdHVtIHZhbHVlKQoreworCUpz b25UYWJsZUV4ZWNDb250ZXh0ICpjeHQgPQorCQlHZXRKc29uVGFibGVFeGVjQ29udGV4dChzdGF0 ZSwgIkpzb25UYWJsZVNldERvY3VtZW50Iik7CisKKwlKc29uVGFibGVSZXNldENvbnRleHRJdGVt KGN4dC0+cm9vdCwgdmFsdWUpOworfQorCisvKiBSZWN1cnNpdmVseSByZXNldCBzY2FuIGFuZCBp dHMgY2hpbGQgbm9kZXMgKi8KK3N0YXRpYyB2b2lkCitKc29uVGFibGVSZXNjYW5SZWN1cnNpdmUo SnNvblRhYmxlUGxhblN0YXRlICogc3RhdGUpCit7CisJaWYgKHN0YXRlLT50eXBlID09IEpTT05f VEFCTEVfSk9JTl9TVEFURSkKKwl7CisJCUpzb25UYWJsZUpvaW5TdGF0ZSAqam9pbiA9IChKc29u VGFibGVKb2luU3RhdGUgKikgc3RhdGU7CisKKwkJSnNvblRhYmxlUmVzY2FuUmVjdXJzaXZlKGpv aW4tPmxlZnQpOworCQlKc29uVGFibGVSZXNjYW5SZWN1cnNpdmUoam9pbi0+cmlnaHQpOworCQlq b2luLT5hZHZhbmNlUmlnaHQgPSBmYWxzZTsKKwl9CisJZWxzZQorCXsKKwkJSnNvblRhYmxlU2Nh blN0YXRlICpzY2FuID0gKEpzb25UYWJsZVNjYW5TdGF0ZSAqKSBzdGF0ZTsKKworCQlBc3NlcnQo c3RhdGUtPnR5cGUgPT0gSlNPTl9UQUJMRV9TQ0FOX1NUQVRFKTsKKwkJSnNvblRhYmxlUmVzY2Fu KHNjYW4pOworCQlpZiAoc2Nhbi0+cGxhbi5uZXN0ZWQpCisJCQlKc29uVGFibGVSZXNjYW5SZWN1 cnNpdmUoc2Nhbi0+cGxhbi5uZXN0ZWQpOworCX0KK30KKworLyoKKyAqIEZldGNoIG5leHQgcm93 IGZyb20gYSBjcm9zcy91bmlvbiBqb2luZWQgc2Nhbi4KKyAqCisgKiBSZXR1cm5zIGZhbHNlIGF0 IHRoZSBlbmQgb2YgYSBzY2FuLCB0cnVlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGJvb2wKK0pz b25UYWJsZVBsYW5OZXh0Um93KEpzb25UYWJsZVBsYW5TdGF0ZSAqIHN0YXRlKQoreworCUpzb25U YWJsZUpvaW5TdGF0ZSAqam9pbjsKKworCWlmIChzdGF0ZS0+dHlwZSA9PSBKU09OX1RBQkxFX1ND QU5fU1RBVEUpCisJCXJldHVybiBKc29uVGFibGVTY2FuTmV4dFJvdygoSnNvblRhYmxlU2NhblN0 YXRlICopIHN0YXRlKTsKKworCWpvaW4gPSAoSnNvblRhYmxlSm9pblN0YXRlICopIHN0YXRlOwor CWlmIChqb2luLT5hZHZhbmNlUmlnaHQpCisJeworCQkvKiBmZXRjaCBuZXh0IGlubmVyIHJvdyAq LworCQlpZiAoSnNvblRhYmxlUGxhbk5leHRSb3coam9pbi0+cmlnaHQpKQorCQkJcmV0dXJuIHRy dWU7CisKKwkJLyogaW5uZXIgcm93cyBhcmUgZXhoYXVzdGVkICovCisJCWlmIChqb2luLT5jcm9z cykKKwkJCWpvaW4tPmFkdmFuY2VSaWdodCA9IGZhbHNlOyAvKiBuZXh0IG91dGVyIHJvdyAqLwor CQllbHNlCisJCQlyZXR1cm4gZmFsc2U7CQkvKiBlbmQgb2Ygc2NhbiAqLworCX0KKworCXdoaWxl ICgham9pbi0+YWR2YW5jZVJpZ2h0KQorCXsKKwkJLyogZmV0Y2ggbmV4dCBvdXRlciByb3cgKi8K KwkJYm9vbAkJbW9yZSA9IEpzb25UYWJsZVBsYW5OZXh0Um93KGpvaW4tPmxlZnQpOworCisJCWlm IChqb2luLT5jcm9zcykKKwkJeworCQkJaWYgKCFtb3JlKQorCQkJCXJldHVybiBmYWxzZTsJLyog ZW5kIG9mIHNjYW4gKi8KKworCQkJSnNvblRhYmxlUmVzY2FuUmVjdXJzaXZlKGpvaW4tPnJpZ2h0 KTsKKworCQkJaWYgKCFKc29uVGFibGVQbGFuTmV4dFJvdyhqb2luLT5yaWdodCkpCisJCQkJY29u dGludWU7CQkvKiBuZXh0IG91dGVyIHJvdyAqLworCisJCQlqb2luLT5hZHZhbmNlUmlnaHQgPSB0 cnVlOwkvKiBuZXh0IGlubmVyIHJvdyAqLworCQl9CisJCWVsc2UgaWYgKCFtb3JlKQorCQl7CisJ CQlpZiAoIUpzb25UYWJsZVBsYW5OZXh0Um93KGpvaW4tPnJpZ2h0KSkKKwkJCQlyZXR1cm4gZmFs c2U7CS8qIGVuZCBvZiBzY2FuICovCisKKwkJCWpvaW4tPmFkdmFuY2VSaWdodCA9IHRydWU7CS8q IG5leHQgaW5uZXIgcm93ICovCisJCX0KKworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsK K30KKworLyogUmVjdXJzaXZlbHkgc2V0ICdyZXNldCcgZmxhZyBvZiBzY2FuIGFuZCBpdHMgY2hp bGQgbm9kZXMgKi8KK3N0YXRpYyB2b2lkCitKc29uVGFibGVQbGFuUmVzZXQoSnNvblRhYmxlUGxh blN0YXRlICogc3RhdGUpCit7CisJaWYgKHN0YXRlLT50eXBlID09IEpTT05fVEFCTEVfSk9JTl9T VEFURSkKKwl7CisJCUpzb25UYWJsZUpvaW5TdGF0ZSAqam9pbiA9IChKc29uVGFibGVKb2luU3Rh dGUgKikgc3RhdGU7CisKKwkJSnNvblRhYmxlUGxhblJlc2V0KGpvaW4tPmxlZnQpOworCQlKc29u VGFibGVQbGFuUmVzZXQoam9pbi0+cmlnaHQpOworCQlqb2luLT5hZHZhbmNlUmlnaHQgPSBmYWxz ZTsKKwl9CisJZWxzZQorCXsKKwkJSnNvblRhYmxlU2NhblN0YXRlICpzY2FuOworCisJCUFzc2Vy dChzdGF0ZS0+dHlwZSA9PSBKU09OX1RBQkxFX1NDQU5fU1RBVEUpOworCQlzY2FuID0gKEpzb25U YWJsZVNjYW5TdGF0ZSAqKSBzdGF0ZTsKKwkJc2Nhbi0+cmVzZXQgPSB0cnVlOworCQlzY2FuLT5h ZHZhbmNlTmVzdGVkID0gZmFsc2U7CisKKwkJaWYgKHNjYW4tPnBsYW4ubmVzdGVkKQorCQkJSnNv blRhYmxlUGxhblJlc2V0KHNjYW4tPnBsYW4ubmVzdGVkKTsKKwl9Cit9CisKKy8qCisgKiBGZXRj aCBuZXh0IHJvdyBmcm9tIGEgc2ltcGxlIHNjYW4gd2l0aCBvdXRlci9pbm5lciBqb2luZWQgbmVz dGVkIHN1YnNjYW5zLgorICoKKyAqIFJldHVybnMgZmFsc2UgYXQgdGhlIGVuZCBvZiBhIHNjYW4s IHRydWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgYm9vbAorSnNvblRhYmxlU2Nhbk5leHRSb3co SnNvblRhYmxlU2NhblN0YXRlICpzY2FuKQoreworCS8qIHJlc2V0IGNvbnRleHQgaXRlbSBpZiBy ZXF1ZXN0ZWQgKi8KKwlpZiAoc2Nhbi0+cmVzZXQpCisJeworCQlKc29uVGFibGVTY2FuU3RhdGUg KnBhcmVudF9zY2FuID0KKwkJCShKc29uVGFibGVTY2FuU3RhdGUgKikgc2Nhbi0+cGxhbi5wYXJl bnQ7CisKKwkJQXNzZXJ0KHBhcmVudF9zY2FuICYmICFwYXJlbnRfc2Nhbi0+Y3VycmVudElzTnVs bCk7CisJCUpzb25UYWJsZVJlc2V0Q29udGV4dEl0ZW0oc2NhbiwgcGFyZW50X3NjYW4tPmN1cnJl bnQpOworCQlzY2FuLT5yZXNldCA9IGZhbHNlOworCX0KKworCWlmIChzY2FuLT5hZHZhbmNlTmVz dGVkKQorCXsKKwkJLyogZmV0Y2ggbmV4dCBuZXN0ZWQgcm93ICovCisJCXNjYW4tPmFkdmFuY2VO ZXN0ZWQgPSBKc29uVGFibGVQbGFuTmV4dFJvdyhzY2FuLT5wbGFuLm5lc3RlZCk7CisKKwkJaWYg KHNjYW4tPmFkdmFuY2VOZXN0ZWQpCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlmb3IgKDs7KQor CXsKKwkJLyogZmV0Y2ggbmV4dCByb3cgKi8KKwkJSnNvbmJWYWx1ZSAqamJ2ID0gSnNvblZhbHVl TGlzdE5leHQoJnNjYW4tPmZvdW5kLCAmc2Nhbi0+aXRlcik7CisJCU1lbW9yeUNvbnRleHQgb2xk Y3h0OworCisJCWlmICghamJ2KQorCQl7CisJCQlzY2FuLT5jdXJyZW50ID0gUG9pbnRlckdldERh dHVtKE5VTEwpOworCQkJc2Nhbi0+Y3VycmVudElzTnVsbCA9IHRydWU7CisJCQlyZXR1cm4gZmFs c2U7CQkvKiBlbmQgb2Ygc2NhbiAqLworCQl9CisKKwkJLyogc2V0IGN1cnJlbnQgcm93IGl0ZW0g Ki8KKwkJb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHNjYW4tPm1jeHQpOworCQlzY2Fu LT5jdXJyZW50ID0gSnNvbmJQR2V0RGF0dW0oSnNvbmJWYWx1ZVRvSnNvbmIoamJ2KSk7CisJCXNj YW4tPmN1cnJlbnRJc051bGwgPSBmYWxzZTsKKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4 dCk7CisKKwkJc2Nhbi0+b3JkaW5hbCsrOworCisJCWlmICghc2Nhbi0+cGxhbi5uZXN0ZWQpCisJ CQlicmVhazsKKworCQlKc29uVGFibGVQbGFuUmVzZXQoc2Nhbi0+cGxhbi5uZXN0ZWQpOworCisJ CXNjYW4tPmFkdmFuY2VOZXN0ZWQgPSBKc29uVGFibGVQbGFuTmV4dFJvdyhzY2FuLT5wbGFuLm5l c3RlZCk7CisKKwkJaWYgKHNjYW4tPmFkdmFuY2VOZXN0ZWQgfHwgc2Nhbi0+b3V0ZXJKb2luKQor CQkJYnJlYWs7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBKc29uVGFibGVGZXRj aFJvdworICoJCVByZXBhcmUgdGhlIG5leHQgImN1cnJlbnQiIHR1cGxlIGZvciB1cGNvbWluZyBH ZXRWYWx1ZSBjYWxscy4KKyAqCQlSZXR1cm5zIGZhbHNlIGlmIG5vIG1vcmUgcm93cyBjYW4gYmUg cmV0dXJuZWQuCisgKi8KK3N0YXRpYyBib29sCitKc29uVGFibGVGZXRjaFJvdyhUYWJsZUZ1bmNT Y2FuU3RhdGUgKnN0YXRlKQoreworCUpzb25UYWJsZUV4ZWNDb250ZXh0ICpjeHQgPQorCQlHZXRK c29uVGFibGVFeGVjQ29udGV4dChzdGF0ZSwgIkpzb25UYWJsZUZldGNoUm93Iik7CisKKwlyZXR1 cm4gSnNvblRhYmxlU2Nhbk5leHRSb3coY3h0LT5yb290KTsKK30KKworLyoKKyAqIEpzb25UYWJs ZUdldFZhbHVlCisgKgkJUmV0dXJuIHRoZSB2YWx1ZSBmb3IgY29sdW1uIG51bWJlciAnY29sbnVt JyBmb3IgdGhlIGN1cnJlbnQgcm93LgorICoKKyAqIFRoaXMgbGVha3MgbWVtb3J5LCBzbyBiZSBz dXJlIHRvIHJlc2V0IG9mdGVuIHRoZSBjb250ZXh0IGluIHdoaWNoIGl0J3MKKyAqIGNhbGxlZC4K KyAqLworc3RhdGljIERhdHVtCitKc29uVGFibGVHZXRWYWx1ZShUYWJsZUZ1bmNTY2FuU3RhdGUg KnN0YXRlLCBpbnQgY29sbnVtLAorCQkJCSAgT2lkIHR5cGlkLCBpbnQzMiB0eXBtb2QsIGJvb2wg KmlzbnVsbCkKK3sKKwlKc29uVGFibGVFeGVjQ29udGV4dCAqY3h0ID0KKwkJR2V0SnNvblRhYmxl RXhlY0NvbnRleHQoc3RhdGUsICJKc29uVGFibGVHZXRWYWx1ZSIpOworCUV4cHJDb250ZXh0ICpl Y29udGV4dCA9IHN0YXRlLT5zcy5wcy5wc19FeHByQ29udGV4dDsKKwlFeHByU3RhdGUgICplc3Rh dGUgPSBsaXN0X250aChzdGF0ZS0+Y29sdmFsZXhwcnMsIGNvbG51bSk7CisJSnNvblRhYmxlU2Nh blN0YXRlICpzY2FuID0gY3h0LT5jb2xleHByc2NhbnNbY29sbnVtXTsKKwlEYXR1bQkJcmVzdWx0 OworCisJaWYgKHNjYW4tPmN1cnJlbnRJc051bGwpCS8qIE5VTEwgZnJvbSBvdXRlci91bmlvbiBq b2luICovCisJeworCQlyZXN1bHQgPSAoRGF0dW0pIDA7CisJCSppc251bGwgPSB0cnVlOworCX0K KwllbHNlIGlmIChlc3RhdGUpCQkJLyogcmVndWxhciBjb2x1bW4gKi8KKwl7CisJCURhdHVtCQlz YXZlZF9jYXNlVmFsdWUgPSBlY29udGV4dC0+Y2FzZVZhbHVlX2RhdHVtOworCQlib29sCQlzYXZl ZF9jYXNlSXNOdWxsID0gZWNvbnRleHQtPmNhc2VWYWx1ZV9pc051bGw7CisKKwkJLyogUGFzcyB0 aGUgdmFsdWUgZm9yIENhc2VUZXN0RXhwciB0aGF0IG1heSBiZSBwcmVzZW50IGluIGNvbGV4cHIg Ki8KKwkJZWNvbnRleHQtPmNhc2VWYWx1ZV9kYXR1bSA9IHNjYW4tPmN1cnJlbnQ7CisJCWVjb250 ZXh0LT5jYXNlVmFsdWVfaXNOdWxsID0gZmFsc2U7CisKKwkJcmVzdWx0ID0gRXhlY0V2YWxFeHBy KGVzdGF0ZSwgZWNvbnRleHQsIGlzbnVsbCk7CisKKwkJZWNvbnRleHQtPmNhc2VWYWx1ZV9kYXR1 bSA9IHNhdmVkX2Nhc2VWYWx1ZTsKKwkJZWNvbnRleHQtPmNhc2VWYWx1ZV9pc051bGwgPSBzYXZl ZF9jYXNlSXNOdWxsOworCX0KKwllbHNlCisJeworCQlyZXN1bHQgPSBJbnQzMkdldERhdHVtKHNj YW4tPm9yZGluYWwpOwkvKiBvcmRpbmFsaXR5IGNvbHVtbiAqLworCQkqaXNudWxsID0gZmFsc2U7 CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIEpzb25UYWJsZURlc3Ryb3lPcGFx dWUKKyAqLworc3RhdGljIHZvaWQKK0pzb25UYWJsZURlc3Ryb3lPcGFxdWUoVGFibGVGdW5jU2Nh blN0YXRlICpzdGF0ZSkKK3sKKwlKc29uVGFibGVFeGVjQ29udGV4dCAqY3h0ID0KKwkJR2V0SnNv blRhYmxlRXhlY0NvbnRleHQoc3RhdGUsICJKc29uVGFibGVEZXN0cm95T3BhcXVlIik7CisKKwkv KiBub3QgdmFsaWQgYW55bW9yZSAqLworCWN4dC0+bWFnaWMgPSAwOworCisJc3RhdGUtPm9wYXF1 ZSA9IE5VTEw7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxz LmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKaW5kZXggMTU1Mjc0ZDdlOC4u MDM5NTI1Y2QyMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5j CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYwpAQCAtNTIwLDYgKzUyMCw4 IEBAIHN0YXRpYyBjaGFyICpmbGF0dGVuX3JlbG9wdGlvbnMoT2lkIHJlbGlkKTsKIHN0YXRpYyB2 b2lkIGdldF9yZWxvcHRpb25zKFN0cmluZ0luZm8gYnVmLCBEYXR1bSByZWxvcHRpb25zKTsKIHN0 YXRpYyB2b2lkIGdldF9qc29uX3BhdGhfc3BlYyhOb2RlICpwYXRoX3NwZWMsIGRlcGFyc2VfY29u dGV4dCAqY29udGV4dCwKIAkJCQkJCQkgICBib29sIHNob3dpbXBsaWNpdCk7CitzdGF0aWMgdm9p ZCBnZXRfanNvbl90YWJsZV9jb2x1bW5zKFRhYmxlRnVuYyAqdGYsIEpzb25UYWJsZVBsYW4gKm5v ZGUsCisJCQkJCQkJCSAgIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCwgYm9vbCBzaG93aW1wbGlj aXQpOwogCiAjZGVmaW5lIG9ubHlfbWFya2VyKHJ0ZSkgICgocnRlKS0+aW5oID8gIiIgOiAiT05M WSAiKQogCkBAIC04NjM1LDcgKzg2MzcsOCBAQCBnZXRfanNvbl9iZWhhdmlvcihKc29uQmVoYXZp b3IgKmJlaGF2aW9yLCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQsCiAvKgogICogZ2V0X2pzb25f ZXhwcl9vcHRpb25zCiAgKgotICogUGFyc2UgYmFjayBjb21tb24gb3B0aW9ucyBmb3IgSlNPTl9R VUVSWSwgSlNPTl9WQUxVRSwgSlNPTl9FWElTVFMuCisgKiBQYXJzZSBiYWNrIGNvbW1vbiBvcHRp b25zIGZvciBKU09OX1FVRVJZLCBKU09OX1ZBTFVFLCBKU09OX0VYSVNUUyBhbmQKKyAqIEpTT05f VEFCTEUgY29sdW1ucy4KICAqLwogc3RhdGljIHZvaWQKIGdldF9qc29uX2V4cHJfb3B0aW9ucyhK c29uRXhwciAqanNleHByLCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQsCkBAIC0xMTI1NSwxNiAr MTEyNTgsMTQgQEAgZ2V0X3N1YmxpbmtfZXhwcihTdWJMaW5rICpzdWJsaW5rLCBkZXBhcnNlX2Nv bnRleHQgKmNvbnRleHQpCiAKIAogLyogLS0tLS0tLS0tLQotICogZ2V0X3RhYmxlZnVuYwkJCS0g UGFyc2UgYmFjayBhIHRhYmxlIGZ1bmN0aW9uCisgKiBnZXRfeG1sdGFibGUJCQktIFBhcnNlIGJh Y2sgYSBYTUxUQUJMRSBmdW5jdGlvbgogICogLS0tLS0tLS0tLQogICovCiBzdGF0aWMgdm9pZAot Z2V0X3RhYmxlZnVuYyhUYWJsZUZ1bmMgKnRmLCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQsIGJv b2wgc2hvd2ltcGxpY2l0KQorZ2V0X3htbHRhYmxlKFRhYmxlRnVuYyAqdGYsIGRlcGFyc2VfY29u dGV4dCAqY29udGV4dCwgYm9vbCBzaG93aW1wbGljaXQpCiB7CiAJU3RyaW5nSW5mbwlidWYgPSBj b250ZXh0LT5idWY7CiAKLQkvKiBYTUxUQUJMRSBpcyB0aGUgb25seSBleGlzdGluZyBpbXBsZW1l bnRhdGlvbi4gICovCi0KIAlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIlhNTFRBQkxFKCIp OwogCiAJaWYgKHRmLT5uc191cmlzICE9IE5JTCkKQEAgLTExMzU1LDYgKzExMzU2LDI3MSBAQCBn ZXRfdGFibGVmdW5jKFRhYmxlRnVuYyAqdGYsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCwgYm9v bCBzaG93aW1wbGljaXQpCiAJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnKScpOwogfQogCisv KgorICogZ2V0X2pzb25fbmVzdGVkX2NvbHVtbnMgLSBQYXJzZSBiYWNrIG5lc3RlZCBKU09OX1RB QkxFIGNvbHVtbnMKKyAqLworc3RhdGljIHZvaWQKK2dldF9qc29uX3RhYmxlX25lc3RlZF9jb2x1 bW5zKFRhYmxlRnVuYyAqdGYsIE5vZGUgKm5vZGUsCisJCQkJCQkJICBkZXBhcnNlX2NvbnRleHQg KmNvbnRleHQsIGJvb2wgc2hvd2ltcGxpY2l0LAorCQkJCQkJCSAgYm9vbCBuZWVkY29tbWEpCit7 CisJaWYgKElzQShub2RlLCBKc29uVGFibGVTaWJsaW5nKSkKKwl7CisJCUpzb25UYWJsZVNpYmxp bmcgKm4gPSAoSnNvblRhYmxlU2libGluZyAqKSBub2RlOworCisJCWdldF9qc29uX3RhYmxlX25l c3RlZF9jb2x1bW5zKHRmLCBuLT5sYXJnLCBjb250ZXh0LCBzaG93aW1wbGljaXQsCisJCQkJCQkJ CQkgIG5lZWRjb21tYSk7CisJCWdldF9qc29uX3RhYmxlX25lc3RlZF9jb2x1bW5zKHRmLCBuLT5y YXJnLCBjb250ZXh0LCBzaG93aW1wbGljaXQsIHRydWUpOworCX0KKwllbHNlCisJeworCQlKc29u VGFibGVQbGFuICpuID0gY2FzdE5vZGUoSnNvblRhYmxlUGxhbiwgbm9kZSk7CisKKwkJaWYgKG5l ZWRjb21tYSkKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJywnKTsKKwor CQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcgJyk7CisJCWFwcGVuZENvbnRl eHRLZXl3b3JkKGNvbnRleHQsICJORVNURUQgUEFUSCAiLCAwLCAwLCAwKTsKKwkJZ2V0X2NvbnN0 X2V4cHIobi0+cGF0aC0+dmFsdWUsIGNvbnRleHQsIC0xKTsKKwkJYXBwZW5kU3RyaW5nSW5mbyhj b250ZXh0LT5idWYsICIgQVMgJXMiLCBxdW90ZV9pZGVudGlmaWVyKG4tPnBhdGgtPm5hbWUpKTsK KwkJZ2V0X2pzb25fdGFibGVfY29sdW1ucyh0ZiwgbiwgY29udGV4dCwgc2hvd2ltcGxpY2l0KTsK Kwl9Cit9CisKKy8qCisgKiBnZXRfanNvbl90YWJsZV9wbGFuIC0gUGFyc2UgYmFjayBhIEpTT05f VEFCTEUgcGxhbgorICovCitzdGF0aWMgdm9pZAorZ2V0X2pzb25fdGFibGVfcGxhbihUYWJsZUZ1 bmMgKnRmLCBOb2RlICpub2RlLCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQsCisJCQkJCWJvb2wg cGFyZW50aGVzaXplKQoreworCWlmIChwYXJlbnRoZXNpemUpCisJCWFwcGVuZFN0cmluZ0luZm9D aGFyKGNvbnRleHQtPmJ1ZiwgJygnKTsKKworCWlmIChJc0Eobm9kZSwgSnNvblRhYmxlU2libGlu ZykpCisJeworCQlKc29uVGFibGVTaWJsaW5nICpuID0gKEpzb25UYWJsZVNpYmxpbmcgKikgbm9k ZTsKKworCQlnZXRfanNvbl90YWJsZV9wbGFuKHRmLCBuLT5sYXJnLCBjb250ZXh0LAorCQkJCQkJ CUlzQShuLT5sYXJnLCBKc29uVGFibGVTaWJsaW5nKSB8fAorCQkJCQkJCWNhc3ROb2RlKEpzb25U YWJsZVBsYW4sIG4tPmxhcmcpLT5jaGlsZCk7CisKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhj b250ZXh0LT5idWYsIG4tPmNyb3NzID8gIiBDUk9TUyAiIDogIiBVTklPTiAiKTsKKworCQlnZXRf anNvbl90YWJsZV9wbGFuKHRmLCBuLT5yYXJnLCBjb250ZXh0LAorCQkJCQkJCUlzQShuLT5yYXJn LCBKc29uVGFibGVTaWJsaW5nKSB8fAorCQkJCQkJCWNhc3ROb2RlKEpzb25UYWJsZVBsYW4sIG4t PnJhcmcpLT5jaGlsZCk7CisJfQorCWVsc2UKKwl7CisJCUpzb25UYWJsZVBsYW4gKm4gPSBjYXN0 Tm9kZShKc29uVGFibGVQbGFuLCBub2RlKTsKKworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGNv bnRleHQtPmJ1ZiwgcXVvdGVfaWRlbnRpZmllcihuLT5wYXRoLT5uYW1lKSk7CisKKwkJaWYgKG4t PmNoaWxkKQorCQl7CisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGNvbnRleHQtPmJ1ZiwKKwkJ CQkJCQkJICAgbi0+b3V0ZXJKb2luID8gIiBPVVRFUiAiIDogIiBJTk5FUiAiKTsKKwkJCWdldF9q c29uX3RhYmxlX3BsYW4odGYsIG4tPmNoaWxkLCBjb250ZXh0LAorCQkJCQkJCQlJc0Eobi0+Y2hp bGQsIEpzb25UYWJsZVNpYmxpbmcpKTsKKwkJfQorCX0KKworCWlmIChwYXJlbnRoZXNpemUpCisJ CWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyknKTsKK30KKworLyoKKyAqIGdl dF9qc29uX3RhYmxlX2NvbHVtbnMgLSBQYXJzZSBiYWNrIEpTT05fVEFCTEUgY29sdW1ucworICov CitzdGF0aWMgdm9pZAorZ2V0X2pzb25fdGFibGVfY29sdW1ucyhUYWJsZUZ1bmMgKnRmLCBKc29u VGFibGVQbGFuICpwbGFuLAorCQkJCQkgICBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQsIGJvb2wg c2hvd2ltcGxpY2l0KQoreworCVN0cmluZ0luZm8JYnVmID0gY29udGV4dC0+YnVmOworCUpzb25F eHByICAgKmpleHByID0gY2FzdE5vZGUoSnNvbkV4cHIsIHRmLT5kb2NleHByKTsKKwlMaXN0Q2Vs bCAgICpsY19jb2xuYW1lOworCUxpc3RDZWxsICAgKmxjX2NvbHR5cGU7CisJTGlzdENlbGwgICAq bGNfY29sdHlwbW9kOworCUxpc3RDZWxsICAgKmxjX2NvbHZhbGV4cHI7CisJaW50CQkJY29sbnVt ID0gMDsKKworCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJyAnKTsKKwlhcHBlbmRDb250ZXh0 S2V5d29yZChjb250ZXh0LCAiQ09MVU1OUyAoIiwgMCwgMCwgMCk7CisKKwlpZiAoUFJFVFRZX0lO REVOVChjb250ZXh0KSkKKwkJY29udGV4dC0+aW5kZW50TGV2ZWwgKz0gUFJFVFRZSU5ERU5UX1ZB UjsKKworCWZvcmZvdXIobGNfY29sbmFtZSwgdGYtPmNvbG5hbWVzLAorCQkJbGNfY29sdHlwZSwg dGYtPmNvbHR5cGVzLAorCQkJbGNfY29sdHlwbW9kLCB0Zi0+Y29sdHlwbW9kcywKKwkJCWxjX2Nv bHZhbGV4cHIsIHRmLT5jb2x2YWxleHBycykKKwl7CisJCWNoYXIJICAgKmNvbG5hbWUgPSBzdHJW YWwobGZpcnN0KGxjX2NvbG5hbWUpKTsKKwkJSnNvbkV4cHIgICAqY29sZXhwcjsKKwkJT2lkCQkJ dHlwaWQ7CisJCWludDMyCQl0eXBtb2Q7CisJCWJvb2wJCW9yZGluYWxpdHk7CisJCUpzb25CZWhh dmlvclR5cGUgZGVmYXVsdF9iZWhhdmlvcjsKKworCQl0eXBpZCA9IGxmaXJzdF9vaWQobGNfY29s dHlwZSk7CisJCXR5cG1vZCA9IGxmaXJzdF9pbnQobGNfY29sdHlwbW9kKTsKKwkJY29sZXhwciA9 IGNhc3ROb2RlKEpzb25FeHByLCBsZmlyc3QobGNfY29sdmFsZXhwcikpOworCisJCWlmIChjb2xu dW0gPCBwbGFuLT5jb2xNaW4pCisJCXsKKwkJCWNvbG51bSsrOworCQkJY29udGludWU7CisJCX0K KworCQlpZiAoY29sbnVtID4gcGxhbi0+Y29sTWF4KQorCQkJYnJlYWs7CisKKwkJaWYgKGNvbG51 bSA+IHBsYW4tPmNvbE1pbikKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiLCAiKTsK KworCQljb2xudW0rKzsKKworCQlvcmRpbmFsaXR5ID0gIWNvbGV4cHI7CisKKwkJYXBwZW5kQ29u dGV4dEtleXdvcmQoY29udGV4dCwgIiIsIDAsIDAsIDApOworCisJCWFwcGVuZFN0cmluZ0luZm8o YnVmLCAiJXMgJXMiLCBxdW90ZV9pZGVudGlmaWVyKGNvbG5hbWUpLAorCQkJCQkJIG9yZGluYWxp dHkgPyAiRk9SIE9SRElOQUxJVFkiIDoKKwkJCQkJCSBmb3JtYXRfdHlwZV93aXRoX3R5cGVtb2Qo dHlwaWQsIHR5cG1vZCkpOworCQlpZiAob3JkaW5hbGl0eSkKKwkJCWNvbnRpbnVlOworCisJCWlm IChjb2xleHByLT5vcCA9PSBKU09OX0VYSVNUU19PUCkKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5m b1N0cmluZyhidWYsICIgRVhJU1RTIik7CisJCQlkZWZhdWx0X2JlaGF2aW9yID0gSlNPTl9CRUhB VklPUl9GQUxTRTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWlmIChjb2xleHByLT5vcCA9PSBKU09O X1FVRVJZX09QKQorCQkJeworCQkJCWNoYXIJCXR5cGNhdGVnb3J5OworCQkJCWJvb2wJCXR5cGlz cHJlZmVycmVkOworCisJCQkJZ2V0X3R5cGVfY2F0ZWdvcnlfcHJlZmVycmVkKHR5cGlkLCAmdHlw Y2F0ZWdvcnksICZ0eXBpc3ByZWZlcnJlZCk7CisKKwkJCQlpZiAodHlwY2F0ZWdvcnkgPT0gVFlQ Q0FURUdPUllfU1RSSU5HKQorCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwKKwkJCQkJ CQkJCQkgICBjb2xleHByLT5mb3JtYXQtPmZvcm1hdF90eXBlID09IEpTX0ZPUk1BVF9KU09OQiA/ CisJCQkJCQkJCQkJICAgIiBGT1JNQVQgSlNPTkIiIDogIiBGT1JNQVQgSlNPTiIpOworCQkJfQor CisJCQlkZWZhdWx0X2JlaGF2aW9yID0gSlNPTl9CRUhBVklPUl9OVUxMOworCQl9CisKKwkJaWYg KGpleHByLT5vbl9lcnJvci0+YnR5cGUgPT0gSlNPTl9CRUhBVklPUl9FUlJPUikKKwkJCWRlZmF1 bHRfYmVoYXZpb3IgPSBKU09OX0JFSEFWSU9SX0VSUk9SOworCisJCWFwcGVuZFN0cmluZ0luZm9T dHJpbmcoYnVmLCAiIFBBVEggIik7CisKKwkJZ2V0X2pzb25fcGF0aF9zcGVjKGNvbGV4cHItPnBh dGhfc3BlYywgY29udGV4dCwgc2hvd2ltcGxpY2l0KTsKKworCQlnZXRfanNvbl9leHByX29wdGlv bnMoY29sZXhwciwgY29udGV4dCwgZGVmYXVsdF9iZWhhdmlvcik7CisJfQorCisJaWYgKHBsYW4t PmNoaWxkKQorCQlnZXRfanNvbl90YWJsZV9uZXN0ZWRfY29sdW1ucyh0ZiwgcGxhbi0+Y2hpbGQs IGNvbnRleHQsIHNob3dpbXBsaWNpdCwKKwkJCQkJCQkJCSAgcGxhbi0+Y29sTWF4ID49IHBsYW4t PmNvbE1pbik7CisKKwlpZiAoUFJFVFRZX0lOREVOVChjb250ZXh0KSkKKwkJY29udGV4dC0+aW5k ZW50TGV2ZWwgLT0gUFJFVFRZSU5ERU5UX1ZBUjsKKworCWFwcGVuZENvbnRleHRLZXl3b3JkKGNv bnRleHQsICIpIiwgMCwgMCwgMCk7Cit9CisKKy8qIC0tLS0tLS0tLS0KKyAqIGdldF9qc29uX3Rh YmxlCQkJLSBQYXJzZSBiYWNrIGEgSlNPTl9UQUJMRSBmdW5jdGlvbgorICogLS0tLS0tLS0tLQor ICovCitzdGF0aWMgdm9pZAorZ2V0X2pzb25fdGFibGUoVGFibGVGdW5jICp0ZiwgZGVwYXJzZV9j b250ZXh0ICpjb250ZXh0LCBib29sIHNob3dpbXBsaWNpdCkKK3sKKwlTdHJpbmdJbmZvCWJ1ZiA9 IGNvbnRleHQtPmJ1ZjsKKwlKc29uRXhwciAgICpqZXhwciA9IGNhc3ROb2RlKEpzb25FeHByLCB0 Zi0+ZG9jZXhwcik7CisJSnNvblRhYmxlUGxhbiAqcm9vdCA9IGNhc3ROb2RlKEpzb25UYWJsZVBs YW4sIHRmLT5wbGFuKTsKKworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiSlNPTl9UQUJM RSgiKTsKKworCWlmIChQUkVUVFlfSU5ERU5UKGNvbnRleHQpKQorCQljb250ZXh0LT5pbmRlbnRM ZXZlbCArPSBQUkVUVFlJTkRFTlRfVkFSOworCisJYXBwZW5kQ29udGV4dEtleXdvcmQoY29udGV4 dCwgIiIsIDAsIDAsIDApOworCisJZ2V0X3J1bGVfZXhwcihqZXhwci0+Zm9ybWF0dGVkX2V4cHIs IGNvbnRleHQsIHNob3dpbXBsaWNpdCk7CisKKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1Ziwg IiwgIik7CisKKwlnZXRfY29uc3RfZXhwcihyb290LT5wYXRoLT52YWx1ZSwgY29udGV4dCwgLTEp OworCisJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIgQVMgJXMiLCBxdW90ZV9pZGVudGlmaWVyKHJv b3QtPnBhdGgtPm5hbWUpKTsKKworCWlmIChqZXhwci0+cGFzc2luZ192YWx1ZXMpCisJeworCQlM aXN0Q2VsbCAgICpsYzEsCisJCQkJICAgKmxjMjsKKwkJYm9vbAkJbmVlZGNvbW1hID0gZmFsc2U7 CisKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnICcpOworCQlhcHBlbmRDb250ZXh0S2V5 d29yZChjb250ZXh0LCAiUEFTU0lORyAiLCAwLCAwLCAwKTsKKworCQlpZiAoUFJFVFRZX0lOREVO VChjb250ZXh0KSkKKwkJCWNvbnRleHQtPmluZGVudExldmVsICs9IFBSRVRUWUlOREVOVF9WQVI7 CisKKwkJZm9yYm90aChsYzEsIGpleHByLT5wYXNzaW5nX25hbWVzLAorCQkJCWxjMiwgamV4cHIt PnBhc3NpbmdfdmFsdWVzKQorCQl7CisJCQlpZiAobmVlZGNvbW1hKQorCQkJCWFwcGVuZFN0cmlu Z0luZm9TdHJpbmcoYnVmLCAiLCAiKTsKKwkJCW5lZWRjb21tYSA9IHRydWU7CisKKwkJCWFwcGVu ZENvbnRleHRLZXl3b3JkKGNvbnRleHQsICIiLCAwLCAwLCAwKTsKKworCQkJZ2V0X3J1bGVfZXhw cigoTm9kZSAqKSBsZmlyc3QobGMyKSwgY29udGV4dCwgZmFsc2UpOworCQkJYXBwZW5kU3RyaW5n SW5mbyhidWYsICIgQVMgJXMiLAorCQkJCQkJCSBxdW90ZV9pZGVudGlmaWVyKChsZmlyc3Rfbm9k ZShTdHJpbmcsIGxjMSkpLT5zdmFsKQorCQkJCSk7CisJCX0KKworCQlpZiAoUFJFVFRZX0lOREVO VChjb250ZXh0KSkKKwkJCWNvbnRleHQtPmluZGVudExldmVsIC09IFBSRVRUWUlOREVOVF9WQVI7 CisJfQorCisJZ2V0X2pzb25fdGFibGVfY29sdW1ucyh0Ziwgcm9vdCwgY29udGV4dCwgc2hvd2lt cGxpY2l0KTsKKworCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJyAnKTsKKwlhcHBlbmRDb250 ZXh0S2V5d29yZChjb250ZXh0LCAiUExBTiAiLCAwLCAwLCAwKTsKKwlnZXRfanNvbl90YWJsZV9w bGFuKHRmLCAoTm9kZSAqKSByb290LCBjb250ZXh0LCB0cnVlKTsKKworCWlmIChqZXhwci0+b25f ZXJyb3ItPmJ0eXBlICE9IEpTT05fQkVIQVZJT1JfRU1QVFkpCisJCWdldF9qc29uX2JlaGF2aW9y KGpleHByLT5vbl9lcnJvciwgY29udGV4dCwgIkVSUk9SIik7CisKKwlpZiAoUFJFVFRZX0lOREVO VChjb250ZXh0KSkKKwkJY29udGV4dC0+aW5kZW50TGV2ZWwgLT0gUFJFVFRZSU5ERU5UX1ZBUjsK KworCWFwcGVuZENvbnRleHRLZXl3b3JkKGNvbnRleHQsICIpIiwgMCwgMCwgMCk7Cit9CisKKy8q IC0tLS0tLS0tLS0KKyAqIGdldF90YWJsZWZ1bmMJCQktIFBhcnNlIGJhY2sgYSB0YWJsZSBmdW5j dGlvbgorICogLS0tLS0tLS0tLQorICovCitzdGF0aWMgdm9pZAorZ2V0X3RhYmxlZnVuYyhUYWJs ZUZ1bmMgKnRmLCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQsIGJvb2wgc2hvd2ltcGxpY2l0KQor eworCS8qIFhNTFRBQkxFIGFuZCBKU09OX1RBQkxFIGFyZSB0aGUgb25seSBleGlzdGluZyBpbXBs ZW1lbnRhdGlvbnMuICAqLworCisJaWYgKHRmLT5mdW5jdHlwZSA9PSBURlRfWE1MVEFCTEUpCisJ CWdldF94bWx0YWJsZSh0ZiwgY29udGV4dCwgc2hvd2ltcGxpY2l0KTsKKwllbHNlIGlmICh0Zi0+ ZnVuY3R5cGUgPT0gVEZUX0pTT05fVEFCTEUpCisJCWdldF9qc29uX3RhYmxlKHRmLCBjb250ZXh0 LCBzaG93aW1wbGljaXQpOworfQorCiAvKiAtLS0tLS0tLS0tCiAgKiBnZXRfZnJvbV9jbGF1c2UJ CQktIFBhcnNlIGJhY2sgYSBGUk9NIGNsYXVzZQogICoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L25vZGVzL2V4ZWNub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKaW5kZXgg YjE3ZmE1MmQ4Mi4uNGQyMWFmMTdlNiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhl Y25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKQEAgLTE5NTAsNiAr MTk1MCw4IEBAIHR5cGVkZWYgc3RydWN0IFRhYmxlRnVuY1NjYW5TdGF0ZQogCUV4cHJTdGF0ZSAg KnJvd2V4cHI7CQkvKiBzdGF0ZSBmb3Igcm93LWdlbmVyYXRpbmcgZXhwcmVzc2lvbiAqLwogCUxp c3QJICAgKmNvbGV4cHJzOwkJLyogc3RhdGUgZm9yIGNvbHVtbi1nZW5lcmF0aW5nIGV4cHJlc3Np b24gKi8KIAlMaXN0CSAgICpjb2xkZWZleHByczsJLyogc3RhdGUgZm9yIGNvbHVtbiBkZWZhdWx0 IGV4cHJlc3Npb25zICovCisJTGlzdAkgICAqY29sdmFsZXhwcnM7CS8qIHN0YXRlIGZvciBjb2x1 bW4gdmFsdWUgZXhwcmVzc2lvbiAqLworCUxpc3QJICAgKnBhc3Npbmd2YWxleHByczsJLyogc3Rh dGUgZm9yIFBBU1NJTkcgYXJndW1lbnQgZXhwcmVzc2lvbiAqLwogCUxpc3QJICAgKm5zX25hbWVz OwkJLyogc2FtZSBhcyBUYWJsZUZ1bmMubnNfbmFtZXMgKi8KIAlMaXN0CSAgICpuc191cmlzOwkJ LyogbGlzdCBvZiBzdGF0ZXMgb2YgbmFtZXNwYWNlIFVSSSBleHBycyAqLwogCUJpdG1hcHNldCAg Km5vdG51bGxzOwkJLyogbnVsbGFiaWxpdHkgZmxhZyBmb3IgZWFjaCBvdXRwdXQgY29sdW1uICov CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9tYWtlZnVuY3MuaCBiL3NyYy9pbmNsdWRl L25vZGVzL21ha2VmdW5jcy5oCmluZGV4IGZkYzc4MjcwZTUuLmUwZGJjZWNhYmYgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL25vZGVzL21ha2VmdW5jcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVz L21ha2VmdW5jcy5oCkBAIC0xMDAsNiArMTAwLDcgQEAgZXh0ZXJuIEluZGV4SW5mbyAqbWFrZUlu ZGV4SW5mbyhpbnQgbnVtYXR0cnMsIGludCBudW1rZXlhdHRycywgT2lkIGFtb2lkLAogCQkJCQkJ CQlib29sIGlzcmVhZHksIGJvb2wgY29uY3VycmVudCwKIAkJCQkJCQkJYm9vbCBzdW1tYXJpemlu Zyk7CiAKK2V4dGVybiBOb2RlICptYWtlU3RyaW5nQ29uc3QoY2hhciAqc3RyLCBpbnQgbG9jYXRp b24pOwogZXh0ZXJuIERlZkVsZW0gKm1ha2VEZWZFbGVtKGNoYXIgKm5hbWUsIE5vZGUgKmFyZywg aW50IGxvY2F0aW9uKTsKIGV4dGVybiBEZWZFbGVtICptYWtlRGVmRWxlbUV4dGVuZGVkKGNoYXIg Km5hbWVTcGFjZSwgY2hhciAqbmFtZSwgTm9kZSAqYXJnLAogCQkJCQkJCQkJRGVmRWxlbUFjdGlv biBkZWZhY3Rpb24sIGludCBsb2NhdGlvbik7CkBAIC0xMTgsNSArMTE5LDEzIEBAIGV4dGVybiBO b2RlICptYWtlSnNvbklzUHJlZGljYXRlKE5vZGUgKmV4cHIsIEpzb25Gb3JtYXQgKmZvcm1hdCwK IAkJCQkJCQkJIGludCBsb2NhdGlvbik7CiBleHRlcm4gSnNvbkJlaGF2aW9yICptYWtlSnNvbkJl aGF2aW9yKEpzb25CZWhhdmlvclR5cGUgYnR5cGUsIE5vZGUgKmV4cHIsCiAJCQkJCQkJCQkgIGlu dCBsb2NhdGlvbik7CitleHRlcm4gSnNvblRhYmxlUGF0aCAqbWFrZUpzb25UYWJsZVBhdGgoQ29u c3QgKnBhdGh2YWx1ZSwgY2hhciAqcGF0aG5hbWUpOworZXh0ZXJuIE5vZGUgKm1ha2VKc29uVGFi bGVQYXRoU3BlYyhjaGFyICpzdHJpbmcsIGNoYXIgKm5hbWUsCisJCQkJCQkJCSAgIGludCBzdHJp bmdfbG9jYXRpb24sIGludCBuYW1lX2xvY2F0aW9uKTsKK2V4dGVybiBOb2RlICptYWtlSnNvblRh YmxlRGVmYXVsdFBsYW4oSnNvblRhYmxlUGxhbkpvaW5UeXBlIGpvaW5fdHlwZSwKKwkJCQkJCQkJ CSAgaW50IGxvY2F0aW9uKTsKK2V4dGVybiBOb2RlICptYWtlSnNvblRhYmxlU2ltcGxlUGxhbihj aGFyICpwYXRobmFtZSwgaW50IGxvY2F0aW9uKTsKK2V4dGVybiBOb2RlICptYWtlSnNvblRhYmxl Sm9pbmVkUGxhbihKc29uVGFibGVQbGFuSm9pblR5cGUgdHlwZSwKKwkJCQkJCQkJCSBOb2RlICpw bGFuMSwgTm9kZSAqcGxhbjIsIGludCBsb2NhdGlvbik7CiAKICNlbmRpZgkJCQkJCQkvKiBNQUtF RlVOQ19IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmggYi9z cmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKaW5kZXggOTkwYjdiMDI2Ny4uMWM1YWYzYTAy OCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCisrKyBiL3NyYy9p bmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaApAQCAtMTc0OCw2ICsxNzQ4LDcgQEAgdHlwZWRlZiBz dHJ1Y3QgSnNvbkZ1bmNFeHByCiAJSnNvbkV4cHJPcAlvcDsJCQkJLyogZXhwcmVzc2lvbiB0eXBl ICovCiAJSnNvblZhbHVlRXhwciAqY29udGV4dF9pdGVtOwkvKiBjb250ZXh0IGl0ZW0gZXhwcmVz c2lvbiAqLwogCU5vZGUJICAgKnBhdGhzcGVjOwkJLyogSlNPTiBwYXRoIHNwZWNpZmljYXRpb24g ZXhwcmVzc2lvbiAqLworCWNoYXIJICAgKnBhdGhuYW1lOwkJLyogcGF0aCBuYW1lLCBpZiBhbnkg Ki8KIAlMaXN0CSAgICpwYXNzaW5nOwkJLyogbGlzdCBvZiBQQVNTSU5HIGNsYXVzZSBhcmd1bWVu dHMsIGlmIGFueSAqLwogCUpzb25PdXRwdXQgKm91dHB1dDsJCQkvKiBvdXRwdXQgY2xhdXNlLCBp ZiBzcGVjaWZpZWQgKi8KIAlKc29uQmVoYXZpb3IgKm9uX2VtcHR5OwkJLyogT04gRU1QVFkgYmVo YXZpb3IgKi8KQEAgLTE3NTcsNiArMTc1OCwxMTQgQEAgdHlwZWRlZiBzdHJ1Y3QgSnNvbkZ1bmNF eHByCiAJaW50CQkJbG9jYXRpb247CQkvKiB0b2tlbiBsb2NhdGlvbiwgb3IgLTEgaWYgdW5rbm93 biAqLwogfSBKc29uRnVuY0V4cHI7CiAKKy8qCisgKiBKc29uVGFibGVQYXRoU3BlYworICoJCXVu dHJhbnNmb3JtZWQgc3BlY2lmaWNhdGlvbiBvZiBKU09OIHBhdGggZXhwcmVzc2lvbiB3aXRoIGFu IG9wdGlvbmFsCisgKgkJbmFtZQorICovCit0eXBlZGVmIHN0cnVjdCBKc29uVGFibGVQYXRoU3Bl YworeworCU5vZGVUYWcJCXR5cGU7CisKKwlOb2RlCSAgICpzdHJpbmc7CisJY2hhcgkgICAqbmFt ZTsKKwlpbnQJCQluYW1lX2xvY2F0aW9uOworCWludAkJCWxvY2F0aW9uOwkvKiBsb2NhdGlvbiBv ZiAnc3RyaW5nJyAqLworfSBKc29uVGFibGVQYXRoU3BlYzsKKworLyoKKyAqIEpzb25UYWJsZUNv bHVtblR5cGUgLQorICoJCWVudW1lcmF0aW9uIG9mIEpTT05fVEFCTEUgY29sdW1uIHR5cGVzCisg Ki8KK3R5cGVkZWYgZW51bSBKc29uVGFibGVDb2x1bW5UeXBlCit7CisJSlRDX0ZPUl9PUkRJTkFM SVRZLAorCUpUQ19SRUdVTEFSLAorCUpUQ19FWElTVFMsCisJSlRDX0ZPUk1BVFRFRCwKKwlKVENf TkVTVEVELAorfSBKc29uVGFibGVDb2x1bW5UeXBlOworCisvKgorICogSnNvblRhYmxlQ29sdW1u IC0KKyAqCQl1bnRyYW5zZm9ybWVkIHJlcHJlc2VudGF0aW9uIG9mIEpTT05fVEFCTEUgY29sdW1u CisgKi8KK3R5cGVkZWYgc3RydWN0IEpzb25UYWJsZUNvbHVtbgoreworCU5vZGVUYWcJCXR5cGU7 CisJSnNvblRhYmxlQ29sdW1uVHlwZSBjb2x0eXBlOwkvKiBjb2x1bW4gdHlwZSAqLworCWNoYXIJ ICAgKm5hbWU7CQkJLyogY29sdW1uIG5hbWUgKi8KKwlUeXBlTmFtZSAgICp0eXBlTmFtZTsJCS8q IGNvbHVtbiB0eXBlIG5hbWUgKi8KKwlKc29uVGFibGVQYXRoU3BlYyAqcGF0aHNwZWM7IC8qIEpT T04gcGF0aCBzcGVjaWZpY2F0aW9uICovCisJSnNvbkZvcm1hdCAqZm9ybWF0OwkJCS8qIEpTT04g Zm9ybWF0IGNsYXVzZSwgaWYgc3BlY2lmaWVkICovCisJSnNvbldyYXBwZXIgd3JhcHBlcjsJCS8q IFdSQVBQRVIgYmVoYXZpb3IgZm9yIGZvcm1hdHRlZCBjb2x1bW5zICovCisJSnNvblF1b3Rlcwlx dW90ZXM7CQkJLyogb21pdCBvciBrZWVwIHF1b3RlcyBvbiBzY2FsYXIgc3RyaW5ncz8gKi8KKwlM aXN0CSAgICpjb2x1bW5zOwkJLyogbmVzdGVkIGNvbHVtbnMgKi8KKwlKc29uQmVoYXZpb3IgKm9u X2VtcHR5OwkJLyogT04gRU1QVFkgYmVoYXZpb3IgKi8KKwlKc29uQmVoYXZpb3IgKm9uX2Vycm9y OwkJLyogT04gRVJST1IgYmVoYXZpb3IgKi8KKwlpbnQJCQlsb2NhdGlvbjsJCS8qIHRva2VuIGxv Y2F0aW9uLCBvciAtMSBpZiB1bmtub3duICovCit9IEpzb25UYWJsZUNvbHVtbjsKKworLyoKKyAq IEpzb25UYWJsZVBsYW5UeXBlIC0KKyAqCQlmbGFncyBmb3IgSlNPTl9UQUJMRSBwbGFuIG5vZGUg dHlwZXMgcmVwcmVzZW50YXRpb24KKyAqLwordHlwZWRlZiBlbnVtIEpzb25UYWJsZVBsYW5UeXBl Cit7CisJSlNUUF9ERUZBVUxULAorCUpTVFBfU0lNUExFLAorCUpTVFBfSk9JTkVELAorfSBKc29u VGFibGVQbGFuVHlwZTsKKworLyoKKyAqIEpzb25UYWJsZVBsYW5Kb2luVHlwZSAtCisgKgkJSlNP Tl9UQUJMRSBqb2luIHR5cGVzIGZvciBKU1RQX0pPSU5FRCBwbGFucworICovCit0eXBlZGVmIGVu dW0gSnNvblRhYmxlUGxhbkpvaW5UeXBlCit7CisJSlNUUF9KT0lOX0lOTkVSLAorCUpTVFBfSk9J Tl9PVVRFUiwKKwlKU1RQX0pPSU5fQ1JPU1MsCisJSlNUUF9KT0lOX1VOSU9OLAorfSBKc29uVGFi bGVQbGFuSm9pblR5cGU7CisKKy8qCisgKiBKc29uVGFibGVQbGFuU3BlYyAtCisgKgkJdW50cmFu c2Zvcm1lZCByZXByZXNlbnRhdGlvbiBvZiBKU09OX1RBQkxFJ3MgUExBTiBjbGF1c2UKKyAqLwor dHlwZWRlZiBzdHJ1Y3QgSnNvblRhYmxlUGxhblNwZWMKK3sKKwlOb2RlVGFnCQl0eXBlOworCisJ SnNvblRhYmxlUGxhblR5cGUgcGxhbl90eXBlOwkvKiBwbGFuIHR5cGUgKi8KKwlKc29uVGFibGVQ bGFuSm9pblR5cGUgam9pbl90eXBlOwkvKiBqb2luIHR5cGUgKGZvciBqb2luZWQgcGxhbiBvbmx5 KSAqLworCWNoYXIJICAgKnBhdGhuYW1lOwkJLyogcGF0aCBuYW1lIChmb3Igc2ltcGxlIHBsYW4g b25seSkgKi8KKworCS8qIEZvciBqb2luZWQgcGxhbnMgKi8KKwlzdHJ1Y3QgSnNvblRhYmxlUGxh blNwZWMgKnBsYW4xOwkJLyogZmlyc3Qgam9pbmVkIHBsYW4gKi8KKwlzdHJ1Y3QgSnNvblRhYmxl UGxhblNwZWMgKnBsYW4yOwkJLyogc2Vjb25kIGpvaW5lZCBwbGFuICovCisKKwlpbnQJCQlsb2Nh dGlvbjsJCS8qIHRva2VuIGxvY2F0aW9uLCBvciAtMSBpZiB1bmtub3duICovCit9IEpzb25UYWJs ZVBsYW5TcGVjOworCisvKgorICogSnNvblRhYmxlIC0KKyAqCQl1bnRyYW5zZm9ybWVkIHJlcHJl c2VudGF0aW9uIG9mIEpTT05fVEFCTEUKKyAqLwordHlwZWRlZiBzdHJ1Y3QgSnNvblRhYmxlCit7 CisJTm9kZVRhZwkJdHlwZTsKKwlKc29uVmFsdWVFeHByICpjb250ZXh0X2l0ZW07CS8qIGNvbnRl eHQgaXRlbSBleHByZXNzaW9uICovCisJSnNvblRhYmxlUGF0aFNwZWMgKnBhdGhzcGVjOwkvKiBK U09OIHBhdGggc3BlY2lmaWNhdGlvbiAqLworCUxpc3QJICAgKnBhc3Npbmc7CQkvKiBsaXN0IG9m IFBBU1NJTkcgY2xhdXNlIGFyZ3VtZW50cywgaWYgYW55ICovCisJTGlzdAkgICAqY29sdW1uczsJ CS8qIGxpc3Qgb2YgSnNvblRhYmxlQ29sdW1uICovCisJSnNvblRhYmxlUGxhblNwZWMgKnBsYW5z cGVjOyAvKiBqb2luIHBsYW4sIGlmIHNwZWNpZmllZCAqLworCUpzb25CZWhhdmlvciAgKm9uX2Vy cm9yOwkvKiBPTiBFUlJPUiBiZWhhdmlvciAqLworCUFsaWFzCSAgICphbGlhczsJCQkvKiB0YWJs ZSBhbGlhcyBpbiBGUk9NIGNsYXVzZSAqLworCWJvb2wJCWxhdGVyYWw7CQkvKiBkb2VzIGl0IGhh dmUgTEFURVJBTCBwcmVmaXg/ICovCisJaW50CQkJbG9jYXRpb247CQkvKiB0b2tlbiBsb2NhdGlv biwgb3IgLTEgaWYgdW5rbm93biAqLworfSBKc29uVGFibGU7CisKIC8qCiAgKiBKc29uS2V5VmFs dWUgLQogICoJCXVudHJhbnNmb3JtZWQgcmVwcmVzZW50YXRpb24gb2YgSlNPTiBvYmplY3Qga2V5 LXZhbHVlIHBhaXIgZm9yCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMu aCBiL3NyYy9pbmNsdWRlL25vZGVzL3ByaW1ub2Rlcy5oCmluZGV4IDZkYTA5YmNiNWYuLjg0Njc1 YTYxNTggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3ByaW1ub2Rlcy5oCisrKyBiL3Ny Yy9pbmNsdWRlL25vZGVzL3ByaW1ub2Rlcy5oCkBAIC05NCw4ICs5NCwxNCBAQCB0eXBlZGVmIHN0 cnVjdCBSYW5nZVZhcgogCWludAkJCWxvY2F0aW9uOwogfSBSYW5nZVZhcjsKIAordHlwZWRlZiBl bnVtIFRhYmxlRnVuY1R5cGUKK3sKKwlURlRfWE1MVEFCTEUsCisJVEZUX0pTT05fVEFCTEUsCit9 IFRhYmxlRnVuY1R5cGU7CisKIC8qCi0gKiBUYWJsZUZ1bmMgLSBub2RlIGZvciBhIHRhYmxlIGZ1 bmN0aW9uLCBzdWNoIGFzIFhNTFRBQkxFLgorICogVGFibGVGdW5jIC0gbm9kZSBmb3IgYSB0YWJs ZSBmdW5jdGlvbiwgc3VjaCBhcyBYTUxUQUJMRSBvciBKU09OX1RBQkxFLgogICoKICAqIEVudHJp ZXMgaW4gdGhlIG5zX25hbWVzIGxpc3QgYXJlIGVpdGhlciBTdHJpbmcgbm9kZXMgY29udGFpbmlu ZwogICogbGl0ZXJhbCBuYW1lc3BhY2UgbmFtZXMsIG9yIE5VTEwgcG9pbnRlcnMgdG8gcmVwcmVz ZW50IERFRkFVTFQuCkBAIC0xMDMsNiArMTA5LDggQEAgdHlwZWRlZiBzdHJ1Y3QgUmFuZ2VWYXIK IHR5cGVkZWYgc3RydWN0IFRhYmxlRnVuYwogewogCU5vZGVUYWcJCXR5cGU7CisJLyogWE1MVEFC TEUgb3IgSlNPTl9UQUJMRSAqLworCVRhYmxlRnVuY1R5cGUgZnVuY3R5cGU7CiAJLyogbGlzdCBv ZiBuYW1lc3BhY2UgVVJJIGV4cHJlc3Npb25zICovCiAJTGlzdAkgICAqbnNfdXJpcyBwZ19ub2Rl X2F0dHIocXVlcnlfanVtYmxlX2lnbm9yZSk7CiAJLyogbGlzdCBvZiBuYW1lc3BhY2UgbmFtZXMg b3IgTlVMTCAqLwpAQCAtMTIzLDggKzEzMSwxNCBAQCB0eXBlZGVmIHN0cnVjdCBUYWJsZUZ1bmMK IAlMaXN0CSAgICpjb2xleHByczsKIAkvKiBsaXN0IG9mIGNvbHVtbiBkZWZhdWx0IGV4cHJlc3Np b25zICovCiAJTGlzdAkgICAqY29sZGVmZXhwcnMgcGdfbm9kZV9hdHRyKHF1ZXJ5X2p1bWJsZV9p Z25vcmUpOworCS8qIGxpc3Qgb2YgY29sdW1uIHZhbHVlIGV4cHJlc3Npb25zICovCisJTGlzdAkg ICAqY29sdmFsZXhwcnMgcGdfbm9kZV9hdHRyKHF1ZXJ5X2p1bWJsZV9pZ25vcmUpOworCS8qIGxp c3Qgb2YgUEFTU0lORyBhcmd1bWVudCBleHByZXNzaW9ucyAqLworCUxpc3QJICAgKnBhc3Npbmd2 YWxleHBycyBwZ19ub2RlX2F0dHIocXVlcnlfanVtYmxlX2lnbm9yZSk7CiAJLyogbnVsbGFiaWxp dHkgZmxhZyBmb3IgZWFjaCBvdXRwdXQgY29sdW1uICovCiAJQml0bWFwc2V0ICAqbm90bnVsbHMg cGdfbm9kZV9hdHRyKHF1ZXJ5X2p1bWJsZV9pZ25vcmUpOworCS8qIEpTT05fVEFCTEUgcGxhbiAq LworCU5vZGUJICAgKnBsYW4gcGdfbm9kZV9hdHRyKHF1ZXJ5X2p1bWJsZV9pZ25vcmUpOwogCS8q IGNvdW50cyBmcm9tIDA7IC0xIGlmIG5vbmUgc3BlY2lmaWVkICovCiAJaW50CQkJb3JkaW5hbGl0 eWNvbCBwZ19ub2RlX2F0dHIocXVlcnlfanVtYmxlX2lnbm9yZSk7CiAJLyogdG9rZW4gbG9jYXRp b24sIG9yIC0xIGlmIHVua25vd24gKi8KQEAgLTE3NTQsNiArMTc2OCw3IEBAIHR5cGVkZWYgZW51 bSBKc29uRXhwck9wCiAJSlNPTl9FWElTVFNfT1AsCQkJCS8qIEpTT05fRVhJU1RTKCkgKi8KIAlK U09OX1FVRVJZX09QLAkJCQkvKiBKU09OX1FVRVJZKCkgKi8KIAlKU09OX1ZBTFVFX09QLAkJCQkv KiBKU09OX1ZBTFVFKCkgKi8KKwlKU09OX1RBQkxFX09QLAkJCQkvKiBKU09OX1RBQkxFKCkgKi8K IH0gSnNvbkV4cHJPcDsKIAogLyoKQEAgLTE4MTMsNiArMTgyOCw0OSBAQCB0eXBlZGVmIHN0cnVj dCBKc29uRXhwcgogCWludAkJCWxvY2F0aW9uOwogfSBKc29uRXhwcjsKIAorLyoKKyAqIEpzb25U YWJsZVBhdGgKKyAqCQlBIEpTT04gcGF0aCBleHByZXNzaW9uIHRvIGJlIGNvbXB1dGVkIGFzIHBh cnQgb2YgZXZhbHVhdGluZworICoJCWEgSlNPTl9UQUJMRSBwbGFuIG5vZGUKKyAqLwordHlwZWRl ZiBzdHJ1Y3QgSnNvblRhYmxlUGF0aAoreworCU5vZGVUYWcJCXR5cGU7CisKKwlDb25zdAkgICAq dmFsdWU7CisJY2hhcgkgICAqbmFtZTsKK30JCQlKc29uVGFibGVQYXRoOworCisvKgorICogSnNv blRhYmxlU3BlYyAtCisgKgkJdHJhbnNmb3JtZWQgcmVwcmVzZW50YXRpb24gb2YgYSBKU09OX1RB QkxFIHBsYW4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgSnNvblRhYmxlUGxhbgoreworCU5vZGVUYWcJ CXR5cGU7CisKKwlKc29uVGFibGVQYXRoICpwYXRoOworCU5vZGUJICAgKmNoaWxkOwkJCS8qIG5l c3RlZCBjb2x1bW5zLCBpZiBhbnkgKi8KKwlib29sCQlvdXRlckpvaW47CQkvKiBvdXRlciBvciBp bm5lciBqb2luIGZvciBuZXN0ZWQgY29sdW1ucz8gKi8KKwlpbnQJCQljb2xNaW47CQkJLyogbWlu IGNvbHVtbiBpbmRleCBpbiB0aGUgcmVzdWx0aW5nIGNvbHVtbgorCQkJCQkJCQkgKiBsaXN0ICov CisJaW50CQkJY29sTWF4OwkJCS8qIG1heCBjb2x1bW4gaW5kZXggaW4gdGhlIHJlc3VsdGluZyBj b2x1bW4KKwkJCQkJCQkJICogbGlzdCAqLworCWJvb2wJCWVycm9yT25FcnJvcjsJLyogRVJST1Iv RU1QVFkgT04gRVJST1IgYmVoYXZpb3IgKi8KK30gSnNvblRhYmxlUGxhbjsKKworLyoKKyAqIEpz b25UYWJsZVNpYmxpbmcgLQorICoJCXRyYW5zZm9ybWVkIHJlcHJlc2VudGF0aW9uIG9mIGpvaW5l ZCBzaWJsaW5nIEpTT05fVEFCTEUgcGxhbiBub2RlCisgKi8KK3R5cGVkZWYgc3RydWN0IEpzb25U YWJsZVNpYmxpbmcKK3sKKwlOb2RlVGFnCQl0eXBlOworCU5vZGUJICAgKmxhcmc7CQkJLyogbGVm dCBqb2luIG5vZGUgKi8KKwlOb2RlCSAgICpyYXJnOwkJCS8qIHJpZ2h0IGpvaW4gbm9kZSAqLwor CWJvb2wJCWNyb3NzOwkJCS8qIGNyb3NzIG9yIHVuaW9uIGpvaW4/ICovCit9IEpzb25UYWJsZVNp Ymxpbmc7CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0KICAqIE51bGxUZXN0CiAgKgpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvcGFyc2VyL2t3bGlzdC5oIGIvc3JjL2luY2x1ZGUvcGFyc2VyL2t3bGlz dC5oCmluZGV4IDM5NDFlZjE4ZDAuLjBlMzI2Njc4YjcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L3BhcnNlci9rd2xpc3QuaAorKysgYi9zcmMvaW5jbHVkZS9wYXJzZXIva3dsaXN0LmgKQEAgLTI0 Miw2ICsyNDIsNyBAQCBQR19LRVlXT1JEKCJqc29uX29iamVjdGFnZyIsIEpTT05fT0JKRUNUQUdH LCBDT0xfTkFNRV9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgianNvbl9xdWVyeSIs IEpTT05fUVVFUlksIENPTF9OQU1FX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJq c29uX3NjYWxhciIsIEpTT05fU0NBTEFSLCBDT0xfTkFNRV9LRVlXT1JELCBCQVJFX0xBQkVMKQog UEdfS0VZV09SRCgianNvbl9zZXJpYWxpemUiLCBKU09OX1NFUklBTElaRSwgQ09MX05BTUVfS0VZ V09SRCwgQkFSRV9MQUJFTCkKK1BHX0tFWVdPUkQoImpzb25fdGFibGUiLCBKU09OX1RBQkxFLCBD T0xfTkFNRV9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgianNvbl92YWx1ZSIsIEpT T05fVkFMVUUsIENPTF9OQU1FX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJrZWVw IiwgS0VFUCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgia2V5 IiwgS0VZLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCkBAIC0yODUsNiArMjg2LDcg QEAgUEdfS0VZV09SRCgibmFtZXMiLCBOQU1FUywgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xB QkVMKQogUEdfS0VZV09SRCgibmF0aW9uYWwiLCBOQVRJT05BTCwgQ09MX05BTUVfS0VZV09SRCwg QkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoIm5hdHVyYWwiLCBOQVRVUkFMLCBUWVBFX0ZVTkNfTkFN RV9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgibmNoYXIiLCBOQ0hBUiwgQ09MX05B TUVfS0VZV09SRCwgQkFSRV9MQUJFTCkKK1BHX0tFWVdPUkQoIm5lc3RlZCIsIE5FU1RFRCwgVU5S RVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgibmV3IiwgTkVXLCBVTlJF U0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJuZXh0IiwgTkVYVCwgVU5S RVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgibmZjIiwgTkZDLCBVTlJF U0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCkBAIC0zMzUsNyArMzM3LDkgQEAgUEdfS0VZV09S RCgicGFydGlhbCIsIFBBUlRJQUwsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBH X0tFWVdPUkQoInBhcnRpdGlvbiIsIFBBUlRJVElPTiwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJF X0xBQkVMKQogUEdfS0VZV09SRCgicGFzc2luZyIsIFBBU1NJTkcsIFVOUkVTRVJWRURfS0VZV09S RCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoInBhc3N3b3JkIiwgUEFTU1dPUkQsIFVOUkVTRVJW RURfS0VZV09SRCwgQkFSRV9MQUJFTCkKK1BHX0tFWVdPUkQoInBhdGgiLCBQQVRILCBVTlJFU0VS VkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJwbGFjaW5nIiwgUExBQ0lORywg UkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKK1BHX0tFWVdPUkQoInBsYW4iLCBQTEFOLCBV TlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJwbGFucyIsIFBMQU5T LCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJwb2xpY3kiLCBQ T0xJQ1ksIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoInBvc2l0 aW9uIiwgUE9TSVRJT04sIENPTF9OQU1FX0tFWVdPUkQsIEJBUkVfTEFCRUwpCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9wYXJzZXIvcGFyc2VfY2xhdXNlLmggYi9zcmMvaW5jbHVkZS9wYXJzZXIv cGFyc2VfY2xhdXNlLmgKaW5kZXggMzgyOWRiMGZjNC4uZTcxNzYyYjEwYyAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvcGFyc2VyL3BhcnNlX2NsYXVzZS5oCisrKyBiL3NyYy9pbmNsdWRlL3BhcnNl ci9wYXJzZV9jbGF1c2UuaApAQCAtNTEsNCArNTEsNyBAQCBleHRlcm4gTGlzdCAqYWRkVGFyZ2V0 VG9Tb3J0TGlzdChQYXJzZVN0YXRlICpwc3RhdGUsIFRhcmdldEVudHJ5ICp0bGUsCiBleHRlcm4g SW5kZXggYXNzaWduU29ydEdyb3VwUmVmKFRhcmdldEVudHJ5ICp0bGUsIExpc3QgKnRsaXN0KTsK IGV4dGVybiBib29sIHRhcmdldElzSW5Tb3J0TGlzdChUYXJnZXRFbnRyeSAqdGxlLCBPaWQgc29y dG9wLCBMaXN0ICpzb3J0TGlzdCk7CiAKKy8qIGZ1bmN0aW9ucyBpbiBwYXJzZV9qc29udGFibGUu YyAqLworZXh0ZXJuIFBhcnNlTmFtZXNwYWNlSXRlbSAqdHJhbnNmb3JtSnNvblRhYmxlKFBhcnNl U3RhdGUgKnBzdGF0ZSwgSnNvblRhYmxlICpqdCk7CisKICNlbmRpZgkJCQkJCQkvKiBQQVJTRV9D TEFVU0VfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvanNvbnBhdGguaCBiL3Ny Yy9pbmNsdWRlL3V0aWxzL2pzb25wYXRoLmgKaW5kZXggMGY0YjFlYmM5Zi4uMmM2NzNiN2RlYSAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvanNvbnBhdGguaAorKysgYi9zcmMvaW5jbHVk ZS91dGlscy9qc29ucGF0aC5oCkBAIC0xNSw2ICsxNSw3IEBACiAjZGVmaW5lIEpTT05QQVRIX0gK IAogI2luY2x1ZGUgImZtZ3IuaCIKKyNpbmNsdWRlICJleGVjdXRvci90YWJsZWZ1bmMuaCIKICNp bmNsdWRlICJub2Rlcy9wZ19saXN0LmgiCiAjaW5jbHVkZSAibm9kZXMvcHJpbW5vZGVzLmgiCiAj aW5jbHVkZSAidXRpbHMvanNvbmIuaCIKQEAgLTMwMyw0ICszMDQsNiBAQCBleHRlcm4gRGF0dW0g SnNvblBhdGhRdWVyeShEYXR1bSBqYiwgSnNvblBhdGggKmpwLCBKc29uV3JhcHBlciB3cmFwcGVy LAogZXh0ZXJuIEpzb25iVmFsdWUgKkpzb25QYXRoVmFsdWUoRGF0dW0gamIsIEpzb25QYXRoICpq cCwgYm9vbCAqZW1wdHksCiAJCQkJCQkJCSBib29sICplcnJvciwgTGlzdCAqdmFycyk7CiAKK2V4 dGVybiBQR0RMTElNUE9SVCBjb25zdCBUYWJsZUZ1bmNSb3V0aW5lIEpzb25iVGFibGVSb3V0aW5l OworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2VjcGcvdGVzdC9lY3BnX3Nj aGVkdWxlIGIvc3JjL2ludGVyZmFjZXMvZWNwZy90ZXN0L2VjcGdfc2NoZWR1bGUKaW5kZXggZjlj MGEwZTNjMC4uMjU0YTBiYWNjNyAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvZWNwZy90ZXN0 L2VjcGdfc2NoZWR1bGUKKysrIGIvc3JjL2ludGVyZmFjZXMvZWNwZy90ZXN0L2VjcGdfc2NoZWR1 bGUKQEAgLTUyLDYgKzUyLDcgQEAgdGVzdDogc3FsL29sZGV4ZWMKIHRlc3Q6IHNxbC9xdW90ZQog dGVzdDogc3FsL3Nob3cKIHRlc3Q6IHNxbC9zcWxqc29uCit0ZXN0OiBzcWwvc3FsanNvbl9qc29u dGFibGUKIHRlc3Q6IHNxbC9pbnN1cGQKIHRlc3Q6IHNxbC9wYXJzZXIKIHRlc3Q6IHNxbC9wcmVw YXJlYXMKZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2VjcGcvdGVzdC9leHBlY3RlZC9zcWwt c3FsanNvbl9qc29udGFibGUuYyBiL3NyYy9pbnRlcmZhY2VzL2VjcGcvdGVzdC9leHBlY3RlZC9z cWwtc3FsanNvbl9qc29udGFibGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwLi4wYmJmNDQ0MzE4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2ludGVyZmFjZXMvZWNwZy90 ZXN0L2V4cGVjdGVkL3NxbC1zcWxqc29uX2pzb250YWJsZS5jCkBAIC0wLDAgKzEsMTMyIEBACisv KiBQcm9jZXNzZWQgYnkgZWNwZyAocmVncmVzc2lvbiBtb2RlKSAqLworLyogVGhlc2UgaW5jbHVk ZSBmaWxlcyBhcmUgYWRkZWQgYnkgdGhlIHByZXByb2Nlc3NvciAqLworI2luY2x1ZGUgPGVjcGds aWIuaD4KKyNpbmNsdWRlIDxlY3BnZXJybm8uaD4KKyNpbmNsdWRlIDxzcWxjYS5oPgorLyogRW5k IG9mIGF1dG9tYXRpYyBpbmNsdWRlIHNlY3Rpb24gKi8KKyNkZWZpbmUgRUNQR2RlYnVnKFgsWSkg RUNQR2RlYnVnKChYKSsxMDAsKFkpKQorCisjbGluZSAxICJzcWxqc29uX2pzb250YWJsZS5wZ2Mi CisjaW5jbHVkZSA8c3RkaW8uaD4KKworCisjbGluZSAxICJzcWxjYS5oIgorI2lmbmRlZiBQT1NU R1JFU19TUUxDQV9ICisjZGVmaW5lIFBPU1RHUkVTX1NRTENBX0gKKworI2lmbmRlZiBQR0RMTElN UE9SVAorI2lmICBkZWZpbmVkKFdJTjMyKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pCisjZGVmaW5l IFBHRExMSU1QT1JUIF9fZGVjbHNwZWMgKGRsbGltcG9ydCkKKyNlbHNlCisjZGVmaW5lIFBHRExM SU1QT1JUCisjZW5kaWYJCQkJCQkJLyogX19DWUdXSU5fXyAqLworI2VuZGlmCQkJCQkJCS8qIFBH RExMSU1QT1JUICovCisKKyNkZWZpbmUgU1FMRVJSTUNfTEVOCTE1MAorCisjaWZkZWYgX19jcGx1 c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCitzdHJ1Y3Qgc3FsY2FfdAoreworCWNoYXIJ CXNxbGNhaWRbOF07CisJbG9uZwkJc3FsYWJjOworCWxvbmcJCXNxbGNvZGU7CisJc3RydWN0CisJ eworCQlpbnQJCQlzcWxlcnJtbDsKKwkJY2hhcgkJc3FsZXJybWNbU1FMRVJSTUNfTEVOXTsKKwl9 CQkJc3FsZXJybTsKKwljaGFyCQlzcWxlcnJwWzhdOworCWxvbmcJCXNxbGVycmRbNl07CisJLyog RWxlbWVudCAwOiBlbXB0eQkJCQkJCSovCisJLyogMTogT0lEIG9mIHByb2Nlc3NlZCB0dXBsZSBp ZiBhcHBsaWNhYmxlCQkJKi8KKwkvKiAyOiBudW1iZXIgb2Ygcm93cyBwcm9jZXNzZWQJCQkJKi8K KwkvKiBhZnRlciBhbiBJTlNFUlQsIFVQREFURSBvcgkJCQkqLworCS8qIERFTEVURSBzdGF0ZW1l bnQJCQkJCSovCisJLyogMzogZW1wdHkJCQkJCQkqLworCS8qIDQ6IGVtcHR5CQkJCQkJKi8KKwkv KiA1OiBlbXB0eQkJCQkJCSovCisJY2hhcgkJc3Fsd2Fybls4XTsKKwkvKiBFbGVtZW50IDA6IHNl dCB0byAnVycgaWYgYXQgbGVhc3Qgb25lIG90aGVyIGlzICdXJwkqLworCS8qIDE6IGlmICdXJyBh dCBsZWFzdCBvbmUgY2hhcmFjdGVyIHN0cmluZwkJKi8KKwkvKiB2YWx1ZSB3YXMgdHJ1bmNhdGVk IHdoZW4gaXQgd2FzCQkJKi8KKwkvKiBzdG9yZWQgaW50byBhIGhvc3QgdmFyaWFibGUuICAgICAg ICAgICAgICovCisKKwkvKgorCSAqIDI6IGlmICdXJyBhIChob3BlZnVsbHkpIG5vbi1mYXRhbCBu b3RpY2Ugb2NjdXJyZWQKKwkgKi8JLyogMzogZW1wdHkgKi8KKwkvKiA0OiBlbXB0eQkJCQkJCSov CisJLyogNTogZW1wdHkJCQkJCQkqLworCS8qIDY6IGVtcHR5CQkJCQkJKi8KKwkvKiA3OiBlbXB0 eQkJCQkJCSovCisKKwljaGFyCQlzcWxzdGF0ZVs1XTsKK307CisKK3N0cnVjdCBzcWxjYV90ICpF Q1BHZ2V0X3NxbGNhKHZvaWQpOworCisjaWZuZGVmIFBPU1RHUkVTX0VDUEdfSU5URVJOQUwKKyNk ZWZpbmUgc3FsY2EgKCpFQ1BHZ2V0X3NxbGNhKCkpCisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNw bHVzCit9CisjZW5kaWYKKworI2VuZGlmCisKKyNsaW5lIDMgInNxbGpzb25fanNvbnRhYmxlLnBn YyIKKworCisjbGluZSAxICJyZWdyZXNzaW9uLmgiCisKKworCisKKworCisjbGluZSA0ICJzcWxq c29uX2pzb250YWJsZS5wZ2MiCisKKworLyogZXhlYyBzcWwgd2hlbmV2ZXIgc3FsZXJyb3IgIHNx bHByaW50IDsgKi8KKyNsaW5lIDYgInNxbGpzb25fanNvbnRhYmxlLnBnYyIKKworCitpbnQKK21h aW4gKCkKK3sKKyAgRUNQR2RlYnVnICgxLCBzdGRlcnIpOworCisgIHsgRUNQR2Nvbm5lY3QoX19M SU5FX18sIDAsICJlY3BnMV9yZWdyZXNzaW9uIiAsIE5VTEwsIE5VTEwgLCBOVUxMLCAwKTsgCisj bGluZSAxMyAic3FsanNvbl9qc29udGFibGUucGdjIgorCitpZiAoc3FsY2Euc3FsY29kZSA8IDAp IHNxbHByaW50KCk7fQorI2xpbmUgMTMgInNxbGpzb25fanNvbnRhYmxlLnBnYyIKKworICB7IEVD UEdzZXRjb21taXQoX19MSU5FX18sICJvbiIsIE5VTEwpOworI2xpbmUgMTQgInNxbGpzb25fanNv bnRhYmxlLnBnYyIKKworaWYgKHNxbGNhLnNxbGNvZGUgPCAwKSBzcWxwcmludCgpO30KKyNsaW5l IDE0ICJzcWxqc29uX2pzb250YWJsZS5wZ2MiCisKKworICB7IEVDUEdkbyhfX0xJTkVfXywgMCwg MSwgTlVMTCwgMCwgRUNQR3N0X25vcm1hbCwgInNlbGVjdCAqIGZyb20ganNvbl90YWJsZSAoIGpz b25iICdudWxsJyAsICckWypdJyBhcyBwMCBjb2x1bW5zICggbmVzdGVkICckJyBhcyBwMSBjb2x1 bW5zICggbmVzdGVkIHBhdGggJyQnIGFzIHAxMSBjb2x1bW5zICggZm9vIGludCApICwgbmVzdGVk IHBhdGggJyQnIGFzIHAxMiBjb2x1bW5zICggYmFyIGludCApICkgLCBuZXN0ZWQgcGF0aCAnJCcg YXMgcDIgY29sdW1ucyAoIG5lc3RlZCBwYXRoICckJyBhcyBwMjEgY29sdW1ucyAoIGJheiBpbnQg KSApICkgcGxhbiAoIHAxICkgKSBqdCIsIEVDUEd0X0VPSVQsIEVDUEd0X0VPUlQpOworI2xpbmUg MjYgInNxbGpzb25fanNvbnRhYmxlLnBnYyIKKworaWYgKHNxbGNhLnNxbGNvZGUgPCAwKSBzcWxw cmludCgpO30KKyNsaW5lIDI2ICJzcWxqc29uX2pzb250YWJsZS5wZ2MiCisKKyAgLy8gZXJyb3IK KworICB7IEVDUEdkaXNjb25uZWN0KF9fTElORV9fLCAiQ1VSUkVOVCIpOworI2xpbmUgMjkgInNx bGpzb25fanNvbnRhYmxlLnBnYyIKKworaWYgKHNxbGNhLnNxbGNvZGUgPCAwKSBzcWxwcmludCgp O30KKyNsaW5lIDI5ICJzcWxqc29uX2pzb250YWJsZS5wZ2MiCisKKworICByZXR1cm4gMDsKK30K ZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2VjcGcvdGVzdC9leHBlY3RlZC9zcWwtc3FsanNv bl9qc29udGFibGUuc3RkZXJyIGIvc3JjL2ludGVyZmFjZXMvZWNwZy90ZXN0L2V4cGVjdGVkL3Nx bC1zcWxqc29uX2pzb250YWJsZS5zdGRlcnIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMC4uNTg4MWZkYjVlZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbnRlcmZhY2VzL2Vj cGcvdGVzdC9leHBlY3RlZC9zcWwtc3FsanNvbl9qc29udGFibGUuc3RkZXJyCkBAIC0wLDAgKzEs MjAgQEAKK1tOT19QSURdOiBFQ1BHZGVidWc6IHNldCB0byAxCitbTk9fUElEXTogc3FsY2E6IGNv ZGU6IDAsIHN0YXRlOiAwMDAwMAorW05PX1BJRF06IEVDUEdjb25uZWN0OiBvcGVuaW5nIGRhdGFi YXNlIGVjcGcxX3JlZ3Jlc3Npb24gb24gPERFRkFVTFQ+IHBvcnQgPERFRkFVTFQ+ICAKK1tOT19Q SURdOiBzcWxjYTogY29kZTogMCwgc3RhdGU6IDAwMDAwCitbTk9fUElEXTogRUNQR3NldGNvbW1p dCBvbiBsaW5lIDE0OiBhY3Rpb24gIm9uIjsgY29ubmVjdGlvbiAiZWNwZzFfcmVncmVzc2lvbiIK K1tOT19QSURdOiBzcWxjYTogY29kZTogMCwgc3RhdGU6IDAwMDAwCitbTk9fUElEXTogZWNwZ19l eGVjdXRlIG9uIGxpbmUgMTY6IHF1ZXJ5OiBzZWxlY3QgKiBmcm9tIGpzb25fdGFibGUgKCBqc29u YiAnbnVsbCcgLCAnJFsqXScgYXMgcDAgY29sdW1ucyAoIG5lc3RlZCAnJCcgYXMgcDEgY29sdW1u cyAoIG5lc3RlZCBwYXRoICckJyBhcyBwMTEgY29sdW1ucyAoIGZvbyBpbnQgKSAsIG5lc3RlZCBw YXRoICckJyBhcyBwMTIgY29sdW1ucyAoIGJhciBpbnQgKSApICwgbmVzdGVkIHBhdGggJyQnIGFz IHAyIGNvbHVtbnMgKCBuZXN0ZWQgcGF0aCAnJCcgYXMgcDIxIGNvbHVtbnMgKCBiYXogaW50ICkg KSApIHBsYW4gKCBwMSApICkganQ7IHdpdGggMCBwYXJhbWV0ZXIocykgb24gY29ubmVjdGlvbiBl Y3BnMV9yZWdyZXNzaW9uCitbTk9fUElEXTogc3FsY2E6IGNvZGU6IDAsIHN0YXRlOiAwMDAwMAor W05PX1BJRF06IGVjcGdfZXhlY3V0ZSBvbiBsaW5lIDE2OiB1c2luZyBQUWV4ZWMKK1tOT19QSURd OiBzcWxjYTogY29kZTogMCwgc3RhdGU6IDAwMDAwCitbTk9fUElEXTogZWNwZ19jaGVja19QUXJl c3VsdCBvbiBsaW5lIDE2OiBiYWQgcmVzcG9uc2UgLSBFUlJPUjogIGludmFsaWQgSlNPTl9UQUJM RSBwbGFuCitMSU5FIDE6IC4uLnRlZCBwYXRoICckJyBhcyBwMjEgY29sdW1ucyAoIGJheiBpbnQg KSApICkgcGxhbiAoIHAxICkgKSBqdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCitERVRBSUw6ICBQQVRIIG5hbWUgbWlzbWF0 Y2g6IGV4cGVjdGVkIHAwIGJ1dCBwMSBpcyBnaXZlbi4KK1tOT19QSURdOiBzcWxjYTogY29kZTog MCwgc3RhdGU6IDAwMDAwCitbTk9fUElEXTogcmFpc2luZyBzcWxzdGF0ZSA0MjYwMSAoc3FsY29k ZSAtNDAwKTogaW52YWxpZCBKU09OX1RBQkxFIHBsYW4gb24gbGluZSAxNgorW05PX1BJRF06IHNx bGNhOiBjb2RlOiAtNDAwLCBzdGF0ZTogNDI2MDEKK1NRTCBlcnJvcjogaW52YWxpZCBKU09OX1RB QkxFIHBsYW4gb24gbGluZSAxNgorW05PX1BJRF06IGVjcGdfZmluaXNoOiBjb25uZWN0aW9uIGVj cGcxX3JlZ3Jlc3Npb24gY2xvc2VkCitbTk9fUElEXTogc3FsY2E6IGNvZGU6IDAsIHN0YXRlOiAw MDAwMApkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvZWNwZy90ZXN0L2V4cGVjdGVkL3NxbC1z cWxqc29uX2pzb250YWJsZS5zdGRvdXQgYi9zcmMvaW50ZXJmYWNlcy9lY3BnL3Rlc3QvZXhwZWN0 ZWQvc3FsLXNxbGpzb25fanNvbnRhYmxlLnN0ZG91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwLi5lNjlkZTI5YmIyCmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9lY3Bn L3Rlc3Qvc3FsL01ha2VmaWxlIGIvc3JjL2ludGVyZmFjZXMvZWNwZy90ZXN0L3NxbC9NYWtlZmls ZQppbmRleCBkODIxM2IyNWNlLi43ZjAzMjY1OWI5IDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNl cy9lY3BnL3Rlc3Qvc3FsL01ha2VmaWxlCisrKyBiL3NyYy9pbnRlcmZhY2VzL2VjcGcvdGVzdC9z cWwvTWFrZWZpbGUKQEAgLTI0LDYgKzI0LDcgQEAgVEVTVFMgPSBhcnJheSBhcnJheS5jIFwKICAg ICAgICAgcXVvdGUgcXVvdGUuYyBcCiAgICAgICAgIHNob3cgc2hvdy5jIFwKICAgICAgICAgc3Fs anNvbiBzcWxqc29uLmMgXAorICAgICAgICBzcWxqc29uX2pzb250YWJsZSBzcWxqc29uX2pzb250 YWJsZS5jIFwKICAgICAgICAgaW5zdXBkIGluc3VwZC5jIFwKICAgICAgICAgdHdvcGhhc2UgdHdv cGhhc2UuYyBcCiAgICAgICAgIGluc3VwZCBpbnN1cGQuYyBcCmRpZmYgLS1naXQgYS9zcmMvaW50 ZXJmYWNlcy9lY3BnL3Rlc3Qvc3FsL21lc29uLmJ1aWxkIGIvc3JjL2ludGVyZmFjZXMvZWNwZy90 ZXN0L3NxbC9tZXNvbi5idWlsZAppbmRleCAxMmYyOGUwYTI0Li44OGEzYWNiOWFmIDEwMDY0NAot LS0gYS9zcmMvaW50ZXJmYWNlcy9lY3BnL3Rlc3Qvc3FsL21lc29uLmJ1aWxkCisrKyBiL3NyYy9p bnRlcmZhY2VzL2VjcGcvdGVzdC9zcWwvbWVzb24uYnVpbGQKQEAgLTI2LDYgKzI2LDcgQEAgcGdj X2ZpbGVzID0gWwogICAnc2hvdycsCiAgICdzcWxkYScsCiAgICdzcWxqc29uJywKKyAgJ3NxbGpz b25fanNvbnRhYmxlJywKICAgJ3R3b3BoYXNlJywKIF0KIApkaWZmIC0tZ2l0IGEvc3JjL2ludGVy ZmFjZXMvZWNwZy90ZXN0L3NxbC9zcWxqc29uX2pzb250YWJsZS5wZ2MgYi9zcmMvaW50ZXJmYWNl cy9lY3BnL3Rlc3Qvc3FsL3NxbGpzb25fanNvbnRhYmxlLnBnYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwLi4wNmY4YTJiNjM0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2lu dGVyZmFjZXMvZWNwZy90ZXN0L3NxbC9zcWxqc29uX2pzb250YWJsZS5wZ2MKQEAgLTAsMCArMSwz MiBAQAorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK0VYRUMgU1FMIElOQ0xVREUgc3FsY2E7CitleGVj IHNxbCBpbmNsdWRlIC4uL3JlZ3Jlc3Npb247CisKK0VYRUMgU1FMIFdIRU5FVkVSIFNRTEVSUk9S IHNxbHByaW50OworCitpbnQKK21haW4gKCkKK3sKKyAgRUNQR2RlYnVnICgxLCBzdGRlcnIpOwor CisgIEVYRUMgU1FMIENPTk5FQ1QgVE8gUkVHUkVTU0RCMTsKKyAgRVhFQyBTUUwgU0VUIEFVVE9D T01NSVQgPSBPTjsKKworICBFWEVDIFNRTCBTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIg J251bGwnLCAnJFsqXScgQVMgcDAKKwlDT0xVTU5TICgKKwkJTkVTVEVEICckJyBBUyBwMSBDT0xV TU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTEgQ09MVU1OUyAoIGZvbyBpbnQgKSwKKwkJ CU5FU1RFRCBQQVRIICckJyBBUyBwMTIgQ09MVU1OUyAoIGJhciBpbnQgKQorCQkpLAorCQlORVNU RUQgUEFUSCAnJCcgQVMgcDIgQ09MVU1OUyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDIxIENP TFVNTlMgKCBiYXogaW50ICkKKwkJKQorCSkKKwlQTEFOIChwMSkpIGp0OworICAvLyBlcnJvcgor CisgIEVYRUMgU1FMIERJU0NPTk5FQ1Q7CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3NxbGpzb25fanNvbnRhYmxlLm91dCBiL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvc3FsanNvbl9qc29udGFibGUub3V0Cm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAuLmFjZDBiZDQwZmMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3NxbGpzb25fanNvbnRhYmxlLm91dApAQCAtMCwwICsxLDEz NTMgQEAKKy0tIEpTT05fVEFCTEUKKy0tIFNob3VsZCBmYWlsIChKU09OX1RBQkxFIGNhbiBiZSB1 c2VkIG9ubHkgaW4gRlJPTSBjbGF1c2UpCitTRUxFQ1QgSlNPTl9UQUJMRSgnW10nLCAnJCcpOwor RVJST1I6ICBzeW50YXggZXJyb3IgYXQgb3IgbmVhciAiKCIKK0xJTkUgMTogU0VMRUNUIEpTT05f VEFCTEUoJ1tdJywgJyQnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBeCistLSBTaG91bGQg ZmFpbCAobm8gY29sdW1ucykKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShOVUxMLCAnJCcgQ09M VU1OUyAoKSk7CitFUlJPUjogIHN5bnRheCBlcnJvciBhdCBvciBuZWFyICIpIgorTElORSAxOiBT RUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoTlVMTCwgJyQnIENPTFVNTlMgKCkpOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KK1NFTEVDVCAqIEZS T00gSlNPTl9UQUJMRSAoTlVMTDo6anNvbmIsICckJyBDT0xVTU5TICh2MSB0aW1lc3RhbXApKSBB UyBmICh2MSwgdjIpOworRVJST1I6ICBKU09OX1RBQkxFIGZ1bmN0aW9uIGhhcyAxIGNvbHVtbnMg YXZhaWxhYmxlIGJ1dCAyIGNvbHVtbnMgc3BlY2lmaWVkCistLSBOVUxMID0+IGVtcHR5IHRhYmxl CitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoTlVMTDo6anNvbmIsICckJyBDT0xVTU5TIChmb28g aW50KSkgYmFyOworIGZvbyAKKy0tLS0tCisoMCByb3dzKQorCistLQorU0VMRUNUICogRlJPTSBK U09OX1RBQkxFKGpzb25iICcxMjMnLCAnJCcKKwlDT0xVTU5TIChpdGVtIGludCBQQVRIICckJywg Zm9vIGludCkpIGJhcjsKKyBpdGVtIHwgZm9vIAorLS0tLS0tKy0tLS0tCisgIDEyMyB8ICAgIAor KDEgcm93KQorCistLSBKU09OX1RBQkxFOiBiYXNpYyBmdW5jdGlvbmFsaXR5CitDUkVBVEUgRE9N QUlOIGpzb25iX3Rlc3RfZG9tYWluIEFTIHRleHQgQ0hFQ0sgKHZhbHVlIDw+ICdmb28nKTsKK0NS RUFURSBURU1QIFRBQkxFIGpzb25fdGFibGVfdGVzdCAoanMpIEFTCisJKFZBTFVFUworCQkoJzEn KSwKKwkJKCdbXScpLAorCQkoJ3t9JyksCisJCSgnWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAi Zm9vIiwgbnVsbCwgZmFsc2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIi XScpCisJKTsKKy0tIFJlZ3VsYXIgInVuZm9ybWF0dGVkIiBjb2x1bW5zCitTRUxFQ1QgKgorRlJP TSBqc29uX3RhYmxlX3Rlc3QgdmFscworCUxFRlQgT1VURVIgSk9JTgorCUpTT05fVEFCTEUoCisJ CXZhbHMuanM6Ompzb25iLCAnbGF4ICRbKl0nCisJCUNPTFVNTlMgKAorCQkJaWQgRk9SIE9SRElO QUxJVFksCisJCQkiaW50IiBpbnQgUEFUSCAnJCcsCisJCQkidGV4dCIgdGV4dCBQQVRIICckJywK KwkJCSJjaGFyKDQpIiBjaGFyKDQpIFBBVEggJyQnLAorCQkJImJvb2wiIGJvb2wgUEFUSCAnJCcs CisJCQkibnVtZXJpYyIgbnVtZXJpYyBQQVRIICckJywKKwkJCSJkb21haW4iIGpzb25iX3Rlc3Rf ZG9tYWluIFBBVEggJyQnLAorCQkJanMganNvbiBQQVRIICckJywKKwkJCWpiIGpzb25iIFBBVEgg JyQnCisJCSkKKwkpIGp0CisJT04gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGpzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHwgaWQgfCBpbnQgfCAgdGV4dCAgIHwgY2hhcig0KSB8IGJvb2wgfCBudW1lcmljIHwgZG9tYWlu ICB8ICAgICAganMgICAgICB8ICAgICAgamIgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tKy0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0KKyAxICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHwgIDEgfCAgIDEgfCAxICAgICAgIHwgMSAgICAgICB8IHQgICAgfCAgICAg ICAxIHwgMSAgICAgICB8IDEgICAgICAgICAgICB8IDEKKyBbXSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgICAgfCAgICAgfCAgICAgICAgIHwgICAgICAgICB8ICAgICAgfCAgICAgICAgIHwg ICAgICAgICB8ICAgICAgICAgICAgICB8IAorIHt9ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fCAgMSB8ICAgICB8ICAgICAgICAgfCAgICAgICAgIHwgICAgICB8ICAgICAgICAgfCAgICAgICAg IHwge30gICAgICAgICAgIHwge30KKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBu dWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDEg fCAgIDEgfCAxICAgICAgIHwgMSAgICAgICB8IHQgICAgfCAgICAgICAxIHwgMSAgICAgICB8IDEg ICAgICAgICAgICB8IDEKKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBm YWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDIgfCAgICAg fCAxLjIzICAgIHwgMS4yMyAgICB8ICAgICAgfCAgICAxLjIzIHwgMS4yMyAgICB8IDEuMjMgICAg ICAgICB8IDEuMjMKKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxz ZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDMgfCAgIDIgfCAy ICAgICAgIHwgMiAgICAgICB8ICAgICAgfCAgICAgICAyIHwgMiAgICAgICB8ICIyIiAgICAgICAg ICB8ICIyIgorIFsxLCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0 cnVlLCB7ImFhYSI6IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0gfCAgNCB8ICAgICB8IGFhYWFh YWEgfCBhYWFhICAgIHwgICAgICB8ICAgICAgICAgfCBhYWFhYWFhIHwgImFhYWFhYWEiICAgIHwg ImFhYWFhYWEiCisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2Us IHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICA1IHwgICAgIHwgZm9v ICAgICB8IGZvbyAgICAgfCAgICAgIHwgICAgICAgICB8ICAgICAgICAgfCAiZm9vIiAgICAgICAg fCAiZm9vIgorIFsxLCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0 cnVlLCB7ImFhYSI6IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0gfCAgNiB8ICAgICB8ICAgICAg ICAgfCAgICAgICAgIHwgICAgICB8ICAgICAgICAgfCAgICAgICAgIHwgbnVsbCAgICAgICAgIHwg bnVsbAorIFsxLCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVl LCB7ImFhYSI6IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0gfCAgNyB8ICAgICB8IGYgICAgICAg fCBmICAgICAgIHwgZiAgICB8ICAgICAgICAgfCBmICAgICAgIHwgZmFsc2UgICAgICAgIHwgZmFs c2UKKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwg eyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDggfCAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgfCAgICAgICAgIHwgdCAgICAgICB8IHRydWUgICAgICAgICB8IHRydWUK KyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJh YWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDkgfCAgICAgfCAgICAgICAgIHwgICAg ICAgICB8ICAgICAgfCAgICAgICAgIHwgICAgICAgICB8IHsiYWFhIjogMTIzfSB8IHsiYWFhIjog MTIzfQorIFsxLCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVl LCB7ImFhYSI6IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0gfCAxMCB8ICAgICB8IFsxLDJdICAg fCBbMSwyICAgIHwgICAgICB8ICAgICAgICAgfCBbMSwyXSAgIHwgIlsxLDJdIiAgICAgIHwgIlsx LDJdIgorIFsxLCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVl LCB7ImFhYSI6IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0gfCAxMSB8ICAgICB8ICJzdHIiICAg fCAic3RyICAgIHwgICAgICB8ICAgICAgICAgfCAic3RyIiAgIHwgIlwic3RyXCIiICAgIHwgIlwi c3RyXCIiCisoMTQgcm93cykKKworLS0gImZvcm1hdHRlZCIgY29sdW1ucworU0VMRUNUICoKK0ZS T00ganNvbl90YWJsZV90ZXN0IHZhbHMKKwlMRUZUIE9VVEVSIEpPSU4KKwlKU09OX1RBQkxFKAor CQl2YWxzLmpzOjpqc29uYiwgJ2xheCAkWypdJworCQlDT0xVTU5TICgKKwkJCWlkIEZPUiBPUkRJ TkFMSVRZLAorCQkJanN0IHRleHQgICAgRk9STUFUIEpTT04gIFBBVEggJyQnLAorCQkJanNjIGNo YXIoNCkgRk9STUFUIEpTT04gIFBBVEggJyQnLAorCQkJanN2IHZhcmNoYXIoNCkgRk9STUFUIEpT T04gIFBBVEggJyQnLAorCQkJanNiIGpzb25iIEZPUk1BVCBKU09OIFBBVEggJyQnLAorCQkJanNi cSBqc29uYiBGT1JNQVQgSlNPTiBQQVRIICckJyBPTUlUIFFVT1RFUworCQkpCisJKSBqdAorCU9O IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlkIHwgICAgIGpzdCAgICAg IHwganNjICB8IGpzdiAgfCAgICAganNiICAgICAgfCAgICAganNicSAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0rLS0tLS0tKy0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tCisgMSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8ICAxIHwgMSAgICAgICAgICAgIHwgMSAgICB8IDEgICAgfCAxICAgICAgICAgICAgfCAxCisg W10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIHwgICAgICAgICAgICAgIHwgICAgICB8 ICAgICAgfCAgICAgICAgICAgICAgfCAKKyB7fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg IDEgfCB7fSAgICAgICAgICAgfCB7fSAgIHwge30gICB8IHt9ICAgICAgICAgICB8IHt9CisgWzEs IDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUsIHsiYWFhIjog MTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICAxIHwgMSAgICAgICAgICAgIHwgMSAgICB8IDEg ICAgfCAxICAgICAgICAgICAgfCAxCisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwg bnVsbCwgZmFsc2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICAy IHwgMS4yMyAgICAgICAgIHwgMS4yMyB8IDEuMjMgfCAxLjIzICAgICAgICAgfCAxLjIzCisgWzEs IDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUsIHsiYWFhIjog MTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICAzIHwgIjIiICAgICAgICAgIHwgIjIiICB8ICIy IiAgfCAiMiIgICAgICAgICAgfCAyCisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwg bnVsbCwgZmFsc2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICA0 IHwgImFhYWFhYWEiICAgIHwgImFhYSB8ICJhYWEgfCAiYWFhYWFhYSIgICAgfCAKKyBbMSwgMS4y MywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9 LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDUgfCAiZm9vIiAgICAgICAgfCAiZm9vIHwgImZvbyB8 ICJmb28iICAgICAgICB8IAorIFsxLCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGws IGZhbHNlLCB0cnVlLCB7ImFhYSI6IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0gfCAgNiB8IG51 bGwgICAgICAgICB8IG51bGwgfCBudWxsIHwgbnVsbCAgICAgICAgIHwgbnVsbAorIFsxLCAxLjIz LCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVlLCB7ImFhYSI6IDEyM30s ICJbMSwyXSIsICJcInN0clwiIl0gfCAgNyB8IGZhbHNlICAgICAgICB8IGZhbHMgfCBmYWxzIHwg ZmFsc2UgICAgICAgIHwgZmFsc2UKKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBu dWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDgg fCB0cnVlICAgICAgICAgfCB0cnVlIHwgdHJ1ZSB8IHRydWUgICAgICAgICB8IHRydWUKKyBbMSwg MS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAx MjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDkgfCB7ImFhYSI6IDEyM30gfCB7ImFhIHwgeyJh YSB8IHsiYWFhIjogMTIzfSB8IHsiYWFhIjogMTIzfQorIFsxLCAxLjIzLCAiMiIsICJhYWFhYWFh IiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVlLCB7ImFhYSI6IDEyM30sICJbMSwyXSIsICJcInN0 clwiIl0gfCAxMCB8ICJbMSwyXSIgICAgICB8ICJbMSwgfCAiWzEsIHwgIlsxLDJdIiAgICAgIHwg WzEsIDJdCisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRy dWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8IDExIHwgIlwic3RyXCIiICAg IHwgIlwicyB8ICJcInMgfCAiXCJzdHJcIiIgICAgfCAic3RyIgorKDE0IHJvd3MpCisKKy0tIEVY SVNUUyBjb2x1bW5zCitTRUxFQ1QgKgorRlJPTSBqc29uX3RhYmxlX3Rlc3QgdmFscworCUxFRlQg T1VURVIgSk9JTgorCUpTT05fVEFCTEUoCisJCXZhbHMuanM6Ompzb25iLCAnbGF4ICRbKl0nCisJ CUNPTFVNTlMgKAorCQkJaWQgRk9SIE9SRElOQUxJVFksCisJCQlleGlzdHMxIGJvb2wgRVhJU1RT IFBBVEggJyQuYWFhJywKKwkJCWV4aXN0czIgaW50IEVYSVNUUyBQQVRIICckLmFhYScsCisJCQll eGlzdHMzIGludCBFWElTVFMgUEFUSCAnc3RyaWN0ICQuYWFhJyBVTktOT1dOIE9OIEVSUk9SLAor CQkJZXhpc3RzNCB0ZXh0IEVYSVNUUyBQQVRIICdzdHJpY3QgJC5hYWEnIEZBTFNFIE9OIEVSUk9S CisJCSkKKwkpIGp0CisJT04gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGpzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg aWQgfCBleGlzdHMxIHwgZXhpc3RzMiB8IGV4aXN0czMgfCBleGlzdHM0IAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tCisgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxIHwgZiAgICAgICB8ICAg ICAgIDAgfCAgICAgICAgIHwgZmFsc2UKKyBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg ICAgfCAgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgfCAKKyB7fSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHwgIDEgfCBmICAgICAgIHwgICAgICAgMCB8ICAgICAgICAgfCBmYWxzZQorIFsx LCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVlLCB7ImFhYSI6 IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0gfCAgMSB8IGYgICAgICAgfCAgICAgICAwIHwgICAg ICAgICB8IGZhbHNlCisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFs c2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICAyIHwgZiAgICAg ICB8ICAgICAgIDAgfCAgICAgICAgIHwgZmFsc2UKKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIs ICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJc IiJdIHwgIDMgfCBmICAgICAgIHwgICAgICAgMCB8ICAgICAgICAgfCBmYWxzZQorIFsxLCAxLjIz LCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVlLCB7ImFhYSI6IDEyM30s ICJbMSwyXSIsICJcInN0clwiIl0gfCAgNCB8IGYgICAgICAgfCAgICAgICAwIHwgICAgICAgICB8 IGZhbHNlCisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRy dWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICA1IHwgZiAgICAgICB8ICAg ICAgIDAgfCAgICAgICAgIHwgZmFsc2UKKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28i LCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwg IDYgfCBmICAgICAgIHwgICAgICAgMCB8ICAgICAgICAgfCBmYWxzZQorIFsxLCAxLjIzLCAiMiIs ICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVlLCB7ImFhYSI6IDEyM30sICJbMSwy XSIsICJcInN0clwiIl0gfCAgNyB8IGYgICAgICAgfCAgICAgICAwIHwgICAgICAgICB8IGZhbHNl CisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUsIHsi YWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICA4IHwgZiAgICAgICB8ICAgICAgIDAg fCAgICAgICAgIHwgZmFsc2UKKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxs LCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDkgfCB0 ICAgICAgIHwgICAgICAgMSB8ICAgICAgIDEgfCB0cnVlCisgWzEsIDEuMjMsICIyIiwgImFhYWFh YWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwi c3RyXCIiXSB8IDEwIHwgZiAgICAgICB8ICAgICAgIDAgfCAgICAgICAgIHwgZmFsc2UKKyBbMSwg MS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAx MjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgMTEgfCBmICAgICAgIHwgICAgICAgMCB8ICAgICAg ICAgfCBmYWxzZQorKDE0IHJvd3MpCisKKy0tIE90aGVyIG1pc2NlbGxhbm91cyBjaGVja3MKK1NF TEVDVCAqCitGUk9NIGpzb25fdGFibGVfdGVzdCB2YWxzCisJTEVGVCBPVVRFUiBKT0lOCisJSlNP Tl9UQUJMRSgKKwkJdmFscy5qczo6anNvbmIsICdsYXggJFsqXScKKwkJQ09MVU1OUyAoCisJCQlp ZCBGT1IgT1JESU5BTElUWSwKKwkJCWFhYSBpbnQsIC0tICJhYWEiIGhhcyBpbXBsaWNpdCBwYXRo ICckLiJhYWEiJworCQkJYWFhMSBpbnQgUEFUSCAnJC5hYWEnLAorCQkJanMyIGpzb24gUEFUSCAn JCcsCisJCQlqc2IydyBqc29uYiBQQVRIICckJyBXSVRIIFdSQVBQRVIsCisJCQlqc2IycSBqc29u YiBQQVRIICckJyBPTUlUIFFVT1RFUywKKwkJCWlhIGludFtdIFBBVEggJyQnLAorCQkJdGEgdGV4 dFtdIFBBVEggJyQnLAorCQkJamJhIGpzb25iW10gUEFUSCAnJCcKKwkJKQorCSkganQKKwlPTiB0 cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganMgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpZCB8IGFhYSB8IGFhYTEgfCAg ICAganMyICAgICAgfCAgICAganNiMncgICAgICB8ICAgIGpzYjJxICAgICB8IGlhIHwgdGEgfCBq YmEgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLSstLS0tLSstLS0tLS0rLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tKy0tLS0rLS0t LS0KKyAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEgfCAgICAgfCAgICAgIHwgMSAg ICAgICAgICAgIHwgWzFdICAgICAgICAgICAgfCAxICAgICAgICAgICAgfCAgICB8ICAgIHwgCisg W10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIHwgICAgIHwgICAgICB8ICAgICAgICAg ICAgICB8ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwgICAgfCAgICB8IAorIHt9ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfCAgMSB8ICAgICB8ICAgICAgfCB7fSAgICAgICAgICAg fCBbe31dICAgICAgICAgICB8IHt9ICAgICAgICAgICB8ICAgIHwgICAgfCAKKyBbMSwgMS4yMywg IjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAi WzEsMl0iLCAiXCJzdHJcIiJdIHwgIDEgfCAgICAgfCAgICAgIHwgMSAgICAgICAgICAgIHwgWzFd ICAgICAgICAgICAgfCAxICAgICAgICAgICAgfCAgICB8ICAgIHwgCisgWzEsIDEuMjMsICIyIiwg ImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJd IiwgIlwic3RyXCIiXSB8ICAyIHwgICAgIHwgICAgICB8IDEuMjMgICAgICAgICB8IFsxLjIzXSAg ICAgICAgIHwgMS4yMyAgICAgICAgIHwgICAgfCAgICB8IAorIFsxLCAxLjIzLCAiMiIsICJhYWFh YWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVlLCB7ImFhYSI6IDEyM30sICJbMSwyXSIsICJc InN0clwiIl0gfCAgMyB8ICAgICB8ICAgICAgfCAiMiIgICAgICAgICAgfCBbIjIiXSAgICAgICAg ICB8IDIgICAgICAgICAgICB8ICAgIHwgICAgfCAKKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIs ICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJc IiJdIHwgIDQgfCAgICAgfCAgICAgIHwgImFhYWFhYWEiICAgIHwgWyJhYWFhYWFhIl0gICAgfCAg ICAgICAgICAgICAgfCAgICB8ICAgIHwgCisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9v IiwgbnVsbCwgZmFsc2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8 ICA1IHwgICAgIHwgICAgICB8ICJmb28iICAgICAgICB8IFsiZm9vIl0gICAgICAgIHwgICAgICAg ICAgICAgIHwgICAgfCAgICB8IAorIFsxLCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51 bGwsIGZhbHNlLCB0cnVlLCB7ImFhYSI6IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0gfCAgNiB8 ICAgICB8ICAgICAgfCBudWxsICAgICAgICAgfCBbbnVsbF0gICAgICAgICB8IG51bGwgICAgICAg ICB8ICAgIHwgICAgfCAKKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBm YWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDcgfCAgICAg fCAgICAgIHwgZmFsc2UgICAgICAgIHwgW2ZhbHNlXSAgICAgICAgfCBmYWxzZSAgICAgICAgfCAg ICB8ICAgIHwgCisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2Us IHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICA4IHwgICAgIHwgICAg ICB8IHRydWUgICAgICAgICB8IFt0cnVlXSAgICAgICAgIHwgdHJ1ZSAgICAgICAgIHwgICAgfCAg ICB8IAorIFsxLCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVl LCB7ImFhYSI6IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0gfCAgOSB8IDEyMyB8ICAxMjMgfCB7 ImFhYSI6IDEyM30gfCBbeyJhYWEiOiAxMjN9XSB8IHsiYWFhIjogMTIzfSB8ICAgIHwgICAgfCAK KyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJh YWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgMTAgfCAgICAgfCAgICAgIHwgIlsxLDJd IiAgICAgIHwgWyJbMSwyXSJdICAgICAgfCBbMSwgMl0gICAgICAgfCAgICB8ICAgIHwgCisgWzEs IDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUsIHsiYWFhIjog MTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8IDExIHwgICAgIHwgICAgICB8ICJcInN0clwiIiAg ICB8IFsiXCJzdHJcIiJdICAgIHwgInN0ciIgICAgICAgIHwgICAgfCAgICB8IAorKDE0IHJvd3Mp CisKKy0tIEpTT05fVEFCTEU6IFRlc3QgYmFja3dhcmQgcGFyc2luZworQ1JFQVRFIFZJRVcganNv bmJfdGFibGVfdmlldzEgQVMKK1NFTEVDVCAqIEZST00KKwlKU09OX1RBQkxFKAorCQlqc29uYiAn bnVsbCcsICdsYXggJFsqXScgUEFTU0lORyAxICsgMiBBUyBhLCBqc29uICciZm9vIicgQVMgImIg YyIKKwkJQ09MVU1OUyAoCisJCQlpZCBGT1IgT1JESU5BTElUWSwKKwkJCU5FU1RFRCBQQVRIICck WzFdJyBBUyBwMSBDT0xVTU5TICgKKwkJCQlhMSBpbnQsCisJCQkJTkVTVEVEIFBBVEggJyRbKl0n IEFTICJwMSAxIiBDT0xVTU5TICgKKwkJCQkJYTExIHRleHQKKwkJCQkpLAorCQkJCWIxIHRleHQK KwkJCSksCisJCQlORVNURUQgUEFUSCAnJFsyXScgQVMgcDIgQ09MVU1OUyAoCisJCQkJTkVTVEVE IFBBVEggJyRbKl0nIEFTICJwMjoxIiBDT0xVTU5TICgKKwkJCQkJYTIxIHRleHQKKwkJCQkpLAor CQkJCU5FU1RFRCBQQVRIICckWypdJyBBUyBwMjIgQ09MVU1OUyAoCisJCQkJCWEyMiB0ZXh0CisJ CQkJKQorCQkJKQorCQkpCisJKTsKK0NSRUFURSBWSUVXIGpzb25iX3RhYmxlX3ZpZXcyIEFTCitT RUxFQ1QgKiBGUk9NCisJSlNPTl9UQUJMRSgKKwkJanNvbmIgJ251bGwnLCAnbGF4ICRbKl0nIFBB U1NJTkcgMSArIDIgQVMgYSwganNvbiAnImZvbyInIEFTICJiIGMiCisJCUNPTFVNTlMgKAorCQkJ ImludCIgaW50IFBBVEggJyQnLAorCQkJInRleHQiIHRleHQgUEFUSCAnJCcsCisJCQkiY2hhcig0 KSIgY2hhcig0KSBQQVRIICckJywKKwkJCSJib29sIiBib29sIFBBVEggJyQnLAorCQkJIm51bWVy aWMiIG51bWVyaWMgUEFUSCAnJCcsCisJCQkiZG9tYWluIiBqc29uYl90ZXN0X2RvbWFpbiBQQVRI ICckJykpOworQ1JFQVRFIFZJRVcganNvbmJfdGFibGVfdmlldzMgQVMKK1NFTEVDVCAqIEZST00K KwlKU09OX1RBQkxFKAorCQlqc29uYiAnbnVsbCcsICdsYXggJFsqXScgUEFTU0lORyAxICsgMiBB UyBhLCBqc29uICciZm9vIicgQVMgImIgYyIKKwkJQ09MVU1OUyAoCisJCQlqcyBqc29uIFBBVEgg JyQnLAorCQkJamIganNvbmIgUEFUSCAnJCcsCisJCQlqc3QgdGV4dCAgICBGT1JNQVQgSlNPTiAg UEFUSCAnJCcsCisJCQlqc2MgY2hhcig0KSBGT1JNQVQgSlNPTiAgUEFUSCAnJCcsCisJCQlqc3Yg dmFyY2hhcig0KSBGT1JNQVQgSlNPTiAgUEFUSCAnJCcpKTsKK0NSRUFURSBWSUVXIGpzb25iX3Rh YmxlX3ZpZXc0IEFTCitTRUxFQ1QgKiBGUk9NCisJSlNPTl9UQUJMRSgKKwkJanNvbmIgJ251bGwn LCAnbGF4ICRbKl0nIFBBU1NJTkcgMSArIDIgQVMgYSwganNvbiAnImZvbyInIEFTICJiIGMiCisJ CUNPTFVNTlMgKAorICAgICAgICAgICAganNiIGpzb25iICAgRk9STUFUIEpTT04gUEFUSCAnJCcs CisgICAgICAgICAgICBqc2JxIGpzb25iIEZPUk1BVCBKU09OIFBBVEggJyQnIE9NSVQgUVVPVEVT LAorICAgICAgICAgICAgYWFhIGludCwgLS0gaW1wbGljaXQgcGF0aCAnJC4iYWFhIicsCisgICAg ICAgICAgICBhYWExIGludCBQQVRIICckLmFhYScpKTsKK0NSRUFURSBWSUVXIGpzb25iX3RhYmxl X3ZpZXc1IEFTCitTRUxFQ1QgKiBGUk9NCisJSlNPTl9UQUJMRSgKKwkJanNvbmIgJ251bGwnLCAn bGF4ICRbKl0nIFBBU1NJTkcgMSArIDIgQVMgYSwganNvbiAnImZvbyInIEFTICJiIGMiCisJCUNP TFVNTlMgKAorCQkJZXhpc3RzMSBib29sIEVYSVNUUyBQQVRIICckLmFhYScsCisJCQlleGlzdHMy IGludCBFWElTVFMgUEFUSCAnJC5hYWEnIFRSVUUgT04gRVJST1IsCisJCQlleGlzdHMzIHRleHQg RVhJU1RTIFBBVEggJ3N0cmljdCAkLmFhYScgVU5LTk9XTiBPTiBFUlJPUikpOworQ1JFQVRFIFZJ RVcganNvbmJfdGFibGVfdmlldzYgQVMKK1NFTEVDVCAqIEZST00KKwlKU09OX1RBQkxFKAorCQlq c29uYiAnbnVsbCcsICdsYXggJFsqXScgUEFTU0lORyAxICsgMiBBUyBhLCBqc29uICciZm9vIicg QVMgImIgYyIKKwkJQ09MVU1OUyAoCisJCQlqczIganNvbiBQQVRIICckJywKKwkJCWpzYjJ3IGpz b25iIFBBVEggJyQnIFdJVEggV1JBUFBFUiwKKwkJCWpzYjJxIGpzb25iIFBBVEggJyQnIE9NSVQg UVVPVEVTLAorCQkJaWEgaW50W10gUEFUSCAnJCcsCisJCQl0YSB0ZXh0W10gUEFUSCAnJCcsCisJ CQlqYmEganNvbmJbXSBQQVRIICckJykpOworXHN2IGpzb25iX3RhYmxlX3ZpZXcxCitDUkVBVEUg T1IgUkVQTEFDRSBWSUVXIHB1YmxpYy5qc29uYl90YWJsZV92aWV3MSBBUworIFNFTEVDVCBpZCwK KyAgICBhMSwKKyAgICBiMSwKKyAgICBhMTEsCisgICAgYTIxLAorICAgIGEyMgorICAgRlJPTSBK U09OX1RBQkxFKAorICAgICAgICAgICAgJ251bGwnOjpqc29uYiwgJyRbKl0nIEFTIGpzb25fdGFi bGVfcGF0aF8wCisgICAgICAgICAgICBQQVNTSU5HCisgICAgICAgICAgICAgICAgMSArIDIgQVMg YSwKKyAgICAgICAgICAgICAgICAnImZvbyInOjpqc29uIEFTICJiIGMiCisgICAgICAgICAgICBD T0xVTU5TICgKKyAgICAgICAgICAgICAgICBpZCBGT1IgT1JESU5BTElUWSwKKyAgICAgICAgICAg ICAgICBORVNURUQgUEFUSCAnJFsxXScgQVMgcDEKKyAgICAgICAgICAgICAgICBDT0xVTU5TICgK KyAgICAgICAgICAgICAgICAgICAgYTEgaW50ZWdlciBQQVRIICckLiJhMSInLAorICAgICAgICAg ICAgICAgICAgICBiMSB0ZXh0IFBBVEggJyQuImIxIicsCisgICAgICAgICAgICAgICAgICAgIE5F U1RFRCBQQVRIICckWypdJyBBUyAicDEgMSIKKyAgICAgICAgICAgICAgICAgICAgQ09MVU1OUyAo CisgICAgICAgICAgICAgICAgICAgICAgICBhMTEgdGV4dCBQQVRIICckLiJhMTEiJworICAgICAg ICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICBORVNU RUQgUEFUSCAnJFsyXScgQVMgcDIKKyAgICAgICAgICAgICAgICBDT0xVTU5TICgKKyAgICAgICAg ICAgICAgICAgICAgTkVTVEVEIFBBVEggJyRbKl0nIEFTICJwMjoxIgorICAgICAgICAgICAgICAg ICAgICBDT0xVTU5TICgKKyAgICAgICAgICAgICAgICAgICAgICAgIGEyMSB0ZXh0IFBBVEggJyQu ImEyMSInCisgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIE5FU1RF RCBQQVRIICckWypdJyBBUyBwMjIKKyAgICAgICAgICAgICAgICAgICAgQ09MVU1OUyAoCisgICAg ICAgICAgICAgICAgICAgICAgICBhMjIgdGV4dCBQQVRIICckLiJhMjIiJworICAgICAgICAgICAg ICAgICAgICApCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgKQorICAgICAgICAgICAg UExBTiAoanNvbl90YWJsZV9wYXRoXzAgT1VURVIgKChwMSBPVVRFUiAicDEgMSIpIFVOSU9OIChw MiBPVVRFUiAoInAyOjEiIFVOSU9OIHAyMikpKSkKKyAgICAgICAgKQorXHN2IGpzb25iX3RhYmxl X3ZpZXcyCitDUkVBVEUgT1IgUkVQTEFDRSBWSUVXIHB1YmxpYy5qc29uYl90YWJsZV92aWV3MiBB UworIFNFTEVDVCAiaW50IiwKKyAgICB0ZXh0LAorICAgICJjaGFyKDQpIiwKKyAgICBib29sLAor ICAgICJudW1lcmljIiwKKyAgICBkb21haW4KKyAgIEZST00gSlNPTl9UQUJMRSgKKyAgICAgICAg ICAgICdudWxsJzo6anNvbmIsICckWypdJyBBUyBqc29uX3RhYmxlX3BhdGhfMAorICAgICAgICAg ICAgUEFTU0lORworICAgICAgICAgICAgICAgIDEgKyAyIEFTIGEsCisgICAgICAgICAgICAgICAg JyJmb28iJzo6anNvbiBBUyAiYiBjIgorICAgICAgICAgICAgQ09MVU1OUyAoCisgICAgICAgICAg ICAgICAgImludCIgaW50ZWdlciBQQVRIICckJywKKyAgICAgICAgICAgICAgICB0ZXh0IHRleHQg UEFUSCAnJCcsCisgICAgICAgICAgICAgICAgImNoYXIoNCkiIGNoYXJhY3Rlcig0KSBQQVRIICck JywKKyAgICAgICAgICAgICAgICBib29sIGJvb2xlYW4gUEFUSCAnJCcsCisgICAgICAgICAgICAg ICAgIm51bWVyaWMiIG51bWVyaWMgUEFUSCAnJCcsCisgICAgICAgICAgICAgICAgZG9tYWluIGpz b25iX3Rlc3RfZG9tYWluIFBBVEggJyQnCisgICAgICAgICAgICApCisgICAgICAgICAgICBQTEFO IChqc29uX3RhYmxlX3BhdGhfMCkKKyAgICAgICAgKQorXHN2IGpzb25iX3RhYmxlX3ZpZXczCitD UkVBVEUgT1IgUkVQTEFDRSBWSUVXIHB1YmxpYy5qc29uYl90YWJsZV92aWV3MyBBUworIFNFTEVD VCBqcywKKyAgICBqYiwKKyAgICBqc3QsCisgICAganNjLAorICAgIGpzdgorICAgRlJPTSBKU09O X1RBQkxFKAorICAgICAgICAgICAgJ251bGwnOjpqc29uYiwgJyRbKl0nIEFTIGpzb25fdGFibGVf cGF0aF8wCisgICAgICAgICAgICBQQVNTSU5HCisgICAgICAgICAgICAgICAgMSArIDIgQVMgYSwK KyAgICAgICAgICAgICAgICAnImZvbyInOjpqc29uIEFTICJiIGMiCisgICAgICAgICAgICBDT0xV TU5TICgKKyAgICAgICAgICAgICAgICBqcyBqc29uIFBBVEggJyQnLAorICAgICAgICAgICAgICAg IGpiIGpzb25iIFBBVEggJyQnLAorICAgICAgICAgICAgICAgIGpzdCB0ZXh0IEZPUk1BVCBKU09O IFBBVEggJyQnLAorICAgICAgICAgICAgICAgIGpzYyBjaGFyYWN0ZXIoNCkgRk9STUFUIEpTT04g UEFUSCAnJCcsCisgICAgICAgICAgICAgICAganN2IGNoYXJhY3RlciB2YXJ5aW5nKDQpIEZPUk1B VCBKU09OIFBBVEggJyQnCisgICAgICAgICAgICApCisgICAgICAgICAgICBQTEFOIChqc29uX3Rh YmxlX3BhdGhfMCkKKyAgICAgICAgKQorXHN2IGpzb25iX3RhYmxlX3ZpZXc0CitDUkVBVEUgT1Ig UkVQTEFDRSBWSUVXIHB1YmxpYy5qc29uYl90YWJsZV92aWV3NCBBUworIFNFTEVDVCBqc2IsCisg ICAganNicSwKKyAgICBhYWEsCisgICAgYWFhMQorICAgRlJPTSBKU09OX1RBQkxFKAorICAgICAg ICAgICAgJ251bGwnOjpqc29uYiwgJyRbKl0nIEFTIGpzb25fdGFibGVfcGF0aF8wCisgICAgICAg ICAgICBQQVNTSU5HCisgICAgICAgICAgICAgICAgMSArIDIgQVMgYSwKKyAgICAgICAgICAgICAg ICAnImZvbyInOjpqc29uIEFTICJiIGMiCisgICAgICAgICAgICBDT0xVTU5TICgKKyAgICAgICAg ICAgICAgICBqc2IganNvbmIgUEFUSCAnJCcsCisgICAgICAgICAgICAgICAganNicSBqc29uYiBQ QVRIICckJyBPTUlUIFFVT1RFUywKKyAgICAgICAgICAgICAgICBhYWEgaW50ZWdlciBQQVRIICck LiJhYWEiJywKKyAgICAgICAgICAgICAgICBhYWExIGludGVnZXIgUEFUSCAnJC4iYWFhIicKKyAg ICAgICAgICAgICkKKyAgICAgICAgICAgIFBMQU4gKGpzb25fdGFibGVfcGF0aF8wKQorICAgICAg ICApCitcc3YganNvbmJfdGFibGVfdmlldzUKK0NSRUFURSBPUiBSRVBMQUNFIFZJRVcgcHVibGlj Lmpzb25iX3RhYmxlX3ZpZXc1IEFTCisgU0VMRUNUIGV4aXN0czEsCisgICAgZXhpc3RzMiwKKyAg ICBleGlzdHMzCisgICBGUk9NIEpTT05fVEFCTEUoCisgICAgICAgICAgICAnbnVsbCc6Ompzb25i LCAnJFsqXScgQVMganNvbl90YWJsZV9wYXRoXzAKKyAgICAgICAgICAgIFBBU1NJTkcKKyAgICAg ICAgICAgICAgICAxICsgMiBBUyBhLAorICAgICAgICAgICAgICAgICciZm9vIic6Ompzb24gQVMg ImIgYyIKKyAgICAgICAgICAgIENPTFVNTlMgKAorICAgICAgICAgICAgICAgIGV4aXN0czEgYm9v bGVhbiBFWElTVFMgUEFUSCAnJC4iYWFhIicsCisgICAgICAgICAgICAgICAgZXhpc3RzMiBpbnRl Z2VyIEVYSVNUUyBQQVRIICckLiJhYWEiJyBUUlVFIE9OIEVSUk9SLAorICAgICAgICAgICAgICAg IGV4aXN0czMgdGV4dCBFWElTVFMgUEFUSCAnc3RyaWN0ICQuImFhYSInIFVOS05PV04gT04gRVJS T1IKKyAgICAgICAgICAgICkKKyAgICAgICAgICAgIFBMQU4gKGpzb25fdGFibGVfcGF0aF8wKQor ICAgICAgICApCitcc3YganNvbmJfdGFibGVfdmlldzYKK0NSRUFURSBPUiBSRVBMQUNFIFZJRVcg cHVibGljLmpzb25iX3RhYmxlX3ZpZXc2IEFTCisgU0VMRUNUIGpzMiwKKyAgICBqc2IydywKKyAg ICBqc2IycSwKKyAgICBpYSwKKyAgICB0YSwKKyAgICBqYmEKKyAgIEZST00gSlNPTl9UQUJMRSgK KyAgICAgICAgICAgICdudWxsJzo6anNvbmIsICckWypdJyBBUyBqc29uX3RhYmxlX3BhdGhfMAor ICAgICAgICAgICAgUEFTU0lORworICAgICAgICAgICAgICAgIDEgKyAyIEFTIGEsCisgICAgICAg ICAgICAgICAgJyJmb28iJzo6anNvbiBBUyAiYiBjIgorICAgICAgICAgICAgQ09MVU1OUyAoCisg ICAgICAgICAgICAgICAganMyIGpzb24gUEFUSCAnJCcsCisgICAgICAgICAgICAgICAganNiMncg anNvbmIgUEFUSCAnJCcgV0lUSCBVTkNPTkRJVElPTkFMIFdSQVBQRVIsCisgICAgICAgICAgICAg ICAganNiMnEganNvbmIgUEFUSCAnJCcgT01JVCBRVU9URVMsCisgICAgICAgICAgICAgICAgaWEg aW50ZWdlcltdIFBBVEggJyQnLAorICAgICAgICAgICAgICAgIHRhIHRleHRbXSBQQVRIICckJywK KyAgICAgICAgICAgICAgICBqYmEganNvbmJbXSBQQVRIICckJworICAgICAgICAgICAgKQorICAg ICAgICAgICAgUExBTiAoanNvbl90YWJsZV9wYXRoXzApCisgICAgICAgICkKK0VYUExBSU4gKENP U1RTIE9GRiwgVkVSQk9TRSkgU0VMRUNUICogRlJPTSBqc29uYl90YWJsZV92aWV3MTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgVGFibGUgRnVuY3Rpb24gU2NhbiBvbiAianNvbl90YWJsZSIKKyAgIE91dHB1dDogImpzb25f dGFibGUiLmlkLCAianNvbl90YWJsZSIuYTEsICJqc29uX3RhYmxlIi5iMSwgImpzb25fdGFibGUi LmExMSwgImpzb25fdGFibGUiLmEyMSwgImpzb25fdGFibGUiLmEyMgorICAgVGFibGUgRnVuY3Rp b24gQ2FsbDogSlNPTl9UQUJMRSgnbnVsbCc6Ompzb25iLCAnJFsqXScgQVMganNvbl90YWJsZV9w YXRoXzAgUEFTU0lORyAzIEFTIGEsICciZm9vIic6Ompzb25iIEFTICJiIGMiIENPTFVNTlMgKGlk IEZPUiBPUkRJTkFMSVRZLCBORVNURUQgUEFUSCAnJFsxXScgQVMgcDEgQ09MVU1OUyAoYTEgaW50 ZWdlciBQQVRIICckLiJhMSInLCBiMSB0ZXh0IFBBVEggJyQuImIxIicsIE5FU1RFRCBQQVRIICck WypdJyBBUyAicDEgMSIgQ09MVU1OUyAoYTExIHRleHQgUEFUSCAnJC4iYTExIicpKSwgTkVTVEVE IFBBVEggJyRbMl0nIEFTIHAyIENPTFVNTlMgKCBORVNURUQgUEFUSCAnJFsqXScgQVMgInAyOjEi IENPTFVNTlMgKGEyMSB0ZXh0IFBBVEggJyQuImEyMSInKSwgTkVTVEVEIFBBVEggJyRbKl0nIEFT IHAyMiBDT0xVTU5TIChhMjIgdGV4dCBQQVRIICckLiJhMjIiJykpKSBQTEFOIChqc29uX3RhYmxl X3BhdGhfMCBPVVRFUiAoKHAxIE9VVEVSICJwMSAxIikgVU5JT04gKHAyIE9VVEVSICgicDI6MSIg VU5JT04gcDIyKSkpKSkKKygzIHJvd3MpCisKK0VYUExBSU4gKENPU1RTIE9GRiwgVkVSQk9TRSkg U0VMRUNUICogRlJPTSBqc29uYl90YWJsZV92aWV3MjsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBUYWJsZSBGdW5jdGlv biBTY2FuIG9uICJqc29uX3RhYmxlIgorICAgT3V0cHV0OiAianNvbl90YWJsZSIuImludCIsICJq c29uX3RhYmxlIi50ZXh0LCAianNvbl90YWJsZSIuImNoYXIoNCkiLCAianNvbl90YWJsZSIuYm9v bCwgImpzb25fdGFibGUiLiJudW1lcmljIiwgImpzb25fdGFibGUiLmRvbWFpbgorICAgVGFibGUg RnVuY3Rpb24gQ2FsbDogSlNPTl9UQUJMRSgnbnVsbCc6Ompzb25iLCAnJFsqXScgQVMganNvbl90 YWJsZV9wYXRoXzAgUEFTU0lORyAzIEFTIGEsICciZm9vIic6Ompzb25iIEFTICJiIGMiIENPTFVN TlMgKCJpbnQiIGludGVnZXIgUEFUSCAnJCcsIHRleHQgdGV4dCBQQVRIICckJywgImNoYXIoNCki IGNoYXJhY3Rlcig0KSBQQVRIICckJywgYm9vbCBib29sZWFuIFBBVEggJyQnLCAibnVtZXJpYyIg bnVtZXJpYyBQQVRIICckJywgZG9tYWluIGpzb25iX3Rlc3RfZG9tYWluIFBBVEggJyQnKSBQTEFO IChqc29uX3RhYmxlX3BhdGhfMCkpCisoMyByb3dzKQorCitFWFBMQUlOIChDT1NUUyBPRkYsIFZF UkJPU0UpIFNFTEVDVCAqIEZST00ganNvbmJfdGFibGVfdmlldzM7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgVGFibGUgRnVuY3Rpb24gU2NhbiBvbiAi anNvbl90YWJsZSIKKyAgIE91dHB1dDogImpzb25fdGFibGUiLmpzLCAianNvbl90YWJsZSIuamIs ICJqc29uX3RhYmxlIi5qc3QsICJqc29uX3RhYmxlIi5qc2MsICJqc29uX3RhYmxlIi5qc3YKKyAg IFRhYmxlIEZ1bmN0aW9uIENhbGw6IEpTT05fVEFCTEUoJ251bGwnOjpqc29uYiwgJyRbKl0nIEFT IGpzb25fdGFibGVfcGF0aF8wIFBBU1NJTkcgMyBBUyBhLCAnImZvbyInOjpqc29uYiBBUyAiYiBj IiBDT0xVTU5TIChqcyBqc29uIFBBVEggJyQnLCBqYiBqc29uYiBQQVRIICckJywganN0IHRleHQg Rk9STUFUIEpTT04gUEFUSCAnJCcsIGpzYyBjaGFyYWN0ZXIoNCkgRk9STUFUIEpTT04gUEFUSCAn JCcsIGpzdiBjaGFyYWN0ZXIgdmFyeWluZyg0KSBGT1JNQVQgSlNPTiBQQVRIICckJykgUExBTiAo anNvbl90YWJsZV9wYXRoXzApKQorKDMgcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGLCBWRVJC T1NFKSBTRUxFQ1QgKiBGUk9NIGpzb25iX3RhYmxlX3ZpZXc0OworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg VGFibGUgRnVuY3Rpb24gU2NhbiBvbiAianNvbl90YWJsZSIKKyAgIE91dHB1dDogImpzb25fdGFi bGUiLmpzYiwgImpzb25fdGFibGUiLmpzYnEsICJqc29uX3RhYmxlIi5hYWEsICJqc29uX3RhYmxl Ii5hYWExCisgICBUYWJsZSBGdW5jdGlvbiBDYWxsOiBKU09OX1RBQkxFKCdudWxsJzo6anNvbmIs ICckWypdJyBBUyBqc29uX3RhYmxlX3BhdGhfMCBQQVNTSU5HIDMgQVMgYSwgJyJmb28iJzo6anNv bmIgQVMgImIgYyIgQ09MVU1OUyAoanNiIGpzb25iIFBBVEggJyQnLCBqc2JxIGpzb25iIFBBVEgg JyQnIE9NSVQgUVVPVEVTLCBhYWEgaW50ZWdlciBQQVRIICckLiJhYWEiJywgYWFhMSBpbnRlZ2Vy IFBBVEggJyQuImFhYSInKSBQTEFOIChqc29uX3RhYmxlX3BhdGhfMCkpCisoMyByb3dzKQorCitF WFBMQUlOIChDT1NUUyBPRkYsIFZFUkJPU0UpIFNFTEVDVCAqIEZST00ganNvbmJfdGFibGVfdmll dzU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBUYWJsZSBG dW5jdGlvbiBTY2FuIG9uICJqc29uX3RhYmxlIgorICAgT3V0cHV0OiAianNvbl90YWJsZSIuZXhp c3RzMSwgImpzb25fdGFibGUiLmV4aXN0czIsICJqc29uX3RhYmxlIi5leGlzdHMzCisgICBUYWJs ZSBGdW5jdGlvbiBDYWxsOiBKU09OX1RBQkxFKCdudWxsJzo6anNvbmIsICckWypdJyBBUyBqc29u X3RhYmxlX3BhdGhfMCBQQVNTSU5HIDMgQVMgYSwgJyJmb28iJzo6anNvbmIgQVMgImIgYyIgQ09M VU1OUyAoZXhpc3RzMSBib29sZWFuIEVYSVNUUyBQQVRIICckLiJhYWEiJywgZXhpc3RzMiBpbnRl Z2VyIEVYSVNUUyBQQVRIICckLiJhYWEiJyBUUlVFIE9OIEVSUk9SLCBleGlzdHMzIHRleHQgRVhJ U1RTIFBBVEggJ3N0cmljdCAkLiJhYWEiJyBVTktOT1dOIE9OIEVSUk9SKSBQTEFOIChqc29uX3Rh YmxlX3BhdGhfMCkpCisoMyByb3dzKQorCitFWFBMQUlOIChDT1NUUyBPRkYsIFZFUkJPU0UpIFNF TEVDVCAqIEZST00ganNvbmJfdGFibGVfdmlldzY7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBUYWJsZSBG dW5jdGlvbiBTY2FuIG9uICJqc29uX3RhYmxlIgorICAgT3V0cHV0OiAianNvbl90YWJsZSIuanMy LCAianNvbl90YWJsZSIuanNiMncsICJqc29uX3RhYmxlIi5qc2IycSwgImpzb25fdGFibGUiLmlh LCAianNvbl90YWJsZSIudGEsICJqc29uX3RhYmxlIi5qYmEKKyAgIFRhYmxlIEZ1bmN0aW9uIENh bGw6IEpTT05fVEFCTEUoJ251bGwnOjpqc29uYiwgJyRbKl0nIEFTIGpzb25fdGFibGVfcGF0aF8w IFBBU1NJTkcgMyBBUyBhLCAnImZvbyInOjpqc29uYiBBUyAiYiBjIiBDT0xVTU5TIChqczIganNv biBQQVRIICckJywganNiMncganNvbmIgUEFUSCAnJCcgV0lUSCBVTkNPTkRJVElPTkFMIFdSQVBQ RVIsIGpzYjJxIGpzb25iIFBBVEggJyQnIE9NSVQgUVVPVEVTLCBpYSBpbnRlZ2VyW10gUEFUSCAn JCcsIHRhIHRleHRbXSBQQVRIICckJywgamJhIGpzb25iW10gUEFUSCAnJCcpIFBMQU4gKGpzb25f dGFibGVfcGF0aF8wKSkKKygzIHJvd3MpCisKKy0tIEpTT05fVEFCTEUoKSB3aXRoIGFsaWFzCitF WFBMQUlOIChDT1NUUyBPRkYsIFZFUkJPU0UpCitTRUxFQ1QgKiBGUk9NCisJSlNPTl9UQUJMRSgK KwkJanNvbmIgJ251bGwnLCAnbGF4ICRbKl0nIFBBU1NJTkcgMSArIDIgQVMgYSwganNvbiAnImZv byInIEFTICJiIGMiCisJCUNPTFVNTlMgKAorCQkJaWQgRk9SIE9SRElOQUxJVFksCisJCQkiaW50 IiBpbnQgUEFUSCAnJCcsCisJCQkidGV4dCIgdGV4dCBQQVRIICckJworCSkpIGpzb25fdGFibGVf ZnVuYzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgVGFibGUgRnVuY3Rp b24gU2NhbiBvbiAianNvbl90YWJsZSIganNvbl90YWJsZV9mdW5jCisgICBPdXRwdXQ6IGlkLCAi aW50IiwgdGV4dAorICAgVGFibGUgRnVuY3Rpb24gQ2FsbDogSlNPTl9UQUJMRSgnbnVsbCc6Ompz b25iLCAnJFsqXScgQVMganNvbl90YWJsZV9wYXRoXzAgUEFTU0lORyAzIEFTIGEsICciZm9vIic6 Ompzb25iIEFTICJiIGMiIENPTFVNTlMgKGlkIEZPUiBPUkRJTkFMSVRZLCAiaW50IiBpbnRlZ2Vy IFBBVEggJyQnLCB0ZXh0IHRleHQgUEFUSCAnJCcpIFBMQU4gKGpzb25fdGFibGVfcGF0aF8wKSkK KygzIHJvd3MpCisKK0VYUExBSU4gKENPU1RTIE9GRiwgRk9STUFUIEpTT04sIFZFUkJPU0UpCitT RUxFQ1QgKiBGUk9NCisJSlNPTl9UQUJMRSgKKwkJanNvbmIgJ251bGwnLCAnbGF4ICRbKl0nIFBB U1NJTkcgMSArIDIgQVMgYSwganNvbiAnImZvbyInIEFTICJiIGMiCisJCUNPTFVNTlMgKAorCQkJ aWQgRk9SIE9SRElOQUxJVFksCisJCQkiaW50IiBpbnQgUEFUSCAnJCcsCisJCQkidGV4dCIgdGV4 dCBQQVRIICckJworCSkpIGpzb25fdGFibGVfZnVuYzsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgIHsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisgICAgICJQ bGFuIjogeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAg ICAgICJOb2RlIFR5cGUiOiAiVGFibGUgRnVuY3Rpb24gU2NhbiIsICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsK KyAgICAgICAiUGFyYWxsZWwgQXdhcmUiOiBmYWxzZSwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICArCisgICAgICAgIkFzeW5jIENhcGFibGUiOiBmYWxzZSwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKworICAgICAgICJUYWJsZSBGdW5jdGlvbiBOYW1lIjogImpzb25fdGFibGUiLCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICsKKyAgICAgICAiQWxpYXMiOiAianNvbl90YWJsZV9mdW5jIiwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICArCisgICAgICAgIk91dHB1dCI6IFsiaWQiLCAiXCJpbnRcIiIsICJ0ZXh0 Il0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKworICAgICAgICJUYWJsZSBGdW5jdGlvbiBDYWxsIjogIkpTT05f VEFCTEUoJ251bGwnOjpqc29uYiwgJyRbKl0nIEFTIGpzb25fdGFibGVfcGF0aF8wIFBBU1NJTkcg MyBBUyBhLCAnXCJmb29cIic6Ompzb25iIEFTIFwiYiBjXCIgQ09MVU1OUyAoaWQgRk9SIE9SRElO QUxJVFksIFwiaW50XCIgaW50ZWdlciBQQVRIICckJywgdGV4dCB0ZXh0IFBBVEggJyQnKSBQTEFO IChqc29uX3RhYmxlX3BhdGhfMCkpIisKKyAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICArCisgICB9ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKworIF0KKygxIHJvdykKKworRFJPUCBWSUVX IGpzb25iX3RhYmxlX3ZpZXcxOworRFJPUCBWSUVXIGpzb25iX3RhYmxlX3ZpZXcyOworRFJPUCBW SUVXIGpzb25iX3RhYmxlX3ZpZXczOworRFJPUCBWSUVXIGpzb25iX3RhYmxlX3ZpZXc0OworRFJP UCBWSUVXIGpzb25iX3RhYmxlX3ZpZXc1OworRFJPUCBWSUVXIGpzb25iX3RhYmxlX3ZpZXc2Owor RFJPUCBET01BSU4ganNvbmJfdGVzdF9kb21haW47CistLSBKU09OX1RBQkxFOiBvbmx5IG9uZSBG T1IgT1JESU5BTElUWSBjb2x1bW5zIGFsbG93ZWQKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShq c29uYiAnMScsICckJyBDT0xVTU5TIChpZCBGT1IgT1JESU5BTElUWSwgaWQyIEZPUiBPUkRJTkFM SVRZLCBhIGludCBQQVRIICckLmEnIEVSUk9SIE9OIEVNUFRZKSkganQ7CitFUlJPUjogIGNhbm5v dCB1c2UgbW9yZSB0aGFuIG9uZSBGT1IgT1JESU5BTElUWSBjb2x1bW4KK0xJTkUgMTogLi4uX1RB QkxFKGpzb25iICcxJywgJyQnIENPTFVNTlMgKGlkIEZPUiBPUkRJTkFMSVRZLCBpZDIgRk9SIE9S Li4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXgorU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICcxJywgJyQnIENPTFVN TlMgKGlkIEZPUiBPUkRJTkFMSVRZLCBhIGludCBQQVRIICckJyBFUlJPUiBPTiBFTVBUWSkpIGp0 OworIGlkIHwgYSAKKy0tLS0rLS0tCisgIDEgfCAxCisoMSByb3cpCisKKy0tIEpTT05fVEFCTEU6 IE9OIEVNUFRZL09OIEVSUk9SIGJlaGF2aW9yCitTRUxFQ1QgKgorRlJPTQorCShWQUxVRVMgKCcx JyksICgnImVyciInKSkgdmFscyhqcyksCisJSlNPTl9UQUJMRSh2YWxzLmpzOjpqc29uYiwgJyQn IENPTFVNTlMgKGEgaW50IFBBVEggJyQnKSkganQ7CisgIGpzICAgfCBhIAorLS0tLS0tLSstLS0K KyAxICAgICB8IDEKKyAiZXJyIiB8ICAKKygyIHJvd3MpCisKK1NFTEVDVCAqCitGUk9NCisJKFZB TFVFUyAoJzEnKSwgKCciZXJyIicpKSB2YWxzKGpzKQorCQlMRUZUIE9VVEVSIEpPSU4KKwlKU09O X1RBQkxFKHZhbHMuanM6Ompzb25iLCAnJCcgQ09MVU1OUyAoYSBpbnQgUEFUSCAnJCcpIEVSUk9S IE9OIEVSUk9SKSBqdAorCQlPTiB0cnVlOworRVJST1I6ICBpbnZhbGlkIGlucHV0IHN5bnRheCBm b3IgdHlwZSBpbnRlZ2VyOiAiZXJyIgorU0VMRUNUICoKK0ZST00KKwkoVkFMVUVTICgnMScpLCAo JyJlcnIiJykpIHZhbHMoanMpCisJCUxFRlQgT1VURVIgSk9JTgorCUpTT05fVEFCTEUodmFscy5q czo6anNvbmIsICckJyBDT0xVTU5TIChhIGludCBQQVRIICckJyBFUlJPUiBPTiBFUlJPUikpIGp0 CisJCU9OIHRydWU7CitFUlJPUjogIGludmFsaWQgaW5wdXQgc3ludGF4IGZvciB0eXBlIGludGVn ZXI6ICJlcnIiCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJzEnLCAnJCcgQ09MVU1O UyAoYSBpbnQgUEFUSCAnJC5hJyBFUlJPUiBPTiBFTVBUWSkpIGp0OworRVJST1I6ICBubyBTUUwv SlNPTiBpdGVtCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJzEnLCAnJCcgQ09MVU1O UyAoYSBpbnQgUEFUSCAnc3RyaWN0ICQuYScgRVJST1IgT04gRU1QVFkpIEVSUk9SIE9OIEVSUk9S KSBqdDsKK0VSUk9SOiAganNvbnBhdGggbWVtYmVyIGFjY2Vzc29yIGNhbiBvbmx5IGJlIGFwcGxp ZWQgdG8gYW4gb2JqZWN0CitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJzEnLCAnJCcg Q09MVU1OUyAoYSBpbnQgUEFUSCAnbGF4ICQuYScgRVJST1IgT04gRU1QVFkpIEVSUk9SIE9OIEVS Uk9SKSBqdDsKK0VSUk9SOiAgbm8gU1FML0pTT04gaXRlbQorU0VMRUNUICogRlJPTSBKU09OX1RB QkxFKGpzb25iICciYSInLCAnJCcgQ09MVU1OUyAoYSBpbnQgUEFUSCAnJCcgICBERUZBVUxUIDEg T04gRU1QVFkgREVGQVVMVCAyIE9OIEVSUk9SKSkganQ7CisgYSAKKy0tLQorIDIKKygxIHJvdykK KworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICciYSInLCAnJCcgQ09MVU1OUyAoYSBp bnQgUEFUSCAnc3RyaWN0ICQuYScgREVGQVVMVCAxIE9OIEVNUFRZIERFRkFVTFQgMiBPTiBFUlJP UikpIGp0OworIGEgCistLS0KKyAyCisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJM RShqc29uYiAnImEiJywgJyQnIENPTFVNTlMgKGEgaW50IFBBVEggJ2xheCAkLmEnIERFRkFVTFQg MSBPTiBFTVBUWSBERUZBVUxUIDIgT04gRVJST1IpKSBqdDsKKyBhIAorLS0tCisgMQorKDEgcm93 KQorCistLSBKU09OX1RBQkxFOiBFWElTVFMgUEFUSCB0eXBlcworU0VMRUNUICogRlJPTSBKU09O X1RBQkxFKGpzb25iICciYSInLCAnJCcgQ09MVU1OUyAoYSBpbnQ0IEVYSVNUUyBQQVRIICckLmEn KSk7CisgYSAKKy0tLQorIDAKKygxIHJvdykKKworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpz b25iICciYSInLCAnJCcgQ09MVU1OUyAoYSBpbnQyIEVYSVNUUyBQQVRIICckLmEnKSk7CitFUlJP UjogIGNhbm5vdCBjYXN0IHR5cGUgYm9vbGVhbiB0byBzbWFsbGludAorTElORSAxOiAuLi5FTEVD VCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnImEiJywgJyQnIENPTFVNTlMgKGEgaW50MiBFWEku Li4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBeCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJhIicsICckJyBDT0xV TU5TIChhIGludDggRVhJU1RTIFBBVEggJyQuYScpKTsKK0VSUk9SOiAgY2Fubm90IGNhc3QgdHlw ZSBib29sZWFuIHRvIGJpZ2ludAorTElORSAxOiAuLi5FTEVDVCAqIEZST00gSlNPTl9UQUJMRShq c29uYiAnImEiJywgJyQnIENPTFVNTlMgKGEgaW50OCBFWEkuLi4KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCitTRUxFQ1QgKiBG Uk9NIEpTT05fVEFCTEUoanNvbmIgJyJhIicsICckJyBDT0xVTU5TIChhIGZsb2F0NCBFWElTVFMg UEFUSCAnJC5hJykpOworRVJST1I6ICBjYW5ub3QgY2FzdCB0eXBlIGJvb2xlYW4gdG8gcmVhbAor TElORSAxOiAuLi5FTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnImEiJywgJyQnIENPTFVN TlMgKGEgZmxvYXQ0IEUuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBeCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIg JyJhIicsICckJyBDT0xVTU5TIChhIGNoYXIoMykgRVhJU1RTIFBBVEggJyQuYScpKTsKKyAgYSAg CistLS0tLQorIGZhbAorKDEgcm93KQorCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIg JyJhIicsICckJyBDT0xVTU5TIChhIGpzb24gRVhJU1RTIFBBVEggJyQuYScpKTsKK0VSUk9SOiAg Y2Fubm90IGNhc3QgdHlwZSBib29sZWFuIHRvIGpzb24KK0xJTkUgMTogLi4uRUxFQ1QgKiBGUk9N IEpTT05fVEFCTEUoanNvbmIgJyJhIicsICckJyBDT0xVTU5TIChhIGpzb24gRVhJLi4uCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XgorU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICciYSInLCAnJCcgQ09MVU1OUyAoYSBq c29uYiBFWElTVFMgUEFUSCAnJC5hJykpOworRVJST1I6ICBjYW5ub3QgY2FzdCB0eXBlIGJvb2xl YW4gdG8ganNvbmIKK0xJTkUgMTogLi4uRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJh IicsICckJyBDT0xVTU5TIChhIGpzb25iIEVYLi4uCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorLS0gSlNPTl9UQUJMRTogV1JB UFBFUi9RVU9URVMgY2xhdXNlcyBvbiBzY2FsYXIgY29sdW1ucworU0VMRUNUICogRlJPTSBKU09O X1RBQkxFKGpzb25iICcid29ybGQiJywgJyQnIENPTFVNTlMgKGl0ZW0gdGV4dCBQQVRIICckJyBL RUVQIFFVT1RFUyBPTiBTQ0FMQVIgU1RSSU5HKSk7CisgIGl0ZW0gICAKKy0tLS0tLS0tLQorICJ3 b3JsZCIKKygxIHJvdykKKworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICcid29ybGQi JywgJyQnIENPTFVNTlMgKGl0ZW0gdGV4dCBQQVRIICckJyBPTUlUIFFVT1RFUyBPTiBTQ0FMQVIg U1RSSU5HKSk7CisgaXRlbSAgCistLS0tLS0tCisgd29ybGQKKygxIHJvdykKKworU0VMRUNUICog RlJPTSBKU09OX1RBQkxFKGpzb25iICcid29ybGQiJywgJyQnIENPTFVNTlMgKGl0ZW0gdGV4dCBG T1JNQVQgSlNPTiBQQVRIICckJyBLRUVQIFFVT1RFUykpOworICBpdGVtICAgCistLS0tLS0tLS0K KyAid29ybGQiCisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnIndv cmxkIicsICckJyBDT0xVTU5TIChpdGVtIHRleHQgRk9STUFUIEpTT04gUEFUSCAnJCcgT01JVCBR VU9URVMpKTsKKyBpdGVtICAKKy0tLS0tLS0KKyB3b3JsZAorKDEgcm93KQorCitTRUxFQ1QgKiBG Uk9NIEpTT05fVEFCTEUoanNvbmIgJyJ3b3JsZCInLCAnJCcgQ09MVU1OUyAoaXRlbSB0ZXh0IEZP Uk1BVCBKU09OIFBBVEggJyQnIFdJVEhPVVQgV1JBUFBFUiBLRUVQIFFVT1RFUykpOworICBpdGVt ICAgCistLS0tLS0tLS0KKyAid29ybGQiCisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gSlNPTl9U QUJMRShqc29uYiAnIndvcmxkIicsICckJyBDT0xVTU5TIChpdGVtIHRleHQgUEFUSCAnJCcgV0lU SE9VVCBXUkFQUEVSIE9NSVQgUVVPVEVTKSk7CisgaXRlbSAgCistLS0tLS0tCisgd29ybGQKKygx IHJvdykKKworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICcid29ybGQiJywgJyQnIENP TFVNTlMgKGl0ZW0gdGV4dCBGT1JNQVQgSlNPTiBQQVRIICckJyBXSVRIIFdSQVBQRVIpKTsKKyAg IGl0ZW0gICAgCistLS0tLS0tLS0tLQorIFsid29ybGQiXQorKDEgcm93KQorCistLSBFcnJvcjog UVVPVEVTIGNsYXVzZSBtZWFuaW5nbGVzcyB3aGVuIFdJVEggV1JBUFBFUiBpcyBwcmVzZW50CitT RUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJ3b3JsZCInLCAnJCcgQ09MVU1OUyAoaXRl bSB0ZXh0IEZPUk1BVCBKU09OIFBBVEggJyQnIFdJVEggV1JBUFBFUiBLRUVQIFFVT1RFUykpOwor RVJST1I6ICBTUUwvSlNPTiBRVU9URVMgYmVoYXZpb3IgbXVzdCBub3QgYmUgc3BlY2lmaWVkIHdo ZW4gV0lUSCBXUkFQUEVSIGlzIHVzZWQKK0xJTkUgMTogLi4uVCAqIEZST00gSlNPTl9UQUJMRShq c29uYiAnIndvcmxkIicsICckJyBDT0xVTU5TIChpdGVtIHRleHQgLi4uCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorU0VMRUNU ICogRlJPTSBKU09OX1RBQkxFKGpzb25iICcid29ybGQiJywgJyQnIENPTFVNTlMgKGl0ZW0gdGV4 dCBQQVRIICckJyBXSVRIIFdSQVBQRVIgT01JVCBRVU9URVMpKTsKK0VSUk9SOiAgU1FML0pTT04g UVVPVEVTIGJlaGF2aW9yIG11c3Qgbm90IGJlIHNwZWNpZmllZCB3aGVuIFdJVEggV1JBUFBFUiBp cyB1c2VkCitMSU5FIDE6IC4uLlQgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJ3b3JsZCInLCAn JCcgQ09MVU1OUyAoaXRlbSB0ZXh0IC4uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KKy0tIEpTT05fVEFCTEU6IG5lc3RlZCBw YXRocyBhbmQgcGxhbnMKKy0tIFNob3VsZCBmYWlsIChKU09OX1RBQkxFIGNvbHVtbnMgbXVzdCBj b250YWluIGV4cGxpY2l0IEFTIHBhdGgKKy0tIHNwZWNpZmljYXRpb25zIGlmIGV4cGxpY2l0IFBM QU4gY2xhdXNlIGlzIHVzZWQpCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoCisJanNvbmIgJ1td JywgJyQnIC0tIEFTIDxwYXRoIG5hbWU+IHJlcXVpcmVkIGhlcmUKKwlDT0xVTU5TICgKKwkJZm9v IGludCBQQVRIICckJworCSkKKwlQTEFOIERFRkFVTFQgKFVOSU9OKQorKSBqdDsKK0VSUk9SOiAg aW52YWxpZCBKU09OX1RBQkxFIGV4cHJlc3Npb24KK0xJTkUgMjogIGpzb25iICdbXScsICckJyAt LSBBUyA8cGF0aCBuYW1lPiByZXF1aXJlZCBoZXJlCisgICAgICAgICAgICAgICAgICAgICBeCitE RVRBSUw6ICBKU09OX1RBQkxFIHBhdGggbXVzdCBjb250YWluIGV4cGxpY2l0IEFTIHBhdGhuYW1l IHNwZWNpZmljYXRpb24gaWYgZXhwbGljaXQgUExBTiBjbGF1c2UgaXMgdXNlZAorU0VMRUNUICog RlJPTSBKU09OX1RBQkxFKAorCWpzb25iICdbXScsICckJyBBUyBwYXRoMQorCUNPTFVNTlMgKAor CQlORVNURUQgUEFUSCAnJCcgQ09MVU1OUyAoIC0tIEFTIDxwYXRoIG5hbWU+IHJlcXVpcmVkIGhl cmUKKwkJCWZvbyBpbnQgUEFUSCAnJCcKKwkJKQorCSkKKwlQTEFOIERFRkFVTFQgKFVOSU9OKQor KSBqdDsKK0VSUk9SOiAgaW52YWxpZCBKU09OX1RBQkxFIGV4cHJlc3Npb24KK0xJTkUgNDogICBO RVNURUQgUEFUSCAnJCcgQ09MVU1OUyAoIC0tIEFTIDxwYXRoIG5hbWU+IHJlcXVpcmVkIGhlcmUK KyAgICAgICAgICBeCitERVRBSUw6ICBKU09OX1RBQkxFIHBhdGggbXVzdCBjb250YWluIGV4cGxp Y2l0IEFTIHBhdGhuYW1lIHNwZWNpZmljYXRpb24gaWYgZXhwbGljaXQgUExBTiBjbGF1c2UgaXMg dXNlZAorLS0gU2hvdWxkIGZhaWwgKGNvbHVtbiBuYW1lcyBtdXN0IGJlIGRpc3RpbmN0KQorU0VM RUNUICogRlJPTSBKU09OX1RBQkxFKAorCWpzb25iICdbXScsICckJyBBUyBhCisJQ09MVU1OUyAo CisJCWEgaW50CisJKQorKSBqdDsKK0VSUk9SOiAgZHVwbGljYXRlIEpTT05fVEFCTEUgY29sdW1u IG5hbWU6IGEKK0xJTkUgNDogICBhIGludAorICAgICAgICAgIF4KK1NFTEVDVCAqIEZST00gSlNP Tl9UQUJMRSgKKwlqc29uYiAnW10nLCAnJCcgQVMgYQorCUNPTFVNTlMgKAorCQliIGludCwKKwkJ TkVTVEVEIFBBVEggJyQnIEFTIGEKKwkJQ09MVU1OUyAoCisJCQljIGludAorCQkpCisJKQorKSBq dDsKK0VSUk9SOiAgZHVwbGljYXRlIEpTT05fVEFCTEUgcGF0aCBuYW1lOiBhCitMSU5FIDU6ICAg TkVTVEVEIFBBVEggJyQnIEFTIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorU0VM RUNUICogRlJPTSBKU09OX1RBQkxFKAorCWpzb25iICdbXScsICckJworCUNPTFVNTlMgKAorCQli IGludCwKKwkJTkVTVEVEIFBBVEggJyQnIEFTIGIKKwkJQ09MVU1OUyAoCisJCQljIGludAorCQkp CisJKQorKSBqdDsKK0VSUk9SOiAgZHVwbGljYXRlIEpTT05fVEFCTEUgcGF0aCBuYW1lOiBiCitM SU5FIDU6ICAgTkVTVEVEIFBBVEggJyQnIEFTIGIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXgorU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKAorCWpzb25iICdbXScsICckJworCUNPTFVN TlMgKAorCQlORVNURUQgUEFUSCAnJCcgQVMgYQorCQlDT0xVTU5TICgKKwkJCWIgaW50CisJCSks CisJCU5FU1RFRCBQQVRIICckJworCQlDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBh CisJCQlDT0xVTU5TICgKKwkJCQljIGludAorCQkJKQorCQkpCisJKQorKSBqdDsKK0VSUk9SOiAg ZHVwbGljYXRlIEpTT05fVEFCTEUgcGF0aCBuYW1lOiBhCitMSU5FIDEwOiAgICBORVNURUQgUEFU SCAnJCcgQVMgYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KKy0tIEpTT05fVEFC TEU6IHBsYW4gdmFsaWRhdGlvbgorU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKAorCWpzb25iICdu dWxsJywgJyRbKl0nIEFTIHAwCisJQ09MVU1OUyAoCisJCU5FU1RFRCAnJCcgQVMgcDEgQ09MVU1O UyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDExIENPTFVNTlMgKCBmb28gaW50ICksCisJCQlO RVNURUQgUEFUSCAnJCcgQVMgcDEyIENPTFVNTlMgKCBiYXIgaW50ICkKKwkJKSwKKwkJTkVTVEVE IFBBVEggJyQnIEFTIHAyIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAyMSBDT0xV TU5TICggYmF6IGludCApCisJCSkKKwkpCisJUExBTiAocDEpCispIGp0OworRVJST1I6ICBpbnZh bGlkIEpTT05fVEFCTEUgcGxhbgorTElORSAxMjogIFBMQU4gKHAxKQorICAgICAgICAgICAgICAg IF4KK0RFVEFJTDogIFBBVEggbmFtZSBtaXNtYXRjaDogZXhwZWN0ZWQgcDAgYnV0IHAxIGlzIGdp dmVuLgorU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKAorCWpzb25iICdudWxsJywgJyRbKl0nIEFT IHAwCisJQ09MVU1OUyAoCisJCU5FU1RFRCBQQVRIICckJyBBUyBwMSBDT0xVTU5TICgKKwkJCU5F U1RFRCBQQVRIICckJyBBUyBwMTEgQ09MVU1OUyAoIGZvbyBpbnQgKSwKKwkJCU5FU1RFRCBQQVRI ICckJyBBUyBwMTIgQ09MVU1OUyAoIGJhciBpbnQgKQorCQkpLAorCQlORVNURUQgUEFUSCAnJCcg QVMgcDIgQ09MVU1OUyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDIxIENPTFVNTlMgKCBiYXog aW50ICkKKwkJKQorCSkKKwlQTEFOIChwMCkKKykganQ7CitFUlJPUjogIGludmFsaWQgSlNPTl9U QUJMRSBzcGVjaWZpY2F0aW9uCitMSU5FIDQ6ICAgTkVTVEVEIFBBVEggJyQnIEFTIHAxIENPTFVN TlMgKAorICAgICAgICAgIF4KK0RFVEFJTDogIFBMQU4gY2xhdXNlIGZvciBuZXN0ZWQgcGF0aCBw MSB3YXMgbm90IGZvdW5kLgorU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKAorCWpzb25iICdudWxs JywgJyRbKl0nIEFTIHAwCisJQ09MVU1OUyAoCisJCU5FU1RFRCBQQVRIICckJyBBUyBwMSBDT0xV TU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTEgQ09MVU1OUyAoIGZvbyBpbnQgKSwKKwkJ CU5FU1RFRCBQQVRIICckJyBBUyBwMTIgQ09MVU1OUyAoIGJhciBpbnQgKQorCQkpLAorCQlORVNU RUQgUEFUSCAnJCcgQVMgcDIgQ09MVU1OUyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDIxIENP TFVNTlMgKCBiYXogaW50ICkKKwkJKQorCSkKKwlQTEFOIChwMCBPVVRFUiBwMykKKykganQ7CitF UlJPUjogIGludmFsaWQgSlNPTl9UQUJMRSBzcGVjaWZpY2F0aW9uCitMSU5FIDQ6ICAgTkVTVEVE IFBBVEggJyQnIEFTIHAxIENPTFVNTlMgKAorICAgICAgICAgIF4KK0RFVEFJTDogIFBMQU4gY2xh dXNlIGZvciBuZXN0ZWQgcGF0aCBwMSB3YXMgbm90IGZvdW5kLgorU0VMRUNUICogRlJPTSBKU09O X1RBQkxFKAorCWpzb25iICdudWxsJywgJyRbKl0nIEFTIHAwCisJQ09MVU1OUyAoCisJCU5FU1RF RCBQQVRIICckJyBBUyBwMSBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTEgQ09M VU1OUyAoIGZvbyBpbnQgKSwKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTIgQ09MVU1OUyAoIGJh ciBpbnQgKQorCQkpLAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDIgQ09MVU1OUyAoCisJCQlORVNU RUQgUEFUSCAnJCcgQVMgcDIxIENPTFVNTlMgKCBiYXogaW50ICkKKwkJKQorCSkKKwlQTEFOIChw MCBVTklPTiBwMSBVTklPTiBwMTEpCispIGp0OworRVJST1I6ICBpbnZhbGlkIEpTT05fVEFCTEUg cGxhbiBjbGF1c2UKK0xJTkUgMTI6ICBQTEFOIChwMCBVTklPTiBwMSBVTklPTiBwMTEpCisgICAg ICAgICAgICAgICAgXgorREVUQUlMOiAgRXhwZWN0ZWQgSU5ORVIgb3IgT1VURVIuCitTRUxFQ1Qg KiBGUk9NIEpTT05fVEFCTEUoCisJanNvbmIgJ251bGwnLCAnJFsqXScgQVMgcDAKKwlDT0xVTU5T ICgKKwkJTkVTVEVEIFBBVEggJyQnIEFTIHAxIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQn IEFTIHAxMSBDT0xVTU5TICggZm9vIGludCApLAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAxMiBD T0xVTU5TICggYmFyIGludCApCisJCSksCisJCU5FU1RFRCBQQVRIICckJyBBUyBwMiBDT0xVTU5T ICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMjEgQ09MVU1OUyAoIGJheiBpbnQgKQorCQkpCisJ KQorCVBMQU4gKHAwIE9VVEVSIChwMSBDUk9TUyBwMTMpKQorKSBqdDsKK0VSUk9SOiAgaW52YWxp ZCBKU09OX1RBQkxFIHNwZWNpZmljYXRpb24KK0xJTkUgODogICBORVNURUQgUEFUSCAnJCcgQVMg cDIgQ09MVU1OUyAoCisgICAgICAgICAgXgorREVUQUlMOiAgUExBTiBjbGF1c2UgZm9yIG5lc3Rl ZCBwYXRoIHAyIHdhcyBub3QgZm91bmQuCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoCisJanNv bmIgJ251bGwnLCAnJFsqXScgQVMgcDAKKwlDT0xVTU5TICgKKwkJTkVTVEVEIFBBVEggJyQnIEFT IHAxIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAxMSBDT0xVTU5TICggZm9vIGlu dCApLAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAxMiBDT0xVTU5TICggYmFyIGludCApCisJCSks CisJCU5FU1RFRCBQQVRIICckJyBBUyBwMiBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBB UyBwMjEgQ09MVU1OUyAoIGJheiBpbnQgKQorCQkpCisJKQorCVBMQU4gKHAwIE9VVEVSIChwMSBD Uk9TUyBwMikpCispIGp0OworRVJST1I6ICBpbnZhbGlkIEpTT05fVEFCTEUgc3BlY2lmaWNhdGlv bgorTElORSA1OiAgICBORVNURUQgUEFUSCAnJCcgQVMgcDExIENPTFVNTlMgKCBmb28gaW50ICks CisgICAgICAgICAgIF4KK0RFVEFJTDogIFBMQU4gY2xhdXNlIGZvciBuZXN0ZWQgcGF0aCBwMTEg d2FzIG5vdCBmb3VuZC4KK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRSgKKwlqc29uYiAnbnVsbCcs ICckWypdJyBBUyBwMAorCUNPTFVNTlMgKAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDEgQ09MVU1O UyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDExIENPTFVNTlMgKCBmb28gaW50ICksCisJCQlO RVNURUQgUEFUSCAnJCcgQVMgcDEyIENPTFVNTlMgKCBiYXIgaW50ICkKKwkJKSwKKwkJTkVTVEVE IFBBVEggJyQnIEFTIHAyIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAyMSBDT0xV TU5TICggYmF6IGludCApCisJCSkKKwkpCisJUExBTiAocDAgT1VURVIgKChwMSBVTklPTiBwMTEp IENST1NTIHAyKSkKKykganQ7CitFUlJPUjogIGludmFsaWQgSlNPTl9UQUJMRSBwbGFuIGNsYXVz ZQorTElORSAxMjogIFBMQU4gKHAwIE9VVEVSICgocDEgVU5JT04gcDExKSBDUk9TUyBwMikpCisg ICAgICAgICAgICAgICAgICAgICAgICAgXgorREVUQUlMOiAgUExBTiBjbGF1c2UgY29udGFpbnMg c29tZSBleHRyYSBvciBkdXBsaWNhdGUgc2libGluZyBub2Rlcy4KK1NFTEVDVCAqIEZST00gSlNP Tl9UQUJMRSgKKwlqc29uYiAnbnVsbCcsICckWypdJyBBUyBwMAorCUNPTFVNTlMgKAorCQlORVNU RUQgUEFUSCAnJCcgQVMgcDEgQ09MVU1OUyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDExIENP TFVNTlMgKCBmb28gaW50ICksCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDEyIENPTFVNTlMgKCBi YXIgaW50ICkKKwkJKSwKKwkJTkVTVEVEIFBBVEggJyQnIEFTIHAyIENPTFVNTlMgKAorCQkJTkVT VEVEIFBBVEggJyQnIEFTIHAyMSBDT0xVTU5TICggYmF6IGludCApCisJCSkKKwkpCisJUExBTiAo cDAgT1VURVIgKChwMSBJTk5FUiBwMTEpIENST1NTIHAyKSkKKykganQ7CitFUlJPUjogIGludmFs aWQgSlNPTl9UQUJMRSBzcGVjaWZpY2F0aW9uCitMSU5FIDY6ICAgIE5FU1RFRCBQQVRIICckJyBB UyBwMTIgQ09MVU1OUyAoIGJhciBpbnQgKQorICAgICAgICAgICBeCitERVRBSUw6ICBQTEFOIGNs YXVzZSBmb3IgbmVzdGVkIHBhdGggcDEyIHdhcyBub3QgZm91bmQuCitTRUxFQ1QgKiBGUk9NIEpT T05fVEFCTEUoCisJanNvbmIgJ251bGwnLCAnJFsqXScgQVMgcDAKKwlDT0xVTU5TICgKKwkJTkVT VEVEIFBBVEggJyQnIEFTIHAxIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAxMSBD T0xVTU5TICggZm9vIGludCApLAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAxMiBDT0xVTU5TICgg YmFyIGludCApCisJCSksCisJCU5FU1RFRCBQQVRIICckJyBBUyBwMiBDT0xVTU5TICgKKwkJCU5F U1RFRCBQQVRIICckJyBBUyBwMjEgQ09MVU1OUyAoIGJheiBpbnQgKQorCQkpCisJKQorCVBMQU4g KHAwIE9VVEVSICgocDEgSU5ORVIgKHAxMiBDUk9TUyBwMTEpKSBDUk9TUyBwMikpCispIGp0Owor RVJST1I6ICBpbnZhbGlkIEpTT05fVEFCTEUgc3BlY2lmaWNhdGlvbgorTElORSA5OiAgICBORVNU RUQgUEFUSCAnJCcgQVMgcDIxIENPTFVNTlMgKCBiYXogaW50ICkKKyAgICAgICAgICAgXgorREVU QUlMOiAgUExBTiBjbGF1c2UgZm9yIG5lc3RlZCBwYXRoIHAyMSB3YXMgbm90IGZvdW5kLgorU0VM RUNUICogRlJPTSBKU09OX1RBQkxFKAorCWpzb25iICdudWxsJywgJ3N0cmljdCAkWypdJyBBUyBw MAorCUNPTFVNTlMgKAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDEgQ09MVU1OUyAoCisJCQlORVNU RUQgUEFUSCAnJCcgQVMgcDExIENPTFVNTlMgKCBmb28gaW50ICksCisJCQlORVNURUQgUEFUSCAn JCcgQVMgcDEyIENPTFVNTlMgKCBiYXIgaW50ICkKKwkJKSwKKwkJTkVTVEVEIFBBVEggJyQnIEFT IHAyIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAyMSBDT0xVTU5TICggYmF6IGlu dCApCisJCSkKKwkpCisJUExBTiAocDAgT1VURVIgKChwMSBJTk5FUiAocDEyIENST1NTIHAxMSkp IENST1NTIChwMiBJTk5FUiBwMjEpKSkKKykganQ7CisgYmFyIHwgZm9vIHwgYmF6IAorLS0tLS0r LS0tLS0rLS0tLS0KKygwIHJvd3MpCisKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRSgKKwlqc29u YiAnbnVsbCcsICdzdHJpY3QgJFsqXScgLS0gd2l0aG91dCByb290IHBhdGggbmFtZQorCUNPTFVN TlMgKAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDEgQ09MVU1OUyAoCisJCQlORVNURUQgUEFUSCAn JCcgQVMgcDExIENPTFVNTlMgKCBmb28gaW50ICksCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDEy IENPTFVNTlMgKCBiYXIgaW50ICkKKwkJKSwKKwkJTkVTVEVEIFBBVEggJyQnIEFTIHAyIENPTFVN TlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAyMSBDT0xVTU5TICggYmF6IGludCApCisJCSkK KwkpCisJUExBTiAoKHAxIElOTkVSIChwMTIgQ1JPU1MgcDExKSkgQ1JPU1MgKHAyIElOTkVSIHAy MSkpCispIGp0OworRVJST1I6ICBpbnZhbGlkIEpTT05fVEFCTEUgZXhwcmVzc2lvbgorTElORSAy OiAganNvbmIgJ251bGwnLCAnc3RyaWN0ICRbKl0nIC0tIHdpdGhvdXQgcm9vdCBwYXRoIG5hbWUK KyAgICAgICAgICAgICAgICAgICAgICAgXgorREVUQUlMOiAgSlNPTl9UQUJMRSBwYXRoIG11c3Qg Y29udGFpbiBleHBsaWNpdCBBUyBwYXRobmFtZSBzcGVjaWZpY2F0aW9uIGlmIGV4cGxpY2l0IFBM QU4gY2xhdXNlIGlzIHVzZWQKKy0tIEpTT05fVEFCTEU6IHBsYW4gZXhlY3V0aW9uCitDUkVBVEUg VEVNUCBUQUJMRSBqc29uYl90YWJsZV90ZXN0IChqcyBqc29uYik7CitJTlNFUlQgSU5UTyBqc29u Yl90YWJsZV90ZXN0CitWQUxVRVMgKAorCSdbCisJCXsiYSI6ICAxLCAgImIiOiBbXSwgImMiOiBb XX0sCisJCXsiYSI6ICAyLCAgImIiOiBbMSwgMiwgM10sICJjIjogWzEwLCBudWxsLCAyMF19LAor CQl7ImEiOiAgMywgICJiIjogWzEsIDJdLCAiYyI6IFtdfSwKKwkJeyJ4IjogIjQiLCAiYiI6IFsx LCAyXSwgImMiOiAxMjN9CisJIF0nCispOworLS0gdW5zcGVjaWZpZWQgcGxhbiAob3V0ZXIsIHVu aW9uKQorc2VsZWN0CisJanQuKgorZnJvbQorCWpzb25iX3RhYmxlX3Rlc3QganR0LAorCWpzb25f dGFibGUgKAorCQlqdHQuanMsJ3N0cmljdCAkWypdJyBhcyBwCisJCWNvbHVtbnMgKAorCQkJbiBm b3Igb3JkaW5hbGl0eSwKKwkJCWEgaW50IHBhdGggJ2xheCAkLmEnIGRlZmF1bHQgLTEgb24gZW1w dHksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuYlsqXScgYXMgcGIgY29sdW1ucyAoIGIgaW50 IHBhdGggJyQnICksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuY1sqXScgYXMgcGMgY29sdW1u cyAoIGMgaW50IHBhdGggJyQnICkKKwkJKQorCSkganQ7CisgbiB8IGEgIHwgYiB8IGMgIAorLS0t Ky0tLS0rLS0tKy0tLS0KKyAxIHwgIDEgfCAgIHwgICAKKyAyIHwgIDIgfCAxIHwgICAKKyAyIHwg IDIgfCAyIHwgICAKKyAyIHwgIDIgfCAzIHwgICAKKyAyIHwgIDIgfCAgIHwgMTAKKyAyIHwgIDIg fCAgIHwgICAKKyAyIHwgIDIgfCAgIHwgMjAKKyAzIHwgIDMgfCAxIHwgICAKKyAzIHwgIDMgfCAy IHwgICAKKyA0IHwgLTEgfCAxIHwgICAKKyA0IHwgLTEgfCAyIHwgICAKKygxMSByb3dzKQorCist LSBkZWZhdWx0IHBsYW4gKG91dGVyLCB1bmlvbikKK3NlbGVjdAorCWp0LioKK2Zyb20KKwlqc29u Yl90YWJsZV90ZXN0IGp0dCwKKwlqc29uX3RhYmxlICgKKwkJanR0LmpzLCdzdHJpY3QgJFsqXScg YXMgcAorCQljb2x1bW5zICgKKwkJCW4gZm9yIG9yZGluYWxpdHksCisJCQlhIGludCBwYXRoICds YXggJC5hJyBkZWZhdWx0IC0xIG9uIGVtcHR5LAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmJb Kl0nIGFzIHBiIGNvbHVtbnMgKCBiIGludCBwYXRoICckJyApLAorCQkJbmVzdGVkIHBhdGggJ3N0 cmljdCAkLmNbKl0nIGFzIHBjIGNvbHVtbnMgKCBjIGludCBwYXRoICckJyApCisJCSkKKwkJcGxh biBkZWZhdWx0IChvdXRlciwgdW5pb24pCisJKSBqdDsKKyBuIHwgYSAgfCBiIHwgYyAgCistLS0r LS0tLSstLS0rLS0tLQorIDEgfCAgMSB8ICAgfCAgIAorIDIgfCAgMiB8IDEgfCAxMAorIDIgfCAg MiB8IDEgfCAgIAorIDIgfCAgMiB8IDEgfCAyMAorIDIgfCAgMiB8IDIgfCAxMAorIDIgfCAgMiB8 IDIgfCAgIAorIDIgfCAgMiB8IDIgfCAyMAorIDIgfCAgMiB8IDMgfCAxMAorIDIgfCAgMiB8IDMg fCAgIAorIDIgfCAgMiB8IDMgfCAyMAorIDMgfCAgMyB8ICAgfCAgIAorIDQgfCAtMSB8ICAgfCAg IAorKDEyIHJvd3MpCisKKy0tIHNwZWNpZmljIHBsYW4gKHAgb3V0ZXIgKHBiIHVuaW9uIHBjKSkK K3NlbGVjdAorCWp0LioKK2Zyb20KKwlqc29uYl90YWJsZV90ZXN0IGp0dCwKKwlqc29uX3RhYmxl ICgKKwkJanR0LmpzLCdzdHJpY3QgJFsqXScgYXMgcAorCQljb2x1bW5zICgKKwkJCW4gZm9yIG9y ZGluYWxpdHksCisJCQlhIGludCBwYXRoICdsYXggJC5hJyBkZWZhdWx0IC0xIG9uIGVtcHR5LAor CQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmJbKl0nIGFzIHBiIGNvbHVtbnMgKCBiIGludCBwYXRo ICckJyApLAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmNbKl0nIGFzIHBjIGNvbHVtbnMgKCBj IGludCBwYXRoICckJyApCisJCSkKKwkJcGxhbiAocCBvdXRlciAocGIgdW5pb24gcGMpKQorCSkg anQ7CisgbiB8IGEgIHwgYiB8IGMgIAorLS0tKy0tLS0rLS0tKy0tLS0KKyAxIHwgIDEgfCAgIHwg ICAKKyAyIHwgIDIgfCAxIHwgICAKKyAyIHwgIDIgfCAyIHwgICAKKyAyIHwgIDIgfCAzIHwgICAK KyAyIHwgIDIgfCAgIHwgMTAKKyAyIHwgIDIgfCAgIHwgICAKKyAyIHwgIDIgfCAgIHwgMjAKKyAz IHwgIDMgfCAxIHwgICAKKyAzIHwgIDMgfCAyIHwgICAKKyA0IHwgLTEgfCAxIHwgICAKKyA0IHwg LTEgfCAyIHwgICAKKygxMSByb3dzKQorCistLSBzcGVjaWZpYyBwbGFuIChwIG91dGVyIChwYyB1 bmlvbiBwYikpCitzZWxlY3QKKwlqdC4qCitmcm9tCisJanNvbmJfdGFibGVfdGVzdCBqdHQsCisJ anNvbl90YWJsZSAoCisJCWp0dC5qcywnc3RyaWN0ICRbKl0nIGFzIHAKKwkJY29sdW1ucyAoCisJ CQluIGZvciBvcmRpbmFsaXR5LAorCQkJYSBpbnQgcGF0aCAnbGF4ICQuYScgZGVmYXVsdCAtMSBv biBlbXB0eSwKKwkJCW5lc3RlZCBwYXRoICdzdHJpY3QgJC5iWypdJyBhcyBwYiBjb2x1bW5zICgg YiBpbnQgcGF0aCAnJCcgKSwKKwkJCW5lc3RlZCBwYXRoICdzdHJpY3QgJC5jWypdJyBhcyBwYyBj b2x1bW5zICggYyBpbnQgcGF0aCAnJCcgKQorCQkpCisJCXBsYW4gKHAgb3V0ZXIgKHBjIHVuaW9u IHBiKSkKKwkpIGp0OworIG4gfCBhICB8IGMgIHwgYiAKKy0tLSstLS0tKy0tLS0rLS0tCisgMSB8 ICAxIHwgICAgfCAgCisgMiB8ICAyIHwgMTAgfCAgCisgMiB8ICAyIHwgICAgfCAgCisgMiB8ICAy IHwgMjAgfCAgCisgMiB8ICAyIHwgICAgfCAxCisgMiB8ICAyIHwgICAgfCAyCisgMiB8ICAyIHwg ICAgfCAzCisgMyB8ICAzIHwgICAgfCAxCisgMyB8ICAzIHwgICAgfCAyCisgNCB8IC0xIHwgICAg fCAxCisgNCB8IC0xIHwgICAgfCAyCisoMTEgcm93cykKKworLS0gZGVmYXVsdCBwbGFuIChpbm5l ciwgdW5pb24pCitzZWxlY3QKKwlqdC4qCitmcm9tCisJanNvbmJfdGFibGVfdGVzdCBqdHQsCisJ anNvbl90YWJsZSAoCisJCWp0dC5qcywnc3RyaWN0ICRbKl0nIGFzIHAKKwkJY29sdW1ucyAoCisJ CQluIGZvciBvcmRpbmFsaXR5LAorCQkJYSBpbnQgcGF0aCAnbGF4ICQuYScgZGVmYXVsdCAtMSBv biBlbXB0eSwKKwkJCW5lc3RlZCBwYXRoICdzdHJpY3QgJC5iWypdJyBhcyBwYiBjb2x1bW5zICgg YiBpbnQgcGF0aCAnJCcgKSwKKwkJCW5lc3RlZCBwYXRoICdzdHJpY3QgJC5jWypdJyBhcyBwYyBj b2x1bW5zICggYyBpbnQgcGF0aCAnJCcgKQorCQkpCisJCXBsYW4gZGVmYXVsdCAoaW5uZXIpCisJ KSBqdDsKKyBuIHwgYSAgfCBiIHwgYyAgCistLS0rLS0tLSstLS0rLS0tLQorIDEgfCAgMSB8ICAg fCAgIAorIDIgfCAgMiB8IDEgfCAxMAorIDIgfCAgMiB8IDEgfCAgIAorIDIgfCAgMiB8IDEgfCAy MAorIDIgfCAgMiB8IDIgfCAxMAorIDIgfCAgMiB8IDIgfCAgIAorIDIgfCAgMiB8IDIgfCAyMAor IDIgfCAgMiB8IDMgfCAxMAorIDIgfCAgMiB8IDMgfCAgIAorIDIgfCAgMiB8IDMgfCAyMAorIDMg fCAgMyB8ICAgfCAgIAorIDQgfCAtMSB8ICAgfCAgIAorKDEyIHJvd3MpCisKKy0tIHNwZWNpZmlj IHBsYW4gKHAgaW5uZXIgKHBiIHVuaW9uIHBjKSkKK3NlbGVjdAorCWp0LioKK2Zyb20KKwlqc29u Yl90YWJsZV90ZXN0IGp0dCwKKwlqc29uX3RhYmxlICgKKwkJanR0LmpzLCdzdHJpY3QgJFsqXScg YXMgcAorCQljb2x1bW5zICgKKwkJCW4gZm9yIG9yZGluYWxpdHksCisJCQlhIGludCBwYXRoICds YXggJC5hJyBkZWZhdWx0IC0xIG9uIGVtcHR5LAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmJb Kl0nIGFzIHBiIGNvbHVtbnMgKCBiIGludCBwYXRoICckJyApLAorCQkJbmVzdGVkIHBhdGggJ3N0 cmljdCAkLmNbKl0nIGFzIHBjIGNvbHVtbnMgKCBjIGludCBwYXRoICckJyApCisJCSkKKwkJcGxh biAocCBpbm5lciAocGIgdW5pb24gcGMpKQorCSkganQ7CisgbiB8IGEgIHwgYiB8IGMgIAorLS0t Ky0tLS0rLS0tKy0tLS0KKyAyIHwgIDIgfCAxIHwgICAKKyAyIHwgIDIgfCAyIHwgICAKKyAyIHwg IDIgfCAzIHwgICAKKyAyIHwgIDIgfCAgIHwgMTAKKyAyIHwgIDIgfCAgIHwgICAKKyAyIHwgIDIg fCAgIHwgMjAKKyAzIHwgIDMgfCAxIHwgICAKKyAzIHwgIDMgfCAyIHwgICAKKyA0IHwgLTEgfCAx IHwgICAKKyA0IHwgLTEgfCAyIHwgICAKKygxMCByb3dzKQorCistLSBkZWZhdWx0IHBsYW4gKGlu bmVyLCBjcm9zcykKK3NlbGVjdAorCWp0LioKK2Zyb20KKwlqc29uYl90YWJsZV90ZXN0IGp0dCwK Kwlqc29uX3RhYmxlICgKKwkJanR0LmpzLCdzdHJpY3QgJFsqXScgYXMgcAorCQljb2x1bW5zICgK KwkJCW4gZm9yIG9yZGluYWxpdHksCisJCQlhIGludCBwYXRoICdsYXggJC5hJyBkZWZhdWx0IC0x IG9uIGVtcHR5LAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmJbKl0nIGFzIHBiIGNvbHVtbnMg KCBiIGludCBwYXRoICckJyApLAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmNbKl0nIGFzIHBj IGNvbHVtbnMgKCBjIGludCBwYXRoICckJyApCisJCSkKKwkJcGxhbiBkZWZhdWx0IChjcm9zcywg aW5uZXIpCisJKSBqdDsKKyBuIHwgYSB8IGIgfCBjICAKKy0tLSstLS0rLS0tKy0tLS0KKyAyIHwg MiB8IDEgfCAxMAorIDIgfCAyIHwgMSB8ICAgCisgMiB8IDIgfCAxIHwgMjAKKyAyIHwgMiB8IDIg fCAxMAorIDIgfCAyIHwgMiB8ICAgCisgMiB8IDIgfCAyIHwgMjAKKyAyIHwgMiB8IDMgfCAxMAor IDIgfCAyIHwgMyB8ICAgCisgMiB8IDIgfCAzIHwgMjAKKyg5IHJvd3MpCisKKy0tIHNwZWNpZmlj IHBsYW4gKHAgaW5uZXIgKHBiIGNyb3NzIHBjKSkKK3NlbGVjdAorCWp0LioKK2Zyb20KKwlqc29u Yl90YWJsZV90ZXN0IGp0dCwKKwlqc29uX3RhYmxlICgKKwkJanR0LmpzLCdzdHJpY3QgJFsqXScg YXMgcAorCQljb2x1bW5zICgKKwkJCW4gZm9yIG9yZGluYWxpdHksCisJCQlhIGludCBwYXRoICds YXggJC5hJyBkZWZhdWx0IC0xIG9uIGVtcHR5LAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmJb Kl0nIGFzIHBiIGNvbHVtbnMgKCBiIGludCBwYXRoICckJyApLAorCQkJbmVzdGVkIHBhdGggJ3N0 cmljdCAkLmNbKl0nIGFzIHBjIGNvbHVtbnMgKCBjIGludCBwYXRoICckJyApCisJCSkKKwkJcGxh biAocCBpbm5lciAocGIgY3Jvc3MgcGMpKQorCSkganQ7CisgbiB8IGEgfCBiIHwgYyAgCistLS0r LS0tKy0tLSstLS0tCisgMiB8IDIgfCAxIHwgMTAKKyAyIHwgMiB8IDEgfCAgIAorIDIgfCAyIHwg MSB8IDIwCisgMiB8IDIgfCAyIHwgMTAKKyAyIHwgMiB8IDIgfCAgIAorIDIgfCAyIHwgMiB8IDIw CisgMiB8IDIgfCAzIHwgMTAKKyAyIHwgMiB8IDMgfCAgIAorIDIgfCAyIHwgMyB8IDIwCisoOSBy b3dzKQorCistLSBkZWZhdWx0IHBsYW4gKG91dGVyLCBjcm9zcykKK3NlbGVjdAorCWp0LioKK2Zy b20KKwlqc29uYl90YWJsZV90ZXN0IGp0dCwKKwlqc29uX3RhYmxlICgKKwkJanR0LmpzLCdzdHJp Y3QgJFsqXScgYXMgcAorCQljb2x1bW5zICgKKwkJCW4gZm9yIG9yZGluYWxpdHksCisJCQlhIGlu dCBwYXRoICdsYXggJC5hJyBkZWZhdWx0IC0xIG9uIGVtcHR5LAorCQkJbmVzdGVkIHBhdGggJ3N0 cmljdCAkLmJbKl0nIGFzIHBiIGNvbHVtbnMgKCBiIGludCBwYXRoICckJyApLAorCQkJbmVzdGVk IHBhdGggJ3N0cmljdCAkLmNbKl0nIGFzIHBjIGNvbHVtbnMgKCBjIGludCBwYXRoICckJyApCisJ CSkKKwkJcGxhbiBkZWZhdWx0IChvdXRlciwgY3Jvc3MpCisJKSBqdDsKKyBuIHwgYSAgfCBiIHwg YyAgCistLS0rLS0tLSstLS0rLS0tLQorIDEgfCAgMSB8ICAgfCAgIAorIDIgfCAgMiB8IDEgfCAx MAorIDIgfCAgMiB8IDEgfCAgIAorIDIgfCAgMiB8IDEgfCAyMAorIDIgfCAgMiB8IDIgfCAxMAor IDIgfCAgMiB8IDIgfCAgIAorIDIgfCAgMiB8IDIgfCAyMAorIDIgfCAgMiB8IDMgfCAxMAorIDIg fCAgMiB8IDMgfCAgIAorIDIgfCAgMiB8IDMgfCAyMAorIDMgfCAgMyB8ICAgfCAgIAorIDQgfCAt MSB8ICAgfCAgIAorKDEyIHJvd3MpCisKKy0tIHNwZWNpZmljIHBsYW4gKHAgb3V0ZXIgKHBiIGNy b3NzIHBjKSkKK3NlbGVjdAorCWp0LioKK2Zyb20KKwlqc29uYl90YWJsZV90ZXN0IGp0dCwKKwlq c29uX3RhYmxlICgKKwkJanR0LmpzLCdzdHJpY3QgJFsqXScgYXMgcAorCQljb2x1bW5zICgKKwkJ CW4gZm9yIG9yZGluYWxpdHksCisJCQlhIGludCBwYXRoICdsYXggJC5hJyBkZWZhdWx0IC0xIG9u IGVtcHR5LAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmJbKl0nIGFzIHBiIGNvbHVtbnMgKCBi IGludCBwYXRoICckJyApLAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmNbKl0nIGFzIHBjIGNv bHVtbnMgKCBjIGludCBwYXRoICckJyApCisJCSkKKwkJcGxhbiAocCBvdXRlciAocGIgY3Jvc3Mg cGMpKQorCSkganQ7CisgbiB8IGEgIHwgYiB8IGMgIAorLS0tKy0tLS0rLS0tKy0tLS0KKyAxIHwg IDEgfCAgIHwgICAKKyAyIHwgIDIgfCAxIHwgMTAKKyAyIHwgIDIgfCAxIHwgICAKKyAyIHwgIDIg fCAxIHwgMjAKKyAyIHwgIDIgfCAyIHwgMTAKKyAyIHwgIDIgfCAyIHwgICAKKyAyIHwgIDIgfCAy IHwgMjAKKyAyIHwgIDIgfCAzIHwgMTAKKyAyIHwgIDIgfCAzIHwgICAKKyAyIHwgIDIgfCAzIHwg MjAKKyAzIHwgIDMgfCAgIHwgICAKKyA0IHwgLTEgfCAgIHwgICAKKygxMiByb3dzKQorCitzZWxl Y3QKKwlqdC4qLCBiMSArIDEwMCBhcyBiCitmcm9tCisJanNvbl90YWJsZSAoanNvbmIKKwkJJ1sK KwkJCXsiYSI6ICAxLCAgImIiOiBbWzEsIDEwXSwgWzJdLCBbMywgMzAsIDMwMF1dLCAiYyI6IFsx LCBudWxsLCAyXX0sCisJCQl7ImEiOiAgMiwgICJiIjogWzEwLCAyMF0sICJjIjogWzEsIG51bGws IDJdfSwKKwkJCXsieCI6ICIzIiwgImIiOiBbMTEsIDIyLCAzMywgNDRdfQorCQkgXScsCisJCSck WypdJyBhcyBwCisJCWNvbHVtbnMgKAorCQkJbiBmb3Igb3JkaW5hbGl0eSwKKwkJCWEgaW50IHBh dGggJ2xheCAkLmEnIGRlZmF1bHQgLTEgb24gZXJyb3IsCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0 ICQuYlsqXScgYXMgcGIgY29sdW1ucyAoCisJCQkJYiB0ZXh0IGZvcm1hdCBqc29uIHBhdGggJyQn LAorCQkJCW5lc3RlZCBwYXRoICdzdHJpY3QgJFsqXScgYXMgcGIxIGNvbHVtbnMgKAorCQkJCQli MSBpbnQgcGF0aCAnJCcKKwkJCQkpCisJCQkpLAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmNb Kl0nIGFzIHBjIGNvbHVtbnMgKAorCQkJCWMgdGV4dCBmb3JtYXQganNvbiBwYXRoICckJywKKwkJ CQluZXN0ZWQgcGF0aCAnc3RyaWN0ICRbKl0nIGFzIHBjMSBjb2x1bW5zICgKKwkJCQkJYzEgaW50 IHBhdGggJyQnCisJCQkJKQorCQkJKQorCQkpCisJCS0tcGxhbiBkZWZhdWx0KG91dGVyLCBjcm9z cykKKwkJcGxhbihwIG91dGVyICgocGIgaW5uZXIgcGIxKSBjcm9zcyAocGMgb3V0ZXIgcGMxKSkp CisJKSBqdDsKKyBuIHwgYSAgfCAgICAgIGIgICAgICAgfCBiMSAgfCAgYyAgIHwgYzEgfCAgYiAg CistLS0rLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLSstLS0tLS0rLS0tLSstLS0tLQorIDEgfCAg MSB8IFsxLCAxMF0gICAgICB8ICAgMSB8IDEgICAgfCAgICB8IDEwMQorIDEgfCAgMSB8IFsxLCAx MF0gICAgICB8ICAgMSB8IG51bGwgfCAgICB8IDEwMQorIDEgfCAgMSB8IFsxLCAxMF0gICAgICB8 ICAgMSB8IDIgICAgfCAgICB8IDEwMQorIDEgfCAgMSB8IFsxLCAxMF0gICAgICB8ICAxMCB8IDEg ICAgfCAgICB8IDExMAorIDEgfCAgMSB8IFsxLCAxMF0gICAgICB8ICAxMCB8IG51bGwgfCAgICB8 IDExMAorIDEgfCAgMSB8IFsxLCAxMF0gICAgICB8ICAxMCB8IDIgICAgfCAgICB8IDExMAorIDEg fCAgMSB8IFsyXSAgICAgICAgICB8ICAgMiB8IDEgICAgfCAgICB8IDEwMgorIDEgfCAgMSB8IFsy XSAgICAgICAgICB8ICAgMiB8IG51bGwgfCAgICB8IDEwMgorIDEgfCAgMSB8IFsyXSAgICAgICAg ICB8ICAgMiB8IDIgICAgfCAgICB8IDEwMgorIDEgfCAgMSB8IFszLCAzMCwgMzAwXSB8ICAgMyB8 IDEgICAgfCAgICB8IDEwMworIDEgfCAgMSB8IFszLCAzMCwgMzAwXSB8ICAgMyB8IG51bGwgfCAg ICB8IDEwMworIDEgfCAgMSB8IFszLCAzMCwgMzAwXSB8ICAgMyB8IDIgICAgfCAgICB8IDEwMwor IDEgfCAgMSB8IFszLCAzMCwgMzAwXSB8ICAzMCB8IDEgICAgfCAgICB8IDEzMAorIDEgfCAgMSB8 IFszLCAzMCwgMzAwXSB8ICAzMCB8IG51bGwgfCAgICB8IDEzMAorIDEgfCAgMSB8IFszLCAzMCwg MzAwXSB8ICAzMCB8IDIgICAgfCAgICB8IDEzMAorIDEgfCAgMSB8IFszLCAzMCwgMzAwXSB8IDMw MCB8IDEgICAgfCAgICB8IDQwMAorIDEgfCAgMSB8IFszLCAzMCwgMzAwXSB8IDMwMCB8IG51bGwg fCAgICB8IDQwMAorIDEgfCAgMSB8IFszLCAzMCwgMzAwXSB8IDMwMCB8IDIgICAgfCAgICB8IDQw MAorIDIgfCAgMiB8ICAgICAgICAgICAgICB8ICAgICB8ICAgICAgfCAgICB8ICAgIAorIDMgfCAt MSB8ICAgICAgICAgICAgICB8ICAgICB8ICAgICAgfCAgICB8ICAgIAorKDIwIHJvd3MpCisKKy0t IFNob3VsZCBzdWNjZWVkIChKU09OIGFyZ3VtZW50cyBhcmUgcGFzc2VkIHRvIHJvb3QgYW5kIG5l c3RlZCBwYXRocykKK1NFTEVDVCAqCitGUk9NCisJZ2VuZXJhdGVfc2VyaWVzKDEsIDQpIHgsCisJ Z2VuZXJhdGVfc2VyaWVzKDEsIDMpIHksCisJSlNPTl9UQUJMRShqc29uYgorCQknW1sxLDIsM10s WzIsMyw0LDVdLFszLDQsNSw2XV0nLAorCQknc3RyaWN0ICRbKl0gPyAoQFsqXSA8ICR4KScKKwkJ UEFTU0lORyB4IEFTIHgsIHkgQVMgeQorCQlDT0xVTU5TICgKKwkJCXkgdGV4dCBGT1JNQVQgSlNP TiBQQVRIICckJywKKwkJCU5FU1RFRCBQQVRIICdzdHJpY3QgJFsqXSA/IChAID49ICR5KScKKwkJ CUNPTFVNTlMgKAorCQkJCXogaW50IFBBVEggJyQnCisJCQkpCisJCSkKKwkpIGp0OworIHggfCB5 IHwgICAgICB5ICAgICAgIHwgeiAKKy0tLSstLS0rLS0tLS0tLS0tLS0tLS0rLS0tCisgMiB8IDEg fCBbMSwgMiwgM10gICAgfCAxCisgMiB8IDEgfCBbMSwgMiwgM10gICAgfCAyCisgMiB8IDEgfCBb MSwgMiwgM10gICAgfCAzCisgMyB8IDEgfCBbMSwgMiwgM10gICAgfCAxCisgMyB8IDEgfCBbMSwg MiwgM10gICAgfCAyCisgMyB8IDEgfCBbMSwgMiwgM10gICAgfCAzCisgMyB8IDEgfCBbMiwgMywg NCwgNV0gfCAyCisgMyB8IDEgfCBbMiwgMywgNCwgNV0gfCAzCisgMyB8IDEgfCBbMiwgMywgNCwg NV0gfCA0CisgMyB8IDEgfCBbMiwgMywgNCwgNV0gfCA1CisgNCB8IDEgfCBbMSwgMiwgM10gICAg fCAxCisgNCB8IDEgfCBbMSwgMiwgM10gICAgfCAyCisgNCB8IDEgfCBbMSwgMiwgM10gICAgfCAz CisgNCB8IDEgfCBbMiwgMywgNCwgNV0gfCAyCisgNCB8IDEgfCBbMiwgMywgNCwgNV0gfCAzCisg NCB8IDEgfCBbMiwgMywgNCwgNV0gfCA0CisgNCB8IDEgfCBbMiwgMywgNCwgNV0gfCA1CisgNCB8 IDEgfCBbMywgNCwgNSwgNl0gfCAzCisgNCB8IDEgfCBbMywgNCwgNSwgNl0gfCA0CisgNCB8IDEg fCBbMywgNCwgNSwgNl0gfCA1CisgNCB8IDEgfCBbMywgNCwgNSwgNl0gfCA2CisgMiB8IDIgfCBb MSwgMiwgM10gICAgfCAyCisgMiB8IDIgfCBbMSwgMiwgM10gICAgfCAzCisgMyB8IDIgfCBbMSwg MiwgM10gICAgfCAyCisgMyB8IDIgfCBbMSwgMiwgM10gICAgfCAzCisgMyB8IDIgfCBbMiwgMywg NCwgNV0gfCAyCisgMyB8IDIgfCBbMiwgMywgNCwgNV0gfCAzCisgMyB8IDIgfCBbMiwgMywgNCwg NV0gfCA0CisgMyB8IDIgfCBbMiwgMywgNCwgNV0gfCA1CisgNCB8IDIgfCBbMSwgMiwgM10gICAg fCAyCisgNCB8IDIgfCBbMSwgMiwgM10gICAgfCAzCisgNCB8IDIgfCBbMiwgMywgNCwgNV0gfCAy CisgNCB8IDIgfCBbMiwgMywgNCwgNV0gfCAzCisgNCB8IDIgfCBbMiwgMywgNCwgNV0gfCA0Cisg NCB8IDIgfCBbMiwgMywgNCwgNV0gfCA1CisgNCB8IDIgfCBbMywgNCwgNSwgNl0gfCAzCisgNCB8 IDIgfCBbMywgNCwgNSwgNl0gfCA0CisgNCB8IDIgfCBbMywgNCwgNSwgNl0gfCA1CisgNCB8IDIg fCBbMywgNCwgNSwgNl0gfCA2CisgMiB8IDMgfCBbMSwgMiwgM10gICAgfCAzCisgMyB8IDMgfCBb MSwgMiwgM10gICAgfCAzCisgMyB8IDMgfCBbMiwgMywgNCwgNV0gfCAzCisgMyB8IDMgfCBbMiwg MywgNCwgNV0gfCA0CisgMyB8IDMgfCBbMiwgMywgNCwgNV0gfCA1CisgNCB8IDMgfCBbMSwgMiwg M10gICAgfCAzCisgNCB8IDMgfCBbMiwgMywgNCwgNV0gfCAzCisgNCB8IDMgfCBbMiwgMywgNCwg NV0gfCA0CisgNCB8IDMgfCBbMiwgMywgNCwgNV0gfCA1CisgNCB8IDMgfCBbMywgNCwgNSwgNl0g fCAzCisgNCB8IDMgfCBbMywgNCwgNSwgNl0gfCA0CisgNCB8IDMgfCBbMywgNCwgNSwgNl0gfCA1 CisgNCB8IDMgfCBbMywgNCwgNSwgNl0gfCA2CisoNTIgcm93cykKKworLS0gU2hvdWxkIGZhaWwg KEpTT04gYXJndW1lbnRzIGFyZSBub3QgcGFzc2VkIHRvIGNvbHVtbiBwYXRocykKK1NFTEVDVCAq CitGUk9NIEpTT05fVEFCTEUoCisJanNvbmIgJ1sxLDIsM10nLAorCSckWypdID8gKEAgPCAkeCkn CisJCVBBU1NJTkcgMTAgQVMgeAorCQlDT0xVTU5TICh5IHRleHQgRk9STUFUIEpTT04gUEFUSCAn JCA/IChAIDwgJHgpJykKKwkpIGp0OworRVJST1I6ICBjb3VsZCBub3QgZmluZCBqc29ucGF0aCB2 YXJpYWJsZSAieCIKKy0tIFNob3VsZCBmYWlsIChub3Qgc3VwcG9ydGVkKQorU0VMRUNUICogRlJP TSBKU09OX1RBQkxFKGpzb25iICd7ImEiOiAxMjN9JywgJyQnIHx8ICcuJyB8fCAnYScgQ09MVU1O UyAoZm9vIGludCkpOworRVJST1I6ICBvbmx5IHN0cmluZyBjb25zdGFudHMgYXJlIHN1cHBvcnRl ZCBpbiBKU09OX1RBQkxFIHBhdGggc3BlY2lmaWNhdGlvbgorTElORSAxOiBTRUxFQ1QgKiBGUk9N IEpTT05fVEFCTEUoanNvbmIgJ3siYSI6IDEyM30nLCAnJCcgfHwgJy4nIHx8ICcuLi4KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgpkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZSBiL3NyYy90ZXN0L3JlZ3Jl c3MvcGFyYWxsZWxfc2NoZWR1bGUKaW5kZXggOTEwZjZmZTNjOS4uZDhlMjViYmQyZSAxMDA2NDQK LS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZQorKysgYi9zcmMvdGVzdC9y ZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlCkBAIC0xMDMsNyArMTAzLDcgQEAgdGVzdDogc2VsZWN0 X3ZpZXdzIHBvcnRhbHNfcDIgZm9yZWlnbl9rZXkgY2x1c3RlciBkZXBlbmRlbmN5IGd1YyBiaXRt YXBvcHMgY29tYm8KICMgLS0tLS0tLS0tLQogIyBBbm90aGVyIGdyb3VwIG9mIHBhcmFsbGVsIHRl c3RzIChKU09OIHJlbGF0ZWQpCiAjIC0tLS0tLS0tLS0KLXRlc3Q6IGpzb24ganNvbmIganNvbl9l bmNvZGluZyBqc29ucGF0aCBqc29ucGF0aF9lbmNvZGluZyBqc29uYl9qc29ucGF0aCBzcWxqc29u IHNxbGpzb25fcXVlcnlmdW5jcwordGVzdDoganNvbiBqc29uYiBqc29uX2VuY29kaW5nIGpzb25w YXRoIGpzb25wYXRoX2VuY29kaW5nIGpzb25iX2pzb25wYXRoIHNxbGpzb24gc3FsanNvbl9xdWVy eWZ1bmNzIHNxbGpzb25fanNvbnRhYmxlCiAKICMgLS0tLS0tLS0tLQogIyBBbm90aGVyIGdyb3Vw IG9mIHBhcmFsbGVsIHRlc3RzCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zcWxq c29uX2pzb250YWJsZS5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zcWxqc29uX2pzb250YWJs ZS5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMmQ5YzJiOGIzMAot LS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3NxbGpzb25fanNvbnRhYmxl LnNxbApAQCAtMCwwICsxLDczNiBAQAorLS0gSlNPTl9UQUJMRQorCistLSBTaG91bGQgZmFpbCAo SlNPTl9UQUJMRSBjYW4gYmUgdXNlZCBvbmx5IGluIEZST00gY2xhdXNlKQorU0VMRUNUIEpTT05f VEFCTEUoJ1tdJywgJyQnKTsKKworLS0gU2hvdWxkIGZhaWwgKG5vIGNvbHVtbnMpCitTRUxFQ1Qg KiBGUk9NIEpTT05fVEFCTEUoTlVMTCwgJyQnIENPTFVNTlMgKCkpOworCitTRUxFQ1QgKiBGUk9N IEpTT05fVEFCTEUgKE5VTEw6Ompzb25iLCAnJCcgQ09MVU1OUyAodjEgdGltZXN0YW1wKSkgQVMg ZiAodjEsIHYyKTsKKworLS0gTlVMTCA9PiBlbXB0eSB0YWJsZQorU0VMRUNUICogRlJPTSBKU09O X1RBQkxFKE5VTEw6Ompzb25iLCAnJCcgQ09MVU1OUyAoZm9vIGludCkpIGJhcjsKKworLS0KK1NF TEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnMTIzJywgJyQnCisJQ09MVU1OUyAoaXRlbSBp bnQgUEFUSCAnJCcsIGZvbyBpbnQpKSBiYXI7CisKKy0tIEpTT05fVEFCTEU6IGJhc2ljIGZ1bmN0 aW9uYWxpdHkKK0NSRUFURSBET01BSU4ganNvbmJfdGVzdF9kb21haW4gQVMgdGV4dCBDSEVDSyAo dmFsdWUgPD4gJ2ZvbycpOworQ1JFQVRFIFRFTVAgVEFCTEUganNvbl90YWJsZV90ZXN0IChqcykg QVMKKwkoVkFMVUVTCisJCSgnMScpLAorCQkoJ1tdJyksCisJCSgne30nKSwKKwkJKCdbMSwgMS4y MywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9 LCAiWzEsMl0iLCAiXCJzdHJcIiJdJykKKwkpOworCistLSBSZWd1bGFyICJ1bmZvcm1hdHRlZCIg Y29sdW1ucworU0VMRUNUICoKK0ZST00ganNvbl90YWJsZV90ZXN0IHZhbHMKKwlMRUZUIE9VVEVS IEpPSU4KKwlKU09OX1RBQkxFKAorCQl2YWxzLmpzOjpqc29uYiwgJ2xheCAkWypdJworCQlDT0xV TU5TICgKKwkJCWlkIEZPUiBPUkRJTkFMSVRZLAorCQkJImludCIgaW50IFBBVEggJyQnLAorCQkJ InRleHQiIHRleHQgUEFUSCAnJCcsCisJCQkiY2hhcig0KSIgY2hhcig0KSBQQVRIICckJywKKwkJ CSJib29sIiBib29sIFBBVEggJyQnLAorCQkJIm51bWVyaWMiIG51bWVyaWMgUEFUSCAnJCcsCisJ CQkiZG9tYWluIiBqc29uYl90ZXN0X2RvbWFpbiBQQVRIICckJywKKwkJCWpzIGpzb24gUEFUSCAn JCcsCisJCQlqYiBqc29uYiBQQVRIICckJworCQkpCisJKSBqdAorCU9OIHRydWU7CisKKy0tICJm b3JtYXR0ZWQiIGNvbHVtbnMKK1NFTEVDVCAqCitGUk9NIGpzb25fdGFibGVfdGVzdCB2YWxzCisJ TEVGVCBPVVRFUiBKT0lOCisJSlNPTl9UQUJMRSgKKwkJdmFscy5qczo6anNvbmIsICdsYXggJFsq XScKKwkJQ09MVU1OUyAoCisJCQlpZCBGT1IgT1JESU5BTElUWSwKKwkJCWpzdCB0ZXh0ICAgIEZP Uk1BVCBKU09OICBQQVRIICckJywKKwkJCWpzYyBjaGFyKDQpIEZPUk1BVCBKU09OICBQQVRIICck JywKKwkJCWpzdiB2YXJjaGFyKDQpIEZPUk1BVCBKU09OICBQQVRIICckJywKKwkJCWpzYiBqc29u YiBGT1JNQVQgSlNPTiBQQVRIICckJywKKwkJCWpzYnEganNvbmIgRk9STUFUIEpTT04gUEFUSCAn JCcgT01JVCBRVU9URVMKKwkJKQorCSkganQKKwlPTiB0cnVlOworCistLSBFWElTVFMgY29sdW1u cworU0VMRUNUICoKK0ZST00ganNvbl90YWJsZV90ZXN0IHZhbHMKKwlMRUZUIE9VVEVSIEpPSU4K KwlKU09OX1RBQkxFKAorCQl2YWxzLmpzOjpqc29uYiwgJ2xheCAkWypdJworCQlDT0xVTU5TICgK KwkJCWlkIEZPUiBPUkRJTkFMSVRZLAorCQkJZXhpc3RzMSBib29sIEVYSVNUUyBQQVRIICckLmFh YScsCisJCQlleGlzdHMyIGludCBFWElTVFMgUEFUSCAnJC5hYWEnLAorCQkJZXhpc3RzMyBpbnQg RVhJU1RTIFBBVEggJ3N0cmljdCAkLmFhYScgVU5LTk9XTiBPTiBFUlJPUiwKKwkJCWV4aXN0czQg dGV4dCBFWElTVFMgUEFUSCAnc3RyaWN0ICQuYWFhJyBGQUxTRSBPTiBFUlJPUgorCQkpCisJKSBq dAorCU9OIHRydWU7CisKKy0tIE90aGVyIG1pc2NlbGxhbm91cyBjaGVja3MKK1NFTEVDVCAqCitG Uk9NIGpzb25fdGFibGVfdGVzdCB2YWxzCisJTEVGVCBPVVRFUiBKT0lOCisJSlNPTl9UQUJMRSgK KwkJdmFscy5qczo6anNvbmIsICdsYXggJFsqXScKKwkJQ09MVU1OUyAoCisJCQlpZCBGT1IgT1JE SU5BTElUWSwKKwkJCWFhYSBpbnQsIC0tICJhYWEiIGhhcyBpbXBsaWNpdCBwYXRoICckLiJhYWEi JworCQkJYWFhMSBpbnQgUEFUSCAnJC5hYWEnLAorCQkJanMyIGpzb24gUEFUSCAnJCcsCisJCQlq c2IydyBqc29uYiBQQVRIICckJyBXSVRIIFdSQVBQRVIsCisJCQlqc2IycSBqc29uYiBQQVRIICck JyBPTUlUIFFVT1RFUywKKwkJCWlhIGludFtdIFBBVEggJyQnLAorCQkJdGEgdGV4dFtdIFBBVEgg JyQnLAorCQkJamJhIGpzb25iW10gUEFUSCAnJCcKKwkJKQorCSkganQKKwlPTiB0cnVlOworCist LSBKU09OX1RBQkxFOiBUZXN0IGJhY2t3YXJkIHBhcnNpbmcKKworQ1JFQVRFIFZJRVcganNvbmJf dGFibGVfdmlldzEgQVMKK1NFTEVDVCAqIEZST00KKwlKU09OX1RBQkxFKAorCQlqc29uYiAnbnVs bCcsICdsYXggJFsqXScgUEFTU0lORyAxICsgMiBBUyBhLCBqc29uICciZm9vIicgQVMgImIgYyIK KwkJQ09MVU1OUyAoCisJCQlpZCBGT1IgT1JESU5BTElUWSwKKwkJCU5FU1RFRCBQQVRIICckWzFd JyBBUyBwMSBDT0xVTU5TICgKKwkJCQlhMSBpbnQsCisJCQkJTkVTVEVEIFBBVEggJyRbKl0nIEFT ICJwMSAxIiBDT0xVTU5TICgKKwkJCQkJYTExIHRleHQKKwkJCQkpLAorCQkJCWIxIHRleHQKKwkJ CSksCisJCQlORVNURUQgUEFUSCAnJFsyXScgQVMgcDIgQ09MVU1OUyAoCisJCQkJTkVTVEVEIFBB VEggJyRbKl0nIEFTICJwMjoxIiBDT0xVTU5TICgKKwkJCQkJYTIxIHRleHQKKwkJCQkpLAorCQkJ CU5FU1RFRCBQQVRIICckWypdJyBBUyBwMjIgQ09MVU1OUyAoCisJCQkJCWEyMiB0ZXh0CisJCQkJ KQorCQkJKQorCQkpCisJKTsKKworQ1JFQVRFIFZJRVcganNvbmJfdGFibGVfdmlldzIgQVMKK1NF TEVDVCAqIEZST00KKwlKU09OX1RBQkxFKAorCQlqc29uYiAnbnVsbCcsICdsYXggJFsqXScgUEFT U0lORyAxICsgMiBBUyBhLCBqc29uICciZm9vIicgQVMgImIgYyIKKwkJQ09MVU1OUyAoCisJCQki aW50IiBpbnQgUEFUSCAnJCcsCisJCQkidGV4dCIgdGV4dCBQQVRIICckJywKKwkJCSJjaGFyKDQp IiBjaGFyKDQpIFBBVEggJyQnLAorCQkJImJvb2wiIGJvb2wgUEFUSCAnJCcsCisJCQkibnVtZXJp YyIgbnVtZXJpYyBQQVRIICckJywKKwkJCSJkb21haW4iIGpzb25iX3Rlc3RfZG9tYWluIFBBVEgg JyQnKSk7CisKK0NSRUFURSBWSUVXIGpzb25iX3RhYmxlX3ZpZXczIEFTCitTRUxFQ1QgKiBGUk9N CisJSlNPTl9UQUJMRSgKKwkJanNvbmIgJ251bGwnLCAnbGF4ICRbKl0nIFBBU1NJTkcgMSArIDIg QVMgYSwganNvbiAnImZvbyInIEFTICJiIGMiCisJCUNPTFVNTlMgKAorCQkJanMganNvbiBQQVRI ICckJywKKwkJCWpiIGpzb25iIFBBVEggJyQnLAorCQkJanN0IHRleHQgICAgRk9STUFUIEpTT04g IFBBVEggJyQnLAorCQkJanNjIGNoYXIoNCkgRk9STUFUIEpTT04gIFBBVEggJyQnLAorCQkJanN2 IHZhcmNoYXIoNCkgRk9STUFUIEpTT04gIFBBVEggJyQnKSk7CisKK0NSRUFURSBWSUVXIGpzb25i X3RhYmxlX3ZpZXc0IEFTCitTRUxFQ1QgKiBGUk9NCisJSlNPTl9UQUJMRSgKKwkJanNvbmIgJ251 bGwnLCAnbGF4ICRbKl0nIFBBU1NJTkcgMSArIDIgQVMgYSwganNvbiAnImZvbyInIEFTICJiIGMi CisJCUNPTFVNTlMgKAorICAgICAgICAgICAganNiIGpzb25iICAgRk9STUFUIEpTT04gUEFUSCAn JCcsCisgICAgICAgICAgICBqc2JxIGpzb25iIEZPUk1BVCBKU09OIFBBVEggJyQnIE9NSVQgUVVP VEVTLAorICAgICAgICAgICAgYWFhIGludCwgLS0gaW1wbGljaXQgcGF0aCAnJC4iYWFhIicsCisg ICAgICAgICAgICBhYWExIGludCBQQVRIICckLmFhYScpKTsKKworQ1JFQVRFIFZJRVcganNvbmJf dGFibGVfdmlldzUgQVMKK1NFTEVDVCAqIEZST00KKwlKU09OX1RBQkxFKAorCQlqc29uYiAnbnVs bCcsICdsYXggJFsqXScgUEFTU0lORyAxICsgMiBBUyBhLCBqc29uICciZm9vIicgQVMgImIgYyIK KwkJQ09MVU1OUyAoCisJCQlleGlzdHMxIGJvb2wgRVhJU1RTIFBBVEggJyQuYWFhJywKKwkJCWV4 aXN0czIgaW50IEVYSVNUUyBQQVRIICckLmFhYScgVFJVRSBPTiBFUlJPUiwKKwkJCWV4aXN0czMg dGV4dCBFWElTVFMgUEFUSCAnc3RyaWN0ICQuYWFhJyBVTktOT1dOIE9OIEVSUk9SKSk7CisKK0NS RUFURSBWSUVXIGpzb25iX3RhYmxlX3ZpZXc2IEFTCitTRUxFQ1QgKiBGUk9NCisJSlNPTl9UQUJM RSgKKwkJanNvbmIgJ251bGwnLCAnbGF4ICRbKl0nIFBBU1NJTkcgMSArIDIgQVMgYSwganNvbiAn ImZvbyInIEFTICJiIGMiCisJCUNPTFVNTlMgKAorCQkJanMyIGpzb24gUEFUSCAnJCcsCisJCQlq c2IydyBqc29uYiBQQVRIICckJyBXSVRIIFdSQVBQRVIsCisJCQlqc2IycSBqc29uYiBQQVRIICck JyBPTUlUIFFVT1RFUywKKwkJCWlhIGludFtdIFBBVEggJyQnLAorCQkJdGEgdGV4dFtdIFBBVEgg JyQnLAorCQkJamJhIGpzb25iW10gUEFUSCAnJCcpKTsKKworXHN2IGpzb25iX3RhYmxlX3ZpZXcx Citcc3YganNvbmJfdGFibGVfdmlldzIKK1xzdiBqc29uYl90YWJsZV92aWV3MworXHN2IGpzb25i X3RhYmxlX3ZpZXc0Citcc3YganNvbmJfdGFibGVfdmlldzUKK1xzdiBqc29uYl90YWJsZV92aWV3 NgorCitFWFBMQUlOIChDT1NUUyBPRkYsIFZFUkJPU0UpIFNFTEVDVCAqIEZST00ganNvbmJfdGFi bGVfdmlldzE7CitFWFBMQUlOIChDT1NUUyBPRkYsIFZFUkJPU0UpIFNFTEVDVCAqIEZST00ganNv bmJfdGFibGVfdmlldzI7CitFWFBMQUlOIChDT1NUUyBPRkYsIFZFUkJPU0UpIFNFTEVDVCAqIEZS T00ganNvbmJfdGFibGVfdmlldzM7CitFWFBMQUlOIChDT1NUUyBPRkYsIFZFUkJPU0UpIFNFTEVD VCAqIEZST00ganNvbmJfdGFibGVfdmlldzQ7CitFWFBMQUlOIChDT1NUUyBPRkYsIFZFUkJPU0Up IFNFTEVDVCAqIEZST00ganNvbmJfdGFibGVfdmlldzU7CitFWFBMQUlOIChDT1NUUyBPRkYsIFZF UkJPU0UpIFNFTEVDVCAqIEZST00ganNvbmJfdGFibGVfdmlldzY7CisKKy0tIEpTT05fVEFCTEUo KSB3aXRoIGFsaWFzCitFWFBMQUlOIChDT1NUUyBPRkYsIFZFUkJPU0UpCitTRUxFQ1QgKiBGUk9N CisJSlNPTl9UQUJMRSgKKwkJanNvbmIgJ251bGwnLCAnbGF4ICRbKl0nIFBBU1NJTkcgMSArIDIg QVMgYSwganNvbiAnImZvbyInIEFTICJiIGMiCisJCUNPTFVNTlMgKAorCQkJaWQgRk9SIE9SRElO QUxJVFksCisJCQkiaW50IiBpbnQgUEFUSCAnJCcsCisJCQkidGV4dCIgdGV4dCBQQVRIICckJwor CSkpIGpzb25fdGFibGVfZnVuYzsKKworRVhQTEFJTiAoQ09TVFMgT0ZGLCBGT1JNQVQgSlNPTiwg VkVSQk9TRSkKK1NFTEVDVCAqIEZST00KKwlKU09OX1RBQkxFKAorCQlqc29uYiAnbnVsbCcsICds YXggJFsqXScgUEFTU0lORyAxICsgMiBBUyBhLCBqc29uICciZm9vIicgQVMgImIgYyIKKwkJQ09M VU1OUyAoCisJCQlpZCBGT1IgT1JESU5BTElUWSwKKwkJCSJpbnQiIGludCBQQVRIICckJywKKwkJ CSJ0ZXh0IiB0ZXh0IFBBVEggJyQnCisJKSkganNvbl90YWJsZV9mdW5jOworCitEUk9QIFZJRVcg anNvbmJfdGFibGVfdmlldzE7CitEUk9QIFZJRVcganNvbmJfdGFibGVfdmlldzI7CitEUk9QIFZJ RVcganNvbmJfdGFibGVfdmlldzM7CitEUk9QIFZJRVcganNvbmJfdGFibGVfdmlldzQ7CitEUk9Q IFZJRVcganNvbmJfdGFibGVfdmlldzU7CitEUk9QIFZJRVcganNvbmJfdGFibGVfdmlldzY7CitE Uk9QIERPTUFJTiBqc29uYl90ZXN0X2RvbWFpbjsKKworLS0gSlNPTl9UQUJMRTogb25seSBvbmUg Rk9SIE9SRElOQUxJVFkgY29sdW1ucyBhbGxvd2VkCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUo anNvbmIgJzEnLCAnJCcgQ09MVU1OUyAoaWQgRk9SIE9SRElOQUxJVFksIGlkMiBGT1IgT1JESU5B TElUWSwgYSBpbnQgUEFUSCAnJC5hJyBFUlJPUiBPTiBFTVBUWSkpIGp0OworU0VMRUNUICogRlJP TSBKU09OX1RBQkxFKGpzb25iICcxJywgJyQnIENPTFVNTlMgKGlkIEZPUiBPUkRJTkFMSVRZLCBh IGludCBQQVRIICckJyBFUlJPUiBPTiBFTVBUWSkpIGp0OworCistLSBKU09OX1RBQkxFOiBPTiBF TVBUWS9PTiBFUlJPUiBiZWhhdmlvcgorU0VMRUNUICoKK0ZST00KKwkoVkFMVUVTICgnMScpLCAo JyJlcnIiJykpIHZhbHMoanMpLAorCUpTT05fVEFCTEUodmFscy5qczo6anNvbmIsICckJyBDT0xV TU5TIChhIGludCBQQVRIICckJykpIGp0OworCitTRUxFQ1QgKgorRlJPTQorCShWQUxVRVMgKCcx JyksICgnImVyciInKSkgdmFscyhqcykKKwkJTEVGVCBPVVRFUiBKT0lOCisJSlNPTl9UQUJMRSh2 YWxzLmpzOjpqc29uYiwgJyQnIENPTFVNTlMgKGEgaW50IFBBVEggJyQnKSBFUlJPUiBPTiBFUlJP UikganQKKwkJT04gdHJ1ZTsKKworU0VMRUNUICoKK0ZST00KKwkoVkFMVUVTICgnMScpLCAoJyJl cnIiJykpIHZhbHMoanMpCisJCUxFRlQgT1VURVIgSk9JTgorCUpTT05fVEFCTEUodmFscy5qczo6 anNvbmIsICckJyBDT0xVTU5TIChhIGludCBQQVRIICckJyBFUlJPUiBPTiBFUlJPUikpIGp0CisJ CU9OIHRydWU7CisKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnMScsICckJyBDT0xV TU5TIChhIGludCBQQVRIICckLmEnIEVSUk9SIE9OIEVNUFRZKSkganQ7CitTRUxFQ1QgKiBGUk9N IEpTT05fVEFCTEUoanNvbmIgJzEnLCAnJCcgQ09MVU1OUyAoYSBpbnQgUEFUSCAnc3RyaWN0ICQu YScgRVJST1IgT04gRU1QVFkpIEVSUk9SIE9OIEVSUk9SKSBqdDsKK1NFTEVDVCAqIEZST00gSlNP Tl9UQUJMRShqc29uYiAnMScsICckJyBDT0xVTU5TIChhIGludCBQQVRIICdsYXggJC5hJyBFUlJP UiBPTiBFTVBUWSkgRVJST1IgT04gRVJST1IpIGp0OworCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFC TEUoanNvbmIgJyJhIicsICckJyBDT0xVTU5TIChhIGludCBQQVRIICckJyAgIERFRkFVTFQgMSBP TiBFTVBUWSBERUZBVUxUIDIgT04gRVJST1IpKSBqdDsKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJM RShqc29uYiAnImEiJywgJyQnIENPTFVNTlMgKGEgaW50IFBBVEggJ3N0cmljdCAkLmEnIERFRkFV TFQgMSBPTiBFTVBUWSBERUZBVUxUIDIgT04gRVJST1IpKSBqdDsKK1NFTEVDVCAqIEZST00gSlNP Tl9UQUJMRShqc29uYiAnImEiJywgJyQnIENPTFVNTlMgKGEgaW50IFBBVEggJ2xheCAkLmEnIERF RkFVTFQgMSBPTiBFTVBUWSBERUZBVUxUIDIgT04gRVJST1IpKSBqdDsKKworLS0gSlNPTl9UQUJM RTogRVhJU1RTIFBBVEggdHlwZXMKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnImEi JywgJyQnIENPTFVNTlMgKGEgaW50NCBFWElTVFMgUEFUSCAnJC5hJykpOworU0VMRUNUICogRlJP TSBKU09OX1RBQkxFKGpzb25iICciYSInLCAnJCcgQ09MVU1OUyAoYSBpbnQyIEVYSVNUUyBQQVRI ICckLmEnKSk7CitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJhIicsICckJyBDT0xV TU5TIChhIGludDggRVhJU1RTIFBBVEggJyQuYScpKTsKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJM RShqc29uYiAnImEiJywgJyQnIENPTFVNTlMgKGEgZmxvYXQ0IEVYSVNUUyBQQVRIICckLmEnKSk7 CitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJhIicsICckJyBDT0xVTU5TIChhIGNo YXIoMykgRVhJU1RTIFBBVEggJyQuYScpKTsKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29u YiAnImEiJywgJyQnIENPTFVNTlMgKGEganNvbiBFWElTVFMgUEFUSCAnJC5hJykpOworU0VMRUNU ICogRlJPTSBKU09OX1RBQkxFKGpzb25iICciYSInLCAnJCcgQ09MVU1OUyAoYSBqc29uYiBFWElT VFMgUEFUSCAnJC5hJykpOworCistLSBKU09OX1RBQkxFOiBXUkFQUEVSL1FVT1RFUyBjbGF1c2Vz IG9uIHNjYWxhciBjb2x1bW5zCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJ3b3Js ZCInLCAnJCcgQ09MVU1OUyAoaXRlbSB0ZXh0IFBBVEggJyQnIEtFRVAgUVVPVEVTIE9OIFNDQUxB UiBTVFJJTkcpKTsKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnIndvcmxkIicsICck JyBDT0xVTU5TIChpdGVtIHRleHQgUEFUSCAnJCcgT01JVCBRVU9URVMgT04gU0NBTEFSIFNUUklO RykpOworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICcid29ybGQiJywgJyQnIENPTFVN TlMgKGl0ZW0gdGV4dCBGT1JNQVQgSlNPTiBQQVRIICckJyBLRUVQIFFVT1RFUykpOworU0VMRUNU ICogRlJPTSBKU09OX1RBQkxFKGpzb25iICcid29ybGQiJywgJyQnIENPTFVNTlMgKGl0ZW0gdGV4 dCBGT1JNQVQgSlNPTiBQQVRIICckJyBPTUlUIFFVT1RFUykpOworU0VMRUNUICogRlJPTSBKU09O X1RBQkxFKGpzb25iICcid29ybGQiJywgJyQnIENPTFVNTlMgKGl0ZW0gdGV4dCBGT1JNQVQgSlNP TiBQQVRIICckJyBXSVRIT1VUIFdSQVBQRVIgS0VFUCBRVU9URVMpKTsKK1NFTEVDVCAqIEZST00g SlNPTl9UQUJMRShqc29uYiAnIndvcmxkIicsICckJyBDT0xVTU5TIChpdGVtIHRleHQgUEFUSCAn JCcgV0lUSE9VVCBXUkFQUEVSIE9NSVQgUVVPVEVTKSk7CisKK1NFTEVDVCAqIEZST00gSlNPTl9U QUJMRShqc29uYiAnIndvcmxkIicsICckJyBDT0xVTU5TIChpdGVtIHRleHQgRk9STUFUIEpTT04g UEFUSCAnJCcgV0lUSCBXUkFQUEVSKSk7CisKKy0tIEVycm9yOiBRVU9URVMgY2xhdXNlIG1lYW5p bmdsZXNzIHdoZW4gV0lUSCBXUkFQUEVSIGlzIHByZXNlbnQKK1NFTEVDVCAqIEZST00gSlNPTl9U QUJMRShqc29uYiAnIndvcmxkIicsICckJyBDT0xVTU5TIChpdGVtIHRleHQgRk9STUFUIEpTT04g UEFUSCAnJCcgV0lUSCBXUkFQUEVSIEtFRVAgUVVPVEVTKSk7CitTRUxFQ1QgKiBGUk9NIEpTT05f VEFCTEUoanNvbmIgJyJ3b3JsZCInLCAnJCcgQ09MVU1OUyAoaXRlbSB0ZXh0IFBBVEggJyQnIFdJ VEggV1JBUFBFUiBPTUlUIFFVT1RFUykpOworCistLSBKU09OX1RBQkxFOiBuZXN0ZWQgcGF0aHMg YW5kIHBsYW5zCisKKy0tIFNob3VsZCBmYWlsIChKU09OX1RBQkxFIGNvbHVtbnMgbXVzdCBjb250 YWluIGV4cGxpY2l0IEFTIHBhdGgKKy0tIHNwZWNpZmljYXRpb25zIGlmIGV4cGxpY2l0IFBMQU4g Y2xhdXNlIGlzIHVzZWQpCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoCisJanNvbmIgJ1tdJywg JyQnIC0tIEFTIDxwYXRoIG5hbWU+IHJlcXVpcmVkIGhlcmUKKwlDT0xVTU5TICgKKwkJZm9vIGlu dCBQQVRIICckJworCSkKKwlQTEFOIERFRkFVTFQgKFVOSU9OKQorKSBqdDsKKworU0VMRUNUICog RlJPTSBKU09OX1RBQkxFKAorCWpzb25iICdbXScsICckJyBBUyBwYXRoMQorCUNPTFVNTlMgKAor CQlORVNURUQgUEFUSCAnJCcgQ09MVU1OUyAoIC0tIEFTIDxwYXRoIG5hbWU+IHJlcXVpcmVkIGhl cmUKKwkJCWZvbyBpbnQgUEFUSCAnJCcKKwkJKQorCSkKKwlQTEFOIERFRkFVTFQgKFVOSU9OKQor KSBqdDsKKworLS0gU2hvdWxkIGZhaWwgKGNvbHVtbiBuYW1lcyBtdXN0IGJlIGRpc3RpbmN0KQor U0VMRUNUICogRlJPTSBKU09OX1RBQkxFKAorCWpzb25iICdbXScsICckJyBBUyBhCisJQ09MVU1O UyAoCisJCWEgaW50CisJKQorKSBqdDsKKworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKAorCWpz b25iICdbXScsICckJyBBUyBhCisJQ09MVU1OUyAoCisJCWIgaW50LAorCQlORVNURUQgUEFUSCAn JCcgQVMgYQorCQlDT0xVTU5TICgKKwkJCWMgaW50CisJCSkKKwkpCispIGp0OworCitTRUxFQ1Qg KiBGUk9NIEpTT05fVEFCTEUoCisJanNvbmIgJ1tdJywgJyQnCisJQ09MVU1OUyAoCisJCWIgaW50 LAorCQlORVNURUQgUEFUSCAnJCcgQVMgYgorCQlDT0xVTU5TICgKKwkJCWMgaW50CisJCSkKKwkp CispIGp0OworCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoCisJanNvbmIgJ1tdJywgJyQnCisJ Q09MVU1OUyAoCisJCU5FU1RFRCBQQVRIICckJyBBUyBhCisJCUNPTFVNTlMgKAorCQkJYiBpbnQK KwkJKSwKKwkJTkVTVEVEIFBBVEggJyQnCisJCUNPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQn IEFTIGEKKwkJCUNPTFVNTlMgKAorCQkJCWMgaW50CisJCQkpCisJCSkKKwkpCispIGp0OworCist LSBKU09OX1RBQkxFOiBwbGFuIHZhbGlkYXRpb24KKworU0VMRUNUICogRlJPTSBKU09OX1RBQkxF KAorCWpzb25iICdudWxsJywgJyRbKl0nIEFTIHAwCisJQ09MVU1OUyAoCisJCU5FU1RFRCAnJCcg QVMgcDEgQ09MVU1OUyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDExIENPTFVNTlMgKCBmb28g aW50ICksCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDEyIENPTFVNTlMgKCBiYXIgaW50ICkKKwkJ KSwKKwkJTkVTVEVEIFBBVEggJyQnIEFTIHAyIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQn IEFTIHAyMSBDT0xVTU5TICggYmF6IGludCApCisJCSkKKwkpCisJUExBTiAocDEpCispIGp0Owor CitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoCisJanNvbmIgJ251bGwnLCAnJFsqXScgQVMgcDAK KwlDT0xVTU5TICgKKwkJTkVTVEVEIFBBVEggJyQnIEFTIHAxIENPTFVNTlMgKAorCQkJTkVTVEVE IFBBVEggJyQnIEFTIHAxMSBDT0xVTU5TICggZm9vIGludCApLAorCQkJTkVTVEVEIFBBVEggJyQn IEFTIHAxMiBDT0xVTU5TICggYmFyIGludCApCisJCSksCisJCU5FU1RFRCBQQVRIICckJyBBUyBw MiBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMjEgQ09MVU1OUyAoIGJheiBpbnQg KQorCQkpCisJKQorCVBMQU4gKHAwKQorKSBqdDsKKworU0VMRUNUICogRlJPTSBKU09OX1RBQkxF KAorCWpzb25iICdudWxsJywgJyRbKl0nIEFTIHAwCisJQ09MVU1OUyAoCisJCU5FU1RFRCBQQVRI ICckJyBBUyBwMSBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTEgQ09MVU1OUyAo IGZvbyBpbnQgKSwKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTIgQ09MVU1OUyAoIGJhciBpbnQg KQorCQkpLAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDIgQ09MVU1OUyAoCisJCQlORVNURUQgUEFU SCAnJCcgQVMgcDIxIENPTFVNTlMgKCBiYXogaW50ICkKKwkJKQorCSkKKwlQTEFOIChwMCBPVVRF UiBwMykKKykganQ7CisKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRSgKKwlqc29uYiAnbnVsbCcs ICckWypdJyBBUyBwMAorCUNPTFVNTlMgKAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDEgQ09MVU1O UyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDExIENPTFVNTlMgKCBmb28gaW50ICksCisJCQlO RVNURUQgUEFUSCAnJCcgQVMgcDEyIENPTFVNTlMgKCBiYXIgaW50ICkKKwkJKSwKKwkJTkVTVEVE IFBBVEggJyQnIEFTIHAyIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAyMSBDT0xV TU5TICggYmF6IGludCApCisJCSkKKwkpCisJUExBTiAocDAgVU5JT04gcDEgVU5JT04gcDExKQor KSBqdDsKKworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKAorCWpzb25iICdudWxsJywgJyRbKl0n IEFTIHAwCisJQ09MVU1OUyAoCisJCU5FU1RFRCBQQVRIICckJyBBUyBwMSBDT0xVTU5TICgKKwkJ CU5FU1RFRCBQQVRIICckJyBBUyBwMTEgQ09MVU1OUyAoIGZvbyBpbnQgKSwKKwkJCU5FU1RFRCBQ QVRIICckJyBBUyBwMTIgQ09MVU1OUyAoIGJhciBpbnQgKQorCQkpLAorCQlORVNURUQgUEFUSCAn JCcgQVMgcDIgQ09MVU1OUyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDIxIENPTFVNTlMgKCBi YXogaW50ICkKKwkJKQorCSkKKwlQTEFOIChwMCBPVVRFUiAocDEgQ1JPU1MgcDEzKSkKKykganQ7 CisKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRSgKKwlqc29uYiAnbnVsbCcsICckWypdJyBBUyBw MAorCUNPTFVNTlMgKAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDEgQ09MVU1OUyAoCisJCQlORVNU RUQgUEFUSCAnJCcgQVMgcDExIENPTFVNTlMgKCBmb28gaW50ICksCisJCQlORVNURUQgUEFUSCAn JCcgQVMgcDEyIENPTFVNTlMgKCBiYXIgaW50ICkKKwkJKSwKKwkJTkVTVEVEIFBBVEggJyQnIEFT IHAyIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAyMSBDT0xVTU5TICggYmF6IGlu dCApCisJCSkKKwkpCisJUExBTiAocDAgT1VURVIgKHAxIENST1NTIHAyKSkKKykganQ7CisKK1NF TEVDVCAqIEZST00gSlNPTl9UQUJMRSgKKwlqc29uYiAnbnVsbCcsICckWypdJyBBUyBwMAorCUNP TFVNTlMgKAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDEgQ09MVU1OUyAoCisJCQlORVNURUQgUEFU SCAnJCcgQVMgcDExIENPTFVNTlMgKCBmb28gaW50ICksCisJCQlORVNURUQgUEFUSCAnJCcgQVMg cDEyIENPTFVNTlMgKCBiYXIgaW50ICkKKwkJKSwKKwkJTkVTVEVEIFBBVEggJyQnIEFTIHAyIENP TFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAyMSBDT0xVTU5TICggYmF6IGludCApCisJ CSkKKwkpCisJUExBTiAocDAgT1VURVIgKChwMSBVTklPTiBwMTEpIENST1NTIHAyKSkKKykganQ7 CisKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRSgKKwlqc29uYiAnbnVsbCcsICckWypdJyBBUyBw MAorCUNPTFVNTlMgKAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDEgQ09MVU1OUyAoCisJCQlORVNU RUQgUEFUSCAnJCcgQVMgcDExIENPTFVNTlMgKCBmb28gaW50ICksCisJCQlORVNURUQgUEFUSCAn JCcgQVMgcDEyIENPTFVNTlMgKCBiYXIgaW50ICkKKwkJKSwKKwkJTkVTVEVEIFBBVEggJyQnIEFT IHAyIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAyMSBDT0xVTU5TICggYmF6IGlu dCApCisJCSkKKwkpCisJUExBTiAocDAgT1VURVIgKChwMSBJTk5FUiBwMTEpIENST1NTIHAyKSkK KykganQ7CisKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRSgKKwlqc29uYiAnbnVsbCcsICckWypd JyBBUyBwMAorCUNPTFVNTlMgKAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDEgQ09MVU1OUyAoCisJ CQlORVNURUQgUEFUSCAnJCcgQVMgcDExIENPTFVNTlMgKCBmb28gaW50ICksCisJCQlORVNURUQg UEFUSCAnJCcgQVMgcDEyIENPTFVNTlMgKCBiYXIgaW50ICkKKwkJKSwKKwkJTkVTVEVEIFBBVEgg JyQnIEFTIHAyIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAyMSBDT0xVTU5TICgg YmF6IGludCApCisJCSkKKwkpCisJUExBTiAocDAgT1VURVIgKChwMSBJTk5FUiAocDEyIENST1NT IHAxMSkpIENST1NTIHAyKSkKKykganQ7CisKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRSgKKwlq c29uYiAnbnVsbCcsICdzdHJpY3QgJFsqXScgQVMgcDAKKwlDT0xVTU5TICgKKwkJTkVTVEVEIFBB VEggJyQnIEFTIHAxIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAxMSBDT0xVTU5T ICggZm9vIGludCApLAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAxMiBDT0xVTU5TICggYmFyIGlu dCApCisJCSksCisJCU5FU1RFRCBQQVRIICckJyBBUyBwMiBDT0xVTU5TICgKKwkJCU5FU1RFRCBQ QVRIICckJyBBUyBwMjEgQ09MVU1OUyAoIGJheiBpbnQgKQorCQkpCisJKQorCVBMQU4gKHAwIE9V VEVSICgocDEgSU5ORVIgKHAxMiBDUk9TUyBwMTEpKSBDUk9TUyAocDIgSU5ORVIgcDIxKSkpCisp IGp0OworCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoCisJanNvbmIgJ251bGwnLCAnc3RyaWN0 ICRbKl0nIC0tIHdpdGhvdXQgcm9vdCBwYXRoIG5hbWUKKwlDT0xVTU5TICgKKwkJTkVTVEVEIFBB VEggJyQnIEFTIHAxIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAxMSBDT0xVTU5T ICggZm9vIGludCApLAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAxMiBDT0xVTU5TICggYmFyIGlu dCApCisJCSksCisJCU5FU1RFRCBQQVRIICckJyBBUyBwMiBDT0xVTU5TICgKKwkJCU5FU1RFRCBQ QVRIICckJyBBUyBwMjEgQ09MVU1OUyAoIGJheiBpbnQgKQorCQkpCisJKQorCVBMQU4gKChwMSBJ Tk5FUiAocDEyIENST1NTIHAxMSkpIENST1NTIChwMiBJTk5FUiBwMjEpKQorKSBqdDsKKworLS0g SlNPTl9UQUJMRTogcGxhbiBleGVjdXRpb24KKworQ1JFQVRFIFRFTVAgVEFCTEUganNvbmJfdGFi bGVfdGVzdCAoanMganNvbmIpOworCitJTlNFUlQgSU5UTyBqc29uYl90YWJsZV90ZXN0CitWQUxV RVMgKAorCSdbCisJCXsiYSI6ICAxLCAgImIiOiBbXSwgImMiOiBbXX0sCisJCXsiYSI6ICAyLCAg ImIiOiBbMSwgMiwgM10sICJjIjogWzEwLCBudWxsLCAyMF19LAorCQl7ImEiOiAgMywgICJiIjog WzEsIDJdLCAiYyI6IFtdfSwKKwkJeyJ4IjogIjQiLCAiYiI6IFsxLCAyXSwgImMiOiAxMjN9CisJ IF0nCispOworCistLSB1bnNwZWNpZmllZCBwbGFuIChvdXRlciwgdW5pb24pCitzZWxlY3QKKwlq dC4qCitmcm9tCisJanNvbmJfdGFibGVfdGVzdCBqdHQsCisJanNvbl90YWJsZSAoCisJCWp0dC5q cywnc3RyaWN0ICRbKl0nIGFzIHAKKwkJY29sdW1ucyAoCisJCQluIGZvciBvcmRpbmFsaXR5LAor CQkJYSBpbnQgcGF0aCAnbGF4ICQuYScgZGVmYXVsdCAtMSBvbiBlbXB0eSwKKwkJCW5lc3RlZCBw YXRoICdzdHJpY3QgJC5iWypdJyBhcyBwYiBjb2x1bW5zICggYiBpbnQgcGF0aCAnJCcgKSwKKwkJ CW5lc3RlZCBwYXRoICdzdHJpY3QgJC5jWypdJyBhcyBwYyBjb2x1bW5zICggYyBpbnQgcGF0aCAn JCcgKQorCQkpCisJKSBqdDsKKworLS0gZGVmYXVsdCBwbGFuIChvdXRlciwgdW5pb24pCitzZWxl Y3QKKwlqdC4qCitmcm9tCisJanNvbmJfdGFibGVfdGVzdCBqdHQsCisJanNvbl90YWJsZSAoCisJ CWp0dC5qcywnc3RyaWN0ICRbKl0nIGFzIHAKKwkJY29sdW1ucyAoCisJCQluIGZvciBvcmRpbmFs aXR5LAorCQkJYSBpbnQgcGF0aCAnbGF4ICQuYScgZGVmYXVsdCAtMSBvbiBlbXB0eSwKKwkJCW5l c3RlZCBwYXRoICdzdHJpY3QgJC5iWypdJyBhcyBwYiBjb2x1bW5zICggYiBpbnQgcGF0aCAnJCcg KSwKKwkJCW5lc3RlZCBwYXRoICdzdHJpY3QgJC5jWypdJyBhcyBwYyBjb2x1bW5zICggYyBpbnQg cGF0aCAnJCcgKQorCQkpCisJCXBsYW4gZGVmYXVsdCAob3V0ZXIsIHVuaW9uKQorCSkganQ7CisK Ky0tIHNwZWNpZmljIHBsYW4gKHAgb3V0ZXIgKHBiIHVuaW9uIHBjKSkKK3NlbGVjdAorCWp0LioK K2Zyb20KKwlqc29uYl90YWJsZV90ZXN0IGp0dCwKKwlqc29uX3RhYmxlICgKKwkJanR0LmpzLCdz dHJpY3QgJFsqXScgYXMgcAorCQljb2x1bW5zICgKKwkJCW4gZm9yIG9yZGluYWxpdHksCisJCQlh IGludCBwYXRoICdsYXggJC5hJyBkZWZhdWx0IC0xIG9uIGVtcHR5LAorCQkJbmVzdGVkIHBhdGgg J3N0cmljdCAkLmJbKl0nIGFzIHBiIGNvbHVtbnMgKCBiIGludCBwYXRoICckJyApLAorCQkJbmVz dGVkIHBhdGggJ3N0cmljdCAkLmNbKl0nIGFzIHBjIGNvbHVtbnMgKCBjIGludCBwYXRoICckJyAp CisJCSkKKwkJcGxhbiAocCBvdXRlciAocGIgdW5pb24gcGMpKQorCSkganQ7CisKKy0tIHNwZWNp ZmljIHBsYW4gKHAgb3V0ZXIgKHBjIHVuaW9uIHBiKSkKK3NlbGVjdAorCWp0LioKK2Zyb20KKwlq c29uYl90YWJsZV90ZXN0IGp0dCwKKwlqc29uX3RhYmxlICgKKwkJanR0LmpzLCdzdHJpY3QgJFsq XScgYXMgcAorCQljb2x1bW5zICgKKwkJCW4gZm9yIG9yZGluYWxpdHksCisJCQlhIGludCBwYXRo ICdsYXggJC5hJyBkZWZhdWx0IC0xIG9uIGVtcHR5LAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAk LmJbKl0nIGFzIHBiIGNvbHVtbnMgKCBiIGludCBwYXRoICckJyApLAorCQkJbmVzdGVkIHBhdGgg J3N0cmljdCAkLmNbKl0nIGFzIHBjIGNvbHVtbnMgKCBjIGludCBwYXRoICckJyApCisJCSkKKwkJ cGxhbiAocCBvdXRlciAocGMgdW5pb24gcGIpKQorCSkganQ7CisKKy0tIGRlZmF1bHQgcGxhbiAo aW5uZXIsIHVuaW9uKQorc2VsZWN0CisJanQuKgorZnJvbQorCWpzb25iX3RhYmxlX3Rlc3QganR0 LAorCWpzb25fdGFibGUgKAorCQlqdHQuanMsJ3N0cmljdCAkWypdJyBhcyBwCisJCWNvbHVtbnMg KAorCQkJbiBmb3Igb3JkaW5hbGl0eSwKKwkJCWEgaW50IHBhdGggJ2xheCAkLmEnIGRlZmF1bHQg LTEgb24gZW1wdHksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuYlsqXScgYXMgcGIgY29sdW1u cyAoIGIgaW50IHBhdGggJyQnICksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuY1sqXScgYXMg cGMgY29sdW1ucyAoIGMgaW50IHBhdGggJyQnICkKKwkJKQorCQlwbGFuIGRlZmF1bHQgKGlubmVy KQorCSkganQ7CisKKy0tIHNwZWNpZmljIHBsYW4gKHAgaW5uZXIgKHBiIHVuaW9uIHBjKSkKK3Nl bGVjdAorCWp0LioKK2Zyb20KKwlqc29uYl90YWJsZV90ZXN0IGp0dCwKKwlqc29uX3RhYmxlICgK KwkJanR0LmpzLCdzdHJpY3QgJFsqXScgYXMgcAorCQljb2x1bW5zICgKKwkJCW4gZm9yIG9yZGlu YWxpdHksCisJCQlhIGludCBwYXRoICdsYXggJC5hJyBkZWZhdWx0IC0xIG9uIGVtcHR5LAorCQkJ bmVzdGVkIHBhdGggJ3N0cmljdCAkLmJbKl0nIGFzIHBiIGNvbHVtbnMgKCBiIGludCBwYXRoICck JyApLAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmNbKl0nIGFzIHBjIGNvbHVtbnMgKCBjIGlu dCBwYXRoICckJyApCisJCSkKKwkJcGxhbiAocCBpbm5lciAocGIgdW5pb24gcGMpKQorCSkganQ7 CisKKy0tIGRlZmF1bHQgcGxhbiAoaW5uZXIsIGNyb3NzKQorc2VsZWN0CisJanQuKgorZnJvbQor CWpzb25iX3RhYmxlX3Rlc3QganR0LAorCWpzb25fdGFibGUgKAorCQlqdHQuanMsJ3N0cmljdCAk WypdJyBhcyBwCisJCWNvbHVtbnMgKAorCQkJbiBmb3Igb3JkaW5hbGl0eSwKKwkJCWEgaW50IHBh dGggJ2xheCAkLmEnIGRlZmF1bHQgLTEgb24gZW1wdHksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0 ICQuYlsqXScgYXMgcGIgY29sdW1ucyAoIGIgaW50IHBhdGggJyQnICksCisJCQluZXN0ZWQgcGF0 aCAnc3RyaWN0ICQuY1sqXScgYXMgcGMgY29sdW1ucyAoIGMgaW50IHBhdGggJyQnICkKKwkJKQor CQlwbGFuIGRlZmF1bHQgKGNyb3NzLCBpbm5lcikKKwkpIGp0OworCistLSBzcGVjaWZpYyBwbGFu IChwIGlubmVyIChwYiBjcm9zcyBwYykpCitzZWxlY3QKKwlqdC4qCitmcm9tCisJanNvbmJfdGFi bGVfdGVzdCBqdHQsCisJanNvbl90YWJsZSAoCisJCWp0dC5qcywnc3RyaWN0ICRbKl0nIGFzIHAK KwkJY29sdW1ucyAoCisJCQluIGZvciBvcmRpbmFsaXR5LAorCQkJYSBpbnQgcGF0aCAnbGF4ICQu YScgZGVmYXVsdCAtMSBvbiBlbXB0eSwKKwkJCW5lc3RlZCBwYXRoICdzdHJpY3QgJC5iWypdJyBh cyBwYiBjb2x1bW5zICggYiBpbnQgcGF0aCAnJCcgKSwKKwkJCW5lc3RlZCBwYXRoICdzdHJpY3Qg JC5jWypdJyBhcyBwYyBjb2x1bW5zICggYyBpbnQgcGF0aCAnJCcgKQorCQkpCisJCXBsYW4gKHAg aW5uZXIgKHBiIGNyb3NzIHBjKSkKKwkpIGp0OworCistLSBkZWZhdWx0IHBsYW4gKG91dGVyLCBj cm9zcykKK3NlbGVjdAorCWp0LioKK2Zyb20KKwlqc29uYl90YWJsZV90ZXN0IGp0dCwKKwlqc29u X3RhYmxlICgKKwkJanR0LmpzLCdzdHJpY3QgJFsqXScgYXMgcAorCQljb2x1bW5zICgKKwkJCW4g Zm9yIG9yZGluYWxpdHksCisJCQlhIGludCBwYXRoICdsYXggJC5hJyBkZWZhdWx0IC0xIG9uIGVt cHR5LAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmJbKl0nIGFzIHBiIGNvbHVtbnMgKCBiIGlu dCBwYXRoICckJyApLAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmNbKl0nIGFzIHBjIGNvbHVt bnMgKCBjIGludCBwYXRoICckJyApCisJCSkKKwkJcGxhbiBkZWZhdWx0IChvdXRlciwgY3Jvc3Mp CisJKSBqdDsKKworLS0gc3BlY2lmaWMgcGxhbiAocCBvdXRlciAocGIgY3Jvc3MgcGMpKQorc2Vs ZWN0CisJanQuKgorZnJvbQorCWpzb25iX3RhYmxlX3Rlc3QganR0LAorCWpzb25fdGFibGUgKAor CQlqdHQuanMsJ3N0cmljdCAkWypdJyBhcyBwCisJCWNvbHVtbnMgKAorCQkJbiBmb3Igb3JkaW5h bGl0eSwKKwkJCWEgaW50IHBhdGggJ2xheCAkLmEnIGRlZmF1bHQgLTEgb24gZW1wdHksCisJCQlu ZXN0ZWQgcGF0aCAnc3RyaWN0ICQuYlsqXScgYXMgcGIgY29sdW1ucyAoIGIgaW50IHBhdGggJyQn ICksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuY1sqXScgYXMgcGMgY29sdW1ucyAoIGMgaW50 IHBhdGggJyQnICkKKwkJKQorCQlwbGFuIChwIG91dGVyIChwYiBjcm9zcyBwYykpCisJKSBqdDsK KworCitzZWxlY3QKKwlqdC4qLCBiMSArIDEwMCBhcyBiCitmcm9tCisJanNvbl90YWJsZSAoanNv bmIKKwkJJ1sKKwkJCXsiYSI6ICAxLCAgImIiOiBbWzEsIDEwXSwgWzJdLCBbMywgMzAsIDMwMF1d LCAiYyI6IFsxLCBudWxsLCAyXX0sCisJCQl7ImEiOiAgMiwgICJiIjogWzEwLCAyMF0sICJjIjog WzEsIG51bGwsIDJdfSwKKwkJCXsieCI6ICIzIiwgImIiOiBbMTEsIDIyLCAzMywgNDRdfQorCQkg XScsCisJCSckWypdJyBhcyBwCisJCWNvbHVtbnMgKAorCQkJbiBmb3Igb3JkaW5hbGl0eSwKKwkJ CWEgaW50IHBhdGggJ2xheCAkLmEnIGRlZmF1bHQgLTEgb24gZXJyb3IsCisJCQluZXN0ZWQgcGF0 aCAnc3RyaWN0ICQuYlsqXScgYXMgcGIgY29sdW1ucyAoCisJCQkJYiB0ZXh0IGZvcm1hdCBqc29u IHBhdGggJyQnLAorCQkJCW5lc3RlZCBwYXRoICdzdHJpY3QgJFsqXScgYXMgcGIxIGNvbHVtbnMg KAorCQkJCQliMSBpbnQgcGF0aCAnJCcKKwkJCQkpCisJCQkpLAorCQkJbmVzdGVkIHBhdGggJ3N0 cmljdCAkLmNbKl0nIGFzIHBjIGNvbHVtbnMgKAorCQkJCWMgdGV4dCBmb3JtYXQganNvbiBwYXRo ICckJywKKwkJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICRbKl0nIGFzIHBjMSBjb2x1bW5zICgKKwkJ CQkJYzEgaW50IHBhdGggJyQnCisJCQkJKQorCQkJKQorCQkpCisJCS0tcGxhbiBkZWZhdWx0KG91 dGVyLCBjcm9zcykKKwkJcGxhbihwIG91dGVyICgocGIgaW5uZXIgcGIxKSBjcm9zcyAocGMgb3V0 ZXIgcGMxKSkpCisJKSBqdDsKKworLS0gU2hvdWxkIHN1Y2NlZWQgKEpTT04gYXJndW1lbnRzIGFy ZSBwYXNzZWQgdG8gcm9vdCBhbmQgbmVzdGVkIHBhdGhzKQorU0VMRUNUICoKK0ZST00KKwlnZW5l cmF0ZV9zZXJpZXMoMSwgNCkgeCwKKwlnZW5lcmF0ZV9zZXJpZXMoMSwgMykgeSwKKwlKU09OX1RB QkxFKGpzb25iCisJCSdbWzEsMiwzXSxbMiwzLDQsNV0sWzMsNCw1LDZdXScsCisJCSdzdHJpY3Qg JFsqXSA/IChAWypdIDwgJHgpJworCQlQQVNTSU5HIHggQVMgeCwgeSBBUyB5CisJCUNPTFVNTlMg KAorCQkJeSB0ZXh0IEZPUk1BVCBKU09OIFBBVEggJyQnLAorCQkJTkVTVEVEIFBBVEggJ3N0cmlj dCAkWypdID8gKEAgPj0gJHkpJworCQkJQ09MVU1OUyAoCisJCQkJeiBpbnQgUEFUSCAnJCcKKwkJ CSkKKwkJKQorCSkganQ7CisKKy0tIFNob3VsZCBmYWlsIChKU09OIGFyZ3VtZW50cyBhcmUgbm90 IHBhc3NlZCB0byBjb2x1bW4gcGF0aHMpCitTRUxFQ1QgKgorRlJPTSBKU09OX1RBQkxFKAorCWpz b25iICdbMSwyLDNdJywKKwknJFsqXSA/IChAIDwgJHgpJworCQlQQVNTSU5HIDEwIEFTIHgKKwkJ Q09MVU1OUyAoeSB0ZXh0IEZPUk1BVCBKU09OIFBBVEggJyQgPyAoQCA8ICR4KScpCisJKSBqdDsK KworLS0gU2hvdWxkIGZhaWwgKG5vdCBzdXBwb3J0ZWQpCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFC TEUoanNvbmIgJ3siYSI6IDEyM30nLCAnJCcgfHwgJy4nIHx8ICdhJyBDT0xVTU5TIChmb28gaW50 KSk7CmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDdiMDM5NTUxMGQuLmI2MjFkZjIwYjYg MTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0xMzI3LDYgKzEzMjcsNyBAQCBKc29uUGF0 aE11dGFibGVDb250ZXh0CiBKc29uUGF0aFBhcnNlSXRlbQogSnNvblBhdGhQYXJzZVJlc3VsdAog SnNvblBhdGhQcmVkaWNhdGVDYWxsYmFjaworSnNvblBhdGhTcGVjCiBKc29uUGF0aFN0cmluZwog SnNvblBhdGhWYXJpYWJsZQogSnNvblBhdGhWYXJpYWJsZUV2YWxDb250ZXh0CkBAIC0xMzM2LDYg KzEzMzcsMjAgQEAgSnNvblJldHVybmluZwogSnNvblNjYWxhckV4cHIKIEpzb25TZW1BY3Rpb24K IEpzb25TZXJpYWxpemVFeHByCitKc29uVGFibGUKK0pzb25UYWJsZUNvbHVtbgorSnNvblRhYmxl Q29sdW1uVHlwZQorSnNvblRhYmxlQ29udGV4dAorSnNvblRhYmxlUGFyc2VDb250ZXh0CitKc29u VGFibGVKb2luU3RhdGUKK0pzb25UYWJsZVBsYW4KK0pzb25UYWJsZVBsYW5TcGVjCitKc29uVGFi bGVQbGFuU3RhdGUKK0pzb25UYWJsZVBsYW5TdGF0ZVR5cGUKK0pzb25UYWJsZVBsYW5Kb2luVHlw ZQorSnNvblRhYmxlUGxhblR5cGUKK0pzb25UYWJsZVNjYW5TdGF0ZQorSnNvblRhYmxlU2libGlu ZwogSnNvblRva2VuVHlwZQogSnNvblRyYW5zZm9ybVN0cmluZ1ZhbHVlc0FjdGlvbgogSnNvblR5 cGVDYXRlZ29yeQpAQCAtMjgwOCw2ICsyODIzLDcgQEAgVGFibGVGdW5jCiBUYWJsZUZ1bmNSb3V0 aW5lCiBUYWJsZUZ1bmNTY2FuCiBUYWJsZUZ1bmNTY2FuU3RhdGUKK1RhYmxlRnVuY1R5cGUKIFRh YmxlSW5mbwogVGFibGVMaWtlQ2xhdXNlCiBUYWJsZVNhbXBsZUNsYXVzZQotLSAKMi40My4wCgo= --00000000000030f4180614012e4f Content-Type: application/octet-stream; name="v43-0001-Add-SQL-JSON-query-functions.patch" Content-Disposition: attachment; filename="v43-0001-Add-SQL-JSON-query-functions.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lty8z54m0 RnJvbSA2NjJhOGE0YWQ2OThmNGVhZWRmODU4NDhiNTg5MTk3M2QyYWNhODE2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IE1vbiwgNCBNYXIgMjAyNCAxODowNDo1MCArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjQz IDEvM10gQWRkIFNRTC9KU09OIHF1ZXJ5IGZ1bmN0aW9ucwpNSU1FLVZlcnNpb246IDEuMApDb250 ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKQ29udGVudC1UcmFuc2Zlci1FbmNv ZGluZzogOGJpdAoKVGhpcyBpbnRyb2R1Y2VzIHRoZSBmb2xsb3dpbmcgU1FML0pTT04gZnVuY3Rp b25zIGZvciBxdWVyeWluZyBKU09OCmRhdGEgdXNpbmcganNvbnBhdGggZXhwcmVzc2lvbnM6CgpK U09OX0VYSVNUUygpCkpTT05fUVVFUlkoKQpKU09OX1ZBTFVFKCkKCkpTT05fRVhJU1RTKCkgdGVz dHMgaWYgdGhlIGpzb25wYXRoIGV4cHJlc3Npb24gYXBwbGllZCB0byBhIGpzb25iCnZhbHVlIHlp ZWxkcyBhbnkgdmFsdWVzLgoKSlNPTl9WQUxVRSgpIGFwcGxpZXMgYSBqc29ucGF0aCBleHByZXNz aW9uIHRvIGEganNvbmIgdmFsdWUgdG8gcmV0dXJuCmEgc2luZ2xlIHNjYWxhciB2YWx1ZSwgcHJv ZHVjaW5nIGFuIGVycm9yIGlmIGl0IG11bHRpcGxlIHZhbHVlcyBhcmUKbWF0Y2hlZC4KCkpTT05f UVVFUlkoKSBhcHBsaWVzIGEganNvbnBhdGggZXhwcmVzc2lvbiB0byBhIGpzb25iIHZhbHVlIHRv CnJldHVybiBhIGpzb24gb2JqZWN0IG9yIGFycmF5LiAgVGhlcmUgYXJlIHZhcmlvdXMgb3B0aW9u cyB0byBjb250cm9sCndoZXRoZXIgbXVsdGktdmFsdWUgcmVzdWx0IHVzZXMgYXJyYXkgd3JhcHBl cnMgYW5kIHdoZXRoZXIgdGhlCnNpbmdsZXRvbiBzY2FsYXIgc3RyaW5ncyBhcmUgcXVvdGVkIG9y IG5vdC4KCkJvdGggSlNPTl9WQUxVRSgpIGFuZCBKU09OX1FVRVJZKCkgZnVuY3Rpb25zIGhhdmUg b3B0aW9ucyBmb3IKaGFuZGxpbmcgRU1QVFkgYW5kIEVSUk9SIGNvbmRpdGlvbnMsIHdoaWNoIGNh biBiZSB1c2VkIHRvIHNwZWNpZnkKdGhlIGJlaGF2aW9yIHdoZW4gbm8gdmFsdWVzIGFyZSBtYXRj aGVkIGFuZCB3aGVuIGFuIGVycm9yIG9jY3VycwpkdXJpbmcgZXZhbHVhdGlvbiwgcmVzcGVjdGl2 ZWx5LgoKQWxsIG9mIHRoZXNlIGZ1bmN0aW9ucyBvbmx5IG9wZXJhdGUgb24ganNvbmIgdmFsdWVz LiBUaGUgd29ya2Fyb3VuZApmb3Igbm93IGlzIHRvIGNhc3QgdGhlIGFyZ3VtZW50IHRvIGpzb25i LgoKQXV0aG9yOiBOaWtpdGEgR2x1a2hvdiA8bi5nbHVob3ZAcG9zdGdyZXNwcm8ucnU+CkF1dGhv cjogVGVvZG9yIFNpZ2FldiA8dGVvZG9yQHNpZ2Fldi5ydT4KQXV0aG9yOiBPbGVnIEJhcnR1bm92 IDxvYmFydHVub3ZAZ21haWwuY29tPgpBdXRob3I6IEFsZXhhbmRlciBLb3JvdGtvdiA8YWVrb3Jv dGtvdkBnbWFpbC5jb20+CkF1dGhvcjogQW5kcmV3IER1bnN0YW4gPGFuZHJld0BkdW5zbGFuZS5u ZXQ+CkF1dGhvcjogQW1pdCBMYW5nb3RlIDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4KQXV0aG9y OiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRyYXV0Lm9yZz4KQXV0aG9yOiBKaWFuIEhl IDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+CgpSZXZpZXdlcnMgaGF2ZSBpbmNsdWRlZCAo aW4gbm8gcGFydGljdWxhciBvcmRlcikgQW5kcmVzIEZyZXVuZCwgQWxleGFuZGVyCktvcm90a292 LCBQYXZlbCBTdGVodWxlLCBBbmRyZXcgQWxzdXAsIEVyaWsgUmlqa2VycywgWmlob25nIFl1LApI aW1hbnNodSBVcGFkaHlheWEsIERhbmllbCBHdXN0YWZzc29uLCBKdXN0aW4gUHJ5emJ5LCDDgWx2 YXJvIEhlcnJlcmEsCkppYW4gSGUsIEFudG9uIEEuIE1lbG5pa292LCBOaWtpdGEgTWFsYWtob3Ys IFBldGVyIEVpc2VudHJhdXQKCkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vY2QwYmI5 MzUtMDE1OC03OGE3LTA4YjUtOTA0ODg2ZGVhYzRiQHBvc3RncmVzcHJvLnJ1CkRpc2N1c3Npb246 IGh0dHBzOi8vcG9zdGdyLmVzL20vMjAyMjA2MTYyMzMxMzAucnBhcml2YWZpcHQ2ZG9qM0BhbGFw My5hbmFyYXplbC5kZQpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL2FiZDliODNiLWFh NjYtZjIzMC0zZDZkLTczNDgxN2YwOTk1ZCU0MHBvc3RncmVzcWwub3JnCkRpc2N1c3Npb246IGh0 dHBzOi8vcG9zdGdyLmVzL20vQ0ErSGl3cUhST3BmOWU2NDREOEJScVl2YUFQbWdCWlZ1cC14S01E UGstbmQ0RXBnekh3QG1haWwuZ21haWwuY29tCkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVz L20vQ0ErSGl3cUU0WFRkZmIxblc9T2pveV90UVNSaFl0LXFfa2I2aTVkNHhjS3lyTEMxTmJnQG1h aWwuZ21haWwuY29tCi0tLQogZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbCAgICAgICAgICAgICAgICAg ICAgICAgIHwgIDIyNCArKysKIHNyYy9iYWNrZW5kL2NhdGFsb2cvc3FsX2ZlYXR1cmVzLnR4dCAg ICAgICAgICB8ICAgMTIgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHByLmMgICAgICAg ICAgICAgICB8ICAzMzQgKysrKysKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJw LmMgICAgICAgICB8ICAzODAgKysrKy0KIHNyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfZXhw ci5jICAgICAgICAgICB8ICAxNDQgKysKIHNyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfdHlw ZXMuYyAgICAgICAgICB8ICAgIDMgKwogc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNzLmMgICAg ICAgICAgICAgICAgIHwgICAxOCArCiBzcmMvYmFja2VuZC9ub2Rlcy9ub2RlRnVuY3MuYyAgICAg ICAgICAgICAgICAgfCAgMjQ4ICsrKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3Rz aXplLmMgICAgICAgICB8ICAgIDMgKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci91dGlsL2NsYXVz ZXMuYyAgICAgICAgICB8ICAgMjAgKwogc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueSAgICAgICAg ICAgICAgICAgICAgIHwgIDE4OCArKy0KIHNyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9leHByLmMg ICAgICAgICAgICAgICB8ICA2NjkgKysrKysrKystCiBzcmMvYmFja2VuZC9wYXJzZXIvcGFyc2Vf dGFyZ2V0LmMgICAgICAgICAgICAgfCAgIDE1ICsKIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3Jt YXR0aW5nLmMgICAgICAgICAgICB8ICAgNDQgKwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25i LmMgICAgICAgICAgICAgICAgIHwgICAzMSArCiBzcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmZ1 bmNzLmMgICAgICAgICAgICAgfCAgIDYyICstCiBzcmMvYmFja2VuZC91dGlscy9hZHQvanNvbnBh dGguYyAgICAgICAgICAgICAgfCAgMjgxICsrKysKIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29u cGF0aF9leGVjLmMgICAgICAgICB8ICAzMjIgKysrKysKIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9y dWxldXRpbHMuYyAgICAgICAgICAgICB8ICAxMzYgKysKIHNyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4 ZWNFeHByLmggICAgICAgICAgICAgICB8ICAgMjMgKwogc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25v ZGVzLmggICAgICAgICAgICAgICAgIHwgICA3NyArCiBzcmMvaW5jbHVkZS9ub2Rlcy9tYWtlZnVu Y3MuaCAgICAgICAgICAgICAgICAgfCAgICAyICsKIHNyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9k ZXMuaCAgICAgICAgICAgICAgICB8ICAgNDIgKwogc3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5vZGVz LmggICAgICAgICAgICAgICAgIHwgIDE4MyArKysKIHNyYy9pbmNsdWRlL3BhcnNlci9rd2xpc3Qu aCAgICAgICAgICAgICAgICAgICB8ICAgMTEgKwogc3JjL2luY2x1ZGUvdXRpbHMvZm9ybWF0dGlu Zy5oICAgICAgICAgICAgICAgIHwgICAgMSArCiBzcmMvaW5jbHVkZS91dGlscy9qc29uYi5oICAg ICAgICAgICAgICAgICAgICAgfCAgICAxICsKIHNyYy9pbmNsdWRlL3V0aWxzL2pzb25mdW5jcy5o ICAgICAgICAgICAgICAgICB8ICAgIDcgKwogc3JjL2luY2x1ZGUvdXRpbHMvanNvbnBhdGguaCAg ICAgICAgICAgICAgICAgIHwgICAyNCArCiBzcmMvaW50ZXJmYWNlcy9lY3BnL3ByZXByb2MvZWNw Zy50cmFpbGVyICAgICAgfCAgIDI4ICsKIC4uLi9yZWdyZXNzL2V4cGVjdGVkL3NxbGpzb25fcXVl cnlmdW5jcy5vdXQgICB8IDEyNjEgKysrKysrKysrKysrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3Mv cGFyYWxsZWxfc2NoZWR1bGUgICAgICAgICAgICB8ICAgIDIgKy0KIHNyYy90ZXN0L3JlZ3Jlc3Mv c3FsL3NxbGpzb25fcXVlcnlmdW5jcy5zcWwgICB8ICA0MjcgKysrKysrCiBzcmMvdG9vbHMvcGdp bmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgICAgfCAgIDE4ICsKIDM0IGZpbGVzIGNoYW5n ZWQsIDUyMDMgaW5zZXJ0aW9ucygrKSwgMzggZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2 NDQgc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zcWxqc29uX3F1ZXJ5ZnVuY3Mub3V0CiBjcmVh dGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3FsanNvbl9xdWVyeWZ1bmNzLnNx bAoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9mdW5jLnNnbWwgYi9kb2Mvc3JjL3NnbWwvZnVu Yy5zZ21sCmluZGV4IDNjNTJkOTBkM2EuLjcwZmExZjZjNjkgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMv c2dtbC9mdW5jLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbApAQCAtMTU0NTgsNiAr MTU0NTgsMTEgQEAgdGFibGUyLW1hcHBpbmcKICAgICAgIHRoZSBTUUwvSlNPTiBwYXRoIGxhbmd1 YWdlCiAgICAgIDwvcGFyYT4KICAgICA8L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT4KKyAgICAg PHBhcmE+CisgICAgICB0aGUgU1FML0pTT04gcXVlcnkgZnVuY3Rpb25zCisgICAgIDwvcGFyYT4K KyAgICA8L2xpc3RpdGVtPgogICAgPC9pdGVtaXplZGxpc3Q+CiAgIDwvcGFyYT4KIApAQCAtMTg1 ODYsNiArMTg1OTEsMjI1IEBAICQuKiA/IChAIGxpa2VfcmVnZXggIl5cXGQrJCIpCiAgICAgPC9w YXJhPgogICAgPC9zZWN0Mz4KICAgPC9zZWN0Mj4KKworICAgPHNlY3QyIGlkPSJzcWxqc29uLXF1 ZXJ5LWZ1bmN0aW9ucyI+CisgICAgPHRpdGxlPlNRTC9KU09OIFF1ZXJ5IEZ1bmN0aW9uczwvdGl0 bGU+CisgIDxwYXJhPgorICAgU1FML0pTT04gZnVuY3Rpb25zIDxsaXRlcmFsPkpTT05fRVhJU1RT KCk8L2xpdGVyYWw+LAorICAgPGxpdGVyYWw+SlNPTl9RVUVSWSgpPC9saXRlcmFsPiwgYW5kIDxs aXRlcmFsPkpTT05fVkFMVUUoKTwvbGl0ZXJhbD4KKyAgIGRlc2NyaWJlZCBpbiA8eHJlZiBsaW5r ZW5kPSJmdW5jdGlvbnMtc3FsanNvbi1xdWVyeWluZyIvPiBjYW4gYmUgdXNlZAorICAgdG8gcXVl cnkgSlNPTiBkb2N1bWVudHMuICBFYWNoIG9mIHRoZXNlIGZ1bmN0aW9ucyBhcHBseSBhCisgICA8 cmVwbGFjZWFibGU+cGF0aF9leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4gKHRoZSBxdWVyeSkgdG8g YQorICAgPHJlcGxhY2VhYmxlPmNvbnRleHRfaXRlbTwvcmVwbGFjZWFibGU+ICh0aGUgZG9jdW1l bnQpOyBzZWUKKyAgIDx4cmVmIGxpbmtlbmQ9ImZ1bmN0aW9ucy1zcWxqc29uLXBhdGgiLz4gZm9y IG1vcmUgZGV0YWlscyBvbiB3aGF0CisgICA8cmVwbGFjZWFibGU+cGF0aF9leHByZXNzaW9uPC9y ZXBsYWNlYWJsZT4gY2FuIGNvbnRhaW4uCisgIDwvcGFyYT4KKworICA8bm90ZT4KKyAgIDxwYXJh PgorICAgIFNRTC9KU09OIHF1ZXJ5IGZ1bmN0aW9ucyBjdXJyZW50bHkgb25seSBhY2NlcHQgdmFs dWVzIG9mIHRoZQorICAgIDx0eXBlPmpzb25iPC90eXBlPiB0eXBlLCBiZWNhdXNlIHRoZSBTUUwv SlNPTiBwYXRoIGxhbmd1YWdlIG9ubHkKKyAgICBzdXBwb3J0cyB0aG9zZSwgc28gaXQgbWlnaHQg YmUgbmVjZXNzYXJ5IHRvIGNhc3QgdGhlCisgICAgPHJlcGxhY2VhYmxlPmNvbnRleHRfaXRlbTwv cmVwbGFjZWFibGU+IGFyZ3VtZW50IG9mIHRoZXNlIGZ1bmN0aW9ucyB0bworICAgIDx0eXBlPmpz b25iPC90eXBlPi4KKyAgIDwvcGFyYT4KKyAgPC9ub3RlPgorCisgIDx0YWJsZSBpZD0iZnVuY3Rp b25zLXNxbGpzb24tcXVlcnlpbmciPgorICAgPHRpdGxlPlNRTC9KU09OIFF1ZXJ5IEZ1bmN0aW9u czwvdGl0bGU+CisgICA8dGdyb3VwIGNvbHM9IjEiPgorICAgIDx0aGVhZD4KKyAgICAgPHJvdz4K KyAgICAgIDxlbnRyeSByb2xlPSJmdW5jX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJmdW5jX3Np Z25hdHVyZSI+CisgICAgICAgIEZ1bmN0aW9uIHNpZ25hdHVyZQorICAgICAgIDwvcGFyYT4KKyAg ICAgICA8cGFyYT4KKyAgICAgICAgRGVzY3JpcHRpb24KKyAgICAgICA8L3BhcmE+CisgICAgICAg PHBhcmE+CisgICAgICAgIEV4YW1wbGUocykKKyAgICAgIDwvcGFyYT48L2VudHJ5PgorICAgICA8 L3Jvdz4KKyAgICA8L3RoZWFkPgorICAgIDx0Ym9keT4KKyAgICAgPHJvdz4KKyAgICAgIDxlbnRy eSByb2xlPSJmdW5jX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJmdW5jX3NpZ25hdHVyZSI+Cisg ICAgICAgIDxpbmRleHRlcm0+PHByaW1hcnk+anNvbl9leGlzdHM8L3ByaW1hcnk+PC9pbmRleHRl cm0+CisgICAgICAgIDxmdW5jdGlvbj5qc29uX2V4aXN0czwvZnVuY3Rpb24+ICgKKyAgICAgICAg PHJlcGxhY2VhYmxlPmNvbnRleHRfaXRlbTwvcmVwbGFjZWFibGU+LCA8cmVwbGFjZWFibGU+cGF0 aF9leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4gPG9wdGlvbmFsPiA8bGl0ZXJhbD5QQVNTSU5HPC9s aXRlcmFsPiB7IDxyZXBsYWNlYWJsZT52YWx1ZTwvcmVwbGFjZWFibGU+IDxsaXRlcmFsPkFTPC9s aXRlcmFsPiA8cmVwbGFjZWFibGU+dmFybmFtZTwvcmVwbGFjZWFibGU+IH0gPG9wdGlvbmFsPiwg Li4uPC9vcHRpb25hbD48L29wdGlvbmFsPgorICAgICAgICA8b3B0aW9uYWw+IHsgPGxpdGVyYWw+ VFJVRTwvbGl0ZXJhbD4gfCA8bGl0ZXJhbD5GQUxTRTwvbGl0ZXJhbD4gfDxsaXRlcmFsPiBVTktO T1dOPC9saXRlcmFsPiB8IDxsaXRlcmFsPkVSUk9SPC9saXRlcmFsPiB9IDxsaXRlcmFsPk9OIEVS Uk9SPC9saXRlcmFsPiA8L29wdGlvbmFsPikKKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+ CisgICAgICAgIFJldHVybnMgdHJ1ZSBpZiB0aGUgU1FML0pTT04gPHJlcGxhY2VhYmxlPnBhdGhf ZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+CisgICAgICAgIGFwcGxpZWQgdG8gdGhlIDxyZXBsYWNl YWJsZT5jb250ZXh0X2l0ZW08L3JlcGxhY2VhYmxlPiB1c2luZyB0aGUKKyAgICAgICAgPGxpdGVy YWw+UEFTU0lORzwvbGl0ZXJhbD4gPHJlcGxhY2VhYmxlPnZhbHVlPC9yZXBsYWNlYWJsZT5zIHlp ZWxkcyBhbnkKKyAgICAgICAgaXRlbXMuCisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgor ICAgICAgICBUaGUgPGxpdGVyYWw+T04gRVJST1I8L2xpdGVyYWw+IGNsYXVzZSBzcGVjaWZpZXMg dGhlIGJlaGF2aW9yIGlmCisgICAgICAgIGFuIGVycm9yIG9jY3VyczsgdGhlIGRlZmF1bHQgaXMg dG8gcmV0dXJuIHRoZSA8dHlwZT5ib29sZWFuPC90eXBlPgorICAgICAgICA8bGl0ZXJhbD5GQUxT RTwvbGl0ZXJhbD4gdmFsdWUuIE5vdGUgdGhhdCBpZiB0aGUKKyAgICAgICAgPHJlcGxhY2VhYmxl PnBhdGhfZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+IGlzIDxsaXRlcmFsPnN0cmljdDwvbGl0ZXJh bD4KKyAgICAgICAgYW5kIDxsaXRlcmFsPk9OIEVSUk9SPC9saXRlcmFsPiBiZWhhdmlvciBpcyA8 bGl0ZXJhbD5FUlJPUjwvbGl0ZXJhbD4sCisgICAgICAgIGFuIGVycm9yIGlzIGdlbmVyYXRlZCBp ZiBpdCB5aWVsZHMgbm8gaXRlbXMuCisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAg ICAgICBFeGFtcGxlczoKKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIDxs aXRlcmFsPnNlbGVjdCBqc29uX2V4aXN0cyhqc29uYiAneyJrZXkxIjogWzEsMiwzXX0nLCAnc3Ry aWN0ICQua2V5MVsqXSA/IChAID4gMiknKTwvbGl0ZXJhbD4KKyAgICAgICAgPHJldHVybnZhbHVl PnQ8L3JldHVybnZhbHVlPgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAg PGxpdGVyYWw+c2VsZWN0IGpzb25fZXhpc3RzKGpzb25iICd7ImEiOiBbMSwyLDNdfScsICdsYXgg JC5hWzVdJyBFUlJPUiBPTiBFUlJPUik8L2xpdGVyYWw+CisgICAgICAgIDxyZXR1cm52YWx1ZT5m PC9yZXR1cm52YWx1ZT4KKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIDxs aXRlcmFsPnNlbGVjdCBqc29uX2V4aXN0cyhqc29uYiAneyJhIjogWzEsMiwzXX0nLCAnc3RyaWN0 ICQuYVs1XScgRVJST1IgT04gRVJST1IpPC9saXRlcmFsPgorICAgICAgICA8cmV0dXJudmFsdWU+ PC9yZXR1cm52YWx1ZT4KKzxwcm9ncmFtbGlzdGluZz4KK0VSUk9SOiAganNvbnBhdGggYXJyYXkg c3Vic2NyaXB0IGlzIG91dCBvZiBib3VuZHMKKzwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICA8L3Bh cmE+PC9lbnRyeT4KKyAgICAgPC9yb3c+CisgICAgIDxyb3c+CisgICAgICA8ZW50cnkgcm9sZT0i ZnVuY190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iZnVuY19zaWduYXR1cmUiPgorICAgICAgICA8 aW5kZXh0ZXJtPjxwcmltYXJ5Pmpzb25fcXVlcnk8L3ByaW1hcnk+PC9pbmRleHRlcm0+CisgICAg ICAgIDxmdW5jdGlvbj5qc29uX3F1ZXJ5PC9mdW5jdGlvbj4gKAorICAgICAgICA8cmVwbGFjZWFi bGU+Y29udGV4dF9pdGVtPC9yZXBsYWNlYWJsZT4sIDxyZXBsYWNlYWJsZT5wYXRoX2V4cHJlc3Np b248L3JlcGxhY2VhYmxlPiA8b3B0aW9uYWw+IDxsaXRlcmFsPlBBU1NJTkc8L2xpdGVyYWw+IHsg PHJlcGxhY2VhYmxlPnZhbHVlPC9yZXBsYWNlYWJsZT4gPGxpdGVyYWw+QVM8L2xpdGVyYWw+IDxy ZXBsYWNlYWJsZT52YXJuYW1lPC9yZXBsYWNlYWJsZT4gfSA8b3B0aW9uYWw+LCAuLi48L29wdGlv bmFsPjwvb3B0aW9uYWw+CisgICAgICAgIDxvcHRpb25hbD4gPGxpdGVyYWw+UkVUVVJOSU5HPC9s aXRlcmFsPiA8cmVwbGFjZWFibGU+ZGF0YV90eXBlPC9yZXBsYWNlYWJsZT4gPG9wdGlvbmFsPiA8 bGl0ZXJhbD5GT1JNQVQgSlNPTjwvbGl0ZXJhbD4gPG9wdGlvbmFsPiA8bGl0ZXJhbD5FTkNPRElO RyBVVEY4PC9saXRlcmFsPiA8L29wdGlvbmFsPiA8L29wdGlvbmFsPiA8L29wdGlvbmFsPgorICAg ICAgICA8b3B0aW9uYWw+IHsgPGxpdGVyYWw+V0lUSE9VVDwvbGl0ZXJhbD4gfCA8bGl0ZXJhbD5X SVRIPC9saXRlcmFsPiB7IDxsaXRlcmFsPkNPTkRJVElPTkFMPC9saXRlcmFsPiB8IDxvcHRpb25h bD48bGl0ZXJhbD5VTkNPTkRJVElPTkFMPC9saXRlcmFsPjwvb3B0aW9uYWw+IH0gfSA8b3B0aW9u YWw+IDxsaXRlcmFsPkFSUkFZPC9saXRlcmFsPiA8L29wdGlvbmFsPiA8bGl0ZXJhbD5XUkFQUEVS PC9saXRlcmFsPiA8L29wdGlvbmFsPgorICAgICAgICA8b3B0aW9uYWw+IHsgPGxpdGVyYWw+S0VF UDwvbGl0ZXJhbD4gfCA8bGl0ZXJhbD5PTUlUPC9saXRlcmFsPiB9IDxsaXRlcmFsPlFVT1RFUzwv bGl0ZXJhbD4gPG9wdGlvbmFsPiA8bGl0ZXJhbD5PTiBTQ0FMQVIgU1RSSU5HPC9saXRlcmFsPiA8 L29wdGlvbmFsPiA8L29wdGlvbmFsPgorICAgICAgICA8b3B0aW9uYWw+IHsgPGxpdGVyYWw+RVJS T1I8L2xpdGVyYWw+IHwgPGxpdGVyYWw+TlVMTDwvbGl0ZXJhbD4gfCA8bGl0ZXJhbD5FTVBUWTwv bGl0ZXJhbD4geyA8b3B0aW9uYWw+IDxsaXRlcmFsPkFSUkFZPC9saXRlcmFsPiA8L29wdGlvbmFs PiB8IDxsaXRlcmFsPk9CSkVDVDwvbGl0ZXJhbD4gfSB8IDxsaXRlcmFsPkRFRkFVTFQ8L2xpdGVy YWw+IDxyZXBsYWNlYWJsZT5leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4gfSA8bGl0ZXJhbD5PTiBF TVBUWTwvbGl0ZXJhbD4gPC9vcHRpb25hbD4KKyAgICAgICAgPG9wdGlvbmFsPiB7IDxsaXRlcmFs PkVSUk9SPC9saXRlcmFsPiB8IDxsaXRlcmFsPk5VTEw8L2xpdGVyYWw+IHwgPGxpdGVyYWw+RU1Q VFk8L2xpdGVyYWw+IHsgPG9wdGlvbmFsPiA8bGl0ZXJhbD5BUlJBWTwvbGl0ZXJhbD4gPC9vcHRp b25hbD4gfCA8bGl0ZXJhbD5PQkpFQ1Q8L2xpdGVyYWw+IH0gfCA8bGl0ZXJhbD5ERUZBVUxUPC9s aXRlcmFsPiA8cmVwbGFjZWFibGU+ZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+IH0gPGxpdGVyYWw+ T04gRVJST1I8L2xpdGVyYWw+IDwvb3B0aW9uYWw+KQorICAgICAgPC9wYXJhPgorICAgICAgIDxw YXJhPgorICAgICAgICBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgdGhlCisgICAgICAg IDxyZXBsYWNlYWJsZT5wYXRoX2V4cHJlc3Npb248L3JlcGxhY2VhYmxlPiB0byB0aGUKKyAgICAg ICAgPHJlcGxhY2VhYmxlPmNvbnRleHRfaXRlbTwvcmVwbGFjZWFibGU+IHVzaW5nIHRoZQorICAg ICAgICA8bGl0ZXJhbD5QQVNTSU5HPC9saXRlcmFsPiA8cmVwbGFjZWFibGU+dmFsdWU8L3JlcGxh Y2VhYmxlPnMuCisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBJZiB0aGUg cGF0aCBleHByZXNzaW9uIHJldHVybnMgbXVsdGlwbGUgU1FML0pTT04gaXRlbXMsIGl0IG1pZ2h0 IGJlCisgICAgICAgIG5lY2Vzc2FyeSB0byB3cmFwIHRoZSByZXN1bHQgdXNpbmcgdGhlIDxsaXRl cmFsPldJVEggV1JBUFBFUjwvbGl0ZXJhbD4KKyAgICAgICAgY2xhdXNlIHRvIG1ha2UgaXQgYSB2 YWxpZCBKU09OIHN0cmluZy4gIElmIHRoZSB3cmFwcGVyIGlzCisgICAgICAgIDxsaXRlcmFsPlVO Q09ORElUSU9OQUw8L2xpdGVyYWw+LCBhbiBhcnJheSB3cmFwcGVyIHdpbGwgYWx3YXlzIGJlCisg ICAgICAgIGFwcGxpZWQsIGV2ZW4gaWYgdGhlIHJldHVybmVkIHZhbHVlIGlzIGFscmVhZHkgYSBz aW5nbGUgSlNPTiBvYmplY3QKKyAgICAgICAgb3IgYW4gYXJyYXkuICBJZiBpdCBpcyA8bGl0ZXJh bD5DT05ESVRJT05BTDwvbGl0ZXJhbD4sIGl0IHdpbGwgbm90IGJlCisgICAgICAgIGFwcGxpZWQg dG8gYSBzaW5nbGUgSlNPTiBvYmplY3Qgb3IgYW4gYXJyYXkuCisgICAgICAgIDxsaXRlcmFsPlVO Q09ORElUSU9OQUw8L2xpdGVyYWw+IGlzIHRoZSBkZWZhdWx0LgorICAgICAgIDwvcGFyYT4KKyAg ICAgICA8cGFyYT4KKyAgICAgICAgSWYgdGhlIHJlc3VsdCBpcyBhIHNjYWxhciBzdHJpbmcsIGJ5 IGRlZmF1bHQsIHRoZSByZXR1cm5lZCB2YWx1ZSB3aWxsCisgICAgICAgIGJlIHN1cnJvdW5kZWQg YnkgcXVvdGVzLCBtYWtpbmcgaXQgYSB2YWxpZCBKU09OIHZhbHVlLiAgSXQgY2FuIGJlIG1hZGUK KyAgICAgICAgZXhwbGljaXQgYnkgc3BlY2lmeWluZyA8bGl0ZXJhbD5LRUVQIFFVT1RFUzwvbGl0 ZXJhbD4uICBDb252ZXJzZWx5LAorICAgICAgICBxdW90ZXMgY2FuIGJlIG9taXR0ZWQgYnkgc3Bl Y2lmeWluZyA8bGl0ZXJhbD5PTUlUIFFVT1RFUzwvbGl0ZXJhbD4uCisgICAgICAgIE5vdGUgdGhh dCA8bGl0ZXJhbD5PTUlUIFFVT1RFUzwvbGl0ZXJhbD4gY2Fubm90IGJlIHNwZWNpZmllZCB3aGVu CisgICAgICAgIDxsaXRlcmFsPldJVEggV1JBUFBFUjwvbGl0ZXJhbD4gaXMgYWxzbyBzcGVjaWZp ZWQuCisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBUaGUgPGxpdGVyYWw+ UkVUVVJOSU5HPC9saXRlcmFsPiBjbGF1c2UgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUKKyAg ICAgICAgPHJlcGxhY2VhYmxlPmRhdGFfdHlwZTwvcmVwbGFjZWFibGU+IG9mIHRoZSByZXN1bHQg dmFsdWUuICBJdCBtdXN0CisgICAgICAgIGJlIGEgdHlwZSBmb3Igd2hpY2ggdGhlcmUgaXMgYSBj YXN0IGZyb20gPHR5cGU+dGV4dDwvdHlwZT4gdG8gdGhhdCB0eXBlLgorICAgICAgICBJZiBubyA8 bGl0ZXJhbD5SRVRVUk5JTkc8L2xpdGVyYWw+IGlzIHNwZWNpZmllZCwgdGhlIHJldHVybmVkIHZh bHVlIHdpbGwKKyAgICAgICAgYmUgb2YgdHlwZSA8dHlwZT5qc29uYjwvdHlwZT4uCisgICAgICAg PC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBUaGUgPGxpdGVyYWw+T04gRU1QVFk8L2xp dGVyYWw+IGNsYXVzZSBzcGVjaWZpZXMgdGhlIGJlaGF2aW9yIGlmIHRoZQorICAgICAgICA8cmVw bGFjZWFibGU+cGF0aF9leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4geWllbGRzIG5vIHZhbHVlIGF0 IGFsbDsgdGhlCisgICAgICAgIGRlZmF1bHQgd2hlbiA8bGl0ZXJhbD5PTiBFTVBUWTwvbGl0ZXJh bD4gaXMgbm90IHNwZWNpZmllZCBpcyB0byByZXR1cm4KKyAgICAgICAgYSBudWxsIHZhbHVlLgor ICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxsaXRlcmFsPk9OIEVS Uk9SPC9saXRlcmFsPiBjbGF1c2Ugc3BlY2lmaWVzIHRoZQorICAgICAgICBiZWhhdmlvciBpZiBh biBlcnJvciBvY2N1cnMgd2hlbiBldmFsdWF0aW5nCisgICAgICAgIDxyZXBsYWNlYWJsZT5wYXRo X2V4cHJlc3Npb248L3JlcGxhY2VhYmxlPiwgaW5jbHVkaW5nIHRoZSBvcGVyYXRpb24gdG8KKyAg ICAgICAgY2FzdCB0aGUgcmVzdWx0IHRoZSBvdXRwdXQgdHlwZSwgb3IgZHVyaW5nIHRoZSBleGVj dXRpb24gb2YKKyAgICAgICAgPGxpdGVyYWw+T04gRU1QVFk8L2xpdGVyYWw+IGJlaGF2aW9yICh0 aGF0IHdhcyBjYXVzZWQgYnkgZW1wdHkgcmVzdWx0CisgICAgICAgIG9mIDxyZXBsYWNlYWJsZT5w YXRoX2V4cHJlc3Npb248L3JlcGxhY2VhYmxlPiBldmFsdWF0aW9uKTsgdGhlIGRlZmF1bHQKKyAg ICAgICAgd2hlbiA8bGl0ZXJhbD5PTiBFUlJPUjwvbGl0ZXJhbD4gaXMgbm90IHNwZWNpZmllZCBp cyB0byByZXR1cm4gYSBudWxsCisgICAgICAgIHZhbHVlLgorICAgICAgIDwvcGFyYT4KKyAgICAg ICA8cGFyYT4KKyAgICAgICAgRXhhbXBsZXM6CisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJh PgorICAgICAgICA8bGl0ZXJhbD5zZWxlY3QganNvbl9xdWVyeShqc29uYiAnWzEsWzIsM10sbnVs bF0nLCAnbGF4ICRbKl1bMV0nIFdJVEggQ09ORElUSU9OQUwgV1JBUFBFUik8L2xpdGVyYWw+Cisg ICAgICAgIDxyZXR1cm52YWx1ZT5bM108L3JldHVybnZhbHVlPgorICAgICAgIDwvcGFyYT4KKyAg ICAgICA8cGFyYT4KKyAgICAgICAgPGxpdGVyYWw+c2VsZWN0IGpzb25fcXVlcnkoanNvbmIgJ3si YSI6ICJbMSwgMl0ifScsICdsYXggJC5hJyBPTUlUIFFVT1RFUyk7PC9saXRlcmFsPgorICAgICAg ICA8cmV0dXJudmFsdWU+WzEsIDJdPC9yZXR1cm52YWx1ZT4KKyAgICAgICA8L3BhcmE+CisgICAg ICAgPHBhcmE+CisgICAgICAgIDxsaXRlcmFsPnNlbGVjdCBqc29uX3F1ZXJ5KGpzb25iICd7ImEi OiAiWzEsIDJdIn0nLCAnbGF4ICQuYScgUkVUVVJOSU5HIGludFtdIE9NSVQgUVVPVEVTIEVSUk9S IE9OIEVSUk9SKTs8L2xpdGVyYWw+CisgICAgICAgIDxyZXR1cm52YWx1ZT48L3JldHVybnZhbHVl PgorPHByb2dyYW1saXN0aW5nPgorRVJST1I6ICBtYWxmb3JtZWQgYXJyYXkgbGl0ZXJhbDogIlsx LCAyXSIKK0RFVEFJTDogIE1pc3NpbmcgIl0iIGFmdGVyIGFycmF5IGRpbWVuc2lvbnMuCis8L3By b2dyYW1saXN0aW5nPgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvZW50cnk+CisgICAgIDwvcm93 PgorICAgICA8cm93PgorICAgICAgPGVudHJ5IHJvbGU9ImZ1bmNfdGFibGVfZW50cnkiPjxwYXJh IHJvbGU9ImZ1bmNfc2lnbmF0dXJlIj4KKyAgICAgICAgPGluZGV4dGVybT48cHJpbWFyeT5qc29u X3ZhbHVlPC9wcmltYXJ5PjwvaW5kZXh0ZXJtPgorICAgICAgICA8ZnVuY3Rpb24+anNvbl92YWx1 ZTwvZnVuY3Rpb24+ICgKKyAgICAgICAgPHJlcGxhY2VhYmxlPmNvbnRleHRfaXRlbTwvcmVwbGFj ZWFibGU+LCA8cmVwbGFjZWFibGU+cGF0aF9leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4KKyAgICAg ICAgPG9wdGlvbmFsPiA8bGl0ZXJhbD5QQVNTSU5HPC9saXRlcmFsPiB7IDxyZXBsYWNlYWJsZT52 YWx1ZTwvcmVwbGFjZWFibGU+IDxsaXRlcmFsPkFTPC9saXRlcmFsPiA8cmVwbGFjZWFibGU+dmFy bmFtZTwvcmVwbGFjZWFibGU+IH0gPG9wdGlvbmFsPiwgLi4uPC9vcHRpb25hbD48L29wdGlvbmFs PgorICAgICAgICA8b3B0aW9uYWw+IDxsaXRlcmFsPlJFVFVSTklORzwvbGl0ZXJhbD4gPHJlcGxh Y2VhYmxlPmRhdGFfdHlwZTwvcmVwbGFjZWFibGU+IDwvb3B0aW9uYWw+CisgICAgICAgIDxvcHRp b25hbD4geyA8bGl0ZXJhbD5FUlJPUjwvbGl0ZXJhbD4gfCA8bGl0ZXJhbD5OVUxMPC9saXRlcmFs PiB8IDxsaXRlcmFsPkRFRkFVTFQ8L2xpdGVyYWw+IDxyZXBsYWNlYWJsZT5leHByZXNzaW9uPC9y ZXBsYWNlYWJsZT4gfSA8bGl0ZXJhbD5PTiBFTVBUWTwvbGl0ZXJhbD4gPC9vcHRpb25hbD4KKyAg ICAgICAgPG9wdGlvbmFsPiB7IDxsaXRlcmFsPkVSUk9SPC9saXRlcmFsPiB8IDxsaXRlcmFsPk5V TEw8L2xpdGVyYWw+IHwgPGxpdGVyYWw+REVGQVVMVDwvbGl0ZXJhbD4gPHJlcGxhY2VhYmxlPmV4 cHJlc3Npb248L3JlcGxhY2VhYmxlPiB9IDxsaXRlcmFsPk9OIEVSUk9SPC9saXRlcmFsPiA8L29w dGlvbmFsPikKKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIFJldHVybnMg dGhlIHJlc3VsdCBvZiBhcHBseWluZyB0aGUKKyAgICAgICAgPHJlcGxhY2VhYmxlPnBhdGhfZXhw cmVzc2lvbjwvcmVwbGFjZWFibGU+IHRvIHRoZQorICAgICAgICA8cmVwbGFjZWFibGU+Y29udGV4 dF9pdGVtPC9yZXBsYWNlYWJsZT4gdXNpbmcgdGhlCisgICAgICAgIDxsaXRlcmFsPlBBU1NJTkc8 L2xpdGVyYWw+IDxyZXBsYWNlYWJsZT52YWx1ZTwvcmVwbGFjZWFibGU+cy4KKyAgICAgICA8L3Bh cmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBleHRyYWN0ZWQgdmFsdWUgbXVzdCBiZSBh IHNpbmdsZSA8YWNyb255bT5TUUwvSlNPTjwvYWNyb255bT4KKyAgICAgICAgc2NhbGFyIGl0ZW0u IEZvciByZXN1bHRzIHRoYXQgYXJlIG9iamVjdHMgb3IgYXJyYXlzLCB1c2UgdGhlCisgICAgICAg IDxmdW5jdGlvbj5qc29uX3F1ZXJ5PC9mdW5jdGlvbj4gZnVuY3Rpb24gaW5zdGVhZC4KKyAgICAg ICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIFRoZSA8bGl0ZXJhbD5SRVRVUk5JTkc8 L2xpdGVyYWw+IGNsYXVzZSBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZQorICAgICAgICA8cmVw bGFjZWFibGU+ZGF0YV90eXBlPC9yZXBsYWNlYWJsZT4gb2YgdGhlIHJlc3VsdCB2YWx1ZS4gIEl0 IG11c3QKKyAgICAgICAgYmUgYSB0eXBlIGZvciB3aGljaCB0aGVyZSBleGlzdCBjYXN0cyBmcm9t IGFsbCBwb3NzaWJsZSBKU09OIHNjYWxhcgorICAgICAgICB2YWx1ZSB0eXBlcyAoPHR5cGU+dGV4 dDwvdHlwZT4sIDx0eXBlPmJvb2xlYW48L3R5cGU+LCA8dHlwZT5udW1lcmljPC90eXBlPiwKKyAg ICAgICAgYW5kIHZhcmlvdXMgZGF0ZXRpbWUgdHlwZXMpIHRvIHRoYXQgdHlwZS4gIEJ5IGRlZmF1 bHQsIHRoZSByZXR1cm5lZAorICAgICAgICB2YWx1ZSB3aWxsIGJlIG9mIHR5cGUgPHR5cGU+dGV4 dDwvdHlwZT4uCisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBUaGUgPGxp dGVyYWw+T04gRVJST1I8L2xpdGVyYWw+IGFuZCA8bGl0ZXJhbD5PTiBFTVBUWTwvbGl0ZXJhbD4K KyAgICAgICAgY2xhdXNlcyBoYXZlIHNpbWlsYXIgc2VtYW50aWNzIGFzIG1lbnRpb25lZCBpbiB0 aGUgZGVzY3JpcHRpb24gb2YKKyAgICAgICAgPGZ1bmN0aW9uPmpzb25fcXVlcnk8L2Z1bmN0aW9u Pi4KKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIE5vdGUgdGhhdCBzY2Fs YXIgc3RyaW5ncyByZXR1cm5lZCBieSA8ZnVuY3Rpb24+anNvbl92YWx1ZTwvZnVuY3Rpb24+Cisg ICAgICAgIGFsd2F5cyBoYXZlIHRoZWlyIHF1b3RlcyByZW1vdmVkLCBlcXVpdmFsZW50IHRvIHNw ZWNpZnlpbmcKKyAgICAgICAgPGxpdGVyYWw+T01JVCBRVU9URVM8L2xpdGVyYWw+IGluIDxmdW5j dGlvbj5qc29uX3F1ZXJ5PC9mdW5jdGlvbj4uCisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJh PgorICAgICAgICBFeGFtcGxlczoKKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAg ICAgIDxsaXRlcmFsPnNlbGVjdCBqc29uX3ZhbHVlKGpzb25iICciMTIzLjQ1IicsICckJyBSRVRV Uk5JTkcgZmxvYXQpPC9saXRlcmFsPgorICAgICAgICA8cmV0dXJudmFsdWU+MTIzLjQ1PC9yZXR1 cm52YWx1ZT4KKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIDxsaXRlcmFs PnNlbGVjdCBqc29uX3ZhbHVlKGpzb25iICciMDM6MDQgMjAxNS0wMi0wMSInLCAnJC5kYXRldGlt ZSgiSEgyNDpNSSZuYnNwO1lZWVktTU0tREQiKScgUkVUVVJOSU5HIGRhdGUpPC9saXRlcmFsPgor ICAgICAgICA8cmV0dXJudmFsdWU+MjAxNS0wMi0wMTwvcmV0dXJudmFsdWU+CisgICAgICAgPC9w YXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICA8bGl0ZXJhbD5zZWxlY3QganNvbl92YWx1ZShq c29uYiAnWzEsMl0nLCAnc3RyaWN0ICRbKl0nIERFRkFVTFQgOSBPTiBFUlJPUik8L2xpdGVyYWw+ CisgICAgICAgIDxyZXR1cm52YWx1ZT45PC9yZXR1cm52YWx1ZT4KKyAgICAgIDwvcGFyYT48L2Vu dHJ5PgorICAgICA8L3Jvdz4KKyAgICA8L3Rib2R5PgorICAgPC90Z3JvdXA+CisgIDwvdGFibGU+ CisgIDwvc2VjdDI+CiAgPC9zZWN0MT4KIAogIDxzZWN0MSBpZD0iZnVuY3Rpb25zLXNlcXVlbmNl Ij4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3FsX2ZlYXR1cmVzLnR4dCBiL3Ny Yy9iYWNrZW5kL2NhdGFsb2cvc3FsX2ZlYXR1cmVzLnR4dAppbmRleCA5MjVkMTVhMmMzLi44MGFj NTlmYmE0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL3NxbF9mZWF0dXJlcy50eHQK KysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9zcWxfZmVhdHVyZXMudHh0CkBAIC01NDcsMTUgKzU0 NywxNSBAQCBUODExCUJhc2ljIFNRTC9KU09OIGNvbnN0cnVjdG9yIGZ1bmN0aW9ucwkJCVlFUwog VDgxMglTUUwvSlNPTjogSlNPTl9PQkpFQ1RBR0cJCQlZRVMJCiBUODEzCVNRTC9KU09OOiBKU09O X0FSUkFZQUdHIHdpdGggT1JERVIgQlkJCQlZRVMJCiBUODE0CUNvbG9uIGluIEpTT05fT0JKRUNU IG9yIEpTT05fT0JKRUNUQUdHCQkJWUVTCQotVDgyMQlCYXNpYyBTUUwvSlNPTiBxdWVyeSBvcGVy YXRvcnMJCQlOTwkKK1Q4MjEJQmFzaWMgU1FML0pTT04gcXVlcnkgb3BlcmF0b3JzCQkJWUVTCQog VDgyMglTUUwvSlNPTjogSVMgSlNPTiBXSVRIIFVOSVFVRSBLRVlTIHByZWRpY2F0ZQkJCVlFUwkK LVQ4MjMJU1FML0pTT046IFBBU1NJTkcgY2xhdXNlCQkJTk8JCitUODIzCVNRTC9KU09OOiBQQVNT SU5HIGNsYXVzZQkJCVlFUwkKIFQ4MjQJSlNPTl9UQUJMRTogc3BlY2lmaWMgUExBTiBjbGF1c2UJ CQlOTwkKLVQ4MjUJU1FML0pTT046IE9OIEVNUFRZIGFuZCBPTiBFUlJPUiBjbGF1c2VzCQkJTk8J Ci1UODI2CUdlbmVyYWwgdmFsdWUgZXhwcmVzc2lvbiBpbiBPTiBFUlJPUiBvciBPTiBFTVBUWSBj bGF1c2VzCQkJTk8JCitUODI1CVNRTC9KU09OOiBPTiBFTVBUWSBhbmQgT04gRVJST1IgY2xhdXNl cwkJCVlFUwkKK1Q4MjYJR2VuZXJhbCB2YWx1ZSBleHByZXNzaW9uIGluIE9OIEVSUk9SIG9yIE9O IEVNUFRZIGNsYXVzZXMJCQlZRVMJCiBUODI3CUpTT05fVEFCTEU6IHNpYmxpbmcgTkVTVEVEIENP TFVNTlMgY2xhdXNlcwkJCU5PCQotVDgyOAlKU09OX1FVRVJZCQkJTk8JCi1UODI5CUpTT05fUVVF Ulk6IGFycmF5IHdyYXBwZXIgb3B0aW9ucwkJCU5PCQorVDgyOAlKU09OX1FVRVJZCQkJWUVTCQor VDgyOQlKU09OX1FVRVJZOiBhcnJheSB3cmFwcGVyIG9wdGlvbnMJCQlZRVMJCiBUODMwCUVuZm9y Y2luZyB1bmlxdWUga2V5cyBpbiBTUUwvSlNPTiBjb25zdHJ1Y3RvciBmdW5jdGlvbnMJCQlZRVMJ CiBUODMxCVNRTC9KU09OIHBhdGggbGFuZ3VhZ2U6IHN0cmljdCBtb2RlCQkJWUVTCQogVDgzMglT UUwvSlNPTiBwYXRoIGxhbmd1YWdlOiBpdGVtIG1ldGhvZAkJCVlFUwkKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHByLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVj RXhwci5jCmluZGV4IDcyOGM4ZDVmZGEuLmU1YzkyZWZkNjEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL2V4ZWNFeHByLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4 cHIuYwpAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUgInV0aWxzL2FycmF5LmgiCiAjaW5jbHVk ZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9qc29uZnVuY3MuaCIKKyNpbmNs dWRlICJ1dGlscy9qc29ucGF0aC5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogI2lu Y2x1ZGUgInV0aWxzL3R5cGNhY2hlLmgiCiAKQEAgLTg3LDYgKzg4LDEyIEBAIHN0YXRpYyB2b2lk IEV4ZWNCdWlsZEFnZ1RyYW5zQ2FsbChFeHByU3RhdGUgKnN0YXRlLCBBZ2dTdGF0ZSAqYWdnc3Rh dGUsCiAJCQkJCQkJCSAgRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sIEFnZ1N0YXRlUGVyVHJhbnMg cGVydHJhbnMsCiAJCQkJCQkJCSAgaW50IHRyYW5zbm8sIGludCBzZXRubywgaW50IHNldG9mZiwg Ym9vbCBpc2hhc2gsCiAJCQkJCQkJCSAgYm9vbCBudWxsY2hlY2spOworc3RhdGljIHZvaWQgRXhl Y0luaXRKc29uRXhwcihKc29uRXhwciAqamV4cHIsIEV4cHJTdGF0ZSAqc3RhdGUsCisJCQkJCQkJ IERhdHVtICpyZXN2LCBib29sICpyZXNudWxsLAorCQkJCQkJCSBFeHByRXZhbFN0ZXAgKnNjcmF0 Y2gpOworc3RhdGljIGludAlFeGVjSW5pdEpzb25FeHByQ29lcmNpb24oRXhwclN0YXRlICpzdGF0 ZSwgTm9kZSAqY29lcmNpb24sCisJCQkJCQkJCQkgRXJyb3JTYXZlQ29udGV4dCAqZXNjb250ZXh0 LAorCQkJCQkJCQkJIERhdHVtICpyZXN2LCBib29sICpyZXNudWxsKTsKIAogCiAvKgpAQCAtMjQy NSw2ICsyNDMyLDE0IEBAIEV4ZWNJbml0RXhwclJlYyhFeHByICpub2RlLCBFeHByU3RhdGUgKnN0 YXRlLAogCQkJCWJyZWFrOwogCQkJfQogCisJCWNhc2UgVF9Kc29uRXhwcjoKKwkJCXsKKwkJCQlK c29uRXhwciAgICpqZXhwciA9IGNhc3ROb2RlKEpzb25FeHByLCBub2RlKTsKKworCQkJCUV4ZWNJ bml0SnNvbkV4cHIoamV4cHIsIHN0YXRlLCByZXN2LCByZXNudWxsLCAmc2NyYXRjaCk7CisJCQkJ YnJlYWs7CisJCQl9CisKIAkJY2FzZSBUX051bGxUZXN0OgogCQkJewogCQkJCU51bGxUZXN0ICAg Km50ZXN0ID0gKE51bGxUZXN0ICopIG5vZGU7CkBAIC00MTkzLDMgKzQyMDgsMzIyIEBAIEV4ZWNC dWlsZFBhcmFtU2V0RXF1YWwoVHVwbGVEZXNjIGRlc2MsCiAKIAlyZXR1cm4gc3RhdGU7CiB9CisK Ky8qCisgKiBQdXNoIHN0ZXBzIHRvIGV2YWx1YXRlIGEgSnNvbkV4cHIgYW5kIGl0cyB2YXJpb3Vz IHN1YnNpZGlhcnkgZXhwcmVzc2lvbnMuCisgKi8KK3N0YXRpYyB2b2lkCitFeGVjSW5pdEpzb25F eHByKEpzb25FeHByICpqZXhwciwgRXhwclN0YXRlICpzdGF0ZSwKKwkJCQkgRGF0dW0gKnJlc3Ys IGJvb2wgKnJlc251bGwsCisJCQkJIEV4cHJFdmFsU3RlcCAqc2NyYXRjaCkKK3sKKwlKc29uRXhw clN0YXRlICpqc2VzdGF0ZSA9IHBhbGxvYzAoc2l6ZW9mKEpzb25FeHByU3RhdGUpKTsKKwlMaXN0 Q2VsbCAgICphcmdleHBybGM7CisJTGlzdENlbGwgICAqYXJnbmFtZWxjOworCUxpc3QJICAgKmp1 bXBzX2lmX3NraXAgPSBOSUw7CisJTGlzdAkgICAqanVtcHNfdG9fY29lcmNlX2ZpbmlzaCA9IE5J TDsKKwlMaXN0CSAgICpqdW1wc190b19lbmQgPSBOSUw7CisJTGlzdENlbGwgICAqbGM7CisJRXhw ckV2YWxTdGVwICphczsKKworCWpzZXN0YXRlLT5qc2V4cHIgPSBqZXhwcjsKKworCS8qCisJICog RXZhbHVhdGUgZm9ybWF0dGVkX2V4cHIgc3RvcmluZyB0aGUgcmVzdWx0IGludG8KKwkgKiBqc2Vz dGF0ZS0+Zm9ybWF0dGVkX2V4cHIuCisJICovCisJRXhlY0luaXRFeHByUmVjKChFeHByICopIGpl eHByLT5mb3JtYXR0ZWRfZXhwciwgc3RhdGUsCisJCQkJCSZqc2VzdGF0ZS0+Zm9ybWF0dGVkX2V4 cHIudmFsdWUsCisJCQkJCSZqc2VzdGF0ZS0+Zm9ybWF0dGVkX2V4cHIuaXNudWxsKTsKKworCS8q IFN0ZXBzIHRvIGp1bXAgdG8gZW5kIGlmIGZvcm1hdHRlZF9leHByIGV2YWx1YXRlcyB0byBOVUxM ICovCisJc2NyYXRjaC0+b3Bjb2RlID0gRUVPUF9KVU1QX0lGX05VTEw7CisJc2NyYXRjaC0+cmVz bnVsbCA9ICZqc2VzdGF0ZS0+Zm9ybWF0dGVkX2V4cHIuaXNudWxsOworCXNjcmF0Y2gtPmQuanVt cC5qdW1wZG9uZSA9IC0xOwkvKiBzZXQgYmVsb3cgKi8KKwlqdW1wc19pZl9za2lwID0gbGFwcGVu ZF9pbnQoanVtcHNfaWZfc2tpcCwgc3RhdGUtPnN0ZXBzX2xlbik7CisJRXhwckV2YWxQdXNoU3Rl cChzdGF0ZSwgc2NyYXRjaCk7CisKKwkvKgorCSAqIEV2YWx1YXRlIHBhdGhzcGVjIGV4cHJlc3Np b24gc3RvcmluZyB0aGUgcmVzdWx0IGludG8KKwkgKiBqc2VzdGF0ZS0+cGF0aHNwZWMuCisJICov CisJRXhlY0luaXRFeHByUmVjKChFeHByICopIGpleHByLT5wYXRoX3NwZWMsIHN0YXRlLAorCQkJ CQkmanNlc3RhdGUtPnBhdGhzcGVjLnZhbHVlLAorCQkJCQkmanNlc3RhdGUtPnBhdGhzcGVjLmlz bnVsbCk7CisKKwkvKiBTdGVwcyB0byBKVU1QIHRvIGVuZCBpZiBwYXRoc3BlYyBldmFsdWF0ZXMg dG8gTlVMTCAqLworCXNjcmF0Y2gtPm9wY29kZSA9IEVFT1BfSlVNUF9JRl9OVUxMOworCXNjcmF0 Y2gtPnJlc251bGwgPSAmanNlc3RhdGUtPnBhdGhzcGVjLmlzbnVsbDsKKwlzY3JhdGNoLT5kLmp1 bXAuanVtcGRvbmUgPSAtMTsJLyogc2V0IGJlbG93ICovCisJanVtcHNfaWZfc2tpcCA9IGxhcHBl bmRfaW50KGp1bXBzX2lmX3NraXAsIHN0YXRlLT5zdGVwc19sZW4pOworCUV4cHJFdmFsUHVzaFN0 ZXAoc3RhdGUsIHNjcmF0Y2gpOworCisJLyogU3RlcHMgdG8gY29tcHV0ZSBQQVNTSU5HIGFyZ3Mu ICovCisJanNlc3RhdGUtPmFyZ3MgPSBOSUw7CisJZm9yYm90aChhcmdleHBybGMsIGpleHByLT5w YXNzaW5nX3ZhbHVlcywKKwkJCWFyZ25hbWVsYywgamV4cHItPnBhc3NpbmdfbmFtZXMpCisJewor CQlFeHByCSAgICphcmdleHByID0gKEV4cHIgKikgbGZpcnN0KGFyZ2V4cHJsYyk7CisJCVN0cmlu ZwkgICAqYXJnbmFtZSA9IGxmaXJzdF9ub2RlKFN0cmluZywgYXJnbmFtZWxjKTsKKwkJSnNvblBh dGhWYXJpYWJsZSAqdmFyID0gcGFsbG9jKHNpemVvZigqdmFyKSk7CisKKwkJdmFyLT5uYW1lID0g YXJnbmFtZS0+c3ZhbDsKKwkJdmFyLT50eXBpZCA9IGV4cHJUeXBlKChOb2RlICopIGFyZ2V4cHIp OworCQl2YXItPnR5cG1vZCA9IGV4cHJUeXBtb2QoKE5vZGUgKikgYXJnZXhwcik7CisKKwkJRXhl Y0luaXRFeHByUmVjKChFeHByICopIGFyZ2V4cHIsIHN0YXRlLCAmdmFyLT52YWx1ZSwgJnZhci0+ aXNudWxsKTsKKworCQlqc2VzdGF0ZS0+YXJncyA9IGxhcHBlbmQoanNlc3RhdGUtPmFyZ3MsIHZh cik7CisJfQorCisJLyogU3RlcCBmb3IganNvbnBhdGggZXZhbHVhdGlvbjsgc2VlIEV4ZWNFdmFs SnNvbkV4cHJQYXRoKCkuICovCisJc2NyYXRjaC0+b3Bjb2RlID0gRUVPUF9KU09ORVhQUl9QQVRI OworCXNjcmF0Y2gtPnJlc3ZhbHVlID0gcmVzdjsKKwlzY3JhdGNoLT5yZXNudWxsID0gcmVzbnVs bDsKKwlzY3JhdGNoLT5kLmpzb25leHByLmpzZXN0YXRlID0ganNlc3RhdGU7CisJRXhwckV2YWxQ dXNoU3RlcChzdGF0ZSwgc2NyYXRjaCk7CisKKwkvKgorCSAqIFN0ZXAgdG8gcmV0dXJuIE5VTEwg c2tpcHBpbmcgdGhlIEVFT1BfSlNPTkVYUFJfUEFUSCBzdGVwIHdoZW4gZWl0aGVyCisJICogZm9y bWF0dGVkX2V4cHIgb3IgcGF0aHNwZWMgaXMgTlVMTC4gIEFkanVzdCBqdW1wIHRhcmdldCBhZGRy ZXNzZXMgb2YKKwkgKiBKVU1QcyB0aGF0IHdlIGFkZGVkIGFib3ZlLgorCSAqLworCWZvcmVhY2go bGMsIGp1bXBzX2lmX3NraXApCisJeworCQlhcyA9ICZzdGF0ZS0+c3RlcHNbbGZpcnN0X2ludChs YyldOworCQlhcy0+ZC5qdW1wLmp1bXBkb25lID0gc3RhdGUtPnN0ZXBzX2xlbjsKKwl9CisJc2Ny YXRjaC0+b3Bjb2RlID0gRUVPUF9DT05TVDsKKwlzY3JhdGNoLT5yZXN2YWx1ZSA9IHJlc3Y7CisJ c2NyYXRjaC0+cmVzbnVsbCA9IHJlc251bGw7CisJc2NyYXRjaC0+ZC5jb25zdHZhbC52YWx1ZSA9 IChEYXR1bSkgMDsKKwlzY3JhdGNoLT5kLmNvbnN0dmFsLmlzbnVsbCA9IHRydWU7CisJRXhwckV2 YWxQdXNoU3RlcChzdGF0ZSwgc2NyYXRjaCk7CisKKwkvKiBKdW1wIHRvIGNvZXJjZSB0aGUgTlVM TCB1c2luZyByZXN1bHRfY29lcmNpb24gaWYgcHJlc2VudC4gKi8KKwlpZiAoamV4cHItPnJlc3Vs dF9jb2VyY2lvbikKKwl7CisJCXNjcmF0Y2gtPm9wY29kZSA9IEVFT1BfSlVNUDsKKwkJc2NyYXRj aC0+ZC5qdW1wLmp1bXBkb25lID0gc3RhdGUtPnN0ZXBzX2xlbiArIDE7CisJCUV4cHJFdmFsUHVz aFN0ZXAoc3RhdGUsIHNjcmF0Y2gpOworCX0KKworCS8qCisJICogU3RlcHMgdG8gY29lcmNlIHRo ZSByZXN1bHQgdmFsdWUgY29tcHV0ZWQgYnkgRUVPUF9KU09ORVhQUl9QQVRILiBUbworCSAqIGhh bmRsZSBjb2VyY2lvbiBlcnJvcnMgc29mdGx5LCB1c2UgdGhlIGZvbGxvd2luZyBFcnJvclNhdmVD b250ZXh0IHdoZW4KKwkgKiBpbml0aWFsaXppbmcgdGhlIGNvZXJjaW9uIGV4cHJlc3Npb25zLCBp bmNsdWRpbmcgYW55IEpzb25Db2VyY2lvbgorCSAqIG5vZGVzLgorCSAqLworCWpzZXN0YXRlLT5l c2NvbnRleHQudHlwZSA9IFRfRXJyb3JTYXZlQ29udGV4dDsKKwlpZiAoamV4cHItPnJlc3VsdF9j b2VyY2lvbikKKwl7CisJCWpzZXN0YXRlLT5qdW1wX2V2YWxfcmVzdWx0X2NvZXJjaW9uID0KKwkJ CUV4ZWNJbml0SnNvbkV4cHJDb2VyY2lvbihzdGF0ZSwgamV4cHItPnJlc3VsdF9jb2VyY2lvbiwK KwkJCQkJCQkJCSBqZXhwci0+b25fZXJyb3ItPmJ0eXBlICE9IEpTT05fQkVIQVZJT1JfRVJST1Ig PworCQkJCQkJCQkJICZqc2VzdGF0ZS0+ZXNjb250ZXh0IDogTlVMTCwKKwkJCQkJCQkJCSByZXN2 LCByZXNudWxsKTsKKwkJLyogSnVtcCB0byBDT0VSQ0lPTl9GSU5JU0guICovCisJCXNjcmF0Y2gt Pm9wY29kZSA9IEVFT1BfSlVNUDsKKwkJc2NyYXRjaC0+ZC5qdW1wLmp1bXBkb25lID0gLTE7CS8q IHNldCBiZWxvdyAqLworCQlqdW1wc190b19jb2VyY2VfZmluaXNoID0gbGFwcGVuZF9pbnQoanVt cHNfdG9fY29lcmNlX2ZpbmlzaCwKKwkJCQkJCQkJCQkJIHN0YXRlLT5zdGVwc19sZW4pOworCQlF eHByRXZhbFB1c2hTdGVwKHN0YXRlLCBzY3JhdGNoKTsKKwl9CisJZWxzZQorCQlqc2VzdGF0ZS0+ anVtcF9ldmFsX3Jlc3VsdF9jb2VyY2lvbiA9IC0xOworCisJLyogU3RlcHMgZm9yIGNvZXJjaW5n IEpzb25JdGVtVHlwZSB2YWx1ZXMgcmV0dXJuZWQgYnkgSnNvblBhdGhWYWx1ZSgpLiAqLworCWlm IChqZXhwci0+aXRlbV9jb2VyY2lvbnMpCisJeworCQkvKgorCQkgKiBIZXJlIHdlIGNyZWF0ZSB0 aGUgc3RlcHMgZm9yIGVhY2ggSnNvbkl0ZW1UeXBlIHR5cGUncyBjb2VyY2lvbgorCQkgKiBleHBy ZXNzaW9uIGFuZCBhbHNvIHN0b3JlIGEgZmxhZyB3aGV0aGVyIHRoZSBjb2VyY2lvbiBpcyBhIGNh c3QKKwkJICogZXhwcmVzc2lvbi4gIEV4ZWNQcmVwYXJlSnNvbkl0ZW1Db2VyY2lvbigpIGNhbGxl ZCBieQorCQkgKiBFeGVjRXZhbEpzb25FeHByUGF0aCgpIHdpbGwgbWFwIGEgZ2l2ZW4gSnNvbmJW YWx1ZSByZXR1cm5lZCBieQorCQkgKiBKc29uUGF0aFZhbHVlKCkgdG8gaXRzICBKc29uSXRlbVR5 cGUncyBleHByZXNzaW9uJ3Mgc3RlcCBhZGRyZXNzCisJCSAqIGFuZCB0aGUgZmxhZyBieSBpbmRl eGluZyB0aGUgZm9sbG93aW5nIGFycmF5cyB3aXRoIEpzb25JdGVtVHlwZQorCQkgKiBlbnVtIHZh bHVlLgorCQkgKi8KKwkJanNlc3RhdGUtPm51bV9pdGVtX2NvZXJjaW9ucyA9IGxpc3RfbGVuZ3Ro KGpleHByLT5pdGVtX2NvZXJjaW9ucyk7CisJCWpzZXN0YXRlLT5ldmFsX2l0ZW1fY29lcmNpb25f anVtcHMgPSAoaW50ICopCisJCQlwYWxsb2MoanNlc3RhdGUtPm51bV9pdGVtX2NvZXJjaW9ucyAq IHNpemVvZihpbnQpKTsKKwkJanNlc3RhdGUtPml0ZW1fY29lcmNpb25faXNfY2FzdCA9IChib29s ICopCisJCQlwYWxsb2MwKGpzZXN0YXRlLT5udW1faXRlbV9jb2VyY2lvbnMgKiBzaXplb2YoYm9v bCkpOworCQlmb3JlYWNoKGxjLCBqZXhwci0+aXRlbV9jb2VyY2lvbnMpCisJCXsKKwkJCUpzb25J dGVtQ29lcmNpb24gKml0ZW1fY29lcmNpb24gPSBsZmlyc3QobGMpOworCQkJTm9kZQkgICAqY29l cmNpb24gPSBpdGVtX2NvZXJjaW9uLT5jb2VyY2lvbjsKKworCQkJanNlc3RhdGUtPml0ZW1fY29l cmNpb25faXNfY2FzdFtpdGVtX2NvZXJjaW9uLT5pdGVtX3R5cGVdID0KKwkJCQkoY29lcmNpb24g IT0gTlVMTCAmJiAhSXNBKGNvZXJjaW9uLCBKc29uQ29lcmNpb24pKTsKKwkJCWpzZXN0YXRlLT5l dmFsX2l0ZW1fY29lcmNpb25fanVtcHNbaXRlbV9jb2VyY2lvbi0+aXRlbV90eXBlXSA9CisJCQkJ RXhlY0luaXRKc29uRXhwckNvZXJjaW9uKHN0YXRlLCBjb2VyY2lvbiwKKwkJCQkJCQkJCQkgamV4 cHItPm9uX2Vycm9yLT5idHlwZSAhPSBKU09OX0JFSEFWSU9SX0VSUk9SID8KKwkJCQkJCQkJCQkg JmpzZXN0YXRlLT5lc2NvbnRleHQgOiBOVUxMLAorCQkJCQkJCQkJCSByZXN2LCByZXNudWxsKTsK KworCQkJLyogSnVtcCB0byBDT0VSQ0lPTl9GSU5JU0guICovCisJCQlzY3JhdGNoLT5vcGNvZGUg PSBFRU9QX0pVTVA7CisJCQlzY3JhdGNoLT5kLmp1bXAuanVtcGRvbmUgPSAtMTsJLyogc2V0IGJl bG93ICovCisJCQlqdW1wc190b19jb2VyY2VfZmluaXNoID0gbGFwcGVuZF9pbnQoanVtcHNfdG9f Y29lcmNlX2ZpbmlzaCwKKwkJCQkJCQkJCQkJCSBzdGF0ZS0+c3RlcHNfbGVuKTsKKwkJCUV4cHJF dmFsUHVzaFN0ZXAoc3RhdGUsIHNjcmF0Y2gpOworCQl9CisJfQorCisJLyoKKwkgKiBBZGQgc3Rl cCB0byByZXNldCB0aGUgRXJyb3JTYXZlQ29udGV4dCBhbmQgc2V0IEpzb25FeHByU3RhdGUuZXJy b3IgaWYKKwkgKiB0aGUgY29lcmNpb24gZXZhbHVhdGlvbiByYW4gaW50byBhbiBlcnJvciBidXQg d2FzIG5vdCB0aHJvd24gYmVjYXVzZSBvZgorCSAqIHRoZSBPTiBFUlJPUiBiZWhhdmlvci4KKwkg Ki8KKwlpZiAoamV4cHItPnJlc3VsdF9jb2VyY2lvbiB8fCBqZXhwci0+aXRlbV9jb2VyY2lvbnMp CisJeworCQlmb3JlYWNoKGxjLCBqdW1wc190b19jb2VyY2VfZmluaXNoKQorCQl7CisJCQlhcyA9 ICZzdGF0ZS0+c3RlcHNbbGZpcnN0X2ludChsYyldOworCQkJYXMtPmQuanVtcC5qdW1wZG9uZSA9 IHN0YXRlLT5zdGVwc19sZW47CisJCX0KKworCQlzY3JhdGNoLT5vcGNvZGUgPSBFRU9QX0pTT05F WFBSX0NPRVJDSU9OX0ZJTklTSDsKKwkJc2NyYXRjaC0+ZC5qc29uZXhwci5qc2VzdGF0ZSA9IGpz ZXN0YXRlOworCQlFeHByRXZhbFB1c2hTdGVwKHN0YXRlLCBzY3JhdGNoKTsKKwl9CisKKwlqc2Vz dGF0ZS0+anVtcF9lbXB0eSA9IGpzZXN0YXRlLT5qdW1wX2Vycm9yID0gLTE7CisKKwkvKgorCSAq IFN0ZXAgdG8gaGFuZGxlIE9OIEVSUk9SIGJlaGF2aW9ycy4gIFRoaXMgaGFuZGxlcyBib3RoIHRo ZSBlcnJvcnMgdGhhdAorCSAqIG9jY3VyIGR1cmluZyBFRU9QX0pTT05FWFBSX1BBVEggZXZhbHVh dGlvbiBhbmQgc3Vic2VxdWVudCBjb2VyY2lvbgorCSAqIGV2YWx1YXRpb24uCisJICovCisJaWYg KGpleHByLT5vbl9lcnJvciAmJgorCQlqZXhwci0+b25fZXJyb3ItPmJ0eXBlICE9IEpTT05fQkVI QVZJT1JfRVJST1IpCisJeworCQlqc2VzdGF0ZS0+anVtcF9lcnJvciA9IHN0YXRlLT5zdGVwc19s ZW47CisJCXNjcmF0Y2gtPm9wY29kZSA9IEVFT1BfSlVNUF9JRl9OT1RfVFJVRTsKKworCQkvKgor CQkgKiBqc2VzdGF0ZS5lcnJvciBpcyBzZXQgYnkgRXhlY0V2YWxKc29uRXhwclBhdGgoKSBhbmQK KwkJICogRXhlY0V2YWxKc29uQ29lcmNpb25GaW5pc2goKS4KKwkJICovCisJCXNjcmF0Y2gtPnJl c3ZhbHVlID0gJmpzZXN0YXRlLT5lcnJvci52YWx1ZTsKKwkJc2NyYXRjaC0+cmVzbnVsbCA9ICZq c2VzdGF0ZS0+ZXJyb3IuaXNudWxsOworCQlzY3JhdGNoLT5kLmp1bXAuanVtcGRvbmUgPSAtMTsJ Lyogc2V0IGJlbG93ICovCisJCWp1bXBzX3RvX2VuZCA9IGxhcHBlbmRfaW50KGp1bXBzX3RvX2Vu ZCwgc3RhdGUtPnN0ZXBzX2xlbik7CisJCUV4cHJFdmFsUHVzaFN0ZXAoc3RhdGUsIHNjcmF0Y2gp OworCisJCS8qIFN0ZXBzIHRvIGV2YWx1YXRlIHRoZSBPTiBFUlJPUiBleHByZXNzaW9uICovCisJ CUV4ZWNJbml0RXhwclJlYygoRXhwciAqKSBqZXhwci0+b25fZXJyb3ItPmV4cHIsCisJCQkJCQlz dGF0ZSwgcmVzdiwgcmVzbnVsbCk7CisKKwkJLyogU3RlcHMgdG8gY29lcmNlIHRoZSBPTiBFUlJP UiBleHByZXNzaW9uIGlmIG5lZWRlZCAqLworCQkodm9pZCkgRXhlY0luaXRKc29uRXhwckNvZXJj aW9uKHN0YXRlLAorCQkJCQkJCQkJCShOb2RlICopIGpleHByLT5vbl9lcnJvci0+Y29lcmNpb24s CisJCQkJCQkJCQkJJmpzZXN0YXRlLT5lc2NvbnRleHQsCisJCQkJCQkJCQkJcmVzdiwgcmVzbnVs bCk7CisKKwkJanVtcHNfdG9fZW5kID0gbGFwcGVuZF9pbnQoanVtcHNfdG9fZW5kLCBzdGF0ZS0+ c3RlcHNfbGVuKTsKKwkJc2NyYXRjaC0+b3Bjb2RlID0gRUVPUF9KVU1QOworCQlzY3JhdGNoLT5k Lmp1bXAuanVtcGRvbmUgPSAtMTsKKwkJRXhwckV2YWxQdXNoU3RlcChzdGF0ZSwgc2NyYXRjaCk7 CisJfQorCisJLyogU3RlcCB0byBoYW5kbGUgT04gRU1QVFkgYmVoYXZpb3JzLiAqLworCWlmIChq ZXhwci0+b25fZW1wdHkgIT0gTlVMTCAmJgorCQlqZXhwci0+b25fZW1wdHktPmJ0eXBlICE9IEpT T05fQkVIQVZJT1JfRVJST1IpCisJeworCQlqc2VzdGF0ZS0+anVtcF9lbXB0eSA9IHN0YXRlLT5z dGVwc19sZW47CisKKwkJc2NyYXRjaC0+b3Bjb2RlID0gRUVPUF9KVU1QX0lGX05PVF9UUlVFOwor CQlzY3JhdGNoLT5yZXN2YWx1ZSA9ICZqc2VzdGF0ZS0+ZW1wdHkudmFsdWU7CisJCXNjcmF0Y2gt PnJlc251bGwgPSAmanNlc3RhdGUtPmVtcHR5LmlzbnVsbDsKKwkJc2NyYXRjaC0+ZC5qdW1wLmp1 bXBkb25lID0gLTE7CS8qIHNldCBiZWxvdyAqLworCQlqdW1wc190b19lbmQgPSBsYXBwZW5kX2lu dChqdW1wc190b19lbmQsIHN0YXRlLT5zdGVwc19sZW4pOworCQlFeHByRXZhbFB1c2hTdGVwKHN0 YXRlLCBzY3JhdGNoKTsKKworCQkvKiBTdGVwcyB0byBldmFsdWF0ZSB0aGUgT04gRU1QVFkgZXhw cmVzc2lvbiAqLworCQlFeGVjSW5pdEV4cHJSZWMoKEV4cHIgKikgamV4cHItPm9uX2VtcHR5LT5l eHByLAorCQkJCQkJc3RhdGUsIHJlc3YsIHJlc251bGwpOworCisJCS8qIFN0ZXBzIHRvIGNvZXJj ZSB0aGUgT04gRU1QVFkgZXhwcmVzc2lvbiBpZiBuZWVkZWQgKi8KKwkJKHZvaWQpIEV4ZWNJbml0 SnNvbkV4cHJDb2VyY2lvbihzdGF0ZSwKKwkJCQkJCQkJCQkoTm9kZSAqKSBqZXhwci0+b25fZW1w dHktPmNvZXJjaW9uLAorCQkJCQkJCQkJCSZqc2VzdGF0ZS0+ZXNjb250ZXh0LAorCQkJCQkJCQkJ CXJlc3YsIHJlc251bGwpOworCisJCXNjcmF0Y2gtPm9wY29kZSA9IEVFT1BfSlVNUDsKKwkJc2Ny YXRjaC0+ZC5qdW1wLmp1bXBkb25lID0gLTE7CS8qIHNldCBiZWxvdyAqLworCQlqdW1wc190b19l bmQgPSBsYXBwZW5kX2ludChqdW1wc190b19lbmQsIHN0YXRlLT5zdGVwc19sZW4pOworCQlFeHBy RXZhbFB1c2hTdGVwKHN0YXRlLCBzY3JhdGNoKTsKKwl9CisKKwlmb3JlYWNoKGxjLCBqdW1wc190 b19lbmQpCisJeworCQlhcyA9ICZzdGF0ZS0+c3RlcHNbbGZpcnN0X2ludChsYyldOworCQlhcy0+ ZC5qdW1wLmp1bXBkb25lID0gc3RhdGUtPnN0ZXBzX2xlbjsKKwl9CisKKwlqc2VzdGF0ZS0+anVt cF9lbmQgPSBzdGF0ZS0+c3RlcHNfbGVuOworfQorCisvKiBJbml0aWFsaXplIG9uZSBKc29uQ29l cmNpb24gZm9yIGV4ZWN1dGlvbi4gKi8KK3N0YXRpYyBpbnQKK0V4ZWNJbml0SnNvbkV4cHJDb2Vy Y2lvbihFeHByU3RhdGUgKnN0YXRlLCBOb2RlICpjb2VyY2lvbl9leHByLAorCQkJCQkJIEVycm9y U2F2ZUNvbnRleHQgKmVzY29udGV4dCwKKwkJCQkJCSBEYXR1bSAqcmVzdiwgYm9vbCAqcmVzbnVs bCkKK3sKKwlpbnQJCQlqdW1wX2V2YWxfY29lcmNpb247CisJRGF0dW0JICAgKnNhdmVfaW5uZXJt b3N0X2Nhc2V2YWw7CisJYm9vbAkgICAqc2F2ZV9pbm5lcm1vc3RfY2FzZW51bGw7CisJRXJyb3JT YXZlQ29udGV4dCAqc2F2ZV9lc2NvbnRleHQ7CisKKwlpZiAoY29lcmNpb25fZXhwciA9PSBOVUxM KQorCQlyZXR1cm4gLTE7CisKKwlqdW1wX2V2YWxfY29lcmNpb24gPSBzdGF0ZS0+c3RlcHNfbGVu OworCWlmIChJc0EoY29lcmNpb25fZXhwciwgSnNvbkNvZXJjaW9uKSkKKwl7CisJCUpzb25Db2Vy Y2lvbiAqY29lcmNpb24gPSAoSnNvbkNvZXJjaW9uICopIGNvZXJjaW9uX2V4cHI7CisJCUV4cHJF dmFsU3RlcCBzY3JhdGNoID0gezB9OworCQlPaWQJCQl0eXBpbnB1dDsKKwkJRm1nckluZm8gICAq ZmluZm87CisJCU9pZAkJCXR5cGlvcGFyYW07CisKKwkJZ2V0VHlwZUlucHV0SW5mbygoKEpzb25D b2VyY2lvbiAqKSBjb2VyY2lvbiktPnRhcmdldHR5cGUsCisJCQkJCQkgJnR5cGlucHV0LCAmdHlw aW9wYXJhbSk7CisJCWZpbmZvID0gcGFsbG9jMChzaXplb2YoRm1nckluZm8pKTsKKwkJZm1ncl9p bmZvKHR5cGlucHV0LCBmaW5mbyk7CisKKwkJc2NyYXRjaC5vcGNvZGUgPSBFRU9QX0pTT05FWFBS X0NPRVJDSU9OOworCQlzY3JhdGNoLnJlc3ZhbHVlID0gcmVzdjsKKwkJc2NyYXRjaC5yZXNudWxs ID0gcmVzbnVsbDsKKwkJc2NyYXRjaC5kLmpzb25leHByX2NvZXJjaW9uLmNvZXJjaW9uID0gY29l cmNpb247CisJCXNjcmF0Y2guZC5qc29uZXhwcl9jb2VyY2lvbi5pbnB1dF9maW5mbyA9IGZpbmZv OworCQlzY3JhdGNoLmQuanNvbmV4cHJfY29lcmNpb24udHlwaW9wYXJhbSA9IHR5cGlvcGFyYW07 CisJCXNjcmF0Y2guZC5qc29uZXhwcl9jb2VyY2lvbi5qc29uX3BvcHVsYXRlX3R5cGVfY2FjaGUg PSBOVUxMOworCQlzY3JhdGNoLmQuanNvbmV4cHJfY29lcmNpb24uZXNjb250ZXh0ID0gZXNjb250 ZXh0OworCQlFeHByRXZhbFB1c2hTdGVwKHN0YXRlLCAmc2NyYXRjaCk7CisJCS8qIEluaXRpYWxp emUgdGhlIGNhc3QgZXhwcmVzc2lvbiBiZWxvdywgaWYgYW55LiAqLworCQlpZiAoY29lcmNpb24t PmNhc3RfZXhwciAhPSBOVUxMKQorCQkJY29lcmNpb25fZXhwciA9IGNvZXJjaW9uLT5jYXN0X2V4 cHI7CisJCWVsc2UKKwkJCXJldHVybiBqdW1wX2V2YWxfY29lcmNpb247CisJfQorCisJLyogUHVz aCBzdGVwKHMpIHRvIGNvbXB1dGUgY3N0YXRlLT5jb2VyY2lvbi4gKi8KKwlzYXZlX2lubmVybW9z dF9jYXNldmFsID0gc3RhdGUtPmlubmVybW9zdF9jYXNldmFsOworCXNhdmVfaW5uZXJtb3N0X2Nh c2VudWxsID0gc3RhdGUtPmlubmVybW9zdF9jYXNlbnVsbDsKKwlzYXZlX2VzY29udGV4dCA9IHN0 YXRlLT5lc2NvbnRleHQ7CisKKwlzdGF0ZS0+aW5uZXJtb3N0X2Nhc2V2YWwgPSByZXN2OworCXN0 YXRlLT5pbm5lcm1vc3RfY2FzZW51bGwgPSByZXNudWxsOworCXN0YXRlLT5lc2NvbnRleHQgPSBl c2NvbnRleHQ7CisKKwlFeGVjSW5pdEV4cHJSZWMoKEV4cHIgKikgY29lcmNpb25fZXhwciwgc3Rh dGUsIHJlc3YsIHJlc251bGwpOworCisJc3RhdGUtPmlubmVybW9zdF9jYXNldmFsID0gc2F2ZV9p bm5lcm1vc3RfY2FzZXZhbDsKKwlzdGF0ZS0+aW5uZXJtb3N0X2Nhc2VudWxsID0gc2F2ZV9pbm5l cm1vc3RfY2FzZW51bGw7CisJc3RhdGUtPmVzY29udGV4dCA9IHNhdmVfZXNjb250ZXh0OworCisJ cmV0dXJuIGp1bXBfZXZhbF9jb2VyY2lvbjsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwcklu dGVycC5jCmluZGV4IGEyNWFiNzU3MGYuLjJkNmIxMWJiMzQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZXhlY0V4cHJJbnRlcnAuYwpAQCAtNzIsOCArNzIsOCBAQAogI2luY2x1ZGUgInV0aWxzL2RhdHVt LmgiCiAjaW5jbHVkZSAidXRpbHMvZXhwYW5kZWRyZWNvcmQuaCIKICNpbmNsdWRlICJ1dGlscy9q c29uLmgiCi0jaW5jbHVkZSAidXRpbHMvanNvbmIuaCIKICNpbmNsdWRlICJ1dGlscy9qc29uZnVu Y3MuaCIKKyNpbmNsdWRlICJ1dGlscy9qc29ucGF0aC5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNj YWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAjaW5jbHVkZSAidXRpbHMvdGlt ZXN0YW1wLmgiCkBAIC0xODAsNiArMTgwLDEwIEBAIHN0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3YXlz X2lubGluZSB2b2lkIEV4ZWNBZ2dQbGFpblRyYW5zQnlSZWYoQWdnU3RhdGUgKmFnZ3N0YXRlCiAJ CQkJCQkJCQkJCQkJCQkgIEFnZ1N0YXRlUGVyR3JvdXAgcGVyZ3JvdXAsCiAJCQkJCQkJCQkJCQkJ CQkgIEV4cHJDb250ZXh0ICphZ2djb250ZXh0LAogCQkJCQkJCQkJCQkJCQkJICBpbnQgc2V0bm8p Oworc3RhdGljIHZvaWQgRXhlY1ByZXBhcmVKc29uSXRlbUNvZXJjaW9uKEpzb25iVmFsdWUgKml0 ZW0sIEpzb25FeHByU3RhdGUgKmpzZXN0YXRlLAorCQkJCQkJCQkJCWJvb2wgdGhyb3dfZXJyb3Is CisJCQkJCQkJCQkJaW50ICpqdW1wX2V2YWxfaXRlbV9jb2VyY2lvbiwKKwkJCQkJCQkJCQlEYXR1 bSAqcmVzdmFsdWUsIGJvb2wgKnJlc251bGwpOwogCiAvKgogICogU2NhbGFyQXJyYXlPcEV4cHJI YXNoRW50cnkKQEAgLTQ4MSw2ICs0ODUsOSBAQCBFeGVjSW50ZXJwRXhwcihFeHByU3RhdGUgKnN0 YXRlLCBFeHByQ29udGV4dCAqZWNvbnRleHQsIGJvb2wgKmlzbnVsbCkKIAkJJiZDQVNFX0VFT1Bf WE1MRVhQUiwKIAkJJiZDQVNFX0VFT1BfSlNPTl9DT05TVFJVQ1RPUiwKIAkJJiZDQVNFX0VFT1Bf SVNfSlNPTiwKKwkJJiZDQVNFX0VFT1BfSlNPTkVYUFJfUEFUSCwKKwkJJiZDQVNFX0VFT1BfSlNP TkVYUFJfQ09FUkNJT04sCisJCSYmQ0FTRV9FRU9QX0pTT05FWFBSX0NPRVJDSU9OX0ZJTklTSCwK IAkJJiZDQVNFX0VFT1BfQUdHUkVGLAogCQkmJkNBU0VfRUVPUF9HUk9VUElOR19GVU5DLAogCQkm JkNBU0VfRUVPUF9XSU5ET1dfRlVOQywKQEAgLTE1NTQsNiArMTU2MSwyOCBAQCBFeGVjSW50ZXJw RXhwcihFeHByU3RhdGUgKnN0YXRlLCBFeHByQ29udGV4dCAqZWNvbnRleHQsIGJvb2wgKmlzbnVs bCkKIAkJCUVFT19ORVhUKCk7CiAJCX0KIAorCQlFRU9fQ0FTRShFRU9QX0pTT05FWFBSX1BBVEgp CisJCXsKKwkJCS8qIHRvbyBjb21wbGV4IGZvciBhbiBpbmxpbmUgaW1wbGVtZW50YXRpb24gKi8K KwkJCUVFT19KVU1QKEV4ZWNFdmFsSnNvbkV4cHJQYXRoKHN0YXRlLCBvcCwgZWNvbnRleHQpKTsK KwkJfQorCisJCUVFT19DQVNFKEVFT1BfSlNPTkVYUFJfQ09FUkNJT04pCisJCXsKKwkJCS8qIHRv byBjb21wbGV4IGZvciBhbiBpbmxpbmUgaW1wbGVtZW50YXRpb24gKi8KKwkJCUV4ZWNFdmFsSnNv bkNvZXJjaW9uKHN0YXRlLCBvcCwgZWNvbnRleHQpOworCisJCQlFRU9fTkVYVCgpOworCQl9CisK KwkJRUVPX0NBU0UoRUVPUF9KU09ORVhQUl9DT0VSQ0lPTl9GSU5JU0gpCisJCXsKKwkJCS8qIHRv byBjb21wbGV4IGZvciBhbiBpbmxpbmUgaW1wbGVtZW50YXRpb24gKi8KKwkJCUV4ZWNFdmFsSnNv bkNvZXJjaW9uRmluaXNoKHN0YXRlLCBvcCk7CisKKwkJCUVFT19ORVhUKCk7CisJCX0KKwogCQlF RU9fQ0FTRShFRU9QX0FHR1JFRikKIAkJewogCQkJLyoKQEAgLTQyMjIsNiArNDI1MSwzNTUgQEAg RXhlY0V2YWxKc29uSXNQcmVkaWNhdGUoRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpv cCkKIAkqb3AtPnJlc3ZhbHVlID0gQm9vbEdldERhdHVtKHJlcyk7CiB9CiAKKy8qCisgKiBQZXJm b3JtcyBKc29uUGF0aHtFeGlzdHN8UXVlcnl8VmFsdWV9KCkgZm9yIGEgZ2l2ZW4gY29udGV4dF9p dGVtIGFuZAorICoganNvbnBhdGguCisgKgorICogUmVzdWx0IGlzIHNldCBpbiAqb3AtPnJlc3Zh bHVlIGFuZCAqb3AtPnJlc251bGwuICBSZXR1cm4gdmFsdWUgaXMgdGhlCisgKiBzdGVwIGFkZHJl c3MgdG8gYmUgcGVyZm9ybWVkIG5leHQuCisgKgorICogT24gcmV0dXJuLCBKc29uRXhwclBvc3RF dmFsU3RhdGUgaXMgcG9wdWxhdGVkIHdpdGggdGhlIGZvbGxvd2luZyBkZXRhaWxzOgorICoJLSBl cnJvci52YWx1ZTogdHJ1ZSBpZiBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgSnNvblBhdGggZXZh bHVhdGlvbgorICoJLSBlbXB0eS52YWx1ZTogdHJ1ZSBpZiBKc29uUGF0aHtRdWVyeXxWYWx1ZX0o KSBmb3VuZCBubyBtYXRjaGluZyBpdGVtCisgKgorICogTm8gcmV0dXJuIGlmIHRoZSBPTiBFUlJP Ui9FTVBUWSBiZWhhdmlvciBpcyBFUlJPUi4KKyAqLworaW50CitFeGVjRXZhbEpzb25FeHByUGF0 aChFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAgKm9wLAorCQkJCQkgRXhwckNvbnRleHQg KmVjb250ZXh0KQoreworCUpzb25FeHByU3RhdGUgKmpzZXN0YXRlID0gb3AtPmQuanNvbmV4cHIu anNlc3RhdGU7CisJSnNvbkV4cHIgICAqamV4cHIgPSBqc2VzdGF0ZS0+anNleHByOworCURhdHVt CQlpdGVtOworCUpzb25QYXRoICAgKnBhdGg7CisJYm9vbAkJdGhyb3dfZXJyb3IgPSBqZXhwci0+ b25fZXJyb3ItPmJ0eXBlID09IEpTT05fQkVIQVZJT1JfRVJST1I7CisJYm9vbAkgICAgZXJyb3Ig PSBmYWxzZSwKKwkJCQllbXB0eSA9IGZhbHNlOworCisJLyogTWlnaHQgZ2V0IG92ZXJyaWRkZW4g Zm9yIEpTT05fVkFMVUVfT1AgYnkgYW4gcGVyLWl0ZW0gY29lcmNpb24uICovCisJaW50CQkJanVt cF9ldmFsX2NvZXJjaW9uID0ganNlc3RhdGUtPmp1bXBfZXZhbF9yZXN1bHRfY29lcmNpb247CisK KwlpdGVtID0ganNlc3RhdGUtPmZvcm1hdHRlZF9leHByLnZhbHVlOworCXBhdGggPSBEYXR1bUdl dEpzb25QYXRoUChqc2VzdGF0ZS0+cGF0aHNwZWMudmFsdWUpOworCisJLyogU2V0IGVycm9yL2Vt cHR5IHRvIGZhbHNlLiAqLworCW1lbXNldCgmanNlc3RhdGUtPmVycm9yLCAwLCBzaXplb2YoTnVs bGFibGVEYXR1bSkpOworCW1lbXNldCgmanNlc3RhdGUtPmVtcHR5LCAwLCBzaXplb2YoTnVsbGFi bGVEYXR1bSkpOworCXN3aXRjaCAoamV4cHItPm9wKQorCXsKKwkJY2FzZSBKU09OX0VYSVNUU19P UDoKKwkJCXsKKwkJCQlib29sCQlleGlzdHMgPSBKc29uUGF0aEV4aXN0cyhpdGVtLCBwYXRoLAor CQkJCQkJCQkJCQkJCSF0aHJvd19lcnJvciA/ICZlcnJvciA6IE5VTEwsCisJCQkJCQkJCQkJCQkJ anNlc3RhdGUtPmFyZ3MpOworCisJCQkJaWYgKCFlcnJvcikKKwkJCQl7CisJCQkJCSpvcC0+cmVz dmFsdWUgPSBCb29sR2V0RGF0dW0oZXhpc3RzKTsKKwkJCQkJKm9wLT5yZXNudWxsID0gZmFsc2U7 CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBKU09OX1FVRVJZX09QOgorCQkJKm9w LT5yZXN2YWx1ZSA9IEpzb25QYXRoUXVlcnkoaXRlbSwgcGF0aCwgamV4cHItPndyYXBwZXIsICZl bXB0eSwKKwkJCQkJCQkJCQkgICF0aHJvd19lcnJvciA/ICZlcnJvciA6IE5VTEwsCisJCQkJCQkJ CQkJICBqc2VzdGF0ZS0+YXJncyk7CisKKwkJCWlmICghZXJyb3IgJiYgIWVtcHR5KQorCQkJCSpv cC0+cmVzbnVsbCA9IChEYXR1bUdldFBvaW50ZXIoKm9wLT5yZXN2YWx1ZSkgPT0gTlVMTCk7CisJ CQlicmVhazsKKworCQljYXNlIEpTT05fVkFMVUVfT1A6CisJCQl7CisJCQkJSnNvbmJWYWx1ZSAq amJ2ID0gSnNvblBhdGhWYWx1ZShpdGVtLCBwYXRoLCAmZW1wdHksCisJCQkJCQkJCQkJCQkhdGhy b3dfZXJyb3IgPyAmZXJyb3IgOiBOVUxMLAorCQkJCQkJCQkJCQkJanNlc3RhdGUtPmFyZ3MpOwor CisJCQkJaWYgKGpidiA9PSBOVUxMKQorCQkJCXsKKwkJCQkJLyogV2lsbCBiZSBjb2VyY2VkIHdp dGggcmVzdWx0X2NvZXJjaW9uLiAqLworCQkJCQkqb3AtPnJlc3ZhbHVlID0gKERhdHVtKSAwOwor CQkJCQkqb3AtPnJlc251bGwgPSB0cnVlOworCQkJCX0KKwkJCQllbHNlIGlmICghZXJyb3IgJiYg IWVtcHR5KQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJICogSWYgdGhlIHJlcXVlc3RlZCBvdXRwdXQg dHlwZSBpcyBqc29uKGIpLCB1c2UKKwkJCQkJICogcmVzdWx0X2NvZXJjaW9uIHRvIGRvIHRoZSBj b2VyY2lvbi4KKwkJCQkJICovCisJCQkJCWlmIChqZXhwci0+cmV0dXJuaW5nLT50eXBpZCA9PSBK U09OT0lEIHx8CisJCQkJCQlqZXhwci0+cmV0dXJuaW5nLT50eXBpZCA9PSBKU09OQk9JRCkKKwkJ CQkJeworCQkJCQkJKm9wLT5yZXN2YWx1ZSA9IEpzb25iUEdldERhdHVtKEpzb25iVmFsdWVUb0pz b25iKGpidikpOworCQkJCQkJKm9wLT5yZXNudWxsID0gZmFsc2U7CisJCQkJCX0KKwkJCQkJZWxz ZQorCQkJCQl7CisJCQkJCQkvKgorCQkJCQkJICogRWxzZSwgdXNlIG9uZSBvZiB0aGUgaXRlbV9j b2VyY2lvbnMuCisJCQkJCQkgKgorCQkJCQkJICogRXJyb3Igb3V0IGlmIG5vIGNhc3QgZXhwcmVz c2lvbiBleGlzdHMuCisJCQkJCQkgKi8KKwkJCQkJCUV4ZWNQcmVwYXJlSnNvbkl0ZW1Db2VyY2lv bihqYnYsIGpzZXN0YXRlLCB0aHJvd19lcnJvciwKKwkJCQkJCQkJCQkJCQkmanVtcF9ldmFsX2Nv ZXJjaW9uLAorCQkJCQkJCQkJCQkJCW9wLT5yZXN2YWx1ZSwgb3AtPnJlc251bGwpOworCQkJCQl9 CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorCisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAi dW5yZWNvZ25pemVkIFNRTC9KU09OIGV4cHJlc3Npb24gb3AgJWQiLCBqZXhwci0+b3ApOworCQkJ cmV0dXJuIGZhbHNlOworCX0KKworCWlmIChlbXB0eSkKKwl7CisJCWlmIChqZXhwci0+b25fZW1w dHkpCisJCXsKKwkJCWlmIChqZXhwci0+b25fZW1wdHktPmJ0eXBlID09IEpTT05fQkVIQVZJT1Jf RVJST1IpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCWVycmNvZGUoRVJSQ09ERV9OT19TUUxf SlNPTl9JVEVNKSwKKwkJCQkJCWVycm1zZygibm8gU1FML0pTT04gaXRlbSIpKTsKKwkJCWVsc2UK KwkJCQlqc2VzdGF0ZS0+ZW1wdHkudmFsdWUgPSBCb29sR2V0RGF0dW0odHJ1ZSk7CisKKwkJCUFz c2VydChqc2VzdGF0ZS0+anVtcF9lbXB0eSA+PSAwKTsKKwkJCXJldHVybiBqc2VzdGF0ZS0+anVt cF9lbXB0eTsKKwkJfQorCQllbHNlIGlmIChqZXhwci0+b25fZXJyb3ItPmJ0eXBlID09IEpTT05f QkVIQVZJT1JfRVJST1IpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQllcnJjb2RlKEVSUkNPREVf Tk9fU1FMX0pTT05fSVRFTSksCisJCQkJCWVycm1zZygibm8gU1FML0pTT04gaXRlbSIpKTsKKwkJ ZWxzZQorCQkJanNlc3RhdGUtPmVycm9yLnZhbHVlID0gQm9vbEdldERhdHVtKHRydWUpOworCisJ CSpvcC0+cmVzdmFsdWUgPSAoRGF0dW0pIDA7CisJCSpvcC0+cmVzbnVsbCA9IHRydWU7CisKKwkJ QXNzZXJ0KGpzZXN0YXRlLT5qdW1wX2Vycm9yID49IDApOworCQlyZXR1cm4ganNlc3RhdGUtPmp1 bXBfZXJyb3I7CisJfQorCisJaWYgKGVycm9yKQorCXsKKwkJQXNzZXJ0KCF0aHJvd19lcnJvciAm JiBqc2VzdGF0ZS0+anVtcF9lcnJvciA+PSAwKTsKKwkJKm9wLT5yZXN2YWx1ZSA9IChEYXR1bSkg MDsKKwkJKm9wLT5yZXNudWxsID0gdHJ1ZTsKKwkJanNlc3RhdGUtPmVycm9yLnZhbHVlID0gQm9v bEdldERhdHVtKHRydWUpOworCQlyZXR1cm4ganNlc3RhdGUtPmp1bXBfZXJyb3I7CisJfQorCisJ LyogRWxzZSByZXR1cm4gdGhlIGNvZXJjaW9uIHN0ZXAgYWRkcmVzcyBvciB0aGUgYWRkcmVzcyB0 byBza2lwIHRvIGVuZC4gKi8KKwlyZXR1cm4ganVtcF9ldmFsX2NvZXJjaW9uID49IDAgPyBqdW1w X2V2YWxfY29lcmNpb24gOiBqc2VzdGF0ZS0+anVtcF9lbmQ7Cit9CisKKy8qCisgKiBTZWxlY3Rz IGEgY29lcmNpb24gZm9yIGEgZ2l2ZW4gSnNvbmJWYWx1ZSBiYXNlZCBvbiBpdHMgdHlwZS4KKyAq CisgKiBPbiByZXR1cm4sICpyZXN2YWx1ZSBhbmQgKnJlc251bGwgYXJlIHNldCB0byB0aGUgdmFs dWUgZXh0cmFjdGVkIGZyb20gdGhlCisgKiBKc29uYlZhbHVlIGFuZCAqanVtcF9ldmFsX2l0ZW1f Y29lcmNpb24gaXMgc2V0IHRvIHRoZSBzdGVwIGFkZHJlc3Mgb2YgdGhlCisgKiBjb2VyY2lvbiBl eHByZXNzaW9uLgorICoKKyAqIElmIHRoZSBmb3VuZCBleHByZXNzaW9uIGlzIGEgSnNvbkNvZXJj aW9uIG5vZGUgdGhhdCBtZWFucyB0aGUgcGFyc2VyCisgKiBkaWRudCcgZmluZCBhIGNhc3QgdG8g ZG8gdGhlIGNvZXJjaW9uLCBzbyB0aHJvdyBhbiBlcnJvciBpZiB0aGUKKyAqIE9OIEVSUk9SIGJl aGF2aW9yIHNheXMgdG8gZG8gc28uCisgKi8KK3N0YXRpYyB2b2lkCitFeGVjUHJlcGFyZUpzb25J dGVtQ29lcmNpb24oSnNvbmJWYWx1ZSAqaXRlbSwgSnNvbkV4cHJTdGF0ZSAqanNlc3RhdGUsCisJ CQkJCQkJYm9vbCB0aHJvd19lcnJvciwKKwkJCQkJCQlpbnQgKmp1bXBfZXZhbF9pdGVtX2NvZXJj aW9uLAorCQkJCQkJCURhdHVtICpyZXN2YWx1ZSwgYm9vbCAqcmVzbnVsbCkKK3sKKwlpbnQJCSAg ICpldmFsX2l0ZW1fY29lcmNpb25fanVtcHMgPSBqc2VzdGF0ZS0+ZXZhbF9pdGVtX2NvZXJjaW9u X2p1bXBzOworCWJvb2wJICAgKml0ZW1fY29lcmNpb25faXNfY2FzdCA9IGpzZXN0YXRlLT5pdGVt X2NvZXJjaW9uX2lzX2Nhc3Q7CisJYm9vbAkJaXNfY2FzdDsKKwlpbnQJCQlqdW1wX3RvOworCUpz b25iVmFsdWUJYnVmOworCisJaWYgKGl0ZW0tPnR5cGUgPT0gamJ2QmluYXJ5ICYmIEpzb25Db250 YWluZXJJc1NjYWxhcihpdGVtLT52YWwuYmluYXJ5LmRhdGEpKQorCXsKKwkJYm9vbAkJaXNfc2Nh bGFyIFBHX1VTRURfRk9SX0FTU0VSVFNfT05MWTsKKworCQlpc19zY2FsYXIgPSBKc29uYkV4dHJh Y3RTY2FsYXIoaXRlbS0+dmFsLmJpbmFyeS5kYXRhLCAmYnVmKTsKKwkJaXRlbSA9ICZidWY7CisJ CUFzc2VydChpc19zY2FsYXIpOworCX0KKworCSpyZXNudWxsID0gZmFsc2U7CisKKwkvKiBnZXQg Y29lcmNpb24gc3RhdGUgcmVmZXJlbmNlIGFuZCBkYXR1bSBvZiB0aGUgY29ycmVzcG9uZGluZyBT UUwgdHlwZSAqLworCXN3aXRjaCAoaXRlbS0+dHlwZSkKKwl7CisJCWNhc2UgamJ2TnVsbDoKKwkJ CWlzX2Nhc3QgPSBpdGVtX2NvZXJjaW9uX2lzX2Nhc3RbSnNvbkl0ZW1UeXBlTnVsbF07CisJCQlq dW1wX3RvID0gZXZhbF9pdGVtX2NvZXJjaW9uX2p1bXBzW0pzb25JdGVtVHlwZU51bGxdOworCQkJ KnJlc3ZhbHVlID0gKERhdHVtKSAwOworCQkJKnJlc251bGwgPSB0cnVlOworCQkJYnJlYWs7CisK KwkJY2FzZSBqYnZTdHJpbmc6CisJCQlpc19jYXN0ID0gaXRlbV9jb2VyY2lvbl9pc19jYXN0W0pz b25JdGVtVHlwZVN0cmluZ107CisJCQlqdW1wX3RvID0gZXZhbF9pdGVtX2NvZXJjaW9uX2p1bXBz W0pzb25JdGVtVHlwZVN0cmluZ107CisJCQkqcmVzdmFsdWUgPQorCQkJCVBvaW50ZXJHZXREYXR1 bShjc3RyaW5nX3RvX3RleHRfd2l0aF9sZW4oaXRlbS0+dmFsLnN0cmluZy52YWwsCisJCQkJCQkJ CQkJCQkJCSBpdGVtLT52YWwuc3RyaW5nLmxlbikpOworCQkJYnJlYWs7CisKKwkJY2FzZSBqYnZO dW1lcmljOgorCQkJaXNfY2FzdCA9IGl0ZW1fY29lcmNpb25faXNfY2FzdFtKc29uSXRlbVR5cGVO dW1lcmljXTsKKwkJCWp1bXBfdG8gPSBldmFsX2l0ZW1fY29lcmNpb25fanVtcHNbSnNvbkl0ZW1U eXBlTnVtZXJpY107CisJCQkqcmVzdmFsdWUgPSBOdW1lcmljR2V0RGF0dW0oaXRlbS0+dmFsLm51 bWVyaWMpOworCQkJYnJlYWs7CisKKwkJY2FzZSBqYnZCb29sOgorCQkJaXNfY2FzdCA9IGl0ZW1f Y29lcmNpb25faXNfY2FzdFtKc29uSXRlbVR5cGVCb29sZWFuXTsKKwkJCWp1bXBfdG8gPSBldmFs X2l0ZW1fY29lcmNpb25fanVtcHNbSnNvbkl0ZW1UeXBlQm9vbGVhbl07CisJCQkqcmVzdmFsdWUg PSBCb29sR2V0RGF0dW0oaXRlbS0+dmFsLmJvb2xlYW4pOworCQkJYnJlYWs7CisKKwkJY2FzZSBq YnZEYXRldGltZToKKwkJCSpyZXN2YWx1ZSA9IGl0ZW0tPnZhbC5kYXRldGltZS52YWx1ZTsKKwkJ CXN3aXRjaCAoaXRlbS0+dmFsLmRhdGV0aW1lLnR5cGlkKQorCQkJeworCQkJCWNhc2UgREFURU9J RDoKKwkJCQkJaXNfY2FzdCA9IGl0ZW1fY29lcmNpb25faXNfY2FzdFtKc29uSXRlbVR5cGVEYXRl XTsKKwkJCQkJanVtcF90byA9IGV2YWxfaXRlbV9jb2VyY2lvbl9qdW1wc1tKc29uSXRlbVR5cGVE YXRlXTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBUSU1FT0lEOgorCQkJCQlpc19jYXN0ID0gaXRl bV9jb2VyY2lvbl9pc19jYXN0W0pzb25JdGVtVHlwZVRpbWVdOworCQkJCQlqdW1wX3RvID0gZXZh bF9pdGVtX2NvZXJjaW9uX2p1bXBzW0pzb25JdGVtVHlwZVRpbWVdOworCQkJCQlicmVhazsKKwkJ CQljYXNlIFRJTUVUWk9JRDoKKwkJCQkJaXNfY2FzdCA9IGl0ZW1fY29lcmNpb25faXNfY2FzdFtK c29uSXRlbVR5cGVUaW1ldHpdOworCQkJCQlqdW1wX3RvID0gZXZhbF9pdGVtX2NvZXJjaW9uX2p1 bXBzW0pzb25JdGVtVHlwZVRpbWV0el07CisJCQkJCWJyZWFrOworCQkJCWNhc2UgVElNRVNUQU1Q T0lEOgorCQkJCQlpc19jYXN0ID0gaXRlbV9jb2VyY2lvbl9pc19jYXN0W0pzb25JdGVtVHlwZVRp bWVzdGFtcF07CisJCQkJCWp1bXBfdG8gPSBldmFsX2l0ZW1fY29lcmNpb25fanVtcHNbSnNvbkl0 ZW1UeXBlVGltZXN0YW1wXTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBUSU1FU1RBTVBUWk9JRDoK KwkJCQkJaXNfY2FzdCA9IGl0ZW1fY29lcmNpb25faXNfY2FzdFtKc29uSXRlbVR5cGVUaW1lc3Rh bXB0el07CisJCQkJCWp1bXBfdG8gPSBldmFsX2l0ZW1fY29lcmNpb25fanVtcHNbSnNvbkl0ZW1U eXBlVGltZXN0YW1wdHpdOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQllbG9nKEVS Uk9SLCAidW5leHBlY3RlZCBqc29uYiBkYXRldGltZSB0eXBlIG9pZCAldSIsCisJCQkJCQkgaXRl bS0+dmFsLmRhdGV0aW1lLnR5cGlkKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgamJ2QXJy YXk6CisJCWNhc2UgamJ2T2JqZWN0OgorCQljYXNlIGpidkJpbmFyeToKKwkJCWlzX2Nhc3QgPSBp dGVtX2NvZXJjaW9uX2lzX2Nhc3RbSnNvbkl0ZW1UeXBlQ29tcG9zaXRlXTsKKwkJCWp1bXBfdG8g PSBldmFsX2l0ZW1fY29lcmNpb25fanVtcHNbSnNvbkl0ZW1UeXBlQ29tcG9zaXRlXTsKKwkJCSpy ZXN2YWx1ZSA9IEpzb25iUEdldERhdHVtKEpzb25iVmFsdWVUb0pzb25iKGl0ZW0pKTsKKwkJCWJy ZWFrOworCisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBqc29uYiB2YWx1 ZSB0eXBlICVkIiwgaXRlbS0+dHlwZSk7CisJfQorCisJLyogSWYgdGhlIGV4cHJlc3Npb24gaXMg bm90IGEgY2FzdCBleHByZXNzaW9uLCB0aHJvdyBhbiBlcnJvci4gKi8KKwlpZiAoanVtcF90byA+ PSAwICYmICFpc19jYXN0KQorCXsKKwkJaWYgKHRocm93X2Vycm9yKQorCQkJZXJlcG9ydChFUlJP UiwKKwkJCQkJZXJyY29kZShFUlJDT0RFX1NRTF9KU09OX0lURU1fQ0FOTk9UX0JFX0NBU1RfVE9f VEFSR0VUX1RZUEUpLAorCQkJCQllcnJtc2coIlNRTC9KU09OIGl0ZW0gY2Fubm90IGJlIGNhc3Qg dG8gdGFyZ2V0IHR5cGUiKSk7CisKKwkJKnJlc3ZhbHVlID0gKERhdHVtKSAwOworCQkqcmVzbnVs bCA9IHRydWU7CisJfQorCisJKmp1bXBfZXZhbF9pdGVtX2NvZXJjaW9uID0ganVtcF90bzsKK30K KworLyoKKyAqIENvZXJjZSBhIGpzb25iIG9yIGEgc2NhbGFyIHN0cmluZyB2YWx1ZSBwcm9kdWNl ZCBieSBFeGVjRXZhbEpzb25FeHByUGF0aCgpCisgKiBvciBhbiBPTiBFUlJPUiAvIEVNUFRZIGJl aGF2aW9yIGV4cHJlc3Npb24gdG8gdGhlIHRhcmdldCB0eXBlLgorICoKKyAqIFRoaXMgaXMgYWxz byByZXNwb25zaWJsZSBmb3IgcmVtb3ZpbmcgYW55IHF1b3RlcyBwcmVzZW50IGluIHRoZSBzb3Vy Y2UKKyAqIHZhbHVlIGlmIEpzb25Db2VyY2lvbi5vbWl0X3F1b3RlcyBpcyB0cnVlIGJlZm9yZSBj b2VyY2luZyB0byB0aGUgdGFyZ2V0CisgKiB0eXBlLgorICoKKyAqIEFueSBzb2Z0IGVycm9ycyB0 aGF0IG9jY3VyIGhlcmUgd2lsbCBiZSBjaGVja2VkIGJ5CisgKiBFRU9QX0pTT05FWFBSX0NPRVJD SU9OX0ZJTklTSCB0aGF0IHdpbGwgcnVuIGFmdGVyIHRoaXMuCisgKi8KK3ZvaWQKK0V4ZWNFdmFs SnNvbkNvZXJjaW9uKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJFdmFsU3RlcCAqb3AsCisJCQkJCSBF eHByQ29udGV4dCAqZWNvbnRleHQpCit7CisJSnNvbkNvZXJjaW9uICpjb2VyY2lvbiA9IG9wLT5k Lmpzb25leHByX2NvZXJjaW9uLmNvZXJjaW9uOworCUVycm9yU2F2ZUNvbnRleHQgKmVzY29udGV4 dCA9IG9wLT5kLmpzb25leHByX2NvZXJjaW9uLmVzY29udGV4dDsKKwlEYXR1bQkJcmVzID0gKm9w LT5yZXN2YWx1ZTsKKworCS8qCisJICogSGFuZGxlIE9NSVQgUVVPVEVTLgorCSAqCisJICogTm9y bWFsbHksIGpzb25fcG9wdWxhdGVfdHlwZSgpIGlzIHRoZSBwbGFjZSB0byBjb2VyY2UganNvbmIg dmFsdWVzIHRvCisJICogdGhlIHJlcXVlc3RlZCB0YXJnZXQgdHlwZSwgaW5jbHVkaW5nIHRob3Nl IHRoYXQgYXJlIHNjYWxhciBzdHJpbmdzLCBidXQKKwkgKiBpdCBkb2Vzbid0IGhhdmUgdGhlIHN1 cHBvcnQgZm9yIHJlbW92aW5nIHF1b3RlcyB0byBpbXBsZW1lbnQgdGhlCisJICogT01JVCBRVU9U RVMgY2xhdXNlLCBzbyB3ZSBoYW5kbGUgaXQgaGVyZS4KKwkgKi8KKwlpZiAoY29lcmNpb24tPm9t aXRfcXVvdGVzKQorCXsKKwkJRm1nckluZm8gICAqaW5wdXRfZmluZm8gPSBvcC0+ZC5qc29uZXhw cl9jb2VyY2lvbi5pbnB1dF9maW5mbzsKKwkJT2lkCQkJdHlwaW9wYXJhbSA9IG9wLT5kLmpzb25l eHByX2NvZXJjaW9uLnR5cGlvcGFyYW07CisJCWNoYXIJICAgKnZhbCA9ICEqb3AtPnJlc251bGwg PworCQkJSnNvbmJVbnF1b3RlKERhdHVtR2V0SnNvbmJQKHJlcykpIDogTlVMTDsKKworCQkvKgor CQkgKiBJZiB0aGUgY29lcmNpb24gbXVzdCBiZSBkb25lIHVzaW5nIGEgY2FzdCBleHByZXNzaW9u LCBwYXNzIHRvIGl0CisJCSAqIHRoZSB0ZXh0IHZlcnNpb24gb2YgdGhlIHF1b3RlLXN0cmlwcGVk IHN0cmluZy4gIElmIG5vdCwgZmluaXNoIHRoZQorCQkgKiBjb2VyY2lvbiBieSBjYWxsaW5nIHRo ZSBpbnB1dCBmdW5jdGlvbi4KKwkJICovCisJCWlmIChjb2VyY2lvbi0+Y2FzdF9leHByKQorCQkJ Km9wLT5yZXN2YWx1ZSA9IERpcmVjdEZ1bmN0aW9uQ2FsbDEodGV4dGluLAorCQkJCQkJCQkJCQkJ Q1N0cmluZ0dldERhdHVtKHZhbCkpOworCQllbHNlCisJCQkodm9pZCkgSW5wdXRGdW5jdGlvbkNh bGxTYWZlKGlucHV0X2ZpbmZvLCB2YWwsIHR5cGlvcGFyYW0sCisJCQkJCQkJCQkJIGNvZXJjaW9u LT50YXJnZXR0eXBtb2QsCisJCQkJCQkJCQkJIChOb2RlICopIGVzY29udGV4dCwKKwkJCQkJCQkJ CQkgb3AtPnJlc3ZhbHVlKTsKKwl9CisJZWxzZQorCXsKKwkJKm9wLT5yZXN2YWx1ZSA9IGpzb25f cG9wdWxhdGVfdHlwZShyZXMsIEpTT05CT0lELAorCQkJCQkJCQkJCSAgIGNvZXJjaW9uLT50YXJn ZXR0eXBlLAorCQkJCQkJCQkJCSAgIGNvZXJjaW9uLT50YXJnZXR0eXBtb2QsCisJCQkJCQkJCQkJ ICAgJm9wLT5kLmpzb25leHByX2NvZXJjaW9uLmpzb25fcG9wdWxhdGVfdHlwZV9jYWNoZSwKKwkJ CQkJCQkJCQkgICBlY29udGV4dC0+ZWN4dF9wZXJfcXVlcnlfbWVtb3J5LAorCQkJCQkJCQkJCSAg IG9wLT5yZXNudWxsLCAoTm9kZSAqKSBlc2NvbnRleHQpOworCX0KK30KKworLyoKKyAqIENoZWNr cyBpZiB0aGUgY29lcmNpb24gZXZhbHVhdGlvbiBsZWQgdG8gYW4gZXJyb3IuICBJZiBhbiBlcnJv ciBkaWQgb2NjdXIsCisgKiB0aGlzIHNldHMgcG9zdF9ldmFsLT5lcnJvciB0byB0cmlnZ2VyIHRo ZSBPTiBFUlJPUiBoYW5kbGluZyBzdGVwcy4KKyAqLwordm9pZAorRXhlY0V2YWxKc29uQ29lcmNp b25GaW5pc2goRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCkKK3sKKwlKc29uRXhw clN0YXRlICpqc2VzdGF0ZSA9IG9wLT5kLmpzb25leHByLmpzZXN0YXRlOworCisJaWYgKFNPRlRf RVJST1JfT0NDVVJSRUQoJmpzZXN0YXRlLT5lc2NvbnRleHQpKQorCXsKKwkJKm9wLT5yZXN2YWx1 ZSA9IChEYXR1bSkgMDsKKwkJKm9wLT5yZXNudWxsID0gdHJ1ZTsKKwkJanNlc3RhdGUtPmVycm9y LnZhbHVlID0gQm9vbEdldERhdHVtKHRydWUpOworCisJCS8qCisJCSAqIEFsc28gbWFrZSBFcnJv clNhdmVDb250ZXh0IHJlYWR5IGZvciB0aGUgbmV4dCByb3cuICBTaW5jZSB3ZSBuZXZlcgorCQkg KiBzZXQgZGV0YWlsc193YW50ZWQsIHdlIGRvbid0IG5lZWQgdG8gYWxzbyByZXNldCBlcnJvcl9k YXRhLCB3aGljaAorCQkgKiB3b3VsZCBiZSBOVUxMIGFueXdheS4KKwkJICovCisJCUFzc2VydCgh anNlc3RhdGUtPmVzY29udGV4dC5kZXRhaWxzX3dhbnRlZCAmJgorCQkJICAganNlc3RhdGUtPmVz Y29udGV4dC5lcnJvcl9kYXRhID09IE5VTEwpOworCQlqc2VzdGF0ZS0+ZXNjb250ZXh0LmVycm9y X29jY3VycmVkID0gZmFsc2U7CisJfQorfQogCiAvKgogICogRXhlY0V2YWxHcm91cGluZ0Z1bmMK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfZXhwci5jIGIvc3JjL2Jh Y2tlbmQvaml0L2xsdm0vbGx2bWppdF9leHByLmMKaW5kZXggMmE3ZDg0ZjA0Ni4uMGM0ZDU5NTNk YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF9leHByLmMKKysrIGIv c3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF9leHByLmMKQEAgLTE5MzAsNiArMTkzMCwxNTAg QEAgbGx2bV9jb21waWxlX2V4cHIoRXhwclN0YXRlICpzdGF0ZSkKIAkJCQlMTFZNQnVpbGRCcihi LCBvcGJsb2Nrc1tvcG5vICsgMV0pOwogCQkJCWJyZWFrOwogCisJCQljYXNlIEVFT1BfSlNPTkVY UFJfUEFUSDoKKwkJCQl7CisJCQkJCUpzb25FeHByU3RhdGUgKmpzZXN0YXRlID0gb3AtPmQuanNv bmV4cHIuanNlc3RhdGU7CisJCQkJCUxMVk1WYWx1ZVJlZiB2X3JldDsKKworCQkJCQkvKgorCQkJ CQkgKiBDYWxsIEV4ZWNFdmFsSnNvbkV4cHJQYXRoKCkuICBJdCByZXR1cm5zIHRoZSBhZGRyZXNz IG9mCisJCQkJCSAqIHRoZSBzdGVwIHRvIHBlcmZvcm0gbmV4dC4KKwkJCQkJICovCisJCQkJCXZf cmV0ID0gYnVpbGRfRXZhbFhGdW5jKGIsIG1vZCwgIkV4ZWNFdmFsSnNvbkV4cHJQYXRoIiwKKwkJ CQkJCQkJCQkJdl9zdGF0ZSwgb3AsIHZfZWNvbnRleHQpOworCisJCQkJCS8qCisJCQkJCSAqIEJ1 aWxkIGEgc3dpdGNoIHRvIG1hcCB0aGUgcmV0dXJuIHZhbHVlLCB3aGljaCBpcyBhCisJCQkJCSAq IHJ1bnRpbWUgdmFsdWUgb2YgdGhlIHN0ZXAgYWRkcmVzcyB0byBwZXJmb3JtIG5leHQsIHRvCisJ CQkJCSAqIGVpdGhlciBqdW1wX2VtcHR5LCBqdW1wX2Vycm9yLCBvciB0aGUgY29lcmNpb24KKwkJ CQkJICogZXhwcmVzc2lvbi4KKwkJCQkJICovCisJCQkJCWlmIChqc2VzdGF0ZS0+anVtcF9lbXB0 eSA+PSAwIHx8CisJCQkJCQlqc2VzdGF0ZS0+anVtcF9lcnJvciA+PSAwIHx8CisJCQkJCQlqc2Vz dGF0ZS0+anVtcF9ldmFsX3Jlc3VsdF9jb2VyY2lvbiA+PSAwIHx8CisJCQkJCQlqc2VzdGF0ZS0+ bnVtX2l0ZW1fY29lcmNpb25zID4gMCkKKwkJCQkJeworCQkJCQkJaW50CQkJaTsKKwkJCQkJCUxM Vk1WYWx1ZVJlZiB2X2p1bXBfZW1wdHk7CisJCQkJCQlMTFZNVmFsdWVSZWYgdl9qdW1wX2Vycm9y OworCQkJCQkJTExWTVZhbHVlUmVmIHZfanVtcF9jb2VyY2lvbjsKKwkJCQkJCUxMVk1WYWx1ZVJl ZiB2X3N3aXRjaDsKKwkJCQkJCUxMVk1CYXNpY0Jsb2NrUmVmIGJfZG9uZSwKKwkJCQkJCQkJCWJf ZW1wdHksCisJCQkJCQkJCQliX2Vycm9yLAorCQkJCQkJCQkJYl9yZXN1bHRfY29lcmNpb24sCisJ CQkJCQkJCSAgICpiX2l0ZW1fY29lcmNpb25zID0gTlVMTDsKKworCQkJCQkJYl9lbXB0eSA9CisJ CQkJCQkJbF9iYl9iZWZvcmVfdihvcGJsb2Nrc1tvcG5vICsgMV0sCisJCQkJCQkJCQkJICAib3Au JWQuanNvbmV4cHJfZW1wdHkiLCBvcG5vKTsKKwkJCQkJCWJfZXJyb3IgPQorCQkJCQkJCWxfYmJf YmVmb3JlX3Yob3BibG9ja3Nbb3BubyArIDFdLAorCQkJCQkJCQkJCSAgIm9wLiVkLmpzb25leHBy X2Vycm9yIiwgb3Bubyk7CisJCQkJCQliX3Jlc3VsdF9jb2VyY2lvbiA9CisJCQkJCQkJbF9iYl9i ZWZvcmVfdihvcGJsb2Nrc1tvcG5vICsgMV0sCisJCQkJCQkJCQkJICAib3AuJWQuanNvbmV4cHJf cmVzdWx0X2NvZXJjaW9uIiwgb3Bubyk7CisJCQkJCQlpZiAoanNlc3RhdGUtPm51bV9pdGVtX2Nv ZXJjaW9ucyA+IDApCisJCQkJCQl7CisJCQkJCQkJYl9pdGVtX2NvZXJjaW9ucyA9IHBhbGxvYyhz aXplb2YoTExWTUJhc2ljQmxvY2tSZWYpICoKKwkJCQkJCQkJCQkJCQkgIGpzZXN0YXRlLT5udW1f aXRlbV9jb2VyY2lvbnMpOworCQkJCQkJCWZvciAoaSA9IDA7IGkgPCBqc2VzdGF0ZS0+bnVtX2l0 ZW1fY29lcmNpb25zOyBpKyspCisJCQkJCQkJeworCQkJCQkJCQliX2l0ZW1fY29lcmNpb25zW2ld ID0KKwkJCQkJCQkJCWxfYmJfYmVmb3JlX3Yob3BibG9ja3Nbb3BubyArIDFdLAorCQkJCQkJCQkJ CQkJICAib3AuJWQuanNvbmV4cHJfaXRlbV9jb2VyY2lvbi4lZCIsCisJCQkJCQkJCQkJCQkgIG9w bm8sIGkpOworCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJCWJfZG9uZSA9CisJCQkJCQkJbF9iYl9i ZWZvcmVfdihvcGJsb2Nrc1tvcG5vICsgMV0sCisJCQkJCQkJCQkJICAib3AuJWQuanNvbmV4cHJf ZG9uZSIsIG9wbm8pOworCisJCQkJCQl2X3N3aXRjaCA9IExMVk1CdWlsZFN3aXRjaChiLAorCQkJ CQkJCQkJCQkJICAgdl9yZXQsCisJCQkJCQkJCQkJCQkgICBiX2RvbmUsCisJCQkJCQkJCQkJCQkg ICBqc2VzdGF0ZS0+bnVtX2l0ZW1fY29lcmNpb25zICsgMyk7CisJCQkJCQkvKiBSZXR1cm5lZCBq c2VzdGF0ZS0+anVtcF9lbXB0eT8gKi8KKwkJCQkJCWlmIChqc2VzdGF0ZS0+anVtcF9lbXB0eSA+ PSAwKQorCQkJCQkJeworCQkJCQkJCXZfanVtcF9lbXB0eSA9IGxfaW50MzJfY29uc3QobGMsIGpz ZXN0YXRlLT5qdW1wX2VtcHR5KTsKKwkJCQkJCQlMTFZNQWRkQ2FzZSh2X3N3aXRjaCwgdl9qdW1w X2VtcHR5LCBiX2VtcHR5KTsKKwkJCQkJCX0KKwkJCQkJCS8qIFJldHVybmVkIGpzZXN0YXRlLT5q dW1wX2Vycm9yPyAqLworCQkJCQkJaWYgKGpzZXN0YXRlLT5qdW1wX2Vycm9yID49IDApCisJCQkJ CQl7CisJCQkJCQkJdl9qdW1wX2Vycm9yID0gbF9pbnQzMl9jb25zdChsYywganNlc3RhdGUtPmp1 bXBfZXJyb3IpOworCQkJCQkJCUxMVk1BZGRDYXNlKHZfc3dpdGNoLCB2X2p1bXBfZXJyb3IsIGJf ZXJyb3IpOworCQkJCQkJfQorCQkJCQkJLyogUmV0dXJuZWQganNlc3RhdGUtPmp1bXBfZXZhbF9y ZXN1bHRfY29lcmNpb24/ICovCisJCQkJCQlpZiAoanNlc3RhdGUtPmp1bXBfZXZhbF9yZXN1bHRf Y29lcmNpb24gPj0gMCkKKwkJCQkJCXsKKwkJCQkJCQl2X2p1bXBfY29lcmNpb24gPSBsX2ludDMy X2NvbnN0KGxjLCBqc2VzdGF0ZS0+anVtcF9ldmFsX3Jlc3VsdF9jb2VyY2lvbik7CisJCQkJCQkJ TExWTUFkZENhc2Uodl9zd2l0Y2gsIHZfanVtcF9jb2VyY2lvbiwgYl9yZXN1bHRfY29lcmNpb24p OworCQkJCQkJfQorCisJCQkJCQkvKgorCQkJCQkJICogUmV0dXJuZWQgb25lIG9mCisJCQkJCQkg KiBqc2VzdGF0ZS0+ZXZhbF9pdGVtX2NvZXJjaW9uX2p1bXBzW10/CisJCQkJCQkgKi8KKwkJCQkJ CWZvciAoaSA9IDA7IGkgPCBqc2VzdGF0ZS0+bnVtX2l0ZW1fY29lcmNpb25zOyBpKyspCisJCQkJ CQl7CisJCQkJCQkJaWYgKGpzZXN0YXRlLT5ldmFsX2l0ZW1fY29lcmNpb25fanVtcHNbaV0gPj0g MCkKKwkJCQkJCQl7CisJCQkJCQkJCXZfanVtcF9jb2VyY2lvbiA9IGxfaW50MzJfY29uc3QobGMs IGpzZXN0YXRlLT5ldmFsX2l0ZW1fY29lcmNpb25fanVtcHNbaV0pOworCQkJCQkJCQlMTFZNQWRk Q2FzZSh2X3N3aXRjaCwgdl9qdW1wX2NvZXJjaW9uLCBiX2l0ZW1fY29lcmNpb25zW2ldKTsKKwkJ CQkJCQl9CisJCQkJCQl9CisKKwkJCQkJCS8qIE9OIEVNUFRZIGNvZGUgKi8KKwkJCQkJCUxMVk1Q b3NpdGlvbkJ1aWxkZXJBdEVuZChiLCBiX2VtcHR5KTsKKwkJCQkJCWlmIChqc2VzdGF0ZS0+anVt cF9lbXB0eSA+PSAwKQorCQkJCQkJCUxMVk1CdWlsZEJyKGIsIG9wYmxvY2tzW2pzZXN0YXRlLT5q dW1wX2VtcHR5XSk7CisJCQkJCQllbHNlCisJCQkJCQkJTExWTUJ1aWxkVW5yZWFjaGFibGUoYik7 CisJCQkJCQkvKiBPTiBFUlJPUiBjb2RlICovCisJCQkJCQlMTFZNUG9zaXRpb25CdWlsZGVyQXRF bmQoYiwgYl9lcnJvcik7CisJCQkJCQlpZiAoanNlc3RhdGUtPmp1bXBfZXJyb3IgPj0gMCkKKwkJ CQkJCQlMTFZNQnVpbGRCcihiLCBvcGJsb2Nrc1tqc2VzdGF0ZS0+anVtcF9lcnJvcl0pOworCQkJ CQkJZWxzZQorCQkJCQkJCUxMVk1CdWlsZFVucmVhY2hhYmxlKGIpOworCQkJCQkJLyogcmVzdWx0 X2NvZXJjaW9uIGNvZGUgKi8KKwkJCQkJCUxMVk1Qb3NpdGlvbkJ1aWxkZXJBdEVuZChiLCBiX3Jl c3VsdF9jb2VyY2lvbik7CisJCQkJCQlpZiAoanNlc3RhdGUtPmp1bXBfZXZhbF9yZXN1bHRfY29l cmNpb24gPj0gMCkKKwkJCQkJCQlMTFZNQnVpbGRCcihiLCBvcGJsb2Nrc1tqc2VzdGF0ZS0+anVt cF9ldmFsX3Jlc3VsdF9jb2VyY2lvbl0pOworCQkJCQkJZWxzZQorCQkJCQkJCUxMVk1CdWlsZFVu cmVhY2hhYmxlKGIpOworCQkJCQkJLyogaXRlbSBjb2VyY2lvbiBjb2RlIGJsb2NrcyAqLworCQkJ CQkJZm9yIChpID0gMDsgaSA8IGpzZXN0YXRlLT5udW1faXRlbV9jb2VyY2lvbnM7IGkrKykKKwkJ CQkJCXsKKwkJCQkJCQlMTFZNUG9zaXRpb25CdWlsZGVyQXRFbmQoYiwgYl9pdGVtX2NvZXJjaW9u c1tpXSk7CisJCQkJCQkJaWYgKGpzZXN0YXRlLT5ldmFsX2l0ZW1fY29lcmNpb25fanVtcHNbaV0g Pj0gMCkKKwkJCQkJCQkJTExWTUJ1aWxkQnIoYiwgb3BibG9ja3NbanNlc3RhdGUtPmV2YWxfaXRl bV9jb2VyY2lvbl9qdW1wc1tpXV0pOworCQkJCQkJCWVsc2UKKwkJCQkJCQkJTExWTUJ1aWxkVW5y ZWFjaGFibGUoYik7CisJCQkJCQl9CisKKwkJCQkJCUxMVk1Qb3NpdGlvbkJ1aWxkZXJBdEVuZChi LCBiX2RvbmUpOworCQkJCQl9CisKKwkJCQkJTExWTUJ1aWxkQnIoYiwgb3BibG9ja3NbanNlc3Rh dGUtPmp1bXBfZW5kXSk7CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJY2FzZSBFRU9QX0pTT05F WFBSX0NPRVJDSU9OOgorCQkJCWJ1aWxkX0V2YWxYRnVuYyhiLCBtb2QsICJFeGVjRXZhbEpzb25D b2VyY2lvbiIsCisJCQkJCQkJCXZfc3RhdGUsIG9wLCB2X2Vjb250ZXh0KTsKKworCQkJCUxMVk1C dWlsZEJyKGIsIG9wYmxvY2tzW29wbm8gKyAxXSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgRUVP UF9KU09ORVhQUl9DT0VSQ0lPTl9GSU5JU0g6CisJCQkJYnVpbGRfRXZhbFhGdW5jKGIsIG1vZCwg IkV4ZWNFdmFsSnNvbkNvZXJjaW9uRmluaXNoIiwKKwkJCQkJCQkJdl9zdGF0ZSwgb3ApOworCisJ CQkJTExWTUJ1aWxkQnIoYiwgb3BibG9ja3Nbb3BubyArIDFdKTsKKwkJCQlicmVhazsKKwogCQkJ Y2FzZSBFRU9QX0FHR1JFRjoKIAkJCQl7CiAJCQkJCUxMVk1WYWx1ZVJlZiB2X2FnZ25vOwpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF90eXBlcy5jIGIvc3JjL2JhY2tl bmQvaml0L2xsdm0vbGx2bWppdF90eXBlcy5jCmluZGV4IDdkN2FlZWUxZjIuLmY5M2MzODNmZDUg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfdHlwZXMuYworKysgYi9z cmMvYmFja2VuZC9qaXQvbGx2bS9sbHZtaml0X3R5cGVzLmMKQEAgLTE3Myw2ICsxNzMsOSBAQCB2 b2lkCSAgICpyZWZlcmVuY2VkX2Z1bmN0aW9uc1tdID0KIAlFeGVjRXZhbFhtbEV4cHIsCiAJRXhl Y0V2YWxKc29uQ29uc3RydWN0b3IsCiAJRXhlY0V2YWxKc29uSXNQcmVkaWNhdGUsCisJRXhlY0V2 YWxKc29uQ29lcmNpb24sCisJRXhlY0V2YWxKc29uQ29lcmNpb25GaW5pc2gsCisJRXhlY0V2YWxK c29uRXhwclBhdGgsCiAJTWFrZUV4cGFuZGVkT2JqZWN0UmVhZE9ubHlJbnRlcm5hbCwKIAlzbG90 X2dldG1pc3NpbmdhdHRycywKIAlzbG90X2dldHNvbWVhdHRyc19pbnQsCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9ub2Rlcy9tYWtlZnVuY3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5j cy5jCmluZGV4IDMzZDRkMjNlMjMuLjUzOGNjYjMwYWEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L25vZGVzL21ha2VmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5jcy5jCkBA IC04NTYsNiArODU2LDI0IEBAIG1ha2VKc29uVmFsdWVFeHByKEV4cHIgKnJhd19leHByLCBFeHBy ICpmb3JtYXR0ZWRfZXhwciwKIAlyZXR1cm4ganZlOwogfQogCisvKgorICogbWFrZUpzb25CZWhh dmlvciAtCisgKgkgIGNyZWF0ZXMgYSBKc29uQmVoYXZpb3Igbm9kZQorICovCitKc29uQmVoYXZp b3IgKgorbWFrZUpzb25CZWhhdmlvcihKc29uQmVoYXZpb3JUeXBlIHR5cGUsIE5vZGUgKmV4cHIs IEpzb25Db2VyY2lvbiAqY29lcmNpb24sCisJCQkJIGludCBsb2NhdGlvbikKK3sKKwlKc29uQmVo YXZpb3IgKmJlaGF2aW9yID0gbWFrZU5vZGUoSnNvbkJlaGF2aW9yKTsKKworCWJlaGF2aW9yLT5i dHlwZSA9IHR5cGU7CisJYmVoYXZpb3ItPmV4cHIgPSBleHByOworCWJlaGF2aW9yLT5jb2VyY2lv biA9IGNvZXJjaW9uOworCWJlaGF2aW9yLT5sb2NhdGlvbiA9IGxvY2F0aW9uOworCisJcmV0dXJu IGJlaGF2aW9yOworfQorCiAvKgogICogbWFrZUpzb25LZXlWYWx1ZSAtCiAgKgkgIGNyZWF0ZXMg YSBKc29uS2V5VmFsdWUgbm9kZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvbm9kZUZ1 bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9ub2RlRnVuY3MuYwppbmRleCA1YjcwMjgwOWFlLi5k Nzk0MTkyZmFlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9ub2RlRnVuY3MuYworKysg Yi9zcmMvYmFja2VuZC9ub2Rlcy9ub2RlRnVuY3MuYwpAQCAtMjM2LDYgKzIzNiwzMyBAQCBleHBy VHlwZShjb25zdCBOb2RlICpleHByKQogCQljYXNlIFRfSnNvbklzUHJlZGljYXRlOgogCQkJdHlw ZSA9IEJPT0xPSUQ7CiAJCQlicmVhazsKKwkJY2FzZSBUX0pzb25FeHByOgorCQkJeworCQkJCWNv bnN0IEpzb25FeHByICpqZXhwciA9IChjb25zdCBKc29uRXhwciAqKSBleHByOworCisJCQkJdHlw ZSA9IGpleHByLT5yZXR1cm5pbmctPnR5cGlkOworCQkJCWJyZWFrOworCQkJfQorCQljYXNlIFRf SnNvbkNvZXJjaW9uOgorCQkJeworCQkJCWNvbnN0IEpzb25Db2VyY2lvbiAqY29lcmNpb24gPSAo Y29uc3QgSnNvbkNvZXJjaW9uICopIGV4cHI7CisKKwkJCQl0eXBlID0gY29lcmNpb24tPnRhcmdl dHR5cGU7CisJCQkJYnJlYWs7CisJCQl9CisJCWNhc2UgVF9Kc29uSXRlbUNvZXJjaW9uOgorCQkJ dHlwZSA9IGV4cHJUeXBlKCgoSnNvbkl0ZW1Db2VyY2lvbiAqKSBleHByKS0+Y29lcmNpb24pOwor CQkJYnJlYWs7CisJCWNhc2UgVF9Kc29uQmVoYXZpb3I6CisJCQl7CisJCQkJY29uc3QgSnNvbkJl aGF2aW9yICpiZWhhdmlvciA9IChjb25zdCBKc29uQmVoYXZpb3IgKikgZXhwcjsKKworCQkJCWlm IChiZWhhdmlvci0+Y29lcmNpb24pCisJCQkJCXR5cGUgPSBleHByVHlwZSgoTm9kZSAqKSBiZWhh dmlvci0+Y29lcmNpb24pOworCQkJCWVsc2UKKwkJCQkJdHlwZSA9IGV4cHJUeXBlKGJlaGF2aW9y LT5leHByKTsKKwkJCQlicmVhazsKKwkJCX0KIAkJY2FzZSBUX051bGxUZXN0OgogCQkJdHlwZSA9 IEJPT0xPSUQ7CiAJCQlicmVhazsKQEAgLTQ5Myw4ICs1MjAsMzIgQEAgZXhwclR5cG1vZChjb25z dCBOb2RlICpleHByKQogCQkJcmV0dXJuICgoY29uc3QgU1FMVmFsdWVGdW5jdGlvbiAqKSBleHBy KS0+dHlwbW9kOwogCQljYXNlIFRfSnNvblZhbHVlRXhwcjoKIAkJCXJldHVybiBleHByVHlwbW9k KChOb2RlICopICgoY29uc3QgSnNvblZhbHVlRXhwciAqKSBleHByKS0+Zm9ybWF0dGVkX2V4cHIp OwotCQljYXNlIFRfSnNvbkNvbnN0cnVjdG9yRXhwcjoKLQkJCXJldHVybiAoKGNvbnN0IEpzb25D b25zdHJ1Y3RvckV4cHIgKikgZXhwciktPnJldHVybmluZy0+dHlwbW9kOworCQljYXNlIFRfSnNv bkV4cHI6CisJCQl7CisJCQkJY29uc3QgSnNvbkV4cHIgKmpleHByID0gKGNvbnN0IEpzb25FeHBy ICopIGV4cHI7CisKKwkJCQlyZXR1cm4gamV4cHItPnJldHVybmluZy0+dHlwbW9kOworCQkJfQor CQkJYnJlYWs7CisJCWNhc2UgVF9Kc29uQ29lcmNpb246CisJCQl7CisJCQkJY29uc3QgSnNvbkNv ZXJjaW9uICpjb2VyY2lvbiA9IChjb25zdCBKc29uQ29lcmNpb24gKikgZXhwcjsKKworCQkJCXJl dHVybiBjb2VyY2lvbi0+dGFyZ2V0dHlwbW9kOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVF9K c29uSXRlbUNvZXJjaW9uOgorCQkJcmV0dXJuIGV4cHJUeXBtb2QoKChKc29uSXRlbUNvZXJjaW9u ICopIGV4cHIpLT5jb2VyY2lvbik7CisJCWNhc2UgVF9Kc29uQmVoYXZpb3I6CisJCQl7CisJCQkJ Y29uc3QgSnNvbkJlaGF2aW9yICpiZWhhdmlvciA9IChjb25zdCBKc29uQmVoYXZpb3IgKikgZXhw cjsKKworCQkJCWlmIChiZWhhdmlvci0+Y29lcmNpb24pCisJCQkJCXJldHVybiBleHByVHlwbW9k KChOb2RlICopIGJlaGF2aW9yLT5jb2VyY2lvbik7CisJCQkJZWxzZQorCQkJCQlyZXR1cm4gZXhw clR5cG1vZChiZWhhdmlvci0+ZXhwcik7CisJCQl9CisJCQlicmVhazsKIAkJY2FzZSBUX0NvZXJj ZVRvRG9tYWluOgogCQkJcmV0dXJuICgoY29uc3QgQ29lcmNlVG9Eb21haW4gKikgZXhwciktPnJl c3VsdHR5cG1vZDsKIAkJY2FzZSBUX0NvZXJjZVRvRG9tYWluVmFsdWU6CkBAIC05NzQsNiArMTAy NSwyNyBAQCBleHByQ29sbGF0aW9uKGNvbnN0IE5vZGUgKmV4cHIpCiAJCQkvKiBJUyBKU09OJ3Mg cmVzdWx0IGlzIGJvb2xlYW4gLi4uICovCiAJCQljb2xsID0gSW52YWxpZE9pZDsJLyogLi4uIHNv IGl0IGhhcyBubyBjb2xsYXRpb24gKi8KIAkJCWJyZWFrOworCQljYXNlIFRfSnNvbkV4cHI6CisJ CQljb2xsID0gZXhwckNvbGxhdGlvbigoKEpzb25FeHByICopIGV4cHIpLT5yZXN1bHRfY29lcmNp b24pOworCQkJYnJlYWs7CisJCWNhc2UgVF9Kc29uQ29lcmNpb246CisJCQljb2xsID0gKChjb25z dCBKc29uQ29lcmNpb24gKikgZXhwciktPmNvbGxhdGlvbjsKKwkJCWJyZWFrOworCQljYXNlIFRf SnNvbkl0ZW1Db2VyY2lvbjoKKwkJCWNvbGwgPSBleHByQ29sbGF0aW9uKCgoSnNvbkl0ZW1Db2Vy Y2lvbiAqKSBleHByKS0+Y29lcmNpb24pOworCQkJYnJlYWs7CisJCWNhc2UgVF9Kc29uQmVoYXZp b3I6CisJCQl7CisJCQkJSnNvbkJlaGF2aW9yICpiZWhhdmlvciA9IChKc29uQmVoYXZpb3IgKikg ZXhwcjsKKworCQkJCWlmIChiZWhhdmlvci0+Y29lcmNpb24pCisJCQkJCWNvbGwgPSBleHByQ29s bGF0aW9uKChOb2RlICopIGJlaGF2aW9yLT5jb2VyY2lvbik7CisJCQkJZWxzZSBpZiAoYmVoYXZp b3ItPmV4cHIpCisJCQkJCWNvbGwgPSBleHByQ29sbGF0aW9uKGJlaGF2aW9yLT5leHByKTsKKwkJ CQllbHNlCisJCQkJCWNvbGwgPSBJbnZhbGlkT2lkOworCQkJfQorCQkJYnJlYWs7CiAJCWNhc2Ug VF9OdWxsVGVzdDoKIAkJCS8qIE51bGxUZXN0J3MgcmVzdWx0IGlzIGJvb2xlYW4gLi4uICovCiAJ CQljb2xsID0gSW52YWxpZE9pZDsJLyogLi4uIHNvIGl0IGhhcyBubyBjb2xsYXRpb24gKi8KQEAg LTEyMTMsNiArMTI4NSw0NCBAQCBleHByU2V0Q29sbGF0aW9uKE5vZGUgKmV4cHIsIE9pZCBjb2xs YXRpb24pCiAJCWNhc2UgVF9Kc29uSXNQcmVkaWNhdGU6CiAJCQlBc3NlcnQoIU9pZElzVmFsaWQo Y29sbGF0aW9uKSk7IC8qIHJlc3VsdCBpcyBhbHdheXMgYm9vbGVhbiAqLwogCQkJYnJlYWs7CisJ CWNhc2UgVF9Kc29uRXhwcjoKKwkJCXsKKwkJCQlKc29uRXhwciAgICpqZXhwciA9IChKc29uRXhw ciAqKSBleHByOworCisJCQkJaWYgKGpleHByLT5yZXN1bHRfY29lcmNpb24pCisJCQkJCWV4cHJT ZXRDb2xsYXRpb24oKE5vZGUgKikgamV4cHItPnJlc3VsdF9jb2VyY2lvbiwgY29sbGF0aW9uKTsK KwkJCQllbHNlCisJCQkJCUFzc2VydCghT2lkSXNWYWxpZChjb2xsYXRpb24pKTsgLyogcmVzdWx0 IGlzIGFsd2F5cyBhCisJCQkJCQkJCQkJCQkJICoganNvbltiXSB0eXBlICovCisJCQl9CisJCQli cmVhazsKKwkJY2FzZSBUX0pzb25JdGVtQ29lcmNpb246CisJCQl7CisJCQkJSnNvbkl0ZW1Db2Vy Y2lvbiAqaXRlbV9jb2VyY2lvbiA9IChKc29uSXRlbUNvZXJjaW9uICopIGV4cHI7CisKKwkJCQlp ZiAoaXRlbV9jb2VyY2lvbi0+Y29lcmNpb24pCisJCQkJCWV4cHJTZXRDb2xsYXRpb24oaXRlbV9j b2VyY2lvbi0+Y29lcmNpb24sIGNvbGxhdGlvbik7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBU X0pzb25Db2VyY2lvbjoKKwkJCXsKKwkJCQlKc29uQ29lcmNpb24gKmNvZXJjaW9uID0gKEpzb25D b2VyY2lvbiAqKSBleHByOworCisJCQkJaWYgKGNvZXJjaW9uLT5jYXN0X2V4cHIpCisJCQkJCWV4 cHJTZXRDb2xsYXRpb24oY29lcmNpb24tPmNhc3RfZXhwciwgY29sbGF0aW9uKTsKKwkJCQljb2Vy Y2lvbi0+Y29sbGF0aW9uID0gY29sbGF0aW9uOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVF9K c29uQmVoYXZpb3I6CisJCQl7CisJCQkJSnNvbkJlaGF2aW9yICpiZWhhdmlvciA9IChKc29uQmVo YXZpb3IgKikgZXhwcjsKKworCQkJCWlmIChiZWhhdmlvci0+ZXhwcikKKwkJCQkJZXhwclNldENv bGxhdGlvbihiZWhhdmlvci0+ZXhwciwgY29sbGF0aW9uKTsKKwkJCQlpZiAoYmVoYXZpb3ItPmNv ZXJjaW9uKQorCQkJCQlleHByU2V0Q29sbGF0aW9uKChOb2RlICopIGJlaGF2aW9yLT5jb2VyY2lv biwgY29sbGF0aW9uKTsKKwkJCX0KKwkJCWJyZWFrOwogCQljYXNlIFRfTnVsbFRlc3Q6CiAJCQkv KiBOdWxsVGVzdCdzIHJlc3VsdCBpcyBib29sZWFuIC4uLiAqLwogCQkJQXNzZXJ0KCFPaWRJc1Zh bGlkKGNvbGxhdGlvbikpOyAvKiAuLi4gc28gbmV2ZXIgc2V0IGEgY29sbGF0aW9uICovCkBAIC0x NTE5LDYgKzE2MjksMTggQEAgZXhwckxvY2F0aW9uKGNvbnN0IE5vZGUgKmV4cHIpCiAJCWNhc2Ug VF9Kc29uSXNQcmVkaWNhdGU6CiAJCQlsb2MgPSAoKGNvbnN0IEpzb25Jc1ByZWRpY2F0ZSAqKSBl eHByKS0+bG9jYXRpb247CiAJCQlicmVhazsKKwkJY2FzZSBUX0pzb25FeHByOgorCQkJeworCQkJ CWNvbnN0IEpzb25FeHByICpqc2V4cHIgPSAoY29uc3QgSnNvbkV4cHIgKikgZXhwcjsKKworCQkJ CS8qIGNvbnNpZGVyIGJvdGggZnVuY3Rpb24gbmFtZSBhbmQgbGVmdG1vc3QgYXJnICovCisJCQkJ bG9jID0gbGVmdG1vc3RMb2MoanNleHByLT5sb2NhdGlvbiwKKwkJCQkJCQkJICBleHByTG9jYXRp b24oanNleHByLT5mb3JtYXR0ZWRfZXhwcikpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVF9K c29uQmVoYXZpb3I6CisJCQlsb2MgPSBleHByTG9jYXRpb24oKChKc29uQmVoYXZpb3IgKikgZXhw ciktPmV4cHIpOworCQkJYnJlYWs7CiAJCWNhc2UgVF9OdWxsVGVzdDoKIAkJCXsKIAkJCQljb25z dCBOdWxsVGVzdCAqbmV4cHIgPSAoY29uc3QgTnVsbFRlc3QgKikgZXhwcjsKQEAgLTIyNzIsNiAr MjM5NCw1MSBAQCBleHByZXNzaW9uX3RyZWVfd2Fsa2VyX2ltcGwoTm9kZSAqbm9kZSwKIAkJCWJy ZWFrOwogCQljYXNlIFRfSnNvbklzUHJlZGljYXRlOgogCQkJcmV0dXJuIFdBTEsoKChKc29uSXNQ cmVkaWNhdGUgKikgbm9kZSktPmV4cHIpOworCQljYXNlIFRfSnNvbkV4cHI6CisJCQl7CisJCQkJ SnNvbkV4cHIgICAqamV4cHIgPSAoSnNvbkV4cHIgKikgbm9kZTsKKworCQkJCWlmIChXQUxLKGpl eHByLT5mb3JtYXR0ZWRfZXhwcikpCisJCQkJCXJldHVybiB0cnVlOworCQkJCWlmIChXQUxLKGpl eHByLT5yZXN1bHRfY29lcmNpb24pKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQlpZiAoV0FMSyhq ZXhwci0+aXRlbV9jb2VyY2lvbnMpKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQlpZiAoV0FMSyhq ZXhwci0+cGFzc2luZ192YWx1ZXMpKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQkvKiB3ZSBhc3N1 bWUgd2Fsa2VyIGRvZXNuJ3QgY2FyZSBhYm91dCBwYXNzaW5nX25hbWVzICovCisJCQkJaWYgKFdB TEsoamV4cHItPm9uX2VtcHR5KSkKKwkJCQkJcmV0dXJuIHRydWU7CisJCQkJaWYgKFdBTEsoamV4 cHItPm9uX2Vycm9yKSkKKwkJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCQlicmVhazsKKwkJY2Fz ZSBUX0pzb25Db2VyY2lvbjoKKwkJCXsKKwkJCQlKc29uQ29lcmNpb24gKmNvZXJjaW9uID0gKEpz b25Db2VyY2lvbiAqKSBub2RlOworCisJCQkJaWYgKFdBTEsoY29lcmNpb24tPmNhc3RfZXhwcikp CisJCQkJCXJldHVybiB0cnVlOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVF9Kc29uSXRlbUNv ZXJjaW9uOgorCQkJeworCQkJCUpzb25JdGVtQ29lcmNpb24gKml0ZW1fY29lcmNpb24gPSAoSnNv bkl0ZW1Db2VyY2lvbiAqKSBub2RlOworCisJCQkJaWYgKFdBTEsoaXRlbV9jb2VyY2lvbi0+Y29l cmNpb24pKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFRfSnNv bkJlaGF2aW9yOgorCQkJeworCQkJCUpzb25CZWhhdmlvciAqYmVoYXZpb3IgPSAoSnNvbkJlaGF2 aW9yICopIG5vZGU7CisKKwkJCQlpZiAoV0FMSyhiZWhhdmlvci0+ZXhwcikpCisJCQkJCXJldHVy biB0cnVlOworCQkJCWlmIChXQUxLKGJlaGF2aW9yLT5jb2VyY2lvbikpCisJCQkJCXJldHVybiB0 cnVlOworCQkJfQorCQkJYnJlYWs7CiAJCWNhc2UgVF9OdWxsVGVzdDoKIAkJCXJldHVybiBXQUxL KCgoTnVsbFRlc3QgKikgbm9kZSktPmFyZyk7CiAJCWNhc2UgVF9Cb29sZWFuVGVzdDoKQEAgLTMy NzYsNiArMzQ0Myw1MyBAQCBleHByZXNzaW9uX3RyZWVfbXV0YXRvcl9pbXBsKE5vZGUgKm5vZGUs CiAKIAkJCQlyZXR1cm4gKE5vZGUgKikgbmV3bm9kZTsKIAkJCX0KKwkJY2FzZSBUX0pzb25FeHBy OgorCQkJeworCQkJCUpzb25FeHByICAgKmpleHByID0gKEpzb25FeHByICopIG5vZGU7CisJCQkJ SnNvbkV4cHIgICAqbmV3bm9kZTsKKworCQkJCUZMQVRDT1BZKG5ld25vZGUsIGpleHByLCBKc29u RXhwcik7CisJCQkJTVVUQVRFKG5ld25vZGUtPnBhdGhfc3BlYywgamV4cHItPnBhdGhfc3BlYywg Tm9kZSAqKTsKKwkJCQlNVVRBVEUobmV3bm9kZS0+Zm9ybWF0dGVkX2V4cHIsIGpleHByLT5mb3Jt YXR0ZWRfZXhwciwgTm9kZSAqKTsKKwkJCQlNVVRBVEUobmV3bm9kZS0+cmVzdWx0X2NvZXJjaW9u LCBqZXhwci0+cmVzdWx0X2NvZXJjaW9uLCBOb2RlICopOworCQkJCU1VVEFURShuZXdub2RlLT5p dGVtX2NvZXJjaW9ucywgamV4cHItPml0ZW1fY29lcmNpb25zLCBMaXN0ICopOworCQkJCU1VVEFU RShuZXdub2RlLT5wYXNzaW5nX3ZhbHVlcywgamV4cHItPnBhc3NpbmdfdmFsdWVzLCBMaXN0ICop OworCQkJCS8qIGFzc3VtZSBtdXRhdG9yIGRvZXMgbm90IGNhcmUgYWJvdXQgcGFzc2luZ19uYW1l cyAqLworCQkJCU1VVEFURShuZXdub2RlLT5vbl9lbXB0eSwgamV4cHItPm9uX2VtcHR5LCBKc29u QmVoYXZpb3IgKik7CisJCQkJTVVUQVRFKG5ld25vZGUtPm9uX2Vycm9yLCBqZXhwci0+b25fZXJy b3IsIEpzb25CZWhhdmlvciAqKTsKKwkJCQlyZXR1cm4gKE5vZGUgKikgbmV3bm9kZTsKKwkJCX0K KwkJCWJyZWFrOworCQljYXNlIFRfSnNvbkNvZXJjaW9uOgorCQkJeworCQkJCUpzb25Db2VyY2lv biAqY29lcmNpb24gPSAoSnNvbkNvZXJjaW9uICopIG5vZGU7CisJCQkJSnNvbkNvZXJjaW9uICpu ZXdub2RlOworCisJCQkJRkxBVENPUFkobmV3bm9kZSwgY29lcmNpb24sIEpzb25Db2VyY2lvbik7 CisJCQkJTVVUQVRFKG5ld25vZGUtPmNhc3RfZXhwciwgY29lcmNpb24tPmNhc3RfZXhwciwgTm9k ZSAqKTsKKwkJCQlyZXR1cm4gKE5vZGUgKikgbmV3bm9kZTsKKwkJCX0KKwkJY2FzZSBUX0pzb25J dGVtQ29lcmNpb246CisJCQl7CisJCQkJSnNvbkl0ZW1Db2VyY2lvbiAqaXRlbV9jb2VyY2lvbiA9 IChKc29uSXRlbUNvZXJjaW9uICopIG5vZGU7CisJCQkJSnNvbkl0ZW1Db2VyY2lvbiAqbmV3bm9k ZTsKKworCQkJCUZMQVRDT1BZKG5ld25vZGUsIGl0ZW1fY29lcmNpb24sIEpzb25JdGVtQ29lcmNp b24pOworCQkJCU1VVEFURShuZXdub2RlLT5jb2VyY2lvbiwgaXRlbV9jb2VyY2lvbi0+Y29lcmNp b24sIE5vZGUgKik7CisJCQkJcmV0dXJuIChOb2RlICopIG5ld25vZGU7CisJCQl9CisJCQlicmVh azsKKwkJY2FzZSBUX0pzb25CZWhhdmlvcjoKKwkJCXsKKwkJCQlKc29uQmVoYXZpb3IgKmJlaGF2 aW9yID0gKEpzb25CZWhhdmlvciAqKSBub2RlOworCQkJCUpzb25CZWhhdmlvciAqbmV3bm9kZTsK KworCQkJCUZMQVRDT1BZKG5ld25vZGUsIGJlaGF2aW9yLCBKc29uQmVoYXZpb3IpOworCQkJCU1V VEFURShuZXdub2RlLT5leHByLCBiZWhhdmlvci0+ZXhwciwgTm9kZSAqKTsKKwkJCQlNVVRBVEUo bmV3bm9kZS0+Y29lcmNpb24sIGJlaGF2aW9yLT5jb2VyY2lvbiwgSnNvbkNvZXJjaW9uICopOwor CQkJCXJldHVybiAoTm9kZSAqKSBuZXdub2RlOworCQkJfQorCQkJYnJlYWs7CiAJCWNhc2UgVF9O dWxsVGVzdDoKIAkJCXsKIAkJCQlOdWxsVGVzdCAgICpudGVzdCA9IChOdWxsVGVzdCAqKSBub2Rl OwpAQCAtMzk2NSw2ICs0MTc5LDM2IEBAIHJhd19leHByZXNzaW9uX3RyZWVfd2Fsa2VyX2ltcGwo Tm9kZSAqbm9kZSwKIAkJCWJyZWFrOwogCQljYXNlIFRfSnNvbklzUHJlZGljYXRlOgogCQkJcmV0 dXJuIFdBTEsoKChKc29uSXNQcmVkaWNhdGUgKikgbm9kZSktPmV4cHIpOworCQljYXNlIFRfSnNv bkFyZ3VtZW50OgorCQkJcmV0dXJuIFdBTEsoKChKc29uQXJndW1lbnQgKikgbm9kZSktPnZhbCk7 CisJCWNhc2UgVF9Kc29uRnVuY0V4cHI6CisJCQl7CisJCQkJSnNvbkZ1bmNFeHByICpqZmUgPSAo SnNvbkZ1bmNFeHByICopIG5vZGU7CisKKwkJCQlpZiAoV0FMSyhqZmUtPmNvbnRleHRfaXRlbSkp CisJCQkJCXJldHVybiB0cnVlOworCQkJCWlmIChXQUxLKGpmZS0+cGF0aHNwZWMpKQorCQkJCQly ZXR1cm4gdHJ1ZTsKKwkJCQlpZiAoV0FMSyhqZmUtPnBhc3NpbmcpKQorCQkJCQlyZXR1cm4gdHJ1 ZTsKKwkJCQlpZiAoamZlLT5vdXRwdXQgJiYgV0FMSyhqZmUtPm91dHB1dCkpCisJCQkJCXJldHVy biB0cnVlOworCQkJCWlmIChqZmUtPm9uX2VtcHR5KQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQlp ZiAoamZlLT5vbl9lcnJvcikKKwkJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCQlicmVhazsKKwkJ Y2FzZSBUX0pzb25CZWhhdmlvcjoKKwkJCXsKKwkJCQlKc29uQmVoYXZpb3IgKmpiID0gKEpzb25C ZWhhdmlvciAqKSBub2RlOworCisJCQkJaWYgKFdBTEsoamItPmV4cHIpKQorCQkJCQlyZXR1cm4g dHJ1ZTsKKwkJCQlpZiAoV0FMSyhqYi0+Y29lcmNpb24pKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJ CX0KKwkJCWJyZWFrOwogCQljYXNlIFRfTnVsbFRlc3Q6CiAJCQlyZXR1cm4gV0FMSygoKE51bGxU ZXN0ICopIG5vZGUpLT5hcmcpOwogCQljYXNlIFRfQm9vbGVhblRlc3Q6CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jIGIvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BhdGgvY29zdHNpemUuYwppbmRleCA4M2EwYWVkMDUxLi4zYzE0YzYwNWEwIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jCisrKyBiL3NyYy9iYWNr ZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMKQEAgLTQ4NzgsNyArNDg3OCw4IEBAIGNvc3Rf cXVhbF9ldmFsX3dhbGtlcihOb2RlICpub2RlLCBjb3N0X3F1YWxfZXZhbF9jb250ZXh0ICpjb250 ZXh0KQogCQkJIElzQShub2RlLCBTUUxWYWx1ZUZ1bmN0aW9uKSB8fAogCQkJIElzQShub2RlLCBY bWxFeHByKSB8fAogCQkJIElzQShub2RlLCBDb2VyY2VUb0RvbWFpbikgfHwKLQkJCSBJc0Eobm9k ZSwgTmV4dFZhbHVlRXhwcikpCisJCQkgSXNBKG5vZGUsIE5leHRWYWx1ZUV4cHIpIHx8CisJCQkg SXNBKG5vZGUsIEpzb25FeHByKSkKIAl7CiAJCS8qIFRyZWF0IGFsbCB0aGVzZSBhcyBoYXZpbmcg Y29zdCAxICovCiAJCWNvbnRleHQtPnRvdGFsLnBlcl90dXBsZSArPSBjcHVfb3BlcmF0b3JfY29z dDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL2NsYXVzZXMuYyBiL3Ny Yy9iYWNrZW5kL29wdGltaXplci91dGlsL2NsYXVzZXMuYwppbmRleCBkMDlkZGUyMTBmLi5iNTBm ZTU4ZDFjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9jbGF1c2VzLmMK KysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvY2xhdXNlcy5jCkBAIC01MCw2ICs1MCw3 IEBACiAjaW5jbHVkZSAidXRpbHMvZm1ncm9pZHMuaCIKICNpbmNsdWRlICJ1dGlscy9qc29uLmgi CiAjaW5jbHVkZSAidXRpbHMvanNvbmIuaCIKKyNpbmNsdWRlICJ1dGlscy9qc29ucGF0aC5oIgog I2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgi CiAjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKQEAgLTQxNCw2ICs0MTUsMjUgQEAgY29udGFp bl9tdXRhYmxlX2Z1bmN0aW9uc193YWxrZXIoTm9kZSAqbm9kZSwgdm9pZCAqY29udGV4dCkKIAkJ LyogQ2hlY2sgYWxsIHN1Ym5vZGVzICovCiAJfQogCisJaWYgKElzQShub2RlLCBKc29uRXhwcikp CisJeworCQlKc29uRXhwciAgICpqZXhwciA9IGNhc3ROb2RlKEpzb25FeHByLCBub2RlKTsKKwkJ Q29uc3QJICAgKmNuc3Q7CisKKwkJaWYgKCFJc0EoamV4cHItPnBhdGhfc3BlYywgQ29uc3QpKQor CQkJcmV0dXJuIHRydWU7CisKKwkJY25zdCA9IGNhc3ROb2RlKENvbnN0LCBqZXhwci0+cGF0aF9z cGVjKTsKKworCQlBc3NlcnQoY25zdC0+Y29uc3R0eXBlID09IEpTT05QQVRIT0lEKTsKKwkJaWYg KGNuc3QtPmNvbnN0aXNudWxsKQorCQkJcmV0dXJuIGZhbHNlOworCisJCWlmIChqc3BJc011dGFi bGUoRGF0dW1HZXRKc29uUGF0aFAoY25zdC0+Y29uc3R2YWx1ZSksCisJCQkJCQkgamV4cHItPnBh c3NpbmdfbmFtZXMsIGpleHByLT5wYXNzaW5nX3ZhbHVlcykpCisJCQlyZXR1cm4gdHJ1ZTsKKwl9 CisKIAlpZiAoSXNBKG5vZGUsIFNRTFZhbHVlRnVuY3Rpb24pKQogCXsKIAkJLyogYWxsIHZhcmlh bnRzIG9mIFNRTFZhbHVlRnVuY3Rpb24gYXJlIHN0YWJsZSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvcGFyc2VyL2dyYW0ueSBiL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKaW5kZXggMzlh ODAxYTFjMy4uOTEzNTRiODE3OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0u eQorKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55CkBAIC02NTMsMTAgKzY1MywxOSBAQCBz dGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFtZSwgTGlzdCAq YWxpYXNlcywgTm9kZSAqcXVlcnkpOwogCQkJCWpzb25fcmV0dXJuaW5nX2NsYXVzZV9vcHQKIAkJ CQlqc29uX25hbWVfYW5kX3ZhbHVlCiAJCQkJanNvbl9hZ2dyZWdhdGVfZnVuYworCQkJCWpzb25f YXJndW1lbnQKKwkJCQlqc29uX2JlaGF2aW9yCisJCQkJanNvbl9vbl9lcnJvcl9jbGF1c2Vfb3B0 CiAldHlwZSA8bGlzdD4JanNvbl9uYW1lX2FuZF92YWx1ZV9saXN0CiAJCQkJanNvbl92YWx1ZV9l eHByX2xpc3QKIAkJCQlqc29uX2FycmF5X2FnZ3JlZ2F0ZV9vcmRlcl9ieV9jbGF1c2Vfb3B0Ci0l dHlwZSA8aXZhbD4JanNvbl9wcmVkaWNhdGVfdHlwZV9jb25zdHJhaW50CisJCQkJanNvbl9hcmd1 bWVudHMKKwkJCQlqc29uX2JlaGF2aW9yX2NsYXVzZV9vcHQKKwkJCQlqc29uX3Bhc3NpbmdfY2xh dXNlX29wdAorJXR5cGUgPGl2YWw+CWpzb25fYmVoYXZpb3JfdHlwZQorCQkJCWpzb25fcHJlZGlj YXRlX3R5cGVfY29uc3RyYWludAorCQkJCWpzb25fcXVvdGVzX2NsYXVzZV9vcHQKKwkJCQlqc29u X3dyYXBwZXJfYmVoYXZpb3IKICV0eXBlIDxib29sZWFuPglqc29uX2tleV91bmlxdWVuZXNzX2Nv bnN0cmFpbnRfb3B0CiAJCQkJanNvbl9vYmplY3RfY29uc3RydWN0b3JfbnVsbF9jbGF1c2Vfb3B0 CiAJCQkJanNvbl9hcnJheV9jb25zdHJ1Y3Rvcl9udWxsX2NsYXVzZV9vcHQKQEAgLTY5Nyw3ICs3 MDYsNyBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFt ZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkpOwogCUNBQ0hFIENBTEwgQ0FMTEVEIENBU0NB REUgQ0FTQ0FERUQgQ0FTRSBDQVNUIENBVEFMT0dfUCBDSEFJTiBDSEFSX1AKIAlDSEFSQUNURVIg Q0hBUkFDVEVSSVNUSUNTIENIRUNLIENIRUNLUE9JTlQgQ0xBU1MgQ0xPU0UKIAlDTFVTVEVSIENP QUxFU0NFIENPTExBVEUgQ09MTEFUSU9OIENPTFVNTiBDT0xVTU5TIENPTU1FTlQgQ09NTUVOVFMg Q09NTUlUCi0JQ09NTUlUVEVEIENPTVBSRVNTSU9OIENPTkNVUlJFTlRMWSBDT05GSUdVUkFUSU9O IENPTkZMSUNUCisJQ09NTUlUVEVEIENPTVBSRVNTSU9OIENPTkNVUlJFTlRMWSBDT05ESVRJT05B TCBDT05GSUdVUkFUSU9OIENPTkZMSUNUCiAJQ09OTkVDVElPTiBDT05TVFJBSU5UIENPTlNUUkFJ TlRTIENPTlRFTlRfUCBDT05USU5VRV9QIENPTlZFUlNJT05fUCBDT1BZCiAJQ09TVCBDUkVBVEUg Q1JPU1MgQ1NWIENVQkUgQ1VSUkVOVF9QCiAJQ1VSUkVOVF9DQVRBTE9HIENVUlJFTlRfREFURSBD VVJSRU5UX1JPTEUgQ1VSUkVOVF9TQ0hFTUEKQEAgLTcwOCw4ICs3MTcsOCBAQCBzdGF0aWMgTm9k ZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFtZSwgTGlzdCAqYWxpYXNlcywg Tm9kZSAqcXVlcnkpOwogCURFVEFDSCBESUNUSU9OQVJZIERJU0FCTEVfUCBESVNDQVJEIERJU1RJ TkNUIERPIERPQ1VNRU5UX1AgRE9NQUlOX1AKIAlET1VCTEVfUCBEUk9QCiAKLQlFQUNIIEVMU0Ug RU5BQkxFX1AgRU5DT0RJTkcgRU5DUllQVEVEIEVORF9QIEVOVU1fUCBFU0NBUEUgRVZFTlQgRVhD RVBUCi0JRVhDTFVERSBFWENMVURJTkcgRVhDTFVTSVZFIEVYRUNVVEUgRVhJU1RTIEVYUExBSU4g RVhQUkVTU0lPTgorCUVBQ0ggRUxTRSBFTVBUWV9QIEVOQUJMRV9QIEVOQ09ESU5HIEVOQ1JZUFRF RCBFTkRfUCBFTlVNX1AgRVJST1JfUCBFU0NBUEUKKwlFVkVOVCBFWENFUFQgRVhDTFVERSBFWENM VURJTkcgRVhDTFVTSVZFIEVYRUNVVEUgRVhJU1RTIEVYUExBSU4gRVhQUkVTU0lPTgogCUVYVEVO U0lPTiBFWFRFUk5BTCBFWFRSQUNUCiAKIAlGQUxTRV9QIEZBTUlMWSBGRVRDSCBGSUxURVIgRklO QUxJWkUgRklSU1RfUCBGTE9BVF9QIEZPTExPV0lORyBGT1IKQEAgLTcyNCwxMCArNzMzLDEwIEBA IHN0YXRpYyBOb2RlICptYWtlUmVjdXJzaXZlVmlld1NlbGVjdChjaGFyICpyZWxuYW1lLCBMaXN0 ICphbGlhc2VzLCBOb2RlICpxdWVyeSk7CiAJSU5ORVJfUCBJTk9VVCBJTlBVVF9QIElOU0VOU0lU SVZFIElOU0VSVCBJTlNURUFEIElOVF9QIElOVEVHRVIKIAlJTlRFUlNFQ1QgSU5URVJWQUwgSU5U TyBJTlZPS0VSIElTIElTTlVMTCBJU09MQVRJT04KIAotCUpPSU4gSlNPTiBKU09OX0FSUkFZIEpT T05fQVJSQVlBR0cgSlNPTl9PQkpFQ1QgSlNPTl9PQkpFQ1RBR0cKLQlKU09OX1NDQUxBUiBKU09O X1NFUklBTElaRQorCUpPSU4gSlNPTiBKU09OX0FSUkFZIEpTT05fQVJSQVlBR0cgSlNPTl9FWElT VFMgSlNPTl9PQkpFQ1QgSlNPTl9PQkpFQ1RBR0cKKwlKU09OX1FVRVJZIEpTT05fU0NBTEFSIEpT T05fU0VSSUFMSVpFIEpTT05fVkFMVUUKIAotCUtFWSBLRVlTCisJS0VFUCBLRVkgS0VZUwogCiAJ TEFCRUwgTEFOR1VBR0UgTEFSR0VfUCBMQVNUX1AgTEFURVJBTF9QCiAJTEVBRElORyBMRUFLUFJP T0YgTEVBU1QgTEVGVCBMRVZFTCBMSUtFIExJTUlUIExJU1RFTiBMT0FEIExPQ0FMCkBAIC03NDEs NyArNzUwLDcgQEAgc3RhdGljIE5vZGUgKm1ha2VSZWN1cnNpdmVWaWV3U2VsZWN0KGNoYXIgKnJl bG5hbWUsIExpc3QgKmFsaWFzZXMsIE5vZGUgKnF1ZXJ5KTsKIAlOT1QgTk9USElORyBOT1RJRlkg Tk9UTlVMTCBOT1dBSVQgTlVMTF9QIE5VTExJRgogCU5VTExTX1AgTlVNRVJJQwogCi0JT0JKRUNU X1AgT0YgT0ZGIE9GRlNFVCBPSURTIE9MRCBPTiBPTkxZIE9QRVJBVE9SIE9QVElPTiBPUFRJT05T IE9SCisJT0JKRUNUX1AgT0YgT0ZGIE9GRlNFVCBPSURTIE9MRCBPTUlUIE9OIE9OTFkgT1BFUkFU T1IgT1BUSU9OIE9QVElPTlMgT1IKIAlPUkRFUiBPUkRJTkFMSVRZIE9USEVSUyBPVVRfUCBPVVRF Ul9QCiAJT1ZFUiBPVkVSTEFQUyBPVkVSTEFZIE9WRVJSSURJTkcgT1dORUQgT1dORVIKIApAQCAt NzUwLDcgKzc1OSw3IEBAIHN0YXRpYyBOb2RlICptYWtlUmVjdXJzaXZlVmlld1NlbGVjdChjaGFy ICpyZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpxdWVyeSk7CiAJUE9TSVRJT04gUFJFQ0VE SU5HIFBSRUNJU0lPTiBQUkVTRVJWRSBQUkVQQVJFIFBSRVBBUkVEIFBSSU1BUlkKIAlQUklPUiBQ UklWSUxFR0VTIFBST0NFRFVSQUwgUFJPQ0VEVVJFIFBST0NFRFVSRVMgUFJPR1JBTSBQVUJMSUNB VElPTgogCi0JUVVPVEUKKwlRVU9URSBRVU9URVMKIAogCVJBTkdFIFJFQUQgUkVBTCBSRUFTU0lH TiBSRUNIRUNLIFJFQ1VSU0lWRSBSRUZfUCBSRUZFUkVOQ0VTIFJFRkVSRU5DSU5HCiAJUkVGUkVT SCBSRUlOREVYIFJFTEFUSVZFX1AgUkVMRUFTRSBSRU5BTUUgUkVQRUFUQUJMRSBSRVBMQUNFIFJF UExJQ0EKQEAgLTc2MSw3ICs3NzAsNyBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdT ZWxlY3QoY2hhciAqcmVsbmFtZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkpOwogCVNFUVVF TkNFIFNFUVVFTkNFUwogCVNFUklBTElaQUJMRSBTRVJWRVIgU0VTU0lPTiBTRVNTSU9OX1VTRVIg U0VUIFNFVFMgU0VUT0YgU0hBUkUgU0hPVwogCVNJTUlMQVIgU0lNUExFIFNLSVAgU01BTExJTlQg U05BUFNIT1QgU09NRSBTUUxfUCBTVEFCTEUgU1RBTkRBTE9ORV9QCi0JU1RBUlQgU1RBVEVNRU5U IFNUQVRJU1RJQ1MgU1RESU4gU1RET1VUIFNUT1JBR0UgU1RPUkVEIFNUUklDVF9QIFNUUklQX1AK KwlTVEFSVCBTVEFURU1FTlQgU1RBVElTVElDUyBTVERJTiBTVERPVVQgU1RPUkFHRSBTVE9SRUQg U1RSSUNUX1AgU1RSSU5HX1AgU1RSSVBfUAogCVNVQlNDUklQVElPTiBTVUJTVFJJTkcgU1VQUE9S VCBTWU1NRVRSSUMgU1lTSUQgU1lTVEVNX1AgU1lTVEVNX1VTRVIKIAogCVRBQkxFIFRBQkxFUyBU QUJMRVNBTVBMRSBUQUJMRVNQQUNFIFRFTVAgVEVNUExBVEUgVEVNUE9SQVJZIFRFWFRfUCBUSEVO CkBAIC03NjksNyArNzc4LDcgQEAgc3RhdGljIE5vZGUgKm1ha2VSZWN1cnNpdmVWaWV3U2VsZWN0 KGNoYXIgKnJlbG5hbWUsIExpc3QgKmFsaWFzZXMsIE5vZGUgKnF1ZXJ5KTsKIAlUUkVBVCBUUklH R0VSIFRSSU0gVFJVRV9QCiAJVFJVTkNBVEUgVFJVU1RFRCBUWVBFX1AgVFlQRVNfUAogCi0JVUVT Q0FQRSBVTkJPVU5ERUQgVU5DT01NSVRURUQgVU5FTkNSWVBURUQgVU5JT04gVU5JUVVFIFVOS05P V04KKwlVRVNDQVBFIFVOQk9VTkRFRCBVTkNPTkRJVElPTkFMIFVOQ09NTUlUVEVEIFVORU5DUllQ VEVEIFVOSU9OIFVOSVFVRSBVTktOT1dOCiAJVU5MSVNURU4gVU5MT0dHRUQgVU5USUwgVVBEQVRF IFVTRVIgVVNJTkcKIAogCVZBQ1VVTSBWQUxJRCBWQUxJREFURSBWQUxJREFUT1IgVkFMVUVfUCBW QUxVRVMgVkFSQ0hBUiBWQVJJQURJQyBWQVJZSU5HCkBAIC0xNTgwNSw2ICsxNTgxNCw2MiBAQCBm dW5jX2V4cHJfY29tbW9uX3N1YmV4cHI6CiAJCQkJCW0tPmxvY2F0aW9uID0gQDE7CiAJCQkJCSQk ID0gKE5vZGUgKikgbTsKIAkJCQl9CisJCQl8IEpTT05fUVVFUlkgJygnCisJCQkJanNvbl92YWx1 ZV9leHByICcsJyBhX2V4cHIganNvbl9wYXNzaW5nX2NsYXVzZV9vcHQKKwkJCQlqc29uX3JldHVy bmluZ19jbGF1c2Vfb3B0CisJCQkJanNvbl93cmFwcGVyX2JlaGF2aW9yCisJCQkJanNvbl9xdW90 ZXNfY2xhdXNlX29wdAorCQkJCWpzb25fYmVoYXZpb3JfY2xhdXNlX29wdAorCQkJJyknCisJCQkJ eworCQkJCQlKc29uRnVuY0V4cHIgKm4gPSBtYWtlTm9kZShKc29uRnVuY0V4cHIpOworCisJCQkJ CW4tPm9wID0gSlNPTl9RVUVSWV9PUDsKKwkJCQkJbi0+Y29udGV4dF9pdGVtID0gKEpzb25WYWx1 ZUV4cHIgKikgJDM7CisJCQkJCW4tPnBhdGhzcGVjID0gJDU7CisJCQkJCW4tPnBhc3NpbmcgPSAk NjsKKwkJCQkJbi0+b3V0cHV0ID0gKEpzb25PdXRwdXQgKikgJDc7CisJCQkJCW4tPndyYXBwZXIg PSAkODsKKwkJCQkJbi0+cXVvdGVzID0gJDk7CisJCQkJCW4tPm9uX2VtcHR5ID0gKEpzb25CZWhh dmlvciAqKSBsaW5pdGlhbCgkMTApOworCQkJCQluLT5vbl9lcnJvciA9IChKc29uQmVoYXZpb3Ig KikgbHNlY29uZCgkMTApOworCQkJCQluLT5sb2NhdGlvbiA9IEAxOworCQkJCQkkJCA9IChOb2Rl ICopIG47CisJCQkJfQorCQkJfCBKU09OX0VYSVNUUyAnKCcKKwkJCQlqc29uX3ZhbHVlX2V4cHIg JywnIGFfZXhwciBqc29uX3Bhc3NpbmdfY2xhdXNlX29wdAorCQkJCWpzb25fb25fZXJyb3JfY2xh dXNlX29wdAorCQkJJyknCisJCQkJeworCQkJCQlKc29uRnVuY0V4cHIgKm4gPSBtYWtlTm9kZShK c29uRnVuY0V4cHIpOworCisJCQkJCW4tPm9wID0gSlNPTl9FWElTVFNfT1A7CisJCQkJCW4tPmNv bnRleHRfaXRlbSA9IChKc29uVmFsdWVFeHByICopICQzOworCQkJCQluLT5wYXRoc3BlYyA9ICQ1 OworCQkJCQluLT5wYXNzaW5nID0gJDY7CisJCQkJCW4tPm91dHB1dCA9IE5VTEw7CisJCQkJCW4t Pm9uX2Vycm9yID0gKEpzb25CZWhhdmlvciAqKSAkNzsKKwkJCQkJbi0+bG9jYXRpb24gPSBAMTsK KwkJCQkJJCQgPSAoTm9kZSAqKSBuOworCQkJCX0KKwkJCXwgSlNPTl9WQUxVRSAnKCcKKwkJCQlq c29uX3ZhbHVlX2V4cHIgJywnIGFfZXhwciBqc29uX3Bhc3NpbmdfY2xhdXNlX29wdAorCQkJCWpz b25fcmV0dXJuaW5nX2NsYXVzZV9vcHQKKwkJCQlqc29uX2JlaGF2aW9yX2NsYXVzZV9vcHQKKwkJ CScpJworCQkJCXsKKwkJCQkJSnNvbkZ1bmNFeHByICpuID0gbWFrZU5vZGUoSnNvbkZ1bmNFeHBy KTsKKworCQkJCQluLT5vcCA9IEpTT05fVkFMVUVfT1A7CisJCQkJCW4tPmNvbnRleHRfaXRlbSA9 IChKc29uVmFsdWVFeHByICopICQzOworCQkJCQluLT5wYXRoc3BlYyA9ICQ1OworCQkJCQluLT5w YXNzaW5nID0gJDY7CisJCQkJCW4tPm91dHB1dCA9IChKc29uT3V0cHV0ICopICQ3OworCQkJCQlu LT5vbl9lbXB0eSA9IChKc29uQmVoYXZpb3IgKikgbGluaXRpYWwoJDgpOworCQkJCQluLT5vbl9l cnJvciA9IChKc29uQmVoYXZpb3IgKikgbHNlY29uZCgkOCk7CisJCQkJCW4tPmxvY2F0aW9uID0g QDE7CisJCQkJCSQkID0gKE5vZGUgKikgbjsKKwkJCQl9CiAJCQk7CiAKIApAQCAtMTY1MzEsNiAr MTY1OTYsNzcgQEAgb3B0X2FzeW1tZXRyaWM6IEFTWU1NRVRSSUMKIAkJOwogCiAvKiBTUUwvSlNP TiBzdXBwb3J0ICovCitqc29uX3Bhc3NpbmdfY2xhdXNlX29wdDoKKwkJCVBBU1NJTkcganNvbl9h cmd1bWVudHMJCQkJCXsgJCQgPSAkMjsgfQorCQkJfCAvKkVNUFRZKi8JCQkJCQkJCXsgJCQgPSBO SUw7IH0KKwkJOworCitqc29uX2FyZ3VtZW50czoKKwkJCWpzb25fYXJndW1lbnQJCQkJCQkJeyAk JCA9IGxpc3RfbWFrZTEoJDEpOyB9CisJCQl8IGpzb25fYXJndW1lbnRzICcsJyBqc29uX2FyZ3Vt ZW50CQl7ICQkID0gbGFwcGVuZCgkMSwgJDMpOyB9CisJCTsKKworanNvbl9hcmd1bWVudDoKKwkJ CWpzb25fdmFsdWVfZXhwciBBUyBDb2xMYWJlbAorCQkJeworCQkJCUpzb25Bcmd1bWVudCAqbiA9 IG1ha2VOb2RlKEpzb25Bcmd1bWVudCk7CisKKwkJCQluLT52YWwgPSAoSnNvblZhbHVlRXhwciAq KSAkMTsKKwkJCQluLT5uYW1lID0gJDM7CisJCQkJJCQgPSAoTm9kZSAqKSBuOworCQkJfQorCQk7 CisKKy8qIEFSUkFZIGlzIGEgbm9pc2Ugd29yZCAqLworanNvbl93cmFwcGVyX2JlaGF2aW9yOgor CQkJICBXSVRIT1VUIFdSQVBQRVIJCQkJCXsgJCQgPSBKU1dfTk9ORTsgfQorCQkJfCBXSVRIT1VU IEFSUkFZCVdSQVBQRVIJCQkJeyAkJCA9IEpTV19OT05FOyB9CisJCQl8IFdJVEggV1JBUFBFUgkJ CQkJCXsgJCQgPSBKU1dfVU5DT05ESVRJT05BTDsgfQorCQkJfCBXSVRIIEFSUkFZIFdSQVBQRVIJ CQkJeyAkJCA9IEpTV19VTkNPTkRJVElPTkFMOyB9CisJCQl8IFdJVEggQ09ORElUSU9OQUwgQVJS QVkgV1JBUFBFUgl7ICQkID0gSlNXX0NPTkRJVElPTkFMOyB9CisJCQl8IFdJVEggVU5DT05ESVRJ T05BTCBBUlJBWSBXUkFQUEVSCXsgJCQgPSBKU1dfVU5DT05ESVRJT05BTDsgfQorCQkJfCBXSVRI IENPTkRJVElPTkFMIFdSQVBQRVIJCQl7ICQkID0gSlNXX0NPTkRJVElPTkFMOyB9CisJCQl8IFdJ VEggVU5DT05ESVRJT05BTCBXUkFQUEVSCQl7ICQkID0gSlNXX1VOQ09ORElUSU9OQUw7IH0KKwkJ CXwgLyogZW1wdHkgKi8JCQkJCQl7ICQkID0gSlNXX1VOU1BFQzsgfQorCQk7CisKK2pzb25fYmVo YXZpb3I6CisJCQlERUZBVUxUIGFfZXhwcgorCQkJCXsgJCQgPSAoTm9kZSAqKSBtYWtlSnNvbkJl aGF2aW9yKEpTT05fQkVIQVZJT1JfREVGQVVMVCwgJDIsIE5VTEwsIEAxKTsgfQorCQkJfCBqc29u X2JlaGF2aW9yX3R5cGUKKwkJCQl7ICQkID0gKE5vZGUgKikgbWFrZUpzb25CZWhhdmlvcigkMSwg TlVMTCwgTlVMTCwgQDEpOyB9CisJCTsKKworanNvbl9iZWhhdmlvcl90eXBlOgorCQkJRVJST1Jf UAkJeyAkJCA9IEpTT05fQkVIQVZJT1JfRVJST1I7IH0KKwkJCXwgTlVMTF9QCXsgJCQgPSBKU09O X0JFSEFWSU9SX05VTEw7IH0KKwkJCXwgVFJVRV9QCXsgJCQgPSBKU09OX0JFSEFWSU9SX1RSVUU7 IH0KKwkJCXwgRkFMU0VfUAl7ICQkID0gSlNPTl9CRUhBVklPUl9GQUxTRTsgfQorCQkJfCBVTktO T1dOCXsgJCQgPSBKU09OX0JFSEFWSU9SX1VOS05PV047IH0KKwkJCXwgRU1QVFlfUCBBUlJBWQl7 ICQkID0gSlNPTl9CRUhBVklPUl9FTVBUWV9BUlJBWTsgfQorCQkJfCBFTVBUWV9QIE9CSkVDVF9Q CXsgJCQgPSBKU09OX0JFSEFWSU9SX0VNUFRZX09CSkVDVDsgfQorCQkJLyogbm9uLXN0YW5kYXJk LCBmb3IgT3JhY2xlIGNvbXBhdGliaWxpdHkgb25seSAqLworCQkJfCBFTVBUWV9QCXsgJCQgPSBK U09OX0JFSEFWSU9SX0VNUFRZX0FSUkFZOyB9CisJCTsKKworanNvbl9iZWhhdmlvcl9jbGF1c2Vf b3B0OgorCQkJanNvbl9iZWhhdmlvciBPTiBFTVBUWV9QCisJCQkJeyAkJCA9IGxpc3RfbWFrZTIo JDEsIE5VTEwpOyB9CisJCQl8IGpzb25fYmVoYXZpb3IgT04gRVJST1JfUAorCQkJCXsgJCQgPSBs aXN0X21ha2UyKE5VTEwsICQxKTsgfQorCQkJfCBqc29uX2JlaGF2aW9yIE9OIEVNUFRZX1AganNv bl9iZWhhdmlvciBPTiBFUlJPUl9QCisJCQkJeyAkJCA9IGxpc3RfbWFrZTIoJDEsICQ0KTsgfQor CQkJfCAvKiBFTVBUWSAqLworCQkJCXsgJCQgPSBsaXN0X21ha2UyKE5VTEwsIE5VTEwpOyB9CisJ CTsKKworanNvbl9vbl9lcnJvcl9jbGF1c2Vfb3B0OgorCQkJanNvbl9iZWhhdmlvciBPTiBFUlJP Ul9QCisJCQkJeyAkJCA9ICQxOyB9CisJCQl8IC8qIEVNUFRZICovCisJCQkJeyAkJCA9IE5VTEw7 IH0KKwkJOworCiBqc29uX3ZhbHVlX2V4cHI6CiAJCQlhX2V4cHIganNvbl9mb3JtYXRfY2xhdXNl X29wdAogCQkJewpAQCAtMTY1NzUsNiArMTY3MTEsMTQgQEAganNvbl9mb3JtYXRfY2xhdXNlX29w dDoKIAkJCQl9CiAJCTsKIAoranNvbl9xdW90ZXNfY2xhdXNlX29wdDoKKwkJCUtFRVAgUVVPVEVT IE9OIFNDQUxBUiBTVFJJTkdfUAkJeyAkJCA9IEpTX1FVT1RFU19LRUVQOyB9CisJCQl8IEtFRVAg UVVPVEVTCQkJCQkJeyAkJCA9IEpTX1FVT1RFU19LRUVQOyB9CisJCQl8IE9NSVQgUVVPVEVTIE9O IFNDQUxBUiBTVFJJTkdfUAl7ICQkID0gSlNfUVVPVEVTX09NSVQ7IH0KKwkJCXwgT01JVCBRVU9U RVMJCQkJCQl7ICQkID0gSlNfUVVPVEVTX09NSVQ7IH0KKwkJCXwgLyogRU1QVFkgKi8JCQkJCQl7 ICQkID0gSlNfUVVPVEVTX1VOU1BFQzsgfQorCQk7CisKIGpzb25fcmV0dXJuaW5nX2NsYXVzZV9v cHQ6CiAJCQlSRVRVUk5JTkcgVHlwZW5hbWUganNvbl9mb3JtYXRfY2xhdXNlX29wdAogCQkJCXsK QEAgLTE3MTkxLDYgKzE3MzM1LDcgQEAgdW5yZXNlcnZlZF9rZXl3b3JkOgogCQkJfCBDT01NSVQK IAkJCXwgQ09NTUlUVEVECiAJCQl8IENPTVBSRVNTSU9OCisJCQl8IENPTkRJVElPTkFMCiAJCQl8 IENPTkZJR1VSQVRJT04KIAkJCXwgQ09ORkxJQ1QKIAkJCXwgQ09OTkVDVElPTgpAQCAtMTcyMjcs MTAgKzE3MzcyLDEyIEBAIHVucmVzZXJ2ZWRfa2V5d29yZDoKIAkJCXwgRE9VQkxFX1AKIAkJCXwg RFJPUAogCQkJfCBFQUNICisJCQl8IEVNUFRZX1AKIAkJCXwgRU5BQkxFX1AKIAkJCXwgRU5DT0RJ TkcKIAkJCXwgRU5DUllQVEVECiAJCQl8IEVOVU1fUAorCQkJfCBFUlJPUl9QCiAJCQl8IEVTQ0FQ RQogCQkJfCBFVkVOVAogCQkJfCBFWENMVURFCkBAIC0xNzI4MCw2ICsxNzQyNyw3IEBAIHVucmVz ZXJ2ZWRfa2V5d29yZDoKIAkJCXwgSU5TVEVBRAogCQkJfCBJTlZPS0VSCiAJCQl8IElTT0xBVElP TgorCQkJfCBLRUVQCiAJCQl8IEtFWQogCQkJfCBLRVlTCiAJCQl8IExBQkVMCkBAIC0xNzMyNiw2 ICsxNzQ3NCw3IEBAIHVucmVzZXJ2ZWRfa2V5d29yZDoKIAkJCXwgT0ZGCiAJCQl8IE9JRFMKIAkJ CXwgT0xECisJCQl8IE9NSVQKIAkJCXwgT1BFUkFUT1IKIAkJCXwgT1BUSU9OCiAJCQl8IE9QVElP TlMKQEAgLTE3MzU2LDYgKzE3NTA1LDcgQEAgdW5yZXNlcnZlZF9rZXl3b3JkOgogCQkJfCBQUk9H UkFNCiAJCQl8IFBVQkxJQ0FUSU9OCiAJCQl8IFFVT1RFCisJCQl8IFFVT1RFUwogCQkJfCBSQU5H RQogCQkJfCBSRUFECiAJCQl8IFJFQVNTSUdOCkBAIC0xNzQxNSw2ICsxNzU2NSw3IEBAIHVucmVz ZXJ2ZWRfa2V5d29yZDoKIAkJCXwgU1RPUkFHRQogCQkJfCBTVE9SRUQKIAkJCXwgU1RSSUNUX1AK KwkJCXwgU1RSSU5HX1AKIAkJCXwgU1RSSVBfUAogCQkJfCBTVUJTQ1JJUFRJT04KIAkJCXwgU1VQ UE9SVApAQCAtMTc0MzcsNiArMTc1ODgsNyBAQCB1bnJlc2VydmVkX2tleXdvcmQ6CiAJCQl8IFVF U0NBUEUKIAkJCXwgVU5CT1VOREVECiAJCQl8IFVOQ09NTUlUVEVECisJCQl8IFVOQ09ORElUSU9O QUwKIAkJCXwgVU5FTkNSWVBURUQKIAkJCXwgVU5LTk9XTgogCQkJfCBVTkxJU1RFTgpAQCAtMTc0 OTcsMTAgKzE3NjQ5LDEzIEBAIGNvbF9uYW1lX2tleXdvcmQ6CiAJCQl8IEpTT04KIAkJCXwgSlNP Tl9BUlJBWQogCQkJfCBKU09OX0FSUkFZQUdHCisJCQl8IEpTT05fRVhJU1RTCiAJCQl8IEpTT05f T0JKRUNUCiAJCQl8IEpTT05fT0JKRUNUQUdHCisJCQl8IEpTT05fUVVFUlkKIAkJCXwgSlNPTl9T Q0FMQVIKIAkJCXwgSlNPTl9TRVJJQUxJWkUKKwkJCXwgSlNPTl9WQUxVRQogCQkJfCBMRUFTVAog CQkJfCBNRVJHRV9BQ1RJT04KIAkJCXwgTkFUSU9OQUwKQEAgLTE3NzM0LDYgKzE3ODg5LDcgQEAg YmFyZV9sYWJlbF9rZXl3b3JkOgogCQkJfCBDT01NSVRURUQKIAkJCXwgQ09NUFJFU1NJT04KIAkJ CXwgQ09OQ1VSUkVOVExZCisJCQl8IENPTkRJVElPTkFMCiAJCQl8IENPTkZJR1VSQVRJT04KIAkJ CXwgQ09ORkxJQ1QKIAkJCXwgQ09OTkVDVElPTgpAQCAtMTc3ODYsMTEgKzE3OTQyLDEzIEBAIGJh cmVfbGFiZWxfa2V5d29yZDoKIAkJCXwgRFJPUAogCQkJfCBFQUNICiAJCQl8IEVMU0UKKwkJCXwg RU1QVFlfUAogCQkJfCBFTkFCTEVfUAogCQkJfCBFTkNPRElORwogCQkJfCBFTkNSWVBURUQKIAkJ CXwgRU5EX1AKIAkJCXwgRU5VTV9QCisJCQl8IEVSUk9SX1AKIAkJCXwgRVNDQVBFCiAJCQl8IEVW RU5UCiAJCQl8IEVYQ0xVREUKQEAgLTE3ODYwLDEwICsxODAxOCwxNCBAQCBiYXJlX2xhYmVsX2tl eXdvcmQ6CiAJCQl8IEpTT04KIAkJCXwgSlNPTl9BUlJBWQogCQkJfCBKU09OX0FSUkFZQUdHCisJ CQl8IEpTT05fRVhJU1RTCiAJCQl8IEpTT05fT0JKRUNUCiAJCQl8IEpTT05fT0JKRUNUQUdHCisJ CQl8IEpTT05fUVVFUlkKIAkJCXwgSlNPTl9TQ0FMQVIKIAkJCXwgSlNPTl9TRVJJQUxJWkUKKwkJ CXwgSlNPTl9WQUxVRQorCQkJfCBLRUVQCiAJCQl8IEtFWQogCQkJfCBLRVlTCiAJCQl8IExBQkVM CkBAIC0xNzkyNSw2ICsxODA4Nyw3IEBAIGJhcmVfbGFiZWxfa2V5d29yZDoKIAkJCXwgT0ZGCiAJ CQl8IE9JRFMKIAkJCXwgT0xECisJCQl8IE9NSVQKIAkJCXwgT05MWQogCQkJfCBPUEVSQVRPUgog CQkJfCBPUFRJT04KQEAgLTE3OTYyLDYgKzE4MTI1LDcgQEAgYmFyZV9sYWJlbF9rZXl3b3JkOgog CQkJfCBQUk9HUkFNCiAJCQl8IFBVQkxJQ0FUSU9OCiAJCQl8IFFVT1RFCisJCQl8IFFVT1RFUwog CQkJfCBSQU5HRQogCQkJfCBSRUFECiAJCQl8IFJFQUwKQEAgLTE4MDMwLDYgKzE4MTk0LDcgQEAg YmFyZV9sYWJlbF9rZXl3b3JkOgogCQkJfCBTVE9SQUdFCiAJCQl8IFNUT1JFRAogCQkJfCBTVFJJ Q1RfUAorCQkJfCBTVFJJTkdfUAogCQkJfCBTVFJJUF9QCiAJCQl8IFNVQlNDUklQVElPTgogCQkJ fCBTVUJTVFJJTkcKQEAgLTE4MDY0LDYgKzE4MjI5LDcgQEAgYmFyZV9sYWJlbF9rZXl3b3JkOgog CQkJfCBVRVNDQVBFCiAJCQl8IFVOQk9VTkRFRAogCQkJfCBVTkNPTU1JVFRFRAorCQkJfCBVTkNP TkRJVElPTkFMCiAJCQl8IFVORU5DUllQVEVECiAJCQl8IFVOSVFVRQogCQkJfCBVTktOT1dOCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZXhwci5jIGIvc3JjL2JhY2tlbmQv cGFyc2VyL3BhcnNlX2V4cHIuYwppbmRleCBkNDRiMWYyYWIyLi41YTUxMzBiMTYwIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZXhwci5jCisrKyBiL3NyYy9iYWNrZW5kL3Bh cnNlci9wYXJzZV9leHByLmMKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJ1dGlscy9idWls dGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2RhdGUuaCIKICNpbmNsdWRlICJ1dGlscy9mbWdyb2lk cy5oIgorI2luY2x1ZGUgInV0aWxzL2pzb25iLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hl LmgiCiAjaW5jbHVkZSAidXRpbHMvdGltZXN0YW1wLmgiCiAjaW5jbHVkZSAidXRpbHMveG1sLmgi CkBAIC05MSw2ICs5MiwyMyBAQCBzdGF0aWMgTm9kZSAqdHJhbnNmb3JtSnNvblBhcnNlRXhwcihQ YXJzZVN0YXRlICpwc3RhdGUsIEpzb25QYXJzZUV4cHIgKmV4cHIpOwogc3RhdGljIE5vZGUgKnRy YW5zZm9ybUpzb25TY2FsYXJFeHByKFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvblNjYWxhckV4cHIg KmV4cHIpOwogc3RhdGljIE5vZGUgKnRyYW5zZm9ybUpzb25TZXJpYWxpemVFeHByKFBhcnNlU3Rh dGUgKnBzdGF0ZSwKIAkJCQkJCQkJCQlKc29uU2VyaWFsaXplRXhwciAqZXhwcik7CitzdGF0aWMg Tm9kZSAqdHJhbnNmb3JtSnNvbkZ1bmNFeHByKFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvbkZ1bmNF eHByICpwKTsKK3N0YXRpYyBKc29uRXhwciAqdHJhbnNmb3JtSnNvbkV4cHJDb21tb24oUGFyc2VT dGF0ZSAqcHN0YXRlLCBKc29uRnVuY0V4cHIgKmZ1bmMsCisJCQkJCQkJCQkJIGNvbnN0IGNoYXIg KmNvbnN0cnVjdE5hbWUpOworc3RhdGljIHZvaWQgdHJhbnNmb3JtSnNvblBhc3NpbmdBcmdzKFBh cnNlU3RhdGUgKnBzdGF0ZSwgY29uc3QgY2hhciAqY29uc3RydWN0TmFtZSwKKwkJCQkJCQkJCSBK c29uRm9ybWF0VHlwZSBmb3JtYXQsIExpc3QgKmFyZ3MsCisJCQkJCQkJCQkgTGlzdCAqKnBhc3Np bmdfdmFsdWVzLCBMaXN0ICoqcGFzc2luZ19uYW1lcyk7CitzdGF0aWMgTm9kZSAqY29lcmNlSnNv bkZ1bmNFeHByT3V0cHV0KFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvbkV4cHIgKmpzZXhwcik7Citz dGF0aWMgT2lkCUpzb25GdW5jRXhwckRlZmF1bHRSZXR1cm5UeXBlKEpzb25FeHByICpqc2V4cHIp Oworc3RhdGljIE5vZGUgKmNvZXJjZUpzb25FeHByKFBhcnNlU3RhdGUgKnBzdGF0ZSwgTm9kZSAq ZXhwciwKKwkJCQkJCQljb25zdCBKc29uUmV0dXJuaW5nICpyZXR1cm5pbmcsIGJvb2wgb21pdF9x dW90ZXMpOworc3RhdGljIEpzb25Db2VyY2lvbiAqbWFrZUpzb25Db2VyY2lvbihjb25zdCBKc29u UmV0dXJuaW5nICpyZXR1cm5pbmcsCisJCQkJCQkJCQkgIGJvb2wgb21pdF9xdW90ZXMsIE5vZGUg KmNhc3RfZXhwcik7CitzdGF0aWMgTGlzdCAqSW5pdEpzb25JdGVtQ29lcmNpb25zKFBhcnNlU3Rh dGUgKnBzdGF0ZSwgY29uc3QgSnNvblJldHVybmluZyAqcmV0dXJuaW5nLAorCQkJCQkJCQkgICBP aWQgY29udGV4dEl0ZW1UeXBlSWQpOworc3RhdGljIEpzb25CZWhhdmlvciAqdHJhbnNmb3JtSnNv bkJlaGF2aW9yKFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvbkJlaGF2aW9yICpiZWhhdmlvciwKKwkJ CQkJCQkJCQkgICBKc29uQmVoYXZpb3JUeXBlIGRlZmF1bHRfYmVoYXZpb3IsCisJCQkJCQkJCQkJ ICAgSnNvblJldHVybmluZyAqcmV0dXJuaW5nKTsKIHN0YXRpYyBOb2RlICptYWtlX3Jvd19jb21w YXJpc29uX29wKFBhcnNlU3RhdGUgKnBzdGF0ZSwgTGlzdCAqb3BuYW1lLAogCQkJCQkJCQkJTGlz dCAqbGFyZ3MsIExpc3QgKnJhcmdzLCBpbnQgbG9jYXRpb24pOwogc3RhdGljIE5vZGUgKm1ha2Vf cm93X2Rpc3RpbmN0X29wKFBhcnNlU3RhdGUgKnBzdGF0ZSwgTGlzdCAqb3BuYW1lLApAQCAtMzU5 LDYgKzM3NywxMCBAQCB0cmFuc2Zvcm1FeHByUmVjdXJzZShQYXJzZVN0YXRlICpwc3RhdGUsIE5v ZGUgKmV4cHIpCiAJCQlyZXN1bHQgPSB0cmFuc2Zvcm1Kc29uU2VyaWFsaXplRXhwcihwc3RhdGUs IChKc29uU2VyaWFsaXplRXhwciAqKSBleHByKTsKIAkJCWJyZWFrOwogCisJCWNhc2UgVF9Kc29u RnVuY0V4cHI6CisJCQlyZXN1bHQgPSB0cmFuc2Zvcm1Kc29uRnVuY0V4cHIocHN0YXRlLCAoSnNv bkZ1bmNFeHByICopIGV4cHIpOworCQkJYnJlYWs7CisKIAkJZGVmYXVsdDoKIAkJCS8qIHNob3Vs ZCBub3QgcmVhY2ggaGVyZSAqLwogCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBub2RlIHR5 cGU6ICVkIiwgKGludCkgbm9kZVRhZyhleHByKSk7CkBAIC0zMjYzLDcgKzMyODUsNyBAQCBtYWtl SnNvbkJ5dGVhVG9UZXh0Q29udmVyc2lvbihOb2RlICpleHByLCBKc29uRm9ybWF0ICpmb3JtYXQs IGludCBsb2NhdGlvbikKIHN0YXRpYyBOb2RlICoKIHRyYW5zZm9ybUpzb25WYWx1ZUV4cHIoUGFy c2VTdGF0ZSAqcHN0YXRlLCBjb25zdCBjaGFyICpjb25zdHJ1Y3ROYW1lLAogCQkJCQkgICBKc29u VmFsdWVFeHByICp2ZSwgSnNvbkZvcm1hdFR5cGUgZGVmYXVsdF9mb3JtYXQsCi0JCQkJCSAgIE9p ZCB0YXJnZXR0eXBlKQorCQkJCQkgICBPaWQgdGFyZ2V0dHlwZSwgYm9vbCBpc2FyZykKIHsKIAlO b2RlCSAgICpleHByID0gdHJhbnNmb3JtRXhwclJlY3Vyc2UocHN0YXRlLCAoTm9kZSAqKSB2ZS0+ cmF3X2V4cHIpOwogCU5vZGUJICAgKnJhd2V4cHI7CkBAIC0zMjk1LDYgKzMzMTcsNDEgQEAgdHJh bnNmb3JtSnNvblZhbHVlRXhwcihQYXJzZVN0YXRlICpwc3RhdGUsIGNvbnN0IGNoYXIgKmNvbnN0 cnVjdE5hbWUsCiAJCWVsc2UKIAkJCWZvcm1hdCA9IHZlLT5mb3JtYXQtPmZvcm1hdF90eXBlOwog CX0KKwllbHNlIGlmIChpc2FyZykKKwl7CisJCS8qCisJCSAqIFNwZWNpYWwgdHJlYXRtZW50IGZv ciBQQVNTSU5HIGFyZ3VtZW50cy4KKwkJICoKKwkJICogUGFzcyB0eXBlcyBzdXBwb3J0ZWQgYnkg R2V0SnNvblBhdGhWYXIoKSAvIEpzb25JdGVtRnJvbURhdHVtKCkKKwkJICogZGlyZWN0bHkgd2l0 aG91dCBjb252ZXJ0aW5nIHRvIGpzb25bYl0uCisJCSAqLworCQlzd2l0Y2ggKGV4cHJ0eXBlKQor CQl7CisJCQljYXNlIEJPT0xPSUQ6CisJCQljYXNlIE5VTUVSSUNPSUQ6CisJCQljYXNlIElOVDJP SUQ6CisJCQljYXNlIElOVDRPSUQ6CisJCQljYXNlIElOVDhPSUQ6CisJCQljYXNlIEZMT0FUNE9J RDoKKwkJCWNhc2UgRkxPQVQ4T0lEOgorCQkJY2FzZSBURVhUT0lEOgorCQkJY2FzZSBWQVJDSEFS T0lEOgorCQkJY2FzZSBEQVRFT0lEOgorCQkJY2FzZSBUSU1FT0lEOgorCQkJY2FzZSBUSU1FVFpP SUQ6CisJCQljYXNlIFRJTUVTVEFNUE9JRDoKKwkJCWNhc2UgVElNRVNUQU1QVFpPSUQ6CisJCQkJ cmV0dXJuIGV4cHI7CisKKwkJCWRlZmF1bHQ6CisJCQkJaWYgKHR5cGNhdGVnb3J5ID09IFRZUENB VEVHT1JZX1NUUklORykKKwkJCQkJcmV0dXJuIGV4cHI7CisJCQkJLyogZWxzZSBjb252ZXJ0IGFy Z3VtZW50IHRvIGpzb25bYl0gdHlwZSAqLworCQkJCWJyZWFrOworCQl9CisKKwkJZm9ybWF0ID0g ZGVmYXVsdF9mb3JtYXQ7CisJfQogCWVsc2UgaWYgKGV4cHJ0eXBlID09IEpTT05PSUQgfHwgZXhw cnR5cGUgPT0gSlNPTkJPSUQpCiAJCWZvcm1hdCA9IEpTX0ZPUk1BVF9ERUZBVUxUOyAvKiBkbyBu b3QgZm9ybWF0IGpzb25bYl0gdHlwZXMgKi8KIAllbHNlCkBAIC0zMzA2LDcgKzMzNjMsMTIgQEAg dHJhbnNmb3JtSnNvblZhbHVlRXhwcihQYXJzZVN0YXRlICpwc3RhdGUsIGNvbnN0IGNoYXIgKmNv bnN0cnVjdE5hbWUsCiAJCU5vZGUJICAgKmNvZXJjZWQ7CiAJCWJvb2wJCW9ubHlfYWxsb3dfY2Fz dCA9IE9pZElzVmFsaWQodGFyZ2V0dHlwZSk7CiAKLQkJaWYgKCFvbmx5X2FsbG93X2Nhc3QgJiYK KwkJLyoKKwkJICogUEFTU0lORyBhcmdzIGFyZSBoYW5kbGVkIGFwcHJvcHJpYXRlbHkgYnkgR2V0 SnNvblBhdGhWYXIoKSAvCisJCSAqIEpzb25JdGVtRnJvbURhdHVtKCkuCisJCSAqLworCQlpZiAo IWlzYXJnICYmCisJCQkhb25seV9hbGxvd19jYXN0ICYmCiAJCQlleHBydHlwZSAhPSBCWVRFQU9J RCAmJiB0eXBjYXRlZ29yeSAhPSBUWVBDQVRFR09SWV9TVFJJTkcpCiAJCQllcmVwb3J0KEVSUk9S LAogCQkJCQllcnJjb2RlKEVSUkNPREVfREFUQVRZUEVfTUlTTUFUQ0gpLApAQCAtMzQ1OSw2ICsz NTIxLDExIEBAIHRyYW5zZm9ybUpzb25PdXRwdXQoUGFyc2VTdGF0ZSAqcHN0YXRlLCBjb25zdCBK c29uT3V0cHV0ICpvdXRwdXQsCiAJCQkJZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBP UlRFRCksCiAJCQkJZXJybXNnKCJyZXR1cm5pbmcgU0VUT0YgdHlwZXMgaXMgbm90IHN1cHBvcnRl ZCBpbiBTUUwvSlNPTiBmdW5jdGlvbnMiKSk7CiAKKwlpZiAoZ2V0X3R5cHR5cGUocmV0LT50eXBp ZCkgPT0gVFlQVFlQRV9QU0VVRE8pCisJCWVyZXBvcnQoRVJST1IsCisJCQkJZXJyY29kZShFUlJD T0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJZXJybXNnKCJyZXR1cm5pbmcgcHNldWRv LXR5cGVzIGlzIG5vdCBzdXBwb3J0ZWQgaW4gU1FML0pTT04gZnVuY3Rpb25zIikpOworCiAJaWYg KHJldC0+Zm9ybWF0LT5mb3JtYXRfdHlwZSA9PSBKU19GT1JNQVRfREVGQVVMVCkKIAkJLyogYXNz aWduIEpTT05CIGZvcm1hdCB3aGVuIHJldHVybmluZyBqc29uYiwgb3IgSlNPTiBmb3JtYXQgb3Ro ZXJ3aXNlICovCiAJCXJldC0+Zm9ybWF0LT5mb3JtYXRfdHlwZSA9CkBAIC0zNTU1LDcgKzM2MjIs NiBAQCBjb2VyY2VKc29uRnVuY0V4cHIoUGFyc2VTdGF0ZSAqcHN0YXRlLCBOb2RlICpleHByLAog CS8qIHRyeSB0byBjb2VyY2UgZXhwcmVzc2lvbiB0byB0aGUgb3V0cHV0IHR5cGUgKi8KIAlyZXMg PSBjb2VyY2VfdG9fdGFyZ2V0X3R5cGUocHN0YXRlLCBleHByLCBleHBydHlwZSwKIAkJCQkJCQkJ cmV0dXJuaW5nLT50eXBpZCwgcmV0dXJuaW5nLT50eXBtb2QsCi0JLyogWFhYIHRocm93aW5nIGVy cm9ycyB3aGVuIGNhc3RpbmcgdG8gY2hhcihOKSAqLwogCQkJCQkJCQlDT0VSQ0lPTl9FWFBMSUNJ VCwKIAkJCQkJCQkJQ09FUkNFX0VYUExJQ0lUX0NBU1QsCiAJCQkJCQkJCWxvY2F0aW9uKTsKQEAg LTM2NTUsNyArMzcyMSw3IEBAIHRyYW5zZm9ybUpzb25PYmplY3RDb25zdHJ1Y3RvcihQYXJzZVN0 YXRlICpwc3RhdGUsIEpzb25PYmplY3RDb25zdHJ1Y3RvciAqY3RvcikKIAkJCU5vZGUJICAgKnZh bCA9IHRyYW5zZm9ybUpzb25WYWx1ZUV4cHIocHN0YXRlLCAiSlNPTl9PQkpFQ1QoKSIsCiAJCQkJ CQkJCQkJCQkJIGt2LT52YWx1ZSwKIAkJCQkJCQkJCQkJCQkgSlNfRk9STUFUX0RFRkFVTFQsCi0J CQkJCQkJCQkJCQkJIEludmFsaWRPaWQpOworCQkJCQkJCQkJCQkJCSBJbnZhbGlkT2lkLCBmYWxz ZSk7CiAKIAkJCWFyZ3MgPSBsYXBwZW5kKGFyZ3MsIGtleSk7CiAJCQlhcmdzID0gbGFwcGVuZChh cmdzLCB2YWwpOwpAQCAtMzg0Miw3ICszOTA4LDcgQEAgdHJhbnNmb3JtSnNvbk9iamVjdEFnZyhQ YXJzZVN0YXRlICpwc3RhdGUsIEpzb25PYmplY3RBZ2cgKmFnZykKIAl2YWwgPSB0cmFuc2Zvcm1K c29uVmFsdWVFeHByKHBzdGF0ZSwgIkpTT05fT0JKRUNUQUdHKCkiLAogCQkJCQkJCQkgYWdnLT5h cmctPnZhbHVlLAogCQkJCQkJCQkgSlNfRk9STUFUX0RFRkFVTFQsCi0JCQkJCQkJCSBJbnZhbGlk T2lkKTsKKwkJCQkJCQkJIEludmFsaWRPaWQsIGZhbHNlKTsKIAlhcmdzID0gbGlzdF9tYWtlMihr ZXksIHZhbCk7CiAKIAlyZXR1cm5pbmcgPSB0cmFuc2Zvcm1Kc29uQ29uc3RydWN0b3JPdXRwdXQo cHN0YXRlLCBhZ2ctPmNvbnN0cnVjdG9yLT5vdXRwdXQsCkBAIC0zODk4LDkgKzM5NjQsOCBAQCB0 cmFuc2Zvcm1Kc29uQXJyYXlBZ2coUGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29uQXJyYXlBZ2cgKmFn ZykKIAlPaWQJCQlhZ2dmbm9pZDsKIAlPaWQJCQlhZ2d0eXBlOwogCi0JYXJnID0gdHJhbnNmb3Jt SnNvblZhbHVlRXhwcihwc3RhdGUsICJKU09OX0FSUkFZQUdHKCkiLAotCQkJCQkJCQkgYWdnLT5h cmcsCi0JCQkJCQkJCSBKU19GT1JNQVRfREVGQVVMVCwgSW52YWxpZE9pZCk7CisJYXJnID0gdHJh bnNmb3JtSnNvblZhbHVlRXhwcihwc3RhdGUsICJKU09OX0FSUkFZQUdHKCkiLCBhZ2ctPmFyZywK KwkJCQkJCQkJIEpTX0ZPUk1BVF9ERUZBVUxULCBJbnZhbGlkT2lkLCBmYWxzZSk7CiAKIAlyZXR1 cm5pbmcgPSB0cmFuc2Zvcm1Kc29uQ29uc3RydWN0b3JPdXRwdXQocHN0YXRlLCBhZ2ctPmNvbnN0 cnVjdG9yLT5vdXRwdXQsCiAJCQkJCQkJCQkJCSAgIGxpc3RfbWFrZTEoYXJnKSk7CkBAIC0zOTQ3 LDkgKzQwMTIsOCBAQCB0cmFuc2Zvcm1Kc29uQXJyYXlDb25zdHJ1Y3RvcihQYXJzZVN0YXRlICpw c3RhdGUsIEpzb25BcnJheUNvbnN0cnVjdG9yICpjdG9yKQogCQl7CiAJCQlKc29uVmFsdWVFeHBy ICpqc3ZhbCA9IGNhc3ROb2RlKEpzb25WYWx1ZUV4cHIsIGxmaXJzdChsYykpOwogCQkJTm9kZQkg ICAqdmFsID0gdHJhbnNmb3JtSnNvblZhbHVlRXhwcihwc3RhdGUsICJKU09OX0FSUkFZKCkiLAot CQkJCQkJCQkJCQkJCSBqc3ZhbCwKLQkJCQkJCQkJCQkJCQkgSlNfRk9STUFUX0RFRkFVTFQsCi0J CQkJCQkJCQkJCQkJIEludmFsaWRPaWQpOworCQkJCQkJCQkJCQkJCSBqc3ZhbCwgSlNfRk9STUFU X0RFRkFVTFQsCisJCQkJCQkJCQkJCQkJIEludmFsaWRPaWQsIGZhbHNlKTsKIAogCQkJYXJncyA9 IGxhcHBlbmQoYXJncywgdmFsKTsKIAkJfQpAQCAtNDEwOCw3ICs0MTcyLDcgQEAgdHJhbnNmb3Jt SnNvblBhcnNlRXhwcihQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25QYXJzZUV4cHIgKmpzZXhwcikK IAkJICogZnVuY3Rpb24tbGlrZSBDQVNUcy4KIAkJICovCiAJCWFyZyA9IHRyYW5zZm9ybUpzb25W YWx1ZUV4cHIocHN0YXRlLCAiSlNPTigpIiwganNleHByLT5leHByLAotCQkJCQkJCQkJIEpTX0ZP Uk1BVF9KU09OLCByZXR1cm5pbmctPnR5cGlkKTsKKwkJCQkJCQkJCSBKU19GT1JNQVRfSlNPTiwg cmV0dXJuaW5nLT50eXBpZCwgZmFsc2UpOwogCX0KIAogCXJldHVybiBtYWtlSnNvbkNvbnN0cnVj dG9yRXhwcihwc3RhdGUsIEpTQ1RPUl9KU09OX1BBUlNFLCBsaXN0X21ha2UxKGFyZyksIE5VTEws CkBAIC00MTUzLDcgKzQyMTcsNyBAQCB0cmFuc2Zvcm1Kc29uU2VyaWFsaXplRXhwcihQYXJzZVN0 YXRlICpwc3RhdGUsIEpzb25TZXJpYWxpemVFeHByICpleHByKQogCU5vZGUJICAgKmFyZyA9IHRy YW5zZm9ybUpzb25WYWx1ZUV4cHIocHN0YXRlLCAiSlNPTl9TRVJJQUxJWkUoKSIsCiAJCQkJCQkJ CQkJCSBleHByLT5leHByLAogCQkJCQkJCQkJCQkgSlNfRk9STUFUX0pTT04sCi0JCQkJCQkJCQkJ CSBJbnZhbGlkT2lkKTsKKwkJCQkJCQkJCQkJIEludmFsaWRPaWQsIGZhbHNlKTsKIAogCWlmIChl eHByLT5vdXRwdXQpCiAJewpAQCAtNDE4NywzICs0MjUxLDU4MiBAQCB0cmFuc2Zvcm1Kc29uU2Vy aWFsaXplRXhwcihQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25TZXJpYWxpemVFeHByICpleHByKQog CXJldHVybiBtYWtlSnNvbkNvbnN0cnVjdG9yRXhwcihwc3RhdGUsIEpTQ1RPUl9KU09OX1NFUklB TElaRSwgbGlzdF9tYWtlMShhcmcpLAogCQkJCQkJCQkgICBOVUxMLCByZXR1cm5pbmcsIGZhbHNl LCBmYWxzZSwgZXhwci0+bG9jYXRpb24pOwogfQorCisvKgorICogVHJhbnNmb3JtIEpTT05fVkFM VUUsIEpTT05fUVVFUlksIEpTT05fRVhJU1RTIGZ1bmN0aW9ucyBpbnRvIGEgSnNvbkV4cHIgbm9k ZS4KKyAqLworc3RhdGljIE5vZGUgKgordHJhbnNmb3JtSnNvbkZ1bmNFeHByKFBhcnNlU3RhdGUg KnBzdGF0ZSwgSnNvbkZ1bmNFeHByICpmdW5jKQoreworCUpzb25FeHByICAgKmpzZXhwciA9IE5V TEw7CisJY29uc3QgY2hhciAqZnVuY19uYW1lID0gTlVMTDsKKworCXN3aXRjaCAoZnVuYy0+b3Ap CisJeworCQljYXNlIEpTT05fRVhJU1RTX09QOgorCQkJZnVuY19uYW1lID0gIkpTT05fRVhJU1RT IjsKKwkJCWJyZWFrOworCQljYXNlIEpTT05fUVVFUllfT1A6CisJCQlmdW5jX25hbWUgPSAiSlNP Tl9RVUVSWSI7CisJCQlicmVhazsKKwkJY2FzZSBKU09OX1ZBTFVFX09QOgorCQkJZnVuY19uYW1l ID0gIkpTT05fVkFMVUUiOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAi aW52YWxpZCBKc29uRnVuY0V4cHIgb3AiKTsKKwkJCWJyZWFrOworCX0KKworCS8qCisJICogRk9S TUFUIEpTT04gc3BlY2lmaWNhdGlvbiBpcyBtZWFuaW5nbGVzcyBleGNlcHQgZm9yIEpTT05fUVVF UlkoKSwKKwkgKiB0aG91Z2ggdGhlIHN5bnRheCBhbGxvd3MgaXQuICBGbGFnIGlmIG5vdCBKU09O X1FVRVJZKCkuCisJICovCisJaWYgKGZ1bmMtPm91dHB1dCAmJiBmdW5jLT5vcCAhPSBKU09OX1FV RVJZX09QKQorCXsKKwkJSnNvbkZvcm1hdCAqZm9ybWF0ID0gZnVuYy0+b3V0cHV0LT5yZXR1cm5p bmctPmZvcm1hdDsKKworCQlpZiAoZm9ybWF0LT5mb3JtYXRfdHlwZSAhPSBKU19GT1JNQVRfREVG QVVMVCB8fAorCQkJZm9ybWF0LT5lbmNvZGluZyAhPSBKU19FTkNfREVGQVVMVCkKKwkJCWVyZXBv cnQoRVJST1IsCisJCQkJCWVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAorCQkJCQllcnJt c2coImNhbm5vdCBzcGVjaWZ5IEZPUk1BVCBpbiBSRVRVUk5JTkcgY2xhdXNlIG9mICVzKCkiLAor CQkJCQkJICAgZnVuY19uYW1lKSwKKwkJCQkJcGFyc2VyX2VycnBvc2l0aW9uKHBzdGF0ZSwgZm9y bWF0LT5sb2NhdGlvbikpOworCX0KKworCS8qIE9NSVQgUVVPVEVTIG1lYW5pbmdsZXNzIHdoZW4g c3RyaW5ncyBhcmUgd3JhcHBlZC4gKi8KKwlpZiAoZnVuYy0+b3AgPT0gSlNPTl9RVUVSWV9PUCAm JgorCQlmdW5jLT5xdW90ZXMgIT0gSlNfUVVPVEVTX1VOU1BFQyAmJgorCQkoZnVuYy0+d3JhcHBl ciA9PSBKU1dfQ09ORElUSU9OQUwgfHwKKwkJIGZ1bmMtPndyYXBwZXIgPT0gSlNXX1VOQ09ORElU SU9OQUwpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCWVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJS T1IpLAorCQkJCWVycm1zZygiU1FML0pTT04gUVVPVEVTIGJlaGF2aW9yIG11c3Qgbm90IGJlIHNw ZWNpZmllZCB3aGVuIFdJVEggV1JBUFBFUiBpcyB1c2VkIiksCisJCQkJcGFyc2VyX2VycnBvc2l0 aW9uKHBzdGF0ZSwgZnVuYy0+bG9jYXRpb24pKTsKKworCWpzZXhwciA9IHRyYW5zZm9ybUpzb25F eHByQ29tbW9uKHBzdGF0ZSwgZnVuYywgZnVuY19uYW1lKTsKKworCXN3aXRjaCAoZnVuYy0+b3Ap CisJeworCQljYXNlIEpTT05fRVhJU1RTX09QOgorCQkJLyogSlNPTl9FWElTVFMgcmV0dXJucyBi b29sZWFuIGJ5IGRlZmF1bHQuICovCisJCQlpZiAoIU9pZElzVmFsaWQoanNleHByLT5yZXR1cm5p bmctPnR5cGlkKSkKKwkJCXsKKwkJCQlqc2V4cHItPnJldHVybmluZy0+dHlwaWQgPSBCT09MT0lE OworCQkJCWpzZXhwci0+cmV0dXJuaW5nLT50eXBtb2QgPSAtMTsKKwkJCX0KKworCQkJanNleHBy LT5vbl9lcnJvciA9IHRyYW5zZm9ybUpzb25CZWhhdmlvcihwc3RhdGUsIGZ1bmMtPm9uX2Vycm9y LAorCQkJCQkJCQkJCQkJCSBKU09OX0JFSEFWSU9SX0ZBTFNFLAorCQkJCQkJCQkJCQkJCSBqc2V4 cHItPnJldHVybmluZyk7CisJCQlicmVhazsKKworCQljYXNlIEpTT05fUVVFUllfT1A6CisJCQlq c2V4cHItPndyYXBwZXIgPSBmdW5jLT53cmFwcGVyOworCisJCQkvKgorCQkJICogS2VlcCBxdW90 ZXMgb24gc2NhbGFyIHN0cmluZ3MgYnkgZGVmYXVsdCwgb21pdHRpbmcgdGhlbSBvbmx5IGlmCisJ CQkgKiBPTUlUIFFVT1RFUyBpcyBzcGVjaWZpZWQuCisJCQkgKi8KKwkJCWpzZXhwci0+b21pdF9x dW90ZXMgPSAoZnVuYy0+cXVvdGVzID09IEpTX1FVT1RFU19PTUlUKTsKKworCQkJLyogSlNPTl9R VUVSWSByZXR1cm5zIGpzb24oYikgYnkgZGVmYXVsdC4gKi8KKwkJCWlmICghT2lkSXNWYWxpZChq c2V4cHItPnJldHVybmluZy0+dHlwaWQpKQorCQkJeworCQkJCUpzb25SZXR1cm5pbmcgKnJldCA9 IGpzZXhwci0+cmV0dXJuaW5nOworCisJCQkJcmV0LT50eXBpZCA9IEpzb25GdW5jRXhwckRlZmF1 bHRSZXR1cm5UeXBlKGpzZXhwcik7CisJCQkJcmV0LT50eXBtb2QgPSAtMTsKKwkJCX0KKworCQkJ anNleHByLT5yZXN1bHRfY29lcmNpb24gPSBjb2VyY2VKc29uRnVuY0V4cHJPdXRwdXQocHN0YXRl LCBqc2V4cHIpOworCisJCQlpZiAoZnVuYy0+b25fZW1wdHkpCisJCQkJanNleHByLT5vbl9lbXB0 eSA9IHRyYW5zZm9ybUpzb25CZWhhdmlvcihwc3RhdGUsCisJCQkJCQkJCQkJCQkJCSBmdW5jLT5v bl9lbXB0eSwKKwkJCQkJCQkJCQkJCQkJIEpTT05fQkVIQVZJT1JfTlVMTCwKKwkJCQkJCQkJCQkJ CQkJIGpzZXhwci0+cmV0dXJuaW5nKTsKKwkJCWpzZXhwci0+b25fZXJyb3IgPSB0cmFuc2Zvcm1K c29uQmVoYXZpb3IocHN0YXRlLCBmdW5jLT5vbl9lcnJvciwKKwkJCQkJCQkJCQkJCQkgSlNPTl9C RUhBVklPUl9OVUxMLAorCQkJCQkJCQkJCQkJCSBqc2V4cHItPnJldHVybmluZyk7CisJCQlicmVh azsKKworCQljYXNlIEpTT05fVkFMVUVfT1A6CisJCQkvKiBBbHdheXMgb21pdCBxdW90ZXMgZnJv bSBzY2FsYXIgc3RyaW5ncy4gKi8KKwkJCWpzZXhwci0+b21pdF9xdW90ZXMgPSAoZnVuYy0+cXVv dGVzID09IEpTX1FVT1RFU19PTUlUKTsKKworCQkJLyogSlNPTl9WQUxVRSByZXR1cm5zIHRleHQg YnkgZGVmYXVsdC4gKi8KKwkJCWlmICghT2lkSXNWYWxpZChqc2V4cHItPnJldHVybmluZy0+dHlw aWQpKQorCQkJeworCQkJCWpzZXhwci0+cmV0dXJuaW5nLT50eXBpZCA9IFRFWFRPSUQ7CisJCQkJ anNleHByLT5yZXR1cm5pbmctPnR5cG1vZCA9IC0xOworCQkJfQorCisJCQkvKgorCQkJICogT3Zl cnJpZGUgd2hhdGV2ZXIgdHJhbnNmb3JtSnNvbk91dHB1dCgpIHNldCB0aGVzZSB0bywgd2hpY2gK KwkJCSAqIGFzc3VtZXMgdGhhdCBvdXRwdXQgdHlwZSB0byBiZSBqc29uKGIpLgorCQkJICovCisJ CQlqc2V4cHItPnJldHVybmluZy0+Zm9ybWF0LT5mb3JtYXRfdHlwZSA9IEpTX0ZPUk1BVF9ERUZB VUxUOworCQkJanNleHByLT5yZXR1cm5pbmctPmZvcm1hdC0+ZW5jb2RpbmcgPSBKU19FTkNfREVG QVVMVDsKKworCQkJanNleHByLT5yZXN1bHRfY29lcmNpb24gPSBjb2VyY2VKc29uRnVuY0V4cHJP dXRwdXQocHN0YXRlLCBqc2V4cHIpOworCisJCQkvKgorCQkJICogSW5pdGlhbGl6ZSBleHByZXNz aW9ucyB0byBjb2VyY2UgdGhlIHNjYWxhciB2YWx1ZSByZXR1cm5lZCBieQorCQkJICogSnNvblBh dGhWYWx1ZSgpIHRvIHRoZSAicmV0dXJuaW5nIiB0eXBlLgorCQkJICovCisJCQlpZiAoanNleHBy LT5yZXN1bHRfY29lcmNpb24pCisJCQkJanNleHByLT5pdGVtX2NvZXJjaW9ucyA9CisJCQkJCUlu aXRKc29uSXRlbUNvZXJjaW9ucyhwc3RhdGUsIGpzZXhwci0+cmV0dXJuaW5nLAorCQkJCQkJCQkJ CSAgZXhwclR5cGUoanNleHByLT5mb3JtYXR0ZWRfZXhwcikpOworCisJCQlpZiAoZnVuYy0+b25f ZW1wdHkpCisJCQkJanNleHByLT5vbl9lbXB0eSA9IHRyYW5zZm9ybUpzb25CZWhhdmlvcihwc3Rh dGUsCisJCQkJCQkJCQkJCQkJCSBmdW5jLT5vbl9lbXB0eSwKKwkJCQkJCQkJCQkJCQkJIEpTT05f QkVIQVZJT1JfTlVMTCwKKwkJCQkJCQkJCQkJCQkJIGpzZXhwci0+cmV0dXJuaW5nKTsKKwkJCWpz ZXhwci0+b25fZXJyb3IgPSB0cmFuc2Zvcm1Kc29uQmVoYXZpb3IocHN0YXRlLCBmdW5jLT5vbl9l cnJvciwKKwkJCQkJCQkJCQkJCQkgSlNPTl9CRUhBVklPUl9OVUxMLAorCQkJCQkJCQkJCQkJCSBq c2V4cHItPnJldHVybmluZyk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJP UiwgImludmFsaWQgSnNvbkZ1bmNFeHByIG9wIik7CisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4g KE5vZGUgKikganNleHByOworfQorCisvKgorICogQ29tbW9uIGNvZGUgZm9yIEpTT05fVkFMVUUs IEpTT05fUVVFUlksIEpTT05fRVhJU1RTIHRyYW5zZm9ybWF0aW9uCisgKiBpbnRvIGEgSnNvbkV4 cHIgbm9kZS4KKyAqLworc3RhdGljIEpzb25FeHByICoKK3RyYW5zZm9ybUpzb25FeHByQ29tbW9u KFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvbkZ1bmNFeHByICpmdW5jLAorCQkJCQkJY29uc3QgY2hh ciAqY29uc3RydWN0TmFtZSkKK3sKKwlKc29uRXhwciAgICpqc2V4cHIgPSBtYWtlTm9kZShKc29u RXhwcik7CisJTm9kZQkgICAqcGF0aF9zcGVjOworCisJanNleHByLT5sb2NhdGlvbiA9IGZ1bmMt PmxvY2F0aW9uOworCWpzZXhwci0+b3AgPSBmdW5jLT5vcDsKKwlqc2V4cHItPmZvcm1hdHRlZF9l eHByID0gdHJhbnNmb3JtSnNvblZhbHVlRXhwcihwc3RhdGUsIGNvbnN0cnVjdE5hbWUsCisJCQkJ CQkJCQkJCQkJZnVuYy0+Y29udGV4dF9pdGVtLAorCQkJCQkJCQkJCQkJCUpTX0ZPUk1BVF9KU09O LAorCQkJCQkJCQkJCQkJCUludmFsaWRPaWQsIGZhbHNlKTsKKworCWlmIChleHByVHlwZShqc2V4 cHItPmZvcm1hdHRlZF9leHByKSAhPSBKU09OQk9JRCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQll cnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCQllcnJtc2coIiVzKCkg aXMgbm90IHlldCBpbXBsZW1lbnRlZCBmb3IgdGhlIGpzb24gdHlwZSIsCisJCQkJCSAgIGNvbnN0 cnVjdE5hbWUpLAorCQkJCWVycmhpbnQoIlRyeSBjYXN0aW5nIHRoZSBhcmd1bWVudCB0byBqc29u YiIpLAorCQkJCXBhcnNlcl9lcnJwb3NpdGlvbihwc3RhdGUsIGV4cHJMb2NhdGlvbihqc2V4cHIt PmZvcm1hdHRlZF9leHByKSkpOworCisJanNleHByLT5mb3JtYXQgPSBmdW5jLT5jb250ZXh0X2l0 ZW0tPmZvcm1hdDsKKworCXBhdGhfc3BlYyA9IHRyYW5zZm9ybUV4cHJSZWN1cnNlKHBzdGF0ZSwg ZnVuYy0+cGF0aHNwZWMpOworCWpzZXhwci0+cGF0aF9zcGVjID0KKwkJY29lcmNlX3RvX3Rhcmdl dF90eXBlKHBzdGF0ZSwgcGF0aF9zcGVjLCBleHByVHlwZShwYXRoX3NwZWMpLAorCQkJCQkJCSAg SlNPTlBBVEhPSUQsIC0xLAorCQkJCQkJCSAgQ09FUkNJT05fRVhQTElDSVQsIENPRVJDRV9JTVBM SUNJVF9DQVNULAorCQkJCQkJCSAgZXhwckxvY2F0aW9uKHBhdGhfc3BlYykpOworCWlmICghanNl eHByLT5wYXRoX3NwZWMpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9E QVRBVFlQRV9NSVNNQVRDSCksCisJCQkJIGVycm1zZygiSlNPTiBwYXRoIGV4cHJlc3Npb24gbXVz dCBiZSBvZiB0eXBlICVzLCBub3Qgb2YgdHlwZSAlcyIsCisJCQkJCQkianNvbnBhdGgiLCBmb3Jt YXRfdHlwZV9iZShleHByVHlwZShwYXRoX3NwZWMpKSksCisJCQkJIHBhcnNlcl9lcnJwb3NpdGlv bihwc3RhdGUsIGV4cHJMb2NhdGlvbihwYXRoX3NwZWMpKSkpOworCisJLyoKKwkgKiBUcmFuc2Zv cm0gYW5kIGNvZXJjZSB0byBqc29uW2JdIHBhc3NpbmcgYXJndW1lbnRzLCB3aG9zZSBmb3JtYXQg aXMKKwkgKiBkZXRlcm1pbmVkIGJ5IGNvbnRleHQgaXRlbSB0eXBlLgorCSAqLworCXRyYW5zZm9y bUpzb25QYXNzaW5nQXJncyhwc3RhdGUsIGNvbnN0cnVjdE5hbWUsCisJCQkJCQkJIGV4cHJUeXBl KGpzZXhwci0+Zm9ybWF0dGVkX2V4cHIpID09IEpTT05CT0lEID8KKwkJCQkJCQkgSlNfRk9STUFU X0pTT05CIDogSlNfRk9STUFUX0pTT04sCisJCQkJCQkJIGZ1bmMtPnBhc3NpbmcsCisJCQkJCQkJ ICZqc2V4cHItPnBhc3NpbmdfdmFsdWVzLAorCQkJCQkJCSAmanNleHByLT5wYXNzaW5nX25hbWVz KTsKKworCWpzZXhwci0+cmV0dXJuaW5nID0gdHJhbnNmb3JtSnNvbk91dHB1dChwc3RhdGUsIGZ1 bmMtPm91dHB1dCwgZmFsc2UpOworCisJcmV0dXJuIGpzZXhwcjsKK30KKworLyoKKyAqIFRyYW5z Zm9ybSBhIEpTT04gUEFTU0lORyBjbGF1c2UuCisgKi8KK3N0YXRpYyB2b2lkCit0cmFuc2Zvcm1K c29uUGFzc2luZ0FyZ3MoUGFyc2VTdGF0ZSAqcHN0YXRlLCBjb25zdCBjaGFyICpjb25zdHJ1Y3RO YW1lLAorCQkJCQkJIEpzb25Gb3JtYXRUeXBlIGZvcm1hdCwgTGlzdCAqYXJncywKKwkJCQkJCSBM aXN0ICoqcGFzc2luZ192YWx1ZXMsIExpc3QgKipwYXNzaW5nX25hbWVzKQoreworCUxpc3RDZWxs ICAgKmxjOworCisJKnBhc3NpbmdfdmFsdWVzID0gTklMOworCSpwYXNzaW5nX25hbWVzID0gTklM OworCisJZm9yZWFjaChsYywgYXJncykKKwl7CisJCUpzb25Bcmd1bWVudCAqYXJnID0gY2FzdE5v ZGUoSnNvbkFyZ3VtZW50LCBsZmlyc3QobGMpKTsKKwkJTm9kZQkgICAqZXhwciA9IHRyYW5zZm9y bUpzb25WYWx1ZUV4cHIocHN0YXRlLCBjb25zdHJ1Y3ROYW1lLAorCQkJCQkJCQkJCQkJICBhcmct PnZhbCwgZm9ybWF0LAorCQkJCQkJCQkJCQkJICBJbnZhbGlkT2lkLCB0cnVlKTsKKworCQkqcGFz c2luZ192YWx1ZXMgPSBsYXBwZW5kKCpwYXNzaW5nX3ZhbHVlcywgZXhwcik7CisJCSpwYXNzaW5n X25hbWVzID0gbGFwcGVuZCgqcGFzc2luZ19uYW1lcywgbWFrZVN0cmluZyhhcmctPm5hbWUpKTsK Kwl9Cit9CisKKy8qCisgKiBDcmVhdGUgYW4gZXhwcmVzc2lvbiB0byBjb2VyY2UgdGhlIG91dHB1 dCBvZiBKU09OX1ZBTFVFKCkgLyBKU09OX1FVRVJZKCkKKyAqIHRvIHRoZSBvdXRwdXQgdHlwZSwg aWYgbmVlZGVkLgorICovCitzdGF0aWMgTm9kZSAqCitjb2VyY2VKc29uRnVuY0V4cHJPdXRwdXQo UGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29uRXhwciAqanNleHByKQoreworCUpzb25SZXR1cm5pbmcg KnJldHVybmluZyA9IGpzZXhwci0+cmV0dXJuaW5nOworCU5vZGUJICAgKmNvbnRleHRfaXRlbSA9 IGpzZXhwci0+Zm9ybWF0dGVkX2V4cHI7CisJTm9kZQkgICAqY29lcmNpb25fZXhwciA9IE5VTEw7 CisJaW50CQkJZGVmYXVsdF90eXBtb2Q7CisJT2lkCQkJZGVmYXVsdF90eXBpZDsKKwlib29sCQlv bWl0X3F1b3RlcyA9CisJCWpzZXhwci0+b3AgPT0gSlNPTl9RVUVSWV9PUCAmJiBqc2V4cHItPm9t aXRfcXVvdGVzOworCisJQXNzZXJ0KHJldHVybmluZyk7CisKKwkvKgorCSAqIENhc3QgZnVuY3Rp b25zIGZyb20ganNvbmIgdG8gdGhlIGZvbGxvd2luZyB0eXBlcyAoanNvbmJfYm9vbCgpIGV0IGFs KQorCSAqIGRvbid0IGhhbmRsZSBlcnJvcnMgc29mdGx5LCBzbyBmb3JjZSB0byB1c2UganNvbl9w b3B1bGF0ZV90eXBlKCkgdXNpbmcKKwkgKiBhIEpzb25Db2VyY2lvbiBub2RlIHNvIHRoYXQgYW55 IGVycm9ycyBhcmUgaGFuZGxlZCBhcHByb3ByaWF0ZWx5LgorCSAqLworCWlmIChqc2V4cHItPm9w ID09IEpTT05fUVVFUllfT1ApCisJeworCQlzd2l0Y2ggKHJldHVybmluZy0+dHlwaWQpCisJCXsK KwkJCWNhc2UgQk9PTE9JRDoKKwkJCWNhc2UgTlVNRVJJQ09JRDoKKwkJCWNhc2UgSU5UMk9JRDoK KwkJCWNhc2UgSU5UNE9JRDoKKwkJCWNhc2UgSU5UOE9JRDoKKwkJCWNhc2UgRkxPQVQ0T0lEOgor CQkJY2FzZSBGTE9BVDhPSUQ6CisJCQkJcmV0dXJuIChOb2RlICopIG1ha2VKc29uQ29lcmNpb24o cmV0dXJuaW5nLCBvbWl0X3F1b3RlcywgTlVMTCk7CisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOwor CQl9CisJfQorCisJZGVmYXVsdF90eXBpZCA9IEpzb25GdW5jRXhwckRlZmF1bHRSZXR1cm5UeXBl KGpzZXhwcik7CisJZGVmYXVsdF90eXBtb2QgPSAtMTsKKwlpZiAocmV0dXJuaW5nLT50eXBpZCAh PSBkZWZhdWx0X3R5cGlkIHx8CisJCXJldHVybmluZy0+dHlwbW9kICE9IGRlZmF1bHRfdHlwbW9k IHx8CisJCW9taXRfcXVvdGVzKQorCXsKKwkJLyoKKwkJICogV2UgYWJ1c2UgQ2FzZVRlc3RFeHBy IGhlcmUgYXMgcGxhY2Vob2xkZXIgdG8gcGFzcyB0aGUgcmVzdWx0IG9mCisJCSAqIGV2YWx1YXRp bmcgdGhlIEpTT05fVkFMVUUvUVVFUlkganNvbnBhdGggZXhwcmVzc2lvbiBhcyBpbnB1dCB0byB0 aGUKKwkJICogY29lcmNpb24gZXhwcmVzc2lvbi4KKwkJICovCisJCUNhc2VUZXN0RXhwciAqcGxh Y2Vob2xkZXIgPSBtYWtlTm9kZShDYXNlVGVzdEV4cHIpOworCisJCS8qCisJCSAqIFdoZW4gT01J VCBRVU9URVMgaXMgdHJ1ZSwgRXhlY0V2YWxKc29uQ29lcmNpb24oKSB3aWxsIGNvbnZlcnQgYQor CQkgKiBxdW90ZS1zdHJpcHBlZCBzb3VyY2UgdmFsdWUgdG8gaXRzIHRleHQgcmVwcmVzZW50YXRp b24sIHNvIHVzZQorCQkgKiBURVhUT0lEIGFzIHRoZSBzb3VyY2UgdHlwZS4KKwkJICovCisJCXBs YWNlaG9sZGVyLT50eXBlSWQgPSBvbWl0X3F1b3RlcyA/IFRFWFRPSUQgOiBleHByVHlwZShjb250 ZXh0X2l0ZW0pOworCQlwbGFjZWhvbGRlci0+dHlwZU1vZCA9IG9taXRfcXVvdGVzID8gLTEgOiBl eHByVHlwbW9kKGNvbnRleHRfaXRlbSk7CisKKwkJQXNzZXJ0KHBsYWNlaG9sZGVyLT50eXBlSWQg PT0gZGVmYXVsdF90eXBpZCB8fAorCQkJICAgcGxhY2Vob2xkZXItPnR5cGVJZCA9PSBURVhUT0lE KTsKKwkJQXNzZXJ0KHBsYWNlaG9sZGVyLT50eXBlTW9kID09IGRlZmF1bHRfdHlwbW9kIHx8CisJ CQkgICBwbGFjZWhvbGRlci0+dHlwZU1vZCA9PSAtMSk7CisKKwkJY29lcmNpb25fZXhwciA9IGNv ZXJjZUpzb25FeHByKHBzdGF0ZSwgKE5vZGUgKikgcGxhY2Vob2xkZXIsCisJCQkJCQkJCQkgICBy ZXR1cm5pbmcsIG9taXRfcXVvdGVzKTsKKwl9CisKKwlyZXR1cm4gY29lcmNpb25fZXhwcjsKK30K KworLyogUmV0dXJucyB0aGUgZGVmYXVsdCB0eXBlIGZvciBhIGdpdmVuIEpzb25FeHByIGZvciBh IGdpdmVuIEpzb25Gb3JtYXQuICovCitzdGF0aWMgT2lkCitKc29uRnVuY0V4cHJEZWZhdWx0UmV0 dXJuVHlwZShKc29uRXhwciAqanNleHByKQoreworCUpzb25Gb3JtYXQgKmZvcm1hdCA9IGpzZXhw ci0+Zm9ybWF0OworCU5vZGUJICAgKmNvbnRleHRfaXRlbSA9IGpzZXhwci0+Zm9ybWF0dGVkX2V4 cHI7CisKKwlBc3NlcnQoZm9ybWF0KTsKKwlpZiAoZm9ybWF0LT5mb3JtYXRfdHlwZSA9PSBKU19G T1JNQVRfSlNPTkIpCisJCXJldHVybiBKU09OQk9JRDsKKwllbHNlIGlmIChmb3JtYXQtPmZvcm1h dF90eXBlID09IEpTX0ZPUk1BVF9ERUZBVUxUICYmCisJCQkgZXhwclR5cGUoY29udGV4dF9pdGVt KSA9PSBKU09OQk9JRCkKKwkJcmV0dXJuIEpTT05CT0lEOworCisJcmV0dXJuIEpTT05PSUQ7Cit9 CisKKy8qCisgKiBSZXR1cm5zIGEgSnNvbkNvZXJjaW9uIG5vZGUgdG8gY29lcmNlIGEganNvbmIt dmFsdWVkIGV4cHJlc3Npb24gdG8gdGhlCisgKiB0YXJnZXQgdHlwZSBnaXZlbiBieSAncmV0dXJu aW5nJyB1c2luZyBlaXRoZXIganNvbl9wb3B1bGF0ZV90eXBlKCkgb3IKKyAqIGJ5IHVzaW5nIHRo ZSB0YXJnZXQgdHlwZSdzIGlucHV0IGZ1bmN0aW9uLgorICovCitzdGF0aWMgSnNvbkNvZXJjaW9u ICoKK21ha2VKc29uQ29lcmNpb24oY29uc3QgSnNvblJldHVybmluZyAqcmV0dXJuaW5nLCBib29s IG9taXRfcXVvdGVzLAorCQkJCSBOb2RlICpjYXN0X2V4cHIpCit7CisJSnNvbkNvZXJjaW9uICpj b2VyY2lvbiA9IG1ha2VOb2RlKEpzb25Db2VyY2lvbik7CisKKwljb2VyY2lvbi0+dGFyZ2V0dHlw ZSA9IHJldHVybmluZy0+dHlwaWQ7CisJY29lcmNpb24tPnRhcmdldHR5cG1vZCA9IHJldHVybmlu Zy0+dHlwbW9kOworCWNvZXJjaW9uLT5vbWl0X3F1b3RlcyA9IG9taXRfcXVvdGVzOworCWNvZXJj aW9uLT5jYXN0X2V4cHIgPSBjYXN0X2V4cHI7CisKKwlyZXR1cm4gY29lcmNpb247Cit9CisKKy8q CisgKiBDb2VyY2UgdGhlIHJlc3VsdCBvZiBKU09OX1ZBTFVFIC8gSlNPTl9RVUVSWSAoKSAob3Ig YSBiZWhhdmlvciBleHByZXNzaW9uKQorICogdG8gdGhlIG91dHB1dCB0eXBlCisgKgorICogUmV0 dXJucyBOVUxMIGlmIG5vIGNvZXJjaW9uIG5lZWRlZCAodGhlIGlucHV0IGV4cHJlc3NzaW9uIGlz IGFscmVhZHkgb2YgdGhlCisgKiBkZXNpcmVkIHR5cGUpIGFuZCBPTUlUIFFVT1RFUyBpcyBmYWxz ZS4KKyAqCisgKiBSZXR1cm5zIGEgSnNvbkNvZXJjaW9uIG5vZGUgaWYgdGhlIGNhc3Qgd2FzIG5v dCBmb3VuZCBvciBpZiBPTUlUIFFVT1RFUyBpcworICogdHJ1ZS4KKyAqLworc3RhdGljIE5vZGUg KgorY29lcmNlSnNvbkV4cHIoUGFyc2VTdGF0ZSAqcHN0YXRlLCBOb2RlICpleHByLCBjb25zdCBK c29uUmV0dXJuaW5nICpyZXR1cm5pbmcsCisJCQkgICBib29sIG9taXRfcXVvdGVzKQoreworCU5v ZGUJICAgKmNvZXJjZWRfZXhwcjsKKworCUFzc2VydChleHByICE9IE5VTEwpOworCWNvZXJjZWRf ZXhwciA9IGNvZXJjZUpzb25GdW5jRXhwcihwc3RhdGUsIGV4cHIsIHJldHVybmluZywgZmFsc2Up OworCisJaWYgKGNvZXJjZWRfZXhwciA9PSBleHByICYmICFvbWl0X3F1b3RlcykKKwkJcmV0dXJu IE5VTEw7CisKKwkvKiBVc2UgY29lcmNlZF9leHByIGZvciBKc29uQ29lcmNpb24uY2FzdF9leHBy IGlmZiBjb2VyY2lvbiBpcyBuZWVkZWQuICovCisJaWYgKGNvZXJjZWRfZXhwciA9PSBOVUxMIHx8 IG9taXRfcXVvdGVzKQorCQlyZXR1cm4gKE5vZGUgKikgbWFrZUpzb25Db2VyY2lvbihyZXR1cm5p bmcsIG9taXRfcXVvdGVzLAorCQkJCQkJCQkJCSBjb2VyY2VkX2V4cHIgPT0gZXhwciA/CisJCQkJ CQkJCQkJIE5VTEwgOiBjb2VyY2VkX2V4cHIpOworCisJcmV0dXJuIGNvZXJjZWRfZXhwcjsKK30K KworLyoKKyAqIEluaXRpYWxpemUgSnNvbkNvZXJjaW9uIG5vZGVzIGZvciBjb2VyY2luZyBhIGdp dmVuIEpTT04gaXRlbSB2YWx1ZSBwcm9kdWNlZAorICogYnkgSlNPTl9WQUxVRSB0byB0aGUgdGFy Z2V0ICJyZXR1cm5pbmciIHR5cGU7IGFsc28gc2VlCisgKiBFeGVjUHJlcGFyZUpzb25JdGVtQ29l cmNpb24oKS4KKyAqLworc3RhdGljIExpc3QgKgorSW5pdEpzb25JdGVtQ29lcmNpb25zKFBhcnNl U3RhdGUgKnBzdGF0ZSwgY29uc3QgSnNvblJldHVybmluZyAqcmV0dXJuaW5nLAorCQkJCQkgIE9p ZCBjb250ZXh0SXRlbVR5cGVJZCkKK3sKKwlMaXN0CSAgICppdGVtX2NvZXJjaW9ucyA9IE5JTDsK KwlpbnQJCQlpOworCU9pZAkJCXR5cGVvaWQ7CisJc3RydWN0CisJeworCQlKc29uSXRlbVR5cGUg aXRlbV90eXBlOworCQlPaWQJCQl0eXBlb2lkOworCX0JCQlpdGVtX3R5cGVzW10gPQorCXsKKwkJ e0pzb25JdGVtVHlwZU51bGwsIFVOS05PV05PSUR9LAorCQl7SnNvbkl0ZW1UeXBlU3RyaW5nLCBU RVhUT0lEfSwKKwkJe0pzb25JdGVtVHlwZU51bWVyaWMsIE5VTUVSSUNPSUR9LAorCQl7SnNvbkl0 ZW1UeXBlQm9vbGVhbiwgQk9PTE9JRH0sCisJCXtKc29uSXRlbVR5cGVEYXRlLCBEQVRFT0lEfSwK KwkJe0pzb25JdGVtVHlwZVRpbWUsIFRJTUVPSUR9LAorCQl7SnNvbkl0ZW1UeXBlVGltZXR6LCBU SU1FVFpPSUR9LAorCQl7SnNvbkl0ZW1UeXBlVGltZXN0YW1wLCBUSU1FU1RBTVBPSUR9LAorCQl7 SnNvbkl0ZW1UeXBlVGltZXN0YW1wdHosIFRJTUVTVEFNUFRaT0lEfSwKKwkJe0pzb25JdGVtVHlw ZUNvbXBvc2l0ZSwgY29udGV4dEl0ZW1UeXBlSWR9LAorCQl7SnNvbkl0ZW1UeXBlSW52YWxpZCwg SW52YWxpZE9pZH0KKwl9OworCisJZm9yIChpID0gMDsgT2lkSXNWYWxpZCh0eXBlb2lkID0gaXRl bV90eXBlc1tpXS50eXBlb2lkKTsgaSsrKQorCXsKKwkJTm9kZQkgICAqZXhwcjsKKwkJSnNvbkl0 ZW1Db2VyY2lvbiAqaXRlbV9jb2VyY2lvbiA9IG1ha2VOb2RlKEpzb25JdGVtQ29lcmNpb24pOwor CisJCWlmICh0eXBlb2lkID09IFVOS05PV05PSUQpCisJCXsKKwkJCWV4cHIgPSAoTm9kZSAqKSBt YWtlTnVsbENvbnN0KFVOS05PV05PSUQsIC0xLCBJbnZhbGlkT2lkKTsKKwkJfQorCQllbHNlCisJ CXsKKwkJCUNhc2VUZXN0RXhwciAqcGxhY2Vob2xkZXIgPSBtYWtlTm9kZShDYXNlVGVzdEV4cHIp OworCisJCQkvKgorCQkJICogV2UgYWJ1c2UgQ2FzZVRlc3RFeHByIGhlcmUgYXMgcGxhY2Vob2xk ZXIgdG8gcGFzcyB0aGUgcmVzdWx0IG9mCisJCQkgKiBKU09OX1ZBTFVFIGpzb25wYXRoIGV4cHJl c3Npb24gdG8gdGhlIGNvZXJjaW9uIGZ1bmN0aW9uLgorCQkJICovCisJCQlwbGFjZWhvbGRlci0+ dHlwZUlkID0gaXRlbV90eXBlc1tpXS50eXBlb2lkOworCQkJcGxhY2Vob2xkZXItPnR5cGVNb2Qg PSAtMTsKKwkJCXBsYWNlaG9sZGVyLT5jb2xsYXRpb24gPSBJbnZhbGlkT2lkOworCisJCQlleHBy ID0gKE5vZGUgKikgcGxhY2Vob2xkZXI7CisJCX0KKworCQlpdGVtX2NvZXJjaW9uLT5pdGVtX3R5 cGUgPSBpdGVtX3R5cGVzW2ldLml0ZW1fdHlwZTsKKwkJaXRlbV9jb2VyY2lvbi0+Y29lcmNpb24g PSBjb2VyY2VKc29uRXhwcihwc3RhdGUsIGV4cHIsIHJldHVybmluZywgZmFsc2UpOworCQlpdGVt X2NvZXJjaW9ucyA9IGxhcHBlbmQoaXRlbV9jb2VyY2lvbnMsIGl0ZW1fY29lcmNpb24pOworCX0K KworCXJldHVybiBpdGVtX2NvZXJjaW9uczsKK30KKworLyoKKyAqIFJldHVybnMgY29uc3RhbnQg dmFsdWVzIHRvIGJlIHJldHVybmVkIHRvIHRoZSB1c2VyIGZvciB2YXJpb3VzCisgKiBub24tRVJS T1IgT04gRVJST1IvRU1QVFkgYmVoYXZpb3JzLgorICoKKyAqIE5vdGUgdGhhdCBKU09OX0JFSEFW SU9SX0RFRkFVTFQgZXhwcmVzc2lvbiBpcyBoYW5kbGVkIGJ5IHRoZQorICogY2FsbGVyIHNlcGFy YXRlbHkuCisgKi8KK3N0YXRpYyBOb2RlICoKK0dldEpzb25CZWhhdmlvckNvbnN0RXhwcihKc29u QmVoYXZpb3JUeXBlIGJ0eXBlLCBpbnQgbG9jYXRpb24pCit7CisJRGF0dW0JCXZhbCA9IChEYXR1 bSkgMDsKKwlPaWQJCQl0eXBpZCA9IEpTT05CT0lEOworCWludAkJCWxlbiA9IC0xOworCWJvb2wJ CWlzYnl2YWwgPSBmYWxzZTsKKwlib29sCQlpc251bGwgPSBmYWxzZTsKKwlDb25zdAkgICAqY29u OworCisJc3dpdGNoIChidHlwZSkKKwl7CisJCWNhc2UgSlNPTl9CRUhBVklPUl9FTVBUWV9BUlJB WToKKwkJCXZhbCA9IERpcmVjdEZ1bmN0aW9uQ2FsbDEoanNvbmJfaW4sIENTdHJpbmdHZXREYXR1 bSgiW10iKSk7CisJCQlicmVhazsKKworCQljYXNlIEpTT05fQkVIQVZJT1JfRU1QVFlfT0JKRUNU OgorCQkJdmFsID0gRGlyZWN0RnVuY3Rpb25DYWxsMShqc29uYl9pbiwgQ1N0cmluZ0dldERhdHVt KCJ7fSIpKTsKKwkJCWJyZWFrOworCisJCWNhc2UgSlNPTl9CRUhBVklPUl9UUlVFOgorCQkJdmFs ID0gQm9vbEdldERhdHVtKHRydWUpOworCQkJdHlwaWQgPSBCT09MT0lEOworCQkJbGVuID0gc2l6 ZW9mKGJvb2wpOworCQkJaXNieXZhbCA9IHRydWU7CisJCQlicmVhazsKKworCQljYXNlIEpTT05f QkVIQVZJT1JfRkFMU0U6CisJCQl2YWwgPSBCb29sR2V0RGF0dW0oZmFsc2UpOworCQkJdHlwaWQg PSBCT09MT0lEOworCQkJbGVuID0gc2l6ZW9mKGJvb2wpOworCQkJaXNieXZhbCA9IHRydWU7CisJ CQlicmVhazsKKworCQljYXNlIEpTT05fQkVIQVZJT1JfTlVMTDoKKwkJY2FzZSBKU09OX0JFSEFW SU9SX1VOS05PV046CisJCWNhc2UgSlNPTl9CRUhBVklPUl9FTVBUWToKKwkJCXZhbCA9IChEYXR1 bSkgMDsKKwkJCWlzbnVsbCA9IHRydWU7CisJCQl0eXBpZCA9IElOVDRPSUQ7CisJCQlsZW4gPSBz aXplb2YoaW50MzIpOworCQkJaXNieXZhbCA9IHRydWU7CisJCQlicmVhazsKKworCQljYXNlIEpT T05fQkVIQVZJT1JfREVGQVVMVDoKKwkJY2FzZSBKU09OX0JFSEFWSU9SX0VSUk9SOgorCQkJLyog QWx3YXlzIGhhbmRsZWQgaW4gdGhlIGNhbGxlci4gKi8KKwkJCUFzc2VydChmYWxzZSk7CisJCQli cmVhazsKKworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBTUUwvSlNP TiBiZWhhdmlvciAlZCIsIGJ0eXBlKTsKKwkJCWJyZWFrOworCX0KKworCWNvbiA9IG1ha2VDb25z dCh0eXBpZCwgLTEsIEludmFsaWRPaWQsIGxlbiwgdmFsLCBpc251bGwsIGlzYnl2YWwpOworCWNv bi0+bG9jYXRpb24gPSBsb2NhdGlvbjsKKworCXJldHVybiAoTm9kZSAqKSBjb247Cit9CisKKy8q CisgKiBUcmFuc2Zvcm0gYSBKU09OIEJFSEFWSU9SIGNsYXVzZS4KKyAqLworc3RhdGljIEpzb25C ZWhhdmlvciAqCit0cmFuc2Zvcm1Kc29uQmVoYXZpb3IoUGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29u QmVoYXZpb3IgKmJlaGF2aW9yLAorCQkJCQkgIEpzb25CZWhhdmlvclR5cGUgZGVmYXVsdF9iZWhh dmlvciwKKwkJCQkJICBKc29uUmV0dXJuaW5nICpyZXR1cm5pbmcpCit7CisJSnNvbkJlaGF2aW9y VHlwZSBiZWhhdmlvcl90eXBlID0gZGVmYXVsdF9iZWhhdmlvcjsKKwlOb2RlCSAgICpleHByID0g TlVMTDsKKwlKc29uQ29lcmNpb24gKmNvZXJjaW9uID0gTlVMTDsKKwlpbnQJCQlsb2NhdGlvbiA9 IC0xOworCisJaWYgKGJlaGF2aW9yKQorCXsKKwkJYmVoYXZpb3JfdHlwZSA9IGJlaGF2aW9yLT5i dHlwZTsKKwkJbG9jYXRpb24gPSBiZWhhdmlvci0+bG9jYXRpb247CisJCWlmIChiZWhhdmlvcl90 eXBlID09IEpTT05fQkVIQVZJT1JfREVGQVVMVCkKKwkJeworCQkJZXhwciA9IHRyYW5zZm9ybUV4 cHJSZWN1cnNlKHBzdGF0ZSwgYmVoYXZpb3ItPmV4cHIpOworCQkJaWYgKCFJc0EoZXhwciwgQ29u c3QpICYmICFJc0EoZXhwciwgRnVuY0V4cHIpICYmCisJCQkJIUlzQShleHByLCBPcEV4cHIpKQor CQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0RBVEFUWVBFX01JU01B VENIKSwKKwkJCQkJCSBlcnJtc2coImNhbiBvbmx5IHNwZWNpZnkgY29uc3RhbnQsIG5vbi1hZ2dy ZWdhdGUiCisJCQkJCQkJCSIgZnVuY3Rpb24sIG9yIG9wZXJhdG9yIGV4cHJlc3Npb24gZm9yIgor CQkJCQkJCQkiIERFRkFVTFQiKSwKKwkJCQkJCXBhcnNlcl9lcnJwb3NpdGlvbihwc3RhdGUsIGV4 cHJMb2NhdGlvbihleHByKSkpKTsKKwkJCWlmIChjb250YWluX3Zhcl9jbGF1c2UoZXhwcikpCisJ CQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfREFUQVRZUEVfTUlTTUFU Q0gpLAorCQkJCQkJIGVycm1zZygiREVGQVVMVCBleHByZXNzaW9uIG11c3Qgbm90IGNvbnRhaW4g Y29sdW1uIHJlZmVyZW5jZXMiKSwKKwkJCQkJCXBhcnNlcl9lcnJwb3NpdGlvbihwc3RhdGUsIGV4 cHJMb2NhdGlvbihleHByKSkpKTsKKwkJCWlmIChleHByZXNzaW9uX3JldHVybnNfc2V0KGV4cHIp KQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0RBVEFUWVBFX01J U01BVENIKSwKKwkJCQkJCSBlcnJtc2coIkRFRkFVTFQgZXhwcmVzc2lvbiBtdXN0IG5vdCByZXR1 cm4gYSBzZXQiKSwKKwkJCQkJCXBhcnNlcl9lcnJwb3NpdGlvbihwc3RhdGUsIGV4cHJMb2NhdGlv bihleHByKSkpKTsKKwkJfQorCX0KKworCWlmIChleHByID09IE5VTEwgJiYgYmVoYXZpb3JfdHlw ZSAhPSBKU09OX0JFSEFWSU9SX0VSUk9SKQorCQlleHByID0gR2V0SnNvbkJlaGF2aW9yQ29uc3RF eHByKGJlaGF2aW9yX3R5cGUsIGxvY2F0aW9uKTsKKworCWlmIChleHByKQorCXsKKwkJTm9kZQkg ICAqY29lcmNlZF9leHByID0gZXhwcjsKKwkJYm9vbAkJaXNudWxsID0gKElzQShleHByLCBDb25z dCkgJiYgKChDb25zdCAqKSBleHByKS0+Y29uc3Rpc251bGwpOworCisJCS8qCisJCSAqIENvZXJj ZSBOVUxMcyBhbmQgImludGVybmFsIiAodGhhdCBpcywgbm90IHNwZWNpZmllZCBieSB0aGUgdXNl cikKKwkJICoganNvbmItdmFsdWVkIGV4cHJlc3Npb25zIHdpdGggYSBKc29uQ29lcmNpb24gbm9k ZS4KKwkJICoKKwkJICogRm9yIG90aGVyICh1c2VyLXNwZWNpZmllZCkgbm9uLU5VTEwgdmFsdWVz LCB0cnkgdG8gZmluZCBhIGNhc3QgYW5kCisJCSAqIGVycm9yIG91dCBpZiBvbmUgaXMgbm90IGZv dW5kLgorCQkgKi8KKwkJaWYgKGlzbnVsbCB8fAorCQkJKGV4cHJUeXBlKGV4cHIpID09IEpTT05C T0lEICYmCisJCQkgYmVoYXZpb3JfdHlwZSA9PSBkZWZhdWx0X2JlaGF2aW9yKSkKKwkJCWNvZXJj aW9uID0gbWFrZUpzb25Db2VyY2lvbihyZXR1cm5pbmcsIGZhbHNlLCBOVUxMKTsKKwkJZWxzZQor CQkJY29lcmNlZF9leHByID0KKwkJCQljb2VyY2VfdG9fdGFyZ2V0X3R5cGUocHN0YXRlLCBleHBy LCBleHByVHlwZShleHByKSwKKwkJCQkJCQkJCSAgcmV0dXJuaW5nLT50eXBpZCwgcmV0dXJuaW5n LT50eXBtb2QsCisJCQkJCQkJCQkgIENPRVJDSU9OX0VYUExJQ0lULCBDT0VSQ0VfRVhQTElDSVRf Q0FTVCwKKwkJCQkJCQkJCSAgZXhwckxvY2F0aW9uKChOb2RlICopIGJlaGF2aW9yKSk7CisKKwkJ aWYgKGNvZXJjZWRfZXhwciA9PSBOVUxMKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJZXJyY29k ZShFUlJDT0RFX0NBTk5PVF9DT0VSQ0UpLAorCQkJCQllcnJtc2coImNhbm5vdCBjYXN0IGJlaGF2 aW9yIGV4cHJlc3Npb24gb2YgdHlwZSAlcyB0byAlcyIsCisJCQkJCQkgICBmb3JtYXRfdHlwZV9i ZShleHByVHlwZShleHByKSksCisJCQkJCQkgICBmb3JtYXRfdHlwZV9iZShyZXR1cm5pbmctPnR5 cGlkKSksCisJCQkJCXBhcnNlcl9lcnJwb3NpdGlvbihwc3RhdGUsIGV4cHJMb2NhdGlvbihleHBy KSkpOworCQllbHNlCisJCQlleHByID0gY29lcmNlZF9leHByOworCX0KKworCXJldHVybiBtYWtl SnNvbkJlaGF2aW9yKGJlaGF2aW9yX3R5cGUsIGV4cHIsIGNvZXJjaW9uLCBsb2NhdGlvbik7Cit9 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfdGFyZ2V0LmMgYi9zcmMvYmFj a2VuZC9wYXJzZXIvcGFyc2VfdGFyZ2V0LmMKaW5kZXggZWE1MjJiOTMyYi4uMzgzZWZlNWI2YyAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3RhcmdldC5jCisrKyBiL3NyYy9i YWNrZW5kL3BhcnNlci9wYXJzZV90YXJnZXQuYwpAQCAtMjAwNiw2ICsyMDA2LDIxIEBAIEZpZ3Vy ZUNvbG5hbWVJbnRlcm5hbChOb2RlICpub2RlLCBjaGFyICoqbmFtZSkKIAkJCS8qIG1ha2UgSlNP Tl9BUlJBWUFHRyBhY3QgbGlrZSBhIHJlZ3VsYXIgZnVuY3Rpb24gKi8KIAkJCSpuYW1lID0gImpz b25fYXJyYXlhZ2ciOwogCQkJcmV0dXJuIDI7CisJCWNhc2UgVF9Kc29uRnVuY0V4cHI6CisJCQkv KiBtYWtlIFNRTC9KU09OIGZ1bmN0aW9ucyBhY3QgbGlrZSBhIHJlZ3VsYXIgZnVuY3Rpb24gKi8K KwkJCXN3aXRjaCAoKChKc29uRnVuY0V4cHIgKikgbm9kZSktPm9wKQorCQkJeworCQkJCWNhc2Ug SlNPTl9FWElTVFNfT1A6CisJCQkJCSpuYW1lID0gImpzb25fZXhpc3RzIjsKKwkJCQkJcmV0dXJu IDI7CisJCQkJY2FzZSBKU09OX1FVRVJZX09QOgorCQkJCQkqbmFtZSA9ICJqc29uX3F1ZXJ5IjsK KwkJCQkJcmV0dXJuIDI7CisJCQkJY2FzZSBKU09OX1ZBTFVFX09QOgorCQkJCQkqbmFtZSA9ICJq c29uX3ZhbHVlIjsKKwkJCQkJcmV0dXJuIDI7CisJCQl9CisJCQlicmVhazsKIAkJZGVmYXVsdDoK IAkJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXR0 aW5nLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0dGluZy5jCmluZGV4IDVmNDgzYjhk YmMuLmY5M2FkMWI3YjUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXR0 aW5nLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1hdHRpbmcuYwpAQCAtNDQ3MSw2 ICs0NDcxLDUwIEBAIHBhcnNlX2RhdGV0aW1lKHRleHQgKmRhdGVfdHh0LCB0ZXh0ICpmbXQsIE9p ZCBjb2xsaWQsIGJvb2wgc3RyaWN0LAogCX0KIH0KIAorLyoKKyAqIFBhcnNlcyB0aGUgZGF0ZXRp bWUgZm9ybWF0IHN0cmluZyBpbiAnZm10X3N0cicgYW5kIHJldHVybnMgdHJ1ZSBpZiBpdAorICog Y29udGFpbnMgYSB0aW1lem9uZSBzcGVjaWZpZXIsIGZhbHNlIGlmIG5vdC4KKyAqLworYm9vbAor ZGF0ZXRpbWVfZm9ybWF0X2hhc190eihjb25zdCBjaGFyICpmbXRfc3RyKQoreworCWJvb2wJCWlu Y2FjaGU7CisJaW50CQkJZm10X2xlbiA9IHN0cmxlbihmbXRfc3RyKTsKKwlpbnQJCQlyZXN1bHQ7 CisJRm9ybWF0Tm9kZSAqZm9ybWF0OworCisJaWYgKGZtdF9sZW4gPiBEQ0hfQ0FDSEVfU0laRSkK Kwl7CisJCS8qCisJCSAqIEFsbG9jYXRlIG5ldyBtZW1vcnkgaWYgZm9ybWF0IHBpY3R1cmUgaXMg YmlnZ2VyIHRoYW4gc3RhdGljIGNhY2hlCisJCSAqIGFuZCBkbyBub3QgdXNlIGNhY2hlIChjYWxs IHBhcnNlciBhbHdheXMpCisJCSAqLworCQlpbmNhY2hlID0gZmFsc2U7CisKKwkJZm9ybWF0ID0g KEZvcm1hdE5vZGUgKikgcGFsbG9jKChmbXRfbGVuICsgMSkgKiBzaXplb2YoRm9ybWF0Tm9kZSkp OworCisJCXBhcnNlX2Zvcm1hdChmb3JtYXQsIGZtdF9zdHIsIERDSF9rZXl3b3JkcywKKwkJCQkJ IERDSF9zdWZmLCBEQ0hfaW5kZXgsIERDSF9GTEFHLCBOVUxMKTsKKwl9CisJZWxzZQorCXsKKwkJ LyoKKwkJICogVXNlIGNhY2hlIGJ1ZmZlcnMKKwkJICovCisJCURDSENhY2hlRW50cnkgKmVudCA9 IERDSF9jYWNoZV9mZXRjaChmbXRfc3RyLCBmYWxzZSk7CisKKwkJaW5jYWNoZSA9IHRydWU7CisJ CWZvcm1hdCA9IGVudC0+Zm9ybWF0OworCX0KKworCXJlc3VsdCA9IERDSF9kYXRldGltZV90eXBl KGZvcm1hdCk7CisKKwlpZiAoIWluY2FjaGUpCisJCXBmcmVlKGZvcm1hdCk7CisKKwlyZXR1cm4g cmVzdWx0ICYgRENIX1pPTkVEOworfQorCiAvKgogICogZG9fdG9fdGltZXN0YW1wOiBzaGFyZWQg Y29kZSBmb3IgdG9fdGltZXN0YW1wIGFuZCB0b19kYXRlCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L2pzb25iLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmIuYwpp bmRleCBhOTQxNjU0ZDVhLi5lNDU2MmIzYzZjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGls cy9hZHQvanNvbmIuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmIuYwpAQCAtMjE1 OCwzICsyMTU4LDM0IEBAIGpzb25iX2Zsb2F0OChQR19GVU5DVElPTl9BUkdTKQogCiAJUEdfUkVU VVJOX0RBVFVNKHJldFZhbHVlKTsKIH0KKworLyoKKyAqIENvbnZlcnQganNvbmIgdG8gYSBDLXN0 cmluZyBzdHJpcHBpbmcgcXVvdGVzIGZyb20gc2NhbGFyIHN0cmluZ3MuCisgKi8KK2NoYXIgKgor SnNvbmJVbnF1b3RlKEpzb25iICpqYikKK3sKKwlpZiAoSkJfUk9PVF9JU19TQ0FMQVIoamIpKQor CXsKKwkJSnNvbmJWYWx1ZQl2OworCisJCSh2b2lkKSBKc29uYkV4dHJhY3RTY2FsYXIoJmpiLT5y b290LCAmdik7CisKKwkJaWYgKHYudHlwZSA9PSBqYnZTdHJpbmcpCisJCQlyZXR1cm4gcG5zdHJk dXAodi52YWwuc3RyaW5nLnZhbCwgdi52YWwuc3RyaW5nLmxlbik7CisJCWVsc2UgaWYgKHYudHlw ZSA9PSBqYnZCb29sKQorCQkJcmV0dXJuIHBzdHJkdXAodi52YWwuYm9vbGVhbiA/ICJ0cnVlIiA6 ICJmYWxzZSIpOworCQllbHNlIGlmICh2LnR5cGUgPT0gamJ2TnVtZXJpYykKKwkJCXJldHVybiBE YXR1bUdldENTdHJpbmcoRGlyZWN0RnVuY3Rpb25DYWxsMShudW1lcmljX291dCwKKwkJCQkJCQkJ CQkJCQkgICBQb2ludGVyR2V0RGF0dW0odi52YWwubnVtZXJpYykpKTsKKwkJZWxzZSBpZiAodi50 eXBlID09IGpidk51bGwpCisJCQlyZXR1cm4gcHN0cmR1cCgibnVsbCIpOworCQllbHNlCisJCXsK KwkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQganNvbmIgdmFsdWUgdHlwZSAlZCIsIHYudHlw ZSk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0KKwllbHNlCisJCXJldHVybiBKc29uYlRvQ1N0 cmluZyhOVUxMLCAmamItPnJvb3QsIFZBUlNJWkUoamIpKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9qc29uZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29u ZnVuY3MuYwppbmRleCAxYjBmNDk0MzI5Li41NGRiZDdlNzlmIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC91dGlscy9hZHQvanNvbmZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pz b25mdW5jcy5jCkBAIC0yODMwLDcgKzI4MzAsOSBAQCBwb3B1bGF0ZV9hcnJheV9kaW1fanNvbmIo UG9wdWxhdGVBcnJheUNvbnRleHQgKmN0eCwgLyogY29udGV4dCAqLwogCiAJY2hlY2tfc3RhY2tf ZGVwdGgoKTsKIAotCWlmIChqYnYtPnR5cGUgIT0gamJ2QmluYXJ5IHx8ICFKc29uQ29udGFpbmVy SXNBcnJheShqYmMpKQorCS8qIEV2ZW4gc2NhbGFycyBjYW4gZW5kIHVwIGhlcmUgdGhhbmtzIHRv IEpzb25QYXRoUXVlcnkvVmFsdWUoKS4gKi8KKwlpZiAoamJ2LT50eXBlICE9IGpidkJpbmFyeSB8 fCAhSnNvbkNvbnRhaW5lcklzQXJyYXkoamJjKSB8fAorCQlKc29uQ29udGFpbmVySXNTY2FsYXIo amJjKSkKIAl7CiAJCXBvcHVsYXRlX2FycmF5X3JlcG9ydF9leHBlY3RlZF9hcnJheShjdHgsIG5k aW0gLSAxKTsKIAkJLyogR2V0dGluZyBoZXJlIG1lYW5zIHRoZSBlcnJvciB3YXMgcmVwb3J0ZWQg c29mdGx5LiAqLwpAQCAtMjgzOCw4ICsyODQwLDYgQEAgcG9wdWxhdGVfYXJyYXlfZGltX2pzb25i KFBvcHVsYXRlQXJyYXlDb250ZXh0ICpjdHgsIC8qIGNvbnRleHQgKi8KIAkJcmV0dXJuIGZhbHNl OwogCX0KIAotCUFzc2VydCghSnNvbkNvbnRhaW5lcklzU2NhbGFyKGpiYykpOwotCiAJaXQgPSBK c29uYkl0ZXJhdG9ySW5pdChqYmMpOwogCiAJdG9rID0gSnNvbmJJdGVyYXRvck5leHQoJml0LCAm dmFsLCB0cnVlKTsKQEAgLTMzMjMsNiArMzMyMyw2MiBAQCBwcmVwYXJlX2NvbHVtbl9jYWNoZShD b2x1bW5JT0RhdGEgKmNvbHVtbiwKIAlSZWxlYXNlU3lzQ2FjaGUodHVwKTsKIH0KIAorLyoKKyAq IFBvcHVsYXRlIGFuZCByZXR1cm4gdGhlIHZhbHVlIG9mIHNwZWNpZmllZCB0eXBlIGZyb20gYSBn aXZlbiBqc29uL2pzb25iCisgKiB2YWx1ZSAnanNvbl92YWwnLiAgJ2NhY2hlJyBpcyBjYWxsZXIt c3BlY2lmaWVkIHBvaW50ZXIgdG8gc2F2ZSB0aGUKKyAqIENvbHVtbklPRGF0YSB0aGF0IHdpbGwg YmUgaW5pdGlhbGl6ZWQgb24gdGhlIDFzdCBjYWxsIGFuZCB0aGVuIHJldXNlZAorICogZHVyaW5n IGFueSBzdWJzZXF1ZW50IGNhbGxzLiAgJ21jeHQnIGdpdmVzIHRoZSBtZW1vcnkgY29udGV4dCB0 byBhbGxvY2F0ZQorICogdGhlIENvbHVtbklPRGF0YSBhbmQgYW55IG90aGVyIHN1YnNpZGlhcnkg bWVtb3J5IGluLiAgJ2VzY29udGV4dCcsCisgKiBpZiBub3QgTlVMTCwgdGVsbHMgdGhhdCBhbnkg ZXJyb3JzIHRoYXQgb2NjdXIgc2hvdWxkIGJlIGhhbmRsZWQgc29mdGx5LgorICovCitEYXR1bQor anNvbl9wb3B1bGF0ZV90eXBlKERhdHVtIGpzb25fdmFsLCBPaWQganNvbl90eXBlLAorCQkJCSAg IE9pZCB0eXBpZCwgaW50MzIgdHlwbW9kLAorCQkJCSAgIHZvaWQgKipjYWNoZSwgTWVtb3J5Q29u dGV4dCBtY3h0LAorCQkJCSAgIGJvb2wgKmlzbnVsbCwKKwkJCQkgICBOb2RlICplc2NvbnRleHQp Cit7CisJSnNWYWx1ZQkJanN2ID0gezB9OworCUpzb25iVmFsdWUJamJ2OworCisJanN2LmlzX2pz b24gPSBqc29uX3R5cGUgPT0gSlNPTk9JRDsKKworCWlmICgqaXNudWxsKQorCXsKKwkJaWYgKGpz di5pc19qc29uKQorCQkJanN2LnZhbC5qc29uLnN0ciA9IE5VTEw7CisJCWVsc2UKKwkJCWpzdi52 YWwuanNvbmIgPSBOVUxMOworCX0KKwllbHNlIGlmIChqc3YuaXNfanNvbikKKwl7CisJCXRleHQJ ICAgKmpzb24gPSBEYXR1bUdldFRleHRQUChqc29uX3ZhbCk7CisKKwkJanN2LnZhbC5qc29uLnN0 ciA9IFZBUkRBVEFfQU5ZKGpzb24pOworCQlqc3YudmFsLmpzb24ubGVuID0gVkFSU0laRV9BTllf RVhIRFIoanNvbik7CisJCWpzdi52YWwuanNvbi50eXBlID0gSlNPTl9UT0tFTl9JTlZBTElEOyAv KiBub3QgdXNlZCBpbgorCQkJCQkJCQkJCQkJICogcG9wdWxhdGVfY29tcG9zaXRlKCkgKi8KKwl9 CisJZWxzZQorCXsKKwkJSnNvbmIJICAgKmpzb25iID0gRGF0dW1HZXRKc29uYlAoanNvbl92YWwp OworCisJCWpzdi52YWwuanNvbmIgPSAmamJ2OworCisJCS8qIGZpbGwgYmluYXJ5IGpzb25iIHZh bHVlIHBvaW50aW5nIHRvIGpiICovCisJCWpidi50eXBlID0gamJ2QmluYXJ5OworCQlqYnYudmFs LmJpbmFyeS5kYXRhID0gJmpzb25iLT5yb290OworCQlqYnYudmFsLmJpbmFyeS5sZW4gPSBWQVJT SVpFKGpzb25iKSAtIFZBUkhEUlNaOworCX0KKworCWlmICgqY2FjaGUgPT0gTlVMTCkKKwkJKmNh Y2hlID0gTWVtb3J5Q29udGV4dEFsbG9jWmVybyhtY3h0LCBzaXplb2YoQ29sdW1uSU9EYXRhKSk7 CisKKwlyZXR1cm4gcG9wdWxhdGVfcmVjb3JkX2ZpZWxkKCpjYWNoZSwgdHlwaWQsIHR5cG1vZCwg TlVMTCwgbWN4dCwKKwkJCQkJCQkJIFBvaW50ZXJHZXREYXR1bShOVUxMKSwgJmpzdiwgaXNudWxs LAorCQkJCQkJCQkgZXNjb250ZXh0KTsKK30KKwogLyogcmVjdXJzaXZlbHkgcG9wdWxhdGUgYSBy ZWNvcmQgZmllbGQgb3IgYW4gYXJyYXkgZWxlbWVudCBmcm9tIGEganNvbi9qc29uYiB2YWx1ZSAq Lwogc3RhdGljIERhdHVtCiBwb3B1bGF0ZV9yZWNvcmRfZmllbGQoQ29sdW1uSU9EYXRhICpjb2ws CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbnBhdGguYyBiL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9qc29ucGF0aC5jCmluZGV4IDc4NmEyYjY1YzYuLjExZTYxOTNlOTYgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29ucGF0aC5jCisrKyBiL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9qc29ucGF0aC5jCkBAIC02MywxMSArNjMsMTQgQEAKIAogI2luY2x1ZGUg InBvc3RncmVzLmgiCiAKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKICNpbmNsdWRlICJs aWIvc3RyaW5naW5mby5oIgogI2luY2x1ZGUgImxpYnBxL3BxZm9ybWF0LmgiCiAjaW5jbHVkZSAi bWlzY2FkbWluLmgiCiAjaW5jbHVkZSAibm9kZXMvbWlzY25vZGVzLmgiCisjaW5jbHVkZSAibm9k ZXMvbm9kZUZ1bmNzLmgiCiAjaW5jbHVkZSAidXRpbHMvZm1ncnByb3Rvcy5oIgorI2luY2x1ZGUg InV0aWxzL2Zvcm1hdHRpbmcuaCIKICNpbmNsdWRlICJ1dGlscy9qc29uLmgiCiAjaW5jbHVkZSAi dXRpbHMvanNvbnBhdGguaCIKIApAQCAtMTIzOSwzICsxMjQyLDI4MSBAQCBqc3BHZXRBcnJheVN1 YnNjcmlwdChKc29uUGF0aEl0ZW0gKnYsIEpzb25QYXRoSXRlbSAqZnJvbSwgSnNvblBhdGhJdGVt ICp0bywKIAogCXJldHVybiB0cnVlOwogfQorCisvKiBTUUwvSlNPTiBkYXRhdHlwZSBzdGF0dXM6 ICovCitlbnVtIEpzb25QYXRoRGF0YXR5cGVTdGF0dXMKK3sKKwlqcGRzTm9uRGF0ZVRpbWUsCQkJ LyogbnVsbCwgYm9vbCwgbnVtZXJpYywgc3RyaW5nLCBhcnJheSwgb2JqZWN0ICovCisJanBkc1Vu a25vd25EYXRlVGltZSwJCS8qIHVua25vd24gZGF0ZXRpbWUgdHlwZSAqLworCWpwZHNEYXRlVGlt ZVpvbmVkLAkJCS8qIHRpbWV0eiwgdGltZXN0YW1wdHogKi8KKwlqcGRzRGF0ZVRpbWVOb25ab25l ZCwJCS8qIHRpbWUsIHRpbWVzdGFtcCwgZGF0ZSAqLworfTsKKworLyogQ29udGV4dCBmb3IganNw SXNNdXRhYmxlV2Fsa2VyKCkgKi8KK3N0cnVjdCBKc29uUGF0aE11dGFibGVDb250ZXh0Cit7CisJ TGlzdAkgICAqdmFybmFtZXM7CQkvKiBsaXN0IG9mIHZhcmlhYmxlIG5hbWVzICovCisJTGlzdAkg ICAqdmFyZXhwcnM7CQkvKiBsaXN0IG9mIHZhcmlhYmxlIGV4cHJlc3Npb25zICovCisJZW51bSBK c29uUGF0aERhdGF0eXBlU3RhdHVzIGN1cnJlbnQ7CS8qIHN0YXR1cyBvZiBAIGl0ZW0gKi8KKwli b29sCQlsYXg7CQkJLyoganNvbnBhdGggaXMgbGF4IG9yIHN0cmljdCAqLworCWJvb2wJCW11dGFi bGU7CQkvKiByZXN1bHRpbmcgbXV0YWJpbGl0eSBzdGF0dXMgKi8KK307CisKK3N0YXRpYyBlbnVt IEpzb25QYXRoRGF0YXR5cGVTdGF0dXMganNwSXNNdXRhYmxlV2Fsa2VyKEpzb25QYXRoSXRlbSAq anBpLAorCQkJCQkJCQkJCQkJCSAgc3RydWN0IEpzb25QYXRoTXV0YWJsZUNvbnRleHQgKmN4dCk7 CisKKy8qCisgKiBGdW5jdGlvbiB0byBjaGVjayB3aGV0aGVyIGpzb25wYXRoIGV4cHJlc3Npb24g aXMgbXV0YWJsZSB0byBiZSB1c2VkIGluIHRoZQorICogcGxhbm5lciBmdW5jdGlvbiBjb250YWlu X211dGFibGVfZnVuY3Rpb25zKCkuCisgKi8KK2Jvb2wKK2pzcElzTXV0YWJsZShKc29uUGF0aCAq cGF0aCwgTGlzdCAqdmFybmFtZXMsIExpc3QgKnZhcmV4cHJzKQoreworCXN0cnVjdCBKc29uUGF0 aE11dGFibGVDb250ZXh0IGN4dDsKKwlKc29uUGF0aEl0ZW0ganBpOworCisJY3h0LnZhcm5hbWVz ID0gdmFybmFtZXM7CisJY3h0LnZhcmV4cHJzID0gdmFyZXhwcnM7CisJY3h0LmN1cnJlbnQgPSBq cGRzTm9uRGF0ZVRpbWU7CisJY3h0LmxheCA9IChwYXRoLT5oZWFkZXIgJiBKU09OUEFUSF9MQVgp ICE9IDA7CisJY3h0Lm11dGFibGUgPSBmYWxzZTsKKworCWpzcEluaXQoJmpwaSwgcGF0aCk7CisJ KHZvaWQpIGpzcElzTXV0YWJsZVdhbGtlcigmanBpLCAmY3h0KTsKKworCXJldHVybiBjeHQubXV0 YWJsZTsKK30KKworLyoKKyAqIFJlY3Vyc2l2ZSB3YWxrZXIgZm9yIGpzcElzTXV0YWJsZSgpCisg Ki8KK3N0YXRpYyBlbnVtIEpzb25QYXRoRGF0YXR5cGVTdGF0dXMKK2pzcElzTXV0YWJsZVdhbGtl cihKc29uUGF0aEl0ZW0gKmpwaSwgc3RydWN0IEpzb25QYXRoTXV0YWJsZUNvbnRleHQgKmN4dCkK K3sKKwlKc29uUGF0aEl0ZW0gbmV4dDsKKwllbnVtIEpzb25QYXRoRGF0YXR5cGVTdGF0dXMgc3Rh dHVzID0ganBkc05vbkRhdGVUaW1lOworCisJd2hpbGUgKCFjeHQtPm11dGFibGUpCisJeworCQlK c29uUGF0aEl0ZW0gYXJnOworCQllbnVtIEpzb25QYXRoRGF0YXR5cGVTdGF0dXMgbGVmdFN0YXR1 czsKKwkJZW51bSBKc29uUGF0aERhdGF0eXBlU3RhdHVzIHJpZ2h0U3RhdHVzOworCisJCXN3aXRj aCAoanBpLT50eXBlKQorCQl7CisJCQljYXNlIGpwaVJvb3Q6CisJCQkJQXNzZXJ0KHN0YXR1cyA9 PSBqcGRzTm9uRGF0ZVRpbWUpOworCQkJCWJyZWFrOworCisJCQljYXNlIGpwaUN1cnJlbnQ6CisJ CQkJQXNzZXJ0KHN0YXR1cyA9PSBqcGRzTm9uRGF0ZVRpbWUpOworCQkJCXN0YXR1cyA9IGN4dC0+ Y3VycmVudDsKKwkJCQlicmVhazsKKworCQkJY2FzZSBqcGlGaWx0ZXI6CisJCQkJeworCQkJCQll bnVtIEpzb25QYXRoRGF0YXR5cGVTdGF0dXMgcHJldlN0YXR1cyA9IGN4dC0+Y3VycmVudDsKKwor CQkJCQljeHQtPmN1cnJlbnQgPSBzdGF0dXM7CisJCQkJCWpzcEdldEFyZyhqcGksICZhcmcpOwor CQkJCQlqc3BJc011dGFibGVXYWxrZXIoJmFyZywgY3h0KTsKKworCQkJCQljeHQtPmN1cnJlbnQg PSBwcmV2U3RhdHVzOworCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCWNhc2UganBpVmFyaWFibGU6 CisJCQkJeworCQkJCQlpbnQzMgkJbGVuOworCQkJCQljb25zdCBjaGFyICpuYW1lID0ganNwR2V0 U3RyaW5nKGpwaSwgJmxlbik7CisJCQkJCUxpc3RDZWxsICAgKmxjMTsKKwkJCQkJTGlzdENlbGwg ICAqbGMyOworCisJCQkJCUFzc2VydChzdGF0dXMgPT0ganBkc05vbkRhdGVUaW1lKTsKKworCQkJ CQlmb3Jib3RoKGxjMSwgY3h0LT52YXJuYW1lcywgbGMyLCBjeHQtPnZhcmV4cHJzKQorCQkJCQl7 CisJCQkJCQlTdHJpbmcJICAgKnZhcm5hbWUgPSBsZmlyc3Rfbm9kZShTdHJpbmcsIGxjMSk7CisJ CQkJCQlOb2RlCSAgICp2YXJleHByID0gbGZpcnN0KGxjMik7CisKKwkJCQkJCWlmIChzdHJuY21w KHZhcm5hbWUtPnN2YWwsIG5hbWUsIGxlbikpCisJCQkJCQkJY29udGludWU7CisKKwkJCQkJCXN3 aXRjaCAoZXhwclR5cGUodmFyZXhwcikpCisJCQkJCQl7CisJCQkJCQkJY2FzZSBEQVRFT0lEOgor CQkJCQkJCWNhc2UgVElNRU9JRDoKKwkJCQkJCQljYXNlIFRJTUVTVEFNUE9JRDoKKwkJCQkJCQkJ c3RhdHVzID0ganBkc0RhdGVUaW1lTm9uWm9uZWQ7CisJCQkJCQkJCWJyZWFrOworCisJCQkJCQkJ Y2FzZSBUSU1FVFpPSUQ6CisJCQkJCQkJY2FzZSBUSU1FU1RBTVBUWk9JRDoKKwkJCQkJCQkJc3Rh dHVzID0ganBkc0RhdGVUaW1lWm9uZWQ7CisJCQkJCQkJCWJyZWFrOworCisJCQkJCQkJZGVmYXVs dDoKKwkJCQkJCQkJc3RhdHVzID0ganBkc05vbkRhdGVUaW1lOworCQkJCQkJCQlicmVhazsKKwkJ CQkJCX0KKworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQlj YXNlIGpwaUVxdWFsOgorCQkJY2FzZSBqcGlOb3RFcXVhbDoKKwkJCWNhc2UganBpTGVzczoKKwkJ CWNhc2UganBpR3JlYXRlcjoKKwkJCWNhc2UganBpTGVzc09yRXF1YWw6CisJCQljYXNlIGpwaUdy ZWF0ZXJPckVxdWFsOgorCQkJCUFzc2VydChzdGF0dXMgPT0ganBkc05vbkRhdGVUaW1lKTsKKwkJ CQlqc3BHZXRMZWZ0QXJnKGpwaSwgJmFyZyk7CisJCQkJbGVmdFN0YXR1cyA9IGpzcElzTXV0YWJs ZVdhbGtlcigmYXJnLCBjeHQpOworCisJCQkJanNwR2V0UmlnaHRBcmcoanBpLCAmYXJnKTsKKwkJ CQlyaWdodFN0YXR1cyA9IGpzcElzTXV0YWJsZVdhbGtlcigmYXJnLCBjeHQpOworCisJCQkJLyoK KwkJCQkgKiBDb21wYXJpc29uIG9mIGRhdGV0aW1lIHR5cGUgd2l0aCBkaWZmZXJlbnQgdGltZXpv bmUgc3RhdHVzCisJCQkJICogaXMgbXV0YWJsZS4KKwkJCQkgKi8KKwkJCQlpZiAobGVmdFN0YXR1 cyAhPSBqcGRzTm9uRGF0ZVRpbWUgJiYKKwkJCQkJcmlnaHRTdGF0dXMgIT0ganBkc05vbkRhdGVU aW1lICYmCisJCQkJCShsZWZ0U3RhdHVzID09IGpwZHNVbmtub3duRGF0ZVRpbWUgfHwKKwkJCQkJ IHJpZ2h0U3RhdHVzID09IGpwZHNVbmtub3duRGF0ZVRpbWUgfHwKKwkJCQkJIGxlZnRTdGF0dXMg IT0gcmlnaHRTdGF0dXMpKQorCQkJCQljeHQtPm11dGFibGUgPSB0cnVlOworCQkJCWJyZWFrOwor CisJCQljYXNlIGpwaU5vdDoKKwkJCWNhc2UganBpSXNVbmtub3duOgorCQkJY2FzZSBqcGlFeGlz dHM6CisJCQljYXNlIGpwaVBsdXM6CisJCQljYXNlIGpwaU1pbnVzOgorCQkJCUFzc2VydChzdGF0 dXMgPT0ganBkc05vbkRhdGVUaW1lKTsKKwkJCQlqc3BHZXRBcmcoanBpLCAmYXJnKTsKKwkJCQlq c3BJc011dGFibGVXYWxrZXIoJmFyZywgY3h0KTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBqcGlB bmQ6CisJCQljYXNlIGpwaU9yOgorCQkJY2FzZSBqcGlBZGQ6CisJCQljYXNlIGpwaVN1YjoKKwkJ CWNhc2UganBpTXVsOgorCQkJY2FzZSBqcGlEaXY6CisJCQljYXNlIGpwaU1vZDoKKwkJCWNhc2Ug anBpU3RhcnRzV2l0aDoKKwkJCQlBc3NlcnQoc3RhdHVzID09IGpwZHNOb25EYXRlVGltZSk7CisJ CQkJanNwR2V0TGVmdEFyZyhqcGksICZhcmcpOworCQkJCWpzcElzTXV0YWJsZVdhbGtlcigmYXJn LCBjeHQpOworCQkJCWpzcEdldFJpZ2h0QXJnKGpwaSwgJmFyZyk7CisJCQkJanNwSXNNdXRhYmxl V2Fsa2VyKCZhcmcsIGN4dCk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UganBpSW5kZXhBcnJheToK KwkJCQlmb3IgKGludCBpID0gMDsgaSA8IGpwaS0+Y29udGVudC5hcnJheS5uZWxlbXM7IGkrKykK KwkJCQl7CisJCQkJCUpzb25QYXRoSXRlbSBmcm9tOworCQkJCQlKc29uUGF0aEl0ZW0gdG87CisK KwkJCQkJaWYgKGpzcEdldEFycmF5U3Vic2NyaXB0KGpwaSwgJmZyb20sICZ0bywgaSkpCisJCQkJ CQlqc3BJc011dGFibGVXYWxrZXIoJnRvLCBjeHQpOworCisJCQkJCWpzcElzTXV0YWJsZVdhbGtl cigmZnJvbSwgY3h0KTsKKwkJCQl9CisJCQkJLyogRkFMTFRIUk9VR0ggKi8KKworCQkJY2FzZSBq cGlBbnlBcnJheToKKwkJCQlpZiAoIWN4dC0+bGF4KQorCQkJCQlzdGF0dXMgPSBqcGRzTm9uRGF0 ZVRpbWU7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UganBpQW55OgorCQkJCWlmIChqcGktPmNvbnRl bnQuYW55Ym91bmRzLmZpcnN0ID4gMCkKKwkJCQkJc3RhdHVzID0ganBkc05vbkRhdGVUaW1lOwor CQkJCWJyZWFrOworCisJCQljYXNlIGpwaURhdGV0aW1lOgorCQkJCWlmIChqcGktPmNvbnRlbnQu YXJnKQorCQkJCXsKKwkJCQkJY2hhcgkgICAqdGVtcGxhdGU7CisKKwkJCQkJanNwR2V0QXJnKGpw aSwgJmFyZyk7CisJCQkJCWlmIChhcmcudHlwZSAhPSBqcGlTdHJpbmcpCisJCQkJCXsKKwkJCQkJ CXN0YXR1cyA9IGpwZHNOb25EYXRlVGltZTsKKwkJCQkJCWJyZWFrOwkvKiB0aGVyZSB3aWxsIGJl IHJ1bnRpbWUgZXJyb3IgKi8KKwkJCQkJfQorCisJCQkJCXRlbXBsYXRlID0ganNwR2V0U3RyaW5n KCZhcmcsIE5VTEwpOworCQkJCQlpZiAoZGF0ZXRpbWVfZm9ybWF0X2hhc190eih0ZW1wbGF0ZSkp CisJCQkJCQlzdGF0dXMgPSBqcGRzRGF0ZVRpbWVab25lZDsKKwkJCQkJZWxzZQorCQkJCQkJc3Rh dHVzID0ganBkc0RhdGVUaW1lTm9uWm9uZWQ7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJ CXN0YXR1cyA9IGpwZHNVbmtub3duRGF0ZVRpbWU7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQlj YXNlIGpwaUxpa2VSZWdleDoKKwkJCQlBc3NlcnQoc3RhdHVzID09IGpwZHNOb25EYXRlVGltZSk7 CisJCQkJanNwSW5pdEJ5QnVmZmVyKCZhcmcsIGpwaS0+YmFzZSwganBpLT5jb250ZW50Lmxpa2Vf cmVnZXguZXhwcik7CisJCQkJanNwSXNNdXRhYmxlV2Fsa2VyKCZhcmcsIGN4dCk7CisJCQkJYnJl YWs7CisKKwkJCQkvKiBsaXRlcmFscyAqLworCQkJY2FzZSBqcGlOdWxsOgorCQkJY2FzZSBqcGlT dHJpbmc6CisJCQljYXNlIGpwaU51bWVyaWM6CisJCQljYXNlIGpwaUJvb2w6CisJCQkJYnJlYWs7 CisJCQkJLyogYWNjZXNzb3JzICovCisJCQljYXNlIGpwaUtleToKKwkJCWNhc2UganBpQW55S2V5 OgorCQkJCS8qIHNwZWNpYWwgaXRlbXMgKi8KKwkJCWNhc2UganBpU3Vic2NyaXB0OgorCQkJY2Fz ZSBqcGlMYXN0OgorCQkJCS8qIGl0ZW0gbWV0aG9kcyAqLworCQkJY2FzZSBqcGlUeXBlOgorCQkJ Y2FzZSBqcGlTaXplOgorCQkJY2FzZSBqcGlBYnM6CisJCQljYXNlIGpwaUZsb29yOgorCQkJY2Fz ZSBqcGlDZWlsaW5nOgorCQkJY2FzZSBqcGlEb3VibGU6CisJCQljYXNlIGpwaUtleVZhbHVlOgor CQkJY2FzZSBqcGlCaWdpbnQ6CisJCQljYXNlIGpwaUJvb2xlYW46CisJCQljYXNlIGpwaURlY2lt YWw6CisJCQljYXNlIGpwaUludGVnZXI6CisJCQljYXNlIGpwaU51bWJlcjoKKwkJCWNhc2UganBp U3RyaW5nRnVuYzoKKwkJCQlzdGF0dXMgPSBqcGRzTm9uRGF0ZVRpbWU7CisJCQkJYnJlYWs7CisK KwkJCWNhc2UganBpVGltZToKKwkJCWNhc2UganBpRGF0ZToKKwkJCWNhc2UganBpVGltZXN0YW1w OgorCQkJCXN0YXR1cyA9IGpwZHNEYXRlVGltZU5vblpvbmVkOworCQkJCWN4dC0+bXV0YWJsZSA9 IHRydWU7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UganBpVGltZVR6OgorCQkJY2FzZSBqcGlUaW1l c3RhbXBUejoKKwkJCQlzdGF0dXMgPSBqcGRzRGF0ZVRpbWVOb25ab25lZDsKKwkJCQljeHQtPm11 dGFibGUgPSB0cnVlOworCQkJCWJyZWFrOworCisJCX0KKworCQlpZiAoIWpzcEdldE5leHQoanBp LCAmbmV4dCkpCisJCQlicmVhazsKKworCQlqcGkgPSAmbmV4dDsKKwl9CisKKwlyZXR1cm4gc3Rh dHVzOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25wYXRoX2V4ZWMu YyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29ucGF0aF9leGVjLmMKaW5kZXggNmM4YmQ1NzUw My4uMWQyZDAyNDVlOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25wYXRo X2V4ZWMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbnBhdGhfZXhlYy5jCkBAIC0y MjksNiArMjI5LDEyIEBAIHN0YXRpYyBKc29uUGF0aEV4ZWNSZXN1bHQgYXBwZW5kQm9vbFJlc3Vs dChKc29uUGF0aEV4ZWNDb250ZXh0ICpjeHQsCiAJCQkJCQkJCQkJICAgSnNvblBhdGhJdGVtICpq c3AsIEpzb25WYWx1ZUxpc3QgKmZvdW5kLCBKc29uUGF0aEJvb2wgcmVzKTsKIHN0YXRpYyB2b2lk IGdldEpzb25QYXRoSXRlbShKc29uUGF0aEV4ZWNDb250ZXh0ICpjeHQsIEpzb25QYXRoSXRlbSAq aXRlbSwKIAkJCQkJCQlKc29uYlZhbHVlICp2YWx1ZSk7CitzdGF0aWMgSnNvbmJWYWx1ZSAqR2V0 SnNvblBhdGhWYXIodm9pZCAqY3h0LCBjaGFyICp2YXJOYW1lLCBpbnQgdmFyTmFtZUxlbiwKKwkJ CQkJCQkJICBKc29uYlZhbHVlICpiYXNlT2JqZWN0LCBpbnQgKmJhc2VPYmplY3RJZCk7CitzdGF0 aWMgaW50CUNvdW50SnNvblBhdGhWYXJzKHZvaWQgKmN4dCk7CitzdGF0aWMgdm9pZCBKc29uSXRl bUZyb21EYXR1bShEYXR1bSB2YWwsIE9pZCB0eXBpZCwgaW50MzIgdHlwbW9kLAorCQkJCQkJCSAg SnNvbmJWYWx1ZSAqcmVzKTsKK3N0YXRpYyB2b2lkIEpzb25iVmFsdWVJbml0TnVtZXJpY0RhdHVt KEpzb25iVmFsdWUgKmpidiwgRGF0dW0gbnVtKTsKIHN0YXRpYyB2b2lkIGdldEpzb25QYXRoVmFy aWFibGUoSnNvblBhdGhFeGVjQ29udGV4dCAqY3h0LAogCQkJCQkJCQlKc29uUGF0aEl0ZW0gKnZh cmlhYmxlLCBKc29uYlZhbHVlICp2YWx1ZSk7CiBzdGF0aWMgaW50CWNvdW50VmFyaWFibGVzRnJv bUpzb25iKHZvaWQgKnZhcnNKc29uYik7CkBAIC0yODYwLDYgKzI4NjYsMTU1IEBAIGdldEpzb25Q YXRoSXRlbShKc29uUGF0aEV4ZWNDb250ZXh0ICpjeHQsIEpzb25QYXRoSXRlbSAqaXRlbSwKIAl9 CiB9CiAKKy8qCisgKiBSZXR1cm5zIHRoZSBjb21wdXRlZCB2YWx1ZSBvZiBhIEpTT04gcGF0aCB2 YXJpYWJsZSB3aXRoIGdpdmVuIG5hbWUuCisgKi8KK3N0YXRpYyBKc29uYlZhbHVlICoKK0dldEpz b25QYXRoVmFyKHZvaWQgKmN4dCwgY2hhciAqdmFyTmFtZSwgaW50IHZhck5hbWVMZW4sCisJCQkg ICBKc29uYlZhbHVlICpiYXNlT2JqZWN0LCBpbnQgKmJhc2VPYmplY3RJZCkKK3sKKwlKc29uUGF0 aFZhcmlhYmxlICp2YXIgPSBOVUxMOworCUxpc3QJICAgKnZhcnMgPSBjeHQ7CisJTGlzdENlbGwg ICAqbGM7CisJSnNvbmJWYWx1ZSAqcmVzdWx0OworCWludAkJCWlkID0gMTsKKworCWZvcmVhY2go bGMsIHZhcnMpCisJeworCQlKc29uUGF0aFZhcmlhYmxlICpjdXJ2YXIgPSBsZmlyc3QobGMpOwor CisJCWlmICghc3RybmNtcChjdXJ2YXItPm5hbWUsIHZhck5hbWUsIHZhck5hbWVMZW4pKQorCQl7 CisJCQl2YXIgPSBjdXJ2YXI7CisJCQlicmVhazsKKwkJfQorCisJCWlkKys7CisJfQorCisJaWYg KHZhciA9PSBOVUxMKQorCXsKKwkJKmJhc2VPYmplY3RJZCA9IC0xOworCQlyZXR1cm4gTlVMTDsK Kwl9CisKKwlyZXN1bHQgPSBwYWxsb2Moc2l6ZW9mKEpzb25iVmFsdWUpKTsKKwlpZiAodmFyLT5p c251bGwpCisJeworCQkqYmFzZU9iamVjdElkID0gMDsKKwkJcmVzdWx0LT50eXBlID0gamJ2TnVs bDsKKwl9CisJZWxzZQorCQlKc29uSXRlbUZyb21EYXR1bSh2YXItPnZhbHVlLCB2YXItPnR5cGlk LCB2YXItPnR5cG1vZCwgcmVzdWx0KTsKKworCSpiYXNlT2JqZWN0ID0gKnJlc3VsdDsKKwkqYmFz ZU9iamVjdElkID0gaWQ7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50CitDb3Vu dEpzb25QYXRoVmFycyh2b2lkICpjeHQpCit7CisJTGlzdAkgICAqdmFycyA9IChMaXN0ICopIGN4 dDsKKworCXJldHVybiBsaXN0X2xlbmd0aCh2YXJzKTsKK30KKworCisvKgorICogSW5pdGlhbGl6 ZSBKc29uYlZhbHVlIHRvIHBhc3MgdG8ganNvbnBhdGggZXhlY3V0b3IgZnJvbSBnaXZlbgorICog ZGF0dW0gdmFsdWUgb2YgdGhlIHNwZWNpZmllZCB0eXBlLgorICovCitzdGF0aWMgdm9pZAorSnNv bkl0ZW1Gcm9tRGF0dW0oRGF0dW0gdmFsLCBPaWQgdHlwaWQsIGludDMyIHR5cG1vZCwgSnNvbmJW YWx1ZSAqcmVzKQoreworCXN3aXRjaCAodHlwaWQpCisJeworCQljYXNlIEJPT0xPSUQ6CisJCQly ZXMtPnR5cGUgPSBqYnZCb29sOworCQkJcmVzLT52YWwuYm9vbGVhbiA9IERhdHVtR2V0Qm9vbCh2 YWwpOworCQkJYnJlYWs7CisJCWNhc2UgTlVNRVJJQ09JRDoKKwkJCUpzb25iVmFsdWVJbml0TnVt ZXJpY0RhdHVtKHJlcywgdmFsKTsKKwkJCWJyZWFrOworCQljYXNlIElOVDJPSUQ6CisJCQlKc29u YlZhbHVlSW5pdE51bWVyaWNEYXR1bShyZXMsIERpcmVjdEZ1bmN0aW9uQ2FsbDEoaW50Ml9udW1l cmljLCB2YWwpKTsKKwkJCWJyZWFrOworCQljYXNlIElOVDRPSUQ6CisJCQlKc29uYlZhbHVlSW5p dE51bWVyaWNEYXR1bShyZXMsIERpcmVjdEZ1bmN0aW9uQ2FsbDEoaW50NF9udW1lcmljLCB2YWwp KTsKKwkJCWJyZWFrOworCQljYXNlIElOVDhPSUQ6CisJCQlKc29uYlZhbHVlSW5pdE51bWVyaWNE YXR1bShyZXMsIERpcmVjdEZ1bmN0aW9uQ2FsbDEoaW50OF9udW1lcmljLCB2YWwpKTsKKwkJCWJy ZWFrOworCQljYXNlIEZMT0FUNE9JRDoKKwkJCUpzb25iVmFsdWVJbml0TnVtZXJpY0RhdHVtKHJl cywgRGlyZWN0RnVuY3Rpb25DYWxsMShmbG9hdDRfbnVtZXJpYywgdmFsKSk7CisJCQlicmVhazsK KwkJY2FzZSBGTE9BVDhPSUQ6CisJCQlKc29uYlZhbHVlSW5pdE51bWVyaWNEYXR1bShyZXMsIERp cmVjdEZ1bmN0aW9uQ2FsbDEoZmxvYXQ4X251bWVyaWMsIHZhbCkpOworCQkJYnJlYWs7CisJCWNh c2UgVEVYVE9JRDoKKwkJY2FzZSBWQVJDSEFST0lEOgorCQkJcmVzLT50eXBlID0gamJ2U3RyaW5n OworCQkJcmVzLT52YWwuc3RyaW5nLnZhbCA9IFZBUkRBVEFfQU5ZKHZhbCk7CisJCQlyZXMtPnZh bC5zdHJpbmcubGVuID0gVkFSU0laRV9BTllfRVhIRFIodmFsKTsKKwkJCWJyZWFrOworCQljYXNl IERBVEVPSUQ6CisJCWNhc2UgVElNRU9JRDoKKwkJY2FzZSBUSU1FVFpPSUQ6CisJCWNhc2UgVElN RVNUQU1QT0lEOgorCQljYXNlIFRJTUVTVEFNUFRaT0lEOgorCQkJcmVzLT50eXBlID0gamJ2RGF0 ZXRpbWU7CisJCQlyZXMtPnZhbC5kYXRldGltZS52YWx1ZSA9IHZhbDsKKwkJCXJlcy0+dmFsLmRh dGV0aW1lLnR5cGlkID0gdHlwaWQ7CisJCQlyZXMtPnZhbC5kYXRldGltZS50eXBtb2QgPSB0eXBt b2Q7CisJCQlyZXMtPnZhbC5kYXRldGltZS50eiA9IDA7CisJCQlicmVhazsKKwkJY2FzZSBKU09O Qk9JRDoKKwkJCXsKKwkJCQlKc29uYlZhbHVlICpqYnYgPSByZXM7CisJCQkJSnNvbmIJICAgKmpi ID0gRGF0dW1HZXRKc29uYlAodmFsKTsKKworCQkJCWlmIChKc29uQ29udGFpbmVySXNTY2FsYXIo JmpiLT5yb290KSkKKwkJCQl7CisJCQkJCWJvb2wJCXJlc3VsdCBQR19VU0VEX0ZPUl9BU1NFUlRT X09OTFk7CisKKwkJCQkJcmVzdWx0ID0gSnNvbmJFeHRyYWN0U2NhbGFyKCZqYi0+cm9vdCwgamJ2 KTsKKwkJCQkJQXNzZXJ0KHJlc3VsdCk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQkJSnNvbmJJbml0 QmluYXJ5KGpidiwgamIpOworCQkJCWJyZWFrOworCQkJfQorCQljYXNlIEpTT05PSUQ6CisJCQl7 CisJCQkJdGV4dAkgICAqdHh0ID0gRGF0dW1HZXRUZXh0UCh2YWwpOworCQkJCWNoYXIJICAgKnN0 ciA9IHRleHRfdG9fY3N0cmluZyh0eHQpOworCQkJCUpzb25iCSAgICpqYjsKKworCQkJCWpiID0g RGF0dW1HZXRKc29uYlAoRGlyZWN0RnVuY3Rpb25DYWxsMShqc29uYl9pbiwKKwkJCQkJCQkJCQkJ CQkJQ1N0cmluZ0dldERhdHVtKHN0cikpKTsKKwkJCQlwZnJlZShzdHIpOworCisJCQkJSnNvbkl0 ZW1Gcm9tRGF0dW0oSnNvbmJQR2V0RGF0dW0oamIpLCBKU09OQk9JRCwgLTEsIHJlcyk7CisJCQkJ YnJlYWs7CisJCQl9CisJCWRlZmF1bHQ6CisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQllcnJjb2Rl KEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQllcnJtc2coImNvdWxkIG5v dCBjb252ZXJ0IHZhbHVlIG9mIHR5cGUgJXMgdG8ganNvbnBhdGgiLAorCQkJCQkJICAgZm9ybWF0 X3R5cGVfYmUodHlwaWQpKSk7CisJfQorfQorCisvKiBJbml0aWFsaXplIG51bWVyaWMgdmFsdWUg ZnJvbSB0aGUgZ2l2ZW4gZGF0dW0gKi8KK3N0YXRpYyB2b2lkCitKc29uYlZhbHVlSW5pdE51bWVy aWNEYXR1bShKc29uYlZhbHVlICpqYnYsIERhdHVtIG51bSkKK3sKKwlqYnYtPnR5cGUgPSBqYnZO dW1lcmljOworCWpidi0+dmFsLm51bWVyaWMgPSBEYXR1bUdldE51bWVyaWMobnVtKTsKK30KKwog LyoKICAqIEdldCB0aGUgdmFsdWUgb2YgdmFyaWFibGUgcGFzc2VkIHRvIGpzb25wYXRoIGV4ZWN1 dG9yCiAgKi8KQEAgLTM1OTYsMyArMzc1MSwxNzAgQEAgY29tcGFyZURhdGV0aW1lKERhdHVtIHZh bDEsIE9pZCB0eXBpZDEsIERhdHVtIHZhbDIsIE9pZCB0eXBpZDIsCiAKIAlyZXR1cm4gRGF0dW1H ZXRJbnQzMihEaXJlY3RGdW5jdGlvbkNhbGwyKGNtcGZ1bmMsIHZhbDEsIHZhbDIpKTsKIH0KKwor LyoKKyAqIEV4ZWN1dG9yLWNhbGxhYmxlIEpTT05fRVhJU1RTIGltcGxlbWVudGF0aW9uCisgKgor ICogUmV0dXJucyBOVUxMIGluc3RlYWQgb2YgdGhyb3dpbmcgZXJyb3JzIGlmICdlcnJvcicgaXMg bm90IE5VTEwsIHNldHRpbmcKKyAqICplcnJvciB0byB0cnVlLgorICovCitib29sCitKc29uUGF0 aEV4aXN0cyhEYXR1bSBqYiwgSnNvblBhdGggKmpwLCBib29sICplcnJvciwgTGlzdCAqdmFycykK K3sKKwlKc29uUGF0aEV4ZWNSZXN1bHQgcmVzOworCisJcmVzID0gZXhlY3V0ZUpzb25QYXRoKGpw LCB2YXJzLAorCQkJCQkJICBHZXRKc29uUGF0aFZhciwgQ291bnRKc29uUGF0aFZhcnMsCisJCQkJ CQkgIERhdHVtR2V0SnNvbmJQKGpiKSwgIWVycm9yLCBOVUxMLCB0cnVlKTsKKworCUFzc2VydChl cnJvciB8fCAhanBlcklzRXJyb3IocmVzKSk7CisKKwlpZiAoZXJyb3IgJiYganBlcklzRXJyb3Io cmVzKSkKKwkJKmVycm9yID0gdHJ1ZTsKKworCXJldHVybiByZXMgPT0ganBlck9rOworfQorCisv KgorICogRXhlY3V0b3ItY2FsbGFibGUgSlNPTl9RVUVSWSBpbXBsZW1lbnRhdGlvbgorICoKKyAq IFJldHVybnMgTlVMTCBpbnN0ZWFkIG9mIHRocm93aW5nIGVycm9ycyBpZiAnZXJyb3InIGlzIG5v dCBOVUxMLCBzZXR0aW5nCisgKiAqZXJyb3IgdG8gdHJ1ZS4gICplbXB0eSBpcyBzZXQgdG8gdHJ1 ZSBpZiBubyBtYXRjaCBpcyBmb3VuZC4KKyAqLworRGF0dW0KK0pzb25QYXRoUXVlcnkoRGF0dW0g amIsIEpzb25QYXRoICpqcCwgSnNvbldyYXBwZXIgd3JhcHBlciwgYm9vbCAqZW1wdHksCisJCQkg IGJvb2wgKmVycm9yLCBMaXN0ICp2YXJzKQoreworCUpzb25iVmFsdWUgKnNpbmdsZXRvbjsKKwli b29sCQl3cmFwOworCUpzb25WYWx1ZUxpc3QgZm91bmQgPSB7MH07CisJSnNvblBhdGhFeGVjUmVz dWx0IHJlczsKKwlpbnQJCQljb3VudDsKKworCXJlcyA9IGV4ZWN1dGVKc29uUGF0aChqcCwgdmFy cywKKwkJCQkJCSAgR2V0SnNvblBhdGhWYXIsIENvdW50SnNvblBhdGhWYXJzLAorCQkJCQkJICBE YXR1bUdldEpzb25iUChqYiksICFlcnJvciwgJmZvdW5kLCB0cnVlKTsKKwlBc3NlcnQoZXJyb3Ig fHwgIWpwZXJJc0Vycm9yKHJlcykpOworCWlmIChlcnJvciAmJiBqcGVySXNFcnJvcihyZXMpKQor CXsKKwkJKmVycm9yID0gdHJ1ZTsKKwkJKmVtcHR5ID0gZmFsc2U7CisJCXJldHVybiAoRGF0dW0p IDA7CisJfQorCisJLyogV1JBUCBvciBub3Q/ICovCisJY291bnQgPSBKc29uVmFsdWVMaXN0TGVu Z3RoKCZmb3VuZCk7CisJc2luZ2xldG9uID0gY291bnQgPiAwID8gSnNvblZhbHVlTGlzdEhlYWQo JmZvdW5kKSA6IE5VTEw7CisJaWYgKHNpbmdsZXRvbiA9PSBOVUxMKQorCQl3cmFwID0gZmFsc2U7 CisJZWxzZSBpZiAod3JhcHBlciA9PSBKU1dfTk9ORSB8fCB3cmFwcGVyID09IEpTV19VTlNQRUMp CisJCXdyYXAgPSBmYWxzZTsKKwllbHNlIGlmICh3cmFwcGVyID09IEpTV19VTkNPTkRJVElPTkFM KQorCQl3cmFwID0gdHJ1ZTsKKwllbHNlIGlmICh3cmFwcGVyID09IEpTV19DT05ESVRJT05BTCkK KwkJd3JhcCA9IGNvdW50ID4gMSB8fAorCQkJSXNBSnNvbmJTY2FsYXIoc2luZ2xldG9uKSB8fAor CQkJKHNpbmdsZXRvbi0+dHlwZSA9PSBqYnZCaW5hcnkgJiYKKwkJCSBKc29uQ29udGFpbmVySXNT Y2FsYXIoc2luZ2xldG9uLT52YWwuYmluYXJ5LmRhdGEpKTsKKwllbHNlCisJeworCQllbG9nKEVS Uk9SLCAidW5yZWNvZ25pemVkIGpzb24gd3JhcHBlciAlZCIsIHdyYXBwZXIpOworCQl3cmFwID0g ZmFsc2U7CisJfQorCisJaWYgKHdyYXApCisJCXJldHVybiBKc29uYlBHZXREYXR1bShKc29uYlZh bHVlVG9Kc29uYih3cmFwSXRlbXNJbkFycmF5KCZmb3VuZCkpKTsKKworCS8qIE5vIHdyYXBwaW5n IG1lYW5zIG9ubHkgb25lIGl0ZW0gaXMgZXhwZWN0ZWQuICovCisJaWYgKGNvdW50ID4gMSkKKwl7 CisJCWlmIChlcnJvcikKKwkJeworCQkJKmVycm9yID0gdHJ1ZTsKKwkJCXJldHVybiAoRGF0dW0p IDA7CisJCX0KKworCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfTU9SRV9U SEFOX09ORV9TUUxfSlNPTl9JVEVNKSwKKwkJCQkgZXJybXNnKCJKU09OIHBhdGggZXhwcmVzc2lv biBpbiBKU09OX1FVRVJZIHNob3VsZCByZXR1cm4gc2luZ2xldG9uIGl0ZW0gd2l0aG91dCB3cmFw cGVyIiksCisJCQkJIGVycmhpbnQoIlVzZSBXSVRIIFdSQVBQRVIgY2xhdXNlIHRvIHdyYXAgU1FM L0pTT04gaXRlbSBzZXF1ZW5jZSBpbnRvIGFycmF5LiIpKSk7CisJfQorCisJaWYgKHNpbmdsZXRv bikKKwkJcmV0dXJuIEpzb25iUEdldERhdHVtKEpzb25iVmFsdWVUb0pzb25iKHNpbmdsZXRvbikp OworCisJKmVtcHR5ID0gdHJ1ZTsKKwlyZXR1cm4gUG9pbnRlckdldERhdHVtKE5VTEwpOworfQor CisvKgorICogRXhlY3V0b3ItY2FsbGFibGUgSlNPTl9WQUxVRSBpbXBsZW1lbnRhdGlvbgorICoK KyAqIFJldHVybnMgTlVMTCBpbnN0ZWFkIG9mIHRocm93aW5nIGVycm9ycyBpZiAnZXJyb3InIGlz IG5vdCBOVUxMLCBzZXR0aW5nCisgKiAqZXJyb3IgdG8gdHJ1ZS4gICplbXB0eSBpcyBzZXQgdG8g dHJ1ZSBpZiBubyBtYXRjaCBpcyBmb3VuZC4KKyAqLworSnNvbmJWYWx1ZSAqCitKc29uUGF0aFZh bHVlKERhdHVtIGpiLCBKc29uUGF0aCAqanAsIGJvb2wgKmVtcHR5LCBib29sICplcnJvciwgTGlz dCAqdmFycykKK3sKKwlKc29uYlZhbHVlICpyZXM7CisJSnNvblZhbHVlTGlzdCBmb3VuZCA9IHsw fTsKKwlKc29uUGF0aEV4ZWNSZXN1bHQganBlciBQR19VU0VEX0ZPUl9BU1NFUlRTX09OTFk7CisJ aW50CQkJY291bnQ7CisKKwlqcGVyID0gZXhlY3V0ZUpzb25QYXRoKGpwLCB2YXJzLCBHZXRKc29u UGF0aFZhciwgQ291bnRKc29uUGF0aFZhcnMsCisJCQkJCQkgICBEYXR1bUdldEpzb25iUChqYiks CisJCQkJCQkgICAhZXJyb3IsICZmb3VuZCwgdHJ1ZSk7CisKKwlBc3NlcnQoZXJyb3IgfHwgIWpw ZXJJc0Vycm9yKGpwZXIpKTsKKworCWlmIChlcnJvciAmJiBqcGVySXNFcnJvcihqcGVyKSkKKwl7 CisJCSplcnJvciA9IHRydWU7CisJCSplbXB0eSA9IGZhbHNlOworCQlyZXR1cm4gTlVMTDsKKwl9 CisKKwljb3VudCA9IEpzb25WYWx1ZUxpc3RMZW5ndGgoJmZvdW5kKTsKKworCSplbXB0eSA9IChj b3VudCA9PSAwKTsKKworCWlmICgqZW1wdHkpCisJCXJldHVybiBOVUxMOworCisJLyogSlNPTl9W QUxVRSBleHBlY3RzIHRvIGdldCBvbmx5IHNpbmdsZXRvbnMuICovCisJaWYgKGNvdW50ID4gMSkK Kwl7CisJCWlmIChlcnJvcikKKwkJeworCQkJKmVycm9yID0gdHJ1ZTsKKwkJCXJldHVybiBOVUxM OworCQl9CisKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX01PUkVfVEhB Tl9PTkVfU1FMX0pTT05fSVRFTSksCisJCQkJIGVycm1zZygiSlNPTiBwYXRoIGV4cHJlc3Npb24g aW4gSlNPTl9WQUxVRSBzaG91bGQgcmV0dXJuIHNpbmdsZXRvbiBzY2FsYXIgaXRlbSIpKSk7CisJ fQorCisJcmVzID0gSnNvblZhbHVlTGlzdEhlYWQoJmZvdW5kKTsKKwlpZiAocmVzLT50eXBlID09 IGpidkJpbmFyeSAmJiBKc29uQ29udGFpbmVySXNTY2FsYXIocmVzLT52YWwuYmluYXJ5LmRhdGEp KQorCQlKc29uYkV4dHJhY3RTY2FsYXIocmVzLT52YWwuYmluYXJ5LmRhdGEsIHJlcyk7CisKKwkv KiBKU09OX1ZBTFVFIGV4cGVjdHMgdG8gZ2V0IG9ubHkgc2NhbGFycy4gKi8KKwlpZiAoIUlzQUpz b25iU2NhbGFyKHJlcykpCisJeworCQlpZiAoZXJyb3IpCisJCXsKKwkJCSplcnJvciA9IHRydWU7 CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUo RVJSQ09ERV9TUUxfSlNPTl9TQ0FMQVJfUkVRVUlSRUQpLAorCQkJCSBlcnJtc2coIkpTT04gcGF0 aCBleHByZXNzaW9uIGluIEpTT05fVkFMVUUgc2hvdWxkIHJldHVybiBzaW5nbGV0b24gc2NhbGFy IGl0ZW0iKSkpOworCX0KKworCWlmIChyZXMtPnR5cGUgPT0gamJ2TnVsbCkKKwkJcmV0dXJuIE5V TEw7CisKKwlyZXR1cm4gcmVzOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L3J1bGV1dGlscy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jCmluZGV4IGYy ODkzZDQwODYuLjA1MzljMjQyNGYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9y dWxldXRpbHMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKQEAgLTQ3 NCw2ICs0NzQsOCBAQCBzdGF0aWMgdm9pZCBnZXRfY29uc3RfZXhwcihDb25zdCAqY29uc3R2YWws IGRlcGFyc2VfY29udGV4dCAqY29udGV4dCwKIAkJCQkJCSAgIGludCBzaG93dHlwZSk7CiBzdGF0 aWMgdm9pZCBnZXRfY29uc3RfY29sbGF0aW9uKENvbnN0ICpjb25zdHZhbCwgZGVwYXJzZV9jb250 ZXh0ICpjb250ZXh0KTsKIHN0YXRpYyB2b2lkIGdldF9qc29uX2Zvcm1hdChKc29uRm9ybWF0ICpm b3JtYXQsIFN0cmluZ0luZm8gYnVmKTsKK3N0YXRpYyB2b2lkIGdldF9qc29uX3JldHVybmluZyhK c29uUmV0dXJuaW5nICpyZXR1cm5pbmcsIFN0cmluZ0luZm8gYnVmLAorCQkJCQkJCSAgIGJvb2wg anNvbl9mb3JtYXRfYnlfZGVmYXVsdCk7CiBzdGF0aWMgdm9pZCBnZXRfanNvbl9jb25zdHJ1Y3Rv cihKc29uQ29uc3RydWN0b3JFeHByICpjdG9yLAogCQkJCQkJCQkgZGVwYXJzZV9jb250ZXh0ICpj b250ZXh0LCBib29sIHNob3dpbXBsaWNpdCk7CiBzdGF0aWMgdm9pZCBnZXRfanNvbl9jb25zdHJ1 Y3Rvcl9vcHRpb25zKEpzb25Db25zdHJ1Y3RvckV4cHIgKmN0b3IsCkBAIC01MTYsNiArNTE4LDgg QEAgc3RhdGljIGNoYXIgKmdlbmVyYXRlX3F1YWxpZmllZF90eXBlX25hbWUoT2lkIHR5cGlkKTsK IHN0YXRpYyB0ZXh0ICpzdHJpbmdfdG9fdGV4dChjaGFyICpzdHIpOwogc3RhdGljIGNoYXIgKmZs YXR0ZW5fcmVsb3B0aW9ucyhPaWQgcmVsaWQpOwogc3RhdGljIHZvaWQgZ2V0X3JlbG9wdGlvbnMo U3RyaW5nSW5mbyBidWYsIERhdHVtIHJlbG9wdGlvbnMpOworc3RhdGljIHZvaWQgZ2V0X2pzb25f cGF0aF9zcGVjKE5vZGUgKnBhdGhfc3BlYywgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0LAorCQkJ CQkJCSAgIGJvb2wgc2hvd2ltcGxpY2l0KTsKIAogI2RlZmluZSBvbmx5X21hcmtlcihydGUpICAo KHJ0ZSktPmluaCA/ICIiIDogIk9OTFkgIikKIApAQCAtODMwOCw2ICs4MzEyLDcgQEAgaXNTaW1w bGVOb2RlKE5vZGUgKm5vZGUsIE5vZGUgKnBhcmVudE5vZGUsIGludCBwcmV0dHlGbGFncykKIAkJ Y2FzZSBUX01lcmdlU3VwcG9ydEZ1bmM6CiAJCWNhc2UgVF9GdW5jRXhwcjoKIAkJY2FzZSBUX0pz b25Db25zdHJ1Y3RvckV4cHI6CisJCWNhc2UgVF9Kc29uRXhwcjoKIAkJCS8qIGZ1bmN0aW9uLWxp a2U6IG5hbWUoLi4pIG9yIG5hbWVbLi5dICovCiAJCQlyZXR1cm4gdHJ1ZTsKIApAQCAtODQ3OSw2 ICs4NDg0LDcgQEAgaXNTaW1wbGVOb2RlKE5vZGUgKm5vZGUsIE5vZGUgKnBhcmVudE5vZGUsIGlu dCBwcmV0dHlGbGFncykKIAkJCQljYXNlIFRfR3JvdXBpbmdGdW5jOgkvKiBvd24gcGFyZW50aGVz ZXMgKi8KIAkJCQljYXNlIFRfV2luZG93RnVuYzoJLyogb3duIHBhcmVudGhlc2VzICovCiAJCQkJ Y2FzZSBUX0Nhc2VFeHByOgkvKiBvdGhlciBzZXBhcmF0b3JzICovCisJCQkJY2FzZSBUX0pzb25F eHByOgkvKiBvd24gcGFyZW50aGVzZXMgKi8KIAkJCQkJcmV0dXJuIHRydWU7CiAJCQkJZGVmYXVs dDoKIAkJCQkJcmV0dXJuIGZhbHNlOwpAQCAtODU5NCw2ICs4NjAwLDY0IEBAIGdldF9ydWxlX2V4 cHJfcGFyZW4oTm9kZSAqbm9kZSwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0LAogCQlhcHBlbmRT dHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcpJyk7CiB9CiAKK3N0YXRpYyB2b2lkCitnZXRf anNvbl9iZWhhdmlvcihKc29uQmVoYXZpb3IgKmJlaGF2aW9yLCBkZXBhcnNlX2NvbnRleHQgKmNv bnRleHQsCisJCQkJICBjb25zdCBjaGFyICpvbikKK3sKKwkvKgorCSAqIFRoZSBvcmRlciBvZiBh cnJheSBlbGVtZW50cyBtdXN0IGNvcnJlc3BvbmQgdG8gdGhlIG9yZGVyIG9mCisJICogSnNvbkJl aGF2aW9yVHlwZSBtZW1iZXJzLgorCSAqLworCWNvbnN0IGNoYXIgKmJlaGF2aW9yX25hbWVzW10g PQorCXsKKwkJIiBOVUxMIiwKKwkJIiBFUlJPUiIsCisJCSIgRU1QVFkiLAorCQkiIFRSVUUiLAor CQkiIEZBTFNFIiwKKwkJIiBVTktOT1dOIiwKKwkJIiBFTVBUWSBBUlJBWSIsCisJCSIgRU1QVFkg T0JKRUNUIiwKKwkJIiBERUZBVUxUICIKKwl9OworCisJaWYgKChpbnQpIGJlaGF2aW9yLT5idHlw ZSA8IDAgfHwgYmVoYXZpb3ItPmJ0eXBlID49IGxlbmd0aG9mKGJlaGF2aW9yX25hbWVzKSkKKwkJ ZWxvZyhFUlJPUiwgImludmFsaWQganNvbiBiZWhhdmlvciB0eXBlOiAlZCIsIGJlaGF2aW9yLT5i dHlwZSk7CisKKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGNvbnRleHQtPmJ1ZiwgYmVoYXZpb3Jf bmFtZXNbYmVoYXZpb3ItPmJ0eXBlXSk7CisKKwlpZiAoYmVoYXZpb3ItPmJ0eXBlID09IEpTT05f QkVIQVZJT1JfREVGQVVMVCkKKwkJZ2V0X3J1bGVfZXhwcihiZWhhdmlvci0+ZXhwciwgY29udGV4 dCwgZmFsc2UpOworCisJYXBwZW5kU3RyaW5nSW5mbyhjb250ZXh0LT5idWYsICIgT04gJXMiLCBv bik7Cit9CisKKy8qCisgKiBnZXRfanNvbl9leHByX29wdGlvbnMKKyAqCisgKiBQYXJzZSBiYWNr IGNvbW1vbiBvcHRpb25zIGZvciBKU09OX1FVRVJZLCBKU09OX1ZBTFVFLCBKU09OX0VYSVNUUy4K KyAqLworc3RhdGljIHZvaWQKK2dldF9qc29uX2V4cHJfb3B0aW9ucyhKc29uRXhwciAqanNleHBy LCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQsCisJCQkJCSAgSnNvbkJlaGF2aW9yVHlwZSBkZWZh dWx0X2JlaGF2aW9yKQoreworCWlmIChqc2V4cHItPm9wID09IEpTT05fUVVFUllfT1ApCisJewor CQlpZiAoanNleHByLT53cmFwcGVyID09IEpTV19DT05ESVRJT05BTCkKKwkJCWFwcGVuZFN0cmlu Z0luZm8oY29udGV4dC0+YnVmLCAiIFdJVEggQ09ORElUSU9OQUwgV1JBUFBFUiIpOworCQllbHNl IGlmIChqc2V4cHItPndyYXBwZXIgPT0gSlNXX1VOQ09ORElUSU9OQUwpCisJCQlhcHBlbmRTdHJp bmdJbmZvKGNvbnRleHQtPmJ1ZiwgIiBXSVRIIFVOQ09ORElUSU9OQUwgV1JBUFBFUiIpOworCisJ CWlmIChqc2V4cHItPm9taXRfcXVvdGVzKQorCQkJYXBwZW5kU3RyaW5nSW5mbyhjb250ZXh0LT5i dWYsICIgT01JVCBRVU9URVMiKTsKKwl9CisKKwlpZiAoanNleHByLT5vbl9lbXB0eSAmJiBqc2V4 cHItPm9uX2VtcHR5LT5idHlwZSAhPSBkZWZhdWx0X2JlaGF2aW9yKQorCQlnZXRfanNvbl9iZWhh dmlvcihqc2V4cHItPm9uX2VtcHR5LCBjb250ZXh0LCAiRU1QVFkiKTsKKworCWlmIChqc2V4cHIt Pm9uX2Vycm9yICYmIGpzZXhwci0+b25fZXJyb3ItPmJ0eXBlICE9IGRlZmF1bHRfYmVoYXZpb3Ip CisJCWdldF9qc29uX2JlaGF2aW9yKGpzZXhwci0+b25fZXJyb3IsIGNvbnRleHQsICJFUlJPUiIp OworfQogCiAvKiAtLS0tLS0tLS0tCiAgKiBnZXRfcnVsZV9leHByCQkJLSBQYXJzZSBiYWNrIGFu IGV4cHJlc3Npb24KQEAgLTk3NTcsNiArOTgyMSw3IEBAIGdldF9ydWxlX2V4cHIoTm9kZSAqbm9k ZSwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0LAogCQkJfQogCQkJYnJlYWs7CiAKKwogCQljYXNl IFRfSnNvblZhbHVlRXhwcjoKIAkJCXsKIAkJCQlKc29uVmFsdWVFeHByICpqdmUgPSAoSnNvblZh bHVlRXhwciAqKSBub2RlOwpAQCAtOTgwNiw2ICs5ODcxLDY0IEBAIGdldF9ydWxlX2V4cHIoTm9k ZSAqbm9kZSwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0LAogCQkJfQogCQkJYnJlYWs7CiAKKwkJ Y2FzZSBUX0pzb25FeHByOgorCQkJeworCQkJCUpzb25FeHByICAgKmpleHByID0gKEpzb25FeHBy ICopIG5vZGU7CisKKwkJCQlzd2l0Y2ggKGpleHByLT5vcCkKKwkJCQl7CisJCQkJCWNhc2UgSlNP Tl9FWElTVFNfT1A6CisJCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIkpTT05fRVhJ U1RTKCIpOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgSlNPTl9RVUVSWV9PUDoKKwkJCQkJCWFw cGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiSlNPTl9RVUVSWSgiKTsKKwkJCQkJCWJyZWFrOwor CQkJCQljYXNlIEpTT05fVkFMVUVfT1A6CisJCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1 ZiwgIkpTT05fVkFMVUUoIik7CisJCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCQlnZXRfcnVsZV9l eHByKGpleHByLT5mb3JtYXR0ZWRfZXhwciwgY29udGV4dCwgc2hvd2ltcGxpY2l0KTsKKworCQkJ CWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiLCAiKTsKKworCQkJCWdldF9qc29uX3BhdGhf c3BlYyhqZXhwci0+cGF0aF9zcGVjLCBjb250ZXh0LCBzaG93aW1wbGljaXQpOworCisJCQkJaWYg KGpleHByLT5wYXNzaW5nX3ZhbHVlcykKKwkJCQl7CisJCQkJCUxpc3RDZWxsICAgKmxjMSwKKwkJ CQkJCQkgICAqbGMyOworCQkJCQlib29sCQluZWVkY29tbWEgPSBmYWxzZTsKKworCQkJCQlhcHBl bmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIiBQQVNTSU5HICIpOworCisJCQkJCWZvcmJvdGgobGMx LCBqZXhwci0+cGFzc2luZ19uYW1lcywKKwkJCQkJCQlsYzIsIGpleHByLT5wYXNzaW5nX3ZhbHVl cykKKwkJCQkJeworCQkJCQkJaWYgKG5lZWRjb21tYSkKKwkJCQkJCQlhcHBlbmRTdHJpbmdJbmZv U3RyaW5nKGJ1ZiwgIiwgIik7CisJCQkJCQluZWVkY29tbWEgPSB0cnVlOworCisJCQkJCQlnZXRf cnVsZV9leHByKChOb2RlICopIGxmaXJzdChsYzIpLCBjb250ZXh0LCBzaG93aW1wbGljaXQpOwor CQkJCQkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIgQVMgJXMiLAorCQkJCQkJCQkJCSAoKFN0cmlu ZyAqKSBsZmlyc3Rfbm9kZShTdHJpbmcsIGxjMSkpLT5zdmFsKTsKKwkJCQkJfQorCQkJCX0KKwor CQkJCWlmIChqZXhwci0+b3AgIT0gSlNPTl9FWElTVFNfT1AgfHwKKwkJCQkJamV4cHItPnJldHVy bmluZy0+dHlwaWQgIT0gQk9PTE9JRCkKKwkJCQkJZ2V0X2pzb25fcmV0dXJuaW5nKGpleHByLT5y ZXR1cm5pbmcsIGNvbnRleHQtPmJ1ZiwKKwkJCQkJCQkJCSAgIGpleHByLT5vcCA9PSBKU09OX1FV RVJZX09QKTsKKworCQkJCWdldF9qc29uX2V4cHJfb3B0aW9ucyhqZXhwciwgY29udGV4dCwKKwkJ CQkJCQkJCSAgamV4cHItPm9wICE9IEpTT05fRVhJU1RTX09QID8KKwkJCQkJCQkJCSAgSlNPTl9C RUhBVklPUl9OVUxMIDoKKwkJCQkJCQkJCSAgSlNPTl9CRUhBVklPUl9GQUxTRSk7CisKKwkJCQlh cHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIikiKTsKKwkJCX0KKwkJCWJyZWFrOworCiAJCWNh c2UgVF9MaXN0OgogCQkJewogCQkJCWNoYXIJICAgKnNlcDsKQEAgLTk5MjksNiArMTAwNTIsNyBA QCBsb29rc19saWtlX2Z1bmN0aW9uKE5vZGUgKm5vZGUpCiAJCWNhc2UgVF9NaW5NYXhFeHByOgog CQljYXNlIFRfU1FMVmFsdWVGdW5jdGlvbjoKIAkJY2FzZSBUX1htbEV4cHI6CisJCWNhc2UgVF9K c29uRXhwcjoKIAkJCS8qIHRoZXNlIGFyZSBhbGwgYWNjZXB0ZWQgYnkgZnVuY19leHByX2NvbW1v bl9zdWJleHByICovCiAJCQlyZXR1cm4gdHJ1ZTsKIAkJZGVmYXVsdDoKQEAgLTEwNzk4LDYgKzEw OTIyLDE4IEBAIGdldF9jb25zdF9jb2xsYXRpb24oQ29uc3QgKmNvbnN0dmFsLCBkZXBhcnNlX2Nv bnRleHQgKmNvbnRleHQpCiAJfQogfQogCisvKgorICogZ2V0X2pzb25fcGF0aF9zcGVjCQktIFBh cnNlIGJhY2sgYSBKU09OIHBhdGggc3BlY2lmaWNhdGlvbgorICovCitzdGF0aWMgdm9pZAorZ2V0 X2pzb25fcGF0aF9zcGVjKE5vZGUgKnBhdGhfc3BlYywgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0 LCBib29sIHNob3dpbXBsaWNpdCkKK3sKKwlpZiAoSXNBKHBhdGhfc3BlYywgQ29uc3QpKQorCQln ZXRfY29uc3RfZXhwcigoQ29uc3QgKikgcGF0aF9zcGVjLCBjb250ZXh0LCAtMSk7CisJZWxzZQor CQlnZXRfcnVsZV9leHByKHBhdGhfc3BlYywgY29udGV4dCwgc2hvd2ltcGxpY2l0KTsKK30KKwog LyoKICAqIGdldF9qc29uX2Zvcm1hdAkJCS0gUGFyc2UgYmFjayBhIEpzb25Gb3JtYXQgbm9kZQog ICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjRXhwci5oIGIvc3JjL2lu Y2x1ZGUvZXhlY3V0b3IvZXhlY0V4cHIuaAppbmRleCA4OTUzZDc2NzM4Li40YmJmNGFjZGY2IDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjRXhwci5oCisrKyBiL3NyYy9pbmNs dWRlL2V4ZWN1dG9yL2V4ZWNFeHByLmgKQEAgLTI0MCw2ICsyNDAsOSBAQCB0eXBlZGVmIGVudW0g RXhwckV2YWxPcAogCUVFT1BfWE1MRVhQUiwKIAlFRU9QX0pTT05fQ09OU1RSVUNUT1IsCiAJRUVP UF9JU19KU09OLAorCUVFT1BfSlNPTkVYUFJfUEFUSCwKKwlFRU9QX0pTT05FWFBSX0NPRVJDSU9O LAorCUVFT1BfSlNPTkVYUFJfQ09FUkNJT05fRklOSVNILAogCUVFT1BfQUdHUkVGLAogCUVFT1Bf R1JPVVBJTkdfRlVOQywKIAlFRU9QX1dJTkRPV19GVU5DLApAQCAtNjkzLDYgKzY5NiwyMSBAQCB0 eXBlZGVmIHN0cnVjdCBFeHByRXZhbFN0ZXAKIAkJCUpzb25Jc1ByZWRpY2F0ZSAqcHJlZDsJLyog b3JpZ2luYWwgZXhwcmVzc2lvbiBub2RlICovCiAJCX0JCQlpc19qc29uOwogCisJCS8qIGZvciBF RU9QX0pTT05FWFBSX1BBVEggKi8KKwkJc3RydWN0CisJCXsKKwkJCXN0cnVjdCBKc29uRXhwclN0 YXRlICpqc2VzdGF0ZTsKKwkJfQkJCWpzb25leHByOworCisJCS8qIGZvciBFRU9QX0pTT05FWFBS X0NPRVJDSU9OICovCisJCXN0cnVjdAorCQl7CisJCQlKc29uQ29lcmNpb24gKmNvZXJjaW9uOwor CQkJRm1nckluZm8gICAqaW5wdXRfZmluZm87CisJCQlPaWQJCQl0eXBpb3BhcmFtOworCQkJdm9p ZAkgICAqanNvbl9wb3B1bGF0ZV90eXBlX2NhY2hlOworCQkJRXJyb3JTYXZlQ29udGV4dCAqZXNj b250ZXh0OworCQl9CQkJanNvbmV4cHJfY29lcmNpb247CiAJfQkJCWQ7CiB9IEV4cHJFdmFsU3Rl cDsKIApAQCAtODEwLDYgKzgyOCwxMSBAQCBleHRlcm4gdm9pZCBFeGVjRXZhbFhtbEV4cHIoRXhw clN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCk7CiBleHRlcm4gdm9pZCBFeGVjRXZhbEpz b25Db25zdHJ1Y3RvcihFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAgKm9wLAogCQkJCQkJ CQkJRXhwckNvbnRleHQgKmVjb250ZXh0KTsKIGV4dGVybiB2b2lkIEV4ZWNFdmFsSnNvbklzUHJl ZGljYXRlKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJFdmFsU3RlcCAqb3ApOworZXh0ZXJuIGludAlF eGVjRXZhbEpzb25FeHByUGF0aChFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAgKm9wLAor CQkJCQkJCQkgRXhwckNvbnRleHQgKmVjb250ZXh0KTsKK2V4dGVybiB2b2lkIEV4ZWNFdmFsSnNv bkNvZXJjaW9uKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJFdmFsU3RlcCAqb3AsCisJCQkJCQkJCSBF eHByQ29udGV4dCAqZWNvbnRleHQpOworZXh0ZXJuIHZvaWQgRXhlY0V2YWxKc29uQ29lcmNpb25G aW5pc2goRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCk7CiBleHRlcm4gdm9pZCBF eGVjRXZhbEdyb3VwaW5nRnVuYyhFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAgKm9wKTsK IGV4dGVybiB2b2lkIEV4ZWNFdmFsTWVyZ2VTdXBwb3J0RnVuYyhFeHByU3RhdGUgKnN0YXRlLCBF eHByRXZhbFN0ZXAgKm9wLAogCQkJCQkJCQkJIEV4cHJDb250ZXh0ICplY29udGV4dCk7CmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVz L2V4ZWNub2Rlcy5oCmluZGV4IDkyNTkzNTI2NzIuLmNkMmNlNjNmYTEgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNu b2Rlcy5oCkBAIC0xMDA4LDYgKzEwMDgsODMgQEAgdHlwZWRlZiBzdHJ1Y3QgRG9tYWluQ29uc3Ry YWludFN0YXRlCiAJRXhwclN0YXRlICAqY2hlY2tfZXhwcnN0YXRlOwkvKiBjaGVja19leHByJ3Mg ZXZhbCBzdGF0ZSwgb3IgTlVMTCAqLwogfSBEb21haW5Db25zdHJhaW50U3RhdGU7CiAKKy8qCisg KiBTdGF0ZSBmb3IgSnNvbkV4cHIgZXZhbHVhdGlvbiwgdG9vIGJpZyB0byBpbmxpbmUuCisgKgor ICogVGhpcyBjb250YWlucyB0aGUgaW5mb3JtYXRpb24gZ29pbmcgaW50byBhbmQgY29taW5nIG91 dCBvZiB0aGUKKyAqIEVFT1BfSlNPTkVYUFJfUEFUSCBldmFsIHN0ZXAuCisgKi8KK3R5cGVkZWYg c3RydWN0IEpzb25FeHByU3RhdGUKK3sKKwkvKiBvcmlnaW5hbCBleHByZXNzaW9uIG5vZGUgKi8K KwlKc29uRXhwciAgICpqc2V4cHI7CisKKwkvKiB2YWx1ZS9pc251bGwgZm9yIGZvcm1hdHRlZF9l eHByICovCisJTnVsbGFibGVEYXR1bSBmb3JtYXR0ZWRfZXhwcjsKKworCS8qIHZhbHVlL2lzbnVs bCBmb3IgcGF0aHNwZWMgKi8KKwlOdWxsYWJsZURhdHVtIHBhdGhzcGVjOworCisJLyogSnNvblBh dGhWYXJpYWJsZSBlbnRyaWVzIGZvciBwYXNzaW5nX3ZhbHVlcyAqLworCUxpc3QJICAgKmFyZ3M7 CisKKwkvKgorCSAqIEFkZHJlc3NlcyBvZiBzdGVwcyB0aGF0IGltcGxlbWVudCB0aGUgbm9uLUVS Uk9SIHZhcmlhbnQgb2YgT04gRU1QVFkKKwkgKiBhbmQgT04gRVJST1IgYmVoYXZpb3JzLCByZXNw ZWN0aXZlbHkuCisJICovCisJaW50CQkJanVtcF9lbXB0eTsKKwlpbnQJCQlqdW1wX2Vycm9yOwor CisJLyoKKwkgKiBBZGRyZXNzZXMgb2Ygc3RlcHMgdG8gY29lcmNlIHRoZSByZXN1bHQgdmFsdWUg b2YganNvbnBhdGggZXZhbHVhdGlvbiB0bworCSAqIHRoZSBSRVRVUk5JTkcgdHlwZS4KKwkgKgor CSAqIGp1bXBfZXZhbF9yZXN1bHRfY29lcmNpb24gcG9pbnRzIHRvIHRoZSBzdGVwIHRvIGV2YWx1 YXRlIHRoZSBjb2VyY2lvbgorCSAqIGdpdmVuIGluIEpzb25FeHByLnJlc3VsdF9jb2VyY2lvbi4g IC0xIGlmIG5vIGNvZXJjaW9uIGlzIG5lY2Vzc2FyeS4KKwkgKgorCSAqIE9ubHkgdmFsaWQgZm9y IEpTT05fVkFMVUUsIGV2YWxfaXRlbV9jb2VyY2lvbl9qdW1wcyBpcyBhbiBhcnJheSBvZgorCSAq IG51bV9pdGVtX2NvZXJjaW9ucyBlbGVtZW50cyBlYWNoIGNvbnRhaW5pbmcgYSBzdGVwIGFkZHJl c3MgdG8gY29lcmNlCisJICogYSB2YWx1ZSBvZiBnaXZlbiBKc29uSXRlbVR5cGUgcmV0dXJuZWQg YnkgSnNvblBhdGhWYWx1ZSgpIHRvIHRoZQorCSAqIFJFVFVSTklORyB0eXBlLCBvciAtMSBpZiBu byBjb2VyY2lvbiBpcyBuZWNlc3NhcnkuCisJICogaXRlbV9jb2VyY2lvbl9pc19jYXN0IGlzIGFu IGFycmF5IG9mIGJvb2xlYW4gZmxhZ3Mgb2YgdGhlIHNhbWUgbGVuZ3RoCisJICogdGhhdCBpbmRp Y2F0ZXMgd2hldGhlciBlYWNoIHZhbGlkIHN0ZXAgYWRkcmVzcyBpbiB0aGUKKwkgKiBldmFsX2l0 ZW1fY29lcmNpb25fanVtcHMgYXJyYXkgY29ycmVzcG9uZHMgdG8gYSBjYXN0IGV4cHJlc3Npb24g b3IgYQorCSAqIEpzb25Db2VyY2lvbiBub2RlLgorCSAqLworCWludAkJCWp1bXBfZXZhbF9yZXN1 bHRfY29lcmNpb247CisJaW50CQkJbnVtX2l0ZW1fY29lcmNpb25zOworCWludAkJICAgKmV2YWxf aXRlbV9jb2VyY2lvbl9qdW1wczsKKwlib29sCSAgICppdGVtX2NvZXJjaW9uX2lzX2Nhc3Q7CisK KwkvKgorCSAqIEFkZHJlc3MgdG8ganVtcCB0byB3aGVuIHNraXBwaW5nIGFsbCB0aGUgc3RlcHMg YWZ0ZXIgcGVyZm9ybWluZworCSAqIEV4ZWNFdmFsSnNvbkV4cHJQYXRoKCkgc28gYXMgdG8gcmV0 dXJuIHdoYXRldmVyIHRoZSBKc29uUGF0aCogZnVuY3Rpb24KKwkgKiByZXR1cm5lZCBhcyBpcywg dGhhdCBpcywgaW4gdGhlIGNhc2VzIHdoZXJlIHRoZXJlJ3Mgbm8gZXJyb3IgYW5kIG5vCisJICog Y29lcmNpb24gaXMgbmVjZXNzYXJ5LgorCSAqLworCWludAkJCWp1bXBfZW5kOworCisJLyoKKwkg KiBGb3IgZXJyb3Itc2FmZSBldmFsdWF0aW9uIG9mIGNvZXJjaW9ucy4gIFdoZW4gdGhlIE9OIEVS Uk9SIGJlaGF2aW9yCisJICogaXMgbm90IEVSUk9SLCBhIHBvaW50ZXIgdG8gdGhpcyBpcyBwYXNz ZWQgdG8gRXhlY0luaXRFeHByUmVjKCkgd2hlbgorCSAqIGluaXRpYWxpemluZyB0aGUgY29lcmNp b24gZXhwcmVzc2lvbnMuCisJICovCisJRXJyb3JTYXZlQ29udGV4dCBlc2NvbnRleHQ7CisKKwkv KgorCSAqIE91dHB1dCB2YXJpYWJsZXMgdGhhdCBkcml2ZSB0aGUgRUVPUF9KVU1QX0lGX05PVF9U UlVFIHN0ZXBzIHRoYXQgYXJlCisJICogYWRkZWQgZm9yIE9OIEVSUk9SIGFuZCBPTiBFTVBUWSBl eHByZXNzaW9ucywgaWYgYW55LgorCSAqCisJICogUmVzZXQgZm9yIGVhY2ggZXZhbHVhdGlvbiBv ZiBFRU9QX0pTT05FWFBSX1BBVEguCisJICovCisKKwkvKiBTZXQgdG8gdHJ1ZSBpZiBqc29ucGF0 aCBldmFsdWF0aW9uIGNhdXNlIGFuIGVycm9yLiAgKi8KKwlOdWxsYWJsZURhdHVtIGVycm9yOwor CisJLyogU2V0IHRvIHRydWUgaWYgdGhlIGpzb25wYXRoIGV2YWx1YXRpb24gcmV0dXJuZWQgMCBp dGVtcy4gKi8KKwlOdWxsYWJsZURhdHVtIGVtcHR5OworfSBKc29uRXhwclN0YXRlOworCiAKIC8q IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KICAqCQkJCSBFeGVjdXRvciBTdGF0ZSBUcmVlcwpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvbm9kZXMvbWFrZWZ1bmNzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9tYWtlZnVuY3MuaApp bmRleCAyZGM3OTY0OGQyLi45MWQ5NWZjNTJiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rl cy9tYWtlZnVuY3MuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9tYWtlZnVuY3MuaApAQCAtMTEy LDYgKzExMiw4IEBAIGV4dGVybiBKc29uRm9ybWF0ICptYWtlSnNvbkZvcm1hdChKc29uRm9ybWF0 VHlwZSB0eXBlLCBKc29uRW5jb2RpbmcgZW5jb2RpbmcsCiAJCQkJCQkJCSAgaW50IGxvY2F0aW9u KTsKIGV4dGVybiBKc29uVmFsdWVFeHByICptYWtlSnNvblZhbHVlRXhwcihFeHByICpyYXdfZXhw ciwgRXhwciAqZm9ybWF0dGVkX2V4cHIsCiAJCQkJCQkJCQkJSnNvbkZvcm1hdCAqZm9ybWF0KTsK K2V4dGVybiBKc29uQmVoYXZpb3IgKm1ha2VKc29uQmVoYXZpb3IoSnNvbkJlaGF2aW9yVHlwZSB0 eXBlLCBOb2RlICpleHByLAorCQkJCQkJCQkJICBKc29uQ29lcmNpb24gKmNvZXJjaW9uLCBpbnQg bG9jYXRpb24pOwogZXh0ZXJuIE5vZGUgKm1ha2VKc29uS2V5VmFsdWUoTm9kZSAqa2V5LCBOb2Rl ICp2YWx1ZSk7CiBleHRlcm4gTm9kZSAqbWFrZUpzb25Jc1ByZWRpY2F0ZShOb2RlICpleHByLCBK c29uRm9ybWF0ICpmb3JtYXQsCiAJCQkJCQkJCSBKc29uVmFsdWVUeXBlIGl0ZW1fdHlwZSwgYm9v bCB1bmlxdWVfa2V5cywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMu aCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaAppbmRleCA3YjU3ZmRkZjJkLi45OTBi N2IwMjY3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKKysrIGIv c3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCkBAIC0xNzE1LDYgKzE3MTUsNDggQEAgdHlw ZWRlZiBzdHJ1Y3QgSnNvbk91dHB1dAogCUpzb25SZXR1cm5pbmcgKnJldHVybmluZzsJLyogUkVU VVJOSU5HIEZPUk1BVCBjbGF1c2UgYW5kIHR5cGUgT2lkcyAqLwogfSBKc29uT3V0cHV0OwogCisv KgorICogSnNvbkFyZ3VtZW50IC0KKyAqCQlyZXByZXNlbnRhdGlvbiBvZiBhcmd1bWVudCBmcm9t IEpTT04gUEFTU0lORyBjbGF1c2UKKyAqLwordHlwZWRlZiBzdHJ1Y3QgSnNvbkFyZ3VtZW50Cit7 CisJTm9kZVRhZwkJdHlwZTsKKwlKc29uVmFsdWVFeHByICp2YWw7CQkJLyogYXJndW1lbnQgdmFs dWUgZXhwcmVzc2lvbiAqLworCWNoYXIJICAgKm5hbWU7CQkJLyogYXJndW1lbnQgbmFtZSAqLwor fSBKc29uQXJndW1lbnQ7CisKKy8qCisgKiBKc29uUXVvdGVzIC0KKyAqCQlyZXByZXNlbnRhdGlv biBvZiBbS0VFUHxPTUlUXSBRVU9URVMgY2xhdXNlIGZvciBKU09OX1FVRVJZKCkKKyAqLwordHlw ZWRlZiBlbnVtIEpzb25RdW90ZXMKK3sKKwlKU19RVU9URVNfVU5TUEVDLAkJCS8qIHVuc3BlY2lm aWVkICovCisJSlNfUVVPVEVTX0tFRVAsCQkJCS8qIEtFRVAgUVVPVEVTICovCisJSlNfUVVPVEVT X09NSVQsCQkJCS8qIE9NSVQgUVVPVEVTICovCit9IEpzb25RdW90ZXM7CisKKy8qCisgKiBKc29u RnVuY0V4cHIgLQorICoJCXVudHJhbnNmb3JtZWQgcmVwcmVzZW50YXRpb24gb2YgZnVuY3Rpb24g ZXhwcmVzc2lvbnMgZm9yCisgKgkJU1FML0pTT04gcXVlcnkgZnVuY3Rpb25zCisgKi8KK3R5cGVk ZWYgc3RydWN0IEpzb25GdW5jRXhwcgoreworCU5vZGVUYWcJCXR5cGU7CisJSnNvbkV4cHJPcAlv cDsJCQkJLyogZXhwcmVzc2lvbiB0eXBlICovCisJSnNvblZhbHVlRXhwciAqY29udGV4dF9pdGVt OwkvKiBjb250ZXh0IGl0ZW0gZXhwcmVzc2lvbiAqLworCU5vZGUJICAgKnBhdGhzcGVjOwkJLyog SlNPTiBwYXRoIHNwZWNpZmljYXRpb24gZXhwcmVzc2lvbiAqLworCUxpc3QJICAgKnBhc3Npbmc7 CQkvKiBsaXN0IG9mIFBBU1NJTkcgY2xhdXNlIGFyZ3VtZW50cywgaWYgYW55ICovCisJSnNvbk91 dHB1dCAqb3V0cHV0OwkJCS8qIG91dHB1dCBjbGF1c2UsIGlmIHNwZWNpZmllZCAqLworCUpzb25C ZWhhdmlvciAqb25fZW1wdHk7CQkvKiBPTiBFTVBUWSBiZWhhdmlvciAqLworCUpzb25CZWhhdmlv ciAqb25fZXJyb3I7CQkvKiBPTiBFUlJPUiBiZWhhdmlvciAqLworCUpzb25XcmFwcGVyIHdyYXBw ZXI7CQkvKiBhcnJheSB3cmFwcGVyIGJlaGF2aW9yIChKU09OX1FVRVJZIG9ubHkpICovCisJSnNv blF1b3RlcwlxdW90ZXM7CQkJLyogb21pdCBvciBrZWVwIHF1b3Rlcz8gKEpTT05fUVVFUlkgb25s eSkgKi8KKwlpbnQJCQlsb2NhdGlvbjsJCS8qIHRva2VuIGxvY2F0aW9uLCBvciAtMSBpZiB1bmtu b3duICovCit9IEpzb25GdW5jRXhwcjsKKwogLyoKICAqIEpzb25LZXlWYWx1ZSAtCiAgKgkJdW50 cmFuc2Zvcm1lZCByZXByZXNlbnRhdGlvbiBvZiBKU09OIG9iamVjdCBrZXktdmFsdWUgcGFpciBm b3IKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3ByaW1ub2Rlcy5oIGIvc3JjL2luY2x1 ZGUvbm9kZXMvcHJpbW5vZGVzLmgKaW5kZXggOGRmODg4NDAwMS4uMzc3OTgyZjhmYSAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9k ZXMvcHJpbW5vZGVzLmgKQEAgLTE2OTEsNiArMTY5MSwxODkgQEAgdHlwZWRlZiBzdHJ1Y3QgSnNv bklzUHJlZGljYXRlCiAJaW50CQkJbG9jYXRpb247CQkvKiB0b2tlbiBsb2NhdGlvbiwgb3IgLTEg aWYgdW5rbm93biAqLwogfSBKc29uSXNQcmVkaWNhdGU7CiAKKy8qIE5vZGVzIHVzZWQgaW4gU1FM L0pTT04gcXVlcnkgZnVuY3Rpb25zICovCisKKy8qCisgKiBKc29uV3JhcHBlciAtCisgKgkJcmVw cmVzZW50YXRpb24gb2YgV1JBUFBFUiBjbGF1c2UgZm9yIEpTT05fUVVFUlkoKQorICovCit0eXBl ZGVmIGVudW0gSnNvbldyYXBwZXIKK3sKKwlKU1dfVU5TUEVDLAorCUpTV19OT05FLAorCUpTV19D T05ESVRJT05BTCwKKwlKU1dfVU5DT05ESVRJT05BTCwKK30gSnNvbldyYXBwZXI7CisKKy8qCisg KiBKc29uQmVoYXZpb3JUeXBlIC0KKyAqCQllbnVtZXJhdGlvbiBvZiBiZWhhdmlvciB0eXBlcyB1 c2VkIGluIFNRTC9KU09OIE9OIEVSUk9SL0VNUFRZIGNsYXVzZXMKKyAqCisgKiAJCUlmIGVudW0g bWVtYmVycyBhcmUgcmVvcmRlcmVkLCBnZXRfanNvbl9iZWhhdmlvcigpIGZyb20gcnVsZXV0aWxz LmMKKyAqIAkJbXVzdCBiZSB1cGRhdGVkIGFjY29yZGluZ2x5LgorICovCit0eXBlZGVmIGVudW0g SnNvbkJlaGF2aW9yVHlwZQoreworCUpTT05fQkVIQVZJT1JfTlVMTCA9IDAsCisJSlNPTl9CRUhB VklPUl9FUlJPUiwKKwlKU09OX0JFSEFWSU9SX0VNUFRZLAorCUpTT05fQkVIQVZJT1JfVFJVRSwK KwlKU09OX0JFSEFWSU9SX0ZBTFNFLAorCUpTT05fQkVIQVZJT1JfVU5LTk9XTiwKKwlKU09OX0JF SEFWSU9SX0VNUFRZX0FSUkFZLAorCUpTT05fQkVIQVZJT1JfRU1QVFlfT0JKRUNULAorCUpTT05f QkVIQVZJT1JfREVGQVVMVCwKK30gSnNvbkJlaGF2aW9yVHlwZTsKKworLyoKKyAqIEpzb25Db2Vy Y2lvbgorICoJCUluZm9ybWF0aW9uIGFib3V0IGNvZXJjaW5nIGEgU1FML0pTT04gdmFsdWUgdG8g dGhlIHNwZWNpZmllZAorICoJCXR5cGUgYXQgcnVudGltZQorICoKKyAqIEEgbm9kZSBvZiB0aGlz IHR5cGUgaXMgY3JlYXRlZCBpZiB0aGUgcGFyc2VyIGNhbm5vdCBmaW5kIGEgY2FzdCBleHByZXNz aW9uCisgKiB1c2luZyBjb2VyY2VfdHlwZSgpIG9yIGlmIE9NSVQgUVVPVEVTIGlzIHNwZWNpZmll ZCBmb3IgSlNPTl9RVUVSWTsgc2VlCisgKiBjb2VyY2VKc29uRnVuY0V4cHJPdXRwdXQoKS4KKyAq CisgKiBJZiBpdCdzIHRoZSBsYXR0ZXIsICdjYXN0X2V4cHInIG1heSBjb250YWluIHRoZSBjYXN0 IGV4cHJlc3Npb24sIGV2YWx1YXRlZAorICogc2VwYXJhdGVseSBmcm9tIHRoaXMgbm9kZSwgdGhh dCB3aWxsIGRvIHRoZSBhY3R1YWwgY29lcmNpb24gb2YgdGhlCisgKiBxdW90ZS1zdHJpcHBlZCBz dHJpbmcuICBJZiBubyBjYXN0IGV4cHJlc3Npb24gaXMgZ2l2ZW4sIHRoZSBzdHJpbmcgd2lsbCBi ZQorICogY29lcmNlZCBieSBjYWxsaW5nIHRoZSB0YXJnZXQgdHlwZSdzIGlucHV0IGZ1bmN0aW9u LiAgU2VlCisgKiBFeGVjRXZhbEpzb25Db2VyY2lvbigpLgorICovCit0eXBlZGVmIHN0cnVjdCBK c29uQ29lcmNpb24KK3sKKwlOb2RlVGFnCQl0eXBlOworCisJT2lkCQkJdGFyZ2V0dHlwZTsKKwlp bnQzMgkJdGFyZ2V0dHlwbW9kOworCWJvb2wJCW9taXRfcXVvdGVzOwkvKiBPTUlUIFFVT1RFUyBz cGVjaWZpZWQgZm9yIEpTT05fUVVFUlk/ICovCisJTm9kZQkgICAqY2FzdF9leHByOwkJLyogY29l cmNpb24gY2FzdCBleHByZXNzaW9uIG9yIE5VTEwgKi8KKwlPaWQJCQljb2xsYXRpb247Cit9IEpz b25Db2VyY2lvbjsKKworLyoKKyAqIEpzb25JdGVtVHlwZQorICoJCVBvc3NpYmxlIHR5cGVzIGZv ciBzY2FsYXIgdmFsdWVzIHJldHVybmVkIGJ5IEpTT05fVkFMVUUoKQorICoKKyAqIFRoZSBjb21t ZW50IG5leHQgdG8gZWFjaCBpdGVtIHR5cGUgbWVudGlvbnMgdGhlIGNvcnJlc3BvbmRpbmcKKyAq IEpzb25iVmFsdWUuamJ2VHlwZS4KKyAqLwordHlwZWRlZiBlbnVtIEpzb25JdGVtVHlwZQorewor CUpzb25JdGVtVHlwZU51bGwsCQkJLyogamJ2TnVsbCAqLworCUpzb25JdGVtVHlwZVN0cmluZywJ CQkvKiBqYnZTdHJpbmcgKi8KKwlKc29uSXRlbVR5cGVOdW1lcmljLAkJLyogamJ2TnVtZXJpYyAq LworCUpzb25JdGVtVHlwZUJvb2xlYW4sCQkvKiBqYnZCb29sICovCisJSnNvbkl0ZW1UeXBlRGF0 ZSwJCQkvKiBqYnZEYXRldGltZTogREFURU9JRCAqLworCUpzb25JdGVtVHlwZVRpbWUsCQkJLyog amJ2RGF0ZXRpbWU6IFRJTUVPSUQgKi8KKwlKc29uSXRlbVR5cGVUaW1ldHosCQkJLyogamJ2RGF0 ZXRpbWU6IFRJTUVUWk9JRCAqLworCUpzb25JdGVtVHlwZVRpbWVzdGFtcCwJCS8qIGpidkRhdGV0 aW1lOiBUSU1FU1RBTVBPSUQgKi8KKwlKc29uSXRlbVR5cGVUaW1lc3RhbXB0eiwJLyogamJ2RGF0 ZXRpbWU6IFRJTUVTVEFNUFRaT0lEICovCisJSnNvbkl0ZW1UeXBlQ29tcG9zaXRlLAkJLyogamJ2 QXJyYXksIGpidk9iamVjdCwgamJ2QmluYXJ5ICovCisJSnNvbkl0ZW1UeXBlSW52YWxpZCwKK30g SnNvbkl0ZW1UeXBlOworCisvKgorICogSnNvbkl0ZW1Db2VyY2lvbgorICoJCUNvZXJjaW9uIGV4 cHJlc3Npb24gZm9yIHRoZSBnaXZlbiBKc29uSXRlbVR5cGUKKyAqCisgKiBJZiBub3QgTlVMTCwg J2NvZXJjaW9uJyBnaXZlbiB0aGUgZXhwcmVzc2lvbiBub2RlIHRvIGNvbnZlcnQgYSBzY2FsYXIg dmFsdWUKKyAqIGV4dHJhY3RlZCBmcm9tIGEgSnNvbmJWYWx1ZSBvZiB0aGUgZ2l2ZW4gdHlwZSB0 byB0aGUgdGFyZ2V0IHR5cGUgZ2l2ZW4gYnkKKyAqIEpzb25FeHByLnJldHVybmluZy4gIE5VTEwg bWVhbnMgdGhlIGNvZXJjaW9uIGlzIHVubmVjZXNzYXJ5LgorICovCit0eXBlZGVmIHN0cnVjdCBK c29uSXRlbUNvZXJjaW9uCit7CisJTm9kZVRhZwkJdHlwZTsKKworCUpzb25JdGVtVHlwZSBpdGVt X3R5cGU7CisJTm9kZQkgICAqY29lcmNpb247Cit9IEpzb25JdGVtQ29lcmNpb247CisKKy8qCisg KiBKc29uQmVoYXZpb3IKKyAqCQlJbmZvcm1hdGlvbiBhYm91dCBPTiBFUlJPUiAvIE9OIEVNUFRZ IGJlaGF2aW9ycyBvZiBKU09OX1ZBTFVFKCksCisgKgkJSlNPTl9RVUVSWSgpLCBhbmQgSlNPTl9F WElTVFMoKQorICoKKyAqICdleHByJyBpcyB0aGUgZXhwcmVzc2lvbiB0byBlbWl0IHdoZW4gYSBn aXZlbiBiZWhhdmlvciAoRU1QVFkgb3IgRVJST1IpCisgKiBvY2N1cnMgb24gZXZhbHVhdGluZyB0 aGUgU1FML0pTT04gcXVlcnkgZnVuY3Rpb24uICAnY29lcmNpb24nIGlzIHNldAorICogaWYgJ2V4 cHInIGlzbid0IGFscmVhZHkgb2YgdGhlIGV4cGVjdGVkIHRhcmdldCB0eXBlIGdpdmVuIGJ5Cisg KiBKc29uRXhwci5yZXR1cm5pbmcuCisgKi8KK3R5cGVkZWYgc3RydWN0IEpzb25CZWhhdmlvcgor eworCU5vZGVUYWcJCXR5cGU7CisKKwlKc29uQmVoYXZpb3JUeXBlIGJ0eXBlOworCU5vZGUJICAg KmV4cHI7CisJSnNvbkNvZXJjaW9uICpjb2VyY2lvbjsJCS8qIHRvIGNvZXJjZSBiZWhhdmlvciBl eHByZXNzaW9uIHdoZW4gdGhlcmUgaXMKKwkJCQkJCQkJICogbm8gY2FzdCB0byB0aGUgdGFyZ2V0 IHR5cGUgKi8KKwlpbnQJCQlsb2NhdGlvbjsJCS8qIHRva2VuIGxvY2F0aW9uLCBvciAtMSBpZiB1 bmtub3duICovCit9IEpzb25CZWhhdmlvcjsKKworLyoKKyAqIEpzb25FeHByT3AgLQorICoJCWVu dW1lcmF0aW9uIG9mIEpTT04gZnVuY3Rpb25zIHVzaW5nIEpTT04gcGF0aAorICovCit0eXBlZGVm IGVudW0gSnNvbkV4cHJPcAoreworCUpTT05fRVhJU1RTX09QLAkJCQkvKiBKU09OX0VYSVNUUygp ICovCisJSlNPTl9RVUVSWV9PUCwJCQkJLyogSlNPTl9RVUVSWSgpICovCisJSlNPTl9WQUxVRV9P UCwJCQkJLyogSlNPTl9WQUxVRSgpICovCit9IEpzb25FeHByT3A7CisKKy8qCisgKiBKc29uRXhw ciAtCisgKgkJVHJhbnNmb3JtZWQgcmVwcmVzZW50YXRpb24gb2YgSlNPTl9WQUxVRSgpLCBKU09O X1FVRVJZKCksIGFuZAorICoJCUpTT05fRVhJU1RTKCkKKyAqLwordHlwZWRlZiBzdHJ1Y3QgSnNv bkV4cHIKK3sKKwlFeHByCQl4cHI7CisKKwlKc29uRXhwck9wCW9wOworCisJLyoganNvbmItdmFs dWVkIGV4cHJlc3Npb24gdG8gcXVlcnkgKi8KKwlOb2RlCSAgICpmb3JtYXR0ZWRfZXhwcjsKKwor CS8qIEZvcm1hdCBvZiB0aGUgYWJvdmUgZXhwcmVzc2lvbiBuZWVkZWQgYnkgcnVsZXV0aWxzLmMg Ki8KKwlKc29uRm9ybWF0ICpmb3JtYXQ7CisKKwkvKiBqc29wYXRoLXZhbHVlZCBleHByZXNzaW9u IGNvbnRhaW5pbmcgdGhlIHF1ZXJ5IHBhdHRlcm4gKi8KKwlOb2RlCSAgICpwYXRoX3NwZWM7CisK KwkvKiBFeHBlY3RlZCB0eXBlL2Zvcm1hdCBvZiB0aGUgb3V0cHV0LiAqLworCUpzb25SZXR1cm5p bmcgKnJldHVybmluZzsKKworCS8qIEluZm9ybWF0aW9uIGFib3V0IHRoZSBQQVNTSU5HIGFyZ3Vt ZW50IGV4cHJlc3Npb25zICovCisJTGlzdAkgICAqcGFzc2luZ19uYW1lczsKKwlMaXN0CSAgICpw YXNzaW5nX3ZhbHVlczsKKworCS8qIFVzZXItc3BlY2lmaWVkIG9yIGRlZmF1bHQgT04gRU1QVFkg YW5kIE9OIEVSUk9SIGJlaGF2aW9ycyAqLworCUpzb25CZWhhdmlvciAqb25fZW1wdHk7CisJSnNv bkJlaGF2aW9yICpvbl9lcnJvcjsKKworCS8qCisJICogRXhwcmVzc2lvbiB0byBjb252ZXJ0IHRo ZSByZXN1bHQgb2YganNvbnBhdGggZnVuY3Rpb25zIHRvIHRoZSBSRVRVUk5JTkcKKwkgKiB0eXBl CisJICovCisJTm9kZQkgICAqcmVzdWx0X2NvZXJjaW9uOworCisJLyoKKwkgKiBMaXN0IG9mIGV4 cHJlc3Npb25zIGZvciBjb2VyY2luZyBKU09OX1ZBTFVFKCkgcmVzdWx0IHZhbHVlcywgY29udGFp bmluZworCSAqIG9uZSBlbGVtZW50IGZvciBldmVyeSBKc29uSXRlbVR5cGUuCisJICovCisJTGlz dAkgICAqaXRlbV9jb2VyY2lvbnM7CisKKwkvKiBXUkFQUEVSIHNwZWNpZmljYXRpb24gZm9yIEpT T05fUVVFUlkgKi8KKwlKc29uV3JhcHBlciB3cmFwcGVyOworCisJLyogS0VFUCBvciBPTUlUIFFV T1RFUyBmb3Igc2luZ2xldG9uIHNjYWxhcnMgcmV0dXJuZWQgYnkgSlNPTl9RVUVSWSgpICovCisJ Ym9vbAkJb21pdF9xdW90ZXM7CisKKwkvKiBPcmlnaW5hbCBKc29uRnVuY0V4cHIncyBsb2NhdGlv biAqLworCWludAkJCWxvY2F0aW9uOworfSBKc29uRXhwcjsKKwogLyogLS0tLS0tLS0tLS0tLS0t LQogICogTnVsbFRlc3QKICAqCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wYXJzZXIva3dsaXN0 LmggYi9zcmMvaW5jbHVkZS9wYXJzZXIva3dsaXN0LmgKaW5kZXggMDk5MzUzNDY5Yi4uMzk0MWVm MThkMCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcGFyc2VyL2t3bGlzdC5oCisrKyBiL3NyYy9p bmNsdWRlL3BhcnNlci9rd2xpc3QuaApAQCAtOTMsNiArOTMsNyBAQCBQR19LRVlXT1JEKCJjb21t aXQiLCBDT01NSVQsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQo ImNvbW1pdHRlZCIsIENPTU1JVFRFRCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQog UEdfS0VZV09SRCgiY29tcHJlc3Npb24iLCBDT01QUkVTU0lPTiwgVU5SRVNFUlZFRF9LRVlXT1JE LCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgiY29uY3VycmVudGx5IiwgQ09OQ1VSUkVOVExZLCBU WVBFX0ZVTkNfTkFNRV9LRVlXT1JELCBCQVJFX0xBQkVMKQorUEdfS0VZV09SRCgiY29uZGl0aW9u YWwiLCBDT05ESVRJT05BTCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZ V09SRCgiY29uZmlndXJhdGlvbiIsIENPTkZJR1VSQVRJT04sIFVOUkVTRVJWRURfS0VZV09SRCwg QkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImNvbmZsaWN0IiwgQ09ORkxJQ1QsIFVOUkVTRVJWRURf S0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImNvbm5lY3Rpb24iLCBDT05ORUNUSU9O LCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCkBAIC0xNDcsMTEgKzE0OCwxMyBAQCBQ R19LRVlXT1JEKCJkb3VibGUiLCBET1VCTEVfUCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xB QkVMKQogUEdfS0VZV09SRCgiZHJvcCIsIERST1AsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9M QUJFTCkKIFBHX0tFWVdPUkQoImVhY2giLCBFQUNILCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVf TEFCRUwpCiBQR19LRVlXT1JEKCJlbHNlIiwgRUxTRSwgUkVTRVJWRURfS0VZV09SRCwgQkFSRV9M QUJFTCkKK1BHX0tFWVdPUkQoImVtcHR5IiwgRU1QVFlfUCwgVU5SRVNFUlZFRF9LRVlXT1JELCBC QVJFX0xBQkVMKQogUEdfS0VZV09SRCgiZW5hYmxlIiwgRU5BQkxFX1AsIFVOUkVTRVJWRURfS0VZ V09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImVuY29kaW5nIiwgRU5DT0RJTkcsIFVOUkVT RVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImVuY3J5cHRlZCIsIEVOQ1JZ UFRFRCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgiZW5kIiwg RU5EX1AsIFJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJlbnVtIiwg RU5VTV9QLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCitQR19LRVlXT1JEKCJlcnJv ciIsIEVSUk9SX1AsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQo ImVzY2FwZSIsIEVTQ0FQRSwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZ V09SRCgiZXZlbnQiLCBFVkVOVCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdf S0VZV09SRCgiZXhjZXB0IiwgRVhDRVBULCBSRVNFUlZFRF9LRVlXT1JELCBBU19MQUJFTCkKQEAg LTIzMywxMCArMjM2LDE0IEBAIFBHX0tFWVdPUkQoImpvaW4iLCBKT0lOLCBUWVBFX0ZVTkNfTkFN RV9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgianNvbiIsIEpTT04sIENPTF9OQU1F X0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJqc29uX2FycmF5IiwgSlNPTl9BUlJB WSwgQ09MX05BTUVfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImpzb25fYXJyYXlh Z2ciLCBKU09OX0FSUkFZQUdHLCBDT0xfTkFNRV9LRVlXT1JELCBCQVJFX0xBQkVMKQorUEdfS0VZ V09SRCgianNvbl9leGlzdHMiLCBKU09OX0VYSVNUUywgQ09MX05BTUVfS0VZV09SRCwgQkFSRV9M QUJFTCkKIFBHX0tFWVdPUkQoImpzb25fb2JqZWN0IiwgSlNPTl9PQkpFQ1QsIENPTF9OQU1FX0tF WVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJqc29uX29iamVjdGFnZyIsIEpTT05fT0JK RUNUQUdHLCBDT0xfTkFNRV9LRVlXT1JELCBCQVJFX0xBQkVMKQorUEdfS0VZV09SRCgianNvbl9x dWVyeSIsIEpTT05fUVVFUlksIENPTF9OQU1FX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlX T1JEKCJqc29uX3NjYWxhciIsIEpTT05fU0NBTEFSLCBDT0xfTkFNRV9LRVlXT1JELCBCQVJFX0xB QkVMKQogUEdfS0VZV09SRCgianNvbl9zZXJpYWxpemUiLCBKU09OX1NFUklBTElaRSwgQ09MX05B TUVfS0VZV09SRCwgQkFSRV9MQUJFTCkKK1BHX0tFWVdPUkQoImpzb25fdmFsdWUiLCBKU09OX1ZB TFVFLCBDT0xfTkFNRV9LRVlXT1JELCBCQVJFX0xBQkVMKQorUEdfS0VZV09SRCgia2VlcCIsIEtF RVAsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImtleSIsIEtF WSwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgia2V5cyIsIEtF WVMsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImxhYmVsIiwg TEFCRUwsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKQEAgLTMwMyw2ICszMTAsNyBA QCBQR19LRVlXT1JEKCJvZmYiLCBPRkYsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkK IFBHX0tFWVdPUkQoIm9mZnNldCIsIE9GRlNFVCwgUkVTRVJWRURfS0VZV09SRCwgQVNfTEFCRUwp CiBQR19LRVlXT1JEKCJvaWRzIiwgT0lEUywgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVM KQogUEdfS0VZV09SRCgib2xkIiwgT0xELCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwp CitQR19LRVlXT1JEKCJvbWl0IiwgT01JVCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVM KQogUEdfS0VZV09SRCgib24iLCBPTiwgUkVTRVJWRURfS0VZV09SRCwgQVNfTEFCRUwpCiBQR19L RVlXT1JEKCJvbmx5IiwgT05MWSwgUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tF WVdPUkQoIm9wZXJhdG9yIiwgT1BFUkFUT1IsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJF TCkKQEAgLTM0NSw2ICszNTMsNyBAQCBQR19LRVlXT1JEKCJwcm9jZWR1cmVzIiwgUFJPQ0VEVVJF UywgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgicHJvZ3JhbSIs IFBST0dSQU0sIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoInB1 YmxpY2F0aW9uIiwgUFVCTElDQVRJT04sIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkK IFBHX0tFWVdPUkQoInF1b3RlIiwgUVVPVEUsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJF TCkKK1BHX0tFWVdPUkQoInF1b3RlcyIsIFFVT1RFUywgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJF X0xBQkVMKQogUEdfS0VZV09SRCgicmFuZ2UiLCBSQU5HRSwgVU5SRVNFUlZFRF9LRVlXT1JELCBC QVJFX0xBQkVMKQogUEdfS0VZV09SRCgicmVhZCIsIFJFQUQsIFVOUkVTRVJWRURfS0VZV09SRCwg QkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoInJlYWwiLCBSRUFMLCBDT0xfTkFNRV9LRVlXT1JELCBC QVJFX0xBQkVMKQpAQCAtNDE1LDYgKzQyNCw3IEBAIFBHX0tFWVdPUkQoInN0ZG91dCIsIFNURE9V VCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgic3RvcmFnZSIs IFNUT1JBR0UsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoInN0 b3JlZCIsIFNUT1JFRCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09S RCgic3RyaWN0IiwgU1RSSUNUX1AsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKK1BH X0tFWVdPUkQoInN0cmluZyIsIFNUUklOR19QLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFC RUwpCiBQR19LRVlXT1JEKCJzdHJpcCIsIFNUUklQX1AsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFS RV9MQUJFTCkKIFBHX0tFWVdPUkQoInN1YnNjcmlwdGlvbiIsIFNVQlNDUklQVElPTiwgVU5SRVNF UlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgic3Vic3RyaW5nIiwgU1VCU1RS SU5HLCBDT0xfTkFNRV9LRVlXT1JELCBCQVJFX0xBQkVMKQpAQCAtNDUwLDYgKzQ2MCw3IEBAIFBH X0tFWVdPUkQoInR5cGVzIiwgVFlQRVNfUCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVM KQogUEdfS0VZV09SRCgidWVzY2FwZSIsIFVFU0NBUEUsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFS RV9MQUJFTCkKIFBHX0tFWVdPUkQoInVuYm91bmRlZCIsIFVOQk9VTkRFRCwgVU5SRVNFUlZFRF9L RVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgidW5jb21taXR0ZWQiLCBVTkNPTU1JVFRF RCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQorUEdfS0VZV09SRCgidW5jb25kaXRp b25hbCIsIFVOQ09ORElUSU9OQUwsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBH X0tFWVdPUkQoInVuZW5jcnlwdGVkIiwgVU5FTkNSWVBURUQsIFVOUkVTRVJWRURfS0VZV09SRCwg QkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoInVuaW9uIiwgVU5JT04sIFJFU0VSVkVEX0tFWVdPUkQs IEFTX0xBQkVMKQogUEdfS0VZV09SRCgidW5pcXVlIiwgVU5JUVVFLCBSRVNFUlZFRF9LRVlXT1JE LCBCQVJFX0xBQkVMKQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvZm9ybWF0dGluZy5o IGIvc3JjL2luY2x1ZGUvdXRpbHMvZm9ybWF0dGluZy5oCmluZGV4IDdlYTFhNzBmNzEuLmNkZTAz MDQxNGUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL2Zvcm1hdHRpbmcuaAorKysgYi9z cmMvaW5jbHVkZS91dGlscy9mb3JtYXR0aW5nLmgKQEAgLTI5LDUgKzI5LDYgQEAgZXh0ZXJuIGNo YXIgKmFzY19pbml0Y2FwKGNvbnN0IGNoYXIgKmJ1ZmYsIHNpemVfdCBuYnl0ZXMpOwogZXh0ZXJu IERhdHVtIHBhcnNlX2RhdGV0aW1lKHRleHQgKmRhdGVfdHh0LCB0ZXh0ICpmbXQsIE9pZCBjb2xs aWQsIGJvb2wgc3RyaWN0LAogCQkJCQkJCU9pZCAqdHlwaWQsIGludDMyICp0eXBtb2QsIGludCAq dHosCiAJCQkJCQkJc3RydWN0IE5vZGUgKmVzY29udGV4dCk7CitleHRlcm4gYm9vbCBkYXRldGlt ZV9mb3JtYXRfaGFzX3R6KGNvbnN0IGNoYXIgKmZtdF9zdHIpOwogCiAjZW5kaWYKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL3V0aWxzL2pzb25iLmggYi9zcmMvaW5jbHVkZS91dGlscy9qc29uYi5o CmluZGV4IGUzOGRmZDQ5MDEuLmQ1ODlhY2U1YTIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0 aWxzL2pzb25iLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvanNvbmIuaApAQCAtNDIyLDYgKzQy Miw3IEBAIGV4dGVybiBjaGFyICpKc29uYlRvQ1N0cmluZyhTdHJpbmdJbmZvIG91dCwgSnNvbmJD b250YWluZXIgKmluLAogCQkJCQkJCWludCBlc3RpbWF0ZWRfbGVuKTsKIGV4dGVybiBjaGFyICpK c29uYlRvQ1N0cmluZ0luZGVudChTdHJpbmdJbmZvIG91dCwgSnNvbmJDb250YWluZXIgKmluLAog CQkJCQkJCQkgIGludCBlc3RpbWF0ZWRfbGVuKTsKK2V4dGVybiBjaGFyICpKc29uYlVucXVvdGUo SnNvbmIgKmpiKTsKIGV4dGVybiBib29sIEpzb25iRXh0cmFjdFNjYWxhcihKc29uYkNvbnRhaW5l ciAqamJjLCBKc29uYlZhbHVlICpyZXMpOwogZXh0ZXJuIGNvbnN0IGNoYXIgKkpzb25iVHlwZU5h bWUoSnNvbmJWYWx1ZSAqdmFsKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvanNv bmZ1bmNzLmggYi9zcmMvaW5jbHVkZS91dGlscy9qc29uZnVuY3MuaAppbmRleCAzMWMxYWU0NzY3 Li4xOTBlMTMyODRiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9qc29uZnVuY3MuaAor KysgYi9zcmMvaW5jbHVkZS91dGlscy9qc29uZnVuY3MuaApAQCAtMTUsNiArMTUsNyBAQAogI2Rl ZmluZSBKU09ORlVOQ1NfSAogCiAjaW5jbHVkZSAiY29tbW9uL2pzb25hcGkuaCIKKyNpbmNsdWRl ICJub2Rlcy9ub2Rlcy5oIgogI2luY2x1ZGUgInV0aWxzL2pzb25iLmgiCiAKIC8qCkBAIC04OCw0 ICs4OSwxMCBAQCBleHRlcm4gRGF0dW0gZGF0dW1fdG9fanNvbmIoRGF0dW0gdmFsLCBKc29uVHlw ZUNhdGVnb3J5IHRjYXRlZ29yeSwKIAkJCQkJCQlPaWQgb3V0ZnVuY29pZCk7CiBleHRlcm4gRGF0 dW0ganNvbmJfZnJvbV90ZXh0KHRleHQgKmpzLCBib29sIHVuaXF1ZV9rZXlzKTsKIAorZXh0ZXJu IERhdHVtIGpzb25fcG9wdWxhdGVfdHlwZShEYXR1bSBqc29uX3ZhbCwgT2lkIGpzb25fdHlwZSwK KwkJCQkJCQkJT2lkIHR5cGlkLCBpbnQzMiB0eXBtb2QsCisJCQkJCQkJCXZvaWQgKipjYWNoZSwg TWVtb3J5Q29udGV4dCBtY3h0LAorCQkJCQkJCQlib29sICppc251bGwsCisJCQkJCQkJCU5vZGUg KmVzY29udGV4dCk7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvanNv bnBhdGguaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2pzb25wYXRoLmgKaW5kZXggMGYwZTEyNmUwMy4u MGY0YjFlYmM5ZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvanNvbnBhdGguaAorKysg Yi9zcmMvaW5jbHVkZS91dGlscy9qc29ucGF0aC5oCkBAIC0xNiw2ICsxNiw3IEBACiAKICNpbmNs dWRlICJmbWdyLmgiCiAjaW5jbHVkZSAibm9kZXMvcGdfbGlzdC5oIgorI2luY2x1ZGUgIm5vZGVz L3ByaW1ub2Rlcy5oIgogI2luY2x1ZGUgInV0aWxzL2pzb25iLmgiCiAKIHR5cGVkZWYgc3RydWN0 CkBAIC0yMDIsNiArMjAzLDcgQEAgZXh0ZXJuIGJvb2wganNwR2V0Qm9vbChKc29uUGF0aEl0ZW0g KnYpOwogZXh0ZXJuIGNoYXIgKmpzcEdldFN0cmluZyhKc29uUGF0aEl0ZW0gKnYsIGludDMyICps ZW4pOwogZXh0ZXJuIGJvb2wganNwR2V0QXJyYXlTdWJzY3JpcHQoSnNvblBhdGhJdGVtICp2LCBK c29uUGF0aEl0ZW0gKmZyb20sCiAJCQkJCQkJCSBKc29uUGF0aEl0ZW0gKnRvLCBpbnQgaSk7Citl eHRlcm4gYm9vbCBqc3BJc011dGFibGUoSnNvblBhdGggKnBhdGgsIExpc3QgKnZhcm5hbWVzLCBM aXN0ICp2YXJleHBycyk7CiAKIGV4dGVybiBjb25zdCBjaGFyICpqc3BPcGVyYXRpb25OYW1lKEpz b25QYXRoSXRlbVR5cGUgdHlwZSk7CiAKQEAgLTI3OSw0ICsyODEsMjYgQEAgZXh0ZXJuIGJvb2wg anNwQ29udmVydFJlZ2V4RmxhZ3ModWludDMyIHhmbGFncywgaW50ICpyZXN1bHQsCiAJCQkJCQkJ CSBzdHJ1Y3QgTm9kZSAqZXNjb250ZXh0KTsKIAogCisvKgorICogRXZhbHVhdGlvbiBvZiBqc29u cGF0aAorICovCisKKy8qIEV4dGVybmFsIHZhcmlhYmxlIHBhc3NlZCBpbnRvIGpzb25wYXRoLiAq LwordHlwZWRlZiBzdHJ1Y3QgSnNvblBhdGhWYXJpYWJsZQoreworCWNoYXIJICAgKm5hbWU7CisJ T2lkCQkJdHlwaWQ7CisJaW50MzIJCXR5cG1vZDsKKwlEYXR1bQkJdmFsdWU7CisJYm9vbAkJaXNu dWxsOworfSBKc29uUGF0aFZhcmlhYmxlOworCisKKy8qIFNRTC9KU09OIGl0ZW0gKi8KK2V4dGVy biBib29sIEpzb25QYXRoRXhpc3RzKERhdHVtIGpiLCBKc29uUGF0aCAqcGF0aCwgYm9vbCAqZXJy b3IsIExpc3QgKnZhcnMpOworZXh0ZXJuIERhdHVtIEpzb25QYXRoUXVlcnkoRGF0dW0gamIsIEpz b25QYXRoICpqcCwgSnNvbldyYXBwZXIgd3JhcHBlciwKKwkJCQkJCSAgIGJvb2wgKmVtcHR5LCBi b29sICplcnJvciwgTGlzdCAqdmFycyk7CitleHRlcm4gSnNvbmJWYWx1ZSAqSnNvblBhdGhWYWx1 ZShEYXR1bSBqYiwgSnNvblBhdGggKmpwLCBib29sICplbXB0eSwKKwkJCQkJCQkJIGJvb2wgKmVy cm9yLCBMaXN0ICp2YXJzKTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9l Y3BnL3ByZXByb2MvZWNwZy50cmFpbGVyIGIvc3JjL2ludGVyZmFjZXMvZWNwZy9wcmVwcm9jL2Vj cGcudHJhaWxlcgppbmRleCA0MzVjMTM5ZWMyLi5iMmFhNDRmMzZkIDEwMDY0NAotLS0gYS9zcmMv aW50ZXJmYWNlcy9lY3BnL3ByZXByb2MvZWNwZy50cmFpbGVyCisrKyBiL3NyYy9pbnRlcmZhY2Vz L2VjcGcvcHJlcHJvYy9lY3BnLnRyYWlsZXIKQEAgLTY1MSw2ICs2NTEsMzQgQEAgdmFyX3R5cGU6 CXNpbXBsZV90eXBlCiAJCQkkJC50eXBlX2luZGV4ID0gbW1fc3RyZHVwKCItMSIpOwogCQkJJCQu dHlwZV9zaXplb2YgPSBOVUxMOwogCQl9CisJCXwgU1RSSU5HX1AKKwkJeworCQkJaWYgKElORk9S TUlYX01PREUpCisJCQl7CisJCQkJLyogSW4gSW5mb3JtaXggbW9kZSwgInN0cmluZyIgaXMgYXV0 b21hdGljYWxseSBhIHR5cGVkZWYgKi8KKwkJCQkkJC50eXBlX2VudW0gPSBFQ1BHdF9zdHJpbmc7 CisJCQkJJCQudHlwZV9zdHIgPSBtbV9zdHJkdXAoImNoYXIiKTsKKwkJCQkkJC50eXBlX2RpbWVu c2lvbiA9IG1tX3N0cmR1cCgiLTEiKTsKKwkJCQkkJC50eXBlX2luZGV4ID0gbW1fc3RyZHVwKCIt MSIpOworCQkJCSQkLnR5cGVfc2l6ZW9mID0gTlVMTDsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJ CQkvKiBPdGhlcndpc2UsIGxlZ2FsIG9ubHkgaWYgdXNlciB0eXBlZGVmJ2VkIGl0ICovCisJCQkJ c3RydWN0IHR5cGVkZWZzICp0aGlzID0gZ2V0X3R5cGVkZWYoInN0cmluZyIsIGZhbHNlKTsKKwor CQkJCSQkLnR5cGVfc3RyID0gKHRoaXMtPnR5cGUtPnR5cGVfZW51bSA9PSBFQ1BHdF92YXJjaGFy IHx8IHRoaXMtPnR5cGUtPnR5cGVfZW51bSA9PSBFQ1BHdF9ieXRlYSkgPyBFTVBUWSA6IG1tX3N0 cmR1cCh0aGlzLT5uYW1lKTsKKwkJCQkkJC50eXBlX2VudW0gPSB0aGlzLT50eXBlLT50eXBlX2Vu dW07CisJCQkJJCQudHlwZV9kaW1lbnNpb24gPSB0aGlzLT50eXBlLT50eXBlX2RpbWVuc2lvbjsK KwkJCQkkJC50eXBlX2luZGV4ID0gdGhpcy0+dHlwZS0+dHlwZV9pbmRleDsKKwkJCQlpZiAodGhp cy0+dHlwZS0+dHlwZV9zaXplb2YgJiYgc3RybGVuKHRoaXMtPnR5cGUtPnR5cGVfc2l6ZW9mKSAh PSAwKQorCQkJCQkkJC50eXBlX3NpemVvZiA9IHRoaXMtPnR5cGUtPnR5cGVfc2l6ZW9mOworCQkJ CWVsc2UKKwkJCQkJJCQudHlwZV9zaXplb2YgPSBjYXRfc3RyKDMsIG1tX3N0cmR1cCgic2l6ZW9m KCIpLCBtbV9zdHJkdXAodGhpcy0+bmFtZSksIG1tX3N0cmR1cCgiKSIpKTsKKworCQkJCXN0cnVj dF9tZW1iZXJfbGlzdFtzdHJ1Y3RfbGV2ZWxdID0gRUNQR3N0cnVjdF9tZW1iZXJfZHVwKHRoaXMt PnN0cnVjdF9tZW1iZXJfbGlzdCk7CisJCQl9CisJCX0KIAkJfCBJTlRFUlZBTCBlY3BnX2ludGVy dmFsCiAJCXsKIAkJCSQkLnR5cGVfZW51bSA9IEVDUEd0X2ludGVydmFsOwpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zcWxqc29uX3F1ZXJ5ZnVuY3Mub3V0IGIvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9zcWxqc29uX3F1ZXJ5ZnVuY3Mub3V0Cm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmY1YjU3NDY1ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3NxbGpzb25fcXVlcnlmdW5jcy5vdXQKQEAgLTAsMCAr MSwxMjYxIEBACistLSBKU09OX0VYSVNUUworLS0ganNvbiBhcmd1bWVudHMgY3VycmVudGx5IG5v dCBzdXBwb3J0ZWQKK1NFTEVDVCBKU09OX0VYSVNUUyhOVUxMIEZPUk1BVCBKU09OLCAnJCcpOwor RVJST1I6ICBKU09OX0VYSVNUUygpIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQgZm9yIHRoZSBqc29u IHR5cGUKK0xJTkUgMTogU0VMRUNUIEpTT05fRVhJU1RTKE5VTEwgRk9STUFUIEpTT04sICckJyk7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICBeCitISU5UOiAgVHJ5IGNhc3RpbmcgdGhlIGFy Z3VtZW50IHRvIGpzb25iCitTRUxFQ1QgSlNPTl9FWElTVFMoTlVMTDo6anNvbmIsICckJyk7Cisg anNvbl9leGlzdHMgCistLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKK1NFTEVDVCBKU09OX0VY SVNUUyhqc29uYiAnW10nLCAnJCcpOworIGpzb25fZXhpc3RzIAorLS0tLS0tLS0tLS0tLQorIHQK KygxIHJvdykKKworU0VMRUNUIEpTT05fRVhJU1RTKEpTT05fT0JKRUNUKFJFVFVSTklORyBqc29u YiksICckJyk7CisganNvbl9leGlzdHMgCistLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQorCitT RUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJzEnLCAnJCcpOworIGpzb25fZXhpc3RzIAorLS0tLS0t LS0tLS0tLQorIHQKKygxIHJvdykKKworU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICdudWxsJywg JyQnKTsKKyBqc29uX2V4aXN0cyAKKy0tLS0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisKK1NFTEVD VCBKU09OX0VYSVNUUyhqc29uYiAnW10nLCAnJCcpOworIGpzb25fZXhpc3RzIAorLS0tLS0tLS0t LS0tLQorIHQKKygxIHJvdykKKworU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICcxJywgJyQuYScp OworIGpzb25fZXhpc3RzIAorLS0tLS0tLS0tLS0tLQorIGYKKygxIHJvdykKKworU0VMRUNUIEpT T05fRVhJU1RTKGpzb25iICcxJywgJ3N0cmljdCAkLmEnKTsgLS0gRkFMU0Ugb24gZXJyb3IKKyBq c29uX2V4aXN0cyAKKy0tLS0tLS0tLS0tLS0KKyBmCisoMSByb3cpCisKK1NFTEVDVCBKU09OX0VY SVNUUyhqc29uYiAnMScsICdzdHJpY3QgJC5hJyBFUlJPUiBPTiBFUlJPUik7CitFUlJPUjogIGpz b25wYXRoIG1lbWJlciBhY2Nlc3NvciBjYW4gb25seSBiZSBhcHBsaWVkIHRvIGFuIG9iamVjdAor U0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICdudWxsJywgJyQuYScpOworIGpzb25fZXhpc3RzIAor LS0tLS0tLS0tLS0tLQorIGYKKygxIHJvdykKKworU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICdb XScsICckLmEnKTsKKyBqc29uX2V4aXN0cyAKKy0tLS0tLS0tLS0tLS0KKyBmCisoMSByb3cpCisK K1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAnWzEsICJhYWEiLCB7ImEiOiAxfV0nLCAnc3RyaWN0 ICQuYScpOyAtLSBGQUxTRSBvbiBlcnJvcgorIGpzb25fZXhpc3RzIAorLS0tLS0tLS0tLS0tLQor IGYKKygxIHJvdykKKworU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICdbMSwgImFhYSIsIHsiYSI6 IDF9XScsICdsYXggJC5hJyk7CisganNvbl9leGlzdHMgCistLS0tLS0tLS0tLS0tCisgdAorKDEg cm93KQorCitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJ3t9JywgJyQuYScpOworIGpzb25fZXhp c3RzIAorLS0tLS0tLS0tLS0tLQorIGYKKygxIHJvdykKKworU0VMRUNUIEpTT05fRVhJU1RTKGpz b25iICd7ImIiOiAxLCAiYSI6IDJ9JywgJyQuYScpOworIGpzb25fZXhpc3RzIAorLS0tLS0tLS0t LS0tLQorIHQKKygxIHJvdykKKworU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICcxJywgJyQuYS5i Jyk7CisganNvbl9leGlzdHMgCistLS0tLS0tLS0tLS0tCisgZgorKDEgcm93KQorCitTRUxFQ1Qg SlNPTl9FWElTVFMoanNvbmIgJ3siYSI6IHsiYiI6IDF9fScsICckLmEuYicpOworIGpzb25fZXhp c3RzIAorLS0tLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworU0VMRUNUIEpTT05fRVhJU1RTKGpz b25iICd7ImEiOiAxLCAiYiI6IDJ9JywgJyQuYS5iJyk7CisganNvbl9leGlzdHMgCistLS0tLS0t LS0tLS0tCisgZgorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJ3siYSI6IDEs ICJiIjogMn0nLCAnJC4qID8gKEAgPiAkeCknIFBBU1NJTkcgMSBBUyB4KTsKKyBqc29uX2V4aXN0 cyAKKy0tLS0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29u YiAneyJhIjogMSwgImIiOiAyfScsICckLiogPyAoQCA+ICR4KScgUEFTU0lORyAnMScgQVMgeCk7 CisganNvbl9leGlzdHMgCistLS0tLS0tLS0tLS0tCisgZgorKDEgcm93KQorCitTRUxFQ1QgSlNP Tl9FWElTVFMoanNvbmIgJ3siYSI6IDEsICJiIjogMn0nLCAnJC4qID8gKEAgPiAkeCAmJiBAIDwg JHkpJyBQQVNTSU5HIDAgQVMgeCwgMiBBUyB5KTsKKyBqc29uX2V4aXN0cyAKKy0tLS0tLS0tLS0t LS0KKyB0CisoMSByb3cpCisKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAneyJhIjogMSwgImIi OiAyfScsICckLiogPyAoQCA+ICR4ICYmIEAgPCAkeSknIFBBU1NJTkcgMCBBUyB4LCAxIEFTIHkp OworIGpzb25fZXhpc3RzIAorLS0tLS0tLS0tLS0tLQorIGYKKygxIHJvdykKKworLS0gZXh0ZW5z aW9uOiBib29sZWFuIGV4cHJlc3Npb25zCitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJzEnLCAn JCA+IDInKTsKKyBqc29uX2V4aXN0cyAKKy0tLS0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisKK1NF TEVDVCBKU09OX0VYSVNUUyhqc29uYiAnMScsICckLmEgPiAyJyBFUlJPUiBPTiBFUlJPUik7Cisg anNvbl9leGlzdHMgCistLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQorCistLSBKU09OX1ZBTFVF CistLSBqc29uIGFyZ3VtZW50cyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZAorU0VMRUNUIEpTT05f VkFMVUUoTlVMTCBGT1JNQVQgSlNPTiwgJyQnKTsKK0VSUk9SOiAgSlNPTl9WQUxVRSgpIGlzIG5v dCB5ZXQgaW1wbGVtZW50ZWQgZm9yIHRoZSBqc29uIHR5cGUKK0xJTkUgMTogU0VMRUNUIEpTT05f VkFMVUUoTlVMTCBGT1JNQVQgSlNPTiwgJyQnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg XgorSElOVDogIFRyeSBjYXN0aW5nIHRoZSBhcmd1bWVudCB0byBqc29uYgorU0VMRUNUIEpTT05f VkFMVUUoTlVMTDo6anNvbmIsICckJyk7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorIAor KDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICckJyk7CisganNvbl92 YWx1ZSAKKy0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29u YiAnbnVsbCcsICckJyBSRVRVUk5JTkcgaW50KTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0t CisgICAgICAgICAgIAorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAndHJ1ZScs ICckJyk7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorIHRydWUKKygxIHJvdykKKworU0VM RUNUIEpTT05fVkFMVUUoanNvbmIgJ3RydWUnLCAnJCcgUkVUVVJOSU5HIGJvb2wpOworIGpzb25f dmFsdWUgCistLS0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpz b25iICcxMjMnLCAnJCcpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyAxMjMKKygxIHJv dykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEyMycsICckJyBSRVRVUk5JTkcgaW50KSAr IDIzNDsKKyA/Y29sdW1uPyAKKy0tLS0tLS0tLS0KKyAgICAgIDM1NworKDEgcm93KQorCitTRUxF Q1QgSlNPTl9WQUxVRShqc29uYiAnMTIzJywgJyQnIFJFVFVSTklORyB0ZXh0KTsKKyBqc29uX3Zh bHVlIAorLS0tLS0tLS0tLS0tCisgMTIzCisoMSByb3cpCisKKy8qIGpzb25iIGJ5dGVhID8/PyAq LworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEyMycsICckJyBSRVRVUk5JTkcgYnl0ZWEgRVJS T1IgT04gRVJST1IpOworRVJST1I6ICBTUUwvSlNPTiBpdGVtIGNhbm5vdCBiZSBjYXN0IHRvIHRh cmdldCB0eXBlCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMS4yMycsICckJyk7CisganNvbl92 YWx1ZSAKKy0tLS0tLS0tLS0tLQorIDEuMjMKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUo anNvbmIgJzEuMjMnLCAnJCcgUkVUVVJOSU5HIGludCk7CisganNvbl92YWx1ZSAKKy0tLS0tLS0t LS0tLQorICAgICAgICAgIDEKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJyIx LjIzIicsICckJyBSRVRVUk5JTkcgbnVtZXJpYyk7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0t LQorICAgICAgIDEuMjMKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJyIxLjIz IicsICckJyBSRVRVUk5JTkcgaW50IEVSUk9SIE9OIEVSUk9SKTsKK0VSUk9SOiAgaW52YWxpZCBp bnB1dCBzeW50YXggZm9yIHR5cGUgaW50ZWdlcjogIjEuMjMiCitTRUxFQ1QgSlNPTl9WQUxVRShq c29uYiAnImFhYSInLCAnJCcpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyBhYWEKKygx IHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJyJhYWEiJywgJyQnIFJFVFVSTklORyB0 ZXh0KTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgYWFhCisoMSByb3cpCisKK1NFTEVD VCBKU09OX1ZBTFVFKGpzb25iICciYWFhIicsICckJyBSRVRVUk5JTkcgY2hhcig1KSk7CisganNv bl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorIGFhYSAgCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZB TFVFKGpzb25iICciYWFhIicsICckJyBSRVRVUk5JTkcgY2hhcigyKSk7CisganNvbl92YWx1ZSAK Ky0tLS0tLS0tLS0tLQorIGFhCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICci YWFhIicsICckJyBSRVRVUk5JTkcganNvbik7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQor ICJhYWEiCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciYWFhIicsICckJyBS RVRVUk5JTkcganNvbmIpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyAiYWFhIgorKDEg cm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnImFhYSInLCAnJCcgUkVUVVJOSU5HIGpz b24gRVJST1IgT04gRVJST1IpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyAiYWFhIgor KDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnImFhYSInLCAnJCcgUkVUVVJOSU5H IGpzb25iIEVSUk9SIE9OIEVSUk9SKTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgImFh YSIKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJyJcImFhYVwiIicsICckJyBS RVRVUk5JTkcganNvbik7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorICJcImFhYVwiIgor KDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnIlwiYWFhXCIiJywgJyQnIFJFVFVS TklORyBqc29uYik7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorICJcImFhYVwiIgorKDEg cm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnImFhYSInLCAnJCcgUkVUVVJOSU5HIGlu dCk7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorICAgICAgICAgICAKKygxIHJvdykKKwor U0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJyJhYWEiJywgJyQnIFJFVFVSTklORyBpbnQgRVJST1Ig T04gRVJST1IpOworRVJST1I6ICBpbnZhbGlkIGlucHV0IHN5bnRheCBmb3IgdHlwZSBpbnRlZ2Vy OiAiYWFhIgorU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJyJhYWEiJywgJyQnIFJFVFVSTklORyBp bnQgREVGQVVMVCAxMTEgT04gRVJST1IpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyAg ICAgICAgMTExCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciMTIzIicsICck JyBSRVRVUk5JTkcgaW50KSArIDIzNDsKKyA/Y29sdW1uPyAKKy0tLS0tLS0tLS0KKyAgICAgIDM1 NworKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnIjIwMTctMDItMjAiJywgJyQn IFJFVFVSTklORyBkYXRlKSArIDk7CisgID9jb2x1bW4/ICAKKy0tLS0tLS0tLS0tLQorIDAzLTAx LTIwMTcKKygxIHJvdykKKworLS0gVGVzdCBOVUxMIGNoZWNrcyBleGVjdXRpb24gaW4gZG9tYWlu IHR5cGVzCitDUkVBVEUgRE9NQUlOIHNxbGpzb25iX2ludF9ub3RfbnVsbCBBUyBpbnQgTk9UIE5V TEw7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICckJyBSRVRVUk5JTkcgc3FsanNv bmJfaW50X25vdF9udWxsKTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgICAgICAgICAg IAorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICckJyBSRVRVUk5J Tkcgc3FsanNvbmJfaW50X25vdF9udWxsIEVSUk9SIE9OIEVSUk9SKTsKK0VSUk9SOiAgZG9tYWlu IHNxbGpzb25iX2ludF9ub3RfbnVsbCBkb2VzIG5vdCBhbGxvdyBudWxsIHZhbHVlcworU0VMRUNU IEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAnJCcgUkVUVVJOSU5HIHNxbGpzb25iX2ludF9ub3Rf bnVsbCBERUZBVUxUIDIgT04gRU1QVFkgRVJST1IgT04gRVJST1IpOworRVJST1I6ICBkb21haW4g c3FsanNvbmJfaW50X25vdF9udWxsIGRvZXMgbm90IGFsbG93IG51bGwgdmFsdWVzCitTRUxFQ1Qg SlNPTl9WQUxVRShqc29uYiAnMScsICAnJC5hJyBSRVRVUk5JTkcgc3FsanNvbmJfaW50X25vdF9u dWxsIERFRkFVTFQgMiBPTiBFTVBUWSBFUlJPUiBPTiBFUlJPUik7CisganNvbl92YWx1ZSAKKy0t LS0tLS0tLS0tLQorICAgICAgICAgIDIKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNv bmIgJzEnLCAgJyQuYScgUkVUVVJOSU5HIHNxbGpzb25iX2ludF9ub3RfbnVsbCBERUZBVUxUIE5V TEwgT04gRU1QVFkgRVJST1IgT04gRVJST1IpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0K KyAgICAgICAgICAgCisoMSByb3cpCisKK0NSRUFURSBUWVBFIHJhaW5ib3cgQVMgRU5VTSAoJ3Jl ZCcsICdvcmFuZ2UnLCAneWVsbG93JywgJ2dyZWVuJywgJ2JsdWUnLCAncHVycGxlJyk7CitDUkVB VEUgRE9NQUlOIHJnYiBBUyByYWluYm93IENIRUNLIChWQUxVRSBJTiAoJ3JlZCcsICdncmVlbics ICdibHVlJykpOworU0VMRUNUIEpTT05fVkFMVUUoJyJwdXJwbGUiJzo6anNvbmIsICdsYXggJFsq XScgUkVUVVJOSU5HIHJnYik7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorIAorKDEgcm93 KQorCitTRUxFQ1QgSlNPTl9WQUxVRSgnInB1cnBsZSInOjpqc29uYiwgJ2xheCAkWypdJyBSRVRV Uk5JTkcgcmdiIEVSUk9SIE9OIEVSUk9SKTsKK0VSUk9SOiAgdmFsdWUgZm9yIGRvbWFpbiByZ2Ig dmlvbGF0ZXMgY2hlY2sgY29uc3RyYWludCAicmdiX2NoZWNrIgorU0VMRUNUIEpTT05fVkFMVUUo anNvbmIgJ1tdJywgJyQnKTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgCisoMSByb3cp CisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdbXScsICckJyBFUlJPUiBPTiBFUlJPUik7CitF UlJPUjogIEpTT04gcGF0aCBleHByZXNzaW9uIGluIEpTT05fVkFMVUUgc2hvdWxkIHJldHVybiBz aW5nbGV0b24gc2NhbGFyIGl0ZW0KK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICd7fScsICckJyk7 CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9W QUxVRShqc29uYiAne30nLCAnJCcgRVJST1IgT04gRVJST1IpOworRVJST1I6ICBKU09OIHBhdGgg ZXhwcmVzc2lvbiBpbiBKU09OX1ZBTFVFIHNob3VsZCByZXR1cm4gc2luZ2xldG9uIHNjYWxhciBp dGVtCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICckLmEnKTsKKyBqc29uX3ZhbHVlIAor LS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywg J3N0cmljdCAkLmEnIEVSUk9SIE9OIEVSUk9SKTsKK0VSUk9SOiAganNvbnBhdGggbWVtYmVyIGFj Y2Vzc29yIGNhbiBvbmx5IGJlIGFwcGxpZWQgdG8gYW4gb2JqZWN0CitTRUxFQ1QgSlNPTl9WQUxV RShqc29uYiAnMScsICdzdHJpY3QgJC5hJyBERUZBVUxUICdlcnJvcicgT04gRVJST1IpOworIGpz b25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyBlcnJvcgorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9W QUxVRShqc29uYiAnMScsICdsYXggJC5hJyBFUlJPUiBPTiBFUlJPUik7CitFUlJPUjogIG5vIFNR TC9KU09OIGl0ZW0KK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywgJ2xheCAkLmEnIEVSUk9S IE9OIEVNUFRZIEVSUk9SIE9OIEVSUk9SKTsKK0VSUk9SOiAgbm8gU1FML0pTT04gaXRlbQorU0VM RUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAnc3RyaWN0ICQuYScgREVGQVVMVCAyIE9OIEVSUk9S KTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgMgorKDEgcm93KQorCitTRUxFQ1QgSlNP Tl9WQUxVRShqc29uYiAnMScsICdsYXggJC5hJyBERUZBVUxUIDIgT04gRVJST1IpOworIGpzb25f dmFsdWUgCistLS0tLS0tLS0tLS0KKyAyCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpz b25iICcxJywgJ2xheCAkLmEnIERFRkFVTFQgJzInIE9OIEVSUk9SKTsKKyBqc29uX3ZhbHVlIAor LS0tLS0tLS0tLS0tCisgMgorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScs ICdsYXggJC5hJyBOVUxMIE9OIEVNUFRZIERFRkFVTFQgJzInIE9OIEVSUk9SKTsKKyBqc29uX3Zh bHVlIAorLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25i ICcxJywgJ2xheCAkLmEnIERFRkFVTFQgJzInIE9OIEVNUFRZIERFRkFVTFQgJzMnIE9OIEVSUk9S KTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgMgorKDEgcm93KQorCitTRUxFQ1QgSlNP Tl9WQUxVRShqc29uYiAnMScsICdsYXggJC5hJyBFUlJPUiBPTiBFTVBUWSBERUZBVUxUICczJyBP TiBFUlJPUik7CitFUlJPUjogIG5vIFNRTC9KU09OIGl0ZW0KK1NFTEVDVCBKU09OX1ZBTFVFKGpz b25iICdbMSwyXScsICckWypdJyBFUlJPUiBPTiBFUlJPUik7CitFUlJPUjogIEpTT04gcGF0aCBl eHByZXNzaW9uIGluIEpTT05fVkFMVUUgc2hvdWxkIHJldHVybiBzaW5nbGV0b24gc2NhbGFyIGl0 ZW0KK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdbMSwyXScsICckWypdJyBERUZBVUxUICcwJyBP TiBFUlJPUik7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorIDAKKygxIHJvdykKKworU0VM RUNUIEpTT05fVkFMVUUoanNvbmIgJ1siICJdJywgJyRbKl0nIFJFVFVSTklORyBpbnQgRVJST1Ig T04gRVJST1IpOworRVJST1I6ICBpbnZhbGlkIGlucHV0IHN5bnRheCBmb3IgdHlwZSBpbnRlZ2Vy OiAiICIKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdbIiAiXScsICckWypdJyBSRVRVUk5JTkcg aW50IERFRkFVTFQgMiArIDMgT04gRVJST1IpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0K KyAgICAgICAgICA1CisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdbIjEiXScs ICckWypdJyBSRVRVUk5JTkcgaW50IERFRkFVTFQgMiArIDMgT04gRVJST1IpOworIGpzb25fdmFs dWUgCistLS0tLS0tLS0tLS0KKyAgICAgICAgICAxCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZB TFVFKGpzb25iICdbIjEiXScsICckWypdJyBSRVRVUk5JTkcgaW50IEZPUk1BVCBKU09OKTsgLS0g UkVUVVJOSU5HIEZPUk1BVCBub3QgYWxsb3dlZAorRVJST1I6ICBjYW5ub3Qgc3BlY2lmeSBGT1JN QVQgaW4gUkVUVVJOSU5HIGNsYXVzZSBvZiBKU09OX1ZBTFVFKCkKK0xJTkUgMTogLi4uQ1QgSlNP Tl9WQUxVRShqc29uYiAnWyIxIl0nLCAnJFsqXScgUkVUVVJOSU5HIGludCBGT1JNQVQgSlNPLi4u CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXgorLS0gUkVUVUdOSU5HIHBzZXVkby10eXBlcyBub3QgYWxsb3dlZAorU0VMRUNUIEpT T05fVkFMVUUoanNvbmIgJ1siMSJdJywgJyRbKl0nIFJFVFVSTklORyByZWNvcmQpOworRVJST1I6 ICByZXR1cm5pbmcgcHNldWRvLXR5cGVzIGlzIG5vdCBzdXBwb3J0ZWQgaW4gU1FML0pTT04gZnVu Y3Rpb25zCitTRUxFQ1QKKwl4LAorCUpTT05fVkFMVUUoCisJCWpzb25iICd7ImEiOiAxLCAiYiI6 IDJ9JywKKwkJJyQuKiA/IChAID4gJHgpJyBQQVNTSU5HIHggQVMgeAorCQlSRVRVUk5JTkcgaW50 CisJCURFRkFVTFQgLTEgT04gRU1QVFkKKwkJREVGQVVMVCAtMiBPTiBFUlJPUgorCSkgeQorRlJP TQorCWdlbmVyYXRlX3NlcmllcygwLCAyKSB4OworIHggfCB5ICAKKy0tLSstLS0tCisgMCB8IC0y CisgMSB8ICAyCisgMiB8IC0xCisoMyByb3dzKQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAn bnVsbCcsICckYScgUEFTU0lORyBwb2ludCAnICgxLCAyICknIEFTIGEpOworIGpzb25fdmFsdWUg CistLS0tLS0tLS0tLS0KKyAoMSwyKQorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29u YiAnbnVsbCcsICckYScgUEFTU0lORyBwb2ludCAnICgxLCAyICknIEFTIGEgUkVUVVJOSU5HIHBv aW50KTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgKDEsMikKKygxIHJvdykKKworU0VM RUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAnJGEnIFBBU1NJTkcgcG9pbnQgJyAoMSwgMiAp JyBBUyBhIFJFVFVSTklORyBwb2ludCBFUlJPUiBPTiBFUlJPUik7CisganNvbl92YWx1ZSAKKy0t LS0tLS0tLS0tLQorICgxLDIpCisoMSByb3cpCisKKy0tIFRlc3QgUEFTU0lORyBhbmQgUkVUVVJO SU5HIGRhdGUvdGltZSB0eXBlcworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAnJHRz JyBQQVNTSU5HIHRpbWVzdGFtcHR6ICcyMDE4LTAyLTIxIDEyOjM0OjU2ICsxMCcgQVMgdHMpOwor ICAgICAgICAgIGpzb25fdmFsdWUgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBUdWUgRmViIDIwIDE4OjM0OjU2IDIwMTggUFNUCisoMSByb3cpCisKK1NFTEVDVCBK U09OX1ZBTFVFKGpzb25iICdudWxsJywgJyR0cycgUEFTU0lORyB0aW1lc3RhbXB0eiAnMjAxOC0w Mi0yMSAxMjozNDo1NiArMTAnIEFTIHRzIFJFVFVSTklORyB0aW1lc3RhbXB0eik7CisgICAgICAg ICAganNvbl92YWx1ZSAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IFR1ZSBGZWIgMjAgMTg6MzQ6NTYgMjAxOCBQU1QKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFM VUUoanNvbmIgJ251bGwnLCAnJHRzJyBQQVNTSU5HIHRpbWVzdGFtcHR6ICcyMDE4LTAyLTIxIDEy OjM0OjU2ICsxMCcgQVMgdHMgUkVUVVJOSU5HIHRpbWVzdGFtcCk7CisgICAgICAgIGpzb25fdmFs dWUgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBUdWUgRmViIDIwIDE4OjM0 OjU2IDIwMTgKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAnJHRz JyBQQVNTSU5HIGRhdGUgJzIwMTgtMDItMjEgMTI6MzQ6NTYgKzEwJyBBUyB0cyBSRVRVUk5JTkcg ZGF0ZSk7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorIDAyLTIxLTIwMTgKKygxIHJvdykK KworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAnJHRzJyBQQVNTSU5HIHRpbWUgJzIw MTgtMDItMjEgMTI6MzQ6NTYgKzEwJyBBUyB0cyBSRVRVUk5JTkcgdGltZSk7CisganNvbl92YWx1 ZSAKKy0tLS0tLS0tLS0tLQorIDEyOjM0OjU2CisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVF KGpzb25iICdudWxsJywgJyR0cycgUEFTU0lORyB0aW1ldHogJzIwMTgtMDItMjEgMTI6MzQ6NTYg KzEwJyBBUyB0cyBSRVRVUk5JTkcgdGltZXR6KTsKKyBqc29uX3ZhbHVlICAKKy0tLS0tLS0tLS0t LS0KKyAxMjozNDo1NisxMAorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVs bCcsICckdHMnIFBBU1NJTkcgdGltZXN0YW1wICcyMDE4LTAyLTIxIDEyOjM0OjU2ICsxMCcgQVMg dHMgUkVUVVJOSU5HIHRpbWVzdGFtcCk7CisgICAgICAgIGpzb25fdmFsdWUgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBXZWQgRmViIDIxIDEyOjM0OjU2IDIwMTgKKygxIHJv dykKKworLS0gQWxzbyB0ZXN0IFJFVFVSTklORyBqc29uW2JdCitTRUxFQ1QgSlNPTl9WQUxVRShq c29uYiAnbnVsbCcsICckdHMnIFBBU1NJTkcgdGltZXN0YW1wdHogJzIwMTgtMDItMjEgMTI6MzQ6 NTYgKzEwJyBBUyB0cyBSRVRVUk5JTkcganNvbik7CisgICAgICAgICBqc29uX3ZhbHVlICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAiMjAxOC0wMi0yMVQwMjozNDo1 NiswMDowMCIKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAnJHRz JyBQQVNTSU5HIHRpbWVzdGFtcHR6ICcyMDE4LTAyLTIxIDEyOjM0OjU2ICsxMCcgQVMgdHMgUkVU VVJOSU5HIGpzb25iKTsKKyAgICAgICAgIGpzb25fdmFsdWUgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICIyMDE4LTAyLTIxVDAyOjM0OjU2KzAwOjAwIgorKDEgcm93 KQorCistLSBKU09OX1FVRVJZCistLSBqc29uIGFyZ3VtZW50cyBjdXJyZW50bHkgbm90IHN1cHBv cnRlZAorU0VMRUNUIEpTT05fUVVFUlkoTlVMTCBGT1JNQVQgSlNPTiwgJyQnKTsKK0VSUk9SOiAg SlNPTl9RVUVSWSgpIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQgZm9yIHRoZSBqc29uIHR5cGUKK0xJ TkUgMTogU0VMRUNUIEpTT05fUVVFUlkoTlVMTCBGT1JNQVQgSlNPTiwgJyQnKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgXgorSElOVDogIFRyeSBjYXN0aW5nIHRoZSBhcmd1bWVudCB0byBq c29uYgorU0VMRUNUIEpTT05fVkFMVUUoTlVMTDo6anNvbmIsICckJyk7CisganNvbl92YWx1ZSAK Ky0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCitTRUxFQ1QKKwlKU09OX1FVRVJZKGpzLCAnJCcp LAorCUpTT05fUVVFUlkoanMsICckJyBXSVRIT1VUIFdSQVBQRVIpLAorCUpTT05fUVVFUlkoanMs ICckJyBXSVRIIENPTkRJVElPTkFMIFdSQVBQRVIpLAorCUpTT05fUVVFUlkoanMsICckJyBXSVRI IFVOQ09ORElUSU9OQUwgQVJSQVkgV1JBUFBFUiksCisJSlNPTl9RVUVSWShqcywgJyQnIFdJVEgg QVJSQVkgV1JBUFBFUikKK0ZST00KKwkoVkFMVUVTCisJCShqc29uYiAnbnVsbCcpLAorCQkoJzEy LjMnKSwKKwkJKCd0cnVlJyksCisJCSgnImFhYSInKSwKKwkJKCdbMSwgbnVsbCwgIjIiXScpLAor CQkoJ3siYSI6IDEsICJiIjogWzJdfScpCisJKSBmb28oanMpOworICAgICBqc29uX3F1ZXJ5ICAg ICB8ICAgICBqc29uX3F1ZXJ5ICAgICB8ICAgICBqc29uX3F1ZXJ5ICAgICB8ICAgICAganNvbl9x dWVyeSAgICAgIHwgICAgICBqc29uX3F1ZXJ5ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBudWxsICAgICAgICAgICAgICAgfCBudWxs ICAgICAgICAgICAgICAgfCBbbnVsbF0gICAgICAgICAgICAgfCBbbnVsbF0gICAgICAgICAgICAg ICB8IFtudWxsXQorIDEyLjMgICAgICAgICAgICAgICB8IDEyLjMgICAgICAgICAgICAgICB8IFsx Mi4zXSAgICAgICAgICAgICB8IFsxMi4zXSAgICAgICAgICAgICAgIHwgWzEyLjNdCisgdHJ1ZSAg ICAgICAgICAgICAgIHwgdHJ1ZSAgICAgICAgICAgICAgIHwgW3RydWVdICAgICAgICAgICAgIHwg W3RydWVdICAgICAgICAgICAgICAgfCBbdHJ1ZV0KKyAiYWFhIiAgICAgICAgICAgICAgfCAiYWFh IiAgICAgICAgICAgICAgfCBbImFhYSJdICAgICAgICAgICAgfCBbImFhYSJdICAgICAgICAgICAg ICB8IFsiYWFhIl0KKyBbMSwgbnVsbCwgIjIiXSAgICAgfCBbMSwgbnVsbCwgIjIiXSAgICAgfCBb MSwgbnVsbCwgIjIiXSAgICAgfCBbWzEsIG51bGwsICIyIl1dICAgICB8IFtbMSwgbnVsbCwgIjIi XV0KKyB7ImEiOiAxLCAiYiI6IFsyXX0gfCB7ImEiOiAxLCAiYiI6IFsyXX0gfCB7ImEiOiAxLCAi YiI6IFsyXX0gfCBbeyJhIjogMSwgImIiOiBbMl19XSB8IFt7ImEiOiAxLCAiYiI6IFsyXX1dCiso NiByb3dzKQorCitTRUxFQ1QKKwlKU09OX1FVRVJZKGpzLCAnc3RyaWN0ICRbKl0nKSBBUyAidW5z cGVjIiwKKwlKU09OX1FVRVJZKGpzLCAnc3RyaWN0ICRbKl0nIFdJVEhPVVQgV1JBUFBFUikgQVMg IndpdGhvdXQiLAorCUpTT05fUVVFUlkoanMsICdzdHJpY3QgJFsqXScgV0lUSCBDT05ESVRJT05B TCBXUkFQUEVSKSBBUyAid2l0aCBjb25kIiwKKwlKU09OX1FVRVJZKGpzLCAnc3RyaWN0ICRbKl0n IFdJVEggVU5DT05ESVRJT05BTCBBUlJBWSBXUkFQUEVSKSBBUyAid2l0aCB1bmNvbmQiLAorCUpT T05fUVVFUlkoanMsICdzdHJpY3QgJFsqXScgV0lUSCBBUlJBWSBXUkFQUEVSKSBBUyAid2l0aCIK K0ZST00KKwkoVkFMVUVTCisJCShqc29uYiAnMScpLAorCQkoJ1tdJyksCisJCSgnW251bGxdJyks CisJCSgnWzEyLjNdJyksCisJCSgnW3RydWVdJyksCisJCSgnWyJhYWEiXScpLAorCQkoJ1tbMSwg MiwgM11dJyksCisJCSgnW3siYSI6IDEsICJiIjogWzJdfV0nKSwKKwkJKCdbMSwgIjIiLCBudWxs LCBbM11dJykKKwkpIGZvbyhqcyk7CisgICAgICAgdW5zcGVjICAgICAgIHwgICAgICB3aXRob3V0 ICAgICAgIHwgICAgICB3aXRoIGNvbmQgICAgICB8ICAgICB3aXRoIHVuY29uZCAgICAgIHwgICAg ICAgICB3aXRoICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAg IHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIHwgCisgICAgICAg ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8 ICAgICAgICAgICAgICAgICAgICAgIHwgCisgbnVsbCAgICAgICAgICAgICAgIHwgbnVsbCAgICAg ICAgICAgICAgIHwgW251bGxdICAgICAgICAgICAgICB8IFtudWxsXSAgICAgICAgICAgICAgIHwg W251bGxdCisgMTIuMyAgICAgICAgICAgICAgIHwgMTIuMyAgICAgICAgICAgICAgIHwgWzEyLjNd ICAgICAgICAgICAgICB8IFsxMi4zXSAgICAgICAgICAgICAgIHwgWzEyLjNdCisgdHJ1ZSAgICAg ICAgICAgICAgIHwgdHJ1ZSAgICAgICAgICAgICAgIHwgW3RydWVdICAgICAgICAgICAgICB8IFt0 cnVlXSAgICAgICAgICAgICAgIHwgW3RydWVdCisgImFhYSIgICAgICAgICAgICAgIHwgImFhYSIg ICAgICAgICAgICAgIHwgWyJhYWEiXSAgICAgICAgICAgICB8IFsiYWFhIl0gICAgICAgICAgICAg IHwgWyJhYWEiXQorIFsxLCAyLCAzXSAgICAgICAgICB8IFsxLCAyLCAzXSAgICAgICAgICB8IFsx LCAyLCAzXSAgICAgICAgICAgfCBbWzEsIDIsIDNdXSAgICAgICAgICB8IFtbMSwgMiwgM11dCisg eyJhIjogMSwgImIiOiBbMl19IHwgeyJhIjogMSwgImIiOiBbMl19IHwgeyJhIjogMSwgImIiOiBb Ml19ICB8IFt7ImEiOiAxLCAiYiI6IFsyXX1dIHwgW3siYSI6IDEsICJiIjogWzJdfV0KKyAgICAg ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCBbMSwgIjIiLCBudWxsLCBbM11d IHwgWzEsICIyIiwgbnVsbCwgWzNdXSAgfCBbMSwgIjIiLCBudWxsLCBbM11dCisoOSByb3dzKQor CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnImFhYSInLCAnJCcgUkVUVVJOSU5HIHRleHQpOwor IGpzb25fcXVlcnkgCistLS0tLS0tLS0tLS0KKyAiYWFhIgorKDEgcm93KQorCitTRUxFQ1QgSlNP Tl9RVUVSWShqc29uYiAnImFhYSInLCAnJCcgUkVUVVJOSU5HIHRleHQgS0VFUCBRVU9URVMpOwor IGpzb25fcXVlcnkgCistLS0tLS0tLS0tLS0KKyAiYWFhIgorKDEgcm93KQorCitTRUxFQ1QgSlNP Tl9RVUVSWShqc29uYiAnImFhYSInLCAnJCcgUkVUVVJOSU5HIHRleHQgS0VFUCBRVU9URVMgT04g U0NBTEFSIFNUUklORyk7CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0tLQorICJhYWEiCisoMSBy b3cpCisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICciYWFhIicsICckJyBSRVRVUk5JTkcgdGV4 dCBPTUlUIFFVT1RFUyk7CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0tLQorIGFhYQorKDEgcm93 KQorCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnImFhYSInLCAnJCcgUkVUVVJOSU5HIHRleHQg T01JVCBRVU9URVMgT04gU0NBTEFSIFNUUklORyk7CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0t LQorIGFhYQorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnImFhYSInLCAnJCcg T01JVCBRVU9URVMgRVJST1IgT04gRVJST1IpOworRVJST1I6ICBpbnZhbGlkIGlucHV0IHN5bnRh eCBmb3IgdHlwZSBqc29uCitERVRBSUw6ICBUb2tlbiAiYWFhIiBpcyBpbnZhbGlkLgorQ09OVEVY VDogIEpTT04gZGF0YSwgbGluZSAxOiBhYWEKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICciYWFh IicsICckJyBSRVRVUk5JTkcganNvbiBPTUlUIFFVT1RFUyBFUlJPUiBPTiBFUlJPUik7CitFUlJP UjogIGludmFsaWQgaW5wdXQgc3ludGF4IGZvciB0eXBlIGpzb24KK0RFVEFJTDogIFRva2VuICJh YWEiIGlzIGludmFsaWQuCitDT05URVhUOiAgSlNPTiBkYXRhLCBsaW5lIDE6IGFhYQorU0VMRUNU IEpTT05fUVVFUlkoanNvbmIgJyJhYWEiJywgJyQnIFJFVFVSTklORyBieXRlYSBGT1JNQVQgSlNP TiBPTUlUIFFVT1RFUyBFUlJPUiBPTiBFUlJPUik7CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0t LQorIFx4NjE2MTYxCisoMSByb3cpCisKKy0tIEJlaGF2aW9yIHdoZW4gYSBSRVRVUk5JTkcgdHlw ZSBoYXMgdHlwbW9kICE9IC0xCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnImFhYSInLCAnJCcg UkVUVVJOSU5HIGNoYXIoMikpOworIGpzb25fcXVlcnkgCistLS0tLS0tLS0tLS0KKyAiYQorKDEg cm93KQorCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnImFhYSInLCAnJCcgUkVUVVJOSU5HIGNo YXIoMikgT01JVCBRVU9URVMpOworIGpzb25fcXVlcnkgCistLS0tLS0tLS0tLS0KKyBhYQorKDEg cm93KQorCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnImFhYSInLCAnJC5hJyBSRVRVUk5JTkcg Y2hhcigyKSBPTUlUIFFVT1RFUyBERUZBVUxUICdiYmInIE9OIEVNUFRZKTsKKyBqc29uX3F1ZXJ5 IAorLS0tLS0tLS0tLS0tCisgYmIKKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIg JyJhYWEiJywgJyQuYScgUkVUVVJOSU5HIGNoYXIoMikgT01JVCBRVU9URVMgREVGQVVMVCAnImJi YiInOjpqc29uYiBPTiBFTVBUWSk7CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0tLQorICJiCiso MSByb3cpCisKKy0tIFFVT1RFUyBiZWhhdmlvciBzaG91bGQgbm90IGJlIHNwZWNpZmllZCB3aGVu IFdJVEggV1JBUFBFUiB1c2VkOgorLS0gU2hvdWxkIGZhaWwKK1NFTEVDVCBKU09OX1FVRVJZKGpz b25iICdbMV0nLCAnJCcgV0lUSCBXUkFQUEVSIE9NSVQgUVVPVEVTKTsKK0VSUk9SOiAgU1FML0pT T04gUVVPVEVTIGJlaGF2aW9yIG11c3Qgbm90IGJlIHNwZWNpZmllZCB3aGVuIFdJVEggV1JBUFBF UiBpcyB1c2VkCitMSU5FIDE6IFNFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMV0nLCAnJCcgV0lU SCBXUkFQUEVSIE9NSVQgUVVPVEVTKS4uLgorICAgICAgICAgICAgICAgXgorU0VMRUNUIEpTT05f UVVFUlkoanNvbmIgJ1sxXScsICckJyBXSVRIIFdSQVBQRVIgS0VFUCBRVU9URVMpOworRVJST1I6 ICBTUUwvSlNPTiBRVU9URVMgYmVoYXZpb3IgbXVzdCBub3QgYmUgc3BlY2lmaWVkIHdoZW4gV0lU SCBXUkFQUEVSIGlzIHVzZWQKK0xJTkUgMTogU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxXScs ICckJyBXSVRIIFdSQVBQRVIgS0VFUCBRVU9URVMpLi4uCisgICAgICAgICAgICAgICBeCitTRUxF Q1QgSlNPTl9RVUVSWShqc29uYiAnWzFdJywgJyQnIFdJVEggQ09ORElUSU9OQUwgV1JBUFBFUiBL RUVQIFFVT1RFUyk7CitFUlJPUjogIFNRTC9KU09OIFFVT1RFUyBiZWhhdmlvciBtdXN0IG5vdCBi ZSBzcGVjaWZpZWQgd2hlbiBXSVRIIFdSQVBQRVIgaXMgdXNlZAorTElORSAxOiBTRUxFQ1QgSlNP Tl9RVUVSWShqc29uYiAnWzFdJywgJyQnIFdJVEggQ09ORElUSU9OQUwgV1JBUFBFUiAuLi4KKyAg ICAgICAgICAgICAgIF4KK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMV0nLCAnJCcgV0lUSCBD T05ESVRJT05BTCBXUkFQUEVSIE9NSVQgUVVPVEVTKTsKK0VSUk9SOiAgU1FML0pTT04gUVVPVEVT IGJlaGF2aW9yIG11c3Qgbm90IGJlIHNwZWNpZmllZCB3aGVuIFdJVEggV1JBUFBFUiBpcyB1c2Vk CitMSU5FIDE6IFNFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMV0nLCAnJCcgV0lUSCBDT05ESVRJ T05BTCBXUkFQUEVSIC4uLgorICAgICAgICAgICAgICAgXgorLS0gU2hvdWxkIHN1Y2NlZWQKK1NF TEVDVCBKU09OX1FVRVJZKGpzb25iICdbMV0nLCAnJCcgV0lUSE9VVCBXUkFQUEVSIE9NSVQgUVVP VEVTKTsKKyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0tCisgWzFdCisoMSByb3cpCisKK1NFTEVD VCBKU09OX1FVRVJZKGpzb25iICdbMV0nLCAnJCcgV0lUSE9VVCBXUkFQUEVSIEtFRVAgUVVPVEVT KTsKKyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0tCisgWzFdCisoMSByb3cpCisKKy0tIHRlc3Qg UVVPVEVTIGJlaGF2aW9yLgorU0VMRUNUIEpTT05fUVVFUlkoanNvbmIneyJyZWMiOiAiezEsMiwz fSJ9JywgJyQucmVjJyByZXR1cm5pbmcgaW50W10gb21pdCBxdW90ZXMpOworIGpzb25fcXVlcnkg CistLS0tLS0tLS0tLS0KKyB7MSwyLDN9CisoMSByb3cpCisKK1NFTEVDVCBKU09OX1FVRVJZKGpz b25iJ3sicmVjIjogInsxLDIsM30ifScsICckLnJlYycgcmV0dXJuaW5nIGludFtdIGtlZXAgcXVv dGVzKTsKKyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKK1NFTEVDVCBK U09OX1FVRVJZKGpzb25iJ3sicmVjIjogInsxLDIsM30ifScsICckLnJlYycgcmV0dXJuaW5nIGlu dFtdIGtlZXAgcXVvdGVzIGVycm9yIG9uIGVycm9yKTsKK0VSUk9SOiAgZXhwZWN0ZWQgSlNPTiBh cnJheQorU0VMRUNUIEpTT05fUVVFUlkoanNvbmIneyJyZWMiOiAiWzEsMl0ifScsICckLnJlYycg cmV0dXJuaW5nIGludDRyYW5nZSBvbWl0IHF1b3Rlcyk7CisganNvbl9xdWVyeSAKKy0tLS0tLS0t LS0tLQorIFsxLDMpCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iJ3sicmVjIjog IlsxLDJdIn0nLCAnJC5yZWMnIHJldHVybmluZyBpbnQ0cmFuZ2Uga2VlcCBxdW90ZXMpOworIGpz b25fcXVlcnkgCistLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlko anNvbmIneyJyZWMiOiAiWzEsMl0ifScsICckLnJlYycgCXJldHVybmluZyBpbnQ0cmFuZ2Uga2Vl cCBxdW90ZXMgZXJyb3Igb24gZXJyb3IpOworRVJST1I6ICBtYWxmb3JtZWQgcmFuZ2UgbGl0ZXJh bDogIiJbMSwyXSIiCitERVRBSUw6ICBNaXNzaW5nIGxlZnQgcGFyZW50aGVzaXMgb3IgYnJhY2tl dC4KK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbXScsICckWypdJyk7CisganNvbl9xdWVyeSAK Ky0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnW10n LCAnJFsqXScgTlVMTCBPTiBFTVBUWSk7CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0tLQorIAor KDEgcm93KQorCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnW10nLCAnJFsqXScgRU1QVFkgT04g RU1QVFkpOworIGpzb25fcXVlcnkgCistLS0tLS0tLS0tLS0KKyBbXQorKDEgcm93KQorCitTRUxF Q1QgSlNPTl9RVUVSWShqc29uYiAnW10nLCAnJFsqXScgRU1QVFkgQVJSQVkgT04gRU1QVFkpOwor IGpzb25fcXVlcnkgCistLS0tLS0tLS0tLS0KKyBbXQorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9R VUVSWShqc29uYiAnW10nLCAnJFsqXScgRU1QVFkgT0JKRUNUIE9OIEVNUFRZKTsKKyBqc29uX3F1 ZXJ5IAorLS0tLS0tLS0tLS0tCisge30KKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNv bmIgJ1tdJywgJyRbKl0nIEVSUk9SIE9OIEVNUFRZKTsKK0VSUk9SOiAgbm8gU1FML0pTT04gaXRl bQorU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1tdJywgJyRbKl0nIERFRkFVTFQgJyJlbXB0eSIn IE9OIEVNUFRZKTsKKyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0tCisgImVtcHR5IgorKDEgcm93 KQorCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnW10nLCAnJFsqXScgRVJST1IgT04gRU1QVFkg TlVMTCBPTiBFUlJPUik7CitFUlJPUjogIG5vIFNRTC9KU09OIGl0ZW0KK1NFTEVDVCBKU09OX1FV RVJZKGpzb25iICdbXScsICckWypdJyBFUlJPUiBPTiBFTVBUWSBFTVBUWSBBUlJBWSBPTiBFUlJP Uik7CitFUlJPUjogIG5vIFNRTC9KU09OIGl0ZW0KK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdb XScsICckWypdJyBFUlJPUiBPTiBFTVBUWSBFTVBUWSBPQkpFQ1QgT04gRVJST1IpOworRVJST1I6 ICBubyBTUUwvSlNPTiBpdGVtCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnW10nLCAnJFsqXScg RVJST1IgT04gRU1QVFkgRVJST1IgT04gRVJST1IpOworRVJST1I6ICBubyBTUUwvSlNPTiBpdGVt CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnW10nLCAnJFsqXScgRVJST1IgT04gRVJST1IpOwor RVJST1I6ICBubyBTUUwvSlNPTiBpdGVtCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEsMl0n LCAnJFsqXScgRVJST1IgT04gRVJST1IpOworRVJST1I6ICBKU09OIHBhdGggZXhwcmVzc2lvbiBp biBKU09OX1FVRVJZIHNob3VsZCByZXR1cm4gc2luZ2xldG9uIGl0ZW0gd2l0aG91dCB3cmFwcGVy CitISU5UOiAgVXNlIFdJVEggV1JBUFBFUiBjbGF1c2UgdG8gd3JhcCBTUUwvSlNPTiBpdGVtIHNl cXVlbmNlIGludG8gYXJyYXkuCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEsMl0nLCAnJFsq XScgREVGQVVMVCAnImVtcHR5IicgT04gRVJST1IpOworIGpzb25fcXVlcnkgCistLS0tLS0tLS0t LS0KKyAiZW1wdHkiCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMSwyXScs ICckJyBSRVRVUk5JTkcganNvbik7CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0tLQorIFsxLCAy XQorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEsMl0nLCAnJCcgUkVUVVJO SU5HIGpzb24gRk9STUFUIEpTT04pOworIGpzb25fcXVlcnkgCistLS0tLS0tLS0tLS0KKyBbMSwg Ml0KKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxLDJdJywgJyQnIFJFVFVS TklORyBqc29uYik7CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0tLQorIFsxLCAyXQorKDEgcm93 KQorCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEsMl0nLCAnJCcgUkVUVVJOSU5HIGpzb25i IEZPUk1BVCBKU09OKTsKKyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0tCisgWzEsIDJdCisoMSBy b3cpCisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMSwyXScsICckJyBSRVRVUk5JTkcgdGV4 dCk7CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0tLQorIFsxLCAyXQorKDEgcm93KQorCitTRUxF Q1QgSlNPTl9RVUVSWShqc29uYiAnWzEsMl0nLCAnJCcgUkVUVVJOSU5HIGNoYXIoMTApKTsKKyBq c29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0tCisgWzEsIDJdICAgIAorKDEgcm93KQorCitTRUxFQ1Qg SlNPTl9RVUVSWShqc29uYiAnWzEsMl0nLCAnJCcgUkVUVVJOSU5HIGNoYXIoMykpOworIGpzb25f cXVlcnkgCistLS0tLS0tLS0tLS0KKyBbMSwKKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlko anNvbmIgJ1sxLDJdJywgJyQnIFJFVFVSTklORyB0ZXh0IEZPUk1BVCBKU09OKTsKKyBqc29uX3F1 ZXJ5IAorLS0tLS0tLS0tLS0tCisgWzEsIDJdCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1FVRVJZ KGpzb25iICdbMSwyXScsICckJyBSRVRVUk5JTkcgYnl0ZWEpOworICAganNvbl9xdWVyeSAgIAor LS0tLS0tLS0tLS0tLS0tLQorIFx4NWIzMTJjMjAzMjVkCisoMSByb3cpCisKK1NFTEVDVCBKU09O X1FVRVJZKGpzb25iICdbMSwyXScsICckJyBSRVRVUk5JTkcgYnl0ZWEgRk9STUFUIEpTT04pOwor ICAganNvbl9xdWVyeSAgIAorLS0tLS0tLS0tLS0tLS0tLQorIFx4NWIzMTJjMjAzMjVkCisoMSBy b3cpCisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMSwyXScsICckWypdJyBSRVRVUk5JTkcg Ynl0ZWEgRU1QVFkgT0JKRUNUIE9OIEVSUk9SKTsKK0VSUk9SOiAgY2Fubm90IGNhc3QgYmVoYXZp b3IgZXhwcmVzc2lvbiBvZiB0eXBlIGpzb25iIHRvIGJ5dGVhCitMSU5FIDE6IC4uLiBKU09OX1FV RVJZKGpzb25iICdbMSwyXScsICckWypdJyBSRVRVUk5JTkcgYnl0ZWEgRU1QVFkgT0JKRS4uLgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF4KK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMSwyXScsICckWypdJyBSRVRVUk5JTkcg Ynl0ZWEgRk9STUFUIEpTT04gRU1QVFkgT0JKRUNUIE9OIEVSUk9SKTsKK0VSUk9SOiAgY2Fubm90 IGNhc3QgYmVoYXZpb3IgZXhwcmVzc2lvbiBvZiB0eXBlIGpzb25iIHRvIGJ5dGVhCitMSU5FIDE6 IC4uLmpzb25iICdbMSwyXScsICckWypdJyBSRVRVUk5JTkcgYnl0ZWEgRk9STUFUIEpTT04gRU1Q VFkgT0JKRS4uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF4KK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMSwyXScsICckWypd JyBSRVRVUk5JTkcganNvbiBFTVBUWSBPQkpFQ1QgT04gRVJST1IpOworIGpzb25fcXVlcnkgCist LS0tLS0tLS0tLS0KKyB7fQorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEs Ml0nLCAnJFsqXScgUkVUVVJOSU5HIGpzb25iIEVNUFRZIE9CSkVDVCBPTiBFUlJPUik7CisganNv bl9xdWVyeSAKKy0tLS0tLS0tLS0tLQorIHt9CisoMSByb3cpCisKK1NFTEVDVCBKU09OX1FVRVJZ KGpzb25iICdbMyw0XScsICckWypdJyBSRVRVUk5JTkcgYmlnaW50W10gRU1QVFkgT0JKRUNUIE9O IEVSUk9SKTsKK0VSUk9SOiAgY2Fubm90IGNhc3QgYmVoYXZpb3IgZXhwcmVzc2lvbiBvZiB0eXBl IGpzb25iIHRvIGJpZ2ludFtdCitMSU5FIDE6IC4uLk9OX1FVRVJZKGpzb25iICdbMyw0XScsICck WypdJyBSRVRVUk5JTkcgYmlnaW50W10gRU1QVFkgT0JKRS4uLgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KK1NFTEVDVCBKU09O X1FVRVJZKGpzb25iICciWzMsNF0iJywgJyRbKl0nIFJFVFVSTklORyBiaWdpbnRbXSBFTVBUWSBP QkpFQ1QgT04gRVJST1IpOworRVJST1I6ICBjYW5ub3QgY2FzdCBiZWhhdmlvciBleHByZXNzaW9u IG9mIHR5cGUganNvbmIgdG8gYmlnaW50W10KK0xJTkUgMTogLi4uX1FVRVJZKGpzb25iICciWzMs NF0iJywgJyRbKl0nIFJFVFVSTklORyBiaWdpbnRbXSBFTVBUWSBPQkpFLi4uCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorLS0g Q29lcmNpb24gZmFpbHMgd2l0aCBxdW90ZXMgb24KK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICci MTIzLjEiJywgJyQnIFJFVFVSTklORyBpbnQyIGVycm9yIG9uIGVycm9yKTsKK0VSUk9SOiAgaW52 YWxpZCBpbnB1dCBzeW50YXggZm9yIHR5cGUgc21hbGxpbnQ6ICIiMTIzLjEiIgorU0VMRUNUIEpT T05fUVVFUlkoanNvbmIgJyIxMjMuMSInLCAnJCcgUkVUVVJOSU5HIGludDQgZXJyb3Igb24gZXJy b3IpOworRVJST1I6ICBpbnZhbGlkIGlucHV0IHN5bnRheCBmb3IgdHlwZSBpbnRlZ2VyOiAiIjEy My4xIiIKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICciMTIzLjEiJywgJyQnIFJFVFVSTklORyBp bnQ4IGVycm9yIG9uIGVycm9yKTsKK0VSUk9SOiAgaW52YWxpZCBpbnB1dCBzeW50YXggZm9yIHR5 cGUgYmlnaW50OiAiIjEyMy4xIiIKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICciMTIzLjEiJywg JyQnIFJFVFVSTklORyBib29sIGVycm9yIG9uIGVycm9yKTsKK0VSUk9SOiAgaW52YWxpZCBpbnB1 dCBzeW50YXggZm9yIHR5cGUgYm9vbGVhbjogIiIxMjMuMSIiCitTRUxFQ1QgSlNPTl9RVUVSWShq c29uYiAnIjEyMy4xIicsICckJyBSRVRVUk5JTkcgbnVtZXJpYyBlcnJvciBvbiBlcnJvcik7CitF UlJPUjogIGludmFsaWQgaW5wdXQgc3ludGF4IGZvciB0eXBlIG51bWVyaWM6ICIiMTIzLjEiIgor U0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJyIxMjMuMSInLCAnJCcgUkVUVVJOSU5HIHJlYWwgZXJy b3Igb24gZXJyb3IpOworRVJST1I6ICBpbnZhbGlkIGlucHV0IHN5bnRheCBmb3IgdHlwZSByZWFs OiAiIjEyMy4xIiIKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICciMTIzLjEiJywgJyQnIFJFVFVS TklORyBmbG9hdDggZXJyb3Igb24gZXJyb3IpOworRVJST1I6ICBpbnZhbGlkIGlucHV0IHN5bnRh eCBmb3IgdHlwZSBkb3VibGUgcHJlY2lzaW9uOiAiIjEyMy4xIiIKKy0tIEZpbmUgd2l0aCBPTUlU IFFVT1RFUworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJyIxMjMuMSInLCAnJCcgUkVUVVJOSU5H IGludDIgb21pdCBxdW90ZXMgZXJyb3Igb24gZXJyb3IpOworRVJST1I6ICBpbnZhbGlkIGlucHV0 IHN5bnRheCBmb3IgdHlwZSBzbWFsbGludDogIjEyMy4xIgorU0VMRUNUIEpTT05fUVVFUlkoanNv bmIgJyIxMjMuMSInLCAnJCcgUkVUVVJOSU5HIGZsb2F0OCBvbWl0IHF1b3RlcyBlcnJvciBvbiBl cnJvcik7CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0tLQorICAgICAgMTIzLjEKKygxIHJvdykK KworLS0gUkVUVUdOSU5HIHBzZXVkby10eXBlcyBub3QgYWxsb3dlZAorU0VMRUNUIEpTT05fUVVF UlkoanNvbmIgJ1szLDRdJywgJyRbKl0nIFJFVFVSTklORyBhbnlhcnJheSBFTVBUWSBPQkpFQ1Qg T04gRVJST1IpOworRVJST1I6ICByZXR1cm5pbmcgcHNldWRvLXR5cGVzIGlzIG5vdCBzdXBwb3J0 ZWQgaW4gU1FML0pTT04gZnVuY3Rpb25zCitTRUxFQ1QKKwl4LCB5LAorCUpTT05fUVVFUlkoCisJ CWpzb25iICdbMSwyLDMsNCw1LG51bGxdJywKKwkJJyRbKl0gPyAoQCA+PSAkeCAmJiBAIDw9ICR5 KScKKwkJUEFTU0lORyB4IEFTIHgsIHkgQVMgeQorCQlXSVRIIENPTkRJVElPTkFMIFdSQVBQRVIK KwkJRU1QVFkgQVJSQVkgT04gRU1QVFkKKwkpIGxpc3QKK0ZST00KKwlnZW5lcmF0ZV9zZXJpZXMo MCwgNCkgeCwKKwlnZW5lcmF0ZV9zZXJpZXMoMCwgNCkgeTsKKyB4IHwgeSB8ICAgICBsaXN0ICAg ICAKKy0tLSstLS0rLS0tLS0tLS0tLS0tLS0KKyAwIHwgMCB8IFtdCisgMCB8IDEgfCBbMV0KKyAw IHwgMiB8IFsxLCAyXQorIDAgfCAzIHwgWzEsIDIsIDNdCisgMCB8IDQgfCBbMSwgMiwgMywgNF0K KyAxIHwgMCB8IFtdCisgMSB8IDEgfCBbMV0KKyAxIHwgMiB8IFsxLCAyXQorIDEgfCAzIHwgWzEs IDIsIDNdCisgMSB8IDQgfCBbMSwgMiwgMywgNF0KKyAyIHwgMCB8IFtdCisgMiB8IDEgfCBbXQor IDIgfCAyIHwgWzJdCisgMiB8IDMgfCBbMiwgM10KKyAyIHwgNCB8IFsyLCAzLCA0XQorIDMgfCAw IHwgW10KKyAzIHwgMSB8IFtdCisgMyB8IDIgfCBbXQorIDMgfCAzIHwgWzNdCisgMyB8IDQgfCBb MywgNF0KKyA0IHwgMCB8IFtdCisgNCB8IDEgfCBbXQorIDQgfCAyIHwgW10KKyA0IHwgMyB8IFtd CisgNCB8IDQgfCBbNF0KKygyNSByb3dzKQorCistLSByZWNvcmQgdHlwZSByZXR1cm5pbmcgd2l0 aCBxdW90ZXMgYmVoYXZpb3IuCitDUkVBVEUgVFlQRSBjb21wX2FiYyBBUyAoYSB0ZXh0LCBiIGlu dCwgYyB0aW1lc3RhbXApOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIneyJyZWMiOiAiKGFiYyw0 MiwwMS4wMi4yMDAzKSJ9JywgJyQucmVjJyByZXR1cm5pbmcgY29tcF9hYmMgb21pdCBxdW90ZXMp OworICAgICAgICAgICAgIGpzb25fcXVlcnkgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIChhYmMsNDIsIlRodSBKYW4gMDIgMDA6MDA6MDAgMjAw MyIpCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iJ3sicmVjIjogIihhYmMsNDIs MDEuMDIuMjAwMykifScsICckLnJlYycgcmV0dXJuaW5nIGNvbXBfYWJjIGtlZXAgcXVvdGVzKTsK KyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1FV RVJZKGpzb25iJ3sicmVjIjogIihhYmMsNDIsMDEuMDIuMjAwMykifScsICckLnJlYycgcmV0dXJu aW5nIGNvbXBfYWJjIGtlZXAgcXVvdGVzIGVycm9yIG9uIGVycm9yKTsKK0VSUk9SOiAgY2Fubm90 IGNhbGwgcG9wdWxhdGVfY29tcG9zaXRlIG9uIGEgc2NhbGFyCitEUk9QIFRZUEUgY29tcF9hYmM7 CistLSBFeHRlbnNpb246IHJlY29yZCB0eXBlcyByZXR1cm5pbmcKK0NSRUFURSBUWVBFIHNxbGpz b25iX3JlYyBBUyAoYSBpbnQsIHQgdGV4dCwganMganNvbiwgamIganNvbmIsIGpzYSBqc29uW10p OworQ1JFQVRFIFRZUEUgc3FsanNvbmJfcmVjYSBBUyAocmVjYSBzcWxqc29uYl9yZWNbXSk7CitT RUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnW3siYSI6IDEsICJiIjogImZvbyIsICJ0IjogImFhYSIs ICJqcyI6IFsxLCAiMiIsIHt9XSwgImpiIjogeyJ4IjogWzEsICIyIiwge31dfX0sICB7ImEiOiAy fV0nLCAnJFswXScgUkVUVVJOSU5HIHNxbGpzb25iX3JlYyk7CisgICAgICAgICAgICAgICAgICAg ICBqc29uX3F1ZXJ5ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAoMSxhYWEsIlsxLCAiIjIiIiwge31d IiwieyIieCIiOiBbMSwgIiIyIiIsIHt9XX0iLCkKKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVF UlkoanNvbmIgJ1t7ImEiOiAiYSIsICJiIjogImZvbyIsICJ0IjogImFhYSIsICJqcyI6IFsxLCAi MiIsIHt9XSwgImpiIjogeyJ4IjogWzEsICIyIiwge31dfX0sICB7ImEiOiAyfV0nLCAnJFswXScg UkVUVVJOSU5HIHNxbGpzb25iX3JlYyBFUlJPUiBPTiBFUlJPUik7CitFUlJPUjogIGludmFsaWQg aW5wdXQgc3ludGF4IGZvciB0eXBlIGludGVnZXI6ICJhIgorU0VMRUNUIEpTT05fUVVFUlkoanNv bmIgJ1t7ImEiOiAiYSIsICJiIjogImZvbyIsICJ0IjogImFhYSIsICJqcyI6IFsxLCAiMiIsIHt9 XSwgImpiIjogeyJ4IjogWzEsICIyIiwge31dfX0sICB7ImEiOiAyfV0nLCAnJFswXScgUkVUVVJO SU5HIHNxbGpzb25iX3JlYyk7CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0tLQorIAorKDEgcm93 KQorCitTRUxFQ1QgKiBGUk9NIHVubmVzdCgoSlNPTl9RVUVSWShqc29uYiAneyJqc2EiOiAgW3si YSI6IDEsICJiIjogWyJmb28iXX0sIHsiYSI6IDIsICJjIjoge319LCAxMjNdfScsICckJyBSRVRV Uk5JTkcgc3FsanNvbmJfcmVjKSkuanNhKTsKKyAgICAgICAgIHVubmVzdCAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgeyJhIjogMSwgImIiOiBbImZvbyJdfQorIHsiYSI6IDIs ICJjIjoge319CisgMTIzCisoMyByb3dzKQorCitTRUxFQ1QgKiBGUk9NIHVubmVzdCgoSlNPTl9R VUVSWShqc29uYiAneyJyZWNhIjogW3siYSI6IDEsICJ0IjogWyJmb28iLCBbXV19LCB7ImEiOiAy LCAiamIiOiBbe30sIHRydWVdfV19JywgJyQnIFJFVFVSTklORyBzcWxqc29uYl9yZWNhKSkucmVj YSk7CisgYSB8ICAgICAgdCAgICAgIHwganMgfCAgICAgamIgICAgIHwganNhIAorLS0tKy0tLS0t LS0tLS0tLS0rLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0KKyAxIHwgWyJmb28iLCBbXV0gfCAgICB8 ICAgICAgICAgICAgfCAKKyAyIHwgICAgICAgICAgICAgfCAgICB8IFt7fSwgdHJ1ZV0gfCAKKygy IHJvd3MpCisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbeyJhIjogMSwgImIiOiAiZm9vIiwg InQiOiAiYWFhIiwgImpzIjogWzEsICIyIiwge31dLCAiamIiOiB7IngiOiBbMSwgIjIiLCB7fV19 fSwgIHsiYSI6IDJ9XScsICckWzBdJyBSRVRVUk5JTkcganNvbnBhdGgpOworIGpzb25fcXVlcnkg CistLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1t7 ImEiOiAxLCAiYiI6ICJmb28iLCAidCI6ICJhYWEiLCAianMiOiBbMSwgIjIiLCB7fV0sICJqYiI6 IHsieCI6IFsxLCAiMiIsIHt9XX19LCAgeyJhIjogMn1dJywgJyRbMF0nIFJFVFVSTklORyBqc29u cGF0aCBFUlJPUiBPTiBFUlJPUik7CitFUlJPUjogIHN5bnRheCBlcnJvciBhdCBvciBuZWFyICJ7 IiBvZiBqc29ucGF0aCBpbnB1dAorLS0gRXh0ZW5zaW9uOiBhcnJheSB0eXBlcyByZXR1cm5pbmcK K1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMSwyLG51bGwsIjMiXScsICckWypdJyBSRVRVUk5J TkcgaW50W10gV0lUSCBXUkFQUEVSKTsKKyAganNvbl9xdWVyeSAgCistLS0tLS0tLS0tLS0tLQor IHsxLDIsTlVMTCwzfQorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEsMixu dWxsLCJhIl0nLCAnJFsqXScgUkVUVVJOSU5HIGludFtdIFdJVEggV1JBUFBFUiBFUlJPUiBPTiBF UlJPUik7CitFUlJPUjogIGludmFsaWQgaW5wdXQgc3ludGF4IGZvciB0eXBlIGludGVnZXI6ICJh IgorU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxLDIsbnVsbCwiYSJdJywgJyRbKl0nIFJFVFVS TklORyBpbnRbXSBXSVRIIFdSQVBQRVIpOworIGpzb25fcXVlcnkgCistLS0tLS0tLS0tLS0KKyAK KygxIHJvdykKKworU0VMRUNUICogRlJPTSB1bm5lc3QoSlNPTl9RVUVSWShqc29uYiAnW3siYSI6 IDEsICJ0IjogWyJmb28iLCBbXV19LCB7ImEiOiAyLCAiamIiOiBbe30sIHRydWVdfV0nLCAnJCcg UkVUVVJOSU5HIHNxbGpzb25iX3JlY1tdKSk7CisgYSB8ICAgICAgdCAgICAgIHwganMgfCAgICAg amIgICAgIHwganNhIAorLS0tKy0tLS0tLS0tLS0tLS0rLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0K KyAxIHwgWyJmb28iLCBbXV0gfCAgICB8ICAgICAgICAgICAgfCAKKyAyIHwgICAgICAgICAgICAg fCAgICB8IFt7fSwgdHJ1ZV0gfCAKKygyIHJvd3MpCisKKy0tIEV4dGVuc2lvbjogZG9tYWluIHR5 cGVzIHJldHVybmluZworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ3siYSI6IDF9JywgJyQuYScg UkVUVVJOSU5HIHNxbGpzb25iX2ludF9ub3RfbnVsbCk7CisganNvbl9xdWVyeSAKKy0tLS0tLS0t LS0tLQorICAgICAgICAgIDEKKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ3si YSI6IDF9JywgJyQuYicgUkVUVVJOSU5HIHNxbGpzb25iX2ludF9ub3RfbnVsbCk7CisganNvbl9x dWVyeSAKKy0tLS0tLS0tLS0tLQorICAgICAgICAgICAKKygxIHJvdykKKworU0VMRUNUIEpTT05f UVVFUlkoanNvbmIgJ3siYSI6IDF9JywgJyQuYicgUkVUVVJOSU5HIHNxbGpzb25iX2ludF9ub3Rf bnVsbCBFUlJPUiBPTiBFUlJPUik7CitFUlJPUjogIG5vIFNRTC9KU09OIGl0ZW0KKy0tIFRlc3Qg dGltZXN0YW1wdHogcGFzc2luZyBhbmQgb3V0cHV0CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAn bnVsbCcsICckdHMnIFBBU1NJTkcgdGltZXN0YW1wdHogJzIwMTgtMDItMjEgMTI6MzQ6NTYgKzEw JyBBUyB0cyk7CisgICAgICAgICBqc29uX3F1ZXJ5ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAiMjAxOC0wMi0yMVQwMjozNDo1NiswMDowMCIKKygxIHJvdykKKwor U0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ251bGwnLCAnJHRzJyBQQVNTSU5HIHRpbWVzdGFtcHR6 ICcyMDE4LTAyLTIxIDEyOjM0OjU2ICsxMCcgQVMgdHMgUkVUVVJOSU5HIGpzb24pOworICAgICAg ICAganNvbl9xdWVyeSAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg IjIwMTgtMDItMjFUMDI6MzQ6NTYrMDA6MDAiCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1FVRVJZ KGpzb25iICdudWxsJywgJyR0cycgUEFTU0lORyB0aW1lc3RhbXB0eiAnMjAxOC0wMi0yMSAxMjoz NDo1NiArMTAnIEFTIHRzIFJFVFVSTklORyBqc29uYik7CisgICAgICAgICBqc29uX3F1ZXJ5ICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAiMjAxOC0wMi0yMVQwMjoz NDo1NiswMDowMCIKKygxIHJvdykKKworLS0gVGVzdCBjb25zdHJhaW50cworQ1JFQVRFIFRBQkxF IHRlc3RfanNvbmJfY29uc3RyYWludHMgKAorCWpzIHRleHQsCisJaSBpbnQsCisJeCBqc29uYiBE RUZBVUxUIEpTT05fUVVFUlkoanNvbmIgJ1sxLDJdJywgJyRbKl0nIFdJVEggV1JBUFBFUikKKwlD T05TVFJBSU5UIHRlc3RfanNvbmJfY29uc3RyYWludDEKKwkJQ0hFQ0sgKGpzIElTIEpTT04pCisJ Q09OU1RSQUlOVCB0ZXN0X2pzb25iX2NvbnN0cmFpbnQyCisJCUNIRUNLIChKU09OX0VYSVNUUyhq czo6anNvbmIsICckLmEnIFBBU1NJTkcgaSArIDUgQVMgaW50LCBpOjp0ZXh0IEFTIHR4dCwgYXJy YXlbMSwyLDNdIGFzIGFycikpCisJQ09OU1RSQUlOVCB0ZXN0X2pzb25iX2NvbnN0cmFpbnQzCisJ CUNIRUNLIChKU09OX1ZBTFVFKGpzOjpqc29uYiwgJyQuYScgUkVUVVJOSU5HIGludCBERUZBVUxU ICcxMicgT04gRU1QVFkgRVJST1IgT04gRVJST1IpID4gaSkKKwlDT05TVFJBSU5UIHRlc3RfanNv bmJfY29uc3RyYWludDQKKwkJQ0hFQ0sgKEpTT05fUVVFUlkoanM6Ompzb25iLCAnJC5hJyBXSVRI IENPTkRJVElPTkFMIFdSQVBQRVIgRU1QVFkgT0JKRUNUIE9OIEVSUk9SKSA8IGpzb25iICdbMTBd JykKKwlDT05TVFJBSU5UIHRlc3RfanNvbmJfY29uc3RyYWludDUKKwkJQ0hFQ0sgKEpTT05fUVVF UlkoanM6Ompzb25iLCAnJC5hJyBSRVRVUk5JTkcgY2hhcig1KSBPTUlUIFFVT1RFUyBFTVBUWSBB UlJBWSBPTiBFTVBUWSkgPiAgJ2EnIENPTExBVEUgIkMiKQorKTsKK1xkIHRlc3RfanNvbmJfY29u c3RyYWludHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhYmxl ICJwdWJsaWMudGVzdF9qc29uYl9jb25zdHJhaW50cyIKKyBDb2x1bW4gfCAgVHlwZSAgIHwgQ29s bGF0aW9uIHwgTnVsbGFibGUgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERl ZmF1bHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIGpz ICAgICB8IHRleHQgICAgfCAgICAgICAgICAgfCAgICAgICAgICB8IAorIGkgICAgICB8IGludGVn ZXIgfCAgICAgICAgICAgfCAgICAgICAgICB8IAorIHggICAgICB8IGpzb25iICAgfCAgICAgICAg ICAgfCAgICAgICAgICB8IEpTT05fUVVFUlkoJ1sxLCAyXSc6Ompzb25iLCAnJFsqXScgUkVUVVJO SU5HIGpzb25iIFdJVEggVU5DT05ESVRJT05BTCBXUkFQUEVSKQorQ2hlY2sgY29uc3RyYWludHM6 CisgICAgInRlc3RfanNvbmJfY29uc3RyYWludDEiIENIRUNLIChqcyBJUyBKU09OKQorICAgICJ0 ZXN0X2pzb25iX2NvbnN0cmFpbnQyIiBDSEVDSyAoSlNPTl9FWElTVFMoanM6Ompzb25iLCAnJC4i YSInIFBBU1NJTkcgaSArIDUgQVMgaW50LCBpOjp0ZXh0IEFTIHR4dCwgQVJSQVlbMSwgMiwgM10g QVMgYXJyKSkKKyAgICAidGVzdF9qc29uYl9jb25zdHJhaW50MyIgQ0hFQ0sgKEpTT05fVkFMVUUo anM6Ompzb25iLCAnJC4iYSInIFJFVFVSTklORyBpbnRlZ2VyIERFRkFVTFQgMTIgT04gRU1QVFkg RVJST1IgT04gRVJST1IpID4gaSkKKyAgICAidGVzdF9qc29uYl9jb25zdHJhaW50NCIgQ0hFQ0sg KEpTT05fUVVFUlkoanM6Ompzb25iLCAnJC4iYSInIFJFVFVSTklORyBqc29uYiBXSVRIIENPTkRJ VElPTkFMIFdSQVBQRVIgRU1QVFkgT0JKRUNUIE9OIEVSUk9SKSA8ICdbMTBdJzo6anNvbmIpCisg ICAgInRlc3RfanNvbmJfY29uc3RyYWludDUiIENIRUNLIChKU09OX1FVRVJZKGpzOjpqc29uYiwg JyQuImEiJyBSRVRVUk5JTkcgY2hhcmFjdGVyKDUpIE9NSVQgUVVPVEVTIEVNUFRZIEFSUkFZIE9O IEVNUFRZKSA+ICgnYSc6OmJwY2hhciBDT0xMQVRFICJDIikpCisKK1NFTEVDVCBjaGVja19jbGF1 c2UKK0ZST00gaW5mb3JtYXRpb25fc2NoZW1hLmNoZWNrX2NvbnN0cmFpbnRzCitXSEVSRSBjb25z dHJhaW50X25hbWUgTElLRSAndGVzdF9qc29uYl9jb25zdHJhaW50JScKK09SREVSIEJZIDE7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVj a19jbGF1c2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIChKU09OX1FVRVJZKChqcyk6Ompzb25iLCAnJC4iYSInIFJFVFVSTklO RyBjaGFyYWN0ZXIoNSkgT01JVCBRVU9URVMgRU1QVFkgQVJSQVkgT04gRU1QVFkpID4gKCdhJzo6 YnBjaGFyIENPTExBVEUgIkMiKSkKKyAoSlNPTl9RVUVSWSgoanMpOjpqc29uYiwgJyQuImEiJyBS RVRVUk5JTkcganNvbmIgV0lUSCBDT05ESVRJT05BTCBXUkFQUEVSIEVNUFRZIE9CSkVDVCBPTiBF UlJPUikgPCAnWzEwXSc6Ompzb25iKQorIChKU09OX1ZBTFVFKChqcyk6Ompzb25iLCAnJC4iYSIn IFJFVFVSTklORyBpbnRlZ2VyIERFRkFVTFQgMTIgT04gRU1QVFkgRVJST1IgT04gRVJST1IpID4g aSkKKyAoanMgSVMgSlNPTikKKyBKU09OX0VYSVNUUygoanMpOjpqc29uYiwgJyQuImEiJyBQQVNT SU5HIChpICsgNSkgQVMgaW50LCAoaSk6OnRleHQgQVMgdHh0LCBBUlJBWVsxLCAyLCAzXSBBUyBh cnIpCisoNSByb3dzKQorCitTRUxFQ1QgcGdfZ2V0X2V4cHIoYWRiaW4sIGFkcmVsaWQpCitGUk9N IHBnX2F0dHJkZWYKK1dIRVJFIGFkcmVsaWQgPSAndGVzdF9qc29uYl9jb25zdHJhaW50cyc6OnJl Z2NsYXNzCitPUkRFUiBCWSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBn X2dldF9leHByICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgSlNPTl9RVUVSWSgnWzEsIDJdJzo6anNvbmIsICckWypdJyBSRVRVUk5J TkcganNvbmIgV0lUSCBVTkNPTkRJVElPTkFMIFdSQVBQRVIpCisoMSByb3cpCisKK0lOU0VSVCBJ TlRPIHRlc3RfanNvbmJfY29uc3RyYWludHMgVkFMVUVTICgnJywgMSk7CitFUlJPUjogIG5ldyBy b3cgZm9yIHJlbGF0aW9uICJ0ZXN0X2pzb25iX2NvbnN0cmFpbnRzIiB2aW9sYXRlcyBjaGVjayBj b25zdHJhaW50ICJ0ZXN0X2pzb25iX2NvbnN0cmFpbnQxIgorREVUQUlMOiAgRmFpbGluZyByb3cg Y29udGFpbnMgKCwgMSwgWzEsIDJdKS4KK0lOU0VSVCBJTlRPIHRlc3RfanNvbmJfY29uc3RyYWlu dHMgVkFMVUVTICgnMScsIDEpOworRVJST1I6ICBuZXcgcm93IGZvciByZWxhdGlvbiAidGVzdF9q c29uYl9jb25zdHJhaW50cyIgdmlvbGF0ZXMgY2hlY2sgY29uc3RyYWludCAidGVzdF9qc29uYl9j b25zdHJhaW50MiIKK0RFVEFJTDogIEZhaWxpbmcgcm93IGNvbnRhaW5zICgxLCAxLCBbMSwgMl0p LgorSU5TRVJUIElOVE8gdGVzdF9qc29uYl9jb25zdHJhaW50cyBWQUxVRVMgKCdbXScpOworRVJS T1I6ICBuZXcgcm93IGZvciByZWxhdGlvbiAidGVzdF9qc29uYl9jb25zdHJhaW50cyIgdmlvbGF0 ZXMgY2hlY2sgY29uc3RyYWludCAidGVzdF9qc29uYl9jb25zdHJhaW50MiIKK0RFVEFJTDogIEZh aWxpbmcgcm93IGNvbnRhaW5zIChbXSwgbnVsbCwgWzEsIDJdKS4KK0lOU0VSVCBJTlRPIHRlc3Rf anNvbmJfY29uc3RyYWludHMgVkFMVUVTICgneyJiIjogMX0nLCAxKTsKK0VSUk9SOiAgbmV3IHJv dyBmb3IgcmVsYXRpb24gInRlc3RfanNvbmJfY29uc3RyYWludHMiIHZpb2xhdGVzIGNoZWNrIGNv bnN0cmFpbnQgInRlc3RfanNvbmJfY29uc3RyYWludDIiCitERVRBSUw6ICBGYWlsaW5nIHJvdyBj b250YWlucyAoeyJiIjogMX0sIDEsIFsxLCAyXSkuCitJTlNFUlQgSU5UTyB0ZXN0X2pzb25iX2Nv bnN0cmFpbnRzIFZBTFVFUyAoJ3siYSI6IDF9JywgMSk7CitFUlJPUjogIG5ldyByb3cgZm9yIHJl bGF0aW9uICJ0ZXN0X2pzb25iX2NvbnN0cmFpbnRzIiB2aW9sYXRlcyBjaGVjayBjb25zdHJhaW50 ICJ0ZXN0X2pzb25iX2NvbnN0cmFpbnQzIgorREVUQUlMOiAgRmFpbGluZyByb3cgY29udGFpbnMg KHsiYSI6IDF9LCAxLCBbMSwgMl0pLgorSU5TRVJUIElOVE8gdGVzdF9qc29uYl9jb25zdHJhaW50 cyBWQUxVRVMgKCd7ImEiOiA3fScsIDEpOworRVJST1I6ICBuZXcgcm93IGZvciByZWxhdGlvbiAi dGVzdF9qc29uYl9jb25zdHJhaW50cyIgdmlvbGF0ZXMgY2hlY2sgY29uc3RyYWludCAidGVzdF9q c29uYl9jb25zdHJhaW50NSIKK0RFVEFJTDogIEZhaWxpbmcgcm93IGNvbnRhaW5zICh7ImEiOiA3 fSwgMSwgWzEsIDJdKS4KK0lOU0VSVCBJTlRPIHRlc3RfanNvbmJfY29uc3RyYWludHMgVkFMVUVT ICgneyJhIjogMTB9JywgMSk7CitFUlJPUjogIG5ldyByb3cgZm9yIHJlbGF0aW9uICJ0ZXN0X2pz b25iX2NvbnN0cmFpbnRzIiB2aW9sYXRlcyBjaGVjayBjb25zdHJhaW50ICJ0ZXN0X2pzb25iX2Nv bnN0cmFpbnQ0IgorREVUQUlMOiAgRmFpbGluZyByb3cgY29udGFpbnMgKHsiYSI6IDEwfSwgMSwg WzEsIDJdKS4KK0RST1AgVEFCTEUgdGVzdF9qc29uYl9jb25zdHJhaW50czsKKy0tIFRlc3QgbXV0 YWJpbGlseSBvZiBxdWVyeSBmdW5jdGlvbnMKK0NSRUFURSBUQUJMRSB0ZXN0X2pzb25iX211dGFi aWxpdHkoanMganNvbmIsIGIgaW50KTsKK0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFi aWxpdHkgKEpTT05fUVVFUlkoanMsICckJykpOworQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJf bXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyQuYVswXScpKTsKK0NSRUFURSBJTkRFWCBPTiB0 ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICckLnRpbWUoKScpKTsKK0VSUk9S OiAgZnVuY3Rpb25zIGluIGluZGV4IGV4cHJlc3Npb24gbXVzdCBiZSBtYXJrZWQgSU1NVVRBQkxF CitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAn JC5kYXRlKCknKSk7CitFUlJPUjogIGZ1bmN0aW9ucyBpbiBpbmRleCBleHByZXNzaW9uIG11c3Qg YmUgbWFya2VkIElNTVVUQUJMRQorQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0 eSAoSlNPTl9RVUVSWShqcywgJyQudGltZV90eigpJykpOworRVJST1I6ICBmdW5jdGlvbnMgaW4g aW5kZXggZXhwcmVzc2lvbiBtdXN0IGJlIG1hcmtlZCBJTU1VVEFCTEUKK0NSRUFURSBJTkRFWCBP TiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICckLnRpbWVzdGFtcCgpJykp OworRVJST1I6ICBmdW5jdGlvbnMgaW4gaW5kZXggZXhwcmVzc2lvbiBtdXN0IGJlIG1hcmtlZCBJ TU1VVEFCTEUKK0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVF UlkoanMsICckLnRpbWVzdGFtcF90eigpJykpOworRVJST1I6ICBmdW5jdGlvbnMgaW4gaW5kZXgg ZXhwcmVzc2lvbiBtdXN0IGJlIG1hcmtlZCBJTU1VVEFCTEUKK0NSRUFURSBJTkRFWCBPTiB0ZXN0 X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICckLmEgPyAoQC5kYXRlKCkgPCAkLnRp bWVfdHooKSknKSk7CitFUlJPUjogIGZ1bmN0aW9ucyBpbiBpbmRleCBleHByZXNzaW9uIG11c3Qg YmUgbWFya2VkIElNTVVUQUJMRQorQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0 eSAoSlNPTl9RVUVSWShqcywgJyQuYSA/IChALmRhdGUoKSA8ICQudGltZSgpKScpKTsKK0VSUk9S OiAgZnVuY3Rpb25zIGluIGluZGV4IGV4cHJlc3Npb24gbXVzdCBiZSBtYXJrZWQgSU1NVVRBQkxF CitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAn JC5hID8gKEAudGltZSgpIDwgJC50aW1lKCkpJykpOworRVJST1I6ICBmdW5jdGlvbnMgaW4gaW5k ZXggZXhwcmVzc2lvbiBtdXN0IGJlIG1hcmtlZCBJTU1VVEFCTEUKK0NSRUFURSBJTkRFWCBPTiB0 ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICckLmEgPyAoQC50aW1lKCkgPCAk LnRpbWVfdHooKSknKSk7CitFUlJPUjogIGZ1bmN0aW9ucyBpbiBpbmRleCBleHByZXNzaW9uIG11 c3QgYmUgbWFya2VkIElNTVVUQUJMRQorQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJp bGl0eSAoSlNPTl9RVUVSWShqcywgJyQuYSA/IChALnRpbWVzdGFtcCgpIDwgJC50aW1lc3RhbXBf dHooKSknKSk7CitFUlJPUjogIGZ1bmN0aW9ucyBpbiBpbmRleCBleHByZXNzaW9uIG11c3QgYmUg bWFya2VkIElNTVVUQUJMRQorQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAo SlNPTl9RVUVSWShqcywgJyQuYSA/IChALnRpbWVzdGFtcF90eigpIDwgJC50aW1lc3RhbXBfdHoo KSknKSk7CitFUlJPUjogIGZ1bmN0aW9ucyBpbiBpbmRleCBleHByZXNzaW9uIG11c3QgYmUgbWFy a2VkIElNTVVUQUJMRQorQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNP Tl9RVUVSWShqcywgJyQuYSA/IChALnRpbWUoKSA8ICQuZGF0ZXRpbWUoIkhIOk1JIFRaSCIpKScp KTsKK0VSUk9SOiAgZnVuY3Rpb25zIGluIGluZGV4IGV4cHJlc3Npb24gbXVzdCBiZSBtYXJrZWQg SU1NVVRBQkxFCitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FV RVJZKGpzLCAnJC5hID8gKEAuZGF0ZSgpIDwgJC5kYXRldGltZSgiSEg6TUkgVFpIIikpJykpOwor RVJST1I6ICBmdW5jdGlvbnMgaW4gaW5kZXggZXhwcmVzc2lvbiBtdXN0IGJlIG1hcmtlZCBJTU1V VEFCTEUKK0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlko anMsICckLmEgPyAoQC50aW1lc3RhbXAoKSA8ICQuZGF0ZXRpbWUoIkhIOk1JIFRaSCIpKScpKTsK K0VSUk9SOiAgZnVuY3Rpb25zIGluIGluZGV4IGV4cHJlc3Npb24gbXVzdCBiZSBtYXJrZWQgSU1N VVRBQkxFCitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZ KGpzLCAnJC5hID8gKEAudGltZXN0YW1wKCkgPCAkLmRhdGV0aW1lKCJISDpNSSIpKScpKTsKK0VS Uk9SOiAgZnVuY3Rpb25zIGluIGluZGV4IGV4cHJlc3Npb24gbXVzdCBiZSBtYXJrZWQgSU1NVVRB QkxFCitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpz LCAnJC5hID8gKEAudGltZXN0YW1wX3R6KCkgPCAkLmRhdGV0aW1lKCJISDpNSSBUWkgiKSknKSk7 CitFUlJPUjogIGZ1bmN0aW9ucyBpbiBpbmRleCBleHByZXNzaW9uIG11c3QgYmUgbWFya2VkIElN TVVUQUJMRQorQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVS WShqcywgJyQuYSA/IChALnRpbWVzdGFtcF90eigpIDwgJC5kYXRldGltZSgiSEg6TUkiKSknKSk7 CitFUlJPUjogIGZ1bmN0aW9ucyBpbiBpbmRleCBleHByZXNzaW9uIG11c3QgYmUgbWFya2VkIElN TVVUQUJMRQorQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVS WShqcywgJyQuZGF0ZSgpIDwgJHgnIFBBU1NJTkcgJzEyOjM0Jzo6dGltZXR6IEFTIHgpKTsKK0VS Uk9SOiAgZnVuY3Rpb25zIGluIGluZGV4IGV4cHJlc3Npb24gbXVzdCBiZSBtYXJrZWQgSU1NVVRB QkxFCitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpz LCAnJC5kYXRlKCkgPCAkeCcgUEFTU0lORyAnMTIzNCc6OmludCBBUyB4KSk7CitFUlJPUjogIGZ1 bmN0aW9ucyBpbiBpbmRleCBleHByZXNzaW9uIG11c3QgYmUgbWFya2VkIElNTVVUQUJMRQorQ1JF QVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyQuYSA/ IChALnRpbWVzdGFtcCgyKSA8ICQudGltZXN0YW1wKDMpKScpKTsKK0VSUk9SOiAgZnVuY3Rpb25z IGluIGluZGV4IGV4cHJlc3Npb24gbXVzdCBiZSBtYXJrZWQgSU1NVVRBQkxFCitDUkVBVEUgSU5E RVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJC5kYXRldGltZSgp JykpOworQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShq cywgJyQuYSA/IChAIDwgJC5kYXRldGltZSgpKScpKTsKK0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pz b25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICckLmEgPyAoQC5kYXRldGltZSgpIDwgJC5k YXRldGltZSgpKScpKTsKK0VSUk9SOiAgZnVuY3Rpb25zIGluIGluZGV4IGV4cHJlc3Npb24gbXVz dCBiZSBtYXJrZWQgSU1NVVRBQkxFCitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmls aXR5IChKU09OX1FVRVJZKGpzLCAnJC5hID8gKEAuZGF0ZXRpbWUoKSA8ICQuZGF0ZXRpbWUoIkhI Ok1JIFRaSCIpKScpKTsKK0VSUk9SOiAgZnVuY3Rpb25zIGluIGluZGV4IGV4cHJlc3Npb24gbXVz dCBiZSBtYXJrZWQgSU1NVVRBQkxFCitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmls aXR5IChKU09OX1FVRVJZKGpzLCAnJC5hID8gKEAuZGF0ZXRpbWUoIkhIOk1JIFRaSCIpIDwgJC5k YXRldGltZSgiSEg6TUkgVFpIIikpJykpOworQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0 YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyQuYSA/IChALmRhdGV0aW1lKCJISDpNSSIpIDwgJC5k YXRldGltZSgiWVktTU0tREQgSEg6TUkiKSknKSk7CitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29u Yl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJC5hID8gKEAuZGF0ZXRpbWUoIkhIOk1JIFRa SCIpIDwgJC5kYXRldGltZSgiWVktTU0tREQgSEg6TUkiKSknKSk7CitFUlJPUjogIGZ1bmN0aW9u cyBpbiBpbmRleCBleHByZXNzaW9uIG11c3QgYmUgbWFya2VkIElNTVVUQUJMRQorQ1JFQVRFIElO REVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyQuZGF0ZXRpbWUo IkhIOk1JIFRaSCIpIDwgJHgnIFBBU1NJTkcgJzEyOjM0Jzo6dGltZXR6IEFTIHgpKTsKK0NSRUFU RSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICckLmRhdGV0 aW1lKCJISDpNSSBUWkgiKSA8ICR5JyBQQVNTSU5HICcxMjozNCc6OnRpbWV0eiBBUyB4KSk7CitD UkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJC5k YXRldGltZSgpIDwgJHgnIFBBU1NJTkcgJzEyOjM0Jzo6dGltZXR6IEFTIHgpKTsKK0VSUk9SOiAg ZnVuY3Rpb25zIGluIGluZGV4IGV4cHJlc3Npb24gbXVzdCBiZSBtYXJrZWQgSU1NVVRBQkxFCitD UkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJC5k YXRldGltZSgpIDwgJHgnIFBBU1NJTkcgJzEyMzQnOjppbnQgQVMgeCkpOworQ1JFQVRFIElOREVY IE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyQuZGF0ZXRpbWUoKSA/ IChAID09ICR4KScgUEFTU0lORyAnMTI6MzQnOjp0aW1lIEFTIHgpKTsKK0VSUk9SOiAgZnVuY3Rp b25zIGluIGluZGV4IGV4cHJlc3Npb24gbXVzdCBiZSBtYXJrZWQgSU1NVVRBQkxFCitDUkVBVEUg SU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJC5kYXRldGlt ZSgiWVktTU0tREQiKSA/IChAID09ICR4KScgUEFTU0lORyAnMjAyMC0wNy0xNCc6OmRhdGUgQVMg eCkpOworQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShq cywgJyRbMSwgJC5hID8gKEAuZGF0ZXRpbWUoKSA9PSAkeCldJyBQQVNTSU5HICcxMjozNCc6OnRp bWUgQVMgeCkpOworRVJST1I6ICBmdW5jdGlvbnMgaW4gaW5kZXggZXhwcmVzc2lvbiBtdXN0IGJl IG1hcmtlZCBJTU1VVEFCTEUKK0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkg KEpTT05fUVVFUlkoanMsICckWzEsIDAgdG8gJC5hID8gKEAuZGF0ZXRpbWUoKSA9PSAkeCldJyBQ QVNTSU5HICcxMjozNCc6OnRpbWUgQVMgeCkpOworRVJST1I6ICBmdW5jdGlvbnMgaW4gaW5kZXgg ZXhwcmVzc2lvbiBtdXN0IGJlIG1hcmtlZCBJTU1VVEFCTEUKK0NSRUFURSBJTkRFWCBPTiB0ZXN0 X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICckWzEsICQuYSA/IChALmRhdGV0aW1l KCJISDpNSSIpID09ICR4KV0nIFBBU1NJTkcgJzEyOjM0Jzo6dGltZSBBUyB4KSk7CitDUkVBVEUg SU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1ZBTFVFKGpzLCAnJCcgREVGQVVM VCByYW5kb20oKTo6aW50IE9OIEVSUk9SKSk7CitFUlJPUjogIGZ1bmN0aW9ucyBpbiBpbmRleCBl eHByZXNzaW9uIG11c3QgYmUgbWFya2VkIElNTVVUQUJMRQorLS0gREVGQVVMVCBleHByZXNzaW9u CitDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiByZXRfc2V0aW50KCkgUkVUVVJOUyBTRVRPRiBp bnRlZ2VyIEFTCiskJAorQkVHSU4KKyAgICBSRVRVUk4gUVVFUlkgRVhFQ1VURSAnc2VsZWN0IDEg dW5pb24gYWxsIHNlbGVjdCAxJzsKK0VORDsKKyQkCitMQU5HVUFHRSBwbHBnc3FsIElNTVVUQUJM RTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzLCAnJCcgIFJFVFVSTklORyBpbnQgREVGQVVMVCByZXRf c2V0aW50KCkgT04gRVJST1IpIEZST00gdGVzdF9qc29uYl9tdXRhYmlsaXR5OworRVJST1I6ICBE RUZBVUxUIGV4cHJlc3Npb24gbXVzdCBub3QgcmV0dXJuIGEgc2V0CitMSU5FIDE6IFNFTEVDVCBK U09OX1FVRVJZKGpzLCAnJCcgIFJFVFVSTklORyBpbnQgREVGQVVMVCByZXRfc2V0aW50KC4uLgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XgorU0VMRUNUIEpTT05fUVVFUlkoanMsICckJyAgUkVUVVJOSU5HIGludCBERUZBVUxUIGIgKyAx IE9OIEVSUk9SKSBGUk9NIHRlc3RfanNvbmJfbXV0YWJpbGl0eTsKK0VSUk9SOiAgREVGQVVMVCBl eHByZXNzaW9uIG11c3Qgbm90IGNvbnRhaW4gY29sdW1uIHJlZmVyZW5jZXMKK0xJTkUgMTogU0VM RUNUIEpTT05fUVVFUlkoanMsICckJyAgUkVUVVJOSU5HIGludCBERUZBVUxUIGIgKyAxIE9OIEVS Li4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBeCitTRUxFQ1QgSlNPTl9RVUVSWShqcywgJyQnICBSRVRVUk5JTkcgaW50IERFRkFVTFQg c3VtKDEpIG92ZXIoKSBPTiBFUlJPUikgRlJPTSB0ZXN0X2pzb25iX211dGFiaWxpdHk7CitFUlJP UjogIGNhbiBvbmx5IHNwZWNpZnkgY29uc3RhbnQsIG5vbi1hZ2dyZWdhdGUgZnVuY3Rpb24sIG9y IG9wZXJhdG9yIGV4cHJlc3Npb24gZm9yIERFRkFVTFQKK0xJTkUgMTogU0VMRUNUIEpTT05fUVVF UlkoanMsICckJyAgUkVUVVJOSU5HIGludCBERUZBVUxUIHN1bSgxKSBvdmVyLi4uCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCitTRUxF Q1QgSlNPTl9RVUVSWShqcywgJyQnICBSRVRVUk5JTkcgaW50IERFRkFVTFQgKFNFTEVDVCAxKSBP TiBFUlJPUikgRlJPTSB0ZXN0X2pzb25iX211dGFiaWxpdHk7CitFUlJPUjogIGNhbiBvbmx5IHNw ZWNpZnkgY29uc3RhbnQsIG5vbi1hZ2dyZWdhdGUgZnVuY3Rpb24sIG9yIG9wZXJhdG9yIGV4cHJl c3Npb24gZm9yIERFRkFVTFQKK0xJTkUgMTogU0VMRUNUIEpTT05fUVVFUlkoanMsICckJyAgUkVU VVJOSU5HIGludCBERUZBVUxUIChTRUxFQ1QgMSkgLi4uCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCitEUk9QIFRBQkxFIHRlc3RfanNv bmJfbXV0YWJpbGl0eTsKK0RST1AgRlVOQ1RJT04gcmV0X3NldGludDsKKy0tIEV4dGVuc2lvbjog bm9uLWNvbnN0YW50IEpTT04gcGF0aAorU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICd7ImEiOiAx MjN9JywgJyQnIHx8ICcuJyB8fCAnYScpOworIGpzb25fZXhpc3RzIAorLS0tLS0tLS0tLS0tLQor IHQKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ3siYSI6IDEyM30nLCAnJCcg fHwgJy4nIHx8ICdhJyk7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorIDEyMworKDEgcm93 KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAneyJhIjogMTIzfScsICckJyB8fCAnLicgfHwg J2InIERFRkFVTFQgJ2ZvbycgT04gRU1QVFkpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0K KyBmb28KKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ3siYSI6IDEyM30nLCAn JCcgfHwgJy4nIHx8ICdhJyk7CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0tLQorIDEyMworKDEg cm93KQorCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAneyJhIjogMTIzfScsICckJyB8fCAnLicg fHwgJ2EnIFdJVEggV1JBUFBFUik7CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0tLQorIFsxMjNd CisoMSByb3cpCisKKy0tIFNob3VsZCBmYWlsIChpbnZhbGlkIHBhdGgpCitTRUxFQ1QgSlNPTl9R VUVSWShqc29uYiAneyJhIjogMTIzfScsICdlcnJvcicgfHwgJyAnIHx8ICdlcnJvcicpOworRVJS T1I6ICBzeW50YXggZXJyb3IgYXQgb3IgbmVhciAiICIgb2YganNvbnBhdGggaW5wdXQKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUgYi9zcmMvdGVzdC9yZWdy ZXNzL3BhcmFsbGVsX3NjaGVkdWxlCmluZGV4IDFkOGE0MTRlZWEuLjkxMGY2ZmUzYzkgMTAwNjQ0 Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUKKysrIGIvc3JjL3Rlc3Qv cmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZQpAQCAtMTAzLDcgKzEwMyw3IEBAIHRlc3Q6IHNlbGVj dF92aWV3cyBwb3J0YWxzX3AyIGZvcmVpZ25fa2V5IGNsdXN0ZXIgZGVwZW5kZW5jeSBndWMgYml0 bWFwb3BzIGNvbWJvCiAjIC0tLS0tLS0tLS0KICMgQW5vdGhlciBncm91cCBvZiBwYXJhbGxlbCB0 ZXN0cyAoSlNPTiByZWxhdGVkKQogIyAtLS0tLS0tLS0tCi10ZXN0OiBqc29uIGpzb25iIGpzb25f ZW5jb2RpbmcganNvbnBhdGgganNvbnBhdGhfZW5jb2RpbmcganNvbmJfanNvbnBhdGggc3FsanNv bgordGVzdDoganNvbiBqc29uYiBqc29uX2VuY29kaW5nIGpzb25wYXRoIGpzb25wYXRoX2VuY29k aW5nIGpzb25iX2pzb25wYXRoIHNxbGpzb24gc3FsanNvbl9xdWVyeWZ1bmNzCiAKICMgLS0tLS0t LS0tLQogIyBBbm90aGVyIGdyb3VwIG9mIHBhcmFsbGVsIHRlc3RzCmRpZmYgLS1naXQgYS9zcmMv dGVzdC9yZWdyZXNzL3NxbC9zcWxqc29uX3F1ZXJ5ZnVuY3Muc3FsIGIvc3JjL3Rlc3QvcmVncmVz cy9zcWwvc3FsanNvbl9xdWVyeWZ1bmNzLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwLi41YmUyZDhlM2Y4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcmVncmVz cy9zcWwvc3FsanNvbl9xdWVyeWZ1bmNzLnNxbApAQCAtMCwwICsxLDQyNyBAQAorLS0gSlNPTl9F WElTVFMKKworLS0ganNvbiBhcmd1bWVudHMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQKK1NFTEVD VCBKU09OX0VYSVNUUyhOVUxMIEZPUk1BVCBKU09OLCAnJCcpOworCitTRUxFQ1QgSlNPTl9FWElT VFMoTlVMTDo6anNvbmIsICckJyk7CitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJ1tdJywgJyQn KTsKK1NFTEVDVCBKU09OX0VYSVNUUyhKU09OX09CSkVDVChSRVRVUk5JTkcganNvbmIpLCAnJCcp OworCitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJzEnLCAnJCcpOworU0VMRUNUIEpTT05fRVhJ U1RTKGpzb25iICdudWxsJywgJyQnKTsKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAnW10nLCAn JCcpOworCitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJzEnLCAnJC5hJyk7CitTRUxFQ1QgSlNP Tl9FWElTVFMoanNvbmIgJzEnLCAnc3RyaWN0ICQuYScpOyAtLSBGQUxTRSBvbiBlcnJvcgorU0VM RUNUIEpTT05fRVhJU1RTKGpzb25iICcxJywgJ3N0cmljdCAkLmEnIEVSUk9SIE9OIEVSUk9SKTsK K1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAnbnVsbCcsICckLmEnKTsKK1NFTEVDVCBKU09OX0VY SVNUUyhqc29uYiAnW10nLCAnJC5hJyk7CitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJ1sxLCAi YWFhIiwgeyJhIjogMX1dJywgJ3N0cmljdCAkLmEnKTsgLS0gRkFMU0Ugb24gZXJyb3IKK1NFTEVD VCBKU09OX0VYSVNUUyhqc29uYiAnWzEsICJhYWEiLCB7ImEiOiAxfV0nLCAnbGF4ICQuYScpOwor U0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICd7fScsICckLmEnKTsKK1NFTEVDVCBKU09OX0VYSVNU Uyhqc29uYiAneyJiIjogMSwgImEiOiAyfScsICckLmEnKTsKKworU0VMRUNUIEpTT05fRVhJU1RT KGpzb25iICcxJywgJyQuYS5iJyk7CitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJ3siYSI6IHsi YiI6IDF9fScsICckLmEuYicpOworU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICd7ImEiOiAxLCAi YiI6IDJ9JywgJyQuYS5iJyk7CisKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAneyJhIjogMSwg ImIiOiAyfScsICckLiogPyAoQCA+ICR4KScgUEFTU0lORyAxIEFTIHgpOworU0VMRUNUIEpTT05f RVhJU1RTKGpzb25iICd7ImEiOiAxLCAiYiI6IDJ9JywgJyQuKiA/IChAID4gJHgpJyBQQVNTSU5H ICcxJyBBUyB4KTsKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAneyJhIjogMSwgImIiOiAyfScs ICckLiogPyAoQCA+ICR4ICYmIEAgPCAkeSknIFBBU1NJTkcgMCBBUyB4LCAyIEFTIHkpOworU0VM RUNUIEpTT05fRVhJU1RTKGpzb25iICd7ImEiOiAxLCAiYiI6IDJ9JywgJyQuKiA/IChAID4gJHgg JiYgQCA8ICR5KScgUEFTU0lORyAwIEFTIHgsIDEgQVMgeSk7CisKKy0tIGV4dGVuc2lvbjogYm9v bGVhbiBleHByZXNzaW9ucworU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICcxJywgJyQgPiAyJyk7 CitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJzEnLCAnJC5hID4gMicgRVJST1IgT04gRVJST1Ip OworCistLSBKU09OX1ZBTFVFCisKKy0tIGpzb24gYXJndW1lbnRzIGN1cnJlbnRseSBub3Qgc3Vw cG9ydGVkCitTRUxFQ1QgSlNPTl9WQUxVRShOVUxMIEZPUk1BVCBKU09OLCAnJCcpOworCitTRUxF Q1QgSlNPTl9WQUxVRShOVUxMOjpqc29uYiwgJyQnKTsKKworU0VMRUNUIEpTT05fVkFMVUUoanNv bmIgJ251bGwnLCAnJCcpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAnJCcgUkVU VVJOSU5HIGludCk7CisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICd0cnVlJywgJyQnKTsKK1NF TEVDVCBKU09OX1ZBTFVFKGpzb25iICd0cnVlJywgJyQnIFJFVFVSTklORyBib29sKTsKKworU0VM RUNUIEpTT05fVkFMVUUoanNvbmIgJzEyMycsICckJyk7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29u YiAnMTIzJywgJyQnIFJFVFVSTklORyBpbnQpICsgMjM0OworU0VMRUNUIEpTT05fVkFMVUUoanNv bmIgJzEyMycsICckJyBSRVRVUk5JTkcgdGV4dCk7CisvKiBqc29uYiBieXRlYSA/Pz8gKi8KK1NF TEVDVCBKU09OX1ZBTFVFKGpzb25iICcxMjMnLCAnJCcgUkVUVVJOSU5HIGJ5dGVhIEVSUk9SIE9O IEVSUk9SKTsKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEuMjMnLCAnJCcpOworU0VMRUNU IEpTT05fVkFMVUUoanNvbmIgJzEuMjMnLCAnJCcgUkVUVVJOSU5HIGludCk7CitTRUxFQ1QgSlNP Tl9WQUxVRShqc29uYiAnIjEuMjMiJywgJyQnIFJFVFVSTklORyBudW1lcmljKTsKK1NFTEVDVCBK U09OX1ZBTFVFKGpzb25iICciMS4yMyInLCAnJCcgUkVUVVJOSU5HIGludCBFUlJPUiBPTiBFUlJP Uik7CisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciYWFhIicsICckJyk7CitTRUxFQ1QgSlNP Tl9WQUxVRShqc29uYiAnImFhYSInLCAnJCcgUkVUVVJOSU5HIHRleHQpOworU0VMRUNUIEpTT05f VkFMVUUoanNvbmIgJyJhYWEiJywgJyQnIFJFVFVSTklORyBjaGFyKDUpKTsKK1NFTEVDVCBKU09O X1ZBTFVFKGpzb25iICciYWFhIicsICckJyBSRVRVUk5JTkcgY2hhcigyKSk7CitTRUxFQ1QgSlNP Tl9WQUxVRShqc29uYiAnImFhYSInLCAnJCcgUkVUVVJOSU5HIGpzb24pOworU0VMRUNUIEpTT05f VkFMVUUoanNvbmIgJyJhYWEiJywgJyQnIFJFVFVSTklORyBqc29uYik7CitTRUxFQ1QgSlNPTl9W QUxVRShqc29uYiAnImFhYSInLCAnJCcgUkVUVVJOSU5HIGpzb24gRVJST1IgT04gRVJST1IpOwor U0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJyJhYWEiJywgJyQnIFJFVFVSTklORyBqc29uYiBFUlJP UiBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnIlwiYWFhXCIiJywgJyQnIFJF VFVSTklORyBqc29uKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciXCJhYWFcIiInLCAnJCcg UkVUVVJOSU5HIGpzb25iKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciYWFhIicsICckJyBS RVRVUk5JTkcgaW50KTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciYWFhIicsICckJyBSRVRV Uk5JTkcgaW50IEVSUk9SIE9OIEVSUk9SKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciYWFh IicsICckJyBSRVRVUk5JTkcgaW50IERFRkFVTFQgMTExIE9OIEVSUk9SKTsKK1NFTEVDVCBKU09O X1ZBTFVFKGpzb25iICciMTIzIicsICckJyBSRVRVUk5JTkcgaW50KSArIDIzNDsKKworU0VMRUNU IEpTT05fVkFMVUUoanNvbmIgJyIyMDE3LTAyLTIwIicsICckJyBSRVRVUk5JTkcgZGF0ZSkgKyA5 OworCistLSBUZXN0IE5VTEwgY2hlY2tzIGV4ZWN1dGlvbiBpbiBkb21haW4gdHlwZXMKK0NSRUFU RSBET01BSU4gc3FsanNvbmJfaW50X25vdF9udWxsIEFTIGludCBOT1QgTlVMTDsKK1NFTEVDVCBK U09OX1ZBTFVFKGpzb25iICdudWxsJywgJyQnIFJFVFVSTklORyBzcWxqc29uYl9pbnRfbm90X251 bGwpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAnJCcgUkVUVVJOSU5HIHNxbGpz b25iX2ludF9ub3RfbnVsbCBFUlJPUiBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29u YiAnbnVsbCcsICckJyBSRVRVUk5JTkcgc3FsanNvbmJfaW50X25vdF9udWxsIERFRkFVTFQgMiBP TiBFTVBUWSBFUlJPUiBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICAn JC5hJyBSRVRVUk5JTkcgc3FsanNvbmJfaW50X25vdF9udWxsIERFRkFVTFQgMiBPTiBFTVBUWSBF UlJPUiBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICAnJC5hJyBSRVRV Uk5JTkcgc3FsanNvbmJfaW50X25vdF9udWxsIERFRkFVTFQgTlVMTCBPTiBFTVBUWSBFUlJPUiBP TiBFUlJPUik7CitDUkVBVEUgVFlQRSByYWluYm93IEFTIEVOVU0gKCdyZWQnLCAnb3JhbmdlJywg J3llbGxvdycsICdncmVlbicsICdibHVlJywgJ3B1cnBsZScpOworQ1JFQVRFIERPTUFJTiByZ2Ig QVMgcmFpbmJvdyBDSEVDSyAoVkFMVUUgSU4gKCdyZWQnLCAnZ3JlZW4nLCAnYmx1ZScpKTsKK1NF TEVDVCBKU09OX1ZBTFVFKCcicHVycGxlIic6Ompzb25iLCAnbGF4ICRbKl0nIFJFVFVSTklORyBy Z2IpOworU0VMRUNUIEpTT05fVkFMVUUoJyJwdXJwbGUiJzo6anNvbmIsICdsYXggJFsqXScgUkVU VVJOSU5HIHJnYiBFUlJPUiBPTiBFUlJPUik7CisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdb XScsICckJyk7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnW10nLCAnJCcgRVJST1IgT04gRVJS T1IpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ3t9JywgJyQnKTsKK1NFTEVDVCBKU09OX1ZB TFVFKGpzb25iICd7fScsICckJyBFUlJPUiBPTiBFUlJPUik7CisKK1NFTEVDVCBKU09OX1ZBTFVF KGpzb25iICcxJywgJyQuYScpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAnc3RyaWN0 ICQuYScgRVJST1IgT04gRVJST1IpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAnc3Ry aWN0ICQuYScgREVGQVVMVCAnZXJyb3InIE9OIEVSUk9SKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpz b25iICcxJywgJ2xheCAkLmEnIEVSUk9SIE9OIEVSUk9SKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpz b25iICcxJywgJ2xheCAkLmEnIEVSUk9SIE9OIEVNUFRZIEVSUk9SIE9OIEVSUk9SKTsKK1NFTEVD VCBKU09OX1ZBTFVFKGpzb25iICcxJywgJ3N0cmljdCAkLmEnIERFRkFVTFQgMiBPTiBFUlJPUik7 CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICdsYXggJC5hJyBERUZBVUxUIDIgT04gRVJS T1IpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAnbGF4ICQuYScgREVGQVVMVCAnMicg T04gRVJST1IpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAnbGF4ICQuYScgTlVMTCBP TiBFTVBUWSBERUZBVUxUICcyJyBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAn MScsICdsYXggJC5hJyBERUZBVUxUICcyJyBPTiBFTVBUWSBERUZBVUxUICczJyBPTiBFUlJPUik7 CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICdsYXggJC5hJyBFUlJPUiBPTiBFTVBUWSBE RUZBVUxUICczJyBPTiBFUlJPUik7CisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdbMSwyXScs ICckWypdJyBFUlJPUiBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnWzEsMl0n LCAnJFsqXScgREVGQVVMVCAnMCcgT04gRVJST1IpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIg J1siICJdJywgJyRbKl0nIFJFVFVSTklORyBpbnQgRVJST1IgT04gRVJST1IpOworU0VMRUNUIEpT T05fVkFMVUUoanNvbmIgJ1siICJdJywgJyRbKl0nIFJFVFVSTklORyBpbnQgREVGQVVMVCAyICsg MyBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnWyIxIl0nLCAnJFsqXScgUkVU VVJOSU5HIGludCBERUZBVUxUIDIgKyAzIE9OIEVSUk9SKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpz b25iICdbIjEiXScsICckWypdJyBSRVRVUk5JTkcgaW50IEZPUk1BVCBKU09OKTsgLS0gUkVUVVJO SU5HIEZPUk1BVCBub3QgYWxsb3dlZAorCistLSBSRVRVR05JTkcgcHNldWRvLXR5cGVzIG5vdCBh bGxvd2VkCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnWyIxIl0nLCAnJFsqXScgUkVUVVJOSU5H IHJlY29yZCk7CisKK1NFTEVDVAorCXgsCisJSlNPTl9WQUxVRSgKKwkJanNvbmIgJ3siYSI6IDEs ICJiIjogMn0nLAorCQknJC4qID8gKEAgPiAkeCknIFBBU1NJTkcgeCBBUyB4CisJCVJFVFVSTklO RyBpbnQKKwkJREVGQVVMVCAtMSBPTiBFTVBUWQorCQlERUZBVUxUIC0yIE9OIEVSUk9SCisJKSB5 CitGUk9NCisJZ2VuZXJhdGVfc2VyaWVzKDAsIDIpIHg7CisKK1NFTEVDVCBKU09OX1ZBTFVFKGpz b25iICdudWxsJywgJyRhJyBQQVNTSU5HIHBvaW50ICcgKDEsIDIgKScgQVMgYSk7CitTRUxFQ1Qg SlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICckYScgUEFTU0lORyBwb2ludCAnICgxLCAyICknIEFT IGEgUkVUVVJOSU5HIHBvaW50KTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdudWxsJywgJyRh JyBQQVNTSU5HIHBvaW50ICcgKDEsIDIgKScgQVMgYSBSRVRVUk5JTkcgcG9pbnQgRVJST1IgT04g RVJST1IpOworCistLSBUZXN0IFBBU1NJTkcgYW5kIFJFVFVSTklORyBkYXRlL3RpbWUgdHlwZXMK K1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdudWxsJywgJyR0cycgUEFTU0lORyB0aW1lc3RhbXB0 eiAnMjAxOC0wMi0yMSAxMjozNDo1NiArMTAnIEFTIHRzKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpz b25iICdudWxsJywgJyR0cycgUEFTU0lORyB0aW1lc3RhbXB0eiAnMjAxOC0wMi0yMSAxMjozNDo1 NiArMTAnIEFTIHRzIFJFVFVSTklORyB0aW1lc3RhbXB0eik7CitTRUxFQ1QgSlNPTl9WQUxVRShq c29uYiAnbnVsbCcsICckdHMnIFBBU1NJTkcgdGltZXN0YW1wdHogJzIwMTgtMDItMjEgMTI6MzQ6 NTYgKzEwJyBBUyB0cyBSRVRVUk5JTkcgdGltZXN0YW1wKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpz b25iICdudWxsJywgJyR0cycgUEFTU0lORyBkYXRlICcyMDE4LTAyLTIxIDEyOjM0OjU2ICsxMCcg QVMgdHMgUkVUVVJOSU5HIGRhdGUpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAn JHRzJyBQQVNTSU5HIHRpbWUgJzIwMTgtMDItMjEgMTI6MzQ6NTYgKzEwJyBBUyB0cyBSRVRVUk5J TkcgdGltZSk7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICckdHMnIFBBU1NJTkcg dGltZXR6ICcyMDE4LTAyLTIxIDEyOjM0OjU2ICsxMCcgQVMgdHMgUkVUVVJOSU5HIHRpbWV0eik7 CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICckdHMnIFBBU1NJTkcgdGltZXN0YW1w ICcyMDE4LTAyLTIxIDEyOjM0OjU2ICsxMCcgQVMgdHMgUkVUVVJOSU5HIHRpbWVzdGFtcCk7CisK Ky0tIEFsc28gdGVzdCBSRVRVUk5JTkcganNvbltiXQorU0VMRUNUIEpTT05fVkFMVUUoanNvbmIg J251bGwnLCAnJHRzJyBQQVNTSU5HIHRpbWVzdGFtcHR6ICcyMDE4LTAyLTIxIDEyOjM0OjU2ICsx MCcgQVMgdHMgUkVUVVJOSU5HIGpzb24pOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwn LCAnJHRzJyBQQVNTSU5HIHRpbWVzdGFtcHR6ICcyMDE4LTAyLTIxIDEyOjM0OjU2ICsxMCcgQVMg dHMgUkVUVVJOSU5HIGpzb25iKTsKKworLS0gSlNPTl9RVUVSWQorCistLSBqc29uIGFyZ3VtZW50 cyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZAorU0VMRUNUIEpTT05fUVVFUlkoTlVMTCBGT1JNQVQg SlNPTiwgJyQnKTsKKworU0VMRUNUIEpTT05fVkFMVUUoTlVMTDo6anNvbmIsICckJyk7CisKK1NF TEVDVAorCUpTT05fUVVFUlkoanMsICckJyksCisJSlNPTl9RVUVSWShqcywgJyQnIFdJVEhPVVQg V1JBUFBFUiksCisJSlNPTl9RVUVSWShqcywgJyQnIFdJVEggQ09ORElUSU9OQUwgV1JBUFBFUiks CisJSlNPTl9RVUVSWShqcywgJyQnIFdJVEggVU5DT05ESVRJT05BTCBBUlJBWSBXUkFQUEVSKSwK KwlKU09OX1FVRVJZKGpzLCAnJCcgV0lUSCBBUlJBWSBXUkFQUEVSKQorRlJPTQorCShWQUxVRVMK KwkJKGpzb25iICdudWxsJyksCisJCSgnMTIuMycpLAorCQkoJ3RydWUnKSwKKwkJKCciYWFhIicp LAorCQkoJ1sxLCBudWxsLCAiMiJdJyksCisJCSgneyJhIjogMSwgImIiOiBbMl19JykKKwkpIGZv byhqcyk7CisKK1NFTEVDVAorCUpTT05fUVVFUlkoanMsICdzdHJpY3QgJFsqXScpIEFTICJ1bnNw ZWMiLAorCUpTT05fUVVFUlkoanMsICdzdHJpY3QgJFsqXScgV0lUSE9VVCBXUkFQUEVSKSBBUyAi d2l0aG91dCIsCisJSlNPTl9RVUVSWShqcywgJ3N0cmljdCAkWypdJyBXSVRIIENPTkRJVElPTkFM IFdSQVBQRVIpIEFTICJ3aXRoIGNvbmQiLAorCUpTT05fUVVFUlkoanMsICdzdHJpY3QgJFsqXScg V0lUSCBVTkNPTkRJVElPTkFMIEFSUkFZIFdSQVBQRVIpIEFTICJ3aXRoIHVuY29uZCIsCisJSlNP Tl9RVUVSWShqcywgJ3N0cmljdCAkWypdJyBXSVRIIEFSUkFZIFdSQVBQRVIpIEFTICJ3aXRoIgor RlJPTQorCShWQUxVRVMKKwkJKGpzb25iICcxJyksCisJCSgnW10nKSwKKwkJKCdbbnVsbF0nKSwK KwkJKCdbMTIuM10nKSwKKwkJKCdbdHJ1ZV0nKSwKKwkJKCdbImFhYSJdJyksCisJCSgnW1sxLCAy LCAzXV0nKSwKKwkJKCdbeyJhIjogMSwgImIiOiBbMl19XScpLAorCQkoJ1sxLCAiMiIsIG51bGws IFszXV0nKQorCSkgZm9vKGpzKTsKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJyJhYWEiJywg JyQnIFJFVFVSTklORyB0ZXh0KTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICciYWFhIicsICck JyBSRVRVUk5JTkcgdGV4dCBLRUVQIFFVT1RFUyk7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAn ImFhYSInLCAnJCcgUkVUVVJOSU5HIHRleHQgS0VFUCBRVU9URVMgT04gU0NBTEFSIFNUUklORyk7 CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnImFhYSInLCAnJCcgUkVUVVJOSU5HIHRleHQgT01J VCBRVU9URVMpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJyJhYWEiJywgJyQnIFJFVFVSTklO RyB0ZXh0IE9NSVQgUVVPVEVTIE9OIFNDQUxBUiBTVFJJTkcpOworU0VMRUNUIEpTT05fUVVFUlko anNvbmIgJyJhYWEiJywgJyQnIE9NSVQgUVVPVEVTIEVSUk9SIE9OIEVSUk9SKTsKK1NFTEVDVCBK U09OX1FVRVJZKGpzb25iICciYWFhIicsICckJyBSRVRVUk5JTkcganNvbiBPTUlUIFFVT1RFUyBF UlJPUiBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnImFhYSInLCAnJCcgUkVU VVJOSU5HIGJ5dGVhIEZPUk1BVCBKU09OIE9NSVQgUVVPVEVTIEVSUk9SIE9OIEVSUk9SKTsKKwor LS0gQmVoYXZpb3Igd2hlbiBhIFJFVFVSTklORyB0eXBlIGhhcyB0eXBtb2QgIT0gLTEKK1NFTEVD VCBKU09OX1FVRVJZKGpzb25iICciYWFhIicsICckJyBSRVRVUk5JTkcgY2hhcigyKSk7CitTRUxF Q1QgSlNPTl9RVUVSWShqc29uYiAnImFhYSInLCAnJCcgUkVUVVJOSU5HIGNoYXIoMikgT01JVCBR VU9URVMpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJyJhYWEiJywgJyQuYScgUkVUVVJOSU5H IGNoYXIoMikgT01JVCBRVU9URVMgREVGQVVMVCAnYmJiJyBPTiBFTVBUWSk7CitTRUxFQ1QgSlNP Tl9RVUVSWShqc29uYiAnImFhYSInLCAnJC5hJyBSRVRVUk5JTkcgY2hhcigyKSBPTUlUIFFVT1RF UyBERUZBVUxUICciYmJiIic6Ompzb25iIE9OIEVNUFRZKTsKKworLS0gUVVPVEVTIGJlaGF2aW9y IHNob3VsZCBub3QgYmUgc3BlY2lmaWVkIHdoZW4gV0lUSCBXUkFQUEVSIHVzZWQ6CistLSBTaG91 bGQgZmFpbAorU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxXScsICckJyBXSVRIIFdSQVBQRVIg T01JVCBRVU9URVMpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxXScsICckJyBXSVRIIFdS QVBQRVIgS0VFUCBRVU9URVMpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxXScsICckJyBX SVRIIENPTkRJVElPTkFMIFdSQVBQRVIgS0VFUCBRVU9URVMpOworU0VMRUNUIEpTT05fUVVFUlko anNvbmIgJ1sxXScsICckJyBXSVRIIENPTkRJVElPTkFMIFdSQVBQRVIgT01JVCBRVU9URVMpOwor LS0gU2hvdWxkIHN1Y2NlZWQKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMV0nLCAnJCcgV0lU SE9VVCBXUkFQUEVSIE9NSVQgUVVPVEVTKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMV0n LCAnJCcgV0lUSE9VVCBXUkFQUEVSIEtFRVAgUVVPVEVTKTsKKworLS0gdGVzdCBRVU9URVMgYmVo YXZpb3IuCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYid7InJlYyI6ICJ7MSwyLDN9In0nLCAnJC5y ZWMnIHJldHVybmluZyBpbnRbXSBvbWl0IHF1b3Rlcyk7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29u Yid7InJlYyI6ICJ7MSwyLDN9In0nLCAnJC5yZWMnIHJldHVybmluZyBpbnRbXSBrZWVwIHF1b3Rl cyk7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYid7InJlYyI6ICJ7MSwyLDN9In0nLCAnJC5yZWMn IHJldHVybmluZyBpbnRbXSBrZWVwIHF1b3RlcyBlcnJvciBvbiBlcnJvcik7CitTRUxFQ1QgSlNP Tl9RVUVSWShqc29uYid7InJlYyI6ICJbMSwyXSJ9JywgJyQucmVjJyByZXR1cm5pbmcgaW50NHJh bmdlIG9taXQgcXVvdGVzKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iJ3sicmVjIjogIlsxLDJd In0nLCAnJC5yZWMnIHJldHVybmluZyBpbnQ0cmFuZ2Uga2VlcCBxdW90ZXMpOworU0VMRUNUIEpT T05fUVVFUlkoanNvbmIneyJyZWMiOiAiWzEsMl0ifScsICckLnJlYycgCXJldHVybmluZyBpbnQ0 cmFuZ2Uga2VlcCBxdW90ZXMgZXJyb3Igb24gZXJyb3IpOworCitTRUxFQ1QgSlNPTl9RVUVSWShq c29uYiAnW10nLCAnJFsqXScpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1tdJywgJyRbKl0n IE5VTEwgT04gRU1QVFkpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1tdJywgJyRbKl0nIEVN UFRZIE9OIEVNUFRZKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbXScsICckWypdJyBFTVBU WSBBUlJBWSBPTiBFTVBUWSk7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnW10nLCAnJFsqXScg RU1QVFkgT0JKRUNUIE9OIEVNUFRZKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbXScsICck WypdJyBFUlJPUiBPTiBFTVBUWSk7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnW10nLCAnJFsq XScgREVGQVVMVCAnImVtcHR5IicgT04gRU1QVFkpOworCitTRUxFQ1QgSlNPTl9RVUVSWShqc29u YiAnW10nLCAnJFsqXScgRVJST1IgT04gRU1QVFkgTlVMTCBPTiBFUlJPUik7CitTRUxFQ1QgSlNP Tl9RVUVSWShqc29uYiAnW10nLCAnJFsqXScgRVJST1IgT04gRU1QVFkgRU1QVFkgQVJSQVkgT04g RVJST1IpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1tdJywgJyRbKl0nIEVSUk9SIE9OIEVN UFRZIEVNUFRZIE9CSkVDVCBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnW10n LCAnJFsqXScgRVJST1IgT04gRU1QVFkgRVJST1IgT04gRVJST1IpOworU0VMRUNUIEpTT05fUVVF UlkoanNvbmIgJ1tdJywgJyRbKl0nIEVSUk9SIE9OIEVSUk9SKTsKKworU0VMRUNUIEpTT05fUVVF UlkoanNvbmIgJ1sxLDJdJywgJyRbKl0nIEVSUk9SIE9OIEVSUk9SKTsKK1NFTEVDVCBKU09OX1FV RVJZKGpzb25iICdbMSwyXScsICckWypdJyBERUZBVUxUICciZW1wdHkiJyBPTiBFUlJPUik7CisK K1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMSwyXScsICckJyBSRVRVUk5JTkcganNvbik7CitT RUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEsMl0nLCAnJCcgUkVUVVJOSU5HIGpzb24gRk9STUFU IEpTT04pOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxLDJdJywgJyQnIFJFVFVSTklORyBq c29uYik7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEsMl0nLCAnJCcgUkVUVVJOSU5HIGpz b25iIEZPUk1BVCBKU09OKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMSwyXScsICckJyBS RVRVUk5JTkcgdGV4dCk7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEsMl0nLCAnJCcgUkVU VVJOSU5HIGNoYXIoMTApKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMSwyXScsICckJyBS RVRVUk5JTkcgY2hhcigzKSk7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEsMl0nLCAnJCcg UkVUVVJOSU5HIHRleHQgRk9STUFUIEpTT04pOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sx LDJdJywgJyQnIFJFVFVSTklORyBieXRlYSk7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEs Ml0nLCAnJCcgUkVUVVJOSU5HIGJ5dGVhIEZPUk1BVCBKU09OKTsKKworU0VMRUNUIEpTT05fUVVF UlkoanNvbmIgJ1sxLDJdJywgJyRbKl0nIFJFVFVSTklORyBieXRlYSBFTVBUWSBPQkpFQ1QgT04g RVJST1IpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxLDJdJywgJyRbKl0nIFJFVFVSTklO RyBieXRlYSBGT1JNQVQgSlNPTiBFTVBUWSBPQkpFQ1QgT04gRVJST1IpOworU0VMRUNUIEpTT05f UVVFUlkoanNvbmIgJ1sxLDJdJywgJyRbKl0nIFJFVFVSTklORyBqc29uIEVNUFRZIE9CSkVDVCBP TiBFUlJPUik7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEsMl0nLCAnJFsqXScgUkVUVVJO SU5HIGpzb25iIEVNUFRZIE9CSkVDVCBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29u YiAnWzMsNF0nLCAnJFsqXScgUkVUVVJOSU5HIGJpZ2ludFtdIEVNUFRZIE9CSkVDVCBPTiBFUlJP Uik7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnIlszLDRdIicsICckWypdJyBSRVRVUk5JTkcg YmlnaW50W10gRU1QVFkgT0JKRUNUIE9OIEVSUk9SKTsKKworLS0gQ29lcmNpb24gZmFpbHMgd2l0 aCBxdW90ZXMgb24KK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICciMTIzLjEiJywgJyQnIFJFVFVS TklORyBpbnQyIGVycm9yIG9uIGVycm9yKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICciMTIz LjEiJywgJyQnIFJFVFVSTklORyBpbnQ0IGVycm9yIG9uIGVycm9yKTsKK1NFTEVDVCBKU09OX1FV RVJZKGpzb25iICciMTIzLjEiJywgJyQnIFJFVFVSTklORyBpbnQ4IGVycm9yIG9uIGVycm9yKTsK K1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICciMTIzLjEiJywgJyQnIFJFVFVSTklORyBib29sIGVy cm9yIG9uIGVycm9yKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICciMTIzLjEiJywgJyQnIFJF VFVSTklORyBudW1lcmljIGVycm9yIG9uIGVycm9yKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25i ICciMTIzLjEiJywgJyQnIFJFVFVSTklORyByZWFsIGVycm9yIG9uIGVycm9yKTsKK1NFTEVDVCBK U09OX1FVRVJZKGpzb25iICciMTIzLjEiJywgJyQnIFJFVFVSTklORyBmbG9hdDggZXJyb3Igb24g ZXJyb3IpOworLS0gRmluZSB3aXRoIE9NSVQgUVVPVEVTCitTRUxFQ1QgSlNPTl9RVUVSWShqc29u YiAnIjEyMy4xIicsICckJyBSRVRVUk5JTkcgaW50MiBvbWl0IHF1b3RlcyBlcnJvciBvbiBlcnJv cik7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnIjEyMy4xIicsICckJyBSRVRVUk5JTkcgZmxv YXQ4IG9taXQgcXVvdGVzIGVycm9yIG9uIGVycm9yKTsKKworLS0gUkVUVUdOSU5HIHBzZXVkby10 eXBlcyBub3QgYWxsb3dlZAorU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1szLDRdJywgJyRbKl0n IFJFVFVSTklORyBhbnlhcnJheSBFTVBUWSBPQkpFQ1QgT04gRVJST1IpOworCitTRUxFQ1QKKwl4 LCB5LAorCUpTT05fUVVFUlkoCisJCWpzb25iICdbMSwyLDMsNCw1LG51bGxdJywKKwkJJyRbKl0g PyAoQCA+PSAkeCAmJiBAIDw9ICR5KScKKwkJUEFTU0lORyB4IEFTIHgsIHkgQVMgeQorCQlXSVRI IENPTkRJVElPTkFMIFdSQVBQRVIKKwkJRU1QVFkgQVJSQVkgT04gRU1QVFkKKwkpIGxpc3QKK0ZS T00KKwlnZW5lcmF0ZV9zZXJpZXMoMCwgNCkgeCwKKwlnZW5lcmF0ZV9zZXJpZXMoMCwgNCkgeTsK KworLS0gcmVjb3JkIHR5cGUgcmV0dXJuaW5nIHdpdGggcXVvdGVzIGJlaGF2aW9yLgorQ1JFQVRF IFRZUEUgY29tcF9hYmMgQVMgKGEgdGV4dCwgYiBpbnQsIGMgdGltZXN0YW1wKTsKK1NFTEVDVCBK U09OX1FVRVJZKGpzb25iJ3sicmVjIjogIihhYmMsNDIsMDEuMDIuMjAwMykifScsICckLnJlYycg cmV0dXJuaW5nIGNvbXBfYWJjIG9taXQgcXVvdGVzKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25i J3sicmVjIjogIihhYmMsNDIsMDEuMDIuMjAwMykifScsICckLnJlYycgcmV0dXJuaW5nIGNvbXBf YWJjIGtlZXAgcXVvdGVzKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iJ3sicmVjIjogIihhYmMs NDIsMDEuMDIuMjAwMykifScsICckLnJlYycgcmV0dXJuaW5nIGNvbXBfYWJjIGtlZXAgcXVvdGVz IGVycm9yIG9uIGVycm9yKTsKK0RST1AgVFlQRSBjb21wX2FiYzsKKworLS0gRXh0ZW5zaW9uOiBy ZWNvcmQgdHlwZXMgcmV0dXJuaW5nCitDUkVBVEUgVFlQRSBzcWxqc29uYl9yZWMgQVMgKGEgaW50 LCB0IHRleHQsIGpzIGpzb24sIGpiIGpzb25iLCBqc2EganNvbltdKTsKK0NSRUFURSBUWVBFIHNx bGpzb25iX3JlY2EgQVMgKHJlY2Egc3FsanNvbmJfcmVjW10pOworCitTRUxFQ1QgSlNPTl9RVUVS WShqc29uYiAnW3siYSI6IDEsICJiIjogImZvbyIsICJ0IjogImFhYSIsICJqcyI6IFsxLCAiMiIs IHt9XSwgImpiIjogeyJ4IjogWzEsICIyIiwge31dfX0sICB7ImEiOiAyfV0nLCAnJFswXScgUkVU VVJOSU5HIHNxbGpzb25iX3JlYyk7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnW3siYSI6ICJh IiwgImIiOiAiZm9vIiwgInQiOiAiYWFhIiwgImpzIjogWzEsICIyIiwge31dLCAiamIiOiB7Ingi OiBbMSwgIjIiLCB7fV19fSwgIHsiYSI6IDJ9XScsICckWzBdJyBSRVRVUk5JTkcgc3FsanNvbmJf cmVjIEVSUk9SIE9OIEVSUk9SKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbeyJhIjogImEi LCAiYiI6ICJmb28iLCAidCI6ICJhYWEiLCAianMiOiBbMSwgIjIiLCB7fV0sICJqYiI6IHsieCI6 IFsxLCAiMiIsIHt9XX19LCAgeyJhIjogMn1dJywgJyRbMF0nIFJFVFVSTklORyBzcWxqc29uYl9y ZWMpOworU0VMRUNUICogRlJPTSB1bm5lc3QoKEpTT05fUVVFUlkoanNvbmIgJ3sianNhIjogIFt7 ImEiOiAxLCAiYiI6IFsiZm9vIl19LCB7ImEiOiAyLCAiYyI6IHt9fSwgMTIzXX0nLCAnJCcgUkVU VVJOSU5HIHNxbGpzb25iX3JlYykpLmpzYSk7CitTRUxFQ1QgKiBGUk9NIHVubmVzdCgoSlNPTl9R VUVSWShqc29uYiAneyJyZWNhIjogW3siYSI6IDEsICJ0IjogWyJmb28iLCBbXV19LCB7ImEiOiAy LCAiamIiOiBbe30sIHRydWVdfV19JywgJyQnIFJFVFVSTklORyBzcWxqc29uYl9yZWNhKSkucmVj YSk7CisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbeyJhIjogMSwgImIiOiAiZm9vIiwgInQi OiAiYWFhIiwgImpzIjogWzEsICIyIiwge31dLCAiamIiOiB7IngiOiBbMSwgIjIiLCB7fV19fSwg IHsiYSI6IDJ9XScsICckWzBdJyBSRVRVUk5JTkcganNvbnBhdGgpOworU0VMRUNUIEpTT05fUVVF UlkoanNvbmIgJ1t7ImEiOiAxLCAiYiI6ICJmb28iLCAidCI6ICJhYWEiLCAianMiOiBbMSwgIjIi LCB7fV0sICJqYiI6IHsieCI6IFsxLCAiMiIsIHt9XX19LCAgeyJhIjogMn1dJywgJyRbMF0nIFJF VFVSTklORyBqc29ucGF0aCBFUlJPUiBPTiBFUlJPUik7CisKKy0tIEV4dGVuc2lvbjogYXJyYXkg dHlwZXMgcmV0dXJuaW5nCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEsMixudWxsLCIzIl0n LCAnJFsqXScgUkVUVVJOSU5HIGludFtdIFdJVEggV1JBUFBFUik7CitTRUxFQ1QgSlNPTl9RVUVS WShqc29uYiAnWzEsMixudWxsLCJhIl0nLCAnJFsqXScgUkVUVVJOSU5HIGludFtdIFdJVEggV1JB UFBFUiBFUlJPUiBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEsMixudWxs LCJhIl0nLCAnJFsqXScgUkVUVVJOSU5HIGludFtdIFdJVEggV1JBUFBFUik7CitTRUxFQ1QgKiBG Uk9NIHVubmVzdChKU09OX1FVRVJZKGpzb25iICdbeyJhIjogMSwgInQiOiBbImZvbyIsIFtdXX0s IHsiYSI6IDIsICJqYiI6IFt7fSwgdHJ1ZV19XScsICckJyBSRVRVUk5JTkcgc3FsanNvbmJfcmVj W10pKTsKKworLS0gRXh0ZW5zaW9uOiBkb21haW4gdHlwZXMgcmV0dXJuaW5nCitTRUxFQ1QgSlNP Tl9RVUVSWShqc29uYiAneyJhIjogMX0nLCAnJC5hJyBSRVRVUk5JTkcgc3FsanNvbmJfaW50X25v dF9udWxsKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICd7ImEiOiAxfScsICckLmInIFJFVFVS TklORyBzcWxqc29uYl9pbnRfbm90X251bGwpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ3si YSI6IDF9JywgJyQuYicgUkVUVVJOSU5HIHNxbGpzb25iX2ludF9ub3RfbnVsbCBFUlJPUiBPTiBF UlJPUik7CisKKy0tIFRlc3QgdGltZXN0YW1wdHogcGFzc2luZyBhbmQgb3V0cHV0CitTRUxFQ1Qg SlNPTl9RVUVSWShqc29uYiAnbnVsbCcsICckdHMnIFBBU1NJTkcgdGltZXN0YW1wdHogJzIwMTgt MDItMjEgMTI6MzQ6NTYgKzEwJyBBUyB0cyk7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnbnVs bCcsICckdHMnIFBBU1NJTkcgdGltZXN0YW1wdHogJzIwMTgtMDItMjEgMTI6MzQ6NTYgKzEwJyBB UyB0cyBSRVRVUk5JTkcganNvbik7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnbnVsbCcsICck dHMnIFBBU1NJTkcgdGltZXN0YW1wdHogJzIwMTgtMDItMjEgMTI6MzQ6NTYgKzEwJyBBUyB0cyBS RVRVUk5JTkcganNvbmIpOworCistLSBUZXN0IGNvbnN0cmFpbnRzCisKK0NSRUFURSBUQUJMRSB0 ZXN0X2pzb25iX2NvbnN0cmFpbnRzICgKKwlqcyB0ZXh0LAorCWkgaW50LAorCXgganNvbmIgREVG QVVMVCBKU09OX1FVRVJZKGpzb25iICdbMSwyXScsICckWypdJyBXSVRIIFdSQVBQRVIpCisJQ09O U1RSQUlOVCB0ZXN0X2pzb25iX2NvbnN0cmFpbnQxCisJCUNIRUNLIChqcyBJUyBKU09OKQorCUNP TlNUUkFJTlQgdGVzdF9qc29uYl9jb25zdHJhaW50MgorCQlDSEVDSyAoSlNPTl9FWElTVFMoanM6 Ompzb25iLCAnJC5hJyBQQVNTSU5HIGkgKyA1IEFTIGludCwgaTo6dGV4dCBBUyB0eHQsIGFycmF5 WzEsMiwzXSBhcyBhcnIpKQorCUNPTlNUUkFJTlQgdGVzdF9qc29uYl9jb25zdHJhaW50MworCQlD SEVDSyAoSlNPTl9WQUxVRShqczo6anNvbmIsICckLmEnIFJFVFVSTklORyBpbnQgREVGQVVMVCAn MTInIE9OIEVNUFRZIEVSUk9SIE9OIEVSUk9SKSA+IGkpCisJQ09OU1RSQUlOVCB0ZXN0X2pzb25i X2NvbnN0cmFpbnQ0CisJCUNIRUNLIChKU09OX1FVRVJZKGpzOjpqc29uYiwgJyQuYScgV0lUSCBD T05ESVRJT05BTCBXUkFQUEVSIEVNUFRZIE9CSkVDVCBPTiBFUlJPUikgPCBqc29uYiAnWzEwXScp CisJQ09OU1RSQUlOVCB0ZXN0X2pzb25iX2NvbnN0cmFpbnQ1CisJCUNIRUNLIChKU09OX1FVRVJZ KGpzOjpqc29uYiwgJyQuYScgUkVUVVJOSU5HIGNoYXIoNSkgT01JVCBRVU9URVMgRU1QVFkgQVJS QVkgT04gRU1QVFkpID4gICdhJyBDT0xMQVRFICJDIikKKyk7CisKK1xkIHRlc3RfanNvbmJfY29u c3RyYWludHMKKworU0VMRUNUIGNoZWNrX2NsYXVzZQorRlJPTSBpbmZvcm1hdGlvbl9zY2hlbWEu Y2hlY2tfY29uc3RyYWludHMKK1dIRVJFIGNvbnN0cmFpbnRfbmFtZSBMSUtFICd0ZXN0X2pzb25i X2NvbnN0cmFpbnQlJworT1JERVIgQlkgMTsKKworU0VMRUNUIHBnX2dldF9leHByKGFkYmluLCBh ZHJlbGlkKQorRlJPTSBwZ19hdHRyZGVmCitXSEVSRSBhZHJlbGlkID0gJ3Rlc3RfanNvbmJfY29u c3RyYWludHMnOjpyZWdjbGFzcworT1JERVIgQlkgMTsKKworSU5TRVJUIElOVE8gdGVzdF9qc29u Yl9jb25zdHJhaW50cyBWQUxVRVMgKCcnLCAxKTsKK0lOU0VSVCBJTlRPIHRlc3RfanNvbmJfY29u c3RyYWludHMgVkFMVUVTICgnMScsIDEpOworSU5TRVJUIElOVE8gdGVzdF9qc29uYl9jb25zdHJh aW50cyBWQUxVRVMgKCdbXScpOworSU5TRVJUIElOVE8gdGVzdF9qc29uYl9jb25zdHJhaW50cyBW QUxVRVMgKCd7ImIiOiAxfScsIDEpOworSU5TRVJUIElOVE8gdGVzdF9qc29uYl9jb25zdHJhaW50 cyBWQUxVRVMgKCd7ImEiOiAxfScsIDEpOworSU5TRVJUIElOVE8gdGVzdF9qc29uYl9jb25zdHJh aW50cyBWQUxVRVMgKCd7ImEiOiA3fScsIDEpOworSU5TRVJUIElOVE8gdGVzdF9qc29uYl9jb25z dHJhaW50cyBWQUxVRVMgKCd7ImEiOiAxMH0nLCAxKTsKKworRFJPUCBUQUJMRSB0ZXN0X2pzb25i X2NvbnN0cmFpbnRzOworCistLSBUZXN0IG11dGFiaWxpbHkgb2YgcXVlcnkgZnVuY3Rpb25zCitD UkVBVEUgVEFCTEUgdGVzdF9qc29uYl9tdXRhYmlsaXR5KGpzIGpzb25iLCBiIGludCk7CitDUkVB VEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJCcpKTsK K0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICck LmFbMF0nKSk7CitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FV RVJZKGpzLCAnJC50aW1lKCknKSk7CitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmls aXR5IChKU09OX1FVRVJZKGpzLCAnJC5kYXRlKCknKSk7CitDUkVBVEUgSU5ERVggT04gdGVzdF9q c29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJC50aW1lX3R6KCknKSk7CitDUkVBVEUg SU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJC50aW1lc3Rh bXAoKScpKTsKK0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVF UlkoanMsICckLnRpbWVzdGFtcF90eigpJykpOworCitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29u Yl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJC5hID8gKEAuZGF0ZSgpIDwgJC50aW1lX3R6 KCkpJykpOworQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVS WShqcywgJyQuYSA/IChALmRhdGUoKSA8ICQudGltZSgpKScpKTsKK0NSRUFURSBJTkRFWCBPTiB0 ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICckLmEgPyAoQC50aW1lKCkgPCAk LnRpbWUoKSknKSk7CitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09O X1FVRVJZKGpzLCAnJC5hID8gKEAudGltZSgpIDwgJC50aW1lX3R6KCkpJykpOworQ1JFQVRFIElO REVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyQuYSA/IChALnRp bWVzdGFtcCgpIDwgJC50aW1lc3RhbXBfdHooKSknKSk7CitDUkVBVEUgSU5ERVggT04gdGVzdF9q c29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJC5hID8gKEAudGltZXN0YW1wX3R6KCkg PCAkLnRpbWVzdGFtcF90eigpKScpKTsKKworQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0 YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyQuYSA/IChALnRpbWUoKSA8ICQuZGF0ZXRpbWUoIkhI Ok1JIFRaSCIpKScpKTsKK0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpT T05fUVVFUlkoanMsICckLmEgPyAoQC5kYXRlKCkgPCAkLmRhdGV0aW1lKCJISDpNSSBUWkgiKSkn KSk7CitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpz LCAnJC5hID8gKEAudGltZXN0YW1wKCkgPCAkLmRhdGV0aW1lKCJISDpNSSBUWkgiKSknKSk7CitD UkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJC5h ID8gKEAudGltZXN0YW1wKCkgPCAkLmRhdGV0aW1lKCJISDpNSSIpKScpKTsKK0NSRUFURSBJTkRF WCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICckLmEgPyAoQC50aW1l c3RhbXBfdHooKSA8ICQuZGF0ZXRpbWUoIkhIOk1JIFRaSCIpKScpKTsKK0NSRUFURSBJTkRFWCBP TiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICckLmEgPyAoQC50aW1lc3Rh bXBfdHooKSA8ICQuZGF0ZXRpbWUoIkhIOk1JIikpJykpOworQ1JFQVRFIElOREVYIE9OIHRlc3Rf anNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyQuZGF0ZSgpIDwgJHgnIFBBU1NJTkcg JzEyOjM0Jzo6dGltZXR6IEFTIHgpKTsKK0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFi aWxpdHkgKEpTT05fUVVFUlkoanMsICckLmRhdGUoKSA8ICR4JyBQQVNTSU5HICcxMjM0Jzo6aW50 IEFTIHgpKTsKK0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVF UlkoanMsICckLmEgPyAoQC50aW1lc3RhbXAoMikgPCAkLnRpbWVzdGFtcCgzKSknKSk7CisKK0NS RUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICckLmRh dGV0aW1lKCknKSk7CitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09O X1FVRVJZKGpzLCAnJC5hID8gKEAgPCAkLmRhdGV0aW1lKCkpJykpOworQ1JFQVRFIElOREVYIE9O IHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyQuYSA/IChALmRhdGV0aW1l KCkgPCAkLmRhdGV0aW1lKCkpJykpOworQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJp bGl0eSAoSlNPTl9RVUVSWShqcywgJyQuYSA/IChALmRhdGV0aW1lKCkgPCAkLmRhdGV0aW1lKCJI SDpNSSBUWkgiKSknKSk7CitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChK U09OX1FVRVJZKGpzLCAnJC5hID8gKEAuZGF0ZXRpbWUoIkhIOk1JIFRaSCIpIDwgJC5kYXRldGlt ZSgiSEg6TUkgVFpIIikpJykpOworQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0 eSAoSlNPTl9RVUVSWShqcywgJyQuYSA/IChALmRhdGV0aW1lKCJISDpNSSIpIDwgJC5kYXRldGlt ZSgiWVktTU0tREQgSEg6TUkiKSknKSk7CitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRh YmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJC5hID8gKEAuZGF0ZXRpbWUoIkhIOk1JIFRaSCIpIDwg JC5kYXRldGltZSgiWVktTU0tREQgSEg6TUkiKSknKSk7CitDUkVBVEUgSU5ERVggT04gdGVzdF9q c29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJC5kYXRldGltZSgiSEg6TUkgVFpIIikg PCAkeCcgUEFTU0lORyAnMTI6MzQnOjp0aW1ldHogQVMgeCkpOworQ1JFQVRFIElOREVYIE9OIHRl c3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyQuZGF0ZXRpbWUoIkhIOk1JIFRa SCIpIDwgJHknIFBBU1NJTkcgJzEyOjM0Jzo6dGltZXR6IEFTIHgpKTsKK0NSRUFURSBJTkRFWCBP TiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICckLmRhdGV0aW1lKCkgPCAk eCcgUEFTU0lORyAnMTI6MzQnOjp0aW1ldHogQVMgeCkpOworQ1JFQVRFIElOREVYIE9OIHRlc3Rf anNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyQuZGF0ZXRpbWUoKSA8ICR4JyBQQVNT SU5HICcxMjM0Jzo6aW50IEFTIHgpKTsKK0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFi aWxpdHkgKEpTT05fUVVFUlkoanMsICckLmRhdGV0aW1lKCkgPyAoQCA9PSAkeCknIFBBU1NJTkcg JzEyOjM0Jzo6dGltZSBBUyB4KSk7CitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmls aXR5IChKU09OX1FVRVJZKGpzLCAnJC5kYXRldGltZSgiWVktTU0tREQiKSA/IChAID09ICR4KScg UEFTU0lORyAnMjAyMC0wNy0xNCc6OmRhdGUgQVMgeCkpOworQ1JFQVRFIElOREVYIE9OIHRlc3Rf anNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyRbMSwgJC5hID8gKEAuZGF0ZXRpbWUo KSA9PSAkeCldJyBQQVNTSU5HICcxMjozNCc6OnRpbWUgQVMgeCkpOworQ1JFQVRFIElOREVYIE9O IHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyRbMSwgMCB0byAkLmEgPyAo QC5kYXRldGltZSgpID09ICR4KV0nIFBBU1NJTkcgJzEyOjM0Jzo6dGltZSBBUyB4KSk7CitDUkVB VEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJFsxLCAk LmEgPyAoQC5kYXRldGltZSgiSEg6TUkiKSA9PSAkeCldJyBQQVNTSU5HICcxMjozNCc6OnRpbWUg QVMgeCkpOworQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9WQUxV RShqcywgJyQnIERFRkFVTFQgcmFuZG9tKCk6OmludCBPTiBFUlJPUikpOworCistLSBERUZBVUxU IGV4cHJlc3Npb24KK0NSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIHJldF9zZXRpbnQoKSBSRVRV Uk5TIFNFVE9GIGludGVnZXIgQVMKKyQkCitCRUdJTgorICAgIFJFVFVSTiBRVUVSWSBFWEVDVVRF ICdzZWxlY3QgMSB1bmlvbiBhbGwgc2VsZWN0IDEnOworRU5EOworJCQKK0xBTkdVQUdFIHBscGdz cWwgSU1NVVRBQkxFOworU0VMRUNUIEpTT05fUVVFUlkoanMsICckJyAgUkVUVVJOSU5HIGludCBE RUZBVUxUIHJldF9zZXRpbnQoKSBPTiBFUlJPUikgRlJPTSB0ZXN0X2pzb25iX211dGFiaWxpdHk7 CitTRUxFQ1QgSlNPTl9RVUVSWShqcywgJyQnICBSRVRVUk5JTkcgaW50IERFRkFVTFQgYiArIDEg T04gRVJST1IpIEZST00gdGVzdF9qc29uYl9tdXRhYmlsaXR5OworU0VMRUNUIEpTT05fUVVFUlko anMsICckJyAgUkVUVVJOSU5HIGludCBERUZBVUxUIHN1bSgxKSBvdmVyKCkgT04gRVJST1IpIEZS T00gdGVzdF9qc29uYl9tdXRhYmlsaXR5OworU0VMRUNUIEpTT05fUVVFUlkoanMsICckJyAgUkVU VVJOSU5HIGludCBERUZBVUxUIChTRUxFQ1QgMSkgT04gRVJST1IpIEZST00gdGVzdF9qc29uYl9t dXRhYmlsaXR5OworRFJPUCBUQUJMRSB0ZXN0X2pzb25iX211dGFiaWxpdHk7CitEUk9QIEZVTkNU SU9OIHJldF9zZXRpbnQ7CisKKy0tIEV4dGVuc2lvbjogbm9uLWNvbnN0YW50IEpTT04gcGF0aAor U0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICd7ImEiOiAxMjN9JywgJyQnIHx8ICcuJyB8fCAnYScp OworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ3siYSI6IDEyM30nLCAnJCcgfHwgJy4nIHx8ICdh Jyk7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAneyJhIjogMTIzfScsICckJyB8fCAnLicgfHwg J2InIERFRkFVTFQgJ2ZvbycgT04gRU1QVFkpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ3si YSI6IDEyM30nLCAnJCcgfHwgJy4nIHx8ICdhJyk7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAn eyJhIjogMTIzfScsICckJyB8fCAnLicgfHwgJ2EnIFdJVEggV1JBUFBFUik7CistLSBTaG91bGQg ZmFpbCAoaW52YWxpZCBwYXRoKQorU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ3siYSI6IDEyM30n LCAnZXJyb3InIHx8ICcgJyB8fCAnZXJyb3InKTsKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5k ZXggMDQyZDA0YzhkZS4uNjE2ZTMxNWVjNCAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50 L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAg LTEyNjIsNiArMTI2Miw3IEBAIEpvaW4KIEpvaW5Db3N0V29ya3NwYWNlCiBKb2luRG9tYWluCiBK b2luRXhwcgorSnNvbkZ1bmNFeHByCiBKb2luSGFzaEVudHJ5CiBKb2luUGF0aAogSm9pblBhdGhF eHRyYURhdGEKQEAgLTEyNzIsMTggKzEyNzMsMjggQEAgSnNPYmplY3QKIEpzVmFsdWUKIEpzb25B Z2dDb25zdHJ1Y3RvcgogSnNvbkFnZ1N0YXRlCitKc29uQXJndW1lbnQKIEpzb25BcnJheUFnZwog SnNvbkFycmF5Q29uc3RydWN0b3IKIEpzb25BcnJheVF1ZXJ5Q29uc3RydWN0b3IKIEpzb25CYXNl T2JqZWN0SW5mbworSnNvbkJlaGF2aW9yCitKc29uQmVoYXZpb3JUeXBlCitKc29uQ29lcmNpb24K IEpzb25Db25zdHJ1Y3RvckV4cHIKIEpzb25Db25zdHJ1Y3RvckV4cHJTdGF0ZQogSnNvbkNvbnN0 cnVjdG9yVHlwZQogSnNvbkVuY29kaW5nCitKc29uRXhwcgorSnNvbkV4cHJPcAorSnNvbkV4cHJQ b3N0RXZhbFN0YXRlCitKc29uRXhwclN0YXRlCiBKc29uRm9ybWF0CiBKc29uRm9ybWF0VHlwZQog SnNvbkhhc2hFbnRyeQogSnNvbklzUHJlZGljYXRlCitKc29uSXRlbUNvZXJjaW9uCitKc29uSXRl bVR5cGUKIEpzb25JdGVyYXRlU3RyaW5nVmFsdWVzQWN0aW9uCiBKc29uS2V5VmFsdWUKIEpzb25M ZXhDb250ZXh0CkBAIC0xMzAxLDYgKzEzMTIsNyBAQCBKc29uUGFyc2VDb250ZXh0CiBKc29uUGFy c2VFcnJvclR5cGUKIEpzb25QYXRoCiBKc29uUGF0aEJvb2wKK0pzb25QYXRoRGF0YXR5cGVTdGF0 dXMKIEpzb25QYXRoRXhlY0NvbnRleHQKIEpzb25QYXRoRXhlY1Jlc3VsdAogSnNvblBhdGhHaW5B ZGRQYXRoSXRlbUZ1bmMKQEAgLTEzMTMsMTAgKzEzMjUsMTUgQEAgSnNvblBhdGhHaW5QYXRoSXRl bQogSnNvblBhdGhJdGVtCiBKc29uUGF0aEl0ZW1UeXBlCiBKc29uUGF0aEtleXdvcmQKK0pzb25Q YXRoTXV0YWJsZUNvbnRleHQKIEpzb25QYXRoUGFyc2VJdGVtCiBKc29uUGF0aFBhcnNlUmVzdWx0 CiBKc29uUGF0aFByZWRpY2F0ZUNhbGxiYWNrCiBKc29uUGF0aFN0cmluZworSnNvblBhdGhWYXJp YWJsZQorSnNvblBhdGhWYXJpYWJsZUV2YWxDb250ZXh0CitKc29uUGF0aFZhckNhbGxiYWNrCitK c29uUXVvdGVzCiBKc29uUmV0dXJuaW5nCiBKc29uU2NhbGFyRXhwcgogSnNvblNlbUFjdGlvbgpA QCAtMTMzMyw2ICsxMzUwLDcgQEAgSnNvblZhbHVlRXhwcgogSnNvblZhbHVlTGlzdAogSnNvblZh bHVlTGlzdEl0ZXJhdG9yCiBKc29uVmFsdWVUeXBlCitKc29uV3JhcHBlcgogSnNvbmIKIEpzb25i QWdnU3RhdGUKIEpzb25iQ29udGFpbmVyCi0tIAoyLjQzLjAKCg== --00000000000030f4180614012e4f--