From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: passt.top; dmarc=fail (p=quarantine dis=none) header.from=redhat.com Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by passt.top (Postfix) with ESMTPS id 2B28B5A0265 for ; Mon, 26 Oct 2026 11:57:15 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1793012234; 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=d65BYs1rkUJCrdgFR+iymOPoivJljkhJqWjtEt44xxw=; b=LPMzRDx9EOgqiunMMLUmliWTUbkI4svZuQJwR10KnY6LRokvGRr+z/2BpxJP1T3szr9dSU W9APkRaRCr6OXrRgHlO/2MKCHxdURVGF9Bn5ZyBn9c0B9Uh3eC/D0L+3ZB91gyiAtzgxJ/ IUOuDz93sm2yX7sFZ0VXmwINzWVzLqc= 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-78-XzI2_-dtPH-L4HJoi9gnLw-1; Mon, 26 Oct 2026 06:57:12 -0400 X-MC-Unique: XzI2_-dtPH-L4HJoi9gnLw-1 X-Mimecast-MFC-AGG-ID: XzI2_-dtPH-L4HJoi9gnLw_1793012232 Received: from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4]) (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 DC3EB195605B for ; Mon, 26 Oct 2026 10:57:11 +0000 (UTC) Received: from anskuma-thinkpadp1gen7.bengluru.csb (unknown [10.74.80.94]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 92B4C30000E3; Mon, 26 Oct 2026 10:57:09 +0000 (UTC) From: Anshu Kumari To: sbrivio@redhat.com, passt-dev@passt.top Subject: [PATCH v8 3/6] dhcp: Add --dhcp-opt with option table and value parser Date: Mon, 26 Oct 2026 16:26:55 +0530 Message-ID: <20261026105659.1585444-4-anskuma@redhat.com> In-Reply-To: <20261026105659.1585444-1-anskuma@redhat.com> References: <20261026105659.1585444-1-anskuma@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.4 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: aV7NbfnaTWs78NdCQWjnCmyWlUmVJ78uAATblzrzK-M_1793012232 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Message-ID-Hash: SUW4PX4EIPEHPVMN3SFG4V3B7WP7GJRZ X-Message-ID-Hash: SUW4PX4EIPEHPVMN3SFG4V3B7WP7GJRZ 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: anskuma@redhat.com, lvivier@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 bnNodSBLdW1hcmkgPGFuc2t1bWFAcmVkaGF0LmNvbT4NCi0tLQ0Kdjg6DQogIC0gb3B0Y29kZSBt b3ZlZCB0byBmdW5jdGlvbiBzY29wZS4NCiAgLSBUZW1wIHZhcmlhYmxlICJzbGVuIiIgYWRkZWQg aW4gZGhjcF9vcHRfdG9fc3RyKCkgZm9yIG9wdHNbY29kZV0uc2xlbg0KICAtIFVJTlQgY2FzZSBu b3cgdXNlcyB1dmFsLCBJTlQzMiBjYXNlIHVzZXMgc3ZhbC92MzIgaW5zdGVhZCBvZiBib3RoIHVz aW5nIHZhbA0KDQp2NzoNCiAgLSBSZW1vdmVkIGNsaWVudC1vbmx5IG9wdGlvbnMgNTAgKFJlcXVl c3RlZCBJUCkgYW5kIDU3IChNYXggTWVzc2FnZSBTaXplKQ0KICAgIGZyb20gZGhjcF9vcHRfdHlw ZXNbXQ0KICAtIFN3aXRjaGVkIGludGVnZXIgcGFyc2luZyBmcm9tIHN0cnRvdWwoKS9zdHJ0b2wo KSB0byBwYXJzZV91bnNpZ25lZCgpDQogICAgZm9yIFVJTlQ4L1VJTlQxNi9VSU5UMzIgdHlwZXMN CiAgLSBGaXhlZCBhbGlnbm1lbnQ6IHVzZSBodG9ucygpL2h0b25sKCkgKyBtZW1jcHkoKSBpbnN0 ZWFkIG9mIGRpcmVjdA0KICAgIHBvaW50ZXIgY2FzdHMgZm9yIFVJTlQxNi9VSU5UMzIgZW5jb2Rp bmcuDQogIC0gVXNlZCBleHBsaWNpdCBPUFRfREVGQVVMVCBjaGVjayBpbnN0ZWFkIG9mICE9IE9Q VF9VU0VSIHdoZXJlIHRoZSBjb25kaXRpb24NCiAgICBib2R5IGRvZXMgbm90IHNldCBjb25mLg0K ICAtIFJlbW92ZWQgdW5uZWNlc3NhcnkgT1BUX1VTRVIgZ3VhcmQgb24gb3B0aW9uIDEyMQ0KICAt IENoZWNrZWQgaW5ldF9udG9wKCkgcmV0dXJuIHZhbHVlIGluIGRoY3Bfb3B0X3RvX3N0cigpDQoN CnY2Og0KICAtIGRyb3BwZWQgb3B0aW9uIDUzLg0KICAtIFVzZWQgcGFyc2VfdW5zaWduZWQoKSwg cGFyc2VfbGl0ZXJhbCgpLCBwYXJzZV9pcHY0KCkNCiAgICBmcm9tIHBhcnNlLmMgaW5zdGVhZCBv ZiBtYW51YWwgc3RydG91bC9pbmV0X3B0b24uDQogIC0gTW92ZWQgb3B0aW9uLXBhcnNpbmcgdmFy aWFibGVzIGludG8gY2FzZSAzNCBibG9jaw0KICAgIHNjb3BlLg0KICAtIFVzZWQgaHRvbnMoKS9o dG9ubCgpIGZvciBpbnRlZ2VyIGVuY29kaW5nLg0KICAtIFVzZWQgYXNzZXJ0KCkgZm9yIGJvdW5k YXJ5IGNoZWNrcyBpbiBkaGNwX29wdF90b19zdHIoKS4NCiAgLSBVc2VkIHNucHJpbnRmKCkgd2l0 aCAlLipzIGZvciBzdHJpbmcgZm9ybWF0dGluZyBpbg0KICAgIGRoY3Bfb3B0X3RvX3N0cigpLg0K ICAtIFVzZWQgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSBpbnN0ZWFkIG9mIGxpdGVyYWwgNC4NCiAg LSBkaGNwX29wdF90b19zdHIoKSBjaGVja3MgT1BUX1VOU0VUIGZvciBhbGwgc3RhdGVzLA0KICAg IG5vdCBqdXN0IE9QVF9VU0VSLg0KICAtIEFkZGVkIGN1cmx5IGJyYWNrZXRzIGZvciBtdWx0aS1s aW5lIGNvbmRpdGlvbmFscy4NCiAgLSBEcm9wcGVkIHRyYWlsaW5nIGNvbW1hIGFmdGVyIE9QVF9E RUZBVUxUIGluDQogICAgaW5pdGlhbGl6ZXJzIHRvIHJlZHVjZSBsaW5lIGxlbmd0aC4NCg0KdjU6 DQogIC0gUmVuYW1lIGVudW0gdmFsdWVzOiBJTlQ4L0lOVDE2L0lOVDMyL1NJTlQzMiDihpIgVUlO VDgvVUlOVDE2L1VJTlQzMi9JTlQzMg0KICAtIENoYW5nZSBpbnQgbGVuIHRvIHNpemVfdCBsZW4g aW4gZGhjcF9vcHRfcGFyc2UoKSwgcmVtb3ZlIGludCBjYXN0cw0KICAtIE1ha2UgZGhjcF9vcHRf cGFyc2UoKSBzdGF0aWMsIGFkZCBkaGNwX3NldF9vcHQoKSB0byBzdG9yZSBvcHRpb25zIA0KICAg IGRpcmVjdGx5IGluIG9wdHNbXSBhdCBzdGFydHVwIGluc3RlYWQgb2YgZG91YmxlLXBhcnNpbmcg dmlhIGN0eC0+ZGhjcF9vcHRzDQogIC0gQWRkIE9QVF9VU0VSIHRvIGVudW0gb3B0X3N0YXRlIHRv IHByb3RlY3QgdXNlciBvcHRpb25zIGZyb20gYmVpbmcNCiAgICBvdmVyd3JpdHRlbiBieSBidWls dC1pbiBkZWZhdWx0cw0KICAtIEFkZCBkaGNwX29wdF90b19zdHIoKSBmb3IgY29uZl9wcmludCgp IGRpc3BsYXkNCiAgLSBSZW1vdmUgZGhjcF9vcHRzW10gZnJvbSBzdHJ1Y3QgY3R4IGluIHBhc3N0 LmgNCiAgLSBSZW1vdmUgY29uZl9kaGNwX29wdGlvbigpIHdyYXBwZXIgZnJvbSBjb25mLmMNCg0K djQ6DQogIC0gUmVuYW1lZCBjdXN0b21fb3B0cyB0byBkaGNwX29wdHMsIDI1NiBlbnRyaWVzIGlu ZGV4ZWQgYnkgb3B0aW9uDQogICAgY29kZSwgcmVtb3ZlZCBNQVhfQ1VTVE9NX0RIQ1BfT1BUUyBh bmQgY291bnQgZmllbGQuDQogIC0gQ2hhbmdlZCBzdHIgYnVmZmVyIGZyb20gMjU2IHRvIDI1NSBi eXRlcy4NCiAgLSBNb3ZlZCBmdW5jdGlvbiB0byBjb25mLmMgYXMgc3RhdGljIGNvbmZfZGhjcF9v cHRpb24oKSwgcmVuYW1lZA0KICAgIGZyb20gZGhjcF9hZGRfb3B0aW9uKCkuDQogIC0gTWFkZSBk aGNwX29wdF9wYXJzZSgpIG5vbi1zdGF0aWMsIGRlY2xhcmVkIGluIGRoY3AuaA0KICAtIERyb3Bw ZWQgdmFsL2xlbiBmcm9tIGN0eCBzdHJ1Y3Q7IGNvbmZfZGhjcF9vcHRpb24oKSB2YWxpZGF0ZXMN CiAgICB3aXRoIHRlbXAgYnVmZmVyLCBkaGNwKCkgcGFyc2VzIHN0ciBkaXJlY3RseSBpbnRvIG9w dHNbXSBhdA0KICAgIHJlcGx5IHRpbWUuDQogIC0gUmVwbGFjZWQgc3RydG9rX3IoKSArIDI1Ni1i eXRlIGJ1ZmZlciB3aXRoIHN0cmNzcG4oKSArDQogICAgSU5FVF9BRERSU1RSTEVOIGJ1ZmZlci4N CiAgLSBBZGRlZCBESENQX09QVF9TSU5UMzIgZm9yIG9wdGlvbiAyIChUaW1lIE9mZnNldCksIHVz ZXMgc3RydG9sKCkNCiAgICBwZXIgUkZDIDIxMzIgU2VjdGlvbiA4LjIuDQogIC0gQWxsIGVycm9y cyBpbiBkaGNwX29wdF9wYXJzZSgpIHJldHVybiAtMSwgcmVtb3ZlZCBkaWUoKSBjYWxsczsNCiAg ICBjYWxsZXIgaGFuZGxlcyBlcnJvciBtZXNzYWdlIGNvbnNpc3RlbnRseS4NCiAgLSBSZW1vdmVk IHJlZHVuZGFudCAhc2xlbiBjaGVjayBpbiBESENQX09QVF9TVFIgY2FzZS4NCiAgLSBPbWl0dGVk IGV4cGxpY2l0IGFycmF5IHNpemUgZm9yIGRoY3Bfb3B0X3R5cGVzW10sIGFycmF5ZGRlZCBib3Vu ZHMNCiAgICBjaGVjayBiZWZvcmUgbG9va3VwLg0KICAtIEFkZGVkIGVycm5vID0gMCArIGVycm5v IGNoZWNrIGZvciBzdHJ0b3VsKCkgaW4gY2FzZSAzNC4NCiAgLSBGaXhlZCB1c2FnZSB0ZXh0OiAi U2V0IERIQ1Agb3B0aW9uIENPREUgdG8gVkFMIi4NCiAgLSBJbXByb3ZlZCBtYW4gcGFnZTogYWRk ZWQgZm9ybWF0IGRlc2NyaXB0aW9uIGFuZCBleGFtcGxlcw0KDQp2MzoNCiAgLSBSZXBsYWNlZCBE SENQX09QVF9JTlRFR0VSIHdpdGggc2VwYXJhdGUgREhDUF9PUFRfSU5UOC9JTlQxNi9JTlQzMg0K ICAgIGVudW1zLCByZW1vdmVkIGRoY3Bfb3B0X2ludF93aWR0aFtdIGFycmF5Lg0KICAtIFNoYXJl ZCBsb2dpYyBiZXR3ZWVuIERIQ1BfT1BUX0lQVjQgYW5kIERIQ1BfT1BUX0lQVjRfTElTVCDigJQg cGFyc2UNCiAgICBib3RoIGFzIGxpc3QsIGVycm9yIGlmID4xIGluIHNpbmdsZSBjYXNlLg0KICAt IEFkZGVkIGVycm5vID0gMCBiZWZvcmUgc3RydG91bCgpIGFuZCBjaGVjayBhZnRlci4NCiAgLSBG aXhlZCByYW5nZSBjaGVjazogMVVMTCA8PCAod2lkdGggKiA4KSBmb3IgYWxsIHdpZHRocyBpbmNs dWRpbmcNCiAgICB3aWR0aD09NC4NCiAgLSBzdHJuY3B5IOKGkiBtZW1jcHkgZm9yIERIQ1BfT1BU X1NUUi4NCiAgLSBNb3ZlZCBlbnVtIHRvIGRoY3AuYyBzaW5jZSBub3QgdXNlZCBpbiBvdGhlciBm aWxlcy4NCiAgLSBSZW1vdmVkIG9wdGlvbnMgNTUsIDYxIChjbGllbnQtb25seSksIDExOSAoRE5T IGNvbXByZXNzaW9uLCB1c2UNCiAgICAtLWRoY3Atc2VhcmNoIGluc3RlYWQpLCAzMyAoSVAgcGFp cnMgbm90IHN1cHBvcnRlZCkuDQogIC0gREhDUF9PUFRfUEFSU0VfQlVGIDEwMjQg4oaSIGNoYXIg dG1wWzI1Nl0uDQogIC0gVXBncmFkZWQgZGhjcF9hZGRfb3B0aW9uKCkgdG8gY2FsbCBkaGNwX29w dF9wYXJzZSgpIGFuZCBwb3B1bGF0ZQ0KICAgIHZhbFtdL2xlbi4NCiAgLSBBbGlnbmVkIGFycmF5 IGVudHJpZXMgZm9yIHJlYWRhYmlsaXR5Lg0KICAtIEFkZGVkIHRhYiBhZnRlciBAREhDUF9PUFRf SVBWNF9MSVNUOiBpbiBrZXJuZWxkb2MuDQogIC0gUmVqZWN0IGVtcHR5IHZhbHVlIHN0cmluZ3Mg YmVmb3JlIHBhcnNpbmcNCiAgLSBSZWplY3QgbGVhZGluZy90cmFpbGluZy9jb25zZWN1dGl2ZSBj b21tYXMgaW4gSVAgbGlzdCB2YWx1ZXMuDQoNCnYyOg0KICAtIFJlcGxhY2VkIHN0cnVjdCBsb29r dXAgdGFibGUgKyBkaGNwX29wdF90eXBlX2xvb2t1cCgpIGZ1bmN0aW9uIHdpdGggZmxhdCBkaGNw X29wdF90eXBlc1syNTZdIGFycmF5IGluZGV4ZWQgYnkgY29kZS4NCiAgLSBDb25zb2xpZGF0ZWQg REhDUF9PUFRfVUlOVDgvVUlOVDE2L1VJTlQzMiBpbnRvIHNpbmdsZSBESENQX09QVF9JTlRFR0VS IHdpdGggZGhjcF9vcHRfaW50X3dpZHRoWzI1Nl0gdGFibGUuDQogIC0gRHJvcHBlZCBESENQX09Q VF9ST1VURVMgLyBvcHRpb24gMTIxIGVudGlyZWx5Lg0KICAtIEFkZGVkIGtlcm5lbGRvYyBmb3Ig ZW51bSBkaGNwX29wdF90eXBlIHZhbHVlcy4NCiAgLSBSZW1vdmVkIGN1cmx5IGJyYWNlcyBmcm9t IHN3aXRjaCBjYXNlcywgZGVjbGFyYXRpb25zIGJlZm9yZSBzd2l0Y2guDQogIC0gQWRkZWQgbmV3 bGluZXMgYmVmb3JlIHJldHVybiBzdGF0ZW1lbnRzLg0KICAtIENoYW5nZWQgSVAgbGlzdCBkZWxp bWl0ZXIgZnJvbSBzcGFjZSB0byBjb21tYSAoLS1kaGNwLW9wdCA2LDEuMS4xLjEsOC44LjguOCku DQogIC0gRGVmaW5lZCBESENQX09QVF9QQVJTRV9CVUYgY29uc3RhbnQgZm9yIGJhcmUgMTAyNC4N CiAgLSBBZGRlZCBsZW4gYW5kIHZhbFsyNTVdIGZpZWxkcyB0byBzdHJ1Y3QgaGVyZSAobW92ZWQg ZnJvbSBwYXRjaCAxKS4NCiAgLSBBZGRlZCBrZXJuZWxkb2MgZm9yIEBjdXN0b21fb3B0cy5sZW4g YW5kIEBjdXN0b21fb3B0cy52YWwuDQogIC0gV2lyZWQgZGhjcF9vcHRfcGFyc2UoKSBpbnRvIGNh c2UgMzIgKC0tZGhjcC1ib290KSB0byBwb3B1bGF0ZSB2YWwvbGVuLg0KLS0tDQogY29uZi5jICB8 ICAyNSArKysrLQ0KIGRoY3AuYyAgfCAzMzMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrLS0tLS0NCiBkaGNwLmggIHwgICAyICsNCiBwYXNzdC4xIHwg IDQxICsrKysrKysNCiA0IGZpbGVzIGNoYW5nZWQsIDM3NSBpbnNlcnRpb25zKCspLCAyNiBkZWxl dGlvbnMoLSkNCg0KZGlmZiAtLWdpdCBhL2NvbmYuYyBiL2NvbmYuYw0KaW5kZXggMTQ5YTRjNzku LmUxMzY2ZTAxIDEwMDY0NA0KLS0tIGEvY29uZi5jDQorKysgYi9jb25mLmMNCkBAIC00Nyw2ICs0 Nyw3IEBADQogI2luY2x1ZGUgImxpbmVyZWFkLmgiDQogI2luY2x1ZGUgImlzb2xhdGlvbi5oIg0K ICNpbmNsdWRlICJsb2cuaCINCisjaW5jbHVkZSAiZGhjcC5oIg0KICNpbmNsdWRlICJ2aG9zdF91 c2VyLmgiDQogI2luY2x1ZGUgImVwb2xsX2N0bC5oIg0KICNpbmNsdWRlICJjb25mLmgiDQpAQCAt NjMyLDcgKzYzMyw4IEBAIHN0YXRpYyB2b2lkIHVzYWdlKGNvbnN0IGNoYXIgKm5hbWUsIEZJTEUg KmYsIGludCBzdGF0dXMpDQogCQkiICAtUywgLS1zZWFyY2ggTElTVAlTcGFjZS1zZXBhcmF0ZWQg bGlzdCwgc2VhcmNoIGRvbWFpbnNcbiINCiAJCSIgICAgYSBzaW5nbGUsIGVtcHR5IG9wdGlvbiBk aXNhYmxlcyB0aGUgRE5TIHNlYXJjaCBsaXN0XG4iDQogCQkiICAtSCwgLS1ob3N0bmFtZSBOQU1F IAlIb3N0bmFtZSB0byBjb25maWd1cmUgY2xpZW50IHdpdGhcbiINCi0JCSIgIC0tZnFkbiBOQU1F CQlGUUROIHRvIGNvbmZpZ3VyZSBjbGllbnQgd2l0aFxuIik7DQorCQkiICAtLWZxZG4gTkFNRQkJ RlFETiB0byBjb25maWd1cmUgY2xpZW50IHdpdGhcbiINCisJCSIgIC0tZGhjcC1vcHQgQ09ERSxW QUwJU2V0IERIQ1Agb3B0aW9uIENPREUgdG8gVkFMXG4iKTsNCiAJaWYgKHN0cnN0cihuYW1lLCAi cGFzdGEiKSkNCiAJCUZQUklOVEYoZiwgIiAgICBkZWZhdWx0OiBkb24ndCB1c2UgYW55IHNlYXJj aCBsaXN0XG4iKTsNCiAJZWxzZQ0KQEAgLTg2MSw2ICs4NjMsMTAgQEAgc3RhdGljIHZvaWQgY29u Zl9wcmludChjb25zdCBzdHJ1Y3QgY3R4ICpjKQ0KIAkJCWluZm8oIiAgICByb3V0ZXI6ICVzIiwN CiAJCQkgICAgIGluZXRfbnRvcChBRl9JTkVULCAmYy0+aXA0Lmd1ZXN0X2d3LA0KIAkJCQkgICAg ICAgYnVmLCBzaXplb2YoYnVmKSkpOw0KKwkJCWZvciAoaSA9IDE7IGkgPCAyNTU7IGkrKykgew0K KwkJCQlpZiAoZGhjcF9vcHRfdG9fc3RyKGksIGJ1Ziwgc2l6ZW9mKGJ1ZikpKQ0KKwkJCQkJaW5m bygiICAgIG9wdGlvbiAldTogJXMiLCBpLCBidWYpOw0KKwkJCX0NCiAJCX0NCiANCiAJCWZvciAo aSA9IDA7IGkgPCBBUlJBWV9TSVpFKGMtPmlwNC5kbnMpOyBpKyspIHsNCkBAIC0xMzE3LDYgKzEz MjMsNyBAQCB2b2lkIGNvbmYoc3RydWN0IGN0eCAqYywgaW50IGFyZ2MsIGNoYXIgKiphcmd2KQ0K IAkJeyJjb25mLXBhdGgiLAlyZXF1aXJlZF9hcmd1bWVudCwJTlVMTCwJCSdjJyB9LA0KIAkJeyJj aHJvb3QtZmFsbGJhY2siLCBub19hcmd1bWVudCwJTlVMTCwgCQkzMiB9LA0KIAkJeyJuby1waWRu cyIsCW5vX2FyZ3VtZW50LAkJTlVMTCwJCTMzIH0sDQorCQl7ImRoY3Atb3B0IiwgcmVxdWlyZWRf YXJndW1lbnQsCQlOVUxMLAkJMzQgfSwNCiAJCXsgMCB9LA0KIAl9Ow0KIAljb25zdCBjaGFyICpv cHRzdHJpbmcgPSAiK2RxZmVsOmhzOmM6RjpJOnA6UDptOmE6bjpNOmc6aTpvOkQ6UzpIOjQ2MXQ6 dTpUOlU6IjsNCkBAIC0xMzMxLDYgKzEzMzgsNyBAQCB2b2lkIGNvbmYoc3RydWN0IGN0eCAqYywg aW50IGFyZ2MsIGNoYXIgKiphcmd2KQ0KIAl1bnNpZ25lZCBpbnQgaWZpNCA9IDAsIGlmaTYgPSAw Ow0KIAlib29sIG9wdF9hX2lzX3ByZWZpeCA9IGZhbHNlOw0KIAljb25zdCBjaGFyICpsb2dmaWxl ID0gTlVMTDsNCisJdW5zaWduZWQgbG9uZyBvcHRjb2RlOw0KIAljaGFyICpydW5hcyA9IE5VTEw7 DQogCXNpemVfdCBsb2dzaXplID0gMDsNCiAJdWludDhfdCBvcHRfbiA9IDA7DQpAQCAtMTU2Nyw2 ICsxNTc1LDIxIEBAIHZvaWQgY29uZihzdHJ1Y3QgY3R4ICpjLCBpbnQgYXJnYywgY2hhciAqKmFy Z3YpDQogDQogCQkJYy0+bm9fcGlkbnMgPSB0cnVlOw0KIAkJCWJyZWFrOw0KKwkJY2FzZSAzNDoN CisJCQlwID0gb3B0YXJnOw0KKw0KKwkJCWlmICghcGFyc2VfdW5zaWduZWQoJnAsIDAsICZvcHRj b2RlKSB8fA0KKwkJCSAgICAhcGFyc2VfbGl0ZXJhbCgmcCwgIiwiKSkgew0KKwkJCQlkaWUoIi0t ZGhjcC1vcHQgcmVxdWlyZXMgQ09ERSxWQUxVRSBmb3JtYXQiKTsNCisJCQl9DQorDQorCQkJaWYg KG9wdGNvZGUgPCAxIHx8IG9wdGNvZGUgPiAyNTQpIHsNCisJCQkJZGllKCJESENQIG9wdGlvbiBj b2RlIG11c3QgYmUgMS0yNTQ6ICVzIiwNCisJCQkJICAgIG9wdGFyZyk7DQorCQkJfQ0KKw0KKwkJ CWRoY3Bfc2V0X29wdChvcHRjb2RlLCBwKTsNCisJCQlicmVhazsNCiAJCWNhc2UgJ2QnOg0KIAkJ CWMtPmRlYnVnID0gMTsNCiAJCQljLT5xdWlldCA9IDA7DQpkaWZmIC0tZ2l0IGEvZGhjcC5jIGIv ZGhjcC5jDQppbmRleCA0MjMwYzhiNS4uZmUwNjIyNGEgMTAwNjQ0DQotLS0gYS9kaGNwLmMNCisr KyBiL2RoY3AuYw0KQEAgLTIzLDYgKzIzLDcgQEANCiAjaW5jbHVkZSA8dW5pc3RkLmg+DQogI2lu Y2x1ZGUgPHN0cmluZy5oPg0KICNpbmNsdWRlIDxsaW1pdHMuaD4NCisjaW5jbHVkZSA8ZXJybm8u aD4NCiANCiAjaW5jbHVkZSAidXRpbC5oIg0KICNpbmNsdWRlICJpcC5oIg0KQEAgLTMyLDE1ICsz MywxOCBAQA0KICNpbmNsdWRlICJ0YXAuaCINCiAjaW5jbHVkZSAibG9nLmgiDQogI2luY2x1ZGUg ImRoY3AuaCINCisjaW5jbHVkZSAicGFyc2UuaCINCiANCiAvKioNCiAgKiBlbnVtIG9wdF9jb25m IC0gREhDUCBvcHRpb24gY29uZmlndXJhdGlvbg0KICAqIEBPUFRfVU5TRVQ6CQlPcHRpb24gbm90 IGNvbmZpZ3VyZWQNCiAgKiBAT1BUX0RFRkFVTFQ6CU9wdGlvbiBkZXJpdmVkIGZyb20gaG9zdCBj b25maWd1cmF0aW9uDQorICogQE9QVF9VU0VSOgkJT3B0aW9uIHNldCB2aWEgLS1kaGNwLW9wdCBj b21tYW5kIGxpbmUNCiAgKi8NCiBlbnVtIG9wdF9jb25mIHsNCiAJT1BUX1VOU0VUID0gMCwNCiAJ T1BUX0RFRkFVTFQsDQorCU9QVF9VU0VSLA0KIH07DQogDQogLyoqDQpAQCAtNTAsNyArNTQsNyBA QCBlbnVtIG9wdF9jb25mIHsNCiAgKiBAczoJCU9wdGlvbiBwYXlsb2FkIGZyb20gc2VydmVyDQog ICogQGNsZW46CUxlbmd0aCBvZiBvcHRpb24gcmVjZWl2ZWQgZnJvbSBjbGllbnQsIC0xIGlmIG5v dCByZWNlaXZlZA0KICAqIEBjOgkJT3B0aW9uIHBheWxvYWQgZnJvbSBjbGllbnQNCi0gKiBAY29u ZjoJT3B0aW9uIGNvbmZpZ3VyYXRpb24gKHVuc2V0IG9yIGRlZmF1bHQpDQorICogQGNvbmY6CU9w dGlvbiBjb25maWd1cmF0aW9uICh1bnNldCwgZGVmYXVsdCwgb3IgdXNlcikNCiAgKi8NCiBzdHJ1 Y3Qgb3B0IHsNCiAJaW50IHNlbnQ7DQpAQCAtODUsMTcgKzg5LDIwIEBAIHN0YXRpYyBzdHJ1Y3Qg b3B0IG9wdHNbMjU2XTsNCiAgKi8NCiB2b2lkIGRoY3BfaW5pdCh2b2lkKQ0KIHsNCi0JLyogTWFz ayAqLw0KLQlvcHRzWzFdICA9IChzdHJ1Y3Qgb3B0KSB7IDAsIDQsIHsgIDAgfSwgMCwgeyAwIH0s IE9QVF9ERUZBVUxUIH07DQotCS8qIFJvdXRlciAqLw0KLQlvcHRzWzNdICA9IChzdHJ1Y3Qgb3B0 KSB7IDAsIDQsIHsgIDAgfSwgMCwgeyAwIH0sIE9QVF9ERUZBVUxUIH07DQotCS8qIExlYXNlIHRp bWUgKi8NCi0Jb3B0c1s1MV0gPSAoc3RydWN0IG9wdCkgeyAwLCA0LCB7IDB4ZmYsIDB4ZmYsIDB4 ZmYsIDB4ZmYgfSwNCi0JCQkJCQkgICAgICAgMCwgeyAwIH0sIE9QVF9ERUZBVUxUIH07DQorCWlm IChvcHRzWzFdLmNvbmYgIT0gT1BUX1VTRVIpIAkJCS8qIE1hc2sgKi8NCisJCW9wdHNbMV0gPSAo c3RydWN0IG9wdCkgeyAwLCA0LCB7ICAwIH0sIDAsIHsgMCB9LCBPUFRfREVGQVVMVCB9Ow0KKwlp ZiAob3B0c1szXS5jb25mICE9IE9QVF9VU0VSKSAJCQkvKiBSb3V0ZXIgKi8NCisJCW9wdHNbM10g PSAoc3RydWN0IG9wdCkgeyAwLCA0LCB7ICAwIH0sIDAsIHsgMCB9LCBPUFRfREVGQVVMVCB9Ow0K KwlpZiAob3B0c1s1MV0uY29uZiAhPSBPUFRfVVNFUikgewkJLyogTGVhc2UgdGltZSAqLw0KKwkJ b3B0c1s1MV0gPSAoc3RydWN0IG9wdCkgeyAwLCA0LCB7IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYg fSwNCisJCQkJCSAgICAgICAwLCB7IDAgfSwgT1BUX0RFRkFVTFQgfTsNCisJfQ0KIAkvKiBUeXBl ICovDQogCW9wdHNbNTNdID0gKHN0cnVjdCBvcHQpIHsgMCwgMSwgeyAgMCB9LCAwLCB7IDAgfSwg T1BUX0RFRkFVTFQgfTsNCi0JLyogU2VydmVyIElEICovDQotCW9wdHNbNTRdID0gKHN0cnVjdCBv cHQpIHsgMCwgNCwgeyAgMCB9LCAwLCB7IDAgfSwgT1BUX0RFRkFVTFQgfTsNCisJaWYgKG9wdHNb NTRdLmNvbmYgIT0gT1BUX1VTRVIpIHsJCS8qIFNlcnZlciBJRCAqLw0KKwkJb3B0c1s1NF0gPSAo c3RydWN0IG9wdCkgeyAwLCA0LCB7ICAwIH0sIDAsIHsgMCB9LA0KKwkJCQkJCQlPUFRfREVGQVVM VCB9Ow0KKwl9DQogfQ0KIA0KIC8qKg0KQEAgLTE0MCw2ICsxNDcsMjcyIEBAIHN0cnVjdCBtc2cg ew0KIAl1aW50OF90IG9bT1BUX01BWCArIDEgLyogRW5kIG9wdGlvbiAqLyBdOw0KIH0gX19hdHRy aWJ1dGVfXygoX19wYWNrZWRfXykpOw0KIA0KKy8qKg0KKyAqIGVudW0gZGhjcF9vcHRfdHlwZSAt IERIQ1Agb3B0aW9uIHZhbHVlIHR5cGVzIHBlciBSRkMgMjEzMg0KKyAqIEBESENQX09QVF9OT05F OglVbnN1cHBvcnRlZCBvciB1bmtub3duIG9wdGlvbg0KKyAqIEBESENQX09QVF9TVFI6CVZhcmlh YmxlLWxlbmd0aCBzdHJpbmcNCisgKiBAREhDUF9PUFRfSVBWNDoJU2luZ2xlIElQdjQgYWRkcmVz cw0KKyAqIEBESENQX09QVF9JUFY0X0xJU1Q6CU11bHRpcGxlIElQdjQgYWRkcmVzc2VzLCBjb21t YS1zZXBhcmF0ZWQNCisgKiBAREhDUF9PUFRfVUlOVDg6CVVuc2lnbmVkIDgtYml0IGludGVnZXIN CisgKiBAREhDUF9PUFRfVUlOVDE2OglVbnNpZ25lZCAxNi1iaXQgaW50ZWdlcg0KKyAqIEBESENQ X09QVF9VSU5UMzI6CVVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VyDQorICogQERIQ1BfT1BUX0lOVDMy OglTaWduZWQgMzItYml0IGludGVnZXINCisgKi8NCitlbnVtIGRoY3Bfb3B0X3R5cGUgew0KKwlE SENQX09QVF9OT05FLA0KKwlESENQX09QVF9TVFIsDQorCURIQ1BfT1BUX0lQVjQsDQorCURIQ1Bf T1BUX0lQVjRfTElTVCwNCisJREhDUF9PUFRfVUlOVDgsDQorCURIQ1BfT1BUX1VJTlQxNiwNCisJ REhDUF9PUFRfVUlOVDMyLA0KKwlESENQX09QVF9JTlQzMiwNCit9Ow0KKw0KKy8qKg0KKyAqIGRo Y3Bfb3B0X3R5cGVzIC0gTWFwcyBvcHRpb24gY29kZSB0byBSRkMgMjEzMiB2YWx1ZSB0eXBlLCBp bmRleGVkIGJ5IGNvZGUNCisgKi8NCitzdGF0aWMgY29uc3QgZW51bSBkaGNwX29wdF90eXBlIGRo Y3Bfb3B0X3R5cGVzW10gPSB7DQorCVsxXSAgID0gREhDUF9PUFRfSVBWNCwJCS8qIFN1Ym5ldCBN YXNrICovDQorCVsyXSAgID0gREhDUF9PUFRfSU5UMzIsCS8qIFRpbWUgT2Zmc2V0ICovDQorCVsz XSAgID0gREhDUF9PUFRfSVBWNF9MSVNULAkvKiBSb3V0ZXIgKi8NCisJWzRdICAgPSBESENQX09Q VF9JUFY0X0xJU1QsCS8qIFRpbWUgU2VydmVyICovDQorCVs1XSAgID0gREhDUF9PUFRfSVBWNF9M SVNULAkvKiBOYW1lIFNlcnZlciAqLw0KKwlbNl0gICA9IERIQ1BfT1BUX0lQVjRfTElTVCwJLyog RG9tYWluIE5hbWUgU2VydmVyICovDQorCVs3XSAgID0gREhDUF9PUFRfSVBWNF9MSVNULAkvKiBM b2cgU2VydmVyICovDQorCVs4XSAgID0gREhDUF9PUFRfSVBWNF9MSVNULAkvKiBDb29raWUgU2Vy dmVyICovDQorCVs5XSAgID0gREhDUF9PUFRfSVBWNF9MSVNULAkvKiBMUFIgU2VydmVyICovDQor CVsxMF0gID0gREhDUF9PUFRfSVBWNF9MSVNULAkvKiBJbXByZXNzIFNlcnZlciAqLw0KKwlbMTFd ICA9IERIQ1BfT1BUX0lQVjRfTElTVCwJLyogUmVzb3VyY2UgTG9jYXRpb24gU2VydmVyICovDQor CVsxMl0gID0gREhDUF9PUFRfU1RSLAkJLyogSG9zdCBOYW1lICovDQorCVsxM10gID0gREhDUF9P UFRfVUlOVDE2LAkvKiBCb290IEZpbGUgU2l6ZSAqLw0KKwlbMTVdICA9IERIQ1BfT1BUX1NUUiwJ CS8qIERvbWFpbiBOYW1lICovDQorCVsxNl0gID0gREhDUF9PUFRfSVBWNCwJCS8qIFN3YXAgU2Vy dmVyICovDQorCVsxN10gID0gREhDUF9PUFRfU1RSLAkJLyogUm9vdCBQYXRoICovDQorCVsxOV0g ID0gREhDUF9PUFRfVUlOVDgsCS8qIElQIEZvcndhcmRpbmcgKi8NCisJWzIzXSAgPSBESENQX09Q VF9VSU5UOCwJLyogRGVmYXVsdCBJUCBUVEwgKi8NCisJWzI2XSAgPSBESENQX09QVF9VSU5UMTYs CS8qIEludGVyZmFjZSBNVFUgKi8NCisJWzI4XSAgPSBESENQX09QVF9JUFY0LAkJLyogQnJvYWRj YXN0IEFkZHJlc3MgKi8NCisJWzM3XSAgPSBESENQX09QVF9VSU5UOCwJLyogVENQIERlZmF1bHQg VFRMICovDQorCVszOF0gID0gREhDUF9PUFRfVUlOVDMyLAkvKiBUQ1AgS2VlcGFsaXZlIEludGVy dmFsICovDQorCVs0MF0gID0gREhDUF9PUFRfU1RSLAkJLyogTklTIERvbWFpbiBOYW1lICovDQor CVs0MV0gID0gREhDUF9PUFRfSVBWNF9MSVNULAkvKiBOSVMgU2VydmVycyAqLw0KKwlbNDJdICA9 IERIQ1BfT1BUX0lQVjRfTElTVCwJLyogTlRQIFNlcnZlcnMgKi8NCisJWzQ0XSAgPSBESENQX09Q VF9JUFY0X0xJU1QsCS8qIE5ldEJJT1MgTmFtZSBTZXJ2ZXIgKi8NCisJWzUxXSAgPSBESENQX09Q VF9VSU5UMzIsCS8qIElQIEFkZHJlc3MgTGVhc2UgVGltZSAqLw0KKwlbNTRdICA9IERIQ1BfT1BU X0lQVjQsCQkvKiBTZXJ2ZXIgSWRlbnRpZmllciAqLw0KKwlbNThdICA9IERIQ1BfT1BUX1VJTlQz MiwJLyogUmVuZXdhbCAoVDEpIFRpbWUgKi8NCisJWzU5XSAgPSBESENQX09QVF9VSU5UMzIsCS8q IFJlYmluZGluZyAoVDIpIFRpbWUgKi8NCisJWzYwXSAgPSBESENQX09QVF9TVFIsCQkvKiBWZW5k b3IgQ2xhc3MgSWRlbnRpZmllciAqLw0KKwlbNjZdICA9IERIQ1BfT1BUX1NUUiwJCS8qIFRGVFAg U2VydmVyIE5hbWUgKi8NCisJWzY3XSAgPSBESENQX09QVF9TVFIsCQkvKiBCb290ZmlsZSBOYW1l ICovDQorCVsyNTJdID0gREhDUF9PUFRfU1RSLAkJLyogV1BBRCBVUkwgKi8NCit9Ow0KKw0KKy8q Kg0KKyAqIGRoY3Bfb3B0X3BhcnNlKCkgLSBQYXJzZSBhIERIQ1Agb3B0aW9uIHZhbHVlDQorICog QGNvZGU6CURIQ1Agb3B0aW9uIGNvZGUNCisgKiBAc3RyOglWYWx1ZSBzdHJpbmcgZnJvbSBjb21t YW5kIGxpbmUNCisgKiBAYnVmOglPdXRwdXQgYnVmZmVyIGZvciBiaW5hcnkgdmFsdWUNCisgKiBA YnVmX2xlbjoJU2l6ZSBvZiBvdXRwdXQgYnVmZmVyDQorICoNCisgKiBSZXR1cm46IG51bWJlciBv ZiBieXRlcyB3cml0dGVuIHRvIEBidWYsIG9yIC0xIG9uIGVycm9yDQorICovDQorc3RhdGljIGlu dCBkaGNwX29wdF9wYXJzZSh1aW50OF90IGNvZGUsIGNvbnN0IGNoYXIgKnN0ciwNCisJCQkgIHVp bnQ4X3QgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4pDQorew0KKwllbnVtIGRoY3Bfb3B0X3R5cGUgdHlw ZTsNCisJdW5zaWduZWQgbG9uZyB2YWw7DQorCXVpbnQ4X3Qgd2lkdGg7DQorCXNpemVfdCBzbGVu Ow0KKwlzaXplX3QgbGVuOw0KKwljaGFyICplbmQ7DQorDQorCWlmIChjb2RlID49IEFSUkFZX1NJ WkUoZGhjcF9vcHRfdHlwZXMpKQ0KKwkJcmV0dXJuIC0xOw0KKw0KKwl0eXBlID0gZGhjcF9vcHRf dHlwZXNbY29kZV07DQorDQorCWlmICghKnN0cikNCisJCXJldHVybiAtMTsNCisNCisJc3dpdGNo ICh0eXBlKSB7DQorCWNhc2UgREhDUF9PUFRfTk9ORToNCisJCXJldHVybiAtMTsNCisJY2FzZSBE SENQX09QVF9JUFY0Og0KKwljYXNlIERIQ1BfT1BUX0lQVjRfTElTVDoNCisJCWxlbiA9IDA7DQor DQorCQlkbyB7DQorCQkJaWYgKGxlbiArIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikgPiBidWZfbGVu KQ0KKwkJCQlyZXR1cm4gLTE7DQorDQorCQkJaWYgKCFwYXJzZV9pcHY0KCZzdHIsDQorCQkJCQko c3RydWN0IGluX2FkZHIgKikoYnVmICsgbGVuKSkpDQorCQkJCXJldHVybiAtMTsNCisNCisJCQls ZW4gKz0gc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKTsNCisNCisJCQlpZiAodHlwZSA9PSBESENQX09Q VF9JUFY0KQ0KKwkJCQlicmVhazsNCisJCX0gd2hpbGUgKHBhcnNlX2xpdGVyYWwoJnN0ciwgIiwi KSk7DQorDQorCQlpZiAoIWxlbiB8fCAhcGFyc2VfZW9pKHN0cikpDQorCQkJcmV0dXJuIC0xOw0K Kw0KKwkJcmV0dXJuIGxlbjsNCisJY2FzZSBESENQX09QVF9VSU5UODoNCisJY2FzZSBESENQX09Q VF9VSU5UMTY6DQorCWNhc2UgREhDUF9PUFRfVUlOVDMyOg0KKwljYXNlIERIQ1BfT1BUX0lOVDMy Og0KKwkJaWYgKHR5cGUgPT0gREhDUF9PUFRfVUlOVDgpDQorCQkJd2lkdGggPSAxOw0KKwkJZWxz ZSBpZiAodHlwZSA9PSBESENQX09QVF9VSU5UMTYpDQorCQkJd2lkdGggPSAyOw0KKwkJZWxzZQ0K KwkJCXdpZHRoID0gNDsNCisNCisJCWlmIChidWZfbGVuIDwgd2lkdGgpDQorCQkJcmV0dXJuIC0x Ow0KKw0KKwkJaWYgKHR5cGUgPT0gREhDUF9PUFRfSU5UMzIpIHsNCisJCQlsb25nIHN2YWw7DQor DQorCQkJZXJybm8gPSAwOw0KKwkJCXN2YWwgPSBzdHJ0b2woc3RyLCAmZW5kLCAwKTsNCisJCQlp ZiAoKmVuZCB8fCBlcnJubyB8fA0KKwkJCSAgICBzdmFsIDwgSU5UMzJfTUlOIHx8IHN2YWwgPiBJ TlQzMl9NQVgpDQorCQkJCXJldHVybiAtMTsNCisJCQl2YWwgPSAodWludDMyX3Qpc3ZhbDsNCisJ CX0gZWxzZSB7DQorCQkJaWYgKCFwYXJzZV91bnNpZ25lZCgmc3RyLCAwLCAmdmFsKSB8fA0KKwkJ CSAgICAhcGFyc2VfZW9pKHN0cikgfHwNCisJCQkgICAgdmFsID49ICgxVUxMIDw8ICh3aWR0aCAq IDgpKSkNCisJCQkJcmV0dXJuIC0xOw0KKwkJfQ0KKw0KKwkJaWYgKHR5cGUgPT0gREhDUF9PUFRf VUlOVDE2KSB7DQorCQkJdWludDE2X3QgdjE2ID0gaHRvbnModmFsKTsNCisJCQltZW1jcHkoYnVm LCAmdjE2LCBzaXplb2YodjE2KSk7DQorCQl9IGVsc2UgaWYgKHR5cGUgPT0gREhDUF9PUFRfVUlO VDMyIHx8DQorCQkJICAgdHlwZSA9PSBESENQX09QVF9JTlQzMikgew0KKwkJCXVpbnQzMl90IHYz MiA9IGh0b25sKHZhbCk7DQorCQkJbWVtY3B5KGJ1ZiwgJnYzMiwgc2l6ZW9mKHYzMikpOw0KKwkJ fSBlbHNlIHsNCisJCQlidWZbMF0gPSB2YWw7DQorCQl9DQorDQorCQlyZXR1cm4gd2lkdGg7DQor CWNhc2UgREhDUF9PUFRfU1RSOg0KKwkJc2xlbiA9IHN0cmxlbihzdHIpOw0KKw0KKwkJaWYgKHNs ZW4gPiBidWZfbGVuKQ0KKwkJCXJldHVybiAtMTsNCisNCisJCW1lbWNweShidWYsIHN0ciwgc2xl bik7DQorDQorCQlyZXR1cm4gc2xlbjsNCisJfQ0KKw0KKwlyZXR1cm4gLTE7DQorfQ0KKw0KKy8q Kg0KKyAqIGRoY3Bfc2V0X29wdCgpIC0gUGFyc2UgYW5kIHN0b3JlIGEgdXNlci1zcGVjaWZpZWQg REhDUCBvcHRpb24NCisgKiBAY29kZToJREhDUCBvcHRpb24gY29kZQ0KKyAqIEB2YWxfc3RyOglW YWx1ZSBzdHJpbmcgZnJvbSBjb21tYW5kIGxpbmUNCisgKi8NCit2b2lkIGRoY3Bfc2V0X29wdCh1 aW50OF90IGNvZGUsIGNvbnN0IGNoYXIgKnZhbF9zdHIpDQorew0KKwlpbnQgcmV0Ow0KKw0KKwly ZXQgPSBkaGNwX29wdF9wYXJzZShjb2RlLCB2YWxfc3RyLCBvcHRzW2NvZGVdLnMsIHNpemVvZihv cHRzW2NvZGVdLnMpKTsNCisJaWYgKHJldCA8IDApDQorCQlkaWUoIkludmFsaWQgdmFsdWUgZm9y IERIQ1Agb3B0aW9uICV1OiAlcyIsIGNvZGUsIHZhbF9zdHIpOw0KKw0KKwlvcHRzW2NvZGVdLnNs ZW4gPSByZXQ7DQorCW9wdHNbY29kZV0uY29uZiA9IE9QVF9VU0VSOw0KK30NCisNCisvKioNCisg KiBkaGNwX29wdF90b19zdHIoKSAtIFJlbmRlciBhIGJpbmFyeSBESENQIG9wdGlvbiB2YWx1ZSB0 byBhIHByaW50YWJsZSBzdHJpbmcNCisgKiBAY29kZToJREhDUCBvcHRpb24gY29kZQ0KKyAqIEBi dWY6CU91dHB1dCBzdHJpbmcgYnVmZmVyDQorICogQGJ1Zl9sZW46CVNpemUgb2Ygb3V0cHV0IGJ1 ZmZlcg0KKyAqDQorICogUmV0dXJuOiBwb2ludGVyIHRvIEBidWYgaWYgb3B0aW9uIGlzIHNldCwg TlVMTCBvdGhlcndpc2UNCisgKi8NCitjb25zdCBjaGFyICpkaGNwX29wdF90b19zdHIodWludDhf dCBjb2RlLCBjaGFyICpidWYsIHNpemVfdCBidWZfbGVuKQ0KK3sNCisJZW51bSBkaGNwX29wdF90 eXBlIHR5cGU7DQorCXVuc2lnbmVkIGludCBzbGVuOw0KKwl1bnNpZ25lZCBpbnQgaTsNCisJaW50 IG9mZiA9IDA7DQorDQorCWlmIChvcHRzW2NvZGVdLmNvbmYgPT0gT1BUX1VOU0VUKQ0KKwkJcmV0 dXJuIE5VTEw7DQorDQorCWFzc2VydChjb2RlIDwgQVJSQVlfU0laRShkaGNwX29wdF90eXBlcykp Ow0KKw0KKwl0eXBlID0gZGhjcF9vcHRfdHlwZXNbY29kZV07DQorCXNsZW4gPSBvcHRzW2NvZGVd LnNsZW47DQorDQorCXN3aXRjaCAodHlwZSkgew0KKwljYXNlIERIQ1BfT1BUX0lQVjQ6DQorCWNh c2UgREhDUF9PUFRfSVBWNF9MSVNUOg0KKwkJZm9yIChpID0gMDsgaSArIHNpemVvZihzdHJ1Y3Qg aW5fYWRkcikgPD0gc2xlbjsNCisJCSAgICAgaSArPSBzaXplb2Yoc3RydWN0IGluX2FkZHIpKSB7 DQorCQkJaWYgKG9mZikgew0KKwkJCQlpZiAob2ZmICsgMSA+PSAoaW50KWJ1Zl9sZW4pDQorCQkJ CQlyZXR1cm4gTlVMTDsNCisJCQkJYnVmW29mZisrXSA9ICcsJzsNCisJCQl9DQorCQkJaWYgKCFp bmV0X250b3AoQUZfSU5FVCwgb3B0c1tjb2RlXS5zICsgaSwNCisJCQkJICAgICAgIGJ1ZiArIG9m ZiwgYnVmX2xlbiAtIG9mZikpDQorCQkJCXJldHVybiBOVUxMOw0KKwkJCW9mZiArPSBzdHJsZW4o YnVmICsgb2ZmKTsNCisJCX0NCisJCXJldHVybiBidWY7DQorCWNhc2UgREhDUF9PUFRfVUlOVDg6 DQorCWNhc2UgREhDUF9PUFRfVUlOVDE2Og0KKwljYXNlIERIQ1BfT1BUX1VJTlQzMjogew0KKwkJ dWludDMyX3QgdXZhbCA9IDA7DQorDQorCQlpZiAoc2xlbiA9PSAxKSB7DQorCQkJdXZhbCA9IG9w dHNbY29kZV0uc1swXTsNCisJCX0gZWxzZSBpZiAoc2xlbiA9PSAyKSB7DQorCQkJdWludDE2X3Qg djE2Ow0KKwkJCW1lbWNweSgmdjE2LCBvcHRzW2NvZGVdLnMsIHNpemVvZih2MTYpKTsNCisJCQl1 dmFsID0gbnRvaHModjE2KTsNCisJCX0gZWxzZSBpZiAoc2xlbiA9PSA0KSB7DQorCQkJbWVtY3B5 KCZ1dmFsLCBvcHRzW2NvZGVdLnMsIHNpemVvZih1dmFsKSk7DQorCQkJdXZhbCA9IG50b2hsKHV2 YWwpOw0KKwkJfQ0KKw0KKwkJaWYgKHNucHJpbnRmKGJ1ZiwgYnVmX2xlbiwgIiV1IiwgdXZhbCkg Pj0gKGludClidWZfbGVuKQ0KKwkJCXJldHVybiBOVUxMOw0KKwkJcmV0dXJuIGJ1ZjsNCisJfQ0K KwljYXNlIERIQ1BfT1BUX0lOVDMyOiB7DQorCQlpbnQzMl90IHN2YWw7DQorCQl1aW50MzJfdCB2 MzI7DQorDQorCQlhc3NlcnQoc2xlbiA9PSA0KTsNCisJCW1lbWNweSgmdjMyLCBvcHRzW2NvZGVd LnMsIHNpemVvZih2MzIpKTsNCisJCXN2YWwgPSAoaW50MzJfdCludG9obCh2MzIpOw0KKw0KKwkJ aWYgKHNucHJpbnRmKGJ1ZiwgYnVmX2xlbiwgIiVkIiwgc3ZhbCkgPj0gKGludClidWZfbGVuKQ0K KwkJCXJldHVybiBOVUxMOw0KKwkJcmV0dXJuIGJ1ZjsNCisJfQ0KKwljYXNlIERIQ1BfT1BUX1NU UjoNCisJCSh2b2lkKXNucHJpbnRmKGJ1ZiwgYnVmX2xlbiwgIiUuKnMiLCBzbGVuLCBvcHRzW2Nv ZGVdLnMpOw0KKwkJcmV0dXJuIGJ1ZjsNCisJZGVmYXVsdDoNCisJCWFzc2VydCgwKTsNCisJfQ0K K30NCisNCiAvKioNCiAgKiBmaWxsX29uZSgpIC0gRmlsbCBhIHNpbmdsZSBvcHRpb24gaW50byBh IGJ1ZmZlcg0KICAqIEBidWY6CUJ1ZmZlciB0byB3cml0ZSBvcHRpb24NCkBAIC00MjQsOSArNjk3 LDE0IEBAIGludCBkaGNwKGNvbnN0IHN0cnVjdCBjdHggKmMsIHN0cnVjdCBpb3ZfdGFpbCAqZGF0 YSkNCiAJaW5mbygiICAgIGZyb20gJXMiLCBldGhfbnRvcChtLT5jaGFkZHIsIG1hY3N0ciwgc2l6 ZW9mKG1hY3N0cikpKTsNCiANCiAJbWFzay5zX2FkZHIgPSBodG9ubCgweGZmZmZmZmZmIDw8ICgz MiAtIGMtPmlwNC5wcmVmaXhfbGVuKSk7DQotCW1lbWNweShvcHRzWzFdLnMsICAmbWFzaywgICAg ICAgICAgICAgICAgc2l6ZW9mKG1hc2spKTsNCi0JbWVtY3B5KG9wdHNbM10ucywgICZjLT5pcDQu Z3Vlc3RfZ3csICAgICBzaXplb2YoYy0+aXA0Lmd1ZXN0X2d3KSk7DQotCW1lbWNweShvcHRzWzU0 XS5zLCAmYy0+aXA0Lm91cl90YXBfYWRkciwgc2l6ZW9mKGMtPmlwNC5vdXJfdGFwX2FkZHIpKTsN CisJaWYgKG9wdHNbMV0uY29uZiA9PSBPUFRfREVGQVVMVCkNCisJCW1lbWNweShvcHRzWzFdLnMs ICZtYXNrLCBzaXplb2YobWFzaykpOw0KKwlpZiAob3B0c1szXS5jb25mID09IE9QVF9ERUZBVUxU KQ0KKwkJbWVtY3B5KG9wdHNbM10ucywgJmMtPmlwNC5ndWVzdF9ndywgc2l6ZW9mKGMtPmlwNC5n dWVzdF9ndykpOw0KKwlpZiAob3B0c1s1NF0uY29uZiA9PSBPUFRfREVGQVVMVCkgew0KKwkJbWVt Y3B5KG9wdHNbNTRdLnMsICZjLT5pcDQub3VyX3RhcF9hZGRyLA0KKwkJICAgICAgIHNpemVvZihj LT5pcDQub3VyX3RhcF9hZGRyKSk7DQorCX0NCiANCiAJLyogSWYgdGhlIGdhdGV3YXkgaXMgbm90 IG9uIHRoZSBhc3NpZ25lZCBzdWJuZXQsIHNlbmQgYW4gb3B0aW9uIDEyMQ0KIAkgKiAoQ2xhc3Ns ZXNzIFN0YXRpYyBSb3V0aW5nKSBhZGRpbmcgYSBkdW1teSByb3V0ZSB0byBpdC4NCkBAIC00NDMs MjUgKzcyMSwzMCBAQCBpbnQgZGhjcChjb25zdCBzdHJ1Y3QgY3R4ICpjLCBzdHJ1Y3QgaW92X3Rh aWwgKmRhdGEpDQogCQkgICAgICAgJmMtPmlwNC5ndWVzdF9ndywgc2l6ZW9mKGMtPmlwNC5ndWVz dF9ndykpOw0KIAl9DQogDQotCWlmIChjLT5tdHUpIHsNCisJaWYgKG9wdHNbMjZdLmNvbmYgIT0g T1BUX1VTRVIgJiYgYy0+bXR1KSB7DQorCQl1aW50MTZfdCBtdHVfbiA9IGh0b25zKGMtPm10dSk7 DQorDQogCQlvcHRzWzI2XS5zbGVuID0gMjsNCiAJCW9wdHNbMjZdLmNvbmYgPSBPUFRfREVGQVVM VDsNCi0JCW9wdHNbMjZdLnNbMF0gPSBjLT5tdHUgLyAyNTY7DQotCQlvcHRzWzI2XS5zWzFdID0g Yy0+bXR1ICUgMjU2Ow0KKwkJbWVtY3B5KG9wdHNbMjZdLnMsICZtdHVfbiwgc2l6ZW9mKG10dV9u KSk7DQogCX0NCiANCi0JZm9yIChpID0gMCwgb3B0c1s2XS5zbGVuID0gMDsNCi0JICAgICAhYy0+ bm9fZGhjcF9kbnMgJiYgaSA8IEFSUkFZX1NJWkUoYy0+aXA0LmRucyk7IGkrKykgew0KLQkJaWYg KElONF9JU19BRERSX1VOU1BFQ0lGSUVEKCZjLT5pcDQuZG5zW2ldKSkNCi0JCQlicmVhazsNCi0J CSgoc3RydWN0IGluX2FkZHIgKilvcHRzWzZdLnMpW2ldID0gYy0+aXA0LmRuc1tpXTsNCi0JCW9w dHNbNl0uc2xlbiArPSBzaXplb2YodWludDMyX3QpOw0KKwlpZiAob3B0c1s2XS5jb25mICE9IE9Q VF9VU0VSKSB7DQorCQlvcHRzWzZdLnNsZW4gPSAwOw0KKwkJZm9yIChpID0gMDsNCisJCSAgICAg IWMtPm5vX2RoY3BfZG5zICYmIGkgPCBBUlJBWV9TSVpFKGMtPmlwNC5kbnMpOw0KKwkJICAgICBp KyspIHsNCisJCQlpZiAoSU40X0lTX0FERFJfVU5TUEVDSUZJRUQoJmMtPmlwNC5kbnNbaV0pKQ0K KwkJCQlicmVhazsNCisJCQkoKHN0cnVjdCBpbl9hZGRyICopb3B0c1s2XS5zKVtpXSA9IGMtPmlw NC5kbnNbaV07DQorCQkJb3B0c1s2XS5zbGVuICs9IHNpemVvZih1aW50MzJfdCk7DQorCQl9DQor CQlpZiAob3B0c1s2XS5zbGVuKQ0KKwkJCW9wdHNbNl0uY29uZiA9IE9QVF9ERUZBVUxUOw0KIAl9 DQotCWlmIChvcHRzWzZdLnNsZW4pDQotCQlvcHRzWzZdLmNvbmYgPSBPUFRfREVGQVVMVDsNCiAN CiAJb3B0X2xlbiA9IHN0cmxlbihjLT5ob3N0bmFtZSk7DQotCWlmIChvcHRfbGVuID4gMCkgew0K KwlpZiAob3B0c1sxMl0uY29uZiAhPSBPUFRfVVNFUiAmJiBvcHRfbGVuID4gMCkgew0KIAkJb3B0 c1sxMl0uc2xlbiA9IG9wdF9sZW47DQogCQlvcHRzWzEyXS5jb25mID0gT1BUX0RFRkFVTFQ7DQog CQltZW1jcHkob3B0c1sxMl0ucywgJmMtPmhvc3RuYW1lLCBvcHRfbGVuKTsNCmRpZmYgLS1naXQg YS9kaGNwLmggYi9kaGNwLmgNCmluZGV4IGNkNTBjOTliLi44MGFiZGE2NSAxMDA2NDQNCi0tLSBh L2RoY3AuaA0KKysrIGIvZGhjcC5oDQpAQCAtOCw1ICs4LDcgQEANCiANCiBpbnQgZGhjcChjb25z dCBzdHJ1Y3QgY3R4ICpjLCBzdHJ1Y3QgaW92X3RhaWwgKmRhdGEpOw0KIHZvaWQgZGhjcF9pbml0 KHZvaWQpOw0KK3ZvaWQgZGhjcF9zZXRfb3B0KHVpbnQ4X3QgY29kZSwgY29uc3QgY2hhciAqdmFs X3N0cik7DQorY29uc3QgY2hhciAqZGhjcF9vcHRfdG9fc3RyKHVpbnQ4X3QgY29kZSwgY2hhciAq YnVmLCBzaXplX3QgYnVmX2xlbik7DQogDQogI2VuZGlmIC8qIERIQ1BfSCAqLw0KZGlmZiAtLWdp dCBhL3Bhc3N0LjEgYi9wYXNzdC4xDQppbmRleCAwYjc4MGZlYy4uZGQ5ODU4ZWEgMTAwNjQ0DQot LS0gYS9wYXNzdC4xDQorKysgYi9wYXNzdC4xDQpAQCAtNDQwLDYgKzQ0MCw0NyBAQCBTZW5kIFxm SW5hbWVcZlIgYXMgREhDUCBvcHRpb24gMTIgKGhvc3RuYW1lKS4NCiBGUUROIHRvIGNvbmZpZ3Vy ZSB0aGUgY2xpZW50IHdpdGguDQogU2VuZCBcZkluYW1lXGZSIGFzIENsaWVudCBGUUROOiBESENQ IG9wdGlvbiA4MSBhbmQgREhDUHY2IG9wdGlvbiAzOS4NCiANCisuVFANCisuQlIgXC1cLWRoY3At b3B0ICIgIiBcZklDT0RFXGZSLFxmSVZBTFVFXGZSDQorU2V0IERIQ1Agb3B0aW9uIFxmSUNPREVc ZlIgKDFcLTI1NCkgdG8gXGZJVkFMVUVcZlIuIFRoZSB2YWx1ZSBmb3JtYXQgZGVwZW5kcw0KK29u IHRoZSBvcHRpb24gdHlwZSBhbmQgaXMgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5IGZyb20gdGhl IG9wdGlvbiBjb2RlLg0KK011bHRpcGxlIElQdjQgYWRkcmVzc2VzIGFyZSBjb21tYS1zZXBhcmF0 ZWQuDQorVGhpcyBvcHRpb24gY2FuIGJlIHNwZWNpZmllZCBtdWx0aXBsZSB0aW1lcy4gSWYgdGhl IHNhbWUgb3B0aW9uIGNvZGUgaXMNCitnaXZlbiBtb3JlIHRoYW4gb25jZSwgdGhlIGxhc3QgdmFs dWUgd2lucy4gT3B0aW9ucyBzZXQgd2l0aA0KK1xmQlwtXC1kaGNwLW9wdFxmUiBvdmVycmlkZSBi dWlsdC1pbiB2YWx1ZXMuDQorLlBQDQorRXhhbXBsZXM6DQorLm5mDQorICBcLVwtZGhjcC1vcHQg Niw4LjguOC44LDQuNC40LjQNCisgIFwtXC1kaGNwLW9wdCAxMixteWhvc3RuYW1lDQorLmZpDQor LlBQDQorT25seSB0aGUgZm9sbG93aW5nIG9wdGlvbiBjb2RlcyBhcmUgc3VwcG9ydGVkICh1bnN1 cHBvcnRlZCBjb2RlcyBjYXVzZSBhbiBlcnJvcik6DQorLlJTDQorLlRQDQorLkIgSVB2NCBhZGRy ZXNzIG9wdGlvbnMNCisxIChTdWJuZXQgTWFzayksIDE2IChTd2FwIFNlcnZlciksIDI4IChCcm9h ZGNhc3QgQWRkcmVzcyksDQorNTQgKFNlcnZlciBJZGVudGlmaWVyKQ0KKy5UUA0KKy5CIElQdjQg YWRkcmVzcyBsaXN0IG9wdGlvbnMgKGNvbW1hLXNlcGFyYXRlZCkNCiszIChSb3V0ZXIpLCA0IChU aW1lIFNlcnZlciksIDUgKE5hbWUgU2VydmVyKSwgNiAoRE5TKSwgNyAoTG9nIFNlcnZlciksDQor OCAoQ29va2llIFNlcnZlciksIDkgKExQUiBTZXJ2ZXIpLCAxMCAoSW1wcmVzcyBTZXJ2ZXIpLA0K KzExIChSZXNvdXJjZSBMb2NhdGlvbiBTZXJ2ZXIpLCA0MSAoTklTIFNlcnZlcnMpLA0KKzQyIChO VFAgU2VydmVycyksIDQ0IChOZXRCSU9TIE5hbWUgU2VydmVyKQ0KKy5UUA0KKy5CIEludGVnZXIg b3B0aW9ucw0KKzIgKFRpbWUgT2Zmc2V0LCAzMi1iaXQpLCAxMyAoQm9vdCBGaWxlIFNpemUsIDE2 LWJpdCksIDE5IChJUCBGb3J3YXJkaW5nLCA4LWJpdCksDQorMjMgKERlZmF1bHQgSVAgVFRMLCA4 LWJpdCksIDI2IChJbnRlcmZhY2UgTVRVLCAxNi1iaXQpLA0KKzM3IChUQ1AgRGVmYXVsdCBUVEws IDgtYml0KSwgMzggKFRDUCBLZWVwYWxpdmUgSW50ZXJ2YWwsIDMyLWJpdCksDQorNTEgKElQIEFk ZHJlc3MgTGVhc2UgVGltZSwgMzItYml0KSwNCis1OCAoUmVuZXdhbCBUaW1lLCAzMi1iaXQpLCA1 OSAoUmViaW5kaW5nIFRpbWUsIDMyLWJpdCkNCisuVFANCisuQiBTdHJpbmcgb3B0aW9ucw0KKzEy IChIb3N0IE5hbWUpLCAxNSAoRG9tYWluIE5hbWUpLCAxNyAoUm9vdCBQYXRoKSwgNDAgKE5JUyBE b21haW4gTmFtZSksDQorNjAgKFZlbmRvciBDbGFzcyBJZGVudGlmaWVyKSwgNjYgKFRGVFAgU2Vy dmVyIE5hbWUpLA0KKzY3IChCb290ZmlsZSBOYW1lKSwgMjUyIChXUEFEIFVSTCkNCisuUkUNCisN CiAuVFANCiAuQlIgXC10ICIsICIgXC1cLXRjcC1wb3J0cyAiICIgXGZJc3BlYw0KIENvbmZpZ3Vy ZSBUQ1AgcG9ydCBmb3J3YXJkaW5nIHRvIGd1ZXN0IG9yIG5hbWVzcGFjZS4gXGZJc3BlY1xmUiBj YW4gYmUgZWl0aGVyOg0KLS0gDQoyLjU1LjANCg0K