From mboxrd@z Thu Jan 1 00:00:00 1970 From: Takashi Iwai Subject: Re: [RFC/RFT PATCH] ALSA: hda - hdmi: Add ATI/AMD multi-channel audio support Date: Thu, 26 Sep 2013 11:59:18 +0200 Message-ID: References: <1379872233-32210-1-git-send-email-anssi.hannula@iki.fi> Mime-Version: 1.0 (generated by SEMI 1.14.6 - "Maruoka") Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by alsa0.perex.cz (Postfix) with ESMTP id D2D342655E9 for ; Thu, 26 Sep 2013 11:57:10 +0200 (CEST) In-Reply-To: <1379872233-32210-1-git-send-email-anssi.hannula@iki.fi> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: alsa-devel-bounces@alsa-project.org Sender: alsa-devel-bounces@alsa-project.org To: Anssi Hannula Cc: alsa-devel@alsa-project.org, =?UTF-8?B?UmFmYcWCIE1pxYJlY2tp?= , Peter =?UTF-8?B?RnLDvGhiZXJnZXI=?= List-Id: alsa-devel@alsa-project.org QXQgU3VuLCAyMiBTZXAgMjAxMyAyMDo1MDozMyArMDMwMCwKQW5zc2kgSGFubnVsYSB3cm90ZToK PiAKPiBSZXF1ZXN0IGZvciBjb21tZW50cyBhbmQgdGVzdGluZy4KPiAKPiBBTUQganVzdCByZWxl YXNlZCB0aGUgZG9jdW1lbnRhdGlvbiBuZWVkZWQgZm9yIG11bHRpLWNoYW5uZWwgSERNSQo+IHN1 cHBvcnQsIHNvIGhlcmUgaXMgdGhlIGluaXRpYWwgcGF0Y2ggYWRkaW5nIHN1Y2ggc3VwcG9ydC4K PiAKPiBUaGlzIGhhcyBiZWVuIHRlc3RlZCBvbiBjb2RlYyAweDEwMDJhYTAxLCByZXZpc2lvbiAw eDEwMDIwMCB3aXRoIHRoZQo+IGV4Y2VwdGlvbiBvZiBjdXN0b20gY2hhbm5lbCBtYXBzLCB3aGlj aCBJIGludGVuZCB0byB0ZXN0IGxhdGVyLgo+IAo+IEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQg aW4gdGVzdGVycyB3aXRoOgo+IC0gT2xkZXIgY29kZWNzIG90aGVyIHRoYW4gMHgxMDAyYWEwMS4g TXkgYmVzdCBndWVzcyBpcyB0aGF0IHRoZSBuZXcgY29kZQo+ICAgc2hvdWxkIHdvcmsgb24gdGhl bSBhcyB3ZWxsLCBidXQgSSdtIG5vdCByZWFsbHkgMTAwJSBzdXJlLgo+IC0gQ29kZWMgMHgxMDAy YWEwMSByZXZpc2lvbnMgMHgxMDAzMDAgKFJldiBJRCAzKSBvciBsYXRlciAoc2VlCj4gICAvcHJv Yy9hc291bmQvY2FyZFgvY29kZWMjWSkuIFRoZXNlIHN1cHBvcnQgaW5kaXZpZHVhbCBjaGFubmVs Cj4gICByZW1hcHBpbmcgYW5kIHRoYXQgY29kZSBpcyBlbnRpcmVseSB1bnRlc3RlZCAoZXZlbiBm b3IgcmVndWxhcgo+ICAgNS4xLzcuMSkuCj4gCj4gSSBkZWNpZGVkIGl0IHdhcyBiZXN0IHRvIGdl dCB0aGlzIG91dCB0aGVyZSBlYXJseSBldmVuIHRob3VnaCBtYWpvcgo+IHBhcnRzIG9mIGl0IGFy ZSBzdGlsbCB1bnRlc3RlZCwgZm9yIGNvbW1lbnRzIGFuZCBmb3Igb3RoZXIgcGVvcGxlIHRvCj4g dGVzdCA6KQo+IAo+IE5vdGUgdGhhdCB0aGlzIHJlY2VudCBjb21taXQgaXMgcHJvYmFibHkgcmVx dWlyZWQgZm9yIG11bHRpLWNoYW5uZWwgdG8KPiB3b3JrIHdpdGggdGhlIG9wZW4tc291cmNlIHJh ZGVvbiBkcml2ZXI6Cj4gQUxTQTogaGRhIC0gaGRtaTogRmFsbGJhY2sgdG8gQUxTQSBhbGxvY2F0 aW9uIHdoZW4gc2VsZWN0aW5nIENBCj4gaHR0cHM6Ly9naXQua2VybmVsLm9yZy9jZ2l0L2xpbnV4 L2tlcm5lbC9naXQvdG9ydmFsZHMvbGludXguZ2l0L2NvbW1pdC9zb3VuZC9wY2kvaGRhL3BhdGNo X2hkbWkuYz9pZD0xOGUzOTE4NjJjY2VhZjQzZGRiOGViNWNjYTA1ZTFhODNhYmRlYmFhCj4gCj4g RWFzaWVzdCB3YXkgdG8gdGVzdCBiYXNpYyBtdWx0aWNoYW5uZWwgaXMgYnkgc3BlYWtlci10ZXN0 LCBlLmcuCj4gc3BlYWtlci10ZXN0IC1EIGhkbWk6Q0FSRD1HZW5lcmljLERFVj0wIC1jOCAtcjE5 MjAwMCAtRiBTMTZfTEUKPiBmb3IgNy4xIDE2LWJpdCAxOTJrSHoKPiAKPiAKPiBEZXRhaWxlZCBk aXNjdXNzaW9uIGJlbG93Ogo+IAo+IEFUSS9BTUQgY29kZWNzIGRvIG5vdCBzdXBwb3J0IGFsbCB0 aGUgc3RhbmRhcmQgSERBIEhETUkvRFAgZnVuY3Rpb25zLiBJbgo+IHBhcnRpY3VsYXIsIHRoZXNl IGFyZSBtaXNzaW5nOgo+IC0gRUxEIHN1cHBvcnQKPiAtIHN0YW5kYXJkIGNoYW5uZWwgbWFwcGlu ZyBzdXBwb3J0Cj4gLSBzdGFuZGFyZCBpbmZvZnJhbWUgY29uZmlndXJhdGlvbiBzdXBwb3J0Cj4g Cj4gSW4gcGxhY2Ugb2YgdGhlbSwgY3VzdG9tIEhEQSBwaW4gdmVyYnMgYXJlIGluY2x1ZGVkLCB0 aGF0IGFsbG93Ogo+IC0gZ2V0dGluZyBzcGVha2VyIG1hc2sgZnJvbSBFRElECj4gLSBnZXR0aW5n IFNBRHMgZnJvbSBFRElECj4gLSBnZXR0aW5nIGNvbm5lY3Rpb24gdHlwZSBmcm9tIEVESUQgKEhE TUksIERpc3BsYXlQb3J0KQo+IC0gc2V0dGluZyBDQSBmb3IgaW5mb2ZyYW1lCj4gLSBzZXR0aW5n IGRvd24tbWl4IGluZm9ybWF0aW9uIGZvciBpbmZvZnJhbWUKPiAtIGNoYW5uZWwgcGFpciByZW1h cHBpbmcKPiAtIGluZGl2aWR1YWwgY2hhbm5lbCByZW1hcHBpbmcgKHJldmlzaW9uIElEIDMrKQo+ IAo+IFRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgdmVyYnMgaGFzIG5vdyBiZWVuIHJlbGVhc2Vk IGJ5IEFNRDoKPiBodHRwOi8vd3d3Lngub3JnL2RvY3MvQU1EL0FNRF9IREFfdmVyYnMucGRmCj4g Cj4gQWxzbywgY29udmVydGVkIG5vZGVzIGRvIG5vdCBoYXZlIGFsbCB0aGVpciBzdXBwb3J0ZWQg cmF0ZXMsIGZvcm1hdHMgYW5kCj4gY2hhbm5lbCBjb3VudHMgbGlzdGVkLgo+IAo+IEFkZCBzdXBw b3J0IGZvciB0aGUgQVRJL0FNRCBzcGVjaWZpYyB2ZXJicyBhbmQgdXNlIHRoZW0gaW5zdGVhZCBv ZiB0aGUKPiBnZW5lcmljIG1ldGhvZHMgb24gQVRJL0FNRCBjb2RlY3MuIFRoaXMgYWxsb3dzIG11 bHRpLWNoYW5uZWwgYXVkaW8gdG8KPiB3b3JrLgo+IElzIHRoZSB3YXkgaXQgaXMgZG9uZSBPSywg b3Igc2hvdWxkIHNvbWV0aGluZyBtb3JlIGdlbmVyaWMgYmUgcHV0IGludG8KPiBwbGFjZSAoY3Vz dG9tIGNhbGxiYWNrcyBhbmQvb3IgZmxhZ3MgaW4gc3RydWN0IGhkbWlfc3BlYyBtYXliZSk/Cj4g Cj4gT24gdGhlIG9sZGVyIEFUSS9BTUQgY29kZWNzIHRoYXQgZG8gbm90IHN1cHBvcnQgaW5kaXZp ZHVhbCByZW1hcHBpbmcsCj4gY2hhbm5lbCByZW1hcHBpbmcgaXMgcmVzdHJpY3RlZCB0byBwYWly IHJlbWFwcGluZy4gVGhpcyBkb2VzIG5vdCBhZmZlY3QKPiB0aGUgc3RhbmRhcmQgbXVsdGktY2hh bm5lbCBjb25maWd1cmF0aW9ucy4KPiAKPiBTaW5jZSB0aGVyZSBpcyBubyBFTEQgc3VwcG9ydCAo dW5sZXNzIG91dC1vZi1iYW5kIGNvbW11bmljYXRpb24gd2l0aCB0aGUKPiBncmFwaGljcyBkcml2 ZXIgaXMgYWRkZWQgc28gdGhhdCB0aGV5IGNhbiBwcm92aWRlIGl0IHRvIHVzIGRpcmVjdGx5KSwK PiBFTEQgaXMgY3VycmVudGx5IGVtdWxhdGVkIHdpdGggb25seSB0aGUgYmFzaWMgaW5mb3JtYXRp b24gcG9wdWxhdGVkCj4gKHNwZWFrZXIgbWFzaywgU0FEcywgY29ubmVjdGlvbiB0eXBlKS4gVGhl cmUgYXJlIHNvbWUgYml0cyBtaXNzaW5nIG9uCj4gdGhlIHJhZGVvbiBkcml2ZXIgc2lkZSAodGhl IFNBRHMgZXRjIGFyZSBub3QgcG9wdWxhdGVkKSBzbyBjdXJyZW50bHkKPiB0aGUgRUxEIGVtdWxh dGlvbiBvbmx5IHdvcmtzIG9uIGZnbHJ4LiBFTEQgZW11bGF0aW9uIGlzIG5vdCBuZWVkZWQgZm9y Cj4gbXVsdGktY2hhbm5lbCBwbGF5YmFjay4KPiAKPiBSYWZhxYIsIGFyZSB5b3UgaW50ZXJlc3Rl ZCBpbiBpbXBsZW1lbnRpbmcgdGhlIG1pc3NpbmcgYml0cyBpbiB0aGUgcmFkZW9uCj4gZHJpdmVy LCBhcyBJIHNlZSB5b3UgaGF2ZSBsb29rZWQgaW50byB0aGlzIGJlZm9yZT8KPiAKPiBUaGUgRUxE IGVtdWxhdGlvbiB3YXMgcXVpdGUgcXVpY2tseSBoYWNrZWQgdG9nZXRoZXIgYW5kIGhhc24ndCBi ZWVuCj4gY2xlYW5lZCB1cCB5ZXQsIHNpbmNlIEknbSBub3Qgc3VyZSBob3cgd2Ugd2FudCB0byB1 bHRpbWF0ZWx5IGhhbmRsZQo+IHRoaXMuIElzIEVMRCBlbXVsYXRpb24gdGhlIHdheSB0byBnbz8g SWYgc28sIHdoZXJlIGRvZXMgdGhlIGNvZGUgYmVsb25nCj4gKHRoZSBBVEkgc3BlY2lmaWMgY29k ZSBpcyBpbiBwYXRjaF9oZG1pLmMsIGJ1dCB0aGUgRUxEIHBhcnNpbmcvZGVmaW5lcwo+IGV0YyBh cmUgaW4gaGRhX2VsZC5jKT8KCkdvb2QgcXVlc3Rpb24uICBJIHN1cHBvc2UgRUxEIGVtdWxhdGlv biBpcyB0aGUgYmVzdCB3ZSBjYW4gZ2V0IGZvcgpub3cuICBJdCdzIGdlbmVyaWMgYW5kIG1ha2Ug dXNlci1zcGFjZSB0b29scyBjb21wYXRpYmxlLgoKT3ZlcmFsbCB0aGUgcGF0Y2ggbG9va3MgbGlr ZSBhIG5pY2UgZml4LiAgVGhhbmsgeW91IGZvciB5b3VyIHdvcmshCgpUaG91Z2gsIHRoZSBjaGFu Z2UgaXMgYSBiaXQgdG9vIGJpZyAoYW5kIHRvbyBsYXRlKSB0byBtZXJnZSB0byAzLjEyLApJJ20g YWZyYWlkLiAgU28gd2UgaGF2ZSBlbm91Z2ggdGltZSBhbmQgbGV0J3MgY29vayBpdCB1cCB3ZWxs IGluIGEKZ29vZCBmb3JtLgoKCnRoYW5rcywKClRha2FzaGkKCj4gCj4gQ29kZWMgMHgxMDAyYWEw MSBpcyBzd2l0Y2hlZCBiYWNrIHRvIHBhdGNoX2F0aWhkbWkgdG8gc3VwcG9ydCB0aGUKPiBBVEkv QU1EIHNwZWNpZmljIGZlYXR1cmVzLgo+IAo+IEhCUiBtb2RlIChuZWVkZWQgZm9yIERUUy1IRC9U cnVlSEQgcGFzc3Rocm91Z2gpIGlzIG5vdCB3b3JraW5nIHlldCwgYW5kCj4gdGhlIHJlbGVhc2Vk IGRvY3VtZW50YXRpb24gZG9lcyBub3QgbWVudGlvbiBpdC4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBB bnNzaSBIYW5udWxhIDxhbnNzaS5oYW5udWxhQGlraS5maT4KPiBUZXN0ZWQtYnk6IFBldGVyIEZy w7xoYmVyZ2VyIDxmcml0c2NoQHhibWMub3JnPgo+IENjOiBSYWZhxYIgTWnFgmVja2kgPHphamVj NUBnbWFpbC5jb20+Cj4gLS0tCj4gIHNvdW5kL3BjaS9oZGEvcGF0Y2hfaGRtaS5jIHwgNDE4ICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLQo+ICAxIGZpbGUgY2hh bmdlZCwgMzc0IGluc2VydGlvbnMoKyksIDQ0IGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQg YS9zb3VuZC9wY2kvaGRhL3BhdGNoX2hkbWkuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfaGRtaS5j Cj4gaW5kZXggM2Q4Y2QwNDQuLjc0MWQ3NWUgMTAwNjQ0Cj4gLS0tIGEvc291bmQvcGNpL2hkYS9w YXRjaF9oZG1pLmMKPiArKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2hkbWkuYwo+IEBAIC02LDYg KzYsNyBAQAo+ICAgKiAgQ29weXJpZ2h0IChjKSAyMDA2IEFUSSBUZWNobm9sb2dpZXMgSW5jLgo+ ICAgKiAgQ29weXJpZ2h0IChjKSAyMDA4IE5WSURJQSBDb3JwLiAgQWxsIHJpZ2h0cyByZXNlcnZl ZC4KPiAgICogIENvcHlyaWdodCAoYykgMjAwOCBXZWkgTmkgPHduaUBudmlkaWEuY29tPgo+ICsg KiAgQ29weXJpZ2h0IChjKSAyMDEzIEFuc3NpIEhhbm51bGEgPGFuc3NpLmhhbm51bGFAaWtpLmZp Pgo+ICAgKgo+ICAgKiAgQXV0aG9yczoKPiAgICoJCQlXdSBGZW5nZ3VhbmcgPHdmZ0BsaW51eC5p bnRlbC5jb20+Cj4gQEAgLTQ1LDYgKzQ2LDkgQEAgbW9kdWxlX3BhcmFtKHN0YXRpY19oZG1pX3Bj bSwgYm9vbCwgMDY0NCk7Cj4gIE1PRFVMRV9QQVJNX0RFU0Moc3RhdGljX2hkbWlfcGNtLCAiRG9u J3QgcmVzdHJpY3QgUENNIHBhcmFtZXRlcnMgcGVyIEVMRCBpbmZvIik7Cj4gIAo+ICAjZGVmaW5l IGlzX2hhc3dlbGwoY29kZWMpICAoKGNvZGVjKS0+dmVuZG9yX2lkID09IDB4ODA4NjI4MDcpCj4g KyNkZWZpbmUgaXNfYXRpaGRtaShjb2RlYykgKCgoY29kZWMpLT52ZW5kb3JfaWQgJiAweGZmZmYw MDAwKSA9PSAweDEwMDIwMDAwKQo+ICsjZGVmaW5lIGhhc19hbWRfZnVsbF9yZW1hcF9zdXBwb3J0 KGNvZGVjKSBcCj4gKwkoKGNvZGVjKS0+dmVuZG9yX2lkID09IDB4MTAwMjc5MWEgJiYgKChjb2Rl YyktPnJldmlzaW9uX2lkICYgMHhmZjAwKSA+PSAweDAzMDApCj4gIAo+ICBzdHJ1Y3QgaGRtaV9z cGVjX3Blcl9jdnQgewo+ICAJaGRhX25pZF90IGN2dF9uaWQ7Cj4gQEAgLTg5LDcgKzkzLDcgQEAg c3RydWN0IGhkbWlfc3BlYyB7Cj4gIAo+ICAJc3RydWN0IGhkbWlfZWxkIHRlbXBfZWxkOwo+ICAJ LyoKPiAtCSAqIE5vbi1nZW5lcmljIEFUSS9OVklESUEgc3BlY2lmaWMKPiArCSAqIE5vbi1nZW5l cmljIFZJQS9OVklESUEgc3BlY2lmaWMKPiAgCSAqLwo+ICAJc3RydWN0IGhkYV9tdWx0aV9vdXQg bXVsdGlvdXQ7Cj4gIAlzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gcGNtX3BsYXliYWNrOwo+IEBAIC01 NzMsNiArNTc3LDIwIEBAIHN0YXRpYyBpbnQgaGRtaV9jaGFubmVsX2FsbG9jYXRpb24oc3RydWN0 IGhkbWlfZWxkICplbGQsIGludCBjaGFubmVscykKPiAgCXJldHVybiBjYTsKPiAgfQo+ICAKPiAr I2lmZGVmIENPTkZJR19TTkRfREVCVUdfVkVSQk9TRQo+ICtzdGF0aWMgaW50IGF0aWhkbWlfZ2V0 X2NoYW5fc2xvdChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IHBpbl9uaWQsIGlu dCBhc3Bfc2xvdCk7Cj4gKwo+ICtzdGF0aWMgaW50IGhkbWlfZ2V0X2NoYW5fc2xvdChzdHJ1Y3Qg aGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IHBpbl9uaWQsIGludCBhc3Bfc2xvdCkKPiArewo+ ICsJaWYgKGlzX2F0aWhkbWkoY29kZWMpKQo+ICsJCXJldHVybiBhdGloZG1pX2dldF9jaGFuX3Ns b3QoY29kZWMsIHBpbl9uaWQsIGFzcF9zbG90KTsKPiArCj4gKwlyZXR1cm4gc25kX2hkYV9jb2Rl Y19yZWFkKGNvZGVjLCBwaW5fbmlkLCAwLAo+ICsJCQkJICBBQ19WRVJCX0dFVF9IRE1JX0NIQU5f U0xPVCwKPiArCQkJCSAgYXNwX3Nsb3QpOwo+ICt9Cj4gKyNlbmRpZgo+ICsKPiAgc3RhdGljIHZv aWQgaGRtaV9kZWJ1Z19jaGFubmVsX21hcHBpbmcoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCj4g IAkJCQkgICAgICAgaGRhX25pZF90IHBpbl9uaWQpCj4gIHsKPiBAQCAtNTgxLDE0ICs1OTksMjYg QEAgc3RhdGljIHZvaWQgaGRtaV9kZWJ1Z19jaGFubmVsX21hcHBpbmcoc3RydWN0IGhkYV9jb2Rl YyAqY29kZWMsCj4gIAlpbnQgc2xvdDsKPiAgCj4gIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7 Cj4gLQkJc2xvdCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgcGluX25pZCwgMCwKPiAtCQkJ CQkJQUNfVkVSQl9HRVRfSERNSV9DSEFOX1NMT1QsIGkpOwo+ICsJCXNsb3QgPSBoZG1pX2dldF9j aGFuX3Nsb3QoY29kZWMsIHBpbl9uaWQsIGkpOwo+ICAJCXByaW50ayhLRVJOX0RFQlVHICJIRE1J OiBBU1AgY2hhbm5lbCAlZCA9PiBzbG90ICVkXG4iLAo+ICAJCQkJCQlzbG90ID4+IDQsIHNsb3Qg JiAweGYpOwo+ICAJfQo+ICAjZW5kaWYKPiAgfQo+ICAKPiArc3RhdGljIGludCBhdGloZG1pX3Nl dF9jaGFuX3Nsb3Qoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBwaW5fbmlkLAo+ ICsJCQkJICBpbnQgY2hhbnNsb3Rfc2V0dXApOwo+ICsKPiArc3RhdGljIGludCBoZG1pX3NldF9j aGFuX3Nsb3Qoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBwaW5fbmlkLAo+ICsJ CQkgICAgICAgaW50IGNoYW5zbG90X3NldHVwKQo+ICt7Cj4gKwlpZiAoaXNfYXRpaGRtaShjb2Rl YykpCj4gKwkJcmV0dXJuIGF0aWhkbWlfc2V0X2NoYW5fc2xvdChjb2RlYywgcGluX25pZCwgY2hh bnNsb3Rfc2V0dXApOwo+ICsKPiArCXJldHVybiBzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBw aW5fbmlkLCAwLAo+ICsJCQkJICAgQUNfVkVSQl9TRVRfSERNSV9DSEFOX1NMT1QsCj4gKwkJCQkg ICBjaGFuc2xvdF9zZXR1cCk7Cj4gK30KPiAgCj4gIHN0YXRpYyB2b2lkIGhkbWlfc3RkX3NldHVw X2NoYW5uZWxfbWFwcGluZyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKPiAgCQkJCSAgICAgICBo ZGFfbmlkX3QgcGluX25pZCwKPiBAQCAtNjE3LDkgKzY0Nyw4IEBAIHN0YXRpYyB2b2lkIGhkbWlf c3RkX3NldHVwX2NoYW5uZWxfbWFwcGluZyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKPiAgCX0K PiAgCj4gIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Cj4gLQkJZXJyID0gc25kX2hkYV9jb2Rl Y193cml0ZShjb2RlYywgcGluX25pZCwgMCwKPiAtCQkJCQkgIEFDX1ZFUkJfU0VUX0hETUlfQ0hB Tl9TTE9ULAo+IC0JCQkJCSAgbm9uX3BjbSA/IG5vbl9wY21fbWFwcGluZ1tpXSA6IGhkbWlfY2hh bm5lbF9tYXBwaW5nW2NhXVtpXSk7Cj4gKwkJZXJyID0gaGRtaV9zZXRfY2hhbl9zbG90KGNvZGVj LCBwaW5fbmlkLAo+ICsJCQkJCSBub25fcGNtID8gbm9uX3BjbV9tYXBwaW5nW2ldIDogaGRtaV9j aGFubmVsX21hcHBpbmdbY2FdW2ldKTsKPiAgCQlpZiAoZXJyKSB7Cj4gIAkJCXNuZF9wcmludGRk KEtFUk5fTk9USUNFCj4gIAkJCQkgICAgIkhETUk6IGNoYW5uZWwgbWFwcGluZyBmYWlsZWRcbiIp Owo+IEBAIC03MjgsOCArNzU3LDcgQEAgc3RhdGljIGludCBoZG1pX21hbnVhbF9zZXR1cF9jaGFu bmVsX21hcHBpbmcoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCj4gIAkJZWxzZQo+ICAJCQl2YWwg PSAweGY7Cj4gIAkJdmFsIHw9IChpIDw8IDQpOwo+IC0JCWVyciA9IHNuZF9oZGFfY29kZWNfd3Jp dGUoY29kZWMsIHBpbl9uaWQsIDAsCj4gLQkJCQkJICBBQ19WRVJCX1NFVF9IRE1JX0NIQU5fU0xP VCwgdmFsKTsKPiArCQllcnIgPSBoZG1pX3NldF9jaGFuX3Nsb3QoY29kZWMsIHBpbl9uaWQsIHZh bCk7Cj4gIAkJaWYgKGVycikKPiAgCQkJcmV0dXJuIC1FSU5WQUw7Cj4gIAl9Cj4gQEAgLTg4Myw2 ICs5MTEsOCBAQCBzdGF0aWMgYm9vbCBoZG1pX2luZm9mcmFtZV91cHRvZGF0ZShzdHJ1Y3QgaGRh X2NvZGVjICpjb2RlYywgaGRhX25pZF90IHBpbl9uaWQsCj4gIAlyZXR1cm4gdHJ1ZTsKPiAgfQo+ ICAKPiArc3RhdGljIHZvaWQgYXRpaGRtaV9zZXRfY2Eoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMs IGhkYV9uaWRfdCBwaW5fbmlkLCBpbnQgY2EpOwo+ICsKPiAgc3RhdGljIHZvaWQgaGRtaV9zZXR1 cF9hdWRpb19pbmZvZnJhbWUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCj4gIAkJCQkgICAgICAg c3RydWN0IGhkbWlfc3BlY19wZXJfcGluICpwZXJfcGluLAo+ICAJCQkJICAgICAgIGJvb2wgbm9u X3BjbSkKPiBAQCAtOTEyLDYgKzk0MiwxNiBAQCBzdGF0aWMgdm9pZCBoZG1pX3NldHVwX2F1ZGlv X2luZm9mcmFtZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKPiAgCWlmIChjYSA8IDApCj4gIAkJ Y2EgPSAwOwo+ICAKPiArCWlmIChpc19hdGloZG1pKGNvZGVjKSkgewo+ICsJCS8qIGZvciBBVEkv QU1EIHdlIGp1c3Qgd2FudCB0byBtYXAgY2hhbm5lbHMgYW5kIHNldCBjYSAqLwo+ICsJCWhkbWlf c2V0dXBfY2hhbm5lbF9tYXBwaW5nKGNvZGVjLCBwaW5fbmlkLCBub25fcGNtLCBjYSwKPiArCQkJ CQkgICBjaGFubmVscywgcGVyX3Bpbi0+Y2htYXAsCj4gKwkJCQkJICAgcGVyX3Bpbi0+Y2htYXBf c2V0KTsKPiArCQlhdGloZG1pX3NldF9jYShjb2RlYywgcGluX25pZCwgY2EpOwo+ICsJCXBlcl9w aW4tPm5vbl9wY20gPSBub25fcGNtOwo+ICsJCXJldHVybjsKPiArCX0KPiArCj4gIAltZW1zZXQo JmFpLCAwLCBzaXplb2YoYWkpKTsKPiAgCWlmIChlbGQtPmluZm8uY29ubl90eXBlID09IDApIHsg LyogSERNSSAqLwo+ICAJCXN0cnVjdCBoZG1pX2F1ZGlvX2luZm9mcmFtZSAqaGRtaV9haSA9ICZh aS5oZG1pOwo+IEBAIC0xMjc0LDYgKzEzMTQsOSBAQCBzdGF0aWMgaW50IGhkbWlfcmVhZF9waW5f Y29ubihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaW50IHBpbl9pZHgpCj4gIAlyZXR1cm4gMDsK PiAgfQo+ICAKPiArc3RhdGljIGludCBhdGloZG1pX2dldF9lbGQoc3RydWN0IGhkYV9jb2RlYyAq Y29kZWMsIGhkYV9uaWRfdCBuaWQsCj4gKwkJCSAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50ICpl bGRfc2l6ZSk7Cj4gKwo+ICBzdGF0aWMgdm9pZCBoZG1pX3ByZXNlbnRfc2Vuc2Uoc3RydWN0IGhk bWlfc3BlY19wZXJfcGluICpwZXJfcGluLCBpbnQgcmVwb2xsKQo+ICB7Cj4gIAlzdHJ1Y3QgaGRh X2NvZGVjICpjb2RlYyA9IHBlcl9waW4tPmNvZGVjOwo+IEBAIC0xMzAzLDggKzEzNDYsMTIgQEAg c3RhdGljIHZvaWQgaGRtaV9wcmVzZW50X3NlbnNlKHN0cnVjdCBoZG1pX3NwZWNfcGVyX3BpbiAq cGVyX3BpbiwgaW50IHJlcG9sbCkKPiAgCQkiSERNSSBzdGF0dXM6IENvZGVjPSVkIFBpbj0lZCBQ cmVzZW5jZV9EZXRlY3Q9JWQgRUxEX1ZhbGlkPSVkXG4iLAo+ICAJCWNvZGVjLT5hZGRyLCBwaW5f bmlkLCBwaW5fZWxkLT5tb25pdG9yX3ByZXNlbnQsIGVsZC0+ZWxkX3ZhbGlkKTsKPiAgCj4gKwlp ZiAocGluX2VsZC0+bW9uaXRvcl9wcmVzZW50ICYmIGlzX2F0aWhkbWkoY29kZWMpKQo+ICsJCWVs ZC0+ZWxkX3ZhbGlkID0gKGF0aWhkbWlfZ2V0X2VsZChjb2RlYywgcGluX25pZCwgZWxkLT5lbGRf YnVmZmVyLCAmZWxkLT5lbGRfc2l6ZSkgPT0gMCk7Cj4gKwo+ICAJaWYgKGVsZC0+ZWxkX3ZhbGlk KSB7Cj4gLQkJaWYgKHNuZF9oZG1pX2dldF9lbGQoY29kZWMsIHBpbl9uaWQsIGVsZC0+ZWxkX2J1 ZmZlciwKPiArCQlpZiAoIWlzX2F0aWhkbWkoY29kZWMpICYmCj4gKwkJICAgIHNuZF9oZG1pX2dl dF9lbGQoY29kZWMsIHBpbl9uaWQsIGVsZC0+ZWxkX2J1ZmZlciwKPiAgCQkJCQkJICAgICAmZWxk LT5lbGRfc2l6ZSkgPCAwKQo+ICAJCQllbGQtPmVsZF92YWxpZCA9IGZhbHNlOwo+ICAJCWVsc2Ug ewo+IEBAIC0xNjAzLDYgKzE2NTAsOCBAQCBzdGF0aWMgaW50IGhkbWlfY2htYXBfY3RsX2luZm8o c3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCj4gIAlyZXR1cm4gMDsKPiAgfQo+ICAKPiAr c3RhdGljIGludCBhdGloZG1pX3N3YXBfZmNfbGZlKGludCBwb3MpOwo+ICsKPiAgc3RhdGljIGlu dCBoZG1pX2NobWFwX2N0bF90bHYoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBv cF9mbGFnLAo+ICAJCQkgICAgICB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IF9fdXNl ciAqdGx2KQo+ICB7Cj4gQEAgLTE2MTMsNiArMTY2MiwxMCBAQCBzdGF0aWMgaW50IGhkbWlfY2ht YXBfY3RsX3RsdihzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IG9wX2ZsYWcsCj4g IAkJRkwgfCBGUiB8IFJMIHwgUlIgfCBMRkUgfCBGQyB8IFJMQyB8IFJSQzsKPiAgCXVuc2lnbmVk IGludCBfX3VzZXIgKmRzdDsKPiAgCWludCBjaHMsIGNvdW50ID0gMDsKPiArCWludCB0bHZfdHlw ZSA9IFNORFJWX0NUTF9UTFZUX0NITUFQX1ZBUjsKPiArCj4gKwlpZiAoaXNfYXRpaGRtaShjb2Rl YykgJiYgIWhhc19hbWRfZnVsbF9yZW1hcF9zdXBwb3J0KGNvZGVjKSkKPiArCQl0bHZfdHlwZSA9 IFNORFJWX0NUTF9UTFZUX0NITUFQX1BBSVJFRDsKPiAgCj4gIAlpZiAoc2l6ZSA8IDgpCj4gIAkJ cmV0dXJuIC1FTk9NRU07Cj4gQEAgLTE2MjAsMTkgKzE2NzMsMzMgQEAgc3RhdGljIGludCBoZG1p X2NobWFwX2N0bF90bHYoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBvcF9mbGFn LAo+ICAJCXJldHVybiAtRUZBVUxUOwo+ICAJc2l6ZSAtPSA4Owo+ICAJZHN0ID0gdGx2ICsgMjsK PiAtCWZvciAoY2hzID0gMjsgY2hzIDw9IHNwZWMtPmNoYW5uZWxzX21heDsgY2hzKyspIHsKPiAr CWZvciAoY2hzID0gMjsgY2hzIDw9IHNwZWMtPmNoYW5uZWxzX21heDsKPiArCSAgICAgY2hzICs9 ICh0bHZfdHlwZSA9PSBTTkRSVl9DVExfVExWVF9DSE1BUF9QQUlSRUQpID8gMiA6IDEpIHsKPiAg CQlpbnQgaSwgYzsKPiAgCQlzdHJ1Y3QgY2VhX2NoYW5uZWxfc3BlYWtlcl9hbGxvY2F0aW9uICpj YXA7Cj4gIAkJY2FwID0gY2hhbm5lbF9hbGxvY2F0aW9uczsKPiAgCQlmb3IgKGkgPSAwOyBpIDwg QVJSQVlfU0laRShjaGFubmVsX2FsbG9jYXRpb25zKTsgaSsrLCBjYXArKykgewo+ICAJCQlpbnQg Y2hzX2J5dGVzID0gY2hzICogNDsKPiAtCQkJaWYgKGNhcC0+Y2hhbm5lbHMgIT0gY2hzKQo+ICsJ CQlpZiAodGx2X3R5cGUgPT0gU05EUlZfQ1RMX1RMVlRfQ0hNQVBfUEFJUkVEKSB7Cj4gKwkJCQlp bnQgY2hhbnBhaXJzID0gMDsKPiArCQkJCS8qIGluIHBhaXJlZCBtb2RlIHdlIG5lZWQgdG8gdGFr ZSBpbnRvIGFjY291bnQKPiArCQkJCSAqIHRoZSBvY2N1cGllZCBjaGFubmVsIHBhaXJzIGluc3Rl YWQgb2YganVzdCB0aGUKPiArCQkJCSAqIGNoYW5uZWwgY291bnQgKi8KPiArCQkJCWZvciAoYyA9 IDA7IGMgPCA4OyBjKyspIHsKPiArCQkJCQlpZiAoY2FwLT5zcGVha2Vyc1tjXSB8fCBjYXAtPnNw ZWFrZXJzW2MrMV0pCj4gKwkJCQkJCWNoYW5wYWlycysrOwo+ICsJCQkJfQo+ICsJCQkJaWYgKGNo YW5wYWlycyAqIDIgIT0gY2hzKQo+ICsJCQkJCWNvbnRpbnVlOwo+ICsKPiArCQkJfSBlbHNlIGlm IChjYXAtPmNoYW5uZWxzICE9IGNocykKPiAgCQkJCWNvbnRpbnVlOwo+ICsKPiAgCQkJaWYgKGNh cC0+c3BrX21hc2sgJiB+dmFsaWRfbWFzaykKPiAgCQkJCWNvbnRpbnVlOwo+ICAJCQlpZiAoc2l6 ZSA8IDgpCj4gIAkJCQlyZXR1cm4gLUVOT01FTTsKPiAtCQkJaWYgKHB1dF91c2VyKFNORFJWX0NU TF9UTFZUX0NITUFQX1ZBUiwgZHN0KSB8fAo+ICsJCQlpZiAocHV0X3VzZXIodGx2X3R5cGUsIGRz dCkgfHwKPiAgCQkJICAgIHB1dF91c2VyKGNoc19ieXRlcywgZHN0ICsgMSkpCj4gIAkJCQlyZXR1 cm4gLUVGQVVMVDsKPiAgCQkJZHN0ICs9IDI7Cj4gQEAgLTE2NDMsMTAgKzE3MTAsMjUgQEAgc3Rh dGljIGludCBoZG1pX2NobWFwX2N0bF90bHYoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2ws IGludCBvcF9mbGFnLAo+ICAJCQlzaXplIC09IGNoc19ieXRlczsKPiAgCQkJY291bnQgKz0gY2hz X2J5dGVzOwo+ICAJCQlmb3IgKGMgPSA3OyBjID49IDA7IGMtLSkgewo+IC0JCQkJaW50IHNwayA9 IGNhcC0+c3BlYWtlcnNbY107Cj4gLQkJCQlpZiAoIXNwaykKPiAtCQkJCQljb250aW51ZTsKPiAt CQkJCWlmIChwdXRfdXNlcihzcGtfdG9fY2htYXAoc3BrKSwgZHN0KSkKPiArCQkJCWludCBzcGs7 Cj4gKwkJCQlpbnQgY2hhbiA9IGM7Cj4gKwkJCQlpbnQgY2hwb3M7Cj4gKwo+ICsJCQkJaWYgKHRs dl90eXBlID09IFNORFJWX0NUTF9UTFZUX0NITUFQX1BBSVJFRCkKPiArCQkJCQljaGFuID0gNyAt IGF0aWhkbWlfc3dhcF9mY19sZmUoNyAtIGNoYW4pOwo+ICsKPiArCQkJCXNwayA9IGNhcC0+c3Bl YWtlcnNbY2hhbl07Cj4gKwkJCQlpZiAoc3BrKQo+ICsJCQkJCWNocG9zID0gc3BrX3RvX2NobWFw KHNwayk7Cj4gKwkJCQllbHNlIHsKPiArCQkJCQkvKiBXZSBuZWVkIHRvIHJlc2VydmUgYW4gTi9B IGNoYW5uZWwgaW4gcGFpcmVkIG1vZGUgKi8KPiArCQkJCQlpZiAodGx2X3R5cGUgPT0gU05EUlZf Q1RMX1RMVlRfQ0hNQVBfUEFJUkVEKQo+ICsJCQkJCQljaHBvcyA9IFNORFJWX0NITUFQX05BOwo+ ICsJCQkJCWVsc2UKPiArCQkJCQkJY29udGludWU7Cj4gKwkJCQl9Cj4gKwo+ICsJCQkJaWYgKHB1 dF91c2VyKGNocG9zLCBkc3QpKQo+ICAJCQkJCXJldHVybiAtRUZBVUxUOwo+ICAJCQkJZHN0Kys7 Cj4gIAkJCX0KPiBAQCAtMTY3Miw2ICsxNzU0LDE4IEBAIHN0YXRpYyBpbnQgaGRtaV9jaG1hcF9j dGxfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAo+ICAJcmV0dXJuIDA7Cj4gIH0K PiAgCj4gK3N0YXRpYyBpbnQgYXRpaGRtaV9wYWlyd2lzZV9jaG1hcF9jaGVja19vcmRlcihzdHJ1 Y3QgaGRhX2NvZGVjICpjb2RlYywgaW50IGNhLAo+ICsJCQkJCSAgICAgIGludCBjaHMsIHVuc2ln bmVkIGNoYXIgKm1hcCk7Cj4gKwo+ICtzdGF0aWMgaW50IGhkbWlfY2htYXBfY2hlY2tfb3JkZXIo c3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGludCBjYSwKPiArCQkJCSAgaW50IGNocywgdW5zaWdu ZWQgY2hhciAqbWFwKQo+ICt7Cj4gKwlpZiAoaXNfYXRpaGRtaShjb2RlYykgJiYgIWhhc19hbWRf ZnVsbF9yZW1hcF9zdXBwb3J0KGNvZGVjKSkKPiArCQlyZXR1cm4gYXRpaGRtaV9wYWlyd2lzZV9j aG1hcF9jaGVja19vcmRlcihjb2RlYywgY2EsIGNocywgbWFwKTsKPiArCj4gKwlyZXR1cm4gMDsg LyogYW55dGhpbmcgY2FuIGJlIHJlbWFwcGVkIGFzIG5lZWRlZCAqLwo+ICt9Cj4gKwo+ICBzdGF0 aWMgaW50IGhkbWlfY2htYXBfY3RsX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwK PiAgCQkJICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCj4gIHsKPiBA QCAtMTY4Myw3ICsxNzc3LDcgQEAgc3RhdGljIGludCBoZG1pX2NobWFwX2N0bF9wdXQoc3RydWN0 IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCj4gIAl1bnNpZ25lZCBpbnQgY3RsX2lkeDsKPiAgCXN0 cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtOwo+ICAJdW5zaWduZWQgY2hhciBjaG1h cFs4XTsKPiAtCWludCBpLCBjYSwgcHJlcGFyZWQgPSAwOwo+ICsJaW50IGksIGVyciwgY2EsIHBy ZXBhcmVkID0gMDsKPiAgCj4gIAljdGxfaWR4ID0gc25kX2N0bF9nZXRfaW9mZmlkeChrY29udHJv bCwgJnVjb250cm9sLT5pZCk7Cj4gIAlzdWJzdHJlYW0gPSBzbmRfcGNtX2NobWFwX3N1YnN0cmVh bShpbmZvLCBjdGxfaWR4KTsKPiBAQCAtMTcwNyw2ICsxODAxLDkgQEAgc3RhdGljIGludCBoZG1p X2NobWFwX2N0bF9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCj4gIAljYSA9IGhk bWlfbWFudWFsX2NoYW5uZWxfYWxsb2NhdGlvbihBUlJBWV9TSVpFKGNobWFwKSwgY2htYXApOwo+ ICAJaWYgKGNhIDwgMCkKPiAgCQlyZXR1cm4gLUVJTlZBTDsKPiArCWVyciA9IGhkbWlfY2htYXBf Y2hlY2tfb3JkZXIoY29kZWMsIGNhLCBBUlJBWV9TSVpFKGNobWFwKSwgY2htYXApOwo+ICsJaWYg KGVyciA8IDApCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gIAlwZXJfcGluLT5jaG1hcF9zZXQgPSB0 cnVlOwo+ICAJbWVtY3B5KHBlcl9waW4tPmNobWFwLCBjaG1hcCwgc2l6ZW9mKGNobWFwKSk7Cj4g IAlpZiAocHJlcGFyZWQpCj4gQEAgLTI1NTEsNDggKzI2NDgsMjgxIEBAIHN0YXRpYyBpbnQgcGF0 Y2hfbnZoZG1pXzhjaF83eChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKPiAgCj4gIC8qCj4gICAq IEFUSS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMKPiAtICoKPiAtICogRklYTUU6IHdlIG1heSBv bWl0IHRoZSB3aG9sZSB0aGlzIGFuZCB1c2UgdGhlIGdlbmVyaWMgY29kZSBvbmNlIGFmdGVyCj4g LSAqIGl0J3MgY29uZmlybWVkIHRvIHdvcmsuCj4gICAqLwo+ICAKPiAtI2RlZmluZSBBVElIRE1J X0NWVF9OSUQJCTB4MDIJLyogYXVkaW8gY29udmVydGVyICovCj4gLSNkZWZpbmUgQVRJSERNSV9Q SU5fTklECQkweDAzCS8qIEhETUkgb3V0cHV0IHBpbiAqLwo+ICsvKiBBVEkvQU1EIHNwZWNpZmlj IEhEQSBwaW4gdmVyYnMsIHNlZSB0aGUgQU1EIEhEQSBWZXJicyBzcGVjaWZpY2F0aW9uICovCj4g KyNkZWZpbmUgQVRJX1ZFUkJfU0VUX0NIQU5ORUxfQUxMT0NBVElPTgkweDc3MQo+ICsjZGVmaW5l IEFUSV9WRVJCX1NFVF9ET1dOTUlYX0lORk8JMHg3NzIKPiArI2RlZmluZSBBVElfVkVSQl9TRVRf QVVESU9fREVTQ1JJUFRPUgkweDc3Ngo+ICsjZGVmaW5lIEFUSV9WRVJCX1NFVF9NVUxUSUNIQU5O RUxfMDEJMHg3NzcKPiArI2RlZmluZSBBVElfVkVSQl9TRVRfTVVMVElDSEFOTkVMXzIzCTB4Nzc4 Cj4gKyNkZWZpbmUgQVRJX1ZFUkJfU0VUX01VTFRJQ0hBTk5FTF80NQkweDc3OQo+ICsjZGVmaW5l IEFUSV9WRVJCX1NFVF9NVUxUSUNIQU5ORUxfNjcJMHg3N2EKPiArI2RlZmluZSBBVElfVkVSQl9T RVRfTVVMVElDSEFOTkVMXzEJMHg3ODUKPiArI2RlZmluZSBBVElfVkVSQl9TRVRfTVVMVElDSEFO TkVMXzMJMHg3ODYKPiArI2RlZmluZSBBVElfVkVSQl9TRVRfTVVMVElDSEFOTkVMXzUJMHg3ODcK PiArI2RlZmluZSBBVElfVkVSQl9TRVRfTVVMVElDSEFOTkVMXzcJMHg3ODgKPiArI2RlZmluZSBB VElfVkVSQl9TRVRfTVVMVElDSEFOTkVMX01PREUJMHg3ODkKPiArI2RlZmluZSBBVElfVkVSQl9H RVRfU1BFQUtFUl9BTExPQ0FUSU9OCTB4ZjcwCj4gKyNkZWZpbmUgQVRJX1ZFUkJfR0VUX0NIQU5O RUxfQUxMT0NBVElPTgkweGY3MQo+ICsjZGVmaW5lIEFUSV9WRVJCX0dFVF9ET1dOTUlYX0lORk8J MHhmNzIKPiArI2RlZmluZSBBVElfVkVSQl9HRVRfQVVESU9fREVTQ1JJUFRPUgkweGY3Ngo+ICsj ZGVmaW5lIEFUSV9WRVJCX0dFVF9NVUxUSUNIQU5ORUxfMDEJMHhmNzcKPiArI2RlZmluZSBBVElf VkVSQl9HRVRfTVVMVElDSEFOTkVMXzIzCTB4Zjc4Cj4gKyNkZWZpbmUgQVRJX1ZFUkJfR0VUX01V TFRJQ0hBTk5FTF80NQkweGY3OQo+ICsjZGVmaW5lIEFUSV9WRVJCX0dFVF9NVUxUSUNIQU5ORUxf NjcJMHhmN2EKPiArI2RlZmluZSBBVElfVkVSQl9HRVRfTVVMVElDSEFOTkVMXzEJMHhmODUKPiAr I2RlZmluZSBBVElfVkVSQl9HRVRfTVVMVElDSEFOTkVMXzMJMHhmODYKPiArI2RlZmluZSBBVElf VkVSQl9HRVRfTVVMVElDSEFOTkVMXzUJMHhmODcKPiArI2RlZmluZSBBVElfVkVSQl9HRVRfTVVM VElDSEFOTkVMXzcJMHhmODgKPiArI2RlZmluZSBBVElfVkVSQl9HRVRfTVVMVElDSEFOTkVMX01P REUJMHhmODkKPiArCj4gKyNkZWZpbmUgQVRJX09VVF9FTkFCTEUgMHgxCj4gKwo+ICsvKiBUT0RP OiBjbGVhbnVwIHRoaXMgZnVuY3Rpb24gKi8KPiArc3RhdGljIGludCBhdGloZG1pX2dldF9lbGQo c3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsCj4gKwkJCSAgIHVuc2lnbmVk IGNoYXIgKmJ1ZiwgaW50ICplbGRfc2l6ZSkKPiArewo+ICsJaW50IHNwa2FsbG9jLCBhdGlfc2Fk Owo+ICsJaW50IHBvcywgaTsKPiArCj4gKwkvKiBBVEkvQU1EIGRvZXMgbm90IGhhdmUgRUxELCBl bXVsYXRlIGl0ICovCj4gKwo+ICsJc3BrYWxsb2MgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMs IG5pZCwgMCwgQVRJX1ZFUkJfR0VUX1NQRUFLRVJfQUxMT0NBVElPTiwgMCk7Cj4gKwo+ICsJaWYg KCFzcGthbGxvYykKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwltZW1zZXQoYnVmLCAwLCA4 NCk7Cj4gKwo+ICsJLyogc3BlYWtlciBhbGxvY2F0aW9uIGZyb20gRURJRCAqLwo+ICsJYnVmWzdd ID0gc3BrYWxsb2MgJiAweDAwMDA3ZjsKPiArCj4gKwkvKiBpcyBEaXNwbGF5UG9ydD8gKi8KPiAr CWlmIChzcGthbGxvYyAmIDB4MDAwMjAwKQo+ICsJCWJ1Zls1XSB8PSAweDA0Owo+ICsKPiArCXBv cyA9IDIwOwo+ICsJZm9yIChpID0gMTsgaSA8PSAxNDsgaSsrKSB7Cj4gKwkJaWYgKGkgPT0gMTMp IC8qIG5vdCBoYW5kbGVkIGJ5IEFUSS9BTUQgKi8KPiArCQkJY29udGludWU7Cj4gKwo+ICsJCXNu ZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwgQVRJX1ZFUkJfU0VUX0FVRElPX0RFU0NS SVBUT1IsIGkgPDwgMyk7Cj4gKwkJYXRpX3NhZCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywg bmlkLCAwLCBBVElfVkVSQl9HRVRfQVVESU9fREVTQ1JJUFRPUiwgMCk7Cj4gKwo+ICsJCWlmIChh dGlfc2FkICYgMHhmZjAwKSB7Cj4gKwkJCW1lbWNweShidWYgKyBwb3MsICZhdGlfc2FkLCAzKTsK PiArCQkJcG9zICs9IDM7Cj4gKwkJfQo+ICsKPiArCQlpZiAoaSA9PSAxICYmIGF0aV9zYWQgJiAw eGZmMDAwMDAwICYmIChhdGlfc2FkICYgMHhmZjAwKSAhPSAoYXRpX3NhZCAmIDB4ZmYwMDAwMDAp ID4+IDE2KSB7Cj4gKwkJCS8qIGZvciBQQ00gdGhlcmUgaXMgYSBzZXBhcmF0ZSBzdGVyZW8gcmF0 ZSBtYXNrICovCj4gKwkJCW1lbWNweShidWYgKyBwb3MsICZhdGlfc2FkLCAzKTsKPiArCQkJLyog bWF4IGNoYW5uZWxzIHRvIDIgKi8KPiArCQkJYnVmW3BvcyswXSA9IChidWZbcG9zKzBdICYgfjB4 NykgfCAweDE7Cj4gKwkJCS8qIHJhdGVzIGZyb20gZXh0cmEgYnl0ZSAqLwo+ICsJCQlidWZbcG9z KzFdID0gKGF0aV9zYWQgJiAweGZmMDAwMDAwKSA+PiAyNDsKPiArCQkJcG9zICs9IDM7Cj4gKwkJ fQo+ICsJfQo+ICsKPiArCWlmIChwb3MgPT0gMjApCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ ICsJLyogdmVyc2lvbiAqLwo+ICsJYnVmWzBdID0gMHgxMDsKPiArCj4gKwkvKiBCYXNlbGluZSBs ZW5ndGggKi8KPiArCWJ1ZlsyXSA9IHBvcyAtIDQ7Cj4gKwo+ICsJLyogU0FEIGNvdW50ICovCj4g KwlidWZbNV0gfD0gKChwb3MgLSAyMCkgLyAzKSA8PCA0Owo+ICsKPiArCSplbGRfc2l6ZSA9IHBv czsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgYXRpaGRtaV9zZXRf Y2Eoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBwaW5fbmlkLCBpbnQgY2EpCj4g K3sKPiArCXByaW50aygiQVRJOiBzZXR0aW5nIGNhICVkXG4iLCBjYSk7Cj4gKwlzbmRfaGRhX2Nv ZGVjX3dyaXRlKGNvZGVjLCBwaW5fbmlkLCAwLCBBVElfVkVSQl9TRVRfQ0hBTk5FTF9BTExPQ0FU SU9OLCBjYSk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgYXRpaGRtaV9zd2FwX2ZjX2xmZShpbnQg cG9zKQo+ICt7Cj4gKwkvKgo+ICsJICogT2xkZXIgQVRJL0FNRCB3aXRob3V0IGNoYW5uZWwtd2lz ZSBtYXBwaW5nCj4gKwkgKiBoYXZlIGF1dG9tYXRpYyBGQy9MRkUgc3dhcCBidWlsdC1pbi4KPiAr CSAqLwo+ICsKPiArCXN3aXRjaCAocG9zKSB7Cj4gKwkJLyogc2VlIGNoYW5uZWxfYWxsb2NhdGlv bnNbXS5zcGVha2Vyc1tdICovCj4gKwkJY2FzZSAyOiByZXR1cm4gMzsKPiArCQljYXNlIDM6IHJl dHVybiAyOwo+ICsJCWRlZmF1bHQ6IGJyZWFrOwo+ICsJfQo+ICsKPiArCXJldHVybiBwb3M7Cj4g K30KPiArCj4gK3N0YXRpYyBpbnQgYXRpaGRtaV9wYWlyd2lzZV9jaG1hcF9jaGVja19vcmRlcihz dHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaW50IGNhLAo+ICsJCQkJCSAgICAgIGludCBjaHMsIHVu c2lnbmVkIGNoYXIgKm1hcCkKPiArewo+ICsJc3RydWN0IGNlYV9jaGFubmVsX3NwZWFrZXJfYWxs b2NhdGlvbiAqY2FwOwo+ICsJaW50IGksIGo7Cj4gKwo+ICsJLyogY2hlY2sgdGhhdCBvbmx5IGNo YW5uZWwgcGFpcnMgbmVlZCB0byBiZSByZW1hcHBlZCBvbiBvbGQgQVRJL0FNRCAqLwo+ICsKPiAr CWNhcCA9ICZjaGFubmVsX2FsbG9jYXRpb25zW2dldF9jaGFubmVsX2FsbG9jYXRpb25fb3JkZXIo Y2EpXTsKPiArCWZvciAoaSA9IDA7IGkgPCBjaHM7ICsraSkgewo+ICsJCWludCBtYXNrID0gdG9f c3BrX21hc2sobWFwW2ldKTsKPiArCQlib29sIG9rID0gZmFsc2U7Cj4gKwkJYm9vbCBjb21wYW5p b25fb2sgPSBmYWxzZTsKPiArCj4gKwkJaWYgKCFtYXNrKQo+ICsJCQljb250aW51ZTsKPiArCj4g KwkJZm9yIChqID0gMCArIGkgJSAyOyBqIDwgODsgaiArPSAyKSB7Cj4gKwkJCWludCBjaGFuX2lk eCA9IDcgLSBhdGloZG1pX3N3YXBfZmNfbGZlKGopOwo+ICsJCQlpZiAoY2FwLT5zcGVha2Vyc1tj aGFuX2lkeF0gPT0gbWFzaykgewo+ICsJCQkJLyogY2hhbm5lbCBpcyBpbiBhIHN1cHBvcnRlZCBw b3NpdGlvbiAqLwo+ICsJCQkJb2sgPSB0cnVlOwo+ICsKPiArCQkJCWlmIChpICUgMiA9PSAwICYm IGkgKyAxIDwgY2hzKSB7Cj4gKwkJCQkJLyogZXZlbiBjaGFubmVsLCBjaGVjayB0aGUgb2RkIGNv bXBhbmlvbiAqLwo+ICsJCQkJCWludCBjb21wX2NoYW5faWR4ID0gNyAtIGF0aWhkbWlfc3dhcF9m Y19sZmUoaiArIDEpOwo+ICsJCQkJCWludCBjb21wX21hc2tfcmVxID0gdG9fc3BrX21hc2sobWFw W2krMV0pOwo+ICsJCQkJCWludCBjb21wX21hc2tfYWN0ID0gY2FwLT5zcGVha2Vyc1tjb21wX2No YW5faWR4XTsKPiArCj4gKwkJCQkJaWYgKGNvbXBfbWFza19yZXEgPT0gY29tcF9tYXNrX2FjdCkK PiArCQkJCQkJY29tcGFuaW9uX29rID0gdHJ1ZTsKPiArCQkJCQllbHNlCj4gKwkJCQkJCXJldHVy biAtRUlOVkFMOwo+ICsJCQkJfQo+ICsJCQkJYnJlYWs7Cj4gKwkJCX0KPiArCQl9Cj4gKwo+ICsJ CWlmICghb2spCj4gKwkJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCQlpZiAoY29tcGFuaW9uX29r KQo+ICsJCQlpKys7IC8qIGNvbXBhbmlvbiBjaGFubmVsIGFscmVhZHkgY2hlY2tlZCAqLwo+ICsJ fQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGF0aWhkbWlfc2V0X2No YW5fc2xvdChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IHBpbl9uaWQsCj4gKwkJ CQkgaW50IGNoYW5zbG90X3NldHVwKQo+ICt7Cj4gKwlpbnQgaGRtaV9zbG90ID0gY2hhbnNsb3Rf c2V0dXAgJiAweGY7Cj4gKwlpbnQgc3RyZWFtX2NoYW5uZWwgPSBjaGFuc2xvdF9zZXR1cCA+PiA0 Owo+ICsJaW50IHZlcmI7Cj4gKwlpbnQgYXRpX2NoYW5uZWxfc2V0dXAgPSAwOwo+ICsKPiArCWlm ICghaGFzX2FtZF9mdWxsX3JlbWFwX3N1cHBvcnQoY29kZWMpKSB7Cj4gKwkJaGRtaV9zbG90ID0g YXRpaGRtaV9zd2FwX2ZjX2xmZShoZG1pX3Nsb3QpOwo+ICsKPiArCQkvKiBJbiBjYXNlIHRoaXMg aXMgYW4gb2RkIHNsb3QgYnV0IHdpdGhvdXQgc3RyZWFtIGNoYW5uZWwsIGRvIG5vdAo+ICsJCSAq IGRpc2FibGUgdGhlIHNsb3Qgc2luY2UgdGhlIGNvcnJlc3BvbmRpbmcgZXZlbiBzbG90IGNvdWxk IGhhdmUgYQo+ICsJCSAqIGNoYW5uZWwuIEluIGNhc2UgbmVpdGhlciBoYXZlIGEgY2hhbm5lbCwg dGhlIHNsb3QgcGFpciB3aWxsIGJlCj4gKwkJICogZGlzYWJsZWQgd2hlbiB0aGlzIGZ1bmN0aW9u IGlzIGNhbGxlZCBmb3IgdGhlIGV2ZW4gc2xvdC4gKi8KPiArCQlpZiAoaGRtaV9zbG90ICUgMiAh PSAwICYmIHN0cmVhbV9jaGFubmVsID09IDB4ZikKPiArCQkJcmV0dXJuIDA7Cj4gKwo+ICsJCWhk bWlfc2xvdCAtPSBoZG1pX3Nsb3QgJSAyOwo+ICsKPiArCQlpZiAoc3RyZWFtX2NoYW5uZWwgIT0g MHhmKQo+ICsJCQlzdHJlYW1fY2hhbm5lbCAtPSBzdHJlYW1fY2hhbm5lbCAlIDI7Cj4gKwl9Cj4g Kwo+ICsJdmVyYiA9IEFUSV9WRVJCX1NFVF9NVUxUSUNIQU5ORUxfMDEgKyBoZG1pX3Nsb3QvMiAr IChoZG1pX3Nsb3QgJSAyKSAqIDB4MDBlOwo+ICsKPiArCS8qIGF0aV9jaGFubmVsX3NldHVwIGZv cm1hdDogWzcuLjRdID0gc3RyZWFtX2NoYW5uZWxfaWQsIFsxXSA9IG11dGUsIFswXSA9IGVuYWJs ZSAqLwo+ICsKPiArCWlmIChzdHJlYW1fY2hhbm5lbCAhPSAweGYpCj4gKwkJYXRpX2NoYW5uZWxf c2V0dXAgPSAoc3RyZWFtX2NoYW5uZWwgPDwgNCkgfCBBVElfT1VUX0VOQUJMRTsKPiArCj4gKwly ZXR1cm4gc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgcGluX25pZCwgMCwgdmVyYiwgYXRpX2No YW5uZWxfc2V0dXApOwo+ICt9Cj4gKwo+ICsjaWZkZWYgQ09ORklHX1NORF9ERUJVR19WRVJCT1NF Cj4gK3N0YXRpYyBpbnQgYXRpaGRtaV9nZXRfY2hhbl9zbG90KHN0cnVjdCBoZGFfY29kZWMgKmNv ZGVjLCBoZGFfbmlkX3QgcGluX25pZCwgaW50IGFzcF9zbG90KQo+ICt7Cj4gKwlib29sIHdhc19v ZGQgPSBmYWxzZTsKPiArCWludCBhdGlfYXNwX3Nsb3QgPSBhc3Bfc2xvdDsKPiArCWludCB2ZXJi Owo+ICsJaW50IGF0aV9jaGFubmVsX3NldHVwOwo+ICsKPiArCS8qIGVtdWxhdGUgQUNfVkVSQl9H RVRfSERNSV9DSEFOX1NMT1QgKi8KPiArCj4gKwlpZiAoIWhhc19hbWRfZnVsbF9yZW1hcF9zdXBw b3J0KGNvZGVjKSkgewo+ICsJCWF0aV9hc3Bfc2xvdCA9IGF0aWhkbWlfc3dhcF9mY19sZmUoYXNw X3Nsb3QpOwo+ICsJCWlmIChhdGlfYXNwX3Nsb3QgJSAyICE9IDApIHsKPiArCQkJYXRpX2FzcF9z bG90IC09IDE7Cj4gKwkJCXdhc19vZGQgPSB0cnVlOwo+ICsJCX0KPiArCX0KPiAgCj4gLXN0YXRp YyBpbnQgYXRpaGRtaV9wbGF5YmFja19wY21fcHJlcGFyZShzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0g KmhpbmZvLAo+IC0JCQkJCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAo+IC0JCQkJCXVuc2lnbmVk IGludCBzdHJlYW1fdGFnLAo+IC0JCQkJCXVuc2lnbmVkIGludCBmb3JtYXQsCj4gLQkJCQkJc3Ry dWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCj4gKwl2ZXJiID0gQVRJX1ZFUkJfR0VU X01VTFRJQ0hBTk5FTF8wMSArIGF0aV9hc3Bfc2xvdC8yICsgKGF0aV9hc3Bfc2xvdCAlIDIpICog MHgwMGU7Cj4gKwo+ICsJYXRpX2NoYW5uZWxfc2V0dXAgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29k ZWMsIHBpbl9uaWQsIDAsIHZlcmIsIDApOwo+ICsKPiArCWlmICghKGF0aV9jaGFubmVsX3NldHVw ICYgQVRJX09VVF9FTkFCTEUpKQo+ICsJCXJldHVybiAoMHhmIDw8IDQpIHwgYXNwX3Nsb3Q7Cj4g Kwo+ICsJcmV0dXJuICgoYXRpX2NoYW5uZWxfc2V0dXAgJiAweGYwKSArICgoISF3YXNfb2RkKSA8 PCA0KSkgfCBhc3Bfc2xvdDsKPiArfQo+ICsjZW5kaWYKPiArCj4gK3N0YXRpYyBpbnQgYXRpaGRt aV9pbml0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQo+ICB7Cj4gIAlzdHJ1Y3QgaGRtaV9zcGVj ICpzcGVjID0gY29kZWMtPnNwZWM7Cj4gLQlzdHJ1Y3QgaGRtaV9zcGVjX3Blcl9jdnQgKnBlcl9j dnQgPSBnZXRfY3Z0KHNwZWMsIDApOwo+IC0JaW50IGNoYW5zID0gc3Vic3RyZWFtLT5ydW50aW1l LT5jaGFubmVsczsKPiAtCWludCBpLCBlcnI7Cj4gKwlpbnQgcGluX2lkeCwgZXJyOwo+ICAKPiAt CWVyciA9IHNpbXBsZV9wbGF5YmFja19wY21fcHJlcGFyZShoaW5mbywgY29kZWMsIHN0cmVhbV90 YWcsIGZvcm1hdCwKPiAtCQkJCQkgIHN1YnN0cmVhbSk7Cj4gLQlpZiAoZXJyIDwgMCkKPiArCWVy ciA9IGdlbmVyaWNfaGRtaV9pbml0KGNvZGVjKTsKPiArCj4gKwlpZiAoZXJyKQo+ICAJCXJldHVy biBlcnI7Cj4gLQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBwZXJfY3Z0LT5jdnRfbmlkLCAw LAo+IC0JCQkgICAgQUNfVkVSQl9TRVRfQ1ZUX0NIQU5fQ09VTlQsIGNoYW5zIC0gMSk7Cj4gLQkv KiBGSVhNRTogWFhYICovCj4gLQlmb3IgKGkgPSAwOyBpIDwgY2hhbnM7IGkrKykgewo+IC0JCXNu ZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIHBlcl9jdnQtPmN2dF9uaWQsIDAsCj4gLQkJCQkgICAg QUNfVkVSQl9TRVRfSERNSV9DSEFOX1NMT1QsCj4gLQkJCQkgICAgKGkgPDwgNCkgfCBpKTsKPiAr Cj4gKwlmb3IgKHBpbl9pZHggPSAwOyBwaW5faWR4IDwgc3BlYy0+bnVtX3BpbnM7IHBpbl9pZHgr Kykgewo+ICsJCXN0cnVjdCBoZG1pX3NwZWNfcGVyX3BpbiAqcGVyX3BpbiA9IGdldF9waW4oc3Bl YywgcGluX2lkeCk7Cj4gKwo+ICsJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIHBlcl9waW4t PnBpbl9uaWQsIDAsIEFUSV9WRVJCX1NFVF9ET1dOTUlYX0lORk8sIDApOwo+ICsKPiArCQkvKiBl bmFibGUgY2hhbm5lbC13aXNlIHJlbWFwIG1vZGUgaWYgc3VwcG9ydGVkICovCj4gKwkJaWYgKGhh c19hbWRfZnVsbF9yZW1hcF9zdXBwb3J0KGNvZGVjKSkKPiArCQkJc25kX2hkYV9jb2RlY193cml0 ZShjb2RlYywgcGVyX3Bpbi0+cGluX25pZCwgMCwgQVRJX1ZFUkJfU0VUX01VTFRJQ0hBTk5FTF9N T0RFLCAxKTsKPiAgCX0KPiArCj4gIAlyZXR1cm4gMDsKPiAgfQo+ICAKPiAgc3RhdGljIGludCBw YXRjaF9hdGloZG1pKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQo+ICB7Cj4gIAlzdHJ1Y3QgaGRt aV9zcGVjICpzcGVjOwo+IC0JaW50IGVyciA9IHBhdGNoX3NpbXBsZV9oZG1pKGNvZGVjLCBBVElI RE1JX0NWVF9OSUQsIEFUSUhETUlfUElOX05JRCk7Cj4gLQlpZiAoZXJyIDwgMCkKPiArCXN0cnVj dCBoZG1pX3NwZWNfcGVyX2N2dCAqcGVyX2N2dDsKPiArCWludCBlcnIsIGN2dF9pZHg7Cj4gKwo+ ICsJZXJyID0gcGF0Y2hfZ2VuZXJpY19oZG1pKGNvZGVjKTsKPiArCj4gKwlpZiAoZXJyKQo+ICAJ CXJldHVybiBlcnI7Cj4gKwo+ICsJY29kZWMtPnBhdGNoX29wcy5pbml0ID0gYXRpaGRtaV9pbml0 Owo+ICsKPiArCS8qIEFUSS9BTUQgY29udmVydGVycyBkbyBub3QgYWR2ZXJ0aXNlIGFsbCBvZiB0 aGVpciBjYXBhYmlsaXRpZXMgKi8KPiAgCXNwZWMgPSBjb2RlYy0+c3BlYzsKPiAtCXNwZWMtPnBj bV9wbGF5YmFjay5vcHMucHJlcGFyZSA9IGF0aWhkbWlfcGxheWJhY2tfcGNtX3ByZXBhcmU7Cj4g Kwlmb3IgKGN2dF9pZHggPSAwOyBjdnRfaWR4IDwgc3BlYy0+bnVtX2N2dHM7IGN2dF9pZHgrKykg ewo+ICsJCXBlcl9jdnQgPSBnZXRfY3Z0KHNwZWMsIGN2dF9pZHgpOwo+ICsJCXBlcl9jdnQtPmNo YW5uZWxzX21heCA9IG1heChwZXJfY3Z0LT5jaGFubmVsc19tYXgsIDh1KTsKPiArCQlwZXJfY3Z0 LT5yYXRlcyB8PSBTVVBQT1JURURfUkFURVM7Cj4gKwkJcGVyX2N2dC0+Zm9ybWF0cyB8PSBTVVBQ T1JURURfRk9STUFUUzsKPiArCQlwZXJfY3Z0LT5tYXhicHMgPSBtYXgocGVyX2N2dC0+bWF4YnBz LCAyNHUpOwo+ICsJfQo+ICsKPiAgCXJldHVybiAwOwo+ICB9Cj4gIAo+IEBAIC0yNjEyLDcgKzI5 NDIsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9jb2RlY19wcmVzZXQgc25kX2hkYV9wcmVz ZXRfaGRtaVtdID0gewo+ICB7IC5pZCA9IDB4MTAwMjc5M2MsIC5uYW1lID0gIlJTNjAwIEhETUki LAkucGF0Y2ggPSBwYXRjaF9hdGloZG1pIH0sCj4gIHsgLmlkID0gMHgxMDAyNzkxOSwgLm5hbWUg PSAiUlM2MDAgSERNSSIsCS5wYXRjaCA9IHBhdGNoX2F0aWhkbWkgfSwKPiAgeyAuaWQgPSAweDEw MDI3OTFhLCAubmFtZSA9ICJSUzY5MC83ODAgSERNSSIsCS5wYXRjaCA9IHBhdGNoX2F0aWhkbWkg fSwKPiAteyAuaWQgPSAweDEwMDJhYTAxLCAubmFtZSA9ICJSNnh4IEhETUkiLAkucGF0Y2ggPSBw YXRjaF9nZW5lcmljX2hkbWkgfSwKPiAreyAuaWQgPSAweDEwMDJhYTAxLCAubmFtZSA9ICJSNnh4 IEhETUkiLAkucGF0Y2ggPSBwYXRjaF9hdGloZG1pIH0sCj4gIHsgLmlkID0gMHgxMDk1MTM5MCwg Lm5hbWUgPSAiU2lJMTM5MCBIRE1JIiwJLnBhdGNoID0gcGF0Y2hfZ2VuZXJpY19oZG1pIH0sCj4g IHsgLmlkID0gMHgxMDk1MTM5MiwgLm5hbWUgPSAiU2lJMTM5MiBIRE1JIiwJLnBhdGNoID0gcGF0 Y2hfZ2VuZXJpY19oZG1pIH0sCj4gIHsgLmlkID0gMHgxN2U4MDA0NywgLm5hbWUgPSAiQ2hyb250 ZWwgSERNSSIsCS5wYXRjaCA9IHBhdGNoX2dlbmVyaWNfaGRtaSB9LAo+IC0tIAo+IDEuOC4xLjUK PiAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWxzYS1k ZXZlbCBtYWlsaW5nIGxpc3QKQWxzYS1kZXZlbEBhbHNhLXByb2plY3Qub3JnCmh0dHA6Ly9tYWls bWFuLmFsc2EtcHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9hbHNhLWRldmVsCg==