From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: "Ser, Simon" Date: Wed, 17 Jul 2019 13:00:33 +0000 Message-ID: <7ef0c22ee957db425e48aab98cde3a47ae72278e.camel@intel.com> References: <296f249138cb4f55466294b07a7aba25801ff146.1560374714.git.rodrigosiqueiramelo@gmail.com> <7eca4f4def5f732d1f9269e2c75eca8da62a78b2.camel@intel.com> <20190712024435.bed52lodxms6rz7y@smtp.gmail.com> <20190717012105.uuz5erowelakukrr@smtp.gmail.com> In-Reply-To: <20190717012105.uuz5erowelakukrr@smtp.gmail.com> Content-Language: en-US Content-ID: MIME-Version: 1.0 Subject: Re: [igt-dev] [PATCH V6 i-g-t 2/6] kms_writeback: Add initial writeback tests List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: "rodrigosiqueiramelo@gmail.com" Cc: "Latvala, Petri" , "intel-gfx@lists.freedesktop.org" , "Liviu.Dudau@arm.com" , "igt-dev@lists.freedesktop.org" , "daniel@ffwll.ch" , "nd@arm.com" , "Brian.Starkey@arm.com" List-ID: T24gVHVlLCAyMDE5LTA3LTE2IGF0IDIyOjIxIC0wMzAwLCBSb2RyaWdvIFNpcXVlaXJhIHdyb3Rl Og0KPiBPbiAwNy8xMiwgU2VyLCBTaW1vbiB3cm90ZToNCj4gPiBPbiBUaHUsIDIwMTktMDctMTEg YXQgMjM6NDQgLTAzMDAsIFJvZHJpZ28gU2lxdWVpcmEgd3JvdGU6DQo+ID4gPiBPbiAwNy8xMCwg U2VyLCBTaW1vbiB3cm90ZToNCj4gPiA+ID4gSGksDQo+ID4gPiA+IA0KPiA+ID4gPiBUaGFua3Mg Zm9yIHRoZSBwYXRjaCEgSGVyZSBhcmUgYSBmZXcgY29tbWVudHMuDQo+ID4gPiA+IA0KPiA+ID4g PiBGb3IgYm9udXMgcG9pbnRzLCBpdCB3b3VsZCBiZSBuaWNlIHRvIGFkZCBpZ3RfZGVzY3JpYmUg ZGVzY3JpcHRpb25zIG9mDQo+ID4gPiA+IGVhY2ggc3ViLXRlc3QuDQo+ID4gPiANCj4gPiA+IEhp IFNpbW9uLA0KPiA+ID4gDQo+ID4gPiBGaXJzdCBvZiBhbGwsIHRoYW5rcyBmb3IgeW91ciBmZWVk YmFjazsgSSBhbHJlYWR5IGFwcGxpZWQgbW9zdCBvZiB5b3VyDQo+ID4gPiBzdWdnZXN0aW9ucy4g SSBqdXN0IGhhdmUgc29tZSBpbmxpbmUgY29tbWVudHMvcXVlc3Rpb25zLg0KPiA+ID4gIA0KPiA+ ID4gPiBPbiBXZWQsIDIwMTktMDYtMTIgYXQgMjM6MTYgLTAzMDAsIEJyaWFuIFN0YXJrZXkgd3Jv dGU6DQo+ID4gPiA+ID4gQWRkIHRlc3RzIGZvciB0aGUgV1JJVEVCQUNLX1BJWEVMX0ZPUk1BVFMs IFdSSVRFQkFDS19PVVRfRkVOQ0VfUFRSIGFuZA0KPiA+ID4gPiA+IFdSSVRFQkFDS19GQl9JRCBw cm9wZXJ0aWVzIG9uIHdyaXRlYmFjayBjb25uZWN0b3JzLCBlbnN1cmluZyB0aGVpcg0KPiA+ID4g PiA+IGJlaGF2aW91ciBpcyBjb3JyZWN0Lg0KPiA+ID4gPiA+IA0KPiA+ID4gPiA+IFNpZ25lZC1v ZmYtYnk6IEJyaWFuIFN0YXJrZXkgPGJyaWFuLnN0YXJrZXlAYXJtLmNvbT4NCj4gPiA+ID4gPiBb cmViYXNlZCBhbmQgdXBkYXRlZCBkb193cml0ZWJhY2tfdGVzdCgpIGZ1bmN0aW9uIHRvIGFkZHJl c3MgZmVlZGJhY2tdDQo+ID4gPiA+ID4gU2lnbmVkLW9mZi1ieTogTGl2aXUgRHVkYXUgPGxpdml1 LmR1ZGF1QGFybS5jb20+DQo+ID4gPiA+ID4gLS0tDQo+ID4gPiA+ID4gIHRlc3RzL01ha2VmaWxl LnNvdXJjZXMgfCAgIDEgKw0KPiA+ID4gPiA+ICB0ZXN0cy9rbXNfd3JpdGViYWNrLmMgIHwgMzE0 ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQo+ID4gPiA+ID4gIHRl c3RzL21lc29uLmJ1aWxkICAgICAgfCAgIDEgKw0KPiA+ID4gPiA+ICAzIGZpbGVzIGNoYW5nZWQs IDMxNiBpbnNlcnRpb25zKCspDQo+ID4gPiA+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9r bXNfd3JpdGViYWNrLmMNCj4gPiA+ID4gPiANCj4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvdGVzdHMv TWFrZWZpbGUuc291cmNlcyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMNCj4gPiA+ID4gPiBpbmRl eCAwMjdlZDgyZi4uMDNjYzhlZmEgMTAwNjQ0DQo+ID4gPiA+ID4gLS0tIGEvdGVzdHMvTWFrZWZp bGUuc291cmNlcw0KPiA+ID4gPiA+ICsrKyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMNCj4gPiA+ ID4gPiBAQCAtNzcsNiArNzcsNyBAQCBURVNUU19wcm9ncyA9IFwNCj4gPiA+ID4gPiAgCWttc191 bml2ZXJzYWxfcGxhbmUgXA0KPiA+ID4gPiA+ICAJa21zX3ZibGFuayBcDQo+ID4gPiA+ID4gIAlr bXNfdnJyIFwNCj4gPiA+ID4gPiArCWttc193cml0ZWJhY2sgXA0KPiA+ID4gPiA+ICAJbWV0YV90 ZXN0IFwNCj4gPiA+ID4gPiAgCXBlcmYgXA0KPiA+ID4gPiA+ICAJcGVyZl9wbXUgXA0KPiA+ID4g PiA+IGRpZmYgLS1naXQgYS90ZXN0cy9rbXNfd3JpdGViYWNrLmMgYi90ZXN0cy9rbXNfd3JpdGVi YWNrLmMNCj4gPiA+ID4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+ID4gPiA+IGluZGV4IDAw MDAwMDAwLi42NmVmNDhhNg0KPiA+ID4gPiA+IC0tLSAvZGV2L251bGwNCj4gPiA+ID4gPiArKysg Yi90ZXN0cy9rbXNfd3JpdGViYWNrLmMNCj4gPiA+ID4gPiBAQCAtMCwwICsxLDMxNCBAQA0KPiA+ ID4gPiA+ICsvKg0KPiA+ID4gPiA+ICsgKiAoQykgQ09QWVJJR0hUIDIwMTcgQVJNIExpbWl0ZWQu IEFsbCByaWdodHMgcmVzZXJ2ZWQuDQo+ID4gPiA+ID4gKyAqDQo+ID4gPiA+ID4gKyAqIFBlcm1p c3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9i dGFpbmluZyBhDQo+ID4gPiA+ID4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2Np YXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksDQo+ID4gPiA+ID4gKyAq IHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3 aXRob3V0IGxpbWl0YXRpb24NCj4gPiA+ID4gPiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHks IG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsDQo+ID4gPiA+ ID4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQg cGVyc29ucyB0byB3aG9tIHRoZQ0KPiA+ID4gPiA+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQg dG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOg0KPiA+ID4gPiA+ ICsgKg0KPiA+ID4gPiA+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBw ZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0DQo+ID4gPiA+ID4gKyAqIHBhcmFn cmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0 aW9ucyBvZiB0aGUNCj4gPiA+ID4gPiArICogU29mdHdhcmUuDQo+ID4gPiA+ID4gKyAqDQo+ID4g PiA+ID4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJB TlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SDQo+ID4gPiA+ID4gKyAqIElNUExJRUQsIElOQ0xV RElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ LA0KPiA+ID4gPiA+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9O SU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwNCj4gPiA+ID4gPiArICogVEhFIEFVVEhP UlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMg T1IgT1RIRVINCj4gPiA+ID4gPiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBP RiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcNCj4gPiA+ID4gPiArICogRlJP TSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBP UiBPVEhFUiBERUFMSU5HUw0KPiA+ID4gPiA+ICsgKiBJTiBUSEUgU09GVFdBUkUuDQo+ID4gPiA+ ID4gKyAqDQo+ID4gPiA+ID4gKyAqLw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArI2luY2x1ZGUg PGVycm5vLmg+DQo+ID4gPiA+ID4gKyNpbmNsdWRlIDxzdGRib29sLmg+DQo+ID4gPiA+ID4gKyNp bmNsdWRlIDxzdGRpby5oPg0KPiA+ID4gPiA+ICsjaW5jbHVkZSA8c3RyaW5nLmg+DQo+ID4gPiA+ ID4gKw0KPiA+ID4gPiA+ICsjaW5jbHVkZSAiaWd0LmgiDQo+ID4gPiA+ID4gKyNpbmNsdWRlICJp Z3RfY29yZS5oIg0KPiA+ID4gPiA+ICsjaW5jbHVkZSAiaWd0X2ZiLmgiDQo+ID4gPiA+ID4gKw0K PiA+ID4gPiA+ICtzdGF0aWMgZHJtTW9kZVByb3BlcnR5QmxvYlJlcyAqZ2V0X3dyaXRlYmFja19m b3JtYXRzX2Jsb2IoaWd0X291dHB1dF90ICpvdXRwdXQpDQo+ID4gPiA+ID4gK3sNCj4gPiA+ID4g PiArCWRybU1vZGVQcm9wZXJ0eUJsb2JSZXMgKmJsb2IgPSBOVUxMOw0KPiA+ID4gPiA+ICsJdWlu dDY0X3QgYmxvYl9pZDsNCj4gPiA+ID4gPiArCWludCByZXQ7DQo+ID4gPiA+ID4gKw0KPiA+ID4g PiA+ICsJcmV0ID0ga21zdGVzdF9nZXRfcHJvcGVydHkob3V0cHV0LT5kaXNwbGF5LT5kcm1fZmQs DQo+ID4gPiA+ID4gKwkJCQkgICBvdXRwdXQtPmNvbmZpZy5jb25uZWN0b3ItPmNvbm5lY3Rvcl9p ZCwNCj4gPiA+ID4gPiArCQkJCSAgIERSTV9NT0RFX09CSkVDVF9DT05ORUNUT1IsDQo+ID4gPiA+ ID4gKwkJCQkgICBpZ3RfY29ubmVjdG9yX3Byb3BfbmFtZXNbSUdUX0NPTk5FQ1RPUl9XUklURUJB Q0tfUElYRUxfRk9STUFUU10sDQo+ID4gPiA+ID4gKwkJCQkgICBOVUxMLCAmYmxvYl9pZCwgTlVM TCk7DQo+ID4gPiA+ID4gKwlpZiAocmV0KQ0KPiA+ID4gPiA+ICsJCWJsb2IgPSBkcm1Nb2RlR2V0 UHJvcGVydHlCbG9iKG91dHB1dC0+ZGlzcGxheS0+ZHJtX2ZkLCBibG9iX2lkKTsNCj4gPiA+ID4g PiArDQo+ID4gPiA+ID4gKwlpZ3RfYXNzZXJ0KGJsb2IpOw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4g PiArCXJldHVybiBibG9iOw0KPiA+ID4gPiA+ICt9DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICtz dGF0aWMgYm9vbCBjaGVja193cml0ZWJhY2tfY29uZmlnKGlndF9kaXNwbGF5X3QgKmRpc3BsYXks IGlndF9vdXRwdXRfdCAqb3V0cHV0KQ0KPiA+ID4gPiA+ICt7DQo+ID4gPiA+ID4gKwlpZ3RfZmJf dCBpbnB1dF9mYiwgb3V0cHV0X2ZiOw0KPiA+ID4gPiA+ICsJaWd0X3BsYW5lX3QgKnBsYW5lOw0K PiA+ID4gPiA+ICsJdWludDMyX3Qgd3JpdGViYWNrX2Zvcm1hdCA9IERSTV9GT1JNQVRfWFJHQjg4 ODg7DQo+ID4gPiA+ID4gKwl1aW50NjRfdCB0aWxpbmcgPSBpZ3RfZmJfbW9kX3RvX3RpbGluZygw KTsNCj4gPiA+ID4gPiArCWludCB3aWR0aCwgaGVpZ2h0LCByZXQ7DQo+ID4gPiA+ID4gKwlkcm1N b2RlTW9kZUluZm8gb3ZlcnJpZGVfbW9kZSA9IHsNCj4gPiA+ID4gPiArCQkuY2xvY2sgPSAyNTE3 NSwNCj4gPiA+ID4gPiArCQkuaGRpc3BsYXkgPSA2NDAsDQo+ID4gPiA+ID4gKwkJLmhzeW5jX3N0 YXJ0ID0gNjU2LA0KPiA+ID4gPiA+ICsJCS5oc3luY19lbmQgPSA3NTIsDQo+ID4gPiA+ID4gKwkJ Lmh0b3RhbCA9IDgwMCwNCj4gPiA+ID4gPiArCQkuaHNrZXcgPSAwLA0KPiA+ID4gPiA+ICsJCS52 ZGlzcGxheSA9IDQ4MCwNCj4gPiA+ID4gPiArCQkudnN5bmNfc3RhcnQgPSA0OTAsDQo+ID4gPiA+ ID4gKwkJLnZzeW5jX2VuZCA9IDQ5MiwNCj4gPiA+ID4gPiArCQkudnRvdGFsID0gNTI1LA0KPiA+ ID4gPiA+ICsJCS52c2NhbiA9IDAsDQo+ID4gPiA+ID4gKwkJLnZyZWZyZXNoID0gNjAsDQo+ID4g PiA+ID4gKwkJLmZsYWdzID0gRFJNX01PREVfRkxBR19OSFNZTkMgfCBEUk1fTU9ERV9GTEFHX05W U1lOQywNCj4gPiA+ID4gPiArCQkubmFtZSA9IHsiNjQweDQ4MC02MCJ9LA0KPiA+ID4gPiA+ICsJ fTsNCj4gPiA+ID4gPiArCWlndF9vdXRwdXRfb3ZlcnJpZGVfbW9kZShvdXRwdXQsICZvdmVycmlk ZV9tb2RlKTsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKwl3aWR0aCA9IG92ZXJyaWRlX21vZGUu aGRpc3BsYXk7DQo+ID4gPiA+ID4gKwloZWlnaHQgPSBvdmVycmlkZV9tb2RlLnZkaXNwbGF5Ow0K PiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArCXJldCA9IGlndF9jcmVhdGVfZmIoZGlzcGxheS0+ZHJt X2ZkLCB3aWR0aCwgaGVpZ2h0LCBEUk1fRk9STUFUX1hSR0I4ODg4LCB0aWxpbmcsICZpbnB1dF9m Yik7DQo+ID4gPiA+ID4gKwlpZ3RfYXNzZXJ0KHJldCA+PSAwKTsNCj4gPiA+ID4gPiArDQo+ID4g PiA+ID4gKwlyZXQgPSBpZ3RfY3JlYXRlX2ZiKGRpc3BsYXktPmRybV9mZCwgd2lkdGgsIGhlaWdo dCwgd3JpdGViYWNrX2Zvcm1hdCwgdGlsaW5nLCAmb3V0cHV0X2ZiKTsNCj4gPiA+ID4gPiArCWln dF9hc3NlcnQocmV0ID49IDApOw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArCXBsYW5lID0gaWd0 X291dHB1dF9nZXRfcGxhbmVfdHlwZShvdXRwdXQsIERSTV9QTEFORV9UWVBFX1BSSU1BUlkpOw0K PiA+ID4gPiA+ICsJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgJmlucHV0X2ZiKTsNCj4gPiA+ID4g PiArCWlndF9vdXRwdXRfc2V0X3dyaXRlYmFja19mYihvdXRwdXQsICZvdXRwdXRfZmIpOw0KPiA+ ID4gPiA+ICsNCj4gPiA+ID4gPiArCXJldCA9IGlndF9kaXNwbGF5X3RyeV9jb21taXRfYXRvbWlj KGRpc3BsYXksIERSTV9NT0RFX0FUT01JQ19URVNUX09OTFkgfA0KPiA+ID4gPiA+ICsJCQkJCSAg ICBEUk1fTU9ERV9BVE9NSUNfQUxMT1dfTU9ERVNFVCwgTlVMTCk7DQo+ID4gPiA+IA0KPiA+ID4g PiBPa2F5LCB3ZSdyZSB1c2luZyBhdG9taWMgdGVzdC1vbmx5IG1vZGUgdG8ga25vdyBpZiB3ZSBj YW4gcGVyZm9ybSB0ZXN0cw0KPiA+ID4gPiB3aXRoIHRoZSB3cml0ZWJhY2sgb3V0cHV0LiBJdCdz IHByb2JhYmx5IGZpbmUsIGJ1dCB3ZSBkb24ndCB1c2UNCj4gPiA+ID4gV1JJVEVCQUNLX1BJWEVM X0ZPUk1BVFMsIHdoaWNoIG1ha2VzIG1lIGEgbGl0dGxlIGJpdCBzYWQuDQo+ID4gPiANCj4gPiA+ IFNvcnJ5LCBJIGRpZCBub3QgZnVsbHkgdW5kZXJzdGFuZCBwYXJ0LiBEaWQgeW91IGV4cGVjdCB0 byBzZWUgc29tZXRoaW5nDQo+ID4gPiBsaWtlIHRoZSBiZWxvdyBjb2RlIGJlZm9yZSBpZ3RfZGlz cGxheV90cnlfY29tbWl0X2F0b21pYygpPw0KPiA+ID4gDQo+ID4gPiAgaWd0X291dHB1dF9zZXRf cHJvcF92YWx1ZShvdXRwdXQsIFdSSVRFQkFDS19QSVhFTF9GT1JNQVRTLA0KPiA+ID4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgRFJNX0ZPUk1BVF9YUkdCODg4OCk7DQo+ID4gDQo+ID4gSG1t LCBubywgd2UgY2Fubm90IGNoYW5nZSB0aGUgbGlzdCBvZiB3cml0ZWJhY2sgZm9ybWF0cyAoaXQn cw0KPiA+IGltbXV0YWJsZSkuDQo+ID4gDQo+ID4gVGhpcyBjb21tZW50IGRvZXNuJ3QgcmVxdWly ZSBhbnkgYWN0aW9uLCBpdCdzIGp1c3QgbWUgdGhpbmtpbmcgYWxvdWQgOlANCj4gPiANCj4gPiBJ J20ganVzdCB0aGlua2luZyB0aGF0IGl0IHdvdWxkIGJlIG5pY2UgdG8gY2hvb3NlIG91ciBmb3Jt YXQgZGVwZW5kaW5nDQo+ID4gb24gdGhlIFdSSVRFQkFDS19QSVhFTF9GT1JNQVRTIHByb3BlcnR5 LiBBbmQgcHJvYmFibHkgcnVuIHRlc3RzIHdpdGgNCj4gPiBlYWNoIHN1cHBvcnRlZCBmb3JtYXQg KG9yLCBhbHRlcm5hdGl2ZWx5LCBjaG9vc2UgYSByYW5kb20gb25lKS4gVGhhdA0KPiA+IHdheSB3 ZSBjYW4gbWFrZSBzdXJlIFdSSVRFQkFDS19QSVhFTF9GT1JNQVRTIGlzbid0IGJyb2tlbi4NCj4g PiANCj4gPiBIb3dldmVyLCB0aGlzIGNhbiBiZSBsZWZ0IGZvciBhIGxhdGVyIHBhdGNoLg0KPiA+ IA0KPiA+ID4gPiA+ICsJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgTlVMTCk7DQo+ID4gPiA+ID4g KwlpZ3RfcmVtb3ZlX2ZiKGRpc3BsYXktPmRybV9mZCwgJmlucHV0X2ZiKTsNCj4gPiA+ID4gPiAr CWlndF9yZW1vdmVfZmIoZGlzcGxheS0+ZHJtX2ZkLCAmb3V0cHV0X2ZiKTsNCj4gPiA+ID4gPiAr DQo+ID4gPiA+ID4gKwlyZXR1cm4gIXJldDsNCj4gPiA+ID4gPiArfQ0KPiA+ID4gPiA+ICsNCj4g PiA+ID4gPiArc3RhdGljIGlndF9vdXRwdXRfdCAqa21zX3dyaXRlYmFja19nZXRfb3V0cHV0KGln dF9kaXNwbGF5X3QgKmRpc3BsYXkpDQo+ID4gPiA+ID4gK3sNCj4gPiA+ID4gPiArCWludCBpOw0K PiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArCWZvciAoaSA9IDA7IGkgPCBkaXNwbGF5LT5uX291dHB1 dHM7IGkrKykgew0KPiA+ID4gPiA+ICsJCWlndF9vdXRwdXRfdCAqb3V0cHV0ID0gJmRpc3BsYXkt Pm91dHB1dHNbaV07DQo+ID4gPiA+ID4gKwkJaW50IGo7DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ ICsJCWlmIChvdXRwdXQtPmNvbmZpZy5jb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlICE9IERSTV9N T0RFX0NPTk5FQ1RPUl9XUklURUJBQ0spDQo+ID4gPiA+ID4gKwkJCWNvbnRpbnVlOw0KPiA+ID4g PiA+ICsNCj4gPiA+ID4gPiArCQlrbXN0ZXN0X2ZvcmNlX2Nvbm5lY3RvcihkaXNwbGF5LT5kcm1f ZmQsIG91dHB1dC0+Y29uZmlnLmNvbm5lY3RvciwgRk9SQ0VfQ09OTkVDVE9SX09OKTsNCj4gPiA+ ID4gDQo+ID4gPiA+IEhtbS4gSXMgdGhpcyByZWFsbHkgbmVjZXNzYXJ5PyAiUmVhbCIgdXNlcnNw YWNlIHdvbid0IGRvIHRoaXMsIHNvIEkNCj4gPiA+ID4gZG9uJ3QgdGhpbmsgd2UgbmVlZCB0byBl aXRoZXIuDQo+ID4gPiANCj4gPiA+IEhtbW0sIEkgaGF2ZSBhIGxpdHRsZSBleHBlcmllbmNlIHdp dGggdXNlcnNwYWNlOyBob3dldmVyLCBJIHRlc3RlZA0KPiA+ID4ga21zX3dyaXRlYmFjayBvbiB0 b3Agb2YgdmttcyB3aXRob3V0IHRoaXMgbGluZSwgYW5kIGV2ZXJ5dGhpbmcgd29ya2VkDQo+ID4g PiB3ZWxsLiBJZiBJIHJlbW92ZSB0aGlzIGxpbmUsIHNob3VsZCBJIGFsc28gZHJvcCB0aGUgbGlu ZSB0aGF0IGZvcmNlDQo+ID4gPiBjb25uZWN0b3IgdG8gRk9SQ0VfQ09OTkVDVE9SX1VOU1BFQ0lG SUVEPw0KPiA+IA0KPiA+IEkgYmVsaWV2ZSBzby4NCj4gPiANCj4gPiA+IEFub3RoZXIgcXVlc3Rp b24sIGlmIEZPUkNFX0NPTk5FQ1RPUl9PTiBpcyBzb21ldGhpbmcgdGhhdCB1c2Vyc3BhY2UNCj4g PiA+IHdvbid0IHdhbnQgdG8gZG8sIHdoeSBkbyB3ZSBoYXZlIGl0Pw0KPiA+IA0KPiA+IFdlIHVz ZSBrbXN0ZXN0X2ZvcmNlX2Nvbm5lY3RvciBpbiBpbmplY3Rpb24gdGVzdHM6IHRob3NlIHBpY2sg YQ0KPiA+IGRpc2Nvbm5lY3RlZCBIRE1JIGNvbm5lY3RvciBhbmQgdHJpY2sgdGhlIGtlcm5lbCBp bnRvIHRoaW5raW5nIGl0J3MNCj4gPiBjb25uZWN0ZWQuIFdlIGdlbmVyYWxseSBhbHNvIGZvcmNl IGFuIEVESUQgYW5kIHRoaXMgaXMgdXNlZCB0byBlbXVsYXRlDQo+ID4gYSBzY3JlZW4gKGUuZy4g YSBzY3JlZW4gdGhhdCBzdXBwb3J0cyBhdWRpbywgNEsgb3IgM0QpLg0KPiA+IA0KPiA+IFRoaXMg aXMgb25seSBtZWFudCB0byBiZSB1c2VkIGZvciB0ZXN0aW5nIHRob3VnaCwgaGVuY2UgInJlYWwg dXNlcnNwYWNlDQo+ID4gc2hvdWxkbid0IHVzZSBpdCIuDQo+ID4gDQo+IA0KPiBBaGhoLCBJIHNl ZS4gVGhhbmtzIGZvciB0aGUgZXhwbGFuYXRpb24NCj4gIA0KPiA+ID4gPiA+ICsJCWZvciAoaiA9 IDA7IGogPCBpZ3RfZGlzcGxheV9nZXRfbl9waXBlcyhkaXNwbGF5KTsgaisrKSB7DQo+ID4gPiA+ ID4gKwkJCWlndF9vdXRwdXRfc2V0X3BpcGUob3V0cHV0LCBqKTsNCj4gPiA+ID4gPiArDQo+ID4g PiA+ID4gKwkJCWlmIChjaGVja193cml0ZWJhY2tfY29uZmlnKGRpc3BsYXksIG91dHB1dCkpIHsN Cj4gPiA+ID4gPiArCQkJCWlndF9kZWJ1ZygiVXNpbmcgY29ubmVjdG9yICV1OiVzIG9uIHBpcGUg JWRcbiIsDQo+ID4gPiA+ID4gKwkJCQkJICBvdXRwdXQtPmNvbmZpZy5jb25uZWN0b3ItPmNvbm5l Y3Rvcl9pZCwNCj4gPiA+ID4gPiArCQkJCQkgIG91dHB1dC0+bmFtZSwgaik7DQo+ID4gPiA+ID4g KwkJCQlyZXR1cm4gb3V0cHV0Ow0KPiA+ID4gPiA+ICsJCQl9DQo+ID4gPiA+IA0KPiA+ID4gPiBX ZSBjb3VsZCBwcm9iYWJseSBhZGQgYW4gaWd0X2RlYnVnIHN0YXRlbWVudCBpbiBjYXNlIHdlIGRv bid0IHVzZSB0aGlzDQo+ID4gPiA+IHdyaXRlYmFjayBvdXRwdXQuDQo+ID4gPiA+IA0KPiA+ID4g PiA+ICsJCX0NCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKwkJLyogUmVzdG9yZSBhbnkgY29ubmVj dG9ycyB3ZSBkb24ndCB1c2UsIHNvIHdlIGRvbid0IHRyaXAgb24gdGhlbSBsYXRlciAqLw0KPiA+ ID4gPiA+ICsJCWttc3Rlc3RfZm9yY2VfY29ubmVjdG9yKGRpc3BsYXktPmRybV9mZCwgb3V0cHV0 LT5jb25maWcuY29ubmVjdG9yLCBGT1JDRV9DT05ORUNUT1JfVU5TUEVDSUZJRUQpOw0KPiA+ID4g PiA+ICsJfQ0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArCXJldHVybiBOVUxMOw0KPiA+ID4gPiA+ ICt9DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICtzdGF0aWMgdm9pZCBjaGVja193cml0ZWJhY2tf ZmJfaWQoaWd0X291dHB1dF90ICpvdXRwdXQpDQo+ID4gPiA+ID4gK3sNCj4gPiA+ID4gPiArCXVp bnQ2NF90IGNoZWNrX2ZiX2lkOw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArCWNoZWNrX2ZiX2lk ID0gaWd0X291dHB1dF9nZXRfcHJvcChvdXRwdXQsIElHVF9DT05ORUNUT1JfV1JJVEVCQUNLX0ZC X0lEKTsNCj4gPiA+ID4gPiArCWlndF9hc3NlcnQoY2hlY2tfZmJfaWQgPT0gMCk7DQo+ID4gPiA+ ID4gK30NCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gK3N0YXRpYyBpbnQgZG9fd3JpdGViYWNrX3Rl c3QoaWd0X291dHB1dF90ICpvdXRwdXQsIHVpbnQzMl90IGZsYWdzLA0KPiA+ID4gPiA+ICsJCQkg ICAgICB1aW50MzJfdCBmYl9pZCwgaW50MzJfdCAqb3V0X2ZlbmNlX3B0ciwNCj4gPiA+ID4gPiAr CQkJICAgICAgYm9vbCBwdHJfdmFsaWQpDQo+ID4gPiA+IA0KPiA+ID4gPiBmbGFncyBzZWVtcyB0 byBhbHdheXMgYmUgc2V0IHRvIERSTV9NT0RFX0FUT01JQ19BTExPV19NT0RFU0VULiBXZSBjYW4N Cj4gPiA+ID4gcHJvYmFibHkgcmVtb3ZlIHRoZSBwYXJhbWV0ZXIgZnJvbSB0aGlzIGZ1bmN0aW9u Lg0KPiA+ID4gPiANCj4gPiA+ID4gPiArew0KPiA+ID4gPiA+ICsJaW50IHJldDsNCj4gPiA+ID4g PiArCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSBvdXRwdXQtPmRpc3BsYXk7DQo+ID4gPiA+ID4g KwlzdHJ1Y3Qga21zdGVzdF9jb25uZWN0b3JfY29uZmlnICpjb25maWcgPSAmb3V0cHV0LT5jb25m aWc7DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsJaWd0X291dHB1dF9zZXRfcHJvcF92YWx1ZShv dXRwdXQsIElHVF9DT05ORUNUT1JfQ1JUQ19JRCwgY29uZmlnLT5jcnRjLT5jcnRjX2lkKTsNCj4g PiA+ID4gPiArCWlndF9vdXRwdXRfc2V0X3Byb3BfdmFsdWUob3V0cHV0LCBJR1RfQ09OTkVDVE9S X1dSSVRFQkFDS19GQl9JRCwgZmJfaWQpOw0KPiA+ID4gPiA+ICsJaWd0X291dHB1dF9zZXRfcHJv cF92YWx1ZShvdXRwdXQsIElHVF9DT05ORUNUT1JfV1JJVEVCQUNLX09VVF9GRU5DRV9QVFIsICh1 aW50NjRfdClvdXRfZmVuY2VfcHRyKTsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKwlpZiAocHRy X3ZhbGlkKQ0KPiA+ID4gPiA+ICsJCSpvdXRfZmVuY2VfcHRyID0gMDsNCj4gPiA+ID4gPiArDQo+ ID4gPiA+ID4gKwlyZXQgPSBpZ3RfZGlzcGxheV90cnlfY29tbWl0X2F0b21pYyhkaXNwbGF5LCBm bGFncywgTlVMTCk7DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsJaWYgKHB0cl92YWxpZCkNCj4g PiA+ID4gPiArCQlpZ3RfYXNzZXJ0KCpvdXRfZmVuY2VfcHRyID09IC0xKTsNCj4gPiA+ID4gDQo+ ID4gPiA+IEknbSBjb25mdXNlZC4gV2h5IHNob3VsZCB0aGlzIGJlIC0xIGV2ZW4gaWYgd2UNCj4g PiA+ID4gaWd0X2Rpc3BsYXlfdHJ5X2NvbW1pdF9hdG9taWMgc3VjY2VlZHM/DQo+ID4gPiANCj4g PiA+IEkgaW5zcGVjdGVkIHRoZSBkcm1fbW9kZV9hdG9taWNfaW9jdGwoKSBmdW5jdGlvbiBhbmQg SSBub3RpY2VkIHRoYXQgSXQNCj4gPiA+IGNhbGxzIGNvbXBsZXRlX3NpZ25hbGluZygpIGluIGl0 cyB0dXJuIHRoaXMgZnVuY3Rpb24gYXNzaWduIC0xIHRvDQo+ID4gPiBvdXRfZmVuY2VfcHRyLiBT aW5jZSBhbGwgb2YgdGhpcyBoYXBwZW5zIGF0IHRoZSBlbmQgb2YgYXRvbWljX2NvbW1pdCwgSQ0K PiA+ID4gYmVsaWV2ZSB0aGF0IHdlIGRvbuKAmXQgbmVlZCBpdC4gSSBhbHJlYWR5IHJlbW92ZWQg aXQuDQo+ID4gDQo+ID4gSSB0aGluayBJJ20gc3RpbGwgY29uZnVzZWQgOikNCj4gPiANCj4gPiBJ J20gcHJvYmFibHkgbWlzc2luZyBzb21ldGhpbmcuIEFzIGZhciBhcyBJIHVuZGVyc3RhbmQsIHdl IGFyZSBkb2luZyBhbg0KPiA+IGF0b21pYyBjb21taXQsIHNvbWV0aW1lcyB3aXRoIGEgdmFsaWQg V1JJVEVCQUNLX0ZCX0lEIGFuZA0KPiA+IFdSSVRFQkFDS19PVVRfRkVOQ0VfUFRSLiBJbiB0aGlz IGNhc2UgaXQgc2hvdWxkIHN0YXJ0IHRoZSB3cml0ZWJhY2sNCj4gPiBwcm9jZXNzIGluIHRoZSBr ZXJuZWwgYW5kIHdlIHNob3VsZCBnZXQgYSB2YWxpZCBvdXRfZmVuY2VfcHRyPw0KPiA+IA0KPiA+ IFdoeSBkbyB3ZSBhbHdheXMgZ2V0IC0xPw0KPiANCj4gRldJVSB1c2Vyc3BhY2UgdXNlcyB0aGUg V1JJVEVCQUNLX09VVF9GRU5DRV9QVFIgdG8gcHJvdmlkZSBhIHBvaW50ZXIgZm9yDQo+IHRoZSBr ZXJuZWwgdG8gZmlsbCB3aXRoIGEgc3luY19maWxlIGZpbGUgZGVzY3JpcHRvciwgd2hpY2ggd2ls bCBzaWduYWwNCj4gb25jZSB0aGUgd3JpdGViYWNrIGlzIGZpbmlzaGVkLiBJZiB0aGUgc2lnbmFs IHdhcyBjb3JyZWN0bHkgaGFuZGxlZCwgdGhlDQo+IG91dF9mZW5jZV9wdHIgd291bGQgYmUgc2V0 IHRvIC0xLCBiZWNhdXNlIG9mIHRoaXMgd2UgYWx3YXlzIGdldCAtMS4NCg0KQnV0IGluIGNhc2Ug YSB3cml0ZWJhY2sgb3BlcmF0aW9uIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBzdGFydGVkLCBpdA0K d29uJ3QgYmUgLTEgKHNpbmNlIGl0IHdpbGwgYmUgYSB2YWxpZCBGRCkuIEFzIEkndmUgdW5kZXJz dG9vZCBpdCwgdGhpcw0KZnVuY3Rpb24gd2lsbCBhbHdheXMgYmUgY2FsbGVkIHdpdGhvdXQgdHJp Z2dlcmluZyBhIHdyaXRlYmFjaw0Kb3BlcmF0aW9uLg0KDQpNYXliZSB3ZSBzaG91bGQgcmVuYW1l IGRvX3dyaXRlYmFja190ZXN0IHRvIGRvX25vb3Bfd3JpdGViYWNrIChvciBhDQpiZXR0ZXIgbmFt ZSkgYW5kIGFkZCBhIGNvbW1lbnQgZXhwbGFpbmluZyB0aGF0ICpvdXRfZmVuY2VfcHRyIHdpbGwg YmUNCi0xIGJlY2F1c2U6DQoNCi0gRWl0aGVyIHJldCAhPSAwIGFuZCB3ZSBzdWJtaXR0ZWQgYSBi YWQgY29tbWl0DQotIEVpdGhlciByZXQgPT0gMCAodmFsaWQgY29tbWl0KSBidXQgb3V0X2ZlbmNl X3B0ciA9PSBOVUxMIChzbyBubw0KICB3cml0ZWJhY2sgb3BlcmF0aW9uIHN0YXJ0ZWQpDQoNCk1h eWJlIHdlIGNvdWxkIGlndF9hc3NlcnQocmV0ICE9IDAgfHwgb3V0X2ZlbmNlX3B0ciA9PSBOVUxM KSB0byBtYWtlDQpzdXJlIHdlIGRvbid0IGNhbGwgdGhpcyBmdW5jdGlvbiBhbmQgc3VjY2Vzc2Z1 bGx5IHRyaWdnZXIgYSB3cml0ZWJhY2sNCm9wZXJhdGlvbi4NCg0KV2hhdCBkbyB5b3UgdGhpbms/ DQoNCj4gVGhhbmtzIGZvciB5b3VyIGZlZWRiYWNrLCBJJ2xsIHByZXBhcmUgYSBuZXcgdmVyc2lv biBzb29uLg0KPiAgDQo+ID4gPiA+ID4gKwkvKiBXUklURUJBQ0tfRkJfSUQgbXVzdCBhbHdheXMg cmVhZCBhcyB6ZXJvICovDQo+ID4gPiA+ID4gKwljaGVja193cml0ZWJhY2tfZmJfaWQob3V0cHV0 KTsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKwlyZXR1cm4gcmV0Ow0KPiA+ID4gPiA+ICt9DQo+ ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICtzdGF0aWMgdm9pZCBpbnZhbGlkX291dF9mZW5jZShpZ3Rf b3V0cHV0X3QgKm91dHB1dCwgaWd0X2ZiX3QgKnZhbGlkX2ZiLCBpZ3RfZmJfdCAqaW52YWxpZF9m YikNCj4gPiA+ID4gPiArew0KPiA+ID4gPiA+ICsJaW50IGksIHJldDsNCj4gPiA+ID4gPiArCWlu dDMyX3Qgb3V0X2ZlbmNlOw0KPiA+ID4gPiA+ICsJc3RydWN0IHsNCj4gPiA+ID4gPiArCQl1aW50 MzJfdCBmYl9pZDsNCj4gPiA+ID4gPiArCQlib29sIHB0cl92YWxpZDsNCj4gPiA+ID4gPiArCQlp bnQzMl90ICpvdXRfZmVuY2VfcHRyOw0KPiA+ID4gPiA+ICsJfSBpbnZhbGlkX3Rlc3RzW10gPSB7 DQo+ID4gPiA+ID4gKwkJew0KPiA+ID4gPiA+ICsJCQkvKiBObyBvdXRwdXQgYnVmZmVyLCBidXQg dGhlIFdSSVRFQkFDS19PVVRfRkVOQ0VfUFRSIHNldC4gKi8NCj4gPiA+ID4gPiArCQkJLmZiX2lk ID0gMCwNCj4gPiA+ID4gPiArCQkJLnB0cl92YWxpZCA9IHRydWUsDQo+ID4gPiA+ID4gKwkJCS5v dXRfZmVuY2VfcHRyID0gJm91dF9mZW5jZSwNCj4gPiA+ID4gPiArCQl9LA0KPiA+ID4gPiA+ICsJ CXsNCj4gPiA+ID4gPiArCQkJLyogSW52YWxpZCBvdXRwdXQgYnVmZmVyLiAqLw0KPiA+ID4gPiA+ ICsJCQkuZmJfaWQgPSBpbnZhbGlkX2ZiLT5mYl9pZCwNCj4gPiA+ID4gPiArCQkJLnB0cl92YWxp ZCA9IHRydWUsDQo+ID4gPiA+ID4gKwkJCS5vdXRfZmVuY2VfcHRyID0gJm91dF9mZW5jZSwNCj4g PiA+ID4gPiArCQl9LA0KPiA+ID4gPiANCj4gPiA+ID4gVGhpcyBkb2Vzbid0IGJlbG9uZyBpbiB0 aGlzIGZ1bmN0aW9uIChpbnZhbGlkX291dF9mZW5jZSksIHNpbmNlIHRoaXMNCj4gPiA+ID4gY2hl Y2tzIGFuIGludmFsaWQgZnJhbWVidWZmZXIsIG5vdCBhbiBpbnZhbGlkIGZlbmNlLiBXZSBzaG91 bGQgcHJvYmFibHkNCj4gPiA+ID4gbW92ZSBpdCB0byB3cml0ZWJhY2tfZmJfaWQgKGFuZCByZW5h bWUgdGhhdCBmdW5jdGlvbiB0byB0ZXN0X2ZiPykuDQo+ID4gPiA+IA0KPiA+ID4gPiA+ICsJCXsN Cj4gPiA+ID4gPiArCQkJLyogSW52YWxpZCBXUklURUJBQ0tfT1VUX0ZFTkNFX1BUUi4gKi8NCj4g PiA+ID4gPiArCQkJLmZiX2lkID0gdmFsaWRfZmItPmZiX2lkLA0KPiA+ID4gPiA+ICsJCQkucHRy X3ZhbGlkID0gZmFsc2UsDQo+ID4gPiA+ID4gKwkJCS5vdXRfZmVuY2VfcHRyID0gKGludDMyX3Qg KikweDgsDQo+ID4gPiA+ID4gKwkJfSwNCj4gPiA+ID4gPiArCX07DQo+ID4gPiA+ID4gKw0KPiA+ ID4gPiA+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaW52YWxpZF90ZXN0cyk7IGkrKykg ew0KPiA+ID4gPiA+ICsJCXJldCA9IGRvX3dyaXRlYmFja190ZXN0KG91dHB1dCwgRFJNX01PREVf QVRPTUlDX0FMTE9XX01PREVTRVQsDQo+ID4gPiA+ID4gKwkJCQkJaW52YWxpZF90ZXN0c1tpXS5m Yl9pZCwNCj4gPiA+ID4gPiArCQkJCQlpbnZhbGlkX3Rlc3RzW2ldLm91dF9mZW5jZV9wdHIsDQo+ ID4gPiA+ID4gKwkJCQkJaW52YWxpZF90ZXN0c1tpXS5wdHJfdmFsaWQpOw0KPiA+ID4gPiA+ICsJ CWlndF9hc3NlcnQocmV0ICE9IDApOw0KPiA+ID4gPiANCj4gPiA+ID4gTWF5YmUgd2UgY2FuIGNo ZWNrIGZvciAtcmV0ID09IEVJTlZBTD8NCj4gPiA+ID4gDQo+ID4gPiA+ID4gKwl9DQo+ID4gPiA+ ID4gK30NCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gK3N0YXRpYyB2b2lkIHdyaXRlYmFja19mYl9p ZChpZ3Rfb3V0cHV0X3QgKm91dHB1dCwgaWd0X2ZiX3QgKnZhbGlkX2ZiLCBpZ3RfZmJfdCAqaW52 YWxpZF9mYikNCj4gPiA+ID4gDQo+ID4gPiA+IGludmFsaWRfZmIgZG9lc24ndCBzZWVtIHRvIGJl IHVzZWQgaGVyZS4gdmFsaWRfZmIgc2VlbXMgdG8gYmUgc2V0IHRvDQo+ID4gPiA+IHRoZSBpbnB1 dCBmcmFtZWJ1ZmZlci4gSXQncyBwcm9iYWJseSBub3QgYSBnb29kIGlkZWEgdG8gdXNlIHRoZSBz YW1lIEZCDQo+ID4gPiA+IGZvciBpbnB1dCBhbmQgd3JpdGViYWNrIG91dHB1dC4NCj4gPiA+ID4g DQo+ID4gPiA+ID4gK3sNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKwlpbnQgcmV0Ow0KPiA+ID4g PiA+ICsNCj4gPiA+ID4gPiArCS8qIFZhbGlkIG91dHB1dCBidWZmZXIgKi8NCj4gPiA+ID4gPiAr CXJldCA9IGRvX3dyaXRlYmFja190ZXN0KG91dHB1dCwgRFJNX01PREVfQVRPTUlDX0FMTE9XX01P REVTRVQsDQo+ID4gPiA+ID4gKwkJCQl2YWxpZF9mYi0+ZmJfaWQsIE5VTEwsIGZhbHNlKTsNCj4g PiA+ID4gPiArCWlndF9hc3NlcnQocmV0ID09IDApOw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiAr CS8qIEludmFsaWQgb2JqZWN0IGZvciBXUklURUJBQ0tfRkJfSUQgKi8NCj4gPiA+ID4gPiArCXJl dCA9IGRvX3dyaXRlYmFja190ZXN0KG91dHB1dCwgRFJNX01PREVfQVRPTUlDX0FMTE9XX01PREVT RVQsDQo+ID4gPiA+ID4gKwkJCQlvdXRwdXQtPmlkLCBOVUxMLCBmYWxzZSk7DQo+ID4gPiA+ID4g KwlpZ3RfYXNzZXJ0KHJldCA9PSAtRUlOVkFMKTsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKwkv KiBaZXJvIFdSSVRFQkFDS19GQl9JRCAqLw0KPiA+ID4gPiA+ICsJcmV0ID0gZG9fd3JpdGViYWNr X3Rlc3Qob3V0cHV0LCBEUk1fTU9ERV9BVE9NSUNfQUxMT1dfTU9ERVNFVCwNCj4gPiA+ID4gPiAr CQkJCTAsIE5VTEwsIGZhbHNlKTsNCj4gPiA+ID4gPiArCWlndF9hc3NlcnQocmV0ID09IDApOw0K PiA+ID4gPiA+ICt9DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICtpZ3RfbWFpbg0KPiA+ID4gPiA+ ICt7DQo+ID4gPiA+ID4gKwlpZ3RfZGlzcGxheV90IGRpc3BsYXk7DQo+ID4gPiA+ID4gKwlpZ3Rf b3V0cHV0X3QgKm91dHB1dDsNCj4gPiA+ID4gPiArCWlndF9wbGFuZV90ICpwbGFuZTsNCj4gPiA+ ID4gPiArCWlndF9mYl90IGlucHV0X2ZiOw0KPiA+ID4gPiA+ICsJZHJtTW9kZU1vZGVJbmZvIG1v ZGU7DQo+ID4gPiA+ID4gKwlpbnQgcmV0Ow0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArCW1lbXNl dCgmZGlzcGxheSwgMCwgc2l6ZW9mKGRpc3BsYXkpKTsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4g KwlpZ3RfZml4dHVyZSB7DQo+ID4gPiA+ID4gKwkJZGlzcGxheS5kcm1fZmQgPSBkcm1fb3Blbl9k cml2ZXJfbWFzdGVyKERSSVZFUl9BTlkpOw0KPiA+ID4gPiA+ICsJCWlndF9kaXNwbGF5X3JlcXVp cmUoJmRpc3BsYXksIGRpc3BsYXkuZHJtX2ZkKTsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKwkJ a21zdGVzdF9zZXRfdnRfZ3JhcGhpY3NfbW9kZSgpOw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiAr CQlpZ3RfZGlzcGxheV9yZXF1aXJlKCZkaXNwbGF5LCBkaXNwbGF5LmRybV9mZCk7DQo+ID4gPiA+ ID4gKw0KPiA+ID4gPiA+ICsJCWlndF9yZXF1aXJlKGRpc3BsYXkuaXNfYXRvbWljKTsNCj4gPiA+ ID4gPiArDQo+ID4gPiA+ID4gKwkJb3V0cHV0ID0ga21zX3dyaXRlYmFja19nZXRfb3V0cHV0KCZk aXNwbGF5KTsNCj4gPiA+ID4gPiArCQlpZ3RfcmVxdWlyZShvdXRwdXQpOw0KPiA+ID4gPiA+ICsN Cj4gPiA+ID4gPiArCQlpZiAob3V0cHV0LT51c2Vfb3ZlcnJpZGVfbW9kZSkNCj4gPiA+ID4gPiAr CQkJbWVtY3B5KCZtb2RlLCAmb3V0cHV0LT5vdmVycmlkZV9tb2RlLCBzaXplb2YobW9kZSkpOw0K PiA+ID4gPiA+ICsJCWVsc2UNCj4gPiA+ID4gPiArCQkJbWVtY3B5KCZtb2RlLCAmb3V0cHV0LT5j b25maWcuZGVmYXVsdF9tb2RlLCBzaXplb2YobW9kZSkpOw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4g PiArCQlwbGFuZSA9IGlndF9vdXRwdXRfZ2V0X3BsYW5lX3R5cGUob3V0cHV0LCBEUk1fUExBTkVf VFlQRV9QUklNQVJZKTsNCj4gPiA+ID4gPiArCQlpZ3RfcmVxdWlyZShwbGFuZSk7DQo+ID4gPiA+ IA0KPiA+ID4gPiBNYXliZSB3ZSBjYW4gYXNzZXJ0IG9uIHRoaXM/DQo+ID4gPiA+IA0KPiA+ID4g PiA+ICsJCXJldCA9IGlndF9jcmVhdGVfZmIoZGlzcGxheS5kcm1fZmQsIG1vZGUuaGRpc3BsYXks DQo+ID4gPiA+ID4gKwkJCQkgICAgbW9kZS52ZGlzcGxheSwNCj4gPiA+ID4gPiArCQkJCSAgICBE Uk1fRk9STUFUX1hSR0I4ODg4LA0KPiA+ID4gPiA+ICsJCQkJICAgIGlndF9mYl9tb2RfdG9fdGls aW5nKDApLA0KPiA+ID4gPiANCj4gPiA+ID4gVGhpcyBpcyBzdXBwb3NlZCB0byB0YWtlIGEgbW9k aWZpZXIuIERSTV9GT1JNQVRfTU9EX0xJTkVBUiB3b3VsZCBiZQ0KPiA+ID4gPiBiZXR0ZXIgdG8g bWFrZSB0aGlzIGNsZWFyLg0KPiA+ID4gPiANCj4gPiA+ID4gKEFwcGxpZXMgdG8gb3RoZXIgbGlu ZXMgb2YgdGhpcyBwYXRjaCkNCj4gPiA+ID4gDQo+ID4gPiA+ID4gKwkJCQkgICAgJmlucHV0X2Zi KTsNCj4gPiA+ID4gPiArCQlpZ3RfYXNzZXJ0KHJldCA+PSAwKTsNCj4gPiA+ID4gPiArCQlpZ3Rf cGxhbmVfc2V0X2ZiKHBsYW5lLCAmaW5wdXRfZmIpOw0KPiA+ID4gPiA+ICsJfQ0KPiA+ID4gPiA+ ICsNCj4gPiA+ID4gPiArCWlndF9zdWJ0ZXN0KCJ3cml0ZWJhY2stcGl4ZWwtZm9ybWF0cyIpIHsN Cj4gPiA+ID4gPiArCQlkcm1Nb2RlUHJvcGVydHlCbG9iUmVzICpmb3JtYXRzX2Jsb2IgPSBnZXRf d3JpdGViYWNrX2Zvcm1hdHNfYmxvYihvdXRwdXQpOw0KPiA+ID4gPiANCj4gPiA+ID4gTmVlZCB0 byBkcm1Nb2RlRnJlZVByb3BlcnR5QmxvYiB0aGlzLg0KPiA+ID4gPiANCj4gPiA+ID4gPiArCQlj b25zdCBjaGFyICp2YWxpZF9jaGFycyA9ICIwMTIzNDU2IEFCQ0dOUlVWWFkiOw0KPiA+ID4gPiA+ ICsJCXVuc2lnbmVkIGludCBpOw0KPiA+ID4gPiA+ICsJCWNoYXIgKmM7DQo+ID4gPiA+ID4gKw0K PiA+ID4gPiA+ICsJCS8qDQo+ID4gPiA+ID4gKwkJICogV2UgZG9uJ3QgaGF2ZSBhIGNvbXByZWhl bnNpdmUgbGlzdCBvZiBmb3JtYXRzLCBzbyBqdXN0IGNoZWNrDQo+ID4gPiA+ID4gKwkJICogdGhh dCB0aGUgYmxvYiBsZW5ndGggaXMgc2Vuc2libGUgYW5kIHRoYXQgaXQgZG9lc24ndCBjb250YWlu DQo+ID4gPiA+ID4gKwkJICogYW55IG91dGxhbmRpc2ggY2hhcmFjdGVycw0KPiA+ID4gPiA+ICsJ CSAqLw0KPiA+ID4gPiA+ICsJCWlndF9hc3NlcnQoIShmb3JtYXRzX2Jsb2ItPmxlbmd0aCAlIDQp KTsNCj4gPiA+ID4gPiArCQljID0gZm9ybWF0c19ibG9iLT5kYXRhOw0KPiA+ID4gPiA+ICsJCWZv ciAoaSA9IDA7IGkgPCBmb3JtYXRzX2Jsb2ItPmxlbmd0aDsgaSsrKQ0KPiA+ID4gPiA+ICsJCQlp Z3RfYXNzZXJ0X2Yoc3RyY2hyKHZhbGlkX2NoYXJzLCBjW2ldKSwNCj4gPiA+ID4gPiArCQkJCSAg ICAgIlVuZXhwZWN0ZWQgY2hhcmFjdGVyICVjXG4iLCBjW2ldKTsNCj4gPiA+ID4gDQo+ID4gPiA+ IEhvbmVzdGx5LCBJJ20gbm90IGEgZmFuIG9mIHRoaXMgY2hlY2suIFRoZXJlJ3Mgbm8gZ3VhcmFu dGVlIHRoYXQgZm91cmNjDQo+ID4gPiA+IGNvZGVzIHdpbGwgYmUgbWFkZSBmcm9tIEFTQ0lJIGNo YXJhY3RlcnMsIGluIGZhY3Qgc29tZSBmb3JtYXRzIGFscmVhZHkNCj4gPiA+ID4gaGF2ZSBub24t cHJpbnRhYmxlIGNoYXJzIGluIHRoZW0uIEkgZG9uJ3Qgd2FudCB0byBoYXZlIHRvIHVwZGF0ZSB0 aGlzDQo+ID4gPiA+IHRlc3Qgd2hlbiBhIG5ldyBmb3VyY2MgZm9ybWF0IGlzIGFkZGVkLg0KPiA+ ID4gPiANCj4gPiA+ID4gV2UgY3VycmVudGx5IGRvbid0IGhhdmUgYSB0ZXN0IGZvciBJTl9GT1JN QVRTLiBJZiB3ZSByZWFsbHkgd2FudCB0bw0KPiA+ID4gPiBjaGVjayBmb3JtYXRzLCB3ZSBjb3Vs ZCBoYXZlIGEgYmlnIGFycmF5IG9mIGtub3duIGZvcm1hdHMgYW5kIGFkZCBhDQo+ID4gPiA+IGJv b2wgaXNfdmFsaWRfZm9ybWF0KHVpbnQzMl90IGZtdCkgZnVuY3Rpb24uDQo+ID4gPiANCj4gPiA+ IEFncmVlIHdpdGggeW91LiBIb3cgYWJvdXQgcmVtb3ZlIHRoaXMgdGVzdD8NCj4gPiANCj4gPiBJ IGd1ZXNzIHdlIGNvdWxkIGFsd2F5cyBrZWVwIHRoZSBsZW5ndGggJSA0IHRlc3QsIGV2ZW4gaWYg aXQncyBqdXN0IGENCj4gPiBzYW5pdHkgdGVzdC4gQXQgbGVhc3QgdGhpcyBvbmUgd29uJ3QgZXZl ciBuZWVkIHRvIGJlIGNoYW5nZWQuDQo+ID4gDQo+ID4gSSBkb24ndCBmZWVsIHN0cm9uZ2x5IGFi b3V0IGl0Lg0KPiA+IA0KPiA+ID4gVGhhbmtzDQo+ID4gPiBCZXN0IFJlZ2FyZHMNCj4gPiA+IA0K PiA+ID4gPiA+ICsJfQ0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArCWlndF9zdWJ0ZXN0KCJ3cml0 ZWJhY2staW52YWxpZC1vdXQtZmVuY2UiKSB7DQo+ID4gPiA+ID4gKwkJaWd0X2ZiX3QgaW52YWxp ZF9mYjsNCj4gPiA+ID4gDQo+ID4gPiA+IGludmFsaWRfb3V0cHV0X2ZiIHdvdWxkIGJlIGEgYmV0 dGVyIG5hbWUgSU1ITy4NCj4gPiA+ID4gDQo+ID4gPiA+ID4gKwkJcmV0ID0gaWd0X2NyZWF0ZV9m YihkaXNwbGF5LmRybV9mZCwgbW9kZS5oZGlzcGxheSAvIDIsDQo+ID4gPiA+ID4gKwkJCQkgICAg bW9kZS52ZGlzcGxheSAvIDIsDQo+ID4gPiA+ID4gKwkJCQkgICAgRFJNX0ZPUk1BVF9YUkdCODg4 OCwNCj4gPiA+ID4gPiArCQkJCSAgICBpZ3RfZmJfbW9kX3RvX3RpbGluZygwKSwNCj4gPiA+ID4g PiArCQkJCSAgICAmaW52YWxpZF9mYik7DQo+ID4gPiA+ID4gKwkJaWd0X3JlcXVpcmUocmV0ID4g MCk7DQo+ID4gPiA+IA0KPiA+ID4gPiBXZSBzaG91bGQgcHJvYmFibHkgdXNlIGEgZGlmZmVyZW50 IHZhcmlhYmxlOiByZXQgaXMgc2lnbmVkLA0KPiA+ID4gPiBpZ3RfY3JlYXRlX2ZiIGlzbid0LiBB bHNvIHJldCBkb2Vzbid0IG1ha2UgaXQgY2xlYXIgdGhhdCB0aGUgcmV0dXJuDQo+ID4gPiA+IHZh bHVlIGlzIHRoZSBLTVMgZnJhbWVidWZmZXIgSUQuDQo+ID4gPiA+IA0KPiA+ID4gPiAoQXBwbGll cyB0byBvdGhlciBzdWJ0ZXN0cykNCj4gPiA+ID4gDQo+ID4gPiA+ID4gKwkJaW52YWxpZF9vdXRf ZmVuY2Uob3V0cHV0LCAmaW5wdXRfZmIsICZpbnZhbGlkX2ZiKTsNCj4gPiA+ID4gDQo+ID4gPiA+ IChTdGlsbCBub3Qgc3VyZSB3aHkgd2UgcHJvdmlkZSB0aGUgaW5wdXQgRkIgdG8gdGhpcyBmdW5j dGlvbi4pDQo+ID4gPiA+IA0KPiA+ID4gPiA+ICsJCWlndF9yZW1vdmVfZmIoZGlzcGxheS5kcm1f ZmQsICZpbnZhbGlkX2ZiKTsNCj4gPiA+ID4gPiArCX0NCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4g KwlpZ3Rfc3VidGVzdCgid3JpdGViYWNrLWZiLWlkIikgew0KPiA+ID4gPiA+ICsJCWlndF9mYl90 IG91dHB1dF9mYjsNCj4gPiA+ID4gPiArCQlyZXQgPSBpZ3RfY3JlYXRlX2ZiKGRpc3BsYXkuZHJt X2ZkLCBtb2RlLmhkaXNwbGF5LCBtb2RlLnZkaXNwbGF5LA0KPiA+ID4gPiA+ICsJCQkJICAgIERS TV9GT1JNQVRfWFJHQjg4ODgsDQo+ID4gPiA+ID4gKwkJCQkgICAgaWd0X2ZiX21vZF90b190aWxp bmcoMCksDQo+ID4gPiA+ID4gKwkJCQkgICAgJm91dHB1dF9mYik7DQo+ID4gPiA+ID4gKwkJaWd0 X3JlcXVpcmUocmV0ID4gMCk7DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsJCXdyaXRlYmFja19m Yl9pZChvdXRwdXQsICZpbnB1dF9mYiwgJm91dHB1dF9mYik7DQo+ID4gPiA+ID4gKw0KPiA+ID4g PiA+ICsJCWlndF9yZW1vdmVfZmIoZGlzcGxheS5kcm1fZmQsICZvdXRwdXRfZmIpOw0KPiA+ID4g PiA+ICsJfQ0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArCWlndF9maXh0dXJlIHsNCj4gPiA+ID4g PiArCQlpZ3RfcmVtb3ZlX2ZiKGRpc3BsYXkuZHJtX2ZkLCAmaW5wdXRfZmIpOw0KPiA+ID4gPiA+ ICsJCWlndF9kaXNwbGF5X2ZpbmkoJmRpc3BsYXkpOw0KPiA+ID4gPiA+ICsJfQ0KPiA+ID4gPiA+ ICt9DQo+ID4gPiA+ID4gZGlmZiAtLWdpdCBhL3Rlc3RzL21lc29uLmJ1aWxkIGIvdGVzdHMvbWVz b24uYnVpbGQNCj4gPiA+ID4gPiBpbmRleCBmMTY4ZmJiYS4uOWM3N2NmY2QgMTAwNjQ0DQo+ID4g PiA+ID4gLS0tIGEvdGVzdHMvbWVzb24uYnVpbGQNCj4gPiA+ID4gPiArKysgYi90ZXN0cy9tZXNv bi5idWlsZA0KPiA+ID4gPiA+IEBAIC02Myw2ICs2Myw3IEBAIHRlc3RfcHJvZ3MgPSBbDQo+ID4g PiA+ID4gIAkna21zX3VuaXZlcnNhbF9wbGFuZScsDQo+ID4gPiA+ID4gIAkna21zX3ZibGFuaycs DQo+ID4gPiA+ID4gIAkna21zX3ZycicsDQo+ID4gPiA+ID4gKwkna21zX3dyaXRlYmFjaycsDQo+ ID4gPiA+ID4gIAknbWV0YV90ZXN0JywNCj4gPiA+ID4gPiAgCSdwYW5mcm9zdF9nZXRfcGFyYW0n LA0KPiA+ID4gPiA+ICAJJ3BhbmZyb3N0X2dlbV9uZXcnLA0KPiA+ID4gPiA+IF9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQo+ID4gPiA+ID4gaWd0LWRldiBt YWlsaW5nIGxpc3QNCj4gPiA+ID4gPiBpZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZw0KPiA+ ID4gPiA+IGh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaWd0 LWRldg0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KaWd0 LWRldiBtYWlsaW5nIGxpc3QKaWd0LWRldkBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9s aXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2