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> <6f2ae1a7-86ec-5264-72a2-5b0a820bd8b1@linux.intel.com> <155794984852.12244.2565601337195733919@skylake-alporthouse-com> From: Tvrtko Ursulin Message-ID: <340c972e-49f9-d57d-967c-9e397e6c2938@linux.intel.com> Date: Thu, 16 May 2019 10:20:20 +0100 MIME-Version: 1.0 In-Reply-To: <155794984852.12244.2565601337195733919@skylake-alporthouse-com> 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: Ck9uIDE1LzA1LzIwMTkgMjA6NTAsIENocmlzIFdpbHNvbiB3cm90ZToKPiBRdW90aW5nIFR2cnRr byBVcnN1bGluICgyMDE5LTA1LTE1IDExOjQ5OjQ1KQo+Pgo+PiBPbiAwOC8wNS8yMDE5IDExOjA5 LCBDaHJpcyBXaWxzb24gd3JvdGU6Cj4+PiBFeGVyY2lzZSB0aGUgaW4ta2VybmVsIGxvYWQgYmFs YW5jZXIgY2hlY2tpbmcgdGhhdCB3ZSBjYW4gZGlzdHJpYnV0ZQo+Pj4gYmF0Y2hlcyBhY3Jvc3Mg dGhlIHNldCBvZiBjdHgtPmVuZ2luZXMgdG8gYXZvaWQgbG9hZC4KPj4+Cj4+PiBTaWduZWQtb2Zm LWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KPj4+IC0tLQo+Pj4g ICAgdGVzdHMvTWFrZWZpbGUuYW0gICAgICAgICAgICAgIHwgICAgMSArCj4+PiAgICB0ZXN0cy9N YWtlZmlsZS5zb3VyY2VzICAgICAgICAgfCAgICAxICsKPj4+ICAgIHRlc3RzL2k5MTUvZ2VtX2V4 ZWNfYmFsYW5jZXIuYyB8IDEwNTAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPj4+ ICAgIHRlc3RzL21lc29uLmJ1aWxkICAgICAgICAgICAgICB8ICAgIDcgKwo+Pj4gICAgNCBmaWxl cyBjaGFuZ2VkLCAxMDU5IGluc2VydGlvbnMoKykKPj4+ICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCB0 ZXN0cy9pOTE1L2dlbV9leGVjX2JhbGFuY2VyLmMKPj4+Cj4+PiBkaWZmIC0tZ2l0IGEvdGVzdHMv TWFrZWZpbGUuYW0gYi90ZXN0cy9NYWtlZmlsZS5hbQo+Pj4gaW5kZXggNTA5N2RlYmY2Li5jNmFm MGFlYWYgMTAwNjQ0Cj4+PiAtLS0gYS90ZXN0cy9NYWtlZmlsZS5hbQo+Pj4gKysrIGIvdGVzdHMv TWFrZWZpbGUuYW0KPj4+IEBAIC05Niw2ICs5Niw3IEBAIGdlbV9jbG9zZV9yYWNlX0xEQUREID0g JChMREFERCkgLWxwdGhyZWFkCj4+PiAgICBnZW1fY3R4X3RocmFzaF9DRkxBR1MgPSAkKEFNX0NG TEFHUykgJChUSFJFQURfQ0ZMQUdTKQo+Pj4gICAgZ2VtX2N0eF90aHJhc2hfTERBREQgPSAkKExE QUREKSAtbHB0aHJlYWQKPj4+ICAgIGdlbV9jdHhfc3NldV9MREFERCA9ICQoTERBREQpICQodG9w X2J1aWxkZGlyKS9saWIvbGliaWd0X3BlcmYubGEKPj4+ICtpOTE1X2dlbV9leGVjX2JhbGFuY2Vy X0xEQUREID0gJChMREFERCkgJCh0b3BfYnVpbGRkaXIpL2xpYi9saWJpZ3RfcGVyZi5sYQo+Pj4g ICAgZ2VtX2V4ZWNfY2FwdHVyZV9MREFERCA9ICQoTERBREQpIC1sego+Pj4gICAgZ2VtX2V4ZWNf cGFyYWxsZWxfQ0ZMQUdTID0gJChBTV9DRkxBR1MpICQoVEhSRUFEX0NGTEFHUykKPj4+ICAgIGdl bV9leGVjX3BhcmFsbGVsX0xEQUREID0gJChMREFERCkgLWxwdGhyZWFkCj4+PiBkaWZmIC0tZ2l0 IGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKPj4+IGlu ZGV4IGU3ZWUyN2U4MS4uMzIzYjYyNWFhIDEwMDY0NAo+Pj4gLS0tIGEvdGVzdHMvTWFrZWZpbGUu c291cmNlcwo+Pj4gKysrIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwo+Pj4gQEAgLTI0LDYgKzI0 LDcgQEAgVEVTVFNfcHJvZ3MgPSBcCj4+PiAgICAgICAgaTkxNS9nZW1fY3R4X2Nsb25lIFwKPj4+ ICAgICAgICBpOTE1L2dlbV9jdHhfZW5naW5lcyBcCj4+PiAgICAgICAgaTkxNS9nZW1fY3R4X3No YXJlZCBcCj4+PiArICAgICBpOTE1L2dlbV9leGVjX2JhbGFuY2VyIFwKPj4+ICAgICAgICBpOTE1 L2dlbV92bV9jcmVhdGUgXAo+Pj4gICAgICAgIGttc18zZCBcCj4+PiAgICAgICAga21zX2FkZGZi X2Jhc2ljIFwKPj4+IGRpZmYgLS1naXQgYS90ZXN0cy9pOTE1L2dlbV9leGVjX2JhbGFuY2VyLmMg Yi90ZXN0cy9pOTE1L2dlbV9leGVjX2JhbGFuY2VyLmMKPj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 Cj4+PiBpbmRleCAwMDAwMDAwMDAuLjI1MTk1ZDQ3OAo+Pj4gLS0tIC9kZXYvbnVsbAo+Pj4gKysr IGIvdGVzdHMvaTkxNS9nZW1fZXhlY19iYWxhbmNlci5jCj4+PiBAQCAtMCwwICsxLDEwNTAgQEAK Pj4+ICsvKgo+Pj4gKyAqIENvcHlyaWdodCDCqSAyMDE4IEludGVsIENvcnBvcmF0aW9uCj4+Cj4+ IDIwMTkgSSBndWVzcywgZXZlbiB0aG91Z2ggd29yayB3YXMgc3RhcnRlZCBpbiAyMDE4Pwo+Pgo+ Pj4gKyAqCj4+PiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFy Z2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPj4+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdh cmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+ Pj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1 ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPj4+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwg bW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPj4+ICsgKiBh bmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMg dG8gd2hvbSB0aGUKPj4+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1Ympl Y3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+Pj4gKyAqCj4+PiArICogVGhlIGFib3Zl IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0 aGUgbmV4dAo+Pj4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGll cyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPj4+ICsgKiBTb2Z0d2FyZS4KPj4+ICsg Kgo+Pj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJB TlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4+PiArICogSU1QTElFRCwgSU5DTFVESU5HIEJV VCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4+PiAr ICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4g IElOIE5PIEVWRU5UIFNIQUxMCj4+PiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERF UlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPj4+ICsgKiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lT RSwgQVJJU0lORwo+Pj4gKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhF IFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKPj4+ICsgKiBJTiBUSEUgU09G VFdBUkUuCj4+PiArICovCj4+PiArCj4+PiArI2luY2x1ZGUgPHNjaGVkLmg+Cj4+PiArCj4+PiAr I2luY2x1ZGUgImlndC5oIgo+Pj4gKyNpbmNsdWRlICJpZ3RfcGVyZi5oIgo+Pj4gKyNpbmNsdWRl ICJpOTE1L2dlbV9yaW5nLmgiCj4+PiArI2luY2x1ZGUgInN3X3N5bmMuaCIKPj4+ICsKPj4+ICtJ R1RfVEVTVF9ERVNDUklQVElPTigiRXhlcmNpc2UgaW4ta2VybmVsIGxvYWQtYmFsYW5jaW5nIik7 Cj4+PiArCj4+PiArI2RlZmluZSBJTlNUQU5DRV9DT1VOVCAoMSA8PCBJOTE1X1BNVV9TQU1QTEVf SU5TVEFOQ0VfQklUUykKPj4KPj4gSG1tLi4gdGhpcyBpcyBhIHN0cmFuZ2Ugc3Vycm9nYXRlIGJ1 dCBJIGd1ZXNzIGl0IHdvcmtzLgo+Pgo+Pj4gKwo+Pj4gK3N0YXRpYyBib29sIGhhc19jbGFzc19p bnN0YW5jZShpbnQgaTkxNSwgdWludDE2X3QgY2xhc3MsIHVpbnQxNl90IGluc3RhbmNlKQo+Pj4g K3sKPj4+ICsgICAgIGludCBmZDsKPj4+ICsKPj4+ICsgICAgIGZkID0gcGVyZl9pOTE1X29wZW4o STkxNV9QTVVfRU5HSU5FX0JVU1koY2xhc3MsIGluc3RhbmNlKSk7Cj4+Cj4+IE1vcmUgd29yayBm b3IgQW5kaSB0byByZXBsYWNlIHdpdGggcmVhbCBlbmdpbmUgZGlzY292ZXJ5LiA6KQo+Pgo+Pj4g KyAgICAgaWYgKGZkICE9IC0xKSB7Cj4+PiArICAgICAgICAgICAgIGNsb3NlKGZkKTsKPj4+ICsg ICAgICAgICAgICAgcmV0dXJuIHRydWU7Cj4+PiArICAgICB9Cj4+PiArCj4+PiArICAgICByZXR1 cm4gZmFsc2U7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBzdHJ1Y3QgaTkxNV9lbmdpbmVfY2xh c3NfaW5zdGFuY2UgKgo+Pj4gK2xpc3RfZW5naW5lcyhpbnQgaTkxNSwgdWludDMyX3QgY2xhc3Nf bWFzaywgdW5zaWduZWQgaW50ICpvdXQpCj4+PiArewo+Pj4gKyAgICAgdW5zaWduZWQgaW50IGNv dW50ID0gMCwgc2l6ZSA9IDY0Owo+Pj4gKyAgICAgc3RydWN0IGk5MTVfZW5naW5lX2NsYXNzX2lu c3RhbmNlICplbmdpbmVzOwo+Pj4gKwo+Pj4gKyAgICAgZW5naW5lcyA9IG1hbGxvYyhzaXplICog c2l6ZW9mKCplbmdpbmVzKSk7Cj4+PiArICAgICBpZiAoIWVuZ2luZXMpIHsKPj4+ICsgICAgICAg ICAgICAgKm91dCA9IDA7Cj4+PiArICAgICAgICAgICAgIHJldHVybiBOVUxMOwo+Pj4gKyAgICAg fQo+Pj4gKwo+Pj4gKyAgICAgZm9yIChlbnVtIGRybV9pOTE1X2dlbV9lbmdpbmVfY2xhc3MgY2xh c3MgPSBJOTE1X0VOR0lORV9DTEFTU19SRU5ERVI7Cj4+PiArICAgICAgICAgIGNsYXNzX21hc2s7 Cj4+PiArICAgICAgICAgIGNsYXNzKyssIGNsYXNzX21hc2sgPj49IDEpIHsKPj4+ICsgICAgICAg ICAgICAgaWYgKCEoY2xhc3NfbWFzayAmIDEpKQo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIGNv bnRpbnVlOwo+Pj4gKwo+Pj4gKyAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpbnN0YW5j ZSA9IDA7Cj4+PiArICAgICAgICAgICAgICAgICAgaW5zdGFuY2UgPCBJTlNUQU5DRV9DT1VOVDsK Pj4+ICsgICAgICAgICAgICAgICAgICBpbnN0YW5jZSsrKSB7Cj4+PiArICAgICAgICAgICAgICAg ICAgaWYgKCFoYXNfY2xhc3NfaW5zdGFuY2UoaTkxNSwgY2xhc3MsIGluc3RhbmNlKSkKPj4+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+Pj4gKwo+Pj4gKyAgICAgICAgICAg ICAgICAgICAgIGlmIChjb3VudCA9PSBzaXplKSB7Cj4+PiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgaTkxNV9lbmdpbmVfY2xhc3NfaW5zdGFuY2UgKmU7Cj4+PiArCj4+PiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplICo9IDI7Cj4+PiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBlID0gcmVhbGxvYyhlbmdpbmVzLCBzaXplKnNpemVvZigqZW5naW5l cykpOwo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlKSB7Cj4+Cj4+IEkn ZCBqdXN0IGFzc2VydC4gT24gbWFsbG9jIGFzIHdlbGwuCj4+Cj4+PiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICpvdXQgPSBjb3VudDsKPj4+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVuZ2luZXM7Cj4+PiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB9Cj4+PiArCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl bmdpbmVzID0gZTsKPj4+ICsgICAgICAgICAgICAgICAgICAgICB9Cj4+PiArCj4+PiArICAgICAg ICAgICAgICAgICAgICAgZW5naW5lc1tjb3VudCsrXSA9IChzdHJ1Y3QgaTkxNV9lbmdpbmVfY2xh c3NfaW5zdGFuY2Upewo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmVuZ2luZV9j bGFzcyA9IGNsYXNzLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmVuZ2luZV9p bnN0YW5jZSA9IGluc3RhbmNlLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIH07Cj4+PiArICAg ICAgICAgICAgIH0KPj4+ICsgICAgIH0KPj4+ICsKPj4+ICsgICAgIGlmICghY291bnQpIHsKPj4+ ICsgICAgICAgICAgICAgZnJlZShlbmdpbmVzKTsKPj4+ICsgICAgICAgICAgICAgZW5naW5lcyA9 IE5VTEw7Cj4+PiArICAgICB9Cj4+PiArCj4+PiArICAgICAqb3V0ID0gY291bnQ7Cj4+PiArICAg ICByZXR1cm4gZW5naW5lczsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGludCBfX3NldF9sb2Fk X2JhbGFuY2VyKGludCBpOTE1LCB1aW50MzJfdCBjdHgsCj4+PiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IHN0cnVjdCBpOTE1X2VuZ2luZV9jbGFzc19pbnN0YW5jZSAqY2ksCj4+ PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjb3VudCkKPj4+ICt7 Cj4+PiArICAgICBJOTE1X0RFRklORV9DT05URVhUX0VOR0lORVNfTE9BRF9CQUxBTkNFKGJhbGFu Y2VyLCBjb3VudCk7Cj4+PiArICAgICBJOTE1X0RFRklORV9DT05URVhUX1BBUkFNX0VOR0lORVMo ZW5naW5lcywgMSArIGNvdW50KTsKPj4+ICsgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4 dF9wYXJhbSBwID0gewo+Pj4gKyAgICAgICAgICAgICAuY3R4X2lkID0gY3R4LAo+Pj4gKyAgICAg ICAgICAgICAucGFyYW0gPSBJOTE1X0NPTlRFWFRfUEFSQU1fRU5HSU5FUywKPj4+ICsgICAgICAg ICAgICAgLnNpemUgPSBzaXplb2YoZW5naW5lcyksCj4+PiArICAgICAgICAgICAgIC52YWx1ZSA9 IHRvX3VzZXJfcG9pbnRlcigmZW5naW5lcykKPj4+ICsgICAgIH07Cj4+PiArCj4+PiArICAgICBt ZW1zZXQoJmJhbGFuY2VyLCAwLCBzaXplb2YoYmFsYW5jZXIpKTsKPj4+ICsgICAgIGJhbGFuY2Vy LmJhc2UubmFtZSA9IEk5MTVfQ09OVEVYVF9FTkdJTkVTX0VYVF9MT0FEX0JBTEFOQ0U7Cj4+PiAr Cj4+PiArICAgICBpZ3RfYXNzZXJ0KGNvdW50KTsKPj4+ICsgICAgIGJhbGFuY2VyLm51bV9zaWJs aW5ncyA9IGNvdW50Owo+Pj4gKyAgICAgbWVtY3B5KGJhbGFuY2VyLmVuZ2luZXMsIGNpLCBjb3Vu dCAqIHNpemVvZigqY2kpKTsKPj4+ICsKPj4+ICsgICAgIG1lbXNldCgmZW5naW5lcywgMCwgc2l6 ZW9mKGVuZ2luZXMpKTsKPj4+ICsgICAgIGVuZ2luZXMuZXh0ZW5zaW9ucyA9IHRvX3VzZXJfcG9p bnRlcigmYmFsYW5jZXIpOwo+Pj4gKyAgICAgZW5naW5lcy5lbmdpbmVzWzBdLmVuZ2luZV9jbGFz cyA9Cj4+PiArICAgICAgICAgICAgIEk5MTVfRU5HSU5FX0NMQVNTX0lOVkFMSUQ7Cj4+PiArICAg ICBlbmdpbmVzLmVuZ2luZXNbMF0uZW5naW5lX2luc3RhbmNlID0KPj4+ICsgICAgICAgICAgICAg STkxNV9FTkdJTkVfQ0xBU1NfSU5WQUxJRF9OT05FOwo+Pj4gKyAgICAgbWVtY3B5KGVuZ2luZXMu ZW5naW5lcyArIDEsIGNpLCBjb3VudCAqIHNpemVvZigqY2kpKTsKPj4+ICsKPj4+ICsgICAgIHJl dHVybiBfX2dlbV9jb250ZXh0X3NldF9wYXJhbShpOTE1LCAmcCk7Cj4+PiArfQo+Pj4gKwo+Pj4g K3N0YXRpYyB2b2lkIHNldF9sb2FkX2JhbGFuY2VyKGludCBpOTE1LCB1aW50MzJfdCBjdHgsCj4+ PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGk5MTVfZW5naW5lX2Ns YXNzX2luc3RhbmNlICpjaSwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l ZCBpbnQgY291bnQpCj4+PiArewo+Pj4gKyAgICAgaWd0X2Fzc2VydF9lcShfX3NldF9sb2FkX2Jh bGFuY2VyKGk5MTUsIGN0eCwgY2ksIGNvdW50KSwgMCk7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRp YyB1aW50MzJfdCBsb2FkX2JhbGFuY2VyX2NyZWF0ZShpbnQgaTkxNSwKPj4+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGk5MTVfZW5naW5lX2NsYXNzX2lu c3RhbmNlICpjaSwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu ZWQgaW50IGNvdW50KQo+Pj4gK3sKPj4+ICsgICAgIHVpbnQzMl90IGN0eDsKPj4+ICsKPj4+ICsg ICAgIGN0eCA9IGdlbV9jb250ZXh0X2NyZWF0ZShpOTE1KTsKPj4+ICsgICAgIHNldF9sb2FkX2Jh bGFuY2VyKGk5MTUsIGN0eCwgY2ksIGNvdW50KTsKPj4+ICsKPj4+ICsgICAgIHJldHVybiBjdHg7 Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyB1aW50MzJfdCBfX2JhdGNoX2NyZWF0ZShpbnQgaTkx NSwgdWludDMyX3Qgb2Zmc2V0KQo+Pj4gK3sKPj4+ICsgICAgIGNvbnN0IHVpbnQzMl90IGJiZSA9 IE1JX0JBVENIX0JVRkZFUl9FTkQ7Cj4+PiArICAgICB1aW50MzJfdCBoYW5kbGU7Cj4+PiArCj4+ PiArICAgICBoYW5kbGUgPSBnZW1fY3JlYXRlKGk5MTUsIEFMSUdOKG9mZnNldCArIDQsIDQwOTYp KTsKPj4+ICsgICAgIGdlbV93cml0ZShpOTE1LCBoYW5kbGUsIG9mZnNldCwgJmJiZSwgc2l6ZW9m KGJiZSkpOwo+Pj4gKwo+Pj4gKyAgICAgcmV0dXJuIGhhbmRsZTsKPj4+ICt9Cj4+PiArCj4+PiAr c3RhdGljIHVpbnQzMl90IGJhdGNoX2NyZWF0ZShpbnQgaTkxNSkKPj4+ICt7Cj4+PiArICAgICBy ZXR1cm4gX19iYXRjaF9jcmVhdGUoaTkxNSwgMCk7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyB2 b2lkIGludmFsaWRfYmFsYW5jZXIoaW50IGk5MTUpCj4+PiArewo+Pj4gKyAgICAgSTkxNV9ERUZJ TkVfQ09OVEVYVF9FTkdJTkVTX0xPQURfQkFMQU5DRShiYWxhbmNlciwgNjQpOwo+Pj4gKyAgICAg STkxNV9ERUZJTkVfQ09OVEVYVF9QQVJBTV9FTkdJTkVTKGVuZ2luZXMsIDY0KTsKPj4+ICsgICAg IHN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbSBwID0gewo+Pj4gKyAgICAgICAgICAg ICAucGFyYW0gPSBJOTE1X0NPTlRFWFRfUEFSQU1fRU5HSU5FUywKPj4+ICsgICAgICAgICAgICAg LnZhbHVlID0gdG9fdXNlcl9wb2ludGVyKCZlbmdpbmVzKQo+Pj4gKyAgICAgfTsKPj4+ICsgICAg IHVpbnQzMl90IGhhbmRsZTsKPj4+ICsgICAgIHZvaWQgKnB0cjsKPj4+ICsKPj4+ICsgICAgIC8q Cj4+PiArICAgICAgKiBBc3N1bWUgdGhhdCBJOTE1X0NPTlRFWFRfUEFSQU1fRU5HSU5FIHZhbGlk YXRlcyB0aGUgYXJyYXkKPj4+ICsgICAgICAqIG9mIGVuZ2luZXNbXSwgb3VyIGpvYiBpcyB0byBk ZXRlcm1pbmUgaWYgdGhlIGxvYWRfYmFsYW5jZXIKPj4+ICsgICAgICAqIGV4dGVuc2lvbiBleHBs b2Rlcy4KPj4+ICsgICAgICAqLwo+Pj4gKwo+Pj4gKyAgICAgZm9yIChpbnQgY2xhc3MgPSAwOyBj bGFzcyA8IDMyOyBjbGFzcysrKSB7Cj4+PiArICAgICAgICAgICAgIHN0cnVjdCBpOTE1X2VuZ2lu ZV9jbGFzc19pbnN0YW5jZSAqY2k7Cj4+PiArICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjb3Vu dDsKPj4+ICsKPj4+ICsgICAgICAgICAgICAgY2kgPSBsaXN0X2VuZ2luZXMoaTkxNSwgMSA8PCBj bGFzcywgJmNvdW50KTsKPj4+ICsgICAgICAgICAgICAgaWYgKCFjaSkKPj4+ICsgICAgICAgICAg ICAgICAgICAgICBjb250aW51ZTsKPj4+ICsKPj4+ICsgICAgICAgICAgICAgaWd0X2RlYnVnKCJG b3VuZCAlZCBlbmdpbmVzXG4iLCBjb3VudCk7Cj4+PiArICAgICAgICAgICAgIGlndF9hc3NlcnRf bHRlKGNvdW50LCA2NCk7Cj4+Cj4+IEhleS4uIHlvdSBhbHdheXMgc2F5IHRydXN0IHRoZSBrZXJu ZWwhIDspCj4gCj4gVGhpcyBjb2RlIHdhcyBwbGFjZWhvbGRlciB0aGF0IHlvdSBzYWlkIHlvdSB3 b3VsZCByZXBsYWNlIGJ5IGEgcHJvcGVyCj4gcXVlcnkgYXBpLi4uCj4gCj4+Cj4+PiArCj4+PiAr ICAgICAgICAgICAgIHAuY3R4X2lkID0gZ2VtX2NvbnRleHRfY3JlYXRlKGk5MTUpOwo+Pj4gKyAg ICAgICAgICAgICBwLnNpemUgPSAoc2l6ZW9mKHN0cnVjdCBpOTE1X2NvbnRleHRfcGFyYW1fZW5n aW5lcykgKwo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvdW50ICsgMSkgKiBz aXplb2YoKmVuZ2luZXMuZW5naW5lcykpOwo+Pgo+PiBBbGlnbm1lbnQgbG9va3Mgb2ZmLgo+Pgo+ Pj4gKwo+Pj4gKyAgICAgICAgICAgICBtZW1zZXQoJmVuZ2luZXMsIDAsIHNpemVvZihlbmdpbmVz KSk7Cj4+PiArICAgICAgICAgICAgIGVuZ2luZXMuZW5naW5lc1swXS5lbmdpbmVfY2xhc3MgPSBJ OTE1X0VOR0lORV9DTEFTU19JTlZBTElEOwo+Pj4gKyAgICAgICAgICAgICBlbmdpbmVzLmVuZ2lu ZXNbMF0uZW5naW5lX2luc3RhbmNlID0gSTkxNV9FTkdJTkVfQ0xBU1NfSU5WQUxJRF9OT05FOwo+ Pj4gKyAgICAgICAgICAgICBtZW1jcHkoZW5naW5lcy5lbmdpbmVzICsgMSwgY2ksIGNvdW50ICog c2l6ZW9mKCpjaSkpOwo+Pj4gKyAgICAgICAgICAgICBnZW1fY29udGV4dF9zZXRfcGFyYW0oaTkx NSwgJnApOwo+Pj4gKwo+Pj4gKyAgICAgICAgICAgICBlbmdpbmVzLmV4dGVuc2lvbnMgPSAtMXVs bDsKPj4+ICsgICAgICAgICAgICAgaWd0X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X3NldF9wYXJh bShpOTE1LCAmcCksIC1FRkFVTFQpOwo+Pj4gKwo+Pj4gKyAgICAgICAgICAgICBlbmdpbmVzLmV4 dGVuc2lvbnMgPSAxdWxsOwo+Pj4gKyAgICAgICAgICAgICBpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2Nv bnRleHRfc2V0X3BhcmFtKGk5MTUsICZwKSwgLUVGQVVMVCk7Cj4+PiArCj4+PiArICAgICAgICAg ICAgIG1lbXNldCgmYmFsYW5jZXIsIDAsIHNpemVvZihiYWxhbmNlcikpOwo+Pj4gKyAgICAgICAg ICAgICBiYWxhbmNlci5iYXNlLm5hbWUgPSBJOTE1X0NPTlRFWFRfRU5HSU5FU19FWFRfTE9BRF9C QUxBTkNFOwo+Pj4gKyAgICAgICAgICAgICBiYWxhbmNlci5udW1fc2libGluZ3MgPSBjb3VudDsK Pj4+ICsgICAgICAgICAgICAgbWVtY3B5KGJhbGFuY2VyLmVuZ2luZXMsIGNpLCBjb3VudCAqIHNp emVvZigqY2kpKTsKPj4+ICsKPj4+ICsgICAgICAgICAgICAgZW5naW5lcy5leHRlbnNpb25zID0g dG9fdXNlcl9wb2ludGVyKCZiYWxhbmNlcik7Cj4+PiArICAgICAgICAgICAgIGdlbV9jb250ZXh0 X3NldF9wYXJhbShpOTE1LCAmcCk7Cj4+PiArCj4+PiArICAgICAgICAgICAgIGJhbGFuY2VyLmVu Z2luZV9pbmRleCA9IDE7Cj4+PiArICAgICAgICAgICAgIGlndF9hc3NlcnRfZXEoX19nZW1fY29u dGV4dF9zZXRfcGFyYW0oaTkxNSwgJnApLCAtRUVYSVNUKTsKPj4+ICsKPj4+ICsgICAgICAgICAg ICAgYmFsYW5jZXIuZW5naW5lX2luZGV4ID0gY291bnQ7Cj4+PiArICAgICAgICAgICAgIGlndF9h c3NlcnRfZXEoX19nZW1fY29udGV4dF9zZXRfcGFyYW0oaTkxNSwgJnApLCAtRUVYSVNUKTsKPj4+ ICsKPj4+ICsgICAgICAgICAgICAgYmFsYW5jZXIuZW5naW5lX2luZGV4ID0gY291bnQgKyAxOwo+ Pj4gKyAgICAgICAgICAgICBpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGk5 MTUsICZwKSwgLUVJTlZBTCk7Cj4+PiArCj4+PiArICAgICAgICAgICAgIGJhbGFuY2VyLmVuZ2lu ZV9pbmRleCA9IDA7Cj4+PiArICAgICAgICAgICAgIGdlbV9jb250ZXh0X3NldF9wYXJhbShpOTE1 LCAmcCk7Cj4+PiArCj4+PiArICAgICAgICAgICAgIGJhbGFuY2VyLmJhc2UubmV4dF9leHRlbnNp b24gPSB0b191c2VyX3BvaW50ZXIoJmJhbGFuY2VyKTsKPj4+ICsgICAgICAgICAgICAgaWd0X2Fz c2VydF9lcShfX2dlbV9jb250ZXh0X3NldF9wYXJhbShpOTE1LCAmcCksIC1FRVhJU1QpOwo+Pj4g Kwo+Pj4gKyAgICAgICAgICAgICBiYWxhbmNlci5iYXNlLm5leHRfZXh0ZW5zaW9uID0gLTF1bGw7 Cj4+PiArICAgICAgICAgICAgIGlndF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9zZXRfcGFyYW0o aTkxNSwgJnApLCAtRUZBVUxUKTsKPj4+ICsKPj4+ICsgICAgICAgICAgICAgaGFuZGxlID0gZ2Vt X2NyZWF0ZShpOTE1LCA0MDk2ICogMyk7Cj4+PiArICAgICAgICAgICAgIHB0ciA9IGdlbV9tbWFw X19ndHQoaTkxNSwgaGFuZGxlLCA0MDk2ICogMywgUFJPVF9XUklURSk7Cj4+PiArICAgICAgICAg ICAgIGdlbV9jbG9zZShpOTE1LCBoYW5kbGUpOwo+Pj4gKwo+Pj4gKyAgICAgICAgICAgICBtZW1z ZXQoJmVuZ2luZXMsIDAsIHNpemVvZihlbmdpbmVzKSk7Cj4+PiArICAgICAgICAgICAgIGVuZ2lu ZXMuZW5naW5lc1swXS5lbmdpbmVfY2xhc3MgPSBJOTE1X0VOR0lORV9DTEFTU19JTlZBTElEOwo+ Pj4gKyAgICAgICAgICAgICBlbmdpbmVzLmVuZ2luZXNbMF0uZW5naW5lX2luc3RhbmNlID0gSTkx NV9FTkdJTkVfQ0xBU1NfSU5WQUxJRF9OT05FOwo+Pj4gKyAgICAgICAgICAgICBlbmdpbmVzLmVu Z2luZXNbMV0uZW5naW5lX2NsYXNzID0gSTkxNV9FTkdJTkVfQ0xBU1NfSU5WQUxJRDsKPj4+ICsg ICAgICAgICAgICAgZW5naW5lcy5lbmdpbmVzWzFdLmVuZ2luZV9pbnN0YW5jZSA9IEk5MTVfRU5H SU5FX0NMQVNTX0lOVkFMSURfTk9ORTsKPj4+ICsgICAgICAgICAgICAgbWVtY3B5KGVuZ2luZXMu ZW5naW5lcyArIDIsIGNpLCBjb3VudCAqIHNpemVvZihjaSkpOwo+Pj4gKyAgICAgICAgICAgICBw LnNpemUgPSAoc2l6ZW9mKHN0cnVjdCBpOTE1X2NvbnRleHRfcGFyYW1fZW5naW5lcykgKwo+Pj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvdW50ICsgMikgKiBzaXplb2YoKmVuZ2lu ZXMuZW5naW5lcykpOwo+Pgo+PiBBbGlnbm1lbnQgYWdhaW4uCj4+Cj4+PiArICAgICAgICAgICAg IGdlbV9jb250ZXh0X3NldF9wYXJhbShpOTE1LCAmcCk7Cj4+PiArCj4+PiArICAgICAgICAgICAg IGJhbGFuY2VyLmJhc2UubmV4dF9leHRlbnNpb24gPSAwOwo+Pj4gKyAgICAgICAgICAgICBiYWxh bmNlci5lbmdpbmVfaW5kZXggPSAxOwo+Pj4gKyAgICAgICAgICAgICBlbmdpbmVzLmV4dGVuc2lv bnMgPSB0b191c2VyX3BvaW50ZXIoJmJhbGFuY2VyKTsKPj4+ICsgICAgICAgICAgICAgZ2VtX2Nv bnRleHRfc2V0X3BhcmFtKGk5MTUsICZwKTsKPj4+ICsKPj4+ICsgICAgICAgICAgICAgbWVtY3B5 KHB0ciArIDQwOTYgLSA4LCAmYmFsYW5jZXIsIHNpemVvZihiYWxhbmNlcikpOwo+Pj4gKyAgICAg ICAgICAgICBtZW1jcHkocHRyICsgODE5MiAtIDgsICZiYWxhbmNlciwgc2l6ZW9mKGJhbGFuY2Vy KSk7Cj4+PiArICAgICAgICAgICAgIGJhbGFuY2VyLmVuZ2luZV9pbmRleCA9IDA7Cj4+PiArCj4+ PiArICAgICAgICAgICAgIGVuZ2luZXMuZXh0ZW5zaW9ucyA9IHRvX3VzZXJfcG9pbnRlcihwdHIp ICsgNDA5NiAtIDg7Cj4+PiArICAgICAgICAgICAgIGdlbV9jb250ZXh0X3NldF9wYXJhbShpOTE1 LCAmcCk7Cj4+PiArCj4+PiArICAgICAgICAgICAgIGJhbGFuY2VyLmJhc2UubmV4dF9leHRlbnNp b24gPSBlbmdpbmVzLmV4dGVuc2lvbnM7Cj4+PiArICAgICAgICAgICAgIGVuZ2luZXMuZXh0ZW5z aW9ucyA9IHRvX3VzZXJfcG9pbnRlcigmYmFsYW5jZXIpOwo+Pj4gKyAgICAgICAgICAgICBnZW1f Y29udGV4dF9zZXRfcGFyYW0oaTkxNSwgJnApOwo+Pgo+PiBtbWFwX2d0dCBhbmQgdW5tYXBwZWQg YXJlYSB0ZXN0aW5nIGluIG9uZT8KPiAKPiBOZWlnaGJvdXJpbmcuCj4gCj4+PiArICAgICAgICAg ICAgIG11bm1hcChwdHIsIDQwOTYpOyA+KyAgICAgICAgICAgaWd0X2Fzc2VydF9lcShfX2dlbV9j b250ZXh0X3NldF9wYXJhbShpOTE1LCAmcCksIC1FRkFVTFQpOwo+Pj4gKyAgICAgICAgICAgICBl bmdpbmVzLmV4dGVuc2lvbnMgPSB0b191c2VyX3BvaW50ZXIocHRyKSArIDQwOTYgLSA4Owo+Pj4g KyAgICAgICAgICAgICBpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGk5MTUs ICZwKSwgLUVGQVVMVCk7Cj4+PiArCj4+PiArICAgICAgICAgICAgIGVuZ2luZXMuZXh0ZW5zaW9u cyA9IHRvX3VzZXJfcG9pbnRlcihwdHIpICsgODE5MiAtIDg7Cj4+PiArICAgICAgICAgICAgIGdl bV9jb250ZXh0X3NldF9wYXJhbShpOTE1LCAmcCk7Cj4+PiArCj4+PiArICAgICAgICAgICAgIGJh bGFuY2VyLmJhc2UubmV4dF9leHRlbnNpb24gPSBlbmdpbmVzLmV4dGVuc2lvbnM7Cj4+PiArICAg ICAgICAgICAgIGVuZ2luZXMuZXh0ZW5zaW9ucyA9IHRvX3VzZXJfcG9pbnRlcigmYmFsYW5jZXIp Owo+Pj4gKyAgICAgICAgICAgICBnZW1fY29udGV4dF9zZXRfcGFyYW0oaTkxNSwgJnApOwo+Pj4g Kwo+Pj4gKyAgICAgICAgICAgICBtdW5tYXAocHRyICsgODE5MiwgNDA5Nik7Cj4+PiArICAgICAg ICAgICAgIGlndF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9zZXRfcGFyYW0oaTkxNSwgJnApLCAt RUZBVUxUKTsKPj4+ICsgICAgICAgICAgICAgZW5naW5lcy5leHRlbnNpb25zID0gdG9fdXNlcl9w b2ludGVyKHB0cikgKyA4MTkyIC0gODsKPj4+ICsgICAgICAgICAgICAgaWd0X2Fzc2VydF9lcShf X2dlbV9jb250ZXh0X3NldF9wYXJhbShpOTE1LCAmcCksIC1FRkFVTFQpOwo+Pj4gKwo+Pj4gKyAg ICAgICAgICAgICBtdW5tYXAocHRyICsgNDA5NiwgNDA5Nik7Cj4+PiArCj4+PiArICAgICAgICAg ICAgIGdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwgcC5jdHhfaWQpOwo+Pj4gKyAgICAgICAgICAg ICBmcmVlKGNpKTsKPj4+ICsgICAgIH0KPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIHZvaWQga2lj a19rdGhyZWFkcyhpbnQgcGVyaW9kX3VzKQo+Pj4gK3sKPj4+ICsgICAgIHNjaGVkX3lpZWxkKCk7 Cj4+PiArICAgICB1c2xlZXAocGVyaW9kX3VzKTsKPj4KPj4geWllbGQgYW5kIHNsZWVwIGhtLi4g Y2FsbGluZyB3aXRoIHplcm8gcGVyaW9kX3VzPyBEb2Vzbid0IHNlZW0gbGlrZSBpdC4KPj4gU28g d2hhdCdzIGl0IGFib3V0Pwo+IAo+IEhpc3RvcmljYWxseSB5aWVsZCBtYXkgaGF2ZSBiZWVuIGEg bm8tb3AsIGJ1dCBzbGVlcCgwKSBhY3R1YWxseSB5aWVsZGVkLgo+IAo+Pj4gK30KPj4+ICsKPj4+ ICtzdGF0aWMgZG91YmxlIG1lYXN1cmVfbG9hZChpbnQgcG11LCBpbnQgcGVyaW9kX3VzKQo+Pj4g K3sKPj4+ICsgICAgIHVpbnQ2NF90IGRhdGFbMl07Cj4+PiArICAgICB1aW50NjRfdCBkX3QsIGRf djsKPj4+ICsKPj4+ICsgICAgIGtpY2tfa3RocmVhZHMocGVyaW9kX3VzKTsKPj4+ICsKPj4+ICsg ICAgIGlndF9hc3NlcnRfZXEocmVhZChwbXUsIGRhdGEsIHNpemVvZihkYXRhKSksIHNpemVvZihk YXRhKSk7Cj4+PiArICAgICBkX3YgPSAtZGF0YVswXTsKPj4+ICsgICAgIGRfdCA9IC1kYXRhWzFd Owo+Pj4gKwo+Pj4gKyAgICAgdXNsZWVwKHBlcmlvZF91cyk7Cj4+PiArCj4+PiArICAgICBpZ3Rf YXNzZXJ0X2VxKHJlYWQocG11LCBkYXRhLCBzaXplb2YoZGF0YSkpLCBzaXplb2YoZGF0YSkpOwo+ Pj4gKyAgICAgZF92ICs9IGRhdGFbMF07Cj4+PiArICAgICBkX3QgKz0gZGF0YVsxXTsKPj4KPj4g VGhpcyAtdmFsICsgdmFsIHRyaWNrIHdpdGggdWludDY0X3Qgd29ya3M/Cj4gCj4gWWVzLCB1bnNp Z25lZCBvdmVyZmxvdyBpcyBkZWZpbmVkLgo+IAo+Pgo+Pj4gKwo+Pj4gKyAgICAgcmV0dXJuIGRf diAvIChkb3VibGUpZF90Owo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgZG91YmxlIG1lYXN1cmVf bWluX2xvYWQoaW50IHBtdSwgdW5zaWduZWQgaW50IG51bSwgaW50IHBlcmlvZF91cykKPj4+ICt7 Cj4+PiArICAgICB1aW50NjRfdCBkYXRhWzIgKyBudW1dOwo+Pj4gKyAgICAgdWludDY0X3QgZF90 LCBkX3ZbbnVtXTsKPj4+ICsgICAgIHVpbnQ2NF90IG1pbiA9IC0xLCBtYXggPSAwOwo+Pj4gKwo+ Pj4gKyAgICAga2lja19rdGhyZWFkcyhwZXJpb2RfdXMpOwo+Pj4gKwo+Pj4gKyAgICAgaWd0X2Fz c2VydF9lcShyZWFkKHBtdSwgZGF0YSwgc2l6ZW9mKGRhdGEpKSwgc2l6ZW9mKGRhdGEpKTsKPj4+ ICsgICAgIGZvciAodW5zaWduZWQgaW50IG4gPSAwOyBuIDwgbnVtOyBuKyspCj4+PiArICAgICAg ICAgICAgIGRfdltuXSA9IC1kYXRhWzIgKyBuXTsKPj4+ICsgICAgIGRfdCA9IC1kYXRhWzFdOwo+ Pj4gKwo+Pj4gKyAgICAgdXNsZWVwKHBlcmlvZF91cyk7Cj4+PiArCj4+PiArICAgICBpZ3RfYXNz ZXJ0X2VxKHJlYWQocG11LCBkYXRhLCBzaXplb2YoZGF0YSkpLCBzaXplb2YoZGF0YSkpOwo+Pj4g Kwo+Pj4gKyAgICAgZF90ICs9IGRhdGFbMV07Cj4+PiArICAgICBmb3IgKHVuc2lnbmVkIGludCBu ID0gMDsgbiA8IG51bTsgbisrKSB7Cj4+PiArICAgICAgICAgICAgIGRfdltuXSArPSBkYXRhWzIg KyBuXTsKPj4+ICsgICAgICAgICAgICAgaWd0X2RlYnVnKCJlbmdpbmVbJWRdOiAlLjFmJSVcbiIs Cj4+PiArICAgICAgICAgICAgICAgICAgICAgICBuLCBkX3Zbbl0gLyAoZG91YmxlKWRfdCAqIDEw MCk7Cj4+PiArICAgICAgICAgICAgIGlmIChkX3Zbbl0gPCBtaW4pCj4+PiArICAgICAgICAgICAg ICAgICAgICAgbWluID0gZF92W25dOwo+Pj4gKyAgICAgICAgICAgICBpZiAoZF92W25dID4gbWF4 KQo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIG1heCA9IGRfdltuXTsKPj4+ICsgICAgIH0KPj4+ ICsKPj4+ICsgICAgIGlndF9kZWJ1ZygiZWxhcHNlZDogJSJQUkl1NjQibnMsIGxvYWQgWyUuMWYs ICUuMWZdJSVcbiIsCj4+PiArICAgICAgICAgICAgICAgZF90LCBtaW4gLyAoZG91YmxlKWRfdCAq IDEwMCwgIG1heCAvIChkb3VibGUpZF90ICogMTAwKTsKPj4+ICsKPj4+ICsgICAgIHJldHVybiBt aW4gLyAoZG91YmxlKWRfdDsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIHZvaWQgY2hlY2tfaW5k aXZpZHVhbF9lbmdpbmUoaW50IGk5MTUsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdWludDMyX3QgY3R4LAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IHN0cnVjdCBpOTE1X2VuZ2luZV9jbGFzc19pbnN0YW5jZSAqY2ksCj4+PiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlkeCkKPj4+ICt7Cj4+PiArICAgICBpZ3Rf c3Bpbl90ICpzcGluOwo+Pj4gKyAgICAgZG91YmxlIGxvYWQ7Cj4+PiArICAgICBpbnQgcG11Owo+ Pj4gKwo+Pj4gKyAgICAgcG11ID0gcGVyZl9pOTE1X29wZW4oSTkxNV9QTVVfRU5HSU5FX0JVU1ko Y2lbaWR4XS5lbmdpbmVfY2xhc3MsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjaVtpZHhdLmVuZ2luZV9pbnN0YW5jZSkpOwo+Pj4gKwo+Pj4gKyAg ICAgc3BpbiA9IGlndF9zcGluX25ldyhpOTE1LCAuY3R4ID0gY3R4LCAuZW5naW5lID0gaWR4ICsg MSk7Cj4+PiArICAgICBsb2FkID0gbWVhc3VyZV9sb2FkKHBtdSwgMTAwMDApOwo+Pgo+PiBIbSB1 c2xlZXAgYmVmb3JlIHN0YXJ0IG9mIG1lYXN1cmluZyBhbmQgYmV0d2VlbiB0d28gc2FtcGxlcyBp cyB0aGUgc2FtZS4KPj4gVGhlIG9uZSBiZWZvcmUgc2hvdWxkIGJlIGZpeGVkIEkgdGhpbmssIG5v Pwo+IAo+IENvdWxkIGJlLCB0aGF0IHdvdWxkIHJlcXVpcmUgdGhvdWdodCBhcyB0byB3aGF0IHRo ZSBhcHByb3ByaWF0ZSBwZXJpb2QKPiBmb3Iga2lja2luZyBzaG91bGQgYmUuIFlheSBmb3Iga3Nv ZnRpcnFkLgo+IAo+Pj4gKyAgICAgaWd0X3NwaW5fZnJlZShpOTE1LCBzcGluKTsKPj4+ICsKPj4+ ICsgICAgIGNsb3NlKHBtdSk7Cj4+PiArCj4+PiArICAgICBpZ3RfYXNzZXJ0X2YobG9hZCA+IDAu OTAsCj4+PiArICAgICAgICAgICAgICAgICAgImVuZ2luZSAlZCAoY2xhc3M6aW5zdGFuY2UgJWQ6 JWQpIHdhcyBmb3VuZCB0byBiZSBvbmx5ICUuMWYlJSBidXN5XG4iLAo+Pj4gKyAgICAgICAgICAg ICAgICAgIGlkeCwgY2lbaWR4XS5lbmdpbmVfY2xhc3MsIGNpW2lkeF0uZW5naW5lX2luc3RhbmNl LCBsb2FkKjEwMCk7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyB2b2lkIGluZGl2aWR1YWwoaW50 IGk5MTUpCj4+PiArewo+Pj4gKyAgICAgdWludDMyX3QgY3R4Owo+Pj4gKwo+Pj4gKyAgICAgLyoK Pj4+ICsgICAgICAqIEk5MTVfQ09OVEVYVF9QQVJBTV9FTkdJTkUgYWxsb3dzIHVzIHRvIGluZGV4 IGludG8gdGhlIHVzZXIKPj4+ICsgICAgICAqIHN1cHBsaWVkIGFycmF5IGZyb20gZ2VtX2V4ZWNi dWYoKS4gT3VyIGNoZWNrIGlzIHRvIGJ1aWxkIHRoZQo+Pj4gKyAgICAgICogY3R4LT5lbmdpbmVb XSB3aXRoIHZhcmlvdXMgZGlmZmVyZW50IGVuZ2luZSBjbGFzc2VzLCBmZWVkIGluCj4+PiArICAg ICAgKiBhIHNwaW5uZXIgYW5kIHRoZW4gYXNrIHBtdSB0byBjb25maXJtIGl0IHRoZSBleHBlY3Rl ZCBlbmdpbmUKPj4+ICsgICAgICAqIHdhcyBidXN5Lgo+Pj4gKyAgICAgICovCj4+PiArCj4+PiAr ICAgICBjdHggPSBnZW1fY29udGV4dF9jcmVhdGUoaTkxNSk7Cj4+PiArCj4+PiArICAgICBmb3Ig KGludCBtYXNrID0gMDsgbWFzayA8IDMyOyBtYXNrKyspIHsKPj4+ICsgICAgICAgICAgICAgc3Ry dWN0IGk5MTVfZW5naW5lX2NsYXNzX2luc3RhbmNlICpjaTsKPj4+ICsgICAgICAgICAgICAgdW5z aWduZWQgaW50IGNvdW50Owo+Pj4gKwo+Pj4gKyAgICAgICAgICAgICBjaSA9IGxpc3RfZW5naW5l cyhpOTE1LCAxdSA8PCBtYXNrLCAmY291bnQpOwo+Pj4gKyAgICAgICAgICAgICBpZiAoIWNpKQo+ Pj4gKyAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+Pj4gKwo+Pj4gKyAgICAgICAgICAg ICBpZ3RfZGVidWcoIkZvdW5kICVkIGVuZ2luZXMgb2YgY2xhc3MgJWRcbiIsIGNvdW50LCBtYXNr KTsKPj4+ICsKPj4+ICsgICAgICAgICAgICAgZm9yIChpbnQgcGFzcyA9IDA7IHBhc3MgPCBjb3Vu dDsgcGFzcysrKSB7IC8qIGFwcHJveC4gY291bnQhICovCj4+PiArICAgICAgICAgICAgICAgICAg ICAgaWd0X3Blcm11dGVfYXJyYXkoY2ksIGNvdW50LCBpZ3RfZXhjaGFuZ2VfaW50NjQpOwo+Pgo+ PiBzdHJ1Y3QgaTkxNV9lbmdpbmVfY2xhc3NfaW5zdGFuY2UgaXMgZm91ciBieXRlcyBsb25nLCBz byBzd2FwIGZ1bmMgbG9va3MKPj4gd3JvbmcuIFVubGVzcyBmb3Igc29tZSByZWFzb24geW91IHdh bnQgdG8gc3dhcCBpbiBibG9ja3Mgb2YgdHdvLiBEb24ndAo+PiBrbm93LiBMYXN0IGluZGV4IHdv dWxkIGdyYWIgaW50byByYW5kb20gbWVtb3J5IHRob3VnaC4gSSBtdXN0IGJlIG1pc3NpbmcKPj4g c29tZXRoaW5nIG9yIGl0IHdvdWxkbid0IGhhdmUgd29ya2VkLi4KPiAKPiBPbmNlIHVwb24gYSB0 aW1lIGNsYXNzX2luc3RhbmNlIHdhcyAyeHUzMi4KPiAKPj4KPj4+ICsgICAgICAgICAgICAgICAg ICAgICBzZXRfbG9hZF9iYWxhbmNlcihpOTE1LCBjdHgsIGNpLCBjb3VudCk7Cj4+PiArICAgICAg ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgbiA9IDA7IG4gPCBjb3VudDsgbisrKQo+ Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfaW5kaXZpZHVhbF9lbmdpbmUo aTkxNSwgY3R4LCBjaSwgbik7Cj4+PiArICAgICAgICAgICAgIH0KPj4+ICsKPj4+ICsgICAgICAg ICAgICAgZnJlZShjaSk7Cj4+PiArICAgICB9Cj4+PiArCj4+PiArICAgICBnZW1fY29udGV4dF9k ZXN0cm95KGk5MTUsIGN0eCk7Cj4+PiArICAgICBnZW1fcXVpZXNjZW50X2dwdShpOTE1KTsKPj4+ ICt9Cj4+PiArCj4+PiArc3RhdGljIHZvaWQgaW5kaWNpZXMoaW50IGk5MTUpCj4+Cj4+IGluZGlj ZXM/Cj4+Cj4+PiArewo+Pj4gKyAgICAgSTkxNV9ERUZJTkVfQ09OVEVYVF9QQVJBTV9FTkdJTkVT KGVuZ2luZXMsIEk5MTVfRVhFQ19SSU5HX01BU0sgKyAxKTsKPj4+ICsgICAgIHN0cnVjdCBkcm1f aTkxNV9nZW1fY29udGV4dF9wYXJhbSBwID0gewo+Pj4gKyAgICAgICAgICAgICAuY3R4X2lkID0g Z2VtX2NvbnRleHRfY3JlYXRlKGk5MTUpLAo+Pj4gKyAgICAgICAgICAgICAucGFyYW0gPSBJOTE1 X0NPTlRFWFRfUEFSQU1fRU5HSU5FUywKPj4+ICsgICAgICAgICAgICAgLnZhbHVlID0gdG9fdXNl cl9wb2ludGVyKCZlbmdpbmVzKQo+Pj4gKyAgICAgfTsKPj4+ICsKPj4+ICsgICAgIHN0cnVjdCBk cm1faTkxNV9nZW1fZXhlY19vYmplY3QyIGJhdGNoID0gewo+Pj4gKyAgICAgICAgICAgICAuaGFu ZGxlID0gYmF0Y2hfY3JlYXRlKGk5MTUpLAo+Pj4gKyAgICAgfTsKPj4+ICsKPj4+ICsgICAgIHVu c2lnbmVkIGludCBuZW5naW5lcyA9IDA7Cj4+PiArICAgICB2b2lkICpiYWxhbmNlcnMgPSBOVUxM Owo+Pj4gKwo+Pj4gKyAgICAgLyoKPj4+ICsgICAgICAqIFdlIGNhbiBwb3B1bGF0ZSBvdXIgZW5n aW5lIG1hcCB3aXRoIG11bHRpcGxlIHZpcnR1YWwgZW5naW5lcy4KPj4+ICsgICAgICAqIERvIHNv Lgo+Pj4gKyAgICAgICovCj4+PiArCj4+PiArICAgICBmb3IgKGludCBjbGFzcyA9IDA7IGNsYXNz IDwgMzI7IGNsYXNzKyspIHsKPj4+ICsgICAgICAgICAgICAgc3RydWN0IGk5MTVfZW5naW5lX2Ns YXNzX2luc3RhbmNlICpjaTsKPj4+ICsgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNvdW50Owo+ Pj4gKwo+Pj4gKyAgICAgICAgICAgICBjaSA9IGxpc3RfZW5naW5lcyhpOTE1LCAxdSA8PCBjbGFz cywgJmNvdW50KTsKPj4+ICsgICAgICAgICAgICAgaWYgKCFjaSkKPj4+ICsgICAgICAgICAgICAg ICAgICAgICBjb250aW51ZTsKPj4+ICsKPj4+ICsgICAgICAgICAgICAgaWd0X2RlYnVnKCJGb3Vu ZCAlZCBlbmdpbmVzIG9mIGNsYXNzICVkXG4iLCBjb3VudCwgY2xhc3MpOwo+Pgo+PiBNYXliZSB0 aGlzIGRlYnVnIG1lc3NhZ2Ugc2hvdWxkIGdvIGludG8gbGlzdF9lbmdpbmVzLCBzaW5jZSBpdCBz ZWVtcwo+PiByZXBlYXRlZCBhIGZldyB0aW1lcyBhbHJlYWR5Lgo+IAo+IE9yIHJlbW92ZSB0aGUg ZGVidWcsIEkgaGVhciB5b3UuCj4gCj4+PiArCj4+PiArICAgICAgICAgICAgIGZvciAoaW50IG4g PSAwOyBuIDwgY291bnQ7IG4rKykgewo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIEk5MTVfREVG SU5FX0NPTlRFWFRfRU5HSU5FU19MT0FEX0JBTEFOQ0UoKmJhbGFuY2VyLAo+Pj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291 bnQpOwo+Pj4gKwo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIGVuZ2luZXMuZW5naW5lc1tuZW5n aW5lc10uZW5naW5lX2NsYXNzID0KPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEk5 MTVfRU5HSU5FX0NMQVNTX0lOVkFMSUQ7Cj4+PiArICAgICAgICAgICAgICAgICAgICAgZW5naW5l cy5lbmdpbmVzW25lbmdpbmVzXS5lbmdpbmVfaW5zdGFuY2UgPQo+Pj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgSTkxNV9FTkdJTkVfQ0xBU1NfSU5WQUxJRF9OT05FOwo+Pj4gKwo+Pj4g KyAgICAgICAgICAgICAgICAgICAgIGJhbGFuY2VyID0gY2FsbG9jKHNpemVvZigqYmFsYW5jZXIp LCAxKTsKPj4+ICsgICAgICAgICAgICAgICAgICAgICBpZ3RfYXNzZXJ0KGJhbGFuY2VyKTsKPj4+ ICsKPj4+ICsgICAgICAgICAgICAgICAgICAgICBiYWxhbmNlci0+YmFzZS5uYW1lID0KPj4+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEk5MTVfQ09OVEVYVF9FTkdJTkVTX0VYVF9MT0FE X0JBTEFOQ0U7Cj4+PiArICAgICAgICAgICAgICAgICAgICAgYmFsYW5jZXItPmJhc2UubmV4dF9l eHRlbnNpb24gPQo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9fdXNlcl9wb2lu dGVyKGJhbGFuY2Vycyk7Cj4+PiArICAgICAgICAgICAgICAgICAgICAgYmFsYW5jZXJzID0gYmFs YW5jZXI7Cj4+PiArCj4+PiArICAgICAgICAgICAgICAgICAgICAgYmFsYW5jZXItPmVuZ2luZV9p bmRleCA9IG5lbmdpbmVzKys7Cj4+PiArICAgICAgICAgICAgICAgICAgICAgYmFsYW5jZXItPm51 bV9zaWJsaW5ncyA9IGNvdW50Owo+Pj4gKwo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIG1lbWNw eShiYWxhbmNlci0+ZW5naW5lcywKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ks IGNvdW50ICogc2l6ZW9mKCpjaSkpOwo+Pj4gKyAgICAgICAgICAgICB9Cj4+PiArICAgICAgICAg ICAgIGZyZWUoY2kpOwo+Pj4gKyAgICAgfQo+Pj4gKwo+Pj4gKyAgICAgaWd0X3JlcXVpcmUoYmFs YW5jZXJzKTsKPj4+ICsgICAgIGVuZ2luZXMuZXh0ZW5zaW9ucyA9IHRvX3VzZXJfcG9pbnRlcihi YWxhbmNlcnMpOwo+Pj4gKyAgICAgcC5zaXplID0gKHNpemVvZihzdHJ1Y3QgaTkxNV9lbmdpbmVf Y2xhc3NfaW5zdGFuY2UpICogbmVuZ2luZXMgKwo+Pj4gKyAgICAgICAgICAgICAgIHNpemVvZihz dHJ1Y3QgaTkxNV9jb250ZXh0X3BhcmFtX2VuZ2luZXMpKTsKPj4+ICsgICAgIGdlbV9jb250ZXh0 X3NldF9wYXJhbShpOTE1LCAmcCk7Cj4+PiArCj4+PiArICAgICBmb3IgKHVuc2lnbmVkIGludCBu ID0gMDsgbiA8IG5lbmdpbmVzOyBuKyspIHsKPj4+ICsgICAgICAgICAgICAgc3RydWN0IGRybV9p OTE1X2dlbV9leGVjYnVmZmVyMiBlYiA9IHsKPj4+ICsgICAgICAgICAgICAgICAgICAgICAuYnVm ZmVyc19wdHIgPSB0b191c2VyX3BvaW50ZXIoJmJhdGNoKSwKPj4+ICsgICAgICAgICAgICAgICAg ICAgICAuYnVmZmVyX2NvdW50ID0gMSwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAuZmxhZ3Mg PSBuLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIC5yc3ZkMSA9IHAuY3R4X2lkLAo+Pj4gKyAg ICAgICAgICAgICB9Owo+Pj4gKyAgICAgICAgICAgICBpZ3RfZGVidWcoIkV4ZWN1dGluZyBvbiBp bmRleD0lZFxuIiwgbik7Cj4+PiArICAgICAgICAgICAgIGdlbV9leGVjYnVmKGk5MTUsICZlYik7 Cj4+PiArICAgICB9Cj4+PiArICAgICBnZW1fY29udGV4dF9kZXN0cm95KGk5MTUsIHAuY3R4X2lk KTsKPj4+ICsKPj4+ICsgICAgIGdlbV9zeW5jKGk5MTUsIGJhdGNoLmhhbmRsZSk7Cj4+PiArICAg ICBnZW1fY2xvc2UoaTkxNSwgYmF0Y2guaGFuZGxlKTsKPj4+ICsKPj4+ICsgICAgIHdoaWxlIChi YWxhbmNlcnMpIHsKPj4+ICsgICAgICAgICAgICAgc3RydWN0IGk5MTVfY29udGV4dF9lbmdpbmVz X2xvYWRfYmFsYW5jZSAqYiwgKm47Cj4+PiArCj4+PiArICAgICAgICAgICAgIGIgPSBiYWxhbmNl cnM7Cj4+PiArICAgICAgICAgICAgIG4gPSBmcm9tX3VzZXJfcG9pbnRlcihiLT5iYXNlLm5leHRf ZXh0ZW5zaW9uKTsKPj4+ICsgICAgICAgICAgICAgZnJlZShiKTsKPj4+ICsKPj4+ICsgICAgICAg ICAgICAgYmFsYW5jZXJzID0gbjsKPj4+ICsgICAgIH0KPj4+ICsKPj4+ICsgICAgIGdlbV9xdWll c2NlbnRfZ3B1KGk5MTUpOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgdm9pZCBidXN5KGludCBp OTE1KQo+Pj4gK3sKPj4+ICsgICAgIHVpbnQzMl90IHNjcmF0Y2ggPSBnZW1fY3JlYXRlKGk5MTUs IDQwOTYpOwo+Pj4gKwo+Pj4gKyAgICAgLyoKPj4+ICsgICAgICAqIENoZWNrIHRoYXQgdmlydHVh bCBlbmdpbmVzIGFyZSByZXBvcnRlZCB2aWEgR0VNX0JVU1kuCj4+PiArICAgICAgKgo+Pj4gKyAg ICAgICogV2hlbiBydW5uaW5nLCB0aGUgYmF0Y2ggd2lsbCBiZSBvbiB0aGUgcmVhbCBlbmdpbmUg YW5kIHJlcG9ydAo+Pj4gKyAgICAgICogdGhlIGFjdHVhbCBjbGFzcy4KPj4+ICsgICAgICAqCj4+ PiArICAgICAgKiBQcmlvciB0byBydW5uaW5nLCBpZiB0aGUgbG9hZC1iYWxhbmNlciBpcyBhY3Jv c3MgbXVsdGlwbGUKPj4+ICsgICAgICAqIGNsYXNzZXMgd2UgZG9uJ3Qga25vdyB3aGljaCBlbmdp bmUgdGhlIGJhdGNoIHdpbGwKPj4+ICsgICAgICAqIGV4ZWN1dGUgb24sIHNvIHdlIHJlcG9ydCB0 aGVtIGFsbCEKPj4+ICsgICAgICAqCj4+PiArICAgICAgKiBIb3dldmVyLCBhcyB3ZSBvbmx5IHN1 cHBvcnQgKGFuZCB0ZXN0KSBjcmVhdGluZyBhIGxvYWQtYmFsYW5jZXIKPj4+ICsgICAgICAqIGZy b20gZW5naW5lcyBvZiBvbmx5IG9uZSBjbGFzcywgdGhhdCBjYW4gYmUgcHJvcGFnYXRlZCBhY2N1 cmF0ZWx5Cj4+PiArICAgICAgKiB0aHJvdWdoIHRvIEdFTV9CVVNZLgo+Pj4gKyAgICAgICovCj4+ PiArCj4+PiArICAgICBmb3IgKGludCBjbGFzcyA9IDA7IGNsYXNzIDwgMTY7IGNsYXNzKyspIHsK Pj4+ICsgICAgICAgICAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9idXN5IGJ1c3k7Cj4+PiArICAg ICAgICAgICAgIHN0cnVjdCBpOTE1X2VuZ2luZV9jbGFzc19pbnN0YW5jZSAqY2k7Cj4+PiArICAg ICAgICAgICAgIHVuc2lnbmVkIGludCBjb3VudDsKPj4+ICsgICAgICAgICAgICAgaWd0X3NwaW5f dCAqc3BpblsyXTsKPj4+ICsgICAgICAgICAgICAgdWludDMyX3QgY3R4Owo+Pj4gKwo+Pj4gKyAg ICAgICAgICAgICBjaSA9IGxpc3RfZW5naW5lcyhpOTE1LCAxdSA8PCBjbGFzcywgJmNvdW50KTsK Pj4+ICsgICAgICAgICAgICAgaWYgKCFjaSkKPj4+ICsgICAgICAgICAgICAgICAgICAgICBjb250 aW51ZTsKPj4+ICsKPj4+ICsgICAgICAgICAgICAgaWd0X2RlYnVnKCJGb3VuZCAlZCBlbmdpbmVz IG9mIGNsYXNzICVkXG4iLCBjb3VudCwgY2xhc3MpOwo+Pj4gKyAgICAgICAgICAgICBjdHggPSBs b2FkX2JhbGFuY2VyX2NyZWF0ZShpOTE1LCBjaSwgY291bnQpOwo+Pj4gKyAgICAgICAgICAgICBm cmVlKGNpKTsKPj4+ICsKPj4+ICsgICAgICAgICAgICAgc3BpblswXSA9IF9faWd0X3NwaW5fbmV3 KGk5MTUsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY3R4ID0g Y3R4LAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZsYWdzID0g SUdUX1NQSU5fUE9MTF9SVU4pOwo+Pj4gKyAgICAgICAgICAgICBzcGluWzFdID0gX19pZ3Rfc3Bp bl9uZXcoaTkxNSwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5j dHggPSBjdHgsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZGVw ZW5kZW5jeSA9IHNjcmF0Y2gpOwo+Pj4gKwo+Pj4gKyAgICAgICAgICAgICBpZ3Rfc3Bpbl9idXN5 d2FpdF91bnRpbF9zdGFydGVkKHNwaW5bMF0pOwo+Pj4gKwo+Pj4gKyAgICAgICAgICAgICAvKiBS dW5uaW5nOiBhY3R1YWwgY2xhc3MgKi8KPj4+ICsgICAgICAgICAgICAgYnVzeS5oYW5kbGUgPSBz cGluWzBdLT5oYW5kbGU7Cj4+PiArICAgICAgICAgICAgIGRvX2lvY3RsKGk5MTUsIERSTV9JT0NU TF9JOTE1X0dFTV9CVVNZLCAmYnVzeSk7Cj4+PiArICAgICAgICAgICAgIGlndF9hc3NlcnRfZXFf dTMyKGJ1c3kuYnVzeSwgMXUgPDwgKGNsYXNzICsgMTYpKTsKPj4+ICsKPj4+ICsgICAgICAgICAg ICAgLyogUXVldWVkKHJlYWQpOiBleHBlY3RlZCBjbGFzcyAqLwo+Pj4gKyAgICAgICAgICAgICBi dXN5LmhhbmRsZSA9IHNwaW5bMV0tPmhhbmRsZTsKPj4+ICsgICAgICAgICAgICAgZG9faW9jdGwo aTkxNSwgRFJNX0lPQ1RMX0k5MTVfR0VNX0JVU1ksICZidXN5KTsKPj4+ICsgICAgICAgICAgICAg aWd0X2Fzc2VydF9lcV91MzIoYnVzeS5idXN5LCAxdSA8PCAoY2xhc3MgKyAxNikpOwo+Pj4gKwo+ Pj4gKyAgICAgICAgICAgICAvKiBRdWV1ZWQod3JpdGUpOiBleHBlY3RlZCBjbGFzcyAqLwo+Pj4g KyAgICAgICAgICAgICBidXN5LmhhbmRsZSA9IHNjcmF0Y2g7Cj4+PiArICAgICAgICAgICAgIGRv X2lvY3RsKGk5MTUsIERSTV9JT0NUTF9JOTE1X0dFTV9CVVNZLCAmYnVzeSk7Cj4+PiArICAgICAg ICAgICAgIGlndF9hc3NlcnRfZXFfdTMyKGJ1c3kuYnVzeSwKPj4+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKDF1IDw8IChjbGFzcyArIDE2KSkgfCAoY2xhc3MgKyAxKSk7Cj4+PiAr Cj4+PiArICAgICAgICAgICAgIGlndF9zcGluX2ZyZWUoaTkxNSwgc3BpblsxXSk7Cj4+PiArICAg ICAgICAgICAgIGlndF9zcGluX2ZyZWUoaTkxNSwgc3BpblswXSk7Cj4+PiArCj4+PiArICAgICAg ICAgICAgIGdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwgY3R4KTsKPj4+ICsgICAgIH0KPj4+ICsK Pj4+ICsgICAgIGdlbV9jbG9zZShpOTE1LCBzY3JhdGNoKTsKPj4+ICsgICAgIGdlbV9xdWllc2Nl bnRfZ3B1KGk5MTUpOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgaW50IGFkZF9wbXUoaW50IHBt dSwgY29uc3Qgc3RydWN0IGk5MTVfZW5naW5lX2NsYXNzX2luc3RhbmNlICpjaSkKPj4+ICt7Cj4+ PiArICAgICByZXR1cm4gcGVyZl9pOTE1X29wZW5fZ3JvdXAoSTkxNV9QTVVfRU5HSU5FX0JVU1ko Y2ktPmVuZ2luZV9jbGFzcywKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjaS0+ZW5naW5lX2luc3RhbmNlKSwKPj4+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBwbXUpOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgdm9p ZCBmdWxsKGludCBpOTE1LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCj4+PiArI2RlZmluZSBQVUxTRSAw eDEKPj4+ICsjZGVmaW5lIExBVEUgMHgyCj4+PiArewo+Pj4gKyAgICAgc3RydWN0IGRybV9pOTE1 X2dlbV9leGVjX29iamVjdDIgYmF0Y2ggPSB7Cj4+PiArICAgICAgICAgICAgIC5oYW5kbGUgPSBi YXRjaF9jcmVhdGUoaTkxNSksCj4+PiArICAgICB9Owo+Pj4gKwo+Pj4gKyAgICAgaWYgKGZsYWdz ICYgTEFURSkKPj4+ICsgICAgICAgICAgICAgaWd0X3JlcXVpcmVfc3dfc3luYygpOwo+Pj4gKwo+ Pj4gKyAgICAgLyoKPj4+ICsgICAgICAqIEk5MTVfQ09OVEVYVF9QQVJBTV9FTkdJTkUgY2hhbmdl cyB0aGUgbWVhbmluZyBvZiBJOTE1X0VYRUNfREVGQVVMVAo+Pj4gKyAgICAgICogdG8gcHJvdmlk ZSBhbiBhdXRvbWF0aWMgc2VsZWN0aW9uIGZyb20gdGhlIGN0eC0+ZW5naW5lW10uIEl0Cj4+PiAr ICAgICAgKiBlbXBsb3lzIGxvYWQtYmFsYW5jaW5nIHRvIGV2ZW5seSBkaXN0cmlidXRlIHRoZSB3 b3JrbG9hZCB0aGUKPj4KPj4gVGhlIGxlYWRpbmcgc2VjdGlvbiBuZWVkcyByZXdyaXR0aW5nIGZv ciB0cnV0aC4gSXQgaXMgdGhlIGxvYWQgYmFsYW5jZQo+PiBleHRlbnNpb25zIHdoaWNoIF9jYW5f IHJlZGVmaW5lIHRoZSBtZWFuaWduIG9mIEk5MTVfRVhFQ19ERUZBVUxUIGV0Yy4uCj4+IEknbSBz dXJlIEkgZGlkbid0IG5lZWQgdG8gZXhwbGFpbiwgYnV0IGhhdmUganVzdCB0byBtYWtlIGl0IGNs ZWFyIHdoaWNoCj4+IHBhcnQgSSBhbSBjb21wbGFpbmluZyBhYm91dC4gOikKPiAKPiBIZXksIHJl bWVtYmVyIHRoaXMgaXMgMjAxOCEKCllvdSBnaXZlIG1lIHRvbyBtdWNoIGNyZWRpdCwgSSBqdXN0 IGdvIGFuZCBtaW5kbGVzc2x5IHJldmlldy4gOikKCj4gCj4+PiArICAgICAgKiBhcnJheS4gSWYg d2Ugc3VibWl0IE4gc3Bpbm5lcnMsIHdlIGV4cGVjdCB0aGVtIHRvIGJlIHNpbXVsdGFuZW91c2x5 Cj4+PiArICAgICAgKiBydW5uaW5nIGFjcm9zcyBOIGVuZ2luZXMgYW5kIHVzZSBQTVUgdG8gY29u ZmlybSB0aGF0IHRoZSBlbnRpcmUKPj4+ICsgICAgICAqIHNldCBvZiBlbmdpbmVzIGFyZSBidXN5 Lgo+Pgo+PiBDbGFyaWZ5IGl0IGlzIG9ubHkgaWYgdXNpbmcgTiBjb250ZXh0cy4KPj4KPj4+ICsg ICAgICAqCj4+PiArICAgICAgKiBXZSBjb21wbGljYXRlIG1hdHRlcnMgYnkgaW50ZXJwZXJzaW5n IHNob3J0bGl2ZWQgdGFza3MgdG8gY2hhbGxlbmdlCj4+PiArICAgICAgKiB0aGUga2VybmVsIHRv IHNlYXJjaCBmb3Igc3BhY2UgaW4gd2hpY2ggdG8gaW5zZXJ0IG5ldyBiYXRjaGVzLgo+Pj4gKyAg ICAgICovCj4+PiArCj4+PiArCj4+PiArICAgICBmb3IgKGludCBtYXNrID0gMDsgbWFzayA8IDMy OyBtYXNrKyspIHsKPj4+ICsgICAgICAgICAgICAgc3RydWN0IGk5MTVfZW5naW5lX2NsYXNzX2lu c3RhbmNlICpjaTsKPj4+ICsgICAgICAgICAgICAgaWd0X3NwaW5fdCAqc3BpbiA9IE5VTEw7Cj4+ PiArICAgICAgICAgICAgIElHVF9DT1JLX0ZFTkNFKGNvcmspOwo+Pj4gKyAgICAgICAgICAgICB1 bnNpZ25lZCBpbnQgY291bnQ7Cj4+PiArICAgICAgICAgICAgIGRvdWJsZSBsb2FkOwo+Pj4gKyAg ICAgICAgICAgICBpbnQgZmVuY2UgPSAtMTsKPj4+ICsgICAgICAgICAgICAgaW50ICpwbXU7Cj4+ PiArCj4+PiArICAgICAgICAgICAgIGNpID0gbGlzdF9lbmdpbmVzKGk5MTUsIDF1IDw8IG1hc2ss ICZjb3VudCk7Cj4+PiArICAgICAgICAgICAgIGlmICghY2kpCj4+PiArICAgICAgICAgICAgICAg ICAgICAgY29udGludWU7Cj4+PiArCj4+PiArICAgICAgICAgICAgIGlndF9kZWJ1ZygiRm91bmQg JWQgZW5naW5lcyBvZiBjbGFzcyAlZFxuIiwgY291bnQsIG1hc2spOwo+Pj4gKwo+Pj4gKyAgICAg ICAgICAgICBwbXUgPSBtYWxsb2Moc2l6ZW9mKCpwbXUpICogY291bnQpOwo+Pj4gKyAgICAgICAg ICAgICBpZ3RfYXNzZXJ0KHBtdSk7Cj4+PiArCj4+PiArICAgICAgICAgICAgIGlmIChmbGFncyAm IExBVEUpCj4+PiArICAgICAgICAgICAgICAgICAgICAgZmVuY2UgPSBpZ3RfY29ya19wbHVnKCZj b3JrLCBpOTE1KTsKPj4+ICsKPj4+ICsgICAgICAgICAgICAgcG11WzBdID0gLTE7Cj4+PiArICAg ICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IG4gPSAwOyBuIDwgY291bnQ7IG4rKykgewo+Pj4g KyAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGN0eDsKPj4+ICsKPj4+ICsgICAgICAgICAg ICAgICAgICAgICBwbXVbbl0gPSBhZGRfcG11KHBtdVswXSwgJmNpW25dKTsKPj4+ICsKPj4+ICsg ICAgICAgICAgICAgICAgICAgICBpZiAoZmxhZ3MgJiBQVUxTRSkgewo+Pj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBlYiA9IHsK Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmJ1ZmZlcnNfcHRyID0g dG9fdXNlcl9wb2ludGVyKCZiYXRjaCksCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC5idWZmZXJfY291bnQgPSAxLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAucnN2ZDIgPSBmZW5jZSwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLmZsYWdzID0gZmxhZ3MgJiBMQVRFID8gSTkxNV9FWEVDX0ZFTkNFX0lO IDogMCwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07Cj4+PiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBnZW1fZXhlY2J1ZihpOTE1LCAmZWIpOwo+Pj4gKyAgICAgICAg ICAgICAgICAgICAgIH0KPj4+ICsKPj4+ICsgICAgICAgICAgICAgICAgICAgICAvKgo+Pj4gKyAg ICAgICAgICAgICAgICAgICAgICAqIEVhY2ggc3Bpbm5lciBuZWVkcyB0byBiZSBvbmUgYSBuZXcg dGltZWxpbmUsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICogb3RoZXJ3aXNlIHRoZXkgd2ls bCBqdXN0IHNpdCBpbiB0aGUgc2luZ2xlIHF1ZXVlCj4+PiArICAgICAgICAgICAgICAgICAgICAg ICogYW5kIG5vdCBydW4gY29uY3VycmVudGx5Lgo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAq Lwo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIGN0eCA9IGxvYWRfYmFsYW5jZXJfY3JlYXRlKGk5 MTUsIGNpLCBjb3VudCk7Cj4+PiArCj4+PiArICAgICAgICAgICAgICAgICAgICAgaWYgKHNwaW4g PT0gTlVMTCkgewo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BpbiA9IF9faWd0 X3NwaW5fbmV3KGk5MTUsIC5jdHggPSBjdHgpOwo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIH0g ZWxzZSB7Cj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJtX2k5MTVf Z2VtX2V4ZWNidWZmZXIyIGViID0gewo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAuYnVmZmVyc19wdHIgPSBzcGluLT5leGVjYnVmLmJ1ZmZlcnNfcHRyLAo+Pj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYnVmZmVyX2NvdW50ID0gc3Bpbi0+ ZXhlY2J1Zi5idWZmZXJfY291bnQsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC5yc3ZkMSA9IGN0eCwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLnJzdmQyID0gZmVuY2UsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC5mbGFncyA9IGZsYWdzICYgTEFURSA/IEk5MTVfRVhFQ19GRU5DRV9JTiA6IDAsCj4+ PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Owo+Pj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZ2VtX2V4ZWNidWYoaTkxNSwgJmViKTsKPj4+ICsgICAgICAgICAgICAgICAg ICAgICB9Cj4+PiArCj4+PiArICAgICAgICAgICAgICAgICAgICAgZ2VtX2NvbnRleHRfZGVzdHJv eShpOTE1LCBjdHgpOwo+Pj4gKyAgICAgICAgICAgICB9Cj4+PiArCj4+PiArICAgICAgICAgICAg IGlmIChmbGFncyAmIExBVEUpIHsKPj4+ICsgICAgICAgICAgICAgICAgICAgICBpZ3RfY29ya191 bnBsdWcoJmNvcmspOwo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIGNsb3NlKGZlbmNlKTsKPj4+ ICsgICAgICAgICAgICAgfQo+Pj4gKwo+Pj4gKyAgICAgICAgICAgICBsb2FkID0gbWVhc3VyZV9t aW5fbG9hZChwbXVbMF0sIGNvdW50LCAxMDAwMCk7Cj4+PiArICAgICAgICAgICAgIGlndF9zcGlu X2ZyZWUoaTkxNSwgc3Bpbik7Cj4+PiArCj4+PiArICAgICAgICAgICAgIGNsb3NlKHBtdVswXSk7 Cj4+PiArICAgICAgICAgICAgIGZyZWUocG11KTsKPj4+ICsKPj4+ICsgICAgICAgICAgICAgZnJl ZShjaSk7Cj4+PiArCj4+PiArICAgICAgICAgICAgIGlndF9hc3NlcnRfZihsb2FkID4gMC45MCwK Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICJtaW5pbXVtIGxvYWQgZm9yICVkIHggY2xh c3M6JWQgd2FzIGZvdW5kIHRvIGJlIG9ubHkgJS4xZiUlIGJ1c3lcbiIsCj4+PiArICAgICAgICAg ICAgICAgICAgICAgICAgICBjb3VudCwgbWFzaywgbG9hZCoxMDApOwo+Pj4gKyAgICAgICAgICAg ICBnZW1fcXVpZXNjZW50X2dwdShpOTE1KTsKPj4+ICsgICAgIH0KPj4+ICsKPj4+ICsgICAgIGdl bV9jbG9zZShpOTE1LCBiYXRjaC5oYW5kbGUpOwo+Pj4gKyAgICAgZ2VtX3F1aWVzY2VudF9ncHUo aTkxNSk7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyB2b2lkIG5vcChpbnQgaTkxNSkKPj4+ICt7 Cj4+PiArICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiBiYXRjaCA9IHsKPj4+ ICsgICAgICAgICAgICAgLmhhbmRsZSA9IGJhdGNoX2NyZWF0ZShpOTE1KSwKPj4+ICsgICAgIH07 Cj4+PiArCj4+PiArICAgICBmb3IgKGludCBtYXNrID0gMDsgbWFzayA8IDMyOyBtYXNrKyspIHsK Pj4KPj4gcy9tYXNrL2NsYXNzLwo+Pgo+Pj4gKyAgICAgICAgICAgICBzdHJ1Y3QgaTkxNV9lbmdp bmVfY2xhc3NfaW5zdGFuY2UgKmNpOwo+Pj4gKyAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY291 bnQ7Cj4+PiArICAgICAgICAgICAgIHVpbnQzMl90IGN0eDsKPj4+ICsKPj4+ICsgICAgICAgICAg ICAgY2kgPSBsaXN0X2VuZ2luZXMoaTkxNSwgMXUgPDwgbWFzaywgJmNvdW50KTsKPj4+ICsgICAg ICAgICAgICAgaWYgKCFjaSkKPj4+ICsgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKPj4+ ICsKPj4+ICsgICAgICAgICAgICAgaWYgKGNvdW50IDwgMikgewo+Pj4gKyAgICAgICAgICAgICAg ICAgICAgIGZyZWUoY2kpOwo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+Pgo+ PiBCZW5jaGFtcmsgb25seSBzdWJ0ZXN0IGZvciByZWFsIHZlbmc/Cj4gCj4gU3VyZSwgdGhhdCdz IGEgYml0IG9mIGludGVybmFsIGtub3dsZWRnZSBsZWFraW5nLgo+IAo+Pj4gKyAgICAgICAgICAg ICB9Cj4+PiArCj4+PiArICAgICAgICAgICAgIGlndF9kZWJ1ZygiRm91bmQgJWQgZW5naW5lcyBv ZiBjbGFzcyAlZFxuIiwgY291bnQsIG1hc2spOwo+Pj4gKyAgICAgICAgICAgICBjdHggPSBsb2Fk X2JhbGFuY2VyX2NyZWF0ZShpOTE1LCBjaSwgY291bnQpOwo+Pj4gKwo+Pj4gKyAgICAgICAgICAg ICBmb3IgKGludCBuID0gMDsgbiA8IGNvdW50OyBuKyspIHsKPj4+ICsgICAgICAgICAgICAgICAg ICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNidWYgPSB7Cj4+PiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAuYnVmZmVyc19wdHIgPSB0b191c2VyX3BvaW50ZXIo JmJhdGNoKSwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5idWZmZXJfY291bnQg PSAxLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZsYWdzID0gbiArIDEsCj4+ PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucnN2ZDEgPSBjdHgsCj4+PiArICAgICAg ICAgICAgICAgICAgICAgfTsKPj4+ICsgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXNw ZWMgdHYgPSB7fTsKPj4+ICsgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIG5vcHM7 Cj4+PiArICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHQ7Cj4+PiArCj4+PiArICAgICAgICAg ICAgICAgICAgICAgaWd0X25zZWNfZWxhcHNlZCgmdHYpOwo+Pj4gKyAgICAgICAgICAgICAgICAg ICAgIG5vcHMgPSAwOwo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIGRvIHsKPj4+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwgMTAyNDsgcisrKQo+Pj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW1fZXhlY2J1ZihpOTE1LCAm ZXhlY2J1Zik7Cj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3BzICs9IDEwMjQ7 Cj4+PiArICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoaWd0X3NlY29uZHNfZWxhcHNlZCgm dHYpIDwgMik7Cj4+PiArICAgICAgICAgICAgICAgICAgICAgZ2VtX3N5bmMoaTkxNSwgYmF0Y2gu aGFuZGxlKTsKPj4+ICsKPj4+ICsgICAgICAgICAgICAgICAgICAgICB0ID0gaWd0X25zZWNfZWxh cHNlZCgmdHYpICogMWUtMyAvIG5vcHM7Cj4+PiArICAgICAgICAgICAgICAgICAgICAgaWd0X2lu Zm8oIiV4OiVkICUuM2Z1c1xuIiwgbWFzaywgbiwgdCk7Cj4+Cj4+IENsYXNzIGluIGRlY2ltYWwg aXMgYmV0dGVyIEkgdGhpbmsuCj4gCj4gQnV0IGl0J3MgbWFzayA6LXAKPiAKPiBJdCdzIHRyZWF0 ZWQgYXMganVzdCBhIG51bWJlciBhbmQgbm90IGFzIGEgY2xhc3MgaWRlbnRpZmllci4KCjEgPDwg bWFzayBpcyBhIG1hc2ssIHdoaWxlIG1hc2sgaXMgYSBjbGFzcy4gOikKCj4gCj4+IEFuZCBzb21l IGRlc2NyaXB0aXZlIGxhYmVscyB0byBpbmZvIG1lc3NhZ2VzIHdvdWxkIGJlIGdvb2QuIExpa2UK Pj4gImluZGl2aWR1YWwgZW5naW5lcyIsICJ2aXJ0dWFsIGVuZ2luZSIgZXRjLgo+IAo+IEl0IGRv ZXMgZGVzY3JpYmUgdGhlIGluZGl2aWR1YWwgZW5naW5lcyBhbmQgdGhlaXIgY29tcG9zaXRlcy4g VGhlIG91dHB1dAo+IGxvb2tzIGNsZWFyIGFuZCBjb25jaXNlLiBZb3UgbWF5IHdhbnQgbWFzayB0 cmFuc2xhdGVkIHRvIGEgc3RyaW5nLi4uIGJ1dAo+IHRoaXMgY29kZSBpcyBvYmxpdmlvdXMgYXMg dG8gd2hhdCBtYXNrIGFjdHVhbGx5IGlzLgo+IAo+IFRoZSB3YXkgaXQgaXMgdXNlZCBkZWZpbml0 ZWx5IGxvb2tzIG1vcmUgbGlrZSBtYXNrIHRoYW4gY2xhc3MuCgpNeSBleWViYWxsaW5nIHRoZSBp Z3RfaW5mbyBsaW5lcyBtYWRlIG1lIHRoaW5rIGl0IHdpbGwgYmUgYSBzZXJpZXMgb2YgCmxpbmVz IHdpdGggbnVtYmVycyBzbyBub3QgdmVyeSByZWFkYWJsZSB3aGF0J3Mgd2hhdC4gQSB3b3JkIG9y IHR3byBvbiAKZWFjaCBsaW5lIHRvIHNheSB3aGF0IHNjZW5hcmlvIGRvIHRoZSBudW1iZXJzIHJl bGF0ZSB0byBzaG91bGRuJ3QgYmUgCnN1Y2ggYSBjaG9yZSwgbm8/IDopCgpSZWdhcmRzLAoKVHZy dGtvCgo+IAo+Pj4gKyAgICAgICAgICAgICB9Cj4+PiArCj4+PiArICAgICAgICAgICAgIHsKPj4+ ICsgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4 ZWNidWYgPSB7Cj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYnVmZmVyc19wdHIg PSB0b191c2VyX3BvaW50ZXIoJmJhdGNoKSwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC5idWZmZXJfY291bnQgPSAxLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LnJzdmQxID0gY3R4LAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIH07Cj4+PiArICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IHRpbWVzcGVjIHR2ID0ge307Cj4+PiArICAgICAgICAgICAgICAg ICAgICAgdW5zaWduZWQgbG9uZyBub3BzOwo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIGRvdWJs ZSB0Owo+Pj4gKwo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIGlndF9uc2VjX2VsYXBzZWQoJnR2 KTsKPj4+ICsgICAgICAgICAgICAgICAgICAgICBub3BzID0gMDsKPj4+ICsgICAgICAgICAgICAg ICAgICAgICBkbyB7Cj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBy ID0gMDsgciA8IDEwMjQ7IHIrKykKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZ2VtX2V4ZWNidWYoaTkxNSwgJmV4ZWNidWYpOwo+Pj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbm9wcyArPSAxMDI0Owo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIH0gd2hp bGUgKGlndF9zZWNvbmRzX2VsYXBzZWQoJnR2KSA8IDIpOwo+Pj4gKyAgICAgICAgICAgICAgICAg ICAgIGdlbV9zeW5jKGk5MTUsIGJhdGNoLmhhbmRsZSk7Cj4+PiArCj4+PiArICAgICAgICAgICAg ICAgICAgICAgdCA9IGlndF9uc2VjX2VsYXBzZWQoJnR2KSAqIDFlLTMgLyBub3BzOwo+Pj4gKyAg ICAgICAgICAgICAgICAgICAgIGlndF9pbmZvKCIleDoqICUuM2Z1c1xuIiwgbWFzaywgdCk7Cj4+ PiArICAgICAgICAgICAgIH0KPj4+ICsKPj4+ICsKPj4+ICsgICAgICAgICAgICAgaWd0X2Zvcmso Y2hpbGQsIGNvdW50KSB7Cj4+PiArICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRybV9pOTE1 X2dlbV9leGVjYnVmZmVyMiBleGVjYnVmID0gewo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLmJ1ZmZlcnNfcHRyID0gdG9fdXNlcl9wb2ludGVyKCZiYXRjaCksCj4+PiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAuYnVmZmVyX2NvdW50ID0gMSwKPj4+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC5mbGFncyA9IGNoaWxkICsgMSwKPj4+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC5yc3ZkMSA9IGdlbV9jb250ZXh0X2Nsb25lKGk5MTUsIGN0eCwKPj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEk5MTVfQ09OVEVYVF9DTE9ORV9FTkdJTkVTLCAwKSwKPj4+ICsgICAgICAgICAgICAgICAgICAg ICB9Owo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1lc3BlYyB0diA9IHt9Owo+ Pj4gKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbm9wczsKPj4+ICsgICAgICAg ICAgICAgICAgICAgICBkb3VibGUgdDsKPj4+ICsKPj4+ICsgICAgICAgICAgICAgICAgICAgICBp Z3RfbnNlY19lbGFwc2VkKCZ0dik7Cj4+PiArICAgICAgICAgICAgICAgICAgICAgbm9wcyA9IDA7 Cj4+PiArICAgICAgICAgICAgICAgICAgICAgZG8gewo+Pj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZm9yIChpbnQgciA9IDA7IHIgPCAxMDI0OyByKyspCj4+PiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGdlbV9leGVjYnVmKGk5MTUsICZleGVjYnVmKTsKPj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcHMgKz0gMTAyNDsKPj4+ICsgICAgICAg ICAgICAgICAgICAgICB9IHdoaWxlIChpZ3Rfc2Vjb25kc19lbGFwc2VkKCZ0dikgPCAyKTsKPj4+ ICsgICAgICAgICAgICAgICAgICAgICBnZW1fc3luYyhpOTE1LCBiYXRjaC5oYW5kbGUpOwo+Pj4g Kwo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIHQgPSBpZ3RfbnNlY19lbGFwc2VkKCZ0dikgKiAx ZS0zIC8gbm9wczsKPj4+ICsgICAgICAgICAgICAgICAgICAgICBpZ3RfaW5mbygiWyVkXSAleDol ZCAlLjNmdXNcbiIsIGNoaWxkLCBtYXNrLCBjaGlsZCwgdCk7Cj4+PiArCj4+PiArICAgICAgICAg ICAgICAgICAgICAgbWVtc2V0KCZ0diwgMCwgc2l6ZW9mKHR2KSk7Cj4+PiArICAgICAgICAgICAg ICAgICAgICAgZXhlY2J1Zi5mbGFncyA9IDA7Cj4+PiArCj4+PiArICAgICAgICAgICAgICAgICAg ICAgaWd0X25zZWNfZWxhcHNlZCgmdHYpOwo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIG5vcHMg PSAwOwo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIGRvIHsKPj4+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwgMTAyNDsgcisrKQo+Pj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW1fZXhlY2J1ZihpOTE1LCAmZXhlY2J1Zik7 Cj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3BzICs9IDEwMjQ7Cj4+PiArICAg ICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoaWd0X3NlY29uZHNfZWxhcHNlZCgmdHYpIDwgMik7 Cj4+PiArICAgICAgICAgICAgICAgICAgICAgZ2VtX3N5bmMoaTkxNSwgYmF0Y2guaGFuZGxlKTsK Pj4+ICsKPj4+ICsgICAgICAgICAgICAgICAgICAgICB0ID0gaWd0X25zZWNfZWxhcHNlZCgmdHYp ICogMWUtMyAvIG5vcHM7Cj4+PiArICAgICAgICAgICAgICAgICAgICAgaWd0X2luZm8oIlslZF0g JXg6KiAlLjNmdXNcbiIsIGNoaWxkLCBtYXNrLCB0KTsKPj4+ICsKPj4+ICsgICAgICAgICAgICAg ICAgICAgICBnZW1fY29udGV4dF9kZXN0cm95KGk5MTUsIGV4ZWNidWYucnN2ZDEpOwo+Pj4gKyAg ICAgICAgICAgICB9Cj4+PiArCj4+PiArICAgICAgICAgICAgIGlndF93YWl0Y2hpbGRyZW4oKTsK Pj4+ICsKPj4+ICsgICAgICAgICAgICAgZ2VtX2NvbnRleHRfZGVzdHJveShpOTE1LCBjdHgpOwo+ Pj4gKyAgICAgICAgICAgICBmcmVlKGNpKTsKPj4+ICsgICAgIH0KPj4+ICsKPj4+ICsgICAgIGdl bV9jbG9zZShpOTE1LCBiYXRjaC5oYW5kbGUpOwo+Pj4gKyAgICAgZ2VtX3F1aWVzY2VudF9ncHUo aTkxNSk7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyB2b2lkIHBpbmcoaW50IGk5MTUsIHVpbnQz Ml90IGN0eCwgdW5zaWduZWQgaW50IGVuZ2luZSkKPj4+ICt7Cj4+PiArICAgICBzdHJ1Y3QgZHJt X2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiBvYmogPSB7Cj4+PiArICAgICAgICAgICAgIC5oYW5kbGUg PSBiYXRjaF9jcmVhdGUoaTkxNSksCj4+PiArICAgICB9Owo+Pj4gKyAgICAgc3RydWN0IGRybV9p OTE1X2dlbV9leGVjYnVmZmVyMiBleGVjYnVmID0gewo+Pj4gKyAgICAgICAgICAgICAuYnVmZmVy c19wdHIgPSB0b191c2VyX3BvaW50ZXIoJm9iaiksCj4+PiArICAgICAgICAgICAgIC5idWZmZXJf Y291bnQgPSAxLAo+Pj4gKyAgICAgICAgICAgICAuZmxhZ3MgPSBlbmdpbmUsCj4+PiArICAgICAg ICAgICAgIC5yc3ZkMSA9IGN0eCwKPj4+ICsgICAgIH07Cj4+PiArICAgICBnZW1fZXhlY2J1Zihp OTE1LCAmZXhlY2J1Zik7Cj4+PiArICAgICBnZW1fc3luYyhpOTE1LCBvYmouaGFuZGxlKTsKPj4+ ICsgICAgIGdlbV9jbG9zZShpOTE1LCBvYmouaGFuZGxlKTsKPj4+ICt9Cj4+PiArCj4+PiArc3Rh dGljIHZvaWQgc2VtYXBob3JlKGludCBpOTE1KQo+Pj4gK3sKPj4+ICsgICAgIHVpbnQzMl90IGJs b2NrWzJdLCBzY3JhdGNoOwo+Pj4gKyAgICAgaWd0X3NwaW5fdCAqc3BpblszXTsKPj4+ICsKPj4+ ICsgICAgIC8qCj4+PiArICAgICAgKiBJZiB3ZSBhcmUgdXNpbmcgSFcgc2VtYXBob3JlcyB0byBs YXVuY2ggc2VyaWFsaXNlZCByZXF1ZXN0cwo+Pj4gKyAgICAgICogb24gZGlmZmVyZW50IGVuZ2lu ZSBjb25jdXJyZW50bHksIHdlIHdhbnQgdG8gdmVyaWZ5IHRoYXQgcmVhbAo+Pj4gKyAgICAgICog d29yayBpcyB1bmltcGVkZWQuCj4+PiArICAgICAgKi8KPj4+ICsgICAgIGlndF9yZXF1aXJlKGdl bV9zY2hlZHVsZXJfaGFzX3ByZWVtcHRpb24oaTkxNSkpOwo+Pj4gKwo+Pj4gKyAgICAgYmxvY2tb MF0gPSBnZW1fY29udGV4dF9jcmVhdGUoaTkxNSk7Cj4+PiArICAgICBibG9ja1sxXSA9IGdlbV9j b250ZXh0X2NyZWF0ZShpOTE1KTsKPj4+ICsKPj4+ICsgICAgIHNjcmF0Y2ggPSBnZW1fY3JlYXRl KGk5MTUsIDQwOTYpOwo+Pj4gKyAgICAgc3BpblsyXSA9IGlndF9zcGluX25ldyhpOTE1LCAuZGVw ZW5kZW5jeSA9IHNjcmF0Y2gpOwo+Pj4gKyAgICAgZm9yIChpbnQgbWFzayA9IDE7IG1hc2sgPCAz MjsgbWFzaysrKSB7Cj4+Cj4+IHMvbWFzay9jbGFzcy8gdGhyb3VnaG91dC4KPj4KPj4+ICsgICAg ICAgICAgICAgc3RydWN0IGk5MTVfZW5naW5lX2NsYXNzX2luc3RhbmNlICpjaTsKPj4+ICsgICAg ICAgICAgICAgdW5zaWduZWQgaW50IGNvdW50Owo+Pj4gKyAgICAgICAgICAgICB1aW50MzJfdCB2 aXA7Cj4+PiArCj4+PiArICAgICAgICAgICAgIGNpID0gbGlzdF9lbmdpbmVzKGk5MTUsIDF1IDw8 IG1hc2ssICZjb3VudCk7Cj4+PiArICAgICAgICAgICAgIGlmICghY2kpCj4+PiArICAgICAgICAg ICAgICAgICAgICAgY29udGludWU7Cj4+PiArCj4+PiArICAgICAgICAgICAgIGlmIChjb3VudCA8 IEFSUkFZX1NJWkUoYmxvY2spKQo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+ Pj4gKwo+Pj4gKyAgICAgICAgICAgICAvKiBFbnN1cmUgdGhhdCB3ZSBjb21wbGV0ZWx5IG9jY3Vw eSBhbGwgZW5naW5lcyBpbiB0aGlzIGdyb3VwICovCj4+PiArICAgICAgICAgICAgIGNvdW50ID0g QVJSQVlfU0laRShibG9jayk7Cj4+PiArCj4+PiArICAgICAgICAgICAgIGZvciAoaW50IGkgPSAw OyBpIDwgY291bnQ7IGkrKykgewo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIHNldF9sb2FkX2Jh bGFuY2VyKGk5MTUsIGJsb2NrW2ldLCBjaSwgY291bnQpOwo+Pj4gKyAgICAgICAgICAgICAgICAg ICAgIHNwaW5baV0gPSBfX2lndF9zcGluX25ldyhpOTE1LAo+Pj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY3R4ID0gYmxvY2tbaV0sCj4+PiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5kZXBl bmRlbmN5ID0gc2NyYXRjaCk7Cj4+Cj4+IEFsaWdubWVudC4KPj4KPj4+ICsgICAgICAgICAgICAg fQo+Pj4gKwo+Pj4gKyAgICAgICAgICAgICAvKgo+Pj4gKyAgICAgICAgICAgICAgKiBFaXRoZXIg d2UgaGF2ZW4ndCBibG9ja2VkIGJvdGggZW5naW5lcyB3aXRoIHNlbWFwaG9yZXMsCj4+PiArICAg ICAgICAgICAgICAqIG9yIHdlIGxldCB0aGUgdmlwIHRocm91Z2guIElmIG5vdCwgd2UgaGFuZy4K Pj4+ICsgICAgICAgICAgICAgICovCj4+PiArICAgICAgICAgICAgIHZpcCA9IGdlbV9jb250ZXh0 X2NyZWF0ZShpOTE1KTsKPj4+ICsgICAgICAgICAgICAgc2V0X2xvYWRfYmFsYW5jZXIoaTkxNSwg dmlwLCBjaSwgY291bnQpOwo+Pj4gKyAgICAgICAgICAgICBwaW5nKGk5MTUsIHZpcCwgMCk7Cj4+ PiArICAgICAgICAgICAgIGdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwgdmlwKTsKPj4+ICsKPj4+ ICsgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQo+Pj4gKyAgICAg ICAgICAgICAgICAgICAgIGlndF9zcGluX2ZyZWUoaTkxNSwgc3BpbltpXSk7Cj4+PiArCj4+PiAr ICAgICAgICAgICAgIGZyZWUoY2kpOwo+Pj4gKyAgICAgfQo+Pj4gKyAgICAgaWd0X3NwaW5fZnJl ZShpOTE1LCBzcGluWzJdKTsKPj4+ICsgICAgIGdlbV9jbG9zZShpOTE1LCBzY3JhdGNoKTsKPj4+ ICsKPj4+ICsgICAgIGdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwgYmxvY2tbMV0pOwo+Pj4gKyAg ICAgZ2VtX2NvbnRleHRfZGVzdHJveShpOTE1LCBibG9ja1swXSk7Cj4+PiArCj4+PiArICAgICBn ZW1fcXVpZXNjZW50X2dwdShpOTE1KTsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIHZvaWQgc21v a2V0ZXN0KGludCBpOTE1LCBpbnQgdGltZW91dCkKPj4+ICt7Cj4+PiArICAgICBzdHJ1Y3QgZHJt X2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiBiYXRjaFsyXSA9IHsKPj4+ICsgICAgICAgICAgICAgeyAu aGFuZGxlID0gX19iYXRjaF9jcmVhdGUoaTkxNSwgMTYzODApIH0KPj4+ICsgICAgIH07Cj4+PiAr ICAgICB1bnNpZ25lZCBpbnQgbmNvbnRleHQgPSAwOwo+Pj4gKyAgICAgdWludDMyX3QgKmNvbnRl eHRzID0gTlVMTDsKPj4+ICsgICAgIHVpbnQzMl90ICpoYW5kbGVzID0gTlVMTDsKPj4+ICsKPj4+ ICsgICAgIGlndF9yZXF1aXJlX3N3X3N5bmMoKTsKPj4+ICsKPj4+ICsgICAgIGZvciAoaW50IG1h c2sgPSAwOyBtYXNrIDwgMzI7IG1hc2srKykgewo+Pj4gKyAgICAgICAgICAgICBzdHJ1Y3QgaTkx NV9lbmdpbmVfY2xhc3NfaW5zdGFuY2UgKmNpOwo+Pj4gKyAgICAgICAgICAgICB1bnNpZ25lZCBp bnQgY291bnQgPSAwOwo+Pj4gKwo+Pj4gKyAgICAgICAgICAgICBjaSA9IGxpc3RfZW5naW5lcyhp OTE1LCAxdSA8PCBtYXNrLCAmY291bnQpOwo+Pj4gKyAgICAgICAgICAgICBpZiAoIWNpIHx8IGNv dW50IDwgMikgewo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIGZyZWUoY2kpOwo+Pj4gKyAgICAg ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+Pj4gKyAgICAgICAgICAgICB9Cj4+PiArCj4+PiAr ICAgICAgICAgICAgIGlndF9kZWJ1ZygiRm91bmQgJWQgZW5naW5lcyBvZiBjbGFzcyAlZFxuIiwg Y291bnQsIG1hc2spOwo+Pj4gKwo+Pj4gKyAgICAgICAgICAgICBuY29udGV4dCArPSAxMjg7Cj4+ PiArICAgICAgICAgICAgIGNvbnRleHRzID0gcmVhbGxvYyhjb250ZXh0cywgc2l6ZW9mKCpjb250 ZXh0cykgKiBuY29udGV4dCk7Cj4+PiArICAgICAgICAgICAgIGlndF9hc3NlcnQoY29udGV4dHMp Owo+Pj4gKwo+Pj4gKyAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBuID0gbmNvbnRleHQg LSAxMjg7IG4gPCBuY29udGV4dDsgbisrKSB7Cj4+PiArICAgICAgICAgICAgICAgICAgICAgY29u dGV4dHNbbl0gPSBsb2FkX2JhbGFuY2VyX2NyZWF0ZShpOTE1LCBjaSwgY291bnQpOwo+Pj4gKyAg ICAgICAgICAgICAgICAgICAgIGlndF9hc3NlcnQoY29udGV4dHNbbl0pOwo+Pj4gKyAgICAgICAg ICAgICB9Cj4+PiArCj4+PiArICAgICAgICAgICAgIGZyZWUoY2kpOwo+Pj4gKyAgICAgfQo+Pj4g KyAgICAgaWd0X2RlYnVnKCJDcmVhdGVkICVkIHZpcnR1YWwgZW5naW5lcyAob25lIHBlciBjb250 ZXh0KVxuIiwgbmNvbnRleHQpOwo+Pj4gKyAgICAgaWd0X3JlcXVpcmUobmNvbnRleHQpOwo+Pj4g Kwo+Pj4gKyAgICAgY29udGV4dHMgPSByZWFsbG9jKGNvbnRleHRzLCBzaXplb2YoKmNvbnRleHRz KSAqIG5jb250ZXh0ICogNCk7Cj4+PiArICAgICBpZ3RfYXNzZXJ0KGNvbnRleHRzKTsKPj4+ICsg ICAgIG1lbWNweShjb250ZXh0cyArIG5jb250ZXh0LCBjb250ZXh0cywgbmNvbnRleHQgKiBzaXpl b2YoKmNvbnRleHRzKSk7Cj4+PiArICAgICBuY29udGV4dCAqPSAyOwo+Pj4gKyAgICAgbWVtY3B5 KGNvbnRleHRzICsgbmNvbnRleHQsIGNvbnRleHRzLCBuY29udGV4dCAqIHNpemVvZigqY29udGV4 dHMpKTsKPj4+ICsgICAgIG5jb250ZXh0ICo9IDI7Cj4+PiArCj4+PiArICAgICBoYW5kbGVzID0g bWFsbG9jKHNpemVvZigqaGFuZGxlcykgKiBuY29udGV4dCk7Cj4+PiArICAgICBpZ3RfYXNzZXJ0 KGhhbmRsZXMpOwo+Pj4gKyAgICAgZm9yICh1bnNpZ25lZCBpbnQgbiA9IDA7IG4gPCBuY29udGV4 dDsgbisrKQo+Pj4gKyAgICAgICAgICAgICBoYW5kbGVzW25dID0gZ2VtX2NyZWF0ZShpOTE1LCA0 MDk2KTsKPj4+ICsKPj4+ICsgICAgIGlndF91bnRpbF90aW1lb3V0KHRpbWVvdXQpIHsKPj4+ICsg ICAgICAgICAgICAgdW5zaWduZWQgaW50IGNvdW50ID0gMSArIChyYW5kKCkgJSAobmNvbnRleHQg LSAxKSk7Cj4+PiArICAgICAgICAgICAgIElHVF9DT1JLX0ZFTkNFKGNvcmspOwo+Pj4gKyAgICAg ICAgICAgICBpbnQgZmVuY2UgPSBpZ3RfY29ya19wbHVnKCZjb3JrLCBpOTE1KTsKPj4+ICsKPj4+ ICsgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgbiA9IDA7IG4gPCBjb3VudDsgbisrKSB7 Cj4+PiArICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVy MiBlYiA9IHsKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5idWZmZXJzX3B0ciA9 IHRvX3VzZXJfcG9pbnRlcihiYXRjaCksCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAuYnVmZmVyX2NvdW50ID0gQVJSQVlfU0laRShiYXRjaCksCj4+PiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAucnN2ZDEgPSBjb250ZXh0c1tuXSwKPj4+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC5yc3ZkMiA9IGZlbmNlLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLmZsYWdzID0gSTkxNV9FWEVDX0JBVENIX0ZJUlNUIHwgSTkxNV9FWEVDX0ZFTkNFX0lO LAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIH07Cj4+PiArICAgICAgICAgICAgICAgICAgICAg YmF0Y2hbMV0uaGFuZGxlID0gaGFuZGxlc1tuXTsKPj4+ICsgICAgICAgICAgICAgICAgICAgICBn ZW1fZXhlY2J1ZihpOTE1LCAmZWIpOwo+Pj4gKyAgICAgICAgICAgICB9Cj4+PiArICAgICAgICAg ICAgIGlndF9wZXJtdXRlX2FycmF5KGhhbmRsZXMsIGNvdW50LCBpZ3RfZXhjaGFuZ2VfaW50KTsK Pj4+ICsKPj4+ICsgICAgICAgICAgICAgaWd0X2NvcmtfdW5wbHVnKCZjb3JrKTsKPj4+ICsgICAg ICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgbiA9IDA7IG4gPCBjb3VudDsgbisrKQo+Pj4gKyAg ICAgICAgICAgICAgICAgICAgIGdlbV9zeW5jKGk5MTUsIGhhbmRsZXNbbl0pOwo+Pj4gKwo+Pj4g KyAgICAgICAgICAgICBjbG9zZShmZW5jZSk7Cj4+PiArICAgICB9Cj4+PiArCj4+PiArICAgICBm b3IgKHVuc2lnbmVkIGludCBuID0gMDsgbiA8IG5jb250ZXh0OyBuKyspIHsKPj4+ICsgICAgICAg ICAgICAgZ2VtX2Nsb3NlKGk5MTUsIGhhbmRsZXNbbl0pOwo+Pj4gKyAgICAgICAgICAgICBfX2dl bV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwgY29udGV4dHNbbl0pOwo+Pj4gKyAgICAgfQo+Pj4gKyAg ICAgZnJlZShoYW5kbGVzKTsKPj4+ICsgICAgIGZyZWUoY29udGV4dHMpOwo+Pj4gKyAgICAgZ2Vt X2Nsb3NlKGk5MTUsIGJhdGNoWzBdLmhhbmRsZSk7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBi b29sIGhhc19jb250ZXh0X2VuZ2luZXMoaW50IGk5MTUpCj4+PiArewo+Pj4gKyAgICAgc3RydWN0 IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFtIHAgPSB7Cj4+PiArICAgICAgICAgICAgIC5wYXJh bSA9IEk5MTVfQ09OVEVYVF9QQVJBTV9FTkdJTkVTLAo+Pj4gKyAgICAgfTsKPj4+ICsKPj4+ICsg ICAgIHJldHVybiBfX2dlbV9jb250ZXh0X3NldF9wYXJhbShpOTE1LCAmcCkgPT0gMDsKPj4+ICt9 Cj4+PiArCj4+PiArc3RhdGljIGJvb2wgaGFzX2xvYWRfYmFsYW5jZXIoaW50IGk5MTUpCj4+PiAr ewo+Pj4gKyAgICAgc3RydWN0IGk5MTVfZW5naW5lX2NsYXNzX2luc3RhbmNlIGNpID0ge307Cj4+ PiArICAgICB1aW50MzJfdCBjdHg7Cj4+PiArICAgICBpbnQgZXJyOwo+Pj4gKwo+Pj4gKyAgICAg Y3R4ID0gZ2VtX2NvbnRleHRfY3JlYXRlKGk5MTUpOwo+Pj4gKyAgICAgZXJyID0gX19zZXRfbG9h ZF9iYWxhbmNlcihpOTE1LCBjdHgsICZjaSwgMSk7Cj4+PiArICAgICBnZW1fY29udGV4dF9kZXN0 cm95KGk5MTUsIGN0eCk7Cj4+PiArCj4+PiArICAgICByZXR1cm4gZXJyID09IDA7Cj4+PiArfQo+ Pj4gKwo+Pj4gK2lndF9tYWluCj4+PiArewo+Pj4gKyAgICAgaW50IGk5MTUgPSAtMTsKPj4+ICsK Pj4+ICsgICAgIGlndF9za2lwX29uX3NpbXVsYXRpb24oKTsKPj4+ICsKPj4+ICsgICAgIGlndF9m aXh0dXJlIHsKPj4+ICsgICAgICAgICAgICAgaTkxNSA9IGRybV9vcGVuX2RyaXZlcihEUklWRVJf SU5URUwpOwo+Pj4gKyAgICAgICAgICAgICBpZ3RfcmVxdWlyZV9nZW0oaTkxNSk7Cj4+PiArCj4+ PiArICAgICAgICAgICAgIGdlbV9yZXF1aXJlX2NvbnRleHRzKGk5MTUpOwo+Pj4gKyAgICAgICAg ICAgICBpZ3RfcmVxdWlyZShoYXNfY29udGV4dF9lbmdpbmVzKGk5MTUpKTsKPj4+ICsgICAgICAg ICAgICAgaWd0X3JlcXVpcmUoaGFzX2xvYWRfYmFsYW5jZXIoaTkxNSkpOwo+Pj4gKwo+Pj4gKyAg ICAgICAgICAgICBpZ3RfZm9ya19oYW5nX2RldGVjdG9yKGk5MTUpOwo+Pj4gKyAgICAgfQo+Pj4g Kwo+Pj4gKyAgICAgaWd0X3N1YnRlc3QoImludmFsaWQtYmFsYW5jZXIiKQo+Pj4gKyAgICAgICAg ICAgICBpbnZhbGlkX2JhbGFuY2VyKGk5MTUpOwo+Pj4gKwo+Pj4gKyAgICAgaWd0X3N1YnRlc3Qo ImluZGl2aWR1YWwiKQo+Pj4gKyAgICAgICAgICAgICBpbmRpdmlkdWFsKGk5MTUpOwo+Pj4gKwo+ Pj4gKyAgICAgaWd0X3N1YnRlc3QoImluZGljaWVzIikKPj4+ICsgICAgICAgICAgICAgaW5kaWNp ZXMoaTkxNSk7Cj4+PiArCj4+PiArICAgICBpZ3Rfc3VidGVzdCgiYnVzeSIpCj4+PiArICAgICAg ICAgICAgIGJ1c3koaTkxNSk7Cj4+PiArCj4+PiArICAgICBpZ3Rfc3VidGVzdF9ncm91cCB7Cj4+ PiArICAgICAgICAgICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgewo+Pj4gKyAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IGNoYXIgKm5hbWU7Cj4+PiArICAgICAgICAgICAgICAgICAgICAgdW5zaWdu ZWQgaW50IGZsYWdzOwo+Pj4gKyAgICAgICAgICAgICB9IHBoYXNlc1tdID0gewo+Pj4gKyAgICAg ICAgICAgICAgICAgICAgIHsgIiIsIDAgfSwKPj4+ICsgICAgICAgICAgICAgICAgICAgICB7ICIt cHVsc2UiLCBQVUxTRSB9LAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIHsgIi1sYXRlIiwgTEFU RSB9LAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIHsgIi1sYXRlLXB1bHNlIiwgUFVMU0UgfCBM QVRFIH0sCj4+PiArICAgICAgICAgICAgICAgICAgICAgeyB9Cj4+PiArICAgICAgICAgICAgIH07 Cj4+PiArICAgICAgICAgICAgIGZvciAodHlwZW9mKCpwaGFzZXMpICpwID0gcGhhc2VzOyBwLT5u YW1lOyBwKyspCj4+PiArICAgICAgICAgICAgICAgICAgICAgaWd0X3N1YnRlc3RfZigiZnVsbCVz IiwgcC0+bmFtZSkKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGwoaTkxNSwg cC0+ZmxhZ3MpOwo+Pj4gKyAgICAgfQo+Pj4gKwo+Pj4gKyAgICAgaWd0X3N1YnRlc3QoIm5vcCIp Cj4+PiArICAgICAgICAgICAgIG5vcChpOTE1KTsKPj4+ICsKPj4+ICsgICAgIGlndF9zdWJ0ZXN0 KCJzZW1hcGhvcmUiKQo+Pj4gKyAgICAgICAgICAgICBzZW1hcGhvcmUoaTkxNSk7Cj4+PiArCj4+ PiArICAgICBpZ3Rfc3VidGVzdCgic21va2UiKQo+Pj4gKyAgICAgICAgICAgICBzbW9rZXRlc3Qo aTkxNSwgMjApOwo+Pj4gKwo+Pj4gKyAgICAgaWd0X2ZpeHR1cmUgewo+Pj4gKyAgICAgICAgICAg ICBpZ3Rfc3RvcF9oYW5nX2RldGVjdG9yKCk7Cj4+PiArICAgICB9Cj4+PiArfQo+Pj4gZGlmZiAt LWdpdCBhL3Rlc3RzL21lc29uLmJ1aWxkIGIvdGVzdHMvbWVzb24uYnVpbGQKPj4+IGluZGV4IDdl MDA4OWU3NC4uZWVlYTM2MTFkIDEwMDY0NAo+Pj4gLS0tIGEvdGVzdHMvbWVzb24uYnVpbGQKPj4+ ICsrKyBiL3Rlc3RzL21lc29uLmJ1aWxkCj4+PiBAQCAtMjg4LDYgKzI4OCwxMyBAQCB0ZXN0X2V4 ZWN1dGFibGVzICs9IGV4ZWN1dGFibGUoJ2dlbV9laW8nLAo+Pj4gICAgICAgICAgIGluc3RhbGwg OiB0cnVlKQo+Pj4gICAgdGVzdF9saXN0ICs9ICdnZW1fZWlvJwo+Pj4gICAgCj4+PiArdGVzdF9l eGVjdXRhYmxlcyArPSBleGVjdXRhYmxlKCdnZW1fZXhlY19iYWxhbmNlcicsICdpOTE1L2dlbV9l eGVjX2JhbGFuY2VyLmMnLAo+Pj4gKyAgICAgICAgZGVwZW5kZW5jaWVzIDogdGVzdF9kZXBzICsg WyBsaWJfaWd0X3BlcmYgXSwKPj4+ICsgICAgICAgIGluc3RhbGxfZGlyIDogbGliZXhlY2RpciwK Pj4+ICsgICAgICAgIGluc3RhbGxfcnBhdGggOiBsaWJleGVjZGlyX3JwYXRoZGlyLAo+Pj4gKyAg ICAgICAgaW5zdGFsbCA6IHRydWUpCj4+PiArdGVzdF9wcm9ncyArPSAnZ2VtX2V4ZWNfYmFsYW5j ZXInCj4+PiArCj4+PiAgICB0ZXN0X2V4ZWN1dGFibGVzICs9IGV4ZWN1dGFibGUoJ2dlbV9tb2Nz X3NldHRpbmdzJywKPj4+ICAgICAgICAgICBqb2luX3BhdGhzKCdpOTE1JywgJ2dlbV9tb2NzX3Nl dHRpbmdzLmMnKSwKPj4+ICAgICAgICAgICBkZXBlbmRlbmNpZXMgOiB0ZXN0X2RlcHMgKyBbIGxp Yl9pZ3RfcGVyZiBdLAo+Pj4KPj4KPj4gUmVnYXJkcywKPj4KPj4gVHZydGtvCj4+Cj4gCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmlndC1kZXYgbWFpbGlu ZyBsaXN0CmlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRldg==