From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.4 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,HK_RANDOM_FROM,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS, UNWANTED_LANGUAGE_BODY,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id D9049C5519F for ; Wed, 25 Nov 2020 11:25:10 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 507162075A for ; Wed, 25 Nov 2020 11:25:10 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 507162075A Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 95AC06E937; Wed, 25 Nov 2020 11:25:09 +0000 (UTC) Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id 595766E937; Wed, 25 Nov 2020 11:25:08 +0000 (UTC) IronPort-SDR: 7/sxJgkMBz9TV2Nj19Q3P1TiFZFxNy9/O7YOiy0ihgNPOnJYmc9eEeK8M+TGg8hQM41HnisZUU qH8WRwW2Zcug== X-IronPort-AV: E=McAfee;i="6000,8403,9815"; a="171336048" X-IronPort-AV: E=Sophos;i="5.78,368,1599548400"; d="scan'208";a="171336048" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Nov 2020 03:25:07 -0800 IronPort-SDR: pdRPyfAOL//PL0H/YK2xjP55TX/rTcowJbgws/jr91N1ueb2aYyfI1N5BA45Dg76i7nmk2pgqB qfEUJ3MvMNrQ== X-IronPort-AV: E=Sophos;i="5.78,368,1599548400"; d="scan'208";a="547237931" Received: from jhaitov-mobl.ger.corp.intel.com (HELO [10.214.246.84]) ([10.214.246.84]) by orsmga005-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Nov 2020 03:25:05 -0800 To: Chris Wilson , intel-gfx@lists.freedesktop.org References: <20201124233913.502412-1-chris@chris-wilson.co.uk> From: Tvrtko Ursulin Organization: Intel Corporation UK Plc Message-ID: <19055af3-0a6d-8949-1ba0-6796a2a1f677@linux.intel.com> Date: Wed, 25 Nov 2020 11:25:02 +0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 MIME-Version: 1.0 In-Reply-To: <20201124233913.502412-1-chris@chris-wilson.co.uk> Content-Language: en-US Subject: Re: [Intel-gfx] [igt-dev] [PATCH i-g-t] i915/gem_exec_schedule: Try to spot unfairness X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: igt-dev@lists.freedesktop.org Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" Ck9uIDI0LzExLzIwMjAgMjM6MzksIENocmlzIFdpbHNvbiB3cm90ZToKPiBBbiBpbXBvcnRhbnQg cHJvcGVydHkgZm9yIG11bHRpLWNsaWVudCBzeXN0ZW1zIGlzIHRoYXQgZWFjaCBjbGllbnQgZ2V0 cwo+IGEgJ2ZhaXInIGFsbG90bWVudCBvZiBzeXN0ZW0gdGltZS4gKFdoZXJlIGZhaXJuZXNzIGlz IGF0IHRoZSB3aGltIG9mIHRoZQo+IGNvbnRleHQgcHJvcGVydGllcywgc3VjaCBhcyBwcmlvcml0 aWVzLikgVGhpcyB0ZXN0IGZvcmtzIE4gaW5kZXBlbmRlbnQKPiBjbGllbnRzIChhbGJlaXQgdGhl eSBoYXBwZW4gdG8gc2hhcmUgYSBzaW5nbGUgdm0pLCBhbmQgZG9lcyBhbiBlcXVhbAo+IGFtb3Vu dCBvZiB3b3JrIGluIGNsaWVudCBhbmQgYXNzZXJ0cyB0aGF0IHRoZXkgdGFrZSBhbiBlcXVhbCBh bW91bnQgb2YKPiB0aW1lLgo+IAo+IFRob3VnaCB3ZSBoYXZlIG5ldmVyIGNsYWltZWQgdG8gaGF2 ZSBhIGNvbXBsZXRlbHkgZmFpciBzY2hlZHVsZXIsIHRoYXQKPiBpcyB3aGF0IGlzIGV4cGVjdGVk Lgo+IAo+IFNpZ25lZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNv LnVrPgo+IENjOiBUdnJ0a28gVXJzdWxpbiA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgo+IENj OiBSYW1hbGluZ2FtIEMgPHJhbWFsaW5nYW0uY0BpbnRlbC5jb20+Cj4gLS0tCj4gICB0ZXN0cy9p OTE1L2dlbV9leGVjX3NjaGVkdWxlLmMgfCA4NDcgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrCj4gICAxIGZpbGUgY2hhbmdlZCwgODQ3IGluc2VydGlvbnMoKykKPiAKPiBkaWZmIC0t Z2l0IGEvdGVzdHMvaTkxNS9nZW1fZXhlY19zY2hlZHVsZS5jIGIvdGVzdHMvaTkxNS9nZW1fZXhl Y19zY2hlZHVsZS5jCj4gaW5kZXggZjIzZDYzYWMzLi5kODg4ZWZjZDcgMTAwNjQ0Cj4gLS0tIGEv dGVzdHMvaTkxNS9nZW1fZXhlY19zY2hlZHVsZS5jCj4gKysrIGIvdGVzdHMvaTkxNS9nZW1fZXhl Y19zY2hlZHVsZS5jCj4gQEAgLTI5LDYgKzI5LDcgQEAKPiAgICNpbmNsdWRlIDxzeXMvcG9sbC5o Pgo+ICAgI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgo+ICAgI2luY2x1ZGUgPHN5cy9tbWFuLmg+Cj4g KyNpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4KPiAgICNpbmNsdWRlIDxzeXMvc3lzY2FsbC5oPgo+ ICAgI2luY2x1ZGUgPHNjaGVkLmg+Cj4gICAjaW5jbHVkZSA8c2lnbmFsLmg+Cj4gQEAgLTI1MTYs NiArMjUxNyw4MTkgQEAgc3RhdGljIHZvaWQgbWVhc3VyZV9zZW1hcGhvcmVfcG93ZXIoaW50IGk5 MTUpCj4gICAJcmFwbF9jbG9zZSgmcGtnKTsKPiAgIH0KPiAgIAo+ICtzdGF0aWMgaW50IHJlYWRf dGltZXN0YW1wX2ZyZXF1ZW5jeShpbnQgaTkxNSkKPiArewo+ICsJaW50IHZhbHVlID0gMDsKPiAr CWRybV9pOTE1X2dldHBhcmFtX3QgZ3AgPSB7Cj4gKwkJLnZhbHVlID0gJnZhbHVlLAo+ICsJCS5w YXJhbSA9IEk5MTVfUEFSQU1fQ1NfVElNRVNUQU1QX0ZSRVFVRU5DWSwKPiArCX07Cj4gKwlpb2N0 bChpOTE1LCBEUk1fSU9DVExfSTkxNV9HRVRQQVJBTSwgJmdwKTsKPiArCXJldHVybiB2YWx1ZTsK PiArfQo+ICsKPiArc3RhdGljIHVpbnQ2NF90IGRpdjY0X3U2NF9yb3VuZF91cCh1aW50NjRfdCB4 LCB1aW50NjRfdCB5KQo+ICt7Cj4gKwlyZXR1cm4gKHggKyB5IC0gMSkgLyB5Owo+ICt9Cj4gKwo+ ICtzdGF0aWMgdWludDY0X3QgbnNfdG9fY3R4X3RpY2tzKGludCBpOTE1LCB1aW50NjRfdCBucykK PiArewo+ICsJaW50IGYgPSByZWFkX3RpbWVzdGFtcF9mcmVxdWVuY3koaTkxNSk7Cj4gKwlpZiAo aW50ZWxfZ2VuKGludGVsX2dldF9kcm1fZGV2aWQoaTkxNSkpID09IDExKQo+ICsJCWYgPSAxMjUw MDAwMDsgLyogaWNsISEhIGFyZSB5b3UgZmVlbGluZyBhbHJpZ2h0PyBDVFggdnMgQ1MgKi8KPiAr CXJldHVybiBkaXY2NF91NjRfcm91bmRfdXAobnMgKiBmLCBOU0VDX1BFUl9TRUMpOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgdWludDY0X3QgdGlja3NfdG9fbnMoaW50IGk5MTUsIHVpbnQ2NF90IHRpY2tz KQo+ICt7Cj4gKwlyZXR1cm4gZGl2NjRfdTY0X3JvdW5kX3VwKHRpY2tzICogTlNFQ19QRVJfU0VD LAo+ICsJCQkJICByZWFkX3RpbWVzdGFtcF9mcmVxdWVuY3koaTkxNSkpOwo+ICt9Cj4gKwo+ICsj ZGVmaW5lIE1JX0lOU1RSKG9wY29kZSwgZmxhZ3MpICgoKG9wY29kZSkgPDwgMjMpIHwgKGZsYWdz KSkKPiArCj4gKyNkZWZpbmUgTUlfTUFUSCh4KSAgICAgICAgICAgICAgICAgICAgICBNSV9JTlNU UigweDFhLCAoeCkgLSAxKQo+ICsjZGVmaW5lIE1JX01BVEhfSU5TVFIob3Bjb2RlLCBvcDEsIG9w MikgKChvcGNvZGUpIDw8IDIwIHwgKG9wMSkgPDwgMTAgfCAob3AyKSkKPiArLyogT3Bjb2RlcyBm b3IgTUlfTUFUSF9JTlNUUiAqLwo+ICsjZGVmaW5lICAgTUlfTUFUSF9OT09QICAgICAgICAgICAg ICAgICAgTUlfTUFUSF9JTlNUUigweDAwMCwgMHgwLCAweDApCj4gKyNkZWZpbmUgICBNSV9NQVRI X0xPQUQob3AxLCBvcDIpICAgICAgICBNSV9NQVRIX0lOU1RSKDB4MDgwLCBvcDEsIG9wMikKPiAr I2RlZmluZSAgIE1JX01BVEhfTE9BRElOVihvcDEsIG9wMikgICAgIE1JX01BVEhfSU5TVFIoMHg0 ODAsIG9wMSwgb3AyKQo+ICsjZGVmaW5lICAgTUlfTUFUSF9MT0FEMChvcDEpICAgICAgICAgICAg TUlfTUFUSF9JTlNUUigweDA4MSwgb3AxKQo+ICsjZGVmaW5lICAgTUlfTUFUSF9MT0FEMShvcDEp ICAgICAgICAgICAgTUlfTUFUSF9JTlNUUigweDQ4MSwgb3AxKQo+ICsjZGVmaW5lICAgTUlfTUFU SF9BREQgICAgICAgICAgICAgICAgICAgTUlfTUFUSF9JTlNUUigweDEwMCwgMHgwLCAweDApCj4g KyNkZWZpbmUgICBNSV9NQVRIX1NVQiAgICAgICAgICAgICAgICAgICBNSV9NQVRIX0lOU1RSKDB4 MTAxLCAweDAsIDB4MCkKPiArI2RlZmluZSAgIE1JX01BVEhfQU5EICAgICAgICAgICAgICAgICAg IE1JX01BVEhfSU5TVFIoMHgxMDIsIDB4MCwgMHgwKQo+ICsjZGVmaW5lICAgTUlfTUFUSF9PUiAg ICAgICAgICAgICAgICAgICAgTUlfTUFUSF9JTlNUUigweDEwMywgMHgwLCAweDApCj4gKyNkZWZp bmUgICBNSV9NQVRIX1hPUiAgICAgICAgICAgICAgICAgICBNSV9NQVRIX0lOU1RSKDB4MTA0LCAw eDAsIDB4MCkKPiArI2RlZmluZSAgIE1JX01BVEhfU1RPUkUob3AxLCBvcDIpICAgICAgIE1JX01B VEhfSU5TVFIoMHgxODAsIG9wMSwgb3AyKQo+ICsjZGVmaW5lICAgTUlfTUFUSF9TVE9SRUlOVihv cDEsIG9wMikgICAgTUlfTUFUSF9JTlNUUigweDU4MCwgb3AxLCBvcDIpCj4gKy8qIFJlZ2lzdGVy cyB1c2VkIGFzIG9wZXJhbmRzIGluIE1JX01BVEhfSU5TVFIgKi8KPiArI2RlZmluZSAgIE1JX01B VEhfUkVHKHgpICAgICAgICAgICAgICAgICh4KQo+ICsjZGVmaW5lICAgTUlfTUFUSF9SRUdfU1JD QSAgICAgICAgICAgICAgMHgyMAo+ICsjZGVmaW5lICAgTUlfTUFUSF9SRUdfU1JDQiAgICAgICAg ICAgICAgMHgyMQo+ICsjZGVmaW5lICAgTUlfTUFUSF9SRUdfQUNDVSAgICAgICAgICAgICAgMHgz MQo+ICsjZGVmaW5lICAgTUlfTUFUSF9SRUdfWkYgICAgICAgICAgICAgICAgMHgzMgo+ICsjZGVm aW5lICAgTUlfTUFUSF9SRUdfQ0YgICAgICAgICAgICAgICAgMHgzMwo+ICsKPiArI2RlZmluZSBN SV9MT0FEX1JFR0lTVEVSX1JFRyAgICBNSV9JTlNUUigweDJBLCAxKQo+ICsKPiArc3RhdGljIHZv aWQgZGVsYXkoaW50IGk5MTUsCj4gKwkJICBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2Vu Z2luZTIgKmUsCj4gKwkJICB1aW50MzJfdCBoYW5kbGUsCj4gKwkJICB1aW50NjRfdCBhZGRyLAo+ ICsJCSAgdWludDY0X3QgbnMpCj4gK3sKPiArCWNvbnN0IGludCB1c2VfNjRiID0gaW50ZWxfZ2Vu KGludGVsX2dldF9kcm1fZGV2aWQoaTkxNSkpID49IDg7Cj4gKwljb25zdCB1aW50MzJfdCBiYXNl ID0gZ2VtX2VuZ2luZV9tbWlvX2Jhc2UoaTkxNSwgZS0+bmFtZSk7Cj4gKyNkZWZpbmUgQ1NfR1BS KHgpIChiYXNlICsgMHg2MDAgKyA4ICogKHgpKQo+ICsjZGVmaW5lIFJVTlRJTUUgKGJhc2UgKyAw eDNhOCkKPiArCWVudW0geyBTVEFSVF9UUywgTk9XX1RTIH07Cj4gKwl1aW50MzJfdCAqbWFwLCAq Y3MsICpqbXA7Cj4gKwo+ICsJaWd0X3JlcXVpcmUoYmFzZSk7Cj4gKwo+ICsJLyogTG9vcCB1bnRp bCBDVFhfVElNRVNUQU1QIC0gaW5pdGlhbCA+IEBucyAqLwo+ICsKPiArCWNzID0gbWFwID0gZ2Vt X21tYXBfX2RldmljZV9jb2hlcmVudChpOTE1LCBoYW5kbGUsIDAsIDQwOTYsIFBST1RfV1JJVEUp Owo+ICsKPiArCSpjcysrID0gTUlfTE9BRF9SRUdJU1RFUl9JTU07Cj4gKwkqY3MrKyA9IENTX0dQ UihTVEFSVF9UUykgKyA0Owo+ICsJKmNzKysgPSAwOwo+ICsJKmNzKysgPSBNSV9MT0FEX1JFR0lT VEVSX1JFRzsKPiArCSpjcysrID0gUlVOVElNRTsKPiArCSpjcysrID0gQ1NfR1BSKFNUQVJUX1RT KTsKPiArCj4gKwl3aGlsZSAob2Zmc2V0X2luX3BhZ2UoY3MpICYgNjMpCj4gKwkJKmNzKysgPSAw Owo+ICsJam1wID0gY3M7Cj4gKwo+ICsJKmNzKysgPSAweDUgPDwgMjM7IC8qIE1JX0FSQl9DSEVD SyAqLwo+ICsKPiArCSpjcysrID0gTUlfTE9BRF9SRUdJU1RFUl9JTU07Cj4gKwkqY3MrKyA9IENT X0dQUihOT1dfVFMpICsgNDsKPiArCSpjcysrID0gMDsKPiArCSpjcysrID0gTUlfTE9BRF9SRUdJ U1RFUl9SRUc7Cj4gKwkqY3MrKyA9IFJVTlRJTUU7Cj4gKwkqY3MrKyA9IENTX0dQUihOT1dfVFMp Owo+ICsKPiArCS8qIGRlbHRhID0gbm93IC0gc3RhcnQ7IGludmVydGVkIHRvIG1hdGNoIENPTkRf QkJFICovCj4gKwkqY3MrKyA9IE1JX01BVEgoNCk7Cj4gKwkqY3MrKyA9IE1JX01BVEhfTE9BRChN SV9NQVRIX1JFR19TUkNBLCBNSV9NQVRIX1JFRyhOT1dfVFMpKTsKPiArCSpjcysrID0gTUlfTUFU SF9MT0FEKE1JX01BVEhfUkVHX1NSQ0IsIE1JX01BVEhfUkVHKFNUQVJUX1RTKSk7Cj4gKwkqY3Mr KyA9IE1JX01BVEhfU1VCOwo+ICsJKmNzKysgPSBNSV9NQVRIX1NUT1JFSU5WKE1JX01BVEhfUkVH KE5PV19UUyksIE1JX01BVEhfUkVHX0FDQ1UpOwo+ICsKPiArCS8qIFNhdmUgZGVsdGEgZm9yIHJl YWRpbmcgYnkgQ09ORF9CQkUgKi8KPiArCSpjcysrID0gMHgyNCA8PCAyMyB8ICgxICsgdXNlXzY0 Yik7IC8qIFNSTSAqLwo+ICsJKmNzKysgPSBDU19HUFIoTk9XX1RTKTsKPiArCSpjcysrID0gYWRk ciArIDQwMDA7Cj4gKwkqY3MrKyA9IGFkZHIgPj4gMzI7Cj4gKwo+ICsJLyogRGVsYXkgYmV0d2Vl biBTUk0gYW5kIENPTkRfQkJFIHRvIHBvc3QgdGhlIHdyaXRlcyAqLwo+ICsJZm9yIChpbnQgbiA9 IDA7IG4gPCA4OyBuKyspIHsKPiArCQkqY3MrKyA9IE1JX1NUT1JFX0RXT1JEX0lNTTsKPiArCQlp ZiAodXNlXzY0Yikgewo+ICsJCQkqY3MrKyA9IGFkZHIgKyA0MDY0Owo+ICsJCQkqY3MrKyA9IGFk ZHIgPj4gMzI7Cj4gKwkJfSBlbHNlIHsKPiArCQkJKmNzKysgPSAwOwo+ICsJCQkqY3MrKyA9IGFk ZHIgKyA0MDY0Owo+ICsJCX0KPiArCQkqY3MrKyA9IDA7Cj4gKwl9Cj4gKwo+ICsJLyogQnJlYWsg aWYgZGVsdGEgW3RpbWUgZWxhcHNlZF0gPiBucyAqLwo+ICsJKmNzKysgPSBNSV9DT05EX0JBVENI X0JVRkZFUl9FTkQgfCBNSV9ET19DT01QQVJFIHwgKDEgKyB1c2VfNjRiKTsKPiArCSpjcysrID0g fm5zX3RvX2N0eF90aWNrcyhpOTE1LCBucyk7Cj4gKwkqY3MrKyA9IGFkZHIgKyA0MDAwOwo+ICsJ KmNzKysgPSBhZGRyID4+IDMyOwo+ICsKPiArCS8qIE90aGVyd2lzZSBiYWNrIHRvIHJlY2FsY3Vs YXRpbmcgZGVsdGEgKi8KPiArCSpjcysrID0gTUlfQkFUQ0hfQlVGRkVSX1NUQVJUIHwgMSA8PCA4 IHwgdXNlXzY0YjsKPiArCSpjcysrID0gYWRkciArIG9mZnNldF9pbl9wYWdlKGptcCk7Cj4gKwkq Y3MrKyA9IGFkZHIgPj4gMzI7Cj4gKwo+ICsJbXVubWFwKG1hcCwgNDA5Nik7Cj4gK30KPiArCj4g K3N0YXRpYyBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0Mgo+ICtkZWxheV9jcmVhdGUo aW50IGk5MTUsIHVpbnQzMl90IGN0eCwKPiArCSAgICAgY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1 dGlvbl9lbmdpbmUyICplLAo+ICsJICAgICB1aW50NjRfdCB0YXJnZXRfbnMpCj4gK3sKPiArCXN0 cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIG9iaiA9IHsKPiArCQkuaGFuZGxlID0gYmF0 Y2hfY3JlYXRlKGk5MTUpLAo+ICsJCS5mbGFncyA9IEVYRUNfT0JKRUNUX1NVUFBPUlRTXzQ4Ql9B RERSRVNTLAo+ICsJfTsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1 ZiA9IHsKPiArCQkuYnVmZmVyc19wdHIgPSB0b191c2VyX3BvaW50ZXIoJm9iaiksCj4gKwkJLmJ1 ZmZlcl9jb3VudCA9IDEsCj4gKwkJLnJzdmQxID0gY3R4LAo+ICsJCS5mbGFncyA9IGUtPmZsYWdz LAo+ICsJfTsKPiArCj4gKwlvYmoub2Zmc2V0ID0gb2JqLmhhbmRsZSA8PCAxMjsKPiArCWdlbV9l eGVjYnVmKGk5MTUsICZleGVjYnVmKTsKPiArCWdlbV9zeW5jKGk5MTUsIG9iai5oYW5kbGUpOwo+ ICsKPiArCWRlbGF5KGk5MTUsIGUsIG9iai5oYW5kbGUsIG9iai5vZmZzZXQsIHRhcmdldF9ucyk7 Cj4gKwo+ICsJb2JqLmZsYWdzIHw9IEVYRUNfT0JKRUNUX1BJTk5FRDsKPiArCXJldHVybiBvYmo7 Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHRzbG9nKGludCBpOTE1LAo+ICsJCSAgY29uc3Qgc3Ry dWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplLAo+ICsJCSAgdWludDMyX3QgaGFuZGxlLAo+ ICsJCSAgdWludDY0X3QgYWRkcikKPiArewo+ICsJY29uc3QgaW50IHVzZV82NGIgPSBpbnRlbF9n ZW4oaW50ZWxfZ2V0X2RybV9kZXZpZChpOTE1KSkgPj0gODsKPiArCWNvbnN0IHVpbnQzMl90IGJh c2UgPSBnZW1fZW5naW5lX21taW9fYmFzZShpOTE1LCBlLT5uYW1lKTsKPiArI2RlZmluZSBDU19H UFIoeCkgKGJhc2UgKyAweDYwMCArIDggKiAoeCkpCj4gKyNkZWZpbmUgQ1NfVElNRVNUQU1QIChi YXNlICsgMHgzNTgpCj4gKwllbnVtIHsgSU5DLCBNQVNLLCBBRERSIH07Cj4gKwl1aW50MzJfdCAq dGltZXN0YW1wX2xvLCAqYWRkcl9sbzsKPiArCXVpbnQzMl90ICptYXAsICpjczsKPiArCj4gKwlp Z3RfcmVxdWlyZShiYXNlKTsKPiArCj4gKwltYXAgPSBnZW1fbW1hcF9fZGV2aWNlX2NvaGVyZW50 KGk5MTUsIGhhbmRsZSwgMCwgNDA5NiwgUFJPVF9XUklURSk7Cj4gKwljcyA9IG1hcCArIDUxMjsK PiArCj4gKwkvKiBSZWNvcmQgdGhlIGN1cnJlbnQgQ1NfVElNRVNUQU1QIGludG8gYSBqb3VybmFs IFthIDUxMiBzbG90IHJpbmddLiAqLwo+ICsJKmNzKysgPSAweDI0IDw8IDIzIHwgKDEgKyB1c2Vf NjRiKTsgLyogU1JNICovCj4gKwkqY3MrKyA9IENTX1RJTUVTVEFNUDsKPiArCXRpbWVzdGFtcF9s byA9IGNzOwo+ICsJKmNzKysgPSBhZGRyOwo+ICsJKmNzKysgPSBhZGRyID4+IDMyOwo+ICsKPiAr CS8qIExvYWQgdGhlIGFkZHJlc3MgKyBpbmMgJiBtYXNrIHZhcmlhYmxlcyAqLwo+ICsJKmNzKysg PSBNSV9MT0FEX1JFR0lTVEVSX0lNTTsKPiArCSpjcysrID0gQ1NfR1BSKEFERFIpOwo+ICsJYWRk cl9sbyA9IGNzOwo+ICsJKmNzKysgPSBhZGRyOwo+ICsJKmNzKysgPSBNSV9MT0FEX1JFR0lTVEVS X0lNTTsKPiArCSpjcysrID0gQ1NfR1BSKEFERFIpICsgNDsKPiArCSpjcysrID0gYWRkciA+PiAz MjsKPiArCj4gKwkqY3MrKyA9IE1JX0xPQURfUkVHSVNURVJfSU1NOwo+ICsJKmNzKysgPSBDU19H UFIoSU5DKTsKPiArCSpjcysrID0gNDsKPiArCSpjcysrID0gTUlfTE9BRF9SRUdJU1RFUl9JTU07 Cj4gKwkqY3MrKyA9IENTX0dQUihJTkMpICsgNDsKPiArCSpjcysrID0gMDsKPiArCj4gKwkqY3Mr KyA9IE1JX0xPQURfUkVHSVNURVJfSU1NOwo+ICsJKmNzKysgPSBDU19HUFIoTUFTSyk7Cj4gKwkq Y3MrKyA9IDB4ZmZmZmY3ZmY7Cj4gKwkqY3MrKyA9IE1JX0xPQURfUkVHSVNURVJfSU1NOwo+ICsJ KmNzKysgPSBDU19HUFIoTUFTSykgKyA0Owo+ICsJKmNzKysgPSAweGZmZmZmZmZmOwo+ICsKPiAr CS8qIEluY3JlbWVudCB0aGUgW3JpbmddIGFkZHJlc3MgZm9yIHNhdmluZyBDU19USU1FU1RBTVAg Ki8KPiArCSpjcysrID0gTUlfTUFUSCg4KTsKPiArCSpjcysrID0gTUlfTUFUSF9MT0FEKE1JX01B VEhfUkVHX1NSQ0EsIE1JX01BVEhfUkVHKElOQykpOwo+ICsJKmNzKysgPSBNSV9NQVRIX0xPQUQo TUlfTUFUSF9SRUdfU1JDQiwgTUlfTUFUSF9SRUcoQUREUikpOwo+ICsJKmNzKysgPSBNSV9NQVRI X0FERDsKPiArCSpjcysrID0gTUlfTUFUSF9TVE9SRShNSV9NQVRIX1JFRyhBRERSKSwgTUlfTUFU SF9SRUdfQUNDVSk7Cj4gKwkqY3MrKyA9IE1JX01BVEhfTE9BRChNSV9NQVRIX1JFR19TUkNBLCBN SV9NQVRIX1JFRyhBRERSKSk7Cj4gKwkqY3MrKyA9IE1JX01BVEhfTE9BRChNSV9NQVRIX1JFR19T UkNCLCBNSV9NQVRIX1JFRyhNQVNLKSk7Cj4gKwkqY3MrKyA9IE1JX01BVEhfQU5EOwo+ICsJKmNz KysgPSBNSV9NQVRIX1NUT1JFKE1JX01BVEhfUkVHKEFERFIpLCBNSV9NQVRIX1JFR19BQ0NVKTsK PiArCj4gKwkvKiBSZXdyaXRlIHRoZSBiYXRjaCBidWZmZXIgZm9yIHRoZSBuZXh0IGV4ZWN1dGlv biAqLwo+ICsJKmNzKysgPSAweDI0IDw8IDIzIHwgKDEgKyB1c2VfNjRiKTsgLyogU1JNICovCj4g KwkqY3MrKyA9IENTX0dQUihBRERSKTsKPiArCSpjcysrID0gYWRkciArIG9mZnNldF9pbl9wYWdl KHRpbWVzdGFtcF9sbyk7Cj4gKwkqY3MrKyA9IGFkZHIgPj4gMzI7Cj4gKwkqY3MrKyA9IDB4MjQg PDwgMjMgfCAoMSArIHVzZV82NGIpOyAvKiBTUk0gKi8KPiArCSpjcysrID0gQ1NfR1BSKEFERFIp Owo+ICsJKmNzKysgPSBhZGRyICsgb2Zmc2V0X2luX3BhZ2UoYWRkcl9sbyk7Cj4gKwkqY3MrKyA9 IGFkZHIgPj4gMzI7Cj4gKwo+ICsJKmNzKysgPSBNSV9CQVRDSF9CVUZGRVJfRU5EOwo+ICsKPiAr CW11bm1hcChtYXAsIDQwOTYpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGRybV9pOTE1X2dl bV9leGVjX29iamVjdDIKPiArdHNsb2dfY3JlYXRlKGludCBpOTE1LCB1aW50MzJfdCBjdHgsIGNv bnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZSkKPiArewo+ICsJc3RydWN0IGRy bV9pOTE1X2dlbV9leGVjX29iamVjdDIgb2JqID0gewo+ICsJCS5oYW5kbGUgPSBiYXRjaF9jcmVh dGUoaTkxNSksCj4gKwkJLmZsYWdzID0gRVhFQ19PQkpFQ1RfU1VQUE9SVFNfNDhCX0FERFJFU1Ms Cj4gKwl9Owo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBleGVjYnVmID0gewo+ ICsJCS5idWZmZXJzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcigmb2JqKSwKPiArCQkuYnVmZmVyX2Nv dW50ID0gMSwKPiArCQkucnN2ZDEgPSBjdHgsCj4gKwkJLmZsYWdzID0gZS0+ZmxhZ3MsCj4gKwl9 Owo+ICsKPiArCW9iai5vZmZzZXQgPSBvYmouaGFuZGxlIDw8IDEyOwo+ICsJZ2VtX2V4ZWNidWYo aTkxNSwgJmV4ZWNidWYpOwo+ICsJZ2VtX3N5bmMoaTkxNSwgb2JqLmhhbmRsZSk7Cj4gKwo+ICsJ dHNsb2coaTkxNSwgZSwgb2JqLmhhbmRsZSwgb2JqLm9mZnNldCk7Cj4gKwo+ICsJb2JqLmZsYWdz IHw9IEVYRUNfT0JKRUNUX1BJTk5FRDsKPiArCXJldHVybiBvYmo7Cj4gK30KPiArCj4gK3N0YXRp YyBpbnQgY21wX3UzMihjb25zdCB2b2lkICpBLCBjb25zdCB2b2lkICpCKQo+ICt7Cj4gKwljb25z dCB1aW50MzJfdCAqYSA9IEEsICpiID0gQjsKPiArCj4gKwlpZiAoKmEgPCAqYikKPiArCQlyZXR1 cm4gLTE7Cj4gKwllbHNlIGlmICgqYSA+ICpiKQo+ICsJCXJldHVybiAxOwo+ICsJZWxzZQo+ICsJ CXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBoYXNfY3R4X3RpbWVzdGFtcChpbnQg aTkxNSwgY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplKQo+ICt7Cj4gKwlj b25zdCBpbnQgZ2VuID0gaW50ZWxfZ2VuKGludGVsX2dldF9kcm1fZGV2aWQoaTkxNSkpOwo+ICsK PiArCWlmIChnZW4gPT0gOCAmJiBlLT5jbGFzcyA9PSBJOTE1X0VOR0lORV9DTEFTU19WSURFTykK PiArCQlyZXR1cm4gZmFsc2U7IC8qIGxvb2tzIGZ1YmFyICovCj4gKwo+ICsJcmV0dXJuIHRydWU7 Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIKPiArcGlj a19yYW5kb21fZW5naW5lKGludCBpOTE1LCBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2Vu Z2luZTIgKm5vdCkKPiArewo+ICsJY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUy ICplOwo+ICsJdW5zaWduZWQgaW50IGNvdW50ID0gMDsKPiArCj4gKwlfX2Zvcl9lYWNoX3BoeXNp Y2FsX2VuZ2luZShpOTE1LCBlKSB7Cj4gKwkJaWYgKGUtPmZsYWdzID09IG5vdC0+ZmxhZ3MpCj4g KwkJCWNvbnRpbnVlOwo+ICsJCWlmICghZ2VtX2NsYXNzX2hhc19tdXRhYmxlX3N1Ym1pc3Npb24o aTkxNSwgZS0+Y2xhc3MpKQo+ICsJCQljb250aW51ZTsKPiArCQljb3VudCsrOwo+ICsJfQo+ICsJ aWYgKCFjb3VudCkKPiArCQlyZXR1cm4gKm5vdDsKPiArCj4gKwljb3VudCA9IHJhbmQoKSAlIGNv dW50Owo+ICsJX19mb3JfZWFjaF9waHlzaWNhbF9lbmdpbmUoaTkxNSwgZSkgewo+ICsJCWlmIChl LT5mbGFncyA9PSBub3QtPmZsYWdzKQo+ICsJCQljb250aW51ZTsKPiArCQlpZiAoIWdlbV9jbGFz c19oYXNfbXV0YWJsZV9zdWJtaXNzaW9uKGk5MTUsIGUtPmNsYXNzKSkKPiArCQkJY29udGludWU7 Cj4gKwkJaWYgKCFjb3VudC0tKQo+ICsJCQlicmVhazsKPiArCX0KPiArCj4gKwlyZXR1cm4gKmU7 Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGZhaXJfY2hpbGQoaW50IGk5MTUsIHVpbnQzMl90IGN0 eCwKPiArCQkgICAgICAgY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplLAo+ ICsJCSAgICAgICB1aW50NjRfdCBmcmFtZV9ucywKPiArCQkgICAgICAgaW50IHRpbWVsaW5lLAo+ ICsJCSAgICAgICB1aW50MzJfdCBjb21tb24sCj4gKwkJICAgICAgIHVuc2lnbmVkIGludCBmbGFn cywKPiArCQkgICAgICAgdW5zaWduZWQgbG9uZyAqY3RsLAo+ICsJCSAgICAgICB1bnNpZ25lZCBs b25nICpvdXQpCj4gKyNkZWZpbmUgRl9TWU5DCQkoMSA8PCAwKQo+ICsjZGVmaW5lIEZfUEFDRQkJ KDEgPDwgMSkKPiArI2RlZmluZSBGX0ZMT1cJCSgxIDw8IDIpCj4gKyNkZWZpbmUgRl9IQUxGCQko MSA8PCAzKQo+ICsjZGVmaW5lIEZfU09MTwkJKDEgPDwgNCkKPiArI2RlZmluZSBGX1NQQVJFCQko MSA8PCA1KQo+ICsjZGVmaW5lIEZfTkVYVAkJKDEgPDwgNikKPiArI2RlZmluZSBGX1ZJUAkJKDEg PDwgNykKPiArI2RlZmluZSBGX1JSVUwJCSgxIDw8IDgpCj4gKyNkZWZpbmUgRl9TSEFSRQkJKDEg PDwgOSkKPiArI2RlZmluZSBGX1BJTkcJCSgxIDw8IDEwKQo+ICsjZGVmaW5lIEZfVEhST1RUTEUJ KDEgPDwgMTEpCj4gKyNkZWZpbmUgRl9JU09MQVRFCSgxIDw8IDEyKQo+ICt7Cj4gKwljb25zdCBp bnQgYmF0Y2hlc19wZXJfZnJhbWUgPSBmbGFncyAmIEZfU09MTyA/IDEgOiAzOwo+ICsJc3RydWN0 IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgb2JqWzRdID0gewo+ICsJCXt9LAo+ICsJCXsKPiAr CQkJLmhhbmRsZSA9IGNvbW1vbiA/OiBnZW1fY3JlYXRlKGk5MTUsIDQwOTYpLAo+ICsJCX0sCj4g KwkJZGVsYXlfY3JlYXRlKGk5MTUsIGN0eCwgZSwgZnJhbWVfbnMgLyBiYXRjaGVzX3Blcl9mcmFt ZSksCj4gKwkJZGVsYXlfY3JlYXRlKGk5MTUsIGN0eCwgZSwgZnJhbWVfbnMgLyBiYXRjaGVzX3Bl cl9mcmFtZSksCj4gKwl9Owo+ICsJc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyIHBpbmcg PSAqZTsKPiArCWludCBwX2ZlbmNlID0gLTEsIG5fZmVuY2UgPSAtMTsKPiArCXVuc2lnbmVkIGxv bmcgY291bnQgPSAwOwo+ICsJaW50IG47Cj4gKwo+ICsJc3JhbmRvbShnZXRwaWQoKSk7Cj4gKwlp ZiAoZmxhZ3MgJiBGX1BJTkcpCj4gKwkJcGluZyA9IHBpY2tfcmFuZG9tX2VuZ2luZShpOTE1LCBl KTsKPiArCW9ialswXSA9IHRzbG9nX2NyZWF0ZShpOTE1LCBjdHgsICZwaW5nKTsKPiArCj4gKwl3 aGlsZSAoIVJFQURfT05DRSgqY3RsKSkgewo+ICsJCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1 ZmZlcjIgZXhlY2J1ZiA9IHsKPiArCQkJLmJ1ZmZlcnNfcHRyID0gdG9fdXNlcl9wb2ludGVyKG9i aiksCj4gKwkJCS5idWZmZXJfY291bnQgPSA0LAo+ICsJCQkucnN2ZDEgPSBjdHgsCj4gKwkJCS5y c3ZkMiA9IC0xLAo+ICsJCQkuZmxhZ3MgPSBlLT5mbGFncywKPiArCQl9Owo+ICsKPiArCQlpZiAo ZmxhZ3MgJiBGX0ZMT1cpIHsKPiArCQkJdW5zaWduZWQgaW50IHNlcTsKPiArCj4gKwkJCXNlcSA9 IGNvdW50Owo+ICsJCQlpZiAoZmxhZ3MgJiBGX05FWFQpCj4gKwkJCQlzZXErKzsKPiArCj4gKwkJ CWV4ZWNidWYucnN2ZDIgPQo+ICsJCQkJc3dfc3luY190aW1lbGluZV9jcmVhdGVfZmVuY2UodGlt ZWxpbmUsIHNlcSk7Cj4gKwkJCWV4ZWNidWYuZmxhZ3MgfD0gSTkxNV9FWEVDX0ZFTkNFX0lOOwo+ ICsJCX0KPiArCj4gKwkJZXhlY2J1Zi5mbGFncyB8PSBJOTE1X0VYRUNfRkVOQ0VfT1VUOwo+ICsJ CWdlbV9leGVjYnVmX3dyKGk5MTUsICZleGVjYnVmKTsKPiArCQluX2ZlbmNlID0gZXhlY2J1Zi5y c3ZkMiA+PiAzMjsKPiArCQlleGVjYnVmLmZsYWdzICY9IH4oSTkxNV9FWEVDX0ZFTkNFX09VVCB8 IEk5MTVfRVhFQ19GRU5DRV9JTik7Cj4gKwkJZm9yIChuID0gMTsgbiA8IGJhdGNoZXNfcGVyX2Zy YW1lOyBuKyspCj4gKwkJCWdlbV9leGVjYnVmKGk5MTUsICZleGVjYnVmKTsKPiArCQljbG9zZShl eGVjYnVmLnJzdmQyKTsKPiArCj4gKwkJZXhlY2J1Zi5idWZmZXJfY291bnQgPSAxOwo+ICsJCWV4 ZWNidWYuYmF0Y2hfc3RhcnRfb2Zmc2V0ID0gMjA0ODsKPiArCQlleGVjYnVmLmZsYWdzID0gcGlu Zy5mbGFncyB8IEk5MTVfRVhFQ19GRU5DRV9JTjsKPiArCQlleGVjYnVmLnJzdmQyID0gbl9mZW5j ZTsKPiArCQlnZW1fZXhlY2J1ZihpOTE1LCAmZXhlY2J1Zik7Cj4gKwo+ICsJCWlmIChmbGFncyAm IEZfUEFDRSAmJiBwX2ZlbmNlICE9IC0xKSB7Cj4gKwkJCXN0cnVjdCBwb2xsZmQgcGZkID0gewo+ ICsJCQkJLmZkID0gcF9mZW5jZSwKPiArCQkJCS5ldmVudHMgPSBQT0xMSU4sCj4gKwkJCX07Cj4g KwkJCXBvbGwoJnBmZCwgMSwgLTEpOwo+ICsJCX0KPiArCQljbG9zZShwX2ZlbmNlKTsKPiArCj4g KwkJaWYgKGZsYWdzICYgRl9TWU5DKSB7Cj4gKwkJCXN0cnVjdCBwb2xsZmQgcGZkID0gewo+ICsJ CQkJLmZkID0gbl9mZW5jZSwKPiArCQkJCS5ldmVudHMgPSBQT0xMSU4sCj4gKwkJCX07Cj4gKwkJ CXBvbGwoJnBmZCwgMSwgLTEpOwo+ICsJCX0KPiArCj4gKwkJaWYgKGZsYWdzICYgRl9USFJPVFRM RSkKPiArCQkJaWd0X2lvY3RsKGk5MTUsIERSTV9JT0NUTF9JOTE1X0dFTV9USFJPVFRMRSwgMCk7 Cj4gKwo+ICsJCWlndF9zd2FwKG9ialsyXSwgb2JqWzNdKTsKPiArCQlpZ3Rfc3dhcChwX2ZlbmNl LCBuX2ZlbmNlKTsKCldoYXQgYXJlIHRoZSBzeW5jIGZlbmNlcyBzaW11bGF0aW5nIGFuZCBob3cg Y29tZSB0aGV5IGFyZSBhbHdheXMgdXNlZD8gSSAKbWVhbiBubyBjaGlsZHJlbiB3aGljaCBzdWJt aXQgYmF0Y2hlZCB1cCBsb2FkPwoKPiArCQljb3VudCsrOwo+ICsJfQo+ICsJY2xvc2UocF9mZW5j ZSk7Cj4gKwo+ICsJZ2VtX2Nsb3NlKGk5MTUsIG9ialszXS5oYW5kbGUpOwo+ICsJZ2VtX2Nsb3Nl KGk5MTUsIG9ialsyXS5oYW5kbGUpOwo+ICsJaWYgKG9ialsxXS5oYW5kbGUgIT0gY29tbW9uKQo+ ICsJCWdlbV9jbG9zZShpOTE1LCBvYmpbMV0uaGFuZGxlKTsKPiArCj4gKwlnZW1fc3luYyhpOTE1 LCBvYmpbMF0uaGFuZGxlKTsKPiArCWlmIChvdXQpIHsKPiArCQl1aW50MzJfdCAqbWFwOwo+ICsK PiArCQltYXAgPSBnZW1fbW1hcF9fZGV2aWNlX2NvaGVyZW50KGk5MTUsIG9ialswXS5oYW5kbGUs Cj4gKwkJCQkJCTAsIDQwOTYsIFBST1RfV1JJVEUpOwo+ICsJCWZvciAobiA9IDE7IG4gPCBtaW4o Y291bnQsIDUxMik7IG4rKykgewo+ICsJCQlpZ3RfYXNzZXJ0KG1hcFtuXSk7Cj4gKwkJCW1hcFtu IC0gMV0gPSBtYXBbbl0gLSBtYXBbbiAtIDFdOwo+ICsJCX0KPiArCQlxc29ydChtYXAsIC0tbiwg c2l6ZW9mKCptYXApLCBjbXBfdTMyKTsKPiArCQkqb3V0ID0gdGlja3NfdG9fbnMoaTkxNSwgbWFw W24gLyAyXSk7CgpXaGF0IGlzIHJldHVybmVkPyBDb3VsZCB5b3UgZXhwbGFpbiB0aGUgdHMgam91 cm5hbCBwYXJ0IGEgYml0PwoKPiArCQltdW5tYXAobWFwLCA0MDk2KTsKPiArCX0KPiArCWdlbV9j bG9zZShpOTE1LCBvYmpbMF0uaGFuZGxlKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBjbXBfdWwo Y29uc3Qgdm9pZCAqQSwgY29uc3Qgdm9pZCAqQikKPiArewo+ICsJY29uc3QgdW5zaWduZWQgbG9u ZyAqYSA9IEEsICpiID0gQjsKPiArCj4gKwlpZiAoKmEgPCAqYikKPiArCQlyZXR1cm4gLTE7Cj4g KwllbHNlIGlmICgqYSA+ICpiKQo+ICsJCXJldHVybiAxOwo+ICsJZWxzZQo+ICsJCXJldHVybiAw Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdWludDY0X3QgZF9jcHVfdGltZShjb25zdCBzdHJ1Y3QgcnVz YWdlICphLCBjb25zdCBzdHJ1Y3QgcnVzYWdlICpiKQo+ICt7Cj4gKwl1aW50NjRfdCBjcHVfdGlt ZSA9IDA7Cj4gKwo+ICsJY3B1X3RpbWUgKz0gKGEtPnJ1X3V0aW1lLnR2X3NlYyAtIGItPnJ1X3V0 aW1lLnR2X3NlYykgKiBOU0VDX1BFUl9TRUM7Cj4gKwljcHVfdGltZSArPSAoYS0+cnVfdXRpbWUu dHZfdXNlYyAtIGItPnJ1X3V0aW1lLnR2X3VzZWMpICogMTAwMDsKPiArCj4gKwljcHVfdGltZSAr PSAoYS0+cnVfc3RpbWUudHZfc2VjIC0gYi0+cnVfc3RpbWUudHZfc2VjKSAqIE5TRUNfUEVSX1NF QzsKPiArCWNwdV90aW1lICs9IChhLT5ydV9zdGltZS50dl91c2VjIC0gYi0+cnVfc3RpbWUudHZf dXNlYykgKiAxMDAwOwo+ICsKPiArCXJldHVybiBjcHVfdGltZTsKPiArfQo+ICsKPiArc3RhdGlj IHZvaWQgdGltZWxpbmVfYWR2YW5jZShpbnQgdGltZWxpbmUsIGludCBkZWxheV9ucykKPiArewo+ ICsJc3RydWN0IHRpbWVzcGVjIHR2ID0geyAudHZfbnNlYyA9IGRlbGF5X25zIH07Cj4gKwluYW5v c2xlZXAoJnR2LCBOVUxMKTsKPiArCXN3X3N5bmNfdGltZWxpbmVfaW5jKHRpbWVsaW5lLCAxKTsK PiArfQo+ICsKPiArc3RhdGljIHZvaWQgZmFpcm5lc3MoaW50IGk5MTUsCj4gKwkJICAgICBjb25z dCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUsCj4gKwkJICAgICBpbnQgdGltZW91 dCwgdW5zaWduZWQgaW50IGZsYWdzKQo+ICt7Cj4gKwljb25zdCBpbnQgZnJhbWVfbnMgPSAxNjY2 NiAqIDEwMDA7Cj4gKwljb25zdCBpbnQgZmVuY2VfbnMgPSBmbGFncyAmIEZfSEFMRiA/IDIgKiBm cmFtZV9ucyA6IGZyYW1lX25zOwo+ICsJdW5zaWduZWQgbG9uZyAqcmVzdWx0Owo+ICsJdWludDMy X3QgY29tbW9uID0gMDsKPiArCj4gKwlpZ3RfcmVxdWlyZShoYXNfY3R4X3RpbWVzdGFtcChpOTE1 LCBlKSk7Cj4gKwlpZ3RfcmVxdWlyZShnZW1fY2xhc3NfaGFzX211dGFibGVfc3VibWlzc2lvbihp OTE1LCBlLT5jbGFzcykpOwo+ICsKPiArCWlmIChmbGFncyAmIEZfU0hBUkUpCj4gKwkJY29tbW9u ID0gZ2VtX2NyZWF0ZShpOTE1LCA0MDk1KTsKPiArCj4gKwlyZXN1bHQgPSBtbWFwKE5VTEwsIDQw OTYsIFBST1RfV1JJVEUsIE1BUF9TSEFSRUQgfCBNQVBfQU5PTiwgLTEsIDApOwo+ICsKPiArCWZv ciAoaW50IG4gPSAyOyBuIDw9IDY0OyBuIDw8PSAxKSB7IC8qIDMyID09IDUwMHVzIHBlciBjbGll bnQgKi8KPiArCQlpbnQgdGltZWxpbmUgPSBzd19zeW5jX3RpbWVsaW5lX2NyZWF0ZSgpOwo+ICsJ CWludCBuZmVuY2VzID0gdGltZW91dCAqIE5TRUNfUEVSX1NFQyAvIGZlbmNlX25zICsgMTsKPiAr CQljb25zdCBpbnQgbmNoaWxkID0gbiAtIDE7IC8qIG9kZCBmb3IgZWFzeSBtZWRpYW5zICovCj4g KwkJY29uc3QgaW50IGNoaWxkX25zID0gZnJhbWVfbnMgLyAobmNoaWxkICsgISEoZmxhZ3MgJiBG X1NQQVJFKSk7Cj4gKwkJY29uc3QgaW50IGxvID0gbmNoaWxkIC8gNDsKPiArCQljb25zdCBpbnQg aGkgPSAoMyAqIG5jaGlsZCArIDMpIC8gNCAtIDE7Cj4gKwkJc3RydWN0IHJ1c2FnZSBvbGRfdXNh Z2UsIHVzYWdlOwo+ICsJCXVpbnQ2NF90IGNwdV90aW1lLCBkX3RpbWU7Cj4gKwkJdW5zaWduZWQg bG9uZyB2aXAgPSAtMTsKPiArCQlzdHJ1Y3QgdGltZXNwZWMgdHY7Cj4gKwkJc3RydWN0IGlndF9t ZWFuIG07Cj4gKwo+ICsJCWlmIChmbGFncyAmIEZfUElORykgewo+ICsJCQlzdHJ1Y3QgaW50ZWxf ZXhlY3V0aW9uX2VuZ2luZTIgKnBpbmc7Cj4gKwo+ICsJCQlfX2Zvcl9lYWNoX3BoeXNpY2FsX2Vu Z2luZShpOTE1LCBwaW5nKSB7Cj4gKwkJCQlpZiAocGluZy0+ZmxhZ3MgPT0gZS0+ZmxhZ3MpCj4g KwkJCQkJY29udGludWU7Cj4gKwo+ICsJCQkJaWd0X2ZvcmsoY2hpbGQsIDEpIHsKPiArCQkJCQl1 aW50MzJfdCBjdHggPSBnZW1fY29udGV4dF9jbG9uZV93aXRoX2VuZ2luZXMoaTkxNSwgMCk7Cj4g Kwo+ICsJCQkJCWZhaXJfY2hpbGQoaTkxNSwgY3R4LCBwaW5nLAo+ICsJCQkJCQkgICBjaGlsZF9u cyAvIDgsCj4gKwkJCQkJCSAgIC0xLCBjb21tb24sCj4gKwkJCQkJCSAgIEZfU09MTyB8IEZfUEFD RSB8IEZfU0hBUkUsCj4gKwkJCQkJCSAgICZyZXN1bHRbbmNoaWxkXSwKPiArCQkJCQkJICAgTlVM TCk7Cj4gKwo+ICsJCQkJCWdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwgY3R4KTsKPiArCQkJCX0K PiArCQkJfQo+ICsJCX0KPiArCj4gKwkJbWVtc2V0KHJlc3VsdCwgMCwgKG5jaGlsZCArIDEpICog c2l6ZW9mKHJlc3VsdFswXSkpOwoKQ2hpbGRyZW4gcHJvYmFibHkgY2FuJ3Qgd3JpdGUgaW50byBp dCBiZWZvcmUsIGJ1dCBzdGlsbCB3b3VsZCBwcm9iYWJseSAKYmUgYmV0dGVyIG1vdmVkIGJlZm9y ZSB0aGUgZmlyc3QgZm9yayAod2hpY2ggcGFzc2VzIHRoZSByZXN1bHRzIGFycmF5IHRvIApjaGls ZHJlbikuCgo+ICsJCWdldHJ1c2FnZShSVVNBR0VfQ0hJTERSRU4sICZvbGRfdXNhZ2UpOwo+ICsJ CWlndF9uc2VjX2VsYXBzZWQobWVtc2V0KCZ0diwgMCwgc2l6ZW9mKHR2KSkpOwo+ICsJCWlndF9m b3JrKGNoaWxkLCBuY2hpbGQpIHsKPiArCQkJdWludDMyX3QgY3R4Owo+ICsKPiArCQkJaWYgKGZs YWdzICYgRl9JU09MQVRFKSB7Cj4gKwkJCQlpbnQgY2xvbmUsIGRtYWJ1ZiA9IC0xOwo+ICsKPiAr CQkJCWlmIChjb21tb24pCj4gKwkJCQkJZG1hYnVmID0gcHJpbWVfaGFuZGxlX3RvX2ZkKGk5MTUs IGNvbW1vbik7Cj4gKwo+ICsJCQkJY2xvbmUgPSBnZW1fcmVvcGVuX2RyaXZlcihpOTE1KTsKPiAr CQkJCWdlbV9jb250ZXh0X2NvcHlfZW5naW5lcyhpOTE1LCAwLCBjbG9uZSwgMCk7Cj4gKwkJCQlp OTE1ID0gY2xvbmU7Cj4gKwo+ICsJCQkJaWYgKGRtYWJ1ZiAhPSAtMSkKPiArCQkJCQljb21tb24g PSBwcmltZV9mZF90b19oYW5kbGUoaTkxNSwgZG1hYnVmKTsKPiArCQkJfQo+ICsKPiArCQkJY3R4 ID0gZ2VtX2NvbnRleHRfY2xvbmVfd2l0aF9lbmdpbmVzKGk5MTUsIDApOwo+ICsKPiArCQkJaWYg KGZsYWdzICYgRl9WSVAgJiYgY2hpbGQgPT0gMCkgewo+ICsJCQkJZ2VtX2NvbnRleHRfc2V0X3By aW9yaXR5KGk5MTUsIGN0eCwgTUFYX1BSSU8pOwo+ICsJCQkJZmxhZ3MgfD0gRl9GTE9XOwo+ICsJ CQl9Cj4gKwkJCWlmIChmbGFncyAmIEZfUlJVTCAmJiBjaGlsZCA9PSAwKQo+ICsJCQkJZmxhZ3Mg fD0gRl9TT0xPIHwgRl9GTE9XIHwgRl9TWU5DOwo+ICsKPiArCQkJZmFpcl9jaGlsZChpOTE1LCBj dHgsIGUsIGNoaWxkX25zLAo+ICsJCQkJICAgdGltZWxpbmUsIGNvbW1vbiwgZmxhZ3MsCj4gKwkJ CQkgICAmcmVzdWx0W25jaGlsZF0sCj4gKwkJCQkgICAmcmVzdWx0W2NoaWxkXSk7Cj4gKwo+ICsJ CQlnZW1fY29udGV4dF9kZXN0cm95KGk5MTUsIGN0eCk7Cj4gKwkJfQo+ICsKPiArCQl3aGlsZSAo bmZlbmNlcy0tKQo+ICsJCQl0aW1lbGluZV9hZHZhbmNlKHRpbWVsaW5lLCBmZW5jZV9ucyk7Cj4g Kwo+ICsJCXJlc3VsdFtuY2hpbGRdID0gMTsKPiArCQlmb3IgKGludCBjaGlsZCA9IDA7IGNoaWxk IDwgbmNoaWxkOyBjaGlsZCsrKSB7Cj4gKwkJCXdoaWxlICghUkVBRF9PTkNFKHJlc3VsdFtjaGls ZF0pKQo+ICsJCQkJdGltZWxpbmVfYWR2YW5jZSh0aW1lbGluZSwgZmVuY2VfbnMpOwo+ICsJCX0K PiArCj4gKwkJaWd0X3dhaXRjaGlsZHJlbigpOwo+ICsJCWNsb3NlKHRpbWVsaW5lKTsKPiArCj4g KwkJLyogQXJlIHdlIHJ1bm5pbmcgb3V0IG9mIENQVSB0aW1lLCBhbmQgZmFpbCB0byBzdWJtaXQg ZnJhbWVzPyAqLwo+ICsJCWRfdGltZSA9IGlndF9uc2VjX2VsYXBzZWQoJnR2KTsKPiArCQlnZXRy dXNhZ2UoUlVTQUdFX0NISUxEUkVOLCAmdXNhZ2UpOwo+ICsJCWNwdV90aW1lID0gZF9jcHVfdGlt ZSgmdXNhZ2UsICZvbGRfdXNhZ2UpOwo+ICsJCWlmICgxMCAqIGNwdV90aW1lID4gOSAqIGRfdGlt ZSkgewo+ICsJCQlpZiAobmNoaWxkID4gNykKPiArCQkJCWJyZWFrOwo+ICsKPiArCQkJaWd0X3Nr aXBfb25fZigxMCAqIGNwdV90aW1lID4gOSAqIGRfdGltZSwKPiArCQkJCSAgICAgICIlLjBmJSUg Q1BVIHVzYWdlLCBwcmVzdW1pbmcgY2FwYWNpdHkgZXhjZWVkZWRcbiIsCj4gKwkJCQkgICAgICAx MDAuICogY3B1X3RpbWUgLyBkX3RpbWUpOwoKQXJlbid0IGNoaWxkcmVuIG1vc3RseSBzbGVlcGlu ZyB3YWl0aW5nIG9uIGZlbmNlcyBhbmQgbGlrZT8gQW5kIGlmIHNvIApob3cvd2hlbiB0aGUgdGVz dCBlbmRzIHVwIHVzaW5nIGEgbG90IG9mIENQVSB0aW1lPwoKPiArCQl9Cj4gKwo+ICsJCWlndF9t ZWFuX2luaXQoJm0pOwo+ICsJCWZvciAoaW50IGNoaWxkID0gMDsgY2hpbGQgPCBuY2hpbGQ7IGNo aWxkKyspCj4gKwkJCWlndF9tZWFuX2FkZCgmbSwgcmVzdWx0W2NoaWxkXSk7Cj4gKwo+ICsJCWlm IChmbGFncyAmIChGX1ZJUCB8IEZfUlJVTCkpCj4gKwkJCXZpcCA9IHJlc3VsdFswXTsKPiArCj4g KwkJcXNvcnQocmVzdWx0LCBuY2hpbGQsIHNpemVvZigqcmVzdWx0KSwgY21wX3VsKTsKPiArCQlp Z3RfaW5mbygiJTJkIGNsaWVudHMsIHJhbmdlOiBbJS4xZiwgJS4xZl0sIGlxcjogWyUuMWYsICUu MWZdLCBtZWRpYW46ICUuMWYsIG1lYW46ICUuMWYgwrEgJS4yZiBtc1xuIiwKPiArCQkJIG5jaGls ZCwKPiArCQkJIDFlLTYgKiByZXN1bHRbMF0sICAxZS02ICogcmVzdWx0W25jaGlsZCAtIDFdLAo+ ICsJCQkgMWUtNiAqIHJlc3VsdFtsb10sIDFlLTYgKiByZXN1bHRbaGldLAo+ICsJCQkgMWUtNiAq IHJlc3VsdFtuY2hpbGQgLyAyXSwKPiArCQkJIDFlLTYgKiBpZ3RfbWVhbl9nZXQoJm0pLAo+ICsJ CQkgMWUtNiAqIHNxcnQoaWd0X21lYW5fZ2V0X3ZhcmlhbmNlKCZtKSkpOwo+ICsKPiArCQlpZiAo dmlwICE9IC0xKSB7Cj4gKwkJCWlndF9pbmZvKCJWSVAgaW50ZXJ2YWwgJS4yZiBtc1xuIiwgMWUt NiAqIHZpcCk7Cj4gKwkJCWlndF9hc3NlcnQoNCAqIHZpcCA+IDMgKiBmZW5jZV9ucyAmJgo+ICsJ CQkJICAgMyAqIHZpcCA8IDQgKiBmZW5jZV9ucyk7Cj4gKwkJfQo+ICsKPiArCQkvKiBNYXkgYmUg c2xvd2VkIGR1ZSB0byBzaGVlciB2b2x1bWUgb2YgY29udGV4dCBzd2l0Y2hlcyAqLwo+ICsJCWln dF9hc3NlcnQoNCAqIGlndF9tZWFuX2dldCgmbSkgPiAzICogZmVuY2VfbnMgJiYKPiArCQkJICAg ICAgIGlndF9tZWFuX2dldCgmbSkgPCAzICogZmVuY2VfbnMpOwo+ICsKPiArCQlpZ3RfYXNzZXJ0 KDQgKiBpZ3RfbWVhbl9nZXQoJm0pID4gMyAqIHJlc3VsdFtuY2hpbGQgLyAyXSAmJgo+ICsJCQkg ICAzICogaWd0X21lYW5fZ2V0KCZtKSA8IDQgKiByZXN1bHRbbmNoaWxkIC8gMl0pOwo+ICsKPiAr CQlpZ3RfYXNzZXJ0KDIgKiAocmVzdWx0W2hpXSAtIHJlc3VsdFtsb10pIDwgcmVzdWx0W25jaGls ZCAvIDJdKTsKClB1dCBzb21lIGh1bWFuIHJlYWRhYmxlIHRleHQgYWJvdmUgdGhlIGFzc2VydHMg ZXhwbGFpbmluZyB0aGUgY3JpdGVyaWEgCnBsZWFzZS4KClZJUCBjaGlsZCB0YWtlcyBwYXJ0IGlu IHRoZSBtZWFuIGFuZCBkb2VzIG5vdCBhZmZlY3QgdGhlIHJlc3VsdD8KCj4gKwl9Cj4gKwo+ICsJ bXVubWFwKHJlc3VsdCwgNDA5Nik7Cj4gKwlpZiAoY29tbW9uKQo+ICsJCWdlbV9jbG9zZShpOTE1 LCBjb21tb24pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB0ZXN0X2ZhaXJuZXNzKGludCBpOTE1 LCBpbnQgdGltZW91dCkKPiArewo+ICsJc3RhdGljIGNvbnN0IHN0cnVjdCB7Cj4gKwkJY29uc3Qg Y2hhciAqbmFtZTsKPiArCQl1bnNpZ25lZCBpbnQgZmxhZ3M7Cj4gKwl9IGZhaXJbXSA9IHsKPiAr CQkvKgo+ICsJCSAqIG5vbmUgLSBtYXhpbWFsIGdyZWVkIGluIGVhY2ggY2xpZW50Cj4gKwkJICoK PiArCQkgKiBQdXNoIGFzIG1hbnkgZnJhbWVzIGZyb20gZWFjaCBjbGllbnQgYXMgZmFzdCBhcyBw b3NzaWJsZQo+ICsJCSAqLwo+ICsJCXsgIm5vbmUiLCAgICAgICAwIH0sCj4gKwkJeyAibm9uZS12 aXAiLCAgIEZfVklQIH0sIC8qIG9uZSB2aXAgY2xpZW50IG11c3QgbWVldCBkZWFkbGluZXMgKi8K PiArCQl7ICJub25lLXNvbG8iLCAgRl9TT0xPIH0sIC8qIDEgYmF0Y2ggcGVyIGZyYW1lIHBlciBj bGllbnQgKi8KPiArCQl7ICJub25lLXNoYXJlIiwgRl9TSEFSRSB9LCAvKiByZWFkIGZyb20gYSBj b21tb24gYnVmZmVyICovCj4gKwkJeyAibm9uZS1ycnVsIiwgIEZfUlJVTCB9LCAvKiAicmVhbHRp bWUtcmVzcG9uc2UgdW5kZXIgbG9hZCIgKi8KPiArCQl7ICJub25lLXBpbmciLCAgRl9QSU5HIH0s IC8qIG1lYXN1cmUgaW50ZXItZW5naW5lIGZhaXJuZXNzICovCj4gKwo+ICsJCS8qCj4gKwkJICog dGhyb3R0bGUgLSBvcmlnaW5hbCBwZXIgY2xpZW50IHRocm90dGxpbmcKPiArCQkgKgo+ICsJCSAq IFVzZWQgZm9yIGZyb250IGJ1ZmZlcmluZyByZW5kZXJpbmcgd2hlcmUgdGhlcmUgaXMgbm8KPiAr CQkgKiBleHRlbmFsIGZyYW1lIG1hcmtlci4gRWFjaCBjbGllbnQgdHJpZXMgdG8gb25seSBrZWVw Cj4gKwkJICogMjBtcyBvZiB3b3JrIHN1Ym1pdHRlZCwgdGhvdWdoIHRoYXQgbWVhc3VyZW1lbnQg aXMKPiArCQkgKiBmbGF3ZWQuLi4KPiArCQkgKgo+ICsJCSAqIFRoaXMgaXMgdXNlZCBieSBYb3Jn IHRvIHRyeSBhbmQgbWFpbnRhaW4gc29tZSByZXNlbWJhbGFuY2UKPiArCQkgKiBvZiBpbnB1dC9v dXRwdXQgY29uc2lzdGVuY3kgd2hlbiBiZWluZyBmZWVkIGEgY29udGludW91cwo+ICsJCSAqIHN0 cmVhbSBvZiBYMTEgZHJhdyByZXF1ZXN0cyBzdHJhaWdodCBpbnRvIHNjYW5vdXQsIHdoZXJlCj4g KwkJICogdGhlIGNsaWVudHMgbWF5IHN1Ym1pdCB0aGUgd29yayBmYXN0ZXIgdGhhbiBjYW4gYmUg ZHJhd24uCj4gKwkJICoKPiArCQkgKiBUaHJvdHRsaW5nIHRyYWNrcyByZXF1ZXN0cyBwZXItZmls ZSAoYW5kIGFzc3VtZXMgdGhhdAo+ICsJCSAqIGFsbCByZXF1ZXN0cyBhcmUgaW4gc3VibWlzc2lv biBvcmRlciBhY3Jvc3MgdGhlIHdob2xlIGZpbGUpLAo+ICsJCSAqIHNvIHdlIHNwbGl0IGVhY2gg Y2hpbGQgdG8gaXRzIG93biBmZC4KPiArCQkgKi8KPiArCQl7ICJ0aHJvdHRsZSIsICAgICAgIEZf VEhST1RUTEUgfCBGX0lTT0xBVEUgfSwKPiArCQl7ICJ0aHJvdHRsZS12aXAiLCAgIEZfVEhST1RU TEUgfCBGX0lTT0xBVEUgfCBGX1ZJUCB9LAo+ICsJCXsgInRocm90dGxlLXNvbG8iLCAgRl9USFJP VFRMRSB8IEZfSVNPTEFURSB8IEZfU09MTyB9LAo+ICsJCXsgInRocm90dGxlLXNoYXJlIiwgRl9U SFJPVFRMRSB8IEZfSVNPTEFURSB8IEZfU0hBUkUgfSwKPiArCQl7ICJ0aHJvdHRsZS1ycnVsIiwg IEZfVEhST1RUTEUgfCBGX0lTT0xBVEUgfCBGX1JSVUwgfSwKPiArCj4gKwkJLyoKPiArCQkgKiBw YWNlIC0gbWVzYSAic3VibWl0IGRvdWJsZSBidWZmZXJpbmciCj4gKwkJICoKPiArCQkgKiBTdWJt aXQgYSBmcmFtZSwgd2FpdCBmb3IgcHJldmlvdXMgZnJhbWUgdG8gc3RhcnQuIFRoaXMKPiArCQkg KiBwcmV2ZW50cyBlYWNoIGNsaWVudCBmcm9tIGdldHRpbmcgdG9vIGZhciBhaGVhZCBvZiBpdHMK PiArCQkgKiByZW5kZXJpbmcsIG1haW50YWluaW5nIGEgY29uc2lzdGVudCBpbnB1dC9vdXRwdXQg bGF0ZW5jeS4KPiArCQkgKi8KPiArCQl7ICJwYWNlIiwgICAgICAgRl9QQUNFIH0sCj4gKwkJeyAi cGFjZS1zb2xvIiwgIEZfUEFDRSB8IEZfU09MT30sCj4gKwkJeyAicGFjZS1zaGFyZSIsIEZfUEFD RSB8IEZfU0hBUkV9LAo+ICsJCXsgInBhY2UtcGluZyIsICBGX1BBQ0UgfCBGX1NIQVJFIHwgRl9Q SU5HfSwKPiArCj4gKwkJLyogc3luYyAtIG9ubHkgc3VibWl0IGEgZnJhbWUgYXQgYSB0aW1lICov Cj4gKwkJeyAic3luYyIsICAgICAgRl9TWU5DIH0sCj4gKwkJeyAic3luYy12aXAiLCAgRl9TWU5D IHwgRl9WSVAgfSwKPiArCQl7ICJzeW5jLXNvbG8iLCBGX1NZTkMgfCBGX1NPTE8gfSwKPiArCj4g KwkJLyogZmxvdyAtIHN5bmNocm9uaXNlIGV4ZWN1dGlvbiBhZ2FpbnN0IHRoZSBjbG9jayAodmJs YW5rKSAqLwo+ICsJCXsgImZsb3ciLCAgICAgICBGX1BBQ0UgfCBGX0ZMT1cgfSwKPiArCQl7ICJm bG93LXNoYXJlIiwgRl9QQUNFIHwgRl9GTE9XIHwgRl9TSEFSRSB9LAo+ICsJCXsgImZsb3ctcGlu ZyIsICBGX1BBQ0UgfCBGX0ZMT1cgfCBGX1NIQVJFIHwgRl9QSU5HIH0sCj4gKwo+ICsJCS8qIG5l eHQgLSBzdWJtaXQgYWhlYWQgb2YgdGhlIGNsb2NrICh2YmxhbmsgZG91YmxlIGJ1ZmZlcmluZykg Ki8KPiArCQl7ICJuZXh0IiwgICAgICAgRl9QQUNFIHwgRl9GTE9XIHwgRl9ORVhUIH0sCj4gKwkJ eyAibmV4dC1zaGFyZSIsIEZfUEFDRSB8IEZfRkxPVyB8IEZfTkVYVCB8IEZfU0hBUkUgfSwKPiAr CQl7ICJuZXh0LXBpbmciLCAgRl9QQUNFIHwgRl9GTE9XIHwgRl9ORVhUIHwgRl9TSEFSRSB8IEZf UElORyB9LAo+ICsKPiArCQkvKiBzcGFyZSAtIHVuZGVydXRpbGlzZSBieSBhIHNpbmdsZSBjbGll bnQgdGltZXNsaWNlICovCj4gKwkJeyAic3BhcmUiLCBGX1BBQ0UgfCBGX0ZMT1cgfCBGX1NQQVJF IH0sCj4gKwo+ICsJCS8qIGhhbGYgLSBydW4gYXQgaGFsZiBwYWNlIChzdWJtaXQgMTZtcyBvZiB3 b3JrIGV2ZXJ5IDMybXMpICovCj4gKwkJeyAiaGFsZiIsICBGX1BBQ0UgfCBGX0ZMT1cgfCBGX0hB TEYgfSwKPiArCj4gKwkJe30KPiArCX07Cj4gKwo+ICsJaWd0X2ZpeHR1cmUgewo+ICsJCWlndF9p bmZvKCJDUyB0aW1lc3RhbXAgZnJlcXVlbmN5OiAlZFxuIiwKPiArCQkJIHJlYWRfdGltZXN0YW1w X2ZyZXF1ZW5jeShpOTE1KSk7Cj4gKwo+ICsJCWlndF9yZXF1aXJlKGludGVsX2dlbihpbnRlbF9n ZXRfZHJtX2RldmlkKGk5MTUpKSA+PSA4KTsKPiArCX0KPiArCj4gKwlmb3IgKHR5cGVvZigqZmFp cikgKmYgPSBmYWlyOyBmLT5uYW1lOyBmKyspIHsKPiArCQlpZ3Rfc3VidGVzdF93aXRoX2R5bmFt aWNfZigiZmFpci0lcyIsIGYtPm5hbWUpICB7Cj4gKwkJCWNvbnN0IHN0cnVjdCBpbnRlbF9leGVj dXRpb25fZW5naW5lMiAqZTsKPiArCj4gKwkJCV9fZm9yX2VhY2hfcGh5c2ljYWxfZW5naW5lKGk5 MTUsIGUpIHsKPiArCQkJCWlmICghZ2VtX2NsYXNzX2Nhbl9zdG9yZV9kd29yZChpOTE1LCBlLT5j bGFzcykpCj4gKwkJCQkJY29udGludWU7Cj4gKwo+ICsJCQkJaWd0X2R5bmFtaWNfZigiJXMiLCBl LT5uYW1lKQo+ICsJCQkJCWZhaXJuZXNzKGk5MTUsIGUsIHRpbWVvdXQsIGYtPmZsYWdzKTsKPiAr CQkJfQo+ICsJCX0KPiArCX0KPiArfQo+ICsKPiArc3RhdGljIHVpbnQzMl90IHJlYWRfY3R4X3Rp bWVzdGFtcChpbnQgaTkxNSwKPiArCQkJCSAgIHVpbnQzMl90IGN0eCwKPiArCQkJCSAgIGNvbnN0 IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZSkKPiArewo+ICsJY29uc3QgaW50IHVz ZV82NGIgPSBpbnRlbF9nZW4oaW50ZWxfZ2V0X2RybV9kZXZpZChpOTE1KSkgPj0gODsKPiArCWNv bnN0IHVpbnQzMl90IGJhc2UgPSBnZW1fZW5naW5lX21taW9fYmFzZShpOTE1LCBlLT5uYW1lKTsK PiArCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSByZWxvYzsKPiArCXN0cnVj dCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIG9iaiA9IHsKPiArCQkuaGFuZGxlID0gZ2VtX2Ny ZWF0ZShpOTE1LCA0MDk2KSwKPiArCQkub2Zmc2V0ID0gMzIgPDwgMjAsCj4gKwkJLnJlbG9jc19w dHIgPSB0b191c2VyX3BvaW50ZXIoJnJlbG9jKSwKPiArCQkucmVsb2NhdGlvbl9jb3VudCA9IDEs Cj4gKwl9Owo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBleGVjYnVmID0gewo+ ICsJCS5idWZmZXJzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcigmb2JqKSwKPiArCQkuYnVmZmVyX2Nv dW50ID0gMSwKPiArCQkuZmxhZ3MgPSBlLT5mbGFncywKPiArCQkucnN2ZDEgPSBjdHgsCj4gKwl9 Owo+ICsjZGVmaW5lIFJVTlRJTUUgKGJhc2UgKyAweDNhOCkKPiArCXVpbnQzMl90ICptYXAsICpj czsKPiArCXVpbnQzMl90IHRzOwo+ICsKPiArCWlndF9yZXF1aXJlKGJhc2UpOwo+ICsKPiArCWNz ID0gbWFwID0gZ2VtX21tYXBfX2RldmljZV9jb2hlcmVudChpOTE1LCBvYmouaGFuZGxlLAo+ICsJ CQkJCSAgICAgMCwgNDA5NiwgUFJPVF9XUklURSk7Cj4gKwo+ICsJKmNzKysgPSAweDI0IDw8IDIz IHwgKDEgKyB1c2VfNjRiKTsgLyogU1JNICovCj4gKwkqY3MrKyA9IFJVTlRJTUU7Cj4gKwltZW1z ZXQoJnJlbG9jLCAwLCBzaXplb2YocmVsb2MpKTsKPiArCXJlbG9jLnRhcmdldF9oYW5kbGUgPSBv YmouaGFuZGxlOwo+ICsJcmVsb2MucHJlc3VtZWRfb2Zmc2V0ID0gb2JqLm9mZnNldDsKPiArCXJl bG9jLm9mZnNldCA9IG9mZnNldF9pbl9wYWdlKGNzKTsKPiArCXJlbG9jLmRlbHRhID0gNDAwMDsK PiArCSpjcysrID0gb2JqLm9mZnNldCArIDQwMDA7Cj4gKwkqY3MrKyA9IG9iai5vZmZzZXQgPj4g MzI7Cj4gKwo+ICsJKmNzKysgPSBNSV9CQVRDSF9CVUZGRVJfRU5EOwo+ICsKPiArCWdlbV9leGVj YnVmKGk5MTUsICZleGVjYnVmKTsKPiArCWdlbV9zeW5jKGk5MTUsIG9iai5oYW5kbGUpOwo+ICsJ Z2VtX2Nsb3NlKGk5MTUsIG9iai5oYW5kbGUpOwo+ICsKPiArCXRzID0gbWFwWzEwMDBdOwo+ICsJ bXVubWFwKG1hcCwgNDA5Nik7Cj4gKwo+ICsJcmV0dXJuIHRzOwo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZCBmYWlyc2xpY2UoaW50IGk5MTUsCj4gKwkJICAgICAgY29uc3Qgc3RydWN0IGludGVsX2V4 ZWN1dGlvbl9lbmdpbmUyICplLAo+ICsJCSAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCj4gK3sK PiArCWlndF9zcGluX3QgKnNwaW4gPSBOVUxMOwo+ICsJdWludDMyX3QgY3R4WzNdOwo+ICsJdWlu dDMyX3QgdHNbM107Cj4gKwo+ICsJZm9yIChpbnQgaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGN0eCk7 IGkrKykgewo+ICsJCWN0eFtpXSA9IGdlbV9jb250ZXh0X2Nsb25lX3dpdGhfZW5naW5lcyhpOTE1 LCAwKTsKPiArCQlpZiAoc3BpbiA9PSBOVUxMKSB7Cj4gKwkJCXNwaW4gPSBfX2lndF9zcGluX25l dyhpOTE1LAo+ICsJCQkJCSAgICAgIC5jdHggPSBjdHhbaV0sCj4gKwkJCQkJICAgICAgLmVuZ2lu ZSA9IGUtPmZsYWdzLAo+ICsJCQkJCSAgICAgIC5mbGFncyA9IGZsYWdzKTsKPiArCQl9IGVsc2Ug ewo+ICsJCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGViID0gewo+ICsJCQkJLmJ1 ZmZlcl9jb3VudCA9IDEsCj4gKwkJCQkuYnVmZmVyc19wdHIgPSB0b191c2VyX3BvaW50ZXIoJnNw aW4tPm9ialtJR1RfU1BJTl9CQVRDSF0pLAo+ICsJCQkJLmZsYWdzID0gZS0+ZmxhZ3MsCj4gKwkJ CQkucnN2ZDEgPSBjdHhbaV0sCj4gKwkJCX07Cj4gKwkJCWdlbV9leGVjYnVmKGk5MTUsICZlYik7 Cj4gKwkJfQo+ICsJfQo+ICsKPiArCXNsZWVwKDIpOyAvKiBvdmVyIHRoZSBjb3Vyc2Ugb2YgbWFu eSB0aW1lc2xpY2VzICovCj4gKwo+ICsJaWd0X2Fzc2VydChnZW1fYm9fYnVzeShpOTE1LCBzcGlu LT5oYW5kbGUpKTsKPiArCWlndF9zcGluX2VuZChzcGluKTsKPiArCWZvciAoaW50IGkgPSAwOyBp IDwgQVJSQVlfU0laRShjdHgpOyBpKyspCj4gKwkJdHNbaV0gPSByZWFkX2N0eF90aW1lc3RhbXAo aTkxNSwgY3R4W2ldLCBlKTsKPiArCj4gKwlmb3IgKGludCBpID0gMDsgaSA8IEFSUkFZX1NJWkUo Y3R4KTsgaSsrKQo+ICsJCWdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwgY3R4W2ldKTsKPiArCWln dF9zcGluX2ZyZWUoaTkxNSwgc3Bpbik7Cj4gKwo+ICsJcXNvcnQodHMsIDMsIHNpemVvZigqdHMp LCBjbXBfdTMyKTsKPiArCWlndF9pbmZvKCIlczogWyUuMWYsICUuMWZdIG1zXG4iLCBlLT5uYW1l LAo+ICsJCSAxZS02ICogdGlja3NfdG9fbnMoaTkxNSwgdHNbMF0pLAo+ICsJCSAxZS02ICogdGlj a3NfdG9fbnMoaTkxNSwgdHNbMl0pKTsKCkxvZyBhbGwgdGhyZWUganVzdCBhcyB3ZWxsPwoKPiAr Cj4gKwlpZ3RfYXNzZXJ0KHRzWzBdICYmIHRzWzJdID4gdHNbMF0pOwogPiArCWlndF9hc3NlcnQo NCAqIHRzWzBdID4gMyAqIHRzWzJdKTsKClRocmVlIGVxdWFsIHByaW9yaXR5IGNvbnRleHRzIC0g d2h5IHdvdWxkIGRpc3RyaWJ1dGlvbiBiZSBleHBlY3RlZCB0byBiZSAKdW5mYWlyPyBJbnR1aXRp dmVseSBJJ2QgZXhwZWN0IGEgY2hlY2sgdGhhdCBhbGwgdGhyZWUgYXJlIHdpdGhpbiBzb21lIAp0 b2xlcmFuY2Ugb2YgZWFjaCBvdGhlciwgYnV0IG9rYXksIG1pbiBhbmQgbWF4IGlzIGdvb2QgZW5v dWdoLCBqdXN0IApkb24ndCB1bmRlcnN0YW5kIHRoZSBhc3NlcnRzLiBNYXggY2FuIGp1c3QgYXMg d2VsbCBiZSBlcXVhbCB0byBtaW4sIG5vPyAKSSBtZWFuIGFuZCBzY2hlZHVsZXIgd291bGQgc3Rp bGwgYmUgY29uc2lkZXJlZCBmYWlyLiBXZSBzaG91bGQgaWdub3JlIAp0aGUgc3VibWlzc2lvbiBv cmRlciBJIHRoaW5rLCBpZiB0aGF0IHdhcyB0aGUgcG9pbnQuCgo+ICt9Cj4gKwo+ICAgI2RlZmlu ZSB0ZXN0X2VhY2hfZW5naW5lKFQsIGk5MTUsIGUpIFwKPiAgIAlpZ3Rfc3VidGVzdF93aXRoX2R5 bmFtaWMoVCkgX19mb3JfZWFjaF9waHlzaWNhbF9lbmdpbmUoaTkxNSwgZSkgXAo+ICAgCQlpZ3Rf ZHluYW1pY19mKCIlcyIsIGUtPm5hbWUpCj4gQEAgLTI1ODIsNiArMzM5NiwzNSBAQCBpZ3RfbWFp bgo+ICAgCQl0ZXN0X2VhY2hfZW5naW5lKCJsYXRlc2xpY2UiLCBmZCwgZSkKPiAgIAkJCWxhdGVz bGljZShmZCwgZS0+ZmxhZ3MpOwo+ICAgCj4gKwkJaWd0X3N1YnRlc3RfZ3JvdXAgewo+ICsJCQlp Z3RfZml4dHVyZSB7Cj4gKwkJCQlpZ3RfcmVxdWlyZShnZW1fc2NoZWR1bGVyX2hhc19zZW1hcGhv cmVzKGZkKSk7Cj4gKwkJCQlpZ3RfcmVxdWlyZShnZW1fc2NoZWR1bGVyX2hhc19wcmVlbXB0aW9u KGZkKSk7Cj4gKwkJCQlpZ3RfcmVxdWlyZShpbnRlbF9nZW4oaW50ZWxfZ2V0X2RybV9kZXZpZChm ZCkpID49IDgpOwo+ICsJCQl9Cj4gKwo+ICsJCQl0ZXN0X2VhY2hfZW5naW5lKCJmYWlyc2xpY2Ui LCBmZCwgZSkKPiArCQkJCWZhaXJzbGljZShmZCwgZSwgMCk7Cj4gKwo+ICsJCQl0ZXN0X2VhY2hf ZW5naW5lKCJ1LWZhaXJzbGljZSIsIGZkLCBlKQo+ICsJCQkJZmFpcnNsaWNlKGZkLCBlLCBJR1Rf U1BJTl9VU0VSUFRSKTsKPiArCj4gKwkJCWlndF9zdWJ0ZXN0KCJmYWlyc2xpY2UtYWxsIikgIHsK PiArCQkJCV9fZm9yX2VhY2hfcGh5c2ljYWxfZW5naW5lKGZkLCBlKSB7Cj4gKwkJCQkJaWd0X2Zv cmsoY2hpbGQsIDEpCj4gKwkJCQkJCWZhaXJzbGljZShmZCwgZSwgMCk7Cj4gKwkJCQl9Cj4gKwkJ CQlpZ3Rfd2FpdGNoaWxkcmVuKCk7Cj4gKwkJCX0KPiArCQkJaWd0X3N1YnRlc3QoInUtZmFpcnNs aWNlLWFsbCIpICB7Cj4gKwkJCQlfX2Zvcl9lYWNoX3BoeXNpY2FsX2VuZ2luZShmZCwgZSkgewo+ ICsJCQkJCWlndF9mb3JrKGNoaWxkLCAxKQo+ICsJCQkJCQlmYWlyc2xpY2UoZmQsIGUsIElHVF9T UElOX1VTRVJQVFIpOwo+ICsJCQkJfQo+ICsJCQkJaWd0X3dhaXRjaGlsZHJlbigpOwo+ICsJCQl9 Cj4gKwkJfQo+ICsKPiAgIAkJdGVzdF9lYWNoX2VuZ2luZSgic3VibWl0LWVhcmx5LXNsaWNlIiwg ZmQsIGUpCj4gICAJCQlzdWJtaXRfc2xpY2UoZmQsIGUsIEVBUkxZX1NVQk1JVCk7Cj4gICAJCXRl c3RfZWFjaF9lbmdpbmUoInN1Ym1pdC1nb2xkZW4tc2xpY2UiLCBmZCwgZSkKPiBAQCAtMjYxMCw2 ICszNDUzLDEwIEBAIGlndF9tYWluCj4gICAJCXRlc3RfZWFjaF9lbmdpbmVfc3RvcmUoInByb21v dGlvbiIsIGZkLCBlKQo+ICAgCQkJcHJvbW90aW9uKGZkLCBlLT5mbGFncyk7Cj4gICAKPiArCQlp Z3Rfc3VidGVzdF9ncm91cCB7Cj4gKwkJCXRlc3RfZmFpcm5lc3MoZmQsIDIpOwo+ICsJCX0KPiAr Cj4gICAJCWlndF9zdWJ0ZXN0X2dyb3VwIHsKPiAgIAkJCWlndF9maXh0dXJlIHsKPiAgIAkJCQlp Z3RfcmVxdWlyZShnZW1fc2NoZWR1bGVyX2hhc19wcmVlbXB0aW9uKGZkKSk7Cj4gCgpTZWVtIGNs ZWFuIGFuZCBsb2dpY2FsIG9uIHRoZSBoaWdoIGxldmVsIGFuZCBvbiB0aGUgaW1wbGVtZW50YXRp b24gCmxldmVsLiBPbiB0aGUgIm1lZGl1bSIgbGV2ZWwgSSBkb24ndCBjbGFpbSBJIHRyaWVkIHRv IHVuZGVyc3RhbmQgCmV2ZXJ5dGhpbmcgYnV0IGl0J3Mgbm90IGNvbXBsZXRlbHkgaW1wb3J0YW50 LiBXaXRoIG1lZGl1bSBsZXZlbCBJIG1lYW4gCmFsbCB0aGUgZGlmZmVyZW50IHRlc3Qgc2NlbmFy aW9zLCB3aGVyZSB0aGUgaW1wb3J0YW50IHRoaW5nIGlzIHRoYXQgYXMgCmxvbmcgYXMgYWxsIGNo aWxkcmVuIGFyZSBkb2luZyB0aGUgc2FtZSB0aGluZywgd2hpY2ggSSB0aGluayB0aGV5IGFyZSAK KHNtYWxsIG9wZW4gb2YgVklQKSwgaXQgc2VlbXMgY29ycmVjdCB0byB0ZXN0IHRoZXkgd2lsbCBn ZXQgZXF1YWwgYW1vdW50IApvZiBHUFUgdGltZS4KCkFsbCBzdWJ0ZXN0cyBwYXNzIHdpdGggdGhl IGZhaXIgc2NoZWR1bGVyIHBhdGNoZXM/CgpSZWdhcmRzLAoKVHZydGtvCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QK SW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9w Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=