From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTPS id 852F4890B8 for ; Thu, 19 Nov 2020 18:36:20 +0000 (UTC) From: "Laxminarayan Bharadiya, Pankaj" Date: Thu, 19 Nov 2020 18:36:15 +0000 Message-ID: <31bc1b90067d464c8eadaa71fd61f6d7@intel.com> References: <20201118081449.10523-1-pankaj.laxminarayan.bharadiya@intel.com> <20201118081449.10523-4-pankaj.laxminarayan.bharadiya@intel.com> In-Reply-To: Content-Language: en-US MIME-Version: 1.0 Subject: Re: [igt-dev] [PATCH i-g-t 3/3] tests: Add new PSR2 selective fetch test 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: "Souza, Jose" , "Mun, Gwan-gyeong" , "igt-dev@lists.freedesktop.org" List-ID: DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogU291emEsIEpvc2UgPGpv c2Uuc291emFAaW50ZWwuY29tPg0KPiBTZW50OiAxOSBOb3ZlbWJlciAyMDIwIDAxOjUwDQo+IFRv OiBMYXhtaW5hcmF5YW4gQmhhcmFkaXlhLCBQYW5rYWoNCj4gPHBhbmthai5sYXhtaW5hcmF5YW4u YmhhcmFkaXlhQGludGVsLmNvbT47IE11biwgR3dhbi1neWVvbmcgPGd3YW4tDQo+IGd5ZW9uZy5t dW5AaW50ZWwuY29tPjsgaWd0LWRldkBsaXN0cy5mcmVlZGVza3RvcC5vcmcNCj4gU3ViamVjdDog UmU6IFtQQVRDSCBpLWctdCAzLzNdIHRlc3RzOiBBZGQgbmV3IFBTUjIgc2VsZWN0aXZlIGZldGNo IHRlc3QNCj4gDQo+IE9uIFdlZCwgMjAyMC0xMS0xOCBhdCAxMzo0NCArMDUzMCwgUGFua2FqIEJo YXJhZGl5YSB3cm90ZToNCj4gPiBTZWxlY3RpdmUgZmV0Y2ggcmVkdWNlcyBkaXNwbGF5IGVuZ2lu ZSB1c2Ugb2YgbWVtb3J5IGJhbmR3aWR0aCBieSBvbmx5DQo+ID4gZmV0Y2hpbmcgKHJlYWRpbmcg ZnJvbSBtZW1vcnkpIHRoZSB1cGRhdGVkIHJlZ2lvbnMgb2YgdGhlIGZyYW1lIGJ1ZmZlcg0KPiA+ IGFuZCBzZW5kaW5nIHRob3NlIHVwZGF0ZWQgcmVnaW9ucyB0byBhIHBhbmVsIHdpdGggYSBQU1Iy IGNhcGFiaWxpdHkuDQo+ID4NCj4gPiBUaGUgRkJfREFNQUdFX0NMSVBTIHBsYW5lIHByb3BlcnR5 IHByb3ZpZGVzIHVzZXItc3BhY2UgYSB3YXkgaW5mb3JtDQo+ID4ga2VybmVsIGFib3V0IHRoZSB1 cGRhdGVkIHJlZ2lvbnMuDQo+ID4NCj4gPiBBZGQgbmV3IHRlc3QgdG8gdmVyaWZ5IHNlbGVjdGl2 ZSBmZXRjaCBieSB1c2luZyBGQl9EQU1BR0VfQ0xJUFMNCj4gPiBwcm9wZXJ0eSB0byBzZW5kICB1 cGRhdGVkIHJlZ2lvbnMuDQo+ID4NCj4gPiBTaWduZWQtb2ZmLWJ5OiBQYW5rYWogQmhhcmFkaXlh DQo+ID4gPHBhbmthai5sYXhtaW5hcmF5YW4uYmhhcmFkaXlhQGludGVsLmNvbT4NCj4gPiAtLS0N Cj4gPiDCoHRlc3RzL01ha2VmaWxlLnNvdXJjZXMgfCAgIDEgKw0KPiA+IMKgdGVzdHMva21zX3Bz cjJfc2YuYyAgICB8IDcxNw0KPiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKw0KPiA+IMKgdGVzdHMvbWVzb24uYnVpbGQgICAgICB8ICAgMSArDQo+ID4gwqAzIGZpbGVz IGNoYW5nZWQsIDcxOSBpbnNlcnRpb25zKCspDQo+ID4gwqBjcmVhdGUgbW9kZSAxMDA2NDQgdGVz dHMva21zX3BzcjJfc2YuYw0KPiA+DQo+ID4gZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlLnNv dXJjZXMgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIGluZGV4DQo+ID4gOTZkODM1ODIwLi40ZTY1 M2M4YjIgMTAwNjQ0DQo+ID4gLS0tIGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcw0KPiA+ICsrKyBi L3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMNCj4gPiBAQCAtNzksNiArNzksNyBAQCBURVNUU19wcm9n cyA9IFwNCj4gPiDCoAlrbXNfcHJvcGVydGllcyBcDQo+ID4gwqAJa21zX3BzciBcDQo+ID4gwqAJ a21zX3BzcjJfc3UgXA0KPiA+ICsJa21zX3BzcjJfc2YgXA0KPiA+IMKgCWttc19wd3JpdGVfY3Jj IFwNCj4gPiDCoAlrbXNfcm1mYiBcDQo+ID4gwqAJa21zX3JvdGF0aW9uX2NyYyBcDQo+ID4gZGlm ZiAtLWdpdCBhL3Rlc3RzL2ttc19wc3IyX3NmLmMgYi90ZXN0cy9rbXNfcHNyMl9zZi5jIG5ldyBm aWxlIG1vZGUNCj4gPiAxMDA2NDQgaW5kZXggMDAwMDAwMDAwLi5iYWE2NDA4NTENCj4gPiAtLS0g L2Rldi9udWxsDQo+ID4gKysrIGIvdGVzdHMva21zX3BzcjJfc2YuYw0KPiA+IEBAIC0wLDAgKzEs NzE3IEBADQo+ID4gKy8qDQo+ID4gKyAqIENvcHlyaWdodCDCqSAyMDIwIEludGVsIENvcnBvcmF0 aW9uDQo+ID4gKyAqDQo+ID4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUg b2YgY2hhcmdlLCB0byBhbnkgcGVyc29uDQo+ID4gK29idGFpbmluZyBhDQo+ID4gKyAqIGNvcHkg b2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUN Cj4gPiArIlNvZnR3YXJlIiksDQo+ID4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhv dXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0DQo+ID4gK2xpbWl0YXRpb24NCj4gPiAr ICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3Ry aWJ1dGUsDQo+ID4gK3N1YmxpY2Vuc2UsDQo+ID4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0 aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tDQo+ID4gK3RoZQ0KPiA+ ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxv d2luZyBjb25kaXRpb25zOg0KPiA+ICsgKg0KPiA+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5v dGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nDQo+ID4gK3RoZSBuZXh0 DQo+ID4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBz dWJzdGFudGlhbCBwb3J0aW9ucw0KPiA+ICtvZiB0aGUNCj4gPiArICogU29mdHdhcmUuDQo+ID4g KyAqDQo+ID4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdB UlJBTlRZIE9GIEFOWSBLSU5ELA0KPiA+ICtFWFBSRVNTIE9SDQo+ID4gKyAqIElNUExJRUQsIElO Q0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YNCj4gPiArTUVSQ0hB TlRBQklMSVRZLA0KPiA+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQg Tk9OSU5GUklOR0VNRU5ULiAgSU4gTk8NCj4gRVZFTlQNCj4gPiArU0hBTEwNCj4gPiArICogVEhF IEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sDQo+ IERBTUFHRVMNCj4gPiArT1IgT1RIRVINCj4gPiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFO IEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsDQo+ID4gK0FSSVNJTkcNCj4g PiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1Ig VEhFIFVTRSBPUg0KPiA+ICtPVEhFUiBERUFMSU5HUw0KPiA+ICsgKiBJTiBUSEUgU09GVFdBUkUu DQo+ID4gKyAqDQo+ID4gKyAqLw0KPiA+ICsNCj4gPiArI2luY2x1ZGUgImlndC5oIg0KPiA+ICsj aW5jbHVkZSAiaWd0X3N5c2ZzLmgiDQo+ID4gKyNpbmNsdWRlICJpZ3RfcHNyLmgiDQo+ID4gKyNp bmNsdWRlIDxlcnJuby5oPg0KPiA+ICsjaW5jbHVkZSA8c3RkYm9vbC5oPg0KPiA+ICsjaW5jbHVk ZSA8c3RkaW8uaD4NCj4gPiArI2luY2x1ZGUgPHN0cmluZy5oPg0KPiA+ICsjaW5jbHVkZSAiaW50 ZWxfYnVmbWdyLmgiDQo+ID4gKw0KPiA+ICtJR1RfVEVTVF9ERVNDUklQVElPTigiVGVzdCBQU1Iy IHNlbGVjdGl2ZSBmZXRjaCIpOw0KPiA+ICsNCj4gPiArI2RlZmluZSBTUVVBUkVfU0laRSAxMDAN Cj4gPiArDQo+ID4gKyNkZWZpbmUgQ1VSX1NJWkUgNjQNCj4gPiArDQo+ID4gK2VudW0gb3BlcmF0 aW9ucyB7DQo+ID4gKwlQTEFORV9VUERBVEUsDQo+ID4gKwlQTEFORV9NT1ZFLA0KPiA+ICsJT1ZF UkxBWV9QUklNX1VQREFURQ0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArZW51bSBwbGFuZV9tb3ZlX3Bv c3Rpb24gew0KPiA+ICsJUE9TX1RPUF9MRUZULA0KPiA+ICsJUE9TX1RPUF9SSUdIVCwNCj4gPiAr CVBPU19CT1RUT01fTEVGVCwNCj4gPiArCVBPU19CT1RUT01fUklHSFQNCj4gPiArfTsNCj4gPiAr DQo+ID4gK3R5cGVkZWYgc3RydWN0IHsNCj4gPiArCWludCBkcm1fZmQ7DQo+ID4gKwlpbnQgZGVi dWdmc19mZDsNCj4gPiArCWlndF9kaXNwbGF5X3QgZGlzcGxheTsNCj4gPiArCWRybV9pbnRlbF9i dWZtZ3IgKmJ1Zm1ncjsNCj4gPiArCWRybU1vZGVNb2RlSW5mbyAqbW9kZTsNCj4gPiArCWlndF9v dXRwdXRfdCAqb3V0cHV0Ow0KPiA+ICsJc3RydWN0IGlndF9mYiBmYlszXTsNCj4gPiArCWludCBk YW1hZ2VfYXJlYV9jb3VudDsNCj4gPiArCWVudW0gb3BlcmF0aW9ucyBvcDsNCj4gPiArCWVudW0g cGxhbmVfbW92ZV9wb3N0aW9uIHBvczsNCj4gPiArCWludCB0ZXN0X3BsYW5lX2lkOw0KPiA+ICsJ aWd0X3BsYW5lX3QgKnRlc3RfcGxhbmU7DQo+ID4gKwljYWlyb190ICpjcjsNCj4gPiArfSBkYXRh X3Q7DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3QgY2hhciAqb3Bfc3RyKGVudW0gb3BlcmF0aW9u cyBvcCkgew0KPiA+ICsJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBuYW1lW10gPSB7DQo+ID4g KwkJW1BMQU5FX1VQREFURV0gPSAicGxhbmUtdXBkYXRlIiwNCj4gPiArCQlbUExBTkVfTU9WRV0g PSAicGxhbmUtbW92ZSIsDQo+ID4gKwkJW09WRVJMQVlfUFJJTV9VUERBVEVdID0gIm92ZXJsYXkt cHJpbWFyeS11cGRhdGUiLA0KPiA+ICsJfTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gbmFtZVtvcF07 DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHNldHVwX291dHB1dChkYXRhX3QgKmRh dGEpIHsNCj4gPiArCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSAmZGF0YS0+ZGlzcGxheTsNCj4g PiArCWlndF9vdXRwdXRfdCAqb3V0cHV0Ow0KPiA+ICsJZW51bSBwaXBlIHBpcGU7DQo+ID4gKw0K PiA+ICsJZm9yX2VhY2hfcGlwZV93aXRoX3ZhbGlkX291dHB1dChkaXNwbGF5LCBwaXBlLCBvdXRw dXQpIHsNCj4gPiArCQlkcm1Nb2RlQ29ubmVjdG9yUHRyIGMgPSBvdXRwdXQtPmNvbmZpZy5jb25u ZWN0b3I7DQo+ID4gKw0KPiA+ICsJCWlmIChjLT5jb25uZWN0b3JfdHlwZSAhPSBEUk1fTU9ERV9D T05ORUNUT1JfZURQKQ0KPiA+ICsJCQljb250aW51ZTsNCj4gPiArDQo+ID4gKwkJaWd0X291dHB1 dF9zZXRfcGlwZShvdXRwdXQsIHBpcGUpOw0KPiA+ICsJCWRhdGEtPm91dHB1dCA9IG91dHB1dDsN Cj4gPiArCQlkYXRhLT5tb2RlID0gaWd0X291dHB1dF9nZXRfbW9kZShvdXRwdXQpOw0KPiA+ICsN Cj4gPiArCQlyZXR1cm47DQo+ID4gKwl9DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lk IGRpc3BsYXlfaW5pdChkYXRhX3QgKmRhdGEpIHsNCj4gPiArCWlndF9kaXNwbGF5X3JlcXVpcmUo JmRhdGEtPmRpc3BsYXksIGRhdGEtPmRybV9mZCk7DQo+ID4gKwlzZXR1cF9vdXRwdXQoZGF0YSk7 DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIGRpc3BsYXlfZmluaShkYXRhX3QgKmRh dGEpIHsNCj4gPiArCWlndF9kaXNwbGF5X2ZpbmkoJmRhdGEtPmRpc3BsYXkpOw0KPiA+ICt9DQo+ ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBkcmF3X3JlY3QoZGF0YV90ICpkYXRhLCBpZ3RfZmJfdCAq ZmIsIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoLA0KPiA+ICsJCQlkb3VibGUgciwgZG91Ymxl IGcsIGRvdWJsZSBiLCBkb3VibGUgYSkgew0KPiA+ICsJY2Fpcm9fdCAqY3I7DQo+ID4gKw0KPiA+ ICsJY3IgPSBpZ3RfZ2V0X2NhaXJvX2N0eChkYXRhLT5kcm1fZmQsIGZiKTsNCj4gPiArCWlndF9w YWludF9jb2xvcl9hbHBoYShjciwgeCwgeSwgdywgaCwgciwgZywgYiwgYSk7DQo+ID4gKwlpZ3Rf cHV0X2NhaXJvX2N0eChjcik7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHBsYW5l X3VwZGF0ZV9wYWludF9zcXVhcmVzKGRhdGFfdCAqZGF0YSwgaWd0X2ZiX3QgKmZiLCB1aW50MzJf dA0KPiBoLA0KPiA+ICsJCQkJICAgICAgIHVpbnQzMl90IHYpDQo+ID4gK3sNCj4gPiArDQo+ID4g Kwlzd2l0Y2ggKGRhdGEtPmRhbWFnZV9hcmVhX2NvdW50KSB7DQo+ID4gKwljYXNlIDU6DQo+ID4g KwkJLypCb3R0b20gcmlnaHQgY29ybmVyKi8NCj4gPiArCQlkcmF3X3JlY3QoZGF0YSwgZmIsIGgg LSBTUVVBUkVfU0laRSwgdiAtIFNRVUFSRV9TSVpFLA0KPiA+ICsJCQkgIFNRVUFSRV9TSVpFLCBT UVVBUkVfU0laRSwgMS4wLCAxLjAsIDEuMCwgMS4wKTsNCj4gPiArCWNhc2UgNDoNCj4gPiArCQkv KkJvdHRvbSBsZWZ0IGNvcm5lciovDQo+ID4gKwkJZHJhd19yZWN0KGRhdGEsIGZiLCBoIC0gU1FV QVJFX1NJWkUsIDAsDQo+ID4gKwkJCSAgU1FVQVJFX1NJWkUsIFNRVUFSRV9TSVpFLA0KPiA+ICsJ CQkgIDEuMCwgMS4wLCAxLjAsIDEuMCk7DQo+ID4gKwljYXNlIDM6DQo+ID4gKwkJLypUb3Agcmln aHQgY29ybmVyKi8NCj4gPiArCQlkcmF3X3JlY3QoZGF0YSwgZmIsIDAsIHYgLSBTUVVBUkVfU0la RSwNCj4gPiArCQkJICBTUVVBUkVfU0laRSwgU1FVQVJFX1NJWkUsIDEuMCwgMS4wLCAxLjAsIDEu MCk7DQo+ID4gKwljYXNlIDI6DQo+ID4gKwkJLypUb3AgbGVmdCBjb3JuZXIqLw0KPiA+ICsJCWRy YXdfcmVjdChkYXRhLCBmYiwgMCwgMCwgU1FVQVJFX1NJWkUsIFNRVUFSRV9TSVpFLA0KPiA+ICsJ CQkgIDEuMCwgMS4wLCAxLjAsIDEuMCk7DQo+ID4gKw0KPiA+ICsJY2FzZSAxOg0KPiA+ICsJCS8q Q2VudGVyKi8NCj4gPiArCQlkcmF3X3JlY3QoZGF0YSwgZmIsIGgvMiAtIFNRVUFSRV9TSVpFLzIs IHYvMiAtDQo+IFNRVUFSRV9TSVpFLzIsDQo+ID4gKwkJCSAgU1FVQVJFX1NJWkUsIFNRVUFSRV9T SVpFLCAxLjAsIDEuMCwgMS4wLCAxLjApOw0KPiA+ICsJfQ0KPiANCj4gV2FudCB0byBzZWUgYSBk YW1hZ2UgY2xpcCBiZWluZyBzZXQgZXZlcnkgdGltZSB5b3UgZHJhdyBpbiB0aGUgZmIsIHRvZ2V0 aGVyDQo+IGNhbGxzLiBFdmVuIGJldHRlciBpZiB5b3Ugc2V0IGludCB4LCB5LCB3IGFuZCBoIHZh cmlhYmxlcyBhbmQgcmV1c2UgdG8gaXQgdG8gY2FsbA0KPiBkcmF3X3JlY3QoKSBhbmQgc2V0IGNs aXBzKGNsaXBbeF0ueDIgPSBjbGlwW3hdLngxICsgdyk7DQo+IA0KPiBBbHNvIHlvdSBhcmUgb25s eSBzZXR0aW5nIHRoZSBkYW1hZ2UgYXJlYSBvZiB0aGUgcGxhY2VzIHlvdSBhcmUgZHJhd2luZyB0 bywgeW91DQo+IG5lZWQgYWxzbyB0byBtYXJrIHRoZSByZWdpb25zIG9mIHRoZSBwcmV2aW91cyBm YiB0aGF0IHdhcyBkcmF3IGFuZCBpbiB0aGUgbmV3IGZiDQo+IGhhdmUgdGhlIGJhY2tncm91bmQg Y29sb3IsIGV4YW1wbGU6DQo+IA0KPiBGQjANCj4gfC0tLS0tLXwNCj4gfE8gICAgIHwNCj4gfCAg ICAgIHwNCj4gLS0tLS0tLS0NCj4gDQo+IEZCMQ0KPiB8LS0tLS0tfA0KPiB8ICAgICAgfA0KPiB8 ICAgICAgfA0KPiAtLS0tLS0tLQ0KPiANCj4gV2hlbiBmbGlwcGluZyB0byBGQjEgeW91IG5lZWQg dG8gbWFyayBhcyBkYW1hZ2VkIHRoZSByZWdpb24gdGhhdCBoYWQgYSAwIGJ1dA0KPiBub3cgaXMg b25seSBiYWNrZ3JvdW5kLg0KDQpUaGlzIHNjZW5hcmlvIHdpbGwgbm90IG9jY3VyIGFzIG5ldyBh cmVhcyBhcmUgZHJhd24gYWxvbmcgd2l0aCB0aGUgcHJldmlvdXMgb25lcy4NClByZXZpb3VzIGFy ZWFzIGFyZSBhbHNvIHBhcnQgb2YgbmV3IGRhbWFnZWQgRkIgdXBkYXRlLg0KDQpEaWQgSSBtaXNz IGFueXRoaW5nPw0KDQo+IA0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBwbGFuZV9t b3ZlX3BhaW50X3NxdWFyZShkYXRhX3QgKmRhdGEsIGlndF9mYl90ICpmYiwgdWludDMyX3QgaCwN Cj4gPiArCQkJCSAgICAgICB1aW50MzJfdCB2KQ0KPiA+ICt7DQo+ID4gKw0KPiA+ICsJc3dpdGNo IChkYXRhLT5wb3MpIHsNCj4gPiArCWNhc2UgUE9TX1RPUF9MRUZUOg0KPiA+ICsJCS8qQm90dG9t IHJpZ2h0IGNvcm5lciovDQo+ID4gKwkJZHJhd19yZWN0KGRhdGEsIGZiLCBoIC0gU1FVQVJFX1NJ WkUsIHYgLSBTUVVBUkVfU0laRSwNCj4gPiArCQkJICBTUVVBUkVfU0laRSwgU1FVQVJFX1NJWkUs IDEuMCwgMS4wLCAxLjAsIDEuMCk7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIFBPU19UT1Bf UklHSFQ6DQo+ID4gKwkJLypCb3R0b20gbGVmdCBjb3JuZXIqLw0KPiA+ICsJCWRyYXdfcmVjdChk YXRhLCBmYiwgMCwgdiAtIFNRVUFSRV9TSVpFLA0KPiA+ICsJCQkgIFNRVUFSRV9TSVpFLCBTUVVB UkVfU0laRSwgMS4wLCAxLjAsIDEuMCwgMS4wKTsNCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2Ug UE9TX0JPVFRPTV9MRUZUOg0KPiA+ICsJCS8qVG9wIHJpZ2h0IGNvcm5lciovDQo+ID4gKwkJZHJh d19yZWN0KGRhdGEsIGZiLCBoIC0gU1FVQVJFX1NJWkUsIDAsDQo+ID4gKwkJCSAgU1FVQVJFX1NJ WkUsIFNRVUFSRV9TSVpFLCAxLjAsIDEuMCwgMS4wLCAxLjApOw0KPiA+ICsJCWJyZWFrOw0KPiA+ ICsJY2FzZSBQT1NfQk9UVE9NX1JJR0hUOg0KPiA+ICsJCS8qVG9wIGxlZnQgY29ybmVyKi8NCj4g PiArCQlkcmF3X3JlY3QoZGF0YSwgZmIsIDAsIDAsIFNRVUFSRV9TSVpFLCBTUVVBUkVfU0laRSwN Cj4gPiArCQkJICAxLjAsIDEuMCwgMS4wLCAxLjApOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJfQ0K PiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgc3RydWN0IGRybV9tb2RlX3JlY3QgKnBsYW5lX3Vw ZGF0ZV9zZXR1cF9kYW1hZ2VfYXJlYXMoZGF0YV90DQo+ICpkYXRhLA0KPiA+ICsJCQkJCQkJICAg ICB1aW50MzJfdCBoLA0KPiA+ICsJCQkJCQkJICAgICB1aW50MzJfdCB2KQ0KPiA+ICt7DQo+ID4g KwlzdHJ1Y3QgZHJtX21vZGVfcmVjdCAqY2xpcDsNCj4gPiArDQo+ID4gKwlpZiAoZGF0YS0+dGVz dF9wbGFuZV9pZCA9PSBEUk1fUExBTkVfVFlQRV9DVVJTT1IpIHsNCj4gPiArCQljbGlwID0gKHN0 cnVjdCBkcm1fbW9kZV9yZWN0ICopIG1hbGxvYyhzaXplb2Yoc3RydWN0DQo+ID4gKwkJCQkJCQkg ICAgICBkcm1fbW9kZV9yZWN0KSk7DQo+ID4gKwkJaWd0X2Fzc2VydChjbGlwKTsNCj4gPiArDQo+ ID4gKwkJY2xpcC0+eDEgPSBjbGlwLT55MSA9IDA7DQo+ID4gKwkJY2xpcC0+eDIgPSBjbGlwLT55 MiA9IENVUl9TSVpFOw0KPiA+ICsNCj4gPiArCX0gZWxzZSB7DQo+ID4gKwkJY2xpcCA9IChzdHJ1 Y3QgZHJtX21vZGVfcmVjdCAqKSBtYWxsb2Moc2l6ZW9mKHN0cnVjdA0KPiA+ICsJCQkJCQkJICAg ICAgZHJtX21vZGVfcmVjdCkgKg0KPiA+ICsJCQkJCQkgICAgICAgZGF0YS0NCj4gPmRhbWFnZV9h cmVhX2NvdW50KTsNCj4gDQo+IGFsbG9jIGVub3VnaCBjbGlwcyBmb3IgYWxsIHRlc3RzIGluIHN0 YWNrIGFuZCByZXVzZSBpbiBldmVyeSB1cGRhdGUuDQo+IA0KPiANCj4gPiArCQlpZ3RfYXNzZXJ0 KGNsaXApOw0KPiA+ICsNCj4gPiArCQlzd2l0Y2ggKGRhdGEtPmRhbWFnZV9hcmVhX2NvdW50KSB7 DQo+ID4gKwkJY2FzZSA1Og0KPiA+ICsJCQkvKkJvdHRvbSByaWdodCBjb3JuZXIqLw0KPiA+ICsJ CQljbGlwWzRdLngxID0gaCAtIFNRVUFSRV9TSVpFOw0KPiA+ICsJCQljbGlwWzRdLnkxID0gdiAt IFNRVUFSRV9TSVpFOw0KPiA+ICsJCQljbGlwWzRdLngyID0gY2xpcFs0XS54MSArIFNRVUFSRV9T SVpFOw0KPiA+ICsJCQljbGlwWzRdLnkyID0gY2xpcFs0XS55MSArIFNRVUFSRV9TSVpFOw0KPiA+ ICsJCWNhc2UgNDoNCj4gPiArCQkJLypCb3R0b20gbGVmdCBjb3JuZXIqLw0KPiA+ICsJCQljbGlw WzNdLngxID0gaCAtIFNRVUFSRV9TSVpFOw0KPiA+ICsJCQljbGlwWzNdLnkxID0gMDsNCj4gPiAr CQkJY2xpcFszXS54MiA9IGNsaXBbM10ueDEgKyBTUVVBUkVfU0laRTsNCj4gPiArCQkJY2xpcFsz XS55MiA9IGNsaXBbM10ueTEgKyBTUVVBUkVfU0laRTsNCj4gPiArCQljYXNlIDM6DQo+ID4gKwkJ CS8qVG9wIHJpZ2h0IGNvcm5lciovDQo+ID4gKwkJCWNsaXBbMl0ueDEgPSAwOw0KPiA+ICsJCQlj bGlwWzJdLnkxID0gdiAtIFNRVUFSRV9TSVpFOw0KPiA+ICsJCQljbGlwWzJdLngyID0gY2xpcFsy XS54MSArIFNRVUFSRV9TSVpFOw0KPiA+ICsJCQljbGlwWzJdLnkyID0gY2xpcFsyXS55MSArIFNR VUFSRV9TSVpFOw0KPiA+ICsJCWNhc2UgMjoNCj4gPiArCQkJLypUb3AgbGVmdCBjb3JuZXIqLw0K PiA+ICsJCQljbGlwWzFdLngxID0gMDsNCj4gPiArCQkJY2xpcFsxXS55MSA9IDA7DQo+ID4gKwkJ CWNsaXBbMV0ueDIgPSBjbGlwWzFdLngxICsgU1FVQVJFX1NJWkU7DQo+ID4gKwkJCWNsaXBbMV0u eTIgPSBjbGlwWzFdLnkxICsgU1FVQVJFX1NJWkU7DQo+ID4gKw0KPiA+ICsJCWNhc2UgMToNCj4g PiArCQkJLypDZW50ZXIqLw0KPiA+ICsJCQljbGlwWzBdLngxID0gaC8yIC0gU1FVQVJFX1NJWkUv MjsNCj4gPiArCQkJY2xpcFswXS55MSA9IHYvMiAtIFNRVUFSRV9TSVpFLzI7DQo+ID4gKwkJCWNs aXBbMF0ueDIgPSBjbGlwWzBdLngxICsgU1FVQVJFX1NJWkU7DQo+ID4gKwkJCWNsaXBbMF0ueTIg PSBjbGlwWzBdLnkxICsgU1FVQVJFX1NJWkU7DQo+ID4gKwkJfQ0KPiA+ICsJfQ0KPiA+ICsNCj4g PiArCXJldHVybiBjbGlwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgc3RydWN0IGRybV9t b2RlX3JlY3QgKnBsYW5lX21vdmVfc2V0dXBfZGFtYWdlX2FyZWEoZGF0YV90DQo+ICpkYXRhLA0K PiA+ICsJCQkJCQkJICB1aW50MzJfdCBoLA0KPiA+ICsJCQkJCQkJICB1aW50MzJfdCB2KQ0KPiA+ ICt7DQo+ID4gKwlzdHJ1Y3QgZHJtX21vZGVfcmVjdCAqY2xpcDsNCj4gPiArDQo+ID4gKwljbGlw ID0gKHN0cnVjdCBkcm1fbW9kZV9yZWN0ICopIG1hbGxvYyhzaXplb2Yoc3RydWN0IGRybV9tb2Rl X3JlY3QpKTsNCj4gPiArCWlndF9hc3NlcnQoY2xpcCk7DQo+ID4gKw0KPiA+ICsJc3dpdGNoIChk YXRhLT5wb3MpIHsNCj4gPiArCWNhc2UgUE9TX1RPUF9MRUZUOg0KPiA+ICsJCS8qQm90dG9tIHJp Z2h0IGNvcm5lciovDQo+ID4gKwkJY2xpcC0+eDEgPSBoIC0gU1FVQVJFX1NJWkU7DQo+ID4gKwkJ Y2xpcC0+eTEgPSB2IC0gU1FVQVJFX1NJWkU7DQo+ID4gKwkJY2xpcC0+eDIgPSBjbGlwLT54MSAr IFNRVUFSRV9TSVpFOw0KPiA+ICsJCWNsaXAtPnkyID0gY2xpcC0+eTEgKyBTUVVBUkVfU0laRTsN Cj4gPiArDQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIFBPU19UT1BfUklHSFQ6DQo+ID4gKwkJ LypCb3R0b20gbGVmdCBjb3JuZXIqLw0KPiA+ICsJCWNsaXAtPngxID0gaCAtIFNRVUFSRV9TSVpF Ow0KPiA+ICsJCWNsaXAtPnkxID0gMDsNCj4gPiArCQljbGlwLT54MiA9IGNsaXAtPngxICsgU1FV QVJFX1NJWkU7DQo+ID4gKwkJY2xpcC0+eTIgPSBjbGlwLT55MSArIFNRVUFSRV9TSVpFOw0KPiA+ ICsNCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgUE9TX0JPVFRPTV9MRUZUOg0KPiA+ICsJCS8q VG9wIHJpZ2h0IGNvcm5lciovDQo+ID4gKwkJY2xpcC0+eDEgPSAwOw0KPiA+ICsJCWNsaXAtPnkx ID0gdiAtIFNRVUFSRV9TSVpFOw0KPiA+ICsJCWNsaXAtPngyID0gY2xpcC0+eDEgKyBTUVVBUkVf U0laRTsNCj4gPiArCQljbGlwLT55MiA9IGNsaXAtPnkxICsgU1FVQVJFX1NJWkU7DQo+ID4gKw0K PiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBQT1NfQk9UVE9NX1JJR0hUOg0KPiA+ICsJCS8qVG9w IGxlZnQgY29ybmVyKi8NCj4gPiArCQljbGlwLT54MSA9IDA7DQo+ID4gKwkJY2xpcC0+eTEgPSAw Ow0KPiA+ICsJCWNsaXAtPngyID0gY2xpcC0+eDEgKyBTUVVBUkVfU0laRTsNCj4gPiArCQljbGlw LT55MiA9IGNsaXAtPnkxICsgU1FVQVJFX1NJWkU7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0 dXJuIGNsaXA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIGZyZWVfZGFtYWdlX2Fy ZWFzKHN0cnVjdCBkcm1fbW9kZV9yZWN0ICpjbGlwKSB7DQo+ID4gKwlpZiAoIWNsaXApDQo+ID4g KwkJcmV0dXJuOw0KPiA+ICsNCj4gPiArCWZyZWUoY2xpcCk7DQo+ID4gK30NCj4gPiArDQo+ID4g K3N0YXRpYyB2b2lkIHByZXBhcmUoZGF0YV90ICpkYXRhKQ0KPiA+ICt7DQo+ID4gKwlpZ3RfcGxh bmVfdCAqcHJpbWFyeSwgKnNwcml0ZSA9IE5VTEwsICpjdXJzb3IgPSBOVUxMOw0KPiA+ICsNCj4g PiArCS8qIGFsbCBncmVlbiBmcmFtZSAqLw0KPiA+ICsJaWd0X2NyZWF0ZV9jb2xvcl9mYihkYXRh LT5kcm1fZmQsDQo+ID4gKwkJCSAgICBkYXRhLT5tb2RlLT5oZGlzcGxheSwgZGF0YS0+bW9kZS0+ dmRpc3BsYXksDQo+ID4gKwkJCSAgICBEUk1fRk9STUFUX1hSR0I4ODg4LA0KPiA+ICsJCQkgICAg TE9DQUxfRFJNX0ZPUk1BVF9NT0RfTk9ORSwNCj4gPiArCQkJICAgIDAuMCwgMS4wLCAwLjAsDQo+ ID4gKwkJCSAgICAmZGF0YS0+ZmJbMF0pOw0KPiA+ICsNCj4gPiArCXByaW1hcnkgPSBpZ3Rfb3V0 cHV0X2dldF9wbGFuZV90eXBlKGRhdGEtPm91dHB1dCwNCj4gPiArCQkJRFJNX1BMQU5FX1RZUEVf UFJJTUFSWSk7DQo+ID4gKw0KPiA+ICsJc3dpdGNoIChkYXRhLT50ZXN0X3BsYW5lX2lkKSB7DQo+ ID4gKwljYXNlIERSTV9QTEFORV9UWVBFX09WRVJMQVk6DQo+ID4gKwkJc3ByaXRlID0gaWd0X291 dHB1dF9nZXRfcGxhbmVfdHlwZShkYXRhLT5vdXRwdXQsDQo+ID4gKw0KPiBEUk1fUExBTkVfVFlQ RV9PVkVSTEFZKTsNCj4gPiArCQkvKkFsbCBibHVlIHBsYW5lKi8NCj4gPiArCQlpZ3RfY3JlYXRl X2NvbG9yX2ZiKGRhdGEtPmRybV9mZCwNCj4gPiArCQkJCSAgICBkYXRhLT5tb2RlLT5oZGlzcGxh eS8yLA0KPiA+ICsJCQkJICAgIGRhdGEtPm1vZGUtPnZkaXNwbGF5LzIsDQo+ID4gKwkJCQkgICAg RFJNX0ZPUk1BVF9YUkdCODg4OCwNCj4gPiArCQkJCSAgICBMT0NBTF9EUk1fRk9STUFUX01PRF9O T05FLA0KPiA+ICsJCQkJICAgIDAuMCwgMC4wLCAxLjAsDQo+ID4gKwkJCQkgICAgJmRhdGEtPmZi WzFdKTsNCj4gDQo+IEtpbmRhIG9mIGNvbmZ1c2luZyBkYXRhLT5mYiwgYWRkIGRhdGEtPmZiX3By aW1hcnlbXSwgZGF0YS0+ZmJfb3ZlcmxheVtdIGFuZA0KPiBkYXRhLT5mYl9jdXJzb3JbXS4NCj4g DQo+ID4gKw0KPiA+ICsJCWlndF9jcmVhdGVfY29sb3JfZmIoZGF0YS0+ZHJtX2ZkLA0KPiA+ICsJ CQkJICAgIGRhdGEtPm1vZGUtPmhkaXNwbGF5LzIsDQo+ID4gKwkJCQkgICAgZGF0YS0+bW9kZS0+ dmRpc3BsYXkvMiwNCj4gPiArCQkJCSAgICBEUk1fRk9STUFUX1hSR0I4ODg4LA0KPiA+ICsJCQkJ ICAgIExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUsDQo+ID4gKwkJCQkgICAgMC4wLCAwLjAsIDEu MCwNCj4gPiArCQkJCSAgICAmZGF0YS0+ZmJbMl0pOw0KPiA+ICsNCj4gPiArCQlpZiAoZGF0YS0+ b3AgPT0gUExBTkVfTU9WRSkgew0KPiA+ICsJCQlwbGFuZV9tb3ZlX3BhaW50X3NxdWFyZShkYXRh LCAmZGF0YS0+ZmJbMl0sDQo+ID4gKwkJCQkJICAgZGF0YS0+bW9kZS0+aGRpc3BsYXkvMiwNCj4g PiArCQkJCQkgICBkYXRhLT5tb2RlLT52ZGlzcGxheS8yKTsNCj4gPiArDQo+ID4gKwkJfSBlbHNl IHsNCj4gPiArCQkJcGxhbmVfdXBkYXRlX3BhaW50X3NxdWFyZXMoZGF0YSwgJmRhdGEtPmZiWzJd LA0KPiA+ICsJCQkJCSAgIGRhdGEtPm1vZGUtPmhkaXNwbGF5LzIsDQo+ID4gKwkJCQkJICAgZGF0 YS0+bW9kZS0+dmRpc3BsYXkvMik7DQo+ID4gKwkJfQ0KPiA+ICsNCj4gPiArCQlpZ3RfcGxhbmVf c2V0X2ZiKHNwcml0ZSwgJmRhdGEtPmZiWzFdKTsNCj4gPiArCQlkYXRhLT50ZXN0X3BsYW5lID0g c3ByaXRlOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsNCj4gPiArCWNhc2UgRFJNX1BMQU5FX1RZUEVf UFJJTUFSWToNCj4gPiArCQlpZ3RfY3JlYXRlX2NvbG9yX2ZiKGRhdGEtPmRybV9mZCwNCj4gPiAr CQkJICAgIGRhdGEtPm1vZGUtPmhkaXNwbGF5LCBkYXRhLT5tb2RlLT52ZGlzcGxheSwNCj4gPiAr CQkJICAgIERSTV9GT1JNQVRfWFJHQjg4ODgsDQo+ID4gKwkJCSAgICBMT0NBTF9EUk1fRk9STUFU X01PRF9OT05FLA0KPiA+ICsJCQkgICAgMC4wLCAxLjAsIDAuMCwNCj4gPiArCQkJICAgICZkYXRh LT5mYlsyXSk7DQo+ID4gKw0KPiA+ICsJCXBsYW5lX3VwZGF0ZV9wYWludF9zcXVhcmVzKGRhdGEs ICZkYXRhLT5mYlsyXSwNCj4gPiArCQkJCQkgICBkYXRhLT5tb2RlLT5oZGlzcGxheSwNCj4gPiAr CQkJCQkgICBkYXRhLT5tb2RlLT52ZGlzcGxheSk7DQo+ID4gKwkJZGF0YS0+dGVzdF9wbGFuZSA9 IHByaW1hcnk7DQo+ID4gKw0KPiA+ICsJCWlmIChkYXRhLT5vcCA9PSBPVkVSTEFZX1BSSU1fVVBE QVRFKSB7DQo+ID4gKwkJCXNwcml0ZSA9IGlndF9vdXRwdXRfZ2V0X3BsYW5lX3R5cGUoZGF0YS0+ b3V0cHV0LA0KPiA+ICsNCj4gRFJNX1BMQU5FX1RZUEVfT1ZFUkxBWSk7DQo+ID4gKw0KPiA+ICsJ CQlpZ3RfY3JlYXRlX2NvbG9yX2ZiKGRhdGEtPmRybV9mZCwNCj4gPiArCQkJCQkgICAgZGF0YS0+ bW9kZS0+aGRpc3BsYXksDQo+ID4gKwkJCQkJICAgIGRhdGEtPm1vZGUtPnZkaXNwbGF5LA0KPiA+ ICsJCQkJCSAgICBEUk1fRk9STUFUX1hSR0I4ODg4LA0KPiA+ICsJCQkJCSAgICBMT0NBTF9EUk1f Rk9STUFUX01PRF9OT05FLA0KPiA+ICsJCQkJCSAgICAwLjAsIDAuMCwgMS4wLA0KPiA+ICsJCQkJ CSAgICAmZGF0YS0+ZmJbMV0pOw0KPiA+ICsNCj4gPiArCQkJaWd0X3BsYW5lX3NldF9mYihzcHJp dGUsICZkYXRhLT5mYlsxXSk7DQo+ID4gKwkJCWlndF9wbGFuZV9zZXRfcHJvcF92YWx1ZShzcHJp dGUsIElHVF9QTEFORV9BTFBIQSwNCj4gPiArCQkJCQkJIDB4NjA2MCk7DQo+ID4gKwkJfQ0KPiA+ ICsJCWJyZWFrOw0KPiA+ICsNCj4gPiArCWNhc2UgRFJNX1BMQU5FX1RZUEVfQ1VSU09SOg0KPiA+ ICsJCWN1cnNvciA9IGlndF9vdXRwdXRfZ2V0X3BsYW5lX3R5cGUoZGF0YS0+b3V0cHV0LA0KPiA+ ICsNCj4gRFJNX1BMQU5FX1RZUEVfQ1VSU09SKTsNCj4gPiArCQlpZ3RfcGxhbmVfc2V0X3Bvc2l0 aW9uKGN1cnNvciwgMCwgMCk7DQo+ID4gKw0KPiA+ICsJCWlndF9jcmVhdGVfZmIoZGF0YS0+ZHJt X2ZkLCBDVVJfU0laRSwgQ1VSX1NJWkUsDQo+ID4gKwkJCSAgICAgIERSTV9GT1JNQVRfQVJHQjg4 ODgsDQo+IExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUsDQo+ID4gKwkJCSAgICAgICZkYXRhLT5m YlsxXSk7DQo+ID4gKw0KPiA+ICsJCWRyYXdfcmVjdChkYXRhLCAmZGF0YS0+ZmJbMV0sIDAsIDAs IENVUl9TSVpFLCBDVVJfU0laRSwNCj4gPiArCQkJICAgIDAuMCwgMC4wLCAxLjAsIDEuMCk7DQo+ ID4gKw0KPiA+ICsJCWlndF9jcmVhdGVfZmIoZGF0YS0+ZHJtX2ZkLCBDVVJfU0laRSwgQ1VSX1NJ WkUsDQo+ID4gKwkJCSAgICAgIERSTV9GT1JNQVRfQVJHQjg4ODgsDQo+IExPQ0FMX0RSTV9GT1JN QVRfTU9EX05PTkUsDQo+ID4gKwkJCSAgICAgICZkYXRhLT5mYlsyXSk7DQo+ID4gKw0KPiA+ICsJ CWRyYXdfcmVjdChkYXRhLCAmZGF0YS0+ZmJbMl0sIDAsIDAsIENVUl9TSVpFLCBDVVJfU0laRSwN Cj4gPiArCQkJICAgIDEuMCwgMS4wLCAxLjAsIDEuMCk7DQo+ID4gKw0KPiA+ICsJCWlndF9wbGFu ZV9zZXRfZmIoY3Vyc29yLCAmZGF0YS0+ZmJbMV0pOw0KPiA+ICsJCWRhdGEtPnRlc3RfcGxhbmUg PSBjdXJzb3I7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWd0X3BsYW5l X3NldF9mYihwcmltYXJ5LCAmZGF0YS0+ZmJbMF0pOw0KPiA+ICsNCj4gPiArCWlndF9kaXNwbGF5 X2NvbW1pdDIoJmRhdGEtPmRpc3BsYXksIENPTU1JVF9BVE9NSUMpOyB9DQo+ID4gKw0KPiA+ICtz dGF0aWMgaW5saW5lIHZvaWQgbWFudWFsKGNvbnN0IGNoYXIgKmV4cGVjdGVkKSB7DQo+ID4gKwlp Z3RfZGVidWdfbWFudWFsX2NoZWNrKCJhbGwiLCBleHBlY3RlZCk7IH0NCj4gPiArDQo+ID4gK3N0 YXRpYyB2b2lkIHBsYW5lX3VwZGF0ZV9leHBlY3RlZF9vdXRwdXQoaW50IHBsYW5lX3R5cGUsIGlu dA0KPiA+ICtib3hfY291bnQpIHsNCj4gPiArCWNoYXIgZXhwZWN0ZWRbNjRdID0ge307DQo+ID4g Kw0KPiA+ICsJc3dpdGNoIChwbGFuZV90eXBlKSB7DQo+ID4gKwljYXNlIERSTV9QTEFORV9UWVBF X1BSSU1BUlk6DQo+ID4gKwkJc3ByaW50ZihleHBlY3RlZCwgInNjcmVlbiBHcmVlbiB3aXRoICVk IFdoaXRlIGJveChlcykiLA0KPiA+ICsJCQlib3hfY291bnQpOw0KPiA+ICsJCWJyZWFrOw0KPiA+ ICsJY2FzZSBEUk1fUExBTkVfVFlQRV9PVkVSTEFZOg0KPiA+ICsJCXNwcmludGYoZXhwZWN0ZWQs DQo+ID4gKwkJCSJzY3JlZW4gR3JlZW4gd2l0aCBCbHVlIGJveCBhbmQgJWQgV2hpdGUgYm94KGVz KSIsDQo+ID4gKwkJCWJveF9jb3VudCk7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIERSTV9Q TEFORV9UWVBFX0NVUlNPUjoNCj4gPiArCQlzcHJpbnRmKGV4cGVjdGVkLCAic2NyZWVuIEdyZWVu IHdpdGggJWQgV2hpdGUgYm94KGVzKSIsDQo+ID4gKwkJCWJveF9jb3VudCk7DQo+ID4gKwkJYnJl YWs7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJbWFudWFsKGV4cGVjdGVkKTsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArc3RhdGljIHZvaWQgcGxhbmVfbW92ZV9leHBlY3RlZF9vdXRwdXQoZW51bSBwbGFu ZV9tb3ZlX3Bvc3Rpb24gcG9zKSB7DQo+ID4gKwljaGFyIGV4cGVjdGVkWzY0XSA9IHt9Ow0KPiA+ ICsNCj4gPiArCXN3aXRjaCAocG9zKSB7DQo+ID4gKwljYXNlIFBPU19UT1BfTEVGVDoNCj4gPiAr CQlzcHJpbnRmKGV4cGVjdGVkLA0KPiA+ICsJCQkic2NyZWVuIEdyZWVuIHdpdGggQmx1ZSBib3gg b24gdG9wIGxlZnQgY29ybmVyIGFuZA0KPiBXaGl0ZSBib3giKTsNCj4gPiArCQlicmVhazsNCj4g PiArCWNhc2UgUE9TX1RPUF9SSUdIVDoNCj4gPiArCQlzcHJpbnRmKGV4cGVjdGVkLA0KPiA+ICsJ CQkic2NyZWVuIEdyZWVuIHdpdGggQmx1ZSBib3ggb24gdG9wIHJpZ2h0IGNvcm5lciBhbmQNCj4g V2hpdGUgYm94Iik7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIFBPU19CT1RUT01fTEVGVDoN Cj4gPiArCQlzcHJpbnRmKGV4cGVjdGVkLA0KPiA+ICsJCQkic2NyZWVuIEdyZWVuIHdpdGggQmx1 ZSBib3ggb24gYm90dG9tIGxlZnQgY29ybmVyIGFuZA0KPiBXaGl0ZSBib3giKTsNCj4gPiArCQli cmVhazsNCj4gPiArCWNhc2UgUE9TX0JPVFRPTV9SSUdIVDoNCj4gPiArCQlzcHJpbnRmKGV4cGVj dGVkLA0KPiA+ICsJCQkic2NyZWVuIEdyZWVuIHdpdGggQmx1ZSBib3ggb24gYm90dG9tIHJpZ2h0 IGNvcm5lcg0KPiBhbmQgV2hpdGUgYm94Iik7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwl9DQo+ID4g Kw0KPiA+ICsJbWFudWFsKGV4cGVjdGVkKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZv aWQgb3ZlcmxheV9wcmltX3VwZGF0ZV9leHBlY3RlZF9vdXRwdXQoaW50IGJveF9jb3VudCkgew0K PiA+ICsJY2hhciBleHBlY3RlZFs2NF0gPSB7fTsNCj4gPiArDQo+ID4gKwlzcHJpbnRmKGV4cGVj dGVkLA0KPiA+ICsJCSJzY3JlZW4gR3JlZW4gd2l0aCBCbHVlIG92ZXJsYXksICVkIGxpZ2h0IEJs dWUgYm94KGVzKSIsDQo+ID4gKwkJYm94X2NvdW50KTsNCj4gPiArDQo+ID4gKwltYW51YWwoZXhw ZWN0ZWQpOw0KPiA+ICsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgZXhwZWN0ZWRf b3V0cHV0KGRhdGFfdCAqZGF0YSkgew0KPiA+ICsJc3dpdGNoIChkYXRhLT5vcCkgew0KPiA+ICsJ Y2FzZSBQTEFORV9NT1ZFOg0KPiA+ICsJCXBsYW5lX21vdmVfZXhwZWN0ZWRfb3V0cHV0KGRhdGEt PnBvcyk7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIFBMQU5FX1VQREFURToNCj4gPiArCQlw bGFuZV91cGRhdGVfZXhwZWN0ZWRfb3V0cHV0KGRhdGEtPnRlc3RfcGxhbmVfaWQsDQo+ID4gKwkJ CQkJICAgICBkYXRhLT5kYW1hZ2VfYXJlYV9jb3VudCk7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwlj YXNlIE9WRVJMQVlfUFJJTV9VUERBVEU6DQo+ID4gKwkJb3ZlcmxheV9wcmltX3VwZGF0ZV9leHBl Y3RlZF9vdXRwdXQoZGF0YS0NCj4gPmRhbWFnZV9hcmVhX2NvdW50KTsNCj4gPiArCQlicmVhazsN Cj4gPiArCX0NCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgZGFtYWdlZF9wbGFuZV9t b3ZlKGRhdGFfdCAqZGF0YSkgew0KPiA+ICsJaWd0X3BsYW5lX3QgKnRlc3RfcGxhbmUgPSBkYXRh LT50ZXN0X3BsYW5lOw0KPiA+ICsJc3RydWN0IGRybV9tb2RlX3JlY3QgKmNsaXA7DQo+ID4gKwl1 aW50MzJfdCBoID0gZGF0YS0+bW9kZS0+aGRpc3BsYXk7DQo+ID4gKwl1aW50MzJfdCB2ID0gZGF0 YS0+bW9kZS0+dmRpc3BsYXk7DQo+ID4gKw0KPiA+ICsJaWd0X3BsYW5lX3NldF9mYih0ZXN0X3Bs YW5lLCAmZGF0YS0+ZmJbMl0pOw0KPiA+ICsNCj4gPiArCWlmIChkYXRhLT50ZXN0X3BsYW5lX2lk ID09IERSTV9QTEFORV9UWVBFX09WRVJMQVkpIHsNCj4gPiArCQloID0gaC8yOw0KPiA+ICsJCXYg PSB2LzI7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJY2xpcCA9IHBsYW5lX21vdmVfc2V0dXBfZGFt YWdlX2FyZWEoZGF0YSwgaCwgdik7DQo+IA0KPiBUaGlzIHByb3BlcnR5IGlzIGluIHJlbGF0aW9u IHRvIHRoZSBwbGFuZSwgdGhpcyBkYW1hZ2UgYXJlYXMgeW91IGFyZSBzZXR0aW5nIGluIHRoZQ0K PiBmdW5jdGlvbiBtYWtlcyBubyBzZW5zZS4NCg0KSWYgSSB1bmRlcnN0b29kIGNvcnJlY3RseSBh ZnRlciBkaXNjdXNzaW9uIHdpdGggR0csICB3ZSBjYW4gc2V0dXAgdGhlIGRhbWFnZWQgDQphcmVh cyBpbiBwbGFuZSB3LnIudCBwbGFuZSBjby1vcmRpbmF0ZXMgaXJyZXNwZWN0aXZlICBzZXQgdGhl IHBsYW5lIHBvc2l0aW9uDQoNCklzIHRoaXMgY29ycmVjdD8NCg0KPiBXaGVuIG1vdmluZyBhIHBs YW5lIG9yIHNldCB0aGUgd2hvbGUgdmlzaWJsZSBwbGFuZSBhcmVhIGFzIGRhbWFnZWQgb3INCj4g bm90aGluZyhpdCBzaG91bGQgYmUgb25lIG9mIHRoZSBjYXNlcyBoYW5kbGVkIGJ5IGRyaXZlciku DQoNCkkgZGlkIG5vdCBxdWl0ZSBnZXQgaXQuIEFyZSB5b3Ugc2F5aW5nIHRvIHNldHVwIGRhbWFn ZSBhcmVhIGZvciB0aGUgZW50aXJlDQpvdmVycGxheSBwbGFuZSB3aGVyZSBpdCBpcyBiZWluZyBt b3ZlZD8gIFdpbGwgeW91IHBsZWFzZSBzaGFyZSBleGFtcGxlLg0KDQo+IA0KPiA+ICsJaWd0X3Bs YW5lX3JlcGxhY2VfcHJvcF9ibG9iKHRlc3RfcGxhbmUsDQo+IElHVF9QTEFORV9GQl9EQU1BR0Vf Q0xJUFMsIGNsaXAsDQo+ID4gKwkJCQkgICAgc2l6ZW9mKHN0cnVjdCBkcm1fbW9kZV9yZWN0KSk7 DQo+ID4gKw0KPiA+ICsJc3dpdGNoIChkYXRhLT5wb3MpIHsNCj4gPiArCWNhc2UgUE9TX1RPUF9M RUZUOg0KPiA+ICsJCWlndF9wbGFuZV9zZXRfcG9zaXRpb24oZGF0YS0+dGVzdF9wbGFuZSwgMCwg MCk7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIFBPU19UT1BfUklHSFQ6DQo+ID4gKwkJaWd0 X3BsYW5lX3NldF9wb3NpdGlvbihkYXRhLT50ZXN0X3BsYW5lLA0KPiA+ICsJCQkJICAgICAgIGRh dGEtPm1vZGUtPmhkaXNwbGF5LzIsIDApOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBQT1Nf Qk9UVE9NX0xFRlQ6DQo+ID4gKwkJaWd0X3BsYW5lX3NldF9wb3NpdGlvbihkYXRhLT50ZXN0X3Bs YW5lLCAwLA0KPiA+ICsJCQkJICAgICAgIGRhdGEtPm1vZGUtPnZkaXNwbGF5LzIpOw0KPiA+ICsJ CWJyZWFrOw0KPiA+ICsJY2FzZSBQT1NfQk9UVE9NX1JJR0hUOg0KPiA+ICsJCWlndF9wbGFuZV9z ZXRfcG9zaXRpb24oZGF0YS0+dGVzdF9wbGFuZSwNCj4gPiArCQkJCSAgICAgICBkYXRhLT5tb2Rl LT5oZGlzcGxheS8yLA0KPiA+ICsJCQkJICAgICAgIGRhdGEtPm1vZGUtPnZkaXNwbGF5LzIpOw0K PiA+ICsJCWJyZWFrOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlndF9kaXNwbGF5X2NvbW1pdDIo JmRhdGEtPmRpc3BsYXksIENPTU1JVF9BVE9NSUMpOw0KPiA+ICsNCj4gPiArCWlndF9hc3NlcnQo cHNyX3dhaXRfZW50cnkoZGF0YS0+ZGVidWdmc19mZCwgUFNSX01PREVfMikpOw0KPiA+ICsNCj4g PiArCWV4cGVjdGVkX291dHB1dChkYXRhKTsNCj4gPiArDQo+ID4gKwlmcmVlX2RhbWFnZV9hcmVh cyhjbGlwKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgZGFtYWdlZF9wbGFuZV91 cGRhdGUoZGF0YV90ICpkYXRhKSB7DQo+ID4gKwlpZ3RfcGxhbmVfdCAqdGVzdF9wbGFuZSA9IGRh dGEtPnRlc3RfcGxhbmU7DQo+ID4gKwlzdHJ1Y3QgZHJtX21vZGVfcmVjdCAqY2xpcDsNCj4gPiAr CXVpbnQzMl90IGggPSBkYXRhLT5tb2RlLT5oZGlzcGxheTsNCj4gPiArCXVpbnQzMl90IHYgPSBk YXRhLT5tb2RlLT52ZGlzcGxheTsNCj4gPiArDQo+ID4gKwlpZ3RfcGxhbmVfc2V0X2ZiKHRlc3Rf cGxhbmUsICZkYXRhLT5mYlsyXSk7DQo+ID4gKw0KPiA+ICsJaWYgKGRhdGEtPnRlc3RfcGxhbmVf aWQgPT0gRFJNX1BMQU5FX1RZUEVfT1ZFUkxBWSkgew0KPiA+ICsJCWggPSBoLzI7DQo+ID4gKwkJ diA9IHYvMjsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwljbGlwID0gcGxhbmVfdXBkYXRlX3NldHVw X2RhbWFnZV9hcmVhcyhkYXRhLCBoLCB2KTsNCj4gPiArCWlndF9wbGFuZV9yZXBsYWNlX3Byb3Bf YmxvYih0ZXN0X3BsYW5lLA0KPiBJR1RfUExBTkVfRkJfREFNQUdFX0NMSVBTLCBjbGlwLA0KPiA+ ICsJCQkJICAgIHNpemVvZihzdHJ1Y3QgZHJtX21vZGVfcmVjdCkqDQo+ID4gKwkJCQkgICAgZGF0 YS0+ZGFtYWdlX2FyZWFfY291bnQpOw0KPiA+ICsJaWd0X3BsYW5lX3NldF9wb3NpdGlvbihkYXRh LT50ZXN0X3BsYW5lLCAwLCAwKTsNCj4gPiArCWlndF9kaXNwbGF5X2NvbW1pdDIoJmRhdGEtPmRp c3BsYXksIENPTU1JVF9BVE9NSUMpOw0KPiA+ICsNCj4gPiArCWlndF9hc3NlcnQocHNyX3dhaXRf ZW50cnkoZGF0YS0+ZGVidWdmc19mZCwgUFNSX01PREVfMikpOw0KPiA+ICsNCj4gPiArCWV4cGVj dGVkX291dHB1dChkYXRhKTsNCj4gPiArDQo+ID4gKwlmcmVlX2RhbWFnZV9hcmVhcyhjbGlwKTsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgdXBkYXRlX3NjcmVlbl9hbmRfdGVzdChk YXRhX3QgKmRhdGEpIHsNCj4gPiArCXN3aXRjaCAoZGF0YS0+b3ApIHsNCj4gPiArCWNhc2UgUExB TkVfVVBEQVRFOg0KPiA+ICsJY2FzZSBPVkVSTEFZX1BSSU1fVVBEQVRFOg0KPiA+ICsJCWRhbWFn ZWRfcGxhbmVfdXBkYXRlKGRhdGEpOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBQTEFORV9N T1ZFOg0KPiA+ICsJCWRhbWFnZWRfcGxhbmVfbW92ZShkYXRhKTsNCj4gPiArCQlicmVhazsNCj4g PiArCX0NCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgc2NyZWVuX3Jlc2V0KGRhdGFf dCAgKmRhdGEpIHsNCj4gPiArCWlndF9wbGFuZV90ICp0ZXN0X3BsYW5lID0gZGF0YS0+dGVzdF9w bGFuZTsNCj4gPiArDQo+ID4gKwlpZiAoZGF0YS0+dGVzdF9wbGFuZV9pZCA9PSBEUk1fUExBTkVf VFlQRV9QUklNQVJZKQ0KPiA+ICsJCWlndF9wbGFuZV9zZXRfZmIodGVzdF9wbGFuZSwgJmRhdGEt PmZiWzBdKTsNCj4gPiArCWVsc2UNCj4gPiArCQlpZ3RfcGxhbmVfc2V0X2ZiKHRlc3RfcGxhbmUs ICZkYXRhLT5mYlsxXSk7DQo+ID4gKw0KPiA+ICsJaWd0X3BsYW5lX3NldF9wb3NpdGlvbihkYXRh LT50ZXN0X3BsYW5lLCAwLCAwKTsNCj4gPiArCWlndF9kaXNwbGF5X2NvbW1pdDIoJmRhdGEtPmRp c3BsYXksIENPTU1JVF9BVE9NSUMpOyB9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBydW4oZGF0 YV90ICpkYXRhKQ0KPiA+ICt7DQo+ID4gKwlpZ3RfYXNzZXJ0KHBzcl93YWl0X2VudHJ5KGRhdGEt PmRlYnVnZnNfZmQsIFBTUl9NT0RFXzIpKTsNCj4gPiArDQo+ID4gKwlzY3JlZW5fcmVzZXQoZGF0 YSk7DQo+IA0KPiB3aHkgeW91IG5lZWQgdGhpcyBpZiB5b3UgaGF2ZSBjb21taXR0ZWQgYWxyZWFk eSBpbiB0aGUgcHJlcGFyZSgpPw0KDQpZZWFoIHdpbGwgcmVtb3ZlIGl0Lg0KV2FzIGV4cGVyaW1l bnRpbmcgd2l0aCBsb29wIGZvciB3aXRoIG11bHRpcGxlIHNjcmVlbiBjaGFuZ2VzLg0KDQo+IA0K PiA+ICsJdXBkYXRlX3NjcmVlbl9hbmRfdGVzdChkYXRhKTsNCj4gDQo+IENvbnRlbnQgb2YgdGhp cyBmdW5jdGlvbiBjb3VsZCBiZSBtb3ZlZCB0byBoZXJlLg0KDQpZZXMuDQoNCj4gDQo+IA0KPiA+ ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBjbGVhbnVwKGRhdGFfdCAqZGF0YSkNCj4gPiAr ew0KPiA+ICsJaWd0X3BsYW5lX3QgKnByaW1hcnk7DQo+ID4gKwlpZ3RfcGxhbmVfdCAqc3ByaXRl Ow0KPiA+ICsNCj4gPiArCXByaW1hcnkgPSBpZ3Rfb3V0cHV0X2dldF9wbGFuZV90eXBlKGRhdGEt Pm91dHB1dCwNCj4gPiArCQkJCQkgICAgRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSk7DQo+ID4gKw0K PiA+ICsJaWd0X3BsYW5lX3NldF9mYihwcmltYXJ5LCBOVUxMKTsNCj4gPiArDQo+ID4gKwlpZiAo ZGF0YS0+dGVzdF9wbGFuZV9pZCAhPSBEUk1fUExBTkVfVFlQRV9QUklNQVJZKSB7DQo+ID4gKwkJ aWd0X3BsYW5lX3NldF9wb3NpdGlvbihkYXRhLT50ZXN0X3BsYW5lLCAwLCAwKTsNCj4gPiArCQlp Z3RfcGxhbmVfc2V0X2ZiKGRhdGEtPnRlc3RfcGxhbmUsIE5VTEwpOw0KPiA+ICsJfQ0KPiA+ICsN Cj4gPiArCWlmIChkYXRhLT5vcCA9PSBPVkVSTEFZX1BSSU1fVVBEQVRFKSB7DQo+ID4gKwkJc3By aXRlID0gaWd0X291dHB1dF9nZXRfcGxhbmVfdHlwZShkYXRhLT5vdXRwdXQsDQo+ID4gKwkJCQlE Uk1fUExBTkVfVFlQRV9PVkVSTEFZKTsNCj4gPiArCQlpZ3RfcGxhbmVfc2V0X3Bvc2l0aW9uKHNw cml0ZSwgMCwgMCk7DQo+ID4gKwkJaWd0X3BsYW5lX3NldF9mYihzcHJpdGUsIE5VTEwpOw0KPiA+ ICsJfQ0KPiA+ICsNCj4gPiArCWlndF9kaXNwbGF5X2NvbW1pdDIoJmRhdGEtPmRpc3BsYXksIENP TU1JVF9BVE9NSUMpOw0KPiA+ICsNCj4gPiArCWlndF9yZW1vdmVfZmIoZGF0YS0+ZHJtX2ZkLCAm ZGF0YS0+ZmJbMF0pOw0KPiA+ICsJaWd0X3JlbW92ZV9mYihkYXRhLT5kcm1fZmQsICZkYXRhLT5m YlsxXSk7DQo+ID4gKwlpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmRybV9mZCwgJmRhdGEtPmZiWzJdKTsg fQ0KPiA+ICsNCj4gPiAraWd0X21haW4NCj4gPiArew0KPiA+ICsJZGF0YV90IGRhdGEgPSB7fTsN Cj4gPiArCWludCBpOw0KPiA+ICsNCj4gPiArCWlndF9maXh0dXJlIHsNCj4gPiArCQlpbnQgcjsN Cj4gPiArDQo+ID4gKwkJZGF0YS5kcm1fZmQgPSBkcm1fb3Blbl9kcml2ZXJfbWFzdGVyKERSSVZF Ul9JTlRFTCk7DQo+ID4gKwkJZGF0YS5kZWJ1Z2ZzX2ZkID0gaWd0X2RlYnVnZnNfZGlyKGRhdGEu ZHJtX2ZkKTsNCj4gPiArCQlrbXN0ZXN0X3NldF92dF9ncmFwaGljc19tb2RlKCk7DQo+ID4gKw0K PiA+ICsJCWlndF9yZXF1aXJlX2YocHNyX3Npbmtfc3VwcG9ydChkYXRhLmRybV9mZCwNCj4gPiAr CQkJCQkgICAgICAgZGF0YS5kZWJ1Z2ZzX2ZkLCBQU1JfTU9ERV8yKSwNCj4gPiArCQkJICAgICAg IlNpbmsgZG9lcyBub3Qgc3VwcG9ydCBQU1IyXG4iKTsNCj4gPiArDQo+ID4gKwkJaWd0X3JlcXVp cmVfZihwc3IyX3NlbGVjdGl2ZV9mZXRjaF9jaGVjayhkYXRhLmRlYnVnZnNfZmQpLA0KPiA+ICsJ CQkgICAgICAiUFNSMiBzZWxlY3RpdmUgZmV0Y2ggbm90IGVuYWJsZWRcbiIpOw0KPiA+ICsNCj4g PiArCQlkYXRhLmJ1Zm1nciA9IGRybV9pbnRlbF9idWZtZ3JfZ2VtX2luaXQoZGF0YS5kcm1fZmQs IDQwOTYpOw0KPiA+ICsJCWlndF9hc3NlcnQoZGF0YS5idWZtZ3IpOw0KPiA+ICsJCWRybV9pbnRl bF9idWZtZ3JfZ2VtX2VuYWJsZV9yZXVzZShkYXRhLmJ1Zm1ncik7DQo+ID4gKw0KPiA+ICsJCWRp c3BsYXlfaW5pdCgmZGF0YSk7DQo+ID4gKw0KPiA+ICsJCS8qIFRlc3QgaWYgUFNSMiBjYW4gYmUg ZW5hYmxlZCAqLw0KPiA+ICsJCWlndF9yZXF1aXJlX2YocHNyX2VuYWJsZShkYXRhLmRybV9mZCwN Cj4gPiArCQkJCQkgZGF0YS5kZWJ1Z2ZzX2ZkLCBQU1JfTU9ERV8yKSwNCj4gPiArCQkJICAgICAg IkVycm9yIGVuYWJsaW5nIFBTUjJcbiIpOw0KPiA+ICsNCj4gPiArCQlkYXRhLmRhbWFnZV9hcmVh X2NvdW50ID0gNTsNCj4gPiArCQlkYXRhLm9wID0gUExBTkVfVVBEQVRFOw0KPiA+ICsJCWRhdGEu dGVzdF9wbGFuZV9pZCA9IERSTV9QTEFORV9UWVBFX1BSSU1BUlk7DQo+ID4gKwkJcHJlcGFyZSgm ZGF0YSk7DQo+ID4gKwkJciA9IHBzcl93YWl0X2VudHJ5KGRhdGEuZGVidWdmc19mZCwgUFNSX01P REVfMik7DQo+ID4gKwkJY2xlYW51cCgmZGF0YSk7DQo+ID4gKwkJaWYgKCFyKQ0KPiA+ICsJCQlw c3JfcHJpbnRfZGVidWdmcyhkYXRhLmRlYnVnZnNfZmQpOw0KPiA+ICsJCWlndF9yZXF1aXJlX2Yo ciwgIlBTUjIgY2FuIG5vdCBiZSBlbmFibGVkXG4iKTsNCj4gPiArCX0NCj4gPiArDQo+IA0KPiBN aXNzaW5nIHNvbWUgZGVzY3JpcHRpb24gb2Ygd2hhdCBlYWNoIHN1YnRlc3Qgd2lsbCwgYWxzbyBh IGJldHRlciBuYW1lLg0KPiBXaGF0IHdlIHdpbGwgc2VlIGluIENJIHdvdWxkIGJlOiBwcmltYXJ5 LXBsYW5lLXVwZGF0ZS1zZi01LCA1IHdoYXQ/DQoNCkFueSBzdWdnZXN0aW9ucyBoZXJlPw0KDQpU aGFua3MsDQpQYW5rYWoNCg0KPiANCj4gPiArCWZvciAoaSA9IDE7IGkgPD0gNTsgaSsrKSB7DQo+ ID4gKwkJaWd0X3N1YnRlc3RfZigicHJpbWFyeS0lcy1zZi0lZCIsIG9wX3N0cihkYXRhLm9wKSwg aSkgew0KPiA+ICsJCQlkYXRhLmRhbWFnZV9hcmVhX2NvdW50ID0gaTsNCj4gPiArCQkJZGF0YS50 ZXN0X3BsYW5lX2lkID0gRFJNX1BMQU5FX1RZUEVfUFJJTUFSWTsNCj4gPiArCQkJcHJlcGFyZSgm ZGF0YSk7DQo+ID4gKwkJCXJ1bigmZGF0YSk7DQo+ID4gKwkJCWNsZWFudXAoJmRhdGEpOw0KPiA+ ICsJCX0NCj4gPiArCX0NCj4gPiArDQo+ID4gKwlmb3IgKGkgPSAxOyBpIDw9IDU7IGkrKykgew0K PiA+ICsJCWlndF9zdWJ0ZXN0X2YoIm92ZXJsYXktJXMtc2YtJWQiLCBvcF9zdHIoZGF0YS5vcCks IGkpIHsNCj4gPiArCQkJZGF0YS5kYW1hZ2VfYXJlYV9jb3VudCA9IGk7DQo+ID4gKwkJCWRhdGEu dGVzdF9wbGFuZV9pZCA9IERSTV9QTEFORV9UWVBFX09WRVJMQVk7DQo+ID4gKwkJCXByZXBhcmUo JmRhdGEpOw0KPiA+ICsJCQlydW4oJmRhdGEpOw0KPiA+ICsJCQljbGVhbnVwKCZkYXRhKTsNCj4g PiArCQl9DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWd0X3N1YnRlc3RfZigiY3Vyc29yLSVzLXNm Iiwgb3Bfc3RyKGRhdGEub3ApKSB7DQo+ID4gKwkJZGF0YS5kYW1hZ2VfYXJlYV9jb3VudCA9IDE7 DQo+ID4gKwkJZGF0YS50ZXN0X3BsYW5lX2lkID0gRFJNX1BMQU5FX1RZUEVfQ1VSU09SOw0KPiA+ ICsJCXByZXBhcmUoJmRhdGEpOw0KPiA+ICsJCXJ1bigmZGF0YSk7DQo+ID4gKwkJY2xlYW51cCgm ZGF0YSk7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJLyogT25seSBmb3Igb3ZlcmxheSBwbGFuZSAq Lw0KPiA+ICsJZGF0YS5vcCA9IFBMQU5FX01PVkU7DQo+ID4gKwlmb3IgKGkgPSBQT1NfVE9QX0xF RlQ7IGkgPD0gUE9TX0JPVFRPTV9SSUdIVCA7IGkrKykgew0KPiA+ICsJCWlndF9zdWJ0ZXN0X2Yo IiVzLXNmLSVkIiwgb3Bfc3RyKGRhdGEub3ApLCBpKSB7DQo+ID4gKwkJCWRhdGEucG9zID0gaTsN Cj4gPiArCQkJZGF0YS50ZXN0X3BsYW5lX2lkID0gRFJNX1BMQU5FX1RZUEVfT1ZFUkxBWTsNCj4g PiArCQkJcHJlcGFyZSgmZGF0YSk7DQo+ID4gKwkJCXJ1bigmZGF0YSk7DQo+ID4gKwkJCWNsZWFu dXAoJmRhdGEpOw0KPiA+ICsJCX0NCj4gPiArCX0NCj4gPiArDQo+ID4gKwlkYXRhLm9wID0gT1ZF UkxBWV9QUklNX1VQREFURTsNCj4gPiArCWZvciAoaSA9IDE7IGkgPD0gNTsgaSsrKSB7DQo+ID4g KwkJaWd0X3N1YnRlc3RfZigiJXMtc2YtJWQiLCBvcF9zdHIoZGF0YS5vcCksIGkpIHsNCj4gPiAr CQkJZGF0YS5kYW1hZ2VfYXJlYV9jb3VudCA9IGk7DQo+ID4gKwkJCWRhdGEudGVzdF9wbGFuZV9p ZCA9IERSTV9QTEFORV9UWVBFX1BSSU1BUlk7DQo+ID4gKwkJCXByZXBhcmUoJmRhdGEpOw0KPiA+ ICsJCQlydW4oJmRhdGEpOw0KPiA+ICsJCQljbGVhbnVwKCZkYXRhKTsNCj4gPiArCQl9DQo+ID4g Kwl9DQo+ID4gKw0KPiA+ICsJaWd0X2ZpeHR1cmUgew0KPiA+ICsJCWNsb3NlKGRhdGEuZGVidWdm c19mZCk7DQo+ID4gKwkJZHJtX2ludGVsX2J1Zm1ncl9kZXN0cm95KGRhdGEuYnVmbWdyKTsNCj4g PiArCQlkaXNwbGF5X2ZpbmkoJmRhdGEpOw0KPiA+ICsJfQ0KPiA+ICt9DQo+ID4gZGlmZiAtLWdp dCBhL3Rlc3RzL21lc29uLmJ1aWxkIGIvdGVzdHMvbWVzb24uYnVpbGQgaW5kZXgNCj4gPiBjYzc5 YWMyMjguLmIzM2NmYjYzZiAxMDA2NDQNCj4gPiAtLS0gYS90ZXN0cy9tZXNvbi5idWlsZA0KPiA+ ICsrKyBiL3Rlc3RzL21lc29uLmJ1aWxkDQo+ID4gQEAgLTYzLDYgKzYzLDcgQEAgdGVzdF9wcm9n cyA9IFsNCj4gPiDCoAkna21zX3Byb3BlcnRpZXMnLA0KPiA+IMKgCSdrbXNfcHNyJywNCj4gPiDC oAkna21zX3BzcjJfc3UnLA0KPiA+ICsJJ2ttc19wc3IyX3NmJywNCj4gPiDCoAkna21zX3B3cml0 ZV9jcmMnLA0KPiA+IMKgCSdrbXNfcm1mYicsDQo+ID4gwqAJJ2ttc19yb3RhdGlvbl9jcmMnLA0K DQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2 IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXYK