From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: passt.top; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: passt.top; dkim=pass (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=i2jN9iYP; dkim-atps=neutral Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by passt.top (Postfix) with ESMTPS id CDBFF5A0265 for ; Thu, 01 Oct 2026 15:16:21 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1790860580; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=lQgIXjWM30E3+RXirKkarx06Zz9xb+smfJxsyRgR42s=; b=i2jN9iYP3uCqhAJ1ezQFNpNWMrWq6ogUcKgVYrp2MZppdTGQ1Pi+ekKRhaLNcXryGsptJA G8qEhTG8DsaQrj5V85bU3hWhwDWRS4Lku2AF/ZVfJoeBzlG6Ihc0YMQH66Sroo/+zkr5mJ ISu4N2InVKOjrmAGFxUtLvK6I+D6r90= Received: from mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-333-fQ4jYyuSPGywtmtNOfMJow-1; Thu, 01 Oct 2026 09:16:17 -0400 X-MC-Unique: fQ4jYyuSPGywtmtNOfMJow-1 X-Mimecast-MFC-AGG-ID: fQ4jYyuSPGywtmtNOfMJow_1790860576 Received: from mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.111]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 5B7661954202 for ; Thu, 1 Oct 2026 13:16:16 +0000 (UTC) Received: from anskuma-thinkpadp1gen7.bengluru.csb (unknown [10.74.80.122]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 23A7018005B3; Thu, 1 Oct 2026 13:16:13 +0000 (UTC) From: Anshu Kumari To: sbrivio@redhat.com, passt-dev@passt.top Subject: [PATCH v7 3/7] dhcp: Add --dhcp-opt with option table and value parser Date: Thu, 1 Oct 2026 18:45:56 +0530 Message-ID: <20261001131602.653553-4-anskuma@redhat.com> In-Reply-To: <20261001131602.653553-1-anskuma@redhat.com> References: <20261001131602.653553-1-anskuma@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.111 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: l3NSOsh0YCVcgPtrvr8ti_PFK2NX_sU4bm4UiR1rMmw_1790860576 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Message-ID-Hash: UOO5HCDZK4ETP5UBU6WBRQC7ZTX53YQD X-Message-ID-Hash: UOO5HCDZK4ETP5UBU6WBRQC7ZTX53YQD X-MailFrom: anskuma@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: lvivier@redhat.com, anskuma@redhat.com X-Mailman-Version: 3.3.8 Precedence: list List-Id: Development discussion and patches for passt Archived-At: Archived-At: List-Archive: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: QWRkIGEgLS1kaGNwLW9wdCBDT0RFLFZBTFVFIGZsYWcgdGhhdCBzZXRzIGFueSBESENQIG9wdGlv biBieQ0KbnVtZXJpYyBjb2RlIHdpdGggdHlwZS1hd2FyZSBwYXJzaW5nIHBlciBSRkMgMjEzMi4N Cg0KQSB0eXBlIGxvb2t1cCB0YWJsZSBtYXBzIG9wdGlvbiBjb2RlcyB0byBSRkMgMjEzMiB2YWx1 ZSB0eXBlcw0KKElQdjQsIElQdjQgbGlzdCwgaW50ZWdlciwgc3RyaW5nKS4gIGRoY3Bfb3B0X3Bh cnNlKCkgY29udmVydHMNCkNMSSBzdHJpbmdzIHRvIGJpbmFyeSB3aXJlIGZvcm1hdDsgcGFyc2Vk IG9wdGlvbnMgYXJlIHN0b3JlZCBpbg0Kb3B0c1tdIGFuZCBpbmplY3RlZCBpbnRvIERIQ1AgcmVw bGllcy4gIE9wdGlvbnMgc2V0IHZpYSAtLWRoY3Atb3B0DQooT1BUX1VTRVIpIHRha2UgcHJpb3Jp dHkgb3ZlciBob3N0LWRlcml2ZWQgZGVmYXVsdHMgKE9QVF9ERUZBVUxUKS4NCg0KTGluazogaHR0 cHM6Ly9idWdzLnBhc3N0LnRvcC9zaG93X2J1Zy5jZ2k/aWQ9MTkyDQpTaWduZWQtb2ZmLWJ5OiBB bnNodSBLdW1hcmkgPGFuc2t1bWFAcmVkaGF0LmNvbT4NCi0tLQ0Kdjc6DQogIC0gUmVtb3ZlZCBj bGllbnQtb25seSBvcHRpb25zIDUwIChSZXF1ZXN0ZWQgSVApIGFuZCA1NyAoTWF4IE1lc3NhZ2Ug U2l6ZSkNCiAgICBmcm9tIGRoY3Bfb3B0X3R5cGVzW10NCiAgLSBTd2l0Y2hlZCBpbnRlZ2VyIHBh cnNpbmcgZnJvbSBzdHJ0b3VsKCkvc3RydG9sKCkgdG8gcGFyc2VfdW5zaWduZWQoKQ0KICAgIGZv ciBVSU5UOC9VSU5UMTYvVUlOVDMyIHR5cGVzDQogIC0gRml4ZWQgYWxpZ25tZW50OiB1c2UgaHRv bnMoKS9odG9ubCgpICsgbWVtY3B5KCkgaW5zdGVhZCBvZiBkaXJlY3QNCiAgICBwb2ludGVyIGNh c3RzIGZvciBVSU5UMTYvVUlOVDMyIGVuY29kaW5nLg0KICAtIFVzZWQgZXhwbGljaXQgT1BUX0RF RkFVTFQgY2hlY2sgaW5zdGVhZCBvZiAhPSBPUFRfVVNFUiB3aGVyZSB0aGUgY29uZGl0aW9uDQog ICAgYm9keSBkb2VzIG5vdCBzZXQgY29uZi4NCiAgLSBSZW1vdmVkIHVubmVjZXNzYXJ5IE9QVF9V U0VSIGd1YXJkIG9uIG9wdGlvbiAxMjENCiAgLSBDaGVja2VkIGluZXRfbnRvcCgpIHJldHVybiB2 YWx1ZSBpbiBkaGNwX29wdF90b19zdHIoKQ0KDQp2NjoNCiAgLSBkcm9wcGVkIG9wdGlvbiA1My4N CiAgLSBVc2VkIHBhcnNlX3Vuc2lnbmVkKCksIHBhcnNlX2xpdGVyYWwoKSwgcGFyc2VfaXB2NCgp DQogICAgZnJvbSBwYXJzZS5jIGluc3RlYWQgb2YgbWFudWFsIHN0cnRvdWwvaW5ldF9wdG9uLg0K ICAtIE1vdmVkIG9wdGlvbi1wYXJzaW5nIHZhcmlhYmxlcyBpbnRvIGNhc2UgMzQgYmxvY2sNCiAg ICBzY29wZS4NCiAgLSBVc2VkIGh0b25zKCkvaHRvbmwoKSBmb3IgaW50ZWdlciBlbmNvZGluZy4N CiAgLSBVc2VkIGFzc2VydCgpIGZvciBib3VuZGFyeSBjaGVja3MgaW4gZGhjcF9vcHRfdG9fc3Ry KCkuDQogIC0gVXNlZCBzbnByaW50ZigpIHdpdGggJS4qcyBmb3Igc3RyaW5nIGZvcm1hdHRpbmcg aW4NCiAgICBkaGNwX29wdF90b19zdHIoKS4NCiAgLSBVc2VkIHNpemVvZihzdHJ1Y3QgaW5fYWRk cikgaW5zdGVhZCBvZiBsaXRlcmFsIDQuDQogIC0gZGhjcF9vcHRfdG9fc3RyKCkgY2hlY2tzIE9Q VF9VTlNFVCBmb3IgYWxsIHN0YXRlcywNCiAgICBub3QganVzdCBPUFRfVVNFUi4NCiAgLSBBZGRl ZCBjdXJseSBicmFja2V0cyBmb3IgbXVsdGktbGluZSBjb25kaXRpb25hbHMuDQogIC0gRHJvcHBl ZCB0cmFpbGluZyBjb21tYSBhZnRlciBPUFRfREVGQVVMVCBpbg0KICAgIGluaXRpYWxpemVycyB0 byByZWR1Y2UgbGluZSBsZW5ndGguDQoNCnY1Og0KICAtIFJlbmFtZSBlbnVtIHZhbHVlczogSU5U OC9JTlQxNi9JTlQzMi9TSU5UMzIg4oaSIFVJTlQ4L1VJTlQxNi9VSU5UMzIvSU5UMzINCiAgLSBD aGFuZ2UgaW50IGxlbiB0byBzaXplX3QgbGVuIGluIGRoY3Bfb3B0X3BhcnNlKCksIHJlbW92ZSBp bnQgY2FzdHMNCiAgLSBNYWtlIGRoY3Bfb3B0X3BhcnNlKCkgc3RhdGljLCBhZGQgZGhjcF9zZXRf b3B0KCkgdG8gc3RvcmUgb3B0aW9ucyANCiAgICBkaXJlY3RseSBpbiBvcHRzW10gYXQgc3RhcnR1 cCBpbnN0ZWFkIG9mIGRvdWJsZS1wYXJzaW5nIHZpYSBjdHgtPmRoY3Bfb3B0cw0KICAtIEFkZCBP UFRfVVNFUiB0byBlbnVtIG9wdF9zdGF0ZSB0byBwcm90ZWN0IHVzZXIgb3B0aW9ucyBmcm9tIGJl aW5nDQogICAgb3ZlcndyaXR0ZW4gYnkgYnVpbHQtaW4gZGVmYXVsdHMNCiAgLSBBZGQgZGhjcF9v cHRfdG9fc3RyKCkgZm9yIGNvbmZfcHJpbnQoKSBkaXNwbGF5DQogIC0gUmVtb3ZlIGRoY3Bfb3B0 c1tdIGZyb20gc3RydWN0IGN0eCBpbiBwYXNzdC5oDQogIC0gUmVtb3ZlIGNvbmZfZGhjcF9vcHRp b24oKSB3cmFwcGVyIGZyb20gY29uZi5jDQoNCnY0Og0KICAtIFJlbmFtZWQgY3VzdG9tX29wdHMg dG8gZGhjcF9vcHRzLCAyNTYgZW50cmllcyBpbmRleGVkIGJ5IG9wdGlvbg0KICAgIGNvZGUsIHJl bW92ZWQgTUFYX0NVU1RPTV9ESENQX09QVFMgYW5kIGNvdW50IGZpZWxkLg0KICAtIENoYW5nZWQg c3RyIGJ1ZmZlciBmcm9tIDI1NiB0byAyNTUgYnl0ZXMuDQogIC0gTW92ZWQgZnVuY3Rpb24gdG8g Y29uZi5jIGFzIHN0YXRpYyBjb25mX2RoY3Bfb3B0aW9uKCksIHJlbmFtZWQNCiAgICBmcm9tIGRo Y3BfYWRkX29wdGlvbigpLg0KICAtIE1hZGUgZGhjcF9vcHRfcGFyc2UoKSBub24tc3RhdGljLCBk ZWNsYXJlZCBpbiBkaGNwLmgNCiAgLSBEcm9wcGVkIHZhbC9sZW4gZnJvbSBjdHggc3RydWN0OyBj b25mX2RoY3Bfb3B0aW9uKCkgdmFsaWRhdGVzDQogICAgd2l0aCB0ZW1wIGJ1ZmZlciwgZGhjcCgp IHBhcnNlcyBzdHIgZGlyZWN0bHkgaW50byBvcHRzW10gYXQNCiAgICByZXBseSB0aW1lLg0KICAt IFJlcGxhY2VkIHN0cnRva19yKCkgKyAyNTYtYnl0ZSBidWZmZXIgd2l0aCBzdHJjc3BuKCkgKw0K ICAgIElORVRfQUREUlNUUkxFTiBidWZmZXIuDQogIC0gQWRkZWQgREhDUF9PUFRfU0lOVDMyIGZv ciBvcHRpb24gMiAoVGltZSBPZmZzZXQpLCB1c2VzIHN0cnRvbCgpDQogICAgcGVyIFJGQyAyMTMy IFNlY3Rpb24gOC4yLg0KICAtIEFsbCBlcnJvcnMgaW4gZGhjcF9vcHRfcGFyc2UoKSByZXR1cm4g LTEsIHJlbW92ZWQgZGllKCkgY2FsbHM7DQogICAgY2FsbGVyIGhhbmRsZXMgZXJyb3IgbWVzc2Fn ZSBjb25zaXN0ZW50bHkuDQogIC0gUmVtb3ZlZCByZWR1bmRhbnQgIXNsZW4gY2hlY2sgaW4gREhD UF9PUFRfU1RSIGNhc2UuDQogIC0gT21pdHRlZCBleHBsaWNpdCBhcnJheSBzaXplIGZvciBkaGNw X29wdF90eXBlc1tdLCBhcnJheWRkZWQgYm91bmRzDQogICAgY2hlY2sgYmVmb3JlIGxvb2t1cC4N CiAgLSBBZGRlZCBlcnJubyA9IDAgKyBlcnJubyBjaGVjayBmb3Igc3RydG91bCgpIGluIGNhc2Ug MzQuDQogIC0gRml4ZWQgdXNhZ2UgdGV4dDogIlNldCBESENQIG9wdGlvbiBDT0RFIHRvIFZBTCIu DQogIC0gSW1wcm92ZWQgbWFuIHBhZ2U6IGFkZGVkIGZvcm1hdCBkZXNjcmlwdGlvbiBhbmQgZXhh bXBsZXMNCg0KdjM6DQogIC0gUmVwbGFjZWQgREhDUF9PUFRfSU5URUdFUiB3aXRoIHNlcGFyYXRl IERIQ1BfT1BUX0lOVDgvSU5UMTYvSU5UMzINCiAgICBlbnVtcywgcmVtb3ZlZCBkaGNwX29wdF9p bnRfd2lkdGhbXSBhcnJheS4NCiAgLSBTaGFyZWQgbG9naWMgYmV0d2VlbiBESENQX09QVF9JUFY0 IGFuZCBESENQX09QVF9JUFY0X0xJU1Qg4oCUIHBhcnNlDQogICAgYm90aCBhcyBsaXN0LCBlcnJv ciBpZiA+MSBpbiBzaW5nbGUgY2FzZS4NCiAgLSBBZGRlZCBlcnJubyA9IDAgYmVmb3JlIHN0cnRv dWwoKSBhbmQgY2hlY2sgYWZ0ZXIuDQogIC0gRml4ZWQgcmFuZ2UgY2hlY2s6IDFVTEwgPDwgKHdp ZHRoICogOCkgZm9yIGFsbCB3aWR0aHMgaW5jbHVkaW5nDQogICAgd2lkdGg9PTQuDQogIC0gc3Ry bmNweSDihpIgbWVtY3B5IGZvciBESENQX09QVF9TVFIuDQogIC0gTW92ZWQgZW51bSB0byBkaGNw LmMgc2luY2Ugbm90IHVzZWQgaW4gb3RoZXIgZmlsZXMuDQogIC0gUmVtb3ZlZCBvcHRpb25zIDU1 LCA2MSAoY2xpZW50LW9ubHkpLCAxMTkgKEROUyBjb21wcmVzc2lvbiwgdXNlDQogICAgLS1kaGNw LXNlYXJjaCBpbnN0ZWFkKSwgMzMgKElQIHBhaXJzIG5vdCBzdXBwb3J0ZWQpLg0KICAtIERIQ1Bf T1BUX1BBUlNFX0JVRiAxMDI0IOKGkiBjaGFyIHRtcFsyNTZdLg0KICAtIFVwZ3JhZGVkIGRoY3Bf YWRkX29wdGlvbigpIHRvIGNhbGwgZGhjcF9vcHRfcGFyc2UoKSBhbmQgcG9wdWxhdGUNCiAgICB2 YWxbXS9sZW4uDQogIC0gQWxpZ25lZCBhcnJheSBlbnRyaWVzIGZvciByZWFkYWJpbGl0eS4NCiAg LSBBZGRlZCB0YWIgYWZ0ZXIgQERIQ1BfT1BUX0lQVjRfTElTVDogaW4ga2VybmVsZG9jLg0KICAt IFJlamVjdCBlbXB0eSB2YWx1ZSBzdHJpbmdzIGJlZm9yZSBwYXJzaW5nDQogIC0gUmVqZWN0IGxl YWRpbmcvdHJhaWxpbmcvY29uc2VjdXRpdmUgY29tbWFzIGluIElQIGxpc3QgdmFsdWVzLg0KDQp2 MjoNCiAgLSBSZXBsYWNlZCBzdHJ1Y3QgbG9va3VwIHRhYmxlICsgZGhjcF9vcHRfdHlwZV9sb29r dXAoKSBmdW5jdGlvbiB3aXRoIGZsYXQgZGhjcF9vcHRfdHlwZXNbMjU2XSBhcnJheSBpbmRleGVk IGJ5IGNvZGUuDQogIC0gQ29uc29saWRhdGVkIERIQ1BfT1BUX1VJTlQ4L1VJTlQxNi9VSU5UMzIg aW50byBzaW5nbGUgREhDUF9PUFRfSU5URUdFUiB3aXRoIGRoY3Bfb3B0X2ludF93aWR0aFsyNTZd IHRhYmxlLg0KICAtIERyb3BwZWQgREhDUF9PUFRfUk9VVEVTIC8gb3B0aW9uIDEyMSBlbnRpcmVs eS4NCiAgLSBBZGRlZCBrZXJuZWxkb2MgZm9yIGVudW0gZGhjcF9vcHRfdHlwZSB2YWx1ZXMuDQog IC0gUmVtb3ZlZCBjdXJseSBicmFjZXMgZnJvbSBzd2l0Y2ggY2FzZXMsIGRlY2xhcmF0aW9ucyBi ZWZvcmUgc3dpdGNoLg0KICAtIEFkZGVkIG5ld2xpbmVzIGJlZm9yZSByZXR1cm4gc3RhdGVtZW50 cy4NCiAgLSBDaGFuZ2VkIElQIGxpc3QgZGVsaW1pdGVyIGZyb20gc3BhY2UgdG8gY29tbWEgKC0t ZGhjcC1vcHQgNiwxLjEuMS4xLDguOC44LjgpLg0KICAtIERlZmluZWQgREhDUF9PUFRfUEFSU0Vf QlVGIGNvbnN0YW50IGZvciBiYXJlIDEwMjQuDQogIC0gQWRkZWQgbGVuIGFuZCB2YWxbMjU1XSBm aWVsZHMgdG8gc3RydWN0IGhlcmUgKG1vdmVkIGZyb20gcGF0Y2ggMSkuDQogIC0gQWRkZWQga2Vy bmVsZG9jIGZvciBAY3VzdG9tX29wdHMubGVuIGFuZCBAY3VzdG9tX29wdHMudmFsLg0KICAtIFdp cmVkIGRoY3Bfb3B0X3BhcnNlKCkgaW50byBjYXNlIDMyICgtLWRoY3AtYm9vdCkgdG8gcG9wdWxh dGUgdmFsL2xlbi4NCi0tLQ0KIGNvbmYuYyAgfCAgMjcgKysrKy0NCiBkaGNwLmMgIHwgMzMyICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tDQog ZGhjcC5oICB8ICAgMiArDQogcGFzc3QuMSB8ICA0MSArKysrKysrDQogNCBmaWxlcyBjaGFuZ2Vk LCAzNzYgaW5zZXJ0aW9ucygrKSwgMjYgZGVsZXRpb25zKC0pDQoNCmRpZmYgLS1naXQgYS9jb25m LmMgYi9jb25mLmMNCmluZGV4IGZhZjI2ODE0Li5jMTJhOTMzNSAxMDA2NDQNCi0tLSBhL2NvbmYu Yw0KKysrIGIvY29uZi5jDQpAQCAtNDcsNiArNDcsNyBAQA0KICNpbmNsdWRlICJsaW5lcmVhZC5o Ig0KICNpbmNsdWRlICJpc29sYXRpb24uaCINCiAjaW5jbHVkZSAibG9nLmgiDQorI2luY2x1ZGUg ImRoY3AuaCINCiAjaW5jbHVkZSAidmhvc3RfdXNlci5oIg0KICNpbmNsdWRlICJlcG9sbF9jdGwu aCINCiAjaW5jbHVkZSAiY29uZi5oIg0KQEAgLTYzMiw3ICs2MzMsOCBAQCBzdGF0aWMgdm9pZCB1 c2FnZShjb25zdCBjaGFyICpuYW1lLCBGSUxFICpmLCBpbnQgc3RhdHVzKQ0KIAkJIiAgLVMsIC0t c2VhcmNoIExJU1QJU3BhY2Utc2VwYXJhdGVkIGxpc3QsIHNlYXJjaCBkb21haW5zXG4iDQogCQki ICAgIGEgc2luZ2xlLCBlbXB0eSBvcHRpb24gZGlzYWJsZXMgdGhlIEROUyBzZWFyY2ggbGlzdFxu Ig0KIAkJIiAgLUgsIC0taG9zdG5hbWUgTkFNRSAJSG9zdG5hbWUgdG8gY29uZmlndXJlIGNsaWVu dCB3aXRoXG4iDQotCQkiICAtLWZxZG4gTkFNRQkJRlFETiB0byBjb25maWd1cmUgY2xpZW50IHdp dGhcbiIpOw0KKwkJIiAgLS1mcWRuIE5BTUUJCUZRRE4gdG8gY29uZmlndXJlIGNsaWVudCB3aXRo XG4iDQorCQkiICAtLWRoY3Atb3B0IENPREUsVkFMCVNldCBESENQIG9wdGlvbiBDT0RFIHRvIFZB TFxuIik7DQogCWlmIChzdHJzdHIobmFtZSwgInBhc3RhIikpDQogCQlGUFJJTlRGKGYsICIgICAg ZGVmYXVsdDogZG9uJ3QgdXNlIGFueSBzZWFyY2ggbGlzdFxuIik7DQogCWVsc2UNCkBAIC04NjAs NiArODYyLDEwIEBAIHN0YXRpYyB2b2lkIGNvbmZfcHJpbnQoY29uc3Qgc3RydWN0IGN0eCAqYykN CiAJCQlpbmZvKCIgICAgcm91dGVyOiAlcyIsDQogCQkJICAgICBpbmV0X250b3AoQUZfSU5FVCwg JmMtPmlwNC5ndWVzdF9ndywNCiAJCQkJICAgICAgIGJ1Ziwgc2l6ZW9mKGJ1ZikpKTsNCisJCQlm b3IgKGkgPSAxOyBpIDwgMjU1OyBpKyspIHsNCisJCQkJaWYgKGRoY3Bfb3B0X3RvX3N0cihpLCBi dWYsIHNpemVvZihidWYpKSkNCisJCQkJCWluZm8oIiAgICBvcHRpb24gJXU6ICVzIiwgaSwgYnVm KTsNCisJCQl9DQogCQl9DQogDQogCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjLT5pcDQu ZG5zKTsgaSsrKSB7DQpAQCAtMTM0OCw2ICsxMzU0LDcgQEAgdm9pZCBjb25mKHN0cnVjdCBjdHgg KmMsIGludCBhcmdjLCBjaGFyICoqYXJndikNCiAJCXsic3RhdHMiLCByZXF1aXJlZF9hcmd1bWVu dCwJCU5VTEwsCQkzMSB9LA0KIAkJeyJjb25mLXBhdGgiLAlyZXF1aXJlZF9hcmd1bWVudCwJTlVM TCwJCSdjJyB9LA0KIAkJeyJjaHJvb3QtZmFsbGJhY2siLCBub19hcmd1bWVudCwJTlVMTCwgCQkz MiB9LA0KKwkJeyJkaGNwLW9wdCIsIHJlcXVpcmVkX2FyZ3VtZW50LAkJTlVMTCwJCTM0IH0sDQog CQl7IDAgfSwNCiAJfTsNCiAJY29uc3QgY2hhciAqb3B0c3RyaW5nID0gIitkcWZlbDpoczpjOkY6 STpwOlA6bTphOm46TTpnOmk6bzpEOlM6SDo0NjF0OnU6VDpVOiI7DQpAQCAtMTU4OSw2ICsxNTk2 LDI0IEBAIHZvaWQgY29uZihzdHJ1Y3QgY3R4ICpjLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YpDQog CQljYXNlIDMyOg0KIAkJCWMtPmNocm9vdF9mYWxsYmFjayA9IHRydWU7DQogCQkJYnJlYWs7DQor CQljYXNlIDM0OiB7DQorCQkJdW5zaWduZWQgbG9uZyBvcHRjb2RlOw0KKw0KKwkJCXAgPSBvcHRh cmc7DQorDQorCQkJaWYgKCFwYXJzZV91bnNpZ25lZCgmcCwgMCwgJm9wdGNvZGUpIHx8DQorCQkJ ICAgICFwYXJzZV9saXRlcmFsKCZwLCAiLCIpKSB7DQorCQkJCWRpZSgiLS1kaGNwLW9wdCByZXF1 aXJlcyBDT0RFLFZBTFVFIGZvcm1hdCIpOw0KKwkJCX0NCisNCisJCQlpZiAob3B0Y29kZSA8IDEg fHwgb3B0Y29kZSA+IDI1NCkgew0KKwkJCQlkaWUoIkRIQ1Agb3B0aW9uIGNvZGUgbXVzdCBiZSAx LTI1NDogJXMiLA0KKwkJCQkgICAgb3B0YXJnKTsNCisJCQl9DQorDQorCQkJZGhjcF9zZXRfb3B0 KG9wdGNvZGUsIHApOw0KKwkJCWJyZWFrOw0KKwkJfQ0KIAkJY2FzZSAnZCc6DQogCQkJYy0+ZGVi dWcgPSAxOw0KIAkJCWMtPnF1aWV0ID0gMDsNCmRpZmYgLS1naXQgYS9kaGNwLmMgYi9kaGNwLmMN CmluZGV4IDJhOGE4MmY2Li5kZDNhYjZjNiAxMDA2NDQNCi0tLSBhL2RoY3AuYw0KKysrIGIvZGhj cC5jDQpAQCAtMjMsNiArMjMsNyBAQA0KICNpbmNsdWRlIDx1bmlzdGQuaD4NCiAjaW5jbHVkZSA8 c3RyaW5nLmg+DQogI2luY2x1ZGUgPGxpbWl0cy5oPg0KKyNpbmNsdWRlIDxlcnJuby5oPg0KIA0K ICNpbmNsdWRlICJ1dGlsLmgiDQogI2luY2x1ZGUgImlwLmgiDQpAQCAtMzIsMTUgKzMzLDE4IEBA DQogI2luY2x1ZGUgInRhcC5oIg0KICNpbmNsdWRlICJsb2cuaCINCiAjaW5jbHVkZSAiZGhjcC5o Ig0KKyNpbmNsdWRlICJwYXJzZS5oIg0KIA0KIC8qKg0KICAqIGVudW0gb3B0X2NvbmYgLSBESENQ IG9wdGlvbiBjb25maWd1cmF0aW9uDQogICogQE9QVF9VTlNFVDoJCU9wdGlvbiBub3QgY29uZmln dXJlZA0KICAqIEBPUFRfREVGQVVMVDoJT3B0aW9uIGRlcml2ZWQgZnJvbSBob3N0IGNvbmZpZ3Vy YXRpb24NCisgKiBAT1BUX1VTRVI6CQlPcHRpb24gc2V0IHZpYSAtLWRoY3Atb3B0IGNvbW1hbmQg bGluZQ0KICAqLw0KIGVudW0gb3B0X2NvbmYgew0KIAlPUFRfVU5TRVQgPSAwLA0KIAlPUFRfREVG QVVMVCwNCisJT1BUX1VTRVIsDQogfTsNCiANCiAvKioNCkBAIC01MCw3ICs1NCw3IEBAIGVudW0g b3B0X2NvbmYgew0KICAqIEBzOgkJT3B0aW9uIHBheWxvYWQgZnJvbSBzZXJ2ZXINCiAgKiBAY2xl bjoJTGVuZ3RoIG9mIG9wdGlvbiByZWNlaXZlZCBmcm9tIGNsaWVudCwgLTEgaWYgbm90IHJlY2Vp dmVkDQogICogQGM6CQlPcHRpb24gcGF5bG9hZCBmcm9tIGNsaWVudA0KLSAqIEBjb25mOglPcHRp b24gY29uZmlndXJhdGlvbiAodW5zZXQgb3IgZGVmYXVsdCkNCisgKiBAY29uZjoJT3B0aW9uIGNv bmZpZ3VyYXRpb24gKHVuc2V0LCBkZWZhdWx0LCBvciB1c2VyKQ0KICAqLw0KIHN0cnVjdCBvcHQg ew0KIAlpbnQgc2VudDsNCkBAIC04NSwxNyArODksMjAgQEAgc3RhdGljIHN0cnVjdCBvcHQgb3B0 c1syNTZdOw0KICAqLw0KIHZvaWQgZGhjcF9pbml0KHZvaWQpDQogew0KLQkvKiBNYXNrICovDQot CW9wdHNbMV0gID0gKHN0cnVjdCBvcHQpIHsgMCwgNCwgeyAgMCB9LCAwLCB7IDAgfSwgT1BUX0RF RkFVTFQgfTsNCi0JLyogUm91dGVyICovDQotCW9wdHNbM10gID0gKHN0cnVjdCBvcHQpIHsgMCwg NCwgeyAgMCB9LCAwLCB7IDAgfSwgT1BUX0RFRkFVTFQgfTsNCi0JLyogTGVhc2UgdGltZSAqLw0K LQlvcHRzWzUxXSA9IChzdHJ1Y3Qgb3B0KSB7IDAsIDQsIHsgMHhmZiwgMHhmZiwgMHhmZiwgMHhm ZiB9LA0KLQkJCQkJCSAgICAgICAwLCB7IDAgfSwgT1BUX0RFRkFVTFQgfTsNCisJaWYgKG9wdHNb MV0uY29uZiAhPSBPUFRfVVNFUikgCQkJLyogTWFzayAqLw0KKwkJb3B0c1sxXSA9IChzdHJ1Y3Qg b3B0KSB7IDAsIDQsIHsgIDAgfSwgMCwgeyAwIH0sIE9QVF9ERUZBVUxUIH07DQorCWlmIChvcHRz WzNdLmNvbmYgIT0gT1BUX1VTRVIpIAkJCS8qIFJvdXRlciAqLw0KKwkJb3B0c1szXSA9IChzdHJ1 Y3Qgb3B0KSB7IDAsIDQsIHsgIDAgfSwgMCwgeyAwIH0sIE9QVF9ERUZBVUxUIH07DQorCWlmIChv cHRzWzUxXS5jb25mICE9IE9QVF9VU0VSKSB7CQkvKiBMZWFzZSB0aW1lICovDQorCQlvcHRzWzUx XSA9IChzdHJ1Y3Qgb3B0KSB7IDAsIDQsIHsgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9LA0KKwkJ CQkJICAgICAgIDAsIHsgMCB9LCBPUFRfREVGQVVMVCB9Ow0KKwl9DQogCS8qIFR5cGUgKi8NCiAJ b3B0c1s1M10gPSAoc3RydWN0IG9wdCkgeyAwLCAxLCB7ICAwIH0sIDAsIHsgMCB9LCBPUFRfREVG QVVMVCB9Ow0KLQkvKiBTZXJ2ZXIgSUQgKi8NCi0Jb3B0c1s1NF0gPSAoc3RydWN0IG9wdCkgeyAw LCA0LCB7ICAwIH0sIDAsIHsgMCB9LCBPUFRfREVGQVVMVCB9Ow0KKwlpZiAob3B0c1s1NF0uY29u ZiAhPSBPUFRfVVNFUikgewkJLyogU2VydmVyIElEICovDQorCQlvcHRzWzU0XSA9IChzdHJ1Y3Qg b3B0KSB7IDAsIDQsIHsgIDAgfSwgMCwgeyAwIH0sDQorCQkJCQkJCU9QVF9ERUZBVUxUIH07DQor CX0NCiB9DQogDQogLyoqDQpAQCAtMTQwLDYgKzE0NywyNzEgQEAgc3RydWN0IG1zZyB7DQogCXVp bnQ4X3Qgb1tPUFRfTUFYICsgMSAvKiBFbmQgb3B0aW9uICovIF07DQogfSBfX2F0dHJpYnV0ZV9f KChfX3BhY2tlZF9fKSk7DQogDQorLyoqDQorICogZW51bSBkaGNwX29wdF90eXBlIC0gREhDUCBv cHRpb24gdmFsdWUgdHlwZXMgcGVyIFJGQyAyMTMyDQorICogQERIQ1BfT1BUX05PTkU6CVVuc3Vw cG9ydGVkIG9yIHVua25vd24gb3B0aW9uDQorICogQERIQ1BfT1BUX1NUUjoJVmFyaWFibGUtbGVu Z3RoIHN0cmluZw0KKyAqIEBESENQX09QVF9JUFY0OglTaW5nbGUgSVB2NCBhZGRyZXNzDQorICog QERIQ1BfT1BUX0lQVjRfTElTVDoJTXVsdGlwbGUgSVB2NCBhZGRyZXNzZXMsIGNvbW1hLXNlcGFy YXRlZA0KKyAqIEBESENQX09QVF9VSU5UODoJVW5zaWduZWQgOC1iaXQgaW50ZWdlcg0KKyAqIEBE SENQX09QVF9VSU5UMTY6CVVuc2lnbmVkIDE2LWJpdCBpbnRlZ2VyDQorICogQERIQ1BfT1BUX1VJ TlQzMjoJVW5zaWduZWQgMzItYml0IGludGVnZXINCisgKiBAREhDUF9PUFRfSU5UMzI6CVNpZ25l ZCAzMi1iaXQgaW50ZWdlcg0KKyAqLw0KK2VudW0gZGhjcF9vcHRfdHlwZSB7DQorCURIQ1BfT1BU X05PTkUsDQorCURIQ1BfT1BUX1NUUiwNCisJREhDUF9PUFRfSVBWNCwNCisJREhDUF9PUFRfSVBW NF9MSVNULA0KKwlESENQX09QVF9VSU5UOCwNCisJREhDUF9PUFRfVUlOVDE2LA0KKwlESENQX09Q VF9VSU5UMzIsDQorCURIQ1BfT1BUX0lOVDMyLA0KK307DQorDQorLyoqDQorICogZGhjcF9vcHRf dHlwZXMgLSBNYXBzIG9wdGlvbiBjb2RlIHRvIFJGQyAyMTMyIHZhbHVlIHR5cGUsIGluZGV4ZWQg YnkgY29kZQ0KKyAqLw0KK3N0YXRpYyBjb25zdCBlbnVtIGRoY3Bfb3B0X3R5cGUgZGhjcF9vcHRf dHlwZXNbXSA9IHsNCisJWzFdICAgPSBESENQX09QVF9JUFY0LAkJLyogU3VibmV0IE1hc2sgKi8N CisJWzJdICAgPSBESENQX09QVF9JTlQzMiwJLyogVGltZSBPZmZzZXQgKi8NCisJWzNdICAgPSBE SENQX09QVF9JUFY0X0xJU1QsCS8qIFJvdXRlciAqLw0KKwlbNF0gICA9IERIQ1BfT1BUX0lQVjRf TElTVCwJLyogVGltZSBTZXJ2ZXIgKi8NCisJWzVdICAgPSBESENQX09QVF9JUFY0X0xJU1QsCS8q IE5hbWUgU2VydmVyICovDQorCVs2XSAgID0gREhDUF9PUFRfSVBWNF9MSVNULAkvKiBEb21haW4g TmFtZSBTZXJ2ZXIgKi8NCisJWzddICAgPSBESENQX09QVF9JUFY0X0xJU1QsCS8qIExvZyBTZXJ2 ZXIgKi8NCisJWzhdICAgPSBESENQX09QVF9JUFY0X0xJU1QsCS8qIENvb2tpZSBTZXJ2ZXIgKi8N CisJWzldICAgPSBESENQX09QVF9JUFY0X0xJU1QsCS8qIExQUiBTZXJ2ZXIgKi8NCisJWzEwXSAg PSBESENQX09QVF9JUFY0X0xJU1QsCS8qIEltcHJlc3MgU2VydmVyICovDQorCVsxMV0gID0gREhD UF9PUFRfSVBWNF9MSVNULAkvKiBSZXNvdXJjZSBMb2NhdGlvbiBTZXJ2ZXIgKi8NCisJWzEyXSAg PSBESENQX09QVF9TVFIsCQkvKiBIb3N0IE5hbWUgKi8NCisJWzEzXSAgPSBESENQX09QVF9VSU5U MTYsCS8qIEJvb3QgRmlsZSBTaXplICovDQorCVsxNV0gID0gREhDUF9PUFRfU1RSLAkJLyogRG9t YWluIE5hbWUgKi8NCisJWzE2XSAgPSBESENQX09QVF9JUFY0LAkJLyogU3dhcCBTZXJ2ZXIgKi8N CisJWzE3XSAgPSBESENQX09QVF9TVFIsCQkvKiBSb290IFBhdGggKi8NCisJWzE5XSAgPSBESENQ X09QVF9VSU5UOCwJLyogSVAgRm9yd2FyZGluZyAqLw0KKwlbMjNdICA9IERIQ1BfT1BUX1VJTlQ4 LAkvKiBEZWZhdWx0IElQIFRUTCAqLw0KKwlbMjZdICA9IERIQ1BfT1BUX1VJTlQxNiwJLyogSW50 ZXJmYWNlIE1UVSAqLw0KKwlbMjhdICA9IERIQ1BfT1BUX0lQVjQsCQkvKiBCcm9hZGNhc3QgQWRk cmVzcyAqLw0KKwlbMzddICA9IERIQ1BfT1BUX1VJTlQ4LAkvKiBUQ1AgRGVmYXVsdCBUVEwgKi8N CisJWzM4XSAgPSBESENQX09QVF9VSU5UMzIsCS8qIFRDUCBLZWVwYWxpdmUgSW50ZXJ2YWwgKi8N CisJWzQwXSAgPSBESENQX09QVF9TVFIsCQkvKiBOSVMgRG9tYWluIE5hbWUgKi8NCisJWzQxXSAg PSBESENQX09QVF9JUFY0X0xJU1QsCS8qIE5JUyBTZXJ2ZXJzICovDQorCVs0Ml0gID0gREhDUF9P UFRfSVBWNF9MSVNULAkvKiBOVFAgU2VydmVycyAqLw0KKwlbNDRdICA9IERIQ1BfT1BUX0lQVjRf TElTVCwJLyogTmV0QklPUyBOYW1lIFNlcnZlciAqLw0KKwlbNTFdICA9IERIQ1BfT1BUX1VJTlQz MiwJLyogSVAgQWRkcmVzcyBMZWFzZSBUaW1lICovDQorCVs1NF0gID0gREhDUF9PUFRfSVBWNCwJ CS8qIFNlcnZlciBJZGVudGlmaWVyICovDQorCVs1OF0gID0gREhDUF9PUFRfVUlOVDMyLAkvKiBS ZW5ld2FsIChUMSkgVGltZSAqLw0KKwlbNTldICA9IERIQ1BfT1BUX1VJTlQzMiwJLyogUmViaW5k aW5nIChUMikgVGltZSAqLw0KKwlbNjBdICA9IERIQ1BfT1BUX1NUUiwJCS8qIFZlbmRvciBDbGFz cyBJZGVudGlmaWVyICovDQorCVs2Nl0gID0gREhDUF9PUFRfU1RSLAkJLyogVEZUUCBTZXJ2ZXIg TmFtZSAqLw0KKwlbNjddICA9IERIQ1BfT1BUX1NUUiwJCS8qIEJvb3RmaWxlIE5hbWUgKi8NCisJ WzI1Ml0gPSBESENQX09QVF9TVFIsCQkvKiBXUEFEIFVSTCAqLw0KK307DQorDQorLyoqDQorICog ZGhjcF9vcHRfcGFyc2UoKSAtIFBhcnNlIGEgREhDUCBvcHRpb24gdmFsdWUNCisgKiBAY29kZToJ REhDUCBvcHRpb24gY29kZQ0KKyAqIEBzdHI6CVZhbHVlIHN0cmluZyBmcm9tIGNvbW1hbmQgbGlu ZQ0KKyAqIEBidWY6CU91dHB1dCBidWZmZXIgZm9yIGJpbmFyeSB2YWx1ZQ0KKyAqIEBidWZfbGVu OglTaXplIG9mIG91dHB1dCBidWZmZXINCisgKg0KKyAqIFJldHVybjogbnVtYmVyIG9mIGJ5dGVz IHdyaXR0ZW4gdG8gQGJ1Ziwgb3IgLTEgb24gZXJyb3INCisgKi8NCitzdGF0aWMgaW50IGRoY3Bf b3B0X3BhcnNlKHVpbnQ4X3QgY29kZSwgY29uc3QgY2hhciAqc3RyLA0KKwkJCSAgdWludDhfdCAq YnVmLCBzaXplX3QgYnVmX2xlbikNCit7DQorCWVudW0gZGhjcF9vcHRfdHlwZSB0eXBlOw0KKwl1 bnNpZ25lZCBsb25nIHZhbDsNCisJdWludDhfdCB3aWR0aDsNCisJc2l6ZV90IHNsZW47DQorCXNp emVfdCBsZW47DQorCWNoYXIgKmVuZDsNCisNCisJaWYgKGNvZGUgPj0gQVJSQVlfU0laRShkaGNw X29wdF90eXBlcykpDQorCQlyZXR1cm4gLTE7DQorDQorCXR5cGUgPSBkaGNwX29wdF90eXBlc1tj b2RlXTsNCisNCisJaWYgKCEqc3RyKQ0KKwkJcmV0dXJuIC0xOw0KKw0KKwlzd2l0Y2ggKHR5cGUp IHsNCisJY2FzZSBESENQX09QVF9OT05FOg0KKwkJcmV0dXJuIC0xOw0KKwljYXNlIERIQ1BfT1BU X0lQVjQ6DQorCWNhc2UgREhDUF9PUFRfSVBWNF9MSVNUOg0KKwkJbGVuID0gMDsNCisNCisJCWRv IHsNCisJCQlpZiAobGVuICsgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSA+IGJ1Zl9sZW4pDQorCQkJ CXJldHVybiAtMTsNCisNCisJCQlpZiAoIXBhcnNlX2lwdjQoJnN0ciwNCisJCQkJCShzdHJ1Y3Qg aW5fYWRkciAqKShidWYgKyBsZW4pKSkNCisJCQkJcmV0dXJuIC0xOw0KKw0KKwkJCWxlbiArPSBz aXplb2Yoc3RydWN0IGluX2FkZHIpOw0KKw0KKwkJCWlmICh0eXBlID09IERIQ1BfT1BUX0lQVjQp DQorCQkJCWJyZWFrOw0KKwkJfSB3aGlsZSAocGFyc2VfbGl0ZXJhbCgmc3RyLCAiLCIpKTsNCisN CisJCWlmICghbGVuIHx8ICFwYXJzZV9lb2koc3RyKSkNCisJCQlyZXR1cm4gLTE7DQorDQorCQly ZXR1cm4gbGVuOw0KKwljYXNlIERIQ1BfT1BUX1VJTlQ4Og0KKwljYXNlIERIQ1BfT1BUX1VJTlQx NjoNCisJY2FzZSBESENQX09QVF9VSU5UMzI6DQorCWNhc2UgREhDUF9PUFRfSU5UMzI6DQorCQlp ZiAodHlwZSA9PSBESENQX09QVF9VSU5UOCkNCisJCQl3aWR0aCA9IDE7DQorCQllbHNlIGlmICh0 eXBlID09IERIQ1BfT1BUX1VJTlQxNikNCisJCQl3aWR0aCA9IDI7DQorCQllbHNlDQorCQkJd2lk dGggPSA0Ow0KKw0KKwkJaWYgKGJ1Zl9sZW4gPCB3aWR0aCkNCisJCQlyZXR1cm4gLTE7DQorDQor CQlpZiAodHlwZSA9PSBESENQX09QVF9JTlQzMikgew0KKwkJCWxvbmcgc3ZhbDsNCisNCisJCQll cnJubyA9IDA7DQorCQkJc3ZhbCA9IHN0cnRvbChzdHIsICZlbmQsIDApOw0KKwkJCWlmICgqZW5k IHx8IGVycm5vIHx8DQorCQkJICAgIHN2YWwgPCBJTlQzMl9NSU4gfHwgc3ZhbCA+IElOVDMyX01B WCkNCisJCQkJcmV0dXJuIC0xOw0KKwkJCXZhbCA9ICh1aW50MzJfdClzdmFsOw0KKwkJfSBlbHNl IHsNCisJCQlpZiAoIXBhcnNlX3Vuc2lnbmVkKCZzdHIsIDAsICZ2YWwpIHx8DQorCQkJICAgICFw YXJzZV9lb2koc3RyKSB8fA0KKwkJCSAgICB2YWwgPj0gKDFVTEwgPDwgKHdpZHRoICogOCkpKQ0K KwkJCQlyZXR1cm4gLTE7DQorCQl9DQorDQorCQlpZiAodHlwZSA9PSBESENQX09QVF9VSU5UMTYp IHsNCisJCQl1aW50MTZfdCB2MTYgPSBodG9ucyh2YWwpOw0KKwkJCW1lbWNweShidWYsICZ2MTYs IHNpemVvZih2MTYpKTsNCisJCX0gZWxzZSBpZiAodHlwZSA9PSBESENQX09QVF9VSU5UMzIgfHwN CisJCQkgICB0eXBlID09IERIQ1BfT1BUX0lOVDMyKSB7DQorCQkJdWludDMyX3QgdjMyID0gaHRv bmwodmFsKTsNCisJCQltZW1jcHkoYnVmLCAmdjMyLCBzaXplb2YodjMyKSk7DQorCQl9IGVsc2Ug ew0KKwkJCWJ1ZlswXSA9IHZhbDsNCisJCX0NCisNCisJCXJldHVybiB3aWR0aDsNCisJY2FzZSBE SENQX09QVF9TVFI6DQorCQlzbGVuID0gc3RybGVuKHN0cik7DQorDQorCQlpZiAoc2xlbiA+IGJ1 Zl9sZW4pDQorCQkJcmV0dXJuIC0xOw0KKw0KKwkJbWVtY3B5KGJ1Ziwgc3RyLCBzbGVuKTsNCisN CisJCXJldHVybiBzbGVuOw0KKwl9DQorDQorCXJldHVybiAtMTsNCit9DQorDQorLyoqDQorICog ZGhjcF9zZXRfb3B0KCkgLSBQYXJzZSBhbmQgc3RvcmUgYSB1c2VyLXNwZWNpZmllZCBESENQIG9w dGlvbg0KKyAqIEBjb2RlOglESENQIG9wdGlvbiBjb2RlDQorICogQHZhbF9zdHI6CVZhbHVlIHN0 cmluZyBmcm9tIGNvbW1hbmQgbGluZQ0KKyAqLw0KK3ZvaWQgZGhjcF9zZXRfb3B0KHVpbnQ4X3Qg Y29kZSwgY29uc3QgY2hhciAqdmFsX3N0cikNCit7DQorCWludCByZXQ7DQorDQorCXJldCA9IGRo Y3Bfb3B0X3BhcnNlKGNvZGUsIHZhbF9zdHIsIG9wdHNbY29kZV0ucywgc2l6ZW9mKG9wdHNbY29k ZV0ucykpOw0KKwlpZiAocmV0IDwgMCkNCisJCWRpZSgiSW52YWxpZCB2YWx1ZSBmb3IgREhDUCBv cHRpb24gJXU6ICVzIiwgY29kZSwgdmFsX3N0cik7DQorDQorCW9wdHNbY29kZV0uc2xlbiA9IHJl dDsNCisJb3B0c1tjb2RlXS5jb25mID0gT1BUX1VTRVI7DQorfQ0KKw0KKy8qKg0KKyAqIGRoY3Bf b3B0X3RvX3N0cigpIC0gUmVuZGVyIGEgYmluYXJ5IERIQ1Agb3B0aW9uIHZhbHVlIHRvIGEgcHJp bnRhYmxlIHN0cmluZw0KKyAqIEBjb2RlOglESENQIG9wdGlvbiBjb2RlDQorICogQGJ1ZjoJT3V0 cHV0IHN0cmluZyBidWZmZXINCisgKiBAYnVmX2xlbjoJU2l6ZSBvZiBvdXRwdXQgYnVmZmVyDQor ICoNCisgKiBSZXR1cm46IHBvaW50ZXIgdG8gQGJ1ZiBpZiBvcHRpb24gaXMgc2V0LCBOVUxMIG90 aGVyd2lzZQ0KKyAqLw0KK2NvbnN0IGNoYXIgKmRoY3Bfb3B0X3RvX3N0cih1aW50OF90IGNvZGUs IGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4pDQorew0KKwllbnVtIGRoY3Bfb3B0X3R5cGUgdHlw ZTsNCisJdW5zaWduZWQgaW50IGk7DQorCWludCBvZmYgPSAwOw0KKw0KKwlpZiAob3B0c1tjb2Rl XS5jb25mID09IE9QVF9VTlNFVCkNCisJCXJldHVybiBOVUxMOw0KKw0KKwlhc3NlcnQoY29kZSA8 IEFSUkFZX1NJWkUoZGhjcF9vcHRfdHlwZXMpKTsNCisNCisJdHlwZSA9IGRoY3Bfb3B0X3R5cGVz W2NvZGVdOw0KKw0KKwlzd2l0Y2ggKHR5cGUpIHsNCisJY2FzZSBESENQX09QVF9JUFY0Og0KKwlj YXNlIERIQ1BfT1BUX0lQVjRfTElTVDoNCisJCWZvciAoaSA9IDA7IGkgKyBzaXplb2Yoc3RydWN0 IGluX2FkZHIpIDw9ICh1bnNpZ25lZCBpbnQpb3B0c1tjb2RlXS5zbGVuOw0KKwkJICAgICBpICs9 IHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpIHsNCisJCQlpZiAob2ZmKSB7DQorCQkJCWlmIChvZmYg KyAxID49IChpbnQpYnVmX2xlbikNCisJCQkJCXJldHVybiBOVUxMOw0KKwkJCQlidWZbb2ZmKytd ID0gJywnOw0KKwkJCX0NCisJCQlpZiAoIWluZXRfbnRvcChBRl9JTkVULCBvcHRzW2NvZGVdLnMg KyBpLA0KKwkJCQkgICAgICAgYnVmICsgb2ZmLCBidWZfbGVuIC0gb2ZmKSkNCisJCQkJcmV0dXJu IE5VTEw7DQorCQkJb2ZmICs9IHN0cmxlbihidWYgKyBvZmYpOw0KKwkJfQ0KKwkJcmV0dXJuIGJ1 ZjsNCisJY2FzZSBESENQX09QVF9VSU5UODoNCisJY2FzZSBESENQX09QVF9VSU5UMTY6DQorCWNh c2UgREhDUF9PUFRfVUlOVDMyOiB7DQorCQl1aW50MzJfdCB2YWwgPSAwOw0KKw0KKwkJaWYgKG9w dHNbY29kZV0uc2xlbiA9PSAxKSB7DQorCQkJdmFsID0gb3B0c1tjb2RlXS5zWzBdOw0KKwkJfSBl bHNlIGlmIChvcHRzW2NvZGVdLnNsZW4gPT0gMikgew0KKwkJCXVpbnQxNl90IHYxNjsNCisJCQlt ZW1jcHkoJnYxNiwgb3B0c1tjb2RlXS5zLCBzaXplb2YodjE2KSk7DQorCQkJdmFsID0gbnRvaHMo djE2KTsNCisJCX0gZWxzZSBpZiAob3B0c1tjb2RlXS5zbGVuID09IDQpIHsNCisJCQltZW1jcHko JnZhbCwgb3B0c1tjb2RlXS5zLCBzaXplb2YodmFsKSk7DQorCQkJdmFsID0gbnRvaGwodmFsKTsN CisJCX0NCisNCisJCWlmIChzbnByaW50ZihidWYsIGJ1Zl9sZW4sICIldSIsIHZhbCkgPj0gKGlu dClidWZfbGVuKQ0KKwkJCXJldHVybiBOVUxMOw0KKwkJcmV0dXJuIGJ1ZjsNCisJfQ0KKwljYXNl IERIQ1BfT1BUX0lOVDMyOiB7DQorCQlpbnQzMl90IHZhbDsNCisJCXVpbnQzMl90IHYzMjsNCisN CisJCWFzc2VydChvcHRzW2NvZGVdLnNsZW4gPT0gNCk7DQorCQltZW1jcHkoJnYzMiwgb3B0c1tj b2RlXS5zLCBzaXplb2YodjMyKSk7DQorCQl2YWwgPSAoaW50MzJfdCludG9obCh2MzIpOw0KKw0K KwkJaWYgKHNucHJpbnRmKGJ1ZiwgYnVmX2xlbiwgIiVkIiwgdmFsKSA+PSAoaW50KWJ1Zl9sZW4p DQorCQkJcmV0dXJuIE5VTEw7DQorCQlyZXR1cm4gYnVmOw0KKwl9DQorCWNhc2UgREhDUF9PUFRf U1RSOg0KKwkJKHZvaWQpc25wcmludGYoYnVmLCBidWZfbGVuLCAiJS4qcyIsDQorCQkJICAgICAg IG9wdHNbY29kZV0uc2xlbiwgb3B0c1tjb2RlXS5zKTsNCisJCXJldHVybiBidWY7DQorCWRlZmF1 bHQ6DQorCQlhc3NlcnQoMCk7DQorCX0NCit9DQorDQogLyoqDQogICogZmlsbF9vbmUoKSAtIEZp bGwgYSBzaW5nbGUgb3B0aW9uIGludG8gYSBidWZmZXINCiAgKiBAYnVmOglCdWZmZXIgdG8gd3Jp dGUgb3B0aW9uDQpAQCAtNDI1LDkgKzY5NywxNCBAQCBpbnQgZGhjcChjb25zdCBzdHJ1Y3QgY3R4 ICpjLCBzdHJ1Y3QgaW92X3RhaWwgKmRhdGEpDQogCWluZm8oIiAgICBmcm9tICVzIiwgZXRoX250 b3AobS0+Y2hhZGRyLCBtYWNzdHIsIHNpemVvZihtYWNzdHIpKSk7DQogDQogCW1hc2suc19hZGRy ID0gaHRvbmwoMHhmZmZmZmZmZiA8PCAoMzIgLSBjLT5pcDQucHJlZml4X2xlbikpOw0KLQltZW1j cHkob3B0c1sxXS5zLCAgJm1hc2ssICAgICAgICAgICAgICAgIHNpemVvZihtYXNrKSk7DQotCW1l bWNweShvcHRzWzNdLnMsICAmYy0+aXA0Lmd1ZXN0X2d3LCAgICAgc2l6ZW9mKGMtPmlwNC5ndWVz dF9ndykpOw0KLQltZW1jcHkob3B0c1s1NF0ucywgJmMtPmlwNC5vdXJfdGFwX2FkZHIsIHNpemVv ZihjLT5pcDQub3VyX3RhcF9hZGRyKSk7DQorCWlmIChvcHRzWzFdLmNvbmYgPT0gT1BUX0RFRkFV TFQpDQorCQltZW1jcHkob3B0c1sxXS5zLCAmbWFzaywgc2l6ZW9mKG1hc2spKTsNCisJaWYgKG9w dHNbM10uY29uZiA9PSBPUFRfREVGQVVMVCkNCisJCW1lbWNweShvcHRzWzNdLnMsICZjLT5pcDQu Z3Vlc3RfZ3csIHNpemVvZihjLT5pcDQuZ3Vlc3RfZ3cpKTsNCisJaWYgKG9wdHNbNTRdLmNvbmYg PT0gT1BUX0RFRkFVTFQpIHsNCisJCW1lbWNweShvcHRzWzU0XS5zLCAmYy0+aXA0Lm91cl90YXBf YWRkciwNCisJCSAgICAgICBzaXplb2YoYy0+aXA0Lm91cl90YXBfYWRkcikpOw0KKwl9DQogDQog CS8qIElmIHRoZSBnYXRld2F5IGlzIG5vdCBvbiB0aGUgYXNzaWduZWQgc3VibmV0LCBzZW5kIGFu IG9wdGlvbiAxMjENCiAJICogKENsYXNzbGVzcyBTdGF0aWMgUm91dGluZykgYWRkaW5nIGEgZHVt bXkgcm91dGUgdG8gaXQuDQpAQCAtNDQ0LDI1ICs3MjEsMzAgQEAgaW50IGRoY3AoY29uc3Qgc3Ry dWN0IGN0eCAqYywgc3RydWN0IGlvdl90YWlsICpkYXRhKQ0KIAkJICAgICAgICZjLT5pcDQuZ3Vl c3RfZ3csIHNpemVvZihjLT5pcDQuZ3Vlc3RfZ3cpKTsNCiAJfQ0KIA0KLQlpZiAoYy0+bXR1KSB7 DQorCWlmIChvcHRzWzI2XS5jb25mICE9IE9QVF9VU0VSICYmIGMtPm10dSkgew0KKwkJdWludDE2 X3QgbXR1X24gPSBodG9ucyhjLT5tdHUpOw0KKw0KIAkJb3B0c1syNl0uc2xlbiA9IDI7DQogCQlv cHRzWzI2XS5jb25mID0gT1BUX0RFRkFVTFQ7DQotCQlvcHRzWzI2XS5zWzBdID0gYy0+bXR1IC8g MjU2Ow0KLQkJb3B0c1syNl0uc1sxXSA9IGMtPm10dSAlIDI1NjsNCisJCW1lbWNweShvcHRzWzI2 XS5zLCAmbXR1X24sIHNpemVvZihtdHVfbikpOw0KIAl9DQogDQotCWZvciAoaSA9IDAsIG9wdHNb Nl0uc2xlbiA9IDA7DQotCSAgICAgIWMtPm5vX2RoY3BfZG5zICYmIGkgPCBBUlJBWV9TSVpFKGMt PmlwNC5kbnMpOyBpKyspIHsNCi0JCWlmIChJTjRfSVNfQUREUl9VTlNQRUNJRklFRCgmYy0+aXA0 LmRuc1tpXSkpDQotCQkJYnJlYWs7DQotCQkoKHN0cnVjdCBpbl9hZGRyICopb3B0c1s2XS5zKVtp XSA9IGMtPmlwNC5kbnNbaV07DQotCQlvcHRzWzZdLnNsZW4gKz0gc2l6ZW9mKHVpbnQzMl90KTsN CisJaWYgKG9wdHNbNl0uY29uZiAhPSBPUFRfVVNFUikgew0KKwkJb3B0c1s2XS5zbGVuID0gMDsN CisJCWZvciAoaSA9IDA7DQorCQkgICAgICFjLT5ub19kaGNwX2RucyAmJiBpIDwgQVJSQVlfU0la RShjLT5pcDQuZG5zKTsNCisJCSAgICAgaSsrKSB7DQorCQkJaWYgKElONF9JU19BRERSX1VOU1BF Q0lGSUVEKCZjLT5pcDQuZG5zW2ldKSkNCisJCQkJYnJlYWs7DQorCQkJKChzdHJ1Y3QgaW5fYWRk ciAqKW9wdHNbNl0ucylbaV0gPSBjLT5pcDQuZG5zW2ldOw0KKwkJCW9wdHNbNl0uc2xlbiArPSBz aXplb2YodWludDMyX3QpOw0KKwkJfQ0KKwkJaWYgKG9wdHNbNl0uc2xlbikNCisJCQlvcHRzWzZd LmNvbmYgPSBPUFRfREVGQVVMVDsNCiAJfQ0KLQlpZiAob3B0c1s2XS5zbGVuKQ0KLQkJb3B0c1s2 XS5jb25mID0gT1BUX0RFRkFVTFQ7DQogDQogCW9wdF9sZW4gPSBzdHJsZW4oYy0+aG9zdG5hbWUp Ow0KLQlpZiAob3B0X2xlbiA+IDApIHsNCisJaWYgKG9wdHNbMTJdLmNvbmYgIT0gT1BUX1VTRVIg JiYgb3B0X2xlbiA+IDApIHsNCiAJCW9wdHNbMTJdLnNsZW4gPSBvcHRfbGVuOw0KIAkJb3B0c1sx Ml0uY29uZiA9IE9QVF9ERUZBVUxUOw0KIAkJbWVtY3B5KG9wdHNbMTJdLnMsICZjLT5ob3N0bmFt ZSwgb3B0X2xlbik7DQpkaWZmIC0tZ2l0IGEvZGhjcC5oIGIvZGhjcC5oDQppbmRleCBjZDUwYzk5 Yi4uODBhYmRhNjUgMTAwNjQ0DQotLS0gYS9kaGNwLmgNCisrKyBiL2RoY3AuaA0KQEAgLTgsNSAr OCw3IEBADQogDQogaW50IGRoY3AoY29uc3Qgc3RydWN0IGN0eCAqYywgc3RydWN0IGlvdl90YWls ICpkYXRhKTsNCiB2b2lkIGRoY3BfaW5pdCh2b2lkKTsNCit2b2lkIGRoY3Bfc2V0X29wdCh1aW50 OF90IGNvZGUsIGNvbnN0IGNoYXIgKnZhbF9zdHIpOw0KK2NvbnN0IGNoYXIgKmRoY3Bfb3B0X3Rv X3N0cih1aW50OF90IGNvZGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4pOw0KIA0KICNlbmRp ZiAvKiBESENQX0ggKi8NCmRpZmYgLS1naXQgYS9wYXNzdC4xIGIvcGFzc3QuMQ0KaW5kZXggNTNl MDcyYTkuLjJiZmU3ZDUwIDEwMDY0NA0KLS0tIGEvcGFzc3QuMQ0KKysrIGIvcGFzc3QuMQ0KQEAg LTQ0MCw2ICs0NDAsNDcgQEAgU2VuZCBcZkluYW1lXGZSIGFzIERIQ1Agb3B0aW9uIDEyIChob3N0 bmFtZSkuDQogRlFETiB0byBjb25maWd1cmUgdGhlIGNsaWVudCB3aXRoLg0KIFNlbmQgXGZJbmFt ZVxmUiBhcyBDbGllbnQgRlFETjogREhDUCBvcHRpb24gODEgYW5kIERIQ1B2NiBvcHRpb24gMzku DQogDQorLlRQDQorLkJSIFwtXC1kaGNwLW9wdCAiICIgXGZJQ09ERVxmUixcZklWQUxVRVxmUg0K K1NldCBESENQIG9wdGlvbiBcZklDT0RFXGZSICgxXC0yNTQpIHRvIFxmSVZBTFVFXGZSLiBUaGUg dmFsdWUgZm9ybWF0IGRlcGVuZHMNCitvbiB0aGUgb3B0aW9uIHR5cGUgYW5kIGlzIGRldGVybWlu ZWQgYXV0b21hdGljYWxseSBmcm9tIHRoZSBvcHRpb24gY29kZS4NCitNdWx0aXBsZSBJUHY0IGFk ZHJlc3NlcyBhcmUgY29tbWEtc2VwYXJhdGVkLg0KK1RoaXMgb3B0aW9uIGNhbiBiZSBzcGVjaWZp ZWQgbXVsdGlwbGUgdGltZXMuIElmIHRoZSBzYW1lIG9wdGlvbiBjb2RlIGlzDQorZ2l2ZW4gbW9y ZSB0aGFuIG9uY2UsIHRoZSBsYXN0IHZhbHVlIHdpbnMuIE9wdGlvbnMgc2V0IHdpdGgNCitcZkJc LVwtZGhjcC1vcHRcZlIgb3ZlcnJpZGUgYnVpbHQtaW4gdmFsdWVzLg0KKy5QUA0KK0V4YW1wbGVz Og0KKy5uZg0KKyAgXC1cLWRoY3Atb3B0IDYsOC44LjguOCw0LjQuNC40DQorICBcLVwtZGhjcC1v cHQgMTIsbXlob3N0bmFtZQ0KKy5maQ0KKy5QUA0KK09ubHkgdGhlIGZvbGxvd2luZyBvcHRpb24g Y29kZXMgYXJlIHN1cHBvcnRlZCAodW5zdXBwb3J0ZWQgY29kZXMgY2F1c2UgYW4gZXJyb3IpOg0K Ky5SUw0KKy5UUA0KKy5CIElQdjQgYWRkcmVzcyBvcHRpb25zDQorMSAoU3VibmV0IE1hc2spLCAx NiAoU3dhcCBTZXJ2ZXIpLCAyOCAoQnJvYWRjYXN0IEFkZHJlc3MpLA0KKzU0IChTZXJ2ZXIgSWRl bnRpZmllcikNCisuVFANCisuQiBJUHY0IGFkZHJlc3MgbGlzdCBvcHRpb25zIChjb21tYS1zZXBh cmF0ZWQpDQorMyAoUm91dGVyKSwgNCAoVGltZSBTZXJ2ZXIpLCA1IChOYW1lIFNlcnZlciksIDYg KEROUyksIDcgKExvZyBTZXJ2ZXIpLA0KKzggKENvb2tpZSBTZXJ2ZXIpLCA5IChMUFIgU2VydmVy KSwgMTAgKEltcHJlc3MgU2VydmVyKSwNCisxMSAoUmVzb3VyY2UgTG9jYXRpb24gU2VydmVyKSwg NDEgKE5JUyBTZXJ2ZXJzKSwNCis0MiAoTlRQIFNlcnZlcnMpLCA0NCAoTmV0QklPUyBOYW1lIFNl cnZlcikNCisuVFANCisuQiBJbnRlZ2VyIG9wdGlvbnMNCisyIChUaW1lIE9mZnNldCwgMzItYml0 KSwgMTMgKEJvb3QgRmlsZSBTaXplLCAxNi1iaXQpLCAxOSAoSVAgRm9yd2FyZGluZywgOC1iaXQp LA0KKzIzIChEZWZhdWx0IElQIFRUTCwgOC1iaXQpLCAyNiAoSW50ZXJmYWNlIE1UVSwgMTYtYml0 KSwNCiszNyAoVENQIERlZmF1bHQgVFRMLCA4LWJpdCksIDM4IChUQ1AgS2VlcGFsaXZlIEludGVy dmFsLCAzMi1iaXQpLA0KKzUxIChJUCBBZGRyZXNzIExlYXNlIFRpbWUsIDMyLWJpdCksDQorNTgg KFJlbmV3YWwgVGltZSwgMzItYml0KSwgNTkgKFJlYmluZGluZyBUaW1lLCAzMi1iaXQpDQorLlRQ DQorLkIgU3RyaW5nIG9wdGlvbnMNCisxMiAoSG9zdCBOYW1lKSwgMTUgKERvbWFpbiBOYW1lKSwg MTcgKFJvb3QgUGF0aCksIDQwIChOSVMgRG9tYWluIE5hbWUpLA0KKzYwIChWZW5kb3IgQ2xhc3Mg SWRlbnRpZmllciksIDY2IChURlRQIFNlcnZlciBOYW1lKSwNCis2NyAoQm9vdGZpbGUgTmFtZSks IDI1MiAoV1BBRCBVUkwpDQorLlJFDQorDQogLlRQDQogLkJSIFwtdCAiLCAiIFwtXC10Y3AtcG9y dHMgIiAiIFxmSXNwZWMNCiBDb25maWd1cmUgVENQIHBvcnQgZm9yd2FyZGluZyB0byBndWVzdCBv ciBuYW1lc3BhY2UuIFxmSXNwZWNcZlIgY2FuIGJlIGVpdGhlcjoNCi0tIA0KMi41NS4wDQoNCg==