From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: References: <20180702090727.7721-1-chris@chris-wilson.co.uk> <20180702090727.7721-4-chris@chris-wilson.co.uk> From: Tvrtko Ursulin Message-ID: <89fe2861-59e4-793d-9b98-6ee64fca4093@linux.intel.com> Date: Mon, 2 Jul 2018 16:34:49 +0100 MIME-Version: 1.0 In-Reply-To: <20180702090727.7721-4-chris@chris-wilson.co.uk> Content-Language: en-GB Subject: Re: [igt-dev] [PATCH i-g-t 04/17] lib: Convert spin batch constructor to a factory List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Chris Wilson , igt-dev@lists.freedesktop.org Cc: intel-gfx@lists.freedesktop.org, Tvrtko Ursulin List-ID: Ck9uIDAyLzA3LzIwMTggMTA6MDcsIENocmlzIFdpbHNvbiB3cm90ZToKPiBJbiBvcmRlciB0byBt YWtlIGFkZGluZyBtb3JlIG9wdGlvbnMgZWFzaWVyLCBleHBvc2UgdGhlIGZ1bGwgc2V0IG9mCj4g b3B0aW9ucyB0byB0aGUgY2FsbGVyLgo+IAo+IFNpZ25lZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8 Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgo+IENjOiBUdnJ0a28gVXJzdWxpbiA8dHZydGtvLnVy c3VsaW5AaW50ZWwuY29tPgo+IC0tLQo+ICAgbGliL2lndF9kdW1teWxvYWQuYyAgICAgICAgICAg IHwgMTQ3ICsrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ICAgbGliL2lndF9kdW1t eWxvYWQuaCAgICAgICAgICAgIHwgIDQyICsrKysrLS0tLS0KPiAgIHRlc3RzL2Rydl9taXNzZWRf aXJxLmMgICAgICAgICB8ICAgMiArLQo+ICAgdGVzdHMvZ2VtX2J1c3kuYyAgICAgICAgICAgICAg IHwgIDE3ICsrLS0KPiAgIHRlc3RzL2dlbV9jdHhfaXNvbGF0aW9uLmMgICAgICB8ICAyNiArKyst LS0KPiAgIHRlc3RzL2dlbV9laW8uYyAgICAgICAgICAgICAgICB8ICAxMyArKy0KPiAgIHRlc3Rz L2dlbV9leGVjX2ZlbmNlLmMgICAgICAgICB8ICAxNiArKy0tCj4gICB0ZXN0cy9nZW1fZXhlY19s YXRlbmN5LmMgICAgICAgfCAgMTggKysrLQo+ICAgdGVzdHMvZ2VtX2V4ZWNfbm9wLmMgICAgICAg ICAgIHwgICA0ICstCj4gICB0ZXN0cy9nZW1fZXhlY19yZWxvYy5jICAgICAgICAgfCAgMTAgKyst Cj4gICB0ZXN0cy9nZW1fZXhlY19zY2hlZHVsZS5jICAgICAgfCAgMjcgKysrKy0tCj4gICB0ZXN0 cy9nZW1fZXhlY19zdXNwZW5kLmMgICAgICAgfCAgIDIgKy0KPiAgIHRlc3RzL2dlbV9mZW5jZWRf ZXhlY190aHJhc2guYyB8ICAgMiArLQo+ICAgdGVzdHMvZ2VtX3Nocmluay5jICAgICAgICAgICAg IHwgICA0ICstCj4gICB0ZXN0cy9nZW1fc3Bpbl9iYXRjaC5jICAgICAgICAgfCAgIDQgKy0KPiAg IHRlc3RzL2dlbV9zeW5jLmMgICAgICAgICAgICAgICB8ICAgNSArLQo+ICAgdGVzdHMvZ2VtX3dh aXQuYyAgICAgICAgICAgICAgIHwgICA0ICstCj4gICB0ZXN0cy9rbXNfYnVzeS5jICAgICAgICAg ICAgICAgfCAgMTAgKystCj4gICB0ZXN0cy9rbXNfY3Vyc29yX2xlZ2FjeS5jICAgICAgfCAgIDcg Ky0KPiAgIHRlc3RzL3BlcmZfcG11LmMgICAgICAgICAgICAgICB8ICAzMyArKysrKy0tLQo+ICAg dGVzdHMvcG1fcnBzLmMgICAgICAgICAgICAgICAgIHwgICA5ICstCj4gICAyMSBmaWxlcyBjaGFu Z2VkLCAxODkgaW5zZXJ0aW9ucygrKSwgMjEzIGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQg YS9saWIvaWd0X2R1bW15bG9hZC5jIGIvbGliL2lndF9kdW1teWxvYWQuYwo+IGluZGV4IDM4MDli NGU2MS4uOTRlZmRmNzQ1IDEwMDY0NAo+IC0tLSBhL2xpYi9pZ3RfZHVtbXlsb2FkLmMKPiArKysg Yi9saWIvaWd0X2R1bW15bG9hZC5jCj4gQEAgLTc1LDEyICs3NSw5IEBAIGZpbGxfcmVsb2Moc3Ry dWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5ICpyZWxvYywKPiAgIAlyZWxvYy0+d3Jp dGVfZG9tYWluID0gd3JpdGVfZG9tYWluczsKPiAgIH0KPiAgIAo+IC0jZGVmaW5lIE9VVF9GRU5D RQkoMSA8PCAwKQo+IC0jZGVmaW5lIFBPTExfUlVOCSgxIDw8IDEpCj4gLQo+ICAgc3RhdGljIGlu dAo+IC1lbWl0X3JlY3Vyc2l2ZV9iYXRjaChpZ3Rfc3Bpbl90ICpzcGluLCBpbnQgZmQsIHVpbnQz Ml90IGN0eCwgdW5zaWduZWQgZW5naW5lLAo+IC0JCSAgICAgdWludDMyX3QgZGVwLCB1bnNpZ25l ZCBpbnQgZmxhZ3MpCj4gK2VtaXRfcmVjdXJzaXZlX2JhdGNoKGlndF9zcGluX3QgKnNwaW4sCj4g KwkJICAgICBpbnQgZmQsIGNvbnN0IHN0cnVjdCBpZ3Rfc3Bpbl9mYWN0b3J5ICpvcHRzKQo+ICAg ewo+ICAgI2RlZmluZSBTQ1JBVENIIDAKPiAgICNkZWZpbmUgQkFUQ0ggMQo+IEBAIC05NSwyMSAr OTIsMTggQEAgZW1pdF9yZWN1cnNpdmVfYmF0Y2goaWd0X3NwaW5fdCAqc3BpbiwgaW50IGZkLCB1 aW50MzJfdCBjdHgsIHVuc2lnbmVkIGVuZ2luZSwKPiAgIAlpbnQgaTsKPiAgIAo+ICAgCW5lbmdp bmUgPSAwOwo+IC0JaWYgKGVuZ2luZSA9PSBBTExfRU5HSU5FUykgewo+IC0JCWZvcl9lYWNoX2Vu Z2luZShmZCwgZW5naW5lKSB7Cj4gLQkJCWlmIChlbmdpbmUpIHsKPiAtCQkJaWYgKGZsYWdzICYg UE9MTF9SVU4pCj4gLQkJCQlpZ3RfcmVxdWlyZSghKGZsYWdzICYgUE9MTF9SVU4pIHx8Cj4gLQkJ CQkJICAgIGdlbV9jYW5fc3RvcmVfZHdvcmQoZmQsIGVuZ2luZSkpOwo+IC0KPiAtCQkJCWVuZ2lu ZXNbbmVuZ2luZSsrXSA9IGVuZ2luZTsKPiAtCQkJfQo+ICsJaWYgKG9wdHMtPmVuZ2luZSA9PSBB TExfRU5HSU5FUykgewo+ICsJCXVuc2lnbmVkIGludCBlbmdpbmU7Cj4gKwo+ICsJCWZvcl9lYWNo X3BoeXNpY2FsX2VuZ2luZShmZCwgZW5naW5lKSB7Cj4gKwkJCWlmIChvcHRzLT5mbGFncyAmIElH VF9TUElOX1BPTExfUlVOICYmCj4gKwkJCSAgICAhZ2VtX2Nhbl9zdG9yZV9kd29yZChmZCwgZW5n aW5lKSkKPiArCQkJCWNvbnRpbnVlOwo+ICsKPiArCQkJZW5naW5lc1tuZW5naW5lKytdID0gZW5n aW5lOwo+ICAgCQl9Cj4gICAJfSBlbHNlIHsKPiAtCQlnZW1fcmVxdWlyZV9yaW5nKGZkLCBlbmdp bmUpOwo+IC0JCWlndF9yZXF1aXJlKCEoZmxhZ3MgJiBQT0xMX1JVTikgfHwKPiAtCQkJICAgIGdl bV9jYW5fc3RvcmVfZHdvcmQoZmQsIGVuZ2luZSkpOwo+IC0JCWVuZ2luZXNbbmVuZ2luZSsrXSA9 IGVuZ2luZTsKPiArCQllbmdpbmVzW25lbmdpbmUrK10gPSBvcHRzLT5lbmdpbmU7Cj4gICAJfQo+ ICAgCWlndF9yZXF1aXJlKG5lbmdpbmUpOwo+ICAgCj4gQEAgLTEzMCwyMCArMTI0LDIwIEBAIGVt aXRfcmVjdXJzaXZlX2JhdGNoKGlndF9zcGluX3QgKnNwaW4sIGludCBmZCwgdWludDMyX3QgY3R4 LCB1bnNpZ25lZCBlbmdpbmUsCj4gICAJZXhlY2J1Zi0+YnVmZmVyX2NvdW50Kys7Cj4gICAJYmF0 Y2hfc3RhcnQgPSBiYXRjaDsKPiAgIAo+IC0JaWYgKGRlcCkgewo+IC0JCWlndF9hc3NlcnQoIShm bGFncyAmIFBPTExfUlVOKSk7Cj4gKwlpZiAob3B0cy0+ZGVwZW5kZW5jeSkgewo+ICsJCWlndF9h c3NlcnQoIShvcHRzLT5mbGFncyAmIElHVF9TUElOX1BPTExfUlVOKSk7Cj4gICAKPiAgIAkJLyog ZHVtbXkgd3JpdGUgdG8gZGVwZW5kZW5jeSAqLwo+IC0JCW9ialtTQ1JBVENIXS5oYW5kbGUgPSBk ZXA7Cj4gKwkJb2JqW1NDUkFUQ0hdLmhhbmRsZSA9IG9wdHMtPmRlcGVuZGVuY3k7Cj4gICAJCWZp bGxfcmVsb2MoJnJlbG9jc1tvYmpbQkFUQ0hdLnJlbG9jYXRpb25fY291bnQrK10sCj4gLQkJCSAg IGRlcCwgMTAyMCwKPiArCQkJICAgb3B0cy0+ZGVwZW5kZW5jeSwgMTAyMCwKPiAgIAkJCSAgIEk5 MTVfR0VNX0RPTUFJTl9SRU5ERVIsCj4gICAJCQkgICBJOTE1X0dFTV9ET01BSU5fUkVOREVSKTsK PiAgIAkJZXhlY2J1Zi0+YnVmZmVyX2NvdW50Kys7Cj4gLQl9IGVsc2UgaWYgKGZsYWdzICYgUE9M TF9SVU4pIHsKPiArCX0gZWxzZSBpZiAob3B0cy0+ZmxhZ3MgJiBJR1RfU1BJTl9QT0xMX1JVTikg ewo+ICAgCQl1bnNpZ25lZCBpbnQgb2Zmc2V0Owo+ICAgCj4gLQkJaWd0X2Fzc2VydCghZGVwKTsK PiArCQlpZ3RfYXNzZXJ0KCFvcHRzLT5kZXBlbmRlbmN5KTsKPiAgIAo+ICAgCQlpZiAoZ2VuID09 IDQgfHwgZ2VuID09IDUpIHsKPiAgIAkJCWV4ZWNidWYtPmZsYWdzIHw9IEk5MTVfRVhFQ19TRUNV UkU7Cj4gQEAgLTIzMSw5ICsyMjUsOSBAQCBlbWl0X3JlY3Vyc2l2ZV9iYXRjaChpZ3Rfc3Bpbl90 ICpzcGluLCBpbnQgZmQsIHVpbnQzMl90IGN0eCwgdW5zaWduZWQgZW5naW5lLAo+ICAgCj4gICAJ ZXhlY2J1Zi0+YnVmZmVyc19wdHIgPSB0b191c2VyX3BvaW50ZXIob2JqICsKPiAgIAkJCQkJICAg ICAgICgyIC0gZXhlY2J1Zi0+YnVmZmVyX2NvdW50KSk7Cj4gLQlleGVjYnVmLT5yc3ZkMSA9IGN0 eDsKPiArCWV4ZWNidWYtPnJzdmQxID0gb3B0cy0+Y3R4Owo+ICAgCj4gLQlpZiAoZmxhZ3MgJiBP VVRfRkVOQ0UpCj4gKwlpZiAob3B0cy0+ZmxhZ3MgJiBJR1RfU1BJTl9GRU5DRV9PVVQpCj4gICAJ CWV4ZWNidWYtPmZsYWdzIHw9IEk5MTVfRVhFQ19GRU5DRV9PVVQ7Cj4gICAKPiAgIAlmb3IgKGkg PSAwOyBpIDwgbmVuZ2luZTsgaSsrKSB7Cj4gQEAgLTI0Miw3ICsyMzYsNyBAQCBlbWl0X3JlY3Vy c2l2ZV9iYXRjaChpZ3Rfc3Bpbl90ICpzcGluLCBpbnQgZmQsIHVpbnQzMl90IGN0eCwgdW5zaWdu ZWQgZW5naW5lLAo+ICAgCj4gICAJCWdlbV9leGVjYnVmX3dyKGZkLCBleGVjYnVmKTsKPiAgIAo+ IC0JCWlmIChmbGFncyAmIE9VVF9GRU5DRSkgewo+ICsJCWlmIChvcHRzLT5mbGFncyAmIElHVF9T UElOX0ZFTkNFX09VVCkgewo+ICAgCQkJaW50IF9mZCA9IGV4ZWNidWYtPnJzdmQyID4+IDMyOwo+ ICAgCj4gICAJCQlpZ3RfYXNzZXJ0KF9mZCA+PSAwKTsKPiBAQCAtMjcxLDE2ICsyNjUsMTQgQEAg ZW1pdF9yZWN1cnNpdmVfYmF0Y2goaWd0X3NwaW5fdCAqc3BpbiwgaW50IGZkLCB1aW50MzJfdCBj dHgsIHVuc2lnbmVkIGVuZ2luZSwKPiAgIH0KPiAgIAo+ICAgc3RhdGljIGlndF9zcGluX3QgKgo+ IC1fX19pZ3Rfc3Bpbl9iYXRjaF9uZXcoaW50IGZkLCB1aW50MzJfdCBjdHgsIHVuc2lnbmVkIGVu Z2luZSwgdWludDMyX3QgZGVwLAo+IC0JCSAgICAgIHVuc2lnbmVkIGludCBmbGFncykKPiArc3Bp bl9iYXRjaF9jcmVhdGUoaW50IGZkLCBjb25zdCBzdHJ1Y3QgaWd0X3NwaW5fZmFjdG9yeSAqb3B0 cykKPiAgIHsKPiAgIAlpZ3Rfc3Bpbl90ICpzcGluOwo+ICAgCj4gICAJc3BpbiA9IGNhbGxvYygx LCBzaXplb2Yoc3RydWN0IGlndF9zcGluKSk7Cj4gICAJaWd0X2Fzc2VydChzcGluKTsKPiAgIAo+ IC0Jc3Bpbi0+b3V0X2ZlbmNlID0gZW1pdF9yZWN1cnNpdmVfYmF0Y2goc3BpbiwgZmQsIGN0eCwg ZW5naW5lLCBkZXAsCj4gLQkJCQkJICAgICAgIGZsYWdzKTsKPiArCXNwaW4tPm91dF9mZW5jZSA9 IGVtaXRfcmVjdXJzaXZlX2JhdGNoKHNwaW4sIGZkLCBvcHRzKTsKPiAgIAo+ICAgCXB0aHJlYWRf bXV0ZXhfbG9jaygmbGlzdF9sb2NrKTsKPiAgIAlpZ3RfbGlzdF9hZGQoJnNwaW4tPmxpbmssICZz cGluX2xpc3QpOwo+IEBAIC0yOTAsMTggKzI4MiwxNSBAQCBfX19pZ3Rfc3Bpbl9iYXRjaF9uZXco aW50IGZkLCB1aW50MzJfdCBjdHgsIHVuc2lnbmVkIGVuZ2luZSwgdWludDMyX3QgZGVwLAo+ICAg fQo+ICAgCj4gICBpZ3Rfc3Bpbl90ICoKPiAtX19pZ3Rfc3Bpbl9iYXRjaF9uZXcoaW50IGZkLCB1 aW50MzJfdCBjdHgsIHVuc2lnbmVkIGVuZ2luZSwgdWludDMyX3QgZGVwKQo+ICtfX2lndF9zcGlu X2JhdGNoX2ZhY3RvcnkoaW50IGZkLCBjb25zdCBzdHJ1Y3QgaWd0X3NwaW5fZmFjdG9yeSAqb3B0 cykKPiAgIHsKPiAtCXJldHVybiBfX19pZ3Rfc3Bpbl9iYXRjaF9uZXcoZmQsIGN0eCwgZW5naW5l LCBkZXAsIDApOwo+ICsJcmV0dXJuIHNwaW5fYmF0Y2hfY3JlYXRlKGZkLCBvcHRzKTsKPiAgIH0K PiAgIAo+ICAgLyoqCj4gLSAqIGlndF9zcGluX2JhdGNoX25ldzoKPiArICogaWd0X3NwaW5fYmF0 Y2hfZmFjdG9yeToKPiAgICAqIEBmZDogb3BlbiBpOTE1IGRybSBmaWxlIGRlc2NyaXB0b3IKPiAt ICogQGVuZ2luZTogUmluZyB0byBleGVjdXRlIGJhdGNoIE9SJ2Qgd2l0aCBleGVjYnVmIGZsYWdz LiBJZiB2YWx1ZSBpcyBsZXNzCj4gLSAqICAgICAgICAgIHRoYW4gMCwgZXhlY3V0ZSBvbiBhbGwg YXZhaWxhYmxlIHJpbmdzLgo+IC0gKiBAZGVwOiBoYW5kbGUgdG8gYSBidWZmZXIgb2JqZWN0IGRl cGVuZGVuY3kuIElmIGdyZWF0ZXIgdGhhbiAwLCBhZGQgYQo+IC0gKiAgICAgICAgICAgICAgcmVs b2NhdGlvbiBlbnRyeSB0byB0aGlzIGJ1ZmZlciB3aXRoaW4gdGhlIGJhdGNoLgo+ICsgKiBAb3B0 czogY29udHJvbGxpbmcgb3B0aW9ucyBzdWNoIGFzIGNvbnRleHQsIGVuZ2luZSwgZGVwZW5kZW5j aWVzIGV0Ywo+ICAgICoKPiAgICAqIFN0YXJ0IGEgcmVjdXJzaXZlIGJhdGNoIG9uIGEgcmluZy4g SW1tZWRpYXRlbHkgcmV0dXJucyBhICNpZ3Rfc3Bpbl90IHRoYXQKPiAgICAqIGNvbnRhaW5zIHRo ZSBiYXRjaCdzIGhhbmRsZSB0aGF0IGNhbiBiZSB3YWl0ZWQgdXBvbi4gVGhlIHJldHVybmVkIHN0 cnVjdHVyZQo+IEBAIC0zMTEsODYgKzMwMCwyNiBAQCBfX2lndF9zcGluX2JhdGNoX25ldyhpbnQg ZmQsIHVpbnQzMl90IGN0eCwgdW5zaWduZWQgZW5naW5lLCB1aW50MzJfdCBkZXApCj4gICAgKiBT dHJ1Y3R1cmUgd2l0aCBoZWxwZXIgaW50ZXJuYWwgc3RhdGUgZm9yIGlndF9zcGluX2JhdGNoX2Zy ZWUoKS4KPiAgICAqLwo+ICAgaWd0X3NwaW5fdCAqCj4gLWlndF9zcGluX2JhdGNoX25ldyhpbnQg ZmQsIHVpbnQzMl90IGN0eCwgdW5zaWduZWQgZW5naW5lLCB1aW50MzJfdCBkZXApCj4gK2lndF9z cGluX2JhdGNoX2ZhY3RvcnkoaW50IGZkLCBjb25zdCBzdHJ1Y3QgaWd0X3NwaW5fZmFjdG9yeSAq b3B0cykKPiAgIHsKPiAgIAlpZ3Rfc3Bpbl90ICpzcGluOwo+ICAgCj4gICAJaWd0X3JlcXVpcmVf Z2VtKGZkKTsKPiAgIAo+IC0Jc3BpbiA9IF9faWd0X3NwaW5fYmF0Y2hfbmV3KGZkLCBjdHgsIGVu Z2luZSwgZGVwKTsKPiAtCWlndF9hc3NlcnQoZ2VtX2JvX2J1c3koZmQsIHNwaW4tPmhhbmRsZSkp Owo+IC0KPiAtCXJldHVybiBzcGluOwo+IC19Cj4gLQo+IC1pZ3Rfc3Bpbl90ICoKPiAtX19pZ3Rf c3Bpbl9iYXRjaF9uZXdfZmVuY2UoaW50IGZkLCB1aW50MzJfdCBjdHgsIHVuc2lnbmVkIGVuZ2lu ZSkKPiAtewo+IC0JcmV0dXJuIF9fX2lndF9zcGluX2JhdGNoX25ldyhmZCwgY3R4LCBlbmdpbmUs IDAsIE9VVF9GRU5DRSk7Cj4gLX0KPiArCWlmIChvcHRzLT5lbmdpbmUgIT0gQUxMX0VOR0lORVMp IHsKPiArCQlnZW1fcmVxdWlyZV9yaW5nKGZkLCBvcHRzLT5lbmdpbmUpOwo+ICsJCWlmIChvcHRz LT5mbGFncyAmIElHVF9TUElOX1BPTExfUlVOKQo+ICsJCQlpZ3RfcmVxdWlyZShnZW1fY2FuX3N0 b3JlX2R3b3JkKGZkLCBvcHRzLT5lbmdpbmUpKTsKPiArCX0KPiAgIAo+IC0vKioKPiAtICogaWd0 X3NwaW5fYmF0Y2hfbmV3X2ZlbmNlOgo+IC0gKiBAZmQ6IG9wZW4gaTkxNSBkcm0gZmlsZSBkZXNj cmlwdG9yCj4gLSAqIEBlbmdpbmU6IFJpbmcgdG8gZXhlY3V0ZSBiYXRjaCBPUidkIHdpdGggZXhl Y2J1ZiBmbGFncy4gSWYgdmFsdWUgaXMgbGVzcwo+IC0gKiAgICAgICAgICB0aGFuIDAsIGV4ZWN1 dGUgb24gYWxsIGF2YWlsYWJsZSByaW5ncy4KPiAtICoKPiAtICogU3RhcnQgYSByZWN1cnNpdmUg YmF0Y2ggb24gYSByaW5nLiBJbW1lZGlhdGVseSByZXR1cm5zIGEgI2lndF9zcGluX3QgdGhhdAo+ IC0gKiBjb250YWlucyB0aGUgYmF0Y2gncyBoYW5kbGUgdGhhdCBjYW4gYmUgd2FpdGVkIHVwb24u IFRoZSByZXR1cm5lZCBzdHJ1Y3R1cmUKPiAtICogbXVzdCBiZSBwYXNzZWQgdG8gaWd0X3NwaW5f YmF0Y2hfZnJlZSgpIGZvciBwb3N0LXByb2Nlc3NpbmcuCj4gLSAqCj4gLSAqIGlndF9zcGluX3Qg d2lsbCBjb250YWluIGFuIG91dHB1dCBmZW5jZSBhc3NvY2l0YXRlZCB3aXRoIHRoaXMgYmF0Y2gu Cj4gLSAqCj4gLSAqIFJldHVybnM6Cj4gLSAqIFN0cnVjdHVyZSB3aXRoIGhlbHBlciBpbnRlcm5h bCBzdGF0ZSBmb3IgaWd0X3NwaW5fYmF0Y2hfZnJlZSgpLgo+IC0gKi8KPiAtaWd0X3NwaW5fdCAq Cj4gLWlndF9zcGluX2JhdGNoX25ld19mZW5jZShpbnQgZmQsIHVpbnQzMl90IGN0eCwgdW5zaWdu ZWQgZW5naW5lKQo+IC17Cj4gLQlpZ3Rfc3Bpbl90ICpzcGluOwo+ICsJc3BpbiA9IHNwaW5fYmF0 Y2hfY3JlYXRlKGZkLCBvcHRzKTsKPiAgIAo+IC0JaWd0X3JlcXVpcmVfZ2VtKGZkKTsKPiAtCWln dF9yZXF1aXJlKGdlbV9oYXNfZXhlY19mZW5jZShmZCkpOwo+IC0KPiAtCXNwaW4gPSBfX2lndF9z cGluX2JhdGNoX25ld19mZW5jZShmZCwgY3R4LCBlbmdpbmUpOwo+ICAgCWlndF9hc3NlcnQoZ2Vt X2JvX2J1c3koZmQsIHNwaW4tPmhhbmRsZSkpOwo+IC0JaWd0X2Fzc2VydChwb2xsKCYoc3RydWN0 IHBvbGxmZCl7c3Bpbi0+b3V0X2ZlbmNlLCBQT0xMSU59LCAxLCAwKSA9PSAwKTsKPiAtCj4gLQly ZXR1cm4gc3BpbjsKPiAtfQo+IC0KPiAtaWd0X3NwaW5fdCAqCj4gLV9faWd0X3NwaW5fYmF0Y2hf bmV3X3BvbGwoaW50IGZkLCB1aW50MzJfdCBjdHgsIHVuc2lnbmVkIGVuZ2luZSkKPiAtewo+IC0J cmV0dXJuIF9fX2lndF9zcGluX2JhdGNoX25ldyhmZCwgY3R4LCBlbmdpbmUsIDAsIFBPTExfUlVO KTsKPiAtfQo+ICsJaWYgKG9wdHMtPmZsYWdzICYgSUdUX1NQSU5fRkVOQ0VfT1VUKSB7Cj4gKwkJ c3RydWN0IHBvbGxmZCBwZmQgPSB7IHNwaW4tPm91dF9mZW5jZSwgUE9MTElOIH07Cj4gICAKPiAt LyoqCj4gLSAqIGlndF9zcGluX2JhdGNoX25ld19wb2xsOgo+IC0gKiBAZmQ6IG9wZW4gaTkxNSBk cm0gZmlsZSBkZXNjcmlwdG9yCj4gLSAqIEBlbmdpbmU6IFJpbmcgdG8gZXhlY3V0ZSBiYXRjaCBP UidkIHdpdGggZXhlY2J1ZiBmbGFncy4gSWYgdmFsdWUgaXMgbGVzcwo+IC0gKiAgICAgICAgICB0 aGFuIDAsIGV4ZWN1dGUgb24gYWxsIGF2YWlsYWJsZSByaW5ncy4KPiAtICoKPiAtICogU3RhcnQg YSByZWN1cnNpdmUgYmF0Y2ggb24gYSByaW5nLiBJbW1lZGlhdGVseSByZXR1cm5zIGEgI2lndF9z cGluX3QgdGhhdAo+IC0gKiBjb250YWlucyB0aGUgYmF0Y2gncyBoYW5kbGUgdGhhdCBjYW4gYmUg d2FpdGVkIHVwb24uIFRoZSByZXR1cm5lZCBzdHJ1Y3R1cmUKPiAtICogbXVzdCBiZSBwYXNzZWQg dG8gaWd0X3NwaW5fYmF0Y2hfZnJlZSgpIGZvciBwb3N0LXByb2Nlc3NpbmcuCj4gLSAqCj4gLSAq IGlndF9zcGluX3QtPnJ1bm5pbmcgd2lsbCBjb250YWludCBhIHBvaW50ZXIgd2hpY2ggdGFyZ2V0 IHdpbGwgY2hhbmdlIGZyb20KPiAtICogemVybyB0byBvbmUgb25jZSB0aGUgc3Bpbm5lciBhY3R1 YWxseSBzdGFydHMgZXhlY3V0aW5nIG9uIHRoZSBHUFUuCj4gLSAqCj4gLSAqIFJldHVybnM6Cj4g LSAqIFN0cnVjdHVyZSB3aXRoIGhlbHBlciBpbnRlcm5hbCBzdGF0ZSBmb3IgaWd0X3NwaW5fYmF0 Y2hfZnJlZSgpLgo+IC0gKi8KPiAtaWd0X3NwaW5fdCAqCj4gLWlndF9zcGluX2JhdGNoX25ld19w b2xsKGludCBmZCwgdWludDMyX3QgY3R4LCB1bnNpZ25lZCBlbmdpbmUpCj4gLXsKPiAtCWlndF9z cGluX3QgKnNwaW47Cj4gLQo+IC0JaWd0X3JlcXVpcmVfZ2VtKGZkKTsKPiAtCWlndF9yZXF1aXJl KGdlbV9tbWFwX19oYXNfd2MoZmQpKTsKPiAtCj4gLQlzcGluID0gX19pZ3Rfc3Bpbl9iYXRjaF9u ZXdfcG9sbChmZCwgY3R4LCBlbmdpbmUpOwo+IC0JaWd0X2Fzc2VydChnZW1fYm9fYnVzeShmZCwg c3Bpbi0+aGFuZGxlKSk7Cj4gKwkJaWd0X2Fzc2VydChwb2xsKCZwZmQsIDEsIDApID09IDApOwo+ ICsJfQo+ICAgCj4gICAJcmV0dXJuIHNwaW47Cj4gICB9Cj4gZGlmZiAtLWdpdCBhL2xpYi9pZ3Rf ZHVtbXlsb2FkLmggYi9saWIvaWd0X2R1bW15bG9hZC5oCj4gaW5kZXggYzZjY2MyOTM2Li5jNzk0 ZjI1NDQgMTAwNjQ0Cj4gLS0tIGEvbGliL2lndF9kdW1teWxvYWQuaAo+ICsrKyBiL2xpYi9pZ3Rf ZHVtbXlsb2FkLmgKPiBAQCAtNDMsMjkgKzQzLDI1IEBAIHR5cGVkZWYgc3RydWN0IGlndF9zcGlu IHsKPiAgIAlib29sICpydW5uaW5nOwo+ICAgfSBpZ3Rfc3Bpbl90Owo+ICAgCj4gLWlndF9zcGlu X3QgKl9faWd0X3NwaW5fYmF0Y2hfbmV3KGludCBmZCwKPiAtCQkJCSB1aW50MzJfdCBjdHgsCj4g LQkJCQkgdW5zaWduZWQgZW5naW5lLAo+IC0JCQkJIHVpbnQzMl90ICBkZXApOwo+IC1pZ3Rfc3Bp bl90ICppZ3Rfc3Bpbl9iYXRjaF9uZXcoaW50IGZkLAo+IC0JCQkgICAgICAgdWludDMyX3QgY3R4 LAo+IC0JCQkgICAgICAgdW5zaWduZWQgZW5naW5lLAo+IC0JCQkgICAgICAgdWludDMyX3QgIGRl cCk7Cj4gLQo+IC1pZ3Rfc3Bpbl90ICpfX2lndF9zcGluX2JhdGNoX25ld19mZW5jZShpbnQgZmQs Cj4gLQkJCQkgICAgICAgdWludDMyX3QgY3R4LAo+IC0JCQkJICAgICAgIHVuc2lnbmVkIGVuZ2lu ZSk7Cj4gLQo+IC1pZ3Rfc3Bpbl90ICppZ3Rfc3Bpbl9iYXRjaF9uZXdfZmVuY2UoaW50IGZkLAo+ IC0JCQkJICAgICB1aW50MzJfdCBjdHgsCj4gLQkJCQkgICAgIHVuc2lnbmVkIGVuZ2luZSk7Cj4g LQo+IC1pZ3Rfc3Bpbl90ICpfX2lndF9zcGluX2JhdGNoX25ld19wb2xsKGludCBmZCwKPiAtCQkJ CSAgICAgICB1aW50MzJfdCBjdHgsCj4gLQkJCQkgICAgICAgdW5zaWduZWQgZW5naW5lKTsKPiAt aWd0X3NwaW5fdCAqaWd0X3NwaW5fYmF0Y2hfbmV3X3BvbGwoaW50IGZkLAo+IC0JCQkJICAgIHVp bnQzMl90IGN0eCwKPiAtCQkJCSAgICB1bnNpZ25lZCBlbmdpbmUpOwo+ICtzdHJ1Y3QgaWd0X3Nw aW5fZmFjdG9yeSB7Cj4gKwl1aW50MzJfdCBjdHg7Cj4gKwl1aW50MzJfdCBkZXBlbmRlbmN5Owo+ ICsJdW5zaWduZWQgaW50IGVuZ2luZTsKPiArCXVuc2lnbmVkIGludCBmbGFnczsKPiArfTsKPiAr Cj4gKyNkZWZpbmUgSUdUX1NQSU5fRkVOQ0VfT1VUICgxIDw8IDApCj4gKyNkZWZpbmUgSUdUX1NQ SU5fUE9MTF9SVU4gICgxIDw8IDEpCj4gKwo+ICtpZ3Rfc3Bpbl90ICoKPiArX19pZ3Rfc3Bpbl9i YXRjaF9mYWN0b3J5KGludCBmZCwgY29uc3Qgc3RydWN0IGlndF9zcGluX2ZhY3RvcnkgKm9wdHMp Owo+ICtpZ3Rfc3Bpbl90ICoKPiAraWd0X3NwaW5fYmF0Y2hfZmFjdG9yeShpbnQgZmQsIGNvbnN0 IHN0cnVjdCBpZ3Rfc3Bpbl9mYWN0b3J5ICpvcHRzKTsKPiArCj4gKyNkZWZpbmUgX19pZ3Rfc3Bp bl9iYXRjaF9uZXcoZmQsIC4uLikgXAo+ICsJX19pZ3Rfc3Bpbl9iYXRjaF9mYWN0b3J5KGZkLCAm KChzdHJ1Y3QgaWd0X3NwaW5fZmFjdG9yeSl7X19WQV9BUkdTX199KSkKPiArI2RlZmluZSBpZ3Rf c3Bpbl9iYXRjaF9uZXcoZmQsIC4uLikgXAo+ICsJaWd0X3NwaW5fYmF0Y2hfZmFjdG9yeShmZCwg Jigoc3RydWN0IGlndF9zcGluX2ZhY3Rvcnkpe19fVkFfQVJHU19ffSkpCj4gICAKPiAgIHZvaWQg aWd0X3NwaW5fYmF0Y2hfc2V0X3RpbWVvdXQoaWd0X3NwaW5fdCAqc3BpbiwgaW50NjRfdCBucyk7 Cj4gICB2b2lkIGlndF9zcGluX2JhdGNoX2VuZChpZ3Rfc3Bpbl90ICpzcGluKTsKPiBkaWZmIC0t Z2l0IGEvdGVzdHMvZHJ2X21pc3NlZF9pcnEuYyBiL3Rlc3RzL2Rydl9taXNzZWRfaXJxLmMKPiBp bmRleCA3OTFlZTUxZmIuLjc4NjkwYzM2YSAxMDA2NDQKPiAtLS0gYS90ZXN0cy9kcnZfbWlzc2Vk X2lycS5jCj4gKysrIGIvdGVzdHMvZHJ2X21pc3NlZF9pcnEuYwo+IEBAIC0zMyw3ICszMyw3IEBA IElHVF9URVNUX0RFU0NSSVBUSU9OKCJJbmplY3QgbWlzc2VkIGludGVycnVwdHMgYW5kIG1ha2Ug c3VyZSB0aGV5IGFyZSBjYXVnaHQiKTsKPiAgIAo+ICAgc3RhdGljIHZvaWQgdHJpZ2dlcl9taXNz ZWRfaW50ZXJydXB0KGludCBmZCwgdW5zaWduZWQgcmluZykKPiAgIHsKPiAtCWlndF9zcGluX3Qg KnNwaW4gPSBfX2lndF9zcGluX2JhdGNoX25ldyhmZCwgMCwgcmluZywgMCk7Cj4gKwlpZ3Rfc3Bp bl90ICpzcGluID0gX19pZ3Rfc3Bpbl9iYXRjaF9uZXcoZmQsIC5lbmdpbmUgPSByaW5nKTsKPiAg IAl1aW50MzJfdCBnbzsKPiAgIAlpbnQgbGlua1syXTsKPiAgIAo+IGRpZmYgLS1naXQgYS90ZXN0 cy9nZW1fYnVzeS5jIGIvdGVzdHMvZ2VtX2J1c3kuYwo+IGluZGV4IGY1NjQ2NTFiYS4uNzZiNDRh NWQ0IDEwMDY0NAo+IC0tLSBhL3Rlc3RzL2dlbV9idXN5LmMKPiArKysgYi90ZXN0cy9nZW1fYnVz eS5jCj4gQEAgLTExNCw3ICsxMTQsOSBAQCBzdGF0aWMgdm9pZCBzZW1hcGhvcmUoaW50IGZkLCB1 bnNpZ25lZCByaW5nLCB1aW50MzJfdCBmbGFncykKPiAgIAo+ICAgCS8qIENyZWF0ZSBhIGxvbmcg cnVubmluZyBiYXRjaCB3aGljaCB3ZSBjYW4gdXNlIHRvIGhvZyB0aGUgR1BVICovCj4gICAJaGFu ZGxlW0JVU1ldID0gZ2VtX2NyZWF0ZShmZCwgNDA5Nik7Cj4gLQlzcGluID0gaWd0X3NwaW5fYmF0 Y2hfbmV3KGZkLCAwLCByaW5nLCBoYW5kbGVbQlVTWV0pOwo+ICsJc3BpbiA9IGlndF9zcGluX2Jh dGNoX25ldyhmZCwKPiArCQkJCSAgLmVuZ2luZSA9IHJpbmcsCj4gKwkJCQkgIC5kZXBlbmRlbmN5 ID0gaGFuZGxlW0JVU1ldKTsKPiAgIAo+ICAgCS8qIFF1ZXVlIGEgYmF0Y2ggYWZ0ZXIgdGhlIGJ1 c3ksIGl0IHNob3VsZCBibG9jayBhbmQgcmVtYWluICJidXN5IiAqLwo+ICAgCWlndF9hc3NlcnQo ZXhlY19ub29wKGZkLCBoYW5kbGUsIHJpbmcgfCBmbGFncywgZmFsc2UpKTsKPiBAQCAtMzYzLDE3 ICszNjUsMTYgQEAgc3RhdGljIHZvaWQgY2xvc2VfcmFjZShpbnQgZmQpCj4gICAJCWlndF9hc3Nl cnQoc2NoZWRfc2V0c2NoZWR1bGVyKGdldHBpZCgpLCBTQ0hFRF9SUiwgJnJ0KSA9PSAwKTsKPiAg IAo+ICAgCQlmb3IgKGkgPSAwOyBpIDwgbmhhbmRsZXM7IGkrKykgewo+IC0JCQlzcGluW2ldID0g X19pZ3Rfc3Bpbl9iYXRjaF9uZXcoZmQsIDAsCj4gLQkJCQkJCSAgICAgICBlbmdpbmVzW3JhbmQo KSAlIG5lbmdpbmVdLCAwKTsKPiArCQkJc3BpbltpXSA9IF9faWd0X3NwaW5fYmF0Y2hfbmV3KGZk LAo+ICsJCQkJCQkgICAgICAgLmVuZ2luZSA9IGVuZ2luZXNbcmFuZCgpICUgbmVuZ2luZV0pOwo+ ICAgCQkJaGFuZGxlc1tpXSA9IHNwaW5baV0tPmhhbmRsZTsKPiAgIAkJfQo+ICAgCj4gICAJCWln dF91bnRpbF90aW1lb3V0KDIwKSB7Cj4gICAJCQlmb3IgKGkgPSAwOyBpIDwgbmhhbmRsZXM7IGkr Kykgewo+ICAgCQkJCWlndF9zcGluX2JhdGNoX2ZyZWUoZmQsIHNwaW5baV0pOwo+IC0JCQkJc3Bp bltpXSA9IF9faWd0X3NwaW5fYmF0Y2hfbmV3KGZkLCAwLAo+IC0JCQkJCQkJICAgICAgIGVuZ2lu ZXNbcmFuZCgpICUgbmVuZ2luZV0sCj4gLQkJCQkJCQkgICAgICAgMCk7Cj4gKwkJCQlzcGluW2ld ID0gX19pZ3Rfc3Bpbl9iYXRjaF9uZXcoZmQsCj4gKwkJCQkJCQkgICAgICAgLmVuZ2luZSA9IGVu Z2luZXNbcmFuZCgpICUgbmVuZ2luZV0pOwo+ICAgCQkJCWhhbmRsZXNbaV0gPSBzcGluW2ldLT5o YW5kbGU7Cj4gICAJCQkJX19zeW5jX3N5bmNocm9uaXplKCk7Cj4gICAJCQl9Cj4gQEAgLTQxNSw3 ICs0MTYsNyBAQCBzdGF0aWMgYm9vbCBoYXNfc2VtYXBob3JlcyhpbnQgZmQpCj4gICAKPiAgIHN0 YXRpYyBib29sIGhhc19leHRlbmRlZF9idXN5X2lvY3RsKGludCBmZCkKPiAgIHsKPiAtCWlndF9z cGluX3QgKnNwaW4gPSBpZ3Rfc3Bpbl9iYXRjaF9uZXcoZmQsIDAsIEk5MTVfRVhFQ19SRU5ERVIs IDApOwo+ICsJaWd0X3NwaW5fdCAqc3BpbiA9IGlndF9zcGluX2JhdGNoX25ldyhmZCwgLmVuZ2lu ZSA9IEk5MTVfRVhFQ19SRU5ERVIpOwo+ICAgCXVpbnQzMl90IHJlYWQsIHdyaXRlOwo+ICAgCj4g ICAJX19nZW1fYnVzeShmZCwgc3Bpbi0+aGFuZGxlLCAmcmVhZCwgJndyaXRlKTsKPiBAQCAtNDI2 LDcgKzQyNyw3IEBAIHN0YXRpYyBib29sIGhhc19leHRlbmRlZF9idXN5X2lvY3RsKGludCBmZCkK PiAgIAo+ICAgc3RhdGljIHZvaWQgYmFzaWMoaW50IGZkLCB1bnNpZ25lZCByaW5nLCB1bnNpZ25l ZCBmbGFncykKPiAgIHsKPiAtCWlndF9zcGluX3QgKnNwaW4gPSBpZ3Rfc3Bpbl9iYXRjaF9uZXco ZmQsIDAsIHJpbmcsIDApOwo+ICsJaWd0X3NwaW5fdCAqc3BpbiA9IGlndF9zcGluX2JhdGNoX25l dyhmZCwgLmVuZ2luZSA9IHJpbmcpOwo+ICAgCXN0cnVjdCB0aW1lc3BlYyB0djsKPiAgIAlpbnQg dGltZW91dDsKPiAgIAlib29sIGJ1c3k7Cj4gZGlmZiAtLWdpdCBhL3Rlc3RzL2dlbV9jdHhfaXNv bGF0aW9uLmMgYi90ZXN0cy9nZW1fY3R4X2lzb2xhdGlvbi5jCj4gaW5kZXggZmU3ZDM0OTBjLi4y ZTE5ZThjMDMgMTAwNjQ0Cj4gLS0tIGEvdGVzdHMvZ2VtX2N0eF9pc29sYXRpb24uYwo+ICsrKyBi L3Rlc3RzL2dlbV9jdHhfaXNvbGF0aW9uLmMKPiBAQCAtNTAyLDcgKzUwMiw3IEBAIHN0YXRpYyB2 b2lkIGlzb2xhdGlvbihpbnQgZmQsCj4gICAJCWN0eFswXSA9IGdlbV9jb250ZXh0X2NyZWF0ZShm ZCk7Cj4gICAJCXJlZ3NbMF0gPSByZWFkX3JlZ3MoZmQsIGN0eFswXSwgZSwgZmxhZ3MpOwo+ICAg Cj4gLQkJc3BpbiA9IGlndF9zcGluX2JhdGNoX25ldyhmZCwgY3R4WzBdLCBlbmdpbmUsIDApOwo+ ICsJCXNwaW4gPSBpZ3Rfc3Bpbl9iYXRjaF9uZXcoZmQsIC5jdHggPSBjdHhbMF0sIC5lbmdpbmUg PSBlbmdpbmUpOwo+ICAgCj4gICAJCWlmIChmbGFncyAmIERJUlRZMSkgewo+ICAgCQkJaWd0X2Rl YnVnKCIlc1slZF06IFNldHRpbmcgYWxsIHJlZ2lzdGVycyBvZiBjdHggMCB0byAweCUwOHhcbiIs Cj4gQEAgLTU1Nyw4ICs1NTcsMTEgQEAgc3RhdGljIHZvaWQgaXNvbGF0aW9uKGludCBmZCwKPiAg IAo+ICAgc3RhdGljIHZvaWQgaW5qZWN0X3Jlc2V0X2NvbnRleHQoaW50IGZkLCB1bnNpZ25lZCBp bnQgZW5naW5lKQo+ICAgewo+ICsJc3RydWN0IGlndF9zcGluX2ZhY3Rvcnkgb3B0cyA9IHsKPiAr CQkuY3R4ID0gZ2VtX2NvbnRleHRfY3JlYXRlKGZkKSwKPiArCQkuZW5naW5lID0gZW5naW5lLAo+ ICsJfTsKPiAgIAlpZ3Rfc3Bpbl90ICpzcGluOwo+IC0JdWludDMyX3QgY3R4Owo+ICAgCj4gICAJ LyoKPiAgIAkgKiBGb3JjZSBhIGNvbnRleHQgc3dpdGNoIGJlZm9yZSB0cmlnZ2VyaW5nIHRoZSBy ZXNldCwgb3IgZWxzZQo+IEBAIC01NjYsMTkgKzU2OSwyMCBAQCBzdGF0aWMgdm9pZCBpbmplY3Rf cmVzZXRfY29udGV4dChpbnQgZmQsIHVuc2lnbmVkIGludCBlbmdpbmUpCj4gICAJICogSFcgZm9y IHNjcmV3aW5nIHVwIGlmIHRoZSBjb250ZXh0IHdhcyBhbHJlYWR5IGJyb2tlbi4KPiAgIAkgKi8K PiAgIAo+IC0JY3R4ID0gZ2VtX2NvbnRleHRfY3JlYXRlKGZkKTsKPiAtCWlmIChnZW1fY2FuX3N0 b3JlX2R3b3JkKGZkLCBlbmdpbmUpKSB7Cj4gLQkJc3BpbiA9IF9faWd0X3NwaW5fYmF0Y2hfbmV3 X3BvbGwoZmQsIGN0eCwgZW5naW5lKTsKPiArCWlmIChnZW1fY2FuX3N0b3JlX2R3b3JkKGZkLCBl bmdpbmUpKQo+ICsJCW9wdHMuZmxhZ3MgfD0gSUdUX1NQSU5fUE9MTF9SVU47Cj4gKwo+ICsJc3Bp biA9IF9faWd0X3NwaW5fYmF0Y2hfZmFjdG9yeShmZCwgJm9wdHMpOwo+ICsKPiArCWlmIChzcGlu LT5ydW5uaW5nKQo+ICAgCQlpZ3Rfc3Bpbl9idXN5d2FpdF91bnRpbF9ydW5uaW5nKHNwaW4pOwo+ IC0JfSBlbHNlIHsKPiAtCQlzcGluID0gX19pZ3Rfc3Bpbl9iYXRjaF9uZXcoZmQsIGN0eCwgZW5n aW5lLCAwKTsKPiArCWVsc2UKPiAgIAkJdXNsZWVwKDEwMDApOyAvKiBiZXR0ZXIgdGhhbiBub3Ro aW5nICovCj4gLQl9Cj4gICAKPiAgIAlpZ3RfZm9yY2VfZ3B1X3Jlc2V0KGZkKTsKPiAgIAo+ICAg CWlndF9zcGluX2JhdGNoX2ZyZWUoZmQsIHNwaW4pOwo+IC0JZ2VtX2NvbnRleHRfZGVzdHJveShm ZCwgY3R4KTsKPiArCWdlbV9jb250ZXh0X2Rlc3Ryb3koZmQsIG9wdHMuY3R4KTsKPiAgIH0KPiAg IAo+ICAgc3RhdGljIHZvaWQgcHJlc2VydmF0aW9uKGludCBmZCwKPiBAQCAtNjA0LDcgKzYwOCw3 IEBAIHN0YXRpYyB2b2lkIHByZXNlcnZhdGlvbihpbnQgZmQsCj4gICAJZ2VtX3F1aWVzY2VudF9n cHUoZmQpOwo+ICAgCj4gICAJY3R4W251bV92YWx1ZXNdID0gZ2VtX2NvbnRleHRfY3JlYXRlKGZk KTsKPiAtCXNwaW4gPSBpZ3Rfc3Bpbl9iYXRjaF9uZXcoZmQsIGN0eFtudW1fdmFsdWVzXSwgZW5n aW5lLCAwKTsKPiArCXNwaW4gPSBpZ3Rfc3Bpbl9iYXRjaF9uZXcoZmQsIC5jdHggPSBjdHhbbnVt X3ZhbHVlc10sIC5lbmdpbmUgPSBlbmdpbmUpOwo+ICAgCXJlZ3NbbnVtX3ZhbHVlc11bMF0gPSBy ZWFkX3JlZ3MoZmQsIGN0eFtudW1fdmFsdWVzXSwgZSwgZmxhZ3MpOwo+ICAgCWZvciAoaW50IHYg PSAwOyB2IDwgbnVtX3ZhbHVlczsgdisrKSB7Cj4gICAJCWN0eFt2XSA9IGdlbV9jb250ZXh0X2Ny ZWF0ZShmZCk7Cj4gQEAgLTY0NCw3ICs2NDgsNyBAQCBzdGF0aWMgdm9pZCBwcmVzZXJ2YXRpb24o aW50IGZkLAo+ICAgCQlicmVhazsKPiAgIAl9Cj4gICAKPiAtCXNwaW4gPSBpZ3Rfc3Bpbl9iYXRj aF9uZXcoZmQsIGN0eFtudW1fdmFsdWVzXSwgZW5naW5lLCAwKTsKPiArCXNwaW4gPSBpZ3Rfc3Bp bl9iYXRjaF9uZXcoZmQsIC5jdHggPSBjdHhbbnVtX3ZhbHVlc10sIC5lbmdpbmUgPSBlbmdpbmUp Owo+ICAgCWZvciAoaW50IHYgPSAwOyB2IDwgbnVtX3ZhbHVlczsgdisrKQo+ICAgCQlyZWdzW3Zd WzFdID0gcmVhZF9yZWdzKGZkLCBjdHhbdl0sIGUsIGZsYWdzKTsKPiAgIAlyZWdzW251bV92YWx1 ZXNdWzFdID0gcmVhZF9yZWdzKGZkLCBjdHhbbnVtX3ZhbHVlc10sIGUsIGZsYWdzKTsKPiBkaWZm IC0tZ2l0IGEvdGVzdHMvZ2VtX2Vpby5jIGIvdGVzdHMvZ2VtX2Vpby5jCj4gaW5kZXggNWZhZjc1 MDJiLi4wZWMxYWFlYzkgMTAwNjQ0Cj4gLS0tIGEvdGVzdHMvZ2VtX2Vpby5jCj4gKysrIGIvdGVz dHMvZ2VtX2Vpby5jCj4gQEAgLTE1NywxMCArMTU3LDE1IEBAIHN0YXRpYyBpbnQgX19nZW1fd2Fp dChpbnQgZmQsIHVpbnQzMl90IGhhbmRsZSwgaW50NjRfdCB0aW1lb3V0KQo+ICAgCj4gICBzdGF0 aWMgaWd0X3NwaW5fdCAqIF9fc3Bpbl9wb2xsKGludCBmZCwgdWludDMyX3QgY3R4LCB1bnNpZ25l ZCBsb25nIGZsYWdzKQo+ICAgewo+IC0JaWYgKGdlbV9jYW5fc3RvcmVfZHdvcmQoZmQsIGZsYWdz KSkKPiAtCQlyZXR1cm4gX19pZ3Rfc3Bpbl9iYXRjaF9uZXdfcG9sbChmZCwgY3R4LCBmbGFncyk7 Cj4gLQllbHNlCj4gLQkJcmV0dXJuIF9faWd0X3NwaW5fYmF0Y2hfbmV3KGZkLCBjdHgsIGZsYWdz LCAwKTsKPiArCXN0cnVjdCBpZ3Rfc3Bpbl9mYWN0b3J5IG9wdHMgPSB7Cj4gKwkJLmN0eCA9IGN0 eCwKPiArCQkuZW5naW5lID0gZmxhZ3MsCj4gKwl9Owo+ICsKPiArCWlmIChnZW1fY2FuX3N0b3Jl X2R3b3JkKGZkLCBvcHRzLmVuZ2luZSkpCj4gKwkJb3B0cy5mbGFncyB8PSBJR1RfU1BJTl9QT0xM X1JVTjsKPiArCj4gKwlyZXR1cm4gX19pZ3Rfc3Bpbl9iYXRjaF9mYWN0b3J5KGZkLCAmb3B0cyk7 Cj4gICB9Cj4gICAKPiAgIHN0YXRpYyB2b2lkIF9fc3Bpbl93YWl0KGludCBmZCwgaWd0X3NwaW5f dCAqc3BpbikKPiBkaWZmIC0tZ2l0IGEvdGVzdHMvZ2VtX2V4ZWNfZmVuY2UuYyBiL3Rlc3RzL2dl bV9leGVjX2ZlbmNlLmMKPiBpbmRleCBlYjkzMzA4ZDEuLmJhNDY1OTVkMyAxMDA2NDQKPiAtLS0g YS90ZXN0cy9nZW1fZXhlY19mZW5jZS5jCj4gKysrIGIvdGVzdHMvZ2VtX2V4ZWNfZmVuY2UuYwo+ IEBAIC00NjgsNyArNDY4LDcgQEAgc3RhdGljIHZvaWQgdGVzdF9wYXJhbGxlbChpbnQgZmQsIHVu c2lnbmVkIGludCBtYXN0ZXIpCj4gICAJLyogRmlsbCB0aGUgcXVldWUgd2l0aCBtYW55IHJlcXVl c3RzIHNvIHRoYXQgdGhlIG5leHQgb25lIGhhcyB0bwo+ICAgCSAqIHdhaXQgYmVmb3JlIGl0IGNh biBiZSBleGVjdXRlZCBieSB0aGUgaGFyZHdhcmUuCj4gICAJICovCj4gLQlzcGluID0gaWd0X3Nw aW5fYmF0Y2hfbmV3KGZkLCAwLCBtYXN0ZXIsIHBsdWcpOwo+ICsJc3BpbiA9IGlndF9zcGluX2Jh dGNoX25ldyhmZCwgLmVuZ2luZSA9IG1hc3RlciwgLmRlcGVuZGVuY3kgPSBwbHVnKTsKPiAgIAly ZXN1Ym1pdChmZCwgc3Bpbi0+aGFuZGxlLCBtYXN0ZXIsIDE2KTsKPiAgIAo+ICAgCS8qIE5vdyBx dWV1ZSB0aGUgbWFzdGVyIHJlcXVlc3QgYW5kIGl0cyBzZWNvbmRhcmllcyAqLwo+IEBAIC02NTEs NyArNjUxLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9rZWVwX2luX2ZlbmNlKGludCBmZCwgdW5zaWdu ZWQgaW50IGVuZ2luZSwgdW5zaWduZWQgaW50IGZsYWdzKQo+ICAgCWlndF9zcGluX3QgKnNwaW47 Cj4gICAJaW50IGZlbmNlOwo+ICAgCj4gLQlzcGluID0gaWd0X3NwaW5fYmF0Y2hfbmV3KGZkLCAw LCBlbmdpbmUsIDApOwo+ICsJc3BpbiA9IGlndF9zcGluX2JhdGNoX25ldyhmZCwgLmVuZ2luZSA9 IGVuZ2luZSk7Cj4gICAKPiAgIAlnZW1fZXhlY2J1Zl93cihmZCwgJmV4ZWNidWYpOwo+ICAgCWZl bmNlID0gdXBwZXJfMzJfYml0cyhleGVjYnVmLnJzdmQyKTsKPiBAQCAtMTA3MCw3ICsxMDcwLDcg QEAgc3RhdGljIHZvaWQgdGVzdF9zeW5jb2JqX3VudXNlZF9mZW5jZShpbnQgZmQpCj4gICAJc3Ry dWN0IGxvY2FsX2dlbV9leGVjX2ZlbmNlIGZlbmNlID0gewo+ICAgCQkuaGFuZGxlID0gc3luY29i al9jcmVhdGUoZmQpLAo+ICAgCX07Cj4gLQlpZ3Rfc3Bpbl90ICpzcGluID0gaWd0X3NwaW5fYmF0 Y2hfbmV3KGZkLCAwLCAwLCAwKTsKPiArCWlndF9zcGluX3QgKnNwaW4gPSBpZ3Rfc3Bpbl9iYXRj aF9uZXcoZmQpOwo+ICAgCj4gICAJLyogc2FuaXR5IGNoZWNrIG91ciBzeW5jb2JqX3RvX3N5bmNf ZmlsZSBpbnRlcmZhY2UgKi8KPiAgIAlpZ3RfYXNzZXJ0X2VxKF9fc3luY29ial90b19zeW5jX2Zp bGUoZmQsIDApLCAtRU5PRU5UKTsKPiBAQCAtMTE2Miw3ICsxMTYyLDcgQEAgc3RhdGljIHZvaWQg dGVzdF9zeW5jb2JqX3NpZ25hbChpbnQgZmQpCj4gICAJc3RydWN0IGxvY2FsX2dlbV9leGVjX2Zl bmNlIGZlbmNlID0gewo+ICAgCQkuaGFuZGxlID0gc3luY29ial9jcmVhdGUoZmQpLAo+ICAgCX07 Cj4gLQlpZ3Rfc3Bpbl90ICpzcGluID0gaWd0X3NwaW5fYmF0Y2hfbmV3KGZkLCAwLCAwLCAwKTsK PiArCWlndF9zcGluX3QgKnNwaW4gPSBpZ3Rfc3Bpbl9iYXRjaF9uZXcoZmQpOwo+ICAgCj4gICAJ LyogQ2hlY2sgdGhhdCB0aGUgc3luY29iaiBpcyBzaWduYWxlZCBvbmx5IHdoZW4gb3VyIHJlcXVl c3QvZmVuY2UgaXMgKi8KPiAgIAo+IEBAIC0xMjEyLDcgKzEyMTIsNyBAQCBzdGF0aWMgdm9pZCB0 ZXN0X3N5bmNvYmpfd2FpdChpbnQgZmQpCj4gICAKPiAgIAlnZW1fcXVpZXNjZW50X2dwdShmZCk7 Cj4gICAKPiAtCXNwaW4gPSBpZ3Rfc3Bpbl9iYXRjaF9uZXcoZmQsIDAsIDAsIDApOwo+ICsJc3Bp biA9IGlndF9zcGluX2JhdGNoX25ldyhmZCk7Cj4gICAKPiAgIAltZW1zZXQoJmV4ZWNidWYsIDAs IHNpemVvZihleGVjYnVmKSk7Cj4gICAJZXhlY2J1Zi5idWZmZXJzX3B0ciA9IHRvX3VzZXJfcG9p bnRlcigmb2JqKTsKPiBAQCAtMTI4Miw3ICsxMjgyLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9zeW5j b2JqX2V4cG9ydChpbnQgZmQpCj4gICAJCS5oYW5kbGUgPSBzeW5jb2JqX2NyZWF0ZShmZCksCj4g ICAJfTsKPiAgIAlpbnQgZXhwb3J0WzJdOwo+IC0JaWd0X3NwaW5fdCAqc3BpbiA9IGlndF9zcGlu X2JhdGNoX25ldyhmZCwgMCwgMCwgMCk7Cj4gKwlpZ3Rfc3Bpbl90ICpzcGluID0gaWd0X3NwaW5f YmF0Y2hfbmV3KGZkKTsKPiAgIAo+ICAgCS8qIENoZWNrIHRoYXQgaWYgd2UgZXhwb3J0IHRoZSBz eW5jb2JqIHByaW9yIHRvIHVzZSBpdCBwaWNrcyB1cAo+ICAgCSAqIHRoZSBsYXRlciBmZW5jZS4g VGhpcyBhbGxvd3MgYSBzeW5jb2JqIHRvIGVzdGFibGlzaCBhIGNoYW5uZWwKPiBAQCAtMTM0MCw3 ICsxMzQwLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9zeW5jb2JqX3JlcGVhdChpbnQgZmQpCj4gICAJ c3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBleGVjYnVmOwo+ICAgCXN0cnVjdCBsb2Nh bF9nZW1fZXhlY19mZW5jZSAqZmVuY2U7Cj4gICAJaW50IGV4cG9ydDsKPiAtCWlndF9zcGluX3Qg KnNwaW4gPSBpZ3Rfc3Bpbl9iYXRjaF9uZXcoZmQsIDAsIDAsIDApOwo+ICsJaWd0X3NwaW5fdCAq c3BpbiA9IGlndF9zcGluX2JhdGNoX25ldyhmZCk7Cj4gICAKPiAgIAkvKiBDaGVjayB0aGF0IHdl IGNhbiB3YWl0IG9uIHRoZSBzYW1lIGZlbmNlIG11bHRpcGxlIHRpbWVzICovCj4gICAJZmVuY2Ug PSBjYWxsb2MobmZlbmNlcywgc2l6ZW9mKCpmZW5jZSkpOwo+IEBAIC0xMzk1LDcgKzEzOTUsNyBA QCBzdGF0aWMgdm9pZCB0ZXN0X3N5bmNvYmpfaW1wb3J0KGludCBmZCkKPiAgIAljb25zdCB1aW50 MzJfdCBiYmUgPSBNSV9CQVRDSF9CVUZGRVJfRU5EOwo+ICAgCXN0cnVjdCBkcm1faTkxNV9nZW1f ZXhlY19vYmplY3QyIG9iajsKPiAgIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4 ZWNidWY7Cj4gLQlpZ3Rfc3Bpbl90ICpzcGluID0gaWd0X3NwaW5fYmF0Y2hfbmV3KGZkLCAwLCAw LCAwKTsKPiArCWlndF9zcGluX3QgKnNwaW4gPSBpZ3Rfc3Bpbl9iYXRjaF9uZXcoZmQpOwo+ICAg CXVpbnQzMl90IHN5bmMgPSBzeW5jb2JqX2NyZWF0ZShmZCk7Cj4gICAJaW50IGZlbmNlOwo+ICAg Cj4gZGlmZiAtLWdpdCBhL3Rlc3RzL2dlbV9leGVjX2xhdGVuY3kuYyBiL3Rlc3RzL2dlbV9leGVj X2xhdGVuY3kuYwo+IGluZGV4IGVhMmU0YzY4MS4uNzU4MTFmMzI1IDEwMDY0NAo+IC0tLSBhL3Rl c3RzL2dlbV9leGVjX2xhdGVuY3kuYwo+ICsrKyBiL3Rlc3RzL2dlbV9leGVjX2xhdGVuY3kuYwo+ IEBAIC02Myw2ICs2MywxMCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHJpbmdfc2l6ZTsKPiAgIHN0 YXRpYyB2b2lkCj4gICBwb2xsX3JpbmcoaW50IGZkLCB1bnNpZ25lZCByaW5nLCBjb25zdCBjaGFy ICpuYW1lKQo+ICAgewo+ICsJY29uc3Qgc3RydWN0IGlndF9zcGluX2ZhY3Rvcnkgb3B0cyA9IHsK PiArCQkuZW5naW5lID0gcmluZywKPiArCQkuZmxhZ3MgPSBJR1RfU1BJTl9QT0xMX1JVTiwKPiAr CX07Cj4gICAJc3RydWN0IHRpbWVzcGVjIHR2ID0ge307Cj4gICAJdW5zaWduZWQgbG9uZyBjeWNs ZXM7Cj4gICAJaWd0X3NwaW5fdCAqc3BpblsyXTsKPiBAQCAtNzIsMTEgKzc2LDExIEBAIHBvbGxf cmluZyhpbnQgZmQsIHVuc2lnbmVkIHJpbmcsIGNvbnN0IGNoYXIgKm5hbWUpCj4gICAJZ2VtX3Jl cXVpcmVfcmluZyhmZCwgcmluZyk7Cj4gICAJaWd0X3JlcXVpcmUoZ2VtX2Nhbl9zdG9yZV9kd29y ZChmZCwgcmluZykpOwo+ICAgCj4gLQlzcGluWzBdID0gX19pZ3Rfc3Bpbl9iYXRjaF9uZXdfcG9s bChmZCwgMCwgcmluZyk7Cj4gKwlzcGluWzBdID0gX19pZ3Rfc3Bpbl9iYXRjaF9mYWN0b3J5KGZk LCAmb3B0cyk7Cj4gICAJaWd0X2Fzc2VydChzcGluWzBdLT5ydW5uaW5nKTsKPiAgIAljbWQgPSAq c3BpblswXS0+YmF0Y2g7Cj4gICAKPiAtCXNwaW5bMV0gPSBfX2lndF9zcGluX2JhdGNoX25ld19w b2xsKGZkLCAwLCByaW5nKTsKPiArCXNwaW5bMV0gPSBfX2lndF9zcGluX2JhdGNoX2ZhY3Rvcnko ZmQsICZvcHRzKTsKPiAgIAlpZ3RfYXNzZXJ0KHNwaW5bMV0tPnJ1bm5pbmcpOwo+ICAgCWlndF9h c3NlcnQoY21kID09ICpzcGluWzFdLT5iYXRjaCk7Cj4gICAKPiBAQCAtMzEyLDcgKzMxNiw5IEBA IHN0YXRpYyB2b2lkIGxhdGVuY3lfZnJvbV9yaW5nKGludCBmZCwKPiAgIAkJCSAgICAgICBJOTE1 X0dFTV9ET01BSU5fR1RUKTsKPiAgIAo+ICAgCQlpZiAoZmxhZ3MgJiBQUkVFTVBUKQo+IC0JCQlz cGluID0gX19pZ3Rfc3Bpbl9iYXRjaF9uZXcoZmQsIGN0eFswXSwgcmluZywgMCk7Cj4gKwkJCXNw aW4gPSBfX2lndF9zcGluX2JhdGNoX25ldyhmZCwKPiArCQkJCQkJICAgIC5jdHggPSBjdHhbMF0s Cj4gKwkJCQkJCSAgICAuZW5naW5lID0gcmluZyk7Cj4gICAKPiAgIAkJaWYgKGZsYWdzICYgQ09S Sykgewo+ICAgCQkJb2JqWzBdLmhhbmRsZSA9IGlndF9jb3JrX3BsdWcoJmMsIGZkKTsKPiBAQCAt NDU2LDYgKzQ2MiwxMCBAQCBydGhvZ19sYXRlbmN5X29uX3JpbmcoaW50IGZkLCB1bnNpZ25lZCBp bnQgZW5naW5lLCBjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbgo+ICAgCX07Cj4gICAjZGVm aW5lIE5QQVNTIEFSUkFZX1NJWkUocGFzc25hbWUpCj4gICAjZGVmaW5lIE1NQVBfU1ogKDY0IDw8 IDEwKQo+ICsJY29uc3Qgc3RydWN0IGlndF9zcGluX2ZhY3Rvcnkgb3B0cyA9IHsKPiArCQkuZW5n aW5lID0gZW5naW5lLAo+ICsJCS5mbGFncyA9IElHVF9TUElOX1BPTExfUlVOLAo+ICsJfTsKPiAg IAlzdHJ1Y3QgcnRfcGt0ICpyZXN1bHRzOwo+ICAgCXVuc2lnbmVkIGludCBlbmdpbmVzWzE2XTsK PiAgIAljb25zdCBjaGFyICpuYW1lc1sxNl07Cj4gQEAgLTUxMyw3ICs1MjMsNyBAQCBydGhvZ19s YXRlbmN5X29uX3JpbmcoaW50IGZkLCB1bnNpZ25lZCBpbnQgZW5naW5lLCBjb25zdCBjaGFyICpu YW1lLCB1bnNpZ25lZCBpbgo+ICAgCj4gICAJCQl1c2xlZXAoMjUwKTsKPiAgIAo+IC0JCQlzcGlu ID0gX19pZ3Rfc3Bpbl9iYXRjaF9uZXdfcG9sbChmZCwgMCwgZW5naW5lKTsKPiArCQkJc3BpbiA9 IF9faWd0X3NwaW5fYmF0Y2hfZmFjdG9yeShmZCwgJm9wdHMpOwo+ICAgCQkJaWYgKCFzcGluKSB7 Cj4gICAJCQkJaWd0X3dhcm4oIkZhaWxlZCB0byBjcmVhdGUgc3Bpbm5lciEgKCVzKVxuIiwKPiAg IAkJCQkJIHBhc3NuYW1lW3Bhc3NdKTsKPiBkaWZmIC0tZ2l0IGEvdGVzdHMvZ2VtX2V4ZWNfbm9w LmMgYi90ZXN0cy9nZW1fZXhlY19ub3AuYwo+IGluZGV4IDA1MjNiMWMwMi4uNzRkMjc1MjJkIDEw MDY0NAo+IC0tLSBhL3Rlc3RzL2dlbV9leGVjX25vcC5jCj4gKysrIGIvdGVzdHMvZ2VtX2V4ZWNf bm9wLmMKPiBAQCAtNzA5LDcgKzcwOSw5IEBAIHN0YXRpYyB2b2lkIHByZWVtcHQoaW50IGZkLCB1 aW50MzJfdCBoYW5kbGUsCj4gICAJY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICZzdGFy dCk7Cj4gICAJZG8gewo+ICAgCQlpZ3Rfc3Bpbl90ICpzcGluID0KPiAtCQkJX19pZ3Rfc3Bpbl9i YXRjaF9uZXcoZmQsIGN0eFswXSwgcmluZ19pZCwgMCk7Cj4gKwkJCV9faWd0X3NwaW5fYmF0Y2hf bmV3KGZkLAo+ICsJCQkJCSAgICAgLmN0eCA9IGN0eFswXSwKPiArCQkJCQkgICAgIC5lbmdpbmUg PSByaW5nX2lkKTsKPiAgIAo+ICAgCQlmb3IgKGludCBsb29wID0gMDsgbG9vcCA8IDEwMjQ7IGxv b3ArKykKPiAgIAkJCWdlbV9leGVjYnVmKGZkLCAmZXhlY2J1Zik7Cj4gZGlmZiAtLWdpdCBhL3Rl c3RzL2dlbV9leGVjX3JlbG9jLmMgYi90ZXN0cy9nZW1fZXhlY19yZWxvYy5jCj4gaW5kZXggOTFj NjY5MWFmLi44MzdmNjBhNmMgMTAwNjQ0Cj4gLS0tIGEvdGVzdHMvZ2VtX2V4ZWNfcmVsb2MuYwo+ ICsrKyBiL3Rlc3RzL2dlbV9leGVjX3JlbG9jLmMKPiBAQCAtMzg4LDcgKzM4OCw5IEBAIHN0YXRp YyB2b2lkIGJhc2ljX3JlbG9jKGludCBmZCwgdW5zaWduZWQgYmVmb3JlLCB1bnNpZ25lZCBhZnRl ciwgdW5zaWduZWQgZmxhZ3MpCj4gICAJCX0KPiAgIAo+ICAgCQlpZiAoZmxhZ3MgJiBBQ1RJVkUp IHsKPiAtCQkJc3BpbiA9IGlndF9zcGluX2JhdGNoX25ldyhmZCwgMCwgSTkxNV9FWEVDX0RFRkFV TFQsIG9iai5oYW5kbGUpOwo+ICsJCQlzcGluID0gaWd0X3NwaW5fYmF0Y2hfbmV3KGZkLAo+ICsJ CQkJCQkgIC5lbmdpbmUgPSBJOTE1X0VYRUNfREVGQVVMVCwKPiArCQkJCQkJICAuZGVwZW5kZW5j eSA9IG9iai5oYW5kbGUpOwo+ICAgCQkJaWYgKCEoZmxhZ3MgJiBIQU5HKSkKPiAgIAkJCQlpZ3Rf c3Bpbl9iYXRjaF9zZXRfdGltZW91dChzcGluLCBOU0VDX1BFUl9TRUMvMTAwKTsKPiAgIAkJCWln dF9hc3NlcnQoZ2VtX2JvX2J1c3koZmQsIG9iai5oYW5kbGUpKTsKPiBAQCAtNDU0LDcgKzQ1Niw5 IEBAIHN0YXRpYyB2b2lkIGJhc2ljX3JlbG9jKGludCBmZCwgdW5zaWduZWQgYmVmb3JlLCB1bnNp Z25lZCBhZnRlciwgdW5zaWduZWQgZmxhZ3MpCj4gICAJCX0KPiAgIAo+ICAgCQlpZiAoZmxhZ3Mg JiBBQ1RJVkUpIHsKPiAtCQkJc3BpbiA9IGlndF9zcGluX2JhdGNoX25ldyhmZCwgMCwgSTkxNV9F WEVDX0RFRkFVTFQsIG9iai5oYW5kbGUpOwo+ICsJCQlzcGluID0gaWd0X3NwaW5fYmF0Y2hfbmV3 KGZkLAo+ICsJCQkJCQkgIC5lbmdpbmUgPSBJOTE1X0VYRUNfREVGQVVMVCwKPiArCQkJCQkJICAu ZGVwZW5kZW5jeSA9IG9iai5oYW5kbGUpOwo+ICAgCQkJaWYgKCEoZmxhZ3MgJiBIQU5HKSkKPiAg IAkJCQlpZ3Rfc3Bpbl9iYXRjaF9zZXRfdGltZW91dChzcGluLCBOU0VDX1BFUl9TRUMvMTAwKTsK PiAgIAkJCWlndF9hc3NlcnQoZ2VtX2JvX2J1c3koZmQsIG9iai5oYW5kbGUpKTsKPiBAQCAtNTgx LDcgKzU4NSw3IEBAIHN0YXRpYyB2b2lkIGJhc2ljX3JhbmdlKGludCBmZCwgdW5zaWduZWQgZmxh Z3MpCj4gICAJZXhlY2J1Zi5idWZmZXJfY291bnQgPSBuICsgMTsKPiAgIAo+ICAgCWlmIChmbGFn cyAmIEFDVElWRSkgewo+IC0JCXNwaW4gPSBpZ3Rfc3Bpbl9iYXRjaF9uZXcoZmQsIDAsIDAsIG9i altuXS5oYW5kbGUpOwo+ICsJCXNwaW4gPSBpZ3Rfc3Bpbl9iYXRjaF9uZXcoZmQsIC5kZXBlbmRl bmN5ID0gb2JqW25dLmhhbmRsZSk7Cj4gICAJCWlmICghKGZsYWdzICYgSEFORykpCj4gICAJCQlp Z3Rfc3Bpbl9iYXRjaF9zZXRfdGltZW91dChzcGluLCBOU0VDX1BFUl9TRUMvMTAwKTsKPiAgIAkJ aWd0X2Fzc2VydChnZW1fYm9fYnVzeShmZCwgb2JqW25dLmhhbmRsZSkpOwo+IGRpZmYgLS1naXQg YS90ZXN0cy9nZW1fZXhlY19zY2hlZHVsZS5jIGIvdGVzdHMvZ2VtX2V4ZWNfc2NoZWR1bGUuYwo+ IGluZGV4IDFmNDMxNDdmNy4uMzVhNDRhYjEwIDEwMDY0NAo+IC0tLSBhL3Rlc3RzL2dlbV9leGVj X3NjaGVkdWxlLmMKPiArKysgYi90ZXN0cy9nZW1fZXhlY19zY2hlZHVsZS5jCj4gQEAgLTEzMiw5 ICsxMzIsMTIgQEAgc3RhdGljIHZvaWQgdW5wbHVnX3Nob3dfcXVldWUoaW50IGZkLCBzdHJ1Y3Qg aWd0X2NvcmsgKmMsIHVuc2lnbmVkIGludCBlbmdpbmUpCj4gICAJaWd0X3NwaW5fdCAqc3BpbltN QVhfRUxTUF9RTEVOXTsKPiAgIAo+ICAgCWZvciAoaW50IG4gPSAwOyBuIDwgQVJSQVlfU0laRShz cGluKTsgbisrKSB7Cj4gLQkJdWludDMyX3QgY3R4ID0gY3JlYXRlX2hpZ2hlc3RfcHJpb3JpdHko ZmQpOwo+IC0JCXNwaW5bbl0gPSBfX2lndF9zcGluX2JhdGNoX25ldyhmZCwgY3R4LCBlbmdpbmUs IDApOwo+IC0JCWdlbV9jb250ZXh0X2Rlc3Ryb3koZmQsIGN0eCk7Cj4gKwkJY29uc3Qgc3RydWN0 IGlndF9zcGluX2ZhY3Rvcnkgb3B0cyA9IHsKPiArCQkJLmN0eCA9IGNyZWF0ZV9oaWdoZXN0X3By aW9yaXR5KGZkKSwKPiArCQkJLmVuZ2luZSA9IGVuZ2luZSwKPiArCQl9Owo+ICsJCXNwaW5bbl0g PSBfX2lndF9zcGluX2JhdGNoX2ZhY3RvcnkoZmQsICZvcHRzKTsKPiArCQlnZW1fY29udGV4dF9k ZXN0cm95KGZkLCBvcHRzLmN0eCk7Cj4gICAJfQo+ICAgCj4gICAJaWd0X2NvcmtfdW5wbHVnKGMp OyAvKiBiYXRjaGVzIHdpbGwgbm93IGJlIHF1ZXVlZCBvbiB0aGUgZW5naW5lICovCj4gQEAgLTE5 Niw3ICsxOTksNyBAQCBzdGF0aWMgdm9pZCBpbmRlcGVuZGVudChpbnQgZmQsIHVuc2lnbmVkIGlu dCBlbmdpbmUpCj4gICAJCQljb250aW51ZTsKPiAgIAo+ICAgCQlpZiAoc3BpbiA9PSBOVUxMKSB7 Cj4gLQkJCXNwaW4gPSBfX2lndF9zcGluX2JhdGNoX25ldyhmZCwgMCwgb3RoZXIsIDApOwo+ICsJ CQlzcGluID0gX19pZ3Rfc3Bpbl9iYXRjaF9uZXcoZmQsIC5lbmdpbmUgPSBvdGhlcik7Cj4gICAJ CX0gZWxzZSB7Cj4gICAJCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiBvYmogPSB7 Cj4gICAJCQkJLmhhbmRsZSA9IHNwaW4tPmhhbmRsZSwKPiBAQCAtNDI4LDcgKzQzMSw5IEBAIHN0 YXRpYyB2b2lkIHByZWVtcHQoaW50IGZkLCB1bnNpZ25lZCByaW5nLCB1bnNpZ25lZCBmbGFncykK PiAgIAkJCWN0eFtMT10gPSBnZW1fY29udGV4dF9jcmVhdGUoZmQpOwo+ICAgCQkJZ2VtX2NvbnRl eHRfc2V0X3ByaW9yaXR5KGZkLCBjdHhbTE9dLCBNSU5fUFJJTyk7Cj4gICAJCX0KPiAtCQlzcGlu W25dID0gX19pZ3Rfc3Bpbl9iYXRjaF9uZXcoZmQsIGN0eFtMT10sIHJpbmcsIDApOwo+ICsJCXNw aW5bbl0gPSBfX2lndF9zcGluX2JhdGNoX25ldyhmZCwKPiArCQkJCQkgICAgICAgLmN0eCA9IGN0 eFtMT10sCj4gKwkJCQkJICAgICAgIC5lbmdpbmUgPSByaW5nKTsKPiAgIAkJaWd0X2RlYnVnKCJz cGluWyVkXS5oYW5kbGU9JWRcbiIsIG4sIHNwaW5bbl0tPmhhbmRsZSk7Cj4gICAKPiAgIAkJc3Rv cmVfZHdvcmQoZmQsIGN0eFtISV0sIHJpbmcsIHJlc3VsdCwgMCwgbiArIDEsIDAsIEk5MTVfR0VN X0RPTUFJTl9SRU5ERVIpOwo+IEBAIC00NjIsNyArNDY3LDkgQEAgc3RhdGljIGlndF9zcGluX3Qg Kl9fbm9pc2UoaW50IGZkLCB1aW50MzJfdCBjdHgsIGludCBwcmlvLCBpZ3Rfc3Bpbl90ICpzcGlu KQo+ICAgCj4gICAJZm9yX2VhY2hfcGh5c2ljYWxfZW5naW5lKGZkLCBvdGhlcikgewo+ICAgCQlp ZiAoc3BpbiA9PSBOVUxMKSB7Cj4gLQkJCXNwaW4gPSBfX2lndF9zcGluX2JhdGNoX25ldyhmZCwg Y3R4LCBvdGhlciwgMCk7Cj4gKwkJCXNwaW4gPSBfX2lndF9zcGluX2JhdGNoX25ldyhmZCwKPiAr CQkJCQkJICAgIC5jdHggPSBjdHgsCj4gKwkJCQkJCSAgICAuZW5naW5lID0gb3RoZXIpOwo+ICAg CQl9IGVsc2Ugewo+ICAgCQkJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgb2JqID0g ewo+ICAgCQkJCS5oYW5kbGUgPSBzcGluLT5oYW5kbGUsCj4gQEAgLTY3Miw3ICs2NzksOSBAQCBz dGF0aWMgdm9pZCBwcmVlbXB0X3NlbGYoaW50IGZkLCB1bnNpZ25lZCByaW5nKQo+ICAgCW4gPSAw Owo+ICAgCWdlbV9jb250ZXh0X3NldF9wcmlvcml0eShmZCwgY3R4W0hJXSwgTUlOX1BSSU8pOwo+ ICAgCWZvcl9lYWNoX3BoeXNpY2FsX2VuZ2luZShmZCwgb3RoZXIpIHsKPiAtCQlzcGluW25dID0g X19pZ3Rfc3Bpbl9iYXRjaF9uZXcoZmQsIGN0eFtOT0lTRV0sIG90aGVyLCAwKTsKPiArCQlzcGlu W25dID0gX19pZ3Rfc3Bpbl9iYXRjaF9uZXcoZmQsCj4gKwkJCQkJICAgICAgIC5jdHggPSBjdHhb Tk9JU0VdLAo+ICsJCQkJCSAgICAgICAuZW5naW5lID0gb3RoZXIpOwo+ICAgCQlzdG9yZV9kd29y ZChmZCwgY3R4W0hJXSwgb3RoZXIsCj4gICAJCQkgICAgcmVzdWx0LCAobiArIDEpKnNpemVvZih1 aW50MzJfdCksIG4gKyAxLAo+ICAgCQkJICAgIDAsIEk5MTVfR0VNX0RPTUFJTl9SRU5ERVIpOwo+ IEBAIC03MTQsNyArNzIzLDkgQEAgc3RhdGljIHZvaWQgcHJlZW1wdGl2ZV9oYW5nKGludCBmZCwg dW5zaWduZWQgcmluZykKPiAgIAkJY3R4W0xPXSA9IGdlbV9jb250ZXh0X2NyZWF0ZShmZCk7Cj4g ICAJCWdlbV9jb250ZXh0X3NldF9wcmlvcml0eShmZCwgY3R4W0xPXSwgTUlOX1BSSU8pOwo+ICAg Cj4gLQkJc3BpbltuXSA9IF9faWd0X3NwaW5fYmF0Y2hfbmV3KGZkLCBjdHhbTE9dLCByaW5nLCAw KTsKPiArCQlzcGluW25dID0gX19pZ3Rfc3Bpbl9iYXRjaF9uZXcoZmQsCj4gKwkJCQkJICAgICAg IC5jdHggPSBjdHhbTE9dLAo+ICsJCQkJCSAgICAgICAuZW5naW5lID0gcmluZyk7Cj4gICAKPiAg IAkJZ2VtX2NvbnRleHRfZGVzdHJveShmZCwgY3R4W0xPXSk7Cj4gICAJfQo+IGRpZmYgLS1naXQg YS90ZXN0cy9nZW1fZXhlY19zdXNwZW5kLmMgYi90ZXN0cy9nZW1fZXhlY19zdXNwZW5kLmMKPiBp bmRleCBkYjJiY2EyNjIuLjQzYzUyZDEwNSAxMDA2NDQKPiAtLS0gYS90ZXN0cy9nZW1fZXhlY19z dXNwZW5kLmMKPiArKysgYi90ZXN0cy9nZW1fZXhlY19zdXNwZW5kLmMKPiBAQCAtMTg5LDcgKzE4 OSw3IEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGludCBmZCwgdW5zaWduZWQgZW5naW5lLCB1bnNp Z25lZCBmbGFncykKPiAgIAl9Cj4gICAKPiAgIAlpZiAoZmxhZ3MgJiBIQU5HKQo+IC0JCXNwaW4g PSBpZ3Rfc3Bpbl9iYXRjaF9uZXcoZmQsIDAsIGVuZ2luZSwgMCk7Cj4gKwkJc3BpbiA9IGlndF9z cGluX2JhdGNoX25ldyhmZCwgLmVuZ2luZSA9IGVuZ2luZSk7Cj4gICAKPiAgIAlzd2l0Y2ggKG1v ZGUoZmxhZ3MpKSB7Cj4gICAJY2FzZSBOT1NMRUVQOgo+IGRpZmYgLS1naXQgYS90ZXN0cy9nZW1f ZmVuY2VkX2V4ZWNfdGhyYXNoLmMgYi90ZXN0cy9nZW1fZmVuY2VkX2V4ZWNfdGhyYXNoLmMKPiBp bmRleCAzODU3OTBhZGEuLjcyNDhkMzEwZCAxMDA2NDQKPiAtLS0gYS90ZXN0cy9nZW1fZmVuY2Vk X2V4ZWNfdGhyYXNoLmMKPiArKysgYi90ZXN0cy9nZW1fZmVuY2VkX2V4ZWNfdGhyYXNoLmMKPiBA QCAtMTMyLDcgKzEzMiw3IEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGludCBmZCwgaW50IG51bV9m ZW5jZXMsIGludCBleHBlY3RlZF9lcnJubywKPiAgIAkJCWlndF9zcGluX3QgKnNwaW4gPSBOVUxM Owo+ICAgCj4gICAJCQlpZiAoZmxhZ3MgJiBCVVNZX0xPQUQpCj4gLQkJCQlzcGluID0gX19pZ3Rf c3Bpbl9iYXRjaF9uZXcoZmQsIDAsIDAsIDApOwo+ICsJCQkJc3BpbiA9IF9faWd0X3NwaW5fYmF0 Y2hfbmV3KGZkKTsKPiAgIAo+ICAgCQkJaWd0X3doaWxlX2ludGVycnVwdGlibGUoZmxhZ3MgJiBJ TlRFUlJVUFRJQkxFKSB7Cj4gICAJCQkJaWd0X2Fzc2VydF9lcShfX2dlbV9leGVjYnVmKGZkLCAm ZXhlY2J1ZltpXSksCj4gZGlmZiAtLWdpdCBhL3Rlc3RzL2dlbV9zaHJpbmsuYyBiL3Rlc3RzL2dl bV9zaHJpbmsuYwo+IGluZGV4IDNkMzM0NTNhYS4uOTI5ZTA0MjZhIDEwMDY0NAo+IC0tLSBhL3Rl c3RzL2dlbV9zaHJpbmsuYwo+ICsrKyBiL3Rlc3RzL2dlbV9zaHJpbmsuYwo+IEBAIC0zNDYsOSAr MzQ2LDkgQEAgc3RhdGljIHZvaWQgcmVjbGFpbSh1bnNpZ25lZCBlbmdpbmUsIGludCB0aW1lb3V0 KQo+ICAgCQl9IHdoaWxlICghKnNoYXJlZCk7Cj4gICAJfQo+ICAgCj4gLQlzcGluID0gaWd0X3Nw aW5fYmF0Y2hfbmV3KGZkLCAwLCBlbmdpbmUsIDApOwo+ICsJc3BpbiA9IGlndF9zcGluX2JhdGNo X25ldyhmZCwgLmVuZ2luZSA9IGVuZ2luZSk7Cj4gICAJaWd0X3VudGlsX3RpbWVvdXQodGltZW91 dCkgewo+IC0JCWlndF9zcGluX3QgKm5leHQgPSBfX2lndF9zcGluX2JhdGNoX25ldyhmZCwgMCwg ZW5naW5lLCAwKTsKPiArCQlpZ3Rfc3Bpbl90ICpuZXh0ID0gX19pZ3Rfc3Bpbl9iYXRjaF9uZXco ZmQsIC5lbmdpbmUgPSBlbmdpbmUpOwo+ICAgCj4gICAJCWlndF9zcGluX2JhdGNoX3NldF90aW1l b3V0KHNwaW4sIHRpbWVvdXRfMTAwbXMpOwo+ICAgCQlnZW1fc3luYyhmZCwgc3Bpbi0+aGFuZGxl KTsKPiBkaWZmIC0tZ2l0IGEvdGVzdHMvZ2VtX3NwaW5fYmF0Y2guYyBiL3Rlc3RzL2dlbV9zcGlu X2JhdGNoLmMKPiBpbmRleCBjZmZlYjZkNzEuLjUyNDEwMDEwYiAxMDA2NDQKPiAtLS0gYS90ZXN0 cy9nZW1fc3Bpbl9iYXRjaC5jCj4gKysrIGIvdGVzdHMvZ2VtX3NwaW5fYmF0Y2guYwo+IEBAIC00 MSw5ICs0MSw5IEBAIHN0YXRpYyB2b2lkIHNwaW4oaW50IGZkLCB1bnNpZ25lZCBpbnQgZW5naW5l LCB1bnNpZ25lZCBpbnQgdGltZW91dF9zZWMpCj4gICAJc3RydWN0IHRpbWVzcGVjIGl0diA9IHsg fTsKPiAgIAl1aW50NjRfdCBlbGFwc2VkOwo+ICAgCj4gLQlzcGluID0gX19pZ3Rfc3Bpbl9iYXRj aF9uZXcoZmQsIDAsIGVuZ2luZSwgMCk7Cj4gKwlzcGluID0gX19pZ3Rfc3Bpbl9iYXRjaF9uZXco ZmQsIC5lbmdpbmUgPSBlbmdpbmUpOwo+ICAgCXdoaWxlICgoZWxhcHNlZCA9IGlndF9uc2VjX2Vs YXBzZWQoJnR2KSkgPj4gMzAgPCB0aW1lb3V0X3NlYykgewo+IC0JCWlndF9zcGluX3QgKm5leHQg PSBfX2lndF9zcGluX2JhdGNoX25ldyhmZCwgMCwgZW5naW5lLCAwKTsKPiArCQlpZ3Rfc3Bpbl90 ICpuZXh0ID0gX19pZ3Rfc3Bpbl9iYXRjaF9uZXcoZmQsIC5lbmdpbmUgPSBlbmdpbmUpOwo+ICAg Cj4gICAJCWlndF9zcGluX2JhdGNoX3NldF90aW1lb3V0KHNwaW4sCj4gICAJCQkJCSAgIHRpbWVv dXRfMTAwbXMgLSBpZ3RfbnNlY19lbGFwc2VkKCZpdHYpKTsKPiBkaWZmIC0tZ2l0IGEvdGVzdHMv Z2VtX3N5bmMuYyBiL3Rlc3RzL2dlbV9zeW5jLmMKPiBpbmRleCAxZTJlMDg5YTEuLjJmY2I5YWEw MSAxMDA2NDQKPiAtLS0gYS90ZXN0cy9nZW1fc3luYy5jCj4gKysrIGIvdGVzdHMvZ2VtX3N5bmMu Ywo+IEBAIC03MTUsOSArNzE1LDggQEAgcHJlZW1wdChpbnQgZmQsIHVuc2lnbmVkIHJpbmcsIGlu dCBudW1fY2hpbGRyZW4sIGludCB0aW1lb3V0KQo+ICAgCQlkbyB7Cj4gICAJCQlpZ3Rfc3Bpbl90 ICpzcGluID0KPiAgIAkJCQlfX2lndF9zcGluX2JhdGNoX25ldyhmZCwKPiAtCQkJCQkJICAgICBj dHhbMF0sCj4gLQkJCQkJCSAgICAgZXhlY2J1Zi5mbGFncywKPiAtCQkJCQkJICAgICAwKTsKPiAr CQkJCQkJICAgICAuY3R4ID0gY3R4WzBdLAo+ICsJCQkJCQkgICAgIC5lbmdpbmUgPSBleGVjYnVm LmZsYWdzKTsKPiAgIAo+ICAgCQkJZG8gewo+ICAgCQkJCWdlbV9leGVjYnVmKGZkLCAmZXhlY2J1 Zik7Cj4gZGlmZiAtLWdpdCBhL3Rlc3RzL2dlbV93YWl0LmMgYi90ZXN0cy9nZW1fd2FpdC5jCj4g aW5kZXggNjFkOGE0MDU5Li43OTE0YzkzNjUgMTAwNjQ0Cj4gLS0tIGEvdGVzdHMvZ2VtX3dhaXQu Ywo+ICsrKyBiL3Rlc3RzL2dlbV93YWl0LmMKPiBAQCAtNzQsNyArNzQsOSBAQCBzdGF0aWMgdm9p ZCBiYXNpYyhpbnQgZmQsIHVuc2lnbmVkIGVuZ2luZSwgdW5zaWduZWQgZmxhZ3MpCj4gICAJSUdU X0NPUktfSEFORExFKGNvcmspOwo+ICAgCXVpbnQzMl90IHBsdWcgPQo+ICAgCQlmbGFncyAmIChX UklURSB8IEFXQUlUKSA/IGlndF9jb3JrX3BsdWcoJmNvcmssIGZkKSA6IDA7Cj4gLQlpZ3Rfc3Bp bl90ICpzcGluID0gaWd0X3NwaW5fYmF0Y2hfbmV3KGZkLCAwLCBlbmdpbmUsIHBsdWcpOwo+ICsJ aWd0X3NwaW5fdCAqc3BpbiA9IGlndF9zcGluX2JhdGNoX25ldyhmZCwKPiArCQkJCQkgICAgICAu ZW5naW5lID0gZW5naW5lLAo+ICsJCQkJCSAgICAgIC5kZXBlbmRlbmN5ID0gcGx1Zyk7Cj4gICAJ c3RydWN0IGRybV9pOTE1X2dlbV93YWl0IHdhaXQgPSB7Cj4gICAJCWZsYWdzICYgV1JJVEUgPyBw bHVnIDogc3Bpbi0+aGFuZGxlCj4gICAJfTsKPiBkaWZmIC0tZ2l0IGEvdGVzdHMva21zX2J1c3ku YyBiL3Rlc3RzL2ttc19idXN5LmMKPiBpbmRleCA0YTRlMGUxNTYuLmFiZjM5ODI4YiAxMDA2NDQK PiAtLS0gYS90ZXN0cy9rbXNfYnVzeS5jCj4gKysrIGIvdGVzdHMva21zX2J1c3kuYwo+IEBAIC04 NCw3ICs4NCw4IEBAIHN0YXRpYyB2b2lkIGZsaXBfdG9fZmIoaWd0X2Rpc3BsYXlfdCAqZHB5LCBp bnQgcGlwZSwKPiAgIAlzdHJ1Y3QgZHJtX2V2ZW50X3ZibGFuayBldjsKPiAgIAo+ICAgCWlndF9z cGluX3QgKnQgPSBpZ3Rfc3Bpbl9iYXRjaF9uZXcoZHB5LT5kcm1fZmQsCj4gLQkJCQkJICAgMCwg cmluZywgZmItPmdlbV9oYW5kbGUpOwo+ICsJCQkJCSAgIC5lbmdpbmUgPSByaW5nLAo+ICsJCQkJ CSAgIC5kZXBlbmRlbmN5ID0gZmItPmdlbV9oYW5kbGUpOwo+ICAgCj4gICAJaWYgKG1vZGVzZXQp IHsKPiAgIAkJLyoKPiBAQCAtMjAwLDcgKzIwMSw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfYXRvbWlj X2NvbW1pdF9oYW5nKGlndF9kaXNwbGF5X3QgKmRweSwgaWd0X3BsYW5lX3QgKnByaW1hcnksCj4g ICAJCQkJICAgIHN0cnVjdCBpZ3RfZmIgKmJ1c3lfZmIsIHVuc2lnbmVkIHJpbmcpCj4gICB7Cj4g ICAJaWd0X3NwaW5fdCAqdCA9IGlndF9zcGluX2JhdGNoX25ldyhkcHktPmRybV9mZCwKPiAtCQkJ CQkgICAwLCByaW5nLCBidXN5X2ZiLT5nZW1faGFuZGxlKTsKPiArCQkJCQkgICAuZW5naW5lID0g cmluZywKPiArCQkJCQkgICAuZGVwZW5kZW5jeSA9IGJ1c3lfZmItPmdlbV9oYW5kbGUpOwo+ICAg CXN0cnVjdCBwb2xsZmQgcGZkID0geyAuZmQgPSBkcHktPmRybV9mZCwgLmV2ZW50cyA9IFBPTExJ TiB9Owo+ICAgCXVuc2lnbmVkIGZsYWdzID0gMDsKPiAgIAlzdHJ1Y3QgZHJtX2V2ZW50X3ZibGFu ayBldjsKPiBAQCAtMjg3LDcgKzI4OSw5IEBAIHN0YXRpYyB2b2lkIHRlc3RfcGFnZWZsaXBfbW9k ZXNldF9oYW5nKGlndF9kaXNwbGF5X3QgKmRweSwKPiAgIAo+ICAgCWlndF9kaXNwbGF5X2NvbW1p dDIoZHB5LCBkcHktPmlzX2F0b21pYyA/IENPTU1JVF9BVE9NSUMgOiBDT01NSVRfTEVHQUNZKTsK PiAgIAo+IC0JdCA9IGlndF9zcGluX2JhdGNoX25ldyhkcHktPmRybV9mZCwgMCwgcmluZywgZmIu Z2VtX2hhbmRsZSk7Cj4gKwl0ID0gaWd0X3NwaW5fYmF0Y2hfbmV3KGRweS0+ZHJtX2ZkLAo+ICsJ CQkgICAgICAgLmVuZ2luZSA9IHJpbmcsCj4gKwkJCSAgICAgICAuZGVwZW5kZW5jeSA9IGZiLmdl bV9oYW5kbGUpOwo+ICAgCj4gICAJZG9fb3JfZGllKGRybU1vZGVQYWdlRmxpcChkcHktPmRybV9m ZCwgZHB5LT5waXBlc1twaXBlXS5jcnRjX2lkLCBmYi5mYl9pZCwgRFJNX01PREVfUEFHRV9GTElQ X0VWRU5ULCAmZmIpKTsKPiAgIAo+IGRpZmYgLS1naXQgYS90ZXN0cy9rbXNfY3Vyc29yX2xlZ2Fj eS5jIGIvdGVzdHMva21zX2N1cnNvcl9sZWdhY3kuYwo+IGluZGV4IGQwYTI4YjNjNC4uODUzNDBk NDNlIDEwMDY0NAo+IC0tLSBhL3Rlc3RzL2ttc19jdXJzb3JfbGVnYWN5LmMKPiArKysgYi90ZXN0 cy9rbXNfY3Vyc29yX2xlZ2FjeS5jCj4gQEAgLTUzMiw3ICs1MzIsOCBAQCBzdGF0aWMgdm9pZCBi YXNpY19mbGlwX2N1cnNvcihpZ3RfZGlzcGxheV90ICpkaXNwbGF5LAo+ICAgCj4gICAJCXNwaW4g PSBOVUxMOwo+ICAgCQlpZiAoZmxhZ3MgJiBCQVNJQ19CVVNZKQo+IC0JCQlzcGluID0gaWd0X3Nw aW5fYmF0Y2hfbmV3KGRpc3BsYXktPmRybV9mZCwgMCwgMCwgZmJfaW5mby5nZW1faGFuZGxlKTsK PiArCQkJc3BpbiA9IGlndF9zcGluX2JhdGNoX25ldyhkaXNwbGF5LT5kcm1fZmQsCj4gKwkJCQkJ CSAgLmRlcGVuZGVuY3kgPSBmYl9pbmZvLmdlbV9oYW5kbGUpOwo+ICAgCj4gICAJCS8qIFN0YXJ0 IHdpdGggYSBzeW5jaHJvbm91cyBxdWVyeSB0byBhbGlnbiB3aXRoIHRoZSB2YmxhbmsgKi8KPiAg IAkJdmJsYW5rX3N0YXJ0ID0gZ2V0X3ZibGFuayhkaXNwbGF5LT5kcm1fZmQsIHBpcGUsIERSTV9W QkxBTktfTkVYVE9OTUlTUyk7Cj4gQEAgLTEzMjMsOCArMTMyNCw4IEBAIHN0YXRpYyB2b2lkIGZs aXBfdnNfY3Vyc29yX2J1c3lfY3JjKGlndF9kaXNwbGF5X3QgKmRpc3BsYXksIGJvb2wgYXRvbWlj KQo+ICAgCWZvciAoaW50IGkgPSAxOyBpID49IDA7IGktLSkgewo+ICAgCQlpZ3Rfc3Bpbl90ICpz cGluOwo+ICAgCj4gLQkJc3BpbiA9IGlndF9zcGluX2JhdGNoX25ldyhkaXNwbGF5LT5kcm1fZmQs IDAsIDAsCj4gLQkJCQkJICBmYl9pbmZvWzFdLmdlbV9oYW5kbGUpOwo+ICsJCXNwaW4gPSBpZ3Rf c3Bpbl9iYXRjaF9uZXcoZGlzcGxheS0+ZHJtX2ZkLAo+ICsJCQkJCSAgLmRlcGVuZGVuY3kgPSBm Yl9pbmZvWzFdLmdlbV9oYW5kbGUpOwo+ICAgCj4gICAJCXZibGFua19zdGFydCA9IGdldF92Ymxh bmsoZGlzcGxheS0+ZHJtX2ZkLCBwaXBlLCBEUk1fVkJMQU5LX05FWFRPTk1JU1MpOwo+ICAgCj4g ZGlmZiAtLWdpdCBhL3Rlc3RzL3BlcmZfcG11LmMgYi90ZXN0cy9wZXJmX3BtdS5jCj4gaW5kZXgg NDU3MGY5MjZkLi5hMWQzNmFjNGYgMTAwNjQ0Cj4gLS0tIGEvdGVzdHMvcGVyZl9wbXUuYwo+ICsr KyBiL3Rlc3RzL3BlcmZfcG11LmMKPiBAQCAtMTcyLDEwICsxNzIsMTUgQEAgc3RhdGljIHVuc2ln bmVkIGludCBlMnJpbmcoaW50IGdlbV9mZCwgY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9l bmdpbmUyICplKQo+ICAgCj4gICBzdGF0aWMgaWd0X3NwaW5fdCAqIF9fc3Bpbl9wb2xsKGludCBm ZCwgdWludDMyX3QgY3R4LCB1bnNpZ25lZCBsb25nIGZsYWdzKQo+ICAgewo+ICsJc3RydWN0IGln dF9zcGluX2ZhY3Rvcnkgb3B0cyA9IHsKPiArCQkuY3R4ID0gY3R4LAo+ICsJCS5lbmdpbmUgPSBm bGFncywKPiArCX07Cj4gKwo+ICAgCWlmIChnZW1fY2FuX3N0b3JlX2R3b3JkKGZkLCBmbGFncykp Cj4gLQkJcmV0dXJuIF9faWd0X3NwaW5fYmF0Y2hfbmV3X3BvbGwoZmQsIGN0eCwgZmxhZ3MpOwo+ IC0JZWxzZQo+IC0JCXJldHVybiBfX2lndF9zcGluX2JhdGNoX25ldyhmZCwgY3R4LCBmbGFncywg MCk7Cj4gKwkJb3B0cy5mbGFncyB8PSBJR1RfU1BJTl9QT0xMX1JVTjsKPiArCj4gKwlyZXR1cm4g X19pZ3Rfc3Bpbl9iYXRjaF9mYWN0b3J5KGZkLCAmb3B0cyk7Cj4gICB9Cj4gICAKPiAgIHN0YXRp YyB1bnNpZ25lZCBsb25nIF9fc3Bpbl93YWl0KGludCBmZCwgaWd0X3NwaW5fdCAqc3BpbikKPiBA QCAtMzU2LDcgKzM2MSw5IEBAIGJ1c3lfZG91YmxlX3N0YXJ0KGludCBnZW1fZmQsIGNvbnN0IHN0 cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZSkKPiAgIAkgKi8KPiAgIAlzcGluWzBdID0g X19zcGluX3N5bmMoZ2VtX2ZkLCAwLCBlMnJpbmcoZ2VtX2ZkLCBlKSk7Cj4gICAJdXNsZWVwKDUw MGUzKTsKPiAtCXNwaW5bMV0gPSBfX2lndF9zcGluX2JhdGNoX25ldyhnZW1fZmQsIGN0eCwgZTJy aW5nKGdlbV9mZCwgZSksIDApOwo+ICsJc3BpblsxXSA9IF9faWd0X3NwaW5fYmF0Y2hfbmV3KGdl bV9mZCwKPiArCQkJCSAgICAgICAuY3R4ID0gY3R4LAo+ICsJCQkJICAgICAgIC5lbmdpbmUgPSBl MnJpbmcoZ2VtX2ZkLCBlKSk7Cj4gICAKPiAgIAkvKgo+ICAgCSAqIE9wZW4gUE1VIGFzIGZhc3Qg YXMgcG9zc2libGUgYWZ0ZXIgdGhlIHNlY29uZCBzcGluIGJhdGNoIGluIGF0dGVtcHQKPiBAQCAt MTA0NSw4ICsxMDUyLDggQEAgc3RhdGljIHZvaWQgY3B1X2hvdHBsdWcoaW50IGdlbV9mZCkKPiAg IAkgKiBDcmVhdGUgdHdvIHNwaW5uZXJzIHNvIHRlc3QgY2FuIGVuc3VyZSBzaG9ydGVyIGdhcHMg aW4gZW5naW5lCj4gICAJICogYnVzeW5lc3MgYXMgaXQgaXMgdGVybWluYXRpbmcgb25lIGFuZCBy ZS1zdGFydGluZyB0aGUgb3RoZXIuCj4gICAJICovCj4gLQlzcGluWzBdID0gaWd0X3NwaW5fYmF0 Y2hfbmV3KGdlbV9mZCwgMCwgSTkxNV9FWEVDX1JFTkRFUiwgMCk7Cj4gLQlzcGluWzFdID0gX19p Z3Rfc3Bpbl9iYXRjaF9uZXcoZ2VtX2ZkLCAwLCBJOTE1X0VYRUNfUkVOREVSLCAwKTsKPiArCXNw aW5bMF0gPSBpZ3Rfc3Bpbl9iYXRjaF9uZXcoZ2VtX2ZkLCAuZW5naW5lID0gSTkxNV9FWEVDX1JF TkRFUik7Cj4gKwlzcGluWzFdID0gX19pZ3Rfc3Bpbl9iYXRjaF9uZXcoZ2VtX2ZkLCAuZW5naW5l ID0gSTkxNV9FWEVDX1JFTkRFUik7Cj4gICAKPiAgIAl2YWwgPSBfX3BtdV9yZWFkX3NpbmdsZShm ZCwgJnRzWzBdKTsKPiAgIAo+IEBAIC0xMTI5LDggKzExMzYsOCBAQCBzdGF0aWMgdm9pZCBjcHVf aG90cGx1ZyhpbnQgZ2VtX2ZkKQo+ICAgCQkJYnJlYWs7Cj4gICAKPiAgIAkJaWd0X3NwaW5fYmF0 Y2hfZnJlZShnZW1fZmQsIHNwaW5bY3VyXSk7Cj4gLQkJc3BpbltjdXJdID0gX19pZ3Rfc3Bpbl9i YXRjaF9uZXcoZ2VtX2ZkLCAwLCBJOTE1X0VYRUNfUkVOREVSLAo+IC0JCQkJCQkgMCk7Cj4gKwkJ c3BpbltjdXJdID0gX19pZ3Rfc3Bpbl9iYXRjaF9uZXcoZ2VtX2ZkLAo+ICsJCQkJCQkgLmVuZ2lu ZSA9IEk5MTVfRVhFQ19SRU5ERVIpOwo+ICAgCQljdXIgXj0gMTsKPiAgIAl9Cj4gICAKPiBAQCAt MTE2Nyw4ICsxMTc0LDkgQEAgdGVzdF9pbnRlcnJ1cHRzKGludCBnZW1fZmQpCj4gICAKPiAgIAkv KiBRdWV1ZSBzcGlubmluZyBiYXRjaGVzLiAqLwo+ICAgCWZvciAoaW50IGkgPSAwOyBpIDwgdGFy Z2V0OyBpKyspIHsKPiAtCQlzcGluW2ldID0gX19pZ3Rfc3Bpbl9iYXRjaF9uZXdfZmVuY2UoZ2Vt X2ZkLAo+IC0JCQkJCQkgICAgIDAsIEk5MTVfRVhFQ19SRU5ERVIpOwo+ICsJCXNwaW5baV0gPSBf X2lndF9zcGluX2JhdGNoX25ldyhnZW1fZmQsCj4gKwkJCQkJICAgICAgIC5lbmdpbmUgPSBJOTE1 X0VYRUNfUkVOREVSLAo+ICsJCQkJCSAgICAgICAuZmxhZ3MgPSBJR1RfU1BJTl9GRU5DRV9PVVQp Owo+ICAgCQlpZiAoaSA9PSAwKSB7Cj4gICAJCQlmZW5jZV9mZCA9IHNwaW5baV0tPm91dF9mZW5j ZTsKPiAgIAkJfSBlbHNlIHsKPiBAQCAtMTIyOSw3ICsxMjM3LDggQEAgdGVzdF9pbnRlcnJ1cHRz X3N5bmMoaW50IGdlbV9mZCkKPiAgIAo+ICAgCS8qIFF1ZXVlIHNwaW5uaW5nIGJhdGNoZXMuICov Cj4gICAJZm9yIChpbnQgaSA9IDA7IGkgPCB0YXJnZXQ7IGkrKykKPiAtCQlzcGluW2ldID0gX19p Z3Rfc3Bpbl9iYXRjaF9uZXdfZmVuY2UoZ2VtX2ZkLCAwLCAwKTsKPiArCQlzcGluW2ldID0gX19p Z3Rfc3Bpbl9iYXRjaF9uZXcoZ2VtX2ZkLAo+ICsJCQkJCSAgICAgICAuZmxhZ3MgPSBJR1RfU1BJ Tl9GRU5DRV9PVVQpOwo+ICAgCj4gICAJLyogV2FpdCBmb3IgaWRsZSBzdGF0ZS4gKi8KPiAgIAlp ZGxlID0gcG11X3JlYWRfc2luZ2xlKGZkKTsKPiBAQCAtMTU1MCw3ICsxNTU5LDcgQEAgYWNjdXJh Y3koaW50IGdlbV9mZCwgY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplLAo+ ICAgCQlpZ3Rfc3Bpbl90ICpzcGluOwo+ICAgCj4gICAJCS8qIEFsbG9jYXRlIG91ciBzcGluIGJh dGNoIGFuZCBpZGxlIGl0LiAqLwo+IC0JCXNwaW4gPSBpZ3Rfc3Bpbl9iYXRjaF9uZXcoZ2VtX2Zk LCAwLCBlMnJpbmcoZ2VtX2ZkLCBlKSwgMCk7Cj4gKwkJc3BpbiA9IGlndF9zcGluX2JhdGNoX25l dyhnZW1fZmQsIC5lbmdpbmUgPSBlMnJpbmcoZ2VtX2ZkLCBlKSk7Cj4gICAJCWlndF9zcGluX2Jh dGNoX2VuZChzcGluKTsKPiAgIAkJZ2VtX3N5bmMoZ2VtX2ZkLCBzcGluLT5oYW5kbGUpOwo+ICAg Cj4gZGlmZiAtLWdpdCBhL3Rlc3RzL3BtX3Jwcy5jIGIvdGVzdHMvcG1fcnBzLmMKPiBpbmRleCAw MDZkMDg0YjguLjIwMjEzMmIxYyAxMDA2NDQKPiAtLS0gYS90ZXN0cy9wbV9ycHMuYwo+ICsrKyBi L3Rlc3RzL3BtX3Jwcy5jCj4gQEAgLTIzNSw5ICsyMzUsOSBAQCBzdGF0aWMgdm9pZCBsb2FkX2hl bHBlcl9ydW4oZW51bSBsb2FkIGxvYWQpCj4gICAKPiAgIAkJaWd0X2RlYnVnKCJBcHBseWluZyAl cyBsb2FkLi4uXG4iLCBsaC5sb2FkID8gImhpZ2giIDogImxvdyIpOwo+ICAgCj4gLQkJc3Bpblsw XSA9IF9faWd0X3NwaW5fYmF0Y2hfbmV3KGRybV9mZCwgMCwgMCwgMCk7Cj4gKwkJc3BpblswXSA9 IF9faWd0X3NwaW5fYmF0Y2hfbmV3KGRybV9mZCk7Cj4gICAJCWlmIChsaC5sb2FkID09IEhJR0gp Cj4gLQkJCXNwaW5bMV0gPSBfX2lndF9zcGluX2JhdGNoX25ldyhkcm1fZmQsIDAsIDAsIDApOwo+ ICsJCQlzcGluWzFdID0gX19pZ3Rfc3Bpbl9iYXRjaF9uZXcoZHJtX2ZkKTsKPiAgIAkJd2hpbGUg KCFsaC5leGl0KSB7Cj4gICAJCQloYW5kbGUgPSBzcGluWzBdLT5oYW5kbGU7Cj4gICAJCQlpZ3Rf c3Bpbl9iYXRjaF9lbmQoc3BpblswXSk7Cj4gQEAgLTI0OCw4ICsyNDgsNyBAQCBzdGF0aWMgdm9p ZCBsb2FkX2hlbHBlcl9ydW4oZW51bSBsb2FkIGxvYWQpCj4gICAJCQl1c2xlZXAoMTAwKTsKPiAg IAo+ICAgCQkJc3BpblswXSA9IHNwaW5bMV07Cj4gLQkJCXNwaW5bbGgubG9hZCA9PSBISUdIXSA9 Cj4gLQkJCQlfX2lndF9zcGluX2JhdGNoX25ldyhkcm1fZmQsIDAsIDAsIDApOwo+ICsJCQlzcGlu W2xoLmxvYWQgPT0gSElHSF0gPSBfX2lndF9zcGluX2JhdGNoX25ldyhkcm1fZmQpOwo+ICAgCQl9 Cj4gICAKPiAgIAkJaGFuZGxlID0gc3BpblswXS0+aGFuZGxlOwo+IEBAIC01MTAsNyArNTA5LDcg QEAgc3RhdGljIHZvaWQgYm9vc3RfZnJlcShpbnQgZmQsIGludCAqYm9vc3RfZnJlcXMpCj4gICAJ aW50NjRfdCB0aW1lb3V0ID0gMTsKPiAgIAlpZ3Rfc3Bpbl90ICpsb2FkOwo+ICAgCj4gLQlsb2Fk ID0gaWd0X3NwaW5fYmF0Y2hfbmV3KGZkLCAwLCAwLCAwKTsKPiArCWxvYWQgPSBpZ3Rfc3Bpbl9i YXRjaF9uZXcoZmQpOwo+ICAgCXJlc3VibWl0X2JhdGNoKGZkLCBsb2FkLT5oYW5kbGUsIDE2KTsK PiAgIAo+ICAgCS8qIFdhaXRpbmcgd2lsbCBncmFudCB1cyBhIGJvb3N0IHRvIG1heGltdW0gKi8K PiAKCk5lYXQgdHJpY2shIDopCgpDb252ZXJzaW9uIGxvb2tzIGNvcnJlY3QuCgpUd28gbml0cGlj a3MgYXJlOgoKMS4gSXQncyBub3QgcmVhbGx5IGEgZmFjdG9yeSwgYnV0IEkgZ3Vlc3Mgd2UgY2Fu IGdpdmUgaXQgYW4gdW51c3VhbCBuYW1lIAppbiBvdXIgd29ybGQgc28gaXQgc3RpY2tzIG91dCBh cyB1bnVzdWFsLgoKMi4gV2UgY291bGQgc2ltcGxpZnkgYnkgYXZvaWRpbmcgbWFjcm8gdHJpY2tz IGJ5IGp1c3QgcGFzc2luZyBpbiB7IAouZmllbGQgPSB2YWx1ZSB9IGJ5IHZhbHVlLgoKSSBkb24n dCBhY3R1YWxseSBtaW5kIHRoZSB0cmljaywgYnV0IHNpbmNlIGl0IGlzIGEgbm92ZWwgY29uY2Vw dCBpbiBJR1QgCmNvZGViYXNlIChBRkFJUiksIHRoZW4gcGxlYXNlIHJ1biBpdCBwYXN0IFBldHJp IGF0IGxlYXN0LgoKUmV2aWV3ZWQtYnk6IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBp bnRlbC5jb20+CgpSZWdhcmRzLAoKVHZydGtvCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCmlndC1kZXYgbWFpbGluZyBsaXN0CmlndC1kZXZAbGlzdHMuZnJl ZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGlu Zm8vaWd0LWRldgo=