From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id EAB908918F for ; Wed, 4 Sep 2019 10:37:10 +0000 (UTC) From: =?UTF-8?q?Zbigniew=20Kempczy=C5=84ski?= Date: Wed, 4 Sep 2019 12:36:59 +0200 Message-Id: <20190904103701.20490-2-zbigniew.kempczynski@intel.com> In-Reply-To: <20190904103701.20490-1-zbigniew.kempczynski@intel.com> References: <20190904103701.20490-1-zbigniew.kempczynski@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v6 1/3] Introduce device selection API List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: igt-dev@lists.freedesktop.org Cc: Daniel Vetter , Petri Latvala List-ID: Q2hhbmdlIGFkZHMgZGV2aWNlIHNlbGVjdGlvbiBBUEkgYmFzZWQgb24gc2Nhbm5pbmcgZHJtIHN1 YnN5c3RlbQp1c2luZyB1ZGV2IGxpYnJhcnkuCgpTaWduZWQtb2ZmLWJ5OiBaYmlnbmlldyBLZW1w Y3p5xYRza2kgPHpiaWduaWV3LmtlbXBjenluc2tpQGludGVsLmNvbT4KQ2M6IEFya2FkaXVzeiBI aWxlciA8YXJrYWRpdXN6LmhpbGVyQGludGVsLmNvbT4KQ2M6IERhbmllbCBWZXR0ZXIgPGRhbmll bEBmZndsbC5jaD4KQ2M6IFBldHJpIExhdHZhbGEgPHBldHJpLmxhdHZhbGFAaW50ZWwuY29tPgot LS0KIC4uLi9pZ3QtZ3B1LXRvb2xzL2lndC1ncHUtdG9vbHMtZG9jcy54bWwgICAgICB8ICAgIDEg KwogbGliL01ha2VmaWxlLnNvdXJjZXMgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiAr CiBsaWIvaWd0X2RldmljZV9zY2FuLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMzk0ICsr KysrKysrKysrKysrKysrCiBsaWIvaWd0X2RldmljZV9zY2FuLmggICAgICAgICAgICAgICAgICAg ICAgICAgfCAgIDc0ICsKIGxpYi9tZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8ICAgIDEgKwogNSBmaWxlcyBjaGFuZ2VkLCAxNDcyIGluc2VydGlvbnMoKykKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBsaWIvaWd0X2RldmljZV9zY2FuLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBs aWIvaWd0X2RldmljZV9zY2FuLmgKCmRpZmYgLS1naXQgYS9kb2NzL3JlZmVyZW5jZS9pZ3QtZ3B1 LXRvb2xzL2lndC1ncHUtdG9vbHMtZG9jcy54bWwgYi9kb2NzL3JlZmVyZW5jZS9pZ3QtZ3B1LXRv b2xzL2lndC1ncHUtdG9vbHMtZG9jcy54bWwKaW5kZXggYWM4MzI3MmYuLjRiM2MzOGFmIDEwMDY0 NAotLS0gYS9kb2NzL3JlZmVyZW5jZS9pZ3QtZ3B1LXRvb2xzL2lndC1ncHUtdG9vbHMtZG9jcy54 bWwKKysrIGIvZG9jcy9yZWZlcmVuY2UvaWd0LWdwdS10b29scy9pZ3QtZ3B1LXRvb2xzLWRvY3Mu eG1sCkBAIC0yMyw2ICsyMyw3IEBACiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2lndF9jb3Jl LnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9pZ3RfZGVidWdmcy54bWwiLz4KICAg ICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvaWd0X2RldmljZS54bWwiLz4KKyAgICA8eGk6aW5jbHVk ZSBocmVmPSJ4bWwvaWd0X2RldmljZV9zY2FuLnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhyZWY9 InhtbC9pZ3RfZHJhdy54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvaWd0X2R1bW15 bG9hZC54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvaWd0X2ZiLnhtbCIvPgpkaWZm IC0tZ2l0IGEvbGliL01ha2VmaWxlLnNvdXJjZXMgYi9saWIvTWFrZWZpbGUuc291cmNlcwppbmRl eCBjZjA5NGFiOC4uYTllOTU1N2EgMTAwNjQ0Ci0tLSBhL2xpYi9NYWtlZmlsZS5zb3VyY2VzCisr KyBiL2xpYi9NYWtlZmlsZS5zb3VyY2VzCkBAIC0yNSw2ICsyNSw4IEBAIGxpYl9zb3VyY2VfbGlz dCA9CSAJXAogCWlndF9kZWJ1Z2ZzLmgJCVwKIAlpZ3RfZGV2aWNlLmMJCVwKIAlpZ3RfZGV2aWNl LmgJCVwKKwlpZ3RfZGV2aWNlX3NjYW4uYwlcCisJaWd0X2RldmljZV9zY2FuLmgJXAogCWlndF9h dXguYwkJXAogCWlndF9hdXguaAkJXAogCWlndF9jb2xvcl9lbmNvZGluZy5jCVwKZGlmZiAtLWdp dCBhL2xpYi9pZ3RfZGV2aWNlX3NjYW4uYyBiL2xpYi9pZ3RfZGV2aWNlX3NjYW4uYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uN2EwYzBlNTAKLS0tIC9kZXYvbnVsbAorKysg Yi9saWIvaWd0X2RldmljZV9zY2FuLmMKQEAgLTAsMCArMSwxMzk0IEBACisvKgorICogQ29weXJp Z2h0IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVi eSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICog Y29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMg KHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVz dHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8g dXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNl LAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBw ZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1 YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5 cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5l eHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJz dGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FS RSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBS RVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFV VEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFH RVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJB Q1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09O TkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisg KiBJTiBUSEUgU09GVFdBUkUuCisgKgorICovCisKKyNpbmNsdWRlICJpZ3QuaCIKKyNpbmNsdWRl ICJpZ3Rfc3lzZnMuaCIKKyNpbmNsdWRlICJpZ3RfZGV2aWNlLmgiCisjaW5jbHVkZSAiaWd0X2Rl dmljZV9zY2FuLmgiCisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGxpYnVkZXYuaD4KKyNp bmNsdWRlIDxsaW51eC9saW1pdHMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUg PHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGRpcmVudC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisK Ky8qKgorICogU0VDVElPTjppZ3RfZGV2aWNlX3NjYW4KKyAqIEBzaG9ydF9kZXNjcmlwdGlvbjog RGV2aWNlIHNjYW5uaW5nIGFuZCBzZWxlY3Rpb24KKyAqIEB0aXRsZTogRGV2aWNlIHNlbGVjdGlv bgorICogQGluY2x1ZGU6IGlndC5oCisgKgorICogIyBEZXZpY2Ugc2Nhbm5pbmcKKyAqCisgKiBE ZXZpY2Ugc2Nhbm5pbmcgaXRlcmF0ZXMgb3ZlciBkcm0gc3Vic3lzdGVtIHVzaW5nIHVkZXYgbGli cmFyeQorICogdG8gYWNxdWlyZSBkcm0gZGV2aWNlcy4KKyAqIEZvciBlYWNoIGRybSBkZXZpY2Ug d2UgYWxzbyBnZXQgYW5kIHN0b3JlIGl0cyBwYXJlbnQgaW4gYSBkZXZpY2UgYXJyYXkKKyAqIHRv IGFsbG93IGRldmljZSBzZWxlY3Rpb24gaW4gbW9yZSBjb250ZXh0dWFsIHdheS4KKyAqCisgKiBQ YXJlbnQgZGV2aWNlcyBhcmUgYnVzIGRldmljZXMgKGxpa2UgcGNpLCBwbGF0Zm9ybSwgZXRjLikg YW5kIGNvbnRhaW4gYSBsb3QKKyAqIG9mIHVzYWJsZSBpbmZvcm1hdGlvbiBjb21wYXJpbmcgdG8g ZHJtIGRldmljZS4KKyAqCisgKiBVZGV2IGtlZXBzIHByb3BlcnRpZXMgYW5kIHN5c2F0dHJzIGZv ciB0aGUgZGV2aWNlIGFzIGEgbGlzdCB3aGF0IGlzIG5vdAorICogY29udmluaWVudCBmb3Iga2V5 L3ZhbHVlIHNlYXJjaGluZy4gU28gdWRldiBkZXZpY2UgcHJvcGVydGllcyBhbmQgc3lzYXR0cnMK KyAqIGFyZSByZXdyaXR0ZW4gdG8gaW50ZXJuYWwgaGFzaCB0YWJsZXMgaW4gaWd0X2RldmljZSBz dHJ1Y3R1cmUuCisgKgorICogIyBGaWx0ZXJzCisgKgorICogRGV2aWNlIHNlbGVjdGlvbiBjYW4g YmUgZG9uZSB1c2luZyBmaWx0ZXJzLiBGaWx0ZXJzIGFsbG93IHNvcGhpc3RpY2F0ZWQKKyAqIGRl dmljZSBtYXRjaGluZyBhbmQgc2VsZWN0aW9uLiBQcmV2aW91c2x5IG1lbnRpb25lZCBwcm9wZXJ0 aWVzIGFuZCBzeXNhdHRycworICogY29sbGVjdGVkIGluIGlndF9kZXZpY2UgaGFzaCB0YWJsZXMg c2ltcGxpZnkgd3JpdGluZyBmaWx0ZXIgaW1wbGVtZW50YXRpb24uCisgKgorICogRGlyZWN0IGRl dmljZSBzZWxlY3Rpb24gZmlsdGVyCisgKiBpcyBzcGVjaWFsIGZpbHRlciBhbmQgaXQgaXMgY2hl Y2tlZCBmaXJzdC4gVGhlbiBjb250ZXh0dWFsIGZpbHRlciBpcyBjaG9zZW4KKyAqIGRlcGVuZGlu ZyBvbiBmaWx0ZXIgbmFtZS4KKyAqCisgKiBEaXJlY3QgZGV2aWNlIHNlbGVjdGlvbiBmaWx0ZXIg bXVzdCBiZToKKyAqCisgKiB8WzwhLS0gbGFuZ3VhZ2U9InBsYWluIiAtLT4KKyAqIHN1YnN5c3Rl bTovc3lzCisgKiBdfAorICoKKyAqIFNvLCB3aGVuIHVzZXIgcGFzc2VzIGZpbHRlciB3aGljaCBs b29rcyBsaWtlIGZvbGxvd3M6CisgKiB8WzwhLS0gbGFuZ3VhZ2U9InBsYWluIiAtLT4KKyAqIC0g ZHJtOi9zeXMvZGV2aWNlcy9wY2kwMDAwOjAwLzAwMDA6MDA6MDIuMC9kcm0vY2FyZDAKKyAqIC0g cGNpOi9zeXMvZGV2aWNlcy9wY2kwMDAwOjAwLzAwMDA6MDA6MDIuMAorICogLSBwbGF0Zm9ybTov c3lzL2RldmljZXMvcGxhdGZvcm0vdmdlbQorICogXXwKKyAqCisgKiBkZXZpY2UgZnJvbSBhcnJh eSB3aGljaCBoYXMgc3Vic3lzdGVtIGFuZCBzeXMgcGF0aCB3aWxsIGJlIHJldHVybmVkLgorICoK KyAqIFdoZW4gL3N5cyBpcyBub3Qgc3BlY2lmaWVkIGFmdGVyIGNvbG9uIGNvbnRleHR1YWwgZmls dGVycyBhcmUgdGFrZW4KKyAqIGludG8gYWNjb3VudC4gRHJtIGRldmljZSBvY2N1cnMgaW4gdGhl IHN5c3RlbSB3aGVuIGFwcHJvcHJpYXRlIG1vZHVsZQorICogaXMgbG9hZGVkIGFuZCBkZXZpY2Ug aXMgZGV0ZWN0ZWQgKG9yIGV4cG9zZWQgZm9yIHBsYXRmb3JtIGRldmljZXMpLiBMb2FkaW5nCisg KiBkcml2ZXJzIGluIGRpZmZlcmVudCBvcmRlciBjYW4gYmUgcHJvYmxlbWF0aWMgZnJvbSBDSSBw b2ludCBvZiB2aWV3LCB3aGVyZQorICogZXhwZWN0YXRpb24gaXMgdG8gZ2V0IHNhbWUgZGV2aWNl IGVzcGVjaWFsbHkgd2hlbiBtdWx0aXBsZSBncHUgZGV2aWNlcworICogZXhpc3RzIGluIHRoZSBz eXN0ZW0uIEZvciBzdWNoIGRldmljZXMgaXRzIHBhcmVudCBsb2NhdGlvbiBvbiBwY2kgYnVzCisg KiBpcyBjb25zdGFudCBhbmQgYWxsb3dzIGFwcHJvcHJpYXRlIGRldmljZSBzZWxlY3Rpb24gdXNp bmcgZm9yIGV4YW1wbGUKKyAqIHZlbmRvciAvIGRldmljZSBpZHMuCisgKgorICogRm9yIHRlc3Rz IHdoaWNoIG9wZW5zIG1vcmUgdGhhbiBvbmUgZGV2aWNlIGRldmljZSBmaWx0ZXIgY29sbGVjdGlv biBBUEkKKyAqIGNhbiBiZSB1c2VkLiBZb3UgY2FuIGFkZCBhIGZpbHRlciB0byB0aGUgYXJyYXkg dXNpbmcgaWd0X2RldmljZV9maWx0ZXJfYWRkKCksCisgKiBnZXQgdGhlIG50aCBmaWx0ZXIgc3Rv cmVkIHVzaW5nIGlndF9kZXZpY2VfZmlsdGVyX2dldCgpIGFuZCBnZXQKKyAqICNpZ3RfZGV2aWNl X2NhcmQgdXNpbmcgaWd0X2RldmljZV9jYXJkX21hdGNoKCkgd2l0aCB0aGF0IGZpbHRlci4KKyAq CisgKiBJbXBsZW1lbnRlZCBmaWx0ZXJzOgorICoKKyAqIC0gZHJtOiBnZXQgZHJtIC9kZXYvZHJp Ly4uLiBkZXZpY2UgZGlyZWN0bHkKKyAqCisgKiAgIHxbPCEtLSBsYW5ndWFnZT0icGxhaW4iIC0t PgorICogICBkcm06L2Rldi9kcmkvLi4uCisgKiAgIF18CisgKgorICogLSBwY2k6IHNlbGVjdCBk ZXZpY2UgdXNpbmcgcGNpIHByb3BlcnRpZXMKKyAqICAgfFs8IS0tIGxhbmd1YWdlPSJwbGFpbiIg LS0+CisgKiAgIHBjaTpbdmVuZG9yPSUwNHgvbmFtZV1bLGRldmljZT0lMDR4XVssY2FyZD0lZF0K KyAqICAgXXwKKyAqCisgKiAgIEZpbHRlciBhbGxvd3MgZGV2aWNlIHNlbGVjdGlvbiB1c2luZyB2 ZW5kb3IgKGhleCBvciBuYW1lKSwgZGV2aWNlIGlkCisgKiAgIChoZXgpIGFuZCBudGgtY2FyZCBm cm9tIGFsbCBtYXRjaGVzLiBGb3IgZXhhbXBsZSBpZiB0aGVyZSdyZSA0IHBjaQorICogICBjYXJk cyBpbnN0YWxsZWQgKGxldCB0d28gY2FyZHMgaGF2ZSAxMjM0IGFuZCBvdGhlciB0d28gMTIzNSBk ZXZpY2UgaWQsCisgKiAgIGFsbCBvZiB0aGVtIG9mIHZlbmRvciBJbnRlbCkgeW91IGNhbiBzZWxl Y3Qgb25lIHVzaW5nOgorICoKKyAqICAgfFs8IS0tIGxhbmd1YWdlPSJwbGFpbiIgLS0+CisgKiAg IHBjaTp2ZW5kb3I9SW50ZWwsZGV2aWNlPTEyMzQsY2FyZD0wCisgKiAgIF18CisgKgorICogICBv cgorICoKKyAqICAgfFs8IS0tIGxhbmd1YWdlPSJwbGFpbiIgLS0+CisgKiAgIHBjaTp2ZW5kb3I9 ODA4NixkZXZpY2U9MTIzNCxjYXJkPTAKKyAqICAgXXwKKyAqCisgKiAgIFRoaXMgdGFrZXMgZmly c3QgZGV2aWNlIHdpdGggMTIzNCBpZCBmb3IgSW50ZWwgdmVuZG9yICg4MDg2KS4KKyAqCisgKiAg IHxbPCEtLSBsYW5ndWFnZT0icGxhaW4iIC0tPgorICogICBwY2k6dmVuZG9yPUludGVsLGRldmlj ZT0xMjM0LGNhcmQ9MQorICogICBdfAorICoKKyAqICAgb3IKKyAqCisgKiAgIHxbPCEtLSBsYW5n dWFnZT0icGxhaW4iIC0tPgorICogICBwY2k6dmVuZG9yPTgwODYsZGV2aWNlPTEyMzQsY2FyZD0x CisgKiAgIF18CisgKgorICogICBJdCBzZWxlY3RzIHNlY29uZCBvbmUuCisgKgorICogICBBcyBv cmRlciBvbiBwY2kgYnVzIGRvZXNuJ3QgY2hhbmdlICh1bmxlc3MgeW91J2xsIGFkZCBuZXcgZGV2 aWNlIG9yCisgKiAgIHJlb3JkZXIgZXhpc3Rpbmcgb25lKSBkZXZpY2Ugc2VsZWN0aW9uIHVzaW5n IHRoaXMgZmlsdGVyIHdpbGwgYWx3YXlzCisgKiAgIHJldHVybiB5b3Ugc2FtZSBkZXZpY2UgcmVn YXJkbGVzcyBtb2R1bGUgbG9hZGluZyB0aW1lLgorICoKKyAqIC0gdmdlbTogc2VsZWN0IHZpcnR1 YWwgZ2VtIGRldmljZQorICoKKyAqICAgfFs8IS0tIGxhbmd1YWdlPSJwbGFpbiIgLS0+CisgKiAg IHZnZW06W2NhcmQ9JWRdCisgKiAgIF18CisgKgorICogICBGb3IgZXhhbXBsZToKKyAqCisgKiAg IHxbPCEtLSBsYW5ndWFnZT0icGxhaW4iIC0tPgorICogICB2Z2VtOgorICogICB2Z2VtOmNhcmQ9 MAorICogICBdfAorICoKKyAqICAgQm90aCBzZWxlY3RzIGZpcnN0IHZnZW0gZGV2aWNlIChubyBp ZGVhIGlmIG1vcmUgdGhhbiBvbmUgZGV2aWNlIHdpbGwKKyAqICAgYmUgdmlzaWJsZSwgaWYgeWVz IHVzZSBjYXJkPSBhcmd1bWVudCB0byBwb2ludCByaWdodCBvbmUpLgorICoKKyAqIC0gdmttczog c2VsZWN0IHZpcnR1YWwga21zIGRldmljZQorICoKKyAqICAgfFs8IS0tIGxhbmd1YWdlPSJwbGFp biIgLS0+CisgKiAgIHZrbXM6W2NhcmQ9JWRdCisgKiAgIF18CisgKgorICogICBGb3IgZXhhbXBs ZToKKyAqCisgKiAgIHxbPCEtLSBsYW5ndWFnZT0icGxhaW4iIC0tPgorICogICB2a21zOgorICog ICB2a21zOmNhcmQ9MAorICogICBdfAorICoKKyAqICAgQm90aCBzZWxlY3RzIGZpcnN0IHZrbXMg ZGV2aWNlLiBTYW1lIGFzIGZvciB2Z2VtIEkgYXNzdW1lIG1vcmUgdGhhbgorICogICBvbmUgZGV2 aWNlIGNhbiBhcHBlYXIgaW4gdGhlIGZ1dHVyZS4KKyAqCisgKiAtIHZjNDogc2VsZWN0IFZDNCBk ZXZpY2UKKyAqCisgKiAgIHxbPCEtLSBsYW5ndWFnZT0icGxhaW4iIC0tPgorICogICB2YzQ6W2Nh cmQ9JWRdCisgKiAgIF18CisgKgorICogICBGb3IgZXhhbXBsZToKKyAqCisgKiAgIHxbPCEtLSBs YW5ndWFnZT0icGxhaW4iIC0tPgorICogICB2YzQ6CisgKiAgIHZjNDpjYXJkPTAKKyAqICAgXXwK KyAqCisgKiAgIEJvdGggc2VsZWN0cyBmaXJzdCBWQzQgZGV2aWNlLiBBdCB0aGUgbW9tZW50IFJh c3BlcnJ5IFBJIGhhcyBvbmx5CisgKiAgIG9uZSBncHUsIGJ1dCBmaWx0ZXIgaXMgcmVhZHkgaWYg dGhlcmUgd2lsbCBiZSBtb3JlLgorICovCisKKyNpZmRlZiBERUJVR19ERVZJQ0VfU0NBTgorI2Rl ZmluZSBEQkcoLi4uKSBcCit7IFwKKwlzdHJ1Y3QgdGltZXZhbCB0bTsgXAorCWdldHRpbWVvZmRh eSgmdG0sIE5VTEwpOyBcCisJcHJpbnRmKCIlMTBsZC4lMDNsZDogIiwgdG0udHZfc2VjLCB0bS50 dl91c2VjKTsgXAorCXByaW50ZihfX1ZBX0FSR1NfXyk7IFwKKwl9CisKKyNlbHNlCisjZGVmaW5l IERCRyguLi4pIHt9CisjZW5kaWYKKworI2RlZmluZSBzdHJlcXVhbCh4LCB5KSAoKHgpICYmICh5 KSAmJiAhc3RyY21wKCh4KSwgKHkpKSkKKyNkZWZpbmUgSUdUX0RSTV9QQVRIICIvZGV2L2RyaSIK Kworc3RhdGljIEdIYXNoVGFibGUgKnN5c2F0dHJzX2JsYWNrbGlzdF9odDsgLyogc3lzYXR0cnMg d2UgZG9uJ3Qgd2FudCB0byByZWFkICovCitzdGF0aWMgR0hhc2hUYWJsZSAqZ3B1X3ZlbmRvcl9o dDsgICAgICAgICAvKiBzZWFyY2ggaWQgLT4gdmVuZG9yX3NwZWMgbWFwcGluZyAqLworc3RhdGlj IEdIYXNoVGFibGUgKmZpbHRlcl9kZWZpbml0aW9uX2h0OyAvKiBzdXBwb3J0ZWQgZmlsdGVycyAo cGNpPS4uLiwgZXRjLikgKi8KKworLyogR2VuZXJpYyBuYW1lLT52YWx1ZSBzdHJ1Y3QgKi8KK3N0 cnVjdCBuYW1lX3ZhbHVlIHsKKwljb25zdCBjaGFyICpuYW1lOworCWdwb2ludGVyICp2YWx1ZTsK K307CisKKy8qIFZlbmRvciBzcGVjaWZpYyBkYXRhICovCitzdHJ1Y3QgdmVuZG9yX3NwZWMgewor CWNvbnN0IGNoYXIgKnZlbmRvcjsKKwljb25zdCBjaGFyICptYXRjaDsKKwlpbnQgY2hpcHNldDsK K307CisKK3N0cnVjdCBpZ3RfZGV2aWNlIHsKKwkvKiBGaWxsZWQgZm9yIGRybSBkZXZpY2VzICov CisJc3RydWN0IGlndF9kZXZpY2UgKnBhcmVudDsKKworCS8qIFBvaW50IHRvIHZlbmRvciBzcGVj IGlmIGNhbiBiZSBmb3VuZCAqLworCWNvbnN0IHN0cnVjdCB2ZW5kb3Jfc3BlYyAqdnM7CisKKwkv KiBQcm9wZXJ0aWVzIC8gc3lzYXR0cnMgcmV3cml0ZW4gZnJvbSB1ZGV2IGxpc3RzICovCisJR0hh c2hUYWJsZSAqcHJvcHNfaHQ7CisJR0hhc2hUYWJsZSAqYXR0cnNfaHQ7CisKKwkvKiBNb3N0IHVz YWJsZSB2YXJpYWJsZXMgZnJvbSB1ZGV2IGRldmljZSAqLworCWNoYXIgKnN1YnN5c3RlbTsKKwlj aGFyICpzeXNwYXRoOworCWNoYXIgKmRldm5vZGU7CisKKwkvKiAvZGV2L2RyaS8uLi4gcGF0aHMg Ki8KKwljaGFyICpkcm1fY2FyZDsKKwljaGFyICpkcm1fcmVuZGVyOworCisJLyogRm9yIHBjaSBz dWJzeXN0ZW0gKi8KKwljaGFyICp2ZW5kb3I7CisJY2hhciAqZGV2aWNlOworfTsKKworLyogU2Nh bm5lZCBkZXZpY2VzICovCitzdHJ1Y3QgaWd0X2RldmljZXMgeworCUdQdHJBcnJheSAqZGV2czsJ CS8vYWxsIGRldmljZXMKKwlHUHRyQXJyYXkgKnZpZXc7CQkvL2ZpbHRlcmVkIHZpZXcKKwlib29s IGRldnNfc2Nhbm5lZDsKK307CisKKy8qIFNjYW5uZWQgZGV2aWNlcyBob2xkZXIgKi8KK3N0YXRp YyBzdHJ1Y3QgaWd0X2RldmljZXMgaWd0X2RldnM7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdmVu ZG9yX3NwZWMgdl9pbnRlbCA9IHsKKwkudmVuZG9yID0gIkludGVsIiwKKwkuY2hpcHNldCA9IERS SVZFUl9JTlRFTAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2ZW5kb3Jfc3BlYyB2X2FtZCA9 IHsKKwkudmVuZG9yID0gIkFNRCIsCisJLmNoaXBzZXQgPSBEUklWRVJfQU1ER1BVCit9OworCitz dGF0aWMgY29uc3Qgc3RydWN0IHZlbmRvcl9zcGVjIHZfdmdlbSA9IHsKKwkudmVuZG9yID0gIlZp cnR1YWwtR0VNIiwKKwkuY2hpcHNldCA9IERSSVZFUl9WR0VNCit9OworCitzdGF0aWMgY29uc3Qg c3RydWN0IHZlbmRvcl9zcGVjIHZfdmM0ID0geworCS52ZW5kb3IgPSAiQnJvYWRjb20iLAorCS5j aGlwc2V0ID0gRFJJVkVSX1ZDNAorfTsKKworLyogTWFwcGluZyB2ZW5kb3IgaWQgPT4gdmVuZG9y X3NwZWMgc2hvdWxkIGJlIHVuaXF1ZSAodmVuZG9yIHN0cmluZyBtYXRjaGluZworICogaXMgd3Jp dHRlbiBhcm91bmQgdGhpcykuCisgKgorICogS2V5cyBtdXN0IGJlIGRlZmluZWQgYXMgZm9sbG93 czoKKyAqIFBDSSBkZXZpY2VzOiBQQ0lfU0xPVF9JRCAtPiB2ZW5kb3Jfc3BlYy4KKyAqLworY29u c3Qgc3RydWN0IG5hbWVfdmFsdWUgZ3B1X3ZlbmRvcl9saXN0W10gPSB7CisJeyAiODA4NiIsIChn cG9pbnRlcikgJnZfaW50ZWwgfSwKKwl7ICIxMDAyIiwgKGdwb2ludGVyKSAmdl9hbWQgfSwKKwl7 IE5VTEwsIH0sCit9OworCisvKiBHZW5lcmljIGhhc2ggdGFibGUgZmlsbCBmdW5jdGlvbiwgcmVx dWlyZXMgbmFtZSAvIHZhbHVlIHB0cnMgYXJyYXkgKi8KK3N0YXRpYyB2b2lkIGZpbGxfaHQoR0hh c2hUYWJsZSAqKmh0LCBjb25zdCBzdHJ1Y3QgbmFtZV92YWx1ZSAqZGF0YSkKK3sKKwlpZiAoKmh0 KQorCQlyZXR1cm47CisKKwkqaHQgPSBnX2hhc2hfdGFibGVfbmV3KGdfc3RyX2hhc2gsIGdfc3Ry X2VxdWFsKTsKKwlpZ3RfYXNzZXJ0KCpodCk7CisKKwl3aGlsZSAoZGF0YS0+bmFtZSkgeworCQln X2hhc2hfdGFibGVfaW5zZXJ0KCpodCwKKwkJCQkgICAgKGdwb2ludGVyKSBkYXRhLT5uYW1lLAor CQkJCSAgICBkYXRhLT52YWx1ZSk7CisJCWRhdGErKzsKKwl9Cit9CisKKyNkZWZpbmUgZ2V0X3Zl bmRvcl9zcGVjKHByb3ApIFwKKwlnX2hhc2hfdGFibGVfbG9va3VwKGdwdV92ZW5kb3JfaHQsIHBy b3ApCisKKy8qIEdvIHRocm91Z2ggd2hvbGUgdmVuZG9yIGxpc3QgYW5kIGNvbXBhcmUgYWdhaW5z dCB2ZW5kb3IgZmllbGQuCisgKiBVc2VkIG1vc3RseSB3aXRoIHZlbmRvcj0uLi4gZmlsdGVyIHBh cmFtZXRlciB3aGVuIFBDSSBpZCBpcyBub3QgbWF0Y2hlZC4KKyAqLworc3RhdGljIGNvbnN0IGNo YXIgKmdldF9wY2lfdmVuZG9yX2lkX2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSkKK3sKKwljb25z dCBzdHJ1Y3QgbmFtZV92YWx1ZSAqZGF0YSA9ICZncHVfdmVuZG9yX2xpc3RbMF07CisKKwl3aGls ZSAoZGF0YS0+bmFtZSkgeworCQlzdHJ1Y3QgdmVuZG9yX3NwZWMgKnZzID0gKHN0cnVjdCB2ZW5k b3Jfc3BlYyAqKSBkYXRhLT52YWx1ZTsKKworCQlpZiAoIXN0cmNhc2VjbXAobmFtZSwgdnMtPnZl bmRvcikpCisJCQlyZXR1cm4gZGF0YS0+bmFtZTsKKwkJZGF0YSsrOworCX0KKworCXJldHVybiBO VUxMOworfQorCisvKiBSZWFkaW5nIHN5c2F0dHIgdmFsdWVzIGNhbiB0YWtlIHRpbWUgKGV2ZW4g c2Vjb25kcyksCisgKiB3ZSB3YW50IHRvIGF2b2lkIHJlYWRpbmcgc3VjaCBrZXlzLgorICovCitz dGF0aWMgdm9pZCBwb3B1bGF0ZV9ibGFja2xpc3Rfa2V5cyh2b2lkKQoreworCWNvbnN0IGNoYXIg KmtleXNbXSA9IHsgImNvbmZpZyIsICJtb2RhbGlhcyIsICJtb2RlcyIsCisJCQkgICAgICAgInJl c291cmNlIiwKKwkJCSAgICAgICAicmVzb3VyY2UwIiwgInJlc291cmNlMSIsICJyZXNvdXJjZTIi LAorCQkJICAgICAgICJyZXNvdXJjZTMiLCAicmVzb3VyY2U0IiwgInJlc291cmNlNSIsCisJCQkg ICAgICAgInJlc291cmNlMF93YyIsICJyZXNvdXJjZTFfd2MiLCAicmVzb3VyY2UyX3djIiwKKwkJ CSAgICAgICAicmVzb3VyY2UzX3djIiwgInJlc291cmNlNF93YyIsICJyZXNvdXJjZTVfd2MiLAor CQkJICAgICAgICJkcml2ZXIiLAorCQkJICAgICAgICJ1ZXZlbnQiLCBOVUxMfTsKKwljb25zdCBj aGFyICprZXk7CisJaW50IGkgPSAwOworCisJaWYgKHN5c2F0dHJzX2JsYWNrbGlzdF9odCkKKwkJ cmV0dXJuOworCisJc3lzYXR0cnNfYmxhY2tsaXN0X2h0ID0gZ19oYXNoX3RhYmxlX25ldyhnX3N0 cl9oYXNoLCBnX3N0cl9lcXVhbCk7CisJaWd0X2Fzc2VydChzeXNhdHRyc19ibGFja2xpc3RfaHQp OworCisJd2hpbGUgKChrZXkgPSBrZXlzW2krK10pKQorCQlnX2hhc2hfdGFibGVfYWRkKHN5c2F0 dHJzX2JsYWNrbGlzdF9odCwgKGdwb2ludGVyKSBrZXkpOworfQorCisjZGVmaW5lIGlzX29uX2Js YWNrbGlzdChrZXkpIFwKKwlnX2hhc2hfdGFibGVfY29udGFpbnMoc3lzYXR0cnNfYmxhY2tsaXN0 X2h0LCBrZXkpCisKK3N0YXRpYyBzdHJ1Y3QgaWd0X2RldmljZSAqaWd0X2RldmljZV9uZXcodm9p ZCkKK3sKKwlzdHJ1Y3QgaWd0X2RldmljZSAqZGV2OworCisJZGV2ID0gY2FsbG9jKDEsIHNpemVv ZihzdHJ1Y3QgaWd0X2RldmljZSkpOworCWlmICghZGV2KQorCQlyZXR1cm4gTlVMTDsKKworCWRl di0+YXR0cnNfaHQgPSBnX2hhc2hfdGFibGVfbmV3X2Z1bGwoZ19zdHJfaGFzaCwgZ19zdHJfZXF1 YWwsCisJCQkJCSAgICAgIGZyZWUsIGZyZWUpOworCWRldi0+cHJvcHNfaHQgPSBnX2hhc2hfdGFi bGVfbmV3X2Z1bGwoZ19zdHJfaGFzaCwgZ19zdHJfZXF1YWwsCisJCQkJCSAgICAgIGZyZWUsIGZy ZWUpOworCisJaWYgKGRldi0+YXR0cnNfaHQgJiYgZGV2LT5wcm9wc19odCkKKwkJcmV0dXJuIGRl djsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBpZ3RfZGV2aWNlX2FkZF9wcm9w KHN0cnVjdCBpZ3RfZGV2aWNlICpkZXYsCisJCQkJY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFy ICp2YWx1ZSkKK3sKKwlpZiAoIWtleSB8fCAhdmFsdWUpCisJCXJldHVybjsKKworCWdfaGFzaF90 YWJsZV9pbnNlcnQoZGV2LT5wcm9wc19odCwgc3RyZHVwKGtleSksIHN0cmR1cCh2YWx1ZSkpOwor fQorCitzdGF0aWMgdm9pZCBpZ3RfZGV2aWNlX2FkZF9hdHRyKHN0cnVjdCBpZ3RfZGV2aWNlICpk ZXYsCisJCQkJY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwljb25zdCBj aGFyICp2ID0gdmFsdWU7CisKKwlpZiAoIWtleSkKKwkJcmV0dXJuOworCisJLyogSXQncyBwb3Nz aWJsZSB3ZSBoYXZlIHN5bWxpbmsgYXQga2V5IGZpbGVuYW1lLCBidXQgdWRldgorCSAqIGxpYnJh cnkgcmVzb2x2ZXMgb25seSBmZXcgb2YgdGhlbQorCSAqLworCWlmICghdikgeworCQlzdHJ1Y3Qg c3RhdCBzdDsKKwkJY2hhciBwYXRoW1BBVEhfTUFYXTsKKwkJY2hhciBsaW5rdG9bUEFUSF9NQVhd OworCQlpbnQgbGVuOworCisJCXNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgIiVzLyVzIiwg ZGV2LT5zeXNwYXRoLCBrZXkpOworCQlpZiAobHN0YXQocGF0aCwgJnN0KSAhPSAwKQorCQkJcmV0 dXJuOworCisJCWxlbiA9IHJlYWRsaW5rKHBhdGgsIGxpbmt0bywgc2l6ZW9mKGxpbmt0bykpOwor CQlpZiAobGVuIDw9IDAgfHwgbGVuID09IChzc2l6ZV90KSBzaXplb2YobGlua3RvKSkKKwkJCXJl dHVybjsKKwkJbGlua3RvW2xlbl0gPSAnXDAnOworCQl2ID0gc3RycmNocihsaW5rdG8sICcvJyk7 CisJCWlmICh2ID09IE5VTEwpCisJCQlyZXR1cm47CisJCXYrKzsKKwl9CisKKwlnX2hhc2hfdGFi bGVfaW5zZXJ0KGRldi0+YXR0cnNfaHQsIHN0cmR1cChrZXkpLCBzdHJkdXAodikpOworfQorCisv KiBJdGVyYXRlIG92ZXIgdWRldiBwcm9wZXJ0aWVzIGxpc3QgYW5kIHJld3JpdGUgaXQgdG8gaWd0 X2RldmljZSBwcm9wZXJ0aWVzCisgKiBoYXNoIHRhYmxlIGZvciBpbnN0YW50IGFjY2Vzcy4KKyAq Lworc3RhdGljIHZvaWQgZ2V0X3Byb3BzKHN0cnVjdCB1ZGV2X2RldmljZSAqZGV2LCBzdHJ1Y3Qg aWd0X2RldmljZSAqaWRldikKK3sKKwlzdHJ1Y3QgdWRldl9saXN0X2VudHJ5ICplbnRyeTsKKwor CWVudHJ5ID0gdWRldl9kZXZpY2VfZ2V0X3Byb3BlcnRpZXNfbGlzdF9lbnRyeShkZXYpOworCXdo aWxlIChlbnRyeSkgeworCQljb25zdCBjaGFyICpuYW1lID0gdWRldl9saXN0X2VudHJ5X2dldF9u YW1lKGVudHJ5KTsKKwkJY29uc3QgY2hhciAqdmFsdWUgPSB1ZGV2X2xpc3RfZW50cnlfZ2V0X3Zh bHVlKGVudHJ5KTsKKworCQlpZ3RfZGV2aWNlX2FkZF9wcm9wKGlkZXYsIG5hbWUsIHZhbHVlKTsK KwkJZW50cnkgPSB1ZGV2X2xpc3RfZW50cnlfZ2V0X25leHQoZW50cnkpOworCQlEQkcoInByb3A6 ICVzLCB2YWw6ICVzXG4iLCBuYW1lLCB2YWx1ZSk7CisJfQorfQorCisvKiBTYW1lIGFzIGdldF9w cm9wcygpLCBidXQgcmV3cml0ZXMgc3lzYXR0cnMuIFJlc29sdmVzIHN5bWJvbGljIGxpbmtzCisg KiBub3QgaGFuZGxlZCBieSB1ZGV2IGdldF9zeXNhdHRyX3ZhbHVlKCkuCisgKiBGdW5jdGlvbiBz a2lwcyBzeXNhdHRycyBmcm9tIGJsYWNrbGlzdCBodCAoYWNxdWlyaW5nIHNvbWUgdmFsdWVzIGNh biB0YWtlCisgKiBzZWNvbmRzKS4KKyAqLworc3RhdGljIHZvaWQgZ2V0X2F0dHJzKHN0cnVjdCB1 ZGV2X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWd0X2RldmljZSAqaWRldikKK3sKKwlzdHJ1Y3QgdWRl dl9saXN0X2VudHJ5ICplbnRyeTsKKworCWVudHJ5ID0gdWRldl9kZXZpY2VfZ2V0X3N5c2F0dHJf bGlzdF9lbnRyeShkZXYpOworCXdoaWxlIChlbnRyeSkgeworCQljb25zdCBjaGFyICprZXkgPSB1 ZGV2X2xpc3RfZW50cnlfZ2V0X25hbWUoZW50cnkpOworCQljb25zdCBjaGFyICp2YWx1ZTsKKwor CQlpZiAoaXNfb25fYmxhY2tsaXN0KGtleSkpIHsKKwkJCWVudHJ5ID0gdWRldl9saXN0X2VudHJ5 X2dldF9uZXh0KGVudHJ5KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJdmFsdWUgPSB1ZGV2X2Rl dmljZV9nZXRfc3lzYXR0cl92YWx1ZShkZXYsIGtleSk7CisJCWlndF9kZXZpY2VfYWRkX2F0dHIo aWRldiwga2V5LCB2YWx1ZSk7CisJCWVudHJ5ID0gdWRldl9saXN0X2VudHJ5X2dldF9uZXh0KGVu dHJ5KTsKKwkJREJHKCJhdHRyOiAlcywgdmFsOiAlc1xuIiwga2V5LCB2YWx1ZSk7CisJfQorfQor CisjZGVmaW5lIGdldF9wcm9wKGRldiwgcHJvcCkgKChjaGFyICopIGdfaGFzaF90YWJsZV9sb29r dXAoZGV2LT5wcm9wc19odCwgcHJvcCkpCisjZGVmaW5lIGdldF9hdHRyKGRldiwgYXR0cikgKChj aGFyICopIGdfaGFzaF90YWJsZV9sb29rdXAoZGV2LT5hdHRyc19odCwgYXR0cikpCisjZGVmaW5l IGdldF9wcm9wX3N1YnN5c3RlbShkZXYpIGdldF9wcm9wKGRldiwgIlNVQlNZU1RFTSIpCisjZGVm aW5lIGlzX2RybV9zdWJzeXN0ZW0oZGV2KSAgICghc3RyY21wKGdldF9wcm9wX3N1YnN5c3RlbShk ZXYpLCAiZHJtIikpCisjZGVmaW5lIGlzX3BjaV9zdWJzeXN0ZW0oZGV2KSAgICghc3RyY21wKGdl dF9wcm9wX3N1YnN5c3RlbShkZXYpLCAicGNpIikpCisjZGVmaW5lIGlzX3BsYXRmb3JtX3N1YnN5 c3RlbShkZXYpIFwKKwkoIXN0cmNtcChnZXRfcHJvcF9zdWJzeXN0ZW0oZGV2KSwgInBsYXRmb3Jt IikpCisKKy8qIEdldHMgUENJX0lEIHByb3BlcnR5LCBzcGxpdHMgdG8geHh4eDp5eXl5IGFuZCBz dG9yZXMKKyAqIHh4eHggdG8gZGV2LT52ZW5kb3IgYW5kIHl5eXkgdG8gZGV2LT5kZXZpY2UgZm9y CisgKiBmYXN0ZXIgYWNjZXNzLgorICovCitzdGF0aWMgdm9pZCBzZXRfdmVuZG9yX2RldmljZShz dHJ1Y3QgaWd0X2RldmljZSAqZGV2KQoreworCWNvbnN0IGNoYXIgKnBjaV9pZCA9IGdldF9wcm9w KGRldiwgIlBDSV9JRCIpOworCisJaWYgKCFwY2lfaWQgfHwgc3RybGVuKHBjaV9pZCkgIT0gOSkK KwkJcmV0dXJuOworCWRldi0+dmVuZG9yID0gc3RybmR1cChwY2lfaWQsIDQpOworCWRldi0+ZGV2 aWNlID0gc3RybmR1cChwY2lfaWQgKyA1LCA0KTsKK30KKworLyogQWxsb2NhdGUgYXJyYXlzIGZv ciBrZWVwaW5nIHNjYW5uZWQgZGV2aWNlcyAqLworc3RhdGljIGJvb2wgcHJlcGFyZV9zY2FuKHZv aWQpCit7CisJaWYgKCFpZ3RfZGV2cy5kZXZzKQorCQlpZ3RfZGV2cy5kZXZzID0gZ19wdHJfYXJy YXlfc2l6ZWRfbmV3KDQpOworCWlmICghaWd0X2RldnMudmlldykKKwkJaWd0X2RldnMudmlldyA9 IGdfcHRyX2FycmF5X3NpemVkX25ldyg0KTsKKworCWlmICghaWd0X2RldnMuZGV2cyB8fCAhaWd0 X2RldnMudmlldykKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKKy8qIENy ZWF0ZSBuZXcgaWd0X2RldmljZSBmcm9tIHVkZXYgZGV2aWNlLgorICogRmlsbHMgc3RydWN0dXJl IHdpdGggbW9zdCB1c2FibGUgdWRldiBkZXZpY2UgdmFyaWFibGVzLCBwcm9wZXJ0aWVzCisgKiBh bmQgc3lzYXR0cnMuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaWd0X2RldmljZSAqaWd0X2RldmljZV9u ZXdfZnJvbV91ZGV2KHN0cnVjdCB1ZGV2X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBpZ3RfZGV2 aWNlICppZGV2ID0gaWd0X2RldmljZV9uZXcoKTsKKworCWlndF9hc3NlcnQoaWRldik7CisJaWRl di0+c3lzcGF0aCA9IGdfc3RyZHVwKHVkZXZfZGV2aWNlX2dldF9zeXNwYXRoKGRldikpOworCWlk ZXYtPnN1YnN5c3RlbSA9IGdfc3RyZHVwKHVkZXZfZGV2aWNlX2dldF9zdWJzeXN0ZW0oZGV2KSk7 CisJaWRldi0+ZGV2bm9kZSA9IGdfc3RyZHVwKHVkZXZfZGV2aWNlX2dldF9kZXZub2RlKGRldikp OworCisJaWYgKGlkZXYtPmRldm5vZGUgJiYgc3Ryc3RyKGlkZXYtPmRldm5vZGUsICIvZGV2L2Ry aS9jYXJkIikpCisJCWlkZXYtPmRybV9jYXJkID0gZ19zdHJkdXAoaWRldi0+ZGV2bm9kZSk7CisJ ZWxzZSBpZiAoaWRldi0+ZGV2bm9kZSAmJiBzdHJzdHIoaWRldi0+ZGV2bm9kZSwgIi9kZXYvZHJp L3JlbmRlciIpKQorCQlpZGV2LT5kcm1fcmVuZGVyID0gZ19zdHJkdXAoaWRldi0+ZGV2bm9kZSk7 CisKKwlnZXRfcHJvcHMoZGV2LCBpZGV2KTsKKwlnZXRfYXR0cnMoZGV2LCBpZGV2KTsKKworCXJl dHVybiBpZGV2OworfQorCisvKiBJdGVyYXRlIG92ZXIgYWxsIGlndF9kZXZpY2VzIGFycmF5IGFu ZCBmaW5kIG9uZSBtYXRjaGVkIHRvCisgKiBzdWJzeXN0ZW0gYW5kIHN5c3BhdGguCisgKi8KK3N0 YXRpYyBzdHJ1Y3QgaWd0X2RldmljZSAqaWd0X2RldmljZV9maW5kKGNvbnN0IGNoYXIgKnN1YnN5 c3RlbSwKKwkJCQkJICBjb25zdCBjaGFyICpzeXNwYXRoKQoreworCXN0cnVjdCBpZ3RfZGV2aWNl ICpkZXY7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IGlndF9kZXZzLmRldnMtPmxlbjsgaSsrKSB7 CisJCWRldiA9IGdfcHRyX2FycmF5X2luZGV4KGlndF9kZXZzLmRldnMsIGkpOworCQlpZiAoIXN0 cmNtcChkZXYtPnN1YnN5c3RlbSwgc3Vic3lzdGVtKSAmJgorCQkJIXN0cmNtcChkZXYtPnN5c3Bh dGgsIHN5c3BhdGgpKQorCQkJcmV0dXJuIGRldjsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8q IEZvciBlYWNoIGRybSBpZ3RfZGV2aWNlIGFkZCBvciB1cGRhdGUgaXRzIHBhcmVudCBpZ3RfZGV2 aWNlIHRvIHRoZSBhcnJheS4KKyAqIEFzIGNhcmQvcmVuZGVyIGRybSBkZXZpY2VzIG1vc3RseSBo YXZlIHNhbWUgcGFyZW50ICh2a21zIGlzIGFuIGV4Y2VwdGlvbikKKyAqIGxpbmsgdG8gaXQgYW5k IHVwZGF0ZSBjb3JyZXNwb25kaW5nIGRybV9jYXJkIC8gZHJtX3JlbmRlciBmaWVsZHMuCisgKi8K K3N0YXRpYyB2b2lkIHVwZGF0ZV9vcl9hZGRfcGFyZW50KHN0cnVjdCB1ZGV2X2RldmljZSAqZGV2 LAorCQkJCSBzdHJ1Y3QgaWd0X2RldmljZSAqaWRldikKK3sKKwlzdHJ1Y3QgdWRldl9kZXZpY2Ug KnBhcmVudF9kZXY7CisJc3RydWN0IGlndF9kZXZpY2UgKnBhcmVudF9pZGV2OworCWNvbnN0IGNo YXIgKnN1YnN5c3RlbSwgKnN5c3BhdGgsICpkZXZuYW1lOworCisJcGFyZW50X2RldiA9IHVkZXZf ZGV2aWNlX2dldF9wYXJlbnQoZGV2KTsKKwlpZ3RfYXNzZXJ0KHBhcmVudF9kZXYpOworCisJc3Vi c3lzdGVtID0gdWRldl9kZXZpY2VfZ2V0X3N1YnN5c3RlbShwYXJlbnRfZGV2KTsKKwlzeXNwYXRo ID0gdWRldl9kZXZpY2VfZ2V0X3N5c3BhdGgocGFyZW50X2Rldik7CisKKwlwYXJlbnRfaWRldiA9 IGlndF9kZXZpY2VfZmluZChzdWJzeXN0ZW0sIHN5c3BhdGgpOworCWlmICghcGFyZW50X2lkZXYp IHsKKwkJcGFyZW50X2lkZXYgPSBpZ3RfZGV2aWNlX25ld19mcm9tX3VkZXYocGFyZW50X2Rldik7 CisJCWlmIChpc19wY2lfc3Vic3lzdGVtKHBhcmVudF9pZGV2KSkgeworCQkJc2V0X3ZlbmRvcl9k ZXZpY2UocGFyZW50X2lkZXYpOworCQkJcGFyZW50X2lkZXYtPnZzID0gZ2V0X3ZlbmRvcl9zcGVj KHBhcmVudF9pZGV2LT52ZW5kb3IpOworCQl9CisJCWdfcHRyX2FycmF5X2FkZChpZ3RfZGV2cy5k ZXZzLCBwYXJlbnRfaWRldik7CisJfQorCWRldm5hbWUgPSB1ZGV2X2RldmljZV9nZXRfZGV2bm9k ZShkZXYpOworCWlmIChzdHJzdHIoZGV2bmFtZSwgIi9kZXYvZHJpL2NhcmQiKSkKKwkJcGFyZW50 X2lkZXYtPmRybV9jYXJkID0gZ19zdHJkdXAoZGV2bmFtZSk7CisJZWxzZSBpZiAoc3Ryc3RyKGRl dm5hbWUsICIvZGV2L2RyaS9yZW5kZXIiKSkKKwkJcGFyZW50X2lkZXYtPmRybV9yZW5kZXIgPSBn X3N0cmR1cChkZXZuYW1lKTsKKworCWlkZXYtPnBhcmVudCA9IHBhcmVudF9pZGV2OworfQorCitz dGF0aWMgZ2ludCBkZXZzX2NvbXBhcmUoZ2NvbnN0cG9pbnRlciBhLCBnY29uc3Rwb2ludGVyIGIp Cit7CisJc3RydWN0IGlndF9kZXZpY2UgKmRldjEsICpkZXYyOworCWludCByZXQ7CisKKwlkZXYx ID0gKihzdHJ1Y3QgaWd0X2RldmljZSAqKikgYTsKKwlkZXYyID0gKihzdHJ1Y3QgaWd0X2Rldmlj ZSAqKikgYjsKKwlyZXQgPSBzdHJjbXAoZGV2MS0+c3Vic3lzdGVtLCBkZXYyLT5zdWJzeXN0ZW0p OworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gc3RyY21wKGRldjEtPnN5c3Bh dGgsIGRldjItPnN5c3BhdGgpOworfQorCisvKiBDb3JlIHNjYW5uaW5nIGZ1bmN0aW9uLgorICoK KyAqIEFsbCBzY2FubmVkIGRldmljZXMgYXJlIGtlcHQgaW5zaWRlIGlndF9kZXZzLmRldnMgcG9p bnRlciBhcnJheS4KKyAqIEVhY2ggYWRkZWQgZGV2aWNlIGlzIGlndF9kZXZpY2Ugc3RydWN0dXJl LCB3aGljaCBjb250cmFyeSB0byB1ZGV2IGRldmljZQorICogaGFzIHByb3BlcnRpZXMgLyBzeXNh dHRycyBzdG9yZWQgaW5zaWRlIGhhc2ggdGFibGUgaW5zdGVhZCBvZiBsaXN0LgorICoKKyAqIEZ1 bmN0aW9uIGl0ZXJhdGVzIG92ZXIgZGV2aWNlcyBvbiAnZHJtJyBzdWJzeXN0ZW0uIEZvciBlYWNo IGRybSBkZXZpY2UKKyAqIGl0cyBwYXJlbnQgaXMgdGFrZW4gKGJ1cyBkZXZpY2UpIGFuZCBzdG9y ZWQgaW5zaWRlIHNhbWUgYXJyYXkuCisgKiBGdW5jdGlvbiBzb3J0cyBhbGwgZm91bmQgZGV2aWNl cyB0byBrZWVwIHNhbWUgb3JkZXIgb2YgYnVzIGRldmljZXMKKyAqIGZvciBwcm92aWRpbmcgcHJl ZGljdGFibGUgc2VhcmNoLgorICovCitzdGF0aWMgdm9pZCBzY2FuX2RybV9kZXZpY2VzKHZvaWQp Cit7CisJc3RydWN0IHVkZXYgKnVkZXY7CisJc3RydWN0IHVkZXZfZW51bWVyYXRlICplbnVtZXJh dGU7CisJc3RydWN0IHVkZXZfbGlzdF9lbnRyeSAqZGV2aWNlcywgKmRldl9saXN0X2VudHJ5Owor CWludCByZXQ7CisKKwl1ZGV2ID0gdWRldl9uZXcoKTsKKwlpZ3RfYXNzZXJ0KHVkZXYpOworCisJ ZW51bWVyYXRlID0gdWRldl9lbnVtZXJhdGVfbmV3KHVkZXYpOworCWlndF9hc3NlcnQoZW51bWVy YXRlKTsKKworCURCRygiU2Nhbm5pbmcgZHJtIHN1YnN5c3RlbVxuIik7CisJcmV0ID0gdWRldl9l bnVtZXJhdGVfYWRkX21hdGNoX3N1YnN5c3RlbShlbnVtZXJhdGUsICJkcm0iKTsKKwlpZ3RfYXNz ZXJ0KCFyZXQpOworCisJdWRldl9lbnVtZXJhdGVfYWRkX21hdGNoX3Byb3BlcnR5KGVudW1lcmF0 ZSwgIkRFVk5BTUUiLCAiL2Rldi9kcmkvKiIpOworCWlndF9hc3NlcnQoIXJldCk7CisKKwlyZXQg PSB1ZGV2X2VudW1lcmF0ZV9zY2FuX2RldmljZXMoZW51bWVyYXRlKTsKKwlpZ3RfYXNzZXJ0KCFy ZXQpOworCisJZGV2aWNlcyA9IHVkZXZfZW51bWVyYXRlX2dldF9saXN0X2VudHJ5KGVudW1lcmF0 ZSk7CisJaWYgKCFkZXZpY2VzKQorCQlyZXR1cm47CisKKwl1ZGV2X2xpc3RfZW50cnlfZm9yZWFj aChkZXZfbGlzdF9lbnRyeSwgZGV2aWNlcykgeworCQljb25zdCBjaGFyICpwYXRoOworCQlzdHJ1 Y3QgdWRldl9kZXZpY2UgKmRldjsKKwkJc3RydWN0IGlndF9kZXZpY2UgKmlkZXY7CisKKwkJcGF0 aCA9IHVkZXZfbGlzdF9lbnRyeV9nZXRfbmFtZShkZXZfbGlzdF9lbnRyeSk7CisJCWRldiA9IHVk ZXZfZGV2aWNlX25ld19mcm9tX3N5c3BhdGgodWRldiwgcGF0aCk7CisJCWlkZXYgPSBpZ3RfZGV2 aWNlX25ld19mcm9tX3VkZXYoZGV2KTsKKwkJdXBkYXRlX29yX2FkZF9wYXJlbnQoZGV2LCBpZGV2 KTsKKwkJZ19wdHJfYXJyYXlfYWRkKGlndF9kZXZzLmRldnMsIGlkZXYpOworCisJCXVkZXZfZGV2 aWNlX3VucmVmKGRldik7CisJfQorCXVkZXZfZW51bWVyYXRlX3VucmVmKGVudW1lcmF0ZSk7CisJ dWRldl91bnJlZih1ZGV2KTsKKworCWdfcHRyX2FycmF5X3NvcnQoaWd0X2RldnMuZGV2cywgZGV2 c19jb21wYXJlKTsKKwlmb3IgKGludCBpID0gMDsgaSA8IGlndF9kZXZzLmRldnMtPmxlbjsgaSsr KSB7CisJCWdfcHRyX2FycmF5X2FkZChpZ3RfZGV2cy52aWV3LAorCQkJCWdfcHRyX2FycmF5X2lu ZGV4KGlndF9kZXZzLmRldnMsIGkpKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbmFtZV92YWx1 ZSBmaWx0ZXJfZGVmaW5pdGlvbl9saXN0W107CitzdGF0aWMgdm9pZCBwb3B1bGF0ZV9ncHVfZGF0 YSh2b2lkKQoreworCWlmIChncHVfdmVuZG9yX2h0KQorCQlyZXR1cm47CisJZmlsbF9odCgmZ3B1 X3ZlbmRvcl9odCwgJmdwdV92ZW5kb3JfbGlzdFswXSk7CisJZmlsbF9odCgmZmlsdGVyX2RlZmlu aXRpb25faHQsICZmaWx0ZXJfZGVmaW5pdGlvbl9saXN0WzBdKTsKK30KKworc3RhdGljIHZvaWQg aWd0X2RldmljZV9mcmVlKHN0cnVjdCBpZ3RfZGV2aWNlICpkZXYpCit7CisJZnJlZShkZXYtPmRl dm5vZGUpOworCWZyZWUoZGV2LT5zdWJzeXN0ZW0pOworCWZyZWUoZGV2LT5zeXNwYXRoKTsKKwlm cmVlKGRldi0+ZHJtX2NhcmQpOworCWZyZWUoZGV2LT5kcm1fcmVuZGVyKTsKKwlmcmVlKGRldi0+ dmVuZG9yKTsKKwlmcmVlKGRldi0+ZGV2aWNlKTsKKwlnX2hhc2hfdGFibGVfZGVzdHJveShkZXYt PmF0dHJzX2h0KTsKKwlnX2hhc2hfdGFibGVfZGVzdHJveShkZXYtPnByb3BzX2h0KTsKK30KKwor LyoqCisgKiBpZ3RfZGV2aWNlc19zY2FuCisgKiBAZm9yY2U6IGVuZm9yY2Ugc2Nhbm5pbmcgZGV2 aWNlcworICoKKyAqIEZ1bmN0aW9uIHNjYW5zIHVkZXYgaW4gc2VhcmNoIG9mIGdwdSBkZXZpY2Vz LiBGb3IgZmlyc3QgcnVuIGl0IGNhbiBiZQorICogY2FsbGVkIHdpdGggQGZvcmNlID0gZmFsc2Uu IElmIHNvbWV0aGluZyBjaGFuZ2VzIGR1cmluZyB0aGUgdGhlIHRlc3QKKyAqIG9yIHRlc3QgZG9l cyBzb21lIG1vZHVsZSBsb2FkaW5nIChuZXcgZHJtIGRldmljZXMgb2NjdXJzIGR1cmluZyBleGVj dXRpb24pCisgKiBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBhZ2FpbiB3aXRoIEBmb3JjZSA9IHRy dWUgdG8gcmVmcmVzaCBkZXZpY2UgYXJyYXkuCisgKi8KK3ZvaWQgaWd0X2RldmljZXNfc2Nhbihi b29sIGZvcmNlKQoreworCWlmIChmb3JjZSAmJiBpZ3RfZGV2cy5kZXZzX3NjYW5uZWQpIHsKKwkJ Zm9yIChpbnQgaSA9IDA7IGkgPCBpZ3RfZGV2cy5kZXZzLT5sZW47IGkrKykgeworCQkJc3RydWN0 IGlndF9kZXZpY2UgKmRldiA9CisJCQkJCWdfcHRyX2FycmF5X2luZGV4KGlndF9kZXZzLmRldnMs IGkpOworCQkJaWd0X2RldmljZV9mcmVlKGRldik7CisJCQlmcmVlKGRldik7CisJCX0KKwkJaWd0 X2RldnMuZGV2c19zY2FubmVkID0gZmFsc2U7CisJCWdfcHRyX2FycmF5X2ZyZWUoaWd0X2RldnMu dmlldywgdHJ1ZSk7CisJCWdfcHRyX2FycmF5X2ZyZWUoaWd0X2RldnMuZGV2cywgdHJ1ZSk7CisJ CWlndF9kZXZzLnZpZXcgPSBOVUxMOworCQlpZ3RfZGV2cy5kZXZzID0gTlVMTDsKKwl9CisKKwlp ZiAoaWd0X2RldnMuZGV2c19zY2FubmVkKQorCQlyZXR1cm47CisKKwlwb3B1bGF0ZV9ibGFja2xp c3Rfa2V5cygpOyAgICAgIC8va2V5cyBmcm9tIHN5c2F0dHIgd2Ugc2tpcAorCXBvcHVsYXRlX2dw dV9kYXRhKCk7CisKKwlwcmVwYXJlX3NjYW4oKTsKKwlzY2FuX2RybV9kZXZpY2VzKCk7CisKKwlp Z3RfZGV2cy5kZXZzX3NjYW5uZWQgPSB0cnVlOworfQorCisjZGVmaW5lIHByX3NpbXBsZShrLCB2 KSBwcmludGYoIiAgICAlLTE2czogJXNcbiIsIGssIHYpCisjZGVmaW5lIHByX3NpbXBsZTIoaywg djEsIHYyKSBwcmludGYoIiAgICAlLTE2czogJXM6JXNcbiIsIGssIHYxLCB2MikKKyNkZWZpbmUg cHJfc2ltcGxlX3Byb3AoZGV2LCBrZXkpIHByX3NpbXBsZShrZXksIGdldF9wcm9wKGRldiwga2V5 KSkKKyNkZWZpbmUgcHJfc2ltcGxlX2F0dHIoZGV2LCBrZXkpIHByX3NpbXBsZShrZXksIGdldF9h dHRyKGRldiwga2V5KSkKKworc3RhdGljIHZvaWQgaWd0X2RldnNfcHJpbnRfc2ltcGxlKEdQdHJB cnJheSAqdmlldykKK3sKKwlzdHJ1Y3QgaWd0X2RldmljZSAqZGV2OworCWludCBpOworCisJaWYg KCF2aWV3KQorCQlyZXR1cm47CisKKwlpZiAoIXZpZXctPmxlbikgeworCQlwcmludGYoIk5vIEdQ VSBkZXZpY2VzIGZvdW5kXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWZvciAoaSA9IDA7IGkgPCB2 aWV3LT5sZW47IGkrKykgeworCQlkZXYgPSBnX3B0cl9hcnJheV9pbmRleCh2aWV3LCBpKTsKKwkJ cHJpbnRmKCIlczolc1xuIiwgZGV2LT5zdWJzeXN0ZW0sIGRldi0+c3lzcGF0aCk7CisJCWlmIChk ZXYtPmRybV9jYXJkKQorCQkJcHJfc2ltcGxlKCJkcm0gY2FyZCIsIGRldi0+ZHJtX2NhcmQpOwor CQlpZiAoZGV2LT5kcm1fcmVuZGVyKQorCQkJcHJfc2ltcGxlKCJkcm0gcmVuZGVyIiwgZGV2LT5k cm1fcmVuZGVyKTsKKwkJaWYgKGlzX2RybV9zdWJzeXN0ZW0oZGV2KSkgeworCQkJcHJfc2ltcGxl MigicGFyZW50IiwgZGV2LT5wYXJlbnQtPnN1YnN5c3RlbSwKKwkJCQkgICBkZXYtPnBhcmVudC0+ c3lzcGF0aCk7CisJCX0gZWxzZSB7CisJCQlpZiAoaXNfcGNpX3N1YnN5c3RlbShkZXYpKSB7CisJ CQkJcHJfc2ltcGxlKCJ2ZW5kb3IiLCBkZXYtPnZlbmRvcik7CisJCQkJcHJfc2ltcGxlKCJkZXZp Y2UiLCBkZXYtPmRldmljZSk7CisJCQl9CisJCX0KKwkJcHJpbnRmKCJcbiIpOworCX0KK30KKwor I2RlZmluZSBwcl9kZXRhaWwoaywgdikgcHJpbnRmKCIlLTMyczogJXNcbiIsIGssIHYpCisKK3N0 YXRpYyB2b2lkIHByaW50X2h0KEdIYXNoVGFibGUgKmh0KQoreworCUdMaXN0ICprZXlzID0gZ19o YXNoX3RhYmxlX2dldF9rZXlzKGh0KTsKKworCWtleXMgPSBnX2xpc3Rfc29ydChrZXlzLCAoR0Nv bXBhcmVGdW5jKSBzdHJjbXApOworCXdoaWxlIChrZXlzKSB7CisJCWNoYXIgKmsgPSAoY2hhciAq KSBrZXlzLT5kYXRhOworCQljaGFyICp2ID0gZ19oYXNoX3RhYmxlX2xvb2t1cChodCwgayk7CisK KwkJcHJfZGV0YWlsKGssIHYpOworCQlrZXlzID0gZ19saXN0X25leHQoa2V5cyk7CisJfQorCWdf bGlzdF9mcmVlKGtleXMpOworfQorCitzdGF0aWMgdm9pZCBpZ3RfZGV2c19wcmludF9kZXRhaWwo R1B0ckFycmF5ICp2aWV3KQoreworCXN0cnVjdCBpZ3RfZGV2aWNlICpkZXY7CisJaW50IGk7CisK KwlpZiAoIXZpZXcpCisJCXJldHVybjsKKworCWlmICghdmlldy0+bGVuKSB7CisJCXByaW50Zigi Tm8gR1BVIGRldmljZXMgZm91bmRcbiIpOworCQlyZXR1cm47CisJfQorCisJZm9yIChpID0gMDsg aSA8IHZpZXctPmxlbjsgaSsrKSB7CisJCWRldiA9IGdfcHRyX2FycmF5X2luZGV4KHZpZXcsIGkp OworCQlwcmludGYoIj09PT09PT09PT0gJXM6JXMgPT09PT09PT09PVxuIiwKKwkJICAgICAgIGRl di0+c3Vic3lzdGVtLCBkZXYtPnN5c3BhdGgpOworCQlpZiAoIWlzX2RybV9zdWJzeXN0ZW0oZGV2 KSkgeworCQkJcHJfZGV0YWlsKCJjYXJkIGRldmljZSIsIGRldi0+ZHJtX2NhcmQpOworCQkJcHJf ZGV0YWlsKCJyZW5kZXIgZGV2aWNlIiwgZGV2LT5kcm1fcmVuZGVyKTsKKwkJfQorCisJCXByaW50 ZigiXG5bcHJvcGVydGllc11cbiIpOworCQlwcmludF9odChkZXYtPnByb3BzX2h0KTsKKwkJcHJp bnRmKCJcblthdHRyaWJ1dGVzXVxuIik7CisJCXByaW50X2h0KGRldi0+YXR0cnNfaHQpOworCQlw cmludGYoIlxuIik7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHByaW50X2Z1bmMgeworCXZvaWQg KCpwcm4pKEdQdHJBcnJheSAqdmlldyk7Cit9IHByaW50X2Z1bmN0aW9uc1tdID0geworCVtJR1Rf UFJJTlRfU0lNUExFXSA9IHsgLnBybiA9IGlndF9kZXZzX3ByaW50X3NpbXBsZSB9LAorCVtJR1Rf UFJJTlRfREVUQUlMXSA9IHsgLnBybiA9IGlndF9kZXZzX3ByaW50X2RldGFpbCB9LAorfTsKKwor LyoqCisgKiBpZ3RfZGV2aWNlc19wcmludAorICogQHByaW50dHlwZTogSUdUX1BSSU5UX1NJTVBM RSBvciBJR1RfUFJJTlRfREVUQUlMCisgKgorICogRnVuY3Rpb24gY2FuIGJlIHVzZWQgYnkgZXh0 ZXJuYWwgdG9vbCB0byBwcmludCBkZXZpY2UgYXJyYXkgaW4gc2ltcGxlCisgKiBvciBkZXRhaWxl ZCBmb3JtLiBUaGlzIGZ1bmN0aW9uIGlzIGFkZGVkIGhlcmUgdG8gYXZvaWQgZXhwb3NpbmcKKyAq IGludGVybmFsIGltcGxlbWVudGF0aW9uIGRhdGEgc3RydWN0dXJlcy4KKyAqLwordm9pZCBpZ3Rf ZGV2aWNlc19wcmludChlbnVtIGlndF9kZXZpY2VzX3ByaW50X3R5cGUgcHJpbnR0eXBlKQorewor CXByaW50X2Z1bmN0aW9uc1twcmludHR5cGVdLnBybihpZ3RfZGV2cy52aWV3KTsKK30KKworLyoq CisgKiBpZ3RfZGV2aWNlc19wcmludF92ZW5kb3JzCisgKgorICogUHJpbnQgcGNpIGlkIC0+IHZl bmRvciBtYXBwaW5ncy4gVmVuZG9yIG5hbWVzIHByaW50ZWQgYnkgdGhpcyBmdW5jdGlvbgorICog Y2FuIGJlIHVzZWQgZm9yIGZpbHRlcnMgbGlrZSBwY2kgd2hpY2ggYWxsb3dzIHBhc3NpbmcgdmVu ZG9yIC0gbGlrZQorICogdmVuZG9yIGlkICg4MDg2KSBvciBhcyBhIHN0cmluZyAoSW50ZWwpLgor ICovCit2b2lkIGlndF9kZXZpY2VzX3ByaW50X3ZlbmRvcnModm9pZCkKK3sKKwljb25zdCBzdHJ1 Y3QgbmFtZV92YWx1ZSAqbGlzdCA9ICZncHVfdmVuZG9yX2xpc3RbMF07CisKKwlwcmludGYoIlJl Y29nbml6ZWQgdmVuZG9yczpcbiIpOworCXByaW50ZigiJS04cyAlLTE2c1xuIiwgIlBDSSBJRCIs ICJ2ZW5kb3IiKTsKKwl3aGlsZSAobGlzdC0+bmFtZSkgeworCQlzdHJ1Y3QgdmVuZG9yX3NwZWMg KnZzID0gKHN0cnVjdCB2ZW5kb3Jfc3BlYyAqKSBsaXN0LT52YWx1ZTsKKworCQlpZiAodnMpCisJ CQlwcmludGYoIiUtOHMgJS0xNnNcbiIsIGxpc3QtPm5hbWUsIHZzLT52ZW5kb3IpOworCQlsaXN0 Kys7CisJfQorfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZJTFRFUl9TUEVD X05BTUVfTEVOIDMyCisjZGVmaW5lIEZJTFRFUl9TUEVDX0RBVEFfTEVOIDI1Ngorc3RydWN0IGZp bHRlcl9zcGVjIHsKKwljaGFyIG5hbWVbRklMVEVSX1NQRUNfTkFNRV9MRU5dOworCWNoYXIgZGF0 YVtGSUxURVJfU1BFQ19EQVRBX0xFTl07Cit9OworCitzdHJ1Y3QgZmlsdGVyX2Z1bmMgeworCUdQ dHJBcnJheSAqKCpmaWx0ZXJfZnVuY3Rpb24pKHN0cnVjdCBmaWx0ZXJfc3BlYyAqZnNwZWMsCisJ CQkJICAgICAgc3RydWN0IGZpbHRlcl9mdW5jICpmZnVuYyk7CisJY29uc3QgY2hhciAqaGVscDsK Kwljb25zdCBjaGFyICpkZXRhaWw7CisKKwljb25zdCBjaGFyICpwcm9wZXJ0eTsKKwljb25zdCBj aGFyICp2YWx1ZTsKK307CisKK3N0cnVjdCBmaWx0ZXJfZGF0YSB7CisJY2hhciAqdmVuZG9yOwor CWNoYXIgKmRldmljZTsKKwljaGFyICpjYXJkOworCWNoYXIgKmRybTsKK307CisKK3N0YXRpYyBH SGFzaFRhYmxlICpzcGxpdF9maWx0ZXJfZGF0YShjb25zdCBjaGFyICpkYXRhKQoreworCUdIYXNo VGFibGUgKmh0ID0gZ19oYXNoX3RhYmxlX25ld19mdWxsKGdfc3RyX2hhc2gsIGdfc3RyX2VxdWFs LAorCQkJCQkgICAgICAgZnJlZSwgZnJlZSk7CisJZ2NoYXIgKipzOworCWdjaGFyICoqc3RydiA9 IGdfc3Ryc3BsaXQoZGF0YSwgIiwiLCAtMSk7CisKKwlzID0gc3RydjsKKwl3aGlsZSAoKnMpIHsK KwkJY2hhciAqaywgKnY7CisKKwkJdiA9IHN0cmNocigqcywgJz0nKTsKKwkJaWYgKCF2KSB7CisJ CQlzKys7CisJCQljb250aW51ZTsKKwkJfQorCQlrID0gc3RybmR1cCgqcywgdiAtICgqcykpOwor CQl2ID0gc3RyZHVwKHYgKyAxKTsKKwkJZ19oYXNoX3RhYmxlX2luc2VydChodCwgaywgdik7CisJ CXMrKzsKKwl9CisJZ19zdHJmcmVldihzdHJ2KTsKKworCXJldHVybiBodDsKK30KKworc3RhdGlj IGJvb2wgZ2V0X2ZpbHRlcl9zcGVjKGNvbnN0IGNoYXIgKmZpbHRlciwgc3RydWN0IGZpbHRlcl9z cGVjICpzcGVjKQoreworCWlmICghZmlsdGVyIHx8ICFzcGVjKQorCQlyZXR1cm4gZmFsc2U7CisK KwltZW1zZXQoc3BlYywgMCwgc2l6ZW9mKCpzcGVjKSk7CisKKwlpZiAoc3NjYW5mKGZpbHRlciwg IiUzMVteOl06JTI1NXMiLCBzcGVjLT5uYW1lLCBzcGVjLT5kYXRhKSA+PSAxKQorCQlyZXR1cm4g dHJ1ZTsKKworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wgaXNfdmVuZG9yX21hdGNo ZWQoc3RydWN0IGlndF9kZXZpY2UgKmRldiwgY29uc3QgY2hhciAqdmVuZG9yKQoreworCWNvbnN0 IGNoYXIgKnZlbmRvcl9pZDsKKworCWlmICghZGV2LT52ZW5kb3IgfHwgIXZlbmRvcikKKwkJcmV0 dXJuIGZhbHNlOworCisJLyogRmlyc3Qgd2UgY29tcGFyZSB2ZW5kb3IgaWQsIGxpa2UgODA4NiAq LworCWlmICghc3RyY2FzZWNtcChkZXYtPnZlbmRvciwgdmVuZG9yKSkKKwkJcmV0dXJuIHRydWU7 CisKKwkvKiBMaWtlbHkgd2UgaGF2ZSB2ZW5kb3Igc3RyaW5nIGluc3RlYWQgb2YgaWQgKi8KKwl2 ZW5kb3JfaWQgPSBnZXRfcGNpX3ZlbmRvcl9pZF9ieV9uYW1lKHZlbmRvcik7CisJaWYgKCF2ZW5k b3JfaWQpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiAhc3RyY2FzZWNtcChkZXYtPnZlbmRv ciwgdmVuZG9yX2lkKTsKK30KKworLyogRmlsdGVyIHdoaWNoIG1hdGNoZXMgc3Vic3lzdGVtOi9z eXMvLi4uIHBhdGguCisgKiBVc2VkIGFzIGZpcnN0IGZpbHRlciBpbiBjaGFpbi4KKyAqLworc3Rh dGljIEdQdHJBcnJheSAqZmlsdGVyX3N5cyhzdHJ1Y3QgZmlsdGVyX3NwZWMgKmZzcGVjLAorCQkJ ICAgICBzdHJ1Y3QgZmlsdGVyX2Z1bmMgKmZmdW5jKQoreworCSh2b2lkKSBmZnVuYzsKKworCURC RygiZmlsdGVyIHN5c1xuIik7CisJaWYgKCFzdHJsZW4oZnNwZWMtPmRhdGEpKQorCQlyZXR1cm4g aWd0X2RldnMudmlldzsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgaWd0X2RldnMuZGV2cy0+bGVu OyBpKyspIHsKKwkJc3RydWN0IGlndF9kZXZpY2UgKmRldiA9IGdfcHRyX2FycmF5X2luZGV4KGln dF9kZXZzLmRldnMsIGkpOworCisJCWlmIChzdHJlcXVhbChkZXYtPnN1YnN5c3RlbSwgZnNwZWMt Pm5hbWUpICYmCisJCQlzdHJlcXVhbChkZXYtPnN5c3BhdGgsIGZzcGVjLT5kYXRhKSkgeworCQkJ Z19wdHJfYXJyYXlfYWRkKGlndF9kZXZzLnZpZXcsIGRldik7CisJCQlicmVhazsKKwkJfQorCX0K KworCURCRygiRmlsdGVyIHN5cyB2aWV3IHNpemU6ICVkXG4iLCBpZ3RfZGV2cy52aWV3LT5sZW4p OworCisJcmV0dXJuIGlndF9kZXZzLnZpZXc7Cit9CisKKy8qIEZpbmQgZHJtIGRldmljZSB1c2lu ZyBkaXJlY3QgcGF0aCB0byAvZGV2L2RyaS8uCisgKiBJdCBleHRlbmRzIGZpbHRlcl9zeXMgdG8g YWxsb3cgdXNpbmcgZHJtOi9kZXYvZHJpL2NhcmRYIGFuZAorICogZHJtOi9kZXYvZHJpL3JlbmRl ckRYIGZpbHRlciBzeW50YXguCisgKi8KK3N0YXRpYyBHUHRyQXJyYXkgKmZpbHRlcl9kcm0oc3Ry dWN0IGZpbHRlcl9zcGVjICpmc3BlYywKKwkJCSAgICAgc3RydWN0IGZpbHRlcl9mdW5jICpmZnVu YykKK3sKKwkodm9pZCkgZmZ1bmM7CisKKwlEQkcoImZpbHRlciBkcm1cbiIpOworCWlmICghc3Ry bGVuKGZzcGVjLT5kYXRhKSkKKwkJcmV0dXJuIGlndF9kZXZzLnZpZXc7CisKKwlmb3IgKGludCBp ID0gMDsgaSA8IGlndF9kZXZzLmRldnMtPmxlbjsgaSsrKSB7CisJCXN0cnVjdCBpZ3RfZGV2aWNl ICpkZXYgPSBnX3B0cl9hcnJheV9pbmRleChpZ3RfZGV2cy5kZXZzLCBpKTsKKworCQlpZiAoIWlz X2RybV9zdWJzeXN0ZW0oZGV2KSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChzdHJlcXVhbChkZXYt PnN5c3BhdGgsIGZzcGVjLT5kYXRhKSB8fAorCQkJc3RyZXF1YWwoZGV2LT5kcm1fY2FyZCwgZnNw ZWMtPmRhdGEpIHx8CisJCQlzdHJlcXVhbChkZXYtPmRybV9yZW5kZXIsIGZzcGVjLT5kYXRhKSkg eworCQkJZ19wdHJfYXJyYXlfYWRkKGlndF9kZXZzLnZpZXcsIGRldik7CisJCQlicmVhazsKKwkJ fQorCX0KKworCURCRygiRmlsdGVyIGRybSB2aWV3IHNpemU6ICVkXG4iLCBpZ3RfZGV2cy52aWV3 LT5sZW4pOworCisJcmV0dXJuIGlndF9kZXZzLnZpZXc7Cit9CisKKy8qIEZpbmQgYXBwcm9wcmlh dGUgcGNpIGRldmljZSBtYXRjaGluZyB2ZW5kb3IvZGV2aWNlL2NhcmQgZmlsdGVyIGFyZ3VtZW50 cy4KKyAqLworc3RhdGljIEdQdHJBcnJheSAqZmlsdGVyX3BjaShzdHJ1Y3QgZmlsdGVyX3NwZWMg KmZzcGVjLAorCQkJICAgICBzdHJ1Y3QgZmlsdGVyX2Z1bmMgKmZmdW5jKQoreworCUdIYXNoVGFi bGUgKmh0OworCXN0cnVjdCBmaWx0ZXJfZGF0YSBmZGF0YTsKKwlpbnQgY2FyZCA9IC0xOworCSh2 b2lkKSBmZnVuYzsKKworCURCRygiZmlsdGVyIHBjaVxuIik7CisKKwlodCA9IHNwbGl0X2ZpbHRl cl9kYXRhKGZzcGVjLT5kYXRhKTsKKwlmZGF0YS52ZW5kb3IgPSBnX2hhc2hfdGFibGVfbG9va3Vw KGh0LCAidmVuZG9yIik7CisJZmRhdGEuZGV2aWNlID0gZ19oYXNoX3RhYmxlX2xvb2t1cChodCwg ImRldmljZSIpOworCWZkYXRhLmNhcmQgPSBnX2hhc2hfdGFibGVfbG9va3VwKGh0LCAiY2FyZCIp OworCisJaWYgKGZkYXRhLmNhcmQpIHsKKwkJc3NjYW5mKGZkYXRhLmNhcmQsICIlZCIsICZjYXJk KTsKKwkJaWYgKGNhcmQgPCAwKSB7CisJCQlnX2hhc2hfdGFibGVfZGVzdHJveShodCk7CisJCQly ZXR1cm4gaWd0X2RldnMudmlldzsKKwkJfQorCX0gZWxzZSB7CisJCWNhcmQgPSAwOworCX0KKwor CWZvciAoaW50IGkgPSAwOyBpIDwgaWd0X2RldnMuZGV2cy0+bGVuOyBpKyspIHsKKwkJc3RydWN0 IGlndF9kZXZpY2UgKmRldiA9IGdfcHRyX2FycmF5X2luZGV4KGlndF9kZXZzLmRldnMsIGkpOwor CisJCWlmICghaXNfcGNpX3N1YnN5c3RlbShkZXYpKQorCQkJY29udGludWU7CisKKwkJLyogU2tp cCBpZiAndmVuZG9yJyBkb2Vzbid0IG1hdGNoIChoZXggb3IgbmFtZSkgKi8KKwkJaWYgKGZkYXRh LnZlbmRvciAmJiAhaXNfdmVuZG9yX21hdGNoZWQoZGV2LCBmZGF0YS52ZW5kb3IpKQorCQkJY29u dGludWU7CisKKwkJLyogU2tpcCBpZiAnZGV2aWNlJyBkb2Vzbid0IG1hdGNoICovCisJCWlmIChm ZGF0YS5kZXZpY2UgJiYgc3RyY2FzZWNtcChmZGF0YS5kZXZpY2UsIGRldi0+ZGV2aWNlKSkKKwkJ CWNvbnRpbnVlOworCisJCS8qIFdlIGdldCBuLXRoIGNhcmQgKi8KKwkJaWYgKCFjYXJkKSB7CisJ CQlnX3B0cl9hcnJheV9hZGQoaWd0X2RldnMudmlldywgZGV2KTsKKwkJCWJyZWFrOworCQl9CisJ CWNhcmQtLTsKKwl9CisKKwlEQkcoIkZpbHRlciBwY2kgdmlldyBzaXplOiAlZFxuIiwgaWd0X2Rl dnMudmlldy0+bGVuKTsKKworCWdfaGFzaF90YWJsZV9kZXN0cm95KGh0KTsKKworCXJldHVybiBp Z3RfZGV2cy52aWV3OworfQorCisvKiBIZWxwZXIgZm9yIGZpbmRpbmcgZmlyc3QgZGV2aWNlIG1h dGNoaW5nIHByb3BlcnR5OnZhbHVlLgorICovCitzdGF0aWMgR1B0ckFycmF5ICpmaWx0ZXJfcHJv cGVydHkoc3RydWN0IGZpbHRlcl9zcGVjICpmc3BlYywKKwkJCQkgIHN0cnVjdCBmaWx0ZXJfZnVu YyAqZmZ1bmMpCit7CisJR0hhc2hUYWJsZSAqaHQ7CisJc3RydWN0IGZpbHRlcl9kYXRhIGZkYXRh OworCWludCBjYXJkID0gLTE7CisJY29uc3QgY2hhciAqcHJvcGVydHkgPSBmZnVuYy0+cHJvcGVy dHk7CisJY29uc3QgY2hhciAqdmFsdWUgPSBmZnVuYy0+dmFsdWU7CisKKwlpZiAoIXByb3BlcnR5 IHx8ICF2YWx1ZSkKKwkJcmV0dXJuIGlndF9kZXZzLnZpZXc7CisKKwlEQkcoImZpbHRlciBwcm9w ZXJ0eS92YWx1ZSBbJXMvJXNdXG4iLCBwcm9wZXJ0eSwgdmFsdWUpOworCisJaHQgPSBzcGxpdF9m aWx0ZXJfZGF0YShmc3BlYy0+ZGF0YSk7CisJZmRhdGEuY2FyZCA9IGdfaGFzaF90YWJsZV9sb29r dXAoaHQsICJjYXJkIik7CisKKwlpZiAoZmRhdGEuY2FyZCkgeworCQlzc2NhbmYoZmRhdGEuY2Fy ZCwgIiVkIiwgJmNhcmQpOworCQlpZiAoY2FyZCA8IDApIHsKKwkJCWdfaGFzaF90YWJsZV9kZXN0 cm95KGh0KTsKKwkJCXJldHVybiBpZ3RfZGV2cy52aWV3OworCQl9CisJfSBlbHNlIHsKKwkJY2Fy ZCA9IDA7CisJfQorCisJZm9yIChpbnQgaSA9IDA7IGkgPCBpZ3RfZGV2cy5kZXZzLT5sZW47IGkr KykgeworCQljb25zdCBjaGFyICpwcm9wX3ZhbHVlOworCQlzdHJ1Y3QgaWd0X2RldmljZSAqZGV2 ID0gZ19wdHJfYXJyYXlfaW5kZXgoaWd0X2RldnMuZGV2cywgaSk7CisKKwkJcHJvcF92YWx1ZSA9 IGdldF9wcm9wKGRldiwgcHJvcGVydHkpOworCQlpZiAocHJvcF92YWx1ZSAmJiAhc3RyY21wKHBy b3BfdmFsdWUsIHZhbHVlKSkgeworCQkJaWYgKCFjYXJkKSB7CisJCQkJZ19wdHJfYXJyYXlfYWRk KGlndF9kZXZzLnZpZXcsIGRldik7CisJCQkJYnJlYWs7CisJCQl9CisJCQljYXJkLS07CisJCX0K Kwl9CisKKwlEQkcoIkZpbHRlciB2aWV3IHNpemU6ICVkXG4iLCBpZ3RfZGV2cy52aWV3LT5sZW4p OworCisJZ19oYXNoX3RhYmxlX2Rlc3Ryb3koaHQpOworCisJcmV0dXJuIGlndF9kZXZzLnZpZXc7 Cit9CisKK3N0YXRpYyBHUHRyQXJyYXkgKmZpbHRlcl92Z2VtKHN0cnVjdCBmaWx0ZXJfc3BlYyAq ZnNwZWMsCisJCQkgICAgICBzdHJ1Y3QgZmlsdGVyX2Z1bmMgKmZmdW5jKQoreworCUdQdHJBcnJh eSAqdmlldyA9IGZpbHRlcl9wcm9wZXJ0eShmc3BlYywgZmZ1bmMpOworCisJaWYgKHZpZXcpIHsK KwkJc3RydWN0IGlndF9kZXZpY2UgKmRldiA9IGdfcHRyX2FycmF5X2luZGV4KHZpZXcsIDApOwor CisJCWRldi0+dnMgPSAmdl92Z2VtOworCX0KKwlyZXR1cm4gdmlldzsKK30KKworc3RhdGljIEdQ dHJBcnJheSAqZmlsdGVyX3ZrbXMoc3RydWN0IGZpbHRlcl9zcGVjICpmc3BlYywKKwkJCSAgICAg IHN0cnVjdCBmaWx0ZXJfZnVuYyAqZmZ1bmMpCit7CisJcmV0dXJuIGZpbHRlcl9wcm9wZXJ0eShm c3BlYywgZmZ1bmMpOworfQorCitzdGF0aWMgR1B0ckFycmF5ICpmaWx0ZXJfdmM0KHN0cnVjdCBm aWx0ZXJfc3BlYyAqZnNwZWMsCisJCQkgICAgIHN0cnVjdCBmaWx0ZXJfZnVuYyAqZmZ1bmMpCit7 CisJR1B0ckFycmF5ICp2aWV3ID0gZmlsdGVyX3Byb3BlcnR5KGZzcGVjLCBmZnVuYyk7CisKKwlp ZiAodmlldykgeworCQlzdHJ1Y3QgaWd0X2RldmljZSAqZGV2ID0gZ19wdHJfYXJyYXlfaW5kZXgo dmlldywgMCk7CisKKwkJZGV2LT52cyA9ICZ2X3ZjNDsKKwl9CisJcmV0dXJuIGZpbHRlcl9wcm9w ZXJ0eShmc3BlYywgZmZ1bmMpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbHRlcl9mdW5j IGZfZHJtID0geworCS5maWx0ZXJfZnVuY3Rpb24gPSBmaWx0ZXJfZHJtLAorCS5oZWxwID0gImRy bTovZGV2L2RyaS8qIHBhdGgiLAorCS5kZXRhaWwgPSAiZmluZCBkcm0gZGV2aWNlIGJ5IC9kZXYv ZHJpLyogbm9kZVxuIiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsdGVyX2Z1bmMgZl9w Y2kgPSB7CisJLmZpbHRlcl9mdW5jdGlvbiA9IGZpbHRlcl9wY2ksCisJLmhlbHAgPSAicGNpOlt2 ZW5kb3I9JTA0eC9uYW1lXVssZGV2aWNlPSUwNHhdWyxjYXJkPSVkXSIsCisJLmRldGFpbCA9ICJ2 ZW5kb3IgaXMgaGV4IG51bWJlciBvciB2ZW5kb3IgbmFtZVxuIiwKK307CisKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgZmlsdGVyX2Z1bmMgZl92Z2VtID0geworCS5maWx0ZXJfZnVuY3Rpb24gPSBmaWx0 ZXJfdmdlbSwKKwkuaGVscCA9ICJ2Z2VtOltjYXJkPSVkXSIsCisJLmRldGFpbCA9ICJjYXJkIGlz IG4tdGggdmdlbSBjYXJkIG51bWJlclxuIiwKKwkucHJvcGVydHkgPSAiTU9EQUxJQVMiLAorCS52 YWx1ZSA9ICJwbGF0Zm9ybTp2Z2VtIiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsdGVy X2Z1bmMgZl92a21zID0geworCS5maWx0ZXJfZnVuY3Rpb24gPSBmaWx0ZXJfdmttcywKKwkuaGVs cCA9ICJ2a21zOltjYXJkPSVkXSIsCisJLmRldGFpbCA9ICJjYXJkIGlzIG4tdGggdmttcyBjYXJk IG51bWJlclxuIiwKKwkucHJvcGVydHkgPSAiTU9EQUxJQVMiLAorCS52YWx1ZSA9ICJwbGF0Zm9y bTp2a21zIiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsdGVyX2Z1bmMgZl92YzQgPSB7 CisJLmZpbHRlcl9mdW5jdGlvbiA9IGZpbHRlcl92YzQsCisJLmhlbHAgPSAidmM0OltjYXJkPSVk XSIsCisJLmRldGFpbCA9ICJjYXJkIGlzIG4tdGggdmM0IGNhcmQgbnVtYmVyXG4iLAorCS5wcm9w ZXJ0eSA9ICJPRl9DT01QQVRJQkxFXzAiLAorCS52YWx1ZSA9ICJicmNtLGJjbTI4MzUtdmM0IiwK K307CisKK3N0YXRpYyBzdHJ1Y3QgbmFtZV92YWx1ZSBmaWx0ZXJfZGVmaW5pdGlvbl9saXN0W10g PSB7CisJeyAiZHJtIiwgICAgIChncG9pbnRlcikgJmZfZHJtIH0sCisJeyAicGNpIiwgICAgIChn cG9pbnRlcikgJmZfcGNpIH0sCisJeyAidmdlbSIsICAgIChncG9pbnRlcikgJmZfdmdlbSB9LAor CXsgInZrbXMiLCAgICAoZ3BvaW50ZXIpICZmX3ZrbXMgfSwKKwl7ICJ2YzQiLCAgICAgKGdwb2lu dGVyKSAmZl92YzQgfSwKKwl7IE5VTEwsIH0sCit9OworCisvKioKKyAqIEBpZ3RfZGV2aWNlX3By aW50X2ZpbHRlcl90eXBlcworICoKKyAqIFByaW50IGFsbCBmaWx0ZXJzIHN5bnRheCBmb3IgZGV2 aWNlIHNlbGVjdGlvbi4KKyAqLwordm9pZCBpZ3RfZGV2aWNlX3ByaW50X2ZpbHRlcl90eXBlcyh2 b2lkKQoreworCXN0cnVjdCBuYW1lX3ZhbHVlICpsaXN0ID0gJmZpbHRlcl9kZWZpbml0aW9uX2xp c3RbMF07CisKKwlwcmludGYoIkZpbHRlciB0eXBlczpcbi0tLVxuIik7CisJcHJpbnRmKCIlLTEy cyAgJXNcbi0tLVxuIiwgImZpbHRlciIsICJzeW50YXgiKTsKKworCXByaW50ZigiJS0xMnMgICVz XG4iLCAiIiwgImRpcmVjdCBzdWJzeXN0ZW06L3N5cy8uLi4gcGF0aCBzZWxlY3Rpb25cbiIpOwor CXByaW50ZigiJS0xMnMgICVzXG4iLCAiIiwKKwkgICAgICAgImV4OiBkcm06L3N5cy9kZXZpY2Vz L3BjaTAwMDA6MDAvMDAwMDowMDowMi4wL2RybS9jYXJkMCIpOworCXByaW50ZigiJS0xMnMgICVz XG4iLCAiIiwKKwkgICAgICAgIiAgICBwY2k6L3N5cy9kZXZpY2VzL3BjaTAwMDA6MDAvMDAwMDow MDowMi4wIik7CisJcHJpbnRmKCIlLTEycyAgJXNcbiIsICIiLAorCSAgICAgICAiICAgIHBsYXRm b3JtOi9zeXMvZGV2aWNlcy9wbGF0Zm9ybS92Z2VtXG4iKTsKKworCXdoaWxlIChsaXN0LT5uYW1l KSB7CisJCXN0cnVjdCBmaWx0ZXJfZnVuYyAqdiA9IChzdHJ1Y3QgZmlsdGVyX2Z1bmMgKikgbGlz dC0+dmFsdWU7CisKKwkJcHJpbnRmKCIlLTEycyAgJXNcbiIsIGxpc3QtPm5hbWUsIHYtPmhlbHAp OworCQlwcmludGYoIiUtMTJzICAlc1xuIiwgIiIsIHYtPmRldGFpbCk7CisJCWxpc3QrKzsKKwl9 Cit9CisKK3N0YXRpYyBHUHRyQXJyYXkgKmRldmljZV9maWx0ZXJzID0gTlVMTDsKKworI2RlZmlu ZSBERVZJQ0VfRklMVEVSX0NIRUNLX0FMTE9DKCkgXAorCWRvIHsgXAorCQlpZiAoIWRldmljZV9m aWx0ZXJzKSBcCisJCQlkZXZpY2VfZmlsdGVycyA9IGdfcHRyX2FycmF5X25ld19mdWxsKDIsIGZy ZWUpOyBcCisJCWlndF9hc3NlcnQoZGV2aWNlX2ZpbHRlcnMpOyBcCisJfSB3aGlsZSAoMCkKKwor LyoqCisgKiBpZ3RfZGV2aWNlX2ZpbHRlcl9jb3VudAorICoKKyAqIFJldHVybnMgbnVtYmVyIG9m IGZpbHRlcnMgY29sbGVjdGVkIGluIHRoZSBmaWx0ZXIgYXJyYXkuCisgKi8KK2ludCBpZ3RfZGV2 aWNlX2ZpbHRlcl9jb3VudCh2b2lkKQoreworCURFVklDRV9GSUxURVJfQ0hFQ0tfQUxMT0MoKTsK KworCXJldHVybiBkZXZpY2VfZmlsdGVycy0+bGVuOworfQorCisvKiBDaGVjayBkb2VzIGZpbHRl ciBpcyB2YWxpZC4gSXQgY2hlY2tzOgorICogMS4gL3N5cy8uLi4gcGF0aCBmaXJzdAorICogMi4g ZmlsdGVyIG5hbWUgZnJvbSBmaWx0ZXIgZGVmaW5pdGlvbgorICovCitzdGF0aWMgYm9vbCBpc19m aWx0ZXJfdmFsaWQoY29uc3QgY2hhciAqZmlsdGVyKQoreworCXN0cnVjdCBmaWx0ZXJfc3BlYyBm c3BlYzsKKwlzdHJ1Y3QgZmlsdGVyX2Z1bmMgKmZmdW5jOworCWludCByZXQ7CisKKwlwb3B1bGF0 ZV9ncHVfZGF0YSgpOworCisJcmV0ID0gZ2V0X2ZpbHRlcl9zcGVjKGZpbHRlciwgJmZzcGVjKTsK KwlpZiAoIXJldCkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogQ2hlY2sgaWYgL3N5cyBwYXRoIGlz IHZhbGlkICovCisJaWYgKCFzdHJuY21wKGZzcGVjLmRhdGEsICIvc3lzIiwgNCkpIHsKKwkJc3Ry dWN0IHN0YXQgc3Q7CisJCWlmIChzdGF0KGZzcGVjLmRhdGEsICZzdCkpIHsKKwkJCWlndF93YXJu KCJpc19maWx0ZXJfdmFsaWQ6IHN5c3BhdGggWyVzXSwgZXJyOiAlc1xuIiwKKwkJCQkgZnNwZWMu ZGF0YSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfSBlbHNlIHsKKwkJ CXJldHVybiB0cnVlOworCQl9CisJfQorCisJZmZ1bmMgPSBnX2hhc2hfdGFibGVfbG9va3VwKGZp bHRlcl9kZWZpbml0aW9uX2h0LCBmc3BlYy5uYW1lKTsKKwlpZiAoIWZmdW5jKSB7CisJCWlndF93 YXJuKCJObyBmaWx0ZXIgd2l0aCBuYW1lIFslc11cbiIsIGZzcGVjLm5hbWUpOworCQlyZXR1cm4g ZmFsc2U7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKKy8qKgorICogaWd0X2RldmljZV9maWx0 ZXJfYWRkCisgKiBAZmlsdGVyOiBmaWx0ZXIgdG8gYmUgc3RvcmVkIGluIGZpbHRlciBhcnJheQor ICoKKyAqIEZ1bmN0aW9uIGFsbG93cyBwYXNzaW5nIHNpbmdsZSBvciBtb3JlIGZpbHRlcnMgd2l0 aGluIG9uZSBzdHJpbmcuIFRoaXMgaXMKKyAqIGZvciBDSSB3aGVuIGl0IGNhbiBleHRyYWN0IGZp bHRlciBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlIChhbmQgaXQgbXVzdAorICogYmUgc2luZ2xl IHN0cmluZykuIFNvIGlmIEBmaWx0ZXIgY29udGFpbnMgc2VtaWNvbG9uICc7JyBpdCB0cmVhdHMK KyAqIGVhY2ggcGFydCBhcyBzZXBhcmF0ZSBmaWx0ZXIgYW5kIGFkZHMgdG8gdGhlIGZpbHRlciBh cnJheS4KKyAqCisgKiBSZXR1cm5zIG51bWJlciBvZiBmaWx0ZXJzIGFkZGVkIHRvIGZpbHRlciBh cnJheS4gQ2FuIGJlIGdyZWF0ZXIgdGhhbgorICogMSBpZiBAZmlsdGVyIGNvbnRhaW5zIG1vcmUg dGhhbiBvbmUgZmlsdGVyIHNlcGFyYXRlZCBieSBzZW1pY29sb24uCisgKi8KK2ludCBpZ3RfZGV2 aWNlX2ZpbHRlcl9hZGQoY29uc3QgY2hhciAqZmlsdGVyKQoreworCWdjaGFyICoqc3RydiwgKipz OworCWludCBjID0gMDsKKworCURFVklDRV9GSUxURVJfQ0hFQ0tfQUxMT0MoKTsKKwlwb3B1bGF0 ZV9ncHVfZGF0YSgpOworCisJc3RydiA9IGdfc3Ryc3BsaXQoZmlsdGVyLCAiOyIsIC0xKTsKKwor CXMgPSBzdHJ2OworCXdoaWxlICgqcykgeworCQlib29sIGlzX3ZhbGlkID0gaXNfZmlsdGVyX3Zh bGlkKCpzKTsKKwkJaWd0X3dhcm5fb24oIWlzX3ZhbGlkKTsKKwkJaWYgKGlzX3ZhbGlkKQorCQkJ Z19wdHJfYXJyYXlfYWRkKGRldmljZV9maWx0ZXJzLCBzdHJkdXAoKnMpKTsKKwkJcysrOworCX0K KwlnX3N0cmZyZWV2KHN0cnYpOworCisJcmV0dXJuIGM7Cit9CisKKy8qKgorICogaWd0X2Rldmlj ZV9maWx0ZXJfZnJlZV9hbGwKKyAqCisgKiBGcmVlIGFsbCBmaWx0ZXJzIHdpdGhpbiBhcnJheS4K KyAqLwordm9pZCBpZ3RfZGV2aWNlX2ZpbHRlcl9mcmVlX2FsbCh2b2lkKQoreworCWlmICghZGV2 aWNlX2ZpbHRlcnMpCisJCXJldHVybjsKKworCWdfcHRyX2FycmF5X3NldF9mcmVlX2Z1bmMoZGV2 aWNlX2ZpbHRlcnMsIGZyZWUpOworCWdfcHRyX2FycmF5X3VucmVmKGRldmljZV9maWx0ZXJzKTsK KwlkZXZpY2VfZmlsdGVycyA9IE5VTEw7Cit9CisKKy8qKgorICogaWd0X2RldmljZV9maWx0ZXJf Z2V0CisgKiBAbnVtOiBOdW1iZXIgb2YgZmlsdGVyIGZyb20gZmlsdGVyIGFycmF5CisgKgorICog UmV0dXJucyBmaWx0ZXIgc3RyaW5nIG9yIE5VTEwgaWYgQG51bSBpcyBvdXQgb2YgcmFuZ2Ugb2Yg ZmlsdGVyIGFycmF5LgorICovCitjb25zdCBjaGFyICppZ3RfZGV2aWNlX2ZpbHRlcl9nZXQoaW50 IG51bSkKK3sKKwlERVZJQ0VfRklMVEVSX0NIRUNLX0FMTE9DKCk7CisKKwlpZiAobnVtIDwgMCB8 fCBudW0gPj0gZGV2aWNlX2ZpbHRlcnMtPmxlbikKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4g Z19wdHJfYXJyYXlfaW5kZXgoZGV2aWNlX2ZpbHRlcnMsIG51bSk7Cit9CisKK3N0YXRpYyBib29s IGlndF9kZXZpY2VfZmlsdGVyX2FwcGx5KGNvbnN0IGNoYXIgKmZpbHRlcikKK3sKKwlzdHJ1Y3Qg ZmlsdGVyX3NwZWMgZnNwZWM7CisJYm9vbCByZXQ7CisKKwlpZiAoIWZpbHRlcikKKwkJcmV0dXJu IGZhbHNlOworCisJcmV0ID0gZ2V0X2ZpbHRlcl9zcGVjKGZpbHRlciwgJmZzcGVjKTsKKwlpZiAo IXJldCkgeworCQlpZ3Rfd2FybigiQ2FuJ3Qgc3BsaXQgZmlsdGVyIFslc11cbiIsIGZpbHRlcik7 CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKiBDbGVhbiB2aWV3ICovCisJZ19wdHJfYXJyYXlf cmVtb3ZlX3JhbmdlKGlndF9kZXZzLnZpZXcsIDAsIGlndF9kZXZzLnZpZXctPmxlbik7CisKKwkv KiBJZiBmc3BlYy5kYXRhIGNvbnRhaW5zICIvc3lzIiB1c2UgZGlyZWN0IHBhdGggaW5zdGVhZAor CSAqIGNvbnRleHR1YWwgZmlsdGVyLgorCSAqLworCWlmICghc3RybmNtcChmc3BlYy5kYXRhLCAi L3N5cyIsIDQpKQorCQlmaWx0ZXJfc3lzKCZmc3BlYywgTlVMTCk7CisJZWxzZSB7CisJCXN0cnVj dCBmaWx0ZXJfZnVuYyAqZmZ1bmM7CisKKwkJZmZ1bmMgPSBnX2hhc2hfdGFibGVfbG9va3VwKGZp bHRlcl9kZWZpbml0aW9uX2h0LCBmc3BlYy5uYW1lKTsKKwkJaWYgKCFmZnVuYykgeworCQkJaWd0 X3dhcm4oIk5vIGZpbHRlciB3aXRoIG5hbWUgWyVzXVxuIiwgZnNwZWMubmFtZSk7CisJCQlyZXR1 cm4gZmFsc2U7CisJCX0KKwkJZmZ1bmMtPmZpbHRlcl9mdW5jdGlvbigmZnNwZWMsIGZmdW5jKTsK Kwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworI2RlZmluZSBzYWZlX3N0cm5jcHkoZHN0LCBzcmMs IHNpemUpIGRvIHsgXAorCWlmICgoZHN0KSAmJiAoc3JjKSkgXAorCQlzdHJuY3B5KChkc3QpLCAo c3JjKSwgKHNpemUpKTsgXAorCX0gd2hpbGUgKDApCisKKy8qKgorICogaWd0X2RldmljZV9jYXJk X21hdGNoCisgKiBAZmlsdGVyOiBmaWx0ZXIgc3RyaW5nCisgKiBAY2FyZDogcG9pbnRlciB0byBp Z3RfZGV2aWNlX2NhcmQgc3RydWN0CisgKgorICogRnVuY3Rpb24gYXBwbGllcyBmaWx0ZXIgdG8g bWF0Y2ggZGV2aWNlIGZyb20gZGV2aWNlIGFycmF5LgorICoKKyAqIFJldHVybnM6CisgKiBmYWxz ZSAtIG5vIGNhcmQgcG9pbnRlciB3YXMgcGFzc2VkIG9yIGNhcmQgd2Fzbid0IG1hdGNoZWQsCisg KiB0cnVlIC0gY2FyZCBtYXRjaGVkIGFuZCByZXR1cm5lZC4KKyAqLworYm9vbCBpZ3RfZGV2aWNl X2NhcmRfbWF0Y2goY29uc3QgY2hhciAqZmlsdGVyLCBzdHJ1Y3QgaWd0X2RldmljZV9jYXJkICpj YXJkKQoreworCXN0cnVjdCBpZ3RfZGV2aWNlICpkZXYgPSBOVUxMOworCisJaWYgKCFjYXJkKQor CQlyZXR1cm4gZmFsc2U7CisJbWVtc2V0KGNhcmQsIDAsIHNpemVvZigqY2FyZCkpOworCisJaWd0 X2RldmljZXNfc2NhbihmYWxzZSk7CisKKwlpZiAoaWd0X2RldmljZV9maWx0ZXJfYXBwbHkoZmls dGVyKSA9PSBmYWxzZSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKCFpZ3RfZGV2cy52aWV3LT5s ZW4pCisJCXJldHVybiBmYWxzZTsKKworCS8qIFdlIHRha2UgZmlyc3Qgb25lIGlmIG1vcmUgdGhh biBvbmUgY2FyZCBtYXRjaGVzIGZpbHRlciAqLworCWRldiA9IGdfcHRyX2FycmF5X2luZGV4KGln dF9kZXZzLnZpZXcsIDApOworCWNhcmQtPmNoaXBzZXQgPSBEUklWRVJfQU5ZOworCWlmIChkZXYt PnZzKQorCQljYXJkLT5jaGlwc2V0ID0gZGV2LT52cy0+Y2hpcHNldDsKKworCXNhZmVfc3RybmNw eShjYXJkLT5zdWJzeXN0ZW0sIGRldi0+c3Vic3lzdGVtLCBOQU1FX01BWCk7CisJc2FmZV9zdHJu Y3B5KGNhcmQtPmNhcmQsIGRldi0+ZHJtX2NhcmQsIE5BTUVfTUFYKTsKKwlzYWZlX3N0cm5jcHko Y2FyZC0+cmVuZGVyLCBkZXYtPmRybV9yZW5kZXIsIE5BTUVfTUFYKTsKKworCXJldHVybiB0cnVl OworfQpkaWZmIC0tZ2l0IGEvbGliL2lndF9kZXZpY2Vfc2Nhbi5oIGIvbGliL2lndF9kZXZpY2Vf c2Nhbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi5jNjhkMjNmMAotLS0g L2Rldi9udWxsCisrKyBiL2xpYi9pZ3RfZGV2aWNlX3NjYW4uaApAQCAtMCwwICsxLDc0IEBACisv KgorICogQ29weXJpZ2h0IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNz aW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRh aW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50 YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJl IHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRo ZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRl LCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5k IHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQg dG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRo ZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNs dWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNv cGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAq IFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFO WSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVE IFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFM TAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkg Q0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJ T04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQg T0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVS IERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICovCisKKyNpZm5kZWYgX19JR1Rf REVWSUNFX1NDQU5fSF9fCisjZGVmaW5lIF9fSUdUX0RFVklDRV9TQ0FOX0hfXworCisjaW5jbHVk ZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8aWd0Lmg+CisKK2VudW0gaWd0X2RldmljZXNfcHJpbnRf dHlwZSB7CisJSUdUX1BSSU5UX1NJTVBMRSwKKwlJR1RfUFJJTlRfREVUQUlMLAorfTsKKworc3Ry dWN0IGlndF9kZXZpY2VfY2FyZCB7CisJaW50IGNoaXBzZXQ7CisJY2hhciBzdWJzeXN0ZW1bTkFN RV9NQVhdOworCWNoYXIgY2FyZFtOQU1FX01BWF07CisJY2hhciByZW5kZXJbTkFNRV9NQVhdOwor fTsKKworLyogU2NhbiB1ZGV2IHN1YnN5c3RlbXMuIERvIGl0IG9uY2UgdW5sZXNzIGZvcmNlIGlz IHRydWUsIHdoYXQgcmVzY2FucworICogZGV2aWNlcyBhZ2Fpbi4KKyAqLwordm9pZCBpZ3RfZGV2 aWNlc19zY2FuKGJvb2wgZm9yY2UpOworCit2b2lkIGlndF9kZXZpY2VzX3ByaW50KGVudW0gaWd0 X2RldmljZXNfcHJpbnRfdHlwZSBwcmludHR5cGUpOwordm9pZCBpZ3RfZGV2aWNlc19wcmludF92 ZW5kb3JzKHZvaWQpOwordm9pZCBpZ3RfZGV2aWNlX3ByaW50X2ZpbHRlcl90eXBlcyh2b2lkKTsK KworLyoKKyAqIEhhbmRsZSBkZXZpY2UgZmlsdGVyIGNvbGxlY3Rpb24gYXJyYXkuCisgKiBJR1Qg Y2FuIHN0b3JlL3JldHJpZXZlIGZpbHRlcnMgcGFzc2VkIGJ5IHVzZXIgdXNpbmcgJy0tZGV2aWNl JyBhcmdzLgorICovCisKKy8qIFJldHVybiBudW1iZXIgb2YgZmlsdGVycyBjb2xsZWN0ZWQuICov CitpbnQgaWd0X2RldmljZV9maWx0ZXJfY291bnQodm9pZCk7CisKKy8qIEFkZCBmaWx0ZXIocykg dG8gdGhlIGFycmF5LiBSZXR1cm5zIG51bWJlciBvZiBmaWx0ZXJzIGFkZGVkICg+MSBpZgorICog dXNlciBwYXNzZXMgbW9yZSB0aGFuIG9uZSBmaWx0ZXIgc2VwYXJhdGVkIGJ5ICc7JykKKyAqLwor aW50IGlndF9kZXZpY2VfZmlsdGVyX2FkZChjb25zdCBjaGFyICpmaWx0ZXIpOworCisvKiBGcmVl IGFsbCBmaWx0ZXJzLiAqLwordm9pZCBpZ3RfZGV2aWNlX2ZpbHRlcl9mcmVlX2FsbCh2b2lkKTsK KworLyogR2V0IG4tdGggZmlsdGVyIHN0b3JlZCBpbiB0aGUgYXJyYXkgb3IgTlVMTCAqLworY29u c3QgY2hhciAqaWd0X2RldmljZV9maWx0ZXJfZ2V0KGludCBudW0pOworCisvKiBVc2UgZmlsdGVy IHRvIG1hdGNoIHRoZSBkZXZpY2UgYW5kIGZpbGwgY2FyZCBzdHJ1Y3R1cmUgKi8KK2Jvb2wgaWd0 X2RldmljZV9jYXJkX21hdGNoKGNvbnN0IGNoYXIgKmZpbHRlciwgc3RydWN0IGlndF9kZXZpY2Vf Y2FyZCAqY2FyZCk7CisKKyNlbmRpZiAvKiBfX0lHVF9ERVZJQ0VfU0NBTl9IX18gKi8KZGlmZiAt LWdpdCBhL2xpYi9tZXNvbi5idWlsZCBiL2xpYi9tZXNvbi5idWlsZAppbmRleCAyMjFhZTI4Yy4u NzM5NWQzODggMTAwNjQ0Ci0tLSBhL2xpYi9tZXNvbi5idWlsZAorKysgYi9saWIvbWVzb24uYnVp bGQKQEAgLTEwLDYgKzEwLDcgQEAgbGliX3NvdXJjZXMgPSBbCiAJJ2lndF9jb2xvcl9lbmNvZGlu Zy5jJywKIAknaWd0X2RlYnVnZnMuYycsCiAJJ2lndF9kZXZpY2UuYycsCisJJ2lndF9kZXZpY2Vf c2Nhbi5jJywKIAknaWd0X2F1eC5jJywKIAknaWd0X2dwdV9wb3dlci5jJywKIAknaWd0X2d0LmMn LAotLSAKMi4yMy4wCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpo dHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXY=