From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: References: <20190508100958.32637-1-chris@chris-wilson.co.uk> <20190508100958.32637-13-chris@chris-wilson.co.uk> From: Tvrtko Ursulin Message-ID: <6f2ae1a7-86ec-5264-72a2-5b0a820bd8b1@linux.intel.com> Date: Wed, 15 May 2019 11:49:45 +0100 MIME-Version: 1.0 In-Reply-To: <20190508100958.32637-13-chris@chris-wilson.co.uk> Content-Language: en-US Subject: Re: [igt-dev] [PATCH i-g-t 13/16] i915: Add gem_exec_balancer List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Chris Wilson , intel-gfx@lists.freedesktop.org Cc: igt-dev@lists.freedesktop.org List-ID: Ck9uIDA4LzA1LzIwMTkgMTE6MDksIENocmlzIFdpbHNvbiB3cm90ZToKPiBFeGVyY2lzZSB0aGUg aW4ta2VybmVsIGxvYWQgYmFsYW5jZXIgY2hlY2tpbmcgdGhhdCB3ZSBjYW4gZGlzdHJpYnV0ZQo+ IGJhdGNoZXMgYWNyb3NzIHRoZSBzZXQgb2YgY3R4LT5lbmdpbmVzIHRvIGF2b2lkIGxvYWQuCj4g Cj4gU2lnbmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+ Cj4gLS0tCj4gICB0ZXN0cy9NYWtlZmlsZS5hbSAgICAgICAgICAgICAgfCAgICAxICsKPiAgIHRl c3RzL01ha2VmaWxlLnNvdXJjZXMgICAgICAgICB8ICAgIDEgKwo+ICAgdGVzdHMvaTkxNS9nZW1f ZXhlY19iYWxhbmNlci5jIHwgMTA1MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ ICAgdGVzdHMvbWVzb24uYnVpbGQgICAgICAgICAgICAgIHwgICAgNyArCj4gICA0IGZpbGVzIGNo YW5nZWQsIDEwNTkgaW5zZXJ0aW9ucygrKQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3RzL2k5 MTUvZ2VtX2V4ZWNfYmFsYW5jZXIuYwo+IAo+IGRpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5h bSBiL3Rlc3RzL01ha2VmaWxlLmFtCj4gaW5kZXggNTA5N2RlYmY2Li5jNmFmMGFlYWYgMTAwNjQ0 Cj4gLS0tIGEvdGVzdHMvTWFrZWZpbGUuYW0KPiArKysgYi90ZXN0cy9NYWtlZmlsZS5hbQo+IEBA IC05Niw2ICs5Niw3IEBAIGdlbV9jbG9zZV9yYWNlX0xEQUREID0gJChMREFERCkgLWxwdGhyZWFk Cj4gICBnZW1fY3R4X3RocmFzaF9DRkxBR1MgPSAkKEFNX0NGTEFHUykgJChUSFJFQURfQ0ZMQUdT KQo+ICAgZ2VtX2N0eF90aHJhc2hfTERBREQgPSAkKExEQUREKSAtbHB0aHJlYWQKPiAgIGdlbV9j dHhfc3NldV9MREFERCA9ICQoTERBREQpICQodG9wX2J1aWxkZGlyKS9saWIvbGliaWd0X3BlcmYu bGEKPiAraTkxNV9nZW1fZXhlY19iYWxhbmNlcl9MREFERCA9ICQoTERBREQpICQodG9wX2J1aWxk ZGlyKS9saWIvbGliaWd0X3BlcmYubGEKPiAgIGdlbV9leGVjX2NhcHR1cmVfTERBREQgPSAkKExE QUREKSAtbHoKPiAgIGdlbV9leGVjX3BhcmFsbGVsX0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKSAkKFRI UkVBRF9DRkxBR1MpCj4gICBnZW1fZXhlY19wYXJhbGxlbF9MREFERCA9ICQoTERBREQpIC1scHRo cmVhZAo+IGRpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIGIvdGVzdHMvTWFrZWZp bGUuc291cmNlcwo+IGluZGV4IGU3ZWUyN2U4MS4uMzIzYjYyNWFhIDEwMDY0NAo+IC0tLSBhL3Rl c3RzL01ha2VmaWxlLnNvdXJjZXMKPiArKysgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCj4gQEAg LTI0LDYgKzI0LDcgQEAgVEVTVFNfcHJvZ3MgPSBcCj4gICAJaTkxNS9nZW1fY3R4X2Nsb25lIFwK PiAgIAlpOTE1L2dlbV9jdHhfZW5naW5lcyBcCj4gICAJaTkxNS9nZW1fY3R4X3NoYXJlZCBcCj4g KwlpOTE1L2dlbV9leGVjX2JhbGFuY2VyIFwKPiAgIAlpOTE1L2dlbV92bV9jcmVhdGUgXAo+ICAg CWttc18zZCBcCj4gICAJa21zX2FkZGZiX2Jhc2ljIFwKPiBkaWZmIC0tZ2l0IGEvdGVzdHMvaTkx NS9nZW1fZXhlY19iYWxhbmNlci5jIGIvdGVzdHMvaTkxNS9nZW1fZXhlY19iYWxhbmNlci5jCj4g bmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAuLjI1MTk1ZDQ3OAo+IC0tLSAv ZGV2L251bGwKPiArKysgYi90ZXN0cy9pOTE1L2dlbV9leGVjX2JhbGFuY2VyLmMKPiBAQCAtMCww ICsxLDEwNTAgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IMKpIDIwMTggSW50ZWwgQ29ycG9yYXRp b24KCjIwMTkgSSBndWVzcywgZXZlbiB0aG91Z2ggd29yayB3YXMgc3RhcnRlZCBpbiAyMDE4PwoK PiArICoKPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2Us IHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFu ZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICog dG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdp dGhvdXQgbGltaXRhdGlvbgo+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBt ZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiArICogYW5kL29yIHNlbGwg Y29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhl Cj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnM6Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNl IGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPiArICogcGFy YWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBv cnRpb25zIG9mIHRoZQo+ICsgKiBTb2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElT IFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Mg T1IKPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFO VElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUg QVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFN QUdFUyBPUiBPVEhFUgo+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENP TlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwo+ICsgKiBGUk9NLCBPVVQgT0YgT1Ig SU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJ TkdTCj4gKyAqIElOIFRIRSBTT0ZUV0FSRS4KPiArICovCj4gKwo+ICsjaW5jbHVkZSA8c2NoZWQu aD4KPiArCj4gKyNpbmNsdWRlICJpZ3QuaCIKPiArI2luY2x1ZGUgImlndF9wZXJmLmgiCj4gKyNp bmNsdWRlICJpOTE1L2dlbV9yaW5nLmgiCj4gKyNpbmNsdWRlICJzd19zeW5jLmgiCj4gKwo+ICtJ R1RfVEVTVF9ERVNDUklQVElPTigiRXhlcmNpc2UgaW4ta2VybmVsIGxvYWQtYmFsYW5jaW5nIik7 Cj4gKwo+ICsjZGVmaW5lIElOU1RBTkNFX0NPVU5UICgxIDw8IEk5MTVfUE1VX1NBTVBMRV9JTlNU QU5DRV9CSVRTKQoKSG1tLi4gdGhpcyBpcyBhIHN0cmFuZ2Ugc3Vycm9nYXRlIGJ1dCBJIGd1ZXNz IGl0IHdvcmtzLgoKPiArCj4gK3N0YXRpYyBib29sIGhhc19jbGFzc19pbnN0YW5jZShpbnQgaTkx NSwgdWludDE2X3QgY2xhc3MsIHVpbnQxNl90IGluc3RhbmNlKQo+ICt7Cj4gKwlpbnQgZmQ7Cj4g Kwo+ICsJZmQgPSBwZXJmX2k5MTVfb3BlbihJOTE1X1BNVV9FTkdJTkVfQlVTWShjbGFzcywgaW5z dGFuY2UpKTsKCk1vcmUgd29yayBmb3IgQW5kaSB0byByZXBsYWNlIHdpdGggcmVhbCBlbmdpbmUg ZGlzY292ZXJ5LiA6KQoKPiArCWlmIChmZCAhPSAtMSkgewo+ICsJCWNsb3NlKGZkKTsKPiArCQly ZXR1cm4gdHJ1ZTsKPiArCX0KPiArCj4gKwlyZXR1cm4gZmFsc2U7Cj4gK30KPiArCj4gK3N0YXRp YyBzdHJ1Y3QgaTkxNV9lbmdpbmVfY2xhc3NfaW5zdGFuY2UgKgo+ICtsaXN0X2VuZ2luZXMoaW50 IGk5MTUsIHVpbnQzMl90IGNsYXNzX21hc2ssIHVuc2lnbmVkIGludCAqb3V0KQo+ICt7Cj4gKwl1 bnNpZ25lZCBpbnQgY291bnQgPSAwLCBzaXplID0gNjQ7Cj4gKwlzdHJ1Y3QgaTkxNV9lbmdpbmVf Y2xhc3NfaW5zdGFuY2UgKmVuZ2luZXM7Cj4gKwo+ICsJZW5naW5lcyA9IG1hbGxvYyhzaXplICog c2l6ZW9mKCplbmdpbmVzKSk7Cj4gKwlpZiAoIWVuZ2luZXMpIHsKPiArCQkqb3V0ID0gMDsKPiAr CQlyZXR1cm4gTlVMTDsKPiArCX0KPiArCj4gKwlmb3IgKGVudW0gZHJtX2k5MTVfZ2VtX2VuZ2lu ZV9jbGFzcyBjbGFzcyA9IEk5MTVfRU5HSU5FX0NMQVNTX1JFTkRFUjsKPiArCSAgICAgY2xhc3Nf bWFzazsKPiArCSAgICAgY2xhc3MrKywgY2xhc3NfbWFzayA+Pj0gMSkgewo+ICsJCWlmICghKGNs YXNzX21hc2sgJiAxKSkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCWZvciAodW5zaWduZWQgaW50 IGluc3RhbmNlID0gMDsKPiArCQkgICAgIGluc3RhbmNlIDwgSU5TVEFOQ0VfQ09VTlQ7Cj4gKwkJ ICAgICBpbnN0YW5jZSsrKSB7Cj4gKwkJICAgICBpZiAoIWhhc19jbGFzc19pbnN0YW5jZShpOTE1 LCBjbGFzcywgaW5zdGFuY2UpKQo+ICsJCQkgICAgIGNvbnRpbnVlOwo+ICsKPiArCQkJaWYgKGNv dW50ID09IHNpemUpIHsKPiArCQkJCXN0cnVjdCBpOTE1X2VuZ2luZV9jbGFzc19pbnN0YW5jZSAq ZTsKPiArCj4gKwkJCQlzaXplICo9IDI7Cj4gKwkJCQllID0gcmVhbGxvYyhlbmdpbmVzLCBzaXpl KnNpemVvZigqZW5naW5lcykpOwo+ICsJCQkJaWYgKCFlKSB7CgpJJ2QganVzdCBhc3NlcnQuIE9u IG1hbGxvYyBhcyB3ZWxsLgoKPiArCQkJCQkqb3V0ID0gY291bnQ7Cj4gKwkJCQkJcmV0dXJuIGVu Z2luZXM7Cj4gKwkJCQl9Cj4gKwo+ICsJCQkJZW5naW5lcyA9IGU7Cj4gKwkJCX0KPiArCj4gKwkJ CWVuZ2luZXNbY291bnQrK10gPSAoc3RydWN0IGk5MTVfZW5naW5lX2NsYXNzX2luc3RhbmNlKXsK PiArCQkJCS5lbmdpbmVfY2xhc3MgPSBjbGFzcywKPiArCQkJCS5lbmdpbmVfaW5zdGFuY2UgPSBp bnN0YW5jZSwKPiArCQkJfTsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJaWYgKCFjb3VudCkgewo+ICsJ CWZyZWUoZW5naW5lcyk7Cj4gKwkJZW5naW5lcyA9IE5VTEw7Cj4gKwl9Cj4gKwo+ICsJKm91dCA9 IGNvdW50Owo+ICsJcmV0dXJuIGVuZ2luZXM7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgX19zZXRf bG9hZF9iYWxhbmNlcihpbnQgaTkxNSwgdWludDMyX3QgY3R4LAo+ICsJCQkgICAgICAgY29uc3Qg c3RydWN0IGk5MTVfZW5naW5lX2NsYXNzX2luc3RhbmNlICpjaSwKPiArCQkJICAgICAgIHVuc2ln bmVkIGludCBjb3VudCkKPiArewo+ICsJSTkxNV9ERUZJTkVfQ09OVEVYVF9FTkdJTkVTX0xPQURf QkFMQU5DRShiYWxhbmNlciwgY291bnQpOwo+ICsJSTkxNV9ERUZJTkVfQ09OVEVYVF9QQVJBTV9F TkdJTkVTKGVuZ2luZXMsIDEgKyBjb3VudCk7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRl eHRfcGFyYW0gcCA9IHsKPiArCQkuY3R4X2lkID0gY3R4LAo+ICsJCS5wYXJhbSA9IEk5MTVfQ09O VEVYVF9QQVJBTV9FTkdJTkVTLAo+ICsJCS5zaXplID0gc2l6ZW9mKGVuZ2luZXMpLAo+ICsJCS52 YWx1ZSA9IHRvX3VzZXJfcG9pbnRlcigmZW5naW5lcykKPiArCX07Cj4gKwo+ICsJbWVtc2V0KCZi YWxhbmNlciwgMCwgc2l6ZW9mKGJhbGFuY2VyKSk7Cj4gKwliYWxhbmNlci5iYXNlLm5hbWUgPSBJ OTE1X0NPTlRFWFRfRU5HSU5FU19FWFRfTE9BRF9CQUxBTkNFOwo+ICsKPiArCWlndF9hc3NlcnQo Y291bnQpOwo+ICsJYmFsYW5jZXIubnVtX3NpYmxpbmdzID0gY291bnQ7Cj4gKwltZW1jcHkoYmFs YW5jZXIuZW5naW5lcywgY2ksIGNvdW50ICogc2l6ZW9mKCpjaSkpOwo+ICsKPiArCW1lbXNldCgm ZW5naW5lcywgMCwgc2l6ZW9mKGVuZ2luZXMpKTsKPiArCWVuZ2luZXMuZXh0ZW5zaW9ucyA9IHRv X3VzZXJfcG9pbnRlcigmYmFsYW5jZXIpOwo+ICsJZW5naW5lcy5lbmdpbmVzWzBdLmVuZ2luZV9j bGFzcyA9Cj4gKwkJSTkxNV9FTkdJTkVfQ0xBU1NfSU5WQUxJRDsKPiArCWVuZ2luZXMuZW5naW5l c1swXS5lbmdpbmVfaW5zdGFuY2UgPQo+ICsJCUk5MTVfRU5HSU5FX0NMQVNTX0lOVkFMSURfTk9O RTsKPiArCW1lbWNweShlbmdpbmVzLmVuZ2luZXMgKyAxLCBjaSwgY291bnQgKiBzaXplb2YoKmNp KSk7Cj4gKwo+ICsJcmV0dXJuIF9fZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGk5MTUsICZwKTsKPiAr fQo+ICsKPiArc3RhdGljIHZvaWQgc2V0X2xvYWRfYmFsYW5jZXIoaW50IGk5MTUsIHVpbnQzMl90 IGN0eCwKPiArCQkJICAgICAgY29uc3Qgc3RydWN0IGk5MTVfZW5naW5lX2NsYXNzX2luc3RhbmNl ICpjaSwKPiArCQkJICAgICAgdW5zaWduZWQgaW50IGNvdW50KQo+ICt7Cj4gKwlpZ3RfYXNzZXJ0 X2VxKF9fc2V0X2xvYWRfYmFsYW5jZXIoaTkxNSwgY3R4LCBjaSwgY291bnQpLCAwKTsKPiArfQo+ ICsKPiArc3RhdGljIHVpbnQzMl90IGxvYWRfYmFsYW5jZXJfY3JlYXRlKGludCBpOTE1LAo+ICsJ CQkJICAgICBjb25zdCBzdHJ1Y3QgaTkxNV9lbmdpbmVfY2xhc3NfaW5zdGFuY2UgKmNpLAo+ICsJ CQkJICAgICB1bnNpZ25lZCBpbnQgY291bnQpCj4gK3sKPiArCXVpbnQzMl90IGN0eDsKPiArCj4g KwljdHggPSBnZW1fY29udGV4dF9jcmVhdGUoaTkxNSk7Cj4gKwlzZXRfbG9hZF9iYWxhbmNlcihp OTE1LCBjdHgsIGNpLCBjb3VudCk7Cj4gKwo+ICsJcmV0dXJuIGN0eDsKPiArfQo+ICsKPiArc3Rh dGljIHVpbnQzMl90IF9fYmF0Y2hfY3JlYXRlKGludCBpOTE1LCB1aW50MzJfdCBvZmZzZXQpCj4g K3sKPiArCWNvbnN0IHVpbnQzMl90IGJiZSA9IE1JX0JBVENIX0JVRkZFUl9FTkQ7Cj4gKwl1aW50 MzJfdCBoYW5kbGU7Cj4gKwo+ICsJaGFuZGxlID0gZ2VtX2NyZWF0ZShpOTE1LCBBTElHTihvZmZz ZXQgKyA0LCA0MDk2KSk7Cj4gKwlnZW1fd3JpdGUoaTkxNSwgaGFuZGxlLCBvZmZzZXQsICZiYmUs IHNpemVvZihiYmUpKTsKPiArCj4gKwlyZXR1cm4gaGFuZGxlOwo+ICt9Cj4gKwo+ICtzdGF0aWMg dWludDMyX3QgYmF0Y2hfY3JlYXRlKGludCBpOTE1KQo+ICt7Cj4gKwlyZXR1cm4gX19iYXRjaF9j cmVhdGUoaTkxNSwgMCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGludmFsaWRfYmFsYW5jZXIo aW50IGk5MTUpCj4gK3sKPiArCUk5MTVfREVGSU5FX0NPTlRFWFRfRU5HSU5FU19MT0FEX0JBTEFO Q0UoYmFsYW5jZXIsIDY0KTsKPiArCUk5MTVfREVGSU5FX0NPTlRFWFRfUEFSQU1fRU5HSU5FUyhl bmdpbmVzLCA2NCk7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW0gcCA9IHsK PiArCQkucGFyYW0gPSBJOTE1X0NPTlRFWFRfUEFSQU1fRU5HSU5FUywKPiArCQkudmFsdWUgPSB0 b191c2VyX3BvaW50ZXIoJmVuZ2luZXMpCj4gKwl9Owo+ICsJdWludDMyX3QgaGFuZGxlOwo+ICsJ dm9pZCAqcHRyOwo+ICsKPiArCS8qCj4gKwkgKiBBc3N1bWUgdGhhdCBJOTE1X0NPTlRFWFRfUEFS QU1fRU5HSU5FIHZhbGlkYXRlcyB0aGUgYXJyYXkKPiArCSAqIG9mIGVuZ2luZXNbXSwgb3VyIGpv YiBpcyB0byBkZXRlcm1pbmUgaWYgdGhlIGxvYWRfYmFsYW5jZXIKPiArCSAqIGV4dGVuc2lvbiBl eHBsb2Rlcy4KPiArCSAqLwo+ICsKPiArCWZvciAoaW50IGNsYXNzID0gMDsgY2xhc3MgPCAzMjsg Y2xhc3MrKykgewo+ICsJCXN0cnVjdCBpOTE1X2VuZ2luZV9jbGFzc19pbnN0YW5jZSAqY2k7Cj4g KwkJdW5zaWduZWQgaW50IGNvdW50Owo+ICsKPiArCQljaSA9IGxpc3RfZW5naW5lcyhpOTE1LCAx IDw8IGNsYXNzLCAmY291bnQpOwo+ICsJCWlmICghY2kpCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiAr CQlpZ3RfZGVidWcoIkZvdW5kICVkIGVuZ2luZXNcbiIsIGNvdW50KTsKPiArCQlpZ3RfYXNzZXJ0 X2x0ZShjb3VudCwgNjQpOwoKSGV5Li4geW91IGFsd2F5cyBzYXkgdHJ1c3QgdGhlIGtlcm5lbCEg OykKCj4gKwo+ICsJCXAuY3R4X2lkID0gZ2VtX2NvbnRleHRfY3JlYXRlKGk5MTUpOwo+ICsJCXAu c2l6ZSA9IChzaXplb2Yoc3RydWN0IGk5MTVfY29udGV4dF9wYXJhbV9lbmdpbmVzKSArCj4gKwkJ CQkoY291bnQgKyAxKSAqIHNpemVvZigqZW5naW5lcy5lbmdpbmVzKSk7CgpBbGlnbm1lbnQgbG9v a3Mgb2ZmLgoKPiArCj4gKwkJbWVtc2V0KCZlbmdpbmVzLCAwLCBzaXplb2YoZW5naW5lcykpOwo+ ICsJCWVuZ2luZXMuZW5naW5lc1swXS5lbmdpbmVfY2xhc3MgPSBJOTE1X0VOR0lORV9DTEFTU19J TlZBTElEOwo+ICsJCWVuZ2luZXMuZW5naW5lc1swXS5lbmdpbmVfaW5zdGFuY2UgPSBJOTE1X0VO R0lORV9DTEFTU19JTlZBTElEX05PTkU7Cj4gKwkJbWVtY3B5KGVuZ2luZXMuZW5naW5lcyArIDEs IGNpLCBjb3VudCAqIHNpemVvZigqY2kpKTsKPiArCQlnZW1fY29udGV4dF9zZXRfcGFyYW0oaTkx NSwgJnApOwo+ICsKPiArCQllbmdpbmVzLmV4dGVuc2lvbnMgPSAtMXVsbDsKPiArCQlpZ3RfYXNz ZXJ0X2VxKF9fZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGk5MTUsICZwKSwgLUVGQVVMVCk7Cj4gKwo+ ICsJCWVuZ2luZXMuZXh0ZW5zaW9ucyA9IDF1bGw7Cj4gKwkJaWd0X2Fzc2VydF9lcShfX2dlbV9j b250ZXh0X3NldF9wYXJhbShpOTE1LCAmcCksIC1FRkFVTFQpOwo+ICsKPiArCQltZW1zZXQoJmJh bGFuY2VyLCAwLCBzaXplb2YoYmFsYW5jZXIpKTsKPiArCQliYWxhbmNlci5iYXNlLm5hbWUgPSBJ OTE1X0NPTlRFWFRfRU5HSU5FU19FWFRfTE9BRF9CQUxBTkNFOwo+ICsJCWJhbGFuY2VyLm51bV9z aWJsaW5ncyA9IGNvdW50Owo+ICsJCW1lbWNweShiYWxhbmNlci5lbmdpbmVzLCBjaSwgY291bnQg KiBzaXplb2YoKmNpKSk7Cj4gKwo+ICsJCWVuZ2luZXMuZXh0ZW5zaW9ucyA9IHRvX3VzZXJfcG9p bnRlcigmYmFsYW5jZXIpOwo+ICsJCWdlbV9jb250ZXh0X3NldF9wYXJhbShpOTE1LCAmcCk7Cj4g Kwo+ICsJCWJhbGFuY2VyLmVuZ2luZV9pbmRleCA9IDE7Cj4gKwkJaWd0X2Fzc2VydF9lcShfX2dl bV9jb250ZXh0X3NldF9wYXJhbShpOTE1LCAmcCksIC1FRVhJU1QpOwo+ICsKPiArCQliYWxhbmNl ci5lbmdpbmVfaW5kZXggPSBjb3VudDsKPiArCQlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRf c2V0X3BhcmFtKGk5MTUsICZwKSwgLUVFWElTVCk7Cj4gKwo+ICsJCWJhbGFuY2VyLmVuZ2luZV9p bmRleCA9IGNvdW50ICsgMTsKPiArCQlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRfc2V0X3Bh cmFtKGk5MTUsICZwKSwgLUVJTlZBTCk7Cj4gKwo+ICsJCWJhbGFuY2VyLmVuZ2luZV9pbmRleCA9 IDA7Cj4gKwkJZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGk5MTUsICZwKTsKPiArCj4gKwkJYmFsYW5j ZXIuYmFzZS5uZXh0X2V4dGVuc2lvbiA9IHRvX3VzZXJfcG9pbnRlcigmYmFsYW5jZXIpOwo+ICsJ CWlndF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9zZXRfcGFyYW0oaTkxNSwgJnApLCAtRUVYSVNU KTsKPiArCj4gKwkJYmFsYW5jZXIuYmFzZS5uZXh0X2V4dGVuc2lvbiA9IC0xdWxsOwo+ICsJCWln dF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9zZXRfcGFyYW0oaTkxNSwgJnApLCAtRUZBVUxUKTsK PiArCj4gKwkJaGFuZGxlID0gZ2VtX2NyZWF0ZShpOTE1LCA0MDk2ICogMyk7Cj4gKwkJcHRyID0g Z2VtX21tYXBfX2d0dChpOTE1LCBoYW5kbGUsIDQwOTYgKiAzLCBQUk9UX1dSSVRFKTsKPiArCQln ZW1fY2xvc2UoaTkxNSwgaGFuZGxlKTsKPiArCj4gKwkJbWVtc2V0KCZlbmdpbmVzLCAwLCBzaXpl b2YoZW5naW5lcykpOwo+ICsJCWVuZ2luZXMuZW5naW5lc1swXS5lbmdpbmVfY2xhc3MgPSBJOTE1 X0VOR0lORV9DTEFTU19JTlZBTElEOwo+ICsJCWVuZ2luZXMuZW5naW5lc1swXS5lbmdpbmVfaW5z dGFuY2UgPSBJOTE1X0VOR0lORV9DTEFTU19JTlZBTElEX05PTkU7Cj4gKwkJZW5naW5lcy5lbmdp bmVzWzFdLmVuZ2luZV9jbGFzcyA9IEk5MTVfRU5HSU5FX0NMQVNTX0lOVkFMSUQ7Cj4gKwkJZW5n aW5lcy5lbmdpbmVzWzFdLmVuZ2luZV9pbnN0YW5jZSA9IEk5MTVfRU5HSU5FX0NMQVNTX0lOVkFM SURfTk9ORTsKPiArCQltZW1jcHkoZW5naW5lcy5lbmdpbmVzICsgMiwgY2ksIGNvdW50ICogc2l6 ZW9mKGNpKSk7Cj4gKwkJcC5zaXplID0gKHNpemVvZihzdHJ1Y3QgaTkxNV9jb250ZXh0X3BhcmFt X2VuZ2luZXMpICsKPiArCQkJCShjb3VudCArIDIpICogc2l6ZW9mKCplbmdpbmVzLmVuZ2luZXMp KTsKCkFsaWdubWVudCBhZ2Fpbi4KCj4gKwkJZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGk5MTUsICZw KTsKPiArCj4gKwkJYmFsYW5jZXIuYmFzZS5uZXh0X2V4dGVuc2lvbiA9IDA7Cj4gKwkJYmFsYW5j ZXIuZW5naW5lX2luZGV4ID0gMTsKPiArCQllbmdpbmVzLmV4dGVuc2lvbnMgPSB0b191c2VyX3Bv aW50ZXIoJmJhbGFuY2VyKTsKPiArCQlnZW1fY29udGV4dF9zZXRfcGFyYW0oaTkxNSwgJnApOwo+ ICsKPiArCQltZW1jcHkocHRyICsgNDA5NiAtIDgsICZiYWxhbmNlciwgc2l6ZW9mKGJhbGFuY2Vy KSk7Cj4gKwkJbWVtY3B5KHB0ciArIDgxOTIgLSA4LCAmYmFsYW5jZXIsIHNpemVvZihiYWxhbmNl cikpOwo+ICsJCWJhbGFuY2VyLmVuZ2luZV9pbmRleCA9IDA7Cj4gKwo+ICsJCWVuZ2luZXMuZXh0 ZW5zaW9ucyA9IHRvX3VzZXJfcG9pbnRlcihwdHIpICsgNDA5NiAtIDg7Cj4gKwkJZ2VtX2NvbnRl eHRfc2V0X3BhcmFtKGk5MTUsICZwKTsKPiArCj4gKwkJYmFsYW5jZXIuYmFzZS5uZXh0X2V4dGVu c2lvbiA9IGVuZ2luZXMuZXh0ZW5zaW9uczsKPiArCQllbmdpbmVzLmV4dGVuc2lvbnMgPSB0b191 c2VyX3BvaW50ZXIoJmJhbGFuY2VyKTsKPiArCQlnZW1fY29udGV4dF9zZXRfcGFyYW0oaTkxNSwg JnApOwoKbW1hcF9ndHQgYW5kIHVubWFwcGVkIGFyZWEgdGVzdGluZyBpbiBvbmU/Cgo+ICsJCW11 bm1hcChwdHIsIDQwOTYpOyA+KwkJaWd0X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X3NldF9wYXJh bShpOTE1LCAmcCksIC1FRkFVTFQpOwo+ICsJCWVuZ2luZXMuZXh0ZW5zaW9ucyA9IHRvX3VzZXJf cG9pbnRlcihwdHIpICsgNDA5NiAtIDg7Cj4gKwkJaWd0X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0 X3NldF9wYXJhbShpOTE1LCAmcCksIC1FRkFVTFQpOwo+ICsKPiArCQllbmdpbmVzLmV4dGVuc2lv bnMgPSB0b191c2VyX3BvaW50ZXIocHRyKSArIDgxOTIgLSA4Owo+ICsJCWdlbV9jb250ZXh0X3Nl dF9wYXJhbShpOTE1LCAmcCk7Cj4gKwo+ICsJCWJhbGFuY2VyLmJhc2UubmV4dF9leHRlbnNpb24g PSBlbmdpbmVzLmV4dGVuc2lvbnM7Cj4gKwkJZW5naW5lcy5leHRlbnNpb25zID0gdG9fdXNlcl9w b2ludGVyKCZiYWxhbmNlcik7Cj4gKwkJZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGk5MTUsICZwKTsK PiArCj4gKwkJbXVubWFwKHB0ciArIDgxOTIsIDQwOTYpOwo+ICsJCWlndF9hc3NlcnRfZXEoX19n ZW1fY29udGV4dF9zZXRfcGFyYW0oaTkxNSwgJnApLCAtRUZBVUxUKTsKPiArCQllbmdpbmVzLmV4 dGVuc2lvbnMgPSB0b191c2VyX3BvaW50ZXIocHRyKSArIDgxOTIgLSA4Owo+ICsJCWlndF9hc3Nl cnRfZXEoX19nZW1fY29udGV4dF9zZXRfcGFyYW0oaTkxNSwgJnApLCAtRUZBVUxUKTsKPiArCj4g KwkJbXVubWFwKHB0ciArIDQwOTYsIDQwOTYpOwo+ICsKPiArCQlnZW1fY29udGV4dF9kZXN0cm95 KGk5MTUsIHAuY3R4X2lkKTsKPiArCQlmcmVlKGNpKTsKPiArCX0KPiArfQo+ICsKPiArc3RhdGlj IHZvaWQga2lja19rdGhyZWFkcyhpbnQgcGVyaW9kX3VzKQo+ICt7Cj4gKwlzY2hlZF95aWVsZCgp Owo+ICsJdXNsZWVwKHBlcmlvZF91cyk7Cgp5aWVsZCBhbmQgc2xlZXAgaG0uLiBjYWxsaW5nIHdp dGggemVybyBwZXJpb2RfdXM/IERvZXNuJ3Qgc2VlbSBsaWtlIGl0LiAKU28gd2hhdCdzIGl0IGFi b3V0PwoKPiArfQo+ICsKPiArc3RhdGljIGRvdWJsZSBtZWFzdXJlX2xvYWQoaW50IHBtdSwgaW50 IHBlcmlvZF91cykKPiArewo+ICsJdWludDY0X3QgZGF0YVsyXTsKPiArCXVpbnQ2NF90IGRfdCwg ZF92Owo+ICsKPiArCWtpY2tfa3RocmVhZHMocGVyaW9kX3VzKTsKPiArCj4gKwlpZ3RfYXNzZXJ0 X2VxKHJlYWQocG11LCBkYXRhLCBzaXplb2YoZGF0YSkpLCBzaXplb2YoZGF0YSkpOwo+ICsJZF92 ID0gLWRhdGFbMF07Cj4gKwlkX3QgPSAtZGF0YVsxXTsKPiArCj4gKwl1c2xlZXAocGVyaW9kX3Vz KTsKPiArCj4gKwlpZ3RfYXNzZXJ0X2VxKHJlYWQocG11LCBkYXRhLCBzaXplb2YoZGF0YSkpLCBz aXplb2YoZGF0YSkpOwo+ICsJZF92ICs9IGRhdGFbMF07Cj4gKwlkX3QgKz0gZGF0YVsxXTsKClRo aXMgLXZhbCArIHZhbCB0cmljayB3aXRoIHVpbnQ2NF90IHdvcmtzPwoKPiArCj4gKwlyZXR1cm4g ZF92IC8gKGRvdWJsZSlkX3Q7Cj4gK30KPiArCj4gK3N0YXRpYyBkb3VibGUgbWVhc3VyZV9taW5f bG9hZChpbnQgcG11LCB1bnNpZ25lZCBpbnQgbnVtLCBpbnQgcGVyaW9kX3VzKQo+ICt7Cj4gKwl1 aW50NjRfdCBkYXRhWzIgKyBudW1dOwo+ICsJdWludDY0X3QgZF90LCBkX3ZbbnVtXTsKPiArCXVp bnQ2NF90IG1pbiA9IC0xLCBtYXggPSAwOwo+ICsKPiArCWtpY2tfa3RocmVhZHMocGVyaW9kX3Vz KTsKPiArCj4gKwlpZ3RfYXNzZXJ0X2VxKHJlYWQocG11LCBkYXRhLCBzaXplb2YoZGF0YSkpLCBz aXplb2YoZGF0YSkpOwo+ICsJZm9yICh1bnNpZ25lZCBpbnQgbiA9IDA7IG4gPCBudW07IG4rKykK PiArCQlkX3Zbbl0gPSAtZGF0YVsyICsgbl07Cj4gKwlkX3QgPSAtZGF0YVsxXTsKPiArCj4gKwl1 c2xlZXAocGVyaW9kX3VzKTsKPiArCj4gKwlpZ3RfYXNzZXJ0X2VxKHJlYWQocG11LCBkYXRhLCBz aXplb2YoZGF0YSkpLCBzaXplb2YoZGF0YSkpOwo+ICsKPiArCWRfdCArPSBkYXRhWzFdOwo+ICsJ Zm9yICh1bnNpZ25lZCBpbnQgbiA9IDA7IG4gPCBudW07IG4rKykgewo+ICsJCWRfdltuXSArPSBk YXRhWzIgKyBuXTsKPiArCQlpZ3RfZGVidWcoImVuZ2luZVslZF06ICUuMWYlJVxuIiwKPiArCQkJ ICBuLCBkX3Zbbl0gLyAoZG91YmxlKWRfdCAqIDEwMCk7Cj4gKwkJaWYgKGRfdltuXSA8IG1pbikK PiArCQkJbWluID0gZF92W25dOwo+ICsJCWlmIChkX3Zbbl0gPiBtYXgpCj4gKwkJCW1heCA9IGRf dltuXTsKPiArCX0KPiArCj4gKwlpZ3RfZGVidWcoImVsYXBzZWQ6ICUiUFJJdTY0Im5zLCBsb2Fk IFslLjFmLCAlLjFmXSUlXG4iLAo+ICsJCSAgZF90LCBtaW4gLyAoZG91YmxlKWRfdCAqIDEwMCwg IG1heCAvIChkb3VibGUpZF90ICogMTAwKTsKPiArCj4gKwlyZXR1cm4gbWluIC8gKGRvdWJsZSlk X3Q7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGNoZWNrX2luZGl2aWR1YWxfZW5naW5lKGludCBp OTE1LAo+ICsJCQkJICAgIHVpbnQzMl90IGN0eCwKPiArCQkJCSAgICBjb25zdCBzdHJ1Y3QgaTkx NV9lbmdpbmVfY2xhc3NfaW5zdGFuY2UgKmNpLAo+ICsJCQkJICAgIGludCBpZHgpCj4gK3sKPiAr CWlndF9zcGluX3QgKnNwaW47Cj4gKwlkb3VibGUgbG9hZDsKPiArCWludCBwbXU7Cj4gKwo+ICsJ cG11ID0gcGVyZl9pOTE1X29wZW4oSTkxNV9QTVVfRU5HSU5FX0JVU1koY2lbaWR4XS5lbmdpbmVf Y2xhc3MsCj4gKwkJCQkJCSAgY2lbaWR4XS5lbmdpbmVfaW5zdGFuY2UpKTsKPiArCj4gKwlzcGlu ID0gaWd0X3NwaW5fbmV3KGk5MTUsIC5jdHggPSBjdHgsIC5lbmdpbmUgPSBpZHggKyAxKTsKPiAr CWxvYWQgPSBtZWFzdXJlX2xvYWQocG11LCAxMDAwMCk7CgpIbSB1c2xlZXAgYmVmb3JlIHN0YXJ0 IG9mIG1lYXN1cmluZyBhbmQgYmV0d2VlbiB0d28gc2FtcGxlcyBpcyB0aGUgc2FtZS4gClRoZSBv bmUgYmVmb3JlIHNob3VsZCBiZSBmaXhlZCBJIHRoaW5rLCBubz8KCj4gKwlpZ3Rfc3Bpbl9mcmVl KGk5MTUsIHNwaW4pOwo+ICsKPiArCWNsb3NlKHBtdSk7Cj4gKwo+ICsJaWd0X2Fzc2VydF9mKGxv YWQgPiAwLjkwLAo+ICsJCSAgICAgImVuZ2luZSAlZCAoY2xhc3M6aW5zdGFuY2UgJWQ6JWQpIHdh cyBmb3VuZCB0byBiZSBvbmx5ICUuMWYlJSBidXN5XG4iLAo+ICsJCSAgICAgaWR4LCBjaVtpZHhd LmVuZ2luZV9jbGFzcywgY2lbaWR4XS5lbmdpbmVfaW5zdGFuY2UsIGxvYWQqMTAwKTsKPiArfQo+ ICsKPiArc3RhdGljIHZvaWQgaW5kaXZpZHVhbChpbnQgaTkxNSkKPiArewo+ICsJdWludDMyX3Qg Y3R4Owo+ICsKPiArCS8qCj4gKwkgKiBJOTE1X0NPTlRFWFRfUEFSQU1fRU5HSU5FIGFsbG93cyB1 cyB0byBpbmRleCBpbnRvIHRoZSB1c2VyCj4gKwkgKiBzdXBwbGllZCBhcnJheSBmcm9tIGdlbV9l eGVjYnVmKCkuIE91ciBjaGVjayBpcyB0byBidWlsZCB0aGUKPiArCSAqIGN0eC0+ZW5naW5lW10g d2l0aCB2YXJpb3VzIGRpZmZlcmVudCBlbmdpbmUgY2xhc3NlcywgZmVlZCBpbgo+ICsJICogYSBz cGlubmVyIGFuZCB0aGVuIGFzayBwbXUgdG8gY29uZmlybSBpdCB0aGUgZXhwZWN0ZWQgZW5naW5l Cj4gKwkgKiB3YXMgYnVzeS4KPiArCSAqLwo+ICsKPiArCWN0eCA9IGdlbV9jb250ZXh0X2NyZWF0 ZShpOTE1KTsKPiArCj4gKwlmb3IgKGludCBtYXNrID0gMDsgbWFzayA8IDMyOyBtYXNrKyspIHsK PiArCQlzdHJ1Y3QgaTkxNV9lbmdpbmVfY2xhc3NfaW5zdGFuY2UgKmNpOwo+ICsJCXVuc2lnbmVk IGludCBjb3VudDsKPiArCj4gKwkJY2kgPSBsaXN0X2VuZ2luZXMoaTkxNSwgMXUgPDwgbWFzaywg JmNvdW50KTsKPiArCQlpZiAoIWNpKQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJaWd0X2RlYnVn KCJGb3VuZCAlZCBlbmdpbmVzIG9mIGNsYXNzICVkXG4iLCBjb3VudCwgbWFzayk7Cj4gKwo+ICsJ CWZvciAoaW50IHBhc3MgPSAwOyBwYXNzIDwgY291bnQ7IHBhc3MrKykgeyAvKiBhcHByb3guIGNv dW50ISAqLwo+ICsJCQlpZ3RfcGVybXV0ZV9hcnJheShjaSwgY291bnQsIGlndF9leGNoYW5nZV9p bnQ2NCk7CgpzdHJ1Y3QgaTkxNV9lbmdpbmVfY2xhc3NfaW5zdGFuY2UgaXMgZm91ciBieXRlcyBs b25nLCBzbyBzd2FwIGZ1bmMgbG9va3MgCndyb25nLiBVbmxlc3MgZm9yIHNvbWUgcmVhc29uIHlv dSB3YW50IHRvIHN3YXAgaW4gYmxvY2tzIG9mIHR3by4gRG9uJ3QgCmtub3cuIExhc3QgaW5kZXgg d291bGQgZ3JhYiBpbnRvIHJhbmRvbSBtZW1vcnkgdGhvdWdoLiBJIG11c3QgYmUgbWlzc2luZyAK c29tZXRoaW5nIG9yIGl0IHdvdWxkbid0IGhhdmUgd29ya2VkLi4KCj4gKwkJCXNldF9sb2FkX2Jh bGFuY2VyKGk5MTUsIGN0eCwgY2ksIGNvdW50KTsKPiArCQkJZm9yICh1bnNpZ25lZCBpbnQgbiA9 IDA7IG4gPCBjb3VudDsgbisrKQo+ICsJCQkJY2hlY2tfaW5kaXZpZHVhbF9lbmdpbmUoaTkxNSwg Y3R4LCBjaSwgbik7Cj4gKwkJfQo+ICsKPiArCQlmcmVlKGNpKTsKPiArCX0KPiArCj4gKwlnZW1f Y29udGV4dF9kZXN0cm95KGk5MTUsIGN0eCk7Cj4gKwlnZW1fcXVpZXNjZW50X2dwdShpOTE1KTsK PiArfQo+ICsKPiArc3RhdGljIHZvaWQgaW5kaWNpZXMoaW50IGk5MTUpCgppbmRpY2VzPwoKPiAr ewo+ICsJSTkxNV9ERUZJTkVfQ09OVEVYVF9QQVJBTV9FTkdJTkVTKGVuZ2luZXMsIEk5MTVfRVhF Q19SSU5HX01BU0sgKyAxKTsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbSBw ID0gewo+ICsJCS5jdHhfaWQgPSBnZW1fY29udGV4dF9jcmVhdGUoaTkxNSksCj4gKwkJLnBhcmFt ID0gSTkxNV9DT05URVhUX1BBUkFNX0VOR0lORVMsCj4gKwkJLnZhbHVlID0gdG9fdXNlcl9wb2lu dGVyKCZlbmdpbmVzKQo+ICsJfTsKPiArCj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2Jq ZWN0MiBiYXRjaCA9IHsKPiArCQkuaGFuZGxlID0gYmF0Y2hfY3JlYXRlKGk5MTUpLAo+ICsJfTsK PiArCj4gKwl1bnNpZ25lZCBpbnQgbmVuZ2luZXMgPSAwOwo+ICsJdm9pZCAqYmFsYW5jZXJzID0g TlVMTDsKPiArCj4gKwkvKgo+ICsJICogV2UgY2FuIHBvcHVsYXRlIG91ciBlbmdpbmUgbWFwIHdp dGggbXVsdGlwbGUgdmlydHVhbCBlbmdpbmVzLgo+ICsJICogRG8gc28uCj4gKwkgKi8KPiArCj4g Kwlmb3IgKGludCBjbGFzcyA9IDA7IGNsYXNzIDwgMzI7IGNsYXNzKyspIHsKPiArCQlzdHJ1Y3Qg aTkxNV9lbmdpbmVfY2xhc3NfaW5zdGFuY2UgKmNpOwo+ICsJCXVuc2lnbmVkIGludCBjb3VudDsK PiArCj4gKwkJY2kgPSBsaXN0X2VuZ2luZXMoaTkxNSwgMXUgPDwgY2xhc3MsICZjb3VudCk7Cj4g KwkJaWYgKCFjaSkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCWlndF9kZWJ1ZygiRm91bmQgJWQg ZW5naW5lcyBvZiBjbGFzcyAlZFxuIiwgY291bnQsIGNsYXNzKTsKCk1heWJlIHRoaXMgZGVidWcg bWVzc2FnZSBzaG91bGQgZ28gaW50byBsaXN0X2VuZ2luZXMsIHNpbmNlIGl0IHNlZW1zIApyZXBl YXRlZCBhIGZldyB0aW1lcyBhbHJlYWR5LgoKPiArCj4gKwkJZm9yIChpbnQgbiA9IDA7IG4gPCBj b3VudDsgbisrKSB7Cj4gKwkJCUk5MTVfREVGSU5FX0NPTlRFWFRfRU5HSU5FU19MT0FEX0JBTEFO Q0UoKmJhbGFuY2VyLAo+ICsJCQkJCQkJCSBjb3VudCk7Cj4gKwo+ICsJCQllbmdpbmVzLmVuZ2lu ZXNbbmVuZ2luZXNdLmVuZ2luZV9jbGFzcyA9Cj4gKwkJCQlJOTE1X0VOR0lORV9DTEFTU19JTlZB TElEOwo+ICsJCQllbmdpbmVzLmVuZ2luZXNbbmVuZ2luZXNdLmVuZ2luZV9pbnN0YW5jZSA9Cj4g KwkJCQlJOTE1X0VOR0lORV9DTEFTU19JTlZBTElEX05PTkU7Cj4gKwo+ICsJCQliYWxhbmNlciA9 IGNhbGxvYyhzaXplb2YoKmJhbGFuY2VyKSwgMSk7Cj4gKwkJCWlndF9hc3NlcnQoYmFsYW5jZXIp Owo+ICsKPiArCQkJYmFsYW5jZXItPmJhc2UubmFtZSA9Cj4gKwkJCQlJOTE1X0NPTlRFWFRfRU5H SU5FU19FWFRfTE9BRF9CQUxBTkNFOwo+ICsJCQliYWxhbmNlci0+YmFzZS5uZXh0X2V4dGVuc2lv biA9Cj4gKwkJCQl0b191c2VyX3BvaW50ZXIoYmFsYW5jZXJzKTsKPiArCQkJYmFsYW5jZXJzID0g YmFsYW5jZXI7Cj4gKwo+ICsJCQliYWxhbmNlci0+ZW5naW5lX2luZGV4ID0gbmVuZ2luZXMrKzsK PiArCQkJYmFsYW5jZXItPm51bV9zaWJsaW5ncyA9IGNvdW50Owo+ICsKPiArCQkJbWVtY3B5KGJh bGFuY2VyLT5lbmdpbmVzLAo+ICsJCQkgICAgICAgY2ksIGNvdW50ICogc2l6ZW9mKCpjaSkpOwo+ ICsJCX0KPiArCQlmcmVlKGNpKTsKPiArCX0KPiArCj4gKwlpZ3RfcmVxdWlyZShiYWxhbmNlcnMp Owo+ICsJZW5naW5lcy5leHRlbnNpb25zID0gdG9fdXNlcl9wb2ludGVyKGJhbGFuY2Vycyk7Cj4g KwlwLnNpemUgPSAoc2l6ZW9mKHN0cnVjdCBpOTE1X2VuZ2luZV9jbGFzc19pbnN0YW5jZSkgKiBu ZW5naW5lcyArCj4gKwkJICBzaXplb2Yoc3RydWN0IGk5MTVfY29udGV4dF9wYXJhbV9lbmdpbmVz KSk7Cj4gKwlnZW1fY29udGV4dF9zZXRfcGFyYW0oaTkxNSwgJnApOwo+ICsKPiArCWZvciAodW5z aWduZWQgaW50IG4gPSAwOyBuIDwgbmVuZ2luZXM7IG4rKykgewo+ICsJCXN0cnVjdCBkcm1faTkx NV9nZW1fZXhlY2J1ZmZlcjIgZWIgPSB7Cj4gKwkJCS5idWZmZXJzX3B0ciA9IHRvX3VzZXJfcG9p bnRlcigmYmF0Y2gpLAo+ICsJCQkuYnVmZmVyX2NvdW50ID0gMSwKPiArCQkJLmZsYWdzID0gbiwK PiArCQkJLnJzdmQxID0gcC5jdHhfaWQsCj4gKwkJfTsKPiArCQlpZ3RfZGVidWcoIkV4ZWN1dGlu ZyBvbiBpbmRleD0lZFxuIiwgbik7Cj4gKwkJZ2VtX2V4ZWNidWYoaTkxNSwgJmViKTsKPiArCX0K PiArCWdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwgcC5jdHhfaWQpOwo+ICsKPiArCWdlbV9zeW5j KGk5MTUsIGJhdGNoLmhhbmRsZSk7Cj4gKwlnZW1fY2xvc2UoaTkxNSwgYmF0Y2guaGFuZGxlKTsK PiArCj4gKwl3aGlsZSAoYmFsYW5jZXJzKSB7Cj4gKwkJc3RydWN0IGk5MTVfY29udGV4dF9lbmdp bmVzX2xvYWRfYmFsYW5jZSAqYiwgKm47Cj4gKwo+ICsJCWIgPSBiYWxhbmNlcnM7Cj4gKwkJbiA9 IGZyb21fdXNlcl9wb2ludGVyKGItPmJhc2UubmV4dF9leHRlbnNpb24pOwo+ICsJCWZyZWUoYik7 Cj4gKwo+ICsJCWJhbGFuY2VycyA9IG47Cj4gKwl9Cj4gKwo+ICsJZ2VtX3F1aWVzY2VudF9ncHUo aTkxNSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGJ1c3koaW50IGk5MTUpCj4gK3sKPiArCXVp bnQzMl90IHNjcmF0Y2ggPSBnZW1fY3JlYXRlKGk5MTUsIDQwOTYpOwo+ICsKPiArCS8qCj4gKwkg KiBDaGVjayB0aGF0IHZpcnR1YWwgZW5naW5lcyBhcmUgcmVwb3J0ZWQgdmlhIEdFTV9CVVNZLgo+ ICsJICoKPiArCSAqIFdoZW4gcnVubmluZywgdGhlIGJhdGNoIHdpbGwgYmUgb24gdGhlIHJlYWwg ZW5naW5lIGFuZCByZXBvcnQKPiArCSAqIHRoZSBhY3R1YWwgY2xhc3MuCj4gKwkgKgo+ICsJICog UHJpb3IgdG8gcnVubmluZywgaWYgdGhlIGxvYWQtYmFsYW5jZXIgaXMgYWNyb3NzIG11bHRpcGxl Cj4gKwkgKiBjbGFzc2VzIHdlIGRvbid0IGtub3cgd2hpY2ggZW5naW5lIHRoZSBiYXRjaCB3aWxs Cj4gKwkgKiBleGVjdXRlIG9uLCBzbyB3ZSByZXBvcnQgdGhlbSBhbGwhCj4gKwkgKgo+ICsJICog SG93ZXZlciwgYXMgd2Ugb25seSBzdXBwb3J0IChhbmQgdGVzdCkgY3JlYXRpbmcgYSBsb2FkLWJh bGFuY2VyCj4gKwkgKiBmcm9tIGVuZ2luZXMgb2Ygb25seSBvbmUgY2xhc3MsIHRoYXQgY2FuIGJl IHByb3BhZ2F0ZWQgYWNjdXJhdGVseQo+ICsJICogdGhyb3VnaCB0byBHRU1fQlVTWS4KPiArCSAq Lwo+ICsKPiArCWZvciAoaW50IGNsYXNzID0gMDsgY2xhc3MgPCAxNjsgY2xhc3MrKykgewo+ICsJ CXN0cnVjdCBkcm1faTkxNV9nZW1fYnVzeSBidXN5Owo+ICsJCXN0cnVjdCBpOTE1X2VuZ2luZV9j bGFzc19pbnN0YW5jZSAqY2k7Cj4gKwkJdW5zaWduZWQgaW50IGNvdW50Owo+ICsJCWlndF9zcGlu X3QgKnNwaW5bMl07Cj4gKwkJdWludDMyX3QgY3R4Owo+ICsKPiArCQljaSA9IGxpc3RfZW5naW5l cyhpOTE1LCAxdSA8PCBjbGFzcywgJmNvdW50KTsKPiArCQlpZiAoIWNpKQo+ICsJCQljb250aW51 ZTsKPiArCj4gKwkJaWd0X2RlYnVnKCJGb3VuZCAlZCBlbmdpbmVzIG9mIGNsYXNzICVkXG4iLCBj b3VudCwgY2xhc3MpOwo+ICsJCWN0eCA9IGxvYWRfYmFsYW5jZXJfY3JlYXRlKGk5MTUsIGNpLCBj b3VudCk7Cj4gKwkJZnJlZShjaSk7Cj4gKwo+ICsJCXNwaW5bMF0gPSBfX2lndF9zcGluX25ldyhp OTE1LAo+ICsJCQkJCSAuY3R4ID0gY3R4LAo+ICsJCQkJCSAuZmxhZ3MgPSBJR1RfU1BJTl9QT0xM X1JVTik7Cj4gKwkJc3BpblsxXSA9IF9faWd0X3NwaW5fbmV3KGk5MTUsCj4gKwkJCQkJIC5jdHgg PSBjdHgsCj4gKwkJCQkJIC5kZXBlbmRlbmN5ID0gc2NyYXRjaCk7Cj4gKwo+ICsJCWlndF9zcGlu X2J1c3l3YWl0X3VudGlsX3N0YXJ0ZWQoc3BpblswXSk7Cj4gKwo+ICsJCS8qIFJ1bm5pbmc6IGFj dHVhbCBjbGFzcyAqLwo+ICsJCWJ1c3kuaGFuZGxlID0gc3BpblswXS0+aGFuZGxlOwo+ICsJCWRv X2lvY3RsKGk5MTUsIERSTV9JT0NUTF9JOTE1X0dFTV9CVVNZLCAmYnVzeSk7Cj4gKwkJaWd0X2Fz c2VydF9lcV91MzIoYnVzeS5idXN5LCAxdSA8PCAoY2xhc3MgKyAxNikpOwo+ICsKPiArCQkvKiBR dWV1ZWQocmVhZCk6IGV4cGVjdGVkIGNsYXNzICovCj4gKwkJYnVzeS5oYW5kbGUgPSBzcGluWzFd LT5oYW5kbGU7Cj4gKwkJZG9faW9jdGwoaTkxNSwgRFJNX0lPQ1RMX0k5MTVfR0VNX0JVU1ksICZi dXN5KTsKPiArCQlpZ3RfYXNzZXJ0X2VxX3UzMihidXN5LmJ1c3ksIDF1IDw8IChjbGFzcyArIDE2 KSk7Cj4gKwo+ICsJCS8qIFF1ZXVlZCh3cml0ZSk6IGV4cGVjdGVkIGNsYXNzICovCj4gKwkJYnVz eS5oYW5kbGUgPSBzY3JhdGNoOwo+ICsJCWRvX2lvY3RsKGk5MTUsIERSTV9JT0NUTF9JOTE1X0dF TV9CVVNZLCAmYnVzeSk7Cj4gKwkJaWd0X2Fzc2VydF9lcV91MzIoYnVzeS5idXN5LAo+ICsJCQkJ ICAoMXUgPDwgKGNsYXNzICsgMTYpKSB8IChjbGFzcyArIDEpKTsKPiArCj4gKwkJaWd0X3NwaW5f ZnJlZShpOTE1LCBzcGluWzFdKTsKPiArCQlpZ3Rfc3Bpbl9mcmVlKGk5MTUsIHNwaW5bMF0pOwo+ ICsKPiArCQlnZW1fY29udGV4dF9kZXN0cm95KGk5MTUsIGN0eCk7Cj4gKwl9Cj4gKwo+ICsJZ2Vt X2Nsb3NlKGk5MTUsIHNjcmF0Y2gpOwo+ICsJZ2VtX3F1aWVzY2VudF9ncHUoaTkxNSk7Cj4gK30K PiArCj4gK3N0YXRpYyBpbnQgYWRkX3BtdShpbnQgcG11LCBjb25zdCBzdHJ1Y3QgaTkxNV9lbmdp bmVfY2xhc3NfaW5zdGFuY2UgKmNpKQo+ICt7Cj4gKwlyZXR1cm4gcGVyZl9pOTE1X29wZW5fZ3Jv dXAoSTkxNV9QTVVfRU5HSU5FX0JVU1koY2ktPmVuZ2luZV9jbGFzcywKPiArCQkJCQkJCSBjaS0+ ZW5naW5lX2luc3RhbmNlKSwKPiArCQkJCSAgICBwbXUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9p ZCBmdWxsKGludCBpOTE1LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCj4gKyNkZWZpbmUgUFVMU0UgMHgx Cj4gKyNkZWZpbmUgTEFURSAweDIKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29i amVjdDIgYmF0Y2ggPSB7Cj4gKwkJLmhhbmRsZSA9IGJhdGNoX2NyZWF0ZShpOTE1KSwKPiArCX07 Cj4gKwo+ICsJaWYgKGZsYWdzICYgTEFURSkKPiArCQlpZ3RfcmVxdWlyZV9zd19zeW5jKCk7Cj4g Kwo+ICsJLyoKPiArCSAqIEk5MTVfQ09OVEVYVF9QQVJBTV9FTkdJTkUgY2hhbmdlcyB0aGUgbWVh bmluZyBvZiBJOTE1X0VYRUNfREVGQVVMVAo+ICsJICogdG8gcHJvdmlkZSBhbiBhdXRvbWF0aWMg c2VsZWN0aW9uIGZyb20gdGhlIGN0eC0+ZW5naW5lW10uIEl0Cj4gKwkgKiBlbXBsb3lzIGxvYWQt YmFsYW5jaW5nIHRvIGV2ZW5seSBkaXN0cmlidXRlIHRoZSB3b3JrbG9hZCB0aGUKClRoZSBsZWFk aW5nIHNlY3Rpb24gbmVlZHMgcmV3cml0dGluZyBmb3IgdHJ1dGguIEl0IGlzIHRoZSBsb2FkIGJh bGFuY2UgCmV4dGVuc2lvbnMgd2hpY2ggX2Nhbl8gcmVkZWZpbmUgdGhlIG1lYW5pZ24gb2YgSTkx NV9FWEVDX0RFRkFVTFQgZXRjLi4gCkknbSBzdXJlIEkgZGlkbid0IG5lZWQgdG8gZXhwbGFpbiwg YnV0IGhhdmUganVzdCB0byBtYWtlIGl0IGNsZWFyIHdoaWNoIApwYXJ0IEkgYW0gY29tcGxhaW5p bmcgYWJvdXQuIDopCgo+ICsJICogYXJyYXkuIElmIHdlIHN1Ym1pdCBOIHNwaW5uZXJzLCB3ZSBl eHBlY3QgdGhlbSB0byBiZSBzaW11bHRhbmVvdXNseQo+ICsJICogcnVubmluZyBhY3Jvc3MgTiBl bmdpbmVzIGFuZCB1c2UgUE1VIHRvIGNvbmZpcm0gdGhhdCB0aGUgZW50aXJlCj4gKwkgKiBzZXQg b2YgZW5naW5lcyBhcmUgYnVzeS4KCkNsYXJpZnkgaXQgaXMgb25seSBpZiB1c2luZyBOIGNvbnRl eHRzLgoKPiArCSAqCj4gKwkgKiBXZSBjb21wbGljYXRlIG1hdHRlcnMgYnkgaW50ZXJwZXJzaW5n IHNob3J0bGl2ZWQgdGFza3MgdG8gY2hhbGxlbmdlCj4gKwkgKiB0aGUga2VybmVsIHRvIHNlYXJj aCBmb3Igc3BhY2UgaW4gd2hpY2ggdG8gaW5zZXJ0IG5ldyBiYXRjaGVzLgo+ICsJICovCj4gKwo+ ICsKPiArCWZvciAoaW50IG1hc2sgPSAwOyBtYXNrIDwgMzI7IG1hc2srKykgewo+ICsJCXN0cnVj dCBpOTE1X2VuZ2luZV9jbGFzc19pbnN0YW5jZSAqY2k7Cj4gKwkJaWd0X3NwaW5fdCAqc3BpbiA9 IE5VTEw7Cj4gKwkJSUdUX0NPUktfRkVOQ0UoY29yayk7Cj4gKwkJdW5zaWduZWQgaW50IGNvdW50 Owo+ICsJCWRvdWJsZSBsb2FkOwo+ICsJCWludCBmZW5jZSA9IC0xOwo+ICsJCWludCAqcG11Owo+ ICsKPiArCQljaSA9IGxpc3RfZW5naW5lcyhpOTE1LCAxdSA8PCBtYXNrLCAmY291bnQpOwo+ICsJ CWlmICghY2kpCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQlpZ3RfZGVidWcoIkZvdW5kICVkIGVu Z2luZXMgb2YgY2xhc3MgJWRcbiIsIGNvdW50LCBtYXNrKTsKPiArCj4gKwkJcG11ID0gbWFsbG9j KHNpemVvZigqcG11KSAqIGNvdW50KTsKPiArCQlpZ3RfYXNzZXJ0KHBtdSk7Cj4gKwo+ICsJCWlm IChmbGFncyAmIExBVEUpCj4gKwkJCWZlbmNlID0gaWd0X2NvcmtfcGx1ZygmY29yaywgaTkxNSk7 Cj4gKwo+ICsJCXBtdVswXSA9IC0xOwo+ICsJCWZvciAodW5zaWduZWQgaW50IG4gPSAwOyBuIDwg Y291bnQ7IG4rKykgewo+ICsJCQl1aW50MzJfdCBjdHg7Cj4gKwo+ICsJCQlwbXVbbl0gPSBhZGRf cG11KHBtdVswXSwgJmNpW25dKTsKPiArCj4gKwkJCWlmIChmbGFncyAmIFBVTFNFKSB7Cj4gKwkJ CQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGViID0gewo+ICsJCQkJCS5idWZmZXJz X3B0ciA9IHRvX3VzZXJfcG9pbnRlcigmYmF0Y2gpLAo+ICsJCQkJCS5idWZmZXJfY291bnQgPSAx LAo+ICsJCQkJCS5yc3ZkMiA9IGZlbmNlLAo+ICsJCQkJCS5mbGFncyA9IGZsYWdzICYgTEFURSA/ IEk5MTVfRVhFQ19GRU5DRV9JTiA6IDAsCj4gKwkJCQl9Owo+ICsJCQkJZ2VtX2V4ZWNidWYoaTkx NSwgJmViKTsKPiArCQkJfQo+ICsKPiArCQkJLyoKPiArCQkJICogRWFjaCBzcGlubmVyIG5lZWRz IHRvIGJlIG9uZSBhIG5ldyB0aW1lbGluZSwKPiArCQkJICogb3RoZXJ3aXNlIHRoZXkgd2lsbCBq dXN0IHNpdCBpbiB0aGUgc2luZ2xlIHF1ZXVlCj4gKwkJCSAqIGFuZCBub3QgcnVuIGNvbmN1cnJl bnRseS4KPiArCQkJICovCj4gKwkJCWN0eCA9IGxvYWRfYmFsYW5jZXJfY3JlYXRlKGk5MTUsIGNp LCBjb3VudCk7Cj4gKwo+ICsJCQlpZiAoc3BpbiA9PSBOVUxMKSB7Cj4gKwkJCQlzcGluID0gX19p Z3Rfc3Bpbl9uZXcoaTkxNSwgLmN0eCA9IGN0eCk7Cj4gKwkJCX0gZWxzZSB7Cj4gKwkJCQlzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGViID0gewo+ICsJCQkJCS5idWZmZXJzX3B0ciA9 IHNwaW4tPmV4ZWNidWYuYnVmZmVyc19wdHIsCj4gKwkJCQkJLmJ1ZmZlcl9jb3VudCA9IHNwaW4t PmV4ZWNidWYuYnVmZmVyX2NvdW50LAo+ICsJCQkJCS5yc3ZkMSA9IGN0eCwKPiArCQkJCQkucnN2 ZDIgPSBmZW5jZSwKPiArCQkJCQkuZmxhZ3MgPSBmbGFncyAmIExBVEUgPyBJOTE1X0VYRUNfRkVO Q0VfSU4gOiAwLAo+ICsJCQkJfTsKPiArCQkJCWdlbV9leGVjYnVmKGk5MTUsICZlYik7Cj4gKwkJ CX0KPiArCj4gKwkJCWdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwgY3R4KTsKPiArCQl9Cj4gKwo+ ICsJCWlmIChmbGFncyAmIExBVEUpIHsKPiArCQkJaWd0X2NvcmtfdW5wbHVnKCZjb3JrKTsKPiAr CQkJY2xvc2UoZmVuY2UpOwo+ICsJCX0KPiArCj4gKwkJbG9hZCA9IG1lYXN1cmVfbWluX2xvYWQo cG11WzBdLCBjb3VudCwgMTAwMDApOwo+ICsJCWlndF9zcGluX2ZyZWUoaTkxNSwgc3Bpbik7Cj4g Kwo+ICsJCWNsb3NlKHBtdVswXSk7Cj4gKwkJZnJlZShwbXUpOwo+ICsKPiArCQlmcmVlKGNpKTsK PiArCj4gKwkJaWd0X2Fzc2VydF9mKGxvYWQgPiAwLjkwLAo+ICsJCQkgICAgICJtaW5pbXVtIGxv YWQgZm9yICVkIHggY2xhc3M6JWQgd2FzIGZvdW5kIHRvIGJlIG9ubHkgJS4xZiUlIGJ1c3lcbiIs Cj4gKwkJCSAgICAgY291bnQsIG1hc2ssIGxvYWQqMTAwKTsKPiArCQlnZW1fcXVpZXNjZW50X2dw dShpOTE1KTsKPiArCX0KPiArCj4gKwlnZW1fY2xvc2UoaTkxNSwgYmF0Y2guaGFuZGxlKTsKPiAr CWdlbV9xdWllc2NlbnRfZ3B1KGk5MTUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBub3AoaW50 IGk5MTUpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIGJhdGNoID0g ewo+ICsJCS5oYW5kbGUgPSBiYXRjaF9jcmVhdGUoaTkxNSksCj4gKwl9Owo+ICsKPiArCWZvciAo aW50IG1hc2sgPSAwOyBtYXNrIDwgMzI7IG1hc2srKykgewoKcy9tYXNrL2NsYXNzLwoKPiArCQlz dHJ1Y3QgaTkxNV9lbmdpbmVfY2xhc3NfaW5zdGFuY2UgKmNpOwo+ICsJCXVuc2lnbmVkIGludCBj b3VudDsKPiArCQl1aW50MzJfdCBjdHg7Cj4gKwo+ICsJCWNpID0gbGlzdF9lbmdpbmVzKGk5MTUs IDF1IDw8IG1hc2ssICZjb3VudCk7Cj4gKwkJaWYgKCFjaSkKPiArCQkJY29udGludWU7Cj4gKwo+ ICsJCWlmIChjb3VudCA8IDIpIHsKPiArCQkJZnJlZShjaSk7Cj4gKwkJCWNvbnRpbnVlOwoKQmVu Y2hhbXJrIG9ubHkgc3VidGVzdCBmb3IgcmVhbCB2ZW5nPwoKPiArCQl9Cj4gKwo+ICsJCWlndF9k ZWJ1ZygiRm91bmQgJWQgZW5naW5lcyBvZiBjbGFzcyAlZFxuIiwgY291bnQsIG1hc2spOwo+ICsJ CWN0eCA9IGxvYWRfYmFsYW5jZXJfY3JlYXRlKGk5MTUsIGNpLCBjb3VudCk7Cj4gKwo+ICsJCWZv ciAoaW50IG4gPSAwOyBuIDwgY291bnQ7IG4rKykgewo+ICsJCQlzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X2V4ZWNidWZmZXIyIGV4ZWNidWYgPSB7Cj4gKwkJCQkuYnVmZmVyc19wdHIgPSB0b191c2VyX3Bv aW50ZXIoJmJhdGNoKSwKPiArCQkJCS5idWZmZXJfY291bnQgPSAxLAo+ICsJCQkJLmZsYWdzID0g biArIDEsCj4gKwkJCQkucnN2ZDEgPSBjdHgsCj4gKwkJCX07Cj4gKwkJCXN0cnVjdCB0aW1lc3Bl YyB0diA9IHt9Owo+ICsJCQl1bnNpZ25lZCBsb25nIG5vcHM7Cj4gKwkJCWRvdWJsZSB0Owo+ICsK PiArCQkJaWd0X25zZWNfZWxhcHNlZCgmdHYpOwo+ICsJCQlub3BzID0gMDsKPiArCQkJZG8gewo+ ICsJCQkJZm9yIChpbnQgciA9IDA7IHIgPCAxMDI0OyByKyspCj4gKwkJCQkJZ2VtX2V4ZWNidWYo aTkxNSwgJmV4ZWNidWYpOwo+ICsJCQkJbm9wcyArPSAxMDI0Owo+ICsJCQl9IHdoaWxlIChpZ3Rf c2Vjb25kc19lbGFwc2VkKCZ0dikgPCAyKTsKPiArCQkJZ2VtX3N5bmMoaTkxNSwgYmF0Y2guaGFu ZGxlKTsKPiArCj4gKwkJCXQgPSBpZ3RfbnNlY19lbGFwc2VkKCZ0dikgKiAxZS0zIC8gbm9wczsK PiArCQkJaWd0X2luZm8oIiV4OiVkICUuM2Z1c1xuIiwgbWFzaywgbiwgdCk7CgpDbGFzcyBpbiBk ZWNpbWFsIGlzIGJldHRlciBJIHRoaW5rLgoKQW5kIHNvbWUgZGVzY3JpcHRpdmUgbGFiZWxzIHRv IGluZm8gbWVzc2FnZXMgd291bGQgYmUgZ29vZC4gTGlrZSAKImluZGl2aWR1YWwgZW5naW5lcyIs ICJ2aXJ0dWFsIGVuZ2luZSIgZXRjLgoKPiArCQl9Cj4gKwo+ICsJCXsKPiArCQkJc3RydWN0IGRy bV9pOTE1X2dlbV9leGVjYnVmZmVyMiBleGVjYnVmID0gewo+ICsJCQkJLmJ1ZmZlcnNfcHRyID0g dG9fdXNlcl9wb2ludGVyKCZiYXRjaCksCj4gKwkJCQkuYnVmZmVyX2NvdW50ID0gMSwKPiArCQkJ CS5yc3ZkMSA9IGN0eCwKPiArCQkJfTsKPiArCQkJc3RydWN0IHRpbWVzcGVjIHR2ID0ge307Cj4g KwkJCXVuc2lnbmVkIGxvbmcgbm9wczsKPiArCQkJZG91YmxlIHQ7Cj4gKwo+ICsJCQlpZ3RfbnNl Y19lbGFwc2VkKCZ0dik7Cj4gKwkJCW5vcHMgPSAwOwo+ICsJCQlkbyB7Cj4gKwkJCQlmb3IgKGlu dCByID0gMDsgciA8IDEwMjQ7IHIrKykKPiArCQkJCQlnZW1fZXhlY2J1ZihpOTE1LCAmZXhlY2J1 Zik7Cj4gKwkJCQlub3BzICs9IDEwMjQ7Cj4gKwkJCX0gd2hpbGUgKGlndF9zZWNvbmRzX2VsYXBz ZWQoJnR2KSA8IDIpOwo+ICsJCQlnZW1fc3luYyhpOTE1LCBiYXRjaC5oYW5kbGUpOwo+ICsKPiAr CQkJdCA9IGlndF9uc2VjX2VsYXBzZWQoJnR2KSAqIDFlLTMgLyBub3BzOwo+ICsJCQlpZ3RfaW5m bygiJXg6KiAlLjNmdXNcbiIsIG1hc2ssIHQpOwo+ICsJCX0KPiArCj4gKwo+ICsJCWlndF9mb3Jr KGNoaWxkLCBjb3VudCkgewo+ICsJCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4 ZWNidWYgPSB7Cj4gKwkJCQkuYnVmZmVyc19wdHIgPSB0b191c2VyX3BvaW50ZXIoJmJhdGNoKSwK PiArCQkJCS5idWZmZXJfY291bnQgPSAxLAo+ICsJCQkJLmZsYWdzID0gY2hpbGQgKyAxLAo+ICsJ CQkJLnJzdmQxID0gZ2VtX2NvbnRleHRfY2xvbmUoaTkxNSwgY3R4LAo+ICsJCQkJCQkJICAgSTkx NV9DT05URVhUX0NMT05FX0VOR0lORVMsIDApLAo+ICsJCQl9Owo+ICsJCQlzdHJ1Y3QgdGltZXNw ZWMgdHYgPSB7fTsKPiArCQkJdW5zaWduZWQgbG9uZyBub3BzOwo+ICsJCQlkb3VibGUgdDsKPiAr Cj4gKwkJCWlndF9uc2VjX2VsYXBzZWQoJnR2KTsKPiArCQkJbm9wcyA9IDA7Cj4gKwkJCWRvIHsK PiArCQkJCWZvciAoaW50IHIgPSAwOyByIDwgMTAyNDsgcisrKQo+ICsJCQkJCWdlbV9leGVjYnVm KGk5MTUsICZleGVjYnVmKTsKPiArCQkJCW5vcHMgKz0gMTAyNDsKPiArCQkJfSB3aGlsZSAoaWd0 X3NlY29uZHNfZWxhcHNlZCgmdHYpIDwgMik7Cj4gKwkJCWdlbV9zeW5jKGk5MTUsIGJhdGNoLmhh bmRsZSk7Cj4gKwo+ICsJCQl0ID0gaWd0X25zZWNfZWxhcHNlZCgmdHYpICogMWUtMyAvIG5vcHM7 Cj4gKwkJCWlndF9pbmZvKCJbJWRdICV4OiVkICUuM2Z1c1xuIiwgY2hpbGQsIG1hc2ssIGNoaWxk LCB0KTsKPiArCj4gKwkJCW1lbXNldCgmdHYsIDAsIHNpemVvZih0dikpOwo+ICsJCQlleGVjYnVm LmZsYWdzID0gMDsKPiArCj4gKwkJCWlndF9uc2VjX2VsYXBzZWQoJnR2KTsKPiArCQkJbm9wcyA9 IDA7Cj4gKwkJCWRvIHsKPiArCQkJCWZvciAoaW50IHIgPSAwOyByIDwgMTAyNDsgcisrKQo+ICsJ CQkJCWdlbV9leGVjYnVmKGk5MTUsICZleGVjYnVmKTsKPiArCQkJCW5vcHMgKz0gMTAyNDsKPiAr CQkJfSB3aGlsZSAoaWd0X3NlY29uZHNfZWxhcHNlZCgmdHYpIDwgMik7Cj4gKwkJCWdlbV9zeW5j KGk5MTUsIGJhdGNoLmhhbmRsZSk7Cj4gKwo+ICsJCQl0ID0gaWd0X25zZWNfZWxhcHNlZCgmdHYp ICogMWUtMyAvIG5vcHM7Cj4gKwkJCWlndF9pbmZvKCJbJWRdICV4OiogJS4zZnVzXG4iLCBjaGls ZCwgbWFzaywgdCk7Cj4gKwo+ICsJCQlnZW1fY29udGV4dF9kZXN0cm95KGk5MTUsIGV4ZWNidWYu cnN2ZDEpOwo+ICsJCX0KPiArCj4gKwkJaWd0X3dhaXRjaGlsZHJlbigpOwo+ICsKPiArCQlnZW1f Y29udGV4dF9kZXN0cm95KGk5MTUsIGN0eCk7Cj4gKwkJZnJlZShjaSk7Cj4gKwl9Cj4gKwo+ICsJ Z2VtX2Nsb3NlKGk5MTUsIGJhdGNoLmhhbmRsZSk7Cj4gKwlnZW1fcXVpZXNjZW50X2dwdShpOTE1 KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgcGluZyhpbnQgaTkxNSwgdWludDMyX3QgY3R4LCB1 bnNpZ25lZCBpbnQgZW5naW5lKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2Jq ZWN0MiBvYmogPSB7Cj4gKwkJLmhhbmRsZSA9IGJhdGNoX2NyZWF0ZShpOTE1KSwKPiArCX07Cj4g KwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNidWYgPSB7Cj4gKwkJLmJ1ZmZl cnNfcHRyID0gdG9fdXNlcl9wb2ludGVyKCZvYmopLAo+ICsJCS5idWZmZXJfY291bnQgPSAxLAo+ ICsJCS5mbGFncyA9IGVuZ2luZSwKPiArCQkucnN2ZDEgPSBjdHgsCj4gKwl9Owo+ICsJZ2VtX2V4 ZWNidWYoaTkxNSwgJmV4ZWNidWYpOwo+ICsJZ2VtX3N5bmMoaTkxNSwgb2JqLmhhbmRsZSk7Cj4g KwlnZW1fY2xvc2UoaTkxNSwgb2JqLmhhbmRsZSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHNl bWFwaG9yZShpbnQgaTkxNSkKPiArewo+ICsJdWludDMyX3QgYmxvY2tbMl0sIHNjcmF0Y2g7Cj4g KwlpZ3Rfc3Bpbl90ICpzcGluWzNdOwo+ICsKPiArCS8qCj4gKwkgKiBJZiB3ZSBhcmUgdXNpbmcg SFcgc2VtYXBob3JlcyB0byBsYXVuY2ggc2VyaWFsaXNlZCByZXF1ZXN0cwo+ICsJICogb24gZGlm ZmVyZW50IGVuZ2luZSBjb25jdXJyZW50bHksIHdlIHdhbnQgdG8gdmVyaWZ5IHRoYXQgcmVhbAo+ ICsJICogd29yayBpcyB1bmltcGVkZWQuCj4gKwkgKi8KPiArCWlndF9yZXF1aXJlKGdlbV9zY2hl ZHVsZXJfaGFzX3ByZWVtcHRpb24oaTkxNSkpOwo+ICsKPiArCWJsb2NrWzBdID0gZ2VtX2NvbnRl eHRfY3JlYXRlKGk5MTUpOwo+ICsJYmxvY2tbMV0gPSBnZW1fY29udGV4dF9jcmVhdGUoaTkxNSk7 Cj4gKwo+ICsJc2NyYXRjaCA9IGdlbV9jcmVhdGUoaTkxNSwgNDA5Nik7Cj4gKwlzcGluWzJdID0g aWd0X3NwaW5fbmV3KGk5MTUsIC5kZXBlbmRlbmN5ID0gc2NyYXRjaCk7Cj4gKwlmb3IgKGludCBt YXNrID0gMTsgbWFzayA8IDMyOyBtYXNrKyspIHsKCnMvbWFzay9jbGFzcy8gdGhyb3VnaG91dC4K Cj4gKwkJc3RydWN0IGk5MTVfZW5naW5lX2NsYXNzX2luc3RhbmNlICpjaTsKPiArCQl1bnNpZ25l ZCBpbnQgY291bnQ7Cj4gKwkJdWludDMyX3QgdmlwOwo+ICsKPiArCQljaSA9IGxpc3RfZW5naW5l cyhpOTE1LCAxdSA8PCBtYXNrLCAmY291bnQpOwo+ICsJCWlmICghY2kpCj4gKwkJCWNvbnRpbnVl Owo+ICsKPiArCQlpZiAoY291bnQgPCBBUlJBWV9TSVpFKGJsb2NrKSkKPiArCQkJY29udGludWU7 Cj4gKwo+ICsJCS8qIEVuc3VyZSB0aGF0IHdlIGNvbXBsZXRlbHkgb2NjdXB5IGFsbCBlbmdpbmVz IGluIHRoaXMgZ3JvdXAgKi8KPiArCQljb3VudCA9IEFSUkFZX1NJWkUoYmxvY2spOwo+ICsKPiAr CQlmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKPiArCQkJc2V0X2xvYWRfYmFsYW5j ZXIoaTkxNSwgYmxvY2tbaV0sIGNpLCBjb3VudCk7Cj4gKwkJCXNwaW5baV0gPSBfX2lndF9zcGlu X25ldyhpOTE1LAo+ICsJCQkJCQkgICAgICAgLmN0eCA9IGJsb2NrW2ldLAo+ICsJCQkJCQkgICAg ICAgLmRlcGVuZGVuY3kgPSBzY3JhdGNoKTsKCkFsaWdubWVudC4KCj4gKwkJfQo+ICsKPiArCQkv Kgo+ICsJCSAqIEVpdGhlciB3ZSBoYXZlbid0IGJsb2NrZWQgYm90aCBlbmdpbmVzIHdpdGggc2Vt YXBob3JlcywKPiArCQkgKiBvciB3ZSBsZXQgdGhlIHZpcCB0aHJvdWdoLiBJZiBub3QsIHdlIGhh bmcuCj4gKwkJICovCj4gKwkJdmlwID0gZ2VtX2NvbnRleHRfY3JlYXRlKGk5MTUpOwo+ICsJCXNl dF9sb2FkX2JhbGFuY2VyKGk5MTUsIHZpcCwgY2ksIGNvdW50KTsKPiArCQlwaW5nKGk5MTUsIHZp cCwgMCk7Cj4gKwkJZ2VtX2NvbnRleHRfZGVzdHJveShpOTE1LCB2aXApOwo+ICsKPiArCQlmb3Ig KGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCj4gKwkJCWlndF9zcGluX2ZyZWUoaTkxNSwgc3Bp bltpXSk7Cj4gKwo+ICsJCWZyZWUoY2kpOwo+ICsJfQo+ICsJaWd0X3NwaW5fZnJlZShpOTE1LCBz cGluWzJdKTsKPiArCWdlbV9jbG9zZShpOTE1LCBzY3JhdGNoKTsKPiArCj4gKwlnZW1fY29udGV4 dF9kZXN0cm95KGk5MTUsIGJsb2NrWzFdKTsKPiArCWdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwg YmxvY2tbMF0pOwo+ICsKPiArCWdlbV9xdWllc2NlbnRfZ3B1KGk5MTUpOwo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCBzbW9rZXRlc3QoaW50IGk5MTUsIGludCB0aW1lb3V0KQo+ICt7Cj4gKwlzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiBiYXRjaFsyXSA9IHsKPiArCQl7IC5oYW5kbGUg PSBfX2JhdGNoX2NyZWF0ZShpOTE1LCAxNjM4MCkgfQo+ICsJfTsKPiArCXVuc2lnbmVkIGludCBu Y29udGV4dCA9IDA7Cj4gKwl1aW50MzJfdCAqY29udGV4dHMgPSBOVUxMOwo+ICsJdWludDMyX3Qg KmhhbmRsZXMgPSBOVUxMOwo+ICsKPiArCWlndF9yZXF1aXJlX3N3X3N5bmMoKTsKPiArCj4gKwlm b3IgKGludCBtYXNrID0gMDsgbWFzayA8IDMyOyBtYXNrKyspIHsKPiArCQlzdHJ1Y3QgaTkxNV9l bmdpbmVfY2xhc3NfaW5zdGFuY2UgKmNpOwo+ICsJCXVuc2lnbmVkIGludCBjb3VudCA9IDA7Cj4g Kwo+ICsJCWNpID0gbGlzdF9lbmdpbmVzKGk5MTUsIDF1IDw8IG1hc2ssICZjb3VudCk7Cj4gKwkJ aWYgKCFjaSB8fCBjb3VudCA8IDIpIHsKPiArCQkJZnJlZShjaSk7Cj4gKwkJCWNvbnRpbnVlOwo+ ICsJCX0KPiArCj4gKwkJaWd0X2RlYnVnKCJGb3VuZCAlZCBlbmdpbmVzIG9mIGNsYXNzICVkXG4i LCBjb3VudCwgbWFzayk7Cj4gKwo+ICsJCW5jb250ZXh0ICs9IDEyODsKPiArCQljb250ZXh0cyA9 IHJlYWxsb2MoY29udGV4dHMsIHNpemVvZigqY29udGV4dHMpICogbmNvbnRleHQpOwo+ICsJCWln dF9hc3NlcnQoY29udGV4dHMpOwo+ICsKPiArCQlmb3IgKHVuc2lnbmVkIGludCBuID0gbmNvbnRl eHQgLSAxMjg7IG4gPCBuY29udGV4dDsgbisrKSB7Cj4gKwkJCWNvbnRleHRzW25dID0gbG9hZF9i YWxhbmNlcl9jcmVhdGUoaTkxNSwgY2ksIGNvdW50KTsKPiArCQkJaWd0X2Fzc2VydChjb250ZXh0 c1tuXSk7Cj4gKwkJfQo+ICsKPiArCQlmcmVlKGNpKTsKPiArCX0KPiArCWlndF9kZWJ1ZygiQ3Jl YXRlZCAlZCB2aXJ0dWFsIGVuZ2luZXMgKG9uZSBwZXIgY29udGV4dClcbiIsIG5jb250ZXh0KTsK PiArCWlndF9yZXF1aXJlKG5jb250ZXh0KTsKPiArCj4gKwljb250ZXh0cyA9IHJlYWxsb2MoY29u dGV4dHMsIHNpemVvZigqY29udGV4dHMpICogbmNvbnRleHQgKiA0KTsKPiArCWlndF9hc3NlcnQo Y29udGV4dHMpOwo+ICsJbWVtY3B5KGNvbnRleHRzICsgbmNvbnRleHQsIGNvbnRleHRzLCBuY29u dGV4dCAqIHNpemVvZigqY29udGV4dHMpKTsKPiArCW5jb250ZXh0ICo9IDI7Cj4gKwltZW1jcHko Y29udGV4dHMgKyBuY29udGV4dCwgY29udGV4dHMsIG5jb250ZXh0ICogc2l6ZW9mKCpjb250ZXh0 cykpOwo+ICsJbmNvbnRleHQgKj0gMjsKPiArCj4gKwloYW5kbGVzID0gbWFsbG9jKHNpemVvZigq aGFuZGxlcykgKiBuY29udGV4dCk7Cj4gKwlpZ3RfYXNzZXJ0KGhhbmRsZXMpOwo+ICsJZm9yICh1 bnNpZ25lZCBpbnQgbiA9IDA7IG4gPCBuY29udGV4dDsgbisrKQo+ICsJCWhhbmRsZXNbbl0gPSBn ZW1fY3JlYXRlKGk5MTUsIDQwOTYpOwo+ICsKPiArCWlndF91bnRpbF90aW1lb3V0KHRpbWVvdXQp IHsKPiArCQl1bnNpZ25lZCBpbnQgY291bnQgPSAxICsgKHJhbmQoKSAlIChuY29udGV4dCAtIDEp KTsKPiArCQlJR1RfQ09SS19GRU5DRShjb3JrKTsKPiArCQlpbnQgZmVuY2UgPSBpZ3RfY29ya19w bHVnKCZjb3JrLCBpOTE1KTsKPiArCj4gKwkJZm9yICh1bnNpZ25lZCBpbnQgbiA9IDA7IG4gPCBj b3VudDsgbisrKSB7Cj4gKwkJCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZWIgPSB7 Cj4gKwkJCQkuYnVmZmVyc19wdHIgPSB0b191c2VyX3BvaW50ZXIoYmF0Y2gpLAo+ICsJCQkJLmJ1 ZmZlcl9jb3VudCA9IEFSUkFZX1NJWkUoYmF0Y2gpLAo+ICsJCQkJLnJzdmQxID0gY29udGV4dHNb bl0sCj4gKwkJCQkucnN2ZDIgPSBmZW5jZSwKPiArCQkJCS5mbGFncyA9IEk5MTVfRVhFQ19CQVRD SF9GSVJTVCB8IEk5MTVfRVhFQ19GRU5DRV9JTiwKPiArCQkJfTsKPiArCQkJYmF0Y2hbMV0uaGFu ZGxlID0gaGFuZGxlc1tuXTsKPiArCQkJZ2VtX2V4ZWNidWYoaTkxNSwgJmViKTsKPiArCQl9Cj4g KwkJaWd0X3Blcm11dGVfYXJyYXkoaGFuZGxlcywgY291bnQsIGlndF9leGNoYW5nZV9pbnQpOwo+ ICsKPiArCQlpZ3RfY29ya191bnBsdWcoJmNvcmspOwo+ICsJCWZvciAodW5zaWduZWQgaW50IG4g PSAwOyBuIDwgY291bnQ7IG4rKykKPiArCQkJZ2VtX3N5bmMoaTkxNSwgaGFuZGxlc1tuXSk7Cj4g Kwo+ICsJCWNsb3NlKGZlbmNlKTsKPiArCX0KPiArCj4gKwlmb3IgKHVuc2lnbmVkIGludCBuID0g MDsgbiA8IG5jb250ZXh0OyBuKyspIHsKPiArCQlnZW1fY2xvc2UoaTkxNSwgaGFuZGxlc1tuXSk7 Cj4gKwkJX19nZW1fY29udGV4dF9kZXN0cm95KGk5MTUsIGNvbnRleHRzW25dKTsKPiArCX0KPiAr CWZyZWUoaGFuZGxlcyk7Cj4gKwlmcmVlKGNvbnRleHRzKTsKPiArCWdlbV9jbG9zZShpOTE1LCBi YXRjaFswXS5oYW5kbGUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBoYXNfY29udGV4dF9lbmdp bmVzKGludCBpOTE1KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW0g cCA9IHsKPiArCQkucGFyYW0gPSBJOTE1X0NPTlRFWFRfUEFSQU1fRU5HSU5FUywKPiArCX07Cj4g Kwo+ICsJcmV0dXJuIF9fZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGk5MTUsICZwKSA9PSAwOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgYm9vbCBoYXNfbG9hZF9iYWxhbmNlcihpbnQgaTkxNSkKPiArewo+ICsJ c3RydWN0IGk5MTVfZW5naW5lX2NsYXNzX2luc3RhbmNlIGNpID0ge307Cj4gKwl1aW50MzJfdCBj dHg7Cj4gKwlpbnQgZXJyOwo+ICsKPiArCWN0eCA9IGdlbV9jb250ZXh0X2NyZWF0ZShpOTE1KTsK PiArCWVyciA9IF9fc2V0X2xvYWRfYmFsYW5jZXIoaTkxNSwgY3R4LCAmY2ksIDEpOwo+ICsJZ2Vt X2NvbnRleHRfZGVzdHJveShpOTE1LCBjdHgpOwo+ICsKPiArCXJldHVybiBlcnIgPT0gMDsKPiAr fQo+ICsKPiAraWd0X21haW4KPiArewo+ICsJaW50IGk5MTUgPSAtMTsKPiArCj4gKwlpZ3Rfc2tp cF9vbl9zaW11bGF0aW9uKCk7Cj4gKwo+ICsJaWd0X2ZpeHR1cmUgewo+ICsJCWk5MTUgPSBkcm1f b3Blbl9kcml2ZXIoRFJJVkVSX0lOVEVMKTsKPiArCQlpZ3RfcmVxdWlyZV9nZW0oaTkxNSk7Cj4g Kwo+ICsJCWdlbV9yZXF1aXJlX2NvbnRleHRzKGk5MTUpOwo+ICsJCWlndF9yZXF1aXJlKGhhc19j b250ZXh0X2VuZ2luZXMoaTkxNSkpOwo+ICsJCWlndF9yZXF1aXJlKGhhc19sb2FkX2JhbGFuY2Vy KGk5MTUpKTsKPiArCj4gKwkJaWd0X2ZvcmtfaGFuZ19kZXRlY3RvcihpOTE1KTsKPiArCX0KPiAr Cj4gKwlpZ3Rfc3VidGVzdCgiaW52YWxpZC1iYWxhbmNlciIpCj4gKwkJaW52YWxpZF9iYWxhbmNl cihpOTE1KTsKPiArCj4gKwlpZ3Rfc3VidGVzdCgiaW5kaXZpZHVhbCIpCj4gKwkJaW5kaXZpZHVh bChpOTE1KTsKPiArCj4gKwlpZ3Rfc3VidGVzdCgiaW5kaWNpZXMiKQo+ICsJCWluZGljaWVzKGk5 MTUpOwo+ICsKPiArCWlndF9zdWJ0ZXN0KCJidXN5IikKPiArCQlidXN5KGk5MTUpOwo+ICsKPiAr CWlndF9zdWJ0ZXN0X2dyb3VwIHsKPiArCQlzdGF0aWMgY29uc3Qgc3RydWN0IHsKPiArCQkJY29u c3QgY2hhciAqbmFtZTsKPiArCQkJdW5zaWduZWQgaW50IGZsYWdzOwo+ICsJCX0gcGhhc2VzW10g PSB7Cj4gKwkJCXsgIiIsIDAgfSwKPiArCQkJeyAiLXB1bHNlIiwgUFVMU0UgfSwKPiArCQkJeyAi LWxhdGUiLCBMQVRFIH0sCj4gKwkJCXsgIi1sYXRlLXB1bHNlIiwgUFVMU0UgfCBMQVRFIH0sCj4g KwkJCXsgfQo+ICsJCX07Cj4gKwkJZm9yICh0eXBlb2YoKnBoYXNlcykgKnAgPSBwaGFzZXM7IHAt Pm5hbWU7IHArKykKPiArCQkJaWd0X3N1YnRlc3RfZigiZnVsbCVzIiwgcC0+bmFtZSkKPiArCQkJ CWZ1bGwoaTkxNSwgcC0+ZmxhZ3MpOwo+ICsJfQo+ICsKPiArCWlndF9zdWJ0ZXN0KCJub3AiKQo+ ICsJCW5vcChpOTE1KTsKPiArCj4gKwlpZ3Rfc3VidGVzdCgic2VtYXBob3JlIikKPiArCQlzZW1h cGhvcmUoaTkxNSk7Cj4gKwo+ICsJaWd0X3N1YnRlc3QoInNtb2tlIikKPiArCQlzbW9rZXRlc3Qo aTkxNSwgMjApOwo+ICsKPiArCWlndF9maXh0dXJlIHsKPiArCQlpZ3Rfc3RvcF9oYW5nX2RldGVj dG9yKCk7Cj4gKwl9Cj4gK30KPiBkaWZmIC0tZ2l0IGEvdGVzdHMvbWVzb24uYnVpbGQgYi90ZXN0 cy9tZXNvbi5idWlsZAo+IGluZGV4IDdlMDA4OWU3NC4uZWVlYTM2MTFkIDEwMDY0NAo+IC0tLSBh L3Rlc3RzL21lc29uLmJ1aWxkCj4gKysrIGIvdGVzdHMvbWVzb24uYnVpbGQKPiBAQCAtMjg4LDYg KzI4OCwxMyBAQCB0ZXN0X2V4ZWN1dGFibGVzICs9IGV4ZWN1dGFibGUoJ2dlbV9laW8nLAo+ICAg CSAgIGluc3RhbGwgOiB0cnVlKQo+ICAgdGVzdF9saXN0ICs9ICdnZW1fZWlvJwo+ICAgCj4gK3Rl c3RfZXhlY3V0YWJsZXMgKz0gZXhlY3V0YWJsZSgnZ2VtX2V4ZWNfYmFsYW5jZXInLCAnaTkxNS9n ZW1fZXhlY19iYWxhbmNlci5jJywKPiArCSAgIGRlcGVuZGVuY2llcyA6IHRlc3RfZGVwcyArIFsg bGliX2lndF9wZXJmIF0sCj4gKwkgICBpbnN0YWxsX2RpciA6IGxpYmV4ZWNkaXIsCj4gKwkgICBp bnN0YWxsX3JwYXRoIDogbGliZXhlY2Rpcl9ycGF0aGRpciwKPiArCSAgIGluc3RhbGwgOiB0cnVl KQo+ICt0ZXN0X3Byb2dzICs9ICdnZW1fZXhlY19iYWxhbmNlcicKPiArCj4gICB0ZXN0X2V4ZWN1 dGFibGVzICs9IGV4ZWN1dGFibGUoJ2dlbV9tb2NzX3NldHRpbmdzJywKPiAgIAkgICBqb2luX3Bh dGhzKCdpOTE1JywgJ2dlbV9tb2NzX3NldHRpbmdzLmMnKSwKPiAgIAkgICBkZXBlbmRlbmNpZXMg OiB0ZXN0X2RlcHMgKyBbIGxpYl9pZ3RfcGVyZiBdLAo+IAoKUmVnYXJkcywKClR2cnRrbwpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1haWxp bmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVk ZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXY=