Re: [PATCH 2/2] aarch64: use [SU]ADDLP/[SU]ADALP for widening sum reductions
Kyrylo Tkachov <[email protected]> Tue, 4 Aug 2026 13:26:12 +0000
| Newsgroups | gmane.comp.gcc.patches |
|---|---|
| Message-ID | <[email protected]> |
SGkgVGFtYXIsDQoNCj4gT24gNCBBdWcgMjAyNiwgYXQgMTQ6NTIsIFRhbWFyIENocmlzdGluYSA8 dGFtYXIuY2hyaXN0aW5hQGFybS5jb20+IHdyb3RlOg0KPiANCj4gSGkgS3lyaWxsLA0KPiANCj4+ IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+PiBGcm9tOiBrdGthY2hvdkBudmlkaWEuY29t IDxrdGthY2hvdkBudmlkaWEuY29tPg0KPj4gU2VudDogMDQgQXVndXN0IDIwMjYgMTM6MzkNCj4+ IFRvOiBnY2MtcGF0Y2hlc0BnY2MuZ251Lm9yZw0KPj4gQ2M6IFRhbWFyIENocmlzdGluYSA8VGFt YXIuQ2hyaXN0aW5hQGFybS5jb20+OyByZ3VlbnRoZXJAc3VzZS5kZTsgS3lyeWxvDQo+PiBUa2Fj aG92IDxrdGthY2hvdkBudmlkaWEuY29tPg0KPj4gU3ViamVjdDogW1BBVENIIDIvMl0gYWFyY2g2 NDogdXNlIFtTVV1BRERMUC9bU1VdQURBTFAgZm9yIHdpZGVuaW5nIHN1bQ0KPj4gcmVkdWN0aW9u cw0KPj4gDQo+PiBGcm9tOiBLeXJ5bG8gVGthY2hvdiA8a3RrYWNob3ZAbnZpZGlhLmNvbT4NCj4+ IA0KPj4gVGhlIEFkdmFuY2VkIFNJTUQgd2lkZW5fW3N1XXN1bSBvcHRhYnMgb25seSBjb3ZlciBh IHNpbmdsZSB3aWRlbmluZyBzdGVwLA0KPj4gZXhwYW5kZWQgYXMgYSBkZXBlbmRlbnQgPHN1PmFk ZHcgKyA8c3U+YWRkdzIgcGFpciwgcGx1cyBhIDR4IGZvcm0gdGhhdA0KPj4gcmVxdWlyZXMgZG90 IHByb2R1Y3QuICBBIHJlZHVjdGlvbiBpbnRvIGFuIGFjY3VtdWxhdG9yIHRoYXQgaXMgbW9yZSB0 aGFuDQo+PiB0d2ljZSBhcyB3aWRlIGFzIHRoZSBkYXRhIHRoZXJlZm9yZSBoYXMgdG8gZXh0ZW5k IHRoZSBpbnB1dCBleHBsaWNpdGx5IGFuZA0KPj4gdGhlbiBpc3N1ZSBvbmUgd2lkZW5pbmcgYWRk IHBlciBoYWxmIHZlY3Rvci4gIFN1bW1pbmcgYnl0ZXMgaW50byBhIDY0LWJpdA0KPj4gYWNjdW11 bGF0b3IgY29zdHMgZmlmdGVlbiBTSU1EIG9wZXJhdGlvbnMgcGVyIDE2IGJ5dGVzIG9mIGlucHV0 Lg0KPj4gDQo+PiBbU1VdQURETFAgYW5kIFtTVV1BREFMUCBhZGQgYWRqYWNlbnQgbGFuZSBwYWly cyBpbnRvIHRoZSBuZXh0IHdpZGVyDQo+PiBlbGVtZW50LCBzbyBhIGNoYWluIG9mIHRoZW0gZXhw cmVzc2VzIGFueSBwb3dlci1vZi10d28gd2lkZW5pbmcgc3VtDQo+PiByZWR1Y3Rpb24gaW4gb25l IG9wZXJhdGlvbiBwZXIgc3RlcC4gIFRoZSByZWdyb3VwaW5nIGlzIGV4YWN0IGJlY2F1c2UgdGhl DQo+PiBzdW0gb2YgdHdvIGVsZW1lbnRzIGFsd2F5cyBmaXRzIGluIHRoZSBkb3VibGVkIGVsZW1l bnQgd2lkdGgsIGFuZCB0aGUNCj4+IGdyb3VwaW5nIG9mIGxhbmVzIGluc2lkZSBhIHJlZHVjdGlv biBhY2N1bXVsYXRvciBpcyBhbHJlYWR5IHVuY29uc3RyYWluZWQNCj4+IGZvciBXSURFTl9TVU1f RVhQUiwgd2hpY2ggdGhlIGV4aXN0aW5nIGRvdCBwcm9kdWN0IGJhc2VkIDR4IGV4cGFuZGVyIGFs c28NCj4+IHJlbGllcyBvbi4NCj4+IA0KPj4gRXhwYW5kIHRoZSAyeCBmb3JtcyBhcyBhIHNpbmds ZSBbU1VdQURBTFAsIGFkZCB0aGUgbWlzc2luZyBWNFNJIDwtIFYxNlFJDQo+PiBhbmQgVjJTSSA8 LSBWOFFJIGZvcm1zIGZvciAhVEFSR0VUX0RPVFBST0QsIGFuZCBhZGQgdGhlIFYyREkgPC0gVjhI SSBhbmQNCj4+IFYyREkgPC0gVjE2UUkgZm9ybXMgdGhhdCBubyBleHBhbmRlciBjb3ZlcmVkLiAg QWxsIG9mIHRoZW0gYXJlIGJ1aWx0IGJ5DQo+PiBhYXJjaDY0X2V4cGFuZF93aWRlbl9zdW0sIHdo aWNoIGhhbHZlcyB0aGUgbGFuZSBjb3VudCB3aXRoIFtTVV1BRERMUA0KPj4gdW50aWwNCj4+IG9u ZSBwYWlyd2lzZSBzdGVwIHJlbWFpbnMgYW5kIHRoZW4gYWNjdW11bGF0ZXMgd2l0aCBbU1VdQURB TFAuDQo+PiANCj4+IEZvciBhIHN1bSBvZiB1bnNpZ25lZCBjaGFyIGludG8gbG9uZyB0aGUgaW5u ZXIgbG9vcCBjaGFuZ2VzIGZyb20NCj4+IA0KPj4gbGRyIHEzMCwgW3gxXSwgMTYNCj4+IHppcDEg djI4LjE2YiwgdjMwLjE2YiwgdjI5LjE2Yg0KPj4gemlwMiB2MzAuMTZiLCB2MzAuMTZiLCB2Mjku MTZiDQo+PiB6aXAxIHYyNi44aCwgdjI4LjhoLCB2MjkuOGgNCj4+IHppcDIgdjI4LjhoLCB2Mjgu OGgsIHYyOS44aA0KPj4gemlwMSB2MjcuOGgsIHYzMC44aCwgdjI5LjhoDQo+PiB6aXAyIHYzMC44 aCwgdjMwLjhoLCB2MjkuOGgNCj4+IHVhZGR3IHYzMS4yZCwgdjMxLjJkLCB2MjYuMnMNCj4+IHVh ZGR3MiB2MzEuMmQsIHYzMS4yZCwgdjI2LjRzDQo+PiAuLi4gIChzaXggbW9yZSB1YWRkdy91YWRk dzIpDQo+PiANCj4+IHRvDQo+PiANCj4+IGxkciBxMzEsIFt4MV0sIDE2DQo+PiB1YWRkbHAgdjMx LjhoLCB2MzEuMTZiDQo+PiB1YWRkbHAgdjMxLjRzLCB2MzEuOGgNCj4+IHVhZGFscCB2MzAuMmQs IHYzMS40cw0KPj4gDQo+IA0KPiBIYXZlIHlvdSBjb25zaWRlcmVkIGNvbnNpZGVyZWQgZXZlbiBm b3IgdGhlIGIgdG8gZCBjYXNlIHRvIHVzZSBkb3Rwcm9kDQo+IGZvciB0aGUgYiAtPiBzIGFuZCB0 aGVuIHVhZGFscCBmb3IgdGhlIGZpbmFsIDQgdG8gZD8gb3IgaXMgdGhlIGFib3ZlIGNvZGVnZW4N Cj4gdGhlIGZhbGxiYWNrIGZvciB3aGVuICFkb3Rwcm9kPyB3YXNuJ3QgcXVpdGUgY2xlYXIuLg0K PiANCg0KSXTigJlzIG5vdCBhIGZhbGxiYWNrIGFzIHRoZSBkb3Rwcm9kIHBhdGggZXhpc3RzIG9u bHkgZm9yIGIgLT4gcy4NClVzaW5nIGRvdHByb2QgaGVyZSBpcyBpbnRlcmVzdGluZywgSeKAmWxs IHRyeSBpdCBvdXQuDQpUaGFua3MgZm9yIHRoZSBzdWdnZXN0aW9uIQ0KS3lyaWxsDQoNCj4gVGhh dCBzaG91bGQgc3RpbGwgc2hhdmUgb2ZmIDEgY3ljbGUuDQo+IA0KPiBUaGFua3MsDQo+IFRhbWFy DQo+IA0KPj4gYW5kIGZvciBhIHN1bSBvZiBpbnQgaW50byBsb25nIHRoZSBzYWRkdy9zYWRkdzIg cGFpciBiZWNvbWVzIG9uZSBzYWRhbHAuDQo+PiBPbiBhIE5lb3ZlcnNlIFYyIGNvcmUgd2l0aCBh biBMMSByZXNpZGVudCB3b3JraW5nIHNldCB0aGlzIGN1dHMgdGhlIHRpbWUgb2YNCj4+IHRoZQ0K Pj4gYnl0ZSBsb29wIGJ5IGFib3V0IDg4JSBhbmQgb2YgdGhlIGludCBsb29wIGJ5IGFib3V0IDY4 JS4NCj4+IA0KPj4gQm9vdHN0cmFwcGVkIGFuZCB0ZXN0ZWQgb24gYWFyY2g2NC1ub25lLWxpbnV4 LWdudS4NCj4+IE9rIGZvciB0cnVuaz8NCj4+IFRoYW5rcywNCj4+IEt5cmlsbA0KPj4gDQo+PiBn Y2MvQ2hhbmdlTG9nOg0KPj4gDQo+PiAqIGNvbmZpZy9hYXJjaDY0L2FhcmNoNjQtcHJvdG9zLmgg KGFhcmNoNjRfZXhwYW5kX3dpZGVuX3N1bSk6DQo+PiBEZWNsYXJlLg0KPj4gKiBjb25maWcvYWFy Y2g2NC9hYXJjaDY0LmNjIChhYXJjaDY0X2V4cGFuZF93aWRlbl9zdW0pOiBOZXcNCj4+IGZ1bmN0 aW9uLg0KPj4gKiBjb25maWcvYWFyY2g2NC9hYXJjaDY0LXNpbWQubWQgKGFhcmNoNjRfPHN1PmFk YWxwPG1vZGU+KToNCj4+IFJlbmFtZQ0KPj4gdG8gLi4uDQo+PiAoQGFhcmNoNjRfPHN1PmFkYWxw PG1vZGU+KTogLi4uIHRoaXMuDQo+PiAod2lkZW5fc3N1bTxWZGJsdz48bW9kZT4zLCB3aWRlbl91 c3VtPFZkYmx3Pjxtb2RlPjMpOg0KPj4gUmVwbGFjZSBieSAuLi4NCj4+ICh3aWRlbl88c3U+c3Vt PFZkYmx3Pjxtb2RlPjMpOiAuLi4gdGhpcy4gIEV4cGFuZCB0byBbU1VdQURBTFAuDQo+PiAod2lk ZW5fc3N1bTxtb2RlPjx2c2kycWk+Mywgd2lkZW5fdXN1bTxtb2RlPjx2c2kycWk+Myk6DQo+PiBS ZXBsYWNlDQo+PiBieSAuLi4NCj4+ICh3aWRlbl88c3U+c3VtPG1vZGU+PHZzaTJxaT4zKTogLi4u IHRoaXMuICBIYW5kbGUNCj4+ICFUQVJHRVRfRE9UUFJPRC4NCj4+ICh3aWRlbl88c3U+c3VtdjJk aTxtb2RlPjMpOiBOZXcgZXhwYW5kZXIuDQo+PiAqIGNvbmZpZy9hYXJjaDY0L2l0ZXJhdG9ycy5t ZCAoVlFfQkgpOiBOZXcgbW9kZSBpdGVyYXRvci4NCj4+IA0KPj4gZ2NjL3Rlc3RzdWl0ZS9DaGFu Z2VMb2c6DQo+PiANCj4+ICogZ2NjLnRhcmdldC9hYXJjaDY0L3ByMTIyMDY5XzEuYzogVXBkYXRl IGV4cGVjdGVkIG91dHB1dC4NCj4+ICogZ2NjLnRhcmdldC9hYXJjaDY0L3ByMTIyMDY5XzMuYzog TGlrZXdpc2UuDQo+PiAqIGdjYy50YXJnZXQvYWFyY2g2NC9zYWRkdy0xLmM6IFJlbmFtZWQgdG8u Li4NCj4+ICogZ2NjLnRhcmdldC9hYXJjaDY0L3NhZGFscC0xLmM6IC4uLnRoaXMuICBVcGRhdGUg ZXhwZWN0ZWQgb3V0cHV0Lg0KPj4gKiBnY2MudGFyZ2V0L2FhcmNoNjQvc2FkZHctMi5jOiBSZW5h bWVkIHRvLi4uDQo+PiAqIGdjYy50YXJnZXQvYWFyY2g2NC9zYWRhbHAtMi5jOiAuLi50aGlzLiAg VXBkYXRlIGV4cGVjdGVkIG91dHB1dC4NCj4+ICogZ2NjLnRhcmdldC9hYXJjaDY0L3VhZGR3LTEu YzogUmVuYW1lZCB0by4uLg0KPj4gKiBnY2MudGFyZ2V0L2FhcmNoNjQvdWFkYWxwLTEuYzogLi4u dGhpcy4gIFVwZGF0ZSBleHBlY3RlZCBvdXRwdXQuDQo+PiAqIGdjYy50YXJnZXQvYWFyY2g2NC91 YWRkdy0yLmM6IFJlbmFtZWQgdG8uLi4NCj4+ICogZ2NjLnRhcmdldC9hYXJjaDY0L3VhZGFscC0y LmM6IC4uLnRoaXMuICBVcGRhdGUgZXhwZWN0ZWQgb3V0cHV0Lg0KPj4gKiBnY2MudGFyZ2V0L2Fh cmNoNjQvdWFkZHctMy5jOiBSZW5hbWVkIHRvLi4uDQo+PiAqIGdjYy50YXJnZXQvYWFyY2g2NC91 YWRhbHAtMy5jOiAuLi50aGlzLiAgVXBkYXRlIGV4cGVjdGVkIG91dHB1dC4NCj4+ICogZ2NjLnRh cmdldC9hYXJjaDY0L3dpZGVuX3N1bV9wYWlyd2lzZV8xLmM6IE5ldyB0ZXN0Lg0KPj4gKiBnY2Mu dGFyZ2V0L2FhcmNoNjQvd2lkZW5fc3VtX3BhaXJ3aXNlXzIuYzogTmV3IHRlc3QuDQo+PiANCj4+ IFNpZ25lZC1vZmYtYnk6IEt5cnlsbyBUa2FjaG92IDxrdGthY2hvdkBudmlkaWEuY29tPg0KPj4g LS0tDQo+PiBnY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1wcm90b3MuaCAgICAgICAgICAgfCAg MSArDQo+PiBnY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1zaW1kLm1kICAgICAgICAgICAgfCA3 OCArKysrKysrKy0tLS0tLS0tLS0tDQo+PiBnY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC5jYyAg ICAgICAgICAgICAgICAgfCAyNyArKysrKysrDQo+PiBnY2MvY29uZmlnL2FhcmNoNjQvaXRlcmF0 b3JzLm1kICAgICAgICAgICAgICAgfCAgNCArDQo+PiBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQv YWFyY2g2NC9wcjEyMjA2OV8xLmMgfCAxMSArLS0NCj4+IGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdl dC9hYXJjaDY0L3ByMTIyMDY5XzMuYyB8ICAzICstDQo+PiAuLi4vYWFyY2g2NC97c2FkZHctMS5j ID0+IHNhZGFscC0xLmN9ICAgICAgICAgfCAgMyArLQ0KPj4gLi4uL2FhcmNoNjQve3NhZGR3LTIu YyA9PiBzYWRhbHAtMi5jfSAgICAgICAgIHwgIDMgKy0NCj4+IC4uLi9hYXJjaDY0L3t1YWRkdy0x LmMgPT4gdWFkYWxwLTEuY30gICAgICAgICB8ICAzICstDQo+PiAuLi4vYWFyY2g2NC97dWFkZHct Mi5jID0+IHVhZGFscC0yLmN9ICAgICAgICAgfCAgMyArLQ0KPj4gLi4uL2FhcmNoNjQve3VhZGR3 LTMuYyA9PiB1YWRhbHAtMy5jfSAgICAgICAgIHwgIDMgKy0NCj4+IC4uLi9nY2MudGFyZ2V0L2Fh cmNoNjQvd2lkZW5fc3VtX3BhaXJ3aXNlXzEuYyB8IDM5ICsrKysrKysrKysNCj4+IC4uLi9nY2Mu dGFyZ2V0L2FhcmNoNjQvd2lkZW5fc3VtX3BhaXJ3aXNlXzIuYyB8IDI5ICsrKysrKysNCj4+IDEz IGZpbGVzIGNoYW5nZWQsIDE0MSBpbnNlcnRpb25zKCspLCA2NiBkZWxldGlvbnMoLSkNCj4+IHJl bmFtZSBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC97c2FkZHctMS5jID0+IHNhZGFs cC0xLmN9ICg3NCUpDQo+PiByZW5hbWUgZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQv e3NhZGR3LTIuYyA9PiBzYWRhbHAtMi5jfSAoNzQlKQ0KPj4gcmVuYW1lIGdjYy90ZXN0c3VpdGUv Z2NjLnRhcmdldC9hYXJjaDY0L3t1YWRkdy0xLmMgPT4gdWFkYWxwLTEuY30gKDc1JSkNCj4+IHJl bmFtZSBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC97dWFkZHctMi5jID0+IHVhZGFs cC0yLmN9ICg3NSUpDQo+PiByZW5hbWUgZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQv e3VhZGR3LTMuYyA9PiB1YWRhbHAtMy5jfSAoNzQlKQ0KPj4gY3JlYXRlIG1vZGUgMTAwNjQ0DQo+ PiBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC93aWRlbl9zdW1fcGFpcndpc2VfMS5j DQo+PiBjcmVhdGUgbW9kZSAxMDA2NDQNCj4+IGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJj aDY0L3dpZGVuX3N1bV9wYWlyd2lzZV8yLmMNCj4+IA0KPj4gZGlmZiAtLWdpdCBhL2djYy9jb25m aWcvYWFyY2g2NC9hYXJjaDY0LXByb3Rvcy5oDQo+PiBiL2djYy9jb25maWcvYWFyY2g2NC9hYXJj aDY0LXByb3Rvcy5oDQo+PiBpbmRleCBiY2M4MzNjZmFhMS4uOTMwM2YxMmY4MGMgMTAwNjQ0DQo+ PiAtLS0gYS9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1wcm90b3MuaA0KPj4gKysrIGIvZ2Nj L2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtcHJvdG9zLmgNCj4+IEBAIC0xMDY2LDYgKzEwNjYsNyBA QCB2b2lkIGFhcmNoNjRfZW1pdF9zdmVfcHJlZF92ZWNfZHVwbGljYXRlDQo+PiAobWFjaGluZV9t b2RlLCBydHgsIHJ0eCk7DQo+PiB2b2lkIGFhcmNoNjRfZXhwYW5kX3Byb2xvZ3VlICh2b2lkKTsN Cj4+IHZvaWQgYWFyY2g2NF9kZWNvbXBvc2VfdmVjX3N0cnVjdF9pbmRleCAobWFjaGluZV9tb2Rl LCBydHggKiwgcnR4ICosDQo+PiBib29sKTsNCj4+IHZvaWQgYWFyY2g2NF9leHBhbmRfdmVjdG9y X2luaXQgKHJ0eCwgcnR4KTsNCj4+ICt2b2lkIGFhcmNoNjRfZXhwYW5kX3dpZGVuX3N1bSAocnR4 LCBydHgsIHJ0eCwgcnR4X2NvZGUpOw0KPj4gdm9pZCBhYXJjaDY0X3N2ZV9leHBhbmRfdmVjdG9y X2luaXRfc3VidmVjdG9yIChydHgsIHJ0eCk7DQo+PiB2b2lkIGFhcmNoNjRfc3ZlX2V4cGFuZF92 ZWN0b3JfaW5pdCAocnR4LCBydHgpOw0KPj4gdm9pZCBhYXJjaDY0X2luaXRfY3VtdWxhdGl2ZV9h cmdzIChDVU1VTEFUSVZFX0FSR1MgKiwgY29uc3RfdHJlZSwgcnR4LA0KPj4gZGlmZiAtLWdpdCBh L2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LXNpbWQubWQNCj4+IGIvZ2NjL2NvbmZpZy9hYXJj aDY0L2FhcmNoNjQtc2ltZC5tZA0KPj4gaW5kZXggNDMzZjE2MDUyYmYuLmQxMTlhYzE3MzUyIDEw MDY0NA0KPj4gLS0tIGEvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtc2ltZC5tZA0KPj4gKysr IGIvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtc2ltZC5tZA0KPj4gQEAgLTExODIsNyArMTE4 Miw3IEBADQo+PiAgIH0NCj4+ICkNCj4+IA0KPj4gLShkZWZpbmVfZXhwYW5kICJhYXJjaDY0Xzxz dT5hZGFscDxtb2RlPiINCj4+ICsoZGVmaW5lX2V4cGFuZCAiQGFhcmNoNjRfPHN1PmFkYWxwPG1v ZGU+Ig0KPj4gICBbKHNldCAobWF0Y2hfb3BlcmFuZDo8VkRCTFc+IDAgInJlZ2lzdGVyX29wZXJh bmQiKQ0KPj4gKHBsdXM6PFZEQkxXPg0KPj4gICAocGx1czo8VkRCTFc+DQo+PiBAQCAtNTI4Mywx OSArNTI4MywxNyBAQA0KPj4gDQo+PiA7OyA8c3U+PGFkZHN1Yj53PHE+Lg0KPj4gDQo+PiAtKGRl ZmluZV9leHBhbmQgIndpZGVuX3NzdW08VmRibHc+PG1vZGU+MyINCj4+ICs7OyBBIHdpZGVuaW5n IHN1bSByZWR1Y3Rpb24gdGhhdCBoYWx2ZXMgdGhlIGxhbmUgY291bnQgaXMgYSBzaW5nbGUgcGFp cndpc2UNCj4+ICs7OyB3aWRlbmluZyBhY2N1bXVsYXRlLg0KPj4gKyhkZWZpbmVfZXhwYW5kICJ3 aWRlbl88c3U+c3VtPFZkYmx3Pjxtb2RlPjMiDQo+PiAgIFsoc2V0IChtYXRjaF9vcGVyYW5kOjxW REJMVz4gMCAicmVnaXN0ZXJfb3BlcmFuZCIpDQo+PiAtIChwbHVzOjxWREJMVz4gKHNpZ25fZXh0 ZW5kOjxWREJMVz4NCj4+IC0gICAgICAgICAobWF0Y2hfb3BlcmFuZDpWUVcgMSAicmVnaXN0ZXJf b3BlcmFuZCIpKQ0KPj4gKyAocGx1czo8VkRCTFc+IChBTllfRVhURU5EOjxWREJMVz4NCj4+ICsg KG1hdGNoX29wZXJhbmQ6VlFXIDEgInJlZ2lzdGVyX29wZXJhbmQiKSkNCj4+ICAgICAgIChtYXRj aF9vcGVyYW5kOjxWREJMVz4gMiAicmVnaXN0ZXJfb3BlcmFuZCIpKSldDQo+PiAgICJUQVJHRVRf U0lNRCINCj4+ICAgew0KPj4gLSAgICBydHggcCA9IGFhcmNoNjRfc2ltZF92ZWN0X3Bhcl9jbnN0 X2hhbGYgKDxNT0RFPm1vZGUsIDxudW5pdHM+LCBmYWxzZSk7DQo+PiAtICAgIHJ0eCB0ZW1wID0g Z2VuX3JlZ19ydHggKEdFVF9NT0RFIChvcGVyYW5kc1swXSkpOw0KPj4gLQ0KPj4gLSAgICBlbWl0 X2luc24gKGdlbl9hYXJjaDY0X3NhZGR3PG1vZGU+X2ludGVybmFsICh0ZW1wLCBvcGVyYW5kc1sy XSwNCj4+IC0gb3BlcmFuZHNbMV0sIHApKTsNCj4+IC0gICAgZW1pdF9pbnNuIChnZW5fYWFyY2g2 NF9zYWRkdzI8bW9kZT4gKG9wZXJhbmRzWzBdLCB0ZW1wLA0KPj4gb3BlcmFuZHNbMV0pKTsNCj4+ ICsgICAgZW1pdF9pbnNuIChnZW5fYWFyY2g2NF88c3U+YWRhbHA8bW9kZT4gKG9wZXJhbmRzWzBd LCBvcGVyYW5kc1syXSwNCj4+ICsgICAgIG9wZXJhbmRzWzFdKSk7DQo+PiAgICAgRE9ORTsNCj4+ ICAgfQ0KPj4gKQ0KPj4gQEAgLTUzMTEsMjMgKzUzMDksNiBAQA0KPj4gICBET05FOw0KPj4gfSkN Cj4+IA0KPj4gLShkZWZpbmVfZXhwYW5kICJ3aWRlbl91c3VtPFZkYmx3Pjxtb2RlPjMiDQo+PiAt ICBbKHNldCAobWF0Y2hfb3BlcmFuZDo8VkRCTFc+IDAgInJlZ2lzdGVyX29wZXJhbmQiKQ0KPj4g LSAocGx1czo8VkRCTFc+ICh6ZXJvX2V4dGVuZDo8VkRCTFc+DQo+PiAtICAgICAgICAgKG1hdGNo X29wZXJhbmQ6VlFXIDEgInJlZ2lzdGVyX29wZXJhbmQiKSkNCj4+IC0gICAgICAgKG1hdGNoX29w ZXJhbmQ6PFZEQkxXPiAyICJyZWdpc3Rlcl9vcGVyYW5kIikpKV0NCj4+IC0gICJUQVJHRVRfU0lN RCINCj4+IC0gIHsNCj4+IC0gICAgcnR4IHAgPSBhYXJjaDY0X3NpbWRfdmVjdF9wYXJfY25zdF9o YWxmICg8TU9ERT5tb2RlLCA8bnVuaXRzPiwgZmFsc2UpOw0KPj4gLSAgICBydHggdGVtcCA9IGdl bl9yZWdfcnR4IChHRVRfTU9ERSAob3BlcmFuZHNbMF0pKTsNCj4+IC0NCj4+IC0gICAgZW1pdF9p bnNuIChnZW5fYWFyY2g2NF91YWRkdzxtb2RlPl9pbnRlcm5hbCAodGVtcCwgb3BlcmFuZHNbMl0s DQo+PiAtICBvcGVyYW5kc1sxXSwgcCkpOw0KPj4gLSAgICBlbWl0X2luc24gKGdlbl9hYXJjaDY0 X3VhZGR3Mjxtb2RlPiAob3BlcmFuZHNbMF0sIHRlbXAsDQo+PiBvcGVyYW5kc1sxXSkpOw0KPj4g LSAgICBET05FOw0KPj4gLSAgfQ0KPj4gLSkNCj4+IC0NCj4+IChkZWZpbmVfZXhwYW5kICJ3aWRl bl91c3VtPFZ3aWRlPjxtb2RlPjMiDQo+PiAgIFsoc2V0IChtYXRjaF9vcGVyYW5kOjxWV0lERT4g MCAicmVnaXN0ZXJfb3BlcmFuZCIpDQo+PiAocGx1czo8VldJREU+ICh6ZXJvX2V4dGVuZDo8VldJ REU+DQo+PiBAQCAtNTMzOSwzOCArNTMyMCw0MyBAQA0KPj4gICBET05FOw0KPj4gfSkNCj4+IA0K Pj4gLShkZWZpbmVfZXhwYW5kICJ3aWRlbl9zc3VtPG1vZGU+PHZzaTJxaT4zIg0KPj4gKzs7IEEg d2lkZW5pbmcgc3VtIHJlZHVjdGlvbiB0aGF0IHF1YXJ0ZXJzIHRoZSBsYW5lIGNvdW50LiAgV2l0 aCBkb3QgcHJvZHVjdA0KPj4gKzs7IHRoaXMgaXMgb25lIFtTVV1ET1Qgd2l0aCBhIHZlY3RvciBv ZiBvbmVzLCBpLmUuICs9IGEgYmVjb21lcyArPSAoYSAqIDEpLg0KPj4gKzs7IE90aGVyd2lzZSBp dCBpcyBhIHBhaXJ3aXNlIHdpZGVuaW5nIGFkZCBmZWVkaW5nIGEgcGFpcndpc2Ugd2lkZW5pbmcN Cj4+ICs7OyBhY2N1bXVsYXRlLg0KPj4gKyhkZWZpbmVfZXhwYW5kICJ3aWRlbl88c3U+c3VtPG1v ZGU+PHZzaTJxaT4zIg0KPj4gICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWUyAwICJyZWdpc3Rlcl9v cGVyYW5kIikNCj4+IC0gKHBsdXM6VlMgKHNpZ25fZXh0ZW5kOlZTDQo+PiArIChwbHVzOlZTIChB TllfRVhURU5EOlZTDQo+PiAgICAobWF0Y2hfb3BlcmFuZDo8VlNJMlFJPiAxICJyZWdpc3Rlcl9v cGVyYW5kIikpDQo+PiAgKG1hdGNoX29wZXJhbmQ6VlMgMiAicmVnaXN0ZXJfb3BlcmFuZCIpKSld DQo+PiAtICAiVEFSR0VUX0RPVFBST0QiDQo+PiArICAiVEFSR0VUX1NJTUQiDQo+PiAgIHsNCj4+ IC0gICAgcnR4IG9uZXMgPSBmb3JjZV9yZWcgKDxWU0kyUUk+bW9kZSwgQ09OU1QxX1JUWCAoPFZT STJRST5tb2RlKSk7DQo+PiAtICAgIGVtaXRfaW5zbiAoZ2VuX3Nkb3RfcHJvZDxtb2RlPjx2c2ky cWk+IChvcGVyYW5kc1swXSwgb3BlcmFuZHNbMV0sDQo+PiBvbmVzLA0KPj4gLSAgICAgb3BlcmFu ZHNbMl0pKTsNCj4+ICsgICAgaWYgKFRBUkdFVF9ET1RQUk9EKQ0KPj4gKyAgICAgIHsNCj4+ICsg cnR4IG9uZXMgPSBmb3JjZV9yZWcgKDxWU0kyUUk+bW9kZSwgQ09OU1QxX1JUWCAoPFZTSTJRST5t b2RlKSk7DQo+PiArIGVtaXRfaW5zbiAoZ2VuXzxzdT5kb3RfcHJvZDxtb2RlPjx2c2kycWk+IChv cGVyYW5kc1swXSwNCj4+IG9wZXJhbmRzWzFdLA0KPj4gKyAgICBvbmVzLCBvcGVyYW5kc1syXSkp Ow0KPj4gKyAgICAgIH0NCj4+ICsgICAgZWxzZQ0KPj4gKyAgICAgIGFhcmNoNjRfZXhwYW5kX3dp ZGVuX3N1bSAob3BlcmFuZHNbMF0sIG9wZXJhbmRzWzJdLCBvcGVyYW5kc1sxXSwNCj4+IDxDT0RF Pik7DQo+PiAgICAgRE9ORTsNCj4+ICAgfQ0KPj4gKQ0KPj4gDQo+PiAtOzsgVXNlIGRvdCBwcm9k dWN0IHRvIHBlcmZvcm0gZG91YmxlIHdpZGVuaW5nIHN1bSByZWR1Y3Rpb25zIGJ5DQo+PiAtOzsg Y2hhbmdpbmcgKz0gYSBpbnRvICs9IChhICogMSkuICBpLmUuIHdlIHNlZWQgdGhlIG11bHRpcGxp Y2F0aW9uIHdpdGggMS4NCj4+IC0oZGVmaW5lX2V4cGFuZCAid2lkZW5fdXN1bTxtb2RlPjx2c2ky cWk+MyINCj4+IC0gIFsoc2V0IChtYXRjaF9vcGVyYW5kOlZTIDAgInJlZ2lzdGVyX29wZXJhbmQi KQ0KPj4gLSAocGx1czpWUyAoemVyb19leHRlbmQ6VlMNCj4+IC0gICAgICAgICAobWF0Y2hfb3Bl cmFuZDo8VlNJMlFJPiAxICJyZWdpc3Rlcl9vcGVyYW5kIikpDQo+PiAtICAgICAgIChtYXRjaF9v cGVyYW5kOlZTIDIgInJlZ2lzdGVyX29wZXJhbmQiKSkpXQ0KPj4gLSAgIlRBUkdFVF9ET1RQUk9E Ig0KPj4gKzs7IFdpZGVuaW5nIHN1bSByZWR1Y3Rpb25zIGludG8gNjQtYml0IGVsZW1lbnRzLiAg VGhlc2UgbmVlZCB0d28gb3IgdGhyZWUNCj4+ICs7OyBwYWlyd2lzZSB3aWRlbmluZyBzdGVwcy4N Cj4+ICsoZGVmaW5lX2V4cGFuZCAid2lkZW5fPHN1PnN1bXYyZGk8bW9kZT4zIg0KPj4gKyAgWyhz ZXQgKG1hdGNoX29wZXJhbmQ6VjJESSAwICJyZWdpc3Rlcl9vcGVyYW5kIikNCj4+ICsgKHBsdXM6 VjJESSAoQU5ZX0VYVEVORDpWMkRJDQo+PiArICAgICAgKG1hdGNoX29wZXJhbmQ6VlFfQkggMSAi cmVnaXN0ZXJfb3BlcmFuZCIpKQ0KPj4gKyAgICAobWF0Y2hfb3BlcmFuZDpWMkRJIDIgInJlZ2lz dGVyX29wZXJhbmQiKSkpXQ0KPj4gKyAgIlRBUkdFVF9TSU1EIg0KPj4gICB7DQo+PiAtICAgIHJ0 eCBvbmVzID0gZm9yY2VfcmVnICg8VlNJMlFJPm1vZGUsIENPTlNUMV9SVFggKDxWU0kyUUk+bW9k ZSkpOw0KPj4gLSAgICBlbWl0X2luc24gKGdlbl91ZG90X3Byb2Q8bW9kZT48dnNpMnFpPiAob3Bl cmFuZHNbMF0sIG9wZXJhbmRzWzFdLA0KPj4gb25lcywNCj4+IC0gICAgIG9wZXJhbmRzWzJdKSk7 DQo+PiArICAgIGFhcmNoNjRfZXhwYW5kX3dpZGVuX3N1bSAob3BlcmFuZHNbMF0sIG9wZXJhbmRz WzJdLCBvcGVyYW5kc1sxXSwNCj4+IDxDT0RFPik7DQo+PiAgICAgRE9ORTsNCj4+ICAgfQ0KPj4g KQ0KPj4gDQo+PiAtOzsgVXNlIGRvdCBwcm9kdWN0IHRvIHBlcmZvcm0gZG91YmxlIHdpZGVuaW5n IHN1bSByZWR1Y3Rpb25zIGJ5DQo+PiAtOzsgY2hhbmdpbmcgKz0gYSBpbnRvICs9IChhICogMSku ICBpLmUuIHdlIHNlZWQgdGhlIG11bHRpcGxpY2F0aW9uIHdpdGggMS4NCj4+IChkZWZpbmVfaW5z biAiYWFyY2g2NF88QU5ZX0VYVEVORDpzdT5zdWJ3PG1vZGU+Ig0KPj4gICBbKHNldCAobWF0Y2hf b3BlcmFuZDo8VldJREU+IDAgInJlZ2lzdGVyX29wZXJhbmQiICI9dyIpDQo+PiAobWludXM6PFZX SURFPiAobWF0Y2hfb3BlcmFuZDo8VldJREU+IDEgInJlZ2lzdGVyX29wZXJhbmQiDQo+PiAidyIp DQo+PiBkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQuY2MgYi9nY2MvY29u ZmlnL2FhcmNoNjQvYWFyY2g2NC5jYw0KPj4gaW5kZXggZDE5Y2EzMDVkODIuLjYyOGU5NGU4YzQw IDEwMDY0NA0KPj4gLS0tIGEvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQuY2MNCj4+ICsrKyBi L2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LmNjDQo+PiBAQCAtMjYzMjcsNiArMjYzMjcsMzMg QEAgYWFyY2g2NF9leHBhbmRfdmVjdG9yX2luaXQgKHJ0eCB0YXJnZXQsIHJ0eA0KPj4gdmFscykN Cj4+ICAgZW1pdF9pbnNuIChzZXFfdG90YWxfY29zdCA8IGZhbGxiYWNrX3NlcV9jb3N0ID8gc2Vx IDogZmFsbGJhY2tfc2VxKTsNCj4+IH0NCj4+IA0KPj4gKy8qIEV4cGFuZCB0aGUgd2lkZW5pbmcg c3VtIHJlZHVjdGlvbiBERVNUID0gQUNDICsgKFdJREUpIFNSQywgd2hlcmUgdGhlDQo+PiArICAg QWR2YW5jZWQgU0lNRCB2ZWN0b3IgU1JDIGhvbGRzIGFuIGV2ZW4gbXVsdGlwbGUgb2YgdGhlIG51 bWJlciBvZiBsYW5lcw0KPj4gKyAgIG9mIHRoZSBhY2N1bXVsYXRvciBBQ0MgYW5kIG9mIHRoZSBy ZXN1bHQgREVTVC4gIEVYVEVORF9DT0RFIGlzDQo+PiArICAgU0lHTl9FWFRFTkQgb3IgWkVST19F WFRFTkQgYW5kIHNlbGVjdHMgdGhlIHNpZ25lZCBvciB1bnNpZ25lZCBmb3JtLg0KPj4gKyAgIEhh bHZlIHRoZSBsYW5lIGNvdW50IHdpdGggW1NVXUFERExQIHVudGlsIGEgc2luZ2xlIHBhaXJ3aXNl IHN0ZXAgaXMNCj4+ICsgICBsZWZ0LCB0aGVuIGFjY3VtdWxhdGUgaW50byBBQ0Mgd2l0aCBbU1Vd QURBTFAuICAqLw0KPj4gKw0KPj4gK3ZvaWQNCj4+ICthYXJjaDY0X2V4cGFuZF93aWRlbl9zdW0g KHJ0eCBkZXN0LCBydHggYWNjLCBydHggc3JjLCBydHhfY29kZSBleHRlbmRfY29kZSkNCj4+ICt7 DQo+PiArICB1bnNpZ25lZCBpbnQgZGVzdF9udW5pdHMgPSBHRVRfTU9ERV9OVU5JVFMgKEdFVF9N T0RFDQo+PiAoZGVzdCkpLnRvX2NvbnN0YW50ICgpOw0KPj4gKyAgbWFjaGluZV9tb2RlIG1vZGUg PSBHRVRfTU9ERSAoc3JjKTsNCj4+ICsgIGdjY19hc3NlcnQgKEdFVF9NT0RFX05VTklUUyAobW9k ZSkudG9fY29uc3RhbnQgKCkgJSAoZGVzdF9udW5pdHMgKiAyKQ0KPj4gPT0gMCk7DQo+PiArDQo+ PiArICB3aGlsZSAoR0VUX01PREVfTlVOSVRTIChtb2RlKS50b19jb25zdGFudCAoKSA+IGRlc3Rf bnVuaXRzICogMikNCj4+ICsgICAgew0KPj4gKyAgICAgIGluc25fY29kZSBpY29kZSA9IGNvZGVf Zm9yX2FhcmNoNjRfYWRkbHAgKGV4dGVuZF9jb2RlLCBtb2RlKTsNCj4+ICsgICAgICBtb2RlID0g aW5zbl9kYXRhW2ljb2RlXS5vcGVyYW5kWzBdLm1vZGU7DQo+PiArICAgICAgcnR4IHRtcCA9IGdl bl9yZWdfcnR4IChtb2RlKTsNCj4+ICsgICAgICBlbWl0X2luc24gKEdFTl9GQ04gKGljb2RlKSAo dG1wLCBzcmMpKTsNCj4+ICsgICAgICBzcmMgPSB0bXA7DQo+PiArICAgIH0NCj4+ICsNCj4+ICsg IGVtaXRfaW5zbiAoR0VOX0ZDTiAoY29kZV9mb3JfYWFyY2g2NF9hZGFscCAoZXh0ZW5kX2NvZGUs IG1vZGUpKQ0KPj4gKGRlc3QsIGFjYywNCj4+ICsgICAgc3JjKSk7DQo+PiArfQ0KPj4gKw0KPj4g LyogRW1pdCBSVEwgY29ycmVzcG9uZGluZyB0bzoNCj4+ICAgIGluc3IgVEFSR0VULCBFTEVNLiAg Ki8NCj4+IA0KPj4gZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYWFyY2g2NC9pdGVyYXRvcnMubWQN Cj4+IGIvZ2NjL2NvbmZpZy9hYXJjaDY0L2l0ZXJhdG9ycy5tZA0KPj4gaW5kZXggMGQzMTk3NTE0 MzAuLjZhOGM5M2NjZTM3IDEwMDY0NA0KPj4gLS0tIGEvZ2NjL2NvbmZpZy9hYXJjaDY0L2l0ZXJh dG9ycy5tZA0KPj4gKysrIGIvZ2NjL2NvbmZpZy9hYXJjaDY0L2l0ZXJhdG9ycy5tZA0KPj4gQEAg LTMxMyw2ICszMTMsMTAgQEANCj4+IDs7IEFsbCBxdWFkIGludGVnZXIgd2lkZW4tYWJsZSBtb2Rl cy4NCj4+IChkZWZpbmVfbW9kZV9pdGVyYXRvciBWUVcgW1YxNlFJIFY4SEkgVjRTSV0pDQo+PiAN Cj4+ICs7OyBRdWFkIGludGVnZXIgbW9kZXMgdGhhdCByZWFjaCA2NC1iaXQgZWxlbWVudHMgdGhy b3VnaCBtb3JlIHRoYW4gb25lDQo+PiArOzsgcGFpcndpc2Ugd2lkZW5pbmcgc3RlcC4NCj4+ICso ZGVmaW5lX21vZGVfaXRlcmF0b3IgVlFfQkggW1YxNlFJIFY4SEldKQ0KPj4gKw0KPj4gOzsgRG91 YmxlIHZlY3RvciBtb2RlcyBmb3IgY29tYmluZXMuDQo+PiAoZGVmaW5lX21vZGVfaXRlcmF0b3Ig VkRDIFtWOFFJIFY0SEkgVjRCRiBWNEhGIFYyU0kgVjJTRiBESSBERl0pDQo+PiANCj4+IGRpZmYg LS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9wcjEyMjA2OV8xLmMNCj4+ IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvcHIxMjIwNjlfMS5jDQo+PiBpbmRl eCBiMmY5NzMyNjFlYS4uZDk5YjU0OTNhZGUgMTAwNjQ0DQo+PiAtLS0gYS9nY2MvdGVzdHN1aXRl L2djYy50YXJnZXQvYWFyY2g2NC9wcjEyMjA2OV8xLmMNCj4+ICsrKyBiL2djYy90ZXN0c3VpdGUv Z2NjLnRhcmdldC9hYXJjaDY0L3ByMTIyMDY5XzEuYw0KPj4gQEAgLTEwLDEyICsxMCw4IEBAIGlu bGluZSBjaGFyIGNoYXJfYWJzKGNoYXIgaSkgew0KPj4gKiogZm9vX2ludDoNCj4+ICoqICAuLi4N Cj4+ICoqICBzdWIgdlswLTldKy4xNmIsIHZbMC05XSsuMTZiLCB2WzAtOV0rLjE2Yg0KPj4gLSoq ICB6aXAxIHZbMC05XSsuMTZiLCB2WzAtOV0rLjE2YiwgdlswLTldKy4xNmINCj4+IC0qKiAgemlw MiB2WzAtOV0rLjE2YiwgdlswLTldKy4xNmIsIHZbMC05XSsuMTZiDQo+PiAtKiogIHVhZGR3IHZb MC05XSsuNHMsIHZbMC05XSsuNHMsIHZbMC05XSsuNGgNCj4+IC0qKiAgdWFkZHcyIHZbMC05XSsu NHMsIHZbMC05XSsuNHMsIHZbMC05XSsuOGgNCj4+IC0qKiAgdWFkZHcgdlswLTldKy40cywgdlsw LTldKy40cywgdlswLTldKy40aA0KPj4gLSoqICB1YWRkdzIgdlswLTldKy40cywgdlswLTldKy40 cywgdlswLTldKy44aA0KPj4gKyoqICB1YWRkbHAgdlswLTldKy44aCwgdlswLTldKy4xNmINCj4+ ICsqKiAgdWFkYWxwIHZbMC05XSsuNHMsIHZbMC05XSsuOGgNCj4+ICoqICAuLi4NCj4+ICovDQo+ PiBpbnQgZm9vX2ludCh1bnNpZ25lZCBjaGFyICp4LCB1bnNpZ25lZCBjaGFyICogcmVzdHJpY3Qg eSkgew0KPj4gQEAgLTI5LDggKzI1LDcgQEAgaW50IGZvb19pbnQodW5zaWduZWQgY2hhciAqeCwg dW5zaWduZWQgY2hhciAqIHJlc3RyaWN0IHkpIHsNCj4+ICoqIGZvbzJfaW50Og0KPj4gKiogIC4u Lg0KPj4gKiogIGFkZCB2WzAtOV0rLjhoLCB2WzAtOV0rLjhoLCB2WzAtOV0rLjhoDQo+PiAtKiog IHVhZGR3IHZbMC05XSsuNHMsIHZbMC05XSsuNHMsIHZbMC05XSsuNGgNCj4+IC0qKiAgdWFkZHcy IHZbMC05XSsuNHMsIHZbMC05XSsuNHMsIHZbMC05XSsuOGgNCj4+ICsqKiAgdWFkYWxwIHZbMC05 XSsuNHMsIHZbMC05XSsuOGgNCj4+ICoqICAuLi4NCj4+ICovDQo+PiBpbnQgZm9vMl9pbnQodW5z aWduZWQgc2hvcnQgKngsIHVuc2lnbmVkIHNob3J0ICogcmVzdHJpY3QgeSkgew0KPj4gZGlmZiAt LWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L3ByMTIyMDY5XzMuYw0KPj4g Yi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9wcjEyMjA2OV8zLmMNCj4+IGluZGV4 IDBlODMyYzQzMDMyLi5mMjlmYzJiMmVkNCAxMDA2NDQNCj4+IC0tLSBhL2djYy90ZXN0c3VpdGUv Z2NjLnRhcmdldC9hYXJjaDY0L3ByMTIyMDY5XzMuYw0KPj4gKysrIGIvZ2NjL3Rlc3RzdWl0ZS9n Y2MudGFyZ2V0L2FhcmNoNjQvcHIxMjIwNjlfMy5jDQo+PiBAQCAtMjQsOCArMjQsNyBAQCBpbnQg Zm9vX2ludCh1bnNpZ25lZCBjaGFyICp4LCB1bnNpZ25lZCBjaGFyICogcmVzdHJpY3QgeSkgew0K Pj4gKiogZm9vMl9pbnQ6DQo+PiAqKiAgLi4uDQo+PiAqKiAgYWRkIHZbMC05XSsuOGgsIHZbMC05 XSsuOGgsIHZbMC05XSsuOGgNCj4+IC0qKiAgdWFkZHcgdlswLTldKy40cywgdlswLTldKy40cywg dlswLTldKy40aA0KPj4gLSoqICB1YWRkdzIgdlswLTldKy40cywgdlswLTldKy40cywgdlswLTld Ky44aA0KPj4gKyoqICB1YWRhbHAgdlswLTldKy40cywgdlswLTldKy44aA0KPj4gKiogIC4uLg0K Pj4gKi8NCj4+IGludCBmb28yX2ludCh1bnNpZ25lZCBzaG9ydCAqeCwgdW5zaWduZWQgc2hvcnQg KiByZXN0cmljdCB5KSB7DQo+PiBkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0 L2FhcmNoNjQvc2FkZHctMS5jDQo+PiBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0 L3NhZGFscC0xLmMNCj4+IHNpbWlsYXJpdHkgaW5kZXggNzQlDQo+PiByZW5hbWUgZnJvbSBnY2Mv dGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9zYWRkdy0xLmMNCj4+IHJlbmFtZSB0byBnY2Mv dGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9zYWRhbHAtMS5jDQo+PiBpbmRleCBmODg3MTIw OWI4YS4uNjFmOTYzM2YxYTAgMTAwNjQ0DQo+PiAtLS0gYS9nY2MvdGVzdHN1aXRlL2djYy50YXJn ZXQvYWFyY2g2NC9zYWRkdy0xLmMNCj4+ICsrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9h YXJjaDY0L3NhZGFscC0xLmMNCj4+IEBAIC0xNCw1ICsxNCw0IEBAIHQ2KGludCBsZW4sIHZvaWQg KiBkdW1teSwgc2hvcnQgKiBfX3Jlc3RyaWN0IHgpDQo+PiAgIHJldHVybiByZXN1bHQ7DQo+PiB9 DQo+PiANCj4+IC0vKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgInNhZGR3IiB9IH0gKi8N Cj4+IC0vKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgInNhZGR3MiIgfSB9ICovDQo+PiAr LyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyIHtcdHNhZGFscFx0dlswLTldK1wuNHMsIHZb MC05XStcLjhofSB9IH0gKi8NCj4+IGRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJn ZXQvYWFyY2g2NC9zYWRkdy0yLmMNCj4+IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNo NjQvc2FkYWxwLTIuYw0KPj4gc2ltaWxhcml0eSBpbmRleCA3NCUNCj4+IHJlbmFtZSBmcm9tIGdj Yy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L3NhZGR3LTIuYw0KPj4gcmVuYW1lIHRvIGdj Yy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L3NhZGFscC0yLmMNCj4+IGluZGV4IGI5ZmM0 NDJhMmY3Li44NzNmZGEyZTFlYSAxMDA2NDQNCj4+IC0tLSBhL2djYy90ZXN0c3VpdGUvZ2NjLnRh cmdldC9hYXJjaDY0L3NhZGR3LTIuYw0KPj4gKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0 L2FhcmNoNjQvc2FkYWxwLTIuYw0KPj4gQEAgLTE0LDUgKzE0LDQgQEAgdDYoaW50IGxlbiwgdm9p ZCAqIGR1bW15LCBpbnQgKiBfX3Jlc3RyaWN0IHgpDQo+PiAgIHJldHVybiByZXN1bHQ7DQo+PiB9 DQo+PiANCj4+IC0vKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgInNhZGR3IiB9IH0gKi8N Cj4+IC0vKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgInNhZGR3MiIgfSB9ICovDQo+PiAr LyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyIHtcdHNhZGFscFx0dlswLTldK1wuMmQsIHZb MC05XStcLjRzfSB9IH0gKi8NCj4+IGRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJn ZXQvYWFyY2g2NC91YWRkdy0xLmMNCj4+IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNo NjQvdWFkYWxwLTEuYw0KPj4gc2ltaWxhcml0eSBpbmRleCA3NSUNCj4+IHJlbmFtZSBmcm9tIGdj Yy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L3VhZGR3LTEuYw0KPj4gcmVuYW1lIHRvIGdj Yy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L3VhZGFscC0xLmMNCj4+IGluZGV4IDE0ZGZm ODdkN2YwLi5jNDAzNDM4NGFhZSAxMDA2NDQNCj4+IC0tLSBhL2djYy90ZXN0c3VpdGUvZ2NjLnRh cmdldC9hYXJjaDY0L3VhZGR3LTEuYw0KPj4gKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0 L2FhcmNoNjQvdWFkYWxwLTEuYw0KPj4gQEAgLTE0LDUgKzE0LDQgQEAgdDYoaW50IGxlbiwgdm9p ZCAqIGR1bW15LCB1bnNpZ25lZCBzaG9ydCAqIF9fcmVzdHJpY3QgeCkNCj4+ICAgcmV0dXJuIHJl c3VsdDsNCj4+IH0NCj4+IA0KPj4gLS8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciAidWFk ZHciIH0gfSAqLw0KPj4gLS8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciAidWFkZHcyIiB9 IH0gKi8NCj4+ICsvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIge1x0dWFkYWxwXHR2WzAt OV0rXC40cywgdlswLTldK1wuOGh9IH0gfSAqLw0KPj4gZGlmZiAtLWdpdCBhL2djYy90ZXN0c3Vp dGUvZ2NjLnRhcmdldC9hYXJjaDY0L3VhZGR3LTIuYw0KPj4gYi9nY2MvdGVzdHN1aXRlL2djYy50 YXJnZXQvYWFyY2g2NC91YWRhbHAtMi5jDQo+PiBzaW1pbGFyaXR5IGluZGV4IDc1JQ0KPj4gcmVu YW1lIGZyb20gZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvdWFkZHctMi5jDQo+PiBy ZW5hbWUgdG8gZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvdWFkYWxwLTIuYw0KPj4g aW5kZXggNzlkMGQwOTRmYzMuLjM5NWQzNmM3YzAwIDEwMDY0NA0KPj4gLS0tIGEvZ2NjL3Rlc3Rz dWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvdWFkZHctMi5jDQo+PiArKysgYi9nY2MvdGVzdHN1aXRl L2djYy50YXJnZXQvYWFyY2g2NC91YWRhbHAtMi5jDQo+PiBAQCAtMTQsNiArMTQsNSBAQCB0Nihp bnQgbGVuLCB2b2lkICogZHVtbXksIHVuc2lnbmVkIHNob3J0ICogX19yZXN0cmljdCB4KQ0KPj4g ICByZXR1cm4gcmVzdWx0Ow0KPj4gfQ0KPj4gDQo+PiAtLyogeyBkZy1maW5hbCB7IHNjYW4tYXNz ZW1ibGVyICJ1YWRkdyIgfSB9ICovDQo+PiAtLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVy ICJ1YWRkdzIiIH0gfSAqLw0KPj4gKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciB7XHR1 YWRhbHBcdHZbMC05XStcLjRzLCB2WzAtOV0rXC44aH0gfSB9ICovDQo+PiANCj4+IGRpZmYgLS1n aXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC91YWRkdy0zLmMNCj4+IGIvZ2Nj L3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvdWFkYWxwLTMuYw0KPj4gc2ltaWxhcml0eSBp bmRleCA3NCUNCj4+IHJlbmFtZSBmcm9tIGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0 L3VhZGR3LTMuYw0KPj4gcmVuYW1lIHRvIGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0 L3VhZGFscC0zLmMNCj4+IGluZGV4IDM5Y2JkNmI2Y2MyLi41ZmRiMTYzOWFiOCAxMDA2NDQNCj4+ IC0tLSBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L3VhZGR3LTMuYw0KPj4gKysr IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvdWFkYWxwLTMuYw0KPj4gQEAgLTE0 LDUgKzE0LDQgQEAgdDYoaW50IGxlbiwgdm9pZCAqIGR1bW15LCBjaGFyICogX19yZXN0cmljdCB4 KQ0KPj4gICByZXR1cm4gcmVzdWx0Ow0KPj4gfQ0KPj4gDQo+PiAtLyogeyBkZy1maW5hbCB7IHNj YW4tYXNzZW1ibGVyICJ1YWRkdyIgfSB9ICovDQo+PiAtLyogeyBkZy1maW5hbCB7IHNjYW4tYXNz ZW1ibGVyICJ1YWRkdzIiIH0gfSAqLw0KPj4gKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxl ciB7XHR1YWRhbHBcdHZbMC05XStcLjhoLCB2WzAtOV0rXC4xNmJ9IH0gfSAqLw0KPj4gZGlmZiAt LWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L3dpZGVuX3N1bV9wYWlyd2lz ZV8xLmMNCj4+IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvd2lkZW5fc3VtX3Bh aXJ3aXNlXzEuYw0KPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4+IGluZGV4IDAwMDAwMDAwMDAw Li4wYWVjMGJmODFjOA0KPj4gLS0tIC9kZXYvbnVsbA0KPj4gKysrIGIvZ2NjL3Rlc3RzdWl0ZS9n Y2MudGFyZ2V0L2FhcmNoNjQvd2lkZW5fc3VtX3BhaXJ3aXNlXzEuYw0KPj4gQEAgLTAsMCArMSwz OSBAQA0KPj4gKy8qIHsgZGctZG8gY29tcGlsZSB9ICovDQo+PiArLyogeyBkZy1vcHRpb25zICIt TzMgLW1hcmNoPWFybXY4LWEgLW1hdXRvdmVjLXByZWZlcmVuY2U9YXNpbWQtb25seSAtLQ0KPj4g cGFyYW0gdmVjdC1lcGlsb2d1ZXMtbm9tYXNrPTAiIH0gKi8NCj4+ICsNCj4+ICsvKiBXaWRlbmlu ZyBzdW0gcmVkdWN0aW9ucyBzaG91bGQgdXNlIHRoZSBwYWlyd2lzZSB3aWRlbmluZyBhZGQgYW5k DQo+PiArICAgYWNjdW11bGF0ZSBpbnN0cnVjdGlvbnMgcmF0aGVyIHRoYW4gYSBjaGFpbiBvZiBl eHRlbnNpb25zIGZlZWRpbmcNCj4+ICsgICBbU1VdQUREVyBwYWlycy4gICovDQo+PiArDQo+PiAr I2RlZmluZSBERUYoTkFNRSwgSVRZUEUsIE9UWVBFKSBcDQo+PiArICBPVFlQRSBOQU1FIChjb25z dCBJVFlQRSAqYSwgbG9uZyBuKSBcDQo+PiArICB7IFwNCj4+ICsgICAgT1RZUEUgcyA9IDA7IFwN Cj4+ICsgICAgZm9yIChsb25nIGkgPSAwOyBpIDwgbjsgaSsrKSBcDQo+PiArICAgICAgcyArPSBh W2ldOyBcDQo+PiArICAgIHJldHVybiBzOyBcDQo+PiArICB9DQo+PiArDQo+PiArREVGIChzdW1f dThfbCwgdW5zaWduZWQgY2hhciwgbG9uZykNCj4+ICtERUYgKHN1bV9pOF9sLCBzaWduZWQgY2hh ciwgbG9uZykNCj4+ICtERUYgKHN1bV91MTZfbCwgdW5zaWduZWQgc2hvcnQsIGxvbmcpDQo+PiAr REVGIChzdW1faTE2X2wsIHNob3J0LCBsb25nKQ0KPj4gK0RFRiAoc3VtX3UzMl9sLCB1bnNpZ25l ZCBpbnQsIGxvbmcpDQo+PiArREVGIChzdW1faTMyX2wsIGludCwgbG9uZykNCj4+ICtERUYgKHN1 bV91OF9pLCB1bnNpZ25lZCBjaGFyLCBpbnQpDQo+PiArREVGIChzdW1faThfaSwgc2lnbmVkIGNo YXIsIGludCkNCj4+ICtERUYgKHN1bV91MTZfaSwgdW5zaWduZWQgc2hvcnQsIGludCkNCj4+ICtE RUYgKHN1bV9pMTZfaSwgc2hvcnQsIGludCkNCj4+ICsNCj4+ICsvKiB7IGRnLWZpbmFsIHsgc2Nh bi1hc3NlbWJsZXItdGltZXMge1x0dWFkZGxwXHR2WzAtOV0rXC44aCwgdlswLTldK1wuMTZiXG59 DQo+PiAyIH0gfSAqLw0KPj4gKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyB7 XHRzYWRkbHBcdHZbMC05XStcLjhoLCB2WzAtOV0rXC4xNmJcbn0NCj4+IDIgfSB9ICovDQo+PiAr LyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzIHtcdHVhZGRscFx0dlswLTldK1wu NHMsIHZbMC05XStcLjhoXG59IDINCj4+IH0gfSAqLw0KPj4gKy8qIHsgZGctZmluYWwgeyBzY2Fu LWFzc2VtYmxlci10aW1lcyB7XHRzYWRkbHBcdHZbMC05XStcLjRzLCB2WzAtOV0rXC44aFxufSAy DQo+PiB9IH0gKi8NCj4+ICsvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMge1x0 dWFkYWxwXHR2WzAtOV0rXC4yZCwgdlswLTldK1wuNHNcbn0gMw0KPj4gfSB9ICovDQo+PiArLyog eyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzIHtcdHNhZGFscFx0dlswLTldK1wuMmQs IHZbMC05XStcLjRzXG59IDMNCj4+IH0gfSAqLw0KPj4gKy8qIHsgZGctZmluYWwgeyBzY2FuLWFz c2VtYmxlci10aW1lcyB7XHR1YWRhbHBcdHZbMC05XStcLjRzLCB2WzAtOV0rXC44aFxufSAyDQo+ PiB9IH0gKi8NCj4+ICsvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMge1x0c2Fk YWxwXHR2WzAtOV0rXC40cywgdlswLTldK1wuOGhcbn0gMg0KPj4gfSB9ICovDQo+PiArDQo+PiAr LyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCB7XHR1YWRkdzI/XHR9IH0gfSAqLw0K Pj4gKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3Qge1x0c2FkZHcyP1x0fSB9IH0g Ki8NCj4+ICsvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90IHtcdHppcDFcdH0gfSB9 ICovDQo+PiBkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvd2lk ZW5fc3VtX3BhaXJ3aXNlXzIuYw0KPj4gYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2 NC93aWRlbl9zdW1fcGFpcndpc2VfMi5jDQo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPj4gaW5k ZXggMDAwMDAwMDAwMDAuLjAxNTM3ZGVlYjlmDQo+PiAtLS0gL2Rldi9udWxsDQo+PiArKysgYi9n Y2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC93aWRlbl9zdW1fcGFpcndpc2VfMi5jDQo+ PiBAQCAtMCwwICsxLDI5IEBADQo+PiArLyogeyBkZy1kbyBjb21waWxlIH0gKi8NCj4+ICsvKiB7 IGRnLW9wdGlvbnMgIi1PMyAtbWFyY2g9YXJtdjguMi1hK2RvdHByb2QgLW1hdXRvdmVjLQ0KPj4g cHJlZmVyZW5jZT1hc2ltZC1vbmx5IC0tcGFyYW0gdmVjdC1lcGlsb2d1ZXMtbm9tYXNrPTAiIH0g Ki8NCj4+ICsNCj4+ICsvKiBXaXRoIGRvdCBwcm9kdWN0IGEgNHggd2lkZW5pbmcgc3VtIHN0YXlz IGEgc2luZ2xlIFtTVV1ET1QsIHdoaWxlIGENCj4+ICsgICBzdW0gaW50byA2NC1iaXQgZWxlbWVu dHMgdXNlcyB0aGUgcGFpcndpc2Ugd2lkZW5pbmcgaW5zdHJ1Y3Rpb25zLiAgKi8NCj4+ICsNCj4+ ICtpbnQNCj4+ICtzdW1fdThfaSAoY29uc3QgdW5zaWduZWQgY2hhciAqYSwgbG9uZyBuKQ0KPj4g K3sNCj4+ICsgIGludCBzID0gMDsNCj4+ICsgIGZvciAobG9uZyBpID0gMDsgaSA8IG47IGkrKykN Cj4+ICsgICAgcyArPSBhW2ldOw0KPj4gKyAgcmV0dXJuIHM7DQo+PiArfQ0KPj4gKw0KPj4gK2xv bmcNCj4+ICtzdW1fdThfbCAoY29uc3QgdW5zaWduZWQgY2hhciAqYSwgbG9uZyBuKQ0KPj4gK3sN Cj4+ICsgIGxvbmcgcyA9IDA7DQo+PiArICBmb3IgKGxvbmcgaSA9IDA7IGkgPCBuOyBpKyspDQo+ PiArICAgIHMgKz0gYVtpXTsNCj4+ICsgIHJldHVybiBzOw0KPj4gK30NCj4+ICsNCj4+ICsvKiB7 IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMge1x0dWRvdFx0dlswLTldK1wuNHMsIHZb MC05XStcLjE2YiwgdlswLQ0KPj4gOV0rXC4xNmJcbn0gMSB9IH0gKi8NCj4+ICsvKiB7IGRnLWZp bmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMge1x0dWFkZGxwXHR2WzAtOV0rXC44aCwgdlswLTld K1wuMTZiXG59DQo+PiAxIH0gfSAqLw0KPj4gKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxl ci10aW1lcyB7XHR1YWRkbHBcdHZbMC05XStcLjRzLCB2WzAtOV0rXC44aFxufSAxDQo+PiB9IH0g Ki8NCj4+ICsvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMge1x0dWFkYWxwXHR2 WzAtOV0rXC4yZCwgdlswLTldK1wuNHNcbn0gMQ0KPj4gfSB9ICovDQo+PiArLyogeyBkZy1maW5h bCB7IHNjYW4tYXNzZW1ibGVyLW5vdCB7XHR1YWRkdzI/XHR9IH0gfSAqLw0KPj4gLS0NCj4+IDIu NTAuMSAoQXBwbGUgR2l0LTE1NSkNCg0KDQo=