From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jassi Brar Subject: Re: [PATCH v5 4/4] ASoC: SAMSUNG: Add I2S0 internal dma driver Date: Mon, 18 Jul 2011 17:19:14 +0530 Message-ID: References: <1310520321-11106-1-git-send-email-sbkim73@samsung.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-ew0-f51.google.com (mail-ew0-f51.google.com [209.85.215.51]) by alsa0.perex.cz (Postfix) with ESMTP id D62592438B for ; Mon, 18 Jul 2011 13:49:14 +0200 (CEST) Received: by ewy6 with SMTP id 6so1363648ewy.38 for ; Mon, 18 Jul 2011 04:49:14 -0700 (PDT) In-Reply-To: <1310520321-11106-1-git-send-email-sbkim73@samsung.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: alsa-devel-bounces@alsa-project.org Errors-To: alsa-devel-bounces@alsa-project.org To: Sangbeom Kim Cc: alsa-devel@alsa-project.org, broonie@opensource.wolfsonmicro.com, lrg@slimlogic.co.uk List-Id: alsa-devel@alsa-project.org T24gV2VkLCBKdWwgMTMsIDIwMTEgYXQgNjo1NSBBTSwgU2FuZ2Jlb20gS2ltIDxzYmtpbTczQHNh bXN1bmcuY29tPiB3cm90ZToKPiBJMlMgaW4gRXh5bm9zNCBhbmQgUzVQQzExMChTNVBWMjEwKSBo YXMgYSBpbnRlcm5hbCBkbWEuCj4gSXQgY2FuIGJlIHVzZWQgbG93IHBvd2VyIGF1ZGlvIG1vZGUg YW5kIDJuZCBjaGFubmVsIHRyYW5zZmVyLgo+IFRoaXMgcGF0Y2ggY2FuIHN1cHBvcnQgaWRtYS4K Pgo+IFNpZ25lZC1vZmYtYnk6IFNhbmdiZW9tIEtpbSA8c2JraW03M0BzYW1zdW5nLmNvbT4KPiAt LS0KPiBWMjogY2hhbmdlIGlkbWFfbmV3IGJ5IG5ldyBwY21fbmV3IGFwaQo+IMKgIMKgYWRkIGhh bmRsaW5nIGRpZmZlcmVudCBpZG1hIGFkZHJlc3MKPiDCoCDCoGFzIGphc3NpIGNvbW1lbnRzLCBN b2RpZnkgdGhlIGlkbWEgZHJpdmVyCj4KPiBWMzogbWVyZ2UgaWRtYV9yZWdfaW50IGFuZCBpZG1h X2FkZHJfaW5pdAo+Cj4gVjQ6IG1vdmUgaWRtYSBzZXR0aW5nIGluIGkycy5jIHRvIGlkbWFfaHdf cGFyYW1zIGluIGlkbWEuYwo+IMKgIMKgbW92ZSBpZG1hX3JlZ19hZGRyX2luaXQgY2FsbGluZwo+ IMKgIMKgbW9kaWZ5IGlkbWEgYWRkcmVzcyBoYW5kbGluZyBlcnJvcgo+IMKgIMKgbW9kaWZ5IG1v ZHVsZSBpbmZvcm1hdGlvbgo+IMKgIMKgZGVsZXRlIHVzZWxlc3MgZGV2X2RiZwo+Cj4gVjU6IGRl bGV0ZSByZWR1bmRhbnQgZXJyb3IgcHJpbnQgYW5kIGNoZWNrIHJvdXRpbmUKPiDCoCDCoG1vZGlm eSBpcnEgaGFuZGxlciBhcyBqYXNzaSBjb21tZW50Cj4gwqAgwqBmaXggdGhlIGluZGVudCBlcnJv cgo+Cj4gwqBzb3VuZC9zb2Mvc2Ftc3VuZy9NYWtlZmlsZSB8IMKgIMKgMiArCj4gwqBzb3VuZC9z b2Mvc2Ftc3VuZy9pZG1hLmMgwqAgfCDCoDQ1MwoKQWNrZWQtYnk6IEphc3NpIEJyYXIgPGphc3Np c2luZ2hicmFyQGdtYWlsLmNvbT4KClRoYW5rcy4KCgorKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKwo+IMKgc291bmQvc29jL3NhbXN1bmcvaWRtYS5oIMKgIHwgwqAg MjYgKysrCj4gwqAzIGZpbGVzIGNoYW5nZWQsIDQ4MSBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9u cygtKQo+IMKgY3JlYXRlIG1vZGUgMTAwNjQ0IHNvdW5kL3NvYy9zYW1zdW5nL2lkbWEuYwo+IMKg Y3JlYXRlIG1vZGUgMTAwNjQ0IHNvdW5kL3NvYy9zYW1zdW5nL2lkbWEuaAo+Cj4gZGlmZiAtLWdp dCBhL3NvdW5kL3NvYy9zYW1zdW5nL01ha2VmaWxlIGIvc291bmQvc29jL3NhbXN1bmcvTWFrZWZp bGUKPiBpbmRleCAwMGJhNTU3Li40MWJlY2RkIDEwMDY0NAo+IC0tLSBhL3NvdW5kL3NvYy9zYW1z dW5nL01ha2VmaWxlCj4gKysrIGIvc291bmQvc29jL3NhbXN1bmcvTWFrZWZpbGUKPiBAQCAtMSw1 ICsxLDYgQEAKPiDCoCMgUzNjMjRYWCBQbGF0Zm9ybSBTdXBwb3J0Cj4gwqBzbmQtc29jLXMzYzI0 eHgtb2JqcyA6PSBkbWEubwo+ICtzbmQtc29jLWlkbWEtb2JqcyA6PSBpZG1hLm8KPiDCoHNuZC1z b2MtczNjMjR4eC1pMnMtb2JqcyA6PSBzM2MyNHh4LWkycy5vCj4gwqBzbmQtc29jLXMzYzI0MTIt aTJzLW9ianMgOj0gczNjMjQxMi1pMnMubwo+IMKgc25kLXNvYy1hYzk3LW9ianMgOj0gYWM5Ny5v Cj4gQEAgLTE2LDYgKzE3LDcgQEAgb2JqLSQoQ09ORklHX1NORF9TM0NfSTJTVjJfU09DKSArPSBz bmQtc29jLXMzYy1pMnMtdjIubwo+IMKgb2JqLSQoQ09ORklHX1NORF9TQU1TVU5HX1NQRElGKSAr PSBzbmQtc29jLXNhbXN1bmctc3BkaWYubwo+IMKgb2JqLSQoQ09ORklHX1NORF9TQU1TVU5HX1BD TSkgKz0gc25kLXNvYy1wY20ubwo+IMKgb2JqLSQoQ09ORklHX1NORF9TQU1TVU5HX0kyUykgKz0g c25kLXNvYy1pMnMubwo+ICtvYmotJChDT05GSUdfU05EX1NBTVNVTkdfSTJTKSArPSBzbmQtc29j LWlkbWEubwo+Cj4gwqAjIFMzQzI0WFggTWFjaGluZSBTdXBwb3J0Cj4gwqBzbmQtc29jLWppdmUt d204NzUwLW9ianMgOj0gaml2ZV93bTg3NTAubwo+IGRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2Ft c3VuZy9pZG1hLmMgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9pZG1hLmMKPiBuZXcgZmlsZSBtb2RlIDEw MDY0NAo+IGluZGV4IDAwMDAwMDAuLmViZGUwNzQKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvc291 bmQvc29jL3NhbXN1bmcvaWRtYS5jCj4gQEAgLTAsMCArMSw0NTMgQEAKPiArLyoKPiArICogc291 bmQvc29jL3NhbXN1bmcvaWRtYS5jCj4gKyAqCj4gKyAqIENvcHlyaWdodCAoYykgMjAxMSBTYW1z dW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgo+ICsgKiDCoCDCoCDCoCDCoCDCoCDCoCBodHRwOi8v d3d3LnNhbXN1bmcuY29tCj4gKyAqCj4gKyAqIEkyUzAncyBJbnRlcm5hbCBETUEgZHJpdmVyCj4g KyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSDCoGl0IGFuZC9vciBtb2RpZnkgaXQKPiArICogdW5kZXIgwqB0aGUgdGVybXMgb2YgwqB0 aGUgR05VIEdlbmVyYWwgwqBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCj4gKyAq IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgwqBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSDCoExp Y2Vuc2UsIG9yIChhdCB5b3VyCj4gKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4gKyAq Lwo+ICsjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9wbGF0 Zm9ybV9kZXZpY2UuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Cj4gKyNpbmNs dWRlIDxsaW51eC9zbGFiLmg+Cj4gKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KPiArI2luY2x1ZGUg PHNvdW5kL3BjbV9wYXJhbXMuaD4KPiArI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgo+ICsKPiArI2lu Y2x1ZGUgImkycy5oIgo+ICsjaW5jbHVkZSAiaWRtYS5oIgo+ICsjaW5jbHVkZSAiZG1hLmgiCj4g KyNpbmNsdWRlICJpMnMtcmVncy5oIgo+ICsKPiArI2RlZmluZSBTVF9SVU5OSU5HIMKgIMKgIMKg IMKgIMKgIMKgICgxPDwwKQo+ICsjZGVmaW5lIFNUX09QRU5FRCDCoCDCoCDCoCDCoCDCoCDCoCDC oCgxPDwxKQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIGlkbWFf aGFyZHdhcmUgPSB7Cj4gKyDCoCDCoCDCoCAuaW5mbyA9IFNORFJWX1BDTV9JTkZPX0lOVEVSTEVB VkVEIHwKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIFNORFJWX1BDTV9JTkZPX0JMT0NL X1RSQU5TRkVSIHwKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIFNORFJWX1BDTV9JTkZP X01NQVAgfAo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgU05EUlZfUENNX0lORk9fTU1B UF9WQUxJRCB8Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBTTkRSVl9QQ01fSU5GT19Q QVVTRSB8Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBTTkRSVl9QQ01fSU5GT19SRVNV TUUsCj4gKyDCoCDCoCDCoCAuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwKPiAr IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIFNORFJWX1BDTV9GTVRCSVRfVTE2X0xFIHwKPiAr IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIFNORFJWX1BDTV9GTVRCSVRfUzI0X0xFIHwKPiAr IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIFNORFJWX1BDTV9GTVRCSVRfVTI0X0xFIHwKPiAr IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIFNORFJWX1BDTV9GTVRCSVRfVTggfAo+ICsgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgU05EUlZfUENNX0ZNVEJJVF9TOCwKPiArIMKgIMKgIMKg IC5jaGFubmVsc19taW4gPSAyLAo+ICsgwqAgwqAgwqAgLmNoYW5uZWxzX21heCA9IDIsCj4gKyDC oCDCoCDCoCAuYnVmZmVyX2J5dGVzX21heCA9IE1BWF9JRE1BX0JVRkZFUiwKPiArIMKgIMKgIMKg IC5wZXJpb2RfYnl0ZXNfbWluID0gMTI4LAo+ICsgwqAgwqAgwqAgLnBlcmlvZF9ieXRlc19tYXgg PSBNQVhfSURNQV9QRVJJT0QsCj4gKyDCoCDCoCDCoCAucGVyaW9kc19taW4gPSAxLAo+ICsgwqAg wqAgwqAgLnBlcmlvZHNfbWF4ID0gMiwKPiArfTsKPiArCj4gK3N0cnVjdCBpZG1hX2N0cmwgewo+ ICsgwqAgwqAgwqAgc3BpbmxvY2tfdCDCoCDCoCDCoGxvY2s7Cj4gKyDCoCDCoCDCoCBpbnQgwqAg wqAgwqAgwqAgwqAgwqAgc3RhdGU7Cj4gKyDCoCDCoCDCoCBkbWFfYWRkcl90IMKgIMKgIMKgc3Rh cnQ7Cj4gKyDCoCDCoCDCoCBkbWFfYWRkcl90IMKgIMKgIMKgcG9zOwo+ICsgwqAgwqAgwqAgZG1h X2FkZHJfdCDCoCDCoCDCoGVuZDsKPiArIMKgIMKgIMKgIGRtYV9hZGRyX3QgwqAgwqAgwqBwZXJp b2Q7Cj4gKyDCoCDCoCDCoCBkbWFfYWRkcl90IMKgIMKgIMKgcGVyaW9kc3o7Cj4gKyDCoCDCoCDC oCB2b2lkIMKgIMKgIMKgIMKgIMKgIMKgKnRva2VuOwo+ICsgwqAgwqAgwqAgdm9pZCDCoCDCoCDC oCDCoCDCoCDCoCgqY2IpKHZvaWQgKmR0LCBpbnQgYnl0ZXNfeGZlcik7Cj4gK307Cj4gKwo+ICtz dGF0aWMgc3RydWN0IGlkbWFfaW5mbyB7Cj4gKyDCoCDCoCDCoCBzcGlubG9ja190IMKgIMKgIMKg bG9jazsKPiArIMKgIMKgIMKgIHZvaWQgwqAgwqAgwqAgwqAgwqAgwqAgX19pb21lbSDCoCpyZWdz Owo+ICsgwqAgwqAgwqAgZG1hX2FkZHJfdCDCoCDCoCDCoGxwX3R4X2FkZHI7Cj4gK30gaWRtYTsK PiArCj4gK3N0YXRpYyB2b2lkIGlkbWFfZ2V0cG9zKGRtYV9hZGRyX3QgKnNyYykKPiArewo+ICsg wqAgwqAgwqAgKnNyYyA9IGlkbWEubHBfdHhfYWRkciArCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDC oCAocmVhZGwoaWRtYS5yZWdzICsgSTJTVFJOQ05UKSAmIDB4ZmZmZmZmKSAqIDQ7Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbnQgaWRtYV9lbnF1ZXVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vi c3RyZWFtKQo+ICt7Cj4gKyDCoCDCoCDCoCBzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1l ID0gc3Vic3RyZWFtLT5ydW50aW1lOwo+ICsgwqAgwqAgwqAgc3RydWN0IGlkbWFfY3RybCAqcHJ0 ZCA9IHN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOwo+ICsgwqAgwqAgwqAgdTMyIHZh bDsKPiArCj4gKyDCoCDCoCDCoCBzcGluX2xvY2soJnBydGQtPmxvY2spOwo+ICsgwqAgwqAgwqAg cHJ0ZC0+dG9rZW4gPSAodm9pZCAqKSBzdWJzdHJlYW07Cj4gKyDCoCDCoCDCoCBzcGluX3VubG9j aygmcHJ0ZC0+bG9jayk7Cj4gKwo+ICsgwqAgwqAgwqAgLyogSW50ZXJuYWwgRE1BIExldmVsMCBJ bnRlcnJ1cHQgQWRkcmVzcyAqLwo+ICsgwqAgwqAgwqAgdmFsID0gaWRtYS5scF90eF9hZGRyICsg cHJ0ZC0+cGVyaW9kc3o7Cj4gKyDCoCDCoCDCoCB3cml0ZWwodmFsLCBpZG1hLnJlZ3MgKyBJMlNM VkwwQUREUik7Cj4gKwo+ICsgwqAgwqAgwqAgLyogU3RhcnQgYWRkcmVzczAgb2YgSTJTIGludGVy bmFsIERNQSBvcGVyYXRpb24uICovCj4gKyDCoCDCoCDCoCB2YWwgPSBpZG1hLmxwX3R4X2FkZHI7 Cj4gKyDCoCDCoCDCoCB3cml0ZWwodmFsLCBpZG1hLnJlZ3MgKyBJMlNTVFIwKTsKPiArCj4gKyDC oCDCoCDCoCAvKgo+ICsgwqAgwqAgwqAgwqAqIFRyYW5zZmVyIGJsb2NrIHNpemUgZm9yIEkyUyBp bnRlcm5hbCBETUEuCj4gKyDCoCDCoCDCoCDCoCogU2hvdWxkIGRlY2lkZSB0cmFuc2ZlciBzaXpl IGJlZm9yZSBzdGFydCBkbWEgb3BlcmF0aW9uCj4gKyDCoCDCoCDCoCDCoCovCj4gKyDCoCDCoCDC oCB2YWwgPSByZWFkbChpZG1hLnJlZ3MgKyBJMlNTSVpFKTsKPiArIMKgIMKgIMKgIHZhbCAmPSB+ KEkyU1NJWkVfVFJOTVNLIDw8IEkyU1NJWkVfU0hJRlQpOwo+ICsgwqAgwqAgwqAgdmFsIHw9ICgo KHJ1bnRpbWUtPmRtYV9ieXRlcyA+PiAyKSAmCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCBJMlNTSVpFX1RSTk1TSykgPDwgSTJTU0laRV9TSElGVCk7Cj4gKyDCoCDCoCDCoCB3 cml0ZWwodmFsLCBpZG1hLnJlZ3MgKyBJMlNTSVpFKTsKPiArCj4gKyDCoCDCoCDCoCB2YWwgPSBy ZWFkbChpZG1hLnJlZ3MgKyBJMlNBSEIpOwo+ICsgwqAgwqAgwqAgdmFsIHw9IEFIQl9JTlRFTkxW TDA7Cj4gKyDCoCDCoCDCoCB3cml0ZWwodmFsLCBpZG1hLnJlZ3MgKyBJMlNBSEIpOwo+ICsKPiAr IMKgIMKgIMKgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBpZG1hX3NldGNhbGxi ayhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKPiArIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHZvaWQgKCpjYikodm9pZCAqLCBpbnQpKQo+ ICt7Cj4gKyDCoCDCoCDCoCBzdHJ1Y3QgaWRtYV9jdHJsICpwcnRkID0gc3Vic3RyZWFtLT5ydW50 aW1lLT5wcml2YXRlX2RhdGE7Cj4gKwo+ICsgwqAgwqAgwqAgc3Bpbl9sb2NrKCZwcnRkLT5sb2Nr KTsKPiArIMKgIMKgIMKgIHBydGQtPmNiID0gY2I7Cj4gKyDCoCDCoCDCoCBzcGluX3VubG9jaygm cHJ0ZC0+bG9jayk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGlkbWFfY29udHJvbChpbnQgb3Ap Cj4gK3sKPiArIMKgIMKgIMKgIHUzMiB2YWwgPSByZWFkbChpZG1hLnJlZ3MgKyBJMlNBSEIpOwo+ ICsKPiArIMKgIMKgIMKgIHNwaW5fbG9jaygmaWRtYS5sb2NrKTsKPiArCj4gKyDCoCDCoCDCoCBz d2l0Y2ggKG9wKSB7Cj4gKyDCoCDCoCDCoCBjYXNlIExQQU1fRE1BX1NUQVJUOgo+ICsgwqAgwqAg wqAgwqAgwqAgwqAgwqAgdmFsIHw9IChBSEJfSU5URU5MVkwwIHwgQUhCX0RNQUVOKTsKPiArIMKg IMKgIMKgIMKgIMKgIMKgIMKgIGJyZWFrOwo+ICsgwqAgwqAgwqAgY2FzZSBMUEFNX0RNQV9TVE9Q Ogo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgdmFsICY9IH4oQUhCX0lOVEVOTFZMMCB8IEFIQl9E TUFFTik7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBicmVhazsKPiArIMKgIMKgIMKgIGRlZmF1 bHQ6Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBzcGluX3VubG9jaygmaWRtYS5sb2NrKTsKPiAr IMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJldHVybjsKPiArIMKgIMKgIMKgIH0KPiArCj4gKyDCoCDC oCDCoCB3cml0ZWwodmFsLCBpZG1hLnJlZ3MgKyBJMlNBSEIpOwo+ICsgwqAgwqAgwqAgc3Bpbl91 bmxvY2soJmlkbWEubG9jayk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGlkbWFfZG9uZSh2b2lk ICppZCwgaW50IGJ5dGVzX3hmZXIpCj4gK3sKPiArIMKgIMKgIMKgIHN0cnVjdCBzbmRfcGNtX3N1 YnN0cmVhbSAqc3Vic3RyZWFtID0gaWQ7Cj4gKyDCoCDCoCDCoCBzdHJ1Y3QgaWRtYV9jdHJsICpw cnRkID0gc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGE7Cj4gKwo+ICsgwqAgwqAgwqAg aWYgKHBydGQgJiYgKHBydGQtPnN0YXRlICYgU1RfUlVOTklORykpCj4gKyDCoCDCoCDCoCDCoCDC oCDCoCDCoCBzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKHN1YnN0cmVhbSk7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbnQgaWRtYV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJl YW0sCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBzdHJ1 Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKPiArewo+ICsgwqAgwqAgwqAgc3RydWN0IHNu ZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKPiArIMKgIMKgIMKg IHN0cnVjdCBpZG1hX2N0cmwgKnBydGQgPSBzdWJzdHJlYW0tPnJ1bnRpbWUtPnByaXZhdGVfZGF0 YTsKPiArIMKgIMKgIMKgIHUzMiBtb2QgPSByZWFkbChpZG1hLnJlZ3MgKyBJMlNNT0QpOwo+ICsg wqAgwqAgwqAgdTMyIGFoYiA9IHJlYWRsKGlkbWEucmVncyArIEkyU0FIQik7Cj4gKwo+ICsgwqAg wqAgwqAgYWhiIHw9IChBSEJfRE1BUkxEIHwgQUhCX0lOVE1BU0spOwo+ICsgwqAgwqAgwqAgbW9k IHw9IE1PRF9UWFNfSURNQTsKPiArIMKgIMKgIMKgIHdyaXRlbChhaGIsIGlkbWEucmVncyArIEky U0FIQik7Cj4gKyDCoCDCoCDCoCB3cml0ZWwobW9kLCBpZG1hLnJlZ3MgKyBJMlNNT0QpOwo+ICsK PiArIMKgIMKgIMKgIHNuZF9wY21fc2V0X3J1bnRpbWVfYnVmZmVyKHN1YnN0cmVhbSwgJnN1YnN0 cmVhbS0+ZG1hX2J1ZmZlcik7Cj4gKyDCoCDCoCDCoCBydW50aW1lLT5kbWFfYnl0ZXMgPSBwYXJh bXNfYnVmZmVyX2J5dGVzKHBhcmFtcyk7Cj4gKwo+ICsgwqAgwqAgwqAgcHJ0ZC0+c3RhcnQgPSBw cnRkLT5wb3MgPSBydW50aW1lLT5kbWFfYWRkcjsKPiArIMKgIMKgIMKgIHBydGQtPnBlcmlvZCA9 IHBhcmFtc19wZXJpb2RzKHBhcmFtcyk7Cj4gKyDCoCDCoCDCoCBwcnRkLT5wZXJpb2RzeiA9IHBh cmFtc19wZXJpb2RfYnl0ZXMocGFyYW1zKTsKPiArIMKgIMKgIMKgIHBydGQtPmVuZCA9IHJ1bnRp bWUtPmRtYV9hZGRyICsgcnVudGltZS0+ZG1hX2J5dGVzOwo+ICsKPiArIMKgIMKgIMKgIGlkbWFf c2V0Y2FsbGJrKHN1YnN0cmVhbSwgaWRtYV9kb25lKTsKPiArCj4gKyDCoCDCoCDCoCByZXR1cm4g MDsKPiArfQo+ICsKPiArc3RhdGljIGludCBpZG1hX2h3X2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vi c3RyZWFtICpzdWJzdHJlYW0pCj4gK3sKPiArIMKgIMKgIMKgIHNuZF9wY21fc2V0X3J1bnRpbWVf YnVmZmVyKHN1YnN0cmVhbSwgTlVMTCk7Cj4gKwo+ICsgwqAgwqAgwqAgcmV0dXJuIDA7Cj4gK30K PiArCj4gK3N0YXRpYyBpbnQgaWRtYV9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAq c3Vic3RyZWFtKQo+ICt7Cj4gKyDCoCDCoCDCoCBzdHJ1Y3QgaWRtYV9jdHJsICpwcnRkID0gc3Vi c3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGE7Cj4gKwo+ICsgwqAgwqAgwqAgcHJ0ZC0+cG9z ID0gcHJ0ZC0+c3RhcnQ7Cj4gKwo+ICsgwqAgwqAgwqAgLyogZmx1c2ggdGhlIERNQSBjaGFubmVs ICovCj4gKyDCoCDCoCDCoCBpZG1hX2NvbnRyb2woTFBBTV9ETUFfU1RPUCk7Cj4gKyDCoCDCoCDC oCBpZG1hX2VucXVldWUoc3Vic3RyZWFtKTsKPiArCj4gKyDCoCDCoCDCoCByZXR1cm4gMDsKPiAr fQo+ICsKPiArc3RhdGljIGludCBpZG1hX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFt ICpzdWJzdHJlYW0sIGludCBjbWQpCj4gK3sKPiArIMKgIMKgIMKgIHN0cnVjdCBpZG1hX2N0cmwg KnBydGQgPSBzdWJzdHJlYW0tPnJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKPiArIMKgIMKgIMKgIGlu dCByZXQgPSAwOwo+ICsKPiArIMKgIMKgIMKgIHNwaW5fbG9jaygmcHJ0ZC0+bG9jayk7Cj4gKwo+ ICsgwqAgwqAgwqAgc3dpdGNoIChjbWQpIHsKPiArIMKgIMKgIMKgIGNhc2UgU05EUlZfUENNX1RS SUdHRVJfUkVTVU1FOgo+ICsgwqAgwqAgwqAgY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoK PiArIMKgIMKgIMKgIGNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFTRToKPiArIMKg IMKgIMKgIMKgIMKgIMKgIMKgIHBydGQtPnN0YXRlIHw9IFNUX1JVTk5JTkc7Cj4gKyDCoCDCoCDC oCDCoCDCoCDCoCDCoCBpZG1hX2NvbnRyb2woTFBBTV9ETUFfU1RBUlQpOwo+ICsgwqAgwqAgwqAg wqAgwqAgwqAgwqAgYnJlYWs7Cj4gKwo+ICsgwqAgwqAgwqAgY2FzZSBTTkRSVl9QQ01fVFJJR0dF Ul9TVVNQRU5EOgo+ICsgwqAgwqAgwqAgY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgo+ICsg wqAgwqAgwqAgY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9QVVNIOgo+ICsgwqAgwqAgwqAg wqAgwqAgwqAgwqAgcHJ0ZC0+c3RhdGUgJj0gflNUX1JVTk5JTkc7Cj4gKyDCoCDCoCDCoCDCoCDC oCDCoCDCoCBpZG1hX2NvbnRyb2woTFBBTV9ETUFfU1RPUCk7Cj4gKyDCoCDCoCDCoCDCoCDCoCDC oCDCoCBicmVhazsKPiArCj4gKyDCoCDCoCDCoCBkZWZhdWx0Ogo+ICsgwqAgwqAgwqAgwqAgwqAg wqAgwqAgcmV0ID0gLUVJTlZBTDsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGJyZWFrOwo+ICsg wqAgwqAgwqAgfQo+ICsKPiArIMKgIMKgIMKgIHNwaW5fdW5sb2NrKCZwcnRkLT5sb2NrKTsKPiAr Cj4gKyDCoCDCoCDCoCByZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgc25kX3BjbV91ZnJh bWVzX3QKPiArIMKgIMKgIMKgIGlkbWFfcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0g KnN1YnN0cmVhbSkKPiArewo+ICsgwqAgwqAgwqAgc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVu dGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKPiArIMKgIMKgIMKgIHN0cnVjdCBpZG1hX2N0cmwg KnBydGQgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7Cj4gKyDCoCDCoCDCoCBkbWFfYWRkcl90IHNy YzsKPiArIMKgIMKgIMKgIHVuc2lnbmVkIGxvbmcgcmVzOwo+ICsKPiArIMKgIMKgIMKgIHNwaW5f bG9jaygmcHJ0ZC0+bG9jayk7Cj4gKwo+ICsgwqAgwqAgwqAgaWRtYV9nZXRwb3MoJnNyYyk7Cj4g KyDCoCDCoCDCoCByZXMgPSBzcmMgLSBwcnRkLT5zdGFydDsKPiArCj4gKyDCoCDCoCDCoCBzcGlu X3VubG9jaygmcHJ0ZC0+bG9jayk7Cj4gKwo+ICsgwqAgwqAgwqAgcmV0dXJuIGJ5dGVzX3RvX2Zy YW1lcyhzdWJzdHJlYW0tPnJ1bnRpbWUsIHJlcyk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaWRt YV9tbWFwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAo+ICsgwqAgwqAgwqAg c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCj4gK3sKPiArIMKgIMKgIMKgIHN0cnVjdCBzbmRf cGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7Cj4gKyDCoCDCoCDCoCB1 bnNpZ25lZCBsb25nIHNpemUsIG9mZnNldDsKPiArIMKgIMKgIMKgIGludCByZXQ7Cj4gKwo+ICsg wqAgwqAgwqAgLyogRnJvbSBzbmRfcGNtX2xpYl9tbWFwX2lvbWVtICovCj4gKyDCoCDCoCDCoCB2 bWEtPnZtX3BhZ2VfcHJvdCA9IHBncHJvdF9ub25jYWNoZWQodm1hLT52bV9wYWdlX3Byb3QpOwo+ ICsgwqAgwqAgwqAgdm1hLT52bV9mbGFncyB8PSBWTV9JTzsKPiArIMKgIMKgIMKgIHNpemUgPSB2 bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQ7Cj4gKyDCoCDCoCDCoCBvZmZzZXQgPSB2bWEtPnZt X3Bnb2ZmIDw8IFBBR0VfU0hJRlQ7Cj4gKyDCoCDCoCDCoCByZXQgPSBpb19yZW1hcF9wZm5fcmFu Z2Uodm1hLCB2bWEtPnZtX3N0YXJ0LAo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgKHJ1bnRpbWUtPmRtYV9hZGRyICsgb2Zmc2V0KSA+PiBQQUdFX1NISUZULAo+ICsgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgc2l6ZSwgdm1hLT52bV9wYWdlX3Byb3QpOwo+ICsK PiArIMKgIMKgIMKgIHJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpcnFyZXR1cm5fdCBp aXNfaXJxKGludCBpcnFubywgdm9pZCAqZGV2X2lkKQo+ICt7Cj4gKyDCoCDCoCDCoCBzdHJ1Y3Qg aWRtYV9jdHJsICpwcnRkID0gKHN0cnVjdCBpZG1hX2N0cmwgKilkZXZfaWQ7Cj4gKyDCoCDCoCDC oCB1MzIgaWlzY29uLCBpaXNhaGIsIHZhbCwgYWRkcjsKPiArCj4gKyDCoCDCoCDCoCBpaXNhaGIg wqA9IHJlYWRsKGlkbWEucmVncyArIEkyU0FIQik7Cj4gKyDCoCDCoCDCoCBpaXNjb24gwqA9IHJl YWRsKGlkbWEucmVncyArIEkyU0NPTik7Cj4gKwo+ICsgwqAgwqAgwqAgdmFsID0gKGlpc2FoYiAm IEFIQl9MVkwwSU5UKSA/IEFIQl9DTFJMVkwwSU5UIDogMDsKPiArCj4gKyDCoCDCoCDCoCBpZiAo dmFsKSB7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpaXNhaGIgfD0gdmFsOwo+ICsgwqAgwqAg wqAgwqAgwqAgwqAgwqAgd3JpdGVsKGlpc2FoYiwgaWRtYS5yZWdzICsgSTJTQUhCKTsKPiArCj4g KyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBhZGRyID0gcmVhZGwoaWRtYS5yZWdzICsgSTJTTFZMMEFE RFIpIC0gaWRtYS5scF90eF9hZGRyOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgYWRkciArPSBw cnRkLT5wZXJpb2RzejsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGFkZHIgJT0gKHBydGQtPmVu ZCAtIHBydGQtPnN0YXJ0KTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGFkZHIgKz0gaWRtYS5s cF90eF9hZGRyOwo+ICsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHdyaXRlbChhZGRyLCBpZG1h LnJlZ3MgKyBJMlNMVkwwQUREUik7Cj4gKwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKHBy dGQtPmNiKQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcHJ0ZC0+Y2IocHJ0 ZC0+dG9rZW4sIHBydGQtPnBlcmlvZCk7Cj4gKyDCoCDCoCDCoCB9Cj4gKwo+ICsgwqAgwqAgwqAg cmV0dXJuIElSUV9IQU5ETEVEOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGlkbWFfb3BlbihzdHJ1 Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKPiArewo+ICsgwqAgwqAgwqAgc3RydWN0 IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKPiArIMKgIMKg IMKgIHN0cnVjdCBpZG1hX2N0cmwgKnBydGQ7Cj4gKyDCoCDCoCDCoCBpbnQgcmV0Owo+ICsKPiAr IMKgIMKgIMKgIHNuZF9zb2Nfc2V0X3J1bnRpbWVfaHdwYXJhbXMoc3Vic3RyZWFtLCAmaWRtYV9o YXJkd2FyZSk7Cj4gKwo+ICsgwqAgwqAgwqAgcHJ0ZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBp ZG1hX2N0cmwpLCBHRlBfS0VSTkVMKTsKPiArIMKgIMKgIMKgIGlmIChwcnRkID09IE5VTEwpCj4g KyDCoCDCoCDCoCDCoCDCoCDCoCDCoCByZXR1cm4gLUVOT01FTTsKPiArCj4gKyDCoCDCoCDCoCBy ZXQgPSByZXF1ZXN0X2lycShJUlFfSTJTMCwgaWlzX2lycSwgMCwgImkycyIsIHBydGQpOwo+ICsg wqAgwqAgwqAgaWYgKHJldCA8IDApIHsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHByX2Vycigi ZmFpbCB0byBjbGFpbSBpMnMgaXJxICwgcmV0ID0gJWRcbiIsIHJldCk7Cj4gKyDCoCDCoCDCoCDC oCDCoCDCoCDCoCBrZnJlZShwcnRkKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJldHVybiBy ZXQ7Cj4gKyDCoCDCoCDCoCB9Cj4gKwo+ICsgwqAgwqAgwqAgc3Bpbl9sb2NrX2luaXQoJnBydGQt PmxvY2spOwo+ICsKPiArIMKgIMKgIMKgIHJ1bnRpbWUtPnByaXZhdGVfZGF0YSA9IHBydGQ7Cj4g Kwo+ICsgwqAgwqAgwqAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaWRtYV9jbG9z ZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKPiArewo+ICsgwqAgwqAgwqAg c3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKPiAr IMKgIMKgIMKgIHN0cnVjdCBpZG1hX2N0cmwgKnBydGQgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7 Cj4gKwo+ICsgwqAgwqAgwqAgZnJlZV9pcnEoSVJRX0kyUzAsIHBydGQpOwo+ICsKPiArIMKgIMKg IMKgIGlmICghcHJ0ZCkKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHByX2VycigiaWRtYV9jbG9z ZSBjYWxsZWQgd2l0aCBwcnRkID09IE5VTExcbiIpOwo+ICsKPiArIMKgIMKgIMKgIGtmcmVlKHBy dGQpOwo+ICsKPiArIMKgIMKgIMKgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0 IHNuZF9wY21fb3BzIGlkbWFfb3BzID0gewo+ICsgwqAgwqAgwqAgLm9wZW4gwqAgwqAgwqAgwqAg wqAgPSBpZG1hX29wZW4sCj4gKyDCoCDCoCDCoCAuY2xvc2UgwqAgwqAgwqAgwqAgwqA9IGlkbWFf Y2xvc2UsCj4gKyDCoCDCoCDCoCAuaW9jdGwgwqAgwqAgwqAgwqAgwqA9IHNuZF9wY21fbGliX2lv Y3RsLAo+ICsgwqAgwqAgwqAgLnRyaWdnZXIgwqAgwqAgwqAgwqA9IGlkbWFfdHJpZ2dlciwKPiAr IMKgIMKgIMKgIC5wb2ludGVyIMKgIMKgIMKgIMKgPSBpZG1hX3BvaW50ZXIsCj4gKyDCoCDCoCDC oCAubW1hcCDCoCDCoCDCoCDCoCDCoCA9IGlkbWFfbW1hcCwKPiArIMKgIMKgIMKgIC5od19wYXJh bXMgwqAgwqAgwqA9IGlkbWFfaHdfcGFyYW1zLAo+ICsgwqAgwqAgwqAgLmh3X2ZyZWUgwqAgwqAg wqAgwqA9IGlkbWFfaHdfZnJlZSwKPiArIMKgIMKgIMKgIC5wcmVwYXJlIMKgIMKgIMKgIMKgPSBp ZG1hX3ByZXBhcmUsCj4gK307Cj4gKwo+ICtzdGF0aWMgdm9pZCBpZG1hX2ZyZWUoc3RydWN0IHNu ZF9wY20gKnBjbSkKPiArewo+ICsgwqAgwqAgwqAgc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpz dWJzdHJlYW07Cj4gKyDCoCDCoCDCoCBzdHJ1Y3Qgc25kX2RtYV9idWZmZXIgKmJ1ZjsKPiArCj4g KyDCoCDCoCDCoCBzdWJzdHJlYW0gPSBwY20tPnN0cmVhbXNbU05EUlZfUENNX1NUUkVBTV9QTEFZ QkFDS10uc3Vic3RyZWFtOwo+ICsgwqAgwqAgwqAgaWYgKCFzdWJzdHJlYW0pCj4gKyDCoCDCoCDC oCDCoCDCoCDCoCDCoCByZXR1cm47Cj4gKwo+ICsgwqAgwqAgwqAgYnVmID0gJnN1YnN0cmVhbS0+ ZG1hX2J1ZmZlcjsKPiArIMKgIMKgIMKgIGlmICghYnVmLT5hcmVhKQo+ICsgwqAgwqAgwqAgwqAg wqAgwqAgwqAgcmV0dXJuOwo+ICsKPiArIMKgIMKgIMKgIGlvdW5tYXAoYnVmLT5hcmVhKTsKPiAr Cj4gKyDCoCDCoCDCoCBidWYtPmFyZWEgPSBOVUxMOwo+ICsgwqAgwqAgwqAgYnVmLT5hZGRyID0g MDsKPiArfQo+ICsKPiArc3RhdGljIGludCBwcmVhbGxvY2F0ZV9pZG1hX2J1ZmZlcihzdHJ1Y3Qg c25kX3BjbSAqcGNtLCBpbnQgc3RyZWFtKQo+ICt7Cj4gKyDCoCDCoCDCoCBzdHJ1Y3Qgc25kX3Bj bV9zdWJzdHJlYW0gKnN1YnN0cmVhbSA9IHBjbS0+c3RyZWFtc1tzdHJlYW1dLnN1YnN0cmVhbTsK PiArIMKgIMKgIMKgIHN0cnVjdCBzbmRfZG1hX2J1ZmZlciAqYnVmID0gJnN1YnN0cmVhbS0+ZG1h X2J1ZmZlcjsKPiArCj4gKyDCoCDCoCDCoCBidWYtPmRldi5kZXYgPSBwY20tPmNhcmQtPmRldjsK PiArIMKgIMKgIMKgIGJ1Zi0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKPiArCj4gKyDCoCDCoCDCoCAv KiBBc3NpZ24gUENNIGJ1ZmZlciBwb2ludGVycyAqLwo+ICsgwqAgwqAgwqAgYnVmLT5kZXYudHlw ZSA9IFNORFJWX0RNQV9UWVBFX0NPTlRJTlVPVVM7Cj4gKyDCoCDCoCDCoCBidWYtPmFkZHIgPSBp ZG1hLmxwX3R4X2FkZHI7Cj4gKyDCoCDCoCDCoCBidWYtPmJ5dGVzID0gaWRtYV9oYXJkd2FyZS5i dWZmZXJfYnl0ZXNfbWF4Owo+ICsgwqAgwqAgwqAgYnVmLT5hcmVhID0gKHVuc2lnbmVkIGNoYXIg Kilpb3JlbWFwKGJ1Zi0+YWRkciwgYnVmLT5ieXRlcyk7Cj4gKwo+ICsgwqAgwqAgwqAgcmV0dXJu IDA7Cj4gK30KPiArCj4gK3N0YXRpYyB1NjQgaWRtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsK PiArCj4gK3N0YXRpYyBpbnQgaWRtYV9uZXcoc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0 ZCkKPiArewo+ICsgwqAgwqAgwqAgc3RydWN0IHNuZF9jYXJkICpjYXJkID0gcnRkLT5jYXJkLT5z bmRfY2FyZDsKPiArIMKgIMKgIMKgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpID0gcnRkLT5jcHVf ZGFpOwo+ICsgwqAgwqAgwqAgc3RydWN0IHNuZF9wY20gKnBjbSA9IHJ0ZC0+cGNtOwo+ICsgwqAg wqAgwqAgaW50IHJldCA9IDA7Cj4gKwo+ICsgwqAgwqAgwqAgaWYgKCFjYXJkLT5kZXYtPmRtYV9t YXNrKQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgY2FyZC0+ZGV2LT5kbWFfbWFzayA9ICZpZG1h X21hc2s7Cj4gKyDCoCDCoCDCoCBpZiAoIWNhcmQtPmRldi0+Y29oZXJlbnRfZG1hX21hc2spCj4g KyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBjYXJkLT5kZXYtPmNvaGVyZW50X2RtYV9tYXNrID0gRE1B X0JJVF9NQVNLKDMyKTsKPiArCj4gKyDCoCDCoCDCoCBpZiAoZGFpLT5kcml2ZXItPnBsYXliYWNr LmNoYW5uZWxzX21pbikKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJldCA9IHByZWFsbG9jYXRl X2lkbWFfYnVmZmVyKHBjbSwKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spOwo+ICsKPiArIMKgIMKgIMKgIHJl dHVybiByZXQ7Cj4gK30KPiArCj4gK3ZvaWQgaWRtYV9yZWdfYWRkcl9pbml0KHZvaWQgKnJlZ3Ms IGRtYV9hZGRyX3QgYWRkcikKPiArewo+ICsgwqAgwqAgwqAgc3Bpbl9sb2NrX2luaXQoJmlkbWEu bG9jayk7Cj4gKyDCoCDCoCDCoCBpZG1hLnJlZ3MgPSByZWdzOwo+ICsgwqAgwqAgwqAgaWRtYS5s cF90eF9hZGRyID0gYWRkcjsKPiArfQo+ICsKPiArc3RydWN0IHNuZF9zb2NfcGxhdGZvcm1fZHJp dmVyIGFzb2NfaWRtYV9wbGF0Zm9ybSA9IHsKPiArIMKgIMKgIMKgIC5vcHMgPSAmaWRtYV9vcHMs Cj4gKyDCoCDCoCDCoCAucGNtX25ldyA9IGlkbWFfbmV3LAo+ICsgwqAgwqAgwqAgLnBjbV9mcmVl ID0gaWRtYV9mcmVlLAo+ICt9Owo+ICsKPiArc3RhdGljIGludCBfX2RldmluaXQgYXNvY19pZG1h X3BsYXRmb3JtX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gK3sKPiArIMKg IMKgIMKgIHJldHVybiBzbmRfc29jX3JlZ2lzdGVyX3BsYXRmb3JtKCZwZGV2LT5kZXYsICZhc29j X2lkbWFfcGxhdGZvcm0pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IF9fZGV2ZXhpdCBhc29jX2lk bWFfcGxhdGZvcm1fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gK3sKPiAr IMKgIMKgIMKgIHNuZF9zb2NfdW5yZWdpc3Rlcl9wbGF0Zm9ybSgmcGRldi0+ZGV2KTsKPiArIMKg IMKgIMKgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZl ciBhc29jX2lkbWFfZHJpdmVyID0gewo+ICsgwqAgwqAgwqAgLmRyaXZlciA9IHsKPiArIMKgIMKg IMKgIMKgIMKgIMKgIMKgIC5uYW1lID0gInNhbXN1bmctaWRtYSIsCj4gKyDCoCDCoCDCoCDCoCDC oCDCoCDCoCAub3duZXIgPSBUSElTX01PRFVMRSwKPiArIMKgIMKgIMKgIH0sCj4gKwo+ICsgwqAg wqAgwqAgLnByb2JlID0gYXNvY19pZG1hX3BsYXRmb3JtX3Byb2JlLAo+ICsgwqAgwqAgwqAgLnJl bW92ZSA9IF9fZGV2ZXhpdF9wKGFzb2NfaWRtYV9wbGF0Zm9ybV9yZW1vdmUpLAo+ICt9Owo+ICsK PiArc3RhdGljIGludCBfX2luaXQgYXNvY19pZG1hX2luaXQodm9pZCkKPiArewo+ICsgwqAgwqAg wqAgcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYXNvY19pZG1hX2RyaXZlcik7Cj4g K30KPiArbW9kdWxlX2luaXQoYXNvY19pZG1hX2luaXQpOwo+ICsKPiArc3RhdGljIHZvaWQgX19l eGl0IGFzb2NfaWRtYV9leGl0KHZvaWQpCj4gK3sKPiArIMKgIMKgIMKgIHBsYXRmb3JtX2RyaXZl cl91bnJlZ2lzdGVyKCZhc29jX2lkbWFfZHJpdmVyKTsKPiArfQo+ICttb2R1bGVfZXhpdChhc29j X2lkbWFfZXhpdCk7Cj4gKwo+ICtNT0RVTEVfQVVUSE9SKCJKYXN3aW5kZXIgU2luZ2gsIDxqYXNz aXNpbmdoYnJhckBnbWFpbC5jb20+Iik7Cj4gK01PRFVMRV9ERVNDUklQVElPTigiU2Ftc3VuZyBB U29DIElETUEgRHJpdmVyIik7Cj4gK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKPiBkaWZmIC0tZ2l0 IGEvc291bmQvc29jL3NhbXN1bmcvaWRtYS5oIGIvc291bmQvc29jL3NhbXN1bmcvaWRtYS5oCj4g bmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi40ODI3MzIxCj4gLS0tIC9kZXYv bnVsbAo+ICsrKyBiL3NvdW5kL3NvYy9zYW1zdW5nL2lkbWEuaAo+IEBAIC0wLDAgKzEsMjYgQEAK PiArLyoKPiArICogc291bmQvc29jL3NhbXN1bmcvaWRtYS5oCj4gKyAqCj4gKyAqIENvcHlyaWdo dCAoYykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkCj4gKyAqIMKgIMKgIMKgIMKg IMKgIMKgIGh0dHA6Ly93d3cuc2Ftc3VuZy5jb20KPiArICoKPiArICogwqBUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgwqBpdCBhbmQvb3IgbW9kaWZ5 IGl0Cj4gKyAqIMKgdW5kZXIgwqB0aGUgdGVybXMgb2YgwqB0aGUgR05VIEdlbmVyYWwgwqBQdWJs aWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCj4gKyAqIMKgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyDCoGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIMKgTGljZW5zZSwgb3IgKGF0IHlvdXIK PiArICogwqBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgo+ICsgKgo+ICsgKi8KPiArCj4gKyNp Zm5kZWYgX19TTkRfU09DX1NBTVNVTkdfSURNQV9IXwo+ICsjZGVmaW5lIF9fU05EX1NPQ19TQU1T VU5HX0lETUFfSF8KPiArCj4gK2V4dGVybiB2b2lkIGlkbWFfcmVnX2FkZHJfaW5pdCh2b2lkICpy ZWdzLCBkbWFfYWRkcl90IGFkZHIpOwo+ICsKPiArLyogZG1hX3N0YXRlICovCj4gKyNkZWZpbmUg TFBBTV9ETUFfU1RPUCDCoDAKPiArI2RlZmluZSBMUEFNX0RNQV9TVEFSVCAxCj4gKwo+ICsjZGVm aW5lIE1BWF9JRE1BX1BFUklPRCAoMTI4ICogMTAyNCkKPiArI2RlZmluZSBNQVhfSURNQV9CVUZG RVIgKDE2MCAqIDEwMjQpCj4gKwo+ICsjZW5kaWYgLyogX19TTkRfU09DX1NBTVNVTkdfSURNQV9I XyAqLwo+IC0tCj4gMS43LjEKPgo+Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCkFsc2EtZGV2ZWwgbWFpbGluZyBsaXN0CkFsc2EtZGV2ZWxAYWxzYS1wcm9q ZWN0Lm9yZwpodHRwOi8vbWFpbG1hbi5hbHNhLXByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8v YWxzYS1kZXZlbAo=