From: Yusuke Endoh Date: 2010-10-06T00:19:19+09:00 Subject: [ruby-core:32698] [Ruby 1.9-Feature#3908][Open] private constant --mimepart_4cab41f657fe_ef3cfecfde163e5 Content-Type: text/plain Content-Transfer-Encoding: Quoted-printable Content-Disposition: inline Feature #3908: private constant http://redmine.ruby-lang.org/issues/show/3908 Author: Yusuke Endoh Status: Open, Priority: Normal Assigned to: Yusuke Endoh, Category: core, Target version: 1.9.3 Hi, I'd propose "private constant." Private constant provides method-like visibility for constant. =3D=3D=3D Sample code =3D=3D=3D module SomeModule class PublicClass ... end class PrivateClass ... end # you can make "PrivateClass" private by private_constant method private_constant :PrivateClass end # we can refer access constant as is conventionally done p SomeModule::PublicClass #=3D> SomeModule::PublicClass # a RuntimeError is raised when we attempt to refer private constant p SomeModule::PrivateClass #=3D> private constant (RuntimeError) # we can even refer private constant from its parent scope module SomeModule p PrivateClass #=3D> SomeModule::PrivateClass end =3D=3D=3D Background =3D=3D=3D Traditionally, there is no way to prevent users from using your classes. It is too easy for user to access any internal class (e.g., CGI::Html3, Enumerator::Generator, Matrix::Scalar, URI::Util, etc). We can only write a document to ask users not to use them. RubySpec inspired me to propose this feature. RubySpec declares the policy that no spec should be written for private method. Nevertheless, there were some specs for internal classes, such as CGI::Html3 (FYI, such specs are already deleted). I thought this was because there is no way to explicitly declare that the constants are "internal use only." =3D=3D=3D Proposal =3D=3D=3D Private constant is a scoped constant that can be referred only from its parent scope. It can be used for declaring "the constant is for internal use," like private method. When users try to refer private constant, they can realize that they are going to use non-guaranteed feature, because the constant cannot be referred so easily. Even so, they can use such a feature with self-responsibility, by explicitly opening its parent scope. Since the default visibility is public, this feature does not break any compatibility. =3D=3D=3D Current status =3D=3D=3D I first suggested this at [ruby-dev:39685]. Matz approved my proposal [ruby-dev:39686] Yugui has also approved [ruby-dev:40254], but said that it is needed to discuss in ruby-core list before commit. The patches are attached. make check and make test-rubyspec are all passed. What do you think? I'll commit the patch unless there is objection. -- = Yusuke ENDOH ---------------------------------------- http://redmine.ruby-lang.org --mimepart_4cab41f657fe_ef3cfecfde163e5 Content-Type: application/octet-stream; name=0001-separate-RCLASS_CONST_TBL-from-RCLASS_IV_TBL.patch Content-Transfer-Encoding: Base64 Content-Disposition: attachment; filename=0001-separate-RCLASS_CONST_TBL-from-RCLASS_IV_TBL.patch RnJvbSBhNzkyN2NmZDUwZGJiZjcwODUzNmU5MDgzMjVlMDYzOGY2MTAyZTg2 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBZdXN1a2UgRW5kb2gg PG1hbWVAdHNnLm5lLmpwPgpEYXRlOiBGcmksIDE3IFNlcCAyMDEwIDIyOjUz OjU4ICswOTAwClN1YmplY3Q6IFtQQVRDSCAxLzNdIHNlcGFyYXRlIFJDTEFT U19DT05TVF9UQkwgZnJvbSBSQ0xBU1NfSVZfVEJMCgpSQ0xBU1NfSVZfVEJM IGNvbnRhaW5lZCBub3Qgb25seSBpbnN0YW5jZSB2YXJpYWJsZSB0YWJsZSBi dXQgYWxzbwpjb25zdGFudCB0YWJsZS4gIE5vdyB0aGUgdHdvIHRhYmxlIGFy ZSBzZXBhcmF0ZWQgdG8gUkNMQVNTX0NPTlNUX1RCTCBhbmQKUkNMQVNTX0lW X1RCTC4KLS0tCiBjbGFzcy5jICAgICAgICAgICAgIHwgICAxNCArKysrKysr KysKIGdjLmMgICAgICAgICAgICAgICAgfCAgICA0ICsrCiBpbmNsdWRlL3J1 YnkvcnVieS5oIHwgICAgMyArKwogb2JqZWN0LmMgICAgICAgICAgICB8ICAg IDQgKysKIHZhcmlhYmxlLmMgICAgICAgICAgfCAgIDc3ICsrKysrKysrKysr KysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB2bV9p bnNuaGVscGVyLmMgICAgIHwgICAgNCArLQogNiBmaWxlcyBjaGFuZ2VkLCA2 NyBpbnNlcnRpb25zKCspLCAzOSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9jbGFzcy5jIGIvY2xhc3MuYwppbmRleCAxZDQ2OTViLi41MjI1ZmZhIDEw MDY0NAotLS0gYS9jbGFzcy5jCisrKyBiL2NsYXNzLmMKQEAgLTUyLDYgKzUy LDcgQEAgY2xhc3NfYWxsb2MoVkFMVUUgZmxhZ3MsIFZBTFVFIGtsYXNzKQog ICAgIE9CSlNFVFVQKG9iaiwga2xhc3MsIGZsYWdzKTsKICAgICBvYmotPnB0 ciA9IGV4dDsKICAgICBSQ0xBU1NfSVZfVEJMKG9iaikgPSAwOworICAgIFJD TEFTU19DT05TVF9UQkwob2JqKSA9IDA7CiAgICAgUkNMQVNTX01fVEJMKG9i aikgPSAwOwogICAgIFJDTEFTU19TVVBFUihvYmopID0gMDsKICAgICBSQ0xB U1NfSVZfSU5ERVhfVEJMKG9iaikgPSAwOwpAQCAtMTYxLDYgKzE2MiwxMiBA QCByYl9tb2RfaW5pdF9jb3B5KFZBTFVFIGNsb25lLCBWQUxVRSBvcmlnKQog CUNPTlNUX0lEKGlkLCAiX19jbGFzc2lkX18iKTsKIAlzdF9kZWxldGUoUkNM QVNTX0lWX1RCTChjbG9uZSksIChzdF9kYXRhX3QqKSZpZCwgMCk7CiAgICAg fQorICAgIGlmIChSQ0xBU1NfQ09OU1RfVEJMKG9yaWcpKSB7CisJaWYgKFJD TEFTU19DT05TVF9UQkwoY2xvbmUpKSB7CisJICAgIHN0X2ZyZWVfdGFibGUo UkNMQVNTX0NPTlNUX1RCTChjbG9uZSkpOworCX0KKwlSQ0xBU1NfQ09OU1Rf VEJMKGNsb25lKSA9IHN0X2NvcHkoUkNMQVNTX0NPTlNUX1RCTChvcmlnKSk7 CisgICAgfQogICAgIGlmIChSQ0xBU1NfTV9UQkwob3JpZykpIHsKIAlzdHJ1 Y3QgY2xvbmVfbWV0aG9kX2RhdGEgZGF0YTsKIApAQCAtMjE2LDYgKzIyMyw5 IEBAIHJiX3NpbmdsZXRvbl9jbGFzc19jbG9uZShWQUxVRSBvYmopCiAJaWYg KFJDTEFTU19JVl9UQkwoa2xhc3MpKSB7CiAJICAgIFJDTEFTU19JVl9UQkwo Y2xvbmUpID0gc3RfY29weShSQ0xBU1NfSVZfVEJMKGtsYXNzKSk7CiAJfQor CWlmIChSQ0xBU1NfQ09OU1RfVEJMKGtsYXNzKSkgeworCSAgICBSQ0xBU1Nf Q09OU1RfVEJMKGNsb25lKSA9IHN0X2NvcHkoUkNMQVNTX0NPTlNUX1RCTChr bGFzcykpOworCX0KIAlSQ0xBU1NfTV9UQkwoY2xvbmUpID0gc3RfaW5pdF9u dW10YWJsZSgpOwogCWRhdGEudGJsID0gUkNMQVNTX01fVEJMKGNsb25lKTsK IAlkYXRhLmtsYXNzID0gKFZBTFVFKWNsb25lOwpAQCAtNjA1LDcgKzYxNSwx MSBAQCBpbmNsdWRlX2NsYXNzX25ldyhWQUxVRSBtb2R1bGUsIFZBTFVFIHN1 cGVyKQogICAgIGlmICghUkNMQVNTX0lWX1RCTChtb2R1bGUpKSB7CiAJUkNM QVNTX0lWX1RCTChtb2R1bGUpID0gc3RfaW5pdF9udW10YWJsZSgpOwogICAg IH0KKyAgICBpZiAoIVJDTEFTU19DT05TVF9UQkwobW9kdWxlKSkgeworCVJD TEFTU19DT05TVF9UQkwobW9kdWxlKSA9IHN0X2luaXRfbnVtdGFibGUoKTsK KyAgICB9CiAgICAgUkNMQVNTX0lWX1RCTChrbGFzcykgPSBSQ0xBU1NfSVZf VEJMKG1vZHVsZSk7CisgICAgUkNMQVNTX0NPTlNUX1RCTChrbGFzcykgPSBS Q0xBU1NfQ09OU1RfVEJMKG1vZHVsZSk7CiAgICAgUkNMQVNTX01fVEJMKGts YXNzKSA9IFJDTEFTU19NX1RCTChtb2R1bGUpOwogICAgIFJDTEFTU19TVVBF UihrbGFzcykgPSBzdXBlcjsKICAgICBpZiAoVFlQRShtb2R1bGUpID09IFRf SUNMQVNTKSB7CmRpZmYgLS1naXQgYS9nYy5jIGIvZ2MuYwppbmRleCA5YmRl NDg3Li5lZTViMjU2IDEwMDY0NAotLS0gYS9nYy5jCisrKyBiL2djLmMKQEAg LTE3MTcsNiArMTcxNyw3IEBAIGdjX21hcmtfY2hpbGRyZW4ocmJfb2Jqc3Bh Y2VfdCAqb2Jqc3BhY2UsIFZBTFVFIHB0ciwgaW50IGxldikKICAgICAgIGNh c2UgVF9NT0RVTEU6CiAJbWFya19tX3RibChvYmpzcGFjZSwgUkNMQVNTX01f VEJMKG9iaiksIGxldik7CiAJbWFya190Ymwob2Jqc3BhY2UsIFJDTEFTU19J Vl9UQkwob2JqKSwgbGV2KTsKKwltYXJrX3RibChvYmpzcGFjZSwgUkNMQVNT X0NPTlNUX1RCTChvYmopLCBsZXYpOwogCXB0ciA9IFJDTEFTU19TVVBFUihv YmopOwogCWdvdG8gYWdhaW47CiAKQEAgLTIxNjQsNiArMjE2NSw5IEBAIG9i al9mcmVlKHJiX29ianNwYWNlX3QgKm9ianNwYWNlLCBWQUxVRSBvYmopCiAJ aWYgKFJDTEFTU19JVl9UQkwob2JqKSkgewogCSAgICBzdF9mcmVlX3RhYmxl KFJDTEFTU19JVl9UQkwob2JqKSk7CiAJfQorCWlmIChSQ0xBU1NfQ09OU1Rf VEJMKG9iaikpIHsKKwkgICAgc3RfZnJlZV90YWJsZShSQ0xBU1NfQ09OU1Rf VEJMKG9iaikpOworCX0KIAlpZiAoUkNMQVNTX0lWX0lOREVYX1RCTChvYmop KSB7CiAJICAgIHN0X2ZyZWVfdGFibGUoUkNMQVNTX0lWX0lOREVYX1RCTChv YmopKTsKIAl9CmRpZmYgLS1naXQgYS9pbmNsdWRlL3J1YnkvcnVieS5oIGIv aW5jbHVkZS9ydWJ5L3J1YnkuaAppbmRleCAwMjhmNGU5Li4xYmYwMzc5IDEw MDY0NAotLS0gYS9pbmNsdWRlL3J1YnkvcnVieS5oCisrKyBiL2luY2x1ZGUv cnVieS9ydWJ5LmgKQEAgLTYwNiw2ICs2MDYsNyBAQCBzdHJ1Y3QgUk9iamVj dCB7CiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgVkFMVUUgc3VwZXI7CiAgICAg c3RydWN0IHN0X3RhYmxlICppdl90Ymw7CisgICAgc3RydWN0IHN0X3RhYmxl ICpjb25zdF90Ymw7CiB9IHJiX2NsYXNzZXh0X3Q7CiAKIHN0cnVjdCBSQ2xh c3MgewpAQCAtNjE1LDEwICs2MTYsMTIgQEAgc3RydWN0IFJDbGFzcyB7CiAg ICAgc3RydWN0IHN0X3RhYmxlICppdl9pbmRleF90Ymw7CiB9OwogI2RlZmlu ZSBSQ0xBU1NfSVZfVEJMKGMpIChSQ0xBU1MoYyktPnB0ci0+aXZfdGJsKQor I2RlZmluZSBSQ0xBU1NfQ09OU1RfVEJMKGMpIChSQ0xBU1MoYyktPnB0ci0+ Y29uc3RfdGJsKQogI2RlZmluZSBSQ0xBU1NfTV9UQkwoYykgKFJDTEFTUyhj KS0+bV90YmwpCiAjZGVmaW5lIFJDTEFTU19TVVBFUihjKSAoUkNMQVNTKGMp LT5wdHItPnN1cGVyKQogI2RlZmluZSBSQ0xBU1NfSVZfSU5ERVhfVEJMKGMp IChSQ0xBU1MoYyktPml2X2luZGV4X3RibCkKICNkZWZpbmUgUk1PRFVMRV9J Vl9UQkwobSkgUkNMQVNTX0lWX1RCTChtKQorI2RlZmluZSBSTU9EVUxFX0NP TlNUX1RCTChtKSBSQ0xBU1NfQ09OU1RfVEJMKG0pCiAjZGVmaW5lIFJNT0RV TEVfTV9UQkwobSkgUkNMQVNTX01fVEJMKG0pCiAjZGVmaW5lIFJNT0RVTEVf U1VQRVIobSkgUkNMQVNTX1NVUEVSKG0pCiAKZGlmZiAtLWdpdCBhL29iamVj dC5jIGIvb2JqZWN0LmMKaW5kZXggNWFkNTY4MC4uYjFiYmViMiAxMDA2NDQK LS0tIGEvb2JqZWN0LmMKKysrIGIvb2JqZWN0LmMKQEAgLTIyMSw2ICsyMjEs MTAgQEAgaW5pdF9jb3B5KFZBTFVFIGRlc3QsIFZBTFVFIG9iaikKIAkgICAg c3RfZnJlZV90YWJsZShSQ0xBU1NfSVZfVEJMKGRlc3QpKTsKIAkgICAgUkNM QVNTX0lWX1RCTChkZXN0KSA9IDA7CiAJfQorCWlmIChSQ0xBU1NfQ09OU1Rf VEJMKGRlc3QpKSB7CisJICAgIHN0X2ZyZWVfdGFibGUoUkNMQVNTX0NPTlNU X1RCTChkZXN0KSk7CisJICAgIFJDTEFTU19DT05TVF9UQkwoZGVzdCkgPSAw OworCX0KIAlpZiAoUkNMQVNTX0lWX1RCTChvYmopKSB7CiAJICAgIFJDTEFT U19JVl9UQkwoZGVzdCkgPSBzdF9jb3B5KFJDTEFTU19JVl9UQkwob2JqKSk7 CiAJfQpkaWZmIC0tZ2l0IGEvdmFyaWFibGUuYyBiL3ZhcmlhYmxlLmMKaW5k ZXggNmM2NTNjYS4uYWI2MmRlYiAxMDA2NDQKLS0tIGEvdmFyaWFibGUuYwor KysgYi92YXJpYWJsZS5jCkBAIC04Miw3ICs4Miw3IEBAIGZjX2koSUQga2V5 LCBWQUxVRSB2YWx1ZSwgc3RydWN0IGZjX3Jlc3VsdCAqcmVzKQogICAgIHN3 aXRjaCAoVFlQRSh2YWx1ZSkpIHsKICAgICAgIGNhc2UgVF9NT0RVTEU6CiAg ICAgICBjYXNlIFRfQ0xBU1M6Ci0JaWYgKCFSQ0xBU1NfSVZfVEJMKHZhbHVl KSkgcmV0dXJuIFNUX0NPTlRJTlVFOworCWlmICghUkNMQVNTX0NPTlNUX1RC TCh2YWx1ZSkpIHJldHVybiBTVF9DT05USU5VRTsKIAllbHNlIHsKIAkgICAg c3RydWN0IGZjX3Jlc3VsdCBhcmc7CiAJICAgIHN0cnVjdCBmY19yZXN1bHQg Kmxpc3Q7CkBAIC05OCw3ICs5OCw3IEBAIGZjX2koSUQga2V5LCBWQUxVRSB2 YWx1ZSwgc3RydWN0IGZjX3Jlc3VsdCAqcmVzKQogCSAgICBhcmcua2xhc3Mg PSByZXMtPmtsYXNzOwogCSAgICBhcmcudHJhY2sgPSB2YWx1ZTsKIAkgICAg YXJnLnByZXYgPSByZXM7Ci0JICAgIHN0X2ZvcmVhY2goUkNMQVNTX0lWX1RC TCh2YWx1ZSksIGZjX2ksIChzdF9kYXRhX3QpJmFyZyk7CisJICAgIHN0X2Zv cmVhY2goUkNMQVNTX0NPTlNUX1RCTCh2YWx1ZSksIGZjX2ksIChzdF9kYXRh X3QpJmFyZyk7CiAJICAgIGlmIChhcmcucGF0aCkgewogCQlyZXMtPnBhdGgg PSBhcmcucGF0aDsKIAkJcmV0dXJuIFNUX1NUT1A7CkBAIC0xMjIsOCArMTIy LDggQEAgZmluZF9jbGFzc19wYXRoKFZBTFVFIGtsYXNzKQogICAgIGFyZy5r bGFzcyA9IGtsYXNzOwogICAgIGFyZy50cmFjayA9IHJiX2NPYmplY3Q7CiAg ICAgYXJnLnByZXYgPSAwOwotICAgIGlmIChSQ0xBU1NfSVZfVEJMKHJiX2NP YmplY3QpKSB7Ci0Jc3RfZm9yZWFjaF9zYWZlKFJDTEFTU19JVl9UQkwocmJf Y09iamVjdCksIGZjX2ksIChzdF9kYXRhX3QpJmFyZyk7CisgICAgaWYgKFJD TEFTU19DT05TVF9UQkwocmJfY09iamVjdCkpIHsKKwlzdF9mb3JlYWNoX3Nh ZmUoUkNMQVNTX0NPTlNUX1RCTChyYl9jT2JqZWN0KSwgZmNfaSwgKHN0X2Rh dGFfdCkmYXJnKTsKICAgICB9CiAgICAgaWYgKGFyZy5wYXRoID09IDApIHsK IAlzdF9mb3JlYWNoX3NhZmUocmJfY2xhc3NfdGJsLCBmY19pLCAoc3RfZGF0 YV90KSZhcmcpOwpAQCAtMTQzOCw3ICsxNDM4LDcgQEAgcmJfYXV0b2xvYWQo VkFMVUUgbW9kLCBJRCBpZCwgY29uc3QgY2hhciAqZmlsZSkKIAlyYl9yYWlz ZShyYl9lQXJnRXJyb3IsICJlbXB0eSBmaWxlIG5hbWUiKTsKICAgICB9CiAK LSAgICBpZiAoKHRibCA9IFJDTEFTU19JVl9UQkwobW9kKSkgJiYgc3RfbG9v a3VwKHRibCwgKHN0X2RhdGFfdClpZCwgJmF2KSAmJiAoVkFMVUUpYXYgIT0g UXVuZGVmKQorICAgIGlmICgodGJsID0gUkNMQVNTX0NPTlNUX1RCTChtb2Qp KSAmJiBzdF9sb29rdXAodGJsLCAoc3RfZGF0YV90KWlkLCAmYXYpICYmIChW QUxVRSlhdiAhPSBRdW5kZWYpCiAJcmV0dXJuOwogCiAgICAgcmJfY29uc3Rf c2V0KG1vZCwgaWQsIFF1bmRlZik7CkBAIC0xNDYyLDcgKzE0NjIsNyBAQCBh dXRvbG9hZF9kZWxldGUoVkFMVUUgbW9kLCBJRCBpZCkKIHsKICAgICBzdF9k YXRhX3QgdmFsLCBsb2FkID0gMCwgbiA9IGlkOwogCi0gICAgc3RfZGVsZXRl KFJDTEFTU19JVl9UQkwobW9kKSwgJm4sIDApOworICAgIHN0X2RlbGV0ZShS Q0xBU1NfQ09OU1RfVEJMKG1vZCksICZuLCAwKTsKICAgICBpZiAoc3RfbG9v a3VwKFJDTEFTU19JVl9UQkwobW9kKSwgKHN0X2RhdGFfdClhdXRvbG9hZCwg JnZhbCkpIHsKIAlzdHJ1Y3Qgc3RfdGFibGUgKnRibCA9IGNoZWNrX2F1dG9s b2FkX3RhYmxlKChWQUxVRSl2YWwpOwogCkBAIC0xNDcwLDcgKzE0NzAsNyBA QCBhdXRvbG9hZF9kZWxldGUoVkFMVUUgbW9kLCBJRCBpZCkKIAogCWlmICh0 YmwtPm51bV9lbnRyaWVzID09IDApIHsKIAkgICAgbiA9IGF1dG9sb2FkOwot CSAgICBzdF9kZWxldGUoUkNMQVNTX0lWX1RCTChtb2QpLCAmbiwgJnZhbCk7 CisJICAgIHN0X2RlbGV0ZShSQ0xBU1NfQ09OU1RfVEJMKG1vZCksICZuLCAm dmFsKTsKIAl9CiAgICAgfQogCkBAIC0xNTI3LDcgKzE1MjcsNyBAQCBhdXRv bG9hZF9ub2RlKFZBTFVFIG1vZCwgSUQgaWQsIGNvbnN0IGNoYXIgKipsb2Fk aW5ncGF0aCkKIHN0YXRpYyBpbnQKIGF1dG9sb2FkX25vZGVfaWQoVkFMVUUg bW9kLCBJRCBpZCkKIHsKLSAgICBzdHJ1Y3Qgc3RfdGFibGUgKnRibCA9IFJD TEFTU19JVl9UQkwobW9kKTsKKyAgICBzdHJ1Y3Qgc3RfdGFibGUgKnRibCA9 IFJDTEFTU19DT05TVF9UQkwobW9kKTsKICAgICBzdF9kYXRhX3QgdmFsOwog CiAgICAgaWYgKCF0YmwgfHwgIXN0X2xvb2t1cCh0YmwsIChzdF9kYXRhX3Qp aWQsICZ2YWwpIHx8IChWQUxVRSl2YWwgIT0gUXVuZGVmKSB7CkBAIC0xNTc1 LDcgKzE1NzUsNyBAQCByYl9jb25zdF9nZXRfMChWQUxVRSBrbGFzcywgSUQg aWQsIGludCBleGNsdWRlLCBpbnQgcmVjdXJzZSkKICAgcmV0cnk6CiAgICAg d2hpbGUgKFJURVNUKHRtcCkpIHsKIAlWQUxVRSBhbSA9IDA7Ci0Jd2hpbGUg KFJDTEFTU19JVl9UQkwodG1wKSAmJiBzdF9sb29rdXAoUkNMQVNTX0lWX1RC TCh0bXApLCAoc3RfZGF0YV90KWlkLCAmdmFsdWUpKSB7CisJd2hpbGUgKFJD TEFTU19DT05TVF9UQkwodG1wKSAmJiBzdF9sb29rdXAoUkNMQVNTX0NPTlNU X1RCTCh0bXApLCAoc3RfZGF0YV90KWlkLCAmdmFsdWUpKSB7CiAJICAgIGlm ICh2YWx1ZSA9PSBRdW5kZWYpIHsKIAkJaWYgKGFtID09IHRtcCkgYnJlYWs7 CiAJCWFtID0gdG1wOwpAQCAtMTY1MCw3ICsxNjUwLDcgQEAgcmJfY29uc3Rf cmVtb3ZlKFZBTFVFIG1vZCwgSUQgaWQpCiAJcmJfcmFpc2UocmJfZVNlY3Vy aXR5RXJyb3IsICJJbnNlY3VyZTogY2FuJ3QgcmVtb3ZlIGNvbnN0YW50Iik7 CiAgICAgaWYgKE9CSl9GUk9aRU4obW9kKSkgcmJfZXJyb3JfZnJvemVuKCJj bGFzcy9tb2R1bGUiKTsKIAotICAgIGlmICghUkNMQVNTX0lWX1RCTChtb2Qp IHx8ICFzdF9kZWxldGUoUkNMQVNTX0lWX1RCTChtb2QpLCAmbiwgJnYpKSB7 CisgICAgaWYgKCFSQ0xBU1NfQ09OU1RfVEJMKG1vZCkgfHwgIXN0X2RlbGV0 ZShSQ0xBU1NfQ09OU1RfVEJMKG1vZCksICZuLCAmdikpIHsKIAlpZiAocmJf Y29uc3RfZGVmaW5lZF9hdChtb2QsIGlkKSkgewogCSAgICByYl9uYW1lX2Vy cm9yKGlkLCAiY2Fubm90IHJlbW92ZSAlczo6JXMiLAogCQkJICByYl9jbGFz czJuYW1lKG1vZCksIHJiX2lkMm5hbWUoaWQpKTsKQEAgLTE2ODcsOCArMTY4 Nyw4IEBAIHJiX21vZF9jb25zdF9hdChWQUxVRSBtb2QsIHZvaWQgKmRhdGEp CiAgICAgaWYgKCF0YmwpIHsKIAl0YmwgPSBzdF9pbml0X251bXRhYmxlKCk7 CiAgICAgfQotICAgIGlmIChSQ0xBU1NfSVZfVEJMKG1vZCkpIHsKLQlzdF9m b3JlYWNoX3NhZmUoUkNMQVNTX0lWX1RCTChtb2QpLCBzdl9pLCAoc3RfZGF0 YV90KXRibCk7CisgICAgaWYgKFJDTEFTU19DT05TVF9UQkwobW9kKSkgewor CXN0X2ZvcmVhY2hfc2FmZShSQ0xBU1NfQ09OU1RfVEJMKG1vZCksIHN2X2ks IChzdF9kYXRhX3QpdGJsKTsKICAgICB9CiAgICAgcmV0dXJuIHRibDsKIH0K QEAgLTE3NzMsNyArMTc3Myw3IEBAIHJiX2NvbnN0X2RlZmluZWRfMChWQUxV RSBrbGFzcywgSUQgaWQsIGludCBleGNsdWRlLCBpbnQgcmVjdXJzZSkKICAg ICB0bXAgPSBrbGFzczsKICAgcmV0cnk6CiAgICAgd2hpbGUgKHRtcCkgewot CWlmIChSQ0xBU1NfSVZfVEJMKHRtcCkgJiYgc3RfbG9va3VwKFJDTEFTU19J Vl9UQkwodG1wKSwgKHN0X2RhdGFfdClpZCwgJnZhbHVlKSkgeworCWlmIChS Q0xBU1NfQ09OU1RfVEJMKHRtcCkgJiYgc3RfbG9va3VwKFJDTEFTU19DT05T VF9UQkwodG1wKSwgKHN0X2RhdGFfdClpZCwgJnZhbHVlKSkgewogCSAgICBp ZiAoKFZBTFVFKXZhbHVlID09IFF1bmRlZiAmJiAhYXV0b2xvYWRfbm9kZSgo VkFMVUUpa2xhc3MsIGlkLCAwKSkKIAkJcmV0dXJuIChpbnQpUWZhbHNlOwog CSAgICByZXR1cm4gKGludClRdHJ1ZTsKQEAgLTE4MDcsMTEgKzE4MDcsOSBA QCByYl9jb25zdF9kZWZpbmVkX2F0KFZBTFVFIGtsYXNzLCBJRCBpZCkKICAg ICByZXR1cm4gcmJfY29uc3RfZGVmaW5lZF8wKGtsYXNzLCBpZCwgVFJVRSwg RkFMU0UpOwogfQogCi1zdGF0aWMgdm9pZAotbW9kX2F2X3NldChWQUxVRSBr bGFzcywgSUQgaWQsIFZBTFVFIHZhbCwgaW50IGlzY29uc3QpCit2b2lkCitj aGVja19iZWZvcmVfbW9kX3NldChWQUxVRSBrbGFzcywgSUQgaWQsIFZBTFVF IHZhbCwgY29uc3QgY2hhciAqZGVzdCkKIHsKLSAgICBjb25zdCBjaGFyICpk ZXN0ID0gaXNjb25zdCA/ICJjb25zdGFudCIgOiAiY2xhc3MgdmFyaWFibGUi OwotCiAgICAgaWYgKCFPQkpfVU5UUlVTVEVEKGtsYXNzKSAmJiByYl9zYWZl X2xldmVsKCkgPj0gNCkKIAlyYl9yYWlzZShyYl9lU2VjdXJpdHlFcnJvciwg Ikluc2VjdXJlOiBjYW4ndCBzZXQgJXMiLCBkZXN0KTsKICAgICBpZiAoT0JK X0ZST1pFTihrbGFzcykpIHsKQEAgLTE4MjIsMjQgKzE4MjAsNiBAQCBtb2Rf YXZfc2V0KFZBTFVFIGtsYXNzLCBJRCBpZCwgVkFMVUUgdmFsLCBpbnQgaXNj b25zdCkKIAkgICAgcmJfZXJyb3JfZnJvemVuKCJjbGFzcyIpOwogCX0KICAg ICB9Ci0gICAgaWYgKCFSQ0xBU1NfSVZfVEJMKGtsYXNzKSkgewotCVJDTEFT U19JVl9UQkwoa2xhc3MpID0gc3RfaW5pdF9udW10YWJsZSgpOwotICAgIH0K LSAgICBlbHNlIGlmIChpc2NvbnN0KSB7Ci0Jc3RfZGF0YV90IHZhbHVlOwot Ci0JaWYgKHN0X2xvb2t1cChSQ0xBU1NfSVZfVEJMKGtsYXNzKSwgKHN0X2Rh dGFfdClpZCwgJnZhbHVlKSkgewotCSAgICBpZiAoKFZBTFVFKXZhbHVlID09 IFF1bmRlZikKLQkJYXV0b2xvYWRfZGVsZXRlKGtsYXNzLCBpZCk7Ci0JICAg IGVsc2UKLQkJcmJfd2FybigiYWxyZWFkeSBpbml0aWFsaXplZCAlcyAlcyIs IGRlc3QsIHJiX2lkMm5hbWUoaWQpKTsKLQl9Ci0gICAgfQotCi0gICAgaWYg KGlzY29uc3QpewotCXJiX3ZtX2NoYW5nZV9zdGF0ZSgpOwotICAgIH0KLSAg ICBzdF9pbnNlcnQoUkNMQVNTX0lWX1RCTChrbGFzcyksIChzdF9kYXRhX3Qp aWQsIChzdF9kYXRhX3QpdmFsKTsKIH0KIAogdm9pZApAQCAtMTg0OSw3ICsx ODI5LDI0IEBAIHJiX2NvbnN0X3NldChWQUxVRSBrbGFzcywgSUQgaWQsIFZB TFVFIHZhbCkKIAlyYl9yYWlzZShyYl9lVHlwZUVycm9yLCAibm8gY2xhc3Mv bW9kdWxlIHRvIGRlZmluZSBjb25zdGFudCAlcyIsCiAJCSByYl9pZDJuYW1l KGlkKSk7CiAgICAgfQotICAgIG1vZF9hdl9zZXQoa2xhc3MsIGlkLCB2YWws IFRSVUUpOworCisgICAgY2hlY2tfYmVmb3JlX21vZF9zZXQoa2xhc3MsIGlk LCB2YWwsICJjb25zdGFudCIpOworICAgIGlmICghUkNMQVNTX0NPTlNUX1RC TChrbGFzcykpIHsKKwlSQ0xBU1NfQ09OU1RfVEJMKGtsYXNzKSA9IHN0X2lu aXRfbnVtdGFibGUoKTsKKyAgICB9CisgICAgZWxzZSB7CisJc3RfZGF0YV90 IHZhbHVlOworCisJaWYgKHN0X2xvb2t1cChSQ0xBU1NfQ09OU1RfVEJMKGts YXNzKSwgKHN0X2RhdGFfdClpZCwgJnZhbHVlKSkgeworCSAgICBpZiAoKFZB TFVFKXZhbHVlID09IFF1bmRlZikKKwkJYXV0b2xvYWRfZGVsZXRlKGtsYXNz LCBpZCk7CisJICAgIGVsc2UKKwkJcmJfd2FybigiYWxyZWFkeSBpbml0aWFs aXplZCBjb25zdGFudCAlcyIsIHJiX2lkMm5hbWUoaWQpKTsKKwl9CisgICAg fQorCisgICAgcmJfdm1fY2hhbmdlX3N0YXRlKCk7CisgICAgc3RfaW5zZXJ0 KFJDTEFTU19DT05TVF9UQkwoa2xhc3MpLCAoc3RfZGF0YV90KWlkLCAoc3Rf ZGF0YV90KXZhbCk7CiB9CiAKIHZvaWQKQEAgLTE5MzEsNyArMTkyOCwxMyBA QCByYl9jdmFyX3NldChWQUxVRSBrbGFzcywgSUQgaWQsIFZBTFVFIHZhbCkK ICAgICBlbHNlIHsKIAl0YXJnZXQgPSB0bXA7CiAgICAgfQotICAgIG1vZF9h dl9zZXQodGFyZ2V0LCBpZCwgdmFsLCBGQUxTRSk7CisKKyAgICBjaGVja19i ZWZvcmVfbW9kX3NldCh0YXJnZXQsIGlkLCB2YWwsICJjbGFzcyB2YXJpYWJs ZSIpOworICAgIGlmICghUkNMQVNTX0lWX1RCTCh0YXJnZXQpKSB7CisJUkNM QVNTX0lWX1RCTCh0YXJnZXQpID0gc3RfaW5pdF9udW10YWJsZSgpOworICAg IH0KKworICAgIHN0X2luc2VydChSQ0xBU1NfSVZfVEJMKHRhcmdldCksIChz dF9kYXRhX3QpaWQsIChzdF9kYXRhX3QpdmFsKTsKIH0KIAogVkFMVUUKZGlm ZiAtLWdpdCBhL3ZtX2luc25oZWxwZXIuYyBiL3ZtX2luc25oZWxwZXIuYwpp bmRleCA0NjMyNmQxLi5lNmU4ZGIyIDEwMDY0NAotLS0gYS92bV9pbnNuaGVs cGVyLmMKKysrIGIvdm1faW5zbmhlbHBlci5jCkBAIC0xMTY4LDggKzExNjgs OCBAQCB2bV9nZXRfZXZfY29uc3QocmJfdGhyZWFkX3QgKnRoLCBjb25zdCBy Yl9pc2VxX3QgKmlzZXEsCiAJICAgIGlmICghTklMX1Aoa2xhc3MpKSB7CiAJ CVZBTFVFIGFtID0gMDsKIAkgICAgICBzZWFyY2hfY29udGludWU6Ci0JCWlm IChSQ0xBU1NfSVZfVEJMKGtsYXNzKSAmJgotCQkgICAgc3RfbG9va3VwKFJD TEFTU19JVl9UQkwoa2xhc3MpLCBpZCwgJnZhbCkpIHsKKwkJaWYgKFJDTEFT U19DT05TVF9UQkwoa2xhc3MpICYmCisJCSAgICBzdF9sb29rdXAoUkNMQVNT X0NPTlNUX1RCTChrbGFzcyksIGlkLCAmdmFsKSkgewogCQkgICAgaWYgKHZh bCA9PSBRdW5kZWYpIHsKIAkJCWlmIChhbSA9PSBrbGFzcykgYnJlYWs7CiAJ CQlhbSA9IGtsYXNzOwotLSAKMS43LjIuMQoK --mimepart_4cab41f657fe_ef3cfecfde163e5 Content-Type: application/octet-stream; name=0002-use-rb_constant_entry_t-as-entry-of-RCLASS_CONST_TBL.patch Content-Transfer-Encoding: Base64 Content-Disposition: attachment; filename=0002-use-rb_constant_entry_t-as-entry-of-RCLASS_CONST_TBL.patch RnJvbSBkMGE1ZTJkZjYwOGQ2YjBhMDc0YzM4OTkxM2JmNTQ4N2I5NzAwYmU4 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBZdXN1a2UgRW5kb2gg PG1hbWVAdHNnLm5lLmpwPgpEYXRlOiBGcmksIDE3IFNlcCAyMDEwIDIyOjU0 OjE2ICswOTAwClN1YmplY3Q6IFtQQVRDSCAyLzNdIHVzZSByYl9jb25zdGFu dF9lbnRyeV90IGFzIGVudHJ5IG9mIFJDTEFTU19DT05TVF9UQkwKClJDTEFT U19DT05TVF9UQkwgY29udGFpbmVkIHRoZSB2YWx1ZSBvZiBjb25zdGFudCBk aXJlY3RseS4gIE5vdyBpbnN0ZWFkCnJiX2NvbnN0X2VudHJ5X3QgaXMgY29u dGFpbmVkIGluIFJDTEFTU19DT05TVF9UQkwsICByYl9jb25zdF9lbnRyeV90 IGlzCm1hbmFnZWQgYnkgbWFsbG9jLCBhbmQgaGF2ZSBub3Qgb25seSB0aGUg dmFsdWUgaXRzZWxmIGJ1dCBhbHNvCnZpc2liaWxpdHkgZmxhZy4KLS0tCiBj bGFzcy5jICAgICAgICAgfCAgIDE4ICsrKysrKysrKysrKysrLS0tLQogZ2Mu YyAgICAgICAgICAgIHwgICAzNyArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKy0tCiBtZXRob2QuaCAgICAgICAgfCAgICAxICsKIG9iamVj dC5jICAgICAgICB8ICAgIDMgKystCiB2YXJpYWJsZS5jICAgICAgfCAgIDQw ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0KIHZt X2luc25oZWxwZXIuYyB8ICAgIDUgKysrKy0KIDYgZmlsZXMgY2hhbmdlZCwg ODUgaW5zZXJ0aW9ucygrKSwgMTkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0 IGEvY2xhc3MuYyBiL2NsYXNzLmMKaW5kZXggNTIyNWZmYS4uZTFiMGQwMiAx MDA2NDQKLS0tIGEvY2xhc3MuYworKysgYi9jbGFzcy5jCkBAIC0yNiw2ICsy Niw3IEBACiAjaW5jbHVkZSAicnVieS9ydWJ5LmgiCiAjaW5jbHVkZSAicnVi eS9zdC5oIgogI2luY2x1ZGUgIm1ldGhvZC5oIgorI2luY2x1ZGUgImNvbnN0 YW50LmgiCiAjaW5jbHVkZSAidm1fY29yZS5oIgogI2luY2x1ZGUgPGN0eXBl Lmg+CiAKQEAgLTE0MCw2ICsxNDEsMTQgQEAgY2xvbmVfbWV0aG9kKElEIG1p ZCwgY29uc3QgcmJfbWV0aG9kX2VudHJ5X3QgKm1lLCBzdHJ1Y3QgY2xvbmVf bWV0aG9kX2RhdGEgKmRhdGEKICAgICByZXR1cm4gU1RfQ09OVElOVUU7CiB9 CiAKK3N0YXRpYyBpbnQKK2Nsb25lX2NvbnN0KElEIGtleSwgY29uc3QgcmJf Y29uc3RfZW50cnlfdCAqY2UsIHN0X3RhYmxlICp0YmwpCit7CisgICAgcmJf Y29uc3RfZW50cnlfdCAqbmNlID0gQUxMT0MocmJfY29uc3RfZW50cnlfdCk7 CisgICAgKm5jZSA9ICpjZTsKKyAgICBzdF9pbnNlcnQodGJsLCBrZXksIChz dF9kYXRhX3QpbmNlKTsKK30KKwogLyogOm5vZG9jOiAqLwogVkFMVUUKIHJi X21vZF9pbml0X2NvcHkoVkFMVUUgY2xvbmUsIFZBTFVFIG9yaWcpCkBAIC0x NjQsMTUgKzE3MywxNSBAQCByYl9tb2RfaW5pdF9jb3B5KFZBTFVFIGNsb25l LCBWQUxVRSBvcmlnKQogICAgIH0KICAgICBpZiAoUkNMQVNTX0NPTlNUX1RC TChvcmlnKSkgewogCWlmIChSQ0xBU1NfQ09OU1RfVEJMKGNsb25lKSkgewot CSAgICBzdF9mcmVlX3RhYmxlKFJDTEFTU19DT05TVF9UQkwoY2xvbmUpKTsK KwkgICAgcmJfZnJlZV9jb25zdF90YWJsZShSQ0xBU1NfQ09OU1RfVEJMKGNs b25lKSk7CiAJfQotCVJDTEFTU19DT05TVF9UQkwoY2xvbmUpID0gc3RfY29w eShSQ0xBU1NfQ09OU1RfVEJMKG9yaWcpKTsKKwlSQ0xBU1NfQ09OU1RfVEJM KGNsb25lKSA9IHN0X2luaXRfbnVtdGFibGUoKTsKKwlzdF9mb3JlYWNoKFJD TEFTU19DT05TVF9UQkwob3JpZyksIGNsb25lX2NvbnN0LCAoc3RfZGF0YV90 KVJDTEFTU19DT05TVF9UQkwoY2xvbmUpKTsKICAgICB9CiAgICAgaWYgKFJD TEFTU19NX1RCTChvcmlnKSkgewogCXN0cnVjdCBjbG9uZV9tZXRob2RfZGF0 YSBkYXRhOwogCiAJaWYgKFJDTEFTU19NX1RCTChjbG9uZSkpIHsKLQkgICAg ZXh0ZXJuIHZvaWQgcmJfZnJlZV9tX3RhYmxlKHN0X3RhYmxlICp0YmwpOwog CSAgICByYl9mcmVlX21fdGFibGUoUkNMQVNTX01fVEJMKGNsb25lKSk7CiAJ fQogCWRhdGEudGJsID0gUkNMQVNTX01fVEJMKGNsb25lKSA9IHN0X2luaXRf bnVtdGFibGUoKTsKQEAgLTIyNCw3ICsyMzMsOCBAQCByYl9zaW5nbGV0b25f Y2xhc3NfY2xvbmUoVkFMVUUgb2JqKQogCSAgICBSQ0xBU1NfSVZfVEJMKGNs b25lKSA9IHN0X2NvcHkoUkNMQVNTX0lWX1RCTChrbGFzcykpOwogCX0KIAlp ZiAoUkNMQVNTX0NPTlNUX1RCTChrbGFzcykpIHsKLQkgICAgUkNMQVNTX0NP TlNUX1RCTChjbG9uZSkgPSBzdF9jb3B5KFJDTEFTU19DT05TVF9UQkwoa2xh c3MpKTsKKwkgICAgUkNMQVNTX0NPTlNUX1RCTChjbG9uZSkgPSBzdF9pbml0 X251bXRhYmxlKCk7CisJICAgIHN0X2ZvcmVhY2goUkNMQVNTX0NPTlNUX1RC TChrbGFzcyksIGNsb25lX2NvbnN0LCAoc3RfZGF0YV90KVJDTEFTU19DT05T VF9UQkwoY2xvbmUpKTsKIAl9CiAJUkNMQVNTX01fVEJMKGNsb25lKSA9IHN0 X2luaXRfbnVtdGFibGUoKTsKIAlkYXRhLnRibCA9IFJDTEFTU19NX1RCTChj bG9uZSk7CmRpZmYgLS1naXQgYS9nYy5jIGIvZ2MuYwppbmRleCBlZTViMjU2 Li44NWJiNjk2IDEwMDY0NAotLS0gYS9nYy5jCisrKyBiL2djLmMKQEAgLTE5 LDYgKzE5LDcgQEAKICNpbmNsdWRlICJldmFsX2ludGVybi5oIgogI2luY2x1 ZGUgInZtX2NvcmUuaCIKICNpbmNsdWRlICJnYy5oIgorI2luY2x1ZGUgImNv bnN0YW50LmgiCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzZXRq bXAuaD4KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KQEAgLTE1MDMsNiArMTUw NCwzOCBAQCByYl9mcmVlX21fdGFibGUoc3RfdGFibGUgKnRibCkKICAgICBz dF9mcmVlX3RhYmxlKHRibCk7CiB9CiAKK3N0YXRpYyBpbnQKK21hcmtfY29u c3RfZW50cnlfaShJRCBrZXksIGNvbnN0IHJiX2NvbnN0X2VudHJ5X3QgKmNl LCBzdF9kYXRhX3QgZGF0YSkKK3sKKyAgICBzdHJ1Y3QgbWFya190YmxfYXJn ICphcmcgPSAodm9pZCopZGF0YTsKKyAgICBnY19tYXJrKGFyZy0+b2Jqc3Bh Y2UsIGNlLT52YWx1ZSwgYXJnLT5sZXYpOworICAgIHJldHVybiBTVF9DT05U SU5VRTsKK30KKworc3RhdGljIHZvaWQKK21hcmtfY29uc3RfdGJsKHJiX29i anNwYWNlX3QgKm9ianNwYWNlLCBzdF90YWJsZSAqdGJsLCBpbnQgbGV2KQor eworICAgIHN0cnVjdCBtYXJrX3RibF9hcmcgYXJnOworICAgIGlmICghdGJs KSByZXR1cm47CisgICAgYXJnLm9ianNwYWNlID0gb2Jqc3BhY2U7CisgICAg YXJnLmxldiA9IGxldjsKKyAgICBzdF9mb3JlYWNoKHRibCwgbWFya19jb25z dF9lbnRyeV9pLCAoc3RfZGF0YV90KSZhcmcpOworfQorCitzdGF0aWMgaW50 CitmcmVlX2NvbnN0X2VudHJ5X2koSUQga2V5LCByYl9jb25zdF9lbnRyeV90 ICpjZSwgc3RfZGF0YV90IGRhdGEpCit7CisgICAgeGZyZWUoY2UpOworICAg IHJldHVybiBTVF9DT05USU5VRTsKK30KKwordm9pZAorcmJfZnJlZV9jb25z dF90YWJsZShzdF90YWJsZSAqdGJsKQoreworICAgIHN0X2ZvcmVhY2godGJs LCBmcmVlX2NvbnN0X2VudHJ5X2ksIDApOworICAgIHN0X2ZyZWVfdGFibGUo dGJsKTsKK30KKwogdm9pZAogcmJfbWFya190Ymwoc3RfdGFibGUgKnRibCkK IHsKQEAgLTE3MTcsNyArMTc1MCw3IEBAIGdjX21hcmtfY2hpbGRyZW4ocmJf b2Jqc3BhY2VfdCAqb2Jqc3BhY2UsIFZBTFVFIHB0ciwgaW50IGxldikKICAg ICAgIGNhc2UgVF9NT0RVTEU6CiAJbWFya19tX3RibChvYmpzcGFjZSwgUkNM QVNTX01fVEJMKG9iaiksIGxldik7CiAJbWFya190Ymwob2Jqc3BhY2UsIFJD TEFTU19JVl9UQkwob2JqKSwgbGV2KTsKLQltYXJrX3RibChvYmpzcGFjZSwg UkNMQVNTX0NPTlNUX1RCTChvYmopLCBsZXYpOworCW1hcmtfY29uc3RfdGJs KG9ianNwYWNlLCBSQ0xBU1NfQ09OU1RfVEJMKG9iaiksIGxldik7CiAJcHRy ID0gUkNMQVNTX1NVUEVSKG9iaik7CiAJZ290byBhZ2FpbjsKIApAQCAtMjE2 Niw3ICsyMTk5LDcgQEAgb2JqX2ZyZWUocmJfb2Jqc3BhY2VfdCAqb2Jqc3Bh Y2UsIFZBTFVFIG9iaikKIAkgICAgc3RfZnJlZV90YWJsZShSQ0xBU1NfSVZf VEJMKG9iaikpOwogCX0KIAlpZiAoUkNMQVNTX0NPTlNUX1RCTChvYmopKSB7 Ci0JICAgIHN0X2ZyZWVfdGFibGUoUkNMQVNTX0NPTlNUX1RCTChvYmopKTsK KwkgICAgcmJfZnJlZV9jb25zdF90YWJsZShSQ0xBU1NfQ09OU1RfVEJMKG9i aikpOwogCX0KIAlpZiAoUkNMQVNTX0lWX0lOREVYX1RCTChvYmopKSB7CiAJ ICAgIHN0X2ZyZWVfdGFibGUoUkNMQVNTX0lWX0lOREVYX1RCTChvYmopKTsK ZGlmZiAtLWdpdCBhL21ldGhvZC5oIGIvbWV0aG9kLmgKaW5kZXggZTAzZjBk Mi4uM2NmZTQzOCAxMDA2NDQKLS0tIGEvbWV0aG9kLmgKKysrIGIvbWV0aG9k LmgKQEAgLTk5LDUgKzk5LDYgQEAgaW50IHJiX21ldGhvZF9lbnRyeV9hcml0 eShjb25zdCByYl9tZXRob2RfZW50cnlfdCAqbWUpOwogdm9pZCByYl9tYXJr X21ldGhvZF9lbnRyeShjb25zdCByYl9tZXRob2RfZW50cnlfdCAqbWUpOwog dm9pZCByYl9mcmVlX21ldGhvZF9lbnRyeShyYl9tZXRob2RfZW50cnlfdCAq bWUpOwogdm9pZCByYl9zd2VlcF9tZXRob2RfZW50cnkodm9pZCAqdm0pOwor dm9pZCByYl9mcmVlX21fdGFibGUoc3RfdGFibGUgKnRibCk7CiAKICNlbmRp ZiAvKiBNRVRIT0RfSCAqLwpkaWZmIC0tZ2l0IGEvb2JqZWN0LmMgYi9vYmpl Y3QuYwppbmRleCBiMWJiZWIyLi4yZGE0Yjk0IDEwMDY0NAotLS0gYS9vYmpl Y3QuYworKysgYi9vYmplY3QuYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1 ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgPGZs b2F0Lmg+CisjaW5jbHVkZSAiY29uc3RhbnQuaCIKIAogVkFMVUUgcmJfY0Jh c2ljT2JqZWN0OwogVkFMVUUgcmJfbUtlcm5lbDsKQEAgLTIyMiw3ICsyMjMs NyBAQCBpbml0X2NvcHkoVkFMVUUgZGVzdCwgVkFMVUUgb2JqKQogCSAgICBS Q0xBU1NfSVZfVEJMKGRlc3QpID0gMDsKIAl9CiAJaWYgKFJDTEFTU19DT05T VF9UQkwoZGVzdCkpIHsKLQkgICAgc3RfZnJlZV90YWJsZShSQ0xBU1NfQ09O U1RfVEJMKGRlc3QpKTsKKwkgICAgcmJfZnJlZV9jb25zdF90YWJsZShSQ0xB U1NfQ09OU1RfVEJMKGRlc3QpKTsKIAkgICAgUkNMQVNTX0NPTlNUX1RCTChk ZXN0KSA9IDA7CiAJfQogCWlmIChSQ0xBU1NfSVZfVEJMKG9iaikpIHsKZGlm ZiAtLWdpdCBhL3ZhcmlhYmxlLmMgYi92YXJpYWJsZS5jCmluZGV4IGFiNjJk ZWIuLmZiOTYwZjcgMTAwNjQ0Ci0tLSBhL3ZhcmlhYmxlLmMKKysrIGIvdmFy aWFibGUuYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgInJ1YnkvdXRp bC5oIgogI2luY2x1ZGUgInJ1YnkvZW5jb2RpbmcuaCIKICNpbmNsdWRlICJu b2RlLmgiCisjaW5jbHVkZSAiY29uc3RhbnQuaCIKIAogdm9pZCByYl92bV9j aGFuZ2Vfc3RhdGUodm9pZCk7CiB2b2lkIHJiX3ZtX2luY19jb25zdF9taXNz aW5nX2NvdW50KHZvaWQpOwpAQCAtNzEsOCArNzIsOSBAQCBmY19wYXRoKHN0 cnVjdCBmY19yZXN1bHQgKmZjLCBJRCBuYW1lKQogfQogCiBzdGF0aWMgaW50 Ci1mY19pKElEIGtleSwgVkFMVUUgdmFsdWUsIHN0cnVjdCBmY19yZXN1bHQg KnJlcykKK2ZjX2koSUQga2V5LCByYl9jb25zdF9lbnRyeV90ICpjZSwgc3Ry dWN0IGZjX3Jlc3VsdCAqcmVzKQogeworICAgIFZBTFVFIHZhbHVlID0gY2Ut PnZhbHVlOwogICAgIGlmICghcmJfaXNfY29uc3RfaWQoa2V5KSkgcmV0dXJu IFNUX0NPTlRJTlVFOwogCiAgICAgaWYgKHZhbHVlID09IHJlcy0+a2xhc3Mp IHsKQEAgLTE0MzgsMTUgKzE0NDAsMTYgQEAgcmJfYXV0b2xvYWQoVkFMVUUg bW9kLCBJRCBpZCwgY29uc3QgY2hhciAqZmlsZSkKIAlyYl9yYWlzZShyYl9l QXJnRXJyb3IsICJlbXB0eSBmaWxlIG5hbWUiKTsKICAgICB9CiAKLSAgICBp ZiAoKHRibCA9IFJDTEFTU19DT05TVF9UQkwobW9kKSkgJiYgc3RfbG9va3Vw KHRibCwgKHN0X2RhdGFfdClpZCwgJmF2KSAmJiAoVkFMVUUpYXYgIT0gUXVu ZGVmKQorICAgIGlmICgodGJsID0gUkNMQVNTX0NPTlNUX1RCTChtb2QpKSAm JiBzdF9sb29rdXAodGJsLCAoc3RfZGF0YV90KWlkLCAmYXYpICYmICgocmJf Y29uc3RfZW50cnlfdCopYXYpLT52YWx1ZSAhPSBRdW5kZWYpCiAJcmV0dXJu OwogCiAgICAgcmJfY29uc3Rfc2V0KG1vZCwgaWQsIFF1bmRlZik7CiAgICAg dGJsID0gUkNMQVNTX0lWX1RCTChtb2QpOwotICAgIGlmIChzdF9sb29rdXAo dGJsLCAoc3RfZGF0YV90KWF1dG9sb2FkLCAmYXYpKSB7CisgICAgaWYgKHRi bCAmJiBzdF9sb29rdXAodGJsLCAoc3RfZGF0YV90KWF1dG9sb2FkLCAmYXYp KSB7CiAJdGJsID0gY2hlY2tfYXV0b2xvYWRfdGFibGUoKFZBTFVFKWF2KTsK ICAgICB9CiAgICAgZWxzZSB7CisJaWYgKCF0YmwpIHRibCA9IFJDTEFTU19J Vl9UQkwobW9kKSA9IHN0X2luaXRfbnVtdGFibGUoKTsKIAlhdiA9IChzdF9k YXRhX3QpVHlwZWREYXRhX1dyYXBfU3RydWN0KDAsICZhdXRvbG9hZF9kYXRh X3R5cGUsIDApOwogCXN0X2FkZF9kaXJlY3QodGJsLCAoc3RfZGF0YV90KWF1 dG9sb2FkLCBhdik7CiAJREFUQV9QVFIoYXYpID0gdGJsID0gc3RfaW5pdF9u dW10YWJsZSgpOwpAQCAtMTQ2MSw4ICsxNDY0LDExIEBAIHN0YXRpYyBOT0RF KgogYXV0b2xvYWRfZGVsZXRlKFZBTFVFIG1vZCwgSUQgaWQpCiB7CiAgICAg c3RfZGF0YV90IHZhbCwgbG9hZCA9IDAsIG4gPSBpZDsKKyAgICByYl9jb25z dF9lbnRyeV90ICpjZTsKIAotICAgIHN0X2RlbGV0ZShSQ0xBU1NfQ09OU1Rf VEJMKG1vZCksICZuLCAwKTsKKyAgICBzdF9kZWxldGUoUkNMQVNTX0NPTlNU X1RCTChtb2QpLCAmbiwgJnZhbCk7CisgICAgY2UgPSAocmJfY29uc3RfZW50 cnlfdCopdmFsOworICAgIGlmIChjZSkgeGZyZWUoY2UpOwogICAgIGlmIChz dF9sb29rdXAoUkNMQVNTX0lWX1RCTChtb2QpLCAoc3RfZGF0YV90KWF1dG9s b2FkLCAmdmFsKSkgewogCXN0cnVjdCBzdF90YWJsZSAqdGJsID0gY2hlY2tf YXV0b2xvYWRfdGFibGUoKFZBTFVFKXZhbCk7CiAKQEAgLTE0NzEsNiArMTQ3 Nyw4IEBAIGF1dG9sb2FkX2RlbGV0ZShWQUxVRSBtb2QsIElEIGlkKQogCWlm ICh0YmwtPm51bV9lbnRyaWVzID09IDApIHsKIAkgICAgbiA9IGF1dG9sb2Fk OwogCSAgICBzdF9kZWxldGUoUkNMQVNTX0NPTlNUX1RCTChtb2QpLCAmbiwg JnZhbCk7CisJICAgIGNlID0gKHJiX2NvbnN0X2VudHJ5X3QqKXZhbDsKKwkg ICAgaWYgKGNlKSB4ZnJlZShjZSk7CiAJfQogICAgIH0KIApAQCAtMTUzMCw3 ICsxNTM4LDcgQEAgYXV0b2xvYWRfbm9kZV9pZChWQUxVRSBtb2QsIElEIGlk KQogICAgIHN0cnVjdCBzdF90YWJsZSAqdGJsID0gUkNMQVNTX0NPTlNUX1RC TChtb2QpOwogICAgIHN0X2RhdGFfdCB2YWw7CiAKLSAgICBpZiAoIXRibCB8 fCAhc3RfbG9va3VwKHRibCwgKHN0X2RhdGFfdClpZCwgJnZhbCkgfHwgKFZB TFVFKXZhbCAhPSBRdW5kZWYpIHsKKyAgICBpZiAoIXRibCB8fCAhc3RfbG9v a3VwKHRibCwgKHN0X2RhdGFfdClpZCwgJnZhbCkgfHwgKChyYl9jb25zdF9l bnRyeV90Kil2YWwpLT52YWx1ZSAhPSBRdW5kZWYpIHsKIAlyZXR1cm4gMDsK ICAgICB9CiAgICAgcmV0dXJuIDE7CkBAIC0xNTY4LDYgKzE1NzYsNyBAQCBy Yl9hdXRvbG9hZF9wKFZBTFVFIG1vZCwgSUQgaWQpCiBzdGF0aWMgVkFMVUUK IHJiX2NvbnN0X2dldF8wKFZBTFVFIGtsYXNzLCBJRCBpZCwgaW50IGV4Y2x1 ZGUsIGludCByZWN1cnNlKQogeworICAgIHN0X2RhdGFfdCB2OwogICAgIFZB TFVFIHZhbHVlLCB0bXA7CiAgICAgaW50IG1vZF9yZXRyeSA9IDA7CiAKQEAg LTE1NzUsNyArMTU4NCw4IEBAIHJiX2NvbnN0X2dldF8wKFZBTFVFIGtsYXNz LCBJRCBpZCwgaW50IGV4Y2x1ZGUsIGludCByZWN1cnNlKQogICByZXRyeToK ICAgICB3aGlsZSAoUlRFU1QodG1wKSkgewogCVZBTFVFIGFtID0gMDsKLQl3 aGlsZSAoUkNMQVNTX0NPTlNUX1RCTCh0bXApICYmIHN0X2xvb2t1cChSQ0xB U1NfQ09OU1RfVEJMKHRtcCksIChzdF9kYXRhX3QpaWQsICZ2YWx1ZSkpIHsK Kwl3aGlsZSAoUkNMQVNTX0NPTlNUX1RCTCh0bXApICYmIHN0X2xvb2t1cChS Q0xBU1NfQ09OU1RfVEJMKHRtcCksIChzdF9kYXRhX3QpaWQsICZ2KSkgewor CSAgICB2YWx1ZSA9ICgocmJfY29uc3RfZW50cnlfdCopdiktPnZhbHVlOwog CSAgICBpZiAodmFsdWUgPT0gUXVuZGVmKSB7CiAJCWlmIChhbSA9PSB0bXAp IGJyZWFrOwogCQlhbSA9IHRtcDsKQEAgLTE2NjEsMTYgKzE2NzEsMTcgQEAg cmJfY29uc3RfcmVtb3ZlKFZBTFVFIG1vZCwgSUQgaWQpCiAKICAgICByYl92 bV9jaGFuZ2Vfc3RhdGUoKTsKIAotICAgIHZhbCA9IChWQUxVRSl2OworICAg IHZhbCA9ICgocmJfY29uc3RfZW50cnlfdCopdiktPnZhbHVlOwogICAgIGlm ICh2YWwgPT0gUXVuZGVmKSB7CiAJYXV0b2xvYWRfZGVsZXRlKG1vZCwgaWQp OwogCXZhbCA9IFFuaWw7CiAgICAgfQorICAgIHhmcmVlKChyYl9jb25zdF9l bnRyeV90Kil2KTsKICAgICByZXR1cm4gdmFsOwogfQogCiBzdGF0aWMgaW50 Ci1zdl9pKElEIGtleSwgVkFMVUUgdmFsdWUsIHN0X3RhYmxlICp0YmwpCitz dl9pKElEIGtleSwgcmJfY29uc3RfZW50cnlfdCAqY2UsIHN0X3RhYmxlICp0 YmwpCiB7CiAgICAgaWYgKHJiX2lzX2NvbnN0X2lkKGtleSkpIHsKIAlpZiAo IXN0X2xvb2t1cCh0YmwsIChzdF9kYXRhX3Qpa2V5LCAwKSkgewpAQCAtMTc3 NCw3ICsxNzg1LDcgQEAgcmJfY29uc3RfZGVmaW5lZF8wKFZBTFVFIGtsYXNz LCBJRCBpZCwgaW50IGV4Y2x1ZGUsIGludCByZWN1cnNlKQogICByZXRyeToK ICAgICB3aGlsZSAodG1wKSB7CiAJaWYgKFJDTEFTU19DT05TVF9UQkwodG1w KSAmJiBzdF9sb29rdXAoUkNMQVNTX0NPTlNUX1RCTCh0bXApLCAoc3RfZGF0 YV90KWlkLCAmdmFsdWUpKSB7Ci0JICAgIGlmICgoVkFMVUUpdmFsdWUgPT0g UXVuZGVmICYmICFhdXRvbG9hZF9ub2RlKChWQUxVRSlrbGFzcywgaWQsIDAp KQorCSAgICBpZiAoKChyYl9jb25zdF9lbnRyeV90Kil2YWx1ZSktPnZhbHVl ID09IFF1bmRlZiAmJiAhYXV0b2xvYWRfbm9kZSgoVkFMVUUpa2xhc3MsIGlk LCAwKSkKIAkJcmV0dXJuIChpbnQpUWZhbHNlOwogCSAgICByZXR1cm4gKGlu dClRdHJ1ZTsKIAl9CkBAIC0xODI1LDYgKzE4MzYsOCBAQCBjaGVja19iZWZv cmVfbW9kX3NldChWQUxVRSBrbGFzcywgSUQgaWQsIFZBTFVFIHZhbCwgY29u c3QgY2hhciAqZGVzdCkKIHZvaWQKIHJiX2NvbnN0X3NldChWQUxVRSBrbGFz cywgSUQgaWQsIFZBTFVFIHZhbCkKIHsKKyAgICByYl9jb25zdF9lbnRyeV90 ICpjZTsKKwogICAgIGlmIChOSUxfUChrbGFzcykpIHsKIAlyYl9yYWlzZShy Yl9lVHlwZUVycm9yLCAibm8gY2xhc3MvbW9kdWxlIHRvIGRlZmluZSBjb25z dGFudCAlcyIsCiAJCSByYl9pZDJuYW1lKGlkKSk7CkBAIC0xODM4LDcgKzE4 NTEsNyBAQCByYl9jb25zdF9zZXQoVkFMVUUga2xhc3MsIElEIGlkLCBWQUxV RSB2YWwpCiAJc3RfZGF0YV90IHZhbHVlOwogCiAJaWYgKHN0X2xvb2t1cChS Q0xBU1NfQ09OU1RfVEJMKGtsYXNzKSwgKHN0X2RhdGFfdClpZCwgJnZhbHVl KSkgewotCSAgICBpZiAoKFZBTFVFKXZhbHVlID09IFF1bmRlZikKKwkgICAg aWYgKCgocmJfY29uc3RfZW50cnlfdCopdmFsdWUpLT52YWx1ZSA9PSBRdW5k ZWYpCiAJCWF1dG9sb2FkX2RlbGV0ZShrbGFzcywgaWQpOwogCSAgICBlbHNl CiAJCXJiX3dhcm4oImFscmVhZHkgaW5pdGlhbGl6ZWQgY29uc3RhbnQgJXMi LCByYl9pZDJuYW1lKGlkKSk7CkBAIC0xODQ2LDcgKzE4NTksMTIgQEAgcmJf Y29uc3Rfc2V0KFZBTFVFIGtsYXNzLCBJRCBpZCwgVkFMVUUgdmFsKQogICAg IH0KIAogICAgIHJiX3ZtX2NoYW5nZV9zdGF0ZSgpOwotICAgIHN0X2luc2Vy dChSQ0xBU1NfQ09OU1RfVEJMKGtsYXNzKSwgKHN0X2RhdGFfdClpZCwgKHN0 X2RhdGFfdCl2YWwpOworCisgICAgY2UgPSBBTExPQyhyYl9jb25zdF9lbnRy eV90KTsKKyAgICBjZS0+ZmxhZyA9IENPTlNUX1BVQkxJQzsKKyAgICBjZS0+ dmFsdWUgPSB2YWw7CisKKyAgICBzdF9pbnNlcnQoUkNMQVNTX0NPTlNUX1RC TChrbGFzcyksIChzdF9kYXRhX3QpaWQsIChzdF9kYXRhX3QpY2UpOwogfQog CiB2b2lkCmRpZmYgLS1naXQgYS92bV9pbnNuaGVscGVyLmMgYi92bV9pbnNu aGVscGVyLmMKaW5kZXggZTZlOGRiMi4uMzU1NTM1MSAxMDA2NDQKLS0tIGEv dm1faW5zbmhlbHBlci5jCisrKyBiL3ZtX2luc25oZWxwZXIuYwpAQCAtMTEs NiArMTEsNyBAQAogLyogZmluaXNoIGlzZXEgYXJyYXkgKi8KICNpbmNsdWRl ICJpbnNucy5pbmMiCiAjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgImNv bnN0YW50LmgiCiAKIC8qIGNvbnRyb2wgc3RhY2sgZnJhbWUgKi8KIApAQCAt MTE2NiwxMCArMTE2NywxMiBAQCB2bV9nZXRfZXZfY29uc3QocmJfdGhyZWFk X3QgKnRoLCBjb25zdCByYl9pc2VxX3QgKmlzZXEsCiAJICAgIGNyZWYgPSBj cmVmLT5uZF9uZXh0OwogCiAJICAgIGlmICghTklMX1Aoa2xhc3MpKSB7CisJ CXN0X2RhdGFfdCB2OwogCQlWQUxVRSBhbSA9IDA7CiAJICAgICAgc2VhcmNo X2NvbnRpbnVlOgogCQlpZiAoUkNMQVNTX0NPTlNUX1RCTChrbGFzcykgJiYK LQkJICAgIHN0X2xvb2t1cChSQ0xBU1NfQ09OU1RfVEJMKGtsYXNzKSwgaWQs ICZ2YWwpKSB7CisJCSAgICBzdF9sb29rdXAoUkNMQVNTX0NPTlNUX1RCTChr bGFzcyksIGlkLCAmdikpIHsKKwkJICAgIHZhbCA9ICgocmJfY29uc3RfZW50 cnlfdCopdiktPnZhbHVlOwogCQkgICAgaWYgKHZhbCA9PSBRdW5kZWYpIHsK IAkJCWlmIChhbSA9PSBrbGFzcykgYnJlYWs7CiAJCQlhbSA9IGtsYXNzOwot LSAKMS43LjIuMQoK --mimepart_4cab41f657fe_ef3cfecfde163e5 Content-Type: application/octet-stream; name=0003-add-Module-public_constant-and-private_constant.patch Content-Transfer-Encoding: Base64 Content-Disposition: attachment; filename=0003-add-Module-public_constant-and-private_constant.patch RnJvbSAyNjcxOWY5ZGViNTExMjU1NmQ2YTY3Y2E4ODU1ODc0MGQ1ODQ1NzNm IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBZdXN1a2UgRW5kb2gg PG1hbWVAdHNnLm5lLmpwPgpEYXRlOiBGcmksIDE3IFNlcCAyMDEwIDIyOjU0 OjMwICswOTAwClN1YmplY3Q6IFtQQVRDSCAzLzNdIGFkZCBNb2R1bGUjcHVi bGljX2NvbnN0YW50IGFuZCBwcml2YXRlX2NvbnN0YW50CgotLS0KIG9iamVj dC5jICAgfCAgICAyICsrCiB2YXJpYWJsZS5jIHwgICA1NyArKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Ky0KIDIgZmlsZXMgY2hhbmdlZCwgNTggaW5zZXJ0aW9ucygrKSwgMSBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9vYmplY3QuYyBiL29iamVjdC5jCmlu ZGV4IDJkYTRiOTQuLmFkYWVkZGMgMTAwNjQ0Ci0tLSBhL29iamVjdC5jCisr KyBiL29iamVjdC5jCkBAIC0yNjU2LDYgKzI2NTYsOCBAQCBJbml0X09iamVj dCh2b2lkKQogICAgIHJiX2RlZmluZV9tZXRob2QocmJfY01vZHVsZSwgImNs YXNzX3ZhcmlhYmxlX2dldCIsIHJiX21vZF9jdmFyX2dldCwgMSk7CiAgICAg cmJfZGVmaW5lX21ldGhvZChyYl9jTW9kdWxlLCAiY2xhc3NfdmFyaWFibGVf c2V0IiwgcmJfbW9kX2N2YXJfc2V0LCAyKTsKICAgICByYl9kZWZpbmVfbWV0 aG9kKHJiX2NNb2R1bGUsICJjbGFzc192YXJpYWJsZV9kZWZpbmVkPyIsIHJi X21vZF9jdmFyX2RlZmluZWQsIDEpOworICAgIHJiX2RlZmluZV9tZXRob2Qo cmJfY01vZHVsZSwgInB1YmxpY19jb25zdGFudCIsIHJiX21vZF9wdWJsaWNf Y29uc3RhbnQsIC0xKTsKKyAgICByYl9kZWZpbmVfbWV0aG9kKHJiX2NNb2R1 bGUsICJwcml2YXRlX2NvbnN0YW50IiwgcmJfbW9kX3ByaXZhdGVfY29uc3Rh bnQsIC0xKTsKIAogICAgIHJiX2RlZmluZV9tZXRob2QocmJfY0NsYXNzLCAi YWxsb2NhdGUiLCByYl9vYmpfYWxsb2MsIDApOwogICAgIHJiX2RlZmluZV9t ZXRob2QocmJfY0NsYXNzLCAibmV3IiwgcmJfY2xhc3NfbmV3X2luc3RhbmNl LCAtMSk7CmRpZmYgLS1naXQgYS92YXJpYWJsZS5jIGIvdmFyaWFibGUuYwpp bmRleCBmYjk2MGY3Li41MWM5Y2Q1IDEwMDY0NAotLS0gYS92YXJpYWJsZS5j CisrKyBiL3ZhcmlhYmxlLmMKQEAgLTE1ODUsNyArMTU4NSw4IEBAIHJiX2Nv bnN0X2dldF8wKFZBTFVFIGtsYXNzLCBJRCBpZCwgaW50IGV4Y2x1ZGUsIGlu dCByZWN1cnNlKQogICAgIHdoaWxlIChSVEVTVCh0bXApKSB7CiAJVkFMVUUg YW0gPSAwOwogCXdoaWxlIChSQ0xBU1NfQ09OU1RfVEJMKHRtcCkgJiYgc3Rf bG9va3VwKFJDTEFTU19DT05TVF9UQkwodG1wKSwgKHN0X2RhdGFfdClpZCwg JnYpKSB7Ci0JICAgIHZhbHVlID0gKChyYl9jb25zdF9lbnRyeV90Kil2KS0+ dmFsdWU7CisJICAgIHJiX2NvbnN0X2VudHJ5X3QgKmNlID0gKHJiX2NvbnN0 X2VudHJ5X3QgKil2OworCSAgICB2YWx1ZSA9IGNlLT52YWx1ZTsKIAkgICAg aWYgKHZhbHVlID09IFF1bmRlZikgewogCQlpZiAoYW0gPT0gdG1wKSBicmVh azsKIAkJYW0gPSB0bXA7CkBAIC0xNTk2LDYgKzE1OTcsOSBAQCByYl9jb25z dF9nZXRfMChWQUxVRSBrbGFzcywgSUQgaWQsIGludCBleGNsdWRlLCBpbnQg cmVjdXJzZSkKIAkJcmJfd2FybigidG9wbGV2ZWwgY29uc3RhbnQgJXMgcmVm ZXJlbmNlZCBieSAlczo6JXMiLAogCQkJcmJfaWQybmFtZShpZCksIHJiX2Ns YXNzMm5hbWUoa2xhc3MpLCByYl9pZDJuYW1lKGlkKSk7CiAJICAgIH0KKwkg ICAgaWYgKGNlLT5mbGFnID09IENPTlNUX1BSSVZBVEUpIHsKKwkJcmJfbmFt ZV9lcnJvcihpZCwgInByaXZhdGUgY29uc3RhbnQgJXM6OiVzIHJlZmVyZW5j ZWQiLCByYl9jbGFzczJuYW1lKGtsYXNzKSwgcmJfaWQybmFtZShpZCkpOwor CSAgICB9CiAJICAgIHJldHVybiB2YWx1ZTsKIAl9CiAJaWYgKCFyZWN1cnNl ICYmIGtsYXNzICE9IHJiX2NPYmplY3QpIGJyZWFrOwpAQCAtMTg4Nyw2ICsx ODkxLDU3IEBAIHJiX2RlZmluZV9nbG9iYWxfY29uc3QoY29uc3QgY2hhciAq bmFtZSwgVkFMVUUgdmFsKQogICAgIHJiX2RlZmluZV9jb25zdChyYl9jT2Jq ZWN0LCBuYW1lLCB2YWwpOwogfQogCitzdGF0aWMgdm9pZAorc2V0X2NvbnN0 X3Zpc2liaWxpdHkoVkFMVUUgbW9kLCBpbnQgYXJnYywgVkFMVUUgKmFyZ3Ys IHJiX2NvbnN0X2ZsYWdfdCBmbGFnKQoreworICAgIGludCBpOworICAgIHN0 X2RhdGFfdCB2OworICAgIElEIGlkOworCisgICAgaWYgKHJiX3NhZmVfbGV2 ZWwoKSA+PSA0ICYmICFPQkpfVU5UUlVTVEVEKG1vZCkpIHsKKwlyYl9yYWlz ZShyYl9lU2VjdXJpdHlFcnJvciwKKwkJICJJbnNlY3VyZTogY2FuJ3QgY2hh bmdlIG1ldGhvZCB2aXNpYmlsaXR5Iik7CisgICAgfQorCisgICAgZm9yIChp ID0gMDsgaSA8IGFyZ2M7IGkrKykgeworCWlkID0gcmJfdG9faWQoYXJndltp XSk7CisJaWYgKFJDTEFTU19DT05TVF9UQkwobW9kKSAmJiBzdF9sb29rdXAo UkNMQVNTX0NPTlNUX1RCTChtb2QpLCAoc3RfZGF0YV90KWlkLCAmdikpIHsK KwkgICAgKChyYl9jb25zdF9lbnRyeV90Kil2KS0+ZmxhZyA9IGZsYWc7CisJ ICAgIHJldHVybjsKKwl9CisJcmJfbmFtZV9lcnJvcihpZCwgImNvbnN0YW50 ICVzOjolcyBub3QgZGVmaW5lZCIsIHJiX2NsYXNzMm5hbWUobW9kKSwgcmJf aWQybmFtZShpZCkpOworICAgIH0KKyAgICByYl9jbGVhcl9jYWNoZV9ieV9j bGFzcyhtb2QpOworfQorCisvKgorICogIGNhbGwtc2VxOgorICogICAgIG1v ZC5wcml2YXRlX2NvbnN0YW50KHN5bWJvbCwgLi4uKSAgICA9PiBtb2QKKyAq CisgKiAgTWFrZXMgYSBsaXN0IG9mIGV4aXN0aW5nIGNvbnN0YW50cyBwcml2 YXRlLgorICovCisKK1ZBTFVFCityYl9tb2RfcHJpdmF0ZV9jb25zdGFudChp bnQgYXJnYywgVkFMVUUgKmFyZ3YsIFZBTFVFIG9iaikKK3sKKyAgICBzZXRf Y29uc3RfdmlzaWJpbGl0eShvYmosIGFyZ2MsIGFyZ3YsIENPTlNUX1BSSVZB VEUpOworICAgIHJldHVybiBvYmo7Cit9CisKKy8qCisgKiAgY2FsbC1zZXE6 CisgKiAgICAgbW9kLnB1YmxpY19jb25zdGFudChzeW1ib2wsIC4uLikgICAg PT4gbW9kCisgKgorICogIE1ha2VzIGEgbGlzdCBvZiBleGlzdGluZyBjb25z dGFudHMgcHVibGljLgorICovCisKK1ZBTFVFCityYl9tb2RfcHVibGljX2Nv bnN0YW50KGludCBhcmdjLCBWQUxVRSAqYXJndiwgVkFMVUUgb2JqKQorewor ICAgIHNldF9jb25zdF92aXNpYmlsaXR5KG9iaiwgYXJnYywgYXJndiwgQ09O U1RfUFVCTElDKTsKKyAgICByZXR1cm4gb2JqOworfQorCiBzdGF0aWMgVkFM VUUKIG9yaWdpbmFsX21vZHVsZShWQUxVRSBjKQogewotLSAKMS43LjIuMQoK --mimepart_4cab41f657fe_ef3cfecfde163e5--