From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3DF95896F7 for ; Wed, 24 Apr 2019 02:32:31 +0000 (UTC) Message-ID: From: Carlos Santa Date: Tue, 23 Apr 2019 19:31:45 -0700 In-Reply-To: References: <20190423000554.32274-1-carlos.santa@intel.com> Mime-Version: 1.0 Subject: Re: [igt-dev] [RFC v3] 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: Tvrtko Ursulin , igt-dev@lists.freedesktop.org Cc: Ursulin Tvrtko List-ID: T24gVHVlLCAyMDE5LTA0LTIzIGF0IDE3OjI1ICswMTAwLCBUdnJ0a28gVXJzdWxpbiB3cm90ZToK PiBIaSwKPiAKPiBIb3cgaXMgdGhlIHRlc3QgZG9pbmcgYWdhaW5zdCB0aGUgY29kZSBpbiBwcm9n cmVzcz8gQW55IGlzc3VlcyAKPiBkaXNjb3ZlcmVkIGV0Yz8KClRlc3QJCQkJCVJlc3VsdAoKc2lu Z2xlLWVuZ2luZS1yZXNldC1yY3MwCQlQQVNTCnNpbmdsZS1lbmdpbmUtcmVzZXQtdmNzMAkJUEFT UwpzaW5nbGUtZW5naW5lLXJlc2V0LXZjczEJCVBBU1MKc2luZ2xlLWVuZ2luZS1yZXNldC12ZWNz MAkJUEFTUwpjdHgxLWV4ZWN1dGUtY3R4Mi1leGVjdXRlCQlQQVNTCmN0eDEtZXhlY3V0ZS1jdHgy LXJlc2V0CQkJUEFTUwpjdHgxLXJlc2V0LWN0eDItcmVzZXQJCQlQQVNTCmN0eDItaGlnaC1wcmlv LXJlc2V0LWN0eDItbG93LWV4ZWN1dGUJUEFTUwpjdHgyLWxvdy1wcmlvLXJlc2V0LWN0eDItaGln aC1leGVjdXRlICAgRkFJTAoKVGhlcmUgc2VlbXMgdG8gYmUgYSBwcm9ibGVtIHdpdGggcHJlZW1w dGlvbiBhcyBleHBlY3RlZCwgdGhlIHRlc3QKc2ltcGxlIGdldHMgc3R1Y2ssIGFuZCB0aGUgZGVm YXVsdCByZXNldCB0aGVuIGtpY2tzIGluLiBJIGFsc28gcmVtb3ZlZAp0aGUgZHVtbXkgc2xlZXAo MSkgYXMgeW91IHN1Z2dlc3RlZCwgdGhpcyBzdGlsbCB3b3JrcyBhcyB0aGUgb3V0cHV0CmFib3Zl LgoKQWJvdXQgdGhlIHRlc3RzCgoxLiBUaGUgInNpbmdsZS1lbmdpbmUiIHRlc3RzIGJhc2ljYWxs eSByZXNldHMgb25lIGVuZ2luZSwgSSB1c2UKdGhlICJmb3JfZWFjaF9lbmdpbmVfY2xhc3NfaW5z dGFuY2UiIGxvb3BlciB0byBzaW1wbGUgaXRlcmF0ZSBvdmVyIHRoZQpkaWZmZXJlbnQgZW5naW5l cy4gR2l2ZW4gdGhlIG9wdGlvbiB0byBzcGVjaWZ5IHdoaWNoIGVuZ2luZSB0byByZXNldCBpcwpu b3QgYSBoYXJkIHJlcXVpcmVtZW50LCBJIGNvdWxkIHNpbXBseSBsb29wIHRocm91Z2ggYWxsIG9m IHRoZW0gYXQKb25jZS4KCkFsc28sIG9uIHRoaXMgdGVzdCBJIHRvb2sgQW50b25pbydzIHN1Z2dl c3Rpb24gd2hlcmU6CgogICAgICAgIC0gU3VibWl0IHdvcmsgZnJvbSBjb250ZXh0IEEKICAgICAg ICAtIFNldCBhIG5vbiAwIHRocmVzaG9sZCBvbiBjb250ZXh0IEEKICAgICAgICAtIFN1Ym1pdCBt b3JlIHdvcmsgb24gY29udGV4dCBBCgpBbmQgZXhwZWN0IHRoZSB3b3JrIGJlZm9yZSB5b3Ugc2V0 IHRoZSB0aHJlc2hvbGQgaXMgbm90IHJlc2V0IGFuZCB3aGF0IAp3YXMgc2VudCBhZnRlciBpcy4K ClRoZW4gSSBhc3NlcnQgaWYgdGhlICJiYXRjaF9hY3RpdmUiIGRvZXNuJ3QgbWF0Y2ggbXkgb3du IGNvdW50ZXIgYWZ0ZXIKZWFjaCByZXNldDoKCglpZ3RfYXNzZXJ0X2VxKHJzLmJhdGNoX2FjdGl2 ZSwgYWN0aXZlX2NvdW50KTsKCgoyLiBBYm91dCB0aGUgImxvbmdfYmF0Y2hfMl9jb250ZXh0cyIg dGVzdCBjYXNlLiBUaGUgaWRlYSBoZXJlIGlzIHRoYXQKdGhlIG91dGVyIGxvb3BlciBpcyAiY3R4 MSIgYW5kIHRoZSBpbm5lciBsb29wZXIgaXMgImN0eDIiLiBUaGUgb3V0ZXIKbG9vcCByYW5kb21u bHkgZ2VuZXJhdGVzIGVuZ2luZSBpZCBhbmQgdGhlIGlubmVyIGxvb3Agc2ltcGx5IGluY3JlbWVu dHMKZW5naW5lcyAxIHRocm91Z2ggNCwgdGhlbiBiYXNlZCBvbiB0aGUgaW5wdXQgcGFyYW1ldGVy cyB3ZSBjYW4gbGV0IGl0CmV4ZWN1dGUsIGNhbmNlbCwgYW5kIHNldCB0aGUgcHJpb3JpdHkuCgpG b3IgZXhhbXBsZSBpZiB0aGUgdGVzdCBzYXlzICJjdHgxLWV4ZWN1dGUtY3R4Mi1jYW5jZWwiIHRo ZW4gdGhpcyBtZWFucwp0aGUgb3V0ZXIgbG9vcCBzZXQgdGhlIHdhdGNoZG9nIGFuZCBleGVjdXRl cyB3aGlsZSB0aGUgaW5uZXIgbG9vcCBzZXRzCnRoZSB3YXRjaGRvZyBhbmQgY2FuY2VscyB0aGUg ZXhlY3V0aW9uLCBidXQgc2luY2UgSSBhbSBsb29waW5nIHRocm91Z2gKYWxsIG9mIHRoZSBlbmdp bmVzLCB0aGVuIGl0IHdpbGwgZG8gdGhhdCBmb3IgYWxsIG9mIHRoZW06CgplbmdpbmUxIC0gZXhl Y3V0ZXMKCWVuZ2luZTEgLSBjYW5jZWwKCWVuZ2luZTIgLSBjYW5jZWwKCWVuZ2luZTMgLSBjYW5j ZWwKCWVuZ2luZTQgLSBjYW5jZWwKZW5naW5lNCAtIGV4ZWN1dGVzCgllbmdpbmUxIC0gY2FuY2Vs CgllbmdpbmUyIC0gY2FuY2VsCgkuLi4KCnYyIG9mIHRoZSBzZXJpZXMgd2FzIGhhcmRjb2Rpbmcg dGhlIGVuZ2luZXMgdG8gc2F5IHZlY3MwIGFuZCByY3MwIGJ1dApBbnRvbmlvIHN1Z2dlc3RlZCB0 aGF0IHdlIGNvdWxkIGl0ZXJhdGUgdGhyb3VnaCB0aGUgZGlmZmVyZW50IGVuZ2luZXMuCgpSZWdh cmRzLApDYXJsb3MKCgo+IAo+IEluIGdlbmVyYWwgaXQgbG9va3MgYSBiaXQgdW50aWR5LiBDb2Rp bmcgc3R5bGUgaXMgb2ZmLCBhbGlnbm1lbnQgaXMgCj4gcmFuZG9tIGV0Yy4uIHNvIGEgYml0IGRp ZmZpY3VsdCB0byByZWFkLiBCdXQgSSdsbCBtYWtlIGEgcGFzcyBhbmQgc2VlCj4gaWYgCj4gSSBj YW4gbWFrZSBzZW5zZSBvZiBpdC4gSSB3b24ndCBsZWF2ZSBjb21tZW50cyBvbiBjb2Rpbmcgc3R5 bGUgYW5kIAo+IGZvcm1hdHRpbmcgc2luY2UgdGhlcmUgYXJlIHRvbyBtYW55LiBCdXQgcGxlYXNl IGRvIGZpeCB0aGF0IGJlZm9yZSAKPiByZS1wb3N0aW5nLgo+IAo+IE9uIDIzLzA0LzIwMTkgMDE6 MDUsIENhcmxvcyBTYW50YSB3cm90ZToKPiA+IFRoaXMgdGVzdCBhZGRzIGJhc2ljIHNldCBvZiB0 ZXN0cyB0byByZXNldCB0aGUgZGlmZmVyZW50Cj4gPiBHUFUgZW5naW5lcyB0aHJvdWdoIHRoZSBn cHUgd2F0Y2hkb2cgdGltZXIuCj4gPiAKPiA+IENyZWRpdHMgdG8gQW50b25pbyBmb3IgdGhlIG9y aWdpbmFsIGNvZGViYXNlIHRoaXMgaXMgYmFzZWQgb24uCj4gPiAKPiA+IHYyOiByZW1vdmUgZ2Vt X2NvbnRleHRfZ2V0X3BhcmFtKCkgZHVyaW5nIHNldCAoQW50b25pbykKPiA+ICAgICAgcmVtb3Zl IGNsZWFyaW5nIG9mIHRoZSBlbmdpbmVzX3RocmVzaG9sZFtdIGluIHRoZSBkZWZhdWx0IGNhc2UK PiA+ICAgICAgaW5zaWRlIGNvbnRleHRfc2V0X3dhdGNoZG9nKCkuIChBbnRvbmlvKQo+ID4gICAg ICBmaXggaW5kZXhpbmcgd2hlbiBjcmVhdGluZyBsb3cvaGlnaCBwcmlvcml0eSBjb250ZXh0cwo+ ID4gICAgICBnZXQgcmlkIG9mIDIgdGhyZWFkcyBpZGVhIChBbnRvbmlvKQo+ID4gICAgICBmaXgg Y29udGV4dCBwcmlvIGJ1ZyBkdWUgdG8gd3JvbmcgaW5kZXhpbmcgKEFudG9uaW8pCj4gPiB2Mzog bm8gbmVlZCB0byBmb3JjZSBjbGVhciBkcm1faTkxNV9nZW1fd2F0Y2hkb2dfdGltZW91dCBzdHJ1 Y3QKPiA+ICAgICAgd2hlbiBzZXR0aW5nIHRoZSB3YXRjaGRvZyB0aW1lb3V0cyAoQW50b25pbykK PiA+ICAgICAgLXVzZSBnZW1fY29udGV4dF9zZXRfcHJpb3JpdHkoKSBpbnN0ZWFkIHRvIHVzZSBl cnJvciBjaGVja2luZwo+ID4gICAgICAtYWx3YXlzIHVzZSBhIGxvb3BlciB0byB0ZXN0IGFsbCBl bmdpbmVzIChBbnRvbmlvKQo+ID4gICAgICAtbW9kaWZ5IHRlc3QgZ3B1X3dhdGNob2RnX2hhbmdf bG9uZ19iYXRjaF9zaW5nbGVfZW5naW5lKCkKPiA+ICAgICAgdG8gdXNlIGEgY291cGxlIG9mIGJh dGNoZXMgYW5kIHNldCB0aGUgdGltZW91dCBpbiBiZXR3ZWVuIHRoZW0KPiA+IChBbnRvbmlvKQo+ ID4gICAgICAtbWFrZSB1c2Ugb2YgZm9yX2VhY2hfZW5naW5lX2NsYXNzX2luc3RhbmNlKCkgKEFu dG9uaW8pCj4gPiAKPiA+IENjOiBVcnN1bGluIFR2cnRrbyA8dHZydGtvLnVyc3VsaW5AaW50ZWwu Y29tPgo+ID4gQ2M6IEFudG9uaW8gQXJnZW56aWFubyA8YW50b25pby5hcmdlbnppYW5vQGludGVs LmNvbT4KPiA+IENjOiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KPiA+ IFNpZ25lZC1vZmYtYnk6IENhcmxvcyBTYW50YSA8Y2FybG9zLnNhbnRhQGludGVsLmNvbT4KPiA+ IC0tLQo+ID4gICB0ZXN0cy9NYWtlZmlsZS5zb3VyY2VzICAgIHwgICAzICsKPiA+ICAgdGVzdHMv aTkxNS9nZW1fd2F0Y2hkb2cuYyB8IDUxNwo+ID4gKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKwo+ID4gICB0ZXN0cy9tZXNvbi5idWlsZCAgICAgICAgIHwgICAx ICsKPiA+ICAgMyBmaWxlcyBjaGFuZ2VkLCA1MjEgaW5zZXJ0aW9ucygrKQo+ID4gICBjcmVhdGUg bW9kZSAxMDA2NDQgdGVzdHMvaTkxNS9nZW1fd2F0Y2hkb2cuYwo+ID4gCj4gPiBkaWZmIC0tZ2l0 IGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKPiA+IGlu ZGV4IDIxNDY5OGQuLjdmMTdmMjAgMTAwNjQ0Cj4gPiAtLS0gYS90ZXN0cy9NYWtlZmlsZS5zb3Vy Y2VzCj4gPiArKysgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCj4gPiBAQCAtNDQ0LDYgKzQ0NCw5 IEBAIGdlbV91c2VycHRyX2JsaXRzX1NPVVJDRVMgPQo+ID4gaTkxNS9nZW1fdXNlcnB0cl9ibGl0 cy5jCj4gPiAgIFRFU1RTX3Byb2dzICs9IGdlbV93YWl0Cj4gPiAgIGdlbV93YWl0X1NPVVJDRVMg PSBpOTE1L2dlbV93YWl0LmMKPiA+ICAgCj4gPiArVEVTVFNfcHJvZ3MgKz0gZ2VtX3dhdGNoZG9n Cj4gPiArZ2VtX3dhdGNoZG9nX1NPVVJDRVMgPSBpOTE1L2dlbV93YXRjaGRvZy5jCj4gPiArCj4g PiAgIFRFU1RTX3Byb2dzICs9IGdlbV93b3JrYXJvdW5kcwo+ID4gICBnZW1fd29ya2Fyb3VuZHNf U09VUkNFUyA9IGk5MTUvZ2VtX3dvcmthcm91bmRzLmMKPiA+ICAgCj4gPiBkaWZmIC0tZ2l0IGEv dGVzdHMvaTkxNS9nZW1fd2F0Y2hkb2cuYyBiL3Rlc3RzL2k5MTUvZ2VtX3dhdGNoZG9nLmMKPiA+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwLi44Zjc4OWFiCj4gPiAtLS0g L2Rldi9udWxsCj4gPiArKysgYi90ZXN0cy9pOTE1L2dlbV93YXRjaGRvZy5jCj4gPiBAQCAtMCww ICsxLDUxNyBAQAo+ID4gKy8qCj4gPiArICogQ29weXJpZ2h0IMKpIDIwMTYgSW50ZWwgQ29ycG9y YXRpb24KPiA+ICsgKgo+ID4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUg b2YgY2hhcmdlLCB0byBhbnkgcGVyc29uCj4gPiBvYnRhaW5pbmcgYQo+ID4gKyAqIGNvcHkgb2Yg dGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKPiA+ ICJTb2Z0d2FyZSIpLAo+ID4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVz dHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0Cj4gPiBsaW1pdGF0aW9uCj4gPiArICogdGhlIHJp Z2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsCj4g PiBzdWJsaWNlbnNlLAo+ID4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUs IGFuZCB0byBwZXJtaXQgcGVyc29ucyB0bwo+ID4gd2hvbSB0aGUKPiA+ICsgKiBTb2Z0d2FyZSBp cyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZwo+ID4gY29uZGl0 aW9uczoKPiA+ICsgKgo+ID4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlz IHBlcm1pc3Npb24gbm90aWNlCj4gPiAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gPiArICogcGFyYWdy YXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsCj4gPiBw b3J0aW9ucyBvZiB0aGUKPiA+ICsgKiBTb2Z0d2FyZS4KPiA+ICsgKgo+ID4gKyAqIFRIRSBTT0ZU V0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAo+ ID4gRVhQUkVTUyBPUgo+ID4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQg VE8gVEhFIFdBUlJBTlRJRVMgT0YKPiA+IE1FUkNIQU5UQUJJTElUWSwKPiA+ICsgKiBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8KPiA+ IEVWRU5UIFNIQUxMCj4gPiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUg TElBQkxFIEZPUiBBTlkgQ0xBSU0sCj4gPiBEQU1BR0VTIE9SIE9USEVSCj4gPiArICogTElBQklM SVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0Us Cj4gPiBBUklTSU5HCj4gPiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBU SEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgo+ID4gT1RIRVIgREVBTElOR1MKPiA+ICsgKiBJTiBU SEUgU09GVFdBUkUuCj4gPiArICovCj4gPiArI2luY2x1ZGUgImlndC5oIgo+ID4gKyNpbmNsdWRl ICJpZ3Rfc3lzZnMuaCIKPiA+ICsjaW5jbHVkZSAic3dfc3luYy5oIgo+ID4gKwo+ID4gKyNpbmNs dWRlIDxwdGhyZWFkLmg+Cj4gPiArI2luY2x1ZGUgPGZjbnRsLmg+Cj4gPiArCj4gPiArI2luY2x1 ZGUgPHN5cy9pb2N0bC5oPgo+ID4gKyNpbmNsdWRlIDxzeXMvcG9sbC5oPgo+ID4gKyNpbmNsdWRl IDxzeXMvc2lnbmFsLmg+Cj4gPiArI2luY2x1ZGUgImk5MTUvZ2VtX3JpbmcuaCIKPiA+ICsKPiA+ ICsjZGVmaW5lIExPQ0FMX0k5MTVfRVhFQ19CU0RfU0hJRlQJKDEzKQo+ID4gKyNkZWZpbmUgTE9D QUxfSTkxNV9FWEVDX0JTRF9SSU5HMSAJKDEgPDwKPiA+IExPQ0FMX0k5MTVfRVhFQ19CU0RfU0hJ RlQpCj4gPiArI2RlZmluZSBMT0NBTF9JOTE1X0VYRUNfQlNEX1JJTkcyIAkoMiA8PAo+ID4gTE9D QUxfSTkxNV9FWEVDX0JTRF9TSElGVCkKPiAKPiBUaGVzZSBhcmUgaW4gb2xkIHNvIG5vIG5lZWQg Zm9yIGxvY2FsIGRlZmluaXRpb25zLgo+IAo+ID4gKwo+ID4gKyNkZWZpbmUgTUFYX1BSSU8gTE9D QUxfSTkxNV9DT05URVhUX01BWF9VU0VSX1BSSU9SSVRZCj4gPiArI2RlZmluZSBNSU5fUFJJTyBM T0NBTF9JOTE1X0NPTlRFWFRfTUlOX1VTRVJfUFJJT1JJVFkKPiA+ICsjZGVmaW5lIEhJR0ggMQo+ ID4gKyNkZWZpbmUgTE9XIDAKPiA+ICsjZGVmaW5lIFRSVUUgMQo+ID4gKyNkZWZpbmUgRkFMU0Ug MAo+IAo+IHRydWUgYW5kIGZhbHNlIGFyZSBmYWlyIGdhbWUgaW4gaWd0Lgo+IAo+ID4gKyNkZWZp bmUgV0FUQ0hET0dfVEhSRVNIT0xEICgxMDApCj4gPiArI2RlZmluZSBNQVhfRU5HSU5FUyA1Cj4g PiArI2RlZmluZSBSRU5ERVJfQ0xBU1MgMAo+ID4gKyNkZWZpbmUgVklERU9fREVDT0RFX0NMQVNT IDEKPiA+ICsjZGVmaW5lIFZJREVPX0VOSEFOQ0VNRU5UX0NMQVNTIDIKPiA+ICsjZGVmaW5lIENP UFlfRU5HSU5FX0NMQVNTIDMKPiAKPiBDbGFzc2VzIGFyZSBpbiBpOTE1X2RybS5oIGFzIHdlbGwu Cj4gCj4gPiArI2RlZmluZSBMT0NBTF9JOTE1X0NPTlRFWFRfUEFSQU1fV0FUQ0hET0cgMHgxMAo+ ID4gKwo+ID4gKyNkZWZpbmUgUlNfTk9fRVJST1IgICAgICAwCj4gPiArI2RlZmluZSBSU19CQVRD SF9BQ1RJVkUgICgxIDw8IDApCj4gPiArI2RlZmluZSBSU19CQVRDSF9QRU5ESU5HICgxIDw8IDEp Cj4gPiArI2RlZmluZSBSU19VTktOT1dOICAgICAgICgxIDw8IDIpCj4gCj4gV2hhdCBhcmUgdGhl c2U/IExvb2sgdW51c2VkIGluIGNvZGUuCj4gCj4gPiArCj4gPiArI2RlZmluZSBHRVRfUkVTRVRf U1RBVFNfSU9DVEwgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIDB4MzIsCj4gPiBzdHJ1Y3Qg bG9jYWxfZHJtX2k5MTVfcmVzZXRfc3RhdHMpCj4gPiArc3RydWN0IGxvY2FsX2RybV9pOTE1X3Jl c2V0X3N0YXRzIHsKPiA+ICsJX191MzIgY3R4X2lkOwo+ID4gKwlfX3UzMiBmbGFnczsKPiA+ICsJ X191MzIgcmVzZXRfY291bnQ7Cj4gPiArCV9fdTMyIGJhdGNoX2FjdGl2ZTsKPiA+ICsJX191MzIg YmF0Y2hfcGVuZGluZzsKPiA+ICsJX191MzIgcGFkOwo+ID4gK307Cj4gPiArCj4gPiArY29uc3Qg dWludDY0X3QgdGltZW91dF8xMDBtcyA9IDEwMDAwMDAwMExMOwo+ID4gK2ludCBudW07Cj4gPiAr Cj4gPiArc3RydWN0IGRybV9pOTE1X2dlbV93YXRjaGRvZ190aW1lb3V0IHsKPiA+ICsJdW5pb24g ewo+ID4gKwkJc3RydWN0IHsKPiA+ICsJCQkvKgo+ID4gKwkJCSAqIEVuZ2luZSBjbGFzcyAmIGlu c3RhbmNlIHRvIGJlIGNvbmZpZ3VyZWQgb3IKPiA+IHF1ZXJpZWQuCj4gPiArCQkJICovCj4gPiAr CQkJX191MTYgZW5naW5lX2NsYXNzOwo+ID4gKwkJCV9fdTE2IGVuZ2luZV9pbnN0YW5jZTsKPiA+ ICsJCX07Cj4gPiArCQkvKiBJbmRleCBiYXNlZCBhZGRyZXNzaW5nIG1vZGUgKi8KPiA+ICsJCV9f dTMyIGluZGV4Owo+ID4gKwl9Owo+ID4gKwkvKiBHUFUgRW5naW5lIHdhdGNoZG9nIHJlc2V0cyB0 aW1lb3V0IGluIHVzICovCj4gPiArCV9fdTMyIHRpbWVvdXRfdXM7Cj4gPiArfTsKPiA+ICsKPiA+ ICtzdGF0aWMgdm9pZCBjbGVhcl9lcnJvcl9zdGF0ZShpbnQgZmQpCj4gPiArewo+ID4gKwlpbnQg ZGlyOwo+ID4gKwo+ID4gKwlkaXIgPSBpZ3Rfc3lzZnNfb3BlbihmZCk7Cj4gPiArCj4gPiArCWlm IChkaXIgPCAwKQo+ID4gKwkJcmV0dXJuOwo+IAo+IGlndF9yZXF1aXJlKGRpciA+PSAwKSBpZiB0 ZXN0IHJlbGllcyBvbiB0aGlzIGJlaW5nIHByZXNlbnQ/Cj4gCj4gPiArCj4gPiArCS8qIEFueSB3 cml0ZSB0byB0aGUgZXJyb3Igc3RhdGUgY2xlYXJzIGl0ICovCj4gPiArCWlndF9zeXNmc19zZXQo ZGlyLCAiZXJyb3IiLCAiIik7Cj4gPiArCWNsb3NlKGRpcik7Cj4gPiArfQo+ID4gKwo+ID4gK3N0 YXRpYyB1bnNpZ25lZCBpbnQgZTJyaW5nKGludCBmZCwgY29uc3Qgc3RydWN0Cj4gPiBpbnRlbF9l eGVjdXRpb25fZW5naW5lMiAqZSkKPiA+ICt7Cj4gPiArICAgIHJldHVybiBnZW1fY2xhc3NfaW5z dGFuY2VfdG9fZWJfZmxhZ3MoZmQsIGUtPmNsYXNzLCBlLQo+ID4gPmluc3RhbmNlKTsKPiA+ICt9 Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgY29udGV4dF9zZXRfd2F0Y2hkb2coaW50IGZkLCB1bnNp Z25lZCBlbmdpbmVfaWQsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z aWduZWQgY3R4X2lkLCB1bnNpZ25lZAo+ID4gdGhyZXNob2xkKQo+ID4gK3sKPiA+ICsJc3RydWN0 IGRybV9pOTE1X2dlbV93YXRjaGRvZ190aW1lb3V0Cj4gPiBlbmdpbmVzX3RocmVzaG9sZFtNQVhf RU5HSU5FU107Cj4gPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbSBhcmcgPSB7 Cj4gPiArCQkucGFyYW0gPSBMT0NBTF9JOTE1X0NPTlRFWFRfUEFSQU1fV0FUQ0hET0csCj4gPiAr CQkuY3R4X2lkID0gY3R4X2lkLAo+ID4gKwkJLnNpemUgPSBzaXplb2YoZW5naW5lc190aHJlc2hv bGQpLAo+ID4gKwkJLnZhbHVlID0gKHVpbnQ2NF90KSZlbmdpbmVzX3RocmVzaG9sZAo+ID4gKwl9 Owo+ID4gKwo+ID4gKwltZW1zZXQoJmVuZ2luZXNfdGhyZXNob2xkLCAwLCBzaXplb2YoZW5naW5l c190aHJlc2hvbGQpKTsKPiA+ICsKPiA+ICsJc3dpdGNoIChlbmdpbmVfaWQgJiBJOTE1X0VYRUNf UklOR19NQVNLKSB7Cj4gPiArCWNhc2UgSTkxNV9FWEVDX1JFTkRFUjoKPiA+ICsJCWVuZ2luZXNf dGhyZXNob2xkW1JFTkRFUl9DTEFTU10udGltZW91dF91cyA9IHRocmVzaG9sZDsKPiAKPiBMb29r cyBsaWtlIHVBUEkgaXMgaW4gc29tZSBpbnRlcmltIHN0YXRlPyBJIHdhcyBleHBlY3RpbmcgdG8g c2VlCj4gaGVyZSAKPiBzb21ldGhpbmcgbGlrZToKPiAKPiAJZW5naW5lc190aHJlc2hvbGQuZW5n aW5lX2NsYXNzID0gUkVOREVSX0NMQVNTOwo+IAllbmdpbmVzX3RocmVzaG9sZC5lbmdpbmVfaW5z dGFuY2UgPSAwOwo+IAllbmdpbmVzX3RocmVzaG9sZC50aW1lb3V0X3VzID0gdGhyZXNob2xkOwo+ IAo+IEJ1dCB5b3Ugc2VlbSB0byBiZSBwYXNzaW5nIGFuIGFycmF5IG9mIHN0cnVjdHMgd2hpY2gg Y2FycnkgCj4gY2xhc3MvaW5zdGFuY2UgZGF0YSwgZG9uJ3QgdXNlIGl0IGJ1dCBpbnN0ZWFkIGlu ZmVyIHRoZSBjbGFzcyBmcm9tCj4gdGhlIAo+IHBvc2l0aW9uIGluIHRoZSBhcnJheS4KPiAKPiA+ ICsJCWJyZWFrOwo+ID4gKwljYXNlIEk5MTVfRVhFQ19CU0Q6Cj4gPiArCQllbmdpbmVzX3RocmVz aG9sZFtWSURFT19ERUNPREVfQ0xBU1NdLnRpbWVvdXRfdXMgPQo+ID4gdGhyZXNob2xkOwo+ID4g KwkJYnJlYWs7Cj4gPiArCWNhc2UgSTkxNV9FWEVDX1ZFQk9YOgo+ID4gKwkJZW5naW5lc190aHJl c2hvbGRbVklERU9fRU5IQU5DRU1FTlRfQ0xBU1NdLnRpbWVvdXRfdXMgPQo+ID4gdGhyZXNob2xk Owo+ID4gKwkJYnJlYWs7Cj4gPiArCWRlZmF1bHQ6Cj4gPiArCQlicmVhazsKPiA+ICsJfQo+ID4g Kwo+ID4gKwlnZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZhcmcpOwo+ID4gK30KPiA+ICsKPiA+ ICtzdGF0aWMgdm9pZCBiYXRjaF9idWZmZXJfZmFjdG9yeSh1aW50MzJfdCBmZCwgdWludDMyX3Qg Y3R4X2lkLAo+ID4gdW5zaWduZWQgZXhlY19pZCwgdWludDMyX3QgdGFyZ2V0LCB1aW50MzJfdCBv ZmZzZXQsIHVpbnQzMl90Cj4gPiAqaGFuZGxlLCB1aW50NjRfdCB0aW1lb3V0LCBpbnQgKmZlbmNl LCBpbnQgZmVuY2VfaW5kZXgpCj4gPiArewo+ID4gKyAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4 ZWNfb2JqZWN0MiBvYmpbMl07Cj4gPiArICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlv bl9lbnRyeSByZWxvYzsKPiA+ICsgICAgc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBl eGVjYnVmOwo+ID4gKyAgICBpZ3Rfc3Bpbl90ICpzcGluID0gTlVMTDsKPiA+ICsgICAgY29uc3Qg dWludDMyX3QgYmJlID0gTUlfQkFUQ0hfQlVGRkVSX0VORDsKPiA+ICsgICAgaW50IGkgPSAwOwo+ ID4gKwo+ID4gKyAgICBnZW1fcXVpZXNjZW50X2dwdShmZCk7Cj4gPiArCj4gPiArICAgIG1lbXNl dCgmZXhlY2J1ZiwgMCwgc2l6ZW9mKGV4ZWNidWYpKTsKPiA+ICsgICAgbWVtc2V0KCZvYmosIDAs IHNpemVvZihvYmopKTsKPiA+ICsgICAgbWVtc2V0KCZyZWxvYywgMCwgc2l6ZW9mKHJlbG9jKSk7 Cj4gPiArCj4gPiArICAgIGV4ZWNidWYuYnVmZmVyc19wdHIgPSB0b191c2VyX3BvaW50ZXIob2Jq KTsKPiA+ICsKPiA+ICsgICAgZXhlY2J1Zi5idWZmZXJfY291bnQgPSAyOwo+ID4gKyAgICBleGVj YnVmLmZsYWdzID0gZXhlY19pZCB8IEk5MTVfRVhFQ19GRU5DRV9PVVQgOwo+ID4gKwo+ID4gKyAg ICBvYmpbMF0uaGFuZGxlID0gdGFyZ2V0Owo+ID4gKyAgICBvYmpbMV0uaGFuZGxlID0gZ2VtX2Ny ZWF0ZShmZCwgNDA5Nik7Cj4gPiArCj4gPiArICAgIG9ialsxXS5yZWxvY2F0aW9uX2NvdW50ID0g MTsKPiA+ICsgICAgb2JqWzFdLnJlbG9jc19wdHIgPSB0b191c2VyX3BvaW50ZXIoJnJlbG9jKTsK PiA+ICsKPiA+ICsgICAgcmVsb2MudGFyZ2V0X2hhbmRsZSA9IG9ialswXS5oYW5kbGU7Cj4gPiAr ICAgIHJlbG9jLnJlYWRfZG9tYWlucyA9IEk5MTVfR0VNX0RPTUFJTl9DT01NQU5EOwo+ID4gKyAg ICByZWxvYy53cml0ZV9kb21haW4gPSBJOTE1X0dFTV9ET01BSU5fQ09NTUFORDsKPiA+ICsgICAg cmVsb2MuZGVsdGEgPSBvZmZzZXQgKiBzaXplb2YodWludDMyX3QpOwo+ID4gKwo+ID4gKyAgICBy ZWxvYy5vZmZzZXQgPSBpICogc2l6ZW9mKHVpbnQzMl90KTsKPiA+ICsgICAgZ2VtX3dyaXRlKGZk LCBvYmpbMV0uaGFuZGxlLCAwLCAmYmJlLCBzaXplb2YoYmJlKSk7Cj4gPiArCj4gPiArICAgIF9f c3luY19zeW5jaHJvbml6ZSgpOwo+ID4gKwo+ID4gKyAgICBpZiAoaGFuZGxlKSB7Cj4gPiArICAg ICAgICAqaGFuZGxlID0gb2JqWzFdLmhhbmRsZTsKPiA+ICsgICAgICAgIHJldHVybjsKPiAKPiBJ cyB0aGlzIHBhdGggdXNlZCBieSB0aGUgY2FsbGVycz8KPiAKPiA+ICsgICAgfQo+ID4gKwo+ID4g KyAgICBnZW1fc3luYyhmZCwgb2JqWzFdLmhhbmRsZSk7Cj4gPiArICAgIGV4ZWNidWYucnN2ZDEg PSBjdHhfaWQ7Cj4gPiArICAgIGV4ZWNidWYucnN2ZDIgPSAtMTsKPiA+ICsKPiA+ICsgICAgc3Bp biA9IGlndF9zcGluX2JhdGNoX25ldyhmZCwgLmRlcGVuZGVuY3kgPSBvYmpbMF0uaGFuZGxlKTsK PiA+ICsgICAgaWd0X3NwaW5fYmF0Y2hfc2V0X3RpbWVvdXQoc3BpbiwgdGltZW91dCk7Cj4gPiAr ICAgIGlndF9hc3NlcnQoZ2VtX2JvX2J1c3koZmQsIG9ialswXS5oYW5kbGUpKTsKPiA+ICsKPiA+ ICsgICAgZ2VtX2V4ZWNidWZfd3IoZmQsICZleGVjYnVmKTsKPiA+ICsgICAgaWd0X3NwaW5fYmF0 Y2hfZnJlZShmZCwgc3Bpbik7Cj4gPiArCj4gPiArICAgIGZlbmNlW2ZlbmNlX2luZGV4XSA9IGV4 ZWNidWYucnN2ZDIgPj4gMzI7Cj4gPiArCj4gPiArICAgIGdlbV9jbG9zZShmZCwgb2JqWzFdLmhh bmRsZSk7Cj4gPiArICAgIGdlbV9xdWllc2NlbnRfZ3B1KGZkKTsKPiA+ICt9Cj4gPiArCj4gPiAr c3RhdGljIHVpbnQzMl90IGNyZWF0ZV9jdHhfd2l0aF9wcmlvcml0eShpbnQgZmQsIGludCBjdHhf cHJpbykKPiA+ICt7Cj4gPiArCXVpbnQzMl90IGN0eCA9IGdlbV9jb250ZXh0X2NyZWF0ZShmZCk7 Cj4gPiArCj4gPiArCXN3aXRjaCAoY3R4X3ByaW8pIHsKPiA+ICsJY2FzZSBISUdIOgo+ID4gKwkJ Z2VtX2NvbnRleHRfc2V0X3ByaW9yaXR5KGZkLCBjdHgsIE1BWF9QUklPKTsKPiA+ICsJCWlndF9p bmZvKCJTZXR0aW5nIE1BWCBwcmlvcml0eSAlZFxuIiwgY3R4X3ByaW8pOwo+ID4gKwkJYnJlYWs7 Cj4gPiArCWNhc2UgTE9XOgo+ID4gKwkJZ2VtX2NvbnRleHRfc2V0X3ByaW9yaXR5KGZkLCBjdHgs IE1JTl9QUklPKTsKPiA+ICsJCWlndF9pbmZvKCJTZXR0aW5nIE1JTiBwcmlvcml0eSAlZFxuIiwg Y3R4X3ByaW8pOwo+ID4gKwkJYnJlYWs7Cj4gPiArCWRlZmF1bHQ6Cj4gPiArCQlpZ3RfaW5mbygi SWdub3JpbmcgY29udGV4dCBwcmlvcml0eSAlZFxuIiwgY3R4X3ByaW8pOwo+ID4gKwkJYnJlYWs7 Cj4gPiArCX0KPiA+ICsKPiA+ICsJcmV0dXJuIGN0eDsKPiAKPiBXaHkgZG8geW91IG5lZWQgdGhp cyBoZWxwZXIgd2hpY2ggdHJhbnNsYXRlcyBhbiBpbnRlZ2VyIHRvIGFuCj4gaW50ZWdlcj8gCj4g Q291bGRuJ3QgeW91IGp1c3QgcGFzcyBpbiB0aGUgcmVhbCBwcmlvcml0eSB0byBzdGFydCB3aXRo Pwo+IAo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGdlbV9yZXNldF9zdGF0cyhpbnQgZmQs IGludCBjdHhfaWQsCj4gPiArCQkJICAgc3RydWN0IGxvY2FsX2RybV9pOTE1X3Jlc2V0X3N0YXRz ICpycykKPiA+ICt7Cj4gPiArCW1lbXNldChycywgMCwgc2l6ZW9mKCpycykpOwo+ID4gKwlycy0+ Y3R4X2lkID0gY3R4X2lkOwo+ID4gKwlycy0+cmVzZXRfY291bnQgPSAtMTsKPiA+ICsKPiA+ICsJ aWYgKGRybUlvY3RsKGZkLCBHRVRfUkVTRVRfU1RBVFNfSU9DVEwsIHJzKSkgewo+ID4gKwkJcHJp bnRmKCJlcnJvcjolZFxuIiwtZXJybm8pOwo+ID4gKwkJcmV0dXJuIC1lcnJubzsKPiAKPiBNYWtl IGl0IGFzc2VydCBzdWNjZXNzIGhlcmUgc2luY2UgYWxsIGNhbGxlcnMgZG8gdGhhdCBhbnl3YXkg YW5kIGl0IAo+IG1hdGNoZXMgdGhlIGNvbnZlbnRpb24gZm9yIGdlbSBwcmVmaXhlZCBpb2N0bCBo ZWxwZXJzPwo+IAo+ID4gKwl9Cj4gPiArCWlndF9hc3NlcnQocnMtPnJlc2V0X2NvdW50ICE9IC0x KTsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB1bnNpZ25lZCBpbmRl eF90b19lbmdpbmVfaWQoaW50IGZkLCBpbnQgaW5kZXgpCj4gPiArewo+ID4gKwl1bnNpZ25lZCBl bmdpbmVfaWQgPSBJOTE1X0VYRUNfUkVOREVSOwo+ID4gKwo+ID4gKwlzd2l0Y2ggKGluZGV4KSB7 Cj4gPiArCWNhc2UgMToKPiA+ICsJCWVuZ2luZV9pZCA9IEk5MTVfRVhFQ19SRU5ERVI7Cj4gPiAr CQlicmVhazsKPiA+ICsJY2FzZSAyOgo+ID4gKwkJaWYgKGdlbV9oYXNfYnNkMihmZCkpCj4gPiAr CQkJZW5naW5lX2lkID0gSTkxNV9FWEVDX0JTRCB8Cj4gPiBJOTE1X0VYRUNfQlNEX1JJTkcxOwo+ ID4gKwkJZWxzZQo+ID4gKwkJCWVuZ2luZV9pZCA9IEk5MTVfRVhFQ19CU0Q7Cj4gPiArCQlicmVh azsKPiA+ICsJY2FzZSAzOgo+ID4gKwkJaWYgKGdlbV9oYXNfYnNkMihmZCkpCj4gPiArCQkJZW5n aW5lX2lkID0gSTkxNV9FWEVDX0JTRCB8Cj4gPiBJOTE1X0VYRUNfQlNEX1JJTkcyOwo+ID4gKwkJ ZWxzZQo+ID4gKwkJCWVuZ2luZV9pZCA9IEk5MTVfRVhFQ19CU0Q7Cj4gPiArCQlicmVhazsKPiA+ ICsJY2FzZSA0Ogo+ID4gKwkJZW5naW5lX2lkID0gSTkxNV9FWEVDX1ZFQk9YOwo+ID4gKwkJYnJl YWs7Cj4gPiArCWRlZmF1bHQ6Cj4gPiArCQlicmVhazsKPiA+ICsJfQo+IAo+IEkgaG9wZSB3ZSBj YW4gYXZvaWQgdGhpcyBtYWludGVuYW5jZSBidXJkZW4sIHdpbGwgc2VlIGxhdGVyIGluIHBhdGNo Cj4gaG93Lgo+IAo+ID4gKwo+ID4gKwlyZXR1cm4gZW5naW5lX2lkOwo+ID4gK30KPiA+ICsKPiA+ ICtzdGF0aWMgdm9pZCBpbmplY3RfaGFuZyh1aW50MzJfdCBmZCwgdW5zaWduZWQgZW5naW5lX2lk LCB1aW50MzJfdAo+ID4gY3R4X2lkLCAgdW5zaWduZWQgZmxhZ3MpCj4gPiArewo+ID4gKwlpZ3Rf aGFuZ190IGhhbmc7Cj4gPiArCWhhbmcgPSBpZ3RfaGFuZ19jdHgoZmQsIGN0eF9pZCwgZW5naW5l X2lkLCBmbGFncyk7Cj4gPiArCWdlbV9zeW5jKGZkLCBoYW5nLnNwaW4tPmhhbmRsZSk7Cj4gPiAr fQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIGdwdV93YXRjaGRvZ19sb25nX2JhdGNoXzJfY29udGV4 dHMoaW50IGZkLCBpbnQKPiA+IG5lbmdpbmUsIGludCBwcmlvX2N0eDEsIGludCByZXNldF9jdHgx LCBpbnQgcHJpb19jdHgyLCBpbnQKPiA+IHJlc2V0X2N0eDIpCj4gPiArewo+ID4gKwl1aW50MzJf dCBjdHhbNDhdOwo+ID4gKwl1aW50MzJfdCBzY3JhdGNoWzQ4XTsKPiA+ICsJdW5zaWduZWQgZmxh Z3MgPSBIQU5HX0FMTE9XX0NBUFRVUkU7Cj4gPiArCWNvbnN0IHVpbnQ2NF90IGJhdGNoX3RpbWVv dXRfbXMgPSB0aW1lb3V0XzEwMG1zICogMzsKPiAKPiBtcyBzdWZmaXggdXN1YWxseSBtZWFucyB0 aGUgdW5pdCBzdG9yZWQgaXMgbXMuIFdoaWxlIGhlcmUgaXQgc2VlbXMgdG8KPiBiZSAKPiBzb21l dGhpbmcgZWxzZS4KPiAKPiBjb25zdCB1bnNpZ25lZCBsb25nIGJhdGNoX3RpbWVvdXRfbXMgPSAz MDA7Cj4gY29uc3QgdW5zaWduZWQgbG9uZyBiYXRjaF90aW1lb3V0X3VzID0gMzAwZTM7Cj4gY29u c3QgdW5zaWduZWQgbG9uZyBiYXRjaF90aW1lb3V0X25zID0gMzAwZTY7Cj4gCj4gTm90IHN1cmUg d2hpY2ggb25lIHlvdSB3YW50LiBQcm9iYWJseSB1c2UgbXMgYW5kIHNjYWxlIHVwIGF0IHRoZSB1 c2UKPiBzaXRlLgo+IAo+ID4gKwljb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIg KmU7Cj4gPiArCWNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZTI7Cj4gPiAr CWludCBpID0gMCwgaW5kZXggPSAwLCBlbmdpbmVfaWQgPSAwLCBjdHhfY250ID0gMDsKPiA+ICsJ aW50ICpmZW5jZSA9IDAsIGFjdGl2ZV9jb3VudCA9IDA7Cj4gPiArCXN0cnVjdCBsb2NhbF9kcm1f aTkxNV9yZXNldF9zdGF0cyByczsKPiA+ICsKPiA+ICsJaWd0X3JlcXVpcmUobmVuZ2luZSk7Cj4g PiArCj4gPiArCWZlbmNlID0gKGludCAqKW1hbGxvYyhzaXplb2YoaW50KSAqIDQ4KTsKPiA+ICsK PiA+ICsJaWYgKCFmZW5jZSkgewo+ID4gKwkJaWd0X2luZm8oIk91dCBvZiBtZW1vcnlcbiIpOwo+ ID4gKwkJZXhpdCgxKTsKPiA+ICsJfQo+IAo+IFJlcGxhY2Ugd2l0aCBpZ3RfYXNzZXJ0KGZlbmNl KS4KPiAKPiA+ICsKPiA+ICsJLyogSW50aWFsaXplcyByYW5kb20gbnVtYmVyIGdlbmVyYXRvciAq Lwo+ID4gKwlzcmFuZCgodW5zaWduZWQpIHRpbWUoTlVMTCkpOwo+ID4gKwo+ID4gKwkvKiBUaGUg b3V0ZXIgbG9vcGVyIGlzIGN0eDEgYW5kIHRoZSBpbm5lciBsb29wZXIgaXMgY3R4Mgo+ID4gKwkg KiBCb3RoIGNvbnRleHRzIGNhbiBzZXQgdGhlaXIgcHJpb3JpdHksIGNyZWF0ZSB3b3JrLCBhbmQK PiA+IGNhbmNlbCB0aGVtc2VsdmVzCj4gPiArCSAqLwo+ID4gKwlmb3JfZWFjaF9lbmdpbmVfY2xh c3NfaW5zdGFuY2UoZmQsIGUpIHsKPiA+ICsJCWlmICggc3RyY21wKGUtPm5hbWUsICJiY3MwIikg PT0gMCApCj4gPiArCQkJY29udGludWU7Cj4gCj4gVXNlIC1FTk9ERVYgb3IgLUVJTlZBTCBmcm9t IGNvbnRleHRfc2V0X3dhdGNoZG9nIHRvIHNraXAuCj4gCj4gPiArCj4gPiArCQlzY3JhdGNoW2N0 eF9jbnRdID0gZ2VtX2NyZWF0ZShmZCwgNDA5Nik7Cj4gPiArCQlpbmRleCA9IHJhbmQoKSAlIDQg KyAxOwo+ID4gKwkJZW5naW5lX2lkID0gaW5kZXhfdG9fZW5naW5lX2lkKGZkLCBpbmRleCk7Cj4g PiArCj4gPiArCQkvKiBnZXQgY3VycmVudCBiYXRjaF9hY3RpdmUgY291bnQgKi8KPiA+ICsJCWln dF9hc3NlcnRfZXEoZ2VtX3Jlc2V0X3N0YXRzKGZkLCAwLCAmcnMpLCAwKTsKPiA+ICsJCWFjdGl2 ZV9jb3VudCA9IHJzLmJhdGNoX2FjdGl2ZTsKPiA+ICsJCWlndF9hc3NlcnRfZXEocnMuYmF0Y2hf YWN0aXZlLCBhY3RpdmVfY291bnQpOwo+ID4gKwo+ID4gKwkJY3R4W2N0eF9jbnRdID0gY3JlYXRl X2N0eF93aXRoX3ByaW9yaXR5KGZkLCBwcmlvX2N0eDEpOwo+ID4gKwkJYmF0Y2hfYnVmZmVyX2Zh Y3RvcnkoZmQsIGN0eFtjdHhfY250XSwgZW5naW5lX2lkLAo+ID4gc2NyYXRjaFtjdHhfY250XSwg MCwgTlVMTCwgYmF0Y2hfdGltZW91dF9tcywgZmVuY2UsIGN0eF9jbnQpOwo+ID4gKwkJY29udGV4 dF9zZXRfd2F0Y2hkb2coZmQsIGVuZ2luZV9pZCwgY3R4W2N0eF9jbnRdLAo+ID4gV0FUQ0hET0df VEhSRVNIT0xEKTsKPiA+ICsJCXNsZWVwKDEpOwo+IAo+IFdoYXQncyB0aGUgc2xlZXAgZm9yPyBJ ZiB1bmF2b2lkYWJsZSBhdCBsZWFzdCBuZWVkcyBhIGNvbW1lbnQuCj4gCj4gPiArCj4gPiArCQlp ZiAocmVzZXRfY3R4MSkgewo+ID4gKwkJCWNsZWFyX2Vycm9yX3N0YXRlKGZkKTsKPiA+ICsJCQlp bmplY3RfaGFuZyhmZCwgZW5naW5lX2lkLCBjdHhbY3R4X2NudF0sCj4gPiBmbGFncyk7Cj4gPiAr CQkJYWN0aXZlX2NvdW50Kys7Cj4gPiArCQl9Cj4gPiArCj4gPiArCQkvKiBjaGVjayBiYXRjaF9h Y3RpdmUgY291bnQgb25jZSBhZ2FpbiBhZnRlciB0aGUgaGFuZwo+ID4gKi8KPiA+ICsJCWlndF9h c3NlcnRfZXEoZ2VtX3Jlc2V0X3N0YXRzKGZkLCAwLCAmcnMpLCAwKTsKPiA+ICsJCWlndF9hc3Nl cnRfZXEocnMuYmF0Y2hfYWN0aXZlLCBhY3RpdmVfY291bnQpOwo+ID4gKwo+ID4gKwkJY3R4X2Nu dCsrOwo+ID4gKwkJaSA9IDE7Cj4gPiArCj4gPiArCQlmb3JfZWFjaF9lbmdpbmVfY2xhc3NfaW5z dGFuY2UoZmQsIGUyKSB7Cj4gPiArCQkJaWYgKCBzdHJjbXAoZS0+bmFtZSwgImJjczAiKSA9PSAw ICkKPiAKPiBlMiwgYnV0IHJlbW92ZSBpdCBhbHRvZ2V0aGVyIGFzIHNhaWQgYWJvdmUuCj4gCj4g SSBkb24ndCBnZXQgd2hhdCBpcyB0aGUgcHVycG9zZSBvZiB0d28KPiBmb3JfZWFjaF9lbmdpbmVf Y2xhc3NfaW5zdGFuY2UgCj4gbG9vcHMgd2hlbiBuZWl0aGVyIGUgb3IgZTIgYXBwZWFyIHRvIGJl IHVzZWQ/Cj4gCj4gU2luY2UgZWl0aGVyIEkgYW0gbWlzc2luZyBzb21ldGhpbmcgY3JpdGljYWwg b3IgdGhlIHRlc3QgcmVhbGx5IGlzCj4gdmVyeSAKPiBjb25mdXNlZCwgdW50aWwgY2xhcmlmaWVk LCBJIGFtIHNraXBwaW5nIGEgYml0IGxvd2VyIGRvd24uCj4gCj4gPiArCQkJCWNvbnRpbnVlOwo+ ID4gKwo+ID4gKwkJCXNjcmF0Y2hbY3R4X2NudF0gPSBnZW1fY3JlYXRlKGZkLCA0MDk2KTsKPiA+ ICsJCQllbmdpbmVfaWQgPSBpbmRleF90b19lbmdpbmVfaWQoZmQsIGkpOwo+ID4gKwo+ID4gKwkJ CS8qIGdldCBjdXJyZW50IGJhdGNoX2FjdGl2ZSBjb3VudCAqLwo+ID4gKwkJCWlndF9hc3NlcnRf ZXEoZ2VtX3Jlc2V0X3N0YXRzKGZkLCAwLCAmcnMpLCAwKTsKPiA+ICsJCQlhY3RpdmVfY291bnQg PSBycy5iYXRjaF9hY3RpdmU7Cj4gPiArCQkJaWd0X2Fzc2VydF9lcShycy5iYXRjaF9hY3RpdmUs IGFjdGl2ZV9jb3VudCk7Cj4gPiArCj4gPiArCQkJY3R4W2N0eF9jbnRdID0gY3JlYXRlX2N0eF93 aXRoX3ByaW9yaXR5KGZkLAo+ID4gcHJpb19jdHgyKTsKPiA+ICsJCQliYXRjaF9idWZmZXJfZmFj dG9yeShmZCwgY3R4W2N0eF9jbnRdLAo+ID4gZW5naW5lX2lkLCBzY3JhdGNoW2N0eF9jbnRdLCAw LCBOVUxMLCBiYXRjaF90aW1lb3V0X21zLCBmZW5jZSwKPiA+IGN0eF9jbnQpOwo+ID4gKwkJCWNv bnRleHRfc2V0X3dhdGNoZG9nKGZkLCBlbmdpbmVfaWQsCj4gPiBjdHhbY3R4X2NudF0sIFdBVENI RE9HX1RIUkVTSE9MRCk7Cj4gPiArCj4gPiArCQkJaWYgKHJlc2V0X2N0eDIpIHsKPiA+ICsJCQkJ Y2xlYXJfZXJyb3Jfc3RhdGUoZmQpOwo+ID4gKwkJCQlpbmplY3RfaGFuZyhmZCwgZW5naW5lX2lk LAo+ID4gY3R4W2N0eF9jbnRdLCBmbGFncyk7Cj4gPiArCQkJCWFjdGl2ZV9jb3VudCsrOwo+ID4g KwkJCX0KPiA+ICsKPiA+ICsJCQkvKiBjaGVjayBiYXRjaF9hY3RpdmUgY291bnQgb25jZSBhZ2Fp biBhZnRlcgo+ID4gdGhlIGhhbmcgKi8KPiA+ICsJCQlpZ3RfYXNzZXJ0X2VxKGdlbV9yZXNldF9z dGF0cyhmZCwgMCwgJnJzKSwgMCk7Cj4gPiArCQkJaWd0X2Fzc2VydF9lcShycy5iYXRjaF9hY3Rp dmUsIGFjdGl2ZV9jb3VudCk7Cj4gPiArCj4gPiArCQkJY3R4X2NudCsrOwo+ID4gKwkJCWkrKzsK PiA+ICsJCX0KPiA+ICsJfQo+ID4gKwo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgY3R4X2NudDsgaSsr KSB7Cj4gPiArCQljbG9zZShmZW5jZVtpXSk7Cj4gPiArCQlnZW1fY29udGV4dF9kZXN0cm95KGZk LCBjdHhbaV0pOwo+ID4gKwkJZ2VtX2Nsb3NlKGZkLCBzY3JhdGNoW2ldKTsKPiA+ICsJfQo+ID4g K30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBncHVfd2F0Y2hvZGdfaGFuZ19sb25nX2JhdGNoX3Np bmdsZV9lbmdpbmUoaW50IGZkLAo+ID4gY29uc3QgY2hhciAqbmFtZSkKPiA+ICt7Cj4gPiArCXVp bnQzMl90IGN0eFsxNl07Cj4gPiArCXVpbnQzMl90IHNjcmF0Y2hbMTZdOwo+ID4gKwlpbnQgKmZl bmNlOwo+ID4gKwljb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmU7Cj4gPiAr CXVuc2lnbmVkIG5lbmdpbmUgPSAwOwo+ID4gKwl1bnNpZ25lZCBlbmdpbmVfaWQgPSAwOwo+ID4g KwlpbnQgYWN0aXZlX2NvdW50ID0gMDsKPiA+ICsJc3RydWN0IGxvY2FsX2RybV9pOTE1X3Jlc2V0 X3N0YXRzIHJzOwo+ID4gKwlpbnQgaTsKPiA+ICsJdW5zaWduZWQgZmxhZ3MgPSBIQU5HX0FMTE9X X0NBUFRVUkU7Cj4gPiArCWNvbnN0IHVpbnQ2NF90IGJhdGNoX3RpbWVvdXRfbXMgPSB0aW1lb3V0 XzEwMG1zICogNDsKPiA+ICsKPiA+ICsJZmVuY2UgPSAoaW50ICopbWFsbG9jKHNpemVvZihpbnQp KjE2KTsKPiA+ICsKPiA+ICsJaWYgKCFmZW5jZSkgewo+ID4gKwkJaWd0X2luZm8oIk91dCBvZiBt ZW1vcnlcbiIpOwo+ID4gKwkJZXhpdCgxKTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlmb3JfZWFjaF9l bmdpbmVfY2xhc3NfaW5zdGFuY2UoZmQsIGUpIHsKPiA+ICsJCWlmICggc3RyY21wKGUtPm5hbWUs ICJiY3MwIikgPT0gMCApCj4gPiArCQkJY29udGludWU7Cj4gPiArCj4gPiArCQllbmdpbmVfaWQg PSBlMnJpbmcoZmQsIGUpOwo+ID4gKwo+ID4gKwkJc2NyYXRjaFtuZW5naW5lXSA9IGdlbV9jcmVh dGUoZmQsIDQwOTYpOwo+ID4gKwkJY3R4W25lbmdpbmVdID0gY3JlYXRlX2N0eF93aXRoX3ByaW9y aXR5KGZkLCAtMSk7Cj4gPiArCj4gPiArCQkvKiBnZXQgY3VycmVudCBiYXRjaF9hY3RpdmUgY291 bnQgKi8KPiA+ICsJCWlndF9hc3NlcnRfZXEoZ2VtX3Jlc2V0X3N0YXRzKGZkLCAwLCAmcnMpLCAw KTsKPiA+ICsJCWFjdGl2ZV9jb3VudCA9IHJzLmJhdGNoX2FjdGl2ZTsKPiA+ICsJCWlndF9hc3Nl cnRfZXEocnMuYmF0Y2hfYWN0aXZlLCBhY3RpdmVfY291bnQpOwo+ID4gKwo+ID4gKwkJLyogY3Jl YXRlIHNvbWUgd29yayBvbiB0aGlzIGVuZ2luZSB1c2luZyB0aGUgYWJvdmUKPiA+IGN0eCovCj4g PiArCQliYXRjaF9idWZmZXJfZmFjdG9yeShmZCwgY3R4W25lbmdpbmVdLCBlbmdpbmVfaWQsCj4g PiBzY3JhdGNoW25lbmdpbmVdLCAwLCBOVUxMLCBiYXRjaF90aW1lb3V0X21zLCBmZW5jZSwgbmVu Z2luZSk7Cj4gPiArCj4gPiArCQkvKiBzZXQgdGhlIGdwdSB3YXRjaGRvZyB0aW1lb3V0ICovCj4g PiArCQljb250ZXh0X3NldF93YXRjaGRvZyhmZCwgZW5naW5lX2lkLCBjdHhbbmVuZ2luZV0sCj4g PiBXQVRDSERPR19USFJFU0hPTEQpOwo+ID4gKwkJY2xlYXJfZXJyb3Jfc3RhdGUoZmQpOwo+ID4g Kwo+ID4gKwkJLyoKPiA+ICsJCSAqIGdpdmUgZW5vdWdoIHRpbWUgZm9yIHRoZSBiYXRjaCBidWZm ZXIgdG8gcnVuCj4gPiArCQkgKi8KPiA+ICsJCW5hbm9zbGVlcCgmKHN0cnVjdCB0aW1lc3BlYyl7 IC50dl9zZWMgPSAwLAo+ID4gKwkJCQkJICAgICAgLnR2X25zZWMgPQo+ID4gYmF0Y2hfdGltZW91 dF9tcyAqIDIgfSwgTlVMTCk7Cj4gPiArCj4gPiArCQkvKiBjcmVhdGUgc29tZSB3b3JrIG9uIHRo aXMgZW5naW5lIHVzaW5nIHRoZSBhYm92ZQo+ID4gY3R4Ki8KPiA+ICsJCWJhdGNoX2J1ZmZlcl9m YWN0b3J5KGZkLCBjdHhbbmVuZ2luZV0sIGVuZ2luZV9pZCwKPiA+IHNjcmF0Y2hbbmVuZ2luZV0s IDAsIE5VTEwsIGJhdGNoX3RpbWVvdXRfbXMsIGZlbmNlLCBuZW5naW5lKTsKPiA+ICsJCWNvbnRl eHRfc2V0X3dhdGNoZG9nKGZkLCBlbmdpbmVfaWQsIGN0eFtuZW5naW5lXSwKPiA+IFdBVENIRE9H X1RIUkVTSE9MRCk7Cj4gPiArCQljbGVhcl9lcnJvcl9zdGF0ZShmZCk7Cj4gPiArCj4gPiArCQkv KiBjYW5jZWwgb25seSB0aGUgYmF0Y2ggcmVxdWVzdGVkICovCj4gPiArCQlpZiAoIHN0cmNtcChl LT5uYW1lLCBuYW1lKSA9PSAwICkgewo+ID4gKwkJCWluamVjdF9oYW5nKGZkLCBlbmdpbmVfaWQs IGN0eFtuZW5naW5lXSwKPiA+IGZsYWdzKTsKPiA+ICsJCQlhY3RpdmVfY291bnQrKzsKPiA+ICsJ CX0KPiA+ICsKPiA+ICsJCS8qIGNoZWNrIGJhdGNoX2FjdGl2ZSBjb3VudCBvbmNlIGFnYWluIGFm dGVyIHRoZSBoYW5nCj4gPiAqLwo+ID4gKwkJaWd0X2Fzc2VydF9lcShnZW1fcmVzZXRfc3RhdHMo ZmQsIDAsICZycyksIDApOwo+ID4gKwkJYWN0aXZlX2NvdW50ID0gcnMuYmF0Y2hfYWN0aXZlOwo+ ID4gKwkJaWd0X2Fzc2VydF9lcShycy5iYXRjaF9hY3RpdmUsIGFjdGl2ZV9jb3VudCk7Cj4gPiAr Cj4gPiArCQluZW5naW5lKys7Cj4gPiArCX0KPiA+ICsKPiA+ICsJZm9yIChpID0gMDsgaSA8IG5l bmdpbmU7IGkrKykgewo+ID4gKwkJY2xvc2UoZmVuY2VbaV0pOwo+ID4gKwkJZ2VtX2NvbnRleHRf ZGVzdHJveShmZCwgY3R4W2ldKTsKPiA+ICsJCWdlbV9jbG9zZShmZCwgc2NyYXRjaFtpXSk7Cj4g PiArCX0KPiA+ICt9Cj4gPiArCj4gPiAraWd0X21haW4KPiA+ICt7Cj4gPiArCWludCBmZDsKPiA+ ICsJdW5zaWduZWQgaW50IG5lbmdpbmUgPSAwOwo+ID4gKwl1bnNpZ25lZCBpbnQgZW5naW5lOwo+ ID4gKwljb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmU7Cj4gPiArCj4gPiAr CWlndF9za2lwX29uX3NpbXVsYXRpb24oKTsKPiA+ICsKPiA+ICsJaWd0X2ZpeHR1cmUgewo+ID4g KwkJZmQgPSBkcm1fb3Blbl9kcml2ZXIoRFJJVkVSX0lOVEVMKTsKPiA+ICsJCWlndF9yZXF1aXJl X2dlbShmZCk7Cj4gPiArCj4gPiArCQlmb3JfZWFjaF9waHlzaWNhbF9lbmdpbmUoZmQsIGVuZ2lu ZSkKPiA+ICsJCQluZW5naW5lKys7Cj4gPiArCQlpZ3RfcmVxdWlyZShuZW5naW5lKTsKPiAKPiBE byB3ZSBoYXZlIEdQVXMgd2l0aCBubyBlbmdpbmVzPwo+IAo+ID4gKwl9Cj4gPiArCj4gPiArCWln dF9zdWJ0ZXN0X2dyb3VwIHsKPiA+ICsKPiA+ICsJCWlndF9zdWJ0ZXN0X2YoImdwdS13YXRjaGRv Zy1sb25nLWJhdGNoLWxvdy1wcmlvLWN0eDEtCj4gPiByZXNldC1jdHgyLWhpZ2gtcHJpby1leGVj dXRlIikgewo+ID4gKwkJCWludCBwcmlvX2N0eDEgPSBMT1c7Cj4gPiArCQkJaW50IHByaW9fY3R4 MiA9IEhJR0g7Cj4gPiArCQkJaW50IHJlc2V0X2N0eDEgPSBUUlVFOwo+ID4gKwkJCWludCByZXNl dF9jdHgyID0gRkFMU0U7Cj4gPiArCQkJZ3B1X3dhdGNoZG9nX2xvbmdfYmF0Y2hfMl9jb250ZXh0 cyhmZCwgbmVuZ2luZSwKPiA+IHByaW9fY3R4MSwgcmVzZXRfY3R4MSwgcHJpb19jdHgyLCByZXNl dF9jdHgyKTsKPiA+ICsJCX0KPiAKPiBUaGlzIGlzIGtpbmQgb2YgdmVyYm9zZS4gSSByZWNvbW1l bmQgb3V0IHVzdWFsIHBhdHRlcm4gYWxvbmcgdGhlCj4gbGluZXMgb2Y6Cj4gCj4gc3RydWN0IHsK PiAJY2hhciAqbmFtZTsKPiAJaW50IHByaW9bMl07Cj4gCWJvb2wgcmVzZXRbMl07Cj4gfSB0ZXN0 c1tdID0gewo+IAl7ICJjaGFuZ2UgbWUiLCB7MCwgMH0sIHtmYWxzZSwgZmFsc2V9IH0sCj4gCXsg ImNoYW5nZSBtZSIsIHstMSwgMH0sIHt0cnVlLCBmYWxzZX0gfSwKPiAJLi4uCj4gfTsKPiAKPiBm b3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0ZXN0cyk7IGkrKykgewo+IAlpZ3Rfc3VidGVzdF9m KCJsb25nLWJhdGNoLSVzIiwgdGVzdHNbaV0tPm5hbWUpCj4gCQlsb25nX2JhdGNoKGZkLCB0ZXN0 c1tpXS5wcmlvWzBdLCB0ZXN0c1tpXS5jdHhbMF0sIC4uLik7Cj4gfQo+IAo+IFNvIHlvdSBydW4g YWxsIHN1YnRlc3RzIGZyb20gYSBzaW5nbGUgbG9vcC4KPiAKPiBSZWdhcmRzLAo+IAo+IFR2cnRr bwo+IAo+ID4gKwo+ID4gKwkJaWd0X3N1YnRlc3RfZigiZ3B1LXdhdGNoZG9nLWxvbmctYmF0Y2gt aGlnaC1wcmlvLWN0eDEtCj4gPiByZXNldC1jdHgyLWxvdy1wcmlvLWV4ZWN1dGUiKSB7Cj4gPiAr CQkJaW50IHByaW9fY3R4MSA9IEhJR0g7Cj4gPiArCQkJaW50IHByaW9fY3R4MiA9IExPVzsKPiA+ ICsJCQlpbnQgcmVzZXRfY3R4MSA9IFRSVUU7Cj4gPiArCQkJaW50IHJlc2V0X2N0eDIgPSBGQUxT RTsKPiA+ICsJCQlncHVfd2F0Y2hkb2dfbG9uZ19iYXRjaF8yX2NvbnRleHRzKGZkLCBuZW5naW5l LAo+ID4gcHJpb19jdHgxLCByZXNldF9jdHgxLCBwcmlvX2N0eDIsIHJlc2V0X2N0eDIpOwo+ID4g KwkJfQo+ID4gKwo+ID4gKwkJaWd0X3N1YnRlc3RfZigiZ3B1LXdhdGNoZG9nLWxvbmctYmF0Y2gt Y3R4MS1yZXNldC1jdHgyLQo+ID4gZXhlY3V0ZSIpIHsKPiA+ICsJCQlpbnQgcHJpb19jdHgxID0g LTE7Cj4gPiArCQkJaW50IHByaW9fY3R4MiA9IC0xOwo+ID4gKwkJCWludCByZXNldF9jdHgxID0g VFJVRTsKPiA+ICsJCQlpbnQgcmVzZXRfY3R4MiA9IEZBTFNFOwo+ID4gKwkJCWdwdV93YXRjaGRv Z19sb25nX2JhdGNoXzJfY29udGV4dHMoZmQsIG5lbmdpbmUsCj4gPiBwcmlvX2N0eDEsIHJlc2V0 X2N0eDEsIHByaW9fY3R4MiwgcmVzZXRfY3R4Mik7Cj4gPiArCQl9Cj4gPiArCj4gPiArCQlpZ3Rf c3VidGVzdF9mKCJncHUtd2F0Y2hkb2ctbG9uZy1iYXRjaC1jdHgxLWV4ZWN1dGUtCj4gPiBjdHgy LXJlc2V0Iikgewo+ID4gKwkJCWludCBwcmlvX2N0eDEgPSAtMTsKPiA+ICsJCQlpbnQgcHJpb19j dHgyID0gLTE7Cj4gPiArCQkJaW50IHJlc2V0X2N0eDEgPSBGQUxTRTsKPiA+ICsJCQlpbnQgcmVz ZXRfY3R4MiA9IFRSVUU7Cj4gPiArCQkJZ3B1X3dhdGNoZG9nX2xvbmdfYmF0Y2hfMl9jb250ZXh0 cyhmZCwgbmVuZ2luZSwKPiA+IHByaW9fY3R4MSwgcmVzZXRfY3R4MSwgcHJpb19jdHgyLCByZXNl dF9jdHgyKTsKPiA+ICsJCX0KPiA+ICsKPiA+ICsJCWlndF9zdWJ0ZXN0X2YoImdwdS13YXRjaGRv Zy1sb25nLWJhdGNoLWN0eDEtZXhlY3V0ZS0KPiA+IGN0eDItZXhlY3V0ZSIpIHsKPiA+ICsJCQlp bnQgcHJpb19jdHgxID0gLTE7Cj4gPiArCQkJaW50IHByaW9fY3R4MiA9IC0xOwo+ID4gKwkJCWlu dCByZXNldF9jdHgxID0gRkFMU0U7Cj4gPiArCQkJaW50IHJlc2V0X2N0eDIgPSBGQUxTRTsKPiA+ ICsJCQlncHVfd2F0Y2hkb2dfbG9uZ19iYXRjaF8yX2NvbnRleHRzKGZkLCBuZW5naW5lLAo+ID4g cHJpb19jdHgxLCByZXNldF9jdHgxLCBwcmlvX2N0eDIsIHJlc2V0X2N0eDIpOwo+ID4gKwkJfQo+ ID4gKwo+ID4gKwkgICAgICAgX19mb3JfZWFjaF9lbmdpbmVfY2xhc3NfaW5zdGFuY2UoZSkgewo+ ID4gKwkJCWlndF9zdWJ0ZXN0X2dyb3VwIHsKPiA+ICsJCQkJaWd0X2ZpeHR1cmUgewo+ID4gKwkJ CQlnZW1fcmVxdWlyZV9lbmdpbmUoZmQsCj4gPiArCQkJCQllLT5jbGFzcywKPiA+ICsJCQkJCWUt Pmluc3RhbmNlKTsKPiA+ICsJCQkJfQo+ID4gKwkJCS8qIG5vIHN1cHBvcnQgZm9yIGdwdSB3YXRj aGRvZyBvbiBiY3MwICovCj4gPiArCQkJaWYgKHN0cmNtcChlLT5uYW1lLCAiYmNzMCIpID09IDAp Cj4gPiArCQkJCWNvbnRpbnVlOwo+IAo+IFNvZnR3YXJlIGltcGxlbWVudGF0aW9uIGNhbiBzdXBw b3J0IGl0LiBTbyBkb24ndCBza2lwIGhlcmUgYnV0IHNraXAKPiBpbiAKPiB0aGUgc3VidGVzdCBp ZiB5b3UgZ2V0IC1FTk9ERVYgd2hlbiB5b3UgdHJ5IHRvIGNvbmZpZ3VyZSBpdC4KPiAKPiA+ICsK PiA+ICsJCSAgICAgICAgICAgIGlndF9zdWJ0ZXN0X2YoImdwdS13YXRjaGRvZy1sb25nLWJhdGNo LQo+ID4gc2luZ2xlLWVuZ2luZS1yZXNldC0lcyIsIGUtPm5hbWUpCj4gCj4gRG9uJ3QgcHJlZml4 IGFsbCB0ZXN0cyB3aXRoIGdwdS13YXRjaGRvZywgaXQgaXMgdmVyeSB2ZXJib3NlIHRvIHJlYWQK PiBhbmQgCj4gdGhlIHRlc3QgaXRzZWxmIGlzIGNhbGxlZCBnZW1fd2F0Y2hkb2cgYWxyZWFkeS4K PiAKPiA+ICsJCSAgICAgICAgICAgICAgICBncHVfd2F0Y2hvZGdfaGFuZ19sb25nX2JhdGNoX3Np bmdsZV9lbmcKPiA+IGluZShmZCwgZS0+bmFtZSk7Cj4gPiArCQkJfQo+ID4gKwkJfQo+ID4gKwl9 Cj4gPiArCj4gPiArICAgIGlndF9maXh0dXJlIHsKPiA+ICsJY2xvc2UoZmQpOwo+ID4gKyAgICB9 Cj4gPiArfQo+ID4gZGlmZiAtLWdpdCBhL3Rlc3RzL21lc29uLmJ1aWxkIGIvdGVzdHMvbWVzb24u YnVpbGQKPiA+IGluZGV4IDUxNjdhNmMuLmIyODFiNzUgMTAwNjQ0Cj4gPiAtLS0gYS90ZXN0cy9t ZXNvbi5idWlsZAo+ID4gKysrIGIvdGVzdHMvbWVzb24uYnVpbGQKPiA+IEBAIC0yMTAsNiArMjEw LDcgQEAgaTkxNV9wcm9ncyA9IFsKPiA+ICAgCSdnZW1fdW5yZWZfYWN0aXZlX2J1ZmZlcnMnLAo+ ID4gICAJJ2dlbV91c2VycHRyX2JsaXRzJywKPiA+ICAgCSdnZW1fd2FpdCcsCj4gPiArICAgICAg ICAnZ2VtX3dhdGNoZG9nJywKPiA+ICAgCSdnZW1fd29ya2Fyb3VuZHMnLAo+ID4gICAJJ2dlbV93 cml0ZV9yZWFkX3Jpbmdfc3dpdGNoJywKPiA+ICAgCSdpOTE1X2ZiX3RpbGluZycsCj4gPiAKCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmlndC1kZXYgbWFp bGluZyBsaXN0CmlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJl ZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRldg==