gh-154934: Remove ncurses assumptions from curses and its tests (GH-154940)
serhiy-storchaka <[email protected]> Thu, 30 Jul 2026 14:12:45 -0400 (EDT)
| Newsgroups | gmane.comp.python.cvs |
|---|---|
| Message-ID | <[email protected]> |
aHR0cHM6Ly9naXRodWIuY29tL3B5dGhvbi9jcHl0aG9uL2NvbW1pdC85ZWY5NWQxYjBkNzdhYjYw NzEwMTJiNjFmMDc2Njc1NTVhMTNjOWE3DQpjb21taXQ6IDllZjk1ZDFiMGQ3N2FiNjA3MTAxMmI2 MWYwNzY2NzU1NWExM2M5YTcNCmJyYW5jaDogbWFpbg0KYXV0aG9yOiBTZXJoaXkgU3RvcmNoYWth IDxzdG9yY2hha2FAZ21haWwuY29tPg0KY29tbWl0dGVyOiBzZXJoaXktc3RvcmNoYWthIDxzdG9y Y2hha2FAZ21haWwuY29tPg0KZGF0ZTogMjAyNi0wNy0zMFQyMToxMjoyOSswMzowMA0Kc3VtbWFy eToNCg0KZ2gtMTU0OTM0OiBSZW1vdmUgbmN1cnNlcyBhc3N1bXB0aW9ucyBmcm9tIGN1cnNlcyBh bmQgaXRzIHRlc3RzIChHSC0xNTQ5NDApDQoNClBhcnNlIHRoZSBpbnRlZ2VyIGZvcm1zIG9mIGFk ZGNoKCkgYW5kIGZyaWVuZHMgYXMgdW5zaWduZWQgbG9uZyBsb25nOiB0aGUNCndpZHRoIG9mIGEg Y2h0eXBlIGlzIHVwIHRvIHRoZSBsaWJyYXJ5Lg0KDQpFeHBvc2UgX2N1cnNlcy5fd2lkZV9jaGFy YWN0ZXJfc3VwcG9ydCBzbyB0aGF0IHRoZSB0ZXN0cyBjYW4gYXNrIHdoYXQgYQ0KY2VsbCBob2xk cyBpbnN0ZWFkIG9mIHByb2JpbmcgZm9yIGEgZnVuY3Rpb24uDQoNCk1hc2sgYW4gaW50ZWdlciBr ZXlzdHJva2UgaW4gdGV4dHBhZCBhcyB0aGUgYnl0ZSBpdCBpcywgYW5kIGtlZXAgdGhlIGtleQ0K Y29kZXMgb3V0IG9mIHRoZSBwcmludGFibGUgcmFuZ2UuDQoNCmZpbGVzOg0KTSBMaWIvY3Vyc2Vz L3RleHRwYWQucHkNCk0gTGliL3Rlc3QvdGVzdF9jdXJzZXMucHkNCk0gTW9kdWxlcy9fY3Vyc2Vz bW9kdWxlLmMNCk0gTW9kdWxlcy9jbGluaWMvX2N1cnNlc21vZHVsZS5jLmgNCg0KZGlmZiAtLWdp dCBhL0xpYi9jdXJzZXMvdGV4dHBhZC5weSBiL0xpYi9jdXJzZXMvdGV4dHBhZC5weQ0KaW5kZXgg NzBmYTJjMjVmNjQ2MzI4Li5mNmRmYzk5MDkwMWQ5OTUgMTAwNjQ0DQotLS0gYS9MaWIvY3Vyc2Vz L3RleHRwYWQucHkNCisrKyBiL0xpYi9jdXJzZXMvdGV4dHBhZC5weQ0KQEAgLTU3LDE0ICs1Nywx NyBAQCBkZWYgX3VwZGF0ZV9tYXhfeXgoc2VsZik6DQogICAgICAgICBzZWxmLm1heHggPSBtYXh4 IC0gMQ0KIA0KICAgICBkZWYgX2RlY29kZShzZWxmLCBjaCk6DQotICAgICAgICAjIERlY29kZSBh biBpbnRlZ2VyIGtleXN0cm9rZSBvciBieXRlIHRvIHRleHQgd2l0aCB0aGUgd2luZG93J3MgZW5j b2RpbmcuDQotICAgICAgICAjIEFfQ0hBUlRFWFQgZHJvcHMgYW55IGF0dHJpYnV0ZSBiaXRzLg0K LSAgICAgICAgcmV0dXJuIGJ5dGVzKFtjaCAmIGN1cnNlcy5BX0NIQVJURVhUXSkuZGVjb2RlKHNl bGYud2luLmVuY29kaW5nLCAncmVwbGFjZScpDQorICAgICAgICAjIEFuIGludGVnZXIga2V5c3Ry b2tlIGlzIGEgYnl0ZTogZ2V0X3djaCgpIHBhc3NlcyBhIGNoYXJhY3RlciBhcyBhDQorICAgICAg ICAjIHN0cmluZywgYW5kIGdldGNoKCkgcmVwb3J0cyBvbmUgYXMgaXRzIGJ5dGVzIGluIHRoZSBl bmNvZGluZy4NCisgICAgICAgIHJldHVybiBieXRlcyhbY2ggJiAweGZmXSkuZGVjb2RlKHNlbGYu d2luLmVuY29kaW5nLCAncmVwbGFjZScpDQogDQogICAgIGRlZiBfcHJpbnRhYmxlX2tleShzZWxm LCBjaCk6DQotICAgICAgICAjIFdoZXRoZXIgdGhlIGludGVnZXIga2V5c3Ryb2tlIGlzIGEgcHJp bnRhYmxlIGNoYXJhY3Rlciwgbm90IGEga2V5IGNvZGU6DQotICAgICAgICAjIDAuLjI1NSBhcmUg Y2hhcmFjdGVyIGJ5dGVzLCBsYXJnZXIgdmFsdWVzIGFyZSBmdW5jdGlvbiBrZXlzLg0KLSAgICAg ICAgcmV0dXJuIGNoIDw9IDB4ZmYgYW5kIHNlbGYuX2RlY29kZShjaCkuaXNwcmludGFibGUoKQ0K KyAgICAgICAgIyBXaGV0aGVyIHRoZSBpbnRlZ2VyIGtleXN0cm9rZSBpcyBhIHByaW50YWJsZSBj aGFyYWN0ZXIgcmF0aGVyIHRoYW4gYQ0KKyAgICAgICAgIyBrZXkgY29kZS4gIEtleSBjb2RlcyBv Y2N1cHkgW2N1cnNlcy5LRVlfTUlOLCBjdXJzZXMuS0VZX01BWF0sIHdoaWNoDQorICAgICAgICAj IG1heSBzdGFydCBhYm92ZSBhIGJ5dGUuDQorICAgICAgICByZXR1cm4gKGNoIDw9IDB4ZmYNCisg ICAgICAgICAgICAgICAgYW5kIG5vdCBjdXJzZXMuS0VZX01JTiA8PSBjaCA8PSBjdXJzZXMuS0VZ X01BWA0KKyAgICAgICAgICAgICAgICBhbmQgc2VsZi5fZGVjb2RlKGNoKS5pc3ByaW50YWJsZSgp KQ0KIA0KICAgICBkZWYgX2VuZF9vZl9saW5lKHNlbGYsIHkpOg0KICAgICAgICAgIiIiR28gdG8g dGhlIGxvY2F0aW9uIG9mIHRoZSBmaXJzdCBibGFuayBvbiB0aGUgZ2l2ZW4gbGluZSwNCkBAIC05 MywxNCArOTYsMTggQEAgZGVmIF9pbnNlcnRfcHJpbnRhYmxlX2NoYXIoc2VsZiwgY2gpOg0KICAg ICAgICAgICAgIGlmIHkgPj0gc2VsZi5tYXh5IGFuZCB4ID49IHNlbGYubWF4eDoNCiAgICAgICAg ICAgICAgICAgIyBVc2UgaW5zY2goKSBpbiB0aGUgbG93ZXItcmlnaHQgY2VsbDsgYWRkY2goKSB0 aGVyZSB3b3VsZCBwdXNoDQogICAgICAgICAgICAgICAgICMgdGhlIGN1cnNvciBvdXQgb2YgdGhl IHdpbmRvdyAoYW4gZXJyb3IsIGFuZCBpdCBzY3JvbGxzIGENCi0gICAgICAgICAgICAgICAgIyBz Y3JvbGxhYmxlIHdpbmRvdykuICBpbnNjaCgpIGRvZXMgbm90IGRlY29kZSBhbiBpbnQgYnl0ZQ0K LSAgICAgICAgICAgICAgICAjIHRocm91Z2ggdGhlIGxvY2FsZSBvbiBhIHdpZGUgYnVpbGQsIHNv IHBhc3MgaXQgYXMgdGV4dC4NCisgICAgICAgICAgICAgICAgIyBzY3JvbGxhYmxlIHdpbmRvdyku DQogICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoY2gsIGludCk6DQogICAgICAgICAgICAg ICAgICAgICBzZWxmLndpbi5pbnNjaChzZWxmLl9kZWNvZGUoY2gpLCBjaCAmIGN1cnNlcy5BX0FU VFJJQlVURVMpDQogICAgICAgICAgICAgICAgIGVsc2U6DQogICAgICAgICAgICAgICAgICAgICBz ZWxmLndpbi5pbnNjaChjaCkNCiAgICAgICAgICAgICAgICAgYnJlYWsNCi0gICAgICAgICAgICBz ZWxmLndpbi5hZGRjaChjaCkNCisgICAgICAgICAgICAjIFBhc3MgdGhlIGNoYXJhY3RlciBhcyB0 ZXh0OiBhbiBpbnRlZ2VyIGlzIGEgYnl0ZSwgd2hpY2ggYWRkY2goKQ0KKyAgICAgICAgICAgICMg dGFrZXMgYXMgYSBjb2RlIHBvaW50IG9uIGEgd2lkZSBidWlsZC4NCisgICAgICAgICAgICBpZiBp c2luc3RhbmNlKGNoLCBpbnQpOg0KKyAgICAgICAgICAgICAgICBzZWxmLndpbi5hZGRjaChzZWxm Ll9kZWNvZGUoY2gpLCBjaCAmIGN1cnNlcy5BX0FUVFJJQlVURVMpDQorICAgICAgICAgICAgZWxz ZToNCisgICAgICAgICAgICAgICAgc2VsZi53aW4uYWRkY2goY2gpDQogICAgICAgICAgICAgIyBJ biBpbnNlcnQgbW9kZSBrZWVwIHNoaWZ0aW5nIGNlbGxzIHJpZ2h0IHVudGlsIGEgYmxhbmsgb25l Lg0KICAgICAgICAgICAgIGlmIG5vdCBzZWxmLmluc2VydF9tb2RlIG9yIG5vdCBzdHIob2xkY2gp LmlzcHJpbnRhYmxlKCk6DQogICAgICAgICAgICAgICAgIGJyZWFrDQpkaWZmIC0tZ2l0IGEvTGli L3Rlc3QvdGVzdF9jdXJzZXMucHkgYi9MaWIvdGVzdC90ZXN0X2N1cnNlcy5weQ0KaW5kZXggNGJh MjEwYzE2MmQwZjZkLi44NDViOWExMzVhMjQyNDMgMTAwNjQ0DQotLS0gYS9MaWIvdGVzdC90ZXN0 X2N1cnNlcy5weQ0KKysrIGIvTGliL3Rlc3QvdGVzdF9jdXJzZXMucHkNCkBAIC00NiwyMiArNDYs NyBAQCBkZWYgd3JhcHBlZChzZWxmLCAqYXJncywgKiprd2FyZ3MpOg0KICAgICAgICAgcmV0dXJu IHdyYXBwZWQNCiAgICAgcmV0dXJuIGRlY28NCiANCi1kZWYgX3dpZGVfYnVpbGQoKToNCi0gICAg IyBUcnVlIG9uIGEgYnVpbGQgdGhhdCBzdG9yZXMgd2lkZS1jaGFyYWN0ZXIgY2VsbHMgKGJ1aWx0 IGFnYWluc3QgbmN1cnNlc3cpLg0KLSAgICAjIEEgd2lkZSBidWlsZCBhY2NlcHRzIGEgc3BhY2lu ZyBjaGFyYWN0ZXIgcGx1cyBhIGNvbWJpbmluZyBtYXJrIGluIGEgc2luZ2xlDQotICAgICMgY2Vs bDsgYSBuYXJyb3cgYnVpbGQgYWNjZXB0cyBvbmx5IG9uZSBjaGFyYWN0ZXIgcGVyIGNlbGwuICBU aGlzIHN0YXlzIGENCi0gICAgIyByZWxpYWJsZSB3aWRlL25hcnJvdyBzaWduYWwgZXZlbiBhcyB0 aGUgd2lkZS1jaGFyYWN0ZXIgZnVuY3Rpb25zIChnZXRfd2NoKCkNCi0gICAgIyBhbmQgZnJpZW5k cykgYmVjb21lIGF2YWlsYWJsZSBvbiBuYXJyb3cgYnVpbGRzIHRvbywgYmVjYXVzZSB0aGUNCi0g ICAgIyBtdWx0aS1jb2RlcG9pbnQgY2VsbCBjYXBhY2l0eSBpdHNlbGYgaXMgYnVpbGQtc3BlY2lm aWMuDQotICAgIGlmIG5vdCBoYXNhdHRyKGN1cnNlcywgJ2NvbXBsZXhjaGFyJyk6DQotICAgICAg ICByZXR1cm4gaGFzYXR0cihjdXJzZXMud2luZG93LCAnZ2V0X3djaCcpDQotICAgIHRyeToNCi0g ICAgICAgIGN1cnNlcy5jb21wbGV4Y2hhcignZVx1MDMwMScpICAjICdlJyArIGNvbWJpbmluZyBh Y3V0ZTogdHdvIGNvZGUgcG9pbnRzDQotICAgIGV4Y2VwdCBWYWx1ZUVycm9yOg0KLSAgICAgICAg cmV0dXJuIEZhbHNlDQotICAgIHJldHVybiBUcnVlDQotDQotV0lERV9CVUlMRCA9IF93aWRlX2J1 aWxkKCkNCitXSURFX0JVSUxEID0gaW1wb3J0X21vZHVsZSgnX2N1cnNlcycpLl93aWRlX2NoYXJh Y3Rlcl9zdXBwb3J0DQogDQogZGVmIHJlcXVpcmVzX3dpZGVfYnVpbGQodGVzdCk6DQogICAgIEBm dW5jdG9vbHMud3JhcHModGVzdCkNCkBAIC00MDQsNiArMzg5LDE1IEBAIGRlZiBfc3RvcmFibGUo c2VsZiwgcyk6DQogICAgICAgICAgICAgcmV0dXJuIFRydWUNCiAgICAgICAgIHJldHVybiBsZW4o cy5lbmNvZGUoc2VsZi5zdGRzY3IuZW5jb2RpbmcpKSA9PSBsZW4ocykNCiANCisgICAgZGVmIF9j aGFyX2NvZGUoc2VsZiwgY2gpOg0KKyAgICAgICAgIyBUaGUgaW50ZWdlciB0aGUgaW50LWlucHV0 IEFQSSAoYWRkY2goaW50KSwgZG9fY29tbWFuZCgpKSB1c2VzIGZvciBhDQorICAgICAgICAjIGNo YXJhY3Rlciwgb3IgTm9uZSBpZiBpdCBoYXMgbm9uZTogYSBjZWxsIGhvbGRzIGEgc2luZ2xlIGxv Y2FsZSBieXRlLg0KKyAgICAgICAgdHJ5Og0KKyAgICAgICAgICAgIGIgPSBjaC5lbmNvZGUoc2Vs Zi5zdGRzY3IuZW5jb2RpbmcpDQorICAgICAgICBleGNlcHQgVW5pY29kZUVuY29kZUVycm9yOg0K KyAgICAgICAgICAgIHJldHVybiBOb25lDQorICAgICAgICByZXR1cm4gYlswXSBpZiBsZW4oYikg PT0gMSBlbHNlIE5vbmUNCisNCiAgICAgZGVmIF9yZWFkX2NoYXIoc2VsZiwgeSwgeCk6DQogICAg ICAgICAjIFRoZSBjaGFyYWN0ZXIgd3JpdHRlbiB0byBhIGNlbGwsIHJlYWQgYmFjayBmb3Igb3V0 cHV0IGNoZWNrcy4gIGluY2goKQ0KICAgICAgICAgIyBpcyB1bnVzYWJsZSBoZXJlOiBvbiBhIHdp ZGUgYnVpbGQgaXQgcmV0dXJucyB0aGUgbG93IDggYml0cyBvZiB0aGUNCkBAIC03ODMsMTggKzc3 NywxNSBAQCBkZWYgdGVzdF9vdXRwdXRfY2hhcmFjdGVyKHNlbGYpOg0KICAgICAgICAgc3Rkc2Ny LmFkZGNoKDIsIDMsICdBJywgY3Vyc2VzLkFfQk9MRCkNCiAgICAgICAgIHNlbGYuYXNzZXJ0SXMo c3Rkc2NyLmlzX3dpbnRvdWNoZWQoKSwgVHJ1ZSkNCiANCi0gICAgICAgICMgVGhlIHNhbWUgY2hh cmFjdGVycyBzdXBwbGllZCBhcyBhbiBpbnQgY2h0eXBlIChhIGJ5dGUgPiAxMjcpLiAgVGhlDQot ICAgICAgICAjIGNlbGwgaXMgcmVhZCBiYWNrIHdpdGggX3JlYWRfY2hhcigpLCBub3QgaW5jaCgp OiBvbiBhIHdpZGUgYnVpbGQgdGhlDQotICAgICAgICAjIGludCBpcyBzdG9yZWQgdGhyb3VnaCB0 aGUgbG9jYWxlIGFzIGEgd2lkZSBjaGFyYWN0ZXIgdGhhdCBpbmNoKCkNCi0gICAgICAgICMgY2Fu bm90IHJlcHJlc2VudCBmb3IgYSBjaGFyYWN0ZXIgb3V0c2lkZSBMYXRpbi0xLg0KKyAgICAgICAg IyBUaGUgc2FtZSBjaGFyYWN0ZXJzIHN1cHBsaWVkIGFzIGFuIGludCBjaHR5cGUuICBUaGUgY2Vs bCBpcyByZWFkIGJhY2sNCisgICAgICAgICMgd2l0aCBfcmVhZF9jaGFyKCksIG5vdCBpbmNoKCk6 IG9uIGEgd2lkZSBidWlsZCB0aGUgaW50IGlzIHN0b3JlZCBhcyBhDQorICAgICAgICAjIHdpZGUg Y2hhcmFjdGVyIHRoYXQgaW5jaCgpIGNhbm5vdCByZXByZXNlbnQgZm9yIGEgY2hhcmFjdGVyIG91 dHNpZGUNCisgICAgICAgICMgTGF0aW4tMS4gIFRoZSBpbnQgaXMgZGVjb2RlZCBhcyBhIGxvY2Fs ZSBieXRlLCBzbyBvbmx5IGEgc2luZ2xlLWJ5dGUNCisgICAgICAgICMgY2hhcmFjdGVyIHJvdW5k LXRyaXBzLg0KICAgICAgICAgZm9yIGMgaW4gKCfDqScsICfCpCcsICfigqwnLCAn0ZQnKToNCi0g ICAgICAgICAgICB0cnk6DQotICAgICAgICAgICAgICAgIGIgPSBjLmVuY29kZShlbmNvZGluZykN Ci0gICAgICAgICAgICBleGNlcHQgVW5pY29kZUVuY29kZUVycm9yOg0KLSAgICAgICAgICAgICAg ICBjb250aW51ZQ0KLSAgICAgICAgICAgIGlmIGxlbihiKSAhPSAxOg0KKyAgICAgICAgICAgIHYg PSBzZWxmLl9jaGFyX2NvZGUoYykNCisgICAgICAgICAgICBpZiB2IGlzIE5vbmU6DQogICAgICAg ICAgICAgICAgIGNvbnRpbnVlDQotICAgICAgICAgICAgdiA9IGJbMF0NCiAgICAgICAgICAgICB3 aXRoIHNlbGYuc3ViVGVzdChjPWMpOg0KICAgICAgICAgICAgICAgICBzdGRzY3IuYWRkY2goMCwg MCwgdikNCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9yZWFkX2NoYXIo MCwgMCksIGMpDQpAQCAtOTczLDIyICs5NjQsMjEgQEAgZGVmIHRlc3RfcmVhZF9mcm9tX3dpbmRv dyhzZWxmKToNCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkc2NyLmluc3RyKDAsIDIsIDQp LCBiJ0JDRCAnKQ0KICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3Rkc2Ny Lmluc3RyLCAtMikNCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHN0ZHNj ci5pbnN0ciwgMCwgMiwgLTIpDQotICAgICAgICAjIEEgbm9uLUFTQ0lJIGNoYXJhY3RlciBvZiBh biA4LWJpdCBsb2NhbGUgcmVhZHMgYmFjayBhcyBpdHMgZW5jb2RlZA0KLSAgICAgICAgIyBieXRl IChzZWUgX2VuY29kYWJsZSBmb3IgdGhlIHNldCkuICBCb3RoIGluc3RyKCkgYW5kIGluY2goKSBy ZXR1cm4gdGhlDQotICAgICAgICAjIGxvY2FsZSBieXRlIGZvciBhbnkgY2hhcmFjdGVyIHRoYXQg Zml0cyB0aGUgbG9jYWxlJ3Mgc2luZ2xlLWJ5dGUNCi0gICAgICAgICMgZW5jb2RpbmcuDQotICAg ICAgICBlbmNvZGluZyA9IHN0ZHNjci5lbmNvZGluZw0KKyAgICAgICAgIyBpbnN0cih5LCB4LCAx KSByZWFkcyBhIHNpbmdsZSBjZWxsIGJ5dGUsIHNvIG9ubHkgYSBjaGFyYWN0ZXIgdGhhdCB0aGUN CisgICAgICAgICMgd2luZG93IGVuY29kaW5nIG1hcHMgdG8gb25lIGJ5dGUgaXMgY2hlY2tlZC4g IGluY2goKSByZXR1cm5zIHRoZSBjZWxsDQorICAgICAgICAjIHZhbHVlLCB3aGljaCBpcyB0aGUg bG9jYWxlIGJ5dGUuDQogICAgICAgICBmb3IgY2ggaW4gKCdBJywgJ8OpJywgJ8KkJywgJ+KCrCcs ICfRlCcpOg0KICAgICAgICAgICAgIHRyeToNCi0gICAgICAgICAgICAgICAgYiA9IGNoLmVuY29k ZShlbmNvZGluZykNCisgICAgICAgICAgICAgICAgYiA9IGNoLmVuY29kZShzdGRzY3IuZW5jb2Rp bmcpDQogICAgICAgICAgICAgZXhjZXB0IFVuaWNvZGVFbmNvZGVFcnJvcjoNCiAgICAgICAgICAg ICAgICAgY29udGludWUNCiAgICAgICAgICAgICBpZiBsZW4oYikgIT0gMToNCiAgICAgICAgICAg ICAgICAgY29udGludWUNCisgICAgICAgICAgICB2ID0gc2VsZi5fY2hhcl9jb2RlKGNoKQ0KICAg ICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGNoPWNoKToNCiAgICAgICAgICAgICAgICAgc3Rk c2NyLmFkZHN0cigyLCAwLCBjaCkNCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChz dGRzY3IuaW5zdHIoMiwgMCwgMSksIGIpDQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1 YWwoc3Rkc2NyLmluY2goMiwgMCksIGJbMF0pDQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0 RXF1YWwoc3Rkc2NyLmluY2goMiwgMCksIHYpDQogDQogICAgIGRlZiB0ZXN0X2Nvb3JkaW5hdGVf ZXJyb3JzKHNlbGYpOg0KICAgICAgICAgIyBBZGRyZXNzaW5nIGEgY2VsbCBvdXRzaWRlIHRoZSB3 aW5kb3cgcmFpc2VzIGN1cnNlcy5lcnJvci4NCkBAIC0xMDMwLDkgKzEwMjAsMjMgQEAgZGVmIHRl c3RfZ2V0Y2goc2VsZik6DQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdpbi5nZXRjaCgpLCBi J20nWzBdKQ0KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3aW4uZ2V0Y2goKSwgYidcbidbMF0p DQogDQotICAgICAgICAjIEEga2V5IHZhbHVlID4gMTI3IGlzIGRlbGl2ZXJlZCB1bmNoYW5nZWQg KGl0IGlzIG5vdCBsb2NhbGUgdGV4dCkuDQotICAgICAgICBjdXJzZXMudW5nZXRjaCgweEU5KQ0K LSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3aW4uZ2V0Y2goKSwgMHhFOSkNCisgICAgICAgICMg QSBub24tQVNDSUkgY2hhcmFjdGVyIGVuY29kYWJsZSBhcyBhIHNpbmdsZSBieXRlIGluIHRoZSBs b2NhbGUNCisgICAgICAgICMgcm91bmQtdHJpcHMgYXMgdGhhdCBieXRlLg0KKyAgICAgICAgZW5j b2RpbmcgPSBzZWxmLnN0ZHNjci5lbmNvZGluZw0KKyAgICAgICAgZm9yIGNoIGluICgnw6knLCAn wqQnLCAn4oKsJywgJ9GUJyk6DQorICAgICAgICAgICAgdHJ5Og0KKyAgICAgICAgICAgICAgICBi ID0gY2guZW5jb2RlKGVuY29kaW5nKQ0KKyAgICAgICAgICAgIGV4Y2VwdCBVbmljb2RlRW5jb2Rl RXJyb3I6DQorICAgICAgICAgICAgICAgIGNvbnRpbnVlDQorICAgICAgICAgICAgaWYgbGVuKGIp ICE9IDE6DQorICAgICAgICAgICAgICAgIGNvbnRpbnVlDQorICAgICAgICAgICAgd2l0aCBzZWxm LnN1YlRlc3QoY2g9Y2gpOg0KKyAgICAgICAgICAgICAgICBjdXJzZXMudW5nZXRjaChzZWxmLl9j aGFyX2NvZGUoY2gpKQ0KKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdpbi5nZXRj aCgpLCBiWzBdKQ0KKw0KKyAgICAgICAgIyBBIGtleSBjb2RlIGlzIGRlbGl2ZXJlZCB1bmNoYW5n ZWQuDQorICAgICAgICBjdXJzZXMudW5nZXRjaChjdXJzZXMuS0VZX0xFRlQpDQorICAgICAgICBz ZWxmLmFzc2VydEVxdWFsKHdpbi5nZXRjaCgpLCBjdXJzZXMuS0VZX0xFRlQpDQogDQogICAgIGRl ZiB0ZXN0X2dldHN0cihzZWxmKToNCiAgICAgICAgIHdpbiA9IGN1cnNlcy5uZXd3aW4oNSwgMTIs IDUsIDIpDQpAQCAtMTI3NywyOCArMTI4MSwyNCBAQCBkZWYgdGVzdF9iYWNrZ3JvdW5kKHNlbGYp Og0KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3aW4uaW5jaCgwLCAwKSwgYidMJ1swXSB8IGN1 cnNlcy5BX1JFVkVSU0UpDQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdpbi5pbmNoKDAsIDUp LCBiJyMnWzBdIHwgY3Vyc2VzLkFfUkVWRVJTRSkNCiANCi0gICAgICAgICMgQSBub24tQVNDSUkg YmFja2dyb3VuZCBjaGFyYWN0ZXIgb2YgYW4gOC1iaXQgbG9jYWxlIHJlYWRzIGJhY2sgYXMgaXRz DQotICAgICAgICAjIGVuY29kZWQgYnl0ZS4gIFNlZSBfZW5jb2RhYmxlIGZvciB0aGUgY2hhcmFj dGVyIHNldC4NCisgICAgICAgICMgQSBub24tQVNDSUkgYmFja2dyb3VuZCBjaGFyYWN0ZXIgcmVh ZHMgYmFjayBhcyBpdHMgY2VsbCB2YWx1ZSwgdGhlDQorICAgICAgICAjIGxvY2FsZSBieXRlLg0K ICAgICAgICAgd2luLmJrZ2QoJyAnKQ0KLSAgICAgICAgZW5jb2RpbmcgPSB3aW4uZW5jb2RpbmcN CiAgICAgICAgIGZvciBjaCBpbiAoJ8OpJywgJ8KkJywgJ+KCrCcsICfRlCcpOg0KLSAgICAgICAg ICAgIHRyeToNCi0gICAgICAgICAgICAgICAgYiA9IGNoLmVuY29kZShlbmNvZGluZykNCi0gICAg ICAgICAgICBleGNlcHQgVW5pY29kZUVuY29kZUVycm9yOg0KLSAgICAgICAgICAgICAgICBjb250 aW51ZQ0KLSAgICAgICAgICAgIGlmIGxlbihiKSAhPSAxOg0KKyAgICAgICAgICAgIHYgPSBzZWxm Ll9jaGFyX2NvZGUoY2gpDQorICAgICAgICAgICAgaWYgdiBpcyBOb25lOg0KICAgICAgICAgICAg ICAgICBjb250aW51ZQ0KICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGNoPWNoKToNCiAg ICAgICAgICAgICAgICAgd2luLmJrZ2QoY2gpDQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0 RXF1YWwod2luLmdldGJrZ2QoKSwgYlswXSkNCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRF cXVhbCh3aW4uZ2V0YmtnZCgpLCB2KQ0KICAgICAgICAgICAgICAgICBpZiBvcmQoY2gpIDwgMHgx MDA6DQogICAgICAgICAgICAgICAgICAgICAjIFRoZSBzYW1lIGJ5dGUgZ2l2ZW4gYXMgYW4gaW50 LiAgQSB3aWRlIGJ1aWxkIHN0b3JlcyBpdA0KICAgICAgICAgICAgICAgICAgICAgIyB0aHJvdWdo IHRoZSBsb2NhbGUsIHNvIG9ubHkgYSBMYXRpbi0xIGJ5dGUgcm91bmQtdHJpcHMuDQogICAgICAg ICAgICAgICAgICAgICB3aW4uYmtnZCgnICcpDQotICAgICAgICAgICAgICAgICAgICB3aW4uYmtn ZHNldChiWzBdKQ0KLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3aW4uZ2V0 YmtnZCgpLCBiWzBdKQ0KLSAgICAgICAgICAgICAgICAgICAgd2luLmJrZ2QoYlswXSkNCi0gICAg ICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2luLmdldGJrZ2QoKSwgYlswXSkNCisg ICAgICAgICAgICAgICAgICAgIHdpbi5ia2dkc2V0KHYpDQorICAgICAgICAgICAgICAgICAgICBz ZWxmLmFzc2VydEVxdWFsKHdpbi5nZXRia2dkKCksIHYpDQorICAgICAgICAgICAgICAgICAgICB3 aW4uYmtnZCh2KQ0KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3aW4uZ2V0 YmtnZCgpLCB2KQ0KIA0KICAgICBkZWYgdGVzdF9vdmVybGF5KHNlbGYpOg0KICAgICAgICAgc3Jj d2luID0gY3Vyc2VzLm5ld3dpbig1LCAxOCwgMywgNCkNCkBAIC0xNDg4LDIwICsxNDg4LDIxIEBA IGRlZiB0ZXN0X2JvcmRlcnNfYW5kX2xpbmVzKHNlbGYpOg0KICAgICAgICAgc2VsZi5hc3NlcnRF cXVhbCh3aW4uaW5jaCgyLCAxKSwgYic7J1swXSB8IGN1cnNlcy5BX1NUQU5ET1VUKQ0KICAgICAg ICAgc2VsZi5hc3NlcnRFcXVhbCh3aW4uaW5jaCgzLCAxKSwgYidhJ1swXSkNCiANCi0gICAgICAg ICMgQSBib3JkZXIgb3IgbGluZSBjaGFyYWN0ZXIgb2YgYW4gOC1iaXQgbG9jYWxlIHJvdW5kLXRy aXBzIGFzIGl0cw0KLSAgICAgICAgIyBlbmNvZGVkIGJ5dGUuICBTZWUgX2VuY29kYWJsZSBmb3Ig dGhlIGNoYXJhY3RlciBzZXQuDQotICAgICAgICBlbmNvZGluZyA9IHdpbi5lbmNvZGluZw0KKyAg ICAgICAgIyBBIGJvcmRlciBvciBsaW5lIGNoYXJhY3RlciB0aGF0IGZpdHMgYSBzaW5nbGUgY2Vs bCBieXRlIHJlYWRzIGJhY2sNCisgICAgICAgICMgdmlhIGluc3RyKCkgYXMgdGhhdCBieXRlIGFu ZCB2aWEgaW5jaCgpIGFzIHRoZSBjZWxsIHZhbHVlLg0KICAgICAgICAgZm9yIGNoIGluICgnw6kn LCAnwqQnLCAn4oKsJywgJ9GUJyk6DQogICAgICAgICAgICAgdHJ5Og0KLSAgICAgICAgICAgICAg ICBiID0gY2guZW5jb2RlKGVuY29kaW5nKQ0KKyAgICAgICAgICAgICAgICBiID0gY2guZW5jb2Rl KHdpbi5lbmNvZGluZykNCiAgICAgICAgICAgICBleGNlcHQgVW5pY29kZUVuY29kZUVycm9yOg0K ICAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgIGlmIGxlbihiKSAhPSAxOg0K ICAgICAgICAgICAgICAgICBjb250aW51ZQ0KKyAgICAgICAgICAgIHYgPSBzZWxmLl9jaGFyX2Nv ZGUoY2gpDQogICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoY2g9Y2gpOg0KICAgICAgICAg ICAgICAgICB3aW4uZXJhc2UoKQ0KICAgICAgICAgICAgICAgICB3aW4uaGxpbmUoMiwgMCwgY2gs IDUpDQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2luLmluc3RyKDIsIDAsIDUp LCBiICogNSkNCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3aW4uaW5jaCgyLCAw KSAmIGN1cnNlcy5BX0NIQVJURVhULCB2KQ0KICAgICAgICAgICAgICAgICB3aW4udmxpbmUoMCwg MCwgY2gsIDMpDQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2luLmluc3RyKDAs IDAsIDEpLCBiKQ0KICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdpbi5pbnN0cigx LCAwLCAxKSwgYikNCkBAIC0xNTEwLDcgKzE1MTEsNiBAQCBkZWYgdGVzdF9ib3JkZXJzX2FuZF9s aW5lcyhzZWxmKToNCiAgICAgICAgICAgICAgICAgaWYgb3JkKGNoKSA8IDB4MTAwOg0KICAgICAg ICAgICAgICAgICAgICAgIyBUaGUgc2FtZSBieXRlIGdpdmVuIGFzIGFuIGludC4gIEEgd2lkZSBi dWlsZCBzdG9yZXMgaXQNCiAgICAgICAgICAgICAgICAgICAgICMgdGhyb3VnaCB0aGUgbG9jYWxl LCBzbyBvbmx5IGEgTGF0aW4tMSBieXRlIHJvdW5kLXRyaXBzLg0KLSAgICAgICAgICAgICAgICAg ICAgdiA9IGJbMF0NCiAgICAgICAgICAgICAgICAgICAgIHdpbi5lcmFzZSgpDQogICAgICAgICAg ICAgICAgICAgICB3aW4uaGxpbmUoMiwgMCwgdiwgNSkNCiAgICAgICAgICAgICAgICAgICAgIHNl bGYuYXNzZXJ0RXF1YWwod2luLmluc3RyKDIsIDAsIDUpLCBiICogNSkNCkBAIC0yODk0LDEyICsy ODk0LDExIEBAIGRlZiB0ZXN0X2luaXQoc2VsZik6DQogICAgIGRlZiB0ZXN0X2luc2VydChzZWxm KToNCiAgICAgICAgICIiIlRlc3QgaW5zZXJ0aW5nIGEgcHJpbnRhYmxlIGNoYXJhY3Rlci4iIiIN CiAgICAgICAgIHNlbGYubW9ja193aW4ucmVzZXRfbW9jaygpDQotICAgICAgICBzZWxmLnRleHRi b3guZG9fY29tbWFuZChvcmQoJ2EnKSkNCi0gICAgICAgIHNlbGYubW9ja193aW4uYWRkY2guYXNz ZXJ0X2NhbGxlZF93aXRoKG9yZCgnYScpKQ0KLSAgICAgICAgc2VsZi50ZXh0Ym94LmRvX2NvbW1h bmQob3JkKCdiJykpDQotICAgICAgICBzZWxmLm1vY2tfd2luLmFkZGNoLmFzc2VydF9jYWxsZWRf d2l0aChvcmQoJ2InKSkNCi0gICAgICAgIHNlbGYudGV4dGJveC5kb19jb21tYW5kKG9yZCgnYycp KQ0KLSAgICAgICAgc2VsZi5tb2NrX3dpbi5hZGRjaC5hc3NlcnRfY2FsbGVkX3dpdGgob3JkKCdj JykpDQorICAgICAgICAjIEFuIGludGVnZXIga2V5c3Ryb2tlIGlzIGRlY29kZWQgdG8gdGV4dDog YWRkY2goKSB3b3VsZCB0YWtlIGl0IGFzIGENCisgICAgICAgICMgY29kZSBwb2ludCBvbiBhIHdp ZGUgYnVpbGQuDQorICAgICAgICBmb3IgY2ggaW4gJ2FiYyc6DQorICAgICAgICAgICAgc2VsZi50 ZXh0Ym94LmRvX2NvbW1hbmQob3JkKGNoKSkNCisgICAgICAgICAgICBzZWxmLm1vY2tfd2luLmFk ZGNoLmFzc2VydF9jYWxsZWRfd2l0aChjaCwgMCkNCiAgICAgICAgIHNlbGYubW9ja193aW4ucmVz ZXRfbW9jaygpDQogDQogICAgIGRlZiB0ZXN0X2RlbGV0ZShzZWxmKToNCmRpZmYgLS1naXQgYS9N b2R1bGVzL19jdXJzZXNtb2R1bGUuYyBiL01vZHVsZXMvX2N1cnNlc21vZHVsZS5jDQppbmRleCAx MzJiNTVjMGE1MDBmYjYuLmY5YWM1ZjA2NTRmNWU5ZSAxMDA2NDQNCi0tLSBhL01vZHVsZXMvX2N1 cnNlc21vZHVsZS5jDQorKysgYi9Nb2R1bGVzL19jdXJzZXNtb2R1bGUuYw0KQEAgLTQ2Myw3ICs0 NjMsNyBAQCBjdXJzZXNfd2luZG93X2NoZWNrX2VycihQeUN1cnNlc1dpbmRvd09iamVjdCAqd2lu LCBpbnQgY29kZSwNCiBzdGF0aWMgaW50DQogUHlDdXJzZXNfQ29udmVydFRvQ2h0eXBlKFB5Q3Vy c2VzV2luZG93T2JqZWN0ICp3aW4sIFB5T2JqZWN0ICpvYmosIGNodHlwZSAqY2gpDQogew0KLSAg ICBsb25nIHZhbHVlOw0KKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWU7DQogICAgIGlmIChQ eUJ5dGVzX0NoZWNrKG9iaikpIHsNCiAgICAgICAgIGlmIChQeUJ5dGVzX0dFVF9TSVpFKG9iaikg IT0gMSkgew0KICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsDQpAQCAt NDkzLDIwICs0OTMsMTggQEAgUHlDdXJzZXNfQ29udmVydFRvQ2h0eXBlKFB5Q3Vyc2VzV2luZG93 T2JqZWN0ICp3aW4sIFB5T2JqZWN0ICpvYmosIGNodHlwZSAqY2gpDQogICAgICAgICAgICAgYnl0 ZXMgPSBQeVVuaWNvZGVfQXNFbmNvZGVkU3RyaW5nKG9iaiwgZW5jb2RpbmcsIE5VTEwpOw0KICAg ICAgICAgICAgIGlmIChieXRlcyA9PSBOVUxMKQ0KICAgICAgICAgICAgICAgICByZXR1cm4gMDsN Ci0gICAgICAgICAgICBpZiAoUHlCeXRlc19HRVRfU0laRShieXRlcykgPT0gMSkNCi0gICAgICAg ICAgICAgICAgdmFsdWUgPSAodW5zaWduZWQgY2hhcilQeUJ5dGVzX0FTX1NUUklORyhieXRlcylb MF07DQotICAgICAgICAgICAgZWxzZQ0KLSAgICAgICAgICAgICAgICB2YWx1ZSA9IC0xOw0KLSAg ICAgICAgICAgIFB5X0RFQ1JFRihieXRlcyk7DQotICAgICAgICAgICAgaWYgKHZhbHVlIDwgMCkN CisgICAgICAgICAgICBpZiAoUHlCeXRlc19HRVRfU0laRShieXRlcykgIT0gMSkgew0KKyAgICAg ICAgICAgICAgICBQeV9ERUNSRUYoYnl0ZXMpOw0KICAgICAgICAgICAgICAgICBnb3RvIG92ZXJm bG93Ow0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICB2YWx1ZSA9ICh1bnNpZ25lZCBjaGFy KVB5Qnl0ZXNfQVNfU1RSSU5HKGJ5dGVzKVswXTsNCisgICAgICAgICAgICBQeV9ERUNSRUYoYnl0 ZXMpOw0KICAgICAgICAgfQ0KICAgICB9DQogICAgIGVsc2UgaWYgKFB5TG9uZ19DaGVja0V4YWN0 KG9iaikpIHsNCi0gICAgICAgIGludCBsb25nX292ZXJmbG93Ow0KLSAgICAgICAgdmFsdWUgPSBQ eUxvbmdfQXNMb25nQW5kT3ZlcmZsb3cob2JqLCAmbG9uZ19vdmVyZmxvdyk7DQotICAgICAgICBp ZiAobG9uZ19vdmVyZmxvdykNCi0gICAgICAgICAgICBnb3RvIG92ZXJmbG93Ow0KKyAgICAgICAg dmFsdWUgPSBQeUxvbmdfQXNVbnNpZ25lZExvbmdMb25nKG9iaik7DQorICAgICAgICBpZiAodmFs dWUgPT0gKHVuc2lnbmVkIGxvbmcgbG9uZyktMSAmJiBQeUVycl9PY2N1cnJlZCgpKQ0KKyAgICAg ICAgICAgIHJldHVybiAwOw0KICAgICB9DQogICAgIGVsc2Ugew0KICAgICAgICAgUHlFcnJfRm9y bWF0KFB5RXhjX1R5cGVFcnJvciwNCkBAIC01MTUsNyArNTEzLDcgQEAgUHlDdXJzZXNfQ29udmVy dFRvQ2h0eXBlKFB5Q3Vyc2VzV2luZG93T2JqZWN0ICp3aW4sIFB5T2JqZWN0ICpvYmosIGNodHlw ZSAqY2gpDQogICAgICAgICByZXR1cm4gMDsNCiAgICAgfQ0KICAgICAqY2ggPSAoY2h0eXBlKXZh bHVlOw0KLSAgICBpZiAoKGxvbmcpKmNoICE9IHZhbHVlKQ0KKyAgICBpZiAoKHVuc2lnbmVkIGxv bmcgbG9uZykqY2ggIT0gdmFsdWUpDQogICAgICAgICBnb3RvIG92ZXJmbG93Ow0KICAgICByZXR1 cm4gMTsNCiANCkBAIC01ODcsNyArNTg1LDcgQEAgUHlDdXJzZXNfQ29udmVydFRvQ2NoYXJfdChQ eUN1cnNlc1dpbmRvd09iamVjdCAqd2luLCBQeU9iamVjdCAqb2JqLA0KICNlbmRpZg0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgKQ0KIHsNCi0gICAgbG9uZyB2YWx1ZTsNCisgICAgdW5zaWdu ZWQgbG9uZyBsb25nIHZhbHVlOw0KIA0KICAgICBpZiAoUHlVbmljb2RlX0NoZWNrKG9iaikpIHsN CiAjaWZkZWYgSEFWRV9OQ1VSU0VTVw0KQEAgLTYxMCwxMSArNjA4LDggQEAgUHlDdXJzZXNfQ29u dmVydFRvQ2NoYXJfdChQeUN1cnNlc1dpbmRvd09iamVjdCAqd2luLCBQeU9iamVjdCAqb2JqLA0K ICAgICAgICAgdmFsdWUgPSAodW5zaWduZWQgY2hhcilQeUJ5dGVzX0FzU3RyaW5nKG9iailbMF07 DQogICAgIH0NCiAgICAgZWxzZSBpZiAoUHlMb25nX0NoZWNrRXhhY3Qob2JqKSkgew0KLSAgICAg ICAgaW50IG92ZXJmbG93Ow0KLSAgICAgICAgdmFsdWUgPSBQeUxvbmdfQXNMb25nQW5kT3ZlcmZs b3cob2JqLCAmb3ZlcmZsb3cpOw0KLSAgICAgICAgaWYgKG92ZXJmbG93KSB7DQotICAgICAgICAg ICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsDQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJpbnQgZG9lc24ndCBmaXQgaW4gbG9uZyIpOw0KKyAgICAgICAgdmFsdWUg PSBQeUxvbmdfQXNVbnNpZ25lZExvbmdMb25nKG9iaik7DQorICAgICAgICBpZiAodmFsdWUgPT0g KHVuc2lnbmVkIGxvbmcgbG9uZyktMSAmJiBQeUVycl9PY2N1cnJlZCgpKSB7DQogICAgICAgICAg ICAgcmV0dXJuIDA7DQogICAgICAgICB9DQogICAgIH0NCkBAIC02MjYsNyArNjIxLDcgQEAgUHlD dXJzZXNfQ29udmVydFRvQ2NoYXJfdChQeUN1cnNlc1dpbmRvd09iamVjdCAqd2luLCBQeU9iamVj dCAqb2JqLA0KICAgICB9DQogDQogICAgICpjaCA9IChjaHR5cGUpdmFsdWU7DQotICAgIGlmICgo bG9uZykqY2ggIT0gdmFsdWUpIHsNCisgICAgaWYgKCh1bnNpZ25lZCBsb25nIGxvbmcpKmNoICE9 IHZhbHVlKSB7DQogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfT3ZlcmZsb3dFcnJvciwNCiAg ICAgICAgICAgICAgICAgICAgICAiYnl0ZSBkb2Vzbid0IGZpdCBpbiBjaHR5cGUiKTsNCiAgICAg ICAgIHJldHVybiAwOw0KQEAgLTEwODIsMTQgKzEwNzcsMTQgQEAgYXR0cl9jb252ZXJ0ZXIoUHlP YmplY3QgKmFyZywgdm9pZCAqcHRyKQ0KIHsNCiAgICAgLyogYXR0cl90IGlzIHVuc2lnbmVkIGFu ZCBhdCBsZWFzdCBhcyB3aWRlIGFzIGNodHlwZSwgc28gYW4gYXR0cmlidXRlDQogICAgICAgIHZh bHVlIG11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlciB0aGF0IGZpdHMgaW4gYXR0cl90LiAq Lw0KLSAgICB1bnNpZ25lZCBsb25nIGF0dHIgPSBQeUxvbmdfQXNVbnNpZ25lZExvbmcoYXJnKTsN Ci0gICAgaWYgKGF0dHIgPT0gKHVuc2lnbmVkIGxvbmcpLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkg ew0KKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgYXR0ciA9IFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xv bmcoYXJnKTsNCisgICAgaWYgKGF0dHIgPT0gKHVuc2lnbmVkIGxvbmcgbG9uZyktMSAmJiBQeUVy cl9PY2N1cnJlZCgpKSB7DQogICAgICAgICByZXR1cm4gMDsNCiAgICAgfQ0KLSAgICBpZiAoYXR0 ciA+ICh1bnNpZ25lZCBsb25nKShhdHRyX3QpLTEpIHsNCisgICAgaWYgKGF0dHIgPiAodW5zaWdu ZWQgbG9uZyBsb25nKShhdHRyX3QpLTEpIHsNCiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19P dmVyZmxvd0Vycm9yLA0KLSAgICAgICAgICAgICAgICAgICAgICJhdHRyaWJ1dGUgdmFsdWUgaXMg Z3JlYXRlciB0aGFuIG1heGltdW0gKCVsdSkiLA0KLSAgICAgICAgICAgICAgICAgICAgICh1bnNp Z25lZCBsb25nKShhdHRyX3QpLTEpOw0KKyAgICAgICAgICAgICAgICAgICAgICJhdHRyaWJ1dGUg dmFsdWUgaXMgZ3JlYXRlciB0aGFuIG1heGltdW0gKCVsbHUpIiwNCisgICAgICAgICAgICAgICAg ICAgICAodW5zaWduZWQgbG9uZyBsb25nKShhdHRyX3QpLTEpOw0KICAgICAgICAgcmV0dXJuIDA7 DQogICAgIH0NCiAgICAgKihhdHRyX3QgKilwdHIgPSAoYXR0cl90KWF0dHI7DQpAQCAtMTIyNCw3 ICsxMjE5LDcgQEAgY29tcGxleGNoYXJfZ2V0X2F0dHIoUHlPYmplY3QgKnNlbGYsIHZvaWQgKlB5 X1VOVVNFRChjbG9zdXJlKSkNCiAgICAgICAgICAgICAmX1B5Q3Vyc2VzQ29tcGxleENoYXJPYmpl Y3RfQ0FTVChzZWxmKS0+Y3ZhbCwgJmF0dHJzLCAmcGFpcikgPCAwKSB7DQogICAgICAgICByZXR1 cm4gTlVMTDsNCiAgICAgfQ0KLSAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcoKHVu c2lnbmVkIGxvbmcpYXR0cnMpOw0KKyAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmdM b25nKCh1bnNpZ25lZCBsb25nIGxvbmcpYXR0cnMpOw0KIH0NCiANCiBzdGF0aWMgUHlPYmplY3Qg Kg0KQEAgLTI2MDMsNyArMjU5OCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqDQogX2N1cnNlc193aW5k b3dfZ2V0YXR0cnNfaW1wbChQeUN1cnNlc1dpbmRvd09iamVjdCAqc2VsZikNCiAvKltjbGluaWMg ZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ODM1ZjQ5OTIwNTIwNGVjNCBpbnB1dD1iZjU2YTBh ZjViNzMwYmQxXSovDQogew0KLSAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcoKHVu c2lnbmVkIGxvbmcpKGF0dHJfdClnZXRhdHRycyhzZWxmLT53aW4pKTsNCisgICAgcmV0dXJuIFB5 TG9uZ19Gcm9tVW5zaWduZWRMb25nTG9uZygodW5zaWduZWQgbG9uZyBsb25nKShhdHRyX3QpZ2V0 YXR0cnMoc2VsZi0+d2luKSk7DQogfQ0KIA0KIC8qW2NsaW5pYyBpbnB1dF0NCkBAIC0zMTQyLDcg KzMxMzcsNyBAQCBfY3Vyc2VzX3dpbmRvd19nZXRia2dkX2ltcGwoUHlDdXJzZXNXaW5kb3dPYmpl Y3QgKnNlbGYpDQogICAgICAgICBjdXJzZXNfd2luZG93X3NldF9lcnJvcihzZWxmLCAiZ2V0Ymtn ZCIsIE5VTEwpOw0KICAgICAgICAgcmV0dXJuIE5VTEw7DQogICAgIH0NCi0gICAgcmV0dXJuIFB5 TG9uZ19Gcm9tTG9uZyhydG4pOw0KKyAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmdM b25nKHJ0bik7DQogfQ0KIA0KIC8qW2NsaW5pYyBpbnB1dF0NCkBAIC0zNzEzLDkgKzM3MDgsOCBA QCBfY3Vyc2VzX3dpbmRvd19pbmNoX2ltcGwoUHlDdXJzZXNXaW5kb3dPYmplY3QgKnNlbGYsIGlu dCBncm91cF9yaWdodF8xLA0KICAgICBjaHR5cGUgcnRuOw0KICAgICBjb25zdCBjaGFyICpmdW5j bmFtZTsNCiAjaWZkZWYgSEFWRV9OQ1VSU0VTVw0KLSAgICAvKiBuY3Vyc2VzdydzIHdpbmNoKCkg cmV0dXJucyB0aGUgY2hhcmFjdGVyJ3Mgd2hvbGUgY29kZSBwb2ludCBpbnN0ZWFkIG9mDQotICAg ICAgIGl0cyBsb2NhbGUgYnl0ZSwgb3ZlcmZsb3dpbmcgdGhlIGNodHlwZSdzIDgtYml0IGNoYXJh Y3RlciBmaWVsZCBpbnRvIHRoZQ0KLSAgICAgICBjb2xvciBhbmQgYXR0cmlidXRlIGJpdHM7IHJl YWQgdGhlIHdpZGUgY2VsbCBhbmQgcmVidWlsZCBpdCBpbnN0ZWFkLiAqLw0KKyAgICAvKiBuY3Vy c2VzdydzIHdpbmNoKCkgcmV0dXJucyB0aGUgd2hvbGUgY29kZSBwb2ludCwgd2hpY2ggb3ZlcmZs b3dzIHRoZQ0KKyAgICAgICBjaHR5cGUncyA4LWJpdCBjaGFyYWN0ZXIgZmllbGQgaW50byB0aGUg Y29sb3IgYW5kIGF0dHJpYnV0ZSBiaXRzLiAqLw0KICAgICBjY2hhcl90IGNlbGwgPSB7MH07DQog ICAgIGludCByYzsNCiAgICAgaWYgKCFncm91cF9yaWdodF8xKSB7DQpAQCAtMzc1OSw3ICszNzUz LDcgQEAgX2N1cnNlc193aW5kb3dfaW5jaF9pbXBsKFB5Q3Vyc2VzV2luZG93T2JqZWN0ICpzZWxm LCBpbnQgZ3JvdXBfcmlnaHRfMSwNCiAgICAgICAgIHJldHVybiBOVUxMOw0KICAgICB9DQogI2Vu ZGlmDQotICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZyhydG4pOw0KKyAgICByZXR1 cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmdMb25nKHJ0bik7DQogfQ0KIA0KIFB5RG9jX1NUUlZB UihfY3Vyc2VzX3dpbmRvd19pbnN0cl9fZG9jX18sDQpAQCAtNTc3Niw3ICs1NzcwLDcgQEAgX2N1 cnNlc19jb2xvcl9wYWlyX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgaW50IHBhaXJfbnVtYmVyKQ0K ICAgICAgICAgICAgICAgICAgICAgIHBhaXJfbnVtYmVyLCAoaW50KVBBSVJfTlVNQkVSKEFfQ09M T1IpKTsNCiAgICAgICAgIHJldHVybiBOVUxMOw0KICAgICB9DQotICAgIHJldHVybiBQeUxvbmdf RnJvbUxvbmcoYXR0cik7DQorICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZ0xvbmco YXR0cik7DQogfQ0KIA0KIC8qW2NsaW5pYyBpbnB1dF0NCkBAIC02NTYyLDkgKzY1NTYsMTQgQEAg Y3Vyc2VzX2luaXRfZGljdChQeU9iamVjdCAqbW9kdWxlKQ0KICAgICB9DQogICAgIC8qIFRoaXMg d2FzIG1vdmVkIGZyb20gaW5pdGN1cnNlcygpIGJlY2F1c2UgaXQgY29yZSBkdW1wZWQgb24gU0dJ LA0KICAgICAgICB3aGVyZSB0aGV5J3JlIG5vdCBkZWZpbmVkIHVudGlsIHlvdSd2ZSBjYWxsZWQg aW5pdHNjcigpICovDQorICAgIC8qIFVzZSBsb25nIGxvbmcsIG5vdCBsb25nOiBhIGNodHlwZSBj b25zdGFudCAodGhlIEFfKiBhdHRyaWJ1dGVzLCBBQ1NfKg0KKyAgICAgICBhbmQga2V5IGNvZGVz KSBjYW4gc2V0IGJpdHMgYmV5b25kIGEgMzItYml0IGxvbmcsIHdoaWNoIGlzIHdoYXQgbG9uZyBp cw0KKyAgICAgICBvbiBMTFA2NCBwbGF0Zm9ybXMgc3VjaCBhcyBXaW5kb3dzIC0tIEFfRElNICgw eDgwMDAwMDAwKSB3b3VsZCBvdGhlcndpc2UNCisgICAgICAgYmUgc2lnbi1leHRlbmRlZCB0byBh IG5lZ2F0aXZlIG51bWJlci4gIGxvbmcgbG9uZyBpcyBhdCBsZWFzdCA2NCBiaXRzDQorICAgICAg IGV2ZXJ5d2hlcmUgYW5kIHN0aWxsIHJlcHJlc2VudHMgdGhlIG5lZ2F0aXZlIEVSUiAoLTEpLiAq Lw0KICNkZWZpbmUgU2V0RGljdEludChOQU1FLCBWQUxVRSkgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXA0KICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgUHlPYmplY3QgKnZhbHVl ID0gUHlMb25nX0Zyb21Mb25nKChsb25nKShWQUxVRSkpOyAgICAgICAgICAgXA0KKyAgICAgICAg UHlPYmplY3QgKnZhbHVlID0gUHlMb25nX0Zyb21VbnNpZ25lZExvbmdMb25nKCh1bnNpZ25lZCBs b25nIGxvbmcpKFZBTFVFKSk7ICBcDQogICAgICAgICBpZiAodmFsdWUgPT0gTlVMTCkgeyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQogICAgICAgICAgICAgcmV0dXJu IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQogICAg ICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcDQpAQCAtNzUzMSw3ICs3NTMwLDcgQEAgX2N1cnNlc19wYWlyX2NvbnRlbnRfaW1w bChQeU9iamVjdCAqbW9kdWxlLCBpbnQgcGFpcl9udW1iZXIpDQogQHBlcm1pdF9sb25nX3N1bW1h cnkNCiBfY3Vyc2VzLnBhaXJfbnVtYmVyDQogDQotICAgIGF0dHI6IGludA0KKyAgICBhdHRyOiBh dHRyDQogICAgIC8NCiANCiBSZXR1cm4gdGhlIG51bWJlciBvZiB0aGUgY29sb3ItcGFpciBzZXQg YnkgdGhlIHNwZWNpZmllZCBhdHRyaWJ1dGUgdmFsdWUuDQpAQCAtNzU0MCw4ICs3NTM5LDggQEAg Y29sb3JfcGFpcigpIGlzIHRoZSBjb3VudGVycGFydCB0byB0aGlzIGZ1bmN0aW9uLg0KIFtjbGlu aWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8NCiANCiBzdGF0aWMgUHlPYmplY3QgKg0KLV9jdXJz ZXNfcGFpcl9udW1iZXJfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgYXR0cikNCi0vKltjbGlu aWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ODViY2U3ZDY1YzBhYTNmNCBpbnB1dD1iMTEx NTJhNzhjMmY5YWJmXSovDQorX2N1cnNlc19wYWlyX251bWJlcl9pbXBsKFB5T2JqZWN0ICptb2R1 bGUsIGF0dHJfdCBhdHRyKQ0KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0w NGNhZmM5MDgzMzI5MTk3IGlucHV0PTU2MjI3M2IxYTEyYTA2ZDJdKi8NCiB7DQogICAgIFB5Q3Vy c2VzU3RhdGVmdWxJbml0aWFsaXNlZChtb2R1bGUpOw0KICAgICBQeUN1cnNlc1N0YXRlZnVsSW5p dGlhbGlzZWRDb2xvcihtb2R1bGUpOw0KQEAgLTc4NzIsNyArNzg3MSw3IEBAIF9jdXJzZXNfc3Rh cnRfY29sb3JfaW1wbChQeU9iamVjdCAqbW9kdWxlKQ0KICAgICB9DQogI2RlZmluZSBESUNUX0FE RF9JTlRfVkFMVUUoTkFNRSwgVkFMVUUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQog ICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcDQotICAgICAgICBQeU9iamVjdCAqdmFsdWUgPSBQeUxvbmdfRnJvbUxvbmco KGxvbmcpKFZBTFVFKSk7ICAgICAgICAgICBcDQorICAgICAgICBQeU9iamVjdCAqdmFsdWUgPSBQ eUxvbmdfRnJvbVVuc2lnbmVkTG9uZ0xvbmcoKHVuc2lnbmVkIGxvbmcgbG9uZykoVkFMVUUpKTsg IFwNCiAgICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMKSB7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwNCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCiAgICAgICAgIH0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCkBAIC03OTE3 LDcgKzc5MTYsNyBAQCBfY3Vyc2VzX3Rlcm1fYXR0cnNfaW1wbChQeU9iamVjdCAqbW9kdWxlKQ0K IHsNCiAgICAgUHlDdXJzZXNTdGF0ZWZ1bEluaXRpYWxpc2VkKG1vZHVsZSk7DQogDQotICAgIHJl dHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZyh0ZXJtX2F0dHJzKCkpOw0KKyAgICByZXR1cm4g UHlMb25nX0Zyb21VbnNpZ25lZExvbmdMb25nKHRlcm1fYXR0cnMoKSk7DQogfQ0KICNlbmRpZiAv KiBIQVZFX0NVUlNFU19URVJNX0FUVFJTICovDQogDQpAQCAtODQzNywxNSArODQzNiwxNSBAQCBO b0FyZ05vUmV0dXJuRnVuY3Rpb25Cb2R5KHNsa190b3VjaCkNCiAvKltjbGluaWMgaW5wdXRdDQog X2N1cnNlcy5zbGtfYXR0cm9uDQogDQotICAgIGF0dHI6IGxvbmcNCisgICAgYXR0cjogYXR0cg0K ICAgICAvDQogDQogQWRkIHRoZSBnaXZlbiBjaHR5cGUgYXR0cmlidXRlcyB0byB0aGUgc29mdCBs YWJlbHMuDQogW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLw0KIA0KIHN0YXRpYyBQeU9i amVjdCAqDQotX2N1cnNlc19zbGtfYXR0cm9uX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgbG9uZyBh dHRyKQ0KLS8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0wMWFhMjk4NDhhNThh YjUwIGlucHV0PWZhMTk4YTYwNGUzZWVjMDRdKi8NCitfY3Vyc2VzX3Nsa19hdHRyb25faW1wbChQ eU9iamVjdCAqbW9kdWxlLCBhdHRyX3QgYXR0cikNCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBj b2RlOiBvdXRwdXQ9YzJhNGJmYWM4ZGRiYmYyMCBpbnB1dD1jMmNmZmZlYjdjZTZhODZlXSovDQog ew0KICAgICBQeUN1cnNlc1N0YXRlZnVsSW5pdGlhbGlzZWQobW9kdWxlKTsNCiAgICAgcmV0dXJu IGN1cnNlc19jaGVja19lcnIobW9kdWxlLCBzbGtfYXR0cm9uKChjaHR5cGUpYXR0ciksDQpAQCAt ODQ1NSwxNSArODQ1NCwxNSBAQCBfY3Vyc2VzX3Nsa19hdHRyb25faW1wbChQeU9iamVjdCAqbW9k dWxlLCBsb25nIGF0dHIpDQogLypbY2xpbmljIGlucHV0XQ0KIF9jdXJzZXMuc2xrX2F0dHJvZmYN CiANCi0gICAgYXR0cjogbG9uZw0KKyAgICBhdHRyOiBhdHRyDQogICAgIC8NCiANCiBSZW1vdmUg dGhlIGdpdmVuIGNodHlwZSBhdHRyaWJ1dGVzIGZyb20gdGhlIHNvZnQgbGFiZWxzLg0KIFtjbGlu aWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8NCiANCiBzdGF0aWMgUHlPYmplY3QgKg0KLV9jdXJz ZXNfc2xrX2F0dHJvZmZfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBsb25nIGF0dHIpDQotLypbY2xp bmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTdiMTcyY2MzN2ExNzgxMWYgaW5wdXQ9MjFk YWI1NWQ0M2QzMGI4Zl0qLw0KK19jdXJzZXNfc2xrX2F0dHJvZmZfaW1wbChQeU9iamVjdCAqbW9k dWxlLCBhdHRyX3QgYXR0cikNCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9 MzIxYTNiNGRjNjExMTliYiBpbnB1dD0yNTkzMDI3ZTAzY2JkMzAyXSovDQogew0KICAgICBQeUN1 cnNlc1N0YXRlZnVsSW5pdGlhbGlzZWQobW9kdWxlKTsNCiAgICAgcmV0dXJuIGN1cnNlc19jaGVj a19lcnIobW9kdWxlLCBzbGtfYXR0cm9mZigoY2h0eXBlKWF0dHIpLA0KQEAgLTg0NzMsMTUgKzg0 NzIsMTUgQEAgX2N1cnNlc19zbGtfYXR0cm9mZl9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGxvbmcg YXR0cikNCiAvKltjbGluaWMgaW5wdXRdDQogX2N1cnNlcy5zbGtfYXR0cnNldA0KIA0KLSAgICBh dHRyOiBsb25nDQorICAgIGF0dHI6IGF0dHINCiAgICAgLw0KIA0KIFNldCB0aGUgY2h0eXBlIGF0 dHJpYnV0ZXMgb2YgdGhlIHNvZnQgbGFiZWxzLg0KIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNv ZGVdKi8NCiANCiBzdGF0aWMgUHlPYmplY3QgKg0KLV9jdXJzZXNfc2xrX2F0dHJzZXRfaW1wbChQ eU9iamVjdCAqbW9kdWxlLCBsb25nIGF0dHIpDQotLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29k ZTogb3V0cHV0PTExMzllMmIwZjc1N2VkZmQgaW5wdXQ9ZDVjNzk4OTU2YTVmMDQ2YV0qLw0KK19j dXJzZXNfc2xrX2F0dHJzZXRfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBhdHRyX3QgYXR0cikNCisv KltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZjM5NmI3NDVjYjIzZmMwMSBpbnB1 dD01ZmFhZmRhNDQ1YjJiMTU4XSovDQogew0KICAgICBQeUN1cnNlc1N0YXRlZnVsSW5pdGlhbGlz ZWQobW9kdWxlKTsNCiAgICAgcmV0dXJuIGN1cnNlc19jaGVja19lcnIobW9kdWxlLCBzbGtfYXR0 cnNldCgoY2h0eXBlKWF0dHIpLA0KQEAgLTg1MDAsNyArODQ5OSw3IEBAIF9jdXJzZXNfc2xrX2F0 dHJfaW1wbChQeU9iamVjdCAqbW9kdWxlKQ0KIC8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6 IG91dHB1dD02ZDQ3NzUyZjgyYmRjMjlmIGlucHV0PWJlMzg4MDVmZGVjNTIxNDldKi8NCiB7DQog ICAgIFB5Q3Vyc2VzU3RhdGVmdWxJbml0aWFsaXNlZChtb2R1bGUpOw0KLSAgICByZXR1cm4gUHlM b25nX0Zyb21VbnNpZ25lZExvbmcoKHVuc2lnbmVkIGxvbmcpc2xrX2F0dHIoKSk7DQorICAgIHJl dHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZ0xvbmcoKHVuc2lnbmVkIGxvbmcgbG9uZylzbGtf YXR0cigpKTsNCiB9DQogI2VuZGlmDQogDQpAQCAtOTA4MCw2ICs5MDc5LDE3IEBAIGN1cnNlc21v ZHVsZV9leGVjKFB5T2JqZWN0ICptb2R1bGUpDQogICAgICAgICByZXR1cm4gLTE7DQogICAgIH0N CiANCisgICAgLyogV2hldGhlciBhIGNlbGwgaG9sZHMgYSBjaGFyYWN0ZXIgb3IgYSBzaW5nbGUg Ynl0ZSBvZiB0aGUgbG9jYWxlDQorICAgICAgIGVuY29kaW5nLCBkZWNpZGVkIHdoZW4gdGhlIG1v ZHVsZSBpcyBidWlsdC4gKi8NCisjaWZkZWYgSEFWRV9OQ1VSU0VTVw0KKyAgICByYyA9IFB5RGlj dF9TZXRJdGVtU3RyaW5nKG1vZHVsZV9kaWN0LCAiX3dpZGVfY2hhcmFjdGVyX3N1cHBvcnQiLCBQ eV9UcnVlKTsNCisjZWxzZQ0KKyAgICByYyA9IFB5RGljdF9TZXRJdGVtU3RyaW5nKG1vZHVsZV9k aWN0LCAiX3dpZGVfY2hhcmFjdGVyX3N1cHBvcnQiLCBQeV9GYWxzZSk7DQorI2VuZGlmDQorICAg IGlmIChyYyA8IDApIHsNCisgICAgICAgIHJldHVybiAtMTsNCisgICAgfQ0KKw0KICAgICAvKiBN YWtlIHRoZSB2ZXJzaW9uIGF2YWlsYWJsZSAqLw0KICAgICBQeU9iamVjdCAqY3Vyc2VzX3ZlcnNp b24gPSBQeUJ5dGVzX0Zyb21TdHJpbmcoUHlDdXJzZXNWZXJzaW9uKTsNCiAgICAgaWYgKGN1cnNl c192ZXJzaW9uID09IE5VTEwpIHsNCkBAIC05MTE4LDcgKzkxMjgsNyBAQCBjdXJzZXNtb2R1bGVf ZXhlYyhQeU9iamVjdCAqbW9kdWxlKQ0KIA0KICNkZWZpbmUgU2V0RGljdEludChOQU1FLCBWQUxV RSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KICAgICBkbyB7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0K LSAgICAgICAgUHlPYmplY3QgKnZhbHVlID0gUHlMb25nX0Zyb21Mb25nKChsb25nKShWQUxVRSkp OyAgICAgICAgICAgXA0KKyAgICAgICAgUHlPYmplY3QgKnZhbHVlID0gUHlMb25nX0Zyb21VbnNp Z25lZExvbmdMb25nKCh1bnNpZ25lZCBsb25nIGxvbmcpKFZBTFVFKSk7ICBcDQogICAgICAgICBp ZiAodmFsdWUgPT0gTlVMTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcDQogICAgICAgICAgICAgcmV0dXJuIC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcDQogICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9j bGluaWMvX2N1cnNlc21vZHVsZS5jLmggYi9Nb2R1bGVzL2NsaW5pYy9fY3Vyc2VzbW9kdWxlLmMu aA0KaW5kZXggNzBkOTliNGJmMzUxYTIxLi5kZmQ1ODliYTQ1MDg5ZTcgMTAwNjQ0DQotLS0gYS9N b2R1bGVzL2NsaW5pYy9fY3Vyc2VzbW9kdWxlLmMuaA0KKysrIGIvTW9kdWxlcy9jbGluaWMvX2N1 cnNlc21vZHVsZS5jLmgNCkBAIC00Njg0LDE2ICs0Njg0LDE1IEBAIFB5RG9jX1NUUlZBUihfY3Vy c2VzX3BhaXJfbnVtYmVyX19kb2NfXywNCiAgICAgeyJwYWlyX251bWJlciIsIChQeUNGdW5jdGlv bilfY3Vyc2VzX3BhaXJfbnVtYmVyLCBNRVRIX08sIF9jdXJzZXNfcGFpcl9udW1iZXJfX2RvY19f fSwNCiANCiBzdGF0aWMgUHlPYmplY3QgKg0KLV9jdXJzZXNfcGFpcl9udW1iZXJfaW1wbChQeU9i amVjdCAqbW9kdWxlLCBpbnQgYXR0cik7DQorX2N1cnNlc19wYWlyX251bWJlcl9pbXBsKFB5T2Jq ZWN0ICptb2R1bGUsIGF0dHJfdCBhdHRyKTsNCiANCiBzdGF0aWMgUHlPYmplY3QgKg0KIF9jdXJz ZXNfcGFpcl9udW1iZXIoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZykNCiB7DQogICAg IFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOw0KLSAgICBpbnQgYXR0cjsNCisgICAgYXR0 cl90IGF0dHI7DQogDQotICAgIGF0dHIgPSBQeUxvbmdfQXNJbnQoYXJnKTsNCi0gICAgaWYgKGF0 dHIgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkgew0KKyAgICBpZiAoIWF0dHJfY29udmVydGVy KGFyZywgJmF0dHIpKSB7DQogICAgICAgICBnb3RvIGV4aXQ7DQogICAgIH0NCiAgICAgcmV0dXJu X3ZhbHVlID0gX2N1cnNlc19wYWlyX251bWJlcl9pbXBsKG1vZHVsZSwgYXR0cik7DQpAQCAtNTY3 NSwxNiArNTY3NCwxNSBAQCBQeURvY19TVFJWQVIoX2N1cnNlc19zbGtfYXR0cm9uX19kb2NfXywN CiAgICAgeyJzbGtfYXR0cm9uIiwgKFB5Q0Z1bmN0aW9uKV9jdXJzZXNfc2xrX2F0dHJvbiwgTUVU SF9PLCBfY3Vyc2VzX3Nsa19hdHRyb25fX2RvY19ffSwNCiANCiBzdGF0aWMgUHlPYmplY3QgKg0K LV9jdXJzZXNfc2xrX2F0dHJvbl9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGxvbmcgYXR0cik7DQor X2N1cnNlc19zbGtfYXR0cm9uX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgYXR0cl90IGF0dHIpOw0K IA0KIHN0YXRpYyBQeU9iamVjdCAqDQogX2N1cnNlc19zbGtfYXR0cm9uKFB5T2JqZWN0ICptb2R1 bGUsIFB5T2JqZWN0ICphcmcpDQogew0KICAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVM TDsNCi0gICAgbG9uZyBhdHRyOw0KKyAgICBhdHRyX3QgYXR0cjsNCiANCi0gICAgYXR0ciA9IFB5 TG9uZ19Bc0xvbmcoYXJnKTsNCi0gICAgaWYgKGF0dHIgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQo KSkgew0KKyAgICBpZiAoIWF0dHJfY29udmVydGVyKGFyZywgJmF0dHIpKSB7DQogICAgICAgICBn b3RvIGV4aXQ7DQogICAgIH0NCiAgICAgcmV0dXJuX3ZhbHVlID0gX2N1cnNlc19zbGtfYXR0cm9u X2ltcGwobW9kdWxlLCBhdHRyKTsNCkBAIC01NzAzLDE2ICs1NzAxLDE1IEBAIFB5RG9jX1NUUlZB UihfY3Vyc2VzX3Nsa19hdHRyb2ZmX19kb2NfXywNCiAgICAgeyJzbGtfYXR0cm9mZiIsIChQeUNG dW5jdGlvbilfY3Vyc2VzX3Nsa19hdHRyb2ZmLCBNRVRIX08sIF9jdXJzZXNfc2xrX2F0dHJvZmZf X2RvY19ffSwNCiANCiBzdGF0aWMgUHlPYmplY3QgKg0KLV9jdXJzZXNfc2xrX2F0dHJvZmZfaW1w bChQeU9iamVjdCAqbW9kdWxlLCBsb25nIGF0dHIpOw0KK19jdXJzZXNfc2xrX2F0dHJvZmZfaW1w bChQeU9iamVjdCAqbW9kdWxlLCBhdHRyX3QgYXR0cik7DQogDQogc3RhdGljIFB5T2JqZWN0ICoN CiBfY3Vyc2VzX3Nsa19hdHRyb2ZmKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmcpDQog ew0KICAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsNCi0gICAgbG9uZyBhdHRyOw0K KyAgICBhdHRyX3QgYXR0cjsNCiANCi0gICAgYXR0ciA9IFB5TG9uZ19Bc0xvbmcoYXJnKTsNCi0g ICAgaWYgKGF0dHIgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkgew0KKyAgICBpZiAoIWF0dHJf Y29udmVydGVyKGFyZywgJmF0dHIpKSB7DQogICAgICAgICBnb3RvIGV4aXQ7DQogICAgIH0NCiAg ICAgcmV0dXJuX3ZhbHVlID0gX2N1cnNlc19zbGtfYXR0cm9mZl9pbXBsKG1vZHVsZSwgYXR0cik7 DQpAQCAtNTczMSwxNiArNTcyOCwxNSBAQCBQeURvY19TVFJWQVIoX2N1cnNlc19zbGtfYXR0cnNl dF9fZG9jX18sDQogICAgIHsic2xrX2F0dHJzZXQiLCAoUHlDRnVuY3Rpb24pX2N1cnNlc19zbGtf YXR0cnNldCwgTUVUSF9PLCBfY3Vyc2VzX3Nsa19hdHRyc2V0X19kb2NfX30sDQogDQogc3RhdGlj IFB5T2JqZWN0ICoNCi1fY3Vyc2VzX3Nsa19hdHRyc2V0X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwg bG9uZyBhdHRyKTsNCitfY3Vyc2VzX3Nsa19hdHRyc2V0X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwg YXR0cl90IGF0dHIpOw0KIA0KIHN0YXRpYyBQeU9iamVjdCAqDQogX2N1cnNlc19zbGtfYXR0cnNl dChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJnKQ0KIHsNCiAgICAgUHlPYmplY3QgKnJl dHVybl92YWx1ZSA9IE5VTEw7DQotICAgIGxvbmcgYXR0cjsNCisgICAgYXR0cl90IGF0dHI7DQog DQotICAgIGF0dHIgPSBQeUxvbmdfQXNMb25nKGFyZyk7DQotICAgIGlmIChhdHRyID09IC0xICYm IFB5RXJyX09jY3VycmVkKCkpIHsNCisgICAgaWYgKCFhdHRyX2NvbnZlcnRlcihhcmcsICZhdHRy KSkgew0KICAgICAgICAgZ290byBleGl0Ow0KICAgICB9DQogICAgIHJldHVybl92YWx1ZSA9IF9j dXJzZXNfc2xrX2F0dHJzZXRfaW1wbChtb2R1bGUsIGF0dHIpOw0KQEAgLTYyMzgsNCArNjIzNCw0 IEBAIF9jdXJzZXNfaGFzX2V4dGVuZGVkX2NvbG9yX3N1cHBvcnQoUHlPYmplY3QgKm1vZHVsZSwg UHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkDQogI2lmbmRlZiBfQ1VSU0VTX0FTU1VNRV9ERUZB VUxUX0NPTE9SU19NRVRIT0RERUYNCiAgICAgI2RlZmluZSBfQ1VSU0VTX0FTU1VNRV9ERUZBVUxU X0NPTE9SU19NRVRIT0RERUYNCiAjZW5kaWYgLyogIWRlZmluZWQoX0NVUlNFU19BU1NVTUVfREVG QVVMVF9DT0xPUlNfTUVUSE9EREVGKSAqLw0KLS8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6 IG91dHB1dD1hZTEzNTk5NjRmZWVmZDY0IGlucHV0PWE5MDQ5MDU0MDEzYTFiNzddKi8NCisvKltj bGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9Y2I1NTI1Yzg4YWU1YzQ0MCBpbnB1dD1h OTA0OTA1NDAxM2ExYjc3XSovDQoNCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fClB5dGhvbi1jaGVja2lucyBtYWlsaW5nIGxpc3QgLS0gcHl0aG9uLWNoZWNr aW5zQHB5dGhvbi5vcmcKVG8gdW5zdWJzY3JpYmUgc2VuZCBhbiBlbWFpbCB0byBweXRob24tY2hl Y2tpbnMtbGVhdmVAcHl0aG9uLm9yZwpodHRwczovL21haWwucHl0aG9uLm9yZy9tYWlsbWFuMy8v bGlzdHMvcHl0aG9uLWNoZWNraW5zLnB5dGhvbi5vcmcKTWVtYmVyIGFkZHJlc3M6IHB5dGhvbi1w eXRob24tY2hlY2tpbnNAbS5nbWFuZS1teC5vcmcK