Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vgOX8-00BmaW-18 for pgsql-hackers@arkaria.postgresql.org; Thu, 15 Jan 2026 14:41:11 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vgOX6-00HK5b-08 for pgsql-hackers@arkaria.postgresql.org; Thu, 15 Jan 2026 14:41:08 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vgOX5-00HK5N-0m for pgsql-hackers@lists.postgresql.org; Thu, 15 Jan 2026 14:41:07 +0000 Received: from mail-ed1-x52d.google.com ([2a00:1450:4864:20::52d]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vgOX2-000dF2-1d for pgsql-hackers@lists.postgresql.org; Thu, 15 Jan 2026 14:41:07 +0000 Received: by mail-ed1-x52d.google.com with SMTP id 4fb4d7f45d1cf-64dfb22c7e4so3706337a12.1 for ; Thu, 15 Jan 2026 06:41:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768488063; x=1769092863; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=3JA9IDx+YYuCsl4ork2b7hl1YDcuTY3P0b6v20gmg18=; b=DAeBTufVxDLAcVH7SZkXKmLuNidf1Vsme82Y/OxFw0PU/P9iJFnCuIxZtOFP+UEsGx FPFt1bDc6jAdAQL4KcugIkRHt+W1dN8VSoZApiPGbmHswyF5bW5mqLqs2fhtTq0BCqKv jkpJgOdqsZCxCAiQNYo4e0jYvGaiqAvwO/Ot+EQRIOMmET+wkHDe2TDgdDP6aZxzzIRS ERxwTmk4UmYqfJiCydgLF6Mh01iCS97HiroWLnv6ZTIbEbUK43xeMTSK3K7hy75S5meY 7ji4LXx/0YlAsWDD+lL+NercnnFqlCLpLX1y9w/M/RYPgr1L6knTpFzu6x9FFu3GUwJQ FQpA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768488063; x=1769092863; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=3JA9IDx+YYuCsl4ork2b7hl1YDcuTY3P0b6v20gmg18=; b=LA00frienas60HHnoohwVLKuL/BbLEhKVa+bT1ZQliVLEY7Weui1wQSo9suTesgDR0 yohPcJmaBx95D43LTA8x3J5RK1u50kIqRmxUNIHLMXP7VnvGjbOdpKR81JmVw/FS+kFP 7i2V8OJSMMInFdMhL6MgtpwTQpM+/P0nejYHF/DusXc7R4mTUly+hjOYiYpV/5lNG4Z+ x7v9VUe8gQBlhxTNXDRwGRERgSqhpPavO0XI9hU64wdt/vDXiwPszCdv+mROPpy+z70p uqYpfSf4RFlK0swc5jN9Zmnjw6YWh/D4GJt6nkUdrskXmw1sSPKW7QiopWOYM91bEvtK lKWQ== X-Forwarded-Encrypted: i=1; AJvYcCU467dYUOJJ6z5drSdP5Gp8hAttdVd3W7wA2IBPrTUj9Z7QNtLi56h/64NYn+BoC78xu4fobgEK0x10I8TK@lists.postgresql.org X-Gm-Message-State: AOJu0YwLGrFn2jdPJuVu3YKxIZxtgE83a4dzIo4R3alnQw8/rwT2iZSq SQf/7oFTzpCXx4JboviGWJm8jkf8HTRDtwJxLtxvliJsvWa0H58v81dUzh0W//U3VOmBe9kndjL 3AgROpPwhmh5Sm+C1ry0cbXXuhIq0zSI= X-Gm-Gg: AY/fxX7iOBu/i3n0jVur0Ox2hluYpBx7s6QEzgaL3nQlt7qXZJ86JL8z0KP4Wn9iYK4 6yhZ8YXLc0pHg7+eXAhj/3SvU9UlQpu5fgHtE/HqCRM6rP2q1kaBgRBiK+8NNLcEHPgh69nZ7sj FfkunkEI2esPw0TNpSI5lrSIWDVoclLXADZLmkZefe3t6pcorf9UvJZWCIZSfGSBbBmL4Oh6qui DdwzSqJlAUI46oTe6lZqJVLUyAxZeqqSomHRmty+NNCMJkcxyC6XgWdapvg82jupQTvT26NSRGo duNv4QN+VqEzm4rf10caIw6t7AQ= X-Received: by 2002:a17:907:6887:b0:b87:763b:3da6 with SMTP id a640c23a62f3a-b8777c07ed4mr207329966b.23.1768488062941; Thu, 15 Jan 2026 06:41:02 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Robert Haas Date: Thu, 15 Jan 2026 09:40:49 -0500 X-Gm-Features: AZwV_QivDhBHkrkzgObOKyj1MWJgqJ4lrEFdI9K5IctuCl7z9GIz8fpyXYY10Jk Message-ID: Subject: Re: pg_plan_advice To: Jakub Wartak Cc: Lukas Fittl , Jacob Champion , Dian Fay , Matheus Alcantara , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000c84af706486e3644" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000c84af706486e3644 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Jan 15, 2026 at 7:28=E2=80=AFAM Jakub Wartak wrote: > The last one seems to pass all my tests (with already provided fixup > from yesterday), but I'm absolutely not sure if that's the proper way to > address that). Thanks. I don't think that's the right fix but the analysis was very helpful to me in understanding the problem. I think the issue is that the previous code was confusing "need to generate an advice string" with "need to walk the plan tree". The latter is a superset of the former, because we also need to walk the plan tree to generate advice feedback. So here's v10. 0001-0004 are unchanged, with the exception that in 0003, I have adjusted accumulate_append_subpath() to incorporate the absorbed AppendPath's child_append_relid_sets into the surviving AppendPath's child_append_relid_sets, instead of only the absorbed AppendPath's relids proper. I don't think this makes any practical difference to pg_plan_advice, but I might be wrong, and the old way seems like an obvious oversight. 0005 has a bunch of small fixes, thanks to all the review comments: - Fixed mis-spelled Reviewed-by header for Ajay Pal. - Added Reviewed-by header for John Naylor. - Added modified version of the test case proposed by Jacob. - Changed a "break" to "continue" in pgpa_occurrence_number. I don't think this had any practical impact but it was inconsistent and contradicted the comment. - Added a new walk_plan_tree flag to pgpa_planner_state to avoid getting confused about whether to build pgpa_sj_unique_rel objects. - Don't let implicit join order constraints arising from join methord or semijoin uniqueness advice to add to jo_permit_indexes. - Don't consider join order advice fully matched if we only fully matched a sublist. - Remove pgpa_walker_get_rti and properly handle 0 return values from pgpa_compute_rti_from_identifier instead. I'm very appreciative to everyone for all the testing and reports about 0005; I still do need some substantive code review particularly of 0001. Thanks, --=20 Robert Haas EDB: http://www.enterprisedb.com --000000000000c84af706486e3644 Content-Type: application/octet-stream; name="v10-0001-Store-information-about-range-table-flattening-i.patch" Content-Disposition: attachment; filename="v10-0001-Store-information-about-range-table-flattening-i.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkfk32pw0 RnJvbSA5MzhjOGRiNzU4NDlmMWNhNmM4MGNhNDI0YmY3ODc5N2ZmZGQ1MTFjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMjAgT2N0IDIwMjUgMTI6MDA6MTggLTA0MDAKU3ViamVjdDogW1BBVENIIHYxMCAx LzVdIFN0b3JlIGluZm9ybWF0aW9uIGFib3V0IHJhbmdlLXRhYmxlIGZsYXR0ZW5pbmcgaW4gdGhl CiBmaW5hbCBwbGFuLgoKU3VwcG9zZSB0aGF0IHdlJ3JlIGN1cnJlbnRseSBwbGFubmluZyBhIHF1 ZXJ5IGFuZCwgd2hlbiB0aGF0IHNhbWUKcXVlcnkgd2FzIHByZXZpb3VzbHkgcGxhbm5lZCBhbmQg ZXhlY3V0ZWQsIHdlIGxlYXJuZWQgc29tZXRoaW5nIGFib3V0CmhvdyBhIGNlcnRhaW4gdGFibGUg d2l0aGluIHRoYXQgcXVlcnkgc2hvdWxkIGJlIHBsYW5uZWQuIFdlIHdhbnQgdG8KdGFrZSBub3Rl IHdoZW4gdGhhdCBzYW1lIHRhYmxlIGlzIGJlaW5nIHBsYW5uZWQgZHVyaW5nIHRoZSBjdXJyZW50 CnBsYW5uaW5nIGN5Y2xlLCBidXQgdGhpcyBpcyBkaWZmaWN1bHQgdG8gZG8sIGJlY2F1c2UgdGhl IFJUSSBvZiB0aGUKdGFibGUgZnJvbSB0aGUgcHJldmlvdXMgcGxhbiB3b24ndCBuZWNlc3Nhcmls eSBiZSBlcXVhbCB0byB0aGUgUlRJCnRoYXQgd2Ugc2VlIGR1cmluZyB0aGUgY3VycmVudCBwbGFu bmluZyBjeWNsZS4gVGhpcyBpcyBiZWNhdXNlIGVhY2gKc3VicXVlcnkgaGFzIGEgc2VwYXJhdGUg cmFuZ2UgdGFibGUgZHVyaW5nIHBsYW5uaW5nLCBidXQgdGhlc2UgYXJlCmZsYXR0ZW5lZCBpbnRv IG9uZSByYW5nZSB0YWJsZSB3aGVuIGNvbnN0cnVjdGluZyB0aGUgZmluYWwgcGxhbiwKY2hhbmdp bmcgUlRJcy4KCkNvbW1pdCA4YzQ5YTQ4NGU4ZWJiMDE5OWZiYTRiZDY4ZWFhZWRhZjQ5YjQ4ZWQw IGFsbG93cyB1cyB0byBtYXRjaCB1cApzdWJxdWVyaWVzIHNlZW4gaW4gdGhlIHByZXZpb3VzIHBs YW5uaW5nIGN5Y2xlcyB3aXRoIHRoZSBzdWJxdWVyaWVzCmN1cnJlbnRseSBiZWluZyBwbGFubmVk IGp1c3QgYnkgY29tcGFyaW5nIHRleHR1YWwgbmFtZXMsIGJ1dCB0aGF0J3MKbm90IHF1aXRlIGVu b3VnaCB0byBsZXQgdXMgZGVkdWNlIGFueXRoaW5nIGFib3V0IGluZGl2aWR1YWwgdGFibGVzLApi ZWNhdXNlIHdlIGRvbid0IGtub3cgd2hlcmUgZWFjaCBzdWJxdWVyeSdzIHJhbmdlIHRhYmxlIGFw cGVhcnMgaW4KdGhlIGZpbmFsLCBmbGF0dGVuZWQgcmFuZ2UgdGFibGUuCgpUbyBmaXggdGhhdCwg c3RvcmUgYSBsaXN0IG9mIFN1YlBsYW5SVEluZm8gb2JqZWN0cyBpbiB0aGUgZmluYWwKcGxhbm5l ZCBzdGF0ZW1lbnQsIGVhY2ggaW5jbHVkaW5nIHRoZSBuYW1lIG9mIHRoZSBzdWJwbGFuLCB0aGUg b2Zmc2V0CmF0IHdoaWNoIGl0IGJlZ2lucyBpbiB0aGUgZmxhdHRlbmVkIHJhbmdlIHRhYmxlLCBh bmQgd2hldGhlciBvciBub3QKaXQgd2FzIGEgZHVtbXkgc3VicGxhbiAtLSBpZiBpdCB3YXMsIHNv bWUgUlRJcyBtYXkgaGF2ZSBiZWVuIGRyb3BwZWQKZnJvbSB0aGUgZmluYWwgcmFuZ2UgdGFibGUs IGJ1dCBhbHNvIHRoZXJlJ3Mgbm8gbmVlZCB0byBjb250cm9sIGhvdwphIGR1bW15IHN1YnF1ZXJ5 IGdldHMgcGxhbm5lZC4gVGhlIHRvcGxldmVsIHN1YnF1ZXJ5IGhhcyBubyBuYW1lIGFuZAphbHdh eXMgYmVnaW5zIGF0IHJ0b2Zmc2V0IDAsIHNvIHdlIG1ha2Ugbm8gZW50cnkgZm9yIGl0LgoKVGhp cyBjb21taXQgdGVhY2hlcyBwZ19vdmVyZXhwbGFpbidzIFJBTkdFX1RBQkxFIG9wdGlvbiB0byBt YWtlIHVzZQpvZiB0aGlzIG5ldyBkYXRhIHRvIGRpc3BsYXkgdGhlIHN1YnF1ZXJ5IG5hbWUgZm9y IGVhY2ggcmFuZ2UgdGFibGUKZW50cnkuCgpSZXZpZXdlZC1ieTogTHVrYXMgRml0dGwgPGx1a2Fz QGZpdHRsLmNvbT4KUmV2aWV3ZWQtYnk6IEpha3ViIFdhcnRhayA8amFrdWIud2FydGFrQGVudGVy cHJpc2VkYi5jb20+ClJldmlld2VkLWJ5OiBHcmVnIEJ1cmQgPGdyZWdAYnVyZC5tZT4KUmV2aWV3 ZWQtYnk6IEphY29iIENoYW1waW9uIDxqYWNvYi5jaGFtcGlvbkBlbnRlcnByaXNlZGIuY29tPgpS ZXZpZXdlZC1ieTogQW1pdCBMYW5nb3RlIDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4KUmV2aWV3 ZWQtYnk6IEhhaWJvIFlhbiA8dHJpc3Rhbi55aW1AZ21haWwuY29tPgpEaXNjdXNzaW9uOiBodHRw Oi8vcG9zdGdyLmVzL20vQ0ErVGdtb1otSmgxVDZReVdvQ09ETVZRZGhUVVBZa2Faald6dHpQMUVu ND1aSG9LUHp3QG1haWwuZ21haWwuY29tCi0tLQogY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19v dmVyZXhwbGFpbi5jIHwgMzYgKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BsYW4vcGxhbm5lci5jICAgIHwgIDEgKwogc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BsYW4vc2V0cmVmcy5jICAgIHwgMjAgKysrKysrKysrKysrKysKIHNyYy9pbmNsdWRlL25vZGVz L3BhdGhub2Rlcy5oICAgICAgICAgICB8ICAzICsrKwogc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5v ZGVzLmggICAgICAgICAgIHwgMTcgKysrKysrKysrKysrCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdCAgICAgICAgfCAgMSArCiA2IGZpbGVzIGNoYW5nZWQsIDc4IGluc2VydGlvbnMo KykKCmRpZmYgLS1naXQgYS9jb250cmliL3BnX292ZXJleHBsYWluL3BnX292ZXJleHBsYWluLmMg Yi9jb250cmliL3BnX292ZXJleHBsYWluL3BnX292ZXJleHBsYWluLmMKaW5kZXggMzE2ZmZkMWM4 N2YuLmJmOGM3NjhlZDQ3IDEwMDY0NAotLS0gYS9jb250cmliL3BnX292ZXJleHBsYWluL3BnX292 ZXJleHBsYWluLmMKKysrIGIvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19vdmVyZXhwbGFpbi5j CkBAIC0zOTUsNiArMzk1LDggQEAgc3RhdGljIHZvaWQKIG92ZXJleHBsYWluX3JhbmdlX3RhYmxl KFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCwgRXhwbGFpblN0YXRlICplcykKIHsKIAlJbmRleAkJ cnRpOworCUxpc3RDZWxsICAgKmxjX3N1YnJ0aW5mbyA9IGxpc3RfaGVhZChwbGFubmVkc3RtdC0+ c3VicnRpbmZvcyk7CisJU3ViUGxhblJUSW5mbyAqcnRpbmZvID0gTlVMTDsKIAogCS8qIE9wZW4g Z3JvdXAsIG9uZSBlbnRyeSBwZXIgUmFuZ2VUYmxFbnRyeSAqLwogCUV4cGxhaW5PcGVuR3JvdXAo IlJhbmdlIFRhYmxlIiwgIlJhbmdlIFRhYmxlIiwgZmFsc2UsIGVzKTsKQEAgLTQwNSw2ICs0MDcs MTggQEAgb3ZlcmV4cGxhaW5fcmFuZ2VfdGFibGUoUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LCBF eHBsYWluU3RhdGUgKmVzKQogCQlSYW5nZVRibEVudHJ5ICpydGUgPSBydF9mZXRjaChydGksIHBs YW5uZWRzdG10LT5ydGFibGUpOwogCQljaGFyCSAgICpraW5kID0gTlVMTDsKIAkJY2hhcgkgICAq cmVsa2luZDsKKwkJU3ViUGxhblJUSW5mbyAqbmV4dF9ydGluZm87CisKKwkJLyogQWR2YW5jZSB0 byBuZXh0IFN1YlJUSW5mbywgaWYgaXQncyB0aW1lLiAqLworCQlpZiAobGNfc3VicnRpbmZvICE9 IE5VTEwpCisJCXsKKwkJCW5leHRfcnRpbmZvID0gbGZpcnN0KGxjX3N1YnJ0aW5mbyk7CisJCQlp ZiAocnRpID4gbmV4dF9ydGluZm8tPnJ0b2Zmc2V0KQorCQkJeworCQkJCXJ0aW5mbyA9IG5leHRf cnRpbmZvOworCQkJCWxjX3N1YnJ0aW5mbyA9IGxuZXh0KHBsYW5uZWRzdG10LT5zdWJydGluZm9z LCBsY19zdWJydGluZm8pOworCQkJfQorCQl9CiAKIAkJLyogTlVMTCBlbnRyaWVzIGFyZSBwb3Nz aWJsZTsgc2tpcCB0aGVtICovCiAJCWlmIChydGUgPT0gTlVMTCkKQEAgLTQ2OSw2ICs0ODMsMjgg QEAgb3ZlcmV4cGxhaW5fcmFuZ2VfdGFibGUoUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LCBFeHBs YWluU3RhdGUgKmVzKQogCQkJRXhwbGFpblByb3BlcnR5Qm9vbCgiSW4gRnJvbSBDbGF1c2UiLCBy dGUtPmluRnJvbUNsLCBlcyk7CiAJCX0KIAorCQkvKgorCQkgKiBJbmRpY2F0ZSB3aGljaCBzdWJw bGFuIGlzIHRoZSBvcmlnaW4gb2Ygd2hpY2ggUlRFLiBOb3RlIGR1bW15CisJCSAqIHN1YnBsYW5z LiBIZXJlIGFnYWluLCB3ZSBjcnVuY2ggbW9yZSBvbnRvIG9uZSBsaW5lIGluIHRleHQgZm9ybWF0 LgorCQkgKi8KKwkJaWYgKHJ0aW5mbyAhPSBOVUxMKQorCQl7CisJCQlpZiAoZXMtPmZvcm1hdCA9 PSBFWFBMQUlOX0ZPUk1BVF9URVhUKQorCQkJeworCQkJCWlmICghcnRpbmZvLT5kdW1teSkKKwkJ CQkJRXhwbGFpblByb3BlcnR5VGV4dCgiU3VicGxhbiIsIHJ0aW5mby0+cGxhbl9uYW1lLCBlcyk7 CisJCQkJZWxzZQorCQkJCQlFeHBsYWluUHJvcGVydHlUZXh0KCJTdWJwbGFuIiwKKwkJCQkJCQkJ CQlwc3ByaW50ZigiJXMgKGR1bW15KSIsCisJCQkJCQkJCQkJCQkgcnRpbmZvLT5wbGFuX25hbWUp LCBlcyk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJRXhwbGFpblByb3BlcnR5VGV4dCgiU3Vi cGxhbiIsIHJ0aW5mby0+cGxhbl9uYW1lLCBlcyk7CisJCQkJRXhwbGFpblByb3BlcnR5Qm9vbCgi U3VicGxhbiBJcyBEdW1teSIsIHJ0aW5mby0+ZHVtbXksIGVzKTsKKwkJCX0KKwkJfQorCiAJCS8q IHJ0ZS0+YWxpYXMgaXMgb3B0aW9uYWw7IHJ0ZS0+ZXJlZiBpcyByZXF1ZXN0ZWQgKi8KIAkJaWYg KHJ0ZS0+YWxpYXMgIT0gTlVMTCkKIAkJCW92ZXJleHBsYWluX2FsaWFzKCJBbGlhcyIsIHJ0ZS0+ YWxpYXMsIGVzKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5u ZXIuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwppbmRleCA3YTZiOGI3 NDlmMi4uMzEyZDU5NDY1MjcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFu L3BsYW5uZXIuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKQEAg LTYwNyw2ICs2MDcsNyBAQCBzdGFuZGFyZF9wbGFubmVyKFF1ZXJ5ICpwYXJzZSwgY29uc3QgY2hh ciAqcXVlcnlfc3RyaW5nLCBpbnQgY3Vyc29yT3B0aW9ucywKIAlyZXN1bHQtPnVucHJ1bmFibGVS ZWxpZHMgPSBibXNfZGlmZmVyZW5jZShnbG9iLT5hbGxSZWxpZHMsCiAJCQkJCQkJCQkJCSAgZ2xv Yi0+cHJ1bmFibGVSZWxpZHMpOwogCXJlc3VsdC0+cGVybUluZm9zID0gZ2xvYi0+ZmluYWxydGVw ZXJtaW5mb3M7CisJcmVzdWx0LT5zdWJydGluZm9zID0gZ2xvYi0+c3VicnRpbmZvczsKIAlyZXN1 bHQtPnJlc3VsdFJlbGF0aW9ucyA9IGdsb2ItPnJlc3VsdFJlbGF0aW9uczsKIAlyZXN1bHQtPmFw cGVuZFJlbGF0aW9ucyA9IGdsb2ItPmFwcGVuZFJlbGF0aW9uczsKIAlyZXN1bHQtPnN1YnBsYW5z ID0gZ2xvYi0+c3VicGxhbnM7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxh bi9zZXRyZWZzLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMKaW5kZXgg MTZkMjAwY2ZiNDYuLmE1YjIzMTRlZjJhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGxhbi9zZXRyZWZzLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVm cy5jCkBAIC0zOTksNiArMzk5LDI2IEBAIGFkZF9ydGVzX3RvX2ZsYXRfcnRhYmxlKFBsYW5uZXJJ bmZvICpyb290LCBib29sIHJlY3Vyc2luZykKIAlJbmRleAkJcnRpOwogCUxpc3RDZWxsICAgKmxj OwogCisJLyoKKwkgKiBSZWNvcmQgZW5vdWdoIGluZm9ybWF0aW9uIHRvIG1ha2UgaXQgcG9zc2li bGUgZm9yIGNvZGUgdGhhdCBsb29rcyBhdAorCSAqIHRoZSBmaW5hbCByYW5nZSB0YWJsZSB0byB1 bmRlcnN0YW5kIGhvdyBpdCB3YXMgY29uc3RydWN0ZWQuIChJZgorCSAqIGZpbmFscnRhYmxlIGlz IHN0aWxsIE5JTCwgdGhlbiB0aGlzIGlzIHRoZSB2ZXJ5IHRvcG1vc3QgUGxhbm5lckluZm8sCisJ ICogd2hpY2ggd2lsbCBhbHdheXMgaGF2ZSBwbGFuX25hbWUgPT0gTlVMTCBhbmQgcnRvZmZzZXQg PT0gMDsgd2Ugb21pdCB0aGUKKwkgKiBkZWdlbmVyYXRlIGxpc3QgZW50cnkuKQorCSAqLworCWlm IChyb290LT5nbG9iLT5maW5hbHJ0YWJsZSAhPSBOSUwpCisJeworCQlTdWJQbGFuUlRJbmZvICpy dGluZm8gPSBtYWtlTm9kZShTdWJQbGFuUlRJbmZvKTsKKworCQlydGluZm8tPnBsYW5fbmFtZSA9 IHJvb3QtPnBsYW5fbmFtZTsKKwkJcnRpbmZvLT5ydG9mZnNldCA9IGxpc3RfbGVuZ3RoKHJvb3Qt Pmdsb2ItPmZpbmFscnRhYmxlKTsKKworCQkvKiBXaGVuIHJlY3Vyc2luZyA9IHRydWUsIGl0J3Mg YW4gdW5wbGFubmVkIG9yIGR1bW15IHN1YnF1ZXJ5LiAqLworCQlydGluZm8tPmR1bW15ID0gcmVj dXJzaW5nOworCisJCXJvb3QtPmdsb2ItPnN1YnJ0aW5mb3MgPSBsYXBwZW5kKHJvb3QtPmdsb2It PnN1YnJ0aW5mb3MsIHJ0aW5mbyk7CisJfQorCiAJLyoKIAkgKiBBZGQgdGhlIHF1ZXJ5J3Mgb3du IFJURXMgdG8gdGhlIGZsYXR0ZW5lZCByYW5nZXRhYmxlLgogCSAqCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5o CmluZGV4IDQ0OTg4NWI5MzE5Li4yNDc1OTczMWM4NyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv bm9kZXMvcGF0aG5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAg LTEzNSw2ICsxMzUsOSBAQCB0eXBlZGVmIHN0cnVjdCBQbGFubmVyR2xvYmFsCiAJLyogImZsYXQi IGxpc3Qgb2YgUlRFUGVybWlzc2lvbkluZm9zICovCiAJTGlzdAkgICAqZmluYWxydGVwZXJtaW5m b3M7CiAKKwkvKiBsaXN0IG9mIFN1YlBsYW5SVEluZm8gbm9kZXMgKi8KKwlMaXN0CSAgICpzdWJy dGluZm9zOworCiAJLyogImZsYXQiIGxpc3Qgb2YgUGxhblJvd01hcmtzICovCiAJTGlzdAkgICAq ZmluYWxyb3dtYXJrczsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVz LmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaAppbmRleCA0YmM2ZmI1NjcwZS4uOWFl NzJhNjA3ZTIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCisrKyBi L3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCkBAIC0xMzEsNiArMTMxLDkgQEAgdHlwZWRl ZiBzdHJ1Y3QgUGxhbm5lZFN0bXQKIAkgKi8KIAlMaXN0CSAgICpzdWJwbGFuczsKIAorCS8qIGEg bGlzdCBvZiBTdWJQbGFuUlRJbmZvIG9iamVjdHMgKi8KKwlMaXN0CSAgICpzdWJydGluZm9zOwor CiAJLyogaW5kaWNlcyBvZiBzdWJwbGFucyB0aGF0IHJlcXVpcmUgUkVXSU5EICovCiAJQml0bWFw c2V0ICAqcmV3aW5kUGxhbklEczsKIApAQCAtMTgyMSw0ICsxODI0LDE4IEBAIHR5cGVkZWYgZW51 bSBNb25vdG9uaWNGdW5jdGlvbgogCU1PTk9UT05JQ0ZVTkNfQk9USCA9IE1PTk9UT05JQ0ZVTkNf SU5DUkVBU0lORyB8IE1PTk9UT05JQ0ZVTkNfREVDUkVBU0lORywKIH0gTW9ub3RvbmljRnVuY3Rp b247CiAKKy8qCisgKiBTdWJQbGFuUlRJbmZvCisgKgorICogSW5mb3JtYXRpb24gYWJvdXQgd2hp Y2ggcmFuZ2UgdGFibGUgZW50cmllcyBjYW1lIGZyb20gd2hpY2ggc3VicXVlcnkKKyAqIHBsYW5u aW5nIGN5Y2xlcy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgU3ViUGxhblJUSW5mbworeworCU5vZGVU YWcJCXR5cGU7CisJY2hhcgkgICAqcGxhbl9uYW1lOworCUluZGV4CQlydG9mZnNldDsKKwlib29s CQlkdW1teTsKK30gU3ViUGxhblJUSW5mbzsKKwogI2VuZGlmCQkJCQkJCS8qIFBMQU5OT0RFU19I ICovCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDE0ZGVjMmQ0OWMxLi41MTJkNDg2NjFj OSAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3Jj L3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTI5MjAsNiArMjkyMCw3IEBAIFN1Ykxp bmsKIFN1YkxpbmtUeXBlCiBTdWJPcHRzCiBTdWJQbGFuCitTdWJQbGFuUlRJbmZvCiBTdWJQbGFu U3RhdGUKIFN1YlJlbEluZm8KIFN1YlJlbW92ZVJlbHMKLS0gCjIuNTEuMAoK --000000000000c84af706486e3644 Content-Type: application/octet-stream; name="v10-0004-Allow-for-plugin-control-over-path-generation-st.patch" Content-Disposition: attachment; filename="v10-0004-Allow-for-plugin-control-over-path-generation-st.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkfk32qc3 RnJvbSBmOGNjMWQ1YmFmNjA4NGRlNjVhZjdmMTIzYjk3Mzk3ZmE1YzczNjQ5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMTIgSmFuIDIwMjYgMTA6Mzc6MjEgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxMCA0 LzVdIEFsbG93IGZvciBwbHVnaW4gY29udHJvbCBvdmVyIHBhdGggZ2VuZXJhdGlvbgogc3RyYXRl Z2llcy4KCkVhY2ggUmVsT3B0SW5mbyBub3cgaGFzIGEgcGdzX21hc2sgbWVtYmVyIHdoaWNoIGlz IGEgbWFzayBvZiBhY2NlcHRhYmxlCnN0cmF0ZWdpZXMuIEZvciBtb3N0IHJlbHMsIHRoaXMgaXMg cG9wdWxhdGVkIGZyb20gUGxhbm5lckdsb2JhbCdzCmRlZmF1bHRfcGdzX21hc2ssIHdoaWNoIGlz IGNvbXB1dGVkIGZyb20gdGhlIHZhbHVlcyBvZiB0aGUgZW5hYmxlXyoKR1VDcyBhdCB0aGUgc3Rh cnQgb2YgcGxhbm5pbmcuCgpGb3IgYmFzZXJlbHMsIGdldF9yZWxhdGlvbl9pbmZvX2hvb2sgY2Fu IGJlIHVzZWQgdG8gYWRqdXN0IHBnc19tYXNrIGZvcgplYWNoIG5ldyBSZWxPcHRJbmZvLCBhdCBs ZWFzdCBmb3IgcmVscyBvZiB0eXBlIFJURV9SRUxBVElPTi4gQWRqdXN0aW5nCnBnc19tYXNrIGlz IGxlc3MgdXNlZnVsIGZvciBvdGhlciB0eXBlcyBvZiByZWxzLCBidXQgaWYgaXQgcHJvdmVzIHRv CmJlIG5lY2Vzc2FyeSwgd2UgY2FuIHJldmlzaXQgdGhlIHdheSB0aGlzIGhvb2sgd29ya3Mgb3Ig YWRkIGEgbmV3IG9uZS4KCkZvciBqb2lucmVscywgdHdvIG5ldyBob29rcyBhcmUgYWRkZWQuIGpv aW5yZWxfc2V0dXBfaG9vayBpcyBjYWxsZWQgZWFjaAp0aW1lIGEgam9pbnJlbCBpcyBjcmVhdGVk LCBhbmQgb25lIHRoaW5nIHRoYXQgY2FuIGJlIGRvbmUgZnJvbSB0aGF0IGhvb2sKaXMgdG8gbWFu aXB1bGF0ZSBwZ3NfbWFzayBmb3IgdGhlIG5ldyBqb2lucmVsLiBqb2luX3BhdGhfc2V0dXBfaG9v ayBpcwpjYWxsZWQgZWFjaCB0aW1lIHdlJ3JlIGFib3V0IHRvIGFkZCBwYXRocyB0byBhIGpvaW5y ZWwgYnkgY29uc2lkZXJpbmcKc29tZSBwYXJ0aWN1bGFyIGNvbWJpbmF0aW9uIG9mIGFuIG91dGVy IHJlbCwgYW4gaW5uZXIgcmVsLCBhbmQgYSBqb2luCnR5cGUuIEl0IGNhbiBtb2RpZnkgdGhlIHBn c19tYXNrIHByb3BhZ2F0ZWQgaW50byBKb2luUGF0aEV4dHJhRGF0YSB0bwpyZXN0cmljdCBzdHJh dGVneSBjaG9pY2UgZm9yIHRoYXQgcGFyaWN1bGFyIGNvbWJpbmF0aW9uIG9mIHJlbHMuCgpUbyBt YWtlIGpvaW5yZWxfc2V0dXBfaG9vayB3b3JrIGFzIGludGVuZGVkLCB0aGUgZXhpc3RpbmcgY2Fs bHMgdG8KYnVpbGRfam9pbnJlbF9wYXJ0aXRpb25faW5mbyBhcmUgbW92ZWQgbGF0ZXIgaW4gdGhl IGNhbGxpbmcgZnVuY3Rpb25zOwp0aGlzIGlzIGJlY2F1c2UgdGhhdCBmdW5jdGlvbiBjaGVja3Mg d2hldGhlciB0aGUgcmVsJ3MgcGdzX21hc2sgaW5jbHVkZXMKUEdTX0NPTlNJREVSX1BBUlRJVElP TldJU0UsIHNvIHdlIHdhbnQgaXQgdG8gb25seSBiZSBjYWxsZWQgYWZ0ZXIKcGx1Z2lucyBoYXZl IGhhZCBhIGNoYW5jZSB0byBhbHRlciBwZ3NfbWFzay4KClVwcGVyIHJlbHMgY3VycmVudGx5IGlu aGVyaXQgcGdzX21hc2sgZnJvbSB0aGUgaW5wdXQgcmVsYXRpb24uIEl0J3MKdW5jbGVhciB0aGF0 IHRoaXMgaXMgdGhlIG1vc3QgdXNlZnVsIGJlaGF2aW9yLCBidXQgYXQgdGhlIG1vbWVudCB0aGVy ZQphcmUgbm8gaG9va3MgdG8gYWxsb3cgdGhlIG1hc2sgdG8gYmUgc2V0IGluIGFueSBvdGhlciB3 YXkuCgpSZXZpZXdlZC1ieTogTHVrYXMgRml0dGwgPGx1a2FzQGZpdHRsLmNvbT4KUmV2aWV3ZWQt Ynk6IEpha3ViIFdhcnRhayA8amFrdWIud2FydGFrQGVudGVycHJpc2VkYi5jb20+ClJldmlld2Vk LWJ5OiBHcmVnIEJ1cmQgPGdyZWdAYnVyZC5tZT4KUmV2aWV3ZWQtYnk6IEphY29iIENoYW1waW9u IDxqYWNvYi5jaGFtcGlvbkBlbnRlcnByaXNlZGIuY29tPgpSZXZpZXdlZC1ieTogQW1pdCBMYW5n b3RlIDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IEhhaWJvIFlhbiA8dHJp c3Rhbi55aW1AZ21haWwuY29tPgpEaXNjdXNzaW9uOiBodHRwOi8vcG9zdGdyLmVzL20vQ0ErVGdt b1otSmgxVDZReVdvQ09ETVZRZGhUVVBZa2Faald6dHpQMUVuND1aSG9LUHp3QG1haWwuZ21haWwu Y29tCi0tLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYyAgIHwgICAyICst CiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jICAgfCAyMjIgKysrKysrKysr KysrKysrKysrLS0tLS0tCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jICAg fCAgIDQgKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5wYXRoLmMgICB8ICA4OSAr KysrKysrLS0tCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC90aWRwYXRoLmMgICAgfCAgIDcg Ky0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYyB8ICAgNCArLQogc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jICAgIHwgIDU0ICsrKysrKwogc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUuYyAgIHwgIDE5ICstCiBzcmMvYmFja2VuZC9v cHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMgICAgfCAgIDMgKwogc3JjL2JhY2tlbmQvb3B0aW1pemVy L3V0aWwvcmVsbm9kZS5jICAgIHwgIDQ0ICsrKystCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9k ZXMuaCAgICAgICAgICAgfCAgODIgKysrKysrKystCiBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29z dC5oICAgICAgICAgICAgfCAgIDQgKy0KIHNyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5o ICAgICAgICB8ICAxMiArLQogc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhzLmggICAgICAgICAg IHwgICA5ICstCiAxNCBmaWxlcyBjaGFuZ2VkLCA0NTcgaW5zZXJ0aW9ucygrKSwgOTggZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMu YyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMKaW5kZXggZjQ3YzVjYzcy NDUuLmYzNGE5YWRmM2E4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9h bGxwYXRocy5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMKQEAg LTk1NCw3ICs5NTQsNyBAQCBzZXRfdGFibGVzYW1wbGVfcmVsX3BhdGhsaXN0KFBsYW5uZXJJbmZv ICpyb290LCBSZWxPcHRJbmZvICpyZWwsIFJhbmdlVGJsRW50cnkgKgogCQkgYm1zX21lbWJlcnNo aXAocm9vdC0+YWxsX3F1ZXJ5X3JlbHMpICE9IEJNU19TSU5HTEVUT04pICYmCiAJCSEoR2V0VHNt Um91dGluZShydGUtPnRhYmxlc2FtcGxlLT50c21oYW5kbGVyKS0+cmVwZWF0YWJsZV9hY3Jvc3Nf c2NhbnMpKQogCXsKLQkJcGF0aCA9IChQYXRoICopIGNyZWF0ZV9tYXRlcmlhbF9wYXRoKHJlbCwg cGF0aCk7CisJCXBhdGggPSAoUGF0aCAqKSBjcmVhdGVfbWF0ZXJpYWxfcGF0aChyZWwsIHBhdGgs IHRydWUpOwogCX0KIAogCWFkZF9wYXRoKHJlbCwgcGF0aCk7CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bh dGgvY29zdHNpemUuYwppbmRleCAxNmJmMWY2MWEwZi4uMmQ1ZjczMDAxMzUgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMKKysrIGIvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BhdGgvY29zdHNpemUuYwpAQCAtMjc1LDYgKzI3NSw3IEBAIGNvc3Rfc2Vxc2Nh bihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAlkb3VibGUJCXNwY19zZXFfcGFnZV9j b3N0OwogCVF1YWxDb3N0CXFwcXVhbF9jb3N0OwogCUNvc3QJCWNwdV9wZXJfdHVwbGU7CisJdWlu dDY0CQllbmFibGVfbWFzayA9IFBHU19TRVFTQ0FOOwogCiAJLyogU2hvdWxkIG9ubHkgYmUgYXBw bGllZCB0byBiYXNlIHJlbGF0aW9ucyAqLwogCUFzc2VydChiYXNlcmVsLT5yZWxpZCA+IDApOwpA QCAtMzI3LDggKzMyOCwxMSBAQCBjb3N0X3NlcXNjYW4oUGF0aCAqcGF0aCwgUGxhbm5lckluZm8g KnJvb3QsCiAJCSAqLwogCQlwYXRoLT5yb3dzID0gY2xhbXBfcm93X2VzdChwYXRoLT5yb3dzIC8g cGFyYWxsZWxfZGl2aXNvcik7CiAJfQorCWVsc2UKKwkJZW5hYmxlX21hc2sgfD0gUEdTX0NPTlNJ REVSX05PTlBBUlRJQUw7CiAKLQlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9IGVuYWJsZV9zZXFzY2Fu ID8gMCA6IDE7CisJcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPQorCQkoYmFzZXJlbC0+cGdzX21hc2sg JiBlbmFibGVfbWFzaykgPT0gZW5hYmxlX21hc2sgPyAwIDogMTsKIAlwYXRoLT5zdGFydHVwX2Nv c3QgPSBzdGFydHVwX2Nvc3Q7CiAJcGF0aC0+dG90YWxfY29zdCA9IHN0YXJ0dXBfY29zdCArIGNw dV9ydW5fY29zdCArIGRpc2tfcnVuX2Nvc3Q7CiB9CkBAIC0zNTQsNiArMzU4LDcgQEAgY29zdF9z YW1wbGVzY2FuKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCQkJCXNwY19wYWdlX2Nv c3Q7CiAJUXVhbENvc3QJcXBxdWFsX2Nvc3Q7CiAJQ29zdAkJY3B1X3Blcl90dXBsZTsKKwl1aW50 NjQJCWVuYWJsZV9tYXNrID0gMDsKIAogCS8qIFNob3VsZCBvbmx5IGJlIGFwcGxpZWQgdG8gYmFz ZSByZWxhdGlvbnMgd2l0aCB0YWJsZXNhbXBsZSBjbGF1c2VzICovCiAJQXNzZXJ0KGJhc2VyZWwt PnJlbGlkID4gMCk7CkBAIC00MDEsNyArNDA2LDExIEBAIGNvc3Rfc2FtcGxlc2NhbihQYXRoICpw YXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAlzdGFydHVwX2Nvc3QgKz0gcGF0aC0+cGF0aHRhcmdl dC0+Y29zdC5zdGFydHVwOwogCXJ1bl9jb3N0ICs9IHBhdGgtPnBhdGh0YXJnZXQtPmNvc3QucGVy X3R1cGxlICogcGF0aC0+cm93czsKIAotCXBhdGgtPmRpc2FibGVkX25vZGVzID0gMDsKKwlpZiAo cGF0aC0+cGFyYWxsZWxfd29ya2VycyA9PSAwKQorCQllbmFibGVfbWFzayB8PSBQR1NfQ09OU0lE RVJfTk9OUEFSVElBTDsKKworCXBhdGgtPmRpc2FibGVkX25vZGVzID0KKwkJKGJhc2VyZWwtPnBn c19tYXNrICYgZW5hYmxlX21hc2spID09IGVuYWJsZV9tYXNrID8gMCA6IDE7CiAJcGF0aC0+c3Rh cnR1cF9jb3N0ID0gc3RhcnR1cF9jb3N0OwogCXBhdGgtPnRvdGFsX2Nvc3QgPSBzdGFydHVwX2Nv c3QgKyBydW5fY29zdDsKIH0KQEAgLTQ0MCw3ICs0NDksOCBAQCBjb3N0X2dhdGhlcihHYXRoZXJQ YXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAlzdGFydHVwX2Nvc3QgKz0gcGFyYWxsZWxf c2V0dXBfY29zdDsKIAlydW5fY29zdCArPSBwYXJhbGxlbF90dXBsZV9jb3N0ICogcGF0aC0+cGF0 aC5yb3dzOwogCi0JcGF0aC0+cGF0aC5kaXNhYmxlZF9ub2RlcyA9IHBhdGgtPnN1YnBhdGgtPmRp c2FibGVkX25vZGVzOworCXBhdGgtPnBhdGguZGlzYWJsZWRfbm9kZXMgPSBwYXRoLT5zdWJwYXRo LT5kaXNhYmxlZF9ub2RlcworCQkrICgocmVsLT5wZ3NfbWFzayAmIFBHU19HQVRIRVIpICE9IDAg PyAwIDogMSk7CiAJcGF0aC0+cGF0aC5zdGFydHVwX2Nvc3QgPSBzdGFydHVwX2Nvc3Q7CiAJcGF0 aC0+cGF0aC50b3RhbF9jb3N0ID0gKHN0YXJ0dXBfY29zdCArIHJ1bl9jb3N0KTsKIH0KQEAgLTUw Niw4ICs1MTYsOCBAQCBjb3N0X2dhdGhlcl9tZXJnZShHYXRoZXJNZXJnZVBhdGggKnBhdGgsIFBs YW5uZXJJbmZvICpyb290LAogCXN0YXJ0dXBfY29zdCArPSBwYXJhbGxlbF9zZXR1cF9jb3N0Owog CXJ1bl9jb3N0ICs9IHBhcmFsbGVsX3R1cGxlX2Nvc3QgKiBwYXRoLT5wYXRoLnJvd3MgKiAxLjA1 OwogCi0JcGF0aC0+cGF0aC5kaXNhYmxlZF9ub2RlcyA9IGlucHV0X2Rpc2FibGVkX25vZGVzCi0J CSsgKGVuYWJsZV9nYXRoZXJtZXJnZSA/IDAgOiAxKTsKKwlwYXRoLT5wYXRoLmRpc2FibGVkX25v ZGVzID0gcGF0aC0+c3VicGF0aC0+ZGlzYWJsZWRfbm9kZXMKKwkJKyAoKHJlbC0+cGdzX21hc2sg JiBQR1NfR0FUSEVSX01FUkdFKSAhPSAwID8gMCA6IDEpOwogCXBhdGgtPnBhdGguc3RhcnR1cF9j b3N0ID0gc3RhcnR1cF9jb3N0ICsgaW5wdXRfc3RhcnR1cF9jb3N0OwogCXBhdGgtPnBhdGgudG90 YWxfY29zdCA9IChzdGFydHVwX2Nvc3QgKyBydW5fY29zdCArIGlucHV0X3RvdGFsX2Nvc3QpOwog fQpAQCAtNTU3LDYgKzU2Nyw3IEBAIGNvc3RfaW5kZXgoSW5kZXhQYXRoICpwYXRoLCBQbGFubmVy SW5mbyAqcm9vdCwgZG91YmxlIGxvb3BfY291bnQsCiAJZG91YmxlCQlwYWdlc19mZXRjaGVkOwog CWRvdWJsZQkJcmFuZF9oZWFwX3BhZ2VzOwogCWRvdWJsZQkJaW5kZXhfcGFnZXM7CisJdWludDY0 CQllbmFibGVfbWFzazsKIAogCS8qIFNob3VsZCBvbmx5IGJlIGFwcGxpZWQgdG8gYmFzZSByZWxh dGlvbnMgKi8KIAlBc3NlcnQoSXNBKGJhc2VyZWwsIFJlbE9wdEluZm8pICYmCkBAIC01ODgsOCAr NTk5LDExIEBAIGNvc3RfaW5kZXgoSW5kZXhQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwg ZG91YmxlIGxvb3BfY291bnQsCiAJCQkJCQkJCQkJCSAgcGF0aC0+aW5kZXhjbGF1c2VzKTsKIAl9 CiAKLQkvKiB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIGVuYWJsZV9pbmRleG9ubHlzY2FuOyBpbmR4 cGF0aC5jIGRvZXMgdGhhdCAqLwotCXBhdGgtPnBhdGguZGlzYWJsZWRfbm9kZXMgPSBlbmFibGVf aW5kZXhzY2FuID8gMCA6IDE7CisJLyogaXMgdGhpcyBzY2FuIHR5cGUgZGlzYWJsZWQ/ICovCisJ ZW5hYmxlX21hc2sgPSAoaW5kZXhvbmx5ID8gUEdTX0lOREVYT05MWVNDQU4gOiBQR1NfSU5ERVhT Q0FOKQorCQl8IChwYXJ0aWFsX3BhdGggPyAwIDogUEdTX0NPTlNJREVSX05PTlBBUlRJQUwpOwor CXBhdGgtPnBhdGguZGlzYWJsZWRfbm9kZXMgPQorCQkoYmFzZXJlbC0+cGdzX21hc2sgJiBlbmFi bGVfbWFzaykgPT0gZW5hYmxlX21hc2sgPyAwIDogMTsKIAogCS8qCiAJICogQ2FsbCBpbmRleC1h Y2Nlc3MtbWV0aG9kLXNwZWNpZmljIGNvZGUgdG8gZXN0aW1hdGUgdGhlIHByb2Nlc3NpbmcgY29z dApAQCAtMTAxMCw2ICsxMDI0LDcgQEAgY29zdF9iaXRtYXBfaGVhcF9zY2FuKFBhdGggKnBhdGgs IFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpiYXNlcmVsLAogCWRvdWJsZQkJc3BjX3Nl cV9wYWdlX2Nvc3QsCiAJCQkJc3BjX3JhbmRvbV9wYWdlX2Nvc3Q7CiAJZG91YmxlCQlUOworCXVp bnQ2NAkJZW5hYmxlX21hc2sgPSBQR1NfQklUTUFQU0NBTjsKIAogCS8qIFNob3VsZCBvbmx5IGJl IGFwcGxpZWQgdG8gYmFzZSByZWxhdGlvbnMgKi8KIAlBc3NlcnQoSXNBKGJhc2VyZWwsIFJlbE9w dEluZm8pKTsKQEAgLTEwNzUsNiArMTA5MCw4IEBAIGNvc3RfYml0bWFwX2hlYXBfc2NhbihQYXRo ICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqYmFzZXJlbCwKIAogCQlwYXRo LT5yb3dzID0gY2xhbXBfcm93X2VzdChwYXRoLT5yb3dzIC8gcGFyYWxsZWxfZGl2aXNvcik7CiAJ fQorCWVsc2UKKwkJZW5hYmxlX21hc2sgfD0gUEdTX0NPTlNJREVSX05PTlBBUlRJQUw7CiAKIAog CXJ1bl9jb3N0ICs9IGNwdV9ydW5fY29zdDsKQEAgLTEwODMsNyArMTEwMCw4IEBAIGNvc3RfYml0 bWFwX2hlYXBfc2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAq YmFzZXJlbCwKIAlzdGFydHVwX2Nvc3QgKz0gcGF0aC0+cGF0aHRhcmdldC0+Y29zdC5zdGFydHVw OwogCXJ1bl9jb3N0ICs9IHBhdGgtPnBhdGh0YXJnZXQtPmNvc3QucGVyX3R1cGxlICogcGF0aC0+ cm93czsKIAotCXBhdGgtPmRpc2FibGVkX25vZGVzID0gZW5hYmxlX2JpdG1hcHNjYW4gPyAwIDog MTsKKwlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9CisJCShiYXNlcmVsLT5wZ3NfbWFzayAmIGVuYWJs ZV9tYXNrKSA9PSBlbmFibGVfbWFzayA/IDAgOiAxOwogCXBhdGgtPnN0YXJ0dXBfY29zdCA9IHN0 YXJ0dXBfY29zdDsKIAlwYXRoLT50b3RhbF9jb3N0ID0gc3RhcnR1cF9jb3N0ICsgcnVuX2Nvc3Q7 CiB9CkBAIC0xMjQwLDYgKzEyNTgsNyBAQCBjb3N0X3RpZHNjYW4oUGF0aCAqcGF0aCwgUGxhbm5l ckluZm8gKnJvb3QsCiAJZG91YmxlCQludHVwbGVzOwogCUxpc3RDZWxsICAgKmw7CiAJZG91Ymxl CQlzcGNfcmFuZG9tX3BhZ2VfY29zdDsKKwl1aW50NjQJCWVuYWJsZV9tYXNrID0gMDsKIAogCS8q IFNob3VsZCBvbmx5IGJlIGFwcGxpZWQgdG8gYmFzZSByZWxhdGlvbnMgKi8KIAlBc3NlcnQoYmFz ZXJlbC0+cmVsaWQgPiAwKTsKQEAgLTEyNjEsMTAgKzEyODAsMTAgQEAgY29zdF90aWRzY2FuKFBh dGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCiAJCS8qCiAJCSAqIFdlIG11c3QgdXNlIGEg VElEIHNjYW4gZm9yIEN1cnJlbnRPZkV4cHI7IGluIGFueSBvdGhlciBjYXNlLCB3ZQotCQkgKiBz aG91bGQgYmUgZ2VuZXJhdGluZyBhIFRJRCBzY2FuIG9ubHkgaWYgZW5hYmxlX3RpZHNjYW49dHJ1 ZS4gQWxzbywKLQkJICogaWYgQ3VycmVudE9mRXhwciBpcyB0aGUgcXVhbCwgdGhlcmUgc2hvdWxk IGJlIG9ubHkgb25lLgorCQkgKiBzaG91bGQgYmUgZ2VuZXJhdGluZyBhIFRJRCBzY2FuIG9ubHkg aWYgVElEIHNjYW5zIGFyZSBhbGxvd2VkLgorCQkgKiBBbHNvLCBpZiBDdXJyZW50T2ZFeHByIGlz IHRoZSBxdWFsLCB0aGVyZSBzaG91bGQgYmUgb25seSBvbmUuCiAJCSAqLwotCQlBc3NlcnQoZW5h YmxlX3RpZHNjYW4gfHwgSXNBKHF1YWwsIEN1cnJlbnRPZkV4cHIpKTsKKwkJQXNzZXJ0KChiYXNl cmVsLT5wZ3NfbWFzayAmIFBHU19USURTQ0FOKSAhPSAwIHx8IElzQShxdWFsLCBDdXJyZW50T2ZF eHByKSk7CiAJCUFzc2VydChsaXN0X2xlbmd0aCh0aWRxdWFscykgPT0gMSB8fCAhSXNBKHF1YWws IEN1cnJlbnRPZkV4cHIpKTsKIAogCQlpZiAoSXNBKHF1YWwsIFNjYWxhckFycmF5T3BFeHByKSkK QEAgLTEzMTYsMTAgKzEzMzUsMTQgQEAgY29zdF90aWRzY2FuKFBhdGggKnBhdGgsIFBsYW5uZXJJ bmZvICpyb290LAogCiAJLyoKIAkgKiBUaGVyZSBhcmUgYXNzZXJ0aW9ucyBhYm92ZSB2ZXJpZnlp bmcgdGhhdCB3ZSBvbmx5IHJlYWNoIHRoaXMgZnVuY3Rpb24KLQkgKiBlaXRoZXIgd2hlbiBlbmFi bGVfdGlkc2Nhbj10cnVlIG9yIHdoZW4gdGhlIFRJRCBzY2FuIGlzIHRoZSBvbmx5IGxlZ2FsCi0J ICogcGF0aCwgc28gaXQncyBzYWZlIHRvIHNldCBkaXNhYmxlZF9ub2RlcyB0byB6ZXJvIGhlcmUu CisJICogZWl0aGVyIHdoZW4gYmFzZXJlbC0+cGdzX21hc2sgaW5jbHVkZXMgUEdTX1RJRFNDQU4g b3Igd2hlbiB0aGUgVElEIHNjYW4KKwkgKiBpcyB0aGUgb25seSBsZWdhbCBwYXRoLCBzbyB3ZSBv bmx5IG5lZWQgdG8gY29uc2lkZXIgdGhlIGVmZmVjdHMgb2YKKwkgKiBQR1NfQ09OU0lERVJfTk9O UEFSVElBTCBoZXJlLgogCSAqLwotCXBhdGgtPmRpc2FibGVkX25vZGVzID0gMDsKKwlpZiAocGF0 aC0+cGFyYWxsZWxfd29ya2VycyA9PSAwKQorCQllbmFibGVfbWFzayB8PSBQR1NfQ09OU0lERVJf Tk9OUEFSVElBTDsKKwlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9CisJCShiYXNlcmVsLT5wZ3NfbWFz ayAmIGVuYWJsZV9tYXNrKSAhPSBlbmFibGVfbWFzayA/IDEgOiAwOwogCXBhdGgtPnN0YXJ0dXBf Y29zdCA9IHN0YXJ0dXBfY29zdDsKIAlwYXRoLT50b3RhbF9jb3N0ID0gc3RhcnR1cF9jb3N0ICsg cnVuX2Nvc3Q7CiB9CkBAIC0xMzUwLDYgKzEzNzMsNyBAQCBjb3N0X3RpZHJhbmdlc2NhbihQYXRo ICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAlkb3VibGUJCW5zZXFwYWdlczsKIAlkb3VibGUJ CXNwY19yYW5kb21fcGFnZV9jb3N0OwogCWRvdWJsZQkJc3BjX3NlcV9wYWdlX2Nvc3Q7CisJdWlu dDY0CQllbmFibGVfbWFzayA9IFBHU19USURTQ0FOOwogCiAJLyogU2hvdWxkIG9ubHkgYmUgYXBw bGllZCB0byBiYXNlIHJlbGF0aW9ucyAqLwogCUFzc2VydChiYXNlcmVsLT5yZWxpZCA+IDApOwpA QCAtMTQyOCw4ICsxNDUyLDE1IEBAIGNvc3RfdGlkcmFuZ2VzY2FuKFBhdGggKnBhdGgsIFBsYW5u ZXJJbmZvICpyb290LAogCQlwYXRoLT5yb3dzID0gY2xhbXBfcm93X2VzdChwYXRoLT5yb3dzIC8g cGFyYWxsZWxfZGl2aXNvcik7CiAJfQogCi0JLyogd2Ugc2hvdWxkIG5vdCBnZW5lcmF0ZSB0aGlz IHBhdGggdHlwZSB3aGVuIGVuYWJsZV90aWRzY2FuPWZhbHNlICovCi0JQXNzZXJ0KGVuYWJsZV90 aWRzY2FuKTsKKwkvKgorCSAqIFdlIHNob3VsZCBub3QgZ2VuZXJhdGUgdGhpcyBwYXRoIHR5cGUg d2hlbiBQR1NfVElEU0NBTiBpcyB1bnNldCwgYnV0IHdlCisJICogbWlnaHQgbmVlZCB0byBkaXNh YmxlIHRoaXMgcGF0aCBkdWUgdG8gUEdTX0NPTlNJREVSX05PTlBBUlRJQUwuCisJICovCisJQXNz ZXJ0KChiYXNlcmVsLT5wZ3NfbWFzayAmIFBHU19USURTQ0FOKSAhPSAwKTsKKwlpZiAocGF0aC0+ cGFyYWxsZWxfd29ya2VycyA9PSAwKQorCQllbmFibGVfbWFzayB8PSBQR1NfQ09OU0lERVJfTk9O UEFSVElBTDsKKwlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9CisJCShiYXNlcmVsLT5wZ3NfbWFzayAm IGVuYWJsZV9tYXNrKSAhPSBlbmFibGVfbWFzayA/IDEgOiAwOwogCXBhdGgtPmRpc2FibGVkX25v ZGVzID0gMDsKIAlwYXRoLT5zdGFydHVwX2Nvc3QgPSBzdGFydHVwX2Nvc3Q7CiAJcGF0aC0+dG90 YWxfY29zdCA9IHN0YXJ0dXBfY29zdCArIGNwdV9ydW5fY29zdCArIGRpc2tfcnVuX2Nvc3Q7CkBA IC0xNDUzLDYgKzE0ODQsNyBAQCBjb3N0X3N1YnF1ZXJ5c2NhbihTdWJxdWVyeVNjYW5QYXRoICpw YXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAlMaXN0CSAgICpxcHF1YWxzOwogCVF1YWxDb3N0CXFw cXVhbF9jb3N0OwogCUNvc3QJCWNwdV9wZXJfdHVwbGU7CisJdWludDY0CQllbmFibGVfbWFzayA9 IDA7CiAKIAkvKiBTaG91bGQgb25seSBiZSBhcHBsaWVkIHRvIGJhc2UgcmVsYXRpb25zIHRoYXQg YXJlIHN1YnF1ZXJpZXMgKi8KIAlBc3NlcnQoYmFzZXJlbC0+cmVsaWQgPiAwKTsKQEAgLTE0ODMs NyArMTUxNSwxMCBAQCBjb3N0X3N1YnF1ZXJ5c2NhbihTdWJxdWVyeVNjYW5QYXRoICpwYXRoLCBQ bGFubmVySW5mbyAqcm9vdCwKIAkgKiBTdWJxdWVyeVNjYW4gbm9kZSwgcGx1cyBjcHVfdHVwbGVf Y29zdCB0byBhY2NvdW50IGZvciBzZWxlY3Rpb24gYW5kCiAJICogcHJvamVjdGlvbiBvdmVyaGVh ZC4KIAkgKi8KLQlwYXRoLT5wYXRoLmRpc2FibGVkX25vZGVzID0gcGF0aC0+c3VicGF0aC0+ZGlz YWJsZWRfbm9kZXM7CisJaWYgKHBhdGgtPnBhdGgucGFyYWxsZWxfd29ya2VycyA9PSAwKQorCQll bmFibGVfbWFzayB8PSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKKwlwYXRoLT5wYXRoLmRpc2Fi bGVkX25vZGVzID0gcGF0aC0+c3VicGF0aC0+ZGlzYWJsZWRfbm9kZXMKKwkJKyAoKChiYXNlcmVs LT5wZ3NfbWFzayAmIGVuYWJsZV9tYXNrKSAhPSBlbmFibGVfbWFzaykgPyAxIDogMCk7CiAJcGF0 aC0+cGF0aC5zdGFydHVwX2Nvc3QgPSBwYXRoLT5zdWJwYXRoLT5zdGFydHVwX2Nvc3Q7CiAJcGF0 aC0+cGF0aC50b3RhbF9jb3N0ID0gcGF0aC0+c3VicGF0aC0+dG90YWxfY29zdDsKIApAQCAtMTUz NCw2ICsxNTY5LDcgQEAgY29zdF9mdW5jdGlvbnNjYW4oUGF0aCAqcGF0aCwgUGxhbm5lckluZm8g KnJvb3QsCiAJQ29zdAkJY3B1X3Blcl90dXBsZTsKIAlSYW5nZVRibEVudHJ5ICpydGU7CiAJUXVh bENvc3QJZXhwcmNvc3Q7CisJdWludDY0CQllbmFibGVfbWFzayA9IDA7CiAKIAkvKiBTaG91bGQg b25seSBiZSBhcHBsaWVkIHRvIGJhc2UgcmVsYXRpb25zIHRoYXQgYXJlIGZ1bmN0aW9ucyAqLwog CUFzc2VydChiYXNlcmVsLT5yZWxpZCA+IDApOwpAQCAtMTU3NCw3ICsxNjEwLDEwIEBAIGNvc3Rf ZnVuY3Rpb25zY2FuKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCXN0YXJ0dXBfY29z dCArPSBwYXRoLT5wYXRodGFyZ2V0LT5jb3N0LnN0YXJ0dXA7CiAJcnVuX2Nvc3QgKz0gcGF0aC0+ cGF0aHRhcmdldC0+Y29zdC5wZXJfdHVwbGUgKiBwYXRoLT5yb3dzOwogCi0JcGF0aC0+ZGlzYWJs ZWRfbm9kZXMgPSAwOworCWlmIChwYXRoLT5wYXJhbGxlbF93b3JrZXJzID09IDApCisJCWVuYWJs ZV9tYXNrIHw9IFBHU19DT05TSURFUl9OT05QQVJUSUFMOworCXBhdGgtPmRpc2FibGVkX25vZGVz ID0KKwkJKGJhc2VyZWwtPnBnc19tYXNrICYgZW5hYmxlX21hc2spICE9IGVuYWJsZV9tYXNrID8g MSA6IDA7CiAJcGF0aC0+c3RhcnR1cF9jb3N0ID0gc3RhcnR1cF9jb3N0OwogCXBhdGgtPnRvdGFs X2Nvc3QgPSBzdGFydHVwX2Nvc3QgKyBydW5fY29zdDsKIH0KQEAgLTE1OTYsNiArMTYzNSw3IEBA IGNvc3RfdGFibGVmdW5jc2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAlDb3N0 CQljcHVfcGVyX3R1cGxlOwogCVJhbmdlVGJsRW50cnkgKnJ0ZTsKIAlRdWFsQ29zdAlleHByY29z dDsKKwl1aW50NjQJCWVuYWJsZV9tYXNrID0gMDsKIAogCS8qIFNob3VsZCBvbmx5IGJlIGFwcGxp ZWQgdG8gYmFzZSByZWxhdGlvbnMgdGhhdCBhcmUgZnVuY3Rpb25zICovCiAJQXNzZXJ0KGJhc2Vy ZWwtPnJlbGlkID4gMCk7CkBAIC0xNjMxLDcgKzE2NzEsMTAgQEAgY29zdF90YWJsZWZ1bmNzY2Fu KFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCXN0YXJ0dXBfY29zdCArPSBwYXRoLT5w YXRodGFyZ2V0LT5jb3N0LnN0YXJ0dXA7CiAJcnVuX2Nvc3QgKz0gcGF0aC0+cGF0aHRhcmdldC0+ Y29zdC5wZXJfdHVwbGUgKiBwYXRoLT5yb3dzOwogCi0JcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPSAw OworCWlmIChwYXRoLT5wYXJhbGxlbF93b3JrZXJzID09IDApCisJCWVuYWJsZV9tYXNrIHw9IFBH U19DT05TSURFUl9OT05QQVJUSUFMOworCXBhdGgtPmRpc2FibGVkX25vZGVzID0KKwkJKGJhc2Vy ZWwtPnBnc19tYXNrICYgZW5hYmxlX21hc2spICE9IGVuYWJsZV9tYXNrID8gMSA6IDA7CiAJcGF0 aC0+c3RhcnR1cF9jb3N0ID0gc3RhcnR1cF9jb3N0OwogCXBhdGgtPnRvdGFsX2Nvc3QgPSBzdGFy dHVwX2Nvc3QgKyBydW5fY29zdDsKIH0KQEAgLTE2NTEsNiArMTY5NCw3IEBAIGNvc3RfdmFsdWVz c2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAlDb3N0CQlydW5fY29zdCA9IDA7 CiAJUXVhbENvc3QJcXBxdWFsX2Nvc3Q7CiAJQ29zdAkJY3B1X3Blcl90dXBsZTsKKwl1aW50NjQJ CWVuYWJsZV9tYXNrID0gMDsKIAogCS8qIFNob3VsZCBvbmx5IGJlIGFwcGxpZWQgdG8gYmFzZSBy ZWxhdGlvbnMgdGhhdCBhcmUgdmFsdWVzIGxpc3RzICovCiAJQXNzZXJ0KGJhc2VyZWwtPnJlbGlk ID4gMCk7CkBAIC0xNjc5LDcgKzE3MjMsMTAgQEAgY29zdF92YWx1ZXNzY2FuKFBhdGggKnBhdGgs IFBsYW5uZXJJbmZvICpyb290LAogCXN0YXJ0dXBfY29zdCArPSBwYXRoLT5wYXRodGFyZ2V0LT5j b3N0LnN0YXJ0dXA7CiAJcnVuX2Nvc3QgKz0gcGF0aC0+cGF0aHRhcmdldC0+Y29zdC5wZXJfdHVw bGUgKiBwYXRoLT5yb3dzOwogCi0JcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPSAwOworCWlmIChwYXRo LT5wYXJhbGxlbF93b3JrZXJzID09IDApCisJCWVuYWJsZV9tYXNrIHw9IFBHU19DT05TSURFUl9O T05QQVJUSUFMOworCXBhdGgtPmRpc2FibGVkX25vZGVzID0KKwkJKGJhc2VyZWwtPnBnc19tYXNr ICYgZW5hYmxlX21hc2spICE9IGVuYWJsZV9tYXNrID8gMSA6IDA7CiAJcGF0aC0+c3RhcnR1cF9j b3N0ID0gc3RhcnR1cF9jb3N0OwogCXBhdGgtPnRvdGFsX2Nvc3QgPSBzdGFydHVwX2Nvc3QgKyBy dW5fY29zdDsKIH0KQEAgLTE3MDIsNiArMTc0OSw3IEBAIGNvc3RfY3Rlc2NhbihQYXRoICpwYXRo LCBQbGFubmVySW5mbyAqcm9vdCwKIAlDb3N0CQlydW5fY29zdCA9IDA7CiAJUXVhbENvc3QJcXBx dWFsX2Nvc3Q7CiAJQ29zdAkJY3B1X3Blcl90dXBsZTsKKwl1aW50NjQJCWVuYWJsZV9tYXNrID0g MDsKIAogCS8qIFNob3VsZCBvbmx5IGJlIGFwcGxpZWQgdG8gYmFzZSByZWxhdGlvbnMgdGhhdCBh cmUgQ1RFcyAqLwogCUFzc2VydChiYXNlcmVsLT5yZWxpZCA+IDApOwpAQCAtMTcyNyw3ICsxNzc1 LDEwIEBAIGNvc3RfY3Rlc2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAlzdGFy dHVwX2Nvc3QgKz0gcGF0aC0+cGF0aHRhcmdldC0+Y29zdC5zdGFydHVwOwogCXJ1bl9jb3N0ICs9 IHBhdGgtPnBhdGh0YXJnZXQtPmNvc3QucGVyX3R1cGxlICogcGF0aC0+cm93czsKIAotCXBhdGgt PmRpc2FibGVkX25vZGVzID0gMDsKKwlpZiAocGF0aC0+cGFyYWxsZWxfd29ya2VycyA9PSAwKQor CQllbmFibGVfbWFzayB8PSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKKwlwYXRoLT5kaXNhYmxl ZF9ub2RlcyA9CisJCShiYXNlcmVsLT5wZ3NfbWFzayAmIGVuYWJsZV9tYXNrKSAhPSBlbmFibGVf bWFzayA/IDEgOiAwOwogCXBhdGgtPnN0YXJ0dXBfY29zdCA9IHN0YXJ0dXBfY29zdDsKIAlwYXRo LT50b3RhbF9jb3N0ID0gc3RhcnR1cF9jb3N0ICsgcnVuX2Nvc3Q7CiB9CkBAIC0xNzQ0LDYgKzE3 OTUsNyBAQCBjb3N0X25hbWVkdHVwbGVzdG9yZXNjYW4oUGF0aCAqcGF0aCwgUGxhbm5lckluZm8g KnJvb3QsCiAJQ29zdAkJcnVuX2Nvc3QgPSAwOwogCVF1YWxDb3N0CXFwcXVhbF9jb3N0OwogCUNv c3QJCWNwdV9wZXJfdHVwbGU7CisJdWludDY0CQllbmFibGVfbWFzayA9IDA7CiAKIAkvKiBTaG91 bGQgb25seSBiZSBhcHBsaWVkIHRvIGJhc2UgcmVsYXRpb25zIHRoYXQgYXJlIFR1cGxlc3RvcmVz ICovCiAJQXNzZXJ0KGJhc2VyZWwtPnJlbGlkID4gMCk7CkBAIC0xNzY1LDcgKzE4MTcsMTAgQEAg Y29zdF9uYW1lZHR1cGxlc3RvcmVzY2FuKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAog CWNwdV9wZXJfdHVwbGUgKz0gY3B1X3R1cGxlX2Nvc3QgKyBxcHF1YWxfY29zdC5wZXJfdHVwbGU7 CiAJcnVuX2Nvc3QgKz0gY3B1X3Blcl90dXBsZSAqIGJhc2VyZWwtPnR1cGxlczsKIAotCXBhdGgt PmRpc2FibGVkX25vZGVzID0gMDsKKwlpZiAocGF0aC0+cGFyYWxsZWxfd29ya2VycyA9PSAwKQor CQllbmFibGVfbWFzayB8PSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKKwlwYXRoLT5kaXNhYmxl ZF9ub2RlcyA9CisJCShiYXNlcmVsLT5wZ3NfbWFzayAmIGVuYWJsZV9tYXNrKSAhPSBlbmFibGVf bWFzayA/IDEgOiAwOwogCXBhdGgtPnN0YXJ0dXBfY29zdCA9IHN0YXJ0dXBfY29zdDsKIAlwYXRo LT50b3RhbF9jb3N0ID0gc3RhcnR1cF9jb3N0ICsgcnVuX2Nvc3Q7CiB9CkBAIC0xNzgyLDYgKzE4 MzcsNyBAQCBjb3N0X3Jlc3VsdHNjYW4oUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJ Q29zdAkJcnVuX2Nvc3QgPSAwOwogCVF1YWxDb3N0CXFwcXVhbF9jb3N0OwogCUNvc3QJCWNwdV9w ZXJfdHVwbGU7CisJdWludDY0CQllbmFibGVfbWFzayA9IDA7CiAKIAkvKiBTaG91bGQgb25seSBi ZSBhcHBsaWVkIHRvIFJURV9SRVNVTFQgYmFzZSByZWxhdGlvbnMgKi8KIAlBc3NlcnQoYmFzZXJl bC0+cmVsaWQgPiAwKTsKQEAgLTE4MDAsNyArMTg1NiwxMCBAQCBjb3N0X3Jlc3VsdHNjYW4oUGF0 aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJY3B1X3Blcl90dXBsZSA9IGNwdV90dXBsZV9j b3N0ICsgcXBxdWFsX2Nvc3QucGVyX3R1cGxlOwogCXJ1bl9jb3N0ICs9IGNwdV9wZXJfdHVwbGUg KiBiYXNlcmVsLT50dXBsZXM7CiAKLQlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9IDA7CisJaWYgKHBh dGgtPnBhcmFsbGVsX3dvcmtlcnMgPT0gMCkKKwkJZW5hYmxlX21hc2sgfD0gUEdTX0NPTlNJREVS X05PTlBBUlRJQUw7CisJcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPQorCQkoYmFzZXJlbC0+cGdzX21h c2sgJiBlbmFibGVfbWFzaykgIT0gZW5hYmxlX21hc2sgPyAxIDogMDsKIAlwYXRoLT5zdGFydHVw X2Nvc3QgPSBzdGFydHVwX2Nvc3Q7CiAJcGF0aC0+dG90YWxfY29zdCA9IHN0YXJ0dXBfY29zdCAr IHJ1bl9jb3N0OwogfQpAQCAtMTgxOCw2ICsxODc3LDcgQEAgY29zdF9yZWN1cnNpdmVfdW5pb24o UGF0aCAqcnVuaW9uLCBQYXRoICpucnRlcm0sIFBhdGggKnJ0ZXJtKQogCUNvc3QJCXN0YXJ0dXBf Y29zdDsKIAlDb3N0CQl0b3RhbF9jb3N0OwogCWRvdWJsZQkJdG90YWxfcm93czsKKwl1aW50NjQJ CWVuYWJsZV9tYXNrID0gMDsKIAogCS8qIFdlIHByb2JhYmx5IGhhdmUgZGVjZW50IGVzdGltYXRl cyBmb3IgdGhlIG5vbi1yZWN1cnNpdmUgdGVybSAqLwogCXN0YXJ0dXBfY29zdCA9IG5ydGVybS0+ c3RhcnR1cF9jb3N0OwpAQCAtMTg0MCw3ICsxOTAwLDEwIEBAIGNvc3RfcmVjdXJzaXZlX3VuaW9u KFBhdGggKnJ1bmlvbiwgUGF0aCAqbnJ0ZXJtLCBQYXRoICpydGVybSkKIAkgKi8KIAl0b3RhbF9j b3N0ICs9IGNwdV90dXBsZV9jb3N0ICogdG90YWxfcm93czsKIAotCXJ1bmlvbi0+ZGlzYWJsZWRf bm9kZXMgPSBucnRlcm0tPmRpc2FibGVkX25vZGVzICsgcnRlcm0tPmRpc2FibGVkX25vZGVzOwor CWlmIChydW5pb24tPnBhcmFsbGVsX3dvcmtlcnMgPT0gMCkKKwkJZW5hYmxlX21hc2sgfD0gUEdT X0NPTlNJREVSX05PTlBBUlRJQUw7CisJcnVuaW9uLT5kaXNhYmxlZF9ub2RlcyA9CisJCShydW5p b24tPnBhcmVudC0+cGdzX21hc2sgJiBlbmFibGVfbWFzaykgIT0gZW5hYmxlX21hc2sgPyAxIDog MDsKIAlydW5pb24tPnN0YXJ0dXBfY29zdCA9IHN0YXJ0dXBfY29zdDsKIAlydW5pb24tPnRvdGFs X2Nvc3QgPSB0b3RhbF9jb3N0OwogCXJ1bmlvbi0+cm93cyA9IHRvdGFsX3Jvd3M7CkBAIC0yMTEw LDcgKzIxNzMsMTEgQEAgY29zdF9pbmNyZW1lbnRhbF9zb3J0KFBhdGggKnBhdGgsCiAKIAlwYXRo LT5yb3dzID0gaW5wdXRfdHVwbGVzOwogCi0JLyogc2hvdWxkIG5vdCBnZW5lcmF0ZSB0aGVzZSBw YXRocyB3aGVuIGVuYWJsZV9pbmNyZW1lbnRhbF9zb3J0PWZhbHNlICovCisJLyoKKwkgKiBXZSBz aG91bGQgbm90IGdlbmVyYXRlIHRoZXNlIHBhdGhzIHdoZW4gZW5hYmxlX2luY3JlbWVudGFsX3Nv cnQ9ZmFsc2UuCisJICogV2UgY2FuIGlnbm9yZSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTCBoZXJl LCBiZWNhdXNlIGlmIGl0J3MgcmVsZXZhbnQsCisJICogaXQgd2lsbCBoYXZlIGFscmVhZHkgYWZm ZWN0ZWQgdGhlIGlucHV0IHBhdGguCisJICovCiAJQXNzZXJ0KGVuYWJsZV9pbmNyZW1lbnRhbF9z b3J0KTsKIAlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9IGlucHV0X2Rpc2FibGVkX25vZGVzOwogCkBA IC0yMTQ4LDYgKzIyMTUsMTAgQEAgY29zdF9zb3J0KFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpy b290LAogCiAJc3RhcnR1cF9jb3N0ICs9IGlucHV0X2Nvc3Q7CiAKKwkvKgorCSAqIFdlIGNhbiBp Z25vcmUgUEdTX0NPTlNJREVSX05PTlBBUlRJQUwgaGVyZSwgYmVjYXVzZSBpZiBpdCdzIHJlbGV2 YW50LAorCSAqIGl0IHdpbGwgaGF2ZSBhbHJlYWR5IGFmZmVjdGVkIHRoZSBpbnB1dCBwYXRoLgor CSAqLwogCXBhdGgtPnJvd3MgPSB0dXBsZXM7CiAJcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPSBpbnB1 dF9kaXNhYmxlZF9ub2RlcyArIChlbmFibGVfc29ydCA/IDAgOiAxKTsKIAlwYXRoLT5zdGFydHVw X2Nvc3QgPSBzdGFydHVwX2Nvc3Q7CkBAIC0yMjM5LDkgKzIzMTAsMTUgQEAgYXBwZW5kX25vbnBh cnRpYWxfY29zdChMaXN0ICpzdWJwYXRocywgaW50IG51bXBhdGhzLCBpbnQgcGFyYWxsZWxfd29y a2VycykKIHZvaWQKIGNvc3RfYXBwZW5kKEFwcGVuZFBhdGggKmFwYXRoLCBQbGFubmVySW5mbyAq cm9vdCkKIHsKKwlSZWxPcHRJbmZvICpyZWwgPSBhcGF0aC0+cGF0aC5wYXJlbnQ7CiAJTGlzdENl bGwgICAqbDsKKwl1aW50NjQJCWVuYWJsZV9tYXNrID0gUEdTX0FQUEVORDsKKworCWlmIChhcGF0 aC0+cGF0aC5wYXJhbGxlbF93b3JrZXJzID09IDApCisJCWVuYWJsZV9tYXNrIHw9IFBHU19DT05T SURFUl9OT05QQVJUSUFMOwogCi0JYXBhdGgtPnBhdGguZGlzYWJsZWRfbm9kZXMgPSAwOworCWFw YXRoLT5wYXRoLmRpc2FibGVkX25vZGVzID0KKwkJKHJlbC0+cGdzX21hc2sgJiBlbmFibGVfbWFz aykgPT0gZW5hYmxlX21hc2sgPyAwIDogMTsKIAlhcGF0aC0+cGF0aC5zdGFydHVwX2Nvc3QgPSAw OwogCWFwYXRoLT5wYXRoLnRvdGFsX2Nvc3QgPSAwOwogCWFwYXRoLT5wYXRoLnJvd3MgPSAwOwpA QCAtMjQ1MSwxMSArMjUyOCwxNiBAQCBjb3N0X21lcmdlX2FwcGVuZChQYXRoICpwYXRoLCBQbGFu bmVySW5mbyAqcm9vdCwKIAkJCQkgIENvc3QgaW5wdXRfc3RhcnR1cF9jb3N0LCBDb3N0IGlucHV0 X3RvdGFsX2Nvc3QsCiAJCQkJICBkb3VibGUgdHVwbGVzKQogeworCVJlbE9wdEluZm8gKnJlbCA9 IHBhdGgtPnBhcmVudDsKIAlDb3N0CQlzdGFydHVwX2Nvc3QgPSAwOwogCUNvc3QJCXJ1bl9jb3N0 ID0gMDsKIAlDb3N0CQljb21wYXJpc29uX2Nvc3Q7CiAJZG91YmxlCQlOOwogCWRvdWJsZQkJbG9n TjsKKwl1aW50NjQJCWVuYWJsZV9tYXNrID0gUEdTX01FUkdFX0FQUEVORDsKKworCWlmIChwYXRo LT5wYXJhbGxlbF93b3JrZXJzID09IDApCisJCWVuYWJsZV9tYXNrIHw9IFBHU19DT05TSURFUl9O T05QQVJUSUFMOwogCiAJLyoKIAkgKiBBdm9pZCBsb2coMCkuLi4KQEAgLTI0NzgsNyArMjU2MCw5 IEBAIGNvc3RfbWVyZ2VfYXBwZW5kKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCSAq LwogCXJ1bl9jb3N0ICs9IGNwdV90dXBsZV9jb3N0ICogQVBQRU5EX0NQVV9DT1NUX01VTFRJUExJ RVIgKiB0dXBsZXM7CiAKLQlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9IGlucHV0X2Rpc2FibGVkX25v ZGVzOworCXBhdGgtPmRpc2FibGVkX25vZGVzID0KKwkJKHJlbC0+cGdzX21hc2sgJiBlbmFibGVf bWFzaykgPT0gZW5hYmxlX21hc2sgPyAwIDogMTsKKwlwYXRoLT5kaXNhYmxlZF9ub2RlcyArPSBp bnB1dF9kaXNhYmxlZF9ub2RlczsKIAlwYXRoLT5zdGFydHVwX2Nvc3QgPSBzdGFydHVwX2Nvc3Qg KyBpbnB1dF9zdGFydHVwX2Nvc3Q7CiAJcGF0aC0+dG90YWxfY29zdCA9IHN0YXJ0dXBfY29zdCAr IHJ1bl9jb3N0ICsgaW5wdXRfdG90YWxfY29zdDsKIH0KQEAgLTI0OTcsNyArMjU4MSw3IEBAIGNv c3RfbWVyZ2VfYXBwZW5kKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogICovCiB2b2lk CiBjb3N0X21hdGVyaWFsKFBhdGggKnBhdGgsCi0JCQkgIGludCBpbnB1dF9kaXNhYmxlZF9ub2Rl cywKKwkJCSAgYm9vbCBlbmFibGVkLCBpbnQgaW5wdXRfZGlzYWJsZWRfbm9kZXMsCiAJCQkgIENv c3QgaW5wdXRfc3RhcnR1cF9jb3N0LCBDb3N0IGlucHV0X3RvdGFsX2Nvc3QsCiAJCQkgIGRvdWJs ZSB0dXBsZXMsIGludCB3aWR0aCkKIHsKQEAgLTI1MDYsNiArMjU5MCwxMSBAQCBjb3N0X21hdGVy aWFsKFBhdGggKnBhdGgsCiAJZG91YmxlCQluYnl0ZXMgPSByZWxhdGlvbl9ieXRlX3NpemUodHVw bGVzLCB3aWR0aCk7CiAJZG91YmxlCQl3b3JrX21lbV9ieXRlcyA9IHdvcmtfbWVtICogKFNpemUp IDEwMjQ7CiAKKwlpZiAocGF0aC0+cGFyYWxsZWxfd29ya2VycyA9PSAwICYmCisJCXBhdGgtPnBh cmVudCAhPSBOVUxMICYmCisJCShwYXRoLT5wYXJlbnQtPnBnc19tYXNrICYgUEdTX0NPTlNJREVS X05PTlBBUlRJQUwpID09IDApCisJCWVuYWJsZWQgPSBmYWxzZTsKKwogCXBhdGgtPnJvd3MgPSB0 dXBsZXM7CiAKIAkvKgpAQCAtMjUzNSw3ICsyNjI0LDcgQEAgY29zdF9tYXRlcmlhbChQYXRoICpw YXRoLAogCQlydW5fY29zdCArPSBzZXFfcGFnZV9jb3N0ICogbnBhZ2VzOwogCX0KIAotCXBhdGgt PmRpc2FibGVkX25vZGVzID0gaW5wdXRfZGlzYWJsZWRfbm9kZXMgKyAoZW5hYmxlX21hdGVyaWFs ID8gMCA6IDEpOworCXBhdGgtPmRpc2FibGVkX25vZGVzID0gaW5wdXRfZGlzYWJsZWRfbm9kZXMg KyAoZW5hYmxlZCA/IDAgOiAxKTsKIAlwYXRoLT5zdGFydHVwX2Nvc3QgPSBzdGFydHVwX2Nvc3Q7 CiAJcGF0aC0+dG90YWxfY29zdCA9IHN0YXJ0dXBfY29zdCArIHJ1bl9jb3N0OwogfQpAQCAtMzI4 Nyw3ICszMzc2LDcgQEAgY29zdF9ncm91cChQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwK ICAqLwogdm9pZAogaW5pdGlhbF9jb3N0X25lc3Rsb29wKFBsYW5uZXJJbmZvICpyb290LCBKb2lu Q29zdFdvcmtzcGFjZSAqd29ya3NwYWNlLAotCQkJCQkgIEpvaW5UeXBlIGpvaW50eXBlLAorCQkJ CQkgIEpvaW5UeXBlIGpvaW50eXBlLCB1aW50NjQgZW5hYmxlX21hc2ssCiAJCQkJCSAgUGF0aCAq b3V0ZXJfcGF0aCwgUGF0aCAqaW5uZXJfcGF0aCwKIAkJCQkJICBKb2luUGF0aEV4dHJhRGF0YSAq ZXh0cmEpCiB7CkBAIC0zMzAxLDcgKzMzOTAsNyBAQCBpbml0aWFsX2Nvc3RfbmVzdGxvb3AoUGxh bm5lckluZm8gKnJvb3QsIEpvaW5Db3N0V29ya3NwYWNlICp3b3Jrc3BhY2UsCiAJQ29zdAkJaW5u ZXJfcmVzY2FuX3J1bl9jb3N0OwogCiAJLyogQ291bnQgdXAgZGlzYWJsZWQgbm9kZXMuICovCi0J ZGlzYWJsZWRfbm9kZXMgPSBlbmFibGVfbmVzdGxvb3AgPyAwIDogMTsKKwlkaXNhYmxlZF9ub2Rl cyA9IChleHRyYS0+cGdzX21hc2sgJiBlbmFibGVfbWFzaykgPT0gZW5hYmxlX21hc2sgPyAwIDog MTsKIAlkaXNhYmxlZF9ub2RlcyArPSBpbm5lcl9wYXRoLT5kaXNhYmxlZF9ub2RlczsKIAlkaXNh YmxlZF9ub2RlcyArPSBvdXRlcl9wYXRoLT5kaXNhYmxlZF9ub2RlczsKIApAQCAtMzcwMSw3ICsz NzkwLDE5IEBAIGluaXRpYWxfY29zdF9tZXJnZWpvaW4oUGxhbm5lckluZm8gKnJvb3QsIEpvaW5D b3N0V29ya3NwYWNlICp3b3Jrc3BhY2UsCiAJQXNzZXJ0KG91dGVyc3RhcnRzZWwgPD0gb3V0ZXJl bmRzZWwpOwogCUFzc2VydChpbm5lcnN0YXJ0c2VsIDw9IGlubmVyZW5kc2VsKTsKIAotCWRpc2Fi bGVkX25vZGVzID0gZW5hYmxlX21lcmdlam9pbiA/IDAgOiAxOworCS8qCisJICogV2UgZG9uJ3Qg ZGVjaWRlIHdoZXRoZXIgdG8gbWF0ZXJpYWxpemUgdGhlIGlubmVyIHBhdGggdW50aWwgd2UgZ2V0 IHRvCisJICogZmluYWxfY29zdF9tZXJnZWpvaW4oKSwgc28gd2UgZG9uJ3Qga25vdyB3aGV0aGVy IHRvIGNoZWNrIHRoZSBwZ3NfbWFzaworCSAqIGFnYWluIFBHU19NRVJHRUpPSU5fUExBSU4gb3Ig UEdTX01FUkdFSk9JTl9NQVRFUklBTElaRS4gSW5zdGVhZCwgd2UKKwkgKiBqdXN0IGFjY291bnQg Zm9yIGFueSBjaGlsZCBub2RlcyBoZXJlIGFuZCBhc3N1bWUgdGhhdCB0aGlzIG5vZGUgaXMgbm90 CisJICogaXRzbGVmIGRpc2FibGVkOyB3ZSBjYW4gc29ydCBvdXQgdGhlIGRldGFpbHMgaW4gZmlu YWxfY29zdF9tZXJnZWpvaW4oKS4KKwkgKgorCSAqIChXZSBjb3VsZCBiZSBtb3JlIHByZWNpc2Ug aGVyZSBieSBzZXR0aW5nIGRpc2FibGVkX25vZGVzIHRvIDEgYXQgdGhpcworCSAqIHN0YWdlIGlm IGJvdGggUEdTX01FUkdFSk9JTl9QTEFJTiBhbmQgUEdTX01FUkdFSk9JTl9NQVRFUklBTElaRSBh cmUKKwkgKiBkaXNhYmxlZCwgYnV0IHRoYXQgc2VlbXMgdG8gYWdhaW5zdCB0aGUgaWRlYSBvZiBt YWtpbmcgdGhpcyBmdW5jdGlvbgorCSAqIHByb2R1Y2UgYSBxdWljaywgb3B0aW1pc3RpYyBhcHBy b3hpbWF0aW9uIG9mIHRoZSBmaW5hbCBjb3N0LikKKwkgKi8KKwlkaXNhYmxlZF9ub2RlcyA9IDA7 CiAKIAkvKiBjb3N0IG9mIHNvdXJjZSBkYXRhICovCiAKQEAgLTM4ODAsOSArMzk4MSw3IEBAIGZp bmFsX2Nvc3RfbWVyZ2Vqb2luKFBsYW5uZXJJbmZvICpyb290LCBNZXJnZVBhdGggKnBhdGgsCiAJ ZG91YmxlCQltZXJnZWpvaW50dXBsZXMsCiAJCQkJcmVzY2FubmVkdHVwbGVzOwogCWRvdWJsZQkJ cmVzY2FucmF0aW87Ci0KLQkvKiBTZXQgdGhlIG51bWJlciBvZiBkaXNhYmxlZCBub2Rlcy4gKi8K LQlwYXRoLT5qcGF0aC5wYXRoLmRpc2FibGVkX25vZGVzID0gd29ya3NwYWNlLT5kaXNhYmxlZF9u b2RlczsKKwl1aW50NjQJCWVuYWJsZV9tYXNrID0gMDsKIAogCS8qIFByb3RlY3Qgc29tZSBhc3N1 bXB0aW9ucyBiZWxvdyB0aGF0IHJvd2NvdW50cyBhcmVuJ3QgemVybyAqLwogCWlmIChpbm5lcl9w YXRoX3Jvd3MgPD0gMCkKQEAgLTQwMTIsMTYgKzQxMTEsMjAgQEAgZmluYWxfY29zdF9tZXJnZWpv aW4oUGxhbm5lckluZm8gKnJvb3QsIE1lcmdlUGF0aCAqcGF0aCwKIAkJcGF0aC0+bWF0ZXJpYWxp emVfaW5uZXIgPSBmYWxzZTsKIAogCS8qCi0JICogUHJlZmVyIG1hdGVyaWFsaXppbmcgaWYgaXQg bG9va3MgY2hlYXBlciwgdW5sZXNzIHRoZSB1c2VyIGhhcyBhc2tlZCB0bwotCSAqIHN1cHByZXNz IG1hdGVyaWFsaXphdGlvbi4KKwkgKiBJZiBtZXJnZSBqb2lucyB3aXRoIG1hdGVyaWFsaXphdGlv biBhcmUgZW5hYmxlZCwgdGhlbiBjaG9vc2UKKwkgKiBtYXRlcmlhbGl6YXRpb24gaWYgZWl0aGVy IChhKSBpdCBsb29rcyBjaGVhcGVyIG9yIChiKSBtZXJnZSBqb2lucworCSAqIHdpdGhvdXQgbWF0 ZXJpYWxpemF0aW9uIGFyZSBkaXNhYmxlZC4KIAkgKi8KLQllbHNlIGlmIChlbmFibGVfbWF0ZXJp YWwgJiYgbWF0X2lubmVyX2Nvc3QgPCBiYXJlX2lubmVyX2Nvc3QpCisJZWxzZSBpZiAoKGV4dHJh LT5wZ3NfbWFzayAmIFBHU19NRVJHRUpPSU5fTUFURVJJQUxJWkUpICE9IDAgJiYKKwkJCSAobWF0 X2lubmVyX2Nvc3QgPCBiYXJlX2lubmVyX2Nvc3QgfHwKKwkJCSAgKGV4dHJhLT5wZ3NfbWFzayAm IFBHU19NRVJHRUpPSU5fUExBSU4pID09IDApKQogCQlwYXRoLT5tYXRlcmlhbGl6ZV9pbm5lciA9 IHRydWU7CiAKIAkvKgotCSAqIEV2ZW4gaWYgbWF0ZXJpYWxpemluZyBkb2Vzbid0IGxvb2sgY2hl YXBlciwgd2UgKm11c3QqIGRvIGl0IGlmIHRoZQotCSAqIGlubmVyIHBhdGggaXMgdG8gYmUgdXNl ZCBkaXJlY3RseSAod2l0aG91dCBzb3J0aW5nKSBhbmQgaXQgZG9lc24ndAotCSAqIHN1cHBvcnQg bWFyay9yZXN0b3JlLgorCSAqIFJlZ2FyZGxlc3Mgb2Ygd2hhdCBwbGFuIHNoYXBlcyBhcmUgZW5h YmxlZCBhbmQgd2hhdCB0aGUgY29zdHMgc2VlbSB0bworCSAqIGJlLCB3ZSAqbXVzdCogbWF0ZXJp YWxpemUgaXQgaWYgdGhlIGlubmVyIHBhdGggaXMgdG8gYmUgdXNlZCBkaXJlY3RseQorCSAqICh3 aXRob3V0IHNvcnRpbmcpIGFuZCBpdCBkb2Vzbid0IHN1cHBvcnQgbWFyay9yZXN0b3JlLiBQbGFu bmVyIGZhaWx1cmUKKwkgKiBpcyBub3QgYW4gb3B0aW9uIQogCSAqCiAJICogU2luY2UgdGhlIGlu bmVyIHNpZGUgbXVzdCBiZSBvcmRlcmVkLCBhbmQgb25seSBTb3J0cyBhbmQgSW5kZXhTY2FucyBj YW4KIAkgKiBjcmVhdGUgb3JkZXIgdG8gYmVnaW4gd2l0aCwgYW5kIHRoZXkgYm90aCBzdXBwb3J0 IG1hcmsvcmVzdG9yZSwgeW91CkBAIC00MDI5LDEwICs0MTMyLDYgQEAgZmluYWxfY29zdF9tZXJn ZWpvaW4oUGxhbm5lckluZm8gKnJvb3QsIE1lcmdlUGF0aCAqcGF0aCwKIAkgKiBtZXJnZSBqb2lu cyBjYW4gKnByZXNlcnZlKiB0aGUgb3JkZXIgb2YgdGhlaXIgaW5wdXRzLCBzbyB0aGV5IGNhbiBi ZQogCSAqIHNlbGVjdGVkIGFzIHRoZSBpbnB1dCBvZiBhIG1lcmdlam9pbiwgYW5kIHRoZXkgZG9u J3Qgc3VwcG9ydAogCSAqIG1hcmsvcmVzdG9yZSBhdCBwcmVzZW50LgotCSAqCi0JICogV2UgZG9u J3QgdGVzdCB0aGUgdmFsdWUgb2YgZW5hYmxlX21hdGVyaWFsIGhlcmUsIGJlY2F1c2UKLQkgKiBt YXRlcmlhbGl6YXRpb24gaXMgcmVxdWlyZWQgZm9yIGNvcnJlY3RuZXNzIGluIHRoaXMgY2FzZSwg YW5kIHR1cm5pbmcKLQkgKiBpdCBvZmYgZG9lcyBub3QgZW50aXRsZSB1cyB0byBkZWxpdmVyIGFu IGludmFsaWQgcGxhbi4KIAkgKi8KIAllbHNlIGlmIChpbm5lcnNvcnRrZXlzID09IE5JTCAmJgog CQkJICFFeGVjU3VwcG9ydHNNYXJrUmVzdG9yZShpbm5lcl9wYXRoKSkKQEAgLTQwNDYsMTAgKzQx NDUsMTEgQEAgZmluYWxfY29zdF9tZXJnZWpvaW4oUGxhbm5lckluZm8gKnJvb3QsIE1lcmdlUGF0 aCAqcGF0aCwKIAkgKiB0aG91Z2guCiAJICoKIAkgKiBTaW5jZSBtYXRlcmlhbGl6YXRpb24gaXMg YSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gaW4gdGhpcyBjYXNlLAotCSAqIHJhdGhlciB0aGFu IG5lY2Vzc2FyeSBmb3IgY29ycmVjdG5lc3MsIHdlIHNraXAgaXQgaWYgZW5hYmxlX21hdGVyaWFs IGlzCi0JICogb2ZmLgorCSAqIHJhdGhlciB0aGFuIG5lY2Vzc2FyeSBmb3IgY29ycmVjdG5lc3Ms IHdlIHNraXAgaXQgaWYgbWF0ZXJpYWxpemF0aW9uIGlzCisJICogc3dpdGNoZWQgb2ZmLgogCSAq LwotCWVsc2UgaWYgKGVuYWJsZV9tYXRlcmlhbCAmJiBpbm5lcnNvcnRrZXlzICE9IE5JTCAmJgor CWVsc2UgaWYgKChleHRyYS0+cGdzX21hc2sgJiBQR1NfTUVSR0VKT0lOX01BVEVSSUFMSVpFKSAh PSAwICYmCisJCQkgaW5uZXJzb3J0a2V5cyAhPSBOSUwgJiYKIAkJCSByZWxhdGlvbl9ieXRlX3Np emUoaW5uZXJfcGF0aF9yb3dzLAogCQkJCQkJCQlpbm5lcl9wYXRoLT5wYXRodGFyZ2V0LT53aWR0 aCkgPgogCQkJIHdvcmtfbWVtICogKFNpemUpIDEwMjQpCkBAIC00MDU3LDExICs0MTU3LDI5IEBA IGZpbmFsX2Nvc3RfbWVyZ2Vqb2luKFBsYW5uZXJJbmZvICpyb290LCBNZXJnZVBhdGggKnBhdGgs CiAJZWxzZQogCQlwYXRoLT5tYXRlcmlhbGl6ZV9pbm5lciA9IGZhbHNlOwogCi0JLyogQ2hhcmdl IHRoZSByaWdodCBpbmNyZW1lbnRhbCBjb3N0IGZvciB0aGUgY2hvc2VuIGNhc2UgKi8KKwkvKiBH ZXQgdGhlIG51bWJlciBvZiBkaXNhYmxlZCBub2Rlcywgbm90IHlldCBpbmNsdWRpbmcgdGhpcyBv bmUuICovCisJcGF0aC0+anBhdGgucGF0aC5kaXNhYmxlZF9ub2RlcyA9IHdvcmtzcGFjZS0+ZGlz YWJsZWRfbm9kZXM7CisKKwkvKgorCSAqIENoYXJnZSB0aGUgcmlnaHQgaW5jcmVtZW50YWwgY29z dCBmb3IgdGhlIGNob3NlbiBjYXNlLCBhbmQgdXBkYXRlCisJICogZW5hYmxlX21hc2sgYXMgYXBw cm9wcmlhdGUuCisJICovCiAJaWYgKHBhdGgtPm1hdGVyaWFsaXplX2lubmVyKQorCXsKIAkJcnVu X2Nvc3QgKz0gbWF0X2lubmVyX2Nvc3Q7CisJCWVuYWJsZV9tYXNrIHw9IFBHU19NRVJHRUpPSU5f TUFURVJJQUxJWkU7CisJfQogCWVsc2UKKwl7CiAJCXJ1bl9jb3N0ICs9IGJhcmVfaW5uZXJfY29z dDsKKwkJZW5hYmxlX21hc2sgfD0gUEdTX01FUkdFSk9JTl9QTEFJTjsKKwl9CisKKwkvKiBJbmNy ZW1lbnRhbCBjb3VudCBvZiBkaXNhYmxlZCBub2RlcyBpZiB0aGlzIG5vZGUgaXMgZGlzYWJsZWQu ICovCisJaWYgKHBhdGgtPmpwYXRoLnBhdGgucGFyYWxsZWxfd29ya2VycyA9PSAwKQorCQllbmFi bGVfbWFzayB8PSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKKwlpZiAoKGV4dHJhLT5wZ3NfbWFz ayAmIGVuYWJsZV9tYXNrKSAhPSBlbmFibGVfbWFzaykKKwkJKytwYXRoLT5qcGF0aC5wYXRoLmRp c2FibGVkX25vZGVzOwogCiAJLyogQ1BVIGNvc3RzICovCiAKQEAgLTQxOTksOSArNDMxNywxMyBA QCBpbml0aWFsX2Nvc3RfaGFzaGpvaW4oUGxhbm5lckluZm8gKnJvb3QsIEpvaW5Db3N0V29ya3Nw YWNlICp3b3Jrc3BhY2UsCiAJaW50CQkJbnVtYmF0Y2hlczsKIAlpbnQJCQludW1fc2tld19tY3Zz OwogCXNpemVfdAkJc3BhY2VfYWxsb3dlZDsJLyogdW51c2VkICovCisJdWludDY0CQllbmFibGVf bWFzayA9IFBHU19IQVNISk9JTjsKKworCWlmIChvdXRlcl9wYXRoLT5wYXJhbGxlbF93b3JrZXJz ID09IDApCisJCWVuYWJsZV9tYXNrIHw9IFBHU19DT05TSURFUl9OT05QQVJUSUFMOwogCiAJLyog Q291bnQgdXAgZGlzYWJsZWQgbm9kZXMuICovCi0JZGlzYWJsZWRfbm9kZXMgPSBlbmFibGVfaGFz aGpvaW4gPyAwIDogMTsKKwlkaXNhYmxlZF9ub2RlcyA9IChleHRyYS0+cGdzX21hc2sgJiBlbmFi bGVfbWFzaykgPT0gZW5hYmxlX21hc2sgPyAwIDogMTsKIAlkaXNhYmxlZF9ub2RlcyArPSBpbm5l cl9wYXRoLT5kaXNhYmxlZF9ub2RlczsKIAlkaXNhYmxlZF9ub2RlcyArPSBvdXRlcl9wYXRoLT5k aXNhYmxlZF9ub2RlczsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgv aW5keHBhdGguYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMKaW5kZXgg NTFiOWQ2Njc3ZDMuLjY1NTU2NTE2YjZiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGF0aC9pbmR4cGF0aC5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhw YXRoLmMKQEAgLTIyMzQsOCArMjIzNCw4IEBAIGNoZWNrX2luZGV4X29ubHkoUmVsT3B0SW5mbyAq cmVsLCBJbmRleE9wdEluZm8gKmluZGV4KQogCUxpc3RDZWxsICAgKmxjOwogCWludAkJCWk7CiAK LQkvKiBJbmRleC1vbmx5IHNjYW5zIG11c3QgYmUgZW5hYmxlZCAqLwotCWlmICghZW5hYmxlX2lu ZGV4b25seXNjYW4pCisJLyogSWYgd2UncmUgbm90IGFsbG93ZWQgdG8gY29uc2lkZXIgaW5kZXgt b25seSBzY2FucywgZ2l2ZSB1cCBub3cgKi8KKwlpZiAoKHJlbC0+cGdzX21hc2sgJiBQR1NfQ09O U0lERVJfSU5ERVhPTkxZKSA9PSAwKQogCQlyZXR1cm4gZmFsc2U7CiAKIAkvKgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnBhdGguYyBiL3NyYy9iYWNrZW5kL29w dGltaXplci9wYXRoL2pvaW5wYXRoLmMKaW5kZXggN2EyNDc0OTNhMzkuLjY0OWVkNWYxNzAwIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucGF0aC5jCisrKyBiL3Ny Yy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5wYXRoLmMKQEAgLTI5LDggKzI5LDkgQEAKICNp bmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy90eXBjYWNoZS5oIgog Ci0vKiBIb29rIGZvciBwbHVnaW5zIHRvIGdldCBjb250cm9sIGluIGFkZF9wYXRoc190b19qb2lu cmVsKCkgKi8KKy8qIEhvb2tzIGZvciBwbHVnaW5zIHRvIGdldCBjb250cm9sIGluIGFkZF9wYXRo c190b19qb2lucmVsKCkgKi8KIHNldF9qb2luX3BhdGhsaXN0X2hvb2tfdHlwZSBzZXRfam9pbl9w YXRobGlzdF9ob29rID0gTlVMTDsKK2pvaW5fcGF0aF9zZXR1cF9ob29rX3R5cGUgam9pbl9wYXRo X3NldHVwX2hvb2sgPSBOVUxMOwogCiAvKgogICogUGF0aHMgcGFyYW1ldGVyaXplZCBieSBhIHBh cmVudCByZWwgY2FuIGJlIGNvbnNpZGVyZWQgdG8gYmUgcGFyYW1ldGVyaXplZApAQCAtMTUxLDYg KzE1MiwzMyBAQCBhZGRfcGF0aHNfdG9fam9pbnJlbChQbGFubmVySW5mbyAqcm9vdCwKIAlleHRy YS5tZXJnZWNsYXVzZV9saXN0ID0gTklMOwogCWV4dHJhLnNqaW5mbyA9IHNqaW5mbzsKIAlleHRy YS5wYXJhbV9zb3VyY2VfcmVscyA9IE5VTEw7CisJZXh0cmEucGdzX21hc2sgPSBqb2lucmVsLT5w Z3NfbWFzazsKKworCS8qCisJICogR2l2ZSBleHRlbnNpb25zIGEgY2hhbmNlIHRvIHRha2UgY29u dHJvbC4gSW4gcGFydGljdWxhciwgYW4gZXh0ZW5zaW9uCisJICogbWlnaHQgd2FudCB0byBtb2Rp ZnkgZXh0cmEucGdzX21hc2suIEl0J3MgcG9zc2libGUgdG8gb3ZlcnJpZGUgcGdzX21hc2sKKwkg KiBvbiBhIHF1ZXJ5LXdpZGUgYmFzaXMgdXNpbmcgam9pbl9zZWFyY2hfaG9vaywgb3IgZm9yIGEg cGFydGljdWxhcgorCSAqIHJlbGF0aW9uIHVzaW5nIGpvaW5yZWxfc2V0dXBfaG9vaywgYnV0IGV4 dGVuc2lvbnMgdGhhdCB3YW50IHRvIHByb3ZpZGUKKwkgKiBkaWZmZXJlbnQgYWR2aWNlIGZvciB0 aGUgc2FtZSBqb2lucmVsIGJhc2VkIG9uIHRoZSBjaG9pY2Ugb2YgaW5uZXJyZWwKKwkgKiBhbmQg b3V0ZXJyZWwgd2lsbCBuZWVkIHRvIHVzZSB0aGlzIGhvb2suCisJICoKKwkgKiBBIHZlcnkgc2lt cGxlIHdheSBmb3IgYW4gZXh0ZW5zaW9uIHRvIHVzZSB0aGlzIGhvb2sgaXMgdG8gc2V0CisJICog ZXh0cmEucGdzX21hc2sgJj0gflBHU19KT0lOX0FOWSwgaWYgaXQgc2ltcGx5IGRvZXNuJ3Qgd2Fu dCBhbnkgb2YgdGhlCisJICogcGF0aHMgZ2VuZXJhdGVkIGJ5IHRoaXMgY2FsbCB0byBhZGRfcGF0 aHNfdG9fam9pbnJlbCgpIHRvIGJlIHNlbGVjdGVkLgorCSAqIEFuIGV4dGVuc2lvbiBjb3VsZCB1 c2UgdGhpcyB0ZWNobmlxdWUgdG8gY29uc3RyYWluIHRoZSBqb2luIG9yZGVyLAorCSAqIHNpbmNl IGl0IGNvdWxkIHRoZXJlYnkgYXJyYW5nZSB0byByZWplY3QgYWxsIHBhdGhzIGZyb20gam9pbiBv cmRlcnMKKwkgKiB0aGF0IGl0IGRvZXMgbm90IGxpa2UuIEFuIGV4dGVuc2lvbiBjYW4gYWxzbyBz ZWxlY3RpdmVseSBjbGVhciBiaXRzCisJICogZnJvbSBleHRyYS5wZ3NfbWFzayB0byBydWxlIG91 dCBzcGVjaWZpYyB0ZWNobmlxdWVzIGZvciBzcGVjaWZpYyBqb2lucywKKwkgKiBvciBjb3VsZCBl dmVuIHNldCBhZGRpdGlvbmFsIGJpdHMgdG8gcmUtYWxsb3cgbWV0aG9kcyBkaXNhYmxlZCBhdCBz b21lCisJICogaGlnaGVyIGxldmVsLgorCSAqCisJICogTkI6IEJlbG93IHRoaXMgcG9pbnQsIHRo aXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhcmVmdWwgdG8gcmVmZXJlbmNlCisJICogZXh0cmEucGdz X21hc2sgcmF0aGVyIHRoYW4gcmVsLT5wZ3NfbWFzayB0byBhdm9pZCBkaXNyZWdhcmRpbmcgYW55 CisJICogY2hhbmdlcyBtYWRlIGJ5IHRoZSBob29rIHdlJ3JlIGFib3V0IHRvIGNhbGwuCisJICov CisJaWYgKGpvaW5fcGF0aF9zZXR1cF9ob29rKQorCQlqb2luX3BhdGhfc2V0dXBfaG9vayhyb290 LCBqb2lucmVsLCBvdXRlcnJlbCwgaW5uZXJyZWwsCisJCQkJCQkJIGpvaW50eXBlLCAmZXh0cmEp OwogCiAJLyoKIAkgKiBTZWUgaWYgdGhlIGlubmVyIHJlbGF0aW9uIGlzIHByb3ZhYmx5IHVuaXF1 ZSBmb3IgdGhpcyBvdXRlciByZWwuCkBAIC0yMTAsMTAgKzIzOCwxMCBAQCBhZGRfcGF0aHNfdG9f am9pbnJlbChQbGFubmVySW5mbyAqcm9vdCwKIAkvKgogCSAqIEZpbmQgcG90ZW50aWFsIG1lcmdl am9pbiBjbGF1c2VzLiAgV2UgY2FuIHNraXAgdGhpcyBpZiB3ZSBhcmUgbm90CiAJICogaW50ZXJl c3RlZCBpbiBkb2luZyBhIG1lcmdlam9pbi4gIEhvd2V2ZXIsIG1lcmdlam9pbiBtYXkgYmUgb3Vy IG9ubHkKLQkgKiB3YXkgb2YgaW1wbGVtZW50aW5nIGEgZnVsbCBvdXRlciBqb2luLCBzbyBvdmVy cmlkZSBlbmFibGVfbWVyZ2Vqb2luIGlmCi0JICogaXQncyBhIGZ1bGwgam9pbi4KKwkgKiB3YXkg b2YgaW1wbGVtZW50aW5nIGEgZnVsbCBvdXRlciBqb2luLCBzbyBpbiB0aGF0IGNhc2Ugd2UgZG9u J3QgY2FyZQorCSAqIHdoZXRoZXIgbWVyZ2Vqb2lucyBhcmUgZGlzYWJsZWQuCiAJICovCi0JaWYg KGVuYWJsZV9tZXJnZWpvaW4gfHwgam9pbnR5cGUgPT0gSk9JTl9GVUxMKQorCWlmICgoZXh0cmEu cGdzX21hc2sgJiBQR1NfTUVSR0VKT0lOX0FOWSkgIT0gMCB8fCBqb2ludHlwZSA9PSBKT0lOX0ZV TEwpCiAJCWV4dHJhLm1lcmdlY2xhdXNlX2xpc3QgPSBzZWxlY3RfbWVyZ2Vqb2luX2NsYXVzZXMo cm9vdCwKIAkJCQkJCQkJCQkJCQkJICBqb2lucmVsLAogCQkJCQkJCQkJCQkJCQkgIG91dGVycmVs LApAQCAtMzIxLDEwICszNDksMTAgQEAgYWRkX3BhdGhzX3RvX2pvaW5yZWwoUGxhbm5lckluZm8g KnJvb3QsCiAKIAkvKgogCSAqIDQuIENvbnNpZGVyIHBhdGhzIHdoZXJlIGJvdGggb3V0ZXIgYW5k IGlubmVyIHJlbGF0aW9ucyBtdXN0IGJlIGhhc2hlZAotCSAqIGJlZm9yZSBiZWluZyBqb2luZWQu ICBBcyBhYm92ZSwgZGlzcmVnYXJkIGVuYWJsZV9oYXNoam9pbiBmb3IgZnVsbAotCSAqIGpvaW5z LCBiZWNhdXNlIHRoZXJlIG1heSBiZSBubyBvdGhlciBhbHRlcm5hdGl2ZS4KKwkgKiBiZWZvcmUg YmVpbmcgam9pbmVkLiAgQXMgYWJvdmUsIHdoZW4gaXQncyBhIGZ1bGwgam9pbiwgd2UgbXVzdCB0 cnkgdGhpcworCSAqIGV2ZW4gd2hlbiB0aGUgcGF0aCB0eXBlIGlzIGRpc2FibGVkLCBiZWNhdXNl IGl0IG1heSBiZSBvdXIgb25seSBvcHRpb24uCiAJICovCi0JaWYgKGVuYWJsZV9oYXNoam9pbiB8 fCBqb2ludHlwZSA9PSBKT0lOX0ZVTEwpCisJaWYgKChleHRyYS5wZ3NfbWFzayAmIFBHU19IQVNI Sk9JTikgIT0gMCB8fCBqb2ludHlwZSA9PSBKT0lOX0ZVTEwpCiAJCWhhc2hfaW5uZXJfYW5kX291 dGVyKHJvb3QsIGpvaW5yZWwsIG91dGVycmVsLCBpbm5lcnJlbCwKIAkJCQkJCQkgam9pbnR5cGUs ICZleHRyYSk7CiAKQEAgLTMzMyw3ICszNjEsNyBAQCBhZGRfcGF0aHNfdG9fam9pbnJlbChQbGFu bmVySW5mbyAqcm9vdCwKIAkgKiB0byB0aGUgc2FtZSBzZXJ2ZXIgYW5kIGFzc2lnbmVkIHRvIHRo ZSBzYW1lIHVzZXIgdG8gY2hlY2sgYWNjZXNzCiAJICogcGVybWlzc2lvbnMgYXMsIGdpdmUgdGhl IEZEVyBhIGNoYW5jZSB0byBwdXNoIGRvd24gam9pbnMuCiAJICovCi0JaWYgKGpvaW5yZWwtPmZk d3JvdXRpbmUgJiYKKwlpZiAoKGV4dHJhLnBnc19tYXNrICYgUEdTX0ZPUkVJR05KT0lOKSAhPSAw ICYmIGpvaW5yZWwtPmZkd3JvdXRpbmUgJiYKIAkJam9pbnJlbC0+ZmR3cm91dGluZS0+R2V0Rm9y ZWlnbkpvaW5QYXRocykKIAkJam9pbnJlbC0+ZmR3cm91dGluZS0+R2V0Rm9yZWlnbkpvaW5QYXRo cyhyb290LCBqb2lucmVsLAogCQkJCQkJCQkJCQkJIG91dGVycmVsLCBpbm5lcnJlbCwKQEAgLTM0 Miw4ICszNzAsMTMgQEAgYWRkX3BhdGhzX3RvX2pvaW5yZWwoUGxhbm5lckluZm8gKnJvb3QsCiAJ LyoKIAkgKiA2LiBGaW5hbGx5LCBnaXZlIGV4dGVuc2lvbnMgYSBjaGFuY2UgdG8gbWFuaXB1bGF0 ZSB0aGUgcGF0aCBsaXN0LiAgVGhleQogCSAqIGNvdWxkIGFkZCBuZXcgcGF0aHMgKHN1Y2ggYXMg Q3VzdG9tUGF0aHMpIGJ5IGNhbGxpbmcgYWRkX3BhdGgoKSwgb3IKLQkgKiBhZGRfcGFydGlhbF9w YXRoKCkgaWYgcGFyYWxsZWwgYXdhcmUuICBUaGV5IGNvdWxkIGFsc28gZGVsZXRlIG9yIG1vZGlm eQotCSAqIHBhdGhzIGFkZGVkIGJ5IHRoZSBjb3JlIGNvZGUuCisJICogYWRkX3BhcnRpYWxfcGF0 aCgpIGlmIHBhcmFsbGVsIGF3YXJlLgorCSAqCisJICogSW4gdGhlb3J5LCBleHRlbnNpb25zIGNv dWxkIGFsc28gdXNlIHRoaXMgaG9vayB0byBkZWxldGUgb3IgbW9kaWZ5CisJICogcGF0aHMgYWRk ZWQgYnkgdGhlIGNvcmUgY29kZSwgYnV0IGluIHByYWN0aWNlIHRoaXMgaXMgZGlmZmljdWx0IHRv IG1ha2UKKwkgKiB3b3JrLCBzaW5jZSBpdCdzIHRvbyBsYXRlIHRvIGdldCBiYWNrIGFueSBwYXRo cyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuCisJICogZGlzY2FyZGVkIGJ5IGFkZF9wYXRoKCkgb3Ig YWRkX3BhcnRpYWxfcGF0aCgpLiBJZiB5b3UncmUgdHJ5aW5nIHRvCisJICogc3VwcHJlc3MgcGF0 aHMsIGNvbnNpZGVyIHVzaW5nIGpvaW5fcGF0aF9zZXR1cF9ob29rIGluc3RlYWQuCiAJICovCiAJ aWYgKHNldF9qb2luX3BhdGhsaXN0X2hvb2spCiAJCXNldF9qb2luX3BhdGhsaXN0X2hvb2socm9v dCwgam9pbnJlbCwgb3V0ZXJyZWwsIGlubmVycmVsLApAQCAtNjkwLDcgKzcyMyw3IEBAIGdldF9t ZW1vaXplX3BhdGgoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmlubmVycmVsLAogCUxp c3QJICAgKnBoX2xhdGVyYWxfdmFyczsKIAogCS8qIE9idmlvdXNseSBub3QgaWYgaXQncyBkaXNh YmxlZCAqLwotCWlmICghZW5hYmxlX21lbW9pemUpCisJaWYgKChleHRyYS0+cGdzX21hc2sgJiBQ R1NfTkVTVExPT1BfTUVNT0laRSkgPT0gMCkKIAkJcmV0dXJuIE5VTEw7CiAKIAkvKgpAQCAtODQ1 LDYgKzg3OCw3IEBAIHRyeV9uZXN0bG9vcF9wYXRoKFBsYW5uZXJJbmZvICpyb290LAogCQkJCSAg UGF0aCAqaW5uZXJfcGF0aCwKIAkJCQkgIExpc3QgKnBhdGhrZXlzLAogCQkJCSAgSm9pblR5cGUg am9pbnR5cGUsCisJCQkJICB1aW50NjQgbmVzdGxvb3Bfc3VidHlwZSwKIAkJCQkgIEpvaW5QYXRo RXh0cmFEYXRhICpleHRyYSkKIHsKIAlSZWxpZHMJCXJlcXVpcmVkX291dGVyOwpAQCAtOTI3LDYg Kzk2MSw3IEBAIHRyeV9uZXN0bG9vcF9wYXRoKFBsYW5uZXJJbmZvICpyb290LAogCSAqIG1ldGhv ZG9sb2d5IHdvcnRod2hpbGUuCiAJICovCiAJaW5pdGlhbF9jb3N0X25lc3Rsb29wKHJvb3QsICZ3 b3Jrc3BhY2UsIGpvaW50eXBlLAorCQkJCQkJICBuZXN0bG9vcF9zdWJ0eXBlIHwgUEdTX0NPTlNJ REVSX05PTlBBUlRJQUwsCiAJCQkJCQkgIG91dGVyX3BhdGgsIGlubmVyX3BhdGgsIGV4dHJhKTsK IAogCWlmIChhZGRfcGF0aF9wcmVjaGVjayhqb2lucmVsLCB3b3Jrc3BhY2UuZGlzYWJsZWRfbm9k ZXMsCkBAIC05NjQsNiArOTk5LDcgQEAgdHJ5X3BhcnRpYWxfbmVzdGxvb3BfcGF0aChQbGFubmVy SW5mbyAqcm9vdCwKIAkJCQkJCSAgUGF0aCAqaW5uZXJfcGF0aCwKIAkJCQkJCSAgTGlzdCAqcGF0 aGtleXMsCiAJCQkJCQkgIEpvaW5UeXBlIGpvaW50eXBlLAorCQkJCQkJICB1aW50NjQgbmVzdGxv b3Bfc3VidHlwZSwKIAkJCQkJCSAgSm9pblBhdGhFeHRyYURhdGEgKmV4dHJhKQogewogCUpvaW5D b3N0V29ya3NwYWNlIHdvcmtzcGFjZTsKQEAgLTEwMTEsNyArMTA0Nyw3IEBAIHRyeV9wYXJ0aWFs X25lc3Rsb29wX3BhdGgoUGxhbm5lckluZm8gKnJvb3QsCiAJICogQmVmb3JlIGNyZWF0aW5nIGEg cGF0aCwgZ2V0IGEgcXVpY2sgbG93ZXIgYm91bmQgb24gd2hhdCBpdCBpcyBsaWtlbHkgdG8KIAkg KiBjb3N0LiAgQmFpbCBvdXQgcmlnaHQgYXdheSBpZiBpdCBsb29rcyB0ZXJyaWJsZS4KIAkgKi8K LQlpbml0aWFsX2Nvc3RfbmVzdGxvb3Aocm9vdCwgJndvcmtzcGFjZSwgam9pbnR5cGUsCisJaW5p dGlhbF9jb3N0X25lc3Rsb29wKHJvb3QsICZ3b3Jrc3BhY2UsIGpvaW50eXBlLCBuZXN0bG9vcF9z dWJ0eXBlLAogCQkJCQkJICBvdXRlcl9wYXRoLCBpbm5lcl9wYXRoLCBleHRyYSk7CiAJaWYgKCFh ZGRfcGFydGlhbF9wYXRoX3ByZWNoZWNrKGpvaW5yZWwsIHdvcmtzcGFjZS5kaXNhYmxlZF9ub2Rl cywKIAkJCQkJCQkJICAgd29ya3NwYWNlLnRvdGFsX2Nvc3QsIHBhdGhrZXlzKSkKQEAgLTE4NTks MTQgKzE4OTUsMTQgQEAgbWF0Y2hfdW5zb3J0ZWRfb3V0ZXIoUGxhbm5lckluZm8gKnJvb3QsCiAJ aWYgKG5lc3Rqb2luT0spCiAJewogCQkvKgotCQkgKiBDb25zaWRlciBtYXRlcmlhbGl6aW5nIHRo ZSBjaGVhcGVzdCBpbm5lciBwYXRoLCB1bmxlc3MKLQkJICogZW5hYmxlX21hdGVyaWFsIGlzIG9m ZiBvciB0aGUgcGF0aCBpbiBxdWVzdGlvbiBtYXRlcmlhbGl6ZXMgaXRzCi0JCSAqIG91dHB1dCBh bnl3YXkuCisJCSAqIENvbnNpZGVyIG1hdGVyaWFsaXppbmcgdGhlIGNoZWFwZXN0IGlubmVyIHBh dGgsIHVubGVzcyB0aGF0IGlzCisJCSAqIGRpc2FibGVkIG9yIHRoZSBwYXRoIGluIHF1ZXN0aW9u IG1hdGVyaWFsaXplcyBpdHMgb3V0cHV0IGFueXdheS4KIAkJICovCi0JCWlmIChlbmFibGVfbWF0 ZXJpYWwgJiYgaW5uZXJfY2hlYXBlc3RfdG90YWwgIT0gTlVMTCAmJgorCQlpZiAoKGV4dHJhLT5w Z3NfbWFzayAmIFBHU19ORVNUTE9PUF9NQVRFUklBTElaRSkgIT0gMCAmJgorCQkJaW5uZXJfY2hl YXBlc3RfdG90YWwgIT0gTlVMTCAmJgogCQkJIUV4ZWNNYXRlcmlhbGl6ZXNPdXRwdXQoaW5uZXJf Y2hlYXBlc3RfdG90YWwtPnBhdGh0eXBlKSkKIAkJCW1hdHBhdGggPSAoUGF0aCAqKQotCQkJCWNy ZWF0ZV9tYXRlcmlhbF9wYXRoKGlubmVycmVsLCBpbm5lcl9jaGVhcGVzdF90b3RhbCk7CisJCQkJ Y3JlYXRlX21hdGVyaWFsX3BhdGgoaW5uZXJyZWwsIGlubmVyX2NoZWFwZXN0X3RvdGFsLCB0cnVl KTsKIAl9CiAKIAlmb3JlYWNoKGxjMSwgb3V0ZXJyZWwtPnBhdGhsaXN0KQpAQCAtMTkwOSw2ICsx OTQ1LDcgQEAgbWF0Y2hfdW5zb3J0ZWRfb3V0ZXIoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJ CSAgaW5uZXJwYXRoLAogCQkJCQkJCQkgIG1lcmdlX3BhdGhrZXlzLAogCQkJCQkJCQkgIGpvaW50 eXBlLAorCQkJCQkJCQkgIFBHU19ORVNUTE9PUF9QTEFJTiwKIAkJCQkJCQkJICBleHRyYSk7CiAK IAkJCQkvKgpAQCAtMTkyNSw2ICsxOTYyLDcgQEAgbWF0Y2hfdW5zb3J0ZWRfb3V0ZXIoUGxhbm5l ckluZm8gKnJvb3QsCiAJCQkJCQkJCQkgIG1wYXRoLAogCQkJCQkJCQkJICBtZXJnZV9wYXRoa2V5 cywKIAkJCQkJCQkJCSAgam9pbnR5cGUsCisJCQkJCQkJCQkgIFBHU19ORVNUTE9PUF9NRU1PSVpF LAogCQkJCQkJCQkJICBleHRyYSk7CiAJCQl9CiAKQEAgLTE5MzYsNiArMTk3NCw3IEBAIG1hdGNo X3Vuc29ydGVkX291dGVyKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkgIG1hdHBhdGgsCiAJ CQkJCQkJCSAgbWVyZ2VfcGF0aGtleXMsCiAJCQkJCQkJCSAgam9pbnR5cGUsCisJCQkJCQkJCSAg UEdTX05FU1RMT09QX01BVEVSSUFMSVpFLAogCQkJCQkJCQkgIGV4dHJhKTsKIAkJfQogCkBAIC0y MDUyLDE2ICsyMDkxLDE3IEBAIGNvbnNpZGVyX3BhcmFsbGVsX25lc3Rsb29wKFBsYW5uZXJJbmZv ICpyb290LAogCiAJLyoKIAkgKiBDb25zaWRlciBtYXRlcmlhbGl6aW5nIHRoZSBjaGVhcGVzdCBp bm5lciBwYXRoLCB1bmxlc3M6IDEpCi0JICogZW5hYmxlX21hdGVyaWFsIGlzIG9mZiwgMikgdGhl IGNoZWFwZXN0IGlubmVyIHBhdGggaXMgbm90CisJICogbWF0ZXJpYWxpemF0aW9uIGlzIGRpc2Fi bGVkIGhlcmUsIDIpIHRoZSBjaGVhcGVzdCBpbm5lciBwYXRoIGlzIG5vdAogCSAqIHBhcmFsbGVs LXNhZmUsIDMpIHRoZSBjaGVhcGVzdCBpbm5lciBwYXRoIGlzIHBhcmFtZXRlcml6ZWQgYnkgdGhl IG91dGVyCiAJICogcmVsLCBvciA0KSB0aGUgY2hlYXBlc3QgaW5uZXIgcGF0aCBtYXRlcmlhbGl6 ZXMgaXRzIG91dHB1dCBhbnl3YXkuCiAJICovCi0JaWYgKGVuYWJsZV9tYXRlcmlhbCAmJiBpbm5l cl9jaGVhcGVzdF90b3RhbC0+cGFyYWxsZWxfc2FmZSAmJgorCWlmICgoZXh0cmEtPnBnc19tYXNr ICYgUEdTX05FU1RMT09QX01BVEVSSUFMSVpFKSAhPSAwICYmCisJCWlubmVyX2NoZWFwZXN0X3Rv dGFsLT5wYXJhbGxlbF9zYWZlICYmCiAJCSFQQVRIX1BBUkFNX0JZX1JFTChpbm5lcl9jaGVhcGVz dF90b3RhbCwgb3V0ZXJyZWwpICYmCiAJCSFFeGVjTWF0ZXJpYWxpemVzT3V0cHV0KGlubmVyX2No ZWFwZXN0X3RvdGFsLT5wYXRodHlwZSkpCiAJewogCQltYXRwYXRoID0gKFBhdGggKikKLQkJCWNy ZWF0ZV9tYXRlcmlhbF9wYXRoKGlubmVycmVsLCBpbm5lcl9jaGVhcGVzdF90b3RhbCk7CisJCQlj cmVhdGVfbWF0ZXJpYWxfcGF0aChpbm5lcnJlbCwgaW5uZXJfY2hlYXBlc3RfdG90YWwsIHRydWUp OwogCQlBc3NlcnQobWF0cGF0aC0+cGFyYWxsZWxfc2FmZSk7CiAJfQogCkBAIC0yMDkxLDcgKzIx MzEsOCBAQCBjb25zaWRlcl9wYXJhbGxlbF9uZXN0bG9vcChQbGFubmVySW5mbyAqcm9vdCwKIAkJ CQljb250aW51ZTsKIAogCQkJdHJ5X3BhcnRpYWxfbmVzdGxvb3BfcGF0aChyb290LCBqb2lucmVs LCBvdXRlcnBhdGgsIGlubmVycGF0aCwKLQkJCQkJCQkJCSAgcGF0aGtleXMsIGpvaW50eXBlLCBl eHRyYSk7CisJCQkJCQkJCQkgIHBhdGhrZXlzLCBqb2ludHlwZSwKKwkJCQkJCQkJCSAgUEdTX05F U1RMT09QX1BMQUlOLCBleHRyYSk7CiAKIAkJCS8qCiAJCQkgKiBUcnkgZ2VuZXJhdGluZyBhIG1l bW9pemUgcGF0aCBhbmQgc2VlIGlmIHRoYXQgbWFrZXMgdGhlIG5lc3RlZApAQCAtMjEwMiwxMyAr MjE0MywxNSBAQCBjb25zaWRlcl9wYXJhbGxlbF9uZXN0bG9vcChQbGFubmVySW5mbyAqcm9vdCwK IAkJCQkJCQkJCSBleHRyYSk7CiAJCQlpZiAobXBhdGggIT0gTlVMTCkKIAkJCQl0cnlfcGFydGlh bF9uZXN0bG9vcF9wYXRoKHJvb3QsIGpvaW5yZWwsIG91dGVycGF0aCwgbXBhdGgsCi0JCQkJCQkJ CQkJICBwYXRoa2V5cywgam9pbnR5cGUsIGV4dHJhKTsKKwkJCQkJCQkJCQkgIHBhdGhrZXlzLCBq b2ludHlwZSwKKwkJCQkJCQkJCQkgIFBHU19ORVNUTE9PUF9NRU1PSVpFLCBleHRyYSk7CiAJCX0K IAogCQkvKiBBbHNvIGNvbnNpZGVyIG1hdGVyaWFsaXplZCBmb3JtIG9mIHRoZSBjaGVhcGVzdCBp bm5lciBwYXRoICovCiAJCWlmIChtYXRwYXRoICE9IE5VTEwpCiAJCQl0cnlfcGFydGlhbF9uZXN0 bG9vcF9wYXRoKHJvb3QsIGpvaW5yZWwsIG91dGVycGF0aCwgbWF0cGF0aCwKLQkJCQkJCQkJCSAg cGF0aGtleXMsIGpvaW50eXBlLCBleHRyYSk7CisJCQkJCQkJCQkgIHBhdGhrZXlzLCBqb2ludHlw ZSwKKwkJCQkJCQkJCSAgUEdTX05FU1RMT09QX01BVEVSSUFMSVpFLCBleHRyYSk7CiAJfQogfQog CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC90aWRwYXRoLmMgYi9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGF0aC90aWRwYXRoLmMKaW5kZXggNTQ3M2Q5NzUxMmEuLjE4YTM2 NTQ3MjBiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC90aWRwYXRoLmMK KysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvdGlkcGF0aC5jCkBAIC00OTksMTggKzQ5 OSwxOSBAQCBjcmVhdGVfdGlkc2Nhbl9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5m byAqcmVsKQogCUxpc3QJICAgKnRpZHF1YWxzOwogCUxpc3QJICAgKnRpZHJhbmdlcXVhbHM7CiAJ Ym9vbAkJaXNDdXJyZW50T2Y7CisJYm9vbAkJZW5hYmxlZCA9IChyZWwtPnBnc19tYXNrICYgUEdT X1RJRFNDQU4pICE9IDA7CiAKIAkvKgogCSAqIElmIGFueSBzdWl0YWJsZSBxdWFscyBleGlzdCBp biB0aGUgcmVsJ3MgYmFzZXJlc3RyaWN0IGxpc3QsIGdlbmVyYXRlIGEKIAkgKiBwbGFpbiAodW5w YXJhbWV0ZXJpemVkKSBUaWRQYXRoIHdpdGggdGhlbS4KIAkgKgotCSAqIFdlIHNraXAgdGhpcyB3 aGVuIGVuYWJsZV90aWRzY2FuID0gZmFsc2UsIGV4Y2VwdCB3aGVuIHRoZSBxdWFsIGlzCisJICog V2Ugc2tpcCB0aGlzIHdoZW4gVElEIHNjYW5zIGFyZSBkaXNhYmxlZCwgZXhjZXB0IHdoZW4gdGhl IHF1YWwgaXMKIAkgKiBDdXJyZW50T2ZFeHByLiBJbiB0aGF0IGNhc2UsIGEgVElEIHNjYW4gaXMg dGhlIG9ubHkgY29ycmVjdCBwYXRoLgogCSAqLwogCXRpZHF1YWxzID0gVGlkUXVhbEZyb21SZXN0 cmljdEluZm9MaXN0KHJvb3QsIHJlbC0+YmFzZXJlc3RyaWN0aW5mbywgcmVsLAogCQkJCQkJCQkJ CSAgICZpc0N1cnJlbnRPZik7CiAKLQlpZiAodGlkcXVhbHMgIT0gTklMICYmIChlbmFibGVfdGlk c2NhbiB8fCBpc0N1cnJlbnRPZikpCisJaWYgKHRpZHF1YWxzICE9IE5JTCAmJiAoZW5hYmxlZCB8 fCBpc0N1cnJlbnRPZikpCiAJewogCQkvKgogCQkgKiBUaGlzIHBhdGggdXNlcyBubyBqb2luIGNs YXVzZXMsIGJ1dCBpdCBjb3VsZCBzdGlsbCBoYXZlIHJlcXVpcmVkCkBAIC01MzIsNyArNTMzLDcg QEAgY3JlYXRlX3RpZHNjYW5fcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJl bCkKIAl9CiAKIAkvKiBTa2lwIHRoZSByZXN0IGlmIFRJRCBzY2FucyBhcmUgZGlzYWJsZWQuICov Ci0JaWYgKCFlbmFibGVfdGlkc2NhbikKKwlpZiAoIWVuYWJsZWQpCiAJCXJldHVybiBmYWxzZTsK IAogCS8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFu LmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMKaW5kZXggNGFjMWZi MWU4ZjEuLjAwZGY3ZGRhODNkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxh bi9jcmVhdGVwbGFuLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxh bi5jCkBAIC02NTA5LDcgKzY1MDksNyBAQCBQbGFuICoKIG1hdGVyaWFsaXplX2ZpbmlzaGVkX3Bs YW4oUGxhbiAqc3VicGxhbikKIHsKIAlQbGFuCSAgICptYXRwbGFuOwotCVBhdGgJCW1hdHBhdGg7 CQkvKiBkdW1teSBmb3IgcmVzdWx0IG9mIGNvc3RfbWF0ZXJpYWwgKi8KKwlQYXRoCQltYXRwYXRo OwkJLyogZHVtbXkgZm9yIGNvc3RfbWF0ZXJpYWwgKi8KIAlDb3N0CQlpbml0cGxhbl9jb3N0Owog CWJvb2wJCXVuc2FmZV9pbml0cGxhbnM7CiAKQEAgLTY1MzEsNyArNjUzMSw5IEBAIG1hdGVyaWFs aXplX2ZpbmlzaGVkX3BsYW4oUGxhbiAqc3VicGxhbikKIAlzdWJwbGFuLT50b3RhbF9jb3N0IC09 IGluaXRwbGFuX2Nvc3Q7CiAKIAkvKiBTZXQgY29zdCBkYXRhICovCisJbWF0cGF0aC5wYXJlbnQg PSBOVUxMOwogCWNvc3RfbWF0ZXJpYWwoJm1hdHBhdGgsCisJCQkJICBlbmFibGVfbWF0ZXJpYWws CiAJCQkJICBzdWJwbGFuLT5kaXNhYmxlZF9ub2RlcywKIAkJCQkgIHN1YnBsYW4tPnN0YXJ0dXBf Y29zdCwKIAkJCQkgIHN1YnBsYW4tPnRvdGFsX2Nvc3QsCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9w bGFubmVyLmMKaW5kZXggNWI3OGJkNGZmMzUuLmQ0YmY4YTk1NWQxIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BsYW4vcGxhbm5lci5jCkBAIC00NjIsNiArNDYyLDUzIEBAIHN0YW5kYXJkX3BsYW5uZXIo UXVlcnkgKnBhcnNlLCBjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcsIGludCBjdXJzb3JPcHRpb25z LAogCQl0dXBsZV9mcmFjdGlvbiA9IDAuMDsKIAl9CiAKKwkvKgorCSAqIENvbXB1dGUgdGhlIGlu aXRpYWwgcGF0aCBnZW5lcmF0aW9uIHN0cmF0ZWd5IG1hc2suCisJICoKKwkgKiBTb21lIHN0cmF0 ZWdpZXMsIHN1Y2ggYXMgUEdTX0ZPUkVJR05KT0lOLCBoYXZlIG5vIGNvcnJlc3BvbmRpbmcgZW5h YmxlXyoKKwkgKiBHVUMsIGFuZCBzbyB0aGUgY29ycmVzcG9uZGluZyBiaXRzIGFyZSBhbHdheXMg c2V0IGluIHRoZSBkZWZhdWx0CisJICogc3RyYXRlZ3kgbWFzay4KKwkgKgorCSAqIEl0IG1heSBz ZWVtIHN1cnByaXNpbmcgdGhhdCBlbmFibGVfaW5kZXhzY2FuIHNldHMgYm90aCBQR1NfSU5ERVhT Q0FOCisJICogYW5kIFBHU19JTkRFWE9OTFlTQ0FOLiBIb3dldmVyLCB0aGUgaGlzdG9yaWNhbCBi ZWhhdmlvciBvZiB0aGlzIEdVQworCSAqIGNvcnJlc3BvbmRzIHRvIHRoaXMgZXhhY3RseTogZW5h YmxlX2luZGV4c2Nhbj1vZmYgZGlzYWJsZXMgYm90aAorCSAqIGluZGV4LXNjYW4gYW5kIGluZGV4 LW9ubHkgc2NhbiBwYXRocywgd2hlcmVhcyBlbmFibGVfaW5kZXhvbmx5c2Nhbj1vZmYKKwkgKiBj b252ZXJ0cyB0aGUgaW5kZXgtb25seSBzY2FuIHBhdGhzIHRoYXQgd2Ugd291bGQgaGF2ZSBjb25z aWRlcmVkIGludG8KKwkgKiBpbmRleCBzY2FuIHBhdGhzLgorCSAqLworCWdsb2ItPmRlZmF1bHRf cGdzX21hc2sgPSBQR1NfQVBQRU5EIHwgUEdTX01FUkdFX0FQUEVORCB8IFBHU19GT1JFSUdOSk9J TiB8CisJCVBHU19HQVRIRVIgfCBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKKwlpZiAoZW5hYmxl X3RpZHNjYW4pCisJCWdsb2ItPmRlZmF1bHRfcGdzX21hc2sgfD0gUEdTX1RJRFNDQU47CisJaWYg KGVuYWJsZV9zZXFzY2FuKQorCQlnbG9iLT5kZWZhdWx0X3Bnc19tYXNrIHw9IFBHU19TRVFTQ0FO OworCWlmIChlbmFibGVfaW5kZXhzY2FuKQorCQlnbG9iLT5kZWZhdWx0X3Bnc19tYXNrIHw9IFBH U19JTkRFWFNDQU4gfCBQR1NfSU5ERVhPTkxZU0NBTjsKKwlpZiAoZW5hYmxlX2luZGV4b25seXNj YW4pCisJCWdsb2ItPmRlZmF1bHRfcGdzX21hc2sgfD0gUEdTX0NPTlNJREVSX0lOREVYT05MWTsK KwlpZiAoZW5hYmxlX2JpdG1hcHNjYW4pCisJCWdsb2ItPmRlZmF1bHRfcGdzX21hc2sgfD0gUEdT X0JJVE1BUFNDQU47CisJaWYgKGVuYWJsZV9tZXJnZWpvaW4pCisJeworCQlnbG9iLT5kZWZhdWx0 X3Bnc19tYXNrIHw9IFBHU19NRVJHRUpPSU5fUExBSU47CisJCWlmIChlbmFibGVfbWF0ZXJpYWwp CisJCQlnbG9iLT5kZWZhdWx0X3Bnc19tYXNrIHw9IFBHU19NRVJHRUpPSU5fTUFURVJJQUxJWkU7 CisJfQorCWlmIChlbmFibGVfbmVzdGxvb3ApCisJeworCQlnbG9iLT5kZWZhdWx0X3Bnc19tYXNr IHw9IFBHU19ORVNUTE9PUF9QTEFJTjsKKwkJaWYgKGVuYWJsZV9tYXRlcmlhbCkKKwkJCWdsb2It PmRlZmF1bHRfcGdzX21hc2sgfD0gUEdTX05FU1RMT09QX01BVEVSSUFMSVpFOworCQlpZiAoZW5h YmxlX21lbW9pemUpCisJCQlnbG9iLT5kZWZhdWx0X3Bnc19tYXNrIHw9IFBHU19ORVNUTE9PUF9N RU1PSVpFOworCX0KKwlpZiAoZW5hYmxlX2hhc2hqb2luKQorCQlnbG9iLT5kZWZhdWx0X3Bnc19t YXNrIHw9IFBHU19IQVNISk9JTjsKKwlpZiAoZW5hYmxlX2dhdGhlcm1lcmdlKQorCQlnbG9iLT5k ZWZhdWx0X3Bnc19tYXNrIHw9IFBHU19HQVRIRVJfTUVSR0U7CisJaWYgKGVuYWJsZV9wYXJ0aXRp b253aXNlX2pvaW4pCisJCWdsb2ItPmRlZmF1bHRfcGdzX21hc2sgfD0gUEdTX0NPTlNJREVSX1BB UlRJVElPTldJU0U7CisKIAkvKiBBbGxvdyBwbHVnaW5zIHRvIHRha2UgY29udHJvbCBhZnRlciB3 ZSd2ZSBpbml0aWFsaXplZCAiZ2xvYiIgKi8KIAlpZiAocGxhbm5lcl9zZXR1cF9ob29rKQogCQko KnBsYW5uZXJfc2V0dXBfaG9vaykgKGdsb2IsIHBhcnNlLCBxdWVyeV9zdHJpbmcsICZ0dXBsZV9m cmFjdGlvbiwgZXMpOwpAQCAtMzk1NSw2ICs0MDAyLDkgQEAgbWFrZV9ncm91cGluZ19yZWwoUGxh bm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmlucHV0X3JlbCwKIAkJaXNfcGFyYWxsZWxfc2Fm ZShyb290LCBoYXZpbmdRdWFsKSkKIAkJZ3JvdXBlZF9yZWwtPmNvbnNpZGVyX3BhcmFsbGVsID0g dHJ1ZTsKIAorCS8qIEFzc3VtZSB0aGF0IHRoZSBzYW1lIHBhdGggZ2VuZXJhdGlvbiBzdHJhdGVn aWVzIGFyZSBhbGxvd2VkICovCisJZ3JvdXBlZF9yZWwtPnBnc19tYXNrID0gaW5wdXRfcmVsLT5w Z3NfbWFzazsKKwogCS8qCiAJICogSWYgdGhlIGlucHV0IHJlbCBiZWxvbmdzIHRvIGEgc2luZ2xl IEZEVywgc28gZG9lcyB0aGUgZ3JvdXBlZCByZWwuCiAJICovCkBAIC01MzQ3LDYgKzUzOTcsOSBA QCBjcmVhdGVfb3JkZXJlZF9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwKIAlpZiAoaW5wdXRfcmVs LT5jb25zaWRlcl9wYXJhbGxlbCAmJiB0YXJnZXRfcGFyYWxsZWxfc2FmZSkKIAkJb3JkZXJlZF9y ZWwtPmNvbnNpZGVyX3BhcmFsbGVsID0gdHJ1ZTsKIAorCS8qIEFzc3VtZSB0aGF0IHRoZSBzYW1l IHBhdGggZ2VuZXJhdGlvbiBzdHJhdGVnaWVzIGFyZSBhbGxvd2VkLiAqLworCW9yZGVyZWRfcmVs LT5wZ3NfbWFzayA9IGlucHV0X3JlbC0+cGdzX21hc2s7CisKIAkvKgogCSAqIElmIHRoZSBpbnB1 dCByZWwgYmVsb25ncyB0byBhIHNpbmdsZSBGRFcsIHNvIGRvZXMgdGhlIG9yZGVyZWRfcmVsLgog CSAqLwpAQCAtNzQyNyw2ICs3NDgwLDcgQEAgY3JlYXRlX3BhcnRpYWxfZ3JvdXBpbmdfcGF0aHMo UGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCQkJCWdyb3VwZWRfcmVsLT5yZWxpZHMpOwogCXBh cnRpYWxseV9ncm91cGVkX3JlbC0+Y29uc2lkZXJfcGFyYWxsZWwgPQogCQlncm91cGVkX3JlbC0+ Y29uc2lkZXJfcGFyYWxsZWw7CisJcGFydGlhbGx5X2dyb3VwZWRfcmVsLT5wZ3NfbWFzayA9IGdy b3VwZWRfcmVsLT5wZ3NfbWFzazsKIAlwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwtPnJlbG9wdGtpbmQg PSBncm91cGVkX3JlbC0+cmVsb3B0a2luZDsKIAlwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwtPnNlcnZl cmlkID0gZ3JvdXBlZF9yZWwtPnNlcnZlcmlkOwogCXBhcnRpYWxseV9ncm91cGVkX3JlbC0+dXNl cmlkID0gZ3JvdXBlZF9yZWwtPnVzZXJpZDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGlt aXplci91dGlsL3BhdGhub2RlLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9k ZS5jCmluZGV4IGRhMzA2Y2QzOWViLi5kY2E1NDU5YWVhYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv dXRpbC9wYXRobm9kZS5jCkBAIC0xNjU4LDcgKzE2NTgsNyBAQCBjcmVhdGVfZ3JvdXBfcmVzdWx0 X3BhdGgoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKICAqCSAgcGF0aG5vZGUu CiAgKi8KIE1hdGVyaWFsUGF0aCAqCi1jcmVhdGVfbWF0ZXJpYWxfcGF0aChSZWxPcHRJbmZvICpy ZWwsIFBhdGggKnN1YnBhdGgpCitjcmVhdGVfbWF0ZXJpYWxfcGF0aChSZWxPcHRJbmZvICpyZWws IFBhdGggKnN1YnBhdGgsIGJvb2wgZW5hYmxlZCkKIHsKIAlNYXRlcmlhbFBhdGggKnBhdGhub2Rl ID0gbWFrZU5vZGUoTWF0ZXJpYWxQYXRoKTsKIApAQCAtMTY3Nyw2ICsxNjc3LDcgQEAgY3JlYXRl X21hdGVyaWFsX3BhdGgoUmVsT3B0SW5mbyAqcmVsLCBQYXRoICpzdWJwYXRoKQogCXBhdGhub2Rl LT5zdWJwYXRoID0gc3VicGF0aDsKIAogCWNvc3RfbWF0ZXJpYWwoJnBhdGhub2RlLT5wYXRoLAor CQkJCSAgZW5hYmxlZCwKIAkJCQkgIHN1YnBhdGgtPmRpc2FibGVkX25vZGVzLAogCQkJCSAgc3Vi cGF0aC0+c3RhcnR1cF9jb3N0LAogCQkJCSAgc3VicGF0aC0+dG90YWxfY29zdCwKQEAgLTE3Mjks OCArMTczMCwxNSBAQCBjcmVhdGVfbWVtb2l6ZV9wYXRoKFBsYW5uZXJJbmZvICpyb290LCBSZWxP cHRJbmZvICpyZWwsIFBhdGggKnN1YnBhdGgsCiAJcGF0aG5vZGUtPmVzdF91bmlxdWVfa2V5cyA9 IDAuMDsKIAlwYXRobm9kZS0+ZXN0X2hpdF9yYXRpbyA9IDAuMDsKIAotCS8qIHdlIHNob3VsZCBu b3QgZ2VuZXJhdGUgdGhpcyBwYXRoIHR5cGUgd2hlbiBlbmFibGVfbWVtb2l6ZT1mYWxzZSAqLwot CUFzc2VydChlbmFibGVfbWVtb2l6ZSk7CisJLyoKKwkgKiBXZSBzaG91bGQgbm90IGJlIGFza2Vk IHRvIGdlbmVyYXRlIHRoaXMgcGF0aCB0eXBlIHdoZW4gbWVtb2l6YXRpb24gaXMKKwkgKiBkaXNh YmxlZCwgc28gc2V0IG91ciBjb3VudCBvZiBkaXNhYmxlZCBub2RlcyBlcXVhbCB0byB0aGUgc3Vi cGF0aCdzCisJICogY291bnQuCisJICoKKwkgKiBJdCB3b3VsZCBiZSBuaWNlIHRvIGFsc28gQXNz ZXJ0IHRoYXQgbWVtb2l6YXRpb24gaXMgZW5hYmxlZCwgYnV0IHRoZQorCSAqIHZhbHVlIG9mIGVu YWJsZV9tZW1vaXplIGlzIG5vdCBjb250cm9sbGluZzogd2hhdCB3ZSB3b3VsZCBuZWVkIHRvIGNo ZWNrCisJICogaXMgdGhhdCB0aGUgSm9pblBhdGhFeHRyYURhdGEncyBwZ3NfbWFzayBpbmNsdWRl ZCBQR1NfTkVTVExPT1BfTUVNT0laRS4KKwkgKi8KIAlwYXRobm9kZS0+cGF0aC5kaXNhYmxlZF9u b2RlcyA9IHN1YnBhdGgtPmRpc2FibGVkX25vZGVzOwogCiAJLyoKQEAgLTM5NjQsMTMgKzM5NzIs MTYgQEAgcmVwYXJhbWV0ZXJpemVfcGF0aChQbGFubmVySW5mbyAqcm9vdCwgUGF0aCAqcGF0aCwK IAkJCXsKIAkJCQlNYXRlcmlhbFBhdGggKm1wYXRoID0gKE1hdGVyaWFsUGF0aCAqKSBwYXRoOwog CQkJCVBhdGgJICAgKnNwYXRoID0gbXBhdGgtPnN1YnBhdGg7CisJCQkJYm9vbAkJZW5hYmxlZDsK IAogCQkJCXNwYXRoID0gcmVwYXJhbWV0ZXJpemVfcGF0aChyb290LCBzcGF0aCwKIAkJCQkJCQkJ CQkJcmVxdWlyZWRfb3V0ZXIsCiAJCQkJCQkJCQkJCWxvb3BfY291bnQpOworCQkJCWVuYWJsZWQg PQorCQkJCQkobXBhdGgtPnBhdGguZGlzYWJsZWRfbm9kZXMgPD0gc3BhdGgtPmRpc2FibGVkX25v ZGVzKTsKIAkJCQlpZiAoc3BhdGggPT0gTlVMTCkKIAkJCQkJcmV0dXJuIE5VTEw7Ci0JCQkJcmV0 dXJuIChQYXRoICopIGNyZWF0ZV9tYXRlcmlhbF9wYXRoKHJlbCwgc3BhdGgpOworCQkJCXJldHVy biAoUGF0aCAqKSBjcmVhdGVfbWF0ZXJpYWxfcGF0aChyZWwsIHNwYXRoLCBlbmFibGVkKTsKIAkJ CX0KIAkJY2FzZSBUX01lbW9pemU6CiAJCQl7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvdXRpbC9wbGFuY2F0LmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0 LmMKaW5kZXggYTkwZTFjOWVlNmIuLjFiMjBiYzgwNWU2IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0 aWwvcGxhbmNhdC5jCkBAIC01NzYsNiArNTc2LDkgQEAgZ2V0X3JlbGF0aW9uX2luZm8oUGxhbm5l ckluZm8gKnJvb3QsIE9pZCByZWxhdGlvbk9iamVjdElkLCBib29sIGluaHBhcmVudCwKIAkgKiBB bGxvdyBhIHBsdWdpbiB0byBlZGl0b3JpYWxpemUgb24gdGhlIGluZm8gd2Ugb2J0YWluZWQgZnJv bSB0aGUKIAkgKiBjYXRhbG9ncy4gIEFjdGlvbnMgbWlnaHQgaW5jbHVkZSBhbHRlcmluZyB0aGUg YXNzdW1lZCByZWxhdGlvbiBzaXplLAogCSAqIHJlbW92aW5nIGFuIGluZGV4LCBvciBhZGRpbmcg YSBoeXBvdGhldGljYWwgaW5kZXggdG8gdGhlIGluZGV4bGlzdC4KKwkgKgorCSAqIEFuIGV4dGVu c2lvbiBjYW4gYWxzbyBtb2RpZnkgcmVsLT5wZ3NfbWFzayBoZXJlIHRvIGNvbnRyb2wgcGF0aAor CSAqIGdlbmVyYXRpb24uCiAJICovCiAJaWYgKGdldF9yZWxhdGlvbl9pbmZvX2hvb2spCiAJCSgq Z2V0X3JlbGF0aW9uX2luZm9faG9vaykgKHJvb3QsIHJlbGF0aW9uT2JqZWN0SWQsIGluaHBhcmVu dCwgcmVsKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3JlbG5vZGUu YyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3JlbG5vZGUuYwppbmRleCBmNTc2MzFlODc2 Zi4uYTcxNGM4M2YxYmEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3Jl bG5vZGUuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9yZWxub2RlLmMKQEAgLTQ3 LDYgKzQ3LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgSm9pbkhhc2hFbnRyeQogCVJlbE9wdEluZm8gKmpv aW5fcmVsOwogfSBKb2luSGFzaEVudHJ5OwogCisvKiBIb29rIGZvciBwbHVnaW5zIHRvIGdldCBj b250cm9sIGR1cmluZyBqb2lucmVsIHNldHVwICovCitqb2lucmVsX3NldHVwX2hvb2tfdHlwZSBq b2lucmVsX3NldHVwX2hvb2sgPSBOVUxMOworCiBzdGF0aWMgdm9pZCBidWlsZF9qb2lucmVsX3Rs aXN0KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpqb2lucmVsLAogCQkJCQkJCQlSZWxP cHRJbmZvICppbnB1dF9yZWwsCiAJCQkJCQkJCVNwZWNpYWxKb2luSW5mbyAqc2ppbmZvLApAQCAt MjI1LDYgKzIyOCw3IEBAIGJ1aWxkX3NpbXBsZV9yZWwoUGxhbm5lckluZm8gKnJvb3QsIGludCBy ZWxpZCwgUmVsT3B0SW5mbyAqcGFyZW50KQogCXJlbC0+Y29uc2lkZXJfc3RhcnR1cCA9IChyb290 LT50dXBsZV9mcmFjdGlvbiA+IDApOwogCXJlbC0+Y29uc2lkZXJfcGFyYW1fc3RhcnR1cCA9IGZh bHNlOwkvKiBtaWdodCBnZXQgY2hhbmdlZCBsYXRlciAqLwogCXJlbC0+Y29uc2lkZXJfcGFyYWxs ZWwgPSBmYWxzZTsgLyogbWlnaHQgZ2V0IGNoYW5nZWQgbGF0ZXIgKi8KKwlyZWwtPnBnc19tYXNr ID0gcm9vdC0+Z2xvYi0+ZGVmYXVsdF9wZ3NfbWFzazsKIAlyZWwtPnJlbHRhcmdldCA9IGNyZWF0 ZV9lbXB0eV9wYXRodGFyZ2V0KCk7CiAJcmVsLT5wYXRobGlzdCA9IE5JTDsKIAlyZWwtPnBwaWxp c3QgPSBOSUw7CkBAIC04MjIsNiArODI2LDcgQEAgYnVpbGRfam9pbl9yZWwoUGxhbm5lckluZm8g KnJvb3QsCiAJam9pbnJlbC0+Y29uc2lkZXJfc3RhcnR1cCA9IChyb290LT50dXBsZV9mcmFjdGlv biA+IDApOwogCWpvaW5yZWwtPmNvbnNpZGVyX3BhcmFtX3N0YXJ0dXAgPSBmYWxzZTsKIAlqb2lu cmVsLT5jb25zaWRlcl9wYXJhbGxlbCA9IGZhbHNlOworCWpvaW5yZWwtPnBnc19tYXNrID0gcm9v dC0+Z2xvYi0+ZGVmYXVsdF9wZ3NfbWFzazsKIAlqb2lucmVsLT5yZWx0YXJnZXQgPSBjcmVhdGVf ZW1wdHlfcGF0aHRhcmdldCgpOwogCWpvaW5yZWwtPnBhdGhsaXN0ID0gTklMOwogCWpvaW5yZWwt PnBwaWxpc3QgPSBOSUw7CkBAIC05MzQsMTAgKzkzOSw2IEBAIGJ1aWxkX2pvaW5fcmVsKFBsYW5u ZXJJbmZvICpyb290LAogCSAqLwogCWpvaW5yZWwtPmhhc19lY2xhc3Nfam9pbnMgPSBoYXNfcmVs ZXZhbnRfZWNsYXNzX2pvaW5jbGF1c2Uocm9vdCwgam9pbnJlbCk7CiAKLQkvKiBTdG9yZSB0aGUg cGFydGl0aW9uIGluZm9ybWF0aW9uLiAqLwotCWJ1aWxkX2pvaW5yZWxfcGFydGl0aW9uX2luZm8o cm9vdCwgam9pbnJlbCwgb3V0ZXJfcmVsLCBpbm5lcl9yZWwsIHNqaW5mbywKLQkJCQkJCQkJIHJl c3RyaWN0bGlzdCk7Ci0KIAkvKgogCSAqIFNldCBlc3RpbWF0ZXMgb2YgdGhlIGpvaW5yZWwncyBz aXplLgogCSAqLwpAQCAtOTYzLDYgKzk2NCwxOSBAQCBidWlsZF9qb2luX3JlbChQbGFubmVySW5m byAqcm9vdCwKIAkJaXNfcGFyYWxsZWxfc2FmZShyb290LCAoTm9kZSAqKSBqb2lucmVsLT5yZWx0 YXJnZXQtPmV4cHJzKSkKIAkJam9pbnJlbC0+Y29uc2lkZXJfcGFyYWxsZWwgPSB0cnVlOwogCisJ LyoKKwkgKiBBbGxvdyBhIHBsdWdpbiB0byBlZGl0b3JpYWxpemUgb24gdGhlIG5ldyBqb2lucmVs J3MgcHJvcGVydGllcy4gQWN0aW9ucworCSAqIG1pZ2h0IGluY2x1ZGUgYWx0ZXJpbmcgdGhlIHNp emUgZXN0aW1hdGUsIGNsZWFyaW5nIGNvbnNpZGVyX3BhcmFsbGVsLAorCSAqIG9yIGFkanVzdGlu ZyBwZ3NfbWFzay4KKwkgKi8KKwlpZiAoam9pbnJlbF9zZXR1cF9ob29rKQorCQkoKmpvaW5yZWxf c2V0dXBfaG9vaykgKHJvb3QsIGpvaW5yZWwsIG91dGVyX3JlbCwgaW5uZXJfcmVsLCBzamluZm8s CisJCQkJCQkJICAgcmVzdHJpY3RsaXN0KTsKKworCS8qIFN0b3JlIHRoZSBwYXJ0aXRpb24gaW5m b3JtYXRpb24uICovCisJYnVpbGRfam9pbnJlbF9wYXJ0aXRpb25faW5mbyhyb290LCBqb2lucmVs LCBvdXRlcl9yZWwsIGlubmVyX3JlbCwgc2ppbmZvLAorCQkJCQkJCQkgcmVzdHJpY3RsaXN0KTsK KwogCS8qIEFkZCB0aGUgam9pbnJlbCB0byB0aGUgUGxhbm5lckluZm8uICovCiAJYWRkX2pvaW5f cmVsKHJvb3QsIGpvaW5yZWwpOwogCkBAIC0xMDE5LDYgKzEwMzMsNyBAQCBidWlsZF9jaGlsZF9q b2luX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqb3V0ZXJfcmVsLAogCWpvaW5y ZWwtPmNvbnNpZGVyX3N0YXJ0dXAgPSAocm9vdC0+dHVwbGVfZnJhY3Rpb24gPiAwKTsKIAlqb2lu cmVsLT5jb25zaWRlcl9wYXJhbV9zdGFydHVwID0gZmFsc2U7CiAJam9pbnJlbC0+Y29uc2lkZXJf cGFyYWxsZWwgPSBmYWxzZTsKKwlqb2lucmVsLT5wZ3NfbWFzayA9IHJvb3QtPmdsb2ItPmRlZmF1 bHRfcGdzX21hc2s7CiAJam9pbnJlbC0+cmVsdGFyZ2V0ID0gY3JlYXRlX2VtcHR5X3BhdGh0YXJn ZXQoKTsKIAlqb2lucmVsLT5wYXRobGlzdCA9IE5JTDsKIAlqb2lucmVsLT5wcGlsaXN0ID0gTklM OwpAQCAtMTEwMiwxMCArMTExNyw2IEBAIGJ1aWxkX2NoaWxkX2pvaW5fcmVsKFBsYW5uZXJJbmZv ICpyb290LCBSZWxPcHRJbmZvICpvdXRlcl9yZWwsCiAJICovCiAJam9pbnJlbC0+aGFzX2VjbGFz c19qb2lucyA9IHBhcmVudF9qb2lucmVsLT5oYXNfZWNsYXNzX2pvaW5zOwogCi0JLyogSXMgdGhl IGpvaW4gYmV0d2VlbiBwYXJ0aXRpb25zIGl0c2VsZiBwYXJ0aXRpb25lZD8gKi8KLQlidWlsZF9q b2lucmVsX3BhcnRpdGlvbl9pbmZvKHJvb3QsIGpvaW5yZWwsIG91dGVyX3JlbCwgaW5uZXJfcmVs LCBzamluZm8sCi0JCQkJCQkJCSByZXN0cmljdGxpc3QpOwotCiAJLyogQ2hpbGQgam9pbnJlbCBp cyBwYXJhbGxlbCBzYWZlIGlmIHBhcmVudCBpcyBwYXJhbGxlbCBzYWZlLiAqLwogCWpvaW5yZWwt PmNvbnNpZGVyX3BhcmFsbGVsID0gcGFyZW50X2pvaW5yZWwtPmNvbnNpZGVyX3BhcmFsbGVsOwog CkBAIC0xMTEzLDYgKzExMjQsMjAgQEAgYnVpbGRfY2hpbGRfam9pbl9yZWwoUGxhbm5lckluZm8g KnJvb3QsIFJlbE9wdEluZm8gKm91dGVyX3JlbCwKIAlzZXRfam9pbnJlbF9zaXplX2VzdGltYXRl cyhyb290LCBqb2lucmVsLCBvdXRlcl9yZWwsIGlubmVyX3JlbCwKIAkJCQkJCQkgICBzamluZm8s IHJlc3RyaWN0bGlzdCk7CiAKKwkvKgorCSAqIEFsbG93IGEgcGx1Z2luIHRvIGVkaXRvcmlhbGl6 ZSBvbiB0aGUgbmV3IGpvaW5yZWwncyBwcm9wZXJ0aWVzLiBBY3Rpb25zCisJICogbWlnaHQgaW5j bHVkZSBhbHRlcmluZyB0aGUgc2l6ZSBlc3RpbWF0ZSwgY2xlYXJpbmcgY29uc2lkZXJfcGFyYWxs ZWwsCisJICogb3IgYWRqdXN0aW5nIHBnc19tYXNrLiAoSG93ZXZlciwgbm90ZSB0aGF0IGNsZWFy aW5nIGNvbnNpZGVyX3BhcmFsbGVsCisJICogd291bGQgYmUgYmV0dGVyIGRvbmUgaW4gdGhlIHBh cmVudCBqb2lucmVsIHJhdGhlciB0aGFuIGhlcmUuKQorCSAqLworCWlmIChqb2lucmVsX3NldHVw X2hvb2spCisJCSgqam9pbnJlbF9zZXR1cF9ob29rKSAocm9vdCwgam9pbnJlbCwgb3V0ZXJfcmVs LCBpbm5lcl9yZWwsIHNqaW5mbywKKwkJCQkJCQkgICByZXN0cmljdGxpc3QpOworCisJLyogSXMg dGhlIGpvaW4gYmV0d2VlbiBwYXJ0aXRpb25zIGl0c2VsZiBwYXJ0aXRpb25lZD8gKi8KKwlidWls ZF9qb2lucmVsX3BhcnRpdGlvbl9pbmZvKHJvb3QsIGpvaW5yZWwsIG91dGVyX3JlbCwgaW5uZXJf cmVsLCBzamluZm8sCisJCQkJCQkJCSByZXN0cmljdGxpc3QpOworCiAJLyogV2UgYnVpbGQgdGhl IGpvaW4gb25seSBvbmNlLiAqLwogCUFzc2VydCghZmluZF9qb2luX3JlbChyb290LCBqb2lucmVs LT5yZWxpZHMpKTsKIApAQCAtMTYwMiw2ICsxNjI3LDcgQEAgZmV0Y2hfdXBwZXJfcmVsKFBsYW5u ZXJJbmZvICpyb290LCBVcHBlclJlbGF0aW9uS2luZCBraW5kLCBSZWxpZHMgcmVsaWRzKQogCXVw cGVycmVsID0gbWFrZU5vZGUoUmVsT3B0SW5mbyk7CiAJdXBwZXJyZWwtPnJlbG9wdGtpbmQgPSBS RUxPUFRfVVBQRVJfUkVMOwogCXVwcGVycmVsLT5yZWxpZHMgPSBibXNfY29weShyZWxpZHMpOwor CXVwcGVycmVsLT5wZ3NfbWFzayA9IHJvb3QtPmdsb2ItPmRlZmF1bHRfcGdzX21hc2s7CiAKIAkv KiBjaGVhcCBzdGFydHVwIGNvc3QgaXMgaW50ZXJlc3RpbmcgaWZmIG5vdCBhbGwgdHVwbGVzIHRv IGJlIHJldHJpZXZlZCAqLwogCXVwcGVycmVsLT5jb25zaWRlcl9zdGFydHVwID0gKHJvb3QtPnR1 cGxlX2ZyYWN0aW9uID4gMCk7CkBAIC0yMTE4LDcgKzIxNDQsNyBAQCBidWlsZF9qb2lucmVsX3Bh cnRpdGlvbl9pbmZvKFBsYW5uZXJJbmZvICpyb290LAogCVBhcnRpdGlvblNjaGVtZSBwYXJ0X3Nj aGVtZTsKIAogCS8qIE5vdGhpbmcgdG8gZG8gaWYgcGFydGl0aW9ud2lzZSBqb2luIHRlY2huaXF1 ZSBpcyBkaXNhYmxlZC4gKi8KLQlpZiAoIWVuYWJsZV9wYXJ0aXRpb253aXNlX2pvaW4pCisJaWYg KChqb2lucmVsLT5wZ3NfbWFzayAmIFBHU19DT05TSURFUl9QQVJUSVRJT05XSVNFKSA9PSAwKQog CXsKIAkJQXNzZXJ0KCFJU19QQVJUSVRJT05FRF9SRUwoam9pbnJlbCkpOwogCQlyZXR1cm47CmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCBiL3NyYy9pbmNsdWRlL25v ZGVzL3BhdGhub2Rlcy5oCmluZGV4IGE1Zjk1MzU4ODY3Li5jMTc1ZWU5NWI2OCAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMv cGF0aG5vZGVzLmgKQEAgLTIyLDYgKzIyLDc5IEBACiAjaW5jbHVkZSAibm9kZXMvcGFyc2Vub2Rl cy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYmxvY2suaCIKIAorLyoKKyAqIFBhdGggZ2VuZXJhdGlv biBzdHJhdGVnaWVzLgorICoKKyAqIFRoZXNlIGNvbnN0YW50cyBhcmUgdXNlZCB0byBzcGVjaWZ5 IHRoZSBzZXQgb2Ygc3RyYXRlZ2llcyB0aGF0IHRoZSBwbGFubmVyCisgKiBzaG91bGQgdXNlLCBl aXRoZXIgZm9yIHRoZSBxdWVyeSBhcyBhIHdob2xlIG9yIGZvciBhIHNwZWNpZmljIGJhc2VyZWwg b3IKKyAqIGpvaW5yZWwuIFRoZSB2YXJpb3VzIHBsYW5uZXItcmVsYXRlZCBlbmFibGVfKiBHVUNz IGFyZSB1c2VkIHRvIHNldCB0aGUKKyAqIFBsYW5uZXJHbG9iYWwncyBkZWZhdWx0X3Bnc19tYXNr LCBhbmQgdGhhdCBpbiB0dXJuIGlzIHVzZWQgdG8gc2V0IGVhY2gKKyAqIFJlbE9wdEluZm8ncyBw Z3NfbWFzay4gSW4gYm90aCBjYXNlcywgZXh0ZW5zaW9ucyBjYW4gdXNlIGhvb2tzIHRvIG1vZGlm eSB0aGUKKyAqIGRlZmF1bHQgdmFsdWUuICBOb3QgZXZlcnkgc3RyYXRlZ3kgbGlzdGVkIGhlcmUg aGFzIGEgY29ycmVzcG9uZGluZyBlbmFibGVfKgorICogR1VDOyB0aG9zZSB0aGF0IGRvbid0IGFy ZSBhbHdheXMgYWxsb3dlZCB1bmxlc3MgZGlzYWJsZWQgYnkgYW4gZXh0ZW5zaW9uLgorICogTm90 IGFsbCBzdHJhdGVnaWVzIGFyZSByZWxldmFudCBmb3IgZXZlcnkgUmVsT3B0SW5mbzsgZS5nLiBQ R1NfU0VRU0NBTgorICogZG9lc24ndCBhZmZlY3Qgam9pbnJlbHMgb25lIHdheSBvciB0aGUgb3Ro ZXIuCisgKgorICogSW4gbW9zdCBjYXNlcywgZGlzYWJsaW5nIGEgcGF0aCBnZW5lcmF0aW9uIHN0 cmF0ZWd5IG1lcmVseSBtZWFucyB0aGF0IGFueQorICogcGF0aHMgZ2VuZXJhdGVkIHVzaW5nIHRo YXQgc3RyYXRlZ3kgYXJlIG1hcmtlZCBhcyBkaXNhYmxlZCwgYnV0IGluIHNvbWUKKyAqIGNhc2Vz LCBwYXRoIGdlbmVyYXRpb24gaXMgc2tpcHBlZCBhbHRvZ2V0aGVyLiBUaGUgbGF0dGVyIHN0cmF0 ZWd5IGlzIG9ubHkKKyAqIHBlcm1pc3NpYmxlIHdoZW4gaXQgY2FuJ3QgcmVzdWx0IGluIHBsYW5u ZXIgZmFpbHVyZSAtLSBmb3IgaW5zdGFuY2UsIHdlCisgKiBjb3VsZG4ndCBkbyB0aGlzIGZvciBz ZXF1ZW50aWFsIHNjYW5zIG9uIGEgcGxhaW4gcmVsLCBiZWNhdXNlIHRoZXJlIG1pZ2h0CisgKiBu b3QgYmUgYW55IG90aGVyIHBvc3NpYmxlIHBhdGguIE5ldmVydGhlbGVzcywgdGhlIGJlaGF2aW9y cyBpbiBlYWNoCisgKiBpbmRpdmlkdWFsIGNhc2UgYXJlIHRvIHNvbWUgZXh0ZW50IHRoZSByZXN1 bHQgb2YgaGlzdG9yaWNhbCBhY2NpZGVudCwKKyAqIGNob3NlbiB0byBtYXRjaCB0aGUgcHJlZXhp c3RpbmcgYmVoYXZpb3JzIG9mIHRoZSBlbmFibGVfKiBHVUNzLgorICoKKyAqIEluIGEgZmV3IGNh c2VzLCB3ZSBoYXZlIG1vcmUgdGhhbiBvbmUgYml0IGZvciB0aGUgc2FtZSBzdHJhdGVneSwgY29u dHJvbGxpbmcKKyAqIGRpZmZlcmVudCBhc3BlY3RzIG9mIHRoZSBwbGFubmVyIGJlaGF2aW9yLiBX aGVuIFBHU19DT05TSURFUl9JTkRFWE9OTFkgaXMKKyAqIHVuc2V0LCB3ZSBkb24ndCBldmVuIGNv bnNpZGVyIGluZGV4LW9ubHkgc2NhbnMsIGFuZCBhbnkgc3VjaCBzY2FucyB0aGF0CisgKiB3b3Vs ZCBoYXZlIGJlZW4gZ2VuZXJhdGVkIGJlY29tZSBpbmRleCBzY2FucyBpbnN0ZWFkLiBPbiB0aGUg b3RoZXIgaGFuZCwKKyAqIHVuc2V0dGluZyBQR1NfSU5ERVhTQ0FOIG9yIFBHU19JTkRFWE9OTFlT Q0FOIGNhdXNlcyBnZW5lcmF0ZWQgcGF0aHMgb2YgdGhlCisgKiBjb3JyZXNwb25kaW5nIHR5cGVz IHRvIGJlIG1hcmtlZCBhcyBkaXNhYmxlZC4gU2ltaWxhcmx5LCB1bnNldHRpbmcKKyAqIFBHU19D T05TSURFUl9QQVJUSVRJT05XSVNFIHByZXZlbnRzIGFueSBzb3J0IG9mIHRoaW5raW5nIGFib3V0 IHBhcnRpdGlvbndpc2UKKyAqIGpvaW5zIGZvciB0aGUgY3VycmVudCByZWwsIHdoaWNoIGluY2lk ZW50YWxseSB3aWxsIHByZWNsdWRlIGhpZ2hlci1sZXZlbAorICogam9pbnJlbHMgZnJvbSBidWls ZGluZyBwYXJ0aXRpb253aXNlIHBhdGhzIHVzaW5nIHBhdGhzIHRha2VuIGZyb20gdGhlCisgKiBj dXJyZW50IHJlbCdzIGNoaWxkcmVuLiBPbiB0aGUgb3RoZXIgaGFuZCwgdW5zZXR0aW5nIFBHU19B UFBFTkQgb3IKKyAqIFBHU19NRVJHRV9BUFBFTkQgd2lsbCBvbmx5IGFycmFuZ2UgdG8gZGlzYWJs ZSBwYXRocyBvZiB0aGUgY29ycmVzcG9uZGluZworICogdHlwZXMgaWYgdGhleSBhcmUgZ2VuZXJh dGVkIGF0IHRoZSBsZXZlbCBvZiB0aGUgY3VycmVudCByZWwuCisgKgorICogRmluYWxseSwgdW5z ZXR0aW5nIFBHU19DT05TSURFUl9OT05QQVJUSUFMIGRpc2FibGVzIGFsbCBub24tcGFydGlhbCBw YXRocworICogZXhjZXB0IHRob3NlIHRoYXQgdXNlIEdhdGhlciBvciBHYXRoZXIgTWVyZ2UuIElu IG1vc3Qgb3RoZXIgY2FzZXMsIGEKKyAqIHBsdWdpbiBjYW4gbnVkZ2UgdGhlIHBsYW5uZXIgdG93 YXJkIGEgcGFydGljdWxhciBzdHJhdGVneSBieSBkaXNhYmxpbmcKKyAqIGFsbCBvZiB0aGUgb3Ro ZXJzLCBidXQgdGhhdCBkb2Vzbid0IHdvcmsgaGVyZTogdW5zZXR0aW5nIFBHU19TRVFTQ0FOLAor ICogZm9yIGluc3RhbmNlLCB3b3VsZCBkaXNhYmxlIGJvdGggcGFydGlhbCBhbmQgbm9uLXBhcnRp YWwgc2VxdWVudGlhbCBzY2Fucy4KKyAqLworI2RlZmluZSBQR1NfU0VRU0NBTgkJCQkJMHgwMDAw MDAwMQorI2RlZmluZSBQR1NfSU5ERVhTQ0FOCQkJCTB4MDAwMDAwMDIKKyNkZWZpbmUgUEdTX0lO REVYT05MWVNDQU4JCQkweDAwMDAwMDA0CisjZGVmaW5lIFBHU19CSVRNQVBTQ0FOCQkJCTB4MDAw MDAwMDgKKyNkZWZpbmUgUEdTX1RJRFNDQU4JCQkJCTB4MDAwMDAwMTAKKyNkZWZpbmUgUEdTX0ZP UkVJR05KT0lOCQkJCTB4MDAwMDAwMjAKKyNkZWZpbmUgUEdTX01FUkdFSk9JTl9QTEFJTgkJCTB4 MDAwMDAwNDAKKyNkZWZpbmUgUEdTX01FUkdFSk9JTl9NQVRFUklBTElaRQkweDAwMDAwMDgwCisj ZGVmaW5lIFBHU19ORVNUTE9PUF9QTEFJTgkJCTB4MDAwMDAxMDAKKyNkZWZpbmUgUEdTX05FU1RM T09QX01BVEVSSUFMSVpFCTB4MDAwMDAyMDAKKyNkZWZpbmUgUEdTX05FU1RMT09QX01FTU9JWkUJ CTB4MDAwMDA0MDAKKyNkZWZpbmUgUEdTX0hBU0hKT0lOCQkJCTB4MDAwMDA4MDAKKyNkZWZpbmUg UEdTX0FQUEVORAkJCQkJMHgwMDAwMTAwMAorI2RlZmluZSBQR1NfTUVSR0VfQVBQRU5ECQkJMHgw MDAwMjAwMAorI2RlZmluZSBQR1NfR0FUSEVSCQkJCQkweDAwMDA0MDAwCisjZGVmaW5lIFBHU19H QVRIRVJfTUVSR0UJCQkweDAwMDA4MDAwCisjZGVmaW5lIFBHU19DT05TSURFUl9JTkRFWE9OTFkJ CTB4MDAwMTAwMDAKKyNkZWZpbmUgUEdTX0NPTlNJREVSX1BBUlRJVElPTldJU0UJMHgwMDAyMDAw MAorI2RlZmluZSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTAkJMHgwMDA0MDAwMAorCisvKgorICog Q29udmVuaWVuY2UgbWFjcm9zIGZvciB1c2VmdWwgY29tYmluYXRpb24gb2YgdGhlIGJpdHMgZGVm aW5lZCBhYm92ZS4KKyAqLworI2RlZmluZSBQR1NfU0NBTl9BTlkJCVwKKwkoUEdTX1NFUVNDQU4g fCBQR1NfSU5ERVhTQ0FOIHwgUEdTX0lOREVYT05MWVNDQU4gfCBQR1NfQklUTUFQU0NBTiB8IFwK KwkgUEdTX1RJRFNDQU4pCisjZGVmaW5lIFBHU19NRVJHRUpPSU5fQU5ZCVwKKwkoUEdTX01FUkdF Sk9JTl9QTEFJTiB8IFBHU19NRVJHRUpPSU5fTUFURVJJQUxJWkUpCisjZGVmaW5lIFBHU19ORVNU TE9PUF9BTlkJXAorCShQR1NfTkVTVExPT1BfUExBSU4gfCBQR1NfTkVTVExPT1BfTUFURVJJQUxJ WkUgfCBQR1NfTkVTVExPT1BfTUVNT0laRSkKKyNkZWZpbmUgUEdTX0pPSU5fQU5ZCQlcCisJKFBH U19GT1JFSUdOSk9JTiB8IFBHU19NRVJHRUpPSU5fQU5ZIHwgUEdTX05FU1RMT09QX0FOWSB8IFBH U19IQVNISk9JTikKIAogLyoKICAqIFJlbGlkcwpAQCAtMTg2LDYgKzI1OSw5IEBAIHR5cGVkZWYg c3RydWN0IFBsYW5uZXJHbG9iYWwKIAkvKiB3b3JzdCBQUk9QQVJBTExFTCBoYXphcmQgbGV2ZWwg Ki8KIAljaGFyCQltYXhQYXJhbGxlbEhhemFyZDsKIAorCS8qIG1hc2sgb2YgYWxsb3dlZCBwYXRo IGdlbmVyYXRpb24gc3RyYXRlZ2llcyAqLworCXVpbnQ2NAkJZGVmYXVsdF9wZ3NfbWFzazsKKwog CS8qIHBhcnRpdGlvbiBkZXNjcmlwdG9ycyAqLwogCVBhcnRpdGlvbkRpcmVjdG9yeSBwYXJ0aXRp b25fZGlyZWN0b3J5IHBnX25vZGVfYXR0cihyZWFkX3dyaXRlX2lnbm9yZSk7CiAKQEAgLTkzOSw3 ICsxMDE1LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUmVsT3B0SW5mbwogCUNhcmRpbmFsaXR5IHJvd3M7 CiAKIAkvKgotCSAqIHBlci1yZWxhdGlvbiBwbGFubmVyIGNvbnRyb2wgZmxhZ3MKKwkgKiBwZXIt cmVsYXRpb24gcGxhbm5lciBjb250cm9sCiAJICovCiAJLyoga2VlcCBjaGVhcC1zdGFydHVwLWNv c3QgcGF0aHM/ICovCiAJYm9vbAkJY29uc2lkZXJfc3RhcnR1cDsKQEAgLTk0Nyw2ICsxMDIzLDgg QEAgdHlwZWRlZiBzdHJ1Y3QgUmVsT3B0SW5mbwogCWJvb2wJCWNvbnNpZGVyX3BhcmFtX3N0YXJ0 dXA7CiAJLyogY29uc2lkZXIgcGFyYWxsZWwgcGF0aHM/ICovCiAJYm9vbAkJY29uc2lkZXJfcGFy YWxsZWw7CisJLyogcGF0aCBnZW5lcmF0aW9uIHN0cmF0ZWd5IG1hc2sgKi8KKwl1aW50NjQJCXBn c19tYXNrOwogCiAJLyoKIAkgKiBkZWZhdWx0IHJlc3VsdCB0YXJnZXRsaXN0IGZvciBQYXRocyBz Y2FubmluZyB0aGlzIHJlbGF0aW9uOyBsaXN0IG9mCkBAIC0zNTA2LDYgKzM1ODQsNyBAQCB0eXBl ZGVmIHN0cnVjdCBTZW1pQW50aUpvaW5GYWN0b3JzCiAgKiBzamluZm8gaXMgZXh0cmEgaW5mbyBh Ym91dCBzcGVjaWFsIGpvaW5zIGZvciBzZWxlY3Rpdml0eSBlc3RpbWF0aW9uCiAgKiBzZW1pZmFj dG9ycyBpcyBhcyBzaG93biBhYm92ZSAob25seSB2YWxpZCBmb3IgU0VNSS9BTlRJL2lubmVyX3Vu aXF1ZSBqb2lucykKICAqIHBhcmFtX3NvdXJjZV9yZWxzIGFyZSBPSyB0YXJnZXRzIGZvciBwYXJh bWV0ZXJpemF0aW9uIG9mIHJlc3VsdCBwYXRocworICogcGdzX21hc2sgaXMgYSBiaXRtYXNrIG9m IFBHU18qIGNvbnN0YW50cyB0byBsaW1pdCB0aGUgam9pbiBzdHJhdGVneQogICovCiB0eXBlZGVm IHN0cnVjdCBKb2luUGF0aEV4dHJhRGF0YQogewpAQCAtMzUxNSw2ICszNTk0LDcgQEAgdHlwZWRl ZiBzdHJ1Y3QgSm9pblBhdGhFeHRyYURhdGEKIAlTcGVjaWFsSm9pbkluZm8gKnNqaW5mbzsKIAlT ZW1pQW50aUpvaW5GYWN0b3JzIHNlbWlmYWN0b3JzOwogCVJlbGlkcwkJcGFyYW1fc291cmNlX3Jl bHM7CisJdWludDY0CQlwZ3NfbWFzazsKIH0gSm9pblBhdGhFeHRyYURhdGE7CiAKIC8qCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5oIGIvc3JjL2luY2x1ZGUvb3B0aW1p emVyL2Nvc3QuaAppbmRleCAwN2I4YmZhNjM3Ny4uZjJmZDVkMzE1MDcgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL29wdGltaXplci9jb3N0LmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nv c3QuaApAQCAtMTI1LDcgKzEyNSw3IEBAIGV4dGVybiB2b2lkIGNvc3RfbWVyZ2VfYXBwZW5kKFBh dGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCSAgQ29zdCBpbnB1dF9zdGFydHVw X2Nvc3QsIENvc3QgaW5wdXRfdG90YWxfY29zdCwKIAkJCQkJCQkgIGRvdWJsZSB0dXBsZXMpOwog ZXh0ZXJuIHZvaWQgY29zdF9tYXRlcmlhbChQYXRoICpwYXRoLAotCQkJCQkJICBpbnQgaW5wdXRf ZGlzYWJsZWRfbm9kZXMsCisJCQkJCQkgIGJvb2wgZW5hYmxlZCwgaW50IGlucHV0X2Rpc2FibGVk X25vZGVzLAogCQkJCQkJICBDb3N0IGlucHV0X3N0YXJ0dXBfY29zdCwgQ29zdCBpbnB1dF90b3Rh bF9jb3N0LAogCQkJCQkJICBkb3VibGUgdHVwbGVzLCBpbnQgd2lkdGgpOwogZXh0ZXJuIHZvaWQg Y29zdF9hZ2coUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCkBAIC0xNDgsNyArMTQ4LDcg QEAgZXh0ZXJuIHZvaWQgY29zdF9ncm91cChQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwK IAkJCQkJICAgZG91YmxlIGlucHV0X3R1cGxlcyk7CiBleHRlcm4gdm9pZCBpbml0aWFsX2Nvc3Rf bmVzdGxvb3AoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCSAgSm9pbkNvc3RXb3Jrc3BhY2Ug KndvcmtzcGFjZSwKLQkJCQkJCQkJICBKb2luVHlwZSBqb2ludHlwZSwKKwkJCQkJCQkJICBKb2lu VHlwZSBqb2ludHlwZSwgdWludDY0IGVuYWJsZV9tYXNrLAogCQkJCQkJCQkgIFBhdGggKm91dGVy X3BhdGgsIFBhdGggKmlubmVyX3BhdGgsCiAJCQkJCQkJCSAgSm9pblBhdGhFeHRyYURhdGEgKmV4 dHJhKTsKIGV4dGVybiB2b2lkIGZpbmFsX2Nvc3RfbmVzdGxvb3AoUGxhbm5lckluZm8gKnJvb3Qs IE5lc3RQYXRoICpwYXRoLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhu b2RlLmggYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaAppbmRleCA3ZDNlN2IzMmM1 Ni4uY2Y4YTY1NGZhNTMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9k ZS5oCisrKyBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5oCkBAIC0zMiw2ICszMiwx NSBAQCB0eXBlZGVmIHN0cnVjdCBBcHBlbmRQYXRoSW5wdXQKIAlMaXN0CSAgICpjaGlsZF9hcHBl bmRfcmVsaWRfc2V0czsKIH0gQXBwZW5kUGF0aElucHV0OwogCisvKiBIb29rIGZvciBwbHVnaW5z IHRvIGdldCBjb250cm9sIGR1cmluZyBqb2lucmVsIHNldHVwICovCit0eXBlZGVmIHZvaWQgKCpq b2lucmVsX3NldHVwX2hvb2tfdHlwZSkgKFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkJCQkJCSBS ZWxPcHRJbmZvICpqb2lucmVsLAorCQkJCQkJCQkJCSBSZWxPcHRJbmZvICpvdXRlcl9yZWwsCisJ CQkJCQkJCQkJIFJlbE9wdEluZm8gKmlubmVyX3JlbCwKKwkJCQkJCQkJCQkgU3BlY2lhbEpvaW5J bmZvICpzamluZm8sCisJCQkJCQkJCQkJIExpc3QgKnJlc3RyaWN0bGlzdCk7CitleHRlcm4gUEdE TExJTVBPUlQgam9pbnJlbF9zZXR1cF9ob29rX3R5cGUgam9pbnJlbF9zZXR1cF9ob29rOworCiAv KgogICogcHJvdG90eXBlcyBmb3IgcGF0aG5vZGUuYwogICovCkBAIC05OSw3ICsxMDgsOCBAQCBl eHRlcm4gR3JvdXBSZXN1bHRQYXRoICpjcmVhdGVfZ3JvdXBfcmVzdWx0X3BhdGgoUGxhbm5lcklu Zm8gKnJvb3QsCiAJCQkJCQkJCQkJCQkgUmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJCQkJCQkJIFBh dGhUYXJnZXQgKnRhcmdldCwKIAkJCQkJCQkJCQkJCSBMaXN0ICpoYXZpbmdxdWFsKTsKLWV4dGVy biBNYXRlcmlhbFBhdGggKmNyZWF0ZV9tYXRlcmlhbF9wYXRoKFJlbE9wdEluZm8gKnJlbCwgUGF0 aCAqc3VicGF0aCk7CitleHRlcm4gTWF0ZXJpYWxQYXRoICpjcmVhdGVfbWF0ZXJpYWxfcGF0aChS ZWxPcHRJbmZvICpyZWwsIFBhdGggKnN1YnBhdGgsCisJCQkJCQkJCQkJICBib29sIGVuYWJsZWQp OwogZXh0ZXJuIE1lbW9pemVQYXRoICpjcmVhdGVfbWVtb2l6ZV9wYXRoKFBsYW5uZXJJbmZvICpy b290LAogCQkJCQkJCQkJCVJlbE9wdEluZm8gKnJlbCwKIAkJCQkJCQkJCQlQYXRoICpzdWJwYXRo LApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhzLmggYi9zcmMvaW5jbHVk ZS9vcHRpbWl6ZXIvcGF0aHMuaAppbmRleCA0NzFlNDljMDU1OC4uODc1MWFkNzM4MWMgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRocy5oCisrKyBiL3NyYy9pbmNsdWRlL29w dGltaXplci9wYXRocy5oCkBAIC0yOCw3ICsyOCwxNCBAQCBleHRlcm4gUEdETExJTVBPUlQgaW50 IG1pbl9wYXJhbGxlbF90YWJsZV9zY2FuX3NpemU7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IG1p bl9wYXJhbGxlbF9pbmRleF9zY2FuX3NpemU7CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFi bGVfZ3JvdXBfYnlfcmVvcmRlcmluZzsKIAotLyogSG9vayBmb3IgcGx1Z2lucyB0byBnZXQgY29u dHJvbCBpbiBzZXRfcmVsX3BhdGhsaXN0KCkgKi8KKy8qIEhvb2tzIGZvciBwbHVnaW5zIHRvIGdl dCBjb250cm9sIGluIHNldF9yZWxfcGF0aGxpc3QoKSAqLwordHlwZWRlZiB2b2lkICgqam9pbl9w YXRoX3NldHVwX2hvb2tfdHlwZSkgKFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkJCQkJCSAgIFJl bE9wdEluZm8gKmpvaW5yZWwsCisJCQkJCQkJCQkJICAgUmVsT3B0SW5mbyAqb3V0ZXJyZWwsCisJ CQkJCQkJCQkJICAgUmVsT3B0SW5mbyAqaW5uZXJyZWwsCisJCQkJCQkJCQkJICAgSm9pblR5cGUg am9pbnR5cGUsCisJCQkJCQkJCQkJICAgSm9pblBhdGhFeHRyYURhdGEgKmV4dHJhKTsKK2V4dGVy biBQR0RMTElNUE9SVCBqb2luX3BhdGhfc2V0dXBfaG9va190eXBlIGpvaW5fcGF0aF9zZXR1cF9o b29rOwogdHlwZWRlZiB2b2lkICgqc2V0X3JlbF9wYXRobGlzdF9ob29rX3R5cGUpIChQbGFubmVy SW5mbyAqcm9vdCwKIAkJCQkJCQkJCQkJUmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJCQkJCQlJbmRl eCBydGksCi0tIAoyLjUxLjAKCg== --000000000000c84af706486e3644 Content-Type: application/octet-stream; name="v10-0002-Store-information-about-elided-nodes-in-the-fina.patch" Content-Disposition: attachment; filename="v10-0002-Store-information-about-elided-nodes-in-the-fina.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkfk32q61 RnJvbSAzOTg0ZGNlODRkOGQyZDRhY2UzZGFhY2I0ZjcwY2I5N2M5ZjFjYThlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMjAgT2N0IDIwMjUgMTQ6MjM6NDIgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxMCAy LzVdIFN0b3JlIGluZm9ybWF0aW9uIGFib3V0IGVsaWRlZCBub2RlcyBpbiB0aGUgZmluYWwKIHBs YW4uCgpBbiBleHRlbnNpb24gKG9yIGNvcmUgY29kZSkgbWlnaHQgd2FudCB0byByZWNvbnN0cnVj dCB0aGUgcGxhbm5lcidzCmNob2ljZSBvZiBqb2luIG9yZGVyIGZyb20gdGhlIGZpbmFsIHBsYW4u IFRvIGRvIHNvLCBpdCBtdXN0IGJlIHBvc3NpYmxlCnRvIGZpbmQgYWxsIG9mIHRoZSBSVElzIHRo YXQgd2VyZSBwYXJ0IG9mIHRoZSBqb2luIHByb2JsZW0gaW4gdGhhdCBwbGFuLgpUaGUgcHJldmlv dXMgY29tbWl0LCB0b2dldGhlciB3aXRoIHRoZSBlYXJsaWVyIHdvcmsgaW4KOGM0OWE0ODRlOGVi YjAxOTlmYmE0YmQ2OGVhYWVkYWY0OWI0OGVkMCwgaXMgZW5vdWdoIHRvIGxldCB1cyBtYXRjaCB1 cApSVElzIHdlIHNlZSBpbiB0aGUgZmluYWwgcGxhbiB3aXRoIFJUSXMgdGhhdCB3ZSBzZWUgZHVy aW5nIHRoZSBwbGFubmluZwpjeWNsZSwgYnV0IHdlIHN0aWxsIGhhdmUgYSBwcm9ibGVtIGlmIHRo ZSBwbGFubmVyIGRlY2lkZXMgdG8gZHJvcCBzb21lClJUSXMgb3V0IG9mIHRoZSBmaW5hbCBwbGFu IGFsdG9nZXRoZXIuCgpUbyBmaXggdGhhdCwgd2hlbiBzZXRyZWZzLmMgcmVtb3ZlcyBhIFN1YnF1 ZXJ5U2Nhbiwgc2luZ2xlLWNoaWxkIEFwcGVuZCwKb3Igc2luZ2xlLWNoaWxkIE1lcmdlQXBwZW5k IGZyb20gdGhlIGZpbmFsIFBsYW4gdHJlZSwgcmVjb3JkIHRoZSB0eXBlIG9mCnRoZSByZW1vdmVk IG5vZGUgYW5kIHRoZSBSVElzIHRoYXQgdGhlIHJlbW92ZWQgbm9kZSB3b3VsZCBoYXZlIHNjYW5u ZWQKaW4gdGhlIGZpbmFsIHBsYW4gdHJlZS4gSXQgd291bGQgYmUgbmF0dXJhbCB0byByZWNvcmQg dGhpcyBpbmZvcm1hdGlvbgpvbiB0aGUgY2hpbGQgb2YgdGhlIHJlbW92ZWQgcGxhbiBub2RlLCBi dXQgdGhhdCB3b3VsZCByZXF1aXJlIGFkZGluZwphbiBhZGRpdGlvbmFsIHBvaW50ZXIgZmllbGQg dG8gdHlwZSBQbGFuLCB3aGljaCBzZWVtcyB1bmRlc2lyYWJsZS4KU28sIGluc3RlYWQsIHN0b3Jl IHRoZSBpbmZvcm1hdGlvbiBpbiBhIHNlcGFyYXRlIGxpc3QgdGhhdCB0aGUKZXhlY3V0b3IgbmVl ZCBuZXZlciBjb25zdWx0LCBhbmQgdXNlIHRoZSBwbGFuX25vZGVfaWQgdG8gaWRlbnRpZnkKdGhl IHBsYW4gbm9kZSB3aXRoIHdoaWNoIHRoZSByZW1vdmVkIG5vZGUgaXMgbG9naWNhbGx5IGFzc29j aWF0ZWQuCgpBbHNvLCB1cGRhdGUgcGdfb3ZlcmV4cGxhaW4gdG8gZGlzcGxheSB0aGVzZSBkZXRh aWxzLgoKUmV2aWV3ZWQtYnk6IEx1a2FzIEZpdHRsIDxsdWthc0BmaXR0bC5jb20+ClJldmlld2Vk LWJ5OiBKYWt1YiBXYXJ0YWsgPGpha3ViLndhcnRha0BlbnRlcnByaXNlZGIuY29tPgpSZXZpZXdl ZC1ieTogR3JlZyBCdXJkIDxncmVnQGJ1cmQubWU+ClJldmlld2VkLWJ5OiBKYWNvYiBDaGFtcGlv biA8amFjb2IuY2hhbXBpb25AZW50ZXJwcmlzZWRiLmNvbT4KUmV2aWV3ZWQtYnk6IEFtaXQgTGFu Z290ZSA8YW1pdGxhbmdvdGUwOUBnbWFpbC5jb20+ClJldmlld2VkLWJ5OiBIYWlibyBZYW4gPHRy aXN0YW4ueWltQGdtYWlsLmNvbT4KRGlzY3Vzc2lvbjogaHR0cDovL3Bvc3Rnci5lcy9tL0NBK1Rn bW9aLUpoMVQ2UXlXb0NPRE1WUWRoVFVQWWthWmpXenR6UDFFbjQ9WkhvS1B6d0BtYWlsLmdtYWls LmNvbQotLS0KIC4uLi9leHBlY3RlZC9wZ19vdmVyZXhwbGFpbi5vdXQgICAgICAgICAgICAgICB8 ICA0ICstCiBjb250cmliL3BnX292ZXJleHBsYWluL3BnX292ZXJleHBsYWluLmMgICAgICAgfCAz OSArKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jICAg ICAgICAgIHwgIDEgKwogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jICAgICAg ICAgIHwgNTIgKysrKysrKysrKysrKysrKysrLQogc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVz LmggICAgICAgICAgICAgICAgIHwgIDMgKysKIHNyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5o ICAgICAgICAgICAgICAgICB8IDIwICsrKysrKysKIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVm cy5saXN0ICAgICAgICAgICAgICB8ICAxICsKIDcgZmlsZXMgY2hhbmdlZCwgMTE3IGluc2VydGlv bnMoKyksIDMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19vdmVyZXhwbGFp bi9leHBlY3RlZC9wZ19vdmVyZXhwbGFpbi5vdXQgYi9jb250cmliL3BnX292ZXJleHBsYWluL2V4 cGVjdGVkL3BnX292ZXJleHBsYWluLm91dAppbmRleCA1NWQzNDY2NmQ4Ny4uY2E5YTIzZWE2MWYg MTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vZXhwZWN0ZWQvcGdfb3ZlcmV4cGxh aW4ub3V0CisrKyBiL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vZXhwZWN0ZWQvcGdfb3ZlcmV4cGxh aW4ub3V0CkBAIC00NTIsNiArNDUyLDggQEAgU0VMRUNUICogRlJPTSB2ZWdldGFibGVzIFdIRVJF IGdlbnVzID0gJ2RhdWN1cyc7CiAgU2VxIFNjYW4gb24gZGF1Y3VzIHZlZ2V0YWJsZXMKICAgIEZp bHRlcjogKGdlbnVzID0gJ2RhdWN1cyc6OnRleHQpCiAgICBTY2FuIFJUSTogMgorICAgRWxpZGVk IE5vZGUgVHlwZTogQXBwZW5kCisgICBFbGlkZWQgTm9kZSBSVElzOiAxCiAgUlRJIDEgKHJlbGF0 aW9uLCBpbmhlcml0ZWQsIGluLWZyb20tY2xhdXNlKToKICAgIEVyZWY6IHZlZ2V0YWJsZXMgKGlk LCBuYW1lLCBnZW51cykKICAgIFJlbGF0aW9uOiB2ZWdldGFibGVzCkBAIC00NjUsNyArNDY3LDcg QEAgU0VMRUNUICogRlJPTSB2ZWdldGFibGVzIFdIRVJFIGdlbnVzID0gJ2RhdWN1cyc7CiAgICBS ZWxhdGlvbiBLaW5kOiByZWxhdGlvbgogICAgUmVsYXRpb24gTG9jayBNb2RlOiBBY2Nlc3NTaGFy ZUxvY2sKICBVbnBydW5hYmxlIFJUSXM6IDEgMgotKDE2IHJvd3MpCisoMTggcm93cykKIAogLS0g QWxzbyB0ZXN0IGEgY2FzZSB0aGF0IGludm9sdmVzIGEgd3JpdGUuCiBFWFBMQUlOIChSQU5HRV9U QUJMRSwgQ09TVFMgT0ZGKQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19v dmVyZXhwbGFpbi5jIGIvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19vdmVyZXhwbGFpbi5jCmlu ZGV4IGJmOGM3NjhlZDQ3Li5lMDE4NGJhMzE0YSAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19vdmVy ZXhwbGFpbi9wZ19vdmVyZXhwbGFpbi5jCisrKyBiL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdf b3ZlcmV4cGxhaW4uYwpAQCAtMTkxLDYgKzE5MSw4IEBAIG92ZXJleHBsYWluX3Blcl9ub2RlX2hv b2soUGxhblN0YXRlICpwbGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAkgKi8KIAlpZiAob3B0 aW9ucy0+cmFuZ2VfdGFibGUpCiAJeworCQlib29sCQlvcGVuZWRfZWxpZGVkX25vZGVzID0gZmFs c2U7CisKIAkJc3dpdGNoIChub2RlVGFnKHBsYW4pKQogCQl7CiAJCQljYXNlIFRfU2VxU2NhbjoK QEAgLTI1MSw2ICsyNTMsNDMgQEAgb3ZlcmV4cGxhaW5fcGVyX25vZGVfaG9vayhQbGFuU3RhdGUg KnBsYW5zdGF0ZSwgTGlzdCAqYW5jZXN0b3JzLAogCQkJZGVmYXVsdDoKIAkJCQlicmVhazsKIAkJ fQorCisJCWZvcmVhY2hfbm9kZShFbGlkZWROb2RlLCBuLCBlcy0+cHN0bXQtPmVsaWRlZE5vZGVz KQorCQl7CisJCQljaGFyCSAgICplbGlkZWRub2RldGFnOworCisJCQlpZiAobi0+cGxhbl9ub2Rl X2lkICE9IHBsYW4tPnBsYW5fbm9kZV9pZCkKKwkJCQljb250aW51ZTsKKworCQkJaWYgKCFvcGVu ZWRfZWxpZGVkX25vZGVzKQorCQkJeworCQkJCUV4cGxhaW5PcGVuR3JvdXAoIkVsaWRlZCBOb2Rl cyIsICJFbGlkZWQgTm9kZXMiLCBmYWxzZSwgZXMpOworCQkJCW9wZW5lZF9lbGlkZWRfbm9kZXMg PSB0cnVlOworCQkJfQorCisJCQlzd2l0Y2ggKG4tPmVsaWRlZF90eXBlKQorCQkJeworCQkJCWNh c2UgVF9BcHBlbmQ6CisJCQkJCWVsaWRlZG5vZGV0YWcgPSAiQXBwZW5kIjsKKwkJCQkJYnJlYWs7 CisJCQkJY2FzZSBUX01lcmdlQXBwZW5kOgorCQkJCQllbGlkZWRub2RldGFnID0gIk1lcmdlQXBw ZW5kIjsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBUX1N1YnF1ZXJ5U2NhbjoKKwkJCQkJZWxpZGVk bm9kZXRhZyA9ICJTdWJxdWVyeVNjYW4iOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJ CQllbGlkZWRub2RldGFnID0gcHNwcmludGYoIiVkIiwgbi0+ZWxpZGVkX3R5cGUpOworCQkJCQli cmVhazsKKwkJCX0KKworCQkJRXhwbGFpbk9wZW5Hcm91cCgiRWxpZGVkIE5vZGUiLCBOVUxMLCB0 cnVlLCBlcyk7CisJCQlFeHBsYWluUHJvcGVydHlUZXh0KCJFbGlkZWQgTm9kZSBUeXBlIiwgZWxp ZGVkbm9kZXRhZywgZXMpOworCQkJb3ZlcmV4cGxhaW5fYml0bWFwc2V0KCJFbGlkZWQgTm9kZSBS VElzIiwgbi0+cmVsaWRzLCBlcyk7CisJCQlFeHBsYWluQ2xvc2VHcm91cCgiRWxpZGVkIE5vZGUi LCBOVUxMLCB0cnVlLCBlcyk7CisJCX0KKwkJaWYgKG9wZW5lZF9lbGlkZWRfbm9kZXMpCisJCQlF eHBsYWluQ2xvc2VHcm91cCgiRWxpZGVkIE5vZGVzIiwgIkVsaWRlZCBOb2RlcyIsIGZhbHNlLCBl cyk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFu bmVyLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKaW5kZXggMzEyZDU5 NDY1MjcuLjEyNGI1NmI1MjFhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxh bi9wbGFubmVyLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCkBA IC02MTgsNiArNjE4LDcgQEAgc3RhbmRhcmRfcGxhbm5lcihRdWVyeSAqcGFyc2UsIGNvbnN0IGNo YXIgKnF1ZXJ5X3N0cmluZywgaW50IGN1cnNvck9wdGlvbnMsCiAJcmVzdWx0LT5wYXJhbUV4ZWNU eXBlcyA9IGdsb2ItPnBhcmFtRXhlY1R5cGVzOwogCS8qIHV0aWxpdHlTdG10IHNob3VsZCBiZSBu dWxsLCBidXQgd2UgbWlnaHQgYXMgd2VsbCBjb3B5IGl0ICovCiAJcmVzdWx0LT51dGlsaXR5U3Rt dCA9IHBhcnNlLT51dGlsaXR5U3RtdDsKKwlyZXN1bHQtPmVsaWRlZE5vZGVzID0gZ2xvYi0+ZWxp ZGVkTm9kZXM7CiAJcmVzdWx0LT5zdG10X2xvY2F0aW9uID0gcGFyc2UtPnN0bXRfbG9jYXRpb247 CiAJcmVzdWx0LT5zdG10X2xlbiA9IHBhcnNlLT5zdG10X2xlbjsKIApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BsYW4vc2V0cmVmcy5jCmluZGV4IGE1YjIzMTRlZjJhLi41YWQ2YzEzODMwYiAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jCisrKyBiL3NyYy9iYWNrZW5k L29wdGltaXplci9wbGFuL3NldHJlZnMuYwpAQCAtMjExLDYgKzIxMSw5IEBAIHN0YXRpYyBMaXN0 ICpzZXRfd2luZG93YWdnX3J1bmNvbmRpdGlvbl9yZWZlcmVuY2VzKFBsYW5uZXJJbmZvICpyb290 LAogCQkJCQkJCQkJCQkJICAgTGlzdCAqcnVuY29uZGl0aW9uLAogCQkJCQkJCQkJCQkJICAgUGxh biAqcGxhbik7CiAKK3N0YXRpYyB2b2lkIHJlY29yZF9lbGlkZWRfbm9kZShQbGFubmVyR2xvYmFs ICpnbG9iLCBpbnQgcGxhbl9ub2RlX2lkLAorCQkJCQkJCSAgIE5vZGVUYWcgZWxpZGVkX3R5cGUs IEJpdG1hcHNldCAqcmVsaWRzKTsKKwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC0x NDYwLDEwICsxNDYzLDE3IEBAIHNldF9zdWJxdWVyeXNjYW5fcmVmZXJlbmNlcyhQbGFubmVySW5m byAqcm9vdCwKIAogCWlmICh0cml2aWFsX3N1YnF1ZXJ5c2NhbihwbGFuKSkKIAl7CisJCUluZGV4 CQlzY2FucmVsaWQ7CisKIAkJLyoKIAkJICogV2UgY2FuIG9taXQgdGhlIFN1YnF1ZXJ5U2NhbiBu b2RlIGFuZCBqdXN0IHB1bGwgdXAgdGhlIHN1YnBsYW4uCiAJCSAqLwogCQlyZXN1bHQgPSBjbGVh bl91cF9yZW1vdmVkX3BsYW5fbGV2ZWwoKFBsYW4gKikgcGxhbiwgcGxhbi0+c3VicGxhbik7CisK KwkJLyogUmVtZW1iZXIgdGhhdCB3ZSByZW1vdmVkIGEgU3VicXVlcnlTY2FuICovCisJCXNjYW5y ZWxpZCA9IHBsYW4tPnNjYW4uc2NhbnJlbGlkICsgcnRvZmZzZXQ7CisJCXJlY29yZF9lbGlkZWRf bm9kZShyb290LT5nbG9iLCBwbGFuLT5zdWJwbGFuLT5wbGFuX25vZGVfaWQsCisJCQkJCQkgICBU X1N1YnF1ZXJ5U2NhbiwgYm1zX21ha2Vfc2luZ2xldG9uKHNjYW5yZWxpZCkpOwogCX0KIAllbHNl CiAJewpAQCAtMTg5MSw3ICsxOTAxLDE3IEBAIHNldF9hcHBlbmRfcmVmZXJlbmNlcyhQbGFubmVy SW5mbyAqcm9vdCwKIAkJUGxhbgkgICAqcCA9IChQbGFuICopIGxpbml0aWFsKGFwbGFuLT5hcHBl bmRwbGFucyk7CiAKIAkJaWYgKHAtPnBhcmFsbGVsX2F3YXJlID09IGFwbGFuLT5wbGFuLnBhcmFs bGVsX2F3YXJlKQotCQkJcmV0dXJuIGNsZWFuX3VwX3JlbW92ZWRfcGxhbl9sZXZlbCgoUGxhbiAq KSBhcGxhbiwgcCk7CisJCXsKKwkJCVBsYW4JICAgKnJlc3VsdDsKKworCQkJcmVzdWx0ID0gY2xl YW5fdXBfcmVtb3ZlZF9wbGFuX2xldmVsKChQbGFuICopIGFwbGFuLCBwKTsKKworCQkJLyogUmVt ZW1iZXIgdGhhdCB3ZSByZW1vdmVkIGFuIEFwcGVuZCAqLworCQkJcmVjb3JkX2VsaWRlZF9ub2Rl KHJvb3QtPmdsb2IsIHAtPnBsYW5fbm9kZV9pZCwgVF9BcHBlbmQsCisJCQkJCQkJICAgb2Zmc2V0 X3JlbGlkX3NldChhcGxhbi0+YXBwcmVsaWRzLCBydG9mZnNldCkpOworCisJCQlyZXR1cm4gcmVz dWx0OworCQl9CiAJfQogCiAJLyoKQEAgLTE5NTksNyArMTk3OSwxNyBAQCBzZXRfbWVyZ2VhcHBl bmRfcmVmZXJlbmNlcyhQbGFubmVySW5mbyAqcm9vdCwKIAkJUGxhbgkgICAqcCA9IChQbGFuICop IGxpbml0aWFsKG1wbGFuLT5tZXJnZXBsYW5zKTsKIAogCQlpZiAocC0+cGFyYWxsZWxfYXdhcmUg PT0gbXBsYW4tPnBsYW4ucGFyYWxsZWxfYXdhcmUpCi0JCQlyZXR1cm4gY2xlYW5fdXBfcmVtb3Zl ZF9wbGFuX2xldmVsKChQbGFuICopIG1wbGFuLCBwKTsKKwkJeworCQkJUGxhbgkgICAqcmVzdWx0 OworCisJCQlyZXN1bHQgPSBjbGVhbl91cF9yZW1vdmVkX3BsYW5fbGV2ZWwoKFBsYW4gKikgbXBs YW4sIHApOworCisJCQkvKiBSZW1lbWJlciB0aGF0IHdlIHJlbW92ZWQgYSBNZXJnZUFwcGVuZCAq LworCQkJcmVjb3JkX2VsaWRlZF9ub2RlKHJvb3QtPmdsb2IsIHAtPnBsYW5fbm9kZV9pZCwgVF9N ZXJnZUFwcGVuZCwKKwkJCQkJCQkgICBvZmZzZXRfcmVsaWRfc2V0KG1wbGFuLT5hcHByZWxpZHMs IHJ0b2Zmc2V0KSk7CisKKwkJCXJldHVybiByZXN1bHQ7CisJCX0KIAl9CiAKIAkvKgpAQCAtMzc3 NCwzICszODA0LDIxIEBAIGV4dHJhY3RfcXVlcnlfZGVwZW5kZW5jaWVzX3dhbGtlcihOb2RlICpu b2RlLCBQbGFubmVySW5mbyAqY29udGV4dCkKIAlyZXR1cm4gZXhwcmVzc2lvbl90cmVlX3dhbGtl cihub2RlLCBleHRyYWN0X3F1ZXJ5X2RlcGVuZGVuY2llc193YWxrZXIsCiAJCQkJCQkJCSAgY29u dGV4dCk7CiB9CisKKy8qCisgKiBSZWNvcmQgc29tZSBkZXRhaWxzIGFib3V0IGEgbm9kZSByZW1v dmVkIGZyb20gdGhlIHBsYW4gZHVyaW5nIHNldHJlZnMKKyAqIHByb2Nlc3NpbmcsIGZvciB0aGUg YmVuZWZpdCBvZiBjb2RlIHRyeWluZyB0byByZWNvbnN0cnVjdCBwbGFubmVyIGRlY2lzaW9ucwor ICogZnJvbSBleGFtaW5hdGlvbiBvZiB0aGUgZmluYWwgcGxhbiB0cmVlLgorICovCitzdGF0aWMg dm9pZAorcmVjb3JkX2VsaWRlZF9ub2RlKFBsYW5uZXJHbG9iYWwgKmdsb2IsIGludCBwbGFuX25v ZGVfaWQsCisJCQkJICAgTm9kZVRhZyBlbGlkZWRfdHlwZSwgQml0bWFwc2V0ICpyZWxpZHMpCit7 CisJRWxpZGVkTm9kZSAqbiA9IG1ha2VOb2RlKEVsaWRlZE5vZGUpOworCisJbi0+cGxhbl9ub2Rl X2lkID0gcGxhbl9ub2RlX2lkOworCW4tPmVsaWRlZF90eXBlID0gZWxpZGVkX3R5cGU7CisJbi0+ cmVsaWRzID0gcmVsaWRzOworCisJZ2xvYi0+ZWxpZGVkTm9kZXMgPSBsYXBwZW5kKGdsb2ItPmVs aWRlZE5vZGVzLCBuKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rl cy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKaW5kZXggMjQ3NTk3MzFjODcuLjUy YmU1MWY1Yjg4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAorKysg Yi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaApAQCAtMTU5LDYgKzE1OSw5IEBAIHR5cGVk ZWYgc3RydWN0IFBsYW5uZXJHbG9iYWwKIAkvKiB0eXBlIE9JRHMgZm9yIFBBUkFNX0VYRUMgUGFy YW1zICovCiAJTGlzdAkgICAqcGFyYW1FeGVjVHlwZXM7CiAKKwkvKiBpbmZvIGFib3V0IG5vZGVz IGVsaWRlZCBmcm9tIHRoZSBwbGFuIGR1cmluZyBzZXRyZWZzIHByb2Nlc3NpbmcgKi8KKwlMaXN0 CSAgICplbGlkZWROb2RlczsKKwogCS8qIGhpZ2hlc3QgUGxhY2VIb2xkZXJWYXIgSUQgYXNzaWdu ZWQgKi8KIAlJbmRleAkJbGFzdFBISWQ7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVz L3BsYW5ub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKaW5kZXggOWFlNzJh NjA3ZTIuLjBhZDBmZjQwNGM5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9k ZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaApAQCAtMTUyLDYgKzE1Miw5 IEBAIHR5cGVkZWYgc3RydWN0IFBsYW5uZWRTdG10CiAJLyogbm9uLW51bGwgaWYgdGhpcyBpcyB1 dGlsaXR5IHN0bXQgKi8KIAlOb2RlCSAgICp1dGlsaXR5U3RtdDsKIAorCS8qIGluZm8gYWJvdXQg bm9kZXMgZWxpZGVkIGZyb20gdGhlIHBsYW4gZHVyaW5nIHNldHJlZnMgcHJvY2Vzc2luZyAqLwor CUxpc3QJICAgKmVsaWRlZE5vZGVzOworCiAJLyoKIAkgKiBEZWZFbGVtIG9iamVjdHMgYWRkZWQg YnkgZXh0ZW5zaW9ucywgZS5nLiB1c2luZyBwbGFubmVyX3NodXRkb3duX2hvb2sKIAkgKgpAQCAt MTgzOCw0ICsxODQxLDIxIEBAIHR5cGVkZWYgc3RydWN0IFN1YlBsYW5SVEluZm8KIAlib29sCQlk dW1teTsKIH0gU3ViUGxhblJUSW5mbzsKIAorLyoKKyAqIEVsaWRlZE5vZGUKKyAqCisgKiBJbmZv cm1hdGlvbiBhYm91dCBub2RlcyBlbGlkZWQgZnJvbSB0aGUgZmluYWwgcGxhbiB0cmVlOiB0cml2 aWFsIHN1YnF1ZXJ5CisgKiBzY2FucywgYW5kIHNpbmdsZS1jaGlsZCBBcHBlbmQgYW5kIE1lcmdl QXBwZW5kIG5vZGVzLgorICoKKyAqIHBsYW5fbm9kZV9pZCBpcyB0aGF0IG9mIHRoZSBzdXJ2aXZp bmcgcGxhbiBub2RlLCB0aGUgc29sZSBjaGlsZCBvZiB0aGUKKyAqIG9uZSB3aGljaCB3YXMgZWxp ZGVkLgorICovCit0eXBlZGVmIHN0cnVjdCBFbGlkZWROb2RlCit7CisJTm9kZVRhZwkJdHlwZTsK KwlpbnQJCQlwbGFuX25vZGVfaWQ7CisJTm9kZVRhZwkJZWxpZGVkX3R5cGU7CisJQml0bWFwc2V0 ICAqcmVsaWRzOworfSBFbGlkZWROb2RlOworCiAjZW5kaWYJCQkJCQkJLyogUExBTk5PREVTX0gg Ki8KZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggNTEyZDQ4NjYxYzkuLmE4Y2MxMGQwNjZm IDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMv dG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtNzA5LDYgKzcwOSw3IEBAIEVhY2hTdGF0 ZQogRWRnZQogRWRpdGFibGVPYmplY3RUeXBlCiBFbGVtZW50c1N0YXRlCitFbGlkZWROb2RlCiBF bmFibGVUaW1lb3V0UGFyYW1zCiBFbmREYXRhUHRyVHlwZQogRW5kRGlyZWN0TW9kaWZ5X2Z1bmN0 aW9uCi0tIAoyLjUxLjAKCg== --000000000000c84af706486e3644 Content-Type: application/octet-stream; name="v10-0003-Store-information-about-Append-node-consolidatio.patch" Content-Disposition: attachment; filename="v10-0003-Store-information-about-Append-node-consolidatio.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkfk32qa2 RnJvbSBlZDVmZWNmNGRiZTA4NzgzNDZiNDA3NzZjNjlmYWU3ZTAwZjY1NjMwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMTIgSmFuIDIwMjYgMTA6MTI6MjUgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxMCAz LzVdIFN0b3JlIGluZm9ybWF0aW9uIGFib3V0IEFwcGVuZCBub2RlIGNvbnNvbGlkYXRpb24gaW4K IHRoZSBmaW5hbCBwbGFuLgoKQW4gZXh0ZW5zaW9uIChvciBjb3JlIGNvZGUpIG1pZ2h0IHdhbnQg dG8gcmVjb25zdHJ1Y3QgdGhlIHBsYW5uZXIncwpkZWNpc2lvbnMgYWJvdXQgd2hldGhlciBhbmQg d2hlcmUgdG8gcGVyZm9ybSBwYXJ0aXRpb253aXNlIGpvaW5zIGZyb20KdGhlIGZpbmFsIHBsYW4u IFRvIGRvIHNvLCBpdCBtdXN0IGJlIHBvc3NpYmxlIHRvIGZpbmQgYWxsIG9mIHRoZSBSVElzCm9m IHBhcnRpdGlvbmVkIHRhYmxlcyBhcHBlYXJpbmcgaW4gdGhlIHBsYW4uIEJ1dCB3aGVuIGFuIEFw cGVuZFBhdGgKb3IgTWVyZ2VBcHBlbmRQYXRoIHB1bGxzIHVwIGNoaWxkIHBhdGhzIGZyb20gYSBz dWJvcmRpbmF0ZSBBcHBlbmRQYXRoCm9yIE1lcmdlQXBwZW5kUGF0aCwgdGhlIFJUSXMgb2YgdGhl IHN1Ym9yZGluYXRlIHBhdGggZG8gbm90IGFwcGVhcgppbiB0aGUgZmluYWwgcGxhbiwgbWFraW5n IHRoaXMga2luZCBvZiByZWNvbnN0cnVjdGlvbiBpbXBvc3NpYmxlLgoKVG8gYXZvaWQgdGhpcywg cHJvcGFnYXRlIHRoZSBSVEkgc2V0cyB0aGF0IHdvdWxkIGhhdmUgYmVlbiBwcmVzZW50CmluIHRo ZSAnYXBwcmVsaWRzJyBmaWVsZCBvZiB0aGUgc3Vib3JkaW5hdGUgQXBwZW5kIG9yIE1lcmdlQXBw ZW5kCm5vZGVzIHRoYXQgd291bGQgaGF2ZSBiZWVuIGNyZWF0ZWQgaW50byB0aGUgc3Vydml2aW5n IEFwcGVuZCBvcgpNZXJnZUFwcGVuZCBub2RlLCB1c2luZyBhIG5ldyAnY2hpbGRfYXBwZW5kX3Jl bGlkX3NldHMnIGZpZWxkIGZvcgp0aGF0IHB1cnBvc2UuIFRoZSB2YWx1ZSBvZiB0aGlzIGZpZWxk IGlzIGEgbGlzdCBvZiBCaXRtYXBzZXRzLApiZWNhdXNlIGVhY2ggcmVsYXRpb24gd2hvc2UgYXBw ZW5kLWxpc3Qgd2FzIHB1bGxlZCB1cCBoYWQgaXRzIG93bgpzZXQgb2YgUlRJczoganVzdCBvbmUs IGlmIGl0IHdhcyBhIHBhcnRpdGlvbndpc2Ugc2Nhbiwgb3IgbW9yZSB0aGFuCm9uZSwgaWYgaXQg d2FzIGEgcGFydGl0aW9ud2lzZSBqb2luLiBTaW5jZSBvdXIgZ29hbCBpcyB0byBzZWUgd2hlcmUK cGFydGl0aW9ud2lzZSBqb2lucyB3ZXJlIGRvbmUsIGl0IGlzIGVzc2VudGlhbCB0byBhdm9pZCBs b3NpbmcgdGhlCmluZm9ybWF0aW9uIGFib3V0IGhvdyB0aGUgUlRJcyB3ZXJlIGdyb3VwZWQgaW4g dGhlIHB1bGxlZC11cApyZWxhdGlvbnMuCgpUaGlzIGNvbW1pdCBhbHNvIHVwZGF0ZXMgcGdfb3Zl cmV4cGxhaW4gc28gdGhhdCBFWFBMQUlOIChSQU5HRV9UQUJMRSkKd2lsbCBkaXNwbGF5IHRoZSBz YXZlZCBSVEkgc2V0cy4KCkNvLWF1dGhvcmVkLWJ5OiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdy ZXNxbC5vcmc+CkNvLWF1dGhvcmVkLWJ5OiBMdWthcyBGaXR0bCA8bHVrYXNAZml0dGwuY29tPgpS ZXZpZXdlZC1ieTogTHVrYXMgRml0dGwgPGx1a2FzQGZpdHRsLmNvbT4KUmV2aWV3ZWQtYnk6IEph a3ViIFdhcnRhayA8amFrdWIud2FydGFrQGVudGVycHJpc2VkYi5jb20+ClJldmlld2VkLWJ5OiBH cmVnIEJ1cmQgPGdyZWdAYnVyZC5tZT4KUmV2aWV3ZWQtYnk6IEphY29iIENoYW1waW9uIDxqYWNv Yi5jaGFtcGlvbkBlbnRlcnByaXNlZGIuY29tPgpSZXZpZXdlZC1ieTogQW1pdCBMYW5nb3RlIDxh bWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IEhhaWJvIFlhbiA8dHJpc3Rhbi55 aW1AZ21haWwuY29tPgpEaXNjdXNzaW9uOiBodHRwOi8vcG9zdGdyLmVzL20vQ0ErVGdtb1otSmgx VDZReVdvQ09ETVZRZGhUVVBZa2Faald6dHpQMUVuND1aSG9LUHp3QG1haWwuZ21haWwuY29tCi0t LQogLi4uL2V4cGVjdGVkL3BnX292ZXJleHBsYWluLm91dCAgICAgICAgICAgICAgIHwgICA0ICst CiBjb250cmliL3BnX292ZXJleHBsYWluL3BnX292ZXJleHBsYWluLmMgICAgICAgfCAgNTYgKysr KysKIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMgICAgICAgICB8IDE5NSAr KysrKysrKysrKy0tLS0tLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5yZWxzLmMg ICAgICAgICB8ICAgMyArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5j ICAgICAgIHwgICAyICsKIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYyAgICAg ICAgICB8ICAgNyArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcHVuaW9uLmMgICAg ICAgIHwgIDQzICsrLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMgICAg ICAgICB8ICAyNiArKy0KIHNyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oICAgICAgICAgICAg ICAgICB8ICAxMCArCiBzcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaCAgICAgICAgICAgICAg ICAgfCAgMTEgKwogc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmggICAgICAgICAgICAg IHwgIDE4ICstCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgICAg fCAgIDEgKwogMTIgZmlsZXMgY2hhbmdlZCwgMjY2IGluc2VydGlvbnMoKyksIDExMCBkZWxldGlv bnMoLSkKCmRpZmYgLS1naXQgYS9jb250cmliL3BnX292ZXJleHBsYWluL2V4cGVjdGVkL3BnX292 ZXJleHBsYWluLm91dCBiL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vZXhwZWN0ZWQvcGdfb3ZlcmV4 cGxhaW4ub3V0CmluZGV4IGNhOWEyM2VhNjFmLi5hMzc3ZmIyNTcxZCAxMDA2NDQKLS0tIGEvY29u dHJpYi9wZ19vdmVyZXhwbGFpbi9leHBlY3RlZC9wZ19vdmVyZXhwbGFpbi5vdXQKKysrIGIvY29u dHJpYi9wZ19vdmVyZXhwbGFpbi9leHBlY3RlZC9wZ19vdmVyZXhwbGFpbi5vdXQKQEAgLTEwNCw2 ICsxMDQsNyBAQCAkJCk7CiAgICAgICAgICAgICAgICBQYXJhbGxlbCBTYWZlOiB0cnVlCiAgICAg ICAgICAgICAgICBQbGFuIE5vZGUgSUQ6IDIKICAgICAgICAgICAgICAgIEFwcGVuZCBSVElzOiAx CisgICAgICAgICAgICAgICBDaGlsZCBBcHBlbmQgUlRJczogbm9uZQogICAgICAgICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIGJyYXNzaWNhIHZlZ2V0YWJsZXNfMQogICAgICAgICAgICAgICAgICAg ICAgRGlzYWJsZWQgTm9kZXM6IDAKICAgICAgICAgICAgICAgICAgICAgIFBhcmFsbGVsIFNhZmU6 IHRydWUKQEAgLTE0Miw3ICsxNDMsNyBAQCAkJCk7CiAgICBSZWxhdGlvbiBLaW5kOiByZWxhdGlv bgogICAgUmVsYXRpb24gTG9jayBNb2RlOiBBY2Nlc3NTaGFyZUxvY2sKICBVbnBydW5hYmxlIFJU SXM6IDEgMyA0Ci0oNTMgcm93cykKKyg1NCByb3dzKQogCiAtLSBUZXN0IGEgZGlmZmVyZW50IG91 dHB1dCBmb3JtYXQuCiBTRUxFQ1QgZXhwbGFpbl9maWx0ZXIoJCQKQEAgLTE5Nyw2ICsxOTgsNyBA QCAkJCk7CiAgICAgICAgICAgICAgICA8ZXh0UGFyYW0+bm9uZTwvZXh0UGFyYW0+ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgICAgIDxhbGxQYXJhbT5ub25lPC9hbGxQ YXJhbT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgICAgICAgICAgICAgPEFwcGVu ZC1SVElzPjE8L0FwcGVuZC1SVElzPiAgICAgICAgICAgICAgICAgICAgICAgICArCisgICAgICAg ICAgICAgICA8Q2hpbGQtQXBwZW5kLVJUSXM+bm9uZTwvQ2hpbGQtQXBwZW5kLVJUSXM+ICAgICAg ICAgICsKICAgICAgICAgICAgICAgIDxTdWJwbGFucy1SZW1vdmVkPjA8L1N1YnBsYW5zLVJlbW92 ZWQ+ICAgICAgICAgICAgICAgKwogICAgICAgICAgICAgICAgPFBsYW5zPiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCiAgICAgICAgICAgICAgICAgIDxQbGFu PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKZGlmZiAtLWdp dCBhL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYyBiL2NvbnRyaWIvcGdf b3ZlcmV4cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYwppbmRleCBlMDE4NGJhMzE0YS4uMzZlNmFhYzBl MmMgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYwor KysgYi9jb250cmliL3BnX292ZXJleHBsYWluL3BnX292ZXJleHBsYWluLmMKQEAgLTU0LDYgKzU0 LDggQEAgc3RhdGljIHZvaWQgb3ZlcmV4cGxhaW5fYWxpYXMoY29uc3QgY2hhciAqcWxhYmVsLCBB bGlhcyAqYWxpYXMsCiAJCQkJCQkJICBFeHBsYWluU3RhdGUgKmVzKTsKIHN0YXRpYyB2b2lkIG92 ZXJleHBsYWluX2JpdG1hcHNldChjb25zdCBjaGFyICpxbGFiZWwsIEJpdG1hcHNldCAqYm1zLAog CQkJCQkJCQkgIEV4cGxhaW5TdGF0ZSAqZXMpOworc3RhdGljIHZvaWQgb3ZlcmV4cGxhaW5fYml0 bWFwc2V0X2xpc3QoY29uc3QgY2hhciAqcWxhYmVsLCBMaXN0ICpibXNfbGlzdCwKKwkJCQkJCQkJ CSAgIEV4cGxhaW5TdGF0ZSAqZXMpOwogc3RhdGljIHZvaWQgb3ZlcmV4cGxhaW5faW50bGlzdChj b25zdCBjaGFyICpxbGFiZWwsIExpc3QgKmxpc3QsCiAJCQkJCQkJCUV4cGxhaW5TdGF0ZSAqZXMp OwogCkBAIC0yMzIsMTEgKzIzNCwxNyBAQCBvdmVyZXhwbGFpbl9wZXJfbm9kZV9ob29rKFBsYW5T dGF0ZSAqcGxhbnN0YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJCQkJb3ZlcmV4cGxhaW5fYml0bWFw c2V0KCJBcHBlbmQgUlRJcyIsCiAJCQkJCQkJCQkgICgoQXBwZW5kICopIHBsYW4pLT5hcHByZWxp ZHMsCiAJCQkJCQkJCQkgIGVzKTsKKwkJCQlvdmVyZXhwbGFpbl9iaXRtYXBzZXRfbGlzdCgiQ2hp bGQgQXBwZW5kIFJUSXMiLAorCQkJCQkJCQkJCSAgICgoQXBwZW5kICopIHBsYW4pLT5jaGlsZF9h cHBlbmRfcmVsaWRfc2V0cywKKwkJCQkJCQkJCQkgICBlcyk7CiAJCQkJYnJlYWs7CiAJCQljYXNl IFRfTWVyZ2VBcHBlbmQ6CiAJCQkJb3ZlcmV4cGxhaW5fYml0bWFwc2V0KCJBcHBlbmQgUlRJcyIs CiAJCQkJCQkJCQkgICgoTWVyZ2VBcHBlbmQgKikgcGxhbiktPmFwcHJlbGlkcywKIAkJCQkJCQkJ CSAgZXMpOworCQkJCW92ZXJleHBsYWluX2JpdG1hcHNldF9saXN0KCJDaGlsZCBBcHBlbmQgUlRJ cyIsCisJCQkJCQkJCQkJICAgKChNZXJnZUFwcGVuZCAqKSBwbGFuKS0+Y2hpbGRfYXBwZW5kX3Jl bGlkX3NldHMsCisJCQkJCQkJCQkJICAgZXMpOwogCQkJCWJyZWFrOwogCQkJY2FzZSBUX1Jlc3Vs dDoKIApAQCAtODE1LDYgKzgyMyw1NCBAQCBvdmVyZXhwbGFpbl9iaXRtYXBzZXQoY29uc3QgY2hh ciAqcWxhYmVsLCBCaXRtYXBzZXQgKmJtcywgRXhwbGFpblN0YXRlICplcykKIAlwZnJlZShidWYu ZGF0YSk7CiB9CiAKKy8qCisgKiBFbWl0IGEgdGV4dCBwcm9wZXJ0eSBkZXNjcmliaW5nIHRoZSBj b250ZW50cyBvZiBhIGxpc3Qgb2YgYml0bWFwc2V0cy4KKyAqIElmIGEgYml0bWFwc2V0IGNvbnRh aW5zIGV4YWN0bHkgMSBtZW1iZXIsIHdlIGp1c3QgcHJpbnQgYW4gaW50ZWdlcjsKKyAqIG90aGVy d2lzZSwgd2Ugc3Vycm91bmQgdGhlIGxpc3Qgb2YgbWVtYmVycyBieSBwYXJlbnRoZXNlcy4KKyAq CisgKiBJZiB0aGVyZSBhcmUgbm8gYml0bWFwc2V0cyBpbiB0aGUgbGlzdCwgd2UgcHJpbnQgdGhl IHdvcmQgIm5vbmUiLgorICovCitzdGF0aWMgdm9pZAorb3ZlcmV4cGxhaW5fYml0bWFwc2V0X2xp c3QoY29uc3QgY2hhciAqcWxhYmVsLCBMaXN0ICpibXNfbGlzdCwKKwkJCQkJCSAgIEV4cGxhaW5T dGF0ZSAqZXMpCit7CisJU3RyaW5nSW5mb0RhdGEgYnVmOworCisJaW5pdFN0cmluZ0luZm8oJmJ1 Zik7CisKKwlmb3JlYWNoX25vZGUoQml0bWFwc2V0LCBibXMsIGJtc19saXN0KQorCXsKKwkJaWYg KGJtc19tZW1iZXJzaGlwKGJtcykgPT0gQk1TX1NJTkdMRVRPTikKKwkJCWFwcGVuZFN0cmluZ0lu Zm8oJmJ1ZiwgIiAlZCIsIGJtc19zaW5nbGV0b25fbWVtYmVyKGJtcykpOworCQllbHNlCisJCXsK KwkJCWludAkJCXggPSAtMTsKKwkJCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKworCQkJYXBwZW5kU3Ry aW5nSW5mb1N0cmluZygmYnVmLCAiICgiKTsKKwkJCXdoaWxlICgoeCA9IGJtc19uZXh0X21lbWJl cihibXMsIHgpKSA+PSAwKQorCQkJeworCQkJCWlmIChmaXJzdCkKKwkJCQkJZmlyc3QgPSBmYWxz ZTsKKwkJCQllbHNlCisJCQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZidWYsICcgJyk7CisJCQkJ YXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiJWQiLCB4KTsKKwkJCX0KKwkJCWFwcGVuZFN0cmluZ0lu Zm9DaGFyKCZidWYsICcpJyk7CisJCX0KKwl9CisKKwlpZiAoYnVmLmxlbiA9PSAwKQorCXsKKwkJ RXhwbGFpblByb3BlcnR5VGV4dChxbGFiZWwsICJub25lIiwgZXMpOworCQlyZXR1cm47CisJfQor CisJQXNzZXJ0KGJ1Zi5kYXRhWzBdID09ICcgJyk7CisJRXhwbGFpblByb3BlcnR5VGV4dChxbGFi ZWwsIGJ1Zi5kYXRhICsgMSwgZXMpOworCXBmcmVlKGJ1Zi5kYXRhKTsKK30KKwogLyoKICAqIEVt aXQgYSB0ZXh0IHByb3BlcnR5IGRlc2NyaWJpbmcgdGhlIGNvbnRlbnRzIG9mIGEgbGlzdCBvZiBp bnRlZ2VycywgT0lEcywKICAqIG9yIFhJRHMgLS0gZWl0aGVyIGEgc3BhY2Utc2VwYXJhdGVkIGxp c3Qgb2YgaW50ZWdlciBtZW1iZXJzLCBvciB0aGUgd29yZApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRo L2FsbHBhdGhzLmMKaW5kZXggNmU2NDFjMTQ2YTMuLmY0N2M1Y2M3MjQ1IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jCisrKyBiL3NyYy9iYWNrZW5kL29w dGltaXplci9wYXRoL2FsbHBhdGhzLmMKQEAgLTEyOCw4ICsxMjgsMTAgQEAgc3RhdGljIFBhdGgg KmdldF9jaGVhcGVzdF9wYXJhbWV0ZXJpemVkX2NoaWxkX3BhdGgoUGxhbm5lckluZm8gKnJvb3Qs CiAJCQkJCQkJCQkJCQkgICBSZWxpZHMgcmVxdWlyZWRfb3V0ZXIpOwogc3RhdGljIHZvaWQgYWNj dW11bGF0ZV9hcHBlbmRfc3VicGF0aChQYXRoICpwYXRoLAogCQkJCQkJCQkJICBMaXN0ICoqc3Vi cGF0aHMsCi0JCQkJCQkJCQkgIExpc3QgKipzcGVjaWFsX3N1YnBhdGhzKTsKLXN0YXRpYyBQYXRo ICpnZXRfc2luZ2xldG9uX2FwcGVuZF9zdWJwYXRoKFBhdGggKnBhdGgpOworCQkJCQkJCQkJICBM aXN0ICoqc3BlY2lhbF9zdWJwYXRocywKKwkJCQkJCQkJCSAgTGlzdCAqKmNoaWxkX2FwcGVuZF9y ZWxpZF9zZXRzKTsKK3N0YXRpYyBQYXRoICpnZXRfc2luZ2xldG9uX2FwcGVuZF9zdWJwYXRoKFBh dGggKnBhdGgsCisJCQkJCQkJCQkJICBMaXN0ICoqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMpOwog c3RhdGljIHZvaWQgc2V0X2R1bW15X3JlbF9wYXRobGlzdChSZWxPcHRJbmZvICpyZWwpOwogc3Rh dGljIHZvaWQgc2V0X3N1YnF1ZXJ5X3BhdGhsaXN0KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJ bmZvICpyZWwsCiAJCQkJCQkJCSAgSW5kZXggcnRpLCBSYW5nZVRibEVudHJ5ICpydGUpOwpAQCAt MTQwNCwyMiArMTQwNiwyMSBAQCB2b2lkCiBhZGRfcGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVy SW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJTGlzdCAqbGl2ZV9jaGlsZHJlbHMp CiB7Ci0JTGlzdAkgICAqc3VicGF0aHMgPSBOSUw7Ci0JYm9vbAkJc3VicGF0aHNfdmFsaWQgPSB0 cnVlOwotCUxpc3QJICAgKnN0YXJ0dXBfc3VicGF0aHMgPSBOSUw7Ci0JYm9vbAkJc3RhcnR1cF9z dWJwYXRoc192YWxpZCA9IHRydWU7Ci0JTGlzdAkgICAqcGFydGlhbF9zdWJwYXRocyA9IE5JTDsK LQlMaXN0CSAgICpwYV9wYXJ0aWFsX3N1YnBhdGhzID0gTklMOwotCUxpc3QJICAgKnBhX25vbnBh cnRpYWxfc3VicGF0aHMgPSBOSUw7Ci0JYm9vbAkJcGFydGlhbF9zdWJwYXRoc192YWxpZCA9IHRy dWU7Ci0JYm9vbAkJcGFfc3VicGF0aHNfdmFsaWQ7CisJQXBwZW5kUGF0aElucHV0IHVucGFyYW1l dGVyaXplZCA9IHswfTsKKwlBcHBlbmRQYXRoSW5wdXQgc3RhcnR1cCA9IHswfTsKKwlBcHBlbmRQ YXRoSW5wdXQgcGFydGlhbF9vbmx5ID0gezB9OworCUFwcGVuZFBhdGhJbnB1dCBwYXJhbGxlbF9h cHBlbmQgPSB7MH07CisJYm9vbAkJdW5wYXJhbWV0ZXJpemVkX3ZhbGlkID0gdHJ1ZTsKKwlib29s CQlzdGFydHVwX3ZhbGlkID0gdHJ1ZTsKKwlib29sCQlwYXJ0aWFsX29ubHlfdmFsaWQgPSB0cnVl OworCWJvb2wJCXBhcmFsbGVsX2FwcGVuZF92YWxpZCA9IHRydWU7CiAJTGlzdAkgICAqYWxsX2No aWxkX3BhdGhrZXlzID0gTklMOwogCUxpc3QJICAgKmFsbF9jaGlsZF9vdXRlcnMgPSBOSUw7CiAJ TGlzdENlbGwgICAqbDsKIAlkb3VibGUJCXBhcnRpYWxfcm93cyA9IC0xOwogCiAJLyogSWYgYXBw cm9wcmlhdGUsIGNvbnNpZGVyIHBhcmFsbGVsIGFwcGVuZCAqLwotCXBhX3N1YnBhdGhzX3ZhbGlk ID0gZW5hYmxlX3BhcmFsbGVsX2FwcGVuZCAmJiByZWwtPmNvbnNpZGVyX3BhcmFsbGVsOworCXBh cmFsbGVsX2FwcGVuZF92YWxpZCA9IGVuYWJsZV9wYXJhbGxlbF9hcHBlbmQgJiYgcmVsLT5jb25z aWRlcl9wYXJhbGxlbDsKIAogCS8qCiAJICogRm9yIGV2ZXJ5IG5vbi1kdW1teSBjaGlsZCwgcmVt ZW1iZXIgdGhlIGNoZWFwZXN0IHBhdGguICBBbHNvLCBpZGVudGlmeQpAQCAtMTQ0Myw5ICsxNDQ0 LDkgQEAgYWRkX3BhdGhzX3RvX2FwcGVuZF9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdElu Zm8gKnJlbCwKIAkJaWYgKGNoaWxkcmVsLT5wYXRobGlzdCAhPSBOSUwgJiYKIAkJCWNoaWxkcmVs LT5jaGVhcGVzdF90b3RhbF9wYXRoLT5wYXJhbV9pbmZvID09IE5VTEwpCiAJCQlhY2N1bXVsYXRl X2FwcGVuZF9zdWJwYXRoKGNoaWxkcmVsLT5jaGVhcGVzdF90b3RhbF9wYXRoLAotCQkJCQkJCQkJ ICAmc3VicGF0aHMsIE5VTEwpOworCQkJCQkJCQkJICAmdW5wYXJhbWV0ZXJpemVkLnN1YnBhdGhz LCBOVUxMLCAmdW5wYXJhbWV0ZXJpemVkLmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzKTsKIAkJZWxz ZQotCQkJc3VicGF0aHNfdmFsaWQgPSBmYWxzZTsKKwkJCXVucGFyYW1ldGVyaXplZF92YWxpZCA9 IGZhbHNlOwogCiAJCS8qCiAJCSAqIFdoZW4gdGhlIHBsYW5uZXIgaXMgY29uc2lkZXJpbmcgY2hl YXAgc3RhcnR1cCBwbGFucywgd2UnbGwgYWxzbwpAQCAtMTQ3MSwxMSArMTQ3MiwxMiBAQCBhZGRf cGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAog CQkJLyogY2hlYXBlc3Rfc3RhcnR1cF9wYXRoIG11c3Qgbm90IGJlIGEgcGFyYW1ldGVyaXplZCBw YXRoLiAqLwogCQkJQXNzZXJ0KGNoZWFwZXN0X3BhdGgtPnBhcmFtX2luZm8gPT0gTlVMTCk7CiAJ CQlhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKGNoZWFwZXN0X3BhdGgsCi0JCQkJCQkJCQkgICZz dGFydHVwX3N1YnBhdGhzLAotCQkJCQkJCQkJICBOVUxMKTsKKwkJCQkJCQkJCSAgJnN0YXJ0dXAu c3VicGF0aHMsCisJCQkJCQkJCQkgIE5VTEwsCisJCQkJCQkJCQkgICZzdGFydHVwLmNoaWxkX2Fw cGVuZF9yZWxpZF9zZXRzKTsKIAkJfQogCQllbHNlCi0JCQlzdGFydHVwX3N1YnBhdGhzX3ZhbGlk ID0gZmFsc2U7CisJCQlzdGFydHVwX3ZhbGlkID0gZmFsc2U7CiAKIAogCQkvKiBTYW1lIGlkZWEs IGJ1dCBmb3IgYSBwYXJ0aWFsIHBsYW4uICovCkBAIC0xNDgzLDE2ICsxNDg1LDE3IEBAIGFkZF9w YXRoc190b19hcHBlbmRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJ CXsKIAkJCWNoZWFwZXN0X3BhcnRpYWxfcGF0aCA9IGxpbml0aWFsKGNoaWxkcmVsLT5wYXJ0aWFs X3BhdGhsaXN0KTsKIAkJCWFjY3VtdWxhdGVfYXBwZW5kX3N1YnBhdGgoY2hlYXBlc3RfcGFydGlh bF9wYXRoLAotCQkJCQkJCQkJICAmcGFydGlhbF9zdWJwYXRocywgTlVMTCk7CisJCQkJCQkJCQkg ICZwYXJ0aWFsX29ubHkucGFydGlhbF9zdWJwYXRocywgTlVMTCwKKwkJCQkJCQkJCSAgJnBhcnRp YWxfb25seS5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyk7CiAJCX0KIAkJZWxzZQotCQkJcGFydGlh bF9zdWJwYXRoc192YWxpZCA9IGZhbHNlOworCQkJcGFydGlhbF9vbmx5X3ZhbGlkID0gZmFsc2U7 CiAKIAkJLyoKIAkJICogU2FtZSBpZGVhLCBidXQgZm9yIGEgcGFyYWxsZWwgYXBwZW5kIG1peGlu ZyBwYXJ0aWFsIGFuZCBub24tcGFydGlhbAogCQkgKiBwYXRocy4KIAkJICovCi0JCWlmIChwYV9z dWJwYXRoc192YWxpZCkKKwkJaWYgKHBhcmFsbGVsX2FwcGVuZF92YWxpZCkKIAkJewogCQkJUGF0 aAkgICAqbnBwYXRoID0gTlVMTDsKIApAQCAtMTUwMiw3ICsxNTA1LDcgQEAgYWRkX3BhdGhzX3Rv X2FwcGVuZF9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCWlmIChj aGVhcGVzdF9wYXJ0aWFsX3BhdGggPT0gTlVMTCAmJiBucHBhdGggPT0gTlVMTCkKIAkJCXsKIAkJ CQkvKiBOZWl0aGVyIGEgcGFydGlhbCBub3IgYSBwYXJhbGxlbC1zYWZlIHBhdGg/ICBGb3JnZXQg aXQuICovCi0JCQkJcGFfc3VicGF0aHNfdmFsaWQgPSBmYWxzZTsKKwkJCQlwYXJhbGxlbF9hcHBl bmRfdmFsaWQgPSBmYWxzZTsKIAkJCX0KIAkJCWVsc2UgaWYgKG5wcGF0aCA9PSBOVUxMIHx8CiAJ CQkJCSAoY2hlYXBlc3RfcGFydGlhbF9wYXRoICE9IE5VTEwgJiYKQEAgLTE1MTEsOCArMTUxNCw5 IEBAIGFkZF9wYXRoc190b19hcHBlbmRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZv ICpyZWwsCiAJCQkJLyogUGFydGlhbCBwYXRoIGlzIGNoZWFwZXIgb3IgdGhlIG9ubHkgb3B0aW9u LiAqLwogCQkJCUFzc2VydChjaGVhcGVzdF9wYXJ0aWFsX3BhdGggIT0gTlVMTCk7CiAJCQkJYWNj dW11bGF0ZV9hcHBlbmRfc3VicGF0aChjaGVhcGVzdF9wYXJ0aWFsX3BhdGgsCi0JCQkJCQkJCQkJ ICAmcGFfcGFydGlhbF9zdWJwYXRocywKLQkJCQkJCQkJCQkgICZwYV9ub25wYXJ0aWFsX3N1YnBh dGhzKTsKKwkJCQkJCQkJCQkgICZwYXJhbGxlbF9hcHBlbmQucGFydGlhbF9zdWJwYXRocywKKwkJ CQkJCQkJCQkgICZwYXJhbGxlbF9hcHBlbmQuc3VicGF0aHMsCisJCQkJCQkJCQkJICAmcGFyYWxs ZWxfYXBwZW5kLmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzKTsKIAkJCX0KIAkJCWVsc2UKIAkJCXsK QEAgLTE1MzAsOCArMTUzNCw5IEBAIGFkZF9wYXRoc190b19hcHBlbmRfcmVsKFBsYW5uZXJJbmZv ICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQkJICogZmlndXJlIHRoYXQgb3V0LgogCQkJCSAq LwogCQkJCWFjY3VtdWxhdGVfYXBwZW5kX3N1YnBhdGgobnBwYXRoLAotCQkJCQkJCQkJCSAgJnBh X25vbnBhcnRpYWxfc3VicGF0aHMsCi0JCQkJCQkJCQkJICBOVUxMKTsKKwkJCQkJCQkJCQkgICZw YXJhbGxlbF9hcHBlbmQuc3VicGF0aHMsCisJCQkJCQkJCQkJICBOVUxMLAorCQkJCQkJCQkJCSAg JnBhcmFsbGVsX2FwcGVuZC5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyk7CiAJCQl9CiAJCX0KIApA QCAtMTYwNSwyOCArMTYxMCwyOCBAQCBhZGRfcGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5m byAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCSAqIHVucGFyYW1ldGVyaXplZCBBcHBlbmQgcGF0 aCBmb3IgdGhlIHJlbC4gIChOb3RlOiB0aGlzIGlzIGNvcnJlY3QgZXZlbgogCSAqIGlmIHdlIGhh dmUgemVybyBvciBvbmUgbGl2ZSBzdWJwYXRoIGR1ZSB0byBjb25zdHJhaW50IGV4Y2x1c2lvbi4p CiAJICovCi0JaWYgKHN1YnBhdGhzX3ZhbGlkKQotCQlhZGRfcGF0aChyZWwsIChQYXRoICopIGNy ZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZWwsIHN1YnBhdGhzLCBOSUwsCisJaWYgKHVucGFyYW1l dGVyaXplZF92YWxpZCkKKwkJYWRkX3BhdGgocmVsLCAoUGF0aCAqKSBjcmVhdGVfYXBwZW5kX3Bh dGgocm9vdCwgcmVsLCB1bnBhcmFtZXRlcml6ZWQsCiAJCQkJCQkJCQkJCQkgIE5JTCwgTlVMTCwg MCwgZmFsc2UsCiAJCQkJCQkJCQkJCQkgIC0xKSk7CiAKIAkvKiBidWlsZCBhbiBBcHBlbmRQYXRo IGZvciB0aGUgY2hlYXAgc3RhcnR1cCBwYXRocywgaWYgdmFsaWQgKi8KLQlpZiAoc3RhcnR1cF9z dWJwYXRoc192YWxpZCkKLQkJYWRkX3BhdGgocmVsLCAoUGF0aCAqKSBjcmVhdGVfYXBwZW5kX3Bh dGgocm9vdCwgcmVsLCBzdGFydHVwX3N1YnBhdGhzLAotCQkJCQkJCQkJCQkJICBOSUwsIE5JTCwg TlVMTCwgMCwgZmFsc2UsIC0xKSk7CisJaWYgKHN0YXJ0dXBfdmFsaWQpCisJCWFkZF9wYXRoKHJl bCwgKFBhdGggKikgY3JlYXRlX2FwcGVuZF9wYXRoKHJvb3QsIHJlbCwgc3RhcnR1cCwKKwkJCQkJ CQkJCQkJCSAgTklMLCBOVUxMLCAwLCBmYWxzZSwgLTEpKTsKIAogCS8qCiAJICogQ29uc2lkZXIg YW4gYXBwZW5kIG9mIHVub3JkZXJlZCwgdW5wYXJhbWV0ZXJpemVkIHBhcnRpYWwgcGF0aHMuICBN YWtlCiAJICogaXQgcGFyYWxsZWwtYXdhcmUgaWYgcG9zc2libGUuCiAJICovCi0JaWYgKHBhcnRp YWxfc3VicGF0aHNfdmFsaWQgJiYgcGFydGlhbF9zdWJwYXRocyAhPSBOSUwpCisJaWYgKHBhcnRp YWxfb25seV92YWxpZCAmJiBwYXJ0aWFsX29ubHkucGFydGlhbF9zdWJwYXRocyAhPSBOSUwpCiAJ ewogCQlBcHBlbmRQYXRoICphcHBlbmRwYXRoOwogCQlMaXN0Q2VsbCAgICpsYzsKIAkJaW50CQkJ cGFyYWxsZWxfd29ya2VycyA9IDA7CiAKIAkJLyogRmluZCB0aGUgaGlnaGVzdCBudW1iZXIgb2Yg d29ya2VycyByZXF1ZXN0ZWQgZm9yIGFueSBzdWJwYXRoLiAqLwotCQlmb3JlYWNoKGxjLCBwYXJ0 aWFsX3N1YnBhdGhzKQorCQlmb3JlYWNoKGxjLCBwYXJ0aWFsX29ubHkucGFydGlhbF9zdWJwYXRo cykKIAkJewogCQkJUGF0aAkgICAqcGF0aCA9IGxmaXJzdChsYyk7CiAKQEAgLTE2NTMsNyArMTY1 OCw3IEBAIGFkZF9wYXRoc190b19hcHBlbmRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJ bmZvICpyZWwsCiAJCUFzc2VydChwYXJhbGxlbF93b3JrZXJzID4gMCk7CiAKIAkJLyogR2VuZXJh dGUgYSBwYXJ0aWFsIGFwcGVuZCBwYXRoLiAqLwotCQlhcHBlbmRwYXRoID0gY3JlYXRlX2FwcGVu ZF9wYXRoKHJvb3QsIHJlbCwgTklMLCBwYXJ0aWFsX3N1YnBhdGhzLAorCQlhcHBlbmRwYXRoID0g Y3JlYXRlX2FwcGVuZF9wYXRoKHJvb3QsIHJlbCwgcGFydGlhbF9vbmx5LAogCQkJCQkJCQkJCU5J TCwgTlVMTCwgcGFyYWxsZWxfd29ya2VycywKIAkJCQkJCQkJCQllbmFibGVfcGFyYWxsZWxfYXBw ZW5kLAogCQkJCQkJCQkJCS0xKTsKQEAgLTE2NzQsNyArMTY3OSw3IEBAIGFkZF9wYXRoc190b19h cHBlbmRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJICogYSBub24t cGFydGlhbCBwYXRoIHRoYXQgaXMgc3Vic3RhbnRpYWxseSBjaGVhcGVyIHRoYW4gYW55IHBhcnRp YWwgcGF0aDsKIAkgKiBvdGhlcndpc2UsIHdlIHNob3VsZCB1c2UgdGhlIGFwcGVuZCBwYXRoIGFk ZGVkIGluIHRoZSBwcmV2aW91cyBzdGVwLikKIAkgKi8KLQlpZiAocGFfc3VicGF0aHNfdmFsaWQg JiYgcGFfbm9ucGFydGlhbF9zdWJwYXRocyAhPSBOSUwpCisJaWYgKHBhcmFsbGVsX2FwcGVuZF92 YWxpZCAmJiBwYXJhbGxlbF9hcHBlbmQuc3VicGF0aHMgIT0gTklMKQogCXsKIAkJQXBwZW5kUGF0 aCAqYXBwZW5kcGF0aDsKIAkJTGlzdENlbGwgICAqbGM7CkBAIC0xNjg0LDcgKzE2ODksNyBAQCBh ZGRfcGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVs LAogCQkgKiBGaW5kIHRoZSBoaWdoZXN0IG51bWJlciBvZiB3b3JrZXJzIHJlcXVlc3RlZCBmb3Ig YW55IHBhcnRpYWwKIAkJICogc3VicGF0aC4KIAkJICovCi0JCWZvcmVhY2gobGMsIHBhX3BhcnRp YWxfc3VicGF0aHMpCisJCWZvcmVhY2gobGMsIHBhcmFsbGVsX2FwcGVuZC5wYXJ0aWFsX3N1YnBh dGhzKQogCQl7CiAJCQlQYXRoCSAgICpwYXRoID0gbGZpcnN0KGxjKTsKIApAQCAtMTcwMiw4ICsx NzA3LDcgQEAgYWRkX3BhdGhzX3RvX2FwcGVuZF9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9w dEluZm8gKnJlbCwKIAkJCQkJCQkgICBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyKTsK IAkJQXNzZXJ0KHBhcmFsbGVsX3dvcmtlcnMgPiAwKTsKIAotCQlhcHBlbmRwYXRoID0gY3JlYXRl X2FwcGVuZF9wYXRoKHJvb3QsIHJlbCwgcGFfbm9ucGFydGlhbF9zdWJwYXRocywKLQkJCQkJCQkJ CQlwYV9wYXJ0aWFsX3N1YnBhdGhzLAorCQlhcHBlbmRwYXRoID0gY3JlYXRlX2FwcGVuZF9wYXRo KHJvb3QsIHJlbCwgcGFyYWxsZWxfYXBwZW5kLAogCQkJCQkJCQkJCU5JTCwgTlVMTCwgcGFyYWxs ZWxfd29ya2VycywgdHJ1ZSwKIAkJCQkJCQkJCQlwYXJ0aWFsX3Jvd3MpOwogCQlhZGRfcGFydGlh bF9wYXRoKHJlbCwgKFBhdGggKikgYXBwZW5kcGF0aCk7CkBAIC0xNzEzLDcgKzE3MTcsNyBAQCBh ZGRfcGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVs LAogCSAqIEFsc28gYnVpbGQgdW5wYXJhbWV0ZXJpemVkIG9yZGVyZWQgYXBwZW5kIHBhdGhzIGJh c2VkIG9uIHRoZSBjb2xsZWN0ZWQKIAkgKiBsaXN0IG9mIGNoaWxkIHBhdGhrZXlzLgogCSAqLwot CWlmIChzdWJwYXRoc192YWxpZCkKKwlpZiAodW5wYXJhbWV0ZXJpemVkX3ZhbGlkKQogCQlnZW5l cmF0ZV9vcmRlcmVkYXBwZW5kX3BhdGhzKHJvb3QsIHJlbCwgbGl2ZV9jaGlsZHJlbHMsCiAJCQkJ CQkJCQkgYWxsX2NoaWxkX3BhdGhrZXlzKTsKIApAQCAtMTczNCwxMCArMTczOCwxMCBAQCBhZGRf cGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAog CXsKIAkJUmVsaWRzCQlyZXF1aXJlZF9vdXRlciA9IChSZWxpZHMpIGxmaXJzdChsKTsKIAkJTGlz dENlbGwgICAqbGNyOworCQlBcHBlbmRQYXRoSW5wdXQgcGFyYW1ldGVyaXplZCA9IHswfTsKKwkJ Ym9vbAkJcGFyYW1ldGVyaXplZF92YWxpZCA9IHRydWU7CiAKIAkJLyogU2VsZWN0IHRoZSBjaGls ZCBwYXRocyBmb3IgYW4gQXBwZW5kIHdpdGggdGhpcyBwYXJhbWV0ZXJpemF0aW9uICovCi0JCXN1 YnBhdGhzID0gTklMOwotCQlzdWJwYXRoc192YWxpZCA9IHRydWU7CiAJCWZvcmVhY2gobGNyLCBs aXZlX2NoaWxkcmVscykKIAkJewogCQkJUmVsT3B0SW5mbyAqY2hpbGRyZWwgPSAoUmVsT3B0SW5m byAqKSBsZmlyc3QobGNyKTsKQEAgLTE3NDYsNyArMTc1MCw3IEBAIGFkZF9wYXRoc190b19hcHBl bmRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQlpZiAoY2hpbGRy ZWwtPnBhdGhsaXN0ID09IE5JTCkKIAkJCXsKIAkJCQkvKiBmYWlsZWQgdG8gbWFrZSBhIHN1aXRh YmxlIHBhdGggZm9yIHRoaXMgY2hpbGQgKi8KLQkJCQlzdWJwYXRoc192YWxpZCA9IGZhbHNlOwor CQkJCXBhcmFtZXRlcml6ZWRfdmFsaWQgPSBmYWxzZTsKIAkJCQlicmVhazsKIAkJCX0KIApAQCAt MTc1NiwxNSArMTc2MCwxNiBAQCBhZGRfcGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5mbyAq cm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJaWYgKHN1YnBhdGggPT0gTlVMTCkKIAkJCXsKIAkJ CQkvKiBmYWlsZWQgdG8gbWFrZSBhIHN1aXRhYmxlIHBhdGggZm9yIHRoaXMgY2hpbGQgKi8KLQkJ CQlzdWJwYXRoc192YWxpZCA9IGZhbHNlOworCQkJCXBhcmFtZXRlcml6ZWRfdmFsaWQgPSBmYWxz ZTsKIAkJCQlicmVhazsKIAkJCX0KLQkJCWFjY3VtdWxhdGVfYXBwZW5kX3N1YnBhdGgoc3VicGF0 aCwgJnN1YnBhdGhzLCBOVUxMKTsKKwkJCWFjY3VtdWxhdGVfYXBwZW5kX3N1YnBhdGgoc3VicGF0 aCwgJnBhcmFtZXRlcml6ZWQuc3VicGF0aHMsIE5VTEwsCisJCQkJCQkJCQkgICZwYXJhbWV0ZXJp emVkLmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzKTsKIAkJfQogCi0JCWlmIChzdWJwYXRoc192YWxp ZCkKKwkJaWYgKHBhcmFtZXRlcml6ZWRfdmFsaWQpCiAJCQlhZGRfcGF0aChyZWwsIChQYXRoICop Ci0JCQkJCSBjcmVhdGVfYXBwZW5kX3BhdGgocm9vdCwgcmVsLCBzdWJwYXRocywgTklMLAorCQkJ CQkgY3JlYXRlX2FwcGVuZF9wYXRoKHJvb3QsIHJlbCwgcGFyYW1ldGVyaXplZCwKIAkJCQkJCQkJ CQlOSUwsIHJlcXVpcmVkX291dGVyLCAwLCBmYWxzZSwKIAkJCQkJCQkJCQktMSkpOwogCX0KQEAg LTE3ODUsMTMgKzE3OTAsMTYgQEAgYWRkX3BhdGhzX3RvX2FwcGVuZF9yZWwoUGxhbm5lckluZm8g KnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJewogCQkJUGF0aAkgICAqcGF0aCA9IChQYXRoICop IGxmaXJzdChsKTsKIAkJCUFwcGVuZFBhdGggKmFwcGVuZHBhdGg7CisJCQlBcHBlbmRQYXRoSW5w dXQgYXBwZW5kID0gezB9OworCisJCQlhcHBlbmQucGFydGlhbF9zdWJwYXRocyA9IGxpc3RfbWFr ZTEocGF0aCk7CisJCQlhcHBlbmQuY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgPSBsaXN0X21ha2Ux KHJlbC0+cmVsaWRzKTsKIAogCQkJLyogc2tpcCBwYXRocyB3aXRoIG5vIHBhdGhrZXlzLiAqLwog CQkJaWYgKHBhdGgtPnBhdGhrZXlzID09IE5JTCkKIAkJCQljb250aW51ZTsKIAotCQkJYXBwZW5k cGF0aCA9IGNyZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZWwsIE5JTCwgbGlzdF9tYWtlMShwYXRo KSwKLQkJCQkJCQkJCQkJTklMLCBOVUxMLAorCQkJYXBwZW5kcGF0aCA9IGNyZWF0ZV9hcHBlbmRf cGF0aChyb290LCByZWwsIGFwcGVuZCwgTklMLCBOVUxMLAogCQkJCQkJCQkJCQlwYXRoLT5wYXJh bGxlbF93b3JrZXJzLCB0cnVlLAogCQkJCQkJCQkJCQlwYXJ0aWFsX3Jvd3MpOwogCQkJYWRkX3Bh cnRpYWxfcGF0aChyZWwsIChQYXRoICopIGFwcGVuZHBhdGgpOwpAQCAtMTg3Myw5ICsxODgxLDkg QEAgZ2VuZXJhdGVfb3JkZXJlZGFwcGVuZF9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0 SW5mbyAqcmVsLAogCWZvcmVhY2gobGNwLCBhbGxfY2hpbGRfcGF0aGtleXMpCiAJewogCQlMaXN0 CSAgICpwYXRoa2V5cyA9IChMaXN0ICopIGxmaXJzdChsY3ApOwotCQlMaXN0CSAgICpzdGFydHVw X3N1YnBhdGhzID0gTklMOwotCQlMaXN0CSAgICp0b3RhbF9zdWJwYXRocyA9IE5JTDsKLQkJTGlz dAkgICAqZnJhY3Rpb25hbF9zdWJwYXRocyA9IE5JTDsKKwkJQXBwZW5kUGF0aElucHV0IHN0YXJ0 dXAgPSB7MH07CisJCUFwcGVuZFBhdGhJbnB1dCB0b3RhbCA9IHswfTsKKwkJQXBwZW5kUGF0aElu cHV0IGZyYWN0aW9uYWwgPSB7MH07CiAJCWJvb2wJCXN0YXJ0dXBfbmVxX3RvdGFsID0gZmFsc2U7 CiAJCWJvb2wJCWZyYWN0aW9uX25lcV90b3RhbCA9IGZhbHNlOwogCQlib29sCQltYXRjaF9wYXJ0 aXRpb25fb3JkZXI7CkBAIC0yMDM4LDE2ICsyMDQ2LDIzIEBAIGdlbmVyYXRlX29yZGVyZWRhcHBl bmRfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQkgKiBqdXN0 IGEgc2luZ2xlIHN1YnBhdGggKGFuZCBoZW5jZSBhcmVuJ3QgZG9pbmcgYW55dGhpbmcKIAkJCQkg KiB1c2VmdWwpLgogCQkJCSAqLwotCQkJCWNoZWFwZXN0X3N0YXJ0dXAgPSBnZXRfc2luZ2xldG9u X2FwcGVuZF9zdWJwYXRoKGNoZWFwZXN0X3N0YXJ0dXApOwotCQkJCWNoZWFwZXN0X3RvdGFsID0g Z2V0X3NpbmdsZXRvbl9hcHBlbmRfc3VicGF0aChjaGVhcGVzdF90b3RhbCk7CisJCQkJY2hlYXBl c3Rfc3RhcnR1cCA9CisJCQkJCWdldF9zaW5nbGV0b25fYXBwZW5kX3N1YnBhdGgoY2hlYXBlc3Rf c3RhcnR1cCwKKwkJCQkJCQkJCQkJCSAmc3RhcnR1cC5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyk7 CisJCQkJY2hlYXBlc3RfdG90YWwgPQorCQkJCQlnZXRfc2luZ2xldG9uX2FwcGVuZF9zdWJwYXRo KGNoZWFwZXN0X3RvdGFsLAorCQkJCQkJCQkJCQkJICZ0b3RhbC5jaGlsZF9hcHBlbmRfcmVsaWRf c2V0cyk7CiAKLQkJCQlzdGFydHVwX3N1YnBhdGhzID0gbGFwcGVuZChzdGFydHVwX3N1YnBhdGhz LCBjaGVhcGVzdF9zdGFydHVwKTsKLQkJCQl0b3RhbF9zdWJwYXRocyA9IGxhcHBlbmQodG90YWxf c3VicGF0aHMsIGNoZWFwZXN0X3RvdGFsKTsKKwkJCQlzdGFydHVwLnN1YnBhdGhzID0gbGFwcGVu ZChzdGFydHVwLnN1YnBhdGhzLCBjaGVhcGVzdF9zdGFydHVwKTsKKwkJCQl0b3RhbC5zdWJwYXRo cyA9IGxhcHBlbmQodG90YWwuc3VicGF0aHMsIGNoZWFwZXN0X3RvdGFsKTsKIAogCQkJCWlmIChj aGVhcGVzdF9mcmFjdGlvbmFsKQogCQkJCXsKLQkJCQkJY2hlYXBlc3RfZnJhY3Rpb25hbCA9IGdl dF9zaW5nbGV0b25fYXBwZW5kX3N1YnBhdGgoY2hlYXBlc3RfZnJhY3Rpb25hbCk7Ci0JCQkJCWZy YWN0aW9uYWxfc3VicGF0aHMgPSBsYXBwZW5kKGZyYWN0aW9uYWxfc3VicGF0aHMsIGNoZWFwZXN0 X2ZyYWN0aW9uYWwpOworCQkJCQljaGVhcGVzdF9mcmFjdGlvbmFsID0KKwkJCQkJCWdldF9zaW5n bGV0b25fYXBwZW5kX3N1YnBhdGgoY2hlYXBlc3RfZnJhY3Rpb25hbCwKKwkJCQkJCQkJCQkJCQkg JmZyYWN0aW9uYWwuY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMpOworCQkJCQlmcmFjdGlvbmFsLnN1 YnBhdGhzID0KKwkJCQkJCWxhcHBlbmQoZnJhY3Rpb25hbC5zdWJwYXRocywgY2hlYXBlc3RfZnJh Y3Rpb25hbCk7CiAJCQkJfQogCQkJfQogCQkJZWxzZQpAQCAtMjA1NywxMyArMjA3MiwxNiBAQCBn ZW5lcmF0ZV9vcmRlcmVkYXBwZW5kX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZv ICpyZWwsCiAJCQkJICogY2hpbGQgcGF0aHMgZm9yIHRoZSBNZXJnZUFwcGVuZC4KIAkJCQkgKi8K IAkJCQlhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKGNoZWFwZXN0X3N0YXJ0dXAsCi0JCQkJCQkJ CQkJICAmc3RhcnR1cF9zdWJwYXRocywgTlVMTCk7CisJCQkJCQkJCQkJICAmc3RhcnR1cC5zdWJw YXRocywgTlVMTCwKKwkJCQkJCQkJCQkgICZzdGFydHVwLmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRz KTsKIAkJCQlhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKGNoZWFwZXN0X3RvdGFsLAotCQkJCQkJ CQkJCSAgJnRvdGFsX3N1YnBhdGhzLCBOVUxMKTsKKwkJCQkJCQkJCQkgICZ0b3RhbC5zdWJwYXRo cywgTlVMTCwKKwkJCQkJCQkJCQkgICZ0b3RhbC5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyk7CiAK IAkJCQlpZiAoY2hlYXBlc3RfZnJhY3Rpb25hbCkKIAkJCQkJYWNjdW11bGF0ZV9hcHBlbmRfc3Vi cGF0aChjaGVhcGVzdF9mcmFjdGlvbmFsLAotCQkJCQkJCQkJCQkgICZmcmFjdGlvbmFsX3N1YnBh dGhzLCBOVUxMKTsKKwkJCQkJCQkJCQkJICAmZnJhY3Rpb25hbC5zdWJwYXRocywgTlVMTCwKKwkJ CQkJCQkJCQkJICAmZnJhY3Rpb25hbC5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyk7CiAJCQl9CiAJ CX0KIApAQCAtMjA3Myw4ICsyMDkxLDcgQEAgZ2VuZXJhdGVfb3JkZXJlZGFwcGVuZF9wYXRocyhQ bGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJLyogV2Ugb25seSBuZWVkIEFw cGVuZCAqLwogCQkJYWRkX3BhdGgocmVsLCAoUGF0aCAqKSBjcmVhdGVfYXBwZW5kX3BhdGgocm9v dCwKIAkJCQkJCQkJCQkJCQkgIHJlbCwKLQkJCQkJCQkJCQkJCQkgIHN0YXJ0dXBfc3VicGF0aHMs Ci0JCQkJCQkJCQkJCQkJICBOSUwsCisJCQkJCQkJCQkJCQkJICBzdGFydHVwLAogCQkJCQkJCQkJ CQkJCSAgcGF0aGtleXMsCiAJCQkJCQkJCQkJCQkJICBOVUxMLAogCQkJCQkJCQkJCQkJCSAgMCwK QEAgLTIwODMsMTkgKzIxMDAsMTcgQEAgZ2VuZXJhdGVfb3JkZXJlZGFwcGVuZF9wYXRocyhQbGFu bmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJaWYgKHN0YXJ0dXBfbmVxX3RvdGFs KQogCQkJCWFkZF9wYXRoKHJlbCwgKFBhdGggKikgY3JlYXRlX2FwcGVuZF9wYXRoKHJvb3QsCiAJ CQkJCQkJCQkJCQkJCSAgcmVsLAotCQkJCQkJCQkJCQkJCQkgIHRvdGFsX3N1YnBhdGhzLAotCQkJ CQkJCQkJCQkJCQkgIE5JTCwKKwkJCQkJCQkJCQkJCQkJICB0b3RhbCwKIAkJCQkJCQkJCQkJCQkJ ICBwYXRoa2V5cywKIAkJCQkJCQkJCQkJCQkJICBOVUxMLAogCQkJCQkJCQkJCQkJCQkgIDAsCiAJ CQkJCQkJCQkJCQkJCSAgZmFsc2UsCiAJCQkJCQkJCQkJCQkJCSAgLTEpKTsKIAotCQkJaWYgKGZy YWN0aW9uYWxfc3VicGF0aHMgJiYgZnJhY3Rpb25fbmVxX3RvdGFsKQorCQkJaWYgKGZyYWN0aW9u YWwuc3VicGF0aHMgJiYgZnJhY3Rpb25fbmVxX3RvdGFsKQogCQkJCWFkZF9wYXRoKHJlbCwgKFBh dGggKikgY3JlYXRlX2FwcGVuZF9wYXRoKHJvb3QsCiAJCQkJCQkJCQkJCQkJCSAgcmVsLAotCQkJ CQkJCQkJCQkJCQkgIGZyYWN0aW9uYWxfc3VicGF0aHMsCi0JCQkJCQkJCQkJCQkJCSAgTklMLAor CQkJCQkJCQkJCQkJCQkgIGZyYWN0aW9uYWwsCiAJCQkJCQkJCQkJCQkJCSAgcGF0aGtleXMsCiAJ CQkJCQkJCQkJCQkJCSAgTlVMTCwKIAkJCQkJCQkJCQkJCQkJICAwLApAQCAtMjEwNywyMCArMjEy MiwyMyBAQCBnZW5lcmF0ZV9vcmRlcmVkYXBwZW5kX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBS ZWxPcHRJbmZvICpyZWwsCiAJCQkvKiBXZSBuZWVkIE1lcmdlQXBwZW5kICovCiAJCQlhZGRfcGF0 aChyZWwsIChQYXRoICopIGNyZWF0ZV9tZXJnZV9hcHBlbmRfcGF0aChyb290LAogCQkJCQkJCQkJ CQkJCQkJcmVsLAotCQkJCQkJCQkJCQkJCQkJc3RhcnR1cF9zdWJwYXRocywKKwkJCQkJCQkJCQkJ CQkJCXN0YXJ0dXAuc3VicGF0aHMsCisJCQkJCQkJCQkJCQkJCQlzdGFydHVwLmNoaWxkX2FwcGVu ZF9yZWxpZF9zZXRzLAogCQkJCQkJCQkJCQkJCQkJcGF0aGtleXMsCiAJCQkJCQkJCQkJCQkJCQlO VUxMKSk7CiAJCQlpZiAoc3RhcnR1cF9uZXFfdG90YWwpCiAJCQkJYWRkX3BhdGgocmVsLCAoUGF0 aCAqKSBjcmVhdGVfbWVyZ2VfYXBwZW5kX3BhdGgocm9vdCwKIAkJCQkJCQkJCQkJCQkJCQlyZWws Ci0JCQkJCQkJCQkJCQkJCQkJdG90YWxfc3VicGF0aHMsCisJCQkJCQkJCQkJCQkJCQkJdG90YWwu c3VicGF0aHMsCisJCQkJCQkJCQkJCQkJCQkJdG90YWwuY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMs CiAJCQkJCQkJCQkJCQkJCQkJcGF0aGtleXMsCiAJCQkJCQkJCQkJCQkJCQkJTlVMTCkpOwogCi0J CQlpZiAoZnJhY3Rpb25hbF9zdWJwYXRocyAmJiBmcmFjdGlvbl9uZXFfdG90YWwpCisJCQlpZiAo ZnJhY3Rpb25hbC5zdWJwYXRocyAmJiBmcmFjdGlvbl9uZXFfdG90YWwpCiAJCQkJYWRkX3BhdGgo cmVsLCAoUGF0aCAqKSBjcmVhdGVfbWVyZ2VfYXBwZW5kX3BhdGgocm9vdCwKIAkJCQkJCQkJCQkJ CQkJCQlyZWwsCi0JCQkJCQkJCQkJCQkJCQkJZnJhY3Rpb25hbF9zdWJwYXRocywKKwkJCQkJCQkJ CQkJCQkJCQlmcmFjdGlvbmFsLnN1YnBhdGhzLAorCQkJCQkJCQkJCQkJCQkJCWZyYWN0aW9uYWwu Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHMsCiAJCQkJCQkJCQkJCQkJCQkJcGF0aGtleXMsCiAJCQkJ CQkJCQkJCQkJCQkJTlVMTCkpOwogCQl9CkBAIC0yMjIzLDcgKzIyNDEsOCBAQCBnZXRfY2hlYXBl c3RfcGFyYW1ldGVyaXplZF9jaGlsZF9wYXRoKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZv ICpyZWwsCiAgKiBwYXRocykuCiAgKi8KIHN0YXRpYyB2b2lkCi1hY2N1bXVsYXRlX2FwcGVuZF9z dWJwYXRoKFBhdGggKnBhdGgsIExpc3QgKipzdWJwYXRocywgTGlzdCAqKnNwZWNpYWxfc3VicGF0 aHMpCithY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKFBhdGggKnBhdGgsIExpc3QgKipzdWJwYXRo cywgTGlzdCAqKnNwZWNpYWxfc3VicGF0aHMsCisJCQkJCQkgIExpc3QgKipjaGlsZF9hcHBlbmRf cmVsaWRfc2V0cykKIHsKIAlpZiAoSXNBKHBhdGgsIEFwcGVuZFBhdGgpKQogCXsKQEAgLTIyMzIs NiArMjI1MSwxMSBAQCBhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKFBhdGggKnBhdGgsIExpc3Qg KipzdWJwYXRocywgTGlzdCAqKnNwZWNpYWxfc3VicGF0aHMpCiAJCWlmICghYXBhdGgtPnBhdGgu cGFyYWxsZWxfYXdhcmUgfHwgYXBhdGgtPmZpcnN0X3BhcnRpYWxfcGF0aCA9PSAwKQogCQl7CiAJ CQkqc3VicGF0aHMgPSBsaXN0X2NvbmNhdCgqc3VicGF0aHMsIGFwYXRoLT5zdWJwYXRocyk7CisJ CQkqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgPQorCQkJCWxhcHBlbmQoKmNoaWxkX2FwcGVuZF9y ZWxpZF9zZXRzLCBwYXRoLT5wYXJlbnQtPnJlbGlkcyk7CisJCQkqY2hpbGRfYXBwZW5kX3JlbGlk X3NldHMgPQorCQkJCWxpc3RfY29uY2F0KCpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cywKKwkJCQkJ CQlhcGF0aC0+Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHMpOwogCQkJcmV0dXJuOwogCQl9CiAJCWVs c2UgaWYgKHNwZWNpYWxfc3VicGF0aHMgIT0gTlVMTCkKQEAgLTIyNDYsNiArMjI3MCwxMSBAQCBh Y2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKFBhdGggKnBhdGgsIExpc3QgKipzdWJwYXRocywgTGlz dCAqKnNwZWNpYWxfc3VicGF0aHMpCiAJCQkJCQkJCQkJCQkgIGFwYXRoLT5maXJzdF9wYXJ0aWFs X3BhdGgpOwogCQkJKnNwZWNpYWxfc3VicGF0aHMgPSBsaXN0X2NvbmNhdCgqc3BlY2lhbF9zdWJw YXRocywKIAkJCQkJCQkJCQkJbmV3X3NwZWNpYWxfc3VicGF0aHMpOworCQkJKmNoaWxkX2FwcGVu ZF9yZWxpZF9zZXRzID0KKwkJCQlsYXBwZW5kKCpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cywgcGF0 aC0+cGFyZW50LT5yZWxpZHMpOworCQkJKmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzID0KKwkJCQls aXN0X2NvbmNhdCgqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMsCisJCQkJCQkJYXBhdGgtPmNoaWxk X2FwcGVuZF9yZWxpZF9zZXRzKTsKIAkJCXJldHVybjsKIAkJfQogCX0KQEAgLTIyNTQsNiArMjI4 MywxMSBAQCBhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKFBhdGggKnBhdGgsIExpc3QgKipzdWJw YXRocywgTGlzdCAqKnNwZWNpYWxfc3VicGF0aHMpCiAJCU1lcmdlQXBwZW5kUGF0aCAqbXBhdGgg PSAoTWVyZ2VBcHBlbmRQYXRoICopIHBhdGg7CiAKIAkJKnN1YnBhdGhzID0gbGlzdF9jb25jYXQo KnN1YnBhdGhzLCBtcGF0aC0+c3VicGF0aHMpOworCQkqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMg PQorCQkJbGFwcGVuZCgqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMsIHBhdGgtPnBhcmVudC0+cmVs aWRzKTsKKwkJKmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzID0KKwkJCWxpc3RfY29uY2F0KCpjaGls ZF9hcHBlbmRfcmVsaWRfc2V0cywKKwkJCQkJCW1wYXRoLT5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0 cyk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTIyNjUsMTAgKzIyOTksMTUgQEAgYWNjdW11bGF0ZV9h cHBlbmRfc3VicGF0aChQYXRoICpwYXRoLCBMaXN0ICoqc3VicGF0aHMsIExpc3QgKipzcGVjaWFs X3N1YnBhdGhzKQogICoJCVJldHVybnMgdGhlIHNpbmdsZSBzdWJwYXRoIG9mIGFuIEFwcGVuZC9N ZXJnZUFwcGVuZCwgb3IganVzdAogICoJCXJldHVybiAncGF0aCcgaWYgaXQncyBub3QgYSBzaW5n bGUgc3ViLXBhdGggQXBwZW5kL01lcmdlQXBwZW5kLgogICoKKyAqIEFzIGEgc2lkZSBlZmZlY3Qs IHdoZW5ldmVyIHdlIHJldHVybiBhIHNpbmdsZSBzdWJwYXRoIHJhdGhlciB0aGFuIHRoZQorICog b3JpZ2luYWwgcGF0aCwgYWRkIHRoZSByZWxpZCBzZXQgZm9yIHRoZSBvcmlnaW5hbCBwYXRoIHRv CisgKiBjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cywgc28gdGhhdCB0aG9zZSByZWxpZHMgZG9uJ3Qg ZW50aXJlbHkgZGlzYXBwZWFyCisgKiBmcm9tIHRoZSBmaW5hbCBwbGFuLgorICoKICAqIE5vdGU6 ICdwYXRoJyBtdXN0IG5vdCBiZSBhIHBhcmFsbGVsLWF3YXJlIHBhdGguCiAgKi8KIHN0YXRpYyBQ YXRoICoKLWdldF9zaW5nbGV0b25fYXBwZW5kX3N1YnBhdGgoUGF0aCAqcGF0aCkKK2dldF9zaW5n bGV0b25fYXBwZW5kX3N1YnBhdGgoUGF0aCAqcGF0aCwgTGlzdCAqKmNoaWxkX2FwcGVuZF9yZWxp ZF9zZXRzKQogewogCUFzc2VydCghcGF0aC0+cGFyYWxsZWxfYXdhcmUpOwogCkBAIC0yMjc3LDE0 ICsyMzE2LDIyIEBAIGdldF9zaW5nbGV0b25fYXBwZW5kX3N1YnBhdGgoUGF0aCAqcGF0aCkKIAkJ QXBwZW5kUGF0aCAqYXBhdGggPSAoQXBwZW5kUGF0aCAqKSBwYXRoOwogCiAJCWlmIChsaXN0X2xl bmd0aChhcGF0aC0+c3VicGF0aHMpID09IDEpCisJCXsKKwkJCSpjaGlsZF9hcHBlbmRfcmVsaWRf c2V0cyA9CisJCQkJbGFwcGVuZCgqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMsIHBhdGgtPnBhcmVu dC0+cmVsaWRzKTsKIAkJCXJldHVybiAoUGF0aCAqKSBsaW5pdGlhbChhcGF0aC0+c3VicGF0aHMp OworCQl9CiAJfQogCWVsc2UgaWYgKElzQShwYXRoLCBNZXJnZUFwcGVuZFBhdGgpKQogCXsKIAkJ TWVyZ2VBcHBlbmRQYXRoICptcGF0aCA9IChNZXJnZUFwcGVuZFBhdGggKikgcGF0aDsKIAogCQlp ZiAobGlzdF9sZW5ndGgobXBhdGgtPnN1YnBhdGhzKSA9PSAxKQorCQl7CisJCQkqY2hpbGRfYXBw ZW5kX3JlbGlkX3NldHMgPQorCQkJCWxhcHBlbmQoKmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzLCBw YXRoLT5wYXJlbnQtPnJlbGlkcyk7CiAJCQlyZXR1cm4gKFBhdGggKikgbGluaXRpYWwobXBhdGgt PnN1YnBhdGhzKTsKKwkJfQogCX0KIAogCXJldHVybiBwYXRoOwpAQCAtMjMwNCw2ICsyMzUxLDgg QEAgZ2V0X3NpbmdsZXRvbl9hcHBlbmRfc3VicGF0aChQYXRoICpwYXRoKQogc3RhdGljIHZvaWQK IHNldF9kdW1teV9yZWxfcGF0aGxpc3QoUmVsT3B0SW5mbyAqcmVsKQogeworCUFwcGVuZFBhdGhJ bnB1dCBpbiA9IHswfTsKKwogCS8qIFNldCBkdW1teSBzaXplIGVzdGltYXRlcyAtLS0gd2UgbGVh dmUgYXR0cl93aWR0aHNbXSBhcyB6ZXJvZXMgKi8KIAlyZWwtPnJvd3MgPSAwOwogCXJlbC0+cmVs dGFyZ2V0LT53aWR0aCA9IDA7CkBAIC0yMzEzLDcgKzIzNjIsNyBAQCBzZXRfZHVtbXlfcmVsX3Bh dGhsaXN0KFJlbE9wdEluZm8gKnJlbCkKIAlyZWwtPnBhcnRpYWxfcGF0aGxpc3QgPSBOSUw7CiAK IAkvKiBTZXQgdXAgdGhlIGR1bW15IHBhdGggKi8KLQlhZGRfcGF0aChyZWwsIChQYXRoICopIGNy ZWF0ZV9hcHBlbmRfcGF0aChOVUxMLCByZWwsIE5JTCwgTklMLAorCWFkZF9wYXRoKHJlbCwgKFBh dGggKikgY3JlYXRlX2FwcGVuZF9wYXRoKE5VTEwsIHJlbCwgaW4sCiAJCQkJCQkJCQkJCSAgTklM LCByZWwtPmxhdGVyYWxfcmVsaWRzLAogCQkJCQkJCQkJCQkgIDAsIGZhbHNlLCAtMSkpOwogCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucmVscy5jIGIvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnJlbHMuYwppbmRleCAyNjE1NjUxYzA3My4uNDQzZTJk Y2E3YzAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5yZWxzLmMK KysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnJlbHMuYwpAQCAtMTUxMyw2ICsx NTEzLDcgQEAgdm9pZAogbWFya19kdW1teV9yZWwoUmVsT3B0SW5mbyAqcmVsKQogewogCU1lbW9y eUNvbnRleHQgb2xkY29udGV4dDsKKwlBcHBlbmRQYXRoSW5wdXQgaW4gPSB7MH07CiAKIAkvKiBB bHJlYWR5IG1hcmtlZD8gKi8KIAlpZiAoaXNfZHVtbXlfcmVsKHJlbCkpCkBAIC0xNTI5LDcgKzE1 MzAsNyBAQCBtYXJrX2R1bW15X3JlbChSZWxPcHRJbmZvICpyZWwpCiAJcmVsLT5wYXJ0aWFsX3Bh dGhsaXN0ID0gTklMOwogCiAJLyogU2V0IHVwIHRoZSBkdW1teSBwYXRoICovCi0JYWRkX3BhdGgo cmVsLCAoUGF0aCAqKSBjcmVhdGVfYXBwZW5kX3BhdGgoTlVMTCwgcmVsLCBOSUwsIE5JTCwKKwlh ZGRfcGF0aChyZWwsIChQYXRoICopIGNyZWF0ZV9hcHBlbmRfcGF0aChOVUxMLCByZWwsIGluLAog CQkJCQkJCQkJCQkgIE5JTCwgcmVsLT5sYXRlcmFsX3JlbGlkcywKIAkJCQkJCQkJCQkJICAwLCBm YWxzZSwgLTEpKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3Jl YXRlcGxhbi5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCmluZGV4 IGFmNDFjYTY5OTI5Li40YWMxZmIxZThmMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BsYW4vY3JlYXRlcGxhbi5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2Ny ZWF0ZXBsYW4uYwpAQCAtMTI2NSw2ICsxMjY1LDcgQEAgY3JlYXRlX2FwcGVuZF9wbGFuKFBsYW5u ZXJJbmZvICpyb290LCBBcHBlbmRQYXRoICpiZXN0X3BhdGgsIGludCBmbGFncykKIAlwbGFuLT5w bGFuLmxlZnR0cmVlID0gTlVMTDsKIAlwbGFuLT5wbGFuLnJpZ2h0dHJlZSA9IE5VTEw7CiAJcGxh bi0+YXBwcmVsaWRzID0gcmVsLT5yZWxpZHM7CisJcGxhbi0+Y2hpbGRfYXBwZW5kX3JlbGlkX3Nl dHMgPSBiZXN0X3BhdGgtPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzOwogCiAJaWYgKHBhdGhrZXlz ICE9IE5JTCkKIAl7CkBAIC0xNDc3LDYgKzE0NzgsNyBAQCBjcmVhdGVfbWVyZ2VfYXBwZW5kX3Bs YW4oUGxhbm5lckluZm8gKnJvb3QsIE1lcmdlQXBwZW5kUGF0aCAqYmVzdF9wYXRoLAogCXBsYW4t PmxlZnR0cmVlID0gTlVMTDsKIAlwbGFuLT5yaWdodHRyZWUgPSBOVUxMOwogCW5vZGUtPmFwcHJl bGlkcyA9IHJlbC0+cmVsaWRzOworCW5vZGUtPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzID0gYmVz dF9wYXRoLT5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0czsKIAogCS8qCiAJICogQ29tcHV0ZSBzb3J0 IGNvbHVtbiBpbmZvLCBhbmQgYWRqdXN0IE1lcmdlQXBwZW5kJ3MgdGxpc3QgYXMgbmVlZGVkLgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jIGIvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCmluZGV4IDEyNGI1NmI1MjFhLi41Yjc4YmQ0 ZmYzNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCisr KyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwpAQCAtNDAxMiw3ICs0MDEy LDcgQEAgY3JlYXRlX2RlZ2VuZXJhdGVfZ3JvdXBpbmdfcGF0aHMoUGxhbm5lckluZm8gKnJvb3Qs IFJlbE9wdEluZm8gKmlucHV0X3JlbCwKIAkJICogbWlnaHQgZ2V0IGJldHdlZW4gMCBhbmQgTiBv dXRwdXQgcm93cy4gT2ZmaGFuZCBJIHRoaW5rIHRoYXQncwogCQkgKiBkZXNpcmVkLikKIAkJICov Ci0JCUxpc3QJICAgKnBhdGhzID0gTklMOworCQlBcHBlbmRQYXRoSW5wdXQgYXBwZW5kID0gezB9 OwogCiAJCXdoaWxlICgtLW5yb3dzID49IDApCiAJCXsKQEAgLTQwMjAsMTMgKzQwMjAsMTIgQEAg Y3JlYXRlX2RlZ2VuZXJhdGVfZ3JvdXBpbmdfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9w dEluZm8gKmlucHV0X3JlbCwKIAkJCQljcmVhdGVfZ3JvdXBfcmVzdWx0X3BhdGgocm9vdCwgZ3Jv dXBlZF9yZWwsCiAJCQkJCQkJCQkJIGdyb3VwZWRfcmVsLT5yZWx0YXJnZXQsCiAJCQkJCQkJCQkJ IChMaXN0ICopIHBhcnNlLT5oYXZpbmdRdWFsKTsKLQkJCXBhdGhzID0gbGFwcGVuZChwYXRocywg cGF0aCk7CisJCQlhcHBlbmQuc3VicGF0aHMgPSBsYXBwZW5kKGFwcGVuZC5zdWJwYXRocywgcGF0 aCk7CiAJCX0KIAkJcGF0aCA9IChQYXRoICopCiAJCQljcmVhdGVfYXBwZW5kX3BhdGgocm9vdCwK IAkJCQkJCQkgICBncm91cGVkX3JlbCwKLQkJCQkJCQkgICBwYXRocywKLQkJCQkJCQkgICBOSUws CisJCQkJCQkJICAgYXBwZW5kLAogCQkJCQkJCSAgIE5JTCwKIAkJCQkJCQkgICBOVUxMLAogCQkJ CQkJCSAgIDAsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcHJlcC9wcmVwdW5p b24uYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3ByZXB1bmlvbi5jCmluZGV4IDc4Yzk1 YzM2ZGQ1Li5mNTBjMjk2ZTNkOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3By ZXAvcHJlcHVuaW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcHVuaW9u LmMKQEAgLTY5Niw5ICs2OTYsOSBAQCBnZW5lcmF0ZV91bmlvbl9wYXRocyhTZXRPcGVyYXRpb25T dG10ICpvcCwgUGxhbm5lckluZm8gKnJvb3QsCiAJTGlzdENlbGwgICAqbGM7CiAJTGlzdENlbGwg ICAqbGMyOwogCUxpc3RDZWxsICAgKmxjMzsKLQlMaXN0CSAgICpjaGVhcGVzdF9wYXRobGlzdCA9 IE5JTDsKLQlMaXN0CSAgICpvcmRlcmVkX3BhdGhsaXN0ID0gTklMOwotCUxpc3QJICAgKnBhcnRp YWxfcGF0aGxpc3QgPSBOSUw7CisJQXBwZW5kUGF0aElucHV0IGNoZWFwZXN0ID0gezB9OworCUFw cGVuZFBhdGhJbnB1dCBvcmRlcmVkID0gezB9OworCUFwcGVuZFBhdGhJbnB1dCBwYXJ0aWFsID0g ezB9OwogCWJvb2wJCXBhcnRpYWxfcGF0aHNfdmFsaWQgPSB0cnVlOwogCWJvb2wJCWNvbnNpZGVy X3BhcmFsbGVsID0gdHJ1ZTsKIAlMaXN0CSAgICpyZWxsaXN0OwpAQCAtNzgzLDcgKzc4Myw3IEBA IGdlbmVyYXRlX3VuaW9uX3BhdGhzKFNldE9wZXJhdGlvblN0bXQgKm9wLCBQbGFubmVySW5mbyAq cm9vdCwKIAkJaWYgKGlzX2R1bW15X3JlbChyZWwpKQogCQkJY29udGludWU7CiAKLQkJY2hlYXBl c3RfcGF0aGxpc3QgPSBsYXBwZW5kKGNoZWFwZXN0X3BhdGhsaXN0LAorCQljaGVhcGVzdC5zdWJw YXRocyA9IGxhcHBlbmQoY2hlYXBlc3Quc3VicGF0aHMsCiAJCQkJCQkJCQlyZWwtPmNoZWFwZXN0 X3RvdGFsX3BhdGgpOwogCiAJCWlmICh0cnlfc29ydGVkKQpAQCAtNzk1LDcgKzc5NSw3IEBAIGdl bmVyYXRlX3VuaW9uX3BhdGhzKFNldE9wZXJhdGlvblN0bXQgKm9wLCBQbGFubmVySW5mbyAqcm9v dCwKIAkJCQkJCQkJCQkJCQkJICBmYWxzZSk7CiAKIAkJCWlmIChvcmRlcmVkX3BhdGggIT0gTlVM TCkKLQkJCQlvcmRlcmVkX3BhdGhsaXN0ID0gbGFwcGVuZChvcmRlcmVkX3BhdGhsaXN0LCBvcmRl cmVkX3BhdGgpOworCQkJCW9yZGVyZWQuc3VicGF0aHMgPSBsYXBwZW5kKG9yZGVyZWQuc3VicGF0 aHMsIG9yZGVyZWRfcGF0aCk7CiAJCQllbHNlCiAJCQl7CiAJCQkJLyoKQEAgLTgxOCwyMCArODE4 LDIwIEBAIGdlbmVyYXRlX3VuaW9uX3BhdGhzKFNldE9wZXJhdGlvblN0bXQgKm9wLCBQbGFubmVy SW5mbyAqcm9vdCwKIAkJCWVsc2UgaWYgKHJlbC0+cGFydGlhbF9wYXRobGlzdCA9PSBOSUwpCiAJ CQkJcGFydGlhbF9wYXRoc192YWxpZCA9IGZhbHNlOwogCQkJZWxzZQotCQkJCXBhcnRpYWxfcGF0 aGxpc3QgPSBsYXBwZW5kKHBhcnRpYWxfcGF0aGxpc3QsCi0JCQkJCQkJCQkJICAgbGluaXRpYWwo cmVsLT5wYXJ0aWFsX3BhdGhsaXN0KSk7CisJCQkJcGFydGlhbC5wYXJ0aWFsX3N1YnBhdGhzID0g bGFwcGVuZChwYXJ0aWFsLnBhcnRpYWxfc3VicGF0aHMsCisJCQkJCQkJCQkJCQkgICBsaW5pdGlh bChyZWwtPnBhcnRpYWxfcGF0aGxpc3QpKTsKIAkJfQogCX0KIAogCS8qIEJ1aWxkIHJlc3VsdCBy ZWxhdGlvbi4gKi8KIAlyZXN1bHRfcmVsID0gZmV0Y2hfdXBwZXJfcmVsKHJvb3QsIFVQUEVSUkVM X1NFVE9QLCByZWxpZHMpOwogCXJlc3VsdF9yZWwtPnJlbHRhcmdldCA9IGNyZWF0ZV9zZXRvcF9w YXRodGFyZ2V0KHJvb3QsIHRsaXN0LAotCQkJCQkJCQkJCQkJCWNoZWFwZXN0X3BhdGhsaXN0KTsK KwkJCQkJCQkJCQkJCQljaGVhcGVzdC5zdWJwYXRocyk7CiAJcmVzdWx0X3JlbC0+Y29uc2lkZXJf cGFyYWxsZWwgPSBjb25zaWRlcl9wYXJhbGxlbDsKIAlyZXN1bHRfcmVsLT5jb25zaWRlcl9zdGFy dHVwID0gKHJvb3QtPnR1cGxlX2ZyYWN0aW9uID4gMCk7CiAKIAkvKiBJZiBhbGwgVU5JT04gY2hp bGRyZW4gd2VyZSBkdW1teSByZWxzLCBtYWtlIHRoZSByZXN1bHRpbmcgcmVsIGR1bW15ICovCi0J aWYgKGNoZWFwZXN0X3BhdGhsaXN0ID09IE5JTCkKKwlpZiAoY2hlYXBlc3Quc3VicGF0aHMgPT0g TklMKQogCXsKIAkJbWFya19kdW1teV9yZWwocmVzdWx0X3JlbCk7CiAKQEAgLTg0Miw4ICs4NDIs OCBAQCBnZW5lcmF0ZV91bmlvbl9wYXRocyhTZXRPcGVyYXRpb25TdG10ICpvcCwgUGxhbm5lcklu Zm8gKnJvb3QsCiAJICogQXBwZW5kIHRoZSBjaGlsZCByZXN1bHRzIHRvZ2V0aGVyIHVzaW5nIHRo ZSBjaGVhcGVzdCBwYXRocyBmcm9tIGVhY2gKIAkgKiB1bmlvbiBjaGlsZC4KIAkgKi8KLQlhcGF0 aCA9IChQYXRoICopIGNyZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZXN1bHRfcmVsLCBjaGVhcGVz dF9wYXRobGlzdCwKLQkJCQkJCQkJCQlOSUwsIE5JTCwgTlVMTCwgMCwgZmFsc2UsIC0xKTsKKwlh cGF0aCA9IChQYXRoICopIGNyZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZXN1bHRfcmVsLCBjaGVh cGVzdCwKKwkJCQkJCQkJCQlOSUwsIE5VTEwsIDAsIGZhbHNlLCAtMSk7CiAKIAkvKgogCSAqIEVz dGltYXRlIG51bWJlciBvZiBncm91cHMuICBGb3Igbm93IHdlIGp1c3QgYXNzdW1lIHRoZSBvdXRw dXQgaXMgdW5pcXVlCkBAIC04NjIsNyArODYyLDcgQEAgZ2VuZXJhdGVfdW5pb25fcGF0aHMoU2V0 T3BlcmF0aW9uU3RtdCAqb3AsIFBsYW5uZXJJbmZvICpyb290LAogCQlpbnQJCQlwYXJhbGxlbF93 b3JrZXJzID0gMDsKIAogCQkvKiBGaW5kIHRoZSBoaWdoZXN0IG51bWJlciBvZiB3b3JrZXJzIHJl cXVlc3RlZCBmb3IgYW55IHN1YnBhdGguICovCi0JCWZvcmVhY2gobGMsIHBhcnRpYWxfcGF0aGxp c3QpCisJCWZvcmVhY2gobGMsIHBhcnRpYWwucGFydGlhbF9zdWJwYXRocykKIAkJewogCQkJUGF0 aAkgICAqc3VicGF0aCA9IGxmaXJzdChsYyk7CiAKQEAgLTg4MSwxNCArODgxLDE0IEBAIGdlbmVy YXRlX3VuaW9uX3BhdGhzKFNldE9wZXJhdGlvblN0bXQgKm9wLCBQbGFubmVySW5mbyAqcm9vdCwK IAkJaWYgKGVuYWJsZV9wYXJhbGxlbF9hcHBlbmQpCiAJCXsKIAkJCXBhcmFsbGVsX3dvcmtlcnMg PSBNYXgocGFyYWxsZWxfd29ya2VycywKLQkJCQkJCQkJICAgcGdfbGVmdG1vc3Rfb25lX3BvczMy KGxpc3RfbGVuZ3RoKHBhcnRpYWxfcGF0aGxpc3QpKSArIDEpOworCQkJCQkJCQkgICBwZ19sZWZ0 bW9zdF9vbmVfcG9zMzIobGlzdF9sZW5ndGgocGFydGlhbC5wYXJ0aWFsX3N1YnBhdGhzKSkgKyAx KTsKIAkJCXBhcmFsbGVsX3dvcmtlcnMgPSBNaW4ocGFyYWxsZWxfd29ya2VycywKIAkJCQkJCQkJ ICAgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlcik7CiAJCX0KIAkJQXNzZXJ0KHBhcmFs bGVsX3dvcmtlcnMgPiAwKTsKIAogCQlwYXBhdGggPSAoUGF0aCAqKQotCQkJY3JlYXRlX2FwcGVu ZF9wYXRoKHJvb3QsIHJlc3VsdF9yZWwsIE5JTCwgcGFydGlhbF9wYXRobGlzdCwKKwkJCWNyZWF0 ZV9hcHBlbmRfcGF0aChyb290LCByZXN1bHRfcmVsLCBwYXJ0aWFsLAogCQkJCQkJCSAgIE5JTCwg TlVMTCwgcGFyYWxsZWxfd29ya2VycywKIAkJCQkJCQkgICBlbmFibGVfcGFyYWxsZWxfYXBwZW5k LCAtMSk7CiAJCWdwYXRoID0gKFBhdGggKikKQEAgLTkwMSw3ICs5MDEsNyBAQCBnZW5lcmF0ZV91 bmlvbl9wYXRocyhTZXRPcGVyYXRpb25TdG10ICpvcCwgUGxhbm5lckluZm8gKnJvb3QsCiAJCWRv dWJsZQkJZE51bUdyb3VwczsKIAkJYm9vbAkJY2FuX3NvcnQgPSBncm91cGluZ19pc19zb3J0YWJs ZShncm91cExpc3QpOwogCQlib29sCQljYW5faGFzaCA9IGdyb3VwaW5nX2lzX2hhc2hhYmxlKGdy b3VwTGlzdCk7Ci0JCVBhdGgJICAgKmZpcnN0X3BhdGggPSBsaW5pdGlhbChjaGVhcGVzdF9wYXRo bGlzdCk7CisJCVBhdGgJICAgKmZpcnN0X3BhdGggPSBsaW5pdGlhbChjaGVhcGVzdC5zdWJwYXRo cyk7CiAKIAkJLyoKIAkJICogRXN0aW1hdGUgdGhlIG51bWJlciBvZiBVTklPTiBvdXRwdXQgcm93 cy4gIEluIHRoZSBjYXNlIHdoZW4gb25seSBhCkBAIC05MTEsNyArOTExLDcgQEAgZ2VuZXJhdGVf dW5pb25fcGF0aHMoU2V0T3BlcmF0aW9uU3RtdCAqb3AsIFBsYW5uZXJJbmZvICpyb290LAogCQkg KiBjb250YWluIFZhcnMgd2l0aCB2YXJubz09MCwgd2hpY2ggZXN0aW1hdGVfbnVtX2dyb3Vwcygp IHdvdWxkbid0CiAJCSAqIGxpa2UuCiAJCSAqLwotCQlpZiAobGlzdF9sZW5ndGgoY2hlYXBlc3Rf cGF0aGxpc3QpID09IDEgJiYKKwkJaWYgKGxpc3RfbGVuZ3RoKGNoZWFwZXN0LnN1YnBhdGhzKSA9 PSAxICYmCiAJCQlmaXJzdF9wYXRoLT5wYXJlbnQtPnJlbG9wdGtpbmQgIT0gUkVMT1BUX1VQUEVS X1JFTCkKIAkJewogCQkJZE51bUdyb3VwcyA9IGVzdGltYXRlX251bV9ncm91cHMocm9vdCwKQEAg LTEwMTcsNyArMTAxNyw4IEBAIGdlbmVyYXRlX3VuaW9uX3BhdGhzKFNldE9wZXJhdGlvblN0bXQg Km9wLCBQbGFubmVySW5mbyAqcm9vdCwKIAogCQkJcGF0aCA9IChQYXRoICopIGNyZWF0ZV9tZXJn ZV9hcHBlbmRfcGF0aChyb290LAogCQkJCQkJCQkJCQkJCSByZXN1bHRfcmVsLAotCQkJCQkJCQkJ CQkJCSBvcmRlcmVkX3BhdGhsaXN0LAorCQkJCQkJCQkJCQkJCSBvcmRlcmVkLnN1YnBhdGhzLAor CQkJCQkJCQkJCQkJCSBOSUwsCiAJCQkJCQkJCQkJCQkJIHVuaW9uX3BhdGhrZXlzLAogCQkJCQkJ CQkJCQkJCSBOVUxMKTsKIApAQCAtMTIxNiw2ICsxMjE3LDkgQEAgZ2VuZXJhdGVfbm9udW5pb25f cGF0aHMoU2V0T3BlcmF0aW9uU3RtdCAqb3AsIFBsYW5uZXJJbmZvICpyb290LAogCQkJaWYgKG9w LT5hbGwpCiAJCQl7CiAJCQkJUGF0aAkgICAqYXBhdGg7CisJCQkJQXBwZW5kUGF0aElucHV0IGFw cGVuZCA9IHswfTsKKworCQkJCWFwcGVuZC5zdWJwYXRocyA9IGxpc3RfbWFrZTEobHBhdGgpOwog CiAJCQkJLyoKIAkJCQkgKiBFWENFUFQgQUxMOiBJZiB0aGUgcmlnaHQtaGFuZCBpbnB1dCBpcyBk dW1teSB0aGVuIHdlIGNhbgpAQCAtMTIyNCw4ICsxMjI4LDkgQEAgZ2VuZXJhdGVfbm9udW5pb25f cGF0aHMoU2V0T3BlcmF0aW9uU3RtdCAqb3AsIFBsYW5uZXJJbmZvICpyb290LAogCQkJCSAqIGJl dHdlZW4gdGhlIHNldCBvcCB0YXJnZXRsaXN0IGFuZCB0aGUgdGFyZ2V0bGlzdCBvZiB0aGUKIAkJ CQkgKiBsZWZ0IGlucHV0LiAgVGhlIEFwcGVuZCB3aWxsIGJlIHJlbW92ZWQgaW4gc2V0cmVmcy5j LgogCQkJCSAqLwotCQkJCWFwYXRoID0gKFBhdGggKikgY3JlYXRlX2FwcGVuZF9wYXRoKHJvb3Qs IHJlc3VsdF9yZWwsIGxpc3RfbWFrZTEobHBhdGgpLAotCQkJCQkJCQkJCQkJCU5JTCwgTklMLCBO VUxMLCAwLCBmYWxzZSwgLTEpOworCQkJCWFwYXRoID0gKFBhdGggKikgY3JlYXRlX2FwcGVuZF9w YXRoKHJvb3QsIHJlc3VsdF9yZWwsCisJCQkJCQkJCQkJCQkJYXBwZW5kLCBOSUwsIE5VTEwsIDAs CisJCQkJCQkJCQkJCQkJZmFsc2UsIC0xKTsKIAogCQkJCWFkZF9wYXRoKHJlc3VsdF9yZWwsIGFw YXRoKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUu YyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMKaW5kZXggMmU5YmVjZjMx MTYuLmRhMzA2Y2QzOWViIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9w YXRobm9kZS5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMKQEAg LTEzMDAsNyArMTMwMCw3IEBAIGNyZWF0ZV90aWRyYW5nZXNjYW5fcGF0aChQbGFubmVySW5mbyAq cm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogQXBwZW5kUGF0aCAqCiBjcmVhdGVfYXBwZW5kX3BhdGgo UGxhbm5lckluZm8gKnJvb3QsCiAJCQkJICAgUmVsT3B0SW5mbyAqcmVsLAotCQkJCSAgIExpc3Qg KnN1YnBhdGhzLCBMaXN0ICpwYXJ0aWFsX3N1YnBhdGhzLAorCQkJCSAgIEFwcGVuZFBhdGhJbnB1 dCBpbnB1dCwKIAkJCQkgICBMaXN0ICpwYXRoa2V5cywgUmVsaWRzIHJlcXVpcmVkX291dGVyLAog CQkJCSAgIGludCBwYXJhbGxlbF93b3JrZXJzLCBib29sIHBhcmFsbGVsX2F3YXJlLAogCQkJCSAg IGRvdWJsZSByb3dzKQpAQCAtMTMxMCw2ICsxMzEwLDcgQEAgY3JlYXRlX2FwcGVuZF9wYXRoKFBs YW5uZXJJbmZvICpyb290LAogCiAJQXNzZXJ0KCFwYXJhbGxlbF9hd2FyZSB8fCBwYXJhbGxlbF93 b3JrZXJzID4gMCk7CiAKKwlwYXRobm9kZS0+Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgPSBpbnB1 dC5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0czsKIAlwYXRobm9kZS0+cGF0aC5wYXRodHlwZSA9IFRf QXBwZW5kOwogCXBhdGhub2RlLT5wYXRoLnBhcmVudCA9IHJlbDsKIAlwYXRobm9kZS0+cGF0aC5w YXRodGFyZ2V0ID0gcmVsLT5yZWx0YXJnZXQ7CkBAIC0xMzI1LDcgKzEzMjYsNyBAQCBjcmVhdGVf YXBwZW5kX3BhdGgoUGxhbm5lckluZm8gKnJvb3QsCiAJICogb24gdGhlIHNpbXBsZXIgZ2V0X2Fw cGVuZHJlbF9wYXJhbXBhdGhpbmZvLiAgVGhlcmUncyBubyBwb2ludCBpbiBkb2luZwogCSAqIHRo ZSBtb3JlIGV4cGVuc2l2ZSB0aGluZyBmb3IgYSBkdW1teSBwYXRoLCBlaXRoZXIuCiAJICovCi0J aWYgKHJlbC0+cmVsb3B0a2luZCA9PSBSRUxPUFRfQkFTRVJFTCAmJiByb290ICYmIHN1YnBhdGhz ICE9IE5JTCkKKwlpZiAocmVsLT5yZWxvcHRraW5kID09IFJFTE9QVF9CQVNFUkVMICYmIHJvb3Qg JiYgaW5wdXQuc3VicGF0aHMgIT0gTklMKQogCQlwYXRobm9kZS0+cGF0aC5wYXJhbV9pbmZvID0g Z2V0X2Jhc2VyZWxfcGFyYW1wYXRoaW5mbyhyb290LAogCQkJCQkJCQkJCQkJCQkJICByZWwsCiAJ CQkJCQkJCQkJCQkJCQkgIHJlcXVpcmVkX291dGVyKTsKQEAgLTEzNTYsMTEgKzEzNTcsMTEgQEAg Y3JlYXRlX2FwcGVuZF9wYXRoKFBsYW5uZXJJbmZvICpyb290LAogCQkgKi8KIAkJQXNzZXJ0KHBh dGhrZXlzID09IE5JTCk7CiAKLQkJbGlzdF9zb3J0KHN1YnBhdGhzLCBhcHBlbmRfdG90YWxfY29z dF9jb21wYXJlKTsKLQkJbGlzdF9zb3J0KHBhcnRpYWxfc3VicGF0aHMsIGFwcGVuZF9zdGFydHVw X2Nvc3RfY29tcGFyZSk7CisJCWxpc3Rfc29ydChpbnB1dC5zdWJwYXRocywgYXBwZW5kX3RvdGFs X2Nvc3RfY29tcGFyZSk7CisJCWxpc3Rfc29ydChpbnB1dC5wYXJ0aWFsX3N1YnBhdGhzLCBhcHBl bmRfc3RhcnR1cF9jb3N0X2NvbXBhcmUpOwogCX0KLQlwYXRobm9kZS0+Zmlyc3RfcGFydGlhbF9w YXRoID0gbGlzdF9sZW5ndGgoc3VicGF0aHMpOwotCXBhdGhub2RlLT5zdWJwYXRocyA9IGxpc3Rf Y29uY2F0KHN1YnBhdGhzLCBwYXJ0aWFsX3N1YnBhdGhzKTsKKwlwYXRobm9kZS0+Zmlyc3RfcGFy dGlhbF9wYXRoID0gbGlzdF9sZW5ndGgoaW5wdXQuc3VicGF0aHMpOworCXBhdGhub2RlLT5zdWJw YXRocyA9IGxpc3RfY29uY2F0KGlucHV0LnN1YnBhdGhzLCBpbnB1dC5wYXJ0aWFsX3N1YnBhdGhz KTsKIAogCS8qCiAJICogQXBwbHkgcXVlcnktd2lkZSBMSU1JVCBpZiBrbm93biBhbmQgcGF0aCBp cyBmb3Igc29sZSBiYXNlIHJlbGF0aW9uLgpAQCAtMTQ3Miw2ICsxNDczLDcgQEAgTWVyZ2VBcHBl bmRQYXRoICoKIGNyZWF0ZV9tZXJnZV9hcHBlbmRfcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAkJ CQkJCSBSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkgTGlzdCAqc3VicGF0aHMsCisJCQkJCQkgTGlz dCAqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMsCiAJCQkJCQkgTGlzdCAqcGF0aGtleXMsCiAJCQkJ CQkgUmVsaWRzIHJlcXVpcmVkX291dGVyKQogewpAQCAtMTQ4Nyw2ICsxNDg5LDcgQEAgY3JlYXRl X21lcmdlX2FwcGVuZF9wYXRoKFBsYW5uZXJJbmZvICpyb290LAogCSAqLwogCUFzc2VydChibXNf aXNfZW1wdHkocmVsLT5sYXRlcmFsX3JlbGlkcykgJiYgYm1zX2lzX2VtcHR5KHJlcXVpcmVkX291 dGVyKSk7CiAKKwlwYXRobm9kZS0+Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgPSBjaGlsZF9hcHBl bmRfcmVsaWRfc2V0czsKIAlwYXRobm9kZS0+cGF0aC5wYXRodHlwZSA9IFRfTWVyZ2VBcHBlbmQ7 CiAJcGF0aG5vZGUtPnBhdGgucGFyZW50ID0gcmVsOwogCXBhdGhub2RlLT5wYXRoLnBhdGh0YXJn ZXQgPSByZWwtPnJlbHRhcmdldDsKQEAgLTM5MjYsMTEgKzM5MjksMTIgQEAgcmVwYXJhbWV0ZXJp emVfcGF0aChQbGFubmVySW5mbyAqcm9vdCwgUGF0aCAqcGF0aCwKIAkJY2FzZSBUX0FwcGVuZDoK IAkJCXsKIAkJCQlBcHBlbmRQYXRoICphcGF0aCA9IChBcHBlbmRQYXRoICopIHBhdGg7Ci0JCQkJ TGlzdAkgICAqY2hpbGRwYXRocyA9IE5JTDsKLQkJCQlMaXN0CSAgICpwYXJ0aWFscGF0aHMgPSBO SUw7CisJCQkJQXBwZW5kUGF0aElucHV0IG5ld19hcHBlbmQgPSB7MH07CiAJCQkJaW50CQkJaTsK IAkJCQlMaXN0Q2VsbCAgICpsYzsKIAorCQkJCW5ld19hcHBlbmQuY2hpbGRfYXBwZW5kX3JlbGlk X3NldHMgPSBhcGF0aC0+Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHM7CisKIAkJCQkvKiBSZXBhcmFt ZXRlcml6ZSB0aGUgY2hpbGRyZW4gKi8KIAkJCQlpID0gMDsKIAkJCQlmb3JlYWNoKGxjLCBhcGF0 aC0+c3VicGF0aHMpCkBAIC0zOTQ0LDEzICszOTQ4LDEzIEBAIHJlcGFyYW1ldGVyaXplX3BhdGgo UGxhbm5lckluZm8gKnJvb3QsIFBhdGggKnBhdGgsCiAJCQkJCQlyZXR1cm4gTlVMTDsKIAkJCQkJ LyogV2UgaGF2ZSB0byByZS1zcGxpdCB0aGUgcmVndWxhciBhbmQgcGFydGlhbCBwYXRocyAqLwog CQkJCQlpZiAoaSA8IGFwYXRoLT5maXJzdF9wYXJ0aWFsX3BhdGgpCi0JCQkJCQljaGlsZHBhdGhz ID0gbGFwcGVuZChjaGlsZHBhdGhzLCBzcGF0aCk7CisJCQkJCQluZXdfYXBwZW5kLnN1YnBhdGhz ID0gbGFwcGVuZChuZXdfYXBwZW5kLnN1YnBhdGhzLCBzcGF0aCk7CiAJCQkJCWVsc2UKLQkJCQkJ CXBhcnRpYWxwYXRocyA9IGxhcHBlbmQocGFydGlhbHBhdGhzLCBzcGF0aCk7CisJCQkJCQluZXdf YXBwZW5kLnBhcnRpYWxfc3VicGF0aHMgPSBsYXBwZW5kKG5ld19hcHBlbmQucGFydGlhbF9zdWJw YXRocywgc3BhdGgpOwogCQkJCQlpKys7CiAJCQkJfQogCQkJCXJldHVybiAoUGF0aCAqKQotCQkJ CQljcmVhdGVfYXBwZW5kX3BhdGgocm9vdCwgcmVsLCBjaGlsZHBhdGhzLCBwYXJ0aWFscGF0aHMs CisJCQkJCWNyZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZWwsIG5ld19hcHBlbmQsCiAJCQkJCQkJ CQkgICBhcGF0aC0+cGF0aC5wYXRoa2V5cywgcmVxdWlyZWRfb3V0ZXIsCiAJCQkJCQkJCQkgICBh cGF0aC0+cGF0aC5wYXJhbGxlbF93b3JrZXJzLAogCQkJCQkJCQkJICAgYXBhdGgtPnBhdGgucGFy YWxsZWxfYXdhcmUsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCBi L3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCmluZGV4IDUyYmU1MWY1Yjg4Li5hNWY5NTM1 ODg2NyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKKysrIGIvc3Jj L2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAgLTIxNzIsNiArMjE3MiwxMiBAQCB0eXBlZGVm IHN0cnVjdCBDdXN0b21QYXRoCiAgKiBGb3IgcGFydGlhbCBBcHBlbmQsICdzdWJwYXRocycgY29u dGFpbnMgbm9uLXBhcnRpYWwgc3VicGF0aHMgZm9sbG93ZWQgYnkKICAqIHBhcnRpYWwgc3VicGF0 aHMuCiAgKgorICogV2hlbmV2ZXIgYWNjdW11bGF0ZV9hcHBlbmRfc3VicGF0aCgpIGFsbG93cyB1 cyB0byBjb25zb2xpZGF0ZSBtdWx0aXBsZQorICogbGV2ZWxzIG9mIEFwcGVuZCBwYXRocyBkb3du IHRvIG9uZSwgd2Ugc3RvcmUgdGhlIFJUSSBzZXRzIGZvciB0aGUgb21pdHRlZAorICogcGF0aHMg aW4gY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMuIFRoaXMgaXMgbm90IG5lY2Vzc2FyeSBmb3IgcGxh bm5pbmcgb3IKKyAqIGV4ZWN1dGlvbjsgd2UgZG8gaXQgZm9yIHRoZSBiZW5lZml0IG9mIGNvZGUg dGhhdCB3YW50cyB0byBpbnNwZWN0IHRoZQorICogZmluYWwgcGxhbiBhbmQgdW5kZXJzdGFuZCBo b3cgaXQgY2FtZSB0byBiZS4KKyAqCiAgKiBOb3RlOiBpdCBpcyBwb3NzaWJsZSBmb3IgInN1YnBh dGhzIiB0byBjb250YWluIG9ubHkgb25lLCBvciBldmVuIG5vLAogICogZWxlbWVudHMuICBUaGVz ZSBjYXNlcyBhcmUgb3B0aW1pemVkIGR1cmluZyBjcmVhdGVfYXBwZW5kX3BsYW4uCiAgKiBJbiBw YXJ0aWN1bGFyLCBhbiBBcHBlbmRQYXRoIHdpdGggbm8gc3VicGF0aHMgaXMgYSAiZHVtbXkiIHBh dGggdGhhdApAQCAtMjE4Nyw2ICsyMTkzLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQXBwZW5kUGF0aAog CS8qIEluZGV4IG9mIGZpcnN0IHBhcnRpYWwgcGF0aCBpbiBzdWJwYXRoczsgbGlzdF9sZW5ndGgo c3VicGF0aHMpIGlmIG5vbmUgKi8KIAlpbnQJCQlmaXJzdF9wYXJ0aWFsX3BhdGg7CiAJQ2FyZGlu YWxpdHkgbGltaXRfdHVwbGVzOwkvKiBoYXJkIGxpbWl0IG9uIG91dHB1dCB0dXBsZXMsIG9yIC0x ICovCisJTGlzdAkgICAqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHM7CiB9IEFwcGVuZFBhdGg7CiAK ICNkZWZpbmUgSVNfRFVNTVlfQVBQRU5EKHApIFwKQEAgLTIyMDMsMTIgKzIyMTAsMTUgQEAgZXh0 ZXJuIGJvb2wgaXNfZHVtbXlfcmVsKFJlbE9wdEluZm8gKnJlbCk7CiAvKgogICogTWVyZ2VBcHBl bmRQYXRoIHJlcHJlc2VudHMgYSBNZXJnZUFwcGVuZCBwbGFuLCBpZSwgdGhlIG1lcmdpbmcgb2Yg c29ydGVkCiAgKiByZXN1bHRzIGZyb20gc2V2ZXJhbCBtZW1iZXIgcGxhbnMgdG8gcHJvZHVjZSBz aW1pbGFybHktc29ydGVkIG91dHB1dC4KKyAqCisgKiBjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyBo YXMgdGhlIHNhbWUgbWVhbmluZyBoZXJlIGFzIGZvciBBcHBlbmRQYXRoLgogICovCiB0eXBlZGVm IHN0cnVjdCBNZXJnZUFwcGVuZFBhdGgKIHsKIAlQYXRoCQlwYXRoOwogCUxpc3QJICAgKnN1YnBh dGhzOwkJLyogbGlzdCBvZiBjb21wb25lbnQgUGF0aHMgKi8KIAlDYXJkaW5hbGl0eSBsaW1pdF90 dXBsZXM7CS8qIGhhcmQgbGltaXQgb24gb3V0cHV0IHR1cGxlcywgb3IgLTEgKi8KKwlMaXN0CSAg ICpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0czsKIH0gTWVyZ2VBcHBlbmRQYXRoOwogCiAvKgpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rl cy9wbGFubm9kZXMuaAppbmRleCAwYWQwZmY0MDRjOS4uNDg1YmVjNWFhYmQgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3Bs YW5ub2Rlcy5oCkBAIC0zOTQsOSArMzk0LDE2IEBAIHN0cnVjdCBQYXJ0aXRpb25QcnVuZUluZm87 CQkvKiBmb3J3YXJkIHJlZmVyZW5jZSB0byBzdHJ1Y3QgYmVsb3cgKi8KIHR5cGVkZWYgc3RydWN0 IEFwcGVuZAogewogCVBsYW4JCXBsYW47CisKIAkvKiBSVElzIG9mIGFwcGVuZHJlbChzKSBmb3Jt ZWQgYnkgdGhpcyBub2RlICovCiAJQml0bWFwc2V0ICAqYXBwcmVsaWRzOworCisJLyogc2V0cyBv ZiBSVElzIG9mIGFwcGVuZHJlbHMgY29uc29saWRhdGVkIGludG8gdGhpcyBub2RlICovCisJTGlz dAkgICAqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHM7CisKKwkvKiBwbGFucyB0byBydW4gKi8KIAlM aXN0CSAgICphcHBlbmRwbGFuczsKKwogCS8qICMgb2YgYXN5bmNocm9ub3VzIHBsYW5zICovCiAJ aW50CQkJbmFzeW5jcGxhbnM7CiAKQEAgLTQyNiw2ICs0MzMsMTAgQEAgdHlwZWRlZiBzdHJ1Y3Qg TWVyZ2VBcHBlbmQKIAkvKiBSVElzIG9mIGFwcGVuZHJlbChzKSBmb3JtZWQgYnkgdGhpcyBub2Rl ICovCiAJQml0bWFwc2V0ICAqYXBwcmVsaWRzOwogCisJLyogc2V0cyBvZiBSVElzIG9mIGFwcGVu ZHJlbHMgY29uc29saWRhdGVkIGludG8gdGhpcyBub2RlICovCisJTGlzdAkgICAqY2hpbGRfYXBw ZW5kX3JlbGlkX3NldHM7CisKKwkvKiBwbGFucyB0byBydW4gKi8KIAlMaXN0CSAgICptZXJnZXBs YW5zOwogCiAJLyogdGhlc2UgZmllbGRzIGFyZSBqdXN0IGxpa2UgdGhlIHNvcnQta2V5IGluZm8g aW4gc3RydWN0IFNvcnQ6ICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0 aG5vZGUuaCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5oCmluZGV4IDliMmM0YjNl N2VmLi43ZDNlN2IzMmM1NiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhu b2RlLmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmgKQEAgLTE3LDYgKzE3 LDIwIEBACiAjaW5jbHVkZSAibm9kZXMvYml0bWFwc2V0LmgiCiAjaW5jbHVkZSAibm9kZXMvcGF0 aG5vZGVzLmgiCiAKKy8qCisgKiBFdmVyeXRoaW5nIGluIHN1YnBhdGhzIG9yIHBhcnRpYWxfc3Vi cGF0aHMgd2lsbCBiZWNvbWUgcGFydCBvZiB0aGUKKyAqIEFwcGVuZCBub2RlJ3Mgc3VicGF0aHMg bGlzdC4gUGFydGlhbCBhbmQgbm9uLXBhcnRpYWwgc3VicGF0aHMgY2FuIGJlCisgKiBtaXhlZCBp biB0aGUgc2FtZSBBcHBlbmQgbm9kZSBvbmx5IGlmIGl0IGlzIHBhcmFsbGVsLWF3YXJlLgorICoK KyAqIFNlZSB0aGUgY29tbWVudHMgZm9yIEFwcGVuZFBhdGggZm9yIHRoZSBtZWFuaW5nIGFuZCBw dXJwb3NlIG9mIHRoZQorICogY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgZmllbGQuCisgKi8KK3R5 cGVkZWYgc3RydWN0IEFwcGVuZFBhdGhJbnB1dAoreworCUxpc3QJICAgKnN1YnBhdGhzOworCUxp c3QJICAgKnBhcnRpYWxfc3VicGF0aHM7CisJTGlzdAkgICAqY2hpbGRfYXBwZW5kX3JlbGlkX3Nl dHM7Cit9IEFwcGVuZFBhdGhJbnB1dDsKIAogLyoKICAqIHByb3RvdHlwZXMgZm9yIHBhdGhub2Rl LmMKQEAgLTY5LDE0ICs4MywxNiBAQCBleHRlcm4gVGlkUmFuZ2VQYXRoICpjcmVhdGVfdGlkcmFu Z2VzY2FuX3BhdGgoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCQkJCSAgTGlzdCAqdGlkcmFu Z2VxdWFscywKIAkJCQkJCQkJCQkJICBSZWxpZHMgcmVxdWlyZWRfb3V0ZXIsCiAJCQkJCQkJCQkJ CSAgaW50IHBhcmFsbGVsX3dvcmtlcnMpOworCiBleHRlcm4gQXBwZW5kUGF0aCAqY3JlYXRlX2Fw cGVuZF9wYXRoKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCi0JCQkJCQkJCQkg IExpc3QgKnN1YnBhdGhzLCBMaXN0ICpwYXJ0aWFsX3N1YnBhdGhzLAorCQkJCQkJCQkJICBBcHBl bmRQYXRoSW5wdXQgaW5wdXQsCiAJCQkJCQkJCQkgIExpc3QgKnBhdGhrZXlzLCBSZWxpZHMgcmVx dWlyZWRfb3V0ZXIsCiAJCQkJCQkJCQkgIGludCBwYXJhbGxlbF93b3JrZXJzLCBib29sIHBhcmFs bGVsX2F3YXJlLAogCQkJCQkJCQkJICBkb3VibGUgcm93cyk7CiBleHRlcm4gTWVyZ2VBcHBlbmRQ YXRoICpjcmVhdGVfbWVyZ2VfYXBwZW5kX3BhdGgoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJ CQkJCQkgUmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJCQkJCQkJIExpc3QgKnN1YnBhdGhzLAorCQkJ CQkJCQkJCQkJIExpc3QgKmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzLAogCQkJCQkJCQkJCQkJIExp c3QgKnBhdGhrZXlzLAogCQkJCQkJCQkJCQkJIFJlbGlkcyByZXF1aXJlZF9vdXRlcik7CiBleHRl cm4gR3JvdXBSZXN1bHRQYXRoICpjcmVhdGVfZ3JvdXBfcmVzdWx0X3BhdGgoUGxhbm5lckluZm8g KnJvb3QsCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3Ny Yy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IGE4Y2MxMGQwNjZmLi45MDIwOTYw MmQ0MiAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIv c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTEyNSw2ICsxMjUsNyBAQCBBbmxJ bmRleERhdGEKIEFueUFycmF5VHlwZQogQXBwZW5kCiBBcHBlbmRQYXRoCitBcHBlbmRQYXRoSW5w dXQKIEFwcGVuZFJlbEluZm8KIEFwcGVuZFN0YXRlCiBBcHBseUVycm9yQ2FsbGJhY2tBcmcKLS0g CjIuNTEuMAoK --000000000000c84af706486e3644 Content-Type: application/octet-stream; name="v10-0005-WIP-Add-pg_plan_advice-contrib-module.patch" Content-Disposition: attachment; filename="v10-0005-WIP-Add-pg_plan_advice-contrib-module.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkfk32qg4 RnJvbSA2MDExNjQwNWMwNGMxNWFjYTljMmQwZDFlZWJhNWY1YjhlZGM0NDJkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFRodSwgMTUgSmFuIDIwMjYgMDk6MjE6NTggLTA1MDAKU3ViamVjdDogW1BBVENIIHYxMCA1 LzVdIFdJUDogQWRkIHBnX3BsYW5fYWR2aWNlIGNvbnRyaWIgbW9kdWxlLgoKUHJvdmlkZSBhIGZh Y2lsaXR5IHRoYXQgKDEpIGNhbiBiZSB1c2VkIHRvIHN0YWJpbGl6ZSBjZXJ0YWluIHBsYW4gY2hv aWNlcwpzbyB0aGF0IHRoZSBwbGFubmVyIGNhbm5vdCByZXZlcnNlIGNvdXJzZSB3aXRob3V0IGF1 dGhvcml6YXRpb24gYW5kCigyKSBjYW4gYmUgdXNlZCBieSBrbm93bGVkZ2VhYmxlIHVzZXJzIHRv IGluc2lzdCBvbiBwbGFuIGNob2ljZXMgY29udHJhcnkKdG8gd2hhdCB0aGUgcGxhbm5lciBiZWxp ZXZlcyBiZXN0LiBJbiBib3RoIGNhc2VzLCB0ZXJyaWJsZSBvdXRjb21lcyBhcmUKcG9zc2libGU6 IHVzZXJzIHNob3VsZCB0aGluayB0d2ljZSBhbmQgcGVyaGFwcyB0aHJlZSB0aW1lcyBiZWZvcmUK Y29uc3RyYWluaW5nIHRoZSBwbGFubmVyJ3MgYWJpbGl0eSB0byBkbyBhcyBpdCB0aGlua3MgYmVz dDsgbmV2ZXJ0aGVsZXNzLAp0aGVyZSBhcmUgcHJvYmxlbXMgdGhhdCBhcmUgbXVjaCBtb3JlIGVh c2lseSBzb2x2ZWQgd2l0aCB0aGVzZSBmYWNpbGl0aWVzCnRoYW4gd2l0aG91dCB0aGVtLgoKVGhp cyBwYXRjaCB0YWtlcyB0aGUgYXBwcm9hY2ggb2YgYW5hbHl6aW5nIGEgZmluaXNoZWQgcGxhbiB0 byBwcm9kdWNlCnRleHR1YWwgb3V0cHV0LCB3aGljaCB3ZSBjYWxsICJwbGFuIGFkdmljZSIsIHRo YXQgZGVzY3JpYmVzIGtleQpkZWNpc2lvbnMgbWFkZSBkdXJpbmcgcGxhbjsgaWYgdGhhdCBwbGFu IGFkdmljZSBpcyBwcm92aWRlZCBkdXJpbmcKZnV0dXJlIHBsYW5uaW5nIGN5Y2xlcywgaXQgd2ls bCBmb3JjZSB0aG9zZSBrZXkgZGVjaXNpb25zIHRvIGJlIG1hZGUgaW4KdGhlIHNhbWUgd2F5LiAg Tm90IGFsbCBwbGFubmVyIGRlY2lzaW9ucyBjYW4gYmUgY29udHJvbGxlZCB1c2luZyBhZHZpY2U7 CmZvciBleGFtcGxlLCBkZWNpc2lvbnMgYWJvdXQgaG93IHRvIHBlcmZvcm0gYWdncmVnYXRpb24g YXJlIGN1cnJlbnRseQpvdXQgb2Ygc2NvcGUsIGFzIGlzIGNob2ljZSBvZiBzb3J0IG9yZGVyLiBQ bGFuIGFkdmljZSBjYW4gYWxzbyBiZSBlZGl0ZWQKYnkgdGhlIHVzZXIsIG9yIGV2ZW4gd3JpdHRl biBmcm9tIHNjcmF0Y2ggaW4gc2ltcGxlIGNhc2VzLCBtYWtpbmcgaXQKcG9zc2libGUgdG8gZ2Vu ZXJhdGUgb3V0Y29tZXMgdGhhdCB0aGUgcGxhbm5lciB3b3VsZCBub3QgaGF2ZSBwcm9kdWNlZC4K UGFydGlhbCBhZHZpY2UgY2FuIGJlIHByb3ZpZGVkIHRvIGNvbnRyb2wgc29tZSBwbGFubmVyIG91 dGNvbWVzIGJ1dCBub3QKb3RoZXJzLgoKQ3VycmVudGx5LCBwbGFuIGFkdmljZSBpcyBmb2N1c2Vk IG9ubHkgb24gc3BlY2lmaWMgb3V0Y29tZXMsIHN1Y2ggYXMKdGhlIGNob2ljZSB0byB1c2UgYSBz ZXF1ZW50aWFsIHNjYW4gZm9yIGEgcGFydGljdWxhciByZWxhdGlvbiwgYW5kIG5vdApvbiBlc3Rp bWF0ZXMgdGhhdCBtaWdodCBjb250cmlidXRlIHRvIHRob3NlIG91dGNvbWVzLCBzdWNoIGFzIGEK cG9zc2libHktaW5jb3JyZWN0IHNlbGVjdGl2aXR5IGVzdGltYXRlLiBXaGlsZSBpdCB3b3VsZCBi ZSB1c2VmdWwgdG8KdXNlcnMgdG8gYmUgYWJsZSB0byBwcm92aWRlIHBsYW4gYWR2aWNlIHRoYXQg YWZmZWN0cyBzZWxlY3Rpdml0eQplc3RpbWF0ZXMgb3Igb3RoZXIgYXNwZWN0cyBvZiBjb3N0aW5n LCB0aGF0IGlzIG91dCBvZiBzY29wZSBmb3IgdGhpcwpjb21taXQuCgpGb3IgbW9yZSBkZXRhaWxz LCBzZWUgY29udHJpYi9wZ19wbGFuX2FkdmljZS9SRUFETUUuCgpOT1RFOiBUaGlzIGNvZGUgaXMg anVzdCBhIHByb29mIG9mIGNvbmNlcHQuIEEgYnVuY2ggb2YgdGhpbmdzIGRvbid0CndvcmsgYW5k IGEgbG90IG9mIHRoZSBjb2RlIG5lZWRzIGNsZWFudXAuIEl0IGhhcyBubyBTR01MIGRvY3VtZW50 YXRpb24KYW5kIG5vdCBlbm91Z2ggdGVzdCBjYXNlcywgYW5kIHNvbWUgb2YgdGhlIGV4aXN0aW5n IHRlc3QgY2FzZXMgZG9uJ3QKZG8gYXMgd2Ugd291bGQgaG9wZS4gS25vd24gcHJvYmxlbXMgYXJl IGNhbGxlZCBvdXQgYnkgWFhYLgoKUmV2aWV3ZWQtYnk6IEx1a2FzIEZpdHRsIDxsdWthc0BmaXR0 bC5jb20+ClJldmlld2VkLWJ5OiBKYWt1YiBXYXJ0YWsgPGpha3ViLndhcnRha0BlbnRlcnByaXNl ZGIuY29tPgpSZXZpZXdlZC1ieTogR3JlZyBCdXJkIDxncmVnQGJ1cmQubWU+ClJldmlld2VkLWJ5 OiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJwcmlzZWRiLmNvbT4KUmV2aWV3 ZWQtYnk6IEhhaWJvIFlhbiA8dHJpc3Rhbi55aW1AZ21haWwuY29tPgpSZXZpZXdlZC1ieTogRGlh biBGYXkgPGRpQG5tZmF5LmNvbT4KUmV2aWV3ZWQtYnk6IEFqYXkgUGFsIDxhamF5LnBhbC5rQGdt YWlsLmNvbT4KUmV2aWV3ZWQtYnk6IEpvaG4gTmF5bG9yIDxqb2huY25heWxvcmxzQGdtYWlsLmNv bT4KRGlzY3Vzc2lvbjogaHR0cDovL3Bvc3Rnci5lcy9tL0NBK1RnbW9aLUpoMVQ2UXlXb0NPRE1W UWRoVFVQWWthWmpXenR6UDFFbjQ9WkhvS1B6d0BtYWlsLmdtYWlsLmNvbQotLS0KIGNvbnRyaWIv TWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDEgKwogY29udHJpYi9t ZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMSArCiBjb250cmliL3Bn X3BsYW5fYWR2aWNlLy5naXRpZ25vcmUgICAgICAgICAgICAgfCAgICAzICsKIGNvbnRyaWIvcGdf cGxhbl9hZHZpY2UvTWFrZWZpbGUgICAgICAgICAgICAgICB8ICAgNTAgKwogY29udHJpYi9wZ19w bGFuX2FkdmljZS9SRUFETUUgICAgICAgICAgICAgICAgIHwgIDI3MyArKysKIGNvbnRyaWIvcGdf cGxhbl9hZHZpY2UvZXhwZWN0ZWQvZ2F0aGVyLm91dCAgICB8ICAzNDQgKysrCiAuLi4vcGdfcGxh bl9hZHZpY2UvZXhwZWN0ZWQvam9pbl9vcmRlci5vdXQgICAgfCAgMzU0ICsrKysKIC4uLi9wZ19w bGFuX2FkdmljZS9leHBlY3RlZC9qb2luX3N0cmF0ZWd5Lm91dCB8ICAyOTcgKysrCiAuLi4vZXhw ZWN0ZWQvbG9jYWxfY29sbGVjdG9yLm91dCAgICAgICAgICAgICAgfCAgIDY1ICsKIC4uLi9wZ19w bGFuX2FkdmljZS9leHBlY3RlZC9wYXJ0aXRpb253aXNlLm91dCB8ICAzNjQgKysrKwogY29udHJp Yi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9zY2FuLm91dCAgICAgIHwgIDc1NyArKysrKysrCiBj b250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3N5bnRheC5vdXQgICAgfCAgMTc0ICsrCiBj b250cmliL3BnX3BsYW5fYWR2aWNlL21lc29uLmJ1aWxkICAgICAgICAgICAgfCAgIDcwICsKIC4u Li9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS0tMS4wLnNxbCAgICB8ICAgNDIgKwogY29u dHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5jICAgICAgIHwgIDQ2OCArKysrCiBj b250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLmNvbnRyb2wgfCAgICA1ICsKIGNv bnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuaCAgICAgICB8ICAgNDAgKwogY29u dHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2FzdC5jICAgICAgICAgICAgIHwgIDM5NCArKysrCiBj b250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfYXN0LmggICAgICAgICAgICAgfCAgMjA0ICsrCiBj b250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfY29sbGVjdG9yLmMgICAgICAgfCAgNjM3ICsrKysr KwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2NvbGxlY3Rvci5oICAgICAgIHwgICAxOCAr CiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfaWRlbnRpZmllci5jICAgICAgfCAgNDc2ICsr KysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfaWRlbnRpZmllci5oICAgICAgfCAgIDUy ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9qb2luLmMgICAgICAgICAgICB8ICA2Mjkg KysrKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfam9pbi5oICAgICAgICAgICAgfCAg MTA1ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9vdXRwdXQuYyAgICAgICAgICB8ICA2 MjggKysrKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmggICAgICAgICAg fCAgIDIyICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wYXJzZXIueSAgICAgICAgICB8 ICAzNDAgKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5jICAgICAgICAg fCAxODc1ICsrKysrKysrKysrKysrKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGxh bm5lci5oICAgICAgICAgfCAgIDE3ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2Fu LmMgICAgICAgICAgICB8ICAzMDMgKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nh bi5oICAgICAgICAgICAgfCAgIDg1ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2Fu bmVyLmwgICAgICAgICB8ICAzMDIgKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfdHJv dmUuYyAgICAgICAgICAgfCAgNDkyICsrKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFf dHJvdmUuaCAgICAgICAgICAgfCAgMTEzICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV93 YWxrZXIuYyAgICAgICAgICB8ICA5NTMgKysrKysrKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNl L3BncGFfd2Fsa2VyLmggICAgICAgICAgfCAgMTQxICsrCiBjb250cmliL3BnX3BsYW5fYWR2aWNl L3NxbC9nYXRoZXIuc3FsICAgICAgICAgfCAgIDc5ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv c3FsL2pvaW5fb3JkZXIuc3FsICAgICB8ICAxMTEgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9z cWwvam9pbl9zdHJhdGVneS5zcWwgIHwgICA3NiArCiAuLi4vcGdfcGxhbl9hZHZpY2Uvc3FsL2xv Y2FsX2NvbGxlY3Rvci5zcWwgICAgfCAgIDQxICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3Fs L3BhcnRpdGlvbndpc2Uuc3FsICB8ICAgOTEgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwv c2Nhbi5zcWwgICAgICAgICAgIHwgIDE5NSArKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwv c3ludGF4LnNxbCAgICAgICAgIHwgICA2MSArCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3QvMDAx X3JlZ3Jlc3MucGwgICAgICAgfCAgMTQ3ICsrCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdCAgICAgICAgICAgICAgfCAgIDM4ICsKIDQ2IGZpbGVzIGNoYW5nZWQsIDExOTMzIGluc2Vy dGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlLy5naXRp Z25vcmUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL01ha2VmaWxl CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9SRUFETUUKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2dhdGhlci5vdXQK IGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2pvaW5f b3JkZXIub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBl Y3RlZC9qb2luX3N0cmF0ZWd5Lm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxh bl9hZHZpY2UvZXhwZWN0ZWQvbG9jYWxfY29sbGVjdG9yLm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0 IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvcGFydGl0aW9ud2lzZS5vdXQKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3NjYW4ub3V0CiBj cmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9zeW50YXgu b3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9tZXNvbi5idWls ZAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZp Y2UtLTEuMC5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3Bn X3BsYW5fYWR2aWNlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNl L3BnX3BsYW5fYWR2aWNlLmNvbnRyb2wKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3Bs YW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3Bn X3BsYW5fYWR2aWNlL3BncGFfYXN0LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3Bs YW5fYWR2aWNlL3BncGFfYXN0LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5f YWR2aWNlL3BncGFfY29sbGVjdG9yLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3Bs YW5fYWR2aWNlL3BncGFfY29sbGVjdG9yLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3Bn X3BsYW5fYWR2aWNlL3BncGFfaWRlbnRpZmllci5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJp Yi9wZ19wbGFuX2FkdmljZS9wZ3BhX2lkZW50aWZpZXIuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNv bnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9qb2luLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250 cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfam9pbi5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJp Yi9wZ19wbGFuX2FkdmljZS9wZ3BhX291dHB1dC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJp Yi9wZ19wbGFuX2FkdmljZS9wZ3BhX291dHB1dC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJp Yi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BhcnNlci55CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJp Yi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BsYW5uZXIuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRy aWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wbGFubmVyLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250 cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJp Yi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW4uaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIv cGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FubmVyLmwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmli L3BnX3BsYW5fYWR2aWNlL3BncGFfdHJvdmUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIv cGdfcGxhbl9hZHZpY2UvcGdwYV90cm92ZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9w Z19wbGFuX2FkdmljZS9wZ3BhX3dhbGtlci5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9w Z19wbGFuX2FkdmljZS9wZ3BhX3dhbGtlci5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9w Z19wbGFuX2FkdmljZS9zcWwvZ2F0aGVyLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIv cGdfcGxhbl9hZHZpY2Uvc3FsL2pvaW5fb3JkZXIuc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29u dHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvam9pbl9zdHJhdGVneS5zcWwKIGNyZWF0ZSBtb2RlIDEw MDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9sb2NhbF9jb2xsZWN0b3Iuc3FsCiBjcmVh dGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvcGFydGl0aW9ud2lzZS5z cWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9zY2FuLnNx bAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3N5bnRheC5z cWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3QvMDAxX3JlZ3Jl c3MucGwKCmRpZmYgLS1naXQgYS9jb250cmliL01ha2VmaWxlIGIvY29udHJpYi9NYWtlZmlsZQpp bmRleCAyZjBhODhkM2Y3Ny4uZGQwNGMyMGFjZDIgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvTWFrZWZp bGUKKysrIGIvY29udHJpYi9NYWtlZmlsZQpAQCAtMzQsNiArMzQsNyBAQCBTVUJESVJTID0gXAog CQlwZ19mcmVlc3BhY2VtYXAgXAogCQlwZ19sb2dpY2FsaW5zcGVjdCBcCiAJCXBnX292ZXJleHBs YWluIFwKKwkJcGdfcGxhbl9hZHZpY2UgXAogCQlwZ19wcmV3YXJtCVwKIAkJcGdfc3RhdF9zdGF0 ZW1lbnRzIFwKIAkJcGdfc3VyZ2VyeQlcCmRpZmYgLS1naXQgYS9jb250cmliL21lc29uLmJ1aWxk IGIvY29udHJpYi9tZXNvbi5idWlsZAppbmRleCBkZWYxMzI1N2NiZS4uNWE3NTJlYWMzNDcgMTAw NjQ0Ci0tLSBhL2NvbnRyaWIvbWVzb24uYnVpbGQKKysrIGIvY29udHJpYi9tZXNvbi5idWlsZApA QCAtNDgsNiArNDgsNyBAQCBzdWJkaXIoJ3BnY3J5cHRvJykKIHN1YmRpcigncGdfZnJlZXNwYWNl bWFwJykKIHN1YmRpcigncGdfbG9naWNhbGluc3BlY3QnKQogc3ViZGlyKCdwZ19vdmVyZXhwbGFp bicpCitzdWJkaXIoJ3BnX3BsYW5fYWR2aWNlJykKIHN1YmRpcigncGdfcHJld2FybScpCiBzdWJk aXIoJ3Bncm93bG9ja3MnKQogc3ViZGlyKCdwZ19zdGF0X3N0YXRlbWVudHMnKQpkaWZmIC0tZ2l0 IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS8uZ2l0aWdub3JlIGIvY29udHJpYi9wZ19wbGFuX2Fk dmljZS8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4x OWExNDI1MzAxOQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvLmdp dGlnbm9yZQpAQCAtMCwwICsxLDMgQEAKKy9wZ3BhX3BhcnNlci5oCisvcGdwYV9wYXJzZXIuYwor L3BncGFfc2Nhbm5lci5jCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL01ha2Vm aWxlIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uMWQ0YzU1OWFlZDgKLS0tIC9kZXYvbnVsbAorKysgYi9jb250 cmliL3BnX3BsYW5fYWR2aWNlL01ha2VmaWxlCkBAIC0wLDAgKzEsNTAgQEAKKyMgY29udHJpYi9w Z19wbGFuX2FkdmljZS9NYWtlZmlsZQorCitNT0RVTEVfYmlnID0gcGdfcGxhbl9hZHZpY2UKK09C SlMgPSBcCisJJChXSU4zMlJFUykgXAorCXBnX3BsYW5fYWR2aWNlLm8gXAorCXBncGFfYXN0Lm8g XAorCXBncGFfY29sbGVjdG9yLm8gXAorCXBncGFfaWRlbnRpZmllci5vIFwKKwlwZ3BhX2pvaW4u byBcCisJcGdwYV9vdXRwdXQubyBcCisJcGdwYV9wYXJzZXIubyBcCisJcGdwYV9wbGFubmVyLm8g XAorCXBncGFfc2Nhbi5vIFwKKwlwZ3BhX3NjYW5uZXIubyBcCisJcGdwYV90cm92ZS5vIFwKKwlw Z3BhX3dhbGtlci5vCisKK0VYVEVOU0lPTiA9IHBnX3BsYW5fYWR2aWNlCitEQVRBID0gcGdfcGxh bl9hZHZpY2UtLTEuMC5zcWwKK1BHRklMRURFU0MgPSAicGdfcGxhbl9hZHZpY2UgLSBoZWxwIHRo ZSBwbGFubmVyIGdldCB0aGUgcmlnaHQgcGxhbiIKKworUkVHUkVTUyA9IGdhdGhlciBqb2luX29y ZGVyIGpvaW5fc3RyYXRlZ3kgcGFydGl0aW9ud2lzZSBzY2FuCitUQVBfVEVTVFMgPSAxCisKK0VY VFJBX0NMRUFOID0gcGdwYV9wYXJzZXIuaCBwZ3BhX3BhcnNlci5jIHBncGFfc2Nhbm5lci5jCisK KyMgcmVxdWlyZWQgZm9yIDAwMV9yZWdyZXNzLnBsCitSRUdSRVNTX1NITElCPSQoYWJzX3RvcF9i dWlsZGRpcikvc3JjL3Rlc3QvcmVncmVzcy9yZWdyZXNzJChETFNVRkZJWCkKK2V4cG9ydCBSRUdS RVNTX1NITElCCisKK2lmZGVmIFVTRV9QR1hTCitQR19DT05GSUcgPSBwZ19jb25maWcKK1BHWFMg Oj0gJChzaGVsbCAkKFBHX0NPTkZJRykgLS1wZ3hzKQoraW5jbHVkZSAkKFBHWFMpCitlbHNlCitz dWJkaXIgPSBjb250cmliL3BnX3BsYW5fYWR2aWNlCit0b3BfYnVpbGRkaXIgPSAuLi8uLgoraW5j bHVkZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAoraW5jbHVkZSAkKHRvcF9z cmNkaXIpL2NvbnRyaWIvY29udHJpYi1nbG9iYWwubWsKK2VuZGlmCisKKyMgU2VlIG5vdGVzIGlu IHNyYy9iYWNrZW5kL3BhcnNlci9NYWtlZmlsZSBhYm91dCB0aGUgZm9sbG93aW5nIHR3byBydWxl cworcGdwYV9wYXJzZXIuaDogcGdwYV9wYXJzZXIuYworCXRvdWNoICRACisKK3BncGFfcGFyc2Vy LmM6IEJJU09ORkxBR1MgKz0gLWQKKworIyBGb3JjZSB0aGVzZSBkZXBlbmRlbmNpZXMgdG8gYmUg a25vd24gZXZlbiB3aXRob3V0IGRlcGVuZGVuY3kgaW5mbyBidWlsdDoKK3BncGFfcGFyc2VyLm8g cGdwYV9zY2FubmVyLm86IHBncGFfcGFyc2VyLmgKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxh bl9hZHZpY2UvUkVBRE1FIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9SRUFETUUKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmU5MDE3ZjM5ODNiCi0tLSAvZGV2L251bGwK KysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9SRUFETUUKQEAgLTAsMCArMSwyNzMgQEAKK2Nv bnRyaWIvcGdfcGxhbl9hZHZpY2UvUkVBRE1FCisKK1BsYW4gQWR2aWNlCis9PT09PT09PT09PQor CitUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIGEgbWluaS1sYW5ndWFnZSBmb3IgInBsYW4gYWR2aWNl IiB0aGF0IGFsbG93cyBmb3IKK2NvbnRyb2wgb2YgY2VydGFpbiBrZXkgcGxhbm5lciBkZWNpc2lv bnMuIEdvYWxzIGluY2x1ZGUgKDEpIGVuZm9yY2luZyBwbGFuCitzdGFiaWxpdHkgKG15IHByZXZp b3VzIHBsYW4gd2FzIGdvb2QgYW5kIEkgd291bGQgbGlrZSB0byBrZWVwIGdldHRpbmcgYQorc2lt aWxhciBvbmUpIGFuZCAoMikgYWxsb3dpbmcgdXNlcnMgdG8gZXhwZXJpbWVudCB3aXRoIHBsYW5z IG90aGVyIHRoYW4KK3RoZSBvbmUgcHJlZmVycmVkIGJ5IHRoZSBvcHRpbWl6ZXIuIE5vbi1nb2Fs cyBpbmNsdWRlICgxKSBjb250cm9sbGluZworZXZlcnkgcG9zc2libGUgcGxhbm5lciBkZWNpc2lv biBhbmQgKDIpIGZvcmNpbmcgY29uc2lkZXJhdGlvbiBvZiBwbGFucwordGhhdCB0aGUgb3B0aW1p emVyIHJlamVjdHMgZm9yIHJlYXNvbnMgb3RoZXIgdGhhbiBjb3N0LiAoVGhlcmUgaXMgc29tZQor cm9vbSBmb3IgYmlrZXNoZWRkaW5nIGFib3V0IHdoYXQgZXhhY3RseSB0aGlzIG5vbi1nb2FsIG1l YW5zOiB3aGF0IGlmCit3ZSBza2lwIHBhdGggZ2VuZXJhdGlvbiBlbnRpcmVseSBmb3IgYSBjZXJ0 YWluIGNhc2Ugb24gdGhlIHRoZW9yeSB0aGF0Cit3ZSBrbm93IGl0IGNhbm5vdCB3aW4gb24gY29z dD8gRG9lcyB0aGF0IGNvdW50IGFzIGEgY29zdC1iYXNlZCByZWplY3Rpb24KK2V2ZW4gdGhvdWdo IG5vIGNvc3Qgd2FzIGV2ZXIgY29tcHV0ZWQ/KQorCitHZW5lcmFsbHksIHBsYW4gYWR2aWNlIGlz IGEgc2VyaWVzIG9mIHdoaXRlc3BhY2Utc2VwYXJhdGVkIGFkdmljZSBpdGVtcywKK2VhY2ggb2Yg d2hpY2ggYXBwbGllcyBhbiBhZHZpY2UgdGFnIHRvIGEgbGlzdCBvZiBhZHZpY2UgdGFyZ2V0cy4g Rm9yCitleGFtcGxlLCAiU0VRX1NDQU4oZm9vKSBIQVNIX0pPSU4oYmFyQHNzKSIgY29udGFpbnMg dHdvIGl0ZW1zIG9mIGFkdmljZSwKK3RoZSBmaXJzdCBvZiB3aGljaCBhcHBsaWVzIHRoZSBTRVFf U0NBTiB0YWcgdG8gImZvbyIgYW5kIHRoZSBzZWNvbmQgb2YKK3doaWNoIGFwcGxpZXMgdGhlIEhB U0hfSk9JTiB0YWcgdG8gImJhckBzcyIuIEluIHRoaXMgc2ltcGxlIGV4YW1wbGUsIGVhY2gKK3Rh cmdldCBpZGVudGlmaWVzIGEgc2luZ2xlIHJlbGF0aW9uOyBzZWUgIlJlbGF0aW9uIElkZW50aWZp ZXJzIiwgYmVsb3cuCitBZHZpY2UgdGFncyBjYW4gYWxzbyBiZSBhcHBsaWVkIHRvIGdyb3VwcyBv ZiByZWxhdGlvbnM7IGZvciBleGFtcGxlLAorIkhBU0hfSk9JTihiYXogKGJsZXRjaCBxdXV4KSki IGFwcGxpZXMgdGhlIEhBU0hfSk9JTiB0YWcgdG8gdGhlIHNpbmdsZQorcmVsYXRpb24gaWRlbnRp ZmllciAiYmF6IiBhcyB3ZWxsIGFzIHRvIHRoZSAyLWl0ZW0gbGlzdCBjb250YWluaW5nCisiYmxl dGNoIiBhbmQgInF1dXgiLgorCitDcml0aWNhbGx5LCB0aGlzIG1vZHVsZSBrbm93cyBib3RoIGhv dyB0byBnZW5lcmF0ZSBwbGFuIGFkdmljZSBmcm9tIGFuCithbHJlYWR5LWV4aXN0aW5nIHBsYW4s IGFuZCBhbHNvIGhvdyB0byBlbmZvcmNlIGl0IGR1cmluZyBmdXR1cmUgcGxhbm5pbmcKK2N5Y2xl cy4gRXZlcnl0aGluZyBpdCBkb2VzIGlzIGludGVuZGVkIHRvIGJlICJyb3VuZC10cmlwIHNhZmUi OiBpZiB5b3UKK2dlbmVyYXRlIGFkdmljZSBmcm9tIGEgcGxhbiBhbmQgdGhlbiBmZWVkIHRoYXQg YmFjayBpbnRvIGEgZnV0dXJlIHBsYW5pbmcKK2N5Y2xlLCBlYWNoIHBpZWNlIG9mIGFkdmljZSBz aG91bGQgYmUgZ3VhcmFudGVlZCB0byBhcHBseSB0byB0aGUgZXhhY3RseSB0aGUKK3NhbWUgcGFy dCBvZiB0aGUgcXVlcnkgZnJvbSB3aGljaCBpdCB3YXMgZ2VuZXJhdGVkIHdpdGhvdXQgYW1iaWd1 aXR5IG9yCitndWVzc3dvcmssIGFuZCBpdCBzaG91bGQgc3VjY2VzZnVsbHkgZW5mb3JjZSB0aGUg c2FtZSBwbGFubmluZyBkZWNpc2lvbiB0aGF0CitsZWQgdG8gaXQgYmVpbmcgZ2VuZXJhdGVkIGlu IHRoZSBmaXJzdCBwbGFjZS4gTm90ZSB0aGF0IHRoZXJlIGlzIG5vCitpbnRlbnRpb24gdGhhdCB0 aGVzZSBndWFyYW50ZWVzIGhvbGQgaW4gdGhlIHByZXNlbmNlIG9mIGludGVydmVuaW5nIERETDsK K2UuZy4gaWYgeW91IGNoYW5nZSB0aGUgcHJvcGVydGllcyBvZiBhIGZ1bmN0aW9uIHNvIHRoYXQg YSBzdWJxdWVyeSBpcyBubworbG9uZ2VyIGlubGluZWQsIG9yIGlmIHlvdSBkcm9wIGFuIGluZGV4 IG5hbWVkIGluIHRoZSBwbGFuIGFkdmljZSwgdGhlIGFkdmljZQoraXNuJ3QgZ29pbmcgdG8gd29y ayBhbnkgbW9yZS4gVGhhdCdzIGV4cGVjdGVkLgorCitUaGlzIG1vZHVsZSBhaW1zIHRvIGZvcmNl IHRoZSBwbGFubmVyIHRvIGZvbGxvdyBhbnkgcHJvdmlkZWQgYWR2aWNlIHdpdGhvdXQKK3JlZ2Fy ZCB0byB3aGV0aGVyIGl0IGlzIGFwcGVhcnMgdG8gYmUgZ29vZCBhZHZpY2Ugb3IgYmFkIGFkdmlj ZS4gIElmIHRoZQordXNlciBwcm92aWRlcyBiYWQgYWR2aWNlLCB3aGV0aGVyIGRlcml2ZWQgZnJv bSBhIHByZXZpb3VzbHktZ2VuZXJhdGVkIHBsYW4KK29yIG1hbnVhbGx5IHdyaXR0ZW4sIHRoZXkg bWF5IGdldCBhIGJhZCBwbGFuLiBXZSByZWdhcmQgdGhpcyBhcyB1c2VyIGVycm9yLAorbm90IGEg ZGVmZWN0IGluIHRoaXMgbW9kdWxlLiBJdCBzZWVtcyBsaWtlbHkgdGhhdCBhcHBseWluZyBhZHZp Y2UKK2p1ZGljaW91c2x5IGFuZCBvbmx5IHdoZW4gdHJ1bHkgcmVxdWlyZWQgdG8gYXZvaWQgcHJv YmxlbXMgd2lsbCBiZSBhIG1vcmUKK3N1Y2Nlc3NmdWwgc3RyYXRlZ3kgdGhhbiBhcHBseWluZyBp dCB3aXRoIGEgYnJvYWQgYnJ1c2gsIGJ1dCB1c2VycyBhcmUgZnJlZQordG8gZXhwZXJpbWVudCB3 aXRoIHdoYXRldmVyIHN0cmF0ZWdpZXMgdGhleSB0aGluayBiZXN0LgorCitSZWxhdGlvbiBJZGVu dGlmaWVycworPT09PT09PT09PT09PT09PT09PT0KKworVW5pcXVlbHkgaWRlbnRpZnlpbmcgdGhl IHBhcnQgb2YgYSBxdWVyeSB0byB3aGljaCBhIGNlcnRhaW4gcGllY2Ugb2YKK2FkdmljZSBhcHBs aWVzIGlzIGhhcmRlciB0aGFuIGl0IHNvdW5kcy4gT3VyIGJhc2ljIGFwcHJvYWNoIGlzIHRvIHVz ZQorcmVsYXRpb24gYWxpYXNlcyBhcyBhIHN0YXJ0aW5nIHBvaW50LCBhbmQgdGhlbiBkaXNhbWJp Z3VhdGUuIFRoZXJlIGFyZQordGhyZWUgd2F5cyB0aGF0IHNhbWUgcmVsYXRpb24gYWxpYXMgY2Fu IG9jY3VyIG11bHRpcGxlIHRpbWVzOgorCisxLiBJdCBjYW4gYXBwZWFyIGluIG1vcmUgdGhhbiBv bmUgc3VicXVlcnkuCisKKzIuIEl0IGNhbiBhcHBlYXIgbW9yZSB0aGFuIG9uY2UgaW4gdGhlIHNh bWUgc3VicXVlcnksCisgICBlLmcuIChmb28gSk9JTiBiYXIpIHggSk9JTiBmb28uCisKKzMuIFRo ZSB0YWJsZSBjYW4gYmUgcGFydGl0aW9uZWQuCisKK0FueSBjb21iaW5hdGlvbiBvZiB0aGVzZSB0 aGluZ3MgY2FuIG9jY3VyIHNpbXVsdGFuZW91c2x5LiAgVGhlcmVmb3JlLCBvdXIKK2dlbmVyYWwg c3ludGF4IGZvciBhIHJlbGF0aW9uIGlkZW50aWZpZXIgaXM6CisKK2FsaWFzX25hbWUjb2NjdXJy ZW5jZV9udW1iZXIvcGFydGl0aW9uX3NjaGVtYS5wYXJ0aXRpb25fbmFtZUBwbGFuX25hbWUKKwor QWxsIGNvbXBvbmVudHMgZXhjZXB0IGZvciB0aGUgYWxpYXNfbmFtZSBhcmUgb3B0aW9uYWwgYW5k IGluY2x1ZGVkIG9ubHkKK3doZW4gcmVxdWlyZWQuIFdoZW4gYSBjb21wb25lbnQgaXMgb21pdHRl ZCwgdGhlIGFzc29jaWF0ZWQgcHVuY3R1YXRpb24KK211c3QgYWxzbyBiZSBvbWl0dGVkLiBPY2N1 cnJlbmNlIG51bWJlcnMgYXJlIGNvdW50ZWQgaWdub3JpbmcgY2hpbGRyZW4gb2YKK3BhcnRpdGlv bmVkIHRhYmxlcy4gIFdoZW4gdGhlIGdlbmVyYXRlZCBvY2N1cnJlbmNlIG51bWJlciBpcyAxLCB3 ZSBvbWl0Cit0aGUgb2NjdXJyZW5jZSBudW1iZXIuIFRoZSBwYXJ0aXRpb24gc2NoZW1hIGFuZCBw YXJ0aXRpb24gbmFtZSBhcmUgaW5jbHVkZWQKK29ubHkgZm9yIGNoaWxkcmVuIG9mIHBhcnRpdGlv bmVkIHRhYmxlcy4gSW4gZ2VuZXJhdGVkIGFkdmljZSwgdGhlCitwYXJ0aXRpb25fc2NoZW1hIGlz IGFsd2F5cyBpbmNsdWRlZCB3aGVuZXZlciB0aGVyZSBpcyBhIHBhcnRpdGlvbl9uYW1lLAorYnV0 IHVzZXItd3JpdHRlbiBhZHZpY2UgbWF5IG1lbnRpb24gdGhlIG5hbWUgYW5kIG9taXQgdGhlIHNj aGVtYS4gVGhlCitwbGFuX25hbWUgaXMgb21pdHRlZCBmb3IgdGhlIHRvcC1sZXZlbCBQbGFubmVy SW5mby4KKworU2NhbiBBZHZpY2UKKz09PT09PT09PT09CisKK0ZvciBtYW55IHR5cGVzIG9mIHNj YW4sIG5vIGFkdmljZSBpcyBnZW5lcmF0ZWQgb3IgcG9zc2libGU7IGZvciBpbnN0YW5jZSwKK2Eg c3VicXVlcnkgaXMgYWx3YXlzIHNjYW5uZWQgdXNpbmcgYSBzdWJxdWVyeSBzY2FuLiBXaGlsZSB0 aGF0IHNjYW4gbWF5IGJlCitlbGlkZWQgdmlhIHNldHJlZnMgcHJvY2Vzc2luZywgdGhpcyBkb2Vz bid0IGNoYW5nZSB0aGUgZmFjdCB0aGF0IG9ubHkgb25lCitiYXNpYyBhcHByb2FjaCBleGlzdHMu IEhlbmNlLCBzY2FuIGFkdmljZSBhcHBsaWVzIG1vc3RseSB0byByZWxhdGlvbnMsIHdoaWNoCitj YW4gYmUgc2Nhbm5lZCBpbiBtdWx0aXBsZSB3YXlzLgorCitXZSB0ZW5kIHRvIHRoaW5rIG9mIGEg c2NhbiBhcyB0YXJnZXRpbmcgYSBzaW5nbGUgcmVsYXRpb24sIGFuZCB0aGF0J3MKK25vcm1hbGx5 IHRoZSBjYXNlLCBidXQgaXQgZG9lc24ndCBoYXZlIHRvIGJlLiBGb3IgaW5zdGFuY2UsIGlmIGEg am9pbiBpcworcHJvdmVuIGVtcHR5LCB0aGUgd2hvbGUgdGhpbmcgbWF5IGJlIHJlcGxhY2VkIHdp dGggYSBzaW5nbGUgUmVzdWx0IG5vZGUKK3doaWNoLCBpbiBlZmZlY3QsIGlzIGEgZGVnZW5lcmF0 ZSBzY2FuIG9mIGV2ZXJ5IHJlbGF0aW9uIGluIHRoZSBjb2xsYXBzZWQKK3BvcnRpb24gb2YgdGhl IGpvaW4gdHJlZS4gU2ltaWxhcmx5LCBpdCdzIHBvc3NpYmxlIHRvIGluamVjdCBhIGN1c3RvbSBz Y2FuCitpbiBzdWNoIGEgd2F5IHRoYXQgaXQgcmVwbGFjZXMgYW4gZW50aXJlIGpvaW4uIElmIHdl IGV2ZXIgZW1pdCBhZHZpY2UKK2ZvciB0aGVzZSBjYXNlcywgaXQgd291bGQgdGFyZ2V0IHNldHMg b2YgcmVsYXRpb24gaWRlbnRpZmllcnMgc3Vycm91bmRlZAorYnkgY3VybHkgYnJhbmNlcywgZS5n LiBTT01FX1NPUlRfT0ZfU0NBTihmb28gKGJhciBiYXopKSB3b3VsZCBtZWFuIHRoYXQgdGhlCit0 aGUgZ2l2ZW4gc2NhbiB0eXBlIHdvdWxkIGJlIHVzZWQgZm9yIGZvbyBhcyBhIHNpbmdsZSByZWxh dGlvbiBhbmQgYWxzbyB0aGUKK2NvbWJpbmF0aW9uIG9mIGJhciBhbmQgYmF6IGFzIGEgam9pbiBw cm9kdWN0LiBXZSBoYXZlIG5vIHN1Y2ggY2FzZXMgYXQKK3ByZXNlbnQuCisKK0ZvciBpbmRleCBh bmQgaW5kZXgtb25seSBzY2FucywgYm90aCB0aGUgcmVsYXRpb24gYmVpbmcgc2Nhbm5lZCBhbmQg dGhlCitpbmRleCBvciBpbmRleGVzIGJlaW5nIHVzZWQgbXVzdCBiZSBzcGVjaWZpZWQuIEZvciBl eGFtcGxlLCBJTkRFWF9TQ0FOKGZvbworZm9vX2FfaWR4IGJhciBiYXJfYl9pZHgpIGluZGljYXRl cyB0aGF0IGFuIGluZGV4IHNjYW4gKG5vdCBhbiBpbmRleC1vbmx5CitzY2FuKSBzaG91bGQgYmUg dXNlZCBvbiBmb29fYV9pZHggd2hlbiBzY2FubmluZyBmb28sIGFuZCB0aGF0IGFuIGluZGV4IHNj YW4KK3Nob3VsZCBiZSB1c2VkIG9uIGJhcl9iX2lkeCB3aGVuIHNjYW5uaW5nIGJhci4KKworQml0 bWFwIGhlYXAgc2NhbnMgYWxsb3cgZm9yIGEgbW9yZSBjb21wbGljYXRlZCBpbmRleCBzcGVjaWZp Y2F0aW9uLiBGb3IKK2V4YW1wbGUsIEJJVE1BUF9IRUFQX1NDQU4oZm9vICYmKGZvb19hX2lkeCB8 fChmb29fYl9pZHggZm9vX2NfaWR4KSkpIHNheXMKK3RoYXQgZm9vIHNob3VsZCBiZSBzY2FubmVk IHVzaW5nIGEgQml0bWFwSGVhcFNjYW4gb3ZlciBhIEJpdG1hcEFuZCBiZXR3ZWVuCitmb29fYV9p ZHggYW5kIHRoZSByZXN1bHQgb2YgYSBCaXRtYXBPciBiZXR3ZWVuIGZvb19iX2lkeCBhbmQgZm9v X2NfaWR4LgorCitYWFg6IEN1cnJlbnRseSwgQklUTUFQX0hFQVBfU0NBTiBkb2VzIG5vdCBlbmZv cmNlIHRoZSBpbmRleCBzcGVjaWZpY2F0aW9uLAorYmVjYXVzZSB0aGUgYXZhaWxhYmxlIGhvb2tz IGFyZSBpbnN1ZmZpY2llbnQgdG8gZG8gc28uIEl0J3MgcG9zc2libGUgdGhhdAordGhpcyBzaG91 bGQgYmUgY2hhbmdlZCB0byBleGNsdWRlIHRoZSBpbmRleCBzcGVjaWZpY2F0aW9uIGFsdG9nZXRo ZXIgYW5kCitzaW1wbHkgaW5zaXN0IHRoYXQgc29tZSBzb3J0IG9mIGJpdG1hcCBoZWFwIHNjYW4g aXMgdXNlZDsgYWx0ZXJuYXRpdmVseSwKK3dlIG5lZWQgYmV0dGVyIGhvb2tzLgorCitKb2luIE9y ZGVyIEFkdmljZQorPT09PT09PT09PT09PT09PT0KKworVGhlIEpPSU5fT1JERVIgdGFnIHNwZWNp ZmllcyB0aGUgb3JkZXIgaW4gd2hpY2ggc2V2ZXJhbCB0YWJsZXMgdGhhdCBhcmUKK3BhcnQgb2Yg dGhlIHNhbWUgam9pbiBwcm9ibGVtIHNob3VsZCBiZSBqb2luZWQuIEVhY2ggc3VicXVlcnkgKGV4 Y2VwdCBmb3IKK3Rob3NlIHRoYXQgYXJlIGlubGluZWQpIGlzIGEgc2VwYXJhdGUgam9pbiBwcm9i bGVtLiBXaXRoaW4gYSBzdWJxdWVyeSwKK3BhcnRpdGlvbndpc2Ugam9pbnMgY2FuIGNyZWF0ZSBh ZGRpdGlvbmFsLCBzZXBhcmF0ZSBqb2luIHByb2JsZW1zLiBIZW5jZSwKK3F1ZXJpZXMgaW52b2x2 aW5nIHBhcnRpdGlvbndpc2Ugam9pbnMgbWF5IHVzZSBKT0lOX09SREVSKCkgbWFueSB0aW1lcy4K KworV2UgdGFrZSB0aGUgY2Fub25pY2FsIGpvaW4gc3RydWN0dXJlIHRvIGJlIGFuIG91dGVyLWRl ZXAgdHJlZSwgc28KK0pPSU5fT1JERVIodDEgdDIgdDMpIHNheXMgdGhhdCB0MSBpcyB0aGUgZHJp dmluZyB0YWJsZSBhbmQgc2hvdWxkIGJlIGpvaW5lZAorZmlyc3QgdG8gdDIgYW5kIHRoZW4gdG8g dDMuIElmIHRoZSBqb2luIHByb2JsZW0gaW52b2x2ZXMgYWRkaXRpb25hbCB0YWJsZXMsCit0aGV5 IGNhbiBiZSBqb2luZWQgaW4gYW55IG9yZGVyIGFmdGVyIHRoZSBqb2luIGJldHdlZW4gdDEsIHQy LCBhbmQgdDMgaGFzCitiZWVuIGNvbnN0cnVjdHVyZWQuIEdlbmVyYXRlZCBqb2luIGFkdmljZSBh bHdheXMgbWVudGlvbnMgYWxsIHRhYmxlcworaW4gdGhlIGpvaW4gcHJvYmxlbSwgYnV0IG1hbnVh bGx5IHdyaXR0ZW4gam9pbiBhZHZpY2UgbmVlZCBub3QgZG8gc28uCisKK0ZvciB0cmVlcyB3aGlj aCBhcmUgbm90IG91dGVyLWRlZXAsIHBhcmVudGhlc2VzIGNhbiBiZSB1c2VkLiBGb3IgZXhhbXBs ZSwKK0pPSU5fT1JERVIodDEgKHQyIHQzKSkgc2F5cyB0aGF0IHRoZSB0b3AtbGV2ZWwgam9pbiBz aG91bGQgaGF2ZSB0MSBvbiB0aGUKK291dGVyIHNpZGUgYW5kIGEgam9pbiBiZXR3ZWVuIHQyIGFu ZCB0MyBvbiB0aGUgaW5uZXIgc2lkZS4gVGhhdCBqb2luIHNob3VsZAorYmUgY29uc3RydWN0ZWQg c28gdGhhdCB0MiBpcyBvbiB0aGUgb3V0ZXIgc2lkZSBhbmQgdDMgaXMgb24gdGhlIGlubmVyIHNp ZGUuCisKK0luIHNvbWUgY2FzZXMsIGl0J3Mgbm90IHBvc3NpYmxlIHRvIGZ1bGx5IHNwZWNpZnkg dGhlIGpvaW4gb3JkZXIgaW4gdGhpcyB3YXkuCitGb3IgZXhhbXBsZSwgaWYgdDIgYW5kIHQzIGFy ZSBiZWluZyBzY2FubmVkIGJ5IGEgc2luZ2xlIGN1c3RvbSBzY2FuIG9yIGZvcmVpZ24KK3NjYW4s IG9yIGlmIGEgcGFydGl0aW9ud2lzZSBqb2luIGlzIGJlaW5nIHBlcmZvcm1lZCBiZXR3ZWVuIHRo b3NlIHRhYmxlcywgdGhlbgoraXQncyBpbXBvc3NpYmxlIHRvIHNheSB0aGF0IHQyIGlzIHRoZSBv dXRlciB0YWJsZSBhbmQgdDMgaXMgdGhlIGlubmVyIHRhYmxlLAorb3IgdGhlIG90aGVyIHdheSBh cm91bmQ7IGl0J3MganVzdCB1bmRlZmluZWQuIEluIHN1Y2ggY2FzZXMsIHdlIGdlbmVyYXRlCitq b2luIGFkdmljZSB0aGF0IHVzZXMgY3VybHkgYnJhY2VzLCBpbnRlbmRpbmcgdG8gaW5kaWNhdGUg YSBsYWNrIG9mIG9yZGVyaW5nOgorSk9JTl9PUkRFUih0MSB7dDIgdDN9KSBzYXlzIHRoYXQgdGhl IHVwcGVybW9zdCBqb2luIHNob3VsZCBoYXZlIHQxIG9uIHRoZSBvdXRlcgorc2lkZSBhbmQgc29t ZSBraW5kIG9mIGpvaW4gYmV0d2VlbiB0MiBhbmQgdDMgb24gdGhlIGlubmVyIHNpZGUsIGJ1dCB3 aXRob3V0CitzYXlpbmcgaG93IHRoYXQgam9pbiBtdXN0IGJlIHBlcmZvcm1lZCBvciBhbnl0aGlu ZyBhYm91dCB3aGljaCByZWxhdGlvbiBzaG91bGQKK2FwcGVhciBvbiB3aGljaCBzaWRlIG9mIHRo ZSBqb2luLCBvciBldmVuIHdoZXRoZXIgdGhpcyBraW5kIG9mIGpvaW4gaGFzIHNpZGVzLgorCitK b2luIFN0cmF0ZWd5IEFkdmljZQorPT09PT09PT09PT09PT09PT09PT0KKworVGFncyBzdWNoIGFz IE5FU1RFRF9MT09QX1BMQUlOIHNwZWNpZnkgdGhlIG1ldGhvZCB0aGF0IHNob3VsZCBiZSB1c2Vk IHRvCitwZXJmb3JtIGEgY2VydGFpbiBqb2luLiBNb3JlIHNwZWNpZmljYWxseSwgTkVTVEVEX0xP T1BfUExBSU4oeCAoeSB6KSkgc2F5cwordGhhdCB0aGUgcGxhbiBzaG91bGQgcHV0IHRoZSByZWxh dGlvbiB3aG9zZSBpZGVudGlmaWVyIGlzICJ4IiBvbiB0aGUgaW5uZXIKK3NpZGUgb2YgYSBwbGFp biBuZXN0ZWQgbG9vcCAob25lIHdpdGhvdXQgbWF0ZXJpYWxpemF0aW9uIG9yIG1lbW9pemF0aW9u KQorYW5kIHRoYXQgaXQgc2hvdWxkIGFsc28gcHV0IGEgam9pbiBiZXR3ZWVuIHRoZSByZWxhdGlv biB3aG9zZSBpZGVudGlmaWVyIGlzCisieSIgYW5kIHRoZSByZWxhdGlvbiB3aG9zZSBpZGVudGlm aWVyIGlzICJ6IiBvbiB0aGUgaW5uZXIgc2lkZSBvZiBhIG5lc3RlZAorbG9vcC4gSGVuY2UsIGZv ciBhbiBOLXRhYmxlIGpvaW4gcHJvYmxlbSwgdGhlcmUgd2lsbCBiZSBOLTEgcGllY2VzIG9mIGpv aW4KK3N0cmF0ZWd5IGFkdmljZTsgbm8gam9pbiBzdHJhdGVneSBhZHZpY2UgaXMgcmVxdWlyZWQg Zm9yIHRoZSBvdXRlcm1vc3QKK3RhYmxlIGluIHRoZSBqb2luIHByb2JsZW0uCisKK0NvbnNpZGVy aW5nIHRoYXQgd2UgaGF2ZSBib3RoIGpvaW4gb3JkZXIgYWR2aWNlIGFuZCBqb2luIHN0cmF0ZWd5 IGFkdmljZSwKK2l0IG1pZ2h0IHNlZW0gbmF0dXJhbCB0byBzYXkgdGhhdCBORVNURURfTE9PUF9Q TEFJTih4KSBzaG91bGQgYmUgcmVkZWZpbmVkCit0byBtZWFuIHRoYXQgeCBzaG91bGQgYXBwZWFy IGJ5IGl0c2VsZiBvbiBvbmUgc2lkZSBvciB0aGUgb3RoZXIgb2YgYSBuZXN0ZWQKK2xvb3AsIHJh dGhlciB0aGFuIHNwZWNpZmljYWxseSBvbiB0aGUgaW5uZXIgc2lkZSwgYnV0IHRoaXMgZGVmaW5p dGlvbiBhcHBlYXJzCit1c2VsZXNzIGluIHByYWN0aWNlLiBJdCBnaXZlcyB0aGUgcGxhbm5lciB0 b28gbXVjaCBmcmVlZG9tIHRvIGRvIHRoaW5ncyB0aGF0CitiZWFyIGxpdHRsZSByZXNlbWJsYW5j ZSB0byB3aGF0IHRoZSB1c2VyIHByb2JhYmx5IGhhZCBpbiBtaW5kLiBUaGlzIG1ha2VzCitvbmx5 IGEgbGltaXRlZCBhbW91bnQgb2YgcHJhY3RpY2FsIGRpZmZlcmVuY2UgaW4gdGhlIGNhc2Ugb2Yg YSBtZXJnZSBqb2luIG9yCit1bnBhcmFtZXRlcml6ZWQgbmVzdGVkIGxvb3AsIGJ1dCBmb3IgYSBw YXJhbWV0ZXJpemVkIG5lc3RlZCBsb29wIG9yIGEgaGFzaAoram9pbiwgdGhlIHR3byBzaWRlcyBh cmUgdHJlYXRlZCB2ZXJ5IGRpZmZlcmVudGx5IGFuZCBzYXlpbmcgdGhhdCBhIGNlcnRhaW4KK3Jl bGF0aW9uIHNob3VsZCBiZSBpbnZvbHZlZCBpbiBvbmUgb2YgdGhvc2Ugb3BlcmF0aW9ucyB3aXRo b3V0IHNheWluZyB3aGljaAorcm9sZSBpdCBzaG91bGQgdGFrZSBpc24ndCBzYXlpbmcgbXVjaC4K KworVGhpcyBjaG9pY2Ugb2YgZGVmaW5pdGlvbiBpbXBsaWVzIHRoYXQgam9pbiBzdHJhdGVneSBh ZHZpY2UgYWxzbyBpbXBvc2VzIHNvbWUKK2pvaW4gb3JkZXIgY29uc3RyYWludHMuIEZvciBleGFt cGxlLCBnaXZlbiBhIGpvaW4gYmV0d2VlbiBmb28gYW5kIGJhciwKK0hBU0hfSk9JTihiYXIpIGlt cGxpZXMgdGhhdCBmb28gaXMgdGhlIGRyaXZpbmcgdGFibGUuIE90aGVyd2lzZSwgaXQgd291bGQK K2JlIGltcG9zc2libGUgdG8gcHV0IGJhciBiZW5lYXRoIHRoZSBpbm5lciBzaWRlIG9mIGEgSGFz aCBKb2luLgorCitOb3RlIHRoYXQsIGdpdmVuIHRoaXMgZGVmaW5pdGlvbiwgaXQncyByZWFzb25h YmxlIHRvIGNvbnNpZGVyIGRlbGV0aW5nIHRoZQoram9pbiBvcmRlciBhZHZpY2UgYnV0IGFwcGx5 aW5nIHRoZSBqb2luIHN0cmF0ZWd5IGFkdmljZS4gRm9yIGV4YW1wbGUsCitjb25zaWRlciBhIHN0 YXIgc2NoZW1hIHdpdGggdGFibGVzIGZhY3QsIGRpbTEsIGRpbTIsIGRpbTMsIGRpbTQsIGFuZCBk aW01LgorVGhlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGFkdmljZSBtaWdodCBzcGVjaWZ5IEpP SU5fT1JERVIoZmFjdCBkaW0xIGRpbTMKK2RpbTQgZGltMiBkaW01KSBIQVNIX0pPSU4oZGltMiBk aW00KSBORVNURURfTE9PUF9QTEFJTihkaW0xIGRpbTMgZGltNSkuCitEZWxldGluZyB0aGUgSk9J Tl9PUkRFUiBhZHZpY2UgYWxsb3dzIHRoZSBwbGFubmVyIHRvIHJlb3JkZXIgdGhlIGpvaW5zCito b3dldmVyIGl0IGxpa2VzIHdoaWxlIHN0aWxsIGZvcmNpbmcgdGhlIHNhbWUgY2hvaWNlIG9mIGpv aW4gbWV0aG9kLiBUaGlzCitzZWVtcyBwb3RlbnRpYWxseSB1c2VmdWwsIGFuZCBpcyBvbmUgcmVh c29uIHdoeSBhIHVuaWZpZWQgc3ludGF4IHRoYXQgY29udHJvbHMKK2JvdGggam9pbiBvcmRlciBh bmQgam9pbiBtZXRob2QgaW4gYSBzaW5nbGUgbG9jdXRpb24gd2FzIG5vdCBjaG9zZW4uCisKK0Fk dmljZSBDb21wbGV0ZW5lc3MKKz09PT09PT09PT09PT09PT09PT0KKworQW4gZXNzZW50aWFsIGd1 aWRpbmcgcHJpbmNpcGxlIGlzIHRoYXQgbm8gaW5mZXJlbmNlIG1heSBtYWRlIG9uIHRoZSBiYXNp cworb2YgdGhlIGFic2VuY2Ugb2YgYWR2aWNlLiBUaGUgdXNlciBpcyBlbnRpdGxlZCB0byByZW1v dmUgYW55IHBvcnRpb24gb2YgdGhlCitnZW5lcmF0ZWQgYWR2aWNlIHdoaWNoIHRoZXkgZGVlbSB1 bnN1aXRhYmxlIG9yIGNvdW50ZXJwcm9kdWN0aXZlIGFuZCB0aGUKK3Jlc3VsdCBzaG91bGQgb25s eSBiZSB0byBpbmNyZWFzZSB0aGUgZmxleGliaWxpdHkgYWZmb3JkZWQgdG8gdGhlIHBsYW5uZXIu CitUaGlzIG1lYW5zIHRoYXQgaWYgYWR2aWNlIGNhbiBzYXkgdGhhdCBhIGNlcnRhaW4gb3B0aW1p emF0aW9uIG9yIHRlY2huaXF1ZQorc2hvdWxkIGJlIHVzZWQsIGl0IHNob3VsZCBhbHNvIGJlIGFi bGUgdG8gc2F5IHRoYXQgdGhlIG9wdGltaXphdGlvbiBvcgordGVjaG5pcXVlIHNob3VsZCBub3Qg YmUgdXNlZC4gV2Ugc2hvdWxkIG5ldmVyIGFzc3VtZSB0aGF0IHRoZSBhYnNlbmNlIG9mIGFuCitp bnN0cnVjdGlvbiB0byBkbyBhIGNlcnRhaW4gdGhpbmcgbWVhbnMgdGhhdCBpdCBzaG91bGQgbm90 IGJlIGRvbmU7IGFsbAoraW5zdHJ1Y3Rpb25zIG11c3QgYmUgZXhwbGljaXQuCisKK1NlbWlqb2lu IFVuaXF1ZW5lc3MKKz09PT09PT09PT09PT09PT09PT0KKworRmFjZWQgd2l0aCBhIHNlbWlqb2lu LCB0aGUgcGxhbm5lciBjb25zaWRlcnMgYm90aCBhIGRpcmVjdCBpbXBsZW1lbnRhdGlvbgorYW5k IGEgcGxhbiB3aGVyZSB0aGUgb25lIHNpZGUgaXMgbWFkZSB1bmlxdWUgYW5kIHRoZW4gYW4gaW5u ZXIgam9pbiBpcworcGVyZm9ybWVkLiBXZSBlbWl0IFNFTUlKT0lOX1VOSVFVRSgpIGFkdmljZSB3 aGVuIHRoaXMgdHJhbnNmb3JtYXRpb24gb2NjdXJzCithbmQgU0VNSUpPSU5fTk9OX1VOSVFVRSgp IGFkdmljZSB3aGVuIGl0IGRvZXNuJ3QuIFRoZXNlIGl0ZW1zIHdvcmsgbGlrZQoram9pbiBzdHJh dGVneSBhZHZpY2U6IHRoZSBpbm5lciBzaWRlIG9mIHRoZSByZWxldmFudCBqb2luIGlzIG5hbWVk LCBhbmQgdGhlCitjaG9zZW4gam9pbiBvcmRlciBtdXN0IGJlIGNvbXBhdGlibGUgd2l0aCB0aGUg YWR2aWNlIGhhdmluZyBzb21lIGVmZmVjdC4KKworWFhYOiBSaWdodCBzZW1pam9pbnMgaGF2ZW4n dCBiZWVuIHByb3Blcmx5IHRob3VnaHQgdGhyb3VnaC4gVGhlIGFzc29jaWF0ZWQKK2NvZGUgcHJv YmFibHkganVzdCBkb2Vzbid0IHdvcmsuCisKK1hYWDogU2VtaWpvaW4gdW5pcXVlbmVzcyBhZHZp Y2UgaGFzIG5vIGF1dG9tYXRlZCB0ZXN0cyBhbmQgbmVlZCBzdWJzdGFudGlhbGx5Cittb3JlIG1h bnVhbCB0ZXN0aW5nLgorCitQYXJ0aXRpb253aXNlCis9PT09PT09PT09PT09CisKK1BBUlRJVElP TldJU0UoKSBhZHZpc2UgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBib3RoIHRob3NlIHBhcnRpdGlv bndpc2Ugam9pbnMKK3doaWNoIHNob3VsZCBiZSBwZXJmb3JtZWQgYW5kIHRob3NlIHdoaWNoIHNo b3VsZCBub3QgYmUgcGVyZm9ybWVkOyB0aGUgaWRlYQoraXMgdGhhdCBlYWNoIGFyZ3VtZW50IHRv IFBBUlRJVElPTldJU0Ugc3BlY2lmaWVzIGEgc2V0IG9mIHJlbGF0aW9ucyB0aGF0CitzaG91bGQg YmUgc2Nhbm5lZCBwYXJ0aXRpb253aXNlIGFmdGVyIGJlaW5nIGpvaW5lZCB0byBlYWNoIG90aGVy IGFuZCBub3RoaW5nCitlbHNlLiBIZW5jZSwgZm9yIGV4YW1wbGUsIFBBUlRJVElPTldJU0UoKHQx IHQyKSB0Mykgc3BlY2lmaWVzIHRoYXQgdGhlCitxdWVyeSBzaG91bGQgY29udGFpbiBhIHBhcnRp dGlvbndpc2Ugam9pbiBiZXR3ZWVuIHQxIGFuZCB0MiBhbmQgdGhhdCB0Mworc2hvdWxkIG5vdCBi ZSBwYXJ0IG9mIGFueSBwYXJ0aXRpb253aXNlIGpvaW4uIElmIHRoZXJlIGFyZSBubyBvdGhlciBy ZWxzCitpbiB0aGUgcXVlcnksIHNwZWNpZnlpbmcganVzdCBQQVJUSVRJT05XSVNFKCh0MSB0Mikp IHdvdWxkIGhhdmUgdGhlIHNhbWUKK2VmZmVjdCwgc2luY2UgdGhlcmUgd291bGQgYmUgbm8gb3Ro ZXIgcmVscyB0byB3aGljaCB0MyBjb3VsZCBiZSBqb2luZWQgaW4KK2EgcGFydGl0aW9ud2lzZSBm YXNoaW9uLgorCitQYXJhbGxlbCBRdWVyeSAoR2F0aGVyLCBldGMuKQorPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KKworRWFjaCBhcmd1bWVudCB0byBHQVRIRVIoKSBvciBHQVRIRVJfTUVS R0UoKSBpcyBhIHNpbmdsZSByZWxhdGlvbiBvciBhbgorZXhhY3Qgc2V0IG9mIHJlbGF0aW9ucyBv biB0b3Agb2Ygd2hpY2ggYSBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIG5vZGUsCityZXNwZWN0aXZl bHksIHNob3VsZCBiZSBwbGFjZWQuIEVhY2ggYXJndW1lbnQgdG8gTk9fR0FUSEVSKCkgaXMgYSBz aW5nbGUKK3JlbGF0aW9uIHRoYXQgc2hvdWxkIG5vdCBhcHBlYXIgYmVuZWF0aCBhbnkgR2F0aGVy IG9yIEdhdGhlciBNZXJnZSBub2RlOwordGhhdCBpcywgcGFyYWxsZWxpc20gc2hvdWxkIG5vdCBi ZSB1c2VkLgorCitJbXBsaWNpdCBKb2luIE9yZGVyIENvbnN0cmFpbnRzCis9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CisKK1doZW4gSk9JTl9PUkRFUigpIGFkdmljZSBpcyBub3QgcHJv dmlkZWQgZm9yIGEgcGFydGljdWxhciBqb2luIHByb2JsZW0sCitvdGhlciBwaWVjZXMgb2YgYWR2 aWNlIG1heSBzdGlsbCBpbmNpZGVudGFsbHkgY29uc3RyYWludCB0aGUgam9pbiBvcmRlci4KK0Zv ciBleGFtcGxlLCBhIHVzZXIgd2hvIHNwZWNpZmllcyBIQVNIX0pPSU4oKGZvbyBiYXIpKSBpcyBl eHBsaWNpdGx5IHNheWluZwordGhhdCB0aGVyZSBzaG91bGQgYmUgYSBoYXNoIGpvaW4gd2l0aCBl eGFjdGx5IGZvbyBhbmQgYmFyIG9uIHRoZSBvdXRlcgorc2lkZSBvZiBpdCwgYnV0IHRoYXQgYWxz byBpbXBsaWVzIHRoYXQgZm9vIGFuZCBiYXIgbXVzdCBiZSBqb2luZWQgdG8KK2VhY2ggb3RoZXIg YmVmb3JlIGVpdGhlciBvZiB0aGVtIGlzIGpvaW5lZCB0byBhbnl0aGluZyBlbHNlLiBPdGhlcndp c2UsCit0aGUgam9pbiB0aGUgdXNlciBpcyBhdHRlbXB0aW5nIHRvIGNvbnN0cmFpbnQgd29uJ3Qg YWN0dWFsbHkgb2NjdXIgaW4gdGhlCitxdWVyeSwgd2hpY2ggZW5kcyB1cCBsb29raW5nIGxpa2Ug dGhlIHN5c3RlbSBoYXMganVzdCBkZWNpZGVkIHRvIGlnbm9yZQordGhlIGFkdmljZSBhbHRvZ2V0 aGVyLgorCitGdXR1cmUgV29yaworPT09PT09PT09PT0KKworV2UgZG9uJ3QgaGFuZGxlIGNob2lj ZSBvZiBhZ2dyZWdhdGlvbjogaXQgd291bGQgYmUgbmljZSB0byBiZSBhYmxlIHRvIGZvcmNlCitz b3J0ZWQgb3IgZ3JvdXBlZCBhZ2dyZWdhdGlvbi4gSSdtIGd1ZXNzaW5nIHRoaXMgY2FuIGJlIGxl ZnQgdG8gZnV0dXJlIHdvcmsuCisKK01vcmUgc2VyaW91c2x5LCB3ZSBkb24ndCBrbm93IGFueXRo aW5nIGFib3V0IGVhZ2VyIGFnZ3JlZ2F0aW9uLCB3aGljaCBjb3VsZAoraGF2ZSBhIGxhcmdlIGlt cGFjdCBvbiB0aGUgc2hhcGUgb2YgdGhlIHBsYW4gdHJlZS4gWFhYOiBUaGlzIG5lZWRzIHNvbWUg c3R1ZHkKK3RvIGRldGVybWluZSBob3cgbGFyZ2UgYSBwcm9ibGVtIGl0IGlzLCBhbmQgbWlnaHQg bmVlZCB0byBiZSBmaXhlZCBzb29uZXIKK3JhdGhlciB0aGFuIGxhdGVyLgorCitXZSBkb24ndCBv ZmZlciBhbnkgY29udHJvbCBvdmVyIGVzdGltYXRlcywgb25seSBvdXRjb21lcy4gSXQgc2VlbXMg bGlrZSBhCitnb29kIGlkZWEgdG8gaW5jb3Jwb3JhdGUgdGhhdCBhYmlsaXR5IGF0IHNvbWUgZnV0 dXJlIHBvaW50LCBhcyBwZ19oaW50X3BsYW4KK2RvZXMuIEhvd2V2ZXIsIHNpbmNlIHByaW1hcnkg Z29hbCBvZiB0aGUgaW5pdGlhbCBkZXZlbG9wbWVudCB3b3JrIGlzIHRvIGJlCithYmxlIHRvIGlu ZHVjZSB0aGUgcGxhbm5lciB0byByZWNyZWF0ZSBhIGRlc2lyZWQgcGxhbiB0aGF0IHdvcmtlZCB3 ZWxsIGluCit0aGUgcGFzdCwgdGhpcyBoYXMgbm90IGJlZW4gaW5jbHVkZWQgaW4gdGhlIGluaXRp YWwgZGV2ZWxvcG1lbnQgZWZmb3J0LgorCitYWFggTmVlZCB0byBpbnZlc3RpZ2F0ZSB3aGV0aGVy IGFuZCBob3cgd2VsbCBzdXBwbHlpbmcgYWR2aWNlIHdvcmtzIHdpdGggR0VRTwpkaWZmIC0tZ2l0 IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9nYXRoZXIub3V0IGIvY29udHJpYi9w Z19wbGFuX2FkdmljZS9leHBlY3RlZC9nYXRoZXIub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwLi5iZDRmNGMyNGUyNwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIv cGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvZ2F0aGVyLm91dApAQCAtMCwwICsxLDM0NCBAQAorTE9B RCAncGdfcGxhbl9hZHZpY2UnOworU0VUIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIg PSAxOworU0VUIHBhcmFsbGVsX3NldHVwX2Nvc3QgPSAwOworU0VUIHBhcmFsbGVsX3R1cGxlX2Nv c3QgPSAwOworU0VUIG1pbl9wYXJhbGxlbF90YWJsZV9zY2FuX3NpemUgPSAwOworU0VUIGRlYnVn X3BhcmFsbGVsX3F1ZXJ5ID0gb2ZmOworQ1JFQVRFIFRBQkxFIGd0X2RpbSAoaWQgc2VyaWFsIHBy aW1hcnkga2V5LCBkaW0gdGV4dCkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7 CitJTlNFUlQgSU5UTyBndF9kaW0gKGRpbSkgU0VMRUNUIHJhbmRvbSgpOjp0ZXh0IEZST00gZ2Vu ZXJhdGVfc2VyaWVzKDEsMTAwKSBnOworVkFDVVVNIEFOQUxZWkUgZ3RfZGltOworQ1JFQVRFIFRB QkxFIGd0X2ZhY3QgKAorCWlkIGludCBub3QgbnVsbCwKKwlkaW1faWQgaW50ZWdlciBub3QgbnVs bCByZWZlcmVuY2VzIGd0X2RpbSAoaWQpCispIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZh bHNlKTsKK0lOU0VSVCBJTlRPIGd0X2ZhY3QKKwlTRUxFQ1QgZywgKGclMykrMSBGUk9NIGdlbmVy YXRlX3NlcmllcygxLDEwMDAwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIGd0X2ZhY3Q7CistLSBCeSBk ZWZhdWx0LCB3ZSBleHBlY3QgR2F0aGVyIE1lcmdlIHdpdGggYSBwYXJhbGxlbCBoYXNoIGpvaW4u CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFj dCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CisgICAg ICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgR2F0 aGVyIE1lcmdlCisgICBXb3JrZXJzIFBsYW5uZWQ6IDEKKyAgIC0+ICBTb3J0CisgICAgICAgICBT b3J0IEtleTogZi5kaW1faWQKKyAgICAgICAgIC0+ICBQYXJhbGxlbCBIYXNoIEpvaW4KKyAgICAg ICAgICAgICAgIEhhc2ggQ29uZDogKGYuZGltX2lkID0gZC5pZCkKKyAgICAgICAgICAgICAgIC0+ ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9mYWN0IGYKKyAgICAgICAgICAgICAgIC0+ICBQYXJh bGxlbCBIYXNoCisgICAgICAgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24g Z3RfZGltIGQKKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZCkKKyAg IEhBU0hfSk9JTihkKQorICAgU0VRX1NDQU4oZiBkKQorICAgR0FUSEVSX01FUkdFKChmIGQpKQor KDE0IHJvd3MpCisKKy0tIEZvcmNlIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugb2YgYm90aCByZWxh dGlvbnMgdG9nZXRoZXIuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnZ2F0aGVyX21lcmdlKChmIGQpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBk LmlkIE9SREVSIEJZIGQuaWQ7CisgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgR2F0aGVyIE1lcmdlCisgICBXb3JrZXJzIFBsYW5uZWQ6IDEK KyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTogZi5kaW1faWQKKyAgICAgICAgIC0+ICBQ YXJhbGxlbCBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKGYuZGltX2lkID0g ZC5pZCkKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9mYWN0IGYK KyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBIYXNoCisgICAgICAgICAgICAgICAgICAgICAt PiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gZ3RfZGltIGQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToK KyAgIEdBVEhFUl9NRVJHRSgoZiBkKSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFk dmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQorICAgSEFTSF9KT0lOKGQpCisgICBTRVFfU0NBTihm IGQpCisgICBHQVRIRVJfTUVSR0UoKGYgZCkpCisoMTYgcm93cykKKworU0VUIExPQ0FMIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXIoKGYgZCkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwg UExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBm LmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTb3J0CisgICBTb3J0IEtleTogZi5kaW1f aWQKKyAgIC0+ICBHYXRoZXIKKyAgICAgICAgIFdvcmtlcnMgUGxhbm5lZDogMQorICAgICAgICAg LT4gIFBhcmFsbGVsIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAoZi5kaW1f aWQgPSBkLmlkKQorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2Zh Y3QgZgorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIEhhc2gKKyAgICAgICAgICAgICAgICAg ICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2 aWNlOgorICAgR0FUSEVSKChmIGQpKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2 aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBIQVNIX0pPSU4oZCkKKyAgIFNFUV9TQ0FOKGYg ZCkKKyAgIEdBVEhFUigoZiBkKSkKKygxNiByb3dzKQorCitDT01NSVQ7CistLSBGb3JjZSBhIHNl cGFyYXRlIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugb3BlcmF0aW9uIGZvciBlYWNoIHJlbGF0aW9u LgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcl9tZXJn ZShmIGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJP TSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5p ZDsKKyAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdl IEpvaW4KKyAgIE1lcmdlIENvbmQ6IChmLmRpbV9pZCA9IGQuaWQpCisgICAtPiAgR2F0aGVyIE1l cmdlCisgICAgICAgICBXb3JrZXJzIFBsYW5uZWQ6IDEKKyAgICAgICAgIC0+ICBTb3J0CisgICAg ICAgICAgICAgICBTb3J0IEtleTogZi5kaW1faWQKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxl bCBTZXEgU2NhbiBvbiBndF9mYWN0IGYKKyAgIC0+ICBHYXRoZXIgTWVyZ2UKKyAgICAgICAgIFdv cmtlcnMgUGxhbm5lZDogMQorICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgIFNvcnQg S2V5OiBkLmlkCisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gZ3RfZGlt IGQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEdBVEhFUl9NRVJHRShmKSAvKiBtYXRjaGVk ICovCisgICBHQVRIRVJfTUVSR0UoZCkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFk dmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQorICAgTUVSR0VfSk9JTl9QTEFJTihkKQorICAgU0VR X1NDQU4oZiBkKQorICAgR0FUSEVSX01FUkdFKGYgZCkKKygyMCByb3dzKQorCitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcihmIGQpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBP TiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEpvaW4KKyAgIE1lcmdlIENvbmQ6IChmLmRp bV9pZCA9IGQuaWQpCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IGYuZGltX2lkCisg ICAgICAgICAtPiAgR2F0aGVyCisgICAgICAgICAgICAgICBXb3JrZXJzIFBsYW5uZWQ6IDEKKyAg ICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9mYWN0IGYKKyAgIC0+ICBT b3J0CisgICAgICAgICBTb3J0IEtleTogZC5pZAorICAgICAgICAgLT4gIEdhdGhlcgorICAgICAg ICAgICAgICAgV29ya2VycyBQbGFubmVkOiAxCisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwg U2VxIFNjYW4gb24gZ3RfZGltIGQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEdBVEhFUihm KSAvKiBtYXRjaGVkICovCisgICBHQVRIRVIoZCkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQ bGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQorICAgTUVSR0VfSk9JTl9QTEFJTihkKQor ICAgU0VRX1NDQU4oZiBkKQorICAgR0FUSEVSKGYgZCkKKygyMCByb3dzKQorCitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcigoZCBkL2QuZCkpJzsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9k aW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKKyAgICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEpvaW4KKyAgIE1lcmdlIENvbmQ6 IChmLmRpbV9pZCA9IGQuaWQpCisgICAtPiAgR2F0aGVyIE1lcmdlCisgICAgICAgICBXb3JrZXJz IFBsYW5uZWQ6IDEKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0IEtleTog Zi5kaW1faWQKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9mYWN0 IGYKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGd0X2RpbV9wa2V5IG9uIGd0X2RpbSBkCisgU3Vw cGxpZWQgUGxhbiBBZHZpY2U6CisgICBHQVRIRVIoKGQgZC9kLmQpKSAvKiBwYXJ0aWFsbHkgbWF0 Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQorICAg TUVSR0VfSk9JTl9QTEFJTihkKQorICAgU0VRX1NDQU4oZikKKyAgIElOREVYX1NDQU4oZCBwdWJs aWMuZ3RfZGltX3BrZXkpCisgICBHQVRIRVJfTUVSR0UoZikKKyAgIE5PX0dBVEhFUihkKQorKDE3 IHJvd3MpCisKK0NPTU1JVDsKKy0tIEZvcmNlIGEgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBvbiBv bmUgcmVsYXRpb24gYnV0IG5vIHBhcmFsbGVsaXNtIG9uIG90aGVyLgorQkVHSU47CitTRVQgTE9D QUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcl9tZXJnZShmKSBub19nYXRoZXIoZCkn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2Zh Y3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworICAg ICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgSm9pbgor ICAgTWVyZ2UgQ29uZDogKGYuZGltX2lkID0gZC5pZCkKKyAgIC0+ICBHYXRoZXIgTWVyZ2UKKyAg ICAgICAgIFdvcmtlcnMgUGxhbm5lZDogMQorICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAg ICAgIFNvcnQgS2V5OiBmLmRpbV9pZAorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBT Y2FuIG9uIGd0X2ZhY3QgZgorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgZ3RfZGltX3BrZXkgb24g Z3RfZGltIGQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEdBVEhFUl9NRVJHRShmKSAvKiBt YXRjaGVkICovCisgICBOT19HQVRIRVIoZCkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFu IEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQorICAgTUVSR0VfSk9JTl9QTEFJTihkKQorICAg U0VRX1NDQU4oZikKKyAgIElOREVYX1NDQU4oZCBwdWJsaWMuZ3RfZGltX3BrZXkpCisgICBHQVRI RVJfTUVSR0UoZikKKyAgIE5PX0dBVEhFUihkKQorKDE4IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyX21lcmdlKGQpIG5vX2dhdGhlcihmKSc7CitFWFBM QUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpP SU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CisgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgSm9pbgorICAgTWVyZ2Ug Q29uZDogKGYuZGltX2lkID0gZC5pZCkKKyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTog Zi5kaW1faWQKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBndF9mYWN0IGYKKyAgIC0+ICBHYXRo ZXIgTWVyZ2UKKyAgICAgICAgIFdvcmtlcnMgUGxhbm5lZDogMQorICAgICAgICAgLT4gIFNvcnQK KyAgICAgICAgICAgICAgIFNvcnQgS2V5OiBkLmlkCisgICAgICAgICAgICAgICAtPiAgUGFyYWxs ZWwgU2VxIFNjYW4gb24gZ3RfZGltIGQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEdBVEhF Ul9NRVJHRShkKSAvKiBtYXRjaGVkICovCisgICBOT19HQVRIRVIoZikgLyogbWF0Y2hlZCAqLwor IEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQorICAgTUVSR0VfSk9J Tl9QTEFJTihkKQorICAgU0VRX1NDQU4oZiBkKQorICAgR0FUSEVSX01FUkdFKGQpCisgICBOT19H QVRIRVIoZikKKygxOSByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J2dhdGhlcihmKSBub19nYXRoZXIoZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0g ZC5pZCBPUkRFUiBCWSBkLmlkOworICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgTWVyZ2UgSm9pbgorICAgTWVyZ2UgQ29uZDogKGQuaWQgPSBmLmRpbV9pZCkK KyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGd0X2RpbV9wa2V5IG9uIGd0X2RpbSBkCisgICAtPiAg U29ydAorICAgICAgICAgU29ydCBLZXk6IGYuZGltX2lkCisgICAgICAgICAtPiAgR2F0aGVyCisg ICAgICAgICAgICAgICBXb3JrZXJzIFBsYW5uZWQ6IDEKKyAgICAgICAgICAgICAgIC0+ICBQYXJh bGxlbCBTZXEgU2NhbiBvbiBndF9mYWN0IGYKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEdB VEhFUihmKSAvKiBtYXRjaGVkICovCisgICBOT19HQVRIRVIoZCkgLyogbWF0Y2hlZCAqLworIEdl bmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZCBmKQorICAgTUVSR0VfSk9JTl9Q TEFJTihmKQorICAgU0VRX1NDQU4oZikKKyAgIElOREVYX1NDQU4oZCBwdWJsaWMuZ3RfZGltX3Br ZXkpCisgICBHQVRIRVIoZikKKyAgIE5PX0dBVEhFUihkKQorKDE4IHJvd3MpCisKK1NFVCBMT0NB TCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyKGQpIG5vX2dhdGhlcihmKSc7CitFWFBM QUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpP SU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CisgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgSm9pbgorICAgTWVyZ2Ug Q29uZDogKGYuZGltX2lkID0gZC5pZCkKKyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTog Zi5kaW1faWQKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBndF9mYWN0IGYKKyAgIC0+ICBTb3J0 CisgICAgICAgICBTb3J0IEtleTogZC5pZAorICAgICAgICAgLT4gIEdhdGhlcgorICAgICAgICAg ICAgICAgV29ya2VycyBQbGFubmVkOiAxCisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2Vx IFNjYW4gb24gZ3RfZGltIGQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEdBVEhFUihkKSAv KiBtYXRjaGVkICovCisgICBOT19HQVRIRVIoZikgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQ bGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQorICAgTUVSR0VfSk9JTl9QTEFJTihkKQor ICAgU0VRX1NDQU4oZiBkKQorICAgR0FUSEVSKGQpCisgICBOT19HQVRIRVIoZikKKygxOSByb3dz KQorCitDT01NSVQ7CistLSBGb3JjZSBubyBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIHVzZSBhdCBh bGwuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnbm9fZ2F0aGVy KGYgZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9N IGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlk OworICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBKb2lu CisgICBNZXJnZSBDb25kOiAoZC5pZCA9IGYuZGltX2lkKQorICAgLT4gIEluZGV4IFNjYW4gdXNp bmcgZ3RfZGltX3BrZXkgb24gZ3RfZGltIGQKKyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtl eTogZi5kaW1faWQKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBndF9mYWN0IGYKKyBTdXBwbGll ZCBQbGFuIEFkdmljZToKKyAgIE5PX0dBVEhFUihmKSAvKiBtYXRjaGVkICovCisgICBOT19HQVRI RVIoZCkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JE RVIoZCBmKQorICAgTUVSR0VfSk9JTl9QTEFJTihmKQorICAgU0VRX1NDQU4oZikKKyAgIElOREVY X1NDQU4oZCBwdWJsaWMuZ3RfZGltX3BrZXkpCisgICBOT19HQVRIRVIoZiBkKQorKDE1IHJvd3Mp CisKK0NPTU1JVDsKKy0tIENhbid0IGZvcmNlIEdhdGhlciBNZXJnZSB3aXRob3V0IHRoZSBPUkRF UiBCWSBjbGF1c2UsIGJ1dCBqdXN0IEdhdGhlciBpcyBPSy4KK0JFR0lOOworU0VUIExPQ0FMIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXJfbWVyZ2UoKGYgZCkpJzsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9k aW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgR2F0aGVyCisgICBEaXNhYmxlZDogdHJ1ZQorICAgV29ya2VycyBQbGFu bmVkOiAxCisgICAtPiAgUGFyYWxsZWwgSGFzaCBKb2luCisgICAgICAgICBIYXNoIENvbmQ6IChm LmRpbV9pZCA9IGQuaWQpCisgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gZ3RfZmFj dCBmCisgICAgICAgICAtPiAgUGFyYWxsZWwgSGFzaAorICAgICAgICAgICAgICAgLT4gIFBhcmFs bGVsIFNlcSBTY2FuIG9uIGd0X2RpbSBkCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBHQVRI RVJfTUVSR0UoKGYgZCkpIC8qIG1hdGNoZWQsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFk dmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQorICAgSEFTSF9KT0lOKGQpCisgICBTRVFfU0NBTihm IGQpCisgICBHQVRIRVIoKGYgZCkpCisoMTUgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdnYXRoZXIoKGYgZCkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9B RFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9p ZCA9IGQuaWQ7CisgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg R2F0aGVyCisgICBXb3JrZXJzIFBsYW5uZWQ6IDEKKyAgIC0+ICBQYXJhbGxlbCBIYXNoIEpvaW4K KyAgICAgICAgIEhhc2ggQ29uZDogKGYuZGltX2lkID0gZC5pZCkKKyAgICAgICAgIC0+ICBQYXJh bGxlbCBTZXEgU2NhbiBvbiBndF9mYWN0IGYKKyAgICAgICAgIC0+ICBQYXJhbGxlbCBIYXNoCisg ICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gZ3RfZGltIGQKKyBTdXBwbGll ZCBQbGFuIEFkdmljZToKKyAgIEdBVEhFUigoZiBkKSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRl ZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQorICAgSEFTSF9KT0lOKGQpCisgICBT RVFfU0NBTihmIGQpCisgICBHQVRIRVIoKGYgZCkpCisoMTQgcm93cykKKworQ09NTUlUOwpkaWZm IC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9qb2luX29yZGVyLm91dCBi L2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvam9pbl9vcmRlci5vdXQKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmMxZTljODJmNDMzCi0tLSAvZGV2L251bGwK KysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9qb2luX29yZGVyLm91dApAQCAt MCwwICsxLDM1NCBAQAorTE9BRCAncGdfcGxhbl9hZHZpY2UnOworU0VUIG1heF9wYXJhbGxlbF93 b3JrZXJzX3Blcl9nYXRoZXIgPSAwOworQ1JFQVRFIFRBQkxFIGpvX2RpbTEgKGlkIGludGVnZXIg cHJpbWFyeSBrZXksIGRpbTEgdGV4dCwgdmFsMSBpbnQpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFi bGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gam9fZGltMSAoaWQsIGRpbTEsIHZhbDEpCisJU0VM RUNUIGcsICdzb21lIGZpbGxlciB0ZXh0ICcgfHwgZywgKGcgJSAzKSArIDEKKwkgIEZST00gZ2Vu ZXJhdGVfc2VyaWVzKDEsMTAwKSBnOworVkFDVVVNIEFOQUxZWkUgam9fZGltMTsKK0NSRUFURSBU QUJMRSBqb19kaW0yIChpZCBpbnRlZ2VyIHByaW1hcnkga2V5LCBkaW0yIHRleHQsIHZhbDIgaW50 KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIGpvX2Rp bTIgKGlkLCBkaW0yLCB2YWwyKQorCVNFTEVDVCBnLCAnc29tZSBmaWxsZXIgdGV4dCAnIHx8IGcs IChnICUgNykgKyAxCisJICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDApIGc7CitWQUNVVU0g QU5BTFlaRSBqb19kaW0yOworQ1JFQVRFIFRBQkxFIGpvX2ZhY3QgKAorCWlkIGludCBwcmltYXJ5 IGtleSwKKwlkaW0xX2lkIGludGVnZXIgbm90IG51bGwgcmVmZXJlbmNlcyBqb19kaW0xIChpZCks CisJZGltMl9pZCBpbnRlZ2VyIG5vdCBudWxsIHJlZmVyZW5jZXMgam9fZGltMiAoaWQpCispIFdJ VEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIGpvX2ZhY3QKKwlT RUxFQ1QgZywgKGclMTAwKSsxLCAoZyUxMDApKzEgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAw MDApIGc7CitWQUNVVU0gQU5BTFlaRSBqb19mYWN0OworLS0gV2UgZXhwZWN0IHRvIGpvaW4gdG8g ZDIgZmlyc3QgYW5kIHRoZW4gZDEsIHNpbmNlIHRoZSBjb25kaXRpb24gb24gZDIKKy0tIGlzIG1v cmUgc2VsZWN0aXZlLgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAq IEZST00gam9fZmFjdCBmCisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEu aWQKKwlMRUZUIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZh bDEgPSAxIEFORCB2YWwyID0gMTsKKyAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFz aCBKb2luCisgICBIYXNoIENvbmQ6IChmLmRpbTFfaWQgPSBkMS5pZCkKKyAgIC0+ICBIYXNoIEpv aW4KKyAgICAgICAgIEhhc2ggQ29uZDogKGYuZGltMl9pZCA9IGQyLmlkKQorICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIGpvX2ZhY3QgZgorICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBqb19kaW0yIGQyCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6 ICh2YWwyID0gMSkKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGlt MSBkMQorICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgR2VuZXJhdGVkIFBsYW4g QWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQyIGQxKQorICAgSEFTSF9KT0lOKGQyIGQxKQorICAg U0VRX1NDQU4oZiBkMiBkMSkKKyAgIE5PX0dBVEhFUihmIGQxIGQyKQorKDE2IHJvd3MpCisKKy0t IEZvcmNlIGEgZmV3IGRpZmZlcmVudCBqb2luIG9yZGVycy4gU29tZSBvZiB0aGVzZSBhcmUgdmVy eSBpbmVmZmljaWVudCwKKy0tIGJ1dCB0aGUgcGxhbm5lciBjb25zaWRlcnMgdGhlbSBhbGwgdmlh YmxlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3Jk ZXIoZiBkMSBkMiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAq IEZST00gam9fZmFjdCBmCisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEu aWQKKwlMRUZUIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZh bDEgPSAxIEFORCB2YWwyID0gMTsKKyAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFz aCBKb2luCisgICBIYXNoIENvbmQ6IChmLmRpbTJfaWQgPSBkMi5pZCkKKyAgIC0+ICBIYXNoIEpv aW4KKyAgICAgICAgIEhhc2ggQ29uZDogKGYuZGltMV9pZCA9IGQxLmlkKQorICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIGpvX2ZhY3QgZgorICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBqb19kaW0xIGQxCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6 ICh2YWwxID0gMSkKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGlt MiBkMgorICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgU3VwcGxpZWQgUGxhbiBB ZHZpY2U6CisgICBKT0lOX09SREVSKGYgZDEgZDIpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQg UGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZDEgZDIpCisgICBIQVNIX0pPSU4oZDEgZDIp CisgICBTRVFfU0NBTihmIGQxIGQyKQorICAgTk9fR0FUSEVSKGYgZDEgZDIpCisoMTggcm93cykK KworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGYgZDIgZDEp JzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2Zh Y3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBK T0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQg dmFsMiA9IDE7CisgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAg SGFzaCBDb25kOiAoZi5kaW0xX2lkID0gZDEuaWQpCisgICAtPiAgSGFzaCBKb2luCisgICAgICAg ICBIYXNoIENvbmQ6IChmLmRpbTJfaWQgPSBkMi5pZCkKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBqb19mYWN0IGYKKyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gam9fZGltMiBkMgorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEp CisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTEgZDEKKyAgICAg ICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAg Sk9JTl9PUkRFUihmIGQyIGQxKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNl OgorICAgSk9JTl9PUkRFUihmIGQyIGQxKQorICAgSEFTSF9KT0lOKGQyIGQxKQorICAgU0VRX1ND QU4oZiBkMiBkMSkKKyAgIE5PX0dBVEhFUihmIGQxIGQyKQorKDE4IHJvd3MpCisKK1NFVCBMT0NB TCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihkMSBmIGQyKSc7CitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19mYWN0IGYKKwlMRUZU IEpPSU4gam9fZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBqb19kaW0y IGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOwor ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBKb2luCisgICBIYXNoIENvbmQ6IChm LmRpbTJfaWQgPSBkMi5pZCkKKyAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgIEhhc2ggQ29uZDog KGQxLmlkID0gZi5kaW0xX2lkKQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTEgZDEK KyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgICAgICAgLT4gIEhhc2gKKyAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19mYWN0IGYKKyAgIC0+ICBIYXNoCisgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMiBkMgorICAgICAgICAgICAgICAgRmlsdGVyOiAo dmFsMiA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGQxIGYgZDIp IC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGQx IGYgZDIpCisgICBIQVNIX0pPSU4oZiBkMikKKyAgIFNFUV9TQ0FOKGQxIGYgZDIpCisgICBOT19H QVRIRVIoZiBkMSBkMikKKygxOCByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ2pvaW5fb3JkZXIoZiAoZDEgZDIpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKQorU0VMRUNUICogRlJPTSBqb19mYWN0IGYKKwlMRUZUIEpPSU4gam9fZGltMSBkMSBP TiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCA9 IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworICAgICAgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdl IEpvaW4KKyAgIE1lcmdlIENvbmQ6ICgoZi5kaW0yX2lkID0gZDIuaWQpIEFORCAoZi5kaW0xX2lk ID0gZDEuaWQpKQorICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiBmLmRpbTJfaWQsIGYu ZGltMV9pZAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2ZhY3QgZgorICAgLT4gIFNvcnQK KyAgICAgICAgIFNvcnQgS2V5OiBkMi5pZCwgZDEuaWQKKyAgICAgICAgIC0+ICBOZXN0ZWQgTG9v cAorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTEgZDEKKyAgICAgICAgICAg ICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgICAgICAgICAgICAgLT4gIE1hdGVyaWFs aXplCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMiBkMgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgU3VwcGxpZWQgUGxh biBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgKGQxIGQyKSkgLyogbWF0Y2hlZCAqLworIEdlbmVy YXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiAoZDEgZDIpKQorICAgTUVSR0VfSk9J Tl9QTEFJTigoZDEgZDIpKQorICAgTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUoZDIpCisgICBTRVFf U0NBTihmIGQxIGQyKQorICAgTk9fR0FUSEVSKGYgZDEgZDIpCisoMjEgcm93cykKKworQ09NTUlU OworQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIo Zi9kMSBkMSBkMiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAq IEZST00gam9fZmFjdCBmCisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEu aWQKKwlMRUZUIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZh bDEgPSAxIEFORCB2YWwyID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgRGlzYWJs ZWQ6IHRydWUKKyAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgRGlzYWJsZWQ6IHRydWUKKyAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19mYWN0IGYKKyAgICAgICAgIC0+ICBJbmRleCBTY2Fu IHVzaW5nIGpvX2RpbTFfcGtleSBvbiBqb19kaW0xIGQxCisgICAgICAgICAgICAgICBJbmRleCBD b25kOiAoaWQgPSBmLmRpbTFfaWQpCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkK KyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGpvX2RpbTJfcGtleSBvbiBqb19kaW0yIGQyCisgICAg ICAgICBJbmRleCBDb25kOiAoaWQgPSBmLmRpbTJfaWQpCisgICAgICAgICBGaWx0ZXI6ICh2YWwy ID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZi9kMSBkMSBkMikg LyogcGFydGlhbGx5IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lO X09SREVSKGYgZDEgZDIpCisgICBORVNURURfTE9PUF9QTEFJTihkMSBkMikKKyAgIFNFUV9TQ0FO KGYpCisgICBJTkRFWF9TQ0FOKGQxIHB1YmxpYy5qb19kaW0xX3BrZXkgZDIgcHVibGljLmpvX2Rp bTJfcGtleSkKKyAgIE5PX0dBVEhFUihmIGQxIGQyKQorKDE5IHJvd3MpCisKK1NFVCBMT0NBTCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihmL2QxIChkMSBkMikpJzsKK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2ZhY3QgZgorCUxF RlQgSk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGpvX2Rp bTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7 CisgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgRGlzYWJsZWQ6IHRydWUKKyAgIEpvaW4g RmlsdGVyOiAoKGQxLmlkID0gZi5kaW0xX2lkKSBBTkQgKGQyLmlkID0gZi5kaW0yX2lkKSkKKyAg IC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTEgZDEKKyAg ICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgICAgICAgLT4gIE1hdGVyaWFsaXpl CisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMiBkMgorICAgICAgICAgICAg ICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAtPiAgU2VxIFNjYW4gb24gam9fZmFjdCBm CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYvZDEgKGQxIGQyKSkgLyog cGFydGlhbGx5IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09S REVSKGQxIGQyIGYpCisgICBORVNURURfTE9PUF9QTEFJTihmKQorICAgTkVTVEVEX0xPT1BfTUFU RVJJQUxJWkUoZDIpCisgICBTRVFfU0NBTihkMSBkMiBmKQorICAgTk9fR0FUSEVSKGYgZDEgZDIp CisoMTggcm93cykKKworQ09NTUlUOworLS0gVGhlIHVudXN1YWwgZm9ybXVsYXRpb24gb2YgdGhp cyBxdWVyeSBpcyBpbnRlbmRlZCB0byBwcmV2ZW50IHRoZSBxdWVyeQorLS0gcGxhbm5lciBmcm9t IHJlZHVjaW5nIHRoZSBGVUxMIEpPSU4gdG8gc29tZSBvdGhlciBqb2luIHR5cGUsIHNvIHRoYXQg d2UKKy0tIGNhbiB0ZXN0IHdoYXQgaGFwcGVucyB3aXRoIGEgam9pbiB0eXBlIHRoYXQgY2Fubm90 IGJlIHJlb3JkZXJlZC4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1Qg KiBGUk9NIGpvX2RpbTEgZDEKKwlJTk5FUiBKT0lOIChqb19mYWN0IGYgRlVMTCBKT0lOIGpvX2Rp bTIgZDIgT04gZi5kaW0yX2lkICsgMCA9IGQyLmlkICsgMCkKKwlPTiBkMS5pZCA9IGYuZGltMV9p ZCBPUiBmLmRpbTFfaWQgSVMgTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9p biBGaWx0ZXI6ICgoZDEuaWQgPSBmLmRpbTFfaWQpIE9SIChmLmRpbTFfaWQgSVMgTlVMTCkpCisg ICAtPiAgTWVyZ2UgRnVsbCBKb2luCisgICAgICAgICBNZXJnZSBDb25kOiAoKChkMi5pZCArIDAp KSA9ICgoZi5kaW0yX2lkICsgMCkpKQorICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAg IFNvcnQgS2V5OiAoKGQyLmlkICsgMCkpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24g am9fZGltMiBkMgorICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgIFNvcnQgS2V5OiAo KGYuZGltMl9pZCArIDApKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2ZhY3Qg ZgorICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMSBk MQorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZDIgZiBkMSkKKyAgIE1F UkdFX0pPSU5fUExBSU4oZikKKyAgIE5FU1RFRF9MT09QX01BVEVSSUFMSVpFKGQxKQorICAgU0VR X1NDQU4oZDIgZiBkMSkKKyAgIE5PX0dBVEhFUihkMSBmIGQyKQorKDE4IHJvd3MpCisKKy0tIFdl IHNob3VsZCBub3QgYmUgYWJsZSB0byBmb3JjZSB0aGUgcGxhbm5lciB0byBqb2luIGYgdG8gZDEg Zmlyc3QsIGJlY2F1c2UKKy0tIHRoYXQgaXMgbm90IGEgdmFsaWQgam9pbiBvcmRlciwgYnV0IHdl IHNob3VsZCBiZSBhYmxlIHRvIGZvcmNlIHRoZSBwbGFubmVyCistLSB0byBtYWtlIGVpdGhlciBk MiBvciBmIHRoZSBkcml2aW5nIHRhYmxlLgorQkVHSU47CistLSBYWFg6IFRoZSBhZHZpY2UgZmVl ZGJhY2sgc2F5cyAncGFydGlhbGx5IG1hdGNoZWQnIGhlcmUgd2hpY2ggaXNuJ3QgZXhhY3RseQor LS0gd3JvbmcgZ2l2ZW4gdGhlIHdheSB0aGF0IGZsYWcgaXMgaGFuZGxlZCBpbiB0aGUgY29kZSwg YnV0IGl0J3MgYXQgdGhlIHZlcnkKKy0tIGxlYXN0IGNvbmZ1c2luZy4gU29tZXRoaW5nIHNob3Vs ZCBwcm9iYWJseSBiZSBpbXByb3ZlZCBoZXJlLgorU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdqb2luX29yZGVyKGYgZDEgZDIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9B RFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2RpbTEgZDEKKwlJTk5FUiBKT0lOIChqb19mYWN0IGYg RlVMTCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkICsgMCA9IGQyLmlkICsgMCkKKwlPTiBk MS5pZCA9IGYuZGltMV9pZCBPUiBmLmRpbTFfaWQgSVMgTlVMTDsKKyAgICAgICAgICAgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0 ZWQgTG9vcAorICAgRGlzYWJsZWQ6IHRydWUKKyAgIEpvaW4gRmlsdGVyOiAoKGQxLmlkID0gZi5k aW0xX2lkKSBPUiAoZi5kaW0xX2lkIElTIE5VTEwpKQorICAgLT4gIE1lcmdlIEZ1bGwgSm9pbgor ICAgICAgICAgRGlzYWJsZWQ6IHRydWUKKyAgICAgICAgIE1lcmdlIENvbmQ6ICgoKGQyLmlkICsg MCkpID0gKChmLmRpbTJfaWQgKyAwKSkpCisgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAg ICAgU29ydCBLZXk6ICgoZDIuaWQgKyAwKSkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBqb19kaW0yIGQyCisgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgU29ydCBLZXk6 ICgoZi5kaW0yX2lkICsgMCkpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZmFj dCBmCisgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMSBkMQorIFN1cHBsaWVkIFBsYW4gQWR2aWNl OgorICAgSk9JTl9PUkRFUihmIGQxIGQyKSAvKiBwYXJ0aWFsbHkgbWF0Y2hlZCAqLworIEdlbmVy YXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZDIgZiBkMSkKKyAgIE1FUkdFX0pPSU5f UExBSU4oZikKKyAgIE5FU1RFRF9MT09QX1BMQUlOKGQxKQorICAgU0VRX1NDQU4oZDIgZiBkMSkK KyAgIE5PX0dBVEhFUihkMSBmIGQyKQorKDIxIHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihmIGQyIGQxKSc7CitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19kaW0xIGQxCisJSU5ORVIgSk9JTiAoam9f ZmFjdCBmIEZVTEwgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCArIDAgPSBkMi5pZCArIDAp CisJT04gZDEuaWQgPSBmLmRpbTFfaWQgT1IgZi5kaW0xX2lkIElTIE5VTEw7CisgICAgICAgICAg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgTmVzdGVkIExvb3AKKyAgIEpvaW4gRmlsdGVyOiAoKGQxLmlkID0gZi5kaW0xX2lkKSBPUiAo Zi5kaW0xX2lkIElTIE5VTEwpKQorICAgLT4gIE1lcmdlIEZ1bGwgSm9pbgorICAgICAgICAgTWVy Z2UgQ29uZDogKCgoZi5kaW0yX2lkICsgMCkpID0gKChkMi5pZCArIDApKSkKKyAgICAgICAgIC0+ ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0IEtleTogKChmLmRpbTJfaWQgKyAwKSkKKyAgICAg ICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19mYWN0IGYKKyAgICAgICAgIC0+ICBTb3J0Cisg ICAgICAgICAgICAgICBTb3J0IEtleTogKChkMi5pZCArIDApKQorICAgICAgICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIGpvX2RpbTIgZDIKKyAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIGpvX2RpbTEgZDEKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEpPSU5f T1JERVIoZiBkMiBkMSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAg IEpPSU5fT1JERVIoZiBkMiBkMSkKKyAgIE1FUkdFX0pPSU5fUExBSU4oZDIpCisgICBORVNURURf TE9PUF9NQVRFUklBTElaRShkMSkKKyAgIFNFUV9TQ0FOKGYgZDIgZDEpCisgICBOT19HQVRIRVIo ZDEgZiBkMikKKygyMCByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J2pvaW5fb3JkZXIoZDIgZiBkMSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkK K1NFTEVDVCAqIEZST00gam9fZGltMSBkMQorCUlOTkVSIEpPSU4gKGpvX2ZhY3QgZiBGVUxMIEpP SU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgKyAwID0gZDIuaWQgKyAwKQorCU9OIGQxLmlkID0g Zi5kaW0xX2lkIE9SIGYuZGltMV9pZCBJUyBOVUxMOworICAgICAgICAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29w CisgICBKb2luIEZpbHRlcjogKChkMS5pZCA9IGYuZGltMV9pZCkgT1IgKGYuZGltMV9pZCBJUyBO VUxMKSkKKyAgIC0+ICBNZXJnZSBGdWxsIEpvaW4KKyAgICAgICAgIE1lcmdlIENvbmQ6ICgoKGQy LmlkICsgMCkpID0gKChmLmRpbTJfaWQgKyAwKSkpCisgICAgICAgICAtPiAgU29ydAorICAgICAg ICAgICAgICAgU29ydCBLZXk6ICgoZDIuaWQgKyAwKSkKKyAgICAgICAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBqb19kaW0yIGQyCisgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgU29y dCBLZXk6ICgoZi5kaW0yX2lkICsgMCkpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24g am9fZmFjdCBmCisgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBq b19kaW0xIGQxCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGQyIGYgZDEp IC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGQy IGYgZDEpCisgICBNRVJHRV9KT0lOX1BMQUlOKGYpCisgICBORVNURURfTE9PUF9NQVRFUklBTEla RShkMSkKKyAgIFNFUV9TQ0FOKGQyIGYgZDEpCisgICBOT19HQVRIRVIoZDEgZiBkMikKKygyMCBy b3dzKQorCitDT01NSVQ7CistLSBYWFg6IGFkZCB0ZXN0cyBmb3Igam9pbiBvcmRlciBwcmVmaXgg bWF0Y2hpbmcKKy0tIFhYWDogam9pbl9vcmRlcihqdXN0b25lcmVsKSBzaG91bGRuJ3QgcmVwb3J0 IHBhcnRpYWxseSBtYXRjaGVkCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4 cGVjdGVkL2pvaW5fc3RyYXRlZ3kub3V0IGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3Rl ZC9qb2luX3N0cmF0ZWd5Lm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MC4uNzFlZTI2YTMzN2EKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNl L2V4cGVjdGVkL2pvaW5fc3RyYXRlZ3kub3V0CkBAIC0wLDAgKzEsMjk3IEBACitMT0FEICdwZ19w bGFuX2FkdmljZSc7CitTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7CitD UkVBVEUgVEFCTEUgam9pbl9kaW0gKGlkIHNlcmlhbCBwcmltYXJ5IGtleSwgZGltIHRleHQpCisJ V0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gam9pbl9kaW0g KGRpbSkgU0VMRUNUIHJhbmRvbSgpOjp0ZXh0IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwKSBn OworVkFDVVVNIEFOQUxZWkUgam9pbl9kaW07CitDUkVBVEUgVEFCTEUgam9pbl9mYWN0ICgKKwlp ZCBpbnQgcHJpbWFyeSBrZXksCisJZGltX2lkIGludGVnZXIgbm90IG51bGwgcmVmZXJlbmNlcyBq b2luX2RpbSAoaWQpCispIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VS VCBJTlRPIGpvaW5fZmFjdAorCVNFTEVDVCBnLCAoZyUzKSsxIEZST00gZ2VuZXJhdGVfc2VyaWVz KDEsMTAwMDAwKSBnOworQ1JFQVRFIElOREVYIGpvaW5fZmFjdF9kaW1faWQgT04gam9pbl9mYWN0 IChkaW1faWQpOworVkFDVVVNIEFOQUxZWkUgam9pbl9mYWN0OworLS0gV2UgZXhwZWN0IGEgaGFz aCBqb2luIGJ5IGRlZmF1bHQuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNF TEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5p ZDsKKyAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBKb2luCisgICBIYXNoIENvbmQ6IChmLmRpbV9p ZCA9IGQuaWQpCisgICAtPiAgU2VxIFNjYW4gb24gam9pbl9mYWN0IGYKKyAgIC0+ICBIYXNoCisg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9pbl9kaW0gZAorIEdlbmVyYXRlZCBQbGFuIEFkdmlj ZToKKyAgIEpPSU5fT1JERVIoZiBkKQorICAgSEFTSF9KT0lOKGQpCisgICBTRVFfU0NBTihmIGQp CisgICBOT19HQVRIRVIoZiBkKQorKDEwIHJvd3MpCisKKy0tIFRyeSBmb3JjaW5nIGVhY2ggam9p biBtZXRob2QgaW4gdHVybiB3aXRoIGpvaW5fZGltIGFzIHRoZSBpbm5lciB0YWJsZS4KKy0tIEFs bCBvZiB0aGVzZSBzaG91bGQgd29yayBleGNlcHQgZm9yIE1FUkdFX0pPSU5fTUFURVJJQUxJWkU7 IHRoYXQgd2lsbAorLS0gZmFpbCwgYmVjYXVzZSB0aGUgcGxhbm5lciBrbm93cyB0aGF0IGpvaW5f ZGltIChpZCkgaXMgdW5pcXVlLCBhbmQgd2lsbAorLS0gcmVmdXNlIHRvIGFkZCBtYXJrL3Jlc3Rv cmUgb3ZlcmhlYWQuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn SEFTSF9KT0lOKGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNU ICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOwor ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKGYuZGltX2lkID0g ZC5pZCkKKyAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2ZhY3QgZgorICAgLT4gIEhhc2gKKyAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2RpbSBkCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6Cisg ICBIQVNIX0pPSU4oZCkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAg IEpPSU5fT1JERVIoZiBkKQorICAgSEFTSF9KT0lOKGQpCisgICBTRVFfU0NBTihmIGQpCisgICBO T19HQVRIRVIoZiBkKQorKDEyIHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnTUVSR0VfSk9JTl9NQVRFUklBTElaRShkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9O IGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBKb2luCisgICBEaXNh YmxlZDogdHJ1ZQorICAgTWVyZ2UgQ29uZDogKGYuZGltX2lkID0gZC5pZCkKKyAgIC0+ICBJbmRl eCBTY2FuIHVzaW5nIGpvaW5fZmFjdF9kaW1faWQgb24gam9pbl9mYWN0IGYKKyAgIC0+ICBJbmRl eCBTY2FuIHVzaW5nIGpvaW5fZGltX3BrZXkgb24gam9pbl9kaW0gZAorIFN1cHBsaWVkIFBsYW4g QWR2aWNlOgorICAgTUVSR0VfSk9JTl9NQVRFUklBTElaRShkKSAvKiBtYXRjaGVkLCBmYWlsZWQg Ki8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZCkKKyAgIE1FUkdF X0pPSU5fUExBSU4oZCkKKyAgIElOREVYX1NDQU4oZiBwdWJsaWMuam9pbl9mYWN0X2RpbV9pZCBk IHB1YmxpYy5qb2luX2RpbV9wa2V5KQorICAgTk9fR0FUSEVSKGYgZCkKKygxMiByb3dzKQorCitT RVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ01FUkdFX0pPSU5fUExBSU4oZCknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFj dCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgTWVyZ2UgSm9pbgorICAgTWVyZ2UgQ29uZDogKGYuZGltX2lkID0gZC5pZCkKKyAgIC0+ICBJ bmRleCBTY2FuIHVzaW5nIGpvaW5fZmFjdF9kaW1faWQgb24gam9pbl9mYWN0IGYKKyAgIC0+ICBJ bmRleCBTY2FuIHVzaW5nIGpvaW5fZGltX3BrZXkgb24gam9pbl9kaW0gZAorIFN1cHBsaWVkIFBs YW4gQWR2aWNlOgorICAgTUVSR0VfSk9JTl9QTEFJTihkKSAvKiBtYXRjaGVkICovCisgR2VuZXJh dGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBNRVJHRV9KT0lOX1BMQUlO KGQpCisgICBJTkRFWF9TQ0FOKGYgcHVibGljLmpvaW5fZmFjdF9kaW1faWQgZCBwdWJsaWMuam9p bl9kaW1fcGtleSkKKyAgIE5PX0dBVEhFUihmIGQpCisoMTEgcm93cykKKworU0VUIExPQ0FMIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdORVNURURfTE9PUF9NQVRFUklBTElaRShkKSc7CitFWFBM QUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYg Sk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBKb2luIEZpbHRlcjogKGYuZGltX2lkID0g ZC5pZCkKKyAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2ZhY3QgZgorICAgLT4gIE1hdGVyaWFsaXpl CisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9pbl9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2 aWNlOgorICAgTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUoZCkgLyogbWF0Y2hlZCAqLworIEdlbmVy YXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQorICAgTkVTVEVEX0xPT1BfTUFU RVJJQUxJWkUoZCkKKyAgIFNFUV9TQ0FOKGYgZCkKKyAgIE5PX0dBVEhFUihmIGQpCisoMTIgcm93 cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdORVNURURfTE9PUF9NRU1P SVpFKGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJP TSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworICAgICAg ICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IE5lc3RlZCBMb29wCisgICAtPiAgU2VxIFNjYW4gb24gam9pbl9mYWN0IGYKKyAgIC0+ICBNZW1v aXplCisgICAgICAgICBDYWNoZSBLZXk6IGYuZGltX2lkCisgICAgICAgICBDYWNoZSBNb2RlOiBs b2dpY2FsCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBqb2luX2RpbV9wa2V5IG9uIGpv aW5fZGltIGQKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IGYuZGltX2lkKQorIFN1 cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgTkVTVEVEX0xPT1BfTUVNT0laRShkKSAvKiBtYXRjaGVk ICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBORVNU RURfTE9PUF9NRU1PSVpFKGQpCisgICBTRVFfU0NBTihmKQorICAgSU5ERVhfU0NBTihkIHB1Ymxp Yy5qb2luX2RpbV9wa2V5KQorICAgTk9fR0FUSEVSKGYgZCkKKygxNSByb3dzKQorCitTRVQgTE9D QUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05FU1RFRF9MT09QX1BMQUlOKGQpJzsKK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBK T0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworICAgICAgICAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICAtPiAgU2VxIFNj YW4gb24gam9pbl9mYWN0IGYKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGpvaW5fZGltX3BrZXkg b24gam9pbl9kaW0gZAorICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gZi5kaW1faWQpCisgU3Vw cGxpZWQgUGxhbiBBZHZpY2U6CisgICBORVNURURfTE9PUF9QTEFJTihkKSAvKiBtYXRjaGVkICov CisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBORVNURURf TE9PUF9QTEFJTihkKQorICAgU0VRX1NDQU4oZikKKyAgIElOREVYX1NDQU4oZCBwdWJsaWMuam9p bl9kaW1fcGtleSkKKyAgIE5PX0dBVEhFUihmIGQpCisoMTIgcm93cykKKworQ09NTUlUOworLS0g Tm93IHRyeSBmb3JjaW5nIGVhY2ggam9pbiBtZXRob2QgaW4gdHVybiB3aXRoIGpvaW5fZmFjdCBh cyB0aGUgaW5uZXIKKy0tIHRhYmxlLiBBbGwgb2YgdGhlc2Ugc2hvdWxkIHdvcmsuCitCRUdJTjsK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSEFTSF9KT0lOKGYpJzsKK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBK T0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IEhhc2ggSm9pbgorICAgSGFzaCBDb25kOiAoZC5pZCA9IGYuZGltX2lkKQorICAgLT4gIFNlcSBT Y2FuIG9uIGpvaW5fZGltIGQKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24g am9pbl9mYWN0IGYKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEhBU0hfSk9JTihmKSAvKiBt YXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkIGYpCisg ICBIQVNIX0pPSU4oZikKKyAgIFNFUV9TQ0FOKGQgZikKKyAgIE5PX0dBVEhFUihmIGQpCisoMTIg cm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdNRVJHRV9KT0lOX01B VEVSSUFMSVpFKGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNU ICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEpvaW4KKyAgIE1lcmdlIENvbmQ6IChkLmlkID0gZi5k aW1faWQpCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBqb2luX2RpbV9wa2V5IG9uIGpvaW5fZGlt IGQKKyAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgam9p bl9mYWN0X2RpbV9pZCBvbiBqb2luX2ZhY3QgZgorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAg TUVSR0VfSk9JTl9NQVRFUklBTElaRShmKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4g QWR2aWNlOgorICAgSk9JTl9PUkRFUihkIGYpCisgICBNRVJHRV9KT0lOX01BVEVSSUFMSVpFKGYp CisgICBJTkRFWF9TQ0FOKGQgcHVibGljLmpvaW5fZGltX3BrZXkgZiBwdWJsaWMuam9pbl9mYWN0 X2RpbV9pZCkKKyAgIE5PX0dBVEhFUihmIGQpCisoMTIgcm93cykKKworU0VUIExPQ0FMIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdNRVJHRV9KT0lOX1BMQUlOKGYpJzsKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5f ZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEpvaW4K KyAgIE1lcmdlIENvbmQ6IChkLmlkID0gZi5kaW1faWQpCisgICAtPiAgSW5kZXggU2NhbiB1c2lu ZyBqb2luX2RpbV9wa2V5IG9uIGpvaW5fZGltIGQKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGpv aW5fZmFjdF9kaW1faWQgb24gam9pbl9mYWN0IGYKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAg IE1FUkdFX0pPSU5fUExBSU4oZikgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmlj ZToKKyAgIEpPSU5fT1JERVIoZCBmKQorICAgTUVSR0VfSk9JTl9QTEFJTihmKQorICAgSU5ERVhf U0NBTihkIHB1YmxpYy5qb2luX2RpbV9wa2V5IGYgcHVibGljLmpvaW5fZmFjdF9kaW1faWQpCisg ICBOT19HQVRIRVIoZiBkKQorKDExIHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUoZiknOworRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0g ZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBOZXN0ZWQgTG9vcAorICAgSm9pbiBGaWx0ZXI6IChmLmRpbV9pZCA9IGQuaWQpCisgICAtPiAg U2VxIFNjYW4gb24gam9pbl9kaW0gZAorICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAtPiAg U2VxIFNjYW4gb24gam9pbl9mYWN0IGYKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIE5FU1RF RF9MT09QX01BVEVSSUFMSVpFKGYpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZp Y2U6CisgICBKT0lOX09SREVSKGQgZikKKyAgIE5FU1RFRF9MT09QX01BVEVSSUFMSVpFKGYpCisg ICBTRVFfU0NBTihkIGYpCisgICBOT19HQVRIRVIoZiBkKQorKDEyIHJvd3MpCisKK1NFVCBMT0NB TCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTkVTVEVEX0xPT1BfTUVNT0laRShmKSc7CitFWFBM QUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYg Sk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3Rl ZCBMb29wCisgICAtPiAgU2VxIFNjYW4gb24gam9pbl9kaW0gZAorICAgLT4gIE1lbW9pemUKKyAg ICAgICAgIENhY2hlIEtleTogZC5pZAorICAgICAgICAgQ2FjaGUgTW9kZTogbG9naWNhbAorICAg ICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgam9pbl9mYWN0X2RpbV9pZCBvbiBqb2luX2ZhY3Qg ZgorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGRpbV9pZCA9IGQuaWQpCisgU3VwcGxpZWQg UGxhbiBBZHZpY2U6CisgICBORVNURURfTE9PUF9NRU1PSVpFKGYpIC8qIG1hdGNoZWQgKi8KKyBH ZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGQgZikKKyAgIE5FU1RFRF9MT09Q X01FTU9JWkUoZikKKyAgIFNFUV9TQ0FOKGQpCisgICBJTkRFWF9TQ0FOKGYgcHVibGljLmpvaW5f ZmFjdF9kaW1faWQpCisgICBOT19HQVRIRVIoZiBkKQorKDE1IHJvd3MpCisKK1NFVCBMT0NBTCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTkVTVEVEX0xPT1BfUExBSU4oZiknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4g am9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgLT4gIFNl cSBTY2FuIG9uIGpvaW5fZGltIGQKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGpvaW5fZmFjdF9k aW1faWQgb24gam9pbl9mYWN0IGYKKyAgICAgICAgIEluZGV4IENvbmQ6IChkaW1faWQgPSBkLmlk KQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgTkVTVEVEX0xPT1BfUExBSU4oZikgLyogbWF0 Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZCBmKQorICAg TkVTVEVEX0xPT1BfUExBSU4oZikKKyAgIFNFUV9TQ0FOKGQpCisgICBJTkRFWF9TQ0FOKGYgcHVi bGljLmpvaW5fZmFjdF9kaW1faWQpCisgICBOT19HQVRIRVIoZiBkKQorKDEyIHJvd3MpCisKK0NP TU1JVDsKKy0tIFdlIGNhbid0IGZvcmNlIGEgZm9yZWlnbiBqb2luIGJldHdlZW4gdGhlc2UgdGFi bGVzLCBiZWNhdXNlIHRoZXkKKy0tIGFyZW4ndCBmb3JlaWduIHRhYmxlcy4KK0JFR0lOOworU0VU IExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdGT1JFSUdOX0pPSU4oKGYgZCkpJzsKK0VY UExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3Qg ZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworICAgICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBEaXNhYmxl ZDogdHJ1ZQorICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZmFjdCBmCisgICAtPiAgSW5kZXggU2Nh biB1c2luZyBqb2luX2RpbV9wa2V5IG9uIGpvaW5fZGltIGQKKyAgICAgICAgIEluZGV4IENvbmQ6 IChpZCA9IGYuZGltX2lkKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgRk9SRUlHTl9KT0lO KChmIGQpKSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6Cisg ICBKT0lOX09SREVSKGYgZCkKKyAgIE5FU1RFRF9MT09QX1BMQUlOKGQpCisgICBTRVFfU0NBTihm KQorICAgSU5ERVhfU0NBTihkIHB1YmxpYy5qb2luX2RpbV9wa2V5KQorICAgTk9fR0FUSEVSKGYg ZCkKKygxMyByb3dzKQorCitDT01NSVQ7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2 aWNlL2V4cGVjdGVkL2xvY2FsX2NvbGxlY3Rvci5vdXQgYi9jb250cmliL3BnX3BsYW5fYWR2aWNl L2V4cGVjdGVkL2xvY2FsX2NvbGxlY3Rvci5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLjU2ZjU1NGJmMjM5Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19w bGFuX2FkdmljZS9leHBlY3RlZC9sb2NhbF9jb2xsZWN0b3Iub3V0CkBAIC0wLDAgKzEsNjUgQEAK K0NSRUFURSBFWFRFTlNJT04gcGdfcGxhbl9hZHZpY2U7CitTRVQgZGVidWdfcGFyYWxsZWxfcXVl cnkgPSBvZmY7CistLSBUcnkgY2xlYXJpbmcgYWR2aWNlIGJlZm9yZSB3ZSd2ZSBjb2xsZWN0ZWQg YW55LgorU0VMRUNUIHBnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKTsKKyBwZ19jbGVh cl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgCisoMSByb3cpCisKKy0tIFNldCBhIHNtYWxsIGFkdmljZSBjb2xsZWN0aW9uIGxpbWl0 IHNvIHRoYXQgd2UnbGwgZXhjZWVkIGl0LgorU0VUIHBnX3BsYW5fYWR2aWNlLmxvY2FsX2NvbGxl Y3Rpb25fbGltaXQgPSAyOworLS0gU2V0IHVwIGEgZHVtbXkgdGFibGUuCitDUkVBVEUgVEFCTEUg ZHVtbXlfdGFibGUgKGEgaW50IHByaW1hcnkga2V5LCBiIHRleHQpCisJV0lUSCAoYXV0b3ZhY3V1 bV9lbmFibGVkID0gZmFsc2UsIHBhcmFsbGVsX3dvcmtlcnMgPSAwKTsKKy0tIFRlc3QgcXVlcmll cy4KK1NFTEVDVCAqIEZST00gZHVtbXlfdGFibGUgYSwgZHVtbXlfdGFibGUgYjsKKyBhIHwgYiB8 IGEgfCBiIAorLS0tKy0tLSstLS0rLS0tCisoMCByb3dzKQorCitTRUxFQ1QgKiBGUk9NIGR1bW15 X3RhYmxlOworIGEgfCBiIAorLS0tKy0tLQorKDAgcm93cykKKworLS0gU2hvdWxkIHJldHVybiB0 aGUgYWR2aWNlIGZyb20gdGhlIHNlY29uZCB0ZXN0IHF1ZXJ5LgorU0VMRUNUIGFkdmljZSBGUk9N IHBnX2dldF9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCkgT1JERVIgQlkgaWQgREVTQyBMSU1JVCAx OworICAgICAgICAgYWR2aWNlICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBT RVFfU0NBTihkdW1teV90YWJsZSkgKworIE5PX0dBVEhFUihkdW1teV90YWJsZSkKKygxIHJvdykK KworLS0gTm93IHRyeSBjbGVhcmluZyBhZHZpY2UgYWdhaW4uCitTRUxFQ1QgcGdfY2xlYXJfY29s bGVjdGVkX2xvY2FsX2FkdmljZSgpOworIHBnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2Ug CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworLS0gUmFp c2UgdGhlIGNvbGxlY3Rpb24gbGltaXQgc28gdGhhdCB0aGUgY29sbGVjdG9yIHVzZXMgbXVsdGlw bGUgY2h1bmtzLgorU0VUIHBnX3BsYW5fYWR2aWNlLmxvY2FsX2NvbGxlY3Rpb25fbGltaXQgPSAy MDAwOworLS0gUHVzaCBhIGJ1bmNoIG9mIHF1ZXJpZXMgdGhyb3VnaCB0aGUgY29sbGVjdG9yLgor RE8gJCQKK0JFR0lOCisJRk9SIHggSU4gMS4uMjAwMCBMT09QCisJCUVYRUNVVEUgJ1NFTEVDVCAq IEZST00gZHVtbXlfdGFibGUnOworCUVORCBMT09QOworRU5ECiskJDsKKy0tIENoZWNrIHRoYXQg dGhlIGNvbGxlY3RvciB3b3JrZWQuCitTRUxFQ1QgQ09VTlQoKikgRlJPTSBwZ19nZXRfY29sbGVj dGVkX2xvY2FsX2FkdmljZSgpOworIGNvdW50IAorLS0tLS0tLQorICAyMDAwCisoMSByb3cpCisK Ky0tIEFuZCBjbGVhciBvbmUgbW9yZSB0aW1lLCB0byB2ZXJpZnkgdGhhdCB0aGlzIGRvZXNuJ3Qg Y2F1c2UgYSBwcm9ibGVtCistLSBldmVuIHdpdGggYSBsYXJnZXIgbnVtYmVyIG9mIGVudHJpZXMu CitTRUxFQ1QgcGdfY2xlYXJfY29sbGVjdGVkX2xvY2FsX2FkdmljZSgpOworIHBnX2NsZWFyX2Nv bGxlY3RlZF9sb2NhbF9hZHZpY2UgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAKKygxIHJvdykKKwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3Rl ZC9wYXJ0aXRpb253aXNlLm91dCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvcGFy dGl0aW9ud2lzZS5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmVh NzA0ZTMxZWFjCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBl Y3RlZC9wYXJ0aXRpb253aXNlLm91dApAQCAtMCwwICsxLDM2NCBAQAorTE9BRCAncGdfcGxhbl9h ZHZpY2UnOworU0VUIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAwOworU0VUIGVu YWJsZV9wYXJ0aXRpb253aXNlX2pvaW4gPSB0cnVlOworQ1JFQVRFIFRBQkxFIHB0MSAoaWQgaW50 ZWdlciBwcmltYXJ5IGtleSwgZGltMSB0ZXh0LCB2YWwxIGludCkKKwlQQVJUSVRJT04gQlkgUkFO R0UgKGlkKTsKK0NSRUFURSBUQUJMRSBwdDFhIFBBUlRJVElPTiBPRiBwdDEgRk9SIFZBTFVFUyBG Uk9NICgxKSB0byAoMTAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitD UkVBVEUgVEFCTEUgcHQxYiBQQVJUSVRJT04gT0YgcHQxIEZPUiBWQUxVRVMgRlJPTSAoMTAwMSkg dG8gKDIwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworQ1JFQVRFIFRB QkxFIHB0MWMgUEFSVElUSU9OIE9GIHB0MSBGT1IgVkFMVUVTIEZST00gKDIwMDEpIHRvICgzMDAx KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIHB0MSAo aWQsIGRpbTEsIHZhbDEpCisJU0VMRUNUIGcsICdzb21lIGZpbGxlciB0ZXh0ICcgfHwgZywgKGcg JSAzKSArIDEKKwkgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMzAwMCkgZzsKK1ZBQ1VVTSBBTkFM WVpFIHB0MTsKK0NSRUFURSBUQUJMRSBwdDIgKGlkIGludGVnZXIgcHJpbWFyeSBrZXksIGRpbTIg dGV4dCwgdmFsMiBpbnQpCisJUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitDUkVBVEUgVEFCTEUg cHQyYSBQQVJUSVRJT04gT0YgcHQyIEZPUiBWQUxVRVMgRlJPTSAoMSkgdG8gKDEwMDEpCisJV0lU SCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworQ1JFQVRFIFRBQkxFIHB0MmIgUEFSVElU SU9OIE9GIHB0MiBGT1IgVkFMVUVTIEZST00gKDEwMDEpIHRvICgyMDAxKQorCVdJVEggKGF1dG92 YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFURSBUQUJMRSBwdDJjIFBBUlRJVElPTiBPRiBw dDIgRk9SIFZBTFVFUyBGUk9NICgyMDAxKSB0byAoMzAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2Vu YWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBwdDIgKGlkLCBkaW0yLCB2YWwyKQorCVNFTEVD VCBnLCAnc29tZSBvdGhlciB0ZXh0ICcgfHwgZywgKGcgJSA1KSArIDEKKwkgIEZST00gZ2VuZXJh dGVfc2VyaWVzKDEsMzAwMCwyKSBnOworVkFDVVVNIEFOQUxZWkUgcHQyOworQ1JFQVRFIFRBQkxF IHB0MyAoaWQgaW50ZWdlciBwcmltYXJ5IGtleSwgZGltMyB0ZXh0LCB2YWwzIGludCkKKwlQQVJU SVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFURSBUQUJMRSBwdDNhIFBBUlRJVElPTiBPRiBwdDMg Rk9SIFZBTFVFUyBGUk9NICgxKSB0byAoMTAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQg PSBmYWxzZSk7CitDUkVBVEUgVEFCTEUgcHQzYiBQQVJUSVRJT04gT0YgcHQzIEZPUiBWQUxVRVMg RlJPTSAoMTAwMSkgdG8gKDIwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2Up OworQ1JFQVRFIFRBQkxFIHB0M2MgUEFSVElUSU9OIE9GIHB0MyBGT1IgVkFMVUVTIEZST00gKDIw MDEpIHRvICgzMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VS VCBJTlRPIHB0MyAoaWQsIGRpbTMsIHZhbDMpCisJU0VMRUNUIGcsICdhIHRoaXJkIHJhbmRvbSB0 ZXh0ICcgfHwgZywgKGcgJSA3KSArIDEKKwkgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMzAwMCwz KSBnOworVkFDVVVNIEFOQUxZWkUgcHQzOworQ1JFQVRFIFRBQkxFIHB0bWlzbWF0Y2ggKGlkIGlu dGVnZXIgcHJpbWFyeSBrZXksIGRpbW0gdGV4dCwgdmFsbSBpbnQpCisJUEFSVElUSU9OIEJZIFJB TkdFIChpZCk7CitDUkVBVEUgVEFCTEUgcHRtaXNtYXRjaGEgUEFSVElUSU9OIE9GIHB0bWlzbWF0 Y2gKKyAgICBGT1IgVkFMVUVTIEZST00gKDEpIHRvICgxNTAxKQorCVdJVEggKGF1dG92YWN1dW1f ZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFURSBUQUJMRSBwdG1pc21hdGNoYiBQQVJUSVRJT04gT0Yg cHRtaXNtYXRjaAorICAgIEZPUiBWQUxVRVMgRlJPTSAoMTUwMSkgdG8gKDMwMDEpCisJV0lUSCAo YXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gcHRtaXNtYXRjaCAoaWQs IGRpbW0sIHZhbG0pCisJU0VMRUNUIGcsICd5ZXQgYW5vdGhlciB0ZXh0ICcgfHwgZywgKGcgJSAy KSArIDEKKwkgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMzAwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpF IHB0bWlzbWF0Y2g7CitFWFBMQUlOIChQTEFOX0FEVklDRSwgQ09TVFMgT0ZGKQorU0VMRUNUICog RlJPTSBwdDEsIHB0MiwgcHQzIFdIRVJFIHB0MS5pZCA9IHB0Mi5pZCBBTkQgcHQyLmlkID0gcHQz LmlkCisgICBBTkQgdmFsMSA9IDEgQU5EIHZhbDIgPSAxIEFORCB2YWwzID0gMTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBcHBl bmQKKyAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAg ICAgICAgSGFzaCBDb25kOiAocHQyXzEuaWQgPSBwdDNfMS5pZCkKKyAgICAgICAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiBwdDJhIHB0Ml8xCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2 YWwyID0gMSkKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAt PiAgU2VxIFNjYW4gb24gcHQzYSBwdDNfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgRmls dGVyOiAodmFsMyA9IDEpCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBwdDFhX3BrZXkg b24gcHQxYSBwdDFfMQorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gcHQyXzEuaWQp CisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyAgIC0+ICBOZXN0ZWQgTG9vcAor ICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAocHQyXzIu aWQgPSBwdDNfMi5pZCkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJiIHB0Ml8y CisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgICAgICAg IC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYiBwdDNf MgorICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgICAgICAg ICAtPiAgSW5kZXggU2NhbiB1c2luZyBwdDFiX3BrZXkgb24gcHQxYiBwdDFfMgorICAgICAgICAg ICAgICAgSW5kZXggQ29uZDogKGlkID0gcHQyXzIuaWQpCisgICAgICAgICAgICAgICBGaWx0ZXI6 ICh2YWwxID0gMSkKKyAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgLT4gIEhhc2ggSm9pbgor ICAgICAgICAgICAgICAgSGFzaCBDb25kOiAocHQyXzMuaWQgPSBwdDNfMy5pZCkKKyAgICAgICAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJjIHB0Ml8zCisgICAgICAgICAgICAgICAgICAgICBG aWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYyBwdDNfMworICAgICAgICAgICAgICAgICAgICAg ICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBw dDFjX3BrZXkgb24gcHQxYyBwdDFfMworICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0g cHQyXzMuaWQpCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyBHZW5lcmF0ZWQg UGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKHB0Mi9wdWJsaWMucHQyYSBwdDMvcHVibGljLnB0 M2EgcHQxL3B1YmxpYy5wdDFhKQorICAgSk9JTl9PUkRFUihwdDIvcHVibGljLnB0MmIgcHQzL3B1 YmxpYy5wdDNiIHB0MS9wdWJsaWMucHQxYikKKyAgIEpPSU5fT1JERVIocHQyL3B1YmxpYy5wdDJj IHB0My9wdWJsaWMucHQzYyBwdDEvcHVibGljLnB0MWMpCisgICBORVNURURfTE9PUF9QTEFJTihw dDEvcHVibGljLnB0MWEgcHQxL3B1YmxpYy5wdDFiIHB0MS9wdWJsaWMucHQxYykKKyAgIEhBU0hf Sk9JTihwdDMvcHVibGljLnB0M2EgcHQzL3B1YmxpYy5wdDNiIHB0My9wdWJsaWMucHQzYykKKyAg IFNFUV9TQ0FOKHB0Mi9wdWJsaWMucHQyYSBwdDMvcHVibGljLnB0M2EgcHQyL3B1YmxpYy5wdDJi IHB0My9wdWJsaWMucHQzYgorICAgIHB0Mi9wdWJsaWMucHQyYyBwdDMvcHVibGljLnB0M2MpCisg ICBJTkRFWF9TQ0FOKHB0MS9wdWJsaWMucHQxYSBwdWJsaWMucHQxYV9wa2V5IHB0MS9wdWJsaWMu cHQxYiBwdWJsaWMucHQxYl9wa2V5CisgICAgcHQxL3B1YmxpYy5wdDFjIHB1YmxpYy5wdDFjX3Br ZXkpCisgICBQQVJUSVRJT05XSVNFKChwdDEgcHQyIHB0MykpCisgICBOT19HQVRIRVIocHQxL3B1 YmxpYy5wdDFhIHB0MS9wdWJsaWMucHQxYiBwdDEvcHVibGljLnB0MWMgcHQyL3B1YmxpYy5wdDJh CisgICAgcHQyL3B1YmxpYy5wdDJiIHB0Mi9wdWJsaWMucHQyYyBwdDMvcHVibGljLnB0M2EgcHQz L3B1YmxpYy5wdDNiIHB0My9wdWJsaWMucHQzYykKKyg0NyByb3dzKQorCistLSBTdXBwcmVzcyBw YXJ0aXRpb253aXNlIGpvaW4sIG9yIGRvIGl0IGp1c3QgcGFydGlhbGx5LgorQkVHSU47CitTRVQg TE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1BBUlRJVElPTldJU0UocHQxIHB0MiBwdDMp JzsKK0VYUExBSU4gKFBMQU5fQURWSUNFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHB0MSwg cHQyLCBwdDMgV0hFUkUgcHQxLmlkID0gcHQyLmlkIEFORCBwdDIuaWQgPSBwdDMuaWQKKyAgIEFO RCB2YWwxID0gMSBBTkQgdmFsMiA9IDEgQU5EIHZhbDMgPSAxOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisg ICAtPiAgSGFzaCBKb2luCisgICAgICAgICBIYXNoIENvbmQ6IChwdDIuaWQgPSBwdDMuaWQpCisg ICAgICAgICAtPiAgQXBwZW5kCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQyYSBw dDJfMQorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAgICAgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gcHQyYiBwdDJfMgorICAgICAgICAgICAgICAgICAgICAgRmls dGVyOiAodmFsMiA9IDEpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQyYyBwdDJf MworICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAgICAgICAtPiAg SGFzaAorICAgICAgICAgICAgICAgLT4gIEFwcGVuZAorICAgICAgICAgICAgICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIHB0M2EgcHQzXzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRl cjogKHZhbDMgPSAxKQorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0M2Ig cHQzXzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDMgPSAxKQorICAg ICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0M2MgcHQzXzMKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDMgPSAxKQorICAgLT4gIEFwcGVuZAorICAgICAg ICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgcHQxYV9wa2V5IG9uIHB0MWEgcHQxXzEKKyAgICAgICAg ICAgICAgIEluZGV4IENvbmQ6IChpZCA9IHB0Mi5pZCkKKyAgICAgICAgICAgICAgIEZpbHRlcjog KHZhbDEgPSAxKQorICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgcHQxYl9wa2V5IG9uIHB0 MWIgcHQxXzIKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IHB0Mi5pZCkKKyAgICAg ICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNp bmcgcHQxY19wa2V5IG9uIHB0MWMgcHQxXzMKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChp ZCA9IHB0Mi5pZCkKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorIFN1cHBsaWVk IFBsYW4gQWR2aWNlOgorICAgUEFSVElUSU9OV0lTRShwdDEpIC8qIG1hdGNoZWQgKi8KKyAgIFBB UlRJVElPTldJU0UocHQyKSAvKiBtYXRjaGVkICovCisgICBQQVJUSVRJT05XSVNFKHB0MykgLyog bWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIocHQyIHB0 MyBwdDEpCisgICBORVNURURfTE9PUF9QTEFJTihwdDEpCisgICBIQVNIX0pPSU4ocHQzKQorICAg U0VRX1NDQU4ocHQyL3B1YmxpYy5wdDJhIHB0Mi9wdWJsaWMucHQyYiBwdDIvcHVibGljLnB0MmMg cHQzL3B1YmxpYy5wdDNhCisgICAgcHQzL3B1YmxpYy5wdDNiIHB0My9wdWJsaWMucHQzYykKKyAg IElOREVYX1NDQU4ocHQxL3B1YmxpYy5wdDFhIHB1YmxpYy5wdDFhX3BrZXkgcHQxL3B1YmxpYy5w dDFiIHB1YmxpYy5wdDFiX3BrZXkKKyAgICBwdDEvcHVibGljLnB0MWMgcHVibGljLnB0MWNfcGtl eSkKKyAgIFBBUlRJVElPTldJU0UocHQyIHB0MyBwdDEpCisgICBOT19HQVRIRVIocHQxL3B1Ymxp Yy5wdDFhIHB0MS9wdWJsaWMucHQxYiBwdDEvcHVibGljLnB0MWMgcHQyL3B1YmxpYy5wdDJhCisg ICAgcHQyL3B1YmxpYy5wdDJiIHB0Mi9wdWJsaWMucHQyYyBwdDMvcHVibGljLnB0M2EgcHQzL3B1 YmxpYy5wdDNiIHB0My9wdWJsaWMucHQzYykKKyg0MyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ1BBUlRJVElPTldJU0UoKHB0MSBwdDIpIHB0MyknOworRVhQTEFJ TiAoUExBTl9BRFZJQ0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcHQxLCBwdDIsIHB0MyBX SEVSRSBwdDEuaWQgPSBwdDIuaWQgQU5EIHB0Mi5pZCA9IHB0My5pZAorICAgQU5EIHZhbDEgPSAx IEFORCB2YWwyID0gMSBBTkQgdmFsMyA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBKb2luCisgICBIYXNoIENvbmQ6 IChwdDEuaWQgPSBwdDMuaWQpCisgICAtPiAgQXBwZW5kCisgICAgICAgICAtPiAgSGFzaCBKb2lu CisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChwdDFfMS5pZCA9IHB0Ml8xLmlkKQorICAgICAg ICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MWEgcHQxXzEKKyAgICAgICAgICAgICAgICAgICAg IEZpbHRlcjogKHZhbDEgPSAxKQorICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAg ICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJhIHB0Ml8xCisgICAgICAgICAgICAgICAgICAg ICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAg ICAgICAgICAgIEhhc2ggQ29uZDogKHB0MV8yLmlkID0gcHQyXzIuaWQpCisgICAgICAgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gcHQxYiBwdDFfMgorICAgICAgICAgICAgICAgICAgICAgRmlsdGVy OiAodmFsMSA9IDEpCisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHB0MmIgcHQyXzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IEZpbHRlcjogKHZhbDIgPSAxKQorICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAg ICAgSGFzaCBDb25kOiAocHQxXzMuaWQgPSBwdDJfMy5pZCkKKyAgICAgICAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBwdDFjIHB0MV8zCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwx ID0gMSkKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAtPiAg U2VxIFNjYW4gb24gcHQyYyBwdDJfMworICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVy OiAodmFsMiA9IDEpCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIEFwcGVuZAorICAgICAgICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0M2EgcHQzXzEKKyAgICAgICAgICAgICAgICAgICAgIEZp bHRlcjogKHZhbDMgPSAxKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0M2IgcHQz XzIKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDMgPSAxKQorICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHB0M2MgcHQzXzMKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRl cjogKHZhbDMgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgUEFSVElUSU9OV0lTRSgo cHQxIHB0MikpIC8qIG1hdGNoZWQgKi8KKyAgIFBBUlRJVElPTldJU0UocHQzKSAvKiBtYXRjaGVk ICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihwdDEvcHVibGljLnB0 MWEgcHQyL3B1YmxpYy5wdDJhKQorICAgSk9JTl9PUkRFUihwdDEvcHVibGljLnB0MWIgcHQyL3B1 YmxpYy5wdDJiKQorICAgSk9JTl9PUkRFUihwdDEvcHVibGljLnB0MWMgcHQyL3B1YmxpYy5wdDJj KQorICAgSk9JTl9PUkRFUih7cHQxIHB0Mn0gcHQzKQorICAgSEFTSF9KT0lOKHB0Mi9wdWJsaWMu cHQyYSBwdDIvcHVibGljLnB0MmIgcHQyL3B1YmxpYy5wdDJjIHB0MykKKyAgIFNFUV9TQ0FOKHB0 MS9wdWJsaWMucHQxYSBwdDIvcHVibGljLnB0MmEgcHQxL3B1YmxpYy5wdDFiIHB0Mi9wdWJsaWMu cHQyYgorICAgIHB0MS9wdWJsaWMucHQxYyBwdDIvcHVibGljLnB0MmMgcHQzL3B1YmxpYy5wdDNh IHB0My9wdWJsaWMucHQzYgorICAgIHB0My9wdWJsaWMucHQzYykKKyAgIFBBUlRJVElPTldJU0Uo KHB0MSBwdDIpIHB0MykKKyAgIE5PX0dBVEhFUihwdDEvcHVibGljLnB0MWEgcHQxL3B1YmxpYy5w dDFiIHB0MS9wdWJsaWMucHQxYyBwdDIvcHVibGljLnB0MmEKKyAgICBwdDIvcHVibGljLnB0MmIg cHQyL3B1YmxpYy5wdDJjIHB0My9wdWJsaWMucHQzYSBwdDMvcHVibGljLnB0M2IgcHQzL3B1Ymxp Yy5wdDNjKQorKDQ3IHJvd3MpCisKK0NPTU1JVDsKKy0tIENhbid0IGZvcmNlIGEgcGFydGl0aW9u d2lzZSBqb2luIHdpdGggYSBtaXNtYXRjaGVkIHRhYmxlLgorQkVHSU47CitTRVQgTE9DQUwgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ1BBUlRJVElPTldJU0UoKHB0MSBwdG1pc21hdGNoKSknOwor RVhQTEFJTiAoUExBTl9BRFZJQ0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcHQxLCBwdG1p c21hdGNoIFdIRVJFIHB0MS5pZCA9IHB0bWlzbWF0Y2guaWQ7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBEaXNhYmxlZDogdHJ1ZQorICAg LT4gIEFwcGVuZAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MWEgcHQxXzEKKyAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBwdDFiIHB0MV8yCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQx YyBwdDFfMworICAgLT4gIEFwcGVuZAorICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgcHRt aXNtYXRjaGFfcGtleSBvbiBwdG1pc21hdGNoYSBwdG1pc21hdGNoXzEKKyAgICAgICAgICAgICAg IEluZGV4IENvbmQ6IChpZCA9IHB0MS5pZCkKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5n IHB0bWlzbWF0Y2hiX3BrZXkgb24gcHRtaXNtYXRjaGIgcHRtaXNtYXRjaF8yCisgICAgICAgICAg ICAgICBJbmRleCBDb25kOiAoaWQgPSBwdDEuaWQpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6Cisg ICBQQVJUSVRJT05XSVNFKChwdDEgcHRtaXNtYXRjaCkpIC8qIG1hdGNoZWQsIGZhaWxlZCAqLwor IEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIocHQxIHB0bWlzbWF0Y2gpCisg ICBORVNURURfTE9PUF9QTEFJTihwdG1pc21hdGNoKQorICAgU0VRX1NDQU4ocHQxL3B1YmxpYy5w dDFhIHB0MS9wdWJsaWMucHQxYiBwdDEvcHVibGljLnB0MWMpCisgICBJTkRFWF9TQ0FOKHB0bWlz bWF0Y2gvcHVibGljLnB0bWlzbWF0Y2hhIHB1YmxpYy5wdG1pc21hdGNoYV9wa2V5CisgICAgcHRt aXNtYXRjaC9wdWJsaWMucHRtaXNtYXRjaGIgcHVibGljLnB0bWlzbWF0Y2hiX3BrZXkpCisgICBQ QVJUSVRJT05XSVNFKHB0MSBwdG1pc21hdGNoKQorICAgTk9fR0FUSEVSKHB0MS9wdWJsaWMucHQx YSBwdDEvcHVibGljLnB0MWIgcHQxL3B1YmxpYy5wdDFjCisgICAgcHRtaXNtYXRjaC9wdWJsaWMu cHRtaXNtYXRjaGEgcHRtaXNtYXRjaC9wdWJsaWMucHRtaXNtYXRjaGIpCisoMjIgcm93cykKKwor Q09NTUlUOworLS0gRm9yY2Ugam9pbiBvcmRlciBmb3IgYSBwYXJ0aWN1bGFyIGJyYW5jaCBvZiB0 aGUgcGFydGl0aW9ud2lzZSBqb2luIHdpdGgKKy0tIGFuZCB3aXRob3V0IG1lbnRpb25pbmcgdGhl IHNjaGVtYSBuYW1lLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J0pPSU5fT1JERVIocHQzL3B1YmxpYy5wdDNhIHB0Mi9wdWJsaWMucHQyYSBwdDEvcHVibGljLnB0 MWEpJzsKK0VYUExBSU4gKFBMQU5fQURWSUNFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHB0 MSwgcHQyLCBwdDMgV0hFUkUgcHQxLmlkID0gcHQyLmlkIEFORCBwdDIuaWQgPSBwdDMuaWQKKyAg IEFORCB2YWwxID0gMSBBTkQgdmFsMiA9IDEgQU5EIHZhbDMgPSAxOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFwcGVuZAorICAg LT4gIE5lc3RlZCBMb29wCisgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBI YXNoIENvbmQ6IChwdDNfMS5pZCA9IHB0Ml8xLmlkKQorICAgICAgICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIHB0M2EgcHQzXzEKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDMgPSAx KQorICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBwdDJhIHB0Ml8xCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2 YWwyID0gMSkKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHB0MWFfcGtleSBvbiBwdDFh IHB0MV8xCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBwdDJfMS5pZCkKKyAgICAg ICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAg ICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChwdDJfMi5pZCA9IHB0 M18yLmlkKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MmIgcHQyXzIKKyAgICAg ICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgICAgICAgICAgICAgLT4gIEhh c2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDNiIHB0M18yCisgICAg ICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwzID0gMSkKKyAgICAgICAgIC0+ICBJ bmRleCBTY2FuIHVzaW5nIHB0MWJfcGtleSBvbiBwdDFiIHB0MV8yCisgICAgICAgICAgICAgICBJ bmRleCBDb25kOiAoaWQgPSBwdDJfMi5pZCkKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEg PSAxKQorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAg ICAgICAgICBIYXNoIENvbmQ6IChwdDJfMy5pZCA9IHB0M18zLmlkKQorICAgICAgICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIHB0MmMgcHQyXzMKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjog KHZhbDIgPSAxKQorICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBwdDNjIHB0M18zCisgICAgICAgICAgICAgICAgICAgICAgICAgICBG aWx0ZXI6ICh2YWwzID0gMSkKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHB0MWNfcGtl eSBvbiBwdDFjIHB0MV8zCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBwdDJfMy5p ZCkKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2 aWNlOgorICAgSk9JTl9PUkRFUihwdDMvcHVibGljLnB0M2EgcHQyL3B1YmxpYy5wdDJhIHB0MS9w dWJsaWMucHQxYSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpP SU5fT1JERVIocHQzL3B1YmxpYy5wdDNhIHB0Mi9wdWJsaWMucHQyYSBwdDEvcHVibGljLnB0MWEp CisgICBKT0lOX09SREVSKHB0Mi9wdWJsaWMucHQyYiBwdDMvcHVibGljLnB0M2IgcHQxL3B1Ymxp Yy5wdDFiKQorICAgSk9JTl9PUkRFUihwdDIvcHVibGljLnB0MmMgcHQzL3B1YmxpYy5wdDNjIHB0 MS9wdWJsaWMucHQxYykKKyAgIE5FU1RFRF9MT09QX1BMQUlOKHB0MS9wdWJsaWMucHQxYSBwdDEv cHVibGljLnB0MWIgcHQxL3B1YmxpYy5wdDFjKQorICAgSEFTSF9KT0lOKHB0Mi9wdWJsaWMucHQy YSBwdDMvcHVibGljLnB0M2IgcHQzL3B1YmxpYy5wdDNjKQorICAgU0VRX1NDQU4ocHQzL3B1Ymxp Yy5wdDNhIHB0Mi9wdWJsaWMucHQyYSBwdDIvcHVibGljLnB0MmIgcHQzL3B1YmxpYy5wdDNiCisg ICAgcHQyL3B1YmxpYy5wdDJjIHB0My9wdWJsaWMucHQzYykKKyAgIElOREVYX1NDQU4ocHQxL3B1 YmxpYy5wdDFhIHB1YmxpYy5wdDFhX3BrZXkgcHQxL3B1YmxpYy5wdDFiIHB1YmxpYy5wdDFiX3Br ZXkKKyAgICBwdDEvcHVibGljLnB0MWMgcHVibGljLnB0MWNfcGtleSkKKyAgIFBBUlRJVElPTldJ U0UoKHB0MSBwdDIgcHQzKSkKKyAgIE5PX0dBVEhFUihwdDEvcHVibGljLnB0MWEgcHQxL3B1Ymxp Yy5wdDFiIHB0MS9wdWJsaWMucHQxYyBwdDIvcHVibGljLnB0MmEKKyAgICBwdDIvcHVibGljLnB0 MmIgcHQyL3B1YmxpYy5wdDJjIHB0My9wdWJsaWMucHQzYSBwdDMvcHVibGljLnB0M2IgcHQzL3B1 YmxpYy5wdDNjKQorKDQ5IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnSk9JTl9PUkRFUihwdDMvcHQzYSBwdDIvcHQyYSBwdDEvcHQxYSknOworRVhQTEFJTiAoUExB Tl9BRFZJQ0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcHQxLCBwdDIsIHB0MyBXSEVSRSBw dDEuaWQgPSBwdDIuaWQgQU5EIHB0Mi5pZCA9IHB0My5pZAorICAgQU5EIHZhbDEgPSAxIEFORCB2 YWwyID0gMSBBTkQgdmFsMyA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQXBwZW5kCisgICAtPiAgTmVzdGVkIExvb3AKKyAg ICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHB0M18xLmlk ID0gcHQyXzEuaWQpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYSBwdDNfMQor ICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgICAgICAgICAgICAgICAt PiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MmEgcHQyXzEK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgICAgICAg LT4gIEluZGV4IFNjYW4gdXNpbmcgcHQxYV9wa2V5IG9uIHB0MWEgcHQxXzEKKyAgICAgICAgICAg ICAgIEluZGV4IENvbmQ6IChpZCA9IHB0Ml8xLmlkKQorICAgICAgICAgICAgICAgRmlsdGVyOiAo dmFsMSA9IDEpCisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAg ICAgICAgICAgICAgIEhhc2ggQ29uZDogKHB0Ml8yLmlkID0gcHQzXzIuaWQpCisgICAgICAgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gcHQyYiBwdDJfMgorICAgICAgICAgICAgICAgICAgICAgRmls dGVyOiAodmFsMiA9IDEpCisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0M2IgcHQzXzIKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZpbHRlcjogKHZhbDMgPSAxKQorICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgcHQx Yl9wa2V5IG9uIHB0MWIgcHQxXzIKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IHB0 Ml8yLmlkKQorICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAtPiAgTmVzdGVk IExvb3AKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIEhhc2ggQ29uZDog KHB0Ml8zLmlkID0gcHQzXzMuaWQpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQy YyBwdDJfMworICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAgICAg ICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0 M2MgcHQzXzMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDMgPSAxKQor ICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgcHQxY19wa2V5IG9uIHB0MWMgcHQxXzMKKyAg ICAgICAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IHB0Ml8zLmlkKQorICAgICAgICAgICAgICAg RmlsdGVyOiAodmFsMSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVS KHB0My9wdDNhIHB0Mi9wdDJhIHB0MS9wdDFhKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBs YW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihwdDMvcHVibGljLnB0M2EgcHQyL3B1YmxpYy5wdDJh IHB0MS9wdWJsaWMucHQxYSkKKyAgIEpPSU5fT1JERVIocHQyL3B1YmxpYy5wdDJiIHB0My9wdWJs aWMucHQzYiBwdDEvcHVibGljLnB0MWIpCisgICBKT0lOX09SREVSKHB0Mi9wdWJsaWMucHQyYyBw dDMvcHVibGljLnB0M2MgcHQxL3B1YmxpYy5wdDFjKQorICAgTkVTVEVEX0xPT1BfUExBSU4ocHQx L3B1YmxpYy5wdDFhIHB0MS9wdWJsaWMucHQxYiBwdDEvcHVibGljLnB0MWMpCisgICBIQVNIX0pP SU4ocHQyL3B1YmxpYy5wdDJhIHB0My9wdWJsaWMucHQzYiBwdDMvcHVibGljLnB0M2MpCisgICBT RVFfU0NBTihwdDMvcHVibGljLnB0M2EgcHQyL3B1YmxpYy5wdDJhIHB0Mi9wdWJsaWMucHQyYiBw dDMvcHVibGljLnB0M2IKKyAgICBwdDIvcHVibGljLnB0MmMgcHQzL3B1YmxpYy5wdDNjKQorICAg SU5ERVhfU0NBTihwdDEvcHVibGljLnB0MWEgcHVibGljLnB0MWFfcGtleSBwdDEvcHVibGljLnB0 MWIgcHVibGljLnB0MWJfcGtleQorICAgIHB0MS9wdWJsaWMucHQxYyBwdWJsaWMucHQxY19wa2V5 KQorICAgUEFSVElUSU9OV0lTRSgocHQxIHB0MiBwdDMpKQorICAgTk9fR0FUSEVSKHB0MS9wdWJs aWMucHQxYSBwdDEvcHVibGljLnB0MWIgcHQxL3B1YmxpYy5wdDFjIHB0Mi9wdWJsaWMucHQyYQor ICAgIHB0Mi9wdWJsaWMucHQyYiBwdDIvcHVibGljLnB0MmMgcHQzL3B1YmxpYy5wdDNhIHB0My9w dWJsaWMucHQzYiBwdDMvcHVibGljLnB0M2MpCisoNDkgcm93cykKKworQ09NTUlUOwpkaWZmIC0t Z2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9zY2FuLm91dCBiL2NvbnRyaWIv cGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvc2Nhbi5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAuLmE4MGRlNzhkODIzCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9w Z19wbGFuX2FkdmljZS9leHBlY3RlZC9zY2FuLm91dApAQCAtMCwwICsxLDc1NyBAQAorTE9BRCAn cGdfcGxhbl9hZHZpY2UnOworU0VUIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAw OworU0VUIHNlcV9wYWdlX2Nvc3QgPSAwLjE7CitTRVQgcmFuZG9tX3BhZ2VfY29zdCA9IDAuMTsK K1NFVCBjcHVfdHVwbGVfY29zdCA9IDA7CitTRVQgY3B1X2luZGV4X3R1cGxlX2Nvc3QgPSAwOwor Q1JFQVRFIFRBQkxFIHNjYW5fdGFibGUgKGEgaW50IHByaW1hcnkga2V5LCBiIHRleHQpCisJV0lU SCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gc2Nhbl90YWJsZQor CVNFTEVDVCBnLCAnc29tZSB0ZXh0ICcgfHwgZyBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDAw MDApIGc7CitDUkVBVEUgSU5ERVggc2Nhbl90YWJsZV9iIE9OIHNjYW5fdGFibGUgVVNJTkcgYnJp biAoYik7CitWQUNVVU0gQU5BTFlaRSBzY2FuX3RhYmxlOworLS0gU2VxdWVudGlhbCBzY2FuCitF WFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGU7 CisgICAgICAgUVVFUlkgUExBTiAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg U2VxIFNjYW4gb24gc2Nhbl90YWJsZQorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFNFUV9T Q0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg0IHJvd3MpCisKKy0t IEluZGV4IHNjYW4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZS T00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2Fu X3RhYmxlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgor ICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19H QVRIRVIoc2Nhbl90YWJsZSkKKyg1IHJvd3MpCisKKy0tIEluZGV4LW9ubHkgc2NhbgorRVhQTEFJ TiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdIRVJF IGEgPSAxOworICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBJbmRleCBPbmx5IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFi bGUKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJ TkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9f R0FUSEVSKHNjYW5fdGFibGUpCisoNSByb3dzKQorCistLSBCaXRtYXAgaGVhcCBzY2FuCitFWFBM QUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUKKwlX SEVSRSBiID4gJ3NvbWUgdGV4dCA4JzsKKyAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBCaXRtYXAgSGVhcCBTY2FuIG9uIHNjYW5fdGFibGUKKyAgIFJl Y2hlY2sgQ29uZDogKGIgPiAnc29tZSB0ZXh0IDgnOjp0ZXh0KQorICAgLT4gIEJpdG1hcCBJbmRl eCBTY2FuIG9uIHNjYW5fdGFibGVfYgorICAgICAgICAgSW5kZXggQ29uZDogKGIgPiAnc29tZSB0 ZXh0IDgnOjp0ZXh0KQorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEJJVE1BUF9IRUFQX1ND QU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9iKQorICAgTk9fR0FUSEVSKHNjYW5fdGFi bGUpCisoNyByb3dzKQorCistLSBUSUQgc2NhbgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGN0aWQgPSAnKDAsMSknOworICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgVGlkIFNjYW4gb24gc2Nhbl90YWJsZQorICAgVElEIENvbmQ6IChjdGlk ID0gJygwLDEpJzo6dGlkKQorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFRJRF9TQ0FOKHNj YW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg1IHJvd3MpCisKKy0tIFRJRCBy YW5nZSBzY2FuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9N IHNjYW5fdGFibGUKKwlXSEVSRSBjdGlkID4gJygxLDEpJyBBTkQgY3RpZCA8ICcoMiwxKSc7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIFRpZCBSYW5nZSBTY2FuIG9uIHNjYW5fdGFibGUKKyAgIFRJRCBDb25k OiAoKGN0aWQgPiAnKDEsMSknOjp0aWQpIEFORCAoY3RpZCA8ICcoMiwxKSc6OnRpZCkpCisgR2Vu ZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgVElEX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhF UihzY2FuX3RhYmxlKQorKDUgcm93cykKKworLS0gVHJ5IGZvcmNpbmcgZWFjaCBvZiBvdXIgdGVz dCBxdWVyaWVzIHRvIHVzZSB0aGUgc2NhbiB0eXBlIHRoZXkKKy0tIHdhbnRlZCB0byB1c2UgYW55 d2F5LiBUaGlzIHNob3VsZCBzdWNjZWVkLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHNjYW5fdGFibGUpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwg UExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZTsKKyAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAg IFNFUV9TQ0FOKHNjYW5fdGFibGUpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZp Y2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCiso NiByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4o c2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9B RFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNj YW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIEluZGV4IENvbmQ6IChh ID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBz Y2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6Cisg ICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dB VEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VY UExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCBhIEZST00gc2Nhbl90YWJsZSBX SEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBPbmx5IFNjYW4gdXNpbmcgc2Nhbl90YWJs ZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQ bGFuIEFkdmljZToKKyAgIElOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtl eSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX09OTFlf U0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoc2Nh bl90YWJsZSkKKyg3IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn QklUTUFQX0hFQVBfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfYiknOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlCisJV0hFUkUgYiA+ ICdzb21lIHRleHQgOCc7CisgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBCaXRtYXAgSGVhcCBTY2FuIG9uIHNjYW5fdGFibGUK KyAgIFJlY2hlY2sgQ29uZDogKGIgPiAnc29tZSB0ZXh0IDgnOjp0ZXh0KQorICAgLT4gIEJpdG1h cCBJbmRleCBTY2FuIG9uIHNjYW5fdGFibGVfYgorICAgICAgICAgSW5kZXggQ29uZDogKGIgPiAn c29tZSB0ZXh0IDgnOjp0ZXh0KQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgQklUTUFQX0hF QVBfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfYikgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRl ZCBQbGFuIEFkdmljZToKKyAgIEJJVE1BUF9IRUFQX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nh bl90YWJsZV9iKQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoOSByb3dzKQorCitTRVQgTE9D QUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1RJRF9TQ0FOKHNjYW5fdGFibGUpJzsKK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVS RSBjdGlkID0gJygwLDEpJzsKKyAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFRpZCBTY2FuIG9uIHNj YW5fdGFibGUKKyAgIFRJRCBDb25kOiAoY3RpZCA9ICcoMCwxKSc6OnRpZCkKKyBTdXBwbGllZCBQ bGFuIEFkdmljZToKKyAgIFRJRF9TQ0FOKHNjYW5fdGFibGUpIC8qIG1hdGNoZWQgKi8KKyBHZW5l cmF0ZWQgUGxhbiBBZHZpY2U6CisgICBUSURfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVS KHNjYW5fdGFibGUpCisoNyByb3dzKQorCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUKKwlXSEVSRSBjdGlkID4gJygxLDEpJyBBTkQgY3Rp ZCA8ICcoMiwxKSc7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFRpZCBSYW5nZSBTY2FuIG9uIHNjYW5fdGFi bGUKKyAgIFRJRCBDb25kOiAoKGN0aWQgPiAnKDEsMSknOjp0aWQpIEFORCAoY3RpZCA8ICcoMiwx KSc6OnRpZCkpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBUSURfU0NBTihzY2FuX3RhYmxl KSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgVElEX1NDQU4oc2Nh bl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworQ09NTUlUOwor LS0gVHJ5IHRvIGZvcmNlIGEgZnVsbCBzY2FuIG9mIHRoZSB0YWJsZSB0byB1c2Ugc29tZSBvdGhl ciBzY2FuIHR5cGUuIEFsbAorLS0gb2YgdGhlc2Ugd2lsbCBmYWlsLiBBbiBpbmRleCBzY2FuIG9y IGJpdG1hcCBoZWFwIHNjYW4gY291bGQgcG90ZW50aWFsbHkKKy0tIGdlbmVyYXRlIHRoZSBjb3Jy ZWN0IGFuc3dlciwgYnV0IHRoZSBwbGFubmVyIGRvZXMgbm90IGV2ZW4gY29uc2lkZXIgdGhlc2UK Ky0tIHBvc3NpYmlsaXRpZXMgZHVlIHRvIHRoZSBsYWNrIG9mIGEgV0hFUkUgY2xhdXNlLgorQkVH SU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90 YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0Up IFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBv biBzY2FuX3RhYmxlCisgICBEaXNhYmxlZDogdHJ1ZQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgor ICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSkgLyogbWF0Y2hlZCwgZmFp bGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkK KyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3Br ZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nh bl90YWJsZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90 YWJsZQorICAgRGlzYWJsZWQ6IHRydWUKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVY X09OTFlfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSkgLyogbWF0Y2hlZCwgZmFpbGVk ICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkKKyAg IE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdCSVRNQVBfSEVBUF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5 KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5f dGFibGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90 YWJsZQorICAgRGlzYWJsZWQ6IHRydWUKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEJJVE1B UF9IRUFQX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQsIGZhaWxl ZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUpCisg ICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnVElEX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlOworICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUKKyAgIERpc2Fi bGVkOiB0cnVlCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBUSURfU0NBTihzY2FuX3RhYmxl KSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFf U0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCitD T01NSVQ7CistLSBUcnkgYWdhaW4gdG8gZm9yY2UgaW5kZXggdXNlLiBUaGlzIHNob3VsZCBub3cg c3VjY2VlZCBmb3IgdGhlIElOREVYX1NDQU4KKy0tIGFuZCBCSVRNQVBfSEVBUF9TQ0FOLCBidXQg dGhlIElOREVYX09OTFlfU0NBTiBjYW4ndCBiZSBmb3JjZWQgYmVjYXVzZSB0aGUKKy0tIHF1ZXJ5 IGZldGNoZXMgY29sdW1ucyBub3QgaW5jbHVkZWQgaW4gdGhlIGluZGV4LgorQkVHSU47CitTRVQg TE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2Fu X3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAq IEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID4gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90 YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIEluZGV4IENvbmQ6IChhID4gMCkKKyBTdXBwbGll ZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkp IC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNj YW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxl KQorKDcgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9P TkxZX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID4gMDsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJsZQorICAgRGlz YWJsZWQ6IHRydWUKKyAgIEZpbHRlcjogKGEgPiAwKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgor ICAgSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVk LCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3Rh YmxlKQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoOCByb3dzKQorCitTRVQgTE9DQUwgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ0JJVE1BUF9IRUFQX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3Rh YmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZS T00gc2Nhbl90YWJsZSBXSEVSRSBhID4gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEJpdG1hcCBIZWFwIFNj YW4gb24gc2Nhbl90YWJsZQorICAgUmVjaGVjayBDb25kOiAoYSA+IDApCisgICAtPiAgQml0bWFw IEluZGV4IFNjYW4gb24gc2Nhbl90YWJsZV9wa2V5CisgICAgICAgICBJbmRleCBDb25kOiAoYSA+ IDApCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBCSVRNQVBfSEVBUF9TQ0FOKHNjYW5fdGFi bGUgc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNl OgorICAgQklUTUFQX0hFQVBfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkp CisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg5IHJvd3MpCisKK0NPTU1JVDsKKy0tIFdlIGNh biBmb3JjZSBhIHByaW1hcnkga2V5IGxvb2t1cCB0byB1c2UgYSBzZXF1ZW50aWFsIHNjYW4sIGJ1 dCB3ZQorLS0gY2FuJ3QgZm9yY2UgaXQgdG8gdXNlIGFuIGluZGV4LW9ubHkgc2NhbiAoZHVlIHRv IHRoZSBjb2x1bW4gbGlzdCkKKy0tIG9yIGEgVElEIHNjYW4gKGR1ZSB0byB0aGUgYWJzZW5jZSBv ZiBhIFRJRCBxdWFsKS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdTRVFfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBTZXEgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBGaWx0ZXI6IChhID0gMSkKKyBTdXBw bGllZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUpIC8qIG1hdGNoZWQgKi8K KyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKQorICAgTk9f R0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJ0lOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxl IFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVz aW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBEaXNhYmxlZDogdHJ1ZQorICAg SW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05M WV9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8K KyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgcHVibGlj LnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDggcm93cykKKwor U0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdUSURfU0NBTihzY2FuX3RhYmxlKSc7 CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFi bGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAg RGlzYWJsZWQ6IHRydWUKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFk dmljZToKKyAgIFRJRF9TQ0FOKHNjYW5fdGFibGUpIC8qIG1hdGNoZWQsIGZhaWxlZCAqLworIEdl bmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nh bl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoOCByb3dzKQorCitDT01N SVQ7CistLSBXZSBjYW4gZm9yY2libHkgZG93bmdyYWRlIGFuIGluZGV4LW9ubHkgc2NhbiB0byBh biBpbmRleCBzY2FuLCBidXQgd2UgY2FuJ3QKKy0tIGZvcmNlIHRoZSB1c2Ugb2YgYW4gaW5kZXgg dGhhdCB0aGUgcGxhbm5lciB0aGlua3MgaXMgaW5hcHBsaWNhYmxlLgorQkVHSU47CitTRVQgTE9D QUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3Rh YmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZS T00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJs ZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQ bGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpIC8q IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5f dGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQor KDcgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FO KHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAg ICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3Rh YmxlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJ TkRFWF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkgLyogbWF0Y2hlZCAq LworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBwdWJs aWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQor CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJs ZSBzY2FuX3RhYmxlX2IpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVD VCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBv biBzY2FuX3RhYmxlCisgICBEaXNhYmxlZDogdHJ1ZQorICAgRmlsdGVyOiAoYSA9IDEpCisgU3Vw cGxpZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9i KSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFf U0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoOCByb3dzKQorCitD T01NSVQ7CistLSBXZSBjYW4gZm9yY2UgdGhlIHVzZSBvZiBhIHNlcXVlbnRpYWwgc2NhbiBpbiBw bGFjZSBvZiBhIGJpdG1hcCBoZWFwIHNjYW4sCistLSBidXQgYSBwbGFpbiBpbmRleCBzY2FuIG9u IGEgQlJJTiBpbmRleCBpcyBub3QgcG9zc2libGUuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJTiAoQ09TVFMg T0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlCisJV0hFUkUgYiA+ICdz b21lIHRleHQgOCc7CisgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBzY2FuX3Rh YmxlCisgICBGaWx0ZXI6IChiID4gJ3NvbWUgdGV4dCA4Jzo6dGV4dCkKKyBTdXBwbGllZCBQbGFu IEFkdmljZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0 ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNj YW5fdGFibGUpCisoNyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J0lOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX2IpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBEaXNhYmxlZDogdHJ1ZQorICAg RmlsdGVyOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNj YW5fdGFibGUgc2Nhbl90YWJsZV9iKSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQg UGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNjYW5f dGFibGUpCisoOCByb3dzKQorCitDT01NSVQ7CistLSBXZSBjYW4gZm9yY2UgdGhlIHVzZSBvZiBh IHNlcXVlbnRpYWwgc2NhbiByYXRoZXIgdGhhbiBhIFRJRCBzY2FuIG9yCistLSBUSUQgcmFuZ2Ug c2Nhbi4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NB TihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1Qg KiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgY3RpZCA9ICcoMCwxKSc7CisgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBTZXEgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBGaWx0ZXI6IChjdGlkID0gJygwLDEp Jzo6dGlkKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkg LyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNjYW5f dGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZQorCVdIRVJFIGN0 aWQgPiAnKDEsMSknIEFORCBjdGlkIDwgJygyLDEpJzsKKyAgICAgICAgICAgICAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBv biBzY2FuX3RhYmxlCisgICBGaWx0ZXI6ICgoY3RpZCA+ICcoMSwxKSc6OnRpZCkgQU5EIChjdGlk IDwgJygyLDEpJzo6dGlkKSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNj YW5fdGFibGUpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFf U0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCitD T01NSVQ7CistLSBUZXN0IG1vcmUgY29tcGxleCBzY2VuYXJpb3Mgd2l0aCBpbmRleCBzY2Fucy4K K0JFR0lOOworLS0gU2hvdWxkIHN0aWxsIHdvcmsgaWYgd2UgbWVudGlvbiB0aGUgc2NoZW1hLgor U0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUg cHVibGljLnNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBJbmRl eCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNj YW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRl ZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJs ZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCistLSBCdXQgbm90 IGlmIHdlIG1lbnRpb24gdGhlIHdyb25nIHNjaGVtYS4KK1NFVCBMT0NBTCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIGNpbGJ1cC5zY2FuX3RhYmxlX3BrZXkp JzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90 YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAg IEluZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1ND QU4oc2Nhbl90YWJsZSBjaWxidXAuc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkLCBpbmFwcGxp Y2FibGUgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFi bGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcg cm93cykKKworLS0gSXQncyBPSyB0byByZXBlYXQgdGhlIHNhbWUgYWR2aWNlLgorU0VUIExPQ0FM IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJs ZV9wa2V5IHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAg ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJ bmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBJbmRleCBD b25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5f dGFibGUgc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkICovCisgICBJTkRFWF9TQ0FOKHNjYW5f dGFibGUgc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2 aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisg ICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg4IHJvd3MpCisKKy0tIEJ1dCBpdCBkb2Vzbid0IHdv cmsgaWYgdGhlIGluZGV4IHRhcmdldCBpcyBldmVuIG5vdGlvbmFsbHkgZGlmZmVyZW50LgorU0VU IExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nh bl90YWJsZV9wa2V5IHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSknOworRVhQTEFJ TiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJF IGEgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4 IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIEluZGV4IENvbmQ6 IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJs ZSBzY2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQsIGNvbmZsaWN0aW5nICovCisgICBJTkRFWF9T Q0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkgLyogbWF0Y2hlZCwgY29uZmxp Y3RpbmcgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFi bGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDgg cm93cykKKworQ09NTUlUOworLS0gVGVzdCBhc3NvcnRlZCBpbmNvcnJlY3QgYWR2aWNlLgorQkVH SU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKG5vdGhpbmcp JzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCBhIEZST00gc2Nhbl90 YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgSW5kZXggT25seSBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBv biBzY2FuX3RhYmxlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZp Y2U6CisgICBTRVFfU0NBTihub3RoaW5nKSAvKiBub3QgbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQ bGFuIEFkdmljZToKKyAgIElOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3Rh YmxlX3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK1NFVCBMT0NB TCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihub3RoaW5nIHdoYXRzb2V2ZXIp JzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCBhIEZST00gc2Nhbl90 YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgSW5kZXggT25seSBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBv biBzY2FuX3RhYmxlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZp Y2U6CisgICBJTkRFWF9TQ0FOKG5vdGhpbmcgd2hhdHNvZXZlcikgLyogbm90IG1hdGNoZWQgKi8K KyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBw dWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dz KQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90 YWJsZSBib2d1cyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUIGEg RlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg SW5kZXggT25seSBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBJ bmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FO KHNjYW5fdGFibGUgYm9ndXMpIC8qIG1hdGNoZWQsIGluYXBwbGljYWJsZSwgZmFpbGVkICovCisg R2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgcHVi bGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykK KworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9PTkxZX1NDQU4obm90 aGluZyB3aGF0c29ldmVyKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxF Q1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IE9ubHkgU2NhbiB1 c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAx KQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKG5vdGhpbmcgd2hh dHNvZXZlcikgLyogbm90IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJ TkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9f R0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJ0lOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIGJvZ3VzKSc7CitFWFBMQUlOIChD T1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9 IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBPbmx5IFNjYW4gdXNpbmcgc2Nhbl90YWJs ZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQ bGFuIEFkdmljZToKKyAgIElOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIGJvZ3VzKSAvKiBtYXRj aGVkLCBpbmFwcGxpY2FibGUgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9P TkxZX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVS KHNjYW5fdGFibGUpCisoNyByb3dzKQorCitDT01NSVQ7CistLSBUZXN0IG91ciBhYmlsaXR5IHRv IHJlZmVyIHRvIG11bHRpcGxlIGluc3RhbmNlcyBvZiB0aGUgc2FtZSBhbGlhcy4KK0JFR0lOOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKGdlbmVyYXRl X3NlcmllcygxLDEwKSBnIExFRlQgSk9JTiBzY2FuX3RhYmxlIHMgT04gZyA9IHMuYSkgeAorICAg IExFRlQgSk9JTiBzY2FuX3RhYmxlIHMgT04gZyA9IHMuYTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBOZXN0ZWQgTG9vcCBMZWZ0IEpvaW4KKyAgIC0+ICBOZXN0ZWQgTG9vcCBMZWZ0IEpvaW4K KyAgICAgICAgIC0+ICBGdW5jdGlvbiBTY2FuIG9uIGdlbmVyYXRlX3NlcmllcyBnCisgICAgICAg ICAtPiAgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZSBzCisg ICAgICAgICAgICAgICBJbmRleCBDb25kOiAoYSA9IGcuZykKKyAgIC0+ICBJbmRleCBTY2FuIHVz aW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlIHNfMQorICAgICAgICAgSW5kZXggQ29u ZDogKGEgPSBnLmcpCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihnIHMg cyMyKQorICAgTkVTVEVEX0xPT1BfUExBSU4ocyBzIzIpCisgICBJTkRFWF9TQ0FOKHMgcHVibGlj LnNjYW5fdGFibGVfcGtleSBzIzIgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhF UihzIHMjMikKKygxMiByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J1NFUV9TQ0FOKHMpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1Qg KiBGUk9NIChnZW5lcmF0ZV9zZXJpZXMoMSwxMCkgZyBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9O IGcgPSBzLmEpIHgKKyAgICBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmE7CisgICAg ICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgTmVzdGVkIExvb3AgTGVmdCBKb2luCisgICAtPiAgSGFzaCBMZWZ0IEpvaW4KKyAgICAgICAg IEhhc2ggQ29uZDogKGcuZyA9IHMuYSkKKyAgICAgICAgIC0+ICBGdW5jdGlvbiBTY2FuIG9uIGdl bmVyYXRlX3NlcmllcyBnCisgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIHNjYW5fdGFibGUgcworICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJs ZV9wa2V5IG9uIHNjYW5fdGFibGUgc18xCisgICAgICAgICBJbmRleCBDb25kOiAoYSA9IGcuZykK KyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHMpIC8qIG1hdGNoZWQgKi8KKyBH ZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGcgcyBzIzIpCisgICBORVNURURf TE9PUF9QTEFJTihzIzIpCisgICBIQVNIX0pPSU4ocykKKyAgIFNFUV9TQ0FOKHMpCisgICBJTkRF WF9TQ0FOKHMjMiBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHMgcyMyKQor KDE3IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4o cyMyKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAo Z2VuZXJhdGVfc2VyaWVzKDEsMTApIGcgTEVGVCBKT0lOIHNjYW5fdGFibGUgcyBPTiBnID0gcy5h KSB4CisgICAgTEVGVCBKT0lOIHNjYW5fdGFibGUgcyBPTiBnID0gcy5hOworICAgICAgICAgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgSGFzaCBMZWZ0IEpvaW4KKyAgIEhhc2ggQ29uZDogKGcuZyA9IHNfMS5hKQorICAgLT4gIE5l c3RlZCBMb29wIExlZnQgSm9pbgorICAgICAgICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gZ2VuZXJh dGVfc2VyaWVzIGcKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtl eSBvbiBzY2FuX3RhYmxlIHMKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChhID0gZy5nKQor ICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBzY2FuX3RhYmxlIHNfMQorIFN1 cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4ocyMyKSAvKiBtYXRjaGVkICovCisgR2Vu ZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihnIHMgcyMyKQorICAgTkVTVEVEX0xP T1BfUExBSU4ocykKKyAgIEhBU0hfSk9JTihzIzIpCisgICBTRVFfU0NBTihzIzIpCisgICBJTkRF WF9TQ0FOKHMgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzIHMjMikKKygx NyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHMp IFNFUV9TQ0FOKHMjMiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVD VCAqIEZST00gKGdlbmVyYXRlX3NlcmllcygxLDEwKSBnIExFRlQgSk9JTiBzY2FuX3RhYmxlIHMg T04gZyA9IHMuYSkgeAorICAgIExFRlQgSk9JTiBzY2FuX3RhYmxlIHMgT04gZyA9IHMuYTsKKyAg ICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBMZWZ0IEpvaW4K KyAgIEhhc2ggQ29uZDogKGcuZyA9IHNfMS5hKQorICAgLT4gIEhhc2ggTGVmdCBKb2luCisgICAg ICAgICBIYXNoIENvbmQ6IChnLmcgPSBzLmEpCisgICAgICAgICAtPiAgRnVuY3Rpb24gU2NhbiBv biBnZW5lcmF0ZV9zZXJpZXMgZworICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiBzY2FuX3RhYmxlIHMKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gc2Nhbl90YWJsZSBzXzEKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNFUV9T Q0FOKHMpIC8qIG1hdGNoZWQgKi8KKyAgIFNFUV9TQ0FOKHMjMikgLyogbWF0Y2hlZCAqLworIEdl bmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZyBzIHMjMikKKyAgIEhBU0hfSk9J TihzIHMjMikKKyAgIFNFUV9TQ0FOKHMgcyMyKQorICAgTk9fR0FUSEVSKHMgcyMyKQorKDE3IHJv d3MpCisKK0NPTU1JVDsKKy0tIFRlc3Qgb3VyIGFiaWxpdHkgdG8gcmVmZXIgdG8gc2NhbnMgd2l0 aGluIGEgc3VicXVlcnkuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNU ICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDAp IHg7CisgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRl eCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlIHMKKyAgIEluZGV4IENv bmQ6IChhID0gMSkKKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNAeCBw dWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNAeCkKKyg1IHJvd3MpCisKK0VY UExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChTRUxFQ1QgKiBG Uk9NIHNjYW5fdGFibGUgcyBXSEVSRSBhID0gMSBPRkZTRVQgMCk7CisgICAgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4g dXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUgcworICAgSW5kZXggQ29uZDogKGEg PSAxKQorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc0B1bm5hbWVkX3N1 YnF1ZXJ5IHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoc0B1bm5hbWVkX3N1 YnF1ZXJ5KQorKDUgcm93cykKKworQkVHSU47CistLSBTaG91bGQgbm90IG1hdGNoLgorU0VUIExP Q0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzKSc7CitFWFBMQUlOIChDT1NU UyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3Rh YmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDApIHg7CisgICAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBv biBzY2FuX3RhYmxlIHMKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFk dmljZToKKyAgIFNFUV9TQ0FOKHMpIC8qIG5vdCBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4g QWR2aWNlOgorICAgSU5ERVhfU0NBTihzQHggcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5P X0dBVEhFUihzQHgpCisoNyByb3dzKQorCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KQorU0VMRUNUICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEg T0ZGU0VUIDApOworICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2Fu X3RhYmxlIHMKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToK KyAgIFNFUV9TQ0FOKHMpIC8qIG5vdCBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNl OgorICAgSU5ERVhfU0NBTihzQHVubmFtZWRfc3VicXVlcnkgcHVibGljLnNjYW5fdGFibGVfcGtl eSkKKyAgIE5PX0dBVEhFUihzQHVubmFtZWRfc3VicXVlcnkpCisoNyByb3dzKQorCistLSBTaG91 bGQgbWF0Y2ggZmlyc3QgcXVlcnkgb25seS4KK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnU0VRX1NDQU4oc0B4KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQor U0VMRUNUICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZG U0VUIDApIHg7CisgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJsZSBzCisgICBGaWx0ZXI6 IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNAeCkgLyogbWF0 Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNAeCkKKyAgIE5P X0dBVEhFUihzQHgpCisoNyByb3dzKQorCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KQorU0VMRUNUICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEg T0ZGU0VUIDApOworICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2Fu X3RhYmxlIHMKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToK KyAgIFNFUV9TQ0FOKHNAeCkgLyogbm90IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZp Y2U6CisgICBJTkRFWF9TQ0FOKHNAdW5uYW1lZF9zdWJxdWVyeSBwdWJsaWMuc2Nhbl90YWJsZV9w a2V5KQorICAgTk9fR0FUSEVSKHNAdW5uYW1lZF9zdWJxdWVyeSkKKyg3IHJvd3MpCisKKy0tIFNo b3VsZCBtYXRjaCBzZWNvbmQgcXVlcnkgb25seS4KK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnU0VRX1NDQU4oc0B1bm5hbWVkX3N1YnF1ZXJ5KSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3RhYmxl IHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDApIHg7CisgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBz Y2FuX3RhYmxlIHMKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmlj ZToKKyAgIFNFUV9TQ0FOKHNAdW5uYW1lZF9zdWJxdWVyeSkgLyogbm90IG1hdGNoZWQgKi8KKyBH ZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNAeCBwdWJsaWMuc2Nhbl90YWJs ZV9wa2V5KQorICAgTk9fR0FUSEVSKHNAeCkKKyg3IHJvd3MpCisKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUg cyBXSEVSRSBhID0gMSBPRkZTRVQgMCk7CisgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJsZSBzCisgICBGaWx0ZXI6IChhID0gMSkKKyBT dXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNAdW5uYW1lZF9zdWJxdWVyeSkgLyog bWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNAdW5uYW1l ZF9zdWJxdWVyeSkKKyAgIE5PX0dBVEhFUihzQHVubmFtZWRfc3VicXVlcnkpCisoNyByb3dzKQor CitDT01NSVQ7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3N5 bnRheC5vdXQgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3N5bnRheC5vdXQKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmNjNzYwZDU1NzRhCi0tLSAvZGV2 L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9zeW50YXgub3V0CkBA IC0wLDAgKzEsMTc0IEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CistLSBBbiBlbXB0eSBzdHJp bmcgaXMgYWxsb3dlZC4gRW1wdHkgdGFyZ2V0IGxpc3RzIGFyZSBhbGxvd2VkIGZvciBtb3N0IGFk dmljZQorLS0gdGFncywgYnV0IG5vdCBmb3IgSk9JTl9PUkRFUi4KK1NFVCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnJzsKK0VYUExBSU4gU0VMRUNUIDE7CisgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIFJlc3VsdCAgKGNvc3Q9MC4wMC4uMC4wMSByb3dzPTEgd2lkdGg9NCkKKygxIHJv dykKKworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTigpJzsKK0VYUExBSU4g U0VMRUNUIDE7CisgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFJlc3VsdCAgKGNvc3Q9 MC4wMC4uMC4wMSByb3dzPTEgd2lkdGg9NCkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKygyIHJv d3MpCisKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTkVTVEVEX0xPT1BfUExBSU4oKSc7 CitFWFBMQUlOIFNFTEVDVCAxOworICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBSZXN1 bHQgIChjb3N0PTAuMDAuLjAuMDEgcm93cz0xIHdpZHRoPTQpCisgU3VwcGxpZWQgUGxhbiBBZHZp Y2U6CisoMiByb3dzKQorCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0pPSU5fT1JERVIo KSc7CitFUlJPUjogIGludmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2Uu YWR2aWNlIjogIkpPSU5fT1JERVIoKSIKK0RFVEFJTDogIENvdWxkIG5vdCBwYXJzZSBhZHZpY2U6 IEpPSU5fT1JERVIgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSB0YXJnZXQgYXQgb3IgbmVhciAiKSIK Ky0tIFRlc3QgYXNzb3J0ZWQgdmFyaWF0aW9ucyBpbiBjYXBpdGFsaXphdGlvbiwgd2hpdGVzcGFj ZSwgYW5kIHdoaWNoIHBhcnRzIG9mCistLSB0aGUgcmVsYXRpb24gaWRlbnRpZmllciBhcmUgaW5j bHVkZWQuIFRoZXNlIHNob3VsZCBhbGwgd29yay4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnU0VRX1NDQU4oeCknOworRVhQTEFJTiBTRUxFQ1QgMTsKKyAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgUmVzdWx0ICAoY29zdD0wLjAwLi4wLjAxIHJvd3M9MSB3aWR0aD00KQorIFN1 cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oeCkgLyogbm90IG1hdGNoZWQgKi8KKygz IHJvd3MpCisKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnc2VxX3NjYW4oeEB5KSc7CitF WFBMQUlOIFNFTEVDVCAxOworICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBSZXN1bHQg IChjb3N0PTAuMDAuLjAuMDEgcm93cz0xIHdpZHRoPTQpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6 CisgICBTRVFfU0NBTih4QHkpIC8qIG5vdCBtYXRjaGVkICovCisoMyByb3dzKQorCitTRVQgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9zY2FuKHgjMiknOworRVhQTEFJTiBTRUxFQ1QgMTsK KyAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgUmVzdWx0ICAoY29zdD0wLjAwLi4wLjAx IHJvd3M9MSB3aWR0aD00KQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oeCMy KSAvKiBub3QgbWF0Y2hlZCAqLworKDMgcm93cykKKworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdTRVFfU0NBTiAoeC95KSc7CitFWFBMQUlOIFNFTEVDVCAxOworICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBSZXN1bHQgIChjb3N0PTAuMDAuLjAuMDEgcm93cz0xIHdpZHRoPTQp CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTih4L3kpIC8qIG5vdCBtYXRjaGVk ICovCisoMyByb3dzKQorCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJyAgU0VRX1NDQU4g KCB4IC8geSAuIHogKSAgJzsKK0VYUExBSU4gU0VMRUNUIDE7CisgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIFJlc3VsdCAgKGNvc3Q9MC4wMC4uMC4wMSByb3dzPTEgd2lkdGg9NCkKKyBT dXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHgveS56KSAvKiBub3QgbWF0Y2hlZCAq LworKDMgcm93cykKKworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTigieCIj Mi8ieSIuInoiQCJ0IiknOworRVhQTEFJTiBTRUxFQ1QgMTsKKyAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgUmVzdWx0ICAoY29zdD0wLjAwLi4wLjAxIHJvd3M9MSB3aWR0aD00KQorIFN1 cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oeCMyL3kuekB0KSAvKiBub3QgbWF0Y2hl ZCAqLworKDMgcm93cykKKworLS0gU3ludGF4IGVycm9ycy4KK1NFVCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnU0VRVUVOVElBTF9TQ0FOKHgpJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBmb3Ig cGFyYW1ldGVyICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiOiAiU0VRVUVOVElBTF9TQ0FOKHgpIgor REVUQUlMOiAgQ291bGQgbm90IHBhcnNlIGFkdmljZTogc3ludGF4IGVycm9yIGF0IG9yIG5lYXIg IlNFUVVFTlRJQUxfU0NBTiIKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4n OworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgInBnX3BsYW5fYWR2aWNlLmFk dmljZSI6ICJTRVFfU0NBTiIKK0RFVEFJTDogIENvdWxkIG5vdCBwYXJzZSBhZHZpY2U6IHN5bnRh eCBlcnJvciBhdCBlbmQgb2YgaW5wdXQKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VR X1NDQU4oJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICJwZ19wbGFuX2Fk dmljZS5hZHZpY2UiOiAiU0VRX1NDQU4oIgorREVUQUlMOiAgQ291bGQgbm90IHBhcnNlIGFkdmlj ZTogc3ludGF4IGVycm9yIGF0IGVuZCBvZiBpbnB1dAorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdTRVFfU0NBTigiJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICJw Z19wbGFuX2FkdmljZS5hZHZpY2UiOiAiU0VRX1NDQU4oIiIKK0RFVEFJTDogIENvdWxkIG5vdCBw YXJzZSBhZHZpY2U6IHVudGVybWluYXRlZCBxdW90ZWQgaWRlbnRpZmllciBhdCBlbmQgb2YgaW5w dXQKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oIiIpJzsKK0VSUk9SOiAg aW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiOiAiU0VR X1NDQU4oIiIpIgorREVUQUlMOiAgQ291bGQgbm90IHBhcnNlIGFkdmljZTogemVyby1sZW5ndGgg ZGVsaW1pdGVkIGlkZW50aWZpZXIgYXQgb3IgbmVhciAiIiIKK1NFVCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnU0VRX1NDQU4oImEiJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1l dGVyICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiOiAiU0VRX1NDQU4oImEiIgorREVUQUlMOiAgQ291 bGQgbm90IHBhcnNlIGFkdmljZTogc3ludGF4IGVycm9yIGF0IGVuZCBvZiBpbnB1dAorU0VUIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTigjJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1 ZSBmb3IgcGFyYW1ldGVyICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiOiAiU0VRX1NDQU4oIyIKK0RF VEFJTDogIENvdWxkIG5vdCBwYXJzZSBhZHZpY2U6IHN5bnRheCBlcnJvciBhdCBvciBuZWFyICIj IgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICcoKSc7CitFUlJPUjogIGludmFsaWQgdmFs dWUgZm9yIHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2aWNlIjogIigpIgorREVUQUlMOiAg Q291bGQgbm90IHBhcnNlIGFkdmljZTogc3ludGF4IGVycm9yIGF0IG9yIG5lYXIgIigiCitTRVQg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJzEyMyc7CitFUlJPUjogIGludmFsaWQgdmFsdWUgZm9y IHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2aWNlIjogIjEyMyIKK0RFVEFJTDogIENvdWxk IG5vdCBwYXJzZSBhZHZpY2U6IHN5bnRheCBlcnJvciBhdCBvciBuZWFyICIxMjMiCistLSBMZWdh bCBjb21tZW50cy4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnLyoqLyc7CitFWFBMQUlO IFNFTEVDVCAxOworICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBSZXN1bHQgIChjb3N0 PTAuMDAuLjAuMDEgcm93cz0xIHdpZHRoPTQpCisoMSByb3cpCisKK1NFVCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnSEFTSF9KT0lOKF8pLyoqKi8nOworRVhQTEFJTiBTRUxFQ1QgMTsKKyAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgUmVzdWx0ICAoY29zdD0wLjAwLi4wLjAxIHJvd3M9 MSB3aWR0aD00KQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSEFTSF9KT0lOKF8pIC8qIG5v dCBtYXRjaGVkICovCisoMyByb3dzKQorCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJy8q IGNvbW1lbnQgKi8gSEFTSF9KT0lOKC8qeCoveSknOworRVhQTEFJTiBTRUxFQ1QgMTsKKyAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgUmVzdWx0ICAoY29zdD0wLjAwLi4wLjAxIHJvd3M9 MSB3aWR0aD00KQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSEFTSF9KT0lOKHkpIC8qIG5v dCBtYXRjaGVkICovCisoMyByb3dzKQorCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJy8q IGNvbW1lbnQgKi8gSEFTSF9KT0lOKHkvLyp4Ki96KSc7CitFWFBMQUlOIFNFTEVDVCAxOworICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBSZXN1bHQgIChjb3N0PTAuMDAuLjAuMDEgcm93 cz0xIHdpZHRoPTQpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBIQVNIX0pPSU4oeS96KSAv KiBub3QgbWF0Y2hlZCAqLworKDMgcm93cykKKworLS0gVW50ZXJtaW5hdGVkIGNvbW1lbnRzLgor U0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICcvKic7CitFUlJPUjogIGludmFsaWQgdmFsdWUg Zm9yIHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2aWNlIjogIi8qIgorREVUQUlMOiAgQ291 bGQgbm90IHBhcnNlIGFkdmljZTogdW50ZXJtaW5hdGVkIGNvbW1lbnQgYXQgZW5kIG9mIGlucHV0 CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0pPSU5fT1JERVIoImZPTyIpIC8qIG9vcHMn OworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgInBnX3BsYW5fYWR2aWNlLmFk dmljZSI6ICJKT0lOX09SREVSKCJmT08iKSAvKiBvb3BzIgorREVUQUlMOiAgQ291bGQgbm90IHBh cnNlIGFkdmljZTogdW50ZXJtaW5hdGVkIGNvbW1lbnQgYXQgZW5kIG9mIGlucHV0CistLSBOZXN0 ZWQgY29tbWVudHMgYXJlIG5vdCBzdXBwb3J0ZWQsIHNvIHRoZSBmaXJzdCBvZiB0aGVzZSBpcyBs ZWdhbCBhbmQKKy0tIHRoZSBzZWNvbmQgaXMgbm90LgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICcvKi8qLyc7CitFWFBMQUlOIFNFTEVDVCAxOworICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBSZXN1bHQgIChjb3N0PTAuMDAuLjAuMDEgcm93cz0xIHdpZHRoPTQpCisoMSByb3cp CisKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnLyovKiBzdHVmZiAqLyovJzsKK0VSUk9S OiAgaW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiOiAi LyovKiBzdHVmZiAqLyovIgorREVUQUlMOiAgQ291bGQgbm90IHBhcnNlIGFkdmljZTogc3ludGF4 IGVycm9yIGF0IG9yIG5lYXIgIioiCistLSBGb3JlaWduIGpvaW4gcmVxdWlyZXMgbXVsdGlwbGUg cmVsYXRpb24gaWRlbnRpZmllcnMuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0ZPUkVJ R05fSk9JTihhKSc7CitFUlJPUjogIGludmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRlciAicGdfcGxh bl9hZHZpY2UuYWR2aWNlIjogIkZPUkVJR05fSk9JTihhKSIKK0RFVEFJTDogIENvdWxkIG5vdCBw YXJzZSBhZHZpY2U6IEZPUkVJR05fSk9JTiB0YXJnZXRzIG11c3QgY29udGFpbiBtb3JlIHRoYW4g b25lIHJlbGF0aW9uIGlkZW50aWZpZXIgYXQgb3IgbmVhciAiKSIKK1NFVCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnRk9SRUlHTl9KT0lOKChhKSknOworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZv ciBwYXJhbWV0ZXIgInBnX3BsYW5fYWR2aWNlLmFkdmljZSI6ICJGT1JFSUdOX0pPSU4oKGEpKSIK K0RFVEFJTDogIENvdWxkIG5vdCBwYXJzZSBhZHZpY2U6IEZPUkVJR05fSk9JTiB0YXJnZXRzIG11 c3QgY29udGFpbiBtb3JlIHRoYW4gb25lIHJlbGF0aW9uIGlkZW50aWZpZXIgYXQgb3IgbmVhciAi KSIKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvbWVzb24uYnVpbGQgYi9jb250 cmliL3BnX3BsYW5fYWR2aWNlL21lc29uLmJ1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwLi4zNDUyZTVhZDQ4ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdf cGxhbl9hZHZpY2UvbWVzb24uYnVpbGQKQEAgLTAsMCArMSw3MCBAQAorIyBDb3B5cmlnaHQgKGMp IDIwMjItMjAyNCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKworcGdfcGxh bl9hZHZpY2Vfc291cmNlcyA9IGZpbGVzKAorICAncGdfcGxhbl9hZHZpY2UuYycsCisgICdwZ3Bh X2FzdC5jJywKKyAgJ3BncGFfY29sbGVjdG9yLmMnLAorICAncGdwYV9pZGVudGlmaWVyLmMnLAor ICAncGdwYV9qb2luLmMnLAorICAncGdwYV9vdXRwdXQuYycsCisgICdwZ3BhX3BsYW5uZXIuYycs CisgICdwZ3BhX3NjYW4uYycsCisgICdwZ3BhX3Ryb3ZlLmMnLAorICAncGdwYV93YWxrZXIuYycs CispCisKK3BncGFfc2Nhbm5lciA9IGN1c3RvbV90YXJnZXQoJ3BncGFfc2Nhbm5lcicsCisgIGlu cHV0OiAncGdwYV9zY2FubmVyLmwnLAorICBvdXRwdXQ6ICdwZ3BhX3NjYW5uZXIuYycsCisgIGNv bW1hbmQ6IGZsZXhfY21kLAorKQorZ2VuZXJhdGVkX3NvdXJjZXMgKz0gcGdwYV9zY2FubmVyCitw Z19wbGFuX2FkdmljZV9zb3VyY2VzICs9IHBncGFfc2Nhbm5lcgorCitwZ3BhX3BhcnNlciA9IGN1 c3RvbV90YXJnZXQoJ3BncGFfcGFyc2VyJywKKyAgaW5wdXQ6ICdwZ3BhX3BhcnNlci55JywKKyAg a3dhcmdzOiBiaXNvbl9rdywKKykKK2dlbmVyYXRlZF9zb3VyY2VzICs9IHBncGFfcGFyc2VyLnRv X2xpc3QoKQorcGdfcGxhbl9hZHZpY2Vfc291cmNlcyArPSBwZ3BhX3BhcnNlcgorCitpZiBob3N0 X3N5c3RlbSA9PSAnd2luZG93cycKKyAgcGdfcGxhbl9hZHZpY2Vfc291cmNlcyArPSByY19saWJf Z2VuLnByb2Nlc3Mod2luMzJ2ZXJfcmMsIGV4dHJhX2FyZ3M6IFsKKyAgICAnLS1OQU1FJywgJ3Bn X3BsYW5fYWR2aWNlJywKKyAgICAnLS1GSUxFREVTQycsICdwZ19wbGFuX2FkdmljZSAtIGhlbHAg dGhlIHBsYW5uZXIgZ2V0IHRoZSByaWdodCBwbGFuJyxdKQorZW5kaWYKKworcGdfcGxhbl9hZHZp Y2UgPSBzaGFyZWRfbW9kdWxlKCdwZ19wbGFuX2FkdmljZScsCisgIHBnX3BsYW5fYWR2aWNlX3Nv dXJjZXMsCisgIGluY2x1ZGVfZGlyZWN0b3JpZXM6IGluY2x1ZGVfZGlyZWN0b3JpZXMoJy4nKSwK KyAga3dhcmdzOiBjb250cmliX21vZF9hcmdzLAorKQorY29udHJpYl90YXJnZXRzICs9IHBnX3Bs YW5fYWR2aWNlCisKK2luc3RhbGxfZGF0YSgKKyAgJ3BnX3BsYW5fYWR2aWNlLS0xLjAuc3FsJywK KyAgJ3BnX3BsYW5fYWR2aWNlLmNvbnRyb2wnLAorICBrd2FyZ3M6IGNvbnRyaWJfZGF0YV9hcmdz LAorKQorCit0ZXN0cyArPSB7CisgICduYW1lJzogJ3BnX3BsYW5fYWR2aWNlJywKKyAgJ3NkJzog bWVzb24uY3VycmVudF9zb3VyY2VfZGlyKCksCisgICdiZCc6IG1lc29uLmN1cnJlbnRfYnVpbGRf ZGlyKCksCisgICdyZWdyZXNzJzogeworICAgICdzcWwnOiBbCisgICAgICAnZ2F0aGVyJywKKyAg ICAgICdqb2luX29yZGVyJywKKyAgICAgICdqb2luX3N0cmF0ZWd5JywKKyAgICAgICdsb2NhbF9j b2xsZWN0b3InLAorICAgICAgJ3BhcnRpdGlvbndpc2UnLAorICAgICAgJ3NjYW4nLAorICAgICAg J3N5bnRheCcsCisgICAgXSwKKyAgfSwKKyAgJ3RhcCc6IHsKKyAgICAndGVzdHMnOiBbCisgICAg ICAndC8wMDFfcmVncmVzcy5wbCcsCisgICAgXSwKKyAgfSwKK30KZGlmZiAtLWdpdCBhL2NvbnRy aWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UtLTEuMC5zcWwgYi9jb250cmliL3BnX3Bs YW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLS0xLjAuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwLi4yOWY0ZjIyNDg2NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIv cGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UtLTEuMC5zcWwKQEAgLTAsMCArMSw0MiBAQAor LyogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS0tMS4wLnNxbCAqLworCist LSBjb21wbGFpbiBpZiBzY3JpcHQgaXMgc291cmNlZCBpbiBwc3FsLCByYXRoZXIgdGhhbiB2aWEg Q1JFQVRFIEVYVEVOU0lPTgorXGVjaG8gVXNlICJDUkVBVEUgRVhURU5TSU9OIHBnX3BsYW5fYWR2 aWNlIiB0byBsb2FkIHRoaXMgZmlsZS4gXHF1aXQKKworQ1JFQVRFIEZVTkNUSU9OIHBnX2NsZWFy X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKQorUkVUVVJOUyB2b2lkCitBUyAnTU9EVUxFX1BBVEhO QU1FJywgJ3BnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UnCitMQU5HVUFHRSBDIFNUUklD VDsKKworQ1JFQVRFIEZVTkNUSU9OIHBnX2NsZWFyX2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKCkK K1JFVFVSTlMgdm9pZAorQVMgJ01PRFVMRV9QQVRITkFNRScsICdwZ19jbGVhcl9jb2xsZWN0ZWRf c2hhcmVkX2FkdmljZScKK0xBTkdVQUdFIEMgU1RSSUNUOworCitDUkVBVEUgRlVOQ1RJT04gcGdf Z2V0X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoCisJT1VUIGlkIGJpZ2ludCwKKwlPVVQgdXNlcmlk IG9pZCwKKwlPVVQgZGJpZCBvaWQsCisJT1VUIHF1ZXJ5aWQgYmlnaW50LAorCU9VVCBjb2xsZWN0 aW9uX3RpbWUgdGltZXN0YW1wdHosCisJT1VUIHF1ZXJ5IHRleHQsCisJT1VUIGFkdmljZSB0ZXh0 CispCitSRVRVUk5TIFNFVE9GIHJlY29yZAorQVMgJ01PRFVMRV9QQVRITkFNRScsICdwZ19nZXRf Y29sbGVjdGVkX2xvY2FsX2FkdmljZScKK0xBTkdVQUdFIEMgU1RSSUNUOworCitDUkVBVEUgRlVO Q1RJT04gcGdfZ2V0X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKAorCU9VVCBpZCBiaWdpbnQsCisJ T1VUIHVzZXJpZCBvaWQsCisJT1VUIGRiaWQgb2lkLAorCU9VVCBxdWVyeWlkIGJpZ2ludCwKKwlP VVQgY29sbGVjdGlvbl90aW1lIHRpbWVzdGFtcHR6LAorCU9VVCBxdWVyeSB0ZXh0LAorCU9VVCBh ZHZpY2UgdGV4dAorKQorUkVUVVJOUyBTRVRPRiByZWNvcmQKK0FTICdNT0RVTEVfUEFUSE5BTUUn LCAncGdfZ2V0X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlJworTEFOR1VBR0UgQyBTVFJJQ1Q7CisK K1JFVk9LRSBBTEwgT04gRlVOQ1RJT04gcGdfZ2V0X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKCkg RlJPTSBQVUJMSUM7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5f YWR2aWNlLmMgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmNiNzI1M2UxYWU0Ci0tLSAvZGV2L251 bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5jCkBAIC0wLDAg KzEsNDY4IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ19wbGFuX2FkdmljZS5jCisg KgkgIG1haW4gZW50cnlwb2ludHMgZm9yIGdlbmVyYXRpbmcgYW5kIGFwcGx5aW5nIHBsYW5uZXIg YWR2aWNlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjQsIFBvc3RncmVTUUwgR2xvYmFs IERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3Bs YW5fYWR2aWNlLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUgInBvc3Rn cmVzLmgiCisKKyNpbmNsdWRlICJwZ19wbGFuX2FkdmljZS5oIgorI2luY2x1ZGUgInBncGFfYXN0 LmgiCisjaW5jbHVkZSAicGdwYV9jb2xsZWN0b3IuaCIKKyNpbmNsdWRlICJwZ3BhX2lkZW50aWZp ZXIuaCIKKyNpbmNsdWRlICJwZ3BhX291dHB1dC5oIgorI2luY2x1ZGUgInBncGFfcGxhbm5lci5o IgorI2luY2x1ZGUgInBncGFfdHJvdmUuaCIKKyNpbmNsdWRlICJwZ3BhX3dhbGtlci5oIgorCisj aW5jbHVkZSAiY29tbWFuZHMvZGVmcmVtLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvZXhwbGFpbi5o IgorI2luY2x1ZGUgImNvbW1hbmRzL2V4cGxhaW5fZm9ybWF0LmgiCisjaW5jbHVkZSAiY29tbWFu ZHMvZXhwbGFpbl9zdGF0ZS5oIgorI2luY2x1ZGUgImZ1bmNhcGkuaCIKKyNpbmNsdWRlICJvcHRp bWl6ZXIvcGxhbm5lci5oIgorI2luY2x1ZGUgInN0b3JhZ2UvZHNtX3JlZ2lzdHJ5LmgiCisjaW5j bHVkZSAidXRpbHMvZ3VjLmgiCisKK1BHX01PRFVMRV9NQUdJQzsKKworc3RhdGljIHBncGFfc2hh cmVkX3N0YXRlICpwZ3BhX3N0YXRlID0gTlVMTDsKK3N0YXRpYyBkc2FfYXJlYSAqcGdwYV9kc2Ff YXJlYSA9IE5VTEw7CisKKy8qIEdVQyB2YXJpYWJsZXMgKi8KK2NoYXIJICAgKnBnX3BsYW5fYWR2 aWNlX2FkdmljZSA9IE5VTEw7CitzdGF0aWMgYm9vbCBwZ19wbGFuX2FkdmljZV9hbHdheXNfZXhw bGFpbl9zdXBwbGllZF9hZHZpY2UgPSB0cnVlOworYm9vbAkJcGdfcGxhbl9hZHZpY2VfdHJhY2Vf bWFzayA9IGZhbHNlOworaW50CQkJcGdfcGxhbl9hZHZpY2VfbG9jYWxfY29sbGVjdGlvbl9saW1p dCA9IDA7CitpbnQJCQlwZ19wbGFuX2FkdmljZV9zaGFyZWRfY29sbGVjdGlvbl9saW1pdCA9IDA7 CisKKy8qIFNhdmVkIGhvb2sgdmFsdWUgKi8KK3N0YXRpYyBleHBsYWluX3Blcl9wbGFuX2hvb2tf dHlwZSBwcmV2X2V4cGxhaW5fcGVyX3BsYW4gPSBOVUxMOworCisvKiBPdGhlciBmaWxlLWxldmVs IGdsb2JhbHMgKi8KK3N0YXRpYyBpbnQJZXNfZXh0ZW5zaW9uX2lkOworc3RhdGljIE1lbW9yeUNv bnRleHQgcGdwYV9tZW1vcnlfY29udGV4dCA9IE5VTEw7CisKK3N0YXRpYyB2b2lkIHBncGFfaW5p dF9zaGFyZWRfc3RhdGUodm9pZCAqcHRyLCB2b2lkICphcmcpOworc3RhdGljIHZvaWQgcGdfcGxh bl9hZHZpY2VfZXhwbGFpbl9vcHRpb25faGFuZGxlcihFeHBsYWluU3RhdGUgKmVzLAorCQkJCQkJ CQkJCQkJICBEZWZFbGVtICpvcHQsCisJCQkJCQkJCQkJCQkgIFBhcnNlU3RhdGUgKnBzdGF0ZSk7 CitzdGF0aWMgdm9pZCBwZ19wbGFuX2FkdmljZV9leHBsYWluX3Blcl9wbGFuX2hvb2soUGxhbm5l ZFN0bXQgKnBsYW5uZWRzdG10LAorCQkJCQkJCQkJCQkJIEludG9DbGF1c2UgKmludG8sCisJCQkJ CQkJCQkJCQkgRXhwbGFpblN0YXRlICplcywKKwkJCQkJCQkJCQkJCSBjb25zdCBjaGFyICpxdWVy eVN0cmluZywKKwkJCQkJCQkJCQkJCSBQYXJhbUxpc3RJbmZvIHBhcmFtcywKKwkJCQkJCQkJCQkJ CSBRdWVyeUVudmlyb25tZW50ICpxdWVyeUVudik7CitzdGF0aWMgYm9vbCBwZ19wbGFuX2Fkdmlj ZV9hZHZpY2VfY2hlY2tfaG9vayhjaGFyICoqbmV3dmFsLCB2b2lkICoqZXh0cmEsCisJCQkJCQkJ CQkJCSBHdWNTb3VyY2Ugc291cmNlKTsKK3N0YXRpYyBEZWZFbGVtICpmaW5kX2RlZmVsZW1fYnlf ZGVmbmFtZShMaXN0ICpkZWZsaXN0LCBjaGFyICpkZWZuYW1lKTsKKworLyoKKyAqIEluaXRpYWxp emUgdGhpcyBtb2R1bGUuCisgKi8KK3ZvaWQKK19QR19pbml0KHZvaWQpCit7CisJRGVmaW5lQ3Vz dG9tU3RyaW5nVmFyaWFibGUoInBnX3BsYW5fYWR2aWNlLmFkdmljZSIsCisJCQkJCQkJICAgImFk dmljZSB0byBhcHBseSBkdXJpbmcgcXVlcnkgcGxhbm5pbmciLAorCQkJCQkJCSAgIE5VTEwsCisJ CQkJCQkJICAgJnBnX3BsYW5fYWR2aWNlX2FkdmljZSwKKwkJCQkJCQkgICBOVUxMLAorCQkJCQkJ CSAgIFBHQ19VU0VSU0VULAorCQkJCQkJCSAgIDAsCisJCQkJCQkJICAgcGdfcGxhbl9hZHZpY2Vf YWR2aWNlX2NoZWNrX2hvb2ssCisJCQkJCQkJICAgTlVMTCwKKwkJCQkJCQkgICBOVUxMKTsKKwor CURlZmluZUN1c3RvbUJvb2xWYXJpYWJsZSgicGdfcGxhbl9hZHZpY2UuYWx3YXlzX2V4cGxhaW5f c3VwcGxpZWRfYWR2aWNlIiwKKwkJCQkJCQkgIkVYUExBSU4gb3V0cHV0IGluY2x1ZGVzIHN1cHBs aWVkIGFkdmljZSBldmVuIHdpdGhvdXQgRVhQTEFJTiAoUExBTl9BRFZJQ0UpIiwKKwkJCQkJCQkg TlVMTCwKKwkJCQkJCQkgJnBnX3BsYW5fYWR2aWNlX2Fsd2F5c19leHBsYWluX3N1cHBsaWVkX2Fk dmljZSwKKwkJCQkJCQkgdHJ1ZSwKKwkJCQkJCQkgUEdDX1VTRVJTRVQsCisJCQkJCQkJIDAsCisJ CQkJCQkJIE5VTEwsCisJCQkJCQkJIE5VTEwsCisJCQkJCQkJIE5VTEwpOworCisJRGVmaW5lQ3Vz dG9tSW50VmFyaWFibGUoInBnX3BsYW5fYWR2aWNlLmxvY2FsX2NvbGxlY3Rpb25fbGltaXQiLAor CQkJCQkJCSIjIG9mIGFkdmljZSBlbnRyaWVzIHRvIHJldGFpbiBpbiBwZXItYmFja2VuZCBtZW1v cnkiLAorCQkJCQkJCU5VTEwsCisJCQkJCQkJJnBnX3BsYW5fYWR2aWNlX2xvY2FsX2NvbGxlY3Rp b25fbGltaXQsCisJCQkJCQkJMCwKKwkJCQkJCQkwLCBJTlRfTUFYLAorCQkJCQkJCVBHQ19VU0VS U0VULAorCQkJCQkJCTAsCisJCQkJCQkJTlVMTCwKKwkJCQkJCQlOVUxMLAorCQkJCQkJCU5VTEwp OworCisJRGVmaW5lQ3VzdG9tSW50VmFyaWFibGUoInBnX3BsYW5fYWR2aWNlLnNoYXJlZF9jb2xs ZWN0aW9uX2xpbWl0IiwKKwkJCQkJCQkiIyBvZiBhZHZpY2UgZW50cmllcyB0byByZXRhaW4gaW4g c2hhcmVkIG1lbW9yeSIsCisJCQkJCQkJTlVMTCwKKwkJCQkJCQkmcGdfcGxhbl9hZHZpY2Vfc2hh cmVkX2NvbGxlY3Rpb25fbGltaXQsCisJCQkJCQkJMCwKKwkJCQkJCQkwLCBJTlRfTUFYLAorCQkJ CQkJCVBHQ19TVVNFVCwKKwkJCQkJCQkwLAorCQkJCQkJCU5VTEwsCisJCQkJCQkJTlVMTCwKKwkJ CQkJCQlOVUxMKTsKKworCURlZmluZUN1c3RvbUJvb2xWYXJpYWJsZSgicGdfcGxhbl9hZHZpY2Uu dHJhY2VfbWFzayIsCisJCQkJCQkJICJFbWl0IGRlYnVnZ2luZyBtZXNzYWdlcyBzaG93aW5nIHRo ZSBjb21wdXRlZCBzdHJhdGVneSBtYXNrIGZvciBlYWNoIHJlbGF0aW9uIiwKKwkJCQkJCQkgTlVM TCwKKwkJCQkJCQkgJnBnX3BsYW5fYWR2aWNlX3RyYWNlX21hc2ssCisJCQkJCQkJIGZhbHNlLAor CQkJCQkJCSBQR0NfVVNFUlNFVCwKKwkJCQkJCQkgMCwKKwkJCQkJCQkgTlVMTCwKKwkJCQkJCQkg TlVMTCwKKwkJCQkJCQkgTlVMTCk7CisKKwlNYXJrR1VDUHJlZml4UmVzZXJ2ZWQoInBnX3BsYW5f YWR2aWNlIik7CisKKwkvKiBHZXQgYW4gSUQgdGhhdCB3ZSBjYW4gdXNlIHRvIGNhY2hlIGRhdGEg aW4gYW4gRXhwbGFpblN0YXRlLiAqLworCWVzX2V4dGVuc2lvbl9pZCA9IEdldEV4cGxhaW5FeHRl bnNpb25JZCgicGdfcGxhbl9hZHZpY2UiKTsKKworCS8qIFJlZ2lzdGVyIHRoZSBuZXcgRVhQTEFJ TiBvcHRpb25zIGltcGxlbWVudGVkIGJ5IHRoaXMgbW9kdWxlLiAqLworCVJlZ2lzdGVyRXh0ZW5z aW9uRXhwbGFpbk9wdGlvbigicGxhbl9hZHZpY2UiLAorCQkJCQkJCQkgICBwZ19wbGFuX2Fkdmlj ZV9leHBsYWluX29wdGlvbl9oYW5kbGVyKTsKKworCS8qIEluc3RhbGwgaG9va3MgKi8KKwlwZ3Bh X3BsYW5uZXJfaW5zdGFsbF9ob29rcygpOworCXByZXZfZXhwbGFpbl9wZXJfcGxhbiA9IGV4cGxh aW5fcGVyX3BsYW5faG9vazsKKwlleHBsYWluX3Blcl9wbGFuX2hvb2sgPSBwZ19wbGFuX2Fkdmlj ZV9leHBsYWluX3Blcl9wbGFuX2hvb2s7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIHNoYXJlZCBz dGF0ZSB3aGVuIGZpcnN0IGNyZWF0ZWQuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX2luaXRfc2hh cmVkX3N0YXRlKHZvaWQgKnB0ciwgdm9pZCAqYXJnKQoreworCXBncGFfc2hhcmVkX3N0YXRlICpz dGF0ZSA9IChwZ3BhX3NoYXJlZF9zdGF0ZSAqKSBwdHI7CisKKwlMV0xvY2tJbml0aWFsaXplKCZz dGF0ZS0+bG9jaywgTFdMb2NrTmV3VHJhbmNoZUlkKCJwZ19wbGFuX2FkdmljZV9sb2NrIikpOwor CXN0YXRlLT5kc2FfdHJhbmNoZSA9IExXTG9ja05ld1RyYW5jaGVJZCgicGdfcGxhbl9hZHZpY2Vf ZHNhIik7CisJc3RhdGUtPmFyZWEgPSBEU0FfSEFORExFX0lOVkFMSUQ7CisJc3RhdGUtPnNoYXJl ZF9jb2xsZWN0b3IgPSBJbnZhbGlkRHNhUG9pbnRlcjsKK30KKworLyoKKyAqIFJldHVybiBhIHBv aW50ZXIgdG8gYSBtZW1vcnkgY29udGV4dCB3aGVyZSBsb25nLWxpdmVkIGRhdGEgbWFuYWdlZCBi eSB0aGlzCisgKiBtb2R1bGUgY2FuIGJlIHN0b3JlZC4KKyAqLworTWVtb3J5Q29udGV4dAorcGdf cGxhbl9hZHZpY2VfZ2V0X21jeHQodm9pZCkKK3sKKwlpZiAocGdwYV9tZW1vcnlfY29udGV4dCA9 PSBOVUxMKQorCQlwZ3BhX21lbW9yeV9jb250ZXh0ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKFRv cE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCQkJCQkJInBnX3BsYW5fYWR2aWNlIiwKKwkJCQkJCQkJ CQkJCQlBTExPQ1NFVF9ERUZBVUxUX1NJWkVTKTsKKworCXJldHVybiBwZ3BhX21lbW9yeV9jb250 ZXh0OworfQorCisvKgorICogR2V0IGEgcG9pbnRlciB0byBvdXIgc2hhcmVkIHN0YXRlLgorICoK KyAqIElmIG5vIHNoYXJlZCBzdGF0ZSBleGlzdHMsIGNyZWF0ZSBhbmQgaW5pdGlhbGl6ZSBpdC4g SWYgaXQgZG9lcyBleGlzdCBidXQKKyAqIHRoaXMgYmFja2VuZCBoYXMgbm90IHlldCBhY2Nlc3Nl ZCBpdCwgYXR0YWNoIHRvIGl0LiBPdGhlcndpc2UsIGp1c3QgcmV0dXJuCisgKiBvdXIgY2FjaGVk IHBvaW50ZXIuCisgKgorICogQWxvbmcgdGhlIHdheSwgbWFrZSBzdXJlIHRoZSByZWxldmFudCBM V0xvY2sgdHJhbmNoZXMgYXJlIHJlZ2lzdGVyZWQuCisgKi8KK3BncGFfc2hhcmVkX3N0YXRlICoK K3BnX3BsYW5fYWR2aWNlX2F0dGFjaCh2b2lkKQoreworCWlmIChwZ3BhX3N0YXRlID09IE5VTEwp CisJeworCQlib29sCQlmb3VuZDsKKworCQlwZ3BhX3N0YXRlID0KKwkJCUdldE5hbWVkRFNNU2Vn bWVudCgicGdfcGxhbl9hZHZpY2UiLCBzaXplb2YocGdwYV9zaGFyZWRfc3RhdGUpLAorCQkJCQkJ CSAgIHBncGFfaW5pdF9zaGFyZWRfc3RhdGUsICZmb3VuZCwgTlVMTCk7CisJfQorCisJcmV0dXJu IHBncGFfc3RhdGU7Cit9CisKKy8qCisgKiBSZXR1cm4gYSBwb2ludGVyIHRvIHBnX3BsYW5fYWR2 aWNlJ3MgRFNBIGFyZWEsIGNyZWF0aW5nIGl0IGlmIG5lZWRlZC4KKyAqLworZHNhX2FyZWEgKgor cGdfcGxhbl9hZHZpY2VfZHNhX2FyZWEodm9pZCkKK3sKKwlpZiAocGdwYV9kc2FfYXJlYSA9PSBO VUxMKQorCXsKKwkJcGdwYV9zaGFyZWRfc3RhdGUgKnN0YXRlID0gcGdfcGxhbl9hZHZpY2VfYXR0 YWNoKCk7CisJCWRzYV9oYW5kbGUJYXJlYV9oYW5kbGU7CisJCU1lbW9yeUNvbnRleHQgb2xkY29u dGV4dDsKKworCQlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHBnX3BsYW5fYWR2 aWNlX2dldF9tY3h0KCkpOworCisJCUxXTG9ja0FjcXVpcmUoJnN0YXRlLT5sb2NrLCBMV19FWENM VVNJVkUpOworCQlhcmVhX2hhbmRsZSA9IHN0YXRlLT5hcmVhOworCQlpZiAoYXJlYV9oYW5kbGUg PT0gRFNBX0hBTkRMRV9JTlZBTElEKQorCQl7CisJCQlwZ3BhX2RzYV9hcmVhID0gZHNhX2NyZWF0 ZShzdGF0ZS0+ZHNhX3RyYW5jaGUpOworCQkJZHNhX3BpbihwZ3BhX2RzYV9hcmVhKTsKKwkJCXN0 YXRlLT5hcmVhID0gZHNhX2dldF9oYW5kbGUocGdwYV9kc2FfYXJlYSk7CisJCQlMV0xvY2tSZWxl YXNlKCZzdGF0ZS0+bG9jayk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlMV0xvY2tSZWxlYXNlKCZz dGF0ZS0+bG9jayk7CisJCQlwZ3BhX2RzYV9hcmVhID0gZHNhX2F0dGFjaChhcmVhX2hhbmRsZSk7 CisJCX0KKworCQlkc2FfcGluX21hcHBpbmcocGdwYV9kc2FfYXJlYSk7CisKKwkJTWVtb3J5Q29u dGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCX0KKworCXJldHVybiBwZ3BhX2RzYV9hcmVhOwor fQorCisvKgorICogV2FzIHRoZSBQTEFOX0FEVklDRSBvcHRpb24gc3BlY2lmaWVkIGFuZCBub3Qg c2V0IHRvIGZhbHNlPworICovCitib29sCitwZ19wbGFuX2FkdmljZV9zaG91bGRfZXhwbGFpbihF eHBsYWluU3RhdGUgKmVzKQoreworCWJvb2wJICAgKnBsYW5fYWR2aWNlID0gTlVMTDsKKworCWlm IChlcyAhPSBOVUxMKQorCQlwbGFuX2FkdmljZSA9IEdldEV4cGxhaW5FeHRlbnNpb25TdGF0ZShl cywgZXNfZXh0ZW5zaW9uX2lkKTsKKwlyZXR1cm4gcGxhbl9hZHZpY2UgIT0gTlVMTCAmJiAqcGxh bl9hZHZpY2U7Cit9CisKKy8qCisgKiBIYW5kbGVyIGZvciBFWFBMQUlOIChQTEFOX0FEVklDRSku CisgKi8KK3N0YXRpYyB2b2lkCitwZ19wbGFuX2FkdmljZV9leHBsYWluX29wdGlvbl9oYW5kbGVy KEV4cGxhaW5TdGF0ZSAqZXMsIERlZkVsZW0gKm9wdCwKKwkJCQkJCQkJCSAgUGFyc2VTdGF0ZSAq cHN0YXRlKQoreworCWJvb2wJICAgKnBsYW5fYWR2aWNlOworCisJcGxhbl9hZHZpY2UgPSBHZXRF eHBsYWluRXh0ZW5zaW9uU3RhdGUoZXMsIGVzX2V4dGVuc2lvbl9pZCk7CisKKwlpZiAocGxhbl9h ZHZpY2UgPT0gTlVMTCkKKwl7CisJCXBsYW5fYWR2aWNlID0gcGFsbG9jMF9vYmplY3QoYm9vbCk7 CisJCVNldEV4cGxhaW5FeHRlbnNpb25TdGF0ZShlcywgZXNfZXh0ZW5zaW9uX2lkLCBwbGFuX2Fk dmljZSk7CisJfQorCisJKnBsYW5fYWR2aWNlID0gZGVmR2V0Qm9vbGVhbihvcHQpOworfQorCisv KgorICogRGlzcGxheSBhIHN0cmluZyB0aGF0IGlzIGxpa2VseSB0byBjb25zaXN0IG9mIG11bHRp cGxlIGxpbmVzIGluIEVYUExBSU4KKyAqIG91dHB1dC4KKyAqLworc3RhdGljIHZvaWQKK3BnX3Bs YW5fYWR2aWNlX2V4cGxhaW5fdGV4dF9tdWx0aWxpbmUoRXhwbGFpblN0YXRlICplcywgY2hhciAq cWxhYmVsLAorCQkJCQkJCQkJICBjaGFyICp2YWx1ZSkKK3sKKwljaGFyCSAgICpzOworCisJLyog Rm9yIG5vbi10ZXh0IGZvcm1hdHMsIGl0J3MgYmVzdCBub3QgdG8gYWRkIGFueSBzcGVjaWFsIGhh bmRsaW5nLiAqLworCWlmIChlcy0+Zm9ybWF0ICE9IEVYUExBSU5fRk9STUFUX1RFWFQpCisJewor CQlFeHBsYWluUHJvcGVydHlUZXh0KHFsYWJlbCwgdmFsdWUsIGVzKTsKKwkJcmV0dXJuOworCX0K KworCS8qIEluIHRleHQgZm9ybWF0LCBpZiB0aGVyZSBpcyBubyBkYXRhLCBkaXNwbGF5IG5vdGhp bmcuICovCisJaWYgKCpxbGFiZWwgPT0gJ1wwJykKKwkJcmV0dXJuOworCisJLyoKKwkgKiBJdCBs b29rcyBuaWNlc3QgdG8gaW5kZW50IGVhY2ggbGluZSBvZiB0aGUgYWR2aWNlIHNlcGFyYXRlbHks IGJlZ2lubmluZworCSAqIG9uIHRoZSBsaW5lIGJlbG93IHRoZSBsYWJlbC4KKwkgKi8KKwlFeHBs YWluSW5kZW50VGV4dChlcyk7CisJYXBwZW5kU3RyaW5nSW5mbyhlcy0+c3RyLCAiJXM6XG4iLCBx bGFiZWwpOworCWVzLT5pbmRlbnQrKzsKKwl3aGlsZSAoKHMgPSBzdHJjaHIodmFsdWUsICdcbicp KSAhPSBOVUxMKQorCXsKKwkJRXhwbGFpbkluZGVudFRleHQoZXMpOworCQlhcHBlbmRCaW5hcnlT dHJpbmdJbmZvKGVzLT5zdHIsIHZhbHVlLCAocyAtIHZhbHVlKSArIDEpOworCQl2YWx1ZSA9IHMg KyAxOworCX0KKworCS8qIERvbid0IGludGVycHJldCBhIHRlcm1pbmFsIG5ld2xpbmUgYXMgYSBy ZXF1ZXN0IGZvciBhbiBlbXB0eSBsaW5lLiAqLworCWlmICgqdmFsdWUgIT0gJ1wwJykKKwl7CisJ CUV4cGxhaW5JbmRlbnRUZXh0KGVzKTsKKwkJYXBwZW5kU3RyaW5nSW5mbyhlcy0+c3RyLCAiJXNc biIsIHZhbHVlKTsKKwl9CisKKwllcy0+aW5kZW50LS07Cit9CisKKy8qCisgKiBBZGQgYWR2aWNl IGZlZWRiYWNrIHRvIHRoZSBFWFBMQUlOIG91dHB1dC4KKyAqLworc3RhdGljIHZvaWQKK3BnX3Bs YW5fYWR2aWNlX2V4cGxhaW5fZmVlZGJhY2soRXhwbGFpblN0YXRlICplcywgTGlzdCAqZmVlZGJh Y2spCit7CisJU3RyaW5nSW5mb0RhdGEgYnVmOworCisJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisJ Zm9yZWFjaF9ub2RlKERlZkVsZW0sIGl0ZW0sIGZlZWRiYWNrKQorCXsKKwkJaW50CQkJZmxhZ3Mg PSBkZWZHZXRJbnQzMihpdGVtKTsKKworCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICIlcyAvKiAi LCBpdGVtLT5kZWZuYW1lKTsKKwkJaWYgKChmbGFncyAmIFBHUEFfVEVfTUFUQ0hfRlVMTCkgIT0g MCkKKwkJeworCQkJQXNzZXJ0KChmbGFncyAmIFBHUEFfVEVfTUFUQ0hfUEFSVElBTCkgIT0gMCk7 CisJCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICJtYXRjaGVkIik7CisJCX0KKwkJZWxzZSBpZiAo KGZsYWdzICYgUEdQQV9URV9NQVRDSF9QQVJUSUFMKSAhPSAwKQorCQkJYXBwZW5kU3RyaW5nSW5m bygmYnVmLCAicGFydGlhbGx5IG1hdGNoZWQiKTsKKwkJZWxzZQorCQkJYXBwZW5kU3RyaW5nSW5m bygmYnVmLCAibm90IG1hdGNoZWQiKTsKKwkJaWYgKChmbGFncyAmIFBHUEFfVEVfSU5BUFBMSUNB QkxFKSAhPSAwKQorCQkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiLCBpbmFwcGxpY2FibGUiKTsK KwkJaWYgKChmbGFncyAmIFBHUEFfVEVfQ09ORkxJQ1RJTkcpICE9IDApCisJCQlhcHBlbmRTdHJp bmdJbmZvKCZidWYsICIsIGNvbmZsaWN0aW5nIik7CisJCWlmICgoZmxhZ3MgJiBQR1BBX1RFX0ZB SUxFRCkgIT0gMCkKKwkJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIiwgZmFpbGVkIik7CisJCWFw cGVuZFN0cmluZ0luZm8oJmJ1ZiwgIiAqL1xuIik7CisJfQorCisJcGdfcGxhbl9hZHZpY2VfZXhw bGFpbl90ZXh0X211bHRpbGluZShlcywgIlN1cHBsaWVkIFBsYW4gQWR2aWNlIiwKKwkJCQkJCQkJ CQkgIGJ1Zi5kYXRhKTsKK30KKworLyoKKyAqIEFkZCByZWxldmFudCBkZXRhaWxzLCBpZiBhbnks IHRvIHRoZSBFWFBMQUlOIG91dHB1dCBmb3IgYSBzaW5nbGUgcGxhbi4KKyAqLworc3RhdGljIHZv aWQKK3BnX3BsYW5fYWR2aWNlX2V4cGxhaW5fcGVyX3BsYW5faG9vayhQbGFubmVkU3RtdCAqcGxh bm5lZHN0bXQsCisJCQkJCQkJCQkgSW50b0NsYXVzZSAqaW50bywKKwkJCQkJCQkJCSBFeHBsYWlu U3RhdGUgKmVzLAorCQkJCQkJCQkJIGNvbnN0IGNoYXIgKnF1ZXJ5U3RyaW5nLAorCQkJCQkJCQkJ IFBhcmFtTGlzdEluZm8gcGFyYW1zLAorCQkJCQkJCQkJIFF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5 RW52KQoreworCWJvb2wJCXNob3VsZF9leHBsYWluOworCURlZkVsZW0gICAgKnBncGFfaXRlbTsK KwlMaXN0CSAgICpwZ3BhX2xpc3Q7CisKKwlpZiAocHJldl9leHBsYWluX3Blcl9wbGFuKQorCQlw cmV2X2V4cGxhaW5fcGVyX3BsYW4ocGxhbm5lZHN0bXQsIGludG8sIGVzLCBxdWVyeVN0cmluZywg cGFyYW1zLAorCQkJCQkJCSAgcXVlcnlFbnYpOworCisJLyogU2hvdWxkIGFuIGFkdmljZSBzdHJp bmcgYmUgcGFydCBvZiB0aGUgRVhQTEFJTiBvdXRwdXQ/ICovCisJc2hvdWxkX2V4cGxhaW4gPSBw Z19wbGFuX2FkdmljZV9zaG91bGRfZXhwbGFpbihlcyk7CisKKwkvKiBGaW5kIGFueSBkYXRhIHBn cGFfcGxhbm5lcl9zaHV0ZG93biBzdGFzaGVkIGluIHRoZSBQbGFubmVkU3RtdC4gKi8KKwlwZ3Bh X2l0ZW0gPSBmaW5kX2RlZmVsZW1fYnlfZGVmbmFtZShwbGFubmVkc3RtdC0+ZXh0ZW5zaW9uX3N0 YXRlLAorCQkJCQkJCQkJCSJwZ19wbGFuX2FkdmljZSIpOworCXBncGFfbGlzdCA9IHBncGFfaXRl bSA9PSBOVUxMID8gTlVMTCA6IChMaXN0ICopIHBncGFfaXRlbS0+YXJnOworCisJLyoKKwkgKiBC eSBkZWZhdWx0LCBpZiB0aGVyZSBpcyBhIHJlY29yZCBvZiBhdHRlbXB0aW5nIHRvIGFwcGx5IGFk dmljZSBkdXJpbmcKKwkgKiBxdWVyeSBwbGFubmluZywgd2UgYWx3YXlzIG91dHB1dCB0aGF0IGlu Zm9ybWF0aW9uLCBidXQgdGhlIHVzZXIgY2FuIHNldAorCSAqIHBnX3BsYW5fYWR2aWNlLmFsd2F5 c19leHBsYWluX3N1cHBsaWVkX2FkdmljZSA9IGZhbHNlIHRvIHN1cHByZXNzIHRoYXQKKwkgKiBi ZWhhdmlvci4gSWYgdGhleSBkbywgd2UnbGwgb25seSBkaXNwbGF5IGl0IHdoZW4gdGhlIFBMQU5f QURWSUNFIG9wdGlvbgorCSAqIHdhcyBzcGVjaWZpZWQgYW5kIG5vdCBzZXQgdG8gZmFsc2UuCisJ ICoKKwkgKiBOQjogSWYgd2UncmUgZXhwbGFpbmluZyBhIHF1ZXJ5IHBsYW5uZWQgYmVmb3JlaGFu ZCAtLSBpLmUuIGEgcHJlcGFyZWQKKwkgKiBzdGF0ZW1lbnQgLS0gdGhlIGFwcGxpY2F0aW9uIG9m IHF1ZXJ5IGFkdmljZSBtYXkgbm90IGhhdmUgYmVlbgorCSAqIHJlY29yZGVkLCBhbmQgdGhlcmVm b3JlIHRoaXMgd29uJ3QgYmUgYWJsZSB0byBzaG93IGFueXRoaW5nLgorCSAqLworCWlmIChwZ3Bh X2xpc3QgIT0gTlVMTCAmJiAocGdfcGxhbl9hZHZpY2VfYWx3YXlzX2V4cGxhaW5fc3VwcGxpZWRf YWR2aWNlIHx8CisJCQkJCQkJICBzaG91bGRfZXhwbGFpbikpCisJeworCQlEZWZFbGVtICAgICpm ZWVkYmFjazsKKworCQlmZWVkYmFjayA9IGZpbmRfZGVmZWxlbV9ieV9kZWZuYW1lKHBncGFfbGlz dCwgImZlZWRiYWNrIik7CisJCWlmIChmZWVkYmFjayAhPSBOVUxMKQorCQkJcGdfcGxhbl9hZHZp Y2VfZXhwbGFpbl9mZWVkYmFjayhlcywgKExpc3QgKikgZmVlZGJhY2stPmFyZyk7CisJfQorCisJ LyoKKwkgKiBJZiB0aGUgUExBTl9BRFZJQ0Ugb3B0aW9uIHdhcyBzcGVjaWZpZWQgLS0gYW5kIG5v dCBzZW50IHRvIEZBTFNFIC0tCisJICogc2hvdyBnZW5lcmF0ZWQgYWR2aWNlLgorCSAqLworCWlm IChzaG91bGRfZXhwbGFpbikKKwl7CisJCURlZkVsZW0gICAgKmFkdmljZV9zdHJpbmdfaXRlbTsK KwkJY2hhcgkgICAqYWR2aWNlX3N0cmluZyA9IE5VTEw7CisKKwkJYWR2aWNlX3N0cmluZ19pdGVt ID0KKwkJCWZpbmRfZGVmZWxlbV9ieV9kZWZuYW1lKHBncGFfbGlzdCwgImFkdmljZV9zdHJpbmci KTsKKwkJaWYgKGFkdmljZV9zdHJpbmdfaXRlbSAhPSBOVUxMKQorCQl7CisJCQkvKiBBZHZpY2Ug aGFzIGFscmVhZHkgYmVlbiBnZW5lcmF0ZWQ7IHdlIGNhbiByZXVzZSBpdC4gKi8KKwkJCWFkdmlj ZV9zdHJpbmcgPSBzdHJWYWwoYWR2aWNlX3N0cmluZ19pdGVtLT5hcmcpOworCQl9CisJCWlmIChh ZHZpY2Vfc3RyaW5nICE9IE5VTEwgJiYgYWR2aWNlX3N0cmluZ1swXSAhPSAnXDAnKQorCQkJcGdf cGxhbl9hZHZpY2VfZXhwbGFpbl90ZXh0X211bHRpbGluZShlcywgIkdlbmVyYXRlZCBQbGFuIEFk dmljZSIsCisJCQkJCQkJCQkJCQkgIGFkdmljZV9zdHJpbmcpOworCX0KK30KKworLyoKKyAqIENo ZWNrIGhvb2sgZm9yIHBnX3BsYW5fYWR2aWNlLmFkdmljZQorICovCitzdGF0aWMgYm9vbAorcGdf cGxhbl9hZHZpY2VfYWR2aWNlX2NoZWNrX2hvb2soY2hhciAqKm5ld3ZhbCwgdm9pZCAqKmV4dHJh LCBHdWNTb3VyY2Ugc291cmNlKQoreworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKwlNZW1v cnlDb250ZXh0IHRtcGNvbnRleHQ7CisJY2hhcgkgICAqZXJyb3I7CisKKwlpZiAoKm5ld3ZhbCA9 PSBOVUxMKQorCQlyZXR1cm4gdHJ1ZTsKKworCXRtcGNvbnRleHQgPSBBbGxvY1NldENvbnRleHRD cmVhdGUoQ3VycmVudE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCQkgICAicGdfcGxhbl9hZHZpY2Uu YWR2aWNlIiwKKwkJCQkJCQkJCSAgIEFMTE9DU0VUX0RFRkFVTFRfU0laRVMpOworCW9sZGNvbnRl eHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8odG1wY29udGV4dCk7CisKKwkvKgorCSAqIEl0IHdv dWxkIGJlIG5pY2UgdG8gc2F2ZSB0aGUgcGFyc2UgdHJlZSB0aGF0IHdlIGNvbnN0cnVjdCBoZXJl IGZvcgorCSAqIGV2ZW50dWFsIHVzZSB3aGVuIHBsYW5uaW5nIHdpdGggdGhpcyBhZHZpY2UsIGJ1 dCAqZXh0cmEgY2FuIG9ubHkgcG9pbnQKKwkgKiB0byBhIHNpbmdsZSBndWNfbWFsbG9jJ2QgY2h1 bmssIGFuZCBvdXIgcGFyc2UgdHJlZSBpbnZvbHZlcyBhbgorCSAqIGFyYml0cmFyeSBudW1iZXIg b2YgbWVtb3J5IGFsbG9jYXRpb25zLgorCSAqLworCSh2b2lkKSBwZ3BhX3BhcnNlKCpuZXd2YWws ICZlcnJvcik7CisKKwlpZiAoZXJyb3IgIT0gTlVMTCkKKwl7CisJCUdVQ19jaGVja19lcnJkZXRh aWwoIkNvdWxkIG5vdCBwYXJzZSBhZHZpY2U6ICVzIiwgZXJyb3IpOworCQlyZXR1cm4gZmFsc2U7 CisJfQorCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCU1lbW9yeUNvbnRl eHREZWxldGUodG1wY29udGV4dCk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIFNlYXJj aCBhIGxpc3Qgb2YgRGVmRWxlbSBvYmplY3RzIGZvciBhIGdpdmVuIGRlZm5hbWUuCisgKi8KK3N0 YXRpYyBEZWZFbGVtICoKK2ZpbmRfZGVmZWxlbV9ieV9kZWZuYW1lKExpc3QgKmRlZmxpc3QsIGNo YXIgKmRlZm5hbWUpCit7CisJZm9yZWFjaF9ub2RlKERlZkVsZW0sIGl0ZW0sIGRlZmxpc3QpCisJ eworCQlpZiAoc3RyY21wKGl0ZW0tPmRlZm5hbWUsIGRlZm5hbWUpID09IDApCisJCQlyZXR1cm4g aXRlbTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxh bl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuY29udHJvbCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv cGdfcGxhbl9hZHZpY2UuY29udHJvbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMC4uYWE2ZmRjOWU3YjIKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2 aWNlL3BnX3BsYW5fYWR2aWNlLmNvbnRyb2wKQEAgLTAsMCArMSw1IEBACisjIHBnX3BsYW5fYWR2 aWNlIGV4dGVuc2lvbgorY29tbWVudCA9ICdoZWxwIHRoZSBwbGFubmVyIGdldCB0aGUgcmlnaHQg cGxhbicKK2RlZmF1bHRfdmVyc2lvbiA9ICcxLjAnCittb2R1bGVfcGF0aG5hbWUgPSAnJGxpYmRp ci9wZ19wbGFuX2FkdmljZScKK3JlbG9jYXRhYmxlID0gdHJ1ZQpkaWZmIC0tZ2l0IGEvY29udHJp Yi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5oIGIvY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9wZ19wbGFuX2FkdmljZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw Li41YzM1M2YxYTQ4NgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv cGdfcGxhbl9hZHZpY2UuaApAQCAtMCwwICsxLDQwIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq CisgKiBwZ19wbGFuX2FkdmljZS5oCisgKgkgIG1haW4gaGVhZGVyIGZpbGUgZm9yIHBnX3BsYW5f YWR2aWNlIGNvbnRyaWIgbW9kdWxlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjQsIFBv c3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3Bs YW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwor I2lmbmRlZiBQR19QTEFOX0FEVklDRV9ICisjZGVmaW5lIFBHX1BMQU5fQURWSUNFX0gKKworI2lu Y2x1ZGUgImNvbW1hbmRzL2V4cGxhaW5fc3RhdGUuaCIKKyNpbmNsdWRlICJub2Rlcy9wbGFubm9k ZXMuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2x3bG9jay5oIgorI2luY2x1ZGUgInV0aWxzL2RzYS5o IgorCit0eXBlZGVmIHN0cnVjdCBwZ3BhX3NoYXJlZF9zdGF0ZQoreworCUxXTG9jawkJbG9jazsK KwlpbnQJCQlkc2FfdHJhbmNoZTsKKwlkc2FfaGFuZGxlCWFyZWE7CisJZHNhX3BvaW50ZXIgc2hh cmVkX2NvbGxlY3RvcjsKK30gcGdwYV9zaGFyZWRfc3RhdGU7CisKKy8qIEdVQyB2YXJpYWJsZXMg Ki8KK2V4dGVybiBjaGFyICpwZ19wbGFuX2FkdmljZV9hZHZpY2U7CitleHRlcm4gaW50CXBnX3Bs YW5fYWR2aWNlX2xvY2FsX2NvbGxlY3Rpb25fbGltaXQ7CitleHRlcm4gaW50CXBnX3BsYW5fYWR2 aWNlX3NoYXJlZF9jb2xsZWN0aW9uX2xpbWl0OworZXh0ZXJuIGJvb2wgcGdfcGxhbl9hZHZpY2Vf dHJhY2VfbWFzazsKKworLyogRnVuY3Rpb24gcHJvdG90eXBlcyAqLworZXh0ZXJuIE1lbW9yeUNv bnRleHQgcGdfcGxhbl9hZHZpY2VfZ2V0X21jeHQodm9pZCk7CitleHRlcm4gcGdwYV9zaGFyZWRf c3RhdGUgKnBnX3BsYW5fYWR2aWNlX2F0dGFjaCh2b2lkKTsKK2V4dGVybiBkc2FfYXJlYSAqcGdf cGxhbl9hZHZpY2VfZHNhX2FyZWEodm9pZCk7CitleHRlcm4gYm9vbCBwZ19wbGFuX2FkdmljZV9z aG91bGRfZXhwbGFpbihFeHBsYWluU3RhdGUgKmVzKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9j b250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfYXN0LmMgYi9jb250cmliL3BnX3BsYW5fYWR2aWNl L3BncGFfYXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjBkNjAx MGM0N2U3Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2Fz dC5jCkBAIC0wLDAgKzEsMzk0IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3BhX2Fz dC5jCisgKgkgIGFkZGl0aW9uYWwgc3VwcG9ydGluZyBjb2RlIHJlbGF0ZWQgdG8gcGxhbiBhZHZp Y2UgcGFyc2luZworICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI0LCBQb3N0Z3JlU1FMIEds b2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9w Z3BhX2FzdC5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgInBvc3Rn cmVzLmgiCisKKyNpbmNsdWRlICJwZ3BhX2FzdC5oIgorCisjaW5jbHVkZSAiZnVuY2FwaS5oIgor I2luY2x1ZGUgInV0aWxzL2FycmF5LmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKwor c3RhdGljIGJvb2wgcGdwYV9pZGVudGlmaWVyc19jb3Zlcl90YXJnZXQoaW50IG5yaWRzLCBwZ3Bh X2lkZW50aWZpZXIgKnJpZHMsCisJCQkJCQkJCQkJICBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdl dCwKKwkJCQkJCQkJCQkgIGJvb2wgKnJpZHNfdXNlZCk7CisKKy8qCisgKiBHZXQgYSBDIHN0cmlu ZyB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBzcGVjaWZpZWQgYWR2aWNlIHRhZy4KKyAqLworY2hh ciAqCitwZ3BhX2NzdHJpbmdfYWR2aWNlX3RhZyhwZ3BhX2FkdmljZV90YWdfdHlwZSBhZHZpY2Vf dGFnKQoreworCXN3aXRjaCAoYWR2aWNlX3RhZykKKwl7CisJCWNhc2UgUEdQQV9UQUdfQklUTUFQ X0hFQVBfU0NBTjoKKwkJCXJldHVybiAiQklUTUFQX0hFQVBfU0NBTiI7CisJCWNhc2UgUEdQQV9U QUdfRk9SRUlHTl9KT0lOOgorCQkJcmV0dXJuICJGT1JFSUdOX0pPSU4iOworCQljYXNlIFBHUEFf VEFHX0dBVEhFUjoKKwkJCXJldHVybiAiR0FUSEVSIjsKKwkJY2FzZSBQR1BBX1RBR19HQVRIRVJf TUVSR0U6CisJCQlyZXR1cm4gIkdBVEhFUl9NRVJHRSI7CisJCWNhc2UgUEdQQV9UQUdfSEFTSF9K T0lOOgorCQkJcmV0dXJuICJIQVNIX0pPSU4iOworCQljYXNlIFBHUEFfVEFHX0lOREVYX09OTFlf U0NBTjoKKwkJCXJldHVybiAiSU5ERVhfT05MWV9TQ0FOIjsKKwkJY2FzZSBQR1BBX1RBR19JTkRF WF9TQ0FOOgorCQkJcmV0dXJuICJJTkRFWF9TQ0FOIjsKKwkJY2FzZSBQR1BBX1RBR19KT0lOX09S REVSOgorCQkJcmV0dXJuICJKT0lOX09SREVSIjsKKwkJY2FzZSBQR1BBX1RBR19NRVJHRV9KT0lO X01BVEVSSUFMSVpFOgorCQkJcmV0dXJuICJNRVJHRV9KT0lOX01BVEVSSUFMSVpFIjsKKwkJY2Fz ZSBQR1BBX1RBR19NRVJHRV9KT0lOX1BMQUlOOgorCQkJcmV0dXJuICJNRVJHRV9KT0lOX1BMQUlO IjsKKwkJY2FzZSBQR1BBX1RBR19ORVNURURfTE9PUF9NQVRFUklBTElaRToKKwkJCXJldHVybiAi TkVTVEVEX0xPT1BfTUFURVJJQUxJWkUiOworCQljYXNlIFBHUEFfVEFHX05FU1RFRF9MT09QX01F TU9JWkU6CisJCQlyZXR1cm4gIk5FU1RFRF9MT09QX01FTU9JWkUiOworCQljYXNlIFBHUEFfVEFH X05FU1RFRF9MT09QX1BMQUlOOgorCQkJcmV0dXJuICJORVNURURfTE9PUF9QTEFJTiI7CisJCWNh c2UgUEdQQV9UQUdfTk9fR0FUSEVSOgorCQkJcmV0dXJuICJOT19HQVRIRVIiOworCQljYXNlIFBH UEFfVEFHX1BBUlRJVElPTldJU0U6CisJCQlyZXR1cm4gIlBBUlRJVElPTldJU0UiOworCQljYXNl IFBHUEFfVEFHX1NFTUlKT0lOX05PTl9VTklRVUU6CisJCQlyZXR1cm4gIlNFTUlKT0lOX05PTl9V TklRVUUiOworCQljYXNlIFBHUEFfVEFHX1NFTUlKT0lOX1VOSVFVRToKKwkJCXJldHVybiAiU0VN SUpPSU5fVU5JUVVFIjsKKwkJY2FzZSBQR1BBX1RBR19TRVFfU0NBTjoKKwkJCXJldHVybiAiU0VR X1NDQU4iOworCQljYXNlIFBHUEFfVEFHX1RJRF9TQ0FOOgorCQkJcmV0dXJuICJUSURfU0NBTiI7 CisJfQorCisJcGdfdW5yZWFjaGFibGUoKTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIENv bnZlcnQgYW4gYWR2aWNlIHRhZywgZm9ybWF0dGVkIGFzIGEgc3RyaW5nIHRoYXQgaGFzIGFscmVh ZHkgYmVlbgorICogZG93bmNhc2VkIGFzIGFwcHJvcHJpYXRlLCB0byBhIHBncGFfYWR2aWNlX3Rh Z190eXBlLgorICoKKyAqIElmIHdlIHN1Y2NlZWQsIHNldCAqZmFpbCA9IGZhbHNlIGFuZCByZXR1 cm4gdGhlIHJlc3VsdDsgaWYgd2UgZmFpbCwKKyAqIHNldCAqZmFpbCA9IHRydWUgYW5kIHJldXJu IGFuIGFyYml0cmFyeSB2YWx1ZS4KKyAqLworcGdwYV9hZHZpY2VfdGFnX3R5cGUKK3BncGFfcGFy c2VfYWR2aWNlX3RhZyhjb25zdCBjaGFyICp0YWcsIGJvb2wgKmZhaWwpCit7CisJKmZhaWwgPSBm YWxzZTsKKworCXN3aXRjaCAodGFnWzBdKQorCXsKKwkJY2FzZSAnYic6CisJCQlpZiAoc3RyY21w KHRhZywgImJpdG1hcF9oZWFwX3NjYW4iKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19CSVRN QVBfSEVBUF9TQ0FOOworCQkJYnJlYWs7CisJCWNhc2UgJ2YnOgorCQkJaWYgKHN0cmNtcCh0YWcs ICJmb3JlaWduX2pvaW4iKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19GT1JFSUdOX0pPSU47 CisJCQlicmVhazsKKwkJY2FzZSAnZyc6CisJCQlpZiAoc3RyY21wKHRhZywgImdhdGhlciIpID09 IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX0dBVEhFUjsKKwkJCWlmIChzdHJjbXAodGFnLCAiZ2F0 aGVyX21lcmdlIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfR0FUSEVSX01FUkdFOworCQkJ YnJlYWs7CisJCWNhc2UgJ2gnOgorCQkJaWYgKHN0cmNtcCh0YWcsICJoYXNoX2pvaW4iKSA9PSAw KQorCQkJCXJldHVybiBQR1BBX1RBR19IQVNIX0pPSU47CisJCQlicmVhazsKKwkJY2FzZSAnaSc6 CisJCQlpZiAoc3RyY21wKHRhZywgImluZGV4X3NjYW4iKSA9PSAwKQorCQkJCXJldHVybiBQR1BB X1RBR19JTkRFWF9TQ0FOOworCQkJaWYgKHN0cmNtcCh0YWcsICJpbmRleF9vbmx5X3NjYW4iKSA9 PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19JTkRFWF9PTkxZX1NDQU47CisJCQlicmVhazsKKwkJ Y2FzZSAnaic6CisJCQlpZiAoc3RyY21wKHRhZywgImpvaW5fb3JkZXIiKSA9PSAwKQorCQkJCXJl dHVybiBQR1BBX1RBR19KT0lOX09SREVSOworCQkJYnJlYWs7CisJCWNhc2UgJ20nOgorCQkJaWYg KHN0cmNtcCh0YWcsICJtZXJnZV9qb2luX21hdGVyaWFsaXplIikgPT0gMCkKKwkJCQlyZXR1cm4g UEdQQV9UQUdfTUVSR0VfSk9JTl9NQVRFUklBTElaRTsKKwkJCWlmIChzdHJjbXAodGFnLCAibWVy Z2Vfam9pbl9wbGFpbiIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX01FUkdFX0pPSU5fUExB SU47CisJCQlicmVhazsKKwkJY2FzZSAnbic6CisJCQlpZiAoc3RyY21wKHRhZywgIm5lc3RlZF9s b29wX21hdGVyaWFsaXplIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfTkVTVEVEX0xPT1Bf TUFURVJJQUxJWkU7CisJCQlpZiAoc3RyY21wKHRhZywgIm5lc3RlZF9sb29wX21lbW9pemUiKSA9 PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19ORVNURURfTE9PUF9NRU1PSVpFOworCQkJaWYgKHN0 cmNtcCh0YWcsICJuZXN0ZWRfbG9vcF9wbGFpbiIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFH X05FU1RFRF9MT09QX1BMQUlOOworCQkJaWYgKHN0cmNtcCh0YWcsICJub19nYXRoZXIiKSA9PSAw KQorCQkJCXJldHVybiBQR1BBX1RBR19OT19HQVRIRVI7CisJCQlicmVhazsKKwkJY2FzZSAncCc6 CisJCQlpZiAoc3RyY21wKHRhZywgInBhcnRpdGlvbndpc2UiKSA9PSAwKQorCQkJCXJldHVybiBQ R1BBX1RBR19QQVJUSVRJT05XSVNFOworCQkJYnJlYWs7CisJCWNhc2UgJ3MnOgorCQkJaWYgKHN0 cmNtcCh0YWcsICJzZW1pam9pbl9ub25fdW5pcXVlIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9U QUdfU0VNSUpPSU5fTk9OX1VOSVFVRTsKKwkJCWlmIChzdHJjbXAodGFnLCAic2VtaWpvaW5fdW5p cXVlIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfU0VNSUpPSU5fVU5JUVVFOworCQkJaWYg KHN0cmNtcCh0YWcsICJzZXFfc2NhbiIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX1NFUV9T Q0FOOworCQkJYnJlYWs7CisJCWNhc2UgJ3QnOgorCQkJaWYgKHN0cmNtcCh0YWcsICJ0aWRfc2Nh biIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX1RJRF9TQ0FOOworCQkJYnJlYWs7CisJfQor CisJLyogZGlkbid0IHdvcmsgb3V0ICovCisJKmZhaWwgPSB0cnVlOworCisJLyogcmV0dXJuIGFu IGFyYml0cmFyeSB2YWx1ZSB0byB1bndpbmQgdGhlIGNhbGwgc3RhY2sgKi8KKwlyZXR1cm4gUEdQ QV9UQUdfU0VRX1NDQU47Cit9CisKKy8qCisgKiBGb3JtYXQgYSBwZ3BhX2FkdmljZV90YXJnZXQg YXMgYSBzdHJpbmcgYW5kIGFwcGVuZCByZXN1bHQgdG8gYSBTdHJpbmdJbmZvLgorICovCit2b2lk CitwZ3BhX2Zvcm1hdF9hZHZpY2VfdGFyZ2V0KFN0cmluZ0luZm8gc3RyLCBwZ3BhX2FkdmljZV90 YXJnZXQgKnRhcmdldCkKK3sKKwlpZiAodGFyZ2V0LT50dHlwZSAhPSBQR1BBX1RBUkdFVF9JREVO VElGSUVSKQorCXsKKwkJYm9vbAkJZmlyc3QgPSB0cnVlOworCQljaGFyCSAgICpkZWxpbXM7CisK KwkJaWYgKHRhcmdldC0+dHR5cGUgPT0gUEdQQV9UQVJHRVRfVU5PUkRFUkVEX0xJU1QpCisJCQlk ZWxpbXMgPSAie30iOworCQllbHNlCisJCQlkZWxpbXMgPSAiKCkiOworCisJCWFwcGVuZFN0cmlu Z0luZm9DaGFyKHN0ciwgZGVsaW1zWzBdKTsKKwkJZm9yZWFjaF9wdHIocGdwYV9hZHZpY2VfdGFy Z2V0LCBjaGlsZF90YXJnZXQsIHRhcmdldC0+Y2hpbGRyZW4pCisJCXsKKwkJCWlmIChmaXJzdCkK KwkJCQlmaXJzdCA9IGZhbHNlOworCQkJZWxzZQorCQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKHN0 ciwgJyAnKTsKKwkJCXBncGFfZm9ybWF0X2FkdmljZV90YXJnZXQoc3RyLCBjaGlsZF90YXJnZXQp OworCQl9CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKHN0ciwgZGVsaW1zWzFdKTsKKwl9CisJZWxz ZQorCXsKKwkJY29uc3QgY2hhciAqcnRfaWRlbnRpZmllcjsKKworCQlydF9pZGVudGlmaWVyID0g cGdwYV9pZGVudGlmaWVyX3N0cmluZygmdGFyZ2V0LT5yaWQpOworCQlhcHBlbmRTdHJpbmdJbmZv U3RyaW5nKHN0ciwgcnRfaWRlbnRpZmllcik7CisJfQorfQorCisvKgorICogRm9ybWF0IGEgcGdw YV9pbmRleF90YXJnZXQgYXMgYSBzdHJpbmcgYW5kIGFwcGVuZCByZXN1bHQgdG8gYSBTdHJpbmdJ bmZvLgorICovCit2b2lkCitwZ3BhX2Zvcm1hdF9pbmRleF90YXJnZXQoU3RyaW5nSW5mbyBzdHIs IHBncGFfaW5kZXhfdGFyZ2V0ICppdGFyZ2V0KQoreworCWlmIChpdGFyZ2V0LT5pdHlwZSAhPSBQ R1BBX0lOREVYX05BTUUpCisJeworCQlib29sCQlmaXJzdCA9IHRydWU7CisKKwkJaWYgKGl0YXJn ZXQtPml0eXBlID09IFBHUEFfSU5ERVhfQU5EKQorCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhz dHIsICImJigiKTsKKwkJZWxzZQorCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhzdHIsICJ8fCgi KTsKKworCQlmb3JlYWNoX3B0cihwZ3BhX2luZGV4X3RhcmdldCwgY2hpbGRfdGFyZ2V0LCBpdGFy Z2V0LT5jaGlsZHJlbikKKwkJeworCQkJaWYgKGZpcnN0KQorCQkJCWZpcnN0ID0gZmFsc2U7CisJ CQllbHNlCisJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoc3RyLCAnICcpOworCQkJcGdwYV9mb3Jt YXRfaW5kZXhfdGFyZ2V0KHN0ciwgY2hpbGRfdGFyZ2V0KTsKKwkJfQorCQlhcHBlbmRTdHJpbmdJ bmZvQ2hhcihzdHIsICcpJyk7CisJfQorCWVsc2UKKwl7CisJCWlmIChpdGFyZ2V0LT5pbmRuYW1l c3BhY2UgIT0gTlVMTCkKKwkJCWFwcGVuZFN0cmluZ0luZm8oc3RyLCAiJXMuIiwKKwkJCQkJCQkg cXVvdGVfaWRlbnRpZmllcihpdGFyZ2V0LT5pbmRuYW1lc3BhY2UpKTsKKwkJYXBwZW5kU3RyaW5n SW5mb1N0cmluZyhzdHIsIHF1b3RlX2lkZW50aWZpZXIoaXRhcmdldC0+aW5kbmFtZSkpOworCX0K K30KKworLyoKKyAqIERldGVybWluZSB3aGV0aGVyIHR3byBwZ3BhX2luZGV4X3RhcmdldCBvYmpl Y3RzIGFyZSBleGFjdGx5IGlkZW50aWNhbC4KKyAqLworYm9vbAorcGdwYV9pbmRleF90YXJnZXRz X2VxdWFsKHBncGFfaW5kZXhfdGFyZ2V0ICppMSwgcGdwYV9pbmRleF90YXJnZXQgKmkyKQorewor CWlmIChpMS0+aXR5cGUgIT0gaTItPml0eXBlKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoaTEt Pml0eXBlID09IFBHUEFfSU5ERVhfTkFNRSkKKwl7CisJCS8qIGluZG5hbWVzcGFjZSBjYW4gYmUg TlVMTCwgYW5kIHR3byBOVUxMIHZhbHVlcyBhcmUgZXF1YWwgKi8KKwkJaWYgKChpMS0+aW5kbmFt ZXNwYWNlICE9IE5VTEwgfHwgaTItPmluZG5hbWVzcGFjZSAhPSBOVUxMKSAmJgorCQkJKGkxLT5p bmRuYW1lc3BhY2UgPT0gTlVMTCB8fCBpMi0+aW5kbmFtZXNwYWNlID09IE5VTEwgfHwKKwkJCSBz dHJjbXAoaTEtPmluZG5hbWVzcGFjZSwgaTItPmluZG5hbWVzcGFjZSkgIT0gMCkpCisJCQlyZXR1 cm4gZmFsc2U7CisJCWlmIChzdHJjbXAoaTEtPmluZG5hbWUsIGkyLT5pbmRuYW1lKSAhPSAwKQor CQkJcmV0dXJuIGZhbHNlOworCX0KKwllbHNlCisJeworCQlpbnQJCQlpMV9sZW5ndGggPSBsaXN0 X2xlbmd0aChpMS0+Y2hpbGRyZW4pOworCisJCWlmIChpMV9sZW5ndGggIT0gbGlzdF9sZW5ndGgo aTItPmNoaWxkcmVuKSkKKwkJCXJldHVybiBmYWxzZTsKKwkJZm9yIChpbnQgbiA9IDA7IG4gPCBp MV9sZW5ndGg7ICsrbikKKwkJeworCQkJcGdwYV9pbmRleF90YXJnZXQgKmMxID0gbGlzdF9udGgo aTEtPmNoaWxkcmVuLCBuKTsKKwkJCXBncGFfaW5kZXhfdGFyZ2V0ICpjMiA9IGxpc3RfbnRoKGky LT5jaGlsZHJlbiwgbik7CisKKwkJCWlmICghcGdwYV9pbmRleF90YXJnZXRzX2VxdWFsKGMxLCBj MikpCisJCQkJcmV0dXJuIGZhbHNlOworCQl9CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKKy8q CisgKiBDaGVjayB3aGV0aGVyIGFuIGlkZW50aWZpZXIgbWF0Y2hlcyBhbiBhbnkgcGFydCBvZiBh biBhZHZpY2UgdGFyZ2V0LgorICovCitib29sCitwZ3BhX2lkZW50aWZpZXJfbWF0Y2hlc190YXJn ZXQocGdwYV9pZGVudGlmaWVyICpyaWQsIHBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0KQorewor CS8qIEZvciBub24taWRlbnRpZmllcnMsIGNoZWNrIGFsbCBkZXNjZW5kZW50cy4gKi8KKwlpZiAo dGFyZ2V0LT50dHlwZSAhPSBQR1BBX1RBUkdFVF9JREVOVElGSUVSKQorCXsKKwkJZm9yZWFjaF9w dHIocGdwYV9hZHZpY2VfdGFyZ2V0LCBjaGlsZF90YXJnZXQsIHRhcmdldC0+Y2hpbGRyZW4pCisJ CXsKKwkJCWlmIChwZ3BhX2lkZW50aWZpZXJfbWF0Y2hlc190YXJnZXQocmlkLCBjaGlsZF90YXJn ZXQpKQorCQkJCXJldHVybiB0cnVlOworCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKiBT dHJhaWdodGZvcndhcmQgY29tcGFyaXNvbnMgb2YgYWxpYXMgbmFtZSBhbmQgb2NjY3VycmVuY2Ug bnVtYmVyLiAqLworCWlmIChzdHJjbXAocmlkLT5hbGlhc19uYW1lLCB0YXJnZXQtPnJpZC5hbGlh c19uYW1lKSAhPSAwKQorCQlyZXR1cm4gZmFsc2U7CisJaWYgKHJpZC0+b2NjdXJyZW5jZSAhPSB0 YXJnZXQtPnJpZC5vY2N1cnJlbmNlKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKgorCSAqIElmIGEg cmVsYXRpb24gaWRlbnRpZmVyIG1lbnRpb25zIGEgcGFydGl0aW9uIG5hbWUsIGl0IHNob3VsZCBh bHNvCisJICogc3BlY2lmeSBhIHBhcnRpdGlvbiBzY2hlbWEuIEJ1dCB0aGUgdGFyZ2V0IG1heSBs ZWF2ZSB0aGUgc2NoZW1hIE5VTEwgdG8KKwkgKiBtYXRjaCBhbnl0aGluZy4KKwkgKi8KKwlBc3Nl cnQocmlkLT5wYXJ0bnNwICE9IE5VTEwgfHwgcmlkLT5wYXJ0cmVsID09IE5VTEwpOworCWlmIChy aWQtPnBhcnRuc3AgIT0gTlVMTCAmJiB0YXJnZXQtPnJpZC5wYXJ0bnNwICE9IE5VTEwgJiYKKwkJ c3RyY21wKHJpZC0+cGFydG5zcCwgdGFyZ2V0LT5yaWQucGFydG5zcCkgIT0gMCkKKwkJcmV0dXJu IGZhbHNlOworCisJLyoKKwkgKiBUaGVzZSBmaWVsZHMgY2FuIGJlIE5VTEwgb24gZWl0aGVyIHNp ZGUsIGJ1dCBOVUxMIG9ubHkgbWF0Y2hlcyBhbm90aGVyCisJICogTlVMTC4KKwkgKi8KKwlpZiAo IXN0cmluZ3NfZXF1YWxfb3JfYm90aF9udWxsKHJpZC0+cGFydHJlbCwgdGFyZ2V0LT5yaWQucGFy dHJlbCkpCisJCXJldHVybiBmYWxzZTsKKwlpZiAoIXN0cmluZ3NfZXF1YWxfb3JfYm90aF9udWxs KHJpZC0+cGxhbl9uYW1lLCB0YXJnZXQtPnJpZC5wbGFuX25hbWUpKQorCQlyZXR1cm4gZmFsc2U7 CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIE1hdGNoIGlkZW50aWZpZXJzIHRvIGFkdmlj ZSB0YXJnZXRzIGFuZCByZXR1cm4gYW4gZW51bSB2YWx1ZSBpbmRpY2F0aW5nCisgKiB0aGUgcmVs YXRpb25zaGlwIGJldHdlZW4gdGhlIHNldCBvZiBrZXlzIGFuZCB0aGUgc2V0IG9mIHRhcmdldHMu CisgKgorICogU2VlIHRoZSBjb21tZW50cyBmb3IgcGdwYV9pdG1fdHlwZS4KKyAqLworcGdwYV9p dG1fdHlwZQorcGdwYV9pZGVudGlmaWVyc19tYXRjaF90YXJnZXQoaW50IG5yaWRzLCBwZ3BhX2lk ZW50aWZpZXIgKnJpZHMsCisJCQkJCQkJICBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCkKK3sK Kwlib29sCQlhbGxfcmlkc191c2VkID0gdHJ1ZTsKKwlib29sCQlhbnlfcmlkc191c2VkID0gZmFs c2U7CisJYm9vbAkJYWxsX3RhcmdldHNfdXNlZDsKKwlib29sCSAgICpyaWRzX3VzZWQgPSBwYWxs b2MwX2FycmF5KGJvb2wsIG5yaWRzKTsKKworCWFsbF90YXJnZXRzX3VzZWQgPQorCQlwZ3BhX2lk ZW50aWZpZXJzX2NvdmVyX3RhcmdldChucmlkcywgcmlkcywgdGFyZ2V0LCByaWRzX3VzZWQpOwor CisJZm9yIChpbnQgaSA9IDA7IGkgPCBucmlkczsgKytpKQorCXsKKwkJaWYgKHJpZHNfdXNlZFtp XSkKKwkJCWFueV9yaWRzX3VzZWQgPSB0cnVlOworCQllbHNlCisJCQlhbGxfcmlkc191c2VkID0g ZmFsc2U7CisJfQorCisJaWYgKGFsbF9yaWRzX3VzZWQpCisJeworCQlpZiAoYWxsX3RhcmdldHNf dXNlZCkKKwkJCXJldHVybiBQR1BBX0lUTV9FUVVBTDsKKwkJZWxzZQorCQkJcmV0dXJuIFBHUEFf SVRNX0tFWVNfQVJFX1NVQlNFVDsKKwl9CisJZWxzZQorCXsKKwkJaWYgKGFsbF90YXJnZXRzX3Vz ZWQpCisJCQlyZXR1cm4gUEdQQV9JVE1fVEFSR0VUU19BUkVfU1VCU0VUOworCQllbHNlIGlmIChh bnlfcmlkc191c2VkKQorCQkJcmV0dXJuIFBHUEFfSVRNX0lOVEVSU0VDVElORzsKKwkJZWxzZQor CQkJcmV0dXJuIFBHUEFfSVRNX0RJU0pPSU5UOworCX0KK30KKworLyoKKyAqIFJldHVybnMgdHJ1 ZSBpZiBldmVyeSB0YXJnZXQgb3Igc3ViLXRhcmdldCBpcyBtYXRjaGVkIGJ5IGF0IGxlYXN0IG9u ZQorICogaWRlbnRpZmllciwgYW5kIG90aGVyd2lzZSBmYWxzZS4KKyAqCisgKiBBbHNvIHNldHMg cmlkc191c2VkW2ldID0gdHJ1ZSBmb3IgZWFjaCBpZGVuaWZpZXIgdGhhdCBtYXRjaGVzIGF0IGxl YXN0IG9uZQorICogdGFyZ2V0LgorICovCitzdGF0aWMgYm9vbAorcGdwYV9pZGVudGlmaWVyc19j b3Zlcl90YXJnZXQoaW50IG5yaWRzLCBwZ3BhX2lkZW50aWZpZXIgKnJpZHMsCisJCQkJCQkJICBw Z3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCwgYm9vbCAqcmlkc191c2VkKQoreworCWJvb2wJCXJl c3VsdCA9IGZhbHNlOworCisJaWYgKHRhcmdldC0+dHR5cGUgIT0gUEdQQV9UQVJHRVRfSURFTlRJ RklFUikKKwl7CisJCXJlc3VsdCA9IHRydWU7CisKKwkJZm9yZWFjaF9wdHIocGdwYV9hZHZpY2Vf dGFyZ2V0LCBjaGlsZF90YXJnZXQsIHRhcmdldC0+Y2hpbGRyZW4pCisJCXsKKwkJCWlmICghcGdw YV9pZGVudGlmaWVyc19jb3Zlcl90YXJnZXQobnJpZHMsIHJpZHMsIGNoaWxkX3RhcmdldCwKKwkJ CQkJCQkJCQkJICAgcmlkc191c2VkKSkKKwkJCQlyZXN1bHQgPSBmYWxzZTsKKwkJfQorCX0KKwll bHNlCisJeworCQlmb3IgKGludCBpID0gMDsgaSA8IG5yaWRzOyArK2kpCisJCXsKKwkJCWlmIChw Z3BhX2lkZW50aWZpZXJfbWF0Y2hlc190YXJnZXQoJnJpZHNbaV0sIHRhcmdldCkpCisJCQl7CisJ CQkJcmlkc191c2VkW2ldID0gdHJ1ZTsKKwkJCQlyZXN1bHQgPSB0cnVlOworCQkJfQorCQl9CisJ fQorCisJcmV0dXJuIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvcGdwYV9hc3QuaCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3QuaApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZjZmZTczMGE0ZDQKLS0tIC9kZXYvbnVs bAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfYXN0LmgKQEAgLTAsMCArMSwyMDQg QEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFfYXN0LmgKKyAqCSAgYWJzdHJhY3Qg c3ludGF4IHRyZWVzIGZvciBwbGFuIGFkdmljZSwgcGx1cyBwYXJzZXIvc2Nhbm5lciBzdXBwb3J0 CisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjQsIFBvc3RncmVTUUwgR2xvYmFsIERldmVs b3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfYXN0LmgK KyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBQR1BBX0FTVF9ICisjZGVmaW5l IFBHUEFfQVNUX0gKKworI2luY2x1ZGUgInBncGFfaWRlbnRpZmllci5oIgorCisjaW5jbHVkZSAi bm9kZXMvcGdfbGlzdC5oIgorCisvKgorICogQWR2aWNlIGl0ZW1zIGdlbmVyYWxseSB0YWtlIHRo ZSBmb3JtIFNPTUVfVEFHKGl0ZW0gWy4uLl0pLCB3aGVyZSBhbiBpdGVtCisgKiBjYW4gdGFrZSB2 YXJpb3VzIGZvcm1zLiBUaGUgc2ltcGxlc3QgY2FzZSBpcyBhIHJlbGF0aW9uIGlkZW50aWZpZXIs IGJ1dAorICogc29tZSB0YWdzIGFsbG93IHN1Ymxpc3RzLCBhbmQgSk9JTl9PUkRFUigpIGFsbG93 cyBib3RoIG9yZGVyZWQgYW5kIHVub3JkZXJlZAorICogc3VibGlzdHMuCisgKi8KK3R5cGVkZWYg ZW51bQoreworCVBHUEFfVEFSR0VUX0lERU5USUZJRVIsCQkvKiByZWxhdGlvbiBpZGVudGlmaWVy ICovCisJUEdQQV9UQVJHRVRfT1JERVJFRF9MSVNULAkvKiAoaXRlbSAuLi4pICovCisJUEdQQV9U QVJHRVRfVU5PUkRFUkVEX0xJU1QJLyoge2l0ZW0gLi4ufSAqLworfSBwZ3BhX3RhcmdldF90eXBl OworCisvKgorICogV2hlbiBhbiBhZHZpY2UgaXRlbSBkZXNjcmliZXMgYSBiaXRtYXAgaW5kZXgg c2NhbiwgaXQgbWF5IG5lZWQgdG8gZGVzY3JpYmUKKyAqIHRoZSB1c2Ugb2YgbXVsdGlwbGUgaW5k ZXhlcy4KKyAqLwordHlwZWRlZiBlbnVtCit7CisJUEdQQV9JTkRFWF9OQU1FLAkJCS8qIGluZGV4 IHNjaGVtYSArIG5hbWUgKi8KKwlQR1BBX0lOREVYX0FORCwJCQkJLyogJiYoaXRlbSAuLi4pICov CisJUEdQQV9JTkRFWF9PUgkJCQkvKiB8fChpdGVtIC4uLikgKi8KK30gcGdwYV9pbmRleF90eXBl OworCisvKgorICogQW4gaW5kZXggc3BlY2lmaWNhdGlvbi4gV2UgdXNlIHRoaXMgZm9yIElOREVY X1NDQU4sIElOREVYX09OTFlfU0NBTiwKKyAqIGFuZCBCSVRNQVBfSEVBUF9TQ0FOIGFkdmljZSwg YnV0IGluIHRoZSBmb3JtZXIgdHdvIGNhc2VzLCB0aGUgdGFyZ2V0IG11c3QKKyAqIGJlIG9mIHR5 cGUgUEdQQV9JTkRFWF9OQU1FLgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX2luZGV4X3Rhcmdl dAoreworCXBncGFfaW5kZXhfdHlwZSBpdHlwZTsKKworCS8qIEluZGV4IHNjaGVtIGFuZCBuYW1l LCB3aGVuIGl0eXBlID09IFBHUEFfSU5ERVhfTkFNRSAqLworCWNoYXIJICAgKmluZG5hbWVzcGFj ZTsKKwljaGFyCSAgICppbmRuYW1lOworCisJLyogTGlzdCBvZiBwZ3BhX2luZGV4X3RhcmdldCBv YmplY3RzLCB3aGVuIGl0eXBlICE9IFBHUEFfSU5ERVhfTkFNRSAqLworCUxpc3QJICAgKmNoaWxk cmVuOworfSBwZ3BhX2luZGV4X3RhcmdldDsKKworLyoKKyAqIEEgc2luZ2xlIGl0ZW0gYWJvdXQg d2hpY2ggYWR2aWNlIGlzIGJlaW5nIGdpdmVuLCB3aGljaCBjb3VsZCBiZSBlaXRoZXIKKyAqIGEg cmVsYXRpb24gaWRlbnRpZmllciB0aGF0IHdlIHdhbnQgdG8gYnJlYWsgb3V0IGludG8gaXRzIGNv bnN0aXR1ZW50IGZpZWxkcywKKyAqIG9yIGEgc3VibGlzdCBvZiBzb21lIGtpbmQuCisgKi8KK3R5 cGVkZWYgc3RydWN0IHBncGFfYWR2aWNlX3RhcmdldAoreworCXBncGFfdGFyZ2V0X3R5cGUgdHR5 cGU7CisKKwkvKgorCSAqIFRoaXMgZmllbGQgaXMgbWVhbmluZ2Z1bCB3aGVuIHR0eXBlIGlzIFBH UEFfVEFSR0VUX0lERU5USUZJRVIuCisJICoKKwkgKiBBbGwgaWRlbnRpZmllcnMgbXVzdCBoYXZl IGFuIGFsaWFzIG5hbWUgYW5kIGFuIG9jY3VycmVuY2UgbnVtYmVyOyB0aGUKKwkgKiByZW1haW5p bmcgZmllbGRzIGNhbiBiZSBOVUxMLiBOb3RlIHRoYXQgaXQncyBwb3NzaWJsZSB0byBzcGVjaWZ5 IGEKKwkgKiBwYXJ0aXRpb24gbmFtZSB3aXRob3V0IGEgcGFydGl0aW9uIHNjaGVtYSwgYnV0IG5v dCB0aGUgcmV2ZXJzZS4KKwkgKi8KKwlwZ3BhX2lkZW50aWZpZXIgcmlkOworCisJLyoKKwkgKiBU aGlzIGZpZWxkIGlzIHNldCB3aGVuIHR0eXBlIGlzIFBQR0FfVEFSR0VUX0lERU5USUZJRVIgYW5k IHRoZSBhZHZpY2UKKwkgKiB0YWcgaXMgUEdQQV9UQUdfSU5ERVhfU0NBTiwgUEdQQV9UQUdfSU5E RVhfT05MWV9TQ0FOLCBvcgorCSAqIFBHUEFfVEFHX0JJVE1BUF9IRUFQX1NDQU4uCisJICovCisJ cGdwYV9pbmRleF90YXJnZXQgKml0YXJnZXQ7CisKKwkvKgorCSAqIFdoZW4gdGhlIHR0eXBlIGlz IFBHUEFfVEFSR0VUXzxhbnl0aGluZz5fTElTVCwgdGhpcyBmaWVsZCBjb250YWlucyBhCisJICog bGlzdCBvZiBhZGRpdGlvbmFsIHBncGFfYWR2aWNlX3RhcmdldCBvYmplY3RzLiBPdGhlcndpc2Us IGl0IGlzIHVudXNlZC4KKwkgKi8KKwlMaXN0CSAgICpjaGlsZHJlbjsKK30gcGdwYV9hZHZpY2Vf dGFyZ2V0OworCisvKgorICogVGhlc2UgYXJlIGFsbCB0aGUga2luZHMgb2YgYWR2aWNlIHRoYXQg d2Uga25vdyBob3cgdG8gcGFyc2UuIElmIGEga2V5d29yZAorICogaXMgZm91bmQgYXQgdGhlIHRv cCBsZXZlbCwgaXQgbXVzdCBiZSBpbiB0aGlzIGxpc3QuCisgKgorICogSWYgeW91IGNoYW5nZSBh bnl0aGluZyBoZXJlLCBhbHNvIHVwZGF0ZSBwZ3BhX3BhcnNlX2FkdmljZV90YWcgYW5kCisgKiBw Z3BhX2NzdHJpbmdfYWR2aWNlX3RhZy4KKyAqLwordHlwZWRlZiBlbnVtIHBncGFfYWR2aWNlX3Rh Z190eXBlCit7CisJUEdQQV9UQUdfQklUTUFQX0hFQVBfU0NBTiwKKwlQR1BBX1RBR19GT1JFSUdO X0pPSU4sCisJUEdQQV9UQUdfR0FUSEVSLAorCVBHUEFfVEFHX0dBVEhFUl9NRVJHRSwKKwlQR1BB X1RBR19IQVNIX0pPSU4sCisJUEdQQV9UQUdfSU5ERVhfT05MWV9TQ0FOLAorCVBHUEFfVEFHX0lO REVYX1NDQU4sCisJUEdQQV9UQUdfSk9JTl9PUkRFUiwKKwlQR1BBX1RBR19NRVJHRV9KT0lOX01B VEVSSUFMSVpFLAorCVBHUEFfVEFHX01FUkdFX0pPSU5fUExBSU4sCisJUEdQQV9UQUdfTkVTVEVE X0xPT1BfTUFURVJJQUxJWkUsCisJUEdQQV9UQUdfTkVTVEVEX0xPT1BfTUVNT0laRSwKKwlQR1BB X1RBR19ORVNURURfTE9PUF9QTEFJTiwKKwlQR1BBX1RBR19OT19HQVRIRVIsCisJUEdQQV9UQUdf UEFSVElUSU9OV0lTRSwKKwlQR1BBX1RBR19TRU1JSk9JTl9OT05fVU5JUVVFLAorCVBHUEFfVEFH X1NFTUlKT0lOX1VOSVFVRSwKKwlQR1BBX1RBR19TRVFfU0NBTiwKKwlQR1BBX1RBR19USURfU0NB TgorfSBwZ3BhX2FkdmljZV90YWdfdHlwZTsKKworLyoKKyAqIEFuIGl0ZW0gb2YgYWR2aWNlLCBt ZWFuaW5nIGEgdGFnIGFuZCB0aGUgbGlzdCBvZiBhbGwgdGFyZ2V0cyB0byB3aGljaAorICogaXQg aXMgYmVpbmcgYXBwbGllZC4KKyAqCisgKiAidGFyZ2V0cyIgaXMgYSBsaXN0IG9mIHBncGFfYWR2 aWNlX3RhcmdldCBvYmplY3RzLgorICoKKyAqIFRoZSBMaXN0IHJldHVybmVkIGZyb20gcGdwYV95 eXBhcnNlIGlzIGxpc3Qgb2YgcGdwYV9hZHZpY2VfaXRlbSBvYmplY3RzLgorICovCit0eXBlZGVm IHN0cnVjdCBwZ3BhX2FkdmljZV9pdGVtCit7CisJcGdwYV9hZHZpY2VfdGFnX3R5cGUgdGFnOwor CUxpc3QJICAgKnRhcmdldHM7Cit9IHBncGFfYWR2aWNlX2l0ZW07CisKKy8qCisgKiBSZXN1bHQg b2YgY29tcGFyaW5nIGFuIGFycmF5IG9mIHBncGFfcmVsYXRpb25faWRlbnRpZmllciBvYmplY3Rz IHRvIGEKKyAqIHBncGFfYWR2aWNlX3RhcmdldC4KKyAqCisgKiBQR1BBX0lUTV9FUVVBTCBtZWFu cyBhbGwgdGFyZ2V0cyBhcmUgbWF0Y2hlZCBieSBzb21lIGlkZW50aWZpZXIsIGFuZAorICogYWxs IGlkZW50aWZpZXJzIHdlcmUgbWF0Y2hlZCB0byBhIHRhcmdldC4KKyAqCisgKiBQR1BBX0lUTV9L RVlTX0FSRV9TVUJTRVQgbWVhbnMgdGhhdCBhbGwgaWRlbnRpZmllcnMgbWF0Y2hlZCB0byBhIHRh cmdldCwKKyAqIGJ1dCB0aGVyZSB3ZXJlIGxlZnRvdmVyIHRhcmdldHMuIEdlbmVyYWxseSwgdGhp cyBtZWFucyB0aGF0IHRoZSBhZHZpY2UgaXMKKyAqIGxvb2tpbmcgdG8gYXBwbHkgdG8gYWxsIG9m IHRoZSByZWxzIHdlIGhhdmUgcGx1cyBzb21lIGFkZGl0aW9uYWwgb25lcyB0aGF0CisgKiB3ZSBk b24ndCBoYXZlLgorICoKKyAqIFBHUEFfSVRNX1RBUkdFVFNfQVJFX1NVQlNFVCBtZWFucyB0aGF0 IGFsbCB0YXJnZXRzIGFyZSBtYXRjaGVkIGJ5IGFuCisgKiBpZGVudGlmaWVycywgYnV0IHRoZXJl IHdlcmUgbGVmdG92ZXIgaWRlbnRpZmllcnMuIEdlbmVyYWxseSwgdGhpcyBtZWFucworICogdGhh dCB0aGUgYWR2aWNlIGlzIGxvb2tpbmcgdG8gYXBwbHkgdG8gc29tZSBidXQgbm90IGFsbCBvZiB0 aGUgcmVscyB3ZSBoYXZlLgorICoKKyAqIFBHUEFfSVRNX0lOVEVSU0VDVElORyBtZWFucyB0aGF0 IHNvbWUgaWRlbnRpZmVpcnMgYW5kIHRhcmdldHMgd2VyZSBtYXRjaGVkLAorICogYnV0IG5laXRo ZXIgYWxsIGlkZW50aWZpZXJzIG5vciBhbGwgdGFyZ2V0cyBjb3VsZCBiZSBtYXRjaGVkIHRvIGl0 ZW1zIGluCisgKiB0aGUgb3RoZXIgc2V0LgorICoKKyAqIFBHUEFfSVRNX0RJU0pPSU5UIG1lYW5z IHRoYXQgbm8gbWF0Y2hlcyBiZXR3ZWVuIGlkZW50aWZlaXJzIGFuZCB0YXJnZXRzIHdlcmUKKyAq IGZvdW5kLgorICovCit0eXBlZGVmIGVudW0KK3sKKwlQR1BBX0lUTV9FUVVBTCwKKwlQR1BBX0lU TV9LRVlTX0FSRV9TVUJTRVQsCisJUEdQQV9JVE1fVEFSR0VUU19BUkVfU1VCU0VULAorCVBHUEFf SVRNX0lOVEVSU0VDVElORywKKwlQR1BBX0lUTV9ESVNKT0lOVAorfSBwZ3BhX2l0bV90eXBlOwor CisvKiBmb3IgcGdwYV9zY2FubmVyLmwgYW5kIHBncGFfcGFyc2VyLnkgKi8KK3VuaW9uIFlZU1RZ UEU7CisjaWZuZGVmIFlZX1RZUEVERUZfWVlfU0NBTk5FUl9UCisjZGVmaW5lIFlZX1RZUEVERUZf WVlfU0NBTk5FUl9UCit0eXBlZGVmIHZvaWQgKnl5c2Nhbl90OworI2VuZGlmCisKKy8qIGluIHBn cGFfc2Nhbm5lci5sICovCitleHRlcm4gaW50CXBncGFfeXlsZXgodW5pb24gWVlTVFlQRSAqeXls dmFsX3BhcmFtLCBMaXN0ICoqcmVzdWx0LAorCQkJCQkgICBjaGFyICoqcGFyc2VfZXJyb3JfbXNn X3AsIHl5c2Nhbl90IHl5c2Nhbm5lcik7CitleHRlcm4gdm9pZCBwZ3BhX3l5ZXJyb3IoTGlzdCAq KnJlc3VsdCwgY2hhciAqKnBhcnNlX2Vycm9yX21zZ19wLAorCQkJCQkJIHl5c2Nhbl90IHl5c2Nh bm5lciwKKwkJCQkJCSBjb25zdCBjaGFyICptZXNzYWdlKTsKK2V4dGVybiB2b2lkIHBncGFfc2Nh bm5lcl9pbml0KGNvbnN0IGNoYXIgKnN0ciwgeXlzY2FuX3QgKnl5c2Nhbm5lcnApOworZXh0ZXJu IHZvaWQgcGdwYV9zY2FubmVyX2ZpbmlzaCh5eXNjYW5fdCB5eXNjYW5uZXIpOworCisvKiBpbiBw Z3BhX3BhcnNlci55ICovCitleHRlcm4gaW50CXBncGFfeXlwYXJzZShMaXN0ICoqcmVzdWx0LCBj aGFyICoqcGFyc2VfZXJyb3JfbXNnX3AsCisJCQkJCQkgeXlzY2FuX3QgeXlzY2FubmVyKTsKK2V4 dGVybiBMaXN0ICpwZ3BhX3BhcnNlKGNvbnN0IGNoYXIgKmFkdmljZV9zdHJpbmcsIGNoYXIgKipl cnJvcl9wKTsKKworLyogaW4gcGdwYV9hc3QuYyAqLworZXh0ZXJuIGNoYXIgKnBncGFfY3N0cmlu Z19hZHZpY2VfdGFnKHBncGFfYWR2aWNlX3RhZ190eXBlIGFkdmljZV90YWcpOworZXh0ZXJuIGJv b2wgcGdwYV9pZGVudGlmaWVyX21hdGNoZXNfdGFyZ2V0KHBncGFfaWRlbnRpZmllciAqcmlkLAor CQkJCQkJCQkJCSAgIHBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0KTsKK2V4dGVybiBwZ3BhX2l0 bV90eXBlIHBncGFfaWRlbnRpZmllcnNfbWF0Y2hfdGFyZ2V0KGludCBucmlkcywKKwkJCQkJCQkJ CQkJCSAgIHBncGFfaWRlbnRpZmllciAqcmlkcywKKwkJCQkJCQkJCQkJCSAgIHBncGFfYWR2aWNl X3RhcmdldCAqdGFyZ2V0KTsKK2V4dGVybiBib29sIHBncGFfaW5kZXhfdGFyZ2V0c19lcXVhbChw Z3BhX2luZGV4X3RhcmdldCAqaTEsCisJCQkJCQkJCQkgcGdwYV9pbmRleF90YXJnZXQgKmkyKTsK K2V4dGVybiBwZ3BhX2FkdmljZV90YWdfdHlwZSBwZ3BhX3BhcnNlX2FkdmljZV90YWcoY29uc3Qg Y2hhciAqdGFnLCBib29sICpmYWlsKTsKK2V4dGVybiB2b2lkIHBncGFfZm9ybWF0X2FkdmljZV90 YXJnZXQoU3RyaW5nSW5mbyBzdHIsCisJCQkJCQkJCQkgIHBncGFfYWR2aWNlX3RhcmdldCAqdGFy Z2V0KTsKK2V4dGVybiB2b2lkIHBncGFfZm9ybWF0X2luZGV4X3RhcmdldChTdHJpbmdJbmZvIHN0 ciwKKwkJCQkJCQkJCSBwZ3BhX2luZGV4X3RhcmdldCAqaXRhcmdldCk7CisKKyNlbmRpZgpkaWZm IC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2NvbGxlY3Rvci5jIGIvY29udHJp Yi9wZ19wbGFuX2FkdmljZS9wZ3BhX2NvbGxlY3Rvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwLi43YTQ1YjUwMzFmZQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIv cGdfcGxhbl9hZHZpY2UvcGdwYV9jb2xsZWN0b3IuYwpAQCAtMCwwICsxLDYzNyBAQAorLyotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKgorICogcGdwYV9jb2xsZWN0b3IuYworICoJICBjb2xsZWN0IGFkdmlj ZSBpbnRvIGJhY2tlbmQtbG9jYWwgb3Igc2hhcmVkIG1lbW9yeQorICoKKyAqIENvcHlyaWdodCAo YykgMjAxNi0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAq CSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2NvbGxlY3Rvci5jCisgKgorICotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJwZ19w bGFuX2FkdmljZS5oIgorI2luY2x1ZGUgInBncGFfY29sbGVjdG9yLmgiCisKKyNpbmNsdWRlICJk YXRhdHlwZS90aW1lc3RhbXAuaCIKKyNpbmNsdWRlICJmdW5jYXBpLmgiCisjaW5jbHVkZSAibWlz Y2FkbWluLmgiCisjaW5jbHVkZSAibm9kZXMvcGdfbGlzdC5oIgorI2luY2x1ZGUgInV0aWxzL2Fj bC5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvdGltZXN0 YW1wLmgiCisKK1BHX0ZVTkNUSU9OX0lORk9fVjEocGdfY2xlYXJfY29sbGVjdGVkX2xvY2FsX2Fk dmljZSk7CitQR19GVU5DVElPTl9JTkZPX1YxKHBnX2NsZWFyX2NvbGxlY3RlZF9zaGFyZWRfYWR2 aWNlKTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEocGdfZ2V0X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2Up OworUEdfRlVOQ1RJT05fSU5GT19WMShwZ19nZXRfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UpOwor CisjZGVmaW5lIEFEVklDRV9DSFVOS19TSVpFCQkxMDI0CisjZGVmaW5lIEFEVklDRV9DSFVOS19B UlJBWV9TSVpFCTY0CisKKyNkZWZpbmUJUEdfR0VUX0FEVklDRV9DT0xVTU5TCTcKKworLyoKKyAq IEFkdmljZSBleHRyYWN0ZWQgZnJvbSBvbmUgcXVlcnkgcGxhbiwgdG9nZXRoZXIgd2l0aCB0aGUg cXVlcnkgc3RyaW5nCisgKiBhbmQgdmFyaW91cyBvdGhlciBpZGVudGlmeWluZyBkZXRhaWxzLgor ICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX2NvbGxlY3RlZF9hZHZpY2UKK3sKKwlPaWQJCQl1c2Vy aWQ7CQkJLyogdXNlciBPSUQgKi8KKwlPaWQJCQlkYmlkOwkJCS8qIGRhdGFiYXNlIE9JRCAqLwor CXVpbnQ2NAkJcXVlcnlpZDsJCS8qIHF1ZXJ5IGlkZW50aWZpZXIgKi8KKwlUaW1lc3RhbXBUeiB0 aW1lc3RhbXA7CQkvKiBxdWVyeSB0aW1lc3RhbXAgKi8KKwlpbnQJCQlhZHZpY2Vfb2Zmc2V0Owkv KiBzdGFydCBvZiBhZHZpY2UgaW4gdGV4dHVhbCBkYXRhICovCisJY2hhcgkJdGV4dHVhbF9kYXRh W0ZMRVhJQkxFX0FSUkFZX01FTUJFUl07Cit9IHBncGFfY29sbGVjdGVkX2FkdmljZTsKKworLyoK KyAqIEEgYnVuY2ggb2YgcG9pbnRlcnMgdG8gcGdwYV9jb2xsZWN0ZWRfYWR2aWNlIG9iamVjdHMs IHN0b3JlZCBpbgorICogYmFja2VuZC1sb2NhbCBtZW1vcnkuCisgKi8KK3R5cGVkZWYgc3RydWN0 IHBncGFfbG9jYWxfYWR2aWNlX2NodW5rCit7CisJcGdwYV9jb2xsZWN0ZWRfYWR2aWNlICplbnRy aWVzW0FEVklDRV9DSFVOS19TSVpFXTsKK30gcGdwYV9sb2NhbF9hZHZpY2VfY2h1bms7CisKKy8q CisgKiBJbmZvcm1hdGlvbiBhYm91dCBhbGwgb2YgdGhlIHBncGFfY29sbGVjdGVkX2FkdmljZSBv YmplY3RzIHRoYXQgd2UncmUKKyAqIHN0b3JpbmcgaW4gbG9jYWwgbWVtb3J5LgorICoKKyAqIFdl IGFzc2lnbiBjb25zZWN1dGl2ZSBJRHMsIHN0YXJ0aW5nIGZyb20gMCwgdG8gZWFjaCBwZ3BhX2Nv bGxlY3RlZF9hZHZpY2UKKyAqIG9iamVjdCB0aGF0IHdlIHN0b3JlLiBUaGUgYWN0dWFsIHN0b3Jh Z2UgaXMgYW4gYXJyYXkgb2YgY2h1bmtzLCB3aGljaAorICogaGVscHMga2VlcCBtZW1jcHkoKSBv dmVyaGVhZCBsb3cgd2hlbiB3ZSBzdGFydCBkaXNjYXJkaW5nIG9sZGVyIGRhdGEuCisgKi8KK3R5 cGVkZWYgc3RydWN0IHBncGFfbG9jYWxfYWR2aWNlCit7CisJdWludDY0CQluZXh0X2lkOworCXVp bnQ2NAkJb2xkZXN0X2lkOworCXVpbnQ2NAkJYmFzZV9pZDsKKwlpbnQJCQljaHVua19hcnJheV9h bGxvY2F0ZWRfc2l6ZTsKKwlwZ3BhX2xvY2FsX2FkdmljZV9jaHVuayAqKmNodW5rczsKK30gcGdw YV9sb2NhbF9hZHZpY2U7CisKKy8qCisgKiBKdXN0IGxpa2UgcGdwYV9sb2NhbF9hZHZpY2VfY2h1 bmssIGJ1dCBzdG9yZWQgaW4gYSBkeW5hbWljIHNoYXJlZCBhcmVhLAorICogc28gd2UgbXVzdCB1 c2UgZHNhX3BvaW50ZXIgaW5zdGVhZCBvZiBuYXRpdmUgcG9pbnRlcnMuCisgKi8KK3R5cGVkZWYg c3RydWN0IHBncGFfc2hhcmVkX2FkdmljZV9jaHVuaworeworCWRzYV9wb2ludGVyIGVudHJpZXNb QURWSUNFX0NIVU5LX1NJWkVdOworfSBwZ3BhX3NoYXJlZF9hZHZpY2VfY2h1bms7CisKKy8qCisg KiBKdXN0IGxpa2UgcGdwYV9sb2NhbF9hZHZpY2UsIGJ1dCBzdG9yZWQgaW4gYSBkeW5hbWljIHNo YXJlZCBhcmVhLCBzbworICogd2UgbXVzdCB1c2UgZHNhX3BvaW50ZXIgaW5zdGVhZCBvZiBuYXRp dmUgcG9pbnRlcnMuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBncGFfc2hhcmVkX2FkdmljZQorewor CXVpbnQ2NAkJbmV4dF9pZDsKKwl1aW50NjQJCW9sZGVzdF9pZDsKKwl1aW50NjQJCWJhc2VfaWQ7 CisJaW50CQkJY2h1bmtfYXJyYXlfYWxsb2NhdGVkX3NpemU7CisJZHNhX3BvaW50ZXIgY2h1bmtz OworfSBwZ3BhX3NoYXJlZF9hZHZpY2U7CisKKy8qIFBvaW50ZXJzIHRvIGxvY2FsIGFuZCBzaGFy ZWQgY29sbGVjdG9ycyAqLworc3RhdGljIHBncGFfbG9jYWxfYWR2aWNlICpsb2NhbF9jb2xsZWN0 b3IgPSBOVUxMOworc3RhdGljIHBncGFfc2hhcmVkX2FkdmljZSAqc2hhcmVkX2NvbGxlY3RvciA9 IE5VTEw7CisKKy8qIFN0YXRpYyBmdW5jdGlvbnMgKi8KK3N0YXRpYyBwZ3BhX2NvbGxlY3RlZF9h ZHZpY2UgKnBncGFfbWFrZV9jb2xsZWN0ZWRfYWR2aWNlKE9pZCB1c2VyaWQsCisJCQkJCQkJCQkJ CQkJCSBPaWQgZGJpZCwKKwkJCQkJCQkJCQkJCQkJIHVpbnQ2NCBxdWVyeUlkLAorCQkJCQkJCQkJ CQkJCQkgVGltZXN0YW1wVHogdGltZXN0YW1wLAorCQkJCQkJCQkJCQkJCQkgY29uc3QgY2hhciAq cXVlcnlfc3RyaW5nLAorCQkJCQkJCQkJCQkJCQkgY29uc3QgY2hhciAqYWR2aWNlX3N0cmluZywK KwkJCQkJCQkJCQkJCQkJIGRzYV9hcmVhICphcmVhLAorCQkJCQkJCQkJCQkJCQkgZHNhX3BvaW50 ZXIgKnJlc3VsdCk7CitzdGF0aWMgdm9pZCBwZ3BhX3N0b3JlX2xvY2FsX2FkdmljZShwZ3BhX2Nv bGxlY3RlZF9hZHZpY2UgKmNhKTsKK3N0YXRpYyB2b2lkIHBncGFfdHJpbV9sb2NhbF9hZHZpY2Uo aW50IGxpbWl0KTsKK3N0YXRpYyB2b2lkIHBncGFfc3RvcmVfc2hhcmVkX2FkdmljZShkc2FfcG9p bnRlciBjYV9wb2ludGVyKTsKK3N0YXRpYyB2b2lkIHBncGFfdHJpbV9zaGFyZWRfYWR2aWNlKGRz YV9hcmVhICphcmVhLCBpbnQgbGltaXQpOworCisvKiBIZWxwZXIgZnVuY3Rpb24gdG8gZXh0cmFj dCB0aGUgcXVlcnkgc3RyaW5nIGZyb20gcGdwYV9jb2xsZWN0ZWRfYWR2aWNlICovCitzdGF0aWMg aW5saW5lIGNvbnN0IGNoYXIgKgorcXVlcnlfc3RyaW5nKHBncGFfY29sbGVjdGVkX2FkdmljZSAq Y2EpCit7CisJcmV0dXJuIGNhLT50ZXh0dWFsX2RhdGE7Cit9CisKKy8qIEhlbHBlciBmdW5jdGlv biB0byBleHRyYWN0IHRoZSBhZHZpY2Ugc3RyaW5nIGZyb20gcGdwYV9jb2xsZWN0ZWRfYWR2aWNl ICovCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKgorYWR2aWNlX3N0cmluZyhwZ3BhX2NvbGxl Y3RlZF9hZHZpY2UgKmNhKQoreworCXJldHVybiBjYS0+dGV4dHVhbF9kYXRhICsgY2EtPmFkdmlj ZV9vZmZzZXQ7Cit9CisKKy8qCisgKiBTdG9yZSBjb2xsZWN0ZWQgcXVlcnkgYWR2aWNlIGludG8g dGhlIGxvY2FsIG9yIHNoYXJlZCBhZHZpY2UgY29sbGVjdG9yLAorICogYXMgYXBwcm9wcmlhdGUu CisgKi8KK3ZvaWQKK3BncGFfY29sbGVjdF9hZHZpY2UodWludDY0IHF1ZXJ5SWQsIGNvbnN0IGNo YXIgKnF1ZXJ5X3N0cmluZywKKwkJCQkJY29uc3QgY2hhciAqYWR2aWNlX3N0cmluZykKK3sKKwlP aWQJCQl1c2VyaWQgPSBHZXRVc2VySWQoKTsKKwlPaWQJCQlkYmlkID0gTXlEYXRhYmFzZUlkOwor CVRpbWVzdGFtcFR6IG5vdyA9IEdldEN1cnJlbnRUaW1lc3RhbXAoKTsKKworCWlmIChwZ19wbGFu X2FkdmljZV9sb2NhbF9jb2xsZWN0aW9uX2xpbWl0ID4gMCkKKwl7CisJCXBncGFfY29sbGVjdGVk X2FkdmljZSAqY2E7CisJCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKworCQlvbGRjb250ZXh0 ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHBnX3BsYW5fYWR2aWNlX2dldF9tY3h0KCkpOworCQlj YSA9IHBncGFfbWFrZV9jb2xsZWN0ZWRfYWR2aWNlKHVzZXJpZCwgZGJpZCwgcXVlcnlJZCwgbm93 LAorCQkJCQkJCQkJCXF1ZXJ5X3N0cmluZywgYWR2aWNlX3N0cmluZywKKwkJCQkJCQkJCQlOVUxM LCBOVUxMKTsKKwkJcGdwYV9zdG9yZV9sb2NhbF9hZHZpY2UoY2EpOworCQlNZW1vcnlDb250ZXh0 U3dpdGNoVG8ob2xkY29udGV4dCk7CisJfQorCisJaWYgKHBnX3BsYW5fYWR2aWNlX3NoYXJlZF9j b2xsZWN0aW9uX2xpbWl0ID4gMCkKKwl7CisJCWRzYV9hcmVhICAgKmFyZWEgPSBwZ19wbGFuX2Fk dmljZV9kc2FfYXJlYSgpOworCQlkc2FfcG9pbnRlciBjYV9wb2ludGVyID0gSW52YWxpZERzYVBv aW50ZXI7IC8qIHBsYWNhdGUgY29tcGlsZXIgKi8KKworCQlwZ3BhX21ha2VfY29sbGVjdGVkX2Fk dmljZSh1c2VyaWQsIGRiaWQsIHF1ZXJ5SWQsIG5vdywKKwkJCQkJCQkJICAgcXVlcnlfc3RyaW5n LCBhZHZpY2Vfc3RyaW5nLCBhcmVhLAorCQkJCQkJCQkgICAmY2FfcG9pbnRlcik7CisJCXBncGFf c3RvcmVfc2hhcmVkX2FkdmljZShjYV9wb2ludGVyKTsKKwl9Cit9CisKKy8qCisgKiBBbGxvY2F0 ZSBhbmQgZmlsbCBhIG5ldyBwZ3BhX2NvbGxlY3RlZF9hZHZpY2Ugb2JqZWN0LgorICoKKyAqIElm IGFyZWEgIT0gTlVMTCwgaXQgaXMgdXNlZCB0byBhbGxvY2F0ZSB0aGUgbmV3IG9iamVjdCwgYW5k IHRoZSByZXN1bHRpbmcKKyAqIGRzYV9wb2ludGVyIGlzIHJldHVybmVkIHZpYSAqcmVzdWx0Lgor ICoKKyAqIElmIGFyZWEgPT0gTlVMTCwgdGhlIG5ldyBvYmplY3QgaXMgYWxsb2NhdGVkIGluIHRo ZSBjdXJyZW50IG1lbW9yeSBjb250ZXh0LAorICogYW5kIHJlc3VsdCBpcyBub3QgZXhhbWluZWQg b3IgbW9kaWZpZWQuCisgKi8KK3N0YXRpYyBwZ3BhX2NvbGxlY3RlZF9hZHZpY2UgKgorcGdwYV9t YWtlX2NvbGxlY3RlZF9hZHZpY2UoT2lkIHVzZXJpZCwgT2lkIGRiaWQsIHVpbnQ2NCBxdWVyeUlk LAorCQkJCQkJICAgVGltZXN0YW1wVHogdGltZXN0YW1wLAorCQkJCQkJICAgY29uc3QgY2hhciAq cXVlcnlfc3RyaW5nLAorCQkJCQkJICAgY29uc3QgY2hhciAqYWR2aWNlX3N0cmluZywKKwkJCQkJ CSAgIGRzYV9hcmVhICphcmVhLCBkc2FfcG9pbnRlciAqcmVzdWx0KQoreworCXNpemVfdAkJcXVl cnlfc3RyaW5nX2xlbmd0aCA9IHN0cmxlbihxdWVyeV9zdHJpbmcpICsgMTsKKwlzaXplX3QJCWFk dmljZV9zdHJpbmdfbGVuZ3RoID0gc3RybGVuKGFkdmljZV9zdHJpbmcpICsgMTsKKwlzaXplX3QJ CXRvdGFsX2xlbmd0aDsKKwlwZ3BhX2NvbGxlY3RlZF9hZHZpY2UgKmNhOworCisJdG90YWxfbGVu Z3RoID0gb2Zmc2V0b2YocGdwYV9jb2xsZWN0ZWRfYWR2aWNlLCB0ZXh0dWFsX2RhdGEpCisJCSsg cXVlcnlfc3RyaW5nX2xlbmd0aCArIGFkdmljZV9zdHJpbmdfbGVuZ3RoOworCisJaWYgKGFyZWEg PT0gTlVMTCkKKwkJY2EgPSBwYWxsb2ModG90YWxfbGVuZ3RoKTsKKwllbHNlCisJeworCQkqcmVz dWx0ID0gZHNhX2FsbG9jYXRlKGFyZWEsIHRvdGFsX2xlbmd0aCk7CisJCWNhID0gZHNhX2dldF9h ZGRyZXNzKGFyZWEsICpyZXN1bHQpOworCX0KKworCWNhLT51c2VyaWQgPSBHZXRVc2VySWQoKTsK KwljYS0+ZGJpZCA9IE15RGF0YWJhc2VJZDsKKwljYS0+cXVlcnlpZCA9IHF1ZXJ5SWQ7CisJY2Et PnRpbWVzdGFtcCA9IHRpbWVzdGFtcDsKKwljYS0+YWR2aWNlX29mZnNldCA9IHF1ZXJ5X3N0cmlu Z19sZW5ndGg7CisKKwltZW1jcHkoY2EtPnRleHR1YWxfZGF0YSwgcXVlcnlfc3RyaW5nLCBxdWVy eV9zdHJpbmdfbGVuZ3RoKTsKKwltZW1jcHkoJmNhLT50ZXh0dWFsX2RhdGFbY2EtPmFkdmljZV9v ZmZzZXRdLAorCQkgICBhZHZpY2Vfc3RyaW5nLCBhZHZpY2Vfc3RyaW5nX2xlbmd0aCk7CisKKwly ZXR1cm4gY2E7Cit9CisKKy8qCisgKiBBZGQgYSBwZ19jb2xsZWN0ZWRfYWR2aWNlIG9iamVjdCB0 byBvdXIgYmFja2VuZC1sb2NhbCBhZHZpY2UgY29sbGVjdGlvbi4KKyAqCisgKiBDYWxsZXIgaXMg cmVzcG9uc2libGUgZm9yIHN3aXRjaGluZyB0byB0aGUgYXBwcm9wcmlhdGUgbWVtb3J5IGNvbnRl eHQ7CisgKiB0aGUgcHJvdmlkZWQgb2JqZWN0IHNob3VsZCBoYXZlIGJlZW4gYWxsb2NhdGVkIGlu IHRoYXQgc2FtZSBjb250ZXh0LgorICovCitzdGF0aWMgdm9pZAorcGdwYV9zdG9yZV9sb2NhbF9h ZHZpY2UocGdwYV9jb2xsZWN0ZWRfYWR2aWNlICpjYSkKK3sKKwl1aW50NjQJCWNodW5rX251bWJl cjsKKwl1aW50NjQJCWNodW5rX29mZnNldDsKKwlwZ3BhX2xvY2FsX2FkdmljZSAqbGEgPSBsb2Nh bF9jb2xsZWN0b3I7CisKKwkvKiBJZiB0aGUgbG9jYWwgYWR2aWNlIGNvbGxlY3RvciBpc24ndCBp bml0aWFsaXplZCB5ZXQsIGRvIHRoYXQgbm93LiAqLworCWlmIChsYSA9PSBOVUxMKQorCXsKKwkJ bGEgPSBwYWxsb2MwKHNpemVvZihwZ3BhX2xvY2FsX2FkdmljZSkpOworCQlsYS0+Y2h1bmtfYXJy YXlfYWxsb2NhdGVkX3NpemUgPSBBRFZJQ0VfQ0hVTktfQVJSQVlfU0laRTsKKwkJbGEtPmNodW5r cyA9IHBhbGxvYzBfYXJyYXkocGdwYV9sb2NhbF9hZHZpY2VfY2h1bmsgKiwKKwkJCQkJCQkJICAg bGEtPmNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplKTsKKwkJbG9jYWxfY29sbGVjdG9yID0gbGE7 CisJfQorCisJLyogQ29tcHV0ZSBjaHVuayBhbmQgb2Zmc2V0IGF0IHdoaWNoIHRvIHN0b3JlIHRo aXMgYWR2aWNlLiAqLworCWNodW5rX251bWJlciA9IChsYS0+bmV4dF9pZCAtIGxhLT5iYXNlX2lk KSAvIEFEVklDRV9DSFVOS19TSVpFOworCWNodW5rX29mZnNldCA9IChsYS0+bmV4dF9pZCAtIGxh LT5iYXNlX2lkKSAlIEFEVklDRV9DSFVOS19TSVpFOworCisJLyogRXh0ZW5kIGNodW5rIGFycmF5 LCBpZiBuZWVkZWQuICovCisJaWYgKGNodW5rX251bWJlciA+PSBsYS0+Y2h1bmtfYXJyYXlfYWxs b2NhdGVkX3NpemUpCisJeworCQlpbnQJCQluZXdfc2l6ZTsKKworCQluZXdfc2l6ZSA9IGxhLT5j aHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZSArIEFEVklDRV9DSFVOS19BUlJBWV9TSVpFOworCQls YS0+Y2h1bmtzID0gcmVwYWxsb2MwX2FycmF5KGxhLT5jaHVua3MsCisJCQkJCQkJCQkgcGdwYV9s b2NhbF9hZHZpY2VfY2h1bmsgKiwKKwkJCQkJCQkJCSBsYS0+Y2h1bmtfYXJyYXlfYWxsb2NhdGVk X3NpemUsCisJCQkJCQkJCQkgbmV3X3NpemUpOworCQlsYS0+Y2h1bmtfYXJyYXlfYWxsb2NhdGVk X3NpemUgPSBuZXdfc2l6ZTsKKwl9CisKKwkvKiBBbGxvY2F0ZSBuZXcgY2h1bmssIGlmIG5lZWRl ZC4gKi8KKwlpZiAobGEtPmNodW5rc1tjaHVua19udW1iZXJdID09IE5VTEwpCisJCWxhLT5jaHVu a3NbY2h1bmtfbnVtYmVyXSA9IHBhbGxvYzBfb2JqZWN0KHBncGFfbG9jYWxfYWR2aWNlX2NodW5r KTsKKworCS8qIFNhdmUgcG9pbnRlciBhbmQgYnVtcCBuZXh0LWlkIGNvdW50ZXIuICovCisJQXNz ZXJ0KGxhLT5jaHVua3NbY2h1bmtfbnVtYmVyXS0+ZW50cmllc1tjaHVua19vZmZzZXRdID09IE5V TEwpOworCWxhLT5jaHVua3NbY2h1bmtfbnVtYmVyXS0+ZW50cmllc1tjaHVua19vZmZzZXRdID0g Y2E7CisJKytsYS0+bmV4dF9pZDsKKworCS8qIElmIHdlJ3ZlIGV4Y2VlZGVkIHRoZSBzdG9yYWdl IGxpbWl0LCBkaXNjYXJkIG9sZCBkYXRhLiAqLworCXBncGFfdHJpbV9sb2NhbF9hZHZpY2UocGdf cGxhbl9hZHZpY2VfbG9jYWxfY29sbGVjdGlvbl9saW1pdCk7Cit9CisKKy8qCisgKiBBZGQgYSBw Z19jb2xsZWN0ZWRfYWR2aWNlIG9iamVjdCB0byB0aGUgc2hhcmVkIGFkdmljZSBjb2xsZWN0aW9u LgorICoKKyAqICdjYV9wb2ludGVyJyBzaG91bGQgaGF2ZSBiZWVuIGFsbG9jYXRlZCBmcm9tIHRo ZSBwZ19wbGFuX2FkdmljZSBEU0EgYXJlYQorICogYW5kIHNob3VsZCBwb2ludCB0byBhbiBvYmpl Y3Qgb2YgdHlwZSBwZ3BhX2NvbGxlY3RlZF9hZHZpY2UuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3Bh X3N0b3JlX3NoYXJlZF9hZHZpY2UoZHNhX3BvaW50ZXIgY2FfcG9pbnRlcikKK3sKKwl1aW50NjQJ CWNodW5rX251bWJlcjsKKwl1aW50NjQJCWNodW5rX29mZnNldDsKKwlwZ3BhX3NoYXJlZF9zdGF0 ZSAqc3RhdGUgPSBwZ19wbGFuX2FkdmljZV9hdHRhY2goKTsKKwlkc2FfYXJlYSAgICphcmVhID0g cGdfcGxhbl9hZHZpY2VfZHNhX2FyZWEoKTsKKwlwZ3BhX3NoYXJlZF9hZHZpY2UgKnNhID0gc2hh cmVkX2NvbGxlY3RvcjsKKwlkc2FfcG9pbnRlciAqY2h1bmtfYXJyYXk7CisJcGdwYV9zaGFyZWRf YWR2aWNlX2NodW5rICpjaHVuazsKKworCS8qIExvY2sgdGhlIHNoYXJlZCBzdGF0ZS4gKi8KKwlM V0xvY2tBY3F1aXJlKCZzdGF0ZS0+bG9jaywgTFdfRVhDTFVTSVZFKTsKKworCS8qCisJICogSWYg d2UncmUgbm90IGF0dGFjaGVkIHRvIHRoZSBzaGFyZWQgYWR2aWNlIGNvbGxlY3RvciB5ZXQsIGZp eCB0aGF0IG5vdy4KKwkgKiBJZiB3ZSdyZSB0aGUgZmlyc3Qgb25lcyB0byBhdHRhY2gsIHdlIG1h eSBuZWVkIHRvIGNyZWF0ZSB0aGUgb2JqZWN0LgorCSAqLworCWlmIChzYSA9PSBOVUxMKQorCXsK KwkJaWYgKHN0YXRlLT5zaGFyZWRfY29sbGVjdG9yID09IEludmFsaWREc2FQb2ludGVyKQorCQkJ c3RhdGUtPnNoYXJlZF9jb2xsZWN0b3IgPQorCQkJCWRzYV9hbGxvY2F0ZTAoYXJlYSwgc2l6ZW9m KHBncGFfc2hhcmVkX2FkdmljZSkpOworCQlzaGFyZWRfY29sbGVjdG9yID0gc2EgPSBkc2FfZ2V0 X2FkZHJlc3MoYXJlYSwgc3RhdGUtPnNoYXJlZF9jb2xsZWN0b3IpOworCX0KKworCS8qCisJICog SXQncyBwb3NzaWJsZSB0aGF0IHNvbWUgb3RoZXIgYmFja2VuZCBtYXkgaGF2ZSBzdWNjZWVkZWQg aW4gY3JlYXRpbmcKKwkgKiB0aGUgbWFpbiBjb2xsZWN0b3Igb2JqZWN0IGJ1dCBmYWlsZWQgdG8g YWxsb2NhdGUgYW4gaW5pdGlhbCBjaHVuaworCSAqIGFycmF5LCBzbyB3ZSBtdXN0IGJlIHByZXBh cmVkIHRvIGFsbG9jYXRlIHRoZSBjaHVuayBhcnJheSBoZXJlIHdoZXRoZXIKKwkgKiBvciBub3Qg d2UgY3JlYXRlZCB0aGUgY29sbGVjdG9yIG9iamVjdC4KKwkgKi8KKwlpZiAoc2hhcmVkX2NvbGxl Y3Rvci0+Y2h1bmtfYXJyYXlfYWxsb2NhdGVkX3NpemUgPT0gMCkKKwl7CisJCXNhLT5jaHVua3Mg PQorCQkJZHNhX2FsbG9jYXRlMChhcmVhLAorCQkJCQkJICBzaXplb2YoZHNhX3BvaW50ZXIpICog QURWSUNFX0NIVU5LX0FSUkFZX1NJWkUpOworCQlzYS0+Y2h1bmtfYXJyYXlfYWxsb2NhdGVkX3Np emUgPSBBRFZJQ0VfQ0hVTktfQVJSQVlfU0laRTsKKwl9CisKKwkvKiBDb21wdXRlIGNodW5rIGFu ZCBvZmZzZXQgYXQgd2hpY2ggdG8gc3RvcmUgdGhpcyBhZHZpY2UuICovCisJY2h1bmtfbnVtYmVy ID0gKHNhLT5uZXh0X2lkIC0gc2EtPmJhc2VfaWQpIC8gQURWSUNFX0NIVU5LX1NJWkU7CisJY2h1 bmtfb2Zmc2V0ID0gKHNhLT5uZXh0X2lkIC0gc2EtPmJhc2VfaWQpICUgQURWSUNFX0NIVU5LX1NJ WkU7CisKKwkvKiBHZXQgdGhlIGFkZHJlc3Mgb2YgdGhlIGNodW5rIGFycmF5IGFuZCwgaWYgbmVl ZGVkLCBleHRlbmQgaXQuICovCisJaWYgKGNodW5rX251bWJlciA+PSBzYS0+Y2h1bmtfYXJyYXlf YWxsb2NhdGVkX3NpemUpCisJeworCQlpbnQJCQluZXdfc2l6ZTsKKwkJZHNhX3BvaW50ZXIgbmV3 X2NodW5rczsKKworCQkvKgorCQkgKiBEU0EgY2FuJ3QgZW5sYXJnZSBhbiBleGlzdGluZyBhbGxv Y2F0aW9uLCBzbyB3ZSBtdXN0IG1ha2UgYSBuZXcKKwkJICogYWxsb2NhdGlvbiBhbmQgY29weSBk YXRhIG92ZXIuCisJCSAqLworCQluZXdfc2l6ZSA9IHNhLT5jaHVua19hcnJheV9hbGxvY2F0ZWRf c2l6ZSArIEFEVklDRV9DSFVOS19BUlJBWV9TSVpFOworCQluZXdfY2h1bmtzID0gZHNhX2FsbG9j YXRlMChhcmVhLCBzaXplb2YoZHNhX3BvaW50ZXIpICogbmV3X3NpemUpOworCQljaHVua19hcnJh eSA9IGRzYV9nZXRfYWRkcmVzcyhhcmVhLCBuZXdfY2h1bmtzKTsKKwkJbWVtY3B5KGNodW5rX2Fy cmF5LCBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgc2EtPmNodW5rcyksCisJCQkgICBzaXplb2YoZHNh X3BvaW50ZXIpICogc2EtPmNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplKTsKKwkJZHNhX2ZyZWUo YXJlYSwgc2EtPmNodW5rcyk7CisJCXNhLT5jaHVua3MgPSBuZXdfY2h1bmtzOworCQlzYS0+Y2h1 bmtfYXJyYXlfYWxsb2NhdGVkX3NpemUgPSBuZXdfc2l6ZTsKKwl9CisJZWxzZQorCQljaHVua19h cnJheSA9IGRzYV9nZXRfYWRkcmVzcyhhcmVhLCBzYS0+Y2h1bmtzKTsKKworCS8qIEdldCB0aGUg YWRkcmVzcyBvZiB0aGUgZGVzaXJlZCBjaHVuaywgYWxsb2NhdGluZyBpdCBpZiBuZWVkZWQuICov CisJaWYgKGNodW5rX2FycmF5W2NodW5rX251bWJlcl0gPT0gSW52YWxpZERzYVBvaW50ZXIpCisJ CWNodW5rX2FycmF5W2NodW5rX251bWJlcl0gPQorCQkJZHNhX2FsbG9jYXRlMChhcmVhLCBzaXpl b2YocGdwYV9zaGFyZWRfYWR2aWNlX2NodW5rKSk7CisJY2h1bmsgPSBkc2FfZ2V0X2FkZHJlc3Mo YXJlYSwgY2h1bmtfYXJyYXlbY2h1bmtfbnVtYmVyXSk7CisKKwkvKiBTYXZlIHBvaW50ZXIgYW5k IGJ1bXAgbmV4dC1pZCBjb3VudGVyLiAqLworCUFzc2VydChjaHVuay0+ZW50cmllc1tjaHVua19v ZmZzZXRdID09IEludmFsaWREc2FQb2ludGVyKTsKKwljaHVuay0+ZW50cmllc1tjaHVua19vZmZz ZXRdID0gY2FfcG9pbnRlcjsKKwkrK3NhLT5uZXh0X2lkOworCisJLyogSWYgd2UndmUgZXhjZWVk ZWQgdGhlIHN0b3JhZ2UgbGltaXQsIGRpc2NhcmQgb2xkIGRhdGEuICovCisJcGdwYV90cmltX3No YXJlZF9hZHZpY2UoYXJlYSwgcGdfcGxhbl9hZHZpY2Vfc2hhcmVkX2NvbGxlY3Rpb25fbGltaXQp OworCisJLyogUmVsZWFzZSBsb2NrIG9uIHNoYXJlZCBzdGF0ZS4gKi8KKwlMV0xvY2tSZWxlYXNl KCZzdGF0ZS0+bG9jayk7Cit9CisKKy8qCisgKiBEaXNjYXJkIGNvbGxlY3RlZCBhZHZpY2Ugc3Rv cmVkIGluIGJhY2tlbmQtbG9jYWwgbWVtb3J5IGluIGV4Y2VzcyBvZiB0aGUKKyAqIHNwZWNpZmll ZCBsaW1pdC4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfdHJpbV9sb2NhbF9hZHZpY2UoaW50IGxp bWl0KQoreworCXBncGFfbG9jYWxfYWR2aWNlICpsYSA9IGxvY2FsX2NvbGxlY3RvcjsKKwl1aW50 NjQJCWN1cnJlbnRfY291bnQ7CisJdWludDY0CQl0cmltX2NvdW50OworCXVpbnQ2NAkJdG90YWxf Y2h1bmtfY291bnQ7CisJdWludDY0CQl0cmltX2NodW5rX2NvdW50OworCXVpbnQ2NAkJcmVtYWlu aW5nX2NodW5rX2NvdW50OworCisJLyogSWYgd2UgaGF2ZW4ndCB5ZXQgcmVhY2hlZCB0aGUgbGlt aXQsIHRoZXJlJ3Mgbm90aGluZyB0byBkby4gKi8KKwljdXJyZW50X2NvdW50ID0gbGEtPm5leHRf aWQgLSBsYS0+b2xkZXN0X2lkOworCWlmIChjdXJyZW50X2NvdW50IDw9IGxpbWl0KQorCQlyZXR1 cm47CisKKwkvKiBGcmVlIGVub3VnaCBlbnRyaWVzIHRvIGdldCB1cyBiYWNrIGRvd24gdG8gdGhl IGxpbWl0LiAqLworCXRyaW1fY291bnQgPSBjdXJyZW50X2NvdW50IC0gbGltaXQ7CisJd2hpbGUg KHRyaW1fY291bnQgPiAwKQorCXsKKwkJdWludDY0CQljaHVua19udW1iZXI7CisJCXVpbnQ2NAkJ Y2h1bmtfb2Zmc2V0OworCisJCWNodW5rX251bWJlciA9IChsYS0+b2xkZXN0X2lkIC0gbGEtPmJh c2VfaWQpIC8gQURWSUNFX0NIVU5LX1NJWkU7CisJCWNodW5rX29mZnNldCA9IChsYS0+b2xkZXN0 X2lkIC0gbGEtPmJhc2VfaWQpICUgQURWSUNFX0NIVU5LX1NJWkU7CisKKwkJQXNzZXJ0KGxhLT5j aHVua3NbY2h1bmtfbnVtYmVyXS0+ZW50cmllc1tjaHVua19vZmZzZXRdICE9IE5VTEwpOworCQlw ZnJlZShsYS0+Y2h1bmtzW2NodW5rX251bWJlcl0tPmVudHJpZXNbY2h1bmtfb2Zmc2V0XSk7CisJ CWxhLT5jaHVua3NbY2h1bmtfbnVtYmVyXS0+ZW50cmllc1tjaHVua19vZmZzZXRdID0gTlVMTDsK KwkJKytsYS0+b2xkZXN0X2lkOworCQktLXRyaW1fY291bnQ7CisJfQorCisJLyogRnJlZSBhbnkg Y2h1bmtzIHRoYXQgYXJlIG5vdyBlbnRpcmVseSB1bnVzZWQuICovCisJdHJpbV9jaHVua19jb3Vu dCA9IChsYS0+b2xkZXN0X2lkIC0gbGEtPmJhc2VfaWQpIC8gQURWSUNFX0NIVU5LX1NJWkU7CisJ Zm9yICh1aW50NjQgbiA9IDA7IG4gPCB0cmltX2NodW5rX2NvdW50OyArK24pCisJCXBmcmVlKGxh LT5jaHVua3Nbbl0pOworCisJLyogU2xpZGUgcmVtYWluaW5nIGNodW5rIHBvaW50ZXJzIGJhY2sg dG93YXJkIHRoZSBiYXNlIG9mIHRoZSBhcnJheS4gKi8KKwl0b3RhbF9jaHVua19jb3VudCA9IChs YS0+bmV4dF9pZCAtIGxhLT5iYXNlX2lkICsKKwkJCQkJCSBBRFZJQ0VfQ0hVTktfU0laRSAtIDEp IC8gQURWSUNFX0NIVU5LX1NJWkU7CisJcmVtYWluaW5nX2NodW5rX2NvdW50ID0gdG90YWxfY2h1 bmtfY291bnQgLSB0cmltX2NodW5rX2NvdW50OworCWlmIChyZW1haW5pbmdfY2h1bmtfY291bnQg PiAwKQorCQltZW1tb3ZlKCZsYS0+Y2h1bmtzWzBdLCAmbGEtPmNodW5rc1t0cmltX2NodW5rX2Nv dW50XSwKKwkJCQlzaXplb2YocGdwYV9sb2NhbF9hZHZpY2VfY2h1bmsgKikgKiByZW1haW5pbmdf Y2h1bmtfY291bnQpOworCisJLyogRG9uJ3QgbGVhdmUgc3RhbGUgcG9pbnRlcnMgYXJvdW5kLiAq LworCW1lbXNldCgmbGEtPmNodW5rc1tyZW1haW5pbmdfY2h1bmtfY291bnRdLCAwLAorCQkgICBz aXplb2YocGdwYV9sb2NhbF9hZHZpY2VfY2h1bmsgKikKKwkJICAgKiAodG90YWxfY2h1bmtfY291 bnQgLSByZW1haW5pbmdfY2h1bmtfY291bnQpKTsKKworCS8qIEFkanVzdCBiYXNlIElEIHZhbHVl IGFjY29yZGluZ2x5LiAqLworCWxhLT5iYXNlX2lkICs9IHRyaW1fY2h1bmtfY291bnQgKiBBRFZJ Q0VfQ0hVTktfU0laRTsKK30KKworLyoKKyAqIERpc2NhcmQgY29sbGVjdGVkIGFkdmljZSBzdG9y ZWQgaW4gc2hhcmVkIG1lbW9yeSBpbiBleGNlc3Mgb2YgdGhlCisgKiBzcGVjaWZpZWQgbGltaXQu CisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3RyaW1fc2hhcmVkX2FkdmljZShkc2FfYXJlYSAqYXJl YSwgaW50IGxpbWl0KQoreworCXBncGFfc2hhcmVkX2FkdmljZSAqc2EgPSBzaGFyZWRfY29sbGVj dG9yOworCXVpbnQ2NAkJY3VycmVudF9jb3VudDsKKwl1aW50NjQJCXRyaW1fY291bnQ7CisJdWlu dDY0CQl0b3RhbF9jaHVua19jb3VudDsKKwl1aW50NjQJCXRyaW1fY2h1bmtfY291bnQ7CisJdWlu dDY0CQlyZW1haW5pbmdfY2h1bmtfY291bnQ7CisJZHNhX3BvaW50ZXIgKmNodW5rX2FycmF5Owor CisJLyogSWYgd2UgaGF2ZW4ndCB5ZXQgcmVhY2hlZCB0aGUgbGltaXQsIHRoZXJlJ3Mgbm90aGlu ZyB0byBkby4gKi8KKwljdXJyZW50X2NvdW50ID0gc2EtPm5leHRfaWQgLSBzYS0+b2xkZXN0X2lk OworCWlmIChjdXJyZW50X2NvdW50IDw9IGxpbWl0KQorCQlyZXR1cm47CisKKwkvKiBHZXQgYSBw b2ludGVyIHRvIHRoZSBjaHVuayBhcnJheS4gKi8KKwljaHVua19hcnJheSA9IGRzYV9nZXRfYWRk cmVzcyhhcmVhLCBzYS0+Y2h1bmtzKTsKKworCS8qIEZyZWUgZW5vdWdoIGVudHJpZXMgdG8gZ2V0 IHVzIGJhY2sgZG93biB0byB0aGUgbGltaXQuICovCisJdHJpbV9jb3VudCA9IGN1cnJlbnRfY291 bnQgLSBsaW1pdDsKKwl3aGlsZSAodHJpbV9jb3VudCA+IDApCisJeworCQl1aW50NjQJCWNodW5r X251bWJlcjsKKwkJdWludDY0CQljaHVua19vZmZzZXQ7CisJCXBncGFfc2hhcmVkX2FkdmljZV9j aHVuayAqY2h1bms7CisKKwkJY2h1bmtfbnVtYmVyID0gKHNhLT5vbGRlc3RfaWQgLSBzYS0+YmFz ZV9pZCkgLyBBRFZJQ0VfQ0hVTktfU0laRTsKKwkJY2h1bmtfb2Zmc2V0ID0gKHNhLT5vbGRlc3Rf aWQgLSBzYS0+YmFzZV9pZCkgJSBBRFZJQ0VfQ0hVTktfU0laRTsKKworCQljaHVuayA9IGRzYV9n ZXRfYWRkcmVzcyhhcmVhLCBjaHVua19hcnJheVtjaHVua19udW1iZXJdKTsKKwkJQXNzZXJ0KGNo dW5rLT5lbnRyaWVzW2NodW5rX29mZnNldF0gIT0gSW52YWxpZERzYVBvaW50ZXIpOworCQlkc2Ff ZnJlZShhcmVhLCBjaHVuay0+ZW50cmllc1tjaHVua19vZmZzZXRdKTsKKwkJY2h1bmstPmVudHJp ZXNbY2h1bmtfb2Zmc2V0XSA9IEludmFsaWREc2FQb2ludGVyOworCQkrK3NhLT5vbGRlc3RfaWQ7 CisJCS0tdHJpbV9jb3VudDsKKwl9CisKKwkvKiBGcmVlIGFueSBjaHVua3MgdGhhdCBhcmUgbm93 IGVudGlyZWx5IHVudXNlZC4gKi8KKwl0cmltX2NodW5rX2NvdW50ID0gKHNhLT5vbGRlc3RfaWQg LSBzYS0+YmFzZV9pZCkgLyBBRFZJQ0VfQ0hVTktfU0laRTsKKwlmb3IgKHVpbnQ2NCBuID0gMDsg biA8IHRyaW1fY2h1bmtfY291bnQ7ICsrbikKKwkJZHNhX2ZyZWUoYXJlYSwgY2h1bmtfYXJyYXlb bl0pOworCisJLyogU2xpZGUgcmVtYWluaW5nIGNodW5rIHBvaW50ZXJzIGJhY2sgdG93YXJkIHRo ZSBiYXNlIG9mIHRoZSBhcnJheS4gKi8KKwl0b3RhbF9jaHVua19jb3VudCA9IChzYS0+bmV4dF9p ZCAtIHNhLT5iYXNlX2lkICsKKwkJCQkJCSBBRFZJQ0VfQ0hVTktfU0laRSAtIDEpIC8gQURWSUNF X0NIVU5LX1NJWkU7CisJcmVtYWluaW5nX2NodW5rX2NvdW50ID0gdG90YWxfY2h1bmtfY291bnQg LSB0cmltX2NodW5rX2NvdW50OworCWlmIChyZW1haW5pbmdfY2h1bmtfY291bnQgPiAwKQorCQlt ZW1tb3ZlKCZjaHVua19hcnJheVswXSwgJmNodW5rX2FycmF5W3RyaW1fY2h1bmtfY291bnRdLAor CQkJCXNpemVvZihkc2FfcG9pbnRlcikgKiByZW1haW5pbmdfY2h1bmtfY291bnQpOworCisJLyog RG9uJ3QgbGVhdmUgc3RhbGUgcG9pbnRlcnMgYXJvdW5kLiAqLworCW1lbXNldCgmY2h1bmtfYXJy YXlbcmVtYWluaW5nX2NodW5rX2NvdW50XSwgMCwKKwkJICAgc2l6ZW9mKHBncGFfc2hhcmVkX2Fk dmljZV9jaHVuayAqKQorCQkgICAqICh0b3RhbF9jaHVua19jb3VudCAtIHJlbWFpbmluZ19jaHVu a19jb3VudCkpOworCisJLyogQWRqdXN0IGJhc2UgSUQgdmFsdWUgYWNjb3JkaW5nbHkuICovCisJ c2EtPmJhc2VfaWQgKz0gdHJpbV9jaHVua19jb3VudCAqIEFEVklDRV9DSFVOS19TSVpFOworfQor CisvKgorICogU1FMLWNhbGxhYmxlIGZ1bmN0aW9uIHRvIGRpc2NhcmQgYWR2aWNlIGNvbGxlY3Rl ZCBpbiBiYWNrZW5kLWxvY2FsIG1lbW9yeQorICovCitEYXR1bQorcGdfY2xlYXJfY29sbGVjdGVk X2xvY2FsX2FkdmljZShQR19GVU5DVElPTl9BUkdTKQoreworCWlmIChsb2NhbF9jb2xsZWN0b3Ig IT0gTlVMTCkKKwkJcGdwYV90cmltX2xvY2FsX2FkdmljZSgwKTsKKworCVBHX1JFVFVSTl9WT0lE KCk7Cit9CisKKy8qCisgKiBTUUwtY2FsbGFibGUgZnVuY3Rpb24gdG8gZGlzY2FyZCBhZHZpY2Ug Y29sbGVjdGVkIGluIGJhY2tlbmQtbG9jYWwgbWVtb3J5CisgKi8KK0RhdHVtCitwZ19jbGVhcl9j b2xsZWN0ZWRfc2hhcmVkX2FkdmljZShQR19GVU5DVElPTl9BUkdTKQoreworCXBncGFfc2hhcmVk X3N0YXRlICpzdGF0ZSA9IHBnX3BsYW5fYWR2aWNlX2F0dGFjaCgpOworCWRzYV9hcmVhICAgKmFy ZWEgPSBwZ19wbGFuX2FkdmljZV9kc2FfYXJlYSgpOworCisJTFdMb2NrQWNxdWlyZSgmc3RhdGUt PmxvY2ssIExXX0VYQ0xVU0lWRSk7CisKKwkvKgorCSAqIElmIHdlJ3JlIG5vdCBhdHRhY2hlZCB0 byB0aGUgc2hhcmVkIGFkdmljZSBjb2xsZWN0b3IgeWV0LCBmaXggdGhhdCBub3c7CisJICogYnV0 IGlmIHRoZSBjb2xsZWN0b3IgZG9lc24ndCBldmVuIGV4aXN0LCB3ZSBjYW4gcmV0dXJuIHdpdGhv dXQgZG9pbmcKKwkgKiBhbnl0aGluZyBlbHNlLgorCSAqLworCWlmIChzaGFyZWRfY29sbGVjdG9y ID09IE5VTEwpCisJeworCQlpZiAoc3RhdGUtPnNoYXJlZF9jb2xsZWN0b3IgPT0gSW52YWxpZERz YVBvaW50ZXIpCisJCXsKKwkJCUxXTG9ja1JlbGVhc2UoJnN0YXRlLT5sb2NrKTsKKwkJCXJldHVy biAoRGF0dW0pIDA7CisJCX0KKwkJc2hhcmVkX2NvbGxlY3RvciA9IGRzYV9nZXRfYWRkcmVzcyhh cmVhLCBzdGF0ZS0+c2hhcmVkX2NvbGxlY3Rvcik7CisJfQorCisJLyogRG8gdGhlIHJlYWwgd29y ayAqLworCXBncGFfdHJpbV9zaGFyZWRfYWR2aWNlKGFyZWEsIDApOworCisJTFdMb2NrUmVsZWFz ZSgmc3RhdGUtPmxvY2spOworCisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KKworLyoKKyAqIFNRTC1j YWxsYWJsZSBTUkYgdG8gcmV0dXJuIGFkdmljZSBjb2xsZWN0ZWQgaW4gYmFja2VuZC1sb2NhbCBt ZW1vcnkKKyAqLworRGF0dW0KK3BnX2dldF9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKFBHX0ZVTkNU SU9OX0FSR1MpCit7CisJUmV0dXJuU2V0SW5mbyAqcnNpbmZvID0gKFJldHVyblNldEluZm8gKikg ZmNpbmZvLT5yZXN1bHRpbmZvOworCXBncGFfbG9jYWxfYWR2aWNlICpsYSA9IGxvY2FsX2NvbGxl Y3RvcjsKKwlPaWQJCQl1c2VyaWQgPSBHZXRVc2VySWQoKTsKKworCUluaXRNYXRlcmlhbGl6ZWRT UkYoZmNpbmZvLCAwKTsKKworCWlmIChsYSA9PSBOVUxMKQorCQlyZXR1cm4gKERhdHVtKSAwOwor CisJLyogTG9vcCBvdmVyIGFsbCBlbnRyaWVzLiAqLworCWZvciAodWludDY0IGlkID0gbGEtPm9s ZGVzdF9pZDsgaWQgPCBsYS0+bmV4dF9pZDsgKytpZCkKKwl7CisJCXVpbnQ2NAkJY2h1bmtfbnVt YmVyOworCQl1aW50NjQJCWNodW5rX29mZnNldDsKKwkJcGdwYV9jb2xsZWN0ZWRfYWR2aWNlICpj YTsKKwkJRGF0dW0JCXZhbHVlc1tQR19HRVRfQURWSUNFX0NPTFVNTlNdOworCQlib29sCQludWxs c1tQR19HRVRfQURWSUNFX0NPTFVNTlNdID0gezB9OworCisJCWNodW5rX251bWJlciA9IChpZCAt IGxhLT5iYXNlX2lkKSAvIEFEVklDRV9DSFVOS19TSVpFOworCQljaHVua19vZmZzZXQgPSAoaWQg LSBsYS0+YmFzZV9pZCkgJSBBRFZJQ0VfQ0hVTktfU0laRTsKKworCQljYSA9IGxhLT5jaHVua3Nb Y2h1bmtfbnVtYmVyXS0+ZW50cmllc1tjaHVua19vZmZzZXRdOworCisJCWlmICghbWVtYmVyX2Nh bl9zZXRfcm9sZSh1c2VyaWQsIGNhLT51c2VyaWQpKQorCQkJY29udGludWU7CisKKwkJdmFsdWVz WzBdID0gVUludDY0R2V0RGF0dW0oaWQpOworCQl2YWx1ZXNbMV0gPSBPYmplY3RJZEdldERhdHVt KGNhLT51c2VyaWQpOworCQl2YWx1ZXNbMl0gPSBPYmplY3RJZEdldERhdHVtKGNhLT5kYmlkKTsK KwkJdmFsdWVzWzNdID0gVUludDY0R2V0RGF0dW0oY2EtPnF1ZXJ5aWQpOworCQl2YWx1ZXNbNF0g PSBUaW1lc3RhbXBHZXREYXR1bShjYS0+dGltZXN0YW1wKTsKKwkJdmFsdWVzWzVdID0gQ1N0cmlu Z0dldFRleHREYXR1bShxdWVyeV9zdHJpbmcoY2EpKTsKKwkJdmFsdWVzWzZdID0gQ1N0cmluZ0dl dFRleHREYXR1bShhZHZpY2Vfc3RyaW5nKGNhKSk7CisKKwkJdHVwbGVzdG9yZV9wdXR2YWx1ZXMo cnNpbmZvLT5zZXRSZXN1bHQsIHJzaW5mby0+c2V0RGVzYywKKwkJCQkJCQkgdmFsdWVzLCBudWxs cyk7CisJfQorCisJcmV0dXJuIChEYXR1bSkgMDsKK30KKworLyoKKyAqIFNRTC1jYWxsYWJsZSBT UkYgdG8gcmV0dXJuIGFkdmljZSBjb2xsZWN0ZWQgaW4gc2hhcmVkIG1lbW9yeQorICovCitEYXR1 bQorcGdfZ2V0X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJ UmV0dXJuU2V0SW5mbyAqcnNpbmZvID0gKFJldHVyblNldEluZm8gKikgZmNpbmZvLT5yZXN1bHRp bmZvOworCXBncGFfc2hhcmVkX3N0YXRlICpzdGF0ZSA9IHBnX3BsYW5fYWR2aWNlX2F0dGFjaCgp OworCWRzYV9hcmVhICAgKmFyZWEgPSBwZ19wbGFuX2FkdmljZV9kc2FfYXJlYSgpOworCWRzYV9w b2ludGVyICpjaHVua19hcnJheTsKKwlwZ3BhX3NoYXJlZF9hZHZpY2UgKnNhID0gc2hhcmVkX2Nv bGxlY3RvcjsKKworCUluaXRNYXRlcmlhbGl6ZWRTUkYoZmNpbmZvLCAwKTsKKworCS8qIExvY2sg dGhlIHNoYXJlZCBzdGF0ZS4gKi8KKwlMV0xvY2tBY3F1aXJlKCZzdGF0ZS0+bG9jaywgTFdfU0hB UkVEKTsKKworCS8qCisJICogSWYgd2UncmUgbm90IGF0dGFjaGVkIHRvIHRoZSBzaGFyZWQgYWR2 aWNlIGNvbGxlY3RvciB5ZXQsIGZpeCB0aGF0IG5vdzsKKwkgKiBidXQgaWYgdGhlIGNvbGxlY3Rv ciBkb2Vzbid0IGV2ZW4gZXhpc3QsIHdlIGNhbiByZXR1cm4gd2l0aG91dCBkb2luZworCSAqIGFu eXRoaW5nIGVsc2UuCisJICovCisJaWYgKHNhID09IE5VTEwpCisJeworCQlpZiAoc3RhdGUtPnNo YXJlZF9jb2xsZWN0b3IgPT0gSW52YWxpZERzYVBvaW50ZXIpCisJCXsKKwkJCUxXTG9ja1JlbGVh c2UoJnN0YXRlLT5sb2NrKTsKKwkJCXJldHVybiAoRGF0dW0pIDA7CisJCX0KKwkJc2hhcmVkX2Nv bGxlY3RvciA9IHNhID0gZHNhX2dldF9hZGRyZXNzKGFyZWEsIHN0YXRlLT5zaGFyZWRfY29sbGVj dG9yKTsKKwl9CisKKwkvKiBHZXQgYSBwb2ludGVyIHRvIHRoZSBjaHVuayBhcnJheS4gKi8KKwlj aHVua19hcnJheSA9IGRzYV9nZXRfYWRkcmVzcyhhcmVhLCBzYS0+Y2h1bmtzKTsKKworCS8qIExv b3Agb3ZlciBhbGwgZW50cmllcy4gKi8KKwlmb3IgKHVpbnQ2NCBpZCA9IHNhLT5vbGRlc3RfaWQ7 IGlkIDwgc2EtPm5leHRfaWQ7ICsraWQpCisJeworCQl1aW50NjQJCWNodW5rX251bWJlcjsKKwkJ dWludDY0CQljaHVua19vZmZzZXQ7CisJCXBncGFfc2hhcmVkX2FkdmljZV9jaHVuayAqY2h1bms7 CisJCXBncGFfY29sbGVjdGVkX2FkdmljZSAqY2E7CisJCURhdHVtCQl2YWx1ZXNbUEdfR0VUX0FE VklDRV9DT0xVTU5TXTsKKwkJYm9vbAkJbnVsbHNbUEdfR0VUX0FEVklDRV9DT0xVTU5TXSA9IHsw fTsKKworCQljaHVua19udW1iZXIgPSAoaWQgLSBzYS0+YmFzZV9pZCkgLyBBRFZJQ0VfQ0hVTktf U0laRTsKKwkJY2h1bmtfb2Zmc2V0ID0gKGlkIC0gc2EtPmJhc2VfaWQpICUgQURWSUNFX0NIVU5L X1NJWkU7CisKKwkJY2h1bmsgPSBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgY2h1bmtfYXJyYXlbY2h1 bmtfbnVtYmVyXSk7CisJCWNhID0gZHNhX2dldF9hZGRyZXNzKGFyZWEsIGNodW5rLT5lbnRyaWVz W2NodW5rX29mZnNldF0pOworCisJCXZhbHVlc1swXSA9IFVJbnQ2NEdldERhdHVtKGlkKTsKKwkJ dmFsdWVzWzFdID0gT2JqZWN0SWRHZXREYXR1bShjYS0+dXNlcmlkKTsKKwkJdmFsdWVzWzJdID0g T2JqZWN0SWRHZXREYXR1bShjYS0+ZGJpZCk7CisJCXZhbHVlc1szXSA9IFVJbnQ2NEdldERhdHVt KGNhLT5xdWVyeWlkKTsKKwkJdmFsdWVzWzRdID0gVGltZXN0YW1wR2V0RGF0dW0oY2EtPnRpbWVz dGFtcCk7CisJCXZhbHVlc1s1XSA9IENTdHJpbmdHZXRUZXh0RGF0dW0ocXVlcnlfc3RyaW5nKGNh KSk7CisJCXZhbHVlc1s2XSA9IENTdHJpbmdHZXRUZXh0RGF0dW0oYWR2aWNlX3N0cmluZyhjYSkp OworCisJCXR1cGxlc3RvcmVfcHV0dmFsdWVzKHJzaW5mby0+c2V0UmVzdWx0LCByc2luZm8tPnNl dERlc2MsCisJCQkJCQkJIHZhbHVlcywgbnVsbHMpOworCX0KKworCS8qIFJlbGVhc2UgbG9jayBv biBzaGFyZWQgc3RhdGUuICovCisJTFdMb2NrUmVsZWFzZSgmc3RhdGUtPmxvY2spOworCisJcmV0 dXJuIChEYXR1bSkgMDsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdw YV9jb2xsZWN0b3IuaCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9jb2xsZWN0b3IuaApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYjZlNzQ2YTA2ZDcKLS0tIC9k ZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfY29sbGVjdG9yLmgKQEAg LTAsMCArMSwxOCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdwYV9jb2xsZWN0b3Iu aAorICoJICBjb2xsZWN0IGFkdmljZSBpbnRvIGJhY2tlbmQtbG9jYWwgb3Igc2hhcmVkIG1lbW9y eQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZl bG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2NvbGxl Y3Rvci5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgUEdQQV9DT0xMRUNU T1JfSAorI2RlZmluZSBQR1BBX0NPTExFQ1RPUl9ICisKK2V4dGVybiB2b2lkIHBncGFfY29sbGVj dF9hZHZpY2UodWludDY0IHF1ZXJ5SWQsIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywKKwkJCQkJ CQkJY29uc3QgY2hhciAqYWR2aWNlX3N0cmluZyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29u dHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2lkZW50aWZpZXIuYyBiL2NvbnRyaWIvcGdfcGxhbl9h ZHZpY2UvcGdwYV9pZGVudGlmaWVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAuLjUxYjRiMGM2MGE2Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2Fk dmljZS9wZ3BhX2lkZW50aWZpZXIuYwpAQCAtMCwwICsxLDQ3NiBAQAorLyotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKgorICogcGdwYV9pZGVudGlmaWVyLmMKKyAqCSAgY3JlYXRlIGFwcHJvcHJpYXRlIGlk ZW50aWZpZXJzIGZvciByYW5nZSB0YWJsZSBlbnRyaWVzCisgKgorICogVGhlIGdvYWwgb2YgdGhp cyBtb2R1bGUgaXMgdG8gYmUgYWJsZSB0byBwcm9kdWNlIGlkZW50aWZpZXJzIGZvciByYW5nZQor ICogdGFibGUgZW50cmllcyB0aGF0IGFyZSB1bmlxdWUsIHVuZGVyc3RhbmRhYmxlIHRvIGh1bWFu IGJlaW5ncywgYW5kCisgKiBhYmxlIHRvIGJlIHJlY29uc3RydWN0ZWQgZHVyaW5nIGZ1dHVyZSBw bGFubmluZyBjeWNsZXMuIEFzIGFuCisgKiBleGNlcHRpb24sIHdlIGRvIG5vdCBjYXJlIGFib3V0 LCBvciB3YW50IHRvIHByb2R1Y2UsIGlkZW50aWZpZXJzIGZvcgorICogUlRFX0pPSU4gZW50cmll cy4gVGhpcyBpcyBiZWNhdXNlICgxKSB3ZSB3b3VsZCBlbmQgdXAgd2l0aCBhIHRvbiBvZgorICog UlRFcyB3aXRoIHVuaGVscGZ1bCBuYW1lcyBsaWtlIHVubmFtZWRfam9pbl8xNzsgKDIpIG5vdCBh bGwgam9pbnMgaGF2ZQorICogUlRFczsgYW5kICgzKSB3ZSBpbnRlbmQgdG8gcmVmZXIgdG8gam9p bnMgYnkgdGhlaXIgY29uc3RpdHVlbnQgbWVtYmVycworICogcmF0aGVyIHRoYW4gYnkgcmVmZXJl bmNlIHRvIHRoZSBqb2luIFJURS4KKyAqCisgKiBJbiBnZW5lcmFsLCB3ZSBjb25zdHJ1Y3QgaWRl bnRpZmllcnMgb2YgdGhlIGZvbGxvd2luZyBmb3JtOgorICoKKyAqIGFsaWFzX25hbWUjb2NjdXJy ZW5jZV9udW1iZXIvY2hpbGRfdGFibGVfbmFtZUBzdWJxdWVyeV9uYW1lCisgKgorICogSG93ZXZl ciwgb2NjdXJyZW5jZV9udW1iZXIgaXMgb21pdHRlZCB3aGVuIGl0IGlzIHRoZSBmaXJzdCBvY2N1 cnJlbmNlCisgKiB3aXRoaW4gdGhlIHNhbWUgc3VicXVlcnksIGNoaWxkX3RhYmxlX25hbWUgaXMg b21pdHRlZCBmb3IgcmVsYXRpb25zIHRoYXQKKyAqIGFyZSBub3QgY2hpbGQgdGFibGVzLCBhbmQg c3VicXVlcnlfbmFtZSBpcyBvbWl0dGVkIGZvciB0aGUgdG9wbW9zdAorICogcXVlcnkgbGV2ZWwu IFdoZW5ldmVyIGFuIGl0ZW0gaXMgb21pdHRlZCwgdGhlIHByZWNlZGluZyBwdW5jdHVhdGlvbiBt YXJrCisgKiBpcyBhbHNvIG9taXR0ZWQuICBJZGVudGlmaWVyLXN0eWxlIGVzY2FwaW5nIGlzIGFw cGxpZWQgdG8gYWxpYXNfbmFtZSBhbmQKKyAqIHN1YnF1ZXJ5X25hbWUuICBXaGVuZXZlciB3ZSBp bmNsdWRlIGNoaWxkX3RhYmxlX25hbWUsIHdlIGFsd2F5cworICogc2NoZW1hLXF1YWxpZmllZCBu YW1lLCBidXQgd3JpdGluZyB0aGVpciBvd24gcGxhbiBhZHZpY2UgYXJlIG5vdCByZXF1aXJlZAor ICogdG8gZG8gc28uICBJZGVudGlmaWVyLXN0eWxlIGVzY2FwaW5nIGlzIGFwcGxpZWQgdG8gdGhl IHNjaGVtYSBhbmQgdG8gdGhlCisgKiByZWxhdGlvbiBuYW1lcyBzZXBhcmF0ZWx5LgorICoKKyAq IFRoZSB1cHNob3Qgb2YgYWxsIG9mIHRoZXNlIHJ1bGVzIGlzIHRoYXQgaW4gc2ltcGxlIGNhc2Vz LCB0aGUgcmVsYXRpb24KKyAqIGlkZW50aWZpZXIgaXMgdGV4dHVhbGx5IGlkZW50aWNhbCB0byB0 aGUgYWxpYXMgbmFtZSwgbWFraW5nIGxpZmUgZWFzaWVyCisgKiBmb3IgdXNlcnMuIEhvd2V2ZXIs IGV2ZW4gaW4gY29tcGxleCBjYXNlcywgZXZlcnkgcmVsYXRpb24gaWRlbnRpZmllcgorICogZm9y IGEgZ2l2ZW4gcXVlcnkgd2lsbCBiZSB1bmlxdWUgKG9yIGF0IGxlYXN0IHdlIGhvcGUgc286IGlm IG5vdCwgdGhpcworICogY29kZSBpcyBidWdneSBhbmQgdGhlIGlkZW50aWZpZXIgZm9ybWF0IG1p Z2h0IG5lZWQgdG8gYmUgcmV0aG91Z2h0KS4KKyAqCisgKiBBIGtleSBnb2FsIG9mIHRoaXMgc3lz dGVtIGlzIHRoYXQgd2Ugd2FudCB0byBiZSBhYmxlIHRvIHJlY29uc3RydWN0IHRoZQorICogc2Ft ZSBpZGVudGlmaWVycyBkdXJpbmcgYSBmdXR1cmUgcGxhbm5pbmcgY3ljbGUgZm9yIHRoZSBzYW1l IHF1ZXJ5LCBzbworICogdGhhdCBpZiBhIGNlcnRhaW4gYmVoYXZpb3IgaXMgc3BlY2lmaWVkIGZv ciBhIGNlcnRhaW4gaWRlbnRpZmllciwgd2UgY2FuCisgKiBwcm9wZXJseSBpZGVudGlmeSB0aGUg UlRJIGZvciB3aGljaCB0aGF0IGJlaGF2aW9yIGlzIG1hbmRhdGVkLiBJbiBvcmRlcgorICogZm9y IHRoaXMgdG8gd29yaywgc3VicXVlcnkgbmFtZXMgbXVzdCBiZSB1bmlxdWUgYW5kIGtub3duIGJl Zm9yZSB0aGUKKyAqIHN1YnF1ZXJ5IGlzIHBsYW5uZWQsIGFuZCB0aGUgcmVtYWluZGVyIG9mIHRo ZSBpZGVudGlmaWVyIG11c3Qgbm90IGRlcGVuZAorICogb24gYW55IHBhcnQgb2YgdGhlIHF1ZXJ5 IG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgc3VicXVlcnkgbGV2ZWwuIEluCisgKiBwYXJ0aWN1bGFy LCBvY2N1cnJlbmNlX251bWJlciBtdXN0IGJlIGNhbGN1bGF0ZWQgcmVsYXRpdmUgdG8gdGhlIHJh bmdlCisgKiB0YWJsZSBmb3IgdGhlIHJlbGV2YW50IHN1YnF1ZXJ5LCBub3QgdGhlIGZpbmFsIGZs YXR0ZW5lZCByYW5nZSB0YWJsZS4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNCwgUG9z dGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxh bl9hZHZpY2UvcGdwYV9pZGVudGlmaWVyLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwor CisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgInBncGFfaWRlbnRpZmllci5oIgor CisjaW5jbHVkZSAicGFyc2VyL3BhcnNldHJlZS5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5z LmgiCisjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCisKK3N0YXRpYyBJbmRleCAqcGdwYV9j cmVhdGVfdG9wX3J0aV9tYXAoSW5kZXggcnRhYmxlX2xlbmd0aCwgTGlzdCAqcnRhYmxlLAorCQkJ CQkJCQkJICBMaXN0ICphcHBpbmZvcyk7CitzdGF0aWMgaW50CXBncGFfb2NjdXJyZW5jZV9udW1i ZXIoTGlzdCAqcnRhYmxlLCBJbmRleCAqdG9wX3J0aV9tYXAsCisJCQkJCQkJCSAgIFN1YlBsYW5S VEluZm8gKnJ0aW5mbywgSW5kZXggcnRpKTsKKworLyoKKyAqIENyZWF0ZSBhIHJhbmdlIHRhYmxl IGlkZW50aWZpZXIgZnJvbSBzY3JhdGNoLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gbGVhdmVzIHRo ZSBjYWxsZXIgdG8gZG8gYWxsIHRoZSBoZWF2eSBsaWZ0aW5nLCBzbyBpdCdzCisgKiBnZW5lcmFs bHkgYmV0dGVyIHRvIHVzZSBvbmUgb2YgdGhlIGZ1bmN0aW9ucyBiZWxvdyBpbnN0ZWFkLgorICoK KyAqIFNlZSB0aGUgZmlsZSBoZWFkZXIgY29tbWVudHMgZm9yIG1vcmUgZGV0YWlscyBvbiB0aGUg Zm9ybWF0IG9mIGFuCisgKiBpZGVudGlmaWVyLgorICovCitjb25zdCBjaGFyICoKK3BncGFfaWRl bnRpZmllcl9zdHJpbmcoY29uc3QgcGdwYV9pZGVudGlmaWVyICpyaWQpCit7CisJY29uc3QgY2hh ciAqcmVzdWx0OworCisJQXNzZXJ0KHJpZC0+YWxpYXNfbmFtZSAhPSBOVUxMKTsKKwlyZXN1bHQg PSBxdW90ZV9pZGVudGlmaWVyKHJpZC0+YWxpYXNfbmFtZSk7CisKKwlBc3NlcnQocmlkLT5vY2N1 cnJlbmNlID49IDApOworCWlmIChyaWQtPm9jY3VycmVuY2UgPiAxKQorCQlyZXN1bHQgPSBwc3By aW50ZigiJXMjJWQiLCByZXN1bHQsIHJpZC0+b2NjdXJyZW5jZSk7CisKKwlpZiAocmlkLT5wYXJ0 cmVsICE9IE5VTEwpCisJeworCQlpZiAocmlkLT5wYXJ0bnNwID09IE5VTEwpCisJCQlyZXN1bHQg PSBwc3ByaW50ZigiJXMvJXMiLCByZXN1bHQsCisJCQkJCQkJICBxdW90ZV9pZGVudGlmaWVyKHJp ZC0+cGFydHJlbCkpOworCQllbHNlCisJCQlyZXN1bHQgPSBwc3ByaW50ZigiJXMvJXMuJXMiLCBy ZXN1bHQsCisJCQkJCQkJICBxdW90ZV9pZGVudGlmaWVyKHJpZC0+cGFydG5zcCksCisJCQkJCQkJ ICBxdW90ZV9pZGVudGlmaWVyKHJpZC0+cGFydHJlbCkpOworCX0KKworCWlmIChyaWQtPnBsYW5f bmFtZSAhPSBOVUxMKQorCQlyZXN1bHQgPSBwc3ByaW50ZigiJXNAJXMiLCByZXN1bHQsIHF1b3Rl X2lkZW50aWZpZXIocmlkLT5wbGFuX25hbWUpKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8q CisgKiBDb21wdXRlIGEgcmVsYXRpb24gaWRlbnRpZmllciBmb3IgYSBwYXJ0aWN1bGFyIFJUSS4K KyAqCisgKiBUaGUgY2FsbGVyIHByb3ZpZGVzIHJvb3QgYW5kIHJ0aSwgYW5kIGdldHMgdGhlIG5l Y2Vzc2FyeSBkZXRhaWxzIGJhY2sgdmlhCisgKiB0aGUgcmVtYWluaW5nIHBhcmFtZXRlcnMuCisg Ki8KK3ZvaWQKK3BncGFfY29tcHV0ZV9pZGVudGlmaWVyX2J5X3J0aShQbGFubmVySW5mbyAqcm9v dCwgSW5kZXggcnRpLAorCQkJCQkJCSAgIHBncGFfaWRlbnRpZmllciAqcmlkKQoreworCUluZGV4 CQl0b3BfcnRpID0gcnRpOworCWludAkJCW9jY3VycmVuY2UgPSAxOworCVJhbmdlVGJsRW50cnkg KnJ0ZTsKKwlSYW5nZVRibEVudHJ5ICp0b3BfcnRlOworCWNoYXIJICAgKnBhcnRuc3AgPSBOVUxM OworCWNoYXIJICAgKnBhcnRyZWwgPSBOVUxMOworCisJLyoKKwkgKiBJZiB0aGlzIGlzIGEgY2hp bGQgUlRFLCBmaW5kIHRoZSB0b3Btb3N0IHBhcmVudCB0aGF0IGlzIHN0aWxsIG9mIHR5cGUKKwkg KiBSVEVfUkVMQVRJT04uIFdlIGRvIHRoaXMgYmVjYXVzZSB3ZSBpZGVudGlmeSBjaGlsZHJlbiBv ZiBwYXJ0aXRpb25lZAorCSAqIHRhYmxlcyBieSB0aGUgbmFtZSBvZiB0aGUgY2hpbGQgdGFibGUs IGJ1dCBzdWJxdWVyaWVzIGNhbiBhbHNvIGhhdmUKKwkgKiBjaGlsZCByZWxzIGFuZCB3ZSBkb24n dCBjYXJlIGFib3V0IHRob3NlIGhlcmUuCisJICovCisJZm9yICg7OykKKwl7CisJCUFwcGVuZFJl bEluZm8gKmFwcGluZm87CisJCVJhbmdlVGJsRW50cnkgKnBhcmVudF9ydGU7CisKKwkJLyogYXBw ZW5kX3JlbF9hcnJheSBjYW4gYmUgTlVMTCBpZiB0aGVyZSBhcmUgbm8gY2hpbGRyZW4gKi8KKwkJ aWYgKHJvb3QtPmFwcGVuZF9yZWxfYXJyYXkgPT0gTlVMTCB8fAorCQkJKGFwcGluZm8gPSByb290 LT5hcHBlbmRfcmVsX2FycmF5W3RvcF9ydGldKSA9PSBOVUxMKQorCQkJYnJlYWs7CisKKwkJcGFy ZW50X3J0ZSA9IHBsYW5uZXJfcnRfZmV0Y2goYXBwaW5mby0+cGFyZW50X3JlbGlkLCByb290KTsK KwkJaWYgKHBhcmVudF9ydGUtPnJ0ZWtpbmQgIT0gUlRFX1JFTEFUSU9OKQorCQkJYnJlYWs7CisK KwkJdG9wX3J0aSA9IGFwcGluZm8tPnBhcmVudF9yZWxpZDsKKwl9CisKKwkvKiBHZXQgdGhlIHJh bmdlIHRhYmxlIGVudHJpZXMgZm9yIHRoZSBSVEkgYW5kIHRvcCBSVEkuICovCisJcnRlID0gcGxh bm5lcl9ydF9mZXRjaChydGksIHJvb3QpOworCXRvcF9ydGUgPSBwbGFubmVyX3J0X2ZldGNoKHRv cF9ydGksIHJvb3QpOworCUFzc2VydChydGUtPnJ0ZWtpbmQgIT0gUlRFX0pPSU4pOworCUFzc2Vy dCh0b3BfcnRlLT5ydGVraW5kICE9IFJURV9KT0lOKTsKKworCS8qIFdvcmsgb3V0IHRoZSBjb3Jy ZWN0IG9jY3VycmVuY2UgbnVtYmVyLiAqLworCWZvciAoSW5kZXggcHJpb3JfcnRpID0gMTsgcHJp b3JfcnRpIDwgdG9wX3J0aTsgKytwcmlvcl9ydGkpCisJeworCQlSYW5nZVRibEVudHJ5ICpwcmlv cl9ydGU7CisJCUFwcGVuZFJlbEluZm8gKmFwcGluZm87CisKKwkJLyoKKwkJICogSWYgdGhpcyBp cyBhIGNoaWxkIHJlbCBvZiBhIHBhcmVudCB0aGF0IGlzIGEgcmVsYXRpb24sIHNraXAgaXQuCisJ CSAqCisJCSAqIFN1Y2ggcmFuZ2UgdGFibGUgZW50cmllcyBhcmUgZGlzYW1iaWd1YXRlZCBieSBt ZW50aW9uaW5nIHRoZSBzY2hlbWEKKwkJICogYW5kIG5hbWUgb2YgdGhlIHRhYmxlLCBub3QgYnkg Y291bnRpbmcgdGhlbSBhcyBzZXBhcmF0ZSBvY2N1cnJlbmNlcworCQkgKiBvZiB0aGUgc2FtZSB0 YWJsZS4KKwkJICoKKwkJICogTkI6IGFwcGVuZF9yZWxfYXJyYXkgY2FuIGJlIE5VTEwgaWYgdGhl cmUgYXJlIG5vIGNoaWxkcmVuCisJCSAqLworCQlpZiAocm9vdC0+YXBwZW5kX3JlbF9hcnJheSAh PSBOVUxMICYmCisJCQkoYXBwaW5mbyA9IHJvb3QtPmFwcGVuZF9yZWxfYXJyYXlbcHJpb3JfcnRp XSkgIT0gTlVMTCkKKwkJeworCQkJUmFuZ2VUYmxFbnRyeSAqcGFyZW50X3J0ZTsKKworCQkJcGFy ZW50X3J0ZSA9IHBsYW5uZXJfcnRfZmV0Y2goYXBwaW5mby0+cGFyZW50X3JlbGlkLCByb290KTsK KwkJCWlmIChwYXJlbnRfcnRlLT5ydGVraW5kID09IFJURV9SRUxBVElPTikKKwkJCQljb250aW51 ZTsKKwkJfQorCisJCS8qIFNraXAgTlVMTCBlbnRyaWVzIGFuZCBqb2lucy4gKi8KKwkJcHJpb3Jf cnRlID0gcGxhbm5lcl9ydF9mZXRjaChwcmlvcl9ydGksIHJvb3QpOworCQlpZiAocHJpb3JfcnRl ID09IE5VTEwgfHwgcHJpb3JfcnRlLT5ydGVraW5kID09IFJURV9KT0lOKQorCQkJY29udGludWU7 CisKKwkJLyogU2tpcCBpZiB0aGUgYWxpYXMgbmFtZSBkaWZmZXJzLiAqLworCQlpZiAoc3RyY21w KHByaW9yX3J0ZS0+ZXJlZi0+YWxpYXNuYW1lLCBydGUtPmVyZWYtPmFsaWFzbmFtZSkgIT0gMCkK KwkJCWNvbnRpbnVlOworCisJCS8qIExvb2tzIGxpa2UgYSB0cnVlIGR1cGxpY2F0ZS4gKi8KKwkJ KytvY2N1cnJlbmNlOworCX0KKworCS8qIElmIHRoaXMgaXMgYSBjaGlsZCB0YWJsZSwgZ2V0IHRo ZSBzY2hlbWEgYW5kIHJlbGF0aW9uIG5hbWVzLiAqLworCWlmIChydGkgIT0gdG9wX3J0aSkKKwl7 CisJCXBhcnRuc3AgPSBnZXRfbmFtZXNwYWNlX25hbWVfb3JfdGVtcChnZXRfcmVsX25hbWVzcGFj ZShydGUtPnJlbGlkKSk7CisJCXBhcnRyZWwgPSBnZXRfcmVsX25hbWUocnRlLT5yZWxpZCk7CisJ fQorCisJLyogT0ssIHdlIGhhdmUgYWxsIHRoZSBhbnN3ZXJzIHdlIG5lZWQuIFJldHVybiB0aGVt IHRvIHRoZSBjYWxsZXIuICovCisJcmlkLT5hbGlhc19uYW1lID0gdG9wX3J0ZS0+ZXJlZi0+YWxp YXNuYW1lOworCXJpZC0+b2NjdXJyZW5jZSA9IG9jY3VycmVuY2U7CisJcmlkLT5wYXJ0bnNwID0g cGFydG5zcDsKKwlyaWQtPnBhcnRyZWwgPSBwYXJ0cmVsOworCXJpZC0+cGxhbl9uYW1lID0gcm9v dC0+cGxhbl9uYW1lOworfQorCisvKgorICogQ29tcHV0ZSBhIHJlbGF0aW9uIGlkZW50aWZpZXIg Zm9yIGEgc2V0IG9mIFJUSXMsIGV4Y2VwdCBmb3IgYW55IFJURV9KT0lOCisgKiBSVElzIHRoYXQg bWF5IGJlIHByZXNlbnQuCisgKgorICogUlRFX0pPSU4gZW50cmllcyBhcmUgZXhjbHVkZWQgYmVj YXVzZSB0aGV5IGNhbm5vdCBiZSBtZW50aW9uZWQgYnkgcGxhbgorICogYWR2aWNlLgorICoKKyAq IFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIG1ha2luZyBzdXJlIHRoYXQgdGhlIHRrZXlz IGFycmF5IGlzIGxhcmdlCisgKiBlbm91Z2ggdG8gc3RvcmUgdGhlIHJlc3VsdHMuCisgKgorICog VGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgbnVtYmVyIG9mIGlkZW50aWZpZXJzIGNvbXB1dGVkLgor ICovCitpbnQKK3BncGFfY29tcHV0ZV9pZGVudGlmaWVyc19ieV9yZWxpZHMoUGxhbm5lckluZm8g KnJvb3QsIEJpdG1hcHNldCAqcmVsaWRzLAorCQkJCQkJCQkgICBwZ3BhX2lkZW50aWZpZXIgKnJp ZHMpCit7CisJaW50CQkJY291bnQgPSAwOworCWludAkJCXJ0aSA9IC0xOworCisJd2hpbGUgKChy dGkgPSBibXNfbmV4dF9tZW1iZXIocmVsaWRzLCBydGkpKSA+PSAwKQorCXsKKwkJUmFuZ2VUYmxF bnRyeSAqcnRlID0gcGxhbm5lcl9ydF9mZXRjaChydGksIHJvb3QpOworCisJCWlmIChydGUtPnJ0 ZWtpbmQgPT0gUlRFX0pPSU4pCisJCQljb250aW51ZTsKKwkJcGdwYV9jb21wdXRlX2lkZW50aWZp ZXJfYnlfcnRpKHJvb3QsIHJ0aSwgJnJpZHNbY291bnQrK10pOworCX0KKworCUFzc2VydChjb3Vu dCA+IDApOworCXJldHVybiBjb3VudDsKK30KKworLyoKKyAqIENyZWF0ZSBhbiBhcnJheSBvZiBy YW5nZSB0YWJsZSBpZGVudGlmaWVycyBmb3IgYWxsIHRoZSBub24tTlVMTCwKKyAqIG5vbi1SVEVf Sk9JTiBlbnRyaWVzIGluIHRoZSBQbGFubmVkU3RtdCdzIHJhbmdlIHRhYmxlLgorICovCitwZ3Bh X2lkZW50aWZpZXIgKgorcGdwYV9jcmVhdGVfaWRlbnRpZmllcnNfZm9yX3BsYW5uZWRfc3RtdChQ bGFubmVkU3RtdCAqcHN0bXQpCit7CisJSW5kZXgJCXJ0YWJsZV9sZW5ndGggPSBsaXN0X2xlbmd0 aChwc3RtdC0+cnRhYmxlKTsKKwlwZ3BhX2lkZW50aWZpZXIgKnJlc3VsdCA9IHBhbGxvYzBfYXJy YXkocGdwYV9pZGVudGlmaWVyLCBydGFibGVfbGVuZ3RoKTsKKwlJbmRleAkgICAqdG9wX3J0aV9t YXA7CisJaW50CQkJcnRpbmZvaW5kZXggPSAwOworCVN1YlBsYW5SVEluZm8gKnJ0aW5mbyA9IE5V TEw7CisJU3ViUGxhblJUSW5mbyAqbmV4dHJ0aW5mbyA9IE5VTEw7CisKKwkvKgorCSAqIEFjY291 bnQgZm9yIHJlbGF0aW9ucyBhZGRkZWQgYnkgaW5oZXJpdGFuY2UgZXhwYW5zaW9uIG9mIHBhcnRp dGlvbmVkCisJICogdGFibGVzLgorCSAqLworCXRvcF9ydGlfbWFwID0gcGdwYV9jcmVhdGVfdG9w X3J0aV9tYXAocnRhYmxlX2xlbmd0aCwgcHN0bXQtPnJ0YWJsZSwKKwkJCQkJCQkJCQkgIHBzdG10 LT5hcHBlbmRSZWxhdGlvbnMpOworCisJLyoKKwkgKiBXaGVuIHdlIGJlZ2luIGl0ZXJhdGluZywg d2UncmUgcHJvY2Vzc2luZyB0aGUgcG9ydGlvbiBvZiB0aGUgcmFuZ2UKKwkgKiB0YWJsZSB0aGF0 IG9yaWdpbmF0ZWQgZnJvbSB0aGUgdG9wLWxldmVsIFBsYW5uZXJJbmZvLCBzbyBzdWJydGluZm8g aXMKKwkgKiBOVUxMLiBMYXRlciwgc3VicnRpbmZvIHdpbGwgYmUgdGhlIFN1YlBsYW5SVEluZm8g Zm9yIHRoZSBzdWJxdWVyeSB3aG9zZQorCSAqIHBvcnRpb24gb2YgdGhlIHJhbmdlIHRhYmxlIHdl IGFyZSBwcm9jZXNzaW5nLiBuZXh0cnRpbmZvIGlzIGFsd2F5cyB0aGUKKwkgKiBTdWJQbGFuUlRJ bmZvIHRoYXQgZm9sbG93cyB0aGUgY3VycmVudCBvbmUsIGlmIGFueSwgc28gd2hlbiB3ZSdyZQor CSAqIHByb2Nlc3NpbmcgdGhlIHRvcC1sZXZlbCBxdWVyeSdzIHBvcnRpb24gb2YgdGhlIHJhbmdl IHRhYmxlLCB0aGUgbmV4dAorCSAqIFN1YlBsYW5SVEluZm8gaXMgdGhlIHZlcnkgZmlyc3Qgb25l LgorCSAqLworCWlmIChwc3RtdC0+c3VicnRpbmZvcyAhPSBOVUxMKQorCQluZXh0cnRpbmZvID0g bGluaXRpYWwocHN0bXQtPnN1YnJ0aW5mb3MpOworCisJLyogTWFpbiBsb29wIG92ZXIgdGhlIHJh bmdlIHRhYmxlLiAqLworCWZvciAoSW5kZXggcnRpID0gMTsgcnRpIDw9IHJ0YWJsZV9sZW5ndGg7 IHJ0aSsrKQorCXsKKwkJY29uc3QgY2hhciAqcGxhbl9uYW1lOworCQlJbmRleAkJdG9wX3J0aTsK KwkJUmFuZ2VUYmxFbnRyeSAqcnRlOworCQlSYW5nZVRibEVudHJ5ICp0b3BfcnRlOworCQljaGFy CSAgICpwYXJ0bnNwID0gTlVMTDsKKwkJY2hhcgkgICAqcGFydHJlbCA9IE5VTEw7CisJCWludAkJ CW9jY3VycmVuY2U7CisJCXBncGFfaWRlbnRpZmllciAqcmlkOworCisJCS8qCisJCSAqIEFkdmFu Y2UgdG8gdGhlIG5leHQgU3ViUGxhblJUSW5mbywgaWYgaXQncyB0aW1lIHRvIGRvIHRoYXQuCisJ CSAqCisJCSAqIFRoaXMgbG9vcCBwcm9iYWJseSBzaG91bGRuJ3QgZXZlciBpdGVyYXRlIG1vcmUg dGhhbiBvbmNlLCBiZWNhdXNlCisJCSAqIHRoYXQgd291bGQgaW1wbHkgdGhhdCBhIHN1YnF1ZXJ5 IHdhcyBwbGFubmVkIGJ1dCBhZGRlZCBub3RoaW5nIHRvCisJCSAqIHRoZSByYW5nZSB0YWJsZTsg YnV0IGxldCdzIGJlIGRlZmVuc2l2ZSBhbmQgYXNzdW1lIGl0IGNhbiBoYXBwZW4uCisJCSAqLwor CQl3aGlsZSAobmV4dHJ0aW5mbyAhPSBOVUxMICYmIHJ0aSA+IG5leHRydGluZm8tPnJ0b2Zmc2V0 KQorCQl7CisJCQlydGluZm8gPSBuZXh0cnRpbmZvOworCQkJaWYgKCsrcnRpbmZvaW5kZXggPj0g bGlzdF9sZW5ndGgocHN0bXQtPnN1YnJ0aW5mb3MpKQorCQkJCW5leHRydGluZm8gPSBOVUxMOwor CQkJZWxzZQorCQkJCW5leHRydGluZm8gPSBsaXN0X250aChwc3RtdC0+c3VicnRpbmZvcywgcnRp bmZvaW5kZXgpOworCQl9CisKKwkJLyogRmV0Y2ggdGhlIHJhbmdlIHRhYmxlIGVudHJ5LCBpZiBh bnkuICovCisJCXJ0ZSA9IHJ0X2ZldGNoKHJ0aSwgcHN0bXQtPnJ0YWJsZSk7CisKKwkJLyoKKwkJ ICogV2UgY2FuJ3QgYW5kIGRvbid0IG5lZWQgdG8gaWRlbnRpZnkgbnVsbCBlbnRyaWVzLCBhbmQg d2UgZG9uJ3Qgd2FudAorCQkgKiB0byBpZGVudGlmeSBqb2luIGVudHJpZXMuCisJCSAqLworCQlp ZiAocnRlID09IE5VTEwgfHwgcnRlLT5ydGVraW5kID09IFJURV9KT0lOKQorCQkJY29udGludWU7 CisKKwkJLyoKKwkJICogSWYgdGhpcyBpcyBub3QgYSByZWxhdGlvbiBhZGRlZCBieSBwYXJ0aXRp b25lZCB0YWJsZSBleHBhbnNpb24sCisJCSAqIHRoZW4gdGhlIHRvcCBSVEkvUlRFIGFyZSBqdXN0 IHRoZSBzYW1lIGFzIHRoaXMgUlRJL1JURS4gT3RoZXJ3aXNlLAorCQkgKiB3ZSBuZWVkIHRoZSBp bmZvcm1hdGlvbiBmb3IgdGhlIHRvcCBSVEkvUlRFLCBhbmQgbXVzdCBhbHNvIGZldGNoCisJCSAq IHRoZSBwYXJ0aXRpb24gc2NoZW1hIGFuZCBuYW1lLgorCQkgKi8KKwkJdG9wX3J0aSA9IHRvcF9y dGlfbWFwW3J0aSAtIDFdOworCQlpZiAocnRpID09IHRvcF9ydGkpCisJCQl0b3BfcnRlID0gcnRl OworCQllbHNlCisJCXsKKwkJCXRvcF9ydGUgPSBydF9mZXRjaCh0b3BfcnRpLCBwc3RtdC0+cnRh YmxlKTsKKwkJCXBhcnRuc3AgPQorCQkJCWdldF9uYW1lc3BhY2VfbmFtZV9vcl90ZW1wKGdldF9y ZWxfbmFtZXNwYWNlKHJ0ZS0+cmVsaWQpKTsKKwkJCXBhcnRyZWwgPSBnZXRfcmVsX25hbWUocnRl LT5yZWxpZCk7CisJCX0KKworCQkvKiBDb21wdXRlIHRoZSBjb3JyZWN0IG9jY3VycmVuY2UgbnVt YmVyLiAqLworCQlvY2N1cnJlbmNlID0gcGdwYV9vY2N1cnJlbmNlX251bWJlcihwc3RtdC0+cnRh YmxlLCB0b3BfcnRpX21hcCwKKwkJCQkJCQkJCQkJcnRpbmZvLCB0b3BfcnRpKTsKKworCQkvKiBH ZXQgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgcGxhbiAoTlVMTCBmb3IgdG9wbGV2ZWwgcXVlcnkp LiAqLworCQlwbGFuX25hbWUgPSBydGluZm8gPT0gTlVMTCA/IE5VTEwgOiBydGluZm8tPnBsYW5f bmFtZTsKKworCQkvKiBTYXZlIGFsbCB0aGUgZGV0YWlscyB3ZSd2ZSBkZXJpdmVkLiAqLworCQly aWQgPSAmcmVzdWx0W3J0aSAtIDFdOworCQlyaWQtPmFsaWFzX25hbWUgPSB0b3BfcnRlLT5lcmVm LT5hbGlhc25hbWU7CisJCXJpZC0+b2NjdXJyZW5jZSA9IG9jY3VycmVuY2U7CisJCXJpZC0+cGFy dG5zcCA9IHBhcnRuc3A7CisJCXJpZC0+cGFydHJlbCA9IHBhcnRyZWw7CisJCXJpZC0+cGxhbl9u YW1lID0gcGxhbl9uYW1lOworCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBTZWFy Y2ggZm9yIGEgcGdwYV9pZGVudGlmaWVyIGluIHRoZSBhcnJheSBvZiBpZGVudGlmaWVycyBjb21w dXRlZCBmb3IgdGhlCisgKiByYW5nZSB0YWJsZS4gSWYgZXhhY3RseSBvbmUgbWF0Y2ggaXMgZm91 bmQsIHJldHVybiB0aGUgbWF0Y2hpbmcgUlRJOyBlbHNlCisgKiByZXR1cm4gMC4KKyAqLworSW5k ZXgKK3BncGFfY29tcHV0ZV9ydGlfZnJvbV9pZGVudGlmaWVyKGludCBydGFibGVfbGVuZ3RoLAor CQkJCQkJCQkgcGdwYV9pZGVudGlmaWVyICpydF9pZGVudGlmaWVycywKKwkJCQkJCQkJIHBncGFf aWRlbnRpZmllciAqcmlkKQoreworCUluZGV4CQlyZXN1bHQgPSAwOworCisJZm9yIChJbmRleCBy dGkgPSAxOyBydGkgPD0gcnRhYmxlX2xlbmd0aDsgKytydGkpCisJeworCQlwZ3BhX2lkZW50aWZp ZXIgKnJ0aV9yaWQgPSAmcnRfaWRlbnRpZmllcnNbcnRpIC0gMV07CisKKwkJLyogSWYgdGhlcmUn cyBubyBpZGVudGlmaWVyIGZvciB0aGlzIFJUSSwgc2tpcCBpdC4gKi8KKwkJaWYgKHJ0aV9yaWQt PmFsaWFzX25hbWUgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIElmIGl0IG1h dGNoZXMsIHJldHVybiB0aGlzIFJUSS4gQXMgdXN1YWwsIGFuIG9taXR0ZWQgcGFydGl0aW9uCisJ CSAqIHNjaGVtYSBtYXRjaGVzIGFueXRoaW5nLCBidXQgcGFydGl0aW9uIGFuZCBwbGFuIG5hbWVz IG11c3QgZWl0aGVyCisJCSAqIG1hdGNoIGV4YWN0bHkgb3IgYmUgb21pdHRlZCBvbiBib3RoIHNp ZGVzLgorCQkgKi8KKwkJaWYgKHN0cmNtcChyaWQtPmFsaWFzX25hbWUsIHJ0aV9yaWQtPmFsaWFz X25hbWUpID09IDAgJiYKKwkJCXJpZC0+b2NjdXJyZW5jZSA9PSBydGlfcmlkLT5vY2N1cnJlbmNl ICYmCisJCQkocmlkLT5wYXJ0bnNwID09IE5VTEwgfHwgcnRpX3JpZC0+cGFydG5zcCA9PSBOVUxM IHx8CisJCQkgc3RyY21wKHJpZC0+cGFydG5zcCwgcnRpX3JpZC0+cGFydG5zcCkgPT0gMCkgJiYK KwkJCXN0cmluZ3NfZXF1YWxfb3JfYm90aF9udWxsKHJpZC0+cGFydHJlbCwgcnRpX3JpZC0+cGFy dHJlbCkgJiYKKwkJCXN0cmluZ3NfZXF1YWxfb3JfYm90aF9udWxsKHJpZC0+cGxhbl9uYW1lLCBy dGlfcmlkLT5wbGFuX25hbWUpKQorCQl7CisJCQlpZiAocmVzdWx0ICE9IDApCisJCQl7CisJCQkJ LyogTXVsdGlwbGUgbWF0Y2hlcyB3ZXJlIGZvdW5kLiAqLworCQkJCXJldHVybiAwOworCQkJfQor CQkJcmVzdWx0ID0gcnRpOworCQl9CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAq IEJ1aWxkIGEgbWFwcGluZyBmcm9tIGVhY2ggUlRJIHRvIHRoZSBSVEkgd2hvc2UgYWxpYXNfbmFt ZSB3aWxsIGJlIHVzZWQgdG8KKyAqIGNvbnN0cnVjdCB0aGUgcmFuZ2UgdGFibGUgaWRlbnRpZmll ci4KKyAqCisgKiBGb3IgY2hpbGQgcmVsYXRpb25zLCB0aGlzIGlzIHRoZSB0b3Btb3N0IHBhcmVu dCB0aGF0IGlzIHN0aWxsIG9mIHR5cGUKKyAqIFJURV9SRUxBVElPTi4gRm9yIG90aGVyIHJlbGF0 aW9ucywgaXQncyBqdXN0IHRoZSBvcmlnaW5hbCBSVEkuCisgKgorICogU2luY2Ugd2UncmUgZXZl bnR1YWxseSBnb2luZyB0byBuZWVkIHRoaXMgaW5mb3JtYXRpb24gZm9yIGV2ZXJ5IFJUSSBpbgor ICogdGhlIHJhbmdlIHRhYmxlLCBpdCdzIGJlc3QgdG8gY29tcHV0ZSBhbGwgdGhlIGFuc3dlcnMg aW4gYSBzaW5nbGUgcGFzcyBvdmVyCisgKiB0aGUgQXBwZW5kUmVsSW5mbyBsaXN0LiBPdGhlcndp c2UsIHdlIG1pZ2h0IGVuZCB1cCBzZWFyY2hpbmcgdGhyb3VnaCB0aGF0CisgKiBsaXN0IHJlcGVh dGVkbHkgZm9yIGVudHJpZXMgb2YgaW50ZXJlc3QuCisgKgorICogTm90ZSB0aGF0IHRoZSByZXR1 cm5lZCBhcnJheSBpcyB1c2VzIHplcm8tYmFzZWQgaW5kZXhpbmcsIHdoaWxlIFJUSXMgdXNlCisg KiAxLWJhc2VkIGluZGV4aW5nLCBzbyBzdWJ0cmFjdCAxIGZyb20gdGhlIFJUSSBiZWZvcmUgbG9v a2luZyBpdCB1cCBpbiB0aGUKKyAqIGFycmF5LgorICovCitzdGF0aWMgSW5kZXggKgorcGdwYV9j cmVhdGVfdG9wX3J0aV9tYXAoSW5kZXggcnRhYmxlX2xlbmd0aCwgTGlzdCAqcnRhYmxlLCBMaXN0 ICphcHBpbmZvcykKK3sKKwlJbmRleAkgICAqdG9wX3J0aV9tYXAgPSBwYWxsb2MwX2FycmF5KElu ZGV4LCBydGFibGVfbGVuZ3RoKTsKKworCS8qIEluaXRpYWxseSwgbWFrZSBldmVyeSBSVEkgcG9p bnQgdG8gaXRzZWxmLiAqLworCWZvciAoSW5kZXggcnRpID0gMTsgcnRpIDw9IHJ0YWJsZV9sZW5n dGg7ICsrcnRpKQorCQl0b3BfcnRpX21hcFtydGkgLSAxXSA9IHJ0aTsKKworCS8qIFVwZGF0ZSB0 aGUgbWFwIGZvciBlYWNoIEFwcGVuZFJlbEluZm8gb2JqZWN0LiAqLworCWZvcmVhY2hfbm9kZShB cHBlbmRSZWxJbmZvLCBhcHBpbmZvLCBhcHBpbmZvcykKKwl7CisJCUluZGV4CQlwYXJlbnRfcnRp ID0gYXBwaW5mby0+cGFyZW50X3JlbGlkOworCQlSYW5nZVRibEVudHJ5ICpwYXJlbnRfcnRlID0g cnRfZmV0Y2gocGFyZW50X3J0aSwgcnRhYmxlKTsKKworCQkvKiBJZiB0aGUgcGFyZW50IGlzIG5v dCBSVEVfUkVMQVRJT04sIGlnbm9yZSB0aGlzIGVudHJ5LiAqLworCQlpZiAocGFyZW50X3J0ZS0+ cnRla2luZCAhPSBSVEVfUkVMQVRJT04pCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBNYXAg dGhlIGNoaWxkIHRvIHdoZXJldmVyIHdlIG1hcHBlZCB0aGUgcGFyZW50LiBQYXJlbnRzIGFsd2F5 cworCQkgKiBwcmVjZWRlIHRoZWlyIGNoaWxkcmVuIGluIHRoZSBBcHBlbmRSZWxJbmZvIGxpc3Qs IHNvIHRoaXMgc2hvdWxkCisJCSAqIHdvcmsgb3V0LgorCQkgKi8KKwkJdG9wX3J0aV9tYXBbYXBw aW5mby0+Y2hpbGRfcmVsaWQgLSAxXSA9IHRvcF9ydGlfbWFwW3BhcmVudF9ydGkgLSAxXTsKKwl9 CisKKwlyZXR1cm4gdG9wX3J0aV9tYXA7Cit9CisKKy8qCisgKiBGaW5kIHRoZSBvY2N1cmVuY2Ug bnVtYmVyIG9mIGEgY2VydGFpbiByZWxhdGlvbiB3aXRoaW4gYSBjZXJ0YWluIHN1YnF1ZXJ5Lgor ICoKKyAqIFRoZSBzYW1lIGFsaWFzIG5hbWUgY2FuIG9jY3VyIG11bHRpcGxlIHRpbWVzIHdpdGhp biBhIHN1YnF1ZXJ5LCBidXQgd2Ugd2FudAorICogdG8gZGlzYW1iaWd1YXRlIGJ5IGdpdmluZyBk aWZmZXJlbnQgb2NjdXJyZW5jZXMgZGlmZmVyZW50IGludGVnZXIgaW5kZXhlcy4KKyAqIEhvd2V2 ZXIsIGNoaWxkIHRhYmxlcyBhcmUgZGlzYW1iaWd1YXRlZCBieSBpbmNsdWRpbmcgdGhlIHRhYmxl IG5hbWUgcmF0aGVyCisgKiB0aGFuIGJ5IGluY3JlbWVudGluZyB0aGUgb2NjdXJyZW5jZSBudW1i ZXI7IGFuZCBqb2lucyBhcmUgbm90IG5hbWVkIGFuZCBzbworICogc2hvdWxkbid0IGluY3JlbWVu dCB0aGUgb2NjdXJlbmNlIG51bWJlciBlaXRoZXIuCisgKi8KK3N0YXRpYyBpbnQKK3BncGFfb2Nj dXJyZW5jZV9udW1iZXIoTGlzdCAqcnRhYmxlLCBJbmRleCAqdG9wX3J0aV9tYXAsCisJCQkJCSAg IFN1YlBsYW5SVEluZm8gKnJ0aW5mbywgSW5kZXggcnRpKQoreworCUluZGV4CQlydG9mZnNldCA9 IChydGluZm8gPT0gTlVMTCkgPyAwIDogcnRpbmZvLT5ydG9mZnNldDsKKwlpbnQJCQlvY2N1cnJl bmNlID0gMTsKKwlSYW5nZVRibEVudHJ5ICpydGUgPSBydF9mZXRjaChydGksIHJ0YWJsZSk7CisK Kwlmb3IgKEluZGV4IHByaW9yX3J0aSA9IHJ0b2Zmc2V0ICsgMTsgcHJpb3JfcnRpIDwgcnRpOyAr K3ByaW9yX3J0aSkKKwl7CisJCVJhbmdlVGJsRW50cnkgKnByaW9yX3J0ZTsKKworCQkvKgorCQkg KiBJZiB0aGlzIGlzIGEgY2hpbGQgcmVsIG9mIGEgcGFyZW50IHRoYXQgaXMgYSByZWxhdGlvbiwg c2tpcCBpdC4KKwkJICoKKwkJICogU3VjaCByYW5nZSB0YWJsZSBlbnRyaWVzIGFyZSBkaXNhbWJp Z3VhdGVkIGJ5IG1lbnRpb25pbmcgdGhlIHNjaGVtYQorCQkgKiBhbmQgbmFtZSBvZiB0aGUgdGFi bGUsIG5vdCBieSBjb3VudGluZyB0aGVtIGFzIHNlcGFyYXRlIG9jY3VycmVuY2VzCisJCSAqIG9m IHRoZSBzYW1lIHRhYmxlLgorCQkgKi8KKwkJaWYgKHRvcF9ydGlfbWFwW3ByaW9yX3J0aSAtIDFd ICE9IHByaW9yX3J0aSkKKwkJCWNvbnRpbnVlOworCisJCS8qIFNraXAgam9pbnMuICovCisJCXBy aW9yX3J0ZSA9IHJ0X2ZldGNoKHByaW9yX3J0aSwgcnRhYmxlKTsKKwkJaWYgKHByaW9yX3J0ZS0+ cnRla2luZCA9PSBSVEVfSk9JTikKKwkJCWNvbnRpbnVlOworCisJCS8qIFNraXAgaWYgdGhlIGFs aWFzIG5hbWUgZGlmZmVycy4gKi8KKwkJaWYgKHN0cmNtcChwcmlvcl9ydGUtPmVyZWYtPmFsaWFz bmFtZSwgcnRlLT5lcmVmLT5hbGlhc25hbWUpICE9IDApCisJCQljb250aW51ZTsKKworCQkvKiBM b29rcyBsaWtlIGEgdHJ1ZSBkdXBsaWNhdGUuICovCisJCSsrb2NjdXJyZW5jZTsKKwl9CisKKwly ZXR1cm4gb2NjdXJyZW5jZTsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv cGdwYV9pZGVudGlmaWVyLmggYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfaWRlbnRpZmll ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iMDAwZDJiNzA4MQot LS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9pZGVudGlmaWVy LmgKQEAgLTAsMCArMSw1MiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdwYV9pZGVu dGlmaWVyLmgKKyAqCSAgY3JlYXRlIGFwcHJvcHJpYXRlIGlkZW50aWZpZXJzIGZvciByYW5nZSB0 YWJsZSBlbnRyaWVzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjUsIFBvc3RncmVTUUwg R2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNl L3BncGFfaWRlbnRpZmllci5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2lmbmRl ZiBQR1BBX0lERU5USUZJRVJfSAorI2RlZmluZSBQR1BBX0lERU5USUZJRVJfSAorCisjaW5jbHVk ZSAibm9kZXMvcGF0aG5vZGVzLmgiCisjaW5jbHVkZSAibm9kZXMvcGxhbm5vZGVzLmgiCisKK3R5 cGVkZWYgc3RydWN0IHBncGFfaWRlbnRpZmllcgoreworCWNvbnN0IGNoYXIgKmFsaWFzX25hbWU7 CisJaW50CQkJb2NjdXJyZW5jZTsKKwljb25zdCBjaGFyICpwYXJ0bnNwOworCWNvbnN0IGNoYXIg KnBhcnRyZWw7CisJY29uc3QgY2hhciAqcGxhbl9uYW1lOworfSBwZ3BhX2lkZW50aWZpZXI7CisK Ky8qIENvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciBjb21wYXJpbmcgcG9zc2libHktTlVMTCBzdHJp bmdzLiAqLworc3RhdGljIGlubGluZSBib29sCitzdHJpbmdzX2VxdWFsX29yX2JvdGhfbnVsbChj b25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiKQoreworCWlmIChhID09IGIpCisJCXJldHVybiB0 cnVlOworCWVsc2UgaWYgKGEgPT0gTlVMTCB8fCBiID09IE5VTEwpCisJCXJldHVybiBmYWxzZTsK KwllbHNlCisJCXJldHVybiBzdHJjbXAoYSwgYikgPT0gMDsKK30KKworZXh0ZXJuIGNvbnN0IGNo YXIgKnBncGFfaWRlbnRpZmllcl9zdHJpbmcoY29uc3QgcGdwYV9pZGVudGlmaWVyICpyaWQpOwor ZXh0ZXJuIHZvaWQgcGdwYV9jb21wdXRlX2lkZW50aWZpZXJfYnlfcnRpKFBsYW5uZXJJbmZvICpy b290LCBJbmRleCBydGksCisJCQkJCQkJCQkJICAgcGdwYV9pZGVudGlmaWVyICpyaWQpOworZXh0 ZXJuIGludAlwZ3BhX2NvbXB1dGVfaWRlbnRpZmllcnNfYnlfcmVsaWRzKFBsYW5uZXJJbmZvICpy b290LAorCQkJCQkJCQkJCQkgICBCaXRtYXBzZXQgKnJlbGlkcywKKwkJCQkJCQkJCQkJICAgcGdw YV9pZGVudGlmaWVyICpyaWRzKTsKK2V4dGVybiBwZ3BhX2lkZW50aWZpZXIgKnBncGFfY3JlYXRl X2lkZW50aWZpZXJzX2Zvcl9wbGFubmVkX3N0bXQoUGxhbm5lZFN0bXQgKnBzdG10KTsKKworZXh0 ZXJuIEluZGV4IHBncGFfY29tcHV0ZV9ydGlfZnJvbV9pZGVudGlmaWVyKGludCBydGFibGVfbGVu Z3RoLAorCQkJCQkJCQkJCQkgIHBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmllcnMsCisJCQkJ CQkJCQkJCSAgcGdwYV9pZGVudGlmaWVyICpyaWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2Nv bnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9qb2luLmMgYi9jb250cmliL3BnX3BsYW5fYWR2aWNl L3BncGFfam9pbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lYzhl MWE2NjZlYwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9q b2luLmMKQEAgLTAsMCArMSw2MjkgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFf am9pbi5jCisgKgkgIGFuYWx5c2lzIG9mIGpvaW5zIGluIFBsYW4gdHJlZXMKKyAqCisgKiBDb3B5 cmlnaHQgKGMpIDIwMTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAK KyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9qb2luLmMKKyAqCisgKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgInBn cGFfam9pbi5oIgorI2luY2x1ZGUgInBncGFfc2Nhbi5oIgorI2luY2x1ZGUgInBncGFfd2Fsa2Vy LmgiCisKKyNpbmNsdWRlICJub2Rlcy9wYXRobm9kZXMuaCIKKyNpbmNsdWRlICJub2Rlcy9wcmlu dC5oIgorI2luY2x1ZGUgInBhcnNlci9wYXJzZXRyZWUuaCIKKworLyoKKyAqIFRlbXBvcmFyeSBv YmplY3QgdXNlZCB3aGVuIHVucm9sbGluZyBhIGpvaW4gdHJlZS4KKyAqLworc3RydWN0IHBncGFf am9pbl91bnJvbGxlcgoreworCXVuc2lnbmVkCW5hbGxvY2F0ZWQ7CisJdW5zaWduZWQJbnVzZWQ7 CisJUGxhbgkgICAqb3V0ZXJfc3VicGxhbjsKKwlFbGlkZWROb2RlICpvdXRlcl9lbGlkZWRfbm9k ZTsKKwlib29sCQlvdXRlcl9iZW5lYXRoX2FueV9nYXRoZXI7CisJcGdwYV9qb2luX3N0cmF0ZWd5 ICpzdHJhdGVneTsKKwlQbGFuCSAgKippbm5lcl9zdWJwbGFuczsKKwlFbGlkZWROb2RlICoqaW5u ZXJfZWxpZGVkX25vZGVzOworCXBncGFfam9pbl91bnJvbGxlciAqKmlubmVyX3Vucm9sbGVyczsK Kwlib29sCSAgICppbm5lcl9iZW5lYXRoX2FueV9nYXRoZXI7Cit9OworCitzdGF0aWMgcGdwYV9q b2luX3N0cmF0ZWd5IHBncGFfZGVjb21wb3NlX2pvaW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0 ICp3YWxrZXIsCisJCQkJCQkJCQkJCSAgUGxhbiAqcGxhbiwKKwkJCQkJCQkJCQkJICBQbGFuICoq cmVhbG91dGVyLAorCQkJCQkJCQkJCQkgIFBsYW4gKipyZWFsaW5uZXIsCisJCQkJCQkJCQkJCSAg RWxpZGVkTm9kZSAqKmVsaWRlZHJlYWxvdXRlciwKKwkJCQkJCQkJCQkJICBFbGlkZWROb2RlICoq ZWxpZGVkcmVhbGlubmVyLAorCQkJCQkJCQkJCQkgIGJvb2wgKmZvdW5kX2FueV9vdXRlcl9nYXRo ZXIsCisJCQkJCQkJCQkJCSAgYm9vbCAqZm91bmRfYW55X2lubmVyX2dhdGhlcik7CitzdGF0aWMg RWxpZGVkTm9kZSAqcGdwYV9kZXNjZW5kX25vZGUoUGxhbm5lZFN0bXQgKnBzdG10LCBQbGFuICoq cGxhbik7CitzdGF0aWMgRWxpZGVkTm9kZSAqcGdwYV9kZXNjZW5kX2FueV9nYXRoZXIoUGxhbm5l ZFN0bXQgKnBzdG10LCBQbGFuICoqcGxhbiwKKwkJCQkJCQkJCQkgICBib29sICpmb3VuZF9hbnlf Z2F0aGVyKTsKK3N0YXRpYyBib29sIHBncGFfZGVzY2VuZF9hbnlfdW5pcXVlKFBsYW5uZWRTdG10 ICpwc3RtdCwgUGxhbiAqKnBsYW4sCisJCQkJCQkJCQlFbGlkZWROb2RlICoqZWxpZGVkX25vZGUp OworCitzdGF0aWMgYm9vbCBpc19yZXN1bHRfbm9kZV93aXRoX2NoaWxkKFBsYW4gKnBsYW4pOwor c3RhdGljIGJvb2wgaXNfc29ydGluZ19wbGFuKFBsYW4gKnBsYW4pOworCisvKgorICogQ3JlYXRl IGFuIGluaXRpYWxseS1lbXB0eSBvYmplY3QgZm9yIHVucm9sbGluZyBqb2lucy4KKyAqCisgKiBU aGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBoZWxwZXIgb2JqZWN0IHRoYXQgY2FuIGxhdGVyIGJlIHVz ZWQgdG8gY3JlYXRlIGEKKyAqIHBncGFfdW5yb2xsZWRfam9pbiwgYWZ0ZXIgZmlyc3QgY2FsbGlu ZyBwZ3BhX3Vucm9sbF9qb2luIG9uZSBvciBtb3JlIHRpbWVzLgorICovCitwZ3BhX2pvaW5fdW5y b2xsZXIgKgorcGdwYV9jcmVhdGVfam9pbl91bnJvbGxlcih2b2lkKQoreworCXBncGFfam9pbl91 bnJvbGxlciAqam9pbl91bnJvbGxlcjsKKworCWpvaW5fdW5yb2xsZXIgPSBwYWxsb2MwX29iamVj dChwZ3BhX2pvaW5fdW5yb2xsZXIpOworCWpvaW5fdW5yb2xsZXItPm5hbGxvY2F0ZWQgPSA0Owor CWpvaW5fdW5yb2xsZXItPnN0cmF0ZWd5ID0KKwkJcGFsbG9jX2FycmF5KHBncGFfam9pbl9zdHJh dGVneSwgam9pbl91bnJvbGxlci0+bmFsbG9jYXRlZCk7CisJam9pbl91bnJvbGxlci0+aW5uZXJf c3VicGxhbnMgPQorCQlwYWxsb2NfYXJyYXkoUGxhbiAqLCBqb2luX3Vucm9sbGVyLT5uYWxsb2Nh dGVkKTsKKwlqb2luX3Vucm9sbGVyLT5pbm5lcl9lbGlkZWRfbm9kZXMgPQorCQlwYWxsb2NfYXJy YXkoRWxpZGVkTm9kZSAqLCBqb2luX3Vucm9sbGVyLT5uYWxsb2NhdGVkKTsKKwlqb2luX3Vucm9s bGVyLT5pbm5lcl91bnJvbGxlcnMgPQorCQlwYWxsb2NfYXJyYXkocGdwYV9qb2luX3Vucm9sbGVy ICosIGpvaW5fdW5yb2xsZXItPm5hbGxvY2F0ZWQpOworCWpvaW5fdW5yb2xsZXItPmlubmVyX2Jl bmVhdGhfYW55X2dhdGhlciA9CisJCXBhbGxvY19hcnJheShib29sLCBqb2luX3Vucm9sbGVyLT5u YWxsb2NhdGVkKTsKKworCXJldHVybiBqb2luX3Vucm9sbGVyOworfQorCisvKgorICogVW5yb2xs IG9uZSBsZXZlbCBvZiBhbiB1bnJvbGxhYmxlIGpvaW4gdHJlZS4KKyAqCisgKiBPdXIgYmFzaWMg Z29hbCBoZXJlIGlzIHRvIHVucm9sbCBqb2luIHRyZWVzIGFzIHRoZXkgb2NjdXIgaW4gdGhlIFBs YW4KKyAqIHRyZWUgaW50byBhIHNpbXBsZXIgYW5kIG1vcmUgcmVndWxhciBzdHJ1Y3R1cmUgdGhh dCB3ZSBjYW4gbW9yZSBlYXNpbHkKKyAqIHVzZSBmb3IgZnVydGhlciBwcm9jZXNzaW5nLiBVbnJv bGxpbmcgaXMgb3V0ZXItZGVlcCwgc28gaWYgdGhlIHBsYW4gdHJlZQorICogaGFzIEpvaW4xKEpv aW4yKEEsQiksSm9pbjMoQyxEKSksIHRoZSBzYW1lIGpvaW4gdW5yb2xsZXIgb2JqZWN0IHNob3Vs ZCBiZQorICogdXNlZCBmb3IgSm9pbjEgYW5kIEpvaW4yLCBidXQgYSBkaWZmZXJlbnQgb25lIHdp bGwgYmUgbmVlZGVkIGZvciBKb2luMywKKyAqIHNpbmNlIHRoYXQgaW52b2x2ZXMgYSBqb2luIHdp dGhpbiB0aGUgKmlubmVyKiBzaWRlIG9mIGFub3RoZXIgam9pbi4KKyAqCisgKiBwZ3BhX3BsYW5f d2Fsa2VyIGNyZWF0ZXMgYSAidG9wIGxldmVsIiBqb2luIHVucm9sbGVyIG9iamVjdCB3aGVuIGl0 CisgKiBlbmNvdW50ZXJzIGEgam9pbiBpbiBhIHBvcnRpb24gb2YgdGhlIHBsYW4gdHJlZSBpbiB3 aGljaCBubyBqb2luIHVucm9sbGVyCisgKiBpcyBhbHJlYWR5IGFjdGl2ZS4gRnJvbSB0aGVyZSwg dGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5nCisgKiB0byB3aGF0IHBv cnRpb24gb2YgdGhlIHBsYW4gdHJlZSB0aGF0IGpvaW4gdW5yb2xsZXIgYXBwbGllcywgYW5kIGZv cgorICogY3JlYXRpbmcgYW55IHN1Ym9yZGluYXRlIGpvaW4gdW5yb2xsZXIgb2JqZWN0cyB0aGF0 IGFyZSBuZWVkZWQgYXMgYSByZXN1bHQKKyAqIG9mIG5vbi1vdXRlci1kZWVwIGpvaW4gdHJlZXMu IFdlIGRvIHRoaXMgYnkgcmV0dXJuaW5nIHRoZSBqb2luIHVucm9sbGVyCisgKiBvYmplY3RzIHRo YXQgc2hvdWxkIGJlIHVzZWQgZm9yIGZ1cnRoZXIgdHJhdmVyc2FsIG9mIHRoZSBvdXRlciBhbmQg aW5uZXIKKyAqIHN1YnRyZWVzIG9mIHRoZSBjdXJyZW50IHBsYW4gbm9kZSB2aWEgKm91dGVyX2pv aW5fdW5yb2xsZXIgYW5kCisgKiAqaW5uZXJfam9pbl91bnJvbGxlciwgcmVzcGVjdGl2ZWx5Lgor ICovCit2b2lkCitwZ3BhX3Vucm9sbF9qb2luKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fs a2VyLCBQbGFuICpwbGFuLAorCQkJCSBib29sIGJlbmVhdGhfYW55X2dhdGhlciwKKwkJCQkgcGdw YV9qb2luX3Vucm9sbGVyICpqb2luX3Vucm9sbGVyLAorCQkJCSBwZ3BhX2pvaW5fdW5yb2xsZXIg KipvdXRlcl9qb2luX3Vucm9sbGVyLAorCQkJCSBwZ3BhX2pvaW5fdW5yb2xsZXIgKippbm5lcl9q b2luX3Vucm9sbGVyKQoreworCXBncGFfam9pbl9zdHJhdGVneSBzdHJhdGVneTsKKwlQbGFuCSAg ICpyZWFsaW5uZXIsCisJCQkgICAqcmVhbG91dGVyOworCUVsaWRlZE5vZGUgKmVsaWRlZGlubmVy LAorCQkJICAgKmVsaWRlZG91dGVyOworCWludAkJCW47CisJYm9vbAkJZm91bmRfYW55X291dGVy X2dhdGhlciA9IGZhbHNlOworCWJvb2wJCWZvdW5kX2FueV9pbm5lcl9nYXRoZXIgPSBmYWxzZTsK KworCUFzc2VydChqb2luX3Vucm9sbGVyICE9IE5VTEwpOworCisJLyoKKwkgKiBXZSBuZWVkIHRv IHBhc3MgdGhlIGpvaW5fdW5yb2xsZXIgb2JqZWN0IGRvd24gdGhyb3VnaCBjZXJ0YWluIHR5cGVz IG9mCisJICogcGxhbiBub2RlcyAtLSBhbnl0aGluZyB0aGF0J3MgY29uc2lkZXJlZCBwYXJ0IG9m IHRoZSBqb2luIHN0cmF0ZWd5LCBhbmQKKwkgKiBhbnkgb3RoZXIgbm9kZXMgdGhhdCBjYW4gb2Nj dXIgaW4gYSBqb2luIHRyZWUgZGVzcGl0ZSBub3QgYmVpbmcgc2NhbnMKKwkgKiBvciBqb2lucy4K KwkgKgorCSAqIFRoaXMgaW5jbHVkZXM6CisJICoKKwkgKiAoMSkgTWF0ZXJpYWxpemUsIE1lbW9p emUsIGFuZCBIYXNoIG5vZGVzLCB3aGljaCBhcmUgcGFydCBvZiB0aGUgam9pbgorCSAqIHN0cmF0 ZWd5LAorCSAqCisJICogKDIpIEdhdGhlciBhbmQgR2F0aGVyIE1lcmdlIG5vZGVzLCB3aGljaCBj YW4gb2NjdXIgYXQgYW55IHBvaW50IGluIHRoZQorCSAqIGpvaW4gdHJlZSB3aGVyZSB0aGUgcGxh bm5lciBkZWNpZGVkIHRvIGluaXRpYXRlIHBhcmFsbGVsaXNtLAorCSAqCisJICogKDMpIFNvcnQg YW5kIEluY3JlbWVudGFsU29ydCBub2Rlcywgd2hpY2ggY2FuIG9jY3VyIGJlbmVhdGggTWVyZ2VK b2luCisJICogb3IgR2F0aGVyTWVyZ2UsCisJICoKKwkgKiAoNCkgQWdnIGFuZCBVbmlxdWUgbm9k ZXMsIHdoaWNoIGNhbiBvY2N1ciB3aGVuIHdlIGRlY2lkZSB0byBtYWtlIHRoZQorCSAqIG51bGxh YmxlIHNpZGUgb2YgYSBzZW1pam9pbiB1bmlxdWUgYW5kIHRoZW4gam9pbiB0aGUgcmVzdWx0LCBh bmQKKwkgKgorCSAqICg1KSBSZXN1bHQgbm9kZXMgd2l0aCBjaGlsZHJlbiwgd2hpY2ggY2FuIGJl IGFkZGVkIGVpdGhlciB0byBwcm9qZWN0IHRvCisJICogZW5mb3JjZSBhIG9uZS10aW1lIGZpbHRl ciAoYnV0IFJlc3VsdCBub2RlcyB3aXRob3V0IGNoaWxkcmVuIGFyZQorCSAqIGRlZ2VuZXJhdGUg c2NhbnMgb3Igam9pbnMpLgorCSAqLworCWlmIChJc0EocGxhbiwgTWF0ZXJpYWwpIHx8IElzQShw bGFuLCBNZW1vaXplKSB8fCBJc0EocGxhbiwgSGFzaCkKKwkJfHwgSXNBKHBsYW4sIEdhdGhlcikg fHwgSXNBKHBsYW4sIEdhdGhlck1lcmdlKQorCQl8fCBpc19zb3J0aW5nX3BsYW4ocGxhbikgfHwg SXNBKHBsYW4sIEFnZykgfHwgSXNBKHBsYW4sIFVuaXF1ZSkKKwkJfHwgaXNfcmVzdWx0X25vZGVf d2l0aF9jaGlsZChwbGFuKSkKKwl7CisJCSpvdXRlcl9qb2luX3Vucm9sbGVyID0gam9pbl91bnJv bGxlcjsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogU2luY2Ugd2UndmUgYWxyZWFkeSBoYW5k bGVkIG5vZGVzIHRoYXQgcmVxdWlyZSBwYXNzLXRocm91Z2ggdHJlYXRtZW50LAorCSAqIHRoaXMg c2hvdWxkIGJlIGFuIHVucm9sbGFibGUgam9pbi4KKwkgKi8KKwlzdHJhdGVneSA9IHBncGFfZGVj b21wb3NlX2pvaW4od2Fsa2VyLCBwbGFuLAorCQkJCQkJCQkgICAmcmVhbG91dGVyLCAmcmVhbGlu bmVyLAorCQkJCQkJCQkgICAmZWxpZGVkb3V0ZXIsICZlbGlkZWRpbm5lciwKKwkJCQkJCQkJICAg JmZvdW5kX2FueV9vdXRlcl9nYXRoZXIsCisJCQkJCQkJCSAgICZmb3VuZF9hbnlfaW5uZXJfZ2F0 aGVyKTsKKworCS8qIElmIG91ciB3b3Jrc3BhY2UgaXMgZnVsbCwgZXhwYW5kIGl0LiAqLworCWlm IChqb2luX3Vucm9sbGVyLT5udXNlZCA+PSBqb2luX3Vucm9sbGVyLT5uYWxsb2NhdGVkKQorCXsK KwkJam9pbl91bnJvbGxlci0+bmFsbG9jYXRlZCAqPSAyOworCQlqb2luX3Vucm9sbGVyLT5zdHJh dGVneSA9CisJCQlyZXBhbGxvY19hcnJheShqb2luX3Vucm9sbGVyLT5zdHJhdGVneSwKKwkJCQkJ CSAgIHBncGFfam9pbl9zdHJhdGVneSwKKwkJCQkJCSAgIGpvaW5fdW5yb2xsZXItPm5hbGxvY2F0 ZWQpOworCQlqb2luX3Vucm9sbGVyLT5pbm5lcl9zdWJwbGFucyA9CisJCQlyZXBhbGxvY19hcnJh eShqb2luX3Vucm9sbGVyLT5pbm5lcl9zdWJwbGFucywKKwkJCQkJCSAgIFBsYW4gKiwKKwkJCQkJ CSAgIGpvaW5fdW5yb2xsZXItPm5hbGxvY2F0ZWQpOworCQlqb2luX3Vucm9sbGVyLT5pbm5lcl9l bGlkZWRfbm9kZXMgPQorCQkJcmVwYWxsb2NfYXJyYXkoam9pbl91bnJvbGxlci0+aW5uZXJfZWxp ZGVkX25vZGVzLAorCQkJCQkJICAgRWxpZGVkTm9kZSAqLAorCQkJCQkJICAgam9pbl91bnJvbGxl ci0+bmFsbG9jYXRlZCk7CisJCWpvaW5fdW5yb2xsZXItPmlubmVyX2JlbmVhdGhfYW55X2dhdGhl ciA9CisJCQlyZXBhbGxvY19hcnJheShqb2luX3Vucm9sbGVyLT5pbm5lcl9iZW5lYXRoX2FueV9n YXRoZXIsCisJCQkJCQkgICBib29sLAorCQkJCQkJICAgam9pbl91bnJvbGxlci0+bmFsbG9jYXRl ZCk7CisJCWpvaW5fdW5yb2xsZXItPmlubmVyX3Vucm9sbGVycyA9CisJCQlyZXBhbGxvY19hcnJh eShqb2luX3Vucm9sbGVyLT5pbm5lcl91bnJvbGxlcnMsCisJCQkJCQkgICBwZ3BhX2pvaW5fdW5y b2xsZXIgKiwKKwkJCQkJCSAgIGpvaW5fdW5yb2xsZXItPm5hbGxvY2F0ZWQpOworCX0KKworCS8q CisJICogU2luY2Ugd2UncmUgZmxhdHRlbmluZyBvdXRlci1kZWVwIGpvaW4gdHJlZXMsIGl0IGZv bGxvd3MgdGhhdCBpZiB0aGUKKwkgKiBvdXRlciBzaWRlIGlzIHN0aWxsIGFuIHVucm9sbGFibGUg am9pbiwgaXQgc2hvdWxkIGJlIHVucm9sbGVkIGludG8gdGhpcworCSAqIHNhbWUgb2JqZWN0LiBP dGhlcndpc2UsIHdlJ3ZlIHJlYWNoZWQgdGhlIGxpbWl0IG9mIHdoYXQgd2UgY2FuIHVucm9sbAor CSAqIGludG8gdGhpcyBvYmplY3QgYW5kIG11c3QgcmVtZW1iZXIgdGhlIG91dGVyIHNpZGUgYXMg dGhlIGZpbmFsIG91dGVyCisJICogc3VicGxhbi4KKwkgKi8KKwlpZiAoZWxpZGVkb3V0ZXIgPT0g TlVMTCAmJiBwZ3BhX2lzX2pvaW4ocmVhbG91dGVyKSkKKwkJKm91dGVyX2pvaW5fdW5yb2xsZXIg PSBqb2luX3Vucm9sbGVyOworCWVsc2UKKwl7CisJCWpvaW5fdW5yb2xsZXItPm91dGVyX3N1YnBs YW4gPSByZWFsb3V0ZXI7CisJCWpvaW5fdW5yb2xsZXItPm91dGVyX2VsaWRlZF9ub2RlID0gZWxp ZGVkb3V0ZXI7CisJCWpvaW5fdW5yb2xsZXItPm91dGVyX2JlbmVhdGhfYW55X2dhdGhlciA9CisJ CQliZW5lYXRoX2FueV9nYXRoZXIgfHwgZm91bmRfYW55X291dGVyX2dhdGhlcjsKKwl9CisKKwkv KgorCSAqIFN0b3JlIHRoZSBpbm5lciBzdWJwbGFuLiBJZiBpdCdzIGFuIHVucm9sbGFibGUgam9p biwgaXQgbmVlZHMgdG8gYmUKKwkgKiBmbGF0dGVuZWQgaW4gdHVybiwgYnV0IGludG8gYSBuZXcg dW5yb2xsZXIgb2JqZWN0LCBub3QgdGhpcyBvbmUuCisJICovCisJbiA9IGpvaW5fdW5yb2xsZXIt Pm51c2VkKys7CisJam9pbl91bnJvbGxlci0+c3RyYXRlZ3lbbl0gPSBzdHJhdGVneTsKKwlqb2lu X3Vucm9sbGVyLT5pbm5lcl9zdWJwbGFuc1tuXSA9IHJlYWxpbm5lcjsKKwlqb2luX3Vucm9sbGVy LT5pbm5lcl9lbGlkZWRfbm9kZXNbbl0gPSBlbGlkZWRpbm5lcjsKKwlqb2luX3Vucm9sbGVyLT5p bm5lcl9iZW5lYXRoX2FueV9nYXRoZXJbbl0gPQorCQliZW5lYXRoX2FueV9nYXRoZXIgfHwgZm91 bmRfYW55X2lubmVyX2dhdGhlcjsKKwlpZiAoZWxpZGVkaW5uZXIgPT0gTlVMTCAmJiBwZ3BhX2lz X2pvaW4ocmVhbGlubmVyKSkKKwkJKmlubmVyX2pvaW5fdW5yb2xsZXIgPSBwZ3BhX2NyZWF0ZV9q b2luX3Vucm9sbGVyKCk7CisJZWxzZQorCQkqaW5uZXJfam9pbl91bnJvbGxlciA9IE5VTEw7CisJ am9pbl91bnJvbGxlci0+aW5uZXJfdW5yb2xsZXJzW25dID0gKmlubmVyX2pvaW5fdW5yb2xsZXI7 Cit9CisKKy8qCisgKiBVc2UgdGhlIGRhdGEgd2UndmUgYWNjdW11bGF0ZWQgaW4gYSBwZ3BhX2pv aW5fdW5yb2xsZXIgb2JqZWN0IHRvIGNvbnN0cnVjdAorICogYSBwZ3BhX3Vucm9sbGVkX2pvaW4u CisgKi8KK3BncGFfdW5yb2xsZWRfam9pbiAqCitwZ3BhX2J1aWxkX3Vucm9sbGVkX2pvaW4ocGdw YV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkgcGdwYV9qb2luX3Vucm9sbGVy ICpqb2luX3Vucm9sbGVyKQoreworCXBncGFfdW5yb2xsZWRfam9pbiAqdWpvaW47CisJaW50CQkJ aTsKKworCS8qCisJICogV2Ugc2hvdWxkbid0IGhhdmUgZ29uZSBldmVuIHNvIGZhciBhcyB0byBj cmVhdGUgYSBqb2luIHVucm9sbGVyIHVubGVzcworCSAqIHdlIGZvdW5kIGF0IGxlYXN0IG9uZSB1 bnJvbGxhYmxlIGpvaW4uCisJICovCisJQXNzZXJ0KGpvaW5fdW5yb2xsZXItPm51c2VkID4gMCk7 CisKKwkvKiBBbGxvY2F0ZSByZXN1bHQgc3RydWN0dXJlcy4gKi8KKwl1am9pbiA9IHBhbGxvYzBf b2JqZWN0KHBncGFfdW5yb2xsZWRfam9pbik7CisJdWpvaW4tPm5pbm5lciA9IGpvaW5fdW5yb2xs ZXItPm51c2VkOworCXVqb2luLT5zdHJhdGVneSA9IHBhbGxvYzBfYXJyYXkocGdwYV9qb2luX3N0 cmF0ZWd5LCBqb2luX3Vucm9sbGVyLT5udXNlZCk7CisJdWpvaW4tPmlubmVyID0gcGFsbG9jMF9h cnJheShwZ3BhX2pvaW5fbWVtYmVyLCBqb2luX3Vucm9sbGVyLT5udXNlZCk7CisKKwkvKiBIYW5k bGUgdGhlIG91dGVybW9zdCBqb2luLiAqLworCXVqb2luLT5vdXRlci5wbGFuID0gam9pbl91bnJv bGxlci0+b3V0ZXJfc3VicGxhbjsKKwl1am9pbi0+b3V0ZXIuZWxpZGVkX25vZGUgPSBqb2luX3Vu cm9sbGVyLT5vdXRlcl9lbGlkZWRfbm9kZTsKKwl1am9pbi0+b3V0ZXIuc2NhbiA9CisJCXBncGFf YnVpbGRfc2Nhbih3YWxrZXIsIHVqb2luLT5vdXRlci5wbGFuLAorCQkJCQkJdWpvaW4tPm91dGVy LmVsaWRlZF9ub2RlLAorCQkJCQkJam9pbl91bnJvbGxlci0+b3V0ZXJfYmVuZWF0aF9hbnlfZ2F0 aGVyLAorCQkJCQkJdHJ1ZSk7CisKKwkvKgorCSAqIFdlIHdhbnQgdGhlIGpvaW5zIGZyb20gdGhl IGRlZXBlc3QgcGFydCBvZiB0aGUgcGxhbiB0cmVlIHRvIGFwcGVhcgorCSAqIGZpcnN0IGluIHRo ZSByZXN1bHQgb2JqZWN0LCBidXQgdGhlIGpvaW4gdW5yb2xsZXIgYWRkcyB0aGVtIGluIGV4YWN0 bHkKKwkgKiB0aGUgcmV2ZXJzZSBvZiB0aGF0IG9yZGVyLCBzbyB3ZSBuZWVkIHRvIGZsaXAgdGhl IG9yZGVyIG9mIHRoZSBhcnJheXMKKwkgKiB3aGVuIGNvbnN0cnVjdGluZyB0aGUgZmluYWwgcmVz dWx0LgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBqb2luX3Vucm9sbGVyLT5udXNlZDsgKytpKQor CXsKKwkJaW50CQkJayA9IGpvaW5fdW5yb2xsZXItPm51c2VkIC0gaSAtIDE7CisKKwkJLyogQ29w eSBzdHJhdGVneSwgUGxhbiwgYW5kIEVsaWRlZE5vZGUuICovCisJCXVqb2luLT5zdHJhdGVneVtp XSA9IGpvaW5fdW5yb2xsZXItPnN0cmF0ZWd5W2tdOworCQl1am9pbi0+aW5uZXJbaV0ucGxhbiA9 IGpvaW5fdW5yb2xsZXItPmlubmVyX3N1YnBsYW5zW2tdOworCQl1am9pbi0+aW5uZXJbaV0uZWxp ZGVkX25vZGUgPSBqb2luX3Vucm9sbGVyLT5pbm5lcl9lbGlkZWRfbm9kZXNba107CisKKwkJLyoK KwkJICogRmlsbCBpbiByZW1haW5pbmcgZGV0YWlscywgdXNpbmcgZWl0aGVyIHRoZSBuZXN0ZWQg am9pbiB1bnJvbGxlciwKKwkJICogb3IgYnkgZGVyaXZpbmcgdGhlbSBmcm9tIHRoZSBwbGFuIGFu ZCBlbGlkZWQgbm9kZXMuCisJCSAqLworCQlpZiAoam9pbl91bnJvbGxlci0+aW5uZXJfdW5yb2xs ZXJzW2tdICE9IE5VTEwpCisJCQl1am9pbi0+aW5uZXJbaV0udW5yb2xsZWRfam9pbiA9CisJCQkJ cGdwYV9idWlsZF91bnJvbGxlZF9qb2luKHdhbGtlciwKKwkJCQkJCQkJCQkgam9pbl91bnJvbGxl ci0+aW5uZXJfdW5yb2xsZXJzW2tdKTsKKwkJZWxzZQorCQkJdWpvaW4tPmlubmVyW2ldLnNjYW4g PQorCQkJCXBncGFfYnVpbGRfc2Nhbih3YWxrZXIsIHVqb2luLT5pbm5lcltpXS5wbGFuLAorCQkJ CQkJCQl1am9pbi0+aW5uZXJbaV0uZWxpZGVkX25vZGUsCisJCQkJCQkJCWpvaW5fdW5yb2xsZXIt PmlubmVyX2JlbmVhdGhfYW55X2dhdGhlcltrXSwKKwkJCQkJCQkJdHJ1ZSk7CisJfQorCisJcmV0 dXJuIHVqb2luOworfQorCisvKgorICogRnJlZSBtZW1vcnkgYWxsb2NhdGVkIGZvciBwZ3BhX2pv aW5fdW5yb2xsZXIuCisgKi8KK3ZvaWQKK3BncGFfZGVzdHJveV9qb2luX3Vucm9sbGVyKHBncGFf am9pbl91bnJvbGxlciAqam9pbl91bnJvbGxlcikKK3sKKwlwZnJlZShqb2luX3Vucm9sbGVyLT5z dHJhdGVneSk7CisJcGZyZWUoam9pbl91bnJvbGxlci0+aW5uZXJfc3VicGxhbnMpOworCXBmcmVl KGpvaW5fdW5yb2xsZXItPmlubmVyX2VsaWRlZF9ub2Rlcyk7CisJcGZyZWUoam9pbl91bnJvbGxl ci0+aW5uZXJfdW5yb2xsZXJzKTsKKwlwZnJlZShqb2luX3Vucm9sbGVyKTsKK30KKworLyoKKyAq IElkZW50aWZ5IHRoZSBqb2luIHN0cmF0ZWd5IHVzZWQgYnkgYSBqb2luIGFuZCB0aGUgInJlYWwi IGlubmVyIGFuZCBvdXRlcgorICogcGxhbnMuCisgKgorICogRm9yIGV4YW1wbGUsIGEgSGFzaCBK b2luIGFsd2F5cyBoYXMgYSBIYXNoIG5vZGUgb24gdGhlIGlubmVyIHNpZGUsIGJ1dAorICogZm9y IGFsbCBpbnRlbnRzIGFuZCBwdXJwb3NlcyB0aGUgcmVhbCBpbm5lciBpbnB1dCBpcyB0aGUgSGFz aCBub2RlJ3MgY2hpbGQsCisgKiBub3QgdGhlIEhhc2ggbm9kZSBpdHNlbGYuCisgKgorICogTGlr ZXdpc2UsIGEgTWVyZ2UgSm9pbiBtYXkgaGF2ZSBTb3J0IG5vdGUgb24gdGhlIGlubmVyIG9yIG91 dGVyIHNpZGU7IGlmCisgKiBpdCBkb2VzLCB0aGUgcmVhbCBpbnB1dCB0byB0aGUgam9pbiBpcyB0 aGUgU29ydCBub2RlJ3MgY2hpbGQsIG5vdCB0aGUKKyAqIFNvcnQgbm9kZSBpdHNlbGYuCisgKgor ICogSW4gYWRkaXRpb24sIHdpdGggYSBNZXJnZSBKb2luIG9yIGEgTmVzdGVkIExvb3AsIHRoZSBq b2luIHBsYW5uaW5nIGNvZGUKKyAqIG1heSBhZGQgYWRkaXRpb25hbCBub2RlcyBzdWNoIGFzIE1h dGVyaWFsaXplIG9yIE1lbW9pemUuIFdlIHJlZ2FyZCB0aGVzZQorICogYXMgYW4gYXNwZWN0IG9m IHRoZSBqb2luIHN0cmF0ZWd5LiBBcyBpbiB0aGUgcHJldmlvdXMgY2FzZXMsIHRoZSB0cnVlIGlu cHV0CisgKiB0byB0aGUgam9pbiBpcyB0aGUgdW5kZXJseWluZyBub2RlLgorICoKKyAqIEhvd2V2 ZXIsIGlmIGFueSBpbnZvbHZlZCBjaGlsZCBub2RlIHByZXZpb3VzbHkgaGFkIGEgbm93LWVsaWRl ZCBub2RlIHN0YWNrZWQKKyAqIG9uIHRvcCwgdGhlbiB3ZSBjYW4ndCAibG9vayB0aHJvdWdoIiB0 aGF0IG5vZGUgLS0gaW5kZWVkLCB3aGF0J3MgZ29pbmcgdG8gYmUKKyAqIHJlbGV2YW50IGZvciBv dXIgcHVycG9zZXMgaXMgdGhlIEVsaWRlZE5vZGUgb24gdG9wIG9mIHRoYXQgcGxhbiBub2RlLCBy YXRoZXIKKyAqIHRoYW4gdGhlIHBsYW4gbm9kZSBpdHNlbGYuCisgKgorICogSWYgdGhlcmUgYXJl IG11bHRpcGxlIGVsaWRlZCBub2Rlcywgd2Ugd2FudCB0aGF0IG9uZSB0aGF0IHdvdWxkIGhhdmUg YmVlbgorICogdXBwZXJtb3N0IGluIHRoZSBwbGFuIHRyZWUgcHJpb3IgdG8gc2V0cmVmcyBwcm9j ZXNzaW5nOyB3ZSBleHBlY3QgdG8gZmluZAorICogdGhhdCBvbmUgbGFzdCBpbiB0aGUgbGlzdCBv ZiBlbGlkZWQgbm9kZXMuCisgKgorICogT24gcmV0dXJuICpyZWFsb3V0ZXIgYW5kICpyZWFsaW5u ZXIgd2lsbCBoYXZlIGJlZW4gc2V0IHRvIHRoZSByZWFsIGlubmVyCisgKiBhbmQgcmVhbCBvdXRl ciBwbGFucyB0aGF0IHdlIGlkZW50aWZpZWQsIGFuZCAqZWxpZGVkcmVhbG91dGVyIGFuZAorICog KmVsaWRlZHJlYWxpbm5lciB0byB0aGUgbGFzdCBvZiBhbnkgY29ycmVzcG9kaW5nIGVsaWRlZCBu b2Rlcy4KKyAqIEFkZGl0aW9uYWxseSwgKmZvdW5kX2FueV9vdXRlcl9nYXRoZXIgYW5kICpmb3Vu ZF9hbnlfaW5uZXJfZ2F0aGVyIHdpbGwKKyAqIGJlIHNldCB0byB0cnVlIGlmIHdlIGxvb2tlZCB0 aHJvdWdoIGEgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBub2RlIG9uCisgKiB0aGF0IHNpZGUgb2Yg dGhlIGpvaW4sIGFuZCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBwZ3BhX2pvaW5fc3Ry YXRlZ3kKK3BncGFfZGVjb21wb3NlX2pvaW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxr ZXIsIFBsYW4gKnBsYW4sCisJCQkJCVBsYW4gKipyZWFsb3V0ZXIsIFBsYW4gKipyZWFsaW5uZXIs CisJCQkJCUVsaWRlZE5vZGUgKiplbGlkZWRyZWFsb3V0ZXIsIEVsaWRlZE5vZGUgKiplbGlkZWRy ZWFsaW5uZXIsCisJCQkJCWJvb2wgKmZvdW5kX2FueV9vdXRlcl9nYXRoZXIsIGJvb2wgKmZvdW5k X2FueV9pbm5lcl9nYXRoZXIpCit7CisJUGxhbm5lZFN0bXQgKnBzdG10ID0gd2Fsa2VyLT5wc3Rt dDsKKwlKb2luVHlwZQlqb2ludHlwZSA9ICgoSm9pbiAqKSBwbGFuKS0+am9pbnR5cGU7CisJUGxh bgkgICAqb3V0ZXJwbGFuID0gcGxhbi0+bGVmdHRyZWU7CisJUGxhbgkgICAqaW5uZXJwbGFuID0g cGxhbi0+cmlnaHR0cmVlOworCUVsaWRlZE5vZGUgKmVsaWRlZG91dGVyOworCUVsaWRlZE5vZGUg KmVsaWRlZGlubmVyOworCXBncGFfam9pbl9zdHJhdGVneSBzdHJhdGVneTsKKwlib29sCQl1bmlx dWVvdXRlcjsKKwlib29sCQl1bmlxdWVpbm5lcjsKKworCWVsaWRlZG91dGVyID0gcGdwYV9sYXN0 X2VsaWRlZF9ub2RlKHBzdG10LCBvdXRlcnBsYW4pOworCWVsaWRlZGlubmVyID0gcGdwYV9sYXN0 X2VsaWRlZF9ub2RlKHBzdG10LCBpbm5lcnBsYW4pOworCSpmb3VuZF9hbnlfb3V0ZXJfZ2F0aGVy ID0gZmFsc2U7CisJKmZvdW5kX2FueV9pbm5lcl9nYXRoZXIgPSBmYWxzZTsKKworCXN3aXRjaCAo bm9kZVRhZyhwbGFuKSkKKwl7CisJCWNhc2UgVF9NZXJnZUpvaW46CisKKwkJCS8qCisJCQkgKiBU aGUgcGxhbm5lciBtYXkgaGF2ZSBjaG9zZW4gdG8gcGxhY2UgYSBNYXRlcmlhbCBub2RlIG9uIHRo ZQorCQkJICogaW5uZXIgc2lkZSBvZiB0aGUgTWVyZ2VKb2luOyBpZiB0aGlzIGlzIHByZXNlbnQs IHdlIHJlY29yZCBpdAorCQkJICogYXMgcGFydCBvZiB0aGUgam9pbiBzdHJhdGVneS4KKwkJCSAq LworCQkJaWYgKGVsaWRlZGlubmVyID09IE5VTEwgJiYgSXNBKGlubmVycGxhbiwgTWF0ZXJpYWwp KQorCQkJeworCQkJCWVsaWRlZGlubmVyID0gcGdwYV9kZXNjZW5kX25vZGUocHN0bXQsICZpbm5l cnBsYW4pOworCQkJCXN0cmF0ZWd5ID0gSlNUUkFUX01FUkdFX0pPSU5fTUFURVJJQUxJWkU7CisJ CQl9CisJCQllbHNlCisJCQkJc3RyYXRlZ3kgPSBKU1RSQVRfTUVSR0VfSk9JTl9QTEFJTjsKKwor CQkJLyoKKwkJCSAqIEZvciBhIE1lcmdlSm9pbiwgZWl0aGVyIHRoZSBvdXRlciBvciB0aGUgaW5u ZXIgc3VicGxhbiwgb3IKKwkJCSAqIGJvdGgsIG1heSBoYXZlIG5lZWRlZCB0byBiZSBzb3J0ZWQ7 IHdlIG11c3QgZGlzcmVnYXJkIGFueSBTb3J0CisJCQkgKiBvciBJbmNyZW1lbnRhbFNvcnQgbm9k ZSB0byBmaW5kIHRoZSByZWFsIGlubmVyIG9yIG91dGVyCisJCQkgKiBzdWJwbGFuLgorCQkJICov CisJCQlpZiAoZWxpZGVkb3V0ZXIgPT0gTlVMTCAmJiBpc19zb3J0aW5nX3BsYW4ob3V0ZXJwbGFu KSkKKwkJCQllbGlkZWRvdXRlciA9IHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCAmb3V0ZXJwbGFu KTsKKwkJCWlmIChlbGlkZWRpbm5lciA9PSBOVUxMICYmIGlzX3NvcnRpbmdfcGxhbihpbm5lcnBs YW4pKQorCQkJCWVsaWRlZGlubmVyID0gcGdwYV9kZXNjZW5kX25vZGUocHN0bXQsICZpbm5lcnBs YW4pOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX05lc3RMb29wOgorCisJCQkvKgorCQkJICogVGhl IHBsYW5uZXIgbWF5IGhhdmUgY2hvc2VuIHRvIHBsYWNlIGEgTWF0ZXJpYWwgb3IgTWVtb2l6ZSBu b2RlCisJCQkgKiBvbiB0aGUgaW5uZXIgc2lkZSBvZiB0aGUgTmVzdExvb3A7IGlmIHRoaXMgaXMg cHJlc2VudCwgd2UKKwkJCSAqIHJlY29yZCBpdCBhcyBwYXJ0IG9mIHRoZSBqb2luIHN0cmF0ZWd5 LgorCQkJICovCisJCQlpZiAoZWxpZGVkaW5uZXIgPT0gTlVMTCAmJiBJc0EoaW5uZXJwbGFuLCBN YXRlcmlhbCkpCisJCQl7CisJCQkJZWxpZGVkaW5uZXIgPSBwZ3BhX2Rlc2NlbmRfbm9kZShwc3Rt dCwgJmlubmVycGxhbik7CisJCQkJc3RyYXRlZ3kgPSBKU1RSQVRfTkVTVEVEX0xPT1BfTUFURVJJ QUxJWkU7CisJCQl9CisJCQllbHNlIGlmIChlbGlkZWRpbm5lciA9PSBOVUxMICYmIElzQShpbm5l cnBsYW4sIE1lbW9pemUpKQorCQkJeworCQkJCWVsaWRlZGlubmVyID0gcGdwYV9kZXNjZW5kX25v ZGUocHN0bXQsICZpbm5lcnBsYW4pOworCQkJCXN0cmF0ZWd5ID0gSlNUUkFUX05FU1RFRF9MT09Q X01FTU9JWkU7CisJCQl9CisJCQllbHNlCisJCQkJc3RyYXRlZ3kgPSBKU1RSQVRfTkVTVEVEX0xP T1BfUExBSU47CisJCQlicmVhazsKKworCQljYXNlIFRfSGFzaEpvaW46CisKKwkJCS8qCisJCQkg KiBUaGUgaW5uZXIgc3VicGxhbiBvZiBhIEhhc2hKb2luIGlzIGFsd2F5cyBhIEhhc2ggbm9kZTsg dGhlIHJlYWwKKwkJCSAqIGlubmVyIHN1YnBsYW4gaXMgdGhlIEhhc2ggbm9kZSdzIGNoaWxkLgor CQkJICovCisJCQlBc3NlcnQoSXNBKGlubmVycGxhbiwgSGFzaCkpOworCQkJQXNzZXJ0KGVsaWRl ZGlubmVyID09IE5VTEwpOworCQkJZWxpZGVkaW5uZXIgPSBwZ3BhX2Rlc2NlbmRfbm9kZShwc3Rt dCwgJmlubmVycGxhbik7CisJCQlzdHJhdGVneSA9IEpTVFJBVF9IQVNIX0pPSU47CisJCQlicmVh azsKKworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBub2RlIHR5cGU6 ICVkIiwgKGludCkgbm9kZVRhZyhwbGFuKSk7CisJfQorCisJLyoKKwkgKiBUaGUgcGxhbm5lciBt YXkgaGF2ZSBkZWNpZGVkIHRvIGltcGxlbWVudCBhIHNlbWlqb2luIGJ5IGZpcnN0IG1ha2luZwor CSAqIHRoZSBudWxsYWJsZSBzaWRlIG9mIHRoZSBwbGFuIHVuaXF1ZSwgYW5kIHRoZW4gcGVyZm9y bWluZyBhIG5vcm1hbCBqb2luCisJICogYWdhaW5zdCB0aGUgcmVzdWx0LiBUaGVyZWZvcmUsIHdl IG1pZ2h0IG5lZWQgdG8gZGVzY2VuZCB0aHJvdWdoIGEKKwkgKiB1bmlxdWUgbm9kZSBvbiBlaXRo ZXIgc2lkZSBvZiB0aGUgcGxhbi4KKwkgKi8KKwl1bmlxdWVvdXRlciA9IHBncGFfZGVzY2VuZF9h bnlfdW5pcXVlKHBzdG10LCAmb3V0ZXJwbGFuLCAmZWxpZGVkb3V0ZXIpOworCXVuaXF1ZWlubmVy ID0gcGdwYV9kZXNjZW5kX2FueV91bmlxdWUocHN0bXQsICZpbm5lcnBsYW4sICZlbGlkZWRpbm5l cik7CisKKwkvKgorCSAqIFRoZSBwbGFubmVyIG1heSBoYXZlIGRlY2lkZWQgdG8gcGFyYWxsZWxp emUgcGFydCBvZiB0aGUgam9pbiB0cmVlLCBzbworCSAqIHdlIGNvdWxkIGZpbmQgYSBHYXRoZXIg b3IgR2F0aGVyIE1lcmdlIG5vZGUgaGVyZS4gTm90ZSB0aGF0LCBpZgorCSAqIHByZXNlbnQsIHRo aXMgd2lsbCBhcHBlYXIgYmVsb3cgbm9kZXMgd2UgY29uc2lkZXJlZCBhcyBwYXJ0IG9mIHRoZSBq b2luCisJICogc3RyYXRlZ3ksIGJ1dCB3ZSBjb3VsZCBmaW5kIGFub3RoZXIgdW5pcXVlbmVzcy1l bmZvcmNpbmcgbm9kZSBiZWxvdyB0aGUKKwkgKiBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlLCBpZiBw cmVzZW50LgorCSAqLworCWlmIChlbGlkZWRvdXRlciA9PSBOVUxMKQorCXsKKwkJZWxpZGVkb3V0 ZXIgPSBwZ3BhX2Rlc2NlbmRfYW55X2dhdGhlcihwc3RtdCwgJm91dGVycGxhbiwKKwkJCQkJCQkJ CQkJICBmb3VuZF9hbnlfb3V0ZXJfZ2F0aGVyKTsKKwkJaWYgKGZvdW5kX2FueV9vdXRlcl9nYXRo ZXIgJiYKKwkJCXBncGFfZGVzY2VuZF9hbnlfdW5pcXVlKHBzdG10LCAmb3V0ZXJwbGFuLCAmZWxp ZGVkb3V0ZXIpKQorCQkJdW5pcXVlb3V0ZXIgPSB0cnVlOworCX0KKwlpZiAoZWxpZGVkaW5uZXIg PT0gTlVMTCkKKwl7CisJCWVsaWRlZGlubmVyID0gcGdwYV9kZXNjZW5kX2FueV9nYXRoZXIocHN0 bXQsICZpbm5lcnBsYW4sCisJCQkJCQkJCQkJCSAgZm91bmRfYW55X2lubmVyX2dhdGhlcik7CisJ CWlmIChmb3VuZF9hbnlfaW5uZXJfZ2F0aGVyICYmCisJCQlwZ3BhX2Rlc2NlbmRfYW55X3VuaXF1 ZShwc3RtdCwgJmlubmVycGxhbiwgJmVsaWRlZGlubmVyKSkKKwkJCXVuaXF1ZWlubmVyID0gdHJ1 ZTsKKwl9CisKKwkvKgorCSAqIEl0J3MgcG9zc2libGUgdGhhdCBSZXN1bHQgbm9kZSBoYXMgYmVl biBpbnNlcnRlZCBlaXRoZXIgdG8gcHJvamVjdCBhCisJICogdGFyZ2V0IGxpc3Qgb3IgdG8gaW1w bGVtZW50IGEgb25lLXRpbWUgZmlsdGVyLiBJZiBzbywgd2UgY2FuIGRlc2NlbmQKKwkgKiB0aHJv dWdodCBpdC4gTm90ZSB0aGF0IGEgcmVzdWx0IG5vZGUgd2l0aG91dCBhIGNoaWxkIHdvdWxkIGJl IGEKKwkgKiBkZWdlbmVyYXRlIHNjYW4gb3Igam9pbiwgYW5kIG5vdCBzb21ldGhpbmcgd2UgY291 bGQgZGVzY2VuZCB0aHJvdWdoLgorCSAqCisJICogWFhYLiBJIHN1c3BlY3QgaXQncyBwb3NzaWJs ZSBmb3IgdGhpcyB0byBoYXBwZW4gYWJvdmUgdGhlIEdhdGhlciBvcgorCSAqIEdhdGhlciBNZXJn ZSBub2RlLCB0b28sIGJ1dCBhcHBhcmVudGx5IHdlIGhhdmUgbm8gdGVzdCBjYXNlIGZvciB0aGF0 CisJICogc2NlbmFyaW8uCisJICovCisJaWYgKGVsaWRlZG91dGVyID09IE5VTEwgJiYgaXNfcmVz dWx0X25vZGVfd2l0aF9jaGlsZChvdXRlcnBsYW4pKQorCQllbGlkZWRvdXRlciA9IHBncGFfZGVz Y2VuZF9ub2RlKHBzdG10LCAmb3V0ZXJwbGFuKTsKKwlpZiAoZWxpZGVkaW5uZXIgPT0gTlVMTCAm JiBpc19yZXN1bHRfbm9kZV93aXRoX2NoaWxkKGlubmVycGxhbikpCisJCWVsaWRlZGlubmVyID0g cGdwYV9kZXNjZW5kX25vZGUocHN0bXQsICZpbm5lcnBsYW4pOworCisJLyoKKwkgKiBJZiB0aGlz IGlzIGEgc2VtaWpvaW4gdGhhdCB3YXMgY29udmVydGVkIHRvIGFuIGlubmVyIGpvaW4gYnkgbWFr aW5nIG9uZQorCSAqIHNpZGUgb3IgdGhlIG90aGVyIHVuaXF1ZSwgbWFrZSBhIG5vdGUgdGhhdCB0 aGUgaW5uZXIgb3Igb3V0ZXIgc3VicGxhbiwKKwkgKiBhcyBhcHByb3ByaWF0ZSwgc2hvdWxkIGJl IHRyZWF0ZWQgYXMgYSBxdWVyeSBwbGFuIGZlYXR1cmUgd2hlbiB0aGUgbWFpbgorCSAqIHRyZWUg dHJhdmVyc2FsIHJlYWNoZXMgaXQuCisJICoKKwkgKiBDb252ZXJzZWx5LCBpZiB0aGUgcGxhbm5l ciBjb3VsZCBoYXZlIG1hZGUgb25lIHNpZGUgb2YgdGhlIGpvaW4gdW5pcXVlCisJICogYW5kIHRo ZXJlYnkgY29udmVydGVkIGl0IHRvIGFuIGlubmVyIGpvaW4sIGFuZCBjaG9zZSBub3QgdG8gZG8g c28sIHRoYXQKKwkgKiBpcyBhbHNvIHdvcnRoIG5vdGluZy4KKwkgKgorCSAqIE5COiBUaGlzIGNv ZGUgY291bGQgYXBwZWFyIHNsaWdodGx5IGhpZ2hlciB1cCBpbiBpbiB0aGlzIGZ1bmN0aW9uLCBi dXQKKwkgKiBub25lIG9mIHRoZSBub2RlcyB0aHJvdWdoIHdoaWNoIHdlIGp1c3QgZGVzY2VuZGVk IHNob3VsZCBoYXZlCisJICogYXNzb2NpYXRlZCBSVElzLgorCSAqCisJICogTkI6IFRoaXMgc2Vl bXMgbGlrZSBhIHNvbWV3aGF0IGhhY2t5IHdheSBvZiBwYXNzaW5nIGluZm9ybWF0aW9uIHVwIHRv CisJICogdGhlIG1haW4gdHJlZSB3YWxrLCBidXQgSSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhIGJl dHRlciBpZGVhLgorCSAqLworCWlmICh1bmlxdWVvdXRlcikKKwkJcGdwYV9hZGRfZnV0dXJlX2Zl YXR1cmUod2Fsa2VyLCBQR1BBUUZfU0VNSUpPSU5fVU5JUVVFLCBvdXRlcnBsYW4pOworCWVsc2Ug aWYgKGpvaW50eXBlID09IEpPSU5fUklHSFRfU0VNSSkKKwkJcGdwYV9hZGRfZnV0dXJlX2ZlYXR1 cmUod2Fsa2VyLCBQR1BBUUZfU0VNSUpPSU5fTk9OX1VOSVFVRSwgb3V0ZXJwbGFuKTsKKwlpZiAo dW5pcXVlaW5uZXIpCisJCXBncGFfYWRkX2Z1dHVyZV9mZWF0dXJlKHdhbGtlciwgUEdQQVFGX1NF TUlKT0lOX1VOSVFVRSwgaW5uZXJwbGFuKTsKKwllbHNlIGlmIChqb2ludHlwZSA9PSBKT0lOX1NF TUkpCisJCXBncGFfYWRkX2Z1dHVyZV9mZWF0dXJlKHdhbGtlciwgUEdQQVFGX1NFTUlKT0lOX05P Tl9VTklRVUUsIGlubmVycGxhbik7CisKKwkvKiBTZXQgb3V0cHV0IHBhcmFtZXRlcnMuICovCisJ KnJlYWxvdXRlciA9IG91dGVycGxhbjsKKwkqcmVhbGlubmVyID0gaW5uZXJwbGFuOworCSplbGlk ZWRyZWFsb3V0ZXIgPSBlbGlkZWRvdXRlcjsKKwkqZWxpZGVkcmVhbGlubmVyID0gZWxpZGVkaW5u ZXI7CisJcmV0dXJuIHN0cmF0ZWd5OworfQorCisvKgorICogRGVzY2VuZCB0aHJvdWdoIGEgUGxh biBub2RlIGluIGEgam9pbiB0cmVlIHRoYXQgdGhlIGNhbGxlciBoYXMgZGV0ZXJtaW5lZAorICog dG8gYmUgaXJyZWxldmFudC4KKyAqCisgKiBVcGRhdGVzICpwbGFuLCBhbmQgcmV0dXJucyB0aGUg bGFzdCBvZiBhbnkgZWxpZGVkIG5vZGVzIHBlcnRhaW5pbmcgdG8gdGhlCisgKiBuZXcgcGxhbiBu b2RlLgorICovCitzdGF0aWMgRWxpZGVkTm9kZSAqCitwZ3BhX2Rlc2NlbmRfbm9kZShQbGFubmVk U3RtdCAqcHN0bXQsIFBsYW4gKipwbGFuKQoreworCSpwbGFuID0gKCpwbGFuKS0+bGVmdHRyZWU7 CisJcmV0dXJuIHBncGFfbGFzdF9lbGlkZWRfbm9kZShwc3RtdCwgKnBsYW4pOworfQorCisvKgor ICogRGVzY2VuZCB0aHJvdWdoIGEgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBub2RlLCBpZiBwcmVz ZW50LCBhbmQgYW55IFNvcnQKKyAqIG9yIEluY3JlbWVudGFsU29ydCBub2RlIG9jY3VycmluZyB1 bmRlciBhIEdhdGhlciBNZXJnZS4KKyAqCisgKiBDYWxsZXIgc2hvdWxkIGhhdmUgdmVyaWZpZWQg dGhhdCB0aGVyZSBpcyBubyBFbGlkZWROb2RlIHBlcnRhaW5pbmcgdG8KKyAqIHRoZSBpbml0aWFs IHZhbHVlIG9mICpwbGFuLgorICoKKyAqIFVwZGF0ZXMgKnBsYW4sIGFuZCByZXR1cm5zIHRoZSBs YXN0IG9mIGFueSBlbGlkZWQgbm9kZXMgcGVydGFpbmluZyB0byB0aGUKKyAqIG5ldyBwbGFuIG5v ZGUuIFNldHMgKmZvdW5kX2FueV9nYXRoZXIgPSB0cnVlIGlmIGVpdGhlciBHYXRoZXIgb3IKKyAq IEdhdGhlciBNZXJnZSB3YXMgZm91bmQsIGFuZCBvdGhlcndpc2UgbGVhdmVzIGl0IHVuY2hhbmdl ZC4KKyAqLworc3RhdGljIEVsaWRlZE5vZGUgKgorcGdwYV9kZXNjZW5kX2FueV9nYXRoZXIoUGxh bm5lZFN0bXQgKnBzdG10LCBQbGFuICoqcGxhbiwKKwkJCQkJCWJvb2wgKmZvdW5kX2FueV9nYXRo ZXIpCit7CisJaWYgKElzQSgqcGxhbiwgR2F0aGVyKSkKKwl7CisJCSpmb3VuZF9hbnlfZ2F0aGVy ID0gdHJ1ZTsKKwkJcmV0dXJuIHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCBwbGFuKTsKKwl9CisK KwlpZiAoSXNBKCpwbGFuLCBHYXRoZXJNZXJnZSkpCisJeworCQlFbGlkZWROb2RlICplbGlkZWQg PSBwZ3BhX2Rlc2NlbmRfbm9kZShwc3RtdCwgcGxhbik7CisKKwkJaWYgKGVsaWRlZCA9PSBOVUxM ICYmIGlzX3NvcnRpbmdfcGxhbigqcGxhbikpCisJCQllbGlkZWQgPSBwZ3BhX2Rlc2NlbmRfbm9k ZShwc3RtdCwgcGxhbik7CisKKwkJKmZvdW5kX2FueV9nYXRoZXIgPSB0cnVlOworCQlyZXR1cm4g ZWxpZGVkOworCX0KKworCXJldHVybiBOVUxMOworfQorCisvKgorICogSWYgKnBsYW4gaXMgYW4g QWdnIG9yIFVuaXF1ZSBub2RlLCB3ZSB3YW50IHRvIGRlc2NlbmQgdGhyb3VnaCBpdCwgdW5sZXNz CisgKiBpdCBoYXMgYSBjb3JyZXNwb25kaW5nIGVsaWRlZCBub2RlLiBJZiBpdHMgaW1tZWRpYXRl IGNoaWxkIGlzIGEgU29ydCBvcgorICogSW5jcmVtZW50YWxTb3J0LCB3ZSBhbHNvIHdhbnQgdG8g ZGVzY2VuZCB0aHJvdWdoIHRoYXQsIHVubGVzcyBpdCBoYXMgYQorICogY29ycmVzcG9uZGluZyBl bGlkZWQgbm9kZS4KKyAqCisgKiBPbiBlbnRyeSwgKmVsaWRlZF9ub2RlIG11c3QgYmUgdGhlIGxh c3Qgb2YgYW55IGVsaWRlZCBub2RlcyBjb3JyZXNwb25kaW5nCisgKiB0byAqcGxhbjsgb24gZXhp dCwgdGhpcyB3aWxsIHN0aWxsIGJlIHRydWUsIGJ1dCAqcGxhbiBtYXkgaGF2ZSBiZWVuIHVwZGF0 ZWQuCisgKgorICogVGhlIHJlYXNvbiB3ZSBkb24ndCB3YW50IHRvIGRlc2NlbmQgdGhyb3VnaCBl bGlkZWQgbm9kZXMgaXMgdGhhdCBhIHNpbmdsZQorICogam9pbiB0cmVlIGNhbid0IGNyb3NzIHRo cm91Z2ggYW55IHNvcnQgb2YgZWxpZGVkIG5vZGU6IHN1YnF1ZXJpZXMgYXJlCisgKiBwbGFubmVk IHNlcGFyYXRlbHksIGFuZCBwbGFubmluZyBpbnNpZGUgYW4gQXBwZW5kIG9yIE1lcmdlQXBwZW5k IGlzCisgKiBzZXBhcmF0ZSBmcm9tIHBsYW5uaW5nIG91dHNpZGUgb2YgaXQuCisgKgorICogVGhl IHJldHVybiB2YWx1ZSBpcyB0cnVlIGlmIHdlIGRlc2NlbmQgdGhyb3VnaCBhIG5vZGUgdGhhdCB3 ZSBiZWxpZXZlIGlzCisgKiBtYWtpbmcgb25lIHNpZGUgb2YgYSBzZW1pam9pbiB1bmlxdWUsIGFu ZCBvdGhlcndpc2UgZmFsc2UuCisgKi8KK3N0YXRpYyBib29sCitwZ3BhX2Rlc2NlbmRfYW55X3Vu aXF1ZShQbGFubmVkU3RtdCAqcHN0bXQsIFBsYW4gKipwbGFuLAorCQkJCQkJRWxpZGVkTm9kZSAq KmVsaWRlZF9ub2RlKQoreworCWJvb2wJCWRlc2NlbmQgPSBmYWxzZTsKKwlib29sCQlzanVuaXF1 ZSA9IGZhbHNlOworCisJaWYgKCplbGlkZWRfbm9kZSAhPSBOVUxMKQorCQlyZXR1cm4gc2p1bmlx dWU7CisKKwlpZiAoSXNBKCpwbGFuLCBVbmlxdWUpKQorCXsKKwkJZGVzY2VuZCA9IHRydWU7CisJ CXNqdW5pcXVlID0gdHJ1ZTsKKwl9CisJZWxzZSBpZiAoSXNBKCpwbGFuLCBBZ2cpKQorCXsKKwkJ LyoKKwkJICogSWYgdGhpcyBpcyBhIHNpbXBsZSBBZ2cgbm9kZSwgdGhlbiBhc3N1bWUgaXQncyBo ZXJlIHRvIGltcGxlbWVudAorCQkgKiBzZW1pam9pbiB1bmlxdWVuZXNzLiBPdGhlcndpc2UsIGFz c3VtZSBpdCdzIGNvbXBsZXRpbmcgYW4gZWFnZXIKKwkJICogYWdncmVnYXRpb24gb3IgcGFydGl0 aW9ud2lzZSBhZ2dyZWdhdGlvbiBvcGVyYXRpb24gdGhhdCBiZWdhbiBhdCBhCisJCSAqIGhpZ2hl ciBsZXZlbCBvZiB0aGUgcGxhbiB0cmVlLgorCQkgKgorCQkgKiBYWFguIEkgc3VzcGVjdCB0aGlz IGxvZ2ljIGRvZXMgbm90IGNvdmVyIGFsbCBjYXNlczogY291bGRuJ3QgU0oKKwkJICogdW5pcXVl bmVzcyBiZSBpbXBsZW1lbnRlZCBpbiB0d28gc3RlcHMgd2l0aCBhbiBpbnRlcm1lZGlhdGUgR2F0 aGVyPworCQkgKi8KKwkJZGVzY2VuZCA9IHRydWU7CisJCXNqdW5pcXVlID0gKCgoQWdnICopICpw bGFuKS0+YWdnc3BsaXQgPT0gQUdHU1BMSVRfU0lNUExFKTsKKwl9CisKKwlpZiAoZGVzY2VuZCkK Kwl7CisJCSplbGlkZWRfbm9kZSA9IHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCBwbGFuKTsKKwor CQlpZiAoKmVsaWRlZF9ub2RlID09IE5VTEwgJiYgaXNfc29ydGluZ19wbGFuKCpwbGFuKSkKKwkJ CSplbGlkZWRfbm9kZSA9IHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCBwbGFuKTsKKwl9CisKKwly ZXR1cm4gc2p1bmlxdWU7Cit9CisKKy8qCisgKiBJcyB0aGlzIGEgUmVzdWx0IG5vZGUgdGhhdCBo YXMgYSBjaGlsZD8KKyAqLworc3RhdGljIGJvb2wKK2lzX3Jlc3VsdF9ub2RlX3dpdGhfY2hpbGQo UGxhbiAqcGxhbikKK3sKKwlyZXR1cm4gSXNBKHBsYW4sIFJlc3VsdCkgJiYgcGxhbi0+bGVmdHRy ZWUgIT0gTlVMTDsKK30KKworLyoKKyAqIElzIHRoaXMgYSBQbGFuIG5vZGUgd2hvc2UgcHVycG9z ZSBpcyBwdXQgdGhlIGRhdGEgaW4gYSBjZXJ0YWluIG9yZGVyPworICovCitzdGF0aWMgYm9vbAor aXNfc29ydGluZ19wbGFuKFBsYW4gKnBsYW4pCit7CisJcmV0dXJuIElzQShwbGFuLCBTb3J0KSB8 fCBJc0EocGxhbiwgSW5jcmVtZW50YWxTb3J0KTsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdf cGxhbl9hZHZpY2UvcGdwYV9qb2luLmggYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfam9p bi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40ZGM3Mjk4NmE3MAot LS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9qb2luLmgKQEAg LTAsMCArMSwxMDUgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFfam9pbi5oCisg KgkgIGFuYWx5c2lzIG9mIGpvaW5zIGluIFBsYW4gdHJlZXMKKyAqCisgKiBDb3B5cmlnaHQgKGMp IDIwMTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkg IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9qb2luLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqLworI2lmbmRlZiBQR1BBX0pPSU5fSAorI2RlZmluZSBQR1BBX0pPSU5fSAorCisjaW5j bHVkZSAibm9kZXMvcGxhbm5vZGVzLmgiCisKK3R5cGVkZWYgc3RydWN0IHBncGFfcGxhbl93YWxr ZXJfY29udGV4dCBwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQ7Cit0eXBlZGVmIHN0cnVjdCBwZ3Bh X2pvaW5fdW5yb2xsZXIgcGdwYV9qb2luX3Vucm9sbGVyOwordHlwZWRlZiBzdHJ1Y3QgcGdwYV91 bnJvbGxlZF9qb2luIHBncGFfdW5yb2xsZWRfam9pbjsKKworLyoKKyAqIEFsdGhvdWdoIHRoZXJl IGFyZSB0aHJlZSBtYWluIGpvaW4gc3RyYXRlZ2llcywgd2UgdHJ5IHRvIGNsYXNzaWZ5IHRoaW5n cworICogbW9yZSBwcmVjaXNlbHkgaGVyZTogbWVyZ2Ugam9pbnMgaGF2ZSB0aGUgb3B0aW9uIG9m IHVzaW5nIG1hdGVyaWFsaXphdGlvbgorICogb24gdGhlIGlubmVyIHNpZGUsIGFuZCBuZXN0ZWQg bG9vcHMgY2FuIHVzZSBlaXRoZXIgbWF0ZXJpYWxpemF0aW9uIG9yCisgKiBtZW1vaXphdGlvbi4K KyAqLwordHlwZWRlZiBlbnVtCit7CisJSlNUUkFUX01FUkdFX0pPSU5fUExBSU4gPSAwLAorCUpT VFJBVF9NRVJHRV9KT0lOX01BVEVSSUFMSVpFLAorCUpTVFJBVF9ORVNURURfTE9PUF9QTEFJTiwK KwlKU1RSQVRfTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUsCisJSlNUUkFUX05FU1RFRF9MT09QX01F TU9JWkUsCisJSlNUUkFUX0hBU0hfSk9JTgorCS8qIHVwZGF0ZSBOVU1fUEdQQV9KT0lOX1NUUkFU RUdZIGlmIHlvdSBhZGQgYW55dGhpbmcgaGVyZSAqLworfSBwZ3BhX2pvaW5fc3RyYXRlZ3k7CisK KyNkZWZpbmUgTlVNX1BHUEFfSk9JTl9TVFJBVEVHWQkJKChpbnQpIEpTVFJBVF9IQVNIX0pPSU4g KyAxKQorCisvKgorICogSW4gYW4gb3V0ZXItZGVlcCBqb2luIHRyZWUsIGV2ZXJ5IG1lbWJlciBv ZiBhbiB1bnJvbGxlZCBqb2luIHdpbGwgYmUgYSBzY2FuLAorICogYnV0IGpvaW4gdHJlZXMgd2l0 aCBvdGhlciBzaGFwZXMgY2FuIGNvbnRhaW4gdW5yb2xsZWQgam9pbnMuCisgKgorICogVGhlIHBs YW4gbm9kZSB3ZSBzdG9yZSBoZXJlIHdpbGwgYmUgdGhlIGlubmVyIG9yIG91dGVyIGNoaWxkIG9m IHRoZSBqb2luCisgKiBub2RlLCBhcyBhcHByb3ByaWF0ZSwgZXhjZXB0IHRoYXQgd2UgbG9vayB0 aHJvdWdoIHN1Ym5vZGVzIHRoYXQgd2UgcmVnYXJkIGFzCisgKiBwYXJ0IG9mIHRoZSBqb2luIG1l dGhvZCBpdHNlbGYuIEZvciBpbnN0YW5jZSwgZm9yIGEgTmVzdGVkIExvb3AgdGhhdAorICogbWF0 ZXJpYWxpemVzIHRoZSBpbm5lciBpbnB1dCwgd2UnbGwgc3RvcmUgdGhlIGNoaWxkIG9mIHRoZSBN YXRlcmlhbGl6ZSBub2RlLAorICogbm90IHRoZSBNYXRlcmlhbGl6ZSBub2RlIGl0c2VsZi4KKyAq CisgKiBJZiBzZXRyZWZzIHByb2Nlc3NpbmcgZWxpZGVkIG9uZSBvciBtb3JlIG5vZGVzIGZyb20g dGhlIHBsYW4gdHJlZSwgdGhlbgorICogd2UnbGwgc3RvcmUgZGV0YWlscyBhYm91dCB0aGUgdG9w bW9zdCBvZiB0aG9zZSBpbiBlbGlkZWRfbm9kZTsgb3RoZXJ3aXNlLAorICogaXQgd2lsbCBiZSBO VUxMLgorICoKKyAqIEV4YWN0bHkgb25lIG9mIHNjYW4gYW5kIHVucm9sbGVkX2pvaW4gd2lsbCBi ZSBub24tTlVMTC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlQbGFuCSAgICpwbGFuOworCUVs aWRlZE5vZGUgKmVsaWRlZF9ub2RlOworCXN0cnVjdCBwZ3BhX3NjYW4gKnNjYW47CisJcGdwYV91 bnJvbGxlZF9qb2luICp1bnJvbGxlZF9qb2luOworfSBwZ3BhX2pvaW5fbWVtYmVyOworCisvKgor ICogV2UgY29udmVydCBvdXRlci1kZWVwIGpvaW4gdHJlZXMgdG8gYSBmbGF0IHN0cnVjdHVyZTsg dGhhdCBpcywgKChBIEpPSU4gQikKKyAqIEpPSU4gQykgSk9JTiBEIGdldHMgY29udmVydGVkIHRv IG91dGVyID0gQSwgaW5uZXIgPSA8QiBDIEQ+LiAgV2hlbiBqb2lucworICogYXJlbid0IG91dGVy LWRlZXAsIHN1YnN0cnVjdHVyZSBpcyByZXF1aXJlZCwgZS5nLiAoQSBKT0lOIEIpIEpPSU4gKEMg Sk9JTiBEKQorICogaXMgcmVwcmVzZW50ZWQgYXMgb3V0ZXIgPSBBLCBpbm5lciA9IDxCIFg+LCB3 aGVyZSBYIGlzIGEgcGdwYV91bnJvbGxlZF9qb2luCisgKiBjb3ZlcmluZyBDLUQuCisgKi8KK3N0 cnVjdCBwZ3BhX3Vucm9sbGVkX2pvaW4KK3sKKwkvKiBPdXRlcm1vc3QgbWVtYmVyOyBtdXN0IG5v dCBpdHNlbGYgYmUgYW4gdW5yb2xsZWQgam9pbi4gKi8KKwlwZ3BhX2pvaW5fbWVtYmVyIG91dGVy OworCisJLyogTnVtYmVyIG9mIGlubmVyIG1lbWJlcnMuIExlbmd0aCBvZiB0aGUgc3RyYXRlZ3kg YW5kIGlubmVyIGFycmF5cy4gKi8KKwl1bnNpZ25lZAluaW5uZXI7CisKKwkvKiBBcnJheSBvZiBz dHJhdGVnaWVzLCBvbmUgcGVyIG5vbi1vdXRlcm1vc3QgbWVtYmVyLiAqLworCXBncGFfam9pbl9z dHJhdGVneSAqc3RyYXRlZ3k7CisKKwkvKiBBcnJheSBvZiBtZW1iZXJzLCBleGNsdWRpbmcgdGhl IG91dGVybW9zdC4gRGVlcGVzdCBmaXJzdC4gKi8KKwlwZ3BhX2pvaW5fbWVtYmVyICppbm5lcjsK K307CisKKy8qCisgKiBEb2VzIHRoaXMgcGxhbiBub2RlIGluaGVyaXQgZnJvbSBKb2luPworICov CitzdGF0aWMgaW5saW5lIGJvb2wKK3BncGFfaXNfam9pbihQbGFuICpwbGFuKQoreworCXJldHVy biBJc0EocGxhbiwgTmVzdExvb3ApIHx8IElzQShwbGFuLCBNZXJnZUpvaW4pIHx8IElzQShwbGFu LCBIYXNoSm9pbik7Cit9CisKK2V4dGVybiBwZ3BhX2pvaW5fdW5yb2xsZXIgKnBncGFfY3JlYXRl X2pvaW5fdW5yb2xsZXIodm9pZCk7CitleHRlcm4gdm9pZCBwZ3BhX3Vucm9sbF9qb2luKHBncGFf cGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCSBQbGFuICpwbGFuLCBib29sIGJl bmVhdGhfYW55X2dhdGhlciwKKwkJCQkJCQkgcGdwYV9qb2luX3Vucm9sbGVyICpqb2luX3Vucm9s bGVyLAorCQkJCQkJCSBwZ3BhX2pvaW5fdW5yb2xsZXIgKipvdXRlcl9qb2luX3Vucm9sbGVyLAor CQkJCQkJCSBwZ3BhX2pvaW5fdW5yb2xsZXIgKippbm5lcl9qb2luX3Vucm9sbGVyKTsKK2V4dGVy biBwZ3BhX3Vucm9sbGVkX2pvaW4gKnBncGFfYnVpbGRfdW5yb2xsZWRfam9pbihwZ3BhX3BsYW5f d2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkJCQkJCQlwZ3BhX2pvaW5fdW5yb2xsZXIg KmpvaW5fdW5yb2xsZXIpOworZXh0ZXJuIHZvaWQgcGdwYV9kZXN0cm95X2pvaW5fdW5yb2xsZXIo cGdwYV9qb2luX3Vucm9sbGVyICpqb2luX3Vucm9sbGVyKTsKKworI2VuZGlmCmRpZmYgLS1naXQg YS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmMgYi9jb250cmliL3BnX3BsYW5f YWR2aWNlL3BncGFfb3V0cHV0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAuLjg5YTY3NWZmOTNlCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9wZ3BhX291dHB1dC5jCkBAIC0wLDAgKzEsNjI4IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq CisgKiBwZ3BhX291dHB1dC5jCisgKgkgIHByb2R1Y2UgdGV4dHVhbCBvdXRwdXQgZnJvbSB0aGUg cmVzdWx0cyBvZiBhIHBsYW4gdHJlZSB3YWxrCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIw MjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmli L3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq LworCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgInBncGFfb3V0cHV0LmgiCisj aW5jbHVkZSAicGdwYV9zY2FuLmgiCisKKyNpbmNsdWRlICJub2Rlcy9wYXJzZW5vZGVzLmgiCisj aW5jbHVkZSAicGFyc2VyL3BhcnNldHJlZS5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgi CisjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCisKKy8qCisgKiBDb250ZXh0IG9iamVjdCBm b3IgdGV4dHVhbCBhZHZpY2UgZ2VuZXJhdGlvbi4KKyAqCisgKiBydF9pZGVudGlmaWVycyBpcyB0 aGUgY2FsbGVyLXByb3ZpZGVkIGFycmF5IG9mIHJhbmdlIHRhYmxlIGlkZW50aWZpZXJzLgorICog U2VlIHRoZSBjb21tZW50cyBhdCB0aGUgdG9wIG9mIHBncGFfaWRlbnRpZmllci5jIGZvciBtb3Jl IGRldGFpbHMuCisgKgorICogYnVmIGlzIHRoZSBjYWxsZXItcHJvdmlkZWQgb3V0cHV0IGJ1ZmZl ci4KKyAqCisgKiB3cmFwX2NvbHVtbiBpcyB0aGUgd3JhcCBjb2x1bW4sIHNvIHRoYXQgd2UgZG9u J3QgY3JlYXRlIG91dHB1dCB0aGF0IGlzCisgKiB0b28gd2lkZS4gU2VlIHBncGFfbWF5YmVfbGlu ZWJyZWFrKCkgYW5kIGNvbW1lbnRzIGluIHBncGFfb3V0cHV0X2FkdmljZS4KKyAqLwordHlwZWRl ZiBzdHJ1Y3QgcGdwYV9vdXRwdXRfY29udGV4dAoreworCWNvbnN0IGNoYXIgKipyaWRfc3RyaW5n czsKKwlTdHJpbmdJbmZvCWJ1ZjsKKwlpbnQJCQl3cmFwX2NvbHVtbjsKK30gcGdwYV9vdXRwdXRf Y29udGV4dDsKKworc3RhdGljIHZvaWQgcGdwYV9vdXRwdXRfdW5yb2xsZWRfam9pbihwZ3BhX291 dHB1dF9jb250ZXh0ICpjb250ZXh0LAorCQkJCQkJCQkJICBwZ3BhX3Vucm9sbGVkX2pvaW4gKmpv aW4pOworc3RhdGljIHZvaWQgcGdwYV9vdXRwdXRfam9pbl9tZW1iZXIocGdwYV9vdXRwdXRfY29u dGV4dCAqY29udGV4dCwKKwkJCQkJCQkJCXBncGFfam9pbl9tZW1iZXIgKm1lbWJlcik7CitzdGF0 aWMgdm9pZCBwZ3BhX291dHB1dF9zY2FuX3N0cmF0ZWd5KHBncGFfb3V0cHV0X2NvbnRleHQgKmNv bnRleHQsCisJCQkJCQkJCQkgIHBncGFfc2Nhbl9zdHJhdGVneSBzdHJhdGVneSwKKwkJCQkJCQkJ CSAgTGlzdCAqc2NhbnMpOworc3RhdGljIHZvaWQgcGdwYV9vdXRwdXRfYml0bWFwX2luZGV4X2Rl dGFpbHMocGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwKKwkJCQkJCQkJCQkJIFBsYW4gKnBs YW4pOworc3RhdGljIHZvaWQgcGdwYV9vdXRwdXRfcmVsYXRpb25fbmFtZShwZ3BhX291dHB1dF9j b250ZXh0ICpjb250ZXh0LCBPaWQgcmVsaWQpOworc3RhdGljIHZvaWQgcGdwYV9vdXRwdXRfcXVl cnlfZmVhdHVyZShwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LAorCQkJCQkJCQkJICBwZ3Bh X3FmX3R5cGUgdHlwZSwKKwkJCQkJCQkJCSAgTGlzdCAqcXVlcnlfZmVhdHVyZXMpOworc3RhdGlj IHZvaWQgcGdwYV9vdXRwdXRfc2ltcGxlX3N0cmF0ZWd5KHBncGFfb3V0cHV0X2NvbnRleHQgKmNv bnRleHQsCisJCQkJCQkJCQkJY2hhciAqc3RyYXRlZ3ksCisJCQkJCQkJCQkJTGlzdCAqcmVsaWRf c2V0cyk7CitzdGF0aWMgdm9pZCBwZ3BhX291dHB1dF9ub19nYXRoZXIocGdwYV9vdXRwdXRfY29u dGV4dCAqY29udGV4dCwKKwkJCQkJCQkJICBCaXRtYXBzZXQgKnJlbGlkcyk7CitzdGF0aWMgdm9p ZCBwZ3BhX291dHB1dF9yZWxhdGlvbnMocGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwgU3Ry aW5nSW5mbyBidWYsCisJCQkJCQkJCSAgQml0bWFwc2V0ICpyZWxpZHMpOworCitzdGF0aWMgY2hh ciAqcGdwYV9jc3RyaW5nX2pvaW5fc3RyYXRlZ3kocGdwYV9qb2luX3N0cmF0ZWd5IHN0cmF0ZWd5 KTsKK3N0YXRpYyBjaGFyICpwZ3BhX2NzdHJpbmdfc2Nhbl9zdHJhdGVneShwZ3BhX3NjYW5fc3Ry YXRlZ3kgc3RyYXRlZ3kpOworc3RhdGljIGNoYXIgKnBncGFfY3N0cmluZ19xdWVyeV9mZWF0dXJl X3R5cGUocGdwYV9xZl90eXBlIHR5cGUpOworCitzdGF0aWMgdm9pZCBwZ3BhX21heWJlX2xpbmVi cmVhayhTdHJpbmdJbmZvIGJ1ZiwgaW50IHdyYXBfY29sdW1uKTsKKworLyoKKyAqIEFwcGVuZCBx dWVyeSBhZHZpY2UgdG8gdGhlIHByb3ZpZGVkIGJ1ZmZlci4KKyAqCisgKiBCZWZvcmUgY2FsbGlu ZyB0aGlzIGZ1bmN0aW9uLCAnd2Fsa2VyJyBtdXN0IGJlIHVzZWQgdG8gaXRlcmF0ZSBvdmVyIHRo ZQorICogbWFpbiBwbGFuIHRyZWUgYW5kIGFsbCBzdWJwbGFucyBmcm9tIHRoZSBQbGFubmVkU3Rt dC4KKyAqCisgKiAncnRfaWRlbnRpZmllcnMnIGlzIGEgdGFibGUgb2YgdW5pcXVlIGlkZW50aWZp ZXJzLCBvbmUgZm9yIGVhY2ggUlRJLgorICogU2VlIHBncGFfY3JlYXRlX2lkZW50aWZpZXJzX2Zv cl9wbGFubmVkX3N0bXQoKS4KKyAqCisgKiBSZXN1bHRzIHdpbGwgYmUgYXBwZW5kZWQgdG8gJ2J1 ZicuCisgKi8KK3ZvaWQKK3BncGFfb3V0cHV0X2FkdmljZShTdHJpbmdJbmZvIGJ1ZiwgcGdwYV9w bGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJICAgcGdwYV9pZGVudGlmaWVyICpydF9p ZGVudGlmaWVycykKK3sKKwlJbmRleAkJcnRhYmxlX2xlbmd0aCA9IGxpc3RfbGVuZ3RoKHdhbGtl ci0+cHN0bXQtPnJ0YWJsZSk7CisJTGlzdENlbGwgICAqbGM7CisJcGdwYV9vdXRwdXRfY29udGV4 dCBjb250ZXh0OworCisJLyogQmFzaWMgaW5pdGlhbGl6YXRpb24uICovCisJbWVtc2V0KCZjb250 ZXh0LCAwLCBzaXplb2YocGdwYV9vdXRwdXRfY29udGV4dCkpOworCWNvbnRleHQuYnVmID0gYnVm OworCisJLyoKKwkgKiBDb252ZXJ0IGlkZW50aWZpZXJzIHRvIHN0cmluZyBmb3JtLiBOb3RlIHRo YXQgdGhlIGxvb3AgdmFyaWFibGUgaGVyZSBpcworCSAqIG5vdCBhbiBSVEksIGJlY2F1c2UgUlRJ cyBhcmUgMS1iYXNlZC4gU29tZSBSVElzIHdpbGwgaGF2ZSBubworCSAqIGlkZW50aWZpZXIsIGVp dGhlciBiZWNhdXNlIHRoZSByZWxvcHRraW5kIGlzIFJURV9KT0lOIG9yIGJlY2F1c2UgdGhhdAor CSAqIHBvcnRpb24gb2YgdGhlIHF1ZXJ5IGRpZG4ndCBtYWtlIGl0IGludG8gdGhlIGZpbmFsIHBs YW4uCisJICovCisJY29udGV4dC5yaWRfc3RyaW5ncyA9IHBhbGxvYzBfYXJyYXkoY29uc3QgY2hh ciAqLCBydGFibGVfbGVuZ3RoKTsKKwlmb3IgKGludCBpID0gMDsgaSA8IHJ0YWJsZV9sZW5ndGg7 ICsraSkKKwkJaWYgKHJ0X2lkZW50aWZpZXJzW2ldLmFsaWFzX25hbWUgIT0gTlVMTCkKKwkJCWNv bnRleHQucmlkX3N0cmluZ3NbaV0gPSBwZ3BhX2lkZW50aWZpZXJfc3RyaW5nKCZydF9pZGVudGlm aWVyc1tpXSk7CisKKwkvKgorCSAqIElmIHRoZSB1c2VyIGNob29zZXMgdG8gdXNlIEVYUExBSU4g KFBMQU5fQURWSUNFKSBpbiBhbiA4MC1jb2x1bW4gd2luZG93CisJICogZnJvbSBhIHBzcWwgY2xp ZW50IHdpdGggZGVmYXVsdCBzZXR0aW5ncywgcHNxbCB3aWxsIGFkZCBvbmUgc3BhY2UgdG8KKwkg KiB0aGUgbGVmdCBvZiB0aGUgb3V0cHV0IGFuZCBFWFBMQUlOIHdpbGwgYWRkIHR3byBtb3JlIHRv IHRoZSBsZWZ0IG9mIHRoZQorCSAqIGFkdmljZS4gVGh1cywgbGluZXMgb2YgbW9yZSB0aGFuIDc3 IGNoYXJhY3RlcnMgd2lsbCB3cmFwLiBXZSBzZXQgdGhlCisJICogd3JhcCBsaW1pdCB0byA3NiBo ZXJlIHNvIHRoYXQgdGhlIG91dHB1dCB3b24ndCByZWFjaCBhbGwgdGhlIHdheSB0byB0aGUKKwkg KiB2ZXJ5IGxhc3QgY29sdW1uIG9mIHRoZSB0ZXJtaW5hbC4KKwkgKgorCSAqIE9mIGNvdXJzZSwg dGhpcyBpcyBmYWlybHkgYXJiaXRyYXJ5IHNldCBvZiBhc3N1bXB0aW9ucywgYW5kIG9uZSBjb3Vs ZAorCSAqIHdlbGwgbWFrZSBhbiBhcmd1bWVudCBmb3IgYSBkaWZmZXJlbnQgd3JhcCBsaW1pdCwg b3IgZm9yIGEgY29uZmlndXJhYmxlCisJICogb25lLgorCSAqLworCWNvbnRleHQud3JhcF9jb2x1 bW4gPSA3NjsKKworCS8qCisJICogRWFjaCBwaWVjZSBvZiBKT0lOX09SREVSKCkgYWR2aWNlIGZ1 bGx5IGRlc2NyaWJlcyB0aGUgam9pbiBvcmRlciBmb3IgYQorCSAqIGEgc2luZ2xlIHVucm9sbGVk IGpvaW4uIE1lcmdpbmcgaXMgbm90IHBlcm1pdHRlZCwgYmVjYXVzZSB0aGF0IHdvdWxkCisJICog Y2hhbmdlIHRoZSBtZWFuaW5nLCBlLmcuIFNFUV9TQ0FOKGEgYiBjIGQpIG1lYW5zIHNpbXBseSB0 aGF0IHNlcXVlbnRpYWwKKwkgKiBzY2FucyBzaG91bGQgYmUgdXNlZCBmb3IgYWxsIG9mIHRob3Nl IHJlbGF0aW9ucywgYW5kIGlzIHRodXMgZXF1aXZhbGVudAorCSAqIHRvIFNFUV9TQ0FOKGEgYikg U0VRX1NDQU4oYyBkKSwgYnV0IEpPSU5fT1JERVIoYSBiIGMgZCkgbWVhbnMgdGhhdCAiYSIKKwkg KiBpcyB0aGUgZHJpdmluZyB0YWJsZSB3aGljaCBpcyB0aGVuIGpvaW5lZCB0byAiYiIgdGhlbiAi YyIgdGhlbiAiZCIsCisJICogd2hpY2ggaXMgdG90YWxseSBkaWZmZXJlbnQgZnJvbSBKT0lOX09S REVSKGEgYikgYW5kIEpPSU5fT1JERVIoYyBkKS4KKwkgKi8KKwlmb3JlYWNoKGxjLCB3YWxrZXIt PnRvcGxldmVsX3Vucm9sbGVkX2pvaW5zKQorCXsKKwkJcGdwYV91bnJvbGxlZF9qb2luICp1am9p biA9IGxmaXJzdChsYyk7CisKKwkJaWYgKGJ1Zi0+bGVuID4gMCkKKwkJCWFwcGVuZFN0cmluZ0lu Zm9DaGFyKGJ1ZiwgJ1xuJyk7CisJCWFwcGVuZFN0cmluZ0luZm8oY29udGV4dC5idWYsICJKT0lO X09SREVSKCIpOworCQlwZ3BhX291dHB1dF91bnJvbGxlZF9qb2luKCZjb250ZXh0LCB1am9pbik7 CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQuYnVmLCAnKScpOworCQlwZ3BhX21heWJl X2xpbmVicmVhayhjb250ZXh0LmJ1ZiwgY29udGV4dC53cmFwX2NvbHVtbik7CisJfQorCisJLyog RW1pdCBqb2luIHN0cmF0ZWd5IGFkdmljZS4gKi8KKwlmb3IgKGludCBzID0gMDsgcyA8IE5VTV9Q R1BBX0pPSU5fU1RSQVRFR1k7ICsrcykKKwl7CisJCWNoYXIJICAgKnN0cmF0ZWd5ID0gcGdwYV9j c3RyaW5nX2pvaW5fc3RyYXRlZ3kocyk7CisKKwkJcGdwYV9vdXRwdXRfc2ltcGxlX3N0cmF0ZWd5 KCZjb250ZXh0LAorCQkJCQkJCQkJc3RyYXRlZ3ksCisJCQkJCQkJCQl3YWxrZXItPmpvaW5fc3Ry YXRlZ2llc1tzXSk7CisJfQorCisJLyoKKwkgKiBFbWl0IHNjYW4gc3RyYXRlZ3kgYWR2aWNlIChi dXQgbm90IGZvciBvcmRpbmFyeSBzY2Fucywgd2hpY2ggYXJlCisJICogZGVmaW5pdGlvbmFsbHkg dW5pbnRlcmVzdGluZykuCisJICovCisJZm9yIChpbnQgYyA9IDA7IGMgPCBOVU1fUEdQQV9TQ0FO X1NUUkFURUdZOyArK2MpCisJCWlmIChjICE9IFBHUEFfU0NBTl9PUkRJTkFSWSkKKwkJCXBncGFf b3V0cHV0X3NjYW5fc3RyYXRlZ3koJmNvbnRleHQsIGMsIHdhbGtlci0+c2NhbnNbY10pOworCisJ LyogRW1pdCBxdWVyeSBmZWF0dXJlIGFkdmljZS4gKi8KKwlmb3IgKGludCB0ID0gMDsgdCA8IE5V TV9QR1BBX1FGX1RZUEVTOyArK3QpCisJCXBncGFfb3V0cHV0X3F1ZXJ5X2ZlYXR1cmUoJmNvbnRl eHQsIHQsIHdhbGtlci0+cXVlcnlfZmVhdHVyZXNbdF0pOworCisJLyogRW1pdCBOT19HQVRIRVIg YWR2aWNlLiAqLworCXBncGFfb3V0cHV0X25vX2dhdGhlcigmY29udGV4dCwgd2Fsa2VyLT5ub19n YXRoZXJfc2NhbnMpOworfQorCisvKgorICogT3V0cHV0IHRoZSBtZW1iZXJzIG9mIGFuIHVucm9s bGVkIGpvaW4sIGZpcnN0IHRoZSBvdXRlcm1vc3QgbWVtYmVyLCBhbmQKKyAqIHRoZW4gdGhlIGlu bmVyIG1lbWJlcnMgb25lIGJ5IG9uZSwgYXMgcGFydCBvZiBKT0lOX09SREVSKCkgYWR2aWNlLgor ICovCitzdGF0aWMgdm9pZAorcGdwYV9vdXRwdXRfdW5yb2xsZWRfam9pbihwZ3BhX291dHB1dF9j b250ZXh0ICpjb250ZXh0LAorCQkJCQkJICBwZ3BhX3Vucm9sbGVkX2pvaW4gKmpvaW4pCit7CisJ cGdwYV9vdXRwdXRfam9pbl9tZW1iZXIoY29udGV4dCwgJmpvaW4tPm91dGVyKTsKKworCWZvciAo aW50IGsgPSAwOyBrIDwgam9pbi0+bmlubmVyOyArK2spCisJeworCQlwZ3BhX2pvaW5fbWVtYmVy ICptZW1iZXIgPSAmam9pbi0+aW5uZXJba107CisKKwkJcGdwYV9tYXliZV9saW5lYnJlYWsoY29u dGV4dC0+YnVmLCBjb250ZXh0LT53cmFwX2NvbHVtbik7CisJCWFwcGVuZFN0cmluZ0luZm9DaGFy KGNvbnRleHQtPmJ1ZiwgJyAnKTsKKwkJcGdwYV9vdXRwdXRfam9pbl9tZW1iZXIoY29udGV4dCwg bWVtYmVyKTsKKwl9Cit9CisKKy8qCisgKiBPdXRwdXQgYSBzaW5nbGUgbWVtYmVyIG9mIGFuIHVu cm9sbGVkIGpvaW4gYXMgcGFydCBvZiBKT0lOX09SREVSKCkgYWR2aWNlLgorICovCitzdGF0aWMg dm9pZAorcGdwYV9vdXRwdXRfam9pbl9tZW1iZXIocGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4 dCwKKwkJCQkJCXBncGFfam9pbl9tZW1iZXIgKm1lbWJlcikKK3sKKwlpZiAobWVtYmVyLT51bnJv bGxlZF9qb2luICE9IE5VTEwpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5i dWYsICcoJyk7CisJCXBncGFfb3V0cHV0X3Vucm9sbGVkX2pvaW4oY29udGV4dCwgbWVtYmVyLT51 bnJvbGxlZF9qb2luKTsKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnKScp OworCX0KKwllbHNlCisJeworCQlwZ3BhX3NjYW4gICpzY2FuID0gbWVtYmVyLT5zY2FuOworCisJ CUFzc2VydChzY2FuICE9IE5VTEwpOworCQlpZiAoYm1zX21lbWJlcnNoaXAoc2Nhbi0+cmVsaWRz KSA9PSBCTVNfU0lOR0xFVE9OKQorCQkJcGdwYV9vdXRwdXRfcmVsYXRpb25zKGNvbnRleHQsIGNv bnRleHQtPmJ1Ziwgc2Nhbi0+cmVsaWRzKTsKKwkJZWxzZQorCQl7CisJCQlhcHBlbmRTdHJpbmdJ bmZvQ2hhcihjb250ZXh0LT5idWYsICd7Jyk7CisJCQlwZ3BhX291dHB1dF9yZWxhdGlvbnMoY29u dGV4dCwgY29udGV4dC0+YnVmLCBzY2FuLT5yZWxpZHMpOworCQkJYXBwZW5kU3RyaW5nSW5mb0No YXIoY29udGV4dC0+YnVmLCAnfScpOworCQl9CisJfQorfQorCisvKgorICogT3V0cHV0IGFkdmlj ZSBmb3IgYSBMaXN0IG9mIHBncGFfc2NhbiBvYmplY3RzLgorICoKKyAqIEFsbCB0aGUgc2NhbnMg bXVzdCB1c2UgdGhlIHN0cmF0ZWd5IHNwZWNpZmllZCBieSB0aGUgInN0cmF0ZWd5IiBhcmd1bWVu dC4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfb3V0cHV0X3NjYW5fc3RyYXRlZ3kocGdwYV9vdXRw dXRfY29udGV4dCAqY29udGV4dCwKKwkJCQkJCSAgcGdwYV9zY2FuX3N0cmF0ZWd5IHN0cmF0ZWd5 LAorCQkJCQkJICBMaXN0ICpzY2FucykKK3sKKwlib29sCQlmaXJzdCA9IHRydWU7CisKKwlpZiAo c2NhbnMgPT0gTklMKQorCQlyZXR1cm47CisKKwlpZiAoY29udGV4dC0+YnVmLT5sZW4gPiAwKQor CQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICdcbicpOworCWFwcGVuZFN0cmlu Z0luZm8oY29udGV4dC0+YnVmLCAiJXMoIiwKKwkJCQkJIHBncGFfY3N0cmluZ19zY2FuX3N0cmF0 ZWd5KHN0cmF0ZWd5KSk7CisKKwlmb3JlYWNoX3B0cihwZ3BhX3NjYW4sIHNjYW4sIHNjYW5zKQor CXsKKwkJUGxhbgkgICAqcGxhbiA9IHNjYW4tPnBsYW47CisKKwkJaWYgKGZpcnN0KQorCQkJZmly c3QgPSBmYWxzZTsKKwkJZWxzZQorCQl7CisJCQlwZ3BhX21heWJlX2xpbmVicmVhayhjb250ZXh0 LT5idWYsIGNvbnRleHQtPndyYXBfY29sdW1uKTsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNv bnRleHQtPmJ1ZiwgJyAnKTsKKwkJfQorCisJCS8qIE91dHB1dCB0aGUgcmVsYXRpb24gaWRlbnRp ZmllcnMuICovCisJCWlmIChibXNfbWVtYmVyc2hpcChzY2FuLT5yZWxpZHMpID09IEJNU19TSU5H TEVUT04pCisJCQlwZ3BhX291dHB1dF9yZWxhdGlvbnMoY29udGV4dCwgY29udGV4dC0+YnVmLCBz Y2FuLT5yZWxpZHMpOworCQllbHNlCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRl eHQtPmJ1ZiwgJygnKTsKKwkJCXBncGFfb3V0cHV0X3JlbGF0aW9ucyhjb250ZXh0LCBjb250ZXh0 LT5idWYsIHNjYW4tPnJlbGlkcyk7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5i dWYsICcpJyk7CisJCX0KKworCQkvKiBGb3Igc2NhbnMgaW52b2x2aW5nIGluZGV4ZXMsIG91dHB1 dCBpbmRleCBpbmZvcm1hdGlvbi4gKi8KKwkJaWYgKHN0cmF0ZWd5ID09IFBHUEFfU0NBTl9JTkRF WCkKKwkJeworCQkJQXNzZXJ0KElzQShwbGFuLCBJbmRleFNjYW4pKTsKKwkJCXBncGFfbWF5YmVf bGluZWJyZWFrKGNvbnRleHQtPmJ1ZiwgY29udGV4dC0+d3JhcF9jb2x1bW4pOworCQkJYXBwZW5k U3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnICcpOworCQkJcGdwYV9vdXRwdXRfcmVsYXRp b25fbmFtZShjb250ZXh0LCAoKEluZGV4U2NhbiAqKSBwbGFuKS0+aW5kZXhpZCk7CisJCX0KKwkJ ZWxzZSBpZiAoc3RyYXRlZ3kgPT0gUEdQQV9TQ0FOX0lOREVYX09OTFkpCisJCXsKKwkJCUFzc2Vy dChJc0EocGxhbiwgSW5kZXhPbmx5U2NhbikpOworCQkJcGdwYV9tYXliZV9saW5lYnJlYWsoY29u dGV4dC0+YnVmLCBjb250ZXh0LT53cmFwX2NvbHVtbik7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hh cihjb250ZXh0LT5idWYsICcgJyk7CisJCQlwZ3BhX291dHB1dF9yZWxhdGlvbl9uYW1lKGNvbnRl eHQsCisJCQkJCQkJCQkgICgoSW5kZXhPbmx5U2NhbiAqKSBwbGFuKS0+aW5kZXhpZCk7CisJCX0K KwkJZWxzZSBpZiAoc3RyYXRlZ3kgPT0gUEdQQV9TQ0FOX0JJVE1BUF9IRUFQKQorCQl7CisJCQlw Z3BhX21heWJlX2xpbmVicmVhayhjb250ZXh0LT5idWYsIGNvbnRleHQtPndyYXBfY29sdW1uKTsK KwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyAnKTsKKwkJCXBncGFfb3V0 cHV0X2JpdG1hcF9pbmRleF9kZXRhaWxzKGNvbnRleHQsIHBsYW4tPmxlZnR0cmVlKTsKKwkJfQor CX0KKworCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyknKTsKKwlwZ3BhX21h eWJlX2xpbmVicmVhayhjb250ZXh0LT5idWYsIGNvbnRleHQtPndyYXBfY29sdW1uKTsKK30KKwor LyoKKyAqIE91dHB1dCBpbmZvcm1hdGlvbiBhYm91dCB3aGljaCBpbmRleCBvciBpbmRleGVzIHBv d2VyIGEgQml0bWFwSGVhcFNjYW4uCisgKgorICogV2UgZW1pdCAmJihpMSBpMiBpMykgZm9yIGEg Qml0bWFwQW5kIGJldHdlZW4gaW5kZXhlcyBpMSwgaTIsIGFuZCBpMzsKKyAqIGFuZCBsaWtld2lz ZSB8fChpMSBpMiBpMykgZm9yIGEgc2ltaWxhciBCaXRtYXBPciBvcGVyYXRpb24uCisgKi8KK3N0 YXRpYyB2b2lkCitwZ3BhX291dHB1dF9iaXRtYXBfaW5kZXhfZGV0YWlscyhwZ3BhX291dHB1dF9j b250ZXh0ICpjb250ZXh0LCBQbGFuICpwbGFuKQoreworCWNoYXIJICAgKm9wZXJhdG9yOworCUxp c3QJICAgKmJpdG1hcHBsYW5zOworCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKworCWlmIChJc0EocGxh biwgQml0bWFwSW5kZXhTY2FuKSkKKwl7CisJCUJpdG1hcEluZGV4U2NhbiAqYml0bWFwaW5kZXhz Y2FuID0gKEJpdG1hcEluZGV4U2NhbiAqKSBwbGFuOworCisJCXBncGFfb3V0cHV0X3JlbGF0aW9u X25hbWUoY29udGV4dCwgYml0bWFwaW5kZXhzY2FuLT5pbmRleGlkKTsKKwkJcmV0dXJuOworCX0K KworCWlmIChJc0EocGxhbiwgQml0bWFwT3IpKQorCXsKKwkJb3BlcmF0b3IgPSAifHwiOworCQli aXRtYXBwbGFucyA9ICgoQml0bWFwT3IgKikgcGxhbiktPmJpdG1hcHBsYW5zOworCX0KKwllbHNl IGlmIChJc0EocGxhbiwgQml0bWFwQW5kKSkKKwl7CisJCW9wZXJhdG9yID0gIiYmIjsKKwkJYml0 bWFwcGxhbnMgPSAoKEJpdG1hcEFuZCAqKSBwbGFuKS0+Yml0bWFwcGxhbnM7CisJfQorCWVsc2UK KwkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgbm9kZSB0eXBlOiAlZCIsIChpbnQpIG5vZGVUYWco cGxhbikpOworCisJYXBwZW5kU3RyaW5nSW5mbyhjb250ZXh0LT5idWYsICIlcygiLCBvcGVyYXRv cik7CisJZm9yZWFjaF9wdHIoUGxhbiwgY2hpbGRfcGxhbiwgYml0bWFwcGxhbnMpCisJeworCQlp ZiAoZmlyc3QpCisJCQlmaXJzdCA9IGZhbHNlOworCQllbHNlCisJCXsKKwkJCXBncGFfbWF5YmVf bGluZWJyZWFrKGNvbnRleHQtPmJ1ZiwgY29udGV4dC0+d3JhcF9jb2x1bW4pOworCQkJYXBwZW5k U3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnICcpOworCQl9CisJCXBncGFfb3V0cHV0X2Jp dG1hcF9pbmRleF9kZXRhaWxzKGNvbnRleHQsIGNoaWxkX3BsYW4pOworCX0KKwlhcHBlbmRTdHJp bmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcpJyk7Cit9CisKKy8qCisgKiBPdXRwdXQgYSBzY2hl bWEtcXVhbGlmaWVkIHJlbGF0aW9uIG5hbWUuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX291dHB1 dF9yZWxhdGlvbl9uYW1lKHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsIE9pZCByZWxpZCkK K3sKKwlPaWQJCQluc3BvaWQgPSBnZXRfcmVsX25hbWVzcGFjZShyZWxpZCk7CisJY2hhcgkgICAq cmVsbmFtZXNwYWNlID0gZ2V0X25hbWVzcGFjZV9uYW1lX29yX3RlbXAobnNwb2lkKTsKKwljaGFy CSAgICpyZWxuYW1lID0gZ2V0X3JlbF9uYW1lKHJlbGlkKTsKKworCWFwcGVuZFN0cmluZ0luZm9T dHJpbmcoY29udGV4dC0+YnVmLCBxdW90ZV9pZGVudGlmaWVyKHJlbG5hbWVzcGFjZSkpOworCWFw cGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJy4nKTsKKwlhcHBlbmRTdHJpbmdJbmZv U3RyaW5nKGNvbnRleHQtPmJ1ZiwgcXVvdGVfaWRlbnRpZmllcihyZWxuYW1lKSk7Cit9CisKKy8q CisgKiBPdXRwdXQgYWR2aWNlIGZvciBhIExpc3Qgb2YgcGdwYV9xdWVyeV9mZWF0dXJlIG9iamVj dHMuCisgKgorICogQWxsIGZlYXR1cmVzIG11c3QgYmUgb2YgdGhlIHR5cGUgc3BlY2lmaWVkIGJ5 IHRoZSAidHlwZSIgYXJndW1lbnQuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX291dHB1dF9xdWVy eV9mZWF0dXJlKHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsIHBncGFfcWZfdHlwZSB0eXBl LAorCQkJCQkJICBMaXN0ICpxdWVyeV9mZWF0dXJlcykKK3sKKwlib29sCQlmaXJzdCA9IHRydWU7 CisKKwlpZiAocXVlcnlfZmVhdHVyZXMgPT0gTklMKQorCQlyZXR1cm47CisKKwlpZiAoY29udGV4 dC0+YnVmLT5sZW4gPiAwKQorCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICdc bicpOworCWFwcGVuZFN0cmluZ0luZm8oY29udGV4dC0+YnVmLCAiJXMoIiwKKwkJCQkJIHBncGFf Y3N0cmluZ19xdWVyeV9mZWF0dXJlX3R5cGUodHlwZSkpOworCisJZm9yZWFjaF9wdHIocGdwYV9x dWVyeV9mZWF0dXJlLCBxZiwgcXVlcnlfZmVhdHVyZXMpCisJeworCQlpZiAoZmlyc3QpCisJCQlm aXJzdCA9IGZhbHNlOworCQllbHNlCisJCXsKKwkJCXBncGFfbWF5YmVfbGluZWJyZWFrKGNvbnRl eHQtPmJ1ZiwgY29udGV4dC0+d3JhcF9jb2x1bW4pOworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIo Y29udGV4dC0+YnVmLCAnICcpOworCQl9CisKKwkJaWYgKGJtc19tZW1iZXJzaGlwKHFmLT5yZWxp ZHMpID09IEJNU19TSU5HTEVUT04pCisJCQlwZ3BhX291dHB1dF9yZWxhdGlvbnMoY29udGV4dCwg Y29udGV4dC0+YnVmLCBxZi0+cmVsaWRzKTsKKwkJZWxzZQorCQl7CisJCQlhcHBlbmRTdHJpbmdJ bmZvQ2hhcihjb250ZXh0LT5idWYsICcoJyk7CisJCQlwZ3BhX291dHB1dF9yZWxhdGlvbnMoY29u dGV4dCwgY29udGV4dC0+YnVmLCBxZi0+cmVsaWRzKTsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFy KGNvbnRleHQtPmJ1ZiwgJyknKTsKKwkJfQorCX0KKworCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNv bnRleHQtPmJ1ZiwgJyknKTsKKwlwZ3BhX21heWJlX2xpbmVicmVhayhjb250ZXh0LT5idWYsIGNv bnRleHQtPndyYXBfY29sdW1uKTsKK30KKworLyoKKyAqIE91dHB1dCAic2ltcGxlIiBhZHZpY2Ug Zm9yIGEgTGlzdCBvZiBCaXRtYXBzZXQgb2JqZWN0cyBlYWNoIG9mIHdoaWNoCisgKiBjb250YWlu cyBvbmUgb3IgbW9yZSBSVElzLgorICoKKyAqIEJ5IHNpbXBsZSwgd2UganVzdCBtZWFuIHRoYXQg dGhlIGFkdmljZSBlbWl0dGVkIGZvbGxvd3MgdGhlIG1vc3QKKyAqIHN0cmFpZ2h0Zm9yd2FyZCBw YXR0ZXJuOiB0aGUgc3RyYXRlZ3kgbmFtZSwgZm9sbG93ZWQgYnkgYSBsaXN0IG9mIGl0ZW1zCisg KiBzZXBhcmF0ZWQgYnkgc3BhY2VzIGFuZCBzdXJyb3VuZGVkIGJ5IHBhcmVudGhlc2VzLiBJbmRp dmlkdWFsIGl0ZW1zIGluCisgKiB0aGUgbGlzdCBhcmUgYSBzaW5nbGUgcmVsYXRpb24gaWRlbnRp ZmllciBmb3IgYSBCaXRtYXBzZXQgdGhhdCBjb250YWlucworICoganVzdCBvbmUgbWVtYmVyLCBv ciBhIHN1Yi1saXN0IGFnYWluIHNlcGFyYXRlZCBieSBzcGFjZXMgYW5kIHN1cnJvdW5kZWQKKyAq IGJ5IHBhcmVudGhlc2VzIGZvciBhIEJpdG1hcHNldCB3aXRoIG11bHRpcGxlIG1lbWJlcnMuIEJp dG1hcHNldHMgd2l0aAorICogbm8gbWVtYmVycyBwcm9iYWJseSBzaG91bGRuJ3Qgb2NjdXIgaGVy ZSwgYnV0IGlmIHRoZXkgZG8gdGhleSdsbCBiZQorICogcmVuZGVyZWQgYXMgYW4gZW1wdHkgc3Vi LWxpc3QuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX291dHB1dF9zaW1wbGVfc3RyYXRlZ3kocGdw YV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwgY2hhciAqc3RyYXRlZ3ksCisJCQkJCQkJTGlzdCAq cmVsaWRfc2V0cykKK3sKKwlib29sCQlmaXJzdCA9IHRydWU7CisKKwlpZiAocmVsaWRfc2V0cyA9 PSBOSUwpCisJCXJldHVybjsKKworCWlmIChjb250ZXh0LT5idWYtPmxlbiA+IDApCisJCWFwcGVu ZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJ1xuJyk7CisJYXBwZW5kU3RyaW5nSW5mbyhj b250ZXh0LT5idWYsICIlcygiLCBzdHJhdGVneSk7CisKKwlmb3JlYWNoX25vZGUoQml0bWFwc2V0 LCByZWxpZHMsIHJlbGlkX3NldHMpCisJeworCQlpZiAoZmlyc3QpCisJCQlmaXJzdCA9IGZhbHNl OworCQllbHNlCisJCXsKKwkJCXBncGFfbWF5YmVfbGluZWJyZWFrKGNvbnRleHQtPmJ1ZiwgY29u dGV4dC0+d3JhcF9jb2x1bW4pOworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVm LCAnICcpOworCQl9CisKKwkJaWYgKGJtc19tZW1iZXJzaGlwKHJlbGlkcykgPT0gQk1TX1NJTkdM RVRPTikKKwkJCXBncGFfb3V0cHV0X3JlbGF0aW9ucyhjb250ZXh0LCBjb250ZXh0LT5idWYsIHJl bGlkcyk7CisJCWVsc2UKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVm LCAnKCcpOworCQkJcGdwYV9vdXRwdXRfcmVsYXRpb25zKGNvbnRleHQsIGNvbnRleHQtPmJ1Ziwg cmVsaWRzKTsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyknKTsKKwkJ fQorCX0KKworCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyknKTsKKwlwZ3Bh X21heWJlX2xpbmVicmVhayhjb250ZXh0LT5idWYsIGNvbnRleHQtPndyYXBfY29sdW1uKTsKK30K KworLyoKKyAqIE91dHB1dCBOT19HQVRIRVIgYWR2aWNlIGZvciBhbGwgcmVsYXRpb25zIG5vdCBh cHBlYXJpbmcgYmVuZWF0aCBhbnkKKyAqIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugbm9kZS4KKyAq Lworc3RhdGljIHZvaWQKK3BncGFfb3V0cHV0X25vX2dhdGhlcihwZ3BhX291dHB1dF9jb250ZXh0 ICpjb250ZXh0LCBCaXRtYXBzZXQgKnJlbGlkcykKK3sKKwlpZiAocmVsaWRzID09IE5VTEwpCisJ CXJldHVybjsKKwlpZiAoY29udGV4dC0+YnVmLT5sZW4gPiAwKQorCQlhcHBlbmRTdHJpbmdJbmZv Q2hhcihjb250ZXh0LT5idWYsICdcbicpOworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoY29udGV4 dC0+YnVmLCAiTk9fR0FUSEVSKCIpOworCXBncGFfb3V0cHV0X3JlbGF0aW9ucyhjb250ZXh0LCBj b250ZXh0LT5idWYsIHJlbGlkcyk7CisJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVm LCAnKScpOworfQorCisvKgorICogT3V0cHV0IHRoZSBpZGVudGlmaWVycyBmb3IgZWFjaCBSVEkg aW4gdGhlIHByb3ZpZGVkIHNldC4KKyAqCisgKiBJZGVudGlmaWVycyBhcmUgc2VwYXJhdGVkIGJ5 IHNwYWNlcywgYW5kIGEgbGluZSBicmVhayBpcyBwb3NzaWJsZSBhZnRlcgorICogZWFjaCBvbmUu CisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX291dHB1dF9yZWxhdGlvbnMocGdwYV9vdXRwdXRfY29u dGV4dCAqY29udGV4dCwgU3RyaW5nSW5mbyBidWYsCisJCQkJCSAgQml0bWFwc2V0ICpyZWxpZHMp Cit7CisJaW50CQkJcnRpID0gLTE7CisJYm9vbAkJZmlyc3QgPSB0cnVlOworCisJd2hpbGUgKChy dGkgPSBibXNfbmV4dF9tZW1iZXIocmVsaWRzLCBydGkpKSA+PSAwKQorCXsKKwkJY29uc3QgY2hh ciAqcmlkX3N0cmluZyA9IGNvbnRleHQtPnJpZF9zdHJpbmdzW3J0aSAtIDFdOworCisJCWlmIChy aWRfc3RyaW5nID09IE5VTEwpCisJCQllbG9nKEVSUk9SLCAibm8gaWRlbnRpZmllciBmb3IgUlRJ ICVkIiwgcnRpKTsKKworCQlpZiAoZmlyc3QpCisJCXsKKwkJCWZpcnN0ID0gZmFsc2U7CisJCQlh cHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgcmlkX3N0cmluZyk7CisJCX0KKwkJZWxzZQorCQl7 CisJCQlwZ3BhX21heWJlX2xpbmVicmVhayhidWYsIGNvbnRleHQtPndyYXBfY29sdW1uKTsKKwkJ CWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiICVzIiwgcmlkX3N0cmluZyk7CisJCX0KKwl9Cit9CisK Ky8qCisgKiBHZXQgYSBDIHN0cmluZyB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBzcGVjaWZpZWQg am9pbiBzdHJhdGVneS4KKyAqLworc3RhdGljIGNoYXIgKgorcGdwYV9jc3RyaW5nX2pvaW5fc3Ry YXRlZ3kocGdwYV9qb2luX3N0cmF0ZWd5IHN0cmF0ZWd5KQoreworCXN3aXRjaCAoc3RyYXRlZ3kp CisJeworCQljYXNlIEpTVFJBVF9NRVJHRV9KT0lOX1BMQUlOOgorCQkJcmV0dXJuICJNRVJHRV9K T0lOX1BMQUlOIjsKKwkJY2FzZSBKU1RSQVRfTUVSR0VfSk9JTl9NQVRFUklBTElaRToKKwkJCXJl dHVybiAiTUVSR0VfSk9JTl9NQVRFUklBTElaRSI7CisJCWNhc2UgSlNUUkFUX05FU1RFRF9MT09Q X1BMQUlOOgorCQkJcmV0dXJuICJORVNURURfTE9PUF9QTEFJTiI7CisJCWNhc2UgSlNUUkFUX05F U1RFRF9MT09QX01BVEVSSUFMSVpFOgorCQkJcmV0dXJuICJORVNURURfTE9PUF9NQVRFUklBTEla RSI7CisJCWNhc2UgSlNUUkFUX05FU1RFRF9MT09QX01FTU9JWkU6CisJCQlyZXR1cm4gIk5FU1RF RF9MT09QX01FTU9JWkUiOworCQljYXNlIEpTVFJBVF9IQVNIX0pPSU46CisJCQlyZXR1cm4gIkhB U0hfSk9JTiI7CisJfQorCisJcGdfdW5yZWFjaGFibGUoKTsKKwlyZXR1cm4gTlVMTDsKK30KKwor LyoKKyAqIEdldCBhIEMgc3RyaW5nIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHNwZWNpZmllZCBz Y2FuIHN0cmF0ZWd5LgorICovCitzdGF0aWMgY2hhciAqCitwZ3BhX2NzdHJpbmdfc2Nhbl9zdHJh dGVneShwZ3BhX3NjYW5fc3RyYXRlZ3kgc3RyYXRlZ3kpCit7CisJc3dpdGNoIChzdHJhdGVneSkK Kwl7CisJCWNhc2UgUEdQQV9TQ0FOX09SRElOQVJZOgorCQkJcmV0dXJuICJPUkRJTkFSWV9TQ0FO IjsKKwkJY2FzZSBQR1BBX1NDQU5fU0VROgorCQkJcmV0dXJuICJTRVFfU0NBTiI7CisJCWNhc2Ug UEdQQV9TQ0FOX0JJVE1BUF9IRUFQOgorCQkJcmV0dXJuICJCSVRNQVBfSEVBUF9TQ0FOIjsKKwkJ Y2FzZSBQR1BBX1NDQU5fRk9SRUlHTjoKKwkJCXJldHVybiAiRk9SRUlHTl9KT0lOIjsKKwkJY2Fz ZSBQR1BBX1NDQU5fSU5ERVg6CisJCQlyZXR1cm4gIklOREVYX1NDQU4iOworCQljYXNlIFBHUEFf U0NBTl9JTkRFWF9PTkxZOgorCQkJcmV0dXJuICJJTkRFWF9PTkxZX1NDQU4iOworCQljYXNlIFBH UEFfU0NBTl9QQVJUSVRJT05XSVNFOgorCQkJcmV0dXJuICJQQVJUSVRJT05XSVNFIjsKKwkJY2Fz ZSBQR1BBX1NDQU5fVElEOgorCQkJcmV0dXJuICJUSURfU0NBTiI7CisJfQorCisJcGdfdW5yZWFj aGFibGUoKTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIEdldCBhIEMgc3RyaW5nIHRoYXQg Y29ycmVzcG9uZHMgdG8gdGhlIHNwZWNpZmllZCBzY2FuIHN0cmF0ZWd5LgorICovCitzdGF0aWMg Y2hhciAqCitwZ3BhX2NzdHJpbmdfcXVlcnlfZmVhdHVyZV90eXBlKHBncGFfcWZfdHlwZSB0eXBl KQoreworCXN3aXRjaCAodHlwZSkKKwl7CisJCWNhc2UgUEdQQVFGX0dBVEhFUjoKKwkJCXJldHVy biAiR0FUSEVSIjsKKwkJY2FzZSBQR1BBUUZfR0FUSEVSX01FUkdFOgorCQkJcmV0dXJuICJHQVRI RVJfTUVSR0UiOworCQljYXNlIFBHUEFRRl9TRU1JSk9JTl9OT05fVU5JUVVFOgorCQkJcmV0dXJu ICJTRU1JSk9JTl9OT05fVU5JUVVFIjsKKwkJY2FzZSBQR1BBUUZfU0VNSUpPSU5fVU5JUVVFOgor CQkJcmV0dXJuICJTRU1JSk9JTl9VTklRVUUiOworCX0KKworCisJcGdfdW5yZWFjaGFibGUoKTsK KwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIEluc2VydCBhIGxpbmUgYnJlYWsgaW50byB0aGUg U3RyaW5nSW5mb0RhdGEsIGlmIG5lZWRlZC4KKyAqCisgKiBJZiB3cmFwX2NvbHVtbiBpcyB6ZXJv IG9yIG5lZ2F0aXZlLCB0aGlzIGRvZXMgbm90aGluZy4gT3RoZXJ3aXNlLCB3ZQorICogY29uc2lk ZXIgaW5zZXJ0aW5nIGEgbmV3bGluZS4gV2Ugb25seSBpbnNlcnQgYSBuZXdsaW5lIGlmIHRoZSBs ZW5ndGggb2YKKyAqIHRoZSBsYXN0IGxpbmUgaW4gdGhlIGJ1ZmZlciBleGNlZWRzIHdyYXBfY29s dW1uLCBhbmQgbm90IGlmIHdlJ2QgYmUKKyAqIGluc2VydGluZyBhIG5ld2xpbmUgYXQgb3IgYmVm b3JlIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGN1cnJlbnQgbGluZS4KKyAqCisgKiBUaGUgcG9zaXRp b24gYXQgd2hpY2ggdGhlIG5ld2xpbmUgaXMgaW5zZXJ0ZWQgaXMgc2ltcGx5IHdoZXJldmVyIHRo ZQorICogYnVmZmVyIGVuZGVkIHRoZSBsYXN0IHRpbWUgdGhpcyBmdW5jdGlvbiB3YXMgY2FsbGVk LiBJbiBvdGhlciB3b3JkcywKKyAqIHRoZSBjYWxsZXIgaXMgZXhwZWN0ZWQgdG8gY2FsbCB0aGlz IGZ1bmN0aW9uIGV2ZXJ5IHRpbWUgd2UgcmVhY2ggYSBnb29kCisgKiBwbGFjZSBmb3IgYSBsaW5l IGJyZWFrLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9tYXliZV9saW5lYnJlYWsoU3RyaW5nSW5m byBidWYsIGludCB3cmFwX2NvbHVtbikKK3sKKwljaGFyCSAgICp0cmFpbGluZ19ubDsKKwlpbnQJ CQlsaW5lX3N0YXJ0OworCWludAkJCXNhdmVfY3Vyc29yOworCisJLyogSWYgbGluZSB3cmFwcGlu ZyBpcyBkaXNhYmxlZCwgZXhpdCBxdWlja2x5LiAqLworCWlmICh3cmFwX2NvbHVtbiA8PSAwKQor CQlyZXR1cm47CisKKwkvKgorCSAqIFNldCBsaW5lX3N0YXJ0IHRvIHRoZSBieXRlIG9mZnNldCB3 aXRoaW4gYnVmLT5kYXRhIG9mIHRoZSBmaXJzdAorCSAqIGNoYXJhY3RlciBvZiB0aGUgY3VycmVu dCBsaW5lLCB3aGVyZSB0aGUgY3VycmVudCBsaW5lIG1lYW5zIHRoZSBsYXN0CisJICogb25lIGlu IHRoZSBidWZmZXIuIE5vdGUgdGhhdCBsaW5lX3N0YXJ0IGNvdWxkIGJlIHRoZSBvZmZzZXQgb2Yg dGhlCisJICogdHJhaWxpbmcgJ1wwJyBpZiB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4gdGhlIGJ1ZmZl ciBpcyBhIGxpbmUgYnJlYWsuCisJICovCisJdHJhaWxpbmdfbmwgPSBzdHJyY2hyKGJ1Zi0+ZGF0 YSwgJ1xuJyk7CisJaWYgKHRyYWlsaW5nX25sID09IE5VTEwpCisJCWxpbmVfc3RhcnQgPSAwOwor CWVsc2UKKwkJbGluZV9zdGFydCA9ICh0cmFpbGluZ19ubCAtIGJ1Zi0+ZGF0YSkgKyAxOworCisJ LyoKKwkgKiBSZW1lbWJlciB0aGF0IHRoZSBjdXJyZW50IGVuZCBvZiB0aGUgYnVmZmVyIGlzIGEg cG90ZW50aWFsIGxvY2F0aW9uIHRvCisJICogaW5zZXJ0IGEgbGluZSBicmVhayBvbiBhIGZ1dHVy ZSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24uCisJICovCisJc2F2ZV9jdXJzb3IgPSBidWYtPmN1cnNv cjsKKwlidWYtPmN1cnNvciA9IGJ1Zi0+bGVuOworCisJLyogSWYgd2UgaGF2ZW4ndCBwYXNzZWQg dGhlIHdyYXAgY29sdW1uLCB3ZSBkb24ndCBuZWVkIGEgbmV3bGluZS4gKi8KKwlpZiAoYnVmLT5s ZW4gLSBsaW5lX3N0YXJ0IDw9IHdyYXBfY29sdW1uKQorCQlyZXR1cm47CisKKwkvKgorCSAqIEl0 IG9ubHkgbWFrZXMgc2Vuc2UgdG8gaW5zZXJ0IGEgbmV3bGluZSBhdCBhIHBvc2l0aW9uIGxhdGVy IHRoYW4gdGhlCisJICogYmVnaW5uaW5nIG9mIHRoZSBjdXJyZW50IGxpbmUuCisJICovCisJaWYg KGJ1Zi0+Y3Vyc29yIDw9IGxpbmVfc3RhcnQpCisJCXJldHVybjsKKworCS8qIEluc2VydCBhIG5l d2xpbmUgYXQgdGhlIHByZXZpb3VzIGN1cnNvciBsb2NhdGlvbi4gKi8KKwllbmxhcmdlU3RyaW5n SW5mbyhidWYsIDEpOworCW1lbW1vdmUoJmJ1Zi0+ZGF0YVtzYXZlX2N1cnNvcl0gKyAxLCAmYnVm LT5kYXRhW3NhdmVfY3Vyc29yXSwKKwkJCWJ1Zi0+bGVuIC0gc2F2ZV9jdXJzb3IpOworCSsrYnVm LT5jdXJzb3I7CisJYnVmLT5kYXRhWysrYnVmLT5sZW5dID0gJ1wwJzsKKwlidWYtPmRhdGFbc2F2 ZV9jdXJzb3JdID0gJ1xuJzsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv cGdwYV9vdXRwdXQuaCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9vdXRwdXQuaApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDc0OTZkNzZmNTIKLS0tIC9kZXYv bnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmgKQEAgLTAsMCAr MSwyMiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdwYV9vdXRwdXQuaAorICoJICBw cm9kdWNlIHRleHR1YWwgb3V0cHV0IGZyb20gdGhlIHJlc3VsdHMgb2YgYSBwbGFuIHRyZWUgd2Fs aworICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZl bG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX291dHB1 dC5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgUEdQQV9PVVRQVVRfSAor I2RlZmluZSBQR1BBX09VVFBVVF9ICisKKyNpbmNsdWRlICJwZ3BhX2lkZW50aWZpZXIuaCIKKyNp bmNsdWRlICJwZ3BhX3dhbGtlci5oIgorCitleHRlcm4gdm9pZCBwZ3BhX291dHB1dF9hZHZpY2Uo U3RyaW5nSW5mbyBidWYsCisJCQkJCQkJICAgcGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxr ZXIsCisJCQkJCQkJICAgcGdwYV9pZGVudGlmaWVyICpydF9pZGVudGlmaWVycyk7CisKKyNlbmRp ZgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BhcnNlci55IGIvY29u dHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BhcnNlci55Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwLi42MTk3ZDE3NzNjOQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIv cGdfcGxhbl9hZHZpY2UvcGdwYV9wYXJzZXIueQpAQCAtMCwwICsxLDM0MCBAQAorJXsKKy8qCisg KiBQYXJzZXIgZm9yIHBsYW4gYWR2aWNlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMjUs IFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICogY29udHJpYi9wZ19w bGFuX2FkdmljZS9wZ3BhX3BhcnNlci55CisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzLmgiCisK KyNpbmNsdWRlIDxmbG9hdC5oPgorI2luY2x1ZGUgPG1hdGguaD4KKworI2luY2x1ZGUgImZtZ3Iu aCIKKyNpbmNsdWRlICJub2Rlcy9taXNjbm9kZXMuaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlu cy5oIgorI2luY2x1ZGUgInV0aWxzL2Zsb2F0LmgiCisKKyNpbmNsdWRlICJwZ3BhX2FzdC5oIgor I2luY2x1ZGUgInBncGFfcGFyc2VyLmgiCisKKy8qCisgKiBCaXNvbiBkb2Vzbid0IGFsbG9jYXRl IGFueXRoaW5nIHRoYXQgbmVlZHMgdG8gbGl2ZSBhY3Jvc3MgcGFyc2VyIGNhbGxzLAorICogc28g d2UgY2FuIGVhc2lseSBoYXZlIGl0IHVzZSBwYWxsb2MgaW5zdGVhZCBvZiBtYWxsb2MuICBUaGlz IHByZXZlbnRzCisgKiBtZW1vcnkgbGVha3MgaWYgd2UgZXJyb3Igb3V0IGR1cmluZyBwYXJzaW5n LgorICovCisjZGVmaW5lIFlZTUFMTE9DIHBhbGxvYworI2RlZmluZSBZWUZSRUUgICBwZnJlZQor JX0KKworLyogQklTT04gRGVjbGFyYXRpb25zICovCislcGFyc2UtcGFyYW0ge0xpc3QgKipyZXN1 bHR9CislcGFyc2UtcGFyYW0ge2NoYXIgKipwYXJzZV9lcnJvcl9tc2dfcH0KKyVwYXJzZS1wYXJh bSB7eXlzY2FuX3QgeXlzY2FubmVyfQorJWxleC1wYXJhbSB7TGlzdCAqKnJlc3VsdH0KKyVsZXgt cGFyYW0ge2NoYXIgKipwYXJzZV9lcnJvcl9tc2dfcH0KKyVsZXgtcGFyYW0ge3l5c2Nhbl90IHl5 c2Nhbm5lcn0KKyVwdXJlLXBhcnNlcgorJWV4cGVjdCAwCislbmFtZS1wcmVmaXg9InBncGFfeXki CisKKyV1bmlvbgoreworCWNoYXIJICAgKnN0cjsKKwlpbnQJCQlpbnRlZ2VyOworCUxpc3QJICAg Kmxpc3Q7CisJcGdwYV9hZHZpY2VfaXRlbSAqaXRlbTsKKwlwZ3BhX2FkdmljZV90YXJnZXQgKnRh cmdldDsKKwlwZ3BhX2luZGV4X3RhcmdldCAqaXRhcmdldDsKK30KKyV0b2tlbiA8c3RyPiBUT0tf SURFTlQgVE9LX1RBR19KT0lOX09SREVSIFRPS19UQUdfQklUTUFQIFRPS19UQUdfSU5ERVgKKyV0 b2tlbiA8c3RyPiBUT0tfVEFHX1NJTVBMRSBUT0tfVEFHX0dFTkVSSUMKKyV0b2tlbiA8aW50ZWdl cj4gVE9LX0lOVEVHRVIKKyV0b2tlbiBUT0tfT1IgVE9LX0FORAorCisldHlwZSA8aW50ZWdlcj4g b3B0X3JpX29jY3VycmVuY2UKKyV0eXBlIDxpdGVtPiBhZHZpY2VfaXRlbQorJXR5cGUgPGxpc3Q+ IGFkdmljZV9pdGVtX2xpc3QgYml0bWFwX3N1Ymxpc3QgYml0bWFwX3RhcmdldF9saXN0IGdlbmVy aWNfdGFyZ2V0X2xpc3QKKyV0eXBlIDxsaXN0PiBpbmRleF90YXJnZXRfbGlzdCBqb2luX29yZGVy X3RhcmdldF9saXN0CisldHlwZSA8bGlzdD4gb3B0X3BhcnRpdGlvbiBzaW1wbGVfdGFyZ2V0X2xp c3QKKyV0eXBlIDxzdHI+IGlkZW50aWZpZXIgb3B0X3BsYW5fbmFtZQorJXR5cGUgPHRhcmdldD4g Z2VuZXJpY19zdWJsaXN0IGpvaW5fb3JkZXJfc3VibGlzdAorJXR5cGUgPHRhcmdldD4gcmVsYXRp b25faWRlbnRpZmllcgorJXR5cGUgPGl0YXJnZXQ+IGJpdG1hcF90YXJnZXRfaXRlbSBpbmRleF9u YW1lCisKKyVzdGFydCBwYXJzZV90b3BsZXZlbAorCisvKiBHcmFtbWFyIGZvbGxvd3MgKi8KKyUl CisKK3BhcnNlX3RvcGxldmVsOiBhZHZpY2VfaXRlbV9saXN0CisJCXsKKwkJCSh2b2lkKSB5eW5l cnJzOwkJCQkvKiBzdXBwcmVzcyBjb21waWxlciB3YXJuaW5nICovCisJCQkqcmVzdWx0ID0gJDE7 CisJCX0KKwk7CisKK2FkdmljZV9pdGVtX2xpc3Q6IGFkdmljZV9pdGVtX2xpc3QgYWR2aWNlX2l0 ZW0KKwkJeyAkJCA9IGxhcHBlbmQoJDEsICQyKTsgfQorCXwKKwkJeyAkJCA9IE5JTDsgfQorCTsK KworYWR2aWNlX2l0ZW06IFRPS19UQUdfSk9JTl9PUkRFUiAnKCcgam9pbl9vcmRlcl90YXJnZXRf bGlzdCAnKScKKwkJeworCQkJJCQgPSBwYWxsb2MwX29iamVjdChwZ3BhX2FkdmljZV9pdGVtKTsK KwkJCSQkLT50YWcgPSBQR1BBX1RBR19KT0lOX09SREVSOworCQkJJCQtPnRhcmdldHMgPSAkMzsK KwkJCWlmICgkMyA9PSBOSUwpCisJCQkJcGdwYV95eWVycm9yKHJlc3VsdCwgcGFyc2VfZXJyb3Jf bXNnX3AsIHl5c2Nhbm5lciwKKwkJCQkJCQkgIkpPSU5fT1JERVIgbXVzdCBoYXZlIGF0IGxlYXN0 IG9uZSB0YXJnZXQiKTsKKwkJfQorCXwgVE9LX1RBR19JTkRFWCAnKCcgaW5kZXhfdGFyZ2V0X2xp c3QgJyknCisJCXsKKwkJCSQkID0gcGFsbG9jMF9vYmplY3QocGdwYV9hZHZpY2VfaXRlbSk7CisJ CQlpZiAoc3RyY21wKCQxLCAiaW5kZXhfb25seV9zY2FuIikgPT0gMCkKKwkJCQkkJC0+dGFnID0g UEdQQV9UQUdfSU5ERVhfT05MWV9TQ0FOOworCQkJZWxzZSBpZiAoc3RyY21wKCQxLCAiaW5kZXhf c2NhbiIpID09IDApCisJCQkJJCQtPnRhZyA9IFBHUEFfVEFHX0lOREVYX1NDQU47CisJCQllbHNl CisJCQkJZWxvZyhFUlJPUiwgInRhZyBwYXJzaW5nIGZhaWxlZDogJXMiLCAkMSk7CisJCQkkJC0+ dGFyZ2V0cyA9ICQzOworCQl9CisJfCBUT0tfVEFHX0JJVE1BUCAnKCcgYml0bWFwX3RhcmdldF9s aXN0ICcpJworCQl7CisJCQkkJCA9IHBhbGxvYzBfb2JqZWN0KHBncGFfYWR2aWNlX2l0ZW0pOwor CQkJJCQtPnRhZyA9IFBHUEFfVEFHX0JJVE1BUF9IRUFQX1NDQU47CisJCQkkJC0+dGFyZ2V0cyA9 ICQzOworCQl9CisJfCBUT0tfVEFHX1NJTVBMRSAnKCcgc2ltcGxlX3RhcmdldF9saXN0ICcpJwor CQl7CisJCQkkJCA9IHBhbGxvYzBfb2JqZWN0KHBncGFfYWR2aWNlX2l0ZW0pOworCQkJaWYgKHN0 cmNtcCgkMSwgIm5vX2dhdGhlciIpID09IDApCisJCQkJJCQtPnRhZyA9IFBHUEFfVEFHX05PX0dB VEhFUjsKKwkJCWVsc2UgaWYgKHN0cmNtcCgkMSwgInNlcV9zY2FuIikgPT0gMCkKKwkJCQkkJC0+ dGFnID0gUEdQQV9UQUdfU0VRX1NDQU47CisJCQllbHNlIGlmIChzdHJjbXAoJDEsICJ0aWRfc2Nh biIpID09IDApCisJCQkJJCQtPnRhZyA9IFBHUEFfVEFHX1RJRF9TQ0FOOworCQkJZWxzZQorCQkJ CWVsb2coRVJST1IsICJ0YWcgcGFyc2luZyBmYWlsZWQ6ICVzIiwgJDEpOworCQkJJCQtPnRhcmdl dHMgPSAkMzsKKwkJfQorCXwgVE9LX1RBR19HRU5FUklDICcoJyBnZW5lcmljX3RhcmdldF9saXN0 ICcpJworCQl7CisJCQlib29sCWZhaWw7CisKKwkJCSQkID0gcGFsbG9jMF9vYmplY3QocGdwYV9h ZHZpY2VfaXRlbSk7CisJCQkkJC0+dGFnID0gcGdwYV9wYXJzZV9hZHZpY2VfdGFnKCQxLCAmZmFp bCk7CisJCQlpZiAoZmFpbCkKKwkJCXsKKwkJCQlwZ3BhX3l5ZXJyb3IocmVzdWx0LCBwYXJzZV9l cnJvcl9tc2dfcCwgeXlzY2FubmVyLAorCQkJCQkJCSAidW5yZWNvZ25pemVkIGFkdmljZSB0YWci KTsKKwkJCX0KKworCQkJaWYgKCQkLT50YWcgPT0gUEdQQV9UQUdfRk9SRUlHTl9KT0lOKQorCQkJ eworCQkJCWZvcmVhY2hfcHRyKHBncGFfYWR2aWNlX3RhcmdldCwgdGFyZ2V0LCAkMykKKwkJCQl7 CisJCQkJCWlmICh0YXJnZXQtPnR0eXBlID09IFBHUEFfVEFSR0VUX0lERU5USUZJRVIgfHwKKwkJ CQkJCWxpc3RfbGVuZ3RoKHRhcmdldC0+Y2hpbGRyZW4pID09IDEpCisJCQkJCQkJcGdwYV95eWVy cm9yKHJlc3VsdCwgcGFyc2VfZXJyb3JfbXNnX3AsIHl5c2Nhbm5lciwKKwkJCQkJCQkJCQkgIkZP UkVJR05fSk9JTiB0YXJnZXRzIG11c3QgY29udGFpbiBtb3JlIHRoYW4gb25lIHJlbGF0aW9uIGlk ZW50aWZpZXIiKTsKKwkJCQl9CisJCQl9CisKKwkJCSQkLT50YXJnZXRzID0gJDM7CisJCX0KKwk7 CisKK3JlbGF0aW9uX2lkZW50aWZpZXI6IGlkZW50aWZpZXIgb3B0X3JpX29jY3VycmVuY2Ugb3B0 X3BhcnRpdGlvbiBvcHRfcGxhbl9uYW1lCisJCXsKKwkJCSQkID0gcGFsbG9jMF9vYmplY3QocGdw YV9hZHZpY2VfdGFyZ2V0KTsKKwkJCSQkLT50dHlwZSA9IFBHUEFfVEFSR0VUX0lERU5USUZJRVI7 CisJCQkkJC0+cmlkLmFsaWFzX25hbWUgPSAkMTsKKwkJCSQkLT5yaWQub2NjdXJyZW5jZSA9ICQy OworCQkJaWYgKGxpc3RfbGVuZ3RoKCQzKSA9PSAyKQorCQkJeworCQkJCSQkLT5yaWQucGFydG5z cCA9IGxpbml0aWFsKCQzKTsKKwkJCQkkJC0+cmlkLnBhcnRyZWwgPSBsc2Vjb25kKCQzKTsKKwkJ CX0KKwkJCWVsc2UgaWYgKCQzICE9IE5JTCkKKwkJCQkkJC0+cmlkLnBhcnRyZWwgPSBsaW5pdGlh bCgkMyk7CisJCQkkJC0+cmlkLnBsYW5fbmFtZSA9ICQ0OworCQl9CisJOworCitpbmRleF9uYW1l OiBpZGVudGlmaWVyCisJCXsKKwkJCSQkID0gcGFsbG9jMF9vYmplY3QocGdwYV9pbmRleF90YXJn ZXQpOworCQkJJCQtPml0eXBlID0gUEdQQV9JTkRFWF9OQU1FOworCQkJJCQtPmluZG5hbWUgPSAk MTsKKwkJfQorCXwgaWRlbnRpZmllciAnLicgaWRlbnRpZmllcgorCQl7CisJCQkkJCA9IHBhbGxv YzBfb2JqZWN0KHBncGFfaW5kZXhfdGFyZ2V0KTsKKwkJCSQkLT5pdHlwZSA9IFBHUEFfSU5ERVhf TkFNRTsKKwkJCSQkLT5pbmRuYW1lc3BhY2UgPSAkMTsKKwkJCSQkLT5pbmRuYW1lID0gJDM7CisJ CX0KKwk7CisKK29wdF9yaV9vY2N1cnJlbmNlOgorCScjJyBUT0tfSU5URUdFUgorCQl7CisJCQlp ZiAoJDIgPD0gMCkKKwkJCQlwZ3BhX3l5ZXJyb3IocmVzdWx0LCBwYXJzZV9lcnJvcl9tc2dfcCwg eXlzY2FubmVyLAorCQkJCQkJCSAib25seSBwb3NpdGl2ZSBvY2N1cnJlbmNlIG51bWJlcnMgYXJl IHBlcm1pdHRlZCIpOworCQkJJCQgPSAkMjsKKwkJfQorCXwKKwkJeworCQkJLyogVGhlIGRlZmF1 bHQgb2NjdXJyZW5jZSBudW1iZXIgaXMgMS4gKi8KKwkJCSQkID0gMTsKKwkJfQorCTsKKworaWRl bnRpZmllcjogVE9LX0lERU5UCisJfCBUT0tfVEFHX0pPSU5fT1JERVIKKwl8IFRPS19UQUdfSU5E RVgKKwl8IFRPS19UQUdfQklUTUFQCisJfCBUT0tfVEFHX1NJTVBMRQorCXwgVE9LX1RBR19HRU5F UklDCisJOworCisvKgorICogV2hlbiBnZW5lcmF0aW5nIGFkdmljZSwgd2UgYWx3YXlzIHNjaGVt YS1xdWFsaWZ5IHRoZSBwYXJ0aXRpb24gbmFtZSwgYnV0CisgKiB3aGVuIHBhcnNpbmcgYWR2aWNl LCB3ZSBhY2NlcHQgYSBzcGVjaWZpY2F0aW9uIHRoYXQgbGFja3Mgb25lLgorICovCitvcHRfcGFy dGl0aW9uOgorCScvJyBUT0tfSURFTlQgJy4nIFRPS19JREVOVAorCQl7ICQkID0gbGlzdF9tYWtl MigkMiwgJDQpOyB9CisJfCAnLycgVE9LX0lERU5UCisJCXsgJCQgPSBsaXN0X21ha2UxKCQyKTsg fQorCXwKKwkJeyAkJCA9IE5JTDsgfQorCTsKKworb3B0X3BsYW5fbmFtZToKKwknQCcgVE9LX0lE RU5UCisJCXsgJCQgPSAkMjsgfQorCXwKKwkJeyAkJCA9IE5VTEw7IH0KKwk7CisKK2JpdG1hcF90 YXJnZXRfbGlzdDogYml0bWFwX3RhcmdldF9saXN0IHJlbGF0aW9uX2lkZW50aWZpZXIgYml0bWFw X3RhcmdldF9pdGVtCisJCXsKKwkJCSQyLT5pdGFyZ2V0ID0gJDM7CisJCQkkJCA9IGxhcHBlbmQo JDEsICQyKTsKKwkJfQorCXwKKwkJeyAkJCA9IE5JTDsgfQorCTsKKworYml0bWFwX3RhcmdldF9p dGVtOiBpbmRleF9uYW1lCisJCXsgJCQgPSAkMTsgfQorCXwgVE9LX09SICcoJyBiaXRtYXBfc3Vi bGlzdCAnKScKKwkJeworCQkJJCQgPSBwYWxsb2MwX29iamVjdChwZ3BhX2luZGV4X3RhcmdldCk7 CisJCQkkJC0+aXR5cGUgPSBQR1BBX0lOREVYX09SOworCQkJJCQtPmNoaWxkcmVuID0gJDM7CisJ CX0KKwl8IFRPS19BTkQgJygnIGJpdG1hcF9zdWJsaXN0ICcpJworCQl7CisJCQkkJCA9IHBhbGxv YzBfb2JqZWN0KHBncGFfaW5kZXhfdGFyZ2V0KTsKKwkJCSQkLT5pdHlwZSA9IFBHUEFfSU5ERVhf QU5EOworCQkJJCQtPmNoaWxkcmVuID0gJDM7CisJCX0KKwk7CisKK2JpdG1hcF9zdWJsaXN0OiBi aXRtYXBfc3VibGlzdCBiaXRtYXBfdGFyZ2V0X2l0ZW0KKwkJeyAkJCA9IGxhcHBlbmQoJDEsICQy KTsgfQorCXwgYml0bWFwX3RhcmdldF9pdGVtCisJCXsgJCQgPSBsaXN0X21ha2UxKCQxKTsgfQor CTsKKworZ2VuZXJpY190YXJnZXRfbGlzdDogZ2VuZXJpY190YXJnZXRfbGlzdCByZWxhdGlvbl9p ZGVudGlmaWVyCisJCXsgJCQgPSBsYXBwZW5kKCQxLCAkMik7IH0KKwl8IGdlbmVyaWNfdGFyZ2V0 X2xpc3QgZ2VuZXJpY19zdWJsaXN0CisJCXsgJCQgPSBsYXBwZW5kKCQxLCAkMik7IH0KKwl8CisJ CXsgJCQgPSBOSUw7IH0KKwk7CisKK2dlbmVyaWNfc3VibGlzdDogJygnIGdlbmVyaWNfdGFyZ2V0 X2xpc3QgJyknCisJCXsKKwkJCSQkID0gcGFsbG9jMF9vYmplY3QocGdwYV9hZHZpY2VfdGFyZ2V0 KTsKKwkJCSQkLT50dHlwZSA9IFBHUEFfVEFSR0VUX09SREVSRURfTElTVDsKKwkJCSQkLT5jaGls ZHJlbiA9ICQyOworCQl9CisJOworCitpbmRleF90YXJnZXRfbGlzdDoKKwkgIGluZGV4X3Rhcmdl dF9saXN0IHJlbGF0aW9uX2lkZW50aWZpZXIgaW5kZXhfbmFtZQorCQl7CisJCQkkMi0+aXRhcmdl dCA9ICQzOworCQkJJCQgPSBsYXBwZW5kKCQxLCAkMik7CisJCX0KKwl8CisJCXsgJCQgPSBOSUw7 IH0KKwk7CisKK2pvaW5fb3JkZXJfdGFyZ2V0X2xpc3Q6IGpvaW5fb3JkZXJfdGFyZ2V0X2xpc3Qg cmVsYXRpb25faWRlbnRpZmllcgorCQl7ICQkID0gbGFwcGVuZCgkMSwgJDIpOyB9CisJfCBqb2lu X29yZGVyX3RhcmdldF9saXN0IGpvaW5fb3JkZXJfc3VibGlzdAorCQl7ICQkID0gbGFwcGVuZCgk MSwgJDIpOyB9CisJfAorCQl7ICQkID0gTklMOyB9CisJOworCitqb2luX29yZGVyX3N1Ymxpc3Q6 CisJJygnIGpvaW5fb3JkZXJfdGFyZ2V0X2xpc3QgJyknCisJCXsKKwkJCSQkID0gcGFsbG9jMF9v YmplY3QocGdwYV9hZHZpY2VfdGFyZ2V0KTsKKwkJCSQkLT50dHlwZSA9IFBHUEFfVEFSR0VUX09S REVSRURfTElTVDsKKwkJCSQkLT5jaGlsZHJlbiA9ICQyOworCQl9CisJfCAneycgc2ltcGxlX3Rh cmdldF9saXN0ICd9JworCQl7CisJCQkkJCA9IHBhbGxvYzBfb2JqZWN0KHBncGFfYWR2aWNlX3Rh cmdldCk7CisJCQkkJC0+dHR5cGUgPSBQR1BBX1RBUkdFVF9VTk9SREVSRURfTElTVDsKKwkJCSQk LT5jaGlsZHJlbiA9ICQyOworCQl9CisJOworCitzaW1wbGVfdGFyZ2V0X2xpc3Q6IHNpbXBsZV90 YXJnZXRfbGlzdCByZWxhdGlvbl9pZGVudGlmaWVyCisJCXsgJCQgPSBsYXBwZW5kKCQxLCAkMik7 IH0KKwl8CisJCXsgJCQgPSBOSUw7IH0KKwk7CisKKyUlCisKKy8qCisgKiBQYXJzZSBhbiBhZHZp Y2Vfc3RyaW5nIGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZyBsaXN0IG9mIHBncGFfYWR2aWNlX2l0 ZW0KKyAqIG9iamVjdHMuIElmIGEgcGFyc2UgZXJyb3Igb2NjdXJzLCBpbnN0ZWFkIHJldHVybiBO VUxMLgorICoKKyAqIElmIHRoZSByZXR1cm4gdmFsdWUgaXMgTlVMTCwgKmVycm9yX3Agd2lsbCBi ZSBzZXQgdG8gdGhlIGVycm9yIG1lc3NhZ2U7CisgKiBvdGhlcndpc2UsICplcnJvcl9wIHdpbGwg YmUgc2V0IHRvIE5VTEwuCisgKi8KK0xpc3QgKgorcGdwYV9wYXJzZShjb25zdCBjaGFyICphZHZp Y2Vfc3RyaW5nLCBjaGFyICoqZXJyb3JfcCkKK3sKKwl5eXNjYW5fdAlzY2FubmVyOworCUxpc3QJ ICAgKnJlc3VsdDsKKwljaGFyCSAgICplcnJvciA9IE5VTEw7CisKKwlwZ3BhX3NjYW5uZXJfaW5p dChhZHZpY2Vfc3RyaW5nLCAmc2Nhbm5lcik7CisJcGdwYV95eXBhcnNlKCZyZXN1bHQsICZlcnJv ciwgc2Nhbm5lcik7CisJcGdwYV9zY2FubmVyX2ZpbmlzaChzY2FubmVyKTsKKworCWlmIChlcnJv ciAhPSBOVUxMKQorCXsKKwkJKmVycm9yX3AgPSBlcnJvcjsKKwkJcmV0dXJuIE5VTEw7CisJfQor CisJKmVycm9yX3AgPSBOVUxMOworCXJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9jb250 cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5jIGIvY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9wZ3BhX3BsYW5uZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u Y2I2ODBjMDhiNWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3Bn cGFfcGxhbm5lci5jCkBAIC0wLDAgKzEsMTg3NSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgor ICogcGdwYV9wbGFubmVyLmMKKyAqCSAgcGxhbm5lciBob29rcworICoKKyAqIENvcHlyaWdodCAo YykgMjAxNi0yMDI0LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAq CSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BsYW5uZXIuYworICoKKyAqLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgInBnX3BsYW5f YWR2aWNlLmgiCisjaW5jbHVkZSAicGdwYV9jb2xsZWN0b3IuaCIKKyNpbmNsdWRlICJwZ3BhX2lk ZW50aWZpZXIuaCIKKyNpbmNsdWRlICJwZ3BhX291dHB1dC5oIgorI2luY2x1ZGUgInBncGFfcGxh bm5lci5oIgorI2luY2x1ZGUgInBncGFfdHJvdmUuaCIKKyNpbmNsdWRlICJwZ3BhX3dhbGtlci5o IgorCisjaW5jbHVkZSAiY29tbW9uL2hhc2hmbl91bnN0YWJsZS5oIgorI2luY2x1ZGUgIm5vZGVz L21ha2VmdW5jcy5oIgorI2luY2x1ZGUgIm9wdGltaXplci9leHRlbmRwbGFuLmgiCisjaW5jbHVk ZSAib3B0aW1pemVyL3BhdGhub2RlLmgiCisjaW5jbHVkZSAib3B0aW1pemVyL3BhdGhzLmgiCisj aW5jbHVkZSAib3B0aW1pemVyL3BsYW5jYXQuaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvcGxhbm5l ci5oIgorI2luY2x1ZGUgInBhcnNlci9wYXJzZXRyZWUuaCIKKyNpbmNsdWRlICJ1dGlscy9sc3lz Y2FjaGUuaCIKKworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKworLyoKKyAqIFdoZW4gYXNz ZXJ0aW9ucyBhcmUgZW5hYmxlZCwgd2UgdHJ5IGdlbmVyYXRpbmcgcmVsYXRpb24gaWRlbnRpZmll cnMgZHVyaW5nCisgKiBwbGFubmluZywgc2F2aW5nIHRoZW0gaW4gYSBoYXNoIHRhYmxlLCBhbmQg dGhlbiBjcm9zcy1jaGVja2luZyB0aGVtIGFnYWluc3QKKyAqIHRoZSBvbmVzIGdlbmVyYXRlZCBh ZnRlciBwbGFubmluZyBpcyBjb21wbGV0ZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9yaV9j aGVja2VyX2tleQoreworCWNoYXIJICAgKnBsYW5fbmFtZTsKKwlJbmRleAkJcnRpOworfSBwZ3Bh X3JpX2NoZWNrZXJfa2V5OworCit0eXBlZGVmIHN0cnVjdCBwZ3BhX3JpX2NoZWNrZXIKK3sKKwlw Z3BhX3JpX2NoZWNrZXJfa2V5IGtleTsKKwl1aW50MzIJCXN0YXR1czsKKwljb25zdCBjaGFyICpy aWRfc3RyaW5nOworfSBwZ3BhX3JpX2NoZWNrZXI7CisKK3N0YXRpYyB1aW50MzIgcGdwYV9yaV9j aGVja2VyX2hhc2hfa2V5KHBncGFfcmlfY2hlY2tlcl9rZXkga2V5KTsKKworc3RhdGljIGlubGlu ZSBib29sCitwZ3BhX3JpX2NoZWNrZXJfY29tcGFyZV9rZXkocGdwYV9yaV9jaGVja2VyX2tleSBh LCBwZ3BhX3JpX2NoZWNrZXJfa2V5IGIpCit7CisJaWYgKGEucnRpICE9IGIucnRpKQorCQlyZXR1 cm4gZmFsc2U7CisJaWYgKGEucGxhbl9uYW1lID09IE5VTEwpCisJCXJldHVybiAoYi5wbGFuX25h bWUgPT0gTlVMTCk7CisJaWYgKGIucGxhbl9uYW1lID09IE5VTEwpCisJCXJldHVybiBmYWxzZTsK KwlyZXR1cm4gc3RyY21wKGEucGxhbl9uYW1lLCBiLnBsYW5fbmFtZSkgPT0gMDsKK30KKworI2Rl ZmluZSBTSF9QUkVGSVgJCQlwZ3BhX3JpX2NoZWNrCisjZGVmaW5lIFNIX0VMRU1FTlRfVFlQRQkJ cGdwYV9yaV9jaGVja2VyCisjZGVmaW5lIFNIX0tFWV9UWVBFCQkJcGdwYV9yaV9jaGVja2VyX2tl eQorI2RlZmluZSBTSF9LRVkJCQkJa2V5CisjZGVmaW5lIFNIX0hBU0hfS0VZKHRiLCBrZXkpCXBn cGFfcmlfY2hlY2tlcl9oYXNoX2tleShrZXkpCisjZGVmaW5lCVNIX0VRVUFMKHRiLCBhLCBiKQlw Z3BhX3JpX2NoZWNrZXJfY29tcGFyZV9rZXkoYSwgYikKKyNkZWZpbmUgU0hfU0NPUEUJCQlzdGF0 aWMgaW5saW5lCisjZGVmaW5lIFNIX0RFQ0xBUkUKKyNkZWZpbmUgU0hfREVGSU5FCisjaW5jbHVk ZSAibGliL3NpbXBsZWhhc2guaCIKKworI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IHBncGFfcGxh bm5lcl9zdGF0ZQoreworCUV4cGxhaW5TdGF0ZSAqZXhwbGFpbl9zdGF0ZTsKKwlib29sCQlnZW5l cmF0ZV9hZHZpY2Vfc3RyaW5nOworCWJvb2wJCXdhbGtfcGxhbl90cmVlOworCXBncGFfdHJvdmUg KnRyb3ZlOworCU1lbW9yeUNvbnRleHQgdHJvdmVfY3h0OworCUxpc3QJICAgKnNqX3VuaXF1ZV9y ZWxzOworCisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCXBncGFfcmlfY2hlY2tfaGFzaCAq cmlfY2hlY2tfaGFzaDsKKyNlbmRpZgorfSBwZ3BhX3BsYW5uZXJfc3RhdGU7CisKK3R5cGVkZWYg c3RydWN0IHBncGFfam9pbl9zdGF0ZQoreworCS8qIE1vc3QtcmVjZW50bHktY29uc2lkZXJlZCBv dXRlciByZWwuICovCisJUmVsT3B0SW5mbyAqb3V0ZXJyZWw7CisKKwkvKiBNb3N0LXJlY2VudGx5 LWNvbnNpZGVyZWQgaW5uZXIgcmVsLiAqLworCVJlbE9wdEluZm8gKmlubmVycmVsOworCisJLyoK KwkgKiBBcnJheSBvZiByZWxhdGlvbiBpZGVudGlmaWVycyBmb3IgYWxsIG1lbWJlcnMgb2YgdGhp cyBqb2lucmVsLCB3aXRoCisJICogb3V0ZXJyZWwgaWRlbmlmaWVycyBiZWZvcmUgaW5uZXJyZWwg aWRlbnRpZmllcnMuCisJICovCisJcGdwYV9pZGVudGlmaWVyICpyaWRzOworCisJLyogTnVtYmVy IG9mIG91dGVyIHJlbCBpZGVudGlmaWVycy4gKi8KKwlpbnQJCQlvdXRlcl9jb3VudDsKKworCS8q IE51bWJlciBvZiBpbm5lciByZWwgaWRlbnRpZmllcnMuICovCisJaW50CQkJaW5uZXJfY291bnQ7 CisKKwkvKgorCSAqIFRyb3ZlIGxvb2t1cCByZXN1bHRzLgorCSAqCisJICogam9pbl9lbnRyaWVz IGFuZCByZWxfZW50cmllcyBhcmUgYXJyYXlzIG9mIGVudHJpZXMsIGFuZCBqb2luX2luZGV4ZXMK KwkgKiBhbmQgcmVsX2luZGV4ZXMgYXJlIHRoZSBpbnRlZ2VyIG9mZnNldHMgd2l0aGluIHRob3Nl IGFycmF5cyBvZiBlbnRyaWVzCisJICogcG90ZW50aWFsbHkgcmVsZXZhbnQgdG8gdXMuIFRoZSAi am9pbiIgZmllbGRzIGNvcnJlc3BvbmQgdG8gYSBsb29rdXAKKwkgKiB1c2luZyBQR1BBX1RST1ZF X0xPT0tVUF9KT0lOIGFuZCB0aGUgInJlbCIgZmllbGRzIHRvIGEgbG9va3VwIHVzaW5nCisJICog UEdQQV9UUk9WRV9MT09LVVBfUkVMLgorCSAqLworCXBncGFfdHJvdmVfZW50cnkgKmpvaW5fZW50 cmllczsKKwlCaXRtYXBzZXQgICpqb2luX2luZGV4ZXM7CisJcGdwYV90cm92ZV9lbnRyeSAqcmVs X2VudHJpZXM7CisJQml0bWFwc2V0ICAqcmVsX2luZGV4ZXM7Cit9IHBncGFfam9pbl9zdGF0ZTsK KworLyogU2F2ZWQgaG9vayB2YWx1ZXMgKi8KK3N0YXRpYyBnZXRfcmVsYXRpb25faW5mb19ob29r X3R5cGUgcHJldl9nZXRfcmVsYXRpb25faW5mbyA9IE5VTEw7CitzdGF0aWMgam9pbl9wYXRoX3Nl dHVwX2hvb2tfdHlwZSBwcmV2X2pvaW5fcGF0aF9zZXR1cCA9IE5VTEw7CitzdGF0aWMgam9pbnJl bF9zZXR1cF9ob29rX3R5cGUgcHJldl9qb2lucmVsX3NldHVwID0gTlVMTDsKK3N0YXRpYyBwbGFu bmVyX3NldHVwX2hvb2tfdHlwZSBwcmV2X3BsYW5uZXJfc2V0dXAgPSBOVUxMOworc3RhdGljIHBs YW5uZXJfc2h1dGRvd25faG9va190eXBlIHByZXZfcGxhbm5lcl9zaHV0ZG93biA9IE5VTEw7CisK Ky8qIE90aGVyIGdsb2JhbCB2YXJpYWJlcyAqLworc3RhdGljIGludAlwbGFubmVyX2V4dGVuc2lv bl9pZCA9IC0xOworCisvKiBGdW5jdGlvbiBwcm90b3R5cGVzLiAqLworc3RhdGljIHZvaWQgcGdw YV9nZXRfcmVsYXRpb25faW5mbyhQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJICAgT2lkIHJl bGF0aW9uT2JqZWN0SWQsCisJCQkJCQkJCSAgIGJvb2wgaW5ocGFyZW50LAorCQkJCQkJCQkgICBS ZWxPcHRJbmZvICpyZWwpOworc3RhdGljIHZvaWQgcGdwYV9qb2lucmVsX3NldHVwKFBsYW5uZXJJ bmZvICpyb290LAorCQkJCQkJCSAgIFJlbE9wdEluZm8gKmpvaW5yZWwsCisJCQkJCQkJICAgUmVs T3B0SW5mbyAqb3V0ZXJyZWwsCisJCQkJCQkJICAgUmVsT3B0SW5mbyAqaW5uZXJyZWwsCisJCQkJ CQkJICAgU3BlY2lhbEpvaW5JbmZvICpzamluZm8sCisJCQkJCQkJICAgTGlzdCAqcmVzdHJpY3Rs aXN0KTsKK3N0YXRpYyB2b2lkIHBncGFfam9pbl9wYXRoX3NldHVwKFBsYW5uZXJJbmZvICpyb290 LAorCQkJCQkJCQkgUmVsT3B0SW5mbyAqam9pbnJlbCwKKwkJCQkJCQkJIFJlbE9wdEluZm8gKm91 dGVycmVsLAorCQkJCQkJCQkgUmVsT3B0SW5mbyAqaW5uZXJyZWwsCisJCQkJCQkJCSBKb2luVHlw ZSBqb2ludHlwZSwKKwkJCQkJCQkJIEpvaW5QYXRoRXh0cmFEYXRhICpleHRyYSk7CitzdGF0aWMg dm9pZCBwZ3BhX3BsYW5uZXJfc2V0dXAoUGxhbm5lckdsb2JhbCAqZ2xvYiwgUXVlcnkgKnBhcnNl LAorCQkJCQkJCSAgIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywKKwkJCQkJCQkgICBkb3VibGUg KnR1cGxlX2ZyYWN0aW9uLAorCQkJCQkJCSAgIEV4cGxhaW5TdGF0ZSAqZXMpOworc3RhdGljIHZv aWQgcGdwYV9wbGFubmVyX3NodXRkb3duKFBsYW5uZXJHbG9iYWwgKmdsb2IsIFF1ZXJ5ICpwYXJz ZSwKKwkJCQkJCQkJICBjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcsIFBsYW5uZWRTdG10ICpwc3Rt dCk7CitzdGF0aWMgdm9pZCBwZ3BhX3BsYW5uZXJfYXBwbHlfam9pbnJlbF9hZHZpY2UodWludDY0 ICpwZ3NfbWFza19wLAorCQkJCQkJCQkJCQkgIGNoYXIgKnBsYW5fbmFtZSwKKwkJCQkJCQkJCQkJ ICBwZ3BhX2pvaW5fc3RhdGUgKnBqcyk7CitzdGF0aWMgdm9pZCBwZ3BhX3BsYW5uZXJfYXBwbHlf am9pbl9wYXRoX2FkdmljZShKb2luVHlwZSBqb2ludHlwZSwKKwkJCQkJCQkJCQkJCXVpbnQ2NCAq cGdzX21hc2tfcCwKKwkJCQkJCQkJCQkJCWNoYXIgKnBsYW5fbmFtZSwKKwkJCQkJCQkJCQkJCXBn cGFfam9pbl9zdGF0ZSAqcGpzKTsKK3N0YXRpYyB2b2lkIHBncGFfcGxhbm5lcl9hcHBseV9zY2Fu X2FkdmljZShSZWxPcHRJbmZvICpyZWwsCisJCQkJCQkJCQkJICAgcGdwYV90cm92ZV9lbnRyeSAq c2Nhbl9lbnRyaWVzLAorCQkJCQkJCQkJCSAgIEJpdG1hcHNldCAqc2Nhbl9pbmRleGVzLAorCQkJ CQkJCQkJCSAgIHBncGFfdHJvdmVfZW50cnkgKnJlbF9lbnRyaWVzLAorCQkJCQkJCQkJCSAgIEJp dG1hcHNldCAqcmVsX2luZGV4ZXMpOworc3RhdGljIHVpbnQ2NCBwZ3BhX2pvaW5fc3RyYXRlZ3lf bWFza19mcm9tX2FkdmljZV90YWcocGdwYV9hZHZpY2VfdGFnX3R5cGUgdGFnKTsKK3N0YXRpYyBi b29sIHBncGFfam9pbl9vcmRlcl9wZXJtaXRzX2pvaW4oaW50IG91dGVyX2NvdW50LCBpbnQgaW5u ZXJfY291bnQsCisJCQkJCQkJCQkJIHBncGFfaWRlbnRpZmllciAqcmlkcywKKwkJCQkJCQkJCQkg cGdwYV90cm92ZV9lbnRyeSAqZW50cnkpOworc3RhdGljIGJvb2wgcGdwYV9qb2luX21ldGhvZF9w ZXJtaXRzX2pvaW4oaW50IG91dGVyX2NvdW50LCBpbnQgaW5uZXJfY291bnQsCisJCQkJCQkJCQkJ ICBwZ3BhX2lkZW50aWZpZXIgKnJpZHMsCisJCQkJCQkJCQkJICBwZ3BhX3Ryb3ZlX2VudHJ5ICpl bnRyeSwKKwkJCQkJCQkJCQkgIGJvb2wgKnJlc3RyaWN0X21ldGhvZCk7CitzdGF0aWMgYm9vbCBw Z3BhX29wYXF1ZV9qb2luX3Blcm1pdHNfam9pbihpbnQgb3V0ZXJfY291bnQsIGludCBpbm5lcl9j b3VudCwKKwkJCQkJCQkJCQkgIHBncGFfaWRlbnRpZmllciAqcmlkcywKKwkJCQkJCQkJCQkgIHBn cGFfdHJvdmVfZW50cnkgKmVudHJ5LAorCQkJCQkJCQkJCSAgYm9vbCAqcmVzdHJpY3RfbWV0aG9k KTsKKworc3RhdGljIExpc3QgKnBncGFfcGxhbm5lcl9hcHBlbmRfZmVlZGJhY2soTGlzdCAqbGlz dCwgcGdwYV90cm92ZSAqdHJvdmUsCisJCQkJCQkJCQkJICBwZ3BhX3Ryb3ZlX2xvb2t1cF90eXBl IHR5cGUsCisJCQkJCQkJCQkJICBwZ3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJzLAorCQkJ CQkJCQkJCSAgcGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIpOworCitzdGF0aWMgaW5s aW5lIHZvaWQgcGdwYV9yaV9jaGVja2VyX3NhdmUocGdwYV9wbGFubmVyX3N0YXRlICpwcHMsCisJ CQkJCQkJCQkJUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJCQkJUmVsT3B0SW5mbyAqcmVsKTsK K3N0YXRpYyB2b2lkIHBncGFfcmlfY2hlY2tlcl92YWxpZGF0ZShwZ3BhX3BsYW5uZXJfc3RhdGUg KnBwcywKKwkJCQkJCQkJCSBQbGFubmVkU3RtdCAqcHN0bXQpOworCitzdGF0aWMgY2hhciAqcGdw YV9ibXNfdG9fY3N0cmluZyhCaXRtYXBzZXQgKmJtcyk7CisKKy8qCisgKiBJbnN0YWxsIHBsYW5u ZXItcmVsYXRlZCBob29rcy4KKyAqLwordm9pZAorcGdwYV9wbGFubmVyX2luc3RhbGxfaG9va3Mo dm9pZCkKK3sKKwlwbGFubmVyX2V4dGVuc2lvbl9pZCA9IEdldFBsYW5uZXJFeHRlbnNpb25JZCgi cGdfcGxhbl9hZHZpY2UiKTsKKwlwcmV2X2dldF9yZWxhdGlvbl9pbmZvID0gZ2V0X3JlbGF0aW9u X2luZm9faG9vazsKKwlnZXRfcmVsYXRpb25faW5mb19ob29rID0gcGdwYV9nZXRfcmVsYXRpb25f aW5mbzsKKwlwcmV2X2pvaW5yZWxfc2V0dXAgPSBqb2lucmVsX3NldHVwX2hvb2s7CisJam9pbnJl bF9zZXR1cF9ob29rID0gcGdwYV9qb2lucmVsX3NldHVwOworCXByZXZfam9pbl9wYXRoX3NldHVw ID0gam9pbl9wYXRoX3NldHVwX2hvb2s7CisJam9pbl9wYXRoX3NldHVwX2hvb2sgPSBwZ3BhX2pv aW5fcGF0aF9zZXR1cDsKKwlwcmV2X3BsYW5uZXJfc2V0dXAgPSBwbGFubmVyX3NldHVwX2hvb2s7 CisJcGxhbm5lcl9zZXR1cF9ob29rID0gcGdwYV9wbGFubmVyX3NldHVwOworCXByZXZfcGxhbm5l cl9zaHV0ZG93biA9IHBsYW5uZXJfc2h1dGRvd25faG9vazsKKwlwbGFubmVyX3NodXRkb3duX2hv b2sgPSBwZ3BhX3BsYW5uZXJfc2h1dGRvd247Cit9CisKKy8qCisgKiBIb29rIGZ1bmN0aW9uIGZv ciBnZXRfcmVsYXRpb25faW5mbygpLgorICoKKyAqIFdlIGNhbiBhcHBseSBzY2FuIGFkdmljZSBh dCB0aGlzIG9waW50LCBhbmQgd2UgYWxzbyB1c2VlIHRoaXMgYXMgYW4KKyAqIG9wcG9ydHVuaXR5 IHRvIGRvIHJhbmdlLXRhYmxlIGlkZW50aWZpZXIgY3Jvc3MtY2hlY2tpbmcgaW4gYXNzZXJ0LWVu YWJsZWQKKyAqIGJ1aWxkcy4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfZ2V0X3JlbGF0aW9uX2lu Zm8oUGxhbm5lckluZm8gKnJvb3QsIE9pZCByZWxhdGlvbk9iamVjdElkLAorCQkJCQkgICBib29s IGluaHBhcmVudCwgUmVsT3B0SW5mbyAqcmVsKQoreworCXBncGFfcGxhbm5lcl9zdGF0ZSAqcHBz OworCisJLyogRmV0Y2ggb3VyIHByaXZhdGUgc3RhdGUsIHNldCB1cCBieSBwZ3BhX3BsYW5uZXJf c2V0dXAoKS4gKi8KKwlwcHMgPSBHZXRQbGFubmVyR2xvYmFsRXh0ZW5zaW9uU3RhdGUocm9vdC0+ Z2xvYiwgcGxhbm5lcl9leHRlbnNpb25faWQpOworCisJLyogU2F2ZSBkZXRhaWxzIG5lZWRlZCBm b3IgcmFuZ2UgdGFibGUgaWRlbnRpZmllciBjcm9zcy1jaGVja2luZy4gKi8KKwlpZiAocHBzICE9 IE5VTEwpCisJCXBncGFfcmlfY2hlY2tlcl9zYXZlKHBwcywgcm9vdCwgcmVsKTsKKworCS8qIElm IHF1ZXJ5IGFkdmljZSB3YXMgcHJvdmlkZWQsIHNlYXJjaCBmb3IgcmVsZXZhbnQgZW50cmllcy4g Ki8KKwlpZiAocHBzICE9IE5VTEwgJiYgcHBzLT50cm92ZSAhPSBOVUxMKQorCXsKKwkJcGdwYV9p ZGVudGlmaWVyIHJpZDsKKwkJcGdwYV90cm92ZV9yZXN1bHQgdHJlc3VsdF9zY2FuOworCQlwZ3Bh X3Ryb3ZlX3Jlc3VsdCB0cmVzdWx0X3JlbDsKKworCQkvKiBTZWFyY2ggZm9yIHNjYW4gYWR2aWNl IGFuZCBnZW5lcmFsIHJlbCBhZHZpY2UuICovCisJCXBncGFfY29tcHV0ZV9pZGVudGlmaWVyX2J5 X3J0aShyb290LCByZWwtPnJlbGlkLCAmcmlkKTsKKwkJcGdwYV90cm92ZV9sb29rdXAocHBzLT50 cm92ZSwgUEdQQV9UUk9WRV9MT09LVVBfU0NBTiwgMSwgJnJpZCwKKwkJCQkJCSAgJnRyZXN1bHRf c2Nhbik7CisJCXBncGFfdHJvdmVfbG9va3VwKHBwcy0+dHJvdmUsIFBHUEFfVFJPVkVfTE9PS1VQ X1JFTCwgMSwgJnJpZCwKKwkJCQkJCSAgJnRyZXN1bHRfcmVsKTsKKworCQkvKiBJZiByZWxldmFu dCBlbnRyaWVzIHdlcmUgZm91bmQsIGFwcGx5IHRoZW0uICovCisJCWlmICh0cmVzdWx0X3NjYW4u aW5kZXhlcyAhPSBOVUxMIHx8IHRyZXN1bHRfcmVsLmluZGV4ZXMgIT0gTlVMTCkKKwkJeworCQkJ dWludDY0CQlvcmlnaW5hbF9tYXNrID0gcmVsLT5wZ3NfbWFzazsKKworCQkJcGdwYV9wbGFubmVy X2FwcGx5X3NjYW5fYWR2aWNlKHJlbCwKKwkJCQkJCQkJCQkgICB0cmVzdWx0X3NjYW4uZW50cmll cywKKwkJCQkJCQkJCQkgICB0cmVzdWx0X3NjYW4uaW5kZXhlcywKKwkJCQkJCQkJCQkgICB0cmVz dWx0X3JlbC5lbnRyaWVzLAorCQkJCQkJCQkJCSAgIHRyZXN1bHRfcmVsLmluZGV4ZXMpOworCisJ CQkvKiBFbWl0IGRlYnVnZ2luZyBtZXNzYWdlLCBpZiBlbmFibGVkLiAqLworCQkJaWYgKHBnX3Bs YW5fYWR2aWNlX3RyYWNlX21hc2sgJiYgb3JpZ2luYWxfbWFzayAhPSByZWwtPnBnc19tYXNrKQor CQkJCWVyZXBvcnQoV0FSTklORywKKwkJCQkJCShlcnJtc2coInN0cmF0ZWd5IG1hc2sgZm9yIFJU SSAldSBjaGFuZ2VkIGZyb20gMHglIiBQUkl4NjQgIiB0byAweCUiIFBSSXg2NCwKKwkJCQkJCQkJ cmVsLT5yZWxpZCwgb3JpZ2luYWxfbWFzaywgcmVsLT5wZ3NfbWFzaykpKTsKKwkJfQorCX0KKwor CS8qIFBhc3MgY2FsbCB0byBwcmV2aW91cyBob29rLiAqLworCWlmIChwcmV2X2dldF9yZWxhdGlv bl9pbmZvKQorCQkoKnByZXZfZ2V0X3JlbGF0aW9uX2luZm8pIChyb290LCByZWxhdGlvbk9iamVj dElkLCBpbmhwYXJlbnQsIHJlbCk7Cit9CisKKy8qCisgKiBTZWFyY2ggZm9yIGFkdmljZSBwZXJ0 YWluaW5nIHRvIGEgcHJvcG9zZWQgam9pbi4KKyAqLworc3RhdGljIHBncGFfam9pbl9zdGF0ZSAq CitwZ3BhX2dldF9qb2luX3N0YXRlKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpqb2lu cmVsLAorCQkJCQlSZWxPcHRJbmZvICpvdXRlcnJlbCwgUmVsT3B0SW5mbyAqaW5uZXJyZWwpCit7 CisJcGdwYV9wbGFubmVyX3N0YXRlICpwcHM7CisJcGdwYV9qb2luX3N0YXRlICpwanM7CisJYm9v bAkJbmV3X3BqcyA9IGZhbHNlOworCisJLyogRmV0Y2ggb3VyIHByaXZhdGUgc3RhdGUsIHNldCB1 cCBieSBwZ3BhX3BsYW5uZXJfc2V0dXAoKS4gKi8KKwlwcHMgPSBHZXRQbGFubmVyR2xvYmFsRXh0 ZW5zaW9uU3RhdGUocm9vdC0+Z2xvYiwgcGxhbm5lcl9leHRlbnNpb25faWQpOworCWlmIChwcHMg PT0gTlVMTCB8fCBwcHMtPnRyb3ZlID09IE5VTEwpCisJeworCQkvKiBObyBhZHZpY2UgYXBwbGll cyB0byB0aGlzIHF1ZXJ5LCBoZW5jZSBub25lIHRvIHRoaXMgam9pbnJlbC4gKi8KKwkJcmV0dXJu IE5VTEw7CisJfQorCisJLyoKKwkgKiBTZWUgd2hldGhlciB3ZSd2ZSBwcmV2aW91c2x5IGFzc29j aWF0ZWQgYSBwZ3BhX2pvaW5fc3RhdGUgd2l0aCB0aGlzCisJICogam9pbnJlbC4gSWYgd2UgaGF2 ZSBub3QsIHdlIG5lZWQgdG8gdHJ5IHRvIGNvbnN0cnVjdCBvbmUuIElmIHdlIGhhdmUsCisJICog dGhlbiB0aGVyZSBhcmUgdHdvIGNhc2VzOiAoYSkgaWYgaW5uZXJyZWwgYW5kIG91dGVycmVsIGFy ZSB1bmNoYW5nZWQsCisJICogd2UgY2FuIHNpbXBseSB1c2UgaXQsIGFuZCAoYikgaWYgdGhleSBo YXZlIGNoYW5nZWQsIHdlIG5lZWQgdG8gcmVqaWdnZXIKKwkgKiB0aGUgYXJyYXkgb2YgaWRlbnRp ZmllcnMgYnV0IGNhbiBzdGlsbCBza2lwIHRoZSB0cm92ZSBsb29rdXAuCisJICovCisJcGpzID0g R2V0UmVsT3B0SW5mb0V4dGVuc2lvblN0YXRlKGpvaW5yZWwsIHBsYW5uZXJfZXh0ZW5zaW9uX2lk KTsKKwlpZiAocGpzICE9IE5VTEwpCisJeworCQlpZiAocGpzLT5qb2luX2luZGV4ZXMgPT0gTlVM TCAmJiBwanMtPnJlbF9pbmRleGVzID09IE5VTEwpCisJCXsKKwkJCS8qCisJCQkgKiBJZiB0aGVy ZSdzIG5vIHBvdGVudGlhbGx5IHJlbGV2YW50IGFkdmljZSwgdGhlbiB0aGUgcHJlc2VuY2Ugb2YK KwkJCSAqIHRoaXMgcGdwYV9qb2luX3N0YXRlIGFjdHMgbGlrZSBhIG5lZ2F0aXZlIGNhY2hlIGVu dHJ5OiBpdCB0ZWxscworCQkJICogdXMgbm90IHRvIGJvdGhlciBzZWFyY2hpbmcgdGhlIHRyb3Zl IGZvciBhZHZpY2UsIGJlY2F1c2Ugd2UKKwkJCSAqIHdpbGwgbm90IGZpbmQgYW55LgorCQkJICov CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCisJCWlmIChwanMtPm91dGVycmVsID09IG91dGVycmVs ICYmIHBqcy0+aW5uZXJyZWwgPT0gaW5uZXJyZWwpCisJCXsKKwkJCS8qIE5vIHVwZGF0ZXMgcmVx dWlyZWQsIHNvIGp1c3QgcmV0dXJuLiAqLworCQkJLyogWFhYLiBEb2VzIHRoaXMgbmVlZCB0byBk byBzb21ldGhpbmcgZGlmZmVyZW50IHVuZGVyIEdFUU8/ICovCisJCQlyZXR1cm4gcGpzOworCQl9 CisJfQorCisJLyoKKwkgKiBJZiB0aGVyZSdzIG5vIHBncGFfam9pbl9zdGF0ZSB5ZXQsIHdlIG5l ZWQgdG8gYWxsb2NhdGUgb25lLiBUcm92ZSBrZXlzCisJICogd2lsbCBub3QgZ2V0IGJ1aWx0IGZv ciBSVEVfSk9JTiBSVEVzLCBzbyB0aGUgYXJyYXkgbWF5IGVuZCB1cCBiZWluZworCSAqIGxhcmdl ciB0aGFuIG5lZWRlZC4gSXQncyBub3Qgd29ydGggdHJ5aW5nIHRvIGNvbXB1dGUgYSBwZXJmZWN0 bHkKKwkgKiBhY2N1cmF0ZSBjb3VudCBoZXJlLgorCSAqLworCWlmIChwanMgPT0gTlVMTCkKKwl7 CisJCWludAkJCXBlc3NpbWlzdGljX2NvdW50ID0gYm1zX251bV9tZW1iZXJzKGpvaW5yZWwtPnJl bGlkcyk7CisKKwkJcGpzID0gcGFsbG9jMF9vYmplY3QocGdwYV9qb2luX3N0YXRlKTsKKwkJcGpz LT5yaWRzID0gcGFsbG9jX2FycmF5KHBncGFfaWRlbnRpZmllciwgcGVzc2ltaXN0aWNfY291bnQp OworCQluZXdfcGpzID0gdHJ1ZTsKKwl9CisKKwkvKgorCSAqIEVpdGhlciB3ZSBqdXN0IGFsbG9j YXRlZCBhIG5ldyBwZ3BhX2pvaW5fc3RhdGUsIG9yIHRoZSBleGlzdGluZyBvbmUKKwkgKiBuZWVk cyByZWNvbmZpZ3VyaW5nIGZvciBhIG5ldyBpbm5lcnJlbCBhbmQgb3V0ZXJyZWwuIFRoZSByZXF1 aXJlZCBhcnJheQorCSAqIHNpemUgY2FuJ3QgY2hhbmdlLCBzbyB3ZSBjYW4gb3ZlcndyaXRlIHRo ZSBleGlzdGluZyBvbmUuCisJICovCisJcGpzLT5vdXRlcnJlbCA9IG91dGVycmVsOworCXBqcy0+ aW5uZXJyZWwgPSBpbm5lcnJlbDsKKwlwanMtPm91dGVyX2NvdW50ID0KKwkJcGdwYV9jb21wdXRl X2lkZW50aWZpZXJzX2J5X3JlbGlkcyhyb290LCBvdXRlcnJlbC0+cmVsaWRzLCBwanMtPnJpZHMp OworCXBqcy0+aW5uZXJfY291bnQgPQorCQlwZ3BhX2NvbXB1dGVfaWRlbnRpZmllcnNfYnlfcmVs aWRzKHJvb3QsIGlubmVycmVsLT5yZWxpZHMsCisJCQkJCQkJCQkJICAgcGpzLT5yaWRzICsgcGpz LT5vdXRlcl9jb3VudCk7CisKKwkvKgorCSAqIElmIHdlIGFsbG9jYXRlZCBhIG5ldyBwZ3BhX2pv aW5fc3RhdGUsIHNlYXJjaCBvdXIgdHJvdmUgb2YgYWR2aWNlIGZvcgorCSAqIHJlbGV2YW50IGVu dHJpZXMuIFRoZSB0cm92ZSBsb29rdXAgd2lsbCByZXR1cm4gdGhlIHNhbWUgcmVzdWx0cyBmb3IK KwkgKiBldmVyeSBvdXRlcnJlbC9pbm5lcnJlbCBjb21iaW5hdGlvbiwgc28gd2UgZG9uJ3QgbmVl ZCB0byByZXBlYXQgdGhhdAorCSAqIHdvcmsgZXZlcnkgdGltZS4KKwkgKi8KKwlpZiAobmV3X3Bq cykKKwl7CisJCXBncGFfdHJvdmVfcmVzdWx0IHRyZXN1bHQ7CisKKwkJLyogRmluZCBqb2luIGVu dHJpZXMuICovCisJCXBncGFfdHJvdmVfbG9va3VwKHBwcy0+dHJvdmUsIFBHUEFfVFJPVkVfTE9P S1VQX0pPSU4sCisJCQkJCQkgIHBqcy0+b3V0ZXJfY291bnQgKyBwanMtPmlubmVyX2NvdW50LAor CQkJCQkJICBwanMtPnJpZHMsICZ0cmVzdWx0KTsKKwkJcGpzLT5qb2luX2VudHJpZXMgPSB0cmVz dWx0LmVudHJpZXM7CisJCXBqcy0+am9pbl9pbmRleGVzID0gdHJlc3VsdC5pbmRleGVzOworCisJ CS8qIEZpbmQgcmVsIGVudHJpZXMuICovCisJCXBncGFfdHJvdmVfbG9va3VwKHBwcy0+dHJvdmUs IFBHUEFfVFJPVkVfTE9PS1VQX1JFTCwKKwkJCQkJCSAgcGpzLT5vdXRlcl9jb3VudCArIHBqcy0+ aW5uZXJfY291bnQsCisJCQkJCQkgIHBqcy0+cmlkcywgJnRyZXN1bHQpOworCQlwanMtPnJlbF9l bnRyaWVzID0gdHJlc3VsdC5lbnRyaWVzOworCQlwanMtPnJlbF9pbmRleGVzID0gdHJlc3VsdC5p bmRleGVzOworCisJCS8qIE5vdyB0aGF0IHRoZSBuZXcgcGdwYV9qb2luX3N0YXRlIGlzIGZ1bGx5 IHZhbGlkLCBzYXZlIGEgcG9pbnRlci4gKi8KKwkJU2V0UmVsT3B0SW5mb0V4dGVuc2lvblN0YXRl KGpvaW5yZWwsIHBsYW5uZXJfZXh0ZW5zaW9uX2lkLCBwanMpOworCisJCS8qCisJCSAqIElmIHRo ZXJlIHdhcyBubyByZWxldmFudCBhZHZpY2UgZm91bmQsIGp1c3QgcmV0dXJuIE5VTEwuIFRoaXMK KwkJICogcGdwYV9qb2luX3N0YXRlIHdpbGwgc3RpY2sgYXJvdW5kIGFzIGEgc29ydCBvZiBuZWdh dGl2ZSBjYWNoZQorCQkgKiBlbnRyeSwgc28gdGhhdCBmdXR1cmUgY2FsbHMgZm9yIHRoaXMgc2Ft ZSBqb2lucmVsIHF1aWNrbHkgcmV0dXJuCisJCSAqIE5VTEwuCisJCSAqLworCQlpZiAocGpzLT5q b2luX2luZGV4ZXMgPT0gTlVMTCAmJiBwanMtPnJlbF9pbmRleGVzID09IE5VTEwpCisJCQlyZXR1 cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gcGpzOworfQorCisvKgorICogRW5mb3JjZSBhbnkgcHJv dmlkZWQgYWR2aWNlIHRoYXQgaXMgcmVsZXZhbnQgdG8gYW55IG1ldGhvZCBvZiBpbXBsZW1lbnRp bmcKKyAqIHRoaXMgam9pbi4KKyAqCisgKiBBbHRob3VnaCB3ZSdyZSBwYXNzZWQgdGhlIG91dGVy cmVsIGFuZCBpbm5lcnJlbCBoZXJlLCB0aG9zZSBhcmUganVzdAorICogd2hhdGV2ZXIgdmFsdWVz IGhhcHBlbmVkIHRvIHByb21wdCB0aGUgY3JlYXRpb24gb2YgdGhpcyBqb2lucmVsOyB0aGV5Cisg KiBzaG91bGRuJ3QgcmVhbGx5IGluZmx1ZW5jZSBvdXIgY2hvaWNlIG9mIHdoYXQgYWR2aWNlIHRv IGFwcGx5LgorICovCitzdGF0aWMgdm9pZAorcGdwYV9qb2lucmVsX3NldHVwKFBsYW5uZXJJbmZv ICpyb290LCBSZWxPcHRJbmZvICpqb2lucmVsLAorCQkJCSAgIFJlbE9wdEluZm8gKm91dGVycmVs LCBSZWxPcHRJbmZvICppbm5lcnJlbCwKKwkJCQkgICBTcGVjaWFsSm9pbkluZm8gKnNqaW5mbywg TGlzdCAqcmVzdHJpY3RsaXN0KQoreworCXBncGFfam9pbl9zdGF0ZSAqcGpzOworCisJQXNzZXJ0 KGJtc19tZW1iZXJzaGlwKGpvaW5yZWwtPnJlbGlkcykgPT0gQk1TX01VTFRJUExFKTsKKworCS8q IEdldCBvdXIgcHJpdmF0ZSBzdGF0ZSBpbmZvcm1hdGlvbiBmb3IgdGhpcyBqb2luLiAqLworCXBq cyA9IHBncGFfZ2V0X2pvaW5fc3RhdGUocm9vdCwgam9pbnJlbCwgb3V0ZXJyZWwsIGlubmVycmVs KTsKKworCS8qIElmIHRoZXJlIGlzIHJlbGV2YW50IGFkdmljZSwgY2FsbCBhIGhlbHBlciBmdW5j dGlvbiB0byBhcHBseSBpdC4gKi8KKwlpZiAocGpzICE9IE5VTEwpCisJeworCQl1aW50NjQJCW9y aWdpbmFsX21hc2sgPSBqb2lucmVsLT5wZ3NfbWFzazsKKworCQlwZ3BhX3BsYW5uZXJfYXBwbHlf am9pbnJlbF9hZHZpY2UoJmpvaW5yZWwtPnBnc19tYXNrLAorCQkJCQkJCQkJCSAgcm9vdC0+cGxh bl9uYW1lLAorCQkJCQkJCQkJCSAgcGpzKTsKKworCQkvKiBFbWl0IGRlYnVnZ2luZyBtZXNzYWdl LCBpZiBlbmFibGVkLiAqLworCQlpZiAocGdfcGxhbl9hZHZpY2VfdHJhY2VfbWFzayAmJiBvcmln aW5hbF9tYXNrICE9IGpvaW5yZWwtPnBnc19tYXNrKQorCQkJZXJlcG9ydChXQVJOSU5HLAorCQkJ CQkoZXJybXNnKCJzdHJhdGVneSBtYXNrIGZvciBqb2luIG9uIFJUSXMgJXMgY2hhbmdlZCBmcm9t IDB4JSIgUFJJeDY0ICIgdG8gMHglIiBQUkl4NjQsCisJCQkJCQkJcGdwYV9ibXNfdG9fY3N0cmlu Zyhqb2lucmVsLT5yZWxpZHMpLAorCQkJCQkJCW9yaWdpbmFsX21hc2ssCisJCQkJCQkJam9pbnJl bC0+cGdzX21hc2spKSk7CisJfQorCisJLyogUGFzcyBjYWxsIHRvIHByZXZpb3VzIGhvb2suICov CisJaWYgKHByZXZfam9pbnJlbF9zZXR1cCkKKwkJKCpwcmV2X2pvaW5yZWxfc2V0dXApIChyb290 LCBqb2lucmVsLCBvdXRlcnJlbCwgaW5uZXJyZWwsCisJCQkJCQkJICAgc2ppbmZvLCByZXN0cmlj dGxpc3QpOworfQorCisvKgorICogRW5mb3JjZSBhbnkgcHJvdmlkZWQgYWR2aWNlIHRoYXQgaXMg cmVsZXZhbnQgdG8gdGhpcyBwYXJ0aWN1bGFyIG1ldGhvZCBvZgorICogaW1wbGVtZW50aW5nIHRo aXMgcGFydGljdWxhciBqb2luLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9qb2luX3BhdGhfc2V0 dXAoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmpvaW5yZWwsCisJCQkJCSBSZWxPcHRJ bmZvICpvdXRlcnJlbCwgUmVsT3B0SW5mbyAqaW5uZXJyZWwsCisJCQkJCSBKb2luVHlwZSBqb2lu dHlwZSwgSm9pblBhdGhFeHRyYURhdGEgKmV4dHJhKQoreworCXBncGFfam9pbl9zdGF0ZSAqcGpz OworCisJQXNzZXJ0KGJtc19tZW1iZXJzaGlwKGpvaW5yZWwtPnJlbGlkcykgPT0gQk1TX01VTFRJ UExFKTsKKworCS8qCisJICogSWYgd2UncmUgY29uc2lkZXJpbmcgaW1wbGVtZW50aW5nIGEgc2Vt aWpvaW4gYnkgbWFraW5nIG9uZSBzaWRlIHVuaXF1ZSwKKwkgKiBtYWtlIGEgbm90ZSBvZiBpdCBp biB0aGUgcGdwYV9wbGFubmVyX3N0YXRlLiBTZWUgY29tbWVudHMgZm9yCisJICogcGdwYV9zal91 bmlxdWVfcmVsIGZvciB3aHkgd2UgZG8gdGhpcy4KKwkgKi8KKwlpZiAoam9pbnR5cGUgPT0gSk9J Tl9VTklRVUVfT1VURVIgfHwgam9pbnR5cGUgPT0gSk9JTl9VTklRVUVfSU5ORVIpCisJeworCQlw Z3BhX3BsYW5uZXJfc3RhdGUgKnBwczsKKwkJUmVsT3B0SW5mbyAqdW5pcXVlcmVsOworCisJCXVu aXF1ZXJlbCA9IGpvaW50eXBlID09IEpPSU5fVU5JUVVFX09VVEVSID8gb3V0ZXJyZWwgOiBpbm5l cnJlbDsKKwkJcHBzID0gR2V0UGxhbm5lckdsb2JhbEV4dGVuc2lvblN0YXRlKHJvb3QtPmdsb2Is IHBsYW5uZXJfZXh0ZW5zaW9uX2lkKTsKKwkJaWYgKHBwcyAhPSBOVUxMICYmIHBwcy0+d2Fsa19w bGFuX3RyZWUpCisJCXsKKwkJCWJvb2wJCWZvdW5kID0gZmFsc2U7CisKKwkJCS8qIEF2b2lkIGFk ZGluZyBkdXBsaWNhdGVzLiAqLworCQkJZm9yZWFjaF9wdHIocGdwYV9zal91bmlxdWVfcmVsLCB1 ciwgcHBzLT5zal91bmlxdWVfcmVscykKKwkJCXsKKwkJCQkvKgorCQkJCSAqIFdlIHNob3VsZCBh bHdheXMgdXNlIHRoZSBzYW1lIHBvaW50ZXIgZm9yIHRoZSBzYW1lIHBsYW4KKwkJCQkgKiBuYW1l LCBzbyB3ZSBuZWVkIG5vdCB1c2Ugc3RyY21wKCkgaGVyZS4KKwkJCQkgKi8KKwkJCQlpZiAocm9v dC0+cGxhbl9uYW1lID09IHVyLT5wbGFuX25hbWUgJiYKKwkJCQkJYm1zX2VxdWFsKHVuaXF1ZXJl bC0+cmVsaWRzLCB1ci0+cmVsaWRzKSkKKwkJCQl7CisJCQkJCWZvdW5kID0gdHJ1ZTsKKwkJCQkJ YnJlYWs7CisJCQkJfQorCQkJfQorCisJCQkvKiBJZiBub3QgYSBkdXBsaWNhdGUsIGFwcGVuZCB0 byB0aGUgbGlzdC4gKi8KKwkJCWlmICghZm91bmQpCisJCQl7CisJCQkJcGdwYV9zal91bmlxdWVf cmVsICp1ciA9IHBhbGxvY19vYmplY3QocGdwYV9zal91bmlxdWVfcmVsKTsKKworCQkJCXVyLT5w bGFuX25hbWUgPSByb290LT5wbGFuX25hbWU7CisJCQkJdXItPnJlbGlkcyA9IHVuaXF1ZXJlbC0+ cmVsaWRzOworCQkJCXBwcy0+c2pfdW5pcXVlX3JlbHMgPSBsYXBwZW5kKHBwcy0+c2pfdW5pcXVl X3JlbHMsIHVyKTsKKwkJCX0KKwkJfQorCX0KKworCS8qIEdldCBvdXIgcHJpdmF0ZSBzdGF0ZSBp bmZvcm1hdGlvbiBmb3IgdGhpcyBqb2luLiAqLworCXBqcyA9IHBncGFfZ2V0X2pvaW5fc3RhdGUo cm9vdCwgam9pbnJlbCwgb3V0ZXJyZWwsIGlubmVycmVsKTsKKworCS8qIElmIHRoZXJlIGlzIHJl bGV2YW50IGFkdmljZSwgY2FsbCBhIGhlbHBlciBmdW5jdGlvbiB0byBhcHBseSBpdC4gKi8KKwlp ZiAocGpzICE9IE5VTEwpCisJeworCQl1aW50NjQJCW9yaWdpbmFsX21hc2sgPSBleHRyYS0+cGdz X21hc2s7CisKKwkJcGdwYV9wbGFubmVyX2FwcGx5X2pvaW5fcGF0aF9hZHZpY2Uoam9pbnR5cGUs CisJCQkJCQkJCQkJCSZleHRyYS0+cGdzX21hc2ssCisJCQkJCQkJCQkJCXJvb3QtPnBsYW5fbmFt ZSwKKwkJCQkJCQkJCQkJcGpzKTsKKworCQkvKiBFbWl0IGRlYnVnZ2luZyBtZXNzYWdlLCBpZiBl bmFibGVkLiAqLworCQlpZiAocGdfcGxhbl9hZHZpY2VfdHJhY2VfbWFzayAmJiBvcmlnaW5hbF9t YXNrICE9IGV4dHJhLT5wZ3NfbWFzaykKKwkJCWVyZXBvcnQoV0FSTklORywKKwkJCQkJKGVycm1z Zygic3RyYXRlZ3kgbWFzayBmb3Igam9pbiBvbiAlcyB3aXRoIG91dGVyICVzIGFuZCBpbm5lciAl cyBjaGFuZ2VkIGZyb20gMHglIiBQUkl4NjQgIiB0byAweCUiIFBSSXg2NCwKKwkJCQkJCQlwZ3Bh X2Jtc190b19jc3RyaW5nKGpvaW5yZWwtPnJlbGlkcyksCisJCQkJCQkJcGdwYV9ibXNfdG9fY3N0 cmluZyhvdXRlcnJlbC0+cmVsaWRzKSwKKwkJCQkJCQlwZ3BhX2Jtc190b19jc3RyaW5nKGlubmVy cmVsLT5yZWxpZHMpLAorCQkJCQkJCW9yaWdpbmFsX21hc2ssCisJCQkJCQkJZXh0cmEtPnBnc19t YXNrKSkpOworCX0KKworCS8qIFBhc3MgY2FsbCB0byBwcmV2aW91cyBob29rLiAqLworCWlmIChw cmV2X2pvaW5fcGF0aF9zZXR1cCkKKwkJKCpwcmV2X2pvaW5fcGF0aF9zZXR1cCkgKHJvb3QsIGpv aW5yZWwsIG91dGVycmVsLCBpbm5lcnJlbCwKKwkJCQkJCQkJIGpvaW50eXBlLCBleHRyYSk7Cit9 CisKKy8qCisgKiBDYXJyeSBvdXQgd2hhdGV2ZXIgc2V0dXAgd29yayB3ZSBuZWVkIHRvIGRvIGJl Zm9yZSBwbGFubmluZy4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfcGxhbm5lcl9zZXR1cChQbGFu bmVyR2xvYmFsICpnbG9iLCBRdWVyeSAqcGFyc2UsIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywK KwkJCQkgICBkb3VibGUgKnR1cGxlX2ZyYWN0aW9uLCBFeHBsYWluU3RhdGUgKmVzKQoreworCXBn cGFfdHJvdmUgKnRyb3ZlID0gTlVMTDsKKwlwZ3BhX3BsYW5uZXJfc3RhdGUgKnBwczsKKwlib29s CQlnZW5lcmF0ZV9hZHZpY2Vfc3RyaW5nID0gZmFsc2U7CisJYm9vbAkJd2Fsa19wbGFuX3RyZWUg PSBmYWxzZTsKKwlib29sCQluZWVkc19wcHMgPSBmYWxzZTsKKworCS8qCisJICogRGVjaWRlIHdo ZXRoZXIgd2UgbmVlZCB0byBnZW5lcmF0ZSBhbiBhZHZpY2Ugc3RyaW5nLiBXZSBtdXN0IGRvIHRo aXMgaWYKKwkgKiBhdCBsZWFzdCBvbmUgY29sbGVjdG9yIGlzIGVuYWJsZWQgb3IgaWYgdGhlIHVz ZXIgaGFzIHJlcXVlc3RlZCBpdCB1c2luZworCSAqIHRoZSBFWFBMQUlOIChQTEFOX0FEVklDRSkg b3B0aW9uLgorCSAqLworCWdlbmVyYXRlX2FkdmljZV9zdHJpbmcgPSAocGdfcGxhbl9hZHZpY2Vf bG9jYWxfY29sbGVjdGlvbl9saW1pdCA+IDAgfHwKKwkJCQkJCQkgIHBnX3BsYW5fYWR2aWNlX3No YXJlZF9jb2xsZWN0aW9uX2xpbWl0ID4gMCB8fAorCQkJCQkJCSAgcGdfcGxhbl9hZHZpY2Vfc2hv dWxkX2V4cGxhaW4oZXMpKTsKKwlpZiAoZ2VuZXJhdGVfYWR2aWNlX3N0cmluZykKKwl7CisJCXdh bGtfcGxhbl90cmVlID0gdHJ1ZTsKKwkJbmVlZHNfcHBzID0gdHJ1ZTsKKwl9CisKKwkvKgorCSAq IElmIGFueSBhZHZpY2Ugd2FzIHByb3ZpZGVkLCBidWlsZCBhIHRyb3ZlIG9mIGFkdmljZSBmb3Ig dXNlIGR1cmluZworCSAqIHBsYW5uaW5nLgorCSAqLworCWlmIChwZ19wbGFuX2FkdmljZV9hZHZp Y2UgIT0gTlVMTCAmJiBwZ19wbGFuX2FkdmljZV9hZHZpY2VbMF0gIT0gJ1wwJykKKwl7CisJCUxp c3QJICAgKmFkdmljZV9pdGVtczsKKwkJY2hhcgkgICAqZXJyb3I7CisKKwkJLyoKKwkJICogUGFy c2luZyBzaG91bGRuJ3QgZmFpbCBoZXJlLCBiZWNhdXNlIHdlIG11c3QgaGF2ZSBwcmV2aW91c2x5 IHBhcnNlZAorCQkgKiBzdWNjZXNzZnVsbHkgaW4gcGdfcGxhbl9hZHZpY2VfYWR2aWNlX2NoZWNr X2hvb2ssIGJ1dCBpZiBpdCBkb2VzLAorCQkgKiBlbWl0IGEgd2FybmluZy4KKwkJICovCisJCWFk dmljZV9pdGVtcyA9IHBncGFfcGFyc2UocGdfcGxhbl9hZHZpY2VfYWR2aWNlLCAmZXJyb3IpOwor CQlpZiAoZXJyb3IpCisJCQllbG9nKFdBUk5JTkcsICJjb3VsZCBub3QgcGFyc2UgYWR2aWNlOiAl cyIsIGVycm9yKTsKKworCQkvKgorCQkgKiBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIGFkdmljZSBz dHJpbmcgd2FzIG5vbi1lbXB0eSBidXQgY29udGFpbmVkIG5vCisJCSAqIGFjdHVhbCBhZHZpY2Us IGUuZy4gaXQgd2FzIGFsbCB3aGl0ZXNwYWNlLgorCQkgKi8KKwkJaWYgKGFkdmljZV9pdGVtcyAh PSBOSUwpCisJCXsKKwkJCXRyb3ZlID0gcGdwYV9idWlsZF90cm92ZShhZHZpY2VfaXRlbXMpOwor CQkJd2Fsa19wbGFuX3RyZWUgPSB0cnVlOworCQkJbmVlZHNfcHBzID0gdHJ1ZTsKKwkJfQorCX0K KworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKworCS8qCisJICogSWYgYXNzZXJ0cyBhcmUg ZW5hYmxlZCwgYWx3YXlzIGJ1aWxkIGEgcHJpdmF0ZSBzdGF0ZSBvYmplY3QgZm9yCisJICogY3Jv c3MtY2hlY2tzLgorCSAqLworCW5lZWRzX3BwcyA9IHRydWU7CisjZW5kaWYKKworCS8qCisJICog V2Ugb25seSBjcmVhdGUgYW5kIGluaXRpYWxpemUgYSBwcml2YXRlIHN0YXRlIG9iamVjdCBpZiBp dCdzIG5lZWRlZCBmb3IKKwkgKiBzb21lIHB1cnBvc2UuIFRoYXQgY291bGQgYmUgKDEpIHJlY29y ZGluZyB0aGF0IHdlIHdpbGwgbmVlZCB0byBnZW5lcmF0ZQorCSAqIGFuIGFkdmljZSBzdHJpbmcs ICgyKSBzdG9yaW5nIGEgdHJvdmUgb2Ygc3VwcGxpZWQgYWR2aWNlLCBvciAoMykKKwkgKiBmYWNp bGl0YXRpbmcgZGVidWdnaW5nIGNyb3NzLWNoZWNrcyB3aGVuIGFzc2VydHMgYXJlIGVuYWJsZWQu CisJICovCisJaWYgKG5lZWRzX3BwcykKKwl7CisJCXBwcyA9IHBhbGxvYzBfb2JqZWN0KHBncGFf cGxhbm5lcl9zdGF0ZSk7CisJCXBwcy0+ZXhwbGFpbl9zdGF0ZSA9IGVzOworCQlwcHMtPmdlbmVy YXRlX2FkdmljZV9zdHJpbmcgPSBnZW5lcmF0ZV9hZHZpY2Vfc3RyaW5nOworCQlwcHMtPndhbGtf cGxhbl90cmVlID0gd2Fsa19wbGFuX3RyZWU7CisJCXBwcy0+dHJvdmUgPSB0cm92ZTsKKyNpZmRl ZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisJCXBwcy0+cmlfY2hlY2tfaGFzaCA9CisJCQlwZ3BhX3Jp X2NoZWNrX2NyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwgMTAyNCwgTlVMTCk7CisjZW5kaWYK KwkJU2V0UGxhbm5lckdsb2JhbEV4dGVuc2lvblN0YXRlKGdsb2IsIHBsYW5uZXJfZXh0ZW5zaW9u X2lkLCBwcHMpOworCX0KK30KKworLyoKKyAqIENhcnJ5IG91dCB3aGF0ZXZlciB3b3JrIHdlIHdh bnQgdG8gZG8gYWZ0ZXIgcGxhbm5pbmcgaXMgY29tcGxldGUuCisgKi8KK3N0YXRpYyB2b2lkCitw Z3BhX3BsYW5uZXJfc2h1dGRvd24oUGxhbm5lckdsb2JhbCAqZ2xvYiwgUXVlcnkgKnBhcnNlLAor CQkJCQkgIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywgUGxhbm5lZFN0bXQgKnBzdG10KQorewor CXBncGFfcGxhbm5lcl9zdGF0ZSAqcHBzOworCXBncGFfdHJvdmUgKnRyb3ZlID0gTlVMTDsKKwlF eHBsYWluU3RhdGUgKmVzID0gTlVMTDsKKwlwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgd2Fsa2Vy ID0gezB9OwkvKiBwbGFjYXRlIGNvbXBpbGVyICovCisJYm9vbAkJZ2VuZXJhdGVfYWR2aWNlX3N0 cmluZyA9IGZhbHNlOworCWJvb2wJCXdhbGtfcGxhbl90cmVlID0gZmFsc2U7CisJTGlzdAkgICAq cGdwYV9pdGVtcyA9IE5JTDsKKwlwZ3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJzID0gTlVM TDsKKworCS8qIEZldGNoIG91ciBwcml2YXRlIHN0YXRlLCBzZXQgdXAgYnkgcGdwYV9wbGFubmVy X3NldHVwKCkuICovCisJcHBzID0gR2V0UGxhbm5lckdsb2JhbEV4dGVuc2lvblN0YXRlKGdsb2Is IHBsYW5uZXJfZXh0ZW5zaW9uX2lkKTsKKwlpZiAocHBzICE9IE5VTEwpCisJeworCQl0cm92ZSA9 IHBwcy0+dHJvdmU7CisJCWVzID0gcHBzLT5leHBsYWluX3N0YXRlOworCQlnZW5lcmF0ZV9hZHZp Y2Vfc3RyaW5nID0gcHBzLT5nZW5lcmF0ZV9hZHZpY2Vfc3RyaW5nOworCQl3YWxrX3BsYW5fdHJl ZSA9IHBwcy0+d2Fsa19wbGFuX3RyZWU7CisJfQorCisJLyoKKwkgKiBJZiBhbnkgYWR2aWNlIHdh cyBzcGVjaWZpZWQsIGFuZCBpZiB3ZSdyZSBydW5uaW5nIHVuZGVyIEVYUExBSU4sIHRoZW4KKwkg KiB3ZSBzaG91bGQgdHJ5IHRyeSB0byBwcm92aWRlIGFkdmljZSBmZWVkYmFjay4KKwkgKgorCSAq IElmIHdlJ3JlIHRyeWluZyB0byBnZW5lcmF0ZSBhbiBhZHZpY2Ugc3RyaW5nIG9yIGlmIHdlJ3Jl IHRyeWluZyB0bworCSAqIHByb3ZpZGUgYWR2aWNlIGZlZWRiYWNrLCB0aGVuIHdlIHdpbGwgbmVl ZCB0byBjcmVhdGUgcmFuZ2UgdGFibGUKKwkgKiBpZGVudGlmaWVycy4KKwkgKi8KKwlpZiAod2Fs a19wbGFuX3RyZWUpCisJeworCQlwZ3BhX3BsYW5fd2Fsa2VyKCZ3YWxrZXIsIHBzdG10LCBwcHMt PnNqX3VuaXF1ZV9yZWxzKTsKKwkJcnRfaWRlbnRpZmllcnMgPSBwZ3BhX2NyZWF0ZV9pZGVudGlm aWVyc19mb3JfcGxhbm5lZF9zdG10KHBzdG10KTsKKwl9CisKKwkvKiBHZW5lcmF0ZSB0aGUgYWR2 aWNlIHN0cmluZywgaWYgd2UgbmVlZCB0byBkbyBzby4gKi8KKwlpZiAoZ2VuZXJhdGVfYWR2aWNl X3N0cmluZykKKwl7CisJCWNoYXIJICAgKmFkdmljZV9zdHJpbmc7CisJCVN0cmluZ0luZm9EYXRh IGJ1ZjsKKworCQkvKiBHZW5lcmF0ZSBhIHRleHR1YWwgYWR2aWNlIHN0cmluZy4gKi8KKwkJaW5p dFN0cmluZ0luZm8oJmJ1Zik7CisJCXBncGFfb3V0cHV0X2FkdmljZSgmYnVmLCAmd2Fsa2VyLCBy dF9pZGVudGlmaWVycyk7CisJCWFkdmljZV9zdHJpbmcgPSBidWYuZGF0YTsKKworCQkvKiBJZiB0 aGUgYWR2aWNlIHN0cmluZyBpcyBlbXB0eSwgZG9uJ3QgYm90aGVyIGNvbGxlY3RpbmcgaXQuICov CisJCWlmIChhZHZpY2Vfc3RyaW5nWzBdICE9ICdcMCcpCisJCQlwZ3BhX2NvbGxlY3RfYWR2aWNl KHBzdG10LT5xdWVyeUlkLCBxdWVyeV9zdHJpbmcsIGFkdmljZV9zdHJpbmcpOworCisJCS8qCisJ CSAqIElmIHdlJ3ZlIGdvbmUgdG8gdGhlIHRyb3VibGUgb2YgZ2VuZXJhdGluZyBhbiBhZHZpY2Ug c3RyaW5nLCBhbmQgaWYKKwkJICogd2UncmUgaW5zaWRlIEVYUExBSU4sIHNhdmUgdGhlIHN0cmlu ZyBzbyB3ZSBkb24ndCBuZWVkIHRvCisJCSAqIHJlZ2VuZXJhdGUgaXQuCisJCSAqLworCQlpZiAo ZXMgIT0gTlVMTCkKKwkJCXBncGFfaXRlbXMgPSBsYXBwZW5kKHBncGFfaXRlbXMsCisJCQkJCQkJ CSBtYWtlRGVmRWxlbSgiYWR2aWNlX3N0cmluZyIsCisJCQkJCQkJCQkJCSAoTm9kZSAqKSBtYWtl U3RyaW5nKGFkdmljZV9zdHJpbmcpLAorCQkJCQkJCQkJCQkgLTEpKTsKKwl9CisKKwkvKgorCSAq IElmIHdlIGFyZSBwbGFubmluZyB3aXRoaW4gRVhQTEFJTiwgbWFrZSBhcnJhbmdlbWVudHMgdG8g YWxsb3cgRVhQTEFJTgorCSAqIHRvIHRlbGwgdGhlIHVzZXIgd2hhdCBoYXMgaGFwcGVuZWQgd2l0 aCB0aGUgcHJvdmlkZWQgYWR2aWNlLgorCSAqCisJICogTkI6IElmIEVYUExBSU4gaXMgdXNlZCBv biBhIHByZXBhcmVkIGlzIGEgcHJlcGFyZWQgc3RhdGVtZW50LCBwbGFubmluZworCSAqIHdpbGwg aGF2ZSBhbHJlYWR5IGhhcHBlbmVkIGhhcHBlbmVkIHdpdGhvdXQgcmVjb3JkaW5nIHRoZXNlIGRl dGFpbHMuIFdlCisJICogY291bGQgY29uc2lkZXIgYWRkaW5nIGEgR1VDIHRvIGNhdGVyIHRvIHRo YXQgc2NlbmFyaW87IG9yIHdlIGNvdWxkIGRvCisJICogdGhpcyB3b3JrIGFsbCB0aGUgdGltZSwg YnV0IHRoYXQgc2VlbXMgbGlrZSB0b28gbXVjaCBvdmVyaGVhZC4KKwkgKi8KKwlpZiAodHJvdmUg IT0gTlVMTCAmJiBlcyAhPSBOVUxMKQorCXsKKwkJTGlzdAkgICAqZmVlZGJhY2sgPSBOSUw7CisK KwkJLyoKKwkJICogSW5qZWN0IGEgTm9kZS10cmVlIHJlcHJlc2VudGF0aW9uIG9mIGFsbCB0aGUg dHJvdmUtZW50cnkgZmxhZ3MgaW50bworCQkgKiB0aGUgUGxhbm5lZFN0bXQuCisJCSAqLworCQlm ZWVkYmFjayA9IHBncGFfcGxhbm5lcl9hcHBlbmRfZmVlZGJhY2soZmVlZGJhY2ssCisJCQkJCQkJ CQkJCQl0cm92ZSwKKwkJCQkJCQkJCQkJCVBHUEFfVFJPVkVfTE9PS1VQX1NDQU4sCisJCQkJCQkJ CQkJCQlydF9pZGVudGlmaWVycywgJndhbGtlcik7CisJCWZlZWRiYWNrID0gcGdwYV9wbGFubmVy X2FwcGVuZF9mZWVkYmFjayhmZWVkYmFjaywKKwkJCQkJCQkJCQkJCXRyb3ZlLAorCQkJCQkJCQkJ CQkJUEdQQV9UUk9WRV9MT09LVVBfSk9JTiwKKwkJCQkJCQkJCQkJCXJ0X2lkZW50aWZpZXJzLCAm d2Fsa2VyKTsKKwkJZmVlZGJhY2sgPSBwZ3BhX3BsYW5uZXJfYXBwZW5kX2ZlZWRiYWNrKGZlZWRi YWNrLAorCQkJCQkJCQkJCQkJdHJvdmUsCisJCQkJCQkJCQkJCQlQR1BBX1RST1ZFX0xPT0tVUF9S RUwsCisJCQkJCQkJCQkJCQlydF9pZGVudGlmaWVycywgJndhbGtlcik7CisKKwkJcGdwYV9pdGVt cyA9IGxhcHBlbmQocGdwYV9pdGVtcywgbWFrZURlZkVsZW0oImZlZWRiYWNrIiwKKwkJCQkJCQkJ CQkJCQkgKE5vZGUgKikgZmVlZGJhY2ssCisJCQkJCQkJCQkJCQkJIC0xKSk7CisJfQorCisJLyog UHVzaCB3aGF0ZXZlciBkYXRhIHdlJ3JlIHNhdmluZyBpbnRvIHRoZSBQbGFubmVkU3RtdC4gKi8K KwlpZiAocGdwYV9pdGVtcyAhPSBOSUwpCisJCXBzdG10LT5leHRlbnNpb25fc3RhdGUgPQorCQkJ bGFwcGVuZChwc3RtdC0+ZXh0ZW5zaW9uX3N0YXRlLAorCQkJCQltYWtlRGVmRWxlbSgicGdfcGxh bl9hZHZpY2UiLCAoTm9kZSAqKSBwZ3BhX2l0ZW1zLCAtMSkpOworCisJLyoKKwkgKiBJZiBhc3Nl cnRpb25zIGFyZSBlbmFibGVkLCBjcm9zcy1jaGVjayB0aGUgZ2VuZXJhdGVkIHJhbmdlIHRhYmxl CisJICogaWRlbnRpZmllcnMuCisJICovCisJaWYgKHBwcyAhPSBOVUxMKQorCQlwZ3BhX3JpX2No ZWNrZXJfdmFsaWRhdGUocHBzLCBwc3RtdCk7Cit9CisKKy8qCisgKiBFbmZvcmNlIG92ZXJhbGwg cmVzdHJpY3Rpb25zIG9uIGEgam9pbiByZWxhdGlvbiB0aGF0IGFwcGx5IHVuaWZvcm1seQorICog cmVnYXJkbGVzcyBvZiB0aGUgY2hvaWNlIG9mIGlubmVyIGFuZCBvdXRlciByZWwuCisgKi8KK3N0 YXRpYyB2b2lkCitwZ3BhX3BsYW5uZXJfYXBwbHlfam9pbnJlbF9hZHZpY2UodWludDY0ICpwZ3Nf bWFza19wLCBjaGFyICpwbGFuX25hbWUsCisJCQkJCQkJCSAgcGdwYV9qb2luX3N0YXRlICpwanMp Cit7CisJaW50CQkJaSA9IC0xOworCWludAkJCWZsYWdzOworCWJvb2wJCWdhdGhlcl9jb25mbGlj dCA9IGZhbHNlOworCXVpbnQ2NAkJZ2F0aGVyX21hc2sgPSAwOworCUJpdG1hcHNldCAgKmdhdGhl cl9wYXJ0aWFsX21hdGNoID0gTlVMTDsKKwlCaXRtYXBzZXQgICpnYXRoZXJfZnVsbF9tYXRjaCA9 IE5VTEw7CisJYm9vbAkJcGFydGl0aW9ud2lzZV9jb25mbGljdCA9IGZhbHNlOworCWludAkJCXBh cnRpdGlvbndpc2Vfb3V0Y29tZSA9IDA7CisJQml0bWFwc2V0ICAqcGFydGl0aW9ud2lzZV9wYXJ0 aWFsX21hdGNoID0gTlVMTDsKKwlCaXRtYXBzZXQgICpwYXJ0aXRpb253aXNlX2Z1bGxfbWF0Y2gg PSBOVUxMOworCisJLyogSXRlcmF0ZSBvdmVyIGFsbCBwb3NzaWJseS1yZWxldmFudCBhZHZpY2Uu ICovCisJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKHBqcy0+cmVsX2luZGV4ZXMsIGkpKSA+ PSAwKQorCXsKKwkJcGdwYV90cm92ZV9lbnRyeSAqZW50cnkgPSAmcGpzLT5yZWxfZW50cmllc1tp XTsKKwkJcGdwYV9pdG1fdHlwZSBpdG07CisJCWJvb2wJCWZ1bGxfbWF0Y2ggPSBmYWxzZTsKKwkJ dWludDY0CQlteV9nYXRoZXJfbWFzayA9IDA7CisJCWludAkJCW15X3BhcnRpdGlvbndpc2Vfb3V0 Y29tZSA9IDA7CS8qID4wIHllcywgPDAgbm8gKi8KKworCQkvKgorCQkgKiBGb3IgR0FUSEVSIGFu ZCBHQVRIRVJfTUVSR0UsIGlmIHRoZSBzcGVjaWZpZWQgcmVsYXRpb25zIGV4YWN0bHkKKwkJICog bWF0Y2ggdGhpcyBqb2lucmVsLCBkbyB3aGF0ZXZlciB0aGUgYWR2aWNlIHNheXM7IG90aGVyd2lz ZSwgZG9uJ3QKKwkJICogYWxsb3cgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBhdCB0aGlzIGxldmVs LiBGb3IgTk9fR0FUSEVSLCB0aGVyZQorCQkgKiBtdXN0IGJlIGEgc2luZ2xlIHRhcmdldCByZWxh dGlvbiB3aGljaCBtdXN0IGJlIGluY2x1ZGVkIGluIHRoaXMKKwkJICogam9pbnJlbCwgc28ganVz dCBkb24ndCBhbGxvdyBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIGhlcmUsIGZ1bGwKKwkJICogc3Rv cC4KKwkJICovCisJCWlmIChlbnRyeS0+dGFnID09IFBHUEFfVEFHX05PX0dBVEhFUikKKwkJewor CQkJbXlfZ2F0aGVyX21hc2sgPSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKKwkJCWZ1bGxfbWF0 Y2ggPSB0cnVlOworCQl9CisJCWVsc2UKKwkJeworCQkJaW50CQkJdG90YWxfY291bnQ7CisKKwkJ CXRvdGFsX2NvdW50ID0gcGpzLT5vdXRlcl9jb3VudCArIHBqcy0+aW5uZXJfY291bnQ7CisJCQlp dG0gPSBwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3RhcmdldCh0b3RhbF9jb3VudCwgcGpzLT5yaWRz LAorCQkJCQkJCQkJCQkJZW50cnktPnRhcmdldCk7CisJCQlBc3NlcnQoaXRtICE9IFBHUEFfSVRN X0RJU0pPSU5UKTsKKworCQkJaWYgKGl0bSA9PSBQR1BBX0lUTV9FUVVBTCkKKwkJCXsKKwkJCQlm dWxsX21hdGNoID0gdHJ1ZTsKKwkJCQlpZiAoZW50cnktPnRhZyA9PSBQR1BBX1RBR19QQVJUSVRJ T05XSVNFKQorCQkJCQlteV9wYXJ0aXRpb253aXNlX291dGNvbWUgPSAxOworCQkJCWVsc2UgaWYg KGVudHJ5LT50YWcgPT0gUEdQQV9UQUdfR0FUSEVSKQorCQkJCQlteV9nYXRoZXJfbWFzayA9IFBH U19HQVRIRVI7CisJCQkJZWxzZSBpZiAoZW50cnktPnRhZyA9PSBQR1BBX1RBR19HQVRIRVJfTUVS R0UpCisJCQkJCW15X2dhdGhlcl9tYXNrID0gUEdTX0dBVEhFUl9NRVJHRTsKKwkJCQllbHNlCisJ CQkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIGFkdmljZSB0YWc6ICVkIiwKKwkJCQkJCSAoaW50 KSBlbnRyeS0+dGFnKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlpZiAoZW50cnktPnRhZyA9 PSBQR1BBX1RBR19QQVJUSVRJT05XSVNFKQorCQkJCXsKKwkJCQkJbXlfcGFydGl0aW9ud2lzZV9v dXRjb21lID0gLTE7CisJCQkJCW15X2dhdGhlcl9tYXNrID0gUEdTX0NPTlNJREVSX05PTlBBUlRJ QUw7CisJCQkJfQorCQkJCWVsc2UgaWYgKGVudHJ5LT50YWcgPT0gUEdQQV9UQUdfR0FUSEVSIHx8 CisJCQkJCQkgZW50cnktPnRhZyA9PSBQR1BBX1RBR19HQVRIRVJfTUVSR0UpCisJCQkJeworCQkJ CQlteV9wYXJ0aXRpb253aXNlX291dGNvbWUgPSAtMTsKKwkJCQkJbXlfZ2F0aGVyX21hc2sgPSBQ R1NfQ09OU0lERVJfTk9OUEFSVElBTDsKKwkJCQl9CisJCQkJZWxzZQorCQkJCQllbG9nKEVSUk9S LCAidW5leHBlY3RlZCBhZHZpY2UgdGFnOiAlZCIsCisJCQkJCQkgKGludCkgZW50cnktPnRhZyk7 CisJCQl9CisJCX0KKworCQkvKgorCQkgKiBJZiB3ZSBzZXQgbXlfZ2F0aGVyX21hc2sgdXAgYWJv dmUsIHRoZW4gd2UgKDEpIG1ha2UgYSBub3RlIGlmIHRoZQorCQkgKiBhZHZpY2UgY29uZmxpY3Rl ZCwgKDIpIHJlbWVtYmVyIHRoZSBtYXNrIHZhbHVlLCBhbmQgKDMpIHJlbWVtYmVyCisJCSAqIHdo ZXRoZXIgdGhpcyB3YXMgYSBmdWxsIG9yIHBhcnRpYWwgbWF0Y2guCisJCSAqLworCQlpZiAobXlf Z2F0aGVyX21hc2sgIT0gMCkKKwkJeworCQkJaWYgKGdhdGhlcl9tYXNrICE9IDAgJiYgZ2F0aGVy X21hc2sgIT0gbXlfZ2F0aGVyX21hc2spCisJCQkJZ2F0aGVyX2NvbmZsaWN0ID0gdHJ1ZTsKKwkJ CWdhdGhlcl9tYXNrID0gbXlfZ2F0aGVyX21hc2s7CisJCQlpZiAoZnVsbF9tYXRjaCkKKwkJCQln YXRoZXJfZnVsbF9tYXRjaCA9IGJtc19hZGRfbWVtYmVyKGdhdGhlcl9mdWxsX21hdGNoLCBpKTsK KwkJCWVsc2UKKwkJCQlnYXRoZXJfcGFydGlhbF9tYXRjaCA9IGJtc19hZGRfbWVtYmVyKGdhdGhl cl9wYXJ0aWFsX21hdGNoLCBpKTsKKwkJfQorCisJCS8qCisJCSAqIExpa2V3aXNlLCBpZiB3ZSBz ZXQgbXlfcGFydGl0aW9ud2lzZV9vdXRjb21lIHVwIGFib3ZlLCB0aGVuIHdlICgxKQorCQkgKiBt YWtlIGEgbm90ZSBpZiB0aGUgYWR2aWNlIGNvbmZsaWN0ZWQsICgyKSByZW1lbWJlciB3aGF0IHRo ZSBkZXNpcmVkCisJCSAqIG91dGNvbWUgd2FzLCBhbmQgKDMpIHJlbWVtYmVyIHdoZXRoZXIgdGhp cyB3YXMgYSBmdWxsIG9yIHBhcnRpYWwKKwkJICogbWF0Y2guCisJCSAqLworCQlpZiAobXlfcGFy dGl0aW9ud2lzZV9vdXRjb21lICE9IDApCisJCXsKKwkJCWlmIChwYXJ0aXRpb253aXNlX291dGNv bWUgIT0gMCAmJgorCQkJCXBhcnRpdGlvbndpc2Vfb3V0Y29tZSAhPSBteV9wYXJ0aXRpb253aXNl X291dGNvbWUpCisJCQkJcGFydGl0aW9ud2lzZV9jb25mbGljdCA9IHRydWU7CisJCQlwYXJ0aXRp b253aXNlX291dGNvbWUgPSBteV9wYXJ0aXRpb253aXNlX291dGNvbWU7CisJCQlpZiAoZnVsbF9t YXRjaCkKKwkJCQlwYXJ0aXRpb253aXNlX2Z1bGxfbWF0Y2ggPQorCQkJCQlibXNfYWRkX21lbWJl cihwYXJ0aXRpb253aXNlX2Z1bGxfbWF0Y2gsIGkpOworCQkJZWxzZQorCQkJCXBhcnRpdGlvbndp c2VfcGFydGlhbF9tYXRjaCA9CisJCQkJCWJtc19hZGRfbWVtYmVyKHBhcnRpdGlvbndpc2VfcGFy dGlhbF9tYXRjaCwgaSk7CisJCX0KKwl9CisKKwkvKgorCSAqIE1hcmsgZXZlcnkgR2F0aGVyLXJl bGF0ZWQgcGllY2Ugb2YgYWR2aWNlIGFzIHBhcnRpYWxseSBtYXRjaGVkLCBhbmQgaWYKKwkgKiB0 aGUgc2V0IG9mIHRhcmdldHMgZXhhY3RseSBtYXRjaGVkIHRoaXMgcmVsYXRpb24sIGZ1bGx5IG1h dGNoZWQuIElmCisJICogdGhlcmUgd2FzIGEgY29uZmxpY3QsIG1hcmsgdGhlbSBhbGwgYXMgY29u ZmxpY3RpbmcuCisJICovCisJZmxhZ3MgPSBQR1BBX1RFX01BVENIX1BBUlRJQUw7CisJaWYgKGdh dGhlcl9jb25mbGljdCkKKwkJZmxhZ3MgfD0gUEdQQV9URV9DT05GTElDVElORzsKKwlwZ3BhX3Ry b3ZlX3NldF9mbGFncyhwanMtPnJlbF9lbnRyaWVzLCBnYXRoZXJfcGFydGlhbF9tYXRjaCwgZmxh Z3MpOworCWZsYWdzIHw9IFBHUEFfVEVfTUFUQ0hfRlVMTDsKKwlwZ3BhX3Ryb3ZlX3NldF9mbGFn cyhwanMtPnJlbF9lbnRyaWVzLCBnYXRoZXJfZnVsbF9tYXRjaCwgZmxhZ3MpOworCisJLyogTGlr ZXdpc2UgZm9yIHBhcnRpdGlvbndpc2UgYWR2aWNlLiAqLworCWZsYWdzID0gUEdQQV9URV9NQVRD SF9QQVJUSUFMOworCWlmIChwYXJ0aXRpb253aXNlX2NvbmZsaWN0KQorCQlmbGFncyB8PSBQR1BB X1RFX0NPTkZMSUNUSU5HOworCXBncGFfdHJvdmVfc2V0X2ZsYWdzKHBqcy0+cmVsX2VudHJpZXMs IHBhcnRpdGlvbndpc2VfcGFydGlhbF9tYXRjaCwgZmxhZ3MpOworCWZsYWdzIHw9IFBHUEFfVEVf TUFUQ0hfRlVMTDsKKwlwZ3BhX3Ryb3ZlX3NldF9mbGFncyhwanMtPnJlbF9lbnRyaWVzLCBwYXJ0 aXRpb253aXNlX2Z1bGxfbWF0Y2gsIGZsYWdzKTsKKworCS8qIElmIHRoZXJlIGlzIGEgbm9uLWNv bmZsaWN0aW5nIGdhdGhlciBzcGVjaWZpY2F0aW9uLCBlbmZvcmNlIGl0LiAqLworCWlmIChnYXRo ZXJfbWFzayAhPSAwICYmICFnYXRoZXJfY29uZmxpY3QpCisJeworCQkqcGdzX21hc2tfcCAmPQor CQkJfihQR1NfR0FUSEVSIHwgUEdTX0dBVEhFUl9NRVJHRSB8IFBHU19DT05TSURFUl9OT05QQVJU SUFMKTsKKwkJKnBnc19tYXNrX3AgfD0gZ2F0aGVyX21hc2s7CisJfQorCisJLyoKKwkgKiBJZiB0 aGVyZSBpcyBhIG5vbi1jb25mbGljdGluZyBwYXJ0aXRpb253aXNlIHNwZWNpZmljYXRpb24sIGVu Zm9yY2UuCisJICoKKwkgKiBUbyBmb3JjZSBhIHBhcnRpdGlvbndpc2Ugam9pbiwgd2UgZGlzYWJs ZSBhbGwgdGhlIG9yZGluYXJ5IG1lYW5zIG9mCisJICogcGVyZm9ybWluZyBhIGpvaW4sIGFuZCBp bnN0ZWFkIG9ubHkgQXBwZW5kIGFuZCBNZXJnZUFwcGVuZCBwYXRocyBoZXJlLgorCSAqIFRvIHBy ZXZlbnQgb25lLCB3ZSBqdXN0IGRpc2FibGUgQXBwZW5kIGFuZCBNZXJnZUFwcGVuZC4gIE5vdGUg dGhhdCB3ZQorCSAqIG11c3Qgbm90IHVuc2V0IFBHU19DT05TSURFUl9QQVJUSVRJT05XSVNFIGV2 ZW4gd2hlbiB3ZSBkb24ndCB3YW50IGEKKwkgKiBwYXJ0aXRpb253aXNlIGpvaW4gaGVyZSwgYmVj YXVzZSB3ZSBtaWdodCB3YW50IG9uZSBhdCBhIGhpZ2hlciBsZXZlbAorCSAqIHRoYXQgaXMgY29u c3RydWN0aW5nIHVzaW5nIHBhdGhzIGZyb20gdGhpcyBsZXZlbC4KKwkgKi8KKwlpZiAocGFydGl0 aW9ud2lzZV9vdXRjb21lICE9IDAgJiYgIXBhcnRpdGlvbndpc2VfY29uZmxpY3QpCisJeworCQlp ZiAocGFydGl0aW9ud2lzZV9vdXRjb21lID4gMCkKKwkJCSpwZ3NfbWFza19wID0gKCpwZ3NfbWFz a19wICYgflBHU19KT0lOX0FOWSkgfAorCQkJCVBHU19BUFBFTkQgfCBQR1NfTUVSR0VfQVBQRU5E IHwgUEdTX0NPTlNJREVSX1BBUlRJVElPTldJU0U7CisJCWVsc2UKKwkJCSpwZ3NfbWFza19wICY9 IH4oUEdTX0FQUEVORCB8IFBHU19NRVJHRV9BUFBFTkQpOworCX0KK30KKworLyoKKyAqIEVuZm9y Y2UgcmVzdHJpY3Rpb25zIG9uIHRoZSBqb2luIG9yZGVyIG9yIGpvaW4gbWV0aG9kLgorICovCitz dGF0aWMgdm9pZAorcGdwYV9wbGFubmVyX2FwcGx5X2pvaW5fcGF0aF9hZHZpY2UoSm9pblR5cGUg am9pbnR5cGUsIHVpbnQ2NCAqcGdzX21hc2tfcCwKKwkJCQkJCQkJCWNoYXIgKnBsYW5fbmFtZSwK KwkJCQkJCQkJCXBncGFfam9pbl9zdGF0ZSAqcGpzKQoreworCWludAkJCWkgPSAtMTsKKwlCaXRt YXBzZXQgICpqb19wZXJtaXRfaW5kZXhlcyA9IE5VTEw7CisJQml0bWFwc2V0ICAqam9fZGVueV9p bmRleGVzID0gTlVMTDsKKwlCaXRtYXBzZXQgICpqb19kZW55X3JlbF9pbmRleGVzID0gTlVMTDsK KwlCaXRtYXBzZXQgICpqbV9pbmRleGVzID0gTlVMTDsKKwlib29sCQlqbV9jb25mbGljdCA9IGZh bHNlOworCXVpbnQzMgkJam9pbl9tYXNrID0gMDsKKworCS8qCisJICogUmVjb25zaWRlciBQQVJU SVRJT05XSVNFKC4uLikgYWR2aWNlLgorCSAqCisJICogV2UgYWxyZWFkeSB0aG91Z2h0IGFib3V0 IHRoaXMgZm9yIHRoZSBqb2lucmVsIGFzIGEgd2hvbGUsIGJ1dCBpbiBzb21lCisJICogY2FzZXMs IHBhcnRpdGlvbndpc2UgYWR2aWNlIGNhbiBhbHNvIGNvbnN0cmFpbiB0aGUgam9pbiBvcmRlci4g Rm9yCisJICogaW5zdGFuY2UsIGlmIHRoZSBhZHZpY2Ugc2F5cyBQQVJUSVRJT05XSVNFKCh0MSB0 MikpLCB3ZSBzaG91bGRuJ3QgYnVpbGQKKwkgKiBqb2luIHBhdGhzIGZvciBhIGFueSBqb2lucmVs IHRoYXQgaW5jbHVkZXMgdDEgb3IgdDIgdW5sZXNzIGl0IGFsc28KKwkgKiBpbmNsdWRlcyB0aGUg b3RoZXIuIEluIGdlbmVyYWwsIHRoZSBwYXJpdGlvbndpc2Ugb3BlcmF0aW9uIG11c3QgaGF2ZQor CSAqIGFscmVhZHkgYmVlbiBjb21wbGV0ZWQgd2l0aGluIG9uZSBzaWRlIG9mIHRoZSBjdXJyZW50 IGpvaW4gb3IgdGhlCisJICogb3RoZXIsIGVsc2UgdGhlIGpvaW4gb3JkZXIgaXMgaW1wZXJtaXNz aWJsZS4KKwkgKgorCSAqIE5COiBJdCBtaWdodCBzZWVtIHRlbXB0aW5nIHRvIHRyeSB0byBkZWFs IHdpdGggUEFSVElUSU9OV0lTRSBhZHZpc2UKKwkgKiBlbnRpcmVseSBpbiB0aGlzIGZ1bmN0aW9u LCBidXQgdGhhdCBkb2Vzbid0IHdvcmsuIEhlcmUsIHdlIGNhbiBvbmx5IGFmZmVjdAorCSAqIHRo ZSBwZ3NfbWFzayB3aXRoaW4gYSBwYXJ0aWN1bGFyIEpvaW5QYXRoRXh0cmFEYXRhLCB0aGF0IGlz LCBmb3IgYQorCSAqIHBhcnRpY3VsYXIgY2hvaWNlIG9mIGlubmVycmVsIGFuZCBvdXRlcnJlbC4g UGFydGl0aW9ud2lzZSBwYXRocyBhcmUgbm90CisJICogYnVpbHQgdGhhdCB3YXksIHNvIHdlIG11 c3Qgc2V0IHBnc19tYXNrIGZvciB0aGUgUmVsT3B0SW5mbywgd2hpY2ggaXMgYmVzdAorCSAqIGRv bmUgaW4gcGdwYV9wbGFubmVyX2FwcGx5X2pvaW5yZWxfYWR2aWNlLgorCSAqLworCXdoaWxlICgo aSA9IGJtc19uZXh0X21lbWJlcihwanMtPnJlbF9pbmRleGVzLCBpKSkgPj0gMCkKKwl7CisJCXBn cGFfdHJvdmVfZW50cnkgKmVudHJ5ID0gJnBqcy0+cmVsX2VudHJpZXNbaV07CisJCXBncGFfaXRt X3R5cGUgaW5uZXJfaXRtOworCQlwZ3BhX2l0bV90eXBlIG91dGVyX2l0bTsKKworCQlpZiAoZW50 cnktPnRhZyAhPSBQR1BBX1RBR19QQVJUSVRJT05XSVNFKQorCQkJY29udGludWU7CisKKwkJb3V0 ZXJfaXRtID0gcGdwYV9pZGVudGlmaWVyc19tYXRjaF90YXJnZXQocGpzLT5vdXRlcl9jb3VudCwK KwkJCQkJCQkJCQkJCSAgcGpzLT5yaWRzLCBlbnRyeS0+dGFyZ2V0KTsKKwkJaWYgKG91dGVyX2l0 bSA9PSBQR1BBX0lUTV9FUVVBTCB8fAorCQkJb3V0ZXJfaXRtID09IFBHUEFfSVRNX1RBUkdFVFNf QVJFX1NVQlNFVCkKKwkJCWNvbnRpbnVlOworCisJCWlubmVyX2l0bSA9IHBncGFfaWRlbnRpZmll cnNfbWF0Y2hfdGFyZ2V0KHBqcy0+aW5uZXJfY291bnQsCisJCQkJCQkJCQkJCQkgIHBqcy0+cmlk cyArIHBqcy0+b3V0ZXJfY291bnQsCisJCQkJCQkJCQkJCQkgIGVudHJ5LT50YXJnZXQpOworCQlp ZiAoaW5uZXJfaXRtID09IFBHUEFfSVRNX0VRVUFMIHx8CisJCQlpbm5lcl9pdG0gPT0gUEdQQV9J VE1fVEFSR0VUU19BUkVfU1VCU0VUKQorCQkJY29udGludWU7CisKKwkJam9fZGVueV9yZWxfaW5k ZXhlcyA9IGJtc19hZGRfbWVtYmVyKGpvX2RlbnlfcmVsX2luZGV4ZXMsIGkpOworCX0KKworCS8q IEl0ZXJhdGUgb3ZlciBhZHZpY2UgdGhhdCBwZXJ0YWlucyB0byB0aGUgam9pbiBvcmRlciBhbmQg bWV0aG9kLiAqLworCWkgPSAtMTsKKwl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIocGpzLT5q b2luX2luZGV4ZXMsIGkpKSA+PSAwKQorCXsKKwkJcGdwYV90cm92ZV9lbnRyeSAqZW50cnkgPSAm cGpzLT5qb2luX2VudHJpZXNbaV07CisJCXVpbnQzMgkJbXlfam9pbl9tYXNrOworCisJCS8qIEhh bmRsZSBqb2luIG9yZGVyIGFkdmljZS4gKi8KKwkJaWYgKGVudHJ5LT50YWcgPT0gUEdQQV9UQUdf Sk9JTl9PUkRFUikKKwkJeworCQkJaWYgKHBncGFfam9pbl9vcmRlcl9wZXJtaXRzX2pvaW4ocGpz LT5vdXRlcl9jb3VudCwKKwkJCQkJCQkJCQkJIHBqcy0+aW5uZXJfY291bnQsCisJCQkJCQkJCQkJ CSBwanMtPnJpZHMsCisJCQkJCQkJCQkJCSBlbnRyeSkpCisJCQkJam9fcGVybWl0X2luZGV4ZXMg PSBibXNfYWRkX21lbWJlcihqb19wZXJtaXRfaW5kZXhlcywgaSk7CisJCQllbHNlCisJCQkJam9f ZGVueV9pbmRleGVzID0gYm1zX2FkZF9tZW1iZXIoam9fZGVueV9pbmRleGVzLCBpKTsKKwkJCWNv bnRpbnVlOworCQl9CisKKwkJLyogSGFuZGxlIGpvaW4gbWV0aG9kIGFkdmljZS4gKi8KKwkJbXlf am9pbl9tYXNrID0gcGdwYV9qb2luX3N0cmF0ZWd5X21hc2tfZnJvbV9hZHZpY2VfdGFnKGVudHJ5 LT50YWcpOworCQlpZiAobXlfam9pbl9tYXNrICE9IDApCisJCXsKKwkJCWJvb2wJCXBlcm1pdDsK KwkJCWJvb2wJCXJlc3RyaWN0X21ldGhvZDsKKworCQkJaWYgKGVudHJ5LT50YWcgPT0gUEdQQV9U QUdfRk9SRUlHTl9KT0lOKQorCQkJCXBlcm1pdCA9IHBncGFfb3BhcXVlX2pvaW5fcGVybWl0c19q b2luKHBqcy0+b3V0ZXJfY291bnQsCisJCQkJCQkJCQkJCQkJICAgcGpzLT5pbm5lcl9jb3VudCwK KwkJCQkJCQkJCQkJCQkgICBwanMtPnJpZHMsCisJCQkJCQkJCQkJCQkJICAgZW50cnksCisJCQkJ CQkJCQkJCQkJICAgJnJlc3RyaWN0X21ldGhvZCk7CisJCQllbHNlCisJCQkJcGVybWl0ID0gcGdw YV9qb2luX21ldGhvZF9wZXJtaXRzX2pvaW4ocGpzLT5vdXRlcl9jb3VudCwKKwkJCQkJCQkJCQkJ CQkgICBwanMtPmlubmVyX2NvdW50LAorCQkJCQkJCQkJCQkJCSAgIHBqcy0+cmlkcywKKwkJCQkJ CQkJCQkJCQkgICBlbnRyeSwKKwkJCQkJCQkJCQkJCQkgICAmcmVzdHJpY3RfbWV0aG9kKTsKKwkJ CWlmICghcGVybWl0KQorCQkJCWpvX2RlbnlfaW5kZXhlcyA9IGJtc19hZGRfbWVtYmVyKGpvX2Rl bnlfaW5kZXhlcywgaSk7CisJCQllbHNlIGlmIChyZXN0cmljdF9tZXRob2QpCisJCQl7CisJCQkJ am1faW5kZXhlcyA9IGJtc19hZGRfbWVtYmVyKGptX2luZGV4ZXMsIGkpOworCQkJCWlmIChqb2lu X21hc2sgIT0gMCAmJiBqb2luX21hc2sgIT0gbXlfam9pbl9tYXNrKQorCQkJCQlqbV9jb25mbGlj dCA9IHRydWU7CisJCQkJam9pbl9tYXNrID0gbXlfam9pbl9tYXNrOworCQkJfQorCQkJY29udGlu dWU7CisJCX0KKworCQkvKiBIYW5kbGUgc2VtaWpvaW4gdW5pcXVlbmVzcyBhZHZpY2UuICovCisJ CWlmIChlbnRyeS0+dGFnID09IFBHUEFfVEFHX1NFTUlKT0lOX1VOSVFVRSB8fAorCQkJZW50cnkt PnRhZyA9PSBQR1BBX1RBR19TRU1JSk9JTl9OT05fVU5JUVVFKQorCQl7CisJCQlib29sCQlhZHZp Y2VfdW5pcXVlOworCQkJYm9vbAkJanRfdW5pcXVlOworCQkJYm9vbAkJanRfbm9uX3VuaXF1ZTsK KwkJCWJvb2wJCXJlc3RyaWN0X21ldGhvZDsKKworCQkJLyogQWR2aWNlIHdhbnRzIHRvIHVuaXF1 ZS1pZnkgYW5kIHVzZSBhIHJlZ3VsYXIgam9pbj8gKi8KKwkJCWFkdmljZV91bmlxdWUgPSAoZW50 cnktPnRhZyA9PSBQR1BBX1RBR19TRU1JSk9JTl9VTklRVUUpOworCisJCQkvKiBQbGFubmVyIGlz IHRyeWluZyB0byB1bmlxdWUtaWZ5IGFuZCB1c2UgYSByZWd1bGFyIGpvaW4/ICovCisJCQlqdF91 bmlxdWUgPSAoam9pbnR5cGUgPT0gSk9JTl9VTklRVUVfSU5ORVIgfHwKKwkJCQkJCSBqb2ludHlw ZSA9PSBKT0lOX1VOSVFVRV9PVVRFUik7CisKKwkJCS8qIFBsYW5uZXIgaXMgdHJ5aW5nIGEgc2Vt aS1qb2luLCB3aXRob3V0IHVuaXF1ZS1pZnlpbmc/ICovCisJCQlqdF9ub25fdW5pcXVlID0gKGpv aW50eXBlID09IEpPSU5fU0VNSSB8fAorCQkJCQkJCSBqb2ludHlwZSA9PSBKT0lOX1JJR0hUX1NF TUkpOworCisJCQkvKgorCQkJICogVGhlc2UgYWR2aWNlIHRhZ3MgYmVoYXZlIHZlcnkgbXVjaCBs aWtlIGpvaW4gbWV0aG9kIGFkdmljZSwgaW4KKwkJCSAqIHRoYXQgdGhleSB3YW50IHRoZSBpbm5l ciBzaWRlIG9mIHRoZSBzZW1pam9pbiB0byBtYXRjaCB0aGUKKwkJCSAqIHJlbGF0aW9ucyBsaXN0 ZWQgaW4gdGhlIGFkdmljZS4gSGVuY2UsIHdlIHRlc3Qgd2hldGhlciBqb2luCisJCQkgKiBtZXRo b2QgYWR2aWNlIHdvdWxkIGVuZm9yY2UgYSBqb2luIG9yZGVyIHJlc3RyaWN0aW9uIGhlcmUsIGFu ZAorCQkJICogZGlzYWxsb3cgdGhlIGpvaW4gaWYgbm90LgorCQkJICoKKwkJCSAqIFhYWC4gVGhp bmsgaGFyZGVyIGFib3V0IHJpZ2h0IHNlbWlqb2lucy4KKwkJCSAqLworCQkJaWYgKCFwZ3BhX2pv aW5fbWV0aG9kX3Blcm1pdHNfam9pbihwanMtPm91dGVyX2NvdW50LAorCQkJCQkJCQkJCQkgICBw anMtPmlubmVyX2NvdW50LAorCQkJCQkJCQkJCQkgICBwanMtPnJpZHMsCisJCQkJCQkJCQkJCSAg IGVudHJ5LAorCQkJCQkJCQkJCQkgICAmcmVzdHJpY3RfbWV0aG9kKSkKKwkJCQlqb19kZW55X2lu ZGV4ZXMgPSBibXNfYWRkX21lbWJlcihqb19kZW55X2luZGV4ZXMsIGkpOworCQkJZWxzZSBpZiAo cmVzdHJpY3RfbWV0aG9kKQorCQkJeworCQkJCWlmICghanRfdW5pcXVlICYmICFqdF9ub25fdW5p cXVlKQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJICogVGhpcyBkb2Vzbid0IHNlZW0gdG8gYmUgYSBz ZW1pam9pbiB0byB3aGljaCBTSl9VTklRVUUKKwkJCQkJICogb3IgU0pfTk9OX1VOSVFVRSBjYW4g YmUgYXBwbGllZC4KKwkJCQkJICovCisJCQkJCWVudHJ5LT5mbGFncyB8PSBQR1BBX1RFX0lOQVBQ TElDQUJMRTsKKwkJCQl9CisJCQkJZWxzZSBpZiAoYWR2aWNlX3VuaXF1ZSAhPSBqdF91bmlxdWUp CisJCQkJCWpvX2RlbnlfaW5kZXhlcyA9IGJtc19hZGRfbWVtYmVyKGpvX2RlbnlfaW5kZXhlcywg aSk7CisJCQl9CisJCQljb250aW51ZTsKKwkJfQorCX0KKworCS8qCisJICogSWYgdGhlIGFkdmlj ZSBpbmRpY2F0ZXMgYm90aCB0aGF0IHRoaXMgam9pbiBvcmRlciBpcyBwZXJtaXNzaWJsZSBhbmQK KwkgKiBhbHNvIHRoYXQgaXQgaXNuJ3QsIHRoZW4gbWFyayBhZHZpY2UgcmVsYXRlZCB0byB0aGUg am9pbiBvcmRlciBhcworCSAqIGNvbmZsaWN0aW5nLgorCSAqLworCWlmIChqb19wZXJtaXRfaW5k ZXhlcyAhPSBOVUxMICYmCisJCShqb19kZW55X2luZGV4ZXMgIT0gTlVMTCB8fCBqb19kZW55X3Jl bF9pbmRleGVzICE9IE5VTEwpKQorCXsKKwkJcGdwYV90cm92ZV9zZXRfZmxhZ3MocGpzLT5qb2lu X2VudHJpZXMsIGpvX3Blcm1pdF9pbmRleGVzLAorCQkJCQkJCSBQR1BBX1RFX0NPTkZMSUNUSU5H KTsKKwkJcGdwYV90cm92ZV9zZXRfZmxhZ3MocGpzLT5qb2luX2VudHJpZXMsIGpvX2RlbnlfaW5k ZXhlcywKKwkJCQkJCQkgUEdQQV9URV9DT05GTElDVElORyk7CisJCXBncGFfdHJvdmVfc2V0X2Zs YWdzKHBqcy0+cmVsX2VudHJpZXMsIGpvX2RlbnlfcmVsX2luZGV4ZXMsCisJCQkJCQkJIFBHUEFf VEVfQ09ORkxJQ1RJTkcpOworCX0KKworCS8qCisJICogSWYgbW9yZSB0aGFuIG9uZSBqb2luIG1l dGhvZCBzcGVjaWZpY2F0aW9uIGlzIHJlbGV2YW50IGhlcmUgYW5kIHRoZXkKKwkgKiBkaWZmZXIs IG1hcmsgdGhlbSBhbGwgYXMgY29uZmxpY3RpbmcuCisJICovCisJaWYgKGptX2NvbmZsaWN0KQor CQlwZ3BhX3Ryb3ZlX3NldF9mbGFncyhwanMtPmpvaW5fZW50cmllcywgam1faW5kZXhlcywKKwkJ CQkJCQkgUEdQQV9URV9DT05GTElDVElORyk7CisKKwkvKgorCSAqIElmIHdlIHdlcmUgYWR2aXNl ZCB0byBkZW55IHRoaXMgam9pbiBvcmRlciwgdGhlbiBkbyBzby4gSG93ZXZlciwgaWYgd2UKKwkg KiB3ZXJlIGFsc28gYWR2aXNlZCB0byBwZXJtaXQgaXQsIHRoZW4gZG8gbm90aGluZywgc2luY2Ug dGhlIGFkdmljZQorCSAqIGNvbmZsaWN0cy4KKwkgKi8KKwlpZiAoKGpvX2RlbnlfaW5kZXhlcyAh PSBOVUxMIHx8IGpvX2RlbnlfcmVsX2luZGV4ZXMgIT0gTlVMTCkgJiYKKwkJam9fcGVybWl0X2lu ZGV4ZXMgPT0gTlVMTCkKKwkJKnBnc19tYXNrX3AgPSAwOworCisJLyoKKwkgKiBJZiB3ZSB3ZXJl IGFkdmlzZWQgdG8gcmVzdHJpY3QgdGhlIGpvaW4gbWV0aG9kLCB0aGVuIGRvIHNvLiBIb3dldmVy LCBpZgorCSAqIHdlIGdvdCBjb25mbGljdGluZyBqb2luIG1ldGhvZCBhZHZpY2Ugb3Igd2VyZSBh bHNvIGFkdmlzZWQgdG8gcmVqZWN0CisJICogdGhpcyBqb2luIG9yZGVyIGNvbXBsZXRlbHksIHRo ZW4gaW5zdGVhZCBkbyBub3RoaW5nLgorCSAqLworCWlmIChqb2luX21hc2sgIT0gMCAmJiAham1f Y29uZmxpY3QgJiYgam9fZGVueV9pbmRleGVzID09IE5VTEwpCisJCSpwZ3NfbWFza19wID0gKCpw Z3NfbWFza19wICYgflBHU19KT0lOX0FOWSkgfCBqb2luX21hc2s7Cit9CisKKy8qCisgKiBUcmFu c2xhdGUgYW4gYWR2aWNlIHRhZyBpbnRvIGEgcGF0aCBnZW5lcmF0aW9uIHN0cmF0ZWd5IG1hc2su CisgKgorICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIHdpdGggdGFnIHR5cGVzIHRoYXQg ZG9uJ3QgcmVwcmVzZW50IGpvaW4KKyAqIHN0cmF0ZWdpZXMuIEluIHN1Y2ggY2FzZXMsIHdlIGp1 c3QgcmV0dXJuIDAsIHdoaWNoIGNhbid0IGJlIGNvbmZ1c2VkIHdpdGgKKyAqIGEgdmFsaWQgbWFz ay4KKyAqLworc3RhdGljIHVpbnQ2NAorcGdwYV9qb2luX3N0cmF0ZWd5X21hc2tfZnJvbV9hZHZp Y2VfdGFnKHBncGFfYWR2aWNlX3RhZ190eXBlIHRhZykKK3sKKwlzd2l0Y2ggKHRhZykKKwl7CisJ CWNhc2UgUEdQQV9UQUdfRk9SRUlHTl9KT0lOOgorCQkJcmV0dXJuIFBHU19GT1JFSUdOSk9JTjsK KwkJY2FzZSBQR1BBX1RBR19NRVJHRV9KT0lOX1BMQUlOOgorCQkJcmV0dXJuIFBHU19NRVJHRUpP SU5fUExBSU47CisJCWNhc2UgUEdQQV9UQUdfTUVSR0VfSk9JTl9NQVRFUklBTElaRToKKwkJCXJl dHVybiBQR1NfTUVSR0VKT0lOX01BVEVSSUFMSVpFOworCQljYXNlIFBHUEFfVEFHX05FU1RFRF9M T09QX1BMQUlOOgorCQkJcmV0dXJuIFBHU19ORVNUTE9PUF9QTEFJTjsKKwkJY2FzZSBQR1BBX1RB R19ORVNURURfTE9PUF9NQVRFUklBTElaRToKKwkJCXJldHVybiBQR1NfTkVTVExPT1BfTUFURVJJ QUxJWkU7CisJCWNhc2UgUEdQQV9UQUdfTkVTVEVEX0xPT1BfTUVNT0laRToKKwkJCXJldHVybiBQ R1NfTkVTVExPT1BfTUVNT0laRTsKKwkJY2FzZSBQR1BBX1RBR19IQVNIX0pPSU46CisJCQlyZXR1 cm4gUEdTX0hBU0hKT0lOOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIDA7CisJfQorfQorCisvKgor ICogRG9lcyBhIGNlcnRhaW4gaXRlbSBvZiBqb2luIG9yZGVyIGFkdmljZSBwZXJtaXQgYSBjZXJ0 YWluIGpvaW4/CisgKi8KK3N0YXRpYyBib29sCitwZ3BhX2pvaW5fb3JkZXJfcGVybWl0c19qb2lu KGludCBvdXRlcl9jb3VudCwgaW50IGlubmVyX2NvdW50LAorCQkJCQkJCSBwZ3BhX2lkZW50aWZp ZXIgKnJpZHMsCisJCQkJCQkJIHBncGFfdHJvdmVfZW50cnkgKmVudHJ5KQoreworCWJvb2wJCWxv b3AgPSB0cnVlOworCWJvb2wJCXN1Ymxpc3QgPSBmYWxzZTsKKwlpbnQJCQlsZW5ndGg7CisJaW50 CQkJb3V0ZXJfbGVuZ3RoOworCXBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0ID0gZW50cnktPnRh cmdldDsKKwlwZ3BhX2FkdmljZV90YXJnZXQgKnByZWZpeF90YXJnZXQ7CisKKwkvKiBXZSBkZWZp bml0ZWx5IGhhdmUgYXQgbGVhc3QgYSBwYXJ0aWFsIG1hdGNoIGZvciB0aGlzIHRyb3ZlIGVudHJ5 LiAqLworCWVudHJ5LT5mbGFncyB8PSBQR1BBX1RFX01BVENIX1BBUlRJQUw7CisKKwkvKgorCSAq IEZpbmQgdGhlIGlubmVybW9zdCBzdWJsaXN0IHRoYXQgY29udGFpbnMgYWxsIGtleXM7IGlmIG5v IHN1Ymxpc3QgZG9lcywKKwkgKiB0aGVuIGNvbnRpbnVlIHByb2Nlc3Npbmcgd2l0aCB0aGUgdG9w bGV2ZWwgbGlzdC4KKwkgKgorCSAqIEZvciBleGFtcGxlLCBpZiB0aGUgYWR2aWNlIHNheXMgSk9J Tl9PUkRFUih0MSB0MiAodDMgdDQgdDUpKSwgdGhlbiB3ZQorCSAqIHNob3VsZCBldmFsdWF0ZSBq b2lucyB0aGF0IG9ubHkgaW52b2x2ZSB0MywgdDQsIGFuZC9vciB0NSBhZ2FpbnN0IHRoZQorCSAq ICh0MyB0NCB0NSkgc3VibGlzdCwgYW5kIG90aGVycyBhZ2FpbnN0IHRoZSBmdWxsIGxpc3QuCisJ ICoKKwkgKiBOb3RlIHRoYXQgKDEpIG91dGVybW9zdCBzdWJsaXN0IGlzIGFsd2F5cyBvcmRlcmVk IGFuZCAoMikgd2hlbmV2ZXIgd2UKKwkgKiB6b29tIGludG8gYW4gdW5vcmRlcmVkIHN1Ymxpc3Qs IHdlIGluc3RhbnRseSBhY2NlcHQgdGhlIHByb3Bvc2VkIGpvaW4uCisJICogSWYgdGhlIGFkdmlj ZSBzYXlzIEpPSU5fT1JERVIodDEgdDIge3QzIHQ0IHQ1fSksIGFueSBhcHByb2FjaCB0bworCSAq IGpvaW5pbmcgdDMsIHQ0LCBhbmQvb3IgdDUgaXMgYWNjZXB0YWJsZS4KKwkgKi8KKwl3aGlsZSAo bG9vcCkKKwl7CisJCUFzc2VydCh0YXJnZXQtPnR0eXBlID09IFBHUEFfVEFSR0VUX09SREVSRURf TElTVCk7CisKKwkJbG9vcCA9IGZhbHNlOworCQlmb3JlYWNoX3B0cihwZ3BhX2FkdmljZV90YXJn ZXQsIGNoaWxkX3RhcmdldCwgdGFyZ2V0LT5jaGlsZHJlbikKKwkJeworCQkJcGdwYV9pdG1fdHlw ZSBpdG07CisKKwkJCWlmIChjaGlsZF90YXJnZXQtPnR0eXBlID09IFBHUEFfVEFSR0VUX0lERU5U SUZJRVIpCisJCQkJY29udGludWU7CisKKwkJCWl0bSA9IHBncGFfaWRlbnRpZmllcnNfbWF0Y2hf dGFyZ2V0KG91dGVyX2NvdW50ICsgaW5uZXJfY291bnQsCisJCQkJCQkJCQkJCQlyaWRzLCBjaGls ZF90YXJnZXQpOworCQkJaWYgKGl0bSA9PSBQR1BBX0lUTV9FUVVBTCB8fCBpdG0gPT0gUEdQQV9J VE1fS0VZU19BUkVfU1VCU0VUKQorCQkJeworCQkJCWlmIChjaGlsZF90YXJnZXQtPnR0eXBlID09 IFBHUEFfVEFSR0VUX09SREVSRURfTElTVCkKKwkJCQl7CisJCQkJCXRhcmdldCA9IGNoaWxkX3Rh cmdldDsKKwkJCQkJc3VibGlzdCA9IHRydWU7CisJCQkJCWxvb3AgPSB0cnVlOworCQkJCQlicmVh azsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJQXNzZXJ0KGNoaWxkX3RhcmdldC0+dHR5 cGUgPT0gUEdQQV9UQVJHRVRfVU5PUkRFUkVEX0xJU1QpOworCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJ CQl9CisJCQl9CisJCX0KKwl9CisKKwkvKgorCSAqIFRyeSB0byBmaW5kIGEgcHJlZml4IG9mIHRo ZSBzZWxlY3RlZCBqb2luIG9yZGVyIGxpc3QgdGhhdCBpcyBleGFjdGx5CisJICogZXF1YWwgdG8g dGhlIG91dGVyIHNpZGUgb2YgdGhlIHByb3Bvc2VkIGpvaW4uCisJICovCisJbGVuZ3RoID0gbGlz dF9sZW5ndGgodGFyZ2V0LT5jaGlsZHJlbik7CisJcHJlZml4X3RhcmdldCA9IHBhbGxvYzBfb2Jq ZWN0KHBncGFfYWR2aWNlX3RhcmdldCk7CisJcHJlZml4X3RhcmdldC0+dHR5cGUgPSBQR1BBX1RB UkdFVF9PUkRFUkVEX0xJU1Q7CisJZm9yIChvdXRlcl9sZW5ndGggPSAxOyBvdXRlcl9sZW5ndGgg PD0gbGVuZ3RoOyArK291dGVyX2xlbmd0aCkKKwl7CisJCXBncGFfaXRtX3R5cGUgaXRtOworCisJ CS8qIEF2b2lkIGxlYWtpbmcgbWVtb3J5IGluIGV2ZXJ5IGxvb3AgaXRlcmF0aW9uLiAqLworCQlp ZiAocHJlZml4X3RhcmdldC0+Y2hpbGRyZW4gIT0gTlVMTCkKKwkJCWxpc3RfZnJlZShwcmVmaXhf dGFyZ2V0LT5jaGlsZHJlbik7CisJCXByZWZpeF90YXJnZXQtPmNoaWxkcmVuID0gbGlzdF9jb3B5 X2hlYWQodGFyZ2V0LT5jaGlsZHJlbiwKKwkJCQkJCQkJCQkJCSBvdXRlcl9sZW5ndGgpOworCisJ CS8qIFNlYXJjaCwgaG9waW5nIHRvIGZpbmQgYW4gZXhhY3QgbWF0Y2guICovCisJCWl0bSA9IHBn cGFfaWRlbnRpZmllcnNfbWF0Y2hfdGFyZ2V0KG91dGVyX2NvdW50LCByaWRzLCBwcmVmaXhfdGFy Z2V0KTsKKwkJaWYgKGl0bSA9PSBQR1BBX0lUTV9FUVVBTCkKKwkJCWJyZWFrOworCisJCS8qCisJ CSAqIElmIHRoZSBwcmVmaXggb2YgdGhlIGpvaW4gb3JkZXIgbGlzdCB0aGF0IHdlJ3JlIGNvbnNp ZGVyaW5nCisJCSAqIGluY2x1ZGVzIHNvbWUgYnV0IG5vdCBhbGwgb2YgdGhlIG91dGVyIHJlbHMs IHdlIGNhbiBtYWtlIHRoZSBwcmVmaXgKKwkJICogbG9uZ2VyIHRvIGZpbmQgYW4gZXhhY3QgbWF0 Y2guIEJ1dCB0aGUgYWR2aWNlIGhhc24ndCBtZW50aW9uZWQKKwkJICogZXZlcnl0aGluZyB0aGF0 J3MgcGFydCBvZiBvdXIgb3V0ZXIgcmVsIHlldCwgYnV0IGhhcyBtZW50aW9uZWQKKwkJICogdGhp bmdzIHRoYXQgYXJlIG5vdCwgdGhlbiB0aGlzIGpvaW4gZG9lc24ndCBtYXRjaCB0aGUgam9pbiBv cmRlcgorCQkgKiBsaXN0LgorCQkgKi8KKwkJaWYgKGl0bSAhPSBQR1BBX0lUTV9UQVJHRVRTX0FS RV9TVUJTRVQpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoKKwkgKiBJZiB0aGUgcHJldmlv dXMgbG9vcGVkIHN0b3BwZWQgYmVmb3JlIHRoZSBwcmVmaXhfdGFyZ2V0IGluY2x1ZGVkIHRoZQor CSAqIGVudGlyZSBqb2luIG9yZGVyIGxpc3QsIHRoZW4gdGhlIG5leHQgbWVtYmVyIG9mIHRoZSBq b2luIG9yZGVyIGxpc3QKKwkgKiBtdXN0IGV4YWN0bHkgbWF0Y2ggdGhlIGlubmVyIHNpZGUgb2Yg dGhlIGpvaW4uCisJICoKKwkgKiBFeGFtcGxlOiBHaXZlbiBKT0lOX09SREVSKHQxIHQyICh0MyB0 NCB0NSkpLCBpZiB0aGUgb3V0ZXIgc2lkZSBvZiB0aGUKKwkgKiBjdXJyZW50IGpvaW4gaW5jbHVk ZXMgb25seSB0MSwgdGhlbiB0aGUgaW5uZXIgc2lkZSBtdXN0IGJlIGV4YWN0bHkgdDI7CisJICog aWYgdGhlIG91dGVyIHNpZGUgaW5jbHVkZXMgYm90aCB0MSBhbmQgdDIsIHRoZW4gdGhlIGlubmVy IHNpZGUgbXVzdAorCSAqIGluY2x1ZGUgZXhhY3RseSB0MywgdDQsIGFuZCB0NS4KKwkgKi8KKwlp ZiAob3V0ZXJfbGVuZ3RoIDwgbGVuZ3RoKQorCXsKKwkJcGdwYV9hZHZpY2VfdGFyZ2V0ICppbm5l cl90YXJnZXQ7CisJCXBncGFfaXRtX3R5cGUgaXRtOworCisJCWlubmVyX3RhcmdldCA9IGxpc3Rf bnRoKHRhcmdldC0+Y2hpbGRyZW4sIG91dGVyX2xlbmd0aCk7CisKKwkJaXRtID0gcGdwYV9pZGVu dGlmaWVyc19tYXRjaF90YXJnZXQoaW5uZXJfY291bnQsIHJpZHMgKyBvdXRlcl9jb3VudCwKKwkJ CQkJCQkJCQkJaW5uZXJfdGFyZ2V0KTsKKworCQkvKgorCQkgKiBCZWZvcmUgcmV0dXJuaW5nLCBj b25zaWRlciB3aGV0aGVyIHdlIG5lZWQgdG8gbWFyayB0aGlzIGVudHJ5IGFzCisJCSAqIGZ1bGx5 IG1hdGNoZWQuIElmIHdlJ3JlIGNvbnNpZGVyaW5nIHRoZSBmdWxsIGxpc3QgcmF0aGVyIHRoYW4g YQorCQkgKiBzdWJsaXN0LCBhbmQgaWYgd2UgZm91bmQgZXZlcnkgaXRlbSBidXQgb25lIG9uIHRo ZSBvdXRlciBzaWRlIG9mCisJCSAqIHRoZSBqb2luIGFuZCB0aGUgbGFzdCBpdGVtIG9uIHRoZSBp bm5lciBzaWRlIG9mIHRoZSBqb2luLCB0aGVuIHRoZQorCQkgKiBhbnN3ZXIgaXMgeWVzLgorCQkg Ki8KKwkJaWYgKCFzdWJsaXN0ICYmIG91dGVyX2xlbmd0aCArIDEgPT0gbGVuZ3RoICYmIGl0bSA9 PSBQR1BBX0lUTV9FUVVBTCkKKwkJCWVudHJ5LT5mbGFncyB8PSBQR1BBX1RFX01BVENIX0ZVTEw7 CisKKwkJcmV0dXJuIChpdG0gPT0gUEdQQV9JVE1fRVFVQUwpOworCX0KKworCS8qCisJICogSWYg d2UgZ2V0IGhlcmUsIHRoZW4gdGhlIG91dGVyIHNpZGUgb2YgdGhlIGpvaW4gaW5jbHVkZXMgdGhl IGVudGlyZXR5CisJICogb2YgdGhlIGpvaW4gb3JkZXIgbGlzdC4gSW4gdGhpcyBjYXNlLCB3ZSBi ZWhhdmUgZGlmZmVyZW50bHkgZGVwZW5kaW5nCisJICogb24gd2hldGhlciB3ZSdyZSBsb29raW5n IGF0IHRoZSB0b3AtbGV2ZWwgam9pbiBvcmRlciBsaXN0IG9yIHN1Ymxpc3QuCisJICogQXQgdGhl IHRvcC1sZXZlbCwgd2UgdHJlYXQgdGhlIHNwZWNpZmllZCBsaXN0IGFzIG1hbmRhdGluZyB0aGF0 IHRoZQorCSAqIGFjdHVhbCBqb2luIG9yZGVyIGhhcyB0aGUgZ2l2ZW4gbGlzdCBhcyBhIHByZWZp eCwgYnV0IGEgc3VibGlzdAorCSAqIHJlcXVpcmVzIGFuIGV4YWN0IG1hdGNoLgorCSAqCisJICog RXhtYXBsZTogR2l2ZW4gSk9JTl9PUkRFUih0MSB0MiAodDMgdDQgdDUpKSwgd2UgbXVzdCBzdGFy dCBieSBqb2luaW5nCisJICogYWxsIGZpdmUgb2YgdGhvc2UgcmVsYXRpb25zIGFuZCBpbiB0aGF0 IHNlcXVlbmNlLCBidXQgb25jZSB0aGF0IGlzCisJICogZG9uZSwgaXQncyBPSyB0byBqb2luIGFu eSBvdGhlciByZWxzIHRoYXQgYXJlIHBhcnQgb2YgdGhlIGpvaW4gcHJvYmxlbS4KKwkgKiBUaGlz IGFsbG93cyBhIHVzZXIgdG8gc3BlY2lmeSB0aGUgZHJpdmluZyB0YWJsZSBhbmQgcGVyaGFwcyB0 aGUgZmlyc3QKKwkgKiBmZXcgdGhpbmdzIHRvIHdoaWNoIGl0IHNob3VsZCBiZSBqb2luZWQgd2hp bGUgbGVhdmluZyB0aGUgcmVzdCBvZiB0aGUKKwkgKiBqb2luIG9yZGVyIHVwIHRoZSBvcHRpbWl6 ZXIuIEJ1dCBpdCBzZWVtcyBsaWtlIGl0IHdvdWxkIGJlIHN1cnByaXNpbmcsCisJICogZ2l2ZW4g dGhhdCBzcGVjaWZpY2F0aW9uLCBpZiB0aGUgdXNlciBjb3VsZCBhZGQgdDYgdG8gdGhlICh0MyB0 NCB0NSkKKwkgKiBzdWItam9pbiwgc28gd2UgZG9uJ3QgYWxsb3cgdGhhdC4gSWYgd2UgZGlkIHdh bnQgdG8gYWxsb3cgaXQsIHRoZSBsb2dpYworCSAqIGVhcmxpZXIgaW4gdGhpcyBmdW5jdGlvbiB3 b3VsZCByZXF1aXJlIHN1YnN0YW50aWFsIGFkanVzdG1lbnQ6IHdlIGNvdWxkCisJICogYWxsb3cg dGhlIHQzLXQ0LXQ1LXQ2IGpvaW4gdG8gYmUgYnVpbHQgaGVyZSwgYnV0IHRoZSBuZXh0IHN0ZXAg b2YKKwkgKiBqb2luaW5nIHQxLXQyIHRvIHRoZSByZXN1bHQgd291bGQgc3RpbGwgYmUgcmVqZWN0 ZWQuCisJICovCisJcmV0dXJuICFzdWJsaXN0OworfQorCisvKgorICogRG9lcyBhIGNlcnRhaW4g aXRlbSBvZiBqb2luIG1ldGhvZCBhZHZpY2UgcGVybWl0IGEgY2VydGFpbiBqb2luPworICoKKyAq IEFkdmljZSBzdWNoIGFzIEhBU0hfSk9JTigoeCB5KSkgbWVhbnMgdGhhdCB0aGVyZSBzaG91bGQg YmUgYSBoYXNoIGpvaW4gd2l0aAorICogZXhhY3RseSB4IGFuZCB5IG9uIHRoZSBpbm5lciBzaWRl LiBPYnZpb3VzbHksIHRoaXMgbWVhbnMgdGhhdCBpZiB3ZSBhcmUKKyAqIGNvbnNpZGVyaW5nIGEg am9pbiB3aXRoIGV4YWN0bHkgeCBhbmQgeSBvbiB0aGUgaW5uZXIgc2lkZSwgd2Ugc2hvdWxkIGVu Zm9yY2UKKyAqIHRoZSB1c2Ugb2YgYSBoYXNoIGpvaW4uIEhvd2V2ZXIsIGl0IGFsc28gbWVhbnMg dGhhdCB3ZSBtdXN0IHJlamVjdCBzb21lCisgKiBpbmNvbXBhdGlibGUgam9pbiBvcmRlcnMgZW50 aXJlbHkuICBGb3IgZXhhbXBsZSwgYSBqb2luIHdpdGggZXhhY3RseSB4CisgKiBhbmQgeSBvbiB0 aGUgb3V0ZXIgc2lkZSBzaG91bGRuJ3QgYmUgYWxsb3dlZCwgYmVjYXVzZSBzdWNoIHBhdGhzIG1p Z2h0IHdpbgorICogb3ZlciB0aGUgYWR2aWNlLWRyaXZlbiBwYXRoIG9uIGNvc3QuCisgKgorICog VG8gYWNjb21tb2RhdGUgdGhlc2UgcmVxdWlyZW1lbnRzLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMg dHJ1ZSBpZiB0aGUgam9pbgorICogc2hvdWxkIGJlIGFsbG93ZWQgYW5kIGZhbHNlIGlmIGl0IHNo b3VsZCBub3QuIEZ1cnRoZXJtb3JlLCAqcmVzdHJpY3RfbWV0aG9kCisgKiBpcyBzZXQgdG8gdHJ1 ZSBpZiB0aGUgam9pbiBtZXRob2Qgc2hvdWxkIGJlIGVuZm9yY2VkIGFuZCBmYWxzZSBpZiBub3Qu CisgKi8KK3N0YXRpYyBib29sCitwZ3BhX2pvaW5fbWV0aG9kX3Blcm1pdHNfam9pbihpbnQgb3V0 ZXJfY291bnQsIGludCBpbm5lcl9jb3VudCwKKwkJCQkJCQkgIHBncGFfaWRlbnRpZmllciAqcmlk cywKKwkJCQkJCQkgIHBncGFfdHJvdmVfZW50cnkgKmVudHJ5LAorCQkJCQkJCSAgYm9vbCAqcmVz dHJpY3RfbWV0aG9kKQoreworCXBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0ID0gZW50cnktPnRh cmdldDsKKwlwZ3BhX2l0bV90eXBlIGlubmVyX2l0bTsKKwlwZ3BhX2l0bV90eXBlIG91dGVyX2l0 bTsKKwlwZ3BhX2l0bV90eXBlIGpvaW5faXRtOworCisJLyogV2UgZGVmaW5pdGVseSBoYXZlIGF0 IGxlYXN0IGEgcGFydGlhbCBtYXRjaCBmb3IgdGhpcyB0cm92ZSBlbnRyeS4gKi8KKwllbnRyeS0+ ZmxhZ3MgfD0gUEdQQV9URV9NQVRDSF9QQVJUSUFMOworCisJKnJlc3RyaWN0X21ldGhvZCA9IGZh bHNlOworCisJLyoKKwkgKiBJZiBvdXIgaW5uZXIgcmVsIG1lbnRpb25zIGV4YWN0bHkgdGhlIHNh bWUgcmVsYXRpb25zIGFzIHRoZSBhZHZpY2UKKwkgKiB0YXJnZXQsIGFsbG93IHRoZSBqb2luIGFu ZCBlbmZvcmNlIHRoZSBqb2luIG1ldGhvZCByZXN0cmljdGlvbi4KKwkgKgorCSAqIElmIG91ciBp bm5lciByZWwgbWVudGlvbnMgYSBzdXBlcnNldCBvZiB0aGUgdGFyZ2V0IHJlbGF0aW9ucywgYWxs b3cgdGhlCisJICogam9pbi4gVGhlIGpvaW4gd2UgY2FyZSBhYm91dCBoYXMgYWxyZWFkeSB0YWtl biBwbGFjZSwgYW5kIHRoaXMgYWR2aWNlCisJICogaW1wb3NlcyBubyBmdXJ0aGVyIHJlc3RyaWN0 aW9ucy4KKwkgKi8KKwlpbm5lcl9pdG0gPSBwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3RhcmdldChp bm5lcl9jb3VudCwKKwkJCQkJCQkJCQkJICByaWRzICsgb3V0ZXJfY291bnQsCisJCQkJCQkJCQkJ CSAgdGFyZ2V0KTsKKwlpZiAoaW5uZXJfaXRtID09IFBHUEFfSVRNX0VRVUFMKQorCXsKKwkJZW50 cnktPmZsYWdzIHw9IFBHUEFfVEVfTUFUQ0hfRlVMTDsKKwkJKnJlc3RyaWN0X21ldGhvZCA9IHRy dWU7CisJCXJldHVybiB0cnVlOworCX0KKwllbHNlIGlmIChpbm5lcl9pdG0gPT0gUEdQQV9JVE1f VEFSR0VUU19BUkVfU1VCU0VUKQorCQlyZXR1cm4gdHJ1ZTsKKworCS8qCisJICogSWYgb3VyIG91 dGVyIHJlbCBtZW50aW9ucyBhIHN1cHNlcnNldCBvZiB0aGUgcmVsYXRpb25zIGluIHRoZSBhZHZp Y2UKKwkgKiB0YXJnZXQsIG5vIHJlc3RyaWN0aW9ucyBhcHBseS4gVGhlIGpvaW4gd2UgY2FyZSBo YXMgYWxyZWFkeSB0YWtlbgorCSAqIHBsYWNlLCBhbmQgdGhpcyBhZHZpY2UgaW1wb3NlcyBubyBm dXJ0aGVyIHJlc3RyaWN0aW9ucy4KKwkgKgorCSAqIE9uIHRoZSBvdGhlciBoYW5kLCBpZiBvdXIg b3V0ZXIgcmVsIG1lbnRpb25zIGV4YWN0bHkgdGhlIHJlbGF0aW9ucworCSAqIG1lbnRpb25lZCBp biB0aGUgYWR2aWNlIHRhcmdldCwgdGhlIHBsYW5uZXIgaXMgdHJ5aW5nIHRvIHJldmVyc2UgdGhl CisJICogc2lkZXMgb2YgdGhlIGpvaW4gYXMgY29tcGFyZWQgd2l0aCBvdXIgZGVzaXJlZCBvdXRj b21lLiBSZWplY3QgdGhhdC4KKwkgKi8KKwlvdXRlcl9pdG0gPSBwZ3BhX2lkZW50aWZpZXJzX21h dGNoX3RhcmdldChvdXRlcl9jb3VudCwKKwkJCQkJCQkJCQkJICByaWRzLCB0YXJnZXQpOworCWlm IChvdXRlcl9pdG0gPT0gUEdQQV9JVE1fVEFSR0VUU19BUkVfU1VCU0VUKQorCQlyZXR1cm4gdHJ1 ZTsKKwllbHNlIGlmIChvdXRlcl9pdG0gPT0gUEdQQV9JVE1fRVFVQUwpCisJCXJldHVybiBmYWxz ZTsKKworCS8qCisJICogSWYgdGhlIGFkdmljZSB0YXJnZXQgbWVudGlvbnMgb25seSBhIHNpbmds ZSByZWxhdGlvbiwgdGhlIHRlc3QgYmVsb3cKKwkgKiBjYW5ub3QgZXZlciBwYXNzLCBzbyBzYXZl IHNvbWUgd29yayBieSBleGl0aW5nIG5vdy4KKwkgKi8KKwlpZiAodGFyZ2V0LT50dHlwZSA9PSBQ R1BBX1RBUkdFVF9JREVOVElGSUVSKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKgorCSAqIElmIGV2 ZXJ5dGhpbmcgaW4gdGhlIGpvaW5yZWwgaXMgYXBwZWFycyBpbiB0aGUgYWR2aWNlIHRhcmdldCwg d2UncmUKKwkgKiBiZWxvdyB0aGUgbGV2ZWwgb2YgdGhlIGpvaW4gd2Ugd2FudCB0byBjb250cm9s LgorCSAqCisJICogRm9yIGV4YW1wbGUsIEhBU0hfSk9JTigoeCB5KSkgZG9lc24ndCByZXN0cmlj dCBob3cgeCBhbmQgeSBjYW4gYmUKKwkgKiBqb2luZWQuCisJICoKKwkgKiBUaGlzIGxvb2t1cCBz aG91bGRuJ3QgcmV0dXJuIFBHUEFfSVRNX0RJU0pPSU5ULCBiZWNhdXNlIGFueSBzdWNoIGFkdmlj ZQorCSAqIHNob3VsZCBub3QgaGF2ZSBiZWVuIHJldHVybmVkIGZyb20gdGhlIHRyb3ZlIGluIHRo ZSBmaXJzdCBwbGFjZS4KKwkgKi8KKwlqb2luX2l0bSA9IHBncGFfaWRlbnRpZmllcnNfbWF0Y2hf dGFyZ2V0KG91dGVyX2NvdW50ICsgaW5uZXJfY291bnQsCisJCQkJCQkJCQkJCSByaWRzLCB0YXJn ZXQpOworCUFzc2VydChqb2luX2l0bSAhPSBQR1BBX0lUTV9ESVNKT0lOVCk7CisJaWYgKGpvaW5f aXRtID09IFBHUEFfSVRNX0tFWVNfQVJFX1NVQlNFVCB8fAorCQlqb2luX2l0bSA9PSBQR1BBX0lU TV9FUVVBTCkKKwkJcmV0dXJuIHRydWU7CisKKwkvKgorCSAqIFdlJ3ZlIGFscmVhZHkgcGVybWl0 dGVkIGFsbCBhbGxvd2FibGUgY2FzZXMsIHNvIHJlamVjdCB0aGlzLgorCSAqCisJICogSWYgd2Ug cmVhY2ggdGhpcyBwb2ludCwgdGhlbiB0aGUgYWR2aWNlIG92ZXJsYXBzIHdpdGggdGhpcyBqb2lu IGJ1dAorCSAqIGlzbid0IGVudGlyZWx5IGNvbnRhaW5lZCB3aXRoaW4gZWl0aGVyIHNpZGUsIGFu ZCB0aGVyZSdzIGFsc28gYXQgbGVhc3QKKwkgKiBvbmUgcmVsYXRpb24gcHJlc2VudCBpbiB0aGUg am9pbiB0aGF0IGlzbid0IG1lbnRpb25lZCBieSB0aGUgYWR2aWNlLgorCSAqCisJICogRm9yIGlu c3RhbmNlLCBpbiB0aGUgSEFTSF9KT0lOKCh4IHkpKSBleGFtcGxlLCB3ZSB3b3VsZCByZWFjaCBo ZXJlIGlmIHgKKwkgKiB3ZXJlIG9uIG9uZSBzaWRlIG9mIHRoZSBqb2luLCB5IG9uIHRoZSBvdGhl ciwgYW5kIGF0IGxlYXN0IG9uZSBvZiB0aGUKKwkgKiB0d28gc2lkZXMgYWxzbyBpbmNsdWRlZCBz b21lIG90aGVyIHJlbGF0aW9uLCBzYXkgdC4gSW4gdGhhdCBjYXNlLAorCSAqIGFjY2VwdGluZyB0 aGlzIGpvaW4gd291bGQgYWxsb3cgdGhlICh4IHkgdCkgam9pbnJlbCB0byBjb250YWluCisJICog bm9uLWRpc2FibGVkIHBhdGhzIHRoYXQgZG8gbm90IHB1dCAoeCB5KSBvbiB0aGUgaW5uZXIgc2lk ZSBvZiBhIGhhc2gKKwkgKiBqb2luOyB3ZSBjb3VsZCBpbnN0ZWFkIGVuZCB1cCB3aXRoIHNvbWV0 aGluZyBsaWtlICh4IEpPSU4gdCkgSk9JTiB5LgorCSAqLworCXJldHVybiBmYWxzZTsKK30KKwor LyoKKyAqIERvZXMgYWR2aWNlIGNvbmNlcm5pbmcgYW4gb3BhcXVlIGpvaW4gcGVybWl0IGEgY2Vy dGFpbiBqb2luPworICoKKyAqIEJ5IGFuIG9wYXF1ZSBqb2luLCB3ZSBtZWFuIG9uZSB3aGVyZSB0 aGUgZXhhY3QgbWVjaGFuaXNtIGJ5IHdoaWNoIHRoZQorICogam9pbiBpcyBwZXJmb3JtZWQgaXMg bm90IHZpc2libGUgdG8gUG9zdGdyZVNRTC4gQ3VycmVudGx5IHRoaXMgaXMgdGhlCisgKiBjYXNl IG9ubHkgZm9yIGZvcmVpZ24gam9pbnM6IEZPUkVJR05fSk9JTigoeCB5IHopKSBtZWFucyB0aGF0 IHgsIHksIGFuZAorICogeiBhcmUgam9pbmVkIG9uIHRoZSByZW1vdGUgc2lkZSwgYnV0IHdlIGtu b3cgbm90aGluZyBhYm91dCB0aGUgam9pbiBvcmRlcgorICogb3Igam9pbiBtZXRob2RzIHVzZWQg b3ZlciB0aGVyZS4KKyAqLworc3RhdGljIGJvb2wKK3BncGFfb3BhcXVlX2pvaW5fcGVybWl0c19q b2luKGludCBvdXRlcl9jb3VudCwgaW50IGlubmVyX2NvdW50LAorCQkJCQkJCSAgcGdwYV9pZGVu dGlmaWVyICpyaWRzLAorCQkJCQkJCSAgcGdwYV90cm92ZV9lbnRyeSAqZW50cnksCisJCQkJCQkJ ICBib29sICpyZXN0cmljdF9tZXRob2QpCit7CisJcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQg PSBlbnRyeS0+dGFyZ2V0OworCXBncGFfaXRtX3R5cGUgam9pbl9pdG07CisKKwkvKiBXZSBkZWZp bml0ZWx5IGhhdmUgYXQgbGVhc3QgYSBwYXJ0aWFsIG1hdGNoIGZvciB0aGlzIHRyb3ZlIGVudHJ5 LiAqLworCWVudHJ5LT5mbGFncyB8PSBQR1BBX1RFX01BVENIX1BBUlRJQUw7CisKKwkqcmVzdHJp Y3RfbWV0aG9kID0gZmFsc2U7CisKKwlqb2luX2l0bSA9IHBncGFfaWRlbnRpZmllcnNfbWF0Y2hf dGFyZ2V0KG91dGVyX2NvdW50ICsgaW5uZXJfY291bnQsCisJCQkJCQkJCQkJCSByaWRzLCB0YXJn ZXQpOworCWlmIChqb2luX2l0bSA9PSBQR1BBX0lUTV9FUVVBTCkKKwl7CisJCS8qCisJCSAqIFdl IGhhdmUgYW4gZXhhY3QgbWF0Y2gsIGFuZCBzaG91bGQgdGhlcmVmb3JlIGFsbG93IHRoZSBqb2lu IGFuZAorCQkgKiBlbmZvcmNlIHRoZSB1c2Ugb2YgdGhlIHJlbGV2YW50IG9wYXF1ZSBqb2luIG1l dGhvZC4KKwkJICovCisJCWVudHJ5LT5mbGFncyB8PSBQR1BBX1RFX01BVENIX0ZVTEw7CisJCSpy ZXN0cmljdF9tZXRob2QgPSB0cnVlOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlpZiAoam9pbl9p dG0gPT0gUEdQQV9JVE1fS0VZU19BUkVfU1VCU0VUIHx8CisJCWpvaW5faXRtID09IFBHUEFfSVRN X1RBUkdFVFNfQVJFX1NVQlNFVCkKKwl7CisJCS8qCisJCSAqIElmIGpvaW5faXRtID09IFBHUEFf SVRNX1RBUkdFVFNfQVJFX1NVQlNFVCwgdGhlbiB0aGUgam9pbiB3ZSBjYXJlCisJCSAqIGFib3V0 IGhhcyBhbHJlYWR5IHRha2VuIHBsYWNlIGFuZCBubyBmdXJ0aGVyIHJlc3RyaWN0aW9ucyBhcHBs eS4KKwkJICoKKwkJICogSWYgam9pbl9pdG0gPT0gUEdQQV9JVE1fS0VZU19BUkVfU1VCU0VULCB3 ZSdyZSBzdGlsbCBidWlsZGluZyB1cCB0bworCQkgKiB0aGUgam9pbiB3ZSBjYXJlIGFib3V0IGFu ZCBoYXZlIG5vdCBpbnRyb2R1Y2VkIGFueSBleHRyYW5lb3VzCisJCSAqIHJlbGF0aW9ucyBub3Qg bmFtZWQgaW4gdGhlIGFkdmljZS4gTm90ZSB0aGF0IEZvcmVpZ25TY2FuIHBhdGhzIGZvcgorCQkg KiBqb2lucyBhcmUgYnVpbHQgdXAgZnJvbSBGb3JlaWduU2NhbiBwYXRocyBmcm9tIHVuZGVybHlp bmcgam9pbnMgYW5kCisJCSAqIHNjYW5zLCBzbyB3ZSBtdXN0IG5vdCBkaXNhYmxlIHRoaXMgam9p biB3aGVuIGNvbnNpZGVyaW5nIGEgc3Vic2V0CisJCSAqIG9mIHRoZSByZWxhdGlvbnMgd2UgdWx0 aW1hdGVseSB3YW50LgorCQkgKi8KKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyoKKwkgKiBUaGUg YWR2aWNlIG92ZXJsYXBzIHRoZSBqb2luLCBidXQgYXQgbGVhc3Qgb25lIHJlbGF0aW9uIGlzIHBy ZXNlbnQgaW4KKwkgKiB0aGUgam9pbiB0aGF0IGlzbid0IG1lbnRpb25lZCBieSB0aGUgYWR2aWNl LiBXZSB3YW50IHRvIGRpc2FibGUgc3VjaAorCSAqIHBhdGhzIHNvIHRoYXQgd2UgYWN0dWFsbHkg cHVzaCBkb3duIHRoZSBqb2luIGFzIGludGVuZGVkLgorCSAqLworCXJldHVybiBmYWxzZTsKK30K KworLyoKKyAqIEFwcGx5IHNjYW4gYWR2aWNlIHRvIGEgUmVsT3B0SW5mby4KKyAqCisgKiBYWFgu IEZvciBiaXRtYXAgaGVhcCBzY2Fucywgd2UncmUganVzdCBpZ25vcmluZyB0aGUgaW5kZXggaW5m b3JtYXRpb24gZnJvbQorICogdGhlIGFkdmljZS4gVGhhdCdzIG5vdCBjb29sLgorICovCitzdGF0 aWMgdm9pZAorcGdwYV9wbGFubmVyX2FwcGx5X3NjYW5fYWR2aWNlKFJlbE9wdEluZm8gKnJlbCwK KwkJCQkJCQkgICBwZ3BhX3Ryb3ZlX2VudHJ5ICpzY2FuX2VudHJpZXMsCisJCQkJCQkJICAgQml0 bWFwc2V0ICpzY2FuX2luZGV4ZXMsCisJCQkJCQkJICAgcGdwYV90cm92ZV9lbnRyeSAqcmVsX2Vu dHJpZXMsCisJCQkJCQkJICAgQml0bWFwc2V0ICpyZWxfaW5kZXhlcykKK3sKKwlib29sCQlnYXRo ZXJfY29uZmxpY3QgPSBmYWxzZTsKKwlCaXRtYXBzZXQgICpnYXRoZXJfcGFydGlhbF9tYXRjaCA9 IE5VTEw7CisJQml0bWFwc2V0ICAqZ2F0aGVyX2Z1bGxfbWF0Y2ggPSBOVUxMOworCWludAkJCWkg PSAtMTsKKwlwZ3BhX3Ryb3ZlX2VudHJ5ICpzY2FuX2VudHJ5ID0gTlVMTDsKKwlpbnQJCQlmbGFn czsKKwlib29sCQlzY2FuX3R5cGVfY29uZmxpY3QgPSBmYWxzZTsKKwlCaXRtYXBzZXQgICpzY2Fu X3R5cGVfaW5kZXhlcyA9IE5VTEw7CisJQml0bWFwc2V0ICAqc2Nhbl90eXBlX3JlbF9pbmRleGVz ID0gTlVMTDsKKwl1aW50NjQJCWdhdGhlcl9tYXNrID0gMDsKKwl1aW50NjQJCXNjYW5fdHlwZSA9 IDA7CisKKwkvKiBTY3J1dGluaXplIGF2YWlsYWJsZSBzY2FuIGFkdmljZS4gKi8KKwl3aGlsZSAo KGkgPSBibXNfbmV4dF9tZW1iZXIoc2Nhbl9pbmRleGVzLCBpKSkgPj0gMCkKKwl7CisJCXBncGFf dHJvdmVfZW50cnkgKm15X2VudHJ5ID0gJnNjYW5fZW50cmllc1tpXTsKKwkJdWludDY0CQlteV9z Y2FuX3R5cGUgPSAwOworCisJCS8qIFRyYW5zbGF0ZSBvdXIgYWR2aWNlIHRhZ3MgdG8gYSBzY2Fu IHN0cmF0ZWd5IGFkdmljZSB2YWx1ZS4gKi8KKwkJaWYgKG15X2VudHJ5LT50YWcgPT0gUEdQQV9U QUdfQklUTUFQX0hFQVBfU0NBTikKKwkJCW15X3NjYW5fdHlwZSA9IFBHU19CSVRNQVBTQ0FOOwor CQllbHNlIGlmIChteV9lbnRyeS0+dGFnID09IFBHUEFfVEFHX0lOREVYX09OTFlfU0NBTikKKwkJ CW15X3NjYW5fdHlwZSA9IFBHU19JTkRFWE9OTFlTQ0FOIHwgUEdTX0NPTlNJREVSX0lOREVYT05M WTsKKwkJZWxzZSBpZiAobXlfZW50cnktPnRhZyA9PSBQR1BBX1RBR19JTkRFWF9TQ0FOKQorCQkJ bXlfc2Nhbl90eXBlID0gUEdTX0lOREVYU0NBTjsKKwkJZWxzZSBpZiAobXlfZW50cnktPnRhZyA9 PSBQR1BBX1RBR19TRVFfU0NBTikKKwkJCW15X3NjYW5fdHlwZSA9IFBHU19TRVFTQ0FOOworCQll bHNlIGlmIChteV9lbnRyeS0+dGFnID09IFBHUEFfVEFHX1RJRF9TQ0FOKQorCQkJbXlfc2Nhbl90 eXBlID0gUEdTX1RJRFNDQU47CisKKwkJLyoKKwkJICogSWYgdGhpcyBpcyB1bmRlcnN0YW5kYWJs ZSBzY2FuIGFkdmljZSwgaGFuZyBvbiB0byB0aGUgZW50cnksIHRoZQorCQkgKiBpbmZlcnJlZCBz Y2FuIHR5cGUgdHlwZSwgYW5kIHRoZSBpbmRleCBhdCB3aGljaCB3ZSBmb3VuZCBpdC4KKwkJICoK KwkJICogQWxzbyBtYWtlIGEgbm90ZSBpZiB3ZSBzZWUgY29uZmxpY3Rpbmcgc2NhbiB0eXBlIGFk dmljZS4gTm90ZSB0aGF0CisJCSAqIHdlIHJlZ2FyZCB0d28gaW5kZXggc3BlY2lmaWNhdGlvbnMg YXMgY29uZmxpY3RpbmcgdW5sZXNzIHRoZXkgbWF0Y2gKKwkJICogZXhhY3RseS4gSW4gdGhlb3J5 LCBwZXJoYXBzIHdlIGNvdWxkIHJlZ2FyZCBJTkRFWF9TQ0FOKGEgYykgYW5kCisJCSAqIElOREVY X1NDQU4oYSBiLmMpIGFzIG5vbi1jb25mbGljdGluZyBpZiBpdCBoYXBwZW5zIHRoYXQgdGhlIG9u bHkKKwkJICogaW5kZXggbmFtZWQgYyBpcyBpbiBzY2hlbWEgYiwgYnV0IGl0IGRvZXNuJ3Qgc2Vl bSB3b3J0aCB0aGUgY29kZS4KKwkJICovCisJCWlmIChteV9zY2FuX3R5cGUgIT0gMCkKKwkJewor CQkJaWYgKHNjYW5fdHlwZSAhPSAwICYmIHNjYW5fdHlwZSAhPSBteV9zY2FuX3R5cGUpCisJCQkJ c2Nhbl90eXBlX2NvbmZsaWN0ID0gdHJ1ZTsKKwkJCWlmICghc2Nhbl90eXBlX2NvbmZsaWN0ICYm IHNjYW5fZW50cnkgIT0gTlVMTCAmJgorCQkJCW15X2VudHJ5LT50YXJnZXQtPml0YXJnZXQgIT0g TlVMTCAmJgorCQkJCXNjYW5fZW50cnktPnRhcmdldC0+aXRhcmdldCAhPSBOVUxMICYmCisJCQkJ IXBncGFfaW5kZXhfdGFyZ2V0c19lcXVhbChzY2FuX2VudHJ5LT50YXJnZXQtPml0YXJnZXQsCisJ CQkJCQkJCQkJICBteV9lbnRyeS0+dGFyZ2V0LT5pdGFyZ2V0KSkKKwkJCQlzY2FuX3R5cGVfY29u ZmxpY3QgPSB0cnVlOworCQkJc2Nhbl9lbnRyeSA9IG15X2VudHJ5OworCQkJc2Nhbl90eXBlID0g bXlfc2Nhbl90eXBlOworCQkJc2Nhbl90eXBlX2luZGV4ZXMgPSBibXNfYWRkX21lbWJlcihzY2Fu X3R5cGVfaW5kZXhlcywgaSk7CisJCX0KKwl9CisKKwkvKiBTY3J1dGluaXplIGF2YWlsYWJsZSBn YXRoZXItcmVsYXRlZCBhbmQgcGFydGl0aW9ud2lzZSBhZHZpY2UuICovCisJaSA9IC0xOworCXdo aWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihyZWxfaW5kZXhlcywgaSkpID49IDApCisJeworCQlw Z3BhX3Ryb3ZlX2VudHJ5ICpteV9lbnRyeSA9ICZyZWxfZW50cmllc1tpXTsKKwkJdWludDY0CQlt eV9nYXRoZXJfbWFzayA9IDA7CisJCWJvb2wJCWp1c3Rfb25lX3JlbDsKKworCQlqdXN0X29uZV9y ZWwgPSBteV9lbnRyeS0+dGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9JREVOVElGSUVSCisJ CQl8fCBsaXN0X2xlbmd0aChteV9lbnRyeS0+dGFyZ2V0LT5jaGlsZHJlbikgPT0gMTsKKworCQkv KgorCQkgKiBQQVJUSVRJT05XSVNFIGJlaGF2ZXMgbGlrZSBhIHNjYW4gdHlwZSwgZXhjZXB0IHRo YXQgaWYgdGhlcmUncyBtb3JlCisJCSAqIHRoYW4gb25lIHJlbGF0aW9uIHRhcmdldGVkLCBpdCBo YXMgbm8gZWZmZWN0IGF0IHRoaXMgbGV2ZWwuCisJCSAqLworCQlpZiAobXlfZW50cnktPnRhZyA9 PSBQR1BBX1RBR19QQVJUSVRJT05XSVNFKQorCQl7CisJCQlpZiAoanVzdF9vbmVfcmVsKQorCQkJ eworCQkJCWNvbnN0IHVpbnQ2NCBteV9zY2FuX3R5cGUgPSBQR1NfQVBQRU5EIHwgUEdTX01FUkdF X0FQUEVORDsKKworCQkJCWlmIChzY2FuX3R5cGUgIT0gMCAmJiBzY2FuX3R5cGUgIT0gbXlfc2Nh bl90eXBlKQorCQkJCQlzY2FuX3R5cGVfY29uZmxpY3QgPSB0cnVlOworCQkJCXNjYW5fZW50cnkg PSBteV9lbnRyeTsKKwkJCQlzY2FuX3R5cGUgPSBteV9zY2FuX3R5cGU7CisJCQkJc2Nhbl90eXBl X3JlbF9pbmRleGVzID0KKwkJCQkJYm1zX2FkZF9tZW1iZXIoc2Nhbl90eXBlX3JlbF9pbmRleGVz LCBpKTsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogR0FUSEVSIGFuZCBH QVRIRVJfTUVSR0UgYXBwbGllZCB0byBhIHNpbmdsZSByZWwgbWVhbiB0aGF0IHdlIHNob3VsZAor CQkgKiB1c2UgdGhlIGNvcnJlc3BvbmRpbmdzIHN0cmF0ZWd5IGhlcmUsIHdoaWxlIGFwcGx5aW5n IGVpdGhlciB0byBtb3JlCisJCSAqIHRoYW4gb25lIHJlbCBtZWFucyB3ZSBzaG91bGQgbm90IHVz ZSB0aG9zZSBzdHJhdGVnaWVzIGhlcmUsIGJ1dAorCQkgKiByYXRoZXIgYXQgdGhlIGxldmVsIG9m IHRoZSBqb2lucmVsIHRoYXQgY29ycmVzcG9uZHMgdG8gd2hhdCB3YXMKKwkJICogc3BlY2lmaWVk LiBOT19HQVRIRVIgY2FuIG9ubHkgYmUgYXBwbGllZCB0byBzaW5nbGUgcmVscy4KKwkJICoKKwkJ ICogTm90ZSB0aGF0IHNldHRpbmcgUEdTX0NPTlNJREVSX05PTlBBUlRJQUwgaW4gbXlfZ2F0aGVy X21hc2sgaXMKKwkJICogZXF1aXZhbGVudCB0byBhbGxvd2luZyB0aGUgbm9uLXVzZSBvZiBlaXRo ZXIgZm9ybSBvZiBHYXRoZXIgaGVyZS4KKwkJICovCisJCWlmIChteV9lbnRyeS0+dGFnID09IFBH UEFfVEFHX0dBVEhFUiB8fAorCQkJbXlfZW50cnktPnRhZyA9PSBQR1BBX1RBR19HQVRIRVJfTUVS R0UpCisJCXsKKwkJCWlmICghanVzdF9vbmVfcmVsKQorCQkJCW15X2dhdGhlcl9tYXNrID0gUEdT X0NPTlNJREVSX05PTlBBUlRJQUw7CisJCQllbHNlIGlmIChteV9lbnRyeS0+dGFnID09IFBHUEFf VEFHX0dBVEhFUikKKwkJCQlteV9nYXRoZXJfbWFzayA9IFBHU19HQVRIRVI7CisJCQllbHNlCisJ CQkJbXlfZ2F0aGVyX21hc2sgPSBQR1NfR0FUSEVSX01FUkdFOworCQl9CisJCWVsc2UgaWYgKG15 X2VudHJ5LT50YWcgPT0gUEdQQV9UQUdfTk9fR0FUSEVSKQorCQl7CisJCQlBc3NlcnQoanVzdF9v bmVfcmVsKTsKKwkJCW15X2dhdGhlcl9tYXNrID0gUEdTX0NPTlNJREVSX05PTlBBUlRJQUw7CisJ CX0KKworCQkvKgorCQkgKiBJZiB3ZSBzZXQgbXlfZ2F0aGVyX21hc2sgdXAgYWJvdmUsIHRoZW4g d2UgKDEpIG1ha2UgYSBub3RlIGlmIHRoZQorCQkgKiBhZHZpY2UgY29uZmxpY3RlZCwgKDIpIHJl bWVtYmVyIHRoZSBtYXNrIHZhbHVlLCBhbmQgKDMpIHJlbWVtYmVyCisJCSAqIHdoZXRoZXIgdGhp cyB3YXMgYSBmdWxsIG9yIHBhcnRpYWwgbWF0Y2guCisJCSAqLworCQlpZiAobXlfZ2F0aGVyX21h c2sgIT0gMCkKKwkJeworCQkJaWYgKGdhdGhlcl9tYXNrICE9IDAgJiYgZ2F0aGVyX21hc2sgIT0g bXlfZ2F0aGVyX21hc2spCisJCQkJZ2F0aGVyX2NvbmZsaWN0ID0gdHJ1ZTsKKwkJCWdhdGhlcl9t YXNrID0gbXlfZ2F0aGVyX21hc2s7CisJCQlpZiAoanVzdF9vbmVfcmVsKQorCQkJCWdhdGhlcl9m dWxsX21hdGNoID0gYm1zX2FkZF9tZW1iZXIoZ2F0aGVyX2Z1bGxfbWF0Y2gsIGkpOworCQkJZWxz ZQorCQkJCWdhdGhlcl9wYXJ0aWFsX21hdGNoID0gYm1zX2FkZF9tZW1iZXIoZ2F0aGVyX3BhcnRp YWxfbWF0Y2gsIGkpOworCQl9CisJfQorCisJLyogRW5mb3JjZSBjaG9pY2Ugb2YgaW5kZXguICov CisJaWYgKHNjYW5fZW50cnkgIT0gTlVMTCAmJiAhc2Nhbl90eXBlX2NvbmZsaWN0ICYmCisJCShz Y2FuX2VudHJ5LT50YWcgPT0gUEdQQV9UQUdfSU5ERVhfU0NBTiB8fAorCQkgc2Nhbl9lbnRyeS0+ dGFnID09IFBHUEFfVEFHX0lOREVYX09OTFlfU0NBTikpCisJeworCQlwZ3BhX2luZGV4X3Rhcmdl dCAqaXRhcmdldCA9IHNjYW5fZW50cnktPnRhcmdldC0+aXRhcmdldDsKKwkJSW5kZXhPcHRJbmZv ICptYXRjaGVkX2luZGV4ID0gTlVMTDsKKworCQlBc3NlcnQoaXRhcmdldC0+aXR5cGUgPT0gUEdQ QV9JTkRFWF9OQU1FKTsKKworCQlmb3JlYWNoX25vZGUoSW5kZXhPcHRJbmZvLCBpbmRleCwgcmVs LT5pbmRleGxpc3QpCisJCXsKKwkJCWNoYXIJICAgKnJlbG5hbWUgPSBnZXRfcmVsX25hbWUoaW5k ZXgtPmluZGV4b2lkKTsKKwkJCU9pZAkJCW5zcG9pZCA9IGdldF9yZWxfbmFtZXNwYWNlKGluZGV4 LT5pbmRleG9pZCk7CisJCQljaGFyCSAgICpyZWxuYW1lc3BhY2UgPSBnZXRfbmFtZXNwYWNlX25h bWUobnNwb2lkKTsKKworCQkJaWYgKHN0cmNtcChpdGFyZ2V0LT5pbmRuYW1lLCByZWxuYW1lKSA9 PSAwICYmCisJCQkJKGl0YXJnZXQtPmluZG5hbWVzcGFjZSA9PSBOVUxMIHx8CisJCQkJIHN0cmNt cChpdGFyZ2V0LT5pbmRuYW1lc3BhY2UsIHJlbG5hbWVzcGFjZSkgPT0gMCkpCisJCQl7CisJCQkJ bWF0Y2hlZF9pbmRleCA9IGluZGV4OworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKG1h dGNoZWRfaW5kZXggPT0gTlVMTCkKKwkJeworCQkJLyogRG9uJ3QgZm9yY2UgdGhlIHNjYW4gdHlw ZSBpZiB0aGUgaW5kZXggZG9lc24ndCBleGlzdC4gKi8KKwkJCXNjYW5fdHlwZSA9IDA7CisKKwkJ CS8qIE1hcmsgYWR2aWNlIGFzIGluYXBwbGljYWJsZS4gKi8KKwkJCXBncGFfdHJvdmVfc2V0X2Zs YWdzKHNjYW5fZW50cmllcywgc2Nhbl90eXBlX2luZGV4ZXMsCisJCQkJCQkJCSBQR1BBX1RFX0lO QVBQTElDQUJMRSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiBSZXRhaW4gdGhpcyBpbmRleCBh bmQgZGlzY2FyZCB0aGUgcmVzdC4gKi8KKwkJCXJlbC0+aW5kZXhsaXN0ID0gbGlzdF9tYWtlMSht YXRjaGVkX2luZGV4KTsKKwkJfQorCX0KKworCS8qCisJICogTWFyayBhbGwgdGhlIHNjYW4gbWV0 aG9kIGVudHJpZXMgYXMgZnVsbHkgbWF0Y2hlZDsgYW5kIGlmIHRoZXkgc3BlY2lmeQorCSAqIGRp ZmZlcmVudCB0aGluZ3MsIG1hcmsgdGhlbSBhbGwgYXMgY29uZmxpY3RpbmcuCisJICovCisJZmxh Z3MgPSBQR1BBX1RFX01BVENIX1BBUlRJQUwgfCBQR1BBX1RFX01BVENIX0ZVTEw7CisJaWYgKHNj YW5fdHlwZV9jb25mbGljdCkKKwkJZmxhZ3MgfD0gUEdQQV9URV9DT05GTElDVElORzsKKwlwZ3Bh X3Ryb3ZlX3NldF9mbGFncyhzY2FuX2VudHJpZXMsIHNjYW5fdHlwZV9pbmRleGVzLCBmbGFncyk7 CisJcGdwYV90cm92ZV9zZXRfZmxhZ3MocmVsX2VudHJpZXMsIHNjYW5fdHlwZV9yZWxfaW5kZXhl cywgZmxhZ3MpOworCisJLyoKKwkgKiBNYXJrIGV2ZXJ5IEdhdGhlci1yZWxhdGVkIHBpZWNlIG9m IGFkdmljZSBhcyBwYXJ0aWFsbHkgbWF0Y2hlZC4gTWFyaworCSAqIHRoZSBvbmVzIHRoYXQgaW5j bHVkZWQgdGhpcyByZWxhdGlvbiBhcyBhIHRhcmdldCBieSBpdHNlbGYgYXMgZnVsbHkKKwkgKiBt YXRjaGVkLiBJZiB0aGVyZSB3YXMgYSBjb25mbGljdCwgbWFyayB0aGVtIGFsbCBhcyBjb25mbGlj dGluZy4KKwkgKi8KKwlmbGFncyA9IFBHUEFfVEVfTUFUQ0hfUEFSVElBTDsKKwlpZiAoZ2F0aGVy X2NvbmZsaWN0KQorCQlmbGFncyB8PSBQR1BBX1RFX0NPTkZMSUNUSU5HOworCXBncGFfdHJvdmVf c2V0X2ZsYWdzKHJlbF9lbnRyaWVzLCBnYXRoZXJfcGFydGlhbF9tYXRjaCwgZmxhZ3MpOworCWZs YWdzIHw9IFBHUEFfVEVfTUFUQ0hfRlVMTDsKKwlwZ3BhX3Ryb3ZlX3NldF9mbGFncyhyZWxfZW50 cmllcywgZ2F0aGVyX2Z1bGxfbWF0Y2gsIGZsYWdzKTsKKworCS8qIElmIHRoZXJlIGlzIGEgbm9u LWNvbmZsaWN0aW5nIHNjYW4gc3BlY2lmaWNhdGlvbiwgZW5mb3JjZSBpdC4gKi8KKwlpZiAoc2Nh bl90eXBlICE9IDAgJiYgIXNjYW5fdHlwZV9jb25mbGljdCkKKwl7CisJCXJlbC0+cGdzX21hc2sg Jj0KKwkJCX4oUEdTX1NDQU5fQU5ZIHwgUEdTX0FQUEVORCB8IFBHU19NRVJHRV9BUFBFTkQgfAor CQkJICBQR1NfQ09OU0lERVJfSU5ERVhPTkxZKTsKKwkJcmVsLT5wZ3NfbWFzayB8PSBzY2FuX3R5 cGU7CisJfQorCisJLyogSWYgdGhlcmUgaXMgYSBub24tY29uZmxpY3RpbmcgZ2F0aGVyIHNwZWNp ZmljYXRpb24sIGVuZm9yY2UgaXQuICovCisJaWYgKGdhdGhlcl9tYXNrICE9IDAgJiYgIWdhdGhl cl9jb25mbGljdCkKKwl7CisJCXJlbC0+cGdzX21hc2sgJj0KKwkJCX4oUEdTX0dBVEhFUiB8IFBH U19HQVRIRVJfTUVSR0UgfCBQR1NfQ09OU0lERVJfTk9OUEFSVElBTCk7CisJCXJlbC0+cGdzX21h c2sgfD0gZ2F0aGVyX21hc2s7CisJfQorfQorCisvKgorICogQWRkIGZlZWRiYWNrIGVudHJpZXMg dG8gZm9yIG9uZSB0cm92ZSBzbGljZSB0byB0aGUgcHJvdmlkZWQgbGlzdCBhbmQKKyAqIHJldHVy biB0aGUgcmVzdWx0aW5nIGxpc3QuCisgKgorICogRmVlZGJhY2sgZW50cmllcyBhcmUgZ2VuZXJh dGVkIGZyb20gdGhlIHRyb3ZlIGVudHJ5J3MgZmxhZ3MuIEl0J3MgYXNzdW1lZAorICogdGhhdCB0 aGUgY2FsbGVyIGhhcyBhbHJlYWR5IHNldCBhbGwgcmVsZXZhbnQgZmxhZ3Mgd2l0aCB0aGUgZXhj ZXB0aW9uIG9mCisgKiBQR1BBX1RFX0ZBSUxFRC4gV2Ugc2V0IHRoYXQgZmxhZyBoZXJlIGlmIGFw cHJvcHJpYXRlLgorICovCitzdGF0aWMgTGlzdCAqCitwZ3BhX3BsYW5uZXJfYXBwZW5kX2ZlZWRi YWNrKExpc3QgKmxpc3QsIHBncGFfdHJvdmUgKnRyb3ZlLAorCQkJCQkJCSBwZ3BhX3Ryb3ZlX2xv b2t1cF90eXBlIHR5cGUsCisJCQkJCQkJIHBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmllcnMs CisJCQkJCQkJIHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyKQoreworCXBncGFfdHJv dmVfZW50cnkgKmVudHJpZXM7CisJaW50CQkJbmVudHJpZXM7CisJU3RyaW5nSW5mb0RhdGEgYnVm OworCisJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisJcGdwYV90cm92ZV9sb29rdXBfYWxsKHRyb3Zl LCB0eXBlLCAmZW50cmllcywgJm5lbnRyaWVzKTsKKwlmb3IgKGludCBpID0gMDsgaSA8IG5lbnRy aWVzOyArK2kpCisJeworCQlwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyeSA9ICZlbnRyaWVzW2ldOwor CQlEZWZFbGVtICAgICppdGVtOworCisJCS8qCisJCSAqIElmIHRoaXMgZW50cnkgd2FzIGZ1bGx5 IG1hdGNoZWQsIGNoZWNrIHdoZXRoZXIgZ2VuZXJhdGluZyBhZHZpY2UKKwkJICogZnJvbSB0aGlz IHBsYW4gd291bGQgcHJvZHVjZSBzdWNoIGFuIGVudHJ5LiBJZiBub3QsIGxhYmVsIHRoZSBlbnRy eQorCQkgKiBhcyBmYWlsZWQuCisJCSAqLworCQlpZiAoKGVudHJ5LT5mbGFncyAmIFBHUEFfVEVf TUFUQ0hfRlVMTCkgIT0gMCAmJgorCQkJIXBncGFfd2Fsa2VyX3dvdWxkX2FkdmlzZSh3YWxrZXIs IHJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCQkJICBlbnRyeS0+dGFnLCBlbnRyeS0+dGFyZ2V0KSkK KwkJCWVudHJ5LT5mbGFncyB8PSBQR1BBX1RFX0ZBSUxFRDsKKworCQlpdGVtID0gbWFrZURlZkVs ZW0ocGdwYV9jc3RyaW5nX3Ryb3ZlX2VudHJ5KGVudHJ5KSwKKwkJCQkJCSAgIChOb2RlICopIG1h a2VJbnRlZ2VyKGVudHJ5LT5mbGFncyksIC0xKTsKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgaXRl bSk7CisJfQorCisJcmV0dXJuIGxpc3Q7Cit9CisKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5H CisKKy8qCisgKiBGYXN0IGhhc2ggZnVuY3Rpb24gZm9yIGEga2V5IGNvbnNpc3Rpbmcgb2YgYW4g UlRJIGFuZCBwbGFuIG5hbWUuCisgKi8KK3N0YXRpYyB1aW50MzIKK3BncGFfcmlfY2hlY2tlcl9o YXNoX2tleShwZ3BhX3JpX2NoZWNrZXJfa2V5IGtleSkKK3sKKwlmYXN0aGFzaF9zdGF0ZSBoczsK KwlpbnQJCQlzcF9sZW47CisKKwlmYXN0aGFzaF9pbml0KCZocywgMCk7CisKKwlocy5hY2N1bSA9 IGtleS5ydGk7CisJZmFzdGhhc2hfY29tYmluZSgmaHMpOworCisJLyogcGxhbl9uYW1lIGNhbiBi ZSBOVUxMICovCisJaWYgKGtleS5wbGFuX25hbWUgPT0gTlVMTCkKKwkJc3BfbGVuID0gMDsKKwll bHNlCisJCXNwX2xlbiA9IGZhc3RoYXNoX2FjY3VtX2NzdHJpbmcoJmhzLCBrZXkucGxhbl9uYW1l KTsKKworCS8qIGhhc2hmbl91bnN0YWJsZS5oIHJlY29tbWVuZHMgdXNpbmcgc3RyaW5nIGxlbmd0 aCBhcyB0d2VhayAqLworCXJldHVybiBmYXN0aGFzaF9maW5hbDMyKCZocywgc3BfbGVuKTsKK30K KworI2VuZGlmCisKKy8qCisgKiBTYXZlIHRoZSByYW5nZSB0YWJsZSBpZGVudGlmaWVyIGZvciBv bmUgcmVsYXRpb24gZm9yIGZ1dHVyZSBjcm9zcy1jaGVja2luZy4KKyAqLworc3RhdGljIHZvaWQK K3BncGFfcmlfY2hlY2tlcl9zYXZlKHBncGFfcGxhbm5lcl9zdGF0ZSAqcHBzLCBQbGFubmVySW5m byAqcm9vdCwKKwkJCQkJIFJlbE9wdEluZm8gKnJlbCkKK3sKKyNpZmRlZiBVU0VfQVNTRVJUX0NI RUNLSU5HCisJcGdwYV9yaV9jaGVja2VyX2tleSBrZXk7CisJcGdwYV9yaV9jaGVja2VyICpjaGVj azsKKwlwZ3BhX2lkZW50aWZpZXIgcmlkOworCWNvbnN0IGNoYXIgKnJpZF9zdHJpbmc7CisJYm9v bAkJZm91bmQ7CisKKwlrZXkucnRpID0gYm1zX3NpbmdsZXRvbl9tZW1iZXIocmVsLT5yZWxpZHMp OworCWtleS5wbGFuX25hbWUgPSByb290LT5wbGFuX25hbWU7CisJcGdwYV9jb21wdXRlX2lkZW50 aWZpZXJfYnlfcnRpKHJvb3QsIGtleS5ydGksICZyaWQpOworCXJpZF9zdHJpbmcgPSBwZ3BhX2lk ZW50aWZpZXJfc3RyaW5nKCZyaWQpOworCWNoZWNrID0gcGdwYV9yaV9jaGVja19pbnNlcnQocHBz LT5yaV9jaGVja19oYXNoLCBrZXksICZmb3VuZCk7CisJQXNzZXJ0KCFmb3VuZCB8fCBzdHJjbXAo Y2hlY2stPnJpZF9zdHJpbmcsIHJpZF9zdHJpbmcpID09IDApOworCWNoZWNrLT5yaWRfc3RyaW5n ID0gcmlkX3N0cmluZzsKKyNlbmRpZgorfQorCisvKgorICogVmFsaWRhdGUgdGhhdCB0aGUgcmFu Z2UgdGFibGUgaWRlbnRpZmllcnMgd2Ugd2VyZSBhYmxlIHRvIGdlbmVyYXRlIGR1cmluZworICog cGxhbm5pbmcgbWF0Y2ggdGhlIG9uZXMgd2UgZ2VuZXJhdGVkIGZyb20gdGhlIGZpbmFsIHBsYW4u CisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3JpX2NoZWNrZXJfdmFsaWRhdGUocGdwYV9wbGFubmVy X3N0YXRlICpwcHMsIFBsYW5uZWRTdG10ICpwc3RtdCkKK3sKKyNpZmRlZiBVU0VfQVNTRVJUX0NI RUNLSU5HCisJcGdwYV9pZGVudGlmaWVyICpydF9pZGVudGlmaWVyczsKKwlwZ3BhX3JpX2NoZWNr X2l0ZXJhdG9yIGl0OworCXBncGFfcmlfY2hlY2tlciAqY2hlY2s7CisKKwkvKiBDcmVhdGUgaWRl bnRpZmllcnMgZnJvbSB0aGUgcGxhbm5lZCBzdGF0ZW1lbnQuICovCisJcnRfaWRlbnRpZmllcnMg PSBwZ3BhX2NyZWF0ZV9pZGVudGlmaWVyc19mb3JfcGxhbm5lZF9zdG10KHBzdG10KTsKKworCS8q IEl0ZXJhdGUgb3ZlciBpZGVudGlmaWVycyBjcmVhdGVkIGR1cmluZyBwbGFubmluZywgc28gd2Ug Y2FuIGNvbXBhcmUuICovCisJcGdwYV9yaV9jaGVja19zdGFydF9pdGVyYXRlKHBwcy0+cmlfY2hl Y2tfaGFzaCwgJml0KTsKKwl3aGlsZSAoKGNoZWNrID0gcGdwYV9yaV9jaGVja19pdGVyYXRlKHBw cy0+cmlfY2hlY2tfaGFzaCwgJml0KSkgIT0gTlVMTCkKKwl7CisJCWludAkJCXJ0b2Zmc2V0ID0g MDsKKwkJY29uc3QgY2hhciAqcmlkX3N0cmluZzsKKwkJSW5kZXgJCWZsYXRfcnRpOworCisJCS8q CisJCSAqIElmIHRoZXJlJ3Mgbm8gcGxhbiBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGVudHJ5 LCB0aGVuIHRoZQorCQkgKiBydG9mZnNldCBpcyAwLiBPdGhlcndpc2UsIHdlIGNhbiBzZWFyY2gg dGhlIFN1YlBsYW5SVEluZm8gbGlzdCB0bworCQkgKiBmaW5kIHRoZSBydG9mZnNldC4KKwkJICov CisJCWlmIChjaGVjay0+a2V5LnBsYW5fbmFtZSAhPSBOVUxMKQorCQl7CisJCQlmb3JlYWNoX25v ZGUoU3ViUGxhblJUSW5mbywgcnRpbmZvLCBwc3RtdC0+c3VicnRpbmZvcykKKwkJCXsKKwkJCQkv KgorCQkJCSAqIElmIHJ0aW5mby0+ZHVtbXkgaXMgc2V0LCB0aGVuIHRoZSBzdWJxdWVyeSdzIHJh bmdlIHRhYmxlCisJCQkJICogd2lsbCBvbmx5IGhhdmUgYmVlbiBwYXJ0aWFsbHkgY29waWVkIHRv IHRoZSBmaW5hbCByYW5nZQorCQkJCSAqIHRhYmxlLiBTcGVjaWZpY2FsbHksIG9ubHkgUlRFX1JF TEFUSU9OIGVudHJpZXMgYW5kCisJCQkJICogUlRFX1NVQlFVRVJZIGVudHJpZXMgdGhhdCB3ZXJl IG9uY2UgUlRFX1JFTEFUSU9OIGVudHJpZXMKKwkJCQkgKiB3aWxsIGJlIGNvcGllZCwgYXMgcGVy IGFkZF9ydGVzX3RvX2ZsYXRfcnRhYmxlLiBUaGVyZWZvcmUsCisJCQkJICogdGhlcmUncyBubyBm aXhlZCBydG9mZnNldCB0aGF0IHdlIGNhbiBhcHBseSB0byB0aGUgUlRJcworCQkJCSAqIHVzZWQg ZHVyaW5nIHBsYW5uaW5nIHRvIGxvY2F0ZSB0aGUgY29ycmVzcG9uZGluZyByZWxhdGlvbnMKKwkJ CQkgKiBpbiB0aGUgZmluYWwgcnRhYmxlLgorCQkJCSAqCisJCQkJICogV2l0aCBtb3JlIGNvbXBs ZXggbG9naWMsIHdlIGNvdWxkIHdvcmsgYXJvdW5kIHRoYXQgcHJvYmxlbQorCQkJCSAqIGJ5IHJl bWVtYmVyaW5nIHRoZSB3aG9sZSBjb250ZW50cyBvZiB0aGUgc3VicXVlcnkncyBydGFibGUKKwkJ CQkgKiBkdXJpbmcgcGxhbm5pbmcsIGRldGVybWluaW5nIHdoaWNoIG9mIHRob3NlIHdvdWxkIGhh dmUgYmVlbgorCQkJCSAqIGNvcGllZCB0byB0aGUgZmluYWwgcnRhYmxlLCBhbmQgbWF0Y2hpbmcg dGhlbSB1cC4gQnV0IGl0CisJCQkJICogZG9lc24ndCBzZWVtIGxpa2UgYSB3b3J0aHdoaWxlIGVu ZGVhdm9yIGZvciByaWdodCBub3csCisJCQkJICogYmVjYXVzZSBSVElzIGZyb20gc3VjaCBzdWJx dWVyaWVzIHdvbid0IGFwcGVhciBpbiB0aGUgcGxhbgorCQkJCSAqIHRyZWUgaXRzZWxmLCBqdXN0 IGluIHRoZSByYW5nZSB0YWJsZS4gSGVuY2UsIHdlIGNhbiBuZWl0aGVyCisJCQkJICogZ2VuZXJh dGUgbm9yIGFjY2VwdCBhZHZpY2UgZm9yIHRoZW0uCisJCQkJICovCisJCQkJaWYgKHN0cmNtcChj aGVjay0+a2V5LnBsYW5fbmFtZSwgcnRpbmZvLT5wbGFuX25hbWUpID09IDAKKwkJCQkJJiYgIXJ0 aW5mby0+ZHVtbXkpCisJCQkJeworCQkJCQlydG9mZnNldCA9IHJ0aW5mby0+cnRvZmZzZXQ7CisJ CQkJCUFzc2VydChydG9mZnNldCA+IDApOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJ CS8qCisJCQkgKiBJdCdzIG5vdCBhbiBlcnJvciBpZiB3ZSBkb24ndCBmaW5kIHRoZSBwbGFuIG5h bWU6IHRoYXQganVzdAorCQkJICogbWVhbnMgdGhhdCB3ZSBwbGFubmVkIGEgc3VicGxhbiBieSB0 aGlzIG5hbWUgYnV0IGl0IGVuZGVkIHVwCisJCQkgKiBiZWluZyBhIGR1bW15IHN1YnBsYW4gYW5k IHNvIHdhc24ndCBpbmNsdWRlZCBpbiB0aGUgZmluYWwgcGxhbgorCQkJICogdHJlZS4KKwkJCSAq LworCQkJaWYgKHJ0b2Zmc2V0ID09IDApCisJCQkJY29udGludWU7CisJCX0KKworCQkvKgorCQkg KiBjaGVjay0+a2V5LnJ0aSBpcyB0aGUgUlRJIHRoYXQgd2Ugc2F3IHByaW9yIHRvIHJhbmdlLXRh YmxlCisJCSAqIGZsYXR0ZW5pbmcsIHNvIHdlIG11c3QgYWRkIHRoZSBhcHByb3ByaWF0ZSBSVCBv ZmZzZXQgdG8gZ2V0IHRoZQorCQkgKiBmaW5hbCBSVEkuCisJCSAqLworCQlmbGF0X3J0aSA9IGNo ZWNrLT5rZXkucnRpICsgcnRvZmZzZXQ7CisJCUFzc2VydChmbGF0X3J0aSA8PSBsaXN0X2xlbmd0 aChwc3RtdC0+cnRhYmxlKSk7CisKKwkJLyogQXNzZXJ0IHRoYXQgdGhlIHN0cmluZyB3ZSBjb21w dXRlIG5vdyBtYXRjaGVzIHRoZSBwcmV2aW91cyBvbmUuICovCisJCXJpZF9zdHJpbmcgPSBwZ3Bh X2lkZW50aWZpZXJfc3RyaW5nKCZydF9pZGVudGlmaWVyc1tmbGF0X3J0aSAtIDFdKTsKKwkJQXNz ZXJ0KHN0cmNtcChyaWRfc3RyaW5nLCBjaGVjay0+cmlkX3N0cmluZykgPT0gMCk7CisJfQorI2Vu ZGlmCit9CisKKy8qCisgKiBDb252ZXJ0IGEgYml0bWFwc2V0IHRvIGEgQyBzdHJpbmcgb2YgY29t bWEtc2VwYXJhdGVkIGludGVnZXJzLgorICovCitzdGF0aWMgY2hhciAqCitwZ3BhX2Jtc190b19j c3RyaW5nKEJpdG1hcHNldCAqYm1zKQoreworCVN0cmluZ0luZm9EYXRhIGJ1ZjsKKwlpbnQJCQl4 ID0gLTE7CisKKwlpZiAoYm1zX2lzX2VtcHR5KGJtcykpCisJCXJldHVybiAibm9uZSI7CisKKwlp bml0U3RyaW5nSW5mbygmYnVmKTsKKwl3aGlsZSAoKHggPSBibXNfbmV4dF9tZW1iZXIoYm1zLCB4 KSkgPj0gMCkKKwl7CisJCWlmIChidWYubGVuID4gMCkKKwkJCWFwcGVuZFN0cmluZ0luZm8oJmJ1 ZiwgIiwgJWQiLCB4KTsKKwkJZWxzZQorCQkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiJWQiLCB4 KTsKKwl9CisKKwlyZXR1cm4gYnVmLmRhdGE7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3Bs YW5fYWR2aWNlL3BncGFfcGxhbm5lci5oIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Bs YW5uZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uN2Q0MGI5MTBi MDAKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGxhbm5l ci5oCkBAIC0wLDAgKzEsMTcgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFfcGxh bm5lci5oCisgKgkgIHBsYW5uZXIgaG9va3MKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAy NCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIv cGdfcGxhbl9hZHZpY2UvcGdwYV9wbGFubmVyLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq LworI2lmbmRlZiBQR1BBX1BMQU5ORVJfSAorI2RlZmluZSBQR1BBX1BMQU5ORVJfSAorCitleHRl cm4gdm9pZCBwZ3BhX3BsYW5uZXJfaW5zdGFsbF9ob29rcyh2b2lkKTsKKworI2VuZGlmCmRpZmYg LS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbi5jIGIvY29udHJpYi9wZ19w bGFuX2FkdmljZS9wZ3BhX3NjYW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMC4uNDE1NmY1MjA5YTAKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2 aWNlL3BncGFfc2Nhbi5jCkBAIC0wLDAgKzEsMzAzIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq CisgKiBwZ3BhX3NjYW4uYworICoJICBhbmFseXNpcyBvZiBzY2FucyBpbiBQbGFuIHRyZWVzCisg KgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3Bt ZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbi5jCisg KgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5j bHVkZSAicGdwYV9zY2FuLmgiCisjaW5jbHVkZSAicGdwYV93YWxrZXIuaCIKKworI2luY2x1ZGUg Im5vZGVzL3BhcnNlbm9kZXMuaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2V0cmVlLmgiCisKK3N0 YXRpYyBwZ3BhX3NjYW4gKnBncGFfbWFrZV9zY2FuKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAq d2Fsa2VyLCBQbGFuICpwbGFuLAorCQkJCQkJCQkgcGdwYV9zY2FuX3N0cmF0ZWd5IHN0cmF0ZWd5 LAorCQkJCQkJCQkgQml0bWFwc2V0ICpyZWxpZHMsCisJCQkJCQkJCSBib29sIG5lZWRzX25vX2dh dGhlcik7CisKKworc3RhdGljIFJURUtpbmQgdW5pcXVlX25vbmpvaW5fcnRla2luZChCaXRtYXBz ZXQgKnJlbGlkcywgTGlzdCAqcnRhYmxlKTsKKworLyoKKyAqIEJ1aWxkIGEgcGdwYV9zY2FuIG9i amVjdCBmb3IgYSBQbGFuIG5vZGUgYW5kIHVwZGF0ZSB0aGUgcGxhbiB3YWxrZXIKKyAqIGNvbnRl eHQgYXMgYXBwb3ByaWF0ZS4gIElmIHRoaXMgaXMgYW4gQXBwZW5kIG9yIE1lcmdlQXBwZW5kIHNj YW4sIGFsc28KKyAqIGJ1aWxkIHBncGFfc2NhbiBmb3IgYW55IHNjYW5zIHRoYXQgd2VyZSBjb25z b2xpZGF0ZWQgaW50byB0aGlzIG9uZSBieQorICogQXBwZW5kL01lcmdlQXBwZW5kIHB1bGwtdXAu CisgKgorICogSWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIEVsaWRlZE5vZGUgZm9yIHRoaXMgcGxh biBub2RlLCBwYXNzIHRoZSB1cHBlcm1vc3QKKyAqIG9uZSBhcyBlbGlkZWRfbm9kZSwgZWxzZSBw YXNzIE5VTEwuCisgKgorICogU2V0IHRoZSAnYmVuZWF0aF9hbnlfZ2F0aGVyJyBub2RlIGlmIHdl IGFyZSB1bmRlcm5lYXRoIGEgR2F0aGVyIG9yCisgKiBHYXRoZXIgTWVyZ2Ugbm9kZS4KKyAqCisg KiBTZXQgdGhlICd3aXRoaW5fam9pbl9wcm9ibGVtJyBmbGFnIGlmIHdlJ3JlIGluc2lkZSBvZiBh IGpvaW4gcHJvYmxlbSBhbmQKKyAqIG5vdCBvdGhlcndpc2UuCisgKi8KK3BncGFfc2NhbiAqCitw Z3BhX2J1aWxkX3NjYW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsIFBsYW4gKnBs YW4sCisJCQkJRWxpZGVkTm9kZSAqZWxpZGVkX25vZGUsCisJCQkJYm9vbCBiZW5lYXRoX2FueV9n YXRoZXIsIGJvb2wgd2l0aGluX2pvaW5fcHJvYmxlbSkKK3sKKwlwZ3BhX3NjYW5fc3RyYXRlZ3kg c3RyYXRlZ3kgPSBQR1BBX1NDQU5fT1JESU5BUlk7CisJQml0bWFwc2V0ICAqcmVsaWRzID0gTlVM TDsKKwlpbnQJCQlydGkgPSAtMTsKKwlib29sCQluZWVkc19ub19nYXRoZXIgPSAhYmVuZWF0aF9h bnlfZ2F0aGVyOworCUxpc3QJICAgKmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzID0gTklMOworCisJ aWYgKGVsaWRlZF9ub2RlICE9IE5VTEwpCisJeworCQlOb2RlVGFnCQllbGlkZWRfdHlwZSA9IGVs aWRlZF9ub2RlLT5lbGlkZWRfdHlwZTsKKworCQkvKgorCQkgKiBJZiBzZXRyZWZzIHByb2Nlc3Np bmcgZWxpZGVkIGFuIEFwcGVuZCBvciBNZXJnZUFwcGVuZCBub2RlIHRoYXQgaGFkCisJCSAqIG9u bHkgb25lIHN1cnZpdmluZyBjaGlsZCwgdGhlbiB0aGlzIGlzIGEgcGFydGl0aW9ud2lzZSAic2Nh biIgLS0KKwkJICogd2hpY2ggbWF5IHJlYWxseSBiZSBhIHBhcnRpdGlvbndpc2Ugam9pbiwgYnV0 IHRoZXJlJ3Mgbm8gbmVlZCB0bworCQkgKiBkaXN0aW5ndWlzaC4KKwkJICoKKwkJICogSWYgaXQn cyBhIHRyaXZpYWwgU3VicXVlcnlTY2FuIHRoYXQgd2FzIGVsaWRlZCwgdGhlbiB0aGlzIGlzIGFu CisJCSAqICJvcmRpbmFyeSIgc2NhbiBpLmUuIG9uZSBmb3Igd2hpY2ggd2UgbmVlZCB0byBnZW5l cmF0ZSBhZHZpY2UKKwkJICogYmVjYXVzZSB0aGUgcGxhbm5lciBoYXMgbm90IG1hZGUgYW55IG1l YW5pbmdmdWwgY2hvaWNlLgorCQkgKi8KKwkJcmVsaWRzID0gZWxpZGVkX25vZGUtPnJlbGlkczsK KwkJaWYgKGVsaWRlZF90eXBlID09IFRfQXBwZW5kIHx8IGVsaWRlZF90eXBlID09IFRfTWVyZ2VB cHBlbmQpCisJCQlzdHJhdGVneSA9IFBHUEFfU0NBTl9QQVJUSVRJT05XSVNFOworCQllbHNlCisJ CQlzdHJhdGVneSA9IFBHUEFfU0NBTl9PUkRJTkFSWTsKKworCQkvKgorCQkgKiBJZiB0aGlzIGlz IGFuIGVsaWRlZCBBcHBlbmQgb3IgTWVyZ2VBcHBlbmQgbm9kZSwgd2UgZG9uJ3QgbmVlZCB0bwor CQkgKiBlbWl0IE5PX0dBVEhFUigpIGJlY2F1c2Ugd2UnbGwgYWxzbyBlbWl0IGl0IGZvciB0aGUg dW5kZXJseWluZworCQkgKiBzY2FuLCB3aGljaCBpcyBnb29kIGVub3VnaC4KKwkJICoKKwkJICog SWYgaXQncyBhbiBlbGlkZWQgU3VicXVlcnlTY2FuLCB0aGUgc2FtZSBhcmd1bWVudCBpcyBsaWtl bHkgdG8KKwkJICogYXBwbHksIGJlY2F1c2UgdGhlIHN1YnF1ZXJ5IHByb2JhYmx5IGNvbnRhaW5z IHJlZmVyZW5jZXMgdG8gdGFibGVzLAorCQkgKiBhbmQgaWYgaXQgZG9lc24ndCwgdGhlbiBwbGFu bmVyIGlzbid0IGxpa2VseSB0byB3YW50IHRvIGRvIGl0IGluCisJCSAqIHBhcmFsbGVsIGFueXdh eS4gQnV0IGFsc28sIHdlIGNhbid0IGltcGxlbWVudCBOT19HQVRIRVIoKSBhZHZpY2UKKwkJICog Zm9yIGEgbm9uLXJlbGF0aW9uIFJURUtpbmQsIGJlY2F1c2UgZ2V0X3JlbGF0aW9uX2luZm8oKSBp c24ndAorCQkgKiBjYWxsZWQgaW4gc3VjaCBjYXNlcy4gVGhhdCBzaG91bGQgcHJvYmFibHkgYmUg Zml4ZWQgYXQgc29tZSBwb2ludCwKKwkJICogYnV0IHVudGlsIHRoZW4gd2Ugc2hvdWxkbid0IGVt aXQgaXQuCisJCSAqLworCQluZWVkc19ub19nYXRoZXIgPSBmYWxzZTsKKworCQkvKiBKb2luIFJU SXMgY2FuIGJlIHByZXNlbnQsIGJ1dCBhZHZpY2UgbmV2ZXIgcmVmZXJzIHRvIHRoZW0uICovCisJ CXJlbGlkcyA9IHBncGFfZmlsdGVyX291dF9qb2luX3JlbGlkcyhyZWxpZHMsIHdhbGtlci0+cHN0 bXQtPnJ0YWJsZSk7CisJfQorCWVsc2UgaWYgKChydGkgPSBwZ3BhX3NjYW5yZWxpZChwbGFuKSkg IT0gMCkKKwl7CisJCVJhbmdlVGJsRW50cnkgKnJ0ZTsKKworCQlyZWxpZHMgPSBibXNfbWFrZV9z aW5nbGV0b24ocnRpKTsKKworCQlzd2l0Y2ggKG5vZGVUYWcocGxhbikpCisJCXsKKwkJCWNhc2Ug VF9TZXFTY2FuOgorCQkJCXN0cmF0ZWd5ID0gUEdQQV9TQ0FOX1NFUTsKKwkJCQlicmVhazsKKwkJ CWNhc2UgVF9CaXRtYXBIZWFwU2NhbjoKKwkJCQlzdHJhdGVneSA9IFBHUEFfU0NBTl9CSVRNQVBf SEVBUDsKKwkJCQlicmVhazsKKwkJCWNhc2UgVF9JbmRleFNjYW46CisJCQkJc3RyYXRlZ3kgPSBQ R1BBX1NDQU5fSU5ERVg7CisJCQkJYnJlYWs7CisJCQljYXNlIFRfSW5kZXhPbmx5U2NhbjoKKwkJ CQlzdHJhdGVneSA9IFBHUEFfU0NBTl9JTkRFWF9PTkxZOworCQkJCWJyZWFrOworCQkJY2FzZSBU X1RpZFNjYW46CisJCQljYXNlIFRfVGlkUmFuZ2VTY2FuOgorCQkJCXN0cmF0ZWd5ID0gUEdQQV9T Q0FOX1RJRDsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisKKwkJCQkvKgorCQkJCSAqIFRoaXMg Y2FzZSBpbmNsdWRlcyBhIEZvcmVpZ25TY2FuIHRhcmdldGluZyBhIHNpbmdsZQorCQkJCSAqIHJl bGF0aW9uOyBubyBvdGhlciBzdHJhdGVneSBpcyBwb3NzaWJsZSBpbiB0aGF0IGNhc2UsIGJ1dAor CQkJCSAqIHNlZSBiZWxvdywgd2hlcmUgdGhpbmdzIGFyZSBkaWZmZXJlbnQgaW4gbXVsdGktcmVs YXRpb24KKwkJCQkgKiBjYXNlcy4KKwkJCQkgKi8KKwkJCQlzdHJhdGVneSA9IFBHUEFfU0NBTl9P UkRJTkFSWTsKKworCQkJCS8qCisJCQkJICogV2UgY2FuJ3QgaGFuZGxlIE5PX0dBVEhFUigpIGZv ciBub24tcmVsYXRpb24gUlRFcyBiZWNhdXNlCisJCQkJICogZ2V0X3JlbGF0aW9uX2luZm8gd29u J3QgYmUgY2FsbGVkLgorCQkJCSAqLworCQkJCXJ0ZSA9IHJ0X2ZldGNoKHJ0aSwgd2Fsa2VyLT5w c3RtdC0+cnRhYmxlKTsKKwkJCQlpZiAocnRlLT5ydGVraW5kICE9IFJURV9SRUxBVElPTikKKwkJ CQkJbmVlZHNfbm9fZ2F0aGVyID0gZmFsc2U7CisKKwkJCQlicmVhazsKKwkJfQorCX0KKwllbHNl IGlmICgocmVsaWRzID0gcGdwYV9yZWxpZHMocGxhbikpICE9IE5VTEwpCisJeworCQlzd2l0Y2gg KG5vZGVUYWcocGxhbikpCisJCXsKKwkJCWNhc2UgVF9Gb3JlaWduU2NhbjoKKworCQkJCS8qCisJ CQkJICogSWYgbXVsdGlwbGUgcmVsYXRpb25zIGFyZSBiZWluZyB0YXJnZXRlZCBieSBhIHNpbmds ZQorCQkJCSAqIGZvcmVpZ24gc2NhbiwgdGhlbiB0aGUgZm9yZWlnbiBqb2luIGhhcyBiZWVuIHB1 c2hlZCB0byB0aGUKKwkJCQkgKiByZW1vdGUgc2lkZSwgYW5kIHdlIHdhbnQgdGhhdCB0byBiZSBy ZWZsZWN0ZWQgaW4gdGhlCisJCQkJICogZ2VuZXJhdGVkIGFkdmljZS4KKwkJCQkgKi8KKwkJCQlz dHJhdGVneSA9IFBHUEFfU0NBTl9GT1JFSUdOOworCQkJCWJyZWFrOworCQkJY2FzZSBUX0FwcGVu ZDoKKworCQkJCS8qCisJCQkJICogQXBwZW5kIG5vZGVzIGNhbiByZXByZXNlbnQgcGFydGl0aW9u d2lzZSBzY2FucyBvZiBhIGEKKwkJCQkgKiByZWxhdGlvbiwgYnV0IHdoZW4gdGhleSBpbXBsZW1l bnQgYSBzZXQgb3BlcmF0aW9uLCB0aGV5IGFyZQorCQkJCSAqIGp1c3Qgb3JkaW5hcnkgc2NhbnMu CisJCQkJICovCisJCQkJaWYgKHVuaXF1ZV9ub25qb2luX3J0ZWtpbmQocmVsaWRzLCB3YWxrZXIt PnBzdG10LT5ydGFibGUpCisJCQkJCT09IFJURV9SRUxBVElPTikKKwkJCQkJc3RyYXRlZ3kgPSBQ R1BBX1NDQU5fUEFSVElUSU9OV0lTRTsKKwkJCQllbHNlCisJCQkJCXN0cmF0ZWd5ID0gUEdQQV9T Q0FOX09SRElOQVJZOworCisJCQkJLyogTk9fR0FUSEVSKCkgc2hvdWxkIGJlIGVtaXR0ZWQgZm9y IHVuZGVybHlpbmcgcmVscyBvbmx5LiAqLworCQkJCW5lZWRzX25vX2dhdGhlciA9IGZhbHNlOwor CisJCQkJLyogQmUgc3VyZSB0byBhY2NvdW50IGZvciBwdWxsZWQtdXAgc2NhbnMuICovCisJCQkJ Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgPQorCQkJCQkoKEFwcGVuZCAqKSBwbGFuKS0+Y2hpbGRf YXBwZW5kX3JlbGlkX3NldHM7CisJCQkJYnJlYWs7CisJCQljYXNlIFRfTWVyZ2VBcHBlbmQ6CisJ CQkJLyogU29tZSBsb2dpYyBoZXJlIGFzIGZvciBBcHBlbmQsIGFib3ZlLiAqLworCQkJCWlmICh1 bmlxdWVfbm9uam9pbl9ydGVraW5kKHJlbGlkcywgd2Fsa2VyLT5wc3RtdC0+cnRhYmxlKQorCQkJ CQk9PSBSVEVfUkVMQVRJT04pCisJCQkJCXN0cmF0ZWd5ID0gUEdQQV9TQ0FOX1BBUlRJVElPTldJ U0U7CisJCQkJZWxzZQorCQkJCQlzdHJhdGVneSA9IFBHUEFfU0NBTl9PUkRJTkFSWTsKKworCQkJ CS8qIE5PX0dBVEhFUigpIHNob3VsZCBiZSBlbWl0dGVkIGZvciB1bmRlcmx5aW5nIHJlbHMgb25s eS4gKi8KKwkJCQluZWVkc19ub19nYXRoZXIgPSBmYWxzZTsKKworCQkJCS8qIEJlIHN1cmUgdG8g YWNjb3VudCBmb3IgcHVsbGVkLXVwIHNjYW5zLiAqLworCQkJCWNoaWxkX2FwcGVuZF9yZWxpZF9z ZXRzID0KKwkJCQkJKChNZXJnZUFwcGVuZCAqKSBwbGFuKS0+Y2hpbGRfYXBwZW5kX3JlbGlkX3Nl dHM7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXN0cmF0ZWd5ID0gUEdQQV9TQ0FOX09S RElOQVJZOworCisJCQkJLyoKKwkJCQkgKiBXZSBjYW4ndCBoYW5kbGUgTk9fR0FUSEVSKCkgZm9y IHNpbmdsZSBub24tcmVsYXRpb24gUlRFcworCQkJCSAqIGJlY2F1c2UgZ2V0X3JlbGF0aW9uX2lu Zm8gd29uJ3QgYmUgY2FsbGVkLgorCQkJCSAqLworCQkJCWlmIChibXNfbWVtYmVyc2hpcChyZWxp ZHMpID09IEJNU19TSU5HTEVUT04pCisJCQkJeworCQkJCQlSYW5nZVRibEVudHJ5ICpydGU7CisK KwkJCQkJcnRlID0gcnRfZmV0Y2goYm1zX3NpbmdsZXRvbl9tZW1iZXIocmVsaWRzKSwKKwkJCQkJ CQkJICAgd2Fsa2VyLT5wc3RtdC0+cnRhYmxlKTsKKwkJCQkJaWYgKHJ0ZS0+cnRla2luZCAhPSBS VEVfUkVMQVRJT04pCisJCQkJCQluZWVkc19ub19nYXRoZXIgPSBmYWxzZTsKKwkJCQl9CisKKwkJ CQlicmVhazsKKwkJfQorCisKKwkJLyogSm9pbiBSVElzIGNhbiBiZSBwcmVzZW50LCBidXQgYWR2 aWNlIG5ldmVyIHJlZmVycyB0byB0aGVtLiAqLworCQlyZWxpZHMgPSBwZ3BhX2ZpbHRlcl9vdXRf am9pbl9yZWxpZHMocmVsaWRzLCB3YWxrZXItPnBzdG10LT5ydGFibGUpOworCX0KKworCS8qCisJ ICogSWYgdGhpcyBpcyBhbiBBcHBlbmQgb3IgTWVyZ2VBcHBlbmQgbm9kZSBpbnRvIHdoaWNoIHN1 Ym9yZGluYXRlIEFwcGVuZAorCSAqIG9yIE1lcmdlQXBwZW5kIHBhdGhzIHdlcmUgbWVyZ2VkLCBl YWNoIG9mIHRob3NlIG1lcmdlZCBwYXRocyBpcworCSAqIGVmZmVjdGl2ZWx5IGFub3RoZXIgc2Nh biBmb3Igd2hpY2ggd2UgbmVlZCB0byBhY2NvdW50LgorCSAqLworCWZvcmVhY2hfbm9kZShCaXRt YXBzZXQsIGNoaWxkX3JlbGlkcywgY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMpCisJeworCQlCaXRt YXBzZXQgICpjaGlsZF9ub25qb2luX3JlbGlkczsKKworCQljaGlsZF9ub25qb2luX3JlbGlkcyA9 CisJCQlwZ3BhX2ZpbHRlcl9vdXRfam9pbl9yZWxpZHMoY2hpbGRfcmVsaWRzLAorCQkJCQkJCQkJ CXdhbGtlci0+cHN0bXQtPnJ0YWJsZSk7CisJCSh2b2lkKSBwZ3BhX21ha2Vfc2Nhbih3YWxrZXIs IHBsYW4sIHN0cmF0ZWd5LAorCQkJCQkJCSAgY2hpbGRfbm9uam9pbl9yZWxpZHMsIGZhbHNlKTsK Kwl9CisKKwkvKgorCSAqIElmIHRoaXMgcGxhbiBub2RlIGhhcyBubyBhc3NvY2lhdGVkIFJUSXMs IGl0J3Mgbm90IGEgc2Nhbi4gV2hlbiB0aGUKKwkgKiAnd2l0aGluX2pvaW5fcHJvYmxlbScgZmxh ZyBpcyBzZXQsIHRoYXQncyB1bmV4cGVjdGVkLCBzbyB0aHJvdyBhbgorCSAqIGVycm9yLCBlbHNl IHJldHVybiBxdWlldGx5LgorCSAqLworCWlmIChyZWxpZHMgPT0gTlVMTCkKKwl7CisJCWlmICh3 aXRoaW5fam9pbl9wcm9ibGVtKQorCQkJZWxvZyhFUlJPUiwgInBsYW4gbm9kZSBoYXMgbm8gUlRJ czogJWQiLCAoaW50KSBub2RlVGFnKHBsYW4pKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0 dXJuIHBncGFfbWFrZV9zY2FuKHdhbGtlciwgcGxhbiwgc3RyYXRlZ3ksIHJlbGlkcywgbmVlZHNf bm9fZ2F0aGVyKTsKK30KKworLyoKKyAqIENyZWF0ZSBhIHNpbmdsZSBwZ3BhX3NjYW4gb2JqZWN0 IGFuZCB1cGRhdGUgdGhlIHBncGFfcGxhbl93YWxrZXJfY29udGV4dC4KKyAqLworc3RhdGljIHBn cGFfc2NhbiAqCitwZ3BhX21ha2Vfc2NhbihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtl ciwgUGxhbiAqcGxhbiwKKwkJCSAgIHBncGFfc2Nhbl9zdHJhdGVneSBzdHJhdGVneSwgQml0bWFw c2V0ICpyZWxpZHMsCisJCQkgICBib29sIG5lZWRzX25vX2dhdGhlcikKK3sKKwlwZ3BhX3NjYW4g ICpzY2FuOworCisJLyogQ3JlYXRlIHRoZSBzY2FuIG9iamVjdC4gKi8KKwlzY2FuID0gcGFsbG9j KHNpemVvZihwZ3BhX3NjYW4pKTsKKwlzY2FuLT5wbGFuID0gcGxhbjsKKwlzY2FuLT5zdHJhdGVn eSA9IHN0cmF0ZWd5OworCXNjYW4tPnJlbGlkcyA9IHJlbGlkczsKKworCS8qIEFkZCBpdCB0byB0 aGUgYXBwcm9wcmlhdGUgbGlzdC4gKi8KKwl3YWxrZXItPnNjYW5zW3NjYW4tPnN0cmF0ZWd5XSA9 IGxhcHBlbmQod2Fsa2VyLT5zY2Fuc1tzY2FuLT5zdHJhdGVneV0sCisJCQkJCQkJCQkJCXNjYW4p OworCisJLyogQ2FsbGVyIHRlbGxzIHVzIHdoZXRoZXIgTk9fR0FUSEVSKCkgYWR2aWNlIGZvciB0 aGlzIHNjYW4gaXMgbmVlZGVkLiAqLworCWlmIChuZWVkc19ub19nYXRoZXIpCisJCXdhbGtlci0+ bm9fZ2F0aGVyX3NjYW5zID0gYm1zX2FkZF9tZW1iZXJzKHdhbGtlci0+bm9fZ2F0aGVyX3NjYW5z LAorCQkJCQkJCQkJCQkJICBzY2FuLT5yZWxpZHMpOworCisJcmV0dXJuIHNjYW47Cit9CisKKy8q CisgKiBEZXRlcm1pbmUgdGhlIHVuaXF1ZSBydGVraW5kIG9mIGEgc2V0IG9mIHJlbGlkcy4KKyAq Lworc3RhdGljIFJURUtpbmQKK3VuaXF1ZV9ub25qb2luX3J0ZWtpbmQoQml0bWFwc2V0ICpyZWxp ZHMsIExpc3QgKnJ0YWJsZSkKK3sKKwlpbnQJCQlydGkgPSAtMTsKKwlib29sCQlmaXJzdCA9IHRy dWU7CisJUlRFS2luZAkJcnRla2luZDsKKworCUFzc2VydChyZWxpZHMgIT0gTlVMTCk7CisKKwl3 aGlsZSAoKHJ0aSA9IGJtc19uZXh0X21lbWJlcihyZWxpZHMsIHJ0aSkpID49IDApCisJeworCQlS YW5nZVRibEVudHJ5ICpydGUgPSBydF9mZXRjaChydGksIHJ0YWJsZSk7CisKKwkJaWYgKHJ0ZS0+ cnRla2luZCA9PSBSVEVfSk9JTikKKwkJCWNvbnRpbnVlOworCisJCWlmIChmaXJzdCkKKwkJewor CQkJcnRla2luZCA9IHJ0ZS0+cnRla2luZDsKKwkJCWZpcnN0ID0gZmFsc2U7CisJCX0KKwkJZWxz ZSBpZiAocnRla2luZCAhPSBydGUtPnJ0ZWtpbmQpCisJCQllbG9nKEVSUk9SLCAicnRla2luZCBt aXNtYXRjaDogJWQgdnMuICVkIiwKKwkJCQkgcnRla2luZCwgcnRlLT5ydGVraW5kKTsKKwl9CisK KwlpZiAoZmlyc3QpCisJCWVsb2coRVJST1IsICJubyBub24tUlRFX0pPSU4gUlRFcyBmb3VuZCIp OworCisJcmV0dXJuIHJ0ZWtpbmQ7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2 aWNlL3BncGFfc2Nhbi5oIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW4uaApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uM2JiODcyNmZmMWUKLS0tIC9kZXYv bnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbi5oCkBAIC0wLDAgKzEs ODUgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFfc2Nhbi5oCisgKgkgIGFuYWx5 c2lzIG9mIHNjYW5zIGluIFBsYW4gdHJlZXMKKyAqCisgKiBGb3IgcHVycG9zZXMgb2YgdGhpcyBt b2R1bGUsIGEgInNjYW4iIGluY2x1ZGVzICgxKSBzaW5nbGUgcGxhbiBub2RlcyB0aGF0CisgKiBz Y2FuIG11bHRpcGxlIFJUSXMsIHN1Y2ggYXMgYSBkZWdlbmVyYXRlIFJlc3VsdCBub2RlIHRoYXQg cmVwbGFjZXMgd2hhdAorICogd291bGQgb3RoZXJ3aXNlIGhhdmUgYmVlbiBhIGpvaW4sIGFuZCAo MikgQXBwZW5kIGFuZCBNZXJnZUFwcGVuZCBub2RlcworICogaW1wbGVtZW50aW5nIGEgcGFydGl0 aW9ud2lzZSBzY2FuIG9yIGEgcGFydGl0aW9ud2lzZSBqb2luLiBTYWlkCisgKiBkaWZmZXJlbnRs eSwgc2NhbnMgYXJlIHRoZSBsZWF2ZXMgb2YgdGhlIGpvaW4gdHJlZSBmb3IgYSBzaW5nbGUgam9p bgorICogcHJvYmxlbS4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNSwgUG9zdGdyZVNR TCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvcGdwYV9zY2FuLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBQR1BB X1NDQU5fSAorI2RlZmluZSBQR1BBX1NDQU5fSAorCisjaW5jbHVkZSAibm9kZXMvcGxhbm5vZGVz LmgiCisKK3R5cGVkZWYgc3RydWN0IHBncGFfcGxhbl93YWxrZXJfY29udGV4dCBwZ3BhX3BsYW5f d2Fsa2VyX2NvbnRleHQ7CisKKy8qCisgKiBTY2FuIHN0cmF0ZWdpZXMuCisgKgorICogUEdQQV9T Q0FOX09SRElOQVJZIGlzIGFueSBzY2FuIHN0cmF0ZWd5IHRoYXQgaXNuJ3QgaW50ZXJlc3Rpbmcg dG8gdXMKKyAqIGJlY2F1c2UgdGhlcmUgaXMgbm8gbWVhbmluZ2Z1bCBwbGFubmVyIGRlY2lzaW9u IGludm9sdmVkLiBGb3IgZXhhbXBsZSwKKyAqIHRoZSBvbmx5IHdheSB0byBzY2FuIGEgc3VicXVl cnkgaXMgYSBTdWJxdWVyeVNjYW4sIGFuZCB0aGUgb25seSB3YXkgdG8KKyAqIHNjYW4gYSBWQUxV RVMgY29uc3RydWN0IGlzIGEgVmFsdWVzU2Nhbi4gV2UgbmVlZCBub3QgY2FyZSBleGFjdGx5IHdo aWNoCisgKiB0eXBlIG9mIHBsYW5uZXIgbm9kZSB3YXMgdXNlZCBpbiBzdWNoIGNhc2VzLCBiZWNh dXNlIHRoZSBzYW1lIHRoaW5nIHdpbGwKKyAqIGhhcHBlbiB3aGVuIHJlcGxhbm5pbmcuCisgKgor ICogUEdQQV9TQ0FOX09SRElOQVJZIGFsc28gaW5jbHVkZXMgUmVzdWx0IG5vZGVzIHRoYXQgY29y cmVzcG9uZCB0byBzY2FucworICogb3IgZXZlbiBqb2lucyB0aGF0IGFyZSBwcm92ZWQgZW1wdHku IFdlIGRvbid0IGtub3cgd2hldGhlciBvciBub3QgdGhlIHNjYW4KKyAqIG9yIGpvaW4gd2lsbCBz dGlsbCBiZSBwcm92YWJseSBlbXB0eSBhdCByZXBsYW5uaW5nIHRpbWUsIGJ1dCBpZiBpdCBpcywK KyAqIHRoZW4gbm8gc2Nhbi10eXBlIGFkdmljZSBpcyBuZWVkZWQsIGFuZCBpZiBpdCdzIG5vdCwg d2UgY2FuJ3QgcmVjb21tZW5kCisgKiBhIHNjYW4gdHlwZSBiYXNlZCBvbiB0aGUgY3VycmVudCBw bGFuLgorICoKKyAqIFBHUEFfU0NBTl9QQVJUSVRJT05XSVNFIGFsc28gbHVtcHMgdG9nZXRoZXIg c2NhbnMgYW5kIGpvaW5zOiB0aGlzIGNhbgorICogYmUgZWl0aGVyIGEgcGFydGl0aW9ud2lzZSBz Y2FuIG9mIGEgcGFydGl0aW9uZWQgdGFibGUgb3IgYSBwYXJ0aXRpb253aXNlCisgKiBqb2luIGJl dHdlZW4gc2V2ZXJhbCBwYXJ0aXRpb25lZCB0YWJsZXMuIE5vdGUgdGhhdCBhbGwgZGVjaXNpb25z IGFib3V0CisgKiB3aGV0aGVyIG9yIG5vdCB0byB1c2UgcGFydGl0aW9ud2lzZSBqb2luIGFyZSBt ZWFuaW5nZnVsOiBubyBtYXR0ZXIgd2hhdAorICogd2UgZGVjaWRlZCB0aGlzIHRpbWUsIHdlIGNv dWxkIGRvIG1vcmUgb3IgZmV3ZXIgdGhpbmdzIHBhcnRpdGlvbndpc2UgdGhlCisgKiBuZXh0IHRp bWUuCisgKgorICogUEdQQV9TQ0FOX0ZPUkVJR04gaXMgb25seSB1c2VkIHdoZW4gdGhlcmUncyBt b3JlIHRoYW4gb25lIHJlbGF0aW9uIGludm9sdmVkOworICogYSBzaW5nbGUtdGFibGUgZm9yZWln biBzY2FuIGlzIGNsYXNzaWZpZWQgYXMgb3JkaW5hcnksIHNpbmNlIHRoZXJlIGlzIG5vCisgKiBk ZWNpc2lvbiB0byBtYWtlIGluIHRoYXQgY2FzZS4KKyAqCisgKiBPdGhlciBzY2FuIHN0cmF0ZWdp ZXMgbWFwIG9uZS10by1vbmUgdG8gcGxhbiBub2Rlcy4KKyAqLwordHlwZWRlZiBlbnVtCit7CisJ UEdQQV9TQ0FOX09SRElOQVJZID0gMCwKKwlQR1BBX1NDQU5fU0VRLAorCVBHUEFfU0NBTl9CSVRN QVBfSEVBUCwKKwlQR1BBX1NDQU5fRk9SRUlHTiwKKwlQR1BBX1NDQU5fSU5ERVgsCisJUEdQQV9T Q0FOX0lOREVYX09OTFksCisJUEdQQV9TQ0FOX1BBUlRJVElPTldJU0UsCisJUEdQQV9TQ0FOX1RJ RAorCS8qIHVwZGF0ZSBOVU1fUEdQQV9TQ0FOX1NUUkFURUdZIGlmIHlvdSBhZGQgYW55dGhpbmcg aGVyZSAqLworfSBwZ3BhX3NjYW5fc3RyYXRlZ3k7CisKKyNkZWZpbmUgTlVNX1BHUEFfU0NBTl9T VFJBVEVHWQkoKGludCkgUEdQQV9TQ0FOX1RJRCArIDEpCisKKy8qCisgKiBBbGwgb2YgdGhlIGRl dGFpbHMgd2UgbmVlZCByZWdhcmRpbmcgYSBzY2FuLgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3Bh X3NjYW4KK3sKKwlQbGFuCSAgICpwbGFuOworCXBncGFfc2Nhbl9zdHJhdGVneSBzdHJhdGVneTsK KwlCaXRtYXBzZXQgICpyZWxpZHM7Cit9IHBncGFfc2NhbjsKKworZXh0ZXJuIHBncGFfc2NhbiAq cGdwYV9idWlsZF9zY2FuKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLCBQbGFuICpw bGFuLAorCQkJCQkJCQkgIEVsaWRlZE5vZGUgKmVsaWRlZF9ub2RlLAorCQkJCQkJCQkgIGJvb2wg YmVuZWF0aF9hbnlfZ2F0aGVyLAorCQkJCQkJCQkgIGJvb2wgd2l0aGluX2pvaW5fcHJvYmxlbSk7 CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW5u ZXIubCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FubmVyLmwKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmM0OWIyOWQ5MDZkCi0tLSAvZGV2L251bGwKKysr IGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW5uZXIubApAQCAtMCwwICsxLDMwMiBA QAorJXRvcHsKKy8qCisgKiBTY2FubmVyIGZvciBwbGFuIGFkdmljZQorICoKKyAqIENvcHlyaWdo dCAoYykgMjAwMC0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoK KyAqIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FubmVyLmwKKyAqLworI2luY2x1ZGUg InBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJjb21tb24vc3RyaW5nLmgiCisjaW5jbHVkZSAibm9k ZXMvbWlzY25vZGVzLmgiCisjaW5jbHVkZSAicGFyc2VyL3NjYW5zdXAuaCIKKworI2luY2x1ZGUg InBncGFfYXN0LmgiCisjaW5jbHVkZSAicGdwYV9wYXJzZXIuaCIKKworLyoKKyAqIEV4dHJhIGRh dGEgdGhhdCB3ZSBwYXNzIGFyb3VuZCB3aGVuIGR1cmluZyBzY2FubmluZy4KKyAqCisgKiAnbGl0 YnVmJyBpcyB1c2VkIHRvIGltcGxlbWVudCB0aGUgPHhkPiBleGNsdXNpdmUgc3RhdGUsIHdoaWNo IGhhbmRsZXMKKyAqIGRvdWJsZS1xdW90ZWQgaWRlbnRpZmllcnMuCisgKi8KK3R5cGVkZWYgc3Ry dWN0IHBncGFfeXlfZXh0cmFfdHlwZQoreworCVN0cmluZ0luZm9EYXRhCWxpdGJ1ZjsKK30gcGdw YV95eV9leHRyYV90eXBlOworCit9CisKKyV7CisvKiBMQ09WX0VYQ0xfU1RBUlQgKi8KKworI2Rl ZmluZSBZWV9ERUNMIFwKKwlleHRlcm4gaW50IHBncGFfeXlsZXgodW5pb24gWVlTVFlQRSAqeXls dmFsX3BhcmFtLCBMaXN0ICoqcmVzdWx0LCBcCisJCQkJCQkgIGNoYXIgKipwYXJzZV9lcnJvcl9t c2dfcCwgeXlzY2FuX3QgeXlzY2FubmVyKQorCisvKiBObyByZWFzb24gdG8gY29uc3RyYWluIGFt b3VudCBvZiBkYXRhIHNsdXJwZWQgKi8KKyNkZWZpbmUgWVlfUkVBRF9CVUZfU0laRSAxNjc3NzIx NgorCisvKiBBdm9pZCBleGl0KCkgb24gZmF0YWwgc2Nhbm5lciBlcnJvcnMgKGEgYml0IHVnbHkg LS0gc2VlIHl5X2ZhdGFsX2Vycm9yKSAqLworI3VuZGVmIGZwcmludGYKKyNkZWZpbmUgZnByaW50 ZihmaWxlLCBmbXQsIG1zZykgIGZwcmludGZfdG9fZXJlcG9ydChmbXQsIG1zZykKKworc3RhdGlj IHZvaWQKK2ZwcmludGZfdG9fZXJlcG9ydChjb25zdCBjaGFyICpmbXQsIGNvbnN0IGNoYXIgKm1z ZykKK3sKKwllcmVwb3J0KEVSUk9SLCAoZXJybXNnX2ludGVybmFsKCIlcyIsIG1zZykpKTsKK30K KyV9CisKKyVvcHRpb24gcmVlbnRyYW50Cislb3B0aW9uIGJpc29uLWJyaWRnZQorJW9wdGlvbiA4 Yml0Cislb3B0aW9uIG5ldmVyLWludGVyYWN0aXZlCislb3B0aW9uIG5vZGVmYXVsdAorJW9wdGlv biBub2lucHV0Cislb3B0aW9uIG5vdW5wdXQKKyVvcHRpb24gbm95eXdyYXAKKyVvcHRpb24gbm95 eWFsbG9jCislb3B0aW9uIG5veXlyZWFsbG9jCislb3B0aW9uIG5veXlmcmVlCislb3B0aW9uIHdh cm4KKyVvcHRpb24gcHJlZml4PSJwZ3BhX3l5IgorJW9wdGlvbiBleHRyYS10eXBlPSJwZ3BhX3l5 X2V4dHJhX3R5cGUgKiIKKworLyoKKyAqIFdoYXQgZm9sbG93cyBpcyBhIHNldmVyZWx5IHN0cmlw cGVkLWRvd24gdmVyc2lvbiBvZiB0aGUgY29yZSBzY2FubmVyLiBXZQorICogb25seSBjYXJlIGFi b3V0IHJlY29nbml6aW5nIGlkZW50aWZpZXJzIHdpdGggb3Igd2l0aG91dCBpZGVudGlmaWVyIHF1 b3RpbmcKKyAqIChpLmUuIGRvdWJsZS1xdW90aW5nKSwgZGVjaW1hbCBpbnRlZ2VycywgYW5kIGEg c21hbGwgaGFuZGZ1bCBvZiBvdGhlcgorICogdGhpbmdzLiBLZWVwIHRoZXNlIHJ1bGVzIGluIHN5 bmMgd2l0aCBzcmMvYmFja2VuZC9wYXJzZXIvc2Nhbi5sLiBBcyBpbiB0aGF0CisgKiBmaWxlLCB3 ZSB1c2UgYW4gZXhjbHVzaXZlIHN0YXRlIGNhbGxlZCAneGMnIGZvciBDLXN0eWxlIGNvbW1lbnRz LCBhbmQgYW4KKyAqIGV4Y2x1c2l2ZSBzdGF0ZSBjYWxsZWQgJ3hkJyBmb3IgZG91YmxlLXF1b3Rl ZCBpZGVudGlmaWVycy4KKyAqLworJXggeGMKKyV4IHhkCisKK2lkZW50X3N0YXJ0CQlbQS1aYS16 XDIwMC1cMzc3X10KK2lkZW50X2NvbnQJCVtBLVphLXpcMjAwLVwzNzdfMC05XCRdCisKK2lkZW50 aWZpZXIJCXtpZGVudF9zdGFydH17aWRlbnRfY29udH0qCisKK2RlY2RpZ2l0CQlbMC05XQorZGVj aW50ZWdlcgkJe2RlY2RpZ2l0fShfP3tkZWNkaWdpdH0pKgorCitzcGFjZQkJCVsgXHRcblxyXGZc dl0KK3doaXRlc3BhY2UJCXtzcGFjZX0rCisKK2RxdW90ZQkJCVwiCit4ZHN0YXJ0CQkJe2RxdW90 ZX0KK3hkc3RvcAkJCXtkcXVvdGV9Cit4ZGRvdWJsZQkJe2RxdW90ZX17ZHF1b3RlfQoreGRpbnNp ZGUJCVteIl0rCisKK3hjc3RhcnQJCQlcL1wqCit4Y3N0b3AJCQlcKitcLworeGNpbnNpZGUJCVte Ki9dKworCislJQorCit7d2hpdGVzcGFjZX0JeyAvKiBpZ25vcmUgKi8gfQorCit7aWRlbnRpZmll cn0JeworCQkJCQljaGFyICAgKnN0cjsKKwkJCQkJYm9vbAlmYWlsOworCQkJCQlwZ3BhX2Fkdmlj ZV90YWdfdHlwZQl0YWc7CisKKwkJCQkJLyoKKwkJCQkJICogVW5saWtlIHRoZSBjb3JlIHNjYW5u ZXIsIHdlIGRvbid0IHRydW5jYXRlIGlkZW50aWZpZXJzCisJCQkJCSAqIGhlcmUuIFRoZXJlIGlz IG5vIG9idmlvdXMgcmVhc29uIHRvIGRvIHNvLgorCQkJCQkgKi8KKwkJCQkJc3RyID0gZG93bmNh c2VfaWRlbnRpZmllcih5eXRleHQsIHl5bGVuZywgZmFsc2UsIGZhbHNlKTsKKwkJCQkJeXlsdmFs LT5zdHIgPSBzdHI7CisKKwkJCQkJLyoKKwkJCQkJICogSWYgaXQncyBub3QgYSB0YWcsIGp1c3Qg cmV0dXJuIFRPS19JREVOVDsgZWxzZSwgcmV0dXJuCisJCQkJCSAqIGEgdG9rZW4gdHlwZSBiYXNl ZCBvbiBob3cgZnVydGhlciBwYXJzaW5nIHNob3VsZAorCQkJCQkgKiBwcm9jZWVkLgorCQkJCQkg Ki8KKwkJCQkJdGFnID0gcGdwYV9wYXJzZV9hZHZpY2VfdGFnKHN0ciwgJmZhaWwpOworCQkJCQlp ZiAoZmFpbCkKKwkJCQkJCXJldHVybiBUT0tfSURFTlQ7CisJCQkJCWVsc2UgaWYgKHRhZyA9PSBQ R1BBX1RBR19KT0lOX09SREVSKQorCQkJCQkJcmV0dXJuIFRPS19UQUdfSk9JTl9PUkRFUjsKKwkJ CQkJZWxzZSBpZiAodGFnID09IFBHUEFfVEFHX0lOREVYX1NDQU4gfHwKKwkJCQkJCQkgdGFnID09 IFBHUEFfVEFHX0lOREVYX09OTFlfU0NBTikKKwkJCQkJCXJldHVybiBUT0tfVEFHX0lOREVYOwor CQkJCQllbHNlIGlmICh0YWcgPT0gUEdQQV9UQUdfQklUTUFQX0hFQVBfU0NBTikKKwkJCQkJCXJl dHVybiBUT0tfVEFHX0JJVE1BUDsKKwkJCQkJZWxzZSBpZiAodGFnID09IFBHUEFfVEFHX1NFUV9T Q0FOIHx8CisJCQkJCQkJIHRhZyA9PSBQR1BBX1RBR19USURfU0NBTiB8fAorCQkJCQkJCSB0YWcg PT0gUEdQQV9UQUdfTk9fR0FUSEVSKQorCQkJCQkJcmV0dXJuIFRPS19UQUdfU0lNUExFOworCQkJ CQllbHNlCisJCQkJCQlyZXR1cm4gVE9LX1RBR19HRU5FUklDOworCQkJCX0KKwore2RlY2ludGVn ZXJ9CXsKKwkJCQkJY2hhciAgICplbmRwdHI7CisKKwkJCQkJZXJybm8gPSAwOworCQkJCQl5eWx2 YWwtPmludGVnZXIgPSBzdHJ0b2ludCh5eXRleHQsICZlbmRwdHIsIDEwKTsKKwkJCQkJaWYgKCpl bmRwdHIgIT0gJ1wwJyB8fCBlcnJubyA9PSBFUkFOR0UpCisJCQkJCQlwZ3BhX3l5ZXJyb3IocmVz dWx0LCBwYXJzZV9lcnJvcl9tc2dfcCwgeXlzY2FubmVyLAorCQkJCQkJCQkJICJpbnRlZ2VyIG91 dCBvZiByYW5nZSIpOworCQkJCQlyZXR1cm4gVE9LX0lOVEVHRVI7CisJCQkJfQorCit7eGNzdGFy dH0JCXsKKwkJCQkJQkVHSU4oeGMpOworCQkJCX0KKwore3hkc3RhcnR9CQl7CisJCQkJCUJFR0lO KHhkKTsKKwkJCQkJcmVzZXRTdHJpbmdJbmZvKCZ5eWV4dHJhLT5saXRidWYpOworCQkJCX0KKwor Inx8IgkJCXsgcmV0dXJuIFRPS19PUjsgfQorCisiJiYiCQkJeyByZXR1cm4gVE9LX0FORDsgfQor CisuCQkJCXsgcmV0dXJuIHl5dGV4dFswXTsgfQorCis8eGM+e3hjc3RvcH0JeworCQkJCQlCRUdJ TihJTklUSUFMKTsKKwkJCQl9CisKKzx4Yz57eGNpbnNpZGV9CXsKKwkJCQkJLyogZGlzY2FyZCBt dWx0aXBsZSBjaGFyYWN0ZXJzIHdpdGhvdXQgc2xhc2ggb3IgYXN0ZXJpc2sgKi8KKwkJCQl9CisK Kzx4Yz4uCQkJeworCQkJCQkvKgorCQkJCQkgKiBEaXNjYXJkIGFueSBzaW5nbGUgY2hhcmFjdGVy LiBmbGV4IHByZWZlcnMgbG9uZ2VyCisJCQkJCSAqIG1hdGNoZXMsIHNvIHRoaXMgcnVsZSB3aWxs IG5ldmVyIGJlIHBpY2tlZCB3aGVuIHdlIGNvdWxkCisJCQkJCSAqIGhhdmUgbWF0Y2hlZCB4Y3N0 b3AuCisJCQkJCSAqCisJCQkJCSAqIE5COiBBdCBwcmVzZW50LCB3ZSBkb24ndCBib3RoZXIgdG8g c3VwcG9ydCBuZXN0ZWQKKwkJCQkJICogQy1zdHlsZSBjb21tZW50cyBoZXJlLCBidXQgdGhpcyBs b2dpYyBjb3VsZCBiZSBleHRlbmRlZAorCQkJCQkgKiBpZiB0aGF0IHJlc3RyaWN0aW9uIHBvc2Vz IGEgcHJvYmxlbS4KKwkJCQkJICovCisJCQkJfQorCis8eGM+PDxFT0Y+PgkJeworCQkJCQlCRUdJ TihJTklUSUFMKTsKKwkJCQkJcGdwYV95eWVycm9yKHJlc3VsdCwgcGFyc2VfZXJyb3JfbXNnX3As IHl5c2Nhbm5lciwKKwkJCQkJCQkJICJ1bnRlcm1pbmF0ZWQgY29tbWVudCIpOworCQkJCX0KKwor PHhkPnt4ZHN0b3B9CXsKKwkJCQkJQkVHSU4oSU5JVElBTCk7CisJCQkJCWlmICh5eWV4dHJhLT5s aXRidWYubGVuID09IDApCisJCQkJCQlwZ3BhX3l5ZXJyb3IocmVzdWx0LCBwYXJzZV9lcnJvcl9t c2dfcCwgeXlzY2FubmVyLAorCQkJCQkJCQkJICJ6ZXJvLWxlbmd0aCBkZWxpbWl0ZWQgaWRlbnRp ZmllciIpOworCQkJCQl5eWx2YWwtPnN0ciA9IHBzdHJkdXAoeXlleHRyYS0+bGl0YnVmLmRhdGEp OworCQkJCQlyZXR1cm4gVE9LX0lERU5UOworCQkJCX0KKworPHhkPnt4ZGRvdWJsZX0JeworCQkJ CQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmeXlleHRyYS0+bGl0YnVmLCAnIicpOworCQkJCX0KKwor PHhkPnt4ZGluc2lkZX0JeworCQkJCQlhcHBlbmRCaW5hcnlTdHJpbmdJbmZvKCZ5eWV4dHJhLT5s aXRidWYsIHl5dGV4dCwgeXlsZW5nKTsKKwkJCQl9CisKKzx4ZD48PEVPRj4+CQl7CisJCQkJCUJF R0lOKElOSVRJQUwpOworCQkJCQlwZ3BhX3l5ZXJyb3IocmVzdWx0LCBwYXJzZV9lcnJvcl9tc2df cCwgeXlzY2FubmVyLAorCQkJCQkJCQkgInVudGVybWluYXRlZCBxdW90ZWQgaWRlbnRpZmllciIp OworCQkJCX0KKworJSUKKworLyogTENPVl9FWENMX1NUT1AgKi8KKworLyoKKyAqIEhhbmRsZXIg Zm9yIGVycm9ycyB3aGlsZSBzY2FubmluZyBvciBwYXJzaW5nIGFkdmljZS4KKyAqCisgKiBiaXNv biBwYXNzZXMgdGhlIGVycm9yIG1lc3NhZ2UgdG8gdXMgdmlhICdtZXNzYWdlJywgYW5kIHRoZSBj b250ZXh0IGlzCisgKiBhdmFpbGFibGUgdmlhIHRoZSAneXl0ZXh0JyBtYWNyby4gV2UgYXNzZW1i bGUgdGhvc2UgdmFsdWVzIGludG8gYSBmaW5hbAorICogZXJyb3IgdGV4dCBhbmQgdGhlbiBhcnJh bmdlIHRvIHBhc3MgaXQgYmFjayB0byB0aGUgY2FsbGVyIG9mIHBncGFfeXlwYXJzZSgpCisgKiBi eSBzdG9yaW5nIGl0IGludG8gKnBhcnNlX2Vycm9yX21zZ19wLgorICovCit2b2lkCitwZ3BhX3l5 ZXJyb3IoTGlzdCAqKnJlc3VsdCwgY2hhciAqKnBhcnNlX2Vycm9yX21zZ19wLCB5eXNjYW5fdCB5 eXNjYW5uZXIsCisJCQkgY29uc3QgY2hhciAqbWVzc2FnZSkKK3sKKwlzdHJ1Y3QgeXlndXRzX3Qg Knl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QgKikgeXlzY2FubmVyOwkvKiBuZWVkZWQgZm9yIHl5dGV4 dAorCQkJCQkJCQkJCQkJCQkJICogbWFjcm8gKi8KKworCisJLyogcmVwb3J0IG9ubHkgdGhlIGZp cnN0IGVycm9yIGluIGEgcGFyc2Ugb3BlcmF0aW9uICovCisJaWYgKCpwYXJzZV9lcnJvcl9tc2df cCkKKwkJcmV0dXJuOworCisJaWYgKHl5dGV4dFswXSkKKwkJKnBhcnNlX2Vycm9yX21zZ19wID0g cHNwcmludGYoIiVzIGF0IG9yIG5lYXIgXCIlc1wiIiwgbWVzc2FnZSwgeXl0ZXh0KTsKKwllbHNl CisJCSpwYXJzZV9lcnJvcl9tc2dfcCA9IHBzcHJpbnRmKCIlcyBhdCBlbmQgb2YgaW5wdXQiLCBt ZXNzYWdlKTsKK30KKworLyoKKyAqIEluaXRpYWxpemUgdGhlIGFkdmljZSBzY2FubmVyLgorICoK KyAqIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgcGFyc2luZyBiZWdpbnMuCisgKi8KK3Zv aWQKK3BncGFfc2Nhbm5lcl9pbml0KGNvbnN0IGNoYXIgKnN0ciwgeXlzY2FuX3QgKnl5c2Nhbm5l cnApCit7CisJeXlzY2FuX3QJeXlzY2FubmVyOworCXBncGFfeXlfZXh0cmFfdHlwZQkqeXlleHQg PSBwYWxsb2MwX29iamVjdChwZ3BhX3l5X2V4dHJhX3R5cGUpOworCisJaWYgKHl5bGV4X2luaXQo eXlzY2FubmVycCkgIT0gMCkKKwkJZWxvZyhFUlJPUiwgInl5bGV4X2luaXQoKSBmYWlsZWQ6ICVt Iik7CisKKwl5eXNjYW5uZXIgPSAqeXlzY2FubmVycDsKKworCWluaXRTdHJpbmdJbmZvKCZ5eWV4 dC0+bGl0YnVmKTsKKwlwZ3BhX3l5c2V0X2V4dHJhKHl5ZXh0LCB5eXNjYW5uZXIpOworCisJeXlf c2Nhbl9zdHJpbmcoc3RyLCB5eXNjYW5uZXIpOworfQorCisKKy8qCisgKiBTaHV0IGRvd24gdGhl IGFkdmljZSBzY2FubmVyLgorICoKKyAqIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBhZnRlciBwYXJz aW5nIGlzIGNvbXBsZXRlLgorICovCit2b2lkCitwZ3BhX3NjYW5uZXJfZmluaXNoKHl5c2Nhbl90 IHl5c2Nhbm5lcikKK3sKKwl5eWxleF9kZXN0cm95KHl5c2Nhbm5lcik7Cit9CisKKy8qCisgKiBJ bnRlcmZhY2UgZnVuY3Rpb25zIHRvIG1ha2UgZmxleCB1c2UgcGFsbG9jKCkgaW5zdGVhZCBvZiBt YWxsb2MoKS4KKyAqIEl0J2QgYmUgYmV0dGVyIHRvIG1ha2UgdGhlc2Ugc3RhdGljLCBidXQgZmxl eCBpbnNpc3RzIG90aGVyd2lzZS4KKyAqLworCit2b2lkICoKK3l5YWxsb2MoeXlfc2l6ZV90IHNp emUsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlyZXR1cm4gcGFsbG9jKHNpemUpOworfQorCit2 b2lkICoKK3l5cmVhbGxvYyh2b2lkICpwdHIsIHl5X3NpemVfdCBzaXplLCB5eXNjYW5fdCB5eXNj YW5uZXIpCit7CisJaWYgKHB0cikKKwkJcmV0dXJuIHJlcGFsbG9jKHB0ciwgc2l6ZSk7CisJZWxz ZQorCQlyZXR1cm4gcGFsbG9jKHNpemUpOworfQorCit2b2lkCit5eWZyZWUodm9pZCAqcHRyLCB5 eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJaWYgKHB0cikKKwkJcGZyZWUocHRyKTsKK30KZGlmZiAt LWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV90cm92ZS5jIGIvY29udHJpYi9wZ19w bGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAuLjlkYjEwNzdkNDg3Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2Fk dmljZS9wZ3BhX3Ryb3ZlLmMKQEAgLTAsMCArMSw0OTIgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICoKKyAqIHBncGFfdHJvdmUuYworICoJICBBbGwgb2YgdGhlIGFkdmljZSBnaXZlbiBmb3IgYSBw YXJ0aWN1bGFyIHF1ZXJ5LCBhcHByb3ByaWF0ZWx5CisgKiAgICBvcmdhbml6ZWQgZm9yIGNvbnZl bmllbnQgYWNjZXNzLgorICoKKyAqIFRoaXMgbmFtZSBjb21lcyBmcm9tIHRoZSBFbmdsaXNoIGV4 cHJlc3Npb24gInRyb3ZlIG9mIGFkdmljZSIsIHdoaWNoCisgKiBtZWFucyBhIGNvbGxlY3Rpb24g b2Ygd2lzZG9tLiBUaGlzIHNsaWdodGx5IHVudXN1YWwgdGVybSBpcyBjaG9zZW4gdG8KKyAqIGF2 b2lkIG5hbWluZyBjb25mdXNpb247IGZvciBleGFtcGxlLCAiY29sbGVjdGlvbiBvZiBhZHZpY2Ui IHdvdWxkCisgKiBpbnZpdGUgY29uZnVzaW9uIHdpdGggcGdwYV9jb2xsZWN0b3IuYy4gTm90ZSB0 aGF0LCB3aGlsZSB3ZSBkb24ndCBrbm93CisgKiB3aGV0aGVyIHRoZSBwcm92aWRlZCBhZHZpY2Ug aXMgYWN0dWFsbHkgd2lzZSwgaXQncyBub3Qgb3VyIGpvYiB0bworICogcXVlc3Rpb24gdGhlIHVz ZXIncyBjaG9pY2VzLgorICoKKyAqIFRoZSBnb2FsIG9mIHRoaXMgbW9kdWxlIGlzIHRvIG1ha2Ug aXQgZWFzeSB0byBsb2NhdGUgdGhlIHNwZWNpZmljCisgKiBiaXRzIG9mIGFkdmljZSB0aGF0IHBl cnRhaW4gdG8gYW55IGdpdmVuIHBhcnQgb2YgYSBxdWVyeSwgb3IgdG8KKyAqIGRldGVybWluZSB0 aGF0IHRoZXJlIGFyZSBub25lLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI0LCBQb3N0 Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFu X2FkdmljZS9wZ3BhX3Ryb3ZlLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1 ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJwZ3BhX3Ryb3ZlLmgiCisKKyNpbmNsdWRlICJj b21tb24vaGFzaGZuX3Vuc3RhYmxlLmgiCisKKy8qCisgKiBBbiBhZHZpY2UgdHJvdmUgaXMgb3Jn YW5pemVkIGludG8gYSBzZXJpZXMgb2YgInNsaWNlcyIsIGVhY2ggb2Ygd2hpY2gKKyAqIGNvbnRh aW5zIGluZm9ybWF0aW9uIGFib3V0IG9uZSB0b3BpYyBlLmcuIHNjYW4gbWV0aG9kcy4gRWFjaCBz bGljZSBjb25zaXN0cworICogb2YgYW4gYXJyYXkgb2YgdHJvdmUgZW50cmllcyBwbHVzIGEgaGFz aCB0YWJsZSB0aGF0IHdlIGNhbiB1c2UgdG8gZGV0ZXJtaW5lCisgKiB3aGljaCBvbmVzIGFyZSBy ZWxldmFudCB0byBhIHBhcnRpY3VsYXIgcGFydCBvZiB0aGUgcXVlcnkuCisgKi8KK3R5cGVkZWYg c3RydWN0IHBncGFfdHJvdmVfc2xpY2UKK3sKKwl1bnNpZ25lZAluYWxsb2NhdGVkOworCXVuc2ln bmVkCW51c2VkOworCXBncGFfdHJvdmVfZW50cnkgKmVudHJpZXM7CisJc3RydWN0IHBncGFfdHJv dmVfZW50cnlfaGFzaCAqaGFzaDsKK30gcGdwYV90cm92ZV9zbGljZTsKKworLyoKKyAqIFNjYW4g YWR2aWNlIGlzIHN0b3JlZCBpbnRvICdzY2FuJzsgam9pbiBhZHZpY2UgaXMgc3RvcmVkIGludG8g J2pvaW4nOyBhbmQKKyAqIGFkdmljZSB0aGF0IGNhbiBhcHBseSB0byBib3RoIGNhc2VzIGlzIHN0 b3JlZCBpbnRvICdyZWwnLiBUaGlzIGxldHMgY2FsbGVycworICogYXNrIGp1c3QgZm9yIHdoYXQn cyByZWxldmFudC4gVGhlc2Ugc2xpY2VzIGNvcnJlc3BvbmQgdG8gdGhlIHBvc3NpYmxlIHZhbHVl cworICogb2YgcGdwYV90cm92ZV9sb29rdXBfdHlwZS4KKyAqLworc3RydWN0IHBncGFfdHJvdmUK K3sKKwlwZ3BhX3Ryb3ZlX3NsaWNlIGpvaW47CisJcGdwYV90cm92ZV9zbGljZSByZWw7CisJcGdw YV90cm92ZV9zbGljZSBzY2FuOworfTsKKworLyoKKyAqIFdlJ3JlIGdvaW5nIHRvIGJ1aWxkIGEg aGFzaCB0YWJsZSB0byBhbGxvdyBjbGllbnRzIG9mIHRoaXMgbW9kdWxlIHRvIGZpbmQKKyAqIHJl bGV2YW50IGFkdmljZSBmb3IgYSBnaXZlbiBwYXJ0IG9mIHRoZSBxdWVyeSBxdWlja2x5LiBIb3dl dmVyLCB3ZSdyZSBnb2luZworICogdG8gdXNlIG9ubHkgdGhyZWUgb2YgdGhlIGZpdmUga2V5IGZp ZWxkcyBhcyBoYXNoIGtleXMuIFRoZXJlIGFyZSB0d28gcmVhc29ucworICogZm9yIHRoaXMuCisg KgorICogRmlyc3QsIGl0J3MgYWxsb3dhYmxlIHRvIHNldCBwYXJ0aXRpb25fc2NoZW1hIHRvIE5V TEwgdG8gbWF0Y2ggYSBwYXJ0aXRpb24KKyAqIHdpdGggdGhlIGNvcnJlY3QgbmFtZSBpbiBhbnkg c2NoZW1hLgorICoKKyAqIFNlY29uZCwgd2UgZXhwZWN0IHRoZSAib2NjdXJyZW5jZSIgYW5kICJw YXJ0aXRpb25fc2NoZW1hIiBwb3J0aW9ucyBvZiB0aGUKKyAqIHJlbGF0aW9uIGlkZW50aWZpZXJz IHRvIGJlIG1vc3RseSB1bmludGVyZXN0aW5nLiBNb3N0IG9mIHRoZSB0aW1lLCB0aGUKKyAqIG9j Y3VycmVuY2UgZmllbGQgd2lsbCBiZSAxIGFuZCB0aGUgcGFydGl0aW9uX3NjaGVtYSB2YWx1ZXMg d2lsbCBhbGwgYmUgdGhlCisgKiBzYW1lLiBFdmVuIHdoZW4gdGhlcmUgaXMgc29tZSB2YXJpYXRp b24sIHRoZSBhYnNvbHV0ZSBudW1iZXIgb2YgZW50cmllcworICogdGhhdCBoYXZlIHRoZSBzYW1l IHZhbHVlcyBmb3IgYWxsIHRocmVlIG9mIHRoZXNlIGtleSBmaWVsZHMgc2hvdWxkIGJlCisgKiBx dWl0ZSBzbWFsbC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwljb25zdCBjaGFyICphbGlhc19u YW1lOworCWNvbnN0IGNoYXIgKnBhcnRpdGlvbl9uYW1lOworCWNvbnN0IGNoYXIgKnBsYW5fbmFt ZTsKK30gcGdwYV90cm92ZV9lbnRyeV9rZXk7CisKK3R5cGVkZWYgc3RydWN0Cit7CisJcGdwYV90 cm92ZV9lbnRyeV9rZXkga2V5OworCWludAkJCXN0YXR1czsKKwlCaXRtYXBzZXQgICppbmRleGVz OworfSBwZ3BhX3Ryb3ZlX2VudHJ5X2VsZW1lbnQ7CisKK3N0YXRpYyB1aW50MzIgcGdwYV90cm92 ZV9lbnRyeV9oYXNoX2tleShwZ3BhX3Ryb3ZlX2VudHJ5X2tleSBrZXkpOworCitzdGF0aWMgaW5s aW5lIGJvb2wKK3BncGFfdHJvdmVfZW50cnlfY29tcGFyZV9rZXkocGdwYV90cm92ZV9lbnRyeV9r ZXkgYSwgcGdwYV90cm92ZV9lbnRyeV9rZXkgYikKK3sKKwlpZiAoc3RyY21wKGEuYWxpYXNfbmFt ZSwgYi5hbGlhc19uYW1lKSAhPSAwKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoIXN0cmluZ3Nf ZXF1YWxfb3JfYm90aF9udWxsKGEucGFydGl0aW9uX25hbWUsIGIucGFydGl0aW9uX25hbWUpKQor CQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoIXN0cmluZ3NfZXF1YWxfb3JfYm90aF9udWxsKGEucGxh bl9uYW1lLCBiLnBsYW5fbmFtZSkpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOwor fQorCisjZGVmaW5lIFNIX1BSRUZJWAkJCXBncGFfdHJvdmVfZW50cnkKKyNkZWZpbmUgU0hfRUxF TUVOVF9UWVBFCQlwZ3BhX3Ryb3ZlX2VudHJ5X2VsZW1lbnQKKyNkZWZpbmUgU0hfS0VZX1RZUEUJ CQlwZ3BhX3Ryb3ZlX2VudHJ5X2tleQorI2RlZmluZSBTSF9LRVkJCQkJa2V5CisjZGVmaW5lIFNI X0hBU0hfS0VZKHRiLCBrZXkpCXBncGFfdHJvdmVfZW50cnlfaGFzaF9rZXkoa2V5KQorI2RlZmlu ZQlTSF9FUVVBTCh0YiwgYSwgYikJcGdwYV90cm92ZV9lbnRyeV9jb21wYXJlX2tleShhLCBiKQor I2RlZmluZSBTSF9TQ09QRQkJCXN0YXRpYyBpbmxpbmUKKyNkZWZpbmUgU0hfREVDTEFSRQorI2Rl ZmluZSBTSF9ERUZJTkUKKyNpbmNsdWRlICJsaWIvc2ltcGxlaGFzaC5oIgorCitzdGF0aWMgdm9p ZCBwZ3BhX2luaXRfdHJvdmVfc2xpY2UocGdwYV90cm92ZV9zbGljZSAqdHNsaWNlKTsKK3N0YXRp YyB2b2lkIHBncGFfdHJvdmVfYWRkX3RvX3NsaWNlKHBncGFfdHJvdmVfc2xpY2UgKnRzbGljZSwK KwkJCQkJCQkJCXBncGFfYWR2aWNlX3RhZ190eXBlIHRhZywKKwkJCQkJCQkJCXBncGFfYWR2aWNl X3RhcmdldCAqdGFyZ2V0KTsKK3N0YXRpYyB2b2lkIHBncGFfdHJvdmVfYWRkX3RvX2hhc2gocGdw YV90cm92ZV9lbnRyeV9oYXNoICpoYXNoLAorCQkJCQkJCQkgICBwZ3BhX2FkdmljZV90YXJnZXQg KnRhcmdldCwKKwkJCQkJCQkJICAgaW50IGluZGV4KTsKK3N0YXRpYyBCaXRtYXBzZXQgKnBncGFf dHJvdmVfc2xpY2VfbG9va3VwKHBncGFfdHJvdmVfc2xpY2UgKnRzbGljZSwKKwkJCQkJCQkJCQkg IHBncGFfaWRlbnRpZmllciAqcmlkKTsKKworLyoKKyAqIEJ1aWxkIGEgdHJvdmUgb2YgYWR2aWNl IGZyb20gYSBsaXN0IG9mIGFkdmljZSBpdGVtcy4KKyAqCisgKiBDYWxsZXIgY2FuIG9idGFpbiBh IGxpc3Qgb2YgYWR2aWNlIGl0ZW1zIHRvIHBhc3MgdG8gdGhpcyBmdW5jdGlvbiBieQorICogY2Fs bGluZyBwZ3BhX3BhcnNlKCkuCisgKi8KK3BncGFfdHJvdmUgKgorcGdwYV9idWlsZF90cm92ZShM aXN0ICphZHZpY2VfaXRlbXMpCit7CisJcGdwYV90cm92ZSAqdHJvdmUgPSBwYWxsb2Nfb2JqZWN0 KHBncGFfdHJvdmUpOworCisJcGdwYV9pbml0X3Ryb3ZlX3NsaWNlKCZ0cm92ZS0+am9pbik7CisJ cGdwYV9pbml0X3Ryb3ZlX3NsaWNlKCZ0cm92ZS0+cmVsKTsKKwlwZ3BhX2luaXRfdHJvdmVfc2xp Y2UoJnRyb3ZlLT5zY2FuKTsKKworCWZvcmVhY2hfcHRyKHBncGFfYWR2aWNlX2l0ZW0sIGl0ZW0s IGFkdmljZV9pdGVtcykKKwl7CisJCXN3aXRjaCAoaXRlbS0+dGFnKQorCQl7CisJCQljYXNlIFBH UEFfVEFHX0pPSU5fT1JERVI6CisJCQkJeworCQkJCQlwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdl dDsKKworCQkJCQkvKgorCQkJCQkgKiBGb3IgbW9zdCBhZHZpY2UgdHlwZXMsIGVhY2ggZWxlbWVu dCBpbiB0aGUgdG9wLWxldmVsCisJCQkJCSAqIGxpc3QgaXMgYSBzZXBhcmF0ZSB0YXJnZXQsIGJ1 dCBpdCdzIG1vc3QgY29udmVuaWVudCB0bworCQkJCQkgKiByZWdhcmQgdGhlIGVudGlyZXR5IG9m IGEgSk9JTl9PUkRFUiBzcGVjaWZpY2F0aW9uIGFzIGEKKwkJCQkJICogc2luZ2xlIHRhcmdldC4g U2luY2UgaXQgd2Fzbid0IHJlcHJlc2VudGVkIHRoYXQgd2F5CisJCQkJCSAqIGR1cmluZyBwYXJz aW5nLCBidWlsZCBhIHN1cnJvZ2F0ZSBvYmplY3Qgbm93LgorCQkJCQkgKi8KKwkJCQkJdGFyZ2V0 ID0gcGFsbG9jMF9vYmplY3QocGdwYV9hZHZpY2VfdGFyZ2V0KTsKKwkJCQkJdGFyZ2V0LT50dHlw ZSA9IFBHUEFfVEFSR0VUX09SREVSRURfTElTVDsKKwkJCQkJdGFyZ2V0LT5jaGlsZHJlbiA9IGl0 ZW0tPnRhcmdldHM7CisKKwkJCQkJcGdwYV90cm92ZV9hZGRfdG9fc2xpY2UoJnRyb3ZlLT5qb2lu LAorCQkJCQkJCQkJCQlpdGVtLT50YWcsIHRhcmdldCk7CisJCQkJfQorCQkJCWJyZWFrOworCisJ CQljYXNlIFBHUEFfVEFHX0JJVE1BUF9IRUFQX1NDQU46CisJCQljYXNlIFBHUEFfVEFHX0lOREVY X09OTFlfU0NBTjoKKwkJCWNhc2UgUEdQQV9UQUdfSU5ERVhfU0NBTjoKKwkJCWNhc2UgUEdQQV9U QUdfU0VRX1NDQU46CisJCQljYXNlIFBHUEFfVEFHX1RJRF9TQ0FOOgorCisJCQkJLyoKKwkJCQkg KiBTY2FuIGFkdmljZS4KKwkJCQkgKi8KKwkJCQlmb3JlYWNoX3B0cihwZ3BhX2FkdmljZV90YXJn ZXQsIHRhcmdldCwgaXRlbS0+dGFyZ2V0cykKKwkJCQl7CisJCQkJCS8qCisJCQkJCSAqIEZvciBu b3csIGFsbCBvZiBvdXIgc2NhbiB0eXBlcyB0YXJnZXQgc2luZ2xlIHJlbGF0aW9ucywKKwkJCQkJ ICogYnV0IGluIHRoZSBmdXR1cmUgdGhpcyBtaWdodCBub3QgYmUgdHJ1ZSwgZS5nLiBhIGN1c3Rv bQorCQkJCQkgKiBzY2FuIGNvdWxkIHJlcGxhY2UgYSBqb2luLgorCQkJCQkgKi8KKwkJCQkJQXNz ZXJ0KHRhcmdldC0+dHR5cGUgPT0gUEdQQV9UQVJHRVRfSURFTlRJRklFUik7CisJCQkJCXBncGFf dHJvdmVfYWRkX3RvX3NsaWNlKCZ0cm92ZS0+c2NhbiwKKwkJCQkJCQkJCQkJaXRlbS0+dGFnLCB0 YXJnZXQpOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSBQR1BBX1RBR19GT1JFSUdOX0pP SU46CisJCQljYXNlIFBHUEFfVEFHX0hBU0hfSk9JTjoKKwkJCWNhc2UgUEdQQV9UQUdfTUVSR0Vf Sk9JTl9NQVRFUklBTElaRToKKwkJCWNhc2UgUEdQQV9UQUdfTUVSR0VfSk9JTl9QTEFJTjoKKwkJ CWNhc2UgUEdQQV9UQUdfTkVTVEVEX0xPT1BfTUFURVJJQUxJWkU6CisJCQljYXNlIFBHUEFfVEFH X05FU1RFRF9MT09QX01FTU9JWkU6CisJCQljYXNlIFBHUEFfVEFHX05FU1RFRF9MT09QX1BMQUlO OgorCQkJY2FzZSBQR1BBX1RBR19TRU1JSk9JTl9OT05fVU5JUVVFOgorCQkJY2FzZSBQR1BBX1RB R19TRU1JSk9JTl9VTklRVUU6CisKKwkJCQkvKgorCQkJCSAqIEpvaW4gc3RyYXRlZ3kgYWR2aWNl LgorCQkJCSAqLworCQkJCWZvcmVhY2hfcHRyKHBncGFfYWR2aWNlX3RhcmdldCwgdGFyZ2V0LCBp dGVtLT50YXJnZXRzKQorCQkJCXsKKwkJCQkJcGdwYV90cm92ZV9hZGRfdG9fc2xpY2UoJnRyb3Zl LT5qb2luLAorCQkJCQkJCQkJCQlpdGVtLT50YWcsIHRhcmdldCk7CisJCQkJfQorCQkJCWJyZWFr OworCisJCQljYXNlIFBHUEFfVEFHX1BBUlRJVElPTldJU0U6CisJCQljYXNlIFBHUEFfVEFHX0dB VEhFUjoKKwkJCWNhc2UgUEdQQV9UQUdfR0FUSEVSX01FUkdFOgorCQkJY2FzZSBQR1BBX1RBR19O T19HQVRIRVI6CisKKwkJCQkvKgorCQkJCSAqIEFkdmljZSBhYm91dCBhIFJlbE9wdEluZm8gcmVs ZXZhbnQgdG8gYm90aCBzY2FucyBhbmQgam9pbnMuCisJCQkJICovCisJCQkJZm9yZWFjaF9wdHIo cGdwYV9hZHZpY2VfdGFyZ2V0LCB0YXJnZXQsIGl0ZW0tPnRhcmdldHMpCisJCQkJeworCQkJCQlw Z3BhX3Ryb3ZlX2FkZF90b19zbGljZSgmdHJvdmUtPnJlbCwKKwkJCQkJCQkJCQkJaXRlbS0+dGFn LCB0YXJnZXQpOworCQkJCX0KKwkJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiB0cm92ZTsK K30KKworLyoKKyAqIFNlYXJjaCBhIHRyb3ZlIG9mIGFkdmljZSBmb3IgcmVsZXZhbnQgZW50cmll cy4KKyAqCisgKiBBbGwgcGFyYW1ldGVycyBhcmUgaW5wdXQgcGFyYW1ldGVycyBleGNlcHQgZm9y ICpyZXN1bHQsIHdoaWNoIGlzIGFuIG91dHB1dAorICogcGFyYW1ldGVyIHVzZWQgdG8gcmV0dXJu IHJlc3VsdHMgdG8gdGhlIGNhbGxlci4KKyAqLwordm9pZAorcGdwYV90cm92ZV9sb29rdXAocGdw YV90cm92ZSAqdHJvdmUsIHBncGFfdHJvdmVfbG9va3VwX3R5cGUgdHlwZSwKKwkJCQkgIGludCBu cmlkcywgcGdwYV9pZGVudGlmaWVyICpyaWRzLCBwZ3BhX3Ryb3ZlX3Jlc3VsdCAqcmVzdWx0KQor eworCXBncGFfdHJvdmVfc2xpY2UgKnRzbGljZTsKKwlCaXRtYXBzZXQgICppbmRleGVzOworCisJ QXNzZXJ0KG5yaWRzID4gMCk7CisKKwlpZiAodHlwZSA9PSBQR1BBX1RST1ZFX0xPT0tVUF9TQ0FO KQorCQl0c2xpY2UgPSAmdHJvdmUtPnNjYW47CisJZWxzZSBpZiAodHlwZSA9PSBQR1BBX1RST1ZF X0xPT0tVUF9KT0lOKQorCQl0c2xpY2UgPSAmdHJvdmUtPmpvaW47CisJZWxzZQorCQl0c2xpY2Ug PSAmdHJvdmUtPnJlbDsKKworCWluZGV4ZXMgPSBwZ3BhX3Ryb3ZlX3NsaWNlX2xvb2t1cCh0c2xp Y2UsICZyaWRzWzBdKTsKKwlmb3IgKGludCBpID0gMTsgaSA8IG5yaWRzOyArK2kpCisJeworCQlC aXRtYXBzZXQgICpvdGhlcl9pbmRleGVzOworCisJCS8qCisJCSAqIElmIHRoZSBjYWxsZXIgaXMg YXNraW5nIGFib3V0IHR3byByZWxhdGlvbnMgdGhhdCBhcmVuJ3QgcGFydCBvZiB0aGUKKwkJICog c2FtZSBzdWJxdWVyeSwgdGhleSd2ZSBtZXNzZWQgdXAuCisJCSAqLworCQlBc3NlcnQoc3RyaW5n c19lcXVhbF9vcl9ib3RoX251bGwocmlkc1swXS5wbGFuX25hbWUsCisJCQkJCQkJCQkJICByaWRz W2ldLnBsYW5fbmFtZSkpOworCisJCW90aGVyX2luZGV4ZXMgPSBwZ3BhX3Ryb3ZlX3NsaWNlX2xv b2t1cCh0c2xpY2UsICZyaWRzW2ldKTsKKwkJaW5kZXhlcyA9IGJtc191bmlvbihpbmRleGVzLCBv dGhlcl9pbmRleGVzKTsKKwl9CisKKwlyZXN1bHQtPmVudHJpZXMgPSB0c2xpY2UtPmVudHJpZXM7 CisJcmVzdWx0LT5pbmRleGVzID0gaW5kZXhlczsKK30KKworLyoKKyAqIFJldHVybiBhbGwgZW50 cmllcyBpbiBhIHRyb3ZlIHNsaWNlIHRvIHRoZSBjYWxsZXIuCisgKgorICogVGhlIGZpcnN0IHR3 byBhcmd1bWVudHMgYXJlIGlucHV0IGFyZ3VtZW50cywgYW5kIHRoZSByZW1haW5kZXIgYXJlIG91 dHB1dAorICogYXJndW1lbnRzLgorICovCit2b2lkCitwZ3BhX3Ryb3ZlX2xvb2t1cF9hbGwocGdw YV90cm92ZSAqdHJvdmUsIHBncGFfdHJvdmVfbG9va3VwX3R5cGUgdHlwZSwKKwkJCQkJICBwZ3Bh X3Ryb3ZlX2VudHJ5ICoqZW50cmllcywgaW50ICpuZW50cmllcykKK3sKKwlwZ3BhX3Ryb3ZlX3Ns aWNlICp0c2xpY2U7CisKKwlpZiAodHlwZSA9PSBQR1BBX1RST1ZFX0xPT0tVUF9TQ0FOKQorCQl0 c2xpY2UgPSAmdHJvdmUtPnNjYW47CisJZWxzZSBpZiAodHlwZSA9PSBQR1BBX1RST1ZFX0xPT0tV UF9KT0lOKQorCQl0c2xpY2UgPSAmdHJvdmUtPmpvaW47CisJZWxzZQorCQl0c2xpY2UgPSAmdHJv dmUtPnJlbDsKKworCSplbnRyaWVzID0gdHNsaWNlLT5lbnRyaWVzOworCSpuZW50cmllcyA9IHRz bGljZS0+bnVzZWQ7Cit9CisKKy8qCisgKiBDb252ZXJ0IGEgdHJvdmUgZW50cnkgdG8gYW4gaXRl bSBvZiBwbGFuIGFkdmljZSB0aGF0IHdvdWxkIHByb2R1Y2UgaXQuCisgKi8KK2NoYXIgKgorcGdw YV9jc3RyaW5nX3Ryb3ZlX2VudHJ5KHBncGFfdHJvdmVfZW50cnkgKmVudHJ5KQoreworCVN0cmlu Z0luZm9EYXRhIGJ1ZjsKKworCWluaXRTdHJpbmdJbmZvKCZidWYpOworCWFwcGVuZFN0cmluZ0lu Zm8oJmJ1ZiwgIiVzIiwgcGdwYV9jc3RyaW5nX2FkdmljZV90YWcoZW50cnktPnRhZykpOworCisJ LyogSk9JTl9PUkRFUiB0YWdzIGFyZSB0cmFuc2Zvcm1lZCBieSBwZ3BhX2J1aWxkX3Ryb3ZlOyB1 bmRvIHRoYXQgaGVyZSAqLworCWlmIChlbnRyeS0+dGFnICE9IFBHUEFfVEFHX0pPSU5fT1JERVIp CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZidWYsICcoJyk7CisJZWxzZQorCQlBc3NlcnQoZW50 cnktPnRhcmdldC0+dHR5cGUgPT0gUEdQQV9UQVJHRVRfT1JERVJFRF9MSVNUKTsKKworCXBncGFf Zm9ybWF0X2FkdmljZV90YXJnZXQoJmJ1ZiwgZW50cnktPnRhcmdldCk7CisKKwlpZiAoZW50cnkt PnRhcmdldC0+aXRhcmdldCAhPSBOVUxMKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmJ1 ZiwgJyAnKTsKKwkJcGdwYV9mb3JtYXRfaW5kZXhfdGFyZ2V0KCZidWYsIGVudHJ5LT50YXJnZXQt Pml0YXJnZXQpOworCX0KKworCWlmIChlbnRyeS0+dGFnICE9IFBHUEFfVEFHX0pPSU5fT1JERVIp CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZidWYsICcpJyk7CisKKwlyZXR1cm4gYnVmLmRhdGE7 Cit9CisKKy8qCisgKiBTZXQgUEdQQV9URV8qIGZsYWdzIG9uIGEgc2V0IG9mIHRyb3ZlIGVudHJp ZXMuCisgKi8KK3ZvaWQKK3BncGFfdHJvdmVfc2V0X2ZsYWdzKHBncGFfdHJvdmVfZW50cnkgKmVu dHJpZXMsIEJpdG1hcHNldCAqaW5kZXhlcywgaW50IGZsYWdzKQoreworCWludAkJCWkgPSAtMTsK KworCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihpbmRleGVzLCBpKSkgPj0gMCkKKwl7CisJ CXBncGFfdHJvdmVfZW50cnkgKmVudHJ5ID0gJmVudHJpZXNbaV07CisKKwkJZW50cnktPmZsYWdz IHw9IGZsYWdzOworCX0KK30KKworLyoKKyAqIEFkZCBhIG5ldyBhZHZpY2UgdGFyZ2V0IHRvIGFu IGV4aXN0aW5nIHBncGFfdHJvdmVfc2xpY2Ugb2JqZWN0LgorICovCitzdGF0aWMgdm9pZAorcGdw YV90cm92ZV9hZGRfdG9fc2xpY2UocGdwYV90cm92ZV9zbGljZSAqdHNsaWNlLAorCQkJCQkJcGdw YV9hZHZpY2VfdGFnX3R5cGUgdGFnLAorCQkJCQkJcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQp Cit7CisJcGdwYV90cm92ZV9lbnRyeSAqZW50cnk7CisKKwlpZiAodHNsaWNlLT5udXNlZCA+PSB0 c2xpY2UtPm5hbGxvY2F0ZWQpCisJeworCQlpbnQJCQluZXdfYWxsb2NhdGVkOworCisJCW5ld19h bGxvY2F0ZWQgPSB0c2xpY2UtPm5hbGxvY2F0ZWQgKiAyOworCQl0c2xpY2UtPmVudHJpZXMgPSBy ZXBhbGxvY19hcnJheSh0c2xpY2UtPmVudHJpZXMsIHBncGFfdHJvdmVfZW50cnksCisJCQkJCQkJ CQkJIG5ld19hbGxvY2F0ZWQpOworCQl0c2xpY2UtPm5hbGxvY2F0ZWQgPSBuZXdfYWxsb2NhdGVk OworCX0KKworCWVudHJ5ID0gJnRzbGljZS0+ZW50cmllc1t0c2xpY2UtPm51c2VkXTsKKwllbnRy eS0+dGFnID0gdGFnOworCWVudHJ5LT50YXJnZXQgPSB0YXJnZXQ7CisJZW50cnktPmZsYWdzID0g MDsKKworCXBncGFfdHJvdmVfYWRkX3RvX2hhc2godHNsaWNlLT5oYXNoLCB0YXJnZXQsIHRzbGlj ZS0+bnVzZWQpOworCisJdHNsaWNlLT5udXNlZCsrOworfQorCisvKgorICogVXBkYXRlIHRoZSBo YXNoIHRhYmxlIGZvciBhIG5ld2x5LWFkZGVkIGFkdmljZSB0YXJnZXQuCisgKi8KK3N0YXRpYyB2 b2lkCitwZ3BhX3Ryb3ZlX2FkZF90b19oYXNoKHBncGFfdHJvdmVfZW50cnlfaGFzaCAqaGFzaCwg cGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQsCisJCQkJCSAgIGludCBpbmRleCkKK3sKKwlwZ3Bh X3Ryb3ZlX2VudHJ5X2tleSBrZXk7CisJcGdwYV90cm92ZV9lbnRyeV9lbGVtZW50ICplbGVtZW50 OworCWJvb2wJCWZvdW5kOworCisJLyogRm9yIG5vbi1pZGVudGlmaWVycywgYWRkIGVudHJpZXMg Zm9yIGFsbCBkZXNjZW5kZW50cy4gKi8KKwlpZiAodGFyZ2V0LT50dHlwZSAhPSBQR1BBX1RBUkdF VF9JREVOVElGSUVSKQorCXsKKwkJZm9yZWFjaF9wdHIocGdwYV9hZHZpY2VfdGFyZ2V0LCBjaGls ZF90YXJnZXQsIHRhcmdldC0+Y2hpbGRyZW4pCisJCXsKKwkJCXBncGFfdHJvdmVfYWRkX3RvX2hh c2goaGFzaCwgY2hpbGRfdGFyZ2V0LCBpbmRleCk7CisJCX0KKwkJcmV0dXJuOworCX0KKworCS8q IFNhbml0eSBjaGVja3MuICovCisJQXNzZXJ0KHRhcmdldC0+cmlkLm9jY3VycmVuY2UgPiAwKTsK KwlBc3NlcnQodGFyZ2V0LT5yaWQuYWxpYXNfbmFtZSAhPSBOVUxMKTsKKworCS8qIEFkZCBhbiBl bnRyeSBmb3IgdGhpcyByZWxhdGlvbiBpZGVudGlmaWVyLiAqLworCWtleS5hbGlhc19uYW1lID0g dGFyZ2V0LT5yaWQuYWxpYXNfbmFtZTsKKwlrZXkucGFydGl0aW9uX25hbWUgPSB0YXJnZXQtPnJp ZC5wYXJ0cmVsOworCWtleS5wbGFuX25hbWUgPSB0YXJnZXQtPnJpZC5wbGFuX25hbWU7CisJZWxl bWVudCA9IHBncGFfdHJvdmVfZW50cnlfaW5zZXJ0KGhhc2gsIGtleSwgJmZvdW5kKTsKKwlpZiAo IWZvdW5kKQorCQllbGVtZW50LT5pbmRleGVzID0gTlVMTDsKKwllbGVtZW50LT5pbmRleGVzID0g Ym1zX2FkZF9tZW1iZXIoZWxlbWVudC0+aW5kZXhlcywgaW5kZXgpOworfQorCisvKgorICogQ3Jl YXRlIGFuZCBpbml0aWFsaXplIGEgbmV3IHBncGFfdHJvdmVfc2xpY2Ugb2JqZWN0LgorICovCitz dGF0aWMgdm9pZAorcGdwYV9pbml0X3Ryb3ZlX3NsaWNlKHBncGFfdHJvdmVfc2xpY2UgKnRzbGlj ZSkKK3sKKwkvKgorCSAqIEluIGFuIGlkZWFsIHdvcmxkLCB3ZSdsbCBtYWtlIHRzbGljZS0+bmFs bG9jYXRlZCBiaWcgZW5vdWdoIHRoYXQgdGhlCisJICogYXJyYXkgYW5kIGhhc2ggdGFibGUgd2ls bCBiZSBsYXJnZSBlbm91Z2ggdG8gY29udGFpbiB0aGUgbnVtYmVyIG9mCisJICogYWR2aWNlIGl0 ZW1zIGluIHRoaXMgdHJvdmUgc2xpY2UsIGJ1dCBhIGdlbmVyb3VzIGRlZmF1bHQgdmFsdWUgaXMg bm90CisJICogZ29vZCBmb3IgcGVyZm9ybWFuY2UsIGJlY2F1c2UgcGdwYV9pbml0X3Ryb3ZlX3Ns aWNlKCkgaGFzIHRvIHplcm8gYW4KKwkgKiBhbW91bnQgb2YgbWVtb3J5IHByb3BvcnRpb25hbCB0 byB0c2xpY2UtPm5hbGxvY2F0ZWQuIEhlbmNlLCB3ZSBrZWVwIHRoZQorCSAqIHN0YXJ0aW5nIHZh bHVlIHF1aXRlIHNtYWxsLCBvbiB0aGUgdGhlb3J5IHRoYXQgYWR2aWNlIHN0cmluZ3Mgd2lsbAor CSAqIG9mdGVuIGJlIHJlbGF0aXZlbHkgc2hvcnQuCisJICovCisJdHNsaWNlLT5uYWxsb2NhdGVk ID0gMTY7CisJdHNsaWNlLT5udXNlZCA9IDA7CisJdHNsaWNlLT5lbnRyaWVzID0gcGFsbG9jX2Fy cmF5KHBncGFfdHJvdmVfZW50cnksIHRzbGljZS0+bmFsbG9jYXRlZCk7CisJdHNsaWNlLT5oYXNo ID0gcGdwYV90cm92ZV9lbnRyeV9jcmVhdGUoQ3VycmVudE1lbW9yeUNvbnRleHQsCisJCQkJCQkJ CQkJICAgdHNsaWNlLT5uYWxsb2NhdGVkLCBOVUxMKTsKK30KKworLyoKKyAqIEZhc3QgaGFzaCBm dW5jdGlvbiBmb3IgYSBrZXkgY29uc2lzdGluZyBvZiBhbGlhc19uYW1lLCBwYXJ0aXRpb25fbmFt ZSwKKyAqIGFuZCBwbGFuX25hbWUuCisgKi8KK3N0YXRpYyB1aW50MzIKK3BncGFfdHJvdmVfZW50 cnlfaGFzaF9rZXkocGdwYV90cm92ZV9lbnRyeV9rZXkga2V5KQoreworCWZhc3RoYXNoX3N0YXRl IGhzOworCWludAkJCXNwX2xlbjsKKworCWZhc3RoYXNoX2luaXQoJmhzLCAwKTsKKworCS8qIGFs aWFzX25hbWUgbWF5IG5vdCBiZSBOVUxMICovCisJc3BfbGVuID0gZmFzdGhhc2hfYWNjdW1fY3N0 cmluZygmaHMsIGtleS5hbGlhc19uYW1lKTsKKworCS8qIHBhcnRpdGlvbl9uYW1lIGFuZCBwbGFu X25hbWUsIGhvd2V2ZXIsIGNhbiBiZSBOVUxMICovCisJaWYgKGtleS5wYXJ0aXRpb25fbmFtZSAh PSBOVUxMKQorCQlzcF9sZW4gKz0gZmFzdGhhc2hfYWNjdW1fY3N0cmluZygmaHMsIGtleS5wYXJ0 aXRpb25fbmFtZSk7CisJaWYgKGtleS5wbGFuX25hbWUgIT0gTlVMTCkKKwkJc3BfbGVuICs9IGZh c3RoYXNoX2FjY3VtX2NzdHJpbmcoJmhzLCBrZXkucGxhbl9uYW1lKTsKKworCS8qCisJICogaGFz aGZuX3Vuc3RhYmxlLmggcmVjb21tZW5kcyB1c2luZyBzdHJpbmcgbGVuZ3RoIGFzIHR3ZWFrLiBJ dCdzIG5vdAorCSAqIGNsZWFyIHRvIG1lIHdoYXQgdG8gZG8gaWYgdGhlcmUgYXJlIG11bHRpcGxl IHN0cmluZ3MsIHNvIGZvciBub3cgSSdtCisJICoganVzdCB1c2luZyB0aGUgdG90YWwgb2YgYWxs IG9mIHRoZSBsZW5ndGhzLgorCSAqLworCXJldHVybiBmYXN0aGFzaF9maW5hbDMyKCZocywgc3Bf bGVuKTsKK30KKworLyoKKyAqIExvb2sgZm9yIG1hdGNoaW5nIGVudHJpZXMuCisgKi8KK3N0YXRp YyBCaXRtYXBzZXQgKgorcGdwYV90cm92ZV9zbGljZV9sb29rdXAocGdwYV90cm92ZV9zbGljZSAq dHNsaWNlLCBwZ3BhX2lkZW50aWZpZXIgKnJpZCkKK3sKKwlwZ3BhX3Ryb3ZlX2VudHJ5X2tleSBr ZXk7CisJcGdwYV90cm92ZV9lbnRyeV9lbGVtZW50ICplbGVtZW50OworCUJpdG1hcHNldCAgKnJl c3VsdCA9IE5VTEw7CisKKwlBc3NlcnQocmlkLT5vY2N1cnJlbmNlID49IDEpOworCisJa2V5LmFs aWFzX25hbWUgPSByaWQtPmFsaWFzX25hbWU7CisJa2V5LnBhcnRpdGlvbl9uYW1lID0gcmlkLT5w YXJ0cmVsOworCWtleS5wbGFuX25hbWUgPSByaWQtPnBsYW5fbmFtZTsKKworCWVsZW1lbnQgPSBw Z3BhX3Ryb3ZlX2VudHJ5X2xvb2t1cCh0c2xpY2UtPmhhc2gsIGtleSk7CisKKwlpZiAoZWxlbWVu dCAhPSBOVUxMKQorCXsKKwkJaW50CQkJaSA9IC0xOworCisJCXdoaWxlICgoaSA9IGJtc19uZXh0 X21lbWJlcihlbGVtZW50LT5pbmRleGVzLCBpKSkgPj0gMCkKKwkJeworCQkJcGdwYV90cm92ZV9l bnRyeSAqZW50cnkgPSAmdHNsaWNlLT5lbnRyaWVzW2ldOworCisJCQkvKgorCQkJICogV2Uga25v dyB0aGF0IHRoaXMgdGFyZ2V0IG9yIG9uZSBvZiBpdHMgZGVzY2VuZGVudHMgbWF0Y2hlcyB0aGUK KwkJCSAqIGlkZW50aWZpZXIgb24gdGhlIHRocmVlIGtleSBmaWVsZHMgYWJvdmUsIGJ1dCB3ZSBk b24ndCBrbm93CisJCQkgKiB3aGljaCBkZXNjZW5kZW50IG9yIHdoZXRoZXIgdGhlIG9jY3VyZW5j ZSBhbmQgc2NoZW1hIGFsc28KKwkJCSAqIG1hdGNoLgorCQkJICovCisJCQlpZiAocGdwYV9pZGVu dGlmaWVyX21hdGNoZXNfdGFyZ2V0KHJpZCwgZW50cnktPnRhcmdldCkpCisJCQkJcmVzdWx0ID0g Ym1zX2FkZF9tZW1iZXIocmVzdWx0LCBpKTsKKwkJfQorCX0KKworCXJldHVybiByZXN1bHQ7Cit9 CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfdHJvdmUuaCBiL2NvbnRy aWIvcGdfcGxhbl9hZHZpY2UvcGdwYV90cm92ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwLi40NzljM2Y3NTc3OAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdf cGxhbl9hZHZpY2UvcGdwYV90cm92ZS5oCkBAIC0wLDAgKzEsMTEzIEBACisvKi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAqCisgKiBwZ3BhX3Ryb3ZlLmgKKyAqCSAgQWxsIG9mIHRoZSBhZHZpY2UgZ2l2ZW4g Zm9yIGEgcGFydGljdWxhciBxdWVyeSwgYXBwcm9wcmlhdGVseQorICogICAgb3JnYW5pemVkIGZv ciBjb252ZW5pZW50IGFjY2Vzcy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNCwgUG9z dGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxh bl9hZHZpY2UvcGdwYV90cm92ZS5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5k ZWYgUEdQQV9UUk9WRV9ICisjZGVmaW5lIFBHUEFfVFJPVkVfSAorCisjaW5jbHVkZSAicGdwYV9h c3QuaCIKKworI2luY2x1ZGUgIm5vZGVzL2JpdG1hcHNldC5oIgorCit0eXBlZGVmIHN0cnVjdCBw Z3BhX3Ryb3ZlIHBncGFfdHJvdmU7CisKKy8qCisgKiBGbGFncyB0aGF0IGNhbiBiZSBzZXQgb24g YSBwZ3BhX3Ryb3ZlX2VudHJ5IHRvIGluZGljYXRlIHdoYXQgaGFwcGVuZWQgd2hlbgorICogdHJ5 aW5nIHRvIHBsYW4gdXNpbmcgYWR2aWNlLgorICoKKyAqIFBHUEFfVEVfTUFUQ0hfUEFSVElBTCBt ZWFucyB0aGF0IHdlIGZvdW5kIHNvbWUgcGFydCBvZiB0aGUgcXVlcnkgdGhhdCBhdAorICogbGVh c3QgcGFydGlhbGx5IG1hdGNoZWQgdGhlIHRhcmdldDsgZS5nLiBnaXZlbiBKT0lOX09SREVSKGEg YiksIHRoaXMgd291bGQKKyAqIGJlIHNldCBpZiB3ZSBldmVyIHNhdyBhbnkgam9pbnJlbCBpbmNs dWRpbmcgZWl0aGVyICJhIiBvciAiYiIuCisgKgorICogUEdQQV9URV9NQVRDSF9GVUxMIG1lYW5z IHRoYXQgd2UgZm91bmQgYW4gZXhhY3QgbWF0Y2ggZm9yIHRoZSB0YXJnZXQ7IGUuZy4KKyAqIGdp dmVuIEpPSU5fT1JERVIoYSBiKSwgdGhpcyB3b3VsZCBiZSBzZXQgaWYgd2Ugc2F3IGEgam9pbnJl bCBjb250YWluaW5nCisgKiBleGFjdGx5ICJhIiBhbmQgImIiIGFuZCBub3RoaW5nIGVsc2UuCisg KgorICogUEdQQV9URV9JTkFQUExJQ0FCTEUgbWVhbnMgdGhhdCB0aGUgYWR2aWNlIGRvZXNuJ3Qg cHJvcGVybHkgYXBwbHkgdG8gdGhlCisgKiB0YXJnZXQ7IGUuZy4gSU5ERVhfU0NBTihmb28gYmFy X2lkeCkgd291bGQgYmUgc28gbWFya2VkIGlmIGJhcl9pZHggZG9lcyBub3QKKyAqIGV4aXN0IG9u IGZvby4gVGhlIGZhY3QgdGhhdCB0aGlzIGJpdCBoYXMgYmVlbiBzZXQgZG9lcyBub3QgbWVhbiB0 aGF0IHRoZQorICogYWR2aWNlIGhhZCBubyBlZmZlY3QuCisgKgorICogUEdQQV9URV9DT05GTElD VElORyBtZWFucyB0aGF0IGEgY29uZmxpY3Qgd2FzIGRldGVjdGVkIGJldHdlZW4gd2hhdCB0aGlz CisgKiBhZHZpY2Ugd2FudHMgYW5kIHdoYXQgc29tZSBvdGhlciBwbGFuIGFkdmljZSB3YW50czsg ZS5nLiBKT0lOX09SREVSKGEgYikKKyAqIHdvdWxkIGNvbmZsaWN0IHdpdGggSEFTSF9KT0lOKGEp LCBiZWNhdXNlIHRoZSBmb3JtZXIgcmVxdWlyZXMgImEiIHRvIGJlIHRoZQorICogb3V0ZXIgdGFi bGUgd2hpbGUgdGhlIGxhdHRlciByZXF1aXJlcyBpdCB0byBiZSB0aGUgaW5uZXIgdGFibGUuCisg KgorICogUEdQQV9URV9GQUlMRUQgbWVhbnMgdGhhdCB0aGUgcmVzdWx0aW5nIHBsYW4gZGlkIG5v dCBjb25mb3JtIHRvIHRoZSBhZHZpY2UuCisgKi8KKyNkZWZpbmUgUEdQQV9URV9NQVRDSF9QQVJU SUFMCQkweDAwMDEKKyNkZWZpbmUgUEdQQV9URV9NQVRDSF9GVUxMCQkJMHgwMDAyCisjZGVmaW5l IFBHUEFfVEVfSU5BUFBMSUNBQkxFCQkweDAwMDQKKyNkZWZpbmUgUEdQQV9URV9DT05GTElDVElO RwkJCTB4MDAwOAorI2RlZmluZSBQR1BBX1RFX0ZBSUxFRAkJCQkweDAwMTAKKworLyoKKyAqIEVh Y2ggZW50cnkgaW4gYSB0cm92ZSBvZiBhZHZpY2UgcmVwcmVzZW50cyB0aGUgYXBwbGljYXRpb24g b2YgYSB0YWcgdG8KKyAqIGEgc2luZ2xlIHRhcmdldC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdw YV90cm92ZV9lbnRyeQoreworCXBncGFfYWR2aWNlX3RhZ190eXBlIHRhZzsKKwlwZ3BhX2Fkdmlj ZV90YXJnZXQgKnRhcmdldDsKKwlpbnQJCQlmbGFnczsKK30gcGdwYV90cm92ZV9lbnRyeTsKKwor LyoKKyAqIFdoYXQga2luZCBvZiBpbmZvcm1hdGlvbiBkb2VzIHRoZSBjYWxsZXIgd2FudCB0byBm aW5kIGluIGEgdHJvdmU/CisgKgorICogUEdQQV9UUk9WRV9MT09LVVBfU0NBTiBtZWFucyB3ZSdy ZSBsb29raW5nIGZvciBzY2FuIGFkdmljZS4KKyAqCisgKiBQR1BBX1RST1ZFX0xPT0tVUF9KT0lO IG1lYW5zIHdlJ3JlIGxvb2tpbmcgZm9yIGpvaW4tcmVsYXRlZCBhZHZpY2UuCisgKiBUaGlzIGlu Y2x1ZGVzIGpvaW4gb3JkZXIgYWR2aWNlLCBqb2luIG1ldGhvZCBhZHZpY2UsIGFuZCBzZW1pam9p bi11bmlxdWVuZXNzCisgKiBhZHZpY2UuCisgKgorICogUEdQQV9UUk9WRV9MT09LVVBfUkVMIG1l YW5zIHdlJ3JlIGxvb2tpbmcgZm9yIGdlbmVyYWwgYWR2aWNlIGFib3V0IHRoaXMKKyAqIGEgUmVs T3B0SW5mbyB0aGF0IG1heSBjb3JyZXNwb25kIHRvIGVpdGhlciBhIHNjYW4gb3IgYSBqb2luLiBU aGlzIGluY2x1ZGVzCisgKiBnYXRoZXItcmVsYXRlZCBhZHZpY2UgYW5kIHBhcnRpdGlvbndpc2Ug YWR2aWNlLiBOb3RlIHRoYXQgcGFydGl0aW9ud2lzZQorICogYWR2aWNlIG1pZ2h0IHNlZW0gbGlr ZSBqb2luIGFkdmljZSwgYnV0IHRoYXQncyBub3QgYSBoZWxwZnVsIHdheSBvZiB2aWV3aW5nCisg KiB0aGUgbWF0dGVyIGJlY2F1c2UgKDEpIHBhcnRpdGlvbndpc2UgYWR2aWNlIGlzIGFsc28gcmVs ZXZhbnQgYXQgdGhlIHNjYW4KKyAqIGxldmVsIGFuZCAoMikgb3RoZXIgdHlwZXMgb2Ygam9pbiBh ZHZpY2UgYWZmZWN0IG9ubHkgd2hhdCB0byBkbyBmcm9tCisgKiBqb2luX3BhdGhfc2V0dXBfaG9v aywgYnV0IHBhcnRpdGlvbndpc2UgYWR2aWNlIGFmZmVjdHMgd2hhdCB0byBkbyBpbgorICogam9p bnJlbF9zZXR1cF9ob29rLgorICovCit0eXBlZGVmIGVudW0gcGdwYV90cm92ZV9sb29rdXBfdHlw ZQoreworCVBHUEFfVFJPVkVfTE9PS1VQX0pPSU4sCisJUEdQQV9UUk9WRV9MT09LVVBfUkVMLAor CVBHUEFfVFJPVkVfTE9PS1VQX1NDQU4KK30gcGdwYV90cm92ZV9sb29rdXBfdHlwZTsKKworLyoK KyAqIFRoaXMgc3RydWN0IGlzIHVzZWQgdG8gc3RvcmUgdGhlIHJlc3VsdCBvZiBhIHRyb3ZlIGxv b2t1cC4gRm9yIGVhY2ggbWVtYmVyCisgKiBvZiAiaW5kZXhlcyIsIHRoZSBlbnRyeSBhdCB0aGUg Y29ycmVzcG9uZGluZyBvZmZzZXQgd2l0aGluICJlbnRyaWVzIiBpcyBvbmUKKyAqIG9mIHRoZSBy ZXN1bHRzLgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX3Ryb3ZlX3Jlc3VsdAoreworCXBncGFf dHJvdmVfZW50cnkgKmVudHJpZXM7CisJQml0bWFwc2V0ICAqaW5kZXhlczsKK30gcGdwYV90cm92 ZV9yZXN1bHQ7CisKK2V4dGVybiBwZ3BhX3Ryb3ZlICpwZ3BhX2J1aWxkX3Ryb3ZlKExpc3QgKmFk dmljZV9pdGVtcyk7CitleHRlcm4gdm9pZCBwZ3BhX3Ryb3ZlX2xvb2t1cChwZ3BhX3Ryb3ZlICp0 cm92ZSwKKwkJCQkJCQkgIHBncGFfdHJvdmVfbG9va3VwX3R5cGUgdHlwZSwKKwkJCQkJCQkgIGlu dCBucmlkcywKKwkJCQkJCQkgIHBncGFfaWRlbnRpZmllciAqcmlkcywKKwkJCQkJCQkgIHBncGFf dHJvdmVfcmVzdWx0ICpyZXN1bHQpOworZXh0ZXJuIHZvaWQgcGdwYV90cm92ZV9sb29rdXBfYWxs KHBncGFfdHJvdmUgKnRyb3ZlLAorCQkJCQkJCQkgIHBncGFfdHJvdmVfbG9va3VwX3R5cGUgdHlw ZSwKKwkJCQkJCQkJICBwZ3BhX3Ryb3ZlX2VudHJ5ICoqZW50cmllcywKKwkJCQkJCQkJICBpbnQg Km5lbnRyaWVzKTsKK2V4dGVybiBjaGFyICpwZ3BhX2NzdHJpbmdfdHJvdmVfZW50cnkocGdwYV90 cm92ZV9lbnRyeSAqZW50cnkpOworZXh0ZXJuIHZvaWQgcGdwYV90cm92ZV9zZXRfZmxhZ3MocGdw YV90cm92ZV9lbnRyeSAqZW50cmllcywKKwkJCQkJCQkJIEJpdG1hcHNldCAqaW5kZXhlcywgaW50 IGZsYWdzKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3Bn cGFfd2Fsa2VyLmMgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2VyLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmMwYTg5MGU4M2RmCi0tLSAvZGV2L251 bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dhbGtlci5jCkBAIC0wLDAgKzEs OTUzIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3BhX3dhbGtlci5jCisgKgkgIFBs YW4gdHJlZSBpdGVyYXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNSwgUG9zdGdy ZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9h ZHZpY2UvcGdwYV93YWxrZXIuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVk ZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgInBncGFfam9pbi5oIgorI2luY2x1ZGUgInBncGFf c2Nhbi5oIgorI2luY2x1ZGUgInBncGFfd2Fsa2VyLmgiCisKKyNpbmNsdWRlICJub2Rlcy9wbGFu bm9kZXMuaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2V0cmVlLmgiCisKK3N0YXRpYyB2b2lkIHBn cGFfd2Fsa19yZWN1cnNpdmVseShwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwgUGxh biAqcGxhbiwKKwkJCQkJCQkJICBib29sIHdpdGhpbl9qb2luX3Byb2JsZW0sCisJCQkJCQkJCSAg cGdwYV9qb2luX3Vucm9sbGVyICpqb2luX3Vucm9sbGVyLAorCQkJCQkJCQkgIExpc3QgKmFjdGl2 ZV9xdWVyeV9mZWF0dXJlcywKKwkJCQkJCQkJICBib29sIGJlbmVhdGhfYW55X2dhdGhlcik7Citz dGF0aWMgQml0bWFwc2V0ICpwZ3BhX3Byb2Nlc3NfdW5yb2xsZWRfam9pbihwZ3BhX3BsYW5fd2Fs a2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkJCQkJIHBncGFfdW5yb2xsZWRfam9pbiAqdWpv aW4pOworCitzdGF0aWMgcGdwYV9xdWVyeV9mZWF0dXJlICpwZ3BhX2FkZF9mZWF0dXJlKHBncGFf cGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCQkJCQlwZ3BhX3FmX3R5cGUgdHlw ZSwKKwkJCQkJCQkJCQkJUGxhbiAqcGxhbik7CisKK3N0YXRpYyB2b2lkIHBncGFfcWZfYWRkX3J0 aShMaXN0ICphY3RpdmVfcXVlcnlfZmVhdHVyZXMsIEluZGV4IHJ0aSk7CitzdGF0aWMgdm9pZCBw Z3BhX3FmX2FkZF9ydGlzKExpc3QgKmFjdGl2ZV9xdWVyeV9mZWF0dXJlcywgQml0bWFwc2V0ICpy ZWxpZHMpOworc3RhdGljIHZvaWQgcGdwYV9xZl9hZGRfcGxhbl9ydGlzKExpc3QgKmFjdGl2ZV9x dWVyeV9mZWF0dXJlcywgUGxhbiAqcGxhbiwKKwkJCQkJCQkJICBMaXN0ICpydGFibGUpOworCitz dGF0aWMgYm9vbCBwZ3BhX3dhbGtlcl9qb2luX29yZGVyX21hdGNoZXMocGdwYV91bnJvbGxlZF9q b2luICp1am9pbiwKKwkJCQkJCQkJCQkgICBJbmRleCBydGFibGVfbGVuZ3RoLAorCQkJCQkJCQkJ CSAgIHBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmllcnMsCisJCQkJCQkJCQkJICAgcGdwYV9h ZHZpY2VfdGFyZ2V0ICp0YXJnZXQsCisJCQkJCQkJCQkJICAgYm9vbCB0b3BsZXZlbCk7CitzdGF0 aWMgYm9vbCBwZ3BhX3dhbGtlcl9qb2luX29yZGVyX21hdGNoZXNfbWVtYmVyKHBncGFfam9pbl9t ZW1iZXIgKm1lbWJlciwKKwkJCQkJCQkJCQkJCSAgSW5kZXggcnRhYmxlX2xlbmd0aCwKKwkJCQkJ CQkJCQkJCSAgcGdwYV9pZGVudGlmaWVyICpydF9pZGVudGlmaWVycywKKwkJCQkJCQkJCQkJCSAg cGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQpOworc3RhdGljIGJvb2wgcGdwYV93YWxrZXJfY29u dGFpbnNfc2NhbihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkJCSAg cGdwYV9zY2FuX3N0cmF0ZWd5IHN0cmF0ZWd5LAorCQkJCQkJCQkJICBCaXRtYXBzZXQgKnJlbGlk cyk7CitzdGF0aWMgYm9vbCBwZ3BhX3dhbGtlcl9jb250YWluc19mZWF0dXJlKHBncGFfcGxhbl93 YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCQkJCSBwZ3BhX3FmX3R5cGUgdHlwZSwKKwkJ CQkJCQkJCQkgQml0bWFwc2V0ICpyZWxpZHMpOworc3RhdGljIGJvb2wgcGdwYV93YWxrZXJfY29u dGFpbnNfam9pbihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkJCSAg cGdwYV9qb2luX3N0cmF0ZWd5IHN0cmF0ZWd5LAorCQkJCQkJCQkJICBCaXRtYXBzZXQgKnJlbGlk cyk7CitzdGF0aWMgYm9vbCBwZ3BhX3dhbGtlcl9jb250YWluc19ub19nYXRoZXIocGdwYV9wbGFu X3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkJCQkJICAgQml0bWFwc2V0ICpyZWxpZHMp OworCisvKgorICogVG9wLWxldmVsIGVudHJ5cG9pbnQgZm9yIHRoZSBwbGFuIHRyZWUgd2Fsay4K KyAqCisgKiBQb3B1bGF0ZXMgd2Fsa2VyIGJhc2VkIG9uIGEgdHJhdmVyc2FsIG9mIHRoZSBQbGFu IHRyZWVzIGluIHBzdG10LgorICoKKyAqIHNqX3VuaXF1ZV9yZWxzIGlzIGEgbGlzdCBvZiBwZ3Bh X3NqX3VuaXF1ZV9yZWwgb2JqZWN0cywgb25lIGZvciBlYWNoCisgKiByZWxhdGlvbiB3ZSBjb25z aWRlcmVkIG1ha2luZyB1bmlxdWUgYXMgcGFydCBvZiBzZW1pam9pbiBwbGFubmluZy4KKyAqLwor dm9pZAorcGdwYV9wbGFuX3dhbGtlcihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwg UGxhbm5lZFN0bXQgKnBzdG10LAorCQkJCSBMaXN0ICpzal91bmlxdWVfcmVscykKK3sKKwlMaXN0 Q2VsbCAgICpsYzsKKwlMaXN0CSAgICpzal91bmlxdWVfcnRpcyA9IE5VTEw7CisJTGlzdAkgICAq c2pfbm9udW5pcXVlX3FmcyA9IE5VTEw7CisKKwkvKiBJbml0aWFsaXphdGlvbi4gKi8KKwltZW1z ZXQod2Fsa2VyLCAwLCBzaXplb2YocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0KSk7CisJd2Fsa2Vy LT5wc3RtdCA9IHBzdG10OworCisJLyogV2FsayB0aGUgbWFpbiBwbGFuIHRyZWUuICovCisJcGdw YV93YWxrX3JlY3Vyc2l2ZWx5KHdhbGtlciwgcHN0bXQtPnBsYW5UcmVlLCAwLCBOVUxMLCBOSUws IGZhbHNlKTsKKworCS8qIE1haW4gcGxhbiB0cmVlIHdhbGsgd29uJ3QgcmVhY2ggc3VicGxhbnMs IHNvIHdhbGsgdGhvc2UuICovCisJZm9yZWFjaChsYywgcHN0bXQtPnN1YnBsYW5zKQorCXsKKwkJ UGxhbgkgICAqcGxhbiA9IGxmaXJzdChsYyk7CisKKwkJaWYgKHBsYW4gIT0gTlVMTCkKKwkJCXBn cGFfd2Fsa19yZWN1cnNpdmVseSh3YWxrZXIsIHBsYW4sIDAsIE5VTEwsIE5JTCwgZmFsc2UpOwor CX0KKworCS8qIEFkanVzdCBSVElzIGZyb20gc2pfdW5pcXVlX3JlbHMgZm9yIHRoZSBmbGF0dGVu ZWQgcmFuZ2UgdGFibGUuICovCisJZm9yZWFjaF9wdHIocGdwYV9zal91bmlxdWVfcmVsLCB1ciwg c2pfdW5pcXVlX3JlbHMpCisJeworCQlpbnQJCQlydGluZGV4ID0gLTE7CisJCWludAkJCXJ0b2Zm c2V0ID0gMDsKKwkJYm9vbAkJZHVtbXkgPSBmYWxzZTsKKwkJQml0bWFwc2V0ICAqcmVsaWRzID0g TlVMTDsKKworCQkvKiBJZiB0aGlzIGlzIGEgc3VicGxhbiwgZmluZCB0aGUgcmFuZ2UgdGFibGUg b2Zmc2V0LiAqLworCQlpZiAodXItPnBsYW5fbmFtZSAhPSBOVUxMKQorCQl7CisJCQlmb3JlYWNo X25vZGUoU3ViUGxhblJUSW5mbywgcnRpbmZvLCBwc3RtdC0+c3VicnRpbmZvcykKKwkJCXsKKwkJ CQlpZiAoc3RyY21wKHVyLT5wbGFuX25hbWUsIHJ0aW5mby0+cGxhbl9uYW1lKSA9PSAwKQorCQkJ CXsKKwkJCQkJcnRvZmZzZXQgPSBydGluZm8tPnJ0b2Zmc2V0OworCQkJCQlkdW1teSA9IHJ0aW5m by0+ZHVtbXk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKworCQkJaWYgKHJ0b2Zmc2V0ID09 IDApCisJCQkJZWxvZyhFUlJPUiwgIm5vIHJ0b2Zmc2V0IGZvciBwbGFuICVzIiwgdXItPnBsYW5f bmFtZSk7CisJCX0KKworCQkvKiBJZiB0aGlzIGVudHJ5IHBlcnRhaW5zIHRvIGEgZHVtbXkgc3Vi cXVlcnksIGlnbm9yZSBpdC4gKi8KKwkJaWYgKGR1bW15KQorCQkJY29udGludWU7CisKKwkJLyog T2Zmc2V0IGVhY2ggZW50cnkgZnJvbSB0aGUgb3JpZ2luYWwgc2V0LiAqLworCQl3aGlsZSAoKHJ0 aW5kZXggPSBibXNfbmV4dF9tZW1iZXIodXItPnJlbGlkcywgcnRpbmRleCkpID49IDApCisJCQly ZWxpZHMgPSBibXNfYWRkX21lbWJlcihyZWxpZHMsIHJ0aW5kZXggKyBydG9mZnNldCk7CisKKwkJ LyogU3RvcmUgdGhlIHJlc3VsdGluZyBzZXQuICovCisJCXNqX3VuaXF1ZV9ydGlzID0gbGFwcGVu ZChzal91bmlxdWVfcnRpcywgcmVsaWRzKTsKKwl9CisKKwkvKgorCSAqIFJlbW92ZSBhbnkgbm9u LXVuaXF1ZSBzZW1qb2luIHF1ZXJ5IGZlYXR1cmVzIGZvciB3aGljaCBtYWtpbmcgdGhlIHJlbAor CSAqIHVuaXF1ZSB3YXNuJ3QgY29uc2lkZXJlZC4KKwkgKi8KKwlmb3JlYWNoX3B0cihwZ3BhX3F1 ZXJ5X2ZlYXR1cmUsIHFmLAorCQkJCXdhbGtlci0+cXVlcnlfZmVhdHVyZXNbUEdQQVFGX1NFTUlK T0lOX05PTl9VTklRVUVdKQorCXsKKwkJaWYgKGxpc3RfbWVtYmVyKHNqX3VuaXF1ZV9ydGlzLCBx Zi0+cmVsaWRzKSkKKwkJCXNqX25vbnVuaXF1ZV9xZnMgPSBsYXBwZW5kKHNqX25vbnVuaXF1ZV9x ZnMsIHFmKTsKKwl9CisJd2Fsa2VyLT5xdWVyeV9mZWF0dXJlc1tQR1BBUUZfU0VNSUpPSU5fTk9O X1VOSVFVRV0gPSBzal9ub251bmlxdWVfcWZzOworCisJLyoKKwkgKiBJZiB3ZSBmaW5kIGFueSBj YXNlcyB3aGVyZSBhbmFseXNpcyBvZiB0aGUgUGxhbiB0cmVlIHNob3dzIHRoYXQgdGhlCisJICog c2VtaWpvaW4gd2FzIG1hZGUgdW5pcXVlIGJ1dCB0aGlzIHBvc3NpYmlsaXR5IHdhcyBuZXZlciBv YnNlcnZlZCB0byBiZQorCSAqIGNvbnNpZGVyZWQgZHVyaW5nIHBsYW5uaW5nLCB0aGVuIHdlIGhh dmUgYSBidWcgc29tZXdoZXJlLgorCSAqLworCWZvcmVhY2hfcHRyKHBncGFfcXVlcnlfZmVhdHVy ZSwgcWYsCisJCQkJd2Fsa2VyLT5xdWVyeV9mZWF0dXJlc1tQR1BBUUZfU0VNSUpPSU5fVU5JUVVF XSkKKwl7CisJCWlmICghbGlzdF9tZW1iZXIoc2pfdW5pcXVlX3J0aXMsIHFmLT5yZWxpZHMpKQor CQl7CisJCQlTdHJpbmdJbmZvRGF0YSBidWY7CisKKwkJCWluaXRTdHJpbmdJbmZvKCZidWYpOwor CQkJb3V0Qml0bWFwc2V0KCZidWYsIHFmLT5yZWxpZHMpOworCQkJZWxvZyhFUlJPUiwKKwkJCQkg InVuaXF1ZSBzZW1pam9pbiBmb3VuZCBmb3IgcmVsaWRzICVzIGJ1dCBub3Qgb2JzZXJ2ZWQgZHVy aW5nIHBsYW5uaW5nIiwKKwkJCQkgYnVmLmRhdGEpOworCQl9CisJfQorfQorCisvKgorICogTWFp biB3b3JraG9yc2UgZm9yIHRoZSBwbGFuIHRyZWUgd2Fsay4KKyAqCisgKiBJZiB3aXRoaW5fam9p bl9wcm9ibGVtIGlzIHRydWUsIHdlIGVuY291bnRlcmVkIGEgam9pbiBhdCBzb21lIGhpZ2hlciBs ZXZlbAorICogb2YgdGhlIHRyZWUgd2FsayBhbmQgaGF2ZW4ndCB5ZXQgZGVzY2VuZGVkIG91dCBv ZiB0aGUgcG9ydGlvbiBvZiB0aGUgcGxhbgorICogdHJlZSB0aGF0IGlzIHBhcnQgb2YgdGhhdCBz YW1lIGpvaW4gcHJvYmxlbS4gV2UncmUgbm8gbG9uZ2VyIGluIHRoZSBzYW1lCisgKiBqb2luIHBy b2JsZW0gaWYgKDEpIHdlIGNyb3NzIGludG8gYSBkaWZmZXJlbnQgc3VicXVlcnkgb3IgKDIpIHdl IGRlc2NlbmQKKyAqIHRocm91Z2ggYW4gQXBwZW5kIG9yIE1lcmdlQXBwZW5kIG5vZGUsIGJlbG93 IHdoaWNoIGFueSBmdXJ0aGVyIGpvaW5zIHdvdWxkCisgKiBiZSBwYXJ0aXRpb253aXNlIGpvaW5z IHBsYW5uZWQgc2VwYXJhdGVseSBmcm9tIHRoZSBvdXRlciBqb2luIHByb2JsZW0uCisgKgorICog SWYgam9pbl91bnJvbGxlciAhPSBOVUxMLCB0aGUgam9pbiB1bnJvbGxlciBjb2RlIGV4cGVjdHMg dXMgdG8gZmluZCBhIGpvaW4KKyAqIHRoYXQgc2hvdWxkIGJlIHVucm9sbGVkIGludG8gdGhhdCBv YmplY3QuIFRoaXMgaW1wbGllcyB0aGF0IHdlJ3JlIHdpdGhpbiBhCisgKiBqb2luIHByb2JsZW0s IGJ1dCB0aGUgcmV2ZXJzZSBpcyBub3QgdHJ1ZTogd2hlbiB3ZSd2ZSB0cmF2ZXJzZWQgYWxsIHRo ZQorICogam9pbnMgYnV0IGFyZSBzdGlsbCBsb29raW5nIGZvciB0aGUgc2NhbiB0aGF0IGlzIHRo ZSBsZWFmIG9mIHRoZSBqb2luIHRyZWUsCisgKiBqb2luX3Vucm9sbGVyIHdpbGwgYmUgTlVMTCBi dXQgd2l0aGluX2pvaW5fcHJvYmxlbSB3aWxsIGJlIHRydWUuCisgKgorICogRWFjaCBlbGVtZW50 IG9mIGFjdGl2ZV9xdWVyeV9mZWF0dXJlcyBjb3JyZXNwb25kcyB0byBzb21lIGl0ZW0gb2YgYWR2 aWNlCisgKiB0aGF0IG5lZWRzIHRvIGVudW1lcmF0ZSBhbGwgdGhlIHJlbGF0aW9ucyBpdCBhZmZl Y3RzLiBXZSBhZGQgUlRJcyB3ZSBmaW5kCisgKiBkdXJpbmcgdHJlZSB0cmF2ZXJzYWwgdG8gZWFj aCBvZiB0aGVzZSBxdWVyeSBmZWF0dXJlcy4KKyAqCisgKiBJZiBiZW5lYXRoX2FueV9nYXRoZXIg PT0gdHJ1ZSwgc29tZSBoaWdoZXIgbGV2ZWwgb2YgdGhlIHRyZWUgdHJhdmVyc2FsIGZvdW5kCisg KiBhIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugbm9kZS4KKyAqLworc3RhdGljIHZvaWQKK3BncGFf d2Fsa19yZWN1cnNpdmVseShwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwgUGxhbiAq cGxhbiwKKwkJCQkJICBib29sIHdpdGhpbl9qb2luX3Byb2JsZW0sCisJCQkJCSAgcGdwYV9qb2lu X3Vucm9sbGVyICpqb2luX3Vucm9sbGVyLAorCQkJCQkgIExpc3QgKmFjdGl2ZV9xdWVyeV9mZWF0 dXJlcywKKwkJCQkJICBib29sIGJlbmVhdGhfYW55X2dhdGhlcikKK3sKKwlwZ3BhX2pvaW5fdW5y b2xsZXIgKm91dGVyX2pvaW5fdW5yb2xsZXIgPSBOVUxMOworCXBncGFfam9pbl91bnJvbGxlciAq aW5uZXJfam9pbl91bnJvbGxlciA9IE5VTEw7CisJYm9vbAkJam9pbl91bnJvbGxlcl90b3BsZXZl bCA9IGZhbHNlOworCUxpc3QJICAgKnB1c2hkb3duX3F1ZXJ5X2ZlYXR1cmVzID0gTklMOworCUxp c3RDZWxsICAgKmxjOworCUxpc3QJICAgKmV4dHJhcGxhbnMgPSBOSUw7CisJTGlzdAkgICAqZWxp ZGVkX25vZGVzID0gTklMOworCisJQXNzZXJ0KHdpdGhpbl9qb2luX3Byb2JsZW0gfHwgam9pbl91 bnJvbGxlciA9PSBOVUxMKTsKKworCS8qCisJICogSWYgdGhpcyBpcyBhIEdhdGhlciBvciBHYXRo ZXIgTWVyZ2Ugbm9kZSwgZGlyZWN0bHkgYWRkIGl0IHRvIHRoZSBsaXN0CisJICogb2YgY3VycmVu dGx5LWFjdGl2ZSBxdWVyeSBmZWF0dXJlcy4KKwkgKgorCSAqIE90aGVyd2lzZSwgY2hlY2sgdGhl IGZ1dHVyZV9xdWVyeV9mZWF0dXJlcyBsaXN0IHRvIHNlZSB3aGV0aGVyIHRoaXMgd2FzCisJICog cHJldmlvdXNseSBpZGVudGlmaWVkIGFzIGEgcGxhbiBub2RlIHRoYXQgbmVlZHMgdG8gYmUgdHJl YXRlZCBhcyBhCisJICogcXVlcnkgZmVhdHVyZS4KKwkgKgorCSAqIE5vdGUgdGhhdCB0aGUgY2Fs bGVyIGFsc28gaGFzIGEgY29weSB0byBhY3RpdmVfcXVlcnlfZmVhdHVyZXMsIHNvIHdlCisJICog Y2FuJ3QgZGVzdHJ1Y3RpdmVseSBtb2RpZnkgaXQgd2l0aG91dCBtYWtpbmcgYSBjb3B5LgorCSAq LworCWlmIChJc0EocGxhbiwgR2F0aGVyKSkKKwl7CisJCWFjdGl2ZV9xdWVyeV9mZWF0dXJlcyA9 CisJCQlsYXBwZW5kKGxpc3RfY29weShhY3RpdmVfcXVlcnlfZmVhdHVyZXMpLAorCQkJCQlwZ3Bh X2FkZF9mZWF0dXJlKHdhbGtlciwgUEdQQVFGX0dBVEhFUiwgcGxhbikpOworCQliZW5lYXRoX2Fu eV9nYXRoZXIgPSB0cnVlOworCX0KKwllbHNlIGlmIChJc0EocGxhbiwgR2F0aGVyTWVyZ2UpKQor CXsKKwkJYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzID0KKwkJCWxhcHBlbmQobGlzdF9jb3B5KGFjdGl2 ZV9xdWVyeV9mZWF0dXJlcyksCisJCQkJCXBncGFfYWRkX2ZlYXR1cmUod2Fsa2VyLCBQR1BBUUZf R0FUSEVSX01FUkdFLCBwbGFuKSk7CisJCWJlbmVhdGhfYW55X2dhdGhlciA9IHRydWU7CisJfQor CWVsc2UKKwl7CisJCWZvcmVhY2hfcHRyKHBncGFfcXVlcnlfZmVhdHVyZSwgcWYsIHdhbGtlci0+ ZnV0dXJlX3F1ZXJ5X2ZlYXR1cmVzKQorCQl7CisJCQlpZiAocWYtPnBsYW4gPT0gcGxhbikKKwkJ CXsKKwkJCQlhY3RpdmVfcXVlcnlfZmVhdHVyZXMgPSBsaXN0X2NvcHkoYWN0aXZlX3F1ZXJ5X2Zl YXR1cmVzKTsKKwkJCQlhY3RpdmVfcXVlcnlfZmVhdHVyZXMgPSBsYXBwZW5kKGFjdGl2ZV9xdWVy eV9mZWF0dXJlcywgcWYpOworCQkJCXdhbGtlci0+ZnV0dXJlX3F1ZXJ5X2ZlYXR1cmVzID0KKwkJ CQkJbGlzdF9kZWxldGVfcHRyKHdhbGtlci0+ZnV0dXJlX3F1ZXJ5X2ZlYXR1cmVzLCBwbGFuKTsK KwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCS8qCisJICogRmluZCBhbGwgZWxpZGVkIG5v ZGVzIGZvciB0aGlzIFBsYW4gbm9kZS4KKwkgKi8KKwlmb3JlYWNoX25vZGUoRWxpZGVkTm9kZSwg biwgd2Fsa2VyLT5wc3RtdC0+ZWxpZGVkTm9kZXMpCisJeworCQlpZiAobi0+cGxhbl9ub2RlX2lk ID09IHBsYW4tPnBsYW5fbm9kZV9pZCkKKwkJCWVsaWRlZF9ub2RlcyA9IGxhcHBlbmQoZWxpZGVk X25vZGVzLCBuKTsKKwl9CisKKwkvKiBJZiB3ZSBmb3VuZCBhbnkgZWxpZGVkX25vZGVzLCBoYW5k bGUgdGhlbS4gKi8KKwlpZiAoZWxpZGVkX25vZGVzICE9IE5JTCkKKwl7CisJCWludAkJCW51bV9l bGlkZWRfbm9kZXMgPSBsaXN0X2xlbmd0aChlbGlkZWRfbm9kZXMpOworCQlFbGlkZWROb2RlICps YXN0X2VsaWRlZF9ub2RlOworCisJCS8qCisJCSAqIFJUSXMgZm9yIHRoZSBmaW5hbCAtLSBhbmQg dGh1cyBsb2dpY2FsbHkgdXBwZXJtb3N0IC0tIGVsaWRlZCBub2RlCisJCSAqIHNob3VsZCBiZSBj b2xsZWN0ZWQgZm9yIHF1ZXJ5IGZlYXR1cmVzIHBhc3NlZCBkb3duIGJ5IHRoZSBjYWxsZXIuCisJ CSAqIEhvd2V2ZXIsIGVsaWRlZCBub2RlcyBhY3QgYXMgYmFycmllcnMgdG8gcXVlcnkgZmVhdHVy ZXMsIHdoaWNoCisJCSAqIG1lYW5zIHRoYXQgKDEpIHRoZSByZW1haW5pbmcgZWxpZGVkIG5vZGVz LCBpZiBhbnksIHNob3VsZCBiZQorCQkgKiBpZ25vcmVkIGZvciBwdXJwb3NlcyBvZiBxdWVyeSBm ZWF0dXJlcyBhbmQgKDIpIHRoZSBsaXN0IG9mIGFjdGl2ZQorCQkgKiBxdWVyeSBmZWF0dXJlcyBz aG91bGQgYmUgcmVzZXQgdG8gZW1wdHkgc28gdGhhdCB3ZSBkbyBub3QgYWRkIFJUSXMKKwkJICog ZnJvbSB0aGUgcGxhbiBub2RlIHRoYXQgaXMgbG9naWNhbGx5IGJlbmVhdGggdGhlIGVsaWRlZCBu b2RlIHRvIHRoZQorCQkgKiBxdWVyeSBmZWF0dXJlcyBwYXNzZWQgZG93biBmcm9tIHRoZSBjYWxs ZXIuCisJCSAqLworCQlsYXN0X2VsaWRlZF9ub2RlID0gbGlzdF9udGgoZWxpZGVkX25vZGVzLCBu dW1fZWxpZGVkX25vZGVzIC0gMSk7CisJCXBncGFfcWZfYWRkX3J0aXMoYWN0aXZlX3F1ZXJ5X2Zl YXR1cmVzLAorCQkJCQkJIHBncGFfZmlsdGVyX291dF9qb2luX3JlbGlkcyhsYXN0X2VsaWRlZF9u b2RlLT5yZWxpZHMsCisJCQkJCQkJCQkJCQkJIHdhbGtlci0+cHN0bXQtPnJ0YWJsZSkpOworCQlh Y3RpdmVfcXVlcnlfZmVhdHVyZXMgPSBOSUw7CisKKwkJLyoKKwkJICogSWYgd2UncmUgd2l0aGlu IGEgam9pbiBwcm9ibGVtLCB0aGUgam9pbl91bnJvbGxlciBpcyByZXNwb25zaWJsZQorCQkgKiBm b3IgYnVpbGRpbmcgdGhlIHNjYW4gZm9yIHRoZSBmaW5hbCBlbGlkZWQgbm9kZSwgc28gdGhyb3cg aXQgb3V0LgorCQkgKi8KKwkJaWYgKHdpdGhpbl9qb2luX3Byb2JsZW0pCisJCQllbGlkZWRfbm9k ZXMgPSBsaXN0X3RydW5jYXRlKGVsaWRlZF9ub2RlcywgbnVtX2VsaWRlZF9ub2RlcyAtIDEpOwor CisJCS8qIEJ1aWxkIHNjYW5zIGZvciBhbGwgKG9yIHRoZSByZW1haW5pbmcpIGVsaWRlZCBub2Rl cy4gKi8KKwkJZm9yZWFjaF9ub2RlKEVsaWRlZE5vZGUsIGVsaWRlZF9ub2RlLCBlbGlkZWRfbm9k ZXMpCisJCXsKKwkJCSh2b2lkKSBwZ3BhX2J1aWxkX3NjYW4od2Fsa2VyLCBwbGFuLCBlbGlkZWRf bm9kZSwKKwkJCQkJCQkJICAgYmVuZWF0aF9hbnlfZ2F0aGVyLCB3aXRoaW5fam9pbl9wcm9ibGVt KTsKKwkJfQorCisJCS8qCisJCSAqIElmIHRoZXJlIHdlcmUgYW55IGVsaWRlZCBub2RlcywgdGhl biBldmVyeXRoaW5nIGJlbmVhdGggdGhvc2Ugbm9kZXMKKwkJICogaXMgbm90IHBhcnQgb2YgdGhl IHNhbWUgam9pbiBwcm9ibGVtLgorCQkgKgorCQkgKiBJbiBtb3JlIGRldGFpbCwgaWYgYW4gQXBw ZW5kIG9yIE1lcmdlQXBwZW5kIHdhcyBlbGlkZWQsIHRoZW4gYQorCQkgKiBwYXJ0aXRpb253aXNl IGpvaW4gd2FzIGNob3NlbiBhbmQgb25seSBhIHNpbmdsZSBjaGlsZCBzdXJ2aXZlZDsgaWYKKwkJ ICogYSBTdWJxdWVyeVNjYW4gd2FzIGVsaWRlZCwgdGhlIHN1YnF1ZXJ5IHdhcyBwbGFubmVkIHdp dGhvdXQKKwkJICogZmxhdHRlbmluZyBpdCBpbnRvIHRoZSBwYXJlbnQuCisJCSAqLworCQl3aXRo aW5fam9pbl9wcm9ibGVtID0gZmFsc2U7CisJCWpvaW5fdW5yb2xsZXIgPSBOVUxMOworCX0KKwor CS8qCisJICogSWYgd2UncmUgd2l0aGluIGEgam9pbiBwcm9ibGVtLCB0aGUgam9pbiB1bnJvbGxl ciBpcyByZXNwb25zaWJsZSBmb3IKKwkgKiBidWlsZGluZyBhbnkgcmVxdWlyZWQgc2NhbiBmb3Ig dGhpcyBub2RlLiBJZiBub3QsIHdlIGRvIGl0IGhlcmUuCisJICovCisJaWYgKCF3aXRoaW5fam9p bl9wcm9ibGVtKQorCQkodm9pZCkgcGdwYV9idWlsZF9zY2FuKHdhbGtlciwgcGxhbiwgTlVMTCwg YmVuZWF0aF9hbnlfZ2F0aGVyLCBmYWxzZSk7CisKKwkvKgorCSAqIElmIHRoaXMgam9pbiBuZWVk cyB0byB1bnJvbGxlZCBidXQgdGhlcmUncyBubyBqb2luIHVucm9sbGVyIGFscmVhZHkKKwkgKiBh dmFpbGFibGUsIGNyZWF0ZSBvbmUuCisJICovCisJaWYgKGpvaW5fdW5yb2xsZXIgPT0gTlVMTCAm JiBwZ3BhX2lzX2pvaW4ocGxhbikpCisJeworCQlqb2luX3Vucm9sbGVyID0gcGdwYV9jcmVhdGVf am9pbl91bnJvbGxlcigpOworCQlqb2luX3Vucm9sbGVyX3RvcGxldmVsID0gdHJ1ZTsKKwkJd2l0 aGluX2pvaW5fcHJvYmxlbSA9IHRydWU7CisJfQorCisJLyoKKwkgKiBJZiB0aGlzIGpvaW4gaXMg dG8gYmUgdW5yb2xsZWQsIHBncGFfdW5yb2xsX2pvaW4oKSB3aWxsIHJldHVybiB0aGUgam9pbgor CSAqIHVucm9sbGVyIG9iamVjdCB0aGF0IHNob3VsZCBiZSBwYXNzZWQgZG93biB3aGVuIHdlIHJl Y3Vyc2UgaW50byB0aGUKKwkgKiBvdXRlciBhbmQgaW5uZXIgc2lkZXMgb2YgdGhlIHBsYW4uCisJ ICovCisJaWYgKGpvaW5fdW5yb2xsZXIgIT0gTlVMTCkKKwkJcGdwYV91bnJvbGxfam9pbih3YWxr ZXIsIHBsYW4sIGJlbmVhdGhfYW55X2dhdGhlciwgam9pbl91bnJvbGxlciwKKwkJCQkJCSAmb3V0 ZXJfam9pbl91bnJvbGxlciwgJmlubmVyX2pvaW5fdW5yb2xsZXIpOworCisJLyogQWRkIFJUSXMg ZnJvbSB0aGUgcGxhbiBub2RlIHRvIGFsbCBhY3RpdmUgcXVlcnkgZmVhdHVyZXMuICovCisJcGdw YV9xZl9hZGRfcGxhbl9ydGlzKGFjdGl2ZV9xdWVyeV9mZWF0dXJlcywgcGxhbiwgd2Fsa2VyLT5w c3RtdC0+cnRhYmxlKTsKKworCS8qCisJICogUmVjdXJzZSBpbnRvIHRoZSBvdXRlciBhbmQgaW5u ZXIgc3VidHJlZXMuCisJICoKKwkgKiBBcyBhbiBleGNlcHRpb24sIGlmIHRoaXMgaXMgYSBGb3Jl aWduU2NhbiwgZG9uJ3QgcmVjdXJzZS4gcG9zdGdyZXNfZmR3CisJICogc29tZXRpbWVzIHN0b3Jl cyBhbiBFUFEgcmVjaGVjayBwbGFuIGluIHBsYW4tPmxlZnRyZWUsIGJ1dCB0aGF0J3MgZ29pbmcK KwkgKiB0byBtZW50aW9uIHRoZSBzYW1lIHNldCBvZiByZWxhdGlvbnMgYXMgdGhlIEZvcmVpZ25T Y2FuIGl0c2VsZiwgYW5kIHdlCisJICogaGF2ZSBubyB3YXkgdG8gZW1pdCBhZHZpY2UgdGFyZ2V0 aW5nIHRoZSBFUFEgY2FzZSB2cy4gdGhlIG5vbi1FUFEgY2FzZS4KKwkgKiBNb3Jlb3ZlciwgaXQn cyBub3QgZW50aXJlbHkgY2xlYXIgd2hhdCBvdGhlciBGRFdzIG1pZ2h0IGRvIHdpdGggdGhlCisJ ICogbGVmdCBhbmQgcmlnaHQgc3VidHJlZXMuIE1heWJlIHNvbWUgYmV0dGVyIGhhbmRsaW5nIGlz IG5lZWRlZCBoZXJlLCBidXQKKwkgKiBmb3Igbm93LCB3ZSBqdXN0IHB1bnQuCisJICovCisJaWYg KCFJc0EocGxhbiwgRm9yZWlnblNjYW4pKQorCXsKKwkJaWYgKHBsYW4tPmxlZnR0cmVlICE9IE5V TEwpCisJCQlwZ3BhX3dhbGtfcmVjdXJzaXZlbHkod2Fsa2VyLCBwbGFuLT5sZWZ0dHJlZSwgd2l0 aGluX2pvaW5fcHJvYmxlbSwKKwkJCQkJCQkJICBvdXRlcl9qb2luX3Vucm9sbGVyLCBhY3RpdmVf cXVlcnlfZmVhdHVyZXMsCisJCQkJCQkJCSAgYmVuZWF0aF9hbnlfZ2F0aGVyKTsKKwkJaWYgKHBs YW4tPnJpZ2h0dHJlZSAhPSBOVUxMKQorCQkJcGdwYV93YWxrX3JlY3Vyc2l2ZWx5KHdhbGtlciwg cGxhbi0+cmlnaHR0cmVlLCB3aXRoaW5fam9pbl9wcm9ibGVtLAorCQkJCQkJCQkgIGlubmVyX2pv aW5fdW5yb2xsZXIsIGFjdGl2ZV9xdWVyeV9mZWF0dXJlcywKKwkJCQkJCQkJICBiZW5lYXRoX2Fu eV9nYXRoZXIpOworCX0KKworCS8qCisJICogSWYgd2UgY3JlYXRlZCBhIGpvaW4gdW5yb2xsZXIg dXAgYWJvdmUsIHRoZW4gaXQncyBhbHNvIG91ciBqb2luIHRvIHVzZQorCSAqIGl0IHRvIGJ1aWxk IHRoZSBmaW5hbCBwZ3BhX3Vucm9sbGVkX2pvaW4sIGFuZCB0byBkZXN0cm95IHRoZSBvYmplY3Qu CisJICovCisJaWYgKGpvaW5fdW5yb2xsZXJfdG9wbGV2ZWwpCisJeworCQlwZ3BhX3Vucm9sbGVk X2pvaW4gKnVqb2luOworCisJCXVqb2luID0gcGdwYV9idWlsZF91bnJvbGxlZF9qb2luKHdhbGtl ciwgam9pbl91bnJvbGxlcik7CisJCXdhbGtlci0+dG9wbGV2ZWxfdW5yb2xsZWRfam9pbnMgPQor CQkJbGFwcGVuZCh3YWxrZXItPnRvcGxldmVsX3Vucm9sbGVkX2pvaW5zLCB1am9pbik7CisJCXBn cGFfZGVzdHJveV9qb2luX3Vucm9sbGVyKGpvaW5fdW5yb2xsZXIpOworCQkodm9pZCkgcGdwYV9w cm9jZXNzX3Vucm9sbGVkX2pvaW4od2Fsa2VyLCB1am9pbik7CisJfQorCisJLyoKKwkgKiBTb21l IHBsYW4gdHlwZXMgY2FuIGhhdmUgYWRkaXRpb25hbCBjaGlsZHJlbi4gTm9kZXMgbGlrZSBBcHBl bmQgdGhhdAorCSAqIGNhbiBoYXZlIGFueSBudW1iZXIgb2YgY2hpbGRyZW4gc3RvcmUgdGhlbSBp biBhIExpc3Q7IGEgU3VicXVlcnlTY2FuCisJICoganVzdCBoYXMgYSBmaWVsZCBmb3IgYSBzaW5n bGUgYWRkaXRpb25hbCBQbGFuLgorCSAqLworCXN3aXRjaCAobm9kZVRhZyhwbGFuKSkKKwl7CisJ CWNhc2UgVF9BcHBlbmQ6CisJCQl7CisJCQkJQXBwZW5kCSAgICphcGxhbiA9IChBcHBlbmQgKikg cGxhbjsKKworCQkJCWV4dHJhcGxhbnMgPSBhcGxhbi0+YXBwZW5kcGxhbnM7CisJCQkJaWYgKGJt c19pc19lbXB0eShhcGxhbi0+YXBwcmVsaWRzKSkKKwkJCQkJcHVzaGRvd25fcXVlcnlfZmVhdHVy ZXMgPSBhY3RpdmVfcXVlcnlfZmVhdHVyZXM7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBUX01l cmdlQXBwZW5kOgorCQkJeworCQkJCU1lcmdlQXBwZW5kICptYXBsYW4gPSAoTWVyZ2VBcHBlbmQg KikgcGxhbjsKKworCQkJCWV4dHJhcGxhbnMgPSBtYXBsYW4tPm1lcmdlcGxhbnM7CisJCQkJaWYg KGJtc19pc19lbXB0eShtYXBsYW4tPmFwcHJlbGlkcykpCisJCQkJCXB1c2hkb3duX3F1ZXJ5X2Zl YXR1cmVzID0gYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2Ug VF9CaXRtYXBBbmQ6CisJCQlleHRyYXBsYW5zID0gKChCaXRtYXBBbmQgKikgcGxhbiktPmJpdG1h cHBsYW5zOworCQkJYnJlYWs7CisJCWNhc2UgVF9CaXRtYXBPcjoKKwkJCWV4dHJhcGxhbnMgPSAo KEJpdG1hcE9yICopIHBsYW4pLT5iaXRtYXBwbGFuczsKKwkJCWJyZWFrOworCQljYXNlIFRfU3Vi cXVlcnlTY2FuOgorCisJCQkvKgorCQkJICogV2UgZG9uJ3QgcGFzcyBkb3duIGFjdGl2ZV9xdWVy eV9mZWF0dXJlcyBhY3Jvc3MgaGVyZSwgYmVjYXVzZQorCQkJICogdGhvc2UgYXJlIHNwZWNpZmlj IHRvIGEgc3VicXVlcnkgbGV2ZWwuCisJCQkgKi8KKwkJCXBncGFfd2Fsa19yZWN1cnNpdmVseSh3 YWxrZXIsICgoU3VicXVlcnlTY2FuICopIHBsYW4pLT5zdWJwbGFuLAorCQkJCQkJCQkgIDAsIE5V TEwsIE5JTCwgYmVuZWF0aF9hbnlfZ2F0aGVyKTsKKwkJCWJyZWFrOworCQljYXNlIFRfQ3VzdG9t U2NhbjoKKwkJCWV4dHJhcGxhbnMgPSAoKEN1c3RvbVNjYW4gKikgcGxhbiktPmN1c3RvbV9wbGFu czsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJfQorCisJLyogSWYgd2UgZm91 bmQgYSBsaXN0IG9mIGV4dHJhIGNoaWxkcmVuLCBpdGVyYXRlIG92ZXIgaXQuICovCisJZm9yZWFj aChsYywgZXh0cmFwbGFucykKKwl7CisJCVBsYW4JICAgKnN1YnBsYW4gPSBsZmlyc3QobGMpOwor CisJCXBncGFfd2Fsa19yZWN1cnNpdmVseSh3YWxrZXIsIHN1YnBsYW4sIDAsIE5VTEwsIHB1c2hk b3duX3F1ZXJ5X2ZlYXR1cmVzLAorCQkJCQkJCSAgYmVuZWF0aF9hbnlfZ2F0aGVyKTsKKwl9Cit9 CisKKy8qCisgKiBQZXJmb3JtIGZpbmFsIHByb2Nlc3Npbmcgb2YgYSBuZXdseS1jb25zdHJ1Y3Rl ZCBwZ3BhX3Vucm9sbGVkX2pvaW4uIFRoaXMKKyAqIG9ubHkgbmVlZHMgdG8gYmUgY2FsbGVkIGZv ciB0b3BsZXZlbCBwZ3BhX3Vucm9sbGVkX2pvaW4gb2JqZWN0cywgc2luY2UgaXQKKyAqIHJlY3Vy c2VzIHRvIHN1Yi1qb2lucyBhcyBuZWVkZWQuCisgKgorICogT3VyIGdvYWwgaXMgdG8gYWRkIHRo ZSBzZXQgb2YgaW5uZXIgcmVsaWRzIHRvIHRoZSByZWxldmFudCBqb2luX3N0cmF0ZWdpZXMKKyAq IGxpc3QsIGFuZCB0byBkbyB0aGUgc2FtZSBmb3IgYW55IHN1Yi1qb2lucy4gVG8gdGhhdCBlbmQs IHRoZSByZXR1cm4gdmFsdWUKKyAqIGlzIHRoZSBzZXQgb2YgcmVsaWRzIGZvdW5kIGJlbmVhdGgg dGhlIHRoZSBqb2luLCBidXQgaXQgaXMgZXhwZWN0ZWQgdGhhdAorICogdGhlIHRvcGxldmVsIGNh bGxlciB3aWxsIGlnbm9yZSB0aGlzLgorICovCitzdGF0aWMgQml0bWFwc2V0ICoKK3BncGFfcHJv Y2Vzc191bnJvbGxlZF9qb2luKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJ CQkJICAgcGdwYV91bnJvbGxlZF9qb2luICp1am9pbikKK3sKKwlCaXRtYXBzZXQgICphbGxfcmVs aWRzID0gYm1zX2NvcHkodWpvaW4tPm91dGVyLnNjYW4tPnJlbGlkcyk7CisKKwkvKiBJZiB0aGlz IGZhaWxzLCB3ZSBkaWRuJ3QgdW5yb2xsIHByb3Blcmx5LiAqLworCUFzc2VydCh1am9pbi0+b3V0 ZXIudW5yb2xsZWRfam9pbiA9PSBOVUxMKTsKKworCWZvciAoaW50IGsgPSAwOyBrIDwgdWpvaW4t Pm5pbm5lcjsgKytrKQorCXsKKwkJcGdwYV9qb2luX21lbWJlciAqbWVtYmVyID0gJnVqb2luLT5p bm5lcltrXTsKKwkJQml0bWFwc2V0ICAqcmVsaWRzOworCisJCWlmIChtZW1iZXItPnVucm9sbGVk X2pvaW4gIT0gTlVMTCkKKwkJCXJlbGlkcyA9IHBncGFfcHJvY2Vzc191bnJvbGxlZF9qb2luKHdh bGtlciwKKwkJCQkJCQkJCQkJCW1lbWJlci0+dW5yb2xsZWRfam9pbik7CisJCWVsc2UKKwkJewor CQkJQXNzZXJ0KG1lbWJlci0+c2NhbiAhPSBOVUxMKTsKKwkJCXJlbGlkcyA9IG1lbWJlci0+c2Nh bi0+cmVsaWRzOworCQl9CisJCXdhbGtlci0+am9pbl9zdHJhdGVnaWVzW3Vqb2luLT5zdHJhdGVn eVtrXV0gPQorCQkJbGFwcGVuZCh3YWxrZXItPmpvaW5fc3RyYXRlZ2llc1t1am9pbi0+c3RyYXRl Z3lba11dLCByZWxpZHMpOworCQlhbGxfcmVsaWRzID0gYm1zX2FkZF9tZW1iZXJzKGFsbF9yZWxp ZHMsIHJlbGlkcyk7CisJfQorCisJcmV0dXJuIGFsbF9yZWxpZHM7Cit9CisKKy8qCisgKiBBcnJh bmdlIGZvciB0aGUgZ2l2ZW4gcGxhbiBub2RlIHRvIGJlIHRyZWF0ZWQgYXMgYSBxdWVyeSBmZWF0 dXJlIHdoZW4gdGhlCisgKiB0cmVlIHdhbGsgcmVhY2hlcyBpdC4KKyAqCisgKiBNYWtlIHN1cmUg dG8gb25seSB1c2UgdGhpcyBmb3Igbm9kZXMgdGhhdCB0aGUgdHJlZSB3YWxrIGNhbid0IGhhdmUg cmVhY2hlZAorICogeWV0IQorICovCit2b2lkCitwZ3BhX2FkZF9mdXR1cmVfZmVhdHVyZShwZ3Bh X3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCXBncGFfcWZfdHlwZSB0eXBlLCBQ bGFuICpwbGFuKQoreworCXBncGFfcXVlcnlfZmVhdHVyZSAqcWYgPSBwZ3BhX2FkZF9mZWF0dXJl KHdhbGtlciwgdHlwZSwgcGxhbik7CisKKwl3YWxrZXItPmZ1dHVyZV9xdWVyeV9mZWF0dXJlcyA9 CisJCWxhcHBlbmQod2Fsa2VyLT5mdXR1cmVfcXVlcnlfZmVhdHVyZXMsIHFmKTsKK30KKworLyoK KyAqIFJldHVybiB0aGUgbGFzdCBvZiBhbnkgZWxpZGVkIG5vZGVzIGFzc29jaWF0ZWQgd2l0aCB0 aGlzIHBsYW4gbm9kZSBJRC4KKyAqCisgKiBUaGUgbGFzdCBlbGlkZWQgbm9kZSBpcyB0aGUgb25l IHRoYXQgd291bGQgaGF2ZSBiZWVuIHVwcGVybW9zdCBpbiB0aGUgcGxhbgorICogdHJlZSBoYWQg aXQgbm90IGJlZW4gcmVtb3ZlZCBkdXJpbmcgc2V0cmVmcyBwcm9jZXNzaWcuCisgKi8KK0VsaWRl ZE5vZGUgKgorcGdwYV9sYXN0X2VsaWRlZF9ub2RlKFBsYW5uZWRTdG10ICpwc3RtdCwgUGxhbiAq cGxhbikKK3sKKwlFbGlkZWROb2RlICplbGlkZWRfbm9kZSA9IE5VTEw7CisKKwlmb3JlYWNoX25v ZGUoRWxpZGVkTm9kZSwgbiwgcHN0bXQtPmVsaWRlZE5vZGVzKQorCXsKKwkJaWYgKG4tPnBsYW5f bm9kZV9pZCA9PSBwbGFuLT5wbGFuX25vZGVfaWQpCisJCQllbGlkZWRfbm9kZSA9IG47CisJfQor CisJcmV0dXJuIGVsaWRlZF9ub2RlOworfQorCisvKgorICogQ2VydGFpbiBwbGFuIG5vZGVzIGNh biByZWZlciB0byBhIHNldCBvZiBSVElzLiBFeHRyYWN0IGFuZCByZXR1cm4gdGhlIHNldC4KKyAq LworQml0bWFwc2V0ICoKK3BncGFfcmVsaWRzKFBsYW4gKnBsYW4pCit7CisJaWYgKElzQShwbGFu LCBSZXN1bHQpKQorCQlyZXR1cm4gKChSZXN1bHQgKikgcGxhbiktPnJlbGlkczsKKwllbHNlIGlm IChJc0EocGxhbiwgRm9yZWlnblNjYW4pKQorCQlyZXR1cm4gKChGb3JlaWduU2NhbiAqKSBwbGFu KS0+ZnNfcmVsaWRzOworCWVsc2UgaWYgKElzQShwbGFuLCBBcHBlbmQpKQorCQlyZXR1cm4gKChB cHBlbmQgKikgcGxhbiktPmFwcHJlbGlkczsKKwllbHNlIGlmIChJc0EocGxhbiwgTWVyZ2VBcHBl bmQpKQorCQlyZXR1cm4gKChNZXJnZUFwcGVuZCAqKSBwbGFuKS0+YXBwcmVsaWRzOworCisJcmV0 dXJuIE5VTEw7Cit9CisKKy8qCisgKiBFeHRyYWN0IHRoZSBzY2FubmVkIFJUSSBmcm9tIGEgcGxh biBub2RlLgorICoKKyAqIFJldHVybnMgMCBpZiB0aGVyZSBpc24ndCBvbmUuCisgKi8KK0luZGV4 CitwZ3BhX3NjYW5yZWxpZChQbGFuICpwbGFuKQoreworCXN3aXRjaCAobm9kZVRhZyhwbGFuKSkK Kwl7CisJCWNhc2UgVF9TZXFTY2FuOgorCQljYXNlIFRfU2FtcGxlU2NhbjoKKwkJY2FzZSBUX0Jp dG1hcEhlYXBTY2FuOgorCQljYXNlIFRfVGlkU2NhbjoKKwkJY2FzZSBUX1RpZFJhbmdlU2NhbjoK KwkJY2FzZSBUX1N1YnF1ZXJ5U2NhbjoKKwkJY2FzZSBUX0Z1bmN0aW9uU2NhbjoKKwkJY2FzZSBU X1RhYmxlRnVuY1NjYW46CisJCWNhc2UgVF9WYWx1ZXNTY2FuOgorCQljYXNlIFRfQ3RlU2NhbjoK KwkJY2FzZSBUX05hbWVkVHVwbGVzdG9yZVNjYW46CisJCWNhc2UgVF9Xb3JrVGFibGVTY2FuOgor CQljYXNlIFRfRm9yZWlnblNjYW46CisJCWNhc2UgVF9DdXN0b21TY2FuOgorCQljYXNlIFRfSW5k ZXhTY2FuOgorCQljYXNlIFRfSW5kZXhPbmx5U2NhbjoKKwkJCXJldHVybiAoKFNjYW4gKikgcGxh biktPnNjYW5yZWxpZDsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAwOworCX0KK30KKworLyoKKyAq IENvbnN0cnVjdCBhIG5ldyBCaXRtYXBzZXQgY29udGFpbmluZyBub24tUlRFX0pPSU4gbWVtYmVy cyBvZiAncmVsaWRzJy4KKyAqLworQml0bWFwc2V0ICoKK3BncGFfZmlsdGVyX291dF9qb2luX3Jl bGlkcyhCaXRtYXBzZXQgKnJlbGlkcywgTGlzdCAqcnRhYmxlKQoreworCWludAkJCXJ0aSA9IC0x OworCUJpdG1hcHNldCAgKnJlc3VsdCA9IE5VTEw7CisKKwl3aGlsZSAoKHJ0aSA9IGJtc19uZXh0 X21lbWJlcihyZWxpZHMsIHJ0aSkpID49IDApCisJeworCQlSYW5nZVRibEVudHJ5ICpydGUgPSBy dF9mZXRjaChydGksIHJ0YWJsZSk7CisKKwkJaWYgKHJ0ZS0+cnRla2luZCAhPSBSVEVfSk9JTikK KwkJCXJlc3VsdCA9IGJtc19hZGRfbWVtYmVyKHJlc3VsdCwgcnRpKTsKKwl9CisKKwlyZXR1cm4g cmVzdWx0OworfQorCisvKgorICogQ3JlYXRlIGEgcGdwYV9xdWVyeV9mZWF0dXJlIGFuZCBhZGQg aXQgdG8gdGhlIGxpc3Qgb2YgYWxsIHF1ZXJ5IGZlYXR1cmVzCisgKiBmb3IgdGhpcyBwbGFuLgor ICovCitzdGF0aWMgcGdwYV9xdWVyeV9mZWF0dXJlICoKK3BncGFfYWRkX2ZlYXR1cmUocGdwYV9w bGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJIHBncGFfcWZfdHlwZSB0eXBlLCBQbGFu ICpwbGFuKQoreworCXBncGFfcXVlcnlfZmVhdHVyZSAqcWYgPSBwYWxsb2MwX29iamVjdChwZ3Bh X3F1ZXJ5X2ZlYXR1cmUpOworCisJcWYtPnR5cGUgPSB0eXBlOworCXFmLT5wbGFuID0gcGxhbjsK KworCXdhbGtlci0+cXVlcnlfZmVhdHVyZXNbcWYtPnR5cGVdID0KKwkJbGFwcGVuZCh3YWxrZXIt PnF1ZXJ5X2ZlYXR1cmVzW3FmLT50eXBlXSwgcWYpOworCisJcmV0dXJuIHFmOworfQorCisvKgor ICogQWRkIGEgc2luZ2xlIFJUSSB0byBlYWNoIGFjdGl2ZSBxdWVyeSBmZWF0dXJlLgorICovCitz dGF0aWMgdm9pZAorcGdwYV9xZl9hZGRfcnRpKExpc3QgKmFjdGl2ZV9xdWVyeV9mZWF0dXJlcywg SW5kZXggcnRpKQoreworCWZvcmVhY2hfcHRyKHBncGFfcXVlcnlfZmVhdHVyZSwgcWYsIGFjdGl2 ZV9xdWVyeV9mZWF0dXJlcykKKwl7CisJCXFmLT5yZWxpZHMgPSBibXNfYWRkX21lbWJlcihxZi0+ cmVsaWRzLCBydGkpOworCX0KK30KKworLyoKKyAqIEFkZCBhIHNldCBvZiBSVElzIHRvIGVhY2gg YWN0aXZlIHF1ZXJ5IGZlYXR1cmUuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3FmX2FkZF9ydGlz KExpc3QgKmFjdGl2ZV9xdWVyeV9mZWF0dXJlcywgQml0bWFwc2V0ICpyZWxpZHMpCit7CisJZm9y ZWFjaF9wdHIocGdwYV9xdWVyeV9mZWF0dXJlLCBxZiwgYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzKQor CXsKKwkJcWYtPnJlbGlkcyA9IGJtc19hZGRfbWVtYmVycyhxZi0+cmVsaWRzLCByZWxpZHMpOwor CX0KK30KKworLyoKKyAqIEFkZCBSVElzIGRpcmVjdGx5IGNvbnRhaW5lZCBpbiBhIHBsYW4gbm9k ZSB0byBlYWNoIGFjdGl2ZSBxdWVyeSBmZWF0dXJlLAorICogYnV0IGZpbHRlciBvdXQgYW55IGpv aW4gUlRJcywgc2luY2UgYWR2aWNlIGRvZXNuJ3QgbWVudGlvbiB0aG9zZS4KKyAqLworc3RhdGlj IHZvaWQKK3BncGFfcWZfYWRkX3BsYW5fcnRpcyhMaXN0ICphY3RpdmVfcXVlcnlfZmVhdHVyZXMs IFBsYW4gKnBsYW4sIExpc3QgKnJ0YWJsZSkKK3sKKwlCaXRtYXBzZXQgICpyZWxpZHM7CisJSW5k ZXgJCXJ0aTsKKworCWlmICgocmVsaWRzID0gcGdwYV9yZWxpZHMocGxhbikpICE9IE5VTEwpCisJ eworCQlyZWxpZHMgPSBwZ3BhX2ZpbHRlcl9vdXRfam9pbl9yZWxpZHMocmVsaWRzLCBydGFibGUp OworCQlwZ3BhX3FmX2FkZF9ydGlzKGFjdGl2ZV9xdWVyeV9mZWF0dXJlcywgcmVsaWRzKTsKKwl9 CisJZWxzZSBpZiAoKHJ0aSA9IHBncGFfc2NhbnJlbGlkKHBsYW4pKSAhPSAwKQorCQlwZ3BhX3Fm X2FkZF9ydGkoYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzLCBydGkpOworfQorCisvKgorICogSWYgd2Ug Z2VuZXJhdGVkIHBsYW4gYWR2aWNlIHVzaW5nIHRoZSBwcm92aWRlZCB3YWxrZXIgb2JqZWN0IGFu ZCBhcnJheQorICogb2YgaWRlbnRpZmllcnMsIHdvdWxkIHdlIGdlbmVyYXRlIHRoZSBzcGVjaWZp ZWQgdGFnL3RhcmdldCBjb21iaW5hdGlvbj8KKyAqCisgKiBJZiB5ZXMsIHRoZSBwbGFuIGNvbmZv cm1zIHRvIHRoZSBhZHZpY2U7IGlmIG5vLCBpdCBkb2VzIG5vdC4gTm90ZSB0aGF0CisgKiB3ZSBo YXZlIGtub3cgd2F5IG9mIGtub3dpbmcgd2hldGhlciB0aGUgcGxhbm5lciB3YXMgZm9yY2VkIHRv IGVtaXQgYSBwbGFuCisgKiB0aGF0IGNvbmZvcm1lZCB0byB0aGUgYWR2aWNlIG9yIGp1c3QgaGFw cGVuZWQgdG8gZG8gc28uCisgKi8KK2Jvb2wKK3BncGFfd2Fsa2VyX3dvdWxkX2FkdmlzZShwZ3Bh X3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCSBwZ3BhX2lkZW50aWZpZXIgKnJ0 X2lkZW50aWZpZXJzLAorCQkJCQkJIHBncGFfYWR2aWNlX3RhZ190eXBlIHRhZywKKwkJCQkJCSBw Z3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCkKK3sKKwlJbmRleAkJcnRhYmxlX2xlbmd0aCA9IGxp c3RfbGVuZ3RoKHdhbGtlci0+cHN0bXQtPnJ0YWJsZSk7CisJQml0bWFwc2V0ICAqcmVsaWRzID0g TlVMTDsKKworCWlmICh0YWcgPT0gUEdQQV9UQUdfSk9JTl9PUkRFUikKKwl7CisJCWZvcmVhY2hf cHRyKHBncGFfdW5yb2xsZWRfam9pbiwgdWpvaW4sIHdhbGtlci0+dG9wbGV2ZWxfdW5yb2xsZWRf am9pbnMpCisJCXsKKwkJCWlmIChwZ3BhX3dhbGtlcl9qb2luX29yZGVyX21hdGNoZXModWpvaW4s IHJ0YWJsZV9sZW5ndGgsCisJCQkJCQkJCQkJCSAgIHJ0X2lkZW50aWZpZXJzLCB0YXJnZXQsIHRy dWUpKQorCQkJCXJldHVybiB0cnVlOworCQl9CisKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWlm ICh0YXJnZXQtPnR0eXBlID09IFBHUEFfVEFSR0VUX0lERU5USUZJRVIpCisJeworCQlJbmRleAkJ cnRpOworCisJCXJ0aSA9IHBncGFfY29tcHV0ZV9ydGlfZnJvbV9pZGVudGlmaWVyKHJ0YWJsZV9s ZW5ndGgsIHJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCQkJCQkgICAmdGFyZ2V0LT5yaWQpOworCQlp ZiAocnRpID09IDApCisJCQlyZXR1cm4gZmFsc2U7CisJCXJlbGlkcyA9IGJtc19tYWtlX3Npbmds ZXRvbihydGkpOworCX0KKwllbHNlCisJeworCQlBc3NlcnQodGFyZ2V0LT50dHlwZSA9PSBQR1BB X1RBUkdFVF9PUkRFUkVEX0xJU1QpOworCQlmb3JlYWNoX3B0cihwZ3BhX2FkdmljZV90YXJnZXQs IGNoaWxkX3RhcmdldCwgdGFyZ2V0LT5jaGlsZHJlbikKKwkJeworCQkJSW5kZXgJCXJ0aTsKKwor CQkJQXNzZXJ0KGNoaWxkX3RhcmdldC0+dHR5cGUgPT0gUEdQQV9UQVJHRVRfSURFTlRJRklFUik7 CisJCQlydGkgPSBwZ3BhX2NvbXB1dGVfcnRpX2Zyb21faWRlbnRpZmllcihydGFibGVfbGVuZ3Ro LAorCQkJCQkJCQkJCQkJICAgcnRfaWRlbnRpZmllcnMsCisJCQkJCQkJCQkJCQkgICAmY2hpbGRf dGFyZ2V0LT5yaWQpOworCQkJaWYgKHJ0aSA9PSAwKQorCQkJCWVsb2coRVJST1IsICJjYW5ub3Qg ZGV0ZXJtaW5lIFJUSSBmb3IgYWR2aWNlIHRhcmdldCIpOworCQkJcmVsaWRzID0gYm1zX2FkZF9t ZW1iZXIocmVsaWRzLCBydGkpOworCQl9CisJfQorCisJc3dpdGNoICh0YWcpCisJeworCQljYXNl IFBHUEFfVEFHX0pPSU5fT1JERVI6CisJCQkvKiBzaG91bGQgaGF2ZSBiZWVuIGhhbmRsZWQgYWJv dmUgKi8KKwkJCXBnX3VucmVhY2hhYmxlKCk7CisJCQlicmVhazsKKwkJY2FzZSBQR1BBX1RBR19C SVRNQVBfSEVBUF9TQ0FOOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5zX3NjYW4od2Fs a2VyLAorCQkJCQkJCQkJCQkgUEdQQV9TQ0FOX0JJVE1BUF9IRUFQLAorCQkJCQkJCQkJCQkgcmVs aWRzKTsKKwkJY2FzZSBQR1BBX1RBR19GT1JFSUdOX0pPSU46CisJCQlyZXR1cm4gcGdwYV93YWxr ZXJfY29udGFpbnNfc2Nhbih3YWxrZXIsCisJCQkJCQkJCQkJCSBQR1BBX1NDQU5fRk9SRUlHTiwK KwkJCQkJCQkJCQkJIHJlbGlkcyk7CisJCWNhc2UgUEdQQV9UQUdfSU5ERVhfT05MWV9TQ0FOOgor CQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5zX3NjYW4od2Fsa2VyLAorCQkJCQkJCQkJCQkg UEdQQV9TQ0FOX0lOREVYX09OTFksCisJCQkJCQkJCQkJCSByZWxpZHMpOworCQljYXNlIFBHUEFf VEFHX0lOREVYX1NDQU46CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfY29udGFpbnNfc2Nhbih3YWxr ZXIsCisJCQkJCQkJCQkJCSBQR1BBX1NDQU5fSU5ERVgsCisJCQkJCQkJCQkJCSByZWxpZHMpOwor CQljYXNlIFBHUEFfVEFHX1BBUlRJVElPTldJU0U6CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfY29u dGFpbnNfc2Nhbih3YWxrZXIsCisJCQkJCQkJCQkJCSBQR1BBX1NDQU5fUEFSVElUSU9OV0lTRSwK KwkJCQkJCQkJCQkJIHJlbGlkcyk7CisJCWNhc2UgUEdQQV9UQUdfU0VRX1NDQU46CisJCQlyZXR1 cm4gcGdwYV93YWxrZXJfY29udGFpbnNfc2Nhbih3YWxrZXIsCisJCQkJCQkJCQkJCSBQR1BBX1ND QU5fU0VRLAorCQkJCQkJCQkJCQkgcmVsaWRzKTsKKwkJY2FzZSBQR1BBX1RBR19USURfU0NBTjoK KwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250YWluc19zY2FuKHdhbGtlciwKKwkJCQkJCQkJCQkJ IFBHUEFfU0NBTl9USUQsCisJCQkJCQkJCQkJCSByZWxpZHMpOworCQljYXNlIFBHUEFfVEFHX0dB VEhFUjoKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250YWluc19mZWF0dXJlKHdhbGtlciwKKwkJ CQkJCQkJCQkJCVBHUEFRRl9HQVRIRVIsCisJCQkJCQkJCQkJCQlyZWxpZHMpOworCQljYXNlIFBH UEFfVEFHX0dBVEhFUl9NRVJHRToKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250YWluc19mZWF0 dXJlKHdhbGtlciwKKwkJCQkJCQkJCQkJCVBHUEFRRl9HQVRIRVJfTUVSR0UsCisJCQkJCQkJCQkJ CQlyZWxpZHMpOworCQljYXNlIFBHUEFfVEFHX1NFTUlKT0lOX05PTl9VTklRVUU6CisJCQlyZXR1 cm4gcGdwYV93YWxrZXJfY29udGFpbnNfZmVhdHVyZSh3YWxrZXIsCisJCQkJCQkJCQkJCQlQR1BB UUZfU0VNSUpPSU5fTk9OX1VOSVFVRSwKKwkJCQkJCQkJCQkJCXJlbGlkcyk7CisJCWNhc2UgUEdQ QV9UQUdfU0VNSUpPSU5fVU5JUVVFOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5zX2Zl YXR1cmUod2Fsa2VyLAorCQkJCQkJCQkJCQkJUEdQQVFGX1NFTUlKT0lOX1VOSVFVRSwKKwkJCQkJ CQkJCQkJCXJlbGlkcyk7CisJCWNhc2UgUEdQQV9UQUdfSEFTSF9KT0lOOgorCQkJcmV0dXJuIHBn cGFfd2Fsa2VyX2NvbnRhaW5zX2pvaW4od2Fsa2VyLAorCQkJCQkJCQkJCQkgSlNUUkFUX0hBU0hf Sk9JTiwKKwkJCQkJCQkJCQkJIHJlbGlkcyk7CisJCWNhc2UgUEdQQV9UQUdfTUVSR0VfSk9JTl9N QVRFUklBTElaRToKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250YWluc19qb2luKHdhbGtlciwK KwkJCQkJCQkJCQkJIEpTVFJBVF9NRVJHRV9KT0lOX01BVEVSSUFMSVpFLAorCQkJCQkJCQkJCQkg cmVsaWRzKTsKKwkJY2FzZSBQR1BBX1RBR19NRVJHRV9KT0lOX1BMQUlOOgorCQkJcmV0dXJuIHBn cGFfd2Fsa2VyX2NvbnRhaW5zX2pvaW4od2Fsa2VyLAorCQkJCQkJCQkJCQkgSlNUUkFUX01FUkdF X0pPSU5fUExBSU4sCisJCQkJCQkJCQkJCSByZWxpZHMpOworCQljYXNlIFBHUEFfVEFHX05FU1RF RF9MT09QX01BVEVSSUFMSVpFOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5zX2pvaW4o d2Fsa2VyLAorCQkJCQkJCQkJCQkgSlNUUkFUX05FU1RFRF9MT09QX01BVEVSSUFMSVpFLAorCQkJ CQkJCQkJCQkgcmVsaWRzKTsKKwkJY2FzZSBQR1BBX1RBR19ORVNURURfTE9PUF9NRU1PSVpFOgor CQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5zX2pvaW4od2Fsa2VyLAorCQkJCQkJCQkJCQkg SlNUUkFUX05FU1RFRF9MT09QX01FTU9JWkUsCisJCQkJCQkJCQkJCSByZWxpZHMpOworCQljYXNl IFBHUEFfVEFHX05FU1RFRF9MT09QX1BMQUlOOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRh aW5zX2pvaW4od2Fsa2VyLAorCQkJCQkJCQkJCQkgSlNUUkFUX05FU1RFRF9MT09QX1BMQUlOLAor CQkJCQkJCQkJCQkgcmVsaWRzKTsKKwkJY2FzZSBQR1BBX1RBR19OT19HQVRIRVI6CisJCQlyZXR1 cm4gcGdwYV93YWxrZXJfY29udGFpbnNfbm9fZ2F0aGVyKHdhbGtlciwgcmVsaWRzKTsKKwl9CisK KwkvKiBzaG91bGQgbm90IGdldCBoZXJlICovCisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICog RG9lcyBhbiB1bnJvbGxlZCBqb2luIG1hdGNoIHRoZSBqb2luIG9yZGVyIHNwZWNpZmllZCBieSBh biBhZHZpY2UgdGFyZ2V0PworICovCitzdGF0aWMgYm9vbAorcGdwYV93YWxrZXJfam9pbl9vcmRl cl9tYXRjaGVzKHBncGFfdW5yb2xsZWRfam9pbiAqdWpvaW4sCisJCQkJCQkJICAgSW5kZXggcnRh YmxlX2xlbmd0aCwKKwkJCQkJCQkgICBwZ3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJzLAor CQkJCQkJCSAgIHBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0LAorCQkJCQkJCSAgIGJvb2wgdG9w bGV2ZWwpCit7CisJaW50CQkJbmNoaWxkcmVuID0gbGlzdF9sZW5ndGgodGFyZ2V0LT5jaGlsZHJl bik7CisKKwlBc3NlcnQodGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9PUkRFUkVEX0xJU1Qp OworCisJLyogQXQgdG9wbGV2ZWwsIHdlIGFsbG93IGEgcHJlZml4IG1hdGNoLiAqLworCWlmICh0 b3BsZXZlbCkKKwl7CisJCWlmIChuY2hpbGRyZW4gPiB1am9pbi0+bmlubmVyICsgMSkKKwkJCXJl dHVybiBmYWxzZTsKKwl9CisJZWxzZQorCXsKKwkJaWYgKG5jaGlsZHJlbiAhPSB1am9pbi0+bmlu bmVyICsgMSkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKiBPdXRlcm1vc3QgcmVsIG11c3Qg bWF0Y2guICovCisJaWYgKCFwZ3BhX3dhbGtlcl9qb2luX29yZGVyX21hdGNoZXNfbWVtYmVyKCZ1 am9pbi0+b3V0ZXIsCisJCQkJCQkJCQkJCSAgIHJ0YWJsZV9sZW5ndGgsCisJCQkJCQkJCQkJCSAg IHJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCQkJCQkgICBsaW5pdGlhbCh0YXJnZXQtPmNoaWxkcmVu KSkpCisJCXJldHVybiBmYWxzZTsKKworCS8qIEVhY2ggaW5uZXIgcmVsIG11c3QgbWF0Y2guICov CisJZm9yIChpbnQgbiA9IDA7IG4gPCBuY2hpbGRyZW4gLSAxOyArK24pCisJeworCQlwZ3BhX2Fk dmljZV90YXJnZXQgKmNoaWxkX3RhcmdldCA9IGxpc3RfbnRoKHRhcmdldC0+Y2hpbGRyZW4sIG4g KyAxKTsKKworCQlpZiAoIXBncGFfd2Fsa2VyX2pvaW5fb3JkZXJfbWF0Y2hlc19tZW1iZXIoJnVq b2luLT5pbm5lcltuXSwKKwkJCQkJCQkJCQkJCSAgIHJ0YWJsZV9sZW5ndGgsCisJCQkJCQkJCQkJ CQkgICBydF9pZGVudGlmaWVycywKKwkJCQkJCQkJCQkJCSAgIGNoaWxkX3RhcmdldCkpCisJCQly ZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBEb2VzIG9uZSBt ZW1iZXIgb2YgYW4gdW5yb2xsZWQgam9pbiBtYXRjaCBhbiBhZHZpY2UgdGFyZ2V0PworICovCitz dGF0aWMgYm9vbAorcGdwYV93YWxrZXJfam9pbl9vcmRlcl9tYXRjaGVzX21lbWJlcihwZ3BhX2pv aW5fbWVtYmVyICptZW1iZXIsCisJCQkJCQkJCQkgIEluZGV4IHJ0YWJsZV9sZW5ndGgsCisJCQkJ CQkJCQkgIHBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmllcnMsCisJCQkJCQkJCQkgIHBncGFf YWR2aWNlX3RhcmdldCAqdGFyZ2V0KQoreworCUJpdG1hcHNldCAgKnJlbGlkcyA9IE5VTEw7CisK KwlpZiAobWVtYmVyLT51bnJvbGxlZF9qb2luICE9IE5VTEwpCisJeworCQlpZiAodGFyZ2V0LT50 dHlwZSAhPSBQR1BBX1RBUkdFVF9PUkRFUkVEX0xJU1QpCisJCQlyZXR1cm4gZmFsc2U7CisJCXJl dHVybiBwZ3BhX3dhbGtlcl9qb2luX29yZGVyX21hdGNoZXMobWVtYmVyLT51bnJvbGxlZF9qb2lu LAorCQkJCQkJCQkJCQkgIHJ0YWJsZV9sZW5ndGgsCisJCQkJCQkJCQkJCSAgcnRfaWRlbnRpZmll cnMsCisJCQkJCQkJCQkJCSAgdGFyZ2V0LAorCQkJCQkJCQkJCQkgIGZhbHNlKTsKKwl9CisKKwlB c3NlcnQobWVtYmVyLT5zY2FuICE9IE5VTEwpOworCXN3aXRjaCAodGFyZ2V0LT50dHlwZSkKKwl7 CisJCWNhc2UgUEdQQV9UQVJHRVRfT1JERVJFRF9MSVNUOgorCQkJLyogQ291bGQgb25seSBtYXRj aCBhbiB1bnJvbGxlZCBqb2luICovCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJY2FzZSBQR1BBX1RB UkdFVF9VTk9SREVSRURfTElTVDoKKwkJCXsKKwkJCQlmb3JlYWNoX3B0cihwZ3BhX2FkdmljZV90 YXJnZXQsIGNoaWxkX3RhcmdldCwgdGFyZ2V0LT5jaGlsZHJlbikKKwkJCQl7CisJCQkJCUluZGV4 CQlydGk7CisKKwkJCQkJcnRpID0gcGdwYV9jb21wdXRlX3J0aV9mcm9tX2lkZW50aWZpZXIocnRh YmxlX2xlbmd0aCwKKwkJCQkJCQkJCQkJCQkJICAgcnRfaWRlbnRpZmllcnMsCisJCQkJCQkJCQkJ CQkJCSAgICZjaGlsZF90YXJnZXQtPnJpZCk7CisJCQkJCWlmIChydGkgPT0gMCkKKwkJCQkJCXJl dHVybiBmYWxzZTsKKwkJCQkJcmVsaWRzID0gYm1zX2FkZF9tZW1iZXIocmVsaWRzLCBydGkpOwor CQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKworCQljYXNlIFBHUEFfVEFSR0VUX0lERU5USUZJRVI6 CisJCQl7CisJCQkJSW5kZXgJCXJ0aTsKKworCQkJCXJ0aSA9IHBncGFfY29tcHV0ZV9ydGlfZnJv bV9pZGVudGlmaWVyKHJ0YWJsZV9sZW5ndGgsCisJCQkJCQkJCQkJCQkJICAgcnRfaWRlbnRpZmll cnMsCisJCQkJCQkJCQkJCQkJICAgJnRhcmdldC0+cmlkKTsKKwkJCQlpZiAocnRpID09IDApCisJ CQkJCXJldHVybiBmYWxzZTsKKwkJCQlyZWxpZHMgPSBibXNfbWFrZV9zaW5nbGV0b24ocnRpKTsK KwkJCQlicmVhazsKKwkJCX0KKwl9CisKKwlyZXR1cm4gYm1zX2VxdWFsKG1lbWJlci0+c2Nhbi0+ cmVsaWRzLCByZWxpZHMpOworfQorCisvKgorICogRG9lcyB0aGlzIHdhbGtlciBzYXkgdGhhdCB0 aGUgZ2l2ZW4gc2NhbiBzdHJhdGVneSBzaG91bGQgYmUgdXNlZCBmb3IgdGhlCisgKiBnaXZlbiBy ZWxpZCBzZXQ/CisgKi8KK3N0YXRpYyBib29sCitwZ3BhX3dhbGtlcl9jb250YWluc19zY2FuKHBn cGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJICBwZ3BhX3NjYW5fc3RyYXRl Z3kgc3RyYXRlZ3ksCisJCQkJCQkgIEJpdG1hcHNldCAqcmVsaWRzKQoreworCUxpc3QJICAgKnNj YW5zID0gd2Fsa2VyLT5zY2Fuc1tzdHJhdGVneV07CisKKwlmb3JlYWNoX3B0cihwZ3BhX3NjYW4s IHNjYW4sIHNjYW5zKQorCXsKKwkJLyoKKwkJICogWFhYLiBJZiB0aGlzIGlzIGluZGV4LXJlbGF0 ZWQgYWR2aWNlLCB3ZSBzaG91bGQgYWxzbyB2YWxpZGF0ZSB0aGF0CisJCSAqIHRoZSBhZHZpY2Ug dGFyZ2V0J3MgaW5kZXggdGFyZ2V0IG1hdGNoZXMgdGhlIFBsYW4gdHJlZS4KKwkJICovCisJCWlm IChibXNfZXF1YWwoc2Nhbi0+cmVsaWRzLCByZWxpZHMpKQorCQkJcmV0dXJuIHRydWU7CisJfQor CisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICogRG9lcyB0aGlzIHdhbGtlciBzYXkgdGhhdCB0 aGUgZ2l2ZW4gcXVlcnkgZmVhdHVyZSBhcHBsaWVzIHRvIHRoZSBnaXZlbgorICogcmVsaWQgc2V0 PworICovCitzdGF0aWMgYm9vbAorcGdwYV93YWxrZXJfY29udGFpbnNfZmVhdHVyZShwZ3BhX3Bs YW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkgcGdwYV9xZl90eXBlIHR5cGUsCisJ CQkJCQkJIEJpdG1hcHNldCAqcmVsaWRzKQoreworCUxpc3QJICAgKnF1ZXJ5X2ZlYXR1cmVzID0g d2Fsa2VyLT5xdWVyeV9mZWF0dXJlc1t0eXBlXTsKKworCWZvcmVhY2hfcHRyKHBncGFfcXVlcnlf ZmVhdHVyZSwgcWYsIHF1ZXJ5X2ZlYXR1cmVzKQorCXsKKwkJaWYgKGJtc19lcXVhbChxZi0+cmVs aWRzLCByZWxpZHMpKQorCQkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQor CisvKgorICogRG9lcyB0aGUgd2Fsa2VyIHNheSB0aGF0IHRoZSBnaXZlbiBqb2luIHN0cmF0ZWd5 IHNob3VsZCBiZSB1c2VkIGZvciB0aGUKKyAqIGdpdmVuIHJlbGlkIHNldD8KKyAqLworc3RhdGlj IGJvb2wKK3BncGFfd2Fsa2VyX2NvbnRhaW5zX2pvaW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0 ICp3YWxrZXIsCisJCQkJCQkgIHBncGFfam9pbl9zdHJhdGVneSBzdHJhdGVneSwKKwkJCQkJCSAg Qml0bWFwc2V0ICpyZWxpZHMpCit7CisJTGlzdAkgICAqam9pbl9zdHJhdGVnaWVzID0gd2Fsa2Vy LT5qb2luX3N0cmF0ZWdpZXNbc3RyYXRlZ3ldOworCisJZm9yZWFjaF9wdHIoQml0bWFwc2V0LCBq c3JlbGlkcywgam9pbl9zdHJhdGVnaWVzKQorCXsKKwkJaWYgKGJtc19lcXVhbChqc3JlbGlkcywg cmVsaWRzKSkKKwkJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworLyoK KyAqIERvZXMgdGhlIHdhbGtlciBzYXkgdGhhdCB0aGUgZ2l2ZW4gcmVsaWRzIHNob3VsZCBiZSBt YXJrZWQgYXMgTk9fR0FUSEVSPworICovCitzdGF0aWMgYm9vbAorcGdwYV93YWxrZXJfY29udGFp bnNfbm9fZ2F0aGVyKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCSAg IEJpdG1hcHNldCAqcmVsaWRzKQoreworCXJldHVybiBibXNfaXNfc3Vic2V0KHJlbGlkcywgd2Fs a2VyLT5ub19nYXRoZXJfc2NhbnMpOworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2Fk dmljZS9wZ3BhX3dhbGtlci5oIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dhbGtlci5o Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iOTFhMzZjYTNkZAotLS0g L2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV93YWxrZXIuaApAQCAt MCwwICsxLDE0MSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdwYV93YWxrZXIuaAor ICoJICBQbGFuIHRyZWUgaXRlcmF0aW9uCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjUs IFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3Bn X3BsYW5fYWR2aWNlL3BncGFfd2Fsa2VyLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwor I2lmbmRlZiBQR1BBX1dBTEtFUl9ICisjZGVmaW5lIFBHUEFfV0FMS0VSX0gKKworI2luY2x1ZGUg InBncGFfYXN0LmgiCisjaW5jbHVkZSAicGdwYV9qb2luLmgiCisjaW5jbHVkZSAicGdwYV9zY2Fu LmgiCisKKy8qCisgKiBXaGVuIGdlbmVyYXRpbmcgYWR2aWNlLCB3ZSBzaG91bGQgZW1pdCBlaXRo ZXIgU0VNSUpPSU5fVU5JUVVFIGFkdmljZSBvcgorICogU0VNSUpPSU5fTk9OX1VOSVFVRSBhZHZp Y2UgZm9yIGVhY2ggc2VtaWpvaW4gZGVwZW5kaW5nIG9uIHdoZXRoZXIgd2UgY2hvc2UKKyAqIHRv IGltcGxlbWVudCBpdCBhcyBhIHNlbWlqb2luIG9yIHdoZXRoZXIgd2UgaW5zdGVhZCBjaG9zZSB0 byBtYWtlIHRoZQorICogbnVsbGFibGUgc2lkZSB1bmlxdWUgYW5kIHRoZW4gcGVyZm9ybSBhbiBp bm5lciBqb2luLiBXaGVuIHRoZSBtYWtlLXVuaXF1ZQorICogc3RyYXRlZ3kgaXMgbm90IGNob3Nl biwgaXQncyBub3QgZWFzeSB0byB0ZWxsIGZyb20gdGhlIGZpbmFsIHBsYW4gdHJlZQorICogd2hl dGhlciBpdCB3YXMgY29uc2lkZXJlZC4gVGhhdCdzIGF3a3dhcmQsIGJlY2F1c2Ugd2UgZG9uJ3Qg d2FudCB0byBlbWl0CisgKiB1c2VsZXNzIFNFTUlKT0lOX05PTl9VTklRVUUgYWR2aWNlIHdoZW4g dGhlcmUgd2FzIG5vIGRlY2lzaW9uIHRvIGJlIG1hZGUuCisgKgorICogVG8gYXZvaWQgdGhhdCwg ZHVyaW5nIHBsYW5uaW5nLCB3ZSBjcmVhdGUgYSBwZ3BhX3NqX3VuaXF1ZV9yZWwgZm9yIGVhY2gK KyAqIHJlbGF0aW9uIHRoYXQgd2UgY29uc2lkZXJlZCBtYWtpbmcgdW5pcXVlIGZvciBwdXJwb3Nl cyBvZiBzZW1pam9pbiBwbGFubmluZy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9zal91bmlx dWVfcmVsCit7CisJY2hhcgkgICAqcGxhbl9uYW1lOworCUJpdG1hcHNldCAgKnJlbGlkczsKK30g cGdwYV9zal91bmlxdWVfcmVsOworCisvKgorICogV2UgdXNlIHRoZSB0ZXJtICJxdWVyeSBmZWF0 dXJlIiB0byByZWZlciB0byBwbGFuIG5vZGVzIHRoYXQgYXJlIGludGVyZXN0aW5nCisgKiBpbiB0 aGUgZm9sbG93aW5nIHdheTogdG8gZ2VuZXJhdGUgYWR2aWNlLCB3ZSdsbCBuZWVkIHRvIGtub3cg dGhlIHNldCBvZgorICogc2FtZS1zdWJxdWVyeSwgbm9uLWpvaW4gUlRJcyBvY2N1cmluZyBhdCBv ciBiZWxvdyB0aGF0IHBsYW4gbm9kZSwgd2l0aG91dAorICogYWRtaXh0dXJlIG9mIHBhcmVudCBh bmQgY2hpbGQgUlRJcy4KKyAqCisgKiBGb3IgZXhhbXBsZSwgR2F0aGVyIG5vZGVzLCBkZXNpZ2lu YXRlZCBieSBQR1BBUUZfR0FUSEVSLCBhbmQgR2F0aGVyIE1lcmdlCisgKiBub2RlcywgZGVzaWdu YXRlZCBieSBQR1BBUUZfR0FUSEVSX01FUkdFLCBhcmUgcXVlcnkgZmVhdHVyZXMsIGJlY2F1c2Ug d2UnbGwKKyAqIHdhbnQgdG8gYWRtaXQgc29tZSBraW5kIG9mIGFkdmljZSB0aGF0IGRlc2NyaWJl cyB0aGUgcG9ydGlvbiBvZiB0aGUgcGxhbgorICogdHJlZSB0aGF0IGFwcGVhcnMgYmVuZWF0aCB0 aG9zZSBub2Rlcy4KKyAqCisgKiBFYWNoIHNlbWlqb2luIGNhbiBiZSBpbXBsZW1lbnRlZCBlaXRo ZXIgYnkgZGlyZWN0bHkgcGVyZm9ybWluZyBhIHNlbWlqb2luLAorICogb3IgYnkgbWFraW5nIG9u ZSBzaWRlIHVuaXF1ZSBhbmQgdGhlbiBwZXJmb3JtaW5nIGEgbm9ybWFsIGpvaW4uIEVpdGhlciB3 YXksCisgKiB3ZSB1c2UgYSBxdWVyeSBmZWF0dXJlIHRvIG5vdGljZSB3aGF0IGRlY2lzaW9uIHdh cyBtYWRlLCBzbyB0aGF0IHdlIGNhbgorICogZGVzY3JpYmUgaXQgYnkgZW51bWVyYXRpbmcgdGhl IFJUSXMgb24gdGhhdCBzaWRlIG9mIHRoZSBqb2luLgorICoKKyAqIFRvIGVsYWJvcmF0ZSBvbiB0 aGUgIm5vIGFkbWl4dHVyZSBvZiBwYXJlbnQgYW5kIGNoaWxkIFJUSXMiIHJ1bGUsIGluIGFsbCBv ZgorICogdGhlc2UgY2FzZXMsIGlmIHRoZSBlbnRpcmV0eSBvZiBhbiBpbmhlcml0YW5jZSBoaWVy YXJjaHkgYXBwZWFycyBiZW5lYXRoCisgKiB0aGUgcXVlcnkgZmVhdHVyZSwgd2Ugb25seSB3YW50 IHRvIG5hbWUgdGhlIHBhcmVudCB0YWJsZS4gQnV0IGl0J3MgYWxzbworICogcG9zc2libGUgdG8g aGF2ZSBjYXNlcyB3aGVyZSB3ZSBtdXN0IG5hbWUgY2hpbGQgdGFibGVzLiBUaGlzIGlzIHBhcnRp Y3VsYXJseQorICogbGlrZWx5IHRvIGhhcHBlbiB3aGVuIHBhcnRpdGlvbndpc2Ugam9pbiBpcyBp biB1c2UsIGJ1dCBjb3VsZCBoYXBwZW4gZm9yCisgKiBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIGV2 ZW4gd2l0aG91dCB0aGF0LCBpZiBvbmUgb2YgdGhvc2UgYXBwZWFycyBiZWxvdworICogYW4gQXBw ZW5kIG9yIE1lcmdlQXBwZW5kIG5vZGUgZm9yIGEgc2luZ2xlIHRhYmxlLgorICovCit0eXBlZGVm IGVudW0gcGdwYV9xZl90eXBlCit7CisJUEdQQVFGX0dBVEhFUiwKKwlQR1BBUUZfR0FUSEVSX01F UkdFLAorCVBHUEFRRl9TRU1JSk9JTl9OT05fVU5JUVVFLAorCVBHUEFRRl9TRU1JSk9JTl9VTklR VUUKKwkvKiB1cGRhdGUgTlVNX1BHUEFfUUZfVFlQRVMgaWYgeW91IGFkZCBhbnl0aGluZyBoZXJl ICovCit9IHBncGFfcWZfdHlwZTsKKworI2RlZmluZSBOVU1fUEdQQV9RRl9UWVBFUyAoKGludCkg UEdQQVFGX1NFTUlKT0lOX1VOSVFVRSArIDEpCisKKy8qCisgKiBGb3IgZWFjaCBxdWVyeSBmZWF0 dXJlLCB3ZSBrZWVwIHRyYWNrIG9mIHRoZSBmZWF0dXJlIHR5cGUgYW5kIHRoZSBzZXQgb2YKKyAq IHJlbGlkcyB0aGF0IHdlIGZvdW5kIHVuZGVybmVhdGggdGhlIHJlbGV2YW50IHBsYW4gbm9kZS4g U2VlIHRoZSBjb21tZW50cworICogb24gcGdwYV9xZl90eXBlLCBhYm92ZSwgZm9yIGFkZGl0aW9u YWwgZGV0YWlscy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9xdWVyeV9mZWF0dXJlCit7CisJ cGdwYV9xZl90eXBlIHR5cGU7CisJUGxhbgkgICAqcGxhbjsKKwlCaXRtYXBzZXQgICpyZWxpZHM7 Cit9IHBncGFfcXVlcnlfZmVhdHVyZTsKKworLyoKKyAqIENvbnRleHQgb2JqZWN0IGZvciBwbGFu IHRyZWUgd2Fsay4KKyAqCisgKiBwc3RtdCBpcyB0aGUgUGxhbm5lZFN0bXQgd2UncmUgc3R1ZHlp bmcuCisgKgorICogc2NhbnMgaXMgYW4gYXJyYXkgb2YgbGlzdHMgb2YgcGdwYV9zY2FuIG9iamVj dHMuIFRoZSBhcnJheSBpcyBpbmRleGVkIGJ5CisgKiB0aGUgc2NhbidzIHBncGFfc2Nhbl9zdHJh dGVneS4KKyAqCisgKiBub19nYXRoZXJfc2NhbnMgaXMgdGhlIHNldCBvZiBzY2FuIFJUSXMgdGhh dCBkbyBub3QgYXBwZWFyIGJlbmVhdGggYW55CisgKiBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIG5v ZGUuCisgKgorICogdG9wbGV2ZWxfdW5yb2xsZWRfam9pbnMgaXMgYSBsaXN0IG9mIGFsbCBwZ3Bh X3Vucm9sbGVkX2pvaW4gb2JqZWN0cyB0aGF0CisgKiBhcmUgbm90IGEgY2hpbGQgb2Ygc29tZSBv dGhlciBwZ3BhX3Vucm9sbGVkX2pvaW4uCisgKgorICogam9pbl9zdHJhdGVneSBpcyBhbiBhcnJh eSBvZiBsaXN0cyBvZiBCaXRtYXBzZXQgb2JqZWN0cy4gRWFjaCBCaXRtYXBzZXQKKyAqIGlzIHRo ZSBzZXQgb2YgcmVsaWRzIHRoYXQgYXBwZWFycyBvbiB0aGUgaW5uZXIgc2lkZSBvZiBzb21lIGpv aW4gKGV4Y2x1ZGluZworICogUlRJcyBmcm9tIHBhcnRpdGlvbiBjaGlsZHJlbiBhbmQgc3VicXVl cmllcykuIFRoZSBhcnJheSBpcyBpbmRleGVkIGJ5CisgKiBwZ3BhX2pvaW5fc3RyYXRlZ3kuCisg KgorICogcXVlcnlfZmVhdHVyZXMgaXMgYW4gYXJyYXkgbGlzdHMgb2YgcGdwYV9xdWVyeV9mZWF0 dXJlIG9iamVjdHMsIGluZGV4ZWQKKyAqIGJ5IHBncGFfcWZfdHlwZS4KKyAqCisgKiBmdXR1cmVf cXVlcnlfZmVhdHVyZXMgaXMgb25seSB1c2VkIGR1cmluZyB0aGUgcGxhbiB0cmVlIHdhbGsgYW5k IHNob3VsZAorICogYmUgZW1wdHkgd2hlbiB0aGUgdHJlZSB3YWxrIGNvbmNsdWRlcy4gSXQgaXMg YSBsaXN0IG9mIHBncGFfcXVlcnlfZmVhdHVyZQorICogb2JqZWN0cyBmb3IgUGxhbiBub2RlcyB0 aGF0IHRoZSBwbGFuIHRyZWUgd2FsayBoYXMgbm90IHlldCBlbmNvdW50ZXJlZDsKKyAqIHdoZW4g ZW5jb3VudGVyZWQsIHRoZXkgd2lsbCBiZSBtb3ZlZCB0byB0aGUgbGlzdCBvZiBhY3RpdmUgcXVl cnkgZmVhdHVyZXMKKyAqIHRoYXQgaXMgcHJvcGFnYXRlZCB2aWEgdGhlIGNhbGwgc3RhY2suCisg Ki8KK3R5cGVkZWYgc3RydWN0IHBncGFfcGxhbl93YWxrZXJfY29udGV4dAoreworCVBsYW5uZWRT dG10ICpwc3RtdDsKKwlMaXN0CSAgICpzY2Fuc1tOVU1fUEdQQV9TQ0FOX1NUUkFURUdZXTsKKwlC aXRtYXBzZXQgICpub19nYXRoZXJfc2NhbnM7CisJTGlzdAkgICAqdG9wbGV2ZWxfdW5yb2xsZWRf am9pbnM7CisJTGlzdAkgICAqam9pbl9zdHJhdGVnaWVzW05VTV9QR1BBX0pPSU5fU1RSQVRFR1ld OworCUxpc3QJICAgKnF1ZXJ5X2ZlYXR1cmVzW05VTV9QR1BBX1FGX1RZUEVTXTsKKwlMaXN0CSAg ICpmdXR1cmVfcXVlcnlfZmVhdHVyZXM7Cit9IHBncGFfcGxhbl93YWxrZXJfY29udGV4dDsKKwor ZXh0ZXJuIHZvaWQgcGdwYV9wbGFuX3dhbGtlcihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndh bGtlciwKKwkJCQkJCQkgUGxhbm5lZFN0bXQgKnBzdG10LAorCQkJCQkJCSBMaXN0ICpzal91bmlx dWVfcmVscyk7CisKK2V4dGVybiB2b2lkIHBncGFfYWRkX2Z1dHVyZV9mZWF0dXJlKHBncGFfcGxh bl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCQkJcGdwYV9xZl90eXBlIHR5cGUsCisJ CQkJCQkJCQlQbGFuICpwbGFuKTsKKworZXh0ZXJuIEVsaWRlZE5vZGUgKnBncGFfbGFzdF9lbGlk ZWRfbm9kZShQbGFubmVkU3RtdCAqcHN0bXQsIFBsYW4gKnBsYW4pOworZXh0ZXJuIEJpdG1hcHNl dCAqcGdwYV9yZWxpZHMoUGxhbiAqcGxhbik7CitleHRlcm4gSW5kZXggcGdwYV9zY2FucmVsaWQo UGxhbiAqcGxhbik7CitleHRlcm4gQml0bWFwc2V0ICpwZ3BhX2ZpbHRlcl9vdXRfam9pbl9yZWxp ZHMoQml0bWFwc2V0ICpyZWxpZHMsIExpc3QgKnJ0YWJsZSk7CisKK2V4dGVybiBib29sIHBncGFf d2Fsa2VyX3dvdWxkX2FkdmlzZShwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJ CQkJCQkJCSBwZ3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCQkJIHBncGFf YWR2aWNlX3RhZ190eXBlIHRhZywKKwkJCQkJCQkJCSBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdl dCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvZ2F0 aGVyLnNxbCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2dhdGhlci5zcWwKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmNiMDRlZDVjZjMwCi0tLSAvZGV2L251bGwK KysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvZ2F0aGVyLnNxbApAQCAtMCwwICsxLDc5 IEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CitTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVy X2dhdGhlciA9IDE7CitTRVQgcGFyYWxsZWxfc2V0dXBfY29zdCA9IDA7CitTRVQgcGFyYWxsZWxf dHVwbGVfY29zdCA9IDA7CitTRVQgbWluX3BhcmFsbGVsX3RhYmxlX3NjYW5fc2l6ZSA9IDA7CitT RVQgZGVidWdfcGFyYWxsZWxfcXVlcnkgPSBvZmY7CisKK0NSRUFURSBUQUJMRSBndF9kaW0gKGlk IHNlcmlhbCBwcmltYXJ5IGtleSwgZGltIHRleHQpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVk ID0gZmFsc2UpOworSU5TRVJUIElOVE8gZ3RfZGltIChkaW0pIFNFTEVDVCByYW5kb20oKTo6dGV4 dCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIGd0X2RpbTsK KworQ1JFQVRFIFRBQkxFIGd0X2ZhY3QgKAorCWlkIGludCBub3QgbnVsbCwKKwlkaW1faWQgaW50 ZWdlciBub3QgbnVsbCByZWZlcmVuY2VzIGd0X2RpbSAoaWQpCispIFdJVEggKGF1dG92YWN1dW1f ZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIGd0X2ZhY3QKKwlTRUxFQ1QgZywgKGclMykr MSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIGd0X2Zh Y3Q7CisKKy0tIEJ5IGRlZmF1bHQsIHdlIGV4cGVjdCBHYXRoZXIgTWVyZ2Ugd2l0aCBhIHBhcmFs bGVsIGhhc2ggam9pbi4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNU ICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIg QlkgZC5pZDsKKworLS0gRm9yY2UgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBvZiBib3RoIHJlbGF0 aW9ucyB0b2dldGhlci4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdnYXRoZXJfbWVyZ2UoKGYgZCkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0Up CisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQu aWQgT1JERVIgQlkgZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0 aGVyKChmIGQpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAq IEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZ IGQuaWQ7CitDT01NSVQ7CisKKy0tIEZvcmNlIGEgc2VwYXJhdGUgR2F0aGVyIG9yIEdhdGhlciBN ZXJnZSBvcGVyYXRpb24gZm9yIGVhY2ggcmVsYXRpb24uCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyX21lcmdlKGYgZCknOworRVhQTEFJTiAoQ09TVFMg T0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBk IE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdnYXRoZXIoZiBkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURW SUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQg PSBkLmlkIE9SREVSIEJZIGQuaWQ7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J2dhdGhlcigoZCBkL2QuZCkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJ U0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQg T1JERVIgQlkgZC5pZDsKK0NPTU1JVDsKKworLS0gRm9yY2UgYSBHYXRoZXIgb3IgR2F0aGVyIE1l cmdlIG9uIG9uZSByZWxhdGlvbiBidXQgbm8gcGFyYWxsZWxpc20gb24gb3RoZXIuCitCRUdJTjsK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyX21lcmdlKGYpIG5vX2dh dGhlcihkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZS T00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQu aWQ7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcl9tZXJnZShkKSBu b19nYXRoZXIoZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1Qg KiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBC WSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXIoZikgbm9f Z2F0aGVyKGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICog RlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkg ZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyKGQpIG5vX2dh dGhlcihmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZS T00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQu aWQ7CitDT01NSVQ7CisKKy0tIEZvcmNlIG5vIEdhdGhlciBvciBHYXRoZXIgTWVyZ2UgdXNlIGF0 IGFsbC4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdub19nYXRo ZXIoZiBkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZS T00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQu aWQ7CitDT01NSVQ7CisKKy0tIENhbid0IGZvcmNlIEdhdGhlciBNZXJnZSB3aXRob3V0IHRoZSBP UkRFUiBCWSBjbGF1c2UsIGJ1dCBqdXN0IEdhdGhlciBpcyBPSy4KK0JFR0lOOworU0VUIExPQ0FM IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXJfbWVyZ2UoKGYgZCkpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBn dF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ2dhdGhlcigoZiBkKSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkK KwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5p ZDsKK0NPTU1JVDsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2pvaW5f b3JkZXIuc3FsIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvam9pbl9vcmRlci5zcWwKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQ4YjhkZmU2Zjc0Ci0tLSAvZGV2 L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvam9pbl9vcmRlci5zcWwKQEAg LTAsMCArMSwxMTEgQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsKK1NFVCBtYXhfcGFyYWxsZWxf d29ya2Vyc19wZXJfZ2F0aGVyID0gMDsKKworQ1JFQVRFIFRBQkxFIGpvX2RpbTEgKGlkIGludGVn ZXIgcHJpbWFyeSBrZXksIGRpbTEgdGV4dCwgdmFsMSBpbnQpCisJV0lUSCAoYXV0b3ZhY3V1bV9l bmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gam9fZGltMSAoaWQsIGRpbTEsIHZhbDEpCisJ U0VMRUNUIGcsICdzb21lIGZpbGxlciB0ZXh0ICcgfHwgZywgKGcgJSAzKSArIDEKKwkgIEZST00g Z2VuZXJhdGVfc2VyaWVzKDEsMTAwKSBnOworVkFDVVVNIEFOQUxZWkUgam9fZGltMTsKK0NSRUFU RSBUQUJMRSBqb19kaW0yIChpZCBpbnRlZ2VyIHByaW1hcnkga2V5LCBkaW0yIHRleHQsIHZhbDIg aW50KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIGpv X2RpbTIgKGlkLCBkaW0yLCB2YWwyKQorCVNFTEVDVCBnLCAnc29tZSBmaWxsZXIgdGV4dCAnIHx8 IGcsIChnICUgNykgKyAxCisJICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDApIGc7CitWQUNV VU0gQU5BTFlaRSBqb19kaW0yOworCitDUkVBVEUgVEFCTEUgam9fZmFjdCAoCisJaWQgaW50IHBy aW1hcnkga2V5LAorCWRpbTFfaWQgaW50ZWdlciBub3QgbnVsbCByZWZlcmVuY2VzIGpvX2RpbTEg KGlkKSwKKwlkaW0yX2lkIGludGVnZXIgbm90IG51bGwgcmVmZXJlbmNlcyBqb19kaW0yIChpZCkK KykgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gam9fZmFj dAorCVNFTEVDVCBnLCAoZyUxMDApKzEsIChnJTEwMCkrMSBGUk9NIGdlbmVyYXRlX3Nlcmllcygx LDEwMDAwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIGpvX2ZhY3Q7CisKKy0tIFdlIGV4cGVjdCB0byBq b2luIHRvIGQyIGZpcnN0IGFuZCB0aGVuIGQxLCBzaW5jZSB0aGUgY29uZGl0aW9uIG9uIGQyCist LSBpcyBtb3JlIHNlbGVjdGl2ZS4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitT RUxFQ1QgKiBGUk9NIGpvX2ZhY3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9p ZCA9IGQxLmlkCisJTEVGVCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlX SEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CisKKy0tIEZvcmNlIGEgZmV3IGRpZmZlcmVudCBq b2luIG9yZGVycy4gU29tZSBvZiB0aGVzZSBhcmUgdmVyeSBpbmVmZmljaWVudCwKKy0tIGJ1dCB0 aGUgcGxhbm5lciBjb25zaWRlcnMgdGhlbSBhbGwgdmlhYmxlLgorQkVHSU47CitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZiBkMSBkMiknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZmFjdCBmCisJTEVGVCBK T0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gam9fZGltMiBk MiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKK1NF VCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihmIGQyIGQxKSc7CitF WFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19mYWN0IGYK KwlMRUZUIEpPSU4gam9fZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBq b19kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIg PSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGQxIGYg ZDIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpv X2ZhY3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVG VCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBB TkQgdmFsMiA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3Jk ZXIoZiAoZDEgZDIpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNU ICogRlJPTSBqb19mYWN0IGYKKwlMRUZUIEpPSU4gam9fZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBk MS5pZAorCUxFRlQgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUg dmFsMSA9IDEgQU5EIHZhbDIgPSAxOworQ09NTUlUOworCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihmL2QxIGQxIGQyKSc7CitFWFBMQUlOIChD T1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19mYWN0IGYKKwlMRUZUIEpP SU4gam9fZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBqb19kaW0yIGQy IE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworU0VU IExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGYvZDEgKGQxIGQyKSkn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZmFj dCBmCisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpP SU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2 YWwyID0gMTsKK0NPTU1JVDsKKworLS0gVGhlIHVudXN1YWwgZm9ybXVsYXRpb24gb2YgdGhpcyBx dWVyeSBpcyBpbnRlbmRlZCB0byBwcmV2ZW50IHRoZSBxdWVyeQorLS0gcGxhbm5lciBmcm9tIHJl ZHVjaW5nIHRoZSBGVUxMIEpPSU4gdG8gc29tZSBvdGhlciBqb2luIHR5cGUsIHNvIHRoYXQgd2UK Ky0tIGNhbiB0ZXN0IHdoYXQgaGFwcGVucyB3aXRoIGEgam9pbiB0eXBlIHRoYXQgY2Fubm90IGJl IHJlb3JkZXJlZC4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBG Uk9NIGpvX2RpbTEgZDEKKwlJTk5FUiBKT0lOIChqb19mYWN0IGYgRlVMTCBKT0lOIGpvX2RpbTIg ZDIgT04gZi5kaW0yX2lkICsgMCA9IGQyLmlkICsgMCkKKwlPTiBkMS5pZCA9IGYuZGltMV9pZCBP UiBmLmRpbTFfaWQgSVMgTlVMTDsKKworLS0gV2Ugc2hvdWxkIG5vdCBiZSBhYmxlIHRvIGZvcmNl IHRoZSBwbGFubmVyIHRvIGpvaW4gZiB0byBkMSBmaXJzdCwgYmVjYXVzZQorLS0gdGhhdCBpcyBu b3QgYSB2YWxpZCBqb2luIG9yZGVyLCBidXQgd2Ugc2hvdWxkIGJlIGFibGUgdG8gZm9yY2UgdGhl IHBsYW5uZXIKKy0tIHRvIG1ha2UgZWl0aGVyIGQyIG9yIGYgdGhlIGRyaXZpbmcgdGFibGUuCitC RUdJTjsKKy0tIFhYWDogVGhlIGFkdmljZSBmZWVkYmFjayBzYXlzICdwYXJ0aWFsbHkgbWF0Y2hl ZCcgaGVyZSB3aGljaCBpc24ndCBleGFjdGx5CistLSB3cm9uZyBnaXZlbiB0aGUgd2F5IHRoYXQg ZmxhZyBpcyBoYW5kbGVkIGluIHRoZSBjb2RlLCBidXQgaXQncyBhdCB0aGUgdmVyeQorLS0gbGVh c3QgY29uZnVzaW5nLiBTb21ldGhpbmcgc2hvdWxkIHByb2JhYmx5IGJlIGltcHJvdmVkIGhlcmUu CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZiBkMSBkMikn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZGlt MSBkMQorCUlOTkVSIEpPSU4gKGpvX2ZhY3QgZiBGVUxMIEpPSU4gam9fZGltMiBkMiBPTiBmLmRp bTJfaWQgKyAwID0gZDIuaWQgKyAwKQorCU9OIGQxLmlkID0gZi5kaW0xX2lkIE9SIGYuZGltMV9p ZCBJUyBOVUxMOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVy KGYgZDIgZDEpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBG Uk9NIGpvX2RpbTEgZDEKKwlJTk5FUiBKT0lOIChqb19mYWN0IGYgRlVMTCBKT0lOIGpvX2RpbTIg ZDIgT04gZi5kaW0yX2lkICsgMCA9IGQyLmlkICsgMCkKKwlPTiBkMS5pZCA9IGYuZGltMV9pZCBP UiBmLmRpbTFfaWQgSVMgTlVMTDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn am9pbl9vcmRlcihkMiBmIGQxKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQor U0VMRUNUICogRlJPTSBqb19kaW0xIGQxCisJSU5ORVIgSk9JTiAoam9fZmFjdCBmIEZVTEwgSk9J TiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCArIDAgPSBkMi5pZCArIDApCisJT04gZDEuaWQgPSBm LmRpbTFfaWQgT1IgZi5kaW0xX2lkIElTIE5VTEw7CitDT01NSVQ7CisKKy0tIFhYWDogYWRkIHRl c3RzIGZvciBqb2luIG9yZGVyIHByZWZpeCBtYXRjaGluZworLS0gWFhYOiBqb2luX29yZGVyKGp1 c3RvbmVyZWwpIHNob3VsZG4ndCByZXBvcnQgcGFydGlhbGx5IG1hdGNoZWQKZGlmZiAtLWdpdCBh L2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2pvaW5fc3RyYXRlZ3kuc3FsIGIvY29udHJpYi9w Z19wbGFuX2FkdmljZS9zcWwvam9pbl9zdHJhdGVneS5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAuLjhlYjgyM2YxYzBlCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJp Yi9wZ19wbGFuX2FkdmljZS9zcWwvam9pbl9zdHJhdGVneS5zcWwKQEAgLTAsMCArMSw3NiBAQAor TE9BRCAncGdfcGxhbl9hZHZpY2UnOworU0VUIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRo ZXIgPSAwOworCitDUkVBVEUgVEFCTEUgam9pbl9kaW0gKGlkIHNlcmlhbCBwcmltYXJ5IGtleSwg ZGltIHRleHQpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElO VE8gam9pbl9kaW0gKGRpbSkgU0VMRUNUIHJhbmRvbSgpOjp0ZXh0IEZST00gZ2VuZXJhdGVfc2Vy aWVzKDEsMTAwKSBnOworVkFDVVVNIEFOQUxZWkUgam9pbl9kaW07CisKK0NSRUFURSBUQUJMRSBq b2luX2ZhY3QgKAorCWlkIGludCBwcmltYXJ5IGtleSwKKwlkaW1faWQgaW50ZWdlciBub3QgbnVs bCByZWZlcmVuY2VzIGpvaW5fZGltIChpZCkKKykgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0g ZmFsc2UpOworSU5TRVJUIElOVE8gam9pbl9mYWN0CisJU0VMRUNUIGcsIChnJTMpKzEgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMDApIGc7CitDUkVBVEUgSU5ERVggam9pbl9mYWN0X2RpbV9p ZCBPTiBqb2luX2ZhY3QgKGRpbV9pZCk7CitWQUNVVU0gQU5BTFlaRSBqb2luX2ZhY3Q7CisKKy0t IFdlIGV4cGVjdCBhIGhhc2ggam9pbiBieSBkZWZhdWx0LgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBP TiBmLmRpbV9pZCA9IGQuaWQ7CisKKy0tIFRyeSBmb3JjaW5nIGVhY2ggam9pbiBtZXRob2QgaW4g dHVybiB3aXRoIGpvaW5fZGltIGFzIHRoZSBpbm5lciB0YWJsZS4KKy0tIEFsbCBvZiB0aGVzZSBz aG91bGQgd29yayBleGNlcHQgZm9yIE1FUkdFX0pPSU5fTUFURVJJQUxJWkU7IHRoYXQgd2lsbAor LS0gZmFpbCwgYmVjYXVzZSB0aGUgcGxhbm5lciBrbm93cyB0aGF0IGpvaW5fZGltIChpZCkgaXMg dW5pcXVlLCBhbmQgd2lsbAorLS0gcmVmdXNlIHRvIGFkZCBtYXJrL3Jlc3RvcmUgb3ZlcmhlYWQu CitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSEFTSF9KT0lOKGQp JzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2lu X2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworU0VUIExPQ0FMIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdNRVJHRV9KT0lOX01BVEVSSUFMSVpFKGQpJzsKK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBK T0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdNRVJHRV9KT0lOX1BMQUlOKGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwg UExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQg T04gZi5kaW1faWQgPSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdO RVNURURfTE9PUF9NQVRFUklBTElaRShkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURW SUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGlt X2lkID0gZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTkVTVEVEX0xP T1BfTUVNT0laRShkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVD VCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTkVTVEVEX0xPT1BfUExBSU4oZCkn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5f ZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitDT01NSVQ7CisKKy0t IE5vdyB0cnkgZm9yY2luZyBlYWNoIGpvaW4gbWV0aG9kIGluIHR1cm4gd2l0aCBqb2luX2ZhY3Qg YXMgdGhlIGlubmVyCistLSB0YWJsZS4gQWxsIG9mIHRoZXNlIHNob3VsZCB3b3JrLgorQkVHSU47 CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0hBU0hfSk9JTihmKSc7CitFWFBM QUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYg Sk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnTUVSR0VfSk9JTl9NQVRFUklBTElaRShmKSc7CitFWFBMQUlOIChDT1NU UyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2lu X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnTUVSR0VfSk9JTl9QTEFJTihmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURW SUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGlt X2lkID0gZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTkVTVEVEX0xP T1BfTUFURVJJQUxJWkUoZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlT RUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQu aWQ7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05FU1RFRF9MT09QX01FTU9J WkUoZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9N IGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitTRVQgTE9D QUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05FU1RFRF9MT09QX1BMQUlOKGYpJzsKK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBK T0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworQ09NTUlUOworCistLSBXZSBjYW4n dCBmb3JjZSBhIGZvcmVpZ24gam9pbiBiZXR3ZWVuIHRoZXNlIHRhYmxlcywgYmVjYXVzZSB0aGV5 CistLSBhcmVuJ3QgZm9yZWlnbiB0YWJsZXMuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnRk9SRUlHTl9KT0lOKChmIGQpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBk IE9OIGYuZGltX2lkID0gZC5pZDsKK0NPTU1JVDsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxh bl9hZHZpY2Uvc3FsL2xvY2FsX2NvbGxlY3Rvci5zcWwgYi9jb250cmliL3BnX3BsYW5fYWR2aWNl L3NxbC9sb2NhbF9jb2xsZWN0b3Iuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwLi5mYzgzOGIyMjA0ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9h ZHZpY2Uvc3FsL2xvY2FsX2NvbGxlY3Rvci5zcWwKQEAgLTAsMCArMSw0MSBAQAorQ1JFQVRFIEVY VEVOU0lPTiBwZ19wbGFuX2FkdmljZTsKK1NFVCBkZWJ1Z19wYXJhbGxlbF9xdWVyeSA9IG9mZjsK KworLS0gVHJ5IGNsZWFyaW5nIGFkdmljZSBiZWZvcmUgd2UndmUgY29sbGVjdGVkIGFueS4KK1NF TEVDVCBwZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCk7CisKKy0tIFNldCBhIHNtYWxs IGFkdmljZSBjb2xsZWN0aW9uIGxpbWl0IHNvIHRoYXQgd2UnbGwgZXhjZWVkIGl0LgorU0VUIHBn X3BsYW5fYWR2aWNlLmxvY2FsX2NvbGxlY3Rpb25fbGltaXQgPSAyOworCistLSBTZXQgdXAgYSBk dW1teSB0YWJsZS4KK0NSRUFURSBUQUJMRSBkdW1teV90YWJsZSAoYSBpbnQgcHJpbWFyeSBrZXks IGIgdGV4dCkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSwgcGFyYWxsZWxfd29y a2VycyA9IDApOworCistLSBUZXN0IHF1ZXJpZXMuCitTRUxFQ1QgKiBGUk9NIGR1bW15X3RhYmxl IGEsIGR1bW15X3RhYmxlIGI7CitTRUxFQ1QgKiBGUk9NIGR1bW15X3RhYmxlOworCistLSBTaG91 bGQgcmV0dXJuIHRoZSBhZHZpY2UgZnJvbSB0aGUgc2Vjb25kIHRlc3QgcXVlcnkuCitTRUxFQ1Qg YWR2aWNlIEZST00gcGdfZ2V0X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKSBPUkRFUiBCWSBpZCBE RVNDIExJTUlUIDE7CisKKy0tIE5vdyB0cnkgY2xlYXJpbmcgYWR2aWNlIGFnYWluLgorU0VMRUNU IHBnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKTsKKworLS0gUmFpc2UgdGhlIGNvbGxl Y3Rpb24gbGltaXQgc28gdGhhdCB0aGUgY29sbGVjdG9yIHVzZXMgbXVsdGlwbGUgY2h1bmtzLgor U0VUIHBnX3BsYW5fYWR2aWNlLmxvY2FsX2NvbGxlY3Rpb25fbGltaXQgPSAyMDAwOworCistLSBQ dXNoIGEgYnVuY2ggb2YgcXVlcmllcyB0aHJvdWdoIHRoZSBjb2xsZWN0b3IuCitETyAkJAorQkVH SU4KKwlGT1IgeCBJTiAxLi4yMDAwIExPT1AKKwkJRVhFQ1VURSAnU0VMRUNUICogRlJPTSBkdW1t eV90YWJsZSc7CisJRU5EIExPT1A7CitFTkQKKyQkOworCistLSBDaGVjayB0aGF0IHRoZSBjb2xs ZWN0b3Igd29ya2VkLgorU0VMRUNUIENPVU5UKCopIEZST00gcGdfZ2V0X2NvbGxlY3RlZF9sb2Nh bF9hZHZpY2UoKTsKKworLS0gQW5kIGNsZWFyIG9uZSBtb3JlIHRpbWUsIHRvIHZlcmlmeSB0aGF0 IHRoaXMgZG9lc24ndCBjYXVzZSBhIHByb2JsZW0KKy0tIGV2ZW4gd2l0aCBhIGxhcmdlciBudW1i ZXIgb2YgZW50cmllcy4KK1NFTEVDVCBwZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCk7 CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9wYXJ0aXRpb253aXNlLnNx bCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3BhcnRpdGlvbndpc2Uuc3FsCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kZWEzNDViM2FhZAotLS0gL2Rldi9udWxs CisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3BhcnRpdGlvbndpc2Uuc3FsCkBAIC0w LDAgKzEsOTEgQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsKK1NFVCBtYXhfcGFyYWxsZWxfd29y a2Vyc19wZXJfZ2F0aGVyID0gMDsKK1NFVCBlbmFibGVfcGFydGl0aW9ud2lzZV9qb2luID0gdHJ1 ZTsKKworQ1JFQVRFIFRBQkxFIHB0MSAoaWQgaW50ZWdlciBwcmltYXJ5IGtleSwgZGltMSB0ZXh0 LCB2YWwxIGludCkKKwlQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFURSBUQUJMRSBwdDFh IFBBUlRJVElPTiBPRiBwdDEgRk9SIFZBTFVFUyBGUk9NICgxKSB0byAoMTAwMSkKKwlXSVRIIChh dXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUgcHQxYiBQQVJUSVRJT04g T0YgcHQxIEZPUiBWQUxVRVMgRlJPTSAoMTAwMSkgdG8gKDIwMDEpCisJV0lUSCAoYXV0b3ZhY3V1 bV9lbmFibGVkID0gZmFsc2UpOworQ1JFQVRFIFRBQkxFIHB0MWMgUEFSVElUSU9OIE9GIHB0MSBG T1IgVkFMVUVTIEZST00gKDIwMDEpIHRvICgzMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxl ZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIHB0MSAoaWQsIGRpbTEsIHZhbDEpCisJU0VMRUNUIGcs ICdzb21lIGZpbGxlciB0ZXh0ICcgfHwgZywgKGcgJSAzKSArIDEKKwkgIEZST00gZ2VuZXJhdGVf c2VyaWVzKDEsMzAwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIHB0MTsKKworQ1JFQVRFIFRBQkxFIHB0 MiAoaWQgaW50ZWdlciBwcmltYXJ5IGtleSwgZGltMiB0ZXh0LCB2YWwyIGludCkKKwlQQVJUSVRJ T04gQlkgUkFOR0UgKGlkKTsKK0NSRUFURSBUQUJMRSBwdDJhIFBBUlRJVElPTiBPRiBwdDIgRk9S IFZBTFVFUyBGUk9NICgxKSB0byAoMTAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBm YWxzZSk7CitDUkVBVEUgVEFCTEUgcHQyYiBQQVJUSVRJT04gT0YgcHQyIEZPUiBWQUxVRVMgRlJP TSAoMTAwMSkgdG8gKDIwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOwor Q1JFQVRFIFRBQkxFIHB0MmMgUEFSVElUSU9OIE9GIHB0MiBGT1IgVkFMVUVTIEZST00gKDIwMDEp IHRvICgzMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJ TlRPIHB0MiAoaWQsIGRpbTIsIHZhbDIpCisJU0VMRUNUIGcsICdzb21lIG90aGVyIHRleHQgJyB8 fCBnLCAoZyAlIDUpICsgMQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwzMDAwLDIpIGc7CitW QUNVVU0gQU5BTFlaRSBwdDI7CisKK0NSRUFURSBUQUJMRSBwdDMgKGlkIGludGVnZXIgcHJpbWFy eSBrZXksIGRpbTMgdGV4dCwgdmFsMyBpbnQpCisJUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitD UkVBVEUgVEFCTEUgcHQzYSBQQVJUSVRJT04gT0YgcHQzIEZPUiBWQUxVRVMgRlJPTSAoMSkgdG8g KDEwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworQ1JFQVRFIFRBQkxF IHB0M2IgUEFSVElUSU9OIE9GIHB0MyBGT1IgVkFMVUVTIEZST00gKDEwMDEpIHRvICgyMDAxKQor CVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFURSBUQUJMRSBwdDNjIFBB UlRJVElPTiBPRiBwdDMgRk9SIFZBTFVFUyBGUk9NICgyMDAxKSB0byAoMzAwMSkKKwlXSVRIIChh dXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBwdDMgKGlkLCBkaW0zLCB2 YWwzKQorCVNFTEVDVCBnLCAnYSB0aGlyZCByYW5kb20gdGV4dCAnIHx8IGcsIChnICUgNykgKyAx CisJICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDMwMDAsMykgZzsKK1ZBQ1VVTSBBTkFMWVpFIHB0 MzsKKworQ1JFQVRFIFRBQkxFIHB0bWlzbWF0Y2ggKGlkIGludGVnZXIgcHJpbWFyeSBrZXksIGRp bW0gdGV4dCwgdmFsbSBpbnQpCisJUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitDUkVBVEUgVEFC TEUgcHRtaXNtYXRjaGEgUEFSVElUSU9OIE9GIHB0bWlzbWF0Y2gKKyAgICBGT1IgVkFMVUVTIEZS T00gKDEpIHRvICgxNTAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NS RUFURSBUQUJMRSBwdG1pc21hdGNoYiBQQVJUSVRJT04gT0YgcHRtaXNtYXRjaAorICAgIEZPUiBW QUxVRVMgRlJPTSAoMTUwMSkgdG8gKDMwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0g ZmFsc2UpOworSU5TRVJUIElOVE8gcHRtaXNtYXRjaCAoaWQsIGRpbW0sIHZhbG0pCisJU0VMRUNU IGcsICd5ZXQgYW5vdGhlciB0ZXh0ICcgfHwgZywgKGcgJSAyKSArIDEKKwkgIEZST00gZ2VuZXJh dGVfc2VyaWVzKDEsMzAwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIHB0bWlzbWF0Y2g7CisKK0VYUExB SU4gKFBMQU5fQURWSUNFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHB0MSwgcHQyLCBwdDMg V0hFUkUgcHQxLmlkID0gcHQyLmlkIEFORCBwdDIuaWQgPSBwdDMuaWQKKyAgIEFORCB2YWwxID0g MSBBTkQgdmFsMiA9IDEgQU5EIHZhbDMgPSAxOworCistLSBTdXBwcmVzcyBwYXJ0aXRpb253aXNl IGpvaW4sIG9yIGRvIGl0IGp1c3QgcGFydGlhbGx5LgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ1BBUlRJVElPTldJU0UocHQxIHB0MiBwdDMpJzsKK0VYUExBSU4g KFBMQU5fQURWSUNFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHB0MSwgcHQyLCBwdDMgV0hF UkUgcHQxLmlkID0gcHQyLmlkIEFORCBwdDIuaWQgPSBwdDMuaWQKKyAgIEFORCB2YWwxID0gMSBB TkQgdmFsMiA9IDEgQU5EIHZhbDMgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdQQVJUSVRJT05XSVNFKChwdDEgcHQyKSBwdDMpJzsKK0VYUExBSU4gKFBMQU5fQURWSUNF LCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHB0MSwgcHQyLCBwdDMgV0hFUkUgcHQxLmlkID0g cHQyLmlkIEFORCBwdDIuaWQgPSBwdDMuaWQKKyAgIEFORCB2YWwxID0gMSBBTkQgdmFsMiA9IDEg QU5EIHZhbDMgPSAxOworQ09NTUlUOworCistLSBDYW4ndCBmb3JjZSBhIHBhcnRpdGlvbndpc2Ug am9pbiB3aXRoIGEgbWlzbWF0Y2hlZCB0YWJsZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdQQVJUSVRJT05XSVNFKChwdDEgcHRtaXNtYXRjaCkpJzsKK0VYUExB SU4gKFBMQU5fQURWSUNFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHB0MSwgcHRtaXNtYXRj aCBXSEVSRSBwdDEuaWQgPSBwdG1pc21hdGNoLmlkOworQ09NTUlUOworCistLSBGb3JjZSBqb2lu IG9yZGVyIGZvciBhIHBhcnRpY3VsYXIgYnJhbmNoIG9mIHRoZSBwYXJ0aXRpb253aXNlIGpvaW4g d2l0aAorLS0gYW5kIHdpdGhvdXQgbWVudGlvbmluZyB0aGUgc2NoZW1hIG5hbWUuCitCRUdJTjsK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSk9JTl9PUkRFUihwdDMvcHVibGlj LnB0M2EgcHQyL3B1YmxpYy5wdDJhIHB0MS9wdWJsaWMucHQxYSknOworRVhQTEFJTiAoUExBTl9B RFZJQ0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcHQxLCBwdDIsIHB0MyBXSEVSRSBwdDEu aWQgPSBwdDIuaWQgQU5EIHB0Mi5pZCA9IHB0My5pZAorICAgQU5EIHZhbDEgPSAxIEFORCB2YWwy ID0gMSBBTkQgdmFsMyA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0pP SU5fT1JERVIocHQzL3B0M2EgcHQyL3B0MmEgcHQxL3B0MWEpJzsKK0VYUExBSU4gKFBMQU5fQURW SUNFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHB0MSwgcHQyLCBwdDMgV0hFUkUgcHQxLmlk ID0gcHQyLmlkIEFORCBwdDIuaWQgPSBwdDMuaWQKKyAgIEFORCB2YWwxID0gMSBBTkQgdmFsMiA9 IDEgQU5EIHZhbDMgPSAxOworQ09NTUlUOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2Fk dmljZS9zcWwvc2Nhbi5zcWwgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9zY2FuLnNxbApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMjU0MTZhNzVmNDYKLS0tIC9k ZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9zY2FuLnNxbApAQCAtMCww ICsxLDE5NSBAQAorTE9BRCAncGdfcGxhbl9hZHZpY2UnOworU0VUIG1heF9wYXJhbGxlbF93b3Jr ZXJzX3Blcl9nYXRoZXIgPSAwOworU0VUIHNlcV9wYWdlX2Nvc3QgPSAwLjE7CitTRVQgcmFuZG9t X3BhZ2VfY29zdCA9IDAuMTsKK1NFVCBjcHVfdHVwbGVfY29zdCA9IDA7CitTRVQgY3B1X2luZGV4 X3R1cGxlX2Nvc3QgPSAwOworCitDUkVBVEUgVEFCTEUgc2Nhbl90YWJsZSAoYSBpbnQgcHJpbWFy eSBrZXksIGIgdGV4dCkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNF UlQgSU5UTyBzY2FuX3RhYmxlCisJU0VMRUNUIGcsICdzb21lIHRleHQgJyB8fCBnIEZST00gZ2Vu ZXJhdGVfc2VyaWVzKDEsIDEwMDAwMCkgZzsKK0NSRUFURSBJTkRFWCBzY2FuX3RhYmxlX2IgT04g c2Nhbl90YWJsZSBVU0lORyBicmluIChiKTsKK1ZBQ1VVTSBBTkFMWVpFIHNjYW5fdGFibGU7CisK Ky0tIFNlcXVlbnRpYWwgc2NhbgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VM RUNUICogRlJPTSBzY2FuX3RhYmxlOworCistLSBJbmRleCBzY2FuCitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisK Ky0tIEluZGV4LW9ubHkgc2NhbgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VM RUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworCistLSBCaXRtYXAgaGVhcCBzY2Fu CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFi bGUKKwlXSEVSRSBiID4gJ3NvbWUgdGV4dCA4JzsKKworLS0gVElEIHNjYW4KK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBjdGlk ID0gJygwLDEpJzsKKworLS0gVElEIHJhbmdlIHNjYW4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZQorCVdIRVJFIGN0aWQgPiAnKDEsMSkn IEFORCBjdGlkIDwgJygyLDEpJzsKKworLS0gVHJ5IGZvcmNpbmcgZWFjaCBvZiBvdXIgdGVzdCBx dWVyaWVzIHRvIHVzZSB0aGUgc2NhbiB0eXBlIHRoZXkKKy0tIHdhbnRlZCB0byB1c2UgYW55d2F5 LiBUaGlzIHNob3VsZCBzdWNjZWVkLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJ1NFUV9TQ0FOKHNjYW5fdGFibGUpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZTsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxl IFdIRVJFIGEgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9P TkxZX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpIFNFTEVDVCBhIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKK1NF VCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnQklUTUFQX0hFQVBfU0NBTihzY2FuX3Rh YmxlIHNjYW5fdGFibGVfYiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VM RUNUICogRlJPTSBzY2FuX3RhYmxlCisJV0hFUkUgYiA+ICdzb21lIHRleHQgOCc7CitTRVQgTE9D QUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1RJRF9TQ0FOKHNjYW5fdGFibGUpJzsKK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVS RSBjdGlkID0gJygwLDEpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVD VCAqIEZST00gc2Nhbl90YWJsZQorCVdIRVJFIGN0aWQgPiAnKDEsMSknIEFORCBjdGlkIDwgJygy LDEpJzsKK0NPTU1JVDsKKworLS0gVHJ5IHRvIGZvcmNlIGEgZnVsbCBzY2FuIG9mIHRoZSB0YWJs ZSB0byB1c2Ugc29tZSBvdGhlciBzY2FuIHR5cGUuIEFsbAorLS0gb2YgdGhlc2Ugd2lsbCBmYWls LiBBbiBpbmRleCBzY2FuIG9yIGJpdG1hcCBoZWFwIHNjYW4gY291bGQgcG90ZW50aWFsbHkKKy0t IGdlbmVyYXRlIHRoZSBjb3JyZWN0IGFuc3dlciwgYnV0IHRoZSBwbGFubmVyIGRvZXMgbm90IGV2 ZW4gY29uc2lkZXIgdGhlc2UKKy0tIHBvc3NpYmlsaXRpZXMgZHVlIHRvIHRoZSBsYWNrIG9mIGEg V0hFUkUgY2xhdXNlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J0lOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZTsKK1NFVCBMT0NBTCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90 YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBG Uk9NIHNjYW5fdGFibGU7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0JJVE1B UF9IRUFQX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZTsKK1NFVCBMT0NBTCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnVElEX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlOworQ09NTUlU OworCistLSBUcnkgYWdhaW4gdG8gZm9yY2UgaW5kZXggdXNlLiBUaGlzIHNob3VsZCBub3cgc3Vj Y2VlZCBmb3IgdGhlIElOREVYX1NDQU4KKy0tIGFuZCBCSVRNQVBfSEVBUF9TQ0FOLCBidXQgdGhl IElOREVYX09OTFlfU0NBTiBjYW4ndCBiZSBmb3JjZWQgYmVjYXVzZSB0aGUKKy0tIHF1ZXJ5IGZl dGNoZXMgY29sdW1ucyBub3QgaW5jbHVkZWQgaW4gdGhlIGluZGV4LgorQkVHSU47CitTRVQgTE9D QUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3Rh YmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZS T00gc2Nhbl90YWJsZSBXSEVSRSBhID4gMDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBM QUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hF UkUgYSA+IDA7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0JJVE1BUF9IRUFQ X1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwg UExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID4gMDsKK0NPTU1J VDsKKworLS0gV2UgY2FuIGZvcmNlIGEgcHJpbWFyeSBrZXkgbG9va3VwIHRvIHVzZSBhIHNlcXVl bnRpYWwgc2NhbiwgYnV0IHdlCistLSBjYW4ndCBmb3JjZSBpdCB0byB1c2UgYW4gaW5kZXgtb25s eSBzY2FuIChkdWUgdG8gdGhlIGNvbHVtbiBsaXN0KQorLS0gb3IgYSBUSUQgc2NhbiAoZHVlIHRv IHRoZSBhYnNlbmNlIG9mIGEgVElEIHF1YWwpLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHNjYW5fdGFibGUpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKK1NF VCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFi bGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBT RUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ1RJRF9TQ0FOKHNjYW5fdGFibGUpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKK0NP TU1JVDsKKworLS0gV2UgY2FuIGZvcmNpYmx5IGRvd25ncmFkZSBhbiBpbmRleC1vbmx5IHNjYW4g dG8gYW4gaW5kZXggc2NhbiwgYnV0IHdlIGNhbid0CistLSBmb3JjZSB0aGUgdXNlIG9mIGFuIGlu ZGV4IHRoYXQgdGhlIHBsYW5uZXIgdGhpbmtzIGlzIGluYXBwbGljYWJsZS4KK0JFR0lOOworU0VU IExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nh bl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1Qg KiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KSc7 CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFi bGUgV0hFUkUgYSA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVY X1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX2IpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKK0NPTU1JVDsK KworLS0gV2UgY2FuIGZvcmNlIHRoZSB1c2Ugb2YgYSBzZXF1ZW50aWFsIHNjYW4gaW4gcGxhY2Ug b2YgYSBiaXRtYXAgaGVhcCBzY2FuLAorLS0gYnV0IGEgcGxhaW4gaW5kZXggc2NhbiBvbiBhIEJS SU4gaW5kZXggaXMgbm90IHBvc3NpYmxlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHNjYW5fdGFibGUpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwg UExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZQorCVdIRVJFIGIgPiAnc29tZSB0 ZXh0IDgnOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNj YW5fdGFibGUgc2Nhbl90YWJsZV9iKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitDT01NSVQ7CisKKy0tIFdl IGNhbiBmb3JjZSB0aGUgdXNlIG9mIGEgc2VxdWVudGlhbCBzY2FuIHJhdGhlciB0aGFuIGEgVElE IHNjYW4gb3IKKy0tIFRJRCByYW5nZSBzY2FuLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHNjYW5fdGFibGUpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBjdGlkID0gJygw LDEpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nh bl90YWJsZQorCVdIRVJFIGN0aWQgPiAnKDEsMSknIEFORCBjdGlkIDwgJygyLDEpJzsKK0NPTU1J VDsKKworLS0gVGVzdCBtb3JlIGNvbXBsZXggc2NlbmFyaW9zIHdpdGggaW5kZXggc2NhbnMuCitC RUdJTjsKKy0tIFNob3VsZCBzdGlsbCB3b3JrIGlmIHdlIG1lbnRpb24gdGhlIHNjaGVtYS4KK1NF VCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1 YmxpYy5zY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0Up IFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKy0tIEJ1dCBub3QgaWYgd2Ug bWVudGlvbiB0aGUgd3Jvbmcgc2NoZW1hLgorU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgY2lsYnVwLnNjYW5fdGFibGVfcGtleSknOworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdI RVJFIGEgPSAxOworLS0gSXQncyBPSyB0byByZXBlYXQgdGhlIHNhbWUgYWR2aWNlLgorU0VUIExP Q0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90 YWJsZV9wa2V5IHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7Cist LSBCdXQgaXQgZG9lc24ndCB3b3JrIGlmIHRoZSBpbmRleCB0YXJnZXQgaXMgZXZlbiBub3Rpb25h bGx5IGRpZmZlcmVudC4KK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhf U0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSBzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3Rh YmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZS T00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKK0NPTU1JVDsKKworLS0gVGVzdCBhc3NvcnRlZCBp bmNvcnJlY3QgYWR2aWNlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ1NFUV9TQ0FOKG5vdGhpbmcpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0Up IFNFTEVDVCBhIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKK1NFVCBMT0NBTCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihub3RoaW5nIHdoYXRzb2V2ZXIpJzsKK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCBhIEZST00gc2Nhbl90YWJsZSBXSEVS RSBhID0gMTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihz Y2FuX3RhYmxlIGJvZ3VzKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxF Q1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ0lOREVYX09OTFlfU0NBTihub3RoaW5nIHdoYXRzb2V2ZXIpJzsKK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCBhIEZST00gc2Nhbl90YWJsZSBXSEVS RSBhID0gMTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfT05MWV9T Q0FOKHNjYW5fdGFibGUgYm9ndXMpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0Up IFNFTEVDVCBhIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKK0NPTU1JVDsKKworLS0gVGVz dCBvdXIgYWJpbGl0eSB0byByZWZlciB0byBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgdGhlIHNhbWUg YWxpYXMuCitCRUdJTjsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1Qg KiBGUk9NIChnZW5lcmF0ZV9zZXJpZXMoMSwxMCkgZyBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9O IGcgPSBzLmEpIHgKKyAgICBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmE7CitTRVQg TE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHMpJzsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChnZW5lcmF0ZV9zZXJpZXMoMSwx MCkgZyBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmEpIHgKKyAgICBMRUZUIEpPSU4g c2Nhbl90YWJsZSBzIE9OIGcgPSBzLmE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ1NFUV9TQ0FOKHMjMiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NF TEVDVCAqIEZST00gKGdlbmVyYXRlX3NlcmllcygxLDEwKSBnIExFRlQgSk9JTiBzY2FuX3RhYmxl IHMgT04gZyA9IHMuYSkgeAorICAgIExFRlQgSk9JTiBzY2FuX3RhYmxlIHMgT04gZyA9IHMuYTsK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4ocykgU0VRX1NDQU4o cyMyKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAo Z2VuZXJhdGVfc2VyaWVzKDEsMTApIGcgTEVGVCBKT0lOIHNjYW5fdGFibGUgcyBPTiBnID0gcy5h KSB4CisgICAgTEVGVCBKT0lOIHNjYW5fdGFibGUgcyBPTiBnID0gcy5hOworQ09NTUlUOworCist LSBUZXN0IG91ciBhYmlsaXR5IHRvIHJlZmVyIHRvIHNjYW5zIHdpdGhpbiBhIHN1YnF1ZXJ5Lgor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKFNFTEVDVCAq IEZST00gc2Nhbl90YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNFVCAwKSB4OworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nhbl90 YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNFVCAwKTsKK0JFR0lOOworLS0gU2hvdWxkIG5vdCBtYXRj aC4KK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4ocyknOworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKFNFTEVDVCAqIEZS T00gc2Nhbl90YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNFVCAwKSB4OworRVhQTEFJTiAoQ09TVFMg T0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nhbl90YWJs ZSBzIFdIRVJFIGEgPSAxIE9GRlNFVCAwKTsKKy0tIFNob3VsZCBtYXRjaCBmaXJzdCBxdWVyeSBv bmx5LgorU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzQHgpJzsK K0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChTRUxFQ1Qg KiBGUk9NIHNjYW5fdGFibGUgcyBXSEVSRSBhID0gMSBPRkZTRVQgMCkgeDsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChTRUxFQ1QgKiBGUk9NIHNjYW5f dGFibGUgcyBXSEVSRSBhID0gMSBPRkZTRVQgMCk7CistLSBTaG91bGQgbWF0Y2ggc2Vjb25kIHF1 ZXJ5IG9ubHkuCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHNA dW5uYW1lZF9zdWJxdWVyeSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NF TEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNF VCAwKSB4OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00g KFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNFVCAwKTsKK0NPTU1J VDsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3N5bnRheC5zcWwgYi9j b250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9zeW50YXguc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwLi40MjlmNDY3OTgxOQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRy aWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3N5bnRheC5zcWwKQEAgLTAsMCArMSw2MSBAQAorTE9BRCAn cGdfcGxhbl9hZHZpY2UnOworCistLSBBbiBlbXB0eSBzdHJpbmcgaXMgYWxsb3dlZC4gRW1wdHkg dGFyZ2V0IGxpc3RzIGFyZSBhbGxvd2VkIGZvciBtb3N0IGFkdmljZQorLS0gdGFncywgYnV0IG5v dCBmb3IgSk9JTl9PUkRFUi4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnJzsKK0VYUExB SU4gU0VMRUNUIDE7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKCknOwor RVhQTEFJTiBTRUxFQ1QgMTsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTkVTVEVEX0xP T1BfUExBSU4oKSc7CitFWFBMQUlOIFNFTEVDVCAxOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdKT0lOX09SREVSKCknOworCistLSBUZXN0IGFzc29ydGVkIHZhcmlhdGlvbnMgaW4gY2Fw aXRhbGl6YXRpb24sIHdoaXRlc3BhY2UsIGFuZCB3aGljaCBwYXJ0cyBvZgorLS0gdGhlIHJlbGF0 aW9uIGlkZW50aWZpZXIgYXJlIGluY2x1ZGVkLiBUaGVzZSBzaG91bGQgYWxsIHdvcmsuCitTRVQg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHgpJzsKK0VYUExBSU4gU0VMRUNUIDE7 CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ3NlcV9zY2FuKHhAeSknOworRVhQTEFJTiBT RUxFQ1QgMTsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX3NjYW4oeCMyKSc7CitF WFBMQUlOIFNFTEVDVCAxOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTiAo eC95KSc7CitFWFBMQUlOIFNFTEVDVCAxOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICcg IFNFUV9TQ0FOICggeCAvIHkgLiB6ICkgICc7CitFWFBMQUlOIFNFTEVDVCAxOworU0VUIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTigieCIjMi8ieSIuInoiQCJ0IiknOworRVhQTEFJ TiBTRUxFQ1QgMTsKKworLS0gU3ludGF4IGVycm9ycy4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnU0VRVUVOVElBTF9TQ0FOKHgpJzsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn U0VRX1NDQU4nOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTignOworU0VU IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTigiJzsKK1NFVCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnU0VRX1NDQU4oIiIpJzsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn U0VRX1NDQU4oImEiJzsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oIyc7 CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJygpJzsKK1NFVCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnMTIzJzsKKworLS0gTGVnYWwgY29tbWVudHMuCitTRVQgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJy8qKi8nOworRVhQTEFJTiBTRUxFQ1QgMTsKK1NFVCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnSEFTSF9KT0lOKF8pLyoqKi8nOworRVhQTEFJTiBTRUxFQ1QgMTsKK1NFVCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnLyogY29tbWVudCAqLyBIQVNIX0pPSU4oLyp4Ki95KSc7CitF WFBMQUlOIFNFTEVDVCAxOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICcvKiBjb21tZW50 ICovIEhBU0hfSk9JTih5Ly8qeCoveiknOworRVhQTEFJTiBTRUxFQ1QgMTsKKworLS0gVW50ZXJt aW5hdGVkIGNvbW1lbnRzLgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICcvKic7CitTRVQg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0pPSU5fT1JERVIoImZPTyIpIC8qIG9vcHMnOworCist LSBOZXN0ZWQgY29tbWVudHMgYXJlIG5vdCBzdXBwb3J0ZWQsIHNvIHRoZSBmaXJzdCBvZiB0aGVz ZSBpcyBsZWdhbCBhbmQKKy0tIHRoZSBzZWNvbmQgaXMgbm90LgorU0VUIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICcvKi8qLyc7CitFWFBMQUlOIFNFTEVDVCAxOworU0VUIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICcvKi8qIHN0dWZmICovKi8nOworCistLSBGb3JlaWduIGpvaW4gcmVxdWlyZXMg bXVsdGlwbGUgcmVsYXRpb24gaWRlbnRpZmllcnMuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ0ZPUkVJR05fSk9JTihhKSc7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0ZPUkVJ R05fSk9JTigoYSkpJzsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvdC8wMDFf cmVncmVzcy5wbCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvdC8wMDFfcmVncmVzcy5wbApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNWY3NTg0YzNhMDIKLS0tIC9kZXYv bnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3QvMDAxX3JlZ3Jlc3MucGwKQEAgLTAs MCArMSwxNDcgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDIxLTIwMjUsIFBvc3RncmVTUUwgR2xvYmFs IERldmVsb3BtZW50IEdyb3VwCisKKyMgUnVuIHRoZSBjb3JlIHJlZ3Jlc3Npb24gdGVzdHMgdW5k ZXIgcGdfcGxhbl9hZHZpY2UgdG8gY2hlY2sgZm9yIHByb2JsZW1zLgordXNlIHN0cmljdDsKK3Vz ZSB3YXJuaW5ncyBGQVRBTCA9PiAnYWxsJzsKKwordXNlIEN3ZCAgICAgICAgICAgIHF3KGFic19w YXRoKTsKK3VzZSBGaWxlOjpCYXNlbmFtZSBxdyhkaXJuYW1lKTsKKwordXNlIFBvc3RncmVTUUw6 OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6 TW9yZTsKKworIyBJbml0aWFsaXplIHRoZSBwcmltYXJ5IG5vZGUKK215ICRub2RlID0gUG9zdGdy ZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdtYWluJyk7Ciskbm9kZS0+aW5pdCgpOworCisjIFNl dCB1cCBvdXIgZGVzaXJlZCBjb25maWd1cmF0aW9uLgorIworIyBXZSBydW4gd2l0aCBwZ19wbGFu X2FkdmljZS5zaGFyZWRfY29sbGVjdGlvbl9saW1pdCBzZXQgdG8gZW5zdXJlIHRoYXQgdGhlCisj IHBsYW4gdHJlZSB3YWxrZXIgY29kZSBydW5zIGFnYWluc3QgZXZlcnkgcXVlcnkgaW4gdGhlIHJl Z3Jlc3Npb24gdGVzdHMuIElmCisjIHdlJ3JlIHVuYWJsZSB0byBwcm9wZXJseSBhbmFseXplIGFu eSBvZiB0aG9zZSBwbGFuIHRyZWVzLCB0aGlzIHRlc3Qgc2hvdWxkIGZhaWwuCisjCisjIFdlIHNl dCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgdG8gYW4gYWR2aWNlIHN0cmluZyB0aGF0IHdpbGwgY2F1 c2UgdGhlIGFkdmljZQorIyB0cm92ZSB0byBiZSBwb3B1bGF0ZWQgd2l0aCBhIGZldyBlbnRyaWVz IG9mIHZhcmlvdXMgc29ydHMsIGJ1dCB3aGljaCB3ZSBkbworIyBub3QgZXhwZWN0IHRvIG1hdGNo IGFueXRoaW5nIGluIHRoZSByZWdyZXNzaW9uIHRlc3QgcXVlcmllcy4gVGhpcyB3YXksIHRoZQor IyBwbGFubmVyIGhvb2tzIHdpbGwgYmUgY2FsbGVkLCBpbXByb3ZpbmcgY29kZSBjb3ZlcmFnZSwg YnV0IG5vIHBsYW5zIHNob3VsZAorIyBhY3R1YWxseSBjaGFuZ2UuCisjCisjIHBnX3BsYW5fYWR2 aWNlLmFsd2F5c19leHBsYWluX3N1cHBsaWVkX2FkdmljZT1mYWxzZSBpcyBuZWVkZWQgdG8gYXZv aWQgYnJlYWtpbmcKKyMgcmVncmVzc2lvbiB0ZXN0IHF1ZXJpZXMgdGhhdCB1c2UgRVhQTEFJTi4g SW4gdGhlIHJlYWwgd29ybGQsIGl0IHNlZW1zIGxpa2UKKyMgdXNlcnMgd2lsbCB3YW50IEVYUExB SU4gb3V0cHV0IHRvIHNob3cgc3VwcGxpZWQgYWR2aWNlIHNvIHRoYXQgaXQncyBjbGVhcgorIyB3 aGV0aGVyIG5vcm1hbCBwbGFubmVyIGJlaGF2aW9yIGhhcyBiZWVuIGFsdGVyZWQsIGJ1dCBoZXJl IHRoYXQncyB1bmRlc2lyYWJsZS4KKyRub2RlLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25m JywgPDxFT00pOworcGdfcGxhbl9hZHZpY2Uuc2hhcmVkX2NvbGxlY3Rpb25fbGltaXQ9MTAwMDAw MAorc2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzPXBnX3BsYW5fYWR2aWNlCitwZ19wbGFuX2Fkdmlj ZS5hZHZpY2U9J1NFUV9TQ0FOKGVudGlyZWx5X2ZpY3RpdGlvdXMpIEhBU0hfSk9JTih0b3RhbF9m YWJyaWNhdGlvbikgR0FUSEVSKGNvbXBsZXRlbHlfaW1hZ2luYXJ5KScKK3BnX3BsYW5fYWR2aWNl LmFsd2F5c19leHBsYWluX3N1cHBsaWVkX2FkdmljZT1mYWxzZQorRU9NCiskbm9kZS0+c3RhcnQ7 CisKK215ICRzcmNkaXIgPSBhYnNfcGF0aCgiLi4vLi4iKTsKKworIyAtLWRscGF0aCBpcyBuZWVk ZWQgdG8gYmUgYWJsZSB0byBmaW5kIHRoZSBsb2NhdGlvbiBvZiByZWdyZXNzLnNvCisjIGFuZCBh bnkgbGlicmFyaWVzIHRoZSByZWdyZXNzaW9uIHRlc3RzIHJlcXVpcmUuCitteSAkZGxwYXRoID0g ZGlybmFtZSgkRU5We1JFR1JFU1NfU0hMSUJ9KTsKKworIyAtLW91dHB1dGRpciBwb2ludHMgdG8g dGhlIHBhdGggd2hlcmUgdG8gcGxhY2UgdGhlIG91dHB1dCBmaWxlcy4KK215ICRvdXRwdXRkaXIg PSAkUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM6OnRtcF9jaGVjazsKKworIyAtLWlucHV0ZGlyIHBv aW50cyB0byB0aGUgcGF0aCBvZiB0aGUgaW5wdXQgZmlsZXMuCitteSAkaW5wdXRkaXIgPSAiJHNy Y2Rpci9zcmMvdGVzdC9yZWdyZXNzIjsKKworIyBSdW4gdGhlIHRlc3RzLgorbXkgJHJjID0KKyAg c3lzdGVtKCRFTlZ7UEdfUkVHUkVTU30gLiAiICIKKwkgIC4gIi0tYmluZGlyPSAiCisJICAuICIt LWRscGF0aD1cIiRkbHBhdGhcIiAiCisJICAuICItLWhvc3Q9IiAuICRub2RlLT5ob3N0IC4gIiAi CisJICAuICItLXBvcnQ9IiAuICRub2RlLT5wb3J0IC4gIiAiCisJICAuICItLXNjaGVkdWxlPSRz cmNkaXIvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZSAiCisJICAuICItLW1heC1j b25jdXJyZW50LXRlc3RzPTIwICIKKwkgIC4gIi0taW5wdXRkaXI9XCIkaW5wdXRkaXJcIiAiCisJ ICAuICItLW91dHB1dGRpcj1cIiRvdXRwdXRkaXJcIiIpOworCisjIER1bXAgb3V0IHRoZSByZWdy ZXNzaW9uIGRpZmZzIGZpbGUsIGlmIHRoZXJlIGlzIG9uZQoraWYgKCRyYyAhPSAwKQoreworCW15 ICRkaWZmcyA9ICIkb3V0cHV0ZGlyL3JlZ3Jlc3Npb24uZGlmZnMiOworCWlmICgtZSAkZGlmZnMp CisJeworCQlwcmludCAiPT09IGR1bXBpbmcgJGRpZmZzID09PVxuIjsKKwkJcHJpbnQgc2x1cnBf ZmlsZSgkZGlmZnMpOworCQlwcmludCAiPT09IEVPRiA9PT1cbiI7CisJfQorfQorCisjIFJlcG9y dCByZXN1bHRzCitpcygkcmMsIDAsICdyZWdyZXNzaW9uIHRlc3RzIHBhc3MnKTsKKworIyBDcmVh dGUgdGhlIGV4dGVuc2lvbiBzbyB3ZSBjYW4gYWNjZXNzIHRoZSBjb2xsZWN0b3IKKyRub2RlLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgJ0NSRUFURSBFWFRFTlNJT04gcGdfcGxhbl9hZHZpY2UnKTsK KworIyBWZXJpZnkgdGhhdCBhIGxhcmdlIGFtb3VudCBvZiBhZHZpY2Ugd2FzIGNvbGxlY3RlZAor bXkgJGFsbF9xdWVyeV9jb3VudCA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgPDxFT00p OworU0VMRUNUIENPVU5UKCopIEZST00gcGdfZ2V0X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKCk7 CitFT00KK2NtcF9vaygkYWxsX3F1ZXJ5X2NvdW50LCAnPicsIDIwMDAwLCAiY29waW91cyBhZHZp Y2UgY29sbGVjdGVkIik7CisKKyMgVmVyaWZ5IHRoYXQgbG90cyBvZiBkaWZmZXJlbnQgYWR2aWNl IHN0cmluZ3Mgd2VyZSBjb2xsZWN0ZWQKK215ICRkaXN0aW5jdF9xdWVyeV9jb3VudCA9ICRub2Rl LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgPDxFT00pOworU0VMRUNUIENPVU5UKCopIEZST00KKwko U0VMRUNUIERJU1RJTkNUIGFkdmljZSBGUk9NIHBnX2dldF9jb2xsZWN0ZWRfc2hhcmVkX2Fkdmlj ZSgpKTsKK0VPTQorY21wX29rKCRkaXN0aW5jdF9xdWVyeV9jb3VudCwgJz4nLCAzMDAwLCAiZGl2 ZXJzZSBhZHZpY2UgY29sbGVjdGVkIik7CisKKyMgV2Ugd2FudCB0byB0ZXN0IGZvciB0aGUgcHJl c2VuY2Ugb2Ygb3VyIGtub3duIHRhZ3MgaW4gdGhlIGNvbGxlY3RlZCBhZHZpY2UuCisjIFB1dCBh bGwgdGFncyBpbnRvIHRoZSBoYXNoIHRoYXQgZm9sbG93czsgbWFwIGFueSB0YWdzIHRoYXQgYXJl bid0IHRlc3RlZAorIyBieSB0aGUgY29yZSByZWdyZXNzaW9uIHRlc3RzIHRvIDAsIGFuZCBvdGhl cnMgdG8gMS4KK215ICV0YWdfbWFwID0gKAorCUJJVE1BUF9IRUFQX1NDQU4gPT4gMSwKKwlGT1JF SUdOX0pPSU4gPT4gMCwKKwlHQVRIRVIgPT4gMSwKKwlHQVRIRVJfTUVSR0UgPT4gMSwKKwlIQVNI X0pPSU4gPT4gMSwKKwlJTkRFWF9PTkxZX1NDQU4gPT4gMSwKKwlJTkRFWF9TQ0FOID0+IDEsCisJ Sk9JTl9PUkRFUiA9PiAxLAorCU1FUkdFX0pPSU5fTUFURVJJQUxJWkUgPT4gMSwKKwlNRVJHRV9K T0lOX1BMQUlOID0+IDEsCisJTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUgPT4gMSwKKwlORVNURURf TE9PUF9NRU1PSVpFID0+IDEsCisJTkVTVEVEX0xPT1BfUExBSU4gPT4gMSwKKwlOT19HQVRIRVIg PT4gMSwKKwlQQVJUSVRJT05XSVNFID0+IDEsCisJU0VNSUpPSU5fTk9OX1VOSVFVRSA9PiAxLAor CVNFTUlKT0lOX1VOSVFVRSA9PiAxLAorCVNFUV9TQ0FOID0+IDEsCisJVElEX1NDQU4gPT4gMSwK Kyk7Citmb3IgbXkgJHRhZyAoc29ydCBrZXlzICV0YWdfbWFwKQoreworCW15ICRjaGVja2l0ID0g JHRhZ19tYXB7JHRhZ307CisKKwkjIFNlYXJjaCBmb3IgdGhlIGdpdmVuIHRhZy4gVGhpcyBpcyBu b3QgZW50aXJlbHkgcm9idXN0OiBpdCBjb3VsZCBnZXQgdGhyb3duCisJIyBvZmYgYnkgYSB0YWJs ZSBhbGlhcyBzdWNoIGFzICJGT1JFSUdOX0pPSU4oIiwgYnV0IHRoYXQgcHJvYmFibHkgd29uJ3QK KwkjIGhhcHBlbiBpbiB0aGUgY29yZSByZWdyZXNzaW9uIHRlc3RzLgorCW15ICR0YWdfY291bnQg PSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIDw8RU9NKTsKK1NFTEVDVCBDT1VOVCgqKSBG Uk9NIHBnX2dldF9jb2xsZWN0ZWRfc2hhcmVkX2FkdmljZSgpCisJV0hFUkUgYWR2aWNlIExJS0Ug JyUkdGFnKCUnCitFT00KKworCSMgQ2hlY2sgdGhhdCB0aGUgdGFnIGdvdCBhIG5vbi10cml2aWFs IGFtb3VudCBvZiB1c2UsIHVubGVzcyB0b2xkIG90aGVyd2lzZS4KKwljbXBfb2soJHRhZ19jb3Vu dCwgJz4nLCAxMCwgIm11bHRpcGxlIHVzZXMgb2YgJHRhZyIpIGlmICRjaGVja2l0OworCisJIyBS ZWdhcmRsZXNzLCBub3RlIHRoZSBleGFjdCBjb3VudCBpbiB0aGUgbG9nLCBmb3IgaHVtYW4gY29u c3VtcHRpb24uCisJbm90ZSgiZm91bmQgJHRhZ19jb3VudCBhZHZpY2Ugc3RyaW5ncyBjb250YWlu aW5nICR0YWciKTsKK30KKworIyBUcmlnZ2VyIGEgcGFydGlhbCBjbGVhbnVwIG9mIHRoZSBzaGFy ZWQgYWR2aWNlIGNvbGxlY3RvciwgYW5kIHRoZW4gYSBmdWxsCisjIGNsZWFudXAuCiskbm9kZS0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsIDw8RU9NKTsKK1NFVCBwZ19wbGFuX2FkdmljZS5zaGFyZWRf Y29sbGVjdGlvbl9saW1pdD01MDA7CitTRUxFQ1QgKiBGUk9NIHBnX2NsZWFyX2NvbGxlY3RlZF9z aGFyZWRfYWR2aWNlKCk7CitFT00KKworZG9uZV90ZXN0aW5nKCk7CmRpZmYgLS1naXQgYS9zcmMv dG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVm cy5saXN0CmluZGV4IDkwMjA5NjAyZDQyLi42ZWViZjU3MzcxZSAxMDA2NDQKLS0tIGEvc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QKQEAgLTM5NjgsNiArMzk2OCw0NCBAQCBwZ191dWlkX3QKIHBnX3djaGFyCiBwZ193 Y2hhcl90YmwKIHBncF9hcm1vcl9oZWFkZXJzX3N0YXRlCitwZ3BhX2NvbGxlY3RlZF9hZHZpY2UK K3BncGFfYWR2aWNlX2l0ZW0KK3BncGFfYWR2aWNlX3RhZ190eXBlCitwZ3BhX2FkdmljZV90YXJn ZXQKK3BncGFfaWRlbnRpZmllcgorcGdwYV9pbmRleF90YXJnZXQKK3BncGFfaW5kZXhfdHlwZQor cGdwYV9pdG1fdHlwZQorcGdwYV9qb2luX2NsYXNzCitwZ3BhX2pvaW5fbWVtYmVyCitwZ3BhX2pv aW5fc3RhdGUKK3BncGFfam9pbl9zdHJhdGVneQorcGdwYV9qb2luX3Vucm9sbGVyCitwZ3BhX2xv Y2FsX2FkdmljZQorcGdwYV9sb2NhbF9hZHZpY2VfY2h1bmsKK3BncGFfb3V0cHV0X2NvbnRleHQK K3BncGFfcGxhbl93YWxrZXJfY29udGV4dAorcGdwYV9wbGFubmVyX3N0YXRlCitwZ3BhX3FmX3R5 cGUKK3BncGFfcXVlcnlfZmVhdHVyZQorcGdwYV9yaV9jaGVja2VyCitwZ3BhX3JpX2NoZWNrZXJf a2V5CitwZ3BhX3NjYW4KK3BncGFfc2Nhbl9zdHJhdGVneQorcGdwYV9zaGFyZWRfYWR2aWNlCitw Z3BhX3NoYXJlZF9hZHZpY2VfY2h1bmsKK3BncGFfc2hhcmVkX3N0YXRlCitwZ3BhX3NqX3VuaXF1 ZV9yZWwKK3BncGFfdGFyZ2V0X3R5cGUKK3BncGFfdHJvdmUKK3BncGFfdHJvdmVfZW50cnkKK3Bn cGFfdHJvdmVfZW50cnlfZWxlbWVudAorcGdwYV90cm92ZV9lbnRyeV9oYXNoCitwZ3BhX3Ryb3Zl X2VudHJ5X2tleQorcGdwYV90cm92ZV9sb29rdXBfdHlwZQorcGdwYV90cm92ZV9yZXN1bHQKK3Bn cGFfdHJvdmVfc2xpY2UKK3BncGFfdW5yb2xsZWRfam9pbgogcGdzb2NrZXQKIHBnc3FsX3RoaW5n X3QKIHBnc3NFbnRyeQotLSAKMi41MS4wCgo= --000000000000c84af706486e3644--