From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: usb: core: add option of only authorizing internal devices From: Dmitry Torokhov Message-Id: <20190217072151.GA244815@dtor-ws> Date: Sat, 16 Feb 2019 23:21:51 -0800 To: Greg Kroah-Hartman , Alan Stern Cc: linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org List-ID: T24gQ2hyb21lIE9TIHdlIHdhbnQgdG8gdXNlIFVTQmd1YXJkIHRvIHBvdGVudGlhbGx5IGxpbWl0 IGFjY2VzcyB0byBVU0IKZGV2aWNlcyBiYXNlZCBvbiBwb2xpY3kuIFdlIGhvd2V2ZXIgdG8gZG8g bm90IHdhbnQgdG8gd2FpdCBmb3IgdXNlcnNwYWNlIHRvCmNvbWUgdXAgYmVmb3JlIGluaXRpYWxp emluZyBmaXhlZCBVU0IgZGV2aWNlcyB0byBub3QgcmVncmVzcyBvdXIgYm9vdAp0aW1lcy4KClRo aXMgcGF0Y2ggYWRkcyBvcHRpb24gdG8gaW5zdHJ1Y3QgdGhlIGtlcm5lbCB0byBvbmx5IGF1dGhv cml6ZSBkZXZpY2VzCmNvbm5lY3RlZCB0byB0aGUgaW50ZXJuYWwgcG9ydHMuIFByZXZpb3VzbHkg d2UgY291bGQgZWl0aGVyIGF1dGhvcml6ZQphbGwgb3Igbm9uZSAob3IsIGJ5IGRlZmF1bHQsIHdl J2Qgb25seSBhdXRob3JpemUgd2lyZWQgZGV2aWNlcykuCgpUaGUgYmVoYXZpb3IgaXMgY29udHJv bGxlZCB2aWEgdXNiY29yZS5hdXRob3JpemVkX2RlZmF1bHQgY29tbWFuZCBsaW5lCm9wdGlvbi4K ClNpZ25lZC1vZmYtYnk6IERtaXRyeSBUb3Jva2hvdiA8ZHRvckBjaHJvbWl1bS5vcmc+Ci0tLQog Li4uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCAgICAgICAgIHwgIDMgKy0KIERv Y3VtZW50YXRpb24vdXNiL2F1dGhvcml6YXRpb24udHh0ICAgICAgICAgICB8ICA0ICstCiBkcml2 ZXJzL3VzYi9jb3JlL2hjZC5jICAgICAgICAgICAgICAgICAgICAgICAgfCA1MSArKysrKysrKysr Ky0tLS0tLS0tCiBkcml2ZXJzL3VzYi9jb3JlL3VzYi5jICAgICAgICAgICAgICAgICAgICAgICAg fCAzMyArKysrKysrKystLS0KIGluY2x1ZGUvbGludXgvdXNiL2hjZC5oICAgICAgICAgICAgICAg ICAgICAgICB8IDEwICsrLS0KIDUgZmlsZXMgY2hhbmdlZCwgNjkgaW5zZXJ0aW9ucygrKSwgMzIg ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJu ZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJh bWV0ZXJzLnR4dAppbmRleCBhZWZkMzU4YTVjYTMuLjQ0NDY5MTkwODliOSAxMDA2NDQKLS0tIGEv RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQKKysrIGIvRG9j dW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQKQEAgLTQ2NzUsNyAr NDY3NSw4IEBACiAJdXNiY29yZS5hdXRob3JpemVkX2RlZmF1bHQ9CiAJCQlbVVNCXSBEZWZhdWx0 IFVTQiBkZXZpY2UgYXV0aG9yaXphdGlvbjoKIAkJCShkZWZhdWx0IC0xID0gYXV0aG9yaXplZCBl eGNlcHQgZm9yIHdpcmVsZXNzIFVTQiwKLQkJCTAgPSBub3QgYXV0aG9yaXplZCwgMSA9IGF1dGhv cml6ZWQpCisJCQkwID0gbm90IGF1dGhvcml6ZWQsIDEgPSBhdXRob3JpemVkLCAyID0gYXV0aG9y aXplZAorCQkJaWYgZGV2aWNlIGNvbm5lY3RlZCB0byBpbnRlcm5hbCBwb3J0KQogCiAJdXNiY29y ZS5hdXRvc3VzcGVuZD0KIAkJCVtVU0JdIFRoZSBhdXRvc3VzcGVuZCB0aW1lIGRlbGF5IChpbiBz ZWNvbmRzKSB1c2VkCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi9hdXRob3JpemF0aW9u LnR4dCBiL0RvY3VtZW50YXRpb24vdXNiL2F1dGhvcml6YXRpb24udHh0CmluZGV4IGM3ZTk4NWYw NWQ4Zi4uNjhjMDAxYWNhNzhjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3VzYi9hdXRob3Jp emF0aW9uLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3VzYi9hdXRob3JpemF0aW9uLnR4dApAQCAt MzQsNyArMzQsOSBAQCAkIGVjaG8gMSA+IC9zeXMvYnVzL3VzYi9kZXZpY2VzL3VzYlgvYXV0aG9y aXplZF9kZWZhdWx0CiBCeSBkZWZhdWx0LCBXaXJlZCBVU0IgZGV2aWNlcyBhcmUgYXV0aG9yaXpl ZCBieSBkZWZhdWx0IHRvCiBjb25uZWN0LiBXaXJlbGVzcyBVU0IgaG9zdHMgZGVhdXRob3JpemUg YnkgZGVmYXVsdCBhbGwgbmV3IGNvbm5lY3RlZAogZGV2aWNlcyAodGhpcyBpcyBzbyBiZWNhdXNl IHdlIG5lZWQgdG8gZG8gYW4gYXV0aGVudGljYXRpb24gcGhhc2UKLWJlZm9yZSBhdXRob3Jpemlu ZykuCitiZWZvcmUgYXV0aG9yaXppbmcpLiBXcml0aW5nICIyIiB0byB0aGUgYXV0aG9yaXplZF9k ZWZhdWx0IGF0dHJpYnV0ZQorY2F1c2VzIGtlcm5lbCB0byBvbmx5IGF1dGhvcml6ZSBieSBkZWZh dWx0IGRldmljZXMgY29ubmVjdGVkIHRvIGludGVybmFsCitVU0IgcG9ydHMuCiAKIAogRXhhbXBs ZSBzeXN0ZW0gbG9ja2Rvd24gKGxhbWUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2hj ZC5jIGIvZHJpdmVycy91c2IvY29yZS9oY2QuYwppbmRleCA0ODcwMjVkMzFkNDQuLjRhNzhiZjE5 MWQ3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9oY2QuYworKysgYi9kcml2ZXJzL3Vz Yi9jb3JlL2hjZC5jCkBAIC0zNzMsMTMgKzM3MywxOSBAQCBzdGF0aWMgY29uc3QgdTggc3Nfcmhf Y29uZmlnX2Rlc2NyaXB0b3JbXSA9IHsKICAqIC0xIGlzIGF1dGhvcml6ZWQgZm9yIGFsbCBkZXZp Y2VzIGV4Y2VwdCB3aXJlbGVzcyAob2xkIGJlaGF2aW91cikKICAqIDAgaXMgdW5hdXRob3JpemVk IGZvciBhbGwgZGV2aWNlcwogICogMSBpcyBhdXRob3JpemVkIGZvciBhbGwgZGV2aWNlcworICog MiBpcyBhdXRob3JpemVkIGZvciBpbnRlcm5hbCBkZXZpY2VzCiAgKi8KLXN0YXRpYyBpbnQgYXV0 aG9yaXplZF9kZWZhdWx0ID0gLTE7CisjZGVmaW5lIFVTQl9BVVRIT1JJWkVfV0lSRUQJLTEKKyNk ZWZpbmUgVVNCX0FVVEhPUklaRV9OT05FCTAKKyNkZWZpbmUgVVNCX0FVVEhPUklaRV9BTEwJMQor I2RlZmluZSBVU0JfQVVUSE9SSVpFX0lOVEVSTkFMCTIKKworc3RhdGljIGludCBhdXRob3JpemVk X2RlZmF1bHQgPSBVU0JfQVVUSE9SSVpFX1dJUkVEOwogbW9kdWxlX3BhcmFtKGF1dGhvcml6ZWRf ZGVmYXVsdCwgaW50LCBTX0lSVUdPfFNfSVdVU1IpOwogTU9EVUxFX1BBUk1fREVTQyhhdXRob3Jp emVkX2RlZmF1bHQsCiAJCSJEZWZhdWx0IFVTQiBkZXZpY2UgYXV0aG9yaXphdGlvbjogMCBpcyBu b3QgYXV0aG9yaXplZCwgMSBpcyAiCi0JCSJhdXRob3JpemVkLCAtMSBpcyBhdXRob3JpemVkIGV4 Y2VwdCBmb3Igd2lyZWxlc3MgVVNCIChkZWZhdWx0LCAiCi0JCSJvbGQgYmVoYXZpb3VyIik7CisJ CSJhdXRob3JpemVkLCAyIGlzIGF1dGhvcml6ZWQgZm9yIGludGVybmFsIGRldmljZXMsIC0xIGlz ICIKKwkJImF1dGhvcml6ZWQgZXhjZXB0IGZvciB3aXJlbGVzcyBVU0IgKGRlZmF1bHQsIG9sZCBi ZWhhdmlvdXIiKTsKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qKgpAQCAtODg0LDcgKzg5MCw3 IEBAIHN0YXRpYyBzc2l6ZV90IGF1dGhvcml6ZWRfZGVmYXVsdF9zaG93KHN0cnVjdCBkZXZpY2Ug KmRldiwKIAlzdHJ1Y3QgdXNiX2hjZCAqaGNkOwogCiAJaGNkID0gYnVzX3RvX2hjZCh1c2JfYnVz KTsKLQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIldVxuIiwgISFIQ0RfREVWX0FV VEhPUklaRUQoaGNkKSk7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXVcbiIs IGhjZC0+ZGV2X3BvbGljeSk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGF1dGhvcml6ZWRfZGVmYXVs dF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCkBAIC05MDAsMTEgKzkwNiw4IEBAIHN0YXRpYyBz c2l6ZV90IGF1dGhvcml6ZWRfZGVmYXVsdF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJaGNk ID0gYnVzX3RvX2hjZCh1c2JfYnVzKTsKIAlyZXN1bHQgPSBzc2NhbmYoYnVmLCAiJXVcbiIsICZ2 YWwpOwogCWlmIChyZXN1bHQgPT0gMSkgewotCQlpZiAodmFsKQotCQkJc2V0X2JpdChIQ0RfRkxB R19ERVZfQVVUSE9SSVpFRCwgJmhjZC0+ZmxhZ3MpOwotCQllbHNlCi0JCQljbGVhcl9iaXQoSENE X0ZMQUdfREVWX0FVVEhPUklaRUQsICZoY2QtPmZsYWdzKTsKLQorCQloY2QtPmRldl9wb2xpY3kg PSB2YWwgPD0gVVNCX0RFVklDRV9BVVRIT1JJWkVfSU5URVJOQUwgPworCQkJdmFsIDogVVNCX0RF VklDRV9BVVRIT1JJWkVfQUxMOwogCQlyZXN1bHQgPSBzaXplOwogCX0gZWxzZSB7CiAJCXJlc3Vs dCA9IC1FSU5WQUw7CkBAIC0yNzQ1LDE4ICsyNzQ4LDI2IEBAIGludCB1c2JfYWRkX2hjZChzdHJ1 Y3QgdXNiX2hjZCAqaGNkLAogCiAJZGV2X2luZm8oaGNkLT5zZWxmLmNvbnRyb2xsZXIsICIlc1xu IiwgaGNkLT5wcm9kdWN0X2Rlc2MpOwogCi0JLyogS2VlcCBvbGQgYmVoYXZpb3VyIGlmIGF1dGhv cml6ZWRfZGVmYXVsdCBpcyBub3QgaW4gWzAsIDFdLiAqLwotCWlmIChhdXRob3JpemVkX2RlZmF1 bHQgPCAwIHx8IGF1dGhvcml6ZWRfZGVmYXVsdCA+IDEpIHsKLQkJaWYgKGhjZC0+d2lyZWxlc3Mp Ci0JCQljbGVhcl9iaXQoSENEX0ZMQUdfREVWX0FVVEhPUklaRUQsICZoY2QtPmZsYWdzKTsKLQkJ ZWxzZQotCQkJc2V0X2JpdChIQ0RfRkxBR19ERVZfQVVUSE9SSVpFRCwgJmhjZC0+ZmxhZ3MpOwot CX0gZWxzZSB7Ci0JCWlmIChhdXRob3JpemVkX2RlZmF1bHQpCi0JCQlzZXRfYml0KEhDRF9GTEFH X0RFVl9BVVRIT1JJWkVELCAmaGNkLT5mbGFncyk7Ci0JCWVsc2UKLQkJCWNsZWFyX2JpdChIQ0Rf RkxBR19ERVZfQVVUSE9SSVpFRCwgJmhjZC0+ZmxhZ3MpOworCXN3aXRjaCAoYXV0aG9yaXplZF9k ZWZhdWx0KSB7CisJY2FzZSBVU0JfQVVUSE9SSVpFX05PTkU6CisJCWhjZC0+ZGV2X3BvbGljeSA9 IFVTQl9ERVZJQ0VfQVVUSE9SSVpFX05PTkU7CisJCWJyZWFrOworCisJY2FzZSBVU0JfQVVUSE9S SVpFX0FMTDoKKwkJaGNkLT5kZXZfcG9saWN5ID0gVVNCX0RFVklDRV9BVVRIT1JJWkVfQUxMOwor CQlicmVhazsKKworCWNhc2UgVVNCX0FVVEhPUklaRV9JTlRFUk5BTDoKKwkJaGNkLT5kZXZfcG9s aWN5ID0gVVNCX0RFVklDRV9BVVRIT1JJWkVfSU5URVJOQUw7CisJCWJyZWFrOworCisJY2FzZSBV U0JfQVVUSE9SSVpFX1dJUkVEOgorCWRlZmF1bHQ6CisJCWhjZC0+ZGV2X3BvbGljeSA9IGhjZC0+ d2lyZWxlc3MgPworCQkJVVNCX0RFVklDRV9BVVRIT1JJWkVfTk9ORSA6IFVTQl9ERVZJQ0VfQVVU SE9SSVpFX0FMTDsKKwkJYnJlYWs7CiAJfQorCiAJc2V0X2JpdChIQ0RfRkxBR19IV19BQ0NFU1NJ QkxFLCAmaGNkLT5mbGFncyk7CiAKIAkvKiBwZXIgZGVmYXVsdCBhbGwgaW50ZXJmYWNlcyBhcmUg YXV0aG9yaXplZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS91c2IuYyBiL2RyaXZl cnMvdXNiL2NvcmUvdXNiLmMKaW5kZXggNGViZmJkNzM3OTA1Li45YjU4NTJlMzEzZjUgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS91c2Iu YwpAQCAtNDYsOCArNDYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGlu dXgvZG1hLW1hcHBpbmcuaD4KIAotI2luY2x1ZGUgInVzYi5oIgotCisjaW5jbHVkZSAiaHViLmgi CiAKIGNvbnN0IGNoYXIgKnVzYmNvcmVfbmFtZSA9ICJ1c2Jjb3JlIjsKIApAQCAtNTM2LDYgKzUz NSwyNyBAQCBzdGF0aWMgdW5zaWduZWQgdXNiX2J1c19pc193dXNiKHN0cnVjdCB1c2JfYnVzICpi dXMpCiAJcmV0dXJuIGhjZC0+d2lyZWxlc3M7CiB9CiAKK3N0YXRpYyBib29sIHVzYl9kZXZfYXV0 aG9yaXplZChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBzdHJ1Y3QgdXNiX2hjZCAqaGNkKQorewor CXN0cnVjdCB1c2JfaHViICpodWI7CisKKwlpZiAoIWRldi0+cGFyZW50KQorCQlyZXR1cm4gdHJ1 ZTsgLyogUm9vdCBodWIgYWx3YXlzIG9rIFthbmQgYWx3YXlzIHdpcmVkXSAqLworCisJc3dpdGNo IChoY2QtPmRldl9wb2xpY3kpIHsKKwljYXNlIFVTQl9ERVZJQ0VfQVVUSE9SSVpFX05PTkU6CisJ ZGVmYXVsdDoKKwkJcmV0dXJuIGZhbHNlOworCisJY2FzZSBVU0JfREVWSUNFX0FVVEhPUklaRV9B TEw6CisJCXJldHVybiB0cnVlOworCisJY2FzZSBVU0JfREVWSUNFX0FVVEhPUklaRV9JTlRFUk5B TDoKKwkJaHViID0gdXNiX2h1Yl90b19zdHJ1Y3RfaHViKGRldi0+cGFyZW50KTsKKwkJcmV0dXJu IGh1Yi0+cG9ydHNbZGV2LT5wb3J0bnVtIC0gMV0tPmNvbm5lY3RfdHlwZSA9PQorCQkJCVVTQl9Q T1JUX0NPTk5FQ1RfVFlQRV9IQVJEX1dJUkVEOworCX0KK30KIAogLyoqCiAgKiB1c2JfYWxsb2Nf ZGV2IC0gdXNiIGRldmljZSBjb25zdHJ1Y3RvciAodXNiY29yZS1pbnRlcm5hbCkKQEAgLTY2Mywx MiArNjgzLDExIEBAIHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfYWxsb2NfZGV2KHN0cnVjdCB1c2Jf ZGV2aWNlICpwYXJlbnQsCiAJZGV2LT5jb25uZWN0X3RpbWUgPSBqaWZmaWVzOwogCWRldi0+YWN0 aXZlX2R1cmF0aW9uID0gLWppZmZpZXM7CiAjZW5kaWYKLQlpZiAocm9vdF9odWIpCS8qIFJvb3Qg aHViIGFsd2F5cyBvayBbYW5kIGFsd2F5cyB3aXJlZF0gKi8KLQkJZGV2LT5hdXRob3JpemVkID0g MTsKLQllbHNlIHsKLQkJZGV2LT5hdXRob3JpemVkID0gISFIQ0RfREVWX0FVVEhPUklaRUQodXNi X2hjZCk7CisKKwlkZXYtPmF1dGhvcml6ZWQgPSB1c2JfZGV2X2F1dGhvcml6ZWQoZGV2LCB1c2Jf aGNkKTsKKwlpZiAoIXJvb3RfaHViKQogCQlkZXYtPnd1c2IgPSB1c2JfYnVzX2lzX3d1c2IoYnVz KSA/IDEgOiAwOwotCX0KKwogCXJldHVybiBkZXY7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh1c2Jf YWxsb2NfZGV2KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL2hjZC5oIGIvaW5jbHVk ZS9saW51eC91c2IvaGNkLmgKaW5kZXggOTdlMmRkZWMxOGIxLi43YzQ2OTUxNzAxY2EgMTAwNjQ0 Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL2hjZC5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL2hj ZC5oCkBAIC03Miw2ICs3MiwxMiBAQCBzdHJ1Y3QgZ2l2ZWJhY2tfdXJiX2JoIHsKIAlzdHJ1Y3Qg dXNiX2hvc3RfZW5kcG9pbnQgKmNvbXBsZXRpbmdfZXA7CiB9OwogCitlbnVtIHVzYl9kZXZfYXV0 aG9yaXplX3BvbGljeSB7CisJVVNCX0RFVklDRV9BVVRIT1JJWkVfTk9ORQk9IDAsCisJVVNCX0RF VklDRV9BVVRIT1JJWkVfQUxMCT0gMSwKKwlVU0JfREVWSUNFX0FVVEhPUklaRV9JTlRFUk5BTAk9 IDIsCit9OworCiBzdHJ1Y3QgdXNiX2hjZCB7CiAKIAkvKgpAQCAtMTE3LDcgKzEyMyw2IEBAIHN0 cnVjdCB1c2JfaGNkIHsKICNkZWZpbmUgSENEX0ZMQUdfUkhfUlVOTklORwkJNQkvKiByb290IGh1 YiBpcyBydW5uaW5nPyAqLwogI2RlZmluZSBIQ0RfRkxBR19ERUFECQkJNgkvKiBjb250cm9sbGVy IGhhcyBkaWVkPyAqLwogI2RlZmluZSBIQ0RfRkxBR19JTlRGX0FVVEhPUklaRUQJNwkvKiBhdXRo b3JpemUgaW50ZXJmYWNlcz8gKi8KLSNkZWZpbmUgSENEX0ZMQUdfREVWX0FVVEhPUklaRUQJCTgJ LyogYXV0aG9yaXplIGRldmljZXM/ICovCiAKIAkvKiBUaGUgZmxhZ3MgY2FuIGJlIHRlc3RlZCB1 c2luZyB0aGVzZSBtYWNyb3M7IHRoZXkgYXJlIGxpa2VseSB0bwogCSAqIGJlIHNsaWdodGx5IGZh c3RlciB0aGFuIHRlc3RfYml0KCkuCkBAIC0xNDIsOCArMTQ3LDcgQEAgc3RydWN0IHVzYl9oY2Qg ewogCSAqIG9yIHRoZXkgcmVxdWlyZSBleHBsaWNpdCB1c2VyIHNwYWNlIGF1dGhvcml6YXRpb247 IHRoaXMgYml0IGlzCiAJICogc2V0dGFibGUgdGhyb3VnaCAvc3lzL2NsYXNzL3VzYl9ob3N0L1gv YXV0aG9yaXplZF9kZWZhdWx0CiAJICovCi0jZGVmaW5lIEhDRF9ERVZfQVVUSE9SSVpFRChoY2Qp IFwKLQkoKGhjZCktPmZsYWdzICYgKDFVIDw8IEhDRF9GTEFHX0RFVl9BVVRIT1JJWkVEKSkKKwll bnVtIHVzYl9kZXZfYXV0aG9yaXplX3BvbGljeSBkZXZfcG9saWN5OwogCiAJLyogRmxhZ3MgdGhh dCBnZXQgc2V0IG9ubHkgZHVyaW5nIEhDRCByZWdpc3RyYXRpb24gb3IgcmVtb3ZhbC4gKi8KIAl1 bnNpZ25lZAkJcmhfcmVnaXN0ZXJlZDoxOy8qIGlzIHJvb3QgaHViIHJlZ2lzdGVyZWQ/ICovCg==