From: Yusuke ENDOH Date: 2011-01-29T12:07:28+09:00 Subject: [ruby-core:34967] Re: [Ruby 1.9-Feature#3908][Assigned] private constant --0016367fabe766d792049af37bfb Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Hi, matz May I introduce these methods in relation to private constants? - Module#public_constants, as alias to Module#constants (corresponding to Ojbect#public_methods) - Module#private_constants, which returns an array that contains only private constant names. (corresponding to Ojbect#private_methods) - Module#public_const_get, which return the constant value or raise a NameError if the constant is private (corresponding to Object#public_send) - Module#public_const_defined?, which tells whether the public constant is defined or not (corresponding to Module#public_method_defined?) - Module#private_const_defined?, which tells whether the private constant is defined or not (corresponding to Module#private_method_defined?) A patch and tests are attached. Thank you. Note: I fixed other bugs which RPRR and nagachika reported (r30713, r30714, r30715, r30716 and r30718). Sorry for late action. 2010/12/22 Yusuke Endoh : > Issue #3908 has been updated by Yusuke Endoh. > > Status changed from Closed to Assigned > > Hi, NaHi > >> Just as a notification since I see this ticket closed today. > > Kazu committed a change of NEWS with ML ref, which closed this > ticket. =A0I think that he did not intend to close this ticket. > That is, it is just accident. =A0I'm reopening this ticket. > > >> Yusuke, patches in the mail I'm replying are not applied > > Yes, just because of my laziness. =A0I will work on. > > >> and we still need discuss about followings, right? > > I think that what we needed is not discussion, but matz's final > approval. > The reason why this ticket stopped was because matz cancelled > his approval and opposed this feature at [ruby-dev:42469]. > And, matz has finally re-approved it at [ruby-dev:42587]. > So we can now move on. > > >> - Module#constants includes a private constant? > > It should not. =A0I will. > > >> - Module#const_get raises NameError for a private constant? > > It should not. =A0I will. > > >> - add Module#public_constants and Module#private_constants? > > Plus, Module#public_const_get. =A0But these may be need matz's > additional approval. > > > Matz, can I add these methods: > > =A0- Module#public_constants, which returns an array that contains > =A0 =A0only public constant names. > > =A0- Module#private_constants, which returns an array that contatins > =A0 =A0only private constant names. > > =A0- Module#public_const_get, which returns a value assigned to the > =A0 =A0constant if it is public, or raise a NameError if it is private. > > ? > > >> - Module#const_set changes the constant visibility to public? Setting > visibility via const_set? > > It is just a bug. =A0I will. > > -- > Yusuke Endoh > ---------------------------------------- > http://redmine.ruby-lang.org/issues/show/3908 > > ---------------------------------------- > http://redmine.ruby-lang.org --=20 Yusuke Endoh --0016367fabe766d792049af37bfb Content-Type: application/octet-stream; name="private-constant-omake.patch" Content-Disposition: attachment; filename="private-constant-omake.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gjhxxnwc0 ZGlmZiAtLWdpdCBhL2luY2x1ZGUvcnVieS9pbnRlcm4uaCBiL2luY2x1ZGUvcnVieS9pbnRlcm4u aAppbmRleCAxZTNhMDFiLi41MDg4YjEyIDEwMDY0NAotLS0gYS9pbmNsdWRlL3J1YnkvaW50ZXJu LmgKKysrIGIvaW5jbHVkZS9ydWJ5L2ludGVybi5oCkBAIC04NTIsNiArODUyLDcgQEAgdm9pZCAq cmJfbW9kX2NvbnN0X2F0KFZBTFVFLCB2b2lkKik7CiB2b2lkICpyYl9tb2RfY29uc3Rfb2YoVkFM VUUsIHZvaWQqKTsKIFZBTFVFIHJiX2NvbnN0X2xpc3Qodm9pZCopOwogVkFMVUUgcmJfbW9kX2Nv bnN0YW50cyhpbnQsIFZBTFVFICosIFZBTFVFKTsKK1ZBTFVFIHJiX21vZF9wcml2YXRlX2NvbnN0 YW50cyhpbnQsIFZBTFVFICosIFZBTFVFKTsKIFZBTFVFIHJiX21vZF9yZW1vdmVfY29uc3QoVkFM VUUsIFZBTFVFKTsKIGludCByYl9jb25zdF9kZWZpbmVkKFZBTFVFLCBJRCk7CiBpbnQgcmJfY29u c3RfZGVmaW5lZF9hdChWQUxVRSwgSUQpOwpkaWZmIC0tZ2l0IGEvb2JqZWN0LmMgYi9vYmplY3Qu YwppbmRleCBiMjVjMGFmLi42ODU2ZTE0IDEwMDY0NAotLS0gYS9vYmplY3QuYworKysgYi9vYmpl Y3QuYwpAQCAtMTY4NiwyMCArMTY4Niw4IEBAIHJiX21vZF9hdHRyX2FjY2Vzc29yKGludCBhcmdj LCBWQUxVRSAqYXJndiwgVkFMVUUga2xhc3MpCiAgICAgcmV0dXJuIFFuaWw7CiB9CiAKLS8qCi0g KiAgY2FsbC1zZXE6Ci0gKiAgICAgbW9kLmNvbnN0X2dldChzeW0sIGluaGVyaXQ9dHJ1ZSkgICAg LT4gb2JqCi0gKgotICogIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBuYW1lZCBjb25zdGFudCBp biA8aT5tb2Q8L2k+LgotICoKLSAqICAgICBNYXRoLmNvbnN0X2dldCg6UEkpICAgIz0+IDMuMTQx NTkyNjUzNTg5NzkKLSAqCi0gKiAgSWYgdGhlIGNvbnN0YW50IGlzIG5vdCBkZWZpbmVkIG9yIGlz IGRlZmluZWQgYnkgdGhlIGFuY2VzdG9ycyBhbmQKLSAqICAraW5oZXJpdCsgaXMgZmFsc2UsICtO YW1lRXJyb3IrIHdpbGwgYmUgcmFpc2VkLgotICovCi0KIHN0YXRpYyBWQUxVRQotcmJfbW9kX2Nv bnN0X2dldChpbnQgYXJnYywgVkFMVUUgKmFyZ3YsIFZBTFVFIG1vZCkKK21vZF9jb25zdF9nZXQo aW50IGFyZ2MsIFZBTFVFICphcmd2LCBWQUxVRSBtb2QsIFZBTFVFIHZpc2liaWxpdHkpCiB7CiAg ICAgVkFMVUUgbmFtZSwgcmVjdXI7CiAgICAgSUQgaWQ7CkBAIC0xNzE1LDExICsxNzAzLDUyIEBA IHJiX21vZF9jb25zdF9nZXQoaW50IGFyZ2MsIFZBTFVFICphcmd2LCBWQUxVRSBtb2QpCiAgICAg aWYgKCFyYl9pc19jb25zdF9pZChpZCkpIHsKIAlyYl9uYW1lX2Vycm9yKGlkLCAid3JvbmcgY29u c3RhbnQgbmFtZSAlcyIsIHJiX2lkMm5hbWUoaWQpKTsKICAgICB9CisgICAgaWYgKHZpc2liaWxp dHkpIHsKKwlyZXR1cm4gUlRFU1QocmVjdXIpID8gcmJfcHVibGljX2NvbnN0X2dldChtb2QsIGlk KSA6IHJiX3B1YmxpY19jb25zdF9nZXRfYXQobW9kLCBpZCk7CisgICAgfQogICAgIHJldHVybiBS VEVTVChyZWN1cikgPyByYl9jb25zdF9nZXQobW9kLCBpZCkgOiByYl9jb25zdF9nZXRfYXQobW9k LCBpZCk7CiB9CiAKIC8qCiAgKiAgY2FsbC1zZXE6CisgKiAgICAgbW9kLmNvbnN0X2dldChzeW0s IGluaGVyaXQ9dHJ1ZSkgICAgLT4gb2JqCisgKgorICogIFJldHVybnMgdGhlIHZhbHVlIG9mIHRo ZSBuYW1lZCBjb25zdGFudCBpbiA8aT5tb2Q8L2k+LgorICoKKyAqICAgICBNYXRoLmNvbnN0X2dl dCg6UEkpICAgIz0+IDMuMTQxNTkyNjUzNTg5NzkKKyAqCisgKiAgSWYgdGhlIGNvbnN0YW50IGlz IG5vdCBkZWZpbmVkIG9yIGlzIGRlZmluZWQgYnkgdGhlIGFuY2VzdG9ycyBhbmQKKyAqICAraW5o ZXJpdCsgaXMgZmFsc2UsICtOYW1lRXJyb3IrIHdpbGwgYmUgcmFpc2VkLgorICogIFRoaXMgbWV0 aG9kIHJldHVybnMgdGhlIHZhbHVlIGV2ZW4gaWYgdGhlIGNvbnN0YW50IGlzIHByaXZhdGUuCisg Ki8KKworc3RhdGljIFZBTFVFCityYl9tb2RfY29uc3RfZ2V0KGludCBhcmdjLCBWQUxVRSAqYXJn diwgVkFMVUUgbW9kKQoreworICAgIG1vZF9jb25zdF9nZXQoYXJnYywgYXJndiwgbW9kLCBGQUxT RSk7Cit9CisKKy8qCisgKiAgY2FsbC1zZXE6CisgKiAgICAgbW9kLnB1YmxpY19jb25zdF9nZXQo c3ltLCBpbmhlcml0PXRydWUpICAgIC0+IG9iagorICoKKyAqICBSZXR1cm5zIHRoZSB2YWx1ZSBv ZiB0aGUgbmFtZWQgY29uc3RhbnQgaW4gPGk+bW9kPC9pPi4KKyAqCisgKiAgICAgTWF0aC5wdWJs aWNfY29uc3RfZ2V0KDpQSSkgICAjPT4gMy4xNDE1OTI2NTM1ODk3OQorICoKKyAqICBJZiB0aGUg Y29uc3RhbnQgaXMgbm90IGRlZmluZWQgb3IgaXMgZGVmaW5lZCBieSB0aGUgYW5jZXN0b3JzIGFu ZAorICogICtpbmhlcml0KyBpcyBmYWxzZSwgK05hbWVFcnJvcisgd2lsbCBiZSByYWlzZWQuCisg KiAgK05hbWVFcnJvcisgd2lsbCBhbHNvIGJlIHJhaXNlZCBpZiB0aGUgY29uc3RhbnQgaXMgcHJp dmF0ZS4KKyAqLworCitzdGF0aWMgVkFMVUUKK3JiX21vZF9wdWJsaWNfY29uc3RfZ2V0KGludCBh cmdjLCBWQUxVRSAqYXJndiwgVkFMVUUgbW9kKQoreworICAgIG1vZF9jb25zdF9nZXQoYXJnYywg YXJndiwgbW9kLCBUUlVFKTsKK30KKworLyoKKyAqICBjYWxsLXNlcToKICAqICAgICBtb2QuY29u c3Rfc2V0KHN5bSwgb2JqKSAgICAtPiBvYmoKICAqCiAgKiAgU2V0cyB0aGUgbmFtZWQgY29uc3Rh bnQgdG8gdGhlIGdpdmVuIG9iamVjdCwgcmV0dXJuaW5nIHRoYXQgb2JqZWN0LgpAQCAtMTc0Miwy MCArMTc3MSw4IEBAIHJiX21vZF9jb25zdF9zZXQoVkFMVUUgbW9kLCBWQUxVRSBuYW1lLCBWQUxV RSB2YWx1ZSkKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLS8qCi0gKiAgY2FsbC1zZXE6Ci0gKiAg ICAgbW9kLmNvbnN0X2RlZmluZWQ/KHN5bSwgaW5oZXJpdD10cnVlKSAgIC0+IHRydWUgb3IgZmFs c2UKLSAqCi0gKiAgUmV0dXJucyA8Y29kZT50cnVlPC9jb2RlPiBpZiBhIGNvbnN0YW50IHdpdGgg dGhlIGdpdmVuIG5hbWUgaXMKLSAqICBkZWZpbmVkIGJ5IDxpPm1vZDwvaT4sIG9yIGl0cyBhbmNl c3RvcnMgaWYgK2luaGVyaXQrIGlzIG5vdCBmYWxzZS4KLSAqCi0gKiAgICAgTWF0aC5jb25zdF9k ZWZpbmVkPyAiUEkiICAgIz0+IHRydWUKLSAqICAgICBJTy5jb25zdF9kZWZpbmVkPyAiU1lOQyIg ICAjPT4gdHJ1ZQotICogICAgIElPLmNvbnN0X2RlZmluZWQ/ICJTWU5DIiwgZmFsc2UgICAjPT4g ZmFsc2UKLSAqLwotCiBzdGF0aWMgVkFMVUUKLXJiX21vZF9jb25zdF9kZWZpbmVkKGludCBhcmdj LCBWQUxVRSAqYXJndiwgVkFMVUUgbW9kKQorbW9kX2NvbnN0X2RlZmluZWQoaW50IGFyZ2MsIFZB TFVFICphcmd2LCBWQUxVRSBtb2QsIGludCB2aXNpYmlsaXR5KQogewogICAgIFZBTFVFIG5hbWUs IHJlY3VyOwogICAgIElEIGlkOwpAQCAtMTc3MSw3ICsxNzg4LDc1IEBAIHJiX21vZF9jb25zdF9k ZWZpbmVkKGludCBhcmdjLCBWQUxVRSAqYXJndiwgVkFMVUUgbW9kKQogICAgIGlmICghcmJfaXNf Y29uc3RfaWQoaWQpKSB7CiAJcmJfbmFtZV9lcnJvcihpZCwgIndyb25nIGNvbnN0YW50IG5hbWUg JXMiLCByYl9pZDJuYW1lKGlkKSk7CiAgICAgfQotICAgIHJldHVybiBSVEVTVChyZWN1cikgPyBy Yl9jb25zdF9kZWZpbmVkKG1vZCwgaWQpIDogcmJfY29uc3RfZGVmaW5lZF9hdChtb2QsIGlkKTsK KyAgICBzd2l0Y2ggKHZpc2liaWxpdHkpIHsKKyAgICAgIGNhc2UgMDoKKwlyZXR1cm4gUlRFU1Qo cmVjdXIpID8gcmJfY29uc3RfZGVmaW5lZChtb2QsIGlkKSA6IHJiX2NvbnN0X2RlZmluZWRfYXQo bW9kLCBpZCk7CisgICAgICBjYXNlIDE6CisJcmV0dXJuIFJURVNUKHJlY3VyKSA/IHJiX3B1Ymxp Y19jb25zdF9kZWZpbmVkKG1vZCwgaWQpIDogcmJfcHVibGljX2NvbnN0X2RlZmluZWRfYXQobW9k LCBpZCk7CisgICAgfQorICAgIGlmIChSVEVTVChyZWN1cikpIHsKKwlyZXR1cm4gUlRFU1QocmJf Y29uc3RfZGVmaW5lZChtb2QsIGlkKSkgJiYgIVJURVNUKHJiX3B1YmxpY19jb25zdF9kZWZpbmVk KG1vZCwgaWQpKSA/IFF0cnVlIDogUWZhbHNlOworICAgIH0KKyAgICByZXR1cm4gUlRFU1QocmJf Y29uc3RfZGVmaW5lZF9hdChtb2QsIGlkKSkgJiYgIVJURVNUKHJiX3B1YmxpY19jb25zdF9kZWZp bmVkX2F0KG1vZCwgaWQpKSA/IFF0cnVlIDogUWZhbHNlOworfQorCisvKgorICogIGNhbGwtc2Vx OgorICogICAgIG1vZC5jb25zdF9kZWZpbmVkPyhzeW0sIGluaGVyaXQ9dHJ1ZSkgICAtPiB0cnVl IG9yIGZhbHNlCisgKgorICogIFJldHVybnMgPGNvZGU+dHJ1ZTwvY29kZT4gaWYgYSBjb25zdGFu dCB3aXRoIHRoZSBnaXZlbiBuYW1lIGlzCisgKiAgZGVmaW5lZCBieSA8aT5tb2Q8L2k+LCBvciBp dHMgYW5jZXN0b3JzIGlmICtpbmhlcml0KyBpcyBub3QgZmFsc2UsCisgKiAgcmVnYXJkbGVzcyBv ZiB3aGV0aGVyIHRoZSBjb25zdGFudCBpcyBwdWJsaWMgb3IgcHJpdmF0ZS4KKyAqCisgKiAgICAg TWF0aC5jb25zdF9kZWZpbmVkPyAiUEkiICAgIz0+IHRydWUKKyAqICAgICBJTy5jb25zdF9kZWZp bmVkPyAiU1lOQyIgICAjPT4gdHJ1ZQorICogICAgIElPLmNvbnN0X2RlZmluZWQ/ICJTWU5DIiwg ZmFsc2UgICAjPT4gZmFsc2UKKyAqLworCitzdGF0aWMgVkFMVUUKK3JiX21vZF9jb25zdF9kZWZp bmVkKGludCBhcmdjLCBWQUxVRSAqYXJndiwgVkFMVUUgbW9kKQoreworICAgIG1vZF9jb25zdF9k ZWZpbmVkKGFyZ2MsIGFyZ3YsIG1vZCwgMCk7Cit9CisKKy8qCisgKiAgY2FsbC1zZXE6CisgKiAg ICAgbW9kLnB1YmxpY19jb25zdF9kZWZpbmVkPyhzeW0sIGluaGVyaXQ9dHJ1ZSkgICAtPiB0cnVl IG9yIGZhbHNlCisgKgorICogIFJldHVybnMgPGNvZGU+dHJ1ZTwvY29kZT4gaWYgYSBwdWJsaWMg Y29uc3RhbnQgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBpcworICogIGRlZmluZWQgYnkgPGk+bW9kPC9p Piwgb3IgaXRzIGFuY2VzdG9ycyBpZiAraW5oZXJpdCsgaXMgbm90IGZhbHNlLgorICoKKyAqICAg ICBtb2R1bGUgTWF0aAorICogICAgICAgcHJpdmF0ZV9jb25zdGFudCA6RQorICogICAgIGVuZAor ICogICAgIE1hdGgucHVibGljX2NvbnN0X2RlZmluZWQ/ICJQSSIgICAjPT4gdHJ1ZQorICogICAg IE1hdGgucHVibGljX2NvbnN0X2RlZmluZWQ/ICJFIiAgICAjPT4gZmFsc2UKKyAqLworCitzdGF0 aWMgVkFMVUUKK3JiX21vZF9wdWJsaWNfY29uc3RfZGVmaW5lZChpbnQgYXJnYywgVkFMVUUgKmFy Z3YsIFZBTFVFIG1vZCkKK3sKKyAgICBtb2RfY29uc3RfZGVmaW5lZChhcmdjLCBhcmd2LCBtb2Qs IDEpOworfQorCisvKgorICogIGNhbGwtc2VxOgorICogICAgIG1vZC5wcml2YXRlX2NvbnN0X2Rl ZmluZWQ/KHN5bSwgaW5oZXJpdD10cnVlKSAgIC0+IHRydWUgb3IgZmFsc2UKKyAqCisgKiAgUmV0 dXJucyA8Y29kZT50cnVlPC9jb2RlPiBpZiBhIHByaXZhdGUgY29uc3RhbnQgd2l0aCB0aGUgZ2l2 ZW4gbmFtZSBpcworICogIGRlZmluZWQgYnkgPGk+bW9kPC9pPiwgb3IgaXRzIGFuY2VzdG9ycyBp ZiAraW5oZXJpdCsgaXMgbm90IGZhbHNlLgorICoKKyAqICAgICBtb2R1bGUgTWF0aAorICogICAg ICAgcHJpdmF0ZV9jb25zdGFudCA6RQorICogICAgIGVuZAorICogICAgIE1hdGgucHJpdmF0ZV9j b25zdF9kZWZpbmVkPyAiUEkiICAgIz0+IGZhbHNlCisgKiAgICAgTWF0aC5wcml2YXRlX2NvbnN0 X2RlZmluZWQ/ICJFIiAgICAjPT4gdHJ1ZQorICovCisKK3N0YXRpYyBWQUxVRQorcmJfbW9kX3By aXZhdGVfY29uc3RfZGVmaW5lZChpbnQgYXJnYywgVkFMVUUgKmFyZ3YsIFZBTFVFIG1vZCkKK3sK KyAgICBtb2RfY29uc3RfZGVmaW5lZChhcmdjLCBhcmd2LCBtb2QsIDIpOwogfQogCiBWQUxVRSBy Yl9vYmpfbWV0aG9kcyhpbnQgYXJnYywgVkFMVUUgKmFyZ3YsIFZBTFVFIG9iaik7CkBAIC0yNjM4 LDkgKzI3MjMsMTQgQEAgSW5pdF9PYmplY3Qodm9pZCkKIAkJICAgICByYl9jbGFzc19wcml2YXRl X2luc3RhbmNlX21ldGhvZHMsIC0xKTsgICAvKiBpbiBjbGFzcy5jICovCiAKICAgICByYl9kZWZp bmVfbWV0aG9kKHJiX2NNb2R1bGUsICJjb25zdGFudHMiLCByYl9tb2RfY29uc3RhbnRzLCAtMSk7 IC8qIGluIHZhcmlhYmxlLmMgKi8KKyAgICByYl9kZWZpbmVfbWV0aG9kKHJiX2NNb2R1bGUsICJw dWJsaWNfY29uc3RhbnRzIiwgcmJfbW9kX2NvbnN0YW50cywgLTEpOyAvKiBpbiB2YXJpYWJsZS5j ICovCisgICAgcmJfZGVmaW5lX21ldGhvZChyYl9jTW9kdWxlLCAicHJpdmF0ZV9jb25zdGFudHMi LCByYl9tb2RfcHJpdmF0ZV9jb25zdGFudHMsIC0xKTsgLyogaW4gdmFyaWFibGUuYyAqLwogICAg IHJiX2RlZmluZV9tZXRob2QocmJfY01vZHVsZSwgImNvbnN0X2dldCIsIHJiX21vZF9jb25zdF9n ZXQsIC0xKTsKKyAgICByYl9kZWZpbmVfbWV0aG9kKHJiX2NNb2R1bGUsICJwdWJsaWNfY29uc3Rf Z2V0IiwgcmJfbW9kX3B1YmxpY19jb25zdF9nZXQsIC0xKTsKICAgICByYl9kZWZpbmVfbWV0aG9k KHJiX2NNb2R1bGUsICJjb25zdF9zZXQiLCByYl9tb2RfY29uc3Rfc2V0LCAyKTsKICAgICByYl9k ZWZpbmVfbWV0aG9kKHJiX2NNb2R1bGUsICJjb25zdF9kZWZpbmVkPyIsIHJiX21vZF9jb25zdF9k ZWZpbmVkLCAtMSk7CisgICAgcmJfZGVmaW5lX21ldGhvZChyYl9jTW9kdWxlLCAicHVibGljX2Nv bnN0X2RlZmluZWQ/IiwgcmJfbW9kX3B1YmxpY19jb25zdF9kZWZpbmVkLCAtMSk7CisgICAgcmJf ZGVmaW5lX21ldGhvZChyYl9jTW9kdWxlLCAicHJpdmF0ZV9jb25zdF9kZWZpbmVkPyIsIHJiX21v ZF9wcml2YXRlX2NvbnN0X2RlZmluZWQsIC0xKTsKICAgICByYl9kZWZpbmVfcHJpdmF0ZV9tZXRo b2QocmJfY01vZHVsZSwgInJlbW92ZV9jb25zdCIsCiAJCQkgICAgIHJiX21vZF9yZW1vdmVfY29u c3QsIDEpOyAvKiBpbiB2YXJpYWJsZS5jICovCiAgICAgcmJfZGVmaW5lX21ldGhvZChyYl9jTW9k dWxlLCAiY29uc3RfbWlzc2luZyIsCmRpZmYgLS1naXQgYS90ZXN0L3J1YnkvdGVzdF9tb2R1bGUu cmIgYi90ZXN0L3J1YnkvdGVzdF9tb2R1bGUucmIKaW5kZXggY2U2ZThhNi4uZTU4YzI2MCAxMDA2 NDQKLS0tIGEvdGVzdC9ydWJ5L3Rlc3RfbW9kdWxlLnJiCisrKyBiL3Rlc3QvcnVieS90ZXN0X21v ZHVsZS5yYgpAQCAtOTgyLDggKzk4Miw0OCBAQCBjbGFzcyBUZXN0TW9kdWxlIDwgVGVzdDo6VW5p dDo6VGVzdENhc2UKICAgICBhc3NlcnRfZXF1YWwoImZvbyIsIGM6OkZPTykKICAgZW5kCiAKKyAg bW9kdWxlIENvbnN0VGVzdAorICAgIFB1YmxpY0NvbnN0YW50ID0gOnB1YmxpYworICAgIFByaXZh dGVDb25zdGFudCA9IDpwcml2YXRlCisgICAgcHJpdmF0ZV9jb25zdGFudCA6UHJpdmF0ZUNvbnN0 YW50CisgIGVuZAorCiAgIGRlZiB0ZXN0X2NvbnN0YW50c193aXRoX3ByaXZhdGVfY29uc3RhbnQK ICAgICBhc3NlcnQoISg6OlRlc3RNb2R1bGUpLmNvbnN0YW50cy5pbmNsdWRlPyg6UHJpdmF0ZUNs YXNzKSkKKyAgICBhc3NlcnRfZXF1YWwoWzpQdWJsaWNDb25zdGFudF0sIENvbnN0VGVzdC5jb25z dGFudHMpCisgIGVuZAorCisgIGRlZiB0ZXN0X3B1YmxpY19jb25zdGFudHMKKyAgICBhc3NlcnRf ZXF1YWwoWzpQdWJsaWNDb25zdGFudF0sIENvbnN0VGVzdC5wdWJsaWNfY29uc3RhbnRzKQorICBl bmQKKworICBkZWYgdGVzdF9wcml2YXRlX2NvbnN0YW50cworICAgIGFzc2VydF9lcXVhbChbOlBy aXZhdGVDb25zdGFudF0sIENvbnN0VGVzdC5wcml2YXRlX2NvbnN0YW50cykKKyAgZW5kCisKKyAg ZGVmIHRlc3RfY29uc3RfZGVmaW5lZF93aXRoX3ByaXZhdGVfY29uc3RhbnQKKyAgICBhc3NlcnRf ZXF1YWwodHJ1ZSwgQ29uc3RUZXN0LmNvbnN0X2RlZmluZWQ/KDpQdWJsaWNDb25zdGFudCkpCisg ICAgYXNzZXJ0X2VxdWFsKHRydWUsIENvbnN0VGVzdC5jb25zdF9kZWZpbmVkPyg6UHJpdmF0ZUNv bnN0YW50KSkKKyAgZW5kCisKKyAgZGVmIHRlc3RfcHVibGljX2NvbnN0X2RlZmluZWQ/CisgICAg YXNzZXJ0X2VxdWFsKHRydWUsIENvbnN0VGVzdC5wdWJsaWNfY29uc3RfZGVmaW5lZD8oOlB1Ymxp Y0NvbnN0YW50KSkKKyAgICBhc3NlcnRfZXF1YWwoZmFsc2UsIENvbnN0VGVzdC5wdWJsaWNfY29u c3RfZGVmaW5lZD8oOlByaXZhdGVDb25zdGFudCkpCisgIGVuZAorCisgIGRlZiB0ZXN0X3ByaXZh dGVfY29uc3RfZGVmaW5lZD8KKyAgICBhc3NlcnRfZXF1YWwoZmFsc2UsIENvbnN0VGVzdC5wcml2 YXRlX2NvbnN0X2RlZmluZWQ/KDpQdWJsaWNDb25zdGFudCkpCisgICAgYXNzZXJ0X2VxdWFsKHRy dWUsIENvbnN0VGVzdC5wcml2YXRlX2NvbnN0X2RlZmluZWQ/KDpQcml2YXRlQ29uc3RhbnQpKQor ICBlbmQKKworICBkZWYgdGVzdF9jb25zdF9nZXRfd2l0aF9wcml2YXRlX2NvbnN0YW50CisgICAg YXNzZXJ0X2VxdWFsKDpwdWJsaWMsIENvbnN0VGVzdC5jb25zdF9nZXQoOlB1YmxpY0NvbnN0YW50 KSkKKyAgICBhc3NlcnRfZXF1YWwoOnByaXZhdGUsIENvbnN0VGVzdC5jb25zdF9nZXQoOlByaXZh dGVDb25zdGFudCkpCisgIGVuZAorCisgIGRlZiB0ZXN0X3B1YmxpY19jb25zdF9nZXQKKyAgICBh c3NlcnRfZXF1YWwoOnB1YmxpYywgQ29uc3RUZXN0LnB1YmxpY19jb25zdF9nZXQoOlB1YmxpY0Nv bnN0YW50KSkKKyAgICBhc3NlcnRfcmFpc2UoTmFtZUVycm9yKSB7IENvbnN0VGVzdC5wdWJsaWNf Y29uc3RfZ2V0KDpQcml2YXRlQ29uc3RhbnQpIH0KICAgZW5kCiAKICAgZGVmIHRlc3RfdG9wbGV2 ZWxfcHJpdmF0ZV9jb25zdGFudApkaWZmIC0tZ2l0IGEvdmFyaWFibGUuYyBiL3ZhcmlhYmxlLmMK aW5kZXggZGFhZjRlMi4uNWY1YjVmZiAxMDA2NDQKLS0tIGEvdmFyaWFibGUuYworKysgYi92YXJp YWJsZS5jCkBAIC0xNzQyLDExICsxNzQyLDExIEBAIHJiX21vZF9jb25zdF9vZihWQUxVRSBtb2Qs IHZvaWQgKmRhdGEpCiB9CiAKIHN0YXRpYyBpbnQKLWxpc3RfaShzdF9kYXRhX3Qga2V5LCBzdF9k YXRhX3QgdmFsdWUsIFZBTFVFIGFyeSkKK2xpc3RfaShzdF9kYXRhX3Qga2V5LCBzdF9kYXRhX3Qg dmFsdWUsIFZBTFVFICphcmdzKQogewogICAgIElEIHN5bSA9IChJRClrZXk7CiAgICAgcmJfY29u c3RfZW50cnlfdCAqY2UgPSAocmJfY29uc3RfZW50cnlfdCAqKXZhbHVlOwotICAgIGlmIChjZS0+ ZmxhZyAhPSBDT05TVF9QUklWQVRFKSByYl9hcnlfcHVzaChhcnksIElEMlNZTShzeW0pKTsKKyAg ICBpZiAoYXJnc1sxXSA9PSAoY2UtPmZsYWcgIT0gQ09OU1RfUFJJVkFURSkpIHJiX2FyeV9wdXNo KGFyZ3NbMF0sIElEMlNZTShzeW0pKTsKICAgICByZXR1cm4gU1RfQ09OVElOVUU7CiB9CiAKQEAg LTE3NTQsMjIgKzE3NTQsNTIgQEAgVkFMVUUKIHJiX2NvbnN0X2xpc3Qodm9pZCAqZGF0YSkKIHsK ICAgICBzdF90YWJsZSAqdGJsID0gZGF0YTsKLSAgICBWQUxVRSBhcnk7CisgICAgVkFMVUUgYXJn c1syXTsKIAogICAgIGlmICghdGJsKSByZXR1cm4gcmJfYXJ5X25ldzIoMCk7Ci0gICAgYXJ5ID0g cmJfYXJ5X25ldzIodGJsLT5udW1fZW50cmllcyk7Ci0gICAgc3RfZm9yZWFjaF9zYWZlKHRibCwg bGlzdF9pLCBhcnkpOworICAgIGFyZ3NbMF0gPSByYl9hcnlfbmV3Mih0YmwtPm51bV9lbnRyaWVz KTsKKyAgICBhcmdzWzFdID0gVFJVRTsKKyAgICBzdF9mb3JlYWNoX3NhZmUodGJsLCBsaXN0X2ks IGFyZ3MpOwogICAgIHN0X2ZyZWVfdGFibGUodGJsKTsKIAotICAgIHJldHVybiBhcnk7CisgICAg cmV0dXJuIGFyZ3NbMF07Cit9CisKK3N0YXRpYyBWQUxVRQorbW9kX2NvbnN0YW50cyhpbnQgYXJn YywgVkFMVUUgKmFyZ3YsIFZBTFVFIG1vZCwgVkFMVUUgdmlzaWJpbGl0eSkKK3sKKyAgICBWQUxV RSBpbmhlcml0LCBhcmdzWzJdOworICAgIHN0X3RhYmxlICp0Ymw7CisKKyAgICBpZiAoYXJnYyA9 PSAwKSB7CisJaW5oZXJpdCA9IFF0cnVlOworICAgIH0KKyAgICBlbHNlIHsKKwlyYl9zY2FuX2Fy Z3MoYXJnYywgYXJndiwgIjAxIiwgJmluaGVyaXQpOworICAgIH0KKyAgICBpZiAoUlRFU1QoaW5o ZXJpdCkpIHsKKwl0YmwgPSByYl9tb2RfY29uc3Rfb2YobW9kLCAwKTsKKyAgICB9CisgICAgZWxz ZSB7CisJdGJsID0gcmJfbW9kX2NvbnN0X2F0KG1vZCwgMCk7CisgICAgfQorCisgICAgaWYgKCF0 YmwpIHJldHVybiByYl9hcnlfbmV3MigwKTsKKyAgICBhcmdzWzBdID0gcmJfYXJ5X25ldzIodGJs LT5udW1fZW50cmllcyk7CisgICAgYXJnc1sxXSA9IHZpc2liaWxpdHk7CisgICAgc3RfZm9yZWFj aF9zYWZlKHRibCwgbGlzdF9pLCBhcmdzKTsKKyAgICBzdF9mcmVlX3RhYmxlKHRibCk7CisKKyAg ICByZXR1cm4gYXJnc1swXTsKIH0KIAogLyoKICAqICBjYWxsLXNlcToKICAqICAgICBtb2QuY29u c3RhbnRzKGluaGVyaXQ9dHJ1ZSkgICAgLT4gYXJyYXkKKyAqICAgICBtb2QucHVibGljX2NvbnN0 YW50cyhpbmhlcml0PXRydWUpICAgIC0+IGFycmF5CiAgKgotICogIFJldHVybnMgYW4gYXJyYXkg b2YgdGhlIG5hbWVzIG9mIHRoZSBjb25zdGFudHMgYWNjZXNzaWJsZSBpbgotICogIDxpPm1vZDwv aT4uIFRoaXMgaW5jbHVkZXMgdGhlIG5hbWVzIG9mIGNvbnN0YW50cyBpbiBhbnkgaW5jbHVkZWQK KyAqICBSZXR1cm5zIGFuIGFycmF5IG9mIHRoZSBuYW1lcyBvZiB0aGUgcHVibGljIGNvbnN0YW50 cyBhY2Nlc3NpYmxlIGluCisgKiAgPGk+bW9kPC9pPi4gVGhpcyBpbmNsdWRlcyB0aGUgbmFtZXMg b2YgcHVibGljIGNvbnN0YW50cyBpbiBhbnkgaW5jbHVkZWQKICAqICBtb2R1bGVzIChleGFtcGxl IGF0IHN0YXJ0IG9mIHNlY3Rpb24pLCB1bmxlc3MgdGhlIDxpPmFsbDwvaT4KICAqICBwYXJhbWV0 ZXIgaXMgc2V0IHRvIDxjb2RlPmZhbHNlPC9jb2RlPi4KICAqCkBAIC0xNzgyLDIyICsxODEyLDI4 IEBAIHJiX2NvbnN0X2xpc3Qodm9pZCAqZGF0YSkKIFZBTFVFCiByYl9tb2RfY29uc3RhbnRzKGlu dCBhcmdjLCBWQUxVRSAqYXJndiwgVkFMVUUgbW9kKQogewotICAgIFZBTFVFIGluaGVyaXQ7Ci0g ICAgc3RfdGFibGUgKnRibDsKKyAgICByZXR1cm4gbW9kX2NvbnN0YW50cyhhcmdjLCBhcmd2LCBt b2QsIFRSVUUpOworfQogCi0gICAgaWYgKGFyZ2MgPT0gMCkgewotCWluaGVyaXQgPSBRdHJ1ZTsK LSAgICB9Ci0gICAgZWxzZSB7Ci0JcmJfc2Nhbl9hcmdzKGFyZ2MsIGFyZ3YsICIwMSIsICZpbmhl cml0KTsKLSAgICB9Ci0gICAgaWYgKFJURVNUKGluaGVyaXQpKSB7Ci0JdGJsID0gcmJfbW9kX2Nv bnN0X29mKG1vZCwgMCk7Ci0gICAgfQotICAgIGVsc2UgewotCXRibCA9IHJiX21vZF9jb25zdF9h dChtb2QsIDApOwotICAgIH0KLSAgICByZXR1cm4gcmJfY29uc3RfbGlzdCh0YmwpOworLyoKKyAq ICBjYWxsLXNlcToKKyAqICAgICBtb2QucHJpdmF0ZV9jb25zdGFudHMoaW5oZXJpdD10cnVlKSAg ICAtPiBhcnJheQorICoKKyAqICBSZXR1cm5zIGFuIGFycmF5IG9mIHRoZSBuYW1lcyBvZiB0aGUg cHJpdmF0ZSBjb25zdGFudHMgYWNjZXNzaWJsZSBpbgorICogIDxpPm1vZDwvaT4uIFRoaXMgaW5j bHVkZXMgdGhlIG5hbWVzIG9mIHByaXZhdGUgY29uc3RhbnRzIGluIGFueSBpbmNsdWRlZAorICog IG1vZHVsZXMgKGV4YW1wbGUgYXQgc3RhcnQgb2Ygc2VjdGlvbiksIHVubGVzcyB0aGUgPGk+YWxs PC9pPgorICogIHBhcmFtZXRlciBpcyBzZXQgdG8gPGNvZGU+ZmFsc2U8L2NvZGU+LgorICoKKyAq ICAgIElPLnByaXZhdGVfY29uc3RhbnRzLmluY2x1ZGU/KDpTWU5DKSAgICAgICAgIz0+IGZhbHNl CisgKiAgICBJTy5wcml2YXRlX2NvbnN0YW50cyhmYWxzZSkuaW5jbHVkZT8oOlNZTkMpICM9PiBm YWxzZQorICoKKyAqICBBbHNvIHNlZSA8Y29kZT5Nb2R1bGU6OmNvbnN0X2RlZmluZWQ/PC9jb2Rl Pi4KKyAqLworCitWQUxVRQorcmJfbW9kX3ByaXZhdGVfY29uc3RhbnRzKGludCBhcmdjLCBWQUxV RSAqYXJndiwgVkFMVUUgbW9kKQoreworICAgIHJldHVybiBtb2RfY29uc3RhbnRzKGFyZ2MsIGFy Z3YsIG1vZCwgRkFMU0UpOwogfQogCiBzdGF0aWMgaW50Cg== --0016367fabe766d792049af37bfb--