From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Rafael J. Wysocki" Subject: Re: [PATCH 1/8] PM: Add suspend block api. Date: Thu, 30 Apr 2009 00:34:08 +0200 Message-ID: <200904300034.09837.rjw@sisk.pl> References: <1239759692-28617-1-git-send-email-arve@android.com> <1239759692-28617-2-git-send-email-arve@android.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1239759692-28617-2-git-send-email-arve@android.com> Content-Disposition: inline List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: linux-pm-bounces@lists.linux-foundation.org Errors-To: linux-pm-bounces@lists.linux-foundation.org To: Arve =?utf-8?q?Hj=C3=B8nnev=C3=A5g?= Cc: ncunningham@crca.org.au, u.luckas@road.de, swetland@google.com, linux-pm@lists.linux-foundation.org List-Id: linux-pm@vger.kernel.org T24gV2VkbmVzZGF5IDE1IEFwcmlsIDIwMDksIEFydmUgSGrDuG5uZXbDpWcgd3JvdGU6Cj4gQWRk cyAvc3lzL3Bvd2VyL3JlcXVlc3Rfc3RhdGUsIGEgbm9uLWJsb2NraW5nIGludGVyZmFjZSB0aGF0 IHNwZWNpZmllcwo+IHdoaWNoIHN1c3BlbmQgc3RhdGUgdG8gZW50ZXIgd2hlbiBubyBzdXNwZW5k IGJsb2NrZXJzIGFyZSBhY3RpdmUuIEEKPiBzcGVjaWFsIHN0YXRlLCAib24iLCBzdG9wcyB0aGUg cHJvY2VzcyBieSBhY3RpdmF0aW5nIHRoZSAibWFpbiIgc3VzcGVuZAo+IGJsb2NrZXIuCgpGaW5h bGx5IEkgaGF2ZSBzb21lIHRpbWUgdG8gbG9vayBhdCB0aGlzIG1vcmUgdGhvcm91Z2hseSwgc29y cnkgZm9yIHRoZSBsb25nCmRlbGF5LgoKSSdsbCB0cnkgbm90IHRvIHJlcGVhdGUgdGhlIG90aGVy cycgY29tbWVudHMsIGJ1dCBJIGd1ZXNzIHRoYXQgbWF5IG5vdCBiZQp0b3RhbGx5IGF2b2lkYWJs ZS4KCj4gU2lnbmVkLW9mZi1ieTogQXJ2ZSBIasO4bm5ldsOlZyA8YXJ2ZUBhbmRyb2lkLmNvbT4K PiAtLS0KPiAgRG9jdW1lbnRhdGlvbi9wb3dlci9zdXNwZW5kLWJsb2NrZXJzLnR4dCB8ICAgNzYg KysrKysrKysrCj4gIGluY2x1ZGUvbGludXgvc3VzcGVuZF9ibG9jay5oICAgICAgICAgICAgfCAg IDYxICsrKysrKysKPiAga2VybmVsL3Bvd2VyL0tjb25maWcgICAgICAgICAgICAgICAgICAgICB8 ICAgMTAgKysKPiAga2VybmVsL3Bvd2VyL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICB8ICAg IDEgKwo+ICBrZXJuZWwvcG93ZXIvbWFpbi5jICAgICAgICAgICAgICAgICAgICAgIHwgICA2MiAr KysrKysrCj4gIGtlcm5lbC9wb3dlci9wb3dlci5oICAgICAgICAgICAgICAgICAgICAgfCAgICA2 ICsKPiAga2VybmVsL3Bvd2VyL3N1c3BlbmRfYmxvY2suYyAgICAgICAgICAgICB8ICAyNTcgKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIDcgZmlsZXMgY2hhbmdlZCwgNDczIGluc2Vy dGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBEb2N1bWVudGF0 aW9uL3Bvd2VyL3N1c3BlbmQtYmxvY2tlcnMudHh0Cj4gIGNyZWF0ZSBtb2RlIDEwMDc1NSBpbmNs dWRlL2xpbnV4L3N1c3BlbmRfYmxvY2suaAo+ICBjcmVhdGUgbW9kZSAxMDA2NDQga2VybmVsL3Bv d2VyL3N1c3BlbmRfYmxvY2suYwo+IAo+IGRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2Vy L3N1c3BlbmQtYmxvY2tlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlci9zdXNwZW5kLWJsb2Nr ZXJzLnR4dAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uNzQzYjg3MAo+ IC0tLSAvZGV2L251bGwKPiArKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VyL3N1c3BlbmQtYmxvY2tl cnMudHh0Cj4gQEAgLTAsMCArMSw3NiBAQAo+ICtTdXNwZW5kIGJsb2NrZXJzCj4gKz09PT09PT09 PT09PT09PT0KPiArCj4gK0Egc3VzcGVuZF9ibG9ja2VyIHByZXZlbnRzIHRoZSBzeXN0ZW0gZnJv bSBlbnRlcmluZyBzdXNwZW5kLgoKSSdkIHNheSAic3VzcGVuZCBibG9ja2VyIiwgd2l0aG91dCB0 aGUgdW5kZXJzY29yZS4KCkFsc28sIEknZCB0cnkgdG8gcHJvdmlkZSBhIGdlbmVyYWwgZXhwbGFu YXRpb24gb2YgaG93IHRoaXMgaXMgc3VwcG9zZWQgdG8Kd29yayBoZXJlLCBhcyBhbiBpbnRyb2R1 Y3Rpb24uICBTb21ldGhpbmcgbGlrZToKCiJTdXNwZW5kIGJsb2NrZXJzIHByb3ZpZGUgYSBtZWNo YW5pc20gYWxsb3dpbmcgZGV2aWNlIGRyaXZlcnMgYW5kIHVzZXIKc3BhY2UgcHJvY2Vzc2VzIHRv IHByZXZlbnQgdGhlIHN5c3RlbSBmcm9tIGVudGVyaW5nIGEgc2xlZXAgc3RhdGUsIHN1Y2ggYXMK dGhlIEFDUEkgUzMgc3RhdGUuCgpUbyB1c2UgYSBzdXNwZW5kIGJsb2NrZXIsIGEgZGV2aWNlIGRy aXZlciBuZWVkcyBhIHN0cnVjdCBzdXNwZW5kX2Jsb2NrZXIgb2JqZWN0CnRoYXQgaGFzIHRvIGJl IGluaXRpYWxpemVkIHdpdGggdGhlIGhlbHAgb2Ygc3VzcGVuZF9ibG9ja2VyX2luaXQoKS4gIFdo ZW4gbm8KbG9uZ2VyIG5lZWRlZCwgdGhlIHN1c3BlbmQgYmxvY2tlciBtdXN0IGJlIGdhcmJhZ2Ug Y29sbGVjdGVkIHdpdGggdGhlIGhlbHAKb2Ygc3VzcGVuZF9ibG9ja2VyX2Rlc3Ryb3koKS4KCkEg c3VzcGVuZCBibG9ja2VyIGlzIGFjdGl2YXRlZCB1c2luZyBzdXNwZW5kX2Jsb2NrKCksIHdoaWNo IHByZXZlbnRzIHRoZQpzeXN0ZW0gZnJvbSBlbnRlcmluZyBhbnkgc2xlZXAgc3RhdGUgdW50aWwg dGhlIHN1c3BlbmQgYmxvY2tlciBpcyBkZWFjdGl2YXRlZAp3aXRoIHN1c3BlbmRfdW5ibG9jaygp LiAgTWFueSBzdXNwZW5kIGJsb2NrZXJzIG1heSBiZSB1c2VkIHNpbXVsdGFuZW91c2x5CmFuZCB0 aGUgc3lzdGVtIGlzIHByZXZlbnRlZCBmcm9tIGVudGVyaW5nIHNsZWVwIHN0YXRlcyBhcyBsb25n IGFzIGF0IGxlYXN0IG9uZQpvZiB0aGVtIGlzIGFjdGl2ZS4iCgpCVFcsIEkgZG9uJ3QgcmVhbGx5 IGxpa2UgdGhlIG5hbWVzICJzdXNwZW5kX2Jsb2NrIiBhbmQgInN1c3BlbmRfdW5ibG9jayIuClNl ZSBiZWxvdyBmb3IgcG9zc2libGUgYWx0ZXJuYXRpdmVzLgoKPiArSWYgdGhlIHN1c3BlbmQgb3Bl cmF0aW9uIGhhcyBhbHJlYWR5IHN0YXJ0ZWQgd2hlbiBjYWxsaW5nIHN1c3BlbmRfYmxvY2sgb24g YQo+ICtzdXNwZW5kX2Jsb2NrZXIsIGl0IHdpbGwgYWJvcnQgdGhlIHN1c3BlbmQgb3BlcmF0aW9u IGFzIGxvbmcgaXQgaGFzIG5vdCBhbHJlYWR5Cj4gK3JlYWNoZWQgdGhlIHN5c2RldiBzdXNwZW5k IHN0YWdlLiBUaGlzIG1lYW5zIHRoYXQgY2FsbGluZyBzdXNwZW5kX2Jsb2NrIGZyb20gYW4KPiAr aW50ZXJydXB0IGhhbmRsZXIgb3IgYSBmcmVlemVhYmxlIHRocmVhZCBhbHdheXMgd29ya3MsIGJ1 dCBpZiB5b3UgY2FsbAo+ICtibG9ja19zdXNwZW5kCgpTdXJlbHkgc3VzcGVuZF9ibG9jaygpID8K Cj4gZnJvbSBhIHN5c2RldiBzdXNwZW5kIGhhbmRsZXIgeW91IG11c3QgYWxzbyByZXR1cm4gYW4g ZXJyb3IgZnJvbQo+ICt0aGF0IGhhbmRsZXIgdG8gYWJvcnQgc3VzcGVuZC4KCldlbGwsIGlmIGEg c3lzZGV2IHN1c3BlbmQgaGFuZGxlciByZXR1cm5zIGFuIGVycm9yIGNvZGUsIHN1c3BlbmQgd2ls bCBiZQphYm9ydGVkIGFueXdheSwgc28gSSdtIG5vdCBzdXJlIHdoYXQgdGhlIHBvaW50IGluIHVz aW5nIHN1c3BlbmQgYmxvY2tlcnMgZnJvbQpzeXNkZXYgc3VzcGVuZCBoYW5kbGVycyByZWFsbHkg aXMuICBQZXJoYXBzIGl0J3MgYmV0dGVyIHRvIHNheSAiZG9uJ3QgdXNlCnN1c3BlbmQgYmxvY2tl cnMgZnJvbSB3aXRoaW5nIHN5c2RldiBzdXNwZW5kIGhhbmRsZXJzIj8KCj4gKwoKSSdkIHNheSAi Rm9yIGV4YW1wbGUiIGhlcmUuCgo+ICtTdXNwZW5kIGJsb2NrZXJzIGNhbiBiZSB1c2VkIHRvIGFs bG93IHVzZXItc3BhY2UgdG8gZGVjaWRlIHdoaWNoIGtleXMgc2hvdWxkCj4gK3dha2UgdGhlIGZ1 bGwgc3lzdGVtIHVwIGFuZCB0dXJuIHRoZSBzY3JlZW4gb24uIFVzZSBzZXRfaXJxX3dha2Ugb3Ig YSBwbGF0Zm9ybQo+ICtzcGVjaWZpYyBhcGkgdG8gbWFrZSBzdXJlIHRoZSBrZXlwYWQgaW50ZXJy dXB0IHdha2VzIHVwIHRoZSBjcHUuIE9uY2UgdGhlIGtleXBhZAo+ICtkcml2ZXIgaGFzIHJlc3Vt ZWQsIHRoZSBzZXF1ZW5jZSBvZiBldmVudHMgY2FuIGxvb2sgbGlrZSB0aGlzOgo+ICstIFRoZSBL ZXlwYWQgZHJpdmVyIGdldHMgYW4gaW50ZXJydXB0LiBJdCB0aGVuIGNhbGxzIHN1c3BlbmRfYmxv Y2sgb24gdGhlCj4gKyAga2V5cGFkLXNjYW4gc3VzcGVuZF9ibG9ja2VyIGFuZCBzdGFydHMgc2Nh bm5pbmcgdGhlIGtleXBhZCBtYXRyaXguCj4gKy0gVGhlIGtleXBhZC1zY2FuIGNvZGUgZGV0ZWN0 cyBhIGtleSBjaGFuZ2UgYW5kIHJlcG9ydHMgaXQgdG8gdGhlIGlucHV0LWV2ZW50Cj4gKyAgZHJp dmVyLgo+ICstIFRoZSBpbnB1dC1ldmVudCBkcml2ZXIgc2VlcyB0aGUga2V5IGNoYW5nZSwgZW5x dWV1ZXMgYW4gZXZlbnQsIGFuZCBjYWxscwo+ICsgIHN1c3BlbmRfYmxvY2sgb24gdGhlIGlucHV0 LWV2ZW50LXF1ZXVlIHN1c3BlbmRfYmxvY2tlci4KPiArLSBUaGUga2V5cGFkLXNjYW4gY29kZSBk ZXRlY3RzIHRoYXQgbm8ga2V5cyBhcmUgaGVsZCBhbmQgY2FsbHMgc3VzcGVuZF91bmJsb2NrCj4g KyAgb24gdGhlIGtleXBhZC1zY2FuIHN1c3BlbmRfYmxvY2tlci4KPiArLSBUaGUgdXNlci1zcGFj ZSBpbnB1dC1ldmVudCB0aHJlYWQgcmV0dXJucyBmcm9tIHNlbGVjdC9wb2xsLCBjYWxscwo+ICsg IHN1c3BlbmRfYmxvY2sgb24gdGhlIHByb2Nlc3MtaW5wdXQtZXZlbnRzIHN1c3BlbmRfYmxvY2tl ciBhbmQgdGhlbiBjYWxscyByZWFkCj4gKyAgb24gdGhlIGlucHV0LWV2ZW50IGRldmljZS4KPiAr LSBUaGUgaW5wdXQtZXZlbnQgZHJpdmVyIGRlcXVldWVzIHRoZSBrZXktZXZlbnQgYW5kLCBzaW5j ZSB0aGUgcXVldWUgaXMgbm93Cj4gKyAgZW1wdHksIGl0IGNhbGxzIHN1c3BlbmRfdW5ibG9jayBv biB0aGUgaW5wdXQtZXZlbnQtcXVldWUgc3VzcGVuZF9ibG9ja2VyLgo+ICstIFRoZSB1c2VyLXNw YWNlIGlucHV0LWV2ZW50IHRocmVhZCByZXR1cm5zIGZyb20gcmVhZC4gSXQgZGV0ZXJtaW5lcyB0 aGF0IHRoZQo+ICsgIGtleSBzaG91bGQgbm90IHdha2UgdXAgdGhlIGZ1bGwgc3lzdGVtLCBjYWxs cyBzdXNwZW5kX3VuYmxvY2sgb24gdGhlCj4gKyAgcHJvY2Vzcy1pbnB1dC1ldmVudHMgc3VzcGVu ZF9ibG9ja2VyIGFuZCBjYWxscyBzZWxlY3Qgb3IgcG9sbC4KPiArCj4gKyAgICAgICAgICAgICAg ICAgS2V5IHByZXNzZWQgICBLZXkgcmVsZWFzZWQKPiArICAgICAgICAgICAgICAgICAgICAgfCAg ICAgICAgICAgICB8Cj4gK2tleXBhZC1zY2FuICAgICAgICAgICsrKysrKysrKysrKysrKysrKwo+ ICtpbnB1dC1ldmVudC1xdWV1ZSAgICAgICAgKysrICAgICAgICAgICsrKwo+ICtwcm9jZXNzLWlu cHV0LWV2ZW50cyAgICAgICArKysgICAgICAgICAgKysrCj4gKwo+ICsKPiArRHJpdmVyIEFQSQo+ ICs9PT09PT09PT09Cj4gKwo+ICtBIGRyaXZlciBjYW4gdXNlIHRoZSBzdXNwZW5kIGJsb2NrIGFw aSBieSBhZGRpbmcgYSBzdXNwZW5kX2Jsb2NrZXIgdmFyaWFibGUgdG8KPiAraXRzIHN0YXRlIGFu ZCBjYWxsaW5nIHN1c3BlbmRfYmxvY2tlcl9pbml0LiBGb3IgaW5zdGFuY2U6Cj4gK3N0cnVjdCBz dGF0ZSB7Cj4gKwlzdHJ1Y3Qgc3VzcGVuZF9ibG9ja2VyIHN1c3BlbmRfYmxvY2tlcjsKPiArfQo+ ICsKPiAraW5pdCgpIHsKPiArCXN1c3BlbmRfYmxvY2tlcl9pbml0KCZzdGF0ZS0+c3VzcGVuZF9i bG9ja2VyLCAic3VzcGVuZC1ibG9ja2VyLW5hbWUiKTsKPiArfQo+ICsKPiArQmVmb3JlIGZyZWVp bmcgdGhlIG1lbW9yeSwgc3VzcGVuZF9ibG9ja2VyX2Rlc3Ryb3kgbXVzdCBiZSBjYWxsZWQ6Cj4g Kwo+ICt1bmluaXQoKSB7Cj4gKwlzdXNwZW5kX2Jsb2NrZXJfZGVzdHJveSgmc3RhdGUtPnN1c3Bl bmRfYmxvY2tlcik7Cj4gK30KPiArCj4gK1doZW4gdGhlIGRyaXZlciBkZXRlcm1pbmVzIHRoYXQg aXQgbmVlZHMgdG8gcnVuICh1c3VhbGx5IGluIGFuIGludGVycnVwdAo+ICtoYW5kbGVyKSBpdCBj YWxscyBzdXNwZW5kX2Jsb2NrOgo+ICsJc3VzcGVuZF9ibG9jaygmc3RhdGUtPnN1c3BlbmRfYmxv Y2tlcik7CgpzdXNwZW5kX2Jsb2NrZXJfYWN0aXZhdGUoKSA/CnN1c3BlbmRfYmxvY2tlcl9lbmFi bGUoKSA/CnN1c3BlbmRfYmxvY2tlcl9zdGFydCgpID8KCj4gKwo+ICtXaGVuIGl0IG5vIGxvbmdl ciBuZWVkcyB0byBydW4gaXQgY2FsbHMgc3VzcGVuZF91bmJsb2NrOgo+ICsJc3VzcGVuZF91bmJs b2NrKCZzdGF0ZS0+c3VzcGVuZF9ibG9ja2VyKTsKCnN1c3BlbmRfYmxvY2tlcl9kZWFjdGl2YXRl KCkgPwpzdXNwZW5kX2Jsb2NrZXJfZGlzYWJsZSgpID8Kc3VzcGVuZF9ibG9ja2VyX2ZpbmlzaCgp ID8KCj4gKwo+ICtDYWxsaW5nIHN1c3BlbmRfYmxvY2sgd2hlbiB0aGUgc3VzcGVuZCBibG9ja2Vy IGlzIGFjdGl2ZSBvciBzdXNwZW5kX3VuYmxvY2sgd2hlbgo+ICtpdCBpcyBub3QgYWN0aXZlIGhh cyBubyBlZmZlY3QuIFRoaXMgYWxsb3dzIGRyaXZlcnMgdG8gdXBkYXRlIHRoZWlyIHN0YXRlIGFu ZAo+ICtjYWxsIHN1c3BlbmQgc3VzcGVuZF9ibG9jayBvciBzdXNwZW5kX3VuYmxvY2sgYmFzZWQg b24gdGhlIHJlc3VsdC4KPiArRm9yIGluc3RhbmNlOgo+ICsKPiAraWYgKGxpc3RfZW1wdHkoJnN0 YXRlLT5wZW5kaW5nX3dvcmspKQo+ICsJc3VzcGVuZF91bmJsb2NrKCZzdGF0ZS0+c3VzcGVuZF9i bG9ja2VyKTsKPiArZWxzZQo+ICsJc3VzcGVuZF9ibG9jaygmc3RhdGUtPnN1c3BlbmRfYmxvY2tl cik7Cj4gKwo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1c3BlbmRfYmxvY2suaCBiL2lu Y2x1ZGUvbGludXgvc3VzcGVuZF9ibG9jay5oCj4gbmV3IGZpbGUgbW9kZSAxMDA3NTUKPiBpbmRl eCAwMDAwMDAwLi43ODIwYzYwCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2luY2x1ZGUvbGludXgv c3VzcGVuZF9ibG9jay5oCgpzdXNwZW5kX2Jsb2NrZXJzLmggcGVyaGFwcz8KCj4gQEAgLTAsMCAr MSw2MSBAQAo+ICsvKiBpbmNsdWRlL2xpbnV4L3N1c3BlbmRfYmxvY2suaAo+ICsgKgo+ICsgKiBD b3B5cmlnaHQgKEMpIDIwMDctMjAwOSBHb29nbGUsIEluYy4KPiArICoKPiArICogVGhpcyBzb2Z0 d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp Ywo+ICsgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24sIGFuZAo+ICsgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5k IG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiArICogYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZQo+ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLgo+ICsgKgo+ICsgKi8KPiArCj4gKyNpZm5kZWYgX0xJTlVYX1NVU1BFTkRfQkxPQ0tf SAo+ICsjZGVmaW5lIF9MSU5VWF9TVVNQRU5EX0JMT0NLX0gKClNVU1BFTkRfQkxPQ0tFUlNfSCA/ Cgo+ICsKPiArLyogQSBzdXNwZW5kX2Jsb2NrZXIgcHJldmVudHMgdGhlIHN5c3RlbSBmcm9tIGVu dGVyaW5nIHN1c3BlbmQgd2hlbiBhY3RpdmUuCj4gKyAqLwo+ICsKPiArc3RydWN0IHN1c3BlbmRf YmxvY2tlciB7Cj4gKyNpZmRlZiBDT05GSUdfU1VTUEVORF9CTE9DSwoKQ09ORklHX1NVU1BFTkRf QkxPQ0tFUlMgPwoKPiArCWF0b21pY190ICAgICAgICAgICAgZmxhZ3M7Cj4gKwljb25zdCBjaGFy ICAgICAgICAgKm5hbWU7Cj4gKyNlbmRpZgo+ICt9Owo+ICsKPiArI2lmZGVmIENPTkZJR19TVVNQ RU5EX0JMT0NLCj4gKwo+ICt2b2lkIHN1c3BlbmRfYmxvY2tlcl9pbml0KHN0cnVjdCBzdXNwZW5k X2Jsb2NrZXIgKmJsb2NrZXIsIGNvbnN0IGNoYXIgKm5hbWUpOwo+ICt2b2lkIHN1c3BlbmRfYmxv Y2tlcl9kZXN0cm95KHN0cnVjdCBzdXNwZW5kX2Jsb2NrZXIgKmJsb2NrZXIpOwo+ICt2b2lkIHN1 c3BlbmRfYmxvY2soc3RydWN0IHN1c3BlbmRfYmxvY2tlciAqYmxvY2tlcik7Cj4gK3ZvaWQgc3Vz cGVuZF91bmJsb2NrKHN0cnVjdCBzdXNwZW5kX2Jsb2NrZXIgKmJsb2NrZXIpOwo+ICsKPiArLyog aXNfYmxvY2tpbmdfc3VzcGVuZCByZXR1cm5zIHRydWUgaWYgdGhlIHN1c3BlbmRfYmxvY2tlciBp cyBjdXJyZW50bHkgYWN0aXZlLgo+ICsgKi8KPiArYm9vbCBpc19ibG9ja2luZ19zdXNwZW5kKHN0 cnVjdCBzdXNwZW5kX2Jsb2NrZXIgKmJsb2NrZXIpOwoKc3VzcGVuZF9ibG9ja2VyX2lzX2FjdGl2 ZSgpID8Kc3VzcGVuZF9ibG9ja2VyX2VuYWJsZWQoKSA/Cgo+ICsKPiArLyogc3VzcGVuZF9pc19i bG9ja2VkIGNhbiBiZSB1c2VkIGJ5IGdlbmVyaWMgcG93ZXIgbWFuYWdlbWVudCBjb2RlIHRvIGFi b3J0Cj4gKyAqIHN1c3BlbmQuCj4gKyAqCj4gKyAqIFRvIHByZXNlcnZlIGJhY2t3YXJkIGNvbXBh dGliaWxpdHkgc3VzcGVuZF9pc19ibG9ja2VkIHJldHVybnMgMCB1bmxlc3MgaXQKPiArICogaXMg Y2FsbGVkIGR1cmluZyBzdXNwZW5kIGluaXRpYXRlZCBmcm9tIHRoZSBzdXNwZW5kX2Jsb2NrIGNv ZGUuCj4gKyAqLwo+ICtib29sIHN1c3BlbmRfaXNfYmxvY2tlZCh2b2lkKTsKPiArCj4gKyNlbHNl Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHZvaWQgc3VzcGVuZF9ibG9ja2VyX2luaXQoc3RydWN0IHN1 c3BlbmRfYmxvY2tlciAqYmxvY2tlciwKPiArCQkJCQljb25zdCBjaGFyICpuYW1lKSB7fQo+ICtz dGF0aWMgaW5saW5lIHZvaWQgc3VzcGVuZF9ibG9ja2VyX2Rlc3Ryb3koc3RydWN0IHN1c3BlbmRf YmxvY2tlciAqYmxvY2tlcikge30KPiArc3RhdGljIGlubGluZSB2b2lkIHN1c3BlbmRfYmxvY2so c3RydWN0IHN1c3BlbmRfYmxvY2tlciAqYmxvY2tlcikge30KPiArc3RhdGljIGlubGluZSB2b2lk IHN1c3BlbmRfdW5ibG9jayhzdHJ1Y3Qgc3VzcGVuZF9ibG9ja2VyICpibG9ja2VyKSB7fQo+ICtz dGF0aWMgaW5saW5lIGJvb2wgaXNfYmxvY2tpbmdfc3VzcGVuZChzdHJ1Y3Qgc3VzcGVuZF9ibG9j a2VyICpibCkgeyByZXR1cm4gMDsgfQo+ICtzdGF0aWMgaW5saW5lIGJvb2wgc3VzcGVuZF9pc19i bG9ja2VkKHZvaWQpIHsgcmV0dXJuIDA7IH0KPiArCj4gKyNlbmRpZgo+ICsKPiArI2VuZGlmCj4g Kwo+IGRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvS2NvbmZpZyBiL2tlcm5lbC9wb3dlci9LY29u ZmlnCj4gaW5kZXggMjNiZDRkYS4uOWQxZGYxMyAxMDA2NDQKPiAtLS0gYS9rZXJuZWwvcG93ZXIv S2NvbmZpZwo+ICsrKyBiL2tlcm5lbC9wb3dlci9LY29uZmlnCj4gQEAgLTExNiw2ICsxMTYsMTYg QEAgY29uZmlnIFNVU1BFTkRfRlJFRVpFUgo+ICAKPiAgCSAgVHVybmluZyBPRkYgdGhpcyBzZXR0 aW5nIGlzIE5PVCByZWNvbW1lbmRlZCEgSWYgaW4gZG91YnQsIHNheSBZLgo+ICAKPiArY29uZmln IFNVU1BFTkRfQkxPQ0sKPiArCWJvb2wgIlN1c3BlbmQgYmxvY2siCj4gKwlkZXBlbmRzIG9uIFBN Cj4gKwlzZWxlY3QgUlRDX0xJQgoKZGVwZW5kcyBvbiBSVENfTElCCgpzZWxlY3QgZG9lc24ndCBy ZWFsbHkgd29yayBhbmQgSSBkb24ndCB0aGluayBpdCBldmVyIHdpbGwuCgo+ICsJZGVmYXVsdCBu Cj4gKwktLS1oZWxwLS0tCj4gKwkgIEVuYWJsZSBzdXNwZW5kX2Jsb2NrLgoKRW5hYmxlIHN1c3Bl bmQgYmxvY2tlcnMuCgo+IFdoZW4gdXNlciBzcGFjZSByZXF1ZXN0cyBhIHNsZWVwIHN0YXRlIHRo cm91Z2gKPiArCSAgL3N5cy9wb3dlci9yZXF1ZXN0X3N0YXRlLCB0aGUgcmVxdWVzdGVkIHNsZWVw IHN0YXRlIHdpbGwgYmUgZW50ZXJlZAo+ICsJICB3aGVuIG5vIHN1c3BlbmRfYmxvY2tlcnMgYXJl IGFjdGl2ZS4KCldlbGwsIGlmIHlvdSBkb24ndCB3YW50IHN1c3BlbmQgYmxvY2tlcnMgdG8gYmxv Y2sgc3VzcGVuZCBzdGFydGVkIHZpYQovc3lzL3Bvd2VyL3N0YXRlLCBpdCdzIHdvcnRoIG1ha2lu ZyBpdCBjcnlzdGFsIGNsZWFyIGluIHRoZSBkb2N1bWVudGF0aW9uIHRvby4KCj4gKwo+ICBjb25m aWcgSElCRVJOQVRJT04KPiAgCWJvb2wgIkhpYmVybmF0aW9uIChha2EgJ3N1c3BlbmQgdG8gZGlz aycpIgo+ICAJZGVwZW5kcyBvbiBQTSAmJiBTV0FQICYmIEFSQ0hfSElCRVJOQVRJT05fUE9TU0lC TEUKPiBkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL01ha2VmaWxlIGIva2VybmVsL3Bvd2VyL01h a2VmaWxlCj4gaW5kZXggNzIwZWE0Zi4uMjljZGM5ZSAxMDA2NDQKPiAtLS0gYS9rZXJuZWwvcG93 ZXIvTWFrZWZpbGUKPiArKysgYi9rZXJuZWwvcG93ZXIvTWFrZWZpbGUKPiBAQCAtNiw2ICs2LDcg QEAgZW5kaWYKPiAgb2JqLSQoQ09ORklHX1BNKQkJKz0gbWFpbi5vCj4gIG9iai0kKENPTkZJR19Q TV9TTEVFUCkJCSs9IGNvbnNvbGUubwo+ICBvYmotJChDT05GSUdfRlJFRVpFUikJCSs9IHByb2Nl c3Mubwo+ICtvYmotJChDT05GSUdfU1VTUEVORF9CTE9DSykJKz0gc3VzcGVuZF9ibG9jay5vCj4g IG9iai0kKENPTkZJR19ISUJFUk5BVElPTikJKz0gc3dzdXNwLm8gZGlzay5vIHNuYXBzaG90Lm8g c3dhcC5vIHVzZXIubwo+ICAKPiAgb2JqLSQoQ09ORklHX01BR0lDX1NZU1JRKQkrPSBwb3dlcm9m Zi5vCj4gZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9tYWluLmMgYi9rZXJuZWwvcG93ZXIvbWFp bi5jCj4gaW5kZXggYzk2MzJmOC4uZTRjNmIyMCAxMDA2NDQKPiAtLS0gYS9rZXJuZWwvcG93ZXIv bWFpbi5jCj4gKysrIGIva2VybmVsL3Bvd2VyL21haW4uYwo+IEBAIC0yMiw2ICsyMiw3IEBACj4g ICNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+Cj4gICNpbmNsdWRlIDxsaW51eC92bXN0YXQuaD4K PiAgI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9zdXNwZW5k X2Jsb2NrLmg+Cj4gIAo+ICAjaW5jbHVkZSAicG93ZXIuaCIKPiAgCj4gQEAgLTM5Miw2ICszOTMs OSBAQCBzdGF0aWMgdm9pZCBzdXNwZW5kX2ZpbmlzaCh2b2lkKQo+ICAKPiAgCj4gIHN0YXRpYyBj b25zdCBjaGFyICogY29uc3QgcG1fc3RhdGVzW1BNX1NVU1BFTkRfTUFYXSA9IHsKPiArI2lmZGVm IENPTkZJR19TVVNQRU5EX0JMT0NLCj4gKwlbUE1fU1VTUEVORF9PTl0JCT0gIm9uIiwKPiArI2Vu ZGlmCgpXaHkgI2lmZGVmPwoKPiAgCVtQTV9TVVNQRU5EX1NUQU5EQlldCT0gInN0YW5kYnkiLAo+ ICAJW1BNX1NVU1BFTkRfTUVNXQk9ICJtZW0iLAo+ICB9Owo+IEBAIC01NDAsNiArNTQ0LDYxIEBA IHN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qg a29ial9hdHRyaWJ1dGUgKmF0dHIsCj4gIAo+ICBwb3dlcl9hdHRyKHN0YXRlKTsKPiAgCj4gKy8q Kgo+ICsgKglyZXF1ZXN0X3N0YXRlIC0gY29udHJvbCBzeXN0ZW0gcG93ZXIgc3RhdGUuCj4gKyAq Cj4gKyAqCVRoaXMgaXMgc2ltaWxhciB0byBzdGF0ZSwgYnV0IGl0IGRvZXMgbm90IGJsb2NrIHVu dGlsIHRoZSBzeXN0ZW0KPiArICoJcmVzdW1lcywgYW5kIGl0IHdpbGwgdHJ5IHRvIHJlLWVudGVy IHRoZSBzdGF0ZSB1bnRpbCBhbm90aGVyIHN0YXRlIGlzCj4gKyAqCXJlcXVlc3RlZC4gU3VzcGVu ZCBibG9ja2VycyBhcmUgcmVzcGVjdGVkIGFuZCB0aGUgcmVxdWVzdGVkIHN0YXRlIHdpbGwKPiAr ICoJb25seSBiZSBlbnRlcmVkIHdoZW4gbm8gc3VzcGVuZCBibG9ja2VycyBhcmUgYWN0aXZlLgo+ ICsgKglXcml0ZSAib24iIHRvIGNhbmNlbC4KPiArICovCj4gKwo+ICsjaWZkZWYgQ09ORklHX1NV U1BFTkRfQkxPQ0sKPiArc3RhdGljIHNzaXplX3QgcmVxdWVzdF9zdGF0ZV9zaG93KHN0cnVjdCBr b2JqZWN0ICprb2JqLAo+ICsJCQkJICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIg KmJ1ZikKPiArewo+ICsJY2hhciAqcyA9IGJ1ZjsKPiArCWludCBpOwo+ICsKPiArCWZvciAoaSA9 IDA7IGkgPCBQTV9TVVNQRU5EX01BWDsgaSsrKSB7Cj4gKwkJaWYgKHBtX3N0YXRlc1tpXSAmJiAo aSA9PSBQTV9TVVNQRU5EX09OIHx8IHZhbGlkX3N0YXRlKGkpKSkKPiArCQkJcyArPSBzcHJpbnRm KHMsICIlcyAiLCBwbV9zdGF0ZXNbaV0pOwo+ICsJfQo+ICsJaWYgKHMgIT0gYnVmKQo+ICsJCS8q IGNvbnZlcnQgdGhlIGxhc3Qgc3BhY2UgdG8gYSBuZXdsaW5lICovCj4gKwkJKihzLTEpID0gJ1xu JzsKPiArCXJldHVybiAocyAtIGJ1Zik7Cj4gK30KPiArCj4gK3N0YXRpYyBzc2l6ZV90IHJlcXVl c3Rfc3RhdGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosCj4gKwkJCQkgICBzdHJ1Y3Qga29i al9hdHRyaWJ1dGUgKmF0dHIsCj4gKwkJCQkgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBuKQo+ ICt7Cj4gKwlzdXNwZW5kX3N0YXRlX3Qgc3RhdGUgPSBQTV9TVVNQRU5EX09OOwo+ICsJY29uc3Qg Y2hhciAqIGNvbnN0ICpzOwo+ICsJY2hhciAqcDsKPiArCWludCBsZW47Cj4gKwlpbnQgZXJyb3Ig PSAtRUlOVkFMOwo+ICsKPiArCXAgPSBtZW1jaHIoYnVmLCAnXG4nLCBuKTsKPiArCWxlbiA9IHAg PyBwIC0gYnVmIDogbjsKPiArCj4gKwlmb3IgKHMgPSAmcG1fc3RhdGVzW3N0YXRlXTsgc3RhdGUg PCBQTV9TVVNQRU5EX01BWDsgcysrLCBzdGF0ZSsrKSB7Cj4gKwkJaWYgKCpzICYmIGxlbiA9PSBz dHJsZW4oKnMpICYmICFzdHJuY21wKGJ1ZiwgKnMsIGxlbikpCj4gKwkJCWJyZWFrOwo+ICsJfQo+ ICsJaWYgKHN0YXRlIDwgUE1fU1VTUEVORF9NQVggJiYgKnMpCj4gKwkJaWYgKHN0YXRlID09IFBN X1NVU1BFTkRfT04gfHwgdmFsaWRfc3RhdGUoc3RhdGUpKSB7Cj4gKwkJCWVycm9yID0gMDsKPiAr CQkJcmVxdWVzdF9zdXNwZW5kX3N0YXRlKHN0YXRlKTsKPiArCQl9Cj4gKwlyZXR1cm4gZXJyb3Ig PyBlcnJvciA6IG47Cj4gK30KPiArCj4gK3Bvd2VyX2F0dHIocmVxdWVzdF9zdGF0ZSk7Cj4gKyNl bmRpZiAvKiBDT05GSUdfU1VTUEVORF9CTE9DSyAqLwo+ICsKPiAgI2lmZGVmIENPTkZJR19QTV9U UkFDRQo+ICBpbnQgcG1fdHJhY2VfZW5hYmxlZDsKPiAgCj4gQEAgLTU2Nyw2ICs2MjYsOSBAQCBw b3dlcl9hdHRyKHBtX3RyYWNlKTsKPiAgCj4gIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICogZ1td ID0gewo+ICAJJnN0YXRlX2F0dHIuYXR0ciwKPiArI2lmZGVmIENPTkZJR19TVVNQRU5EX0JMT0NL Cj4gKwkmcmVxdWVzdF9zdGF0ZV9hdHRyLmF0dHIsCj4gKyNlbmRpZgo+ICAjaWZkZWYgQ09ORklH X1BNX1RSQUNFCj4gIAkmcG1fdHJhY2VfYXR0ci5hdHRyLAo+ICAjZW5kaWYKPiBkaWZmIC0tZ2l0 IGEva2VybmVsL3Bvd2VyL3Bvd2VyLmggYi9rZXJuZWwvcG93ZXIvcG93ZXIuaAo+IGluZGV4IDQ2 YjVlYzcuLjI0MTRhNzQgMTAwNjQ0Cj4gLS0tIGEva2VybmVsL3Bvd2VyL3Bvd2VyLmgKPiArKysg Yi9rZXJuZWwvcG93ZXIvcG93ZXIuaAo+IEBAIC0yMjMsMyArMjIzLDkgQEAgc3RhdGljIGlubGlu ZSB2b2lkIHN1c3BlbmRfdGhhd19wcm9jZXNzZXModm9pZCkKPiAgewo+ICB9Cj4gICNlbmRpZgo+ ICsKPiArI2lmZGVmIENPTkZJR19TVVNQRU5EX0JMT0NLCj4gKy8qIGtlcm5lbC9wb3dlci9zdXNw ZW5kX2Jsb2NrLmMgKi8KPiArdm9pZCByZXF1ZXN0X3N1c3BlbmRfc3RhdGUoc3VzcGVuZF9zdGF0 ZV90IHN0YXRlKTsKPiArI2VuZGlmCgpJcyB0aGUgI2lmZGVmIHJlYWxseSBuZWNlc3Nhcnk/Cgo+ ICsKPiBkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL3N1c3BlbmRfYmxvY2suYyBiL2tlcm5lbC9w b3dlci9zdXNwZW5kX2Jsb2NrLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAw MDAuLmI0ZjIxOTEKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIva2VybmVsL3Bvd2VyL3N1c3BlbmRf YmxvY2suYwo+IEBAIC0wLDAgKzEsMjU3IEBACj4gKy8qIGtlcm5lbC9wb3dlci9zdXNwZW5kX2Js b2NrLmMKPiArICoKPiArICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDggR29vZ2xlLCBJbmMuCj4g KyAqCj4gKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMKPiArICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hl ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKPiArICogbWF5IGJlIGNvcGll ZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KPiArICoKPiAr ICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsCj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKPiArICogR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiArICoKPiArICovCj4gKwo+ICsjaW5jbHVkZSA8 bGludXgvbW9kdWxlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9ydGMuaD4KPiArI2luY2x1ZGUgPGxp bnV4L3N1c3BlbmQuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmRfYmxvY2suaD4KPiArI2lu Y2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgo+ICsjaW5jbHVkZSAicG93ZXIuaCIKPiArCj4gK2VudW0g ewo+ICsJREVCVUdfRVhJVF9TVVNQRU5EID0gMVUgPDwgMCwKPiArCURFQlVHX1dBS0VVUCA9IDFV IDw8IDEsCj4gKwlERUJVR19VU0VSX1NUQVRFID0gMVUgPDwgMiwKPiArCURFQlVHX1NVU1BFTkQg PSAxVSA8PCAzLAo+ICsJREVCVUdfU1VTUEVORF9CTE9DS0VSID0gMVUgPDwgNCwKPiArfTsKPiAr c3RhdGljIGludCBkZWJ1Z19tYXNrID0gREVCVUdfRVhJVF9TVVNQRU5EIHwgREVCVUdfV0FLRVVQ IHwgREVCVUdfVVNFUl9TVEFURTsKPiArbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnX21hc2ssIGRl YnVnX21hc2ssIGludCwgU19JUlVHTyB8IFNfSVdVU1IgfCBTX0lXR1JQKTsKPiArCj4gKyNkZWZp bmUgU0JfSU5JVElBTElaRUQgICAgICAgICAgICAoMVUgPDwgOCkKPiArI2RlZmluZSBTQl9BQ1RJ VkUgICAgICAgICAgICAgICAgICgxVSA8PCA5KQo+ICsKPiArc3RhdGljIERFRklORV9TUElOTE9D SyhzdGF0ZV9sb2NrKTsKPiArc3RhdGljIGF0b21pY190IHN1c3BlbmRfYmxvY2tfY291bnQ7Cj4g K3N0YXRpYyBhdG9taWNfdCBjdXJyZW50X2V2ZW50X251bTsKPiArc3RydWN0IHdvcmtxdWV1ZV9z dHJ1Y3QgKnN1c3BlbmRfd29ya19xdWV1ZTsKPiArc3RydWN0IHN1c3BlbmRfYmxvY2tlciBtYWlu X3N1c3BlbmRfYmxvY2tlcjsKPiArc3RhdGljIHN1c3BlbmRfc3RhdGVfdCByZXF1ZXN0ZWRfc3Vz cGVuZF9zdGF0ZSA9IFBNX1NVU1BFTkRfTUVNOwo+ICtzdGF0aWMgYm9vbCBlbmFibGVfc3VzcGVu ZF9ibG9ja2VyczsKPiArCj4gK2Jvb2wgc3VzcGVuZF9pc19ibG9ja2VkKHZvaWQpCj4gK3sKPiAr CWlmIChXQVJOX09OQ0UoIWVuYWJsZV9zdXNwZW5kX2Jsb2NrZXJzLCAiaWdub3Jpbmcgc3VzcGVu ZCBibG9ja2Vyc1xuIikpCj4gKwkJcmV0dXJuIDA7Cj4gKwlyZXR1cm4gISFhdG9taWNfcmVhZCgm c3VzcGVuZF9ibG9ja19jb3VudCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHN1c3BlbmRfd29y a2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKPiArewo+ICsJaW50IHJldDsKPiArCWludCBl bnRyeV9ldmVudF9udW07Cj4gKwo+ICsJZW5hYmxlX3N1c3BlbmRfYmxvY2tlcnMgPSAxOwoKJ3Ry dWUnIGluc3RlYWQgb2YgJzEnLCBwbGVhc2UuCgo+ICsKPiArcmV0cnk6Cj4gKwlpZiAoc3VzcGVu ZF9pc19ibG9ja2VkKCkpIHsKPiArCQlpZiAoZGVidWdfbWFzayAmIERFQlVHX1NVU1BFTkQpCj4g KwkJCXByX2luZm8oInN1c3BlbmQ6IGFib3J0IHN1c3BlbmRcbiIpOwo+ICsJCWdvdG8gYWJvcnQ7 CgpJZiB0aGF0IHdlcmUgaW4gYSBsb29wIHlvdSBjb3VsZCBqdXN0IHVzZSAnYnJlYWsnIGhlcmUu Cgo+ICsJfQo+ICsKPiArCWVudHJ5X2V2ZW50X251bSA9IGF0b21pY19yZWFkKCZjdXJyZW50X2V2 ZW50X251bSk7Cj4gKwlpZiAoZGVidWdfbWFzayAmIERFQlVHX1NVU1BFTkQpCj4gKwkJcHJfaW5m bygic3VzcGVuZDogZW50ZXIgc3VzcGVuZFxuIik7Cj4gKwlyZXQgPSBwbV9zdXNwZW5kKHJlcXVl c3RlZF9zdXNwZW5kX3N0YXRlKTsKPiArCWlmIChkZWJ1Z19tYXNrICYgREVCVUdfRVhJVF9TVVNQ RU5EKSB7Cj4gKwkJc3RydWN0IHRpbWVzcGVjIHRzOwo+ICsJCXN0cnVjdCBydGNfdGltZSB0bTsK PiArCQlnZXRuc3RpbWVvZmRheSgmdHMpOwo+ICsJCXJ0Y190aW1lX3RvX3RtKHRzLnR2X3NlYywg JnRtKTsKPiArCQlwcl9pbmZvKCJzdXNwZW5kOiBleGl0IHN1c3BlbmQsIHJldCA9ICVkICIKPiAr CQkJIiglZC0lMDJkLSUwMmQgJTAyZDolMDJkOiUwMmQuJTA5bHUgVVRDKVxuIiwgcmV0LAo+ICsJ CQl0bS50bV95ZWFyICsgMTkwMCwgdG0udG1fbW9uICsgMSwgdG0udG1fbWRheSwKPiArCQkJdG0u dG1faG91ciwgdG0udG1fbWluLCB0bS50bV9zZWMsIHRzLnR2X25zZWMpOwo+ICsJfQo+ICsJaWYg KGF0b21pY19yZWFkKCZjdXJyZW50X2V2ZW50X251bSkgPT0gZW50cnlfZXZlbnRfbnVtKSB7Cj4g KwkJaWYgKGRlYnVnX21hc2sgJiBERUJVR19TVVNQRU5EKQo+ICsJCQlwcl9pbmZvKCJzdXNwZW5k OiBwbV9zdXNwZW5kIHJldHVybmVkIHdpdGggbm8gZXZlbnRcbiIpOwo+ICsJCWdvdG8gcmV0cnk7 CgpQdXQgdGhhdCBpbnRvIGEgbG9vcCBhbmQgdXNlICdjb250aW51ZScgaGVyZT8gIE9yIHVzZSAn YnJlYWsnIHRvIGdvIG91dCBvZgp0aGUgbG9vcD8KCj4gKwl9Cj4gK2Fib3J0Ogo+ICsJZW5hYmxl X3N1c3BlbmRfYmxvY2tlcnMgPSAwOwoKJ2ZhbHNlJyBpbnN0ZWFkIG9mICcwJywgcGxlYXNlLgoK PiArfQo+ICtzdGF0aWMgREVDTEFSRV9XT1JLKHN1c3BlbmRfd29yaywgc3VzcGVuZF93b3JrZXIp Owo+ICsKPiArc3RhdGljIGludCBzdXNwZW5kX2Jsb2NrX3N1c3BlbmQoc3RydWN0IHN5c19kZXZp Y2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQo+ICt7Cj4gKwlpbnQgcmV0ID0gc3VzcGVuZF9p c19ibG9ja2VkKCkgPyAtRUFHQUlOIDogMDsKPiArCWlmIChkZWJ1Z19tYXNrICYgREVCVUdfU1VT UEVORCkKPiArCQlwcl9pbmZvKCJzdXNwZW5kX2Jsb2NrX3N1c3BlbmQgcmV0dXJuICVkXG4iLCBy ZXQpOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCBzeXNkZXZfY2xh c3Mgc3VzcGVuZF9ibG9ja19zeXNjbGFzcyA9IHsKPiArCS5uYW1lID0gInN1c3BlbmRfYmxvY2si LAo+ICsJLnN1c3BlbmQgPSBzdXNwZW5kX2Jsb2NrX3N1c3BlbmQsCj4gK307Cj4gK3N0YXRpYyBz dHJ1Y3Qgc3lzX2RldmljZSBzdXNwZW5kX2Jsb2NrX3N5c2RldiA9IHsKPiArCS5jbHMgPSAmc3Vz cGVuZF9ibG9ja19zeXNjbGFzcywKPiArfTsKPiArCgpIbW0uICBQZXJoYXBzIGFkZCB0aGUgc3Vz cGVuZF9pc19ibG9ja2VkKCkgY2hlY2sgYXQgdGhlIGJlZ2lubmluZyBvZgpzeXNkZXZfc3VzcGVu ZCgpIGluc3RlYWQgb2YgdGhpcz8gIFN1cmVseSB5b3UgZG9uJ3Qgd2FudCB0byBzdXNwZW5kCmFu eSBzeXNkZXZzIHdpdGggYW55IHN1c3BlbmQgYmxvY2tlcnMgYWN0aXZlLCByaWdodD8KCj4gKy8q Kgo+ICsgKiBzdXNwZW5kX2Jsb2NrZXJfaW5pdCgpIC0gSW5pdGlhbGl6ZSBhIHN1c3BlbmQgYmxv Y2tlcgo+ICsgKiBAYmxvY2tlcjoJVGhlIHN1c3BlbmQgYmxvY2tlciB0byBpbml0aWFsaXplLgo+ ICsgKiBAbmFtZToJVGhlIG5hbWUgb2YgdGhlIHN1c3BlbmQgYmxvY2tlciB0byBzaG93IGluCj4g KyAqCQkvcHJvYy9zdXNwZW5kX2Jsb2NrZXJzCj4gKyAqLwo+ICt2b2lkIHN1c3BlbmRfYmxvY2tl cl9pbml0KHN0cnVjdCBzdXNwZW5kX2Jsb2NrZXIgKmJsb2NrZXIsIGNvbnN0IGNoYXIgKm5hbWUp Cj4gK3sKPiArCWlmIChuYW1lKQo+ICsJCWJsb2NrZXItPm5hbWUgPSBuYW1lOwo+ICsJQlVHX09O KCFibG9ja2VyLT5uYW1lKTsKCkRvIHlvdSByZWFsbHkgd2FudCB0byBjcmFzaCB0aGUga2VybmVs IGluIHRoaXMgY2FzZT8gIFdBUk5fT04oKSBtaWdodCBiZSBiZXR0ZXIgSU1PLgoKQWxzbywgdGhp cyBhc3N1bWVzIHRoYXQgdGhlIGNhbGxlciB3b24ndCByZWxlYXNlIHRoZSBtZW1vcnkgdXNlZCB0 byBzdG9yZSB0aGUKJ25hbWUnIHN0cmluZy4gIGl0IG1pZ2h0IGJlIGEgZ29vZCBpZGVhIHRvIHBv aW50IHRoYXQgb3V0IGluIHRoZSBrZXJuZWxkb2MKY29tbWVudC4KCj4gKwo+ICsJaWYgKGRlYnVn X21hc2sgJiBERUJVR19TVVNQRU5EX0JMT0NLRVIpCj4gKwkJcHJfaW5mbygic3VzcGVuZF9ibG9j a2VyX2luaXQgbmFtZT0lc1xuIiwgYmxvY2tlci0+bmFtZSk7Cj4gKwo+ICsJYXRvbWljX3NldCgm YmxvY2tlci0+ZmxhZ3MsIFNCX0lOSVRJQUxJWkVEKTsKPiArfQo+ICtFWFBPUlRfU1lNQk9MKHN1 c3BlbmRfYmxvY2tlcl9pbml0KTsKPiArCj4gKy8qKgo+ICsgKiBzdXNwZW5kX2Jsb2NrZXJfZGVz dHJveSgpIC0gRGVzdHJveSBhIHN1c3BlbmQgYmxvY2tlcgo+ICsgKiBAYmxvY2tlcjoJVGhlIHN1 c3BlbmQgYmxvY2tlciB0byBkZXN0cm95Lgo+ICsgKi8KPiArdm9pZCBzdXNwZW5kX2Jsb2NrZXJf ZGVzdHJveShzdHJ1Y3Qgc3VzcGVuZF9ibG9ja2VyICpibG9ja2VyKQo+ICt7Cj4gKwlpbnQgZmxh Z3M7Cj4gKwlpZiAoZGVidWdfbWFzayAmIERFQlVHX1NVU1BFTkRfQkxPQ0tFUikKPiArCQlwcl9p bmZvKCJzdXNwZW5kX2Jsb2NrZXJfZGVzdHJveSBuYW1lPSVzXG4iLCBibG9ja2VyLT5uYW1lKTsK PiArCWZsYWdzID0gYXRvbWljX3hjaGcoJmJsb2NrZXItPmZsYWdzLCAwKTsKPiArCVdBUk4oIShm bGFncyAmIFNCX0lOSVRJQUxJWkVEKSwgInN1c3BlbmRfYmxvY2tlcl9kZXN0cm95IGNhbGxlZCBv biAiCj4gKwkJCQkJInVuaW5pdGlhbGl6ZWQgc3VzcGVuZF9ibG9ja2VyXG4iKTsKPiArCWlmIChm bGFncyA9PSAoU0JfSU5JVElBTElaRUQgfCBTQl9BQ1RJVkUpKQo+ICsJCWlmIChhdG9taWNfZGVj X2FuZF90ZXN0KCZzdXNwZW5kX2Jsb2NrX2NvdW50KSkKPiArCQkJcXVldWVfd29yayhzdXNwZW5k X3dvcmtfcXVldWUsICZzdXNwZW5kX3dvcmspOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0woc3VzcGVu ZF9ibG9ja2VyX2Rlc3Ryb3kpOwo+ICsKPiArLyoqCj4gKyAqIHN1c3BlbmRfYmxvY2soKSAtIEJs b2NrIHN1c3BlbmQKPiArICogQGJsb2NrZXI6CVRoZSBzdXNwZW5kIGJsb2NrZXIgdG8gdXNlCj4g KyAqLwo+ICt2b2lkIHN1c3BlbmRfYmxvY2soc3RydWN0IHN1c3BlbmRfYmxvY2tlciAqYmxvY2tl cikKPiArewo+ICsJQlVHX09OKCEoYXRvbWljX3JlYWQoJmJsb2NrZXItPmZsYWdzKSAmIFNCX0lO SVRJQUxJWkVEKSk7CgpXQVJOX09OKCkgYW5kIGV4aXQgaW5zdGVhZD8gIEJVR19PTigpIGlzIGEg Yml0IGRyYXN0aWMgSU1ITy4KCj4gKwo+ICsJaWYgKGRlYnVnX21hc2sgJiBERUJVR19TVVNQRU5E X0JMT0NLRVIpCj4gKwkJcHJfaW5mbygic3VzcGVuZF9ibG9jazogJXNcbiIsIGJsb2NrZXItPm5h bWUpOwo+ICsJaWYgKGF0b21pY19jbXB4Y2hnKCZibG9ja2VyLT5mbGFncywgU0JfSU5JVElBTEla RUQsCj4gKwkgICAgU0JfSU5JVElBTElaRUQgfCBTQl9BQ1RJVkUpID09IFNCX0lOSVRJQUxJWkVE KQo+ICsJCWF0b21pY19pbmMoJnN1c3BlbmRfYmxvY2tfY291bnQpOwo+ICsKPiArCWF0b21pY19p bmMoJmN1cnJlbnRfZXZlbnRfbnVtKTsKPiArfQo+ICtFWFBPUlRfU1lNQk9MKHN1c3BlbmRfYmxv Y2spOwo+ICsKPiArLyoqCj4gKyAqIHN1c3BlbmRfdW5ibG9jaygpIC0gVW5ibG9jayBzdXNwZW5k Cj4gKyAqIEBibG9ja2VyOglUaGUgc3VzcGVuZCBibG9ja2VyIHRvIHVuYmxvY2suCj4gKyAqCj4g KyAqIElmIG5vIG90aGVyIHN1c3BlbmQgYmxvY2tlcnMgYmxvY2sgc3VzcGVuZCwgdGhlIHN5c3Rl bSB3aWxsIHN1c3BlbmQuCj4gKyAqLwo+ICt2b2lkIHN1c3BlbmRfdW5ibG9jayhzdHJ1Y3Qgc3Vz cGVuZF9ibG9ja2VyICpibG9ja2VyKQo+ICt7Cj4gKwlpZiAoZGVidWdfbWFzayAmIERFQlVHX1NV U1BFTkRfQkxPQ0tFUikKPiArCQlwcl9pbmZvKCJzdXNwZW5kX3VuYmxvY2s6ICVzXG4iLCBibG9j a2VyLT5uYW1lKTsKPiArCj4gKwlpZiAoYXRvbWljX2NtcHhjaGcoJmJsb2NrZXItPmZsYWdzLCBT Ql9JTklUSUFMSVpFRCB8IFNCX0FDVElWRSwKPiArCSAgICBTQl9JTklUSUFMSVpFRCkgPT0gKFNC X0lOSVRJQUxJWkVEIHwgU0JfQUNUSVZFKSkKPiArCQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgm c3VzcGVuZF9ibG9ja19jb3VudCkpCj4gKwkJCXF1ZXVlX3dvcmsoc3VzcGVuZF93b3JrX3F1ZXVl LCAmc3VzcGVuZF93b3JrKTsKPiArfQo+ICtFWFBPUlRfU1lNQk9MKHN1c3BlbmRfdW5ibG9jayk7 Cj4gKwo+ICsvKioKPiArICogaXNfYmxvY2tpbmdfc3VzcGVuZCgpIC0gVGVzdCBpZiBhIHN1c3Bl bmQgYmxvY2tlciBpcyBibG9ja2luZyBzdXNwZW5kCj4gKyAqIEBibG9ja2VyOglUaGUgc3VzcGVu ZCBibG9ja2VyIHRvIGNoZWNrLgo+ICsgKi8KPiArYm9vbCBpc19ibG9ja2luZ19zdXNwZW5kKHN0 cnVjdCBzdXNwZW5kX2Jsb2NrZXIgKmJsb2NrZXIpCj4gK3sKPiArCXJldHVybiAhIShhdG9taWNf cmVhZCgmYmxvY2tlci0+ZmxhZ3MpICYgU0JfQUNUSVZFKTsKCkNoZWNrIFNCX0lOSVRJQUxJWkVE IHRvbywgcGVyaGFwcz8gIFdBUk5fT04oIVNCX0lOSVRJQUxJWkVEKT8KCj4gK30KPiArRVhQT1JU X1NZTUJPTChpc19ibG9ja2luZ19zdXNwZW5kKTsKPiArCj4gK3ZvaWQgcmVxdWVzdF9zdXNwZW5k X3N0YXRlKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKPiArewo+ICsJdW5zaWduZWQgbG9uZyBpcnFm bGFnczsKPiArCXNwaW5fbG9ja19pcnFzYXZlKCZzdGF0ZV9sb2NrLCBpcnFmbGFncyk7Cj4gKwlp ZiAoZGVidWdfbWFzayAmIERFQlVHX1VTRVJfU1RBVEUpIHsKPiArCQlzdHJ1Y3QgdGltZXNwZWMg dHM7Cj4gKwkJc3RydWN0IHJ0Y190aW1lIHRtOwo+ICsJCWdldG5zdGltZW9mZGF5KCZ0cyk7Cj4g KwkJcnRjX3RpbWVfdG9fdG0odHMudHZfc2VjLCAmdG0pOwo+ICsJCXByX2luZm8oInJlcXVlc3Rf c3VzcGVuZF9zdGF0ZTogJXMgKCVkLT4lZCkgYXQgJWxsZCAiCj4gKwkJCSIoJWQtJTAyZC0lMDJk ICUwMmQ6JTAyZDolMDJkLiUwOWx1IFVUQylcbiIsCj4gKwkJCXN0YXRlICE9IFBNX1NVU1BFTkRf T04gPyAic2xlZXAiIDogIndha2V1cCIsCj4gKwkJCXJlcXVlc3RlZF9zdXNwZW5kX3N0YXRlLCBz dGF0ZSwKPiArCQkJa3RpbWVfdG9fbnMoa3RpbWVfZ2V0KCkpLAo+ICsJCQl0bS50bV95ZWFyICsg MTkwMCwgdG0udG1fbW9uICsgMSwgdG0udG1fbWRheSwKPiArCQkJdG0udG1faG91ciwgdG0udG1f bWluLCB0bS50bV9zZWMsIHRzLnR2X25zZWMpOwo+ICsJfQo+ICsJcmVxdWVzdGVkX3N1c3BlbmRf c3RhdGUgPSBzdGF0ZTsKPiArCWlmIChzdGF0ZSA9PSBQTV9TVVNQRU5EX09OKQo+ICsJCXN1c3Bl bmRfYmxvY2soJm1haW5fc3VzcGVuZF9ibG9ja2VyKTsKPiArCWVsc2UKPiArCQlzdXNwZW5kX3Vu YmxvY2soJm1haW5fc3VzcGVuZF9ibG9ja2VyKTsKPiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUo JnN0YXRlX2xvY2ssIGlycWZsYWdzKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBfX2luaXQgc3Vz cGVuZF9ibG9ja19pbml0KHZvaWQpCj4gK3sKPiArCWludCByZXQ7Cj4gKwo+ICsJc3VzcGVuZF9i bG9ja2VyX2luaXQoJm1haW5fc3VzcGVuZF9ibG9ja2VyLCAibWFpbiIpOwo+ICsJc3VzcGVuZF9i bG9jaygmbWFpbl9zdXNwZW5kX2Jsb2NrZXIpOwo+ICsKPiArCXJldCA9IHN5c2Rldl9jbGFzc19y ZWdpc3Rlcigmc3VzcGVuZF9ibG9ja19zeXNjbGFzcyk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJcHJf ZXJyKCJzdXNwZW5kX2Jsb2NrX2luaXQ6IHN5c2Rldl9jbGFzc19yZWdpc3RlciBmYWlsZWRcbiIp Owo+ICsJCWdvdG8gZXJyX3N5c2Rldl9jbGFzc19yZWdpc3RlcjsKPiArCX0KPiArCXJldCA9IHN5 c2Rldl9yZWdpc3Rlcigmc3VzcGVuZF9ibG9ja19zeXNkZXYpOwo+ICsJaWYgKHJldCkgewo+ICsJ CXByX2Vycigic3VzcGVuZF9ibG9ja19pbml0OiBzdXNwZW5kX2Jsb2NrX3N5c2RldiBmYWlsZWRc biIpOwo+ICsJCWdvdG8gZXJyX3N5c2Rldl9yZWdpc3RlcjsKPiArCX0KPiArCj4gKwlzdXNwZW5k X3dvcmtfcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgic3VzcGVuZCIpOwoK RG8gd2UgbmVlZCBhIHNlcGFyYXRlIHdvcmtxdWV1ZSBmb3IgdGhpcyBwdXJwb3NlPwoKPiArCWlm IChzdXNwZW5kX3dvcmtfcXVldWUgPT0gTlVMTCkgewo+ICsJCXJldCA9IC1FTk9NRU07Cj4gKwkJ Z290byBlcnJfc3VzcGVuZF93b3JrX3F1ZXVlOwo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICsK PiArZXJyX3N1c3BlbmRfd29ya19xdWV1ZToKPiArCXN5c2Rldl91bnJlZ2lzdGVyKCZzdXNwZW5k X2Jsb2NrX3N5c2Rldik7Cj4gK2Vycl9zeXNkZXZfcmVnaXN0ZXI6Cj4gKwlzeXNkZXZfY2xhc3Nf dW5yZWdpc3Rlcigmc3VzcGVuZF9ibG9ja19zeXNjbGFzcyk7Cj4gK2Vycl9zeXNkZXZfY2xhc3Nf cmVnaXN0ZXI6Cj4gKwlzdXNwZW5kX2Jsb2NrZXJfZGVzdHJveSgmbWFpbl9zdXNwZW5kX2Jsb2Nr ZXIpOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgIF9fZXhpdCBzdXNw ZW5kX2Jsb2NrX2V4aXQodm9pZCkKPiArewo+ICsJZGVzdHJveV93b3JrcXVldWUoc3VzcGVuZF93 b3JrX3F1ZXVlKTsKPiArCXN5c2Rldl91bnJlZ2lzdGVyKCZzdXNwZW5kX2Jsb2NrX3N5c2Rldik7 Cj4gKwlzeXNkZXZfY2xhc3NfdW5yZWdpc3Rlcigmc3VzcGVuZF9ibG9ja19zeXNjbGFzcyk7Cj4g KwlzdXNwZW5kX2Jsb2NrZXJfZGVzdHJveSgmbWFpbl9zdXNwZW5kX2Jsb2NrZXIpOwo+ICt9Cj4g Kwo+ICtjb3JlX2luaXRjYWxsKHN1c3BlbmRfYmxvY2tfaW5pdCk7Cj4gK21vZHVsZV9leGl0KHN1 c3BlbmRfYmxvY2tfZXhpdCk7CgpUaGFua3MsClJhZmFlbApfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1wbSBtYWlsaW5nIGxpc3QKbGludXgtcG1A bGlzdHMubGludXgtZm91bmRhdGlvbi5vcmcKaHR0cHM6Ly9saXN0cy5saW51eC1mb3VuZGF0aW9u Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LXBt