From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?utf-8?q?Arve=20Hj=C3=B8nnev=C3=A5g?= Subject: [PATCH 1/8] PM: Add suspend block api. Date: Tue, 14 Apr 2009 18:41:25 -0700 Message-ID: <1239759692-28617-2-git-send-email-arve@android.com> References: <1239759692-28617-1-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-1-git-send-email-arve@android.com> 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: linux-pm@lists.linux-foundation.org Cc: ncunningham@crca.org.au, u.luckas@road.de, swetland@google.com, r-woodruff2@ti.comrjw, @sisk.pl List-Id: linux-pm@vger.kernel.org QWRkcyAvc3lzL3Bvd2VyL3JlcXVlc3Rfc3RhdGUsIGEgbm9uLWJsb2NraW5nIGludGVyZmFjZSB0 aGF0IHNwZWNpZmllcwp3aGljaCBzdXNwZW5kIHN0YXRlIHRvIGVudGVyIHdoZW4gbm8gc3VzcGVu ZCBibG9ja2VycyBhcmUgYWN0aXZlLiBBCnNwZWNpYWwgc3RhdGUsICJvbiIsIHN0b3BzIHRoZSBw cm9jZXNzIGJ5IGFjdGl2YXRpbmcgdGhlICJtYWluIiBzdXNwZW5kCmJsb2NrZXIuCgpTaWduZWQt b2ZmLWJ5OiBBcnZlIEhqw7hubmV2w6VnIDxhcnZlQGFuZHJvaWQuY29tPgotLS0KIERvY3VtZW50 YXRpb24vcG93ZXIvc3VzcGVuZC1ibG9ja2Vycy50eHQgfCAgIDc2ICsrKysrKysrKwogaW5jbHVk ZS9saW51eC9zdXNwZW5kX2Jsb2NrLmggICAgICAgICAgICB8ICAgNjEgKysrKysrKwoga2VybmVs L3Bvd2VyL0tjb25maWcgICAgICAgICAgICAgICAgICAgICB8ICAgMTAgKysKIGtlcm5lbC9wb3dl ci9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgfCAgICAxICsKIGtlcm5lbC9wb3dlci9tYWlu LmMgICAgICAgICAgICAgICAgICAgICAgfCAgIDYyICsrKysrKysKIGtlcm5lbC9wb3dlci9wb3dl ci5oICAgICAgICAgICAgICAgICAgICAgfCAgICA2ICsKIGtlcm5lbC9wb3dlci9zdXNwZW5kX2Js b2NrLmMgICAgICAgICAgICAgfCAgMjU3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwog NyBmaWxlcyBjaGFuZ2VkLCA0NzMgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBEb2N1bWVudGF0aW9uL3Bvd2VyL3N1c3BlbmQtYmxvY2tlcnMudHh0CiBj cmVhdGUgbW9kZSAxMDA3NTUgaW5jbHVkZS9saW51eC9zdXNwZW5kX2Jsb2NrLmgKIGNyZWF0ZSBt b2RlIDEwMDY0NCBrZXJuZWwvcG93ZXIvc3VzcGVuZF9ibG9jay5jCgpkaWZmIC0tZ2l0IGEvRG9j dW1lbnRhdGlvbi9wb3dlci9zdXNwZW5kLWJsb2NrZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vcG93 ZXIvc3VzcGVuZC1ibG9ja2Vycy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uNzQzYjg3MAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXIvc3VzcGVu ZC1ibG9ja2Vycy50eHQKQEAgLTAsMCArMSw3NiBAQAorU3VzcGVuZCBibG9ja2VycworPT09PT09 PT09PT09PT09PQorCitBIHN1c3BlbmRfYmxvY2tlciBwcmV2ZW50cyB0aGUgc3lzdGVtIGZyb20g ZW50ZXJpbmcgc3VzcGVuZC4KKworSWYgdGhlIHN1c3BlbmQgb3BlcmF0aW9uIGhhcyBhbHJlYWR5 IHN0YXJ0ZWQgd2hlbiBjYWxsaW5nIHN1c3BlbmRfYmxvY2sgb24gYQorc3VzcGVuZF9ibG9ja2Vy LCBpdCB3aWxsIGFib3J0IHRoZSBzdXNwZW5kIG9wZXJhdGlvbiBhcyBsb25nIGl0IGhhcyBub3Qg YWxyZWFkeQorcmVhY2hlZCB0aGUgc3lzZGV2IHN1c3BlbmQgc3RhZ2UuIFRoaXMgbWVhbnMgdGhh dCBjYWxsaW5nIHN1c3BlbmRfYmxvY2sgZnJvbSBhbgoraW50ZXJydXB0IGhhbmRsZXIgb3IgYSBm cmVlemVhYmxlIHRocmVhZCBhbHdheXMgd29ya3MsIGJ1dCBpZiB5b3UgY2FsbAorYmxvY2tfc3Vz cGVuZCBmcm9tIGEgc3lzZGV2IHN1c3BlbmQgaGFuZGxlciB5b3UgbXVzdCBhbHNvIHJldHVybiBh biBlcnJvciBmcm9tCit0aGF0IGhhbmRsZXIgdG8gYWJvcnQgc3VzcGVuZC4KKworU3VzcGVuZCBi bG9ja2VycyBjYW4gYmUgdXNlZCB0byBhbGxvdyB1c2VyLXNwYWNlIHRvIGRlY2lkZSB3aGljaCBr ZXlzIHNob3VsZAord2FrZSB0aGUgZnVsbCBzeXN0ZW0gdXAgYW5kIHR1cm4gdGhlIHNjcmVlbiBv bi4gVXNlIHNldF9pcnFfd2FrZSBvciBhIHBsYXRmb3JtCitzcGVjaWZpYyBhcGkgdG8gbWFrZSBz dXJlIHRoZSBrZXlwYWQgaW50ZXJydXB0IHdha2VzIHVwIHRoZSBjcHUuIE9uY2UgdGhlIGtleXBh ZAorZHJpdmVyIGhhcyByZXN1bWVkLCB0aGUgc2VxdWVuY2Ugb2YgZXZlbnRzIGNhbiBsb29rIGxp a2UgdGhpczoKKy0gVGhlIEtleXBhZCBkcml2ZXIgZ2V0cyBhbiBpbnRlcnJ1cHQuIEl0IHRoZW4g Y2FsbHMgc3VzcGVuZF9ibG9jayBvbiB0aGUKKyAga2V5cGFkLXNjYW4gc3VzcGVuZF9ibG9ja2Vy IGFuZCBzdGFydHMgc2Nhbm5pbmcgdGhlIGtleXBhZCBtYXRyaXguCistIFRoZSBrZXlwYWQtc2Nh biBjb2RlIGRldGVjdHMgYSBrZXkgY2hhbmdlIGFuZCByZXBvcnRzIGl0IHRvIHRoZSBpbnB1dC1l dmVudAorICBkcml2ZXIuCistIFRoZSBpbnB1dC1ldmVudCBkcml2ZXIgc2VlcyB0aGUga2V5IGNo YW5nZSwgZW5xdWV1ZXMgYW4gZXZlbnQsIGFuZCBjYWxscworICBzdXNwZW5kX2Jsb2NrIG9uIHRo ZSBpbnB1dC1ldmVudC1xdWV1ZSBzdXNwZW5kX2Jsb2NrZXIuCistIFRoZSBrZXlwYWQtc2NhbiBj b2RlIGRldGVjdHMgdGhhdCBubyBrZXlzIGFyZSBoZWxkIGFuZCBjYWxscyBzdXNwZW5kX3VuYmxv Y2sKKyAgb24gdGhlIGtleXBhZC1zY2FuIHN1c3BlbmRfYmxvY2tlci4KKy0gVGhlIHVzZXItc3Bh Y2UgaW5wdXQtZXZlbnQgdGhyZWFkIHJldHVybnMgZnJvbSBzZWxlY3QvcG9sbCwgY2FsbHMKKyAg c3VzcGVuZF9ibG9jayBvbiB0aGUgcHJvY2Vzcy1pbnB1dC1ldmVudHMgc3VzcGVuZF9ibG9ja2Vy IGFuZCB0aGVuIGNhbGxzIHJlYWQKKyAgb24gdGhlIGlucHV0LWV2ZW50IGRldmljZS4KKy0gVGhl IGlucHV0LWV2ZW50IGRyaXZlciBkZXF1ZXVlcyB0aGUga2V5LWV2ZW50IGFuZCwgc2luY2UgdGhl IHF1ZXVlIGlzIG5vdworICBlbXB0eSwgaXQgY2FsbHMgc3VzcGVuZF91bmJsb2NrIG9uIHRoZSBp bnB1dC1ldmVudC1xdWV1ZSBzdXNwZW5kX2Jsb2NrZXIuCistIFRoZSB1c2VyLXNwYWNlIGlucHV0 LWV2ZW50IHRocmVhZCByZXR1cm5zIGZyb20gcmVhZC4gSXQgZGV0ZXJtaW5lcyB0aGF0IHRoZQor ICBrZXkgc2hvdWxkIG5vdCB3YWtlIHVwIHRoZSBmdWxsIHN5c3RlbSwgY2FsbHMgc3VzcGVuZF91 bmJsb2NrIG9uIHRoZQorICBwcm9jZXNzLWlucHV0LWV2ZW50cyBzdXNwZW5kX2Jsb2NrZXIgYW5k IGNhbGxzIHNlbGVjdCBvciBwb2xsLgorCisgICAgICAgICAgICAgICAgIEtleSBwcmVzc2VkICAg S2V5IHJlbGVhc2VkCisgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIHwKK2tleXBh ZC1zY2FuICAgICAgICAgICsrKysrKysrKysrKysrKysrKworaW5wdXQtZXZlbnQtcXVldWUgICAg ICAgICsrKyAgICAgICAgICArKysKK3Byb2Nlc3MtaW5wdXQtZXZlbnRzICAgICAgICsrKyAgICAg ICAgICArKysKKworCitEcml2ZXIgQVBJCis9PT09PT09PT09CisKK0EgZHJpdmVyIGNhbiB1c2Ug dGhlIHN1c3BlbmQgYmxvY2sgYXBpIGJ5IGFkZGluZyBhIHN1c3BlbmRfYmxvY2tlciB2YXJpYWJs ZSB0bworaXRzIHN0YXRlIGFuZCBjYWxsaW5nIHN1c3BlbmRfYmxvY2tlcl9pbml0LiBGb3IgaW5z dGFuY2U6CitzdHJ1Y3Qgc3RhdGUgeworCXN0cnVjdCBzdXNwZW5kX2Jsb2NrZXIgc3VzcGVuZF9i bG9ja2VyOworfQorCitpbml0KCkgeworCXN1c3BlbmRfYmxvY2tlcl9pbml0KCZzdGF0ZS0+c3Vz cGVuZF9ibG9ja2VyLCAic3VzcGVuZC1ibG9ja2VyLW5hbWUiKTsKK30KKworQmVmb3JlIGZyZWVp bmcgdGhlIG1lbW9yeSwgc3VzcGVuZF9ibG9ja2VyX2Rlc3Ryb3kgbXVzdCBiZSBjYWxsZWQ6CisK K3VuaW5pdCgpIHsKKwlzdXNwZW5kX2Jsb2NrZXJfZGVzdHJveSgmc3RhdGUtPnN1c3BlbmRfYmxv Y2tlcik7Cit9CisKK1doZW4gdGhlIGRyaXZlciBkZXRlcm1pbmVzIHRoYXQgaXQgbmVlZHMgdG8g cnVuICh1c3VhbGx5IGluIGFuIGludGVycnVwdAoraGFuZGxlcikgaXQgY2FsbHMgc3VzcGVuZF9i bG9jazoKKwlzdXNwZW5kX2Jsb2NrKCZzdGF0ZS0+c3VzcGVuZF9ibG9ja2VyKTsKKworV2hlbiBp dCBubyBsb25nZXIgbmVlZHMgdG8gcnVuIGl0IGNhbGxzIHN1c3BlbmRfdW5ibG9jazoKKwlzdXNw ZW5kX3VuYmxvY2soJnN0YXRlLT5zdXNwZW5kX2Jsb2NrZXIpOworCitDYWxsaW5nIHN1c3BlbmRf YmxvY2sgd2hlbiB0aGUgc3VzcGVuZCBibG9ja2VyIGlzIGFjdGl2ZSBvciBzdXNwZW5kX3VuYmxv Y2sgd2hlbgoraXQgaXMgbm90IGFjdGl2ZSBoYXMgbm8gZWZmZWN0LiBUaGlzIGFsbG93cyBkcml2 ZXJzIHRvIHVwZGF0ZSB0aGVpciBzdGF0ZSBhbmQKK2NhbGwgc3VzcGVuZCBzdXNwZW5kX2Jsb2Nr IG9yIHN1c3BlbmRfdW5ibG9jayBiYXNlZCBvbiB0aGUgcmVzdWx0LgorRm9yIGluc3RhbmNlOgor CitpZiAobGlzdF9lbXB0eSgmc3RhdGUtPnBlbmRpbmdfd29yaykpCisJc3VzcGVuZF91bmJsb2Nr KCZzdGF0ZS0+c3VzcGVuZF9ibG9ja2VyKTsKK2Vsc2UKKwlzdXNwZW5kX2Jsb2NrKCZzdGF0ZS0+ c3VzcGVuZF9ibG9ja2VyKTsKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdXNwZW5kX2Js b2NrLmggYi9pbmNsdWRlL2xpbnV4L3N1c3BlbmRfYmxvY2suaApuZXcgZmlsZSBtb2RlIDEwMDc1 NQppbmRleCAwMDAwMDAwLi43ODIwYzYwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51 eC9zdXNwZW5kX2Jsb2NrLmgKQEAgLTAsMCArMSw2MSBAQAorLyogaW5jbHVkZS9saW51eC9zdXNw ZW5kX2Jsb2NrLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBHb29nbGUsIEluYy4K KyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5 IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlz dHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHBy b2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLgorICoKKyAqLworCisjaWZuZGVmIF9MSU5VWF9TVVNQRU5EX0JMT0NLX0gKKyNk ZWZpbmUgX0xJTlVYX1NVU1BFTkRfQkxPQ0tfSAorCisvKiBBIHN1c3BlbmRfYmxvY2tlciBwcmV2 ZW50cyB0aGUgc3lzdGVtIGZyb20gZW50ZXJpbmcgc3VzcGVuZCB3aGVuIGFjdGl2ZS4KKyAqLwor CitzdHJ1Y3Qgc3VzcGVuZF9ibG9ja2VyIHsKKyNpZmRlZiBDT05GSUdfU1VTUEVORF9CTE9DSwor CWF0b21pY190ICAgICAgICAgICAgZmxhZ3M7CisJY29uc3QgY2hhciAgICAgICAgICpuYW1lOwor I2VuZGlmCit9OworCisjaWZkZWYgQ09ORklHX1NVU1BFTkRfQkxPQ0sKKwordm9pZCBzdXNwZW5k X2Jsb2NrZXJfaW5pdChzdHJ1Y3Qgc3VzcGVuZF9ibG9ja2VyICpibG9ja2VyLCBjb25zdCBjaGFy ICpuYW1lKTsKK3ZvaWQgc3VzcGVuZF9ibG9ja2VyX2Rlc3Ryb3koc3RydWN0IHN1c3BlbmRfYmxv Y2tlciAqYmxvY2tlcik7Cit2b2lkIHN1c3BlbmRfYmxvY2soc3RydWN0IHN1c3BlbmRfYmxvY2tl ciAqYmxvY2tlcik7Cit2b2lkIHN1c3BlbmRfdW5ibG9jayhzdHJ1Y3Qgc3VzcGVuZF9ibG9ja2Vy ICpibG9ja2VyKTsKKworLyogaXNfYmxvY2tpbmdfc3VzcGVuZCByZXR1cm5zIHRydWUgaWYgdGhl IHN1c3BlbmRfYmxvY2tlciBpcyBjdXJyZW50bHkgYWN0aXZlLgorICovCitib29sIGlzX2Jsb2Nr aW5nX3N1c3BlbmQoc3RydWN0IHN1c3BlbmRfYmxvY2tlciAqYmxvY2tlcik7CisKKy8qIHN1c3Bl bmRfaXNfYmxvY2tlZCBjYW4gYmUgdXNlZCBieSBnZW5lcmljIHBvd2VyIG1hbmFnZW1lbnQgY29k ZSB0byBhYm9ydAorICogc3VzcGVuZC4KKyAqCisgKiBUbyBwcmVzZXJ2ZSBiYWNrd2FyZCBjb21w YXRpYmlsaXR5IHN1c3BlbmRfaXNfYmxvY2tlZCByZXR1cm5zIDAgdW5sZXNzIGl0CisgKiBpcyBj YWxsZWQgZHVyaW5nIHN1c3BlbmQgaW5pdGlhdGVkIGZyb20gdGhlIHN1c3BlbmRfYmxvY2sgY29k ZS4KKyAqLworYm9vbCBzdXNwZW5kX2lzX2Jsb2NrZWQodm9pZCk7CisKKyNlbHNlCisKK3N0YXRp YyBpbmxpbmUgdm9pZCBzdXNwZW5kX2Jsb2NrZXJfaW5pdChzdHJ1Y3Qgc3VzcGVuZF9ibG9ja2Vy ICpibG9ja2VyLAorCQkJCQljb25zdCBjaGFyICpuYW1lKSB7fQorc3RhdGljIGlubGluZSB2b2lk IHN1c3BlbmRfYmxvY2tlcl9kZXN0cm95KHN0cnVjdCBzdXNwZW5kX2Jsb2NrZXIgKmJsb2NrZXIp IHt9CitzdGF0aWMgaW5saW5lIHZvaWQgc3VzcGVuZF9ibG9jayhzdHJ1Y3Qgc3VzcGVuZF9ibG9j a2VyICpibG9ja2VyKSB7fQorc3RhdGljIGlubGluZSB2b2lkIHN1c3BlbmRfdW5ibG9jayhzdHJ1 Y3Qgc3VzcGVuZF9ibG9ja2VyICpibG9ja2VyKSB7fQorc3RhdGljIGlubGluZSBib29sIGlzX2Js b2NraW5nX3N1c3BlbmQoc3RydWN0IHN1c3BlbmRfYmxvY2tlciAqYmwpIHsgcmV0dXJuIDA7IH0K K3N0YXRpYyBpbmxpbmUgYm9vbCBzdXNwZW5kX2lzX2Jsb2NrZWQodm9pZCkgeyByZXR1cm4gMDsg fQorCisjZW5kaWYKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9LY29uZmln IGIva2VybmVsL3Bvd2VyL0tjb25maWcKaW5kZXggMjNiZDRkYS4uOWQxZGYxMyAxMDA2NDQKLS0t IGEva2VybmVsL3Bvd2VyL0tjb25maWcKKysrIGIva2VybmVsL3Bvd2VyL0tjb25maWcKQEAgLTEx Niw2ICsxMTYsMTYgQEAgY29uZmlnIFNVU1BFTkRfRlJFRVpFUgogCiAJICBUdXJuaW5nIE9GRiB0 aGlzIHNldHRpbmcgaXMgTk9UIHJlY29tbWVuZGVkISBJZiBpbiBkb3VidCwgc2F5IFkuCiAKK2Nv bmZpZyBTVVNQRU5EX0JMT0NLCisJYm9vbCAiU3VzcGVuZCBibG9jayIKKwlkZXBlbmRzIG9uIFBN CisJc2VsZWN0IFJUQ19MSUIKKwlkZWZhdWx0IG4KKwktLS1oZWxwLS0tCisJICBFbmFibGUgc3Vz cGVuZF9ibG9jay4gV2hlbiB1c2VyIHNwYWNlIHJlcXVlc3RzIGEgc2xlZXAgc3RhdGUgdGhyb3Vn aAorCSAgL3N5cy9wb3dlci9yZXF1ZXN0X3N0YXRlLCB0aGUgcmVxdWVzdGVkIHNsZWVwIHN0YXRl IHdpbGwgYmUgZW50ZXJlZAorCSAgd2hlbiBubyBzdXNwZW5kX2Jsb2NrZXJzIGFyZSBhY3RpdmUu CisKIGNvbmZpZyBISUJFUk5BVElPTgogCWJvb2wgIkhpYmVybmF0aW9uIChha2EgJ3N1c3BlbmQg dG8gZGlzaycpIgogCWRlcGVuZHMgb24gUE0gJiYgU1dBUCAmJiBBUkNIX0hJQkVSTkFUSU9OX1BP U1NJQkxFCmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvTWFrZWZpbGUgYi9rZXJuZWwvcG93ZXIv TWFrZWZpbGUKaW5kZXggNzIwZWE0Zi4uMjljZGM5ZSAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2Vy L01ha2VmaWxlCisrKyBiL2tlcm5lbC9wb3dlci9NYWtlZmlsZQpAQCAtNiw2ICs2LDcgQEAgZW5k aWYKIG9iai0kKENPTkZJR19QTSkJCSs9IG1haW4ubwogb2JqLSQoQ09ORklHX1BNX1NMRUVQKQkJ Kz0gY29uc29sZS5vCiBvYmotJChDT05GSUdfRlJFRVpFUikJCSs9IHByb2Nlc3Mubworb2JqLSQo Q09ORklHX1NVU1BFTkRfQkxPQ0spCSs9IHN1c3BlbmRfYmxvY2subwogb2JqLSQoQ09ORklHX0hJ QkVSTkFUSU9OKQkrPSBzd3N1c3AubyBkaXNrLm8gc25hcHNob3QubyBzd2FwLm8gdXNlci5vCiAK IG9iai0kKENPTkZJR19NQUdJQ19TWVNSUSkJKz0gcG93ZXJvZmYubwpkaWZmIC0tZ2l0IGEva2Vy bmVsL3Bvd2VyL21haW4uYyBiL2tlcm5lbC9wb3dlci9tYWluLmMKaW5kZXggYzk2MzJmOC4uZTRj NmIyMCAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL21haW4uYworKysgYi9rZXJuZWwvcG93ZXIv bWFpbi5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgogI2lu Y2x1ZGUgPGxpbnV4L3Ztc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CisjaW5j bHVkZSA8bGludXgvc3VzcGVuZF9ibG9jay5oPgogCiAjaW5jbHVkZSAicG93ZXIuaCIKIApAQCAt MzkyLDYgKzM5Myw5IEBAIHN0YXRpYyB2b2lkIHN1c3BlbmRfZmluaXNoKHZvaWQpCiAKIAogc3Rh dGljIGNvbnN0IGNoYXIgKiBjb25zdCBwbV9zdGF0ZXNbUE1fU1VTUEVORF9NQVhdID0geworI2lm ZGVmIENPTkZJR19TVVNQRU5EX0JMT0NLCisJW1BNX1NVU1BFTkRfT05dCQk9ICJvbiIsCisjZW5k aWYKIAlbUE1fU1VTUEVORF9TVEFOREJZXQk9ICJzdGFuZGJ5IiwKIAlbUE1fU1VTUEVORF9NRU1d CT0gIm1lbSIsCiB9OwpAQCAtNTQwLDYgKzU0NCw2MSBAQCBzdGF0aWMgc3NpemVfdCBzdGF0ZV9z dG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLAog CiBwb3dlcl9hdHRyKHN0YXRlKTsKIAorLyoqCisgKglyZXF1ZXN0X3N0YXRlIC0gY29udHJvbCBz eXN0ZW0gcG93ZXIgc3RhdGUuCisgKgorICoJVGhpcyBpcyBzaW1pbGFyIHRvIHN0YXRlLCBidXQg aXQgZG9lcyBub3QgYmxvY2sgdW50aWwgdGhlIHN5c3RlbQorICoJcmVzdW1lcywgYW5kIGl0IHdp bGwgdHJ5IHRvIHJlLWVudGVyIHRoZSBzdGF0ZSB1bnRpbCBhbm90aGVyIHN0YXRlIGlzCisgKgly ZXF1ZXN0ZWQuIFN1c3BlbmQgYmxvY2tlcnMgYXJlIHJlc3BlY3RlZCBhbmQgdGhlIHJlcXVlc3Rl ZCBzdGF0ZSB3aWxsCisgKglvbmx5IGJlIGVudGVyZWQgd2hlbiBubyBzdXNwZW5kIGJsb2NrZXJz IGFyZSBhY3RpdmUuCisgKglXcml0ZSAib24iIHRvIGNhbmNlbC4KKyAqLworCisjaWZkZWYgQ09O RklHX1NVU1BFTkRfQkxPQ0sKK3N0YXRpYyBzc2l6ZV90IHJlcXVlc3Rfc3RhdGVfc2hvdyhzdHJ1 Y3Qga29iamVjdCAqa29iaiwKKwkJCQkgIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hh ciAqYnVmKQoreworCWNoYXIgKnMgPSBidWY7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwg UE1fU1VTUEVORF9NQVg7IGkrKykgeworCQlpZiAocG1fc3RhdGVzW2ldICYmIChpID09IFBNX1NV U1BFTkRfT04gfHwgdmFsaWRfc3RhdGUoaSkpKQorCQkJcyArPSBzcHJpbnRmKHMsICIlcyAiLCBw bV9zdGF0ZXNbaV0pOworCX0KKwlpZiAocyAhPSBidWYpCisJCS8qIGNvbnZlcnQgdGhlIGxhc3Qg c3BhY2UgdG8gYSBuZXdsaW5lICovCisJCSoocy0xKSA9ICdcbic7CisJcmV0dXJuIChzIC0gYnVm KTsKK30KKworc3RhdGljIHNzaXplX3QgcmVxdWVzdF9zdGF0ZV9zdG9yZShzdHJ1Y3Qga29iamVj dCAqa29iaiwKKwkJCQkgICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgY29u c3QgY2hhciAqYnVmLCBzaXplX3QgbikKK3sKKwlzdXNwZW5kX3N0YXRlX3Qgc3RhdGUgPSBQTV9T VVNQRU5EX09OOworCWNvbnN0IGNoYXIgKiBjb25zdCAqczsKKwljaGFyICpwOworCWludCBsZW47 CisJaW50IGVycm9yID0gLUVJTlZBTDsKKworCXAgPSBtZW1jaHIoYnVmLCAnXG4nLCBuKTsKKwls ZW4gPSBwID8gcCAtIGJ1ZiA6IG47CisKKwlmb3IgKHMgPSAmcG1fc3RhdGVzW3N0YXRlXTsgc3Rh dGUgPCBQTV9TVVNQRU5EX01BWDsgcysrLCBzdGF0ZSsrKSB7CisJCWlmICgqcyAmJiBsZW4gPT0g c3RybGVuKCpzKSAmJiAhc3RybmNtcChidWYsICpzLCBsZW4pKQorCQkJYnJlYWs7CisJfQorCWlm IChzdGF0ZSA8IFBNX1NVU1BFTkRfTUFYICYmICpzKQorCQlpZiAoc3RhdGUgPT0gUE1fU1VTUEVO RF9PTiB8fCB2YWxpZF9zdGF0ZShzdGF0ZSkpIHsKKwkJCWVycm9yID0gMDsKKwkJCXJlcXVlc3Rf c3VzcGVuZF9zdGF0ZShzdGF0ZSk7CisJCX0KKwlyZXR1cm4gZXJyb3IgPyBlcnJvciA6IG47Cit9 CisKK3Bvd2VyX2F0dHIocmVxdWVzdF9zdGF0ZSk7CisjZW5kaWYgLyogQ09ORklHX1NVU1BFTkRf QkxPQ0sgKi8KKwogI2lmZGVmIENPTkZJR19QTV9UUkFDRQogaW50IHBtX3RyYWNlX2VuYWJsZWQ7 CiAKQEAgLTU2Nyw2ICs2MjYsOSBAQCBwb3dlcl9hdHRyKHBtX3RyYWNlKTsKIAogc3RhdGljIHN0 cnVjdCBhdHRyaWJ1dGUgKiBnW10gPSB7CiAJJnN0YXRlX2F0dHIuYXR0ciwKKyNpZmRlZiBDT05G SUdfU1VTUEVORF9CTE9DSworCSZyZXF1ZXN0X3N0YXRlX2F0dHIuYXR0ciwKKyNlbmRpZgogI2lm ZGVmIENPTkZJR19QTV9UUkFDRQogCSZwbV90cmFjZV9hdHRyLmF0dHIsCiAjZW5kaWYKZGlmZiAt LWdpdCBhL2tlcm5lbC9wb3dlci9wb3dlci5oIGIva2VybmVsL3Bvd2VyL3Bvd2VyLmgKaW5kZXgg NDZiNWVjNy4uMjQxNGE3NCAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL3Bvd2VyLmgKKysrIGIv a2VybmVsL3Bvd2VyL3Bvd2VyLmgKQEAgLTIyMywzICsyMjMsOSBAQCBzdGF0aWMgaW5saW5lIHZv aWQgc3VzcGVuZF90aGF3X3Byb2Nlc3Nlcyh2b2lkKQogewogfQogI2VuZGlmCisKKyNpZmRlZiBD T05GSUdfU1VTUEVORF9CTE9DSworLyoga2VybmVsL3Bvd2VyL3N1c3BlbmRfYmxvY2suYyAqLwor dm9pZCByZXF1ZXN0X3N1c3BlbmRfc3RhdGUoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKTsKKyNlbmRp ZgorCmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvc3VzcGVuZF9ibG9jay5jIGIva2VybmVsL3Bv d2VyL3N1c3BlbmRfYmxvY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5i NGYyMTkxCi0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL3Bvd2VyL3N1c3BlbmRfYmxvY2suYwpA QCAtMCwwICsxLDI1NyBAQAorLyoga2VybmVsL3Bvd2VyL3N1c3BlbmRfYmxvY2suYworICoKKyAq IENvcHlyaWdodCAoQykgMjAwNS0yMDA4IEdvb2dsZSwgSW5jLgorICoKKyAqIFRoaXMgc29mdHdh cmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMK KyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlm aWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK KyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICov CisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9ydGMuaD4KKyNp bmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CisjaW5jbHVkZSA8bGludXgvc3VzcGVuZF9ibG9jay5o PgorI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgInBvd2VyLmgiCisKK2VudW0g eworCURFQlVHX0VYSVRfU1VTUEVORCA9IDFVIDw8IDAsCisJREVCVUdfV0FLRVVQID0gMVUgPDwg MSwKKwlERUJVR19VU0VSX1NUQVRFID0gMVUgPDwgMiwKKwlERUJVR19TVVNQRU5EID0gMVUgPDwg MywKKwlERUJVR19TVVNQRU5EX0JMT0NLRVIgPSAxVSA8PCA0LAorfTsKK3N0YXRpYyBpbnQgZGVi dWdfbWFzayA9IERFQlVHX0VYSVRfU1VTUEVORCB8IERFQlVHX1dBS0VVUCB8IERFQlVHX1VTRVJf U1RBVEU7Cittb2R1bGVfcGFyYW1fbmFtZWQoZGVidWdfbWFzaywgZGVidWdfbWFzaywgaW50LCBT X0lSVUdPIHwgU19JV1VTUiB8IFNfSVdHUlApOworCisjZGVmaW5lIFNCX0lOSVRJQUxJWkVEICAg ICAgICAgICAgKDFVIDw8IDgpCisjZGVmaW5lIFNCX0FDVElWRSAgICAgICAgICAgICAgICAgKDFV IDw8IDkpCisKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soc3RhdGVfbG9jayk7CitzdGF0aWMgYXRv bWljX3Qgc3VzcGVuZF9ibG9ja19jb3VudDsKK3N0YXRpYyBhdG9taWNfdCBjdXJyZW50X2V2ZW50 X251bTsKK3N0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpzdXNwZW5kX3dvcmtfcXVldWU7CitzdHJ1 Y3Qgc3VzcGVuZF9ibG9ja2VyIG1haW5fc3VzcGVuZF9ibG9ja2VyOworc3RhdGljIHN1c3BlbmRf c3RhdGVfdCByZXF1ZXN0ZWRfc3VzcGVuZF9zdGF0ZSA9IFBNX1NVU1BFTkRfTUVNOworc3RhdGlj IGJvb2wgZW5hYmxlX3N1c3BlbmRfYmxvY2tlcnM7CisKK2Jvb2wgc3VzcGVuZF9pc19ibG9ja2Vk KHZvaWQpCit7CisJaWYgKFdBUk5fT05DRSghZW5hYmxlX3N1c3BlbmRfYmxvY2tlcnMsICJpZ25v cmluZyBzdXNwZW5kIGJsb2NrZXJzXG4iKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuICEhYXRvbWlj X3JlYWQoJnN1c3BlbmRfYmxvY2tfY291bnQpOworfQorCitzdGF0aWMgdm9pZCBzdXNwZW5kX3dv cmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJaW50IHJldDsKKwlpbnQgZW50cnlf ZXZlbnRfbnVtOworCisJZW5hYmxlX3N1c3BlbmRfYmxvY2tlcnMgPSAxOworCityZXRyeToKKwlp ZiAoc3VzcGVuZF9pc19ibG9ja2VkKCkpIHsKKwkJaWYgKGRlYnVnX21hc2sgJiBERUJVR19TVVNQ RU5EKQorCQkJcHJfaW5mbygic3VzcGVuZDogYWJvcnQgc3VzcGVuZFxuIik7CisJCWdvdG8gYWJv cnQ7CisJfQorCisJZW50cnlfZXZlbnRfbnVtID0gYXRvbWljX3JlYWQoJmN1cnJlbnRfZXZlbnRf bnVtKTsKKwlpZiAoZGVidWdfbWFzayAmIERFQlVHX1NVU1BFTkQpCisJCXByX2luZm8oInN1c3Bl bmQ6IGVudGVyIHN1c3BlbmRcbiIpOworCXJldCA9IHBtX3N1c3BlbmQocmVxdWVzdGVkX3N1c3Bl bmRfc3RhdGUpOworCWlmIChkZWJ1Z19tYXNrICYgREVCVUdfRVhJVF9TVVNQRU5EKSB7CisJCXN0 cnVjdCB0aW1lc3BlYyB0czsKKwkJc3RydWN0IHJ0Y190aW1lIHRtOworCQlnZXRuc3RpbWVvZmRh eSgmdHMpOworCQlydGNfdGltZV90b190bSh0cy50dl9zZWMsICZ0bSk7CisJCXByX2luZm8oInN1 c3BlbmQ6IGV4aXQgc3VzcGVuZCwgcmV0ID0gJWQgIgorCQkJIiglZC0lMDJkLSUwMmQgJTAyZDol MDJkOiUwMmQuJTA5bHUgVVRDKVxuIiwgcmV0LAorCQkJdG0udG1feWVhciArIDE5MDAsIHRtLnRt X21vbiArIDEsIHRtLnRtX21kYXksCisJCQl0bS50bV9ob3VyLCB0bS50bV9taW4sIHRtLnRtX3Nl YywgdHMudHZfbnNlYyk7CisJfQorCWlmIChhdG9taWNfcmVhZCgmY3VycmVudF9ldmVudF9udW0p ID09IGVudHJ5X2V2ZW50X251bSkgeworCQlpZiAoZGVidWdfbWFzayAmIERFQlVHX1NVU1BFTkQp CisJCQlwcl9pbmZvKCJzdXNwZW5kOiBwbV9zdXNwZW5kIHJldHVybmVkIHdpdGggbm8gZXZlbnRc biIpOworCQlnb3RvIHJldHJ5OworCX0KK2Fib3J0OgorCWVuYWJsZV9zdXNwZW5kX2Jsb2NrZXJz ID0gMDsKK30KK3N0YXRpYyBERUNMQVJFX1dPUksoc3VzcGVuZF93b3JrLCBzdXNwZW5kX3dvcmtl cik7CisKK3N0YXRpYyBpbnQgc3VzcGVuZF9ibG9ja19zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNl ICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlpbnQgcmV0ID0gc3VzcGVuZF9pc19ibG9j a2VkKCkgPyAtRUFHQUlOIDogMDsKKwlpZiAoZGVidWdfbWFzayAmIERFQlVHX1NVU1BFTkQpCisJ CXByX2luZm8oInN1c3BlbmRfYmxvY2tfc3VzcGVuZCByZXR1cm4gJWRcbiIsIHJldCk7CisJcmV0 dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBzeXNkZXZfY2xhc3Mgc3VzcGVuZF9ibG9ja19z eXNjbGFzcyA9IHsKKwkubmFtZSA9ICJzdXNwZW5kX2Jsb2NrIiwKKwkuc3VzcGVuZCA9IHN1c3Bl bmRfYmxvY2tfc3VzcGVuZCwKK307CitzdGF0aWMgc3RydWN0IHN5c19kZXZpY2Ugc3VzcGVuZF9i bG9ja19zeXNkZXYgPSB7CisJLmNscyA9ICZzdXNwZW5kX2Jsb2NrX3N5c2NsYXNzLAorfTsKKwor LyoqCisgKiBzdXNwZW5kX2Jsb2NrZXJfaW5pdCgpIC0gSW5pdGlhbGl6ZSBhIHN1c3BlbmQgYmxv Y2tlcgorICogQGJsb2NrZXI6CVRoZSBzdXNwZW5kIGJsb2NrZXIgdG8gaW5pdGlhbGl6ZS4KKyAq IEBuYW1lOglUaGUgbmFtZSBvZiB0aGUgc3VzcGVuZCBibG9ja2VyIHRvIHNob3cgaW4KKyAqCQkv cHJvYy9zdXNwZW5kX2Jsb2NrZXJzCisgKi8KK3ZvaWQgc3VzcGVuZF9ibG9ja2VyX2luaXQoc3Ry dWN0IHN1c3BlbmRfYmxvY2tlciAqYmxvY2tlciwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpZiAo bmFtZSkKKwkJYmxvY2tlci0+bmFtZSA9IG5hbWU7CisJQlVHX09OKCFibG9ja2VyLT5uYW1lKTsK KworCWlmIChkZWJ1Z19tYXNrICYgREVCVUdfU1VTUEVORF9CTE9DS0VSKQorCQlwcl9pbmZvKCJz dXNwZW5kX2Jsb2NrZXJfaW5pdCBuYW1lPSVzXG4iLCBibG9ja2VyLT5uYW1lKTsKKworCWF0b21p Y19zZXQoJmJsb2NrZXItPmZsYWdzLCBTQl9JTklUSUFMSVpFRCk7Cit9CitFWFBPUlRfU1lNQk9M KHN1c3BlbmRfYmxvY2tlcl9pbml0KTsKKworLyoqCisgKiBzdXNwZW5kX2Jsb2NrZXJfZGVzdHJv eSgpIC0gRGVzdHJveSBhIHN1c3BlbmQgYmxvY2tlcgorICogQGJsb2NrZXI6CVRoZSBzdXNwZW5k IGJsb2NrZXIgdG8gZGVzdHJveS4KKyAqLwordm9pZCBzdXNwZW5kX2Jsb2NrZXJfZGVzdHJveShz dHJ1Y3Qgc3VzcGVuZF9ibG9ja2VyICpibG9ja2VyKQoreworCWludCBmbGFnczsKKwlpZiAoZGVi dWdfbWFzayAmIERFQlVHX1NVU1BFTkRfQkxPQ0tFUikKKwkJcHJfaW5mbygic3VzcGVuZF9ibG9j a2VyX2Rlc3Ryb3kgbmFtZT0lc1xuIiwgYmxvY2tlci0+bmFtZSk7CisJZmxhZ3MgPSBhdG9taWNf eGNoZygmYmxvY2tlci0+ZmxhZ3MsIDApOworCVdBUk4oIShmbGFncyAmIFNCX0lOSVRJQUxJWkVE KSwgInN1c3BlbmRfYmxvY2tlcl9kZXN0cm95IGNhbGxlZCBvbiAiCisJCQkJCSJ1bmluaXRpYWxp emVkIHN1c3BlbmRfYmxvY2tlclxuIik7CisJaWYgKGZsYWdzID09IChTQl9JTklUSUFMSVpFRCB8 IFNCX0FDVElWRSkpCisJCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZzdXNwZW5kX2Jsb2NrX2Nv dW50KSkKKwkJCXF1ZXVlX3dvcmsoc3VzcGVuZF93b3JrX3F1ZXVlLCAmc3VzcGVuZF93b3JrKTsK K30KK0VYUE9SVF9TWU1CT0woc3VzcGVuZF9ibG9ja2VyX2Rlc3Ryb3kpOworCisvKioKKyAqIHN1 c3BlbmRfYmxvY2soKSAtIEJsb2NrIHN1c3BlbmQKKyAqIEBibG9ja2VyOglUaGUgc3VzcGVuZCBi bG9ja2VyIHRvIHVzZQorICovCit2b2lkIHN1c3BlbmRfYmxvY2soc3RydWN0IHN1c3BlbmRfYmxv Y2tlciAqYmxvY2tlcikKK3sKKwlCVUdfT04oIShhdG9taWNfcmVhZCgmYmxvY2tlci0+ZmxhZ3Mp ICYgU0JfSU5JVElBTElaRUQpKTsKKworCWlmIChkZWJ1Z19tYXNrICYgREVCVUdfU1VTUEVORF9C TE9DS0VSKQorCQlwcl9pbmZvKCJzdXNwZW5kX2Jsb2NrOiAlc1xuIiwgYmxvY2tlci0+bmFtZSk7 CisJaWYgKGF0b21pY19jbXB4Y2hnKCZibG9ja2VyLT5mbGFncywgU0JfSU5JVElBTElaRUQsCisJ ICAgIFNCX0lOSVRJQUxJWkVEIHwgU0JfQUNUSVZFKSA9PSBTQl9JTklUSUFMSVpFRCkKKwkJYXRv bWljX2luYygmc3VzcGVuZF9ibG9ja19jb3VudCk7CisKKwlhdG9taWNfaW5jKCZjdXJyZW50X2V2 ZW50X251bSk7Cit9CitFWFBPUlRfU1lNQk9MKHN1c3BlbmRfYmxvY2spOworCisvKioKKyAqIHN1 c3BlbmRfdW5ibG9jaygpIC0gVW5ibG9jayBzdXNwZW5kCisgKiBAYmxvY2tlcjoJVGhlIHN1c3Bl bmQgYmxvY2tlciB0byB1bmJsb2NrLgorICoKKyAqIElmIG5vIG90aGVyIHN1c3BlbmQgYmxvY2tl cnMgYmxvY2sgc3VzcGVuZCwgdGhlIHN5c3RlbSB3aWxsIHN1c3BlbmQuCisgKi8KK3ZvaWQgc3Vz cGVuZF91bmJsb2NrKHN0cnVjdCBzdXNwZW5kX2Jsb2NrZXIgKmJsb2NrZXIpCit7CisJaWYgKGRl YnVnX21hc2sgJiBERUJVR19TVVNQRU5EX0JMT0NLRVIpCisJCXByX2luZm8oInN1c3BlbmRfdW5i bG9jazogJXNcbiIsIGJsb2NrZXItPm5hbWUpOworCisJaWYgKGF0b21pY19jbXB4Y2hnKCZibG9j a2VyLT5mbGFncywgU0JfSU5JVElBTElaRUQgfCBTQl9BQ1RJVkUsCisJICAgIFNCX0lOSVRJQUxJ WkVEKSA9PSAoU0JfSU5JVElBTElaRUQgfCBTQl9BQ1RJVkUpKQorCQlpZiAoYXRvbWljX2RlY19h bmRfdGVzdCgmc3VzcGVuZF9ibG9ja19jb3VudCkpCisJCQlxdWV1ZV93b3JrKHN1c3BlbmRfd29y a19xdWV1ZSwgJnN1c3BlbmRfd29yayk7Cit9CitFWFBPUlRfU1lNQk9MKHN1c3BlbmRfdW5ibG9j ayk7CisKKy8qKgorICogaXNfYmxvY2tpbmdfc3VzcGVuZCgpIC0gVGVzdCBpZiBhIHN1c3BlbmQg YmxvY2tlciBpcyBibG9ja2luZyBzdXNwZW5kCisgKiBAYmxvY2tlcjoJVGhlIHN1c3BlbmQgYmxv Y2tlciB0byBjaGVjay4KKyAqLworYm9vbCBpc19ibG9ja2luZ19zdXNwZW5kKHN0cnVjdCBzdXNw ZW5kX2Jsb2NrZXIgKmJsb2NrZXIpCit7CisJcmV0dXJuICEhKGF0b21pY19yZWFkKCZibG9ja2Vy LT5mbGFncykgJiBTQl9BQ1RJVkUpOworfQorRVhQT1JUX1NZTUJPTChpc19ibG9ja2luZ19zdXNw ZW5kKTsKKwordm9pZCByZXF1ZXN0X3N1c3BlbmRfc3RhdGUoc3VzcGVuZF9zdGF0ZV90IHN0YXRl KQoreworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnN0YXRl X2xvY2ssIGlycWZsYWdzKTsKKwlpZiAoZGVidWdfbWFzayAmIERFQlVHX1VTRVJfU1RBVEUpIHsK KwkJc3RydWN0IHRpbWVzcGVjIHRzOworCQlzdHJ1Y3QgcnRjX3RpbWUgdG07CisJCWdldG5zdGlt ZW9mZGF5KCZ0cyk7CisJCXJ0Y190aW1lX3RvX3RtKHRzLnR2X3NlYywgJnRtKTsKKwkJcHJfaW5m bygicmVxdWVzdF9zdXNwZW5kX3N0YXRlOiAlcyAoJWQtPiVkKSBhdCAlbGxkICIKKwkJCSIoJWQt JTAyZC0lMDJkICUwMmQ6JTAyZDolMDJkLiUwOWx1IFVUQylcbiIsCisJCQlzdGF0ZSAhPSBQTV9T VVNQRU5EX09OID8gInNsZWVwIiA6ICJ3YWtldXAiLAorCQkJcmVxdWVzdGVkX3N1c3BlbmRfc3Rh dGUsIHN0YXRlLAorCQkJa3RpbWVfdG9fbnMoa3RpbWVfZ2V0KCkpLAorCQkJdG0udG1feWVhciAr IDE5MDAsIHRtLnRtX21vbiArIDEsIHRtLnRtX21kYXksCisJCQl0bS50bV9ob3VyLCB0bS50bV9t aW4sIHRtLnRtX3NlYywgdHMudHZfbnNlYyk7CisJfQorCXJlcXVlc3RlZF9zdXNwZW5kX3N0YXRl ID0gc3RhdGU7CisJaWYgKHN0YXRlID09IFBNX1NVU1BFTkRfT04pCisJCXN1c3BlbmRfYmxvY2so Jm1haW5fc3VzcGVuZF9ibG9ja2VyKTsKKwllbHNlCisJCXN1c3BlbmRfdW5ibG9jaygmbWFpbl9z dXNwZW5kX2Jsb2NrZXIpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN0YXRlX2xvY2ssIGly cWZsYWdzKTsKK30KKworc3RhdGljIGludCBfX2luaXQgc3VzcGVuZF9ibG9ja19pbml0KHZvaWQp Cit7CisJaW50IHJldDsKKworCXN1c3BlbmRfYmxvY2tlcl9pbml0KCZtYWluX3N1c3BlbmRfYmxv Y2tlciwgIm1haW4iKTsKKwlzdXNwZW5kX2Jsb2NrKCZtYWluX3N1c3BlbmRfYmxvY2tlcik7CisK KwlyZXQgPSBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJnN1c3BlbmRfYmxvY2tfc3lzY2xhc3MpOwor CWlmIChyZXQpIHsKKwkJcHJfZXJyKCJzdXNwZW5kX2Jsb2NrX2luaXQ6IHN5c2Rldl9jbGFzc19y ZWdpc3RlciBmYWlsZWRcbiIpOworCQlnb3RvIGVycl9zeXNkZXZfY2xhc3NfcmVnaXN0ZXI7CisJ fQorCXJldCA9IHN5c2Rldl9yZWdpc3Rlcigmc3VzcGVuZF9ibG9ja19zeXNkZXYpOworCWlmIChy ZXQpIHsKKwkJcHJfZXJyKCJzdXNwZW5kX2Jsb2NrX2luaXQ6IHN1c3BlbmRfYmxvY2tfc3lzZGV2 IGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX3N5c2Rldl9yZWdpc3RlcjsKKwl9CisKKwlzdXNwZW5k X3dvcmtfcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgic3VzcGVuZCIpOwor CWlmIChzdXNwZW5kX3dvcmtfcXVldWUgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQln b3RvIGVycl9zdXNwZW5kX3dvcmtfcXVldWU7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9zdXNw ZW5kX3dvcmtfcXVldWU6CisJc3lzZGV2X3VucmVnaXN0ZXIoJnN1c3BlbmRfYmxvY2tfc3lzZGV2 KTsKK2Vycl9zeXNkZXZfcmVnaXN0ZXI6CisJc3lzZGV2X2NsYXNzX3VucmVnaXN0ZXIoJnN1c3Bl bmRfYmxvY2tfc3lzY2xhc3MpOworZXJyX3N5c2Rldl9jbGFzc19yZWdpc3RlcjoKKwlzdXNwZW5k X2Jsb2NrZXJfZGVzdHJveSgmbWFpbl9zdXNwZW5kX2Jsb2NrZXIpOworCXJldHVybiByZXQ7Cit9 CisKK3N0YXRpYyB2b2lkICBfX2V4aXQgc3VzcGVuZF9ibG9ja19leGl0KHZvaWQpCit7CisJZGVz dHJveV93b3JrcXVldWUoc3VzcGVuZF93b3JrX3F1ZXVlKTsKKwlzeXNkZXZfdW5yZWdpc3Rlcigm c3VzcGVuZF9ibG9ja19zeXNkZXYpOworCXN5c2Rldl9jbGFzc191bnJlZ2lzdGVyKCZzdXNwZW5k X2Jsb2NrX3N5c2NsYXNzKTsKKwlzdXNwZW5kX2Jsb2NrZXJfZGVzdHJveSgmbWFpbl9zdXNwZW5k X2Jsb2NrZXIpOworfQorCitjb3JlX2luaXRjYWxsKHN1c3BlbmRfYmxvY2tfaW5pdCk7Cittb2R1 bGVfZXhpdChzdXNwZW5kX2Jsb2NrX2V4aXQpOwotLSAKMS42LjEKCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LXBtIG1haWxpbmcgbGlzdApsaW51 eC1wbUBsaXN0cy5saW51eC1mb3VuZGF0aW9uLm9yZwpodHRwczovL2xpc3RzLmxpbnV4LWZvdW5k YXRpb24ub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtcG0=