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 634D9893EA for ; Tue, 16 Apr 2019 02:03:27 +0000 (UTC) Message-ID: <852e17cdb74fdf8474496f4b5d3e3628df2b4560.camel@intel.com> From: Carlos Santa Date: Mon, 15 Apr 2019 19:02:35 -0700 In-Reply-To: <95dffaa6-0977-f61d-a056-3aacb9536fa4@intel.com> References: <20190415182251.22427-1-carlos.santa@intel.com> <20190415182251.22427-2-carlos.santa@intel.com> <95dffaa6-0977-f61d-a056-3aacb9536fa4@intel.com> Mime-Version: 1.0 Subject: Re: [igt-dev] [RFC] tests/gem_watchdog: Initial set of tests for GPU watchdog 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: Antonio Argenziano , igt-dev@lists.freedesktop.org Cc: Ursulin Tvrtko List-ID: T24gTW9uLCAyMDE5LTA0LTE1IGF0IDE0OjUwIC0wNzAwLCBBbnRvbmlvIEFyZ2Vuemlhbm8gd3Jv dGU6Cj4gCj4gT24gMTUvMDQvMTkgMTE6MjIsIENhcmxvcyBTYW50YSB3cm90ZToKPiA+IFRoaXMg dGVzdCBhZGRzIGJhc2ljIHNldCBvZiB0ZXN0cyB0byByZXNldCB0aGUgZGlmZmVyZW50Cj4gPiBH UFUgZW5naW5lcyB0aHJvdWdoIHRoZSB3YXRjaGRvZyB0aW1lci4KPiA+IAo+ID4gQ3JlZGl0cyB0 byBBbnRvbmlvIGZvciB0aGUgb3JpZ2luYWwgY29kZWJhc2UgdGhpcyBpcyBiYXNlZCBvbi4KPiA+ IAo+ID4gQ2M6IFVyc3VsaW4gVHZydGtvIDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+Cj4gPiBD YzogQW50b25pbyBBcmdlbnppYW5vIDxhbnRvbmlvLmFyZ2Vuemlhbm9AaW50ZWwuY29tPgo+ID4g Q2M6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrCj4gCj4gbml0OiBtaXNz aW5nICc+JyBhdCB0aGUgZW5kIG9mIGFkZHJlc3MgXgo+IAo+ID4gU2lnbmVkLW9mZi1ieTogQ2Fy bG9zIFNhbnRhIDxjYXJsb3Muc2FudGFAaW50ZWwuY29tPgo+ID4gLS0tCj4gPiAgIHRlc3RzL01h a2VmaWxlLnNvdXJjZXMgICAgfCAgIDMgKwo+ID4gICB0ZXN0cy9pOTE1L2dlbV93YXRjaGRvZy5j IHwgNDM5Cj4gPiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Cj4gPiAgIHRlc3RzL21lc29uLmJ1aWxkICAgICAgICAgfCAgIDEgKwo+ID4gICAzIGZpbGVzIGNo YW5nZWQsIDQ0MyBpbnNlcnRpb25zKCspCj4gPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9p OTE1L2dlbV93YXRjaGRvZy5jCj4gPiAKPiA+IGRpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5z b3VyY2VzIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwo+ID4gaW5kZXggMjE0Njk4ZC4uN2YxN2Yy MCAxMDA2NDQKPiA+IC0tLSBhL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKPiA+ICsrKyBiL3Rlc3Rz L01ha2VmaWxlLnNvdXJjZXMKPiA+IEBAIC00NDQsNiArNDQ0LDkgQEAgZ2VtX3VzZXJwdHJfYmxp dHNfU09VUkNFUyA9Cj4gPiBpOTE1L2dlbV91c2VycHRyX2JsaXRzLmMKPiA+ICAgVEVTVFNfcHJv Z3MgKz0gZ2VtX3dhaXQKPiA+ICAgZ2VtX3dhaXRfU09VUkNFUyA9IGk5MTUvZ2VtX3dhaXQuYwo+ ID4gICAKPiA+ICtURVNUU19wcm9ncyArPSBnZW1fd2F0Y2hkb2cKPiA+ICtnZW1fd2F0Y2hkb2df U09VUkNFUyA9IGk5MTUvZ2VtX3dhdGNoZG9nLmMKPiA+ICsKPiA+ICAgVEVTVFNfcHJvZ3MgKz0g Z2VtX3dvcmthcm91bmRzCj4gPiAgIGdlbV93b3JrYXJvdW5kc19TT1VSQ0VTID0gaTkxNS9nZW1f d29ya2Fyb3VuZHMuYwo+ID4gICAKPiA+IGRpZmYgLS1naXQgYS90ZXN0cy9pOTE1L2dlbV93YXRj aGRvZy5jIGIvdGVzdHMvaTkxNS9nZW1fd2F0Y2hkb2cuYwo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQKPiA+IGluZGV4IDAwMDAwMDAuLjY1ZTJmNWIKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBi L3Rlc3RzL2k5MTUvZ2VtX3dhdGNoZG9nLmMKPiA+IEBAIC0wLDAgKzEsNDM5IEBACj4gPiArLyoK PiA+ICsgKiBDb3B5cmlnaHQgwqkgMjAxNiBJbnRlbCBDb3Jwb3JhdGlvbgo+ID4gKyAqCj4gPiAr ICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBw ZXJzb24KPiA+IG9idGFpbmluZyBhCj4gPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBh c3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQo+ID4gIlNvZnR3YXJlIiksCj4gPiAr ICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5n IHdpdGhvdXQKPiA+IGxpbWl0YXRpb24KPiA+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwg bW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwKPiA+IHN1YmxpY2Vuc2UsCj4gPiAr ICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJz b25zIHRvCj4gPiB3aG9tIHRoZQo+ID4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBz bywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCj4gPiBjb25kaXRpb25zOgo+ID4gKyAqCj4gPiAr ICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UK PiA+IChpbmNsdWRpbmcgdGhlIG5leHQKPiA+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1 ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwKPiA+IHBvcnRpb25zIG9mIHRoZQo+ID4g KyAqIFNvZnR3YXJlLgo+ID4gKyAqCj4gPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJB UyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCj4gPiBFWFBSRVNTIE9SCj4gPiAr ICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBP Rgo+ID4gTUVSQ0hBTlRBQklMSVRZLAo+ID4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTwo+ID4gRVZFTlQgU0hBTEwKPiA+ICsg KiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJ TSwKPiA+IERBTUFHRVMgT1IgT1RIRVIKPiA+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4g QUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKPiA+IEFSSVNJTkcKPiA+ICsg KiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUg VVNFIE9SCj4gPiBPVEhFUiBERUFMSU5HUwo+ID4gKyAqIElOIFRIRSBTT0ZUV0FSRS4KPiA+ICsg Ki8KPiA+ICsjaW5jbHVkZSAiaWd0LmgiCj4gPiArI2luY2x1ZGUgImlndF9zeXNmcy5oIgo+ID4g KyNpbmNsdWRlICJzd19zeW5jLmgiCj4gPiArCj4gPiArI2luY2x1ZGUgPHB0aHJlYWQuaD4KPiA+ ICsjaW5jbHVkZSA8ZmNudGwuaD4KPiA+ICsKPiA+ICsjaW5jbHVkZSA8c3lzL2lvY3RsLmg+Cj4g PiArI2luY2x1ZGUgPHN5cy9wb2xsLmg+Cj4gPiArI2luY2x1ZGUgPHN5cy9zaWduYWwuaD4KPiA+ ICsjaW5jbHVkZSAiaTkxNS9nZW1fcmluZy5oIgo+ID4gKwo+ID4gKyNkZWZpbmUgTUFYX1BSSU8g TE9DQUxfSTkxNV9DT05URVhUX01BWF9VU0VSX1BSSU9SSVRZCj4gPiArI2RlZmluZSBNSU5fUFJJ TyBMT0NBTF9JOTE1X0NPTlRFWFRfTUlOX1VTRVJfUFJJT1JJVFkKPiA+ICsjZGVmaW5lIEhJR0gg MQo+ID4gKyNkZWZpbmUgTE9XIDAKPiA+ICsjZGVmaW5lIExPQ0FMX0VYRUNfRkVOQ0VfT1VUICgx IDw8IDE3KQo+ID4gKyNkZWZpbmUgV0FUQ0hET0dfVEhSRVNIT0xEICgxMDApCj4gPiArI2RlZmlu ZSBNQVhfRU5HSU5FUyA1Cj4gPiArI2RlZmluZSBSRU5ERVJfQ0xBU1MgMAo+ID4gKyNkZWZpbmUg VklERU9fREVDT0RFX0NMQVNTIDEKPiA+ICsjZGVmaW5lIFZJREVPX0VOSEFOQ0VNRU5UX0NMQVNT IDIKPiA+ICsjZGVmaW5lIENPUFlfRU5HSU5FX0NMQVNTIDMKPiA+ICsjZGVmaW5lIExPQ0FMX0k5 MTVfQ09OVEVYVF9QQVJBTV9XQVRDSERPRyAweDEwCj4gPiArCj4gPiArY29uc3QgdWludDY0X3Qg dGltZW91dF8xMDBtcyA9IDEwMDAwMDAwMExMOwo+ID4gK3N0YXRpYyBwdGhyZWFkX211dGV4X3Qg bGlzdF9sb2NrID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKPiA+ICsKPiA+ICtzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX3dhdGNoZG9nX3RpbWVvdXQgewo+ID4gKwl1bmlvbiB7Cj4gPiArCQlzdHJ1 Y3Qgewo+ID4gKwkJCS8qCj4gPiArCQkJICogRW5naW5lIGNsYXNzICYgaW5zdGFuY2UgdG8gYmUg Y29uZmlndXJlZCBvcgo+ID4gcXVlcmllZC4KPiA+ICsJCQkgKi8KPiA+ICsJCQlfX3UxNiBlbmdp bmVfY2xhc3M7Cj4gPiArCQkJX191MTYgZW5naW5lX2luc3RhbmNlOwo+ID4gKwkJfTsKPiA+ICsJ CS8qIEluZGV4IGJhc2VkIGFkZHJlc3NpbmcgbW9kZSAqLwo+ID4gKwkJX191MzIgaW5kZXg7Cj4g PiArCX07Cj4gPiArCS8qIEdQVSBFbmdpbmUgd2F0Y2hkb2cgcmVzZXRzIHRpbWVvdXQgaW4gdXMg Ki8KPiA+ICsJX191MzIgdGltZW91dF91czsKPiA+ICt9Owo+ID4gKwo+ID4gK3N0YXRpYyB2b2lk IGNsZWFyX2Vycm9yX3N0YXRlKGludCBmZCkKPiA+ICt7Cj4gPiArCWludCBkaXI7Cj4gPiArCj4g PiArCWRpciA9IGlndF9zeXNmc19vcGVuKGZkKTsKPiA+ICsKPiA+ICsJaWYgKGRpciA8IDApCj4g PiArCQlyZXR1cm47Cj4gPiArCj4gPiArCS8qIEFueSB3cml0ZSB0byB0aGUgZXJyb3Igc3RhdGUg Y2xlYXJzIGl0ICovCj4gPiArCWlndF9zeXNmc19zZXQoZGlyLCAiZXJyb3IiLCAiIik7Cj4gPiAr CWNsb3NlKGRpcik7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBib29sIGNoZWNrX2Vycm9yX3N0 YXRlKGludCBmZCkgPiArewo+IAo+IERvbid0IHRoaW5rIHRoaXMgaXMgdXNlZC4KCllvdSdyZSBy aWdodCwgSSBtaXNzZWQgdG8gZGVsZXRlIGl0LgoKPiAKPiA+ICsJY2hhciAqZXJyb3IsICpzdHI7 Cj4gPiArCWJvb2wgZm91bmQgPSBmYWxzZTsKPiA+ICsJaW50IGRpcjsKPiA+ICsKPiA+ICsJZGly ID0gaWd0X3N5c2ZzX29wZW4oZmQpOwo+ID4gKwo+ID4gKwllcnJvciA9IGlndF9zeXNmc19nZXQo ZGlyLCAiZXJyb3IiKTsKPiA+ICsJaWd0X3N5c2ZzX3NldChkaXIsICJlcnJvciIsICJCZWdvbmUh Iik7Cj4gPiArCj4gPiArCWlndF9hc3NlcnQoZXJyb3IpOwo+ID4gKwlpZ3RfZGVidWcoIkVycm9y OiAlc1xuIiwgZXJyb3IpOwo+ID4gKwo+ID4gKwlpZiAoKHN0ciA9IHN0cnN0cihlcnJvciwgIkdQ VSBIQU5HIikpKSB7Cj4gPiArCQlpZ3RfZGVidWcoIkZvdW5kIGVycm9yIHN0YXRlISBHUFUgaGFu ZyB0cmlnZ2VyZWQhCj4gPiAlc1xuIiwgc3RyKTsKPiA+ICsJCWZvdW5kID0gdHJ1ZTsKPiA+ICsJ fQo+ID4gKwo+ID4gKwljbG9zZShkaXIpOwo+ID4gKwo+ID4gKwlyZXR1cm4gZm91bmQ7Cj4gPiAr fQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIGNvbnRleHRfc2V0X3dhdGNoZG9nKGludCBmZCwgaW50 IGVuZ2luZV9pZCwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l ZCBjdHhfaWQsIHVuc2lnbmVkCj4gPiB0aHJlc2hvbGQpCj4gPiArewo+ID4gKwlzdHJ1Y3QgZHJt X2k5MTVfZ2VtX3dhdGNoZG9nX3RpbWVvdXQKPiA+IGVuZ2luZXNfdGhyZXNob2xkW01BWF9FTkdJ TkVTXTsKPiA+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFtIGFyZyA9IHsKPiA+ ICsJCS5wYXJhbSA9IExPQ0FMX0k5MTVfQ09OVEVYVF9QQVJBTV9XQVRDSERPRywKPiA+ICsJCS5j dHhfaWQgPSBjdHhfaWQsCj4gPiArCQkuc2l6ZSA9IHNpemVvZihlbmdpbmVzX3RocmVzaG9sZCks Cj4gPiArCQkudmFsdWUgPSAodWludDY0X3QpJmVuZ2luZXNfdGhyZXNob2xkCj4gPiArCX07Cj4g PiArCj4gPiArICAgIG1lbXNldCgmZW5naW5lc190aHJlc2hvbGQsIDAsIHNpemVvZihlbmdpbmVz X3RocmVzaG9sZCkpOwo+ID4gKwo+ID4gKyAgICAvKiByZWFkIGV4aXN0aW5nIHZhbHVlcyAqLwo+ ID4gKyAgICBnZW1fY29udGV4dF9nZXRfcGFyYW0oZmQsICZhcmcpOwo+IAo+IFdoeSBkbyB3ZSBu ZWVkIHRvIHJlYWQgdGhlIGV4aXN0aW5nIHZhbHVlcz8KCllvdSdyZSByaWdodCwgd2UgZG9uJ3Qg bmVlZCB0by4gSSBqdXN0IHF1aWNrbHkgdGVzdGVkIGl0Li4uCgo+IAo+ID4gKwo+ID4gKyAgICBz d2l0Y2ggKGVuZ2luZV9pZCAmIEk5MTVfRVhFQ19SSU5HX01BU0spIHsKPiAKPiBJZiBJIHJlYWQg dGhpcyBjb3JyZWN0bHkgd2UgY2Fubm90IHNldCB0aGUgdGhyZXNob2xkIGZvciBtb3JlIHRoYW4K PiBvbmUgCj4gZW5naW5lIGF0IGEgdGltZS4gTWF5YmUgdXNlIGEgbWFzaz8KPiAKPiA+ICsgICAg Y2FzZSBJOTE1X0VYRUNfUkVOREVSOgo+ID4gKyAgICAgICAgIGVuZ2luZXNfdGhyZXNob2xkW1JF TkRFUl9DTEFTU10udGltZW91dF91cyA9IHRocmVzaG9sZDsKPiA+ICsJIGVuZ2luZXNfdGhyZXNo b2xkW1ZJREVPX0RFQ09ERV9DTEFTU10udGltZW91dF91cyA9IDA7Cj4gPiArCSBlbmdpbmVzX3Ro cmVzaG9sZFtWSURFT19FTkhBTkNFTUVOVF9DTEFTU10udGltZW91dF91cyA9IDA7Cj4gPiArCSBl bmdpbmVzX3RocmVzaG9sZFtDT1BZX0VOR0lORV9DTEFTU10udGltZW91dF91cyA9IDA7Cj4gPiAr ICAgICAgICAgYnJlYWs7Cj4gPiArICAgIGNhc2UgSTkxNV9FWEVDX0JTRDoKPiA+ICsgICAgICAg ICBlbmdpbmVzX3RocmVzaG9sZFtSRU5ERVJfQ0xBU1NdLnRpbWVvdXRfdXMgPSAwOwo+ID4gKwkg ZW5naW5lc190aHJlc2hvbGRbVklERU9fREVDT0RFX0NMQVNTXS50aW1lb3V0X3VzID0gdGhyZXNo b2xkOwo+ID4gKwkgZW5naW5lc190aHJlc2hvbGRbVklERU9fRU5IQU5DRU1FTlRfQ0xBU1NdLnRp bWVvdXRfdXMgPSAwOwo+ID4gKwkgZW5naW5lc190aHJlc2hvbGRbQ09QWV9FTkdJTkVfQ0xBU1Nd LnRpbWVvdXRfdXMgPSAwOwo+ID4gKyAgICAgICAgIGJyZWFrOwo+ID4gKyAgICBjYXNlIEk5MTVf RVhFQ19WRUJPWDoKPiA+ICsgICAgICAgICBlbmdpbmVzX3RocmVzaG9sZFtSRU5ERVJfQ0xBU1Nd LnRpbWVvdXRfdXMgPSAwOwo+ID4gKwkgZW5naW5lc190aHJlc2hvbGRbVklERU9fREVDT0RFX0NM QVNTXS50aW1lb3V0X3VzID0gMDsKPiA+ICsgICAgICAgICBlbmdpbmVzX3RocmVzaG9sZFtWSURF T19FTkhBTkNFTUVOVF9DTEFTU10udGltZW91dF91cyA9Cj4gPiB0aHJlc2hvbGQ7Cj4gPiArCSBl bmdpbmVzX3RocmVzaG9sZFtDT1BZX0VOR0lORV9DTEFTU10udGltZW91dF91cyA9IDA7Cj4gPiAr ICAgICAgICAgYnJlYWs7Cj4gPiArICAgIGRlZmF1bHQ6Cj4gPiArCWVuZ2luZXNfdGhyZXNob2xk W1JFTkRFUl9DTEFTU10udGltZW91dF91cyA9IDA7Cj4gPiArCWVuZ2luZXNfdGhyZXNob2xkW1ZJ REVPX0RFQ09ERV9DTEFTU10udGltZW91dF91cyA9IDA7Cj4gPiArCWVuZ2luZXNfdGhyZXNob2xk W1ZJREVPX0VOSEFOQ0VNRU5UX0NMQVNTXS50aW1lb3V0X3VzID0gMDsKPiA+ICsJZW5naW5lc190 aHJlc2hvbGRbQ09QWV9FTkdJTkVfQ0xBU1NdLnRpbWVvdXRfdXMgPSAwOwo+IAo+IE5vdCBzdXJl IGFib3V0IGNsZWFyaW5nIGV2ZXJ5dGhpbmcgaGVyZSwgd2Ugc2hvdWxkIGF0IGxlYXN0IGxvZyAK PiBzb21ldGhpbmcgdG8gc2F5IHdlIGdvdCBpbiBhbiB1bndhbnRlZCBzaXR1YXRpb24uCj4gCj4g bml0OiBiaXQgb2YgYSB3ZWlyZCBpbmRlbnQgaW4gdGhpcyBibG9jay4KCllvdSdyZSByaWdodCwg d2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0byBjbGVhciBldmVyeXRoaW5nIGluIHRoZSBkZWZhdWx0 CmNhc2UuIEkganVzdCByZS1yYW4gdGhlIHRlc3RzLiBJIGluaXRpYWxseSBoYWQgaXQgYXMgYSBw cmVjYXV0aW9uIGJ1dAptaXNzZWQgdG8gcmV0ZXN0L3JlbW92ZS4uLgoKPiAKPiA+ICsgICAgICAg IGJyZWFrOwo+ID4gKyAgICB9Cj4gPiArCWdlbV9jb250ZXh0X3NldF9wYXJhbShmZCwgJmFyZyk7 Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIHNlbmRfY2FuYXJ5KHVpbnQzMl90IGZkLCB1 aW50MzJfdCBjdHhfaWQsIHVuc2lnbmVkCj4gPiBleGVjX2lkLCB1aW50MzJfdCB0YXJnZXQsIHVp bnQzMl90IG9mZnNldCwgdWludDMyX3QgKmhhbmRsZSwKPiA+IHVpbnQ2NF90IHRpbWVvdXQpCj4g Cj4gU2hvdWxkIGJlIHBvc3NpYmxlIHRvIHVzZSBnZW1fdGVzdF9lbmdpbmUoKTsKCk9rLCBsZXQg bWUgdGhpbmsgYWJvdXQgaXQuCgo+IAo+ID4gK3sKPiA+ICsgICAgc3RydWN0IGRybV9pOTE1X2dl bV9leGVjX29iamVjdDIgb2JqWzJdOwo+ID4gKyAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9j YXRpb25fZW50cnkgcmVsb2M7Cj4gPiArICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZl cjIgZXhlY2J1ZjsKPiA+ICsgICAgaWd0X3NwaW5fdCAqc3BpbiA9IE5VTEw7Cj4gPiArCj4gPiAr ICAgIGNvbnN0IHVpbnQzMl90IGJiZSA9IE1JX0JBVENIX0JVRkZFUl9FTkQ7Cj4gPiArICAgIGlu dCBpID0gMDsKPiA+ICsgICAgaW50IGZlbmNlOwo+ID4gKwo+ID4gKyAgICBnZW1fcXVpZXNjZW50 X2dwdShmZCk7Cj4gPiArCj4gPiArICAgIG1lbXNldCgmZXhlY2J1ZiwgMCwgc2l6ZW9mKGV4ZWNi dWYpKTsKPiA+ICsgICAgbWVtc2V0KCZvYmosIDAsIHNpemVvZihvYmopKTsKPiA+ICsgICAgbWVt c2V0KCZyZWxvYywgMCwgc2l6ZW9mKHJlbG9jKSk7Cj4gPiArCj4gPiArICAgIGV4ZWNidWYuYnVm ZmVyc19wdHIgPSB0b191c2VyX3BvaW50ZXIob2JqKTsKPiA+ICsKPiA+ICsgICAgZXhlY2J1Zi5i dWZmZXJfY291bnQgPSAyOwo+ID4gKyAgICBleGVjYnVmLmZsYWdzID0gZXhlY19pZCB8IExPQ0FM X0VYRUNfRkVOQ0VfT1VUOwo+ID4gKwo+ID4gKyAgICBvYmpbMF0uaGFuZGxlID0gdGFyZ2V0Owo+ ID4gKyAgICBvYmpbMV0uaGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgNDA5Nik7Cj4gPiArCj4gPiAr ICAgIG9ialsxXS5yZWxvY2F0aW9uX2NvdW50ID0gMTsKPiA+ICsgICAgb2JqWzFdLnJlbG9jc19w dHIgPSB0b191c2VyX3BvaW50ZXIoJnJlbG9jKTsKPiA+ICsKPiA+ICsgICAgcmVsb2MudGFyZ2V0 X2hhbmRsZSA9IG9ialswXS5oYW5kbGU7Cj4gPiArICAgIHJlbG9jLnJlYWRfZG9tYWlucyA9IEk5 MTVfR0VNX0RPTUFJTl9DT01NQU5EOwo+ID4gKyAgICByZWxvYy53cml0ZV9kb21haW4gPSBJOTE1 X0dFTV9ET01BSU5fQ09NTUFORDsKPiA+ICsgICAgcmVsb2MuZGVsdGEgPSBvZmZzZXQgKiBzaXpl b2YodWludDMyX3QpOwo+ID4gKwo+ID4gKyAgICByZWxvYy5vZmZzZXQgPSBpICogc2l6ZW9mKHVp bnQzMl90KTsKPiA+ICsgICAgZ2VtX3dyaXRlKGZkLCBvYmpbMV0uaGFuZGxlLCAwLCAmYmJlLCBz aXplb2YoYmJlKSk7Cj4gPiArCj4gPiArICAgIF9fc3luY19zeW5jaHJvbml6ZSgpOwo+ID4gKwo+ ID4gKyAgICBpZiAoaGFuZGxlKSB7Cj4gPiArICAgICAgICAqaGFuZGxlID0gb2JqWzFdLmhhbmRs ZTsKPiA+ICsgICAgICAgIHJldHVybjsKPiA+ICsgICAgfQo+ID4gKyAgICBnZW1fc3luYyhmZCwg b2JqWzFdLmhhbmRsZSk7Cj4gPiArICAgIGV4ZWNidWYucnN2ZDEgPSBjdHhfaWQ7Cj4gPiArICAg IGV4ZWNidWYucnN2ZDIgPSAtMTsKPiA+ICsKPiA+ICsgICAgc3BpbiA9IGlndF9zcGluX2JhdGNo X25ldyhmZCwgLmRlcGVuZGVuY3kgPSBvYmpbMF0uaGFuZGxlKTsKPiA+ICsgICAgaWd0X3NwaW5f YmF0Y2hfc2V0X3RpbWVvdXQoc3BpbiwgdGltZW91dCk7Cj4gPiArICAgIGlndF9hc3NlcnQoZ2Vt X2JvX2J1c3koZmQsIG9ialswXS5oYW5kbGUpKTsKPiA+ICsKPiA+ICsgICAgZ2VtX2V4ZWNidWZf d3IoZmQsICZleGVjYnVmKTsKPiA+ICsgICAgaWd0X3NwaW5fYmF0Y2hfZnJlZShmZCwgc3Bpbik7 Cj4gPiArCj4gPiArICAgIGZlbmNlID0gZXhlY2J1Zi5yc3ZkMiA+PiAzMjsKPiA+ICsKPiA+ICsj aWYgMAo+ID4gKyAgICBpZ3RfaW5mbygiZmVuY2U6JWQsIGZlbmNlIHN0YXR1cyA6ICVkIEVJTzog JWQKPiA+IGN0eF9pZDolZFxuIixmZW5jZSwgc3luY19mZW5jZV9zdGF0dXMoZmVuY2UpLC1FSU8s IGN0eF9pZCk7Cj4gPiArI2VuZGlmCj4gPiArCgpBbnkgaWRlYXMgd2h5IHdvdWxkIHRoZSBmZW5j ZSB3b3VsZG4ndCBzaWduYWwgY29ycmVjdGx5IChpLmUuLCBFSU8pCmFmdGVyIHJlc2V0dGluZz8g IEkgbmVlZCBoZWxwIHdpdGggdGhpcy4uLgoKPiA+ICsgICAgY2xvc2UoZmVuY2UpOwo+ID4gKwo+ ID4gKyAgICBnZW1fY2xvc2UoZmQsIG9ialsxXS5oYW5kbGUpOwo+ID4gKyAgICBnZW1fcXVpZXNj ZW50X2dwdShmZCk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB1aW50MzJfdCBjcmVhdGVfY3R4 X3dpdGhfcHJpb3JpdHkoaW50IGZkLCBpbnQgY3R4X3ByaW8pCj4gPiArewo+ID4gKwl1aW50MzJf dCBjdHggPSBnZW1fY29udGV4dF9jcmVhdGUoZmQpOwo+ID4gKwo+ID4gKwlzd2l0Y2ggKGN0eF9w cmlvKSB7Cj4gPiArCWNhc2UgSElHSDoKPiA+ICsJCV9fZ2VtX2NvbnRleHRfc2V0X3ByaW9yaXR5 KGZkLCBjdHgsIE1BWF9QUklPKTsKPiA+ICsJCWlndF9pbmZvKCJTZXR0aW5nIE1BWCBwcmlvcml0 eSAlZFxuIiwgY3R4X3ByaW8pOwo+ID4gKwkJYnJlYWs7Cj4gPiArCWNhc2UgTE9XOgo+ID4gKwkJ X19nZW1fY29udGV4dF9zZXRfcHJpb3JpdHkoZmQsIGN0eCwgTUlOX1BSSU8pOwo+ID4gKwkJaWd0 X2luZm8oIlNldHRpbmcgTUlOIHByaW9yaXR5ICVkXG4iLCBjdHhfcHJpbyk7Cj4gPiArCQlicmVh azsKPiA+ICsJZGVmYXVsdDoKPiA+ICsJCWlndF9pbmZvKCJJZ25vcmluZyBjb250ZXh0IHByaW9y aXR5ICVkXG4iLCBjdHhfcHJpbyk7Cj4gPiArCQlicmVhazsKPiA+ICsJfQo+ID4gKwlyZXR1cm4g Y3R4Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBiYl9mYWN0b3J5KHVpbnQzMl90IGZk LCB1aW50MzJfdCAqY3R4LCBpbnQgcHJpbywKPiA+IHVpbnQ2NF90IHRpbWVvdXQsIGludCBwaWQp Cj4gCj4gSSB3b3VsZCBzY3JhcCB0aGlzIGZ1bmN0aW9uLiBBRkFJQ1QgeW91IHVzZSBpdCBib3Ro IGZvciBzdWJtaXR0aW5nIGEgCj4gY2FuYXJ5IGJhdGNoIGFuZCBmb3IgY3JlYXRpbmcgY29udGV4 dHMuIERvIGl0IGV4cGxpY2l0bHkgaW4gdGhlIHRlc3QKPiBvciAKPiBzb21ld2hlcmUgaXQgaXMg Y2xlYXIgd2hhdCBpcyBoYXBwZW5pbmcuCgpPaywgbGV0IG1lIHRoaW5rIGFib3V0IGl0Li4uCgo+ IAo+ID4gK3sKPiA+ICsJdWludDMyX3Qgc2NyYXRjaDsKPiA+ICsJdW5zaWduZWQgaW50IG5lbmdp bmUgPSAwOwo+ID4gKwl1bnNpZ25lZCBpbnQgZW5naW5lc1sxNl07Cj4gPiArCWludCBpLCBqOwo+ ID4gKwl1bnNpZ25lZCBpbnQgZW5naW5lOwo+ID4gKwo+ID4gKwlmb3JfZWFjaF9waHlzaWNhbF9l bmdpbmUoZmQsIGVuZ2luZSkKPiA+ICsJCWVuZ2luZXNbbmVuZ2luZSsrXSA9IGVuZ2luZTsKPiA+ ICsKPiA+ICsJaWd0X3JlcXVpcmUobmVuZ2luZSk7Cj4gPiArCj4gPiArCWZvciAoaSA9IDA7IGkg PCBuZW5naW5lOyBpKyspIHsKPiA+ICsJCXNjcmF0Y2ggPSBnZW1fY3JlYXRlKGZkLCA0MDk2KTsK PiA+ICsJCXB0aHJlYWRfbXV0ZXhfbG9jaygmbGlzdF9sb2NrKTsKPiA+ICsKPiA+ICsJCWlmIChw cmlvID09IEhJR0gpCj4gPiArCQkJY3JlYXRlX2N0eF93aXRoX3ByaW9yaXR5KGZkLCBISUdIKTsK PiAKPiBtaXNzaW5nICJjdHhbal0gPSIgICBeXl4gYW5kIC4uLgoKWWVhaCwgdGhpcyBkb2Vzbid0 IGxvb2sgcmlnaHQuLi4KCj4gCj4gPiArCQllbHNlIGlmIChwcmlvID09IExPVykKPiA+ICsJCQlj cmVhdGVfY3R4X3dpdGhfcHJpb3JpdHkoZmQsIExPVyk7Cj4gCj4gLi4uIGhlcmUJCV5eXiA/CgpZ ZWFoLCB0aGlzIGRvZXNuJ3QgbG9vayByaWdodC4uLgoKPiAKPiA+ICsJCWVsc2UKPiA+ICsJCQlj dHhbal0gPSBnZW1fY29udGV4dF9jcmVhdGUoZmQpOwo+ID4gKwo+ID4gKwkJc2VuZF9jYW5hcnko ZmQsIGN0eFtqXSwgZW5naW5lc1tpXSwgc2NyYXRjaCwgMCwgTlVMTCwKPiA+IHRpbWVvdXQpOwo+ ID4gKwkJZ2VtX2Nsb3NlKGZkLCBzY3JhdGNoKTsKPiA+ICsJCXB0aHJlYWRfbXV0ZXhfdW5sb2Nr KCZsaXN0X2xvY2spOwo+ID4gKwkJaisrOwo+ID4gKwl9Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRp YyB2b2lkIGluamVjdF9oYW5nKHVpbnQzMl90IGZkLCB1bnNpZ25lZCByaW5nLCB1aW50MzJfdAo+ ID4gY3R4X2lkLCAgdW5zaWduZWQgZmxhZ3MpCj4gPiArewo+ID4gKwlpZ3RfaGFuZ190IGhhbmc7 Cj4gPiArCWhhbmcgPSBpZ3RfaGFuZ19jdHgoZmQsIGN0eF9pZCwgcmluZywgZmxhZ3MpOwo+ID4g KwlnZW1fc3luYyhmZCwgaGFuZy5zcGluLT5oYW5kbGUpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0 aWMgdm9pZCBncHVfd2F0Y2hkb2dfbG9uZ19iYXRjaF8yX2NvbnRleHRzKGludCBmZCkKPiA+ICt7 Cj4gPiArCXVuc2lnbmVkIGZsYWdzID0gSEFOR19BTExPV19DQVBUVVJFOwo+ID4gKwlpbnQgaSA9 IDAsIGo9MDsKPiA+ICsKPiA+ICsJaWd0X2ZvcmsoY2hpbGQsIDEpIHsKPiAKPiBXaHkgZG8geW91 IHdhbnQgdG8gZG8gdGhpcyBmcm9tIHR3byBzZXBhcmF0ZSBwcm9jZXNzZXM/CgpVcnN1bGluIHN1 Z2dlc3RlZCAyIHNlcGFyYXRlIGNvbnRleHRzLCBib3RoIHdpdGggbG9uZyBiYXRjaGVzLCB0aGVu IGN0eAoxIHdvdWxkIGV4ZWN1dGUgdW50aWwgY29tcGxldGlvbiBhbmQgY3R4MiB3b3VsZCBnZXQg Y2FuY2VsZWQgc29tZSB0aW1lCmFmdGVyIHRoZW4gcmVzZXR0aW5nIGl0IHdpdGggZ3B1IHdhdGNo ZG9nLiBJIHRob3VnaHQgSSBuZWVkZWQgMgpzZXBhcmF0ZSB0aHJlYWRzIGFzIG9wcG9zZSB0byBo YXZpbmcgdGhlbSBnZXR0aW5nIGxhdW5jaGVkIGZyb20gdGhlCnNhbWUgdGhyZWFkIGJ1dCBtYXli ZSBJIGFtIG92ZXIgY29tcGxpY2F0aW5nIGl0Li4uIAoKPiAKPiA+ICsJCS8qIENoaWxkIHByb2Nl c3MgKi8KPiA+ICsJCXVpbnQzMl90IGN0eFs1XTsKPiA+ICsJCWNvbnN0IHVpbnQ2NF90IGJhdGNo X3RpbWVvdXRfbXMgPSB0aW1lb3V0XzEwMG1zKjM7Cj4gPiArCQltZW1zZXQoJmN0eCwgMCwgc2l6 ZW9mKGN0eCkpOwo+ID4gKwkJYmJfZmFjdG9yeShmZCwgY3R4LCAtMSwgYmF0Y2hfdGltZW91dF9t cywKPiA+IHN5c2NhbGwoU1lTX2dldHRpZCkpOwo+ID4gKwo+ID4gKwkJc2xlZXAoNik7Cj4gPiAr Cj4gPiArCSAgICAJY29udGV4dF9zZXRfd2F0Y2hkb2coZmQsIDEsIDEsIFdBVENIRE9HX1RIUkVT SE9MRCk7Cj4gPiArCSAgICAJY2xlYXJfZXJyb3Jfc3RhdGUoZmQpOwo+ID4gKwo+ID4gKwkJLyog RW5naW5lIElEOiBSQ1MwLCBDb250ZXh0IElEOiAxICovCj4gPiArCSAgIAlpbmplY3RfaGFuZyhm ZCwgMSwgMSwgZmxhZ3MpOwo+ID4gKwo+ID4gKwkJZm9yIChpID0gMDsgaSA8NTsgaSsrKSB7Cj4g PiArCQkJcHJpbnRmKCJjdHhfY2hpbGQ6ICV1IGN0eF9jbnQ6ICVkCj4gPiB0aWQ6JWRcbiIsY3R4 W2ldLCBzeXNjYWxsKFNZU19nZXR0aWQpKTsKPiA+ICsJCQkvL2dlbV9jb250ZXh0X2Rlc3Ryb3ko ZmQsIGN0eFtpXSk7Cj4gPiArCQl9Cj4gPiArCX0KPiA+ICsKPiA+ICsJewo+ID4gKwkJLyogUGFy ZW50IHByb2Nlc3MgKi8KPiA+ICsJCXVpbnQzMl90IGN0eFs1XTsKPiA+ICsJCWNvbnN0IHVpbnQ2 NF90IGJhdGNoX3RpbWVvdXRfbXMgPSB0aW1lb3V0XzEwMG1zKjE7Cj4gPiArCQltZW1zZXQoJmN0 eCwgMCwgc2l6ZW9mKGN0eCkpOwo+ID4gKwkJcHJpbnRmKCIlcyAlZCAsIHRpZDogJWRcbiIsIF9f RlVOQ1RJT05fXyxfX0xJTkVfXywKPiA+IHN5c2NhbGwoU1lTX2dldHRpZCkpOwo+ID4gKwkJCj4g PiArCQliYl9mYWN0b3J5KGZkLCBjdHgsIC0xLCBiYXRjaF90aW1lb3V0X21zLAo+ID4gc3lzY2Fs bChTWVNfZ2V0dGlkKSk7Cj4gPiArCj4gPiArCQlzbGVlcCg2KTsKPiA+ICsKPiA+ICsJICAgIAlj b250ZXh0X3NldF93YXRjaGRvZyhmZCwgNCwgMTAsCj4gPiBXQVRDSERPR19USFJFU0hPTEQpOwo+ ID4gKwkgICAgCWNsZWFyX2Vycm9yX3N0YXRlKGZkKTsKPiA+ICsKPiA+ICsgICAgICAgIAkvKiBF bmdpbmUgSUQ6IFZFQ1MwLCBDb250ZXh0IElEOiAxMCAqLwo+ID4gKyAgIAkJaW5qZWN0X2hhbmco ZmQsIDQsIDEwLCBmbGFncyk7Cj4gCj4gV2h5IGhhcmRjb2RpbmcgdGhlIGNvbnRleHQgaWRzPyBZ b3UgY2FuIHVzZSB0aGUgb25lcyBjb21pbmcgZnJvbSAKPiBnZW1fY29udGV4dF9jcmVhdGUoKTsK ClJpZ2h0LCB0aGlzIHN0aWxsIG5lZWRzIHNvbWUgbW9yZSB3b3JrLi4uLgoKPiAKPiA+ICsKPiA+ ICsJCWZvciAoaSA9IDA7IGkgPDU7IGkrKykgewo+ID4gKwkJCWlndF9pbmZvKCJjdHhfZGFkOiAl dSBjdHhfY250OiAlZCB0aWQ6JWQKPiA+IFxuIixjdHhbaV0sIGksIHN5c2NhbGwoU1lTX2dldHRp ZCkpOwo+ID4gKwkJCS8vZ2VtX2NvbnRleHRfZGVzdHJveShmZCwgY3R4W2ldKTsKPiA+ICsJCX0K PiA+ICsJfQo+ID4gKwo+ID4gKwlpZ3Rfd2FpdGNoaWxkcmVuKCk7Cj4gPiArfQo+ID4gKwo+ID4g K3N0YXRpYyB2b2lkIGdwdV93YXRjaG9kZ19oYW5nX2xvbmdfYmF0Y2hfc2luZ2xlX2VuZ2luZShp bnQgZmQsCj4gPiB1bnNpZ25lZCBlbmdpbmVfaWQsIGludCBuZW5naW5lKQo+ID4gK3sKPiA+ICsJ dWludDMyX3QgKmN0eDsKPiA+ICsJaW50IGk7Cj4gPiArCXVuc2lnbmVkIGZsYWdzID0gSEFOR19B TExPV19DQVBUVVJFOwo+ID4gKwljb25zdCB1aW50NjRfdCBiYXRjaF90aW1lb3V0X21zID0gdGlt ZW91dF8xMDBtcyo0Owo+ID4gKwo+ID4gKwlpZ3RfcmVxdWlyZShuZW5naW5lKTsKPiA+ICsKPiA+ ICsJY3R4ID0gKHVpbnQzMl90ICopbWFsbG9jKHNpemVvZih1aW50MzJfdCkqbmVuZ2luZSk7Cj4g PiArCj4gPiArCWlmICghY3R4KSB7Cj4gPiArCQlpZ3RfaW5mbygiT3V0IG9mIG1lbW9yeVxuIik7 Cj4gPiArCQlleGl0KDEpOwo+ID4gKwl9Cj4gPiArCj4gPiArCWJiX2ZhY3RvcnkoZmQsIGN0eCwg LTEsIGJhdGNoX3RpbWVvdXRfbXMsIHN5c2NhbGwoU1lTX2dldHRpZCkpOwo+IAo+IFRoZSBjYWxs IHRvIGJiX2ZhY3Rvcnkgc2VuZHMgYSBjYW5hcnkgYmF0Y2ggdG8gZWFjaCBlbmdpbmUsIGl0IHdv dWxkIAo+IG1ha2UgbW9yZSBzZW5zZSB0byBkbyB0aGF0IGFmdGVyIHRoZSBoYW5nIHRyaWdnZXJl ZC4KCk9rLCBJIHRoaW5rIEkgbmVlZCB0byBzZXBhcmF0ZSB0aGUgY29udGV4dCBjcmVhdGlvbiBh bmQgdGhlIGNhbmFyeQpzdWJtaXNzaW9uIGFuZCB0aGVuIGRvIHdoYXQgeW91J3JlIHN1Z2dlc3Rp bmcuLi4KCj4gCj4gPiArCQo+ID4gKwlpZiAoZW5naW5lX2lkID09IDEpIHsKPiAKPiBOb3Qgc3Vy ZSB3aGF0IHRoaXMgaWZ7fWVsc2UgYmxvY2sgaXMgZm9yLCBjYW4geW91IGFkZCBhIGNvbW1lbnQ/ CgpUaGlzIGFsbG93cyB0byBydW4gYSBiYXRjaCBzZXBhcmF0ZWx5IHBlciBlbmdpbmUgd2hlbiBj YWxsaW5nICJncHUtCndhdGNoZG9nLWxvbmctYmF0Y2gtcmVuZGVyIiBzdWJ0ZXN0IGZvciBleGFt cGxlLiBJIGZvdW5kIHRoaXMgdG8gYmUKdHJ1ZSByY3MwID0gMSwgYnNkMSA9IDgxOTQsIGJzZDIg PSAxNjM4NiwgdmVjczAgPSA1LgoKPiAKPiA+ICsJCWNvbnRleHRfc2V0X3dhdGNoZG9nKGZkLCBl bmdpbmVfaWQsIDEsCj4gPiBXQVRDSERPR19USFJFU0hPTEQpOyA+ICsJCWNsZWFyX2Vycm9yX3N0 YXRlKGZkKTsKPiA+ICsJCWluamVjdF9oYW5nKGZkLCBlbmdpbmVfaWQsIDEsIGZsYWdzKTsKPiA+ ICsJfSBlbHNlIGlmIChlbmdpbmVfaWQgPT0gODE5NCkgewo+ID4gKwkJY29udGV4dF9zZXRfd2F0 Y2hkb2coZmQsIGVuZ2luZV9pZCwgMiwKPiA+IFdBVENIRE9HX1RIUkVTSE9MRCk7Cj4gPiArCQlj bGVhcl9lcnJvcl9zdGF0ZShmZCk7Cj4gPiArCQlpbmplY3RfaGFuZyhmZCwgZW5naW5lX2lkLCAy LCBmbGFncyk7Cj4gPiArCX0gZWxzZSBpZiAoZW5naW5lX2lkID09IDE2Mzg2KSB7Cj4gPiArCQlj b250ZXh0X3NldF93YXRjaGRvZyhmZCwgZW5naW5lX2lkLCAzLAo+ID4gV0FUQ0hET0dfVEhSRVNI T0xEKTsKPiA+ICsJCWNsZWFyX2Vycm9yX3N0YXRlKGZkKTsKPiA+ICsJCWluamVjdF9oYW5nKGZk LCBlbmdpbmVfaWQsIDMsIGZsYWdzKTsKPiA+ICsJfSBlbHNlIGlmIChlbmdpbmVfaWQgPT0gNCkg ewo+ID4gKwkJY29udGV4dF9zZXRfd2F0Y2hkb2coZmQsIGVuZ2luZV9pZCwgNSwKPiA+IFdBVENI RE9HX1RIUkVTSE9MRCk7Cj4gPiArCQljbGVhcl9lcnJvcl9zdGF0ZShmZCk7Cj4gPiArCQlpbmpl Y3RfaGFuZyhmZCwgZW5naW5lX2lkLCA1LCBmbGFncyk7Cj4gPiArCX0KPiAKPiBjb250ZXh0IGlk cyBoYXJkY29kZWQgYWJvdmUgYXMgd2VsbC4KCkJlY2F1c2Ugd2hlbiBJIGNyZWF0ZSB0aGUgY29u dGV4dHMgSSBsb29wIHRocm91Z2ggYWxsIHRoZSBlbmdpbmVzIGFuZAp0aGVuIEkgcGFpcmVkIHRo ZSBjeHQgaWQgd2l0aCB0aGUgYmF0Y2ggYnVmZmVyIGJlaW5nIHN1Ym1taXRlZApleGVjYnVmLnJz dmQxID0gY3R4X2lkOyBMYXRlciBvbiB3aGVuIEkgc2V0IHRoZSB3YXRjaGRvZygpIEkgcGFzcyB0 aGUKZW5naW5lX2lkIGFuZCB0aGVuIEkgaW5qZWN0IHRoZSBoYW5nLCB0aGUgZXhhY3QgY3R4X2lk IHRoYXQgaXMgc2V0dGluZwp0aGUgd2F0Y2hkb2cgdGltZW91dCBhbmQgc3VibWl0dGluZyB0aGUg YmF0Y2ggd29yayBtdXN0IG1hdGNoLgoKPiAKPiA+ICsKPiA+ICsJZm9yIChpID0gMDsgaSA8bmVu Z2luZTsgaSsrKQo+ID4gKwkJZ2VtX2NvbnRleHRfZGVzdHJveShmZCwgY3R4W2ldKTsKPiA+ICsJ ZnJlZShjdHgpOwo+ID4gK30KPiA+ICtzdGF0aWMgdm9pZCBub19ncHVfaGFuZ19sb25nX2JhdGNo X2FsbF9lbmdpbmVzKGludCBmZCwgaW50Cj4gPiBuZW5naW5lLCBpbnQgcHJpbykKPiAKPiBXb3Vs ZG4ndCB0aGlzIHRlc3QgY2FzZSBiZSBjb3ZlcmVkIGJ5IHRoZSBvdGhlciB0ZXN0cyB0aGF0IGRv IG5vcm1hbCAKPiBzdWJtaXNzaW9ucz8KCldlbGwsIHRoaXMgdGVzdCBqdXN0IGNyZWF0ZXMgdGhl IGJhdGNoZXMgYW5kIGV4ZWN1dGVzIHRoZW0gdW50aWwKY29tcGxldGlvbiB3aXRob3V0IHNldHRp bmcgdGhlIGdwdSB3YXRjaGRvZyBub3IgaW5qZWN0aW5nIGhhbmcuIFRoZQppZGVhIGJlaGluZCB0 aGlzIHRlc3Qgd2FzIHRvIGNyZWF0ZSBhIGxvbmcgYmF0Y2ggYW5kIGxldCBpdCBleGVjdXRlLgoK PiAKPiA+ICt7Cj4gPiArCXVpbnQzMl90ICpjdHg7Cj4gPiArCWludCBpOwo+ID4gKwljb25zdCB1 aW50NjRfdCBiYXRjaF90aW1lb3V0X21zID0gdGltZW91dF8xMDBtcyo0Owo+ID4gKwo+ID4gKwlj dHggPSAodWludDMyX3QgKiltYWxsb2Moc2l6ZW9mKHVpbnQzMl90KSpuZW5naW5lKTsKPiA+ICsK PiA+ICsJaWYgKCFjdHgpIHsKPiA+ICsJCXByaW50ZigiT3V0IG9mIG1lbW9yeVxuIik7Cj4gPiAr CQlleGl0KDEpOwo+ID4gKwl9Cj4gPiArCj4gPiArCWJiX2ZhY3RvcnkoZmQsIGN0eCwgcHJpbywg YmF0Y2hfdGltZW91dF9tcywKPiA+IHN5c2NhbGwoU1lTX2dldHRpZCkpOwo+ID4gKwo+ID4gKwlm b3IgKGkgPSAwOyBpIDxuZW5naW5lOyBpKyspCj4gPiArCQlnZW1fY29udGV4dF9kZXN0cm95KGZk LCBjdHhbaV0pOwo+ID4gKwo+ID4gKwlmcmVlKGN0eCk7Cj4gPiArfQo+ID4gKwo+ID4gK2lndF9t YWluCj4gPiArewo+ID4gKwlpbnQgZmQ7Cj4gPiArCXVuc2lnbmVkIGludCBuZW5naW5lID0gMDsK PiA+ICsJdW5zaWduZWQgaW50IGVuZ2luZTsKPiA+ICsJdW5zaWduZWQgaW50IGVuZ2luZXNbMTZd Owo+ID4gKwo+ID4gKwlpZ3Rfc2tpcF9vbl9zaW11bGF0aW9uKCk7Cj4gPiArCj4gPiArCWlndF9m aXh0dXJlIHsKPiA+ICsJCWZkID0gZHJtX29wZW5fZHJpdmVyKERSSVZFUl9JTlRFTCk7Cj4gPiAr CQlpZ3RfcmVxdWlyZV9nZW0oZmQpOwo+ID4gKwo+ID4gKwkJZm9yX2VhY2hfcGh5c2ljYWxfZW5n aW5lKGZkLCBlbmdpbmUpCj4gPiArCQkJZW5naW5lc1tuZW5naW5lKytdID0gZW5naW5lOwo+ID4g KwkJaWd0X3JlcXVpcmUobmVuZ2luZSk7Cj4gCj4gSSB0aGluayB0aGlzIHRlc3Qgc2hvdWxkIHJ1 biB3aXRoIHRoZSBoYW5nIGRldGVjdG9yIGFsd2F5cyBvbi4KCk9rLCBsZXQgbWUgcGluZyB5b3Ug b24gdGhpcyBiZWNhdXNlIEkgZG9uJ3QgdW5kZXJzdGFuZCBmdWxseSB0aGUgaGFuZwpkZXRlY3Rv ciBtZWNoYW5pc20uLi4KCj4gCj4gPiArCX0KPiA+ICsKPiA+ICsJaWd0X3N1YnRlc3RfZ3JvdXAg ewo+IAo+IEkgdGhpbmsgd2UgYXJlIG1pc3NpbmcgYSB0ZXN0IHdoZXJlIHdlIHNldCBtb3JlIHRo YW4gb25lIGVuZ2luZSdzIAo+IHRocmVzaG9sZCBhbmQgY2hlY2sgdGhhdCB0aGUgd2F0aGNkb2cg b25seSBhcHBsaWVzIHRvIHRoZSBlbmdpbmUgaXQKPiBnb3QgCj4gc2V0IGZvci4gVGhlcmUgaXMg YWxzbyBhIGxvdyBoYW5naW5nIGZydWl0IGZvciBpbnZhbGlkIHBhcmFtZXRlcnMKPiBpbnRvIAo+ IHRoZSBJT0NUTC4KCk9rLCBJJ3ZlIHRlc3RlZCB0aGUgZmlyc3QgY2FzZSBhbHJlYWR5LCBJIGNh biBhZGQgaXQsIGFuZCBJIGNhbiBhZGQKY2FzZSAyIGFzIHdlbGwuCgpSZWdhcmRzLApDYXJsb3MK Cj4gCj4gQW50b25pbwo+IAo+ID4gKwkJaWd0X3N1YnRlc3RfZigibm8tZ3B1LXdhdGNoZG9nLWxv bmctYmF0Y2gtYWxsLWVuZ2luZXMtCj4gPiBuby1wcmlvcml0eSIpIHsKPiA+ICsJCQlpbnQgcHJp byA9IC0xOwo+ID4gKwkJCW5vX2dwdV9oYW5nX2xvbmdfYmF0Y2hfYWxsX2VuZ2luZXMoZmQsIG5l bmdpbmUsCj4gPiBwcmlvKTsKPiA+ICsJCX0KPiA+ICsKPiA+ICsJCWlndF9zdWJ0ZXN0X2YoIm5v LWdwdS13YXRjaGRvZy1sb25nLWJhdGNoLWFsbC1lbmdpbmVzLQo+ID4gbG93LXByaW9yaXR5Iikg ewo+ID4gKwkJCWludCBwcmlvID0gTE9XOwo+ID4gKwkJCW5vX2dwdV9oYW5nX2xvbmdfYmF0Y2hf YWxsX2VuZ2luZXMoZmQsIG5lbmdpbmUsCj4gPiBwcmlvKTsKPiA+ICsJCX0KPiA+ICsKPiA+ICsJ CWlndF9zdWJ0ZXN0X2YoIm5vLWdwdS13YXRjaGRvZy1sb25nLWJhdGNoLWFsbC1lbmdpbmVzLQo+ ID4gaGlnaC1wcmlvcml0eSIpIHsKPiA+ICsJCQlpbnQgcHJpbyA9IEhJR0g7Cj4gPiArCQkJbm9f Z3B1X2hhbmdfbG9uZ19iYXRjaF9hbGxfZW5naW5lcyhmZCwgbmVuZ2luZSwKPiA+IHByaW8pOwo+ ID4gKwkJfQo+ID4gKwo+ID4gKwkJZm9yIChjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2Vu Z2luZSAqZSA9Cj4gPiBpbnRlbF9leGVjdXRpb25fZW5naW5lczsgZS0+bmFtZTsgZSsrKSB7Cj4g PiArCQkJLyogbm8gc3VwcG9ydCBmb3IgZ3B1IHdhdGNoZG9nIG9uIEJMVCAqLwo+ID4gKwkJCWlm IChlLT5leGVjX2lkID09IDAgfHwgZS0+ZXhlY19pZCA9PQo+ID4gSTkxNV9FWEVDX0JMVCkKPiA+ ICsJCQkJY29udGludWU7Cj4gPiArCj4gPiArCQkJaWd0X3N1YnRlc3RfZigiZ3B1LXdhdGNoZG9n LWxvbmctYmF0Y2gtJXMiLCBlLQo+ID4gPm5hbWUpIHsKPiA+ICsJCQkJaWd0X3JlcXVpcmUoZ2Vt X3JpbmdfaGFzX3BoeXNpY2FsX2VuZ2luCj4gPiBlKGZkLCBlLT5leGVjX2lkIHwgZS0+ZmxhZ3Mp KTsKPiA+ICsJCQkJZ3B1X3dhdGNob2RnX2hhbmdfbG9uZ19iYXRjaF9zaW5nbGVfZW5nCj4gPiBp bmUoZmQsIGUtPmV4ZWNfaWQgfCBlLT5mbGFncywgbmVuZ2luZSk7Cj4gPiArCQkJfQo+ID4gKwkJ fQo+ID4gKwo+ID4gKwkJaWd0X3N1YnRlc3RfZigiZ3B1LXdhdGNoZG9nLWxvbmctYmF0Y2gtMi1j b250ZXh0cyIpIHsKPiA+ICsJCQlncHVfd2F0Y2hkb2dfbG9uZ19iYXRjaF8yX2NvbnRleHRzKGZk KTsKPiA+ICsJCX0KPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICBpZ3RfZml4dHVyZSB7Cj4gPiAr CWNsb3NlKGZkKTsKPiA+ICsgICAgfQo+ID4gK30KPiA+IGRpZmYgLS1naXQgYS90ZXN0cy9tZXNv bi5idWlsZCBiL3Rlc3RzL21lc29uLmJ1aWxkCj4gPiBpbmRleCA1MTY3YTZjLi5iMjgxYjc1IDEw MDY0NAo+ID4gLS0tIGEvdGVzdHMvbWVzb24uYnVpbGQKPiA+ICsrKyBiL3Rlc3RzL21lc29uLmJ1 aWxkCj4gPiBAQCAtMjEwLDYgKzIxMCw3IEBAIGk5MTVfcHJvZ3MgPSBbCj4gPiAgIAknZ2VtX3Vu cmVmX2FjdGl2ZV9idWZmZXJzJywKPiA+ICAgCSdnZW1fdXNlcnB0cl9ibGl0cycsCj4gPiAgIAkn Z2VtX3dhaXQnLAo+ID4gKyAgICAgICAgJ2dlbV93YXRjaGRvZycsCj4gPiAgIAknZ2VtX3dvcmth cm91bmRzJywKPiA+ICAgCSdnZW1fd3JpdGVfcmVhZF9yaW5nX3N3aXRjaCcsCj4gPiAgIAknaTkx NV9mYl90aWxpbmcnLAo+ID4gCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1k ZXY=