From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?utf-8?q?Arve=20Hj=C3=B8nnev=C3=A5g?= Subject: [PATCH 01/10] PM: Add wake lock api. Date: Tue, 10 Feb 2009 17:49:06 -0800 Message-ID: <1234316955-31304-2-git-send-email-arve@android.com> References: <1234316955-31304-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: <1234316955-31304-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 List-Id: linux-pm@vger.kernel.org QWRkcyAvc3lzL3Bvd2VyL3JlcXVlc3Rfc3RhdGUsIGEgbm9uLWJsb2NraW5nIGludGVyZmFjZSB0 aGF0IHNwZWNpZmllcwp3aGljaCBzdXNwZW5kIHN0YXRlIHRvIGVudGVyIHdoZW4gbm8gd2FrZWxv Y2tzIGFyZSBsb2NrZWQuIEEgc3BlY2lhbApzdGF0ZSwgIm9uIiwgc3RvcHMgdGhlIHByb2Nlc3Mg YnkgbG9ja2luZyB0aGUgIm1haW4iIHdha2Vsb2NrLgoKU2lnbmVkLW9mZi1ieTogQXJ2ZSBIasO4 bm5ldsOlZyA8YXJ2ZUBhbmRyb2lkLmNvbT4KLS0tCiBEb2N1bWVudGF0aW9uL3Bvd2VyL3dha2Vs b2Nrcy50eHQgfCAgIDgwICsrKysrCiBpbmNsdWRlL2xpbnV4L3dha2Vsb2NrLmggICAgICAgICAg fCAgIDkzICsrKysrCiBrZXJuZWwvcG93ZXIvS2NvbmZpZyAgICAgICAgICAgICAgfCAgIDE3ICsK IGtlcm5lbC9wb3dlci9NYWtlZmlsZSAgICAgICAgICAgICB8ICAgIDEgKwoga2VybmVsL3Bvd2Vy L21haW4uYyAgICAgICAgICAgICAgIHwgICA2MyArKysrCiBrZXJuZWwvcG93ZXIvcG93ZXIuaCAg ICAgICAgICAgICAgfCAgICA3ICsKIGtlcm5lbC9wb3dlci93YWtlbG9jay5jICAgICAgICAgICB8 ICA2NjQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogNyBmaWxlcyBjaGFu Z2VkLCA5MjUgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBEb2N1bWVudGF0aW9uL3Bvd2VyL3dha2Vsb2Nrcy50eHQKIGNyZWF0ZSBtb2RlIDEwMDc1NSBp bmNsdWRlL2xpbnV4L3dha2Vsb2NrLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBrZXJuZWwvcG93ZXIv d2FrZWxvY2suYwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXIvd2FrZWxvY2tzLnR4 dCBiL0RvY3VtZW50YXRpb24vcG93ZXIvd2FrZWxvY2tzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi44OTNhNDM4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlv bi9wb3dlci93YWtlbG9ja3MudHh0CkBAIC0wLDAgKzEsODAgQEAKK1dha2Vsb2NrcworPT09PT09 PT09CisKK0EgbG9ja2VkIHdha2Vsb2NrLCBkZXBlbmRpbmcgb24gaXRzIHR5cGUsIHByZXZlbnRz IHRoZSBzeXN0ZW0gZnJvbSBlbnRlcmluZworc3VzcGVuZCBvciBvdGhlciBsb3ctcG93ZXIgc3Rh dGVzLiBXaGVuIGNyZWF0aW5nIGEgd2FrZWxvY2ssIHlvdSBjYW4gc2VsZWN0CitpZiBpdCBwcmV2 ZW50cyBzdXNwZW5kIG9yIGxvdy1wb3dlciBpZGxlIHN0YXRlcy4gIElmIHRoZSB0eXBlIGlzIHNl dCB0bworV0FLRV9MT0NLX1NVU1BFTkQsIHRoZSB3YWtlbG9jayBwcmV2ZW50cyBhIGZ1bGwgc3lz dGVtIHN1c3BlbmQuIElmIHRoZSB0eXBlCitpcyBXQUtFX0xPQ0tfSURMRSwgbG93LXBvd2VyIHN0 YXRlcyB0aGF0IGNhdXNlIGxhcmdlIGludGVycnVwdCBsYXRlbmNpZXMsIG9yCit0aGF0IGRpc2Fi bGUgYSBzZXQgb2YgaW50ZXJydXB0cywgd2lsbCBub3QgYmUgZW50ZXJlZCBmcm9tIGlkbGUgdW50 aWwgdGhlCit3YWtlbG9ja3MgYXJlIHJlbGVhc2VkLiBVbmxlc3MgdGhlIHR5cGUgaXMgc3BlY2lm aWVkLCB0aGlzIGRvY3VtZW50IHJlZmVycwordG8gd2FrZWxvY2tzIHdpdGggdGhlIHR5cGUgc2V0 IHRvIFdBS0VfTE9DS19TVVNQRU5ELgorCitJZiB0aGUgc3VzcGVuZCBvcGVyYXRpb24gaGFzIGFs cmVhZHkgc3RhcnRlZCB3aGVuIGxvY2tpbmcgYSB3YWtlbG9jaywgaXQgd2lsbAorYWJvcnQgdGhl IHN1c3BlbmQgb3BlcmF0aW9uIGFzIGxvbmcgaXQgaGFzIG5vdCBhbHJlYWR5IHJlYWNoZWQgdGhl IHN1c3BlbmRfbGF0ZQorc3RhZ2UuIFRoaXMgbWVhbnMgdGhhdCBsb2NraW5nIGEgd2FrZWxvY2sg ZnJvbSBhbiBpbnRlcnJ1cHQgaGFuZGxlciBvciBhCitmcmVlemVhYmxlIHRocmVhZCBhbHdheXMg d29ya3MsIGJ1dCBpZiB5b3UgbG9jayBhIHdha2Vsb2NrIGZyb20gYSBzdXNwZW5kX2xhdGUKK2hh bmRsZXIgeW91IG11c3QgYWxzbyByZXR1cm4gYW4gZXJyb3IgZnJvbSB0aGF0IGhhbmRsZXIgdG8g YWJvcnQgc3VzcGVuZC4KKworV2FrZWxvY2tzIGNhbiBiZSB1c2VkIHRvIGFsbG93IHVzZXItc3Bh Y2UgdG8gZGVjaWRlIHdoaWNoIGtleXMgc2hvdWxkIHdha2UgdGhlCitmdWxsIHN5c3RlbSB1cCBh bmQgdHVybiB0aGUgc2NyZWVuIG9uLiBVc2Ugc2V0X2lycV93YWtlIG9yIGEgcGxhdGZvcm0gc3Bl Y2lmaWMKK2FwaSB0byBtYWtlIHN1cmUgdGhlIGtleXBhZCBpbnRlcnJ1cHQgd2FrZXMgdXAgdGhl IGNwdS4gT25jZSB0aGUga2V5cGFkIGRyaXZlcgoraGFzIHJlc3VtZWQsIHRoZSBzZXF1ZW5jZSBv ZiBldmVudHMgY2FuIGxvb2sgbGlrZSB0aGlzOgorLSBUaGUgS2V5cGFkIGRyaXZlciBnZXRzIGFu IGludGVycnVwdC4gSXQgdGhlbiBsb2NrcyB0aGUga2V5cGFkLXNjYW4gd2FrZWxvY2sKKyAgYW5k IHN0YXJ0cyBzY2FubmluZyB0aGUga2V5cGFkIG1hdHJpeC4KKy0gVGhlIGtleXBhZC1zY2FuIGNv ZGUgZGV0ZWN0cyBhIGtleSBjaGFuZ2UgYW5kIHJlcG9ydHMgaXQgdG8gdGhlIGlucHV0LWV2ZW50 CisgIGRyaXZlci4KKy0gVGhlIGlucHV0LWV2ZW50IGRyaXZlciBzZWVzIHRoZSBrZXkgY2hhbmdl LCBlbnF1ZXVlcyBhbiBldmVudCwgYW5kIGxvY2tzCisgIHRoZSBpbnB1dC1ldmVudC1xdWV1ZSB3 YWtlbG9jay4KKy0gVGhlIGtleXBhZC1zY2FuIGNvZGUgZGV0ZWN0cyB0aGF0IG5vIGtleXMgYXJl IGhlbGQgYW5kIHVubG9ja3MgdGhlCisgIGtleXBhZC1zY2FuIHdha2Vsb2NrLgorLSBUaGUgdXNl ci1zcGFjZSBpbnB1dC1ldmVudCB0aHJlYWQgcmV0dXJucyBmcm9tIHNlbGVjdC9wb2xsLCBsb2Nr cyB0aGUKKyAgcHJvY2Vzcy1pbnB1dC1ldmVudHMgd2FrZWxvY2sgYW5kIHRoZW4gY2FsbHMgcmVh ZCBpbiB0aGUgaW5wdXQtZXZlbnQgZGV2aWNlLgorLSBUaGUgaW5wdXQtZXZlbnQgZHJpdmVyIGRl cXVldWVzIHRoZSBrZXktZXZlbnQgYW5kLCBzaW5jZSB0aGUgcXVldWUgaXMgbm93CisgIGVtcHR5 LCBpdCB1bmxvY2tzIHRoZSBpbnB1dC1ldmVudC1xdWV1ZSB3YWtlbG9jay4KKy0gVGhlIHVzZXIt c3BhY2UgaW5wdXQtZXZlbnQgdGhyZWFkIHJldHVybnMgZnJvbSByZWFkLiBJdCBkZXRlcm1pbmVz IHRoYXQgdGhlCisgIGtleSBzaG91bGQgbm90IHdha2UgdXAgdGhlIGZ1bGwgc3lzdGVtLCByZWxl YXNlcyB0aGUgcHJvY2Vzcy1pbnB1dC1ldmVudHMKKyAgd2FrZWxvY2sgYW5kIGNhbGxzIHNlbGVj dCBvciBwb2xsLgorCisgICAgICAgICAgICAgICAgIEtleSBwcmVzc2VkICAgS2V5IHJlbGVhc2Vk CisgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIHwKK2tleXBhZC1zY2FuICAgICAg ICAgICsrKysrKysrKysrKysrKysrKworaW5wdXQtZXZlbnQtcXVldWUgICAgICAgICsrKyAgICAg ICAgICArKysKK3Byb2Nlc3MtaW5wdXQtZXZlbnRzICAgICAgICsrKyAgICAgICAgICArKysKKwor CitEcml2ZXIgQVBJCis9PT09PT09PT09CisKK0EgZHJpdmVyIGNhbiB1c2UgdGhlIHdha2Vsb2Nr IGFwaSBieSBhZGRpbmcgYSB3YWtlbG9jayB2YXJpYWJsZSB0byBpdHMgc3RhdGUKK2FuZCBjYWxs aW5nIHdha2VfbG9ja19pbml0LiBGb3IgaW5zdGFuY2U6CitzdHJ1Y3Qgc3RhdGUgeworCXN0cnVj dCB3YWtlbG9jayB3YWtlbG9jazsKK30KKworaW5pdCgpIHsKKwl3YWtlX2xvY2tfaW5pdCgmc3Rh dGUtPndha2Vsb2NrLCBXQUtFX0xPQ0tfU1VTUEVORCwgIndha2Vsb2NrbmFtZSIpOworfQorCitC ZWZvcmUgZnJlZWluZyB0aGUgbWVtb3J5LCB3YWtlX2xvY2tfZGVzdHJveSBtdXN0IGJlIGNhbGxl ZDoKKwordW5pbml0KCkgeworCXdha2VfbG9ja19kZXN0cm95KCZzdGF0ZS0+d2FrZWxvY2spOwor fQorCitXaGVuIHRoZSBkcml2ZXIgZGV0ZXJtaW5lcyB0aGF0IGl0IG5lZWRzIHRvIHJ1biAodXN1 YWxseSBpbiBhbiBpbnRlcnJ1cHQKK2hhbmRsZXIpIGl0IGNhbGxzIHdha2VfbG9jazoKKwl3YWtl X2xvY2soJnN0YXRlLT53YWtlbG9jayk7CisKK1doZW4gaXQgbm8gbG9uZ2VyIG5lZWRzIHRvIHJ1 biBpdCBjYWxscyB3YWtlX3VubG9jazoKKwl3YWtlX3VubG9jaygmc3RhdGUtPndha2Vsb2NrKTsK KworSXQgY2FuIGFsc28gY2FsbCB3YWtlX2xvY2tfdGltZW91dCB0byByZWxlYXNlIHRoZSB3YWtl bG9jayBhZnRlciBhIGRlbGF5OgorCXdha2VfbG9ja190aW1lb3V0KCZzdGF0ZS0+d2FrZWxvY2ss IEhaKTsKKworVGhpcyB3b3JrcyB3aGV0aGVyIHRoZSB3YWtlbG9jayBpcyBhbHJlYWR5IGhlbGQg b3Igbm90LiBJdCBpcyB1c2VmdWwgaWYgdGhlCitkcml2ZXIgd29rZSB1cCBvdGhlciBwYXJ0cyBv ZiB0aGUgc3lzdGVtIHRoYXQgZG8gbm90IHVzZSB3YWtlbG9ja3MgYnV0CitzdGlsbCBuZWVkIHRv IHJ1bi4gQXZvaWQgdGhpcyB3aGVuIHBvc3NpYmxlLCBzaW5jZSBpdCB3aWxsIHdhc3RlIHBvd2Vy CitpZiB0aGUgdGltZW91dCBpcyBsb25nIG9yIG1heSBmYWlsIHRvIGZpbmlzaCBuZWVkZWQgd29y ayBpZiB0aGUgdGltZW91dCBpcworc2hvcnQuCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgv d2FrZWxvY2suaCBiL2luY2x1ZGUvbGludXgvd2FrZWxvY2suaApuZXcgZmlsZSBtb2RlIDEwMDc1 NQppbmRleCAwMDAwMDAwLi5lYzg3OGQyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51 eC93YWtlbG9jay5oCkBAIC0wLDAgKzEsOTMgQEAKKy8qIGluY2x1ZGUvbGludXgvd2FrZWxvY2su aAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IEdvb2dsZSwgSW5jLgorICoKKyAqIFRo aXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwg YW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu CisgKgorICovCisKKyNpZm5kZWYgX0xJTlVYX1dBS0VMT0NLX0gKKyNkZWZpbmUgX0xJTlVYX1dB S0VMT0NLX0gKKworI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGlt ZS5oPgorCisvKiBBIHdha2VfbG9jayBwcmV2ZW50cyB0aGUgc3lzdGVtIGZyb20gZW50ZXJpbmcg c3VzcGVuZCBvciBvdGhlciBsb3cgcG93ZXIKKyAqIHN0YXRlcyB3aGVuIGFjdGl2ZS4gSWYgdGhl IHR5cGUgaXMgc2V0IHRvIFdBS0VfTE9DS19TVVNQRU5ELCB0aGUgd2FrZV9sb2NrCisgKiBwcmV2 ZW50cyBhIGZ1bGwgc3lzdGVtIHN1c3BlbmQuIElmIHRoZSB0eXBlIGlzIFdBS0VfTE9DS19JRExF LCBsb3cgcG93ZXIKKyAqIHN0YXRlcyB0aGF0IGNhdXNlIGxhcmdlIGludGVycnVwdCBsYXRlbmNp ZXMgb3IgdGhhdCBkaXNhYmxlIGEgc2V0IG9mCisgKiBpbnRlcnJ1cHRzIHdpbGwgbm90IGVudGVy ZWQgZnJvbSBpZGxlIHVudGlsIHRoZSB3YWtlX2xvY2tzIGFyZSByZWxlYXNlZC4KKyAqLworCitl bnVtIHsKKwlXQUtFX0xPQ0tfU1VTUEVORCwgLyogUHJldmVudCBzdXNwZW5kICovCisJV0FLRV9M T0NLX0lETEUsICAgIC8qIFByZXZlbnQgbG93IHBvd2VyIGlkbGUgKi8KKwlXQUtFX0xPQ0tfVFlQ RV9DT1VOVAorfTsKKworc3RydWN0IHdha2VfbG9jayB7CisjaWZkZWYgQ09ORklHX1dBS0VMT0NL CisJc3RydWN0IGxpc3RfaGVhZCAgICBsaW5rOworCWludCAgICAgICAgICAgICAgICAgZmxhZ3M7 CisJY29uc3QgY2hhciAgICAgICAgICpuYW1lOworCXVuc2lnbmVkIGxvbmcgICAgICAgZXhwaXJl czsKKyNpZmRlZiBDT05GSUdfV0FLRUxPQ0tfU1RBVAorCXN0cnVjdCB7CisJCWludCAgICAgICAg ICAgICBjb3VudDsKKwkJaW50ICAgICAgICAgICAgIGV4cGlyZV9jb3VudDsKKwkJaW50ICAgICAg ICAgICAgIHdha2V1cF9jb3VudDsKKwkJa3RpbWVfdCAgICAgICAgIHRvdGFsX3RpbWU7CisJCWt0 aW1lX3QgICAgICAgICBwcmV2ZW50X3N1c3BlbmRfdGltZTsKKwkJa3RpbWVfdCAgICAgICAgIG1h eF90aW1lOworCQlrdGltZV90ICAgICAgICAgbGFzdF90aW1lOworCX0gc3RhdDsKKyNlbmRpZgor I2VuZGlmCit9OworCisjaWZkZWYgQ09ORklHX1dBS0VMT0NLCisKK3ZvaWQgd2FrZV9sb2NrX2lu aXQoc3RydWN0IHdha2VfbG9jayAqbG9jaywgaW50IHR5cGUsIGNvbnN0IGNoYXIgKm5hbWUpOwor dm9pZCB3YWtlX2xvY2tfZGVzdHJveShzdHJ1Y3Qgd2FrZV9sb2NrICpsb2NrKTsKK3ZvaWQgd2Fr ZV9sb2NrKHN0cnVjdCB3YWtlX2xvY2sgKmxvY2spOwordm9pZCB3YWtlX2xvY2tfdGltZW91dChz dHJ1Y3Qgd2FrZV9sb2NrICpsb2NrLCBsb25nIHRpbWVvdXQpOwordm9pZCB3YWtlX3VubG9jayhz dHJ1Y3Qgd2FrZV9sb2NrICpsb2NrKTsKKworLyogd2FrZV9sb2NrX2FjdGl2ZSByZXR1cm5zIGEg bm9uLXplcm8gdmFsdWUgaWYgdGhlIHdha2VfbG9jayBpcyBjdXJyZW50bHkKKyAqIGxvY2tlZC4g SWYgdGhlIHdha2VfbG9jayBoYXMgYSB0aW1lb3V0LCBpdCBkb2VzIG5vdCBjaGVjayB0aGUgdGlt ZW91dCwKKyAqIGJ1dCBpZiB0aGUgdGltZW91dCBoYWQgYWxyZWFkeSBleHBpcmVkIHdoZW4gaXQg d2FzIGNoZWNrZWQgZWxzZXdoZXJlCisgKiB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIDAuCisg Ki8KK2ludCB3YWtlX2xvY2tfYWN0aXZlKHN0cnVjdCB3YWtlX2xvY2sgKmxvY2spOworCisvKiBo YXNfd2FrZV9sb2NrIGNhbiBiZSB1c2VkIGJ5IGdlbmVyaWMgcG93ZXIgbWFuYWdlbWVudCBjb2Rl IHRvIGFib3J0IHN1c3BlbmQuCisgKiBoYXNfd2FrZV9sb2NrIHJldHVybnMgMCBpZiBubyB3YWtl IGxvY2tzIG9mIHRoZSBzcGVjaWZpZWQgdHlwZSBhcmUgYWN0aXZlLAorICogYW5kIG5vbi16ZXJv IGlmIG9uZSBvciBtb3JlIHdha2UgbG9ja3MgYXJlIGhlbGQuIFNwZWNpZmljYWxseSBpdCByZXR1 cm5zCisgKiAtMSBpZiBvbmUgb3IgbW9yZSB3YWtlIGxvY2tzIHdpdGggbm8gdGltZW91dCBhcmUg YWN0aXZlIG9yIHRoZQorICogbnVtYmVyIG9mIGppZmZpZXMgdW50aWwgYWxsIGFjdGl2ZSB3YWtl IGxvY2tzIHRpbWUgb3V0LgorICovCitsb25nIGhhc193YWtlX2xvY2soaW50IHR5cGUpOworCisj ZWxzZQorCitzdGF0aWMgaW5saW5lIHZvaWQgd2FrZV9sb2NrX2luaXQoc3RydWN0IHdha2VfbG9j ayAqbG9jaywgaW50IHR5cGUsCisJCQkJCWNvbnN0IGNoYXIgKm5hbWUpIHt9CitzdGF0aWMgaW5s aW5lIHZvaWQgd2FrZV9sb2NrX2Rlc3Ryb3koc3RydWN0IHdha2VfbG9jayAqbG9jaykge30KK3N0 YXRpYyBpbmxpbmUgdm9pZCB3YWtlX2xvY2soc3RydWN0IHdha2VfbG9jayAqbG9jaykge30KK3N0 YXRpYyBpbmxpbmUgdm9pZCB3YWtlX2xvY2tfdGltZW91dChzdHJ1Y3Qgd2FrZV9sb2NrICpsb2Nr LCBsb25nIHRpbWVvdXQpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgd2FrZV91bmxvY2soc3RydWN0 IHdha2VfbG9jayAqbG9jaykge30KKworc3RhdGljIGlubGluZSBpbnQgd2FrZV9sb2NrX2FjdGl2 ZShzdHJ1Y3Qgd2FrZV9sb2NrICpsb2NrKSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIGxv bmcgaGFzX3dha2VfbG9jayhpbnQgdHlwZSkgeyByZXR1cm4gMDsgfQorCisjZW5kaWYKKworI2Vu ZGlmCisKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9LY29uZmlnIGIva2VybmVsL3Bvd2VyL0tj b25maWcKaW5kZXggMjNiZDRkYS4uOWFiZDk3ZSAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL0tj b25maWcKKysrIGIva2VybmVsL3Bvd2VyL0tjb25maWcKQEAgLTExNiw2ICsxMTYsMjMgQEAgY29u ZmlnIFNVU1BFTkRfRlJFRVpFUgogCiAJICBUdXJuaW5nIE9GRiB0aGlzIHNldHRpbmcgaXMgTk9U IHJlY29tbWVuZGVkISBJZiBpbiBkb3VidCwgc2F5IFkuCiAKK2NvbmZpZyBXQUtFTE9DSworCWJv b2wgIldha2UgbG9jayIKKwlkZXBlbmRzIG9uIFBNCisJc2VsZWN0IFJUQ19MSUIKKwlkZWZhdWx0 IG4KKwktLS1oZWxwLS0tCisJICBFbmFibGUgd2FrZWxvY2tzLiBXaGVuIHVzZXIgc3BhY2UgcmVx dWVzdHMgYSBzbGVlcCBzdGF0ZSB0aHJvdWdoCisJICAvc3lzL3Bvd2VyL3JlcXVlc3Rfc3RhdGUs IHRoZSByZXF1ZXN0ZWQgc2xlZXAgc3RhdGUgd2lsbCBiZSBlbnRlcmVkCisJICB3aGVuIG5vIHdh a2UgbG9ja3MgYXJlIGhlbGQuCisKK2NvbmZpZyBXQUtFTE9DS19TVEFUCisJYm9vbCAiV2FrZSBs b2NrIHN0YXRzIgorCWRlcGVuZHMgb24gV0FLRUxPQ0sKKwlkZWZhdWx0IHkKKwktLS1oZWxwLS0t CisJICBSZXBvcnQgd2FrZSBsb2NrIHN0YXRzIGluIC9wcm9jL3dha2Vsb2NrcworCiBjb25maWcg SElCRVJOQVRJT04KIAlib29sICJIaWJlcm5hdGlvbiAoYWthICdzdXNwZW5kIHRvIGRpc2snKSIK IAlkZXBlbmRzIG9uIFBNICYmIFNXQVAgJiYgQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRQpkaWZm IC0tZ2l0IGEva2VybmVsL3Bvd2VyL01ha2VmaWxlIGIva2VybmVsL3Bvd2VyL01ha2VmaWxlCmlu ZGV4IGQ3YTEwMTYuLjhkODY3MmIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9NYWtlZmlsZQor KysgYi9rZXJuZWwvcG93ZXIvTWFrZWZpbGUKQEAgLTYsNiArNiw3IEBAIGVuZGlmCiBvYmoteQkJ CQk6PSBtYWluLm8KIG9iai0kKENPTkZJR19QTV9TTEVFUCkJCSs9IGNvbnNvbGUubwogb2JqLSQo Q09ORklHX0ZSRUVaRVIpCQkrPSBwcm9jZXNzLm8KK29iai0kKENPTkZJR19XQUtFTE9DSykJCSs9 IHdha2Vsb2NrLm8KIG9iai0kKENPTkZJR19ISUJFUk5BVElPTikJKz0gc3dzdXNwLm8gZGlzay5v IHNuYXBzaG90Lm8gc3dhcC5vIHVzZXIubwogCiBvYmotJChDT05GSUdfTUFHSUNfU1lTUlEpCSs9 IHBvd2Vyb2ZmLm8KZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9tYWluLmMgYi9rZXJuZWwvcG93 ZXIvbWFpbi5jCmluZGV4IDIzOTk4ODguLjhiZGQxNWEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dl ci9tYWluLmMKKysrIGIva2VybmVsL3Bvd2VyL21haW4uYwpAQCAtMjIsNiArMjIsNyBAQAogI2lu Y2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KICNpbmNsdWRlIDxsaW51eC92bXN0YXQuaD4KICNpbmNs dWRlIDxsaW51eC9zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L3dha2Vsb2NrLmg+CiAKICNp bmNsdWRlICJwb3dlci5oIgogCkBAIC0zODgsNiArMzg5LDkgQEAgc3RhdGljIHZvaWQgc3VzcGVu ZF9maW5pc2godm9pZCkKIAogCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHBtX3N0YXRlc1tQ TV9TVVNQRU5EX01BWF0gPSB7CisjaWZkZWYgQ09ORklHX1dBS0VMT0NLCisJW1BNX1NVU1BFTkRf T05dCQk9ICJvbiIsCisjZW5kaWYKIAlbUE1fU1VTUEVORF9TVEFOREJZXQk9ICJzdGFuZGJ5IiwK IAlbUE1fU1VTUEVORF9NRU1dCT0gIm1lbSIsCiB9OwpAQCAtNTM2LDYgKzU0MCw2MiBAQCBzdGF0 aWMgc3NpemVfdCBzdGF0ZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpf YXR0cmlidXRlICphdHRyLAogCiBwb3dlcl9hdHRyKHN0YXRlKTsKIAorLyoqCisgKglyZXF1ZXN0 X3N0YXRlIC0gY29udHJvbCBzeXN0ZW0gcG93ZXIgc3RhdGUuCisgKgorICoJVGhpcyBpcyBzaW1p bGFyIHRvIHN0YXRlLCBidXQgaXQgZG9lcyBub3QgYmxvY2sgdW50aWwgdGhlIHN5c3RlbQorICoJ cmVzdW1lcywgYW5kIGl0IHdpbGwgdHJ5IHRvIHJlLWVudGVyIHRoZSBzdGF0ZSB1bnRpbCBhbm90 aGVyIHN0YXRlIGlzCisgKglyZXF1c3RlZC4gV2FrZWxvY2tzIGFyZSByZXNwZWN0ZWQgYW5kIHRo ZSByZXF1ZXN0ZWQgc3RhdGUgd2lsbCBvbmx5CisgKgliZSBlbnRlcmVkIHdoZW4gbm8gd2FrZWxv Y2tzIGFyZSBoZWxkLiBXcml0ZSAib24iIHRvIGNhbmNlbC4KKyAqCisgKglJZiBDT05GSUdfRUFS TFlTVVNQRU5EIGlzIHNldCwgZWFybHlfc3VzcGVuZCBob29rcyBhcmUgY2FsbGVkIHdoZW4KKyAq CXRoZSByZXF1ZXN0ZWQgc3RhdGUgY2hhbmdlcyB0byBvciBmcm9tICJvbiIKKyAqLworCisjaWZk ZWYgQ09ORklHX1dBS0VMT0NLCitzdGF0aWMgc3NpemVfdCByZXF1ZXN0X3N0YXRlX3Nob3coc3Ry dWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgY2hh ciAqYnVmKQoreworCWNoYXIgKnMgPSBidWY7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwg UE1fU1VTUEVORF9NQVg7IGkrKykgeworCQlpZiAocG1fc3RhdGVzW2ldICYmIChpID09IFBNX1NV U1BFTkRfT04gfHwgdmFsaWRfc3RhdGUoaSkpKQorCQkJcyArPSBzcHJpbnRmKHMsIiVzICIsIHBt X3N0YXRlc1tpXSk7CisJfQorCWlmIChzICE9IGJ1ZikKKwkJLyogY29udmVydCB0aGUgbGFzdCBz cGFjZSB0byBhIG5ld2xpbmUgKi8KKwkJKihzLTEpID0gJ1xuJzsKKwlyZXR1cm4gKHMgLSBidWYp OworfQorCitzdGF0aWMgc3NpemVfdCByZXF1ZXN0X3N0YXRlX3N0b3JlKHN0cnVjdCBrb2JqZWN0 ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICBjb25zdCBjaGFyICpi dWYsIHNpemVfdCBuKQoreworCXN1c3BlbmRfc3RhdGVfdCBzdGF0ZSA9IFBNX1NVU1BFTkRfT047 CisJY29uc3QgY2hhciAqIGNvbnN0ICpzOworCWNoYXIgKnA7CisJaW50IGxlbjsKKwlpbnQgZXJy b3IgPSAtRUlOVkFMOworCisJcCA9IG1lbWNocihidWYsICdcbicsIG4pOworCWxlbiA9IHAgPyBw IC0gYnVmIDogbjsKKworCWZvciAocyA9ICZwbV9zdGF0ZXNbc3RhdGVdOyBzdGF0ZSA8IFBNX1NV U1BFTkRfTUFYOyBzKyssIHN0YXRlKyspIHsKKwkJaWYgKCpzICYmIGxlbiA9PSBzdHJsZW4oKnMp ICYmICFzdHJuY21wKGJ1ZiwgKnMsIGxlbikpCisJCQlicmVhazsKKwl9CisJaWYgKHN0YXRlIDwg UE1fU1VTUEVORF9NQVggJiYgKnMpCisJCWlmIChzdGF0ZSA9PSBQTV9TVVNQRU5EX09OIHx8IHZh bGlkX3N0YXRlKHN0YXRlKSkgeworCQkJZXJyb3IgPSAwOworCQkJcmVxdWVzdF9zdXNwZW5kX3N0 YXRlKHN0YXRlKTsKKwkJfQorCXJldHVybiBlcnJvciA/IGVycm9yIDogbjsKK30KKworcG93ZXJf YXR0cihyZXF1ZXN0X3N0YXRlKTsKKyNlbmRpZiAvKiBDT05GSUdfV0FLRUxPQ0sgKi8KKwogI2lm ZGVmIENPTkZJR19QTV9UUkFDRQogaW50IHBtX3RyYWNlX2VuYWJsZWQ7CiAKQEAgLTU2Myw2ICs2 MjMsOSBAQCBwb3dlcl9hdHRyKHBtX3RyYWNlKTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUg KiBnW10gPSB7CiAJJnN0YXRlX2F0dHIuYXR0ciwKKyNpZmRlZiBDT05GSUdfV0FLRUxPQ0sKKwkm cmVxdWVzdF9zdGF0ZV9hdHRyLmF0dHIsCisjZW5kaWYKICNpZmRlZiBDT05GSUdfUE1fVFJBQ0UK IAkmcG1fdHJhY2VfYXR0ci5hdHRyLAogI2VuZGlmCmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIv cG93ZXIuaCBiL2tlcm5lbC9wb3dlci9wb3dlci5oCmluZGV4IDQ2YjVlYzcuLjk0Njg2NzkgMTAw NjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9wb3dlci5oCisrKyBiL2tlcm5lbC9wb3dlci9wb3dlci5o CkBAIC0yMjMsMyArMjIzLDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzdXNwZW5kX3RoYXdfcHJv Y2Vzc2VzKHZvaWQpCiB7CiB9CiAjZW5kaWYKKworI2lmZGVmIENPTkZJR19XQUtFTE9DSworLyog a2VybmVsL3Bvd2VyL3dha2Vsb2NrLmMgKi8KK2V4dGVybiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVj dCAqc3VzcGVuZF93b3JrX3F1ZXVlOworZXh0ZXJuIHN0cnVjdCB3YWtlX2xvY2sgbWFpbl93YWtl X2xvY2s7Cit2b2lkIHJlcXVlc3Rfc3VzcGVuZF9zdGF0ZShzdXNwZW5kX3N0YXRlX3Qgc3RhdGUp OworI2VuZGlmCmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvd2FrZWxvY2suYyBiL2tlcm5lbC9w b3dlci93YWtlbG9jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzZjVk MDMKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvcG93ZXIvd2FrZWxvY2suYwpAQCAtMCwwICsx LDY2NCBAQAorLyoga2VybmVsL3Bvd2VyL3dha2Vsb2NrLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMp IDIwMDUtMjAwOCBHb29nbGUsIEluYy4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2Vk IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZl cnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFu ZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9z ZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaW5jbHVkZSA8 bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5j bHVkZSA8bGludXgvcnRjLmg+CisjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgorI2luY2x1ZGUg PGxpbnV4L3N5c2NhbGxzLmg+IC8qIHN5c19zeW5jICovCisjaW5jbHVkZSA8bGludXgvd2FrZWxv Y2suaD4KKyNpZmRlZiBDT05GSUdfV0FLRUxPQ0tfU1RBVAorI2luY2x1ZGUgPGxpbnV4L3Byb2Nf ZnMuaD4KKyNlbmRpZgorI2luY2x1ZGUgInBvd2VyLmgiCisKK2VudW0geworCURFQlVHX0VYSVRf U1VTUEVORCA9IDFVIDw8IDAsCisJREVCVUdfV0FLRVVQID0gMVUgPDwgMSwKKwlERUJVR19VU0VS X1NUQVRFID0gMVUgPDwgMiwKKwlERUJVR19TVVNQRU5EID0gMVUgPDwgMywKKwlERUJVR19FWFBJ UkUgPSAxVSA8PCA0LAorCURFQlVHX1dBS0VfTE9DSyA9IDFVIDw8IDUsCit9Oworc3RhdGljIGlu dCBkZWJ1Z19tYXNrID0gREVCVUdfRVhJVF9TVVNQRU5EIHwgREVCVUdfV0FLRVVQIHwgREVCVUdf VVNFUl9TVEFURTsKK21vZHVsZV9wYXJhbV9uYW1lZChkZWJ1Z19tYXNrLCBkZWJ1Z19tYXNrLCBp bnQsIFNfSVJVR08gfCBTX0lXVVNSIHwgU19JV0dSUCk7CisKKyNkZWZpbmUgV0FLRV9MT0NLX1RZ UEVfTUFTSyAgICAgICAgICAgICAgKDB4MGYpCisjZGVmaW5lIFdBS0VfTE9DS19JTklUSUFMSVpF RCAgICAgICAgICAgICgxVSA8PCA4KQorI2RlZmluZSBXQUtFX0xPQ0tfQUNUSVZFICAgICAgICAg ICAgICAgICAoMVUgPDwgOSkKKyNkZWZpbmUgV0FLRV9MT0NLX0FVVE9fRVhQSVJFICAgICAgICAg ICAgKDFVIDw8IDEwKQorI2RlZmluZSBXQUtFX0xPQ0tfUFJFVkVOVElOR19TVVNQRU5EICAgICAo MVUgPDwgMTEpCisKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sobGlzdF9sb2NrKTsKK3N0YXRpYyBE RUZJTkVfU1BJTkxPQ0soc3RhdGVfbG9jayk7CitzdGF0aWMgTElTVF9IRUFEKGluYWN0aXZlX2xv Y2tzKTsKK3N0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIGFjdGl2ZV93YWtlX2xvY2tzW1dBS0VfTE9D S19UWVBFX0NPVU5UXTsKK3N0YXRpYyBpbnQgY3VycmVudF9ldmVudF9udW07CitzdHJ1Y3Qgd29y a3F1ZXVlX3N0cnVjdCAqc3VzcGVuZF93b3JrX3F1ZXVlOworc3RydWN0IHdha2VfbG9jayBtYWlu X3dha2VfbG9jazsKK3N0YXRpYyBzdXNwZW5kX3N0YXRlX3QgcmVxdWVzdGVkX3N1c3BlbmRfc3Rh dGUgPSBQTV9TVVNQRU5EX01FTTsKK3N0YXRpYyBzdHJ1Y3Qgd2FrZV9sb2NrIHVua25vd25fd2Fr ZXVwOworCisjaWZkZWYgQ09ORklHX1dBS0VMT0NLX1NUQVQKK3N0YXRpYyBzdHJ1Y3Qgd2FrZV9s b2NrIGRlbGV0ZWRfd2FrZV9sb2NrczsKK3N0YXRpYyBrdGltZV90IGxhc3Rfc2xlZXBfdGltZV91 cGRhdGU7CitzdGF0aWMgYm9vbCB3YWl0X2Zvcl93YWtldXA7CisKK2Jvb2wgc3RhdHNfZ2V0X2V4 cGlyZWRfdGltZShzdHJ1Y3Qgd2FrZV9sb2NrICpsb2NrLCBrdGltZV90ICpleHBpcmVfdGltZSkK K3sKKwlzdHJ1Y3QgdGltZXNwZWMgdHM7CisJc3RydWN0IHRpbWVzcGVjIGt0OworCXN0cnVjdCB0 aW1lc3BlYyB0b21vbm87CisJc3RydWN0IHRpbWVzcGVjIGRlbHRhOworCXVuc2lnbmVkIGxvbmcg c2VxOworCWxvbmcgdGltZW91dDsKKworCWlmICghKGxvY2stPmZsYWdzICYgV0FLRV9MT0NLX0FV VE9fRVhQSVJFKSkKKwkJcmV0dXJuIGZhbHNlOworCWRvIHsKKwkJc2VxID0gcmVhZF9zZXFiZWdp bigmeHRpbWVfbG9jayk7CisJCXRpbWVvdXQgPSBsb2NrLT5leHBpcmVzIC0gamlmZmllczsKKwkJ aWYgKHRpbWVvdXQgPiAwKQorCQkJcmV0dXJuIGZhbHNlOworCQlrdCA9IGN1cnJlbnRfa2VybmVs X3RpbWUoKTsKKwkJdG9tb25vID0gd2FsbF90b19tb25vdG9uaWM7CisJfSB3aGlsZSAocmVhZF9z ZXFyZXRyeSgmeHRpbWVfbG9jaywgc2VxKSk7CisJamlmZmllc190b190aW1lc3BlYygtdGltZW91 dCwgJmRlbHRhKTsKKwlzZXRfbm9ybWFsaXplZF90aW1lc3BlYygmdHMsIGt0LnR2X3NlYyArIHRv bW9uby50dl9zZWMgLSBkZWx0YS50dl9zZWMsCisJCQkJa3QudHZfbnNlYyArIHRvbW9uby50dl9u c2VjIC0gZGVsdGEudHZfbnNlYyk7CisJKmV4cGlyZV90aW1lID0gdGltZXNwZWNfdG9fa3RpbWUo dHMpOworCXJldHVybiB0cnVlOworfQorCisKK3N0YXRpYyBpbnQgcHJpbnRfbG9ja19zdGF0KGNo YXIgKmJ1Ziwgc3RydWN0IHdha2VfbG9jayAqbG9jaykKK3sKKwlpbnQgbG9ja19jb3VudCA9IGxv Y2stPnN0YXQuY291bnQ7CisJaW50IGV4cGlyZV9jb3VudCA9IGxvY2stPnN0YXQuZXhwaXJlX2Nv dW50OworCWt0aW1lX3QgYWN0aXZlX3RpbWUgPSBrdGltZV9zZXQoMCwgMCk7CisJa3RpbWVfdCB0 b3RhbF90aW1lID0gbG9jay0+c3RhdC50b3RhbF90aW1lOworCWt0aW1lX3QgbWF4X3RpbWUgPSBs b2NrLT5zdGF0Lm1heF90aW1lOworCWt0aW1lX3QgcHJldmVudF9zdXNwZW5kX3RpbWUgPSBsb2Nr LT5zdGF0LnByZXZlbnRfc3VzcGVuZF90aW1lOworCWlmIChsb2NrLT5mbGFncyAmIFdBS0VfTE9D S19BQ1RJVkUpIHsKKwkJa3RpbWVfdCBub3csIGFkZF90aW1lOworCQlib29sIGV4cGlyZWQgPSBz dGF0c19nZXRfZXhwaXJlZF90aW1lKGxvY2ssICZub3cpOworCQlpZiAoIWV4cGlyZWQpCisJCQlu b3cgPSBrdGltZV9nZXQoKTsKKwkJYWRkX3RpbWUgPSBrdGltZV9zdWIobm93LCBsb2NrLT5zdGF0 Lmxhc3RfdGltZSk7CisJCWxvY2tfY291bnQrKzsKKwkJaWYgKCFleHBpcmVkKQorCQkJYWN0aXZl X3RpbWUgPSBhZGRfdGltZTsKKwkJZWxzZQorCQkJZXhwaXJlX2NvdW50Kys7CisJCXRvdGFsX3Rp bWUgPSBrdGltZV9hZGQodG90YWxfdGltZSwgYWRkX3RpbWUpOworCQlpZiAobG9jay0+ZmxhZ3Mg JiBXQUtFX0xPQ0tfUFJFVkVOVElOR19TVVNQRU5EKQorCQkJcHJldmVudF9zdXNwZW5kX3RpbWUg PSBrdGltZV9hZGQocHJldmVudF9zdXNwZW5kX3RpbWUsCisJCQkJCWt0aW1lX3N1Yihub3csIGxh c3Rfc2xlZXBfdGltZV91cGRhdGUpKTsKKwkJaWYgKGFkZF90aW1lLnR2NjQgPiBtYXhfdGltZS50 djY0KQorCQkJbWF4X3RpbWUgPSBhZGRfdGltZTsKKwl9CisKKwlyZXR1cm4gc3ByaW50ZihidWYs ICJcIiVzXCJcdCVkXHQlZFx0JWRcdCVsbGRcdCVsbGRcdCVsbGRcdCVsbGRcdCIKKwkJICAgICAg ICIlbGxkXG4iLCBsb2NrLT5uYW1lLCBsb2NrX2NvdW50LCBleHBpcmVfY291bnQsCisJCSAgICAg ICBsb2NrLT5zdGF0Lndha2V1cF9jb3VudCwga3RpbWVfdG9fbnMoYWN0aXZlX3RpbWUpLAorCQkg ICAgICAga3RpbWVfdG9fbnModG90YWxfdGltZSksCisJCSAgICAgICBrdGltZV90b19ucyhwcmV2 ZW50X3N1c3BlbmRfdGltZSksIGt0aW1lX3RvX25zKG1heF90aW1lKSwKKwkJICAgICAgIGt0aW1l X3RvX25zKGxvY2stPnN0YXQubGFzdF90aW1lKSk7Cit9CisKKworc3RhdGljIGludCB3YWtlbG9j a19zdGF0c19yZWFkX3Byb2MoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCisJ CQkgICAgICAgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3sKKwl1bnNpZ25lZCBs b25nIGlycWZsYWdzOworCXN0cnVjdCB3YWtlX2xvY2sgKmxvY2s7CisJaW50IGxlbiA9IDA7CisJ Y2hhciAqcCA9IHBhZ2U7CisJaW50IHR5cGU7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbGlzdF9s b2NrLCBpcnFmbGFncyk7CisKKwlwICs9IHNwcmludGYocCwgIm5hbWVcdGNvdW50XHRleHBpcmVf Y291bnRcdHdha2VfY291bnRcdGFjdGl2ZV9zaW5jZSIKKwkJICAgICAiXHR0b3RhbF90aW1lXHRz bGVlcF90aW1lXHRtYXhfdGltZVx0bGFzdF9jaGFuZ2VcbiIpOworCWxpc3RfZm9yX2VhY2hfZW50 cnkobG9jaywgJmluYWN0aXZlX2xvY2tzLCBsaW5rKSB7CisJCXAgKz0gcHJpbnRfbG9ja19zdGF0 KHAsIGxvY2spOworCX0KKwlmb3IgKHR5cGUgPSAwOyB0eXBlIDwgV0FLRV9MT0NLX1RZUEVfQ09V TlQ7IHR5cGUrKykgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxvY2ssICZhY3RpdmVfd2FrZV9s b2Nrc1t0eXBlXSwgbGluaykKKwkJCXAgKz0gcHJpbnRfbG9ja19zdGF0KHAsIGxvY2spOworCX0K KwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsaXN0X2xvY2ssIGlycWZsYWdzKTsKKworCSpzdGFy dCA9IHBhZ2UgKyBvZmY7CisKKwlsZW4gPSBwIC0gcGFnZTsKKwlpZiAobGVuID4gb2ZmKQorCQls ZW4gLT0gb2ZmOworCWVsc2UKKwkJbGVuID0gMDsKKworCXJldHVybiBsZW4gPCBjb3VudCA/IGxl biAgOiBjb3VudDsKK30KKworc3RhdGljIHZvaWQgd2FrZV9sb2NrX3N0YXRfaW5pdF9sb2NrZWQo c3RydWN0IHdha2VfbG9jayAqbG9jaykKK3sKKwlsb2NrLT5zdGF0LmNvdW50ID0gMDsKKwlsb2Nr LT5zdGF0LmV4cGlyZV9jb3VudCA9IDA7CisJbG9jay0+c3RhdC53YWtldXBfY291bnQgPSAwOwor CWxvY2stPnN0YXQudG90YWxfdGltZSA9IGt0aW1lX3NldCgwLCAwKTsKKwlsb2NrLT5zdGF0LnBy ZXZlbnRfc3VzcGVuZF90aW1lID0ga3RpbWVfc2V0KDAsIDApOworCWxvY2stPnN0YXQubWF4X3Rp bWUgPSBrdGltZV9zZXQoMCwgMCk7CisJbG9jay0+c3RhdC5sYXN0X3RpbWUgPSBrdGltZV9zZXQo MCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHdha2VfbG9ja19zdGF0X2Rlc3Ryb3lfbG9ja2VkKHN0 cnVjdCB3YWtlX2xvY2sgKmxvY2spCit7CisJaWYgKGxvY2stPnN0YXQuY291bnQpIHsKKwkJZGVs ZXRlZF93YWtlX2xvY2tzLnN0YXQuY291bnQgKz0gbG9jay0+c3RhdC5jb3VudDsKKwkJZGVsZXRl ZF93YWtlX2xvY2tzLnN0YXQuZXhwaXJlX2NvdW50ICs9IGxvY2stPnN0YXQuZXhwaXJlX2NvdW50 OworCQlkZWxldGVkX3dha2VfbG9ja3Muc3RhdC50b3RhbF90aW1lID0KKwkJCWt0aW1lX2FkZChk ZWxldGVkX3dha2VfbG9ja3Muc3RhdC50b3RhbF90aW1lLAorCQkJCSAgbG9jay0+c3RhdC50b3Rh bF90aW1lKTsKKwkJZGVsZXRlZF93YWtlX2xvY2tzLnN0YXQucHJldmVudF9zdXNwZW5kX3RpbWUg PQorCQkJa3RpbWVfYWRkKGRlbGV0ZWRfd2FrZV9sb2Nrcy5zdGF0LnByZXZlbnRfc3VzcGVuZF90 aW1lLAorCQkJCSAgbG9jay0+c3RhdC5wcmV2ZW50X3N1c3BlbmRfdGltZSk7CisJCWRlbGV0ZWRf d2FrZV9sb2Nrcy5zdGF0Lm1heF90aW1lID0KKwkJCWt0aW1lX2FkZChkZWxldGVkX3dha2VfbG9j a3Muc3RhdC5tYXhfdGltZSwKKwkJCQkgIGxvY2stPnN0YXQubWF4X3RpbWUpOworCX0KK30KKwor c3RhdGljIHZvaWQgd2FrZV91bmxvY2tfc3RhdF9sb2NrZWQoc3RydWN0IHdha2VfbG9jayAqbG9j aywgYm9vbCBleHBpcmVkKQoreworCWt0aW1lX3QgZHVyYXRpb247CisJa3RpbWVfdCBub3c7CisJ aWYgKCEobG9jay0+ZmxhZ3MgJiBXQUtFX0xPQ0tfQUNUSVZFKSkKKwkJcmV0dXJuOworCWlmIChz dGF0c19nZXRfZXhwaXJlZF90aW1lKGxvY2ssICZub3cpKQorCQlleHBpcmVkID0gdHJ1ZTsKKwll bHNlCisJCW5vdyA9IGt0aW1lX2dldCgpOworCWxvY2stPnN0YXQuY291bnQrKzsKKwlpZiAoZXhw aXJlZCkKKwkJbG9jay0+c3RhdC5leHBpcmVfY291bnQrKzsKKwlkdXJhdGlvbiA9IGt0aW1lX3N1 Yihub3csIGxvY2stPnN0YXQubGFzdF90aW1lKTsKKwlsb2NrLT5zdGF0LnRvdGFsX3RpbWUgPSBr dGltZV9hZGQobG9jay0+c3RhdC50b3RhbF90aW1lLCBkdXJhdGlvbik7CisJaWYgKGt0aW1lX3Rv X25zKGR1cmF0aW9uKSA+IGt0aW1lX3RvX25zKGxvY2stPnN0YXQubWF4X3RpbWUpKQorCQlsb2Nr LT5zdGF0Lm1heF90aW1lID0gZHVyYXRpb247CisJbG9jay0+c3RhdC5sYXN0X3RpbWUgPSBrdGlt ZV9nZXQoKTsKKwlpZiAobG9jay0+ZmxhZ3MgJiBXQUtFX0xPQ0tfUFJFVkVOVElOR19TVVNQRU5E KSB7CisJCWR1cmF0aW9uID0ga3RpbWVfc3ViKG5vdywgbGFzdF9zbGVlcF90aW1lX3VwZGF0ZSk7 CisJCWxvY2stPnN0YXQucHJldmVudF9zdXNwZW5kX3RpbWUgPSBrdGltZV9hZGQoCisJCQlsb2Nr LT5zdGF0LnByZXZlbnRfc3VzcGVuZF90aW1lLCBkdXJhdGlvbik7CisJCWxvY2stPmZsYWdzICY9 IH5XQUtFX0xPQ0tfUFJFVkVOVElOR19TVVNQRU5EOworCX0KK30KKworc3RhdGljIHZvaWQgd2Fr ZV9sb2NrX3N0YXRfbG9ja2VkKHN0cnVjdCB3YWtlX2xvY2sgKmxvY2spCit7CisJaW50IHR5cGUg PSBsb2NrLT5mbGFncyAmIFdBS0VfTE9DS19UWVBFX01BU0s7CisJaWYgKHR5cGUgPT0gV0FLRV9M T0NLX1NVU1BFTkQgJiYgd2FpdF9mb3Jfd2FrZXVwKSB7CisJCWlmIChkZWJ1Z19tYXNrICYgREVC VUdfV0FLRVVQKQorCQkJcHJfaW5mbygid2FrZXVwIHdha2UgbG9jazogJXNcbiIsIGxvY2stPm5h bWUpOworCQl3YWl0X2Zvcl93YWtldXAgPSBmYWxzZTsKKwkJbG9jay0+c3RhdC53YWtldXBfY291 bnQrKzsKKwl9CisJaWYgKChsb2NrLT5mbGFncyAmIFdBS0VfTE9DS19BVVRPX0VYUElSRSkgJiYK KwkgICAgdGltZV9pc19iZWZvcmVfZXFfamlmZmllcyhsb2NrLT5leHBpcmVzKSkgeworCQl3YWtl X3VubG9ja19zdGF0X2xvY2tlZChsb2NrLCBmYWxzZSk7CisJCWxvY2stPnN0YXQubGFzdF90aW1l ID0ga3RpbWVfZ2V0KCk7CisJfQorCisJaWYgKCEobG9jay0+ZmxhZ3MgJiBXQUtFX0xPQ0tfQUNU SVZFKSkKKwkJbG9jay0+c3RhdC5sYXN0X3RpbWUgPSBrdGltZV9nZXQoKTsKK30KKworc3RhdGlj IHZvaWQgdXBkYXRlX3NsZWVwX3dhaXRfc3RhdHNfbG9ja2VkKGJvb2wgZG9uZSkKK3sKKwlzdHJ1 Y3Qgd2FrZV9sb2NrICpsb2NrOworCWt0aW1lX3Qgbm93LCBldGltZSwgZWxhcHNlZCwgYWRkOwor CWJvb2wgZXhwaXJlZDsKKworCW5vdyA9IGt0aW1lX2dldCgpOworCWVsYXBzZWQgPSBrdGltZV9z dWIobm93LCBsYXN0X3NsZWVwX3RpbWVfdXBkYXRlKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxv Y2ssICZhY3RpdmVfd2FrZV9sb2Nrc1tXQUtFX0xPQ0tfU1VTUEVORF0sIGxpbmspIHsKKwkJZXhw aXJlZCA9IHN0YXRzX2dldF9leHBpcmVkX3RpbWUobG9jaywgJmV0aW1lKTsKKwkJaWYgKGxvY2st PmZsYWdzICYgV0FLRV9MT0NLX1BSRVZFTlRJTkdfU1VTUEVORCkgeworCQkJaWYgKGV4cGlyZWQp CisJCQkJYWRkID0ga3RpbWVfc3ViKGV0aW1lLCBsYXN0X3NsZWVwX3RpbWVfdXBkYXRlKTsKKwkJ CWVsc2UKKwkJCQlhZGQgPSBlbGFwc2VkOworCQkJbG9jay0+c3RhdC5wcmV2ZW50X3N1c3BlbmRf dGltZSA9IGt0aW1lX2FkZCgKKwkJCQlsb2NrLT5zdGF0LnByZXZlbnRfc3VzcGVuZF90aW1lLCBh ZGQpOworCQl9CisJCWlmIChkb25lIHx8IGV4cGlyZWQpCisJCQlsb2NrLT5mbGFncyAmPSB+V0FL RV9MT0NLX1BSRVZFTlRJTkdfU1VTUEVORDsKKwkJZWxzZQorCQkJbG9jay0+ZmxhZ3MgfD0gV0FL RV9MT0NLX1BSRVZFTlRJTkdfU1VTUEVORDsKKwl9CisJbGFzdF9zbGVlcF90aW1lX3VwZGF0ZSA9 IG5vdzsKK30KKworI2Vsc2UKKworc3RhdGljIGlubGluZSB2b2lkIHdha2VfbG9ja19zdGF0X2lu aXRfbG9ja2VkKHN0cnVjdCB3YWtlX2xvY2sgKmxvY2spIHt9CitzdGF0aWMgaW5saW5lIHZvaWQg d2FrZV9sb2NrX3N0YXRfZGVzdHJveV9sb2NrZWQoc3RydWN0IHdha2VfbG9jayAqbG9jaykge30K K3N0YXRpYyBpbmxpbmUgdm9pZCB3YWtlX2xvY2tfc3RhdF9sb2NrZWQoc3RydWN0IHdha2VfbG9j ayAqbG9jaykge30KK3N0YXRpYyBpbmxpbmUgdm9pZCB3YWtlX3VubG9ja19zdGF0X2xvY2tlZChz dHJ1Y3Qgd2FrZV9sb2NrICpsb2NrLAorCQkJCQkgICBib29sIGV4cGlyZWQpIHt9CitzdGF0aWMg aW5saW5lIHZvaWQgdXBkYXRlX3NsZWVwX3dhaXRfc3RhdHNfbG9ja2VkKGJvb2wgZG9uZSkge30K KworI2VuZGlmCisKKworc3RhdGljIHZvaWQgZXhwaXJlX3dha2VfbG9jayhzdHJ1Y3Qgd2FrZV9s b2NrICpsb2NrKQoreworCXdha2VfdW5sb2NrX3N0YXRfbG9ja2VkKGxvY2ssIHRydWUpOworCWxv Y2stPmZsYWdzICY9IH4oV0FLRV9MT0NLX0FDVElWRSB8IFdBS0VfTE9DS19BVVRPX0VYUElSRSk7 CisJbGlzdF9kZWwoJmxvY2stPmxpbmspOworCWxpc3RfYWRkKCZsb2NrLT5saW5rLCAmaW5hY3Rp dmVfbG9ja3MpOworCWlmIChkZWJ1Z19tYXNrICYgKERFQlVHX1dBS0VfTE9DSyB8IERFQlVHX0VY UElSRSkpCisJCXByX2luZm8oImV4cGlyZWQgd2FrZSBsb2NrICVzXG4iLCBsb2NrLT5uYW1lKTsK K30KKworc3RhdGljIHZvaWQgcHJpbnRfYWN0aXZlX2xvY2tzKGludCB0eXBlKQoreworCXVuc2ln bmVkIGxvbmcgaXJxZmxhZ3M7CisJc3RydWN0IHdha2VfbG9jayAqbG9jazsKKworCUJVR19PTih0 eXBlID49IFdBS0VfTE9DS19UWVBFX0NPVU5UKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbGlzdF9s b2NrLCBpcnFmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShsb2NrLCAmYWN0aXZlX3dha2Vf bG9ja3NbdHlwZV0sIGxpbmspIHsKKwkJaWYgKGxvY2stPmZsYWdzICYgV0FLRV9MT0NLX0FVVE9f RVhQSVJFKSB7CisJCQlsb25nIHRpbWVvdXQgPSBsb2NrLT5leHBpcmVzIC0gamlmZmllczsKKwkJ CWlmICh0aW1lb3V0IDw9IDApCisJCQkJcHJfaW5mbygid2FrZSBsb2NrICVzLCBleHBpcmVkXG4i LCBsb2NrLT5uYW1lKTsKKwkJCWVsc2UKKwkJCQlwcl9pbmZvKCJhY3RpdmUgd2FrZSBsb2NrICVz LCB0aW1lIGxlZnQgJWxkXG4iLAorCQkJCQlsb2NrLT5uYW1lLCB0aW1lb3V0KTsKKwkJfSBlbHNl CisJCQlwcl9pbmZvKCJhY3RpdmUgd2FrZSBsb2NrICVzXG4iLCBsb2NrLT5uYW1lKTsKKwl9CisJ c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGlzdF9sb2NrLCBpcnFmbGFncyk7Cit9CisKK3N0YXRp YyBsb25nIGhhc193YWtlX2xvY2tfbG9ja2VkKGludCB0eXBlKQoreworCXN0cnVjdCB3YWtlX2xv Y2sgKmxvY2ssICpuOworCWxvbmcgbWF4X3RpbWVvdXQgPSAwOworCisJQlVHX09OKHR5cGUgPj0g V0FLRV9MT0NLX1RZUEVfQ09VTlQpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShsb2NrLCBu LCAmYWN0aXZlX3dha2VfbG9ja3NbdHlwZV0sIGxpbmspIHsKKwkJaWYgKGxvY2stPmZsYWdzICYg V0FLRV9MT0NLX0FVVE9fRVhQSVJFKSB7CisJCQlsb25nIHRpbWVvdXQgPSBsb2NrLT5leHBpcmVz IC0gamlmZmllczsKKwkJCWlmICh0aW1lb3V0IDw9IDApCisJCQkJZXhwaXJlX3dha2VfbG9jayhs b2NrKTsKKwkJCWVsc2UgaWYgKHRpbWVvdXQgPiBtYXhfdGltZW91dCkKKwkJCQltYXhfdGltZW91 dCA9IHRpbWVvdXQ7CisJCX0gZWxzZQorCQkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gbWF4X3Rp bWVvdXQ7Cit9CisKK2xvbmcgaGFzX3dha2VfbG9jayhpbnQgdHlwZSkKK3sKKwlsb25nIHJldDsK Kwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOworCXNwaW5fbG9ja19pcnFzYXZlKCZsaXN0X2xvY2ss IGlycWZsYWdzKTsKKwlyZXQgPSBoYXNfd2FrZV9sb2NrX2xvY2tlZCh0eXBlKTsKKwlzcGluX3Vu bG9ja19pcnFyZXN0b3JlKCZsaXN0X2xvY2ssIGlycWZsYWdzKTsKKwlyZXR1cm4gcmV0OworfQor CitzdGF0aWMgdm9pZCBzdXNwZW5kX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7 CisJaW50IHJldDsKKwlpbnQgZW50cnlfZXZlbnRfbnVtOworCisJaWYgKGhhc193YWtlX2xvY2so V0FLRV9MT0NLX1NVU1BFTkQpKSB7CisJCWlmIChkZWJ1Z19tYXNrICYgREVCVUdfU1VTUEVORCkK KwkJCXByX2luZm8oInN1c3BlbmQ6IGFib3J0IHN1c3BlbmRcbiIpOworCQlyZXR1cm47CisJfQor CisJZW50cnlfZXZlbnRfbnVtID0gY3VycmVudF9ldmVudF9udW07CisJaWYgKGRlYnVnX21hc2sg JiBERUJVR19TVVNQRU5EKQorCQlwcl9pbmZvKCJzdXNwZW5kOiBlbnRlciBzdXNwZW5kXG4iKTsK KwlyZXQgPSBwbV9zdXNwZW5kKHJlcXVlc3RlZF9zdXNwZW5kX3N0YXRlKTsKKwlpZiAoZGVidWdf bWFzayAmIERFQlVHX0VYSVRfU1VTUEVORCkgeworCQlzdHJ1Y3QgdGltZXNwZWMgdHM7CisJCXN0 cnVjdCBydGNfdGltZSB0bTsKKwkJZ2V0bnN0aW1lb2ZkYXkoJnRzKTsKKwkJcnRjX3RpbWVfdG9f dG0odHMudHZfc2VjLCAmdG0pOworCQlwcl9pbmZvKCJzdXNwZW5kOiBleGl0IHN1c3BlbmQsIHJl dCA9ICVkICIKKwkJCSIoJWQtJTAyZC0lMDJkICUwMmQ6JTAyZDolMDJkLiUwOWx1IFVUQylcbiIs IHJldCwKKwkJCXRtLnRtX3llYXIgKyAxOTAwLCB0bS50bV9tb24gKyAxLCB0bS50bV9tZGF5LAor CQkJdG0udG1faG91ciwgdG0udG1fbWluLCB0bS50bV9zZWMsIHRzLnR2X25zZWMpOworCX0KKwlp ZiAoY3VycmVudF9ldmVudF9udW0gPT0gZW50cnlfZXZlbnRfbnVtKSB7CisJCWlmIChkZWJ1Z19t YXNrICYgREVCVUdfU1VTUEVORCkKKwkJCXByX2luZm8oInN1c3BlbmQ6IHBtX3N1c3BlbmQgcmV0 dXJuZWQgd2l0aCBubyBldmVudFxuIik7CisJCXdha2VfbG9ja190aW1lb3V0KCZ1bmtub3duX3dh a2V1cCwgSFogLyAyKTsKKwl9Cit9CitzdGF0aWMgREVDTEFSRV9XT1JLKHN1c3BlbmRfd29yaywg c3VzcGVuZF93b3JrZXIpOworCitzdGF0aWMgdm9pZCBleHBpcmVfd2FrZV9sb2Nrcyh1bnNpZ25l ZCBsb25nIGRhdGEpCit7CisJbG9uZyBoYXNfbG9jazsKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdz OworCWlmIChkZWJ1Z19tYXNrICYgREVCVUdfRVhQSVJFKQorCQlwcl9pbmZvKCJleHBpcmVfd2Fr ZV9sb2Nrczogc3RhcnRcbiIpOworCWlmIChkZWJ1Z19tYXNrICYgREVCVUdfU1VTUEVORCkKKwkJ cHJpbnRfYWN0aXZlX2xvY2tzKFdBS0VfTE9DS19TVVNQRU5EKTsKKwlzcGluX2xvY2tfaXJxc2F2 ZSgmbGlzdF9sb2NrLCBpcnFmbGFncyk7CisJaGFzX2xvY2sgPSBoYXNfd2FrZV9sb2NrX2xvY2tl ZChXQUtFX0xPQ0tfU1VTUEVORCk7CisJaWYgKGRlYnVnX21hc2sgJiBERUJVR19FWFBJUkUpCisJ CXByX2luZm8oImV4cGlyZV93YWtlX2xvY2tzOiBkb25lLCBoYXNfbG9jayAlbGRcbiIsIGhhc19s b2NrKTsKKwlpZiAoaGFzX2xvY2sgPT0gMCkKKwkJcXVldWVfd29yayhzdXNwZW5kX3dvcmtfcXVl dWUsICZzdXNwZW5kX3dvcmspOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxpc3RfbG9jaywg aXJxZmxhZ3MpOworfQorc3RhdGljIERFRklORV9USU1FUihleHBpcmVfdGltZXIsIGV4cGlyZV93 YWtlX2xvY2tzLCAwLCAwKTsKKworc3RhdGljIGludCBwb3dlcl9zdXNwZW5kX2xhdGUoc3RydWN0 IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCWludCByZXQg PSBoYXNfd2FrZV9sb2NrKFdBS0VfTE9DS19TVVNQRU5EKSA/IC1FQUdBSU4gOiAwOworI2lmZGVm IENPTkZJR19XQUtFTE9DS19TVEFUCisJd2FpdF9mb3Jfd2FrZXVwID0gdHJ1ZTsKKyNlbmRpZgor CWlmIChkZWJ1Z19tYXNrICYgREVCVUdfU1VTUEVORCkKKwkJcHJfaW5mbygicG93ZXJfc3VzcGVu ZF9sYXRlIHJldHVybiAlZFxuIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3Ry dWN0IHBsYXRmb3JtX2RyaXZlciBwb3dlcl9kcml2ZXIgPSB7CisJLmRyaXZlci5uYW1lID0gInBv d2VyIiwKKwkuc3VzcGVuZF9sYXRlID0gcG93ZXJfc3VzcGVuZF9sYXRlLAorfTsKK3N0YXRpYyBz dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBvd2VyX2RldmljZSA9IHsKKwkubmFtZSA9ICJwb3dlciIs Cit9OworCisvKioKKyAqIHdha2VfbG9ja19pbml0KCkgLSBJbml0aWFsaXplIGEgd2FrZWxvY2sK KyAqIEBsb2NrOglUaGUgd2FrZWxvY2sgdG8gaW5pdGlhbGl6ZS4KKyAqIEB0eXBlOglUeXBlIG9m IHdha2Vsb2NrLCBlLmcuIFdBS0VfTE9DS19TVVNQRU5ECisgKiBAbmFtZToJVGhlIG5hbWUgb2Yg dGhlIHdha2Vsb2NrIHRvIHNob3cgaW4gL3Byb2Mvd2FrZWxvY2tzCisgKi8KK3ZvaWQgd2FrZV9s b2NrX2luaXQoc3RydWN0IHdha2VfbG9jayAqbG9jaywgaW50IHR5cGUsIGNvbnN0IGNoYXIgKm5h bWUpCit7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFncyA9IDA7CisKKwlpZiAobmFtZSkKKwkJbG9j ay0+bmFtZSA9IG5hbWU7CisJQlVHX09OKCFsb2NrLT5uYW1lKTsKKworCWlmIChkZWJ1Z19tYXNr ICYgREVCVUdfV0FLRV9MT0NLKQorCQlwcl9pbmZvKCJ3YWtlX2xvY2tfaW5pdCBuYW1lPSVzXG4i LCBsb2NrLT5uYW1lKTsKKworCWxvY2stPmZsYWdzID0gKHR5cGUgJiBXQUtFX0xPQ0tfVFlQRV9N QVNLKSB8IFdBS0VfTE9DS19JTklUSUFMSVpFRDsKKwlJTklUX0xJU1RfSEVBRCgmbG9jay0+bGlu ayk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbGlzdF9sb2NrLCBpcnFmbGFncyk7CisJd2FrZV9s b2NrX3N0YXRfaW5pdF9sb2NrZWQobG9jayk7CisJbGlzdF9hZGQoJmxvY2stPmxpbmssICZpbmFj dGl2ZV9sb2Nrcyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGlzdF9sb2NrLCBpcnFmbGFn cyk7Cit9CitFWFBPUlRfU1lNQk9MKHdha2VfbG9ja19pbml0KTsKKworLyoqCisgKiB3YWtlX2xv Y2tfZGVzdHJveSgpIC0gRGVzdHJveSBhIHdha2Vsb2NrCisgKiBAbG9jazogICAgICAgVGhlIHdh a2Vsb2NrIHRvIGRlc3Ryb3kuCisgKi8KK3ZvaWQgd2FrZV9sb2NrX2Rlc3Ryb3koc3RydWN0IHdh a2VfbG9jayAqbG9jaykKK3sKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOworCWlmIChkZWJ1Z19t YXNrICYgREVCVUdfV0FLRV9MT0NLKQorCQlwcl9pbmZvKCJ3YWtlX2xvY2tfZGVzdHJveSBuYW1l PSVzXG4iLCBsb2NrLT5uYW1lKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbGlzdF9sb2NrLCBpcnFm bGFncyk7CisJd2FrZV9sb2NrX3N0YXRfZGVzdHJveV9sb2NrZWQobG9jayk7CisJbG9jay0+Zmxh Z3MgJj0gfldBS0VfTE9DS19JTklUSUFMSVpFRDsKKwlsaXN0X2RlbCgmbG9jay0+bGluayk7CisJ c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGlzdF9sb2NrLCBpcnFmbGFncyk7Cit9CitFWFBPUlRf U1lNQk9MKHdha2VfbG9ja19kZXN0cm95KTsKKworc3RhdGljIHZvaWQgX193YWtlX2xvY2soc3Ry dWN0IHdha2VfbG9jayAqbG9jaywgbG9uZyB0aW1lb3V0LCBib29sIGhhc190aW1lb3V0KQorewor CWludCB0eXBlOworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CisJbG9uZyBleHBpcmVfaW47CisK KwlzcGluX2xvY2tfaXJxc2F2ZSgmbGlzdF9sb2NrLCBpcnFmbGFncyk7CisJdHlwZSA9IGxvY2st PmZsYWdzICYgV0FLRV9MT0NLX1RZUEVfTUFTSzsKKwlCVUdfT04odHlwZSA+PSBXQUtFX0xPQ0tf VFlQRV9DT1VOVCk7CisJQlVHX09OKCEobG9jay0+ZmxhZ3MgJiBXQUtFX0xPQ0tfSU5JVElBTEla RUQpKTsKKworCXdha2VfbG9ja19zdGF0X2xvY2tlZChsb2NrKTsKKwlsb2NrLT5mbGFncyB8PSBX QUtFX0xPQ0tfQUNUSVZFOworCWxpc3RfZGVsKCZsb2NrLT5saW5rKTsKKwlpZiAoaGFzX3RpbWVv dXQpIHsKKwkJaWYgKGRlYnVnX21hc2sgJiBERUJVR19XQUtFX0xPQ0spCisJCQlwcl9pbmZvKCJ3 YWtlX2xvY2s6ICVzLCB0eXBlICVkLCB0aW1lb3V0ICVsZC4lMDNsdVxuIiwKKwkJCQlsb2NrLT5u YW1lLCB0eXBlLCB0aW1lb3V0IC8gSFosCisJCQkJKHRpbWVvdXQgJSBIWikgKiBNU0VDX1BFUl9T RUMgLyBIWik7CisJCWxvY2stPmV4cGlyZXMgPSBqaWZmaWVzICsgdGltZW91dDsKKwkJbG9jay0+ ZmxhZ3MgfD0gV0FLRV9MT0NLX0FVVE9fRVhQSVJFOworCQlsaXN0X2FkZF90YWlsKCZsb2NrLT5s aW5rLCAmYWN0aXZlX3dha2VfbG9ja3NbdHlwZV0pOworCX0gZWxzZSB7CisJCWlmIChkZWJ1Z19t YXNrICYgREVCVUdfV0FLRV9MT0NLKQorCQkJcHJfaW5mbygid2FrZV9sb2NrOiAlcywgdHlwZSAl ZFxuIiwgbG9jay0+bmFtZSwgdHlwZSk7CisJCWxvY2stPmV4cGlyZXMgPSBMT05HX01BWDsKKwkJ bG9jay0+ZmxhZ3MgJj0gfldBS0VfTE9DS19BVVRPX0VYUElSRTsKKwkJLyogQWRkIHRvIGhlYWQg c28gaGFzX3dha2VfbG9jayBvbmx5IGhhcyB0byBleGFtaW5lIG9uZSBlbnRyeSAqLworCQlsaXN0 X2FkZCgmbG9jay0+bGluaywgJmFjdGl2ZV93YWtlX2xvY2tzW3R5cGVdKTsKKwl9CisJaWYgKHR5 cGUgPT0gV0FLRV9MT0NLX1NVU1BFTkQpIHsKKwkJY3VycmVudF9ldmVudF9udW0rKzsKKwkJaWYg KGxvY2sgPT0gJm1haW5fd2FrZV9sb2NrKQorCQkJdXBkYXRlX3NsZWVwX3dhaXRfc3RhdHNfbG9j a2VkKHRydWUpOworCQllbHNlIGlmICghd2FrZV9sb2NrX2FjdGl2ZSgmbWFpbl93YWtlX2xvY2sp KQorCQkJdXBkYXRlX3NsZWVwX3dhaXRfc3RhdHNfbG9ja2VkKGZhbHNlKTsKKwkJZXhwaXJlX2lu ID0gaGFzX3RpbWVvdXQgPyBoYXNfd2FrZV9sb2NrX2xvY2tlZCh0eXBlKSA6IC0xOworCQlpZiAo ZXhwaXJlX2luID4gMCkgeworCQkJaWYgKGRlYnVnX21hc2sgJiBERUJVR19FWFBJUkUpCisJCQkJ cHJfaW5mbygid2FrZV9sb2NrOiAlcywgc3RhcnQgZXhwaXJlIHRpbWVyLCAiCisJCQkJCSIlbGRc biIsIGxvY2stPm5hbWUsIGV4cGlyZV9pbik7CisJCQltb2RfdGltZXIoJmV4cGlyZV90aW1lciwg amlmZmllcyArIGV4cGlyZV9pbik7CisJCX0gZWxzZSB7CisJCQlpZiAoZGVsX3RpbWVyKCZleHBp cmVfdGltZXIpKQorCQkJCWlmIChkZWJ1Z19tYXNrICYgREVCVUdfRVhQSVJFKQorCQkJCQlwcl9p bmZvKCJ3YWtlX2xvY2s6ICVzLCBzdG9wIGV4cGlyZSAiCisJCQkJCQkidGltZXJcbiIsIGxvY2st Pm5hbWUpOworCQkJaWYgKGV4cGlyZV9pbiA9PSAwKQorCQkJCXF1ZXVlX3dvcmsoc3VzcGVuZF93 b3JrX3F1ZXVlLCAmc3VzcGVuZF93b3JrKTsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0 b3JlKCZsaXN0X2xvY2ssIGlycWZsYWdzKTsKK30KKworLyoqCisgKiB3YWtlX2xvY2soKSAtIExv Y2sgYSB3YWtlbG9jaworICogQGxvY2s6ICAgICAgIFRoZSB3YWtlbG9jayB0byBsb2NrLgorICov Cit2b2lkIHdha2VfbG9jayhzdHJ1Y3Qgd2FrZV9sb2NrICpsb2NrKQoreworCV9fd2FrZV9sb2Nr KGxvY2ssIDAsIGZhbHNlKTsKK30KK0VYUE9SVF9TWU1CT0wod2FrZV9sb2NrKTsKKworLyoqCisg KiB3YWtlX2xvY2tfdGltZW91dCgpIC0gTG9jayBhIHdha2Vsb2NrIHdpdGggYXV0by11bmxvY2sg dGltZW91dAorICogQGxvY2s6ICAgICAgIFRoZSB3YWtlbG9jayB0byBsb2NrLgorICogQHRpbWVv dXQ6ICAgIFRpbWVvdXQgaW4gamlmZmllcyBiZWZvcmUgdGhlIGxvY2sgYXV0by11bmxvY2sKKyAq Lwordm9pZCB3YWtlX2xvY2tfdGltZW91dChzdHJ1Y3Qgd2FrZV9sb2NrICpsb2NrLCBsb25nIHRp bWVvdXQpCit7CisJX193YWtlX2xvY2sobG9jaywgdGltZW91dCwgdHJ1ZSk7Cit9CitFWFBPUlRf U1lNQk9MKHdha2VfbG9ja190aW1lb3V0KTsKKworLyoqCisgKiB3YWtlX2xvY2soKSAtIFVubG9j ayBhIHdha2Vsb2NrCisgKiBAbG9jazogICAgICAgVGhlIHdha2Vsb2NrIHRvIHVubG9jay4KKyAq Lwordm9pZCB3YWtlX3VubG9jayhzdHJ1Y3Qgd2FrZV9sb2NrICpsb2NrKQoreworCWludCB0eXBl OworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbGlzdF9s b2NrLCBpcnFmbGFncyk7CisKKwl3YWtlX3VubG9ja19zdGF0X2xvY2tlZChsb2NrLCBmYWxzZSk7 CisKKwlpZiAoZGVidWdfbWFzayAmIERFQlVHX1dBS0VfTE9DSykKKwkJcHJfaW5mbygid2FrZV91 bmxvY2s6ICVzXG4iLCBsb2NrLT5uYW1lKTsKKwlsb2NrLT5mbGFncyAmPSB+KFdBS0VfTE9DS19B Q1RJVkUgfCBXQUtFX0xPQ0tfQVVUT19FWFBJUkUpOworCWxpc3RfZGVsKCZsb2NrLT5saW5rKTsK KwlsaXN0X2FkZCgmbG9jay0+bGluaywgJmluYWN0aXZlX2xvY2tzKTsKKworCXR5cGUgPSBsb2Nr LT5mbGFncyAmIFdBS0VfTE9DS19UWVBFX01BU0s7CisJaWYgKHR5cGUgPT0gV0FLRV9MT0NLX1NV U1BFTkQpIHsKKwkJbG9uZyBoYXNfbG9jayA9IGhhc193YWtlX2xvY2tfbG9ja2VkKHR5cGUpOwor CQlpZiAoaGFzX2xvY2sgPiAwKSB7CisJCQlpZiAoZGVidWdfbWFzayAmIERFQlVHX0VYUElSRSkK KwkJCQlwcl9pbmZvKCJ3YWtlX3VubG9jazogJXMsIHN0YXJ0IGV4cGlyZSB0aW1lciwgIgorCQkJ CQkiJWxkXG4iLCBsb2NrLT5uYW1lLCBoYXNfbG9jayk7CisJCQltb2RfdGltZXIoJmV4cGlyZV90 aW1lciwgamlmZmllcyArIGhhc19sb2NrKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChkZWxfdGltZXIo JmV4cGlyZV90aW1lcikpCisJCQkJaWYgKGRlYnVnX21hc2sgJiBERUJVR19FWFBJUkUpCisJCQkJ CXByX2luZm8oIndha2VfdW5sb2NrOiAlcywgc3RvcCBleHBpcmUgIgorCQkJCQkJInRpbWVyXG4i LCBsb2NrLT5uYW1lKTsKKwkJCWlmIChoYXNfbG9jayA9PSAwKQorCQkJCXF1ZXVlX3dvcmsoc3Vz cGVuZF93b3JrX3F1ZXVlLCAmc3VzcGVuZF93b3JrKTsKKwkJfQorCQlpZiAobG9jayA9PSAmbWFp bl93YWtlX2xvY2spIHsKKwkJCWlmIChkZWJ1Z19tYXNrICYgREVCVUdfU1VTUEVORCkKKwkJCQlw cmludF9hY3RpdmVfbG9ja3MoV0FLRV9MT0NLX1NVU1BFTkQpOworCQkJdXBkYXRlX3NsZWVwX3dh aXRfc3RhdHNfbG9ja2VkKGZhbHNlKTsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3Jl KCZsaXN0X2xvY2ssIGlycWZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0wod2FrZV91bmxvY2spOwor CisvKioKKyAqIHdha2VfbG9ja19hY3RpdmUoKSAtIFRlc3QgaWYgYSB3YWtlbG9jayBpcyBsb2Nr ZWQKKyAqIEBsb2NrOiAgICAgICBUaGUgd2FrZWxvY2sgdG8gY2hlY2suCisgKi8KK2ludCB3YWtl X2xvY2tfYWN0aXZlKHN0cnVjdCB3YWtlX2xvY2sgKmxvY2spCit7CisJcmV0dXJuICEhKGxvY2st PmZsYWdzICYgV0FLRV9MT0NLX0FDVElWRSk7Cit9CitFWFBPUlRfU1lNQk9MKHdha2VfbG9ja19h Y3RpdmUpOworCit2b2lkIHJlcXVlc3Rfc3VzcGVuZF9zdGF0ZShzdXNwZW5kX3N0YXRlX3Qgc3Rh dGUpCit7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc3Rh dGVfbG9jaywgaXJxZmxhZ3MpOworCWlmIChkZWJ1Z19tYXNrICYgREVCVUdfVVNFUl9TVEFURSkg eworCQlzdHJ1Y3QgdGltZXNwZWMgdHM7CisJCXN0cnVjdCBydGNfdGltZSB0bTsKKwkJZ2V0bnN0 aW1lb2ZkYXkoJnRzKTsKKwkJcnRjX3RpbWVfdG9fdG0odHMudHZfc2VjLCAmdG0pOworCQlwcl9p bmZvKCJyZXF1ZXN0X3N1c3BlbmRfc3RhdGU6ICVzICglZC0+JWQpIGF0ICVsbGQgIgorCQkJIigl ZC0lMDJkLSUwMmQgJTAyZDolMDJkOiUwMmQuJTA5bHUgVVRDKVxuIiwKKwkJCXN0YXRlICE9IFBN X1NVU1BFTkRfT04gPyAic2xlZXAiIDogIndha2V1cCIsCisJCQlyZXF1ZXN0ZWRfc3VzcGVuZF9z dGF0ZSwgc3RhdGUsCisJCQlrdGltZV90b19ucyhrdGltZV9nZXQoKSksCisJCQl0bS50bV95ZWFy ICsgMTkwMCwgdG0udG1fbW9uICsgMSwgdG0udG1fbWRheSwKKwkJCXRtLnRtX2hvdXIsIHRtLnRt X21pbiwgdG0udG1fc2VjLCB0cy50dl9uc2VjKTsKKwl9CisJcmVxdWVzdGVkX3N1c3BlbmRfc3Rh dGUgPSBzdGF0ZTsKKwlpZiAoc3RhdGUgPT0gUE1fU1VTUEVORF9PTikKKwkJd2FrZV9sb2NrKCZt YWluX3dha2VfbG9jayk7CisJZWxzZQorCQl3YWtlX3VubG9jaygmbWFpbl93YWtlX2xvY2spOwor CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN0YXRlX2xvY2ssIGlycWZsYWdzKTsKK30KKworc3Rh dGljIGludCBfX2luaXQgd2FrZWxvY2tzX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCWludCBp OworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWN0aXZlX3dha2VfbG9ja3MpOyBpKysp CisJCUlOSVRfTElTVF9IRUFEKCZhY3RpdmVfd2FrZV9sb2Nrc1tpXSk7CisKKyNpZmRlZiBDT05G SUdfV0FLRUxPQ0tfU1RBVAorCXdha2VfbG9ja19pbml0KCZkZWxldGVkX3dha2VfbG9ja3MsIFdB S0VfTE9DS19TVVNQRU5ELAorCQkJImRlbGV0ZWRfd2FrZV9sb2NrcyIpOworI2VuZGlmCisJd2Fr ZV9sb2NrX2luaXQoJm1haW5fd2FrZV9sb2NrLCBXQUtFX0xPQ0tfU1VTUEVORCwgIm1haW4iKTsK Kwl3YWtlX2xvY2soJm1haW5fd2FrZV9sb2NrKTsKKwl3YWtlX2xvY2tfaW5pdCgmdW5rbm93bl93 YWtldXAsIFdBS0VfTE9DS19TVVNQRU5ELCAidW5rbm93bl93YWtldXBzIik7CisKKwlyZXQgPSBw bGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnBvd2VyX2RldmljZSk7CisJaWYgKHJldCkgeworCQlw cl9lcnIoIndha2Vsb2Nrc19pbml0OiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIgZmFpbGVkXG4i KTsKKwkJZ290byBlcnJfcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyOworCX0KKwlyZXQgPSBwbGF0 Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnBvd2VyX2RyaXZlcik7CisJaWYgKHJldCkgeworCQlwcl9l cnIoIndha2Vsb2Nrc19pbml0OiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIgZmFpbGVkXG4iKTsK KwkJZ290byBlcnJfcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyOworCX0KKworCXN1c3BlbmRfd29y a19xdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJzdXNwZW5kIik7CisJaWYg KHN1c3BlbmRfd29ya19xdWV1ZSA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8g ZXJyX3N1c3BlbmRfd29ya19xdWV1ZTsKKwl9CisKKyNpZmRlZiBDT05GSUdfV0FLRUxPQ0tfU1RB VAorCWNyZWF0ZV9wcm9jX3JlYWRfZW50cnkoIndha2Vsb2NrcyIsIFNfSVJVR08sIE5VTEwsCisJ CQkJd2FrZWxvY2tfc3RhdHNfcmVhZF9wcm9jLCBOVUxMKTsKKyNlbmRpZgorCisJcmV0dXJuIDA7 CisKK2Vycl9zdXNwZW5kX3dvcmtfcXVldWU6CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIo JnBvd2VyX2RyaXZlcik7CitlcnJfcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyOgorCXBsYXRmb3Jt X2RldmljZV91bnJlZ2lzdGVyKCZwb3dlcl9kZXZpY2UpOworZXJyX3BsYXRmb3JtX2RldmljZV9y ZWdpc3RlcjoKKwl3YWtlX2xvY2tfZGVzdHJveSgmdW5rbm93bl93YWtldXApOworCXdha2VfbG9j a19kZXN0cm95KCZtYWluX3dha2VfbG9jayk7CisjaWZkZWYgQ09ORklHX1dBS0VMT0NLX1NUQVQK Kwl3YWtlX2xvY2tfZGVzdHJveSgmZGVsZXRlZF93YWtlX2xvY2tzKTsKKyNlbmRpZgorCXJldHVy biByZXQ7Cit9CisKK3N0YXRpYyB2b2lkICBfX2V4aXQgd2FrZWxvY2tzX2V4aXQodm9pZCkKK3sK KyNpZmRlZiBDT05GSUdfV0FLRUxPQ0tfU1RBVAorCXJlbW92ZV9wcm9jX2VudHJ5KCJ3YWtlbG9j a3MiLCBOVUxMKTsKKyNlbmRpZgorCWRlc3Ryb3lfd29ya3F1ZXVlKHN1c3BlbmRfd29ya19xdWV1 ZSk7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnBvd2VyX2RyaXZlcik7CisJcGxhdGZv cm1fZGV2aWNlX3VucmVnaXN0ZXIoJnBvd2VyX2RldmljZSk7CisJd2FrZV9sb2NrX2Rlc3Ryb3ko JnVua25vd25fd2FrZXVwKTsKKwl3YWtlX2xvY2tfZGVzdHJveSgmbWFpbl93YWtlX2xvY2spOwor I2lmZGVmIENPTkZJR19XQUtFTE9DS19TVEFUCisJd2FrZV9sb2NrX2Rlc3Ryb3koJmRlbGV0ZWRf d2FrZV9sb2Nrcyk7CisjZW5kaWYKK30KKworY29yZV9pbml0Y2FsbCh3YWtlbG9ja3NfaW5pdCk7 Cittb2R1bGVfZXhpdCh3YWtlbG9ja3NfZXhpdCk7Ci0tIAoxLjYuMQoKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtcG0gbWFpbGluZyBsaXN0Cmxp bnV4LXBtQGxpc3RzLmxpbnV4LWZvdW5kYXRpb24ub3JnCmh0dHBzOi8vbGlzdHMubGludXgtZm91 bmRhdGlvbi5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1wbQ==