ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWNwaS9kc2R0LW92ZXJyaWRlLnR4dCBiL0RvY3VtZW50YXRpb24vYWNwaS9kc2R0LW92ZXJyaWRlLnR4dAppbmRleCA1MDA4ZjI1Li5mZWJiYjFiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2FjcGkvZHNkdC1vdmVycmlkZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9hY3BpL2RzZHQtb3ZlcnJpZGUudHh0CkBAIC0xLDE1ICsxLDcgQEAKLUxpbnV4IHN1cHBvcnRzIHR3byBtZXRob2RzIG9mIG92ZXJyaWRpbmcgdGhlIEJJT1MgRFNEVDoKK0xpbnV4IHN1cHBvcnRzIGEgbWV0aG9kIG9mIG92ZXJyaWRpbmcgdGhlIEJJT1MgRFNEVDoKIAogQ09ORklHX0FDUElfQ1VTVE9NX0RTRFQgYnVpbGRzIHRoZSBpbWFnZSBpbnRvIHRoZSBrZXJuZWwuCiAKLUNPTkZJR19BQ1BJX0NVU1RPTV9EU0RUX0lOSVRSRCBhZGRzIHRoZSBpbWFnZSB0byB0aGUgaW5pdHJkLgotCi1XaGVuIHRvIHVzZSB0aGVzZSBtZXRob2RzIGlzIGRlc2NyaWJlZCBpbiBkZXRhaWwgb24gdGhlCitXaGVuIHRvIHVzZSB0aGlzIG1ldGhvZCBpcyBkZXNjcmliZWQgaW4gZGV0YWlsIG9uIHRoZQogTGludXgvQUNQSSBob21lIHBhZ2U6CiBodHRwOi8vd3d3Lmxlc3N3YXR0cy5vcmcvcHJvamVjdHMvYWNwaS9vdmVycmlkaW5nRFNEVC5waHAKLQotTm90ZSB0aGF0IGlmIGJvdGggb3B0aW9ucyBhcmUgdXNlZCwgdGhlIERTRFQgc3VwcGxpZWQKLWJ5IHRoZSBJTklUUkQgbWV0aG9kIHRha2VzIHByZWNlZGVuY2UuCi0KLURvY3VtZW50YXRpb24vaW5pdHJhbWZzLWFkZC1kc2R0LnNoIGlzIHByb3ZpZGVkIGZvciBjb252ZW5pZW5jZQotZm9yIHVzZSB3aXRoIHRoZSBDT05GSUdfQUNQSV9DVVNUT01fRFNEVF9JTklUUkQgbWV0aG9kLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hY3BpL2luaXRyYW1mcy1hZGQtZHNkdC5zaCBiL0RvY3VtZW50YXRpb24vYWNwaS9pbml0cmFtZnMtYWRkLWRzZHQuc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDE3ZWY2ZTguLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi9hY3BpL2luaXRyYW1mcy1hZGQtZHNkdC5zaAorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLSMhL2Jpbi9iYXNoCi0jIEFkZHMgYSBEU0RUIGZpbGUgdG8gdGhlIGluaXRyZCAoaWYgaXQncyBhbiBpbml0cmFtZnMpCi0jIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSBuYW1lIG9mIGFyY2hpdmUKLSMgc2Vjb25kIGFyZ3VtZW50IGlzIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIGFkZAotIyBUaGUgZmlsZSB3aWxsIGJlIGNvcGllZCBhcyAvRFNEVC5hbWwKLQotIyAyMDA2MDEyNjogZml4ICJQcmVtYXR1cmUgZW5kIG9mIGZpbGUiIHdpdGggc29tZSBvbGQgY3BpbyAoUm9sYW5kIFJvYmljKQotIyAyMDA2MDIwNTogdGhpcyB0aW1lIGl0IHNob3VsZCByZWFsbHkgd29yawotCi0jIGNoZWNrIHRoZSBhcmd1bWVudHMKLWlmIFsgJCMgLW5lIDIgXTsgdGhlbgotCXByb2dyYW1fbmFtZT0kKGJhc2VuYW1lICQwKQotCWVjaG8gIlwKLSRwcm9ncmFtX25hbWU6IHRvbyBmZXcgYXJndW1lbnRzCi1Vc2FnZTogJHByb2dyYW1fbmFtZSBpbml0cmQtbmFtZS5pbWcgRFNEVC10by1hZGQuYW1sCi1BZGRzIGEgRFNEVCBmaWxlIHRvIGFuIGluaXRyZCAoaW4gaW5pdHJhbWZzIGZvcm1hdCkKLQotICBpbml0cmQtbmFtZS5pbWc6IGZpbGVuYW1lIG9mIHRoZSBpbml0cmQgaW4gaW5pdHJhbWZzIGZvcm1hdAotICBEU0RULXRvLWFkZC5hbWw6IGZpbGVuYW1lIG9mIHRoZSBEU0RUIGZpbGUgdG8gYWRkCi0gICIgMT4mMgotICAgIGV4aXQgMQotZmkKLQotIyB3ZSBzaG91bGQgY2hlY2sgaXQncyBhbiBpbml0cmFtZnMKLQotdGVtcGNwaW89JChta3RlbXAgLWQpCi0jIGNsZWFudXAgb24gZXhpdCwgaGFuZ3VwLCBpbnRlcnJ1cHQsIHF1aXQsIHRlcm1pbmF0aW9uCi10cmFwICdybSAtcmYgJHRlbXBjcGlvJyAwIDEgMiAzIDE1Ci0KLSMgZXh0cmFjdCB0aGUgYXJjaGl2ZQotZ3VuemlwIC1jICIkMSIgPiAiJHRlbXBjcGlvIi9pbml0cmFtZnMuY3BpbyB8fCBleGl0IDEKLQotIyBjb3B5IHRoZSBEU0RUIGZpbGUgYXQgdGhlIHJvb3Qgb2YgdGhlIGRpcmVjdG9yeSBzbyB0aGF0IHdlIGNhbiBjYWxsIGl0ICIvRFNEVC5hbWwiCi1jcCAtZiAiJDIiICIkdGVtcGNwaW8iL0RTRFQuYW1sCi0KLSMgYWRkIHRoZSBmaWxlCi1jZCAiJHRlbXBjcGlvIgotKGVjaG8gRFNEVC5hbWwgfCBjcGlvIC0tcXVpZXQgLUggbmV3YyAtbyAtQSAtTyAiJHRlbXBjcGlvIi9pbml0cmFtZnMuY3BpbykgfHwgZXhpdCAxCi1jZCAiJE9MRFBXRCIKLQotIyByZS1jb21wcmVzcyB0aGUgYXJjaGl2ZQotZ3ppcCAtYyAiJHRlbXBjcGlvIi9pbml0cmFtZnMuY3BpbyA+ICIkMSIKLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mYi9jbWFwX3hmYmRldi50eHQgYi9Eb2N1bWVudGF0aW9uL2ZiL2NtYXBfeGZiZGV2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWUxZjBhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9mYi9jbWFwX3hmYmRldi50eHQKQEAgLTAsMCArMSw1MyBAQAorVW5kZXJzdGFuZGluZyBmYmRldidzIGNtYXAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXNlIG5vdGVzIGV4cGxhaW4gaG93IFgncyBkaXggbGF5ZXIgdXNlcyBmYmRldidzIGNtYXAgc3RydWN0dXJlcy4KKworKi4gZXhhbXBsZSBvZiByZWxldmFudCBzdHJ1Y3R1cmVzIGluIGZiZGV2IGFzIHVzZWQgZm9yIGEgMy1iaXQgZ3JheXNjYWxlIGNtYXAKK3N0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyB7CisgICAgICAgIC5iaXRzX3Blcl9waXhlbCA9IDgsCisgICAgICAgIC5ncmF5c2NhbGUgICAgICA9IDEsCisgICAgICAgIC5yZWQgPSAgICAgICAgICB7IDQsIDMsIDAgfSwKKyAgICAgICAgLmdyZWVuID0gICAgICAgIHsgMCwgMCwgMCB9LAorICAgICAgICAuYmx1ZSA9ICAgICAgICAgeyAwLCAwLCAwIH0sCit9CitzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8geworICAgICAgICAudmlzdWFsID0gICAgICAgRkJfVklTVUFMX1NUQVRJQ19QU0VVRE9DT0xPUiwKK30KK2ZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJaW5mby0+Y21hcC5yZWRbaV0gPSAoKCgyKmkpKzEpKigweEZGRkYpKS8xNjsKK21lbWNweShpbmZvLT5jbWFwLmdyZWVuLCBpbmZvLT5jbWFwLnJlZCwgc2l6ZW9mKHUxNikqOCk7CittZW1jcHkoaW5mby0+Y21hcC5ibHVlLCBpbmZvLT5jbWFwLnJlZCwgc2l6ZW9mKHUxNikqOCk7CisKKyouIFgxMSBhcHBzIGRvIHNvbWV0aGluZyBsaWtlIHRoZSBmb2xsb3dpbmcgd2hlbiB0cnlpbmcgdG8gdXNlIGdyYXlzY2FsZS4KK2ZvciAoaT0wOyBpIDwgODsgaSsrKSB7CisJY2hhciBjb2xvcnNwZWNbNjRdOworCW1lbXNldChjb2xvcnNwZWMsMCw2NCk7CisJc3ByaW50Zihjb2xvcnNwZWMsICJyZ2I6JXgvJXgvJXgiLCBpKjM2LGkqMzYsaSozNik7CisJaWYgKCFYUGFyc2VDb2xvcihvdXRwdXREaXNwbGF5LCB0ZXN0Q29sb3JtYXAsIGNvbG9yc3BlYywgJndhbnRlZENvbG9yKSkKKwkJcHJpbnRmKCJDYW4ndCBnZXQgY29sb3IgJXNcbiIsY29sb3JzcGVjKTsKKwlYQWxsb2NDb2xvcihvdXRwdXREaXNwbGF5LCB0ZXN0Q29sb3JtYXAsICZ3YW50ZWRDb2xvcik7CisJZ3JheXNbaV0gPSB3YW50ZWRDb2xvcjsKK30KK1RoZXJlJ3MgYWxzbyBuYW1lZCBlcXVpdmFsZW50cyBsaWtlIGdyYXkxLi54IHByb3ZpZGVkIHlvdSBoYXZlIGFuIHJnYi50eHQuCisKK1NvbWV3aGVyZSBpbiBYJ3MgY2FsbGNoYWluLCB0aGlzIHJlc3VsdHMgaW4gYSBjYWxsIHRvIFggY29kZSB0aGF0IGhhbmRsZXMgdGhlCitjb2xvcm1hcC4gRm9yIGV4YW1wbGUsIFhmYmRldiBoaXRzIHRoZSBmb2xsb3dpbmc6CisKK3hjLTAxMTAxMC9wcm9ncmFtcy9Yc2VydmVyL2RpeC9jb2xvcm1hcC5jOgorCitGaW5kQmVzdFBpeGVsKHBlbnRGaXJzdCwgc2l6ZSwgcHJnYiwgY2hhbm5lbCkKKworZHIgPSAobG9uZykgcGVudC0+Y28ubG9jYWwucmVkIC0gcHJnYi0+cmVkOworZGcgPSAobG9uZykgcGVudC0+Y28ubG9jYWwuZ3JlZW4gLSBwcmdiLT5ncmVlbjsKK2RiID0gKGxvbmcpIHBlbnQtPmNvLmxvY2FsLmJsdWUgLSBwcmdiLT5ibHVlOworc3EgPSBkciAqIGRyOworVW5zaWduZWRUb0JpZ051bSAoc3EsICZzdW0pOworQmlnTnVtQWRkICgmc3VtLCAmdGVtcCwgJnN1bSk7CisKK2NvLmxvY2FsLnJlZCBhcmUgZW50cmllcyB0aGF0IHdlcmUgYnJvdWdodCBpbiB0aHJvdWdoIEZCSU9HRVRDTUFQIHdoaWNoIGNvbWUKK2RpcmVjdGx5IGZyb20gdGhlIGluZm8tPmNtYXAucmVkIHRoYXQgd2FzIGxpc3RlZCBhYm92ZS4gVGhlIHByZ2IgaXMgdGhlIHJnYgordGhhdCB0aGUgYXBwIHdhbnRzIHRvIG1hdGNoIHRvLiBUaGUgYWJvdmUgY29kZSBpcyBkb2luZyB3aGF0IGxvb2tzIGxpa2UgYSBsZWFzdAorc3F1YXJlcyBtYXRjaGluZyBmdW5jdGlvbi4gVGhhdCdzIHdoeSB0aGUgY21hcCBlbnRyaWVzIGNhbid0IGJlIHNldCB0byB0aGUgbGVmdAoraGFuZCBzaWRlIGJvdW5kYXJpZXMgb2YgYSBjb2xvciByYW5nZS4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mYi9tZXRyb25vbWVmYi50eHQgYi9Eb2N1bWVudGF0aW9uL2ZiL21ldHJvbm9tZWZiLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWEyZTdiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9mYi9tZXRyb25vbWVmYi50eHQKQEAgLTAsMCArMSwzOCBAQAorCQkJTWV0cm9ub21lZmIKKwkJCS0tLS0tLS0tLS0tCitNYWludGFpbmVkIGJ5IEpheWEgS3VtYXIgPGpheWFrdW1hci5sa21sLmdtYWlsLmNvbT4KK0xhc3QgcmV2aXNlZDogTm92IDIwLCAyMDA3CisKK01ldHJvbm9tZWZiIGlzIGEgZHJpdmVyIGZvciB0aGUgTWV0cm9ub21lIGRpc3BsYXkgY29udHJvbGxlci4gVGhlIGNvbnRyb2xsZXIKK2lzIGZyb20gRS1JbmsgQ29ycG9yYXRpb24uIEl0IGlzIGludGVuZGVkIHRvIGJlIHVzZWQgdG8gZHJpdmUgdGhlIEUtSW5rCitWaXpwbGV4IGRpc3BsYXkgbWVkaWEuIEUtSW5rIGhvc3RzIHNvbWUgZGV0YWlscyBvZiB0aGlzIGNvbnRyb2xsZXIgYW5kIHRoZQorZGlzcGxheSBtZWRpYSBoZXJlIGh0dHA6Ly93d3cuZS1pbmsuY29tL3Byb2R1Y3RzL21hdHJpeC9tZXRyb25vbWUuaHRtbCAuCisKK01ldHJvbm9tZSBpcyBpbnRlcmZhY2VkIHRvIHRoZSBob3N0IENQVSB0aHJvdWdoIHRoZSBBTUxDRCBpbnRlcmZhY2UuIFRoZQoraG9zdCBDUFUgZ2VuZXJhdGVzIHRoZSBjb250cm9sIGluZm9ybWF0aW9uIGFuZCB0aGUgaW1hZ2UgaW4gYSBmcmFtZWJ1ZmZlcgord2hpY2ggaXMgdGhlbiBkZWxpdmVyZWQgdG8gdGhlIEFNTENEIGludGVyZmFjZSBieSBhIGhvc3Qgc3BlY2lmaWMgbWV0aG9kLgorQ3VycmVudGx5LCB0aGF0J3MgaW1wbGVtZW50ZWQgZm9yIHRoZSBQWEEncyBMQ0RDIGNvbnRyb2xsZXIuIFRoZSBkaXNwbGF5IGFuZAorZXJyb3Igc3RhdHVzIGFyZSBlYWNoIHB1bGxlZCB0aHJvdWdoIGluZGl2aWR1YWwgR1BJT3MuCisKK01ldHJvbm9tZWZiIHdhcyB3cml0dGVuIGZvciB0aGUgUFhBMjU1L2d1bXN0aXgvbHlyZSBjb21iaW5hdGlvbiBhbmQKK3RoZXJlZm9yZSBjdXJyZW50bHkgaGFzIGJvYXJkIHNldCBzcGVjaWZpYyBjb2RlIGluIGl0LiBJZiBvdGhlciBib2FyZHMgYmFzZWQgb24KK290aGVyIGFyY2hpdGVjdHVyZXMgYXJlIGF2YWlsYWJsZSwgdGhlbiB0aGUgaG9zdCBzcGVjaWZpYyBjb2RlIGNhbiBiZSBzZXBhcmF0ZWQKK2FuZCBhYnN0cmFjdGVkIG91dC4KKworTWV0cm9ub21lZmIgcmVxdWlyZXMgd2F2ZWZvcm0gaW5mb3JtYXRpb24gd2hpY2ggaXMgZGVsaXZlcmVkIHZpYSB0aGUgQU1MQ0QKK2ludGVyZmFjZSB0byB0aGUgbWV0cm9ub21lIGNvbnRyb2xsZXIuIFRoZSB3YXZlZm9ybSBpbmZvcm1hdGlvbiBpcyBleHBlY3RlZCB0bworYmUgZGVsaXZlcmVkIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgZmlybXdhcmUgY2xhc3MgaW50ZXJmYWNlLiBUaGUgd2F2ZWZvcm0gZmlsZQorY2FuIGJlIGNvbXByZXNzZWQgYXMgbG9uZyBhcyB5b3VyIHVkZXYgb3IgaG90cGx1ZyBzY3JpcHQgaXMgYXdhcmUgb2YgdGhlIG5lZWQKK3RvIHVuY29tcHJlc3MgaXQgYmVmb3JlIGRlbGl2ZXJpbmcgaXQuIG1ldHJvbm9tZWZiIHdpbGwgYXNrIGZvciB3YXZlZm9ybS53YmYKK3doaWNoIHdvdWxkIHR5cGljYWxseSBnbyBpbnRvIC9saWIvZmlybXdhcmUvd2F2ZWZvcm0ud2JmIGRlcGVuZGluZyBvbiB5b3VyCit1ZGV2L2hvdHBsdWcgc2V0dXAuIEkgaGF2ZSBvbmx5IHRlc3RlZCB3aXRoIGEgc2luZ2xlIHdhdmVmb3JtIGZpbGUgd2hpY2ggd2FzCitvcmlnaW5hbGx5IGxhYmVsZWQgMjNQMDEyMDFfNjBfV1QwMTA3X01UQy4gSSBkbyBub3Qga25vdyB3aGF0IGl0IHN0YW5kcyBmb3IuCitDYXV0aW9uIHNob3VsZCBiZSBleGVyY2lzZWQgd2hlbiBtYW5pcHVsYXRpbmcgdGhlIHdhdmVmb3JtIGFzIHRoZXJlIG1heSBiZQorYSBwb3NzaWJpbGl0eSB0aGF0IGl0IGNvdWxkIGhhdmUgc29tZSBwZXJtYW5lbnQgZWZmZWN0cyBvbiB0aGUgZGlzcGxheSBtZWRpYS4KK0kgbmVpdGhlciBoYXZlIGFjY2VzcyB0byBub3Iga25vdyBleGFjdGx5IHdoYXQgdGhlIHdhdmVmb3JtIGRvZXMgaW4gdGVybXMgb2YKK3RoZSBwaHlzaWNhbCBtZWRpYS4KKworTWV0cm9ub21lZmIgdXNlcyB0aGUgZGVmZXJyZWQgSU8gaW50ZXJmYWNlIHNvIHRoYXQgaXQgY2FuIHByb3ZpZGUgYSBtZW1vcnkKK21hcHBhYmxlIGZyYW1lIGJ1ZmZlci4gSXQgaGFzIGJlZW4gdGVzdGVkIHdpdGggdGlueXggKFhmYmRldikuIEl0IGlzIGtub3duCit0byB3b3JrIGF0IHRoaXMgdGltZSB3aXRoIHhleWVzLCB4Y2xvY2ssIHhsb2FkaW1hZ2UsIHhwZGYuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dCBiL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dAppbmRleCBjMWQxZmQwLi5iZjBlM2RmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CkBAIC0xNzIsMTYgKzE3Miw2IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1XaGF0OglpZGUtdGFwZSBkcml2ZXIKLVdoZW46CUp1bHkgMjAwOAotRmlsZXM6CWRyaXZlcnMvaWRlL2lkZS10YXBlLmMKLVdoeToJVGhpcyBkcml2ZXIgbWlnaHQgbm90IGhhdmUgYW55IHVzZXJzIGFueW1vcmUgYW5kIG1haW50YWluaW5nIGl0IGZvciBubwotCXJlYXNvbiBpcyBhbiBlZmZvcnQgbm8gb25lIHdhbnRzIHRvIG1ha2UuCi1XaG86CUJhcnRsb21pZWogWm9sbmllcmtpZXdpY3ogPGJ6b2xuaWVyQGdtYWlsLmNvbT4sIEJvcmlzbGF2IFBldGtvdgotCTxwZXRrb3ZiYkBnb29nbGVtYWlsLmNvbT4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KIFdoYXQ6IGxpYmF0YSBzcGluZG93biBza2lwcGluZyBhbmQgd2FybmluZwogV2hlbjogRGVjIDIwMDgKIFdoeTogIFNvbWUgaGFsdCg4KSBpbXBsZW1lbnRhdGlvbnMgc3luY2hyb25pemUgY2FjaGVzIGZvciBhbmQgc3BpbgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBiL0RvY3VtZW50YXRpb24vaWRlL2lkZS50eHQKaW5kZXggZTNiMzQyNS4uODE4Njc2YSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0CkBAIC0xMDUsNyArMTA1LDcgQEAKIEZvciByZWFsbHkgd2VpcmQgc2l0dWF0aW9ucywgdGhlIGFwcGFyZW50IChmZGlzaykgZ2VvbWV0cnkgY2FuIGFsc28gYmUgc3BlY2lmaWVkCiBvbiB0aGUga2VybmVsICJjb21tYW5kIGxpbmUiIHVzaW5nIExJTE8uICBUaGUgZm9ybWF0IG9mIHN1Y2ggbGluZXMgaXM6CiAKLQloZHg9Y3lscyxoZWFkcyxzZWN0cyx3cGNvbSxpcnEKKwloZHg9Y3lscyxoZWFkcyxzZWN0cwogb3IJaGR4PWNkcm9tCiAKIHdoZXJlIGhkeCBjYW4gYmUgYW55IG9mIGhkYSB0aHJvdWdoIGhkaCwgVGhyZWUgdmFsdWVzIGFyZSByZXF1aXJlZApAQCAtMjE0LDkgKzIxNCw5IEBACiBTdW1tYXJ5IG9mIGlkZSBkcml2ZXIgcGFyYW1ldGVycyBmb3Iga2VybmVsIGNvbW1hbmQgbGluZQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotICJoZHg9IiAgaXMgcmVjb2duaXplZCBmb3IgYWxsICJ4IiBmcm9tICJhIiB0byAiaCIsIHN1Y2ggYXMgImhkYyIuCisgImhkeD0iICBpcyByZWNvZ25pemVkIGZvciBhbGwgIngiIGZyb20gImEiIHRvICJ1Iiwgc3VjaCBhcyAiaGRjIi4KIAotICJpZGV4PSIgaXMgcmVjb2duaXplZCBmb3IgYWxsICJ4IiBmcm9tICIwIiB0byAiMyIsIHN1Y2ggYXMgImlkZTEiLgorICJpZGV4PSIgaXMgcmVjb2duaXplZCBmb3IgYWxsICJ4IiBmcm9tICIwIiB0byAiOSIsIHN1Y2ggYXMgImlkZTEiLgogCiAgImhkeD1ub3Byb2JlIgkJOiBkcml2ZSBtYXkgYmUgcHJlc2VudCwgYnV0IGRvIG5vdCBwcm9iZSBmb3IgaXQKIApAQCAtMjI4LDEzICsyMjgsNiBAQAogCiAgImhkeD1jeWwsaGVhZCxzZWN0Igk6IGRpc2sgZHJpdmUgaXMgcHJlc2VudCwgd2l0aCBzcGVjaWZpZWQgZ2VvbWV0cnkKIAotICJoZHg9cmVtYXAiCQk6IHJlbWFwIGFjY2VzcyBvZiBzZWN0b3IgMCB0byBzZWN0b3IgMSAoZm9yIEVaRHJpdmUpCi0KLSAiaGR4PXJlbWFwNjMiCQk6IHJlbWFwIHRoZSBkcml2ZTogYWRkIDYzIHRvIGFsbCBzZWN0b3IgbnVtYmVycwotCQkJICAoZm9yIERNIE9uVHJhY2spCi0KLSAiaWRleD1ub2F1dG90dW5lIgk6IGRyaXZlciB3aWxsIE5PVCBhdHRlbXB0IHRvIHR1bmUgaW50ZXJmYWNlIHNwZWVkCi0KICAiaGR4PWF1dG90dW5lIgkJOiBkcml2ZXIgd2lsbCBhdHRlbXB0IHRvIHR1bmUgaW50ZXJmYWNlIHNwZWVkCiAJCQkgIHRvIHRoZSBmYXN0ZXN0IFBJTyBtb2RlIHN1cHBvcnRlZCwKIAkJCSAgaWYgcG9zc2libGUgZm9yIHRoaXMgZHJpdmUgb25seS4KQEAgLTI0NCwxMCArMjM3LDYgQEAKIAogICJoZHg9bm9kbWEiCQk6IGRpc2FsbG93IERNQQogCi0gImhkeD1zY3NpIgkJOiB0aGUgcmV0dXJuIG9mIHRoZSBpZGUtc2NzaSBmbGFnLCB0aGlzIGlzIHVzZWZ1bCBmb3IKLSAJCQkgIGFsbG93aW5nIGlkZS1mbG9wcHksIGlkZS10YXBlLCBhbmQgaWRlLWNkcm9tfHdyaXRlcnMKLSAJCQkgIHRvIHVzZSBpZGUtc2NzaSBlbXVsYXRpb24gb24gYSBkZXZpY2Ugc3BlY2lmaWMgb3B0aW9uLgotCiAgImlkZWJ1cz14eCIJCTogaW5mb3JtIElERSBkcml2ZXIgb2YgVkVTQS9QQ0kgYnVzIHNwZWVkIGluIE1IeiwKIAkJCSAgd2hlcmUgInh4IiBpcyBiZXR3ZWVuIDIwIGFuZCA2NiBpbmNsdXNpdmUsCiAJCQkgIHVzZWQgd2hlbiB0dW5pbmcgY2hpcHNldCBQSU8gbW9kZXMuCkBAIC0yODIsMTAgKzI3MSw2IEBACiAKICAiaWRlPXJldmVyc2UiCQk6IGZvcm1lcmx5IGNhbGxlZCB0byBwY2kgc3ViLXN5c3RlbSwgYnV0IG5vdyBsb2NhbC4KIAotVGhlIGZvbGxvd2luZyBhcmUgdmFsaWQgT05MWSBvbiBpZGUwLCB3aGljaCB1c3VhbGx5IGNvcnJlc3BvbmRzCi10byB0aGUgZmlyc3QgQVRBIGludGVyZmFjZSBmb3VuZCBvbiB0aGUgcGFydGljdWxhciBob3N0LCBhbmQgdGhlIGRlZmF1bHRzIGZvcgotdGhlIGJhc2UsY3RsIHBvcnRzIG11c3Qgbm90IGJlIGFsdGVyZWQuCi0KICAiaWRlPWRvdWJsZXIiCQk6IHByb2JlL3N1cHBvcnQgSURFIGRvdWJsZXJzIG9uIEFtaWdhCiAKIFRoZXJlIG1heSBiZSBtb3JlIG9wdGlvbnMgdGhhbiBzaG93biAtLSB1c2UgdGhlIHNvdXJjZSwgTHVrZSEKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW5wdXQvbm90aWZpZXIudHh0IGIvRG9jdW1lbnRhdGlvbi9pbnB1dC9ub3RpZmllci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUxNzJjYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaW5wdXQvbm90aWZpZXIudHh0CkBAIC0wLDAgKzEsNTIgQEAKK0tleWJvYXJkIG5vdGlmaWVyCisKK09uZSBjYW4gdXNlIHJlZ2lzdGVyX2tleWJvYXJkX25vdGlmaWVyIHRvIGdldCBjYWxsZWQgYmFjayBvbiBrZXlib2FyZAorZXZlbnRzIChzZWUga2JkX2tleWNvZGUoKSBmdW5jdGlvbiBmb3IgZGV0YWlscykuICBUaGUgcGFzc2VkIHN0cnVjdHVyZSBpcwora2V5Ym9hcmRfbm90aWZpZXJfcGFyYW06CisKKy0gJ3ZjJyBhbHdheXMgcHJvdmlkZSB0aGUgVkMgZm9yIHdoaWNoIHRoZSBrZXlib2FyZCBldmVudCBhcHBsaWVzOworLSAnZG93bicgaXMgMSBmb3IgYSBrZXkgcHJlc3MgZXZlbnQsIDAgZm9yIGEga2V5IHJlbGVhc2U7CistICdzaGlmdCcgaXMgdGhlIGN1cnJlbnQgbW9kaWZpZXIgc3RhdGUsIG1hc2sgYml0IGluZGV4ZXMgYXJlIEtHXyo7CistICd2YWx1ZScgZGVwZW5kcyBvbiB0aGUgdHlwZSBvZiBldmVudC4KKworLSBLQkRfS0VZQ09ERSBldmVudHMgYXJlIGFsd2F5cyBzZW50IGJlZm9yZSBvdGhlciBldmVudHMsIHZhbHVlIGlzIHRoZSBrZXljb2RlLgorLSBLQkRfVU5CT1VORF9LRVlDT0RFIGV2ZW50cyBhcmUgc2VudCBpZiB0aGUga2V5Y29kZSBpcyBub3QgYm91bmQgdG8gYSBrZXlzeW0uCisgIHZhbHVlIGlzIHRoZSBrZXljb2RlLgorLSBLQkRfVU5JQ09ERSBldmVudHMgYXJlIHNlbnQgaWYgdGhlIGtleWNvZGUgLT4ga2V5c3ltIHRyYW5zbGF0aW9uIHByb2R1Y2VkIGEKKyAgdW5pY29kZSBjaGFyYWN0ZXIuIHZhbHVlIGlzIHRoZSB1bmljb2RlIHZhbHVlLgorLSBLQkRfS0VZU1lNIGV2ZW50cyBhcmUgc2VudCBpZiB0aGUga2V5Y29kZSAtPiBrZXlzeW0gdHJhbnNsYXRpb24gcHJvZHVjZWQgYQorICBub24tdW5pY29kZSBjaGFyYWN0ZXIuIHZhbHVlIGlzIHRoZSBrZXlzeW0uCistIEtCRF9QT1NUX0tFWVNZTSBldmVudHMgYXJlIHNlbnQgYWZ0ZXIgdGhlIHRyZWF0bWVudCBvZiBub24tdW5pY29kZSBrZXlzeW1zLgorICBUaGF0IHBlcm1pdHMgb25lIHRvIGluc3BlY3QgdGhlIHJlc3VsdGluZyBMRURzIGZvciBpbnN0YW5jZS4KKworRm9yIGVhY2gga2luZCBvZiBldmVudCBidXQgdGhlIGxhc3QsIHRoZSBjYWxsYmFjayBtYXkgcmV0dXJuIE5PVElGWV9TVE9QIGluCitvcmRlciB0byAiZWF0IiB0aGUgZXZlbnQ6IHRoZSBub3RpZnkgbG9vcCBpcyBzdG9wcGVkIGFuZCB0aGUga2V5Ym9hcmQgZXZlbnQgaXMKK2Ryb3BwZWQuCisKK0luIGEgcm91Z2ggQyBzbmlwcGV0LCB3ZSBoYXZlOgorCitrYmRfa2V5Y29kZShrZXljb2RlKSB7CisJLi4uCisJcGFyYW1zLnZhbHVlID0ga2V5Y29kZTsKKwlpZiAobm90aWZpZXJfY2FsbF9jaGFpbihLQkRfS0VZQ09ERSwmcGFyYW1zKSA9PSBOT1RJRllfU1RPUCkKKwkgICAgfHwgIWJvdW5kKSB7CisJCW5vdGlmaWVyX2NhbGxfY2hhaW4oS0JEX1VOQk9VTkRfS0VZQ09ERSwmcGFyYW1zKTsKKwkJcmV0dXJuOworCX0KKworCWlmICh1bmljb2RlKSB7CisJCXBhcmFtLnZhbHVlID0gdW5pY29kZTsKKwkJaWYgKG5vdGlmaWVyX2NhbGxfY2hhaW4oS0JEX1VOSUNPREUsJnBhcmFtcykgPT0gTk9USUZZX1NUT1ApCisJCQlyZXR1cm47CisJCWVtaXQgdW5pY29kZTsKKwkJcmV0dXJuOworCX0KKworCXBhcmFtcy52YWx1ZSA9IGtleXN5bTsKKwlpZiAobm90aWZpZXJfY2FsbF9jaGFpbihLQkRfS0VZU1lNLCZwYXJhbXMpID09IE5PVElGWV9TVE9QKQorCQlyZXR1cm47CisJYXBwbHkga2V5c3ltOworCW5vdGlmaWVyX2NhbGxfY2hhaW4oS0JEX1BPU1RfS0VZU1lNLCZwYXJhbXMpOworfQorCitOT1RFOiBUaGlzIG5vdGlmaWVyIGlzIHVzdWFsbHkgY2FsbGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CmluZGV4IDQ5MzE4YjkuLjY1MGIwZDggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CkBAIC0xNzcsOSArMTc3LDYgQEAKIAogCWFjcGlfbm9fYXV0b19zc2R0CVtIVyxBQ1BJXSBEaXNhYmxlIGF1dG9tYXRpYyBsb2FkaW5nIG9mIFNTRFQKIAotCWFjcGlfbm9faW5pdHJkX292ZXJyaWRlCVtLTkwsQUNQSV0KLQkJCURpc2FibGUgbG9hZGluZyBjdXN0b20gQUNQSSB0YWJsZXMgZnJvbSB0aGUgaW5pdHJhbWZzCi0KIAlhY3BpX29zX25hbWU9CVtIVyxBQ1BJXSBUZWxsIEFDUEkgQklPUyB0aGUgbmFtZSBvZiB0aGUgT1MKIAkJCUZvcm1hdDogVG8gc3Bvb2YgYXMgV2luZG93cyA5ODogPSJNaWNyb3NvZnQgV2luZG93cyIKIApAQCAtNzM1LDYgKzczMiw4IEBACiAJCQkgICAgIChEb24ndCBhdHRlbXB0IHRvIGJsaW5rIHRoZSBsZWRzKQogCWk4MDQyLm5vYXV4CVtIV10gRG9uJ3QgY2hlY2sgZm9yIGF1eGlsaWFyeSAoPT0gbW91c2UpIHBvcnQKIAlpODA0Mi5ub2tiZAlbSFddIERvbid0IGNoZWNrL2NyZWF0ZSBrZXlib2FyZCBwb3J0CisJaTgwNDIubm9sb29wCVtIV10gRGlzYWJsZSB0aGUgQVVYIExvb3BiYWNrIGNvbW1hbmQgd2hpbGUgcHJvYmluZworCQkJICAgICBmb3IgdGhlIEFVWCBwb3J0CiAJaTgwNDIubm9tdXgJW0hXXSBEb24ndCBjaGVjayBwcmVzZW5jZSBvZiBhbiBhY3RpdmUgbXVsdGlwbGV4aW5nCiAJCQkgICAgIGNvbnRyb2xsZXIKIAlpODA0Mi5ub3BucAlbSFddIERvbid0IHVzZSBBQ1BJUG5QIC8gUG5QQklPUyB0byBkaXNjb3ZlciBLQkQvQVVYCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21jYS50eHQgYi9Eb2N1bWVudGF0aW9uL21jYS50eHQKaW5kZXggYWFiY2U0YS4uNTEwMzc1ZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9tY2EudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbWNhLnR4dApAQCAtMTQzLDE0ICsxNDMsNyBAQAogCiBDdXJyZW50bHksIHRoZXJlIGFyZSBhIG51bWJlciBvZiBNQ0Etc3BlY2lmaWMgZGV2aWNlIGRyaXZlcnMuCiAKLTEpIFBTLzIgRVNESQotCWRyaXZlcnMvYmxvY2svcHMyZXNkaS5jCi0JaW5jbHVkZS9saW51eC9wczJlc2RpLmgKLSAgIFVzZXMgbWFqb3IgbnVtYmVyIDM2LCBhbmQgc2hvdWxkIHVzZSAvZGV2IGZpbGVzIC9kZXYvZWRhLCAvZGV2L2VkYi4KLSAgIFN1cHBvcnRzIHR3byBkcml2ZXMsIGJ1dCBvbmx5IG9uZSBjb250cm9sbGVyLiAgTWF5IHVzZSB0aGUKLSAgIGNvbW1hbmQtbGluZSBhcmdzICJlZD1jeWwsaGVhZCxzZWMiIGFuZCAidHA3MjAiLgotCi0yKSBQUy8yIFNDU0kKKzEpIFBTLzIgU0NTSQogCWRyaXZlcnMvc2NzaS9pYm1tY2EuYwogCWRyaXZlcnMvc2NzaS9pYm1tY2EuaAogICAgVGhlIGRyaXZlciBmb3IgdGhlIElCTSBTQ1NJIHN1YnN5c3RlbS4gIEluY2x1ZGVzIGJvdGggaW50ZWdyYXRlZApAQCAtMTU5LDI1ICsxNTIsMjUgQEAKICAgIG1hY2hpbmUgd2l0aCBhIGZyb250LXBhbmVsIGRpc3BsYXkgKGkuZS4gbW9kZWwgOTUpLCB5b3UgY2FuIHVzZQogICAgImlibW1jYXNjc2k9ZGlzcGxheSIgdG8gZW5hYmxlIGEgZHJpdmUgYWN0aXZpdHkgaW5kaWNhdG9yLgogCi0zKSAzYzUyMworMikgM2M1MjMKIAlkcml2ZXJzL25ldC8zYzUyMy5jCiAJZHJpdmVycy9uZXQvM2M1MjMuaAogICAgM0NvbSAzYzUyMyBFdGhlcmxpbmsvTUMgZXRoZXJuZXQgZHJpdmVyLgogCi00KSBTTUMgVWx0cmEvTUNBIGFuZCBJQk0gQWRhcHRlci9BCiszKSBTTUMgVWx0cmEvTUNBIGFuZCBJQk0gQWRhcHRlci9BCiAJZHJpdmVycy9uZXQvc21jLW1jYS5jCiAJZHJpdmVycy9uZXQvc21jLW1jYS5oCiAJRHJpdmVyIGZvciB0aGUgTUNBIHZlcnNpb24gb2YgdGhlIFNNQyBVbHRyYSBhbmQgdmFyaW91cyBvdGhlcgogCU9FTSdlZCBhbmQgd29yay1hbGlrZSBjYXJkcyAoRWxpdGUsIEFkYXB0ZXIvQSwgZXRjKS4KIAotNSkgTkUvMgorNCkgTkUvMgogCWRyaXZlci9uZXQvbmUyLmMKIAlkcml2ZXIvbmV0L25lMi5oCiAJVGhlIE5FLzIgaXMgdGhlIE1DQSB2ZXJzaW9uIG9mIHRoZSBORTIwMDAuICBUaGlzIG1heSBub3Qgd29yawogCXdpdGggY2xvbmVzIHRoYXQgaGF2ZSBhIGRpZmZlcmVudCBhZGFwdGVyIGlkIHRoYW4gdGhlIG9yaWdpbmFsCiAJTkUvMi4KIAotNikgRnV0dXJlIERvbWFpbiBNQ1MtNjAwLzcwMCwgT0VNJ2QgSUJNIEZhc3QgU0NTSSBBZGFwdGVyL0EgYW5kCis1KSBGdXR1cmUgRG9tYWluIE1DUy02MDAvNzAwLCBPRU0nZCBJQk0gRmFzdCBTQ1NJIEFkYXB0ZXIvQSBhbmQKICAgIFJlcGx5IFNvdW5kIEJsYXN0ZXIvU0NTSSAoU0NTSSBwYXJ0KQogCUJldHRlciBzdXBwb3J0IGZvciB0aGVzZSBjYXJkcyB0aGFuIHRoZSBkcml2ZXIgZm9yIElTQS4KICAgIFN1cHBvcnRzIG11bHRpcGxlIGNhcmRzIHdpdGggSVJRIHNoYXJpbmcuCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDBmOTVhNGEuLjczODgzYjggMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC0yNjYsNiArMjY2LDE1IEBACiBXOiAgICAgIGh0dHA6Ly93d3cubGVzc3dhdHRzLm9yZy9wcm9qZWN0cy9hY3BpLwogUzogICAgICBNYWludGFpbmVkCiAKK0FEMTg4OSBBTFNBIFNPVU5EIERSSVZFUgorUDogICAgIEt5bGUgTWNNYXJ0aW4KK006ICAgICBreWxlQHBhcmlzYy1saW51eC5vcmcKK1A6ICAgICBUaGliYXV0IFZhcmVuZQorTTogICAgIFQtQm9uZUBwYXJpc2MtbGludXgub3JnCitXOiAgICAgaHR0cDovL3dpa2kucGFyaXNjLWxpbnV4Lm9yZy9BRDE4ODkKK0w6ICAgICBsaW51eC1wYXJpc2NAdmdlci5rZXJuZWwub3JnCitTOiAgICAgTWFpbnRhaW5lZAorCiBBRE0xMDI1IEhBUkRXQVJFIE1PTklUT1IgRFJJVkVSCiBQOglKZWFuIERlbHZhcmUKIE06CWtoYWxpQGxpbnV4LWZyLm9yZwpAQCAtNDQzLDcgKzQ1Miw3IEBACiAKIEFSTS9BVE1FTCBBVDkxUk05MjAwIEFSTSBBUkNISVRFQ1RVUkUKIFA6ICAgICAgQW5kcmV3IFZpY3RvcgotTTogICAgICBhbmRyZXdAc2FucGVvcGxlLmNvbQorTTogICAgICBsaW51eEBtYXhpbS5vcmcuemEKIEw6ICAgICAgbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrIChzdWJzY3JpYmVycy1vbmx5KQogVzogICAgICBodHRwOi8vbWF4aW0ub3JnLnphL2F0OTFfMjYuaHRtbAogUzogICAgICBNYWludGFpbmVkCkBAIC04NzEsNyArODgwLDcgQEAKIE06CW1hcmNlbEBob2x0bWFubi5vcmcKIFA6CU1heGltIEtyYXNueWFuc2t5CiBNOgltYXhrQHF1YWxjb21tLmNvbQotTDoJYmx1ZXotZGV2ZWxAbGlzdHMuc2YubmV0CitMOglsaW51eC1ibHVldG9vdGhAdmdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vYmx1ZXouc2YubmV0CiBXOglodHRwOi8vd3d3LmJsdWV6Lm9yZwogVzoJaHR0cDovL3d3dy5ob2x0bWFubi5vcmcvbGludXgvYmx1ZXRvb3RoLwpAQCAtMjkyNiw5ICsyOTM1LDkgQEAKIAogT1JBQ0xFIENMVVNURVIgRklMRVNZU1RFTSAyIChPQ0ZTMikKIFA6CU1hcmsgRmFzaGVoCi1NOgltYXJrLmZhc2hlaEBvcmFjbGUuY29tCi1QOglLdXJ0IEhhY2tlbAotTToJa3VydC5oYWNrZWxAb3JhY2xlLmNvbQorTToJbWZhc2hlaEBzdXNlLmNvbQorUDoJSm9lbCBCZWNrZXIKK006CWpvZWwuYmVja2VyQG9yYWNsZS5jb20KIEw6CW9jZnMyLWRldmVsQG9zcy5vcmFjbGUuY29tCiBXOglodHRwOi8vb3NzLm9yYWNsZS5jb20vcHJvamVjdHMvb2NmczIvCiBTOglTdXBwb3J0ZWQKZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggMGViMjNlNS4uN2E0ZDM0YiAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTEsNyArMSw3IEBACiBWRVJTSU9OID0gMgogUEFUQ0hMRVZFTCA9IDYKIFNVQkxFVkVMID0gMjUKLUVYVFJBVkVSU0lPTiA9IC1yYzUKK0VYVFJBVkVSU0lPTiA9IC1yYzYKIE5BTUUgPSBGdW5reSBXZWFzZWwgaXMgSmlnZ3kgd2l0IGl0CiAKICMgKkRPQ1VNRU5UQVRJT04qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9LY29uZmlnIGIvYXJjaC9hcm0vS2NvbmZpZwppbmRleCA5NTVmYzUzLi40MDM5YTEzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL0tjb25maWcKQEAgLTQ2OSw2ICs0NjksNyBAQAogCWJvb2wgIlRJIE9NQVAiCiAJc2VsZWN0IEdFTkVSSUNfR1BJTwogCXNlbGVjdCBHRU5FUklDX1RJTUUKKwlzZWxlY3QgR0VORVJJQ19DTE9DS0VWRU5UUwogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIFRJJ3MgT01BUCBwbGF0Zm9ybSAoT01BUDEgYW5kIE9NQVAyKS4KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3NpZ25hbC5jIGIvYXJjaC9hcm0va2VybmVsL3NpZ25hbC5jCmluZGV4IDU0Y2RmMWFlLi5lZjJmODZhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3NpZ25hbC5jCkBAIC0yNiw4ICsyNiw4IEBACiAvKgogICogRm9yIEFSTSBzeXNjYWxscywgd2UgZW5jb2RlIHRoZSBzeXNjYWxsIG51bWJlciBpbnRvIHRoZSBpbnN0cnVjdGlvbi4KICAqLwotI2RlZmluZSBTV0lfU1lTX1NJR1JFVFVSTgkoMHhlZjAwMDAwMHwoX19OUl9zaWdyZXR1cm4pKQotI2RlZmluZSBTV0lfU1lTX1JUX1NJR1JFVFVSTgkoMHhlZjAwMDAwMHwoX19OUl9ydF9zaWdyZXR1cm4pKQorI2RlZmluZSBTV0lfU1lTX1NJR1JFVFVSTgkoMHhlZjAwMDAwMHwoX19OUl9zaWdyZXR1cm4pfChfX05SX09BQklfU1lTQ0FMTF9CQVNFKSkKKyNkZWZpbmUgU1dJX1NZU19SVF9TSUdSRVRVUk4JKDB4ZWYwMDAwMDB8KF9fTlJfcnRfc2lncmV0dXJuKXwoX19OUl9PQUJJX1NZU0NBTExfQkFTRSkpCiAKIC8qCiAgKiBXaXRoIEVBQkksIHRoZSBzeXNjYWxsIG51bWJlciBoYXMgdG8gYmUgbG9hZGVkIGludG8gcjcuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDMyeC9nbGFudGFuay5jIGIvYXJjaC9hcm0vbWFjaC1pb3AzMngvZ2xhbnRhbmsuYwppbmRleCA3NGM2NWNlLi5kMmE3YjA0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDMyeC9nbGFudGFuay5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW9wMzJ4L2dsYW50YW5rLmMKQEAgLTE0LDggKzE0LDEwIEBACiAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9mNzUzNzVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KQEAgLTE2NywxMSArMTY5LDIxIEBACiAJLnJlc291cmNlCT0gJmdsYW50YW5rX3VhcnRfcmVzb3VyY2UsCiB9OwogCitzdGF0aWMgc3RydWN0IGY3NTM3NXNfcGxhdGZvcm1fZGF0YSBnbGFudGFua19mNzUzNzVzID0geworCS5wd20JCT0geyAyNTUsIDI1NSB9LAorCS5wd21fZW5hYmxlCT0geyAwLCAwIH0sCit9OworCiBzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgZ2xhbnRhbmtfaTJjX2RldmljZXNbXSA9IHsKIAl7CiAJCUkyQ19CT0FSRF9JTkZPKCJydGMtcnM1YzM3MiIsIDB4MzIpLAogCQkudHlwZSA9ICJyczVjMzcyYSIsCiAJfSwKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJmNzUzNzUiLCAweDJlKSwKKwkJLnR5cGUgPSAiZjc1Mzc1IiwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmZ2xhbnRhbmtfZjc1Mzc1cywKKwl9LAogfTsKIAogc3RhdGljIHZvaWQgZ2xhbnRhbmtfcG93ZXJfb2ZmKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWUuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvdGltZS5jCmluZGV4IDIzNzY1MWUuLmE0ZjhiMjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvdGltZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvdGltZS5jCkBAIC0xMzIsMTMgKzEzMiwyMCBAQAogCXRpbWVyLT5jbnRsID0gdGltZXJmbGFnczsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIG9tYXBfbXB1X3RpbWVyX3N0b3AoaW50IG5yKQoreworCXZvbGF0aWxlIG9tYXBfbXB1X3RpbWVyX3JlZ3NfdCogdGltZXIgPSBvbWFwX21wdV90aW1lcl9iYXNlKG5yKTsKKworCXRpbWVyLT5jbnRsICY9IH5NUFVfVElNRVJfU1Q7Cit9CisKIC8qCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIE1QVSB0aW1lciAxIC4uLiBjb3VudCBkb3duIHRvIHplcm8sIGludGVycnVwdCwgcmVsb2FkCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogc3RhdGljIGludCBvbWFwX21wdV9zZXRfbmV4dF9ldmVudCh1bnNpZ25lZCBsb25nIGN5Y2xlcywKLQkJCQkgICAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KQorCQkJCSAgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCkKIHsKIAlvbWFwX21wdV90aW1lcl9zdGFydCgwLCBjeWNsZXMsIDApOwogCXJldHVybiAwOwpAQCAtMTUyLDYgKzE1OSw3IEBACiAJCW9tYXBfbXB1X3NldF9hdXRvcmVzZXQoMCk7CiAJCWJyZWFrOwogCWNhc2UgQ0xPQ0tfRVZUX01PREVfT05FU0hPVDoKKwkJb21hcF9tcHVfdGltZXJfc3RvcCgwKTsKIAkJb21hcF9tcHVfcmVtb3ZlX2F1dG9yZXNldCgwKTsKIAkJYnJlYWs7CiAJY2FzZSBDTE9DS19FVlRfTU9ERV9VTlVTRUQ6CkBAIC0xNjMsNyArMTcxLDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgY2xvY2tldmVudF9tcHVfdGltZXIxID0gewogCS5uYW1lCQk9ICJtcHVfdGltZXIxIiwKLQkuZmVhdHVyZXMgICAgICAgPSBDTE9DS19FVlRfRkVBVF9QRVJJT0RJQywgQ0xPQ0tfRVZUX0ZFQVRfT05FU0hPVCwKKwkuZmVhdHVyZXMgICAgICAgPSBDTE9DS19FVlRfRkVBVF9QRVJJT0RJQyB8IENMT0NLX0VWVF9GRUFUX09ORVNIT1QsCiAJLnNoaWZ0CQk9IDMyLAogCS5zZXRfbmV4dF9ldmVudAk9IG9tYXBfbXB1X3NldF9uZXh0X2V2ZW50LAogCS5zZXRfbW9kZQk9IG9tYXBfbXB1X3NldF9tb2RlLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy14c2NhbGUuUyBiL2FyY2gvYXJtL21tL3Byb2MteHNjYWxlLlMKaW5kZXggYzE1NmRkYS4uMDE2NjkwYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy14c2NhbGUuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLXhzY2FsZS5TCkBAIC0xMTQsNiArMTE0LDEwIEBACiAgKiBOb3RoaW5nIHRvbyBleGNpdGluZyBhdCB0aGUgbW9tZW50CiAgKi8KIEVOVFJZKGNwdV94c2NhbGVfcHJvY19pbml0KQorCUAgZW5hYmxlIHdyaXRlIGJ1ZmZlciBjb2FsZXNjaW5nLiBTb21lIGJvb3Rsb2FkZXIgZGlzYWJsZSBpdAorCW1yYwlwMTUsIDAsIHIxLCBjMSwgYzAsIDEKKwliaWMJcjEsIHIxLCAjMQorCW1jcglwMTUsIDAsIHIxLCBjMSwgYzAsIDEKIAltb3YJcGMsIGxyCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvS2NvbmZpZyBiL2FyY2gvYXJtL3BsYXQtb21hcC9LY29uZmlnCmluZGV4IGMxZjdlNWEuLmI5MTcyMDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9LY29uZmlnCkBAIC0xMSw3ICsxMSw2IEBACiAKIGNvbmZpZyBBUkNIX09NQVAxCiAJYm9vbCAiVEkgT01BUDEiCi0Jc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKIAogY29uZmlnIEFSQ0hfT01BUDIKIAlib29sICJUSSBPTUFQMiIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9NYWtlZmlsZSBiL2FyY2gvYXJtL3BsYXQtb21hcC9NYWtlZmlsZQppbmRleCBjZTE3ZGYzLi44ZjU2YzI1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL01ha2VmaWxlCkBAIC0xNCw5ICsxNCwxNCBAQAogIyBPQ1BJIGludGVyY29ubmVjdCBzdXBwb3J0IGZvciAxNzEwLCAxNjEwIGFuZCA1OTEyCiBvYmotJChDT05GSUdfQVJDSF9PTUFQMTZYWCkgKz0gb2NwaS5vCiAKK29iai0kKENPTkZJR19PTUFQX01DQlNQKSArPSBtY2JzcC5vCiAKIG9iai0kKENPTkZJR19DUFVfRlJFUSkgKz0gY3B1LW9tYXAubwogb2JqLSQoQ09ORklHX09NQVBfRE1fVElNRVIpICs9IGRtdGltZXIubwogb2JqLSQoQ09ORklHX09NQVBfREVCVUdfREVWSUNFUykgKz0gZGVidWctZGV2aWNlcy5vCiBvYmotJChDT05GSUdfT01BUF9ERUJVR19MRURTKSArPSBkZWJ1Zy1sZWRzLm8KIG9iai0kKENPTkZJR19JMkNfT01BUCkgKz0gaTJjLm8KKworIyBPTUFQIG1haWxib3ggZnJhbWV3b3JrCitvYmotJChDT05GSUdfT01BUF9NQk9YX0ZXSykgKz0gbWFpbGJveC5vCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYwppbmRleCA5MTAwNGEzLi43OTM3NDA2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RtYS5jCkBAIC0xMDIwLDEyICsxMDIwLDEyIEBACiAJfQogCiAJdyA9IE9NQVBfRE1BX0NMTktfQ1RSTF9SRUcobGNoX2hlYWQpOwotCXcgJj0gfigweDBmKTsKKwl3ICY9IH4oMHgxZik7CiAJdyB8PSBsY2hfcXVldWU7CiAJT01BUF9ETUFfQ0xOS19DVFJMX1JFRyhsY2hfaGVhZCkgPSB3OwogCiAJdyA9IE9NQVBfRE1BX0NMTktfQ1RSTF9SRUcobGNoX3F1ZXVlKTsKLQl3ICY9IH4oMHgwZik7CisJdyAmPSB+KDB4MWYpOwogCXcgfD0gKGRtYV9jaGFuW2xjaF9xdWV1ZV0ubmV4dF9saW5rZWRfY2gpOwogCU9NQVBfRE1BX0NMTktfQ1RSTF9SRUcobGNoX3F1ZXVlKSA9IHc7CiB9CkBAIC0xMjQ4LDcgKzEyNDgsNyBAQAogICogQHBhcmFtIGZyYW1lX2NvdW50CiAgKiBAcGFyYW0gY2FsbGJrX2RhdGEgLSBjaGFubmVsIGNhbGxiYWNrIHBhcmFtZXRlciBkYXRhLgogICoKLSAqIEByZXR1cm4gIC0gU3VjY2VzcyA6IHN0YXJ0X2RtYSBzdGF0dXMKKyAqIEByZXR1cm4gIC0gU3VjY2VzcyA6IDAKICAqIAkgICAgICBGYWlsdXJlOiAtRUlOVkFMLy1FQlVTWQogICovCiBpbnQgb21hcF9kbWFfY2hhaW5fYV90cmFuc2ZlcihpbnQgY2hhaW5faWQsIGludCBzcmNfc3RhcnQsIGludCBkZXN0X3N0YXJ0LApAQCAtMTM2Nyw3ICsxMzY3LDcgQEAKIAkJCWRtYV9jaGFuW2xjaF0uZmxhZ3MgfD0gT01BUF9ETUFfQUNUSVZFOwogCQl9CiAJfQotCXJldHVybiBzdGFydF9kbWE7CisJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKG9tYXBfZG1hX2NoYWluX2FfdHJhbnNmZXIpOwogCkBAIC0xNjYzLDYgKzE2NjMsNyBAQAogCWlmICghc3RhdHVzKSB7CiAJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJTcHVyaW91cyBETUEgSVJRIGZvciBsY2ggJWRcbiIsIGNoKTsKKwkJb21hcF93cml0ZWwoMSA8PCBjaCwgT01BUF9ETUE0X0lSUVNUQVRVU19MMCk7CiAJCXJldHVybiAwOwogCX0KIAlpZiAodW5saWtlbHkoZG1hX2NoYW5bY2hdLmRldl9pZCA9PSAtMSkpIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9ncGlvLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvZ3Bpby5jCmluZGV4IDY2YTE0NTUuLjhjNzhlNGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9ncGlvLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2dwaW8uYwpAQCAtMTEzNCwxMCArMTEzNCw5IEBACiBzdGF0aWMgdm9pZCBncGlvX3VubWFza19pcnEodW5zaWduZWQgaW50IGlycSkKIHsKIAl1bnNpZ25lZCBpbnQgZ3BpbyA9IGlycSAtIElIX0dQSU9fQkFTRTsKLQl1bnNpZ25lZCBpbnQgZ3Bpb19pZHggPSBnZXRfZ3Bpb19pbmRleChncGlvKTsKIAlzdHJ1Y3QgZ3Bpb19iYW5rICpiYW5rID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKIAotCV9zZXRfZ3Bpb19pcnFlbmFibGUoYmFuaywgZ3Bpb19pZHgsIDEpOworCV9zZXRfZ3Bpb19pcnFlbmFibGUoYmFuaywgZ3BpbywgMSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgZ3Bpb19pcnFfY2hpcCA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL01ha2VmaWxlIGIvYXJjaC9wYXJpc2MvTWFrZWZpbGUKaW5kZXggZTU3NGRlNC4uNWRkYWQ3YiAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvTWFrZWZpbGUKKysrIGIvYXJjaC9wYXJpc2MvTWFrZWZpbGUKQEAgLTE2LDYgKzE2LDkgQEAKICMgTW9kaWZpZWQgZm9yIFBBLVJJU0MgTGludXggYnkgUGF1bCBMYWhhaWUsIEFsZXggZGVWcmllcywgCiAjIE1pa2UgU2hhdmVyLCBIZWxnZSBEZWxsZXIgYW5kIE1hcnRpbiBLLiBQZXRlcnNlbgogIworCitLQlVJTERfREVGQ09ORklHIDo9IGRlZmF1bHRfZGVmY29uZmlnCisKIE5NCQk9IHNoICQoc3JjdHJlZSkvYXJjaC9wYXJpc2Mvbm0KIENIRUNLRkxBR1MJKz0gLURfX2hwcGFfXz0xCiAKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2RlZmNvbmZpZyBiL2FyY2gvcGFyaXNjL2NvbmZpZ3MvZGVmYXVsdF9kZWZjb25maWcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvcGFyaXNjL2RlZmNvbmZpZwpyZW5hbWUgdG8gYXJjaC9wYXJpc2MvY29uZmlncy9kZWZhdWx0X2RlZmNvbmZpZwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL2Zpcm13YXJlLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvZmlybXdhcmUuYwppbmRleCA0YWI4M2Q1Li43MTc3YTZjIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvZmlybXdhcmUuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvZmlybXdhcmUuYwpAQCAtMTA4MCw2ICsxMDgwLDkgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZGNfbG9jaywgZmxhZ3MpOwogfQogCisvKiBsb2NrZWQgYnkgcGRjX2NvbnNvbGVfbG9jayAqLworc3RhdGljIGludCBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSkgICBpb2RjX3JldGJ1ZlszMl07CitzdGF0aWMgY2hhciBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDY0KSkpIGlvZGNfZGJ1Zls0MDk2XTsKIAogLyoqCiAgKiBwZGNfaW9kY19wcmludCAtIENvbnNvbGUgcHJpbnQgdXNpbmcgSU9EQy4KQEAgLTEwOTEsMjQgKzEwOTQsMjAgQEAKICAqIFNpbmNlIHRoZSBIUCBjb25zb2xlIHJlcXVpcmVzIENSK0xGIHRvIHBlcmZvcm0gYSAnbmV3bGluZScsIHdlIHRyYW5zbGF0ZQogICogIlxuIiB0byAiXHJcbiIuCiAgKi8KLWludCBwZGNfaW9kY19wcmludCh1bnNpZ25lZCBjaGFyICpzdHIsIHVuc2lnbmVkIGNvdW50KQoraW50IHBkY19pb2RjX3ByaW50KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnN0ciwgdW5zaWduZWQgY291bnQpCiB7Ci0JLyogWFhYIFNob3VsZCB3ZSBzcGlubG9jayBwb3N4IHVzYWdlICovCiAJc3RhdGljIGludCBwb3N4OyAgICAgICAgLyogZm9yIHNpbXBsZSBUQUItU2ltdWxhdGlvbi4uLiAqLwotCWludCBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSkgICBpb2RjX3JldGJ1ZlszMl07Ci0JY2hhciBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDY0KSkpIGlvZGNfZGJ1Zls0MDk2XTsKIAl1bnNpZ25lZCBpbnQgaTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JbWVtc2V0KGlvZGNfZGJ1ZiwgMCwgNDA5Nik7Ci0JZm9yIChpID0gMDsgaSA8IGNvdW50ICYmIGkgPCAyMDQ4OykgeworCWZvciAoaSA9IDA7IGkgPCBjb3VudCAmJiBpIDwgNzk7KSB7CiAJCXN3aXRjaChzdHJbaV0pIHsKIAkJY2FzZSAnXG4nOgogCQkJaW9kY19kYnVmW2krMF0gPSAnXHInOwogCQkJaW9kY19kYnVmW2krMV0gPSAnXG4nOwogCQkJaSArPSAyOwogCQkJcG9zeCA9IDA7Ci0JCQlicmVhazsKKwkJCWdvdG8gcHJpbnQ7CiAJCWNhc2UgJ1x0JzoKIAkJCXdoaWxlIChwb3N4ICYgNykgewogCQkJCWlvZGNfZGJ1ZltpXSA9ICcgJzsKQEAgLTExMjQsNiArMTEyMywxNiBAQAogCQl9CiAJfQogCisJLyogaWYgd2UncmUgYXQgdGhlIGVuZCBvZiBsaW5lLCBhbmQgbm90IGFscmVhZHkgaW5zZXJ0aW5nIGEgbmV3bGluZSwKKwkgKiBpbnNlcnQgb25lIGFueXdheS4gaW9kYyBjb25zb2xlIGRvZXNuJ3QgY2xhaW0gdG8gc3VwcG9ydCA+NzkgY2hhcgorCSAqIGxpbmVzLiBkb24ndCBhY2NvdW50IGZvciB0aGlzIGluIHRoZSByZXR1cm4gdmFsdWUuCisJICovCisJaWYgKGkgPT0gNzkgJiYgaW9kY19kYnVmW2ktMV0gIT0gJ1xuJykgeworCQlpb2RjX2RidWZbaSswXSA9ICdccic7CisJCWlvZGNfZGJ1ZltpKzFdID0gJ1xuJzsKKwl9CisKK3ByaW50OgogICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmcGRjX2xvY2ssIGZsYWdzKTsKICAgICAgICAgcmVhbDMyX2NhbGwoUEFHRTAtPm1lbV9jb25zLmlvZGNfaW8sCiAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKVBBR0UwLT5tZW1fY29ucy5ocGEsIEVOVFJZX0lPX0NPVVQsCkBAIC0xMTQyLDExICsxMTUxLDkgQEAKICAqLwogaW50IHBkY19pb2RjX2dldGModm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotICAgICAgICBzdGF0aWMgaW50IF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKSAgIGlvZGNfcmV0YnVmWzMyXTsKLSAgICAgICAgc3RhdGljIGNoYXIgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg2NCkpKSBpb2RjX2RidWZbNDA5Nl07CiAJaW50IGNoOwogCWludCBzdGF0dXM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCS8qIEJhaWwgaWYgbm8gY29uc29sZSBpbnB1dCBkZXZpY2UuICovCiAJaWYgKCFQQUdFMC0+bWVtX2tiZC5pb2RjX2lvKQpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL2hhcmR3YXJlLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvaGFyZHdhcmUuYwppbmRleCA4NGI5NjExLi5mNDhhNjQwIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvaGFyZHdhcmUuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvaGFyZHdhcmUuYwpAQCAtMjc0LDcgKzI3NCwxOCBAQAogCXtIUEhXX05QUk9DLDB4ODg3LDB4NCwweDkxLCJTdG9ybSBQZWFrIFNsb3cifSwKIAl7SFBIV19OUFJPQywweDg4OCwweDQsMHg5MSwiU3Rvcm0gUGVhayBGYXN0IERDLSJ9LAogCXtIUEhXX05QUk9DLDB4ODg5LDB4NCwweDkxLCJTdG9ybSBQZWFrIEZhc3QifSwKLQl7SFBIV19OUFJPQywweDg4QSwweDQsMHg5MSwiQ3Jlc3RvbmUgUGVhayJ9LAorCXtIUEhXX05QUk9DLDB4ODhBLDB4NCwweDkxLCJDcmVzdG9uZSBQZWFrIFNsb3cifSwKKwl7SFBIV19OUFJPQywweDg4QywweDQsMHg5MSwiT3JjYSBNYWtvKyJ9LAorCXtIUEhXX05QUk9DLDB4ODhELDB4NCwweDkxLCJSYWluaWVyL01lZGVsIE1ha28rIFNsb3cifSwKKwl7SFBIV19OUFJPQywweDg4RSwweDQsMHg5MSwiUmFpbmllci9NZWRlbCBNYWtvKyBGYXN0In0sCisJe0hQSFdfTlBST0MsMHg4OTQsMHg0LDB4OTEsIk10LiBIYW1pbHRvbiBGYXN0IE1ha28rIn0sCisJe0hQSFdfTlBST0MsMHg4OTUsMHg0LDB4OTEsIlN0b3JtIFBlYWsgU2xvdyBNYWtvKyJ9LAorCXtIUEhXX05QUk9DLDB4ODk2LDB4NCwweDkxLCJTdG9ybSBQZWFrIEZhc3QgTWFrbysifSwKKwl7SFBIV19OUFJPQywweDg5NywweDQsMHg5MSwiU3Rvcm0gUGVhayBEQy0gU2xvdyBNYWtvKyJ9LAorCXtIUEhXX05QUk9DLDB4ODk4LDB4NCwweDkxLCJTdG9ybSBQZWFrIERDLSBGYXN0IE1ha28rIn0sCisJe0hQSFdfTlBST0MsMHg4OTksMHg0LDB4OTEsIk10LiBIYW1pbHRvbiBTbG93IE1ha28rIn0sCisJe0hQSFdfTlBST0MsMHg4OUIsMHg0LDB4OTEsIkNyZXN0b25lIFBlYWsgTWFrbysgU2xvdyJ9LAorCXtIUEhXX05QUk9DLDB4ODlDLDB4NCwweDkxLCJDcmVzdG9uZSBQZWFrIE1ha28rIEZhc3QifSwKIAl7SFBIV19BX0RJUkVDVCwgMHgwMDQsIDB4MDAwMEQsIDB4MDAsICJBcnJha2lzIE1VWCJ9LCAKIAl7SFBIV19BX0RJUkVDVCwgMHgwMDUsIDB4MDAwMEQsIDB4MDAsICJEeXVuIEtpdWggTVVYIn0sIAogCXtIUEhXX0FfRElSRUNULCAweDAwNiwgMHgwMDAwRCwgMHgwMCwgIkJhYXQgS2l1aCBBUC9NVVggKDQwMjk5QikifSwgCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvaGVhZC5TIGIvYXJjaC9wYXJpc2Mva2VybmVsL2hlYWQuUwppbmRleCBhN2I4ODU5Li5lYzI0ODJkIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvaGVhZC5TCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9oZWFkLlMKQEAgLTIwLDEwICsyMCwxMSBAQAogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCiAJLmxldmVsCUxFVkVMCiAKLQkuZGF0YQorCV9fSU5JVERBVEEKIEVOVFJZKGJvb3RfYXJncykKIAkud29yZCAwIC8qIGFyZzAgKi8KIAkud29yZCAwIC8qIGFyZzEgKi8KQEAgLTMxLDcgKzMyLDcgQEAKIAkud29yZCAwIC8qIGFyZzMgKi8KIEVORChib290X2FyZ3MpCiAKLQkudGV4dAorCS5zZWN0aW9uIC50ZXh0LmhlYWQKIAkuYWxpZ24JNAogCS5pbXBvcnQgaW5pdF90aHJlYWRfdW5pb24sZGF0YQogCS5pbXBvcnQgZmF1bHRfdmVjdG9yXzIwLGNvZGUgICAgLyogSVZBIHBhcmlzYyAyLjAgMzIgYml0ICovCkBAIC0zNDMsNyArMzQ0LDcgQEAKIEVORFBST0Moc3RleHQpCiAKICNpZm5kZWYgQ09ORklHXzY0QklUCi0JLmRhdGEKKwkuc2VjdGlvbiAuZGF0YS5yZWFkX21vc3RseQogCiAJLmFsaWduCTQKIAkuZXhwb3J0CSRnbG9iYWwkLGRhdGEKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9wZGNfY29ucy5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL3BkY19jb25zLmMKaW5kZXggMzNiMWY4NC4uY2NiNjgwOSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3BkY19jb25zLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3BkY19jb25zLmMKQEAgLTUyLDI4ICs1MiwzMCBAQAogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgogI2luY2x1ZGUgPGFzbS9wZGMuaD4JCS8qIGZvciBpb2RjX2NhbGwoKSBwcm90byBhbmQgZnJpZW5kcyAqLwogCitzdGF0aWMgc3BpbmxvY2tfdCBwZGNfY29uc29sZV9sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEOwogCiBzdGF0aWMgdm9pZCBwZGNfY29uc29sZV93cml0ZShzdHJ1Y3QgY29uc29sZSAqY28sIGNvbnN0IGNoYXIgKnMsIHVuc2lnbmVkIGNvdW50KQogewotCXBkY19pb2RjX3ByaW50KHMsIGNvdW50KTsKLX0KKwlpbnQgaSA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotdm9pZCBwZGNfcHJpbnRmKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQotewotCXZhX2xpc3QgYXJnczsKLQljaGFyIGJ1ZlsxMDI0XTsKLQlpbnQgaSwgbGVuOwotCi0JdmFfc3RhcnQoYXJncywgZm10KTsKLQlsZW4gPSB2c2NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZtdCwgYXJncyk7Ci0JdmFfZW5kKGFyZ3MpOwotCi0JcGRjX2lvZGNfcHJpbnQoYnVmLCBsZW4pOworCXNwaW5fbG9ja19pcnFzYXZlKCZwZGNfY29uc29sZV9sb2NrLCBmbGFncyk7CisJZG8geworCQlpICs9IHBkY19pb2RjX3ByaW50KHMgKyBpLCBjb3VudCAtIGkpOworCX0gd2hpbGUgKGkgPCBjb3VudCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGRjX2NvbnNvbGVfbG9jaywgZmxhZ3MpOwogfQogCiBpbnQgcGRjX2NvbnNvbGVfcG9sbF9rZXkoc3RydWN0IGNvbnNvbGUgKmNvKQogewotCXJldHVybiBwZGNfaW9kY19nZXRjKCk7CisJaW50IGM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwZGNfY29uc29sZV9sb2NrLCBmbGFncyk7CisJYyA9IHBkY19pb2RjX2dldGMoKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZGNfY29uc29sZV9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gYzsKIH0KIAogc3RhdGljIGludCBwZGNfY29uc29sZV9zZXR1cChzdHJ1Y3QgY29uc29sZSAqY28sIGNoYXIgKm9wdGlvbnMpCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbF90YWJsZS5TIGIvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGxfdGFibGUuUwppbmRleCAxMTc0MzhlLi42YjVhYzM4IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbF90YWJsZS5TCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMKQEAgLTQwMSw5ICs0MDEsMTIgQEAKIAlFTlRSWV9DT01QKGtleGVjX2xvYWQpCQkvKiAzMDAgKi8KIAlFTlRSWV9DT01QKHV0aW1lbnNhdCkKIAlFTlRSWV9DT01QKHNpZ25hbGZkKQotCUVOVFJZX0NPTVAodGltZXJmZCkKKwlFTlRSWV9TQU1FKG5pX3N5c2NhbGwpCQkvKiB3YXMgdGltZXJmZCAqLwogCUVOVFJZX1NBTUUoZXZlbnRmZCkKIAlFTlRSWV9DT01QKGZhbGxvY2F0ZSkJCS8qIDMwNSAqLworCUVOVFJZX1NBTUUodGltZXJmZF9jcmVhdGUpCisJRU5UUllfQ09NUCh0aW1lcmZkX3NldHRpbWUpCisJRU5UUllfQ09NUCh0aW1lcmZkX2dldHRpbWUpCiAKIAkvKiBOb3RoaW5nIHlldCAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC90cmFwcy5jCmluZGV4IDk5ZmQ1NjkuLjlkYzZkYzQgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC90cmFwcy5jCkBAIC01MSw2ICs1MSw5IEBACiBERUZJTkVfU1BJTkxPQ0socGFfZGJpdF9sb2NrKTsKICNlbmRpZgogCit2b2lkIHBhcmlzY19zaG93X3N0YWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwgdW5zaWduZWQgbG9uZyAqc3AsCisJc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCiBzdGF0aWMgaW50IHByaW50YmluYXJ5KGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyB4LCBpbnQgbmJpdHMpCiB7CiAJdW5zaWduZWQgbG9uZyBtYXNrID0gMVVMIDw8IChuYml0cyAtIDEpOwpAQCAtMTQ4LDYgKzE1MSw4IEBACiAJcHJpbnRfc3ltYm9sKCIgSUFPUVsxXTogJXNcbiIsIHJlZ3MtPmlhb3FbMV0pOwogCXByaW50ayhsZXZlbCk7CiAJcHJpbnRfc3ltYm9sKCIgUlAocjIpOiAlc1xuIiwgcmVncy0+Z3JbMl0pOworCisJcGFyaXNjX3Nob3dfc3RhY2soY3VycmVudCwgTlVMTCwgcmVncyk7CiB9CiAKIApAQCAtMTgxLDExICsxODYsMTkgQEAKIAlwcmludGsoIlxuIik7CiB9CiAKLXZvaWQgc2hvd19zdGFjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHVuc2lnbmVkIGxvbmcgKnMpCit2b2lkIHBhcmlzY19zaG93X3N0YWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdW5zaWduZWQgbG9uZyAqc3AsCisJc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IHVud2luZF9mcmFtZV9pbmZvIGluZm87CisJc3RydWN0IHRhc2tfc3RydWN0ICp0OwogCi0JaWYgKCF0YXNrKSB7CisJdCA9IHRhc2sgPyB0YXNrIDogY3VycmVudDsKKwlpZiAocmVncykgeworCQl1bndpbmRfZnJhbWVfaW5pdCgmaW5mbywgdCwgcmVncyk7CisJCWdvdG8gc2hvd19zdGFjazsKKwl9CisKKwlpZiAodCA9PSBjdXJyZW50KSB7CiAJCXVuc2lnbmVkIGxvbmcgc3A7CiAKIEhFUkU6CkBAIC0yMDEsMTIgKzIxNCwxOCBAQAogCQkJdW53aW5kX2ZyYW1lX2luaXQoJmluZm8sIGN1cnJlbnQsICZyKTsKIAkJfQogCX0gZWxzZSB7Ci0JCXVud2luZF9mcmFtZV9pbml0X2Zyb21fYmxvY2tlZF90YXNrKCZpbmZvLCB0YXNrKTsKKwkJdW53aW5kX2ZyYW1lX2luaXRfZnJvbV9ibG9ja2VkX3Rhc2soJmluZm8sIHQpOwogCX0KIAorc2hvd19zdGFjazoKIAlkb19zaG93X3N0YWNrKCZpbmZvKTsKIH0KIAordm9pZCBzaG93X3N0YWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwgdW5zaWduZWQgbG9uZyAqc3ApCit7CisJcmV0dXJuIHBhcmlzY19zaG93X3N0YWNrKHQsIHNwLCBOVUxMKTsKK30KKwogaW50IGlzX3ZhbGlkX2J1Z2FkZHIodW5zaWduZWQgbG9uZyBpYW9xKQogewogCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvYm9vdC9NYWtlZmlsZQppbmRleCA0OTc0ZDllLi4xYWRlZDhmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9NYWtlZmlsZQpAQCAtMjUzLDggKzI1Myw4IEBACiBpbWFnZS0kKENPTkZJR19UUU04NTQxKQkJCSs9IGN1SW1hZ2UudHFtODU0MQogaW1hZ2UtJChDT05GSUdfVFFNODU1NSkJCQkrPSBjdUltYWdlLnRxbTg1NTUKIGltYWdlLSQoQ09ORklHX1RRTTg1NjApCQkJKz0gY3VJbWFnZS50cW04NTYwCi1pbWFnZS0kKENPTkZJR19TQkM4NTQ4KQkJCSs9IGN1SW1hZ2UudHFtODU0OAotaW1hZ2UtJChDT05GSUdfU0JDODU2MCkJCQkrPSBjdUltYWdlLnRxbTg1NjAKK2ltYWdlLSQoQ09ORklHX1NCQzg1NDgpCQkJKz0gY3VJbWFnZS5zYmM4NTQ4CitpbWFnZS0kKENPTkZJR19TQkM4NTYwKQkJCSs9IGN1SW1hZ2Uuc2JjODU2MAogCiAjIEJvYXJkIHBvcnRzIGluIGFyY2gvcG93ZXJwYy9wbGF0Zm9ybS9lbWJlZGRlZDZ4eC9LY29uZmlnCiBpbWFnZS0kKENPTkZJR19TVE9SQ0VOVEVSKQkJKz0gY3VJbWFnZS5zdG9yY2VudGVyCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC93cmFwcGVyIGIvYXJjaC9wb3dlcnBjL2Jvb3Qvd3JhcHBlcgppbmRleCBkNTBlNDk4Li44ZjhiODQ5IDEwMDc1NQotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC93cmFwcGVyCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L3dyYXBwZXIKQEAgLTE3NCwxMCArMTc0LDEwIEBACiAgICAgKi1tcGM4MyopCiAgICAgICAgIHBsYXRmb3Jtbz0kb2JqZWN0L2N1Ym9vdC04M3h4Lm8KICAgICAgICAgOzsKLSAgICAqLXRxbTg1NDF8Ki1tcGM4NTYwKnwqLXRxbTg1NjB8Ki10cW04NTU1KikKKyAgICAqLXRxbTg1NDF8Ki1tcGM4NTYwKnwqLXRxbTg1NjB8Ki10cW04NTU1KQogICAgICAgICBwbGF0Zm9ybW89JG9iamVjdC9jdWJvb3QtODV4eC1jcG0yLm8KICAgICAgICAgOzsKLSAgICAqLW1wYzg1KikKKyAgICAqLW1wYzg1KnwqLXRxbTg1NDB8Ki1zYmM4NSopCiAgICAgICAgIHBsYXRmb3Jtbz0kb2JqZWN0L2N1Ym9vdC04NXh4Lm8KICAgICAgICAgOzsKICAgICBlc2FjCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9jZWxsX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2NlbGxfZGVmY29uZmlnCmluZGV4IGYzYmRlOGMuLmM0MjBlNDcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2NlbGxfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2NlbGxfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI0LXJjNAotIyBUaHUgRGVjICA2IDE2OjQ4OjA1IDIwMDcKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNS1yYzYKKyMgVGh1IE1hciAyMCAxMDozMTowNCAyMDA4CiAjCiBDT05GSUdfUFBDNjQ9eQogCkBAIC0yOCw2ICsyOCw3IEBACiBDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQT15CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQpAQCAtNjksOCArNzAsNiBAQAogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CkBAIC03OSwxMyArNzgsMjAgQEAKICMgQ09ORklHX0NHUk9VUF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19DR1JPVVBfTlMgaXMgbm90IHNldAogQ09ORklHX0NQVVNFVFM9eQotQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQotQ09ORklHX0ZBSVJfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19GQUlSX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VSX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19DR1JPVVBfQ1BVQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19SRVNPVVJDRV9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiBDT05GSUdfUFJPQ19QSURfQ1BVU0VUPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19OQU1FU1BBQ0VTPXkKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19QSURfTlMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQpAQCAtOTksMTEgKzEwNSwxMyBAQAogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CisjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQpAQCAtMTExLDYgKzExOSwxNSBAQAogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9GSUxJTkc9eQorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfT1BST0ZJTEU9bQorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKQEAgLTEzOCw2ICsxNTUsNyBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CiAKICMKICMgUGxhdGZvcm0gc3VwcG9ydApAQCAtMTQ4LDggKzE2Niw4IEBACiAjIENPTkZJR19QUENfODZ4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfUFNFUklFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfSVNFUklFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTEyeCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTEyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfTUFQTEUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BBU0VNSSBpcyBub3Qgc2V0CkBAIC0xNjIsMTQgKzE4MCwxNCBAQAogIyBDT05GSUdfUFMzX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19QUzNfSFRBQl9TSVpFPTIwCiAjIENPTkZJR19QUzNfRFlOQU1JQ19ETUEgaXMgbm90IHNldAotQ09ORklHX1BTM19VU0VfTFBBUl9BRERSPXkKIENPTkZJR19QUzNfVlVBUlQ9eQogQ09ORklHX1BTM19QUzNBVj15Ci1DT05GSUdfUFMzX1NZU19NQU5BR0VSPW0KK0NPTkZJR19QUzNfU1lTX01BTkFHRVI9eQogQ09ORklHX1BTM19TVE9SQUdFPXkKIENPTkZJR19QUzNfRElTSz15CiBDT05GSUdfUFMzX1JPTT1tCiBDT05GSUdfUFMzX0ZMQVNIPW0KK0NPTkZJR19QUzNfTFBNPW0KIENPTkZJR19QUENfQ0VMTD15CiBDT05GSUdfUFBDX0NFTExfTkFUSVZFPXkKIENPTkZJR19QUENfSUJNX0NFTExfQkxBREU9eQpAQCAtMTgzLDEwICsyMDEsMTIgQEAKIENPTkZJR19DQkVfVEhFUk09bQogQ09ORklHX0NCRV9DUFVGUkVRPW0KIENPTkZJR19DQkVfQ1BVRlJFUV9QTUk9bQorQ09ORklHX09QUk9GSUxFX0NFTEw9eQogIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKIENPTkZJR19QUENfTkFUSVZFPXkKIENPTkZJR19VREJHX1JUQVNfQ09OU09MRT15CiBDT05GSUdfUFBDX1VEQkdfQkVBVD15CisjIENPTkZJR19JUElDIGlzIG5vdCBzZXQKIENPTkZJR19NUElDPXkKICMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKQEAgLTIxOSw3ICsyMzksNiBAQAogIwogIyBDUFUgRnJlcXVlbmN5IGRyaXZlcnMKICMKLSMgQ09ORklHX0NQTTIgaXMgbm90IHNldAogQ09ORklHX0FYT05fUkFNPW0KICMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKIApAQCAtMjM1LDE2ICsyNTQsMjAgQEAKICMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKIENPTkZJR19IWj0yNTAKKyMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX1BSRUVNUFRfQktMPXkKIENPTkZJR19CSU5GTVRfRUxGPXkKK0NPTkZJR19DT01QQVRfQklORk1UX0VMRj15CiBDT05GSUdfQklORk1UX01JU0M9bQogQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9OQogQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFPXkKICMgQ09ORklHX0lPTU1VX1ZNRVJHRSBpcyBub3Qgc2V0CitDT05GSUdfSU9NTVVfSEVMUEVSPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX0FMTF9DUFVTPXkKQEAgLTI2Nyw2ICsyOTAsNyBAQAogQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQPXkKIENPTkZJR19NRU1PUllfSE9UUExVRz15CiBDT05GSUdfTUVNT1JZX0hPVFBMVUdfU1BBUlNFPXkKK0NPTkZJR19NRU1PUllfSE9UUkVNT1ZFPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiBDT05GSUdfTUlHUkFUSU9OPXkKIENPTkZJR19SRVNPVVJDRVNfNjRCSVQ9eQpAQCAtMjc2LDEyICszMDAsMTIgQEAKIENPTkZJR19OT0RFU19TUEFOX09USEVSX05PREVTPXkKIENPTkZJR19QUENfSEFTX0hBU0hfNjRLPXkKIENPTkZJR19QUENfNjRLX1BBR0VTPXkKKyMgQ09ORklHX1BQQ19TVUJQQUdFX1BST1QgaXMgbm90IHNldAogQ09ORklHX1NDSEVEX1NNVD15CiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKICMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTSBpcyBub3Qgc2V0CiBDT05GSUdfU0VDQ09NUD15Ci0jIENPTkZJR19XQU5UX0RFVklDRV9UUkVFIGlzIG5vdCBzZXQKIENPTkZJR19JU0FfRE1BX0FQST15CiAKICMKQEAgLTMxOCw2ICszNDIsNyBAQAogIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15CkBAIC0zNjgsNiArMzkzLDcgQEAKICMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSPXkKICMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX0FEVkFOQ0VEPXkKIAogIwogIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCkBAIC0zNzUsNyArNDAxLDYgQEAKIENPTkZJR19ORVRGSUxURVJfTkVUTElOSz1tCiBDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUU9bQogQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCi0jIENPTkZJR19ORl9DT05OVFJBQ0tfRU5BQkxFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORl9DT05OVFJBQ0sgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZPW0KQEAgLTM4MywyMCArNDA4LDI1IEBACiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9NQVJLPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUU9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZMT0c9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfUkFURUVTVD1tCiAjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BPUFRTVFJJUD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRFNDUD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0lQUkFOR0U9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEg9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQz1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9PV05FUj1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01VTFRJUE9SVD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JBVEVFU1Q9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFA9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFUSVNUSUM9bQpAQCAtNDExLDIwICs0NDEsMTYgQEAKICMKIENPTkZJR19JUF9ORl9RVUVVRT1tCiBDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQotQ09ORklHX0lQX05GX01BVENIX0lQUkFOR0U9bQotQ09ORklHX0lQX05GX01BVENIX1RPUz1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfUkVDRU5UPW0KIENPTkZJR19JUF9ORl9NQVRDSF9FQ049bQogQ09ORklHX0lQX05GX01BVENIX0FIPW0KIENPTkZJR19JUF9ORl9NQVRDSF9UVEw9bQotQ09ORklHX0lQX05GX01BVENIX09XTkVSPW0KIENPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRT1tCiBDT05GSUdfSVBfTkZfRklMVEVSPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfVUxPRz1tCiBDT05GSUdfSVBfTkZfTUFOR0xFPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfVE9TPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfRUNOPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfVFRMPW0KIENPTkZJR19JUF9ORl9SQVc9bQpAQCAtNDMzLDcgKzQ1OSw3IEBACiBDT05GSUdfSVBfTkZfQVJQX01BTkdMRT1tCiAKICMKLSMgSVB2NjogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMgSVB2NjogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KICMKICMgQ09ORklHX0lQNl9ORl9RVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JUDZfTkZfSVBUQUJMRVMgaXMgbm90IHNldApAQCAtNDU5LDYgKzQ4NSw3IEBACiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKQEAgLTQ2Nyw3ICs0OTQsNyBAQAogIyBXaXJlbGVzcwogIwogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTU19FWFQ9eQogIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CkBAIC01MDUsNyArNTMyLDcgQEAKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTEzMTA3MgotQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKQEAgLTUxMywxMSArNTQwLDEzIEBACiAjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAogIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQogQ09ORklHX0lERT15CiBDT05GSUdfQkxLX0RFVl9JREU9eQogCiAjCi0jIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcworIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCiAjCiAjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERURJU0s9eQpAQCAtNTM0LDEyICs1NjMsMTIgQEAKICMKIENPTkZJR19JREVfR0VORVJJQz15CiAjIENPTkZJR19CTEtfREVWX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURNQV9TRkY9eQogCiAjCiAjIFBDSSBJREUgY2hpcHNldHMgc3VwcG9ydAogIwogQ09ORklHX0JMS19ERVZfSURFUENJPXkKLUNPTkZJR19JREVQQ0lfU0hBUkVfSVJRPXkKIENPTkZJR19JREVQQ0lfUENJQlVTX09SREVSPXkKICMgQ09ORklHX0JMS19ERVZfT0ZGQk9BUkQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfR0VORVJJQz15CkBAIC01NzEsNyArNjAwLDYgQEAKICMgQ09ORklHX0JMS19ERVZfVklBODJDWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVEM4NkMwMDEgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfQ0VMTEVCPXkKLSMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFRE1BPXkKIENPTkZJR19JREVfQVJDSF9PQlNPTEVURV9JTklUPXkKICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldApAQCAtNjM3LDYgKzY2NSw3IEBACiAjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0CkBAIC02ODksNiArNzE4LDcgQEAKICMgQ09ORklHX1BBVEFfTVBJSVggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9PTERQSUlYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfTkVUQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05JTkpBMzIgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9OUzg3NDEwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfTlM4NzQxNSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX09QVEkgaXMgbm90IHNldApAQCAtNzAzLDYgKzczMyw3IEBACiAjIENPTkZJR19QQVRBX1NJUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1ZJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1dJTkJPTkQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QTEFURk9STSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDQyBpcyBub3Qgc2V0CiBDT05GSUdfTUQ9eQogQ09ORklHX0JMS19ERVZfTUQ9bQpAQCAtNzQ4LDcgKzc3OSw2IEBACiAjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAogQ09ORklHX1RVTj15CiAjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAogIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQpAQCAtNzczLDYgKzgwMyw5IEBACiBDT05GSUdfRTEwMDBfTkFQST15CiAjIENPTkZJR19FMTAwMF9ESVNBQkxFX1BBQ0tFVF9TUExJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDBFX0VOQUJMRUQgaXMgbm90IHNldAorIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAogIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKQEAgLTc4OCw2ICs4MjEsNyBAQAogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CiBDT05GSUdfU1BJREVSX05FVD15CiBDT05GSUdfR0VMSUNfTkVUPW0KK0NPTkZJR19HRUxJQ19XSVJFTEVTUz15CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwMD15CkBAIC04MDIsNiArODM2LDcgQEAKICMgQ09ORklHX1BBU0VNSV9NQUMgaXMgbm90IHNldAogIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0CiAKICMKQEAgLTgyNCw3ICs4NTksNiBAQAogIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CkBAIC04ODMsMTYgKzkxNywxNyBAQAogIyBDT05GSUdfRElHSUVQQ0EgaXMgbm90IHNldAogIyBDT05GSUdfTU9YQV9JTlRFTExJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1hBX1NNQVJUSU8gaXMgbm90IHNldAotIyBDT05GSUdfTU9YQV9TTUFSVElPX05FVyBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0kgaXMgbm90IHNldAogIyBDT05GSUdfU1lOQ0xJTksgaXMgbm90IHNldAogIyBDT05GSUdfU1lOQ0xJTktNUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TWU5DTElOS19HVCBpcyBub3Qgc2V0CiAjIENPTkZJR19OX0hETEMgaXMgbm90IHNldAorIyBDT05GSUdfUklTQ09NOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEVDSUFMSVggaXMgbm90IHNldAogIyBDT05GSUdfU1ggaXMgbm90IHNldAogIyBDT05GSUdfUklPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUxEUlYgaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKIAogIwogIyBTZXJpYWwgZHJpdmVycwpAQCAtOTc2LDEzICsxMDExLDEyIEBACiAjCiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwotIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRUVQUk9NIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAorIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CkBAIC05OTgsNiArMTAzMiw3IEBACiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC0xMDgyLDYgKzExMTcsNyBAQAogQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKIENPTkZJR19VU0I9bQogIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwpAQCAtMTA5NSwxMCArMTEzMSwxMCBAQAogIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKICMKIENPTkZJR19VU0JfRUhDSV9IQ0Q9bQotIyBDT05GSUdfVVNCX0VIQ0lfU1BMSVRfSVNPIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRUhDSV9CSUdfRU5ESUFOX01NSU89eQorIyBDT05GSUdfVVNCX0VIQ0lfSENEX1BQQ19PRiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD1tCiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRj15CkBAIC0xMTQ5LDEwICsxMTg1LDYgQEAKICMKICMgVVNCIHBvcnQgZHJpdmVycwogIwotCi0jCi0jIFVTQiBTZXJpYWwgQ29udmVydGVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAogCiAjCkBAIC0xMTc4LDE2ICsxMjEwLDkgQEAKICMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRFNMIG1vZGVtIHN1cHBvcnQKLSMKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKIENPTkZJR19JTkZJTklCQU5EPW0KIENPTkZJR19JTkZJTklCQU5EX1VTRVJfTUFEPW0KQEAgLTExOTgsNiArMTIyMyw3IEBACiBDT05GSUdfSU5GSU5JQkFORF9NVEhDQV9ERUJVRz15CiAjIENPTkZJR19JTkZJTklCQU5EX0FNU08xMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01MWDRfSU5GSU5JQkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZJTklCQU5EX05FUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5GSU5JQkFORF9JUE9JQj1tCiAjIENPTkZJR19JTkZJTklCQU5EX0lQT0lCX0NNIGlzIG5vdCBzZXQKIENPTkZJR19JTkZJTklCQU5EX0lQT0lCX0RFQlVHPXkKQEAgLTEyMTEsNyArMTIzNyw5IEBACiAjCiAjIENPTkZJR19FREFDX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19FREFDX01NX0VEQUM9eQorQ09ORklHX0VEQUNfQ0VMTD15CiAjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlcnNwYWNlIEkvTwpAQCAtMTIzOSwxMiArMTI2NywxMCBAQAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0FVVE9GUzRfRlM9bQogIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CkBAIC0xMjkzLDggKzEzMTksMTAgQEAKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CkBAIC0xMzgyLDcgKzE0MTAsNiBAQAogIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CiAjIENPTkZJR19ETE0gaXMgbm90IHNldAotIyBDT05GSUdfVUNDX1NMT1cgaXMgbm90IHNldAogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKQEAgLTE0MDQsMTEgKzE0MzEsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfSU5TVFJVTUVOVEFUSU9OPXkKLUNPTkZJR19QUk9GSUxJTkc9eQotQ09ORklHX09QUk9GSUxFPW0KLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiAKICMKICMgS2VybmVsIGhhY2tpbmcKQEAgLTE0MjcsNiArMTQ0OSw3IEBACiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC0xNDM5LDkgKzE0NjIsOSBAQAogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT1JDRURfSU5MSU5JTkcgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldApAQCAtMTQ2NCw3ICsxNDg3LDkgQEAKICMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE89eQogQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BRUFEPW0KIENPTkZJR19DUllQVE9fQkxLQ0lQSEVSPW0KKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0hBU0g9eQogQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKIENPTkZJR19DUllQVE9fSE1BQz15CkBAIC0xNDgzLDYgKzE1MDgsOSBAQAogQ09ORklHX0NSWVBUT19QQ0JDPW0KICMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fREVTPW0KICMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldApAQCAtMTQ5NywxMSArMTUyNSwxNCBAQAogIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fREVGTEFURT1tCiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BVVRIRU5DPW0KKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19IVz15CisjIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvY2VsbGViX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2NlbGxlYl9kZWZjb25maWcKaW5kZXggOWVkMmUwOS4uOWJhM2M2ZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvY2VsbGViX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9jZWxsZWJfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI0LXJjNAotIyBUaHUgRGVjICA2IDE2OjQ4OjA3IDIwMDcKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNS1yYzYKKyMgVGh1IE1hciAyMCAxMDozMjo0NSAyMDA4CiAjCiBDT05GSUdfUFBDNjQ9eQogCkBAIC0yOCw2ICsyOCw3IEBACiBDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQT15CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQpAQCAtNjksMTYgKzcwLDIyIEBACiAjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE1CiAjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNFUl9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorQ09ORklHX05BTUVTUEFDRVM9eQorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CkBAIC05MiwxMSArOTksMTMgQEAKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQorIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKQEAgLTEwNCw2ICsxMTMsMTQgQEAKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtMTMxLDYgKzE0OCw3IEBACiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0NMQVNTSUNfUkNVPXkKIAogIwogIyBQbGF0Zm9ybSBzdXBwb3J0CkBAIC0xNDEsOCArMTU5LDggQEAKICMgQ09ORklHX1BQQ184Nnh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19QU0VSSUVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19JU0VSSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEM1MTJ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEM1MTIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19NQVBMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfUEFTRU1JIGlzIG5vdCBzZXQKQEAgLTE2NCw2ICsxODIsNyBAQAogQ09ORklHX1BQQ19OQVRJVkU9eQogQ09ORklHX1VEQkdfUlRBU19DT05TT0xFPXkKIENPTkZJR19QUENfVURCR19CRUFUPXkKKyMgQ09ORklHX0lQSUMgaXMgbm90IHNldAogQ09ORklHX01QSUM9eQogIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldApAQCAtMTc3LDcgKzE5Niw2IEBACiBDT05GSUdfUFBDX0lORElSRUNUX0lPPXkKIENPTkZJR19HRU5FUklDX0lPTUFQPXkKICMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQTTIgaXMgbm90IHNldAogIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAogCiAjCkBAIC0xOTIsMTYgKzIxMCwyMCBAQAogIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAogQ09ORklHX0haPTI1MAorIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfUFJFRU1QVF9CS0w9eQogQ09ORklHX0JJTkZNVF9FTEY9eQorQ09ORklHX0NPTVBBVF9CSU5GTVRfRUxGPXkKIENPTkZJR19CSU5GTVRfTUlTQz1tCiBDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMwogQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFPXkKICMgQ09ORklHX0lPTU1VX1ZNRVJHRSBpcyBub3Qgc2V0CitDT05GSUdfSU9NTVVfSEVMUEVSPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogQ09ORklHX0tFWEVDPXkKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAogIyBDT05GSUdfSVJRX0FMTF9DUFVTIGlzIG5vdCBzZXQKQEAgLTIyMyw2ICsyNDUsNyBAQAogQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQPXkKIENPTkZJR19NRU1PUllfSE9UUExVRz15CiBDT05GSUdfTUVNT1JZX0hPVFBMVUdfU1BBUlNFPXkKKyMgQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKIENPTkZJR19NSUdSQVRJT049eQogQ09ORklHX1JFU09VUkNFU182NEJJVD15CkBAIC0yMzcsNyArMjYwLDYgQEAKICMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTSBpcyBub3Qgc2V0CiBDT05GSUdfU0VDQ09NUD15Ci0jIENPTkZJR19XQU5UX0RFVklDRV9UUkVFIGlzIG5vdCBzZXQKIENPTkZJR19JU0FfRE1BX0FQST15CiAKICMKQEAgLTI3Myw2ICsyOTUsNyBAQAogIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15CkBAIC0zMjAsMTIgKzM0MywxMyBAQAogIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVI9eQogIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfQURWQU5DRUQ9eQogCiAjCiAjIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KICMKLSMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GX0NPTk5UUkFDS19FTkFCTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORl9DT05OVFJBQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSX1hUQUJMRVMgaXMgbm90IHNldAogCkBAIC0zMzcsNyArMzYxLDcgQEAKICMgQ09ORklHX0lQX05GX0FSUFRBQkxFUyBpcyBub3Qgc2V0CiAKICMKLSMgSVB2NjogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMgSVB2NjogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KICMKICMgQ09ORklHX0lQNl9ORl9RVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JUDZfTkZfSVBUQUJMRVMgaXMgbm90IHNldApAQCAtMzYyLDYgKzM4Niw3IEBACiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKQEAgLTQwOCw3ICs0MzMsNyBAQAogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTMxMDcyCi1DT05GSUdfQkxLX0RFVl9SQU1fQkxPQ0tTSVpFPTEwMjQKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQpAQCAtNDE2LDE2ICs0NDEsMTkgQEAKICMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CiAjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CiBDT05GSUdfSURFPXkKIENPTkZJR19CTEtfREVWX0lERT15CiAKICMKLSMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCisjIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKICMKICMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFRElTSz15CiBDT05GSUdfSURFRElTS19NVUxUSV9NT0RFPXkKIENPTkZJR19CTEtfREVWX0lERUNEPW0KK0NPTkZJR19CTEtfREVWX0lERUNEX1ZFUkJPU0VfRVJST1JTPXkKICMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lERUZMT1BQWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lERVNDU0kgaXMgbm90IHNldApAQCAtNDM3LDEyICs0NjUsMTIgQEAKICMKIENPTkZJR19JREVfR0VORVJJQz15CiAjIENPTkZJR19CTEtfREVWX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURNQV9TRkY9eQogCiAjCiAjIFBDSSBJREUgY2hpcHNldHMgc3VwcG9ydAogIwogQ09ORklHX0JMS19ERVZfSURFUENJPXkKLUNPTkZJR19JREVQQ0lfU0hBUkVfSVJRPXkKIENPTkZJR19JREVQQ0lfUENJQlVTX09SREVSPXkKICMgQ09ORklHX0JMS19ERVZfT0ZGQk9BUkQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfR0VORVJJQz15CkBAIC00NzQsNyArNTAyLDYgQEAKICMgQ09ORklHX0JMS19ERVZfVklBODJDWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVEM4NkMwMDEgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfQ0VMTEVCPXkKLSMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFRE1BPXkKIENPTkZJR19JREVfQVJDSF9PQlNPTEVURV9JTklUPXkKICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldApAQCAtNTQwLDYgKzU2Nyw3IEBACiAjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKQEAgLTU4OSw3ICs2MTcsNiBAQAogIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CiAjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAogIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQpAQCAtNjEyLDYgKzYzOSw5IEBACiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKICMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMEVfRU5BQkxFRCBpcyBub3Qgc2V0CisjIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKICMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAogIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CiAjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldApAQCAtNjM4LDYgKzY2OCw3IEBACiAjIENPTkZJR19QQVNFTUlfTUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19URUhVVEkgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAogCiAjCkBAIC02NjAsNyArNjkxLDYgQEAKICMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldApAQCAtNzE5LDE2ICs3NDksMTcgQEAKICMgQ09ORklHX0RJR0lFUENBIGlzIG5vdCBzZXQKICMgQ09ORklHX01PWEFfSU5URUxMSU8gaXMgbm90IHNldAogIyBDT05GSUdfTU9YQV9TTUFSVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PWEFfU01BUlRJT19ORVcgaXMgbm90IHNldAogIyBDT05GSUdfSVNJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZTkNMSU5LIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZTkNMSU5LTVAgaXMgbm90IHNldAogIyBDT05GSUdfU1lOQ0xJTktfR1QgaXMgbm90IHNldAogIyBDT05GSUdfTl9IRExDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JJU0NPTTggaXMgbm90IHNldAogIyBDT05GSUdfU1BFQ0lBTElYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFMRFJWIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CiAKICMKICMgU2VyaWFsIGRyaXZlcnMKQEAgLTgwMiwxMyArODMzLDEyIEBACiAjCiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwotIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRUVQUk9NIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAorIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CkBAIC04MjQsNiArODU0LDcgQEAKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTkwNSw2ICs5MzYsNyBAQAogQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKIENPTkZJR19VU0I9eQogIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwpAQCAtOTE4LDEwICs5NTAsMTAgQEAKICMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCiBDT05GSUdfVVNCX0VIQ0lfSENEPW0KLSMgQ09ORklHX1VTQl9FSENJX1NQTElUX0lTTyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VIQ0lfQklHX0VORElBTl9NTUlPPXkKKyMgQ09ORklHX1VTQl9FSENJX0hDRF9QUENfT0YgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9bQogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRiBpcyBub3Qgc2V0CkBAIC05NjksMTAgKzEwMDEsNiBAQAogIwogIyBVU0IgcG9ydCBkcml2ZXJzCiAjCi0KLSMKLSMgVVNCIFNlcmlhbCBDb252ZXJ0ZXIgc3VwcG9ydAotIwogIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CiAKICMKQEAgLTk5OCwyMCArMTAyNiwxNCBAQAogIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEU0wgbW9kZW0gc3VwcG9ydAotIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CiAjIENPTkZJR19FREFDIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKIAogIwogIyBVc2Vyc3BhY2UgSS9PCkBAIC0xMDQxLDEyICsxMDYzLDEwIEBACiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKICMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldApAQCAtMTA5NSw4ICsxMTE1LDEwIEBACiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQpAQCAtMTE4OCw3ICsxMjEwLDYgQEAKICMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAogIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VDQ19TTE9XIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCkBAIC0xMjA2LDEwICsxMjI3LDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQotQ09ORklHX0lOU1RSVU1FTlRBVElPTj15Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgaGFja2luZwpAQCAtMTIyOCw2ICsxMjQ1LDcgQEAKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKQEAgLTEyNDAsOSArMTI1OCw5IEBACiAjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPUkNFRF9JTkxJTklORyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CkBAIC0xMjY1LDcgKzEyODMsOSBAQAogIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUTz15CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FFQUQ9bQogQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fSEFTSD15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQogQ09ORklHX0NSWVBUT19ITUFDPXkKQEAgLTEyODQsNiArMTMwNCw5IEBACiBDT05GSUdfQ1JZUFRPX1BDQkM9bQogIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19ERVM9bQogIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CkBAIC0xMjk5LDExICsxMzIyLDEzIEBACiBDT05GSUdfQ1JZUFRPX0tIQVpBRD1tCiBDT05GSUdfQ1JZUFRPX0FOVUJJUz1tCiAjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQogQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCiBDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCiAjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19URVNUPW0KLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQVVUSEVOQz1tCisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvY2hycDMyX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2NocnAzMl9kZWZjb25maWcKaW5kZXggNTk4OWI1ZC4uMzhiODViMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvY2hycDMyX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9jaHJwMzJfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI0LXJjNAotIyBUaHUgRGVjICA2IDE2OjQ4OjA5IDIwMDcKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNS1yYzYKKyMgVGh1IE1hciAyMCAxMDozMzozNiAyMDA4CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTMwLDYgKzMwLDcgQEAKIENPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CiBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKQEAgLTY3LDE2ICs2OCwyMiBAQAogQ09ORklHX1BPU0lYX01RVUVVRT15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTUKICMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotIyBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VSX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CitDT05GSUdfTkFNRVNQQUNFUz15CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAorIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAorIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldApAQCAtOTAsMTEgKzk3LDEzIEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKKyMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CkBAIC0xMDIsNiArMTExLDE0IEBACiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKQEAgLTEzMCw2ICsxNDcsNyBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CiAKICMKICMgUGxhdGZvcm0gc3VwcG9ydApAQCAtMTQwLDE2ICsxNTgsMTcgQEAKICMgQ09ORklHX1BQQ184Nnh4IGlzIG5vdCBzZXQKIENPTkZJR19DTEFTU0lDMzI9eQogQ09ORklHX1BQQ19DSFJQPXkKKyMgQ09ORklHX1BQQ19NUEM1MTJ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEM1MTIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzUxMjFfQURTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FRklLQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTElURTUyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX05BVElWRT15CiAjIENPTkZJR19VREJHX1JUQVNfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUElDIGlzIG5vdCBzZXQKIENPTkZJR19NUElDPXkKICMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAogQ09ORklHX1BQQ19JODI1OT15CkBAIC0xNjMsNyArMTgyLDYgQEAKICMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAogIyBDT05GSUdfVEFVIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQTTIgaXMgbm90IHNldAogIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAogCiAjCkBAIC0xNzksMTMgKzE5NywxNiBAQAogIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAogQ09ORklHX0haPTI1MAorIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfUFJFRU1QVF9CS0w9eQogQ09ORklHX0JJTkZNVF9FTEY9eQogQ09ORklHX0JJTkZNVF9NSVNDPXkKKyMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfQUxMX0NQVVM9eQogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQpAQCAtMjA3LDcgKzIyOCw2IEBACiAjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAogIyBDT05GSUdfUE0gaXMgbm90IHNldAogQ09ORklHX1NFQ0NPTVA9eQotIyBDT05GSUdfV0FOVF9ERVZJQ0VfVFJFRSBpcyBub3Qgc2V0CiBDT05GSUdfSVNBX0RNQV9BUEk9eQogCiAjCkBAIC0yODYsNzQgKzMwNiwzMiBAQAogIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVI9eQogIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9BRFZBTkNFRCBpcyBub3Qgc2V0CiAKICMKICMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgogIwotIyBDT05GSUdfTkVURklMVEVSX05FVExJTksgaXMgbm90IHNldAotQ09ORklHX05GX0NPTk5UUkFDS19FTkFCTEVEPW0KK0NPTkZJR19ORVRGSUxURVJfTkVUTElOSz1tCitDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HPW0KIENPTkZJR19ORl9DT05OVFJBQ0s9bQotIyBDT05GSUdfTkZfQ1RfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORl9DT05OVFJBQ0tfTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORl9DT05OVFJBQ0tfRVZFTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GX0NUX1BST1RPX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfTkZfQ1RfUFJPVE9fVURQTElURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBIGlzIG5vdCBzZXQKIENPTkZJR19ORl9DT05OVFJBQ0tfRlRQPW0KLSMgQ09ORklHX05GX0NPTk5UUkFDS19IMzIzIGlzIG5vdCBzZXQKIENPTkZJR19ORl9DT05OVFJBQ0tfSVJDPW0KLSMgQ09ORklHX05GX0NPTk5UUkFDS19ORVRCSU9TX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GX0NPTk5UUkFDS19QUFRQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GX0NPTk5UUkFDS19TQU5FIGlzIG5vdCBzZXQKIENPTkZJR19ORl9DT05OVFJBQ0tfU0lQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfVEZUUD1tCitDT05GSUdfTkZfQ1RfTkVUTElOSz1tCiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZMT0cgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BNU1MgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5CWVRFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkxJTUlUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTUFSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EU0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hFTFBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRJU1RJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RSSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1MgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RJTUUgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1UzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUIGlzIG5vdCBzZXQKIAogIwogIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KICMKIENPTkZJR19ORl9DT05OVFJBQ0tfSVBWND1tCiBDT05GSUdfTkZfQ09OTlRSQUNLX1BST0NfQ09NUEFUPXkKLSMgQ09ORklHX0lQX05GX1FVRVVFIGlzIG5vdCBzZXQKIENPTkZJR19JUF9ORl9JUFRBQkxFUz1tCi0jIENPTkZJR19JUF9ORl9NQVRDSF9JUFJBTkdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX01BVENIX1RPUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9NQVRDSF9SRUNFTlQgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfTUFUQ0hfRUNOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX01BVENIX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX01BVENIX1RUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9NQVRDSF9PV05FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRSBpcyBub3Qgc2V0CiBDT05GSUdfSVBfTkZfRklMVEVSPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KQEAgLTM2MSwyMCArMzM5LDE0IEBACiBDT05GSUdfTkZfTkFUPW0KIENPTkZJR19ORl9OQVRfTkVFREVEPXkKIENPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX1JFRElSRUNUPW0KLSMgQ09ORklHX0lQX05GX1RBUkdFVF9ORVRNQVAgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfVEFSR0VUX1NBTUUgaXMgbm90IHNldAotIyBDT05GSUdfTkZfTkFUX1NOTVBfQkFTSUMgaXMgbm90IHNldAogQ09ORklHX05GX05BVF9GVFA9bQogQ09ORklHX05GX05BVF9JUkM9bQotQ09ORklHX05GX05BVF9URlRQPW0KKyMgQ09ORklHX05GX05BVF9URlRQIGlzIG5vdCBzZXQKICMgQ09ORklHX05GX05BVF9BTUFOREEgaXMgbm90IHNldAogIyBDT05GSUdfTkZfTkFUX1BQVFAgaXMgbm90IHNldAogIyBDT05GSUdfTkZfTkFUX0gzMjMgaXMgbm90IHNldAogQ09ORklHX05GX05BVF9TSVA9bQogIyBDT05GSUdfSVBfTkZfTUFOR0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX1JBVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldApAQCAtMzk2LDYgKzM2OCw3IEBACiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKQEAgLTQ0NSw3ICs0MTgsNyBAQAogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgotQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKQEAgLTQ1MywxNiArNDI2LDE5IEBACiAjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAogIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQogQ09ORklHX0lERT15CiBDT05GSUdfQkxLX0RFVl9JREU9eQogCiAjCi0jIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcworIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCiAjCiAjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERURJU0s9eQogQ09ORklHX0lERURJU0tfTVVMVElfTU9ERT15CiBDT05GSUdfQkxLX0RFVl9JREVDRD15CitDT05GSUdfQkxLX0RFVl9JREVDRF9WRVJCT1NFX0VSUk9SUz15CiAjIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JREVGTE9QUFkgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JREVTQ1NJIGlzIG5vdCBzZXQKQEAgLTQ3NCwxMiArNDUwLDEyIEBACiAjCiBDT05GSUdfSURFX0dFTkVSSUM9eQogIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVETUFfU0ZGPXkKIAogIwogIyBQQ0kgSURFIGNoaXBzZXRzIHN1cHBvcnQKICMKIENPTkZJR19CTEtfREVWX0lERVBDST15Ci1DT05GSUdfSURFUENJX1NIQVJFX0lSUT15CiBDT05GSUdfSURFUENJX1BDSUJVU19PUkRFUj15CiAjIENPTkZJR19CTEtfREVWX09GRkJPQVJEIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0dFTkVSSUM9eQpAQCAtNTEwLDcgKzQ4Niw2IEBACiAjIENPTkZJR19CTEtfREVWX1RSTTI5MCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9WSUE4MkNYWFg9eQogIyBDT05GSUdfQkxLX0RFVl9UQzg2QzAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKIAogIwogIyBPdGhlciBJREUgY2hpcHNldHMgc3VwcG9ydApAQCAtNTk5LDYgKzU3NCw3IEBACiAjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05DUjUzQzQwNkEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yPXkKQEAgLTYwNyw3ICs1ODMsNiBAQAogQ09ORklHX1NDU0lfU1lNNTNDOFhYX01BWF9UQUdTPTY0CiBDT05GSUdfU0NTSV9TWU01M0M4WFhfTU1JTz15CiAjIENPTkZJR19TQ1NJX1BBUzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUFNJMjQwSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMT0dJQ19GQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CkBAIC02NDAsNyArNjE1LDYgQEAKICMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UVU4gaXMgbm90IHNldAogIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKQEAgLTY4OCw2ICs2NjIsNyBAQAogIyBDT05GSUdfODEzOVRPT19UVU5FX1RXSVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfODEzOVRPT184MTI5IGlzIG5vdCBzZXQKICMgQ09ORklHXzgxMzlfT0xEX1JYX1JFU0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I2MDQwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKQEAgLTcwMSw2ICs2NzYsOSBAQAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CiAjIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDBFX0VOQUJMRUQgaXMgbm90IHNldAorIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAogIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKQEAgLTcyNiw2ICs3MDQsNyBAQAogIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKICMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19URUhVVEkgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAogCiAjCkBAIC03NTgsNyArNzM3LDYgQEAKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldAogQ09ORklHX1NMSEM9bQogIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CkBAIC04MzgsNiArODE2LDcgQEAKIENPTkZJR19IV19DT05TT0xFPXkKICMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKIAogIwogIyBTZXJpYWwgZHJpdmVycwpAQCAtOTE3LDE0ICs4OTYsMTIgQEAKICMKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCi0jIENPTkZJR19TRU5TT1JTX0RTMTMzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTM3NCBpcyBub3Qgc2V0CiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX000MVQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKQEAgLTk0MCw2ICs5MTcsNyBAQAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogCiAjCkBAIC0xMDgzLDYgKzEwNjEsNyBAQAogQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKIENPTkZJR19VU0I9eQogIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwpAQCAtMTA5Niw5ICsxMDc1LDkgQEAKICMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCiBDT05GSUdfVVNCX0VIQ0lfSENEPW0KLSMgQ09ORklHX1VTQl9FSENJX1NQTElUX0lTTyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhDSV9IQ0RfUFBDX09GIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKICMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0YgaXMgbm90IHNldApAQCAtMTE0NywxMCArMTEyNiw2IEBACiAjCiAjIFVTQiBwb3J0IGRyaXZlcnMKICMKLQotIwotIyBVU0IgU2VyaWFsIENvbnZlcnRlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKIAogIwpAQCAtMTE3NiwyMCArMTE1MSwxNCBAQAogIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEU0wgbW9kZW0gc3VwcG9ydAotIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CiAjIENPTkZJR19FREFDIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKIAogIwogIyBVc2Vyc3BhY2UgSS9PCkBAIC0xMjE1LDEyICsxMTg0LDEwIEBACiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKICMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldApAQCAtMTI2Nyw4ICsxMjM0LDEwIEBACiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQpAQCAtMTM0Miw3ICsxMzExLDYgQEAKICMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAogIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VDQ19TTE9XIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCkBAIC0xMzYwLDEwICsxMzI4LDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQotQ09ORklHX0lOU1RSVU1FTlRBVElPTj15Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgaGFja2luZwpAQCAtMTM4Miw2ICsxMzQ2LDcgQEAKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKQEAgLTEzOTUsOSArMTM2MCw5IEBACiAjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRURfSU5MSU5JTkc9eQogIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldApAQCAtMTQyMCw2ICsxMzg1LDcgQEAKIENPTkZJR19DUllQVE89eQogQ09ORklHX0NSWVBUT19BTEdBUEk9bQogQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUFOQUdFUj1tCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CkBAIC0xNDM3LDYgKzE0MDMsOSBAQAogQ09ORklHX0NSWVBUT19QQ0JDPW0KICMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CkBAIC0xNDUxLDExICsxNDIwLDEzIEBACiAjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9nNV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9nNV9kZWZjb25maWcKaW5kZXggMzY3M2RkMi4uMGY4MmY2NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZzVfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2c1X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNC1yYzQKLSMgVGh1IERlYyAgNiAxNjo0ODoxNSAyMDA3CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjUtcmM2CisjIFRodSBNYXIgMjAgMTA6MzY6NDEgMjAwOAogIwogQ09ORklHX1BQQzY0PXkKIApAQCAtMjcsNiArMjcsNyBAQAogQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUE9eQogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CiBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKQEAgLTQ4LDcgKzQ5LDkgQEAKIENPTkZJR19BVURJVF9BUkNIPXkKIENPTkZJR19HRU5FUklDX0JVRz15CiAjIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDNjRfU1dTVVNQPXkKK0NPTkZJR19ISUJFUk5BVEVfNjQ9eQorQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQorQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiAjIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAogIyBDT05GSUdfUFBDX09GX1BMQVRGT1JNX1BDSSBpcyBub3Qgc2V0CkBAIC02OCwxOCArNzEsMjIgQEAKIENPTkZJR19QT1NJWF9NUVVFVUU9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE3CiAjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLUNPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKLUNPTkZJR19GQUlSX1VTRVJfU0NIRUQ9eQotIyBDT05GSUdfRkFJUl9DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNFUl9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorQ09ORklHX05BTUVTUEFDRVM9eQorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CkBAIC05MywxMSArMTAwLDEzIEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKKyMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CkBAIC0xMDUsNiArMTE0LDE1IEBACiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX1BST0ZJTElORz15CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19PUFJPRklMRT15CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtMTMyLDYgKzE1MCw3IEBACiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0NMQVNTSUNfUkNVPXkKIAogIwogIyBQbGF0Zm9ybSBzdXBwb3J0CkBAIC0xNDIsOCArMTYxLDggQEAKICMgQ09ORklHX1BQQ184Nnh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19QU0VSSUVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19JU0VSSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEM1MTJ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEM1MTIxIGlzIG5vdCBzZXQKIENPTkZJR19QUENfUE1BQz15CiBDT05GSUdfUFBDX1BNQUM2ND15CiAjIENPTkZJR19QUENfTUFQTEUgaXMgbm90IHNldApAQCAtMTU1LDYgKzE3NCw3IEBACiAjIENPTkZJR19QUENfSUJNX0NFTExfQkxBREUgaXMgbm90IHNldAogIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKIENPTkZJR19QUENfTkFUSVZFPXkKKyMgQ09ORklHX0lQSUMgaXMgbm90IHNldAogQ09ORklHX01QSUM9eQogIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldApAQCAtMTg1LDcgKzIwNSw2IEBACiAjIENQVSBGcmVxdWVuY3kgZHJpdmVycwogIwogQ09ORklHX0NQVV9GUkVRX1BNQUM2ND15Ci0jIENPTkZJR19DUE0yIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKIAogIwpAQCAtMjAwLDE3ICsyMTksMjEgQEAKICMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKIENPTkZJR19IWj0yNTAKKyMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9CS0wgaXMgbm90IHNldAogQ09ORklHX0JJTkZNVF9FTEY9eQorQ09ORklHX0NPTVBBVF9CSU5GTVRfRUxGPXkKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKIENPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTEzCiBDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEU9eQogQ09ORklHX0lPTU1VX1ZNRVJHRT15CitDT05GSUdfSU9NTVVfSEVMUEVSPXkKICMgQ09ORklHX0hPVFBMVUdfQ1BVIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogQ09ORklHX0tFWEVDPXkKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAogQ09ORklHX0lSUV9BTExfQ1BVUz15CkBAIC0yMzYsMTEgKzI1OSw5IEBACiAjIENPTkZJR19TQ0hFRF9TTVQgaXMgbm90IHNldAogQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiAjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfV0FOVFNfRlJFRVpFUl9DT05UUk9MPXkKICMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19TVVNQRU5EX1NNUF9QT1NTSUJMRT15Ci1DT05GSUdfSElCRVJOQVRJT05fU01QX1BPU1NJQkxFPXkKIENPTkZJR19TRUNDT01QPXkKLSMgQ09ORklHX1dBTlRfREVWSUNFX1RSRUUgaXMgbm90IHNldAogQ09ORklHX0lTQV9ETUFfQVBJPXkKIAogIwpAQCAtMjc2LDYgKzI5Nyw3IEBACiBDT05GSUdfWEZSTV9VU0VSPW0KICMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfS0VZPW0KICMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CkBAIC0zMTAsMTIgKzMzMiwxNCBAQAogIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVI9eQogIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfQURWQU5DRUQ9eQogCiAjCiAjIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KICMKLSMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LIGlzIG5vdCBzZXQKLUNPTkZJR19ORl9DT05OVFJBQ0tfRU5BQkxFRD1tCitDT05GSUdfTkVURklMVEVSX05FVExJTks9bQorQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFPW0KK0NPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0c9bQogQ09ORklHX05GX0NPTk5UUkFDSz1tCiAjIENPTkZJR19ORl9DVF9BQ0NUIGlzIG5vdCBzZXQKIENPTkZJR19ORl9DT05OVFJBQ0tfTUFSSz15CkBAIC0zMzEsNiArMzU1LDcgQEAKICMgQ09ORklHX05GX0NPTk5UUkFDS19TQU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX05GX0NPTk5UUkFDS19TSVAgaXMgbm90IHNldAogQ09ORklHX05GX0NPTk5UUkFDS19URlRQPW0KK0NPTkZJR19ORl9DVF9ORVRMSU5LPW0KICMgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTIGlzIG5vdCBzZXQKIAogIwpAQCAtMzYzLDYgKzM4OCw3IEBACiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKQEAgLTQwOSw3ICs0MzUsNyBAQAogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NjU1MzYKLUNPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAogQ09ORklHX0NEUk9NX1BLVENEVkQ9bQogQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEX1dDQUNIRSBpcyBub3Qgc2V0CkBAIC00MTksMTYgKzQ0NSwxOSBAQAogIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKICMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKIENPTkZJR19JREU9eQogQ09ORklHX0JMS19ERVZfSURFPXkKIAogIwotIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKKyMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwogIwogIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVESVNLPXkKICMgQ09ORklHX0lERURJU0tfTVVMVElfTU9ERSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVDRD15CitDT05GSUdfQkxLX0RFVl9JREVDRF9WRVJCT1NFX0VSUk9SUz15CiAjIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JREVGTE9QUFkgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JREVTQ1NJIGlzIG5vdCBzZXQKQEAgLTQ0MCwxMiArNDY5LDEyIEBACiAjCiBDT05GSUdfSURFX0dFTkVSSUM9eQogIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVETUFfU0ZGPXkKIAogIwogIyBQQ0kgSURFIGNoaXBzZXRzIHN1cHBvcnQKICMKIENPTkZJR19CTEtfREVWX0lERVBDST15Ci0jIENPTkZJR19JREVQQ0lfU0hBUkVfSVJRIGlzIG5vdCBzZXQKIENPTkZJR19JREVQQ0lfUENJQlVTX09SREVSPXkKICMgQ09ORklHX0JMS19ERVZfR0VORVJJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX09QVEk2MjEgaXMgbm90IHNldApAQCAtNDc4LDcgKzUwNyw2IEBACiBDT05GSUdfQkxLX0RFVl9JREVfUE1BQz15CiBDT05GSUdfQkxLX0RFVl9JREVfUE1BQ19BVEExMDBGSVJTVD15CiBDT05GSUdfQkxLX0RFVl9JREVETUFfUE1BQz15Ci0jIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERURNQT15CiBDT05GSUdfSURFX0FSQ0hfT0JTT0xFVEVfSU5JVD15CiAjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKQEAgLTU0NCw2ICs1NzIsNyBAQAogIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldApAQCAtNTk2LDYgKzYyNSw3IEBACiAjIENPTkZJR19QQVRBX01QSUlYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfT0xEUElJWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX05FVENFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OSU5KQTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfTlM4NzQxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX05TODc0MTUgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5vdCBzZXQKQEAgLTYxMCw2ICs2NDAsNyBAQAogIyBDT05GSUdfUEFUQV9TSVMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9WSUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9XSU5CT05EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUExBVEZPUk0gaXMgbm90IHNldAogQ09ORklHX01EPXkKIENPTkZJR19CTEtfREVWX01EPXkKIENPTkZJR19NRF9MSU5FQVI9eQpAQCAtNjc2LDcgKzcwNyw2IEBACiAjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAogQ09ORklHX1RVTj1tCiAjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAogIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQpAQCAtNzAxLDYgKzczMSw5IEBACiAjIENPTkZJR19FMTAwMF9OQVBJIGlzIG5vdCBzZXQKICMgQ09ORklHX0UxMDAwX0RJU0FCTEVfUEFDS0VUX1NQTElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMEVfRU5BQkxFRCBpcyBub3Qgc2V0CisjIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKICMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAogIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CiAjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldApAQCAtNzI2LDYgKzc1OSw3IEBACiAjIENPTkZJR19QQVNFTUlfTUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19URUhVVEkgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAogQ09ORklHX1RSPXkKIENPTkZJR19JQk1PTD15CiAjIENPTkZJR18zQzM1OSBpcyBub3Qgc2V0CkBAIC03NzEsNyArODA1LDYgQEAKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldAogQ09ORklHX1NMSEM9bQogIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CkBAIC04MzQsNiArODY3LDcgQEAKIENPTkZJR19IV19DT05TT0xFPXkKICMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKIAogIwogIyBTZXJpYWwgZHJpdmVycwpAQCAtOTAxLDEzICs5MzUsMTIgQEAKICMKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCi0jIENPTkZJR19TRU5TT1JTX0RTMTMzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTM3NCBpcyBub3Qgc2V0CiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKQEAgLTkyMyw2ICs5NTYsNyBAQAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogCiAjCkBAIC0xMDgzLDYgKzExMTcsNyBAQAogIyBDT05GSUdfU05EX0JUODdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9DQTAxMDYgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0NNSVBDSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfT1hZR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9DUzQyODEgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0NTNDZYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQ1M1NTMwIGlzIG5vdCBzZXQKQEAgLTExMDgsNiArMTE0Myw3IEBACiAjIENPTkZJR19TTkRfSERBX0lOVEVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9IRFNQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9IRFNQTSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSElGSUVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9JQ0UxNzEyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9JQ0UxNzI0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9JTlRFTDhYMCBpcyBub3Qgc2V0CkBAIC0xMTI1LDYgKzExNjEsNyBAQAogIyBDT05GSUdfU05EX1RSSURFTlQgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1ZJQTgyWFggaXMgbm90IHNldAogIyBDT05GSUdfU05EX1ZJQTgyWFhfTU9ERU0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZJUlRVT1NPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9WWDIyMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfWU1GUENJIGlzIG5vdCBzZXQKIApAQCAtMTE2Niw2ICsxMjAzLDEwIEBACiAjCiAKICMKKyMgQUxTQSBTb0MgYXVkaW8gZm9yIEZyZWVzY2FsZSBTT0NzCisjCisKKyMKICMgT3BlbiBTb3VuZCBTeXN0ZW0KICMKICMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKQEAgLTExOTIsNiArMTIzMyw3IEBACiBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQogQ09ORklHX1VTQj15CiAjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCkBAIC0xMjA1LDkgKzEyNDcsOSBAQAogIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKICMKIENPTkZJR19VU0JfRUhDSV9IQ0Q9eQotIyBDT05GSUdfVVNCX0VIQ0lfU1BMSVRfSVNPIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FSENJX0hDRF9QUENfT0YgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0Y9eQpAQCAtMTI1OSwxMSArMTMwMSw4IEBACiAjCiAjIFVTQiBwb3J0IGRyaXZlcnMKICMKLQotIwotIyBVU0IgU2VyaWFsIENvbnZlcnRlciBzdXBwb3J0Ci0jCiBDT05GSUdfVVNCX1NFUklBTD1tCitDT05GSUdfVVNCX0VaVVNCPXkKIENPTkZJR19VU0JfU0VSSUFMX0dFTkVSSUM9eQogIyBDT05GSUdfVVNCX1NFUklBTF9BSVJDQUJMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX0FJUlBSSU1FIGlzIG5vdCBzZXQKQEAgLTEyODQsNiArMTMyMyw3IEBACiBDT05GSUdfVVNCX1NFUklBTF9FREdFUE9SVF9UST1tCiBDT05GSUdfVVNCX1NFUklBTF9HQVJNSU49bQogQ09ORklHX1VTQl9TRVJJQUxfSVBXPW0KKyMgQ09ORklHX1VTQl9TRVJJQUxfSVVVIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fUERBPW0KIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU49bQogQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9NUFI9eQpAQCAtMTMxNiw3ICsxMzU2LDYgQEAKICMgQ09ORklHX1VTQl9TRVJJQUxfT1BUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX09NTklORVQ9bQogIyBDT05GSUdfVVNCX1NFUklBTF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0VaVVNCPXkKIAogIwogIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCkBAIC0xMzQxLDIwICsxMzgwLDE0IEBACiAjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERTTCBtb2RlbSBzdXBwb3J0Ci0jCi0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX0VEQUMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAogCiAjCiAjIFVzZXJzcGFjZSBJL08KQEAgLTEzOTMsMTIgKzE0MjYsMTAgQEAKICMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0FVVE9GU19GUz1tCiAjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldApAQCAtMTQ0Nyw4ICsxNDc4LDEwIEBACiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz15CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKQEAgLTE1NDYsNyArMTU3OSw2IEBACiAjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfVVRGOD15CiAjIENPTkZJR19ETE0gaXMgbm90IHNldAotIyBDT05GSUdfVUNDX1NMT1cgaXMgbm90IHNldAogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKQEAgLTE1NjQsMTEgKzE1OTYsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfSU5TVFJVTUVOVEFUSU9OPXkKLUNPTkZJR19QUk9GSUxJTkc9eQotQ09ORklHX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiAKICMKICMgS2VybmVsIGhhY2tpbmcKQEAgLTE1ODcsNiArMTYxNCw3IEBACiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC0xNTk5LDkgKzE2MjcsOSBAQAogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKICMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKQEAgLTE2MjEsNyArMTY0OSw5IEBACiAjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPPXkKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQUVBRD1tCiBDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19IQVNIPXkKIENPTkZJR19DUllQVE9fTUFOQUdFUj15CiBDT05GSUdfQ1JZUFRPX0hNQUM9eQpAQCAtMTY0MCw2ICsxNjcwLDkgQEAKIENPTkZJR19DUllQVE9fUENCQz1tCiAjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0RFUz15CiAjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKQEAgLTE2NTUsMTEgKzE2ODgsMTMgQEAKIENPTkZJR19DUllQVE9fS0hBWkFEPW0KIENPTkZJR19DUllQVE9fQU5VQklTPW0KICMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fREVGTEFURT1tCiBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KIENPTkZJR19DUllQVE9fQ1JDMzJDPW0KICMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX1RFU1Q9bQotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BVVRIRU5DPW0KKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9pc2VyaWVzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2lzZXJpZXNfZGVmY29uZmlnCmluZGV4IDRhODc3NDUuLjhkOWE4NGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2lzZXJpZXNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2lzZXJpZXNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI0LXJjMwotIyBXZWQgTm92IDIxIDExOjE5OjU5IDIwMDcKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNS1yYzYKKyMgVGh1IE1hciAyMCAxMDo0Mzo0NiAyMDA4CiAjCiBDT05GSUdfUFBDNjQ9eQogCkBAIC0yOCw2ICsyOCw3IEBACiBDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQT15CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQpAQCAtNjgsOCArNjksNiBAQAogQ09ORklHX1BPU0lYX01RVUVVRT15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CiBDT05GSUdfQVVESVQ9eQogQ09ORklHX0FVRElUU1lTQ0FMTD15CiBDT05GSUdfQVVESVRfVFJFRT15CkBAIC03NywxMSArNzYsMTcgQEAKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE3CiAjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLUNPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKLUNPTkZJR19GQUlSX1VTRVJfU0NIRUQ9eQotIyBDT05GSUdfRkFJUl9DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNFUl9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorQ09ORklHX05BTUVTUEFDRVM9eQorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CkBAIC05NSwxMSArMTAwLDEzIEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKKyMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CkBAIC0xMDcsNiArMTE0LDE0IEBACiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKQEAgLTEzNCw2ICsxNDksNyBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CiAKICMKICMgUGxhdGZvcm0gc3VwcG9ydApAQCAtMTUzLDggKzE2OSw4IEBACiBDT05GSUdfVklPQ0Q9bQogQ09ORklHX1ZJT1RBUEU9bQogQ09ORklHX1ZJT1BBVEg9eQotIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzUyMDAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUxMnggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUxMjEgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX01BUExFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19QQVNFTUkgaXMgbm90IHNldApAQCAtMTY0LDYgKzE4MCw3IEBACiAjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0lCTV9DRUxMX0JMQURFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUElDIGlzIG5vdCBzZXQKICMgQ09ORklHX01QSUMgaXMgbm90IHNldAogIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldApAQCAtMTc2LDcgKzE5Myw2IEBACiBDT05GSUdfUFBDX0lORElSRUNUX0lPPXkKIENPTkZJR19HRU5FUklDX0lPTUFQPXkKICMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQTTIgaXMgbm90IHNldAogIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAogCiAjCkBAIC0xOTEsMTUgKzIwNywxOSBAQAogIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAogQ09ORklHX0haPTI1MAorIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX0JLTCBpcyBub3Qgc2V0CiBDT05GSUdfQklORk1UX0VMRj15CitDT05GSUdfQ09NUEFUX0JJTkZNVF9FTEY9eQogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTMKIENPTkZJR19JT01NVV9WTUVSR0U9eQorQ09ORklHX0lPTU1VX0hFTFBFUj15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAogQ09ORklHX0lSUV9BTExfQ1BVUz15CkBAIC0yMjcsNyArMjQ3LDYgQEAKICMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTSBpcyBub3Qgc2V0CiBDT05GSUdfU0VDQ09NUD15Ci0jIENPTkZJR19XQU5UX0RFVklDRV9UUkVFIGlzIG5vdCBzZXQKIENPTkZJR19JU0FfRE1BX0FQST15CiAKICMKQEAgLTI2Myw2ICsyODIsNyBAQAogQ09ORklHX1hGUk1fVVNFUj1tCiBDT05GSUdfWEZSTV9TVUJfUE9MSUNZPXkKICMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAogQ09ORklHX05FVF9LRVk9bQogIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKQEAgLTI5NywxMiArMzE3LDE0IEBACiAjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUj15CiAjIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9BRFZBTkNFRD15CiAKICMKICMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgogIwotIyBDT05GSUdfTkVURklMVEVSX05FVExJTksgaXMgbm90IHNldAotQ09ORklHX05GX0NPTk5UUkFDS19FTkFCTEVEPW0KK0NPTkZJR19ORVRGSUxURVJfTkVUTElOSz1tCitDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUU9bQorQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCiBDT05GSUdfTkZfQ09OTlRSQUNLPW0KICMgQ09ORklHX05GX0NUX0FDQ1QgaXMgbm90IHNldAogQ09ORklHX05GX0NPTk5UUkFDS19NQVJLPXkKQEAgLTMxOCw2ICszNDAsNyBAQAogIyBDT05GSUdfTkZfQ09OTlRSQUNLX1NBTkUgaXMgbm90IHNldAogIyBDT05GSUdfTkZfQ09OTlRSQUNLX1NJUCBpcyBub3Qgc2V0CiBDT05GSUdfTkZfQ09OTlRSQUNLX1RGVFA9bQorQ09ORklHX05GX0NUX05FVExJTks9bQogQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5NQVJLPW0KQEAgLTMyNiw4ICszNDksMTAgQEAKIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUU9bQogIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05PVFJBQ0sgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfUkFURUVTVD1tCiAjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE9QVFNUUklQPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCiAjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkJZVEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTElNSVQgaXMgbm90IHNldApAQCAtMzM3LDE0ICszNjIsMTcgQEAKIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRFNDUD1tCiAjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVIgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9JUFJBTkdFPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfT1dORVI9bQogIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRT1tCiAjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEEgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SQVRFRVNUPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE09bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQPW0KICMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFURSBpcyBub3Qgc2V0CkBAIC0zNjIsMTMgKzM5MCwxMCBAQAogQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVD15CiBDT05GSUdfSVBfTkZfUVVFVUU9bQogQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9JUFJBTkdFPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9UT1M9bQogQ09ORklHX0lQX05GX01BVENIX1JFQ0VOVD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfRUNOPW0KICMgQ09ORklHX0lQX05GX01BVENIX0FIIGlzIG5vdCBzZXQKIENPTkZJR19JUF9ORl9NQVRDSF9UVEw9bQotQ09ORklHX0lQX05GX01BVENIX09XTkVSPW0KIENPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRT1tCiBDT05GSUdfSVBfTkZfRklMVEVSPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KQEAgLTM3OSw3ICs0MDQsNiBAQAogQ09ORklHX0lQX05GX1RBUkdFVF9NQVNRVUVSQURFPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfUkVESVJFQ1Q9bQogQ09ORklHX0lQX05GX1RBUkdFVF9ORVRNQVA9bQotQ09ORklHX0lQX05GX1RBUkdFVF9TQU1FPW0KICMgQ09ORklHX05GX05BVF9TTk1QX0JBU0lDIGlzIG5vdCBzZXQKIENPTkZJR19ORl9OQVRfRlRQPW0KIENPTkZJR19ORl9OQVRfSVJDPW0KQEAgLTM4OSw3ICs0MTMsNiBAQAogIyBDT05GSUdfTkZfTkFUX0gzMjMgaXMgbm90IHNldAogIyBDT05GSUdfTkZfTkFUX1NJUCBpcyBub3Qgc2V0CiBDT05GSUdfSVBfTkZfTUFOR0xFPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfVE9TPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfRUNOPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfVFRMPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfQ0xVU1RFUklQPW0KQEAgLTQyNSw2ICs0NDgsNyBAQAogIwogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CkBAIC00NzAsNyArNDk0LDcgQEAKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTY1NTM2Ci1DT05GSUdfQkxLX0RFVl9SQU1fQkxPQ0tTSVpFPTEwMjQKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQpAQCAtNDc4LDYgKzUwMiw4IEBACiAjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAogIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIAogIwpAQCAtNTE4LDYgKzU0NCw3IEBACiAjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX1NBU19BVFRSUz1tCiBDT05GSUdfU0NTSV9TQVNfTElCU0FTPW0KK0NPTkZJR19TQ1NJX1NBU19IT1NUX1NNUD15CiBDT05GSUdfU0NTSV9TQVNfTElCU0FTX0RFQlVHPXkKIENPTkZJR19TQ1NJX1NSUF9BVFRSUz1tCiBDT05GSUdfU0NTSV9MT1dMRVZFTD15CkBAIC01NDMsNiArNTcwLDcgQEAKIENPTkZJR19TQ1NJX0lCTVZTQ1NJPW0KICMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldApAQCAtNTg5LDcgKzYxNyw2IEBACiAjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAogQ09ORklHX1RVTj1tCiAjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAogIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQpAQCAtNjE4LDYgKzY0NSw3IEBACiAjIENPTkZJR19ORTJLX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR184MTM5Q1AgaXMgbm90IHNldAogIyBDT05GSUdfODEzOVRPTyBpcyBub3Qgc2V0CisjIENPTkZJR19SNjA0MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TSVM5MDAgaXMgbm90IHNldAogIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CkBAIC02MzEsNiArNjU5LDkgQEAKICMgQ09ORklHX0UxMDAwX05BUEkgaXMgbm90IHNldAogIyBDT05GSUdfRTEwMDBfRElTQUJMRV9QQUNLRVRfU1BMSVQgaXMgbm90IHNldAogIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwRV9FTkFCTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JR0IgaXMgbm90IHNldAogIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKICMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CkBAIC02NTYsNiArNjg3LDcgQEAKICMgQ09ORklHX1BBU0VNSV9NQUMgaXMgbm90IHNldAogIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CiBDT05GSUdfVFI9eQogQ09ORklHX0lCTU9MPXkKICMgQ09ORklHXzNDMzU5IGlzIG5vdCBzZXQKQEAgLTY4Myw3ICs3MTUsNiBAQAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CiBDT05GSUdfU0xIQz1tCiAjIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKIENPTkZJR19ORVRDT05TT0xFPXkKICMgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUUE9MTD15CkBAIC03MzQsNiArNzY1LDcgQEAKIENPTkZJR19IV19DT05TT0xFPXkKICMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKIAogIwogIyBTZXJpYWwgZHJpdmVycwpAQCAtNzcyLDYgKzgwNCw3IEBACiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiAKICMKQEAgLTgyMSwxMCArODU0LDEyIEBACiAjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CiAjIENPTkZJR19FREFDIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKIAogIwogIyBVc2Vyc3BhY2UgSS9PCkBAIC04NjksMTIgKzkwNCwxMCBAQAogQ09ORklHX0dGUzJfRlNfTE9DS0lOR19OT0xPQ0s9bQogQ09ORklHX0dGUzJfRlNfTE9DS0lOR19ETE09bQogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfQVVUT0ZTX0ZTPW0KICMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CkBAIC05MjQsOCArOTU3LDEwIEBACiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz15CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKQEAgLTEwMDksNyArMTA0NCw2IEBACiAjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CiBDT05GSUdfRExNPW0KICMgQ09ORklHX0RMTV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VQ0NfU0xPVyBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwpAQCAtMTAzMSwxMCArMTA2NSw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19JTlNUUlVNRU5UQVRJT049eQotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiAKICMKICMgS2VybmVsIGhhY2tpbmcKQEAgLTEwNTMsNiArMTA4Myw3IEBACiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC0xMDY1LDkgKzEwOTYsOSBAQAogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT1JDRURfSU5MSU5JTkcgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XPXkKQEAgLTEwODksNiArMTEyMCw3IEBACiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FFQUQ9bQogQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fSEFTSD15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQogQ09ORklHX0NSWVBUT19ITUFDPXkKQEAgLTExMDcsNiArMTEzOSw5IEBACiBDT05GSUdfQ1JZUFRPX1BDQkM9bQogIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19ERVM9eQogIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CkBAIC0xMTIyLDExICsxMTU3LDEzIEBACiBDT05GSUdfQ1JZUFRPX0tIQVpBRD1tCiBDT05GSUdfQ1JZUFRPX0FOVUJJUz1tCiBDT05GSUdfQ1JZUFRPX1NFRUQ9bQorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQogQ09ORklHX0NSWVBUT19DUkMzMkM9bQogIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fVEVTVD1tCiBDT05GSUdfQ1JZUFRPX0FVVEhFTkM9bQorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BtYWMzMl9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wbWFjMzJfZGVmY29uZmlnCmluZGV4IDU0MTZiZTQuLjU1OGIwZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BtYWMzMl9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcG1hYzMyX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNC1yYzQKLSMgVGh1IERlYyAgNiAxNjo0OTowNSAyMDA3CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjUtcmM2CisjIFRodSBNYXIgMjAgMTE6MDU6MTQgMjAwOAogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0yOSw2ICsyOSw3IEBACiBDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKKyMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQogQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CkBAIC00OSw2ICs1MCw5IEBACiBDT05GSUdfR0VORVJJQ19CVUc9eQogQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKICMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19ISUJFUk5BVEVfMzI9eQorQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQorQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiAjIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKQEAgLTY3LDE4ICs3MSwyMiBAQAogQ09ORklHX1BPU0lYX01RVUVVRT15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQotQ09ORklHX0ZBSVJfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19GQUlSX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VSX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CitDT05GSUdfTkFNRVNQQUNFUz15CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAorIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAorIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldApAQCAtOTIsMTEgKzEwMCwxMyBAQAogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CisjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQpAQCAtMTA0LDYgKzExNCwxNSBAQAogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9GSUxJTkc9eQorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfT1BST0ZJTEU9eQorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKQEAgLTEzMSw2ICsxNTAsNyBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CiAKICMKICMgUGxhdGZvcm0gc3VwcG9ydApAQCAtMTQxLDE2ICsxNjEsMTcgQEAKICMgQ09ORklHX1BQQ184Nnh4IGlzIG5vdCBzZXQKIENPTkZJR19DTEFTU0lDMzI9eQogIyBDT05GSUdfUFBDX0NIUlAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUxMnggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUxMjEgaXMgbm90IHNldAorIyBDT05GSUdfTVBDNTEyMV9BRFMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzUyMDAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VGSUtBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19MSVRFNTIwMCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1BNQUM9eQogIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FTUJFRERFRDZ4eCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX05BVElWRT15CisjIENPTkZJR19JUElDIGlzIG5vdCBzZXQKIENPTkZJR19NUElDPXkKICMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKQEAgLTE4MSw3ICsyMDIsNiBAQAogQ09ORklHX0NQVV9GUkVRX1BNQUM9eQogQ09ORklHX1BQQzYwMV9TWU5DX0ZJWD15CiAjIENPTkZJR19UQVUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BNMiBpcyBub3Qgc2V0CiAjIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0CiAKICMKQEAgLTE5NywxMiArMjE3LDE2IEBACiAjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CiBDT05GSUdfSFo9MjUwCisjIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKIENPTkZJR19CSU5GTVRfRUxGPXkKIENPTkZJR19CSU5GTVRfTUlTQz1tCisjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQpAQCAtMjIxLDE5ICsyNDUsMTkgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKICMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9XQU5UU19GUkVFWkVSX0NPTlRST0w9eQogQ09ORklHX1BNPXkKICMgQ09ORklHX1BNX0xFR0FDWSBpcyBub3Qgc2V0CiBDT05GSUdfUE1fREVCVUc9eQogIyBDT05GSUdfUE1fVkVSQk9TRSBpcyBub3Qgc2V0CitDT05GSUdfQ0FOX1BNX1RSQUNFPXkKIENPTkZJR19QTV9TTEVFUD15Ci1DT05GSUdfU1VTUEVORF9VUF9QT1NTSUJMRT15CiBDT05GSUdfU1VTUEVORD15Ci1DT05GSUdfSElCRVJOQVRJT05fVVBfUE9TU0lCTEU9eQorQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15CiBDT05GSUdfSElCRVJOQVRJT049eQogQ09ORklHX1BNX1NURF9QQVJUSVRJT049IiIKIENPTkZJR19BUE1fRU1VTEFUSU9OPXkKIENPTkZJR19TRUNDT01QPXkKLSMgQ09ORklHX1dBTlRfREVWSUNFX1RSRUUgaXMgbm90IHNldAogQ09ORklHX0lTQV9ETUFfQVBJPXkKIAogIwpAQCAtMzAwLDYgKzMyNCw3IEBACiBDT05GSUdfWEZSTV9VU0VSPXkKICMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfS0VZPXkKICMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CkBAIC0zMzQsMTIgKzM1OSwxNCBAQAogIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVI9eQogIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfQURWQU5DRUQ9eQogCiAjCiAjIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KICMKLSMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LIGlzIG5vdCBzZXQKLUNPTkZJR19ORl9DT05OVFJBQ0tfRU5BQkxFRD1tCitDT05GSUdfTkVURklMVEVSX05FVExJTks9bQorQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFPW0KK0NPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0c9bQogQ09ORklHX05GX0NPTk5UUkFDSz1tCiAjIENPTkZJR19ORl9DVF9BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX05GX0NPTk5UUkFDS19NQVJLIGlzIG5vdCBzZXQKQEAgLTM1NSw2ICszODIsNyBAQAogIyBDT05GSUdfTkZfQ09OTlRSQUNLX1NBTkUgaXMgbm90IHNldAogIyBDT05GSUdfTkZfQ09OTlRSQUNLX1NJUCBpcyBub3Qgc2V0CiBDT05GSUdfTkZfQ09OTlRSQUNLX1RGVFA9bQorQ09ORklHX05GX0NUX05FVExJTks9bQogQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZPW0KICMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTk1BUksgaXMgbm90IHNldApAQCAtMzYzLDggKzM5MSwxMCBAQAogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRz1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9OT1RSQUNLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1JBVEVFU1Q9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVFJBQ0U9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE9QVFNUUklQPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCiAjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkJZVEVTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkxJTUlUPW0KQEAgLTM3NCwxNCArNDA0LDE3IEBACiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1A9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVI9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9JUFJBTkdFPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfT1dORVI9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1k9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFPW0KICMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQSBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JBVEVFU1Q9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFA9bQogIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRFIGlzIG5vdCBzZXQKQEAgLTM5OSwxMyArNDMyLDEwIEBACiBDT05GSUdfTkZfQ09OTlRSQUNLX1BST0NfQ09NUEFUPXkKICMgQ09ORklHX0lQX05GX1FVRVVFIGlzIG5vdCBzZXQKIENPTkZJR19JUF9ORl9JUFRBQkxFUz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfSVBSQU5HRT1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfVE9TPW0KIENPTkZJR19JUF9ORl9NQVRDSF9SRUNFTlQ9bQogQ09ORklHX0lQX05GX01BVENIX0VDTj1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfQUg9bQogQ09ORklHX0lQX05GX01BVENIX1RUTD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfT1dORVI9bQogQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KIENPTkZJR19JUF9ORl9GSUxURVI9bQogQ09ORklHX0lQX05GX1RBUkdFVF9SRUpFQ1Q9bQpAQCAtNDE2LDcgKzQ0Niw2IEBACiBDT05GSUdfSVBfTkZfVEFSR0VUX01BU1FVRVJBREU9bQogQ09ORklHX0lQX05GX1RBUkdFVF9SRURJUkVDVD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX05FVE1BUD1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX1NBTUU9bQogIyBDT05GSUdfTkZfTkFUX1NOTVBfQkFTSUMgaXMgbm90IHNldAogQ09ORklHX05GX05BVF9GVFA9bQogQ09ORklHX05GX05BVF9JUkM9bQpAQCAtNDI2LDcgKzQ1NSw2IEBACiAjIENPTkZJR19ORl9OQVRfSDMyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORl9OQVRfU0lQIGlzIG5vdCBzZXQKIENPTkZJR19JUF9ORl9NQU5HTEU9bQotQ09ORklHX0lQX05GX1RBUkdFVF9UT1M9bQogQ09ORklHX0lQX05GX1RBUkdFVF9FQ049bQogQ09ORklHX0lQX05GX1RBUkdFVF9UVEw9bQogIyBDT05GSUdfSVBfTkZfVEFSR0VUX0NMVVNURVJJUCBpcyBub3Qgc2V0CkBAIC00NDQsOSArNDcyLDkgQEAKIENPTkZJR19JUF9EQ0NQX0NDSUQyPW0KICMgQ09ORklHX0lQX0RDQ1BfQ0NJRDJfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0lQX0RDQ1BfQ0NJRDM9bQotQ09ORklHX0lQX0RDQ1BfVEZSQ19MSUI9bQogIyBDT05GSUdfSVBfRENDUF9DQ0lEM19ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSVBfRENDUF9DQ0lEM19SVE89MTAwCitDT05GSUdfSVBfRENDUF9URlJDX0xJQj1tCiAKICMKICMgRENDUCBLZXJuZWwgSGFja2luZwpAQCAtNDc0LDYgKzUwMiw3IEBACiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiBDT05GSUdfSVJEQT1tCiAKICMKQEAgLTUwOSwxNSArNTM4LDYgQEAKICMgQ09ORklHX0tTOTU5X0RPTkdMRSBpcyBub3Qgc2V0CiAKICMKLSMgT2xkIFNJUiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfSVJQT1JUX1NJUiBpcyBub3Qgc2V0Ci0KLSMKLSMgT2xkIFNlcmlhbCBkb25nbGUgc3VwcG9ydAotIwotCi0jCiAjIEZJUiBkZXZpY2UgZHJpdmVycwogIwogIyBDT05GSUdfVVNCX0lSREEgaXMgbm90IHNldApAQCAtNTYzLDggKzU4MywyNiBAQAogQ09ORklHX05MODAyMTE9eQogQ09ORklHX1dJUkVMRVNTX0VYVD15CiBDT05GSUdfTUFDODAyMTE9bQotQ09ORklHX01BQzgwMjExX1JDU0lNUExFPXkKKworIworIyBSYXRlIGNvbnRyb2wgYWxnb3JpdGhtIHNlbGVjdGlvbgorIworQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFRfUElEPXkKKyMgQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFRfU0lNUExFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFRfTk9ORSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZWN0aW5nICd5JyBmb3IgYW4gYWxnb3JpdGhtIHdpbGwKKyMKKworIworIyBidWlsZCB0aGUgYWxnb3JpdGhtIGludG8gbWFjODAyMTEuCisjCitDT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVD0icGlkIgorQ09ORklHX01BQzgwMjExX1JDX1BJRD15CisjIENPTkZJR19NQUM4MDIxMV9SQ19TSU1QTEUgaXMgbm90IHNldAogQ09ORklHX01BQzgwMjExX0xFRFM9eQorIyBDT05GSUdfTUFDODAyMTFfREVCVUdfUEFDS0VUX0FMSUdOTUVOVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUM4MDIxMV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSUVFRTgwMjExPW0KICMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0CkBAIC02MTAsNyArNjQ4LDcgQEAKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKLUNPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15CkBAIC02MTgsMTEgKzY1NiwxMyBAQAogIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKICMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKIENPTkZJR19JREU9eQogQ09ORklHX0JMS19ERVZfSURFPXkKIAogIwotIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKKyMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwogIwogIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVESVNLPXkKQEAgLTYzMCw2ICs2NzAsNyBAQAogQ09ORklHX0JMS19ERVZfSURFQ1M9bQogIyBDT05GSUdfQkxLX0RFVl9ERUxLSU4gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFQ0Q9eQorQ09ORklHX0JMS19ERVZfSURFQ0RfVkVSQk9TRV9FUlJPUlM9eQogIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERUZMT1BQWT15CiBDT05GSUdfQkxLX0RFVl9JREVTQ1NJPXkKQEAgLTY0MSwxMiArNjgyLDEyIEBACiAjCiAjIENPTkZJR19JREVfR0VORVJJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURNQV9TRkY9eQogCiAjCiAjIFBDSSBJREUgY2hpcHNldHMgc3VwcG9ydAogIwogQ09ORklHX0JMS19ERVZfSURFUENJPXkKLUNPTkZJR19JREVQQ0lfU0hBUkVfSVJRPXkKIENPTkZJR19JREVQQ0lfUENJQlVTX09SREVSPXkKICMgQ09ORklHX0JMS19ERVZfT0ZGQk9BUkQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfR0VORVJJQz15CkBAIC02ODAsNyArNzIxLDYgQEAKIENPTkZJR19CTEtfREVWX0lERV9QTUFDPXkKIENPTkZJR19CTEtfREVWX0lERV9QTUFDX0FUQTEwMEZJUlNUPXkKIENPTkZJR19CTEtfREVWX0lERURNQV9QTUFDPXkKLSMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFRE1BPXkKIENPTkZJR19JREVfQVJDSF9PQlNPTEVURV9JTklUPXkKICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldApAQCAtNzU0LDYgKzc5NCw3IEBACiAjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAogQ09ORklHX1NDU0lfU1lNNTNDOFhYXzI9eQogQ09ORklHX1NDU0lfU1lNNTNDOFhYX0RNQV9BRERSRVNTSU5HX01PREU9MApAQCAtODQ4LDcgKzg4OSw2IEBACiAjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAogQ09ORklHX1RVTj1tCiAjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAogIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQpAQCAtODgwLDYgKzkyMCw3IEBACiAjIENPTkZJR19ORTJLX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR184MTM5Q1AgaXMgbm90IHNldAogIyBDT05GSUdfODEzOVRPTyBpcyBub3Qgc2V0CisjIENPTkZJR19SNjA0MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TSVM5MDAgaXMgbm90IHNldAogIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CkBAIC04OTEsNiArOTMyLDkgQEAKICMgQ09ORklHX0RMMksgaXMgbm90IHNldAogIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwRV9FTkFCTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JR0IgaXMgbm90IHNldAogIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKICMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CkBAIC05MTYsNiArOTYwLDcgQEAKICMgQ09ORklHX05JVSBpcyBub3Qgc2V0CiAjIENPTkZJR19NTFg0X0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfVEVIVVRJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKIAogIwpAQCAtOTQxLDEyICs5ODYsMTYgQEAKICMgQ09ORklHX1BDTUNJQV9XTDM1MDEgaXMgbm90IHNldAogQ09ORklHX1BSSVNNNTQ9bQogIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTkVUX1JORElTX1dMQU4gaXMgbm90IHNldAorIyBDT05GSUdfUlRMODE4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVEw4MTg3IGlzIG5vdCBzZXQKICMgQ09ORklHX0FETTgyMTEgaXMgbm90IHNldAogQ09ORklHX1A1NF9DT01NT049bQogIyBDT05GSUdfUDU0X1VTQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QNTRfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRkkgaXMgbm90IHNldAorIyBDT05GSUdfQVRINUsgaXMgbm90IHNldAorIyBDT05GSUdfSVdMNDk2NSBpcyBub3Qgc2V0CisjIENPTkZJR19JV0wzOTQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CiBDT05GSUdfQjQzPW0KIENPTkZJR19CNDNfUENJX0FVVE9TRUxFQ1Q9eQpAQCAtOTU0LDIwICsxMDAzLDE3IEBACiAjIENPTkZJR19CNDNfUENNQ0lBIGlzIG5vdCBzZXQKIENPTkZJR19CNDNfTEVEUz15CiAjIENPTkZJR19CNDNfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0I0M19ETUE9eQotQ09ORklHX0I0M19QSU89eQotQ09ORklHX0I0M19ETUFfQU5EX1BJT19NT0RFPXkKLSMgQ09ORklHX0I0M19ETUFfTU9ERSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDNfUElPX01PREUgaXMgbm90IHNldAogQ09ORklHX0I0M0xFR0FDWT1tCiBDT05GSUdfQjQzTEVHQUNZX1BDSV9BVVRPU0VMRUNUPXkKIENPTkZJR19CNDNMRUdBQ1lfUENJQ09SRV9BVVRPU0VMRUNUPXkKK0NPTkZJR19CNDNMRUdBQ1lfTEVEUz15CiBDT05GSUdfQjQzTEVHQUNZX0RFQlVHPXkKIENPTkZJR19CNDNMRUdBQ1lfRE1BPXkKIENPTkZJR19CNDNMRUdBQ1lfUElPPXkKIENPTkZJR19CNDNMRUdBQ1lfRE1BX0FORF9QSU9fTU9ERT15CiAjIENPTkZJR19CNDNMRUdBQ1lfRE1BX01PREUgaXMgbm90IHNldAogIyBDT05GSUdfQjQzTEVHQUNZX1BJT19NT0RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1pEMTIxMVJXIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUMlgwMCBpcyBub3Qgc2V0CiAKICMKQEAgLTEwMDUsNyArMTA1MSw2IEBACiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKIENPTkZJR19TTEhDPXkKICMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldApAQCAtMTA2OCw2ICsxMTEzLDcgQEAKIENPTkZJR19IV19DT05TT0xFPXkKICMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKIAogIwogIyBTZXJpYWwgZHJpdmVycwpAQCAtMTEwNSw2ICsxMTUxLDcgQEAKICMgQ09ORklHX1NZTkNMSU5LX0NTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBUkRNQU5fNDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVJETUFOXzQwNDAgaXMgbm90IHNldAorIyBDT05GSUdfSVBXSVJFTEVTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0RFVlBPUlQ9eQpAQCAtMTE1MSwxNCArMTE5OCwxMiBAQAogIwogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzc0IGlzIG5vdCBzZXQKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTTQxVDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldApAQCAtMTE3OSw2ICsxMjI0LDcgQEAKICMgQ09ORklHX0JBVFRFUllfRFMyNzYwIGlzIG5vdCBzZXQKIENPTkZJR19CQVRURVJZX1BNVT15CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIAogIwpAQCAtMTE4OCw2ICsxMjM0LDcgQEAKIENPTkZJR19TU0I9bQogQ09ORklHX1NTQl9QQ0lIT1NUX1BPU1NJQkxFPXkKIENPTkZJR19TU0JfUENJSE9TVD15CitDT05GSUdfU1NCX0I0M19QQ0lfQlJJREdFPXkKIENPTkZJR19TU0JfUENNQ0lBSE9TVF9QT1NTSUJMRT15CiAjIENPTkZJR19TU0JfUENNQ0lBSE9TVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TU0JfREVCVUcgaXMgbm90IHNldApAQCAtMTM3Miw2ICsxNDE5LDcgQEAKICMgQ09ORklHX1NORF9CVDg3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQ0EwMTA2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9DTUlQQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09YWUdFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQ1M0MjgxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9DUzQ2WFggaXMgbm90IHNldAogIyBDT05GSUdfU05EX0NTNTUzMCBpcyBub3Qgc2V0CkBAIC0xMzk3LDYgKzE0NDUsNyBAQAogIyBDT05GSUdfU05EX0hEQV9JTlRFTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfSERTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfSERTUE0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hJRklFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfSUNFMTcxMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfSUNFMTcyNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfSU5URUw4WDAgaXMgbm90IHNldApAQCAtMTQxNCw2ICsxNDYzLDcgQEAKICMgQ09ORklHX1NORF9UUklERU5UIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9WSUE4MlhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9WSUE4MlhYX01PREVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WSVJUVU9TTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfVlgyMjIgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1lNRlBDSSBpcyBub3Qgc2V0CiAKQEAgLTE0NjEsNiArMTUxMSwxMCBAQAogIwogCiAjCisjIEFMU0EgU29DIGF1ZGlvIGZvciBGcmVlc2NhbGUgU09DcworIworCisjCiAjIE9wZW4gU291bmQgU3lzdGVtCiAjCiAjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CkBAIC0xNDgyLDYgKzE1MzYsNyBAQAogQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKIENPTkZJR19VU0I9eQogIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwpAQCAtMTQ5Nyw5ICsxNTUyLDkgQEAKICMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCiBDT05GSUdfVVNCX0VIQ0lfSENEPW0KLUNPTkZJR19VU0JfRUhDSV9TUExJVF9JU089eQogQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUPXkKICMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FSENJX0hDRF9QUENfT0YgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRiBpcyBub3Qgc2V0CkBAIC0xNTQ3LDExICsxNjAyLDggQEAKICMKICMgVVNCIHBvcnQgZHJpdmVycwogIwotCi0jCi0jIFVTQiBTZXJpYWwgQ29udmVydGVyIHN1cHBvcnQKLSMKIENPTkZJR19VU0JfU0VSSUFMPW0KK0NPTkZJR19VU0JfRVpVU0I9eQogIyBDT05GSUdfVVNCX1NFUklBTF9HRU5FUklDIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfQUlSQ0FCTEUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9BSVJQUklNRSBpcyBub3Qgc2V0CkBAIC0xNTcyLDYgKzE2MjQsNyBAQAogIyBDT05GSUdfVVNCX1NFUklBTF9FREdFUE9SVF9USSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX0dBUk1JTiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX0lQVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0lVVSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1BEQT1tCiBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOPW0KIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fTVBSPXkKQEAgLTE2MDMsNyArMTY1Niw2IEBACiAjIENPTkZJR19VU0JfU0VSSUFMX09QVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX09NTklORVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0VaVVNCPXkKIAogIwogIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCkBAIC0xNjI4LDE2ICsxNjgwLDkgQEAKICMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRFNMIG1vZGVtIHN1cHBvcnQKLSMKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKIENPTkZJR19ORVdfTEVEUz15CiBDT05GSUdfTEVEU19DTEFTUz15CiAKQEAgLTE2NTUsNiArMTcwMCw3IEBACiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX0VEQUMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAogCiAjCiAjIFVzZXJzcGFjZSBJL08KQEAgLTE2ODAsMTIgKzE3MjYsMTAgQEAKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQogIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19BVVRPRlM0X0ZTPW0KIENPTkZJR19GVVNFX0ZTPW0KQEAgLTE3MzMsOCArMTc3NywxMCBAQAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKQEAgLTE4MjgsNyArMTg3NCw2IEBACiAjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfVVRGOD1tCiAjIENPTkZJR19ETE0gaXMgbm90IHNldAotIyBDT05GSUdfVUNDX1NMT1cgaXMgbm90IHNldAogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKQEAgLTE4NTAsMTEgKzE4OTUsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfSU5TVFJVTUVOVEFUSU9OPXkKLUNPTkZJR19QUk9GSUxJTkc9eQotQ09ORklHX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiAKICMKICMgS2VybmVsIGhhY2tpbmcKQEAgLTE4NzMsNiArMTkxMyw3IEBACiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC0xODg1LDkgKzE5MjYsOSBAQAogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT1JDRURfSU5MSU5JTkcgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldApAQCAtMTkwOCw3ICsxOTQ5LDkgQEAKICMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE89eQogQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BRUFEPXkKIENPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0hBU0g9eQogQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKIENPTkZJR19DUllQVE9fSE1BQz15CkBAIC0xOTI3LDYgKzE5NzAsOSBAQAogQ09ORklHX0NSWVBUT19QQ0JDPW0KICMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fREVTPXkKICMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldApAQCAtMTk0MiwxMSArMTk4OCwxNCBAQAogQ09ORklHX0NSWVBUT19LSEFaQUQ9bQogQ09ORklHX0NSWVBUT19BTlVCSVM9bQogIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQogQ09ORklHX0NSWVBUT19DUkMzMkM9bQogIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQVVUSEVOQz15CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fSFc9eQorIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZwppbmRleCA3Njk1YTRjLi44ODBhYjdhZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNC1yYzQKLSMgRnJpIERlYyAyMSAxNDo0NzoyOSAyMDA3CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjUtcmM2CisjIFRodSBNYXIgMjAgMTE6MDY6MjggMjAwOAogIwogQ09ORklHX1BQQzY0PXkKIApAQCAtMjgsNiArMjgsNyBAQAogQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUE9eQogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CiBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKQEAgLTQ5LDcgKzUwLDkgQEAKIENPTkZJR19BVURJVF9BUkNIPXkKIENPTkZJR19HRU5FUklDX0JVRz15CiAjIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDNjRfU1dTVVNQPXkKK0NPTkZJR19ISUJFUk5BVEVfNjQ9eQorQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQorQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiAjIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0RDUl9NTUlPPXkKIENPTkZJR19QUENfRENSPXkKQEAgLTcyLDggKzc1LDYgQEAKIENPTkZJR19UQVNLU1RBVFM9eQogQ09ORklHX1RBU0tfREVMQVlfQUNDVD15CiAjIENPTkZJR19UQVNLX1hBQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CkBAIC04MiwxMyArODMsMjAgQEAKICMgQ09ORklHX0NHUk9VUF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19DR1JPVVBfTlMgaXMgbm90IHNldAogQ09ORklHX0NQVVNFVFM9eQotQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQotQ09ORklHX0ZBSVJfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19GQUlSX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VSX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19DR1JPVVBfQ1BVQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19SRVNPVVJDRV9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiBDT05GSUdfUFJPQ19QSURfQ1BVU0VUPXkKIENPTkZJR19SRUxBWT15CitDT05GSUdfTkFNRVNQQUNFUz15CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAorIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAorIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKQEAgLTEwMiwxMSArMTEwLDEzIEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKKyMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CkBAIC0xMTQsNiArMTI0LDE1IEBACiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX1BST0ZJTElORz15CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19PUFJPRklMRT15CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtMTQxLDYgKzE2MCw3IEBACiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0NMQVNTSUNfUkNVPXkKIAogIwogIyBQbGF0Zm9ybSBzdXBwb3J0CkBAIC0xNjMsOCArMTgzLDggQEAKIENPTkZJR19WSU9DRD1tCiBDT05GSUdfVklPVEFQRT1tCiBDT05GSUdfVklPUEFUSD15Ci0jIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTEyeCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTEyMSBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1BNQUM9eQogQ09ORklHX1BQQ19QTUFDNjQ9eQogQ09ORklHX1BQQ19NQVBMRT15CkBAIC0xNzYsNyArMTk2LDYgQEAKIENPTkZJR19QUENfUEFTRU1JX0lPTU1VPXkKICMgQ09ORklHX1BQQ19QQVNFTUlfSU9NTVVfRE1BX0ZPUkNFIGlzIG5vdCBzZXQKIENPTkZJR19QUENfUEFTRU1JX01ESU89eQotQ09ORklHX0VMRUNUUkFfSURFPXkKIENPTkZJR19QUENfQ0VMTEVCPXkKICMgQ09ORklHX1BQQ19QUzMgaXMgbm90IHNldAogQ09ORklHX1BQQ19DRUxMPXkKQEAgLTE5MywxMSArMjEyLDEzIEBACiBDT05GSUdfQ0JFX1RIRVJNPW0KIENPTkZJR19DQkVfQ1BVRlJFUT1tCiBDT05GSUdfQ0JFX0NQVUZSRVFfUE1JPW0KK0NPTkZJR19PUFJPRklMRV9DRUxMPXkKICMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX05BVElWRT15CiBDT05GSUdfVURCR19SVEFTX0NPTlNPTEU9eQogQ09ORklHX1BQQ19VREJHX0JFQVQ9eQogQ09ORklHX1hJQ1M9eQorIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0CiBDT05GSUdfTVBJQz15CiAjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKIENPTkZJR19QUENfSTgyNTk9eQpAQCAtMjM2LDcgKzI1Nyw2IEBACiAjCiBDT05GSUdfQ1BVX0ZSRVFfUE1BQzY0PXkKIENPTkZJR19QUENfUEFTRU1JX0NQVUZSRVE9eQotIyBDT05GSUdfQ1BNMiBpcyBub3Qgc2V0CiBDT05GSUdfQVhPTl9SQU09bQogIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAogCkBAIC0yNTIsMTcgKzI3MiwyMSBAQAogIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAogQ09ORklHX0haPTI1MAorIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX0JLTCBpcyBub3Qgc2V0CiBDT05GSUdfQklORk1UX0VMRj15CitDT05GSUdfQ09NUEFUX0JJTkZNVF9FTEY9eQogQ09ORklHX0JJTkZNVF9NSVNDPW0KIENPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTEzCiBDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEU9eQogQ09ORklHX0lPTU1VX1ZNRVJHRT15CitDT05GSUdfSU9NTVVfSEVMUEVSPXkKIENPTkZJR19IT1RQTFVHX0NQVT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKIENPTkZJR19LRVhFQz15CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfQUxMX0NQVVM9eQpAQCAtMjk0LDExICszMTgsOSBAQAogIyBDT05GSUdfU0NIRURfU01UIGlzIG5vdCBzZXQKIENPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1dBTlRTX0ZSRUVaRVJfQ09OVFJPTD15CiAjIENPTkZJR19QTSBpcyBub3Qgc2V0Ci1DT05GSUdfU1VTUEVORF9TTVBfUE9TU0lCTEU9eQotQ09ORklHX0hJQkVSTkFUSU9OX1NNUF9QT1NTSUJMRT15CiBDT05GSUdfU0VDQ09NUD15Ci0jIENPTkZJR19XQU5UX0RFVklDRV9UUkVFIGlzIG5vdCBzZXQKIENPTkZJR19JU0FfRE1BX0FQST15CiAKICMKQEAgLTM1Miw2ICszNzQsNyBAQAogQ09ORklHX1hGUk1fVVNFUj1tCiAjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAogIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0tFWT1tCiAjIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQpAQCAtMzc1LDcgKzM5OCw3IEBACiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQogQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQotQ09ORklHX0lORVRfTFJPPW0KK0NPTkZJR19JTkVUX0xSTz15CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKQEAgLTM4OSwxNCArNDEyLDE0IEBACiAjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUj15CiAjIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9BRFZBTkNFRD15CiAKICMKICMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgogIwotQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LPXkKK0NPTkZJR19ORVRGSUxURVJfTkVUTElOSz1tCiBDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUU9bQogQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0VOQUJMRUQ9bQogQ09ORklHX05GX0NPTk5UUkFDSz1tCiBDT05GSUdfTkZfQ1RfQUNDVD15CiBDT05GSUdfTkZfQ09OTlRSQUNLX01BUks9eQpAQCAtNDIyLDggKzQ0NSwxMCBAQAogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRz1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9OT1RSQUNLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1JBVEVFU1Q9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVFJBQ0U9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE9QVFNUUklQPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5CWVRFUz1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5MSU1JVD1tCkBAIC00MzMsMTQgKzQ1OCwxNyBAQAogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EU0NQPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEVMUEVSPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSVBSQU5HRT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX09XTkVSPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1FVT1RBPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkFURUVTVD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRFPW0KQEAgLTQ1OCwxMyArNDg2LDEwIEBACiBDT05GSUdfTkZfQ09OTlRSQUNLX1BST0NfQ09NUEFUPXkKIENPTkZJR19JUF9ORl9RVUVVRT1tCiBDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQotQ09ORklHX0lQX05GX01BVENIX0lQUkFOR0U9bQotQ09ORklHX0lQX05GX01BVENIX1RPUz1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfUkVDRU5UPW0KIENPTkZJR19JUF9ORl9NQVRDSF9FQ049bQogQ09ORklHX0lQX05GX01BVENIX0FIPW0KIENPTkZJR19JUF9ORl9NQVRDSF9UVEw9bQotQ09ORklHX0lQX05GX01BVENIX09XTkVSPW0KIENPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRT1tCiBDT05GSUdfSVBfTkZfRklMVEVSPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KQEAgLTQ3NSw3ICs1MDAsNiBAQAogQ09ORklHX0lQX05GX1RBUkdFVF9NQVNRVUVSQURFPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfUkVESVJFQ1Q9bQogQ09ORklHX0lQX05GX1RBUkdFVF9ORVRNQVA9bQotQ09ORklHX0lQX05GX1RBUkdFVF9TQU1FPW0KIENPTkZJR19ORl9OQVRfU05NUF9CQVNJQz1tCiBDT05GSUdfTkZfTkFUX1BST1RPX0dSRT1tCiBDT05GSUdfTkZfTkFUX0ZUUD1tCkBAIC00ODYsNyArNTEwLDYgQEAKIENPTkZJR19ORl9OQVRfSDMyMz1tCiBDT05GSUdfTkZfTkFUX1NJUD1tCiBDT05GSUdfSVBfTkZfTUFOR0xFPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfVE9TPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfRUNOPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfVFRMPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfQ0xVU1RFUklQPW0KQEAgLTUxNyw2ICs1NDAsNyBAQAogIwogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CkBAIC01NjMsNyArNTg3LDcgQEAKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTY1NTM2Ci1DT05GSUdfQkxLX0RFVl9SQU1fQkxPQ0tTSVpFPTEwMjQKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQpAQCAtNTcxLDExICs1OTUsMTMgQEAKICMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CiAjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CiBDT05GSUdfSURFPXkKIENPTkZJR19CTEtfREVWX0lERT15CiAKICMKLSMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCisjIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKICMKICMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFRElTSz15CkBAIC01ODMsNiArNjA5LDcgQEAKICMgQ09ORklHX0JMS19ERVZfSURFQ1MgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9ERUxLSU4gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFQ0Q9eQorQ09ORklHX0JMS19ERVZfSURFQ0RfVkVSQk9TRV9FUlJPUlM9eQogIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSURFRkxPUFBZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSURFU0NTSSBpcyBub3Qgc2V0CkBAIC01OTQsMTIgKzYyMSwxMiBAQAogIwogQ09ORklHX0lERV9HRU5FUklDPXkKICMgQ09ORklHX0JMS19ERVZfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRE1BX1NGRj15CiAKICMKICMgUENJIElERSBjaGlwc2V0cyBzdXBwb3J0CiAjCiBDT05GSUdfQkxLX0RFVl9JREVQQ0k9eQotQ09ORklHX0lERVBDSV9TSEFSRV9JUlE9eQogQ09ORklHX0lERVBDSV9QQ0lCVVNfT1JERVI9eQogIyBDT05GSUdfQkxLX0RFVl9PRkZCT0FSRCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9HRU5FUklDPXkKQEAgLTYzNCw3ICs2NjEsNiBAQAogQ09ORklHX0JMS19ERVZfSURFX1BNQUM9eQogQ09ORklHX0JMS19ERVZfSURFX1BNQUNfQVRBMTAwRklSU1Q9eQogQ09ORklHX0JMS19ERVZfSURFRE1BX1BNQUM9eQotIyBDT05GSUdfSURFX0FSTSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVETUE9eQogQ09ORklHX0lERV9BUkNIX09CU09MRVRFX0lOSVQ9eQogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CkBAIC03MDEsNiArNzI3LDcgQEAKIENPTkZJR19TQ1NJX0lCTVZTQ1NJPXkKICMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9TWU01M0M4WFhfMj15CiBDT05GSUdfU0NTSV9TWU01M0M4WFhfRE1BX0FERFJFU1NJTkdfTU9ERT0wCkBAIC03NjAsNiArNzg3LDcgQEAKICMgQ09ORklHX1BBVEFfTVBJSVggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9PTERQSUlYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfTkVUQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05JTkpBMzIgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9OUzg3NDEwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfTlM4NzQxNSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX09QVEkgaXMgbm90IHNldApAQCAtNzc2LDYgKzgwNCw3IEBACiAjIENPTkZJR19QQVRBX1ZJQSBpcyBub3Qgc2V0CiBDT05GSUdfUEFUQV9XSU5CT05EPXkKIENPTkZJR19QQVRBX1BMQVRGT1JNPXkKKyMgQ09ORklHX1BBVEFfT0ZfUExBVEZPUk0gaXMgbm90IHNldAogQ09ORklHX1BBVEFfU0NDPXkKIENPTkZJR19NRD15CiBDT05GSUdfQkxLX0RFVl9NRD15CkBAIC04NDcsNyArODc2LDYgQEAKICMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CiBDT05GSUdfVFVOPW0KICMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CiBDT05GSUdfUEhZTElCPXkKIApAQCAtODYzLDExICs4OTEsOCBAQAogIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAogQ09ORklHX0JST0FEQ09NX1BIWT1tCiAjIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKLUNPTkZJR19GSVhFRF9QSFk9bQotQ09ORklHX0ZJWEVEX01JSV8xMF9GRFg9eQotQ09ORklHX0ZJWEVEX01JSV8xMDBfRkRYPXkKLSMgQ09ORklHX0ZJWEVEX01JSV8xMDAwX0ZEWCBpcyBub3Qgc2V0Ci1DT05GSUdfRklYRURfTUlJX0FNTlQ9MQorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19NSUk9eQpAQCAtODk5LDYgKzkyNCw3IEBACiAjIENPTkZJR19ORTJLX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR184MTM5Q1AgaXMgbm90IHNldAogIyBDT05GSUdfODEzOVRPTyBpcyBub3Qgc2V0CisjIENPTkZJR19SNjA0MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TSVM5MDAgaXMgbm90IHNldAogIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CkBAIC05MTIsNiArOTM4LDkgQEAKICMgQ09ORklHX0UxMDAwX05BUEkgaXMgbm90IHNldAogIyBDT05GSUdfRTEwMDBfRElTQUJMRV9QQUNLRVRfU1BMSVQgaXMgbm90IHNldAogIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwRV9FTkFCTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JR0IgaXMgbm90IHNldAogIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKICMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CkBAIC05NDAsNiArOTY5LDcgQEAKIENPTkZJR19QQVNFTUlfTUFDPXkKICMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19URUhVVEkgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAogQ09ORklHX1RSPXkKIENPTkZJR19JQk1PTD15CiAjIENPTkZJR18zQzM1OSBpcyBub3Qgc2V0CkBAIC05NzcsNyArMTAwNyw2IEBACiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKIENPTkZJR19TTEhDPW0KICMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogQ09ORklHX05FVENPTlNPTEU9eQogIyBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDIGlzIG5vdCBzZXQKIENPTkZJR19ORVRQT0xMPXkKQEAgLTEwNTYsNiArMTA4NSw3IEBACiBDT05GSUdfSFdfQ09OU09MRT15CiAjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CiAKICMKICMgU2VyaWFsIGRyaXZlcnMKQEAgLTExMDMsNiArMTEzMyw3IEBACiAjIENPTkZJR19TWU5DTElOS19DUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVJETUFOXzQwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ0FSRE1BTl80MDQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQV0lSRUxFU1MgaXMgbm90IHNldAogQ09ORklHX1JBV19EUklWRVI9eQogQ09ORklHX01BWF9SQVdfREVWUz0yNTYKICMgQ09ORklHX0hBTkdDSEVDS19USU1FUiBpcyBub3Qgc2V0CkBAIC0xMTUxLDEzICsxMTgyLDEyIEBACiAjCiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwotIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRUVQUk9NIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAorIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CkBAIC0xMTczLDYgKzEyMDMsNyBAQAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogCiAjCkBAIC0xMzM3LDYgKzEzNjgsNyBAQAogIyBDT05GSUdfU05EX0JUODdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9DQTAxMDYgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0NNSVBDSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfT1hZR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9DUzQyODEgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0NTNDZYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQ1M1NTMwIGlzIG5vdCBzZXQKQEAgLTEzNjIsNiArMTM5NCw3IEBACiAjIENPTkZJR19TTkRfSERBX0lOVEVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9IRFNQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9IRFNQTSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSElGSUVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9JQ0UxNzEyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9JQ0UxNzI0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9JTlRFTDhYMCBpcyBub3Qgc2V0CkBAIC0xMzc5LDYgKzE0MTIsNyBAQAogIyBDT05GSUdfU05EX1RSSURFTlQgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1ZJQTgyWFggaXMgbm90IHNldAogIyBDT05GSUdfU05EX1ZJQTgyWFhfTU9ERU0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZJUlRVT1NPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9WWDIyMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfWU1GUENJIGlzIG5vdCBzZXQKIApAQCAtMTQyNiw2ICsxNDYwLDEwIEBACiAjCiAKICMKKyMgQUxTQSBTb0MgYXVkaW8gZm9yIEZyZWVzY2FsZSBTT0NzCisjCisKKyMKICMgT3BlbiBTb3VuZCBTeXN0ZW0KICMKICMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKQEAgLTE0NDcsNiArMTQ4NSw3IEBACiBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQogQ09ORklHX1VTQj15CiAjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCkBAIC0xNDYwLDEwICsxNDk5LDEwIEBACiAjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwogIwogQ09ORklHX1VTQl9FSENJX0hDRD15Ci0jIENPTkZJR19VU0JfRUhDSV9TUExJVF9JU08gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAogQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEPXkKIENPTkZJR19VU0JfRUhDSV9CSUdfRU5ESUFOX01NSU89eQorIyBDT05GSUdfVVNCX0VIQ0lfSENEX1BQQ19PRiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GIGlzIG5vdCBzZXQKQEAgLTE1MTIsMTAgKzE1NTEsNiBAQAogIwogIyBVU0IgcG9ydCBkcml2ZXJzCiAjCi0KLSMKLSMgVVNCIFNlcmlhbCBDb252ZXJ0ZXIgc3VwcG9ydAotIwogIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CiAKICMKQEAgLTE1NDEsMTYgKzE1NzYsOSBAQAogIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEU0wgbW9kZW0gc3VwcG9ydAotIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAogQ09ORklHX0lORklOSUJBTkQ9bQogIyBDT05GSUdfSU5GSU5JQkFORF9VU0VSX01BRCBpcyBub3Qgc2V0CkBAIC0xNTYyLDYgKzE1OTAsNyBAQAogQ09ORklHX0lORklOSUJBTkRfRUhDQT1tCiAjIENPTkZJR19JTkZJTklCQU5EX0FNU08xMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01MWDRfSU5GSU5JQkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZJTklCQU5EX05FUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5GSU5JQkFORF9JUE9JQj1tCiAjIENPTkZJR19JTkZJTklCQU5EX0lQT0lCX0NNIGlzIG5vdCBzZXQKIENPTkZJR19JTkZJTklCQU5EX0lQT0lCX0RFQlVHPXkKQEAgLTE1NzYsOCArMTYwNSwxMyBAQAogIyBDT05GSUdfRURBQ19ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfRURBQ19NTV9FREFDPXkKIENPTkZJR19FREFDX1BBU0VNST15CisjIENPTkZJR19FREFDX0NFTEwgaXMgbm90IHNldAogQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15CisKKyMKKyMgQ29uZmxpY3RpbmcgUlRDIG9wdGlvbiBoYXMgYmVlbiBzZWxlY3RlZCwgY2hlY2sgR0VOX1JUQyBhbmQgUlRDCisjCiBDT05GSUdfUlRDX0hDVE9TWVM9eQogQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKICMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CkBAIC0xNjA0LDYgKzE2MzgsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogCiAjCiAjIFNQSSBSVEMgZHJpdmVycwpAQCAtMTYxMyw5ICsxNjQ4LDEwIEBACiAjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCiAjCiAjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldApAQCAtMTYyMyw2ICsxNjU5LDcgQEAKICMKICMgb24tQ1BVIFJUQyBkcml2ZXJzCiAjCisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKIAogIwogIyBVc2Vyc3BhY2UgSS9PCkBAIC0xNjY1LDEyICsxNzAyLDEwIEBACiAjIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKICMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQVVUT0ZTNF9GUz1tCiAjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKQEAgLTE3MTksOCArMTc1NCwxMCBAQAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9eQogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CkBAIC0xODIxLDcgKzE4NTgsNiBAQAogQ09ORklHX05MU19LT0k4X1U9bQogQ09ORklHX05MU19VVEY4PW0KICMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VQ0NfU0xPVyBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwpAQCAtMTgzNSw2ICsxODcxLDggQEAKIENPTkZJR19MSUJDUkMzMkM9bQogQ09ORklHX1pMSUJfSU5GTEFURT15CiBDT05GSUdfWkxJQl9ERUZMQVRFPW0KK0NPTkZJR19MWk9fQ09NUFJFU1M9bQorQ09ORklHX0xaT19ERUNPTVBSRVNTPW0KIENPTkZJR19URVhUU0VBUkNIPXkKIENPTkZJR19URVhUU0VBUkNIX0tNUD1tCiBDT05GSUdfVEVYVFNFQVJDSF9CTT1tCkBAIC0xODQzLDExICsxODgxLDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQotQ09ORklHX0lOU1RSVU1FTlRBVElPTj15Ci1DT05GSUdfUFJPRklMSU5HPXkKLUNPTkZJR19PUFJPRklMRT15Ci0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogCiAjCiAjIEtlcm5lbCBoYWNraW5nCkBAIC0xODY2LDYgKzE4OTksNyBAQAogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldApAQCAtMTg3OCw5ICsxOTEyLDkgQEAKICMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotQ09ORklHX0ZPUkNFRF9JTkxJTklORz15CiAjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1c9eQpAQCAtMTkwOCw3ICsxOTQyLDkgQEAKIENPTkZJR19BU1lOQ19YT1I9eQogQ09ORklHX0NSWVBUTz15CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FFQUQ9bQogQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19TRVFJVj1tCiBDT05GSUdfQ1JZUFRPX0hBU0g9eQogQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKIENPTkZJR19DUllQVE9fSE1BQz15CkBAIC0xOTIxLDEyICsxOTU3LDE1IEBACiBDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCiBDT05GSUdfQ1JZUFRPX1dQNTEyPW0KIENPTkZJR19DUllQVE9fVEdSMTkyPW0KLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0dGMTI4TVVMPW0KIENPTkZJR19DUllQVE9fRUNCPW0KIENPTkZJR19DUllQVE9fQ0JDPXkKIENPTkZJR19DUllQVE9fUENCQz1tCiAjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19DVFI9bQorQ09ORklHX0NSWVBUT19HQ009bQorQ09ORklHX0NSWVBUT19DQ009bQogIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0RFUz15CiAjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKQEAgLTE5NDIsMTEgKzE5ODEsMTMgQEAKIENPTkZJR19DUllQVE9fS0hBWkFEPW0KIENPTkZJR19DUllQVE9fQU5VQklTPW0KICMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fU0FMU0EyMD1tCiBDT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQogQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCiBDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCiAjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19URVNUPW0KLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQVVUSEVOQz1tCitDT05GSUdfQ1JZUFRPX0xaTz1tCiAjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BzM19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wczNfZGVmY29uZmlnCmluZGV4IDc5OTQ5NTVjLi43YTY0YzU2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wczNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BzM19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjQtcmM4Ci0jIFdlZCBKYW4gMTYgMTQ6MzE6MjEgMjAwOAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI1LXJjNgorIyBUaHUgTWFyIDIwIDExOjA3OjA0IDIwMDgKICMKIENPTkZJR19QUEM2ND15CiAKQEAgLTI4LDYgKzI4LDcgQEAKIENPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBPXkKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQogQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CkBAIC01MSw3ICs1Miw2IEBACiAjIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAotIyBDT05GSUdfUFBDX09GX1BMQVRGT1JNX1BDSSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogCiAjCkBAIC02OCwxNyArNjgsMjEgQEAKIENPTkZJR19QT1NJWF9NUVVFVUU9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKICMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQotQ09ORklHX0ZBSVJfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19GQUlSX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VSX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CitDT05GSUdfTkFNRVNQQUNFUz15CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAorIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAorIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKQEAgLTkyLDE3ICs5NiwyNyBAQAogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CisjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9GSUxJTkc9eQorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfT1BST0ZJTEU9bQorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKIENPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKQEAgLTEzMSw2ICsxNDUsNyBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CiAKICMKICMgUGxhdGZvcm0gc3VwcG9ydApAQCAtMTQxLDggKzE1Niw4IEBACiAjIENPTkZJR19QUENfODZ4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfUFNFUklFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfSVNFUklFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTEyeCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTEyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfTUFQTEUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BBU0VNSSBpcyBub3Qgc2V0CkBAIC0xNzMsNiArMTg4LDcgQEAKIENPTkZJR19TUFVfRlM9eQogQ09ORklHX1NQVV9CQVNFPXkKICMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUElDIGlzIG5vdCBzZXQKICMgQ09ORklHX01QSUMgaXMgbm90IHNldAogIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldApAQCAtMTg0LDcgKzIwMCw2IEBACiAjIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAogIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUE0yIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKIAogIwpAQCAtMTk5LDE1ICsyMTQsMTkgQEAKICMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKIENPTkZJR19IWj0yNTAKKyMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9CS0wgaXMgbm90IHNldAogQ09ORklHX0JJTkZNVF9FTEY9eQorQ09ORklHX0NPTVBBVF9CSU5GTVRfRUxGPXkKIENPTkZJR19CSU5GTVRfTUlTQz15CiBDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMwogIyBDT05GSUdfSU9NTVVfVk1FUkdFIGlzIG5vdCBzZXQKK0NPTkZJR19JT01NVV9IRUxQRVI9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiBDT05GSUdfS0VYRUM9eQogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUlFfQUxMX0NQVVMgaXMgbm90IHNldApAQCAtMjQxLDcgKzI2MCw2IEBACiAjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAogIyBDT05GSUdfUE0gaXMgbm90IHNldAogIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5UX0RFVklDRV9UUkVFIGlzIG5vdCBzZXQKIENPTkZJR19JU0FfRE1BX0FQST15CiAKICMKQEAgLTI3MSw2ICsyODksNyBAQAogIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKQEAgLTMzOCw2ICszNTcsNyBAQAogIwogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiBDT05GSUdfQlQ9bQogQ09ORklHX0JUX0wyQ0FQPW0KQEAgLTQwNSwxMSArNDI1LDEzIEBACiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT02NTUzNQotQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKICMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKICMKQEAgLTQ3Miw3ICs0OTQsOSBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQorIyBDT05GSUdfRTEwMDBFX0VOQUJMRUQgaXMgbm90IHNldAogQ09ORklHX0dFTElDX05FVD15CitDT05GSUdfR0VMSUNfV0lSRUxFU1M9eQogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKIAogIwpAQCAtNDgyLDkgKzUwNiw4IEBACiBDT05GSUdfV0xBTl84MDIxMT15CiAjIENPTkZJR19MSUJFUlRBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ORVRfUk5ESVNfV0xBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAotQ09ORklHX1pEMTIxMVJXPW0KLSMgQ09ORklHX1pEMTIxMVJXX0RFQlVHIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgTmV0d29yayBBZGFwdGVycwpAQCAtNTA3LDcgKzUzMCw2IEBACiAjIENPTkZJR19XQU4gaXMgbm90IHNldAogIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKQEAgLTYwNiw2ICs2MjgsNyBAQAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogCiAjCkBAIC03NDIsNiArNzY1LDEwIEBACiAjCiAKICMKKyMgQUxTQSBTb0MgYXVkaW8gZm9yIEZyZWVzY2FsZSBTT0NzCisjCisKKyMKICMgT3BlbiBTb3VuZCBTeXN0ZW0KICMKICMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKQEAgLTc2OSw2ICs3OTYsNyBAQAogQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKIENPTkZJR19VU0I9bQogIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwpAQCAtNzgyLDEwICs4MTAsMTAgQEAKICMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCiBDT05GSUdfVVNCX0VIQ0lfSENEPW0KLSMgQ09ORklHX1VTQl9FSENJX1NQTElUX0lTTyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VIQ0lfQklHX0VORElBTl9NTUlPPXkKKyMgQ09ORklHX1VTQl9FSENJX0hDRF9QUENfT0YgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9bQogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRiBpcyBub3Qgc2V0CkBAIC04MzMsMTAgKzg2MSw2IEBACiAjCiAjIFVTQiBwb3J0IGRyaXZlcnMKICMKLQotIwotIyBVU0IgU2VyaWFsIENvbnZlcnRlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKIAogIwpAQCAtODYyLDE5ICs4ODYsMTMgQEAKICMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRFNMIG1vZGVtIHN1cHBvcnQKLSMKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VEQUMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAogCiAjCiAjIFVzZXJzcGFjZSBJL08KQEAgLTkwMCw4ICs5MTgsNyBAQAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CiBDT05GSUdfUVVPVEE9eQpAQCAtOTEwLDcgKzkyNyw2IEBACiAjIENPTkZJR19RRk1UX1YxIGlzIG5vdCBzZXQKIENPTkZJR19RRk1UX1YyPXkKIENPTkZJR19RVU9UQUNUTD15Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfQVVUT0ZTX0ZTPW0KIENPTkZJR19BVVRPRlM0X0ZTPW0KICMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldApAQCAtOTU5LDggKzk3NSwxMCBAQAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKQEAgLTEwMzYsNyArMTA1NCw2IEBACiAjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKICMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VQ0NfU0xPVyBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwpAQCAtMTA0OCwxNSArMTA2NSwxMiBAQAogQ09ORklHX0NSQzMyPXkKICMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19MWk9fQ09NUFJFU1M9bQorQ09ORklHX0xaT19ERUNPTVBSRVNTPW0KIENPTkZJR19QTElTVD15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19JTlNUUlVNRU5UQVRJT049eQotQ09ORklHX1BST0ZJTElORz15Ci1DT05GSUdfT1BST0ZJTEU9bQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgaGFja2luZwpAQCAtMTA4Nyw5ICsxMTAxLDkgQEAKICMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19MSVNUPXkKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRURfSU5MSU5JTkc9eQogIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XPXkKQEAgLTExMDgsNyArMTEyMiw5IEBACiAjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPPXkKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQUVBRD1tCiBDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CitDT05GSUdfQ1JZUFRPX1NFUUlWPW0KIENPTkZJR19DUllQVE9fTUFOQUdFUj15CiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CkBAIC0xMTIwLDEyICsxMTM2LDE1IEBACiAjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0dGMTI4TVVMPW0KIENPTkZJR19DUllQVE9fRUNCPW0KIENPTkZJR19DUllQVE9fQ0JDPXkKIENPTkZJR19DUllQVE9fUENCQz1tCiAjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19DVFI9bQorQ09ORklHX0NSWVBUT19HQ009bQorQ09ORklHX0NSWVBUT19DQ009bQogIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0RFUz15CiAjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKQEAgLTExNDAsMTEgKzExNTksMTMgQEAKICMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1NBTFNBMjA9bQogIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0xaTz1tCiBDT05GSUdfQ1JZUFRPX0hXPXkKICMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wc2VyaWVzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BzZXJpZXNfZGVmY29uZmlnCmluZGV4IDkyYmJmNTEuLjc1NWFjYTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BzZXJpZXNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BzZXJpZXNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI0LXJjNAotIyBUaHUgRGVjICA2IDE2OjQ5OjE1IDIwMDcKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNS1yYzYKKyMgVGh1IE1hciAyMCAxMTowODowMSAyMDA4CiAjCiBDT05GSUdfUFBDNjQ9eQogCkBAIC0yOCw2ICsyOCw3IEBACiBDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQT15CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQpAQCAtNzEsOCArNzIsNiBAQAogQ09ORklHX1RBU0tfREVMQVlfQUNDVD15CiBDT05GSUdfVEFTS19YQUNDVD15CiBDT05GSUdfVEFTS19JT19BQ0NPVU5USU5HPXkKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKIENPTkZJR19BVURJVD15CiBDT05GSUdfQVVESVRTWVNDQUxMPXkKIENPTkZJR19BVURJVF9UUkVFPXkKQEAgLTgzLDEzICs4MiwyMCBAQAogIyBDT05GSUdfQ0dST1VQX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19DR1JPVVBfTlM9eQogQ09ORklHX0NQVVNFVFM9eQotQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQotIyBDT05GSUdfRkFJUl9VU0VSX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19GQUlSX0NHUk9VUF9TQ0hFRD15CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VSX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0dST1VQX0NQVUFDQ1Q9eQorIyBDT05GSUdfUkVTT1VSQ0VfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogQ09ORklHX1BST0NfUElEX0NQVVNFVD15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CitDT05GSUdfTkFNRVNQQUNFUz15CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAorIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAorIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKQEAgLTEwMywxMSArMTA5LDEzIEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKKyMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CkBAIC0xMTUsNiArMTIzLDE2IEBACiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX1BST0ZJTElORz15CitDT05GSUdfTUFSS0VSUz15CitDT05GSUdfT1BST0ZJTEU9eQorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorQ09ORklHX0tQUk9CRVM9eQorQ09ORklHX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCkBAIC0xNDIsNiArMTYwLDcgQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQogCiAjCiAjIFBsYXRmb3JtIHN1cHBvcnQKQEAgLTE1Niw4ICsxNzUsOCBAQAogQ09ORklHX1NDQU5MT0c9bQogQ09ORklHX0xQQVJDRkc9eQogIyBDT05GSUdfUFBDX0lTRVJJRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzUyMDAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUxMnggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUxMjEgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX01BUExFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19QQVNFTUkgaXMgbm90IHNldApAQCAtMTcwLDYgKzE4OSw3IEBACiBDT05GSUdfUFBDX05BVElWRT15CiAjIENPTkZJR19VREJHX1JUQVNfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfWElDUz15CisjIENPTkZJR19JUElDIGlzIG5vdCBzZXQKIENPTkZJR19NUElDPXkKICMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAogQ09ORklHX1BQQ19JODI1OT15CkBAIC0xODYsNyArMjA2LDYgQEAKICMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQTTIgaXMgbm90IHNldAogIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAogCiAjCkBAIC0yMDEsMTcgKzIyMCwyMSBAQAogIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAogQ09ORklHX0haPTI1MAorIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX0JLTCBpcyBub3Qgc2V0CiBDT05GSUdfQklORk1UX0VMRj15CitDT05GSUdfQ09NUEFUX0JJTkZNVF9FTEY9eQogQ09ORklHX0JJTkZNVF9NSVNDPW0KIENPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTEzCiBDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEU9eQogQ09ORklHX0lPTU1VX1ZNRVJHRT15CitDT05GSUdfSU9NTVVfSEVMUEVSPXkKIENPTkZJR19IT1RQTFVHX0NQVT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKIENPTkZJR19LRVhFQz15CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfQUxMX0NQVVM9eQpAQCAtMjQ1LDkgKzI2OCw3IEBACiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKICMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTSBpcyBub3Qgc2V0Ci1DT05GSUdfU1VTUEVORF9TTVBfUE9TU0lCTEU9eQogQ09ORklHX1NFQ0NPTVA9eQotIyBDT05GSUdfV0FOVF9ERVZJQ0VfVFJFRSBpcyBub3Qgc2V0CiBDT05GSUdfSVNBX0RNQV9BUEk9eQogCiAjCkBAIC0yODgsNiArMzA5LDcgQEAKIENPTkZJR19YRlJNX1VTRVI9bQogIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAogQ09ORklHX05FVF9LRVk9bQogIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKQEAgLTMyMiwxNCArMzQ0LDE0IEBACiAjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUj15CiAjIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9BRFZBTkNFRD15CiAKICMKICMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgogIwotQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LPXkKK0NPTkZJR19ORVRGSUxURVJfTkVUTElOSz1tCiBDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUU9bQogQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0VOQUJMRUQ9bQogQ09ORklHX05GX0NPTk5UUkFDSz1tCiBDT05GSUdfTkZfQ1RfQUNDVD15CiBDT05GSUdfTkZfQ09OTlRSQUNLX01BUks9eQpAQCAtMzUxLDYgKzM3Myw3IEBACiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9NQVJLPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUU9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZMT0c9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfUkFURUVTVD1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BNU1M9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkJZVEVTPW0KQEAgLTM2MSwxNCArMzg0LDE3IEBACiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1A9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVI9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9JUFJBTkdFPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfT1dORVI9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1k9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEE9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SQVRFRVNUPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE09bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVEU9bQpAQCAtMzg2LDEzICs0MTIsMTAgQEAKIENPTkZJR19ORl9DT05OVFJBQ0tfUFJPQ19DT01QQVQ9eQogQ09ORklHX0lQX05GX1FVRVVFPW0KIENPTkZJR19JUF9ORl9JUFRBQkxFUz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfSVBSQU5HRT1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfVE9TPW0KIENPTkZJR19JUF9ORl9NQVRDSF9SRUNFTlQ9bQogQ09ORklHX0lQX05GX01BVENIX0VDTj1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfQUg9bQogQ09ORklHX0lQX05GX01BVENIX1RUTD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfT1dORVI9bQogQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KIENPTkZJR19JUF9ORl9GSUxURVI9bQogQ09ORklHX0lQX05GX1RBUkdFVF9SRUpFQ1Q9bQpAQCAtNDAzLDcgKzQyNiw2IEBACiBDT05GSUdfSVBfTkZfVEFSR0VUX01BU1FVRVJBREU9bQogQ09ORklHX0lQX05GX1RBUkdFVF9SRURJUkVDVD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX05FVE1BUD1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX1NBTUU9bQogQ09ORklHX05GX05BVF9TTk1QX0JBU0lDPW0KIENPTkZJR19ORl9OQVRfRlRQPW0KIENPTkZJR19ORl9OQVRfSVJDPW0KQEAgLTQzOSw2ICs0NjEsNyBAQAogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVENQUFJPQkUgaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldApAQCAtNDkzLDcgKzUxNiw3IEBACiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT02NTUzNgotQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKQEAgLTUwMSwxNiArNTI0LDE5IEBACiAjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAogIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQogQ09ORklHX0lERT15CiBDT05GSUdfQkxLX0RFVl9JREU9eQogCiAjCi0jIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcworIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCiAjCiAjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERURJU0s9eQogIyBDT05GSUdfSURFRElTS19NVUxUSV9NT0RFIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERUNEPXkKK0NPTkZJR19CTEtfREVWX0lERUNEX1ZFUkJPU0VfRVJST1JTPXkKICMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lERUZMT1BQWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lERVNDU0kgaXMgbm90IHNldApAQCAtNTIyLDEyICs1NDgsMTIgQEAKICMKIENPTkZJR19JREVfR0VORVJJQz15CiAjIENPTkZJR19CTEtfREVWX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURNQV9TRkY9eQogCiAjCiAjIFBDSSBJREUgY2hpcHNldHMgc3VwcG9ydAogIwogQ09ORklHX0JMS19ERVZfSURFUENJPXkKLUNPTkZJR19JREVQQ0lfU0hBUkVfSVJRPXkKIENPTkZJR19JREVQQ0lfUENJQlVTX09SREVSPXkKICMgQ09ORklHX0JMS19ERVZfT0ZGQk9BUkQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfR0VORVJJQz15CkBAIC01NTgsNyArNTg0LDYgQEAKICMgQ09ORklHX0JMS19ERVZfVFJNMjkwIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVklBODJDWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVEM4NkMwMDEgaXMgbm90IHNldAotIyBDT05GSUdfSURFX0FSTSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVETUE9eQogQ09ORklHX0lERV9BUkNIX09CU09MRVRFX0lOSVQ9eQogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CkBAIC02MjcsNiArNjUyLDcgQEAKICMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1BQQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lNTSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9TWU01M0M4WFhfMj15CiBDT05GSUdfU0NTSV9TWU01M0M4WFhfRE1BX0FERFJFU1NJTkdfTU9ERT0wCkBAIC02ODUsNiArNzExLDcgQEAKICMgQ09ORklHX1BBVEFfTVBJSVggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9PTERQSUlYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfTkVUQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05JTkpBMzIgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9OUzg3NDEwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfTlM4NzQxNSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX09QVEkgaXMgbm90IHNldApAQCAtNjk5LDYgKzcyNiw3IEBACiAjIENPTkZJR19QQVRBX1NJUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1ZJQSBpcyBub3Qgc2V0CiBDT05GSUdfUEFUQV9XSU5CT05EPXkKKyMgQ09ORklHX1BBVEFfUExBVEZPUk0gaXMgbm90IHNldAogQ09ORklHX01EPXkKIENPTkZJR19CTEtfREVWX01EPXkKIENPTkZJR19NRF9MSU5FQVI9eQpAQCAtNzM3LDcgKzc2NSw2IEBACiAjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAogQ09ORklHX1RVTj1tCiAjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAogIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQpAQCAtNzY5LDYgKzc5Niw3IEBACiAjIENPTkZJR19ORTJLX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR184MTM5Q1AgaXMgbm90IHNldAogIyBDT05GSUdfODEzOVRPTyBpcyBub3Qgc2V0CisjIENPTkZJR19SNjA0MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TSVM5MDAgaXMgbm90IHNldAogIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CkBAIC03ODMsNiArODExLDkgQEAKICMgQ09ORklHX0UxMDAwX05BUEkgaXMgbm90IHNldAogIyBDT05GSUdfRTEwMDBfRElTQUJMRV9QQUNLRVRfU1BMSVQgaXMgbm90IHNldAogIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwRV9FTkFCTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JR0IgaXMgbm90IHNldAogIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKICMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CkBAIC04MTEsNiArODQyLDcgQEAKICMgQ09ORklHX1BBU0VNSV9NQUMgaXMgbm90IHNldAogIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CiBDT05GSUdfVFI9eQogQ09ORklHX0lCTU9MPXkKICMgQ09ORklHXzNDMzU5IGlzIG5vdCBzZXQKQEAgLTg0Nyw3ICs4NzksNiBAQAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CiBDT05GSUdfU0xIQz1tCiAjIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKIENPTkZJR19ORVRDT05TT0xFPXkKICMgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUUE9MTD15CkBAIC05MjcsNiArOTU4LDcgQEAKIENPTkZJR19IV19DT05TT0xFPXkKICMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKIAogIwogIyBTZXJpYWwgZHJpdmVycwpAQCAtOTUxLDcgKzk4Myw2IEBACiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKICMgQ09ORklHX1BSSU5URVIgaXMgbm90IHNldAogIyBDT05GSUdfUFBERVYgaXMgbm90IHNldAotIyBDT05GSUdfVElQQVIgaXMgbm90IHNldAogQ09ORklHX0hWQ19EUklWRVI9eQogQ09ORklHX0hWQ19DT05TT0xFPXkKIENPTkZJR19IVkNfUlRBUz15CkBAIC0xMDA5LDEzICsxMDQwLDEyIEBACiAjCiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwotIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRUVQUk9NIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAorIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CkBAIC0xMDMxLDYgKzEwNjEsNyBAQAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogCiAjCkBAIC0xMTY2LDYgKzExOTcsNyBAQAogQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKIENPTkZJR19VU0I9eQogIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwpAQCAtMTE3OSw5ICsxMjExLDkgQEAKICMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCiBDT05GSUdfVVNCX0VIQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9FSENJX1NQTElUX0lTTyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhDSV9IQ0RfUFBDX09GIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKICMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0YgaXMgbm90IHNldApAQCAtMTIzMCwxMCArMTI2Miw2IEBACiAjIFVTQiBwb3J0IGRyaXZlcnMKICMKICMgQ09ORklHX1VTQl9VU1M3MjAgaXMgbm90IHNldAotCi0jCi0jIFVTQiBTZXJpYWwgQ29udmVydGVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAogCiAjCkBAIC0xMjU5LDE2ICsxMjg3LDkgQEAKICMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRFNMIG1vZGVtIHN1cHBvcnQKLSMKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKIENPTkZJR19JTkZJTklCQU5EPW0KIENPTkZJR19JTkZJTklCQU5EX1VTRVJfTUFEPW0KQEAgLTEyODEsNiArMTMwMiw3IEBACiBDT05GSUdfSU5GSU5JQkFORF9FSENBPW0KICMgQ09ORklHX0lORklOSUJBTkRfQU1TTzExMDAgaXMgbm90IHNldAogIyBDT05GSUdfTUxYNF9JTkZJTklCQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORklOSUJBTkRfTkVTIGlzIG5vdCBzZXQKIENPTkZJR19JTkZJTklCQU5EX0lQT0lCPW0KICMgQ09ORklHX0lORklOSUJBTkRfSVBPSUJfQ00gaXMgbm90IHNldAogQ09ORklHX0lORklOSUJBTkRfSVBPSUJfREVCVUc9eQpAQCAtMTI4OSw2ICsxMzExLDcgQEAKICMgQ09ORklHX0lORklOSUJBTkRfSVNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19FREFDIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogCiAjCkBAIC0xMzM0LDEyICsxMzU3LDEwIEBACiBDT05GSUdfT0NGUzJfRlM9bQogQ09ORklHX09DRlMyX0RFQlVHX01BU0tMT0c9eQogIyBDT05GSUdfT0NGUzJfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0FVVE9GUzRfRlM9bQogQ09ORklHX0ZVU0VfRlM9bQpAQCAtMTM4OCw4ICsxNDA5LDEwIEBACiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz15CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKQEAgLTE0NzMsNyArMTQ5Niw2IEBACiAjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKICMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VQ0NfU0xPVyBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwpAQCAtMTQ4Nyw2ICsxNTA5LDggQEAKIENPTkZJR19MSUJDUkMzMkM9bQogQ09ORklHX1pMSUJfSU5GTEFURT15CiBDT05GSUdfWkxJQl9ERUZMQVRFPW0KK0NPTkZJR19MWk9fQ09NUFJFU1M9bQorQ09ORklHX0xaT19ERUNPTVBSRVNTPW0KIENPTkZJR19URVhUU0VBUkNIPXkKIENPTkZJR19URVhUU0VBUkNIX0tNUD1tCiBDT05GSUdfVEVYVFNFQVJDSF9CTT1tCkBAIC0xNDk1LDExICsxNTE5LDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQotQ09ORklHX0lOU1RSVU1FTlRBVElPTj15Ci1DT05GSUdfUFJPRklMSU5HPXkKLUNPTkZJR19PUFJPRklMRT15Ci1DT05GSUdfS1BST0JFUz15Ci1DT05GSUdfTUFSS0VSUz15CiAKICMKICMgS2VybmVsIGhhY2tpbmcKQEAgLTE1MTgsNiArMTUzNyw3IEBACiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC0xNTMwLDkgKzE1NTAsMTAgQEAKICMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotQ09ORklHX0ZPUkNFRF9JTkxJTklORz15CiAjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tQUk9CRVNfU0FOSVRZX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MS0RUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CkBAIC0xNTU3LDcgKzE1NzgsOSBAQAogIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUTz15CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FFQUQ9bQogQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19TRVFJVj1tCiBDT05GSUdfQ1JZUFRPX0hBU0g9eQogQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKIENPTkZJR19DUllQVE9fSE1BQz15CkBAIC0xNTcwLDEyICsxNTkzLDE1IEBACiBDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCiBDT05GSUdfQ1JZUFRPX1dQNTEyPW0KIENPTkZJR19DUllQVE9fVEdSMTkyPW0KLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0dGMTI4TVVMPW0KIENPTkZJR19DUllQVE9fRUNCPW0KIENPTkZJR19DUllQVE9fQ0JDPXkKIENPTkZJR19DUllQVE9fUENCQz1tCiAjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19DVFI9bQorQ09ORklHX0NSWVBUT19HQ009bQorQ09ORklHX0NSWVBUT19DQ009bQogIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0RFUz15CiAjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKQEAgLTE1OTEsMTEgKzE2MTcsMTMgQEAKIENPTkZJR19DUllQVE9fS0hBWkFEPW0KIENPTkZJR19DUllQVE9fQU5VQklTPW0KICMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fU0FMU0EyMD1tCiBDT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQogQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCiBDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCiAjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19URVNUPW0KLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQVVUSEVOQz1tCitDT05GSUdfQ1JZUFRPX0xaTz1tCiAjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggNDg0NmJmNS4uNTkzMTFlYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTM1Myw2ICszNTMsMTIgQEAKIAlhY2NvdW50X3Byb2Nlc3NfdnRpbWUoY3VycmVudCk7CiAJY2FsY3VsYXRlX3N0ZWFsX3RpbWUoKTsKIAorCS8qCisJICogV2UgY2FuJ3QgdGFrZSBhIFBNVSBleGNlcHRpb24gaW5zaWRlIF9zd2l0Y2goKSBzaW5jZSB0aGVyZSBpcyBhCisJICogd2luZG93IHdoZXJlIHRoZSBrZXJuZWwgc3RhY2sgU0xCIGFuZCB0aGUga2VybmVsIHN0YWNrIGFyZSBvdXQKKwkgKiBvZiBzeW5jLiBIYXJkIGRpc2FibGUgaGVyZS4KKwkgKi8KKwloYXJkX2lycV9kaXNhYmxlKCk7CiAJbGFzdCA9IF9zd2l0Y2gob2xkX3RocmVhZCwgbmV3X3RocmVhZCk7CiAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wdHJhY2UuYwppbmRleCA3NjczZTk4Li4yYTlmZTk3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHRyYWNlLmMKQEAgLTUzMCwxNSArNTMwLDIxIEBACiAJCS0tY291bnQ7CiAJfQogCi0JaWYgKGtidWYpCisJaWYgKGtidWYpIHsKIAkJZm9yICg7IGNvdW50ID4gMCAmJiBwb3MgPD0gUFRfTUFYX1BVVF9SRUc7IC0tY291bnQpCiAJCQlyZWdzW3BvcysrXSA9ICprKys7Ci0JZWxzZQorCQlmb3IgKDsgY291bnQgPiAwICYmIHBvcyA8IFBUX1RSQVA7IC0tY291bnQsICsrcG9zKQorCQkJKytrOworCX0gZWxzZSB7CiAJCWZvciAoOyBjb3VudCA+IDAgJiYgcG9zIDw9IFBUX01BWF9QVVRfUkVHOyAtLWNvdW50KSB7CiAJCQlpZiAoX19nZXRfdXNlcihyZWcsIHUrKykpCiAJCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCQlyZWdzW3BvcysrXSA9IHJlZzsKIAkJfQorCQlmb3IgKDsgY291bnQgPiAwICYmIHBvcyA8IFBUX1RSQVA7IC0tY291bnQsICsrcG9zKQorCQkJaWYgKF9fZ2V0X3VzZXIocmVnLCB1KyspKQorCQkJCXJldHVybiAtRUZBVUxUOworCX0KIAogCWlmIChjb3VudCA+IDAgJiYgcG9zID09IFBUX1RSQVApIHsKIAkJaWYgKGtidWYpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vc2xiLmMgYi9hcmNoL3Bvd2VycGMvbW0vc2xiLmMKaW5kZXggNDdiMDZiYS4uOTA2ZGFlZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL3NsYi5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9zbGIuYwpAQCAtMTI0LDYgKzEyNCwxMiBAQAogCQlrc3BfdnNpZF9kYXRhID0gZ2V0X3NsYl9zaGFkb3coKS0+c2F2ZV9hcmVhWzJdLnZzaWQ7CiAJfQogCisJLyoKKwkgKiBXZSBjYW4ndCB0YWtlIGEgUE1VIGV4Y2VwdGlvbiBpbiB0aGUgZm9sbG93aW5nIGNvZGUsIHNvIGhhcmQKKwkgKiBkaXNhYmxlIGludGVycnVwdHMuCisJICovCisJaGFyZF9pcnFfZGlzYWJsZSgpOworCiAJLyogV2UgbmVlZCB0byBkbyB0aGlzIGFsbCBpbiBhc20sIHNvIHdlJ3JlIHN1cmUgd2UgZG9uJ3QgdG91Y2gKIAkgKiB0aGUgc3RhY2sgYmV0d2VlbiB0aGUgc2xiaWEgYW5kIHJlYm9sdGluZyBpdC4gKi8KIAlhc20gdm9sYXRpbGUoImlzeW5jXG4iCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvaW9tbXUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pb21tdS5jCmluZGV4IDIwZWEwZTEuLmQ3NWNjZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pb21tdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pb21tdS5jCkBAIC04MDIsMTcgKzgwMiwyNCBAQAogCiBzdGF0aWMgdTY0IGNlbGxfaW9tbXVfZ2V0X2ZpeGVkX2FkZHJlc3Moc3RydWN0IGRldmljZSAqZGV2KQogewotCXU2NCBjcHVfYWRkciwgc2l6ZSwgYmVzdF9zaXplLCBwY2lfYWRkciA9IE9GX0JBRF9BRERSOworCXU2NCBjcHVfYWRkciwgc2l6ZSwgYmVzdF9zaXplLCBkZXZfYWRkciA9IE9GX0JBRF9BRERSOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CiAJY29uc3QgdTMyICpyYW5nZXMgPSBOVUxMOwotCWludCBpLCBsZW4sIGJlc3Q7CisJaW50IGksIGxlbiwgYmVzdCwgbmFkZHIsIG5zaXplLCBwbmEsIHJhbmdlX3NpemU7CiAKIAlucCA9IG9mX25vZGVfZ2V0KGRldi0+YXJjaGRhdGEub2Zfbm9kZSk7Ci0Jd2hpbGUgKG5wKSB7Ci0JCXJhbmdlcyA9IG9mX2dldF9wcm9wZXJ0eShucCwgImRtYS1yYW5nZXMiLCAmbGVuKTsKLQkJaWYgKHJhbmdlcykKLQkJCWJyZWFrOworCXdoaWxlICgxKSB7CisJCW5hZGRyID0gb2Zfbl9hZGRyX2NlbGxzKG5wKTsKKwkJbnNpemUgPSBvZl9uX3NpemVfY2VsbHMobnApOwogCQlucCA9IG9mX2dldF9uZXh0X3BhcmVudChucCk7CisJCWlmICghbnApCisJCQlicmVhazsKKworCQlyYW5nZXMgPSBvZl9nZXRfcHJvcGVydHkobnAsICJkbWEtcmFuZ2VzIiwgJmxlbik7CisKKwkJLyogSWdub3JlIGVtcHR5IHJhbmdlcywgdGhleSBpbXBseSBubyB0cmFuc2xhdGlvbiByZXF1aXJlZCAqLworCQlpZiAocmFuZ2VzICYmIGxlbiA+IDApCisJCQlicmVhazsKIAl9CiAKIAlpZiAoIXJhbmdlcykgewpAQCAtODIyLDE1ICs4MjksMTcgQEAKIAogCWxlbiAvPSBzaXplb2YodTMyKTsKIAorCXBuYSA9IG9mX25fYWRkcl9jZWxscyhucCk7CisJcmFuZ2Vfc2l6ZSA9IG5hZGRyICsgbnNpemUgKyBwbmE7CisKIAkvKiBkbWEtcmFuZ2VzIGZvcm1hdDoKLQkgKiAxIGNlbGw6ICBwY2kgc3BhY2UKLQkgKiAyIGNlbGxzOiBwY2kgYWRkcmVzcwotCSAqIDIgY2VsbHM6IHBhcmVudCBhZGRyZXNzCi0JICogMiBjZWxsczogc2l6ZQorCSAqIGNoaWxkIGFkZHIJOiBuYWRkciBjZWxscworCSAqIHBhcmVudCBhZGRyCTogcG5hIGNlbGxzCisJICogc2l6ZQkJOiBuc2l6ZSBjZWxscwogCSAqLwotCWZvciAoaSA9IDAsIGJlc3QgPSAtMSwgYmVzdF9zaXplID0gMDsgaSA8IGxlbjsgaSArPSA3KSB7Ci0JCWNwdV9hZGRyID0gb2ZfdHJhbnNsYXRlX2RtYV9hZGRyZXNzKG5wLCByYW5nZXMgK2kgKyAzKTsKLQkJc2l6ZSA9IG9mX3JlYWRfbnVtYmVyKHJhbmdlcyArIGkgKyA1LCAyKTsKKwlmb3IgKGkgPSAwLCBiZXN0ID0gLTEsIGJlc3Rfc2l6ZSA9IDA7IGkgPCBsZW47IGkgKz0gcmFuZ2Vfc2l6ZSkgeworCQljcHVfYWRkciA9IG9mX3RyYW5zbGF0ZV9kbWFfYWRkcmVzcyhucCwgcmFuZ2VzICsgaSArIG5hZGRyKTsKKwkJc2l6ZSA9IG9mX3JlYWRfbnVtYmVyKHJhbmdlcyArIGkgKyBuYWRkciArIHBuYSwgbnNpemUpOwogCiAJCWlmIChjcHVfYWRkciA9PSAwICYmIHNpemUgPiBiZXN0X3NpemUpIHsKIAkJCWJlc3QgPSBpOwpAQCAtODM4LDE1ICs4NDcsMTUgQEAKIAkJfQogCX0KIAotCWlmIChiZXN0ID49IDApCi0JCXBjaV9hZGRyID0gb2ZfcmVhZF9udW1iZXIocmFuZ2VzICsgYmVzdCArIDEsIDIpOwotCWVsc2UKKwlpZiAoYmVzdCA+PSAwKSB7CisJCWRldl9hZGRyID0gb2ZfcmVhZF9udW1iZXIocmFuZ2VzICsgYmVzdCwgbmFkZHIpOworCX0gZWxzZQogCQlkZXZfZGJnKGRldiwgImlvbW11OiBubyBzdWl0YWJsZSByYW5nZSBmb3VuZCFcbiIpOwogCiBvdXQ6CiAJb2Zfbm9kZV9wdXQobnApOwogCi0JcmV0dXJuIHBjaV9hZGRyOworCXJldHVybiBkZXZfYWRkcjsKIH0KIAogc3RhdGljIGludCBkbWFfc2V0X21hc2tfYW5kX3N3aXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBkbWFfbWFzaykKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zZXR1cC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NldHVwLmMKaW5kZXggZGRhMzQ2NS4uNWM1MzFlOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NldHVwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NldHVwLmMKQEAgLTgxLDYgKzgxLDQyIEBACiAJcHJpbnRrKCIqKiogJTA0eCA6ICVzXG4iLCBoZXgsIHMgPyBzIDogIiIpOwogfQogCitzdGF0aWMgdm9pZCBjZWxsX2ZpeHVwX3BjaWVfcm9vdGNvbXBsZXgoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2U7CisJY29uc3QgY2hhciAqczsKKwlpbnQgaTsKKworCWlmICghbWFjaGluZV9pcyhjZWxsKSkKKwkJcmV0dXJuOworCisJLyogV2UncmUgc2VhcmNoaW5nIGZvciBhIGRpcmVjdCBjaGlsZCBvZiB0aGUgUEhCICovCisJaWYgKGRldi0+YnVzLT5zZWxmICE9IE5VTEwgfHwgZGV2LT5kZXZmbiAhPSAwKQorCQlyZXR1cm47CisKKwlob3NlID0gcGNpX2J1c190b19ob3N0KGRldi0+YnVzKTsKKwlpZiAoaG9zZSA9PSBOVUxMKQorCQlyZXR1cm47CisKKwkvKiBPbmx5IG9uIFBDSUUgKi8KKwlpZiAoIW9mX2RldmljZV9pc19jb21wYXRpYmxlKGhvc2UtPmRuLCAicGNpZXgiKSkKKwkJcmV0dXJuOworCisJLyogQW5kIG9ubHkgb24gYXhvbiAqLworCXMgPSBvZl9nZXRfcHJvcGVydHkoaG9zZS0+ZG4sICJtb2RlbCIsIE5VTEwpOworCWlmICghcyB8fCBzdHJjbXAocywgIkF4b24iKSAhPSAwKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgUENJX0JSSURHRV9SRVNPVVJDRVM7IGkrKykgeworCQlkZXYtPnJlc291cmNlW2ldLnN0YXJ0ID0gZGV2LT5yZXNvdXJjZVtpXS5lbmQgPSAwOworCQlkZXYtPnJlc291cmNlW2ldLmZsYWdzID0gMDsKKwl9CisKKwlwcmludGsoS0VSTl9ERUJVRyAiUENJOiBIaWRpbmcgcmVzb3VyY2VzIG9uIEF4b24gUENJRSBSQyAlc1xuIiwKKwkgICAgICAgcGNpX25hbWUoZGV2KSk7Cit9CitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgY2VsbF9maXh1cF9wY2llX3Jvb3Rjb21wbGV4KTsKKwogc3RhdGljIGludCBfX2luaXQgY2VsbF9wdWJsaXNoX2RldmljZXModm9pZCkKIHsKIAlpbnQgbm9kZTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9saWIvdWFjY2Vzc19wdC5jIGIvYXJjaC9zMzkwL2xpYi91YWNjZXNzX3B0LmMKaW5kZXggN2U4ZWZhYS4uNWVmZGZlOSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2xpYi91YWNjZXNzX3B0LmMKKysrIGIvYXJjaC9zMzkwL2xpYi91YWNjZXNzX3B0LmMKQEAgLTQwNiw2ICs0MDYsOCBAQAogewogCWludCByZXQ7CiAKKwlpZiAoIWN1cnJlbnQtPm1tKQorCQlyZXR1cm4gLUVGQVVMVDsKIAlzcGluX2xvY2soJmN1cnJlbnQtPm1tLT5wYWdlX3RhYmxlX2xvY2spOwogCXVhZGRyID0gKGludCBfX3VzZXIgKikgX19kYXRfdXNlcl9hZGRyKCh1bnNpZ25lZCBsb25nKSB1YWRkcik7CiAJaWYgKCF1YWRkcikgewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9LY29uZmlnIGIvYXJjaC9zaC9LY29uZmlnCmluZGV4IDk1Yjc1MzQuLjEyNzIwNDggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvS2NvbmZpZworKysgYi9hcmNoL3NoL0tjb25maWcKQEAgLTU4MCw2ICs1ODAsNyBAQAogCQkJQ1BVX1NVQlRZUEVfU0g3NzYzCiAJZGVmYXVsdCAiODYiIGlmIENQVV9TVUJUWVBFX1NINzYxOQogCWRlZmF1bHQgIjE0MCIgaWYgQ1BVX1NVQlRZUEVfU0g3MjA2CisJZGVmYXVsdCAiMTQyIiBpZiBDUFVfU1VCVFlQRV9TSDcyMDMKIAlkZWZhdWx0ICIxNiIKIAogY29uZmlnIFNIX1BDTEtfRlJFUQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9NYWtlZmlsZSBiL2FyY2gvc2gvTWFrZWZpbGUKaW5kZXggYzUxMGMyMi4uY2ZmYzkyYiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9NYWtlZmlsZQorKysgYi9hcmNoL3NoL01ha2VmaWxlCkBAIC0xNTQsNyArMTU0LDExIEBACiAKIGJvb3QgOj0gYXJjaC9zaC9ib290CiAKK2lmbmVxICgkKEtCVUlMRF9TUkMpLCkKIGluY2Rpci1wcmVmaXgJOj0gJChzcmN0cmVlKS9pbmNsdWRlL2FzbS1zaC8KK2Vsc2UKK2luY2Rpci1wcmVmaXgJOj0KK2VuZGlmCiAKICMJVXBkYXRlIG1hY2hpbmUgYXJjaCBhbmQgcHJvYyBzeW1saW5rcyBpZiBzb21ldGhpbmcgd2hpY2ggYWZmZWN0cwogIwl0aGVtIGNoYW5nZWQuICBXZSB1c2UgLmFyY2ggYW5kIC5tYWNoIHRvIGluZGljYXRlIHdoZW4gdGhleSB3ZXJlCkBAIC0xODIsNyArMTg2LDcgQEAKIAkkKFEpaWYgWyAhIC1kIGluY2x1ZGUvYXNtLXNoIF07IHRoZW4gbWtkaXIgLXAgaW5jbHVkZS9hc20tc2g7IGZpCiAJJChRKXJtIC1mIGluY2x1ZGUvYXNtLXNoL21hY2gKIAkkKFEpZm9yIGkgaW4gJChpbmNkaXIteSk7IGRvIFwKLQlpZiBbIC1kICQoaW5jZGlyLXByZWZpeCkkJGkgXTsgdGhlbiBcCisJaWYgWyAtZCAkKHNyY3RyZWUpL2luY2x1ZGUvYXNtLXNoLyQkaSBdOyB0aGVuIFwKIAkJZWNobyAtbiAnICBTWU1MSU5LIGluY2x1ZGUvYXNtLXNoL21hY2ggLT4gJzsgXAogCQllY2hvIC1lICJpbmNsdWRlL2FzbS1zaC8kJGkiOyBcCiAJCWxuIC1mc24gJChpbmNkaXItcHJlZml4KSQkaSBcCkBAIC0xOTEsNyArMTk1LDcgQEAKIAkJaWYgWyAhIC1kIGluY2x1ZGUvYXNtLXNoL21hY2ggXTsgdGhlbiBcCiAJCQllY2hvIC1uICcgIFNZTUxJTksgaW5jbHVkZS9hc20tc2gvbWFjaCAtPiAnOyBcCiAJCQllY2hvIC1lICdpbmNsdWRlL2FzbS1zaCc7IFwKLQkJCWxuIC1mc24gJChpbmNkaXItcHJlZml4KSBpbmNsdWRlL2FzbS1zaC9tYWNoOyBcCisJCQlsbiAtZnNuICQoaW5jZGlyLXByZWZpeCkuLi9hc20tc2ggaW5jbHVkZS9hc20tc2gvbWFjaDsgXAogCQlmaTsgXAogCWZpOyBcCiAJZG9uZQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib290L01ha2VmaWxlIGIvYXJjaC9zaC9ib290L01ha2VmaWxlCmluZGV4IDU5ZjU1MmMuLjNkZGEyNGQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9vdC9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2Jvb3QvTWFrZWZpbGUKQEAgLTMyLDEyICszMiwxMiBAQAogJChvYmopL2NvbXByZXNzZWQvdm1saW51eDogRk9SQ0UKIAkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKG9iaikvY29tcHJlc3NlZCAkQAogCi1LRVJORUxfTE9BRAk6PSAkKHNoZWxsIC9iaW4vYmFzaCAtYyAncHJpbnRmICIweCU4eCIgXAorS0VSTkVMX0xPQUQJOj0gJChzaGVsbCAvYmluL2Jhc2ggLWMgJ3ByaW50ZiAiMHglMDh4IiBcCiAJCSAgICAgJCRbJChDT05GSUdfUEFHRV9PRkZTRVQpICArIFwKIAkJCSQoQ09ORklHX01FTU9SWV9TVEFSVCkgKyBcCiAJCQkkKENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUKV0nKQogCi1LRVJORUxfRU5UUlkJOj0gJChzaGVsbCAvYmluL2Jhc2ggLWMgJ3ByaW50ZiAiMHglOHgiIFwKK0tFUk5FTF9FTlRSWQk6PSAkKHNoZWxsIC9iaW4vYmFzaCAtYyAncHJpbnRmICIweCUwOHgiIFwKIAkJICAgICAkJFskKENPTkZJR19QQUdFX09GRlNFVCkgICsgXAogCQkJJChDT05GSUdfTUVNT1JZX1NUQVJUKSArIFwKIAkJCSQoQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQpKzB4MTAwMF0nKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMi9lbnRyeS5TIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMi9lbnRyeS5TCmluZGV4IDdhMjY1NjkuLjBmYzg5MDYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDIvZW50cnkuUworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyL2VudHJ5LlMKQEAgLTI2Nyw3ICsyNjcsNiBAQAogCiBFTlRSWShhZGRyZXNzX2Vycm9yX3RyYXBfaGFuZGxlcikKIAltb3YJcjE1LHI0CQkJCSEgcmVncwotCWFkZAkjNCxyNAogCW1vdgkjT0ZGX1BDLHIwCiAJbW92LmwJQChyMCxyMTUpLHI2CQkJISBwYwogCW1vdi5sCTFmLHIwCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zbXAuYyBiL2FyY2gvc2gva2VybmVsL3NtcC5jCmluZGV4IDk0MDc1ZTEuLjVkMDM5ZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvc2gva2VybmVsL3NtcC5jCkBAIC0xNzksNyArMTc5LDcgQEAKIH0KIAogc3RydWN0IHNtcF9mbl9jYWxsX3N0cnVjdCBzbXBfZm5fY2FsbCA9IHsKLQkubG9jawkJPSBTUElOX0xPQ0tfVU5MT0NLRUQsCisJLmxvY2sJCT0gX19TUElOX0xPQ0tfVU5MT0NLRUQoc21wX2ZuX2NhbGwubG9jayksCiAJLmZpbmlzaGVkCT0gQVRPTUlDX0lOSVQoMCksCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zeXNfc3Vub3MuYyBiL2FyY2gvc3BhcmMva2VybmVsL3N5c19zdW5vcy5jCmluZGV4IDI4YzE4N2MuLmY1YjYwOGIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3N5c19zdW5vcy5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3N5c19zdW5vcy5jCkBAIC02NTksNyArNjU5LDcgQEAKIAogCXNvY2tldCA9IFNPQ0tFVF9JKGlub2RlKTsKIAlsb2NhbC5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKLQlsb2NhbC5zaW5fYWRkci5zX2FkZHIgPSBJTkFERFJfQU5ZOworCWxvY2FsLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9BTlkpOwogCiAJLyogSVBQT1JUX1JFU0VSVkVEID0gMTAyNCwgY2FuJ3QgZmluZCB0aGUgZGVmaW5pdGlvbiBpbiB0aGUga2VybmVsICovCiAJdHJ5X3BvcnQgPSAxMDI0OwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXNfc3Vub3MzMi5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXNfc3Vub3MzMi5jCmluZGV4IGNmYzIyZDMuLmU5MTE5NGYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzX3N1bm9zMzIuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3N5c19zdW5vczMyLmMKQEAgLTYxOCw3ICs2MTgsNyBAQAogCiAJc29ja2V0ID0gU09DS0VUX0koaW5vZGUpOwogCWxvY2FsLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotCWxvY2FsLnNpbl9hZGRyLnNfYWRkciA9IElOQUREUl9BTlk7CisJbG9jYWwuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0FOWSk7CiAKIAkvKiBJUFBPUlRfUkVTRVJWRUQgPSAxMDI0LCBjYW4ndCBmaW5kIHRoZSBkZWZpbml0aW9uIGluIHRoZSBrZXJuZWwgKi8KIAl0cnlfcG9ydCA9IDEwMjQ7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBlcnR1cmVfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGVydHVyZV82NC5jCmluZGV4IDYwODE1MmEuLjAwZGYxMjYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGVydHVyZV82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGVydHVyZV82NC5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgogI2luY2x1ZGUgPGFzbS9lODIwLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2dhcnQuaD4KQEAgLTc2LDYgKzc3LDggQEAKIAlwcmludGsoS0VSTl9JTkZPICJNYXBwaW5nIGFwZXJ0dXJlIG92ZXIgJWQgS0Igb2YgUkFNIEAgJWx4XG4iLAogCQkJYXBlcl9zaXplID4+IDEwLCBfX3BhKHApKTsKIAlpbnNlcnRfYXBlcnR1cmVfcmVzb3VyY2UoKHUzMilfX3BhKHApLCBhcGVyX3NpemUpOworCXJlZ2lzdGVyX25vc2F2ZV9yZWdpb24oKHUzMilfX3BhKHApID4+IFBBR0VfU0hJRlQsCisJCQkJKHUzMilfX3BhKHArYXBlcl9zaXplKSA+PiBQQUdFX1NISUZUKTsKIAogCXJldHVybiAodTMyKV9fcGEocCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvbWFpbi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL21haW4uYwppbmRleCBiZTgzMzM2Li5hNjQ1MGIzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvbWFpbi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9tYWluLmMKQEAgLTcxMSw3ICs3MTEsOCBAQAogCQl0cmltX3NpemUgPSBlbmRfcGZuOwogCQl0cmltX3NpemUgPDw9IFBBR0VfU0hJRlQ7CiAJCXRyaW1fc2l6ZSAtPSB0cmltX3N0YXJ0OwotCQlhZGRfbWVtb3J5X3JlZ2lvbih0cmltX3N0YXJ0LCB0cmltX3NpemUsIEU4MjBfUkVTRVJWRUQpOworCQl1cGRhdGVfbWVtb3J5X3JhbmdlKHRyaW1fc3RhcnQsIHRyaW1fc2l6ZSwgRTgyMF9SQU0sCisJCQkJCUU4MjBfUkVTRVJWRUQpOwogCQl1cGRhdGVfZTgyMCgpOwogCQlyZXR1cm4gMTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZTgyMF8zMi5jIGIvYXJjaC94ODYva2VybmVsL2U4MjBfMzIuYwppbmRleCA0ZTE2ZWY0Li44MDQ0NGM1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZTgyMF8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9lODIwXzMyLmMKQEAgLTc0OSw2ICs3NDksMzIgQEAKIAlyZXR1cm4gMDsKIH0KIGVhcmx5X3BhcmFtKCJtZW1tYXAiLCBwYXJzZV9tZW1tYXApOwordm9pZCBfX2luaXQgdXBkYXRlX21lbW9yeV9yYW5nZSh1NjQgc3RhcnQsIHU2NCBzaXplLCB1bnNpZ25lZCBvbGRfdHlwZSwKKwkJCQl1bnNpZ25lZCBuZXdfdHlwZSkKK3sKKwlpbnQgaTsKKworCUJVR19PTihvbGRfdHlwZSA9PSBuZXdfdHlwZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZTgyMC5ucl9tYXA7IGkrKykgeworCQlzdHJ1Y3QgZTgyMGVudHJ5ICplaSA9ICZlODIwLm1hcFtpXTsKKwkJdTY0IGZpbmFsX3N0YXJ0LCBmaW5hbF9lbmQ7CisJCWlmIChlaS0+dHlwZSAhPSBvbGRfdHlwZSkKKwkJCWNvbnRpbnVlOworCQkvKiB0b3RhbGx5IGNvdmVyZWQ/ICovCisJCWlmIChlaS0+YWRkciA+PSBzdGFydCAmJiBlaS0+c2l6ZSA8PSBzaXplKSB7CisJCQllaS0+dHlwZSA9IG5ld190eXBlOworCQkJY29udGludWU7CisJCX0KKwkJLyogcGFydGlhbGx5IGNvdmVyZWQgKi8KKwkJZmluYWxfc3RhcnQgPSBtYXgoc3RhcnQsIGVpLT5hZGRyKTsKKwkJZmluYWxfZW5kID0gbWluKHN0YXJ0ICsgc2l6ZSwgZWktPmFkZHIgKyBlaS0+c2l6ZSk7CisJCWlmIChmaW5hbF9zdGFydCA+PSBmaW5hbF9lbmQpCisJCQljb250aW51ZTsKKwkJYWRkX21lbW9yeV9yZWdpb24oZmluYWxfc3RhcnQsIGZpbmFsX2VuZCAtIGZpbmFsX3N0YXJ0LAorCQkJCQkgbmV3X3R5cGUpOworCX0KK30KIHZvaWQgX19pbml0IHVwZGF0ZV9lODIwKHZvaWQpCiB7CiAJdTggbnJfbWFwOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2U4MjBfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9lODIwXzY0LmMKaW5kZXggOWY2NWI0Yy4uOWJlNjk3MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2U4MjBfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZTgyMF82NC5jCkBAIC03NDQsNiArNzQ0LDMzIEBACiAJfQogfQogCit2b2lkIF9faW5pdCB1cGRhdGVfbWVtb3J5X3JhbmdlKHU2NCBzdGFydCwgdTY0IHNpemUsIHVuc2lnbmVkIG9sZF90eXBlLAorCQkJCXVuc2lnbmVkIG5ld190eXBlKQoreworCWludCBpOworCisJQlVHX09OKG9sZF90eXBlID09IG5ld190eXBlKTsKKworCWZvciAoaSA9IDA7IGkgPCBlODIwLm5yX21hcDsgaSsrKSB7CisJCXN0cnVjdCBlODIwZW50cnkgKmVpID0gJmU4MjAubWFwW2ldOworCQl1NjQgZmluYWxfc3RhcnQsIGZpbmFsX2VuZDsKKwkJaWYgKGVpLT50eXBlICE9IG9sZF90eXBlKQorCQkJY29udGludWU7CisJCS8qIHRvdGFsbHkgY292ZXJlZD8gKi8KKwkJaWYgKGVpLT5hZGRyID49IHN0YXJ0ICYmIGVpLT5zaXplIDw9IHNpemUpIHsKKwkJCWVpLT50eXBlID0gbmV3X3R5cGU7CisJCQljb250aW51ZTsKKwkJfQorCQkvKiBwYXJ0aWFsbHkgY292ZXJlZCAqLworCQlmaW5hbF9zdGFydCA9IG1heChzdGFydCwgZWktPmFkZHIpOworCQlmaW5hbF9lbmQgPSBtaW4oc3RhcnQgKyBzaXplLCBlaS0+YWRkciArIGVpLT5zaXplKTsKKwkJaWYgKGZpbmFsX3N0YXJ0ID49IGZpbmFsX2VuZCkKKwkJCWNvbnRpbnVlOworCQlhZGRfbWVtb3J5X3JlZ2lvbihmaW5hbF9zdGFydCwgZmluYWxfZW5kIC0gZmluYWxfc3RhcnQsCisJCQkJCSBuZXdfdHlwZSk7CisJfQorfQorCiB2b2lkIF9faW5pdCB1cGRhdGVfZTgyMCh2b2lkKQogewogCXU4IG5yX21hcDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9oZWFkXzMyLlMgYi9hcmNoL3g4Ni9rZXJuZWwvaGVhZF8zMi5TCmluZGV4IGZkOGNhNTMuLjc0ZDg3ZWEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9oZWFkXzMyLlMKKysrIGIvYXJjaC94ODYva2VybmVsL2hlYWRfMzIuUwpAQCAtNjU3LDcgKzY1Nyw3IEBACiAJLmFzY2l6ICJVbmtub3duIGludGVycnVwdCBvciBmYXVsdCBhdCBFSVAgJXAgJXAgJXBcbiIKIAogZmF1bHRfbXNnOgotCS5hc2NpaQkJCQkJCQkJXAorCS5hc2NpegkJCQkJCQkJXAogLyogZmF1bHQgaW5mbzogKi8JIkJVRzogSW50ICVkOiBDUjIgJXBcbiIJCQkJXAogLyogcHVzaGEgcmVnczogKi8JIiAgICAgRURJICVwICBFU0kgJXAgIEVCUCAlcCAgRVNQICVwXG4iCQlcCiAJCQkiICAgICBFQlggJXAgIEVEWCAlcCAgRUNYICVwICBFQVggJXBcbiIJCVwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wY2ktZG1hXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvcGNpLWRtYV82NC5jCmluZGV4IGE4MjQ3M2QuLjM3NWNiMmIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wY2ktZG1hXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3BjaS1kbWFfNjQuYwpAQCAtNTMsMTEgKzUzLDYgQEAKIAlpbnQgbm9kZTsKIAogCW5vZGUgPSBkZXZfdG9fbm9kZShkZXYpOwotCWlmIChub2RlID09IC0xKQotCQlub2RlID0gbnVtYV9ub2RlX2lkKCk7Ci0KLQlpZiAobm9kZSA8IGZpcnN0X25vZGUobm9kZV9vbmxpbmVfbWFwKSkKLQkJbm9kZSA9IGZpcnN0X25vZGUobm9kZV9vbmxpbmVfbWFwKTsKIAogCXBhZ2UgPSBhbGxvY19wYWdlc19ub2RlKG5vZGUsIGdmcCwgb3JkZXIpOwogCXJldHVybiBwYWdlID8gcGFnZV9hZGRyZXNzKHBhZ2UpIDogTlVMTDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9xdWlya3MuYyBiL2FyY2gveDg2L2tlcm5lbC9xdWlya3MuYwppbmRleCBjNDcyMDhmLi5kODlhNjQ4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcXVpcmtzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3F1aXJrcy5jCkBAIC0zNjMsNiArMzYzLDggQEAKIAkJCW52aWRpYV9mb3JjZV9lbmFibGVfaHBldCk7CiAKIC8qIExQQyBicmlkZ2VzICovCitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9OVklESUEsIDB4MDI2MCwKKwkJCW52aWRpYV9mb3JjZV9lbmFibGVfaHBldCk7CiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9OVklESUEsIDB4MDM2MCwKIAkJCW52aWRpYV9mb3JjZV9lbmFibGVfaHBldCk7CiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9OVklESUEsIDB4MDM2MSwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9yZWJvb3QuYyBiL2FyY2gveDg2L2tlcm5lbC9yZWJvb3QuYwppbmRleCA1NWNlYjhjLi40ODRjNGE4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcmVib290LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3JlYm9vdC5jCkBAIC0xNTIsNiArMTUyLDI0IEBACiAJCQlETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsICIwV0Y4MTAiKSwKIAkJfSwKIAl9LAorCXsgICAgICAgLyogSGFuZGxlIHByb2JsZW1zIHdpdGggcmVib290aW5nIG9uIERlbGwgT3B0aXBsZXggNzQ1J3MgREZGKi8KKwkJLmNhbGxiYWNrID0gc2V0X2Jpb3NfcmVib290LAorCQkuaWRlbnQgPSAiRGVsbCBPcHRpUGxleCA3NDUiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkRlbGwgSW5jLiIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJPcHRpUGxleCA3NDUiKSwKKwkJCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIjBNTTU5OSIpLAorCQl9LAorCX0sCisJeyAgICAgICAvKiBIYW5kbGUgcHJvYmxlbXMgd2l0aCByZWJvb3Rpbmcgb24gRGVsbCBPcHRpcGxleCA3NDUgd2l0aCAwS1c2MjYgKi8KKwkJLmNhbGxiYWNrID0gc2V0X2Jpb3NfcmVib290LAorCQkuaWRlbnQgPSAiRGVsbCBPcHRpUGxleCA3NDUiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkRlbGwgSW5jLiIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJPcHRpUGxleCA3NDUiKSwKKwkJCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIjBLVzYyNiIpLAorCQl9LAorCX0sCiAJewkvKiBIYW5kbGUgcHJvYmxlbXMgd2l0aCByZWJvb3Rpbmcgb24gRGVsbCAyNDAwJ3MgKi8KIAkJLmNhbGxiYWNrID0gc2V0X2Jpb3NfcmVib290LAogCQkuaWRlbnQgPSAiRGVsbCBQb3dlckVkZ2UgMjQwMCIsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXA2NC5jIGIvYXJjaC94ODYva2VybmVsL3NldHVwNjQuYwppbmRleCAzMDkzNjZmLi5lMjRjNDU2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXA2NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cDY0LmMKQEAgLTE0MiwxNCArMTQyLDE2IEBACiAJcHJpbnRrKEtFUk5fSU5GTyAiUEVSQ1BVOiBBbGxvY2F0aW5nICVsdSBieXRlcyBvZiBwZXIgY3B1IGRhdGFcbiIsIHNpemUpOwogCWZvcl9lYWNoX2NwdV9tYXNrIChpLCBjcHVfcG9zc2libGVfbWFwKSB7CiAJCWNoYXIgKnB0cjsKKyNpZm5kZWYgQ09ORklHX05FRURfTVVMVElQTEVfTk9ERVMKKwkJcHRyID0gYWxsb2NfYm9vdG1lbV9wYWdlcyhzaXplKTsKKyNlbHNlCisJCWludCBub2RlID0gZWFybHlfY3B1X3RvX25vZGUoaSk7CiAKLQkJaWYgKCFOT0RFX0RBVEEoZWFybHlfY3B1X3RvX25vZGUoaSkpKSB7Ci0JCQlwcmludGsoImNwdSB3aXRoIG5vIG5vZGUgJWQsIG51bV9vbmxpbmVfbm9kZXMgJWRcbiIsCi0JCQkgICAgICAgaSwgbnVtX29ubGluZV9ub2RlcygpKTsKKwkJaWYgKCFub2RlX29ubGluZShub2RlKSB8fCAhTk9ERV9EQVRBKG5vZGUpKQogCQkJcHRyID0gYWxsb2NfYm9vdG1lbV9wYWdlcyhzaXplKTsKLQkJfSBlbHNlIHsgCi0JCQlwdHIgPSBhbGxvY19ib290bWVtX3BhZ2VzX25vZGUoTk9ERV9EQVRBKGVhcmx5X2NwdV90b19ub2RlKGkpKSwgc2l6ZSk7Ci0JCX0KKwkJZWxzZQorCQkJcHRyID0gYWxsb2NfYm9vdG1lbV9wYWdlc19ub2RlKE5PREVfREFUQShub2RlKSwgc2l6ZSk7CisjZW5kaWYKIAkJaWYgKCFwdHIpCiAJCQlwYW5pYygiQ2Fubm90IGFsbG9jYXRlIGNwdSBkYXRhIGZvciBDUFUgJWRcbiIsIGkpOwogCQljcHVfcGRhKGkpLT5kYXRhX29mZnNldCA9IHB0ciAtIF9fcGVyX2NwdV9zdGFydDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21hY2gtdmlzd3MvdHJhcHMuYyBiL2FyY2gveDg2L21hY2gtdmlzd3MvdHJhcHMuYwppbmRleCA4NDNiNjdhLi5iZmFjNmJhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tYWNoLXZpc3dzL3RyYXBzLmMKKysrIGIvYXJjaC94ODYvbWFjaC12aXN3cy90cmFwcy5jCkBAIC00Niw4ICs0Niw5IEBACiAJICovCiAJc2V0X2ZpeG1hcChGSVhfQVBJQ19CQVNFLCBBUElDX0RFRkFVTFRfUEhZU19CQVNFKTsKIAlzZXR1cF9sb2NhbF9BUElDKCk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiTG9jYWwgQVBJQyBWZXJzaW9uICUjbHgsIElEICUjbHhcbiIsCi0JCWFwaWNfcmVhZChBUElDX0xWUiksIGFwaWNfcmVhZChBUElDX0lEKSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiTG9jYWwgQVBJQyBWZXJzaW9uICUjeCwgSUQgJSN4XG4iLAorCQkodW5zaWduZWQgaW50KWFwaWNfcmVhZChBUElDX0xWUiksCisJCSh1bnNpZ25lZCBpbnQpYXBpY19yZWFkKEFQSUNfSUQpKTsKIAogCXNldF9maXhtYXAoRklYX0NPX0NQVSwgQ09fQ1BVX1BIWVMpOwogCXNldF9maXhtYXAoRklYX0NPX0FQSUMsIENPX0FQSUNfUEhZUyk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9udW1hXzY0LmMgYi9hcmNoL3g4Ni9tbS9udW1hXzY0LmMKaW5kZXggOGNjZmVlMS4uMTZiODJhZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vbnVtYV82NC5jCisrKyBiL2FyY2gveDg2L21tL251bWFfNjQuYwpAQCAtMjIxLDggKzIyMSw3IEBACiAJCQkJIGJvb3RtYXBfcGFnZXM8PFBBR0VfU0hJRlQsIFBBR0VfU0laRSk7CiAJaWYgKGJvb3RtYXAgPT0gTlVMTCkgIHsKIAkJaWYgKG5vZGVkYXRhX3BoeXMgPCBzdGFydCB8fCBub2RlZGF0YV9waHlzID49IGVuZCkKLQkJCWZyZWVfYm9vdG1lbSgodW5zaWduZWQgbG9uZylub2RlX2RhdGFbbm9kZWlkXSwKLQkJCQkgICAgIHBnZGF0X3NpemUpOworCQkJZnJlZV9ib290bWVtKG5vZGVkYXRhX3BoeXMsIHBnZGF0X3NpemUpOwogCQlub2RlX2RhdGFbbm9kZWlkXSA9IE5VTEw7CiAJCXJldHVybjsKIAl9CmRpZmYgLS1naXQgYS9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfeG9yLmMgYi9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfeG9yLmMKaW5kZXggN2E5ZGIzNS4uMWM0NDVjNyAxMDA2NDQKLS0tIGEvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX3hvci5jCisrKyBiL2NyeXB0by9hc3luY190eC9hc3luY194b3IuYwpAQCAtMjcxLDcgKzI3MSw3IEBACiAKIAlCVUdfT04oc3JjX2NudCA8PSAxKTsKIAotCWlmIChkZXZpY2UpIHsKKwlpZiAoZGV2aWNlICYmIHNyY19jbnQgPD0gZGV2aWNlLT5tYXhfeG9yKSB7CiAJCWRtYV9hZGRyX3QgKmRtYV9zcmMgPSAoZG1hX2FkZHJfdCAqKSBzcmNfbGlzdDsKIAkJdW5zaWduZWQgbG9uZyBkbWFfcHJlcF9mbGFncyA9IGNiX2ZuID8gRE1BX1BSRVBfSU5URVJSVVBUIDogMDsKIAkJaW50IGk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvS2NvbmZpZyBiL2RyaXZlcnMvYWNwaS9LY29uZmlnCmluZGV4IGZiY2FhMDYuLmI0ZjVlODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvYWNwaS9LY29uZmlnCkBAIC0zMDAsMTcgKzMwMCw2IEBACiAJYm9vbAogCWRlZmF1bHQgQUNQSV9DVVNUT01fRFNEVF9GSUxFICE9ICIiCiAKLWNvbmZpZyBBQ1BJX0NVU1RPTV9EU0RUX0lOSVRSRAotCWJvb2wgIlJlYWQgQ3VzdG9tIERTRFQgZnJvbSBpbml0cmFtZnMiCi0JZGVwZW5kcyBvbiBCTEtfREVWX0lOSVRSRAotCWRlZmF1bHQgbgotCWhlbHAKLQkgIFRoaXMgb3B0aW9uIHN1cHBvcnRzIGEgY3VzdG9tIERTRFQgYnkgb3B0aW9uYWxseSBsb2FkaW5nIGl0IGZyb20gaW5pdHJkLgotCSAgU2VlIERvY3VtZW50YXRpb24vYWNwaS9kc2R0LW92ZXJyaWRlLnR4dAotCi0JICBJZiB5b3UgYXJlIG5vdCB1c2luZyB0aGlzIGZlYXR1cmUgbm93LCBidXQgbWF5IHVzZSBpdCBsYXRlciwKLQkgIGl0IGlzIHNhZmUgdG8gc2F5IFkgaGVyZS4KLQogY29uZmlnIEFDUElfQkxBQ0tMSVNUX1lFQVIKIAlpbnQgIkRpc2FibGUgQUNQSSBmb3Igc3lzdGVtcyBiZWZvcmUgSmFuIDFzdCB0aGlzIHllYXIiIGlmIFg4Nl8zMgogCWRlZmF1bHQgMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FzdXNfYWNwaS5jIGIvZHJpdmVycy9hY3BpL2FzdXNfYWNwaS5jCmluZGV4IGQyNWVmOTYuLjQ0YWQ5MGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hc3VzX2FjcGkuYworKysgYi9kcml2ZXJzL2FjcGkvYXN1c19hY3BpLmMKQEAgLTYxMCw3ICs2MTAsNyBAQAogCSAgICAobGVkX291dCkgPyAoaG90ay0+c3RhdHVzIHwgbGVkbWFzaykgOiAoaG90ay0+c3RhdHVzICYgfmxlZG1hc2spOwogCiAJaWYgKGludmVydCkJCS8qIGludmVydCB0YXJnZXQgdmFsdWUgKi8KLQkJbGVkX291dCA9ICFsZWRfb3V0ICYgMHgxOworCQlsZWRfb3V0ID0gIWxlZF9vdXQ7CiAKIAlpZiAoIXdyaXRlX2FjcGlfaW50KGhvdGstPmhhbmRsZSwgbGVkbmFtZSwgbGVkX291dCwgTlVMTCkpCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIkFzdXMgQUNQSTogTEVEICglcykgd3JpdGUgZmFpbGVkXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2JhdHRlcnkuYyBiL2RyaXZlcnMvYWNwaS9iYXR0ZXJ5LmMKaW5kZXggZjYyMTVlOC4uZDU3MjlkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2JhdHRlcnkuYworKysgYi9kcml2ZXJzL2FjcGkvYmF0dGVyeS5jCkBAIC0yOTMsMTMgKzI5MywxMiBAQAogCQkJCXN0cm5jcHkocHRyLCAodTggKikmZWxlbWVudC0+aW50ZWdlci52YWx1ZSwKIAkJCQkJc2l6ZW9mKGFjcGlfaW50ZWdlcikpOwogCQkJCXB0cltzaXplb2YoYWNwaV9pbnRlZ2VyKV0gPSAwOwotCQkJfSBlbHNlIHJldHVybiAtRUZBVUxUOworCQkJfSBlbHNlCisJCQkJKnB0ciA9IDA7IC8qIGRvbid0IGhhdmUgdmFsdWUgKi8KIAkJfSBlbHNlIHsKLQkJCWlmIChlbGVtZW50LT50eXBlID09IEFDUElfVFlQRV9JTlRFR0VSKSB7Ci0JCQkJaW50ICp4ID0gKGludCAqKSgodTggKiliYXR0ZXJ5ICsKLQkJCQkJCW9mZnNldHNbaV0ub2Zmc2V0KTsKLQkJCQkqeCA9IGVsZW1lbnQtPmludGVnZXIudmFsdWU7Ci0JCQl9IGVsc2UgcmV0dXJuIC1FRkFVTFQ7CisJCQlpbnQgKnggPSAoaW50ICopKCh1OCAqKWJhdHRlcnkgKyBvZmZzZXRzW2ldLm9mZnNldCk7CisJCQkqeCA9IChlbGVtZW50LT50eXBlID09IEFDUElfVFlQRV9JTlRFR0VSKSA/CisJCQkJZWxlbWVudC0+aW50ZWdlci52YWx1ZSA6IC0xOwogCQl9CiAJfQogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2RvY2suYyBiL2RyaXZlcnMvYWNwaS9kb2NrLmMKaW5kZXggMzA3Y2VmNi4uZmE0NGZiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2RvY2suYworKysgYi9kcml2ZXJzL2FjcGkvZG9jay5jCkBAIC03MTAsNiArNzEwLDcgQEAKIAlpZiAoIWNvdW50KQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWJlZ2luX3VuZG9jayhkb2NrX3N0YXRpb24pOwogCXJldCA9IGhhbmRsZV9lamVjdF9yZXF1ZXN0KGRvY2tfc3RhdGlvbiwgQUNQSV9OT1RJRllfRUpFQ1RfUkVRVUVTVCk7CiAJcmV0dXJuIHJldCA/IHJldDogY291bnQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZWMuYyBiL2RyaXZlcnMvYWNwaS9lYy5jCmluZGV4IGU3ZTE5N2UuLjcyMjJhMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9lYy5jCisrKyBiL2RyaXZlcnMvYWNwaS9lYy5jCkBAIC0xMjksNyArMTI5LDYgQEAKIAlzdHJ1Y3QgbXV0ZXggbG9jazsKIAl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQlhdG9taWNfdCBpcnFfY291bnQ7CiAJdTggaGFuZGxlcnNfaW5zdGFsbGVkOwogfSAqYm9vdF9lYywgKmZpcnN0X2VjOwogCkBAIC0xODIsOCArMTgxLDYgQEAKIHsKIAlpbnQgcmV0ID0gMDsKIAotCWF0b21pY19zZXQoJmVjLT5pcnFfY291bnQsIDApOwotCiAJaWYgKHVubGlrZWx5KGV2ZW50ID09IEFDUElfRUNfRVZFTlRfT0JGXzEgJiYKIAkJICAgICB0ZXN0X2JpdChFQ19GTEFHU19OT19PQkYxX0dQRSwgJmVjLT5mbGFncykpKQogCQlmb3JjZV9wb2xsID0gMTsKQEAgLTIzMCw3ICsyMjcsNiBAQAogCQl3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZGVsYXkpKSB7CiAJCQlpZiAoYWNwaV9lY19jaGVja19zdGF0dXMoZWMsIGV2ZW50KSkKIAkJCQlnb3RvIGVuZDsKLQkJCW1zbGVlcCg1KTsKIAkJfQogCX0KIAlwcl9lcnIoUFJFRklYICJhY3BpX2VjX3dhaXQgdGltZW91dCwiCkBAIC01MzMsMTMgKzUyOSw2IEBACiAJc3RydWN0IGFjcGlfZWMgKmVjID0gZGF0YTsKIAogCXByX2RlYnVnKFBSRUZJWCAifn5+PiBpbnRlcnJ1cHRcbiIpOwotCWF0b21pY19pbmMoJmVjLT5pcnFfY291bnQpOwotCWlmIChhdG9taWNfcmVhZCgmZWMtPmlycV9jb3VudCkgPiA1KSB7Ci0JCXByX2VycihQUkVGSVggIkdQRSBzdG9ybSBkZXRlY3RlZCwgZGlzYWJsaW5nIEVDIEdQRVxuIik7Ci0JCWFjcGlfZGlzYWJsZV9ncGUoTlVMTCwgZWMtPmdwZSwgQUNQSV9JU1IpOwotCQljbGVhcl9iaXQoRUNfRkxBR1NfR1BFX01PREUsICZlYy0+ZmxhZ3MpOwotCQlyZXR1cm4gQUNQSV9JTlRFUlJVUFRfSEFORExFRDsKLQl9CiAJY2xlYXJfYml0KEVDX0ZMQUdTX1dBSVRfR1BFLCAmZWMtPmZsYWdzKTsKIAlpZiAodGVzdF9iaXQoRUNfRkxBR1NfR1BFX01PREUsICZlYy0+ZmxhZ3MpKQogCQl3YWtlX3VwKCZlYy0+d2FpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvb3NsLmMgYi9kcml2ZXJzL2FjcGkvb3NsLmMKaW5kZXggMDY1ODE5Yi4uYTY5N2ZiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL29zbC5jCisrKyBiL2RyaXZlcnMvYWNwaS9vc2wuYwpAQCAtOTEsMTAgKzkxLDYgQEAKICNkZWZpbmUJT1NJX1NUUklOR19MRU5HVEhfTUFYIDY0CS8qIGFyYml0cmFyeSAqLwogc3RhdGljIGNoYXIgb3NpX2FkZGl0aW9uYWxfc3RyaW5nW09TSV9TVFJJTkdfTEVOR1RIX01BWF07CiAKLSNpZmRlZiBDT05GSUdfQUNQSV9DVVNUT01fRFNEVF9JTklUUkQKLXN0YXRpYyBpbnQgYWNwaV9ub19pbml0cmRfb3ZlcnJpZGU7Ci0jZW5kaWYKLQogLyoKICAqICJPZGUgdG8gX09TSShMaW51eCkiCiAgKgpAQCAtMzI0LDY3ICszMjAsNiBAQAogCXJldHVybiBBRV9PSzsKIH0KIAotI2lmZGVmIENPTkZJR19BQ1BJX0NVU1RPTV9EU0RUX0lOSVRSRAotc3RhdGljIHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqYWNwaV9maW5kX2RzZHRfaW5pdHJkKHZvaWQpCi17Ci0Jc3RydWN0IGZpbGUgKmZpcm13YXJlX2ZpbGU7Ci0JbW1fc2VnbWVudF90IG9sZGZzOwotCXVuc2lnbmVkIGxvbmcgbGVuLCBsZW4yOwotCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqZHNkdF9idWZmZXIsICpyZXQgPSBOVUxMOwotCXN0cnVjdCBrc3RhdCBzdGF0OwotCWNoYXIgKnJhbWZzX2RzZHRfbmFtZSA9ICIvRFNEVC5hbWwiOwotCi0JcHJpbnRrKEtFUk5fSU5GTyBQUkVGSVggIkNoZWNraW5nIGluaXRyYW1mcyBmb3IgY3VzdG9tIERTRFRcbiIpOwotCi0JLyoKLQkgKiBOZXZlciBkbyB0aGlzIGF0IGhvbWUsIG9ubHkgdGhlIHVzZXItc3BhY2UgaXMgYWxsb3dlZCB0byBvcGVuIGEgZmlsZS4KLQkgKiBUaGUgY2xlYW4gd2F5IHdvdWxkIGJlIHRvIHVzZSB0aGUgZmlybXdhcmUgbG9hZGVyLgotCSAqIEJ1dCB0aGlzIGNvZGUgbXVzdCBiZSBydW4gYmVmb3JlIHRoZXJlIGlzIGFueSB1c2Vyc3BhY2UgYXZhaWxhYmxlLgotCSAqIEEgc3RhdGljL2luaXQgZmlybXdhcmUgaW5mcmFzdHJ1Y3R1cmUgZG9lc24ndCBleGlzdCB5ZXQuLi4KLQkgKi8KLQlpZiAodmZzX3N0YXQocmFtZnNfZHNkdF9uYW1lLCAmc3RhdCkgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JbGVuID0gc3RhdC5zaXplOwotCS8qIGNoZWNrIGVzcGVjaWFsbHkgYWdhaW5zdCBlbXB0eSBmaWxlcyAqLwotCWlmIChsZW4gPD0gNCkgewotCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJGYWlsZWQ6IERTRFQgb25seSAlbHUgYnl0ZXMuXG4iLCBsZW4pOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCWZpcm13YXJlX2ZpbGUgPSBmaWxwX29wZW4ocmFtZnNfZHNkdF9uYW1lLCBPX1JET05MWSwgMCk7Ci0JaWYgKElTX0VSUihmaXJtd2FyZV9maWxlKSkgewotCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJGYWlsZWQgdG8gb3BlbiAlcy5cbiIsIHJhbWZzX2RzZHRfbmFtZSk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JZHNkdF9idWZmZXIgPSBrbWFsbG9jKGxlbiwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFkc2R0X2J1ZmZlcikgewotCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJGYWlsZWQgdG8gYWxsb2NhdGUgJWx1IGJ5dGVzLlxuIiwgbGVuKTsKLQkJZ290byBlcnI7Ci0JfQotCi0Jb2xkZnMgPSBnZXRfZnMoKTsKLQlzZXRfZnMoS0VSTkVMX0RTKTsKLQlsZW4yID0gdmZzX3JlYWQoZmlybXdhcmVfZmlsZSwgKGNoYXIgX191c2VyICopZHNkdF9idWZmZXIsIGxlbiwKLQkJJmZpcm13YXJlX2ZpbGUtPmZfcG9zKTsKLQlzZXRfZnMob2xkZnMpOwotCWlmIChsZW4yIDwgbGVuKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIkZhaWxlZCB0byByZWFkICVsdSBieXRlcyBmcm9tICVzLlxuIiwKLQkJCWxlbiwgcmFtZnNfZHNkdF9uYW1lKTsKLQkJQUNQSV9GUkVFKGRzZHRfYnVmZmVyKTsKLQkJZ290byBlcnI7Ci0JfQotCi0JcHJpbnRrKEtFUk5fSU5GTyBQUkVGSVggIkZvdW5kICVsdSBieXRlIERTRFQgaW4gJXMuXG4iLAotCQkJbGVuLCByYW1mc19kc2R0X25hbWUpOwotCXJldCA9IGRzZHRfYnVmZmVyOwotZXJyOgotCWZpbHBfY2xvc2UoZmlybXdhcmVfZmlsZSwgTlVMTCk7Ci0JcmV0dXJuIHJldDsKLX0KLSNlbmRpZgotCiBhY3BpX3N0YXR1cwogYWNwaV9vc190YWJsZV9vdmVycmlkZShzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKiBleGlzdGluZ190YWJsZSwKIAkJICAgICAgIHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqKiBuZXdfdGFibGUpCkBAIC0zOTgsMTYgKzMzMyw2IEBACiAJaWYgKHN0cm5jbXAoZXhpc3RpbmdfdGFibGUtPnNpZ25hdHVyZSwgIkRTRFQiLCA0KSA9PSAwKQogCQkqbmV3X3RhYmxlID0gKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqKUFtbENvZGU7CiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfQUNQSV9DVVNUT01fRFNEVF9JTklUUkQKLQlpZiAoKHN0cm5jbXAoZXhpc3RpbmdfdGFibGUtPnNpZ25hdHVyZSwgIkRTRFQiLCA0KSA9PSAwKSAmJgotCSAgICAhYWNwaV9ub19pbml0cmRfb3ZlcnJpZGUpIHsKLQkJc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICppbml0cmRfdGFibGU7Ci0KLQkJaW5pdHJkX3RhYmxlID0gYWNwaV9maW5kX2RzZHRfaW5pdHJkKCk7Ci0JCWlmIChpbml0cmRfdGFibGUpCi0JCQkqbmV3X3RhYmxlID0gaW5pdHJkX3RhYmxlOwotCX0KLSNlbmRpZgogCWlmICgqbmV3X3RhYmxlICE9IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyBQUkVGSVggIk92ZXJyaWRlIFslNC40cy0lOC44c10sICIKIAkJCSAgICJ0aGlzIGlzIHVuc2FmZTogdGFpbnRpbmcga2VybmVsXG4iLApAQCAtNDE4LDE1ICszNDMsNiBAQAogCXJldHVybiBBRV9PSzsKIH0KIAotI2lmZGVmIENPTkZJR19BQ1BJX0NVU1RPTV9EU0RUX0lOSVRSRAotc3RhdGljIGludCBfX2luaXQgYWNwaV9ub19pbml0cmRfb3ZlcnJpZGVfc2V0dXAoY2hhciAqcykKLXsKLQlhY3BpX25vX2luaXRyZF9vdmVycmlkZSA9IDE7Ci0JcmV0dXJuIDE7Ci19Ci1fX3NldHVwKCJhY3BpX25vX2luaXRyZF9vdmVycmlkZSIsIGFjcGlfbm9faW5pdHJkX292ZXJyaWRlX3NldHVwKTsKLSNlbmRpZgotCiBzdGF0aWMgaXJxcmV0dXJuX3QgYWNwaV9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCXUzMiBoYW5kbGVkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9pZGxlLmMgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2lkbGUuYwppbmRleCA2ZjNiMjE3Li5lOGUyZDg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2lkbGUuYworKysgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2lkbGUuYwpAQCAtMjE2LDggKzIxNiwxMCBAQAogCSAqIHRlc3QgTkVFRF9SRVNDSEVEOgogCSAqLwogCXNtcF9tYigpOwotCWlmICghbmVlZF9yZXNjaGVkKCkpCisJaWYgKCFuZWVkX3Jlc2NoZWQoKSkgewogCQlzYWZlX2hhbHQoKTsKKwkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwl9CiAJY3VycmVudF90aHJlYWRfaW5mbygpLT5zdGF0dXMgfD0gVFNfUE9MTElORzsKIH0KIApAQCAtNDIxLDcgKzQyMyw5IEBACiAJCWVsc2UKIAkJCWFjcGlfc2FmZV9oYWx0KCk7CiAKLQkJbG9jYWxfaXJxX2VuYWJsZSgpOworCQlpZiAoaXJxc19kaXNhYmxlZCgpKQorCQkJbG9jYWxfaXJxX2VuYWJsZSgpOworCiAJCXJldHVybjsKIAl9CiAKQEAgLTUzMCw3ICs1MzQsOSBAQAogCQkgKiAgICAgICBza2V3IG90aGVyd2lzZS4KIAkJICovCiAJCXNsZWVwX3RpY2tzID0gMHhGRkZGRkZGRjsKLQkJbG9jYWxfaXJxX2VuYWJsZSgpOworCQlpZiAoaXJxc19kaXNhYmxlZCgpKQorCQkJbG9jYWxfaXJxX2VuYWJsZSgpOworCiAJCWJyZWFrOwogCiAJY2FzZSBBQ1BJX1NUQVRFX0MyOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3ZpZGVvLmMgYi9kcml2ZXJzL2FjcGkvdmlkZW8uYwppbmRleCAxYmMwYzc0Li4xMmZiNDRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdmlkZW8uYworKysgYi9kcml2ZXJzL2FjcGkvdmlkZW8uYwpAQCAtODA3LDQwICs4MDcsMTEgQEAKIHN0YXRpYyBpbnQgYWNwaV92aWRlb19idXNfY2hlY2soc3RydWN0IGFjcGlfdmlkZW9fYnVzICp2aWRlbykKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSAtRU5PRU5UOwotCWxvbmcgZGV2aWNlX2lkOwotCXN0cnVjdCBkZXZpY2UgKmRldjsKLQlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZTsKKwogCiAJaWYgKCF2aWRlbykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlkZXZpY2UgPSB2aWRlby0+ZGV2aWNlOwotCi0Jc3RhdHVzID0KLQkgICAgYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGRldmljZS0+aGFuZGxlLCAiX0FEUiIsIE5VTEwsICZkZXZpY2VfaWQpOwotCi0JaWYgKCFBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQkvKiBXZSBuZWVkIHRvIGF0dGVtcHQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIF9BRFIgcmVmZXJzIHRvIGEKLQkgICBQQ0kgZGV2aWNlIG9yIG5vdC4gVGhlcmUncyBubyB0ZXJyaWJseSBnb29kIHdheSB0byBkbyB0aGlzLAotCSAgIHNvIHRoZSBiZXN0IHdlIGNhbiBob3BlIGZvciBpcyB0byBhc3N1bWUgdGhhdCB0aGVyZSdsbCBuZXZlcgotCSAgIGJlIGEgdmlkZW8gZGV2aWNlIGluIHRoZSBob3N0IGJyaWRnZSAqLwotCWlmIChkZXZpY2VfaWQgPj0gMHgxMDAwMCkgewotCQkvKiBJdCBsb29rcyBsaWtlIGEgUENJIGRldmljZS4gRG9lcyBpdCBleGlzdD8gKi8KLQkJZGV2ID0gYWNwaV9nZXRfcGh5c2ljYWxfZGV2aWNlKGRldmljZS0+aGFuZGxlKTsKLQl9IGVsc2UgewotCQkvKiBJdCBkb2Vzbid0IGxvb2sgbGlrZSBhIFBDSSBkZXZpY2UuIERvZXMgaXRzIHBhcmVudAotCQkgICBleGlzdD8gKi8KLQkJYWNwaV9oYW5kbGUgcGhhbmRsZTsKLQkJaWYgKGFjcGlfZ2V0X3BhcmVudChkZXZpY2UtPmhhbmRsZSwgJnBoYW5kbGUpKQotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCWRldiA9IGFjcGlfZ2V0X3BoeXNpY2FsX2RldmljZShwaGFuZGxlKTsKLQl9Ci0JaWYgKCFkZXYpCi0JCXJldHVybiAtRU5PREVWOwotCXB1dF9kZXZpY2UoZGV2KTsKLQogCS8qIFNpbmNlIHRoZXJlIGlzIG5vIEhJRCwgQ0lEIGFuZCBzbyBvbiBmb3IgVkdBIGRyaXZlciwgd2UgaGF2ZQogCSAqIHRvIGNoZWNrIHdlbGwga25vd24gcmVxdWlyZWQgbm9kZXMuCiAJICovCkBAIC0xMzY2LDM3ICsxMzM3LDggQEAKIAogc3RhdGljIGludCBhY3BpX3ZpZGVvX2J1c19hZGRfZnMoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCiB7Ci0JbG9uZyBkZXZpY2VfaWQ7Ci0JaW50IHN0YXR1czsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudHJ5ID0gTlVMTDsKIAlzdHJ1Y3QgYWNwaV92aWRlb19idXMgKnZpZGVvOwotCXN0cnVjdCBkZXZpY2UgKmRldjsKLQotCXN0YXR1cyA9Ci0JICAgIGFjcGlfZXZhbHVhdGVfaW50ZWdlcihkZXZpY2UtPmhhbmRsZSwgIl9BRFIiLCBOVUxMLCAmZGV2aWNlX2lkKTsKLQotCWlmICghQUNQSV9TVUNDRVNTKHN0YXR1cykpCi0JCXJldHVybiAtRU5PREVWOwotCi0JLyogV2UgbmVlZCB0byBhdHRlbXB0IHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBfQURSIHJlZmVycyB0byBhCi0JICAgUENJIGRldmljZSBvciBub3QuIFRoZXJlJ3Mgbm8gdGVycmlibHkgZ29vZCB3YXkgdG8gZG8gdGhpcywKLQkgICBzbyB0aGUgYmVzdCB3ZSBjYW4gaG9wZSBmb3IgaXMgdG8gYXNzdW1lIHRoYXQgdGhlcmUnbGwgbmV2ZXIKLQkgICBiZSBhIHZpZGVvIGRldmljZSBpbiB0aGUgaG9zdCBicmlkZ2UgKi8KLQlpZiAoZGV2aWNlX2lkID49IDB4MTAwMDApIHsKLQkJLyogSXQgbG9va3MgbGlrZSBhIFBDSSBkZXZpY2UuIERvZXMgaXQgZXhpc3Q/ICovCi0JCWRldiA9IGFjcGlfZ2V0X3BoeXNpY2FsX2RldmljZShkZXZpY2UtPmhhbmRsZSk7Ci0JfSBlbHNlIHsKLQkJLyogSXQgZG9lc24ndCBsb29rIGxpa2UgYSBQQ0kgZGV2aWNlLiBEb2VzIGl0cyBwYXJlbnQKLQkJICAgZXhpc3Q/ICovCi0JCWFjcGlfaGFuZGxlIHBoYW5kbGU7Ci0JCWlmIChhY3BpX2dldF9wYXJlbnQoZGV2aWNlLT5oYW5kbGUsICZwaGFuZGxlKSkKLQkJCXJldHVybiAtRU5PREVWOwotCQlkZXYgPSBhY3BpX2dldF9waHlzaWNhbF9kZXZpY2UocGhhbmRsZSk7Ci0JfQotCWlmICghZGV2KQotCQlyZXR1cm4gLUVOT0RFVjsKLQlwdXRfZGV2aWNlKGRldik7Ci0KIAogCiAJdmlkZW8gPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9LY29uZmlnIGIvZHJpdmVycy9hdGEvS2NvbmZpZwppbmRleCBlNDY5NjQ3Li4yNWFiYTY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9LY29uZmlnCisrKyBiL2RyaXZlcnMvYXRhL0tjb25maWcKQEAgLTMwLDYgKzMwLDcgQEAKIGNvbmZpZyBBVEFfQUNQSQogCWJvb2wKIAlkZXBlbmRzIG9uIEFDUEkgJiYgUENJCisJc2VsZWN0IEFDUElfRE9DSwogCWRlZmF1bHQgeQogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGFkZHMgc3VwcG9ydCBmb3IgQVRBLXJlbGF0ZWQgQUNQSSBvYmplY3RzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvYWhjaS5jIGIvZHJpdmVycy9hdGEvYWhjaS5jCmluZGV4IDY5Nzg0NjkuLjE3ZWU2ZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2FoY2kuYworKysgYi9kcml2ZXJzL2F0YS9haGNpLmMKQEAgLTQ5LDYgKzQ5LDEwIEBACiAjZGVmaW5lIERSVl9OQU1FCSJhaGNpIgogI2RlZmluZSBEUlZfVkVSU0lPTgkiMy4wIgogCitzdGF0aWMgaW50IGFoY2lfc2tpcF9ob3N0X3Jlc2V0OworbW9kdWxlX3BhcmFtX25hbWVkKHNraXBfaG9zdF9yZXNldCwgYWhjaV9za2lwX2hvc3RfcmVzZXQsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHNraXBfaG9zdF9yZXNldCwgInNraXAgZ2xvYmFsIGhvc3QgcmVzZXQgKDA9ZG9uJ3Qgc2tpcCwgMT1za2lwKSIpOworCiBzdGF0aWMgaW50IGFoY2lfZW5hYmxlX2FscG0oc3RydWN0IGF0YV9wb3J0ICphcCwKIAkJZW51bSBsaW5rX3BtIHBvbGljeSk7CiBzdGF0aWMgdm9pZCBhaGNpX2Rpc2FibGVfYWxwbShzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKQEAgLTU4Nyw2ICs1OTEsNyBAQAogCiAJLyogTWFydmVsbCAqLwogCXsgUENJX1ZERVZJQ0UoTUFSVkVMTCwgMHg2MTQ1KSwgYm9hcmRfYWhjaV9tdiB9LAkvKiA2MTQ1ICovCisJeyBQQ0lfVkRFVklDRShNQVJWRUxMLCAweDYxMjEpLCBib2FyZF9haGNpX212IH0sCS8qIDYxMjEgKi8KIAogCS8qIEdlbmVyaWMsIFBDSSBjbGFzcyBjb2RlIGZvciBBSENJICovCiAJeyBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELApAQCAtNjYxLDYgKzY2Niw3IEBACiAJdm9pZCBfX2lvbWVtICptbWlvID0gcGNpbV9pb21hcF90YWJsZShwZGV2KVtBSENJX1BDSV9CQVJdOwogCXUzMiBjYXAsIHBvcnRfbWFwOwogCWludCBpOworCWludCBtdjsKIAogCS8qIG1ha2Ugc3VyZSBBSENJIG1vZGUgaXMgZW5hYmxlZCBiZWZvcmUgYWNjZXNzaW5nIENBUCAqLwogCWFoY2lfZW5hYmxlX2FoY2kobW1pbyk7CkBAIC02OTYsMTIgKzcwMiwxNiBAQAogCSAqIHByZXNlbmNlIHJlZ2lzdGVyLCBhcyBiaXQgNCAoY291bnRpbmcgZnJvbSAwKQogCSAqLwogCWlmIChocHJpdi0+ZmxhZ3MgJiBBSENJX0hGTEFHX01WX1BBVEEpIHsKKwkJaWYgKHBkZXYtPmRldmljZSA9PSAweDYxMjEpCisJCQltdiA9IDB4MzsKKwkJZWxzZQorCQkJbXYgPSAweGY7CiAJCWRldl9wcmludGsoS0VSTl9FUlIsICZwZGV2LT5kZXYsCiAJCQkgICAiTVZfQUhDSSBIQUNLOiBwb3J0X21hcCAleCAtPiAleFxuIiwKLQkJCSAgIGhwcml2LT5wb3J0X21hcCwKLQkJCSAgIGhwcml2LT5wb3J0X21hcCAmIDB4Zik7CisJCQkgICBwb3J0X21hcCwKKwkJCSAgIHBvcnRfbWFwICYgbXYpOwogCi0JCXBvcnRfbWFwICY9IDB4ZjsKKwkJcG9ydF9tYXAgJj0gbXY7CiAJfQogCiAJLyogY3Jvc3MgY2hlY2sgcG9ydF9tYXAgYW5kIGNhcC5uX3BvcnRzICovCkBAIC0xMDg4LDI5ICsxMDk4LDM1IEBACiAJYWhjaV9lbmFibGVfYWhjaShtbWlvKTsKIAogCS8qIGdsb2JhbCBjb250cm9sbGVyIHJlc2V0ICovCi0JdG1wID0gcmVhZGwobW1pbyArIEhPU1RfQ1RMKTsKLQlpZiAoKHRtcCAmIEhPU1RfUkVTRVQpID09IDApIHsKLQkJd3JpdGVsKHRtcCB8IEhPU1RfUkVTRVQsIG1taW8gKyBIT1NUX0NUTCk7Ci0JCXJlYWRsKG1taW8gKyBIT1NUX0NUTCk7IC8qIGZsdXNoICovCi0JfQorCWlmICghYWhjaV9za2lwX2hvc3RfcmVzZXQpIHsKKwkJdG1wID0gcmVhZGwobW1pbyArIEhPU1RfQ1RMKTsKKwkJaWYgKCh0bXAgJiBIT1NUX1JFU0VUKSA9PSAwKSB7CisJCQl3cml0ZWwodG1wIHwgSE9TVF9SRVNFVCwgbW1pbyArIEhPU1RfQ1RMKTsKKwkJCXJlYWRsKG1taW8gKyBIT1NUX0NUTCk7IC8qIGZsdXNoICovCisJCX0KIAotCS8qIHJlc2V0IG11c3QgY29tcGxldGUgd2l0aGluIDEgc2Vjb25kLCBvcgotCSAqIHRoZSBoYXJkd2FyZSBzaG91bGQgYmUgY29uc2lkZXJlZCBmcmllZC4KLQkgKi8KLQlzc2xlZXAoMSk7CisJCS8qIHJlc2V0IG11c3QgY29tcGxldGUgd2l0aGluIDEgc2Vjb25kLCBvcgorCQkgKiB0aGUgaGFyZHdhcmUgc2hvdWxkIGJlIGNvbnNpZGVyZWQgZnJpZWQuCisJCSAqLworCQlzc2xlZXAoMSk7CiAKLQl0bXAgPSByZWFkbChtbWlvICsgSE9TVF9DVEwpOwotCWlmICh0bXAgJiBIT1NUX1JFU0VUKSB7Ci0JCWRldl9wcmludGsoS0VSTl9FUlIsIGhvc3QtPmRldiwKLQkJCSAgICJjb250cm9sbGVyIHJlc2V0IGZhaWxlZCAoMHgleClcbiIsIHRtcCk7Ci0JCXJldHVybiAtRUlPOwotCX0KKwkJdG1wID0gcmVhZGwobW1pbyArIEhPU1RfQ1RMKTsKKwkJaWYgKHRtcCAmIEhPU1RfUkVTRVQpIHsKKwkJCWRldl9wcmludGsoS0VSTl9FUlIsIGhvc3QtPmRldiwKKwkJCQkgICAiY29udHJvbGxlciByZXNldCBmYWlsZWQgKDB4JXgpXG4iLCB0bXApOworCQkJcmV0dXJuIC1FSU87CisJCX0KIAotCS8qIHR1cm4gb24gQUhDSSBtb2RlICovCi0JYWhjaV9lbmFibGVfYWhjaShtbWlvKTsKKwkJLyogdHVybiBvbiBBSENJIG1vZGUgKi8KKwkJYWhjaV9lbmFibGVfYWhjaShtbWlvKTsKIAotCS8qIHNvbWUgcmVnaXN0ZXJzIG1pZ2h0IGJlIGNsZWFyZWQgb24gcmVzZXQuICByZXN0b3JlIGluaXRpYWwgdmFsdWVzICovCi0JYWhjaV9yZXN0b3JlX2luaXRpYWxfY29uZmlnKGhvc3QpOworCQkvKiBTb21lIHJlZ2lzdGVycyBtaWdodCBiZSBjbGVhcmVkIG9uIHJlc2V0LiAgUmVzdG9yZQorCQkgKiBpbml0aWFsIHZhbHVlcy4KKwkJICovCisJCWFoY2lfcmVzdG9yZV9pbml0aWFsX2NvbmZpZyhob3N0KTsKKwl9IGVsc2UKKwkJZGV2X3ByaW50ayhLRVJOX0lORk8sIGhvc3QtPmRldiwKKwkJCSAgICJza2lwcGluZyBnbG9iYWwgaG9zdCByZXNldFxuIik7CiAKIAlpZiAocGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfSU5URUwpIHsKIAkJdTE2IHRtcDE2OwpAQCAtMTE2Miw5ICsxMTc4LDE0IEBACiAJaW50IGk7CiAJdm9pZCBfX2lvbWVtICpwb3J0X21taW87CiAJdTMyIHRtcDsKKwlpbnQgbXY7CiAKIAlpZiAoaHByaXYtPmZsYWdzICYgQUhDSV9IRkxBR19NVl9QQVRBKSB7Ci0JCXBvcnRfbW1pbyA9IF9fYWhjaV9wb3J0X2Jhc2UoaG9zdCwgNCk7CisJCWlmIChwZGV2LT5kZXZpY2UgPT0gMHg2MTIxKQorCQkJbXYgPSAyOworCQllbHNlCisJCQltdiA9IDQ7CisJCXBvcnRfbW1pbyA9IF9fYWhjaV9wb3J0X2Jhc2UoaG9zdCwgbXYpOwogCiAJCXdyaXRlbCgwLCBwb3J0X21taW8gKyBQT1JUX0lSUV9NQVNLKTsKIApAQCAtMjI0MSw3ICsyMjYyLDEwIEBACiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKLQlyYyA9IHBjaW1faW9tYXBfcmVnaW9ucyhwZGV2LCAxIDw8IEFIQ0lfUENJX0JBUiwgRFJWX05BTUUpOworCS8qIEFIQ0kgY29udHJvbGxlcnMgb2Z0ZW4gaW1wbGVtZW50IFNGRiBjb21wYXRpYmxlIGludGVyZmFjZS4KKwkgKiBHcmFiIGFsbCBQQ0kgQkFScyBqdXN0IGluIGNhc2UuCisJICovCisJcmMgPSBwY2ltX2lvbWFwX3JlZ2lvbnNfcmVxdWVzdF9hbGwocGRldiwgMSA8PCBBSENJX1BDSV9CQVIsIERSVl9OQU1FKTsKIAlpZiAocmMgPT0gLUVCVVNZKQogCQlwY2ltX3Bpbl9kZXZpY2UocGRldik7CiAJaWYgKHJjKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLWFjcGkuYyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1hY3BpLmMKaW5kZXggMDc3MGNiNy4uYmY5OGE1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLWFjcGkuYworKysgYi9kcml2ZXJzL2F0YS9saWJhdGEtYWNwaS5jCkBAIC0xMTgsNDUgKzExOCw3NyBAQAogCQlhcC0+cGZsYWdzIHw9IEFUQV9QRkxBR19JTklUX0dUTV9WQUxJRDsKIH0KIAotc3RhdGljIHZvaWQgYXRhX2FjcGlfaGFuZGxlX2hvdHBsdWcoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGtvYmplY3QgKmtvYmosCitzdGF0aWMgdm9pZCBhdGFfYWNwaV9oYW5kbGVfaG90cGx1ZyhzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX2RldmljZSAqZGV2LAogCQkJCSAgICB1MzIgZXZlbnQpCiB7CiAJY2hhciBldmVudF9zdHJpbmdbMTJdOwogCWNoYXIgKmVudnBbXSA9IHsgZXZlbnRfc3RyaW5nLCBOVUxMIH07Ci0Jc3RydWN0IGF0YV9laF9pbmZvICplaGkgPSAmYXAtPmxpbmsuZWhfaW5mbzsKKwlzdHJ1Y3QgYXRhX2VoX2luZm8gKmVoaTsKKwlzdHJ1Y3Qga29iamVjdCAqa29iaiA9IE5VTEw7CisJaW50IHdhaXQgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoZXZlbnQgPT0gMCB8fCBldmVudCA9PSAxKSB7Ci0JICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKGFwLT5sb2NrLCBmbGFncyk7Ci0JICAgICAgIGF0YV9laGlfY2xlYXJfZGVzYyhlaGkpOwotCSAgICAgICBhdGFfZWhpX3B1c2hfZGVzYyhlaGksICJBQ1BJIGV2ZW50Iik7Ci0JICAgICAgIGF0YV9laGlfaG90cGx1Z2dlZChlaGkpOwotCSAgICAgICBhdGFfcG9ydF9mcmVlemUoYXApOwotCSAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKGFwLT5sb2NrLCBmbGFncyk7CisJaWYgKCFhcCkKKwkJYXAgPSBkZXYtPmxpbmstPmFwOworCWVoaSA9ICZhcC0+bGluay5laF9pbmZvOworCisJc3Bpbl9sb2NrX2lycXNhdmUoYXAtPmxvY2ssIGZsYWdzKTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEFDUElfTk9USUZZX0JVU19DSEVDSzoKKwljYXNlIEFDUElfTk9USUZZX0RFVklDRV9DSEVDSzoKKwkJYXRhX2VoaV9wdXNoX2Rlc2MoZWhpLCAiQUNQSSBldmVudCIpOworCQlhdGFfZWhpX2hvdHBsdWdnZWQoZWhpKTsKKwkJYXRhX3BvcnRfZnJlZXplKGFwKTsKKwkJYnJlYWs7CisKKwljYXNlIEFDUElfTk9USUZZX0VKRUNUX1JFUVVFU1Q6CisJCWF0YV9laGlfcHVzaF9kZXNjKGVoaSwgIkFDUEkgZXZlbnQiKTsKKwkJaWYgKGRldikKKwkJCWRldi0+ZmxhZ3MgfD0gQVRBX0RGTEFHX0RFVEFDSDsKKwkJZWxzZSB7CisJCQlzdHJ1Y3QgYXRhX2xpbmsgKnRsaW5rOworCQkJc3RydWN0IGF0YV9kZXZpY2UgKnRkZXY7CisKKwkJCWF0YV9wb3J0X2Zvcl9lYWNoX2xpbmsodGxpbmssIGFwKQorCQkJCWF0YV9saW5rX2Zvcl9lYWNoX2Rldih0ZGV2LCB0bGluaykKKwkJCQkJdGRldi0+ZmxhZ3MgfD0gQVRBX0RGTEFHX0RFVEFDSDsKKwkJfQorCisJCWF0YV9wb3J0X3NjaGVkdWxlX2VoKGFwKTsKKwkJd2FpdCA9IDE7CisJCWJyZWFrOwogCX0KIAorCWlmIChkZXYpIHsKKwkJaWYgKGRldi0+c2RldikKKwkJCWtvYmogPSAmZGV2LT5zZGV2LT5zZGV2X2dlbmRldi5rb2JqOworCX0gZWxzZQorCQlrb2JqID0gJmFwLT5kZXYtPmtvYmo7CisKIAlpZiAoa29iaikgewogCQlzcHJpbnRmKGV2ZW50X3N0cmluZywgIkJBWV9FVkVOVD0lZCIsIGV2ZW50KTsKIAkJa29iamVjdF91ZXZlbnRfZW52KGtvYmosIEtPQkpfQ0hBTkdFLCBlbnZwKTsKIAl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKGFwLT5sb2NrLCBmbGFncyk7CisKKwlpZiAod2FpdCkKKwkJYXRhX3BvcnRfd2FpdF9laChhcCk7CiB9CiAKIHN0YXRpYyB2b2lkIGF0YV9hY3BpX2Rldl9ub3RpZnkoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgZXZlbnQsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGF0YV9kZXZpY2UgKmRldiA9IGRhdGE7Ci0Jc3RydWN0IGtvYmplY3QgKmtvYmogPSBOVUxMOwogCi0JaWYgKGRldi0+c2RldikKLQkJa29iaiA9ICZkZXYtPnNkZXYtPnNkZXZfZ2VuZGV2LmtvYmo7Ci0KLQlhdGFfYWNwaV9oYW5kbGVfaG90cGx1ZyhkZXYtPmxpbmstPmFwLCBrb2JqLCBldmVudCk7CisJYXRhX2FjcGlfaGFuZGxlX2hvdHBsdWcoTlVMTCwgZGV2LCBldmVudCk7CiB9CiAKIHN0YXRpYyB2b2lkIGF0YV9hY3BpX2FwX25vdGlmeShhY3BpX2hhbmRsZSBoYW5kbGUsIHUzMiBldmVudCwgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gZGF0YTsKIAotCWF0YV9hY3BpX2hhbmRsZV9ob3RwbHVnKGFwLCAmYXAtPmRldi0+a29iaiwgZXZlbnQpOworCWF0YV9hY3BpX2hhbmRsZV9ob3RwbHVnKGFwLCBOVUxMLCBldmVudCk7CiB9CiAKIC8qKgpAQCAtMTkxLDIwICsyMjMsMzAgQEAKIAkJZWxzZQogCQkJYXRhX2FjcGlfYXNzb2NpYXRlX2lkZV9wb3J0KGFwKTsKIAotCQlpZiAoYXAtPmFjcGlfaGFuZGxlKQotCQkJYWNwaV9pbnN0YWxsX25vdGlmeV9oYW5kbGVyIChhcC0+YWNwaV9oYW5kbGUsCi0JCQkJCQkgICAgIEFDUElfU1lTVEVNX05PVElGWSwKLQkJCQkJCSAgICAgYXRhX2FjcGlfYXBfbm90aWZ5LAotCQkJCQkJICAgICBhcCk7CisJCWlmIChhcC0+YWNwaV9oYW5kbGUpIHsKKwkJCWFjcGlfaW5zdGFsbF9ub3RpZnlfaGFuZGxlcihhcC0+YWNwaV9oYW5kbGUsCisJCQkJCQkgICAgQUNQSV9TWVNURU1fTk9USUZZLAorCQkJCQkJICAgIGF0YV9hY3BpX2FwX25vdGlmeSwgYXApOworI2lmIGRlZmluZWQoQ09ORklHX0FDUElfRE9DSykgfHwgZGVmaW5lZChDT05GSUdfQUNQSV9ET0NLX01PRFVMRSkKKwkJCS8qIHdlIG1pZ2h0IGJlIG9uIGEgZG9ja2luZyBzdGF0aW9uICovCisJCQlyZWdpc3Rlcl9ob3RwbHVnX2RvY2tfZGV2aWNlKGFwLT5hY3BpX2hhbmRsZSwKKwkJCQkJCSAgICAgYXRhX2FjcGlfYXBfbm90aWZ5LCBhcCk7CisjZW5kaWYKKwkJfQogCiAJCWZvciAoaiA9IDA7IGogPCBhdGFfbGlua19tYXhfZGV2aWNlcygmYXAtPmxpbmspOyBqKyspIHsKIAkJCXN0cnVjdCBhdGFfZGV2aWNlICpkZXYgPSAmYXAtPmxpbmsuZGV2aWNlW2pdOwogCi0JCQlpZiAoZGV2LT5hY3BpX2hhbmRsZSkKLQkJCQlhY3BpX2luc3RhbGxfbm90aWZ5X2hhbmRsZXIgKGRldi0+YWNwaV9oYW5kbGUsCi0JCQkJCQkJICAgICBBQ1BJX1NZU1RFTV9OT1RJRlksCi0JCQkJCQkJICAgICBhdGFfYWNwaV9kZXZfbm90aWZ5LAotCQkJCQkJCSAgICAgZGV2KTsKKwkJCWlmIChkZXYtPmFjcGlfaGFuZGxlKSB7CisJCQkJYWNwaV9pbnN0YWxsX25vdGlmeV9oYW5kbGVyKGRldi0+YWNwaV9oYW5kbGUsCisJCQkJCQlBQ1BJX1NZU1RFTV9OT1RJRlksCisJCQkJCQlhdGFfYWNwaV9kZXZfbm90aWZ5LCBkZXYpOworI2lmIGRlZmluZWQoQ09ORklHX0FDUElfRE9DSykgfHwgZGVmaW5lZChDT05GSUdfQUNQSV9ET0NLX01PRFVMRSkKKwkJCQkvKiB3ZSBtaWdodCBiZSBvbiBhIGRvY2tpbmcgc3RhdGlvbiAqLworCQkJCXJlZ2lzdGVyX2hvdHBsdWdfZG9ja19kZXZpY2UoZGV2LT5hY3BpX2hhbmRsZSwKKwkJCQkJCWF0YV9hY3BpX2Rldl9ub3RpZnksIGRldik7CisjZW5kaWYKKwkJCX0KIAkJfQogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfYWxpLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2FsaS5jCmluZGV4IDdlNjhlZGYzLi44Nzg2NDU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2FsaS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfYWxpLmMKQEAgLTI5NSw3ICsyOTUsNyBAQAogc3RhdGljIGludCBhbGlfY2hlY2tfYXRhcGlfZG1hKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCiB7CiAJLyogSWYgaXRzIG5vdCBhIG1lZGlhIGNvbW1hbmQsIGl0cyBub3Qgd29ydGggaXQgKi8KLQlpZiAocWMtPm5ieXRlcyA8IDIwNDgpCisJaWYgKGF0YXBpX2NtZF90eXBlKHFjLT5jZGJbMF0pID09IEFUQVBJX01JU0MpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRtL2ZvcmUyMDBlLmMgYi9kcml2ZXJzL2F0bS9mb3JlMjAwZS5jCmluZGV4IDk0MjdhNjEuLjQzMjE4MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL2ZvcmUyMDBlLmMKKysrIGIvZHJpdmVycy9hdG0vZm9yZTIwMGUuYwpAQCAtMTk4OCwxOSArMTk4OCwxOSBAQAogICAgIGlmIChmb3JlMjAwZV9nZXRzdGF0cyhmb3JlMjAwZSkgPCAwKQogCXJldHVybiAtRUlPOwogCi0gICAgdG1wLnNlY3Rpb25fYmlwID0gY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5vYzMuc2VjdGlvbl9iaXA4X2Vycm9ycyk7Ci0gICAgdG1wLmxpbmVfYmlwICAgID0gY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5vYzMubGluZV9iaXAyNF9lcnJvcnMpOwotICAgIHRtcC5wYXRoX2JpcCAgICA9IGNwdV90b19iZTMyKGZvcmUyMDBlLT5zdGF0cy0+b2MzLnBhdGhfYmlwOF9lcnJvcnMpOwotICAgIHRtcC5saW5lX2ZlYmUgICA9IGNwdV90b19iZTMyKGZvcmUyMDBlLT5zdGF0cy0+b2MzLmxpbmVfZmViZV9lcnJvcnMpOwotICAgIHRtcC5wYXRoX2ZlYmUgICA9IGNwdV90b19iZTMyKGZvcmUyMDBlLT5zdGF0cy0+b2MzLnBhdGhfZmViZV9lcnJvcnMpOwotICAgIHRtcC5jb3JyX2hjcyAgICA9IGNwdV90b19iZTMyKGZvcmUyMDBlLT5zdGF0cy0+b2MzLmNvcnJfaGNzX2Vycm9ycyk7Ci0gICAgdG1wLnVuY29ycl9oY3MgID0gY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5vYzMudWNvcnJfaGNzX2Vycm9ycyk7Ci0gICAgdG1wLnR4X2NlbGxzICAgID0gY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5hYWwwLmNlbGxzX3RyYW5zbWl0dGVkKSAgKwotCSAgICAgICAgICAgICAgY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5hYWwzNC5jZWxsc190cmFuc21pdHRlZCkgKwotCSAgICAgICAgICAgICAgY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5hYWw1LmNlbGxzX3RyYW5zbWl0dGVkKTsKLSAgICB0bXAucnhfY2VsbHMgICAgPSBjcHVfdG9fYmUzMihmb3JlMjAwZS0+c3RhdHMtPmFhbDAuY2VsbHNfcmVjZWl2ZWQpICAgICArCi0JICAgICAgICAgICAgICBjcHVfdG9fYmUzMihmb3JlMjAwZS0+c3RhdHMtPmFhbDM0LmNlbGxzX3JlY2VpdmVkKSAgICArCi0JICAgICAgICAgICAgICBjcHVfdG9fYmUzMihmb3JlMjAwZS0+c3RhdHMtPmFhbDUuY2VsbHNfcmVjZWl2ZWQpOworICAgIHRtcC5zZWN0aW9uX2JpcCA9IGJlMzJfdG9fY3B1KGZvcmUyMDBlLT5zdGF0cy0+b2MzLnNlY3Rpb25fYmlwOF9lcnJvcnMpOworICAgIHRtcC5saW5lX2JpcCAgICA9IGJlMzJfdG9fY3B1KGZvcmUyMDBlLT5zdGF0cy0+b2MzLmxpbmVfYmlwMjRfZXJyb3JzKTsKKyAgICB0bXAucGF0aF9iaXAgICAgPSBiZTMyX3RvX2NwdShmb3JlMjAwZS0+c3RhdHMtPm9jMy5wYXRoX2JpcDhfZXJyb3JzKTsKKyAgICB0bXAubGluZV9mZWJlICAgPSBiZTMyX3RvX2NwdShmb3JlMjAwZS0+c3RhdHMtPm9jMy5saW5lX2ZlYmVfZXJyb3JzKTsKKyAgICB0bXAucGF0aF9mZWJlICAgPSBiZTMyX3RvX2NwdShmb3JlMjAwZS0+c3RhdHMtPm9jMy5wYXRoX2ZlYmVfZXJyb3JzKTsKKyAgICB0bXAuY29ycl9oY3MgICAgPSBiZTMyX3RvX2NwdShmb3JlMjAwZS0+c3RhdHMtPm9jMy5jb3JyX2hjc19lcnJvcnMpOworICAgIHRtcC51bmNvcnJfaGNzICA9IGJlMzJfdG9fY3B1KGZvcmUyMDBlLT5zdGF0cy0+b2MzLnVjb3JyX2hjc19lcnJvcnMpOworICAgIHRtcC50eF9jZWxscyAgICA9IGJlMzJfdG9fY3B1KGZvcmUyMDBlLT5zdGF0cy0+YWFsMC5jZWxsc190cmFuc21pdHRlZCkgICsKKwkgICAgICAgICAgICAgIGJlMzJfdG9fY3B1KGZvcmUyMDBlLT5zdGF0cy0+YWFsMzQuY2VsbHNfdHJhbnNtaXR0ZWQpICsKKwkgICAgICAgICAgICAgIGJlMzJfdG9fY3B1KGZvcmUyMDBlLT5zdGF0cy0+YWFsNS5jZWxsc190cmFuc21pdHRlZCk7CisgICAgdG1wLnJ4X2NlbGxzICAgID0gYmUzMl90b19jcHUoZm9yZTIwMGUtPnN0YXRzLT5hYWwwLmNlbGxzX3JlY2VpdmVkKSAgICAgKworCSAgICAgICAgICAgICAgYmUzMl90b19jcHUoZm9yZTIwMGUtPnN0YXRzLT5hYWwzNC5jZWxsc19yZWNlaXZlZCkgICAgKworCSAgICAgICAgICAgICAgYmUzMl90b19jcHUoZm9yZTIwMGUtPnN0YXRzLT5hYWw1LmNlbGxzX3JlY2VpdmVkKTsKIAogICAgIGlmIChhcmcpCiAJcmV0dXJuIGNvcHlfdG9fdXNlcihhcmcsICZ0bXAsIHNpemVvZihzdHJ1Y3Qgc29uZXRfc3RhdHMpKSA/IC1FRkFVTFQgOiAwOwkKQEAgLTI1ODcsNyArMjU4Nyw3IEBACiBzdGF0aWMgaW50IF9fZGV2aW5pdAogZm9yZTIwMGVfbG9hZF9mdyhzdHJ1Y3QgZm9yZTIwMGUqIGZvcmUyMDBlKQogewotICAgIHUzMiogZndfZGF0YSA9ICh1MzIqKSBmb3JlMjAwZS0+YnVzLT5md19kYXRhOworICAgIF9fbGUzMiogZndfZGF0YSA9IChfX2xlMzIqKSBmb3JlMjAwZS0+YnVzLT5md19kYXRhOwogICAgIHUzMiAgZndfc2l6ZSA9ICh1MzIpICpmb3JlMjAwZS0+YnVzLT5md19zaXplIC8gc2l6ZW9mKHUzMik7CiAKICAgICBzdHJ1Y3QgZndfaGVhZGVyKiBmd19oZWFkZXIgPSAoc3RydWN0IGZ3X2hlYWRlciopIGZ3X2RhdGE7CkBAIC0yOTY1LDggKzI5NjUsOCBAQAogCQkgICAgICAgIiAgNGI1YjpcbiIKIAkJICAgICAgICIgICAgIGNyY19oZWFkZXJfZXJyb3JzOlx0XHQlMTB1XG4iCiAJCSAgICAgICAiICAgICBmcmFtaW5nX2Vycm9yczpcdFx0JTEwdVxuIiwKLQkJICAgICAgIGNwdV90b19iZTMyKGZvcmUyMDBlLT5zdGF0cy0+cGh5LmNyY19oZWFkZXJfZXJyb3JzKSwKLQkJICAgICAgIGNwdV90b19iZTMyKGZvcmUyMDBlLT5zdGF0cy0+cGh5LmZyYW1pbmdfZXJyb3JzKSk7CisJCSAgICAgICBiZTMyX3RvX2NwdShmb3JlMjAwZS0+c3RhdHMtPnBoeS5jcmNfaGVhZGVyX2Vycm9ycyksCisJCSAgICAgICBiZTMyX3RvX2NwdShmb3JlMjAwZS0+c3RhdHMtPnBoeS5mcmFtaW5nX2Vycm9ycykpOwogICAgIAogICAgIGlmICghbGVmdC0tKQogCXJldHVybiBzcHJpbnRmKHBhZ2UsICJcbiIKQEAgLTI5NzgsMTMgKzI5NzgsMTMgQEAKIAkJICAgICAgICIgICAgIHBhdGhfZmViZV9lcnJvcnM6XHRcdCUxMHVcbiIKIAkJICAgICAgICIgICAgIGNvcnJfaGNzX2Vycm9yczpcdFx0JTEwdVxuIgogCQkgICAgICAgIiAgICAgdWNvcnJfaGNzX2Vycm9yczpcdFx0JTEwdVxuIiwKLQkJICAgICAgIGNwdV90b19iZTMyKGZvcmUyMDBlLT5zdGF0cy0+b2MzLnNlY3Rpb25fYmlwOF9lcnJvcnMpLAotCQkgICAgICAgY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5vYzMucGF0aF9iaXA4X2Vycm9ycyksCi0JCSAgICAgICBjcHVfdG9fYmUzMihmb3JlMjAwZS0+c3RhdHMtPm9jMy5saW5lX2JpcDI0X2Vycm9ycyksCi0JCSAgICAgICBjcHVfdG9fYmUzMihmb3JlMjAwZS0+c3RhdHMtPm9jMy5saW5lX2ZlYmVfZXJyb3JzKSwKLQkJICAgICAgIGNwdV90b19iZTMyKGZvcmUyMDBlLT5zdGF0cy0+b2MzLnBhdGhfZmViZV9lcnJvcnMpLAotCQkgICAgICAgY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5vYzMuY29ycl9oY3NfZXJyb3JzKSwKLQkJICAgICAgIGNwdV90b19iZTMyKGZvcmUyMDBlLT5zdGF0cy0+b2MzLnVjb3JyX2hjc19lcnJvcnMpKTsKKwkJICAgICAgIGJlMzJfdG9fY3B1KGZvcmUyMDBlLT5zdGF0cy0+b2MzLnNlY3Rpb25fYmlwOF9lcnJvcnMpLAorCQkgICAgICAgYmUzMl90b19jcHUoZm9yZTIwMGUtPnN0YXRzLT5vYzMucGF0aF9iaXA4X2Vycm9ycyksCisJCSAgICAgICBiZTMyX3RvX2NwdShmb3JlMjAwZS0+c3RhdHMtPm9jMy5saW5lX2JpcDI0X2Vycm9ycyksCisJCSAgICAgICBiZTMyX3RvX2NwdShmb3JlMjAwZS0+c3RhdHMtPm9jMy5saW5lX2ZlYmVfZXJyb3JzKSwKKwkJICAgICAgIGJlMzJfdG9fY3B1KGZvcmUyMDBlLT5zdGF0cy0+b2MzLnBhdGhfZmViZV9lcnJvcnMpLAorCQkgICAgICAgYmUzMl90b19jcHUoZm9yZTIwMGUtPnN0YXRzLT5vYzMuY29ycl9oY3NfZXJyb3JzKSwKKwkJICAgICAgIGJlMzJfdG9fY3B1KGZvcmUyMDBlLT5zdGF0cy0+b2MzLnVjb3JyX2hjc19lcnJvcnMpKTsKIAogICAgIGlmICghbGVmdC0tKQogCXJldHVybiBzcHJpbnRmKHBhZ2UsIlxuIgpAQCAtMjk5NSwxMiArMjk5NSwxMiBAQAogCQkgICAgICAgIiAgICAgdnBpIG5vIGNvbm46XHRcdCUxMHVcbiIKIAkJICAgICAgICIgICAgIHZjaSBvdXQgb2YgcmFuZ2U6XHRcdCUxMHVcbiIKIAkJICAgICAgICIgICAgIHZjaSBubyBjb25uOlx0XHQlMTB1XG4iLAotCQkgICAgICAgY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5hdG0uY2VsbHNfdHJhbnNtaXR0ZWQpLAotCQkgICAgICAgY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5hdG0uY2VsbHNfcmVjZWl2ZWQpLAotCQkgICAgICAgY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5hdG0udnBpX2JhZF9yYW5nZSksCi0JCSAgICAgICBjcHVfdG9fYmUzMihmb3JlMjAwZS0+c3RhdHMtPmF0bS52cGlfbm9fY29ubiksCi0JCSAgICAgICBjcHVfdG9fYmUzMihmb3JlMjAwZS0+c3RhdHMtPmF0bS52Y2lfYmFkX3JhbmdlKSwKLQkJICAgICAgIGNwdV90b19iZTMyKGZvcmUyMDBlLT5zdGF0cy0+YXRtLnZjaV9ub19jb25uKSk7CisJCSAgICAgICBiZTMyX3RvX2NwdShmb3JlMjAwZS0+c3RhdHMtPmF0bS5jZWxsc190cmFuc21pdHRlZCksCisJCSAgICAgICBiZTMyX3RvX2NwdShmb3JlMjAwZS0+c3RhdHMtPmF0bS5jZWxsc19yZWNlaXZlZCksCisJCSAgICAgICBiZTMyX3RvX2NwdShmb3JlMjAwZS0+c3RhdHMtPmF0bS52cGlfYmFkX3JhbmdlKSwKKwkJICAgICAgIGJlMzJfdG9fY3B1KGZvcmUyMDBlLT5zdGF0cy0+YXRtLnZwaV9ub19jb25uKSwKKwkJICAgICAgIGJlMzJfdG9fY3B1KGZvcmUyMDBlLT5zdGF0cy0+YXRtLnZjaV9iYWRfcmFuZ2UpLAorCQkgICAgICAgYmUzMl90b19jcHUoZm9yZTIwMGUtPnN0YXRzLT5hdG0udmNpX25vX2Nvbm4pKTsKICAgICAKICAgICBpZiAoIWxlZnQtLSkKIAlyZXR1cm4gc3ByaW50ZihwYWdlLCJcbiIKQEAgLTMwMDgsOSArMzAwOCw5IEBACiAJCSAgICAgICAiICAgICBUWDpcdFx0XHQlMTB1XG4iCiAJCSAgICAgICAiICAgICBSWDpcdFx0XHQlMTB1XG4iCiAJCSAgICAgICAiICAgICBkcm9wcGVkOlx0XHRcdCUxMHVcbiIsCi0JCSAgICAgICBjcHVfdG9fYmUzMihmb3JlMjAwZS0+c3RhdHMtPmFhbDAuY2VsbHNfdHJhbnNtaXR0ZWQpLAotCQkgICAgICAgY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5hYWwwLmNlbGxzX3JlY2VpdmVkKSwKLQkJICAgICAgIGNwdV90b19iZTMyKGZvcmUyMDBlLT5zdGF0cy0+YWFsMC5jZWxsc19kcm9wcGVkKSk7CisJCSAgICAgICBiZTMyX3RvX2NwdShmb3JlMjAwZS0+c3RhdHMtPmFhbDAuY2VsbHNfdHJhbnNtaXR0ZWQpLAorCQkgICAgICAgYmUzMl90b19jcHUoZm9yZTIwMGUtPnN0YXRzLT5hYWwwLmNlbGxzX3JlY2VpdmVkKSwKKwkJICAgICAgIGJlMzJfdG9fY3B1KGZvcmUyMDBlLT5zdGF0cy0+YWFsMC5jZWxsc19kcm9wcGVkKSk7CiAgICAgCiAgICAgaWYgKCFsZWZ0LS0pCiAJcmV0dXJuIHNwcmludGYocGFnZSwiXG4iCkBAIC0zMDI2LDE1ICszMDI2LDE1IEBACiAJCSAgICAgICAiICAgICAgIFJYOlx0XHRcdCUxMHVcbiIKIAkJICAgICAgICIgICAgICAgZHJvcHBlZDpcdFx0XHQlMTB1XG4iCiAJCSAgICAgICAiICAgICAgIHByb3RvY29sIGVycm9yczpcdFx0JTEwdVxuIiwKLQkJICAgICAgIGNwdV90b19iZTMyKGZvcmUyMDBlLT5zdGF0cy0+YWFsMzQuY2VsbHNfdHJhbnNtaXR0ZWQpLAotCQkgICAgICAgY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5hYWwzNC5jZWxsc19yZWNlaXZlZCksCi0JCSAgICAgICBjcHVfdG9fYmUzMihmb3JlMjAwZS0+c3RhdHMtPmFhbDM0LmNlbGxzX2Ryb3BwZWQpLAotCQkgICAgICAgY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5hYWwzNC5jZWxsc19jcmNfZXJyb3JzKSwKLQkJICAgICAgIGNwdV90b19iZTMyKGZvcmUyMDBlLT5zdGF0cy0+YWFsMzQuY2VsbHNfcHJvdG9jb2xfZXJyb3JzKSwKLQkJICAgICAgIGNwdV90b19iZTMyKGZvcmUyMDBlLT5zdGF0cy0+YWFsMzQuY3NwZHVzX3RyYW5zbWl0dGVkKSwKLQkJICAgICAgIGNwdV90b19iZTMyKGZvcmUyMDBlLT5zdGF0cy0+YWFsMzQuY3NwZHVzX3JlY2VpdmVkKSwKLQkJICAgICAgIGNwdV90b19iZTMyKGZvcmUyMDBlLT5zdGF0cy0+YWFsMzQuY3NwZHVzX2Ryb3BwZWQpLAotCQkgICAgICAgY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5hYWwzNC5jc3BkdXNfcHJvdG9jb2xfZXJyb3JzKSk7CisJCSAgICAgICBiZTMyX3RvX2NwdShmb3JlMjAwZS0+c3RhdHMtPmFhbDM0LmNlbGxzX3RyYW5zbWl0dGVkKSwKKwkJICAgICAgIGJlMzJfdG9fY3B1KGZvcmUyMDBlLT5zdGF0cy0+YWFsMzQuY2VsbHNfcmVjZWl2ZWQpLAorCQkgICAgICAgYmUzMl90b19jcHUoZm9yZTIwMGUtPnN0YXRzLT5hYWwzNC5jZWxsc19kcm9wcGVkKSwKKwkJICAgICAgIGJlMzJfdG9fY3B1KGZvcmUyMDBlLT5zdGF0cy0+YWFsMzQuY2VsbHNfY3JjX2Vycm9ycyksCisJCSAgICAgICBiZTMyX3RvX2NwdShmb3JlMjAwZS0+c3RhdHMtPmFhbDM0LmNlbGxzX3Byb3RvY29sX2Vycm9ycyksCisJCSAgICAgICBiZTMyX3RvX2NwdShmb3JlMjAwZS0+c3RhdHMtPmFhbDM0LmNzcGR1c190cmFuc21pdHRlZCksCisJCSAgICAgICBiZTMyX3RvX2NwdShmb3JlMjAwZS0+c3RhdHMtPmFhbDM0LmNzcGR1c19yZWNlaXZlZCksCisJCSAgICAgICBiZTMyX3RvX2NwdShmb3JlMjAwZS0+c3RhdHMtPmFhbDM0LmNzcGR1c19kcm9wcGVkKSwKKwkJICAgICAgIGJlMzJfdG9fY3B1KGZvcmUyMDBlLT5zdGF0cy0+YWFsMzQuY3NwZHVzX3Byb3RvY29sX2Vycm9ycykpOwogICAgIAogICAgIGlmICghbGVmdC0tKQogCXJldHVybiBzcHJpbnRmKHBhZ2UsIlxuIgpAQCAtMzA1MCwxNSArMzA1MCwxNSBAQAogCQkgICAgICAgIiAgICAgICBkcm9wcGVkOlx0XHRcdCUxMHVcbiIKIAkJICAgICAgICIgICAgICAgQ1JDIGVycm9yczpcdFx0JTEwdVxuIgogCQkgICAgICAgIiAgICAgICBwcm90b2NvbCBlcnJvcnM6XHRcdCUxMHVcbiIsCi0JCSAgICAgICBjcHVfdG9fYmUzMihmb3JlMjAwZS0+c3RhdHMtPmFhbDUuY2VsbHNfdHJhbnNtaXR0ZWQpLAotCQkgICAgICAgY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5hYWw1LmNlbGxzX3JlY2VpdmVkKSwKLQkJICAgICAgIGNwdV90b19iZTMyKGZvcmUyMDBlLT5zdGF0cy0+YWFsNS5jZWxsc19kcm9wcGVkKSwKLQkJICAgICAgIGNwdV90b19iZTMyKGZvcmUyMDBlLT5zdGF0cy0+YWFsNS5jb25nZXN0aW9uX2V4cGVyaWVuY2VkKSwKLQkJICAgICAgIGNwdV90b19iZTMyKGZvcmUyMDBlLT5zdGF0cy0+YWFsNS5jc3BkdXNfdHJhbnNtaXR0ZWQpLAotCQkgICAgICAgY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5hYWw1LmNzcGR1c19yZWNlaXZlZCksCi0JCSAgICAgICBjcHVfdG9fYmUzMihmb3JlMjAwZS0+c3RhdHMtPmFhbDUuY3NwZHVzX2Ryb3BwZWQpLAotCQkgICAgICAgY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5hYWw1LmNzcGR1c19jcmNfZXJyb3JzKSwKLQkJICAgICAgIGNwdV90b19iZTMyKGZvcmUyMDBlLT5zdGF0cy0+YWFsNS5jc3BkdXNfcHJvdG9jb2xfZXJyb3JzKSk7CisJCSAgICAgICBiZTMyX3RvX2NwdShmb3JlMjAwZS0+c3RhdHMtPmFhbDUuY2VsbHNfdHJhbnNtaXR0ZWQpLAorCQkgICAgICAgYmUzMl90b19jcHUoZm9yZTIwMGUtPnN0YXRzLT5hYWw1LmNlbGxzX3JlY2VpdmVkKSwKKwkJICAgICAgIGJlMzJfdG9fY3B1KGZvcmUyMDBlLT5zdGF0cy0+YWFsNS5jZWxsc19kcm9wcGVkKSwKKwkJICAgICAgIGJlMzJfdG9fY3B1KGZvcmUyMDBlLT5zdGF0cy0+YWFsNS5jb25nZXN0aW9uX2V4cGVyaWVuY2VkKSwKKwkJICAgICAgIGJlMzJfdG9fY3B1KGZvcmUyMDBlLT5zdGF0cy0+YWFsNS5jc3BkdXNfdHJhbnNtaXR0ZWQpLAorCQkgICAgICAgYmUzMl90b19jcHUoZm9yZTIwMGUtPnN0YXRzLT5hYWw1LmNzcGR1c19yZWNlaXZlZCksCisJCSAgICAgICBiZTMyX3RvX2NwdShmb3JlMjAwZS0+c3RhdHMtPmFhbDUuY3NwZHVzX2Ryb3BwZWQpLAorCQkgICAgICAgYmUzMl90b19jcHUoZm9yZTIwMGUtPnN0YXRzLT5hYWw1LmNzcGR1c19jcmNfZXJyb3JzKSwKKwkJICAgICAgIGJlMzJfdG9fY3B1KGZvcmUyMDBlLT5zdGF0cy0+YWFsNS5jc3BkdXNfcHJvdG9jb2xfZXJyb3JzKSk7CiAgICAgCiAgICAgaWYgKCFsZWZ0LS0pCiAJcmV0dXJuIHNwcmludGYocGFnZSwiXG4iCkBAIC0zMDY5LDExICszMDY5LDExIEBACiAJCSAgICAgICAiICAgICBsYXJnZSBiMjpcdFx0XHQlMTB1XG4iCiAJCSAgICAgICAiICAgICBSWCBQRFVzOlx0XHRcdCUxMHVcbiIKIAkJICAgICAgICIgICAgIFRYIFBEVXM6XHRcdFx0JTEwbHVcbiIsCi0JCSAgICAgICBjcHVfdG9fYmUzMihmb3JlMjAwZS0+c3RhdHMtPmF1eC5zbWFsbF9iMV9mYWlsZWQpLAotCQkgICAgICAgY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5hdXgubGFyZ2VfYjFfZmFpbGVkKSwKLQkJICAgICAgIGNwdV90b19iZTMyKGZvcmUyMDBlLT5zdGF0cy0+YXV4LnNtYWxsX2IyX2ZhaWxlZCksCi0JCSAgICAgICBjcHVfdG9fYmUzMihmb3JlMjAwZS0+c3RhdHMtPmF1eC5sYXJnZV9iMl9mYWlsZWQpLAotCQkgICAgICAgY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5hdXgucnBkX2FsbG9jX2ZhaWxlZCksCisJCSAgICAgICBiZTMyX3RvX2NwdShmb3JlMjAwZS0+c3RhdHMtPmF1eC5zbWFsbF9iMV9mYWlsZWQpLAorCQkgICAgICAgYmUzMl90b19jcHUoZm9yZTIwMGUtPnN0YXRzLT5hdXgubGFyZ2VfYjFfZmFpbGVkKSwKKwkJICAgICAgIGJlMzJfdG9fY3B1KGZvcmUyMDBlLT5zdGF0cy0+YXV4LnNtYWxsX2IyX2ZhaWxlZCksCisJCSAgICAgICBiZTMyX3RvX2NwdShmb3JlMjAwZS0+c3RhdHMtPmF1eC5sYXJnZV9iMl9mYWlsZWQpLAorCQkgICAgICAgYmUzMl90b19jcHUoZm9yZTIwMGUtPnN0YXRzLT5hdXgucnBkX2FsbG9jX2ZhaWxlZCksCiAJCSAgICAgICBmb3JlMjAwZS0+dHhfc2F0KTsKICAgICAKICAgICBpZiAoIWxlZnQtLSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRtL2ZvcmUyMDBlLmggYi9kcml2ZXJzL2F0bS9mb3JlMjAwZS5oCmluZGV4IGI4NWE1NDYuLjE4Mzg0MWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL2ZvcmUyMDBlLmgKKysrIGIvZHJpdmVycy9hdG0vZm9yZTIwMGUuaApAQCAtMzQ5LDkwICszNDksOTAgQEAKIC8qIHBoeXNpY2FsIGVuY29kaW5nIHN0YXRpc3RpY3MgKi8KIAogdHlwZWRlZiBzdHJ1Y3Qgc3RhdHNfcGh5IHsKLSAgICB1MzIgY3JjX2hlYWRlcl9lcnJvcnM7ICAgIC8qIGNlbGxzIHJlY2VpdmVkIHdpdGggYmFkIGhlYWRlciBDUkMgKi8KLSAgICB1MzIgZnJhbWluZ19lcnJvcnM7ICAgICAgIC8qIGNlbGxzIHJlY2VpdmVkIHdpdGggYmFkIGZyYW1pbmcgICAgKi8KLSAgICB1MzIgcGFkWyAyIF07ICAgICAgICAgICAgIC8qIGk5NjAgcGFkZGluZyAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX2JlMzIgY3JjX2hlYWRlcl9lcnJvcnM7ICAgIC8qIGNlbGxzIHJlY2VpdmVkIHdpdGggYmFkIGhlYWRlciBDUkMgKi8KKyAgICBfX2JlMzIgZnJhbWluZ19lcnJvcnM7ICAgICAgIC8qIGNlbGxzIHJlY2VpdmVkIHdpdGggYmFkIGZyYW1pbmcgICAgKi8KKyAgICBfX2JlMzIgcGFkWyAyIF07ICAgICAgICAgICAgIC8qIGk5NjAgcGFkZGluZyAgICAgICAgICAgICAgICAgICAgICAgKi8KIH0gc3RhdHNfcGh5X3Q7CiAKIAogLyogT0MtMyBzdGF0aXN0aWNzICovCiAKIHR5cGVkZWYgc3RydWN0IHN0YXRzX29jMyB7Ci0gICAgdTMyIHNlY3Rpb25fYmlwOF9lcnJvcnM7ICAgIC8qIHNlY3Rpb24gOCBiaXQgaW50ZXJsZWF2ZWQgcGFyaXR5ICAgICovCi0gICAgdTMyIHBhdGhfYmlwOF9lcnJvcnM7ICAgICAgIC8qIHBhdGggOCBiaXQgaW50ZXJsZWF2ZWQgcGFyaXR5ICAgICAgICovCi0gICAgdTMyIGxpbmVfYmlwMjRfZXJyb3JzOyAgICAgIC8qIGxpbmUgMjQgYml0IGludGVybGVhdmVkIHBhcml0eSAgICAgICovCi0gICAgdTMyIGxpbmVfZmViZV9lcnJvcnM7ICAgICAgIC8qIGxpbmUgZmFyIGVuZCBibG9jayBlcnJvcnMgICAgICAgICAgICovCi0gICAgdTMyIHBhdGhfZmViZV9lcnJvcnM7ICAgICAgIC8qIHBhdGggZmFyIGVuZCBibG9jayBlcnJvcnMgICAgICAgICAgICovCi0gICAgdTMyIGNvcnJfaGNzX2Vycm9yczsgICAgICAgIC8qIGNvcnJlY3RhYmxlIGhlYWRlciBjaGVjayBzZXF1ZW5jZSAgICovCi0gICAgdTMyIHVjb3JyX2hjc19lcnJvcnM7ICAgICAgIC8qIHVuY29ycmVjdGFibGUgaGVhZGVyIGNoZWNrIHNlcXVlbmNlICovCi0gICAgdTMyIHBhZFsgMSBdOyAgICAgICAgICAgICAgIC8qIGk5NjAgcGFkZGluZyAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19iZTMyIHNlY3Rpb25fYmlwOF9lcnJvcnM7ICAgIC8qIHNlY3Rpb24gOCBiaXQgaW50ZXJsZWF2ZWQgcGFyaXR5ICAgICovCisgICAgX19iZTMyIHBhdGhfYmlwOF9lcnJvcnM7ICAgICAgIC8qIHBhdGggOCBiaXQgaW50ZXJsZWF2ZWQgcGFyaXR5ICAgICAgICovCisgICAgX19iZTMyIGxpbmVfYmlwMjRfZXJyb3JzOyAgICAgIC8qIGxpbmUgMjQgYml0IGludGVybGVhdmVkIHBhcml0eSAgICAgICovCisgICAgX19iZTMyIGxpbmVfZmViZV9lcnJvcnM7ICAgICAgIC8qIGxpbmUgZmFyIGVuZCBibG9jayBlcnJvcnMgICAgICAgICAgICovCisgICAgX19iZTMyIHBhdGhfZmViZV9lcnJvcnM7ICAgICAgIC8qIHBhdGggZmFyIGVuZCBibG9jayBlcnJvcnMgICAgICAgICAgICovCisgICAgX19iZTMyIGNvcnJfaGNzX2Vycm9yczsgICAgICAgIC8qIGNvcnJlY3RhYmxlIGhlYWRlciBjaGVjayBzZXF1ZW5jZSAgICovCisgICAgX19iZTMyIHVjb3JyX2hjc19lcnJvcnM7ICAgICAgIC8qIHVuY29ycmVjdGFibGUgaGVhZGVyIGNoZWNrIHNlcXVlbmNlICovCisgICAgX19iZTMyIHBhZFsgMSBdOyAgICAgICAgICAgICAgIC8qIGk5NjAgcGFkZGluZyAgICAgICAgICAgICAgICAgICAgICAgICovCiB9IHN0YXRzX29jM190OwogCiAKIC8qIEFUTSBzdGF0aXN0aWNzICovCiAKIHR5cGVkZWYgc3RydWN0IHN0YXRzX2F0bSB7Ci0gICAgdTMyCWNlbGxzX3RyYW5zbWl0dGVkOyAgICAvKiBjZWxscyB0cmFuc21pdHRlZCAgICAgICAgICAgICAgICAgKi8KLSAgICB1MzIJY2VsbHNfcmVjZWl2ZWQ7ICAgICAgIC8qIGNlbGxzIHJlY2VpdmVkICAgICAgICAgICAgICAgICAgICAqLwotICAgIHUzMgl2cGlfYmFkX3JhbmdlOyAgICAgICAgLyogY2VsbCBkcm9wczogVlBJIG91dCBvZiByYW5nZSAgICAgICovCi0gICAgdTMyCXZwaV9ub19jb25uOyAgICAgICAgICAvKiBjZWxsIGRyb3BzOiBubyBjb25uZWN0aW9uIGZvciBWUEkgKi8KLSAgICB1MzIJdmNpX2JhZF9yYW5nZTsgICAgICAgIC8qIGNlbGwgZHJvcHM6IFZDSSBvdXQgb2YgcmFuZ2UgICAgICAqLwotICAgIHUzMgl2Y2lfbm9fY29ubjsgICAgICAgICAgLyogY2VsbCBkcm9wczogbm8gY29ubmVjdGlvbiBmb3IgVkNJICovCi0gICAgdTMyCXBhZFsgMiBdOyAgICAgICAgICAgICAvKiBpOTYwIHBhZGRpbmcgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX2JlMzIJY2VsbHNfdHJhbnNtaXR0ZWQ7ICAgIC8qIGNlbGxzIHRyYW5zbWl0dGVkICAgICAgICAgICAgICAgICAqLworICAgIF9fYmUzMgljZWxsc19yZWNlaXZlZDsgICAgICAgLyogY2VsbHMgcmVjZWl2ZWQgICAgICAgICAgICAgICAgICAgICovCisgICAgX19iZTMyCXZwaV9iYWRfcmFuZ2U7ICAgICAgICAvKiBjZWxsIGRyb3BzOiBWUEkgb3V0IG9mIHJhbmdlICAgICAgKi8KKyAgICBfX2JlMzIJdnBpX25vX2Nvbm47ICAgICAgICAgIC8qIGNlbGwgZHJvcHM6IG5vIGNvbm5lY3Rpb24gZm9yIFZQSSAqLworICAgIF9fYmUzMgl2Y2lfYmFkX3JhbmdlOyAgICAgICAgLyogY2VsbCBkcm9wczogVkNJIG91dCBvZiByYW5nZSAgICAgICovCisgICAgX19iZTMyCXZjaV9ub19jb25uOyAgICAgICAgICAvKiBjZWxsIGRyb3BzOiBubyBjb25uZWN0aW9uIGZvciBWQ0kgKi8KKyAgICBfX2JlMzIJcGFkWyAyIF07ICAgICAgICAgICAgIC8qIGk5NjAgcGFkZGluZyAgICAgICAgICAgICAgICAgICAgICAqLwogfSBzdGF0c19hdG1fdDsKIAogLyogQUFMMCBzdGF0aXN0aWNzICovCiAKIHR5cGVkZWYgc3RydWN0IHN0YXRzX2FhbDAgewotICAgIHUzMgljZWxsc190cmFuc21pdHRlZDsgICAgLyogY2VsbHMgdHJhbnNtaXR0ZWQgKi8KLSAgICB1MzIJY2VsbHNfcmVjZWl2ZWQ7ICAgICAgIC8qIGNlbGxzIHJlY2VpdmVkICAgICovCi0gICAgdTMyCWNlbGxzX2Ryb3BwZWQ7ICAgICAgICAvKiBjZWxscyBkcm9wcGVkICAgICAqLwotICAgIHUzMglwYWRbIDEgXTsgICAgICAgICAgICAgLyogaTk2MCBwYWRkaW5nICAgICAgKi8KKyAgICBfX2JlMzIJY2VsbHNfdHJhbnNtaXR0ZWQ7ICAgIC8qIGNlbGxzIHRyYW5zbWl0dGVkICovCisgICAgX19iZTMyCWNlbGxzX3JlY2VpdmVkOyAgICAgICAvKiBjZWxscyByZWNlaXZlZCAgICAqLworICAgIF9fYmUzMgljZWxsc19kcm9wcGVkOyAgICAgICAgLyogY2VsbHMgZHJvcHBlZCAgICAgKi8KKyAgICBfX2JlMzIJcGFkWyAxIF07ICAgICAgICAgICAgIC8qIGk5NjAgcGFkZGluZyAgICAgICovCiB9IHN0YXRzX2FhbDBfdDsKIAogCiAvKiBBQUwzLzQgc3RhdGlzdGljcyAqLwogCiB0eXBlZGVmIHN0cnVjdCBzdGF0c19hYWwzNCB7Ci0gICAgdTMyCWNlbGxzX3RyYW5zbWl0dGVkOyAgICAgICAgIC8qIGNlbGxzIHRyYW5zbWl0dGVkIGZyb20gc2VnbWVudGVkIFBEVXMgKi8KLSAgICB1MzIJY2VsbHNfcmVjZWl2ZWQ7ICAgICAgICAgICAgLyogY2VsbHMgcmVhc3NlbWJsZWQgaW50byBQRFVzICAgICAgICAgICAqLwotICAgIHUzMgljZWxsc19jcmNfZXJyb3JzOyAgICAgICAgICAvKiBwYXlsb2FkIENSQyBlcnJvciBjb3VudCAgICAgICAgICAgICAgICovCi0gICAgdTMyCWNlbGxzX3Byb3RvY29sX2Vycm9yczsgICAgIC8qIFNBUiBvciBDUyBsYXllciBwcm90b2NvbCBlcnJvcnMgICAgICAgKi8KLSAgICB1MzIJY2VsbHNfZHJvcHBlZDsgICAgICAgICAgICAgLyogY2VsbHMgZHJvcHBlZDogcGFydGlhbCByZWFzc2VtYmx5ICAgICAqLwotICAgIHUzMgljc3BkdXNfdHJhbnNtaXR0ZWQ7ICAgICAgICAvKiBDUyBQRFVzIHRyYW5zbWl0dGVkICAgICAgICAgICAgICAgICAgICovCi0gICAgdTMyCWNzcGR1c19yZWNlaXZlZDsgICAgICAgICAgIC8qIENTIFBEVXMgcmVjZWl2ZWQgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICB1MzIJY3NwZHVzX3Byb3RvY29sX2Vycm9yczsgICAgLyogQ1MgbGF5ZXIgcHJvdG9jb2wgZXJyb3JzICAgICAgICAgICAgICAqLwotICAgIHUzMgljc3BkdXNfZHJvcHBlZDsgICAgICAgICAgICAvKiByZWFzc2VtYmxlZCBQRFVzIGRyb3AnZCAoaW4gY2VsbHMpICAgICovCi0gICAgdTMyCXBhZFsgMyBdOyAgICAgICAgICAgICAgICAgIC8qIGk5NjAgcGFkZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX2JlMzIJY2VsbHNfdHJhbnNtaXR0ZWQ7ICAgICAgICAgLyogY2VsbHMgdHJhbnNtaXR0ZWQgZnJvbSBzZWdtZW50ZWQgUERVcyAqLworICAgIF9fYmUzMgljZWxsc19yZWNlaXZlZDsgICAgICAgICAgICAvKiBjZWxscyByZWFzc2VtYmxlZCBpbnRvIFBEVXMgICAgICAgICAgICovCisgICAgX19iZTMyCWNlbGxzX2NyY19lcnJvcnM7ICAgICAgICAgIC8qIHBheWxvYWQgQ1JDIGVycm9yIGNvdW50ICAgICAgICAgICAgICAgKi8KKyAgICBfX2JlMzIJY2VsbHNfcHJvdG9jb2xfZXJyb3JzOyAgICAgLyogU0FSIG9yIENTIGxheWVyIHByb3RvY29sIGVycm9ycyAgICAgICAqLworICAgIF9fYmUzMgljZWxsc19kcm9wcGVkOyAgICAgICAgICAgICAvKiBjZWxscyBkcm9wcGVkOiBwYXJ0aWFsIHJlYXNzZW1ibHkgICAgICovCisgICAgX19iZTMyCWNzcGR1c190cmFuc21pdHRlZDsgICAgICAgIC8qIENTIFBEVXMgdHJhbnNtaXR0ZWQgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX2JlMzIJY3NwZHVzX3JlY2VpdmVkOyAgICAgICAgICAgLyogQ1MgUERVcyByZWNlaXZlZCAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fYmUzMgljc3BkdXNfcHJvdG9jb2xfZXJyb3JzOyAgICAvKiBDUyBsYXllciBwcm90b2NvbCBlcnJvcnMgICAgICAgICAgICAgICovCisgICAgX19iZTMyCWNzcGR1c19kcm9wcGVkOyAgICAgICAgICAgIC8qIHJlYXNzZW1ibGVkIFBEVXMgZHJvcCdkIChpbiBjZWxscykgICAgKi8KKyAgICBfX2JlMzIJcGFkWyAzIF07ICAgICAgICAgICAgICAgICAgLyogaTk2MCBwYWRkaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogfSBzdGF0c19hYWwzNF90OwogCiAKIC8qIEFBTDUgc3RhdGlzdGljcyAqLwogCiB0eXBlZGVmIHN0cnVjdCBzdGF0c19hYWw1IHsKLSAgICB1MzIJY2VsbHNfdHJhbnNtaXR0ZWQ7ICAgICAgICAgLyogY2VsbHMgdHJhbnNtaXR0ZWQgZnJvbSBzZWdtZW50ZWQgU0RVcyAqLwotICAgIHUzMgljZWxsc19yZWNlaXZlZDsJCSAgIC8qIGNlbGxzIHJlYXNzZW1ibGVkIGludG8gU0RVcyAgICAgICAgICAgKi8KLSAgICB1MzIJY2VsbHNfZHJvcHBlZDsJCSAgIC8qIHJlYXNzZW1ibGVkIFBEVXMgZHJvcHBlZCAoaW4gY2VsbHMpICAgKi8KLSAgICB1MzIJY29uZ2VzdGlvbl9leHBlcmllbmNlZDsgICAgLyogQ1JDIGVycm9yIGFuZCBsZW5ndGggd3JvbmcgICAgICAgICAgICAqLwotICAgIHUzMgljc3BkdXNfdHJhbnNtaXR0ZWQ7ICAgICAgICAvKiBDUyBQRFVzIHRyYW5zbWl0dGVkICAgICAgICAgICAgICAgICAgICovCi0gICAgdTMyCWNzcGR1c19yZWNlaXZlZDsgICAgICAgICAgIC8qIENTIFBEVXMgcmVjZWl2ZWQgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICB1MzIJY3NwZHVzX2NyY19lcnJvcnM7ICAgICAgICAgLyogQ1MgUERVcyBDUkMgZXJyb3JzICAgICAgICAgICAgICAgICAgICAqLwotICAgIHUzMgljc3BkdXNfcHJvdG9jb2xfZXJyb3JzOyAgICAvKiBDUyBsYXllciBwcm90b2NvbCBlcnJvcnMgICAgICAgICAgICAgICovCi0gICAgdTMyCWNzcGR1c19kcm9wcGVkOyAgICAgICAgICAgIC8qIHJlYXNzZW1ibGVkIFBEVXMgZHJvcHBlZCAgICAgICAgICAgICAgKi8KLSAgICB1MzIJcGFkWyAzIF07ICAgICAgICAgICAgICAgICAgLyogaTk2MCBwYWRkaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fYmUzMgljZWxsc190cmFuc21pdHRlZDsgICAgICAgICAvKiBjZWxscyB0cmFuc21pdHRlZCBmcm9tIHNlZ21lbnRlZCBTRFVzICovCisgICAgX19iZTMyCWNlbGxzX3JlY2VpdmVkOwkJICAgLyogY2VsbHMgcmVhc3NlbWJsZWQgaW50byBTRFVzICAgICAgICAgICAqLworICAgIF9fYmUzMgljZWxsc19kcm9wcGVkOwkJICAgLyogcmVhc3NlbWJsZWQgUERVcyBkcm9wcGVkIChpbiBjZWxscykgICAqLworICAgIF9fYmUzMgljb25nZXN0aW9uX2V4cGVyaWVuY2VkOyAgICAvKiBDUkMgZXJyb3IgYW5kIGxlbmd0aCB3cm9uZyAgICAgICAgICAgICovCisgICAgX19iZTMyCWNzcGR1c190cmFuc21pdHRlZDsgICAgICAgIC8qIENTIFBEVXMgdHJhbnNtaXR0ZWQgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX2JlMzIJY3NwZHVzX3JlY2VpdmVkOyAgICAgICAgICAgLyogQ1MgUERVcyByZWNlaXZlZCAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fYmUzMgljc3BkdXNfY3JjX2Vycm9yczsgICAgICAgICAvKiBDUyBQRFVzIENSQyBlcnJvcnMgICAgICAgICAgICAgICAgICAgICovCisgICAgX19iZTMyCWNzcGR1c19wcm90b2NvbF9lcnJvcnM7ICAgIC8qIENTIGxheWVyIHByb3RvY29sIGVycm9ycyAgICAgICAgICAgICAgKi8KKyAgICBfX2JlMzIJY3NwZHVzX2Ryb3BwZWQ7ICAgICAgICAgICAgLyogcmVhc3NlbWJsZWQgUERVcyBkcm9wcGVkICAgICAgICAgICAgICAqLworICAgIF9fYmUzMglwYWRbIDMgXTsgICAgICAgICAgICAgICAgICAvKiBpOTYwIHBhZGRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICovCiB9IHN0YXRzX2FhbDVfdDsKIAogCiAvKiBhdXhpbGlhcnkgc3RhdGlzdGljcyAqLwogCiB0eXBlZGVmIHN0cnVjdCBzdGF0c19hdXggewotICAgIHUzMglzbWFsbF9iMV9mYWlsZWQ7ICAgICAvKiByZWNlaXZlIEJEIGFsbG9jYXRpb24gZmFpbHVyZXMgICovCi0gICAgdTMyCWxhcmdlX2IxX2ZhaWxlZDsgICAgIC8qIHJlY2VpdmUgQkQgYWxsb2NhdGlvbiBmYWlsdXJlcyAgKi8KLSAgICB1MzIJc21hbGxfYjJfZmFpbGVkOyAgICAgLyogcmVjZWl2ZSBCRCBhbGxvY2F0aW9uIGZhaWx1cmVzICAqLwotICAgIHUzMglsYXJnZV9iMl9mYWlsZWQ7ICAgICAvKiByZWNlaXZlIEJEIGFsbG9jYXRpb24gZmFpbHVyZXMgICovCi0gICAgdTMyCXJwZF9hbGxvY19mYWlsZWQ7ICAgIC8qIHJlY2VpdmUgUERVIGFsbG9jYXRpb24gZmFpbHVyZXMgKi8KLSAgICB1MzIJcmVjZWl2ZV9jYXJyaWVyOyAgICAgLyogbm8gY2FycmllciA9IDAsIGNhcnJpZXIgPSAxICAgICAqLwotICAgIHUzMglwYWRbIDIgXTsgICAgICAgICAgICAvKiBpOTYwIHBhZGRpbmcgICAgICAgICAgICAgICAgICAgICovCisgICAgX19iZTMyCXNtYWxsX2IxX2ZhaWxlZDsgICAgIC8qIHJlY2VpdmUgQkQgYWxsb2NhdGlvbiBmYWlsdXJlcyAgKi8KKyAgICBfX2JlMzIJbGFyZ2VfYjFfZmFpbGVkOyAgICAgLyogcmVjZWl2ZSBCRCBhbGxvY2F0aW9uIGZhaWx1cmVzICAqLworICAgIF9fYmUzMglzbWFsbF9iMl9mYWlsZWQ7ICAgICAvKiByZWNlaXZlIEJEIGFsbG9jYXRpb24gZmFpbHVyZXMgICovCisgICAgX19iZTMyCWxhcmdlX2IyX2ZhaWxlZDsgICAgIC8qIHJlY2VpdmUgQkQgYWxsb2NhdGlvbiBmYWlsdXJlcyAgKi8KKyAgICBfX2JlMzIJcnBkX2FsbG9jX2ZhaWxlZDsgICAgLyogcmVjZWl2ZSBQRFUgYWxsb2NhdGlvbiBmYWlsdXJlcyAqLworICAgIF9fYmUzMglyZWNlaXZlX2NhcnJpZXI7ICAgICAvKiBubyBjYXJyaWVyID0gMCwgY2FycmllciA9IDEgICAgICovCisgICAgX19iZTMyCXBhZFsgMiBdOyAgICAgICAgICAgIC8qIGk5NjAgcGFkZGluZyAgICAgICAgICAgICAgICAgICAgKi8KIH0gc3RhdHNfYXV4X3Q7CiAKIApAQCAtNjQzLDEwICs2NDMsMTAgQEAKIC8qIGhlYWRlciBvZiB0aGUgZmlybXdhcmUgaW1hZ2UgKi8KIAogdHlwZWRlZiBzdHJ1Y3QgZndfaGVhZGVyIHsKLSAgICB1MzIgbWFnaWM7ICAgICAgICAgICAvKiBtYWdpYyBudW1iZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICB1MzIgdmVyc2lvbjsgICAgICAgICAvKiBmaXJtd2FyZSB2ZXJzaW9uIGlkICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICB1MzIgbG9hZF9vZmZzZXQ7ICAgICAvKiBmdyBsb2FkIG9mZnNldCBpbiBib2FyZCBtZW1vcnkgICAgICAgICAgICAgKi8KLSAgICB1MzIgc3RhcnRfb2Zmc2V0OyAgICAvKiBmdyBleGVjdXRpb24gc3RhcnQgYWRkcmVzcyBpbiBib2FyZCBtZW1vcnkgKi8KKyAgICBfX2xlMzIgbWFnaWM7ICAgICAgICAgICAvKiBtYWdpYyBudW1iZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX2xlMzIgdmVyc2lvbjsgICAgICAgICAvKiBmaXJtd2FyZSB2ZXJzaW9uIGlkICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX2xlMzIgbG9hZF9vZmZzZXQ7ICAgICAvKiBmdyBsb2FkIG9mZnNldCBpbiBib2FyZCBtZW1vcnkgICAgICAgICAgICAgKi8KKyAgICBfX2xlMzIgc3RhcnRfb2Zmc2V0OyAgICAvKiBmdyBleGVjdXRpb24gc3RhcnQgYWRkcmVzcyBpbiBib2FyZCBtZW1vcnkgKi8KIH0gZndfaGVhZGVyX3Q7CiAKICNkZWZpbmUgRldfSEVBREVSX01BR0lDICAweDY1NzI2ZjY2ICAgIC8qICdmb3JlJyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9LY29uZmlnIGIvZHJpdmVycy9ibG9jay9LY29uZmlnCmluZGV4IGI2ZDIzMGIuLjBkMWQyMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svS2NvbmZpZworKysgYi9kcml2ZXJzL2Jsb2NrL0tjb25maWcKQEAgLTQ0LDE2ICs0NCw2IEBACiAJICBJZiB5b3UgaGF2ZSBhIFNXSU0tMyAoU3VwZXIgV296IEludGVncmF0ZWQgTWFjaGluZSAzOyBmcm9tIEFwcGxlKQogCSAgZmxvcHB5IGNvbnRyb2xsZXIsIHNheSBZIGhlcmUuIE1vc3QgY29tbW9ubHkgZm91bmQgaW4gUG93ZXJNYWNzLgogCi1jb25maWcgQkxLX0RFVl9QUzIKLQl0cmlzdGF0ZSAiUFMvMiBFU0RJIGhhcmQgZGlzayBzdXBwb3J0IgotCWRlcGVuZHMgb24gTUNBICYmIE1DQV9MRUdBQ1kgJiYgQlJPS0VOCi0JaGVscAotCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIFBTLzIgbWFjaGluZSB3aXRoIGEgTUNBIGJ1cyBhbmQgYW4gRVNESQotCSAgaGFyZCBkaXNrLgotCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwczJlc2RpLgotCiBjb25maWcgQU1JR0FfWjJSQU0KIAl0cmlzdGF0ZSAiQW1pZ2EgWm9ycm8gSUkgcmFtZGlzayBzdXBwb3J0IgogCWRlcGVuZHMgb24gWk9SUk8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svTWFrZWZpbGUgYi9kcml2ZXJzL2Jsb2NrL01ha2VmaWxlCmluZGV4IDAxYzk3MjQuLjVlNTg0MzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ibG9jay9NYWtlZmlsZQpAQCAtMTMsNyArMTMsNiBAQAogb2JqLSQoQ09ORklHX0FNSUdBX1oyUkFNKQkrPSB6MnJhbS5vCiBvYmotJChDT05GSUdfQkxLX0RFVl9SQU0pCSs9IGJyZC5vCiBvYmotJChDT05GSUdfQkxLX0RFVl9MT09QKQkrPSBsb29wLm8KLW9iai0kKENPTkZJR19CTEtfREVWX1BTMikJKz0gcHMyZXNkaS5vCiBvYmotJChDT05GSUdfQkxLX0RFVl9YRCkJKz0geGQubwogb2JqLSQoQ09ORklHX0JMS19DUFFfREEpCSs9IGNwcWFycmF5Lm8KIG9iai0kKENPTkZJR19CTEtfQ1BRX0NJU1NfREEpICArPSBjY2lzcy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3BzMmVzZGkuYyBiL2RyaXZlcnMvYmxvY2svcHMyZXNkaS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzc5NmUyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvYmxvY2svcHMyZXNkaS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTA3OSArMCwwIEBACi0vKiBwczJlc2RpIGRyaXZlciBiYXNlZCBvbiBhc3NlbWJsZXIgY29kZSBieSBBcmluZGFtIEJhbmVyamksCi0gICB3cml0dGVuIGJ5IFBldGVyIERlIFNjaHJpanZlciAqLwotLyogUmVhc3N1cmluZyBub3RlIHRvIElCTSA6IFRoaXMgZHJpdmVyIHdhcyBOT1QgZGV2ZWxvcGVkIGJ5IHZpY2UtdmVyc2EKLSAgIGVuZ2luZWVyaW5nIHRoZSBQUy8yJ3MgQklPUyAqLwotLyogRGVkaWNhdGVkIHRvIFdhbm5lcywgVG9ma2UsIFlra2UsIEdvZG90LCBLaWxscm95IGFuZCBhbGwgdGhvc2UgCi0gICBvdGhlciBsb3ZlbHkgZmlzaCBvdXQgdGhlcmUuLi4gKi8KLS8qIFRoaXMgY29kZSB3YXMgd3JpdHRlbiBkdXJpbmcgdGhlIGxvbmcgYW5kIGJvcmluZyBXSU5BIAotICAgZWxlY3Rpb25zIDE5OTQgKi8KLS8qIFRoYW5rcyB0byBBcmluZGFtIEJhbmVyaWogZm9yIGdpdmluZyBtZSB0aGUgc291cmNlIG9mIGhpcyBkcml2ZXIgKi8KLS8qIFRoaXMgY29kZSBtYXkgYmUgZnJlZWx5IGRpc3RyaWJ1dGVkIGFuZCBtb2RpZmllZCBpbiBhbnkgd2F5LCAKLSAgIGFzIGxvbmcgYXMgdGhlc2Ugbm90ZXMgcmVtYWluIGludGFjdCAqLwotCi0vKiAgUmV2aXNlZDogMDUvMDcvOTQgYnkgQXJpbmRhbSBCYW5lcmppIChheGJAY3NlLm5kLmVkdSkgKi8KLS8qICBSZXZpc2VkOiAwOS8wOC85NCBieSBQZXRlciBEZSBTY2hyaWp2ZXIgKHN0dWQxMUBjYzQua3VsZXV2ZW4uYWMuYmUpCi0gICBUaGFua3MgdG8gQXJpbmRhbSBCYW5lcmlqIGZvciBzZW5kaW5nIG1lIHRoZSBkb2NzIG9mIHRoZSBhZGFwdGVyICovCi0KLS8qIEJBIE1vZGlmaWVkIGZvciBUaGlua1BhZCA3MjAgYnkgQm9yaXMgQXNoa2luYXppICovCi0vKiAgICAgICAgICAgICAgICAgICAgKGJhc2hAdm5ldC5pYm0uY29tKSAwOC8wOC85NSAqLwotCi0vKiBNb2RpZmllZCBmdXJ0aGVyIGZvciBUaGlua1BhZC03MjBDIGJ5IFVyaSBCbHVtZW50aGFsICovCi0vKiAgICAgICAgICAgICAgICAgICAgKHVyaUB3YXRzb24uaWJtLmNvbSkgU2VwIDExLCAxOTk1ICovCi0KLS8qIFRPRE8gOiAKLSAgICsgVGltZW91dHMKLSAgICsgR2V0IGRpc2sgcGFyYW1ldGVycwotICAgKyBETUEgYWJvdmUgMTZNQgotICAgKyByZXNldCBhZnRlciByZWFkL3dyaXRlIGVycm9yCi0gKi8KLQotI2RlZmluZSBERVZJQ0VfTkFNRSAiUFMvMiBFU0RJIgotCi0jaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2dlbmhkLmg+Ci0jaW5jbHVkZSA8bGludXgvcHMyZXNkaS5oPgotI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L21jYS1sZWdhY3kuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KLQotI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vZG1hLmg+Ci0jaW5jbHVkZSA8YXNtL21jYV9kbWEuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotCi0jZGVmaW5lIFBTMkVTRElfSVJRIDE0Ci0jZGVmaW5lIE1BWF9IRCAyCi0jZGVmaW5lIE1BWF9SRVRSSUVTIDUKLSNkZWZpbmUgTUFYXzE2QklUIDY1NTM2Ci0jZGVmaW5lIEVTRElfVElNRU9VVCAgIDB4ZjAwMAotI2RlZmluZSBFU0RJX1NUQVRfVElNRU9VVCA0Ci0KLSNkZWZpbmUgVFlQRV8wX0NNRF9CTEtfTEVOR1RIIDIKLSNkZWZpbmUgVFlQRV8xX0NNRF9CTEtfTEVOR1RIIDQKLQotc3RhdGljIHZvaWQgcmVzZXRfY3RybCh2b2lkKTsKLQotc3RhdGljIGludCBwczJlc2RpX2dlbmluaXQodm9pZCk7Ci0KLXN0YXRpYyB2b2lkIGRvX3BzMmVzZGlfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqIHEpOwotCi1zdGF0aWMgdm9pZCBwczJlc2RpX3JlYWR3cml0ZShpbnQgY21kLCBzdHJ1Y3QgcmVxdWVzdCAqcmVxKTsKLQotc3RhdGljIHZvaWQgcHMyZXNkaV9maWxsX2NtZF9ibG9jayh1X3Nob3J0ICogY21kX2JsaywgdV9zaG9ydCBjbWQsCi11X3Nob3J0IGN5bCwgdV9zaG9ydCBoZWFkLCB1X3Nob3J0IHNlY3RvciwgdV9zaG9ydCBsZW5ndGgsIHVfY2hhciBkcml2ZSk7Ci0KLXN0YXRpYyBpbnQgcHMyZXNkaV9vdXRfY21kX2Jsayh1X3Nob3J0ICogY21kX2Jsayk7Ci0KLXN0YXRpYyB2b2lkIHBzMmVzZGlfcHJlcF9kbWEoY2hhciAqYnVmZmVyLCB1X3Nob3J0IGxlbmd0aCwgdV9jaGFyIGRtYV94bW9kZSk7Ci0KLXN0YXRpYyBpcnFyZXR1cm5fdCBwczJlc2RpX2ludGVycnVwdF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCk7Ci1zdGF0aWMgdm9pZCAoKmN1cnJlbnRfaW50X2hhbmRsZXIpICh1X2ludCkgPSBOVUxMOwotc3RhdGljIHZvaWQgcHMyZXNkaV9ub3JtYWxfaW50ZXJydXB0X2hhbmRsZXIodV9pbnQpOwotc3RhdGljIHZvaWQgcHMyZXNkaV9pbml0aWFsX3Jlc2V0X2ludF9oYW5kbGVyKHVfaW50KTsKLXN0YXRpYyB2b2lkIHBzMmVzZGlfZ2VvbWV0cnlfaW50X2hhbmRsZXIodV9pbnQpOwotc3RhdGljIGludCBwczJlc2RpX2dldGdlbyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgaGRfZ2VvbWV0cnkgKmdlbyk7Ci0KLXN0YXRpYyBpbnQgcHMyZXNkaV9yZWFkX3N0YXR1c193b3JkcyhpbnQgbnVtX3dvcmRzLCBpbnQgbWF4X3dvcmRzLCB1X3Nob3J0ICogYnVmZmVyKTsKLQotc3RhdGljIHZvaWQgZHVtcF9jbWRfY29tcGxldGVfc3RhdHVzKHVfaW50IGludF9yZXRfY29kZSk7Ci0KLXN0YXRpYyB2b2lkIHBzMmVzZGlfZ2V0X2RldmljZV9jZmcodm9pZCk7Ci0KLXN0YXRpYyB2b2lkIHBzMmVzZGlfcmVzZXRfdGltZXIodW5zaWduZWQgbG9uZyB1bnVzZWQpOwotCi1zdGF0aWMgdV9pbnQgZG1hX2FyYl9sZXZlbDsJCS8qIERNQSBhcmJpdHJhdGlvbiBsZXZlbCAqLwotCi1zdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQocHMyZXNkaV9pbnQpOwotCi1zdGF0aWMgaW50IG5vX2ludF95ZXQ7Ci1zdGF0aWMgaW50IHBzMmVzZGlfZHJpdmVzOwotc3RhdGljIHVfc2hvcnQgaW9fYmFzZTsKLXN0YXRpYyBERUZJTkVfVElNRVIoZXNkaV90aW1lciwgcHMyZXNkaV9yZXNldF90aW1lciwgMCwgMCk7Ci1zdGF0aWMgaW50IHJlc2V0X3N0YXR1czsKLXN0YXRpYyBpbnQgcHMyZXNkaV9zbG90ID0gLTE7Ci1zdGF0aWMgaW50IHRwNzIwZXNkaSA9IDA7CS8qIElzIGl0IEludGVncmF0ZWQgRVNESSBvZiBUaGlua1BhZC03MjA/ICovCi1zdGF0aWMgaW50IGludGdfZXNkaSA9IDA7ICAgICAgIC8qIElmIGludGVncmF0ZWQgYWRhcHRlciAqLwotc3RydWN0IHBzMmVzZGlfaV9zdHJ1Y3QgewotCXVuc2lnbmVkIGludCBoZWFkLCBzZWN0LCBjeWwsIHdwY29tLCBsem9uZSwgY3RsOwotfTsKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0socHMyZXNkaV9sb2NrKTsKLXN0YXRpYyBzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcHMyZXNkaV9xdWV1ZTsKLXN0YXRpYyBzdHJ1Y3QgcmVxdWVzdCAqY3VycmVudF9yZXE7Ci0KLSNpZiAwCi0jaWYgMAkJCQkvKiB0cnkgYm90aCAtIEkgZG9uJ3Qga25vdyB3aGljaCBvbmUgaXMgYmV0dGVyLi4uIFVCICovCi1zdGF0aWMgc3RydWN0IHBzMmVzZGlfaV9zdHJ1Y3QgcHMyZXNkaV9pbmZvW01BWF9IRF0gPQotewotCXs0LCA0OCwgMTU1MywgMCwgMCwgMH0sCi0JezAsIDAsIDAsIDAsIDAsIDB9fTsKLSNlbHNlCi1zdGF0aWMgc3RydWN0IHBzMmVzZGlfaV9zdHJ1Y3QgcHMyZXNkaV9pbmZvW01BWF9IRF0gPQotewotCXs2NCwgMzIsIDE2MSwgMCwgMCwgMH0sCi0JezAsIDAsIDAsIDAsIDAsIDB9fTsKLSNlbmRpZgotI2VuZGlmCi1zdGF0aWMgc3RydWN0IHBzMmVzZGlfaV9zdHJ1Y3QgcHMyZXNkaV9pbmZvW01BWF9IRF0gPQotewotCXswLCAwLCAwLCAwLCAwLCAwfSwKLQl7MCwgMCwgMCwgMCwgMCwgMH19OwotCi1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHBzMmVzZGlfZm9wcyA9Ci17Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5nZXRnZW8JCT0gcHMyZXNkaV9nZXRnZW8sCi19OwotCi1zdGF0aWMgc3RydWN0IGdlbmRpc2sgKnBzMmVzZGlfZ2VuZGlza1syXTsKLQotLyogaW5pdGlhbGl6YXRpb24gcm91dGluZSBjYWxsZWQgYnkgbGxfcndfYmxrLmMgICAqLwotc3RhdGljIGludCBfX2luaXQgcHMyZXNkaV9pbml0KHZvaWQpCi17Ci0KLQlpbnQgZXJyb3IgPSAwOwotCi0JLyogcmVnaXN0ZXIgdGhlIGRldmljZSAtIHBhc3MgdGhlIG5hbWUgYW5kIG1ham9yIG51bWJlciAqLwotCWlmIChyZWdpc3Rlcl9ibGtkZXYoUFMyRVNESV9NQUpPUiwgImVkIikpCi0JCXJldHVybiAtRUJVU1k7Ci0KLQkvKiBzZXQgdXAgc29tZSBnbG9iYWwgaW5mb3JtYXRpb24gLSBpbmRpY2F0aW5nIGRldmljZSBzcGVjaWZpYyBpbmZvICovCi0JcHMyZXNkaV9xdWV1ZSA9IGJsa19pbml0X3F1ZXVlKGRvX3BzMmVzZGlfcmVxdWVzdCwgJnBzMmVzZGlfbG9jayk7Ci0JaWYgKCFwczJlc2RpX3F1ZXVlKSB7Ci0JCXVucmVnaXN0ZXJfYmxrZGV2KFBTMkVTRElfTUFKT1IsICJlZCIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQkvKiBzb21lIG1pbm9yIGhvdXNla2VlcGluZyAtIHNldHVwIHRoZSBnbG9iYWwgZ2VuZGlzayBzdHJ1Y3R1cmUgKi8KLQllcnJvciA9IHBzMmVzZGlfZ2VuaW5pdCgpOwotCWlmIChlcnJvcikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJQUzJFU0RJOiBlcnJvciBpbml0aWFsaXNpbmciCi0JCQkiIGRldmljZSwgcmVsZWFzaW5nIHJlc291cmNlc1xuIik7Ci0JCXVucmVnaXN0ZXJfYmxrZGV2KFBTMkVTRElfTUFKT1IsICJlZCIpOwotCQlibGtfY2xlYW51cF9xdWV1ZShwczJlc2RpX3F1ZXVlKTsKLQkJcmV0dXJuIGVycm9yOwotCX0KLQlyZXR1cm4gMDsKLX0JCQkJLyogcHMyZXNkaV9pbml0ICovCi0KLSNpZm5kZWYgTU9EVUxFCi0KLW1vZHVsZV9pbml0KHBzMmVzZGlfaW5pdCk7Ci0KLSNlbHNlCi0KLXN0YXRpYyBpbnQgY3lsW01BWF9IRF0gPSB7LTEsLTF9Owotc3RhdGljIGludCBoZWFkW01BWF9IRF0gPSB7LTEsIC0xfTsKLXN0YXRpYyBpbnQgc2VjdFtNQVhfSERdID0gey0xLCAtMX07Ci0KLW1vZHVsZV9wYXJhbSh0cDcyMGVzZGksIGJvb2wsIDApOwotbW9kdWxlX3BhcmFtX2FycmF5KGN5bCwgaW50LCBOVUxMLCAwKTsKLW1vZHVsZV9wYXJhbV9hcnJheShoZWFkLCBpbnQsIE5VTEwsIDApOwotbW9kdWxlX3BhcmFtX2FycmF5KHNlY3QsIGludCwgTlVMTCwgMCk7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLWludCBpbml0X21vZHVsZSh2b2lkKSB7Ci0JaW50IGRyaXZlOwotCi0JZm9yKGRyaXZlID0gMDsgZHJpdmUgPCBNQVhfSEQ7IGRyaXZlKyspIHsKLQkgICAgICAgIHN0cnVjdCBwczJlc2RpX2lfc3RydWN0ICppbmZvID0gJnBzMmVzZGlfaW5mb1tkcml2ZV07Ci0KLSAgICAgICAgCWlmIChjeWxbZHJpdmVdICE9IC0xKSB7Ci0JCSAgCWluZm8tPmN5bCA9IGluZm8tPmx6b25lID0gY3lsW2RyaXZlXTsKLQkJCWluZm8tPndwY29tID0gMDsKLQkJfQotICAgICAgICAJaWYgKGhlYWRbZHJpdmVdICE9IC0xKSB7Ci0JCQlpbmZvLT5oZWFkID0gaGVhZFtkcml2ZV07Ci0JCQlpbmZvLT5jdGwgPSAoaGVhZFtkcml2ZV0gPiA4ID8gOCA6IDApOwotCQl9Ci0gICAgICAgIAlpZiAoc2VjdFtkcml2ZV0gIT0gLTEpIGluZm8tPnNlY3QgPSBzZWN0W2RyaXZlXTsKLQl9Ci0JcmV0dXJuIHBzMmVzZGlfaW5pdCgpOwotfQotCi12b2lkCi1jbGVhbnVwX21vZHVsZSh2b2lkKSB7Ci0JaW50IGk7Ci0JaWYocHMyZXNkaV9zbG90KSB7Ci0JCW1jYV9tYXJrX2FzX3VudXNlZChwczJlc2RpX3Nsb3QpOwotCQltY2Ffc2V0X2FkYXB0ZXJfcHJvY2ZuKHBzMmVzZGlfc2xvdCwgTlVMTCwgTlVMTCk7Ci0JfQotCXJlbGVhc2VfcmVnaW9uKGlvX2Jhc2UsIDQpOwotCWZyZWVfZG1hKGRtYV9hcmJfbGV2ZWwpOwotCWZyZWVfaXJxKFBTMkVTRElfSVJRLCAmcHMyZXNkaV9nZW5kaXNrKTsKLQl1bnJlZ2lzdGVyX2Jsa2RldihQUzJFU0RJX01BSk9SLCAiZWQiKTsKLQlibGtfY2xlYW51cF9xdWV1ZShwczJlc2RpX3F1ZXVlKTsKLQlmb3IgKGkgPSAwOyBpIDwgcHMyZXNkaV9kcml2ZXM7IGkrKykgewotCQlkZWxfZ2VuZGlzayhwczJlc2RpX2dlbmRpc2tbaV0pOwotCQlwdXRfZGlzayhwczJlc2RpX2dlbmRpc2tbaV0pOwotCX0KLX0KLSNlbmRpZiAvKiBNT0RVTEUgKi8KLQotLyogaGFuZGxlcyBib290IHRpbWUgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMgKi8KLXZvaWQgX19pbml0IHRwNzIwX3NldHVwKGNoYXIgKnN0ciwgaW50ICppbnRzKQotewotCS8qIG5vIHBhcmFtcywganVzdCBzZXRzIHRoZSB0cDcyMGVzZGkgZmxhZyBpZiBpdCBleGlzdHMgKi8KLQotCXByaW50aygiJXM6IFRQIDcyMCBFU0RJIGZsYWcgc2V0XG4iLCBERVZJQ0VfTkFNRSk7Ci0JdHA3MjBlc2RpID0gMTsKLX0KLQotdm9pZCBfX2luaXQgZWRfc2V0dXAoY2hhciAqc3RyLCBpbnQgKmludHMpCi17Ci0JaW50IGhkaW5kID0gMDsKLQotCS8qIGhhbmRsZXMgMyBwYXJhbWV0ZXJzIG9ubHkgLSBjb3JyZXNwb25kaW5nIHRvCi0JICAgMS4gTnVtYmVyIG9mIGN5bGluZGVycwotCSAgIDIuIE51bWJlciBvZiBoZWFkcwotCSAgIDMuIFNlY3RvcnMvdHJhY2sKLQkgKi8KLQotCWlmIChpbnRzWzBdICE9IDMpCi0JCXJldHVybjsKLQotCS8qIHByaW50IG91dCB0aGUgaW5mb3JtYXRpb24gLSBzZWVuIGF0IGJvb3QgdGltZSAqLwotCXByaW50aygiJXM6IGludHNbMF09JWQgaW50c1sxXT0lZCBpbnRzWzJdPSVkIGludHNbM109JWRcbiIsCi0JICAgICAgIERFVklDRV9OQU1FLCBpbnRzWzBdLCBpbnRzWzFdLCBpbnRzWzJdLCBpbnRzWzNdKTsKLQotCS8qIHNldCB0aGUgaW5kZXggaW50byBkZXZpY2Ugc3BlY2lmaWMgaW5mb3JtYXRpb24gdGFibGUgKi8KLQlpZiAocHMyZXNkaV9pbmZvWzBdLmhlYWQgIT0gMCkKLQkJaGRpbmQgPSAxOwotCi0JLyogc2V0IHVwIGFsbCB0aGUgZGV2aWNlIGluZm9ybWF0aW9uICovCi0JcHMyZXNkaV9pbmZvW2hkaW5kXS5oZWFkID0gaW50c1syXTsKLQlwczJlc2RpX2luZm9baGRpbmRdLnNlY3QgPSBpbnRzWzNdOwotCXBzMmVzZGlfaW5mb1toZGluZF0uY3lsID0gaW50c1sxXTsKLQlwczJlc2RpX2luZm9baGRpbmRdLndwY29tID0gMDsKLQlwczJlc2RpX2luZm9baGRpbmRdLmx6b25lID0gaW50c1sxXTsKLQlwczJlc2RpX2luZm9baGRpbmRdLmN0bCA9IChpbnRzWzJdID4gOCA/IDggOiAwKTsKLSNpZiAwCQkJCS8qIHRoaXMgbWF5IGJlIG5lZWRlZCBmb3IgUFMyL01vZC44MCwgYnV0IGl0IGh1cnRzIFRoaW5rUGFkISAqLwotCXBzMmVzZGlfZHJpdmVzID0gaGRpbmQgKyAxOwkvKiBpbmNyZW1lbnQgaW5kZXggZm9yIHRoZSBuZXh0IHRpbWUgKi8KLSNlbmRpZgotfQkJCQkvKiBlZF9zZXR1cCAqLwotCi1zdGF0aWMgaW50IHBzMmVzZGlfZ2V0aW5mbyhjaGFyICpidWYsIGludCBzbG90LCB2b2lkICpkKQotewotCWludCBsZW4gPSAwOwotCi0JbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiRE1BIEFyYml0cmF0aW9uIExldmVsOiAlZFxuIiwKLQkJICAgICAgIGRtYV9hcmJfbGV2ZWwpOwotCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIklPIFBvcnQ6ICV4XG4iLCBpb19iYXNlKTsKLQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICJJUlE6IDE0XG4iKTsKLQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICJEcml2ZXM6ICVkXG4iLCBwczJlc2RpX2RyaXZlcyk7Ci0KLQlyZXR1cm4gbGVuOwotfQotCi0vKiBwczIgZXNkaSBzcGVjaWZpYyBpbml0aWFsaXphdGlvbiAtIGNhbGxlZCB0aHJ1IHRoZSBnZW5kaXNrIGNoYWluICovCi1zdGF0aWMgaW50IF9faW5pdCBwczJlc2RpX2dlbmluaXQodm9pZCkKLXsKLQkvKgotCSAgIFRoZSBmaXJzdCBwYXJ0IGNvbnRhaW5zIHRoZSBpbml0aWFsaXphdGlvbiBjb2RlCi0JICAgZm9yIHRoZSBFU0RJIGRpc2sgc3Vic3lzdGVtLiAgQWxsIHdlIHJlYWxseSBkbwotCSAgIGlzIHNlYXJjaCBmb3IgdGhlIFBPUyByZWdpc3RlcnMgb2YgdGhlIGNvbnRyb2xsZXIKLQkgICB0byBkbyBzb21lIHNpbXBsZSBzZXR1cCBvcGVyYXRpb25zLiAgRmlyc3QsIHdlCi0JICAgbXVzdCBlbnN1cmUgdGhhdCB0aGUgY29udHJvbGxlciBpcyBpbnN0YWxsZWQsCi0JICAgZW5hYmxlZCwgYW5kIGNvbmZpZ3VyZWQgYXMgUFJJTUFSWS4gIFRoZW4gd2UgbXVzdAotCSAgIGRldGVybWluZSB0aGUgRE1BIGFyYml0cmF0aW9uIGxldmVsIGJlaW5nIHVzZWQgYnkKLQkgICB0aGUgY29udHJvbGxlciBzbyB3ZSBjYW4gaGFuZGxlIGRhdGEgdHJhbnNmZXIKLQkgICBvcGVyYXRpb25zIHByb3Blcmx5LiAgSWYgYWxsIG9mIHRoaXMgd29ya3MsIHRoZW4KLQkgICB3ZSB3aWxsIHNldCB0aGUgSU5JVF9GTEFHIHRvIGEgbm9uLXplcm8gdmFsdWUuCi0JICovCi0KLQlpbnQgc2xvdCA9IDAsIGksIHJlc2V0X3N0YXJ0LCByZXNldF9lbmQ7Ci0JdV9jaGFyIHN0YXR1czsKLQl1bnNpZ25lZCBzaG9ydCBhZGFwdGVySUQ7Ci0JaW50IGVycm9yID0gMDsKLQotCWlmICgoc2xvdCA9IG1jYV9maW5kX2FkYXB0ZXIoSU5UR19FU0RJX0lELCAwKSkgIT0gTUNBX05PVEZPVU5EKSB7Ci0JCWFkYXB0ZXJJRCA9IElOVEdfRVNESV9JRDsKLQkJcHJpbnRrKCIlczogaW50ZWdyYXRlZCBFU0RJIGFkYXB0ZXIgZm91bmQgaW4gc2xvdCAlZFxuIiwKLQkJICAgICAgIERFVklDRV9OQU1FLCBzbG90KzEpOwotI2lmbmRlZiBNT0RVTEUKLQkJbWNhX3NldF9hZGFwdGVyX25hbWUoc2xvdCwgIlBTLzIgSW50ZWdyYXRlZCBFU0RJIik7Ci0jZW5kaWYKLQl9IGVsc2UgaWYgKChzbG90ID0gbWNhX2ZpbmRfYWRhcHRlcihOUk1MX0VTRElfSUQsIDApKSAhPSAtMSkgewotCQlhZGFwdGVySUQgPSBOUk1MX0VTRElfSUQ7Ci0JCXByaW50aygiJXM6IG5vcm1hbCBFU0RJIGFkYXB0ZXIgZm91bmQgaW4gc2xvdCAlZFxuIiwKLQkJICAgICAgIERFVklDRV9OQU1FLCBzbG90KzEpOwotCQltY2Ffc2V0X2FkYXB0ZXJfbmFtZShzbG90LCAiUFMvMiBFU0RJIik7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JcHMyZXNkaV9zbG90ID0gc2xvdDsKLQltY2FfbWFya19hc191c2VkKHNsb3QpOwotCW1jYV9zZXRfYWRhcHRlcl9wcm9jZm4oc2xvdCwgKE1DQV9Qcm9jRm4pIHBzMmVzZGlfZ2V0aW5mbywgTlVMTCk7Ci0KLQkvKiBGb3VuZCB0aGUgc2xvdCAtIHJlYWQgdGhlIFBPUyByZWdpc3RlciAyIHRvIGdldCB0aGUgbmVjZXNzYXJ5Ci0JICAgY29uZmlndXJhdGlvbiBhbmQgc3RhdHVzIGluZm9ybWF0aW9uLiAgUE9TIHJlZ2lzdGVyIDIgaGFzIHRoZQotCSAgIGZvbGxvd2luZyBpbmZvcm1hdGlvbiA6Ci0JICAgQml0ICAgICAgICAgICBGdW5jdGlvbgotCSAgIDcgICAgICAgICAgICAgcmVzZXJ2ZWQgPSAwCi0JICAgNiAgICAgICAgICAgICBhcmJpdHJhdGlvbiBtZXRob2QKLQkgICAwIC0gZmFpcm5lc3MgZW5hYmxlZAotCSAgIDEgLSBmYWlybmVzcyBkaXNhYmxlZCwgbGluZWFyIHByaW9yaXR5IGFzc2lnbm1lbnQKLQkgICA1LTIgICAgICAgICAgIGFyYml0cmF0aW9uIGxldmVsCi0JICAgMSAgICAgICAgICAgICBhbHRlcm5hdGUgYWRkcmVzcwotCSAgIDEgICAgICAgICAgICAgIGFsdGVybmF0ZSBhZGRyZXNzCi0JICAgMCAtIHVzZSBhZGRyZXNzZXMgMHgzNTEwIC0gMHgzNTE3Ci0JICAgMCAgICAgICAgICAgICBhZGFwdGVyIGVuYWJsZQotCSAqLwotCi0Jc3RhdHVzID0gbWNhX3JlYWRfc3RvcmVkX3BvcyhzbG90LCAyKTsKLQkvKiBpcyBpdCBlbmFibGVkID8gKi8KLQlpZiAoIShzdGF0dXMgJiBTVEFUVVNfRU5BQkxFRCkpIHsKLQkJcHJpbnRrKCIlczogRVNESSBhZGFwdGVyIGRpc2FibGVkXG4iLCBERVZJQ0VfTkFNRSk7Ci0JCWVycm9yID0gLUVOT0RFVjsKLQkJZ290byBlcnJfb3V0MTsKLQl9Ci0JLyogdHJ5IHRvIGdyYWIgSVJRLCBhbmQgdHJ5IHRvIGdyYWIgYSBzbG93IElSUSBpZiBpdCBmYWlscywgc28gd2UgY2FuCi0JICAgc2hhcmUgd2l0aCB0aGUgU0NTSSBkcml2ZXIgKi8KLQlpZiAocmVxdWVzdF9pcnEoUFMyRVNESV9JUlEsIHBzMmVzZGlfaW50ZXJydXB0X2hhbmRsZXIsCi0JCSAgSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVELCAiUFMvMiBFU0RJIiwgJnBzMmVzZGlfZ2VuZGlzaykKLQkgICAgJiYgcmVxdWVzdF9pcnEoUFMyRVNESV9JUlEsIHBzMmVzZGlfaW50ZXJydXB0X2hhbmRsZXIsCi0JCQkgICBJUlFGX1NIQVJFRCwgIlBTLzIgRVNESSIsICZwczJlc2RpX2dlbmRpc2spCi0JICAgICkgewotCQlwcmludGsoIiVzOiBVbmFibGUgdG8gZ2V0IElSUSAlZFxuIiwgREVWSUNFX05BTUUsIFBTMkVTRElfSVJRKTsKLQkJZXJyb3IgPSAtRUJVU1k7Ci0JCWdvdG8gZXJyX291dDE7Ci0JfQotCWlmIChzdGF0dXMgJiBTVEFUVVNfQUxURVJOQVRFKQotCQlpb19iYXNlID0gQUxUX0lPX0JBU0U7Ci0JZWxzZQotCQlpb19iYXNlID0gUFJJTUFSWV9JT19CQVNFOwotCi0JaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb19iYXNlLCA0LCAiZWQiKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HIlVuYWJsZSB0byByZXF1ZXN0IHJlZ2lvbiAweCV4XG4iLCBpb19iYXNlKTsKLQkJZXJyb3IgPSAtRUJVU1k7Ci0JCWdvdG8gZXJyX291dDI7Ci0JfQotCS8qIGdldCB0aGUgZG1hIGFyYml0cmF0aW9uIGxldmVsICovCi0JZG1hX2FyYl9sZXZlbCA9IChzdGF0dXMgPj4gMikgJiAweGY7Ci0KLQkvKiBCQSAqLwotCXByaW50aygiJXM6IERNQSBhcmJpdHJhdGlvbiBsZXZlbCA6ICVkXG4iLAotCSAgICAgICBERVZJQ0VfTkFNRSwgZG1hX2FyYl9sZXZlbCk7Ci0KLQlMSVRFX09OOwotCWN1cnJlbnRfaW50X2hhbmRsZXIgPSBwczJlc2RpX2luaXRpYWxfcmVzZXRfaW50X2hhbmRsZXI7Ci0JcmVzZXRfY3RybCgpOwotCXJlc2V0X3N0YXR1cyA9IDA7Ci0JcmVzZXRfc3RhcnQgPSBqaWZmaWVzOwotCXdoaWxlICghcmVzZXRfc3RhdHVzKSB7Ci0JCWluaXRfdGltZXIoJmVzZGlfdGltZXIpOwotCQllc2RpX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgSFo7Ci0JCWVzZGlfdGltZXIuZGF0YSA9IDA7Ci0JCWFkZF90aW1lcigmZXNkaV90aW1lcik7Ci0JCXNsZWVwX29uKCZwczJlc2RpX2ludCk7Ci0JfQotCXJlc2V0X2VuZCA9IGppZmZpZXM7Ci0JTElURV9PRkY7Ci0JcHJpbnRrKCIlczogcmVzZXQgaW50ZXJydXB0IGFmdGVyICVkIGppZmZpZXMsICAldS4lMDJ1IHNlY3NcbiIsCi0JICAgICAgIERFVklDRV9OQU1FLCByZXNldF9lbmQgLSByZXNldF9zdGFydCwgKHJlc2V0X2VuZCAtIHJlc2V0X3N0YXJ0KSAvIEhaLAotCSAgICAgICAocmVzZXRfZW5kIC0gcmVzZXRfc3RhcnQpICUgSFopOwotCi0KLQkvKiBJbnRlZ3JhdGVkIEVTREkgRGlzayBhbmQgQ29udHJvbGxlciBoYXMgb25seSBvbmUgZHJpdmUhICovCi0JaWYgKGFkYXB0ZXJJRCA9PSBJTlRHX0VTRElfSUQpIHsvKiBpZiBub3QgIm5vcm1hbCIgUFMyIEVTREkgYWRhcHRlciAqLwotCQlwczJlc2RpX2RyaXZlcyA9IDE7CS8qIHRoZW4gd2UgaGF2ZSBvbmx5IG9uZSBwaHlzaWNhbCBkaXNrISAqLwkJaW50Z19lc2RpID0gMTsKLQl9Ci0KLQotCi0JLyogZmluYWxseSB0aGlzIHBhcnQgc2V0cyB1cCBzb21lIGdsb2JhbCBkYXRhIHN0cnVjdHVyZXMgZXRjLiAqLwotCi0JcHMyZXNkaV9nZXRfZGV2aWNlX2NmZygpOwotCi0JLyogc29tZSBhbm5veWFuY2UgaW4gdGhlIGFib3ZlIHJvdXRpbmUgcmV0dXJucyBUV08gZHJpdmVzPwotCSBJcyBzb21ldGhpbmcgZWxzZSBoYXBwaW5pbmcgaW4gdGhlIGJhY2tncm91bmQ/Ci0JIFJlZ2F1cmRsZXNzIHdlIGZpeCB0aGUgIyBvZiBkcml2ZXMgYWdhaW4uIEFKSyAqLwotCS8qIEludGVncmF0ZWQgRVNESSBEaXNrIGFuZCBDb250cm9sbGVyIGhhcyBvbmx5IG9uZSBkcml2ZSEgKi8KLQlpZiAoYWRhcHRlcklEID09IElOVEdfRVNESV9JRCkJLyogaWYgbm90ICJub3JtYWwiIFBTMiBFU0RJIGFkYXB0ZXIgKi8KLQkJcHMyZXNkaV9kcml2ZXMgPSAxOwkvKiBOb3QgdGhyZWUgb3IgdHdvLCBPTkUgREFNTklUISAqLwotCi0JY3VycmVudF9pbnRfaGFuZGxlciA9IHBzMmVzZGlfbm9ybWFsX2ludGVycnVwdF9oYW5kbGVyOwotCi0JaWYgKHJlcXVlc3RfZG1hKGRtYV9hcmJfbGV2ZWwsICJlZCIpICE9MCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJQUzJFU0RJOiBDYW4ndCByZXF1ZXN0IGRtYS1jaGFubmVsICVkXG4iCi0JCQksKGludCkgZG1hX2FyYl9sZXZlbCk7Ci0JCWVycm9yID0gLUVCVVNZOwotCQlnb3RvIGVycl9vdXQzOwotCX0KLQlibGtfcXVldWVfbWF4X3NlY3RvcnMocHMyZXNkaV9xdWV1ZSwgMTI4KTsKLQotCWVycm9yID0gLUVOT01FTTsKLQlmb3IgKGkgPSAwOyBpIDwgcHMyZXNkaV9kcml2ZXM7IGkrKykgewotCQlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGFsbG9jX2Rpc2soNjQpOwotCQlpZiAoIWRpc2spCi0JCQlnb3RvIGVycl9vdXQ0OwotCQlkaXNrLT5tYWpvciA9IFBTMkVTRElfTUFKT1I7Ci0JCWRpc2stPmZpcnN0X21pbm9yID0gaTw8NjsKLQkJc3ByaW50ZihkaXNrLT5kaXNrX25hbWUsICJlZCVjIiwgJ2EnK2kpOwotCQlkaXNrLT5mb3BzID0gJnBzMmVzZGlfZm9wczsKLQkJcHMyZXNkaV9nZW5kaXNrW2ldID0gZGlzazsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgcHMyZXNkaV9kcml2ZXM7IGkrKykgewotCQlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IHBzMmVzZGlfZ2VuZGlza1tpXTsKLQkJc2V0X2NhcGFjaXR5KGRpc2ssIHBzMmVzZGlfaW5mb1tpXS5oZWFkICogcHMyZXNkaV9pbmZvW2ldLnNlY3QgKgotCQkJCXBzMmVzZGlfaW5mb1tpXS5jeWwpOwotCQlkaXNrLT5xdWV1ZSA9IHBzMmVzZGlfcXVldWU7Ci0JCWRpc2stPnByaXZhdGVfZGF0YSA9ICZwczJlc2RpX2luZm9baV07Ci0JCWFkZF9kaXNrKGRpc2spOwotCX0KLQlyZXR1cm4gMDsKLWVycl9vdXQ0OgotCXdoaWxlIChpLS0pCi0JCXB1dF9kaXNrKHBzMmVzZGlfZ2VuZGlza1tpXSk7Ci1lcnJfb3V0MzoKLQlyZWxlYXNlX3JlZ2lvbihpb19iYXNlLCA0KTsKLWVycl9vdXQyOgotCWZyZWVfaXJxKFBTMkVTRElfSVJRLCAmcHMyZXNkaV9nZW5kaXNrKTsKLWVycl9vdXQxOgotCWlmKHBzMmVzZGlfc2xvdCkgewotCQltY2FfbWFya19hc191bnVzZWQocHMyZXNkaV9zbG90KTsKLQkJbWNhX3NldF9hZGFwdGVyX3Byb2NmbihwczJlc2RpX3Nsb3QsIE5VTEwsIE5VTEwpOwotCX0KLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBwczJlc2RpX2dldF9kZXZpY2VfY2ZnKHZvaWQpCi17Ci0JdV9zaG9ydCBjbWRfYmxrW1RZUEVfMF9DTURfQkxLX0xFTkdUSF07Ci0KLQkvKkJBICovIHByaW50aygiJXM6IERyaXZlIDBcbiIsIERFVklDRV9OQU1FKTsKLQljdXJyZW50X2ludF9oYW5kbGVyID0gcHMyZXNkaV9nZW9tZXRyeV9pbnRfaGFuZGxlcjsKLQljbWRfYmxrWzBdID0gQ01EX0dFVF9ERVZfQ09ORklHIHwgMHg2MDA7Ci0JY21kX2Jsa1sxXSA9IDA7Ci0Jbm9faW50X3lldCA9IFRSVUU7Ci0JcHMyZXNkaV9vdXRfY21kX2JsayhjbWRfYmxrKTsKLQlpZiAobm9faW50X3lldCkKLQkJc2xlZXBfb24oJnBzMmVzZGlfaW50KTsKLQotCWlmIChwczJlc2RpX2RyaXZlcyA+IDEpIHsKLQkJcHJpbnRrKCIlczogRHJpdmUgMVxuIiwgREVWSUNFX05BTUUpOwkvKkJBICovCi0JCWNtZF9ibGtbMF0gPSBDTURfR0VUX0RFVl9DT05GSUcgfCAoMSA8PCA1KSB8IDB4NjAwOwotCQljbWRfYmxrWzFdID0gMDsKLQkJbm9faW50X3lldCA9IFRSVUU7Ci0JCXBzMmVzZGlfb3V0X2NtZF9ibGsoY21kX2Jsayk7Ci0JCWlmIChub19pbnRfeWV0KQotCQkJc2xlZXBfb24oJnBzMmVzZGlfaW50KTsKLQl9CQkJLyogaWYgc2Vjb25kIHBoeXNpY2FsIGRyaXZlIGlzIHByZXNlbnQgKi8KLQlyZXR1cm47Ci19Ci0KLS8qIHN0cmF0ZWd5IHJvdXRpbmUgdGhhdCBoYW5kbGVzIG1vc3Qgb2YgdGhlIElPIHJlcXVlc3RzICovCi1zdGF0aWMgdm9pZCBkb19wczJlc2RpX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKiBxKQotewotCXN0cnVjdCByZXF1ZXN0ICpyZXE7Ci0JLyogc2luY2UsIHRoaXMgcm91dGluZSBpcyBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGNsZWFyZWQgLSB0aGV5IAotCSAgIG11c3QgYmUgYmVmb3JlIGl0IGZpbmlzaGVzICAqLwotCi0JcmVxID0gZWx2X25leHRfcmVxdWVzdChxKTsKLQlpZiAoIXJlcSkKLQkJcmV0dXJuOwotCi0jaWYgMAotCXByaW50aygiJXM6Z290IHJlcXVlc3QuIGRldmljZSA6ICVzIGNvbW1hbmQgOiAlZCAgc2VjdG9yIDogJWxkIGNvdW50IDogJWxkLCBidWZmZXI6ICVwXG4iLAotCSAgICAgICBERVZJQ0VfTkFNRSwKLQkgICAgICAgcmVxLT5ycV9kaXNrLT5kaXNrX25hbWUsCi0JICAgICAgIHJlcS0+Y21kLCByZXEtPnNlY3RvciwKLQkgICAgICAgcmVxLT5jdXJyZW50X25yX3NlY3RvcnMsIHJlcS0+YnVmZmVyKTsKLSNlbmRpZgotCi0JLyogY2hlY2sgZm9yIGFib3ZlIDE2TWIgZG1hcyAqLwotCWlmIChpc2FfdmlydF90b19idXMocmVxLT5idWZmZXIgKyByZXEtPmN1cnJlbnRfbnJfc2VjdG9ycyAqIDUxMikgPiAxNiAqIE1CKSB7Ci0JCXByaW50aygiJXM6IERNQSBhYm92ZSAxNk1CIG5vdCBzdXBwb3J0ZWRcbiIsIERFVklDRV9OQU1FKTsKLQkJZW5kX3JlcXVlc3QocmVxLCBGQUlMKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChyZXEtPnNlY3RvcityZXEtPmN1cnJlbnRfbnJfc2VjdG9ycyA+IGdldF9jYXBhY2l0eShyZXEtPnJxX2Rpc2spKSB7Ci0JCXByaW50aygiR3Jyci4gZXJyb3IuIHBzMmVzZGlfZHJpdmVzOiAlZCwgJWxsdSAlbGx1XG4iLAotCQkgICAgcHMyZXNkaV9kcml2ZXMsIHJlcS0+c2VjdG9yLAotCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylnZXRfY2FwYWNpdHkocmVxLT5ycV9kaXNrKSk7Ci0JCWVuZF9yZXF1ZXN0KHJlcSwgRkFJTCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlzd2l0Y2ggKHJxX2RhdGFfZGlyKHJlcSkpIHsKLQljYXNlIFJFQUQ6Ci0JCXBzMmVzZGlfcmVhZHdyaXRlKFJFQUQsIHJlcSk7Ci0JCWJyZWFrOwotCWNhc2UgV1JJVEU6Ci0JCXBzMmVzZGlfcmVhZHdyaXRlKFdSSVRFLCByZXEpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcmludGsoIiVzOiBVbmtub3duIGNvbW1hbmRcbiIsIHJlcS0+cnFfZGlzay0+ZGlza19uYW1lKTsKLQkJZW5kX3JlcXVlc3QocmVxLCBGQUlMKTsKLQkJYnJlYWs7Ci0JfQkJLyogaGFuZGxlIGRpZmZlcmVudCBjb21tYW5kcyAqLwotfQkJCQkvKiBtYWluIHN0cmF0ZWd5IHJvdXRpbmUgKi8KLQotLyogcmVzZXRzIHRoZSBFU0RJIGFkYXB0ZXIgKi8KLXN0YXRpYyB2b2lkIHJlc2V0X2N0cmwodm9pZCkKLXsKLQotCXVfbG9uZyBleHBpcmU7Ci0JdV9zaG9ydCBzdGF0dXM7Ci0KLQkvKiBlbmFibGUgaW50ZXJydXB0cyBvbiB0aGUgY29udHJvbGxlciAqLwotCXN0YXR1cyA9IGluYihFU0RJX0lOVFJQVCk7Ci0Jb3V0Yigoc3RhdHVzICYgMHhlMCkgfCBBVFRfRU9JLCBFU0RJX0FUVE4pOwkvKiB0byBiZSBzdXJlIHdlIGRvbid0IGhhdmUKLQkJCQkJCQkgICBhbnkgaW50ZXJydXB0IHBlbmRpbmcuLi4gKi8KLQlvdXRiX3AoQ1RSTF9FTkFCTEVfSU5UUiwgRVNESV9DT05UUk9MKTsKLQotCS8qIHJlYWQgdGhlIEVTREkgc3RhdHVzIHBvcnQgLSBpZiB0aGUgY29udHJvbGxlciBpcyBub3QgYnVzeSwKLQkgICBzaW1wbHkgZG8gYSBzb2Z0IHJlc2V0IChmYXN0KSAtIG90aGVyd2lzZSB3ZSdsbCBoYXZlIHRvIGRvIGEKLQkgICBoYXJkIChzbG93KSByZXNldC4gICovCi0JaWYgKCEoaW5iX3AoRVNESV9TVEFUVVMpICYgU1RBVFVTX0JVU1kpKSB7Ci0JCS8qQkEgKi8gcHJpbnRrKCIlczogc29mdCByZXNldC4uLlxuIiwgREVWSUNFX05BTUUpOwotCQlvdXRiX3AoQ1RSTF9TT0ZUX1JFU0VULCBFU0RJX0FUVE4pOwotCX0KLQkvKiBzb2Z0IHJlc2V0ICovIAotCWVsc2UgewotCQkvKkJBICovCi0JCXByaW50aygiJXM6IGhhcmQgcmVzZXQuLi5cbiIsIERFVklDRV9OQU1FKTsKLQkJb3V0Yl9wKENUUkxfSEFSRF9SRVNFVCwgRVNESV9DT05UUk9MKTsKLQkJZXhwaXJlID0gamlmZmllcyArIDIqSFo7Ci0JCXdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBleHBpcmUpKTsKLQkJb3V0Yl9wKDEsIEVTRElfQ09OVFJPTCk7Ci0JfQkJCS8qIGhhcmQgcmVzZXQgKi8KLQotCi19CQkJCS8qIHJlc2V0IHRoZSBjb250cm9sbGVyICovCi0KLS8qIGNhbGxlZCBieSB0aGUgc3RyYXRlZ3kgcm91dGluZSB0byBoYW5kbGUgcmVhZCBhbmQgd3JpdGUgcmVxdWVzdHMgKi8KLXN0YXRpYyB2b2lkIHBzMmVzZGlfcmVhZHdyaXRlKGludCBjbWQsIHN0cnVjdCByZXF1ZXN0ICpyZXEpCi17Ci0Jc3RydWN0IHBzMmVzZGlfaV9zdHJ1Y3QgKnAgPSByZXEtPnJxX2Rpc2stPnByaXZhdGVfZGF0YTsKLQl1bnNpZ25lZCBibG9jayA9IHJlcS0+c2VjdG9yOwotCXVuc2lnbmVkIGNvdW50ID0gcmVxLT5jdXJyZW50X25yX3NlY3RvcnM7Ci0JaW50IGRyaXZlID0gcCAtIHBzMmVzZGlfaW5mbzsKLQl1X3Nob3J0IHRyYWNrLCBoZWFkLCBjeWxpbmRlciwgc2VjdG9yOwotCXVfc2hvcnQgY21kX2Jsa1tUWVBFXzFfQ01EX0JMS19MRU5HVEhdOwotCi0JLyogZG8gc29tZSByZWxldmFudCBhcml0aG1hdGljICovCi0JdHJhY2sgPSBibG9jayAvIHAtPnNlY3Q7Ci0JaGVhZCA9IHRyYWNrICUgcC0+aGVhZDsKLQljeWxpbmRlciA9IHRyYWNrIC8gcC0+aGVhZDsKLQlzZWN0b3IgPSBibG9jayAlIHAtPnNlY3Q7Ci0KLSNpZiAwCi0JcHJpbnRrKCIlczogY3lsPSVkIGhlYWQ9JWQgc2VjdD0lZFxuIiwgREVWSUNFX05BTUUsIGN5bGluZGVyLCBoZWFkLCBzZWN0b3IpOwotI2VuZGlmCi0JLyogY2FsbCB0aGUgcm91dGluZSB0aGF0IGFjdHVhbGx5IGZpbGxzIG91dCBhIGNvbW1hbmQgYmxvY2sgKi8KLQlwczJlc2RpX2ZpbGxfY21kX2Jsb2NrCi0JICAgIChjbWRfYmxrLAotCSAgICAgKGNtZCA9PSBSRUFEKSA/IENNRF9SRUFEIDogQ01EX1dSSVRFLAotCSAgICAgY3lsaW5kZXIsIGhlYWQsIHNlY3RvciwgY291bnQsIGRyaXZlKTsKLQotCS8qIHNlbmQgdGhlIGNvbW1hbmQgYmxvY2sgdG8gdGhlIGNvbnRyb2xsZXIgKi8KLQljdXJyZW50X3JlcSA9IHJlcTsKLQlzcGluX3VubG9ja19pcnEoJnBzMmVzZGlfbG9jayk7Ci0JaWYgKHBzMmVzZGlfb3V0X2NtZF9ibGsoY21kX2JsaykpIHsKLQkJc3Bpbl9sb2NrX2lycSgmcHMyZXNkaV9sb2NrKTsKLQkJcHJpbnRrKCIlczogQ29udHJvbGxlciBmYWlsZWRcbiIsIERFVklDRV9OQU1FKTsKLQkJaWYgKCgrK3JlcS0+ZXJyb3JzKSA+PSBNQVhfUkVUUklFUykKLQkJCWVuZF9yZXF1ZXN0KHJlcSwgRkFJTCk7Ci0JfQotCS8qIGNoZWNrIGZvciBmYWlsdXJlIHRvIHB1dCBvdXQgdGhlIGNvbW1hbmQgYmxvY2sgKi8gCi0JZWxzZSB7Ci0JCXNwaW5fbG9ja19pcnEoJnBzMmVzZGlfbG9jayk7Ci0jaWYgMAotCQlwcmludGsoIiVzOiB3YWl0aW5nIGZvciB4ZmVyXG4iLCBERVZJQ0VfTkFNRSk7Ci0jZW5kaWYKLQkJLyogdHVybiBkaXNrIGxpZ2h0cyBvbiAqLwotCQlMSVRFX09OOwotCX0KLQotfQkJCQkvKiBwczJlc2RpX3JlYWR3cml0ZSAqLwotCi0vKiBmaWxsIG91dCB0aGUgY29tbWFuZCBibG9jayAqLwotc3RhdGljIHZvaWQgcHMyZXNkaV9maWxsX2NtZF9ibG9jayh1X3Nob3J0ICogY21kX2JsaywgdV9zaG9ydCBjbWQsCi0gdV9zaG9ydCBjeWwsIHVfc2hvcnQgaGVhZCwgdV9zaG9ydCBzZWN0b3IsIHVfc2hvcnQgbGVuZ3RoLCB1X2NoYXIgZHJpdmUpCi17Ci0KLQljbWRfYmxrWzBdID0gKGRyaXZlIDw8IDUpIHwgY21kOwotCWNtZF9ibGtbMV0gPSBsZW5ndGg7Ci0JY21kX2Jsa1syXSA9ICgoY3lsICYgMHgxZikgPDwgMTEpIHwgKGhlYWQgPDwgNSkgfCBzZWN0b3I7Ci0JY21kX2Jsa1szXSA9IChjeWwgJiAweDNFMCkgPj4gNTsKLQotfQkJCQkvKiBmaWxsIG91dCB0aGUgY29tbWFuZCBibG9jayAqLwotCi0vKiB3cml0ZSBhIGNvbW1hbmQgYmxvY2sgdG8gdGhlIGNvbnRyb2xsZXIgKi8KLXN0YXRpYyBpbnQgcHMyZXNkaV9vdXRfY21kX2Jsayh1X3Nob3J0ICogY21kX2JsaykKLXsKLQotCWludCBpOwotCXVuc2lnbmVkIGxvbmcgamlmOwotCXVfY2hhciBzdGF0dXM7Ci0KLQkvKiBlbmFibGUgaW50ZXJydXB0cyAqLwotCW91dGIoQ1RSTF9FTkFCTEVfSU5UUiwgRVNESV9DT05UUk9MKTsKLQotCS8qIGRvIG5vdCB3cml0ZSB0byB0aGUgY29udHJvbGxlciwgaWYgaXQgaXMgYnVzeSAqLwotCWZvciAoamlmID0gamlmZmllcyArIEVTRElfU1RBVF9USU1FT1VUOwotCQl0aW1lX2FmdGVyKGppZiwgamlmZmllcykgJiYKLQkJCShpbmIoRVNESV9TVEFUVVMpICYgU1RBVFVTX0JVU1kpOyApCi0JCTsKLQotI2lmIDAKLQlwcmludGsoIiVzOiBpKDEpPSVsZFxuIiwgREVWSUNFX05BTUUsIGppZik7Ci0jZW5kaWYKLQotCS8qIGlmIGRldmljZSBpcyBzdGlsbCBidXN5IC0gdGhlbiBqdXN0IHRpbWUgb3V0ICovCi0JaWYgKGluYihFU0RJX1NUQVRVUykgJiBTVEFUVVNfQlVTWSkgewotCQlwcmludGsoIiVzOiBwczJlc2RpX291dF9jbWQgdGltZWQgb3V0ICgxKVxuIiwgREVWSUNFX05BTUUpOwotCQlyZXR1cm4gRVJST1I7Ci0JfQkJCS8qIHRpbWVvdXQgPz8/ICovCi0JLyogU2V0IHVwIHRoZSBhdHRlbnRpb24gcmVnaXN0ZXIgaW4gdGhlIGNvbnRyb2xsZXIgKi8KLQlvdXRiKCgoKmNtZF9ibGspICYgMHhFMCkgfCAxLCBFU0RJX0FUVE4pOwotCi0jaWYgMAotCXByaW50aygiJXM6IHNlbmRpbmcgJWQgd29yZHMgdG8gY29udHJvbGxlclxuIiwgREVWSUNFX05BTUUsICgoKCpjbWRfYmxrKSA+PiAxNCkgKyAxKSA8PCAxKTsKLSNlbmRpZgotCi0JLyogb25lIGJ5IG9uZSBzZW5kIGVhY2ggd29yZCBvdXQgKi8KLQlmb3IgKGkgPSAoKCgqY21kX2JsaykgPj4gMTQpICsgMSkgPDwgMTsgaTsgaS0tKSB7Ci0JCXN0YXR1cyA9IGluYihFU0RJX1NUQVRVUyk7Ci0JCWZvciAoamlmID0gamlmZmllcyArIEVTRElfU1RBVF9USU1FT1VUOwotCQkgICAgIHRpbWVfYWZ0ZXIoamlmLCBqaWZmaWVzKSAmJiAoc3RhdHVzICYgU1RBVFVTX0JVU1kpICYmCi0JCSAgIChzdGF0dXMgJiBTVEFUVVNfQ01EX0lORik7IHN0YXR1cyA9IGluYihFU0RJX1NUQVRVUykpOwotCQlpZiAoKHN0YXR1cyAmIChTVEFUVVNfQlVTWSB8IFNUQVRVU19DTURfSU5GKSkgPT0gU1RBVFVTX0JVU1kpIHsKLSNpZiAwCi0JCQlwcmludGsoIiVzOiBzZW5kaW5nICUwNFhcbiIsIERFVklDRV9OQU1FLCAqY21kX2Jsayk7Ci0jZW5kaWYKLQkJCW91dHcoKmNtZF9ibGsrKywgRVNESV9DTURfSU5UKTsKLQkJfSBlbHNlIHsKLQkJCXByaW50aygiJXM6IHBzMmVzZGlfb3V0X2NtZCB0aW1lZCBvdXQgd2hpbGUgc2VuZGluZyBjb21tYW5kIChzdGF0dXM9JTAyWClcbiIsCi0JCQkgICAgICAgREVWSUNFX05BTUUsIHN0YXR1cyk7Ci0JCQlyZXR1cm4gRVJST1I7Ci0JCX0KLQl9CQkJLyogc2VuZCBhbGwgd29yZHMgb3V0ICovCi0JcmV0dXJuIE9LOwotfQkJCQkvKiBzZW5kIG91dCB0aGUgY29tbWFuZHMgKi8KLQotCi0vKiBwcmVwYXJlIGZvciBkbWEgLSBkbyBhbGwgdGhlIG5lY2Vzc2FyeSBzZXR1cCAqLwotc3RhdGljIHZvaWQgcHMyZXNkaV9wcmVwX2RtYShjaGFyICpidWZmZXIsIHVfc2hvcnQgbGVuZ3RoLCB1X2NoYXIgZG1hX3htb2RlKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBjbGFpbV9kbWFfbG9jaygpOwotCi0JbWNhX2Rpc2FibGVfZG1hKGRtYV9hcmJfbGV2ZWwpOwotCi0JbWNhX3NldF9kbWFfYWRkcihkbWFfYXJiX2xldmVsLCBpc2FfdmlydF90b19idXMoYnVmZmVyKSk7Ci0KLQltY2Ffc2V0X2RtYV9jb3VudChkbWFfYXJiX2xldmVsLCBsZW5ndGggKiA1MTIgLyAyKTsKLQotCW1jYV9zZXRfZG1hX21vZGUoZG1hX2FyYl9sZXZlbCwgZG1hX3htb2RlKTsKLQotCW1jYV9lbmFibGVfZG1hKGRtYV9hcmJfbGV2ZWwpOwotCi0JcmVsZWFzZV9kbWFfbG9jayhmbGFncyk7Ci0KLX0JCQkJLyogcHJlcGFyZSBmb3IgZG1hICovCi0KLQotCi1zdGF0aWMgaXJxcmV0dXJuX3QgcHMyZXNkaV9pbnRlcnJ1cHRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCi17Ci0JdV9pbnQgaW50X3JldF9jb2RlOwotCi0JaWYgKGluYihFU0RJX1NUQVRVUykgJiBTVEFUVVNfSU5UUikgewotCQlpbnRfcmV0X2NvZGUgPSBpbmIoRVNESV9JTlRSUFQpOwotCQlpZiAoY3VycmVudF9pbnRfaGFuZGxlcikgewotCQkJLyogRGlzYWJsZSBhZGFwdGVyIGludGVycnVwdHMgdGlsbCBwcm9jZXNzaW5nIGlzIGZpbmlzaGVkICovCi0JCQlvdXRiKENUUkxfRElTQUJMRV9JTlRSLCBFU0RJX0NPTlRST0wpOwotCQkJY3VycmVudF9pbnRfaGFuZGxlcihpbnRfcmV0X2NvZGUpOwotCQl9IGVsc2UKLQkJCXByaW50aygiJXM6IGhlbHAgISBObyBpbnRlcnJ1cHQgaGFuZGxlci5cbiIsIERFVklDRV9OQU1FKTsKLQl9IGVsc2UgewotCQlyZXR1cm4gSVJRX05PTkU7Ci0JfQotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotc3RhdGljIHZvaWQgcHMyZXNkaV9pbml0aWFsX3Jlc2V0X2ludF9oYW5kbGVyKHVfaW50IGludF9yZXRfY29kZSkKLXsKLQotCXN3aXRjaCAoaW50X3JldF9jb2RlICYgMHhmKSB7Ci0JY2FzZSBJTlRfUkVTRVQ6Ci0JCS8qQkEgKi8KLQkJcHJpbnRrKCIlczogaW5pdGlhbCByZXNldCBjb21wbGV0ZWQuXG4iLCBERVZJQ0VfTkFNRSk7Ci0JCW91dGIoKGludF9yZXRfY29kZSAmIDB4ZTApIHwgQVRUX0VPSSwgRVNESV9BVFROKTsKLQkJd2FrZV91cCgmcHMyZXNkaV9pbnQpOwotCQlicmVhazsKLQljYXNlIElOVF9BVFROX0VSUk9SOgotCQlwcmludGsoIiVzOiBBdHRlbnRpb24gZXJyb3IuIGludGVycnVwdCBzdGF0dXMgOiAlMDJYXG4iLCBERVZJQ0VfTkFNRSwKLQkJICAgICAgIGludF9yZXRfY29kZSk7Ci0JCXByaW50aygiJXM6IHN0YXR1czogJTAyeFxuIiwgREVWSUNFX05BTUUsIGluYihFU0RJX1NUQVRVUykpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcmludGsoIiVzOiBpbml0aWFsIHJlc2V0IGhhbmRsZXIgcmVjZWl2ZWQgaW50ZXJydXB0OiAlMDJYXG4iLAotCQkgICAgICAgREVWSUNFX05BTUUsIGludF9yZXRfY29kZSk7Ci0JCW91dGIoKGludF9yZXRfY29kZSAmIDB4ZTApIHwgQVRUX0VPSSwgRVNESV9BVFROKTsKLQkJYnJlYWs7Ci0JfQotCW91dGIoQ1RSTF9FTkFCTEVfSU5UUiwgRVNESV9DT05UUk9MKTsKLX0KLQotCi1zdGF0aWMgdm9pZCBwczJlc2RpX2dlb21ldHJ5X2ludF9oYW5kbGVyKHVfaW50IGludF9yZXRfY29kZSkKLXsKLQl1X2ludCBzdGF0dXMsIGRyaXZlX251bTsKLQl1bnNpZ25lZCBsb25nIHJiYTsKLQlpbnQgaTsKLQotCWRyaXZlX251bSA9IGludF9yZXRfY29kZSA+PiA1OwotCXN3aXRjaCAoaW50X3JldF9jb2RlICYgMHhmKSB7Ci0JY2FzZSBJTlRfQ01EX0NPTVBMRVRFOgotCQlmb3IgKGkgPSBFU0RJX1RJTUVPVVQ7IGkgJiYgIShpbmIoRVNESV9TVEFUVVMpICYgU1RBVFVTX1NUQVRfQVZBSUwpOyBpLS0pOwotCQlpZiAoIShpbmIoRVNESV9TVEFUVVMpICYgU1RBVFVTX1NUQVRfQVZBSUwpKSB7Ci0JCQlwcmludGsoIiVzOiB0aW1lb3V0IHJlYWRpbmcgc3RhdHVzIHdvcmRcbiIsIERFVklDRV9OQU1FKTsKLQkJCW91dGIoKGludF9yZXRfY29kZSAmIDB4ZTApIHwgQVRUX0VPSSwgRVNESV9BVFROKTsKLQkJCWJyZWFrOwotCQl9Ci0JCXN0YXR1cyA9IGludyhFU0RJX1NUVF9JTlQpOwotCQlpZiAoKHN0YXR1cyAmIDB4MUYpID09IENNRF9HRVRfREVWX0NPTkZJRykgewotI2RlZmluZSBSRVBMWV9XT1JEUyA1CQkvKiB3ZSBhbHJlYWR5IHJlYWQgd29yZCAwICovCi0JCQl1X3Nob3J0IHJlcGx5W1JFUExZX1dPUkRTXTsKLQotCQkJaWYgKHBzMmVzZGlfcmVhZF9zdGF0dXNfd29yZHMoKHN0YXR1cyA+PiA4KSAtIDEsIFJFUExZX1dPUkRTLCByZXBseSkpIHsKLQkJCQkvKkJBICovCi0JCQkJcHJpbnRrKCIlczogRGV2aWNlIENvbmZpZ3VyYXRpb24gU3RhdHVzIGZvciBkcml2ZSAldVxuIiwKLQkJCQkgICAgICAgREVWSUNFX05BTUUsIGRyaXZlX251bSk7Ci0KLQkJCQlwcmludGsoIiVzOiBTcGFyZXMvY3lsczogJXUiLCBERVZJQ0VfTkFNRSwgcmVwbHlbMF0gPj4gOCk7Ci0KLQkJCQlwcmludGsKLQkJCQkgICAgKCJDb25maWcgYml0czogJXMlcyVzJXMlc1xuIiwKLQkJCQkgICAgIChyZXBseVswXSAmIENPTkZJR19JUykgPyAiSW52YWxpZCBTZWNvbmRhcnksICIgOiAiIiwKLQkJCQkgICAgICgocmVwbHlbMF0gJiBDT05GSUdfWkQpICYmICEocmVwbHlbMF0gJiBDT05GSUdfSVMpKQotCQkJCSA/ICJaZXJvIERlZmVjdCwgIiA6ICJEZWZlY3RzIFByZXNlbnQsICIsCi0JCQkJICAgICAocmVwbHlbMF0gJiBDT05GSUdfU0YpID8gIlNrZXdlZCBGb3JtYXQsICIgOiAiIiwKLQkJCQkgICAgIChyZXBseVswXSAmIENPTkZJR19GUikgPyAiUmVtb3ZhYmxlLCAiIDogIk5vbi1SZW1vdmFibGUsICIsCi0JCQkJICAgICAocmVwbHlbMF0gJiBDT05GSUdfUlQpID8gIk5vIFJldHJpZXMiIDogIlJldHJpZXMiKTsKLQotCQkJCXJiYSA9IHJlcGx5WzFdIHwgKCh1bnNpZ25lZCBsb25nKSByZXBseVsyXSA8PCAxNik7Ci0JCQkJcHJpbnRrKCIlczogTnVtYmVyIG9mIFJCQSdzOiAlbHVcbiIsIERFVklDRV9OQU1FLCByYmEpOwotCi0JCQkJcHJpbnRrKCIlczogUGh5c2ljYWwgbnVtYmVyIG9mIGN5bGluZGVyczogJXUsIFNlY3RvcnMvVHJhY2s6ICV1LCBIZWFkczogJXVcbiIsCi0JCQkJICAgICAgIERFVklDRV9OQU1FLCByZXBseVszXSwgcmVwbHlbNF0gPj4gOCwgcmVwbHlbNF0gJiAweGZmKTsKLQotCQkJCWlmICghcHMyZXNkaV9pbmZvW2RyaXZlX251bV0uaGVhZCkgewotCQkJCQlwczJlc2RpX2luZm9bZHJpdmVfbnVtXS5oZWFkID0gNjQ7Ci0JCQkJCXBzMmVzZGlfaW5mb1tkcml2ZV9udW1dLnNlY3QgPSAzMjsKLQkJCQkJcHMyZXNkaV9pbmZvW2RyaXZlX251bV0uY3lsID0gcmJhIC8gKDY0ICogMzIpOwotCQkJCQlwczJlc2RpX2luZm9bZHJpdmVfbnVtXS53cGNvbSA9IDA7Ci0JCQkJCXBzMmVzZGlfaW5mb1tkcml2ZV9udW1dLmx6b25lID0gcHMyZXNkaV9pbmZvW2RyaXZlX251bV0uY3lsOwotCQkJCQlwczJlc2RpX2luZm9bZHJpdmVfbnVtXS5jdGwgPSA4OwotCQkJCQlpZiAodHA3MjBlc2RpKSB7CS8qIHN0b3JlIHRoZSByZXRyaWV2ZWQgcGFyYW1ldGVycyAqLwotCQkJCQkJcHMyZXNkaV9pbmZvWzBdLmhlYWQgPSByZXBseVs0XSAmIDBYZmY7Ci0JCQkJCQlwczJlc2RpX2luZm9bMF0uc2VjdCA9IHJlcGx5WzRdID4+IDg7Ci0JCQkJCQlwczJlc2RpX2luZm9bMF0uY3lsID0gcmVwbHlbM107Ci0JCQkJCQlwczJlc2RpX2luZm9bMF0ud3Bjb20gPSAwOwotCQkJCQkJcHMyZXNkaV9pbmZvWzBdLmx6b25lID0gcmVwbHlbM107Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQlpZiAoIWludGdfZXNkaSkKLQkJCQkJCQlwczJlc2RpX2RyaXZlcysrOwotCQkJCQl9Ci0JCQkJfQotI2lmZGVmIE9CU09MRVRFCi0JCQkJaWYgKCFwczJlc2RpX2luZm9bZHJpdmVfbnVtXS5oZWFkKSB7Ci0JCQkJCXBzMmVzZGlfaW5mb1tkcml2ZV9udW1dLmhlYWQgPSByZXBseVs0XSAmIDBYZmY7Ci0JCQkJCXBzMmVzZGlfaW5mb1tkcml2ZV9udW1dLnNlY3QgPSByZXBseVs0XSA+PiA4OwotCQkJCQlwczJlc2RpX2luZm9bZHJpdmVfbnVtXS5jeWwgPSByZXBseVszXTsKLQkJCQkJcHMyZXNkaV9pbmZvW2RyaXZlX251bV0ud3Bjb20gPSAwOwotCQkJCQlwczJlc2RpX2luZm9bZHJpdmVfbnVtXS5sem9uZSA9IHJlcGx5WzNdOwotCQkJCQlpZiAodHA3MjBlc2RpKSB7CS8qIHN0b3JlIHRoZSByZXRyaWV2ZWQgcGFyYW1ldGVycyAqLwotCQkJCQkJcHMyZXNkaV9pbmZvWzBdLmhlYWQgPSByZXBseVs0XSAmIDBYZmY7Ci0JCQkJCQlwczJlc2RpX2luZm9bMF0uc2VjdCA9IHJlcGx5WzRdID4+IDg7Ci0JCQkJCQlwczJlc2RpX2luZm9bMF0uY3lsID0gcmVwbHlbM107Ci0JCQkJCQlwczJlc2RpX2luZm9bMF0ud3Bjb20gPSAwOwotCQkJCQkJcHMyZXNkaV9pbmZvWzBdLmx6b25lID0gcmVwbHlbM107Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQlwczJlc2RpX2RyaXZlcysrOwotCQkJCQl9Ci0JCQkJfQotI2VuZGlmCi0KLQkJCX0gZWxzZQotCQkJCXByaW50aygiJXM6IGZhaWxlZCB3aGlsZSBnZXR0aW5nIGRldmljZSBjb25maWdcbiIsIERFVklDRV9OQU1FKTsKLSN1bmRlZiBSRVBMWV9XT1JEUwotCQl9IGVsc2UKLQkJCXByaW50aygiJXM6IGNvbW1hbmQgJTAyWCB1bmtub3duIGJ5IGdlb21ldHJ5IGhhbmRsZXJcbiIsCi0JCQkgICAgICAgREVWSUNFX05BTUUsIHN0YXR1cyAmIDB4MWYpOwotCi0JCW91dGIoKGludF9yZXRfY29kZSAmIDB4ZTApIHwgQVRUX0VPSSwgRVNESV9BVFROKTsKLQkJYnJlYWs7Ci0KLQljYXNlIElOVF9BVFROX0VSUk9SOgotCQlwcmludGsoIiVzOiBBdHRlbnRpb24gZXJyb3IuIGludGVycnVwdCBzdGF0dXMgOiAlMDJYXG4iLCBERVZJQ0VfTkFNRSwKLQkJICAgICAgIGludF9yZXRfY29kZSk7Ci0JCXByaW50aygiJXM6IERldmljZSBub3QgYXZhaWxhYmxlXG4iLCBERVZJQ0VfTkFNRSk7Ci0JCWJyZWFrOwotCWNhc2UgSU5UX0NNRF9FQ0M6Ci0JY2FzZSBJTlRfQ01EX1JFVFJZOgotCWNhc2UgSU5UX0NNRF9FQ0NfUkVUUlk6Ci0JY2FzZSBJTlRfQ01EX1dBUk5JTkc6Ci0JY2FzZSBJTlRfQ01EX0FCT1JUOgotCWNhc2UgSU5UX0NNRF9GQUlMRUQ6Ci0JY2FzZSBJTlRfRE1BX0VSUjoKLQljYXNlIElOVF9DTURfQkxLX0VSUjoKLQkJLypCQSAqLyBwcmludGsoIiVzOiBXaGFhLiBFcnJvciBvY2N1cnJlZC4uLlxuIiwgREVWSUNFX05BTUUpOwotCQlkdW1wX2NtZF9jb21wbGV0ZV9zdGF0dXMoaW50X3JldF9jb2RlKTsKLQkJb3V0YigoaW50X3JldF9jb2RlICYgMHhlMCkgfCBBVFRfRU9JLCBFU0RJX0FUVE4pOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcmludGsoIiVzOiBVbmtub3duIGludGVycnVwdCByZWFzb246ICUwMlhcbiIsCi0JCSAgICAgICBERVZJQ0VfTkFNRSwgaW50X3JldF9jb2RlICYgMHhmKTsKLQkJb3V0YigoaW50X3JldF9jb2RlICYgMHhlMCkgfCBBVFRfRU9JLCBFU0RJX0FUVE4pOwotCQlicmVhazsKLQl9Ci0KLQl3YWtlX3VwKCZwczJlc2RpX2ludCk7Ci0Jbm9faW50X3lldCA9IEZBTFNFOwotCW91dGIoQ1RSTF9FTkFCTEVfSU5UUiwgRVNESV9DT05UUk9MKTsKLQotfQotCi1zdGF0aWMgdm9pZCBwczJlc2RpX25vcm1hbF9pbnRlcnJ1cHRfaGFuZGxlcih1X2ludCBpbnRfcmV0X2NvZGUpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1X2ludCBzdGF0dXM7Ci0JdV9pbnQgZW5kaW5nOwotCWludCBpOwotCi0Jc3dpdGNoIChpbnRfcmV0X2NvZGUgJiAweDBmKSB7Ci0JY2FzZSBJTlRfVFJBTlNGRVJfUkVROgotCQlwczJlc2RpX3ByZXBfZG1hKGN1cnJlbnRfcmVxLT5idWZmZXIsCi0JCQkJIGN1cnJlbnRfcmVxLT5jdXJyZW50X25yX3NlY3RvcnMsCi0JCSAgICAocnFfZGF0YV9kaXIoY3VycmVudF9yZXEpID09IFJFQUQpCi0JCSAgICA/IE1DQV9ETUFfTU9ERV8xNiB8IE1DQV9ETUFfTU9ERV9XUklURSB8IE1DQV9ETUFfTU9ERV9YRkVSCi0JCSAgICA6IE1DQV9ETUFfTU9ERV8xNiB8IE1DQV9ETUFfTU9ERV9SRUFEKTsKLQkJb3V0YihDVFJMX0VOQUJMRV9ETUEgfCBDVFJMX0VOQUJMRV9JTlRSLCBFU0RJX0NPTlRST0wpOwotCQllbmRpbmcgPSAtMTsKLQkJYnJlYWs7Ci0KLQljYXNlIElOVF9BVFROX0VSUk9SOgotCQlwcmludGsoIiVzOiBBdHRlbnRpb24gZXJyb3IuIGludGVycnVwdCBzdGF0dXMgOiAlMDJYXG4iLCBERVZJQ0VfTkFNRSwKLQkJICAgICAgIGludF9yZXRfY29kZSk7Ci0JCW91dGIoQ1RSTF9FTkFCTEVfSU5UUiwgRVNESV9DT05UUk9MKTsKLQkJZW5kaW5nID0gRkFJTDsKLQkJYnJlYWs7Ci0KLQljYXNlIElOVF9DTURfQ09NUExFVEU6Ci0JCWZvciAoaSA9IEVTRElfVElNRU9VVDsgaSAmJiAhKGluYihFU0RJX1NUQVRVUykgJiBTVEFUVVNfU1RBVF9BVkFJTCk7IGktLSk7Ci0JCWlmICghKGluYihFU0RJX1NUQVRVUykgJiBTVEFUVVNfU1RBVF9BVkFJTCkpIHsKLQkJCXByaW50aygiJXM6IHRpbWVvdXQgcmVhZGluZyBzdGF0dXMgd29yZFxuIiwgREVWSUNFX05BTUUpOwotCQkJb3V0YigoaW50X3JldF9jb2RlICYgMHhlMCkgfCBBVFRfRU9JLCBFU0RJX0FUVE4pOwotCQkJb3V0YihDVFJMX0VOQUJMRV9JTlRSLCBFU0RJX0NPTlRST0wpOwotCQkJaWYgKCgrK2N1cnJlbnRfcmVxLT5lcnJvcnMpID49IE1BWF9SRVRSSUVTKQotCQkJCWVuZGluZyA9IEZBSUw7Ci0JCQllbHNlCi0JCQkJZW5kaW5nID0gLTE7Ci0JCQlicmVhazsKLQkJfQotCQlzdGF0dXMgPSBpbncoRVNESV9TVFRfSU5UKTsKLQkJc3dpdGNoIChzdGF0dXMgJiAweDFGKSB7Ci0JCWNhc2UgKENNRF9SRUFEICYgMHhmZik6Ci0JCWNhc2UgKENNRF9XUklURSAmIDB4ZmYpOgotCQkJTElURV9PRkY7Ci0JCQlvdXRiKChpbnRfcmV0X2NvZGUgJiAweGUwKSB8IEFUVF9FT0ksIEVTRElfQVRUTik7Ci0JCQlvdXRiKENUUkxfRU5BQkxFX0lOVFIsIEVTRElfQ09OVFJPTCk7Ci0JCQllbmRpbmcgPSBTVUNDRVM7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXByaW50aygiJXM6IGludGVycnVwdCBmb3IgdW5rbm93biBjb21tYW5kICUwMlhcbiIsCi0JCQkgICAgICAgREVWSUNFX05BTUUsIHN0YXR1cyAmIDB4MWYpOwotCQkJb3V0YigoaW50X3JldF9jb2RlICYgMHhlMCkgfCBBVFRfRU9JLCBFU0RJX0FUVE4pOwotCQkJb3V0YihDVFJMX0VOQUJMRV9JTlRSLCBFU0RJX0NPTlRST0wpOwotCQkJZW5kaW5nID0gLTE7Ci0JCQlicmVhazsKLQkJfQotCQlicmVhazsKLQljYXNlIElOVF9DTURfRUNDOgotCWNhc2UgSU5UX0NNRF9SRVRSWToKLQljYXNlIElOVF9DTURfRUNDX1JFVFJZOgotCQlMSVRFX09GRjsKLQkJZHVtcF9jbWRfY29tcGxldGVfc3RhdHVzKGludF9yZXRfY29kZSk7Ci0JCW91dGIoKGludF9yZXRfY29kZSAmIDB4ZTApIHwgQVRUX0VPSSwgRVNESV9BVFROKTsKLQkJb3V0YihDVFJMX0VOQUJMRV9JTlRSLCBFU0RJX0NPTlRST0wpOwotCQllbmRpbmcgPSBTVUNDRVM7Ci0JCWJyZWFrOwotCWNhc2UgSU5UX0NNRF9XQVJOSU5HOgotCWNhc2UgSU5UX0NNRF9BQk9SVDoKLQljYXNlIElOVF9DTURfRkFJTEVEOgotCWNhc2UgSU5UX0RNQV9FUlI6Ci0JCUxJVEVfT0ZGOwotCQlkdW1wX2NtZF9jb21wbGV0ZV9zdGF0dXMoaW50X3JldF9jb2RlKTsKLQkJb3V0YigoaW50X3JldF9jb2RlICYgMHhlMCkgfCBBVFRfRU9JLCBFU0RJX0FUVE4pOwotCQlvdXRiKENUUkxfRU5BQkxFX0lOVFIsIEVTRElfQ09OVFJPTCk7Ci0JCWlmICgoKytjdXJyZW50X3JlcS0+ZXJyb3JzKSA+PSBNQVhfUkVUUklFUykKLQkJCWVuZGluZyA9IEZBSUw7Ci0JCWVsc2UKLQkJCWVuZGluZyA9IC0xOwotCQlicmVhazsKLQotCWNhc2UgSU5UX0NNRF9CTEtfRVJSOgotCQlkdW1wX2NtZF9jb21wbGV0ZV9zdGF0dXMoaW50X3JldF9jb2RlKTsKLQkJb3V0YigoaW50X3JldF9jb2RlICYgMHhlMCkgfCBBVFRfRU9JLCBFU0RJX0FUVE4pOwotCQlvdXRiKENUUkxfRU5BQkxFX0lOVFIsIEVTRElfQ09OVFJPTCk7Ci0JCWVuZGluZyA9IEZBSUw7Ci0JCWJyZWFrOwotCi0JY2FzZSBJTlRfQ01EX0ZPUk1BVDoKLQkJcHJpbnRrKCIlczogaHVoID8gV2hvIGlzc3VlZCB0aGlzIGZvcm1hdCBjb21tYW5kID9cbiIKLQkJICAgICAgICxERVZJQ0VfTkFNRSk7Ci0JCW91dGIoKGludF9yZXRfY29kZSAmIDB4ZTApIHwgQVRUX0VPSSwgRVNESV9BVFROKTsKLQkJb3V0YihDVFJMX0VOQUJMRV9JTlRSLCBFU0RJX0NPTlRST0wpOwotCQllbmRpbmcgPSAtMTsKLQkJYnJlYWs7Ci0KLQljYXNlIElOVF9SRVNFVDoKLQkJLyogQkEgcHJpbnRrKCIlczogcmVzZXQgY29tcGxldGVkLlxuIiwgREVWSUNFX05BTUUpICovIDsKLQkJb3V0YigoaW50X3JldF9jb2RlICYgMHhlMCkgfCBBVFRfRU9JLCBFU0RJX0FUVE4pOwotCQlvdXRiKENUUkxfRU5BQkxFX0lOVFIsIEVTRElfQ09OVFJPTCk7Ci0JCWVuZGluZyA9IC0xOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXByaW50aygiJXM6IFVua25vd24gaW50ZXJydXB0IHJlYXNvbjogJTAyWFxuIiwKLQkJICAgICAgIERFVklDRV9OQU1FLCBpbnRfcmV0X2NvZGUgJiAweGYpOwotCQlvdXRiKChpbnRfcmV0X2NvZGUgJiAweGUwKSB8IEFUVF9FT0ksIEVTRElfQVRUTik7Ci0JCW91dGIoQ1RSTF9FTkFCTEVfSU5UUiwgRVNESV9DT05UUk9MKTsKLQkJZW5kaW5nID0gLTE7Ci0JCWJyZWFrOwotCX0KLQlpZihlbmRpbmcgIT0gLTEpIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBzMmVzZGlfbG9jaywgZmxhZ3MpOwotCQllbmRfcmVxdWVzdChjdXJyZW50X3JlcSwgZW5kaW5nKTsKLQkJY3VycmVudF9yZXEgPSBOVUxMOwotCQlkb19wczJlc2RpX3JlcXVlc3QocHMyZXNkaV9xdWV1ZSk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBzMmVzZGlfbG9jaywgZmxhZ3MpOwotCX0KLX0JCQkJLyogaGFuZGxlIGludGVycnVwdHMgKi8KLQotCi0KLXN0YXRpYyBpbnQgcHMyZXNkaV9yZWFkX3N0YXR1c193b3JkcyhpbnQgbnVtX3dvcmRzLAotCQkJCSAgICAgaW50IG1heF93b3JkcywKLQkJCQkgICAgIHVfc2hvcnQgKiBidWZmZXIpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKDsgbWF4X3dvcmRzICYmIG51bV93b3JkczsgbWF4X3dvcmRzLS0sIG51bV93b3Jkcy0tLCBidWZmZXIrKykgewotCQlmb3IgKGkgPSBFU0RJX1RJTUVPVVQ7IGkgJiYgIShpbmIoRVNESV9TVEFUVVMpICYgU1RBVFVTX1NUQVRfQVZBSUwpOyBpLS0pOwotCQlpZiAoIShpbmIoRVNESV9TVEFUVVMpICYgU1RBVFVTX1NUQVRfQVZBSUwpKSB7Ci0JCQlwcmludGsoIiVzOiB0aW1lb3V0IHJlYWRpbmcgc3RhdHVzIHdvcmRcbiIsIERFVklDRV9OQU1FKTsKLQkJCXJldHVybiBGQUlMOwotCQl9Ci0JCSpidWZmZXIgPSBpbncoRVNESV9TVFRfSU5UKTsKLQl9Ci0JcmV0dXJuIFNVQ0NFUzsKLX0KLQotCi0KLQotc3RhdGljIHZvaWQgZHVtcF9jbWRfY29tcGxldGVfc3RhdHVzKHVfaW50IGludF9yZXRfY29kZSkKLXsKLSNkZWZpbmUgV0FJVF9GT1JfU1RBVFVTIFwKLSAgZm9yKGk9RVNESV9USU1FT1VUO2kgJiYgIShpbmIoRVNESV9TVEFUVVMpICYgU1RBVFVTX1NUQVRfQVZBSUwpO2ktLSk7IFwKLSAgICBpZighKGluYihFU0RJX1NUQVRVUykgJiBTVEFUVVNfU1RBVF9BVkFJTCkpIHsgXAotICAgIHByaW50aygiJXM6IHRpbWVvdXQgcmVhZGluZyBzdGF0dXMgd29yZFxuIixERVZJQ0VfTkFNRSk7IFwKLSAgICByZXR1cm47IFwKLSAgICB9Ci0KLQlpbnQgaSwgd29yZF9jb3VudDsKLQl1X3Nob3J0IHN0YXRfd29yZDsKLQl1X2xvbmcgcmJhOwotCi0JcHJpbnRrKCIlczogRGV2aWNlOiAldSwgaW50ZXJydXB0IElEOiAlMDJYXG4iLAotCSAgICAgICBERVZJQ0VfTkFNRSwgaW50X3JldF9jb2RlID4+IDUsCi0JICAgICAgIGludF9yZXRfY29kZSAmIDB4Zik7Ci0KLQlXQUlUX0ZPUl9TVEFUVVM7Ci0Jc3RhdF93b3JkID0gaW53KEVTRElfU1RUX0lOVCk7Ci0Jd29yZF9jb3VudCA9IChzdGF0X3dvcmQgPj4gOCkgLSAxOwotCXByaW50aygiJXM6ICV1IHN0YXR1cyB3b3JkcywgY29tbWFuZDogJTAyWFxuIiwgREVWSUNFX05BTUUsIHdvcmRfY291bnQsCi0JICAgICAgIHN0YXRfd29yZCAmIDB4ZmYpOwotCi0JaWYgKHdvcmRfY291bnQtLSkgewotCQlXQUlUX0ZPUl9TVEFUVVM7Ci0JCXN0YXRfd29yZCA9IGludyhFU0RJX1NUVF9JTlQpOwotCQlwcmludGsoIiVzOiBjb21tYW5kIHN0YXR1cyBjb2RlOiAlMDJYLCBjb21tYW5kIGVycm9yIGNvZGU6ICUwMlhcbiIsCi0JCSAgICAgICBERVZJQ0VfTkFNRSwgc3RhdF93b3JkID4+IDgsIHN0YXRfd29yZCAmIDB4ZmYpOwotCX0KLQlpZiAod29yZF9jb3VudC0tKSB7Ci0JCVdBSVRfRk9SX1NUQVRVUzsKLQkJc3RhdF93b3JkID0gaW53KEVTRElfU1RUX0lOVCk7Ci0JCXByaW50aygiJXM6IGRldmljZSBlcnJvciBjb2RlOiAlcyVzJXMlcyVzLCUwMlhcbiIsIERFVklDRV9OQU1FLAotCQkgICAgICAgKHN0YXRfd29yZCAmIDB4MTAwMCkgPyAiUmVhZHksICIgOiAiTm90IFJlYWR5LCAiLAotCQkgIChzdGF0X3dvcmQgJiAweDA4MDApID8gIlNlbGVjdGVkLCAiIDogIk5vdCBTZWxlY3RlZCwgIiwKLQkJICAgICAgIChzdGF0X3dvcmQgJiAweDA0MDApID8gIldyaXRlIEZhdWx0LCAiIDogIiIsCi0JCSAgICAgICAoc3RhdF93b3JkICYgMHgwMjAwKSA/ICJUcmFjayAwLCAiIDogIiIsCi0JCShzdGF0X3dvcmQgJiAweDAxMDApID8gIlNlZWsgb3IgY29tbWFuZCBjb21wbGV0ZSwgIiA6ICIiLAotCQkgICAgICAgc3RhdF93b3JkID4+IDgpOwotCX0KLQlpZiAod29yZF9jb3VudC0tKSB7Ci0JCVdBSVRfRk9SX1NUQVRVUzsKLQkJc3RhdF93b3JkID0gaW53KEVTRElfU1RUX0lOVCk7Ci0JCXByaW50aygiJXM6IEJsb2NrcyB0byBkbzogJXUiLCBERVZJQ0VfTkFNRSwgc3RhdF93b3JkKTsKLQl9Ci0JaWYgKHdvcmRfY291bnQgLT0gMikgewotCQlXQUlUX0ZPUl9TVEFUVVM7Ci0JCXJiYSA9IGludyhFU0RJX1NUVF9JTlQpOwotCQlXQUlUX0ZPUl9TVEFUVVM7Ci0JCXJiYSB8PSBpbncoRVNESV9TVFRfSU5UKSA8PCAxNjsKLQkJcHJpbnRrKCIsIExhc3QgQ3lsOiAldSBIZWFkOiAldSBTZWN0b3I6ICV1XG4iLAotCQkgICAgICAgKHVfc2hvcnQpICgocmJhICYgMHgxZmY4MDAwMCkgPj4gMTEpLAotCQkgKHVfc2hvcnQpICgocmJhICYgMHg3RTApID4+IDUpLCAodV9zaG9ydCkgKHJiYSAmIDB4MWYpKTsKLQl9IGVsc2UKLQkJcHJpbnRrKCJcbiIpOwotCi0JaWYgKHdvcmRfY291bnQtLSkgewotCQlXQUlUX0ZPUl9TVEFUVVM7Ci0JCXN0YXRfd29yZCA9IGludyhFU0RJX1NUVF9JTlQpOwotCQlwcmludGsoIiVzOiBCbG9ja3MgcmVxdWlyZWQgRUNDOiAldSIsIERFVklDRV9OQU1FLCBzdGF0X3dvcmQpOwotCX0KLQlwcmludGsoIlxuIik7Ci0KLSN1bmRlZiBXQUlUX0ZPUl9TVEFUVVMKLQotfQotCi1zdGF0aWMgaW50IHBzMmVzZGlfZ2V0Z2VvKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBoZF9nZW9tZXRyeSAqZ2VvKQotewotCXN0cnVjdCBwczJlc2RpX2lfc3RydWN0ICpwID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOwotCi0JZ2VvLT5oZWFkcyA9IHAtPmhlYWQ7Ci0JZ2VvLT5zZWN0b3JzID0gcC0+c2VjdDsKLQlnZW8tPmN5bGluZGVycyA9IHAtPmN5bDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgcHMyZXNkaV9yZXNldF90aW1lcih1bnNpZ25lZCBsb25nIHVudXNlZCkKLXsKLQotCWludCBzdGF0dXM7Ci0KLQlzdGF0dXMgPSBpbmIoRVNESV9JTlRSUFQpOwotCWlmICgoc3RhdHVzICYgMHhmKSA9PSBJTlRfUkVTRVQpIHsKLQkJb3V0Yigoc3RhdHVzICYgMHhlMCkgfCBBVFRfRU9JLCBFU0RJX0FUVE4pOwotCQlvdXRiKENUUkxfRU5BQkxFX0lOVFIsIEVTRElfQ09OVFJPTCk7Ci0JCXJlc2V0X3N0YXR1cyA9IDE7Ci0JfQotCXdha2VfdXAoJnBzMmVzZGlfaW50KTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jIGIvZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMKaW5kZXggM2IxYTY4ZC4uMGNmYmU4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMKKysrIGIvZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMKQEAgLTIzOCw2ICsyMzgsNyBAQAogCXZibGstPmRpc2stPmZpcnN0X21pbm9yID0gaW5kZXhfdG9fbWlub3IoaW5kZXgpOwogCXZibGstPmRpc2stPnByaXZhdGVfZGF0YSA9IHZibGs7CiAJdmJsay0+ZGlzay0+Zm9wcyA9ICZ2aXJ0YmxrX2ZvcHM7CisJdmJsay0+ZGlzay0+ZHJpdmVyZnNfZGV2ID0gJnZkZXYtPmRldjsKIAlpbmRleCsrOwogCiAJLyogSWYgYmFycmllcnMgYXJlIHN1cHBvcnRlZCwgdGVsbCBibG9jayBsYXllciB0aGF0IHF1ZXVlIGlzIG9yZGVyZWQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vYXRpX3BjaWdhcnQuYyBiL2RyaXZlcnMvY2hhci9kcm0vYXRpX3BjaWdhcnQuYwppbmRleCBkMzUyZGJiLi5lNWEwZTk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2F0aV9wY2lnYXJ0LmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9hdGlfcGNpZ2FydC5jCkBAIC0zNSw0MiArMzUsMjMgQEAKIAogIyBkZWZpbmUgQVRJX1BDSUdBUlRfUEFHRV9TSVpFCQk0MDk2CS8qKjwgUENJIEdBUlQgcGFnZSBzaXplICovCiAKLXN0YXRpYyB2b2lkICpkcm1fYXRpX2FsbG9jX3BjaWdhcnRfdGFibGUoaW50IG9yZGVyKQorc3RhdGljIGludCBkcm1fYXRpX2FsbG9jX3BjaWdhcnRfdGFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkgICAgICAgc3RydWN0IGRybV9hdGlfcGNpZ2FydF9pbmZvICpnYXJ0X2luZm8pCiB7Ci0JdW5zaWduZWQgbG9uZyBhZGRyZXNzOwotCXN0cnVjdCBwYWdlICpwYWdlOwotCWludCBpOworCWdhcnRfaW5mby0+dGFibGVfaGFuZGxlID0gZHJtX3BjaV9hbGxvYyhkZXYsIGdhcnRfaW5mby0+dGFibGVfc2l6ZSwKKwkJCQkJCVBBR0VfU0laRSwKKwkJCQkJCWdhcnRfaW5mby0+dGFibGVfbWFzayk7CisJaWYgKGdhcnRfaW5mby0+dGFibGVfaGFuZGxlID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOwogCi0JRFJNX0RFQlVHKCIlZCBvcmRlclxuIiwgb3JkZXIpOwotCi0JYWRkcmVzcyA9IF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCB8IF9fR0ZQX0NPTVAsCi0JCQkJICAgb3JkZXIpOwotCWlmIChhZGRyZXNzID09IDBVTCkgewotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlwYWdlID0gdmlydF90b19wYWdlKGFkZHJlc3MpOwotCi0JZm9yIChpID0gMDsgaSA8IG9yZGVyOyBpKyssIHBhZ2UrKykKLQkJU2V0UGFnZVJlc2VydmVkKHBhZ2UpOwotCi0JRFJNX0RFQlVHKCJyZXR1cm5pbmcgMHglMDhseFxuIiwgYWRkcmVzcyk7Ci0JcmV0dXJuICh2b2lkICopYWRkcmVzczsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgZHJtX2F0aV9mcmVlX3BjaWdhcnRfdGFibGUodm9pZCAqYWRkcmVzcywgaW50IG9yZGVyKQorc3RhdGljIHZvaWQgZHJtX2F0aV9mcmVlX3BjaWdhcnRfdGFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkgICAgICAgc3RydWN0IGRybV9hdGlfcGNpZ2FydF9pbmZvICpnYXJ0X2luZm8pCiB7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7Ci0JaW50IGk7Ci0JaW50IG51bV9wYWdlcyA9IDEgPDwgb3JkZXI7Ci0JRFJNX0RFQlVHKCJcbiIpOwotCi0JcGFnZSA9IHZpcnRfdG9fcGFnZSgodW5zaWduZWQgbG9uZylhZGRyZXNzKTsKLQotCWZvciAoaSA9IDA7IGkgPCBudW1fcGFnZXM7IGkrKywgcGFnZSsrKQotCQlDbGVhclBhZ2VSZXNlcnZlZChwYWdlKTsKLQotCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpYWRkcmVzcywgb3JkZXIpOworCWRybV9wY2lfZnJlZShkZXYsIGdhcnRfaW5mby0+dGFibGVfaGFuZGxlKTsKKwlnYXJ0X2luZm8tPnRhYmxlX2hhbmRsZSA9IE5VTEw7CiB9CiAKIGludCBkcm1fYXRpX3BjaWdhcnRfY2xlYW51cChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2F0aV9wY2lnYXJ0X2luZm8gKmdhcnRfaW5mbykKQEAgLTc4LDggKzU5LDcgQEAKIAlzdHJ1Y3QgZHJtX3NnX21lbSAqZW50cnkgPSBkZXYtPnNnOwogCXVuc2lnbmVkIGxvbmcgcGFnZXM7CiAJaW50IGk7Ci0JaW50IG9yZGVyOwotCWludCBudW1fcGFnZXMsIG1heF9wYWdlczsKKwlpbnQgbWF4X3BhZ2VzOwogCiAJLyogd2UgbmVlZCB0byBzdXBwb3J0IGxhcmdlIG1lbW9yeSBjb25maWd1cmF0aW9ucyAqLwogCWlmICghZW50cnkpIHsKQEAgLTg3LDE1ICs2Nyw3IEBACiAJCXJldHVybiAwOwogCX0KIAotCW9yZGVyID0gZHJtX29yZGVyKChnYXJ0X2luZm8tPnRhYmxlX3NpemUgKyAoUEFHRV9TSVpFLTEpKSAvIFBBR0VfU0laRSk7Ci0JbnVtX3BhZ2VzID0gMSA8PCBvcmRlcjsKLQogCWlmIChnYXJ0X2luZm8tPmJ1c19hZGRyKSB7Ci0JCWlmIChnYXJ0X2luZm8tPmdhcnRfdGFibGVfbG9jYXRpb24gPT0gRFJNX0FUSV9HQVJUX01BSU4pIHsKLQkJCXBjaV91bm1hcF9zaW5nbGUoZGV2LT5wZGV2LCBnYXJ0X2luZm8tPmJ1c19hZGRyLAotCQkJCQkgbnVtX3BhZ2VzICogUEFHRV9TSVpFLAotCQkJCQkgUENJX0RNQV9UT0RFVklDRSk7Ci0JCX0KIAogCQltYXhfcGFnZXMgPSAoZ2FydF9pbmZvLT50YWJsZV9zaXplIC8gc2l6ZW9mKHUzMikpOwogCQlwYWdlcyA9IChlbnRyeS0+cGFnZXMgPD0gbWF4X3BhZ2VzKQpAQCAtMTEyLDEwICs4NCw5IEBACiAJCQlnYXJ0X2luZm8tPmJ1c19hZGRyID0gMDsKIAl9CiAKLQlpZiAoZ2FydF9pbmZvLT5nYXJ0X3RhYmxlX2xvY2F0aW9uID09IERSTV9BVElfR0FSVF9NQUlOCi0JICAgICYmIGdhcnRfaW5mby0+YWRkcikgewotCQlkcm1fYXRpX2ZyZWVfcGNpZ2FydF90YWJsZShnYXJ0X2luZm8tPmFkZHIsIG9yZGVyKTsKLQkJZ2FydF9pbmZvLT5hZGRyID0gTlVMTDsKKwlpZiAoZ2FydF9pbmZvLT5nYXJ0X3RhYmxlX2xvY2F0aW9uID09IERSTV9BVElfR0FSVF9NQUlOICYmCisJICAgIGdhcnRfaW5mby0+dGFibGVfaGFuZGxlKSB7CisJCWRybV9hdGlfZnJlZV9wY2lnYXJ0X3RhYmxlKGRldiwgZ2FydF9pbmZvKTsKIAl9CiAKIAlyZXR1cm4gMTsKQEAgLTEyNywxMSArOTgsMTAgQEAKIAlzdHJ1Y3QgZHJtX3NnX21lbSAqZW50cnkgPSBkZXYtPnNnOwogCXZvaWQgKmFkZHJlc3MgPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgcGFnZXM7Ci0JdTMyICpwY2lfZ2FydCwgcGFnZV9iYXNlLCBidXNfYWRkcmVzcyA9IDA7CisJdTMyICpwY2lfZ2FydCwgcGFnZV9iYXNlOworCWRtYV9hZGRyX3QgYnVzX2FkZHJlc3MgPSAwOwogCWludCBpLCBqLCByZXQgPSAwOwotCWludCBvcmRlcjsKIAlpbnQgbWF4X3BhZ2VzOwotCWludCBudW1fcGFnZXM7CiAKIAlpZiAoIWVudHJ5KSB7CiAJCURSTV9FUlJPUigibm8gc2NhdHRlci9nYXRoZXIgbWVtb3J5IVxuIik7CkBAIC0xNDEsMzEgKzExMSwxNCBAQAogCWlmIChnYXJ0X2luZm8tPmdhcnRfdGFibGVfbG9jYXRpb24gPT0gRFJNX0FUSV9HQVJUX01BSU4pIHsKIAkJRFJNX0RFQlVHKCJQQ0k6IG5vIHRhYmxlIGluIFZSQU06IHVzaW5nIG5vcm1hbCBSQU1cbiIpOwogCi0JCW9yZGVyID0gZHJtX29yZGVyKChnYXJ0X2luZm8tPnRhYmxlX3NpemUgKwotCQkJCSAgIChQQUdFX1NJWkUtMSkpIC8gUEFHRV9TSVpFKTsKLQkJbnVtX3BhZ2VzID0gMSA8PCBvcmRlcjsKLQkJYWRkcmVzcyA9IGRybV9hdGlfYWxsb2NfcGNpZ2FydF90YWJsZShvcmRlcik7Ci0JCWlmICghYWRkcmVzcykgeworCQlyZXQgPSBkcm1fYXRpX2FsbG9jX3BjaWdhcnRfdGFibGUoZGV2LCBnYXJ0X2luZm8pOworCQlpZiAocmV0KSB7CiAJCQlEUk1fRVJST1IoImNhbm5vdCBhbGxvY2F0ZSBQQ0kgR0FSVCBwYWdlIVxuIik7CiAJCQlnb3RvIGRvbmU7CiAJCX0KIAotCQlpZiAoIWRldi0+cGRldikgewotCQkJRFJNX0VSUk9SKCJQQ0kgZGV2aWNlIHVua25vd24hXG4iKTsKLQkJCWdvdG8gZG9uZTsKLQkJfQotCi0JCWJ1c19hZGRyZXNzID0gcGNpX21hcF9zaW5nbGUoZGV2LT5wZGV2LCBhZGRyZXNzLAotCQkJCQkgICAgIG51bV9wYWdlcyAqIFBBR0VfU0laRSwKLQkJCQkJICAgICBQQ0lfRE1BX1RPREVWSUNFKTsKLQkJaWYgKGJ1c19hZGRyZXNzID09IDApIHsKLQkJCURSTV9FUlJPUigidW5hYmxlIHRvIG1hcCBQQ0lHQVJUIHBhZ2VzIVxuIik7Ci0JCQlvcmRlciA9IGRybV9vcmRlcigoZ2FydF9pbmZvLT50YWJsZV9zaXplICsKLQkJCQkJICAgKFBBR0VfU0laRS0xKSkgLyBQQUdFX1NJWkUpOwotCQkJZHJtX2F0aV9mcmVlX3BjaWdhcnRfdGFibGUoYWRkcmVzcywgb3JkZXIpOwotCQkJYWRkcmVzcyA9IE5VTEw7Ci0JCQlnb3RvIGRvbmU7Ci0JCX0KKwkJYWRkcmVzcyA9IGdhcnRfaW5mby0+dGFibGVfaGFuZGxlLT52YWRkcjsKKwkJYnVzX2FkZHJlc3MgPSBnYXJ0X2luZm8tPnRhYmxlX2hhbmRsZS0+YnVzYWRkcjsKIAl9IGVsc2UgewogCQlhZGRyZXNzID0gZ2FydF9pbmZvLT5hZGRyOwogCQlidXNfYWRkcmVzcyA9IGdhcnRfaW5mby0+YnVzX2FkZHI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2RybVAuaCBiL2RyaXZlcnMvY2hhci9kcm0vZHJtUC5oCmluZGV4IGE2Nzg5ZjIuLjhlYTlkZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vZHJtUC5oCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtUC5oCkBAIC01NCw2ICs1NCw3IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CS8qIEZvciAodW4pbG9ja19rZXJuZWwgKi8KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvY2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CkBAIC01NTEsNiArNTUyLDggQEAKIAlpbnQgZ2FydF9yZWdfaWY7CiAJdm9pZCAqYWRkcjsKIAlkbWFfYWRkcl90IGJ1c19hZGRyOworCWRtYV9hZGRyX3QgdGFibGVfbWFzazsKKwlzdHJ1Y3QgZHJtX2RtYV9oYW5kbGUgKnRhYmxlX2hhbmRsZTsKIAlkcm1fbG9jYWxfbWFwX3QgbWFwcGluZzsKIAlpbnQgdGFibGVfc2l6ZTsKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9mb3BzLmMgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9mb3BzLmMKaW5kZXggMzk5MmY3My4uZjA5ZDRiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1fZm9wcy5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX2ZvcHMuYwpAQCAtMzI2LDYgKzMyNiw3IEBACiAJc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGZpbGVfcHJpdi0+aGVhZC0+ZGV2OwogCWludCByZXRjb2RlID0gMDsKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwogCiAJbG9ja19rZXJuZWwoKTsKIApAQCAtMzU3LDkgKzM1OCwxMSBAQAogCQkJICovCiAKIAkJCWRvewotCQkJCXNwaW5fbG9jaygmZGV2LT5sb2NrLnNwaW5sb2NrKTsKKwkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5sb2NrLnNwaW5sb2NrLAorCQkJCQkJICBpcnFmbGFncyk7CiAJCQkJbG9ja2VkID0gZGV2LT5sb2NrLmlkbGVfaGFzX2xvY2s7Ci0JCQkJc3Bpbl91bmxvY2soJmRldi0+bG9jay5zcGlubG9jayk7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5sb2NrLnNwaW5sb2NrLAorCQkJCQkJICAgICAgIGlycWZsYWdzKTsKIAkJCQlpZiAobG9ja2VkKQogCQkJCQlicmVhazsKIAkJCQlzY2hlZHVsZSgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9kcm1fbG9jay5jIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fbG9jay5jCmluZGV4IGJlYTJhN2QuLjEyZGNkZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX2xvY2suYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9sb2NrLmMKQEAgLTUzLDYgKzUzLDcgQEAKIAlERUNMQVJFX1dBSVRRVUVVRShlbnRyeSwgY3VycmVudCk7CiAJc3RydWN0IGRybV9sb2NrICpsb2NrID0gZGF0YTsKIAlpbnQgcmV0ID0gMDsKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwogCiAJKytmaWxlX3ByaXYtPmxvY2tfY291bnQ7CiAKQEAgLTcxLDkgKzcyLDkgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCiAJYWRkX3dhaXRfcXVldWUoJmRldi0+bG9jay5sb2NrX3F1ZXVlLCAmZW50cnkpOwotCXNwaW5fbG9jaygmZGV2LT5sb2NrLnNwaW5sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5sb2NrLnNwaW5sb2NrLCBpcnFmbGFncyk7CiAJZGV2LT5sb2NrLnVzZXJfd2FpdGVycysrOwotCXNwaW5fdW5sb2NrKCZkZXYtPmxvY2suc3BpbmxvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+bG9jay5zcGlubG9jaywgaXJxZmxhZ3MpOwogCWZvciAoOzspIHsKIAkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCQlpZiAoIWRldi0+bG9jay5od19sb2NrKSB7CkBAIC05NSw5ICs5Niw5IEBACiAJCQlicmVhazsKIAkJfQogCX0KLQlzcGluX2xvY2soJmRldi0+bG9jay5zcGlubG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+bG9jay5zcGlubG9jaywgaXJxZmxhZ3MpOwogCWRldi0+bG9jay51c2VyX3dhaXRlcnMtLTsKLQlzcGluX3VubG9jaygmZGV2LT5sb2NrLnNwaW5sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmxvY2suc3BpbmxvY2ssIGlycWZsYWdzKTsKIAlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAJcmVtb3ZlX3dhaXRfcXVldWUoJmRldi0+bG9jay5sb2NrX3F1ZXVlLCAmZW50cnkpOwogCkBAIC0xOTgsOCArMTk5LDkgQEAKIHsKIAl1bnNpZ25lZCBpbnQgb2xkLCBuZXcsIHByZXY7CiAJdm9sYXRpbGUgdW5zaWduZWQgaW50ICpsb2NrID0gJmxvY2tfZGF0YS0+aHdfbG9jay0+bG9jazsKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwogCi0Jc3Bpbl9sb2NrKCZsb2NrX2RhdGEtPnNwaW5sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbG9ja19kYXRhLT5zcGlubG9jaywgaXJxZmxhZ3MpOwogCWRvIHsKIAkJb2xkID0gKmxvY2s7CiAJCWlmIChvbGQgJiBfRFJNX0xPQ0tfSEVMRCkKQEAgLTIxMSw3ICsyMTMsNyBAQAogCQl9CiAJCXByZXYgPSBjbXB4Y2hnKGxvY2ssIG9sZCwgbmV3KTsKIAl9IHdoaWxlIChwcmV2ICE9IG9sZCk7Ci0Jc3Bpbl91bmxvY2soJmxvY2tfZGF0YS0+c3BpbmxvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2tfZGF0YS0+c3BpbmxvY2ssIGlycWZsYWdzKTsKIAogCWlmIChfRFJNX0xPQ0tJTkdfQ09OVEVYVChvbGQpID09IGNvbnRleHQpIHsKIAkJaWYgKG9sZCAmIF9EUk1fTE9DS19IRUxEKSB7CkBAIC0yNzIsMTUgKzI3NCwxNiBAQAogewogCXVuc2lnbmVkIGludCBvbGQsIG5ldywgcHJldjsKIAl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKmxvY2sgPSAmbG9ja19kYXRhLT5od19sb2NrLT5sb2NrOworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CiAKLQlzcGluX2xvY2soJmxvY2tfZGF0YS0+c3BpbmxvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZsb2NrX2RhdGEtPnNwaW5sb2NrLCBpcnFmbGFncyk7CiAJaWYgKGxvY2tfZGF0YS0+a2VybmVsX3dhaXRlcnMgIT0gMCkgewogCQlkcm1fbG9ja190cmFuc2Zlcihsb2NrX2RhdGEsIDApOwogCQlsb2NrX2RhdGEtPmlkbGVfaGFzX2xvY2sgPSAxOwotCQlzcGluX3VubG9jaygmbG9ja19kYXRhLT5zcGlubG9jayk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2tfZGF0YS0+c3BpbmxvY2ssIGlycWZsYWdzKTsKIAkJcmV0dXJuIDE7CiAJfQotCXNwaW5fdW5sb2NrKCZsb2NrX2RhdGEtPnNwaW5sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NrX2RhdGEtPnNwaW5sb2NrLCBpcnFmbGFncyk7CiAKIAlkbyB7CiAJCW9sZCA9ICpsb2NrOwpAQCAtMzQ0LDE5ICszNDcsMjAgQEAKIHZvaWQgZHJtX2lkbGVsb2NrX3Rha2Uoc3RydWN0IGRybV9sb2NrX2RhdGEgKmxvY2tfZGF0YSkKIHsKIAlpbnQgcmV0ID0gMDsKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwogCi0Jc3Bpbl9sb2NrKCZsb2NrX2RhdGEtPnNwaW5sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbG9ja19kYXRhLT5zcGlubG9jaywgaXJxZmxhZ3MpOwogCWxvY2tfZGF0YS0+a2VybmVsX3dhaXRlcnMrKzsKIAlpZiAoIWxvY2tfZGF0YS0+aWRsZV9oYXNfbG9jaykgewogCi0JCXNwaW5fdW5sb2NrKCZsb2NrX2RhdGEtPnNwaW5sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9ja19kYXRhLT5zcGlubG9jaywgaXJxZmxhZ3MpOwogCQlyZXQgPSBkcm1fbG9ja190YWtlKGxvY2tfZGF0YSwgRFJNX0tFUk5FTF9DT05URVhUKTsKLQkJc3Bpbl9sb2NrKCZsb2NrX2RhdGEtPnNwaW5sb2NrKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmxvY2tfZGF0YS0+c3BpbmxvY2ssIGlycWZsYWdzKTsKIAogCQlpZiAocmV0ID09IDEpCiAJCQlsb2NrX2RhdGEtPmlkbGVfaGFzX2xvY2sgPSAxOwogCX0KLQlzcGluX3VubG9jaygmbG9ja19kYXRhLT5zcGlubG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9ja19kYXRhLT5zcGlubG9jaywgaXJxZmxhZ3MpOwogfQogRVhQT1JUX1NZTUJPTChkcm1faWRsZWxvY2tfdGFrZSk7CiAKQEAgLTM2NCw4ICszNjgsOSBAQAogewogCXVuc2lnbmVkIGludCBvbGQsIHByZXY7CiAJdm9sYXRpbGUgdW5zaWduZWQgaW50ICpsb2NrID0gJmxvY2tfZGF0YS0+aHdfbG9jay0+bG9jazsKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwogCi0Jc3Bpbl9sb2NrKCZsb2NrX2RhdGEtPnNwaW5sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbG9ja19kYXRhLT5zcGlubG9jaywgaXJxZmxhZ3MpOwogCWlmICgtLWxvY2tfZGF0YS0+a2VybmVsX3dhaXRlcnMgPT0gMCkgewogCQlpZiAobG9ja19kYXRhLT5pZGxlX2hhc19sb2NrKSB7CiAJCQlkbyB7CkBAIC0zNzYsNyArMzgxLDcgQEAKIAkJCWxvY2tfZGF0YS0+aWRsZV9oYXNfbG9jayA9IDA7CiAJCX0KIAl9Ci0Jc3Bpbl91bmxvY2soJmxvY2tfZGF0YS0+c3BpbmxvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2tfZGF0YS0+c3BpbmxvY2ssIGlycWZsYWdzKTsKIH0KIEVYUE9SVF9TWU1CT0woZHJtX2lkbGVsb2NrX3JlbGVhc2UpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9wY2lpZHMuaCBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX3BjaWlkcy5oCmluZGV4IDcxNWIzNjEuLmE2YTQ5OWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX3BjaWlkcy5oCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX3BjaWlkcy5oCkBAIC0yMDUsOSArMjA1LDkgQEAKIAl7MHgxMDAyLCAweDcxRDYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY1MzB8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4NzFEQSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjUzMHxSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDcxREUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY1MzB8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NzIwMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjUzMHxSQURFT05fTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDcyMTAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY1MzB8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NzIxMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjUzMHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg3MjAwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNTE1fFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NzIxMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjUxNXxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg3MjExLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNTE1fFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDcyNDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjU4MHxSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDcyNDMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjU4MHxSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDcyNDQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjU4MHxSQURFT05fTkVXX01FTU1BUH0sIFwKQEAgLTIzOCw2ICsyMzgsNyBAQAogCXsweDEwMDIsIDB4NzgzNCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzMwMHxSQURFT05fSVNfSUdQfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4NzgzNSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzMwMHxSQURFT05fSVNfSUdQfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDc5MWUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlM2OTB8UkFERU9OX0lTX0lHUHxSQURFT05fTkVXX01FTU1BUHxSQURFT05fSVNfSUdQR0FSVH0sIFwKKwl7MHgxMDAyLCAweDc5MWYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlM2OTB8UkFERU9OX0lTX0lHUHxSQURFT05fTkVXX01FTU1BUHxSQURFT05fSVNfSUdQR0FSVH0sIFwKIAl7MCwgMCwgMH0KIAogI2RlZmluZSByMTI4X1BDSV9JRFMgXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9yMTI4X2NjZS5jIGIvZHJpdmVycy9jaGFyL2RybS9yMTI4X2NjZS5jCmluZGV4IDg5MmUwYTUuLmYzNmFkYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vcjEyOF9jY2UuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL3IxMjhfY2NlLmMKQEAgLTU1OCw2ICs1NTgsNyBAQAogI2lmIF9fT1NfSEFTX0FHUAogCWlmIChkZXZfcHJpdi0+aXNfcGNpKSB7CiAjZW5kaWYKKwkJZGV2X3ByaXYtPmdhcnRfaW5mby50YWJsZV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKIAkJZGV2X3ByaXYtPmdhcnRfaW5mby5nYXJ0X3RhYmxlX2xvY2F0aW9uID0gRFJNX0FUSV9HQVJUX01BSU47CiAJCWRldl9wcml2LT5nYXJ0X2luZm8udGFibGVfc2l6ZSA9IFIxMjhfUENJR0FSVF9UQUJMRV9TSVpFOwogCQlkZXZfcHJpdi0+Z2FydF9pbmZvLmFkZHIgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9yYWRlb25fY3AuYyBiL2RyaXZlcnMvY2hhci9kcm0vcmFkZW9uX2NwLmMKaW5kZXggODMzYWJjNy4uOTA3MmU0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9yYWRlb25fY3AuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL3JhZGVvbl9jcC5jCkBAIC0xODA3LDYgKzE4MDcsNyBAQAogCX0gZWxzZQogI2VuZGlmCiAJeworCQlkZXZfcHJpdi0+Z2FydF9pbmZvLnRhYmxlX21hc2sgPSBETUFfQklUX01BU0soMzIpOwogCQkvKiBpZiB3ZSBoYXZlIGFuIG9mZnNldCBzZXQgZnJvbSB1c2Vyc3BhY2UgKi8KIAkJaWYgKGRldl9wcml2LT5wY2lnYXJ0X29mZnNldF9zZXQpIHsKIAkJCWRldl9wcml2LT5nYXJ0X2luZm8uYnVzX2FkZHIgPQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS92aWFfZG1hLmMgYi9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9kbWEuYwppbmRleCA5NGJhZWM2Li43YTMzOWRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9kbWEuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9kbWEuYwpAQCAtMTI2LDYgKzEyNiw4IEBACiAJCQkgICAgIGh3X2FkZHIsIGN1cl9hZGRyLCBuZXh0X2FkZHIpOwogCQkJcmV0dXJuIC0xOwogCQl9CisJCWlmICAoKGN1cl9hZGRyIDwgaHdfYWRkcikgJiYgKG5leHRfYWRkciA+PSBod19hZGRyKSkKKwkJCW1zbGVlcCgxKTsKIAl9IHdoaWxlICgoY3VyX2FkZHIgPCBod19hZGRyKSAmJiAobmV4dF9hZGRyID49IGh3X2FkZHIpKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTQxNiwyNyArNDE4LDUwIEBACiAJaW50IHBhdXNlZCwgY291bnQ7CiAJdm9sYXRpbGUgdWludDMyX3QgKnBhdXNlZF9hdCA9IGRldl9wcml2LT5sYXN0X3BhdXNlX3B0cjsKIAl1aW50MzJfdCByZWFkZXIscHRyOworCXVpbnQzMl90IGRpZmY7CiAKIAlwYXVzZWQgPSAwOwogCXZpYV9mbHVzaF93cml0ZV9jb21iaW5lKCk7CiAJKHZvaWQpICoodm9sYXRpbGUgdWludDMyX3QgKikodmlhX2dldF9kbWEoZGV2X3ByaXYpIC0xKTsKKwogCSpwYXVzZWRfYXQgPSBwYXVzZV9hZGRyX2xvOwogCXZpYV9mbHVzaF93cml0ZV9jb21iaW5lKCk7CiAJKHZvaWQpICpwYXVzZWRfYXQ7CisKIAlyZWFkZXIgPSAqKGRldl9wcml2LT5od19hZGRyX3B0cik7CiAJcHRyID0gKCh2b2xhdGlsZSBjaGFyICopcGF1c2VkX2F0IC0gZGV2X3ByaXYtPmRtYV9wdHIpICsKIAkJZGV2X3ByaXYtPmRtYV9vZmZzZXQgKyAodWludDMyX3QpIGRldl9wcml2LT5hZ3BBZGRyICsgNDsKKwogCWRldl9wcml2LT5sYXN0X3BhdXNlX3B0ciA9IHZpYV9nZXRfZG1hKGRldl9wcml2KSAtIDE7CiAKLQlpZiAoKHB0ciAtIHJlYWRlcikgPD0gZGV2X3ByaXYtPmRtYV9kaWZmICkgewotCQljb3VudCA9IDEwMDAwMDAwOwotCQl3aGlsZSAoIShwYXVzZWQgPSAoVklBX1JFQUQoMHg0MWMpICYgMHg4MDAwMDAwMCkpICYmIGNvdW50LS0pOworCS8qCisJICogSWYgdGhlcmUgaXMgYSBwb3NzaWJpbGl0eSB0aGF0IHRoZSBjb21tYW5kIHJlYWRlciB3aWxsIAorCSAqIG1pc3MgdGhlIG5ldyBwYXVzZSBhZGRyZXNzIGFuZCBwYXVzZSBvbiB0aGUgb2xkIG9uZSwKKwkgKiBJbiB0aGF0IGNhc2Ugd2UgbmVlZCB0byBwcm9ncmFtIHRoZSBuZXcgc3RhcnQgYWRkcmVzcworCSAqIHVzaW5nIFBDSS4KKwkgKi8KKworCWRpZmYgPSAodWludDMyX3QpIChwdHIgLSByZWFkZXIpIC0gZGV2X3ByaXYtPmRtYV9kaWZmOworCWNvdW50ID0gMTAwMDAwMDA7CisJd2hpbGUoZGlmZiA9PSAwICYmIGNvdW50LS0pIHsKKwkJcGF1c2VkID0gKFZJQV9SRUFEKDB4NDFjKSAmIDB4ODAwMDAwMDApOworCQlpZiAocGF1c2VkKSAKKwkJCWJyZWFrOworCQlyZWFkZXIgPSAqKGRldl9wcml2LT5od19hZGRyX3B0cik7CisJCWRpZmYgPSAodWludDMyX3QpIChwdHIgLSByZWFkZXIpIC0gZGV2X3ByaXYtPmRtYV9kaWZmOwogCX0KIAorCXBhdXNlZCA9IFZJQV9SRUFEKDB4NDFjKSAmIDB4ODAwMDAwMDA7CisKIAlpZiAocGF1c2VkICYmICFub19wY2lfZmlyZSkgewogCQlyZWFkZXIgPSAqKGRldl9wcml2LT5od19hZGRyX3B0cik7Ci0JCWlmICgocHRyIC0gcmVhZGVyKSA9PSBkZXZfcHJpdi0+ZG1hX2RpZmYpIHsKLQorCQlkaWZmID0gKHVpbnQzMl90KSAocHRyIC0gcmVhZGVyKSAtIGRldl9wcml2LT5kbWFfZGlmZjsKKwkJZGlmZiAmPSAoZGV2X3ByaXYtPmRtYV9oaWdoIC0gMSk7CisJCWlmIChkaWZmICE9IDAgJiYgZGlmZiA8IChkZXZfcHJpdi0+ZG1hX2hpZ2ggPj4gMSkpIHsKKwkJCURSTV9FUlJPUigiUGF1c2VkIGF0IGluY29ycmVjdCBhZGRyZXNzLiAiCisJCQkJICAiMHglMDh4LCAweCUwOHggMHglMDh4XG4iLAorCQkJCSAgcHRyLCByZWFkZXIsIGRldl9wcml2LT5kbWFfZGlmZik7CisJCX0gZWxzZSBpZiAoZGlmZiA9PSAwKSB7CiAJCQkvKgogCQkJICogVGhlcmUgaXMgYSBjb25jZXJuIHRoYXQgdGhlc2Ugd3JpdGVzIG1heSBzdGFsbCB0aGUgUENJIGJ1cwogCQkJICogaWYgdGhlIEdQVSBpcyBub3QgaWRsZS4gSG93ZXZlciwgaWRsaW5nIHRoZSBHUFUgZmlyc3QKQEAgLTU3Nyw2ICs2MDIsNyBAQAogCXVpbnQzMl90IHBhdXNlX2FkZHJfbG8sIHBhdXNlX2FkZHJfaGk7CiAJdWludDMyX3QganVtcF9hZGRyX2xvLCBqdW1wX2FkZHJfaGk7CiAJdm9sYXRpbGUgdWludDMyX3QgKmxhc3RfcGF1c2VfcHRyOworCXVpbnQzMl90IGRtYV9sb3dfc2F2ZTEsIGRtYV9sb3dfc2F2ZTI7CiAKIAlhZ3BfYmFzZSA9IGRldl9wcml2LT5kbWFfb2Zmc2V0ICsgKHVpbnQzMl90KSBkZXZfcHJpdi0+YWdwQWRkcjsKIAl2aWFfYWxpZ25fY21kKGRldl9wcml2LCBIQ19IQUdQQnBJRF9KVU1QLCAwLCAmanVtcF9hZGRyX2hpLApAQCAtNjAzLDggKzYyOSwyOSBAQAogCQkgICAgICAmcGF1c2VfYWRkcl9sbywgMCk7CiAKIAkqbGFzdF9wYXVzZV9wdHIgPSBwYXVzZV9hZGRyX2xvOworCWRtYV9sb3dfc2F2ZTEgPSBkZXZfcHJpdi0+ZG1hX2xvdzsKIAotCXZpYV9ob29rX3NlZ21lbnQoIGRldl9wcml2LCBqdW1wX2FkZHJfaGksIGp1bXBfYWRkcl9sbywgMCk7CisJLyoKKwkgKiBOb3csIHNldCBhIHRyYXAgdGhhdCB3aWxsIHBhdXNlIHRoZSByZWd1bGF0b3IgaWYgaXQgdHJpZXMgdG8gcmVydW4gdGhlIG9sZAorCSAqIGNvbW1hbmQgYnVmZmVyLiAoV2hpY2ggbWF5IGhhcHBlbiBpZiB2aWFfaG9va19zZWdtZW50IGRldGVjcyBhIGNvbW1hbmQgcmVndWxhdG9yIHBhdXNlCisJICogYW5kIHJlaXNzdWVzIHRoZSBqdW1wIGNvbW1hbmQgb3ZlciBQQ0ksIHdoaWxlIHRoZSByZWd1bGF0b3IgaGFzIGFscmVhZHkgdGFrZW4gdGhlIGp1bXAKKwkgKiBhbmQgYWN0dWFsbHkgcGF1c2VkIGF0IHRoZSBjdXJyZW50IGJ1ZmZlciBlbmQpLgorCSAqIFRoZXJlIGFwcGVhcnMgdG8gYmUgbm8gb3RoZXIgd2F5IHRvIGRldGVjdCB0aGlzIGNvbmRpdGlvbiwgc2luY2UgdGhlIGh3X2FkZHJfcG9pbnRlcgorCSAqIGRvZXMgbm90IHNlZW0gdG8gZ2V0IHVwZGF0ZWQgaW1tZWRpYXRlbHkgd2hlbiBhIGp1bXAgb2NjdXJzLgorCSAqLworCisJbGFzdF9wYXVzZV9wdHIgPQorCQl2aWFfYWxpZ25fY21kKGRldl9wcml2LCBIQ19IQUdQQnBJRF9QQVVTRSwgMCwgJnBhdXNlX2FkZHJfaGksCisJCQkgICAgICAmcGF1c2VfYWRkcl9sbywgMCkgLSAxOworCXZpYV9hbGlnbl9jbWQoZGV2X3ByaXYsIEhDX0hBR1BCcElEX1BBVVNFLCAwLCAmcGF1c2VfYWRkcl9oaSwKKwkJICAgICAgJnBhdXNlX2FkZHJfbG8sIDApOworCSpsYXN0X3BhdXNlX3B0ciA9IHBhdXNlX2FkZHJfbG87CisKKwlkbWFfbG93X3NhdmUyID0gZGV2X3ByaXYtPmRtYV9sb3c7CisJZGV2X3ByaXYtPmRtYV9sb3cgPSBkbWFfbG93X3NhdmUxOworCXZpYV9ob29rX3NlZ21lbnQoZGV2X3ByaXYsIGp1bXBfYWRkcl9oaSwganVtcF9hZGRyX2xvLCAwKTsKKwlkZXZfcHJpdi0+ZG1hX2xvdyA9IGRtYV9sb3dfc2F2ZTI7CisJdmlhX2hvb2tfc2VnbWVudChkZXZfcHJpdiwgcGF1c2VfYWRkcl9oaSwgcGF1c2VfYWRkcl9sbywgMCk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS92aWFfZG1hYmxpdC5jIGIvZHJpdmVycy9jaGFyL2RybS92aWFfZG1hYmxpdC5jCmluZGV4IDMzYzUxOTcuLjQwOWUwMGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vdmlhX2RtYWJsaXQuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9kbWFibGl0LmMKQEAgLTYwMyw3ICs2MDMsNyBAQAogCSAqIChOb3QgYSBiaWcgbGltaXRhdGlvbiBhbnl3YXkuKQogCSAqLwogCi0JaWYgKCh4ZmVyLT5tZW1fc3RyaWRlIC0geGZlci0+bGluZV9sZW5ndGgpID49IFBBR0VfU0laRSkgeworCWlmICgoeGZlci0+bWVtX3N0cmlkZSAtIHhmZXItPmxpbmVfbGVuZ3RoKSA+IDIqUEFHRV9TSVpFKSB7CiAJCURSTV9FUlJPUigiVG9vIGxhcmdlIHN5c3RlbSBtZW1vcnkgc3RyaWRlLiBTdHJpZGU6ICVkLCAiCiAJCQkgICJMZW5ndGg6ICVkXG4iLCB4ZmVyLT5tZW1fc3RyaWRlLCB4ZmVyLT5saW5lX2xlbmd0aCk7CiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3JvY2tldC5jIGIvZHJpdmVycy9jaGFyL3JvY2tldC5jCmluZGV4IDcyZjI4OTIuLmY1ODViYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yb2NrZXQuYworKysgYi9kcml2ZXJzL2NoYXIvcm9ja2V0LmMKQEAgLTgzLDYgKzgzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC0xMzEyLDcgKzEzMTMsNyBAQAogCWlmIChjbGVhciAmIFRJT0NNX0RUUikKIAkJaW5mby0+Y2hhbm5lbC5UeENvbnRyb2xbM10gJj0gflNFVF9EVFI7CiAKLQlzT3V0RFcoaW5mby0+Y2hhbm5lbC5JbmRleEFkZHIsICooRFdvcmRfdCAqKSAmIChpbmZvLT5jaGFubmVsLlR4Q29udHJvbFswXSkpOworCW91dDMyKGluZm8tPmNoYW5uZWwuSW5kZXhBZGRyLCBpbmZvLT5jaGFubmVsLlR4Q29udHJvbCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE3NDgsNyArMTc0OSw3IEBACiAKIAkvKiAgV3JpdGUgcmVtYWluaW5nIGRhdGEgaW50byB0aGUgcG9ydCdzIHhtaXRfYnVmICovCiAJd2hpbGUgKDEpIHsKLQkJaWYgKGluZm8tPnR0eSA9PSAwKQkvKiAgIFNlZW1pbmdseSBvYmxpZ2F0b3J5IGNoZWNrLi4uICovCisJCWlmICghaW5mby0+dHR5KQkvKiAgIFNlZW1pbmdseSBvYmxpZ2F0b3J5IGNoZWNrLi4uICovCiAJCQlnb3RvIGVuZDsKIAogCQljID0gbWluKGNvdW50LCBtaW4oWE1JVF9CVUZfU0laRSAtIGluZm8tPnhtaXRfY250IC0gMSwgWE1JVF9CVUZfU0laRSAtIGluZm8tPnhtaXRfaGVhZCkpOwpAQCAtMjc5OCw3ICsyNzk5LDcgQEAKIAlzdGF0aWMgQnl0ZV90IFJbNF0gPSB7IDB4MDAsIDB4MDAsIDB4MzQsIDB4MTIgfTsKIAogCS8qIHdyaXRlIHRvIGNoYW4gMCBTUkFNICovCi0Jc091dERXKChEV29yZElPX3QpIGlvICsgX0lORFhfQUREUiwgKigoRFdvcmRfdCAqKSAmIFJbMF0pKTsKKwlvdXQzMigoRFdvcmRJT190KSBpbyArIF9JTkRYX0FERFIsIFIpOwogCXNPdXRXKGlvICsgX0lORFhfQUREUiwgMCk7CS8qIHJlYWQgZnJvbSBTUkFNLCBjaGFuIDAgKi8KIAl4ID0gc0luVyhpbyArIF9JTkRYX0RBVEEpOwogCXNPdXRXKGlvICsgX0lORFhfQUREUiwgMHg0MDAwKTsJLyogcmVhZCBmcm9tIFNSQU0sIGNoYW4gNCAqLwpAQCAtMjg2NCw3ICsyODY1LDcgQEAKIAkJUlsxXSA9IFJEYXRhW2kgKyAxXSArIDB4MTAgKiBDaGFuTnVtOwogCQlSWzJdID0gUkRhdGFbaSArIDJdOwogCQlSWzNdID0gUkRhdGFbaSArIDNdOwotCQlzT3V0RFcoQ2hQLT5JbmRleEFkZHIsICooKERXb3JkX3QgKikgJiBSWzBdKSk7CisJCW91dDMyKENoUC0+SW5kZXhBZGRyLCBSKTsKIAl9CiAKIAlDaFIgPSBDaFAtPlI7CkBAIC0yODg3LDQzICsyODg4LDQzIEBACiAJQ2hQLT5CYXVkRGl2WzFdID0gKEJ5dGVfdCkgKChDaE9mZiArIF9CQVVEKSA+PiA4KTsKIAlDaFAtPkJhdWREaXZbMl0gPSAoQnl0ZV90KSBicmQ5NjAwOwogCUNoUC0+QmF1ZERpdlszXSA9IChCeXRlX3QpIChicmQ5NjAwID4+IDgpOwotCXNPdXREVyhDaFAtPkluZGV4QWRkciwgKihEV29yZF90ICopICYgQ2hQLT5CYXVkRGl2WzBdKTsKKwlvdXQzMihDaFAtPkluZGV4QWRkciwgQ2hQLT5CYXVkRGl2KTsKIAogCUNoUC0+VHhDb250cm9sWzBdID0gKEJ5dGVfdCkgKENoT2ZmICsgX1RYX0NUUkwpOwogCUNoUC0+VHhDb250cm9sWzFdID0gKEJ5dGVfdCkgKChDaE9mZiArIF9UWF9DVFJMKSA+PiA4KTsKIAlDaFAtPlR4Q29udHJvbFsyXSA9IDA7CiAJQ2hQLT5UeENvbnRyb2xbM10gPSAwOwotCXNPdXREVyhDaFAtPkluZGV4QWRkciwgKihEV29yZF90ICopICYgQ2hQLT5UeENvbnRyb2xbMF0pOworCW91dDMyKENoUC0+SW5kZXhBZGRyLCBDaFAtPlR4Q29udHJvbCk7CiAKIAlDaFAtPlJ4Q29udHJvbFswXSA9IChCeXRlX3QpIChDaE9mZiArIF9SWF9DVFJMKTsKIAlDaFAtPlJ4Q29udHJvbFsxXSA9IChCeXRlX3QpICgoQ2hPZmYgKyBfUlhfQ1RSTCkgPj4gOCk7CiAJQ2hQLT5SeENvbnRyb2xbMl0gPSAwOwogCUNoUC0+UnhDb250cm9sWzNdID0gMDsKLQlzT3V0RFcoQ2hQLT5JbmRleEFkZHIsICooRFdvcmRfdCAqKSAmIENoUC0+UnhDb250cm9sWzBdKTsKKwlvdXQzMihDaFAtPkluZGV4QWRkciwgQ2hQLT5SeENvbnRyb2wpOwogCiAJQ2hQLT5UeEVuYWJsZXNbMF0gPSAoQnl0ZV90KSAoQ2hPZmYgKyBfVFhfRU5CTFMpOwogCUNoUC0+VHhFbmFibGVzWzFdID0gKEJ5dGVfdCkgKChDaE9mZiArIF9UWF9FTkJMUykgPj4gOCk7CiAJQ2hQLT5UeEVuYWJsZXNbMl0gPSAwOwogCUNoUC0+VHhFbmFibGVzWzNdID0gMDsKLQlzT3V0RFcoQ2hQLT5JbmRleEFkZHIsICooRFdvcmRfdCAqKSAmIENoUC0+VHhFbmFibGVzWzBdKTsKKwlvdXQzMihDaFAtPkluZGV4QWRkciwgQ2hQLT5UeEVuYWJsZXMpOwogCiAJQ2hQLT5UeENvbXBhcmVbMF0gPSAoQnl0ZV90KSAoQ2hPZmYgKyBfVFhDTVAxKTsKIAlDaFAtPlR4Q29tcGFyZVsxXSA9IChCeXRlX3QpICgoQ2hPZmYgKyBfVFhDTVAxKSA+PiA4KTsKIAlDaFAtPlR4Q29tcGFyZVsyXSA9IDA7CiAJQ2hQLT5UeENvbXBhcmVbM10gPSAwOwotCXNPdXREVyhDaFAtPkluZGV4QWRkciwgKihEV29yZF90ICopICYgQ2hQLT5UeENvbXBhcmVbMF0pOworCW91dDMyKENoUC0+SW5kZXhBZGRyLCBDaFAtPlR4Q29tcGFyZSk7CiAKIAlDaFAtPlR4UmVwbGFjZTFbMF0gPSAoQnl0ZV90KSAoQ2hPZmYgKyBfVFhSRVAxQjEpOwogCUNoUC0+VHhSZXBsYWNlMVsxXSA9IChCeXRlX3QpICgoQ2hPZmYgKyBfVFhSRVAxQjEpID4+IDgpOwogCUNoUC0+VHhSZXBsYWNlMVsyXSA9IDA7CiAJQ2hQLT5UeFJlcGxhY2UxWzNdID0gMDsKLQlzT3V0RFcoQ2hQLT5JbmRleEFkZHIsICooRFdvcmRfdCAqKSAmIENoUC0+VHhSZXBsYWNlMVswXSk7CisJb3V0MzIoQ2hQLT5JbmRleEFkZHIsIENoUC0+VHhSZXBsYWNlMSk7CiAKIAlDaFAtPlR4UmVwbGFjZTJbMF0gPSAoQnl0ZV90KSAoQ2hPZmYgKyBfVFhSRVAyKTsKIAlDaFAtPlR4UmVwbGFjZTJbMV0gPSAoQnl0ZV90KSAoKENoT2ZmICsgX1RYUkVQMikgPj4gOCk7CiAJQ2hQLT5UeFJlcGxhY2UyWzJdID0gMDsKIAlDaFAtPlR4UmVwbGFjZTJbM10gPSAwOwotCXNPdXREVyhDaFAtPkluZGV4QWRkciwgKihEV29yZF90ICopICYgQ2hQLT5UeFJlcGxhY2UyWzBdKTsKKwlvdXQzMihDaFAtPkluZGV4QWRkciwgQ2hQLT5UeFJlcGxhY2UyKTsKIAogCUNoUC0+VHhGSUZPUHRycyA9IENoT2ZmICsgX1RYRl9PVVRQOwogCUNoUC0+VHhGSUZPID0gQ2hPZmYgKyBfVFhfRklGTzsKQEAgLTI5NzksNyArMjk4MCw3IEBACiAJUlsxXSA9IENoUC0+UlsxXTsKIAlSWzJdID0gMHgwYTsKIAlSWzNdID0gQ2hQLT5SWzNdOwotCXNPdXREVyhDaFAtPkluZGV4QWRkciwgKihEV29yZF90ICopICYgUlswXSk7CisJb3V0MzIoQ2hQLT5JbmRleEFkZHIsIFIpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0zMDk0LDEzICszMDk1LDEzIEBACiAJCSpXb3JkUHRyID0gQ2hQLT5UeFByaW9CdWY7CS8qIGRhdGEgYnl0ZSBhZGRyZXNzICovCiAKIAkJRFdCdWZbMl0gPSBEYXRhOwkvKiBkYXRhIGJ5dGUgdmFsdWUgKi8KLQkJc091dERXKEluZGV4QWRkciwgKigoRFdvcmRfdCAqKSAoJkRXQnVmWzBdKSkpOwkvKiB3cml0ZSBpdCBvdXQgKi8KKwkJb3V0MzIoSW5kZXhBZGRyLCBEV0J1Zik7CS8qIHdyaXRlIGl0IG91dCAqLwogCiAJCSpXb3JkUHRyID0gQ2hQLT5UeFByaW9DbnQ7CS8qIFR4IHByaW9yaXR5IGNvdW50IGFkZHJlc3MgKi8KIAogCQlEV0J1ZlsyXSA9IFBSSV9QRU5EICsgMTsJLyogaW5kaWNhdGUgMSBieXRlIHBlbmRpbmcgKi8KIAkJRFdCdWZbM10gPSAwOwkvKiBwcmlvcml0eSBidWZmZXIgcG9pbnRlciAqLwotCQlzT3V0RFcoSW5kZXhBZGRyLCAqKChEV29yZF90ICopICgmRFdCdWZbMF0pKSk7CS8qIHdyaXRlIGl0IG91dCAqLworCQlvdXQzMihJbmRleEFkZHIsIERXQnVmKTsJLyogd3JpdGUgaXQgb3V0ICovCiAJfSBlbHNlIHsJCS8qIHdyaXRlIGl0IHRvIFR4IEZJRk8gKi8KIAogCQlzV3JpdGVUeEJ5dGUoc0dldFR4UnhEYXRhSU8oQ2hQKSwgRGF0YSk7CkBAIC0zMTQ3LDExICszMTQ4LDExIEBACiAJQ2hQLT5SeENvbnRyb2xbMl0gfD0KIAkgICAgKChCeXRlX3QpIEZsYWdzICYgKFJYSU5UX0VOIHwgU1JDSU5UX0VOIHwgTUNJTlRfRU4pKTsKIAotCXNPdXREVyhDaFAtPkluZGV4QWRkciwgKihEV29yZF90ICopICYgQ2hQLT5SeENvbnRyb2xbMF0pOworCW91dDMyKENoUC0+SW5kZXhBZGRyLCBDaFAtPlJ4Q29udHJvbCk7CiAKIAlDaFAtPlR4Q29udHJvbFsyXSB8PSAoKEJ5dGVfdCkgRmxhZ3MgJiBUWElOVF9FTik7CiAKLQlzT3V0RFcoQ2hQLT5JbmRleEFkZHIsICooRFdvcmRfdCAqKSAmIENoUC0+VHhDb250cm9sWzBdKTsKKwlvdXQzMihDaFAtPkluZGV4QWRkciwgQ2hQLT5UeENvbnRyb2wpOwogCiAJaWYgKEZsYWdzICYgQ0hBTklOVF9FTikgewogCQlNYXNrID0gc0luQihDaFAtPkludE1hc2spIHwgc0JpdE1hcFNldFRibFtDaFAtPkNoYW5OdW1dOwpAQCAtMzE5MCw5ICszMTkxLDkgQEAKIAogCUNoUC0+UnhDb250cm9sWzJdICY9CiAJICAgIH4oKEJ5dGVfdCkgRmxhZ3MgJiAoUlhJTlRfRU4gfCBTUkNJTlRfRU4gfCBNQ0lOVF9FTikpOwotCXNPdXREVyhDaFAtPkluZGV4QWRkciwgKihEV29yZF90ICopICYgQ2hQLT5SeENvbnRyb2xbMF0pOworCW91dDMyKENoUC0+SW5kZXhBZGRyLCBDaFAtPlJ4Q29udHJvbCk7CiAJQ2hQLT5UeENvbnRyb2xbMl0gJj0gfigoQnl0ZV90KSBGbGFncyAmIFRYSU5UX0VOKTsKLQlzT3V0RFcoQ2hQLT5JbmRleEFkZHIsICooRFdvcmRfdCAqKSAmIENoUC0+VHhDb250cm9sWzBdKTsKKwlvdXQzMihDaFAtPkluZGV4QWRkciwgQ2hQLT5UeENvbnRyb2wpOwogCiAJaWYgKEZsYWdzICYgQ0hBTklOVF9FTikgewogCQlNYXNrID0gc0luQihDaFAtPkludE1hc2spICYgc0JpdE1hcENsclRibFtDaFAtPkNoYW5OdW1dOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3JvY2tldF9pbnQuaCBiL2RyaXZlcnMvY2hhci9yb2NrZXRfaW50LmgKaW5kZXggZjNhNzU3OS4uYjAxZDM4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3JvY2tldF9pbnQuaAorKysgYi9kcml2ZXJzL2NoYXIvcm9ja2V0X2ludC5oCkBAIC0yNiw3ICsyNiw2IEBACiB0eXBlZGVmIHVuc2lnbmVkIGludCBXb3JkX3Q7CiB0eXBlZGVmIHVuc2lnbmVkIGludCBXb3JkSU9fdDsKIAotdHlwZWRlZiB1bnNpZ25lZCBsb25nIERXb3JkX3Q7CiB0eXBlZGVmIHVuc2lnbmVkIGludCBEV29yZElPX3Q7CiAKIC8qCkBAIC0zOCw3ICszNyw2IEBACiAgKiBpbnN0cnVjdGlvbi4KICAqLwogCi0jaWZkZWYgUk9DS0VUX0RFQlVHX0lPCiBzdGF0aWMgaW5saW5lIHZvaWQgc091dEIodW5zaWduZWQgc2hvcnQgcG9ydCwgdW5zaWduZWQgY2hhciB2YWx1ZSkKIHsKICNpZmRlZiBST0NLRVRfREVCVUdfSU8KQEAgLTU1LDEyICs1MywxMyBAQAogCW91dHdfcCh2YWx1ZSwgcG9ydCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzT3V0RFcodW5zaWduZWQgc2hvcnQgcG9ydCwgdW5zaWduZWQgbG9uZyB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBvdXQzMih1bnNpZ25lZCBzaG9ydCBwb3J0LCBCeXRlX3QgKnApCiB7CisJdTMyIHZhbHVlID0gbGUzMl90b19jcHUoZ2V0X3VuYWxpZ25lZCgoX19sZTMyICopcCkpOwogI2lmZGVmIFJPQ0tFVF9ERUJVR19JTwotCXByaW50ayhLRVJOX0RFQlVHICJzT3V0RFcoJXgsICVseCkuLi5cbiIsIHBvcnQsIHZhbHVlKTsKKwlwcmludGsoS0VSTl9ERUJVRyAib3V0MzIoJXgsICVseCkuLi5cbiIsIHBvcnQsIHZhbHVlKTsKICNlbmRpZgotCW91dGxfcChjcHVfdG9fbGUzMih2YWx1ZSksIHBvcnQpOworCW91dGxfcCh2YWx1ZSwgcG9ydCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciBzSW5CKHVuc2lnbmVkIHNob3J0IHBvcnQpCkBAIC03MywxNCArNzIsNiBAQAogCXJldHVybiBpbndfcChwb3J0KTsKIH0KIAotI2Vsc2UJCQkJLyogIVJPQ0tFVF9ERUJVR19JTyAqLwotI2RlZmluZSBzT3V0QihhLCBiKSBvdXRiX3AoYiwgYSkKLSNkZWZpbmUgc091dFcoYSwgYikgb3V0d19wKGIsIGEpCi0jZGVmaW5lIHNPdXREVyhwb3J0LCB2YWx1ZSkgb3V0bF9wKGNwdV90b19sZTMyKHZhbHVlKSwgcG9ydCkKLSNkZWZpbmUgc0luQihhKSAoaW5iX3AoYSkpCi0jZGVmaW5lIHNJblcoYSkgKGlud19wKGEpKQotI2VuZGlmCQkJCS8qIFJPQ0tFVF9ERUJVR19JTyAqLwotCiAvKiBUaGlzIGlzIHVzZWQgdG8gbW92ZSBhcnJheXMgb2YgYnl0ZXMgc28gYnl0ZSBzd2FwcGluZyBpc24ndCBhcHByb3ByaWF0ZS4gKi8KICNkZWZpbmUgc091dFN0clcocG9ydCwgYWRkciwgY291bnQpIGlmIChjb3VudCkgb3V0c3cocG9ydCwgYWRkciwgY291bnQpCiAjZGVmaW5lIHNJblN0clcocG9ydCwgYWRkciwgY291bnQpIGlmIChjb3VudCkgaW5zdyhwb3J0LCBhZGRyLCBjb3VudCkKQEAgLTM5MCw3ICszODEsNyBAQAogI2RlZmluZSBzQ2xyQnJlYWsoQ2hQKSBcCiBkbyB7IFwKICAgIChDaFApLT5UeENvbnRyb2xbM10gJj0gflNFVEJSRUFLOyBcCi0gICBzT3V0RFcoKENoUCktPkluZGV4QWRkciwqKERXb3JkX3QgKikmKENoUCktPlR4Q29udHJvbFswXSk7IFwKKyAgIG91dDMyKChDaFApLT5JbmRleEFkZHIsKENoUCktPlR4Q29udHJvbCk7IFwKIH0gd2hpbGUgKDApCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTQwMiw3ICszOTMsNyBAQAogI2RlZmluZSBzQ2xyRFRSKENoUCkgXAogZG8geyBcCiAgICAoQ2hQKS0+VHhDb250cm9sWzNdICY9IH5TRVRfRFRSOyBcCi0gICBzT3V0RFcoKENoUCktPkluZGV4QWRkciwqKERXb3JkX3QgKikmKENoUCktPlR4Q29udHJvbFswXSk7IFwKKyAgIG91dDMyKChDaFApLT5JbmRleEFkZHIsKENoUCktPlR4Q29udHJvbCk7IFwKIH0gd2hpbGUgKDApCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTQxNSw3ICs0MDYsNyBAQAogZG8geyBcCiAgICBpZiAoKENoUCktPnJ0c1RvZ2dsZSkgYnJlYWs7IFwKICAgIChDaFApLT5UeENvbnRyb2xbM10gJj0gflNFVF9SVFM7IFwKLSAgIHNPdXREVygoQ2hQKS0+SW5kZXhBZGRyLCooRFdvcmRfdCAqKSYoQ2hQKS0+VHhDb250cm9sWzBdKTsgXAorICAgb3V0MzIoKENoUCktPkluZGV4QWRkciwoQ2hQKS0+VHhDb250cm9sKTsgXAogfSB3aGlsZSAoMCkKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNDg5LDcgKzQ4MCw3IEBACiAjZGVmaW5lIHNEaXNDVFNGbG93Q3RsKENoUCkgXAogZG8geyBcCiAgICAoQ2hQKS0+VHhDb250cm9sWzJdICY9IH5DVFNGQ19FTjsgXAotICAgc091dERXKChDaFApLT5JbmRleEFkZHIsKihEV29yZF90ICopJihDaFApLT5UeENvbnRyb2xbMF0pOyBcCisgICBvdXQzMigoQ2hQKS0+SW5kZXhBZGRyLChDaFApLT5UeENvbnRyb2wpOyBcCiB9IHdoaWxlICgwKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC01MDEsNyArNDkyLDcgQEAKICNkZWZpbmUgc0Rpc0lYQU5ZKENoUCkgXAogZG8geyBcCiAgICAoQ2hQKS0+UlsweDBlXSA9IDB4ODY7IFwKLSAgIHNPdXREVygoQ2hQKS0+SW5kZXhBZGRyLCooRFdvcmRfdCAqKSYoQ2hQKS0+UlsweDBjXSk7IFwKKyAgIG91dDMyKChDaFApLT5JbmRleEFkZHIsJihDaFApLT5SWzB4MGNdKTsgXAogfSB3aGlsZSAoMCkKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNTE1LDcgKzUwNiw3IEBACiAjZGVmaW5lIHNEaXNQYXJpdHkoQ2hQKSBcCiBkbyB7IFwKICAgIChDaFApLT5UeENvbnRyb2xbMl0gJj0gflBBUklUWV9FTjsgXAotICAgc091dERXKChDaFApLT5JbmRleEFkZHIsKihEV29yZF90ICopJihDaFApLT5UeENvbnRyb2xbMF0pOyBcCisgICBvdXQzMigoQ2hQKS0+SW5kZXhBZGRyLChDaFApLT5UeENvbnRyb2wpOyBcCiB9IHdoaWxlICgwKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC01MjcsNyArNTE4LDcgQEAKICNkZWZpbmUgc0Rpc1JUU1RvZ2dsZShDaFApIFwKIGRvIHsgXAogICAgKENoUCktPlR4Q29udHJvbFsyXSAmPSB+UlRTVE9HX0VOOyBcCi0gICBzT3V0RFcoKENoUCktPkluZGV4QWRkciwqKERXb3JkX3QgKikmKENoUCktPlR4Q29udHJvbFswXSk7IFwKKyAgIG91dDMyKChDaFApLT5JbmRleEFkZHIsKENoUCktPlR4Q29udHJvbCk7IFwKICAgIChDaFApLT5ydHNUb2dnbGUgPSAwOyBcCiB9IHdoaWxlICgwKQogCkBAIC01NDAsNyArNTMxLDcgQEAKICNkZWZpbmUgc0Rpc1J4RklGTyhDaFApIFwKIGRvIHsgXAogICAgKENoUCktPlJbMHgzMl0gPSAweDBhOyBcCi0gICBzT3V0RFcoKENoUCktPkluZGV4QWRkciwqKERXb3JkX3QgKikmKENoUCktPlJbMHgzMF0pOyBcCisgICBvdXQzMigoQ2hQKS0+SW5kZXhBZGRyLCYoQ2hQKS0+UlsweDMwXSk7IFwKIH0gd2hpbGUgKDApCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTU2Nyw3ICs1NTgsNyBAQAogI2RlZmluZSBzRGlzVHJhbnNtaXQoQ2hQKSBcCiBkbyB7IFwKICAgIChDaFApLT5UeENvbnRyb2xbM10gJj0gflRYX0VOQUJMRTsgXAotICAgc091dERXKChDaFApLT5JbmRleEFkZHIsKihEV29yZF90ICopJihDaFApLT5UeENvbnRyb2xbMF0pOyBcCisgICBvdXQzMigoQ2hQKS0+SW5kZXhBZGRyLChDaFApLT5UeENvbnRyb2wpOyBcCiB9IHdoaWxlICgwKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC01NzksNyArNTcwLDcgQEAKICNkZWZpbmUgc0Rpc1R4U29mdEZsb3dDdGwoQ2hQKSBcCiBkbyB7IFwKICAgIChDaFApLT5SWzB4MDZdID0gMHg4YTsgXAotICAgc091dERXKChDaFApLT5JbmRleEFkZHIsKihEV29yZF90ICopJihDaFApLT5SWzB4MDRdKTsgXAorICAgb3V0MzIoKENoUCktPkluZGV4QWRkciwmKENoUCktPlJbMHgwNF0pOyBcCiB9IHdoaWxlICgwKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC02MDQsNyArNTk1LDcgQEAKICNkZWZpbmUgc0VuQ1RTRmxvd0N0bChDaFApIFwKIGRvIHsgXAogICAgKENoUCktPlR4Q29udHJvbFsyXSB8PSBDVFNGQ19FTjsgXAotICAgc091dERXKChDaFApLT5JbmRleEFkZHIsKihEV29yZF90ICopJihDaFApLT5UeENvbnRyb2xbMF0pOyBcCisgICBvdXQzMigoQ2hQKS0+SW5kZXhBZGRyLChDaFApLT5UeENvbnRyb2wpOyBcCiB9IHdoaWxlICgwKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC02MTYsNyArNjA3LDcgQEAKICNkZWZpbmUgc0VuSVhBTlkoQ2hQKSBcCiBkbyB7IFwKICAgIChDaFApLT5SWzB4MGVdID0gMHgyMTsgXAotICAgc091dERXKChDaFApLT5JbmRleEFkZHIsKihEV29yZF90ICopJihDaFApLT5SWzB4MGNdKTsgXAorICAgb3V0MzIoKENoUCktPkluZGV4QWRkciwmKENoUCktPlJbMHgwY10pOyBcCiB9IHdoaWxlICgwKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC02MzMsNyArNjI0LDcgQEAKICNkZWZpbmUgc0VuUGFyaXR5KENoUCkgXAogZG8geyBcCiAgICAoQ2hQKS0+VHhDb250cm9sWzJdIHw9IFBBUklUWV9FTjsgXAotICAgc091dERXKChDaFApLT5JbmRleEFkZHIsKihEV29yZF90ICopJihDaFApLT5UeENvbnRyb2xbMF0pOyBcCisgICBvdXQzMigoQ2hQKS0+SW5kZXhBZGRyLChDaFApLT5UeENvbnRyb2wpOyBcCiB9IHdoaWxlICgwKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC02NDcsMTAgKzYzOCwxMCBAQAogI2RlZmluZSBzRW5SVFNUb2dnbGUoQ2hQKSBcCiBkbyB7IFwKICAgIChDaFApLT5SeENvbnRyb2xbMl0gJj0gflJUU0ZDX0VOOyBcCi0gICBzT3V0RFcoKENoUCktPkluZGV4QWRkciwqKERXb3JkX3QgKikmKENoUCktPlJ4Q29udHJvbFswXSk7IFwKKyAgIG91dDMyKChDaFApLT5JbmRleEFkZHIsKENoUCktPlJ4Q29udHJvbCk7IFwKICAgIChDaFApLT5UeENvbnRyb2xbMl0gfD0gUlRTVE9HX0VOOyBcCiAgICAoQ2hQKS0+VHhDb250cm9sWzNdICY9IH5TRVRfUlRTOyBcCi0gICBzT3V0RFcoKENoUCktPkluZGV4QWRkciwqKERXb3JkX3QgKikmKENoUCktPlR4Q29udHJvbFswXSk7IFwKKyAgIG91dDMyKChDaFApLT5JbmRleEFkZHIsKENoUCktPlR4Q29udHJvbCk7IFwKICAgIChDaFApLT5ydHNUb2dnbGUgPSAxOyBcCiB9IHdoaWxlICgwKQogCkBAIC02NjMsNyArNjU0LDcgQEAKICNkZWZpbmUgc0VuUnhGSUZPKENoUCkgXAogZG8geyBcCiAgICAoQ2hQKS0+UlsweDMyXSA9IDB4MDg7IFwKLSAgIHNPdXREVygoQ2hQKS0+SW5kZXhBZGRyLCooRFdvcmRfdCAqKSYoQ2hQKS0+UlsweDMwXSk7IFwKKyAgIG91dDMyKChDaFApLT5JbmRleEFkZHIsJihDaFApLT5SWzB4MzBdKTsgXAogfSB3aGlsZSAoMCkKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNjg0LDcgKzY3NSw3IEBACiAjZGVmaW5lIHNFblJ4UHJvY2Vzc29yKENoUCkgXAogZG8geyBcCiAgICAoQ2hQKS0+UnhDb250cm9sWzJdIHw9IFJYUFJPQ19FTjsgXAotICAgc091dERXKChDaFApLT5JbmRleEFkZHIsKihEV29yZF90ICopJihDaFApLT5SeENvbnRyb2xbMF0pOyBcCisgICBvdXQzMigoQ2hQKS0+SW5kZXhBZGRyLChDaFApLT5SeENvbnRyb2wpOyBcCiB9IHdoaWxlICgwKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC03MDgsNyArNjk5LDcgQEAKICNkZWZpbmUgc0VuVHJhbnNtaXQoQ2hQKSBcCiBkbyB7IFwKICAgIChDaFApLT5UeENvbnRyb2xbM10gfD0gVFhfRU5BQkxFOyBcCi0gICBzT3V0RFcoKENoUCktPkluZGV4QWRkciwqKERXb3JkX3QgKikmKENoUCktPlR4Q29udHJvbFswXSk7IFwKKyAgIG91dDMyKChDaFApLT5JbmRleEFkZHIsKENoUCktPlR4Q29udHJvbCk7IFwKIH0gd2hpbGUgKDApCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTcyMCw3ICs3MTEsNyBAQAogI2RlZmluZSBzRW5UeFNvZnRGbG93Q3RsKENoUCkgXAogZG8geyBcCiAgICAoQ2hQKS0+UlsweDA2XSA9IDB4YzU7IFwKLSAgIHNPdXREVygoQ2hQKS0+SW5kZXhBZGRyLCooRFdvcmRfdCAqKSYoQ2hQKS0+UlsweDA0XSk7IFwKKyAgIG91dDMyKChDaFApLT5JbmRleEFkZHIsJihDaFApLT5SWzB4MDRdKTsgXAogfSB3aGlsZSAoMCkKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtOTI3LDcgKzkxOCw3IEBACiAjZGVmaW5lIHNTZW5kQnJlYWsoQ2hQKSBcCiBkbyB7IFwKICAgIChDaFApLT5UeENvbnRyb2xbM10gfD0gU0VUQlJFQUs7IFwKLSAgIHNPdXREVygoQ2hQKS0+SW5kZXhBZGRyLCooRFdvcmRfdCAqKSYoQ2hQKS0+VHhDb250cm9sWzBdKTsgXAorICAgb3V0MzIoKENoUCktPkluZGV4QWRkciwoQ2hQKS0+VHhDb250cm9sKTsgXAogfSB3aGlsZSAoMCkKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtOTQxLDcgKzkzMiw3IEBACiBkbyB7IFwKICAgIChDaFApLT5CYXVkRGl2WzJdID0gKEJ5dGVfdCkoRElWSVNPUik7IFwKICAgIChDaFApLT5CYXVkRGl2WzNdID0gKEJ5dGVfdCkoKERJVklTT1IpID4+IDgpOyBcCi0gICBzT3V0RFcoKENoUCktPkluZGV4QWRkciwqKERXb3JkX3QgKikmKENoUCktPkJhdWREaXZbMF0pOyBcCisgICBvdXQzMigoQ2hQKS0+SW5kZXhBZGRyLChDaFApLT5CYXVkRGl2KTsgXAogfSB3aGlsZSAoMCkKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtOTUzLDcgKzk0NCw3IEBACiAjZGVmaW5lIHNTZXREYXRhNyhDaFApIFwKIGRvIHsgXAogICAgKENoUCktPlR4Q29udHJvbFsyXSAmPSB+REFUQThCSVQ7IFwKLSAgIHNPdXREVygoQ2hQKS0+SW5kZXhBZGRyLCooRFdvcmRfdCAqKSYoQ2hQKS0+VHhDb250cm9sWzBdKTsgXAorICAgb3V0MzIoKENoUCktPkluZGV4QWRkciwoQ2hQKS0+VHhDb250cm9sKTsgXAogfSB3aGlsZSAoMCkKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtOTY1LDcgKzk1Niw3IEBACiAjZGVmaW5lIHNTZXREYXRhOChDaFApIFwKIGRvIHsgXAogICAgKENoUCktPlR4Q29udHJvbFsyXSB8PSBEQVRBOEJJVDsgXAotICAgc091dERXKChDaFApLT5JbmRleEFkZHIsKihEV29yZF90ICopJihDaFApLT5UeENvbnRyb2xbMF0pOyBcCisgICBvdXQzMigoQ2hQKS0+SW5kZXhBZGRyLChDaFApLT5UeENvbnRyb2wpOyBcCiB9IHdoaWxlICgwKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC05NzcsNyArOTY4LDcgQEAKICNkZWZpbmUgc1NldERUUihDaFApIFwKIGRvIHsgXAogICAgKENoUCktPlR4Q29udHJvbFszXSB8PSBTRVRfRFRSOyBcCi0gICBzT3V0RFcoKENoUCktPkluZGV4QWRkciwqKERXb3JkX3QgKikmKENoUCktPlR4Q29udHJvbFswXSk7IFwKKyAgIG91dDMyKChDaFApLT5JbmRleEFkZHIsKENoUCktPlR4Q29udHJvbCk7IFwKIH0gd2hpbGUgKDApCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTk5NCw3ICs5ODUsNyBAQAogI2RlZmluZSBzU2V0RXZlblBhcml0eShDaFApIFwKIGRvIHsgXAogICAgKENoUCktPlR4Q29udHJvbFsyXSB8PSBFVkVOX1BBUjsgXAotICAgc091dERXKChDaFApLT5JbmRleEFkZHIsKihEV29yZF90ICopJihDaFApLT5UeENvbnRyb2xbMF0pOyBcCisgICBvdXQzMigoQ2hQKS0+SW5kZXhBZGRyLChDaFApLT5UeENvbnRyb2wpOyBcCiB9IHdoaWxlICgwKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xMDExLDcgKzEwMDIsNyBAQAogI2RlZmluZSBzU2V0T2RkUGFyaXR5KENoUCkgXAogZG8geyBcCiAgICAoQ2hQKS0+VHhDb250cm9sWzJdICY9IH5FVkVOX1BBUjsgXAotICAgc091dERXKChDaFApLT5JbmRleEFkZHIsKihEV29yZF90ICopJihDaFApLT5UeENvbnRyb2xbMF0pOyBcCisgICBvdXQzMigoQ2hQKS0+SW5kZXhBZGRyLChDaFApLT5UeENvbnRyb2wpOyBcCiB9IHdoaWxlICgwKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xMDI0LDcgKzEwMTUsNyBAQAogZG8geyBcCiAgICBpZiAoKENoUCktPnJ0c1RvZ2dsZSkgYnJlYWs7IFwKICAgIChDaFApLT5UeENvbnRyb2xbM10gfD0gU0VUX1JUUzsgXAotICAgc091dERXKChDaFApLT5JbmRleEFkZHIsKihEV29yZF90ICopJihDaFApLT5UeENvbnRyb2xbMF0pOyBcCisgICBvdXQzMigoQ2hQKS0+SW5kZXhBZGRyLChDaFApLT5UeENvbnRyb2wpOyBcCiB9IHdoaWxlICgwKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xMDUwLDcgKzEwNDEsNyBAQAogZG8geyBcCiAgICAoQ2hQKS0+UnhDb250cm9sWzJdICY9IH5UUklHX01BU0s7IFwKICAgIChDaFApLT5SeENvbnRyb2xbMl0gfD0gTEVWRUw7IFwKLSAgIHNPdXREVygoQ2hQKS0+SW5kZXhBZGRyLCooRFdvcmRfdCAqKSYoQ2hQKS0+UnhDb250cm9sWzBdKTsgXAorICAgb3V0MzIoKENoUCktPkluZGV4QWRkciwoQ2hQKS0+UnhDb250cm9sKTsgXAogfSB3aGlsZSAoMCkKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTA2Miw3ICsxMDUzLDcgQEAKICNkZWZpbmUgc1NldFN0b3AxKENoUCkgXAogZG8geyBcCiAgICAoQ2hQKS0+VHhDb250cm9sWzJdICY9IH5TVE9QMjsgXAotICAgc091dERXKChDaFApLT5JbmRleEFkZHIsKihEV29yZF90ICopJihDaFApLT5UeENvbnRyb2xbMF0pOyBcCisgICBvdXQzMigoQ2hQKS0+SW5kZXhBZGRyLChDaFApLT5UeENvbnRyb2wpOyBcCiB9IHdoaWxlICgwKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xMDc0LDcgKzEwNjUsNyBAQAogI2RlZmluZSBzU2V0U3RvcDIoQ2hQKSBcCiBkbyB7IFwKICAgIChDaFApLT5UeENvbnRyb2xbMl0gfD0gU1RPUDI7IFwKLSAgIHNPdXREVygoQ2hQKS0+SW5kZXhBZGRyLCooRFdvcmRfdCAqKSYoQ2hQKS0+VHhDb250cm9sWzBdKTsgXAorICAgb3V0MzIoKENoUCktPkluZGV4QWRkciwoQ2hQKS0+VHhDb250cm9sKTsgXAogfSB3aGlsZSAoMCkKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTA4Nyw3ICsxMDc4LDcgQEAKICNkZWZpbmUgc1NldFR4WE9GRkNoYXIoQ2hQLENIKSBcCiBkbyB7IFwKICAgIChDaFApLT5SWzB4MDddID0gKENIKTsgXAotICAgc091dERXKChDaFApLT5JbmRleEFkZHIsKihEV29yZF90ICopJihDaFApLT5SWzB4MDRdKTsgXAorICAgb3V0MzIoKENoUCktPkluZGV4QWRkciwmKENoUCktPlJbMHgwNF0pOyBcCiB9IHdoaWxlICgwKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xMTAwLDcgKzEwOTEsNyBAQAogI2RlZmluZSBzU2V0VHhYT05DaGFyKENoUCxDSCkgXAogZG8geyBcCiAgICAoQ2hQKS0+UlsweDBiXSA9IChDSCk7IFwKLSAgIHNPdXREVygoQ2hQKS0+SW5kZXhBZGRyLCooRFdvcmRfdCAqKSYoQ2hQKS0+UlsweDA4XSk7IFwKKyAgIG91dDMyKChDaFApLT5JbmRleEFkZHIsJihDaFApLT5SWzB4MDhdKTsgXAogfSB3aGlsZSAoMCkKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTExMyw3ICsxMTA0LDcgQEAKICAgICAgICAgICB3aWxsIHJlc3RhcnQgYm90aCB0aGUgUnggcHJvY2Vzc29yIGFuZCBzb2Z0d2FyZSBpbnB1dCBmbG93IGNvbnRyb2wuCiAKICovCi0jZGVmaW5lIHNTdGFydFJ4UHJvY2Vzc29yKENoUCkgc091dERXKChDaFApLT5JbmRleEFkZHIsKihEV29yZF90ICopJihDaFApLT5SWzBdKQorI2RlZmluZSBzU3RhcnRSeFByb2Nlc3NvcihDaFApIG91dDMyKChDaFApLT5JbmRleEFkZHIsJihDaFApLT5SWzBdKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiBGdW5jdGlvbjogc1dyaXRlVHhCeXRlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9mc2xkbWEuYyBiL2RyaXZlcnMvZG1hL2ZzbGRtYS5jCmluZGV4IGFkMmY5MzguLjcyNjkyMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2ZzbGRtYS5jCisrKyBiL2RyaXZlcnMvZG1hL2ZzbGRtYS5jCkBAIC0xMjMsNiArMTIzLDExIEBACiAJcmV0dXJuIERNQV9JTihmc2xfY2hhbiwgJmZzbF9jaGFuLT5yZWdfYmFzZS0+bmRhciwgNjQpOwogfQogCitzdGF0aWMgdTMyIGdldF9iY3Ioc3RydWN0IGZzbF9kbWFfY2hhbiAqZnNsX2NoYW4pCit7CisJcmV0dXJuIERNQV9JTihmc2xfY2hhbiwgJmZzbF9jaGFuLT5yZWdfYmFzZS0+YmNyLCAzMik7Cit9CisKIHN0YXRpYyBpbnQgZG1hX2lzX2lkbGUoc3RydWN0IGZzbF9kbWFfY2hhbiAqZnNsX2NoYW4pCiB7CiAJdTMyIHNyID0gZ2V0X3NyKGZzbF9jaGFuKTsKQEAgLTQyNiw2ICs0MzEsOSBAQAogCW5ldy0+YXN5bmNfdHguY29va2llID0gLUVCVVNZOwogCW5ldy0+YXN5bmNfdHguYWNrID0gMDsKIAorCS8qIEluc2VydCB0aGUgbGluayBkZXNjcmlwdG9yIHRvIHRoZSBMRCByaW5nICovCisJbGlzdF9hZGRfdGFpbCgmbmV3LT5ub2RlLCAmbmV3LT5hc3luY190eC50eF9saXN0KTsKKwogCS8qIFNldCBFbmQtb2YtbGluayB0byB0aGUgbGFzdCBsaW5rIGRlc2NyaXB0b3Igb2YgbmV3IGxpc3QqLwogCXNldF9sZF9lb2woZnNsX2NoYW4sIG5ldyk7CiAKQEAgLTcwMSw2ICs3MDksMjMgQEAKIAlpZiAoc3RhdCAmIEZTTF9ETUFfU1JfVEUpCiAJCWRldl9lcnIoZnNsX2NoYW4tPmRldiwgIlRyYW5zZmVyIEVycm9yIVxuIik7CiAKKwkvKiBQcm9ncmFtbWluZyBFcnJvcgorCSAqIFRoZSBETUFfSU5URVJSVVBUIGFzeW5jX3R4IGlzIGEgTlVMTCB0cmFuc2Zlciwgd2hpY2ggd2lsbAorCSAqIHRyaWdlciBhIFBFIGludGVycnVwdC4KKwkgKi8KKwlpZiAoc3RhdCAmIEZTTF9ETUFfU1JfUEUpIHsKKwkJZGV2X2RiZyhmc2xfY2hhbi0+ZGV2LCAiZXZlbnQ6IFByb2dyYW1taW5nIEVycm9yIElOVFxuIik7CisJCWlmIChnZXRfYmNyKGZzbF9jaGFuKSA9PSAwKSB7CisJCQkvKiBCQ1IgcmVnaXN0ZXIgaXMgMCwgdGhpcyBpcyBhIERNQV9JTlRFUlJVUFQgYXN5bmNfdHguCisJCQkgKiBOb3csIHVwZGF0ZSB0aGUgY29tcGxldGVkIGNvb2tpZSwgYW5kIGNvbnRpbnVlIHRoZQorCQkJICogbmV4dCB1bmNvbXBsZXRlZCB0cmFuc2Zlci4KKwkJCSAqLworCQkJZnNsX2RtYV91cGRhdGVfY29tcGxldGVkX2Nvb2tpZShmc2xfY2hhbik7CisJCQlmc2xfY2hhbl94ZmVyX2xkX3F1ZXVlKGZzbF9jaGFuKTsKKwkJfQorCQlzdGF0ICY9IH5GU0xfRE1BX1NSX1BFOworCX0KKwogCS8qIElmIHRoZSBsaW5rIGRlc2NyaXB0b3Igc2VnbWVudCB0cmFuc2ZlciBmaW5pc2hlcywKIAkgKiB3ZSB3aWxsIHJlY3ljbGUgdGhlIHVzZWQgZGVzY3JpcHRvci4KIAkgKi8KQEAgLTg0MSw2ICs4NjYsMTEgQEAKIAl0eDMgPSBmc2xfZG1hX3ByZXBfbWVtY3B5KGNoYW4sIGRtYV9kZXN0LCBkbWFfc3JjLCB0ZXN0X3NpemUgLyA0LCAwKTsKIAlhc3luY190eF9hY2sodHgzKTsKIAorCS8qIEludGVycnVwdCB0eCB0ZXN0ICovCisJdHgxID0gZnNsX2RtYV9wcmVwX2ludGVycnVwdChjaGFuKTsKKwlhc3luY190eF9hY2sodHgxKTsKKwljb29raWUgPSBmc2xfZG1hX3R4X3N1Ym1pdCh0eDEpOworCiAJLyogVGVzdCBleGNoYW5naW5nIHRoZSBwcmVwYXJlZCB0eCBzb3J0ICovCiAJY29va2llID0gZnNsX2RtYV90eF9zdWJtaXQodHgzKTsKIAljb29raWUgPSBmc2xfZG1hX3R4X3N1Ym1pdCh0eDIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvZnNsZG1hLmggYi9kcml2ZXJzL2RtYS9mc2xkbWEuaAppbmRleCBiYTc4YzQyLi5mZGRkNmFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9mc2xkbWEuaAorKysgYi9kcml2ZXJzL2RtYS9mc2xkbWEuaApAQCAtNDAsNiArNDAsNyBAQAogI2RlZmluZSBGU0xfRE1BX01SX0VPVElFCTB4MDAwMDAwODAKIAogI2RlZmluZSBGU0xfRE1BX1NSX0NICQkweDAwMDAwMDIwCisjZGVmaW5lIEZTTF9ETUFfU1JfUEUJCTB4MDAwMDAwMTAKICNkZWZpbmUgRlNMX0RNQV9TUl9DQgkJMHgwMDAwMDAwNAogI2RlZmluZSBGU0xfRE1BX1NSX1RFCQkweDAwMDAwMDgwCiAjZGVmaW5lIEZTTF9ETUFfU1JfRU9TSQkJMHgwMDAwMDAwMgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9LY29uZmlnIGIvZHJpdmVycy9maXJld2lyZS9LY29uZmlnCmluZGV4IGZlOWU3NjguLjI1YmRjMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvS2NvbmZpZworKysgYi9kcml2ZXJzL2ZpcmV3aXJlL0tjb25maWcKQEAgLTEsNSArMSwzIEBACi0jIC0qLSBzaGVsbC1zY3JpcHQgLSotCi0KIGNvbW1lbnQgIkFuIGFsdGVybmF0aXZlIEZpcmVXaXJlIHN0YWNrIGlzIGF2YWlsYWJsZSB3aXRoIEVYUEVSSU1FTlRBTD15IgogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMPW4KIApAQCAtMjEsMjcgKzE5LDcgQEAKICAgICAgICAgICBOT1RFOgogCiAJICBZb3Ugc2hvdWxkIG9ubHkgYnVpbGQgT05FIG9mIHRoZSBzdGFja3MsIHVubGVzcyB5b3UgUkVBTExZIGtub3cgd2hhdAotCSAgeW91IGFyZSBkb2luZy4gIElmIHlvdSBpbnN0YWxsIGJvdGgsIHlvdSBzaG91bGQgY29uZmlndXJlIHRoZW0gb25seSBhcwotCSAgbW9kdWxlcyByYXRoZXIgdGhhbiBsaW5rIHRoZW0gc3RhdGljYWxseSwgYW5kIHlvdSBzaG91bGQgYmxhY2tsaXN0IG9uZQotCSAgb2YgdGhlIGNvbmN1cnJlbnQgbG93LWxldmVsIGRyaXZlcnMgaW4gL2V0Yy9tb2Rwcm9iZS5jb25mLiAgQWRkIGVpdGhlcgotCi0JICAgICAgYmxhY2tsaXN0IGZpcmV3aXJlLW9oY2kKLQkgIG9yCi0JICAgICAgYmxhY2tsaXN0IG9oY2kxMzk0Ci0KLQkgIHRoZXJlIGRlcGVuZGluZyBvbiB3aGljaCBkcml2ZXIgeW91IERPTidUIHdhbnQgdG8gaGF2ZSBhdXRvLWxvYWRlZC4KLQkgIFlvdSBjYW4gb3B0aW9uYWxseSBkbyB0aGUgc2FtZSB3aXRoIHRoZSBvdGhlciBJRUVFIDEzOTQvIEZpcmVXaXJlCi0JICBkcml2ZXJzLgotCi0JICBJZiB5b3UgaGF2ZSBhbiBvbGQgbW9kcHJvYmUgd2hpY2ggZG9lc24ndCBpbXBsZW1lbnQgdGhlIGJsYWNrbGlzdAotCSAgZGlyZWN0aXZlLCB1c2UgZWl0aGVyCi0KLQkgICAgICAgaW5zdGFsbCBmaXJld2lyZS1vaGNpIC9iaW4vdHJ1ZQotCSAgb3IKLQkgICAgICAgaW5zdGFsbCBvaGNpMTM5NCAvYmluL3RydWUKLQotCSAgYW5kIHNvIG9uLCBkZXBlbmRpbmcgb24gd2hpY2ggbW9kdWxlcyB5b3UgRE9OJ3Qgd2FudCB0byBoYXZlCi0JICBhdXRvLWxvYWRlZC4KKwkgIHlvdSBhcmUgZG9pbmcuCiAKIGNvbmZpZyBGSVJFV0lSRV9PSENJCiAJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIE9IQ0kgRmlyZVdpcmUgaG9zdCBjb250cm9sbGVycyIKQEAgLTU3LDggKzM1LDI0IEBACiAKICAgICAgICAgICBOT1RFOgogCi0JICBJZiB5b3UgYWxzbyBidWlsZCBvaGNpMTM5NCBvZiB0aGUgY2xhc3NpYyBzdGFjaywgYmxhY2tsaXN0IGVpdGhlcgotCSAgb2hjaTEzOTQgb3IgZmlyZXdpcmUtb2hjaSB0byBsZXQgaG90cGx1ZyBsb2FkIG9ubHkgdGhlIGRlc2lyZWQgZHJpdmVyLgorCSAgWW91IHNob3VsZCBvbmx5IGJ1aWxkIG9oY2kxMzk0IG9yIGZpcmV3aXJlLW9oY2ksIGJ1dCBub3QgYm90aC4KKwkgIElmIHlvdSBuZXZlcnRoZWxlc3Mgd2FudCB0byBpbnN0YWxsIGJvdGgsIHlvdSBzaG91bGQgY29uZmlndXJlIHRoZW0KKwkgIG9ubHkgYXMgbW9kdWxlcyBhbmQgYmxhY2tsaXN0IHRoZSBkcml2ZXIocykgd2hpY2ggeW91IGRvbid0IHdhbnQgdG8KKwkgIGhhdmUgYXV0by1sb2FkZWQuICBBZGQgZWl0aGVyCisKKwkgICAgICBibGFja2xpc3QgZmlyZXdpcmUtb2hjaQorCSAgb3IKKwkgICAgICBibGFja2xpc3Qgb2hjaTEzOTQKKwkgICAgICBibGFja2xpc3QgdmlkZW8xMzk0CisJICAgICAgYmxhY2tsaXN0IGR2MTM5NAorCisJICB0byAvZXRjL21vZHByb2JlLmNvbmYgb3IgL2V0Yy9tb2Rwcm9iZS5kLyogYW5kIHVwZGF0ZSBtb2Rwcm9iZS5jb25mCisJICBkZXBlbmRpbmcgb24geW91ciBkaXN0cmlidXRpb24uICBUaGUgbGF0dGVyIHR3byBtb2R1bGVzIHNob3VsZCBiZQorCSAgYmxhY2tsaXN0ZWQgdG9nZXRoZXIgd2l0aCBvaGNpMTM5NCBiZWNhdXNlIHRoZXkgZGVwZW5kIG9uIG9oY2kxMzk0LgorCisJICBJZiB5b3UgaGF2ZSBhbiBvbGQgbW9kcHJvYmUgd2hpY2ggZG9lc24ndCBpbXBsZW1lbnQgdGhlIGJsYWNrbGlzdAorCSAgZGlyZWN0aXZlLCB1c2UgImluc3RhbGwgbW9kdWxlbmFtZSAvYmluL3RydWUiIGZvciB0aGUgbW9kdWxlcyB0byBiZQorCSAgYmxhY2tsaXN0ZWQuCiAKIGNvbmZpZyBGSVJFV0lSRV9TQlAyCiAJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIHN0b3JhZ2UgZGV2aWNlcyAoU0JQLTIgcHJvdG9jb2wgZHJpdmVyKSIKQEAgLTc1LDkgKzY5LDMgQEAKIAogCSAgWW91IHNob3VsZCBhbHNvIGVuYWJsZSBzdXBwb3J0IGZvciBkaXNrcywgQ0QtUk9NcywgZXRjLiBpbiB0aGUgU0NTSQogCSAgY29uZmlndXJhdGlvbiBzZWN0aW9uLgotCi0gICAgICAgICAgTk9URToKLQotCSAgSWYgeW91IGFsc28gYnVpbGQgc2JwMiBvZiB0aGUgY2xhc3NpYyBzdGFjaywgYmxhY2tsaXN0IGVpdGhlciBzYnAyCi0JICBvciBmaXJld2lyZS1zYnAyIHRvIGxldCBob3RwbHVnIGxvYWQgb25seSB0aGUgZGVzaXJlZCBkcml2ZXIuCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvZnctb2hjaS5jIGIvZHJpdmVycy9maXJld2lyZS9mdy1vaGNpLmMKaW5kZXggN2ViYWQzYy4uOTk2ZDYxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9mdy1vaGNpLmMKKysrIGIvZHJpdmVycy9maXJld2lyZS9mdy1vaGNpLmMKQEAgLTMzLDYgKzMzLDEwIEBACiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKKyNpZmRlZiBDT05GSUdfUFBDX1BNQUMKKyNpbmNsdWRlIDxhc20vcG1hY19mZWF0dXJlLmg+CisjZW5kaWYKKwogI2luY2x1ZGUgImZ3LW9oY2kuaCIKICNpbmNsdWRlICJmdy10cmFuc2FjdGlvbi5oIgogCkBAIC0xNzUsNiArMTc5LDcgQEAKIAlpbnQgZ2VuZXJhdGlvbjsKIAlpbnQgcmVxdWVzdF9nZW5lcmF0aW9uOwogCXUzMiBidXNfc2Vjb25kczsKKwlib29sIG9sZF91bmlub3J0aDsKIAogCS8qCiAJICogU3BpbmxvY2sgZm9yIGFjY2Vzc2luZyBmd19vaGNpIGRhdGEuICBOZXZlciBjYWxsIG91dCBvZgpAQCAtMjc2LDE5ICsyODEsMTMgQEAKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjdHgtPm9oY2ktPmNhcmQuZGV2aWNlOwogCXN0cnVjdCBhcl9idWZmZXIgKmFiOwotCWRtYV9hZGRyX3QgYWJfYnVzOworCWRtYV9hZGRyX3QgdW5pbml0aWFsaXplZF92YXIoYWJfYnVzKTsKIAlzaXplX3Qgb2Zmc2V0OwogCi0JYWIgPSAoc3RydWN0IGFyX2J1ZmZlciAqKSBfX2dldF9mcmVlX3BhZ2UoR0ZQX0FUT01JQyk7CisJYWIgPSBkbWFfYWxsb2NfY29oZXJlbnQoZGV2LCBQQUdFX1NJWkUsICZhYl9idXMsIEdGUF9BVE9NSUMpOwogCWlmIChhYiA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWFiX2J1cyA9IGRtYV9tYXBfc2luZ2xlKGRldiwgYWIsIFBBR0VfU0laRSwgRE1BX0JJRElSRUNUSU9OQUwpOwotCWlmIChkbWFfbWFwcGluZ19lcnJvcihhYl9idXMpKSB7Ci0JCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgYWIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KIAltZW1zZXQoJmFiLT5kZXNjcmlwdG9yLCAwLCBzaXplb2YoYWItPmRlc2NyaXB0b3IpKTsKIAlhYi0+ZGVzY3JpcHRvci5jb250cm9sICAgICAgICA9IGNwdV90b19sZTE2KERFU0NSSVBUT1JfSU5QVVRfTU9SRSB8CiAJCQkJCQkgICAgREVTQ1JJUFRPUl9TVEFUVVMgfApAQCAtMjk5LDggKzI5OCw2IEBACiAJYWItPmRlc2NyaXB0b3IucmVzX2NvdW50ICAgICAgPSBjcHVfdG9fbGUxNihQQUdFX1NJWkUgLSBvZmZzZXQpOwogCWFiLT5kZXNjcmlwdG9yLmJyYW5jaF9hZGRyZXNzID0gMDsKIAotCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGRldiwgYWJfYnVzLCBQQUdFX1NJWkUsIERNQV9CSURJUkVDVElPTkFMKTsKLQogCWN0eC0+bGFzdF9idWZmZXItPmRlc2NyaXB0b3IuYnJhbmNoX2FkZHJlc3MgPSBjcHVfdG9fbGUzMihhYl9idXMgfCAxKTsKIAljdHgtPmxhc3RfYnVmZmVyLT5uZXh0ID0gYWI7CiAJY3R4LT5sYXN0X2J1ZmZlciA9IGFiOwpAQCAtMzExLDE1ICszMDgsMjIgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2lmIGRlZmluZWQoQ09ORklHX1BQQ19QTUFDKSAmJiBkZWZpbmVkKENPTkZJR19QUEMzMikKKyNkZWZpbmUgY29uZF9sZTMyX3RvX2NwdSh2KSBcCisJKG9oY2ktPm9sZF91bmlub3J0aCA/IChfX2ZvcmNlIF9fdTMyKSh2KSA6IGxlMzJfdG9fY3B1KHYpKQorI2Vsc2UKKyNkZWZpbmUgY29uZF9sZTMyX3RvX2NwdSh2KSBsZTMyX3RvX2NwdSh2KQorI2VuZGlmCisKIHN0YXRpYyBfX2xlMzIgKmhhbmRsZV9hcl9wYWNrZXQoc3RydWN0IGFyX2NvbnRleHQgKmN0eCwgX19sZTMyICpidWZmZXIpCiB7CiAJc3RydWN0IGZ3X29oY2kgKm9oY2kgPSBjdHgtPm9oY2k7CiAJc3RydWN0IGZ3X3BhY2tldCBwOwogCXUzMiBzdGF0dXMsIGxlbmd0aCwgdGNvZGU7CiAKLQlwLmhlYWRlclswXSA9IGxlMzJfdG9fY3B1KGJ1ZmZlclswXSk7Ci0JcC5oZWFkZXJbMV0gPSBsZTMyX3RvX2NwdShidWZmZXJbMV0pOwotCXAuaGVhZGVyWzJdID0gbGUzMl90b19jcHUoYnVmZmVyWzJdKTsKKwlwLmhlYWRlclswXSA9IGNvbmRfbGUzMl90b19jcHUoYnVmZmVyWzBdKTsKKwlwLmhlYWRlclsxXSA9IGNvbmRfbGUzMl90b19jcHUoYnVmZmVyWzFdKTsKKwlwLmhlYWRlclsyXSA9IGNvbmRfbGUzMl90b19jcHUoYnVmZmVyWzJdKTsKIAogCXRjb2RlID0gKHAuaGVhZGVyWzBdID4+IDQpICYgMHgwZjsKIAlzd2l0Y2ggKHRjb2RlKSB7CkBAIC0zMzEsNyArMzM1LDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFRDT0RFX1JFQURfQkxPQ0tfUkVRVUVTVCA6Ci0JCXAuaGVhZGVyWzNdID0gbGUzMl90b19jcHUoYnVmZmVyWzNdKTsKKwkJcC5oZWFkZXJbM10gPSBjb25kX2xlMzJfdG9fY3B1KGJ1ZmZlclszXSk7CiAJCXAuaGVhZGVyX2xlbmd0aCA9IDE2OwogCQlwLnBheWxvYWRfbGVuZ3RoID0gMDsKIAkJYnJlYWs7CkBAIC0zNDAsNyArMzQ0LDcgQEAKIAljYXNlIFRDT0RFX1JFQURfQkxPQ0tfUkVTUE9OU0U6CiAJY2FzZSBUQ09ERV9MT0NLX1JFUVVFU1Q6CiAJY2FzZSBUQ09ERV9MT0NLX1JFU1BPTlNFOgotCQlwLmhlYWRlclszXSA9IGxlMzJfdG9fY3B1KGJ1ZmZlclszXSk7CisJCXAuaGVhZGVyWzNdID0gY29uZF9sZTMyX3RvX2NwdShidWZmZXJbM10pOwogCQlwLmhlYWRlcl9sZW5ndGggPSAxNjsKIAkJcC5wYXlsb2FkX2xlbmd0aCA9IHAuaGVhZGVyWzNdID4+IDE2OwogCQlicmVhazsKQEAgLTM1Nyw3ICszNjEsNyBAQAogCiAJLyogRklYTUU6IFdoYXQgdG8gZG8gYWJvdXQgZXZ0XyogZXJyb3JzPyAqLwogCWxlbmd0aCA9IChwLmhlYWRlcl9sZW5ndGggKyBwLnBheWxvYWRfbGVuZ3RoICsgMykgLyA0OwotCXN0YXR1cyA9IGxlMzJfdG9fY3B1KGJ1ZmZlcltsZW5ndGhdKTsKKwlzdGF0dXMgPSBjb25kX2xlMzJfdG9fY3B1KGJ1ZmZlcltsZW5ndGhdKTsKIAogCXAuYWNrICAgICAgICA9ICgoc3RhdHVzID4+IDE2KSAmIDB4MWYpIC0gMTY7CiAJcC5zcGVlZCAgICAgID0gKHN0YXR1cyA+PiAyMSkgJiAweDc7CkBAIC0zNzUsNyArMzc5LDcgQEAKIAkgKi8KIAogCWlmIChwLmFjayArIDE2ID09IDB4MDkpCi0JCW9oY2ktPnJlcXVlc3RfZ2VuZXJhdGlvbiA9IChidWZmZXJbMl0gPj4gMTYpICYgMHhmZjsKKwkJb2hjaS0+cmVxdWVzdF9nZW5lcmF0aW9uID0gKHAuaGVhZGVyWzJdID4+IDE2KSAmIDB4ZmY7CiAJZWxzZSBpZiAoY3R4ID09ICZvaGNpLT5hcl9yZXF1ZXN0X2N0eCkKIAkJZndfY29yZV9oYW5kbGVfcmVxdWVzdCgmb2hjaS0+Y2FyZCwgJnApOwogCWVsc2UKQEAgLTM5Nyw2ICs0MDEsNyBAQAogCiAJaWYgKGQtPnJlc19jb3VudCA9PSAwKSB7CiAJCXNpemVfdCBzaXplLCByZXN0LCBvZmZzZXQ7CisJCWRtYV9hZGRyX3QgYnVmZmVyX2J1czsKIAogCQkvKgogCQkgKiBUaGlzIGRlc2NyaXB0b3IgaXMgZmluaXNoZWQgYW5kIHdlIG1heSBoYXZlIGEKQEAgLTQwNSw5ICs0MTAsNyBAQAogCQkgKi8KIAogCQlvZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgYXJfYnVmZmVyLCBkYXRhKTsKLQkJZG1hX3VubWFwX3NpbmdsZShvaGNpLT5jYXJkLmRldmljZSwKLQkJCWxlMzJfdG9fY3B1KGFiLT5kZXNjcmlwdG9yLmRhdGFfYWRkcmVzcykgLSBvZmZzZXQsCi0JCQlQQUdFX1NJWkUsIERNQV9CSURJUkVDVElPTkFMKTsKKwkJYnVmZmVyX2J1cyA9IGxlMzJfdG9fY3B1KGFiLT5kZXNjcmlwdG9yLmRhdGFfYWRkcmVzcykgLSBvZmZzZXQ7CiAKIAkJYnVmZmVyID0gYWI7CiAJCWFiID0gYWItPm5leHQ7CkBAIC00MjMsNyArNDI2LDggQEAKIAkJd2hpbGUgKGJ1ZmZlciA8IGVuZCkKIAkJCWJ1ZmZlciA9IGhhbmRsZV9hcl9wYWNrZXQoY3R4LCBidWZmZXIpOwogCi0JCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylidWZmZXIpOworCQlkbWFfZnJlZV9jb2hlcmVudChvaGNpLT5jYXJkLmRldmljZSwgUEFHRV9TSVpFLAorCQkJCSAgYnVmZmVyLCBidWZmZXJfYnVzKTsKIAkJYXJfY29udGV4dF9hZGRfcGFnZShjdHgpOwogCX0gZWxzZSB7CiAJCWJ1ZmZlciA9IGN0eC0+cG9pbnRlcjsKQEAgLTUzMiw3ICs1MzYsNyBAQAogY29udGV4dF9hZGRfYnVmZmVyKHN0cnVjdCBjb250ZXh0ICpjdHgpCiB7CiAJc3RydWN0IGRlc2NyaXB0b3JfYnVmZmVyICpkZXNjOwotCWRtYV9hZGRyX3QgYnVzX2FkZHI7CisJZG1hX2FkZHJfdCB1bmluaXRpYWxpemVkX3ZhcihidXNfYWRkcik7CiAJaW50IG9mZnNldDsKIAogCS8qCkBAIC0xMDIyLDEzICsxMDI2LDE0IEBACiAJICovCiAKIAlzZWxmX2lkX2NvdW50ID0gKHJlZ19yZWFkKG9oY2ksIE9IQ0kxMzk0X1NlbGZJRENvdW50KSA+PiAzKSAmIDB4M2ZmOwotCWdlbmVyYXRpb24gPSAobGUzMl90b19jcHUob2hjaS0+c2VsZl9pZF9jcHVbMF0pID4+IDE2KSAmIDB4ZmY7CisJZ2VuZXJhdGlvbiA9IChjb25kX2xlMzJfdG9fY3B1KG9oY2ktPnNlbGZfaWRfY3B1WzBdKSA+PiAxNikgJiAweGZmOwogCXJtYigpOwogCiAJZm9yIChpID0gMSwgaiA9IDA7IGogPCBzZWxmX2lkX2NvdW50OyBpICs9IDIsIGorKykgewogCQlpZiAob2hjaS0+c2VsZl9pZF9jcHVbaV0gIT0gfm9oY2ktPnNlbGZfaWRfY3B1W2kgKyAxXSkKIAkJCWZ3X2Vycm9yKCJpbmNvbnNpc3RlbnQgc2VsZiBJRHNcbiIpOwotCQlvaGNpLT5zZWxmX2lkX2J1ZmZlcltqXSA9IGxlMzJfdG9fY3B1KG9oY2ktPnNlbGZfaWRfY3B1W2ldKTsKKwkJb2hjaS0+c2VsZl9pZF9idWZmZXJbal0gPQorCQkJCWNvbmRfbGUzMl90b19jcHUob2hjaS0+c2VsZl9pZF9jcHVbaV0pOwogCX0KIAlybWIoKTsKIApAQCAtMTMxNiw3ICsxMzIxLDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXR2YWwgPSAtRUJVU1k7CiAJX19iZTMyICpuZXh0X2NvbmZpZ19yb207Ci0JZG1hX2FkZHJfdCBuZXh0X2NvbmZpZ19yb21fYnVzOworCWRtYV9hZGRyX3QgdW5pbml0aWFsaXplZF92YXIobmV4dF9jb25maWdfcm9tX2J1cyk7CiAKIAlvaGNpID0gZndfb2hjaShjYXJkKTsKIApAQCAtMTQ4Nyw3ICsxNDkyLDcgQEAKIAl2b2lkICpwLCAqZW5kOwogCWludCBpOwogCi0JaWYgKGRiLT5maXJzdF9yZXNfY291bnQgPiAwICYmIGRiLT5zZWNvbmRfcmVzX2NvdW50ID4gMCkgeworCWlmIChkYi0+Zmlyc3RfcmVzX2NvdW50ICE9IDAgJiYgZGItPnNlY29uZF9yZXNfY291bnQgIT0gMCkgewogCQlpZiAoY3R4LT5leGNlc3NfYnl0ZXMgPD0gbGUxNl90b19jcHUoZGItPnNlY29uZF9yZXFfY291bnQpKSB7CiAJCQkvKiBUaGlzIGRlc2NyaXB0b3IgaXNuJ3QgZG9uZSB5ZXQsIHN0b3AgaXRlcmF0aW9uLiAqLwogCQkJcmV0dXJuIDA7CkBAIC0xNTEzLDcgKzE1MTgsNyBAQAogCQltZW1jcHkoY3R4LT5oZWFkZXIgKyBpICsgNCwgcCArIDgsIGN0eC0+YmFzZS5oZWFkZXJfc2l6ZSAtIDQpOwogCQlpICs9IGN0eC0+YmFzZS5oZWFkZXJfc2l6ZTsKIAkJY3R4LT5leGNlc3NfYnl0ZXMgKz0KLQkJCShsZTMyX3RvX2NwdSgqKHUzMiAqKShwICsgNCkpID4+IDE2KSAmIDB4ZmZmZjsKKwkJCShsZTMyX3RvX2NwdSgqKF9fbGUzMiAqKShwICsgNCkpID4+IDE2KSAmIDB4ZmZmZjsKIAkJcCArPSBjdHgtPmJhc2UuaGVhZGVyX3NpemUgKyA0OwogCX0KIAljdHgtPmhlYWRlcl9sZW5ndGggPSBpOwpAQCAtMjA0OCw2ICsyMDUzLDE4IEBACiAJaW50IGVycjsKIAlzaXplX3Qgc2l6ZTsKIAorI2lmZGVmIENPTkZJR19QUENfUE1BQworCS8qIE5lY2Vzc2FyeSBvbiBzb21lIG1hY2hpbmVzIGlmIGZ3LW9oY2kgd2FzIGxvYWRlZC8gdW5sb2FkZWQgYmVmb3JlICovCisJaWYgKG1hY2hpbmVfaXMocG93ZXJtYWMpKSB7CisJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZuID0gcGNpX2RldmljZV90b19PRl9ub2RlKGRldik7CisKKwkJaWYgKG9mbikgeworCQkJcG1hY19jYWxsX2ZlYXR1cmUoUE1BQ19GVFJfMTM5NF9DQUJMRV9QT1dFUiwgb2ZuLCAwLCAxKTsKKwkJCXBtYWNfY2FsbF9mZWF0dXJlKFBNQUNfRlRSXzEzOTRfRU5BQkxFLCBvZm4sIDAsIDEpOworCQl9CisJfQorI2VuZGlmIC8qIENPTkZJR19QUENfUE1BQyAqLworCiAJb2hjaSA9IGt6YWxsb2Moc2l6ZW9mKCpvaGNpKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKG9oY2kgPT0gTlVMTCkgewogCQlmd19lcnJvcigiQ291bGQgbm90IG1hbGxvYyBmd19vaGNpIGRhdGEuXG4iKTsKQEAgLTIwNjYsNiArMjA4MywxMCBAQAogCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBPSENJMTM5NF9QQ0lfSENJX0NvbnRyb2wsIDApOwogCXBjaV9zZXRfZHJ2ZGF0YShkZXYsIG9oY2kpOwogCisjaWYgZGVmaW5lZChDT05GSUdfUFBDX1BNQUMpICYmIGRlZmluZWQoQ09ORklHX1BQQzMyKQorCW9oY2ktPm9sZF91bmlub3J0aCA9IGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfQVBQTEUgJiYKKwkJCSAgICAgZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9BUFBMRV9VTklfTl9GVzsKKyNlbmRpZgogCXNwaW5fbG9ja19pbml0KCZvaGNpLT5sb2NrKTsKIAogCXRhc2tsZXRfaW5pdCgmb2hjaS0+YnVzX3Jlc2V0X3Rhc2tsZXQsCkBAIC0yMTgyLDYgKzIyMDMsMTkgQEAKIAlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKIAlmd19jYXJkX3B1dCgmb2hjaS0+Y2FyZCk7CiAKKyNpZmRlZiBDT05GSUdfUFBDX1BNQUMKKwkvKiBPbiBVbmlOb3J0aCwgcG93ZXIgZG93biB0aGUgY2FibGUgYW5kIHR1cm4gb2ZmIHRoZSBjaGlwIGNsb2NrCisJICogdG8gc2F2ZSBwb3dlciBvbiBsYXB0b3BzICovCisJaWYgKG1hY2hpbmVfaXMocG93ZXJtYWMpKSB7CisJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZuID0gcGNpX2RldmljZV90b19PRl9ub2RlKGRldik7CisKKwkJaWYgKG9mbikgeworCQkJcG1hY19jYWxsX2ZlYXR1cmUoUE1BQ19GVFJfMTM5NF9FTkFCTEUsIG9mbiwgMCwgMCk7CisJCQlwbWFjX2NhbGxfZmVhdHVyZShQTUFDX0ZUUl8xMzk0X0NBQkxFX1BPV0VSLCBvZm4sIDAsIDApOworCQl9CisJfQorI2VuZGlmIC8qIENPTkZJR19QUENfUE1BQyAqLworCiAJZndfbm90aWZ5KCJSZW1vdmVkIGZ3LW9oY2kgZGV2aWNlLlxuIik7CiB9CiAKQEAgLTIyMDIsNiArMjIzNiwxNiBAQAogCWlmIChlcnIpCiAJCWZ3X2Vycm9yKCJwY2lfc2V0X3Bvd2VyX3N0YXRlIGZhaWxlZCB3aXRoICVkXG4iLCBlcnIpOwogCisvKiBQb3dlck1hYyBzdXNwZW5kIGNvZGUgY29tZXMgbGFzdCAqLworI2lmZGVmIENPTkZJR19QUENfUE1BQworCWlmIChtYWNoaW5lX2lzKHBvd2VybWFjKSkgeworCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mbiA9IHBjaV9kZXZpY2VfdG9fT0Zfbm9kZShwZGV2KTsKKworCQlpZiAob2ZuKQorCQkJcG1hY19jYWxsX2ZlYXR1cmUoUE1BQ19GVFJfMTM5NF9FTkFCTEUsIG9mbiwgMCwgMCk7CisJfQorI2VuZGlmIC8qIENPTkZJR19QUENfUE1BQyAqLworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIyMTAsNiArMjI1NCwxNiBAQAogCXN0cnVjdCBmd19vaGNpICpvaGNpID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCWludCBlcnI7CiAKKy8qIFBvd2VyTWFjIHJlc3VtZSBjb2RlIGNvbWVzIGZpcnN0ICovCisjaWZkZWYgQ09ORklHX1BQQ19QTUFDCisJaWYgKG1hY2hpbmVfaXMocG93ZXJtYWMpKSB7CisJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZuID0gcGNpX2RldmljZV90b19PRl9ub2RlKHBkZXYpOworCisJCWlmIChvZm4pCisJCQlwbWFjX2NhbGxfZmVhdHVyZShQTUFDX0ZUUl8xMzk0X0VOQUJMRSwgb2ZuLCAwLCAxKTsKKwl9CisjZW5kaWYgLyogQ09ORklHX1BQQ19QTUFDICovCisKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CiAJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CiAJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXNicDIuYyBiL2RyaXZlcnMvZmlyZXdpcmUvZnctc2JwMi5jCmluZGV4IDAzMDY5YTQuLjYyYjRlNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvZnctc2JwMi5jCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvZnctc2JwMi5jCkBAIC0xNzMsNiArMTczLDcgQEAKICNkZWZpbmUgU0JQMl9PUkJfVElNRU9VVAkJMjAwMFUJLyogVGltZW91dCBpbiBtcyAqLwogI2RlZmluZSBTQlAyX09SQl9OVUxMCQkJMHg4MDAwMDAwMAogI2RlZmluZSBTQlAyX01BWF9TR19FTEVNRU5UX0xFTkdUSAkweGYwMDAKKyNkZWZpbmUgU0JQMl9SRVRSWV9MSU1JVAkJMHhmCS8qIDE1IHJldHJpZXMgKi8KIAogI2RlZmluZSBTQlAyX0RJUkVDVElPTl9UT19NRURJQQkJMHgwCiAjZGVmaW5lIFNCUDJfRElSRUNUSU9OX0ZST01fTUVESUEJMHgxCkBAIC0zMzAsNiArMzMxLDExIEBACiAJCS5tb2RlbAkJCT0gfjAsCiAJCS53b3JrYXJvdW5kcwkJPSBTQlAyX1dPUktBUk9VTkRfMTI4S19NQVhfVFJBTlMsCiAJfSwKKwkvKiBEYXRhZmFiIE1EMi1GVzIgd2l0aCBTeW1iaW9zL0xTSUxvZ2ljIFNZTTEzRlc1MDAgYnJpZGdlICovIHsKKwkJLmZpcm13YXJlX3JldmlzaW9uCT0gMHgwMDI2MDAsCisJCS5tb2RlbAkJCT0gfjAsCisJCS53b3JrYXJvdW5kcwkJPSBTQlAyX1dPUktBUk9VTkRfMTI4S19NQVhfVFJBTlMsCisJfSwKIAogCS8qCiAJICogVGhlcmUgYXJlIGlQb2RzICgybmQgZ2VuLCAzcmQgZ2VuKSB3aXRoIG1vZGVsX2lkID09IDAsIGJ1dApAQCAtODEyLDYgKzgxOCwzMCBAQAogCWtyZWZfcHV0KCZ0Z3QtPmtyZWYsIHNicDJfcmVsZWFzZV90YXJnZXQpOwogfQogCitzdGF0aWMgdm9pZAorY29tcGxldGVfc2V0X2J1c3lfdGltZW91dChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IHJjb2RlLAorCQkJICB2b2lkICpwYXlsb2FkLCBzaXplX3QgbGVuZ3RoLCB2b2lkICpkb25lKQoreworCWNvbXBsZXRlKGRvbmUpOworfQorCitzdGF0aWMgdm9pZCBzYnAyX3NldF9idXN5X3RpbWVvdXQoc3RydWN0IHNicDJfbG9naWNhbF91bml0ICpsdSkKK3sKKwlzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UgPSBmd19kZXZpY2UobHUtPnRndC0+dW5pdC0+ZGV2aWNlLnBhcmVudCk7CisJREVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0soZG9uZSk7CisJc3RydWN0IGZ3X3RyYW5zYWN0aW9uIHQ7CisJc3RhdGljIF9fYmUzMiBidXN5X3RpbWVvdXQ7CisKKwkvKiBGSVhNRTogd2Ugc2hvdWxkIHRyeSB0byBzZXQgZHVhbC1waGFzZSBjeWNsZV9saW1pdCB0b28gKi8KKwlidXN5X3RpbWVvdXQgPSBjcHVfdG9fYmUzMihTQlAyX1JFVFJZX0xJTUlUKTsKKworCWZ3X3NlbmRfcmVxdWVzdChkZXZpY2UtPmNhcmQsICZ0LCBUQ09ERV9XUklURV9RVUFETEVUX1JFUVVFU1QsCisJCQlsdS0+dGd0LT5ub2RlX2lkLCBsdS0+Z2VuZXJhdGlvbiwgZGV2aWNlLT5tYXhfc3BlZWQsCisJCQlDU1JfUkVHSVNURVJfQkFTRSArIENTUl9CVVNZX1RJTUVPVVQsICZidXN5X3RpbWVvdXQsCisJCQlzaXplb2YoYnVzeV90aW1lb3V0KSwgY29tcGxldGVfc2V0X2J1c3lfdGltZW91dCwgJmRvbmUpOworCXdhaXRfZm9yX2NvbXBsZXRpb24oJmRvbmUpOworfQorCiBzdGF0aWMgdm9pZCBzYnAyX3JlY29ubmVjdChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogCiBzdGF0aWMgdm9pZCBzYnAyX2xvZ2luKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKQEAgLTg2NCwxMCArODk0LDggQEAKIAlmd19ub3RpZnkoIiVzOiBsb2dnZWQgaW4gdG8gTFVOICUwNHggKCVkIHJldHJpZXMpXG4iLAogCQkgIHRndC0+YnVzX2lkLCBsdS0+bHVuLCBsdS0+cmV0cmllcyk7CiAKLSNpZiAwCi0JLyogRklYTUU6IFRoZSBsaW51eDEzOTQgc2JwMiBkb2VzIHRoaXMgbGFzdCBzdGVwLiAqLwotCXNicDJfc2V0X2J1c3lfdGltZW91dChzY3NpX2lkKTsKLSNlbmRpZgorCS8qIHNldCBhcHByb3ByaWF0ZSByZXRyeSBsaW1pdChzKSBpbiBCVVNZX1RJTUVPVVQgcmVnaXN0ZXIgKi8KKwlzYnAyX3NldF9idXN5X3RpbWVvdXQobHUpOwogCiAJUFJFUEFSRV9ERUxBWUVEX1dPUksoJmx1LT53b3JrLCBzYnAyX3JlY29ubmVjdCk7CiAJc2JwMl9hZ2VudF9yZXNldChsdSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXRvcG9sb2d5LmMgYi9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXRvcG9sb2d5LmMKaW5kZXggZTQ3YmIwNC4uZDJjN2EzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9mdy10b3BvbG9neS5jCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvZnctdG9wb2xvZ3kuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGFzbS9idWcuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSAiZnctdHJhbnNhY3Rpb24uaCIKICNpbmNsdWRlICJmdy10b3BvbG9neS5oIgpAQCAtNDI0LDggKzQyNSw4IEBACiAJbm9kZTEgPSBmd19ub2RlKGxpc3QxLm5leHQpOwogCiAJd2hpbGUgKCZub2RlMC0+bGluayAhPSAmbGlzdDApIHsKKwkJV0FSTl9PTihub2RlMC0+cG9ydF9jb3VudCAhPSBub2RlMS0+cG9ydF9jb3VudCk7CiAKLQkJLyogYXNzZXJ0KG5vZGUwLT5wb3J0X2NvdW50ID09IG5vZGUxLT5wb3J0X2NvdW50KTsgKi8KIAkJaWYgKG5vZGUwLT5saW5rX29uICYmICFub2RlMS0+bGlua19vbikKIAkJCWV2ZW50ID0gRldfTk9ERV9MSU5LX09GRjsKIAkJZWxzZSBpZiAoIW5vZGUwLT5saW5rX29uICYmIG5vZGUxLT5saW5rX29uKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9mdy10cmFuc2FjdGlvbi5jIGIvZHJpdmVycy9maXJld2lyZS9mdy10cmFuc2FjdGlvbi5jCmluZGV4IDdmY2M1OWQuLmU2ZjFiZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvZnctdHJhbnNhY3Rpb24uYworKysgYi9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXRyYW5zYWN0aW9uLmMKQEAgLTczNiw2ICs3MzYsMTIgQEAKIAkJYnJlYWs7CiAJfQogCisJLyoKKwkgKiBUaGUgcmVzcG9uc2UgaGFuZGxlciBtYXkgYmUgZXhlY3V0ZWQgd2hpbGUgdGhlIHJlcXVlc3QgaGFuZGxlcgorCSAqIGlzIHN0aWxsIHBlbmRpbmcuICBDYW5jZWwgdGhlIHJlcXVlc3QgaGFuZGxlci4KKwkgKi8KKwljYXJkLT5kcml2ZXItPmNhbmNlbF9wYWNrZXQoY2FyZCwgJnQtPnBhY2tldCk7CisKIAl0LT5jYWxsYmFjayhjYXJkLCByY29kZSwgZGF0YSwgZGF0YV9sZW5ndGgsIHQtPmNhbGxiYWNrX2RhdGEpOwogfQogRVhQT1JUX1NZTUJPTChmd19jb3JlX2hhbmRsZV9yZXNwb25zZSk7CkBAIC03NTEsNyArNzU3LDcgQEAKIAkJICAgIHZvaWQgKnBheWxvYWQsIHNpemVfdCBsZW5ndGgsIHZvaWQgKmNhbGxiYWNrX2RhdGEpCiB7CiAJaW50IGksIHN0YXJ0LCBlbmQ7Ci0JdTMyICptYXA7CisJX19iZTMyICptYXA7CiAKIAlpZiAoIVRDT0RFX0lTX1JFQURfUkVRVUVTVCh0Y29kZSkpIHsKIAkJZndfc2VuZF9yZXNwb25zZShjYXJkLCByZXF1ZXN0LCBSQ09ERV9UWVBFX0VSUk9SKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvZnctdHJhbnNhY3Rpb24uaCBiL2RyaXZlcnMvZmlyZXdpcmUvZnctdHJhbnNhY3Rpb24uaAppbmRleCAwOWNiNzI4Li5hNDNiYjIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXRyYW5zYWN0aW9uLmgKKysrIGIvZHJpdmVycy9maXJld2lyZS9mdy10cmFuc2FjdGlvbi5oCkBAIC04NiwxMiArODYsMTIgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZAogZndfbWVtY3B5X2Zyb21fYmUzMih2b2lkICpfZHN0LCB2b2lkICpfc3JjLCBzaXplX3Qgc2l6ZSkKIHsKLQl1MzIgKmRzdCA9IF9kc3Q7Ci0JdTMyICpzcmMgPSBfc3JjOworCXUzMiAgICAqZHN0ID0gX2RzdDsKKwlfX2JlMzIgKnNyYyA9IF9zcmM7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgc2l6ZSAvIDQ7IGkrKykKLQkJZHN0W2ldID0gY3B1X3RvX2JlMzIoc3JjW2ldKTsKKwkJZHN0W2ldID0gYmUzMl90b19jcHUoc3JjW2ldKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtY29yZS5jIGIvZHJpdmVycy9oaWQvaGlkLWNvcmUuYwppbmRleCBkNzNhNzY4Li5mMGIwMGVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtY29yZS5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMKQEAgLTk2OCw3ICs5NjgsNyBAQAogCQlzaXplLS07CiAJfQogCi0JLyogZHVtcCB0aGUgcmVwb3J0IGRlc2NyaXB0b3IgKi8KKwkvKiBkdW1wIHRoZSByZXBvcnQgKi8KIAlkYmdfaGlkKCJyZXBvcnQgJWQgKHNpemUgJXUpID0gIiwgbiwgc2l6ZSk7CiAJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykKIAkJZGJnX2hpZF9saW5lKCIgJTAyeCIsIGRhdGFbaV0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWlucHV0LmMgYi9kcml2ZXJzL2hpZC9oaWQtaW5wdXQuYwppbmRleCA1YTM4ZmIyLi5jM2ViM2YxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtaW5wdXQuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtaW5wdXQuYwpAQCAtOTgsMTggKzk4LDE2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaGlkaW5wdXRfa2V5X3RyYW5zbGF0aW9uIGFwcGxlX2ZuX2tleXNbXSA9IHsKIAl7IEtFWV9CQUNLU1BBQ0UsIEtFWV9ERUxFVEUgfSwKLQl7IEtFWV9GMSwgICAgICAgS0VZX0JSSUdIVE5FU1NET1dOLCAgICAgQVBQTEVfRkxBR19GS0VZIH0sCi0JeyBLRVlfRjIsICAgICAgIEtFWV9CUklHSFRORVNTVVAsICAgICAgIEFQUExFX0ZMQUdfRktFWSB9LAotCXsgS0VZX0YzLCAgICAgICBLRVlfQ1lDTEVXSU5ET1dTLCAgICAgICBBUFBMRV9GTEFHX0ZLRVkgfSwgLyogRXhwb3PDqSAqLwotCXsgS0VZX0Y0LCAgICAgICBLRVlfRk5fRjQsICAgICAgICAgICAgICBBUFBMRV9GTEFHX0ZLRVkgfSwgLyogRGFzaGJvYXJkICovCi0JeyBLRVlfRjUsICAgICAgIEtFWV9GTl9GNSB9LAotCXsgS0VZX0Y2LCAgICAgICBLRVlfRk5fRjYgfSwKLQl7IEtFWV9GNywgICAgICAgS0VZX0JBQ0ssICAgICAgICAgICAgICAgQVBQTEVfRkxBR19GS0VZIH0sCi0JeyBLRVlfRjgsICAgICAgIEtFWV9QTEFZUEFVU0UsICAgICAgICAgIEFQUExFX0ZMQUdfRktFWSB9LAotCXsgS0VZX0Y5LCAgICAgICBLRVlfRk9SV0FSRCwgICAgICAgICAgICBBUFBMRV9GTEFHX0ZLRVkgfSwKLQl7IEtFWV9GMTAsICAgICAgS0VZX01VVEUsICAgICAgICAgICAgICAgQVBQTEVfRkxBR19GS0VZIH0sCi0JeyBLRVlfRjExLCAgICAgIEtFWV9WT0xVTUVET1dOLCAgICAgICAgIEFQUExFX0ZMQUdfRktFWSB9LAotCXsgS0VZX0YxMiwgICAgICBLRVlfVk9MVU1FVVAsICAgICAgICAgICBBUFBMRV9GTEFHX0ZLRVkgfSwKKwl7IEtFWV9GMSwgICAgICAgS0VZX0JSSUdIVE5FU1NET1dOLCBBUFBMRV9GTEFHX0ZLRVkgfSwKKwl7IEtFWV9GMiwgICAgICAgS0VZX0JSSUdIVE5FU1NVUCwgICBBUFBMRV9GTEFHX0ZLRVkgfSwKKwl7IEtFWV9GMywgICAgICAgS0VZX0ZOX0Y1LCAgICAgICAgICBBUFBMRV9GTEFHX0ZLRVkgfSwgLyogRXhwb3PpICovCisJeyBLRVlfRjQsICAgICAgIEtFWV9GTl9GNCwgICAgICAgICAgQVBQTEVfRkxBR19GS0VZIH0sIC8qIERhc2hib2FyZCAqLworCXsgS0VZX0Y3LCAgICAgICBLRVlfUFJFVklPVVNTT05HLCAgIEFQUExFX0ZMQUdfRktFWSB9LAorCXsgS0VZX0Y4LCAgICAgICBLRVlfUExBWVBBVVNFLCAgICAgIEFQUExFX0ZMQUdfRktFWSB9LAorCXsgS0VZX0Y5LCAgICAgICBLRVlfTkVYVFNPTkcsICAgICAgIEFQUExFX0ZMQUdfRktFWSB9LAorCXsgS0VZX0YxMCwgICAgICBLRVlfTVVURSwgICAgICAgICAgIEFQUExFX0ZMQUdfRktFWSB9LAorCXsgS0VZX0YxMSwgICAgICBLRVlfVk9MVU1FRE9XTiwgICAgIEFQUExFX0ZMQUdfRktFWSB9LAorCXsgS0VZX0YxMiwgICAgICBLRVlfVk9MVU1FVVAsICAgICAgIEFQUExFX0ZMQUdfRktFWSB9LAogCXsgS0VZX1VQLCAgICAgICBLRVlfUEFHRVVQIH0sCiAJeyBLRVlfRE9XTiwgICAgIEtFWV9QQUdFRE9XTiB9LAogCXsgS0VZX0xFRlQsICAgICBLRVlfSE9NRSB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1jb3JlLmMgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLWNvcmUuYwppbmRleCBiMzhlNTU5Li5kOTU5NzlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLWNvcmUuYworKysgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLWNvcmUuYwpAQCAtMjc4LDcgKzI3OCw3IEBACiAJCXVzYmhpZC0+dXJiY3RybC0+cGlwZSA9IHVzYl9yY3ZjdHJscGlwZShoaWRfdG9fdXNiX2RldihoaWQpLCAwKTsKIAkJbWF4cGFja2V0ID0gdXNiX21heHBhY2tldChoaWRfdG9fdXNiX2RldihoaWQpLCB1c2JoaWQtPnVyYmN0cmwtPnBpcGUsIDApOwogCQlpZiAobWF4cGFja2V0ID4gMCkgewotCQkJcGFkbGVuID0gKGxlbiArIG1heHBhY2tldCAtIDEpIC8gbWF4cGFja2V0OworCQkJcGFkbGVuID0gRElWX1JPVU5EX1VQKGxlbiwgbWF4cGFja2V0KTsKIAkJCXBhZGxlbiAqPSBtYXhwYWNrZXQ7CiAJCQlpZiAocGFkbGVuID4gdXNiaGlkLT5idWZzaXplKQogCQkJCXBhZGxlbiA9IHVzYmhpZC0+YnVmc2l6ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtcXVpcmtzLmMgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLXF1aXJrcy5jCmluZGV4IGU2ZDA1ZjYuLmUyOWEwNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtcXVpcmtzLmMKKysrIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1xdWlya3MuYwpAQCAtMzQ1LDYgKzM0NSw5IEBACiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfTkFUSU9OQUxfU0VNSUNPTkRVQ1RPUiAweDA0MDAKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9OX1NfSEFSTU9OWSAgICAgICAweGMzNTkKIAorI2RlZmluZSBVU0JfVkVORE9SX0lEX05BVFNVICAgICAgICAgICAgIDB4MDhiNworI2RlZmluZSBVU0JfREVWSUNFX0lEX05BVFNVX0dBTUVQQUQgICAgIDB4MDAwMQorCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfTkVDCQkweDA3M2UKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9ORUNfVVNCX0dBTUVfUEFECTB4MDMwMQogCkBAIC00MjYsNiArNDI5LDcgQEAKIAl7IFVTQl9WRU5ET1JfSURfSEFQUCwgVVNCX0RFVklDRV9JRF9VR0NJX0RSSVZJTkcsIEhJRF9RVUlSS19CQURQQUQgfCBISURfUVVJUktfTVVMVElfSU5QVVQgfSwKIAl7IFVTQl9WRU5ET1JfSURfSEFQUCwgVVNCX0RFVklDRV9JRF9VR0NJX0ZMWUlORywgSElEX1FVSVJLX0JBRFBBRCB8IEhJRF9RVUlSS19NVUxUSV9JTlBVVCB9LAogCXsgVVNCX1ZFTkRPUl9JRF9IQVBQLCBVU0JfREVWSUNFX0lEX1VHQ0lfRklHSFRJTkcsIEhJRF9RVUlSS19CQURQQUQgfCBISURfUVVJUktfTVVMVElfSU5QVVQgfSwKKwl7IFVTQl9WRU5ET1JfSURfTkFUU1UsIFVTQl9ERVZJQ0VfSURfTkFUU1VfR0FNRVBBRCwgSElEX1FVSVJLX0JBRFBBRCB9LAogCXsgVVNCX1ZFTkRPUl9JRF9ORUMsIFVTQl9ERVZJQ0VfSURfTkVDX1VTQl9HQU1FX1BBRCwgSElEX1FVSVJLX0JBRFBBRCB9LAogCXsgVVNCX1ZFTkRPUl9JRF9TQUlURUssIFVTQl9ERVZJQ0VfSURfU0FJVEVLX1JVTUJMRVBBRCwgSElEX1FVSVJLX0JBRFBBRCB9LAogCXsgVVNCX1ZFTkRPUl9JRF9UT1BNQVgsIFVTQl9ERVZJQ0VfSURfVE9QTUFYX0NPQlJBUEFELCBISURfUVVJUktfQkFEUEFEIH0sCkBAIC02MjQsNyArNjI4LDcgQEAKIAl7IFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfQUxVX0lTTywgSElEX1FVSVJLX0FQUExFX0hBU19GTiB8IEhJRF9RVUlSS19BUFBMRV9JU09fS0VZQk9BUkQgfSwKIAl7IFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfQUxVX0pJUywgSElEX1FVSVJLX0FQUExFX0hBU19GTiB9LAogCXsgVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVI0X0hGX0FOU0ksIEhJRF9RVUlSS19BUFBMRV9IQVNfRk4gfCBISURfUVVJUktfSUdOT1JFX01PVVNFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0dFWVNFUjRfSEZfSVNPLCBISURfUVVJUktfQVBQTEVfSEFTX0ZOIHwgSElEX1FVSVJLX0lHTk9SRV9NT1VTRSB8IEhJRF9RVUlSS19BUFBMRV9JU09fS0VZQk9BUkQgfSwKKwl7IFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSNF9IRl9JU08sIEhJRF9RVUlSS19BUFBMRV9IQVNfRk4gfCBISURfUVVJUktfSUdOT1JFX01PVVNFIH0sCiAJeyBVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0dFWVNFUjRfSEZfSklTLCBISURfUVVJUktfQVBQTEVfSEFTX0ZOIHwgSElEX1FVSVJLX0lHTk9SRV9NT1VTRSB9LAogCXsgVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfV0lSRUxFU1NfQU5TSSwgSElEX1FVSVJLX0FQUExFX0hBU19GTiB9LAogCXsgVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfV0lSRUxFU1NfSVNPLCBISURfUVVJUktfQVBQTEVfSEFTX0ZOIHwgSElEX1FVSVJLX0FQUExFX0lTT19LRVlCT0FSRCB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9LY29uZmlnIGIvZHJpdmVycy9od21vbi9LY29uZmlnCmluZGV4IDM2ODg3OWYuLjRkYzc2YmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vS2NvbmZpZworKysgYi9kcml2ZXJzL2h3bW9uL0tjb25maWcKQEAgLTMzNyw4ICszMzcsOSBAQAogCWhlbHAKIAkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUgdGVtcGVyYXR1cmUgYW5kCiAJICBwb3dlciBzZW5zb3JzIGluIHZhcmlvdXMgSUJNIFN5c3RlbSBYIHNlcnZlcnMgdGhhdCBzdXBwb3J0Ci0JICBQb3dlckV4ZWN1dGl2ZS4gIFNvIGZhciB0aGlzIGluY2x1ZGVzIHRoZSB4MzU1MCwgeDM2NTAsIHgzNjU1LAotCSAgeDM3NTUsIGFuZCBjZXJ0YWluIEhTMjAgYmxhZGVzLgorCSAgUG93ZXJFeGVjdXRpdmUuICBTbyBmYXIgdGhpcyBpbmNsdWRlcyB0aGUgeDMzNTAsIHgzNTUwLCB4MzY1MCwKKwkgIHgzNjU1LCBhbmQgeDM3NTU7IHRoZSB4MzgwMCwgeDM4NTAsIGFuZCB4Mzk1MCBtb2RlbHMgdGhhdCBoYXZlCisJICBQQ0kgRXhwcmVzczsgYW5kIHNvbWUgb2YgdGhlIEhTMngsIExTMngsIGFuZCBRUzJ4IGJsYWRlcy4KIAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgaWJtcGV4LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9pYm1wZXguYyBiL2RyaXZlcnMvaHdtb24vaWJtcGV4LmMKaW5kZXggOWM5Y2RiMC4uNGU5YjE5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9pYm1wZXguYworKysgYi9kcml2ZXJzL2h3bW9uL2libXBleC5jCkBAIC0zMjcsMTAgKzMyNywxNCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHBvd2VyX3NlbnNvcl9tdWx0aXBsaWVyKGNvbnN0IGNoYXIgKnNlbnNvcl9pZCwgaW50IGxlbikKK3N0YXRpYyBpbnQgcG93ZXJfc2Vuc29yX211bHRpcGxpZXIoc3RydWN0IGlibXBleF9ibWNfZGF0YSAqZGF0YSwKKwkJCQkgICBjb25zdCBjaGFyICpzZW5zb3JfaWQsIGludCBsZW4pCiB7CiAJaW50IGk7CiAKKwlpZiAoZGF0YS0+c2Vuc29yX21ham9yID09IDIpCisJCXJldHVybiAxMDAwMDAwOworCiAJZm9yIChpID0gUEVYX1NFTlNPUl9UWVBFX0xFTjsgaSA8IGxlbiAtIDE7IGkrKykKIAkJaWYgKCFtZW1jbXAoJnNlbnNvcl9pZFtpXSwgd2F0dF9zZW5zb3Jfc2lnLCBQRVhfTVVMVF9MRU4pKQogCQkJcmV0dXJuIDEwMDAwMDA7CkBAIC0zOTgsMTQgKzQwMiwxNSBAQAogCQkJbnVtX3Bvd2VyKys7CiAJCQlzZW5zb3JfY291bnRlciA9IG51bV9wb3dlcjsKIAkJCWRhdGEtPnNlbnNvcnNbaV0ubXVsdGlwbGllciA9Ci0JCQkJcG93ZXJfc2Vuc29yX211bHRpcGxpZXIoZGF0YS0+cnhfbXNnX2RhdGEsCi0JCQkJCQkgICAgIGRhdGEtPnJ4X21zZ19sZW4pOworCQkJCXBvd2VyX3NlbnNvcl9tdWx0aXBsaWVyKGRhdGEsCisJCQkJCQkJZGF0YS0+cnhfbXNnX2RhdGEsCisJCQkJCQkJZGF0YS0+cnhfbXNnX2xlbik7CiAJCX0gZWxzZSBpZiAoaXNfdGVtcF9zZW5zb3IoZGF0YS0+cnhfbXNnX2RhdGEsCiAJCQkJCSAgZGF0YS0+cnhfbXNnX2xlbikpIHsKIAkJCXNlbnNvcl90eXBlID0gVEVNUF9TRU5TT1I7CiAJCQludW1fdGVtcCsrOwogCQkJc2Vuc29yX2NvdW50ZXIgPSBudW1fdGVtcDsKLQkJCWRhdGEtPnNlbnNvcnNbaV0ubXVsdGlwbGllciA9IDE7CisJCQlkYXRhLT5zZW5zb3JzW2ldLm11bHRpcGxpZXIgPSAxMDAwOwogCQl9IGVsc2UKIAkJCWNvbnRpbnVlOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtbGliLmMgYi9kcml2ZXJzL2lkZS9pZGUtbGliLmMKaW5kZXggMjllMmM5Ny4uNzAzMWE4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWxpYi5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1saWIuYwpAQCAtMTIyLDcgKzEyMiw2IEBACiAJY29uc3QgY2hhcgkqbmFtZTsKIAlpbnQJCXBpbzsKIH0gaWRlX3Bpb19ibGFja2xpc3QgW10gPSB7Ci0vKgl7ICJDb25uZXIgUGVyaXBoZXJhbHMgMTI3NU1CIC0gQ0ZTMTI3NUEiLCA0IH0sICovCiAJeyAiQ29ubmVyIFBlcmlwaGVyYWxzIDU0ME1CIC0gQ0ZTNTQwQSIsIDMgfSwKIAogCXsgIldEQyBBQzI3MDAiLCAgMyB9LApAQCAtMTM4LDEwICsxMzcsOCBAQAogCXsgIldEQyBBQzExNzAiLCAgMSB9LAogCXsgIldEQyBBQzEyMTAiLCAgMSB9LAogCXsgIldEQyBBQzI4MCIsICAgMCB9LAotLyoJeyAiV0RDIEFDMjEwMDAiLCA0IH0sICovCiAJeyAiV0RDIEFDMzEwMDAiLCAzIH0sCiAJeyAiV0RDIEFDMzEyMDAiLCAzIH0sCi0vKgl7ICJXREMgQUMzMTYwMCIsIDQgfSwgKi8KIAogCXsgIk1heHRvciA3MTMxIEFUIiwgMSB9LAogCXsgIk1heHRvciA3MTcxIEFUIiwgMSB9LApAQCAtMTU1LDEzICsxNTIsNiBAQAogCXsgIlNBTVNVTkcgU0hELTMxMjJBIiwgMSB9LAogCXsgIlNBTVNVTkcgU0hELTMxNzJBIiwgMSB9LAogCi0vKgl7ICJTVDUxMDgwQSIsIDQgfSwKLSAqCXsgIlNUNTEyNzBBIiwgNCB9LAotICoJeyAiU1QzMTIyMEEiLCA0IH0sCi0gKgl7ICJTVDMxNjQwQSIsIDQgfSwKLSAqCXsgIlNUMzIxNDBBIiwgNCB9LAotICoJeyAiU1QzNzgwQSIsICA0IH0sCi0gKi8KIAl7ICJTVDU2NjBBIiwgIDMgfSwKIAl7ICJTVDM2NjBBIiwgIDMgfSwKIAl7ICJTVDM2MzBBIiwgIDMgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS10YXBlLmMgYi9kcml2ZXJzL2lkZS9pZGUtdGFwZS5jCmluZGV4IDQzZTBlMDUuLjA1OThlY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS10YXBlLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLXRhcGUuYwpAQCAtMzc2NSwxMSArMzc2NSw2IEBACiAJZy0+Zm9wcyA9ICZpZGV0YXBlX2Jsb2NrX29wczsKIAlpZGVfcmVnaXN0ZXJfcmVnaW9uKGcpOwogCi0JcHJpbnRrKEtFUk5fV0FSTklORyAiSXQgaXMgcG9zc2libGUgdGhhdCB0aGlzIGRyaXZlciBkb2VzIG5vdCBoYXZlIGFueSIKLQkJIiB1c2VycyBhbnltb3JlIGFuZCwgYXMgYSByZXN1bHQsIGl0IHdpbGwgYmUgUkVNT1ZFRCBzb29uLiIKLQkJIiBQbGVhc2Ugbm90aWZ5IEJhcnQgPGJ6b2xuaWVyQGdtYWlsLmNvbT4gb3IgQm9yaXMiCi0JCSIgPHBldGtvdmJiQGdtYWlsLmNvbT4gaW4gY2FzZSB5b3Ugc3RpbGwgbmVlZCBpdC5cbiIpOwotCiAJcmV0dXJuIDA7CiAKIG91dF9mcmVlX3RhcGU6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtdGFza2ZpbGUuYyBiL2RyaXZlcnMvaWRlL2lkZS10YXNrZmlsZS5jCmluZGV4IDA1MThhMmUuLjRjODZhOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS10YXNrZmlsZS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS10YXNrZmlsZS5jCkBAIC00MjMsNiArNDIzLDI1IEBACiB9CiAKIC8qCisgKiBXZSBnb3QgYW4gaW50ZXJydXB0IG9uIGEgdGFza19pbiBjYXNlLCBidXQgbm8gZXJyb3JzIGFuZCBubyBEUlEuCisgKgorICogSXQgbWlnaHQgYmUgYSBzcHVyaW91cyBpcnEgKHNoYXJlZCBpcnEpLCBidXQgaXQgbWlnaHQgYmUgYQorICogY29tbWFuZCB0aGF0IGhhZCBubyBvdXRwdXQuCisgKi8KK3N0YXRpYyBpZGVfc3RhcnRzdG9wX3QgdGFza19pbl91bmV4cGVjdGVkKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLCB1OCBzdGF0KQoreworCS8qIENvbW1hbmQgYWxsIGRvbmU/ICovCisJaWYgKE9LX1NUQVQoc3RhdCwgUkVBRFlfU1RBVCwgQlVTWV9TVEFUKSkgeworCQl0YXNrX2VuZF9yZXF1ZXN0KGRyaXZlLCBycSwgc3RhdCk7CisJCXJldHVybiBpZGVfc3RvcHBlZDsKKwl9CisKKwkvKiBBc3N1bWUgaXQgd2FzIGEgc3B1cmlvdXMgaXJxICovCisJaWRlX3NldF9oYW5kbGVyKGRyaXZlLCAmdGFza19pbl9pbnRyLCBXQUlUX1dPUlNUQ0FTRSwgTlVMTCk7CisJcmV0dXJuIGlkZV9zdGFydGVkOworfQorCisvKgogICogSGFuZGxlciBmb3IgY29tbWFuZCB3aXRoIFBJTyBkYXRhLWluIHBoYXNlIChSZWFkL1JlYWQgTXVsdGlwbGUpLgogICovCiBzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IHRhc2tfaW5faW50cihpZGVfZHJpdmVfdCAqZHJpdmUpCkBAIC00MzEsMTggKzQ1MCwxNyBAQAogCXN0cnVjdCByZXF1ZXN0ICpycSA9IEhXR1JPVVAoZHJpdmUpLT5ycTsKIAl1OCBzdGF0ID0gaWRlX3JlYWRfc3RhdHVzKGRyaXZlKTsKIAotCS8qIG5ldyB3YXkgZm9yIGRlYWxpbmcgd2l0aCBwcmVtYXR1cmUgc2hhcmVkIFBDSSBpbnRlcnJ1cHRzICovCi0JaWYgKCFPS19TVEFUKHN0YXQsIERSUV9TVEFULCBCQURfUl9TVEFUKSkgewotCQlpZiAoc3RhdCAmIChFUlJfU1RBVCB8IERSUV9TVEFUKSkKLQkJCXJldHVybiB0YXNrX2Vycm9yKGRyaXZlLCBycSwgX19GVU5DVElPTl9fLCBzdGF0KTsKLQkJLyogTm8gZGF0YSB5ZXQsIHNvIHdhaXQgZm9yIGFub3RoZXIgSVJRLiAqLwotCQlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZ0YXNrX2luX2ludHIsIFdBSVRfV09SU1RDQVNFLCBOVUxMKTsKLQkJcmV0dXJuIGlkZV9zdGFydGVkOwotCX0KKwkvKiBFcnJvcj8gKi8KKwlpZiAoc3RhdCAmIEVSUl9TVEFUKQorCQlyZXR1cm4gdGFza19lcnJvcihkcml2ZSwgcnEsIF9fRlVOQ1RJT05fXywgc3RhdCk7CisKKwkvKiBEaWRuJ3Qgd2FudCBhbnkgZGF0YT8gT2RkLiAqLworCWlmICghKHN0YXQgJiBEUlFfU1RBVCkpCisJCXJldHVybiB0YXNrX2luX3VuZXhwZWN0ZWQoZHJpdmUsIHJxLCBzdGF0KTsKIAogCWlkZV9waW9fZGF0YWJsb2NrKGRyaXZlLCBycSwgMCk7CiAKLQkvKiBJZiBpdCB3YXMgdGhlIGxhc3QgZGF0YWJsb2NrIGNoZWNrIHN0YXR1cyBhbmQgZmluaXNoIHRyYW5zZmVyLiAqLworCS8qIEFyZSB3ZSBkb25lPyBDaGVjayBzdGF0dXMgYW5kIGZpbmlzaCB0cmFuc2Zlci4gKi8KIAlpZiAoIWh3aWYtPm5sZWZ0KSB7CiAJCXN0YXQgPSB3YWl0X2RyaXZlX25vdF9idXN5KGRyaXZlKTsKIAkJaWYgKCFPS19TVEFUKHN0YXQsIDAsIEJBRF9TVEFUKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS5jIGIvZHJpdmVycy9pZGUvaWRlLmMKaW5kZXggOTk3NmY5ZC4uZmM2OWZlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLmMKQEAgLTEyNTgsNyArMTI1OCw3IEBACiAJCWRyaXZlID0gJmh3aWYtPmRyaXZlc1t1bml0XTsKIAkJaWYgKHN0cm5jbXAocyArIDQsICJpZGUtIiwgNCkgPT0gMCkgewogCQkJc3RybGNweShkcml2ZS0+ZHJpdmVyX3JlcSwgcyArIDQsIHNpemVvZihkcml2ZS0+ZHJpdmVyX3JlcSkpOwotCQkJZ290byBkb25lOworCQkJZ290byBvYnNvbGV0ZV9vcHRpb247CiAJCX0KIAkJc3dpdGNoIChtYXRjaF9wYXJtKCZzWzNdLCBoZF93b3JkcywgdmFscywgMykpIHsKIAkJCWNhc2UgLTE6IC8qICJub25lIiAqLwpAQCAtMTI5MCwxMyArMTI5MCwxMyBAQAogCQkJCWdvdG8gZG9uZTsKIAkJCWNhc2UgLTEyOiAvKiAicmVtYXAiICovCiAJCQkJZHJpdmUtPnJlbWFwXzBfdG9fMSA9IDE7Ci0JCQkJZ290byBkb25lOworCQkJCWdvdG8gb2Jzb2xldGVfb3B0aW9uOwogCQkJY2FzZSAtMTM6IC8qICJyZW1hcDYzIiAqLwogCQkJCWRyaXZlLT5zZWN0MCA9IDYzOwotCQkJCWdvdG8gZG9uZTsKKwkJCQlnb3RvIG9ic29sZXRlX29wdGlvbjsKIAkJCWNhc2UgLTE0OiAvKiAic2NzaSIgKi8KIAkJCQlkcml2ZS0+c2NzaSA9IDE7Ci0JCQkJZ290byBkb25lOworCQkJCWdvdG8gb2Jzb2xldGVfb3B0aW9uOwogCQkJY2FzZSAzOiAvKiBjeWwsaGVhZCxzZWN0ICovCiAJCQkJZHJpdmUtPm1lZGlhCT0gaWRlX2Rpc2s7CiAJCQkJZHJpdmUtPnJlYWR5X3N0YXQgPSBSRUFEWV9TVEFUOwpAQCAtMTM3MCwzMiArMTM3MCwzMiBAQAogI2lmZGVmIENPTkZJR19CTEtfREVWX0FMSTE0WFgKIAkJCWNhc2UgLTE3OiAvKiAiYWxpMTR4eCIgKi8KIAkJCQlwcm9iZV9hbGkxNHh4ID0gMTsKLQkJCQlnb3RvIGRvbmU7CisJCQkJZ290byBvYnNvbGV0ZV9vcHRpb247CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfQkxLX0RFVl9VTUM4NjcyCiAJCQljYXNlIC0xNjogLyogInVtYzg2NzIiICovCiAJCQkJcHJvYmVfdW1jODY3MiA9IDE7Ci0JCQkJZ290byBkb25lOworCQkJCWdvdG8gb2Jzb2xldGVfb3B0aW9uOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfRFRDMjI3OAogCQkJY2FzZSAtMTU6IC8qICJkdGMyMjc4IiAqLwogCQkJCXByb2JlX2R0YzIyNzggPSAxOwotCQkJCWdvdG8gZG9uZTsKKwkJCQlnb3RvIG9ic29sZXRlX29wdGlvbjsKICNlbmRpZgogI2lmZGVmIENPTkZJR19CTEtfREVWX0NNRDY0MAogCQkJY2FzZSAtMTQ6IC8qICJjbWQ2NDBfdmxiIiAqLwogCQkJCWNtZDY0MF92bGIgPSAxOwotCQkJCWdvdG8gZG9uZTsKKwkJCQlnb3RvIG9ic29sZXRlX29wdGlvbjsKICNlbmRpZgogI2lmZGVmIENPTkZJR19CTEtfREVWX0hUNjU2MEIKIAkJCWNhc2UgLTEzOiAvKiAiaHQ2NTYwYiIgKi8KIAkJCQlwcm9iZV9odDY1NjBiID0gMTsKLQkJCQlnb3RvIGRvbmU7CisJCQkJZ290byBvYnNvbGV0ZV9vcHRpb247CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfQkxLX0RFVl9RRDY1WFgKIAkJCWNhc2UgLTEyOiAvKiAicWQ2NXh4IiAqLwogCQkJCXByb2JlX3FkNjV4eCA9IDE7Ci0JCQkJZ290byBkb25lOworCQkJCWdvdG8gb2Jzb2xldGVfb3B0aW9uOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfNERSSVZFUwogCQkJY2FzZSAtMTE6IC8qICJmb3VyIiBkcml2ZXMgb24gb25lIHNldCBvZiBwb3J0cyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9zYnAyLmMgYi9kcml2ZXJzL2llZWUxMzk0L3NicDIuYwppbmRleCA5ZTJiMTk2Li5mNTNmNzJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L3NicDIuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L3NicDIuYwpAQCAtMzc2LDYgKzM3NiwxMSBAQAogCQkubW9kZWxfaWQJCT0gU0JQMl9ST01fVkFMVUVfV0lMRENBUkQsCiAJCS53b3JrYXJvdW5kcwkJPSBTQlAyX1dPUktBUk9VTkRfMTI4S19NQVhfVFJBTlMsCiAJfSwKKwkvKiBEYXRhZmFiIE1EMi1GVzIgd2l0aCBTeW1iaW9zL0xTSUxvZ2ljIFNZTTEzRlc1MDAgYnJpZGdlICovIHsKKwkJLmZpcm13YXJlX3JldmlzaW9uCT0gMHgwMDI2MDAsCisJCS5tb2RlbF9pZAkJPSBTQlAyX1JPTV9WQUxVRV9XSUxEQ0FSRCwKKwkJLndvcmthcm91bmRzCQk9IFNCUDJfV09SS0FST1VORF8xMjhLX01BWF9UUkFOUywKKwl9LAogCS8qIGlQb2QgNHRoIGdlbmVyYXRpb24gKi8gewogCQkuZmlybXdhcmVfcmV2aXNpb24JPSAweDBhMjcwMCwKIAkJLm1vZGVsX2lkCQk9IDB4MDAwMDIxLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL2NvYmFsdF9idG5zLmMgYi9kcml2ZXJzL2lucHV0L21pc2MvY29iYWx0X2J0bnMuYwppbmRleCA0ODMzYjFhLi41NTExZWYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvY29iYWx0X2J0bnMuYworKysgYi9kcml2ZXJzL2lucHV0L21pc2MvY29iYWx0X2J0bnMuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29iYWx0IGJ1dHRvbiBpbnRlcmZhY2UgZHJpdmVyLgogICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDcgIFlvaWNoaSBZdWFzYSA8eW9pY2hpX3l1YXNhQHRyaXBlYWtzLmNvLmpwPgorICogIENvcHlyaWdodCAoQykgMjAwNy0yMDA4ICBZb2ljaGkgWXVhc2EgPHlvaWNoaV95dWFzYUB0cmlwZWFrcy5jby5qcD4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMTUsNyArMTUsNyBAQAogICoKICAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQogICovCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0LXBvbGxkZXYuaD4KQEAgLTU1LDcgKzU1LDcgQEAKIAlzdGF0dXMgPSB+cmVhZGwoYmRldi0+cmVnKSA+PiAyNDsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGJkZXYtPmtleW1hcCk7IGkrKykgewotCQlpZiAoc3RhdHVzICYgKDFVTCA8PCBpKSkgeworCQlpZiAoc3RhdHVzICYgKDFVIDw8IGkpKSB7CiAJCQlpZiAoKytiZGV2LT5jb3VudFtpXSA9PSBCVVRUT05TX0NPVU5UX1RIUkVTSE9MRCkgewogCQkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9NU0MsIE1TQ19TQ0FOLCBpKTsKIAkJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCBiZGV2LT5rZXltYXBbaV0sIDEpOwpAQCAtOTcsMTYgKzk3LDE2IEBACiAJaW5wdXQtPm5hbWUgPSAiQ29iYWx0IGJ1dHRvbnMiOwogCWlucHV0LT5waHlzID0gImNvYmFsdC9pbnB1dDAiOwogCWlucHV0LT5pZC5idXN0eXBlID0gQlVTX0hPU1Q7Ci0JaW5wdXQtPmNkZXYuZGV2ID0gJnBkZXYtPmRldjsKKwlpbnB1dC0+ZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CiAKLQlpbnB1dC0+a2V5Y29kZSA9IHBkZXYtPmtleW1hcDsKLQlpbnB1dC0+a2V5Y29kZW1heCA9IEFSUkFZX1NJWkUocGRldi0+a2V5bWFwKTsKKwlpbnB1dC0+a2V5Y29kZSA9IGJkZXYtPmtleW1hcDsKKwlpbnB1dC0+a2V5Y29kZW1heCA9IEFSUkFZX1NJWkUoYmRldi0+a2V5bWFwKTsKIAlpbnB1dC0+a2V5Y29kZXNpemUgPSBzaXplb2YodW5zaWduZWQgc2hvcnQpOwogCiAJaW5wdXRfc2V0X2NhcGFiaWxpdHkoaW5wdXQsIEVWX01TQywgTVNDX1NDQU4pOwogCV9fc2V0X2JpdChFVl9LRVksIGlucHV0LT5ldmJpdCk7Ci0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYnV0dG9uc19tYXApOyBpKyspCi0JCV9fc2V0X2JpdChpbnB1dC0+a2V5Y29kZVtpXSwgaW5wdXQtPmtleWJpdCk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY29iYWx0X21hcCk7IGkrKykKKwkJX19zZXRfYml0KGJkZXYtPmtleW1hcFtpXSwgaW5wdXQtPmtleWJpdCk7CiAJX19jbGVhcl9iaXQoS0VZX1JFU0VSVkVELCBpbnB1dC0+a2V5Yml0KTsKIAogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL2FscHMuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvYWxwcy5jCmluZGV4IGIzNDZhM2IuLjM4NWUzMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvYWxwcy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvYWxwcy5jCkBAIC0xMTYsOCArMTE2LDggQEAKIAl9CiAKIAlpZiAocHJpdi0+aS0+ZmxhZ3MgJiBBTFBTX0ZXX0JLXzEpIHsKLQkJYmFjayA9IHBhY2tldFsyXSAmIDQ7Ci0JCWZvcndhcmQgPSBwYWNrZXRbMF0gJiAweDEwOworCQliYWNrID0gcGFja2V0WzBdICYgMHgxMDsKKwkJZm9yd2FyZCA9IHBhY2tldFsyXSAmIDQ7CiAJfQogCiAJaWYgKHByaXYtPmktPmZsYWdzICYgQUxQU19GV19CS18yKSB7CkBAIC00ODMsNiArNDgzLDcgQEAKIAlkZXYyLT5pZC52ZW5kb3IgID0gMHgwMDAyOwogCWRldjItPmlkLnByb2R1Y3QgPSBQU01PVVNFX0FMUFM7CiAJZGV2Mi0+aWQudmVyc2lvbiA9IDB4MDAwMDsKKwlkZXYyLT5kZXYucGFyZW50ID0gJnBzbW91c2UtPnBzMmRldi5zZXJpby0+ZGV2OwogCiAJZGV2Mi0+ZXZiaXRbMF0gPSBCSVRfTUFTSyhFVl9LRVkpIHwgQklUX01BU0soRVZfUkVMKTsKIAlkZXYyLT5yZWxiaXRbQklUX1dPUkQoUkVMX1gpXSB8PSBCSVRfTUFTSyhSRUxfWCkgfCBCSVRfTUFTSyhSRUxfWSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLXNuaXJtLmggYi9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLXNuaXJtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA5YTkzNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDItc25pcm0uaApAQCAtMCwwICsxLDc1IEBACisjaWZuZGVmIF9JODA0Ml9TTklSTV9ICisjZGVmaW5lIF9JODA0Ml9TTklSTV9ICisKKyNpbmNsdWRlIDxhc20vc25pLmg+CisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKy8qCisgKiBOYW1lcy4KKyAqLworCisjZGVmaW5lIEk4MDQyX0tCRF9QSFlTX0RFU0MgIm9uYm9hcmQvc2VyaW8wIgorI2RlZmluZSBJODA0Ml9BVVhfUEhZU19ERVNDICJvbmJvYXJkL3NlcmlvMSIKKyNkZWZpbmUgSTgwNDJfTVVYX1BIWVNfREVTQyAib25ib2FyZC9zZXJpbyVkIgorCisvKgorICogSVJRcy4KKyAqLworc3RhdGljIGludCBpODA0Ml9rYmRfaXJxOworc3RhdGljIGludCBpODA0Ml9hdXhfaXJxOworI2RlZmluZSBJODA0Ml9LQkRfSVJRIGk4MDQyX2tiZF9pcnEKKyNkZWZpbmUgSTgwNDJfQVVYX0lSUSBpODA0Ml9hdXhfaXJxCisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKmtiZF9pb2Jhc2U7CisKKyNkZWZpbmUgSTgwNDJfQ09NTUFORF9SRUcJKGtiZF9pb2Jhc2UgKyAweDY0VUwpCisjZGVmaW5lIEk4MDQyX0RBVEFfUkVHCQkoa2JkX2lvYmFzZSArIDB4NjBVTCkKKworc3RhdGljIGlubGluZSBpbnQgaTgwNDJfcmVhZF9kYXRhKHZvaWQpCit7CisJcmV0dXJuIHJlYWRiKGtiZF9pb2Jhc2UgKyAweDYwVUwpOworfQorCitzdGF0aWMgaW5saW5lIGludCBpODA0Ml9yZWFkX3N0YXR1cyh2b2lkKQoreworCXJldHVybiByZWFkYihrYmRfaW9iYXNlICsgMHg2NFVMKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGk4MDQyX3dyaXRlX2RhdGEoaW50IHZhbCkKK3sKKwl3cml0ZWIodmFsLCBrYmRfaW9iYXNlICsgMHg2MFVMKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGk4MDQyX3dyaXRlX2NvbW1hbmQoaW50IHZhbCkKK3sKKwl3cml0ZWIodmFsLCBrYmRfaW9iYXNlICsgMHg2NFVMKTsKK30KK3N0YXRpYyBpbmxpbmUgaW50IGk4MDQyX3BsYXRmb3JtX2luaXQodm9pZCkKK3sKKwkvKiBSTTIwMCBpcyBzdHJhbmdlIC4uLiAqLworCWlmIChzbmlfYnJkX3R5cGUgPT0gU05JX0JSRF9STTIwMCkgeworCQlrYmRfaW9iYXNlID0gaW9yZW1hcCgweDE2MDAwMDAwLCA0KTsKKwkJaTgwNDJfa2JkX2lycSA9IDMzOworCQlpODA0Ml9hdXhfaXJxID0gNDQ7CisJfSBlbHNlIHsKKwkJa2JkX2lvYmFzZSA9IGlvcmVtYXAoMHgxNDAwMDAwMCwgNCk7CisJCWk4MDQyX2tiZF9pcnEgPSAxOworCQlpODA0Ml9hdXhfaXJxID0gMTI7CisJfQorCWlmICgha2JkX2lvYmFzZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGk4MDQyX3BsYXRmb3JtX2V4aXQodm9pZCkKK3sKKworfQorCisjZW5kaWYgLyogX0k4MDQyX1NOSVJNX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIteDg2aWE2NGlvLmggYi9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLXg4NmlhNjRpby5oCmluZGV4IDY2MmU4NDQuLjYwOTMxYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIteDg2aWE2NGlvLmgKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi14ODZpYTY0aW8uaApAQCAtMjc3LDYgKzI3NywxMyBAQAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJNNjM2L0E3MzcgcGxhdGZvcm0iKSwKIAkJfSwKIAl9LAorCXsKKwkJLmlkZW50ID0gIkxlbm92byAzMDAwIG4xMDAiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkxFTk9WTyIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX1ZFUlNJT04sICIzMDAwIE4xMDAiKSwKKwkJfSwKKwl9LAogCXsgfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi5jIGIvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi5jCmluZGV4IDI3NjMzOTQuLjY1YTc0Y2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIuYworKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLmMKQEAgLTExNTEsNyArMTE1MSw2IEBACiBzdGF0aWMgaW50IF9fZGV2aW5pdCBpODA0Ml9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJaW50IGVycm9yOwotCWNoYXIgcGFyYW07CiAKIAllcnJvciA9IGk4MDQyX2NvbnRyb2xsZXJfc2VsZnRlc3QoKTsKIAlpZiAoZXJyb3IpCkBAIC0xMTc0LDcgKzExNzMsNyBAQAogCX0KICNpZmRlZiBDT05GSUdfWDg2CiAJaWYgKGk4MDQyX2RyaXRlaykgewotCQlwYXJhbSA9IDB4OTA7CisJCWNoYXIgcGFyYW0gPSAweDkwOwogCQllcnJvciA9IGk4MDQyX2NvbW1hbmQoJnBhcmFtLCAweDEwNTkpOwogCQlpZiAoZXJyb3IpCiAJCQlnb3RvIG91dF9mYWlsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi5oIGIvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi5oCmluZGV4IGM5NzJlNWQuLmNiYzFiZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIuaAorKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLmgKQEAgLTE4LDYgKzE4LDggQEAKICNpbmNsdWRlICJpODA0Mi1qYXp6aW8uaCIKICNlbGlmIGRlZmluZWQoQ09ORklHX1NHSV9IQVNfSTgwNDIpCiAjaW5jbHVkZSAiaTgwNDItaXAyMmlvLmgiCisjZWxpZiBkZWZpbmVkKENPTkZJR19TTklfUk0pCisjaW5jbHVkZSAiaTgwNDItc25pcm0uaCIKICNlbGlmIGRlZmluZWQoQ09ORklHX1BQQykKICNpbmNsdWRlICJpODA0Mi1wcGNpby5oIgogI2VsaWYgZGVmaW5lZChDT05GSUdfU1BBUkMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbS5oIGIvZHJpdmVycy9pbnB1dC90YWJsZXQvd2Fjb20uaAppbmRleCA2NTQyZWRiLi5hY2Y5ODMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbS5oCisrKyBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tLmgKQEAgLTExLDcgKzExLDcgQEAKICAqICBDb3B5cmlnaHQgKGMpIDIwMDAgRGFuaWVsIEVnZ2VyCQk8ZWdnZXJAc3VzZS5kZT4KICAqICBDb3B5cmlnaHQgKGMpIDIwMDEgRnJlZGVyaWMgTGVwaWVkCQk8ZmxlcGllZEBtYW5kcmFrZXNvZnQuY29tPgogICogIENvcHlyaWdodCAoYykgMjAwNCBQYW5hZ2lvdGlzIElzc2FyaXMJPHBhbmFnaW90aXMuaXNzYXJpc0BtZWNoLmt1bGV1dmVuLmFjLmJlPgotICogIENvcHlyaWdodCAoYykgMjAwMi0yMDA3IFBpbmcgQ2hlbmcJCTxwaW5nY0B3YWNvbS5jb20+CisgKiAgQ29weXJpZ2h0IChjKSAyMDAyLTIwMDggUGluZyBDaGVuZwkJPHBpbmdjQHdhY29tLmNvbT4KICAqCiAgKiAgQ2hhbmdlTG9nOgogICogICAgICB2MC4xICh2cCkgIC0gSW5pdGlhbCByZWxlYXNlCkBAIC02NSw2ICs2NSw3IEBACiAgKgkJICAgLSBhbmQgd2Fjb21fd2FjLmMgZGVhbHMgd2l0aCBXYWNvbSBzcGVjaWZpYyBjb2RlCiAgKgkJICAgLSBTdXBwb3J0IEludHVvczMgNHg2CiAgKiAgICAgIHYxLjQ3IChwYykgLSBBZGRlZCBzdXBwb3J0IGZvciBCYW1ib28KKyAqICAgICAgdjEuNDggKHBjKSAtIEFkZGVkIHN1cHBvcnQgZm9yIEJhbWJvbzEsIEJhbWJvb0Z1biwgYW5kIENpbnRpcSAxMldYCiAgKi8KIAogLyoKQEAgLTg1LDcgKzg2LDcgQEAKIC8qCiAgKiBWZXJzaW9uIEluZm9ybWF0aW9uCiAgKi8KLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYxLjQ3IgorI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjEuNDgiCiAjZGVmaW5lIERSSVZFUl9BVVRIT1IgIlZvanRlY2ggUGF2bGlrIDx2b2p0ZWNoQHVjdy5jej4iCiAjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgV2Fjb20gR3JhcGhpcmUgYW5kIFdhY29tIEludHVvcyB0YWJsZXQgZHJpdmVyIgogI2RlZmluZSBEUklWRVJfTElDRU5TRSAiR1BMIgpAQCAtMTI1LDYgKzEyNiw3IEBACiBleHRlcm4gdm9pZCBpbnB1dF9kZXZfcGwoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2LCBzdHJ1Y3Qgd2Fjb21fd2FjICp3YWNvbV93YWMpOwogZXh0ZXJuIHZvaWQgaW5wdXRfZGV2X3B0KHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2Rldiwgc3RydWN0IHdhY29tX3dhYyAqd2Fjb21fd2FjKTsKIGV4dGVybiB2b2lkIGlucHV0X2Rldl9tbyhzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYsIHN0cnVjdCB3YWNvbV93YWMgKndhY29tX3dhYyk7CitleHRlcm4gdm9pZCBpbnB1dF9kZXZfYmVlKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2Rldiwgc3RydWN0IHdhY29tX3dhYyAqd2Fjb21fd2FjKTsKIGV4dGVybiBfX3UxNiB3YWNvbV9sZTE2X3RvX2NwdSh1bnNpZ25lZCBjaGFyICpkYXRhKTsKIGV4dGVybiBfX3UxNiB3YWNvbV9iZTE2X3RvX2NwdSh1bnNpZ25lZCBjaGFyICpkYXRhKTsKIGV4dGVybiBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgKiBnZXRfd2Fjb21fZmVhdHVyZShjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90YWJsZXQvd2Fjb21fc3lzLmMgYi9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV9zeXMuYwppbmRleCBkNjRiMWVhMS4uNDFjYWFlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90YWJsZXQvd2Fjb21fc3lzLmMKKysrIGIvZHJpdmVycy9pbnB1dC90YWJsZXQvd2Fjb21fc3lzLmMKQEAgLTE3MSw2ICsxNzEsNyBAQAogCWlucHV0X2Rldi0+a2V5Yml0W0JJVF9XT1JEKEJUTl9MRUZUKV0gfD0gQklUX01BU0soQlROXzApIHwKIAkJQklUX01BU0soQlROXzEpIHwgQklUX01BU0soQlROXzIpIHwgQklUX01BU0soQlROXzMpOwogCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1JYLCAwLCA0MDk2LCAwLCAwKTsKKwlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19aLCAtOTAwLCA4OTksIDAsIDApOwogfQogCiB2b2lkIGlucHV0X2Rldl9pMyhzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYsIHN0cnVjdCB3YWNvbV93YWMgKndhY29tX3dhYykKQEAgLTE4MCw2ICsxODEsMTEgQEAKIAlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19SWSwgMCwgNDA5NiwgMCwgMCk7CiB9CiAKK3ZvaWQgaW5wdXRfZGV2X2JlZShzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYsIHN0cnVjdCB3YWNvbV93YWMgKndhY29tX3dhYykKK3sKKwlpbnB1dF9kZXYtPmtleWJpdFtCSVRfV09SRChCVE5fTEVGVCldIHw9IEJJVF9NQVNLKEJUTl84KSB8IEJJVF9NQVNLKEJUTl85KTsKK30KKwogdm9pZCBpbnB1dF9kZXZfaShzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYsIHN0cnVjdCB3YWNvbV93YWMgKndhY29tX3dhYykKIHsKIAlpbnB1dF9kZXYtPmV2Yml0WzBdIHw9IEJJVF9NQVNLKEVWX01TQykgfCBCSVRfTUFTSyhFVl9SRUwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90YWJsZXQvd2Fjb21fd2FjLmMgYi9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV93YWMuYwppbmRleCBmYzAzYmEyLi5mZmUzMzg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV93YWMuYworKysgYi9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV93YWMuYwpAQCAtMTYzLDcgKzE2Myw5IEBACiAJfQogCiAJaWQgPSBTVFlMVVNfREVWSUNFX0lEOwotCWlmIChkYXRhWzFdICYgMHg4MCkgeyAvKiBpbiBwcm94ICovCisJaWYgKChkYXRhWzFdICYgMHg4MCkgJiYgKChkYXRhWzFdICYgMHgwNykgfHwgZGF0YVsyXSB8fCBkYXRhWzNdIHx8IGRhdGFbNF0KKwkJCXx8IGRhdGFbNV0gfHwgZGF0YVs2XSB8fCAoZGF0YVs3XSAmIDB4MDcpKSkgeworCQkvKiBpbiBwcm94IGFuZCBub3QgYSBwYWQgZGF0YSAqLwogCiAJCXN3aXRjaCAoKGRhdGFbMV0gPj4gNSkgJiAzKSB7CiAKQEAgLTIzMyw3ICsyMzUsNiBAQAogCQlpZiAoZGF0YVs3XSAmIDB4ZjgpIHsKIAkJCXdhY29tX2lucHV0X3N5bmMod2NvbWJvKTsgLyogc3luYyBsYXN0IGV2ZW50ICovCiAJCQl3YWNvbS0+aWRbMV0gPSAxOwotCQkJd2Fjb20tPnNlcmlhbFsxXSA9IChkYXRhWzddICYgMHhmOCk7CiAJCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgQlROXzAsIChkYXRhWzddICYgMHg0MCkpOwogCQkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIEJUTl80LCAoZGF0YVs3XSAmIDB4ODApKTsKIAkJCXJ3ID0gKChkYXRhWzddICYgMHgxOCkgPj4gMykgLSAoKGRhdGFbN10gJiAweDIwKSA+PiAzKTsKQEAgLTI1MiwxMCArMjUzLDkgQEAKIAkJfQogCQlicmVhazsKIAkgICAgY2FzZSBXQUNPTV9NTzoKLQkJaWYgKChkYXRhWzddICYgMHhmOCkgfHwgKGRhdGFbOF0gJiAweDgwKSkgeworCQlpZiAoKGRhdGFbN10gJiAweGY4KSB8fCAoZGF0YVs4XSAmIDB4ZmYpKSB7CiAJCQl3YWNvbV9pbnB1dF9zeW5jKHdjb21ibyk7IC8qIHN5bmMgbGFzdCBldmVudCAqLwogCQkJd2Fjb20tPmlkWzFdID0gMTsKLQkJCXdhY29tLT5zZXJpYWxbMV0gPSAoZGF0YVs3XSAmIDB4ZjgpOwogCQkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIEJUTl8wLCAoZGF0YVs3XSAmIDB4MDgpKTsKIAkJCXdhY29tX3JlcG9ydF9rZXkod2NvbWJvLCBCVE5fMSwgKGRhdGFbN10gJiAweDIwKSk7CiAJCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgQlROXzQsIChkYXRhWzddICYgMHgxMCkpOwpAQCAtNDM0LDEwICs0MzQsMTIgQEAKIAkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIEJUTl81LCAoZGF0YVs2XSAmIDB4MDIpKTsKIAkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIEJUTl82LCAoZGF0YVs2XSAmIDB4MDQpKTsKIAkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIEJUTl83LCAoZGF0YVs2XSAmIDB4MDgpKTsKKwkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIEJUTl84LCAoZGF0YVs1XSAmIDB4MTApKTsKKwkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIEJUTl85LCAoZGF0YVs2XSAmIDB4MTApKTsKIAkJd2Fjb21fcmVwb3J0X2Ficyh3Y29tYm8sIEFCU19SWCwgKChkYXRhWzFdICYgMHgxZikgPDwgOCkgfCBkYXRhWzJdKTsKIAkJd2Fjb21fcmVwb3J0X2Ficyh3Y29tYm8sIEFCU19SWSwgKChkYXRhWzNdICYgMHgxZikgPDwgOCkgfCBkYXRhWzRdKTsKIAotCQlpZigoZGF0YVs1XSAmIDB4MGYpIHwgKGRhdGFbNl0gJiAweDBmKSB8IChkYXRhWzFdICYgMHgxZikgfAorCQlpZiAoKGRhdGFbNV0gJiAweDFmKSB8IChkYXRhWzZdICYgMHgxZikgfCAoZGF0YVsxXSAmIDB4MWYpIHwKIAkJCWRhdGFbMl0gfCAoZGF0YVszXSAmIDB4MWYpIHwgZGF0YVs0XSkKIAkJCXdhY29tX3JlcG9ydF9rZXkod2NvbWJvLCB3YWNvbS0+dG9vbFsxXSwgMSk7CiAJCWVsc2UKQEAgLTQ4MSwxMyArNDgzLDExIEBACiAJCWlmIChkYXRhWzFdICYgMHgwMikgewogCQkJLyogUm90YXRpb24gcGFja2V0ICovCiAJCQlpZiAod2Fjb20tPmZlYXR1cmVzLT50eXBlID49IElOVFVPUzNTKSB7Ci0JCQkJLyogSTMgbWFya2VyIHBlbiByb3RhdGlvbiByZXBvcnRlZCBhcyB3aGVlbAotCQkJCSAqIGR1ZSB0byB2YWx1YXRvciBsaW1pdGF0aW9uCi0JCQkJICovCisJCQkJLyogSTMgbWFya2VyIHBlbiByb3RhdGlvbiAqLwogCQkJCXQgPSAoZGF0YVs2XSA8PCAzKSB8ICgoZGF0YVs3XSA+PiA1KSAmIDcpOwogCQkJCXQgPSAoZGF0YVs3XSAmIDB4MjApID8gKCh0ID4gOTAwKSA/ICgodC0xKSAvIDIgLSAxMzUwKSA6CiAJCQkJCSgodC0xKSAvIDIgKyA0NTApKSA6ICg0NTAgLSB0IC8gMikgOwotCQkJCXdhY29tX3JlcG9ydF9hYnMod2NvbWJvLCBBQlNfV0hFRUwsIHQpOworCQkJCXdhY29tX3JlcG9ydF9hYnMod2NvbWJvLCBBQlNfWiwgdCk7CiAJCQl9IGVsc2UgewogCQkJCS8qIDREIG1vdXNlIHJvdGF0aW9uIHBhY2tldCAqLwogCQkJCXQgPSAoZGF0YVs2XSA8PCAzKSB8ICgoZGF0YVs3XSA+PiA1KSAmIDcpOwpAQCAtNTU4LDYgKzU1OCw3IEBACiAJCWNhc2UgSU5UVU9TMzoKIAkJY2FzZSBJTlRVT1MzTDoKIAkJY2FzZSBDSU5USVE6CisJCWNhc2UgV0FDT01fQkVFOgogCQkJcmV0dXJuICh3YWNvbV9pbnR1b3NfaXJxKHdhY29tX3dhYywgd2NvbWJvKSk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKQEAgLTU3Nyw2ICs1NzgsOCBAQAogCQljYXNlIEdSQVBISVJFOgogCQkJaW5wdXRfZGV2X2coaW5wdXRfZGV2LCB3YWNvbV93YWMpOwogCQkJYnJlYWs7CisJCWNhc2UgV0FDT01fQkVFOgorCQkJaW5wdXRfZGV2X2JlZShpbnB1dF9kZXYsIHdhY29tX3dhYyk7CiAJCWNhc2UgSU5UVU9TMzoKIAkJY2FzZSBJTlRVT1MzTDoKIAkJY2FzZSBDSU5USVE6CkBAIC02MDcsMTIgKzYxMCwxNSBAQAogCXsgIldhY29tIEdyYXBoaXJlMyA2eDgiLCA4LCAgMTY3MDQsIDEyMDY0LCAgNTExLCA2MywgR1JBUEhJUkUgfSwKIAl7ICJXYWNvbSBHcmFwaGlyZTQgNHg1IiwgOCwgIDEwMjA4LCAgNzQyNCwgIDUxMSwgNjMsIFdBQ09NX0c0IH0sCiAJeyAiV2Fjb20gR3JhcGhpcmU0IDZ4OCIsIDgsICAxNjcwNCwgMTIwNjQsICA1MTEsIDYzLCBXQUNPTV9HNCB9LAorCXsgIldhY29tIEJhbWJvb0Z1biA0eDUiLCA5LCAgMTQ3NjAsICA5MjI1LCAgNTExLCA2MywgV0FDT01fTU8gfSwKKwl7ICJXYWNvbSBCYW1ib29GdW4gNng4IiwgOSwgIDIxNjQ4LCAxMzUzMCwgIDUxMSwgNjMsIFdBQ09NX01PIH0sCiAJeyAiV2Fjb20gVm9saXRvIiwgICAgICAgIDgsICAgNTEwNCwgIDM3MTIsICA1MTEsIDYzLCBHUkFQSElSRSB9LAogCXsgIldhY29tIFBlblN0YXRpb24yIiwgICA4LCAgIDMyNTAsICAyMzIwLCAgMjU1LCA2MywgR1JBUEhJUkUgfSwKIAl7ICJXYWNvbSBWb2xpdG8yIDR4NSIsICAgOCwgICA1MTA0LCAgMzcxMiwgIDUxMSwgNjMsIEdSQVBISVJFIH0sCiAJeyAiV2Fjb20gVm9saXRvMiAyeDMiLCAgIDgsICAgMzI0OCwgIDIzMjAsICA1MTEsIDYzLCBHUkFQSElSRSB9LAotCXsgIldhY29tIFBlblBhcnRuZXIyIiwgICA4LCAgIDMyNTAsICAyMzIwLCAgMjU1LCA2MywgR1JBUEhJUkUgfSwKKwl7ICJXYWNvbSBQZW5QYXJ0bmVyMiIsICAgOCwgICAzMjUwLCAgMjMyMCwgIDUxMSwgNjMsIEdSQVBISVJFIH0sCiAJeyAiV2Fjb20gQmFtYm9vIiwgICAgICAgIDksICAxNDc2MCwgIDkyMjUsICA1MTEsIDYzLCBXQUNPTV9NTyB9LAorCXsgIldhY29tIEJhbWJvbzEiLCAgICAgICA4LCAgIDUxMDQsICAzNzEyLCAgNTExLCA2MywgR1JBUEhJUkUgfSwKIAl7ICJXYWNvbSBJbnR1b3MgNHg1IiwgICAxMCwgIDEyNzAwLCAxMDYwMCwgMTAyMywgMzEsIElOVFVPUyB9LAogCXsgIldhY29tIEludHVvcyA2eDgiLCAgIDEwLCAgMjAzMjAsIDE2MjQwLCAxMDIzLCAzMSwgSU5UVU9TIH0sCiAJeyAiV2Fjb20gSW50dW9zIDl4MTIiLCAgMTAsICAzMDQ4MCwgMjQwNjAsIDEwMjMsIDMxLCBJTlRVT1MgfSwKQEAgLTY0Myw2ICs2NDksNyBAQAogCXsgIldhY29tIEludHVvczMgNngxMSIsICAxMCwgNTQyMDQsIDMxNzUwLCAxMDIzLCA2MywgSU5UVU9TMyB9LAogCXsgIldhY29tIEludHVvczMgNHg2IiwgICAxMCwgMzE0OTYsIDE5Njg1LCAxMDIzLCA2MywgSU5UVU9TM1MgfSwKIAl7ICJXYWNvbSBDaW50aXEgMjFVWCIsICAgMTAsIDg3MjAwLCA2NTYwMCwgMTAyMywgNjMsIENJTlRJUSB9LAorCXsgIldhY29tIENpbnRpcSAxMldYIiwgICAxMCwgNTMwMjAsIDMzNDQwLCAxMDIzLCA2MywgV0FDT01fQkVFIH0sCiAJeyAiV2Fjb20gSW50dW9zMiA2eDgiLCAgIDEwLCAyMDMyMCwgMTYyNDAsIDEwMjMsIDMxLCBJTlRVT1MgfSwKIAl7IH0KIH07CkBAIC02NTYsMTIgKzY2MywxNSBAQAogCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDE0KSB9LAogCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDE1KSB9LAogCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDE2KSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDE3KSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDE4KSB9LAogCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDYwKSB9LAogCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDYxKSB9LAogCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDYyKSB9LAogCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDYzKSB9LAogCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDY0KSB9LAogCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDY1KSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDY5KSB9LAogCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDIwKSB9LAogCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDIxKSB9LAogCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDIyKSB9LApAQCAtNjkyLDYgKzcwMiw3IEBACiAJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4QjUpIH0sCiAJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4QjcpIH0sCiAJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4M0YpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4QzYpIH0sCiAJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4NDcpIH0sCiAJeyB9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90YWJsZXQvd2Fjb21fd2FjLmggYi9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV93YWMuaAppbmRleCBhMzAyZTIyLi4zMzQyYmMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV93YWMuaAorKysgYi9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV93YWMuaApAQCAtMjUsNiArMjUsNyBAQAogCUlOVFVPUzMsCiAJSU5UVU9TM0wsCiAJQ0lOVElRLAorCVdBQ09NX0JFRSwKIAlXQUNPTV9NTywKIAlNQVhfVFlQRQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWRzNzg0Ni5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZHM3ODQ2LmMKaW5kZXggNTg5MzRhNC4uNTdhMWMyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZHM3ODQ2LmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZHM3ODQ2LmMKQEAgLTIxMyw3ICsyMTMsNyBAQAogCXN0cnVjdCBhZHM3ODQ2CQkqdHMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3Qgc2VyX3JlcQkJKnJlcSA9IGt6YWxsb2Moc2l6ZW9mICpyZXEsIEdGUF9LRVJORUwpOwogCWludAkJCXN0YXR1czsKLQlpbnQJCQlzYW1wbGU7CisJaW50CQkJdW5pbml0aWFsaXplZF92YXIoc2FtcGxlKTsKIAlpbnQJCQl1c2VfaW50ZXJuYWw7CiAKIAlpZiAoIXJlcSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuYyBiL2RyaXZlcnMvbWQvbWQuYwppbmRleCBjY2JiZjYzLi42MWNjYmQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL21kLmMKKysrIGIvZHJpdmVycy9tZC9tZC5jCkBAIC0xODY0LDE3ICsxODY0LDYgQEAKIF9fQVRUUihzdGF0ZSwgU19JUlVHT3xTX0lXVVNSLCBzdGF0ZV9zaG93LCBzdGF0ZV9zdG9yZSk7CiAKIHN0YXRpYyBzc2l6ZV90Ci1zdXBlcl9zaG93KG1ka19yZGV2X3QgKnJkZXYsIGNoYXIgKnBhZ2UpCi17Ci0JaWYgKHJkZXYtPnNiX2xvYWRlZCAmJiByZGV2LT5zYl9zaXplKSB7Ci0JCW1lbWNweShwYWdlLCBwYWdlX2FkZHJlc3MocmRldi0+c2JfcGFnZSksIHJkZXYtPnNiX3NpemUpOwotCQlyZXR1cm4gcmRldi0+c2Jfc2l6ZTsKLQl9IGVsc2UKLQkJcmV0dXJuIDA7Ci19Ci1zdGF0aWMgc3RydWN0IHJkZXZfc3lzZnNfZW50cnkgcmRldl9zdXBlciA9IF9fQVRUUl9STyhzdXBlcik7Ci0KLXN0YXRpYyBzc2l6ZV90CiBlcnJvcnNfc2hvdyhtZGtfcmRldl90ICpyZGV2LCBjaGFyICpwYWdlKQogewogCXJldHVybiBzcHJpbnRmKHBhZ2UsICIlZFxuIiwgYXRvbWljX3JlYWQoJnJkZXYtPmNvcnJlY3RlZF9lcnJvcnMpKTsKQEAgLTIwNjAsNyArMjA0OSw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpyZGV2X2RlZmF1bHRfYXR0cnNbXSA9IHsKIAkmcmRldl9zdGF0ZS5hdHRyLAotCSZyZGV2X3N1cGVyLmF0dHIsCiAJJnJkZXZfZXJyb3JzLmF0dHIsCiAJJnJkZXZfc2xvdC5hdHRyLAogCSZyZGV2X29mZnNldC5hdHRyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkNS5jIGIvZHJpdmVycy9tZC9yYWlkNS5jCmluZGV4IDJkNmYxYTUuLmM1NzRjZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDUuYworKysgYi9kcml2ZXJzL21kL3JhaWQ1LmMKQEAgLTExNDMsNyArMTE0Myw3IEBACiAJCQlyZGV2ID0gY29uZi0+ZGlza3NbaV0ucmRldjsKIAkJCXByaW50ayhLRVJOX0lORk8gInJhaWQ1OiVzOiByZWFkIGVycm9yIGNvcnJlY3RlZCAoJWx1IHNlY3RvcnMgYXQgJWxsdSBvbiAlcylcbiIsCiAJCQkgICAgICAgbWRuYW1lKGNvbmYtPm1kZGV2KSwgU1RSSVBFX1NFQ1RPUlMsCi0JCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylzaC0+c2VjdG9yICsgcmRldi0+ZGF0YV9vZmZzZXQsCisJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykoc2gtPnNlY3RvciArIHJkZXYtPmRhdGFfb2Zmc2V0KSwKIAkJCSAgICAgICBiZGV2bmFtZShyZGV2LT5iZGV2LCBiKSk7CiAJCQljbGVhcl9iaXQoUjVfUmVhZEVycm9yLCAmc2gtPmRldltpXS5mbGFncyk7CiAJCQljbGVhcl9iaXQoUjVfUmVXcml0ZSwgJnNoLT5kZXZbaV0uZmxhZ3MpOwpAQCAtMTE2MCwxMyArMTE2MCwxMyBAQAogCQlpZiAoY29uZi0+bWRkZXYtPmRlZ3JhZGVkKQogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAicmFpZDU6JXM6IHJlYWQgZXJyb3Igbm90IGNvcnJlY3RhYmxlIChzZWN0b3IgJWxsdSBvbiAlcykuXG4iLAogCQkJICAgICAgIG1kbmFtZShjb25mLT5tZGRldiksCi0JCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylzaC0+c2VjdG9yICsgcmRldi0+ZGF0YV9vZmZzZXQsCisJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykoc2gtPnNlY3RvciArIHJkZXYtPmRhdGFfb2Zmc2V0KSwKIAkJCSAgICAgICBiZG4pOwogCQllbHNlIGlmICh0ZXN0X2JpdChSNV9SZVdyaXRlLCAmc2gtPmRldltpXS5mbGFncykpCiAJCQkvKiBPaCwgbm8hISEgKi8KIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgInJhaWQ1OiVzOiByZWFkIGVycm9yIE5PVCBjb3JyZWN0ZWQhISAoc2VjdG9yICVsbHUgb24gJXMpLlxuIiwKIAkJCSAgICAgICBtZG5hbWUoY29uZi0+bWRkZXYpLAotCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpc2gtPnNlY3RvciArIHJkZXYtPmRhdGFfb2Zmc2V0LAorCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpKHNoLT5zZWN0b3IgKyByZGV2LT5kYXRhX29mZnNldCksCiAJCQkgICAgICAgYmRuKTsKIAkJZWxzZSBpZiAoYXRvbWljX3JlYWQoJnJkZXYtPnJlYWRfZXJyb3JzKQogCQkJID4gY29uZi0+bWF4X25yX3N0cmlwZXMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL29wZXJhMS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9vcGVyYTEuYwppbmRleCAyMTkzNWJmLi4zMDJjYzY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL29wZXJhMS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2Ivb3BlcmExLmMKQEAgLTQ3OCw5ICs0NzgsOSBAQAogCQkJCWVycigiY291bGQgbm90IHJlc3RhcnQgdGhlIFVTQiBjb250cm9sbGVyIENQVS4iKTsKIAkJCQlyZXQgPSAtRUlOVkFMOwogCQkJfQotCQkJa2ZyZWUocCk7CiAJCX0KIAl9CisJa2ZyZWUocCk7CiAJaWYgKGZ3KSB7CiAJCXJlbGVhc2VfZmlybXdhcmUoZncpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZwppbmRleCAzNzA3MmEyLi4xODMyOTY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnCkBAIC0zMDUsNyArMzA1LDcgQEAKIAogY29uZmlnIFZJREVPX0NYMjM0MVgKIAl0cmlzdGF0ZSAiQ29uZXhhbnQgQ1gyMzQxeCBNUEVHIGVuY29kZXJzIgotCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgRVhQRVJJTUVOVEFMICYmIFZJREVPX1Y0TDJfQ09NTU9OCiAJLS0taGVscC0tLQogCSAgU3VwcG9ydCBmb3IgdGhlIENvbmV4YW50IENYMjM0MTYgTVBFRyBlbmNvZGVycwogCSAgYW5kIENYMjM0MTUgTVBFRyBlbmNvZGVyL2RlY29kZXJzLgpAQCAtMzgyLDcgKzM4Miw3IEBACiAKIGNvbmZpZyBWSURFT19WSVZJCiAJdHJpc3RhdGUgIlZpcnR1YWwgVmlkZW8gRHJpdmVyIgotCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiAhU1BBUkMzMiAmJiAhU1BBUkM2NAorCWRlcGVuZHMgb24gVklERU9fREVWICYmIFZJREVPX1Y0TDIgJiYgIVNQQVJDMzIgJiYgIVNQQVJDNjQKIAlzZWxlY3QgVklERU9CVUZfVk1BTExPQwogCWRlZmF1bHQgbgogCS0tLWhlbHAtLS0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1kcml2ZXIuYwppbmRleCA1NDA0ZmNjLi5hMDgwYzE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWRyaXZlci5jCkBAIC0zMzg5LDcgKzMzODksNiBAQAogCS52aWRpb2NnbWJ1ZiAgICAgICAgICAgICAgICAgICAgPSB2aWRpb2NnbWJ1ZiwKICNlbmRpZgogCS52aWRpb2NfZ19jcm9wICAgICAgICAgICAgICAgICAgPSBidHR2X2dfY3JvcCwKLQkudmlkaW9jX2dfY3JvcCAgICAgICAgICAgICAgICAgID0gYnR0dl9nX2Nyb3AsCiAJLnZpZGlvY19zX2Nyb3AgICAgICAgICAgICAgICAgICA9IGJ0dHZfc19jcm9wLAogCS52aWRpb2NfZ19mYnVmICAgICAgICAgICAgICAgICAgPSBidHR2X2dfZmJ1ZiwKIAkudmlkaW9jX3NfZmJ1ZiAgICAgICAgICAgICAgICAgID0gYnR0dl9zX2ZidWYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY2FyZHMuYwppbmRleCBlNmI3ZjUxLi44YzlhOGFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNhcmRzLmMKQEAgLTIxOTYsNiArMjE5NiwxMSBAQAogCWN4ODhfcmVzZXQoY29yZSk7CiAJY3g4OF9jYXJkX3NldHVwX3ByZV9pMmMoY29yZSk7CiAJY3g4OF9pMmNfaW5pdChjb3JlLCBwY2kpOworCisJLyogbG9hZCB0dW5lciBtb2R1bGUsIGlmIG5lZWRlZCAqLworCWlmIChUVU5FUl9BQlNFTlQgIT0gY29yZS0+Ym9hcmQudHVuZXJfdHlwZSkKKwkJcmVxdWVzdF9tb2R1bGUoInR1bmVyIik7CisKIAljeDg4X2NhbGxfaTJjX2NsaWVudHMgKGNvcmUsIFRVTkVSX1NFVF9TVEFOREJZLCBOVUxMKTsKIAljeDg4X2NhcmRfc2V0dXAoY29yZSk7CiAJY3g4OF9pcl9pbml0KGNvcmUsIHBjaSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdmlkZW8uYwppbmRleCA3ZjE5MzFhLi4yMjcxNzk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXZpZGVvLmMKQEAgLTE4MjYsOCArMTgyNiw2IEBACiAJY3hfc2V0KE1PX1BDSV9JTlRNU0ssIGNvcmUtPnBjaV9pcnFtYXNrKTsKIAogCS8qIGxvYWQgYW5kIGNvbmZpZ3VyZSBoZWxwZXIgbW9kdWxlcyAqLwotCWlmIChUVU5FUl9BQlNFTlQgIT0gY29yZS0+Ym9hcmQudHVuZXJfdHlwZSkKLQkJcmVxdWVzdF9tb2R1bGUoInR1bmVyIik7CiAKIAlpZiAoY29yZS0+Ym9hcmQuYXVkaW9fY2hpcCA9PSBBVURJT19DSElQX1dNODc3NSkKIAkJcmVxdWVzdF9tb2R1bGUoIndtODc3NSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jb3JlLmMKaW5kZXggN2QxNTM3Yy4uYzFjYWFhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY29yZS5jCkBAIC0yNjcsNyArMjY3LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgewogCQlpZiAoKHJldCA9IGVtMjh4eF9yZWFkX3JlZyhkZXYsIEFDOTdCVVNZX1JFRykpIDwgMCkKIAkJCXJldHVybiByZXQ7Ci0JCWlmICghKCh1OCkgcmV0KSAmIDB4MDEpCisJCWlmICghKHJldCAmIDB4MDEpKQogCQkJcmV0dXJuIDA7CiAJCW1zbGVlcCg1KTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5jCmluZGV4IGQ0MmYxMjAuLjk0OGNhMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5jCkBAIC01NCw3ICs1NCw2IEBACiAjaW5jbHVkZSAiaXZ0di12YmkuaCIKICNpbmNsdWRlICJpdnR2LXJvdXRpbmcuaCIKICNpbmNsdWRlICJpdnR2LWdwaW8uaCIKLSNpbmNsdWRlICJpdnR2LXl1di5oIgogCiAjaW5jbHVkZSA8bWVkaWEvdHZlZXByb20uaD4KICNpbmNsdWRlIDxtZWRpYS9zYWE3MTE1Lmg+CkBAIC03MDAsNiArNjk5LDkgQEAKIAlpdHYtPnZiaS5pbi50eXBlID0gVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX0NBUFRVUkU7CiAJaXR2LT52Ymkuc2xpY2VkX2luID0gJml0di0+dmJpLmluLmZtdC5zbGljZWQ7CiAKKwkvKiBJbml0IHRoZSBzZyB0YWJsZSBmb3Igb3NkL3l1diBvdXRwdXQgKi8KKwlzZ19pbml0X3RhYmxlKGl0di0+dWRtYS5TR2xpc3QsIElWVFZfRE1BX1NHX09TRF9FTlQpOworCiAJLyogT1NEICovCiAJaXR2LT5vc2RfZ2xvYmFsX2FscGhhX3N0YXRlID0gMTsKIAlpdHYtPm9zZF9nbG9iYWxfYWxwaGEgPSAyNTU7CkBAIC0xMDUzLDkgKzEwNTUsNiBAQAogCQlnb3RvIGZyZWVfaW87CiAJfQogCi0JLyogQ2hlY2sgeXV2IG91dHB1dCBmaWx0ZXIgdGFibGUgKi8KLQlpZiAoaXR2LT5oYXNfY3gyMzQxNSkgaXZ0dl95dXZfZmlsdGVyX2NoZWNrKGl0dik7Ci0KIAlpdnR2X2dwaW9faW5pdChpdHYpOwogCiAJLyogYWN0aXZlIGkyYyAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWZpcm13YXJlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1maXJtd2FyZS5jCmluZGV4IDQyNWViMTAuLjZkYmE1NWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWZpcm13YXJlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZmlybXdhcmUuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgIml2dHYtZHJpdmVyLmgiCiAjaW5jbHVkZSAiaXZ0di1tYWlsYm94LmgiCiAjaW5jbHVkZSAiaXZ0di1maXJtd2FyZS5oIgorI2luY2x1ZGUgIml2dHYteXV2LmgiCiAjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KIAogI2RlZmluZSBJVlRWX01BU0tfU1BVX0VOQUJMRSAJCTB4RkZGRkZGRkUKQEAgLTIyNSwxMSArMjI2LDE0IEBACiAJCXJldHVybiAwOwogCiAJaXR2LT5kZWNfbWJveC5tYm94ID0gaXZ0dl9zZWFyY2hfbWFpbGJveChpdHYtPmRlY19tZW0sIElWVFZfREVDT0RFUl9TSVpFKTsKLQlpZiAoaXR2LT5kZWNfbWJveC5tYm94ID09IE5VTEwpCisJaWYgKGl0di0+ZGVjX21ib3gubWJveCA9PSBOVUxMKSB7CiAJCUlWVFZfRVJSKCJEZWNvZGVyIG1haWxib3ggbm90IGZvdW5kXG4iKTsKLQllbHNlIGlmIChpdHYtPmhhc19jeDIzNDE1ICYmIGl2dHZfdmFwaShpdHYsIENYMjM0MVhfREVDX1BJTkdfRlcsIDApKSB7CisJfSBlbHNlIGlmIChpdHYtPmhhc19jeDIzNDE1ICYmIGl2dHZfdmFwaShpdHYsIENYMjM0MVhfREVDX1BJTkdfRlcsIDApKSB7CiAJCUlWVFZfRVJSKCJEZWNvZGVyIGZpcm13YXJlIGRlYWQhXG4iKTsKIAkJaXR2LT5kZWNfbWJveC5tYm94ID0gTlVMTDsKKwl9IGVsc2UgeworCQkvKiBGaXJtd2FyZSBva2F5LCBzbyBjaGVjayB5dXYgb3V0cHV0IGZpbHRlciB0YWJsZSAqLworCQlpdnR2X3l1dl9maWx0ZXJfY2hlY2soaXR2KTsKIAl9CiAJcmV0dXJuIGl0di0+ZGVjX21ib3gubWJveCA/IDAgOiAtRU5PREVWOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNhcmRzLmMKaW5kZXggMjYyODMwZC4uNmY1NzQ0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jCkBAIC0yNDg0LDI3ICsyNDg0LDI4IEBACiAJCS50dW5lcl9hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4MDgwMjAwMDAwLAotCQkuaW5wdXRzICAgICAgICAgPSB7ewotCQkJICAubmFtZSA9IG5hbWVfdHYsCi0JCQkgIC52bXV4ID0gNCwKLQkJCSAgLmFtdXggPSBUViwKLQkJCSAgLnR2ICAgPSAxLAotCQl9LHsKLQkJCSAgLm5hbWUgPSBuYW1lX2NvbXAxLAotCQkJICAudm11eCA9IDEsCi0JCQkgLmFtdXggPSBMSU5FMiwKLQkgICAgICAgfSx7Ci0JCQkgLm5hbWUgPSBuYW1lX2NvbXAyLAotCQkJIC52bXV4ID0gMCwKLQkJCSAgLmFtdXggPSBMSU5FMiwKLQkJfSx7Ci0JCQkgIC5uYW1lID0gbmFtZV9zdmlkZW8sCi0JCQkgIC52bXV4ID0gOCwKLQkJCSAgLmFtdXggPSBMSU5FMiwKLQkJfX0sCisJCS5pbnB1dHMgICAgICAgICA9IHsgeworCQkJLm5hbWUgPSBuYW1lX3R2LAorCQkJLnZtdXggPSA0LAorCQkJLmFtdXggPSBUViwKKwkJCS50diAgID0gMSwKKwkJfSwgeworCQkJLm5hbWUgPSBuYW1lX2NvbXAxLAorCQkJLnZtdXggPSAxLAorCQkJLmFtdXggPSBMSU5FMiwKKwkJfSwgeworCQkJLm5hbWUgPSBuYW1lX2NvbXAyLAorCQkJLnZtdXggPSAwLAorCQkJLmFtdXggPSBMSU5FMiwKKwkJfSwgeworCQkJLm5hbWUgPSBuYW1lX3N2aWRlbywKKwkJCS52bXV4ID0gOCwKKwkJCS5hbXV4ID0gTElORTIsCisJCX0gfSwKIAkJLnJhZGlvID0gewotCQkJICAubmFtZSA9IG5hbWVfcmFkaW8sCi0JCQkgIC5hbXV4ID0gTElORTEsCisJCQkubmFtZSA9IG5hbWVfcmFkaW8sCisJCQkuYW11eCA9IFRWLAorCQkJLmdwaW8gPSAweDAyMDAwMDAsCiAJCX0sCiAJfSwKIAlbU0FBNzEzNF9CT0FSRF9BU1VTVGVLX1A3MTMxX0RVQUxdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY29yZS5jCmluZGV4IDUyYmFhNGYuLjU4YWIxNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jb3JlLmMKQEAgLTEwMjIsMTIgKzEwMjIsMTMgQEAKIAlzYWE3MTM0X2kyY19yZWdpc3RlcihkZXYpOwogCiAJLyogaW5pdGlhbGl6ZSBoYXJkd2FyZSAjMiAqLworCWlmIChUVU5FUl9BQlNFTlQgIT0gZGV2LT50dW5lcl90eXBlKQorCQlyZXF1ZXN0X21vZHVsZSgidHVuZXIiKTsKIAlzYWE3MTM0X2JvYXJkX2luaXQyKGRldik7CisKIAlzYWE3MTM0X2h3aW5pdDIoZGV2KTsKIAogCS8qIGxvYWQgaTJjIGhlbHBlcnMgKi8KLQlpZiAoVFVORVJfQUJTRU5UICE9IGRldi0+dHVuZXJfdHlwZSkKLQkJcmVxdWVzdF9tb2R1bGUoInR1bmVyIik7CiAJaWYgKGNhcmRfaXNfZW1wcmVzcyhkZXYpKSB7CiAJCXJlcXVlc3RfbW9kdWxlKCJzYWE2NzUyaHMiKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2cDUxNTAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZwNTE1MC5jCmluZGV4IDQ0NWViYTQuLmQyODMxOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZwNTE1MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZwNTE1MC5jCkBAIC02NzIsNyArNjcyLDcgQEAKIAlpZiAoc3RkID09IFY0TDJfU1REX0FMTCkgewogCQl0dnA1MTUwX2VycigiVkJJIGNhbid0IGJlIGNvbmZpZ3VyZWQgd2l0aG91dCBrbm93aW5nIG51bWJlciBvZiBsaW5lc1xuIik7CiAJCXJldHVybiAwOwotCX0gZWxzZSBpZiAoc3RkICYmIFY0TDJfU1REXzYyNV81MCkgeworCX0gZWxzZSBpZiAoc3RkICYgVjRMMl9TVERfNjI1XzUwKSB7CiAJCS8qIERvbid0IGZvbGxvdyBOVFNDIExpbmUgbnVtYmVyIGNvbnZlbnNpb24gKi8KIAkJbGluZSArPSAzOwogCX0KQEAgLTcxOSw3ICs3MTksNyBAQAogCWlmIChzdGQgPT0gVjRMMl9TVERfQUxMKSB7CiAJCXR2cDUxNTBfZXJyKCJWQkkgY2FuJ3QgYmUgY29uZmlndXJlZCB3aXRob3V0IGtub3dpbmcgbnVtYmVyIG9mIGxpbmVzXG4iKTsKIAkJcmV0dXJuIDA7Ci0JfSBlbHNlIGlmIChzdGQgJiYgVjRMMl9TVERfNjI1XzUwKSB7CisJfSBlbHNlIGlmIChzdGQgJiBWNEwyX1NURF82MjVfNTApIHsKIAkJLyogRG9uJ3QgZm9sbG93IE5UU0MgTGluZSBudW1iZXIgY29udmVuc2lvbiAqLwogCQlsaW5lICs9IDM7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby91c2J2aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby91c2J2aWRlby5jCmluZGV4IGZiNDM0YjUuLjVkMzYzYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vdXNidmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3VzYnZpZGVvLmMKQEAgLTEwMzQsNiArMTAzNCwxMSBAQAogCQlpbmZvKCIlczogaWZhY2U9JWQuIGVuZHBvaW50PSQlMDJ4IHBhbGV0dGVCaXRzPSQlMDhseCIsCiAJCSAgICAgX19GVU5DVElPTl9fLCB1dmQtPmlmYWNlLCB1dmQtPnZpZGVvX2VuZHAsIHV2ZC0+cGFsZXR0ZUJpdHMpOwogCX0KKwlpZiAodXZkLT5kZXYgPT0gTlVMTCkgeworCQllcnIoIiVzOiB1dmQtPmRldiA9PSBOVUxMIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXV2ZC0+dmRldi5kZXY9Jih1dmQtPmRldi0+ZGV2KTsKIAlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZ1dmQtPnZkZXYsIFZGTF9UWVBFX0dSQUJCRVIsIHZpZGVvX25yKSA9PSAtMSkgewogCQllcnIoIiVzOiB2aWRlb19yZWdpc3Rlcl9kZXZpY2UgZmFpbGVkIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIC1FUElQRTsKQEAgLTEwNDEsMTAgKzEwNDYsNiBAQAogCWlmICh1dmQtPmRlYnVnID4gMSkgewogCQlpbmZvKCIlczogdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCkgc3VjY2Vzc2Z1bCIsIF9fRlVOQ1RJT05fXyk7CiAJfQotCWlmICh1dmQtPmRldiA9PSBOVUxMKSB7Ci0JCWVycigiJXM6IHV2ZC0+ZGV2ID09IE5VTEwiLCBfX0ZVTkNUSU9OX18pOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9CiAKIAlpbmZvKCIlcyBvbiAvZGV2L3ZpZGVvJWQ6IGNhbnZhcz0lcyB2aWRlb3NpemU9JXMiLAogCSAgICAgKHV2ZC0+aGFuZGxlICE9IE5VTEwpID8gdXZkLT5oYW5kbGUtPmRydk5hbWUgOiAiPz8/IiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMS1jb21wYXQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMS1jb21wYXQuYwppbmRleCBkY2YyMmEzLi41MGUxZmY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDEtY29tcGF0LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwxLWNvbXBhdC5jCkBAIC0zMDMsNyArMzAzLDExIEBACiAJewogCQlzdHJ1Y3QgdmlkZW9fY2FwYWJpbGl0eSAqY2FwID0gYXJnOwogCi0JCWNhcDIgPSBremFsbG9jKHNpemVvZigqY2FwMiksR0ZQX0tFUk5FTCk7CisJCWNhcDIgPSBremFsbG9jKHNpemVvZigqY2FwMiksIEdGUF9LRVJORUwpOworCQlpZiAoIWNhcDIpIHsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlicmVhazsKKwkJfQogCQltZW1zZXQoY2FwLCAwLCBzaXplb2YoKmNhcCkpOwogCQltZW1zZXQoJmZidWYyLCAwLCBzaXplb2YoZmJ1ZjIpKTsKIApAQCAtNDI2LDcgKzQzMCwxMSBAQAogCXsKIAkJc3RydWN0IHZpZGVvX3dpbmRvdwkqd2luID0gYXJnOwogCi0JCWZtdDIgPSBremFsbG9jKHNpemVvZigqZm10MiksR0ZQX0tFUk5FTCk7CisJCWZtdDIgPSBremFsbG9jKHNpemVvZigqZm10MiksIEdGUF9LRVJORUwpOworCQlpZiAoIWZtdDIpIHsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlicmVhazsKKwkJfQogCQltZW1zZXQod2luLDAsc2l6ZW9mKCp3aW4pKTsKIAogCQlmbXQyLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZOwpAQCAtNDY0LDcgKzQ3MiwxMSBAQAogCQlzdHJ1Y3QgdmlkZW9fd2luZG93CSp3aW4gPSBhcmc7CiAJCWludCBlcnIxLGVycjI7CiAKLQkJZm10MiA9IGt6YWxsb2Moc2l6ZW9mKCpmbXQyKSxHRlBfS0VSTkVMKTsKKwkJZm10MiA9IGt6YWxsb2Moc2l6ZW9mKCpmbXQyKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghZm10MikgeworCQkJZXJyID0gLUVOT01FTTsKKwkJCWJyZWFrOworCQl9CiAJCWZtdDItPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CiAJCWRydihpbm9kZSwgZmlsZSwgVklESU9DX1NUUkVBTU9GRiwgJmZtdDItPnR5cGUpOwogCQllcnIxID0gZHJ2KGlub2RlLCBmaWxlLCBWSURJT0NfR19GTVQsIGZtdDIpOwpAQCAtNTg2LDYgKzU5OCwxMiBAQAogCXsKIAkJc3RydWN0IHZpZGVvX3BpY3R1cmUJKnBpY3QgPSBhcmc7CiAKKwkJZm10MiA9IGt6YWxsb2Moc2l6ZW9mKCpmbXQyKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghZm10MikgeworCQkJZXJyID0gLUVOT01FTTsKKwkJCWJyZWFrOworCQl9CisKIAkJcGljdC0+YnJpZ2h0bmVzcyA9IGdldF92NGxfY29udHJvbChpbm9kZSwgZmlsZSwKIAkJCQkJCSAgIFY0TDJfQ0lEX0JSSUdIVE5FU1MsZHJ2KTsKIAkJcGljdC0+aHVlID0gZ2V0X3Y0bF9jb250cm9sKGlub2RlLCBmaWxlLApAQCAtNTk3LDcgKzYxNSw2IEBACiAJCXBpY3QtPndoaXRlbmVzcyA9IGdldF92NGxfY29udHJvbChpbm9kZSwgZmlsZSwKIAkJCQkJCSAgVjRMMl9DSURfV0hJVEVORVNTLCBkcnYpOwogCi0JCWZtdDIgPSBremFsbG9jKHNpemVvZigqZm10MiksR0ZQX0tFUk5FTCk7CiAJCWZtdDItPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CiAJCWVyciA9IGRydihpbm9kZSwgZmlsZSwgVklESU9DX0dfRk1ULCBmbXQyKTsKIAkJaWYgKGVyciA8IDApIHsKQEAgLTYxNyw2ICs2MzQsMTEgQEAKIAkJc3RydWN0IHZpZGVvX3BpY3R1cmUJKnBpY3QgPSBhcmc7CiAJCWludCBtZW1fZXJyID0gMCwgb3ZsX2VyciA9IDA7CiAKKwkJZm10MiA9IGt6YWxsb2Moc2l6ZW9mKCpmbXQyKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghZm10MikgeworCQkJZXJyID0gLUVOT01FTTsKKwkJCWJyZWFrOworCQl9CiAJCW1lbXNldCgmZmJ1ZjIsIDAsIHNpemVvZihmYnVmMikpOwogCiAJCXNldF92NGxfY29udHJvbChpbm9kZSwgZmlsZSwKQEAgLTYzNiw3ICs2NTgsNiBAQAogCQkgKiBkaWZmZXJlbnQgcGl4ZWwgZm9ybWF0cyBmb3IgbWVtb3J5IHZzIG92ZXJsYXkuCiAJCSAqLwogCi0JCWZtdDIgPSBremFsbG9jKHNpemVvZigqZm10MiksR0ZQX0tFUk5FTCk7CiAJCWZtdDItPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CiAJCWVyciA9IGRydihpbm9kZSwgZmlsZSwgVklESU9DX0dfRk1ULCBmbXQyKTsKIAkJLyogSWYgVklESU9DX0dfRk1UIGZhaWxlZCwgdGhlbiB0aGUgZHJpdmVyIGxpa2VseSBkb2Vzbid0CkBAIC04OTAsNyArOTExLDExIEBACiAJewogCQlzdHJ1Y3QgdmlkZW9fbW1hcAkqbW0gPSBhcmc7CiAKLQkJZm10MiA9IGt6YWxsb2Moc2l6ZW9mKCpmbXQyKSxHRlBfS0VSTkVMKTsKKwkJZm10MiA9IGt6YWxsb2Moc2l6ZW9mKCpmbXQyKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghZm10MikgeworCQkJZXJyID0gLUVOT01FTTsKKwkJCWJyZWFrOworCQl9CiAJCW1lbXNldCgmYnVmMiwwLHNpemVvZihidWYyKSk7CiAKIAkJZm10Mi0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKQEAgLTk4Niw3ICsxMDExLDExIEBACiAJewogCQlzdHJ1Y3QgdmJpX2Zvcm1hdCAgICAgICpmbXQgPSBhcmc7CiAKLQkJZm10MiA9IGt6YWxsb2Moc2l6ZW9mKCpmbXQyKSxHRlBfS0VSTkVMKTsKKwkJZm10MiA9IGt6YWxsb2Moc2l6ZW9mKCpmbXQyKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghZm10MikgeworCQkJZXJyID0gLUVOT01FTTsKKwkJCWJyZWFrOworCQl9CiAJCWZtdDItPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFOwogCiAJCWVyciA9IGRydihpbm9kZSwgZmlsZSwgVklESU9DX0dfRk1ULCBmbXQyKTsKQEAgLTEwMTgsOCArMTA0NywxMSBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQlmbXQyID0ga3phbGxvYyhzaXplb2YoKmZtdDIpLEdGUF9LRVJORUwpOwotCisJCWZtdDIgPSBremFsbG9jKHNpemVvZigqZm10MiksIEdGUF9LRVJORUwpOworCQlpZiAoIWZtdDIpIHsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlicmVhazsKKwkJfQogCQlmbXQyLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRTsKIAkJZm10Mi0+Zm10LnZiaS5zYW1wbGVzX3Blcl9saW5lID0gZm10LT5zYW1wbGVzX3Blcl9saW5lOwogCQlmbXQyLT5mbXQudmJpLnNhbXBsaW5nX3JhdGUgICAgPSBmbXQtPnNhbXBsaW5nX3JhdGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lbXN0aWNrL2NvcmUvbWVtc3RpY2suYyBiL2RyaXZlcnMvbWVtc3RpY2svY29yZS9tZW1zdGljay5jCmluZGV4IGRlODBkYmEuLjk0NmUzZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVtc3RpY2svY29yZS9tZW1zdGljay5jCisrKyBiL2RyaXZlcnMvbWVtc3RpY2svY29yZS9tZW1zdGljay5jCkBAIC0yNzYsOCArMjc2LDYgQEAKIAkJbXJxLT5uZWVkX2NhcmRfaW50ID0gMTsKIAllbHNlCiAJCW1ycS0+bmVlZF9jYXJkX2ludCA9IDA7Ci0KLQltcnEtPmdldF9pbnRfcmVnID0gMDsKIH0KIEVYUE9SVF9TWU1CT0wobWVtc3RpY2tfaW5pdF9yZXFfc2cpOwogCkBAIC0zMTEsOCArMzA5LDYgQEAKIAkJbXJxLT5uZWVkX2NhcmRfaW50ID0gMTsKIAllbHNlCiAJCW1ycS0+bmVlZF9jYXJkX2ludCA9IDA7Ci0KLQltcnEtPmdldF9pbnRfcmVnID0gMDsKIH0KIEVYUE9SVF9TWU1CT0wobWVtc3RpY2tfaW5pdF9yZXEpOwogCkBAIC0zNDIsNiArMzM4LDcgQEAKIAkJCWNhcmQtPmlkLmNsYXNzID0gaWRfcmVnLmNsYXNzOwogCQl9CiAJCWNvbXBsZXRlKCZjYXJkLT5tcnFfY29tcGxldGUpOworCQlkZXZfZGJnKCZjYXJkLT5kZXYsICJpZl9tb2RlID0gJTAyeFxuIiwgaWRfcmVnLmlmX21vZGUpOwogCQlyZXR1cm4gLUVBR0FJTjsKIAl9CiB9CkBAIC00MjIsNyArNDE5LDYgQEAKIHsKIAlob3N0LT5zZXRfcGFyYW0oaG9zdCwgTUVNU1RJQ0tfUE9XRVIsIE1FTVNUSUNLX1BPV0VSX09OKTsKIAlob3N0LT5zZXRfcGFyYW0oaG9zdCwgTUVNU1RJQ0tfSU5URVJGQUNFLCBNRU1TVElDS19TRVJJQUwpOwotCW1zbGVlcCgxKTsKIH0KIAogc3RhdGljIHZvaWQgbWVtc3RpY2tfY2hlY2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQpAQCAtNTc5LDcgKzU3NSw4IEBACiB2b2lkIG1lbXN0aWNrX3Jlc3VtZV9ob3N0KHN0cnVjdCBtZW1zdGlja19ob3N0ICpob3N0KQogewogCW11dGV4X2xvY2soJmhvc3QtPmxvY2spOwotCWhvc3QtPnNldF9wYXJhbShob3N0LCBNRU1TVElDS19QT1dFUiwgTUVNU1RJQ0tfUE9XRVJfT04pOworCWlmIChob3N0LT5jYXJkKQorCQltZW1zdGlja19wb3dlcl9vbihob3N0KTsKIAltdXRleF91bmxvY2soJmhvc3QtPmxvY2spOwogCW1lbXN0aWNrX2RldGVjdF9jaGFuZ2UoaG9zdCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lbXN0aWNrL2NvcmUvbXNwcm9fYmxvY2suYyBiL2RyaXZlcnMvbWVtc3RpY2svY29yZS9tc3Byb19ibG9jay5jCmluZGV4IDFkNjM3ZTQuLjU1N2RiYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVtc3RpY2svY29yZS9tc3Byb19ibG9jay5jCisrKyBiL2RyaXZlcnMvbWVtc3RpY2svY29yZS9tc3Byb19ibG9jay5jCkBAIC0xMzMsNiArMTMzLDcgQEAKIHN0cnVjdCBtc3Byb19ibG9ja19kYXRhIHsKIAlzdHJ1Y3QgbWVtc3RpY2tfZGV2ICAgKmNhcmQ7CiAJdW5zaWduZWQgaW50ICAgICAgICAgIHVzYWdlX2NvdW50OworCXVuc2lnbmVkIGludCAgICAgICAgICBjYXBzOwogCXN0cnVjdCBnZW5kaXNrICAgICAgICAqZGlzazsKIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAgKnF1ZXVlOwogCXNwaW5sb2NrX3QgICAgICAgICAgICBxX2xvY2s7CkBAIC01NzcsNyArNTc4LDYgQEAKIHN0YXRpYyBpbnQgaF9tc3Byb19ibG9ja190cmFuc2Zlcl9kYXRhKHN0cnVjdCBtZW1zdGlja19kZXYgKmNhcmQsCiAJCQkJICAgICAgIHN0cnVjdCBtZW1zdGlja19yZXF1ZXN0ICoqbXJxKQogewotCXN0cnVjdCBtZW1zdGlja19ob3N0ICpob3N0ID0gY2FyZC0+aG9zdDsKIAlzdHJ1Y3QgbXNwcm9fYmxvY2tfZGF0YSAqbXNiID0gbWVtc3RpY2tfZ2V0X2RydmRhdGEoY2FyZCk7CiAJdW5zaWduZWQgY2hhciB0X3ZhbCA9IDA7CiAJc3RydWN0IHNjYXR0ZXJsaXN0IHRfc2cgPSB7IDAgfTsKQEAgLTU5MSwxMiArNTkxLDEyIEBACiAJc3dpdGNoICgoKm1ycSktPnRwYykgewogCWNhc2UgTVNfVFBDX1dSSVRFX1JFRzoKIAkJbWVtc3RpY2tfaW5pdF9yZXEoKm1ycSwgTVNfVFBDX1NFVF9DTUQsICZtc2ItPnRyYW5zZmVyX2NtZCwgMSk7Ci0JCSgqbXJxKS0+Z2V0X2ludF9yZWcgPSAxOworCQkoKm1ycSktPm5lZWRfY2FyZF9pbnQgPSAxOwogCQlyZXR1cm4gMDsKIAljYXNlIE1TX1RQQ19TRVRfQ01EOgogCQl0X3ZhbCA9ICgqbXJxKS0+aW50X3JlZzsKIAkJbWVtc3RpY2tfaW5pdF9yZXEoKm1ycSwgTVNfVFBDX0dFVF9JTlQsIE5VTEwsIDEpOwotCQlpZiAoaG9zdC0+Y2FwcyAmIE1FTVNUSUNLX0NBUF9BVVRPX0dFVF9JTlQpCisJCWlmIChtc2ItPmNhcHMgJiBNRU1TVElDS19DQVBfQVVUT19HRVRfSU5UKQogCQkJZ290byBoYXNfaW50X3JlZzsKIAkJcmV0dXJuIDA7CiAJY2FzZSBNU19UUENfR0VUX0lOVDoKQEAgLTY0NiwxMiArNjQ2LDEyIEBACiAJCQkJCSAgID8gTVNfVFBDX1JFQURfTE9OR19EQVRBCiAJCQkJCSAgIDogTVNfVFBDX1dSSVRFX0xPTkdfREFUQSwKIAkJCQkgICAgICZ0X3NnKTsKLQkJKCptcnEpLT5nZXRfaW50X3JlZyA9IDE7CisJCSgqbXJxKS0+bmVlZF9jYXJkX2ludCA9IDE7CiAJCXJldHVybiAwOwogCWNhc2UgTVNfVFBDX1JFQURfTE9OR19EQVRBOgogCWNhc2UgTVNfVFBDX1dSSVRFX0xPTkdfREFUQToKIAkJbXNiLT5jdXJyZW50X3BhZ2UrKzsKLQkJaWYgKGhvc3QtPmNhcHMgJiBNRU1TVElDS19DQVBfQVVUT19HRVRfSU5UKSB7CisJCWlmIChtc2ItPmNhcHMgJiBNRU1TVElDS19DQVBfQVVUT19HRVRfSU5UKSB7CiAJCQl0X3ZhbCA9ICgqbXJxKS0+aW50X3JlZzsKIAkJCWdvdG8gaGFzX2ludF9yZWc7CiAJCX0gZWxzZSB7CkBAIC04MTYsMTIgKzgxNiwxMyBAQAogCXJldHVybiBjYXJkLT5jdXJyZW50X21ycS5lcnJvcjsKIH0KIAotc3RhdGljIGludCBtc3Byb19ibG9ja19zd2l0Y2hfdG9fcGFyYWxsZWwoc3RydWN0IG1lbXN0aWNrX2RldiAqY2FyZCkKK3N0YXRpYyBpbnQgbXNwcm9fYmxvY2tfc2V0X2ludGVyZmFjZShzdHJ1Y3QgbWVtc3RpY2tfZGV2ICpjYXJkLAorCQkJCSAgICAgdW5zaWduZWQgY2hhciBzeXNfcmVnKQogewogCXN0cnVjdCBtZW1zdGlja19ob3N0ICpob3N0ID0gY2FyZC0+aG9zdDsKIAlzdHJ1Y3QgbXNwcm9fYmxvY2tfZGF0YSAqbXNiID0gbWVtc3RpY2tfZ2V0X2RydmRhdGEoY2FyZCk7CiAJc3RydWN0IG1zcHJvX3BhcmFtX3JlZ2lzdGVyIHBhcmFtID0gewotCQkuc3lzdGVtID0gTUVNU1RJQ0tfU1lTX1BBUjQsCisJCS5zeXN0ZW0gPSBzeXNfcmVnLAogCQkuZGF0YV9jb3VudCA9IDAsCiAJCS5kYXRhX2FkZHJlc3MgPSAwLAogCQkudHBjX3BhcmFtID0gMApAQCAtODMzLDQxICs4MzQsNzAgQEAKIAkJCSAgc2l6ZW9mKHBhcmFtKSk7CiAJbWVtc3RpY2tfbmV3X3JlcShob3N0KTsKIAl3YWl0X2Zvcl9jb21wbGV0aW9uKCZjYXJkLT5tcnFfY29tcGxldGUpOwotCWlmIChjYXJkLT5jdXJyZW50X21ycS5lcnJvcikKLQkJcmV0dXJuIGNhcmQtPmN1cnJlbnRfbXJxLmVycm9yOworCXJldHVybiBjYXJkLT5jdXJyZW50X21ycS5lcnJvcjsKK30KKworc3RhdGljIGludCBtc3Byb19ibG9ja19zd2l0Y2hfaW50ZXJmYWNlKHN0cnVjdCBtZW1zdGlja19kZXYgKmNhcmQpCit7CisJc3RydWN0IG1lbXN0aWNrX2hvc3QgKmhvc3QgPSBjYXJkLT5ob3N0OworCXN0cnVjdCBtc3Byb19ibG9ja19kYXRhICptc2IgPSBtZW1zdGlja19nZXRfZHJ2ZGF0YShjYXJkKTsKKwlpbnQgcmMgPSAwOworCisJaWYgKG1zYi0+Y2FwcyAmIE1FTVNUSUNLX0NBUF9QQVI0KQorCQlyYyA9IG1zcHJvX2Jsb2NrX3NldF9pbnRlcmZhY2UoY2FyZCwgTUVNU1RJQ0tfU1lTX1BBUjQpOworCWVsc2UKKwkJcmV0dXJuIDA7CisKKwlpZiAocmMpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgIiVzOiBjb3VsZCBub3Qgc3dpdGNoIHRvIDQtYml0IG1vZGUsIGVycm9yICVkXG4iLAorCQkgICAgICAgY2FyZC0+ZGV2LmJ1c19pZCwgcmMpOworCQlyZXR1cm4gMDsKKwl9CiAKIAltc2ItPnN5c3RlbSA9IE1FTVNUSUNLX1NZU19QQVI0OwogCWhvc3QtPnNldF9wYXJhbShob3N0LCBNRU1TVElDS19JTlRFUkZBQ0UsIE1FTVNUSUNLX1BBUjQpOworCXByaW50ayhLRVJOX0lORk8gIiVzOiBzd2l0Y2hpbmcgdG8gNC1iaXQgcGFyYWxsZWwgbW9kZVxuIiwKKwkgICAgICAgY2FyZC0+ZGV2LmJ1c19pZCk7CisKKwlpZiAobXNiLT5jYXBzICYgTUVNU1RJQ0tfQ0FQX1BBUjgpIHsKKwkJcmMgPSBtc3Byb19ibG9ja19zZXRfaW50ZXJmYWNlKGNhcmQsIE1FTVNUSUNLX1NZU19QQVI4KTsKKworCQlpZiAoIXJjKSB7CisJCQltc2ItPnN5c3RlbSA9IE1FTVNUSUNLX1NZU19QQVI4OworCQkJaG9zdC0+c2V0X3BhcmFtKGhvc3QsIE1FTVNUSUNLX0lOVEVSRkFDRSwKKwkJCQkJTUVNU1RJQ0tfUEFSOCk7CisJCQlwcmludGsoS0VSTl9JTkZPCisJCQkgICAgICAgIiVzOiBzd2l0Y2hpbmcgdG8gOC1iaXQgcGFyYWxsZWwgbW9kZVxuIiwKKwkJCSAgICAgICBjYXJkLT5kZXYuYnVzX2lkKTsKKwkJfSBlbHNlCisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgIiVzOiBjb3VsZCBub3Qgc3dpdGNoIHRvIDgtYml0IG1vZGUsIGVycm9yICVkXG4iLAorCQkJICAgICAgIGNhcmQtPmRldi5idXNfaWQsIHJjKTsKKwl9CiAKIAljYXJkLT5uZXh0X3JlcXVlc3QgPSBoX21zcHJvX2Jsb2NrX3JlcV9pbml0OwogCW1zYi0+bXJxX2hhbmRsZXIgPSBoX21zcHJvX2Jsb2NrX2RlZmF1bHQ7CiAJbWVtc3RpY2tfaW5pdF9yZXEoJmNhcmQtPmN1cnJlbnRfbXJxLCBNU19UUENfR0VUX0lOVCwgTlVMTCwgMSk7CiAJbWVtc3RpY2tfbmV3X3JlcShjYXJkLT5ob3N0KTsKIAl3YWl0X2Zvcl9jb21wbGV0aW9uKCZjYXJkLT5tcnFfY29tcGxldGUpOworCXJjID0gY2FyZC0+Y3VycmVudF9tcnEuZXJyb3I7CiAKLQlpZiAoY2FyZC0+Y3VycmVudF9tcnEuZXJyb3IpIHsKKwlpZiAocmMpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgIiVzOiBpbnRlcmZhY2UgZXJyb3IsIHRyeWluZyB0byBmYWxsIGJhY2sgdG8gc2VyaWFsXG4iLAorCQkgICAgICAgY2FyZC0+ZGV2LmJ1c19pZCk7CiAJCW1zYi0+c3lzdGVtID0gTUVNU1RJQ0tfU1lTX1NFUklBTDsKIAkJaG9zdC0+c2V0X3BhcmFtKGhvc3QsIE1FTVNUSUNLX1BPV0VSLCBNRU1TVElDS19QT1dFUl9PRkYpOwotCQltc2xlZXAoMTAwMCk7CisJCW1zbGVlcCgxMCk7CiAJCWhvc3QtPnNldF9wYXJhbShob3N0LCBNRU1TVElDS19QT1dFUiwgTUVNU1RJQ0tfUE9XRVJfT04pOwogCQlob3N0LT5zZXRfcGFyYW0oaG9zdCwgTUVNU1RJQ0tfSU5URVJGQUNFLCBNRU1TVElDS19TRVJJQUwpOwogCi0JCWlmIChtZW1zdGlja19zZXRfcndfYWRkcihjYXJkKSkKLQkJCXJldHVybiBjYXJkLT5jdXJyZW50X21ycS5lcnJvcjsKLQotCQlwYXJhbS5zeXN0ZW0gPSBtc2ItPnN5c3RlbTsKLQotCQljYXJkLT5uZXh0X3JlcXVlc3QgPSBoX21zcHJvX2Jsb2NrX3JlcV9pbml0OwotCQltc2ItPm1ycV9oYW5kbGVyID0gaF9tc3Byb19ibG9ja19kZWZhdWx0OwotCQltZW1zdGlja19pbml0X3JlcSgmY2FyZC0+Y3VycmVudF9tcnEsIE1TX1RQQ19XUklURV9SRUcsICZwYXJhbSwKLQkJCQkgIHNpemVvZihwYXJhbSkpOwotCQltZW1zdGlja19uZXdfcmVxKGhvc3QpOwotCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZjYXJkLT5tcnFfY29tcGxldGUpOwotCi0JCXJldHVybiAtRUZBVUxUOworCQlyYyA9IG1lbXN0aWNrX3NldF9yd19hZGRyKGNhcmQpOworCQlpZiAoIXJjKQorCQkJcmMgPSBtc3Byb19ibG9ja19zZXRfaW50ZXJmYWNlKGNhcmQsIG1zYi0+c3lzdGVtKTsKIAl9Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmM7CiB9CiAKIC8qIE1lbW9yeSBhbGxvY2F0ZWQgZm9yIGF0dHJpYnV0ZXMgYnkgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgZnJlZWQgYnkKQEAgLTEwNTIsMTYgKzEwODIsMTggQEAKIAlpZiAobWVtc3RpY2tfc2V0X3J3X2FkZHIoY2FyZCkpCiAJCXJldHVybiAtRUlPOwogCi0JaWYgKGhvc3QtPmNhcHMgJiBNRU1TVElDS19DQVBfUEFSNCkgewotCQlpZiAobXNwcm9fYmxvY2tfc3dpdGNoX3RvX3BhcmFsbGVsKGNhcmQpKQotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGNvdWxkIG5vdCBzd2l0Y2ggdG8gIgotCQkJICAgICAgICJwYXJhbGxlbCBpbnRlcmZhY2VcbiIsIGNhcmQtPmRldi5idXNfaWQpOwotCX0KKwltc2ItPmNhcHMgPSBob3N0LT5jYXBzOworCXJjID0gbXNwcm9fYmxvY2tfc3dpdGNoX2ludGVyZmFjZShjYXJkKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKIAorCW1zbGVlcCgyMDApOwogCXJjID0gbXNwcm9fYmxvY2tfd2FpdF9mb3JfY2VkKGNhcmQpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCWRldl9kYmcoJmNhcmQtPmRldiwgImNhcmQgYWN0aXZhdGVkXG4iKTsKKwlpZiAobXNiLT5zeXN0ZW0gIT0gTUVNU1RJQ0tfU1lTX1NFUklBTCkKKwkJbXNiLT5jYXBzIHw9IE1FTVNUSUNLX0NBUF9BVVRPX0dFVF9JTlQ7CiAKIAljYXJkLT5uZXh0X3JlcXVlc3QgPSBoX21zcHJvX2Jsb2NrX3JlcV9pbml0OwogCW1zYi0+bXJxX2hhbmRsZXIgPSBoX21zcHJvX2Jsb2NrX2dldF9ybzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVtc3RpY2svaG9zdC9qbWIzOHhfbXMuYyBiL2RyaXZlcnMvbWVtc3RpY2svaG9zdC9qbWIzOHhfbXMuYwppbmRleCAwM2ZlODc4Li44NzcwYTVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lbXN0aWNrL2hvc3Qvam1iMzh4X21zLmMKKysrIGIvZHJpdmVycy9tZW1zdGljay9ob3N0L2ptYjM4eF9tcy5jCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L21lbXN0aWNrLmg+CkBAIC01Niw4ICs1Nyw2IEBACiAJdW5zaWduZWQgbG9uZyAgICAgICAgICAgdGltZW91dF9qaWZmaWVzOwogCXN0cnVjdCB0aW1lcl9saXN0ICAgICAgIHRpbWVyOwogCXN0cnVjdCBtZW1zdGlja19yZXF1ZXN0ICpyZXE7Ci0JdW5zaWduZWQgY2hhciAgICAgICAgICAgZWplY3Q6MSwKLQkJCQl1c2VfZG1hOjE7CiAJdW5zaWduZWQgY2hhciAgICAgICAgICAgY21kX2ZsYWdzOwogCXVuc2lnbmVkIGNoYXIgICAgICAgICAgIGlvX3BvczsKIAl1bnNpZ25lZCBpbnQgICAgICAgICAgICBpb193b3JkWzJdOwpAQCAtOTQsOSArOTMsMjIgQEAKICNkZWZpbmUgSE9TVF9DT05UUk9MX0lGX1BBUjQgICAweDEKICNkZWZpbmUgSE9TVF9DT05UUk9MX0lGX1BBUjggICAweDMKIAorI2RlZmluZSBTVEFUVVNfQlVTWSAgICAgICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIFNUQVRVU19NU19EQVQ3ICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgU1RBVFVTX01TX0RBVDYgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBTVEFUVVNfTVNfREFUNSAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIFNUQVRVU19NU19EQVQ0ICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgU1RBVFVTX01TX0RBVDMgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBTVEFUVVNfTVNfREFUMiAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIFNUQVRVU19NU19EQVQxICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgU1RBVFVTX01TX0RBVDAgICAgICAgICAgMHgwMDAwMDgwMAogI2RlZmluZSBTVEFUVVNfSEFTX01FRElBICAgICAgICAweDAwMDAwNDAwCiAjZGVmaW5lIFNUQVRVU19GSUZPX0VNUFRZICAgICAgIDB4MDAwMDAyMDAKICNkZWZpbmUgU1RBVFVTX0ZJRk9fRlVMTCAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBTVEFUVVNfTVNfQ0VEICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIFNUQVRVU19NU19FUlIgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgU1RBVFVTX01TX0JSUSAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBTVEFUVVNfTVNfQ05LICAgICAgICAgICAweDAwMDAwMDAxCiAKICNkZWZpbmUgSU5UX1NUQVRVU19UUENfRVJSICAgICAgMHgwMDA4MDAwMAogI2RlZmluZSBJTlRfU1RBVFVTX0NSQ19FUlIgICAgICAweDAwMDQwMDAwCkBAIC0xMTksMTEgKzEzMSwxNyBAQAogI2RlZmluZSBQQURfUFVfUERfT05fTVNfU09DSzAgMHg1ZjhmMDAwMAogI2RlZmluZSBQQURfUFVfUERfT05fTVNfU09DSzEgMHgwZjBmMDAwMAogCisjZGVmaW5lIENMT0NLX0NPTlRST0xfNDBNSFogICAweDAwMDAwMDAxCisjZGVmaW5lIENMT0NLX0NPTlRST0xfNTBNSFogICAweDAwMDAwMDAyCisjZGVmaW5lIENMT0NLX0NPTlRST0xfNjBNSFogICAweDAwMDAwMDA4CisjZGVmaW5lIENMT0NLX0NPTlRST0xfNjJfNU1IWiAweDAwMDAwMDBjCisjZGVmaW5lIENMT0NLX0NPTlRST0xfT0ZGICAgICAweDAwMDAwMDAwCisKIGVudW0gewogCUNNRF9SRUFEWSAgICA9IDB4MDEsCiAJRklGT19SRUFEWSAgID0gMHgwMiwKIAlSRUdfREFUQSAgICAgPSAweDA0LAotCUFVVE9fR0VUX0lOVCA9IDB4MDgKKwlETUFfREFUQSAgICAgPSAweDA4CiB9OwogCiBzdGF0aWMgdW5zaWduZWQgaW50IGptYjM4eF9tc19yZWFkX2RhdGEoc3RydWN0IGptYjM4eF9tc19ob3N0ICpob3N0LApAQCAtMjczLDcgKzI5MSw3IEBACiB7CiAJdW5zaWduZWQgaW50IGxlbmd0aDsKIAl1bnNpZ25lZCBpbnQgb2ZmOwotCXVuc2lnbmVkIGludCB0X3NpemUsIHBfb2ZmLCBwX2NudDsKKwl1bnNpZ25lZCBpbnQgdF9zaXplLCBwX2NudDsKIAl1bnNpZ25lZCBjaGFyICpidWY7CiAJc3RydWN0IHBhZ2UgKnBnOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwpAQCAtMjg3LDYgKzMwNSw4IEBACiAJfQogCiAJd2hpbGUgKGxlbmd0aCkgeworCQl1bnNpZ25lZCBpbnQgdW5pbml0aWFsaXplZF92YXIocF9vZmYpOworCiAJCWlmIChob3N0LT5yZXEtPmxvbmdfZGF0YSkgewogCQkJcGcgPSBudGhfcGFnZShzZ19wYWdlKCZob3N0LT5yZXEtPnNnKSwKIAkJCQkgICAgICBvZmYgPj4gUEFHRV9TSElGVCk7CkBAIC0zNjQsMjggKzM4NCwyNyBAQAogCQljbWQgfD0gVFBDX0RJUjsKIAlpZiAoaG9zdC0+cmVxLT5uZWVkX2NhcmRfaW50KQogCQljbWQgfD0gVFBDX1dBSVRfSU5UOwotCWlmIChob3N0LT5yZXEtPmdldF9pbnRfcmVnKQotCQljbWQgfD0gVFBDX0dFVF9JTlQ7CiAKIAlkYXRhID0gaG9zdC0+cmVxLT5kYXRhOwogCi0JaG9zdC0+dXNlX2RtYSA9ICFub19kbWE7CisJaWYgKCFub19kbWEpCisJCWhvc3QtPmNtZF9mbGFncyB8PSBETUFfREFUQTsKIAogCWlmIChob3N0LT5yZXEtPmxvbmdfZGF0YSkgewogCQlkYXRhX2xlbiA9IGhvc3QtPnJlcS0+c2cubGVuZ3RoOwogCX0gZWxzZSB7CiAJCWRhdGFfbGVuID0gaG9zdC0+cmVxLT5kYXRhX2xlbjsKLQkJaG9zdC0+dXNlX2RtYSA9IDA7CisJCWhvc3QtPmNtZF9mbGFncyAmPSB+RE1BX0RBVEE7CiAJfQogCiAJaWYgKGRhdGFfbGVuIDw9IDgpIHsKIAkJY21kICY9IH4oVFBDX0RBVEFfU0VMIHwgMHhmKTsKIAkJaG9zdC0+Y21kX2ZsYWdzIHw9IFJFR19EQVRBOwogCQljbWQgfD0gZGF0YV9sZW4gJiAweGY7Ci0JCWhvc3QtPnVzZV9kbWEgPSAwOworCQlob3N0LT5jbWRfZmxhZ3MgJj0gfkRNQV9EQVRBOwogCX0KIAotCWlmIChob3N0LT51c2VfZG1hKSB7CisJaWYgKGhvc3QtPmNtZF9mbGFncyAmIERNQV9EQVRBKSB7CiAJCWlmICgxICE9IHBjaV9tYXBfc2coaG9zdC0+Y2hpcC0+cGRldiwgJmhvc3QtPnJlcS0+c2csIDEsCiAJCQkJICAgIGhvc3QtPnJlcS0+ZGF0YV9kaXIgPT0gUkVBRAogCQkJCSAgICA/IFBDSV9ETUFfRlJPTURFVklDRQpAQCAtNDQ4LDEzICs0NjcsMTIgQEAKIAkJcmVhZGwoaG9zdC0+YWRkciArIElOVF9TVEFUVVMpKTsKIAlkZXZfZGJnKG1zaC0+Y2Rldi5kZXYsICJjIGhzdGF0dXMgJTA4eFxuIiwgcmVhZGwoaG9zdC0+YWRkciArIFNUQVRVUykpOwogCi0JaWYgKGhvc3QtPnJlcS0+Z2V0X2ludF9yZWcpIHsKLQkJdF92YWwgPSByZWFkbChob3N0LT5hZGRyICsgVFBDX1AwKTsKLQkJaG9zdC0+cmVxLT5pbnRfcmVnID0gKHRfdmFsICYgMHhmZik7Ci0JfQorCWhvc3QtPnJlcS0+aW50X3JlZyA9IHJlYWRsKGhvc3QtPmFkZHIgKyBTVEFUVVMpICYgMHhmZjsKIAotCWlmIChob3N0LT51c2VfZG1hKSB7Ci0JCXdyaXRlbCgwLCBob3N0LT5hZGRyICsgRE1BX0NPTlRST0wpOworCXdyaXRlbCgwLCBob3N0LT5hZGRyICsgQkxPQ0spOworCXdyaXRlbCgwLCBob3N0LT5hZGRyICsgRE1BX0NPTlRST0wpOworCisJaWYgKGhvc3QtPmNtZF9mbGFncyAmIERNQV9EQVRBKSB7CiAJCXBjaV91bm1hcF9zZyhob3N0LT5jaGlwLT5wZGV2LCAmaG9zdC0+cmVxLT5zZywgMSwKIAkJCSAgICAgaG9zdC0+cmVxLT5kYXRhX2RpciA9PSBSRUFECiAJCQkgICAgID8gUENJX0RNQV9GUk9NREVWSUNFIDogUENJX0RNQV9UT0RFVklDRSk7CkBAIC01MDYsNyArNTI0LDcgQEAKIAkJCWVsc2UKIAkJCQlob3N0LT5yZXEtPmVycm9yID0gLUVUSU1FOwogCQl9IGVsc2UgewotCQkJaWYgKGhvc3QtPnVzZV9kbWEpIHsKKwkJCWlmIChob3N0LT5jbWRfZmxhZ3MgJiBETUFfREFUQSkgewogCQkJCWlmIChpcnFfc3RhdHVzICYgSU5UX1NUQVRVU19FT1RSQU4pCiAJCQkJCWhvc3QtPmNtZF9mbGFncyB8PSBGSUZPX1JFQURZOwogCQkJfSBlbHNlIHsKQEAgLTU5NSwxOSArNjEzLDE4IEBACiB7CiAJdW5zaWduZWQgaW50IGhvc3RfY3RsID0gcmVhZGwoaG9zdC0+YWRkciArIEhPU1RfQ09OVFJPTCk7CiAKLQl3cml0ZWwoaG9zdF9jdGwgfCBIT1NUX0NPTlRST0xfUkVTRVRfUkVRIHwgSE9TVF9DT05UUk9MX1JFU0VULAotCSAgICAgICBob3N0LT5hZGRyICsgSE9TVF9DT05UUk9MKTsKKwl3cml0ZWwoSE9TVF9DT05UUk9MX1JFU0VUX1JFUSwgaG9zdC0+YWRkciArIEhPU1RfQ09OVFJPTCk7CiAKIAl3aGlsZSAoSE9TVF9DT05UUk9MX1JFU0VUX1JFUQogCSAgICAgICAmIChob3N0X2N0bCA9IHJlYWRsKGhvc3QtPmFkZHIgKyBIT1NUX0NPTlRST0wpKSkgewotCQluZGVsYXkoMTAwKTsKLQkJZGV2X2RiZygmaG9zdC0+Y2hpcC0+cGRldi0+ZGV2LCAicmVzZXRcbiIpOworCQluZGVsYXkoMjApOworCQlkZXZfZGJnKCZob3N0LT5jaGlwLT5wZGV2LT5kZXYsICJyZXNldCAlMDh4XG4iLCBob3N0X2N0bCk7CiAJfQogCi0Jd3JpdGVsKElOVF9TVEFUVVNfQUxMLCBob3N0LT5hZGRyICsgSU5UX1NUQVRVU19FTkFCTEUpOworCXdyaXRlbChIT1NUX0NPTlRST0xfUkVTRVQsIGhvc3QtPmFkZHIgKyBIT1NUX0NPTlRST0wpOworCW1taW93YigpOwogCXdyaXRlbChJTlRfU1RBVFVTX0FMTCwgaG9zdC0+YWRkciArIElOVF9TSUdOQUxfRU5BQkxFKTsKLQotCWRldl9kYmcoJmhvc3QtPmNoaXAtPnBkZXYtPmRldiwgInJlc2V0XG4iKTsKKwl3cml0ZWwoSU5UX1NUQVRVU19BTEwsIGhvc3QtPmFkZHIgKyBJTlRfU1RBVFVTX0VOQUJMRSk7CiB9CiAKIHN0YXRpYyB2b2lkIGptYjM4eF9tc19zZXRfcGFyYW0oc3RydWN0IG1lbXN0aWNrX2hvc3QgKm1zaCwKQEAgLTYxNSwxMCArNjMyLDggQEAKIAkJCQlpbnQgdmFsdWUpCiB7CiAJc3RydWN0IGptYjM4eF9tc19ob3N0ICpob3N0ID0gbWVtc3RpY2tfcHJpdihtc2gpOwotCXVuc2lnbmVkIGludCBob3N0X2N0bDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKKwl1bnNpZ25lZCBpbnQgaG9zdF9jdGwgPSByZWFkbChob3N0LT5hZGRyICsgSE9TVF9DT05UUk9MKTsKKwl1bnNpZ25lZCBpbnQgY2xvY2tfY3RsID0gQ0xPQ0tfQ09OVFJPTF80ME1IWiwgY2xvY2tfZGVsYXkgPSAwOwogCiAJc3dpdGNoIChwYXJhbSkgewogCWNhc2UgTUVNU1RJQ0tfUE9XRVI6CkBAIC02MjYsNjAgKzY0MSw1NyBAQAogCQkJam1iMzh4X21zX3Jlc2V0KGhvc3QpOwogCiAJCQl3cml0ZWwoaG9zdC0+aWQgPyBQQURfUFVfUERfT05fTVNfU09DSzEKLQkJCQkJICA6IFBBRF9QVV9QRF9PTl9NU19TT0NLMCwKKwkJCQkJOiBQQURfUFVfUERfT05fTVNfU09DSzAsCiAJCQkgICAgICAgaG9zdC0+YWRkciArIFBBRF9QVV9QRCk7CiAKIAkJCXdyaXRlbChQQURfT1VUUFVUX0VOQUJMRV9NUywKIAkJCSAgICAgICBob3N0LT5hZGRyICsgUEFEX09VVFBVVF9FTkFCTEUpOwogCi0JCQlob3N0X2N0bCA9IHJlYWRsKGhvc3QtPmFkZHIgKyBIT1NUX0NPTlRST0wpOwotCQkJaG9zdF9jdGwgfD0gNzsKLQkJCXdyaXRlbChob3N0X2N0bCB8IChIT1NUX0NPTlRST0xfUE9XRVJfRU4KLQkJCQkJICAgfCBIT1NUX0NPTlRST0xfQ0xPQ0tfRU4pLAotCQkJICAgICAgIGhvc3QtPmFkZHIgKyBIT1NUX0NPTlRST0wpOworCQkJaG9zdF9jdGwgPSA3OworCQkJaG9zdF9jdGwgfD0gSE9TVF9DT05UUk9MX1BPV0VSX0VOCisJCQkJIHwgSE9TVF9DT05UUk9MX0NMT0NLX0VOOworCQkJd3JpdGVsKGhvc3RfY3RsLCBob3N0LT5hZGRyICsgSE9TVF9DT05UUk9MKTsKIAogCQkJZGV2X2RiZygmaG9zdC0+Y2hpcC0+cGRldi0+ZGV2LCAicG93ZXIgb25cbiIpOwogCQl9IGVsc2UgaWYgKHZhbHVlID09IE1FTVNUSUNLX1BPV0VSX09GRikgewotCQkJd3JpdGVsKHJlYWRsKGhvc3QtPmFkZHIgKyBIT1NUX0NPTlRST0wpCi0JCQkgICAgICAgJiB+KEhPU1RfQ09OVFJPTF9QT1dFUl9FTgotCQkJCSAgIHwgSE9TVF9DT05UUk9MX0NMT0NLX0VOKSwKLQkJCSAgICAgICBob3N0LT5hZGRyICsgIEhPU1RfQ09OVFJPTCk7CisJCQlob3N0X2N0bCAmPSB+KEhPU1RfQ09OVFJPTF9QT1dFUl9FTgorCQkJCSAgICAgIHwgSE9TVF9DT05UUk9MX0NMT0NLX0VOKTsKKwkJCXdyaXRlbChob3N0X2N0bCwgaG9zdC0+YWRkciArICBIT1NUX0NPTlRST0wpOwogCQkJd3JpdGVsKDAsIGhvc3QtPmFkZHIgKyBQQURfT1VUUFVUX0VOQUJMRSk7CiAJCQl3cml0ZWwoUEFEX1BVX1BEX09GRiwgaG9zdC0+YWRkciArIFBBRF9QVV9QRCk7CiAJCQlkZXZfZGJnKCZob3N0LT5jaGlwLT5wZGV2LT5kZXYsICJwb3dlciBvZmZcbiIpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgTUVNU1RJQ0tfSU5URVJGQUNFOgotCQkvKiBqbWIzOHhfbXNfcmVzZXQoaG9zdCk7ICovCi0KLQkJaG9zdF9jdGwgPSByZWFkbChob3N0LT5hZGRyICsgSE9TVF9DT05UUk9MKTsKIAkJaG9zdF9jdGwgJj0gfigzIDw8IEhPU1RfQ09OVFJPTF9JRl9TSElGVCk7Ci0JCS8qIGhvc3RfY3RsIHw9IDc7ICovCiAKIAkJaWYgKHZhbHVlID09IE1FTVNUSUNLX1NFUklBTCkgewogCQkJaG9zdF9jdGwgJj0gfkhPU1RfQ09OVFJPTF9GQVNUX0NMSzsKIAkJCWhvc3RfY3RsIHw9IEhPU1RfQ09OVFJPTF9JRl9TRVJJQUwKIAkJCQkgICAgPDwgSE9TVF9DT05UUk9MX0lGX1NISUZUOwogCQkJaG9zdF9jdGwgfD0gSE9TVF9DT05UUk9MX1JFSTsKLQkJCXdyaXRlbCgwLCBob3N0LT5hZGRyICsgQ0xPQ0tfREVMQVkpOworCQkJY2xvY2tfY3RsID0gQ0xPQ0tfQ09OVFJPTF80ME1IWjsKKwkJCWNsb2NrX2RlbGF5ID0gMDsKIAkJfSBlbHNlIGlmICh2YWx1ZSA9PSBNRU1TVElDS19QQVI0KSB7CiAJCQlob3N0X2N0bCB8PSBIT1NUX0NPTlRST0xfRkFTVF9DTEs7CiAJCQlob3N0X2N0bCB8PSBIT1NUX0NPTlRST0xfSUZfUEFSNAogCQkJCSAgICA8PCBIT1NUX0NPTlRST0xfSUZfU0hJRlQ7CiAJCQlob3N0X2N0bCAmPSB+SE9TVF9DT05UUk9MX1JFSTsKLQkJCXdyaXRlbCg0LCBob3N0LT5hZGRyICsgQ0xPQ0tfREVMQVkpOworCQkJY2xvY2tfY3RsID0gQ0xPQ0tfQ09OVFJPTF80ME1IWjsKKwkJCWNsb2NrX2RlbGF5ID0gNDsKIAkJfSBlbHNlIGlmICh2YWx1ZSA9PSBNRU1TVElDS19QQVI4KSB7CiAJCQlob3N0X2N0bCB8PSBIT1NUX0NPTlRST0xfRkFTVF9DTEs7CiAJCQlob3N0X2N0bCB8PSBIT1NUX0NPTlRST0xfSUZfUEFSOAogCQkJCSAgICA8PCBIT1NUX0NPTlRST0xfSUZfU0hJRlQ7CiAJCQlob3N0X2N0bCAmPSB+SE9TVF9DT05UUk9MX1JFSTsKLQkJCXdyaXRlbCg0LCBob3N0LT5hZGRyICsgQ0xPQ0tfREVMQVkpOworCQkJY2xvY2tfY3RsID0gQ0xPQ0tfQ09OVFJPTF82ME1IWjsKKwkJCWNsb2NrX2RlbGF5ID0gMDsKIAkJfQogCQl3cml0ZWwoaG9zdF9jdGwsIGhvc3QtPmFkZHIgKyBIT1NUX0NPTlRST0wpOworCQl3cml0ZWwoY2xvY2tfY3RsLCBob3N0LT5hZGRyICsgQ0xPQ0tfQ09OVFJPTCk7CisJCXdyaXRlbChjbG9ja19kZWxheSwgaG9zdC0+YWRkciArIENMT0NLX0RFTEFZKTsKIAkJYnJlYWs7CiAJfTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKIH0KIAogI2lmZGVmIENPTkZJR19QTQpAQCAtNzcyLDEzICs3ODQsMTAgQEAKIAlzbnByaW50Zihob3N0LT5ob3N0X2lkLCBERVZJQ0VfSURfU0laRSwgRFJJVkVSX05BTUUgIjpzbG90JWQiLAogCQkgaG9zdC0+aWQpOwogCWhvc3QtPmlycSA9IGptLT5wZGV2LT5pcnE7Ci0JaG9zdC0+dGltZW91dF9qaWZmaWVzID0gbXNlY3NfdG9famlmZmllcyg0MDAwKTsKKwlob3N0LT50aW1lb3V0X2ppZmZpZXMgPSBtc2Vjc190b19qaWZmaWVzKDEwMDApOwogCW1zaC0+cmVxdWVzdCA9IGptYjM4eF9tc19yZXF1ZXN0OwogCW1zaC0+c2V0X3BhcmFtID0gam1iMzh4X21zX3NldF9wYXJhbTsKLQkvKgotCW1zaC0+Y2FwcyA9IE1FTVNUSUNLX0NBUF9BVVRPX0dFVF9JTlQgfCBNRU1TVElDS19DQVBfUEFSNAotCQkgICAgfCBNRU1TVElDS19DQVBfUEFSODsKLQkqLworCiAJbXNoLT5jYXBzID0gTUVNU1RJQ0tfQ0FQX1BBUjQgfCBNRU1TVElDS19DQVBfUEFSODsKIAogCXNldHVwX3RpbWVyKCZob3N0LT50aW1lciwgam1iMzh4X21zX2Fib3J0LCAodW5zaWduZWQgbG9uZyltc2gpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZW1zdGljay9ob3N0L3RpZm1fbXMuYyBiL2RyaXZlcnMvbWVtc3RpY2svaG9zdC90aWZtX21zLmMKaW5kZXggMmI1YmY1Mi4uZWIxNTBkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZW1zdGljay9ob3N0L3RpZm1fbXMuYworKysgYi9kcml2ZXJzL21lbXN0aWNrL2hvc3QvdGlmbV9tcy5jCkBAIC0zNDAsMTEgKzM0MCwyMCBAQAogCiAJZGVsX3RpbWVyKCZob3N0LT50aW1lcik7CiAKLQlpZiAoaG9zdC0+dXNlX2RtYSkKKwlob3N0LT5yZXEtPmludF9yZWcgPSByZWFkbChzb2NrLT5hZGRyICsgU09DS19NU19TVEFUVVMpICYgMHhmZjsKKwlob3N0LT5yZXEtPmludF9yZWcgPSAoaG9zdC0+cmVxLT5pbnRfcmVnICYgMSkKKwkJCSAgICAgfCAoKGhvc3QtPnJlcS0+aW50X3JlZyA8PCA0KSAmIDB4ZTApOworCisJd3JpdGVsKFRJRk1fRklGT19JTlRfU0VUQUxMLAorCSAgICAgICBzb2NrLT5hZGRyICsgU09DS19ETUFfRklGT19JTlRfRU5BQkxFX0NMRUFSKTsKKwl3cml0ZWwoVElGTV9ETUFfUkVTRVQsIHNvY2stPmFkZHIgKyBTT0NLX0RNQV9DT05UUk9MKTsKKworCWlmIChob3N0LT51c2VfZG1hKSB7CiAJCXRpZm1fdW5tYXBfc2coc29jaywgJmhvc3QtPnJlcS0+c2csIDEsCiAJCQkgICAgICBob3N0LT5yZXEtPmRhdGFfZGlyID09IFJFQUQKIAkJCSAgICAgID8gUENJX0RNQV9GUk9NREVWSUNFCiAJCQkgICAgICA6IFBDSV9ETUFfVE9ERVZJQ0UpOworCX0KIAogCXdyaXRlbCgoflRJRk1fQ1RSTF9MRUQpICYgcmVhZGwoc29jay0+YWRkciArIFNPQ0tfQ09OVFJPTCksCiAJICAgICAgIHNvY2stPmFkZHIgKyBTT0NLX0NPTlRST0wpOwpAQCAtNDI0LDEyICs0MzMsNiBAQAogCQllbHNlIGlmIChob3N0X3N0YXR1cyAmIFRJRk1fTVNfU1RBVF9DUkMpCiAJCQlob3N0LT5yZXEtPmVycm9yID0gLUVJTFNFUTsKIAotCQlpZiAoaG9zdC0+cmVxLT5lcnJvcikgewotCQkJd3JpdGVsKFRJRk1fRklGT19JTlRfU0VUQUxMLAotCQkJICAgICAgIHNvY2stPmFkZHIgKyBTT0NLX0RNQV9GSUZPX0lOVF9FTkFCTEVfQ0xFQVIpOwotCQkJd3JpdGVsKFRJRk1fRE1BX1JFU0VULCBzb2NrLT5hZGRyICsgU09DS19ETUFfQ09OVFJPTCk7Ci0JCX0KLQogCQlpZiAoaG9zdF9zdGF0dXMgJiBUSUZNX01TX1NUQVRfUkRZKQogCQkJaG9zdC0+Y21kX2ZsYWdzIHw9IENNRF9SRUFEWTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmMgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuYwppbmRleCA2YjZkZjg2Li5jNmJlNmViIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuYworKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuYwpAQCAtMTQzMCw2ICsxNDMwLDk4IEBACiAJCXNwcmludGYocHJvZF9uYW1lLCAiJXMiLCBwcm9kdWN0X3N0cik7CiB9CiAKKy8qKgorICoJbXB0X21hcHJlc291cmNlcyAtIG1hcCBpbiBtZW1vcnkgbWFwcGVkIGlvCisgKglAaW9jOiBQb2ludGVyIHRvIHBvaW50ZXIgdG8gSU9DIGFkYXB0ZXIKKyAqCisgKiovCitzdGF0aWMgaW50CittcHRfbWFwcmVzb3VyY2VzKE1QVF9BREFQVEVSICppb2MpCit7CisJdTgJCV9faW9tZW0gKm1lbTsKKwlpbnQJCSBpaTsKKwl1bnNpZ25lZCBsb25nCSBtZW1fcGh5czsKKwl1bnNpZ25lZCBsb25nCSBwb3J0OworCXUzMgkJIG1zaXplOworCXUzMgkJIHBzaXplOworCXU4CQkgcmV2aXNpb247CisJaW50CQkgciA9IC1FTk9ERVY7CisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CisKKwlwZGV2ID0gaW9jLT5wY2lkZXY7CisJaW9jLT5iYXJzID0gcGNpX3NlbGVjdF9iYXJzKHBkZXYsIElPUkVTT1VSQ0VfTUVNKTsKKwlpZiAocGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpKSB7CisJCXByaW50ayhNWUlPQ19zX0VSUl9GTVQgInBjaV9lbmFibGVfZGV2aWNlX21lbSgpICIKKwkJICAgICJmYWlsZWRcbiIsIGlvYy0+bmFtZSk7CisJCXJldHVybiByOworCX0KKwlpZiAocGNpX3JlcXVlc3Rfc2VsZWN0ZWRfcmVnaW9ucyhwZGV2LCBpb2MtPmJhcnMsICJtcHQiKSkgeworCQlwcmludGsoTVlJT0Nfc19FUlJfRk1UICJwY2lfcmVxdWVzdF9zZWxlY3RlZF9yZWdpb25zKCkgd2l0aCAiCisJCSAgICAiTUVNIGZhaWxlZFxuIiwgaW9jLT5uYW1lKTsKKwkJcmV0dXJuIHI7CisJfQorCisJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgUENJX0NMQVNTX1JFVklTSU9OLCAmcmV2aXNpb24pOworCisJaWYgKCFwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV82NEJJVF9NQVNLKQorCSAgICAmJiAhcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV82NEJJVF9NQVNLKSkgeworCQlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNWUlPQ19zX0lORk9fRk1UCisJCSAgICAiOiA2NCBCSVQgUENJIEJVUyBETUEgQUREUkVTU0lORyBTVVBQT1JURURcbiIsCisJCSAgICBpb2MtPm5hbWUpKTsKKwl9IGVsc2UgaWYgKCFwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKQorCSAgICAmJiAhcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKSkgeworCQlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNWUlPQ19zX0lORk9fRk1UCisJCSAgICAiOiAzMiBCSVQgUENJIEJVUyBETUEgQUREUkVTU0lORyBTVVBQT1JURURcbiIsCisJCSAgICBpb2MtPm5hbWUpKTsKKwl9IGVsc2UgeworCQlwcmludGsoTVlJT0Nfc19XQVJOX0ZNVCAibm8gc3VpdGFibGUgRE1BIG1hc2sgZm9yICVzXG4iLAorCQkgICAgaW9jLT5uYW1lLCBwY2lfbmFtZShwZGV2KSk7CisJCXBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMocGRldiwgaW9jLT5iYXJzKTsKKwkJcmV0dXJuIHI7CisJfQorCisJbWVtX3BoeXMgPSBtc2l6ZSA9IDA7CisJcG9ydCA9IHBzaXplID0gMDsKKwlmb3IgKGlpID0gMDsgaWkgPCBERVZJQ0VfQ09VTlRfUkVTT1VSQ0U7IGlpKyspIHsKKwkJaWYgKHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCBpaSkgJiBQQ0lfQkFTRV9BRERSRVNTX1NQQUNFX0lPKSB7CisJCQlpZiAocHNpemUpCisJCQkJY29udGludWU7CisJCQkvKiBHZXQgSS9PIHNwYWNlISAqLworCQkJcG9ydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCBpaSk7CisJCQlwc2l6ZSA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgaWkpOworCQl9IGVsc2UgeworCQkJaWYgKG1zaXplKQorCQkJCWNvbnRpbnVlOworCQkJLyogR2V0IG1lbW1hcCAqLworCQkJbWVtX3BoeXMgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgaWkpOworCQkJbXNpemUgPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIGlpKTsKKwkJfQorCX0KKwlpb2MtPm1lbV9zaXplID0gbXNpemU7CisKKwltZW0gPSBOVUxMOworCS8qIEdldCBsb2dpY2FsIHB0ciBmb3IgUGNpTWVtMCBzcGFjZSAqLworCS8qbWVtID0gaW9yZW1hcChtZW1fcGh5cywgbXNpemUpOyovCisJbWVtID0gaW9yZW1hcChtZW1fcGh5cywgbXNpemUpOworCWlmIChtZW0gPT0gTlVMTCkgeworCQlwcmludGsoTVlJT0Nfc19FUlJfRk1UICI6IEVSUk9SIC0gVW5hYmxlIHRvIG1hcCBhZGFwdGVyIgorCQkJIiBtZW1vcnkhXG4iLCBpb2MtPm5hbWUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaW9jLT5tZW1tYXAgPSBtZW07CisJZGluaXRwcmludGsoaW9jLCBwcmludGsoTVlJT0Nfc19JTkZPX0ZNVCAibWVtID0gJXAsIG1lbV9waHlzID0gJWx4XG4iLAorCSAgICBpb2MtPm5hbWUsIG1lbSwgbWVtX3BoeXMpKTsKKworCWlvYy0+bWVtX3BoeXMgPSBtZW1fcGh5czsKKwlpb2MtPmNoaXAgPSAoU1lTSUZfUkVHUyBfX2lvbWVtICopbWVtOworCisJLyogU2F2ZSBQb3J0IElPIHZhbHVlcyBpbiBjYXNlIHdlIG5lZWQgdG8gZG8gZG93bmxvYWRib290ICovCisJaW9jLT5waW9fbWVtX3BoeXMgPSBwb3J0OworCWlvYy0+cGlvX2NoaXAgPSAoU1lTSUZfUkVHUyBfX2lvbWVtICopcG9ydDsKKworCXJldHVybiAwOworfQorCiAvKj0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPSovCiAvKioKICAqCW1wdF9hdHRhY2ggLSBJbnN0YWxsIGEgUENJIGludGVsbGlnZW50IE1QVCBhZGFwdGVyLgpAQCAtMTQ1MiwxMyArMTU0NCw2IEBACiBtcHRfYXR0YWNoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCiB7CiAJTVBUX0FEQVBURVIJKmlvYzsKLQl1OAkJX19pb21lbSAqbWVtOwotCXU4CQlfX2lvbWVtICpwbWVtOwotCXVuc2lnbmVkIGxvbmcJIG1lbV9waHlzOwotCXVuc2lnbmVkIGxvbmcJIHBvcnQ7Ci0JdTMyCQkgbXNpemU7Ci0JdTMyCQkgcHNpemU7Ci0JaW50CQkgaWk7CiAJdTgJCSBjYl9pZHg7CiAJaW50CQkgciA9IC1FTk9ERVY7CiAJdTgJCSByZXZpc2lvbjsKQEAgLTE0NjgsNTIgKzE1NTMsMzIgQEAKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRlbnQsICplbnQ7CiAjZW5kaWYKIAotCWlmIChtcHRfZGVidWdfbGV2ZWwpCi0JCXByaW50ayhLRVJOX0lORk8gTVlOQU0gIjogbXB0X2RlYnVnX2xldmVsPSV4aFxuIiwgbXB0X2RlYnVnX2xldmVsKTsKLQogCWlvYyA9IGt6YWxsb2Moc2l6ZW9mKE1QVF9BREFQVEVSKSwgR0ZQX0FUT01JQyk7CiAJaWYgKGlvYyA9PSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX0VSUiBNWU5BTSAiOiBFUlJPUiAtIEluc3VmZmljaWVudCBtZW1vcnkgdG8gYWRkIGFkYXB0ZXIhXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCWlvYy0+ZGVidWdfbGV2ZWwgPSBtcHRfZGVidWdfbGV2ZWw7CisKIAlpb2MtPmlkID0gbXB0X2lkcysrOwogCXNwcmludGYoaW9jLT5uYW1lLCAiaW9jJWQiLCBpb2MtPmlkKTsKIAotCWlvYy0+YmFycyA9IHBjaV9zZWxlY3RfYmFycyhwZGV2LCBJT1JFU09VUkNFX01FTSk7Ci0JaWYgKHBjaV9lbmFibGVfZGV2aWNlX21lbShwZGV2KSkgewotCQlwcmludGsoTVlJT0Nfc19FUlJfRk1UICJwY2lfZW5hYmxlX2RldmljZV9tZW0oKSAiCi0JCSAgICAgICAiZmFpbGVkXG4iLCBpb2MtPm5hbWUpOwotCQlrZnJlZShpb2MpOwotCQlyZXR1cm4gcjsKLQl9Ci0JaWYgKHBjaV9yZXF1ZXN0X3NlbGVjdGVkX3JlZ2lvbnMocGRldiwgaW9jLT5iYXJzLCAibXB0IikpIHsKLQkJcHJpbnRrKE1ZSU9DX3NfRVJSX0ZNVCAicGNpX3JlcXVlc3Rfc2VsZWN0ZWRfcmVnaW9ucygpIHdpdGggIgotCQkgICAgICAgIk1FTSBmYWlsZWRcbiIsIGlvYy0+bmFtZSk7Ci0JCWtmcmVlKGlvYyk7Ci0JCXJldHVybiByOwotCX0KKwkvKgorCSAqIHNldCBpbml0aWFsIGRlYnVnIGxldmVsCisJICogKHJlZmVyIHRvIG1wdGRlYnVnLmgpCisJICoKKwkgKi8KKwlpb2MtPmRlYnVnX2xldmVsID0gbXB0X2RlYnVnX2xldmVsOworCWlmIChtcHRfZGVidWdfbGV2ZWwpCisJCXByaW50ayhLRVJOX0lORk8gIm1wdF9kZWJ1Z19sZXZlbD0leGhcbiIsIG1wdF9kZWJ1Z19sZXZlbCk7CiAKIAlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNWUlPQ19zX0lORk9fRk1UICI6IG1wdF9hZGFwdGVyX2luc3RhbGxcbiIsIGlvYy0+bmFtZSkpOwogCi0JaWYgKCFwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV82NEJJVF9NQVNLKSkgewotCQlkcHJpbnRrKGlvYywgcHJpbnRrKE1ZSU9DX3NfSU5GT19GTVQKLQkJCSI6IDY0IEJJVCBQQ0kgQlVTIERNQSBBRERSRVNTSU5HIFNVUFBPUlRFRFxuIiwgaW9jLT5uYW1lKSk7Ci0JfSBlbHNlIGlmIChwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKSkgewotCQlwcmludGsoTVlJT0Nfc19XQVJOX0ZNVCAiOiAzMiBCSVQgUENJIEJVUyBETUEgQUREUkVTU0lORyBOT1QgU1VQUE9SVEVEXG4iLAotCQkgICAgaW9jLT5uYW1lKTsKKwlpb2MtPnBjaWRldiA9IHBkZXY7CisJaWYgKG1wdF9tYXByZXNvdXJjZXMoaW9jKSkgewogCQlrZnJlZShpb2MpOwogCQlyZXR1cm4gcjsKIAl9CiAKLQlpZiAoIXBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LCBETUFfNjRCSVRfTUFTSykpIHsKLQkJZHByaW50ayhpb2MsIHByaW50ayhNWUlPQ19zX0lORk9fRk1UCi0JCQkiOiBVc2luZyA2NCBiaXQgY29uc2lzdGVudCBtYXNrXG4iLCBpb2MtPm5hbWUpKTsKLQl9IGVsc2UgewotCQlkcHJpbnRrKGlvYywgcHJpbnRrKE1ZSU9DX3NfSU5GT19GTVQKLQkJCSI6IE5vdCB1c2luZyA2NCBiaXQgY29uc2lzdGVudCBtYXNrXG4iLCBpb2MtPm5hbWUpKTsKLQl9Ci0KIAlpb2MtPmFsbG9jX3RvdGFsID0gc2l6ZW9mKE1QVF9BREFQVEVSKTsKIAlpb2MtPnJlcV9zeiA9IE1QVF9ERUZBVUxUX0ZSQU1FX1NJWkU7CQkvKiBhdm9pZCBkaXYgYnkgemVybyEgKi8KIAlpb2MtPnJlcGx5X3N6ID0gTVBUX1JFUExZX0ZSQU1FX1NJWkU7CkBAIC0xNTUxLDQ4ICsxNjE2LDkgQEAKIAkvKiBGaW5kIGxvb2t1cCBzbG90LiAqLwogCUlOSVRfTElTVF9IRUFEKCZpb2MtPmxpc3QpOwogCi0JbWVtX3BoeXMgPSBtc2l6ZSA9IDA7Ci0JcG9ydCA9IHBzaXplID0gMDsKLQlmb3IgKGlpPTA7IGlpIDwgREVWSUNFX0NPVU5UX1JFU09VUkNFOyBpaSsrKSB7Ci0JCWlmIChwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgaWkpICYgUENJX0JBU0VfQUREUkVTU19TUEFDRV9JTykgewotCQkJaWYgKHBzaXplKQotCQkJCWNvbnRpbnVlOwotCQkJLyogR2V0IEkvTyBzcGFjZSEgKi8KLQkJCXBvcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgaWkpOwotCQkJcHNpemUgPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsaWkpOwotCQl9IGVsc2UgewotCQkJaWYgKG1zaXplKQotCQkJCWNvbnRpbnVlOwotCQkJLyogR2V0IG1lbW1hcCAqLwotCQkJbWVtX3BoeXMgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgaWkpOwotCQkJbXNpemUgPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsaWkpOwotCQl9Ci0JfQotCWlvYy0+bWVtX3NpemUgPSBtc2l6ZTsKLQotCW1lbSA9IE5VTEw7Ci0JLyogR2V0IGxvZ2ljYWwgcHRyIGZvciBQY2lNZW0wIHNwYWNlICovCi0JLyptZW0gPSBpb3JlbWFwKG1lbV9waHlzLCBtc2l6ZSk7Ki8KLQltZW0gPSBpb3JlbWFwKG1lbV9waHlzLCBtc2l6ZSk7Ci0JaWYgKG1lbSA9PSBOVUxMKSB7Ci0JCXByaW50ayhNWUlPQ19zX0VSUl9GTVQgIlVuYWJsZSB0byBtYXAgYWRhcHRlciBtZW1vcnkhXG4iLCBpb2MtPm5hbWUpOwotCQlrZnJlZShpb2MpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JaW9jLT5tZW1tYXAgPSBtZW07Ci0JZGluaXRwcmludGsoaW9jLCBwcmludGsoTVlJT0Nfc19JTkZPX0ZNVCAibWVtID0gJXAsIG1lbV9waHlzID0gJWx4XG4iLCBpb2MtPm5hbWUsIG1lbSwgbWVtX3BoeXMpKTsKLQogCWRpbml0cHJpbnRrKGlvYywgcHJpbnRrKE1ZSU9DX3NfSU5GT19GTVQgImZhY3RzIEAgJXAsIHBmYWN0c1swXSBAICVwXG4iLAogCSAgICBpb2MtPm5hbWUsICZpb2MtPmZhY3RzLCAmaW9jLT5wZmFjdHNbMF0pKTsKIAotCWlvYy0+bWVtX3BoeXMgPSBtZW1fcGh5czsKLQlpb2MtPmNoaXAgPSAoU1lTSUZfUkVHUyBfX2lvbWVtICopbWVtOwotCi0JLyogU2F2ZSBQb3J0IElPIHZhbHVlcyBpbiBjYXNlIHdlIG5lZWQgdG8gZG8gZG93bmxvYWRib290ICovCi0JaW9jLT5waW9fbWVtX3BoeXMgPSBwb3J0OwotCXBtZW0gPSAodTggX19pb21lbSAqKXBvcnQ7Ci0JaW9jLT5waW9fY2hpcCA9IChTWVNJRl9SRUdTIF9faW9tZW0gKilwbWVtOwotCiAJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgUENJX0NMQVNTX1JFVklTSU9OLCAmcmV2aXNpb24pOwogCW1wdF9nZXRfcHJvZHVjdF9uYW1lKHBkZXYtPnZlbmRvciwgcGRldi0+ZGV2aWNlLCByZXZpc2lvbiwgaW9jLT5wcm9kX25hbWUpOwogCkBAIC0xNjg4LDcgKzE3MTQsOSBAQAogCQlsaXN0X2RlbCgmaW9jLT5saXN0KTsKIAkJaWYgKGlvYy0+YWx0X2lvYykKIAkJCWlvYy0+YWx0X2lvYy0+YWx0X2lvYyA9IE5VTEw7Ci0JCWlvdW5tYXAobWVtKTsKKwkJaW91bm1hcChpb2MtPm1lbW1hcCk7CisJCWlmIChyICE9IC01KQorCQkJcGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyhwZGV2LCBpb2MtPmJhcnMpOwogCQlrZnJlZShpb2MpOwogCQlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJCXJldHVybiByOwpAQCAtMTc4NCwxMyArMTgxMiwxMCBAQAogCXUzMiBkZXZpY2Vfc3RhdGU7CiAJTVBUX0FEQVBURVIgKmlvYyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAotCWRldmljZV9zdGF0ZT1wY2lfY2hvb3NlX3N0YXRlKHBkZXYsIHN0YXRlKTsKLQotCXByaW50ayhNWUlPQ19zX0lORk9fRk1UCi0JInBjaS1zdXNwZW5kOiBwZGV2PTB4JXAsIHNsb3Q9JXMsIEVudGVyaW5nIG9wZXJhdGluZyBzdGF0ZSBbRCVkXVxuIiwKLQkJaW9jLT5uYW1lLCBwZGV2LCBwY2lfbmFtZShwZGV2KSwgZGV2aWNlX3N0YXRlKTsKLQotCXBjaV9zYXZlX3N0YXRlKHBkZXYpOworCWRldmljZV9zdGF0ZSA9IHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpOworCXByaW50ayhNWUlPQ19zX0lORk9fRk1UICJwY2ktc3VzcGVuZDogcGRldj0weCVwLCBzbG90PSVzLCBFbnRlcmluZyAiCisJICAgICJvcGVyYXRpbmcgc3RhdGUgW0QlZF1cbiIsIGlvYy0+bmFtZSwgcGRldiwgcGNpX25hbWUocGRldiksCisJICAgIGRldmljZV9zdGF0ZSk7CiAKIAkvKiBwdXQgaW9jIGludG8gUkVBRFlfU1RBVEUgKi8KIAlpZihTZW5kSW9jUmVzZXQoaW9jLCBNUElfRlVOQ1RJT05fSU9DX01FU1NBR0VfVU5JVF9SRVNFVCwgQ0FOX1NMRUVQKSkgewpAQCAtMTgwNSwxMCArMTgzMCwxNCBAQAogCS8qIENsZWFyIGFueSBsaW5nZXJpbmcgaW50ZXJydXB0ICovCiAJQ0hJUFJFR19XUklURTMyKCZpb2MtPmNoaXAtPkludFN0YXR1cywgMCk7CiAKKwlmcmVlX2lycShpb2MtPnBjaV9pcnEsIGlvYyk7CisJaWYgKG1wdF9tc2lfZW5hYmxlKQorCQlwY2lfZGlzYWJsZV9tc2koaW9jLT5wY2lkZXYpOworCWlvYy0+cGNpX2lycSA9IC0xOworCXBjaV9zYXZlX3N0YXRlKHBkZXYpOwogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIAlwY2lfcmVsZWFzZV9zZWxlY3RlZF9yZWdpb25zKHBkZXYsIGlvYy0+YmFycyk7CiAJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBkZXZpY2Vfc3RhdGUpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE4MjMsNDggKzE4NTIsNTQgQEAKIAlNUFRfQURBUFRFUiAqaW9jID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXUzMiBkZXZpY2Vfc3RhdGUgPSBwZGV2LT5jdXJyZW50X3N0YXRlOwogCWludCByZWNvdmVyeV9zdGF0ZTsKKwlpbnQgZXJyOwogCi0JcHJpbnRrKE1ZSU9DX3NfSU5GT19GTVQKLQkicGNpLXJlc3VtZTogcGRldj0weCVwLCBzbG90PSVzLCBQcmV2aW91cyBvcGVyYXRpbmcgc3RhdGUgW0QlZF1cbiIsCi0JCWlvYy0+bmFtZSwgcGRldiwgcGNpX25hbWUocGRldiksIGRldmljZV9zdGF0ZSk7CisJcHJpbnRrKE1ZSU9DX3NfSU5GT19GTVQgInBjaS1yZXN1bWU6IHBkZXY9MHglcCwgc2xvdD0lcywgUHJldmlvdXMgIgorCSAgICAib3BlcmF0aW5nIHN0YXRlIFtEJWRdXG4iLCBpb2MtPm5hbWUsIHBkZXYsIHBjaV9uYW1lKHBkZXYpLAorCSAgICBkZXZpY2Vfc3RhdGUpOwogCi0JcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCAwKTsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CisJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EMCwgMCk7CiAJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7Ci0JaWYgKGlvYy0+ZmFjdHMuRmxhZ3MgJiBNUElfSU9DRkFDVFNfRkxBR1NfRldfRE9XTkxPQURfQk9PVCkgewotCQlpb2MtPmJhcnMgPSBwY2lfc2VsZWN0X2JhcnMoaW9jLT5wY2lkZXYsIElPUkVTT1VSQ0VfTUVNIHwKLQkJCUlPUkVTT1VSQ0VfSU8pOwotCQlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikpCi0JCQlyZXR1cm4gMDsKLQl9IGVsc2UgewotCQlpb2MtPmJhcnMgPSBwY2lfc2VsZWN0X2JhcnMocGRldiwgSU9SRVNPVVJDRV9NRU0pOwotCQlpZiAocGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpKQotCQkJcmV0dXJuIDA7CisJaW9jLT5wY2lkZXYgPSBwZGV2OworCWVyciA9IG1wdF9tYXByZXNvdXJjZXMoaW9jKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJcHJpbnRrKE1ZSU9DX3NfSU5GT19GTVQgInBjaS1yZXN1bWU6IGlvYy1zdGF0ZT0weCV4LGRvb3JiZWxsPTB4JXhcbiIsCisJICAgIGlvYy0+bmFtZSwgKG1wdF9HZXRJb2NTdGF0ZShpb2MsIDEpID4+IE1QSV9JT0NfU1RBVEVfU0hJRlQpLAorCSAgICBDSElQUkVHX1JFQUQzMigmaW9jLT5jaGlwLT5Eb29yYmVsbCkpOworCisJLyoKKwkgKiBFcnJhdGEgd29ya2Fyb3VuZCBmb3IgU0FTIHBjaSBleHByZXNzOgorCSAqIFVwb24gcmV0dXJuaW5nIHRvIHRoZSBEMCBzdGF0ZSwgdGhlIGNvbnRlbnRzIG9mIHRoZSBkb29yYmVsbCB3aWxsIGJlCisJICogc3RhbGUgZGF0YSwgYW5kIHRoaXMgd2lsbCBpbmNvcnJlY3RseSBzaWduYWwgdG8gdGhlIGhvc3QgZHJpdmVyIHRoYXQKKwkgKiB0aGUgZmlybXdhcmUgaXMgcmVhZHkgdG8gcHJvY2VzcyBtcHQgY29tbWFuZHMuICAgVGhlIHdvcmthcm91bmQgaXMKKwkgKiB0byBpc3N1ZSBhIGRpYWdub3N0aWMgcmVzZXQuCisJICovCisJaWYgKGlvYy0+YnVzX3R5cGUgPT0gU0FTICYmIChwZGV2LT5kZXZpY2UgPT0KKwkgICAgTVBJX01BTlVGQUNUUEFHRV9ERVZJRF9TQVMxMDY4RSB8fCBwZGV2LT5kZXZpY2UgPT0KKwkgICAgTVBJX01BTlVGQUNUUEFHRV9ERVZJRF9TQVMxMDY0RSkpIHsKKwkJaWYgKEtpY2tTdGFydChpb2MsIDEsIENBTl9TTEVFUCkgPCAwKSB7CisJCQlwcmludGsoTVlJT0Nfc19XQVJOX0ZNVCAicGNpLXJlc3VtZTogQ2Fubm90IHJlY292ZXJcbiIsCisJCQkgICAgaW9jLT5uYW1lKTsKKwkJCWdvdG8gb3V0OworCQl9CiAJfQotCWlmIChwY2lfcmVxdWVzdF9zZWxlY3RlZF9yZWdpb25zKHBkZXYsIGlvYy0+YmFycywgIm1wdCIpKQotCQlyZXR1cm4gMDsKLQotCS8qIGVuYWJsZSBpbnRlcnJ1cHRzICovCi0JQ0hJUFJFR19XUklURTMyKCZpb2MtPmNoaXAtPkludE1hc2ssIE1QSV9ISU1fRElNKTsKLQlpb2MtPmFjdGl2ZSA9IDE7Ci0KLQlwcmludGsoTVlJT0Nfc19JTkZPX0ZNVAotCQkicGNpLXJlc3VtZTogaW9jLXN0YXRlPTB4JXgsZG9vcmJlbGw9MHgleFxuIiwKLQkJaW9jLT5uYW1lLAotCQkobXB0X0dldElvY1N0YXRlKGlvYywgMSkgPj4gTVBJX0lPQ19TVEFURV9TSElGVCksCi0JCUNISVBSRUdfUkVBRDMyKCZpb2MtPmNoaXAtPkRvb3JiZWxsKSk7CiAKIAkvKiBicmluZyBpb2MgdG8gb3BlcmF0aW9uYWwgc3RhdGUgKi8KLQlpZiAoKHJlY292ZXJ5X3N0YXRlID0gbXB0X2RvX2lvY19yZWNvdmVyeShpb2MsCi0JICAgIE1QVF9IT1NURVZFTlRfSU9DX1JFQ09WRVIsIENBTl9TTEVFUCkpICE9IDApIHsKKwlwcmludGsoTVlJT0Nfc19JTkZPX0ZNVCAiU2VuZGluZyBtcHRfZG9faW9jX3JlY292ZXJ5XG4iLCBpb2MtPm5hbWUpOworCXJlY292ZXJ5X3N0YXRlID0gbXB0X2RvX2lvY19yZWNvdmVyeShpb2MsIE1QVF9IT1NURVZFTlRfSU9DX0JSSU5HVVAsCisJCQkJCQkgQ0FOX1NMRUVQKTsKKwlpZiAocmVjb3Zlcnlfc3RhdGUgIT0gMCkKKwkJcHJpbnRrKE1ZSU9DX3NfV0FSTl9GTVQgInBjaS1yZXN1bWU6IENhbm5vdCByZWNvdmVyLCAiCisJCSAgICAiZXJyb3I6WyV4XVxuIiwgaW9jLT5uYW1lLCByZWNvdmVyeV9zdGF0ZSk7CisJZWxzZQogCQlwcmludGsoTVlJT0Nfc19JTkZPX0ZNVAotCQkJInBjaS1yZXN1bWU6IENhbm5vdCByZWNvdmVyLCBlcnJvcjpbJXhdXG4iLAotCQkJaW9jLT5uYW1lLCByZWNvdmVyeV9zdGF0ZSk7Ci0JfSBlbHNlIHsKLQkJcHJpbnRrKE1ZSU9DX3NfSU5GT19GTVQKLQkJCSJwY2ktcmVzdW1lOiBzdWNjZXNzXG4iLCBpb2MtPm5hbWUpOwotCX0KLQorCQkgICAgInBjaS1yZXN1bWU6IHN1Y2Nlc3NcbiIsIGlvYy0+bmFtZSk7Cisgb3V0OgogCXJldHVybiAwOworCiB9CiAjZW5kaWYKIApAQCAtMTkwMyw2ICsxOTM4LDcgQEAKICAqCQktMyBpZiBSRUFEWSBidXQgUHJpbWVJT0NGaWZvcyBGYWlsZWQKICAqCQktNCBpZiBSRUFEWSBidXQgSU9DSW5pdCBGYWlsZWQKICAqCQktNSBpZiBmYWlsZWQgdG8gZW5hYmxlX2RldmljZSBhbmQvb3IgcmVxdWVzdF9zZWxlY3RlZF9yZWdpb25zCisgKgkJLTYgaWYgZmFpbGVkIHRvIHVwbG9hZCBmaXJtd2FyZQogICovCiBzdGF0aWMgaW50CiBtcHRfZG9faW9jX3JlY292ZXJ5KE1QVF9BREFQVEVSICppb2MsIHUzMiByZWFzb24sIGludCBzbGVlcEZsYWcpCkBAIC0yMDk3LDcgKzIxMzMsNyBAQAogCQkJCX0gZWxzZSB7CiAJCQkJCXByaW50ayhNWUlPQ19zX1dBUk5fRk1UCiAJCQkJCSAgICAiZmlybXdhcmUgdXBsb2FkIGZhaWx1cmUhXG4iLCBpb2MtPm5hbWUpOwotCQkJCQlyZXQgPSAtNTsKKwkJCQkJcmV0ID0gLTY7CiAJCQkJfQogCQkJfQogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNjc2loLmMgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNjc2loLmMKaW5kZXggMGMyNTJmNi4uYzIwN2JkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2NzaWguYwpAQCAtMTE3MCw2ICsxMTcwLDEwIEBACiBpbnQKIG1wdHNjc2loX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKKwlNUFRfQURBUFRFUiAJCSppb2MgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisKKwlzY3NpX2Jsb2NrX3JlcXVlc3RzKGlvYy0+c2gpOworCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CiAJbXB0c2NzaWhfc2h1dGRvd24ocGRldik7CiAJcmV0dXJuIG1wdF9zdXNwZW5kKHBkZXYsc3RhdGUpOwogfQpAQCAtMTE4Myw3ICsxMTg3LDEyIEBACiBpbnQKIG1wdHNjc2loX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLQlyZXR1cm4gbXB0X3Jlc3VtZShwZGV2KTsKKwlNUFRfQURBUFRFUiAJCSppb2MgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJaW50IHJjOworCisJcmMgPSBtcHRfcmVzdW1lKHBkZXYpOworCXNjc2lfdW5ibG9ja19yZXF1ZXN0cyhpb2MtPnNoKTsKKwlyZXR1cm4gcmM7CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9NYWtlZmlsZSBiL2RyaXZlcnMvbW1jL2NvcmUvTWFrZWZpbGUKaW5kZXggNDk4NTgwNy4uMTlhMWEyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21tYy9jb3JlL01ha2VmaWxlCkBAIC03LDcgKzcsNyBAQAogZW5kaWYKIAogb2JqLSQoQ09ORklHX01NQykJCSs9IG1tY19jb3JlLm8KLW1tY19jb3JlLXkJCQk6PSBjb3JlLm8gc3lzZnMubyBidXMubyBob3N0Lm8gXAorbW1jX2NvcmUteQkJCTo9IGNvcmUubyBidXMubyBob3N0Lm8gXAogCQkJCSAgIG1tYy5vIG1tY19vcHMubyBzZC5vIHNkX29wcy5vIFwKIAkJCQkgICBzZGlvLm8gc2Rpb19vcHMubyBzZGlvX2J1cy5vIFwKIAkJCQkgICBzZGlvX2Npcy5vIHNkaW9faW8ubyBzZGlvX2lycS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jb3JlL2J1cy5jIGIvZHJpdmVycy9tbWMvY29yZS9idXMuYwppbmRleCBiMGMyMmNhLi5mZDk1YjE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL2J1cy5jCisrKyBiL2RyaXZlcnMvbW1jL2NvcmUvYnVzLmMKQEAgLTE3LDcgKzE3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tbWMvY2FyZC5oPgogI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CiAKLSNpbmNsdWRlICJzeXNmcy5oIgogI2luY2x1ZGUgImNvcmUuaCIKICNpbmNsdWRlICJzZGlvX2Npcy5oIgogI2luY2x1ZGUgImJ1cy5oIgpAQCAtNDMsNyArNDIsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgbW1jX2Rldl9hdHRyc1tdID0gewotCU1NQ19BVFRSX1JPKHR5cGUpLAorCV9fQVRUUih0eXBlLCBTX0lSVUdPLCBtbWNfdHlwZV9zaG93LCBOVUxMKSwKIAlfX0FUVFJfTlVMTCwKIH07CiAKQEAgLTE4OSw3ICsxODgsNyBAQAogLyoKICAqIEFsbG9jYXRlIGFuZCBpbml0aWFsaXNlIGEgbmV3IE1NQyBjYXJkIHN0cnVjdHVyZS4KICAqLwotc3RydWN0IG1tY19jYXJkICptbWNfYWxsb2NfY2FyZChzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpCitzdHJ1Y3QgbW1jX2NhcmQgKm1tY19hbGxvY19jYXJkKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCwgc3RydWN0IGRldmljZV90eXBlICp0eXBlKQogewogCXN0cnVjdCBtbWNfY2FyZCAqY2FyZDsKIApAQCAtMjA0LDYgKzIwMyw3IEBACiAJY2FyZC0+ZGV2LnBhcmVudCA9IG1tY19jbGFzc2Rldihob3N0KTsKIAljYXJkLT5kZXYuYnVzID0gJm1tY19idXNfdHlwZTsKIAljYXJkLT5kZXYucmVsZWFzZSA9IG1tY19yZWxlYXNlX2NhcmQ7CisJY2FyZC0+ZGV2LnR5cGUgPSB0eXBlOwogCiAJcmV0dXJuIGNhcmQ7CiB9CkBAIC0yNDgsMjQgKzI0OCwxMCBAQAogCQkJdHlwZSwgY2FyZC0+cmNhKTsKIAl9CiAKLQljYXJkLT5kZXYudWV2ZW50X3N1cHByZXNzID0gMTsKLQogCXJldCA9IGRldmljZV9hZGQoJmNhcmQtPmRldik7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCWlmIChjYXJkLT5ob3N0LT5idXNfb3BzLT5zeXNmc19hZGQpIHsKLQkJcmV0ID0gY2FyZC0+aG9zdC0+YnVzX29wcy0+c3lzZnNfYWRkKGNhcmQtPmhvc3QsIGNhcmQpOwotCQlpZiAocmV0KSB7Ci0JCQlkZXZpY2VfZGVsKCZjYXJkLT5kZXYpOwotCQkJcmV0dXJuIHJldDsKLQkJIH0KLQl9Ci0KLQljYXJkLT5kZXYudWV2ZW50X3N1cHByZXNzID0gMDsKLQotCWtvYmplY3RfdWV2ZW50KCZjYXJkLT5kZXYua29iaiwgS09CSl9BREQpOwotCiAJbW1jX2NhcmRfc2V0X3ByZXNlbnQoY2FyZCk7CiAKIAlyZXR1cm4gMDsKQEAgLTI4NSw5ICsyNzEsNiBAQAogCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGNhcmQgJTA0eCByZW1vdmVkXG4iLAogCQkJCW1tY19ob3N0bmFtZShjYXJkLT5ob3N0KSwgY2FyZC0+cmNhKTsKIAkJfQotCi0JCWlmIChjYXJkLT5ob3N0LT5idXNfb3BzLT5zeXNmc19yZW1vdmUpCi0JCQljYXJkLT5ob3N0LT5idXNfb3BzLT5zeXNmc19yZW1vdmUoY2FyZC0+aG9zdCwgY2FyZCk7CiAJCWRldmljZV9kZWwoJmNhcmQtPmRldik7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jb3JlL2J1cy5oIGIvZHJpdmVycy9tbWMvY29yZS9idXMuaAppbmRleCA0ZjM1NDMxLi4xODE3ODc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL2J1cy5oCisrKyBiL2RyaXZlcnMvbW1jL2NvcmUvYnVzLmgKQEAgLTExLDcgKzExLDE2IEBACiAjaWZuZGVmIF9NTUNfQ09SRV9CVVNfSAogI2RlZmluZSBfTU1DX0NPUkVfQlVTX0gKIAotc3RydWN0IG1tY19jYXJkICptbWNfYWxsb2NfY2FyZChzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpOworI2RlZmluZSBNTUNfREVWX0FUVFIobmFtZSwgZm10LCBhcmdzLi4uKQkJCQkJXAorc3RhdGljIHNzaXplX3QgbW1jXyMjbmFtZSMjX3Nob3cgKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikJXAorewkJCQkJCQkJCQlcCisJc3RydWN0IG1tY19jYXJkICpjYXJkID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IG1tY19jYXJkLCBkZXYpOwlcCisJcmV0dXJuIHNwcmludGYoYnVmLCBmbXQsIGFyZ3MpOwkJCQkJCVwKK30JCQkJCQkJCQkJXAorc3RhdGljIERFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08sIG1tY18jI25hbWUjI19zaG93LCBOVUxMKQorCitzdHJ1Y3QgbW1jX2NhcmQgKm1tY19hbGxvY19jYXJkKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCwKKwlzdHJ1Y3QgZGV2aWNlX3R5cGUgKnR5cGUpOwogaW50IG1tY19hZGRfY2FyZChzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQpOwogdm9pZCBtbWNfcmVtb3ZlX2NhcmQoc3RydWN0IG1tY19jYXJkICpjYXJkKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9jb3JlLmggYi9kcml2ZXJzL21tYy9jb3JlL2NvcmUuaAppbmRleCAzOWRhZjJmLi5jZmE4ZTE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL2NvcmUuaAorKysgYi9kcml2ZXJzL21tYy9jb3JlL2NvcmUuaApAQCAtMTgsOCArMTgsNiBAQAogc3RydWN0IG1tY19idXNfb3BzIHsKIAl2b2lkICgqcmVtb3ZlKShzdHJ1Y3QgbW1jX2hvc3QgKik7CiAJdm9pZCAoKmRldGVjdCkoc3RydWN0IG1tY19ob3N0ICopOwotCWludCAoKnN5c2ZzX2FkZCkoc3RydWN0IG1tY19ob3N0ICosIHN0cnVjdCBtbWNfY2FyZCAqY2FyZCk7Ci0Jdm9pZCAoKnN5c2ZzX3JlbW92ZSkoc3RydWN0IG1tY19ob3N0ICosIHN0cnVjdCBtbWNfY2FyZCAqY2FyZCk7CiAJdm9pZCAoKnN1c3BlbmQpKHN0cnVjdCBtbWNfaG9zdCAqKTsKIAl2b2lkICgqcmVzdW1lKShzdHJ1Y3QgbW1jX2hvc3QgKik7CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9tbWMuYyBiL2RyaXZlcnMvbW1jL2NvcmUvbW1jLmMKaW5kZXggNjhjMGUzYi4uM2RhMjllZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9tbWMuYworKysgYi9kcml2ZXJzL21tYy9jb3JlL21tYy5jCkBAIC0xNyw3ICsxNyw2IEBACiAjaW5jbHVkZSA8bGludXgvbW1jL21tYy5oPgogCiAjaW5jbHVkZSAiY29yZS5oIgotI2luY2x1ZGUgInN5c2ZzLmgiCiAjaW5jbHVkZSAiYnVzLmgiCiAjaW5jbHVkZSAibW1jX29wcy5oIgogCkBAIC0yNDgsNiArMjQ3LDQ0IEBACiAJcmV0dXJuIGVycjsKIH0KIAorTU1DX0RFVl9BVFRSKGNpZCwgIiUwOHglMDh4JTA4eCUwOHhcbiIsIGNhcmQtPnJhd19jaWRbMF0sIGNhcmQtPnJhd19jaWRbMV0sCisJY2FyZC0+cmF3X2NpZFsyXSwgY2FyZC0+cmF3X2NpZFszXSk7CitNTUNfREVWX0FUVFIoY3NkLCAiJTA4eCUwOHglMDh4JTA4eFxuIiwgY2FyZC0+cmF3X2NzZFswXSwgY2FyZC0+cmF3X2NzZFsxXSwKKwljYXJkLT5yYXdfY3NkWzJdLCBjYXJkLT5yYXdfY3NkWzNdKTsKK01NQ19ERVZfQVRUUihkYXRlLCAiJTAyZC8lMDRkXG4iLCBjYXJkLT5jaWQubW9udGgsIGNhcmQtPmNpZC55ZWFyKTsKK01NQ19ERVZfQVRUUihmd3JldiwgIjB4JXhcbiIsIGNhcmQtPmNpZC5md3Jldik7CitNTUNfREVWX0FUVFIoaHdyZXYsICIweCV4XG4iLCBjYXJkLT5jaWQuaHdyZXYpOworTU1DX0RFVl9BVFRSKG1hbmZpZCwgIjB4JTA2eFxuIiwgY2FyZC0+Y2lkLm1hbmZpZCk7CitNTUNfREVWX0FUVFIobmFtZSwgIiVzXG4iLCBjYXJkLT5jaWQucHJvZF9uYW1lKTsKK01NQ19ERVZfQVRUUihvZW1pZCwgIjB4JTA0eFxuIiwgY2FyZC0+Y2lkLm9lbWlkKTsKK01NQ19ERVZfQVRUUihzZXJpYWwsICIweCUwOHhcbiIsIGNhcmQtPmNpZC5zZXJpYWwpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbW1jX3N0ZF9hdHRyc1tdID0geworCSZkZXZfYXR0cl9jaWQuYXR0ciwKKwkmZGV2X2F0dHJfY3NkLmF0dHIsCisJJmRldl9hdHRyX2RhdGUuYXR0ciwKKwkmZGV2X2F0dHJfZndyZXYuYXR0ciwKKwkmZGV2X2F0dHJfaHdyZXYuYXR0ciwKKwkmZGV2X2F0dHJfbWFuZmlkLmF0dHIsCisJJmRldl9hdHRyX25hbWUuYXR0ciwKKwkmZGV2X2F0dHJfb2VtaWQuYXR0ciwKKwkmZGV2X2F0dHJfc2VyaWFsLmF0dHIsCisJTlVMTCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIG1tY19zdGRfYXR0cl9ncm91cCA9IHsKKwkuYXR0cnMgPSBtbWNfc3RkX2F0dHJzLAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKm1tY19hdHRyX2dyb3Vwc1tdID0geworCSZtbWNfc3RkX2F0dHJfZ3JvdXAsCisJTlVMTCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX3R5cGUgbW1jX3R5cGUgPSB7CisJLmdyb3VwcyA9IG1tY19hdHRyX2dyb3VwcywKK307CisKIC8qCiAgKiBIYW5kbGUgdGhlIGRldGVjdGlvbiBhbmQgaW5pdGlhbGlzYXRpb24gb2YgYSBjYXJkLgogICoKQEAgLTMwOCw3ICszNDUsNyBAQAogCQkvKgogCQkgKiBBbGxvY2F0ZSBjYXJkIHN0cnVjdHVyZS4KIAkJICovCi0JCWNhcmQgPSBtbWNfYWxsb2NfY2FyZChob3N0KTsKKwkJY2FyZCA9IG1tY19hbGxvY19jYXJkKGhvc3QsICZtbWNfdHlwZSk7CiAJCWlmIChJU19FUlIoY2FyZCkpIHsKIAkJCWVyciA9IFBUUl9FUlIoY2FyZCk7CiAJCQlnb3RvIGVycjsKQEAgLTQ1OSw1MyArNDk2LDYgQEAKIAl9CiB9CiAKLU1NQ19BVFRSX0ZOKGNpZCwgIiUwOHglMDh4JTA4eCUwOHhcbiIsIGNhcmQtPnJhd19jaWRbMF0sIGNhcmQtPnJhd19jaWRbMV0sCi0JY2FyZC0+cmF3X2NpZFsyXSwgY2FyZC0+cmF3X2NpZFszXSk7Ci1NTUNfQVRUUl9GTihjc2QsICIlMDh4JTA4eCUwOHglMDh4XG4iLCBjYXJkLT5yYXdfY3NkWzBdLCBjYXJkLT5yYXdfY3NkWzFdLAotCWNhcmQtPnJhd19jc2RbMl0sIGNhcmQtPnJhd19jc2RbM10pOwotTU1DX0FUVFJfRk4oZGF0ZSwgIiUwMmQvJTA0ZFxuIiwgY2FyZC0+Y2lkLm1vbnRoLCBjYXJkLT5jaWQueWVhcik7Ci1NTUNfQVRUUl9GTihmd3JldiwgIjB4JXhcbiIsIGNhcmQtPmNpZC5md3Jldik7Ci1NTUNfQVRUUl9GTihod3JldiwgIjB4JXhcbiIsIGNhcmQtPmNpZC5od3Jldik7Ci1NTUNfQVRUUl9GTihtYW5maWQsICIweCUwNnhcbiIsIGNhcmQtPmNpZC5tYW5maWQpOwotTU1DX0FUVFJfRk4obmFtZSwgIiVzXG4iLCBjYXJkLT5jaWQucHJvZF9uYW1lKTsKLU1NQ19BVFRSX0ZOKG9lbWlkLCAiMHglMDR4XG4iLCBjYXJkLT5jaWQub2VtaWQpOwotTU1DX0FUVFJfRk4oc2VyaWFsLCAiMHglMDh4XG4iLCBjYXJkLT5jaWQuc2VyaWFsKTsKLQotc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIG1tY19kZXZfYXR0cnNbXSA9IHsKLQlNTUNfQVRUUl9STyhjaWQpLAotCU1NQ19BVFRSX1JPKGNzZCksCi0JTU1DX0FUVFJfUk8oZGF0ZSksCi0JTU1DX0FUVFJfUk8oZndyZXYpLAotCU1NQ19BVFRSX1JPKGh3cmV2KSwKLQlNTUNfQVRUUl9STyhtYW5maWQpLAotCU1NQ19BVFRSX1JPKG5hbWUpLAotCU1NQ19BVFRSX1JPKG9lbWlkKSwKLQlNTUNfQVRUUl9STyhzZXJpYWwpLAotCV9fQVRUUl9OVUxMLAotfTsKLQotLyoKLSAqIEFkZHMgc3lzZnMgZW50cmllcyBhcyByZWxldmFudC4KLSAqLwotc3RhdGljIGludCBtbWNfc3lzZnNfYWRkKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19jYXJkICpjYXJkKQotewotCWludCByZXQ7Ci0KLQlyZXQgPSBtbWNfYWRkX2F0dHJzKGNhcmQsIG1tY19kZXZfYXR0cnMpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBSZW1vdmVzIHRoZSBzeXNmcyBlbnRyaWVzIGFkZGVkIGJ5IG1tY19zeXNmc19hZGQoKS4KLSAqLwotc3RhdGljIHZvaWQgbW1jX3N5c2ZzX3JlbW92ZShzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfY2FyZCAqY2FyZCkKLXsKLQltbWNfcmVtb3ZlX2F0dHJzKGNhcmQsIG1tY19kZXZfYXR0cnMpOwotfQotCiAjaWZkZWYgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FCiAKIC8qCkBAIC01NjAsOCArNTUwLDYgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1jX2J1c19vcHMgbW1jX29wcyA9IHsKIAkucmVtb3ZlID0gbW1jX3JlbW92ZSwKIAkuZGV0ZWN0ID0gbW1jX2RldGVjdCwKLQkuc3lzZnNfYWRkID0gbW1jX3N5c2ZzX2FkZCwKLQkuc3lzZnNfcmVtb3ZlID0gbW1jX3N5c2ZzX3JlbW92ZSwKIAkuc3VzcGVuZCA9IG1tY19zdXNwZW5kLAogCS5yZXN1bWUgPSBtbWNfcmVzdW1lLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvc2QuYyBiL2RyaXZlcnMvbW1jL2NvcmUvc2QuYwppbmRleCBkMWMxZTBmNS4uN2VmM2IxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9zZC5jCisrKyBiL2RyaXZlcnMvbW1jL2NvcmUvc2QuYwpAQCAtMTgsNyArMTgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21tYy9zZC5oPgogCiAjaW5jbHVkZSAiY29yZS5oIgotI2luY2x1ZGUgInN5c2ZzLmgiCiAjaW5jbHVkZSAiYnVzLmgiCiAjaW5jbHVkZSAibW1jX29wcy5oIgogI2luY2x1ZGUgInNkX29wcy5oIgpAQCAtMjgzLDYgKzI4Miw0NyBAQAogCXJldHVybiBlcnI7CiB9CiAKK01NQ19ERVZfQVRUUihjaWQsICIlMDh4JTA4eCUwOHglMDh4XG4iLCBjYXJkLT5yYXdfY2lkWzBdLCBjYXJkLT5yYXdfY2lkWzFdLAorCWNhcmQtPnJhd19jaWRbMl0sIGNhcmQtPnJhd19jaWRbM10pOworTU1DX0RFVl9BVFRSKGNzZCwgIiUwOHglMDh4JTA4eCUwOHhcbiIsIGNhcmQtPnJhd19jc2RbMF0sIGNhcmQtPnJhd19jc2RbMV0sCisJY2FyZC0+cmF3X2NzZFsyXSwgY2FyZC0+cmF3X2NzZFszXSk7CitNTUNfREVWX0FUVFIoc2NyLCAiJTA4eCUwOHhcbiIsIGNhcmQtPnJhd19zY3JbMF0sIGNhcmQtPnJhd19zY3JbMV0pOworTU1DX0RFVl9BVFRSKGRhdGUsICIlMDJkLyUwNGRcbiIsIGNhcmQtPmNpZC5tb250aCwgY2FyZC0+Y2lkLnllYXIpOworTU1DX0RFVl9BVFRSKGZ3cmV2LCAiMHgleFxuIiwgY2FyZC0+Y2lkLmZ3cmV2KTsKK01NQ19ERVZfQVRUUihod3JldiwgIjB4JXhcbiIsIGNhcmQtPmNpZC5od3Jldik7CitNTUNfREVWX0FUVFIobWFuZmlkLCAiMHglMDZ4XG4iLCBjYXJkLT5jaWQubWFuZmlkKTsKK01NQ19ERVZfQVRUUihuYW1lLCAiJXNcbiIsIGNhcmQtPmNpZC5wcm9kX25hbWUpOworTU1DX0RFVl9BVFRSKG9lbWlkLCAiMHglMDR4XG4iLCBjYXJkLT5jaWQub2VtaWQpOworTU1DX0RFVl9BVFRSKHNlcmlhbCwgIjB4JTA4eFxuIiwgY2FyZC0+Y2lkLnNlcmlhbCk7CisKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnNkX3N0ZF9hdHRyc1tdID0geworCSZkZXZfYXR0cl9jaWQuYXR0ciwKKwkmZGV2X2F0dHJfY3NkLmF0dHIsCisJJmRldl9hdHRyX3Njci5hdHRyLAorCSZkZXZfYXR0cl9kYXRlLmF0dHIsCisJJmRldl9hdHRyX2Z3cmV2LmF0dHIsCisJJmRldl9hdHRyX2h3cmV2LmF0dHIsCisJJmRldl9hdHRyX21hbmZpZC5hdHRyLAorCSZkZXZfYXR0cl9uYW1lLmF0dHIsCisJJmRldl9hdHRyX29lbWlkLmF0dHIsCisJJmRldl9hdHRyX3NlcmlhbC5hdHRyLAorCU5VTEwsCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBzZF9zdGRfYXR0cl9ncm91cCA9IHsKKwkuYXR0cnMgPSBzZF9zdGRfYXR0cnMsCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqc2RfYXR0cl9ncm91cHNbXSA9IHsKKwkmc2Rfc3RkX2F0dHJfZ3JvdXAsCisJTlVMTCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX3R5cGUgc2RfdHlwZSA9IHsKKwkuZ3JvdXBzID0gc2RfYXR0cl9ncm91cHMsCit9OworCiAvKgogICogSGFuZGxlIHRoZSBkZXRlY3Rpb24gYW5kIGluaXRpYWxpc2F0aW9uIG9mIGEgY2FyZC4KICAqCkBAIC0zNTIsNyArMzkyLDcgQEAKIAkJLyoKIAkJICogQWxsb2NhdGUgY2FyZCBzdHJ1Y3R1cmUuCiAJCSAqLwotCQljYXJkID0gbW1jX2FsbG9jX2NhcmQoaG9zdCk7CisJCWNhcmQgPSBtbWNfYWxsb2NfY2FyZChob3N0LCAmc2RfdHlwZSk7CiAJCWlmIChJU19FUlIoY2FyZCkpIHsKIAkJCWVyciA9IFBUUl9FUlIoY2FyZCk7CiAJCQlnb3RvIGVycjsKQEAgLTUxOCw1NSArNTU4LDYgQEAKIAl9CiB9CiAKLU1NQ19BVFRSX0ZOKGNpZCwgIiUwOHglMDh4JTA4eCUwOHhcbiIsIGNhcmQtPnJhd19jaWRbMF0sIGNhcmQtPnJhd19jaWRbMV0sCi0JY2FyZC0+cmF3X2NpZFsyXSwgY2FyZC0+cmF3X2NpZFszXSk7Ci1NTUNfQVRUUl9GTihjc2QsICIlMDh4JTA4eCUwOHglMDh4XG4iLCBjYXJkLT5yYXdfY3NkWzBdLCBjYXJkLT5yYXdfY3NkWzFdLAotCWNhcmQtPnJhd19jc2RbMl0sIGNhcmQtPnJhd19jc2RbM10pOwotTU1DX0FUVFJfRk4oc2NyLCAiJTA4eCUwOHhcbiIsIGNhcmQtPnJhd19zY3JbMF0sIGNhcmQtPnJhd19zY3JbMV0pOwotTU1DX0FUVFJfRk4oZGF0ZSwgIiUwMmQvJTA0ZFxuIiwgY2FyZC0+Y2lkLm1vbnRoLCBjYXJkLT5jaWQueWVhcik7Ci1NTUNfQVRUUl9GTihmd3JldiwgIjB4JXhcbiIsIGNhcmQtPmNpZC5md3Jldik7Ci1NTUNfQVRUUl9GTihod3JldiwgIjB4JXhcbiIsIGNhcmQtPmNpZC5od3Jldik7Ci1NTUNfQVRUUl9GTihtYW5maWQsICIweCUwNnhcbiIsIGNhcmQtPmNpZC5tYW5maWQpOwotTU1DX0FUVFJfRk4obmFtZSwgIiVzXG4iLCBjYXJkLT5jaWQucHJvZF9uYW1lKTsKLU1NQ19BVFRSX0ZOKG9lbWlkLCAiMHglMDR4XG4iLCBjYXJkLT5jaWQub2VtaWQpOwotTU1DX0FUVFJfRk4oc2VyaWFsLCAiMHglMDh4XG4iLCBjYXJkLT5jaWQuc2VyaWFsKTsKLQotc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIG1tY19zZF9kZXZfYXR0cnNbXSA9IHsKLQlNTUNfQVRUUl9STyhjaWQpLAotCU1NQ19BVFRSX1JPKGNzZCksCi0JTU1DX0FUVFJfUk8oc2NyKSwKLQlNTUNfQVRUUl9STyhkYXRlKSwKLQlNTUNfQVRUUl9STyhmd3JldiksCi0JTU1DX0FUVFJfUk8oaHdyZXYpLAotCU1NQ19BVFRSX1JPKG1hbmZpZCksCi0JTU1DX0FUVFJfUk8obmFtZSksCi0JTU1DX0FUVFJfUk8ob2VtaWQpLAotCU1NQ19BVFRSX1JPKHNlcmlhbCksCi0JX19BVFRSX05VTEwsCi19OwotCi0vKgotICogQWRkcyBzeXNmcyBlbnRyaWVzIGFzIHJlbGV2YW50LgotICovCi1zdGF0aWMgaW50IG1tY19zZF9zeXNmc19hZGQoc3RydWN0IG1tY19ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQpCi17Ci0JaW50IHJldDsKLQotCXJldCA9IG1tY19hZGRfYXR0cnMoY2FyZCwgbW1jX3NkX2Rldl9hdHRycyk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIFJlbW92ZXMgdGhlIHN5c2ZzIGVudHJpZXMgYWRkZWQgYnkgbW1jX3N5c2ZzX2FkZCgpLgotICovCi1zdGF0aWMgdm9pZCBtbWNfc2Rfc3lzZnNfcmVtb3ZlKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19jYXJkICpjYXJkKQotewotCW1tY19yZW1vdmVfYXR0cnMoY2FyZCwgbW1jX3NkX2Rldl9hdHRycyk7Ci19Ci0KICNpZmRlZiBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUUKIAogLyoKQEAgLTYyMSw4ICs2MTIsNiBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBtbWNfYnVzX29wcyBtbWNfc2Rfb3BzID0gewogCS5yZW1vdmUgPSBtbWNfc2RfcmVtb3ZlLAogCS5kZXRlY3QgPSBtbWNfc2RfZGV0ZWN0LAotCS5zeXNmc19hZGQgPSBtbWNfc2Rfc3lzZnNfYWRkLAotCS5zeXNmc19yZW1vdmUgPSBtbWNfc2Rfc3lzZnNfcmVtb3ZlLAogCS5zdXNwZW5kID0gbW1jX3NkX3N1c3BlbmQsCiAJLnJlc3VtZSA9IG1tY19zZF9yZXN1bWUsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9zZGlvLmMgYi9kcml2ZXJzL21tYy9jb3JlL3NkaW8uYwppbmRleCA4N2E1MGY0Li40ZWFiNzllIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL3NkaW8uYworKysgYi9kcml2ZXJzL21tYy9jb3JlL3NkaW8uYwpAQCAtMjg3LDcgKzI4Nyw3IEBACiAJLyoKIAkgKiBBbGxvY2F0ZSBjYXJkIHN0cnVjdHVyZS4KIAkgKi8KLQljYXJkID0gbW1jX2FsbG9jX2NhcmQoaG9zdCk7CisJY2FyZCA9IG1tY19hbGxvY19jYXJkKGhvc3QsIE5VTEwpOwogCWlmIChJU19FUlIoY2FyZCkpIHsKIAkJZXJyID0gUFRSX0VSUihjYXJkKTsKIAkJZ290byBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jb3JlL3N5c2ZzLmMgYi9kcml2ZXJzL21tYy9jb3JlL3N5c2ZzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwYTk3ZTcuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9zeXNmcy5jCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoKLSAqICBsaW51eC9kcml2ZXJzL21tYy9jb3JlL3N5c2ZzLmMKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzIFJ1c3NlbGwgS2luZywgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqICBDb3B5cmlnaHQgMjAwNyBQaWVycmUgT3NzbWFuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiAgTU1DIHN5c2ZzL2RyaXZlciBtb2RlbCBzdXBwb3J0LgotICovCi0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9tbWMvY2FyZC5oPgotCi0jaW5jbHVkZSAic3lzZnMuaCIKLQotaW50IG1tY19hZGRfYXR0cnMoc3RydWN0IG1tY19jYXJkICpjYXJkLCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cnMpCi17Ci0JaW50IGVycm9yID0gMDsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGF0dHJfbmFtZShhdHRyc1tpXSk7IGkrKykgewotCQllcnJvciA9IGRldmljZV9jcmVhdGVfZmlsZSgmY2FyZC0+ZGV2LCAmYXR0cnNbaV0pOwotCQlpZiAoZXJyb3IpIHsKLQkJCXdoaWxlICgtLWkgPj0gMCkKLQkJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmNhcmQtPmRldiwgJmF0dHJzW2ldKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JcmV0dXJuIGVycm9yOwotfQotCi12b2lkIG1tY19yZW1vdmVfYXR0cnMoc3RydWN0IG1tY19jYXJkICpjYXJkLCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cnMpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBhdHRyX25hbWUoYXR0cnNbaV0pOyBpKyspCi0JCWRldmljZV9yZW1vdmVfZmlsZSgmY2FyZC0+ZGV2LCAmYXR0cnNbaV0pOwotfQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jb3JlL3N5c2ZzLmggYi9kcml2ZXJzL21tYy9jb3JlL3N5c2ZzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiOGY2NzAuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9zeXNmcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoKLSAqICBsaW51eC9kcml2ZXJzL21tYy9jb3JlL3N5c2ZzLmgKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzIFJ1c3NlbGwgS2luZywgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqICBDb3B5cmlnaHQgMjAwNyBQaWVycmUgT3NzbWFuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotI2lmbmRlZiBfTU1DX0NPUkVfU1lTRlNfSAotI2RlZmluZSBfTU1DX0NPUkVfU1lTRlNfSAotCi0jZGVmaW5lIE1NQ19BVFRSX0ZOKG5hbWUsIGZtdCwgYXJncy4uLikJCQkJCVwKLXN0YXRpYyBzc2l6ZV90IG1tY18jI25hbWUjI19zaG93IChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCVwKLXsJCQkJCQkJCQlcCi0Jc3RydWN0IG1tY19jYXJkICpjYXJkID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IG1tY19jYXJkLCBkZXYpO1wKLQlyZXR1cm4gc3ByaW50ZihidWYsIGZtdCwgYXJncyk7CQkJCQlcCi19Ci0KLSNkZWZpbmUgTU1DX0FUVFJfUk8obmFtZSkgX19BVFRSKG5hbWUsIFNfSVJVR08sIG1tY18jI25hbWUjI19zaG93LCBOVUxMKQotCi1pbnQgbW1jX2FkZF9hdHRycyhzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRycyk7Ci12b2lkIG1tY19yZW1vdmVfYXR0cnMoc3RydWN0IG1tY19jYXJkICpjYXJkLCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cnMpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvdGlmbV9zZC5jIGIvZHJpdmVycy9tbWMvaG9zdC90aWZtX3NkLmMKaW5kZXggMjBkNWM3Yi4uMWMxNGExOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC90aWZtX3NkLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC90aWZtX3NkLmMKQEAgLTE4MCw3ICsxODAsNyBAQAogCQkJaG9zdC0+c2dfcG9zKys7CiAJCQlpZiAoaG9zdC0+c2dfcG9zID09IGhvc3QtPnNnX2xlbikgewogCQkJCWlmICgocl9kYXRhLT5mbGFncyAmIE1NQ19EQVRBX1dSSVRFKQotCQkJCSAgICAmJiBEQVRBX0NBUlJZKQorCQkJCSAgICAmJiAoaG9zdC0+Y21kX2ZsYWdzICYgREFUQV9DQVJSWSkpCiAJCQkJCXdyaXRlbChob3N0LT5ib3VuY2VfYnVmX2RhdGFbMF0sCiAJCQkJCSAgICAgICBob3N0LT5kZXYtPmFkZHIKIAkJCQkJICAgICAgICsgU09DS19NTUNTRF9EQVRBKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTAxLmMgYi9kcml2ZXJzL25ldC8zYzUwMS5jCmluZGV4IDdkMjUzNjguLjViYTRiYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTAxLmMKKysrIGIvZHJpdmVycy9uZXQvM2M1MDEuYwpAQCAtNDg1LDkgKzQ4NSw3IEBACiAJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGJ1cnBlZCBkdXJpbmcgdHggbG9hZC5cbiIsCiAJCQkJZGV2LT5uYW1lKTsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7Ci0JfQotCXdoaWxlICgxKTsKLQorCX0gd2hpbGUgKDEpOwogfQogCiAvKioKQEAgLTYxMiw3ICs2MTAsOCBAQAogCQkJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CiAJCQlpZiAoZWxfZGVidWcgPiA2KQogCQkJCXByaW50ayhLRVJOX0RFQlVHICIgVHggc3VjY2VlZGVkICVzXG4iLAotCQkJCQkodHhzciAmIFRYX1JEWSkgPyAiLiIgOiAiYnV0IHR4IGlzIGJ1c3khIik7CisJCQkJCSh0eHNyICYgVFhfUkRZKSA/ICIuIiA6CisJCQkJCQkJImJ1dCB0eCBpcyBidXN5ISIpOwogCQkJLyoKIAkJCSAqCVRoaXMgaXMgc2FmZSB0aGUgaW50ZXJydXB0IGlzIGF0b21pYyBXUlQgaXRzZWxmLgogCQkJICovCkBAIC02OTMsNyArNjkyLDggQEAKIAogCWlmIChwa3RfbGVuIDwgNjAgfHwgcGt0X2xlbiA+IDE1MzYpIHsKIAkJaWYgKGVsX2RlYnVnKQotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBib2d1cyBwYWNrZXQsIGxlbmd0aD0lZFxuIiwgZGV2LT5uYW1lLCBwa3RfbGVuKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczogYm9ndXMgcGFja2V0LCBsZW5ndGg9JWRcbiIsCisJCQkJCQlkZXYtPm5hbWUsIHBrdF9sZW4pOwogCQlkZXYtPnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7CiAJCXJldHVybjsKIAl9CkBAIC03MTEsNyArNzExLDggQEAKIAogCW91dHcoMHgwMCwgR1BfTE9XKTsKIAlpZiAoc2tiID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE1lbW9yeSBzcXVlZXplLCBkcm9wcGluZyBwYWNrZXQuXG4iLCBkZXYtPm5hbWUpOworCQlwcmludGsoS0VSTl9JTkZPICIlczogTWVtb3J5IHNxdWVlemUsIGRyb3BwaW5nIHBhY2tldC5cbiIsCisJCQkJCQkJCWRldi0+bmFtZSk7CiAJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQlyZXR1cm47CiAJfSBlbHNlIHsKQEAgLTc0OCw3ICs3NDksOCBAQAogCWlmIChlbF9kZWJ1ZyA+IDIpCiAJCXByaW50ayhLRVJOX0lORk8gIjNjNTAxIHJlc2V0Li4uIik7CiAJb3V0YihBWF9SRVNFVCwgQVhfQ01EKTsJCS8qIFJlc2V0IHRoZSBjaGlwICovCi0Jb3V0YihBWF9MT09QLCBBWF9DTUQpOwkJLyogQXV4IGNvbnRyb2wsIGlycSBhbmQgbG9vcGJhY2sgZW5hYmxlZCAqLworCS8qIEF1eCBjb250cm9sLCBpcnEgYW5kIGxvb3BiYWNrIGVuYWJsZWQgKi8KKwlvdXRiKEFYX0xPT1AsIEFYX0NNRCk7CiAJewogCQlpbnQgaTsKIAkJZm9yIChpID0gMDsgaSA8IDY7IGkrKykJLyogU2V0IHRoZSBzdGF0aW9uIGFkZHJlc3MuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdGwxL2F0bDFfbWFpbi5jIGIvZHJpdmVycy9uZXQvYXRsMS9hdGwxX21haW4uYwppbmRleCA5MjAwZWU1Li4xMjliOGIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdGwxL2F0bDFfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2F0bDEvYXRsMV9tYWluLmMKQEAgLTE3NjUsMTUgKzE3NjUsMTIgQEAKIHsKIAlzdHJ1Y3QgYXRsMV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGF0YSk7CiAJdTMyIHN0YXR1czsKLQl1OCB1cGRhdGVfcng7CiAJaW50IG1heF9pbnRzID0gMTA7CiAKIAlzdGF0dXMgPSBhZGFwdGVyLT5jbWIuY21iLT5pbnRfc3RhdHM7CiAJaWYgKCFzdGF0dXMpCiAJCXJldHVybiBJUlFfTk9ORTsKIAotCXVwZGF0ZV9yeCA9IDA7Ci0KIAlkbyB7CiAJCS8qIGNsZWFyIENNQiBpbnRlcnJ1cHQgc3RhdHVzIGF0IG9uY2UgKi8KIAkJYWRhcHRlci0+Y21iLmNtYi0+aW50X3N0YXRzID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL3NnZS5jIGIvZHJpdmVycy9uZXQvY3hnYjMvc2dlLmMKaW5kZXggOTc5ZjNmYy4uZGI1ODY4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvc2dlLmMKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvc2dlLmMKQEAgLTExMDcsOSArMTEwNywxNSBAQAogCX0KIAogCXEtPmluX3VzZSArPSBuZGVzYzsKLQlpZiAodW5saWtlbHkoY3JlZGl0cyAtIG5kZXNjIDwgcS0+c3RvcF90aHJlcykpCi0JCWlmIChVU0VfR1RTIHx8ICFzaG91bGRfcmVzdGFydF90eChxKSkKLQkJCXQzX3N0b3BfcXVldWUoZGV2LCBxcywgcSk7CisJaWYgKHVubGlrZWx5KGNyZWRpdHMgLSBuZGVzYyA8IHEtPnN0b3BfdGhyZXMpKSB7CisJCXQzX3N0b3BfcXVldWUoZGV2LCBxcywgcSk7CisKKwkJaWYgKHNob3VsZF9yZXN0YXJ0X3R4KHEpICYmCisJCSAgICB0ZXN0X2FuZF9jbGVhcl9iaXQoVFhRX0VUSCwgJnFzLT50eHFfc3RvcHBlZCkpIHsKKwkJCXEtPnJlc3RhcnRzKys7CisJCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CisJCX0KKwl9CiAKIAlnZW4gPSBxLT5nZW47CiAJcS0+dW5hY2tlZCArPSBuZGVzYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VwaWMxMDAuYyBiL2RyaXZlcnMvbmV0L2VwaWMxMDAuYwppbmRleCAwYjM2NWI4Li43NjExOGRkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXBpYzEwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2VwaWMxMDAuYwpAQCAtMTMxLDggKzEzMSw4IEBACiAKIElWYi4gUmVmZXJlbmNlcwogCi1odHRwOi8vd3d3LnNtc2MuY29tL21haW4vZGF0YXNoZWV0cy84M2MxNzEucGRmCi1odHRwOi8vd3d3LnNtc2MuY29tL21haW4vZGF0YXNoZWV0cy84M2MxNzUucGRmCitodHRwOi8vd3d3LnNtc2MuY29tL21haW4vdG9vbHMvZGlzY29udGludWVkLzgzYzE3MS5wZGYKK2h0dHA6Ly93d3cuc21zYy5jb20vbWFpbi90b29scy9kaXNjb250aW51ZWQvODNjMTc1LnBkZgogaHR0cDovL3NjeWxkLmNvbS9leHBlcnQvTldheS5odG1sCiBodHRwOi8vd3d3Lm5hdGlvbmFsLmNvbS9wZi9EUC9EUDgzODQwQS5odG1sCiAKQEAgLTIyNyw3ICsyMjcsMTIgQEAKIAkwLCAweDBDMDAsIDB4MEMwMCwgMHgyMDAwLCAgMHgwMTAwLCAweDIxMDAsIDAsIDAsCiAJMCwgMCwgMCwgMCwgIDAsIDAsIDAsIDAgfTsKIAotLyogVGhlIEVQSUMxMDAgUnggYW5kIFR4IGJ1ZmZlciBkZXNjcmlwdG9ycy4gKi8KKy8qCisgKiBUaGUgRVBJQzEwMCBSeCBhbmQgVHggYnVmZmVyIGRlc2NyaXB0b3JzLiAgTm90ZSB0aGF0IHRoZXNlCisgKiByZWFsbHkgQVJFIGhvc3QtZW5kaWFuOyBpdCdzIG5vdCBhIG1pc2Fubm90YXRpb24uICBXZSB0ZWxsCisgKiB0aGUgY2FyZCB0byBieXRlc3dhcCB0aGVtIGludGVybmFsbHkgb24gYmlnLWVuZGlhbiBob3N0cyAtCisgKiBsb29rIGZvciAjaWZkZWYgQ09ORklHX0JJR19FTkRJQU4gaW4gZXBpY19vcGVuKCkuCisgKi8KIAogc3RydWN0IGVwaWNfdHhfZGVzYyB7CiAJdTMyIHR4c3RhdHVzOwpAQCAtNDE4LDcgKzQyMyw3IEBACiAKIAkvKiBOb3RlOiB0aGUgJzE3NSBkb2VzIG5vdCBoYXZlIGEgc2VyaWFsIEVFUFJPTS4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQotCQkoKHUxNiAqKWRldi0+ZGV2X2FkZHIpW2ldID0gbGUxNl90b19jcHUoaW53KGlvYWRkciArIExBTjAgKyBpKjQpKTsKKwkJKChfX2xlMTYgKilkZXYtPmRldl9hZGRyKVtpXSA9IGNwdV90b19sZTE2KGludyhpb2FkZHIgKyBMQU4wICsgaSo0KSk7CiAKIAlpZiAoZGVidWcgPiAyKSB7CiAJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJnBkZXYtPmRldiwgIkVFUFJPTSBjb250ZW50czpcbiIpOwpAQCAtNjgyLDcgKzY4Nyw4IEBACiAJaWYgKGVwLT5jaGlwX2ZsYWdzICYgTUlJX1BXUkRXTikKIAkJb3V0bCgoaW5sKGlvYWRkciArIE5WQ1RMKSAmIH4weDAwM0MpIHwgMHg0ODAwLCBpb2FkZHIgKyBOVkNUTCk7CiAKLSNpZiBkZWZpbmVkKF9fcG93ZXJwY19fKSB8fCBkZWZpbmVkKF9fc3BhcmNfXykJCS8qIEJpZyBlbmRpYW4gKi8KKwkvKiBUZWxsIHRoZSBjaGlwIHRvIGJ5dGVzd2FwIGRlc2NyaXB0b3JzIG9uIGJpZy1lbmRpYW4gaG9zdHMgKi8KKyNpZmRlZiBDT05GSUdfQklHX0VORElBTgogCW91dGwoMHg0NDMyIHwgKFJYX0ZJRk9fVEhSRVNIPDw4KSwgaW9hZGRyICsgR0VOQ1RMKTsKIAlpbmwoaW9hZGRyICsgR0VOQ1RMKTsKIAlvdXRsKDB4MDQzMiB8IChSWF9GSUZPX1RIUkVTSDw8OCksIGlvYWRkciArIEdFTkNUTCk7CkBAIC02OTUsNyArNzAxLDcgQEAKIAl1ZGVsYXkoMjApOyAvKiBMb29rcyBsaWtlIEVQSUkgbmVlZHMgdGhhdCBpZiB5b3Ugd2FudCByZWxpYWJsZSBSWCBpbml0LiBGSVhNRTogcGNpIHBvc3RpbmcgYnVnPyAqLwogCiAJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKLQkJb3V0bChjcHVfdG9fbGUxNigoKHUxNiopZGV2LT5kZXZfYWRkcilbaV0pLCBpb2FkZHIgKyBMQU4wICsgaSo0KTsKKwkJb3V0bChsZTE2X3RvX2NwdSgoKF9fbGUxNiopZGV2LT5kZXZfYWRkcilbaV0pLCBpb2FkZHIgKyBMQU4wICsgaSo0KTsKIAogCWVwLT50eF90aHJlc2hvbGQgPSBUWF9GSUZPX1RIUkVTSDsKIAlvdXRsKGVwLT50eF90aHJlc2hvbGQsIGlvYWRkciArIFR4VGhyZXNoKTsKQEAgLTc5OCw3ICs4MDQsNyBAQAogCWZvciAoaSA9IDE2OyBpID4gMDsgaS0tKQogCQlvdXRsKDB4MDAwOCwgaW9hZGRyICsgVEVTVDEpOwogCi0jaWYgZGVmaW5lZChfX3Bvd2VycGNfXykgfHwgZGVmaW5lZChfX3NwYXJjX18pCQkvKiBCaWcgZW5kaWFuICovCisjaWZkZWYgQ09ORklHX0JJR19FTkRJQU4KIAlvdXRsKDB4MDQzMiB8IChSWF9GSUZPX1RIUkVTSDw8OCksIGlvYWRkciArIEdFTkNUTCk7CiAjZWxzZQogCW91dGwoMHgwNDEyIHwgKFJYX0ZJRk9fVEhSRVNIPDw4KSwgaW9hZGRyICsgR0VOQ1RMKTsKQEAgLTgwOCw3ICs4MTQsNyBAQAogCQlvdXRsKChpbmwoaW9hZGRyICsgTlZDVEwpICYgfjB4MDAzQykgfCAweDQ4MDAsIGlvYWRkciArIE5WQ1RMKTsKIAogCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCi0JCW91dGwoY3B1X3RvX2xlMTYoKCh1MTYqKWRldi0+ZGV2X2FkZHIpW2ldKSwgaW9hZGRyICsgTEFOMCArIGkqNCk7CisJCW91dGwobGUxNl90b19jcHUoKChfX2xlMTYqKWRldi0+ZGV2X2FkZHIpW2ldKSwgaW9hZGRyICsgTEFOMCArIGkqNCk7CiAKIAllcC0+dHhfdGhyZXNob2xkID0gVFhfRklGT19USFJFU0g7CiAJb3V0bChlcC0+dHhfdGhyZXNob2xkLCBpb2FkZHIgKyBUeFRocmVzaCk7CkBAIC05MTksNyArOTI1LDcgQEAKIAkvKiBJbml0aWFsaXplIGFsbCBSeCBkZXNjcmlwdG9ycy4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgUlhfUklOR19TSVpFOyBpKyspIHsKIAkJZXAtPnJ4X3JpbmdbaV0ucnhzdGF0dXMgPSAwOwotCQllcC0+cnhfcmluZ1tpXS5idWZsZW5ndGggPSBjcHVfdG9fbGUzMihlcC0+cnhfYnVmX3N6KTsKKwkJZXAtPnJ4X3JpbmdbaV0uYnVmbGVuZ3RoID0gZXAtPnJ4X2J1Zl9zejsKIAkJZXAtPnJ4X3JpbmdbaV0ubmV4dCA9IGVwLT5yeF9yaW5nX2RtYSArCiAJCQkJICAgICAgKGkrMSkqc2l6ZW9mKHN0cnVjdCBlcGljX3J4X2Rlc2MpOwogCQllcC0+cnhfc2tidWZmW2ldID0gTlVMTDsKQEAgLTkzNiw3ICs5NDIsNyBAQAogCQlza2JfcmVzZXJ2ZShza2IsIDIpOwkvKiAxNiBieXRlIGFsaWduIHRoZSBJUCBoZWFkZXIuICovCiAJCWVwLT5yeF9yaW5nW2ldLmJ1ZmFkZHIgPSBwY2lfbWFwX3NpbmdsZShlcC0+cGNpX2RldiwKIAkJCXNrYi0+ZGF0YSwgZXAtPnJ4X2J1Zl9zeiwgUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJZXAtPnJ4X3JpbmdbaV0ucnhzdGF0dXMgPSBjcHVfdG9fbGUzMihEZXNjT3duKTsKKwkJZXAtPnJ4X3JpbmdbaV0ucnhzdGF0dXMgPSBEZXNjT3duOwogCX0KIAllcC0+ZGlydHlfcnggPSAodW5zaWduZWQgaW50KShpIC0gUlhfUklOR19TSVpFKTsKIApAQCAtOTc0LDIwICs5ODAsMjAgQEAKIAllcC0+dHhfcmluZ1tlbnRyeV0uYnVmYWRkciA9IHBjaV9tYXBfc2luZ2xlKGVwLT5wY2lfZGV2LCBza2ItPmRhdGEsCiAJCSAJCQkgICAgICAgICAgICBza2ItPmxlbiwgUENJX0RNQV9UT0RFVklDRSk7CiAJaWYgKGZyZWVfY291bnQgPCBUWF9RVUVVRV9MRU4vMikgey8qIFR5cGljYWwgcGF0aCAqLwotCQljdHJsX3dvcmQgPSBjcHVfdG9fbGUzMigweDEwMDAwMCk7IC8qIE5vIGludGVycnVwdCAqLworCQljdHJsX3dvcmQgPSAweDEwMDAwMDsgLyogTm8gaW50ZXJydXB0ICovCiAJfSBlbHNlIGlmIChmcmVlX2NvdW50ID09IFRYX1FVRVVFX0xFTi8yKSB7Ci0JCWN0cmxfd29yZCA9IGNwdV90b19sZTMyKDB4MTQwMDAwKTsgLyogVHgtZG9uZSBpbnRyLiAqLworCQljdHJsX3dvcmQgPSAweDE0MDAwMDsgLyogVHgtZG9uZSBpbnRyLiAqLwogCX0gZWxzZSBpZiAoZnJlZV9jb3VudCA8IFRYX1FVRVVFX0xFTiAtIDEpIHsKLQkJY3RybF93b3JkID0gY3B1X3RvX2xlMzIoMHgxMDAwMDApOyAvKiBObyBUeC1kb25lIGludHIuICovCisJCWN0cmxfd29yZCA9IDB4MTAwMDAwOyAvKiBObyBUeC1kb25lIGludHIuICovCiAJfSBlbHNlIHsKIAkJLyogTGVhdmUgcm9vbSBmb3IgYW4gYWRkaXRpb25hbCBlbnRyeS4gKi8KLQkJY3RybF93b3JkID0gY3B1X3RvX2xlMzIoMHgxNDAwMDApOyAvKiBUeC1kb25lIGludHIuICovCisJCWN0cmxfd29yZCA9IDB4MTQwMDAwOyAvKiBUeC1kb25lIGludHIuICovCiAJCWVwLT50eF9mdWxsID0gMTsKIAl9Ci0JZXAtPnR4X3JpbmdbZW50cnldLmJ1Zmxlbmd0aCA9IGN0cmxfd29yZCB8IGNwdV90b19sZTMyKHNrYi0+bGVuKTsKKwllcC0+dHhfcmluZ1tlbnRyeV0uYnVmbGVuZ3RoID0gY3RybF93b3JkIHwgc2tiLT5sZW47CiAJZXAtPnR4X3JpbmdbZW50cnldLnR4c3RhdHVzID0KIAkJKChza2ItPmxlbiA+PSBFVEhfWkxFTiA/IHNrYi0+bGVuIDogRVRIX1pMRU4pIDw8IDE2KQotCQl8IGNwdV90b19sZTMyKERlc2NPd24pOworCQkJICAgIHwgRGVzY093bjsKIAogCWVwLT5jdXJfdHgrKzsKIAlpZiAoZXAtPnR4X2Z1bGwpCkBAIC0xMDQxLDcgKzEwNDcsNyBAQAogCWZvciAoZGlydHlfdHggPSBlcC0+ZGlydHlfdHg7IGN1cl90eCAtIGRpcnR5X3R4ID4gMDsgZGlydHlfdHgrKykgewogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCQlpbnQgZW50cnkgPSBkaXJ0eV90eCAlIFRYX1JJTkdfU0laRTsKLQkJaW50IHR4c3RhdHVzID0gbGUzMl90b19jcHUoZXAtPnR4X3JpbmdbZW50cnldLnR4c3RhdHVzKTsKKwkJaW50IHR4c3RhdHVzID0gZXAtPnR4X3JpbmdbZW50cnldLnR4c3RhdHVzOwogCiAJCWlmICh0eHN0YXR1cyAmIERlc2NPd24pCiAJCQlicmVhazsJLyogSXQgc3RpbGwgaGFzbid0IGJlZW4gVHhlZCAqLwpAQCAtMTE2Myw4ICsxMTY5LDggQEAKIAkJcnhfd29ya19saW1pdCA9IGJ1ZGdldDsKIAogCS8qIElmIHdlIG93biB0aGUgbmV4dCBlbnRyeSwgaXQncyBhIG5ldyBwYWNrZXQuIFNlbmQgaXQgdXAuICovCi0Jd2hpbGUgKChlcC0+cnhfcmluZ1tlbnRyeV0ucnhzdGF0dXMgJiBjcHVfdG9fbGUzMihEZXNjT3duKSkgPT0gMCkgewotCQlpbnQgc3RhdHVzID0gbGUzMl90b19jcHUoZXAtPnJ4X3JpbmdbZW50cnldLnJ4c3RhdHVzKTsKKwl3aGlsZSAoKGVwLT5yeF9yaW5nW2VudHJ5XS5yeHN0YXR1cyAmIERlc2NPd24pID09IDApIHsKKwkJaW50IHN0YXR1cyA9IGVwLT5yeF9yaW5nW2VudHJ5XS5yeHN0YXR1czsKIAogCQlpZiAoZGVidWcgPiA0KQogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiAgZXBpY19yeCgpIHN0YXR1cyB3YXMgJTguOHguXG4iLCBzdGF0dXMpOwpAQCAtMTIzOCw3ICsxMjQ0LDggQEAKIAkJCQlza2ItPmRhdGEsIGVwLT5yeF9idWZfc3osIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCQl3b3JrX2RvbmUrKzsKIAkJfQotCQllcC0+cnhfcmluZ1tlbnRyeV0ucnhzdGF0dXMgPSBjcHVfdG9fbGUzMihEZXNjT3duKTsKKwkJLyogQVY6IHNob3VsZG4ndCB3ZSBhZGQgYSBiYXJyaWVyIGhlcmU/ICovCisJCWVwLT5yeF9yaW5nW2VudHJ5XS5yeHN0YXR1cyA9IERlc2NPd247CiAJfQogCXJldHVybiB3b3JrX2RvbmU7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mb3JjZWRldGguYyBiL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jCmluZGV4IDgwMWI0ZDkuLjZmN2UzZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jCkBAIC0xODQsNiArMTg0LDcgQEAKICNkZWZpbmUgREVWX0hBU19QQVVTRUZSQU1FX1RYX1YxICAgMHgwODAwMCAgLyogZGV2aWNlIHN1cHBvcnRzIHR4IHBhdXNlIGZyYW1lcyB2ZXJzaW9uIDEgKi8KICNkZWZpbmUgREVWX0hBU19QQVVTRUZSQU1FX1RYX1YyICAgMHgxMDAwMCAgLyogZGV2aWNlIHN1cHBvcnRzIHR4IHBhdXNlIGZyYW1lcyB2ZXJzaW9uIDIgKi8KICNkZWZpbmUgREVWX0hBU19QQVVTRUZSQU1FX1RYX1YzICAgMHgyMDAwMCAgLyogZGV2aWNlIHN1cHBvcnRzIHR4IHBhdXNlIGZyYW1lcyB2ZXJzaW9uIDMgKi8KKyNkZWZpbmUgREVWX05FRURfVFhfTElNSVQgICAgICAgICAgMHg0MDAwMCAgLyogZGV2aWNlIG5lZWRzIHRvIGxpbWl0IHR4ICovCiAKIGVudW0gewogCU52UmVnSXJxU3RhdHVzID0gMHgwMDAsCkBAIC02MzUsNiArNjM2LDggQEAKICNkZWZpbmUgTlZfUkVTVEFSVF9UWCAgICAgICAgIDB4MQogI2RlZmluZSBOVl9SRVNUQVJUX1JYICAgICAgICAgMHgyCiAKKyNkZWZpbmUgTlZfVFhfTElNSVRfQ09VTlQgICAgIDE2CisKIC8qIHN0YXRpc3RpY3MgKi8KIHN0cnVjdCBudl9ldGh0b29sX3N0ciB7CiAJY2hhciBuYW1lW0VUSF9HU1RSSU5HX0xFTl07CkBAIC03NDMsNiArNzQ2LDggQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCWRtYV9hZGRyX3QgZG1hOwogCXVuc2lnbmVkIGludCBkbWFfbGVuOworCXN0cnVjdCByaW5nX2Rlc2NfZXggKmZpcnN0X3R4X2Rlc2M7CisJc3RydWN0IG52X3NrYl9tYXAgKm5leHRfdHhfY3R4OwogfTsKIAogLyoKQEAgLTgyNyw2ICs4MzIsMTAgQEAKIAl1bmlvbiByaW5nX3R5cGUgdHhfcmluZzsKIAl1MzIgdHhfZmxhZ3M7CiAJaW50IHR4X3Jpbmdfc2l6ZTsKKwlpbnQgdHhfbGltaXQ7CisJdTMyIHR4X3BrdHNfaW5fcHJvZ3Jlc3M7CisJc3RydWN0IG52X3NrYl9tYXAgKnR4X2NoYW5nZV9vd25lcjsKKwlzdHJ1Y3QgbnZfc2tiX21hcCAqdHhfZW5kX2ZsaXA7CiAJaW50IHR4X3N0b3A7CiAKIAkvKiB2bGFuIGZpZWxkcyAqLwpAQCAtMTcwNyw2ICsxNzE2LDkgQEAKIAkJbnAtPmxhc3RfdHguZXggPSAmbnAtPnR4X3JpbmcuZXhbbnAtPnR4X3Jpbmdfc2l6ZS0xXTsKIAlucC0+Z2V0X3R4X2N0eCA9IG5wLT5wdXRfdHhfY3R4ID0gbnAtPmZpcnN0X3R4X2N0eCA9IG5wLT50eF9za2I7CiAJbnAtPmxhc3RfdHhfY3R4ID0gJm5wLT50eF9za2JbbnAtPnR4X3Jpbmdfc2l6ZS0xXTsKKwlucC0+dHhfcGt0c19pbl9wcm9ncmVzcyA9IDA7CisJbnAtPnR4X2NoYW5nZV9vd25lciA9IE5VTEw7CisJbnAtPnR4X2VuZF9mbGlwID0gTlVMTDsKIAogCWZvciAoaSA9IDA7IGkgPCBucC0+dHhfcmluZ19zaXplOyBpKyspIHsKIAkJaWYgKG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8xIHx8IG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8yKSB7CkBAIC0xNzIwLDYgKzE3MzIsOSBAQAogCQl9CiAJCW5wLT50eF9za2JbaV0uc2tiID0gTlVMTDsKIAkJbnAtPnR4X3NrYltpXS5kbWEgPSAwOworCQlucC0+dHhfc2tiW2ldLmRtYV9sZW4gPSAwOworCQlucC0+dHhfc2tiW2ldLmZpcnN0X3R4X2Rlc2MgPSBOVUxMOworCQlucC0+dHhfc2tiW2ldLm5leHRfdHhfY3R4ID0gTlVMTDsKIAl9CiB9CiAKQEAgLTE3NzEsNyArMTc4NiwxNCBAQAogCQl9CiAJCWlmIChudl9yZWxlYXNlX3R4c2tiKGRldiwgJm5wLT50eF9za2JbaV0pKQogCQkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CisJCW5wLT50eF9za2JbaV0uZG1hID0gMDsKKwkJbnAtPnR4X3NrYltpXS5kbWFfbGVuID0gMDsKKwkJbnAtPnR4X3NrYltpXS5maXJzdF90eF9kZXNjID0gTlVMTDsKKwkJbnAtPnR4X3NrYltpXS5uZXh0X3R4X2N0eCA9IE5VTEw7CiAJfQorCW5wLT50eF9wa3RzX2luX3Byb2dyZXNzID0gMDsKKwlucC0+dHhfY2hhbmdlX293bmVyID0gTlVMTDsKKwlucC0+dHhfZW5kX2ZsaXAgPSBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCBudl9kcmFpbl9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtMTk0OCw2ICsxOTcwLDcgQEAKIAlzdHJ1Y3QgcmluZ19kZXNjX2V4KiBzdGFydF90eDsKIAlzdHJ1Y3QgcmluZ19kZXNjX2V4KiBwcmV2X3R4OwogCXN0cnVjdCBudl9za2JfbWFwKiBwcmV2X3R4X2N0eDsKKwlzdHJ1Y3QgbnZfc2tiX21hcCogc3RhcnRfdHhfY3R4OwogCiAJLyogYWRkIGZyYWdtZW50cyB0byBlbnRyaWVzIGNvdW50ICovCiAJZm9yIChpID0gMDsgaSA8IGZyYWdtZW50czsgaSsrKSB7CkBAIC0xOTY1LDYgKzE5ODgsNyBAQAogCX0KIAogCXN0YXJ0X3R4ID0gcHV0X3R4ID0gbnAtPnB1dF90eC5leDsKKwlzdGFydF90eF9jdHggPSBucC0+cHV0X3R4X2N0eDsKIAogCS8qIHNldHVwIHRoZSBoZWFkZXIgYnVmZmVyICovCiAJZG8gewpAQCAtMjAzNyw2ICsyMDYxLDI2IEBACiAKIAlzcGluX2xvY2tfaXJxKCZucC0+bG9jayk7CiAKKwlpZiAobnAtPnR4X2xpbWl0KSB7CisJCS8qIExpbWl0IHRoZSBudW1iZXIgb2Ygb3V0c3RhbmRpbmcgdHguIFNldHVwIGFsbCBmcmFnbWVudHMsIGJ1dAorCQkgKiBkbyBub3Qgc2V0IHRoZSBWQUxJRCBiaXQgb24gdGhlIGZpcnN0IGRlc2NyaXB0b3IuIFNhdmUgYSBwb2ludGVyCisJCSAqIHRvIHRoYXQgZGVzY3JpcHRvciBhbmQgYWxzbyBmb3IgbmV4dCBza2JfbWFwIGVsZW1lbnQuCisJCSAqLworCisJCWlmIChucC0+dHhfcGt0c19pbl9wcm9ncmVzcyA9PSBOVl9UWF9MSU1JVF9DT1VOVCkgeworCQkJaWYgKCFucC0+dHhfY2hhbmdlX293bmVyKQorCQkJCW5wLT50eF9jaGFuZ2Vfb3duZXIgPSBzdGFydF90eF9jdHg7CisKKwkJCS8qIHJlbW92ZSBWQUxJRCBiaXQgKi8KKwkJCXR4X2ZsYWdzICY9IH5OVl9UWDJfVkFMSUQ7CisJCQlzdGFydF90eF9jdHgtPmZpcnN0X3R4X2Rlc2MgPSBzdGFydF90eDsKKwkJCXN0YXJ0X3R4X2N0eC0+bmV4dF90eF9jdHggPSBucC0+cHV0X3R4X2N0eDsKKwkJCW5wLT50eF9lbmRfZmxpcCA9IG5wLT5wdXRfdHhfY3R4OworCQl9IGVsc2UgeworCQkJbnAtPnR4X3BrdHNfaW5fcHJvZ3Jlc3MrKzsKKwkJfQorCX0KKwogCS8qIHNldCB0eCBmbGFncyAqLwogCXN0YXJ0X3R4LT5mbGFnbGVuIHw9IGNwdV90b19sZTMyKHR4X2ZsYWdzIHwgdHhfZmxhZ3NfZXh0cmEpOwogCW5wLT5wdXRfdHguZXggPSBwdXRfdHg7CkBAIC0yMDYwLDYgKzIxMDQsMjUgQEAKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgbnZfdHhfZmxpcF9vd25lcnNoaXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJbnAtPnR4X3BrdHNfaW5fcHJvZ3Jlc3MtLTsKKwlpZiAobnAtPnR4X2NoYW5nZV9vd25lcikgeworCQlfX2xlMzIgZmxhZ2xlbiA9IGxlMzJfdG9fY3B1KG5wLT50eF9jaGFuZ2Vfb3duZXItPmZpcnN0X3R4X2Rlc2MtPmZsYWdsZW4pOworCQlmbGFnbGVuIHw9IE5WX1RYMl9WQUxJRDsKKwkJbnAtPnR4X2NoYW5nZV9vd25lci0+Zmlyc3RfdHhfZGVzYy0+ZmxhZ2xlbiA9IGNwdV90b19sZTMyKGZsYWdsZW4pOworCQlucC0+dHhfcGt0c19pbl9wcm9ncmVzcysrOworCisJCW5wLT50eF9jaGFuZ2Vfb3duZXIgPSBucC0+dHhfY2hhbmdlX293bmVyLT5uZXh0X3R4X2N0eDsKKwkJaWYgKG5wLT50eF9jaGFuZ2Vfb3duZXIgPT0gbnAtPnR4X2VuZF9mbGlwKQorCQkJbnAtPnR4X2NoYW5nZV9vd25lciA9IE5VTEw7CisKKwkJd3JpdGVsKE5WUkVHX1RYUlhDVExfS0lDS3xucC0+dHhyeGN0bF9iaXRzLCBnZXRfaHdiYXNlKGRldikgKyBOdlJlZ1R4UnhDb250cm9sKTsKKwl9Cit9CisKIC8qCiAgKiBudl90eF9kb25lOiBjaGVjayBmb3IgY29tcGxldGVkIHBhY2tldHMsIHJlbGVhc2UgdGhlIHNrYnMuCiAgKgpAQCAtMjE0Nyw2ICsyMjEwLDEwIEBACiAJCQkJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CiAJCQlkZXZfa2ZyZWVfc2tiX2FueShucC0+Z2V0X3R4X2N0eC0+c2tiKTsKIAkJCW5wLT5nZXRfdHhfY3R4LT5za2IgPSBOVUxMOworCisJCQlpZiAobnAtPnR4X2xpbWl0KSB7CisJCQkJbnZfdHhfZmxpcF9vd25lcnNoaXAoZGV2KTsKKwkJCX0KIAkJfQogCQlpZiAodW5saWtlbHkobnAtPmdldF90eC5leCsrID09IG5wLT5sYXN0X3R4LmV4KSkKIAkJCW5wLT5nZXRfdHguZXggPSBucC0+Zmlyc3RfdHguZXg7CkBAIC01MzMzLDYgKzU0MDAsMjEgQEAKIAkJbnAtPm5lZWRfbGlua3RpbWVyID0gMDsKIAl9CiAKKwkvKiBMaW1pdCB0aGUgbnVtYmVyIG9mIHR4J3Mgb3V0c3RhbmRpbmcgZm9yIGh3IGJ1ZyAqLworCWlmIChpZC0+ZHJpdmVyX2RhdGEgJiBERVZfTkVFRF9UWF9MSU1JVCkgeworCQlucC0+dHhfbGltaXQgPSAxOworCQlpZiAoKGlkLT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzMyIHx8CisJCSAgICAgaWQtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMzMgfHwKKwkJICAgICBpZC0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8zNCB8fAorCQkgICAgIGlkLT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzM1IHx8CisJCSAgICAgaWQtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMzYgfHwKKwkJICAgICBpZC0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8zNyB8fAorCQkgICAgIGlkLT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzM4IHx8CisJCSAgICAgaWQtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMzkpICYmCisJCSAgICBwY2lfZGV2LT5yZXZpc2lvbiA+PSAweEEyKQorCQkJbnAtPnR4X2xpbWl0ID0gMDsKKwl9CisKIAkvKiBjbGVhciBwaHkgc3RhdGUgYW5kIHRlbXBvcmFyaWx5IGhhbHQgcGh5IGludGVycnVwdHMgKi8KIAl3cml0ZWwoMCwgYmFzZSArIE52UmVnTUlJTWFzayk7CiAJcGh5c3RhdGUgPSByZWFkbChiYXNlICsgTnZSZWdBZGFwdGVyQ29udHJvbCk7CkBAIC01NTYzLDE5ICs1NjQ1LDE5IEBACiAJfSwKIAl7CS8qIENLODA0IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzgpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfU1RBVElTVElDU19WMSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1NUQVRJU1RJQ1NfVjF8REVWX05FRURfVFhfTElNSVQsCiAJfSwKIAl7CS8qIENLODA0IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzkpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfU1RBVElTVElDU19WMSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1NUQVRJU1RJQ1NfVjF8REVWX05FRURfVFhfTElNSVQsCiAJfSwKIAl7CS8qIE1DUDA0IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzEwKSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1NUQVRJU1RJQ1NfVjEsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19TVEFUSVNUSUNTX1YxfERFVl9ORUVEX1RYX0xJTUlULAogCX0sCiAJewkvKiBNQ1AwNCBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8xMSksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19TVEFUSVNUSUNTX1YxLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfU1RBVElTVElDU19WMXxERVZfTkVFRF9UWF9MSU1JVCwKIAl9LAogCXsJLyogTUNQNTEgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTIpLApAQCAtNTU4NywxMSArNTY2OSwxMSBAQAogCX0sCiAJewkvKiBNQ1A1NSBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8xNCksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19WTEFOfERFVl9IQVNfTVNJfERFVl9IQVNfTVNJX1h8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVCwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1ZMQU58REVWX0hBU19NU0l8REVWX0hBU19NU0lfWHxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9ORUVEX1RYX0xJTUlULAogCX0sCiAJewkvKiBNQ1A1NSBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8xNSksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19WTEFOfERFVl9IQVNfTVNJfERFVl9IQVNfTVNJX1h8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVCwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1ZMQU58REVWX0hBU19NU0l8REVWX0hBU19NU0lfWHxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9ORUVEX1RYX0xJTUlULAogCX0sCiAJewkvKiBNQ1A2MSBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8xNiksCkBAIC01NjExLDE5ICs1NjkzLDE5IEBACiAJfSwKIAl7CS8qIE1DUDY1IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzIwKSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUiwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfTkVFRF9UWF9MSU1JVHxERVZfTkVFRF9UWF9MSU1JVCwKIAl9LAogCXsJLyogTUNQNjUgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMjEpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9ORUVEX1RYX0xJTUlULAogCX0sCiAJewkvKiBNQ1A2NSBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8yMiksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFIsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX05FRURfVFhfTElNSVQsCiAJfSwKIAl7CS8qIE1DUDY1IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzIzKSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUiwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfTkVFRF9UWF9MSU1JVCwKIAl9LAogCXsJLyogTUNQNjcgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMjQpLApAQCAtNTY1OSwzNSArNTc0MSwzNSBAQAogCX0sCiAJewkvKiBNQ1A3NyBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8zMiksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19NU0l8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjJ8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVgsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19NU0l8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjJ8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX05FRURfVFhfTElNSVQsCiAJfSwKIAl7CS8qIE1DUDc3IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzMzKSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX01TSXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMnxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWCwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX01TSXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMnxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfTkVFRF9UWF9MSU1JVCwKIAl9LAogCXsJLyogTUNQNzcgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMzQpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfTVNJfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YyfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfTVNJfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YyfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9ORUVEX1RYX0xJTUlULAogCX0sCiAJewkvKiBNQ1A3NyBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8zNSksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19NU0l8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjJ8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVgsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19NU0l8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjJ8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX05FRURfVFhfTElNSVQsCiAJfSwKIAl7CS8qIE1DUDc5IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzM2KSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX01TSXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WM3xERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWCwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX01TSXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WM3xERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfTkVFRF9UWF9MSU1JVCwKIAl9LAogCXsJLyogTUNQNzkgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMzcpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfTVNJfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YzfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfTVNJfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YzfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9ORUVEX1RYX0xJTUlULAogCX0sCiAJewkvKiBNQ1A3OSBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8zOCksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19NU0l8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjN8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVgsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19NU0l8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjN8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX05FRURfVFhfTElNSVQsCiAJfSwKIAl7CS8qIE1DUDc5IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzM5KSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX01TSXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WM3xERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWCwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX01TSXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WM3xERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfTkVFRF9UWF9MSU1JVCwKIAl9LAogCXswLH0sCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvY29yZS5jIGIvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvY29yZS5jCmluZGV4IGU2YzY5ZjcuLjA3ODk4MDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL2NvcmUuYworKysgYi9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9jb3JlLmMKQEAgLTE0Myw2ICsxNDMsMTAgQEAKICNkZWZpbmUgU1RPUF9USU1FT1VUXzEwMDAJMTMKICNkZWZpbmUgU1RPUF9USU1FT1VUXzEwMDBfSlVNQk8JNzMKIAorc3RhdGljIHVuc2lnbmVkIGNoYXIgZGVmYXVsdF9tY2FzdF9hZGRyW10gPSB7CisJMHgwMSwgMHg4MCwgMHhDMiwgMHgwMCwgMHgwMCwgMHgwMQorfTsKKwogLyogUGxlYXNlLCBrZWVwIGluIHN5bmMgd2l0aCBzdHJ1Y3QgaWJtX2VtYWNfc3RhdHMvaWJtX2VtYWNfZXJyb3Jfc3RhdHMgKi8KIHN0YXRpYyBjb25zdCBjaGFyIGVtYWNfc3RhdHNfa2V5c1tFTUFDX0VUSFRPT0xfU1RBVFNfQ09VTlRdW0VUSF9HU1RSSU5HX0xFTl0gPSB7CiAJInJ4X3BhY2tldHMiLCAicnhfYnl0ZXMiLCAidHhfcGFja2V0cyIsICJ0eF9ieXRlcyIsICJyeF9wYWNrZXRzX2NzdW0iLApAQCAtNjE4LDYgKzYyMiw5IEBACiAJaWYgKGVtYWNfcGh5X2dwY3MoZGV2LT5waHkubW9kZSkpCiAJCWVtYWNfbWlpX3Jlc2V0X3BoeSgmZGV2LT5waHkpOwogCisJLyogUmVxdWlyZWQgZm9yIFBhdXNlIHBhY2tldCBzdXBwb3J0IGluIEVNQUMgKi8KKwlkZXZfbWNfYWRkKG5kZXYsIGRlZmF1bHRfbWNhc3RfYWRkciwgc2l6ZW9mKGRlZmF1bHRfbWNhc3RfYWRkciksIDEpOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL3RhaC5jIGIvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvdGFoLmMKaW5kZXggOTY0MTdhZC4uYjAyM2QxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvdGFoLmMKKysrIGIvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvdGFoLmMKQEAgLTE1NSw2ICsxNTUsMTAgQEAKIHN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHRhaF9tYXRjaFtdID0KIHsKIAl7CisJCS5jb21wYXRpYmxlCT0gImlibSx0YWgiLAorCX0sCisJLyogRm9yIGJhY2t3YXJkIGNvbXBhdCB3aXRoIG9sZCBEVCAqLworCXsKIAkJLnR5cGUJCT0gInRhaCIsCiAJfSwKIAl7fSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lmYi5jIGIvZHJpdmVycy9uZXQvaWZiLmMKaW5kZXggMTU5NDlkMy4uYWYyMzNiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWZiLmMKKysrIGIvZHJpdmVycy9uZXQvaWZiLmMKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPG5ldC9wa3Rfc2NoZWQuaD4KICNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xvY2tkZXAuaD4KIAogI2RlZmluZSBUWF9USU1FT1VUICAoMipIWikKIApAQCAtMjI3LDYgKzIyOCwxNiBAQAogbW9kdWxlX3BhcmFtKG51bWlmYnMsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKG51bWlmYnMsICJOdW1iZXIgb2YgaWZiIGRldmljZXMiKTsKIAorLyoKKyAqIGRldl9pZmItPnF1ZXVlX2xvY2sgaXMgdXN1YWxseSB0YWtlbiBhZnRlciBkZXYtPmluZ3Jlc3NfbG9jaywKKyAqIHJldmVyc2VseSB0byBlLmcuIHFkaXNjX2xvY2tfdHJlZSgpLiBJdCBzaG91bGQgYmUgc2FmZSB1bnRpbAorICogaWZiIGRvZXNuJ3QgdGFrZSBkZXYtPnF1ZXVlX2xvY2sgd2l0aCBkZXZfaWZiLT5pbmdyZXNzX2xvY2suCisgKiBCdXQgbG9ja2RlcCBzaG91bGQga25vdyB0aGF0IGlmYiBoYXMgZGlmZmVyZW50IGxvY2tzIGZyb20gZGV2LgorICovCitzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGlmYl9xdWV1ZV9sb2NrX2tleTsKK3N0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgaWZiX2luZ3Jlc3NfbG9ja19rZXk7CisKKwogc3RhdGljIGludCBfX2luaXQgaWZiX2luaXRfb25lKGludCBpbmRleCkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2X2lmYjsKQEAgLTI0Niw2ICsyNTcsMTAgQEAKIAllcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2UoZGV2X2lmYik7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gZXJyOworCisJbG9ja2RlcF9zZXRfY2xhc3MoJmRldl9pZmItPnF1ZXVlX2xvY2ssICZpZmJfcXVldWVfbG9ja19rZXkpOworCWxvY2tkZXBfc2V0X2NsYXNzKCZkZXZfaWZiLT5pbmdyZXNzX2xvY2ssICZpZmJfaW5ncmVzc19sb2NrX2tleSk7CisKIAlyZXR1cm4gMDsKIAogZXJyOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2lnYl9tYWluLmMgYi9kcml2ZXJzL25ldC9pZ2IvaWdiX21haW4uYwppbmRleCA2YTFmMjMwLi45MjhjZTgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvaWdiX21haW4uYworKysgYi9kcml2ZXJzL25ldC9pZ2IvaWdiX21haW4uYwpAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvdGNwLmg+CiAjaW5jbHVkZSA8bGludXgvaXB2Ni5oPgogI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgogI2luY2x1ZGUgPG5ldC9pcDZfY2hlY2tzdW0uaD4KQEAgLTI0ODQsMTAgKzI0ODMsMjQgQEAKIAkJdHVfY21kIHw9IChFMTAwMF9UWERfQ01EX0RFWFQgfCBFMTAwMF9BRFZUWERfRFRZUF9DVFhUKTsKIAogCQlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkgewotCQkJaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKQorCQkJc3dpdGNoIChza2ItPnByb3RvY29sKSB7CisJCQljYXNlIF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVApOgogCQkJCXR1X2NtZCB8PSBFMTAwMF9BRFZUWERfVFVDTURfSVBWNDsKLQkJCWlmIChza2ItPnNrICYmIChza2ItPnNrLT5za19wcm90b2NvbCA9PSBJUFBST1RPX1RDUCkpCi0JCQkJdHVfY21kIHw9IEUxMDAwX0FEVlRYRF9UVUNNRF9MNFRfVENQOworCQkJCWlmIChpcF9oZHIoc2tiKS0+cHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApCisJCQkJCXR1X2NtZCB8PSBFMTAwMF9BRFZUWERfVFVDTURfTDRUX1RDUDsKKwkJCQlicmVhazsKKwkJCWNhc2UgX19jb25zdGFudF9odG9ucyhFVEhfUF9JUFY2KToKKwkJCQkvKiBYWFggd2hhdCBhYm91dCBvdGhlciBWNiBoZWFkZXJzPz8gKi8KKwkJCQlpZiAoaXB2Nl9oZHIoc2tiKS0+bmV4dGhkciA9PSBJUFBST1RPX1RDUCkKKwkJCQkJdHVfY21kIHw9IEUxMDAwX0FEVlRYRF9UVUNNRF9MNFRfVENQOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlpZiAodW5saWtlbHkobmV0X3JhdGVsaW1pdCgpKSkKKwkJCQkJZGV2X3dhcm4oJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCQkJICAgICJwYXJ0aWFsIGNoZWNrc3VtIGJ1dCBwcm90bz0leCFcbiIsCisJCQkJCSAgICBza2ItPnByb3RvY29sKTsKKwkJCQlicmVhazsKKwkJCX0KIAkJfQogCiAJCWNvbnRleHRfZGVzYy0+dHlwZV90dWNtZF9tbGhsID0gY3B1X3RvX2xlMzIodHVfY21kKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lvYzMtZXRoLmMgYi9kcml2ZXJzL25ldC9pb2MzLWV0aC5jCmluZGV4IDM3M2Y3MmMuLjFmMjUyNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lvYzMtZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvaW9jMy1ldGguYwpAQCAtMTIyMSw3ICsxMjIxLDggQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgaW50IGlvYzNfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBpb2MzX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7CiAJdW5zaWduZWQgaW50IHN3X3BoeXNpZDEsIHN3X3BoeXNpZDI7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcGcuYyBiL2RyaXZlcnMvbmV0L2lwZy5jCmluZGV4IDVlNWQ5YjUuLjliMzU4ZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lwZy5jCisrKyBiL2RyaXZlcnMvbmV0L2lwZy5jCkBAIC00NzIsNyArNDcyLDYgQEAKIAl1bnNpZ25lZCBpbnQgdHhmbG93Y29udHJvbDsKIAl1bnNpZ25lZCBpbnQgcnhmbG93Y29udHJvbDsKIAl1bnNpZ25lZCBpbnQgZnVsbGR1cGxleDsKLQl1bnNpZ25lZCBpbnQgZ2lnOwogCXUzMiBtYWNfY3RybF92YWw7CiAJdTMyIGFzaWNjdHJsOwogCXU4IHBoeWN0cmw7CkBAIC00ODksNyArNDg4LDYgQEAKIAlmdWxsZHVwbGV4ID0gMDsKIAl0eGZsb3djb250cm9sID0gMDsKIAlyeGZsb3djb250cm9sID0gMDsKLQlnaWcgPSAwOwogCiAJLyogVG8gYWNjb21vZGF0ZSBhIHByb2JsZW0gaW4gMTBNYnBzIG9wZXJhdGlvbiwKIAkgKiBzZXQgYSBnbG9iYWwgZmxhZyBpZiBQSFkgcnVubmluZyBpbiAxME1icHMgbW9kZS4KQEAgLTUxMSw3ICs1MDksNiBAQAogCQlicmVhazsKIAljYXNlIElQR19QQ19MSU5LX1NQRUVEXzEwMDBNQlBTOgogCQlwcmludGsoIjEwMDBNYnBzLlxuIik7Ci0JCWdpZyA9IDE7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByaW50aygidW5kZWZpbmVkIVxuIik7CkBAIC0xOTAwLDggKzE4OTcsMTMgQEAKIAogCS8qIFNwZWNpZnkgdGhlIFRGQyBmaWVsZCB3aXRoaW4gdGhlIFRGRC4gKi8KIAl0eGZkLT50ZmMgfD0gY3B1X3RvX2xlNjQoSVBHX1RGQ19XT1JEQUxJR05ESVNBQkxFRCB8Ci0JCShJUEdfVEZDX0ZSQU1FSUQgJiBjcHVfdG9fbGU2NChzcC0+dHhfY3VycmVudCkpIHwKKwkJKElQR19URkNfRlJBTUVJRCAmIHNwLT50eF9jdXJyZW50KSB8CiAJCShJUEdfVEZDX0ZSQUdDT1VOVCAmICgxIDw8IDI0KSkpOworCS8qCisJICogMTYtLTE3IChXb3JkQWxpZ24pIDwtIDMgKGRpc2FibGUpLAorCSAqIDAtLTE1IChGcmFtZUlkKSA8LSBzcC0+dHhfY3VycmVudCwKKwkgKiAyNC0tMjcgKEZyYWdDb3VudCkgPC0gMQorCSAqLwogCiAJLyogUmVxdWVzdCBUeENvbXBsZXRlIGludGVycnVwdHMgYXQgYW4gaW50ZXJ2YWwgZGVmaW5lZAogCSAqIGJ5IHRoZSBjb25zdGFudCBJUEdfRlJBTUVTQkVUV0VFTlRYQ09NUExFVEVTLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmUyay1wY2kuYyBiL2RyaXZlcnMvbmV0L25lMmstcGNpLmMKaW5kZXggYjU2OWM5MC4uZGUwZGU3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmUyay1wY2kuYworKysgYi9kcml2ZXJzL25ldC9uZTJrLXBjaS5jCkBAIC01MzUsOSArNTM1LDkgQEAKIAkJaWYgKGNvdW50ICYgMykgewogCQkJYnVmICs9IGNvdW50ICYgfjM7CiAJCQlpZiAoY291bnQgJiAyKSB7Ci0JCQkJdTE2ICpiID0gKHUxNiAqKWJ1ZjsKKwkJCQlfX2xlMTYgKmIgPSAoX19sZTE2ICopYnVmOwogCi0JCQkJKmIrKyA9IGxlMTZfdG9fY3B1KGludyhORV9CQVNFICsgTkVfREFUQVBPUlQpKTsKKwkJCQkqYisrID0gY3B1X3RvX2xlMTYoaW53KE5FX0JBU0UgKyBORV9EQVRBUE9SVCkpOwogCQkJCWJ1ZiA9IChjaGFyICopYjsKIAkJCX0KIAkJCWlmIChjb3VudCAmIDEpCkBAIC02MDAsOSArNjAwLDkgQEAKIAkJaWYgKGNvdW50ICYgMykgewogCQkJYnVmICs9IGNvdW50ICYgfjM7CiAJCQlpZiAoY291bnQgJiAyKSB7Ci0JCQkJdTE2ICpiID0gKHUxNiAqKWJ1ZjsKKwkJCQlfX2xlMTYgKmIgPSAoX19sZTE2ICopYnVmOwogCi0JCQkJb3V0dyhjcHVfdG9fbGUxNigqYisrKSwgTkVfQkFTRSArIE5FX0RBVEFQT1JUKTsKKwkJCQlvdXR3KGxlMTZfdG9fY3B1KCpiKyspLCBORV9CQVNFICsgTkVfREFUQVBPUlQpOwogCQkJCWJ1ZiA9IChjaGFyICopYjsKIAkJCX0KIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHMzX2dlbGljX3dpcmVsZXNzLmMgYi9kcml2ZXJzL25ldC9wczNfZ2VsaWNfd2lyZWxlc3MuYwppbmRleCBkYWY1YWJhLi5kZGJjNmU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wczNfZ2VsaWNfd2lyZWxlc3MuYworKysgYi9kcml2ZXJzL25ldC9wczNfZ2VsaWNfd2lyZWxlc3MuYwpAQCAtMTY0NCwxMyArMTY0NCwyNCBAQAogCX0KIAogCS8qIHB1dCB0aGVtIGluIHRoZSBuZXd0b3JrX2xpc3QgKi8KLQlzY2FuX2luZm8gPSB3bC0+YnVmOwotCXNjYW5faW5mb19zaXplID0gMDsKLQlpID0gMDsKLQl3aGlsZSAoc2Nhbl9pbmZvX3NpemUgPCBkYXRhX2xlbikgeworCWZvciAoaSA9IDAsIHNjYW5faW5mb19zaXplID0gMCwgc2Nhbl9pbmZvID0gd2wtPmJ1ZjsKKwkgICAgIHNjYW5faW5mb19zaXplIDwgZGF0YV9sZW47CisJICAgICBpKyssIHNjYW5faW5mb19zaXplICs9IGJlMTZfdG9fY3B1KHNjYW5faW5mby0+c2l6ZSksCisJICAgICBzY2FuX2luZm8gPSAodm9pZCAqKXNjYW5faW5mbyArIGJlMTZfdG9fY3B1KHNjYW5faW5mby0+c2l6ZSkpIHsKIAkJcHJfZGVidWcoIiVzOnNpemU9JWQgYnNzaWQ9JXMgc2Nhbl9pbmZvPSVwXG4iLCBfX2Z1bmNfXywKIAkJCSBiZTE2X3RvX2NwdShzY2FuX2luZm8tPnNpemUpLAogCQkJIHByaW50X21hYyhtYWMsICZzY2FuX2luZm8tPmJzc2lkWzJdKSwgc2Nhbl9pbmZvKTsKKworCQkvKgorCQkgKiBUaGUgd2lyZWxlc3MgZmlybXdhcmUgbWF5IHJldHVybiBpbnZhbGlkIGNoYW5uZWwgMCBhbmQvb3IKKwkJICogaW52YWxpZCByYXRlIGlmIHRoZSBBUCBlbWl0cyB6ZXJvIGxlbmd0aCBTU0lEIGllLiBBcyB0aGlzCisJCSAqIHNjYW4gaW5mb3JtYXRpb24gaXMgdXNlbGVzcywgaWdub3JlIGl0CisJCSAqLworCQlpZiAoIWJlMTZfdG9fY3B1KHNjYW5faW5mby0+Y2hhbm5lbCkgfHwgIXNjYW5faW5mby0+cmF0ZVswXSkgeworCQkJcHJfZGVidWcoIiVzOiBpbnZhbGlkIHNjYW4gaW5mb1xuIiwgX19mdW5jX18pOworCQkJY29udGludWU7CisJCX0KKwogCQlmb3VuZCA9IDA7CiAJCW9sZGVzdCA9IE5VTEw7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkodGFyZ2V0LCAmd2wtPm5ldHdvcmtfbGlzdCwgbGlzdCkgewpAQCAtMTY4NywxMCArMTY5OCw2IEBACiAJCQkJCSBHRlBfS0VSTkVMKTsKIAkJaWYgKCF0YXJnZXQtPmh3aW5mbykgewogCQkJcHJfaW5mbygiJXM6IGt6YWxsb2MgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7Ci0JCQlpKys7Ci0JCQlzY2FuX2luZm9fc2l6ZSArPSBiZTE2X3RvX2NwdShzY2FuX2luZm8tPnNpemUpOwotCQkJc2Nhbl9pbmZvID0gKHZvaWQgKilzY2FuX2luZm8gKwotCQkJCWJlMTZfdG9fY3B1KHNjYW5faW5mby0+c2l6ZSk7CiAJCQljb250aW51ZTsKIAkJfQogCQkvKiBjb3B5IGh3IHNjYW4gaW5mbyAqLwpAQCAtMTcwOSwxMCArMTcxNiw2IEBACiAJCQlpZiAoc2Nhbl9pbmZvLT5leHRfcmF0ZVtyXSkKIAkJCQl0YXJnZXQtPnJhdGVfZXh0X2xlbisrOwogCQlsaXN0X21vdmVfdGFpbCgmdGFyZ2V0LT5saXN0LCAmd2wtPm5ldHdvcmtfbGlzdCk7Ci0JCS8qIGJ1bXAgcG9pbnRlciAqLwotCQlpKys7Ci0JCXNjYW5faW5mb19zaXplICs9IGJlMTZfdG9fY3B1KHNjYW5faW5mby0+c2l6ZSk7Ci0JCXNjYW5faW5mbyA9ICh2b2lkICopc2Nhbl9pbmZvICsgYmUxNl90b19jcHUoc2Nhbl9pbmZvLT5zaXplKTsKIAl9CiAJbWVtc2V0KCZkYXRhLCAwLCBzaXplb2YoZGF0YSkpOwogCXdpcmVsZXNzX3NlbmRfZXZlbnQocG9ydF90b19uZXRkZXYod2xfcG9ydCh3bCkpLCBTSU9DR0lXU0NBTiwgJmRhdGEsCkBAIC0yMzg5LDYgKzIzOTIsOCBAQAogCWlmICghbmV0ZGV2KQogCQlyZXR1cm4gTlVMTDsKIAorCXN0cmNweShuZXRkZXYtPm5hbWUsICJ3bGFuJWQiKTsKKwogCXBvcnQgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXBvcnQtPm5ldGRldiA9IG5ldGRldjsKIAlwb3J0LT5jYXJkID0gY2FyZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3I2MDQwLmMgYi9kcml2ZXJzL25ldC9yNjA0MC5jCmluZGV4IDE5MTg0ZTQuLjE2OWVkYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3I2MDQwLmMKKysrIGIvZHJpdmVycy9uZXQvcjYwNDAuYwpAQCAtMjM5LDcgKzIzOSw4IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgVFhfRENOVDsgaSsrKSB7CiAJCWlmIChscC0+dHhfaW5zZXJ0X3B0ci0+c2tiX3B0cikgewotCQkJcGNpX3VubWFwX3NpbmdsZShscC0+cGRldiwgbHAtPnR4X2luc2VydF9wdHItPmJ1ZiwKKwkJCXBjaV91bm1hcF9zaW5nbGUobHAtPnBkZXYsCisJCQkJbGUzMl90b19jcHUobHAtPnR4X2luc2VydF9wdHItPmJ1ZiksCiAJCQkJTUFYX0JVRl9TSVpFLCBQQ0lfRE1BX1RPREVWSUNFKTsKIAkJCWRldl9rZnJlZV9za2IobHAtPnR4X2luc2VydF9wdHItPnNrYl9wdHIpOwogCQkJbHAtPnJ4X2luc2VydF9wdHItPnNrYl9wdHIgPSBOVUxMOwpAQCAtMjU1LDcgKzI1Niw4IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgUlhfRENOVDsgaSsrKSB7CiAJCWlmIChscC0+cnhfaW5zZXJ0X3B0ci0+c2tiX3B0cikgewotCQkJcGNpX3VubWFwX3NpbmdsZShscC0+cGRldiwgbHAtPnJ4X2luc2VydF9wdHItPmJ1ZiwKKwkJCXBjaV91bm1hcF9zaW5nbGUobHAtPnBkZXYsCisJCQkJbGUzMl90b19jcHUobHAtPnJ4X2luc2VydF9wdHItPmJ1ZiksCiAJCQkJTUFYX0JVRl9TSVpFLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQkJZGV2X2tmcmVlX3NrYihscC0+cnhfaW5zZXJ0X3B0ci0+c2tiX3B0cik7CiAJCQlscC0+cnhfaW5zZXJ0X3B0ci0+c2tiX3B0ciA9IE5VTEw7CkBAIC01NDIsNyArNTQ0LDcgQEAKIAkJCXNrYl9wdHItPmRldiA9IHByaXYtPmRldjsKIAkJCS8qIERvIG5vdCBjb3VudCB0aGUgQ1JDICovCiAJCQlza2JfcHV0KHNrYl9wdHIsIGRlc2NwdHItPmxlbiAtIDQpOwotCQkJcGNpX3VubWFwX3NpbmdsZShwcml2LT5wZGV2LCBkZXNjcHRyLT5idWYsCisJCQlwY2lfdW5tYXBfc2luZ2xlKHByaXYtPnBkZXYsIGxlMzJfdG9fY3B1KGRlc2NwdHItPmJ1ZiksCiAJCQkJTUFYX0JVRl9TSVpFLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQkJc2tiX3B0ci0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2JfcHRyLCBwcml2LT5kZXYpOwogCQkJLyogU2VuZCB0byB1cHBlciBsYXllciAqLwpAQCAtNTg1LDcgKzU4Nyw3IEBACiAJCWlmIChkZXNjcHRyLT5zdGF0dXMgJiAweDgwMDApCiAJCQlicmVhazsgLyogTm90IGNvbXBsZXRlICovCiAJCXNrYl9wdHIgPSBkZXNjcHRyLT5za2JfcHRyOwotCQlwY2lfdW5tYXBfc2luZ2xlKHByaXYtPnBkZXYsIGRlc2NwdHItPmJ1ZiwKKwkJcGNpX3VubWFwX3NpbmdsZShwcml2LT5wZGV2LCBsZTMyX3RvX2NwdShkZXNjcHRyLT5idWYpLAogCQkJc2tiX3B0ci0+bGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKIAkJLyogRnJlZSBidWZmZXIgKi8KIAkJZGV2X2tmcmVlX3NrYl9pcnEoc2tiX3B0cik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90ZzMuYyBiL2RyaXZlcnMvbmV0L3RnMy5jCmluZGV4IDI2ZmZiNjcuLmY5ZWY4YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RnMy5jCisrKyBiL2RyaXZlcnMvbmV0L3RnMy5jCkBAIC02NCw4ICs2NCw4IEBACiAKICNkZWZpbmUgRFJWX01PRFVMRV9OQU1FCQkidGczIgogI2RlZmluZSBQRlggRFJWX01PRFVMRV9OQU1FCSI6ICIKLSNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OCSIzLjg3IgotI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIkRlY2VtYmVyIDIwLCAyMDA3IgorI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjMuODgiCisjZGVmaW5lIERSVl9NT0RVTEVfUkVMREFURQkiTWFyY2ggMjAsIDIwMDgiCiAKICNkZWZpbmUgVEczX0RFRl9NQUNfTU9ERQkwCiAjZGVmaW5lIFRHM19ERUZfUlhfTU9ERQkJMApAQCAtMTE4NDEsNyArMTE4NDEsNyBAQAogCX0KIAogCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcigmZGV2LT5kZXZfYWRkclswXSkpIHsKLSNpZmRlZiBDT05GSUdfU1BBUkM2NAorI2lmZGVmIENPTkZJR19TUEFSQwogCQlpZiAoIXRnM19nZXRfZGVmYXVsdF9tYWNhZGRyX3NwYXJjKHRwKSkKIAkJCXJldHVybiAwOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC9kZTIxMDR4LmMgYi9kcml2ZXJzL25ldC90dWxpcC9kZTIxMDR4LmMKaW5kZXggNTY3YzYyNy4uMWI1ZWRkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvZGUyMTA0eC5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL2RlMjEwNHguYwpAQCAtODQyLDcgKzg0Miw3IEBACiBzdGF0aWMgdm9pZCBkZV9zdG9wX3J4dHggKHN0cnVjdCBkZV9wcml2YXRlICpkZSkKIHsKIAl1MzIgbWFjbW9kZTsKLQl1bnNpZ25lZCBpbnQgd29yayA9IDEwMDA7CisJdW5zaWduZWQgaW50IGkgPSAxMzAwLzEwMDsKIAogCW1hY21vZGUgPSBkcjMyKE1hY01vZGUpOwogCWlmIChtYWNtb2RlICYgUnhUeCkgewpAQCAtODUwLDEwICs4NTAsMTQgQEAKIAkJZHIzMihNYWNNb2RlKTsKIAl9CiAKLQl3aGlsZSAoLS13b3JrID4gMCkgeworCS8qIHdhaXQgdW50aWwgaW4tZmxpZ2h0IGZyYW1lIGNvbXBsZXRlcy4KKwkgKiBNYXggdGltZSBAIDEwQlQ6IDE1MDAqOGIvMTBNYnBzID09IDEyMDB1cyAoKyAxMDB1cyBtYXJnaW4pCisJICogVHlwaWNhbGx5IGV4cGVjdCB0aGlzIGxvb3AgdG8gZW5kIGluIDwgNTAgdXMgb24gMTAwQlQuCisJICovCisJd2hpbGUgKC0taSkgewogCQlpZiAoIWRlX2lzX3J1bm5pbmcoZGUpKQogCQkJcmV0dXJuOwotCQljcHVfcmVsYXgoKTsKKwkJdWRlbGF5KDEwMCk7CiAJfQogCiAJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHRpbWVvdXQgZXhwaXJlZCBzdG9wcGluZyBETUFcbiIsIGRlLT5kZXYtPm5hbWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdWNjX2dldGguYyBiL2RyaXZlcnMvbmV0L3VjY19nZXRoLmMKaW5kZXggZmJhMDgxMS4uOGNjMzE2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdWNjX2dldGguYworKysgYi9kcml2ZXJzL25ldC91Y2NfZ2V0aC5jCkBAIC0xNTQsOCArMTU0LDggQEAKIAkucnhRb1NNb2RlID0gVUNDX0dFVEhfUU9TX01PREVfREVGQVVMVCwKIAkuYXVmYyA9IFVQU01SX0FVVE9NQVRJQ19GTE9XX0NPTlRST0xfTU9ERV9OT05FLAogCS5wYWRBbmRDcmMgPSBNQUNDRkcyX1BBRF9BTkRfQ1JDX01PREVfUEFEX0FORF9DUkMsCi0JLm51bVRocmVhZHNUeCA9IFVDQ19HRVRIX05VTV9PRl9USFJFQURTXzQsCi0JLm51bVRocmVhZHNSeCA9IFVDQ19HRVRIX05VTV9PRl9USFJFQURTXzQsCisJLm51bVRocmVhZHNUeCA9IFVDQ19HRVRIX05VTV9PRl9USFJFQURTXzEsCisJLm51bVRocmVhZHNSeCA9IFVDQ19HRVRIX05VTV9PRl9USFJFQURTXzEsCiAJLnJpc2NUeCA9IFFFX1JJU0NfQUxMT0NBVElPTl9SSVNDMV9BTkRfUklTQzIsCiAJLnJpc2NSeCA9IFFFX1JJU0NfQUxMT0NBVElPTl9SSVNDMV9BTkRfUklTQzIsCiB9OwpAQCAtMzk3NSw2ICszOTc1LDggQEAKIAkJdWdfaW5mby0+dWZfaW5mby51dGZzID0gVUNDX0dFVEhfVVRGU19HSUdBX0lOSVQ7CiAJCXVnX2luZm8tPnVmX2luZm8udXRmZXQgPSBVQ0NfR0VUSF9VVEZFVF9HSUdBX0lOSVQ7CiAJCXVnX2luZm8tPnVmX2luZm8udXRmdHQgPSBVQ0NfR0VUSF9VVEZUVF9HSUdBX0lOSVQ7CisJCXVnX2luZm8tPm51bVRocmVhZHNUeCA9IFVDQ19HRVRIX05VTV9PRl9USFJFQURTXzQ7CisJCXVnX2luZm8tPm51bVRocmVhZHNSeCA9IFVDQ19HRVRIX05VTV9PRl9USFJFQURTXzQ7CiAJfQogCiAJLyogU2V0IHRoZSBidXMgaWQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9ybmRpc19ob3N0LmMgYi9kcml2ZXJzL25ldC91c2Ivcm5kaXNfaG9zdC5jCmluZGV4IGE2MTMyNDcuLjcyNzU0N2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9ybmRpc19ob3N0LmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL3JuZGlzX2hvc3QuYwpAQCAtMTYsMTAgKzE2LDYgQEAKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KLQotLy8gI2RlZmluZQlERUJVRwkJCS8vIGVycm9yIHBhdGggbWVzc2FnZXMsIGV4dHJhIGluZm8KLS8vICNkZWZpbmUJVkVSQk9TRQkJCS8vIG1vcmU7IHN1Y2Nlc3MgbWVzc2FnZXMKLQogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KQEAgLTMxOCw2ICszMTQsMTQgQEAKIAluZXQtPmhhcmRfaGVhZGVyX2xlbiArPSBzaXplb2YgKHN0cnVjdCBybmRpc19kYXRhX2hkcik7CiAJZGV2LT5oYXJkX210dSA9IG5ldC0+bXR1ICsgbmV0LT5oYXJkX2hlYWRlcl9sZW47CiAKKwlkZXYtPm1heHBhY2tldCA9IHVzYl9tYXhwYWNrZXQoZGV2LT51ZGV2LCBkZXYtPm91dCwgMSk7CisJaWYgKGRldi0+bWF4cGFja2V0ID09IDApIHsKKwkJaWYgKG5ldGlmX21zZ19wcm9iZShkZXYpKQorCQkJZGV2X2RiZygmaW50Zi0+ZGV2LCAiZGV2LT5tYXhwYWNrZXQgY2FuJ3QgYmUgMFxuIik7CisJCXJldHZhbCA9IC1FSU5WQUw7CisJCWdvdG8gZmFpbF9hbmRfcmVsZWFzZTsKKwl9CisKIAlkZXYtPnJ4X3VyYl9zaXplID0gZGV2LT5oYXJkX210dSArIChkZXYtPm1heHBhY2tldCArIDEpOwogCWRldi0+cnhfdXJiX3NpemUgJj0gfihkZXYtPm1heHBhY2tldCAtIDEpOwogCXUuaW5pdC0+bWF4X3RyYW5zZmVyX3NpemUgPSBjcHVfdG9fbGUzMihkZXYtPnJ4X3VyYl9zaXplKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYyBiL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYwppbmRleCAxOWZkNGNiLi5iNTg0NzJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMKKysrIGIvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jCkBAIC0yMDMsOCArMjAzLDExIEBACiAJaWYgKHJlY2VpdmVkIDwgYnVkZ2V0KSB7CiAJCW5ldGlmX3J4X2NvbXBsZXRlKHZpLT5kZXYsIG5hcGkpOwogCQlpZiAodW5saWtlbHkoIXZpLT5ydnEtPnZxX29wcy0+ZW5hYmxlX2NiKHZpLT5ydnEpKQotCQkgICAgJiYgbmV0aWZfcnhfcmVzY2hlZHVsZSh2aS0+ZGV2LCBuYXBpKSkKKwkJICAgICYmIG5hcGlfc2NoZWR1bGVfcHJlcChuYXBpKSkgeworCQkJdmktPnJ2cS0+dnFfb3BzLT5kaXNhYmxlX2NiKHZpLT5ydnEpOworCQkJX19uZXRpZl9yeF9zY2hlZHVsZSh2aS0+ZGV2LCBuYXBpKTsKIAkJCWdvdG8gYWdhaW47CisJCX0KIAl9CiAKIAlyZXR1cm4gcmVjZWl2ZWQ7CkBAIC0yNzgsMTAgKzI4MSwxMSBAQAogCQlwcl9kZWJ1ZygiJXM6IHZpcnRpbyBub3QgcHJlcGFyZWQgdG8gc2VuZFxuIiwgZGV2LT5uYW1lKTsKIAkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCi0JCS8qIEFjdGl2YXRlIGNhbGxiYWNrIGZvciB1c2luZyBza2JzOiBpZiB0aGlzIGZhaWxzIGl0CisJCS8qIEFjdGl2YXRlIGNhbGxiYWNrIGZvciB1c2luZyBza2JzOiBpZiB0aGlzIHJldHVybnMgZmFsc2UgaXQKIAkJICogbWVhbnMgc29tZSB3ZXJlIHVzZWQgaW4gdGhlIG1lYW50aW1lLiAqLwogCQlpZiAodW5saWtlbHkoIXZpLT5zdnEtPnZxX29wcy0+ZW5hYmxlX2NiKHZpLT5zdnEpKSkgewotCQkJcHJpbnRrKCJVbmxpa2VseTogcmVzdGFydCBzdnEgZmFpbGVkXG4iKTsKKwkJCXByaW50aygiVW5saWtlbHk6IHJlc3RhcnQgc3ZxIHJhY2VcbiIpOworCQkJdmktPnN2cS0+dnFfb3BzLT5kaXNhYmxlX2NiKHZpLT5zdnEpOwogCQkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKIAkJCWdvdG8gYWdhaW47CiAJCX0KQEAgLTI5NCw2ICsyOTgsMTUgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCitzdGF0aWMgdm9pZCB2aXJ0bmV0X25ldHBvbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSA9IG5ldGRldl9wcml2KGRldik7CisKKwluYXBpX3NjaGVkdWxlKCZ2aS0+bmFwaSk7Cit9CisjZW5kaWYKKwogc3RhdGljIGludCB2aXJ0bmV0X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSA9IG5ldGRldl9wcml2KGRldik7CkBAIC0zMzYsNiArMzQ5LDkgQEAKIAlkZXYtPnN0b3AgPSB2aXJ0bmV0X2Nsb3NlOwogCWRldi0+aGFyZF9zdGFydF94bWl0ID0gc3RhcnRfeG1pdDsKIAlkZXYtPmZlYXR1cmVzID0gTkVUSUZfRl9ISUdIRE1BOworI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCisJZGV2LT5wb2xsX2NvbnRyb2xsZXIgPSB2aXJ0bmV0X25ldHBvbGw7CisjZW5kaWYKIAlTRVRfTkVUREVWX0RFVihkZXYsICZ2ZGV2LT5kZXYpOwogCiAJLyogRG8gd2Ugc3VwcG9ydCAiaGFyZHdhcmUiIGNoZWNrc3Vtcz8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMgYi9kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jCmluZGV4IGNmMjdiZjQuLjU0NzM2OGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYwpAQCAtMjAyNCw2ICsyMDI0LDcgQEAKIAlzdHJ1Y3QgZnN0aW9jX3dyaXRlIHdydGhkcjsKIAlzdHJ1Y3QgZnN0aW9jX2luZm8gaW5mbzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXZvaWQgKmJ1ZjsKIAogCWRiZyhEQkdfSU9DVEwsICJpb2N0bDogJXgsICVwXG4iLCBjbWQsIGlmci0+aWZyX2RhdGEpOwogCkBAIC0yMDY1LDE2ICsyMDY2LDIyIEBACiAJCQlyZXR1cm4gLUVOWElPOwogCQl9CiAKLQkJLyogTm93IGNvcHkgdGhlIGRhdGEgdG8gdGhlIGNhcmQuCi0JCSAqIFRoaXMgd2lsbCBwcm9iYWJseSBicmVhayBvbiBzb21lIGFyY2hpdGVjdHVyZXMuCi0JCSAqIEknbGwgZml4IGl0IHdoZW4gSSBoYXZlIHNvbWV0aGluZyB0byB0ZXN0IG9uLgotCQkgKi8KLQkJaWYgKGNvcHlfZnJvbV91c2VyKGNhcmQtPm1lbSArIHdydGhkci5vZmZzZXQsCisJCS8qIE5vdyBjb3B5IHRoZSBkYXRhIHRvIHRoZSBjYXJkLiAqLworCisJCWJ1ZiA9IGttYWxsb2Mod3J0aGRyLnNpemUsIEdGUF9LRVJORUwpOworCQlpZiAoIWJ1ZikKKwkJCXJldHVybiAtRU5PTUVNOworCisJCWlmIChjb3B5X2Zyb21fdXNlcihidWYsCiAJCQkJICAgaWZyLT5pZnJfZGF0YSArIHNpemVvZiAoc3RydWN0IGZzdGlvY193cml0ZSksCiAJCQkJICAgd3J0aGRyLnNpemUpKSB7CisJCQlrZnJlZShidWYpOwogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KIAorCQltZW1jcHlfdG9pbyhjYXJkLT5tZW0gKyB3cnRoZHIub2Zmc2V0LCBidWYsIHdydGhkci5zaXplKTsKKwkJa2ZyZWUoYnVmKTsKKwogCQkvKiBXcml0ZXMgdG8gdGhlIG1lbW9yeSBvZiBhIGNhcmQgaW4gdGhlIHJlc2V0IHN0YXRlIGNvbnN0aXR1dGUKIAkJICogYSBkb3dubG9hZAogCQkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2h3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9ody5jCmluZGV4IGMyZGUyZDkuLjAxNzU3NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2h3LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvaHcuYwpAQCAtNDI3LDYgKzQyNyw4IEBACiB7CiAJQVRINUtfVFJBQ0UoYWgtPmFoX3NjKTsKIAorCV9fc2V0X2JpdChBVEhfU1RBVF9JTlZBTElELCBhaC0+YWhfc2MtPnN0YXR1cyk7CisKIAlpZiAoYWgtPmFoX3JmX2JhbmtzICE9IE5VTEwpCiAJCWtmcmVlKGFoLT5haF9yZl9iYW5rcyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHkuYwppbmRleCA3MTUwN2IyLi41NzVjNTQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeS5jCkBAIC04NjAsNyArODYwLDcgQEAKIAliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4QkIpLAogCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4QkIpKSAmIDB4RjAwMCkgfCAweDAwNTMpOwogCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE02MSwKLQkJKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfT0ZETTYxICYgMHhGRTFGKSkgfCAweDAxMjApOworCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNNjEpICYgMHhGRTFGKSB8IDB4MDEyMCk7CiAJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweDEzKSwKIAkJKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfT0ZETSgweDEzKSkgJiAweDBGRkYpIHwgMHgzMDAwKTsKIAliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4MTQpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0dXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTR1c2IuYwppbmRleCBlN2Q0YWVlLi45OGRkYmIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTR1c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTR1c2IuYwpAQCAtNjMsNiArNjMsNyBAQAogCXtVU0JfREVWSUNFKDB4MGNkZSwgMHgwMDA4KX0sCS8qIFNhZ2VtIFhHNzAzQSAqLwogCXtVU0JfREVWSUNFKDB4MGQ4ZSwgMHgzNzYyKX0sCS8qIERMaW5rIERXTC1HMTIwIENvaGliYSAqLwogCXtVU0JfREVWSUNFKDB4MDlhYSwgMHgxMDAwKX0sCS8qIFNwaW5uYWtlciBQcm90byBib2FyZCAqLworCXtVU0JfREVWSUNFKDB4MTI0YSwgMHg0MDI1KX0sCS8qIElPR2VhciBHV1U1MTMgKEdXMzg4N0lLIGNoaXApICovCiAJe1VTQl9ERVZJQ0UoMHgxM2IxLCAweDAwMGEpfSwJLyogTGlua3N5cyBXVVNCNTRHIHZlciAyICovCiAJe1VTQl9ERVZJQ0UoMHgxM0IxLCAweDAwMEMpfSwJLyogTGlua3N5cyBXVVNCNTRBRyAqLwogCXtVU0JfREVWSUNFKDB4MTQzNSwgMHgwNDI3KX0sCS8qIEludmVudGVsIFVSMDU0RyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMC5oCmluZGV4IDA1OTI3YjkuLjZjNzI1NDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDAuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwLmgKQEAgLTYyMCw2ICs2MjAsOSBAQAogCSAqIFRoaXMgd2lsbCBvbmx5IGJlIGNvbXBpbGVkIGluIHdoZW4gcmVxdWlyZWQuCiAJICovCiAjaWZkZWYgQ09ORklHX1JUMlgwMF9MSUJfUkZLSUxMCit1bnNpZ25lZCBsb25nIHJma2lsbF9zdGF0ZTsKKyNkZWZpbmUgUkZLSUxMX1NUQVRFX0FMTE9DQVRFRAkJMQorI2RlZmluZSBSRktJTExfU1RBVEVfUkVHSVNURVJFRAkJMgogCXN0cnVjdCByZmtpbGwgKnJma2lsbDsKIAlzdHJ1Y3QgaW5wdXRfcG9sbGVkX2RldiAqcG9sbF9kZXY7CiAjZW5kaWYgLyogQ09ORklHX1JUMlgwMF9MSUJfUkZLSUxMICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGV2LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGV2LmMKaW5kZXggMGQ1MWY0Ny4uYmQzMDVmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRldi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZXYuYwpAQCAtMTA5OCw3ICsxMDk4LDcgQEAKIAkJcmV0dXJuOwogCiAJLyoKLQkgKiBVbnJlZ2lzdGVyIHJma2lsbC4KKwkgKiBVbnJlZ2lzdGVyIGV4dHJhIGNvbXBvbmVudHMuCiAJICovCiAJcnQyeDAwcmZraWxsX3VucmVnaXN0ZXIocnQyeDAwZGV2KTsKIApAQCAtMTEzOSwxNyArMTEzOSwxMiBAQAogCV9fc2V0X2JpdChERVZJQ0VfSU5JVElBTElaRUQsICZydDJ4MDBkZXYtPmZsYWdzKTsKIAogCS8qCi0JICogUmVnaXN0ZXIgdGhlIHJma2lsbCBoYW5kbGVyLgorCSAqIFJlZ2lzdGVyIHRoZSBleHRyYSBjb21wb25lbnRzLgogCSAqLwotCXN0YXR1cyA9IHJ0MngwMHJma2lsbF9yZWdpc3RlcihydDJ4MDBkZXYpOwotCWlmIChzdGF0dXMpCi0JCWdvdG8gZXhpdF91bml0aWFsaXplOworCXJ0MngwMHJma2lsbF9yZWdpc3RlcihydDJ4MDBkZXYpOwogCiAJcmV0dXJuIDA7CiAKLWV4aXRfdW5pdGlhbGl6ZToKLQlydDJ4MDBsaWJfdW5pbml0aWFsaXplKHJ0MngwMGRldik7Ci0KIGV4aXQ6CiAJcnQyeDAwbGliX2ZyZWVfcmluZ19lbnRyaWVzKHJ0MngwMGRldik7CiAKQEAgLTEzMTMsMTUgKzEzMDgsOSBAQAogCX0KIAogCS8qCi0JICogQWxsb2NhdGllIHJma2lsbC4KKwkgKiBSZWdpc3RlciBleHRyYSBjb21wb25lbnRzLgogCSAqLwotCXJldHZhbCA9IHJ0MngwMHJma2lsbF9hbGxvY2F0ZShydDJ4MDBkZXYpOwotCWlmIChyZXR2YWwpCi0JCWdvdG8gZXhpdDsKLQotCS8qCi0JICogT3BlbiB0aGUgZGVidWdmcyBlbnRyeS4KLQkgKi8KKwlydDJ4MDByZmtpbGxfYWxsb2NhdGUocnQyeDAwZGV2KTsKIAlydDJ4MDBkZWJ1Z19yZWdpc3RlcihydDJ4MDBkZXYpOwogCiAJX19zZXRfYml0KERFVklDRV9QUkVTRU5ULCAmcnQyeDAwZGV2LT5mbGFncyk7CkBAIC0xMzUwLDEzICsxMzM5LDkgQEAKIAlydDJ4MDBsaWJfdW5pbml0aWFsaXplKHJ0MngwMGRldik7CiAKIAkvKgotCSAqIENsb3NlIGRlYnVnZnMgZW50cnkuCisJICogRnJlZSBleHRyYSBjb21wb25lbnRzCiAJICovCiAJcnQyeDAwZGVidWdfZGVyZWdpc3RlcihydDJ4MDBkZXYpOwotCi0JLyoKLQkgKiBGcmVlIHJma2lsbAotCSAqLwogCXJ0MngwMHJma2lsbF9mcmVlKHJ0MngwMGRldik7CiAKIAkvKgpAQCAtMTM5NSwxMSArMTM4MCwxNSBAQAogCV9fc2V0X2JpdChERVZJQ0VfU1RBUlRFRF9TVVNQRU5ELCAmcnQyeDAwZGV2LT5mbGFncyk7CiAKIAkvKgotCSAqIERpc2FibGUgcmFkaW8gYW5kIHVuaXRpYWxpemUgYWxsIGl0ZW1zCi0JICogdGhhdCBtdXN0IGJlIHJlY3JlYXRlZCBvbiByZXN1bWUuCisJICogRGlzYWJsZSByYWRpby4KIAkgKi8KIAlydDJ4MDBsaWJfc3RvcChydDJ4MDBkZXYpOwogCXJ0MngwMGxpYl91bmluaXRpYWxpemUocnQyeDAwZGV2KTsKKworCS8qCisJICogU3VzcGVuZC9kaXNhYmxlIGV4dHJhIGNvbXBvbmVudHMuCisJICovCisJcnQyeDAwcmZraWxsX3N1c3BlbmQocnQyeDAwZGV2KTsKIAlydDJ4MDBkZWJ1Z19kZXJlZ2lzdGVyKHJ0MngwMGRldik7CiAKIGV4aXQ6CkBAIC0xNDIyLDkgKzE0MTEsMTAgQEAKIAlOT1RJQ0UocnQyeDAwZGV2LCAiV2FraW5nIHVwLlxuIik7CiAKIAkvKgotCSAqIE9wZW4gdGhlIGRlYnVnZnMgZW50cnkuCisJICogUmVzdG9yZS9lbmFibGUgZXh0cmEgY29tcG9uZW50cy4KIAkgKi8KIAlydDJ4MDBkZWJ1Z19yZWdpc3RlcihydDJ4MDBkZXYpOworCXJ0MngwMHJma2lsbF9yZXN1bWUocnQyeDAwZGV2KTsKIAogCS8qCiAJICogT25seSBjb250aW51ZSBpZiBtYWM4MDIxMSBoYWQgb3BlbiBpbnRlcmZhY2VzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGxpYi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGxpYi5oCmluZGV4IDFhZGJkMjguLmNlNThjNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsaWIuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbGliLmgKQEAgLTEwMCwyOCArMTAwLDM2IEBACiAgKiBSRmtpbGwgaGFuZGxlcnMuCiAgKi8KICNpZmRlZiBDT05GSUdfUlQyWDAwX0xJQl9SRktJTEwKLWludCBydDJ4MDByZmtpbGxfcmVnaXN0ZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldik7Cit2b2lkIHJ0MngwMHJma2lsbF9yZWdpc3RlcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KTsKIHZvaWQgcnQyeDAwcmZraWxsX3VucmVnaXN0ZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldik7Ci1pbnQgcnQyeDAwcmZraWxsX2FsbG9jYXRlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOwordm9pZCBydDJ4MDByZmtpbGxfYWxsb2NhdGUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldik7CiB2b2lkIHJ0MngwMHJma2lsbF9mcmVlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOwordm9pZCBydDJ4MDByZmtpbGxfc3VzcGVuZChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KTsKK3ZvaWQgcnQyeDAwcmZraWxsX3Jlc3VtZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KTsKICNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBydDJ4MDByZmtpbGxfcmVnaXN0ZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3N0YXRpYyBpbmxpbmUgdm9pZCBydDJ4MDByZmtpbGxfcmVnaXN0ZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKLQlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHJ0MngwMHJma2lsbF91bnJlZ2lzdGVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCiB7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHJ0MngwMHJma2lsbF9hbGxvY2F0ZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQorc3RhdGljIGlubGluZSB2b2lkIHJ0MngwMHJma2lsbF9hbGxvY2F0ZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQogewotCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcnQyeDAwcmZraWxsX2ZyZWUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKIH0KKworc3RhdGljIGlubGluZSB2b2lkIHJ0MngwMHJma2lsbF9zdXNwZW5kKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBydDJ4MDByZmtpbGxfcmVzdW1lKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCit7Cit9CiAjZW5kaWYgLyogQ09ORklHX1JUMlgwMF9MSUJfUkZLSUxMICovCiAKICNlbmRpZiAvKiBSVDJYMDBMSUJfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHJma2lsbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHJma2lsbC5jCmluZGV4IDM0YTk2ZDQuLmY5NTU3NzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDByZmtpbGwuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcmZraWxsLmMKQEAgLTY5LDU2ICs2OSw4MSBAQAogCX0KIH0KIAotaW50IHJ0MngwMHJma2lsbF9yZWdpc3RlcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQordm9pZCBydDJ4MDByZmtpbGxfcmVnaXN0ZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKLQlpbnQgcmV0dmFsOworCWlmICghdGVzdF9iaXQoQ09ORklHX1NVUFBPUlRfSFdfQlVUVE9OLCAmcnQyeDAwZGV2LT5mbGFncykgfHwKKwkgICAgIXRlc3RfYml0KFJGS0lMTF9TVEFURV9BTExPQ0FURUQsICZydDJ4MDBkZXYtPnJma2lsbF9zdGF0ZSkpCisJCXJldHVybjsKIAotCWlmICghdGVzdF9iaXQoQ09ORklHX1NVUFBPUlRfSFdfQlVUVE9OLCAmcnQyeDAwZGV2LT5mbGFncykpCi0JCXJldHVybiAwOwotCi0JcmV0dmFsID0gcmZraWxsX3JlZ2lzdGVyKHJ0MngwMGRldi0+cmZraWxsKTsKLQlpZiAocmV0dmFsKSB7CisJaWYgKHJma2lsbF9yZWdpc3RlcihydDJ4MDBkZXYtPnJma2lsbCkpIHsKIAkJRVJST1IocnQyeDAwZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHJma2lsbCBoYW5kbGVyLlxuIik7Ci0JCXJldHVybiByZXR2YWw7CisJCXJldHVybjsKIAl9CiAKLQlyZXR2YWwgPSBpbnB1dF9yZWdpc3Rlcl9wb2xsZWRfZGV2aWNlKHJ0MngwMGRldi0+cG9sbF9kZXYpOwotCWlmIChyZXR2YWwpIHsKKwlpZiAoaW5wdXRfcmVnaXN0ZXJfcG9sbGVkX2RldmljZShydDJ4MDBkZXYtPnBvbGxfZGV2KSkgewogCQlFUlJPUihydDJ4MDBkZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgcG9sbGVkIGRldmljZS5cbiIpOwogCQlyZmtpbGxfdW5yZWdpc3RlcihydDJ4MDBkZXYtPnJma2lsbCk7Ci0JCXJldHVybiByZXR2YWw7CisJCXJldHVybjsKIAl9CiAKKwlfX3NldF9iaXQoUkZLSUxMX1NUQVRFX1JFR0lTVEVSRUQsICZydDJ4MDBkZXYtPnJma2lsbF9zdGF0ZSk7CisKIAkvKgogCSAqIEZvcmNlIGluaXRpYWwgcG9sbCB3aGljaCB3aWxsIGRldGVjdCB0aGUgaW5pdGlhbCBkZXZpY2Ugc3RhdGUsCiAJICogYW5kIGNvcnJlY3RseSBzZW5kcyB0aGUgc2lnbmFsIHRvIHRoZSByZmtpbGwgbGF5ZXIgYWJvdXQgdGhpcwogCSAqIHN0YXRlLgogCSAqLwogCXJ0MngwMHJma2lsbF9wb2xsKHJ0MngwMGRldi0+cG9sbF9kZXYpOwotCi0JcmV0dXJuIDA7CiB9CiAKIHZvaWQgcnQyeDAwcmZraWxsX3VucmVnaXN0ZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKLQlpZiAoIXRlc3RfYml0KENPTkZJR19TVVBQT1JUX0hXX0JVVFRPTiwgJnJ0MngwMGRldi0+ZmxhZ3MpKQorCWlmICghdGVzdF9iaXQoQ09ORklHX1NVUFBPUlRfSFdfQlVUVE9OLCAmcnQyeDAwZGV2LT5mbGFncykgfHwKKwkgICAgIXRlc3RfYml0KFJGS0lMTF9TVEFURV9SRUdJU1RFUkVELCAmcnQyeDAwZGV2LT5yZmtpbGxfc3RhdGUpKQogCQlyZXR1cm47CiAKIAlpbnB1dF91bnJlZ2lzdGVyX3BvbGxlZF9kZXZpY2UocnQyeDAwZGV2LT5wb2xsX2Rldik7CiAJcmZraWxsX3VucmVnaXN0ZXIocnQyeDAwZGV2LT5yZmtpbGwpOworCisJX19jbGVhcl9iaXQoUkZLSUxMX1NUQVRFX1JFR0lTVEVSRUQsICZydDJ4MDBkZXYtPnJma2lsbF9zdGF0ZSk7CiB9CiAKLWludCBydDJ4MDByZmtpbGxfYWxsb2NhdGUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3N0YXRpYyBzdHJ1Y3QgaW5wdXRfcG9sbGVkX2RldiAqCitydDJ4MDByZmtpbGxfYWxsb2NhdGVfcG9sbGRldihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQogewotCXN0cnVjdCBkZXZpY2UgKmRldmljZSA9IHdpcGh5X2RldihydDJ4MDBkZXYtPmh3LT53aXBoeSk7CisJc3RydWN0IGlucHV0X3BvbGxlZF9kZXYgKnBvbGxfZGV2OwogCisJcG9sbF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9wb2xsZWRfZGV2aWNlKCk7CisJaWYgKCFwb2xsX2RldikKKwkJcmV0dXJuIE5VTEw7CisKKwlwb2xsX2Rldi0+cHJpdmF0ZSA9IHJ0MngwMGRldjsKKwlwb2xsX2Rldi0+cG9sbCA9IHJ0MngwMHJma2lsbF9wb2xsOworCXBvbGxfZGV2LT5wb2xsX2ludGVydmFsID0gUkZLSUxMX1BPTExfSU5URVJWQUw7CisKKwlwb2xsX2Rldi0+aW5wdXQtPm5hbWUgPSBydDJ4MDBkZXYtPm9wcy0+bmFtZTsKKwlwb2xsX2Rldi0+aW5wdXQtPnBoeXMgPSB3aXBoeV9uYW1lKHJ0MngwMGRldi0+aHctPndpcGh5KTsKKwlwb2xsX2Rldi0+aW5wdXQtPmlkLmJ1c3R5cGUgPSBCVVNfSE9TVDsKKwlwb2xsX2Rldi0+aW5wdXQtPmlkLnZlbmRvciA9IDB4MTgxNDsKKwlwb2xsX2Rldi0+aW5wdXQtPmlkLnByb2R1Y3QgPSBydDJ4MDBkZXYtPmNoaXAucnQ7CisJcG9sbF9kZXYtPmlucHV0LT5pZC52ZXJzaW9uID0gcnQyeDAwZGV2LT5jaGlwLnJldjsKKwlwb2xsX2Rldi0+aW5wdXQtPmRldi5wYXJlbnQgPSB3aXBoeV9kZXYocnQyeDAwZGV2LT5ody0+d2lwaHkpOworCXBvbGxfZGV2LT5pbnB1dC0+ZXZiaXRbMF0gPSBCSVQoRVZfS0VZKTsKKwlzZXRfYml0KEtFWV9XTEFOLCBwb2xsX2Rldi0+aW5wdXQtPmtleWJpdCk7CisKKwlyZXR1cm4gcG9sbF9kZXY7Cit9CisKK3ZvaWQgcnQyeDAwcmZraWxsX2FsbG9jYXRlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCit7CiAJaWYgKCF0ZXN0X2JpdChDT05GSUdfU1VQUE9SVF9IV19CVVRUT04sICZydDJ4MDBkZXYtPmZsYWdzKSkKLQkJcmV0dXJuIDA7CisJCXJldHVybjsKIAotCXJ0MngwMGRldi0+cmZraWxsID0gcmZraWxsX2FsbG9jYXRlKGRldmljZSwgUkZLSUxMX1RZUEVfV0xBTik7CisJcnQyeDAwZGV2LT5yZmtpbGwgPQorCSAgICByZmtpbGxfYWxsb2NhdGUod2lwaHlfZGV2KHJ0MngwMGRldi0+aHctPndpcGh5KSwgUkZLSUxMX1RZUEVfV0xBTik7CiAJaWYgKCFydDJ4MDBkZXYtPnJma2lsbCkgewogCQlFUlJPUihydDJ4MDBkZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgcmZraWxsIGhhbmRsZXIuXG4iKTsKLQkJZ290byBleGl0OworCQlyZXR1cm47CiAJfQogCiAJcnQyeDAwZGV2LT5yZmtpbGwtPm5hbWUgPSBydDJ4MDBkZXYtPm9wcy0+bmFtZTsKQEAgLTEyNiw0MCArMTUxLDQ5IEBACiAJcnQyeDAwZGV2LT5yZmtpbGwtPnN0YXRlID0gLTE7CiAJcnQyeDAwZGV2LT5yZmtpbGwtPnRvZ2dsZV9yYWRpbyA9IHJ0MngwMHJma2lsbF90b2dnbGVfcmFkaW87CiAKLQlydDJ4MDBkZXYtPnBvbGxfZGV2ID0gaW5wdXRfYWxsb2NhdGVfcG9sbGVkX2RldmljZSgpOworCXJ0MngwMGRldi0+cG9sbF9kZXYgPSBydDJ4MDByZmtpbGxfYWxsb2NhdGVfcG9sbGRldihydDJ4MDBkZXYpOwogCWlmICghcnQyeDAwZGV2LT5wb2xsX2RldikgewogCQlFUlJPUihydDJ4MDBkZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgcG9sbGVkIGRldmljZS5cbiIpOwotCQlnb3RvIGV4aXRfZnJlZV9yZmtpbGw7CisJCXJma2lsbF9mcmVlKHJ0MngwMGRldi0+cmZraWxsKTsKKwkJcnQyeDAwZGV2LT5yZmtpbGwgPSBOVUxMOworCQlyZXR1cm47CiAJfQogCi0JcnQyeDAwZGV2LT5wb2xsX2Rldi0+cHJpdmF0ZSA9IHJ0MngwMGRldjsKLQlydDJ4MDBkZXYtPnBvbGxfZGV2LT5wb2xsID0gcnQyeDAwcmZraWxsX3BvbGw7Ci0JcnQyeDAwZGV2LT5wb2xsX2Rldi0+cG9sbF9pbnRlcnZhbCA9IFJGS0lMTF9QT0xMX0lOVEVSVkFMOwotCi0JcnQyeDAwZGV2LT5wb2xsX2Rldi0+aW5wdXQtPm5hbWUgPSBydDJ4MDBkZXYtPm9wcy0+bmFtZTsKLQlydDJ4MDBkZXYtPnBvbGxfZGV2LT5pbnB1dC0+cGh5cyA9IHdpcGh5X25hbWUocnQyeDAwZGV2LT5ody0+d2lwaHkpOwotCXJ0MngwMGRldi0+cG9sbF9kZXYtPmlucHV0LT5pZC5idXN0eXBlID0gQlVTX0hPU1Q7Ci0JcnQyeDAwZGV2LT5wb2xsX2Rldi0+aW5wdXQtPmlkLnZlbmRvciA9IDB4MTgxNDsKLQlydDJ4MDBkZXYtPnBvbGxfZGV2LT5pbnB1dC0+aWQucHJvZHVjdCA9IHJ0MngwMGRldi0+Y2hpcC5ydDsKLQlydDJ4MDBkZXYtPnBvbGxfZGV2LT5pbnB1dC0+aWQudmVyc2lvbiA9IHJ0MngwMGRldi0+Y2hpcC5yZXY7Ci0JcnQyeDAwZGV2LT5wb2xsX2Rldi0+aW5wdXQtPmRldi5wYXJlbnQgPSBkZXZpY2U7Ci0JcnQyeDAwZGV2LT5wb2xsX2Rldi0+aW5wdXQtPmV2Yml0WzBdID0gQklUKEVWX0tFWSk7Ci0Jc2V0X2JpdChLRVlfV0xBTiwgcnQyeDAwZGV2LT5wb2xsX2Rldi0+aW5wdXQtPmtleWJpdCk7Ci0KLQlyZXR1cm4gMDsKLQotZXhpdF9mcmVlX3Jma2lsbDoKLQlyZmtpbGxfZnJlZShydDJ4MDBkZXYtPnJma2lsbCk7Ci0KLWV4aXQ6Ci0JcmV0dXJuIC1FTk9NRU07CisJcmV0dXJuOwogfQogCiB2b2lkIHJ0MngwMHJma2lsbF9mcmVlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCiB7Ci0JaWYgKCF0ZXN0X2JpdChDT05GSUdfU1VQUE9SVF9IV19CVVRUT04sICZydDJ4MDBkZXYtPmZsYWdzKSkKKwlpZiAoIXRlc3RfYml0KENPTkZJR19TVVBQT1JUX0hXX0JVVFRPTiwgJnJ0MngwMGRldi0+ZmxhZ3MpIHx8CisJICAgICF0ZXN0X2JpdChSRktJTExfU1RBVEVfQUxMT0NBVEVELCAmcnQyeDAwZGV2LT5yZmtpbGxfc3RhdGUpKQogCQlyZXR1cm47CiAKIAlpbnB1dF9mcmVlX3BvbGxlZF9kZXZpY2UocnQyeDAwZGV2LT5wb2xsX2Rldik7CisJcnQyeDAwZGV2LT5wb2xsX2RldiA9IE5VTEw7CisKIAlyZmtpbGxfZnJlZShydDJ4MDBkZXYtPnJma2lsbCk7CisJcnQyeDAwZGV2LT5yZmtpbGwgPSBOVUxMOworfQorCit2b2lkIHJ0MngwMHJma2lsbF9zdXNwZW5kKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCit7CisJaWYgKCF0ZXN0X2JpdChDT05GSUdfU1VQUE9SVF9IV19CVVRUT04sICZydDJ4MDBkZXYtPmZsYWdzKSB8fAorCSAgICAhdGVzdF9iaXQoUkZLSUxMX1NUQVRFX0FMTE9DQVRFRCwgJnJ0MngwMGRldi0+cmZraWxsX3N0YXRlKSkKKwkJcmV0dXJuOworCisJaW5wdXRfZnJlZV9wb2xsZWRfZGV2aWNlKHJ0MngwMGRldi0+cG9sbF9kZXYpOworCXJ0MngwMGRldi0+cG9sbF9kZXYgPSBOVUxMOworfQorCit2b2lkIHJ0MngwMHJma2lsbF9yZXN1bWUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3sKKwlpZiAoIXRlc3RfYml0KENPTkZJR19TVVBQT1JUX0hXX0JVVFRPTiwgJnJ0MngwMGRldi0+ZmxhZ3MpIHx8CisJICAgICF0ZXN0X2JpdChSRktJTExfU1RBVEVfQUxMT0NBVEVELCAmcnQyeDAwZGV2LT5yZmtpbGxfc3RhdGUpKQorCQlyZXR1cm47CisKKwlydDJ4MDBkZXYtPnBvbGxfZGV2ID0gcnQyeDAwcmZraWxsX2FsbG9jYXRlX3BvbGxkZXYocnQyeDAwZGV2KTsKKwlpZiAoIXJ0MngwMGRldi0+cG9sbF9kZXYpIHsKKwkJRVJST1IocnQyeDAwZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIHBvbGxlZCBkZXZpY2UuXG4iKTsKKwkJcmV0dXJuOworCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFyaXNjL3BkY19zdGFibGUuYyBiL2RyaXZlcnMvcGFyaXNjL3BkY19zdGFibGUuYwppbmRleCBkZTM0YWE5Li5mOWY5YTVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcmlzYy9wZGNfc3RhYmxlLmMKKysrIGIvZHJpdmVycy9wYXJpc2MvcGRjX3N0YWJsZS5jCkBAIC04MjksNyArODI5LDcgQEAKIAkJCQkgICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0JcmV0dXJuIHBkY3NfYXV0b193cml0ZShrc2V0LCBhdHRyLCBidWYsIGNvdW50LCBQRl9BVVRPQk9PVCk7CisJcmV0dXJuIHBkY3NfYXV0b193cml0ZShrb2JqLCBhdHRyLCBidWYsIGNvdW50LCBQRl9BVVRPQk9PVCk7CiB9CiAKIC8qKgpAQCAtODQ1LDcgKzg0NSw3IEBACiAJCQkJICAgICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlyZXR1cm4gcGRjc19hdXRvX3dyaXRlKGtzZXQsIGF0dHIsIGJ1ZiwgY291bnQsIFBGX0FVVE9TRUFSQ0gpOworCXJldHVybiBwZGNzX2F1dG9fd3JpdGUoa29iaiwgYXR0ciwgYnVmLCBjb3VudCwgUEZfQVVUT1NFQVJDSCk7CiB9CiAKIC8qKgpAQCAtMTA2Niw3ICsxMDY2LDcgQEAKIAl9CiAKIAkvKiBEb24ndCBmb3JnZXQgdGhlIHJvb3QgZW50cmllcyAqLwotCWVycm9yID0gc3lzZnNfY3JlYXRlX2dyb3VwKHN0YWJsZV9rb2JqLCBwZGNzX2F0dHJfZ3JvdXApOworCWVycm9yID0gc3lzZnNfY3JlYXRlX2dyb3VwKHN0YWJsZV9rb2JqLCAmcGRjc19hdHRyX2dyb3VwKTsKIAogCS8qIHJlZ2lzdGVyIHRoZSBwYXRocyBrc2V0IGFzIGEgY2hpbGQgb2YgdGhlIHN0YWJsZSBrc2V0ICovCiAJcGF0aHNfa3NldCA9IGtzZXRfY3JlYXRlX2FuZF9hZGQoInBhdGhzIiwgTlVMTCwgc3RhYmxlX2tvYmopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJpc2Mvc2JhX2lvbW11LmMgYi9kcml2ZXJzL3BhcmlzYy9zYmFfaW9tbXUuYwppbmRleCBiZGJlNzgwLi44YzRkMmMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcmlzYy9zYmFfaW9tbXUuYworKysgYi9kcml2ZXJzL3BhcmlzYy9zYmFfaW9tbXUuYwpAQCAtMzE0LDggKzMxNCw4IEBACiAjZGVmaW5lIFJFU01BUF9NQVNLKG4pICAgICh+MFVMIDw8IChCSVRTX1BFUl9MT05HIC0gKG4pKSkKICNkZWZpbmUgUkVTTUFQX0lEWF9NQVNLICAgKHNpemVvZih1bnNpZ25lZCBsb25nKSAtIDEpCiAKLXVuc2lnbmVkIGxvbmcgcHRyX3RvX3BpZGUoc3RydWN0IGlvYyAqaW9jLCB1bnNpZ25lZCBsb25nICpyZXNfcHRyLAotCQkJICB1bnNpZ25lZCBpbnQgYml0c2hpZnRjbnQpCitzdGF0aWMgdW5zaWduZWQgbG9uZyBwdHJfdG9fcGlkZShzdHJ1Y3QgaW9jICppb2MsIHVuc2lnbmVkIGxvbmcgKnJlc19wdHIsCisJCQkJIHVuc2lnbmVkIGludCBiaXRzaGlmdGNudCkKIHsKIAlyZXR1cm4gKCgodW5zaWduZWQgbG9uZylyZXNfcHRyIC0gKHVuc2lnbmVkIGxvbmcpaW9jLT5yZXNfbWFwKSA8PCAzKQogCQkrIGJpdHNoaWZ0Y250OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfY29yZS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfY29yZS5jCmluZGV4IDdmNDgzNmI4Li41ZmE0YmEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9jb3JlLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfY29yZS5jCkBAIC00NjcsNyArNDY3LDcgQEAKIAl0X3Nsb3QgPSBwY2llaHBfZmluZF9zbG90KGN0cmwsIGN0cmwtPnNsb3RfZGV2aWNlX29mZnNldCk7CiAKIAl0X3Nsb3QtPmhwY19vcHMtPmdldF9hZGFwdGVyX3N0YXR1cyh0X3Nsb3QsICZ2YWx1ZSk7IC8qIENoZWNrIGlmIHNsb3QgaXMgb2NjdXBpZWQgKi8KLQlpZiAodmFsdWUpIHsKKwlpZiAodmFsdWUgJiYgcGNpZWhwX2ZvcmNlKSB7CiAJCXJjID0gcGNpZWhwX2VuYWJsZV9zbG90KHRfc2xvdCk7CiAJCWlmIChyYykJLyogLUVOT0RFVjogc2hvdWxkbid0IGhhcHBlbiwgYnV0IGRlYWwgd2l0aCBpdCAqLwogCQkJdmFsdWUgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbnAvaXNhcG5wL2NvcmUuYyBiL2RyaXZlcnMvcG5wL2lzYXBucC9jb3JlLmMKaW5kZXggMmM5MjViNy4uMjU3ZjVkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbnAvaXNhcG5wL2NvcmUuYworKysgYi9kcml2ZXJzL3BucC9pc2FwbnAvY29yZS5jCkBAIC04OCw2ICs4OCwxNSBAQAogI2RlZmluZSBfTFRBR19NRU0zMlJBTkdFCTB4ODUKICNkZWZpbmUgX0xUQUdfRklYRURNRU0zMlJBTkdFCTB4ODYKIAorLyoKKyAqIFNpemVzIG9mIElTQVBOUCBsb2dpY2FsIGRldmljZSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIHNldHMuCisgKiBTZWUgUE5QLUlTQS12MS4wYS5wZGYsIEFwcGVuZGl4IEEuCisgKi8KKyNkZWZpbmUgSVNBUE5QX01BWF9NRU0JCTQKKyNkZWZpbmUgSVNBUE5QX01BWF9QT1JUCQk4CisjZGVmaW5lIElTQVBOUF9NQVhfSVJRCQkyCisjZGVmaW5lIElTQVBOUF9NQVhfRE1BCQkyCisKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGlzYXBucF9jaGVja3N1bV92YWx1ZTsKIHN0YXRpYyBERUZJTkVfTVVURVgoaXNhcG5wX2NmZ19tdXRleCk7CiBzdGF0aWMgaW50IGlzYXBucF9jc25fY291bnQ7CkBAIC05NDUsMTQgKzk1NCwxNCBAQAogCiAJZGV2LT5hY3RpdmUgPSBpc2FwbnBfcmVhZF9ieXRlKElTQVBOUF9DRkdfQUNUSVZBVEUpOwogCWlmIChkZXYtPmFjdGl2ZSkgewotCQlmb3IgKHRtcCA9IDA7IHRtcCA8IFBOUF9NQVhfUE9SVDsgdG1wKyspIHsKKwkJZm9yICh0bXAgPSAwOyB0bXAgPCBJU0FQTlBfTUFYX1BPUlQ7IHRtcCsrKSB7CiAJCQlyZXQgPSBpc2FwbnBfcmVhZF93b3JkKElTQVBOUF9DRkdfUE9SVCArICh0bXAgPDwgMSkpOwogCQkJaWYgKCFyZXQpCiAJCQkJY29udGludWU7CiAJCQlyZXMtPnBvcnRfcmVzb3VyY2VbdG1wXS5zdGFydCA9IHJldDsKIAkJCXJlcy0+cG9ydF9yZXNvdXJjZVt0bXBdLmZsYWdzID0gSU9SRVNPVVJDRV9JTzsKIAkJfQotCQlmb3IgKHRtcCA9IDA7IHRtcCA8IFBOUF9NQVhfTUVNOyB0bXArKykgeworCQlmb3IgKHRtcCA9IDA7IHRtcCA8IElTQVBOUF9NQVhfTUVNOyB0bXArKykgewogCQkJcmV0ID0KIAkJCSAgICBpc2FwbnBfcmVhZF93b3JkKElTQVBOUF9DRkdfTUVNICsgKHRtcCA8PCAzKSkgPDwgODsKIAkJCWlmICghcmV0KQpAQCAtOTYwLDcgKzk2OSw3IEBACiAJCQlyZXMtPm1lbV9yZXNvdXJjZVt0bXBdLnN0YXJ0ID0gcmV0OwogCQkJcmVzLT5tZW1fcmVzb3VyY2VbdG1wXS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNOwogCQl9Ci0JCWZvciAodG1wID0gMDsgdG1wIDwgUE5QX01BWF9JUlE7IHRtcCsrKSB7CisJCWZvciAodG1wID0gMDsgdG1wIDwgSVNBUE5QX01BWF9JUlE7IHRtcCsrKSB7CiAJCQlyZXQgPQogCQkJICAgIChpc2FwbnBfcmVhZF93b3JkKElTQVBOUF9DRkdfSVJRICsgKHRtcCA8PCAxKSkgPj4KIAkJCSAgICAgOCk7CkBAIC05NzAsNyArOTc5LDcgQEAKIAkJCSAgICByZXMtPmlycV9yZXNvdXJjZVt0bXBdLmVuZCA9IHJldDsKIAkJCXJlcy0+aXJxX3Jlc291cmNlW3RtcF0uZmxhZ3MgPSBJT1JFU09VUkNFX0lSUTsKIAkJfQotCQlmb3IgKHRtcCA9IDA7IHRtcCA8IFBOUF9NQVhfRE1BOyB0bXArKykgeworCQlmb3IgKHRtcCA9IDA7IHRtcCA8IElTQVBOUF9NQVhfRE1BOyB0bXArKykgewogCQkJcmV0ID0gaXNhcG5wX3JlYWRfYnl0ZShJU0FQTlBfQ0ZHX0RNQSArIHRtcCk7CiAJCQlpZiAocmV0ID09IDQpCiAJCQkJY29udGludWU7CkBAIC0xMDAyLDE0ICsxMDExLDE0IEBACiAJaXNhcG5wX2NmZ19iZWdpbihkZXYtPmNhcmQtPm51bWJlciwgZGV2LT5udW1iZXIpOwogCWRldi0+YWN0aXZlID0gMTsKIAlmb3IgKHRtcCA9IDA7Ci0JICAgICB0bXAgPCBQTlBfTUFYX1BPUlQKKwkgICAgIHRtcCA8IElTQVBOUF9NQVhfUE9SVAogCSAgICAgJiYgKHJlcy0+cG9ydF9yZXNvdXJjZVt0bXBdLgogCQkgZmxhZ3MgJiAoSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfVU5TRVQpKSA9PSBJT1JFU09VUkNFX0lPOwogCSAgICAgdG1wKyspCiAJCWlzYXBucF93cml0ZV93b3JkKElTQVBOUF9DRkdfUE9SVCArICh0bXAgPDwgMSksCiAJCQkJICByZXMtPnBvcnRfcmVzb3VyY2VbdG1wXS5zdGFydCk7CiAJZm9yICh0bXAgPSAwOwotCSAgICAgdG1wIDwgUE5QX01BWF9JUlEKKwkgICAgIHRtcCA8IElTQVBOUF9NQVhfSVJRCiAJICAgICAmJiAocmVzLT5pcnFfcmVzb3VyY2VbdG1wXS4KIAkJIGZsYWdzICYgKElPUkVTT1VSQ0VfSVJRIHwgSU9SRVNPVVJDRV9VTlNFVCkpID09IElPUkVTT1VSQ0VfSVJROwogCSAgICAgdG1wKyspIHsKQEAgLTEwMTksMTQgKzEwMjgsMTQgQEAKIAkJaXNhcG5wX3dyaXRlX2J5dGUoSVNBUE5QX0NGR19JUlEgKyAodG1wIDw8IDEpLCBpcnEpOwogCX0KIAlmb3IgKHRtcCA9IDA7Ci0JICAgICB0bXAgPCBQTlBfTUFYX0RNQQorCSAgICAgdG1wIDwgSVNBUE5QX01BWF9ETUEKIAkgICAgICYmIChyZXMtPmRtYV9yZXNvdXJjZVt0bXBdLgogCQkgZmxhZ3MgJiAoSU9SRVNPVVJDRV9ETUEgfCBJT1JFU09VUkNFX1VOU0VUKSkgPT0gSU9SRVNPVVJDRV9ETUE7CiAJICAgICB0bXArKykKIAkJaXNhcG5wX3dyaXRlX2J5dGUoSVNBUE5QX0NGR19ETUEgKyB0bXAsCiAJCQkJICByZXMtPmRtYV9yZXNvdXJjZVt0bXBdLnN0YXJ0KTsKIAlmb3IgKHRtcCA9IDA7Ci0JICAgICB0bXAgPCBQTlBfTUFYX01FTQorCSAgICAgdG1wIDwgSVNBUE5QX01BWF9NRU0KIAkgICAgICYmIChyZXMtPm1lbV9yZXNvdXJjZVt0bXBdLgogCQkgZmxhZ3MgJiAoSU9SRVNPVVJDRV9NRU0gfCBJT1JFU09VUkNFX1VOU0VUKSkgPT0gSU9SRVNPVVJDRV9NRU07CiAJICAgICB0bXArKykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL0tjb25maWcgYi9kcml2ZXJzL3J0Yy9LY29uZmlnCmluZGV4IDgyZjVhZDkuLjllN2RlNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL0tjb25maWcKKysrIGIvZHJpdmVycy9ydGMvS2NvbmZpZwpAQCAtMTYsNyArMTYsNyBAQAogCSAgcHJvYmFibHkgd2FudCB0byBlbmFibGUgb25lIG9yIG1vcmUgb2YgdGhlIGludGVyZmFjZXMgYmVsb3cuCiAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZQotCSAgd2lsbCBiZSBjYWxsZWQgcnRjLWNsYXNzLgorCSAgd2lsbCBiZSBjYWxsZWQgcnRjLWNvcmUuCiAKIGlmIFJUQ19DTEFTUwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtYXQ5MXNhbTkuYyBiL2RyaXZlcnMvcnRjL3J0Yy1hdDkxc2FtOS5jCmluZGV4IGJiZjEwZWMuLjU2NzI4YTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1hdDkxc2FtOS5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1hdDkxc2FtOS5jCkBAIC0yNzQsNyArMjc0LDcgQEAKIAkgKiBTUiBjbGVhcnMgaXQsIHNvIHdlIG11c3Qgb25seSByZWFkIGl0IGluIHRoaXMgaXJxIGhhbmRsZXIhCiAJICovCiAJbXIgPSBydHRfcmVhZGwocnRjLCBNUikgJiAoQVQ5MV9SVFRfQUxNSUVOIHwgQVQ5MV9SVFRfUlRUSU5DSUVOKTsKLQlzciA9IHJ0dF9yZWFkbChydGMsIFNSKSAmIG1yOworCXNyID0gcnR0X3JlYWRsKHJ0YywgU1IpICYgKG1yID4+IDE2KTsKIAlpZiAoIXNyKQogCQlyZXR1cm4gSVJRX05PTkU7CiAKQEAgLTMyMSw2ICszMjEsMTAgQEAKIAlpZiAoIXJ0YykKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwkvKiBwbGF0Zm9ybSBzZXR1cCBjb2RlIHNob3VsZCBoYXZlIGhhbmRsZWQgdGhpczsgc2lnaCAqLworCWlmICghZGV2aWNlX2Nhbl93YWtldXAoJnBkZXYtPmRldikpCisJCWRldmljZV9pbml0X3dha2V1cCgmcGRldi0+ZGV2LCAxKTsKKwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHJ0Yyk7CiAJcnRjLT5ydHQgPSAodm9pZCBfX2ZvcmNlIF9faW9tZW0gKikgKEFUOTFfVkFfQkFTRV9TWVMgLSBBVDkxX0JBU0VfU1lTKTsKIAlydGMtPnJ0dCArPSByLT5zdGFydDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9LY29uZmlnIGIvZHJpdmVycy9zY3NpL0tjb25maWcKaW5kZXggYzQ2NjY2YS4uYjlkMzc0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL0tjb25maWcKKysrIGIvZHJpdmVycy9zY3NpL0tjb25maWcKQEAgLTMyNSw3ICszMjUsNyBAQAogCWRlcGVuZHMgb24gU0NTSSE9bgogCWRlZmF1bHQgeQogCi1pZiBTQ1NJX0xPV0xFVkVMCitpZiBTQ1NJX0xPV0xFVkVMICYmIFNDU0kKIAogY29uZmlnIElTQ1NJX1RDUAogCXRyaXN0YXRlICJpU0NTSSBJbml0aWF0b3Igb3ZlciBUQ1AvSVAiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYTEwMHUydy5jIGIvZHJpdmVycy9zY3NpL2ExMDB1MncuYwppbmRleCBmNjA4ZDRhLi43OTJiMmU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYTEwMHUydy5jCisrKyBiL2RyaXZlcnMvc2NzaS9hMTAwdTJ3LmMKQEAgLTY3NCwxMiArNjc0LDEzIEBACiAJCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IDMyOyBpbmRleCsrKSB7CiAJCQlpZiAoKGhvc3QtPmFsbG9jYXRpb25fbWFwW2NoYW5uZWxdW2ldID4+IGluZGV4KSAmIDB4MDEpIHsKIAkJCQlob3N0LT5hbGxvY2F0aW9uX21hcFtjaGFubmVsXVtpXSAmPSB+KDEgPDwgaW5kZXgpOwotCQkJCWJyZWFrOworCQkJCWlkeCA9IGluZGV4ICsgMzIgKiBpOworCQkJCS8qCisJCQkJICogVHJhbnNsYXRlIHRoZSBpbmRleCB0byBhIHN0cnVjdHVyZSBpbnN0YW5jZQorCQkJCSAqLworCQkJCXJldHVybiBob3N0LT5zY2JfdmlydCArIGlkeDsKIAkJCX0KIAkJfQotCQlpZHggPSBpbmRleCArIDMyICogaTsKLQkJLyogVHJhbnNsYXRlIHRoZSBpbmRleCB0byBhIHN0cnVjdHVyZSBpbnN0YW5jZSAqLwotCQlyZXR1cm4gKHN0cnVjdCBvcmNfc2NiICopICgodW5zaWduZWQgbG9uZykgaG9zdC0+c2NiX3ZpcnQgKyAoaWR4ICogc2l6ZW9mKHN0cnVjdCBvcmNfc2NiKSkpOwogCX0KIAlyZXR1cm4gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hZHZhbnN5cy5jIGIvZHJpdmVycy9zY3NpL2FkdmFuc3lzLmMKaW5kZXggM2MyZDY4OC4uODU5MTU4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FkdmFuc3lzLmMKKysrIGIvZHJpdmVycy9zY3NpL2FkdmFuc3lzLmMKQEAgLTY0MzksNyArNjQzOSw3IEBACiAJCQlpICs9IDI7CiAJCQlsZW4gKz0gMjsKIAkJfSBlbHNlIHsKLQkJCXVuc2lnbmVkIGNoYXIgb2ZmID0gYnVmW2ldICogMjsKKwkJCXVuc2lnbmVkIGludCBvZmYgPSBidWZbaV0gKiAyOwogCQkJdW5zaWduZWQgc2hvcnQgd29yZCA9IChidWZbb2ZmICsgMV0gPDwgOCkgfCBidWZbb2ZmXTsKIAkJCUFkdldyaXRlV29yZEF1dG9JbmNMcmFtKGlvcF9iYXNlLCB3b3JkKTsKIAkJCWxlbiArPSAyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FyY21zci9hcmNtc3IuaCBiL2RyaXZlcnMvc2NzaS9hcmNtc3IvYXJjbXNyLmgKaW5kZXggMDM5MzcwNy4uMzI4OGJlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FyY21zci9hcmNtc3IuaAorKysgYi9kcml2ZXJzL3Njc2kvYXJjbXNyL2FyY21zci5oCkBAIC0zNDEsMTMgKzM0MSwxMyBAQAogCXVpbnQzMl90CWRvbmVfcWJ1ZmZlcltBUkNNU1JfTUFYX0hCQl9QT1NUUVVFVUVdOwogCXVpbnQzMl90CXBvc3RxX2luZGV4OwogCXVpbnQzMl90CWRvbmVxX2luZGV4OwotCXVpbnQzMl90CV9faW9tZW0gKmRydjJpb3BfZG9vcmJlbGxfcmVnOwotCXVpbnQzMl90CV9faW9tZW0gKmRydjJpb3BfZG9vcmJlbGxfbWFza19yZWc7Ci0JdWludDMyX3QJX19pb21lbSAqaW9wMmRydl9kb29yYmVsbF9yZWc7Ci0JdWludDMyX3QJX19pb21lbSAqaW9wMmRydl9kb29yYmVsbF9tYXNrX3JlZzsKLQl1aW50MzJfdAlfX2lvbWVtICptc2djb2RlX3J3YnVmZmVyX3JlZzsKLQl1aW50MzJfdAlfX2lvbWVtICppb2N0bF93YnVmZmVyX3JlZzsKLQl1aW50MzJfdAlfX2lvbWVtICppb2N0bF9yYnVmZmVyX3JlZzsKKwl2b2lkCQlfX2lvbWVtICpkcnYyaW9wX2Rvb3JiZWxsX3JlZzsKKwl2b2lkCQlfX2lvbWVtICpkcnYyaW9wX2Rvb3JiZWxsX21hc2tfcmVnOworCXZvaWQJCV9faW9tZW0gKmlvcDJkcnZfZG9vcmJlbGxfcmVnOworCXZvaWQJCV9faW9tZW0gKmlvcDJkcnZfZG9vcmJlbGxfbWFza19yZWc7CisJdm9pZAkJX19pb21lbSAqbXNnY29kZV9yd2J1ZmZlcl9yZWc7CisJdm9pZAkJX19pb21lbSAqaW9jdGxfd2J1ZmZlcl9yZWc7CisJdm9pZAkJX19pb21lbSAqaW9jdGxfcmJ1ZmZlcl9yZWc7CiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2dkdGguYyBiL2RyaXZlcnMvc2NzaS9nZHRoLmMKaW5kZXggMjdlYmQzMy4uMGIyMDgwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2dkdGguYworKysgYi9kcml2ZXJzL3Njc2kvZ2R0aC5jCkBAIC00OTMsNiArNDkzLDEyIEBACiAgICAgaWYgKCFzY3ApCiAgICAgICAgIHJldHVybiAtRU5PTUVNOwogCisgICAgc2NwLT5zZW5zZV9idWZmZXIgPSBremFsbG9jKFNDU0lfU0VOU0VfQlVGRkVSU0laRSwgR0ZQX0tFUk5FTCk7CisgICAgaWYgKCFzY3AtPnNlbnNlX2J1ZmZlcikgeworCWtmcmVlKHNjcCk7CisJcmV0dXJuIC1FTk9NRU07CisgICAgfQorCiAgICAgc2NwLT5kZXZpY2UgPSBzZGV2OwogICAgIG1lbXNldCgmY21uZGluZm8sIDAsIHNpemVvZihjbW5kaW5mbykpOwogCkBAIC01MTMsNiArNTE5LDcgQEAKICAgICBydmFsID0gY21uZGluZm8uc3RhdHVzOwogICAgIGlmIChpbmZvKQogICAgICAgICAqaW5mbyA9IGNtbmRpbmZvLmluZm87CisgICAga2ZyZWUoc2NwLT5zZW5zZV9idWZmZXIpOwogICAgIGtmcmVlKHNjcCk7CiAgICAgcmV0dXJuIHJ2YWw7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCmluZGV4IGJhMjFkOTcuLmY0MDg5OGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCkBAIC0yMTYyLDEwICsyMTYyLDE1IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorI2lmIDAKKwkvKiBGSVhNRTogY3VycmVudGx5IHRoaXMgY2hlY2sgZWxpbWluYXRlcyBhbGwgbWVkaWEgY2hhbmdlIGV2ZW50cworCSAqIGZvciBwb2xsZWQgZGV2aWNlcy4gIE5lZWQgdG8gdXBkYXRlIHRvIGRpc2NyaW1pbmF0ZSBiZXR3ZWVuIEFOCisJICogYW5kIHBvbGxlZCBldmVudHMgKi8KIAlpZiAoIXRlc3RfYml0KGV2dC0+ZXZ0X3R5cGUsIHNkZXYtPnN1cHBvcnRlZF9ldmVudHMpKSB7CiAJCWtmcmVlKGV2dCk7CiAJCXJldHVybjsKIAl9CisjZW5kaWYKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZzZGV2LT5saXN0X2xvY2ssIGZsYWdzKTsKIAlsaXN0X2FkZF90YWlsKCZldnQtPm5vZGUsICZzZGV2LT5ldmVudF9saXN0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jCmluZGV4IGVkODNjZGIuLmI5YjA5YTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfc3lzZnMuYwpAQCAtMjk0LDYgKzI5NCw3IEBACiAJfQogCiAJaWYgKHNkZXYtPnJlcXVlc3RfcXVldWUpIHsKKwkJYnNnX3VucmVnaXN0ZXJfcXVldWUoc2Rldi0+cmVxdWVzdF9xdWV1ZSk7CiAJCXNkZXYtPnJlcXVlc3RfcXVldWUtPnF1ZXVlZGF0YSA9IE5VTEw7CiAJCS8qIHVzZXIgY29udGV4dCBuZWVkZWQgdG8gZnJlZSBxdWV1ZSAqLwogCQlzY3NpX2ZyZWVfcXVldWUoc2Rldi0+cmVxdWVzdF9xdWV1ZSk7CkBAIC04NTcsNyArODU4LDYgQEAKIAlpZiAoc2NzaV9kZXZpY2Vfc2V0X3N0YXRlKHNkZXYsIFNERVZfQ0FOQ0VMKSAhPSAwKQogCQlyZXR1cm47CiAKLQlic2dfdW5yZWdpc3Rlcl9xdWV1ZShzZGV2LT5yZXF1ZXN0X3F1ZXVlKTsKIAljbGFzc19kZXZpY2VfdW5yZWdpc3Rlcigmc2Rldi0+c2Rldl9jbGFzc2Rldik7CiAJdHJhbnNwb3J0X3JlbW92ZV9kZXZpY2UoZGV2KTsKIAlkZXZpY2VfZGVsKGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2QuYyBiL2RyaXZlcnMvc2NzaS9zZC5jCmluZGV4IDdhZWU2NGQuLjVmZTdhYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zZC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zZC5jCkBAIC0xNjU0LDYgKzE2NTQsNyBAQAogCXNka3AtPmRpc2sgPSBnZDsKIAlzZGtwLT5pbmRleCA9IGluZGV4OwogCXNka3AtPm9wZW5lcnMgPSAwOworCXNka3AtPnByZXZpb3VzX3N0YXRlID0gMTsKIAogCWlmICghc2RwLT50aW1lb3V0KSB7CiAJCWlmIChzZHAtPnR5cGUgIT0gVFlQRV9NT0QpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3IuYyBiL2RyaXZlcnMvc2NzaS9zci5jCmluZGV4IDIwODU2NWIuLjdlZTg2ZDRhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NyLmMKKysrIGIvZHJpdmVycy9zY3NpL3NyLmMKQEAgLTYyMyw2ICs2MjMsNyBAQAogCWNkLT5kaXNrID0gZGlzazsKIAljZC0+Y2FwYWNpdHkgPSAweDFmZmZmZjsKIAljZC0+ZGV2aWNlLT5jaGFuZ2VkID0gMTsJLyogZm9yY2UgcmVjaGVjayBDRCB0eXBlICovCisJY2QtPnByZXZpb3VzX3N0YXRlID0gMTsKIAljZC0+dXNlID0gMTsKIAljZC0+cmVhZGNkX2tub3duID0gMDsKIAljZC0+cmVhZGNkX2NkZGEgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmMgYi9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuYwppbmRleCBhOGMxMTZiLi45ZDI0NGQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuYwpAQCAtNDE0LDEyICs0MTQsMTIgQEAKICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUpCiBzdGF0aWMgaW5saW5lIGludCBzY2lmX3R4cm9vbShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewotCXJldHVybiBTQ0lGX1RYUk9PTV9NQVggLSAoc2NpX2luKHBvcnQsIFNDVEZEUikgJiAweDdmKTsKKwlyZXR1cm4gU0NJRl9UWFJPT01fTUFYIC0gKHNjaV9pbihwb3J0LCBTQ1RGRFIpICYgMHhmZik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHNjaWZfcnhyb29tKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7Ci0JcmV0dXJuIHNjaV9pbihwb3J0LCBTQ1JGRFIpICYgMHg3ZjsKKwlyZXR1cm4gc2NpX2luKHBvcnQsIFNDUkZEUikgJiAweGZmOwogfQogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IHNjaWZfdHhyb29tKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NuL2lvYzMuYyBiL2RyaXZlcnMvc24vaW9jMy5jCmluZGV4IDI5ZmNkNmQuLmEwYWEzM2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc24vaW9jMy5jCisrKyBiL2RyaXZlcnMvc24vaW9jMy5jCkBAIC01NjEsNyArNTYxLDcgQEAKIAkJCQkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkJCQkgICAgICAgIiVzOiBJT0MzIHN1Ym1vZHVsZSAlcyByZW1vdmUgZmFpbGVkICIKIAkJCQkJICAgICAgICJmb3IgcGNpX2RldiAlcy5cbiIsCi0JCQkJCSAgICAgICBfX0ZVTkNUSU9OX18sIG1vZHVsZV9uYW1lKGlzLT5vd25lciksCisJCQkJCSAgICAgICBfX2Z1bmNfXywgbW9kdWxlX25hbWUoaXMtPm93bmVyKSwKIAkJCQkJICAgICAgIHBjaV9uYW1lKGlkZC0+cGRldikpOwogCQkJaWRkLT5hY3RpdmVbaXMtPmlkXSA9IDA7CiAJCQlpZihpcy0+aXJxX21hc2spCkBAIC02MTEsNyArNjExLDcgQEAKIAlpZiAoKHJldCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCSAgICAgICAiJXM6IEZhaWxlZCB0byBlbmFibGUgSU9DMyBkZXZpY2UgZm9yIHBjaV9kZXYgJXMuXG4iLAotCQkgICAgICAgX19GVU5DVElPTl9fLCBwY2lfbmFtZShwZGV2KSk7CisJCSAgICAgICBfX2Z1bmNfXywgcGNpX25hbWUocGRldikpOwogCQlnb3RvIG91dDsKIAl9CiAJcGNpX3NldF9tYXN0ZXIocGRldik7CkBAIC02MjMsNyArNjIzLDcgQEAKICAgICAgICAgICAgICAgICBpZiAocmV0IDwgMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFVuYWJsZSB0byBvYnRhaW4gNjQgYml0IERNQSAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvciBjb25zaXN0ZW50IGFsbG9jYXRpb25zXG4iLAotCQkJCV9fRlVOQ1RJT05fXyk7CisJCQkJX19mdW5jX18pOwogICAgICAgICAgICAgICAgIH0KIAl9CiAjZW5kaWYKQEAgLTYzMyw3ICs2MzMsNyBAQAogCWlmICghaWRkKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJICAgICAgICIlczogRmFpbGVkIHRvIGFsbG9jYXRlIElPQzMgZGF0YSBmb3IgcGNpX2RldiAlcy5cbiIsCi0JCSAgICAgICBfX0ZVTkNUSU9OX18sIHBjaV9uYW1lKHBkZXYpKTsKKwkJICAgICAgIF9fZnVuY19fLCBwY2lfbmFtZShwZGV2KSk7CiAJCXJldCA9IC1FTk9ERVY7CiAJCWdvdG8gb3V0X2lkZDsKIAl9CkBAIC02NDksNyArNjQ5LDcgQEAKIAkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkgICAgICAgIiVzOiBVbmFibGUgdG8gZmluZCBJT0MzIHJlc291cmNlICIKIAkJICAgICAgICJmb3IgcGNpX2RldiAlcy5cbiIsCi0JCSAgICAgICBfX0ZVTkNUSU9OX18sIHBjaV9uYW1lKHBkZXYpKTsKKwkJICAgICAgIF9fZnVuY19fLCBwY2lfbmFtZShwZGV2KSk7CiAJCXJldCA9IC1FTk9ERVY7CiAJCWdvdG8gb3V0X3BjaTsKIAl9CkBAIC02NTcsNyArNjU3LDcgQEAKIAkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkgICAgICAgIiVzOiBVbmFibGUgdG8gcmVxdWVzdCBJT0MzIHJlZ2lvbiAiCiAJCSAgICAgICAiZm9yIHBjaV9kZXYgJXMuXG4iLAotCQkgICAgICAgX19GVU5DVElPTl9fLCBwY2lfbmFtZShwZGV2KSk7CisJCSAgICAgICBfX2Z1bmNfXywgcGNpX25hbWUocGRldikpOwogCQlyZXQgPSAtRU5PREVWOwogCQlnb3RvIG91dF9wY2k7CiAJfQpAQCAtNjY2LDcgKzY2Niw3IEBACiAJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJICAgICAgICIlczogVW5hYmxlIHRvIHJlbWFwIElPQzMgcmVnaW9uICIKIAkJICAgICAgICJmb3IgcGNpX2RldiAlcy5cbiIsCi0JCSAgICAgICBfX0ZVTkNUSU9OX18sIHBjaV9uYW1lKHBkZXYpKTsKKwkJICAgICAgIF9fZnVuY19fLCBwY2lfbmFtZShwZGV2KSk7CiAJCXJldCA9IC1FTk9ERVY7CiAJCWdvdG8gb3V0X21pc2NfcmVnaW9uOwogCX0KQEAgLTcwOSw3ICs3MDksNyBAQAogCQl9IGVsc2UgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkJICAgICAgICIlcyA6IHJlcXVlc3RfaXJxIGZhaWxzIGZvciBJUlEgMHgleFxuICIsCi0JCQkgICAgICAgX19GVU5DVElPTl9fLCBwZGV2LT5pcnEpOworCQkJICAgICAgIF9fZnVuY19fLCBwZGV2LT5pcnEpOwogCQl9CiAJCWlmICghcmVxdWVzdF9pcnEocGRldi0+aXJxKzIsIGlvYzNfaW50cl9pbywgSVJRRl9TSEFSRUQsCiAJCQkJICJpb2MzLWlvIiwgKHZvaWQgKilpZGQpKSB7CkBAIC03MTcsNyArNzE3LDcgQEAKIAkJfSBlbHNlIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJCSAgICAgICAiJXMgOiByZXF1ZXN0X2lycSBmYWlscyBmb3IgSVJRIDB4JXhcbiAiLAotCQkJICAgICAgIF9fRlVOQ1RJT05fXywgcGRldi0+aXJxKzIpOworCQkJICAgICAgIF9fZnVuY19fLCBwZGV2LT5pcnErMik7CiAJCX0KIAl9IGVsc2UgewogCQlpZiAoIXJlcXVlc3RfaXJxKHBkZXYtPmlycSwgaW9jM19pbnRyX2lvLCBJUlFGX1NIQVJFRCwKQEAgLTcyNiw3ICs3MjYsNyBAQAogCQl9IGVsc2UgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkJICAgICAgICIlcyA6IHJlcXVlc3RfaXJxIGZhaWxzIGZvciBJUlEgMHgleFxuICIsCi0JCQkgICAgICAgX19GVU5DVElPTl9fLCBwZGV2LT5pcnEpOworCQkJICAgICAgIF9fZnVuY19fLCBwZGV2LT5pcnEpOwogCQl9CiAJfQogCkBAIC03NjksNyArNzY5LDcgQEAKIAkJCQkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkJCQkgICAgICAgIiVzOiBJT0MzIHN1Ym1vZHVsZSAweCVzIHJlbW92ZSBmYWlsZWQgIgogCQkJCQkgICAgICAgImZvciBwY2lfZGV2ICVzLlxuIiwKLQkJCQkJICAgICAgICBfX0ZVTkNUSU9OX18sCisJCQkJCQlfX2Z1bmNfXywKIAkJCQkJCW1vZHVsZV9uYW1lKGlvYzNfc3VibW9kdWxlc1tpZF0tPm93bmVyKSwKIAkJCQkJICAgICAgICBwY2lfbmFtZShwZGV2KSk7CiAJCQlpZGQtPmFjdGl2ZVtpZF0gPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90aGVybWFsL0tjb25maWcgYi9kcml2ZXJzL3RoZXJtYWwvS2NvbmZpZwppbmRleCAzYWIzMTNlLi4xN2U3MWQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3RoZXJtYWwvS2NvbmZpZworKysgYi9kcml2ZXJzL3RoZXJtYWwvS2NvbmZpZwpAQCAtNCw4ICs0LDYgQEAKIAogbWVudWNvbmZpZyBUSEVSTUFMCiAJYm9vbCAiR2VuZXJpYyBUaGVybWFsIHN5c2ZzIGRyaXZlciIKLQlzZWxlY3QgSFdNT04KLQlkZWZhdWx0IHkKIAloZWxwCiAJICBHZW5lcmljIFRoZXJtYWwgU3lzZnMgZHJpdmVyIG9mZmVycyBhIGdlbmVyaWMgbWVjaGFuaXNtIGZvcgogCSAgdGhlcm1hbCBtYW5hZ2VtZW50LiBVc3VhbGx5IGl0J3MgbWFkZSB1cCBvZiBvbmUgb3IgbW9yZSB0aGVybWFsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3RoZXJtYWwvdGhlcm1hbC5jIGIvZHJpdmVycy90aGVybWFsL3RoZXJtYWwuYwppbmRleCA0MWJkNGM4Li44Yjg2ZTUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3RoZXJtYWwvdGhlcm1hbC5jCisrKyBiL2RyaXZlcnMvdGhlcm1hbC90aGVybWFsLmMKQEAgLTMwLDEwICszMCw4IEBACiAjaW5jbHVkZSA8bGludXgvaWRyLmg+CiAjaW5jbHVkZSA8bGludXgvdGhlcm1hbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvaHdtb24uaD4KLSNpbmNsdWRlIDxsaW51eC9od21vbi1zeXNmcy5oPgogCi1NT0RVTEVfQVVUSE9SKCJaaGFuZyBSdWkiKTsKK01PRFVMRV9BVVRIT1IoIlpoYW5nIFJ1aSIpCiBNT0RVTEVfREVTQ1JJUFRJT04oIkdlbmVyaWMgdGhlcm1hbCBtYW5hZ2VtZW50IHN5c2ZzIHN1cHBvcnQiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIApAQCAtNTgsOSArNTYsNiBAQAogc3RhdGljIExJU1RfSEVBRCh0aGVybWFsX2NkZXZfbGlzdCk7CiBzdGF0aWMgREVGSU5FX01VVEVYKHRoZXJtYWxfbGlzdF9sb2NrKTsKIAotc3RhdGljIHN0cnVjdCBkZXZpY2UgKnRoZXJtYWxfaHdtb247Ci0jZGVmaW5lIE1BWF9USEVSTUFMX1pPTkVTCTEwCi0KIHN0YXRpYyBpbnQgZ2V0X2lkcihzdHJ1Y3QgaWRyICppZHIsIHN0cnVjdCBtdXRleCAqbG9jaywgaW50ICppZCkKIHsKIAlpbnQgZXJyOwpAQCAtOTIsNjcgKzg3LDcgQEAKIAkJbXV0ZXhfdW5sb2NrKGxvY2spOwogfQogCi0vKiBod21vbiBzeXMgSS9GKi8KLXN0YXRpYyBzc2l6ZV90Ci1uYW1lX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXJldHVybiBzcHJpbnRmKGJ1ZiwgInRoZXJtYWxfc3lzX2NsYXNzXG4iKTsKLX0KLQotc3RhdGljIHNzaXplX3QKLXRlbXBfaW5wdXRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCi17Ci0Jc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKnR6OwotCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqc2Vuc29yX2F0dHIKLQkJCQkJCT0gdG9fc2Vuc29yX2Rldl9hdHRyKGF0dHIpOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeSh0eiwgJnRoZXJtYWxfdHpfbGlzdCwgbm9kZSkKLQkJaWYgKHR6LT5pZCA9PSBzZW5zb3JfYXR0ci0+aW5kZXgpCi0JCQlyZXR1cm4gdHotPm9wcy0+Z2V0X3RlbXAodHosIGJ1Zik7Ci0KLQlyZXR1cm4gLUVOT0RFVjsKLX0KLQotc3RhdGljIHNzaXplX3QKLXRlbXBfY3JpdF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCWNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqdHo7Ci0Jc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICpzZW5zb3JfYXR0cgotCQkJCQkJPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0cik7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHR6LCAmdGhlcm1hbF90el9saXN0LCBub2RlKQotCQlpZiAodHotPmlkID09IHNlbnNvcl9hdHRyLT5pbmRleCkKLQkJCXJldHVybiB0ei0+b3BzLT5nZXRfdHJpcF90ZW1wKHR6LCAwLCBidWYpOwotCi0JcmV0dXJuIC1FTk9ERVY7Ci19Ci0KLXN0YXRpYyBERVZJQ0VfQVRUUihuYW1lLCAwNDQ0LCBuYW1lX3Nob3csIE5VTEwpOwotc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSBzZW5zb3JfYXR0cnNbXSA9IHsKLQlTRU5TT1JfQVRUUih0ZW1wMV9pbnB1dCwgMDQ0NCwgdGVtcF9pbnB1dF9zaG93LCBOVUxMLCAwKSwKLQlTRU5TT1JfQVRUUih0ZW1wMV9jcml0LCAwNDQ0LCB0ZW1wX2NyaXRfc2hvdywgTlVMTCwgMCksCi0JU0VOU09SX0FUVFIodGVtcDJfaW5wdXQsIDA0NDQsIHRlbXBfaW5wdXRfc2hvdywgTlVMTCwgMSksCi0JU0VOU09SX0FUVFIodGVtcDJfY3JpdCwgMDQ0NCwgdGVtcF9jcml0X3Nob3csIE5VTEwsIDEpLAotCVNFTlNPUl9BVFRSKHRlbXAzX2lucHV0LCAwNDQ0LCB0ZW1wX2lucHV0X3Nob3csIE5VTEwsIDIpLAotCVNFTlNPUl9BVFRSKHRlbXAzX2NyaXQsIDA0NDQsIHRlbXBfY3JpdF9zaG93LCBOVUxMLCAyKSwKLQlTRU5TT1JfQVRUUih0ZW1wNF9pbnB1dCwgMDQ0NCwgdGVtcF9pbnB1dF9zaG93LCBOVUxMLCAzKSwKLQlTRU5TT1JfQVRUUih0ZW1wNF9jcml0LCAwNDQ0LCB0ZW1wX2NyaXRfc2hvdywgTlVMTCwgMyksCi0JU0VOU09SX0FUVFIodGVtcDVfaW5wdXQsIDA0NDQsIHRlbXBfaW5wdXRfc2hvdywgTlVMTCwgNCksCi0JU0VOU09SX0FUVFIodGVtcDVfY3JpdCwgMDQ0NCwgdGVtcF9jcml0X3Nob3csIE5VTEwsIDQpLAotCVNFTlNPUl9BVFRSKHRlbXA2X2lucHV0LCAwNDQ0LCB0ZW1wX2lucHV0X3Nob3csIE5VTEwsIDUpLAotCVNFTlNPUl9BVFRSKHRlbXA2X2NyaXQsIDA0NDQsIHRlbXBfY3JpdF9zaG93LCBOVUxMLCA1KSwKLQlTRU5TT1JfQVRUUih0ZW1wN19pbnB1dCwgMDQ0NCwgdGVtcF9pbnB1dF9zaG93LCBOVUxMLCA2KSwKLQlTRU5TT1JfQVRUUih0ZW1wN19jcml0LCAwNDQ0LCB0ZW1wX2NyaXRfc2hvdywgTlVMTCwgNiksCi0JU0VOU09SX0FUVFIodGVtcDhfaW5wdXQsIDA0NDQsIHRlbXBfaW5wdXRfc2hvdywgTlVMTCwgNyksCi0JU0VOU09SX0FUVFIodGVtcDhfY3JpdCwgMDQ0NCwgdGVtcF9jcml0X3Nob3csIE5VTEwsIDcpLAotCVNFTlNPUl9BVFRSKHRlbXA5X2lucHV0LCAwNDQ0LCB0ZW1wX2lucHV0X3Nob3csIE5VTEwsIDgpLAotCVNFTlNPUl9BVFRSKHRlbXA5X2NyaXQsIDA0NDQsIHRlbXBfY3JpdF9zaG93LCBOVUxMLCA4KSwKLQlTRU5TT1JfQVRUUih0ZW1wMTBfaW5wdXQsIDA0NDQsIHRlbXBfaW5wdXRfc2hvdywgTlVMTCwgOSksCi0JU0VOU09SX0FUVFIodGVtcDEwX2NyaXQsIDA0NDQsIHRlbXBfY3JpdF9zaG93LCBOVUxMLCA5KSwKLX07Ci0KLS8qIHRoZXJtYWwgem9uZSBzeXMgSS9GICovCisvKiBzeXMgSS9GIGZvciB0aGVybWFsIHpvbmUgKi8KIAogI2RlZmluZSB0b190aGVybWFsX3pvbmUoX2RldikgXAogCWNvbnRhaW5lcl9vZihfZGV2LCBzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSwgZGV2aWNlKQpAQCAtMjc5LDcgKzIxNCw3IEBACiAJZGV2aWNlX3JlbW92ZV9maWxlKF9kZXYsICZ0cmlwX3BvaW50X2F0dHJzW19pbmRleCAqIDIgKyAxXSk7CVwKIH0gd2hpbGUgKDApCiAKLS8qIGNvb2xpbmcgZGV2aWNlIHN5cyBJL0YgKi8KKy8qIHN5cyBJL0YgZm9yIGNvb2xpbmcgZGV2aWNlICovCiAjZGVmaW5lIHRvX2Nvb2xpbmdfZGV2aWNlKF9kZXYpCVwKIAljb250YWluZXJfb2YoX2Rldiwgc3RydWN0IHRoZXJtYWxfY29vbGluZ19kZXZpY2UsIGRldmljZSkKIApAQCAtNTEyLDkgKzQ0Nyw2IEBACiAJc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKnBvczsKIAlpbnQgcmVzdWx0OwogCi0JaWYgKCF0eXBlKQotCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKLQogCWlmIChzdHJsZW4odHlwZSkgPj0gVEhFUk1BTF9OQU1FX0xFTkdUSCkKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAKQEAgLTU0NSw5ICs0NzcsMTEgQEAKIAl9CiAKIAkvKiBzeXMgSS9GICovCi0JcmVzdWx0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZjZGV2LT5kZXZpY2UsICZkZXZfYXR0cl9jZGV2X3R5cGUpOwotCWlmIChyZXN1bHQpCi0JCWdvdG8gdW5yZWdpc3RlcjsKKwlpZiAodHlwZSkgeworCQlyZXN1bHQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmNkZXYtPmRldmljZSwgJmRldl9hdHRyX2NkZXZfdHlwZSk7CisJCWlmIChyZXN1bHQpCisJCQlnb3RvIHVucmVnaXN0ZXI7CisJfQogCiAJcmVzdWx0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZjZGV2LT5kZXZpY2UsICZkZXZfYXR0cl9tYXhfc3RhdGUpOwogCWlmIChyZXN1bHQpCkBAIC02MTMsOCArNTQ3LDggQEAKIAkJdHotPm9wcy0+dW5iaW5kKHR6LCBjZGV2KTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZ0aGVybWFsX2xpc3RfbG9jayk7Ci0KLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmNkZXYtPmRldmljZSwgJmRldl9hdHRyX2NkZXZfdHlwZSk7CisJaWYgKGNkZXYtPnR5cGVbMF0pCisJCWRldmljZV9yZW1vdmVfZmlsZSgmY2Rldi0+ZGV2aWNlLCAmZGV2X2F0dHJfY2Rldl90eXBlKTsKIAlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmNkZXYtPmRldmljZSwgJmRldl9hdHRyX21heF9zdGF0ZSk7CiAJZGV2aWNlX3JlbW92ZV9maWxlKCZjZGV2LT5kZXZpY2UsICZkZXZfYXR0cl9jdXJfc3RhdGUpOwogCkBAIC02NDYsOSArNTgwLDYgQEAKIAlpbnQgcmVzdWx0OwogCWludCBjb3VudDsKIAotCWlmICghdHlwZSkKLQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Ci0KIAlpZiAoc3RybGVuKHR5cGUpID49IFRIRVJNQUxfTkFNRV9MRU5HVEgpCiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCkBAIC02NzAsMTMgKzYwMSw2IEBACiAJCWtmcmVlKHR6KTsKIAkJcmV0dXJuIEVSUl9QVFIocmVzdWx0KTsKIAl9Ci0JaWYgKHR6LT5pZCA+PSBNQVhfVEhFUk1BTF9aT05FUykgewotCQlwcmludGsoS0VSTl9FUlIgUFJFRklYCi0JCQkiVG9vIG1hbnkgdGhlcm1hbCB6b25lc1xuIik7Ci0JCXJlbGVhc2VfaWRyKCZ0aGVybWFsX3R6X2lkciwgJnRoZXJtYWxfaWRyX2xvY2ssIHR6LT5pZCk7Ci0JCWtmcmVlKHR6KTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Ci0JfQogCiAJc3RyY3B5KHR6LT50eXBlLCB0eXBlKTsKIAl0ei0+b3BzID0gb3BzOwpAQCAtNjkxLDI3ICs2MTUsMTIgQEAKIAkJcmV0dXJuIEVSUl9QVFIocmVzdWx0KTsKIAl9CiAKLQkvKiBod21vbiBzeXMgSS9GICovCi0JcmVzdWx0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKHRoZXJtYWxfaHdtb24sCi0JCQkJCSZzZW5zb3JfYXR0cnNbdHotPmlkICogMl0uZGV2X2F0dHIpOwotCWlmIChyZXN1bHQpCi0JCWdvdG8gdW5yZWdpc3RlcjsKLQotCWlmICh0cmlwcyA+IDApIHsKLQkJY2hhciBidWZbNDBdOwotCQlyZXN1bHQgPSB0ei0+b3BzLT5nZXRfdHJpcF90eXBlKHR6LCAwLCBidWYpOwotCQlpZiAocmVzdWx0ID4gMCAmJiAhc3RyY21wKGJ1ZiwgImNyaXRpY2FsXG4iKSkgewotCQkJcmVzdWx0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKHRoZXJtYWxfaHdtb24sCi0JCQkJCSZzZW5zb3JfYXR0cnNbdHotPmlkICogMiArIDFdLmRldl9hdHRyKTsKLQkJCWlmIChyZXN1bHQpCi0JCQkJZ290byB1bnJlZ2lzdGVyOwotCQl9Ci0JfQotCiAJLyogc3lzIEkvRiAqLwotCXJlc3VsdCA9IGRldmljZV9jcmVhdGVfZmlsZSgmdHotPmRldmljZSwgJmRldl9hdHRyX3R5cGUpOwotCWlmIChyZXN1bHQpCi0JCWdvdG8gdW5yZWdpc3RlcjsKKwlpZiAodHlwZSkgeworCQlyZXN1bHQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnR6LT5kZXZpY2UsICZkZXZfYXR0cl90eXBlKTsKKwkJaWYgKHJlc3VsdCkKKwkJCWdvdG8gdW5yZWdpc3RlcjsKKwl9CiAKIAlyZXN1bHQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnR6LT5kZXZpY2UsICZkZXZfYXR0cl90ZW1wKTsKIAlpZiAocmVzdWx0KQpAQCAtNzc4LDE3ICs2ODcsOCBAQAogCQkgICAgdHotPm9wcy0+dW5iaW5kKHR6LCBjZGV2KTsKIAltdXRleF91bmxvY2soJnRoZXJtYWxfbGlzdF9sb2NrKTsKIAotCWRldmljZV9yZW1vdmVfZmlsZSh0aGVybWFsX2h3bW9uLAotCQkJCSZzZW5zb3JfYXR0cnNbdHotPmlkICogMl0uZGV2X2F0dHIpOwotCWlmICh0ei0+dHJpcHMgPiAwKSB7Ci0JCWNoYXIgYnVmWzQwXTsKLQkJaWYgKHR6LT5vcHMtPmdldF90cmlwX3R5cGUodHosIDAsIGJ1ZikgPiAwKQotCQkJaWYgKCFzdHJjbXAoYnVmLCAiY3JpdGljYWxcbiIpKQotCQkJCWRldmljZV9yZW1vdmVfZmlsZSh0aGVybWFsX2h3bW9uLAotCQkJCSZzZW5zb3JfYXR0cnNbdHotPmlkICogMiArIDFdLmRldl9hdHRyKTsKLQl9Ci0KLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnR6LT5kZXZpY2UsICZkZXZfYXR0cl90eXBlKTsKKwlpZiAodHotPnR5cGVbMF0pCisJCWRldmljZV9yZW1vdmVfZmlsZSgmdHotPmRldmljZSwgJmRldl9hdHRyX3R5cGUpOwogCWRldmljZV9yZW1vdmVfZmlsZSgmdHotPmRldmljZSwgJmRldl9hdHRyX3RlbXApOwogCWlmICh0ei0+b3BzLT5nZXRfbW9kZSkKIAkJZGV2aWNlX3JlbW92ZV9maWxlKCZ0ei0+ZGV2aWNlLCAmZGV2X2F0dHJfbW9kZSk7CkBAIC04MDUsMTkgKzcwNSw2IEBACiAKIEVYUE9SVF9TWU1CT0wodGhlcm1hbF96b25lX2RldmljZV91bnJlZ2lzdGVyKTsKIAotc3RhdGljIHZvaWQgdGhlcm1hbF9leGl0KHZvaWQpCi17Ci0JaWYgKHRoZXJtYWxfaHdtb24pIHsKLQkJZGV2aWNlX3JlbW92ZV9maWxlKHRoZXJtYWxfaHdtb24sICZkZXZfYXR0cl9uYW1lKTsKLQkJaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIodGhlcm1hbF9od21vbik7Ci0JfQotCWNsYXNzX3VucmVnaXN0ZXIoJnRoZXJtYWxfY2xhc3MpOwotCWlkcl9kZXN0cm95KCZ0aGVybWFsX3R6X2lkcik7Ci0JaWRyX2Rlc3Ryb3koJnRoZXJtYWxfY2Rldl9pZHIpOwotCW11dGV4X2Rlc3Ryb3koJnRoZXJtYWxfaWRyX2xvY2spOwotCW11dGV4X2Rlc3Ryb3koJnRoZXJtYWxfbGlzdF9sb2NrKTsKLX0KLQogc3RhdGljIGludCBfX2luaXQgdGhlcm1hbF9pbml0KHZvaWQpCiB7CiAJaW50IHJlc3VsdCA9IDA7CkBAIC04MjksMjEgKzcxNiwxNyBAQAogCQltdXRleF9kZXN0cm95KCZ0aGVybWFsX2lkcl9sb2NrKTsKIAkJbXV0ZXhfZGVzdHJveSgmdGhlcm1hbF9saXN0X2xvY2spOwogCX0KLQotCXRoZXJtYWxfaHdtb24gPSBod21vbl9kZXZpY2VfcmVnaXN0ZXIoTlVMTCk7Ci0JaWYgKElTX0VSUih0aGVybWFsX2h3bW9uKSkgewotCQlyZXN1bHQgPSBQVFJfRVJSKHRoZXJtYWxfaHdtb24pOwotCQl0aGVybWFsX2h3bW9uID0gTlVMTDsKLQkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWAotCQkJInVuYWJsZSB0byByZWdpc3RlciBod21vbiBkZXZpY2VcbiIpOwotCQl0aGVybWFsX2V4aXQoKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlyZXN1bHQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUodGhlcm1hbF9od21vbiwgJmRldl9hdHRyX25hbWUpOwotCiAJcmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIHZvaWQgX19leGl0IHRoZXJtYWxfZXhpdCh2b2lkKQoreworCWNsYXNzX3VucmVnaXN0ZXIoJnRoZXJtYWxfY2xhc3MpOworCWlkcl9kZXN0cm95KCZ0aGVybWFsX3R6X2lkcik7CisJaWRyX2Rlc3Ryb3koJnRoZXJtYWxfY2Rldl9pZHIpOworCW11dGV4X2Rlc3Ryb3koJnRoZXJtYWxfaWRyX2xvY2spOworCW11dGV4X2Rlc3Ryb3koJnRoZXJtYWxfbGlzdF9sb2NrKTsKK30KKwogc3Vic3lzX2luaXRjYWxsKHRoZXJtYWxfaW5pdCk7CiBtb2R1bGVfZXhpdCh0aGVybWFsX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9pc2QyMDAuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvaXNkMjAwLmMKaW5kZXggMmFlMWU4Ni4uOWQzZjI4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9pc2QyMDAuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2lzZDIwMC5jCkBAIC0xNDY5LDYgKzE0NjksNyBAQAogCWlmIChpbmZvKSB7CiAJCWtmcmVlKGluZm8tPmlkKTsKIAkJa2ZyZWUoaW5mby0+UmVnc0J1Zik7CisJCWtmcmVlKGluZm8tPnNyYi5zZW5zZV9idWZmZXIpOwogCX0KIH0KIApAQCAtMTQ5NCw3ICsxNDk1LDkgQEAKIAkJCQlremFsbG9jKHNpemVvZihzdHJ1Y3QgaGRfZHJpdmVpZCksIEdGUF9LRVJORUwpOwogCQlpbmZvLT5SZWdzQnVmID0gKHVuc2lnbmVkIGNoYXIgKikKIAkJCQlrbWFsbG9jKHNpemVvZihpbmZvLT5BVEFSZWdzKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghaW5mby0+aWQgfHwgIWluZm8tPlJlZ3NCdWYpIHsKKwkJaW5mby0+c3JiLnNlbnNlX2J1ZmZlciA9CisJCQkJa21hbGxvYyhTQ1NJX1NFTlNFX0JVRkZFUlNJWkUsIEdGUF9LRVJORUwpOworCQlpZiAoIWluZm8tPmlkIHx8ICFpbmZvLT5SZWdzQnVmIHx8ICFpbmZvLT5zcmIuc2Vuc2VfYnVmZmVyKSB7CiAJCQlpc2QyMDBfZnJlZV9pbmZvX3B0cnMoaW5mbyk7CiAJCQlrZnJlZShpbmZvKTsKIAkJCXJldFN0YXR1cyA9IElTRDIwMF9FUlJPUjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vS2NvbmZpZyBiL2RyaXZlcnMvdmlkZW8vS2NvbmZpZwppbmRleCBlMGIwNTgwLi4xYmQ1ZmIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL0tjb25maWcKKysrIGIvZHJpdmVycy92aWRlby9LY29uZmlnCkBAIC0xODkzLDYgKzE4OTMsMjAgQEAKIAkgIGZyYW1lYnVmZmVyLiBNTDMwMCBjYXJyaWVzIGEgNjQwKjQ4MCBMQ0QgZGlzcGxheSBvbiB0aGUgYm9hcmQsCiAJICBNTDQwMyB1c2VzIGEgc3RhbmRhcmQgREIxNSBWR0EgY29ubmVjdG9yLgogCitjb25maWcgRkJfTUVUUk9OT01FCisgICAgICAgdHJpc3RhdGUgIk1ldHJvbm9tZSBkaXNwbGF5IGNvbnRyb2xsZXIgc3VwcG9ydCIKKyAgICAgICBkZXBlbmRzIG9uIEZCICYmIEFSQ0hfUFhBICYmIE1NVQorICAgICAgIHNlbGVjdCBGQl9TWVNfRklMTFJFQ1QKKyAgICAgICBzZWxlY3QgRkJfU1lTX0NPUFlBUkVBCisgICAgICAgc2VsZWN0IEZCX1NZU19JTUFHRUJMSVQKKyAgICAgICBzZWxlY3QgRkJfU1lTX0ZPUFMKKyAgICAgICBzZWxlY3QgRkJfREVGRVJSRURfSU8KKyAgICAgICBoZWxwCisgICAgICAgICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1ldHJvbm9tZSBkaXNwbGF5IGNvbnRyb2xsZXIuIFRlc3RlZAorICAgICAgICAgd2l0aCBhbiBFLUluayA4MDB4NjAwIGRpc3BsYXkgYW5kIEd1bXN0aXggQ29ubmV4IHRocm91Z2ggYW4gQU1MQ0QKKyAgICAgICAgIGludGVyZmFjZS4gUGxlYXNlIHJlYWQgPGZpbGU6RG9jdW1lbnRhdGlvbi9mYi9tZXRyb25vbWVmYi50eHQ+CisgICAgICAgICBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKwogY29uZmlnIEZCX1ZJUlRVQUwKIAl0cmlzdGF0ZSAiVmlydHVhbCBGcmFtZSBCdWZmZXIgc3VwcG9ydCAoT05MWSBGT1IgVEVTVElORyEpIgogCWRlcGVuZHMgb24gRkIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vTWFrZWZpbGUgYi9kcml2ZXJzL3ZpZGVvL01ha2VmaWxlCmluZGV4IDAzMzcxYzcuLjExYzBlNWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vTWFrZWZpbGUKKysrIGIvZHJpdmVycy92aWRlby9NYWtlZmlsZQpAQCAtMTAzLDYgKzEwMyw3IEBACiBvYmotJChDT05GSUdfRkJfUE1BR19CQSkJICArPSBwbWFnLWJhLWZiLm8KIG9iai0kKENPTkZJR19GQl9QTUFHQl9CKQkgICs9IHBtYWdiLWItZmIubwogb2JqLSQoQ09ORklHX0ZCX01BWElORSkJCSAgKz0gbWF4aW5lZmIubworb2JqLSQoQ09ORklHX0ZCX01FVFJPTk9NRSkgICAgICAgICs9IG1ldHJvbm9tZWZiLm8KIG9iai0kKENPTkZJR19GQl9TMUQxM1hYWCkJICArPSBzMWQxM3h4eGZiLm8KIG9iai0kKENPTkZJR19GQl9JTVgpICAgICAgICAgICAgICArPSBpbXhmYi5vCiBvYmotJChDT05GSUdfRkJfUzNDMjQxMCkJICArPSBzM2MyNDEwZmIubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYl9kZWZpby5jIGIvZHJpdmVycy92aWRlby9mYl9kZWZpby5jCmluZGV4IDBmOGNmYjkuLjI0ODQzZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZmJfZGVmaW8uYworKysgYi9kcml2ZXJzL3ZpZGVvL2ZiX2RlZmlvLmMKQEAgLTQsNyArNCw3IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDA2IEpheWEgS3VtYXIKICAqCiAgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIExpY2Vuc2UuIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKICAqIGZvciBtb3JlIGRldGFpbHMuCiAgKi8KIApAQCAtMzEsNyArMzEsNyBAQAogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OwogCXN0cnVjdCBwYWdlICpwYWdlOwogCXN0cnVjdCBmYl9pbmZvICppbmZvID0gdm1hLT52bV9wcml2YXRlX2RhdGE7Ci0JLyogaW5mby0+c2NyZWVuX2Jhc2UgaXMgaW4gU3lzdGVtIFJBTSAqLworCS8qIGluZm8tPnNjcmVlbl9iYXNlIGlzIHZpcnR1YWwgbWVtb3J5ICovCiAJdm9pZCAqc2NyZWVuX2Jhc2UgPSAodm9pZCBfX2ZvcmNlICopIGluZm8tPnNjcmVlbl9iYXNlOwogCiAJb2Zmc2V0ID0gdm1mLT5wZ29mZiA8PCBQQUdFX1NISUZUOwpAQCAtNDMsNiArNDMsMTUgQEAKIAkJcmV0dXJuIFZNX0ZBVUxUX1NJR0JVUzsKIAogCWdldF9wYWdlKHBhZ2UpOworCisJaWYgKHZtYS0+dm1fZmlsZSkKKwkJcGFnZS0+bWFwcGluZyA9IHZtYS0+dm1fZmlsZS0+Zl9tYXBwaW5nOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fRVJSICJubyBtYXBwaW5nIGF2YWlsYWJsZVxuIik7CisKKwlCVUdfT04oIXBhZ2UtPm1hcHBpbmcpOworCXBhZ2UtPmluZGV4ID0gdm1mLT5wZ29mZjsKKwogCXZtZi0+cGFnZSA9IHBhZ2U7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMzgsMTEgKzE0NywyMCBAQAogCiB2b2lkIGZiX2RlZmVycmVkX2lvX2NsZWFudXAoc3RydWN0IGZiX2luZm8gKmluZm8pCiB7CisJdm9pZCAqc2NyZWVuX2Jhc2UgPSAodm9pZCBfX2ZvcmNlICopIGluZm8tPnNjcmVlbl9iYXNlOwogCXN0cnVjdCBmYl9kZWZlcnJlZF9pbyAqZmJkZWZpbyA9IGluZm8tPmZiZGVmaW87CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJaW50IGk7CiAKIAlCVUdfT04oIWZiZGVmaW8pOwogCWNhbmNlbF9kZWxheWVkX3dvcmsoJmluZm8tPmRlZmVycmVkX3dvcmspOwogCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisKKwkvKiBjbGVhciBvdXQgdGhlIG1hcHBpbmcgdGhhdCB3ZSBzZXR1cCAqLworCWZvciAoaSA9IDAgOyBpIDwgaW5mby0+Zml4LnNtZW1fbGVuOyBpICs9IFBBR0VfU0laRSkgeworCQlwYWdlID0gdm1hbGxvY190b19wYWdlKHNjcmVlbl9iYXNlICsgaSk7CisJCXBhZ2UtPm1hcHBpbmcgPSBOVUxMOworCX0KIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGZiX2RlZmVycmVkX2lvX2NsZWFudXApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2k4MTAvaTgxMF9tYWluLmMgYi9kcml2ZXJzL3ZpZGVvL2k4MTAvaTgxMF9tYWluLmMKaW5kZXggMWQxM2RkMC4uYTI0ZTY4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9pODEwL2k4MTBfbWFpbi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vaTgxMC9pODEwX21haW4uYwpAQCAtMTQ3Niw3ICsxNDc2LDcgQEAKIAlzdHJ1Y3QgaTgxMGZiX3BhciAqcGFyID0gaW5mby0+cGFyOwogCXU4IF9faW9tZW0gKm1taW8gPSBwYXItPm1taW9fc3RhcnRfdmlydHVhbDsKIAotCWlmICghKHBhci0+ZGV2X2ZsYWdzICYgTE9DS1VQKSkKKwlpZiAocGFyLT5kZXZfZmxhZ3MgJiBMT0NLVVApCiAJCXJldHVybiAtRU5YSU87CiAKIAlpZiAoY3Vyc29yLT5pbWFnZS53aWR0aCA+IDY0IHx8IGN1cnNvci0+aW1hZ2UuaGVpZ2h0ID4gNjQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL21ldHJvbm9tZWZiLmMgYi9kcml2ZXJzL3ZpZGVvL21ldHJvbm9tZWZiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTlhODlmZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vbWV0cm9ub21lZmIuYwpAQCAtMCwwICsxLDk5OSBAQAorLyoKKyAqIGxpbnV4L2RyaXZlcnMvdmlkZW8vbWV0cm9ub21lZmIuYyAtLSBGQiBkcml2ZXIgZm9yIE1ldHJvbm9tZSBjb250cm9sbGVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LCBKYXlhIEt1bWFyCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogTGF5b3V0IGlzIGJhc2VkIG9uIHNrZWxldG9uZmIuYyBieSBKYW1lcyBTaW1tb25zIGFuZCBHZWVydCBVeXR0ZXJob2V2ZW4uCisgKgorICogVGhpcyB3b3JrIHdhcyBtYWRlIHBvc3NpYmxlIGJ5IGhlbHAgYW5kIGVxdWlwbWVudCBzdXBwb3J0IGZyb20gRS1JbmsKKyAqIENvcnBvcmF0aW9uLiBodHRwOi8vc3VwcG9ydC5laW5rLmNvbS9jb21tdW5pdHkKKyAqCisgKiBUaGlzIGRyaXZlciBpcyB3cml0dGVuIHRvIGJlIHVzZWQgd2l0aCB0aGUgTWV0cm9ub21lIGRpc3BsYXkgY29udHJvbGxlci4KKyAqIEl0IHdhcyB0ZXN0ZWQgd2l0aCBhbiBFLUluayA4MDB4NjAwIFZpenBsZXggRVBEIG9uIGEgR3Vtc3RpeCBDb25uZXggYm9hcmQKKyAqIHVzaW5nIHRoZSBMeXJlIGludGVyZmFjZSBib2FyZC4KKyAqCisgKiBHZW5lcmFsIG5vdGVzOgorICogLSBVc2VyIG11c3Qgc2V0IG1ldHJvbm9tZWZiX2VuYWJsZT0xIHRvIGVuYWJsZSBpdC4KKyAqIC0gU2VlIERvY3VtZW50YXRpb24vZmIvbWV0cm9ub21lZmIudHh0IGZvciBob3cgbWV0cm9ub21lIHdvcmtzLgorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorCisjZGVmaW5lIERFQlVHIDEKKyNpZmRlZiBERUJVRworI2RlZmluZSBEUFJJTlRLKGYsIGEuLi4pIHByaW50ayhLRVJOX0RFQlVHICIlczogIiBmLCBfX2Z1bmNfXyAsICMjIGEpCisjZWxzZQorI2RlZmluZSBEUFJJTlRLKGYsIGEuLi4pCisjZW5kaWYKKworCisvKiBEaXNwbGF5IHNwZWNpZmljIGluZm9ybWF0aW9uICovCisjZGVmaW5lIERQWV9XIDgzMgorI2RlZmluZSBEUFlfSCA2MjIKKworc3RydWN0IG1ldHJvbWVtX2Rlc2MgeworCXUzMiBtRkRBRFIwOworCXUzMiBtRlNBRFIwOworCXUzMiBtRklEUjA7CisJdTMyIG1MRENNRDA7Cit9OworCitzdHJ1Y3QgbWV0cm9tZW1fY21kIHsKKwl1MTYgb3Bjb2RlOworCXUxNiBhcmdzWygoNjQtMikvMildOworCXUxNiBjc3VtOworfTsKKworc3RydWN0IG1ldHJvbm9tZWZiX3BhciB7CisJdW5zaWduZWQgY2hhciAqbWV0cm9tZW07CisJc3RydWN0IG1ldHJvbWVtX2Rlc2MgKm1ldHJvbWVtX2Rlc2M7CisJc3RydWN0IG1ldHJvbWVtX2NtZCAqbWV0cm9tZW1fY21kOworCXVuc2lnbmVkIGNoYXIgKm1ldHJvbWVtX3dmbTsKKwl1bnNpZ25lZCBjaGFyICptZXRyb21lbV9pbWc7CisJdTE2ICptZXRyb21lbV9pbWdfY3N1bTsKKwl1MTYgKmNzdW1fdGFibGU7CisJaW50IG1ldHJvbWVtc2l6ZTsKKwlkbWFfYWRkcl90IG1ldHJvbWVtX2RtYTsKKwlkbWFfYWRkcl90IG1ldHJvbWVtX2Rlc2NfZG1hOworCXN0cnVjdCBmYl9pbmZvICppbmZvOworCXdhaXRfcXVldWVfaGVhZF90IHdhaXRxOworCXU4IGZyYW1lX2NvdW50OworfTsKKworLyogZnJhbWUgZGlmZmVycyBmcm9tIGltYWdlLiBmcmFtZSBpbmNsdWRlcyBub24tdmlzaWJsZSBwaXhlbHMgKi8KK3N0cnVjdCBlcGRfZnJhbWUgeworCWludCBmdzsgLyogZnJhbWUgd2lkdGggKi8KKwlpbnQgZmg7IC8qIGZyYW1lIGhlaWdodCAqLworfTsKKworc3RhdGljIHN0cnVjdCBlcGRfZnJhbWUgZXBkX2ZyYW1lX3RhYmxlW10gPSB7CisJeworCS5mdyA9IDgzMiwKKwkuZmggPSA2MjIKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBmYl9maXhfc2NyZWVuaW5mbyBtZXRyb25vbWVmYl9maXggX19kZXZpbml0ZGF0YSA9IHsKKwkuaWQgPQkJIm1ldHJvbm9tZWZiIiwKKwkudHlwZSA9CQlGQl9UWVBFX1BBQ0tFRF9QSVhFTFMsCisJLnZpc3VhbCA9CUZCX1ZJU1VBTF9TVEFUSUNfUFNFVURPQ09MT1IsCisJLnhwYW5zdGVwID0JMCwKKwkueXBhbnN0ZXAgPQkwLAorCS55d3JhcHN0ZXAgPQkwLAorCS5saW5lX2xlbmd0aCA9CURQWV9XLAorCS5hY2NlbCA9CUZCX0FDQ0VMX05PTkUsCit9OworCitzdGF0aWMgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvIG1ldHJvbm9tZWZiX3ZhciBfX2RldmluaXRkYXRhID0geworCS54cmVzCQk9IERQWV9XLAorCS55cmVzCQk9IERQWV9ILAorCS54cmVzX3ZpcnR1YWwJPSBEUFlfVywKKwkueXJlc192aXJ0dWFsCT0gRFBZX0gsCisJLmJpdHNfcGVyX3BpeGVsCT0gOCwKKwkuZ3JheXNjYWxlCT0gMSwKKwkubm9uc3RkCQk9IDEsCisJLnJlZCA9CQl7IDQsIDMsIDAgfSwKKwkuZ3JlZW4gPQl7IDAsIDAsIDAgfSwKKwkuYmx1ZSA9CQl7IDAsIDAsIDAgfSwKKwkudHJhbnNwID0JeyAwLCAwLCAwIH0sCit9OworCitzdGF0aWMgdW5zaWduZWQgaW50IG1ldHJvbm9tZWZiX2VuYWJsZTsKKworc3RydWN0IHdhdmVmb3JtX2hkciB7CisJdTggc3R1ZmZbMzJdOworCisJdTggd210YVszXTsKKwl1OCBmdnNuOworCisJdTggbHV0czsKKwl1OCBtYzsKKwl1OCB0cmM7CisJdTggc3R1ZmYzOworCisJdTggZW5kYjsKKwl1OCBzd3RiOworCXU4IHN0dWZmMmFbMl07CisKKwl1OCBzdHVmZjJiWzNdOworCXU4IHdmbV9jczsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiBtYWluIG1ldHJvbm9tZWZiIGZ1bmN0aW9ucyAqLworc3RhdGljIHU4IGNhbGNfY2tzdW0oaW50IHN0YXJ0LCBpbnQgZW5kLCB1OCAqbWVtKQoreworCXU4IHRtcCA9IDA7CisJaW50IGk7CisKKwlmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKQorCQl0bXAgKz0gbWVtW2ldOworCisJcmV0dXJuIHRtcDsKK30KKworc3RhdGljIHUxNiBjYWxjX2ltZ19ja3N1bSh1MTYgKnN0YXJ0LCBpbnQgbGVuZ3RoKQoreworCXUxNiB0bXAgPSAwOworCisJd2hpbGUgKGxlbmd0aC0tKQorCQl0bXAgKz0gKnN0YXJ0Kys7CisKKwlyZXR1cm4gdG1wOworfQorCisvKiBoZXJlIHdlIGRlY29kZSB0aGUgaW5jb21pbmcgd2F2ZWZvcm0gZmlsZSBhbmQgcG9wdWxhdGUgbWV0cm9tZW0gKi8KKyNkZWZpbmUgRVhQX1dGT1JNX1NJWkUgNDcwMDEKK3N0YXRpYyBpbnQgbG9hZF93YXZlZm9ybSh1OCAqbWVtLCBzaXplX3Qgc2l6ZSwgdTggKm1ldHJvbWVtLCBpbnQgbSwgaW50IHQsCisJCQkJdTggKmZyYW1lX2NvdW50KQoreworCWludCB0dGE7CisJaW50IHdtdGE7CisJaW50IHRybiA9IDA7CisJaW50IGk7CisJdW5zaWduZWQgY2hhciB2OworCXU4IGNrc3VtOworCWludCBja3N1bV9pZHg7CisJaW50IHdmbV9pZHgsIG93Zm1faWR4OworCWludCBtZW1faWR4ID0gMDsKKwlzdHJ1Y3Qgd2F2ZWZvcm1faGRyICp3Zm1faGRyOworCisJaWYgKHNpemUgIT0gRVhQX1dGT1JNX1NJWkUpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJFcnJvcjogdW5leHBlY3RlZCBzaXplICVkICE9ICVkXG4iLCBzaXplLAorCQkJCQlFWFBfV0ZPUk1fU0laRSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXdmbV9oZHIgPSAoc3RydWN0IHdhdmVmb3JtX2hkciAqKSBtZW07CisKKwlpZiAod2ZtX2hkci0+ZnZzbiAhPSAxKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRXJyb3I6IGJhZCBmdnNuICV4XG4iLCB3Zm1faGRyLT5mdnNuKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmICh3Zm1faGRyLT5sdXRzICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJFcnJvcjogYmFkIGx1dHMgJXhcbiIsIHdmbV9oZHItPmx1dHMpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJY2tzdW0gPSBjYWxjX2Nrc3VtKDMyLCA0NywgbWVtKTsKKwlpZiAoY2tzdW0gIT0gd2ZtX2hkci0+d2ZtX2NzKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRXJyb3I6IGJhZCBja3N1bSAleCAhPSAleFxuIiwgY2tzdW0sCisJCQkJCXdmbV9oZHItPndmbV9jcyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwl3Zm1faGRyLT5tYyArPSAxOworCXdmbV9oZHItPnRyYyArPSAxOworCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKKwkJaWYgKCood2ZtX2hkci0+c3R1ZmYyYSArIGkpICE9IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiRXJyb3I6IHVuZXhwZWN0ZWQgdmFsdWUgaW4gcGFkZGluZ1xuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCS8qIGNhbGN1bGF0aW5nIHRybi4gdHJuIGlzIHNvbWV0aGluZyB1c2VkIHRvIGluZGV4IGludG8KKwl0aGUgd2F2ZWZvcm0uIHByZXN1bWFibHkgc2VsZWN0aW5nIHRoZSByaWdodCBvbmUgZm9yIHRoZQorCWRlc2lyZWQgdGVtcGVyYXR1cmUuIGl0IHdvcmtzIG91dCB0aGUgb2Zmc2V0IG9mIHRoZSBmaXJzdAorCXYgdGhhdCBleGNlZWRzIHRoZSBzcGVjaWZpZWQgdGVtcGVyYXR1cmUgKi8KKwlpZiAoKHNpemVvZigqd2ZtX2hkcikgKyB3Zm1faGRyLT50cmMpID4gc2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmb3IgKGkgPSBzaXplb2YoKndmbV9oZHIpOyBpIDw9IHNpemVvZigqd2ZtX2hkcikgKyB3Zm1faGRyLT50cmM7IGkrKykgeworCQlpZiAobWVtW2ldID4gdCkgeworCQkJdHJuID0gaSAtIHNpemVvZigqd2ZtX2hkcikgLSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBjaGVjayB0ZW1wZXJhdHVyZSByYW5nZSB0YWJsZSBjaGVja3N1bSAqLworCWNrc3VtX2lkeCA9IHNpemVvZigqd2ZtX2hkcikgKyB3Zm1faGRyLT50cmMgKyAxOworCWlmIChja3N1bV9pZHggPiBzaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlja3N1bSA9IGNhbGNfY2tzdW0oc2l6ZW9mKCp3Zm1faGRyKSwgY2tzdW1faWR4LCBtZW0pOworCWlmIChja3N1bSAhPSBtZW1bY2tzdW1faWR4XSkgeworCQlwcmludGsoS0VSTl9FUlIgIkVycm9yOiBiYWQgdGVtcGVyYXR1cmUgcmFuZ2UgdGFibGUgY2tzdW0iCisJCQkJIiAleCAhPSAleFxuIiwgY2tzdW0sIG1lbVtja3N1bV9pZHhdKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogY2hlY2sgd2F2ZWZvcm0gbW9kZSB0YWJsZSBhZGRyZXNzIGNoZWNrc3VtICovCisJd210YSA9IGxlMzJfdG9fY3B1KGdldF91bmFsaWduZWQoKF9fbGUzMiAqKSB3Zm1faGRyLT53bXRhKSk7CisJd210YSAmPSAweDAwRkZGRkZGOworCWNrc3VtX2lkeCA9IHdtdGEgKyBtKjQgKyAzOworCWlmIChja3N1bV9pZHggPiBzaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlja3N1bSA9IGNhbGNfY2tzdW0oY2tzdW1faWR4IC0gMywgY2tzdW1faWR4LCBtZW0pOworCWlmIChja3N1bSAhPSBtZW1bY2tzdW1faWR4XSkgeworCQlwcmludGsoS0VSTl9FUlIgIkVycm9yOiBiYWQgbW9kZSB0YWJsZSBhZGRyZXNzIGNrc3VtIgorCQkJCSIgJXggIT0gJXhcbiIsIGNrc3VtLCBtZW1bY2tzdW1faWR4XSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIGNoZWNrIHdhdmVmb3JtIHRlbXBlcmF0dXJlIHRhYmxlIGFkZHJlc3MgY2hlY2tzdW0gKi8KKwl0dGEgPSBsZTMyX3RvX2NwdShnZXRfdW5hbGlnbmVkKChpbnQgKikgKG1lbSArIHdtdGEgKyBtKjQpKSk7CisJdHRhICY9IDB4MDBGRkZGRkY7CisJY2tzdW1faWR4ID0gdHRhICsgdHJuKjQgKyAzOworCWlmIChja3N1bV9pZHggPiBzaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlja3N1bSA9IGNhbGNfY2tzdW0oY2tzdW1faWR4IC0gMywgY2tzdW1faWR4LCBtZW0pOworCWlmIChja3N1bSAhPSBtZW1bY2tzdW1faWR4XSkgeworCQlwcmludGsoS0VSTl9FUlIgIkVycm9yOiBiYWQgdGVtcGVyYXR1cmUgdGFibGUgYWRkcmVzcyBja3N1bSIKKwkJCSIgJXggIT0gJXhcbiIsIGNrc3VtLCBtZW1bY2tzdW1faWR4XSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIGhlcmUgd2UgZG8gdGhlIHJlYWwgd29yayBvZiBwdXR0aW5nIHRoZSB3YXZlZm9ybSBpbnRvIHRoZQorCW1ldHJvbWVtIGJ1ZmZlci4gdGhpcyBkb2VzIHJ1bmxlbmd0aCBkZWNvZGluZyBvZiB0aGUgd2F2ZWZvcm0gKi8KKwl3Zm1faWR4ID0gbGUzMl90b19jcHUoZ2V0X3VuYWxpZ25lZCgoX19sZTMyICopIChtZW0gKyB0dGEgKyB0cm4qNCkpKTsKKwl3Zm1faWR4ICY9IDB4MDBGRkZGRkY7CisJb3dmbV9pZHggPSB3Zm1faWR4OworCWlmICh3Zm1faWR4ID4gc2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJd2hpbGUgKHdmbV9pZHggPCBzaXplKSB7CisJCXVuc2lnbmVkIGNoYXIgcmw7CisJCXYgPSBtZW1bd2ZtX2lkeCsrXTsKKwkJaWYgKHYgPT0gd2ZtX2hkci0+c3d0YikgeworCQkJd2hpbGUgKCgodiA9IG1lbVt3Zm1faWR4KytdKSAhPSB3Zm1faGRyLT5zd3RiKSAmJgorCQkJCXdmbV9pZHggPCBzaXplKQorCQkJCW1ldHJvbWVtW21lbV9pZHgrK10gPSB2OworCisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICh2ID09IHdmbV9oZHItPmVuZGIpCisJCQlicmVhazsKKworCQlybCA9IG1lbVt3Zm1faWR4KytdOworCQlmb3IgKGkgPSAwOyBpIDw9IHJsOyBpKyspCisJCQltZXRyb21lbVttZW1faWR4KytdID0gdjsKKwl9CisKKwlja3N1bV9pZHggPSB3Zm1faWR4OworCWlmIChja3N1bV9pZHggPiBzaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlja3N1bSA9IGNhbGNfY2tzdW0ob3dmbV9pZHgsIGNrc3VtX2lkeCwgbWVtKTsKKwlpZiAoY2tzdW0gIT0gbWVtW2Nrc3VtX2lkeF0pIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJFcnJvcjogYmFkIHdhdmVmb3JtIGRhdGEgY2tzdW0iCisJCQkJIiAleCAhPSAleFxuIiwgY2tzdW0sIG1lbVtja3N1bV9pZHhdKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCSpmcmFtZV9jb3VudCA9IChtZW1faWR4LzY0KTsKKworCXJldHVybiAwOworfQorCisvKiByZWdpc3RlciBvZmZzZXRzIGZvciBncGlvIGNvbnRyb2wgKi8KKyNkZWZpbmUgTEVEX0dQSU9fUElOIDUxCisjZGVmaW5lIFNUREJZX0dQSU9fUElOIDQ4CisjZGVmaW5lIFJTVF9HUElPX1BJTiA0OQorI2RlZmluZSBSRFlfR1BJT19QSU4gMzIKKyNkZWZpbmUgRVJSX0dQSU9fUElOIDE3CisjZGVmaW5lIFBDQlBXUl9HUElPX1BJTiAxNgorCisjZGVmaW5lIEFGX1NFTF9HUElPX04gMHgzCisjZGVmaW5lIEdBRlIwX1VfT0ZGU0VUKHBpbikgKChwaW4gLSAxNikgKiAyKQorI2RlZmluZSBHQUZSMV9MX09GRlNFVChwaW4pICgocGluIC0gMzIpICogMikKKyNkZWZpbmUgR0FGUjFfVV9PRkZTRVQocGluKSAoKHBpbiAtIDQ4KSAqIDIpCisjZGVmaW5lIEdQRFIxX09GRlNFVChwaW4pIChwaW4gLSAzMikKKyNkZWZpbmUgR1BDUjFfT0ZGU0VUKHBpbikgKHBpbiAtIDMyKQorI2RlZmluZSBHUFNSMV9PRkZTRVQocGluKSAocGluIC0gMzIpCisjZGVmaW5lIEdQQ1IwX09GRlNFVChwaW4pIChwaW4pCisjZGVmaW5lIEdQU1IwX09GRlNFVChwaW4pIChwaW4pCisKK3N0YXRpYyB2b2lkIG1ldHJvbm9tZV9zZXRfZ3Bpb19vdXRwdXQoaW50IHBpbiwgaW50IHZhbCkKK3sKKwl1OCBpbmRleDsKKworCWluZGV4ID0gcGluID4+IDQ7CisKKwlzd2l0Y2ggKGluZGV4KSB7CisJY2FzZSAxOgorCQlpZiAodmFsKQorCQkJR1BTUjAgfD0gKDEgPDwgR1BTUjBfT0ZGU0VUKHBpbikpOworCQllbHNlCisJCQlHUENSMCB8PSAoMSA8PCBHUENSMF9PRkZTRVQocGluKSk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlpZiAodmFsKQorCQkJR1BTUjEgfD0gKDEgPDwgR1BTUjFfT0ZGU0VUKHBpbikpOworCQllbHNlCisJCQlHUENSMSB8PSAoMSA8PCBHUENSMV9PRkZTRVQocGluKSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAidW5pbXBsZW1lbnRlZFxuIik7CisJfQorfQorCitzdGF0aWMgdm9pZCBfX2RldmluaXQgbWV0cm9ub21lX2luaXRfZ3Bpb19waW4oaW50IHBpbiwgaW50IGRpcikKK3sKKwl1OCBpbmRleDsKKwkvKiBkaXIgMCBpcyBvdXRwdXQsIDEgaXMgaW5wdXQKKwktIGRvIDIgdGhpbmdzIGhlcmU6CisJLSBzZXQgZ3BpbyBhbHRlcm5hdGUgZnVuY3Rpb24gdG8gc3RhbmRhcmQgZ3BpbworCS0gc2V0IGdwaW8gZGlyZWN0aW9uIHRvIGlucHV0IG9yIG91dHB1dCAgKi8KKworCWluZGV4ID0gcGluID4+IDQ7CisJc3dpdGNoIChpbmRleCkgeworCWNhc2UgMToKKwkJR0FGUjBfVSAmPSB+KEFGX1NFTF9HUElPX04gPDwgR0FGUjBfVV9PRkZTRVQocGluKSk7CisKKwkJaWYgKGRpcikKKwkJCUdQRFIwICY9IH4oMSA8PCBwaW4pOworCQllbHNlCisJCQlHUERSMCB8PSAoMSA8PCBwaW4pOworCQlicmVhazsKKwljYXNlIDI6CisJCUdBRlIxX0wgJj0gfihBRl9TRUxfR1BJT19OIDw8IEdBRlIxX0xfT0ZGU0VUKHBpbikpOworCisJCWlmIChkaXIpCisJCQlHUERSMSAmPSB+KDEgPDwgR1BEUjFfT0ZGU0VUKHBpbikpOworCQllbHNlCisJCQlHUERSMSB8PSAoMSA8PCBHUERSMV9PRkZTRVQocGluKSk7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJR0FGUjFfVSAmPSB+KEFGX1NFTF9HUElPX04gPDwgR0FGUjFfVV9PRkZTRVQocGluKSk7CisKKwkJaWYgKGRpcikKKwkJCUdQRFIxICY9IH4oMSA8PCBHUERSMV9PRkZTRVQocGluKSk7CisJCWVsc2UKKwkJCUdQRFIxIHw9ICgxIDw8IEdQRFIxX09GRlNFVChwaW4pKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICJ1bmltcGxlbWVudGVkXG4iKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBtZXRyb25vbWVfaW5pdF9ncGlvX3JlZ3Modm9pZCkKK3sKKwltZXRyb25vbWVfaW5pdF9ncGlvX3BpbihMRURfR1BJT19QSU4sIDApOworCW1ldHJvbm9tZV9zZXRfZ3Bpb19vdXRwdXQoTEVEX0dQSU9fUElOLCAwKTsKKworCW1ldHJvbm9tZV9pbml0X2dwaW9fcGluKFNUREJZX0dQSU9fUElOLCAwKTsKKwltZXRyb25vbWVfc2V0X2dwaW9fb3V0cHV0KFNUREJZX0dQSU9fUElOLCAwKTsKKworCW1ldHJvbm9tZV9pbml0X2dwaW9fcGluKFJTVF9HUElPX1BJTiwgMCk7CisJbWV0cm9ub21lX3NldF9ncGlvX291dHB1dChSU1RfR1BJT19QSU4sIDApOworCisJbWV0cm9ub21lX2luaXRfZ3Bpb19waW4oUkRZX0dQSU9fUElOLCAxKTsKKworCW1ldHJvbm9tZV9pbml0X2dwaW9fcGluKEVSUl9HUElPX1BJTiwgMSk7CisKKwltZXRyb25vbWVfaW5pdF9ncGlvX3BpbihQQ0JQV1JfR1BJT19QSU4sIDApOworCW1ldHJvbm9tZV9zZXRfZ3Bpb19vdXRwdXQoUENCUFdSX0dQSU9fUElOLCAwKTsKK30KKworc3RhdGljIHZvaWQgbWV0cm9ub21lX2Rpc2FibGVfbGNkX2NvbnRyb2xsZXIoc3RydWN0IG1ldHJvbm9tZWZiX3BhciAqcGFyKQoreworCUxDU1IgPSAweGZmZmZmZmZmOwkvKiBDbGVhciBMQ0QgU3RhdHVzIFJlZ2lzdGVyICovCisJTENDUjAgfD0gTENDUjBfRElTOwkvKiBEaXNhYmxlIExDRCBDb250cm9sbGVyICovCisKKwkvKiB3ZSByZXNldCBhbmQganVzdCB3YWl0IGZvciB0aGluZ3MgdG8gc2V0dGxlICovCisJbXNsZWVwKDIwMCk7Cit9CisKK3N0YXRpYyB2b2lkIG1ldHJvbm9tZV9lbmFibGVfbGNkX2NvbnRyb2xsZXIoc3RydWN0IG1ldHJvbm9tZWZiX3BhciAqcGFyKQoreworCUxDU1IgPSAweGZmZmZmZmZmOworCUZEQURSMCA9IHBhci0+bWV0cm9tZW1fZGVzY19kbWE7CisJTENDUjAgfD0gTENDUjBfRU5COworfQorCitzdGF0aWMgdm9pZCBfX2RldmluaXQgbWV0cm9ub21lX2luaXRfbGNkY19yZWdzKHN0cnVjdCBtZXRyb25vbWVmYl9wYXIgKnBhcikKK3sKKwkvKiBoZXJlIHdlIGRvOgorCS0gZGlzYWJsZSB0aGUgbGNkIGNvbnRyb2xsZXIKKwktIHNldHVwIGxjZCBjb250cm9sIHJlZ2lzdGVycworCS0gc2V0dXAgZG1hIGRlc2NyaXB0b3IKKwktIHJlZW5hYmxlIGxjZCBjb250cm9sbGVyCisJKi8KKworCS8qIGRpc2FibGUgdGhlIGxjZCBjb250cm9sbGVyICovCisJbWV0cm9ub21lX2Rpc2FibGVfbGNkX2NvbnRyb2xsZXIocGFyKTsKKworCS8qIHNldHVwIGxjZCBjb250cm9sIHJlZ2lzdGVycyAqLworCUxDQ1IwID0gTENDUjBfTERNIHwgTENDUjBfU0ZNIHwgTENDUjBfSVVNIHwgTENDUjBfRUZNIHwgTENDUjBfUEFTCisJCXwgTENDUjBfUURNIHwgTENDUjBfQk0gfCBMQ0NSMF9PVU07CisKKwlMQ0NSMSA9IChlcGRfZnJhbWVfdGFibGVbMF0uZncvMiAtIDEpIC8qIHBpeGVscyBwZXIgbGluZSAqLworCQl8ICgyNyA8PCAxMCkgLyogaHN5bmMgcHVsc2Ugd2lkdGggLSAxICovCisJCXwgKDMzIDw8IDE2KSAvKiBlb2wgcGl4ZWwgY291bnQgKi8KKwkJfCAoMzMgPDwgMjQpOyAvKiBib2wgcGl4ZWwgY291bnQgKi8KKworCUxDQ1IyID0gKGVwZF9mcmFtZV90YWJsZVswXS5maCAtIDEpIC8qIGxpbmVzIHBlciBwYW5lbCAqLworCQl8ICgyNCA8PCAxMCkgLyogdnN5bmMgcHVsc2Ugd2lkdGggLSAxICovCisJCXwgKDIgPDwgMTYpIC8qIGVvZiBwaXhlbCBjb3VudCAqLworCQl8ICgwIDw8IDI0KTsgLyogYm9mIHBpeGVsIGNvdW50ICovCisKKwlMQ0NSMyA9IDIgLyogcGl4ZWwgY2xvY2sgZGl2aXNvciAqLworCQl8ICgyNCA8PCA4KSAvKiBBQyBCaWFzIHBpbiBmcmVxICovCisJCXwgTENDUjNfMTZCUFAgLyogQlBQICovCisJCXwgTENDUjNfUENQOyAgLyogUENQIGZhbGxpbmcgZWRnZSAqLworCisJLyogc2V0dXAgZG1hIGRlc2NyaXB0b3IgKi8KKwlwYXItPm1ldHJvbWVtX2Rlc2MtPm1GREFEUjAgPSBwYXItPm1ldHJvbWVtX2Rlc2NfZG1hOworCXBhci0+bWV0cm9tZW1fZGVzYy0+bUZTQURSMCA9IHBhci0+bWV0cm9tZW1fZG1hOworCXBhci0+bWV0cm9tZW1fZGVzYy0+bUZJRFIwID0gMDsKKwlwYXItPm1ldHJvbWVtX2Rlc2MtPm1MRENNRDAgPSBlcGRfZnJhbWVfdGFibGVbMF0uZncKKwkJCQkJKiBlcGRfZnJhbWVfdGFibGVbMF0uZmg7CisJLyogcmVlbmFibGUgbGNkIGNvbnRyb2xsZXIgKi8KKwltZXRyb25vbWVfZW5hYmxlX2xjZF9jb250cm9sbGVyKHBhcik7Cit9CisKK3N0YXRpYyBpbnQgbWV0cm9ub21lX2Rpc3BsYXlfY21kKHN0cnVjdCBtZXRyb25vbWVmYl9wYXIgKnBhcikKK3sKKwlpbnQgaTsKKwl1MTYgY3M7CisJdTE2IG9wY29kZTsKKwlzdGF0aWMgdTggYm9yZGVydmFsOworCXU4ICpwdHI7CisKKwkvKiBzZXR1cCBkaXNwbGF5IGNvbW1hbmQKKwl3ZSBjYW4ndCBpbW1lZGlhdGVseSBzZXQgdGhlIG9wY29kZSBzaW5jZSB0aGUgY29udHJvbGxlcgorCXdpbGwgdHJ5IHBhcnNlIHRoZSBjb21tYW5kIGJlZm9yZSB3ZSd2ZSBzZXQgaXQgYWxsIHVwCisJc28gd2UganVzdCBzZXQgY3MgaGVyZSBhbmQgc2V0IHRoZSBvcGNvZGUgYXQgdGhlIGVuZCAqLworCisJcHRyID0gcGFyLT5tZXRyb21lbTsKKworCWlmIChwYXItPm1ldHJvbWVtX2NtZC0+b3Bjb2RlID09IDB4Q0M0MCkKKwkJb3Bjb2RlID0gY3MgPSAweENDNDE7CisJZWxzZQorCQlvcGNvZGUgPSBjcyA9IDB4Q0M0MDsKKworCS8qIHNldCB0aGUgYXJncyAoIDIgYnl0ZXMgKSBmb3IgZGlzcGxheSAqLworCWkgPSAwOworCXBhci0+bWV0cm9tZW1fY21kLT5hcmdzW2ldID0gCTEgPDwgMyAvKiBib3JkZXIgdXBkYXRlICovCisJCQkJCXwgKChib3JkZXJ2YWwrKyAlIDQpICYgMHgwRikgPDwgNAorCQkJCQl8IChwYXItPmZyYW1lX2NvdW50IC0gMSkgPDwgODsKKwljcyArPSBwYXItPm1ldHJvbWVtX2NtZC0+YXJnc1tpKytdOworCisJLyogdGhlIHJlc3QgYXJlIDAgKi8KKwltZW1zZXQoKHU4ICopIChwYXItPm1ldHJvbWVtX2NtZC0+YXJncyArIGkpLCAwLCAoMzItaSkqMik7CisKKwlwYXItPm1ldHJvbWVtX2NtZC0+Y3N1bSA9IGNzOworCXBhci0+bWV0cm9tZW1fY21kLT5vcGNvZGUgPSBvcGNvZGU7IC8qIGRpc3BsYXkgY21kICovCisKKwlpID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQocGFyLT53YWl0cSwgKEdQTFIxICYgMHgwMSksIEhaKTsKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgbWV0cm9ub21lX3Bvd2VydXBfY21kKHN0cnVjdCBtZXRyb25vbWVmYl9wYXIgKnBhcikKK3sKKwlpbnQgaTsKKwl1MTYgY3M7CisKKwkvKiBzZXR1cCBwb3dlciB1cCBjb21tYW5kICovCisJcGFyLT5tZXRyb21lbV9jbWQtPm9wY29kZSA9IDB4MTIzNDsgLyogcHdyIHVwIHBzZXVkbyBjbWQgKi8KKwljcyA9IHBhci0+bWV0cm9tZW1fY21kLT5vcGNvZGU7CisKKwkvKiBzZXQgcHdyMSwyLDMgdG8gMTAyNCAqLworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJcGFyLT5tZXRyb21lbV9jbWQtPmFyZ3NbaV0gPSAxMDI0OworCQljcyArPSBwYXItPm1ldHJvbWVtX2NtZC0+YXJnc1tpXTsKKwl9CisKKwkvKiB0aGUgcmVzdCBhcmUgMCAqLworCW1lbXNldCgodTggKikgKHBhci0+bWV0cm9tZW1fY21kLT5hcmdzICsgaSksIDAsICgzMi1pKSoyKTsKKworCXBhci0+bWV0cm9tZW1fY21kLT5jc3VtID0gY3M7CisKKwltc2xlZXAoMSk7CisJbWV0cm9ub21lX3NldF9ncGlvX291dHB1dChSU1RfR1BJT19QSU4sIDEpOworCisJbXNsZWVwKDEpOworCW1ldHJvbm9tZV9zZXRfZ3Bpb19vdXRwdXQoU1REQllfR1BJT19QSU4sIDEpOworCisJaSA9IHdhaXRfZXZlbnRfdGltZW91dChwYXItPndhaXRxLCAoR1BMUjEgJiAweDAxKSwgSFopOworCXJldHVybiBpOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBtZXRyb25vbWVfY29uZmlnX2NtZChzdHJ1Y3QgbWV0cm9ub21lZmJfcGFyICpwYXIpCit7CisJaW50IGk7CisJdTE2IGNzOworCisJLyogc2V0dXAgY29uZmlnIGNvbW1hbmQKKwl3ZSBjYW4ndCBpbW1lZGlhdGVseSBzZXQgdGhlIG9wY29kZSBzaW5jZSB0aGUgY29udHJvbGxlcgorCXdpbGwgdHJ5IHBhcnNlIHRoZSBjb21tYW5kIGJlZm9yZSB3ZSd2ZSBzZXQgaXQgYWxsIHVwCisJc28gd2UganVzdCBzZXQgY3MgaGVyZSBhbmQgc2V0IHRoZSBvcGNvZGUgYXQgdGhlIGVuZCAqLworCisJY3MgPSAweENDMTA7CisKKwkvKiBzZXQgdGhlIDEyIGFyZ3MgKCA4IGJ5dGVzICkgZm9yIGNvbmZpZy4gc2VlIHNwZWMgZm9yIG1lYW5pbmdzICovCisJaSA9IDA7CisJcGFyLT5tZXRyb21lbV9jbWQtPmFyZ3NbaV0gPSAJMTUgLyogc2RsZXcgKi8KKwkJCQkJfCAyIDw8IDggLyogc2Rvc3ogKi8KKwkJCQkJfCAwIDw8IDExIC8qIHNkb3IgKi8KKwkJCQkJfCAwIDw8IDEyIC8qIHNkY2VzICovCisJCQkJCXwgMCA8PCAxNTsgLyogc2RjZXIgKi8KKwljcyArPSBwYXItPm1ldHJvbWVtX2NtZC0+YXJnc1tpKytdOworCisJcGFyLT5tZXRyb21lbV9jbWQtPmFyZ3NbaV0gPSAJNDIgLyogZ2RzcGwgKi8KKwkJCQkJfCAxIDw8IDggLyogZ2RyMSAqLworCQkJCQl8IDEgPDwgOSAvKiBzZHNociAqLworCQkJCQl8IDAgPDwgMTU7IC8qIGdkc3BwICovCisJY3MgKz0gcGFyLT5tZXRyb21lbV9jbWQtPmFyZ3NbaSsrXTsKKworCXBhci0+bWV0cm9tZW1fY21kLT5hcmdzW2ldID0gCTE4IC8qIGdkc3B3ICovCisJCQkJCXwgMCA8PCAxNTsgLyogZGlzcGMgKi8KKwljcyArPSBwYXItPm1ldHJvbWVtX2NtZC0+YXJnc1tpKytdOworCisJcGFyLT5tZXRyb21lbV9jbWQtPmFyZ3NbaV0gPSAJNTk5IC8qIHZkbGMgKi8KKwkJCQkJfCAwIDw8IDExIC8qIGRzaSAqLworCQkJCQl8IDAgPDwgMTI7IC8qIGRzaWMgKi8KKwljcyArPSBwYXItPm1ldHJvbWVtX2NtZC0+YXJnc1tpKytdOworCisJLyogdGhlIHJlc3QgYXJlIDAgKi8KKwltZW1zZXQoKHU4ICopIChwYXItPm1ldHJvbWVtX2NtZC0+YXJncyArIGkpLCAwLCAoMzItaSkqMik7CisKKwlwYXItPm1ldHJvbWVtX2NtZC0+Y3N1bSA9IGNzOworCXBhci0+bWV0cm9tZW1fY21kLT5vcGNvZGUgPSAweENDMTA7IC8qIGNvbmZpZyBjbWQgKi8KKworCWkgPSB3YWl0X2V2ZW50X3RpbWVvdXQocGFyLT53YWl0cSwgKEdQTFIxICYgMHgwMSksIEhaKTsKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgbWV0cm9ub21lX2luaXRfY21kKHN0cnVjdCBtZXRyb25vbWVmYl9wYXIgKnBhcikKK3sKKwlpbnQgaTsKKwl1MTYgY3M7CisKKwkvKiBzZXR1cCBpbml0IGNvbW1hbmQKKwl3ZSBjYW4ndCBpbW1lZGlhdGVseSBzZXQgdGhlIG9wY29kZSBzaW5jZSB0aGUgY29udHJvbGxlcgorCXdpbGwgdHJ5IHBhcnNlIHRoZSBjb21tYW5kIGJlZm9yZSB3ZSd2ZSBzZXQgaXQgYWxsIHVwCisJc28gd2UganVzdCBzZXQgY3MgaGVyZSBhbmQgc2V0IHRoZSBvcGNvZGUgYXQgdGhlIGVuZCAqLworCisJY3MgPSAweENDMjA7CisKKwkvKiBzZXQgdGhlIGFyZ3MgKCAyIGJ5dGVzICkgZm9yIGluaXQgKi8KKwlpID0gMDsKKwlwYXItPm1ldHJvbWVtX2NtZC0+YXJnc1tpXSA9IDA7CisJY3MgKz0gcGFyLT5tZXRyb21lbV9jbWQtPmFyZ3NbaSsrXTsKKworCS8qIHRoZSByZXN0IGFyZSAwICovCisJbWVtc2V0KCh1OCAqKSAocGFyLT5tZXRyb21lbV9jbWQtPmFyZ3MgKyBpKSwgMCwgKDMyLWkpKjIpOworCisJcGFyLT5tZXRyb21lbV9jbWQtPmNzdW0gPSBjczsKKwlwYXItPm1ldHJvbWVtX2NtZC0+b3Bjb2RlID0gMHhDQzIwOyAvKiBpbml0IGNtZCAqLworCisJaSA9IHdhaXRfZXZlbnRfdGltZW91dChwYXItPndhaXRxLCAoR1BMUjEgJiAweDAxKSwgSFopOworCXJldHVybiBpOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBtZXRyb25vbWVfaW5pdF9yZWdzKHN0cnVjdCBtZXRyb25vbWVmYl9wYXIgKnBhcikKK3sKKwlpbnQgcmVzOworCisJbWV0cm9ub21lX2luaXRfZ3Bpb19yZWdzKCk7CisJbWV0cm9ub21lX2luaXRfbGNkY19yZWdzKHBhcik7CisKKwlyZXMgPSBtZXRyb25vbWVfcG93ZXJ1cF9jbWQocGFyKTsKKwlpZiAocmVzKQorCQlyZXR1cm4gcmVzOworCisJcmVzID0gbWV0cm9ub21lX2NvbmZpZ19jbWQocGFyKTsKKwlpZiAocmVzKQorCQlyZXR1cm4gcmVzOworCisJcmVzID0gbWV0cm9ub21lX2luaXRfY21kKHBhcik7CisJaWYgKHJlcykKKwkJcmV0dXJuIHJlczsKKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyB2b2lkIG1ldHJvbm9tZWZiX2RweV91cGRhdGUoc3RydWN0IG1ldHJvbm9tZWZiX3BhciAqcGFyKQoreworCXUxNiBja3N1bTsKKwl1bnNpZ25lZCBjaGFyICpidWYgPSAodW5zaWduZWQgY2hhciBfX2ZvcmNlICopcGFyLT5pbmZvLT5zY3JlZW5fYmFzZTsKKworCS8qIGNvcHkgZnJvbSB2bSB0byBtZXRyb21lbSAqLworCW1lbWNweShwYXItPm1ldHJvbWVtX2ltZywgYnVmLCBEUFlfVypEUFlfSCk7CisKKwlja3N1bSA9IGNhbGNfaW1nX2Nrc3VtKCh1MTYgKikgcGFyLT5tZXRyb21lbV9pbWcsCisJCQkJKGVwZF9mcmFtZV90YWJsZVswXS5mdyAqIERQWV9IKS8yKTsKKwkqKCh1MTYgKikgKHBhci0+bWV0cm9tZW1faW1nKSArCisJCQkoZXBkX2ZyYW1lX3RhYmxlWzBdLmZ3ICogRFBZX0gpLzIpID0gY2tzdW07CisJbWV0cm9ub21lX2Rpc3BsYXlfY21kKHBhcik7Cit9CisKK3N0YXRpYyB1MTYgbWV0cm9ub21lZmJfZHB5X3VwZGF0ZV9wYWdlKHN0cnVjdCBtZXRyb25vbWVmYl9wYXIgKnBhciwgaW50IGluZGV4KQoreworCWludCBpOworCXUxNiBjc3VtID0gMDsKKwl1MTYgKmJ1ZiA9ICh1MTYgX19mb3JjZSAqKSAocGFyLT5pbmZvLT5zY3JlZW5fYmFzZSArIGluZGV4KTsKKwl1MTYgKmltZyA9ICh1MTYgKikgKHBhci0+bWV0cm9tZW1faW1nICsgaW5kZXgpOworCisJLyogc3dpenpsZSBmcm9tIHZtIHRvIG1ldHJvbWVtIGFuZCByZWNhbGMgY2tzdW0gYXQgdGhlIHNhbWUgdGltZSovCisJZm9yIChpID0gMDsgaSA8IFBBR0VfU0laRS8yOyBpKyspIHsKKwkJKihpbWcgKyBpKSA9IChidWZbaV0gPDwgNSkgJiAweEUwRTA7CisJCWNzdW0gKz0gKihpbWcgKyBpKTsKKwl9CisJcmV0dXJuIGNzdW07Cit9CisKKy8qIHRoaXMgaXMgY2FsbGVkIGJhY2sgZnJvbSB0aGUgZGVmZXJyZWQgaW8gd29ya3F1ZXVlICovCitzdGF0aWMgdm9pZCBtZXRyb25vbWVmYl9kcHlfZGVmZXJyZWRfaW8oc3RydWN0IGZiX2luZm8gKmluZm8sCisJCQkJc3RydWN0IGxpc3RfaGVhZCAqcGFnZWxpc3QpCit7CisJdTE2IGNrc3VtOworCXN0cnVjdCBwYWdlICpjdXI7CisJc3RydWN0IGZiX2RlZmVycmVkX2lvICpmYmRlZmlvID0gaW5mby0+ZmJkZWZpbzsKKwlzdHJ1Y3QgbWV0cm9ub21lZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7CisKKwkvKiB3YWxrIHRoZSB3cml0dGVuIHBhZ2UgbGlzdCBhbmQgc3dpenpsZSB0aGUgZGF0YSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoY3VyLCAmZmJkZWZpby0+cGFnZWxpc3QsIGxydSkgeworCQlja3N1bSA9IG1ldHJvbm9tZWZiX2RweV91cGRhdGVfcGFnZShwYXIsCisJCQkJCShjdXItPmluZGV4IDw8IFBBR0VfU0hJRlQpKTsKKwkJcGFyLT5tZXRyb21lbV9pbWdfY3N1bSAtPSBwYXItPmNzdW1fdGFibGVbY3VyLT5pbmRleF07CisJCXBhci0+Y3N1bV90YWJsZVtjdXItPmluZGV4XSA9IGNrc3VtOworCQlwYXItPm1ldHJvbWVtX2ltZ19jc3VtICs9IGNrc3VtOworCX0KKworCW1ldHJvbm9tZV9kaXNwbGF5X2NtZChwYXIpOworfQorCitzdGF0aWMgdm9pZCBtZXRyb25vbWVmYl9maWxscmVjdChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKKwkJCQkgICBjb25zdCBzdHJ1Y3QgZmJfZmlsbHJlY3QgKnJlY3QpCit7CisJc3RydWN0IG1ldHJvbm9tZWZiX3BhciAqcGFyID0gaW5mby0+cGFyOworCisJY2ZiX2ZpbGxyZWN0KGluZm8sIHJlY3QpOworCW1ldHJvbm9tZWZiX2RweV91cGRhdGUocGFyKTsKK30KKworc3RhdGljIHZvaWQgbWV0cm9ub21lZmJfY29weWFyZWEoc3RydWN0IGZiX2luZm8gKmluZm8sCisJCQkJICAgY29uc3Qgc3RydWN0IGZiX2NvcHlhcmVhICphcmVhKQoreworCXN0cnVjdCBtZXRyb25vbWVmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKKworCWNmYl9jb3B5YXJlYShpbmZvLCBhcmVhKTsKKwltZXRyb25vbWVmYl9kcHlfdXBkYXRlKHBhcik7Cit9CisKK3N0YXRpYyB2b2lkIG1ldHJvbm9tZWZiX2ltYWdlYmxpdChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKKwkJCQljb25zdCBzdHJ1Y3QgZmJfaW1hZ2UgKmltYWdlKQoreworCXN0cnVjdCBtZXRyb25vbWVmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKKworCWNmYl9pbWFnZWJsaXQoaW5mbywgaW1hZ2UpOworCW1ldHJvbm9tZWZiX2RweV91cGRhdGUocGFyKTsKK30KKworLyoKKyAqIHRoaXMgaXMgdGhlIHNsb3cgcGF0aCBmcm9tIHVzZXJzcGFjZS4gdGhleSBjYW4gc2VlayBhbmQgd3JpdGUgdG8KKyAqIHRoZSBmYi4gaXQgaXMgYmFzZWQgb24gZmJfc3lzX3dyaXRlCisgKi8KK3N0YXRpYyBzc2l6ZV90IG1ldHJvbm9tZWZiX3dyaXRlKHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBtZXRyb25vbWVmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKKwl1bnNpZ25lZCBsb25nIHAgPSAqcHBvczsKKwl2b2lkICpkc3Q7CisJaW50IGVyciA9IDA7CisJdW5zaWduZWQgbG9uZyB0b3RhbF9zaXplOworCisJaWYgKGluZm8tPnN0YXRlICE9IEZCSU5GT19TVEFURV9SVU5OSU5HKQorCQlyZXR1cm4gLUVQRVJNOworCisJdG90YWxfc2l6ZSA9IGluZm8tPmZpeC5zbWVtX2xlbjsKKworCWlmIChwID4gdG90YWxfc2l6ZSkKKwkJcmV0dXJuIC1FRkJJRzsKKworCWlmIChjb3VudCA+IHRvdGFsX3NpemUpIHsKKwkJZXJyID0gLUVGQklHOworCQljb3VudCA9IHRvdGFsX3NpemU7CisJfQorCisJaWYgKGNvdW50ICsgcCA+IHRvdGFsX3NpemUpIHsKKwkJaWYgKCFlcnIpCisJCQllcnIgPSAtRU5PU1BDOworCisJCWNvdW50ID0gdG90YWxfc2l6ZSAtIHA7CisJfQorCisJZHN0ID0gKHZvaWQgX19mb3JjZSAqKSAoaW5mby0+c2NyZWVuX2Jhc2UgKyBwKTsKKworCWlmIChjb3B5X2Zyb21fdXNlcihkc3QsIGJ1ZiwgY291bnQpKQorCQllcnIgPSAtRUZBVUxUOworCisJaWYgICghZXJyKQorCQkqcHBvcyArPSBjb3VudDsKKworCW1ldHJvbm9tZWZiX2RweV91cGRhdGUocGFyKTsKKworCXJldHVybiAoZXJyKSA/IGVyciA6IGNvdW50OworfQorCitzdGF0aWMgc3RydWN0IGZiX29wcyBtZXRyb25vbWVmYl9vcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5mYl93cml0ZQk9IG1ldHJvbm9tZWZiX3dyaXRlLAorCS5mYl9maWxscmVjdAk9IG1ldHJvbm9tZWZiX2ZpbGxyZWN0LAorCS5mYl9jb3B5YXJlYQk9IG1ldHJvbm9tZWZiX2NvcHlhcmVhLAorCS5mYl9pbWFnZWJsaXQJPSBtZXRyb25vbWVmYl9pbWFnZWJsaXQsCit9OworCitzdGF0aWMgc3RydWN0IGZiX2RlZmVycmVkX2lvIG1ldHJvbm9tZWZiX2RlZmlvID0geworCS5kZWxheQkJPSBIWiwKKwkuZGVmZXJyZWRfaW8JPSBtZXRyb25vbWVmYl9kcHlfZGVmZXJyZWRfaW8sCit9OworCitzdGF0aWMgaXJxcmV0dXJuX3QgbWV0cm9ub21lX2hhbmRsZV9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gZGV2X2lkOworCXN0cnVjdCBtZXRyb25vbWVmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKKworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcGFyLT53YWl0cSk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBtZXRyb25vbWVmYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGZiX2luZm8gKmluZm87CisJaW50IHJldHZhbCA9IC1FTk9NRU07CisJaW50IHZpZGVvbWVtb3J5c2l6ZTsKKwl1bnNpZ25lZCBjaGFyICp2aWRlb21lbW9yeTsKKwlzdHJ1Y3QgbWV0cm9ub21lZmJfcGFyICpwYXI7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmd19lbnRyeTsKKwlpbnQgY21kX3NpemUsIHdmbV9zaXplLCBpbWdfc2l6ZSwgcGFkZGluZ19zaXplLCB0b3RhbHNpemU7CisJaW50IGk7CisKKwkvKiB3ZSBoYXZlIHR3byBibG9ja3Mgb2YgbWVtb3J5LgorCWluZm8tPnNjcmVlbl9iYXNlIHdoaWNoIGlzIHZtLCBhbmQgaXMgdGhlIGZiIHVzZWQgYnkgYXBwcy4KKwlwYXItPm1ldHJvbWVtIHdoaWNoIGlzIHBoeXNpY2FsbHkgY29udGlndW91cyBtZW1vcnkgYW5kCisJY29udGFpbnMgdGhlIGRpc3BsYXkgY29udHJvbGxlciBjb21tYW5kcywgd2F2ZWZvcm0sCisJcHJvY2Vzc2VkIGltYWdlIGRhdGEgYW5kIHBhZGRpbmcuIHRoaXMgaXMgdGhlIGRhdGEgcHVsbGVkCisJYnkgdGhlIHB4YTI1NSdzIExDRCBjb250cm9sbGVyIGFuZCBwdXNoZWQgdG8gTWV0cm9ub21lICovCisKKwl2aWRlb21lbW9yeXNpemUgPSAoRFBZX1cqRFBZX0gpOworCXZpZGVvbWVtb3J5ID0gdm1hbGxvYyh2aWRlb21lbW9yeXNpemUpOworCWlmICghdmlkZW9tZW1vcnkpCisJCXJldHVybiByZXR2YWw7CisKKwltZW1zZXQodmlkZW9tZW1vcnksIDAsIHZpZGVvbWVtb3J5c2l6ZSk7CisKKwlpbmZvID0gZnJhbWVidWZmZXJfYWxsb2Moc2l6ZW9mKHN0cnVjdCBtZXRyb25vbWVmYl9wYXIpLCAmZGV2LT5kZXYpOworCWlmICghaW5mbykKKwkJZ290byBlcnJfdmZyZWU7CisKKwlpbmZvLT5zY3JlZW5fYmFzZSA9IChjaGFyIF9faW9tZW0gKikgdmlkZW9tZW1vcnk7CisJaW5mby0+ZmJvcHMgPSAmbWV0cm9ub21lZmJfb3BzOworCisJaW5mby0+dmFyID0gbWV0cm9ub21lZmJfdmFyOworCWluZm8tPmZpeCA9IG1ldHJvbm9tZWZiX2ZpeDsKKwlpbmZvLT5maXguc21lbV9sZW4gPSB2aWRlb21lbW9yeXNpemU7CisJcGFyID0gaW5mby0+cGFyOworCXBhci0+aW5mbyA9IGluZm87CisJaW5pdF93YWl0cXVldWVfaGVhZCgmcGFyLT53YWl0cSk7CisKKwkvKiB0aGlzIHRhYmxlIGNhY2hlcyBwZXIgcGFnZSBjc3VtIHZhbHVlcy4gKi8KKwlwYXItPmNzdW1fdGFibGUgPSB2bWFsbG9jKHZpZGVvbWVtb3J5c2l6ZS9QQUdFX1NJWkUpOworCWlmICghcGFyLT5jc3VtX3RhYmxlKQorCQlnb3RvIGVycl9jc3VtX3RhYmxlOworCisJLyogdGhlIG1ldHJvbWVtIGJ1ZmZlciBpcyBkaXZpZGVkIGFzIGZvbGxvd3M6CisJY29tbWFuZCB8IENSQyB8IHBhZGRpbmcKKwkxNmtiIHdhdmVmb3JtIGRhdGEgfCBDUkMgfCBwYWRkaW5nCisJaW1hZ2UgZGF0YSB8IENSQworCWFuZCBhbiBleHRyYSAyNTYgYnl0ZXMgZm9yIGRtYSBkZXNjcmlwdG9ycworCWVnOiBJVz04MzIgSUg9NjIyIFdTPTEyOAorCSovCisKKwljbWRfc2l6ZSA9IDEgKiBlcGRfZnJhbWVfdGFibGVbMF0uZnc7CisJd2ZtX3NpemUgPSAoKDE2KjEwMjQgKyAyICsgZXBkX2ZyYW1lX3RhYmxlWzBdLmZ3IC0gMSkKKwkJCS8gZXBkX2ZyYW1lX3RhYmxlWzBdLmZ3KSAqIGVwZF9mcmFtZV90YWJsZVswXS5mdzsKKwlpbWdfc2l6ZSA9IGVwZF9mcmFtZV90YWJsZVswXS5maCAqIGVwZF9mcmFtZV90YWJsZVswXS5mdzsKKwlwYWRkaW5nX3NpemUgPSA0ICogZXBkX2ZyYW1lX3RhYmxlWzBdLmZ3OworCXRvdGFsc2l6ZSA9IGNtZF9zaXplICsgd2ZtX3NpemUgKyBpbWdfc2l6ZSArIHBhZGRpbmdfc2l6ZTsKKwlwYXItPm1ldHJvbWVtc2l6ZSA9IFBBR0VfQUxJR04odG90YWxzaXplICsgMjU2KTsKKwlEUFJJTlRLKCJkZXNpcmVkIG1lbW9yeSBzaXplID0gJWRcbiIsIHBhci0+bWV0cm9tZW1zaXplKTsKKwlkZXYtPmRldi5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmZ1bGw7CisJcGFyLT5tZXRyb21lbSA9IGRtYV9hbGxvY193cml0ZWNvbWJpbmUoJmRldi0+ZGV2LCBwYXItPm1ldHJvbWVtc2l6ZSwKKwkJCQkJCSZwYXItPm1ldHJvbWVtX2RtYSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwYXItPm1ldHJvbWVtKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJIm1ldHJvbm9tZWZiOiB1bmFibGUgdG8gYWxsb2NhdGUgZG1hIGJ1ZmZlclxuIik7CisJCWdvdG8gZXJyX3ZmcmVlOworCX0KKworCWluZm8tPmZpeC5zbWVtX3N0YXJ0ID0gcGFyLT5tZXRyb21lbV9kbWE7CisJcGFyLT5tZXRyb21lbV9jbWQgPSAoc3RydWN0IG1ldHJvbWVtX2NtZCAqKSBwYXItPm1ldHJvbWVtOworCXBhci0+bWV0cm9tZW1fd2ZtID0gcGFyLT5tZXRyb21lbSArIGNtZF9zaXplOworCXBhci0+bWV0cm9tZW1faW1nID0gcGFyLT5tZXRyb21lbSArIGNtZF9zaXplICsgd2ZtX3NpemU7CisJcGFyLT5tZXRyb21lbV9pbWdfY3N1bSA9ICh1MTYgKikgKHBhci0+bWV0cm9tZW1faW1nICsKKwkJCQkJKGVwZF9mcmFtZV90YWJsZVswXS5mdyAqIERQWV9IKSk7CisJRFBSSU5USygiaW1nIG9mZnNldD0weCV4XG4iLCBjbWRfc2l6ZSArIHdmbV9zaXplKTsKKwlwYXItPm1ldHJvbWVtX2Rlc2MgPSAoc3RydWN0IG1ldHJvbWVtX2Rlc2MgKikgKHBhci0+bWV0cm9tZW0gKyBjbWRfc2l6ZQorCQkJCQkrIHdmbV9zaXplICsgaW1nX3NpemUgKyBwYWRkaW5nX3NpemUpOworCXBhci0+bWV0cm9tZW1fZGVzY19kbWEgPSBwYXItPm1ldHJvbWVtX2RtYSArIGNtZF9zaXplICsgd2ZtX3NpemUKKwkJCQkgKyBpbWdfc2l6ZSArIHBhZGRpbmdfc2l6ZTsKKworCS8qIGxvYWQgdGhlIHdhdmVmb3JtIGluLiBhc3N1bWUgbW9kZSAzLCB0ZW1wIDMxIGZvciBub3cgKi8KKwkvKiAJYSkgcmVxdWVzdCB0aGUgd2F2ZWZvcm0gZmlsZSBmcm9tIHVzZXJzcGFjZQorCQliKSBwcm9jZXNzIHdhdmVmb3JtIGFuZCBkZWNvZGUgaW50byBtZXRyb21lbSAqLworCisJcmV0dmFsID0gcmVxdWVzdF9maXJtd2FyZSgmZndfZW50cnksICJ3YXZlZm9ybS53YmYiLCAmZGV2LT5kZXYpOworCWlmIChyZXR2YWwgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAibWV0cm9ub21lZmI6IGNvdWxkbid0IGdldCB3YXZlZm9ybVxuIik7CisJCWdvdG8gZXJyX2RtYV9mcmVlOworCX0KKworCXJldHZhbCA9IGxvYWRfd2F2ZWZvcm0oKHU4ICopIGZ3X2VudHJ5LT5kYXRhLCBmd19lbnRyeS0+c2l6ZSwKKwkJCQlwYXItPm1ldHJvbWVtX3dmbSwgMywgMzEsICZwYXItPmZyYW1lX2NvdW50KTsKKwlpZiAocmV0dmFsIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIm1ldHJvbm9tZWZiOiBjb3VsZG4ndCBwcm9jZXNzIHdhdmVmb3JtXG4iKTsKKwkJZ290byBlcnJfbGRfd2ZtOworCX0KKwlyZWxlYXNlX2Zpcm13YXJlKGZ3X2VudHJ5KTsKKworCXJldHZhbCA9IHJlcXVlc3RfaXJxKElSUV9HUElPKFJEWV9HUElPX1BJTiksIG1ldHJvbm9tZV9oYW5kbGVfaXJxLAorCQkJCUlSUUZfRElTQUJMRUQsICJNZXRyb25vbWUiLCBpbmZvKTsKKwlpZiAocmV0dmFsKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAicmVxdWVzdF9pcnEgZmFpbGVkOiAlZFxuIiwgcmV0dmFsKTsKKwkJZ290byBlcnJfbGRfd2ZtOworCX0KKwlzZXRfaXJxX3R5cGUoSVJRX0dQSU8oUkRZX0dQSU9fUElOKSwgSVJRVF9GQUxMSU5HKTsKKworCXJldHZhbCA9IG1ldHJvbm9tZV9pbml0X3JlZ3MocGFyKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJZ290byBlcnJfZnJlZV9pcnE7CisKKwlpbmZvLT5mbGFncyA9IEZCSU5GT19GTEFHX0RFRkFVTFQ7CisKKwlpbmZvLT5mYmRlZmlvID0gJm1ldHJvbm9tZWZiX2RlZmlvOworCWZiX2RlZmVycmVkX2lvX2luaXQoaW5mbyk7CisKKwlyZXR2YWwgPSBmYl9hbGxvY19jbWFwKCZpbmZvLT5jbWFwLCA4LCAwKTsKKwlpZiAocmV0dmFsIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBhbGxvY2F0ZSBjb2xvcm1hcFxuIik7CisJCWdvdG8gZXJyX2ZiX3JlbDsKKwl9CisKKwkvKiBzZXQgY21hcCAqLworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCWluZm8tPmNtYXAucmVkW2ldID0gKCgoMippKSsxKSooMHhGRkZGKSkvMTY7CisJbWVtY3B5KGluZm8tPmNtYXAuZ3JlZW4sIGluZm8tPmNtYXAucmVkLCBzaXplb2YodTE2KSo4KTsKKwltZW1jcHkoaW5mby0+Y21hcC5ibHVlLCBpbmZvLT5jbWFwLnJlZCwgc2l6ZW9mKHUxNikqOCk7CisKKwlyZXR2YWwgPSByZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJZ290byBlcnJfY21hcDsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgaW5mbyk7CisKKwlwcmludGsoS0VSTl9JTkZPCisJCSJmYiVkOiBNZXRyb25vbWUgZnJhbWUgYnVmZmVyIGRldmljZSwgdXNpbmcgJWRLIG9mIHZpZGVvIgorCQkiIG1lbW9yeVxuIiwgaW5mby0+bm9kZSwgdmlkZW9tZW1vcnlzaXplID4+IDEwKTsKKworCXJldHVybiAwOworCitlcnJfY21hcDoKKwlmYl9kZWFsbG9jX2NtYXAoJmluZm8tPmNtYXApOworZXJyX2ZiX3JlbDoKKwlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8pOworZXJyX2ZyZWVfaXJxOgorCWZyZWVfaXJxKElSUV9HUElPKFJEWV9HUElPX1BJTiksIGluZm8pOworZXJyX2xkX3dmbToKKwlyZWxlYXNlX2Zpcm13YXJlKGZ3X2VudHJ5KTsKK2Vycl9kbWFfZnJlZToKKwlkbWFfZnJlZV93cml0ZWNvbWJpbmUoJmRldi0+ZGV2LCBwYXItPm1ldHJvbWVtc2l6ZSwgcGFyLT5tZXRyb21lbSwKKwkJCQlwYXItPm1ldHJvbWVtX2RtYSk7CitlcnJfY3N1bV90YWJsZToKKwl2ZnJlZShwYXItPmNzdW1fdGFibGUpOworZXJyX3ZmcmVlOgorCXZmcmVlKHZpZGVvbWVtb3J5KTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBtZXRyb25vbWVmYl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChpbmZvKSB7CisJCXN0cnVjdCBtZXRyb25vbWVmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKKwkJZmJfZGVmZXJyZWRfaW9fY2xlYW51cChpbmZvKTsKKwkJZG1hX2ZyZWVfd3JpdGVjb21iaW5lKCZkZXYtPmRldiwgcGFyLT5tZXRyb21lbXNpemUsCisJCQkJCXBhci0+bWV0cm9tZW0sIHBhci0+bWV0cm9tZW1fZG1hKTsKKwkJZmJfZGVhbGxvY19jbWFwKCZpbmZvLT5jbWFwKTsKKwkJdmZyZWUocGFyLT5jc3VtX3RhYmxlKTsKKwkJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKTsKKwkJdmZyZWUoKHZvaWQgX19mb3JjZSAqKWluZm8tPnNjcmVlbl9iYXNlKTsKKwkJZnJlZV9pcnEoSVJRX0dQSU8oUkRZX0dQSU9fUElOKSwgaW5mbyk7CisJCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtZXRyb25vbWVmYl9kcml2ZXIgPSB7CisJLnByb2JlCT0gbWV0cm9ub21lZmJfcHJvYmUsCisJLnJlbW92ZSA9IG1ldHJvbm9tZWZiX3JlbW92ZSwKKwkuZHJpdmVyCT0geworCQkubmFtZQk9ICJtZXRyb25vbWVmYiIsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICptZXRyb25vbWVmYl9kZXZpY2U7CisKK3N0YXRpYyBpbnQgX19pbml0IG1ldHJvbm9tZWZiX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJaWYgKCFtZXRyb25vbWVmYl9lbmFibGUpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiVXNlIG1ldHJvbm9tZWZiX2VuYWJsZSB0byBlbmFibGUgdGhlIGRldmljZVxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZtZXRyb25vbWVmYl9kcml2ZXIpOworCWlmICghcmV0KSB7CisJCW1ldHJvbm9tZWZiX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygibWV0cm9ub21lZmIiLCAwKTsKKwkJaWYgKG1ldHJvbm9tZWZiX2RldmljZSkKKwkJCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQobWV0cm9ub21lZmJfZGV2aWNlKTsKKwkJZWxzZQorCQkJcmV0ID0gLUVOT01FTTsKKworCQlpZiAocmV0KSB7CisJCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KG1ldHJvbm9tZWZiX2RldmljZSk7CisJCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbWV0cm9ub21lZmJfZHJpdmVyKTsKKwkJfQorCX0KKwlyZXR1cm4gcmV0OworCit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtZXRyb25vbWVmYl9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIobWV0cm9ub21lZmJfZGV2aWNlKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbWV0cm9ub21lZmJfZHJpdmVyKTsKK30KKworbW9kdWxlX3BhcmFtKG1ldHJvbm9tZWZiX2VuYWJsZSwgdWludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKG1ldHJvbm9tZWZiX2VuYWJsZSwgIkVuYWJsZSBjb21tdW5pY2F0aW9uIHdpdGggTWV0cm9ub21lIik7CisKK21vZHVsZV9pbml0KG1ldHJvbm9tZWZiX2luaXQpOworbW9kdWxlX2V4aXQobWV0cm9ub21lZmJfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiZmJkZXYgZHJpdmVyIGZvciBNZXRyb25vbWUgY29udHJvbGxlciIpOworTU9EVUxFX0FVVEhPUigiSmF5YSBLdW1hciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX2JhbGxvb24uYyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19iYWxsb29uLmMKaW5kZXggYzhhNDMzMi4uMGIzZWZjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX2JhbGxvb24uYworKysgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fYmFsbG9vbi5jCkBAIC0xNTIsNyArMTUyLDcgQEAKIAl3YWtlX3VwKCZ2Yi0+Y29uZmlnX2NoYW5nZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHRvd2FyZHNfdGFyZ2V0KHN0cnVjdCB2aXJ0aW9fYmFsbG9vbiAqdmIpCitzdGF0aWMgaW5saW5lIHM2NCB0b3dhcmRzX3RhcmdldChzdHJ1Y3QgdmlydGlvX2JhbGxvb24gKnZiKQogewogCXUzMiB2OwogCV9fdmlydGlvX2NvbmZpZ192YWwodmItPnZkZXYsCkBAIC0xNzYsNyArMTc2LDcgQEAKIAogCXNldF9mcmVlemFibGUoKTsKIAl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgewotCQlpbnQgZGlmZjsKKwkJczY0IGRpZmY7CiAKIAkJdHJ5X3RvX2ZyZWV6ZSgpOwogCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUodmItPmNvbmZpZ19jaGFuZ2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpLmMgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpLmMKaW5kZXggMjZmNzg3ZC4uNTlhOGY3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaS5jCisrKyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2kuYwpAQCAtMTc3LDYgKzE3Nyw3IEBACiAJc3RydWN0IHZpcnRpb19wY2lfZGV2aWNlICp2cF9kZXYgPSBvcGFxdWU7CiAJc3RydWN0IHZpcnRpb19wY2lfdnFfaW5mbyAqaW5mbzsKIAlpcnFyZXR1cm5fdCByZXQgPSBJUlFfTk9ORTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXU4IGlzcjsKIAogCS8qIHJlYWRpbmcgdGhlIElTUiBoYXMgdGhlIGVmZmVjdCBvZiBhbHNvIGNsZWFyaW5nIGl0IHNvIGl0J3MgdmVyeQpAQCAtMTk3LDEyICsxOTgsMTIgQEAKIAkJCWRydi0+Y29uZmlnX2NoYW5nZWQoJnZwX2Rldi0+dmRldik7CiAJfQogCi0Jc3Bpbl9sb2NrKCZ2cF9kZXYtPmxvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZ2cF9kZXYtPmxvY2ssIGZsYWdzKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGluZm8sICZ2cF9kZXYtPnZpcnRxdWV1ZXMsIG5vZGUpIHsKIAkJaWYgKHZyaW5nX2ludGVycnVwdChpcnEsIGluZm8tPnZxKSA9PSBJUlFfSEFORExFRCkKIAkJCXJldCA9IElSUV9IQU5ETEVEOwogCX0KLQlzcGluX3VubG9jaygmdnBfZGV2LT5sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2cF9kZXYtPmxvY2ssIGZsYWdzKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0yMTQsNiArMjE1LDcgQEAKIAlzdHJ1Y3QgdmlydGlvX3BjaV9kZXZpY2UgKnZwX2RldiA9IHRvX3ZwX2RldmljZSh2ZGV2KTsKIAlzdHJ1Y3QgdmlydGlvX3BjaV92cV9pbmZvICppbmZvOwogCXN0cnVjdCB2aXJ0cXVldWUgKnZxOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTE2IG51bTsKIAlpbnQgZXJyOwogCkBAIC0yNTUsOSArMjU3LDkgQEAKIAl2cS0+cHJpdiA9IGluZm87CiAJaW5mby0+dnEgPSB2cTsKIAotCXNwaW5fbG9jaygmdnBfZGV2LT5sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdnBfZGV2LT5sb2NrLCBmbGFncyk7CiAJbGlzdF9hZGQoJmluZm8tPm5vZGUsICZ2cF9kZXYtPnZpcnRxdWV1ZXMpOwotCXNwaW5fdW5sb2NrKCZ2cF9kZXYtPmxvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZwX2Rldi0+bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIHZxOwogCkBAIC0yNzQsMTAgKzI3NiwxMSBAQAogewogCXN0cnVjdCB2aXJ0aW9fcGNpX2RldmljZSAqdnBfZGV2ID0gdG9fdnBfZGV2aWNlKHZxLT52ZGV2KTsKIAlzdHJ1Y3QgdmlydGlvX3BjaV92cV9pbmZvICppbmZvID0gdnEtPnByaXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9jaygmdnBfZGV2LT5sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdnBfZGV2LT5sb2NrLCBmbGFncyk7CiAJbGlzdF9kZWwoJmluZm8tPm5vZGUpOwotCXNwaW5fdW5sb2NrKCZ2cF9kZXYtPmxvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZwX2Rldi0+bG9jaywgZmxhZ3MpOwogCiAJdnJpbmdfZGVsX3ZpcnRxdWV1ZSh2cSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19yaW5nLmMgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5jCmluZGV4IDNhMjhjMTMuLmFhNzE0MDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19yaW5nLmMKKysrIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3JpbmcuYwpAQCAtMjMyLDcgKzIzMiw2IEBACiAJdnEtPnZyaW5nLmF2YWlsLT5mbGFncyAmPSB+VlJJTkdfQVZBSUxfRl9OT19JTlRFUlJVUFQ7CiAJbWIoKTsKIAlpZiAodW5saWtlbHkobW9yZV91c2VkKHZxKSkpIHsKLQkJdnEtPnZyaW5nLmF2YWlsLT5mbGFncyB8PSBWUklOR19BVkFJTF9GX05PX0lOVEVSUlVQVDsKIAkJRU5EX1VTRSh2cSk7CiAJCXJldHVybiBmYWxzZTsKIAl9CmRpZmYgLS1naXQgYS9mcy9haW8uYyBiL2ZzL2Fpby5jCmluZGV4IGI3NGM1NjcuLjZhZjkyMTkgMTAwNjQ0Ci0tLSBhL2ZzL2Fpby5jCisrKyBiL2ZzL2Fpby5jCkBAIC05OTYsNiArOTk2LDE0IEBACiAJLyogZXZlcnl0aGluZyB0dXJuZWQgb3V0IHdlbGwsIGRpc3Bvc2Ugb2YgdGhlIGFpb2NiLiAqLwogCXJldCA9IF9fYWlvX3B1dF9yZXEoY3R4LCBpb2NiKTsKIAorCS8qCisJICogV2UgaGF2ZSB0byBvcmRlciBvdXIgcmluZ19pbmZvIHRhaWwgc3RvcmUgYWJvdmUgYW5kIHRlc3QKKwkgKiBvZiB0aGUgd2FpdCBsaXN0IGJlbG93IG91dHNpZGUgdGhlIHdhaXQgbG9jay4gIFRoaXMgaXMKKwkgKiBsaWtlIGluIHdha2VfdXBfYml0KCkgd2hlcmUgY2xlYXJpbmcgYSBiaXQgaGFzIHRvIGJlCisJICogb3JkZXJlZCB3aXRoIHRoZSB1bmxvY2tlZCB0ZXN0LgorCSAqLworCXNtcF9tYigpOworCiAJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJmN0eC0+d2FpdCkpCiAJCXdha2VfdXAoJmN0eC0+d2FpdCk7CiAKZGlmZiAtLWdpdCBhL2ZzL2Jpby5jIGIvZnMvYmlvLmMKaW5kZXggMzMxMmZjYy4uNTUzYjViNyAxMDA2NDQKLS0tIGEvZnMvYmlvLmMKKysrIGIvZnMvYmlvLmMKQEAgLTExOTQsNiArMTE5NCw4IEBACiBFWFBPUlRfU1lNQk9MKGJpb19hZGRfcGFnZSk7CiBFWFBPUlRfU1lNQk9MKGJpb19hZGRfcGNfcGFnZSk7CiBFWFBPUlRfU1lNQk9MKGJpb19nZXRfbnJfdmVjcyk7CitFWFBPUlRfU1lNQk9MKGJpb19tYXBfdXNlcik7CitFWFBPUlRfU1lNQk9MKGJpb191bm1hcF91c2VyKTsKIEVYUE9SVF9TWU1CT0woYmlvX21hcF9rZXJuKTsKIEVYUE9SVF9TWU1CT0woYmlvX3BhaXJfcmVsZWFzZSk7CiBFWFBPUlRfU1lNQk9MKGJpb19zcGxpdCk7CmRpZmYgLS1naXQgYS9mcy9idWZmZXIuYyBiL2ZzL2J1ZmZlci5jCmluZGV4IGRkZmRkMmMuLjdiYTU4MzggMTAwNjQ0Ci0tLSBhL2ZzL2J1ZmZlci5jCisrKyBiL2ZzL2J1ZmZlci5jCkBAIC0zMjEzLDcgKzMyMTMsNyBAQAogfQogCiAvKioKLSAqIGJoX3VwdG9kYXRlX29yX2xvY2s6IFRlc3Qgd2hldGhlciB0aGUgYnVmZmVyIGlzIHVwdG9kYXRlCisgKiBiaF91cHRvZGF0ZV9vcl9sb2NrIC0gVGVzdCB3aGV0aGVyIHRoZSBidWZmZXIgaXMgdXB0b2RhdGUKICAqIEBiaDogc3RydWN0IGJ1ZmZlcl9oZWFkCiAgKgogICogUmV0dXJuIHRydWUgaWYgdGhlIGJ1ZmZlciBpcyB1cC10by1kYXRlIGFuZCBmYWxzZSwKQEAgLTMyMzIsNyArMzIzMiw3IEBACiBFWFBPUlRfU1lNQk9MKGJoX3VwdG9kYXRlX29yX2xvY2spOwogCiAvKioKLSAqIGJoX3N1Ym1pdF9yZWFkOiBTdWJtaXQgYSBsb2NrZWQgYnVmZmVyIGZvciByZWFkaW5nCisgKiBiaF9zdWJtaXRfcmVhZCAtIFN1Ym1pdCBhIGxvY2tlZCBidWZmZXIgZm9yIHJlYWRpbmcKICAqIEBiaDogc3RydWN0IGJ1ZmZlcl9oZWFkCiAgKgogICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MgYW5kIC1FSU8gb24gZXJyb3IuCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNfZGZzX3JlZi5jIGIvZnMvY2lmcy9jaWZzX2Rmc19yZWYuYwppbmRleCA3Zjg4MzgyLi5hMWE5NWIwIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNfZGZzX3JlZi5jCisrKyBiL2ZzL2NpZnMvY2lmc19kZnNfcmVmLmMKQEAgLTc0LDcgKzc0LDcgQEAKIAlwU2VwID0gbWVtY2hyKFVOQysyLCAnXFwnLCBsZW4tMik7CiAJaWYgKCFwU2VwKSB7CiAJCWNFUlJPUigxLCAoIiVzOiBubyBzZXJ2ZXIgbmFtZSBlbmQgaW4gbm9kZSBuYW1lOiAlcyIsCi0JCQlfX0ZVTkNUSU9OX18sIG5vZGVfbmFtZSkpOworCQkJX19mdW5jX18sIG5vZGVfbmFtZSkpOwogCQlrZnJlZShVTkMpOwogCQlyZXR1cm4gTlVMTDsKIAl9CkBAIC04NCw3ICs4NCw3IEBACiAJcFNlcCA9IG1lbWNocihVTkMrKHBTZXAtVU5DKSwgJ1xcJywgbGVuLShwU2VwLVVOQykpOwogCWlmICghcFNlcCkgewogCQljRVJST1IoMSwgKCIlczoyIGNhbnQgZmluZCBzaGFyZSBuYW1lIGluIG5vZGUgbmFtZTogJXMiLAotCQkJX19GVU5DVElPTl9fLCBub2RlX25hbWUpKTsKKwkJCV9fZnVuY19fLCBub2RlX25hbWUpKTsKIAkJa2ZyZWUoVU5DKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQpAQCAtMTI3LDcgKzEyNyw3IEBACiAJcmMgPSBkbnNfcmVzb2x2ZV9zZXJ2ZXJfbmFtZV90b19pcCgqZGV2bmFtZSwgJnNydklQKTsKIAlpZiAocmMgIT0gMCkgewogCQljRVJST1IoMSwgKCIlczogRmFpbGVkIHRvIHJlc29sdmUgc2VydmVyIHBhcnQgb2YgJXMgdG8gSVAiLAotCQkJICBfX0ZVTkNUSU9OX18sICpkZXZuYW1lKSk7CisJCQkgIF9fZnVuY19fLCAqZGV2bmFtZSkpOwogCQltb3VudGRhdGEgPSBFUlJfUFRSKHJjKTsKIAkJZ290byBjb21wb3NlX21vdW50X29wdGlvbnNfb3V0OwogCX0KQEAgLTE4MSw4ICsxODEsOCBAQAogCQl9CiAJfQogCi0JLypjRllJKDEsKCIlczogcGFyZW50IG1vdW50ZGF0YTogJXMiLCBfX0ZVTkNUSU9OX18sc2JfbW91bnRkYXRhKSk7Ki8KLQkvKmNGWUkoMSwgKCIlczogc3VibW91bnQgbW91bnRkYXRhOiAlcyIsIF9fRlVOQ1RJT05fXywgbW91bnRkYXRhICkpOyovCisJLypjRllJKDEsKCIlczogcGFyZW50IG1vdW50ZGF0YTogJXMiLCBfX2Z1bmNfXyxzYl9tb3VudGRhdGEpKTsqLworCS8qY0ZZSSgxLCAoIiVzOiBzdWJtb3VudCBtb3VudGRhdGE6ICVzIiwgX19mdW5jX18sIG1vdW50ZGF0YSApKTsqLwogCiBjb21wb3NlX21vdW50X29wdGlvbnNfb3V0OgogCWtmcmVlKHNydklQKTsKQEAgLTMwMiw3ICszMDIsNyBAQAogCWludCByYyA9IDA7CiAJc3RydWN0IHZmc21vdW50ICptbnQgPSBFUlJfUFRSKC1FTk9FTlQpOwogCi0JY0ZZSSgxLCAoImluICVzIiwgX19GVU5DVElPTl9fKSk7CisJY0ZZSSgxLCAoImluICVzIiwgX19mdW5jX18pKTsKIAlCVUdfT04oSVNfUk9PVChkZW50cnkpKTsKIAogCXhpZCA9IEdldFhpZCgpOwpAQCAtMzM2LDcgKzMzNiw3IEBACiAJCQlsZW4gPSBzdHJsZW4ocmVmZXJyYWxzW2ldLm5vZGVfbmFtZSk7CiAJCQlpZiAobGVuIDwgMikgewogCQkJCWNFUlJPUigxLCAoIiVzOiBOZXQgQWRkcmVzcyBwYXRoIHRvbyBzaG9ydDogJXMiLAotCQkJCQlfX0ZVTkNUSU9OX18sIHJlZmVycmFsc1tpXS5ub2RlX25hbWUpKTsKKwkJCQkJX19mdW5jX18sIHJlZmVycmFsc1tpXS5ub2RlX25hbWUpKTsKIAkJCQlyYyA9IC1FSU5WQUw7CiAJCQkJZ290byBvdXRfZXJyOwogCQkJfQpAQCAtMzQ0LDcgKzM0NCw3IEBACiAJCQkJCQluZC0+cGF0aC5kZW50cnksCiAJCQkJCQlyZWZlcnJhbHNbaV0ubm9kZV9uYW1lKTsKIAkJCWNGWUkoMSwgKCIlczogY2lmc19kZnNfZG9fcmVmbW91bnQ6JXMgLCBtbnQ6JXAiLAotCQkJCQkgX19GVU5DVElPTl9fLAorCQkJCQkgX19mdW5jX18sCiAJCQkJCXJlZmVycmFsc1tpXS5ub2RlX25hbWUsIG1udCkpOwogCiAJCQkvKiBjb21wbGV0ZSBtb3VudCBwcm9jZWR1cmUgaWYgd2UgYWNjdXJlZCBzdWJtb3VudCAqLwpAQCAtMzY1LDcgKzM2NSw3IEBACiAJRnJlZVhpZCh4aWQpOwogCWZyZWVfZGZzX2luZm9fYXJyYXkocmVmZXJyYWxzLCBudW1fcmVmZXJyYWxzKTsKIAlrZnJlZShmdWxsX3BhdGgpOwotCWNGWUkoMSwgKCJsZWF2aW5nICVzIiAsIF9fRlVOQ1RJT05fXykpOworCWNGWUkoMSwgKCJsZWF2aW5nICVzIiAsIF9fZnVuY19fKSk7CiAJcmV0dXJuIEVSUl9QVFIocmMpOwogb3V0X2VycjoKIAlwYXRoX3B1dCgmbmQtPnBhdGgpOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzYWNsLmMgYi9mcy9jaWZzL2NpZnNhY2wuYwppbmRleCBmOTM5MzJjLi4xZjVhNDI4IDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNhY2wuYworKysgYi9mcy9jaWZzL2NpZnNhY2wuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgIGZzL2NpZnMvY2lmc2FjbC5jCiAgKgotICogICBDb3B5cmlnaHQgKEMpIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgIENvcnAuLCAyMDA3CisgKiAgIENvcHlyaWdodCAoQykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyAgQ29ycC4sIDIwMDcsMjAwOAogICogICBBdXRob3Iocyk6IFN0ZXZlIEZyZW5jaCAoc2ZyZW5jaEB1cy5pYm0uY29tKQogICoKICAqICAgQ29udGFpbnMgdGhlIHJvdXRpbmVzIGZvciBtYXBwaW5nIENJRlMvTlRGUyBBQ0xzCkBAIC01NTYsOSArNTU2LDkgQEAKIAogLyogUmV0cmlldmUgYW4gQUNMIGZyb20gdGhlIHNlcnZlciAqLwogc3RhdGljIHN0cnVjdCBjaWZzX250c2QgKmdldF9jaWZzX2FjbCh1MzIgKnBhY2xsZW4sIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJICAgICAgIGNvbnN0IGNoYXIgKnBhdGgpCisJCQkJICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IF9fdTE2ICpwZmlkKQogewotCXN0cnVjdCBjaWZzRmlsZUluZm8gKm9wZW5fZmlsZTsKKwlzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpvcGVuX2ZpbGUgPSBOVUxMOwogCWludCB1bmxvY2tfZmlsZSA9IEZBTFNFOwogCWludCB4aWQ7CiAJaW50IHJjID0gLUVJTzsKQEAgLTU3Myw3ICs1NzMsMTEgQEAKIAkJcmV0dXJuIE5VTEw7CiAKIAl4aWQgPSBHZXRYaWQoKTsKLQlvcGVuX2ZpbGUgPSBmaW5kX3JlYWRhYmxlX2ZpbGUoQ0lGU19JKGlub2RlKSk7CisJaWYgKHBmaWQgPT0gTlVMTCkKKwkJb3Blbl9maWxlID0gZmluZF9yZWFkYWJsZV9maWxlKENJRlNfSShpbm9kZSkpOworCWVsc2UKKwkJZmlkID0gKnBmaWQ7CisKIAlzYiA9IGlub2RlLT5pX3NiOwogCWlmIChzYiA9PSBOVUxMKSB7CiAJCUZyZWVYaWQoeGlkKTsKQEAgLTU4NCw3ICs1ODgsNyBAQAogCWlmIChvcGVuX2ZpbGUpIHsKIAkJdW5sb2NrX2ZpbGUgPSBUUlVFOwogCQlmaWQgPSBvcGVuX2ZpbGUtPm5ldGZpZDsKLQl9IGVsc2UgeworCX0gZWxzZSBpZiAocGZpZCA9PSBOVUxMKSB7CiAJCWludCBvcGxvY2sgPSBGQUxTRTsKIAkJLyogb3BlbiBmaWxlICovCiAJCXJjID0gQ0lGU1NNQk9wZW4oeGlkLCBjaWZzX3NiLT50Y29uLCBwYXRoLCBGSUxFX09QRU4sCkBAIC02MDAsMTAgKzYwNCwxMSBAQAogCiAJcmMgPSBDSUZTU01CR2V0Q0lGU0FDTCh4aWQsIGNpZnNfc2ItPnRjb24sIGZpZCwgJnBudHNkLCBwYWNsbGVuKTsKIAljRllJKDEsICgiR2V0Q0lGU0FDTCByYyA9ICVkIEFDTCBsZW4gJWQiLCByYywgKnBhY2xsZW4pKTsKLQlpZiAodW5sb2NrX2ZpbGUgPT0gVFJVRSkKKwlpZiAodW5sb2NrX2ZpbGUgPT0gVFJVRSkgLyogZmluZF9yZWFkYWJsZV9maWxlIGluY3JlbWVudHMgcmVmIGNvdW50ICovCiAJCWF0b21pY19kZWMoJm9wZW5fZmlsZS0+d3J0UGVuZGluZyk7Ci0JZWxzZQorCWVsc2UgaWYgKHBmaWQgPT0gTlVMTCkgLyogaWYgb3BlbmVkIGFib3ZlIHdlIGhhdmUgdG8gY2xvc2UgdGhlIGhhbmRsZSAqLwogCQlDSUZTU01CQ2xvc2UoeGlkLCBjaWZzX3NiLT50Y29uLCBmaWQpOworCS8qIGVsc2UgaGFuZGxlIHdhcyBwYXNzZWQgaW4gYnkgY2FsbGVyICovCiAKIAlGcmVlWGlkKHhpZCk7CiAJcmV0dXJuIHBudHNkOwpAQCAtNjY0LDE0ICs2NjksMTQgQEAKIH0KIAogLyogVHJhbnNsYXRlIHRoZSBDSUZTIEFDTCAoc2ltbGFyIHRvIE5URlMgQUNMKSBmb3IgYSBmaWxlIGludG8gbW9kZSBiaXRzICovCi12b2lkIGFjbF90b191aWRfbW9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpwYXRoKQordm9pZCBhY2xfdG9fdWlkX21vZGUoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqcGF0aCwgY29uc3QgX191MTYgKnBmaWQpCiB7CiAJc3RydWN0IGNpZnNfbnRzZCAqcG50c2QgPSBOVUxMOwogCXUzMiBhY2xsZW4gPSAwOwogCWludCByYyA9IDA7CiAKIAljRllJKERCRzIsICgiY29udmVydGluZyBBQ0wgdG8gbW9kZSBmb3IgJXMiLCBwYXRoKSk7Ci0JcG50c2QgPSBnZXRfY2lmc19hY2woJmFjbGxlbiwgaW5vZGUsIHBhdGgpOworCXBudHNkID0gZ2V0X2NpZnNfYWNsKCZhY2xsZW4sIGlub2RlLCBwYXRoLCBwZmlkKTsKIAogCS8qIGlmIHdlIGNhbiByZXRyaWV2ZSB0aGUgQUNMLCBub3cgcGFyc2UgQWNjZXNzIENvbnRyb2wgRW50cmllcywgQUNFcyAqLwogCWlmIChwbnRzZCkKQEAgLTY5NCw3ICs2OTksNyBAQAogCWNGWUkoREJHMiwgKCJzZXQgQUNMIGZyb20gbW9kZSBmb3IgJXMiLCBwYXRoKSk7CiAKIAkvKiBHZXQgdGhlIHNlY3VyaXR5IGRlc2NyaXB0b3IgKi8KLQlwbnRzZCA9IGdldF9jaWZzX2FjbCgmYWNsbGVuLCBpbm9kZSwgcGF0aCk7CisJcG50c2QgPSBnZXRfY2lmc19hY2woJmFjbGxlbiwgaW5vZGUsIHBhdGgsIE5VTEwpOwogCiAJLyogQWRkIHRocmVlIEFDRXMgZm9yIG93bmVyLCBncm91cCwgZXZlcnlvbmUgZ2V0dGluZyByaWQgb2YKIAkgICBvdGhlciBBQ0VzIGFzIGNobW9kIGRpc2FibGVzIEFDRXMgYW5kIHNldCB0aGUgc2VjdXJpdHkgZGVzY3JpcHRvciAqLwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzcHJvdG8uaCBiL2ZzL2NpZnMvY2lmc3Byb3RvLmgKaW5kZXggMGFmNjNlNi4uN2U1ZTBlNyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzcHJvdG8uaAorKysgYi9mcy9jaWZzL2NpZnNwcm90by5oCkBAIC0zOSw4ICszOSw4IEBACiAJCQl1bnNpZ25lZCBpbnQgLyogbGVuZ3RoICovICwgc3RydWN0IHNvY2thZGRyICopOwogZXh0ZXJuIHVuc2lnbmVkIGludCBfR2V0WGlkKHZvaWQpOwogZXh0ZXJuIHZvaWQgX0ZyZWVYaWQodW5zaWduZWQgaW50KTsKLSNkZWZpbmUgR2V0WGlkKCkgKGludClfR2V0WGlkKCk7IGNGWUkoMSwoIkNJRlMgVkZTOiBpbiAlcyBhcyBYaWQ6ICVkIHdpdGggdWlkOiAlZCIsX19GVU5DVElPTl9fLCB4aWQsY3VycmVudC0+ZnN1aWQpKTsKLSNkZWZpbmUgRnJlZVhpZChjdXJyX3hpZCkge19GcmVlWGlkKGN1cnJfeGlkKTsgY0ZZSSgxLCgiQ0lGUyBWRlM6IGxlYXZpbmcgJXMgKHhpZCA9ICVkKSByYyA9ICVkIixfX0ZVTkNUSU9OX18sY3Vycl94aWQsKGludClyYykpO30KKyNkZWZpbmUgR2V0WGlkKCkgKGludClfR2V0WGlkKCk7IGNGWUkoMSwoIkNJRlMgVkZTOiBpbiAlcyBhcyBYaWQ6ICVkIHdpdGggdWlkOiAlZCIsX19mdW5jX18sIHhpZCxjdXJyZW50LT5mc3VpZCkpOworI2RlZmluZSBGcmVlWGlkKGN1cnJfeGlkKSB7X0ZyZWVYaWQoY3Vycl94aWQpOyBjRllJKDEsKCJDSUZTIFZGUzogbGVhdmluZyAlcyAoeGlkID0gJWQpIHJjID0gJWQiLF9fZnVuY19fLGN1cnJfeGlkLChpbnQpcmMpKTt9CiBleHRlcm4gY2hhciAqYnVpbGRfcGF0aF9mcm9tX2RlbnRyeShzdHJ1Y3QgZGVudHJ5ICopOwogZXh0ZXJuIGNoYXIgKmJ1aWxkX3dpbGRjYXJkX3BhdGhfZnJvbV9kZW50cnkoc3RydWN0IGRlbnRyeSAqZGlyZW50cnkpOwogLyogZXh0ZXJuIHZvaWQgcmVuZXdfcGFyZW50YWxfdGltZXN0YW1wcyhzdHJ1Y3QgZGVudHJ5ICpkaXJlbnRyeSk7Ki8KQEAgLTkyLDExICs5MiwxMiBAQAogZXh0ZXJuIGludCBjaWZzX2dldF9pbm9kZV9pbmZvKHN0cnVjdCBpbm9kZSAqKnBpbm9kZSwKIAkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlYXJjaF9wYXRoLAogCQkJRklMRV9BTExfSU5GTyAqIHBmaWxlX2luZm8sCi0JCQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgeGlkKTsKKwkJCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB4aWQsIGNvbnN0IF9fdTE2ICpwZmlkKTsKIGV4dGVybiBpbnQgY2lmc19nZXRfaW5vZGVfaW5mb191bml4KHN0cnVjdCBpbm9kZSAqKnBpbm9kZSwKIAkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlYXJjaF9wYXRoLAogCQkJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHhpZCk7Ci1leHRlcm4gdm9pZCBhY2xfdG9fdWlkX21vZGUoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqc2VhcmNoX3BhdGgpOworZXh0ZXJuIHZvaWQgYWNsX3RvX3VpZF9tb2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKnBhdGgsCisJCQkgICAgY29uc3QgX191MTYgKnBmaWQpOwogZXh0ZXJuIGludCBtb2RlX3RvX2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpwYXRoLCBfX3U2NCk7CiAKIGV4dGVybiBpbnQgY2lmc19tb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGNpZnNfc2JfaW5mbyAqLCBjaGFyICosCmRpZmYgLS1naXQgYS9mcy9jaWZzL2Rpci5jIGIvZnMvY2lmcy9kaXIuYwppbmRleCA0ZTgzYjQ3Li4wZjVjNjJiIDEwMDY0NAotLS0gYS9mcy9jaWZzL2Rpci5jCisrKyBiL2ZzL2NpZnMvZGlyLmMKQEAgLTIyOSw3ICsyMjksOCBAQAogCQkJCQkJIGlub2RlLT5pX3NiLCB4aWQpOwogCQllbHNlIHsKIAkJCXJjID0gY2lmc19nZXRfaW5vZGVfaW5mbygmbmV3aW5vZGUsIGZ1bGxfcGF0aCwKLQkJCQkJCSBidWYsIGlub2RlLT5pX3NiLCB4aWQpOworCQkJCQkJIGJ1ZiwgaW5vZGUtPmlfc2IsIHhpZCwKKwkJCQkJCSAmZmlsZUhhbmRsZSk7CiAJCQlpZiAobmV3aW5vZGUpIHsKIAkJCQluZXdpbm9kZS0+aV9tb2RlID0gbW9kZTsKIAkJCQlpZiAoKG9wbG9jayAmIENJRlNfQ1JFQVRFX0FDVElPTikgJiYKQEAgLTQ4Myw3ICs0ODQsNyBAQAogCQkJCQkgICAgICBwYXJlbnRfZGlyX2lub2RlLT5pX3NiLCB4aWQpOwogCWVsc2UKIAkJcmMgPSBjaWZzX2dldF9pbm9kZV9pbmZvKCZuZXdJbm9kZSwgZnVsbF9wYXRoLCBOVUxMLAotCQkJCQkgcGFyZW50X2Rpcl9pbm9kZS0+aV9zYiwgeGlkKTsKKwkJCQkJIHBhcmVudF9kaXJfaW5vZGUtPmlfc2IsIHhpZCwgTlVMTCk7CiAKIAlpZiAoKHJjID09IDApICYmIChuZXdJbm9kZSAhPSBOVUxMKSkgewogCQlpZiAocFRjb24tPm5vY2FzZSkKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvZG5zX3Jlc29sdmUuYyBiL2ZzL2NpZnMvZG5zX3Jlc29sdmUuYwppbmRleCBlZjdmNDM4Li43Y2M4NmM0IDEwMDY0NAotLS0gYS9mcy9jaWZzL2Ruc19yZXNvbHZlLmMKKysrIGIvZnMvY2lmcy9kbnNfcmVzb2x2ZS5jCkBAIC03NywxNCArNzcsMTQgQEAKIAkvKiBzZWFyY2ggZm9yIHNlcnZlciBuYW1lIGRlbGltaXRlciAqLwogCWxlbiA9IHN0cmxlbih1bmMpOwogCWlmIChsZW4gPCAzKSB7Ci0JCWNGWUkoMSwgKCIlczogdW5jIGlzIHRvbyBzaG9ydDogJXMiLCBfX0ZVTkNUSU9OX18sIHVuYykpOworCQljRllJKDEsICgiJXM6IHVuYyBpcyB0b28gc2hvcnQ6ICVzIiwgX19mdW5jX18sIHVuYykpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJbGVuIC09IDI7CiAJbmFtZSA9IG1lbWNocih1bmMrMiwgJ1xcJywgbGVuKTsKIAlpZiAoIW5hbWUpIHsKIAkJY0ZZSSgxLCAoIiVzOiBwcm9iYWJseSBzZXJ2ZXIgbmFtZSBpcyB3aG9sZSB1bmM6ICVzIiwKLQkJCQkJX19GVU5DVElPTl9fLCB1bmMpKTsKKwkJCQkJX19mdW5jX18sIHVuYykpOwogCX0gZWxzZSB7CiAJCWxlbiA9IChuYW1lIC0gdW5jKSAtIDIvKiBsZWFkaW5nIC8vICovOwogCX0KQEAgLTEwNCw3ICsxMDQsNyBAQAogCQlpZiAoKmlwX2FkZHIpIHsKIAkJCW1lbWNweSgqaXBfYWRkciwgcmtleS0+cGF5bG9hZC5kYXRhLCBsZW4pOwogCQkJKCppcF9hZGRyKVtsZW5dID0gJ1wwJzsKLQkJCWNGWUkoMSwgKCIlczogcmVzb2x2ZWQ6ICVzIHRvICVzIiwgX19GVU5DVElPTl9fLAorCQkJY0ZZSSgxLCAoIiVzOiByZXNvbHZlZDogJXMgdG8gJXMiLCBfX2Z1bmNfXywKIAkJCQkJcmtleS0+ZGVzY3JpcHRpb24sCiAJCQkJCSppcF9hZGRyCiAJCQkJKSk7CkBAIC0xMTQsNyArMTE0LDcgQEAKIAkJfQogCQlrZXlfcHV0KHJrZXkpOwogCX0gZWxzZSB7Ci0JCWNFUlJPUigxLCAoIiVzOiB1bmFibGUgdG8gcmVzb2x2ZTogJXMiLCBfX0ZVTkNUSU9OX18sIG5hbWUpKTsKKwkJY0VSUk9SKDEsICgiJXM6IHVuYWJsZSB0byByZXNvbHZlOiAlcyIsIF9fZnVuY19fLCBuYW1lKSk7CiAJfQogCiAJa2ZyZWUobmFtZSk7CmRpZmYgLS1naXQgYS9mcy9jaWZzL2ZpbGUuYyBiL2ZzL2NpZnMvZmlsZS5jCmluZGV4IGZhODQ5YzkuLjQwYjY5MDAgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvZmlsZS5jCisrKyBiL2ZzL2NpZnMvZmlsZS5jCkBAIC0xNDUsNyArMTQ1LDcgQEAKIAkJCWZ1bGxfcGF0aCwgaW5vZGUtPmlfc2IsIHhpZCk7CiAJZWxzZQogCQlyYyA9IGNpZnNfZ2V0X2lub2RlX2luZm8oJmZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsCi0JCQlmdWxsX3BhdGgsIGJ1ZiwgaW5vZGUtPmlfc2IsIHhpZCk7CisJCQlmdWxsX3BhdGgsIGJ1ZiwgaW5vZGUtPmlfc2IsIHhpZCwgTlVMTCk7CiAKIAlpZiAoKCpvcGxvY2sgJiAweEYpID09IE9QTE9DS19FWENMVVNJVkUpIHsKIAkJcENpZnNJbm9kZS0+Y2xpZW50Q2FuQ2FjaGVBbGwgPSBUUlVFOwpAQCAtNDQwLDcgKzQ0MCw3IEBACiAJCQkJZWxzZQogCQkJCQlyYyA9IGNpZnNfZ2V0X2lub2RlX2luZm8oJmlub2RlLAogCQkJCQkJZnVsbF9wYXRoLCBOVUxMLCBpbm9kZS0+aV9zYiwKLQkJCQkJCXhpZCk7CisJCQkJCQl4aWQsIE5VTEwpOwogCQkJfSAvKiBlbHNlIHdlIGFyZSB3cml0aW5nIG91dCBkYXRhIHRvIHNlcnZlciBhbHJlYWR5CiAJCQkgICAgIGFuZCBjb3VsZCBkZWFkbG9jayBpZiB3ZSB0cmllZCB0byBmbHVzaCBkYXRhLCBhbmQKIAkJCSAgICAgc2luY2Ugd2UgZG8gbm90IGtub3cgaWYgd2UgaGF2ZSBkYXRhIHRoYXQgd291bGQKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvaW5vZGUuYyBiL2ZzL2NpZnMvaW5vZGUuYwppbmRleCAyNGViNGQzLi5iYzY3M2M4IDEwMDY0NAotLS0gYS9mcy9jaWZzL2lub2RlLmMKKysrIGIvZnMvY2lmcy9pbm9kZS5jCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAiY2lmc19mc19zYi5oIgogCiAKLXN0YXRpYyB2b2lkIGNpZnNfc2V0X29wcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKQorc3RhdGljIHZvaWQgY2lmc19zZXRfb3BzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGJvb2wgaXNfZGZzX3JlZmVycmFsKQogewogCXN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IgPSBDSUZTX1NCKGlub2RlLT5pX3NiKTsKIApAQCAtNTcsOCArNTcsMTYgQEAKIAkJCWlub2RlLT5pX2RhdGEuYV9vcHMgPSAmY2lmc19hZGRyX29wczsKIAkJYnJlYWs7CiAJY2FzZSBTX0lGRElSOgotCQlpbm9kZS0+aV9vcCA9ICZjaWZzX2Rpcl9pbm9kZV9vcHM7Ci0JCWlub2RlLT5pX2ZvcCA9ICZjaWZzX2Rpcl9vcHM7CisjaWZkZWYgQ09ORklHX0NJRlNfREZTX1VQQ0FMTAorCQlpZiAoaXNfZGZzX3JlZmVycmFsKSB7CisJCQlpbm9kZS0+aV9vcCA9ICZjaWZzX2Rmc19yZWZlcnJhbF9pbm9kZV9vcGVyYXRpb25zOworCQl9IGVsc2UgeworI2Vsc2UgLyogTk8gREZTIHN1cHBvcnQsIHRyZWF0IGFzIGEgZGlyZWN0b3J5ICovCisJCXsKKyNlbmRpZgorCQkJaW5vZGUtPmlfb3AgPSAmY2lmc19kaXJfaW5vZGVfb3BzOworCQkJaW5vZGUtPmlfZm9wID0gJmNpZnNfZGlyX29wczsKKwkJfQogCQlicmVhazsKIAljYXNlIFNfSUZMTks6CiAJCWlub2RlLT5pX29wID0gJmNpZnNfc3ltbGlua19pbm9kZV9vcHM7CkBAIC0xNTMsNiArMTYxLDMwIEBACiAJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwogfQogCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAqY2lmc19nZXRfc2VhcmNoX3BhdGgoc3RydWN0IGNpZnNUY29uSW5mbyAqcFRjb24sCisJCQkJCWNvbnN0IGNoYXIgKnNlYXJjaF9wYXRoKQoreworCWludCB0cmVlX2xlbjsKKwlpbnQgcGF0aF9sZW47CisJY2hhciAqdG1wX3BhdGg7CisKKwlpZiAoIShwVGNvbi0+RmxhZ3MgJiBTTUJfU0hBUkVfSVNfSU5fREZTKSkKKwkJcmV0dXJuIHNlYXJjaF9wYXRoOworCisJLyogdXNlIGZ1bGwgcGF0aCBuYW1lIGZvciB3b3JraW5nIHdpdGggREZTICovCisJdHJlZV9sZW4gPSBzdHJubGVuKHBUY29uLT50cmVlTmFtZSwgTUFYX1RSRUVfU0laRSArIDEpOworCXBhdGhfbGVuID0gc3RybmxlbihzZWFyY2hfcGF0aCwgTUFYX1BBVEhDT05GKTsKKworCXRtcF9wYXRoID0ga21hbGxvYyh0cmVlX2xlbitwYXRoX2xlbisxLCBHRlBfS0VSTkVMKTsKKwlpZiAodG1wX3BhdGggPT0gTlVMTCkKKwkJcmV0dXJuIHNlYXJjaF9wYXRoOworCisJc3RybmNweSh0bXBfcGF0aCwgcFRjb24tPnRyZWVOYW1lLCB0cmVlX2xlbik7CisJc3RybmNweSh0bXBfcGF0aCt0cmVlX2xlbiwgc2VhcmNoX3BhdGgsIHBhdGhfbGVuKTsKKwl0bXBfcGF0aFt0cmVlX2xlbitwYXRoX2xlbl0gPSAwOworCXJldHVybiB0bXBfcGF0aDsKK30KKwogaW50IGNpZnNfZ2V0X2lub2RlX2luZm9fdW5peChzdHJ1Y3QgaW5vZGUgKipwaW5vZGUsCiAJY29uc3QgdW5zaWduZWQgY2hhciAqc2VhcmNoX3BhdGgsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB4aWQpCiB7CkBAIC0xNjEsNDEgKzE5MywzMSBAQAogCXN0cnVjdCBjaWZzVGNvbkluZm8gKnBUY29uOwogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYiA9IENJRlNfU0Ioc2IpOwotCWNoYXIgKnRtcF9wYXRoOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmZ1bGxfcGF0aDsKKwlib29sIGlzX2Rmc19yZWZlcnJhbCA9IGZhbHNlOwogCiAJcFRjb24gPSBjaWZzX3NiLT50Y29uOwogCWNGWUkoMSwgKCJHZXR0aW5nIGluZm8gb24gJXMiLCBzZWFyY2hfcGF0aCkpOworCisJZnVsbF9wYXRoID0gY2lmc19nZXRfc2VhcmNoX3BhdGgocFRjb24sIHNlYXJjaF9wYXRoKTsKKwordHJ5X2FnYWluX0NJRlNTTUJVbml4UVBhdGhJbmZvOgogCS8qIGNvdWxkIGhhdmUgZG9uZSBhIGZpbmQgZmlyc3QgaW5zdGVhZCBidXQgdGhpcyByZXR1cm5zIG1vcmUgaW5mbyAqLwotCXJjID0gQ0lGU1NNQlVuaXhRUGF0aEluZm8oeGlkLCBwVGNvbiwgc2VhcmNoX3BhdGgsICZmaW5kRGF0YSwKKwlyYyA9IENJRlNTTUJVbml4UVBhdGhJbmZvKHhpZCwgcFRjb24sIGZ1bGxfcGF0aCwgJmZpbmREYXRhLAogCQkJCSAgY2lmc19zYi0+bG9jYWxfbmxzLCBjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmCiAJCQkJCUNJRlNfTU9VTlRfTUFQX1NQRUNJQUxfQ0hSKTsKIC8qCWR1bXBfbWVtKCJcblVuaXhRUGF0aEluZm8gcmV0dXJuIGRhdGEiLCAmZmluZERhdGEsCiAJCSBzaXplb2YoZmluZERhdGEpKTsgKi8KIAlpZiAocmMpIHsKLQkJaWYgKHJjID09IC1FUkVNT1RFKSB7Ci0JCQl0bXBfcGF0aCA9Ci0JCQkgICAga21hbGxvYyhzdHJubGVuKHBUY29uLT50cmVlTmFtZSwKLQkJCQkJICAgIE1BWF9UUkVFX1NJWkUgKyAxKSArCi0JCQkJICAgIHN0cm5sZW4oc2VhcmNoX3BhdGgsIE1BWF9QQVRIQ09ORikgKyAxLAotCQkJCSAgICBHRlBfS0VSTkVMKTsKLQkJCWlmICh0bXBfcGF0aCA9PSBOVUxMKQotCQkJCXJldHVybiAtRU5PTUVNOwotCi0JCQkvKiBoYXZlIHRvIHNraXAgZmlyc3Qgb2YgdGhlIGRvdWJsZSBiYWNrc2xhc2ggb2YKLQkJCSAgIFVOQyBuYW1lICovCi0JCQlzdHJuY3B5KHRtcF9wYXRoLCBwVGNvbi0+dHJlZU5hbWUsIE1BWF9UUkVFX1NJWkUpOwotCQkJc3RybmNhdCh0bXBfcGF0aCwgc2VhcmNoX3BhdGgsIE1BWF9QQVRIQ09ORik7Ci0JCQlyYyA9IGNvbm5lY3RfdG9fZGZzX3BhdGgoeGlkLCBwVGNvbi0+c2VzLAotCQkJCQkJIC8qIHRyZWVuYW1lICsgKi8gdG1wX3BhdGgsCi0JCQkJCQkgY2lmc19zYi0+bG9jYWxfbmxzLAotCQkJCQkJIGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYKLQkJCQkJCSAgICBDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7Ci0JCQlrZnJlZSh0bXBfcGF0aCk7Ci0KLQkJCS8qIEJCIGZpeCB1cCBpbm9kZSBldGMuICovCi0JCX0gZWxzZSBpZiAocmMpIHsKLQkJCXJldHVybiByYzsKKwkJaWYgKHJjID09IC1FUkVNT1RFICYmICFpc19kZnNfcmVmZXJyYWwpIHsKKwkJCWlzX2Rmc19yZWZlcnJhbCA9IHRydWU7CisJCQlpZiAoZnVsbF9wYXRoICE9IHNlYXJjaF9wYXRoKSB7CisJCQkJa2ZyZWUoZnVsbF9wYXRoKTsKKwkJCQlmdWxsX3BhdGggPSBzZWFyY2hfcGF0aDsKKwkJCX0KKwkJCWdvdG8gdHJ5X2FnYWluX0NJRlNTTUJVbml4UVBhdGhJbmZvOwogCQl9CisJCWdvdG8gY2dpaXVfZXhpdDsKIAl9IGVsc2UgewogCQlzdHJ1Y3QgY2lmc0lub2RlSW5mbyAqY2lmc0luZm87CiAJCV9fdTY0IG51bV9vZl9ieXRlcyA9IGxlNjRfdG9fY3B1KGZpbmREYXRhLk51bU9mQnl0ZXMpOwpAQCAtMjA0LDggKzIyNiwxMCBAQAogCQkvKiBnZXQgbmV3IGlub2RlICovCiAJCWlmICgqcGlub2RlID09IE5VTEwpIHsKIAkJCSpwaW5vZGUgPSBuZXdfaW5vZGUoc2IpOwotCQkJaWYgKCpwaW5vZGUgPT0gTlVMTCkKLQkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCWlmICgqcGlub2RlID09IE5VTEwpIHsKKwkJCQlyYyA9IC1FTk9NRU07CisJCQkJZ290byBjZ2lpdV9leGl0OworCQkJfQogCQkJLyogSXMgYW4gaV9pbm8gb2YgemVybyBsZWdhbD8gKi8KIAkJCS8qIEFyZSB0aGVyZSBzYW5pdHkgY2hlY2tzIHdlIGNhbiB1c2UgdG8gZW5zdXJlIHRoYXQKIAkJCSAgIHRoZSBzZXJ2ZXIgaXMgcmVhbGx5IGZpbGxpbmcgaW4gdGhhdCBmaWVsZD8gKi8KQEAgLTIzNyw4ICsyNjEsMTEgQEAKIAkJCSh1bnNpZ25lZCBsb25nKSBpbm9kZS0+aV9zaXplLAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylpbm9kZS0+aV9ibG9ja3MpKTsKIAotCQljaWZzX3NldF9vcHMoaW5vZGUpOworCQljaWZzX3NldF9vcHMoaW5vZGUsIGlzX2Rmc19yZWZlcnJhbCk7CiAJfQorY2dpaXVfZXhpdDoKKwlpZiAoZnVsbF9wYXRoICE9IHNlYXJjaF9wYXRoKQorCQlrZnJlZShmdWxsX3BhdGgpOwogCXJldHVybiByYzsKIH0KIApAQCAtMzQ3LDE1ICszNzQsMTYgQEAKIAogaW50IGNpZnNfZ2V0X2lub2RlX2luZm8oc3RydWN0IGlub2RlICoqcGlub2RlLAogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlYXJjaF9wYXRoLCBGSUxFX0FMTF9JTkZPICpwZmluZERhdGEsCi0Jc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHhpZCkKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgeGlkLCBjb25zdCBfX3UxNiAqcGZpZCkKIHsKIAlpbnQgcmMgPSAwOwogCXN0cnVjdCBjaWZzVGNvbkluZm8gKnBUY29uOwogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYiA9IENJRlNfU0Ioc2IpOwotCWNoYXIgKnRtcF9wYXRoOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmZ1bGxfcGF0aCA9IE5VTEw7CiAJY2hhciAqYnVmID0gTlVMTDsKIAlpbnQgYWRqdXN0VFogPSBGQUxTRTsKKwlib29sIGlzX2Rmc19yZWZlcnJhbCA9IGZhbHNlOwogCiAJcFRjb24gPSBjaWZzX3NiLT50Y29uOwogCWNGWUkoMSwgKCJHZXR0aW5nIGluZm8gb24gJXMiLCBzZWFyY2hfcGF0aCkpOwpAQCAtMzczLDggKzQwMSwxMiBAQAogCQlpZiAoYnVmID09IE5VTEwpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJcGZpbmREYXRhID0gKEZJTEVfQUxMX0lORk8gKilidWY7CisKKwkJZnVsbF9wYXRoID0gY2lmc19nZXRfc2VhcmNoX3BhdGgocFRjb24sIHNlYXJjaF9wYXRoKTsKKwordHJ5X2FnYWluX0NJRlNTTUJRUGF0aEluZm86CiAJCS8qIGNvdWxkIGRvIGZpbmQgZmlyc3QgaW5zdGVhZCBidXQgdGhpcyByZXR1cm5zIG1vcmUgaW5mbyAqLwotCQlyYyA9IENJRlNTTUJRUGF0aEluZm8oeGlkLCBwVGNvbiwgc2VhcmNoX3BhdGgsIHBmaW5kRGF0YSwKKwkJcmMgPSBDSUZTU01CUVBhdGhJbmZvKHhpZCwgcFRjb24sIGZ1bGxfcGF0aCwgcGZpbmREYXRhLAogCQkJICAgICAgMCAvKiBub3QgbGVnYWN5ICovLAogCQkJICAgICAgY2lmc19zYi0+bG9jYWxfbmxzLCBjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmCiAJCQkJQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOwpAQCAtMzgyLDcgKzQxNCw3IEBACiAJCXdoZW4gc2VydmVyIGNsYWltcyBubyBOVCBTTUIgc3VwcG9ydCBhbmQgdGhlIGFib3ZlIGNhbGwKIAkJZmFpbGVkIGF0IGxlYXN0IG9uY2UgLSBzZXQgZmxhZyBpbiB0Y29uIG9yIG1vdW50ICovCiAJCWlmICgocmMgPT0gLUVPUE5PVFNVUFApIHx8IChyYyA9PSAtRUlOVkFMKSkgewotCQkJcmMgPSBTTUJRdWVyeUluZm9ybWF0aW9uKHhpZCwgcFRjb24sIHNlYXJjaF9wYXRoLAorCQkJcmMgPSBTTUJRdWVyeUluZm9ybWF0aW9uKHhpZCwgcFRjb24sIGZ1bGxfcGF0aCwKIAkJCQkJcGZpbmREYXRhLCBjaWZzX3NiLT5sb2NhbF9ubHMsCiAJCQkJCWNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYKIAkJCQkJICBDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7CkBAIC0zOTEsMzEgKzQyMywxNSBAQAogCX0KIAkvKiBkdW1wX21lbSgiXG5RUGF0aEluZm8gcmV0dXJuIGRhdGEiLCZmaW5kRGF0YSwgc2l6ZW9mKGZpbmREYXRhKSk7ICovCiAJaWYgKHJjKSB7Ci0JCWlmIChyYyA9PSAtRVJFTU9URSkgewotCQkJdG1wX3BhdGggPQotCQkJICAgIGttYWxsb2Moc3RybmxlbgotCQkJCSAgICAocFRjb24tPnRyZWVOYW1lLAotCQkJCSAgICAgTUFYX1RSRUVfU0laRSArIDEpICsKLQkJCQkgICAgc3RybmxlbihzZWFyY2hfcGF0aCwgTUFYX1BBVEhDT05GKSArIDEsCi0JCQkJICAgIEdGUF9LRVJORUwpOwotCQkJaWYgKHRtcF9wYXRoID09IE5VTEwpIHsKLQkJCQlrZnJlZShidWYpOwotCQkJCXJldHVybiAtRU5PTUVNOworCQlpZiAocmMgPT0gLUVSRU1PVEUgJiYgIWlzX2Rmc19yZWZlcnJhbCkgeworCQkJaXNfZGZzX3JlZmVycmFsID0gdHJ1ZTsKKwkJCWlmIChmdWxsX3BhdGggIT0gc2VhcmNoX3BhdGgpIHsKKwkJCQlrZnJlZShmdWxsX3BhdGgpOworCQkJCWZ1bGxfcGF0aCA9IHNlYXJjaF9wYXRoOwogCQkJfQotCi0JCQlzdHJuY3B5KHRtcF9wYXRoLCBwVGNvbi0+dHJlZU5hbWUsIE1BWF9UUkVFX1NJWkUpOwotCQkJc3RybmNhdCh0bXBfcGF0aCwgc2VhcmNoX3BhdGgsIE1BWF9QQVRIQ09ORik7Ci0JCQlyYyA9IGNvbm5lY3RfdG9fZGZzX3BhdGgoeGlkLCBwVGNvbi0+c2VzLAotCQkJCQkJIC8qIHRyZWVuYW1lICsgKi8gdG1wX3BhdGgsCi0JCQkJCQkgY2lmc19zYi0+bG9jYWxfbmxzLAotCQkJCQkJIGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYKLQkJCQkJCSAgIENJRlNfTU9VTlRfTUFQX1NQRUNJQUxfQ0hSKTsKLQkJCWtmcmVlKHRtcF9wYXRoKTsKLQkJCS8qIEJCIGZpeCB1cCBpbm9kZSBldGMuICovCi0JCX0gZWxzZSBpZiAocmMpIHsKLQkJCWtmcmVlKGJ1Zik7Ci0JCQlyZXR1cm4gcmM7CisJCQlnb3RvIHRyeV9hZ2Fpbl9DSUZTU01CUVBhdGhJbmZvOwogCQl9CisJCWdvdG8gY2dpaV9leGl0OwogCX0gZWxzZSB7CiAJCXN0cnVjdCBjaWZzSW5vZGVJbmZvICpjaWZzSW5mbzsKIAkJX191MzIgYXR0ciA9IGxlMzJfdG9fY3B1KHBmaW5kRGF0YS0+QXR0cmlidXRlcyk7CkBAIC00MjQsOCArNDQwLDggQEAKIAkJaWYgKCpwaW5vZGUgPT0gTlVMTCkgewogCQkJKnBpbm9kZSA9IG5ld19pbm9kZShzYik7CiAJCQlpZiAoKnBpbm9kZSA9PSBOVUxMKSB7Ci0JCQkJa2ZyZWUoYnVmKTsKLQkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCQlyYyA9IC1FTk9NRU07CisJCQkJZ290byBjZ2lpX2V4aXQ7CiAJCQl9CiAJCQkvKiBJcyBhbiBpX2lubyBvZiB6ZXJvIGxlZ2FsPyBDYW4gd2UgdXNlIHRoYXQgdG8gY2hlY2sKIAkJCSAgIGlmIHRoZSBzZXJ2ZXIgc3VwcG9ydHMgcmV0dXJuaW5nIGlub2RlIG51bWJlcnM/ICBBcmUKQEAgLTU1OSw3ICs1NzUsNyBAQAogCQkvKiBmaWxsIGluIDA3NzcgYml0cyBmcm9tIEFDTCAqLwogCQlpZiAoY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJiBDSUZTX01PVU5UX0NJRlNfQUNMKSB7CiAJCQljRllJKDEsICgiR2V0dGluZyBtb2RlIGJpdHMgZnJvbSBBQ0wiKSk7Ci0JCQlhY2xfdG9fdWlkX21vZGUoaW5vZGUsIHNlYXJjaF9wYXRoKTsKKwkJCWFjbF90b191aWRfbW9kZShpbm9kZSwgc2VhcmNoX3BhdGgsIHBmaWQpOwogCQl9CiAjZW5kaWYKIAkJaWYgKGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgQ0lGU19NT1VOVF9VTlhfRU1VTCkgewpAQCAtNTczLDggKzU4OSwxMSBAQAogCQkJYXRvbWljX3NldCgmY2lmc0luZm8tPmluVXNlLCAxKTsKIAkJfQogCi0JCWNpZnNfc2V0X29wcyhpbm9kZSk7CisJCWNpZnNfc2V0X29wcyhpbm9kZSwgaXNfZGZzX3JlZmVycmFsKTsKIAl9CitjZ2lpX2V4aXQ6CisJaWYgKGZ1bGxfcGF0aCAhPSBzZWFyY2hfcGF0aCkKKwkJa2ZyZWUoZnVsbF9wYXRoKTsKIAlrZnJlZShidWYpOwogCXJldHVybiByYzsKIH0KQEAgLTYwMyw3ICs2MjIsOCBAQAogCWlmIChjaWZzX3NiLT50Y29uLT51bml4X2V4dCkKIAkJcmMgPSBjaWZzX2dldF9pbm9kZV9pbmZvX3VuaXgoJmlub2RlLCAiIiwgaW5vZGUtPmlfc2IsIHhpZCk7CiAJZWxzZQotCQlyYyA9IGNpZnNfZ2V0X2lub2RlX2luZm8oJmlub2RlLCAiIiwgTlVMTCwgaW5vZGUtPmlfc2IsIHhpZCk7CisJCXJjID0gY2lmc19nZXRfaW5vZGVfaW5mbygmaW5vZGUsICIiLCBOVUxMLCBpbm9kZS0+aV9zYiwgeGlkLAorCQkJCQkgTlVMTCk7CiAJaWYgKHJjICYmIGNpZnNfc2ItPnRjb24tPmlwYykgewogCQljRllJKDEsICgiaXBjIGNvbm5lY3Rpb24gLSBmYWtlIHJlYWQgaW5vZGUiKSk7CiAJCWlub2RlLT5pX21vZGUgfD0gU19JRkRJUjsKQEAgLTgwNCw3ICs4MjQsNyBAQAogCWxvY2FsX3NpemUgID0gdG1wX2lub2RlLT5pX3NpemU7CiAKIAljaWZzX3VuaXhfaW5mb190b19pbm9kZSh0bXBfaW5vZGUsIHBEYXRhLCAxKTsKLQljaWZzX3NldF9vcHModG1wX2lub2RlKTsKKwljaWZzX3NldF9vcHModG1wX2lub2RlLCBmYWxzZSk7CiAKIAlpZiAoIVNfSVNSRUcodG1wX2lub2RlLT5pX21vZGUpKQogCQlyZXR1cm47CkBAIC05MzYsNyArOTU2LDcgQEAKIAkJCQkJCSAgICAgIGlub2RlLT5pX3NiLCB4aWQpOwogCQllbHNlCiAJCQlyYyA9IGNpZnNfZ2V0X2lub2RlX2luZm8oJm5ld2lub2RlLCBmdWxsX3BhdGgsIE5VTEwsCi0JCQkJCQkgaW5vZGUtPmlfc2IsIHhpZCk7CisJCQkJCQkgaW5vZGUtPmlfc2IsIHhpZCwgTlVMTCk7CiAKIAkJaWYgKHBUY29uLT5ub2Nhc2UpCiAJCQlkaXJlbnRyeS0+ZF9vcCA9ICZjaWZzX2NpX2RlbnRyeV9vcHM7CkBAIC0xMjE4LDcgKzEyMzgsNyBAQAogCQl9CiAJfSBlbHNlIHsKIAkJcmMgPSBjaWZzX2dldF9pbm9kZV9pbmZvKCZkaXJlbnRyeS0+ZF9pbm9kZSwgZnVsbF9wYXRoLCBOVUxMLAotCQkJCQkgZGlyZW50cnktPmRfc2IsIHhpZCk7CisJCQkJCSBkaXJlbnRyeS0+ZF9zYiwgeGlkLCBOVUxMKTsKIAkJaWYgKHJjKSB7CiAJCQljRllJKDEsICgiZXJyb3Igb24gZ2V0dGluZyByZXZhbGlkYXRlIGluZm8gJWQiLCByYykpOwogLyoJCQlpZiAocmMgIT0gLUVOT0VOVCkKQEAgLTE0MDcsMTEgKzE0MjcsMTAgQEAKIAl9CiAJY2lmc0lub2RlID0gQ0lGU19JKGRpcmVudHJ5LT5kX2lub2RlKTsKIAotCS8qIEJCIGNoZWNrIGlmIHdlIG5lZWQgdG8gcmVmcmVzaCBpbm9kZSBmcm9tIHNlcnZlciBub3cgPyBCQiAqLwotCi0JaWYgKGF0dHJzLT5pYV92YWxpZCAmIEFUVFJfU0laRSkgeworCWlmICgoYXR0cnMtPmlhX3ZhbGlkICYgQVRUUl9NVElNRSkgfHwgKGF0dHJzLT5pYV92YWxpZCAmIEFUVFJfU0laRSkpIHsKIAkJLyoKLQkJICAgRmx1c2ggZGF0YSBiZWZvcmUgY2hhbmdpbmcgZmlsZSBzaXplIG9uIHNlcnZlci4gSWYgdGhlCisJCSAgIEZsdXNoIGRhdGEgYmVmb3JlIGNoYW5naW5nIGZpbGUgc2l6ZSBvciBjaGFuZ2luZyB0aGUgbGFzdAorCQkgICB3cml0ZSB0aW1lIG9mIHRoZSBmaWxlIG9uIHRoZSBzZXJ2ZXIuIElmIHRoZQogCQkgICBmbHVzaCByZXR1cm5zIGVycm9yLCBzdG9yZSBpdCB0byByZXBvcnQgbGF0ZXIgYW5kIGNvbnRpbnVlLgogCQkgICBCQjogVGhpcyBzaG91bGQgYmUgc21hcnRlci4gV2h5IGJvdGhlciBmbHVzaGluZyBwYWdlcyB0aGF0CiAJCSAgIHdpbGwgYmUgdHJ1bmNhdGVkIGFueXdheT8gQWxzbywgc2hvdWxkIHdlIGVycm9yIG91dCBoZXJlIGlmCkBAIC0xNDIyLDcgKzE0NDEsOSBAQAogCQkJQ0lGU19JKGRpcmVudHJ5LT5kX2lub2RlKS0+d3JpdGVfYmVoaW5kX3JjID0gcmM7CiAJCQlyYyA9IDA7CiAJCX0KKwl9CiAKKwlpZiAoYXR0cnMtPmlhX3ZhbGlkICYgQVRUUl9TSVpFKSB7CiAJCS8qIFRvIGF2b2lkIHNwdXJpb3VzIG9wbG9jayBicmVha3MgZnJvbSBzZXJ2ZXIsIGluIHRoZSBjYXNlIG9mCiAJCSAgIGlub2RlcyB0aGF0IHdlIGFscmVhZHkgaGF2ZSBvcGVuLCBhdm9pZCBkb2luZyBwYXRoIGJhc2VkCiAJCSAgIHNldHRpbmcgb2YgZmlsZSBzaXplIGlmIHdlIGNhbiBkbyBpdCBieSBoYW5kbGUuCmRpZmYgLS1naXQgYS9mcy9jaWZzL2xpbmsuYyBiL2ZzL2NpZnMvbGluay5jCmluZGV4IDFkNmZiMDEuLmQ0ZTdlYzkgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvbGluay5jCisrKyBiL2ZzL2NpZnMvbGluay5jCkBAIC0yMDUsNyArMjA1LDcgQEAKIAkJCQkJCSAgICAgIGlub2RlLT5pX3NiLCB4aWQpOwogCQllbHNlCiAJCQlyYyA9IGNpZnNfZ2V0X2lub2RlX2luZm8oJm5ld2lub2RlLCBmdWxsX3BhdGgsIE5VTEwsCi0JCQkJCQkgaW5vZGUtPmlfc2IsIHhpZCk7CisJCQkJCQkgaW5vZGUtPmlfc2IsIHhpZCwgTlVMTCk7CiAKIAkJaWYgKHJjICE9IDApIHsKIAkJCWNGWUkoMSwgKCJDcmVhdGUgc3ltbGluayBvaywgZ2V0aW5vZGVpbmZvIGZhaWwgcmMgPSAlZCIsCmRpZmYgLS1naXQgYS9mcy9kcXVvdC5jIGIvZnMvZHF1b3QuYwppbmRleCA5YzdmZWI2Li40MWI5ZGJkIDEwMDY0NAotLS0gYS9mcy9kcXVvdC5jCisrKyBiL2ZzL2RxdW90LmMKQEAgLTE1MjIsOCArMTUyMiw4IEBACiAJCQkJdHJ1bmNhdGVfaW5vZGVfcGFnZXMoJnRvcHV0aW5vZGVbY250XS0+aV9kYXRhLCAwKTsKIAkJCQltdXRleF91bmxvY2soJnRvcHV0aW5vZGVbY250XS0+aV9tdXRleCk7CiAJCQkJbWFya19pbm9kZV9kaXJ0eSh0b3B1dGlub2RlW2NudF0pOwotCQkJCWlwdXQodG9wdXRpbm9kZVtjbnRdKTsKIAkJCX0KKwkJCWlwdXQodG9wdXRpbm9kZVtjbnRdKTsKIAkJCW11dGV4X3VubG9jaygmZHFvcHQtPmRxb25vZmZfbXV0ZXgpOwogCQl9CiAJaWYgKHNiLT5zX2JkZXYpCmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9kZW50cnkuYyBiL2ZzL2VjcnlwdGZzL2RlbnRyeS5jCmluZGV4IDg0MWEwMzIuLjVlNTk2NTggMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL2RlbnRyeS5jCisrKyBiL2ZzL2VjcnlwdGZzL2RlbnRyeS5jCkBAIC04MCw4ICs4MCw4IEBACiB7CiAJaWYgKGVjcnlwdGZzX2RlbnRyeV90b19wcml2YXRlKGRlbnRyeSkpIHsKIAkJaWYgKGVjcnlwdGZzX2RlbnRyeV90b19sb3dlcihkZW50cnkpKSB7Ci0JCQltbnRwdXQoZWNyeXB0ZnNfZGVudHJ5X3RvX2xvd2VyX21udChkZW50cnkpKTsKIAkJCWRwdXQoZWNyeXB0ZnNfZGVudHJ5X3RvX2xvd2VyKGRlbnRyeSkpOworCQkJbW50cHV0KGVjcnlwdGZzX2RlbnRyeV90b19sb3dlcl9tbnQoZGVudHJ5KSk7CiAJCX0KIAkJa21lbV9jYWNoZV9mcmVlKGVjcnlwdGZzX2RlbnRyeV9pbmZvX2NhY2hlLAogCQkJCWVjcnlwdGZzX2RlbnRyeV90b19wcml2YXRlKGRlbnRyeSkpOwpkaWZmIC0tZ2l0IGEvZnMvZXh0My9hY2wuYyBiL2ZzL2V4dDMvYWNsLmMKaW5kZXggZDM0ZTk5Ni4uYTc1NGQxOCAxMDA2NDQKLS0tIGEvZnMvZXh0My9hY2wuYworKysgYi9mcy9leHQzL2FjbC5jCkBAIC0zNyw3ICszNyw3IEBACiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCWlmIChjb3VudCA9PSAwKQogCQlyZXR1cm4gTlVMTDsKLQlhY2wgPSBwb3NpeF9hY2xfYWxsb2MoY291bnQsIEdGUF9LRVJORUwpOworCWFjbCA9IHBvc2l4X2FjbF9hbGxvYyhjb3VudCwgR0ZQX05PRlMpOwogCWlmICghYWNsKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAlmb3IgKG49MDsgbiA8IGNvdW50OyBuKyspIHsKQEAgLTkxLDcgKzkxLDcgQEAKIAogCSpzaXplID0gZXh0M19hY2xfc2l6ZShhY2wtPmFfY291bnQpOwogCWV4dF9hY2wgPSBrbWFsbG9jKHNpemVvZihleHQzX2FjbF9oZWFkZXIpICsgYWNsLT5hX2NvdW50ICoKLQkJCXNpemVvZihleHQzX2FjbF9lbnRyeSksIEdGUF9LRVJORUwpOworCQkJc2l6ZW9mKGV4dDNfYWNsX2VudHJ5KSwgR0ZQX05PRlMpOwogCWlmICghZXh0X2FjbCkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAJZXh0X2FjbC0+YV92ZXJzaW9uID0gY3B1X3RvX2xlMzIoRVhUM19BQ0xfVkVSU0lPTik7CkBAIC0xODcsNyArMTg3LDcgQEAKIAl9CiAJcmV0dmFsID0gZXh0M194YXR0cl9nZXQoaW5vZGUsIG5hbWVfaW5kZXgsICIiLCBOVUxMLCAwKTsKIAlpZiAocmV0dmFsID4gMCkgewotCQl2YWx1ZSA9IGttYWxsb2MocmV0dmFsLCBHRlBfS0VSTkVMKTsKKwkJdmFsdWUgPSBrbWFsbG9jKHJldHZhbCwgR0ZQX05PRlMpOwogCQlpZiAoIXZhbHVlKQogCQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAJCXJldHZhbCA9IGV4dDNfeGF0dHJfZ2V0KGlub2RlLCBuYW1lX2luZGV4LCAiIiwgdmFsdWUsIHJldHZhbCk7CkBAIC0zMzUsNyArMzM1LDcgQEAKIAkJCWlmIChlcnJvcikKIAkJCQlnb3RvIGNsZWFudXA7CiAJCX0KLQkJY2xvbmUgPSBwb3NpeF9hY2xfY2xvbmUoYWNsLCBHRlBfS0VSTkVMKTsKKwkJY2xvbmUgPSBwb3NpeF9hY2xfY2xvbmUoYWNsLCBHRlBfTk9GUyk7CiAJCWVycm9yID0gLUVOT01FTTsKIAkJaWYgKCFjbG9uZSkKIAkJCWdvdG8gY2xlYW51cDsKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvcmVzaXplLmMgYi9mcy9leHQzL3Jlc2l6ZS5jCmluZGV4IDkzOTdkNzcuLjBlOTdiNmUgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvcmVzaXplLmMKKysrIGIvZnMvZXh0My9yZXNpemUuYwpAQCAtNDg1LDcgKzQ4NSw3IEBACiAJCWdvdG8gZXhpdF9kaW5kajsKIAogCW5fZ3JvdXBfZGVzYyA9IGttYWxsb2MoKGdkYl9udW0gKyAxKSAqIHNpemVvZihzdHJ1Y3QgYnVmZmVyX2hlYWQgKiksCi0JCQlHRlBfS0VSTkVMKTsKKwkJCUdGUF9OT0ZTKTsKIAlpZiAoIW5fZ3JvdXBfZGVzYykgewogCQllcnIgPSAtRU5PTUVNOwogCQlleHQzX3dhcm5pbmcgKHNiLCBfX0ZVTkNUSU9OX18sCkBAIC01NjgsNyArNTY4LDcgQEAKIAlpbnQgcmVzLCBpOwogCWludCBlcnI7CiAKLQlwcmltYXJ5ID0ga21hbGxvYyhyZXNlcnZlZF9nZGIgKiBzaXplb2YoKnByaW1hcnkpLCBHRlBfS0VSTkVMKTsKKwlwcmltYXJ5ID0ga21hbGxvYyhyZXNlcnZlZF9nZGIgKiBzaXplb2YoKnByaW1hcnkpLCBHRlBfTk9GUyk7CiAJaWYgKCFwcmltYXJ5KQogCQlyZXR1cm4gLUVOT01FTTsKIApkaWZmIC0tZ2l0IGEvZnMvZXh0My94YXR0ci5jIGIvZnMvZXh0My94YXR0ci5jCmluZGV4IGZiODljMjkuLmE2ZWE0ZDYgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMveGF0dHIuYworKysgYi9mcy9leHQzL3hhdHRyLmMKQEAgLTcyOCw3ICs3MjgsNyBAQAogCQkJCWNlID0gTlVMTDsKIAkJCX0KIAkJCWVhX2JkZWJ1Zyhicy0+YmgsICJjbG9uaW5nIik7Ci0JCQlzLT5iYXNlID0ga21hbGxvYyhicy0+YmgtPmJfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCQlzLT5iYXNlID0ga21hbGxvYyhicy0+YmgtPmJfc2l6ZSwgR0ZQX05PRlMpOwogCQkJZXJyb3IgPSAtRU5PTUVNOwogCQkJaWYgKHMtPmJhc2UgPT0gTlVMTCkKIAkJCQlnb3RvIGNsZWFudXA7CkBAIC03NDAsNyArNzQwLDcgQEAKIAkJfQogCX0gZWxzZSB7CiAJCS8qIEFsbG9jYXRlIGEgYnVmZmVyIHdoZXJlIHdlIGNvbnN0cnVjdCB0aGUgbmV3IGJsb2NrLiAqLwotCQlzLT5iYXNlID0ga3phbGxvYyhzYi0+c19ibG9ja3NpemUsIEdGUF9LRVJORUwpOworCQlzLT5iYXNlID0ga3phbGxvYyhzYi0+c19ibG9ja3NpemUsIEdGUF9OT0ZTKTsKIAkJLyogYXNzZXJ0KGhlYWRlciA9PSBzLT5iYXNlKSAqLwogCQllcnJvciA9IC1FTk9NRU07CiAJCWlmIChzLT5iYXNlID09IE5VTEwpCmRpZmYgLS1naXQgYS9mcy9mcy13cml0ZWJhY2suYyBiL2ZzL2ZzLXdyaXRlYmFjay5jCmluZGV4IGMwMDc2MDcuLjA2NTU3NjcgMTAwNjQ0Ci0tLSBhL2ZzL2ZzLXdyaXRlYmFjay5jCisrKyBiL2ZzL2ZzLXdyaXRlYmFjay5jCkBAIC03NTEsNyArNzUxLDcgQEAKIEVYUE9SVF9TWU1CT0woZ2VuZXJpY19vc3luY19pbm9kZSk7CiAKIC8qKgotICogd3JpdGViYWNrX2FjcXVpcmU6IGF0dGVtcHQgdG8gZ2V0IGV4Y2x1c2l2ZSB3cml0ZWJhY2sgYWNjZXNzIHRvIGEgZGV2aWNlCisgKiB3cml0ZWJhY2tfYWNxdWlyZSAtIGF0dGVtcHQgdG8gZ2V0IGV4Y2x1c2l2ZSB3cml0ZWJhY2sgYWNjZXNzIHRvIGEgZGV2aWNlCiAgKiBAYmRpOiB0aGUgZGV2aWNlJ3MgYmFja2luZ19kZXZfaW5mbyBzdHJ1Y3R1cmUKICAqCiAgKiBJdCBpcyBhIHdhc3RlIG9mIHJlc291cmNlcyB0byBoYXZlIG1vcmUgdGhhbiBvbmUgcGRmbHVzaCB0aHJlYWQgYmxvY2tlZCBvbgpAQCAtNzY4LDcgKzc2OCw3IEBACiB9CiAKIC8qKgotICogd3JpdGViYWNrX2luX3Byb2dyZXNzOiBkZXRlcm1pbmUgd2hldGhlciB0aGVyZSBpcyB3cml0ZWJhY2sgaW4gcHJvZ3Jlc3MKKyAqIHdyaXRlYmFja19pbl9wcm9ncmVzcyAtIGRldGVybWluZSB3aGV0aGVyIHRoZXJlIGlzIHdyaXRlYmFjayBpbiBwcm9ncmVzcwogICogQGJkaTogdGhlIGRldmljZSdzIGJhY2tpbmdfZGV2X2luZm8gc3RydWN0dXJlLgogICoKICAqIERldGVybWluZSB3aGV0aGVyIHRoZXJlIGlzIHdyaXRlYmFjayBpbiBwcm9ncmVzcyBhZ2FpbnN0IGEgYmFja2luZyBkZXZpY2UuCkBAIC03NzksNyArNzc5LDcgQEAKIH0KIAogLyoqCi0gKiB3cml0ZWJhY2tfcmVsZWFzZTogcmVsaW5xdWlzaCBleGNsdXNpdmUgd3JpdGViYWNrIGFjY2VzcyBhZ2FpbnN0IGEgZGV2aWNlLgorICogd3JpdGViYWNrX3JlbGVhc2UgLSByZWxpbnF1aXNoIGV4Y2x1c2l2ZSB3cml0ZWJhY2sgYWNjZXNzIGFnYWluc3QgYSBkZXZpY2UuCiAgKiBAYmRpOiB0aGUgZGV2aWNlJ3MgYmFja2luZ19kZXZfaW5mbyBzdHJ1Y3R1cmUKICAqLwogdm9pZCB3cml0ZWJhY2tfcmVsZWFzZShzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpKQpkaWZmIC0tZ2l0IGEvZnMvaGZzL2JyZWMuYyBiL2ZzL2hmcy9icmVjLmMKaW5kZXggODc4YmYyNS4uOTJmYjM1OCAxMDA2NDQKLS0tIGEvZnMvaGZzL2JyZWMuYworKysgYi9mcy9oZnMvYnJlYy5jCkBAIC0yMjksNyArMjI5LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgaGZzX2Jub2RlICpoZnNfYm5vZGVfc3BsaXQoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKQogewogCXN0cnVjdCBoZnNfYnRyZWUgKnRyZWU7Ci0Jc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgKm5ld19ub2RlOworCXN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsICpuZXdfbm9kZSwgKm5leHRfbm9kZTsKIAlzdHJ1Y3QgaGZzX2Jub2RlX2Rlc2Mgbm9kZV9kZXNjOwogCWludCBudW1fcmVjcywgbmV3X3JlY19vZmYsIG5ld19vZmYsIG9sZF9yZWNfb2ZmOwogCWludCBkYXRhX3N0YXJ0LCBkYXRhX2VuZCwgc2l6ZTsKQEAgLTI0OCw2ICsyNDgsMTcgQEAKIAluZXdfbm9kZS0+dHlwZSA9IG5vZGUtPnR5cGU7CiAJbmV3X25vZGUtPmhlaWdodCA9IG5vZGUtPmhlaWdodDsKIAorCWlmIChub2RlLT5uZXh0KQorCQluZXh0X25vZGUgPSBoZnNfYm5vZGVfZmluZCh0cmVlLCBub2RlLT5uZXh0KTsKKwllbHNlCisJCW5leHRfbm9kZSA9IE5VTEw7CisKKwlpZiAoSVNfRVJSKG5leHRfbm9kZSkpIHsKKwkJaGZzX2Jub2RlX3B1dChub2RlKTsKKwkJaGZzX2Jub2RlX3B1dChuZXdfbm9kZSk7CisJCXJldHVybiBuZXh0X25vZGU7CisJfQorCiAJc2l6ZSA9IHRyZWUtPm5vZGVfc2l6ZSAvIDIgLSBub2RlLT5udW1fcmVjcyAqIDIgLSAxNDsKIAlvbGRfcmVjX29mZiA9IHRyZWUtPm5vZGVfc2l6ZSAtIDQ7CiAJbnVtX3JlY3MgPSAxOwpAQCAtMjYxLDYgKzI3Miw4IEBACiAJCS8qIHBhbmljPyAqLwogCQloZnNfYm5vZGVfcHV0KG5vZGUpOwogCQloZnNfYm5vZGVfcHV0KG5ld19ub2RlKTsKKwkJaWYgKG5leHRfbm9kZSkKKwkJCWhmc19ibm9kZV9wdXQobmV4dF9ub2RlKTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT1NQQyk7CiAJfQogCkBAIC0zMTUsOCArMzI4LDcgQEAKIAloZnNfYm5vZGVfd3JpdGUobm9kZSwgJm5vZGVfZGVzYywgMCwgc2l6ZW9mKG5vZGVfZGVzYykpOwogCiAJLyogdXBkYXRlIG5leHQgYm5vZGUgaGVhZGVyICovCi0JaWYgKG5ld19ub2RlLT5uZXh0KSB7Ci0JCXN0cnVjdCBoZnNfYm5vZGUgKm5leHRfbm9kZSA9IGhmc19ibm9kZV9maW5kKHRyZWUsIG5ld19ub2RlLT5uZXh0KTsKKwlpZiAobmV4dF9ub2RlKSB7CiAJCW5leHRfbm9kZS0+cHJldiA9IG5ld19ub2RlLT50aGlzOwogCQloZnNfYm5vZGVfcmVhZChuZXh0X25vZGUsICZub2RlX2Rlc2MsIDAsIHNpemVvZihub2RlX2Rlc2MpKTsKIAkJbm9kZV9kZXNjLnByZXYgPSBjcHVfdG9fYmUzMihuZXh0X25vZGUtPnByZXYpOwpkaWZmIC0tZ2l0IGEvZnMvaXNvZnMvY29tcHJlc3MuYyBiL2ZzL2lzb2ZzL2NvbXByZXNzLmMKaW5kZXggMzdkYmQ2NC4uZGVmYjkzMiAxMDA2NDQKLS0tIGEvZnMvaXNvZnMvY29tcHJlc3MuYworKysgYi9mcy9pc29mcy9jb21wcmVzcy5jCkBAIC03Miw2ICs3MiwxNyBAQAogCW9mZnNldCA9IGluZGV4ICYgfnppc29mc19ibG9ja19wYWdlX21hc2s7CiAJYmxvY2tpbmRleCA9IG9mZnNldCA+PiB6aXNvZnNfYmxvY2tfcGFnZV9zaGlmdDsKIAltYXhwYWdlID0gKGlub2RlLT5pX3NpemUgKyBQQUdFX0NBQ0hFX1NJWkUgLSAxKSA+PiBQQUdFX0NBQ0hFX1NISUZUOworCisJLyoKKwkgKiBJZiB0aGlzIHBhZ2UgaXMgd2hvbGx5IG91dHNpZGUgaV9zaXplIHdlIGp1c3QgcmV0dXJuIHplcm87CisJICogZG9fZ2VuZXJpY19maWxlX3JlYWQoKSB3aWxsIGhhbmRsZSB0aGlzIGZvciB1cworCSAqLworCWlmIChwYWdlLT5pbmRleCA+PSBtYXhwYWdlKSB7CisJCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKKwkJdW5sb2NrX3BhZ2UocGFnZSk7CisJCXJldHVybiAwOworCX0KKwogCW1heHBhZ2UgPSBtaW4oemlzb2ZzX2Jsb2NrX3BhZ2VzLCBtYXhwYWdlLW9mZnNldCk7CiAKIAlmb3IgKCBpID0gMCA7IGkgPCBtYXhwYWdlIDsgaSsrLCBvZmZzZXQrKyApIHsKZGlmZiAtLWdpdCBhL2ZzL2piZC9qb3VybmFsLmMgYi9mcy9qYmQvam91cm5hbC5jCmluZGV4IDM5NDNhODkuLjk4MTYyOTMgMTAwNjQ0Ci0tLSBhL2ZzL2piZC9qb3VybmFsLmMKKysrIGIvZnMvamJkL2pvdXJuYWwuYwpAQCAtNjk3LDEzICs2OTcsMTQgQEAKICAqLwogCiAvKioKLSAqICBqb3VybmFsX3QgKiBqb3VybmFsX2luaXRfZGV2KCkgLSBjcmVhdGVzIGFuIGluaXRpYWxpc2VzIGEgam91cm5hbCBzdHJ1Y3R1cmUKKyAqICBqb3VybmFsX3QgKiBqb3VybmFsX2luaXRfZGV2KCkgLSBjcmVhdGVzIGFuZCBpbml0aWFsaXNlcyBhIGpvdXJuYWwgc3RydWN0dXJlCiAgKiAgQGJkZXY6IEJsb2NrIGRldmljZSBvbiB3aGljaCB0byBjcmVhdGUgdGhlIGpvdXJuYWwKICAqICBAZnNfZGV2OiBEZXZpY2Ugd2hpY2ggaG9sZCBqb3VybmFsbGVkIGZpbGVzeXN0ZW0gZm9yIHRoaXMgam91cm5hbC4KICAqICBAc3RhcnQ6IEJsb2NrIG5yIFN0YXJ0IG9mIGpvdXJuYWwuCiAgKiAgQGxlbjogIExlbmd0aCBvZiB0aGUgam91cm5hbCBpbiBibG9ja3MuCiAgKiAgQGJsb2Nrc2l6ZTogYmxvY2tzaXplIG9mIGpvdXJuYWxsaW5nIGRldmljZQotICogIEByZXR1cm5zOiBhIG5ld2x5IGNyZWF0ZWQgam91cm5hbF90ICoKKyAqCisgKiAgUmV0dXJuczogYSBuZXdseSBjcmVhdGVkIGpvdXJuYWxfdCAqCiAgKgogICogIGpvdXJuYWxfaW5pdF9kZXYgY3JlYXRlcyBhIGpvdXJuYWwgd2hpY2ggbWFwcyBhIGZpeGVkIGNvbnRpZ3VvdXMKICAqICByYW5nZSBvZiBibG9ja3Mgb24gYW4gYXJiaXRyYXJ5IGJsb2NrIGRldmljZS4KZGlmZiAtLWdpdCBhL2ZzL2piZC9yZWNvdmVyeS5jIGIvZnMvamJkL3JlY292ZXJ5LmMKaW5kZXggMmI4ZWRmNC4uNDNiYzVlNSAxMDA2NDQKLS0tIGEvZnMvamJkL3JlY292ZXJ5LmMKKysrIGIvZnMvamJkL3JlY292ZXJ5LmMKQEAgLTQ3OCw3ICs0NzgsNyBAQAogCQkJCQltZW1jcHkobmJoLT5iX2RhdGEsIG9iaC0+Yl9kYXRhLAogCQkJCQkJCWpvdXJuYWwtPmpfYmxvY2tzaXplKTsKIAkJCQkJaWYgKGZsYWdzICYgSkZTX0ZMQUdfRVNDQVBFKSB7Ci0JCQkJCQkqKChfX2JlMzIgKiliaC0+Yl9kYXRhKSA9CisJCQkJCQkqKChfX2JlMzIgKiluYmgtPmJfZGF0YSkgPQogCQkJCQkJY3B1X3RvX2JlMzIoSkZTX01BR0lDX05VTUJFUik7CiAJCQkJCX0KIApkaWZmIC0tZ2l0IGEvZnMvamJkL3RyYW5zYWN0aW9uLmMgYi9mcy9qYmQvdHJhbnNhY3Rpb24uYwppbmRleCBjNmNiYjZjLi4yYzllOGY1IDEwMDY0NAotLS0gYS9mcy9qYmQvdHJhbnNhY3Rpb24uYworKysgYi9mcy9qYmQvdHJhbnNhY3Rpb24uYwpAQCAtMTQyNiw3ICsxNDI2LDggQEAKIAlyZXR1cm4gZXJyOwogfQogCi0vKippbnQgam91cm5hbF9mb3JjZV9jb21taXQoKSAtIGZvcmNlIGFueSB1bmNvbW1pdHRlZCB0cmFuc2FjdGlvbnMKKy8qKgorICogaW50IGpvdXJuYWxfZm9yY2VfY29tbWl0KCkgLSBmb3JjZSBhbnkgdW5jb21taXR0ZWQgdHJhbnNhY3Rpb25zCiAgKiBAam91cm5hbDogam91cm5hbCB0byBmb3JjZQogICoKICAqIEZvciBzeW5jaHJvbm91cyBvcGVyYXRpb25zOiBmb3JjZSBhbnkgdW5jb21taXR0ZWQgdHJhbnNhY3Rpb25zCkBAIC0xOTAzLDEzICsxOTA0LDEyIEBACiB9CiAKIC8qKgotICogdm9pZCBqb3VybmFsX2ludmFsaWRhdGVwYWdlKCkKLSAqIEBqb3VybmFsOiBqb3VybmFsIHRvIHVzZSBmb3IgZmx1c2guLi4KKyAqIHZvaWQgam91cm5hbF9pbnZhbGlkYXRlcGFnZSgpIC0gaW52YWxpZGF0ZSBhIGpvdXJuYWwgcGFnZQorICogQGpvdXJuYWw6IGpvdXJuYWwgdG8gdXNlIGZvciBmbHVzaAogICogQHBhZ2U6ICAgIHBhZ2UgdG8gZmx1c2gKICAqIEBvZmZzZXQ6ICBsZW5ndGggb2YgcGFnZSB0byBpbnZhbGlkYXRlLgogICoKICAqIFJlYXAgcGFnZSBidWZmZXJzIGNvbnRhaW5pbmcgZGF0YSBhZnRlciBvZmZzZXQgaW4gcGFnZS4KLSAqCiAgKi8KIHZvaWQgam91cm5hbF9pbnZhbGlkYXRlcGFnZShqb3VybmFsX3QgKmpvdXJuYWwsCiAJCSAgICAgIHN0cnVjdCBwYWdlICpwYWdlLApkaWZmIC0tZ2l0IGEvZnMvamJkMi9yZWNvdmVyeS5jIGIvZnMvamJkMi9yZWNvdmVyeS5jCmluZGV4IDE0NjQxMTMuLjVkMDQwNWEgMTAwNjQ0Ci0tLSBhL2ZzL2piZDIvcmVjb3ZlcnkuYworKysgYi9mcy9qYmQyL3JlY292ZXJ5LmMKQEAgLTUzNSw3ICs1MzUsNyBAQAogCQkJCQltZW1jcHkobmJoLT5iX2RhdGEsIG9iaC0+Yl9kYXRhLAogCQkJCQkJCWpvdXJuYWwtPmpfYmxvY2tzaXplKTsKIAkJCQkJaWYgKGZsYWdzICYgSkJEMl9GTEFHX0VTQ0FQRSkgewotCQkJCQkJKigoX19iZTMyICopYmgtPmJfZGF0YSkgPQorCQkJCQkJKigoX19iZTMyICopbmJoLT5iX2RhdGEpID0KIAkJCQkJCWNwdV90b19iZTMyKEpCRDJfTUFHSUNfTlVNQkVSKTsKIAkJCQkJfQogCmRpZmYgLS1naXQgYS9mcy9sb2Nrcy5jIGIvZnMvbG9ja3MuYwppbmRleCBmMzZmMGU2Li5kODNmYWIxIDEwMDY0NAotLS0gYS9mcy9sb2Nrcy5jCisrKyBiL2ZzL2xvY2tzLmMKQEAgLTEyNzUsMTMgKzEyNzUsMTMgQEAKIEVYUE9SVF9TWU1CT0woX19icmVha19sZWFzZSk7CiAKIC8qKgotICoJbGVhc2VfZ2V0X210aW1lCisgKglsZWFzZV9nZXRfbXRpbWUgLSBnZXQgdGhlIGxhc3QgbW9kaWZpZWQgdGltZSBvZiBhbiBpbm9kZQogICoJQGlub2RlOiB0aGUgaW5vZGUKICAqICAgICAgQHRpbWU6ICBwb2ludGVyIHRvIGEgdGltZXNwZWMgd2hpY2ggd2lsbCBjb250YWluIHRoZSBsYXN0IG1vZGlmaWVkIHRpbWUKICAqCiAgKiBUaGlzIGlzIHRvIGZvcmNlIE5GUyBjbGllbnRzIHRvIGZsdXNoIHRoZWlyIGNhY2hlcyBmb3IgZmlsZXMgd2l0aAogICogZXhjbHVzaXZlIGxlYXNlcy4gIFRoZSBqdXN0aWZpY2F0aW9uIGlzIHRoYXQgaWYgc29tZW9uZSBoYXMgYW4KLSAqIGV4Y2x1c2l2ZSBsZWFzZSwgdGhlbiB0aGV5IGNvdWxkIGJlIG1vZGlmaXlpbmcgaXQuCisgKiBleGNsdXNpdmUgbGVhc2UsIHRoZW4gdGhleSBjb3VsZCBiZSBtb2RpZnlpbmcgaXQuCiAgKi8KIHZvaWQgbGVhc2VfZ2V0X210aW1lKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB0aW1lc3BlYyAqdGltZSkKIHsKZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jCmluZGV4IDk0MWM4ZTguLjZiN2EwZWUgMTAwNjQ0Ci0tLSBhL2ZzL25hbWVpLmMKKysrIGIvZnMvbmFtZWkuYwpAQCAtMTM2NCwxMyArMTM2NCwxMyBAQAogfQogCiAvKioKLSAqIGxvb2t1cF9vbmVfbGVuOiAgZmlsZXN5c3RlbSBoZWxwZXIgdG8gbG9va3VwIHNpbmdsZSBwYXRobmFtZSBjb21wb25lbnQKKyAqIGxvb2t1cF9vbmVfbGVuIC0gZmlsZXN5c3RlbSBoZWxwZXIgdG8gbG9va3VwIHNpbmdsZSBwYXRobmFtZSBjb21wb25lbnQKICAqIEBuYW1lOglwYXRobmFtZSBjb21wb25lbnQgdG8gbG9va3VwCiAgKiBAYmFzZToJYmFzZSBkaXJlY3RvcnkgdG8gbG9va3VwIGZyb20KICAqIEBsZW46CW1heGltdW0gbGVuZ3RoIEBsZW4gc2hvdWxkIGJlIGludGVycHJldGVkIHRvCiAgKgotICogTm90ZSB0aGF0IHRoaXMgcm91dGluZSBpcyBwdXJlbHkgYSBoZWxwZXIgZm9yIGZpbGVzeXN0ZW0gdXNlYWdlIGFuZCBzaG91bGQKLSAqIG5vdCBiZSBjYWxsZWQgYnkgZ2VuZXJpYyBjb2RlLiAgQWxzbyBub3RlIHRoYXQgYnkgdXNpbmcgdGhpcyBmdW5jdGlvbiB0bworICogTm90ZSB0aGF0IHRoaXMgcm91dGluZSBpcyBwdXJlbHkgYSBoZWxwZXIgZm9yIGZpbGVzeXN0ZW0gdXNhZ2UgYW5kIHNob3VsZAorICogbm90IGJlIGNhbGxlZCBieSBnZW5lcmljIGNvZGUuICBBbHNvIG5vdGUgdGhhdCBieSB1c2luZyB0aGlzIGZ1bmN0aW9uIHRoZQogICogbmFtZWlkYXRhIGFyZ3VtZW50IGlzIHBhc3NlZCB0byB0aGUgZmlsZXN5c3RlbSBtZXRob2RzIGFuZCBhIGZpbGVzeXN0ZW0KICAqIHVzaW5nIHRoaXMgaGVscGVyIG5lZWRzIHRvIGJlIHByZXBhcmVkIGZvciB0aGF0LgogICovCmRpZmYgLS1naXQgYS9mcy9uZnMvcmVhZC5jIGIvZnMvbmZzL3JlYWQuYwppbmRleCAzZDdkOTYzLi41YTcwYmU1IDEwMDY0NAotLS0gYS9mcy9uZnMvcmVhZC5jCisrKyBiL2ZzL25mcy9yZWFkLmMKQEAgLTUzMyw3ICs1MzMsMTAgQEAKIAogCWlmIChsZW4gPCBQQUdFX0NBQ0hFX1NJWkUpCiAJCXplcm9fdXNlcl9zZWdtZW50KHBhZ2UsIGxlbiwgUEFHRV9DQUNIRV9TSVpFKTsKLQluZnNfcGFnZWlvX2FkZF9yZXF1ZXN0KGRlc2MtPnBnaW8sIG5ldyk7CisJaWYgKCFuZnNfcGFnZWlvX2FkZF9yZXF1ZXN0KGRlc2MtPnBnaW8sIG5ldykpIHsKKwkJZXJyb3IgPSBkZXNjLT5wZ2lvLT5wZ19lcnJvcjsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KIAlyZXR1cm4gMDsKIG91dF9lcnJvcjoKIAllcnJvciA9IFBUUl9FUlIobmV3KTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9zdXBlci5jIGIvZnMvbmZzL3N1cGVyLmMKaW5kZXggZmNmNGI5OC4uZGQ0ZGZjZCAxMDA2NDQKLS0tIGEvZnMvbmZzL3N1cGVyLmMKKysrIGIvZnMvbmZzL3N1cGVyLmMKQEAgLTYzMiw3ICs2MzIsNyBAQAogCXN3aXRjaCAoYWRkci0+c2FfZmFtaWx5KSB7CiAJY2FzZSBBRl9JTkVUOiB7CiAJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2EgPSAoc3RydWN0IHNvY2thZGRyX2luICopYWRkcjsKLQkJcmV0dXJuIHNhLT5zaW5fYWRkci5zX2FkZHIgIT0gSU5BRERSX0FOWTsKKwkJcmV0dXJuIHNhLT5zaW5fYWRkci5zX2FkZHIgIT0gaHRvbmwoSU5BRERSX0FOWSk7CiAJfQogCWNhc2UgQUZfSU5FVDY6IHsKIAkJc3RydWN0IGluNl9hZGRyICpzYSA9ICYoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilhZGRyKS0+c2luNl9hZGRyOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL3dyaXRlLmMgYi9mcy9uZnMvd3JpdGUuYwppbmRleCA4MGM2MWZkLi5iZWQ2MzQxIDEwMDY0NAotLS0gYS9mcy9uZnMvd3JpdGUuYworKysgYi9mcy9uZnMvd3JpdGUuYwpAQCAtMzksNiArMzksNyBAQAogCQkJCQkgICAgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwogc3RhdGljIHZvaWQgbmZzX3BhZ2Vpb19pbml0X3dyaXRlKHN0cnVjdCBuZnNfcGFnZWlvX2Rlc2NyaXB0b3IgKmRlc2MsCiAJCQkJICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgaW9mbGFncyk7CitzdGF0aWMgdm9pZCBuZnNfcmVkaXJ0eV9yZXF1ZXN0KHN0cnVjdCBuZnNfcGFnZSAqcmVxKTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnBjX2NhbGxfb3BzIG5mc193cml0ZV9wYXJ0aWFsX29wczsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnBjX2NhbGxfb3BzIG5mc193cml0ZV9mdWxsX29wczsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnBjX2NhbGxfb3BzIG5mc19jb21taXRfb3BzOwpAQCAtMjg4LDcgKzI4OSwxMiBAQAogCQlCVUcoKTsKIAl9CiAJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwotCW5mc19wYWdlaW9fYWRkX3JlcXVlc3QocGdpbywgcmVxKTsKKwlpZiAoIW5mc19wYWdlaW9fYWRkX3JlcXVlc3QocGdpbywgcmVxKSkgeworCQluZnNfcmVkaXJ0eV9yZXF1ZXN0KHJlcSk7CisJCW5mc19lbmRfcGFnZV93cml0ZWJhY2socGFnZSk7CisJCW5mc19jbGVhcl9wYWdlX3RhZ19sb2NrZWQocmVxKTsKKwkJcmV0dXJuIHBnaW8tPnBnX2Vycm9yOworCX0KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnNmaC5jIGIvZnMvbmZzZC9uZnNmaC5jCmluZGV4IDFlYjc3MWQuLjNlNmIzZjQgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzZmguYworKysgYi9mcy9uZnNkL25mc2ZoLmMKQEAgLTIzMiw2ICsyMzIsNyBAQAogCQlmaHAtPmZoX2RlbnRyeSA9IGRlbnRyeTsKIAkJZmhwLT5maF9leHBvcnQgPSBleHA7CiAJCW5mc2RfbnJfdmVyaWZpZWQrKzsKKwkJY2FjaGVfZ2V0KCZleHAtPmgpOwogCX0gZWxzZSB7CiAJCS8qCiAJCSAqIGp1c3QgcmVjaGVja2luZyBwZXJtaXNzaW9ucwpAQCAtMjQxLDYgKzI0Miw3IEBACiAJCWRwcmludGsoIm5mc2Q6IGZoX3ZlcmlmeSAtIGp1c3QgY2hlY2tpbmdcbiIpOwogCQlkZW50cnkgPSBmaHAtPmZoX2RlbnRyeTsKIAkJZXhwID0gZmhwLT5maF9leHBvcnQ7CisJCWNhY2hlX2dldCgmZXhwLT5oKTsKIAkJLyoKIAkJICogU2V0IHVzZXIgY3JlZHMgZm9yIHRoaXMgZXhwb3J0cG9pbnQ7IG5lY2Vzc2FyeSBldmVuCiAJCSAqIGluIHRoZSAianVzdCBjaGVja2luZyIgY2FzZSBiZWNhdXNlIHRoaXMgbWF5IGJlIGEKQEAgLTI1Miw4ICsyNTQsNiBAQAogCQlpZiAoZXJyb3IpCiAJCQlnb3RvIG91dDsKIAl9Ci0JY2FjaGVfZ2V0KCZleHAtPmgpOwotCiAKIAllcnJvciA9IG5mc2RfbW9kZV9jaGVjayhycXN0cCwgZGVudHJ5LT5kX2lub2RlLT5pX21vZGUsIHR5cGUpOwogCWlmIChlcnJvcikKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvYmFzZS5jIGIvZnMvcHJvYy9iYXNlLmMKaW5kZXggOWE0ZGEwYS4uODFkN2QxNCAxMDA2NDQKLS0tIGEvZnMvcHJvYy9iYXNlLmMKKysrIGIvZnMvcHJvYy9iYXNlLmMKQEAgLTEwMzYsNiArMTAzNiwyNiBAQAogCS5yZWFkCQk9IHByb2NfbG9naW51aWRfcmVhZCwKIAkud3JpdGUJCT0gcHJvY19sb2dpbnVpZF93cml0ZSwKIH07CisKK3N0YXRpYyBzc2l6ZV90IHByb2Nfc2Vzc2lvbmlkX3JlYWQoc3RydWN0IGZpbGUgKiBmaWxlLCBjaGFyIF9fdXNlciAqIGJ1ZiwKKwkJCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBpbm9kZSAqIGlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2sgPSBnZXRfcHJvY190YXNrKGlub2RlKTsKKwlzc2l6ZV90IGxlbmd0aDsKKwljaGFyIHRtcGJ1ZltUTVBCVUZMRU5dOworCisJaWYgKCF0YXNrKQorCQlyZXR1cm4gLUVTUkNIOworCWxlbmd0aCA9IHNjbnByaW50Zih0bXBidWYsIFRNUEJVRkxFTiwgIiV1IiwKKwkJCQlhdWRpdF9nZXRfc2Vzc2lvbmlkKHRhc2spKTsKKwlwdXRfdGFza19zdHJ1Y3QodGFzayk7CisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKGJ1ZiwgY291bnQsIHBwb3MsIHRtcGJ1ZiwgbGVuZ3RoKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19zZXNzaW9uaWRfb3BlcmF0aW9ucyA9IHsKKwkucmVhZAkJPSBwcm9jX3Nlc3Npb25pZF9yZWFkLAorfTsKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0ZBVUxUX0lOSkVDVElPTgpAQCAtMjI3MCw3ICsyMjkwLDcgQEAKIAlESVIoImZkIiwgICAgICAgICBTX0lSVVNSfFNfSVhVU1IsIGZkKSwKIAlESVIoImZkaW5mbyIsICAgICBTX0lSVVNSfFNfSVhVU1IsIGZkaW5mbyksCiAjaWZkZWYgQ09ORklHX05FVAotCURJUigibmV0IiwgICAgICAgIFNfSVJVR098U19JWFVTUiwgbmV0KSwKKwlESVIoIm5ldCIsICAgICAgICBTX0lSVUdPfFNfSVhVR08sIG5ldCksCiAjZW5kaWYKIAlSRUcoImVudmlyb24iLCAgICBTX0lSVVNSLCBlbnZpcm9uKSwKIAlJTkYoImF1eHYiLCAgICAgICBTX0lSVVNSLCBwaWRfYXV4diksCkBAIC0yMzE5LDYgKzIzMzksNyBAQAogCVJFRygib29tX2FkaiIsICAgIFNfSVJVR098U19JV1VTUiwgb29tX2FkanVzdCksCiAjaWZkZWYgQ09ORklHX0FVRElUU1lTQ0FMTAogCVJFRygibG9naW51aWQiLCAgIFNfSVdVU1J8U19JUlVHTywgbG9naW51aWQpLAorCVJFRygic2Vzc2lvbmlkIiwgIFNfSVJVU1IsIHNlc3Npb25pZCksCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfRkFVTFRfSU5KRUNUSU9OCiAJUkVHKCJtYWtlLWl0LWZhaWwiLCBTX0lSVUdPfFNfSVdVU1IsIGZhdWx0X2luamVjdCksCkBAIC0yNjQ5LDYgKzI2NzAsNyBAQAogCVJFRygib29tX2FkaiIsICAgU19JUlVHT3xTX0lXVVNSLCBvb21fYWRqdXN0KSwKICNpZmRlZiBDT05GSUdfQVVESVRTWVNDQUxMCiAJUkVHKCJsb2dpbnVpZCIsICBTX0lXVVNSfFNfSVJVR08sIGxvZ2ludWlkKSwKKwlSRUcoInNlc3Npb25pZCIsICBTX0lSVVNSLCBzZXNzaW9uaWQpLAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0ZBVUxUX0lOSkVDVElPTgogCVJFRygibWFrZS1pdC1mYWlsIiwgU19JUlVHT3xTX0lXVVNSLCBmYXVsdF9pbmplY3QpLApkaWZmIC0tZ2l0IGEvZnMvcHJvYy90YXNrX21tdS5jIGIvZnMvcHJvYy90YXNrX21tdS5jCmluZGV4IDQyMDY0NTQuLjlkZmI1ZmYgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvdGFza19tbXUuYworKysgYi9mcy9wcm9jL3Rhc2tfbW11LmMKQEAgLTUyNywxMyArNTI3LDIxIEBACiAJY2hhciBfX3VzZXIgKm91dCwgKmVuZDsKIH07CiAKLSNkZWZpbmUgUE1fRU5UUllfQllURVMgc2l6ZW9mKHU2NCkKLSNkZWZpbmUgUE1fUkVTRVJWRURfQklUUyAgICAzCi0jZGVmaW5lIFBNX1JFU0VSVkVEX09GRlNFVCAgKDY0IC0gUE1fUkVTRVJWRURfQklUUykKLSNkZWZpbmUgUE1fUkVTRVJWRURfTUFTSyAgICAoKCgxTEw8PFBNX1JFU0VSVkVEX0JJVFMpLTEpIDw8IFBNX1JFU0VSVkVEX09GRlNFVCkKLSNkZWZpbmUgUE1fU1BFQ0lBTChucikgICAgICAoKChucikgPDwgUE1fUkVTRVJWRURfT0ZGU0VUKSAmIFBNX1JFU0VSVkVEX01BU0spCi0jZGVmaW5lIFBNX05PVF9QUkVTRU5UICAgICAgUE1fU1BFQ0lBTCgxTEwpCi0jZGVmaW5lIFBNX1NXQVAgICAgICAgICAgICAgUE1fU1BFQ0lBTCgyTEwpCisjZGVmaW5lIFBNX0VOVFJZX0JZVEVTICAgICAgc2l6ZW9mKHU2NCkKKyNkZWZpbmUgUE1fU1RBVFVTX0JJVFMgICAgICAzCisjZGVmaW5lIFBNX1NUQVRVU19PRkZTRVQgICAgKDY0IC0gUE1fU1RBVFVTX0JJVFMpCisjZGVmaW5lIFBNX1NUQVRVU19NQVNLICAgICAgKCgoMUxMIDw8IFBNX1NUQVRVU19CSVRTKSAtIDEpIDw8IFBNX1NUQVRVU19PRkZTRVQpCisjZGVmaW5lIFBNX1NUQVRVUyhucikgICAgICAgKCgobnIpIDw8IFBNX1NUQVRVU19PRkZTRVQpICYgUE1fU1RBVFVTX01BU0spCisjZGVmaW5lIFBNX1BTSElGVF9CSVRTICAgICAgNgorI2RlZmluZSBQTV9QU0hJRlRfT0ZGU0VUICAgIChQTV9TVEFUVVNfT0ZGU0VUIC0gUE1fUFNISUZUX0JJVFMpCisjZGVmaW5lIFBNX1BTSElGVF9NQVNLICAgICAgKCgoMUxMIDw8IFBNX1BTSElGVF9CSVRTKSAtIDEpIDw8IFBNX1BTSElGVF9PRkZTRVQpCisjZGVmaW5lIFBNX1BTSElGVCh4KSAgICAgICAgKCgodTY0KSAoeCkgPDwgUE1fUFNISUZUX09GRlNFVCkgJiBQTV9QU0hJRlRfTUFTSykKKyNkZWZpbmUgUE1fUEZSQU1FX01BU0sgICAgICAoKDFMTCA8PCBQTV9QU0hJRlRfT0ZGU0VUKSAtIDEpCisjZGVmaW5lIFBNX1BGUkFNRSh4KSAgICAgICAgKCh4KSAmIFBNX1BGUkFNRV9NQVNLKQorCisjZGVmaW5lIFBNX1BSRVNFTlQgICAgICAgICAgUE1fU1RBVFVTKDRMTCkKKyNkZWZpbmUgUE1fU1dBUCAgICAgICAgICAgICBQTV9TVEFUVVMoMkxMKQorI2RlZmluZSBQTV9OT1RfUFJFU0VOVCAgICAgIFBNX1BTSElGVChQQUdFX1NISUZUKQogI2RlZmluZSBQTV9FTkRfT0ZfQlVGRkVSICAgIDEKIAogc3RhdGljIGludCBhZGRfdG9fcGFnZW1hcCh1bnNpZ25lZCBsb25nIGFkZHIsIHU2NCBwZm4sCkBAIC01NzQsNyArNTgyLDcgQEAKIHU2NCBzd2FwX3B0ZV90b19wYWdlbWFwX2VudHJ5KHB0ZV90IHB0ZSkKIHsKIAlzd3BfZW50cnlfdCBlID0gcHRlX3RvX3N3cF9lbnRyeShwdGUpOwotCXJldHVybiBQTV9TV0FQIHwgc3dwX3R5cGUoZSkgfCAoc3dwX29mZnNldChlKSA8PCBNQVhfU1dBUEZJTEVTX1NISUZUKTsKKwlyZXR1cm4gc3dwX3R5cGUoZSkgfCAoc3dwX29mZnNldChlKSA8PCBNQVhfU1dBUEZJTEVTX1NISUZUKTsKIH0KIAogc3RhdGljIGludCBwYWdlbWFwX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLApAQCAtNTg4LDkgKzU5NiwxMSBAQAogCQl1NjQgcGZuID0gUE1fTk9UX1BSRVNFTlQ7CiAJCXB0ZSA9IHB0ZV9vZmZzZXRfbWFwKHBtZCwgYWRkcik7CiAJCWlmIChpc19zd2FwX3B0ZSgqcHRlKSkKLQkJCXBmbiA9IHN3YXBfcHRlX3RvX3BhZ2VtYXBfZW50cnkoKnB0ZSk7CisJCQlwZm4gPSBQTV9QRlJBTUUoc3dhcF9wdGVfdG9fcGFnZW1hcF9lbnRyeSgqcHRlKSkKKwkJCQl8IFBNX1BTSElGVChQQUdFX1NISUZUKSB8IFBNX1NXQVA7CiAJCWVsc2UgaWYgKHB0ZV9wcmVzZW50KCpwdGUpKQotCQkJcGZuID0gcHRlX3BmbigqcHRlKTsKKwkJCXBmbiA9IFBNX1BGUkFNRShwdGVfcGZuKCpwdGUpKQorCQkJCXwgUE1fUFNISUZUKFBBR0VfU0hJRlQpIHwgUE1fUFJFU0VOVDsKIAkJLyogdW5tYXAgc28gd2UncmUgbm90IGluIGF0b21pYyB3aGVuIHdlIGNvcHkgdG8gdXNlcnNwYWNlICovCiAJCXB0ZV91bm1hcChwdGUpOwogCQllcnIgPSBhZGRfdG9fcGFnZW1hcChhZGRyLCBwZm4sIHBtKTsKQEAgLTYxMSwxMiArNjIxLDIwIEBACiAvKgogICogL3Byb2MvcGlkL3BhZ2VtYXAgLSBhbiBhcnJheSBtYXBwaW5nIHZpcnR1YWwgcGFnZXMgdG8gcGZucwogICoKLSAqIEZvciBlYWNoIHBhZ2UgaW4gdGhlIGFkZHJlc3Mgc3BhY2UsIHRoaXMgZmlsZSBjb250YWlucyBvbmUgNjQtYml0Ci0gKiBlbnRyeSByZXByZXNlbnRpbmcgdGhlIGNvcnJlc3BvbmRpbmcgcGh5c2ljYWwgcGFnZSBmcmFtZSBudW1iZXIKLSAqIChQRk4pIGlmIHRoZSBwYWdlIGlzIHByZXNlbnQuIElmIHRoZXJlIGlzIGEgc3dhcCBlbnRyeSBmb3IgdGhlCi0gKiBwaHlzaWNhbCBwYWdlLCB0aGVuIGFuIGVuY29kaW5nIG9mIHRoZSBzd2FwIGZpbGUgbnVtYmVyIGFuZCB0aGUKLSAqIHBhZ2UncyBvZmZzZXQgaW50byB0aGUgc3dhcCBmaWxlIGFyZSByZXR1cm5lZC4gSWYgbm8gcGFnZSBpcwotICogcHJlc2VudCBhdCBhbGwsIFBNX05PVF9QUkVTRU5UIGlzIHJldHVybmVkLiBUaGlzIGFsbG93cyBkZXRlcm1pbmluZworICogRm9yIGVhY2ggcGFnZSBpbiB0aGUgYWRkcmVzcyBzcGFjZSwgdGhpcyBmaWxlIGNvbnRhaW5zIG9uZSA2NC1iaXQgZW50cnkKKyAqIGNvbnNpc3Rpbmcgb2YgdGhlIGZvbGxvd2luZzoKKyAqCisgKiBCaXRzIDAtNTUgIHBhZ2UgZnJhbWUgbnVtYmVyIChQRk4pIGlmIHByZXNlbnQKKyAqIEJpdHMgMC00ICAgc3dhcCB0eXBlIGlmIHN3YXBwZWQKKyAqIEJpdHMgNS01NSAgc3dhcCBvZmZzZXQgaWYgc3dhcHBlZAorICogQml0cyA1NS02MCBwYWdlIHNoaWZ0IChwYWdlIHNpemUgPSAxPDxwYWdlIHNoaWZ0KQorICogQml0ICA2MSAgICByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZQorICogQml0ICA2MiAgICBwYWdlIHN3YXBwZWQKKyAqIEJpdCAgNjMgICAgcGFnZSBwcmVzZW50CisgKgorICogSWYgdGhlIHBhZ2UgaXMgbm90IHByZXNlbnQgYnV0IGluIHN3YXAsIHRoZW4gdGhlIFBGTiBjb250YWlucyBhbgorICogZW5jb2Rpbmcgb2YgdGhlIHN3YXAgZmlsZSBudW1iZXIgYW5kIHRoZSBwYWdlJ3Mgb2Zmc2V0IGludG8gdGhlCisgKiBzd2FwLiBVbm1hcHBlZCBwYWdlcyByZXR1cm4gYSBudWxsIFBGTi4gVGhpcyBhbGxvd3MgZGV0ZXJtaW5pbmcKICAqIHByZWNpc2VseSB3aGljaCBwYWdlcyBhcmUgbWFwcGVkIChvciBpbiBzd2FwKSBhbmQgY29tcGFyaW5nIG1hcHBlZAogICogcGFnZXMgYmV0d2VlbiBwcm9jZXNzZXMuCiAgKgpkaWZmIC0tZ2l0IGEvZnMvcm9tZnMvaW5vZGUuYyBiL2ZzL3JvbWZzL2lub2RlLmMKaW5kZXggMDBiNmYwYS4uM2YxM2Q0OSAxMDA2NDQKLS0tIGEvZnMvcm9tZnMvaW5vZGUuYworKysgYi9mcy9yb21mcy9pbm9kZS5jCkBAIC0zNDAsOCArMzQwLDkgQEAKIHJvbWZzX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKIHsKIAl1bnNpZ25lZCBsb25nIG9mZnNldCwgbWF4b2ZmOwotCWludCBmc2xlbiwgcmVzOwotCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJbG9uZyByZXM7CisJaW50IGZzbGVuOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMOwogCWNoYXIgZnNuYW1lW1JPTUZTX01BWEZOXTsJLyogWFhYIGR5bmFtaWM/ICovCiAJc3RydWN0IHJvbWZzX2lub2RlIHJpOwogCWNvbnN0IGNoYXIgKm5hbWU7CQkvKiBnb3QgZnJvbSBkZW50cnkgKi8KQEAgLTM1MSw3ICszNTIsNyBAQAogCW9mZnNldCA9IGRpci0+aV9pbm8gJiBST01GSF9NQVNLOwogCWxvY2tfa2VybmVsKCk7CiAJaWYgKHJvbWZzX2NvcHlmcm9tKGRpciwgJnJpLCBvZmZzZXQsIFJPTUZIX1NJWkUpIDw9IDApCi0JCWdvdG8gb3V0OworCQlnb3RvIGVycm9yOwogCiAJbWF4b2ZmID0gcm9tZnNfbWF4c2l6ZShkaXItPmlfc2IpOwogCW9mZnNldCA9IGJlMzJfdG9fY3B1KHJpLnNwZWMpICYgUk9NRkhfTUFTSzsKQEAgLTM2NCw5ICszNjUsOSBAQAogCiAJZm9yKDs7KSB7CiAJCWlmICghb2Zmc2V0IHx8IG9mZnNldCA+PSBtYXhvZmYpCi0JCQlnb3RvIG91dDA7CisJCQlnb3RvIHN1Y2Nlc3M7IC8qIG5lZ2F0aXZlIHN1Y2Nlc3MgKi8KIAkJaWYgKHJvbWZzX2NvcHlmcm9tKGRpciwgJnJpLCBvZmZzZXQsIFJPTUZIX1NJWkUpIDw9IDApCi0JCQlnb3RvIG91dDsKKwkJCWdvdG8gZXJyb3I7CiAKIAkJLyogdHJ5IHRvIG1hdGNoIHRoZSBmaXJzdCAxNiBieXRlcyBvZiBuYW1lICovCiAJCWZzbGVuID0gcm9tZnNfc3RybmxlbihkaXIsIG9mZnNldCtST01GSF9TSVpFLCBST01GSF9TSVpFKTsKQEAgLTM5NywyMyArMzk4LDE0IEBACiAJaW5vZGUgPSByb21mc19pZ2V0KGRpci0+aV9zYiwgb2Zmc2V0KTsKIAlpZiAoSVNfRVJSKGlub2RlKSkgewogCQlyZXMgPSBQVFJfRVJSKGlub2RlKTsKLQkJZ290byBvdXQ7CisJCWdvdG8gZXJyb3I7CiAJfQogCi0JLyoKLQkgKiBpdCdzIGEgYml0IGZ1bmt5LCBfbG9va3VwIG5lZWRzIHRvIHJldHVybiBhbiBlcnJvciBjb2RlCi0JICogKG5lZ2F0aXZlKSBvciBhIE5VTEwsIGJvdGggYXMgYSBkZW50cnkuICBFTk9FTlQgc2hvdWxkIG5vdAotCSAqIGJlIHJldHVybmVkLCBpbnN0ZWFkIHdlIG5lZWQgdG8gY3JlYXRlIGEgbmVnYXRpdmUgZGVudHJ5IGJ5Ci0JICogZF9hZGQoZGVudHJ5LCBOVUxMKTsgYW5kIHJldHVybiAwIGFzIG5vIGVycm9yLgotCSAqIChBbHRob3VnaCBhcyBJIHNlZSwgaXQgb25seSBtYXR0ZXJzIG9uIHdyaXRhYmxlIGZpbGUKLQkgKiBzeXN0ZW1zKS4KLQkgKi8KLQotb3V0MDoJaW5vZGUgPSBOVUxMOworc3VjY2VzczoKKwlkX2FkZChkZW50cnksIGlub2RlKTsKIAlyZXMgPSAwOwotCWRfYWRkIChkZW50cnksIGlub2RlKTsKLQotb3V0Ogl1bmxvY2tfa2VybmVsKCk7CitlcnJvcjoKKwl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIEVSUl9QVFIocmVzKTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmMKaW5kZXggMDEwNDQ2ZC4uZDBhOTQxYSAxMDA2NDQKLS0tIGEvZnMvc3VwZXIuYworKysgYi9mcy9zdXBlci5jCkBAIC01NTYsMTEgKzU1NiwxMSBAQAogfQogCiAvKioKLSAqCW1hcmtfZmlsZXNfcm8KKyAqCW1hcmtfZmlsZXNfcm8gLSBtYXJrIGFsbCBmaWxlcyByZWFkLW9ubHkKICAqCUBzYjogc3VwZXJibG9jayBpbiBxdWVzdGlvbgogICoKLSAqCUFsbCBmaWxlcyBhcmUgbWFya2VkIHJlYWQvb25seS4gIFdlIGRvbid0IGNhcmUgYWJvdXQgcGVuZGluZwotICoJZGVsZXRlIGZpbGVzIHNvIHRoaXMgc2hvdWxkIGJlIHVzZWQgaW4gJ2ZvcmNlJyBtb2RlIG9ubHkKKyAqCUFsbCBmaWxlcyBhcmUgbWFya2VkIHJlYWQtb25seS4gIFdlIGRvbid0IGNhcmUgYWJvdXQgcGVuZGluZworICoJZGVsZXRlIGZpbGVzIHNvIHRoaXMgc2hvdWxkIGJlIHVzZWQgaW4gJ2ZvcmNlJyBtb2RlIG9ubHkuCiAgKi8KIAogc3RhdGljIHZvaWQgbWFya19maWxlc19ybyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQpkaWZmIC0tZ2l0IGEvZnMvdWZzL2JhbGxvYy5jIGIvZnMvdWZzL2JhbGxvYy5jCmluZGV4IDFmY2EzODEuLjFlNzU5OGYgMTAwNjQ0Ci0tLSBhL2ZzL3Vmcy9iYWxsb2MuYworKysgYi9mcy91ZnMvYmFsbG9jLmMKQEAgLTMxNSw4ICszMTUsOCBAQAogCQkJfQogCiAJCQlVRlNEKCIgY2hhbmdlIGZyb20gJWxsdSB0byAlbGx1LCBwb3MgJXVcbiIsCi0JCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcG9zICsgb2xkYiwKLQkJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylwb3MgKyBuZXdiLCBwb3MpOworCQkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKShwb3MgKyBvbGRiKSwKKwkJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykocG9zICsgbmV3YiksIHBvcyk7CiAKIAkJCWJoLT5iX2Jsb2NrbnIgPSBuZXdiICsgcG9zOwogCQkJdW5tYXBfdW5kZXJseWluZ19tZXRhZGF0YShiaC0+Yl9iZGV2LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9hdDkxY2FwOS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9hdDkxY2FwOS5oCmluZGV4IDczZTFmY2YuLmJhYzgzYWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MWNhcDkuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFjYXA5LmgKQEAgLTk3LDEyICs5NywxNyBAQAogI2RlZmluZSBBVDkxX1BJT0QJKDB4ZmZmZmY4MDAgLSBBVDkxX0JBU0VfU1lTKQogI2RlZmluZSBBVDkxX1BNQwkoMHhmZmZmZmMwMCAtIEFUOTFfQkFTRV9TWVMpCiAjZGVmaW5lIEFUOTFfUlNUQwkoMHhmZmZmZmQwMCAtIEFUOTFfQkFTRV9TWVMpCi0jZGVmaW5lIEFUOTFfU0hEQwkoMHhmZmZmZmQxMCAtIEFUOTFfQkFTRV9TWVMpCisjZGVmaW5lIEFUOTFfU0hEV0MJKDB4ZmZmZmZkMTAgLSBBVDkxX0JBU0VfU1lTKQogI2RlZmluZSBBVDkxX1JUVAkoMHhmZmZmZmQyMCAtIEFUOTFfQkFTRV9TWVMpCiAjZGVmaW5lIEFUOTFfUElUCSgweGZmZmZmZDMwIC0gQVQ5MV9CQVNFX1NZUykKICNkZWZpbmUgQVQ5MV9XRFQJKDB4ZmZmZmZkNDAgLSBBVDkxX0JBU0VfU1lTKQogI2RlZmluZSBBVDkxX0dQQlIJKDB4ZmZmZmZkNTAgLSBBVDkxX0JBU0VfU1lTKQogCisjZGVmaW5lIEFUOTFfVVNBUlQwCUFUOTFDQVA5X0JBU0VfVVMwCisjZGVmaW5lIEFUOTFfVVNBUlQxCUFUOTFDQVA5X0JBU0VfVVMxCisjZGVmaW5lIEFUOTFfVVNBUlQyCUFUOTFDQVA5X0JBU0VfVVMyCisKKwogLyoKICAqIEludGVybmFsIE1lbW9yeS4KICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9kc3BfY29tbW9uLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2RzcF9jb21tb24uaAppbmRleCBjNjFmODY4Li5kYTk3NzM2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2RzcF9jb21tb24uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2RzcF9jb21tb24uaApAQCAtMjQsMTEgKzI0LDE3IEBACiAjaWZuZGVmIEFTTV9BUkNIX0RTUF9DT01NT05fSAogI2RlZmluZSBBU01fQVJDSF9EU1BfQ09NTU9OX0gKIAotI2lmZGVmIENPTkZJR19BUkNIX09NQVAxCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMSkgJiYgZGVmaW5lZChDT05GSUdfT01BUF9NTVVfRldLKQogZXh0ZXJuIHZvaWQgb21hcF9kc3BfcmVxdWVzdF9tcHVpKHZvaWQpOwogZXh0ZXJuIHZvaWQgb21hcF9kc3BfcmVsZWFzZV9tcHVpKHZvaWQpOwogZXh0ZXJuIGludCBvbWFwX2RzcF9yZXF1ZXN0X21lbSh2b2lkKTsKIGV4dGVybiBpbnQgb21hcF9kc3BfcmVsZWFzZV9tZW0odm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgb21hcF9kc3BfcmVxdWVzdF9tZW0odm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKyNkZWZpbmUgb21hcF9kc3BfcmVsZWFzZV9tZW0oKQlkbyB7fSB3aGlsZSAoMCkKICNlbmRpZgogCiAjZW5kaWYgLyogQVNNX0FSQ0hfRFNQX0NPTU1PTl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2lycXMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvaXJxcy5oCmluZGV4IGQ4NThiM2UuLmY1NDM1ZDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvaXJxcy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvaXJxcy5oCkBAIC04NSw3ICs4NSw3IEBACiAjZGVmaW5lIElSUV9FSU5UMjMgICAgIFMzQzI0MTBfSVJRKDUxKQogCiAKLSNkZWZpbmUgSVJRX0VJTlQoeCkgICAgUzNDMjQxMF9JUlEoKHggPj0gNCkgPyAoSVJRX0VJTlQ0ICsgKHgpIC0gNCkgOiAoUzNDMjQxMF9JUlEoMCkgKyAoeCkpKQorI2RlZmluZSBJUlFfRUlOVCh4KSAgICAoKCh4KSA+PSA0KSA/IChJUlFfRUlOVDQgKyAoeCkgLSA0KSA6IChJUlFfRUlOVDAgKyAoeCkpKQogCiAjZGVmaW5lIElSUV9MQ0RfRklGTyAgIFMzQzI0MTBfSVJRKDUyKQogI2RlZmluZSBJUlFfTENEX0ZSQU1FICBTM0MyNDEwX0lSUSg1MykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9lbGYuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9lbGYuaAppbmRleCBjZTBjMGQ4Li5kMGE0YTgyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2MvZWxmLmgKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL2VsZi5oCkBAIC0yMDQsNyArMjA0LDcgQEAKIC8qCiAgKiBUaGUgZm9sbG93aW5nIGRlZmluaXRpb25zIGFyZSB0aG9zZSBmb3IgMzItYml0IEVMRiBiaW5hcmllcyBvbiBhIDMyLWJpdAogICoga2VybmVsIGFuZCBmb3IgNjQtYml0IGJpbmFyaWVzIG9uIGEgNjQtYml0IGtlcm5lbC4gIFRvIHJ1biAzMi1iaXQgYmluYXJpZXMKLSAqIG9uIGEgNjQtYml0IGtlcm5lbCwgYXJjaC9wYXJpc2M2NC9rZXJuZWwvYmluZm10X2VsZjMyLmMgZGVmaW5lcyB0aGVzZQorICogb24gYSA2NC1iaXQga2VybmVsLCBhcmNoL3BhcmlzYy9rZXJuZWwvYmluZm10X2VsZjMyLmMgZGVmaW5lcyB0aGVzZQogICogbWFjcm9zIGFwcHJvcHJpYXRlbHkgYW5kIHRoZW4gI2luY2x1ZGVzIGJpbmZtdF9lbGYuYywgd2hpY2ggdGhlbiBpbmNsdWRlcwogICogdGhpcyBmaWxlLgogICovCkBAIC0yMTYsMjYgKzIxNiwyNSBAQAogICogTm90ZSB0aGF0IHRoaXMgaGVhZGVyIGZpbGUgaXMgdXNlZCBieSBkZWZhdWx0IGluIGZzL2JpbmZtdF9lbGYuYy4gU28KICAqIHRoZSBmb2xsb3dpbmcgbWFjcm9zIGFyZSBmb3IgdGhlIGRlZmF1bHQgY2FzZS4gSG93ZXZlciwgZm9yIHRoZSA2NAogICogYml0IGtlcm5lbCB3ZSBhbHNvIHN1cHBvcnQgMzIgYml0IHBhcmlzYyBiaW5hcmllcy4gVG8gZG8gdGhhdAotICogYXJjaC9wYXJpc2M2NC9rZXJuZWwvYmluZm10X2VsZjMyLmMgZGVmaW5lcyBpdHMgb3duIHNldCBvZiB0aGVzZQorICogYXJjaC9wYXJpc2Mva2VybmVsL2JpbmZtdF9lbGYzMi5jIGRlZmluZXMgaXRzIG93biBzZXQgb2YgdGhlc2UKICAqIG1hY3JvcywgYW5kIHRoZW4gaXQgaW5jbHVkZXMgZnMvYmluZm10X2VsZi5jIHRvIHByb3ZpZGUgYW4gYWx0ZXJuYXRlCiAgKiBlbGYgYmluYXJ5IGhhbmRsZXIgZm9yIDMyIGJpdCBiaW5hcmllcyAob24gdGhlIDY0IGJpdCBrZXJuZWwpLgogICovCiAjaWZkZWYgQ09ORklHXzY0QklUCi0jZGVmaW5lIEVMRl9DTEFTUyAgICAgICBFTEZDTEFTUzY0CisjZGVmaW5lIEVMRl9DTEFTUyAgIEVMRkNMQVNTNjQKICNlbHNlCiAjZGVmaW5lIEVMRl9DTEFTUwlFTEZDTEFTUzMyCiAjZW5kaWYKIAogdHlwZWRlZiB1bnNpZ25lZCBsb25nIGVsZl9ncmVnX3Q7CiAKLS8qIFRoaXMgeWllbGRzIGEgc3RyaW5nIHRoYXQgbGQuc28gd2lsbCB1c2UgdG8gbG9hZCBpbXBsZW1lbnRhdGlvbgotICAgc3BlY2lmaWMgbGlicmFyaWVzIGZvciBvcHRpbWl6YXRpb24uICBUaGlzIGlzIG1vcmUgc3BlY2lmaWMgaW4KLSAgIGludGVudCB0aGFuIHBva2luZyBhdCB1bmFtZSBvciAvcHJvYy9jcHVpbmZvLgorLyoKKyAqIFRoaXMgeWllbGRzIGEgc3RyaW5nIHRoYXQgbGQuc28gd2lsbCB1c2UgdG8gbG9hZCBpbXBsZW1lbnRhdGlvbgorICogc3BlY2lmaWMgbGlicmFyaWVzIGZvciBvcHRpbWl6YXRpb24uICBUaGlzIGlzIG1vcmUgc3BlY2lmaWMgaW4KKyAqIGludGVudCB0aGFuIHBva2luZyBhdCB1bmFtZSBvciAvcHJvYy9jcHVpbmZvLgorICovCiAKLSAgIEZvciB0aGUgbW9tZW50LCB3ZSBoYXZlIG9ubHkgb3B0aW1pemF0aW9ucyBmb3IgdGhlIEludGVsIGdlbmVyYXRpb25zLAotICAgYnV0IHRoYXQgY291bGQgY2hhbmdlLi4uICovCi0KLSNkZWZpbmUgRUxGX1BMQVRGT1JNICAoIlBBUklTQ1wwIiAvKisoKGJvb3RfY3B1X2RhdGEueDg2LTMpKjUpICovKQorI2RlZmluZSBFTEZfUExBVEZPUk0gICgiUEFSSVNDXDAiKQogCiAjZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCwgaWJjczIpIFwKIAljdXJyZW50LT5wZXJzb25hbGl0eSA9IFBFUl9MSU5VWDsgXApAQCAtMzEwLDcgKzMwOSw3IEBACiAjZGVmaW5lIEVMRl9PU0FCSSAJRUxGT1NBQklfTElOVVgKIAogLyogJXIyMyBpcyBzZXQgYnkgbGQuc28gdG8gYSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gd2hpY2ggbWlnaHQgYmUgCi0gICByZWdpc3RlcmVkIHVzaW5nIGF0ZXhpdC4gIFRoaXMgcHJvdmlkZXMgYSBtZWFuIGZvciB0aGUgZHluYW1pYworICAgcmVnaXN0ZXJlZCB1c2luZyBhdGV4aXQuICBUaGlzIHByb3ZpZGVzIGEgbWVhbnMgZm9yIHRoZSBkeW5hbWljCiAgICBsaW5rZXIgdG8gY2FsbCBEVF9GSU5JIGZ1bmN0aW9ucyBmb3Igc2hhcmVkIGxpYnJhcmllcyB0aGF0IGhhdmUKICAgIGJlZW4gbG9hZGVkIGJlZm9yZSB0aGUgY29kZSBydW5zLgogCkBAIC0zMzksNiArMzM4LDUgQEAKICAgIGJ1dCBpdCdzIG5vdCBlYXN5LCBhbmQgd2UndmUgYWxyZWFkeSBkb25lIGl0IGhlcmUuICAqLwogCiAjZGVmaW5lIEVMRl9IV0NBUAkwCi0vKiAoYm9vdF9jcHVfZGF0YS54ODZfY2FwYWJpbGl0eSkgKi8KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvZml4bWFwLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvZml4bWFwLmgKaW5kZXggYTVjYWY0Yi4uZGUzZmUzYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL2ZpeG1hcC5oCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9maXhtYXAuaApAQCAtMjAsNCArMjAsMTEgQEAKICNkZWZpbmUgS0VSTkVMX01BUF9TVEFSVAkoR0FURVdBWV9QQUdFX1NJWkUpCiAjZGVmaW5lIEtFUk5FTF9NQVBfRU5ECQkoVE1QQUxJQVNfTUFQX1NUQVJUKQogCi0jZW5kaWYKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitleHRlcm4gdm9pZCAqdm1hbGxvY19zdGFydDsKKyNkZWZpbmUgUENYTF9ETUFfTUFQX1NJWkUJKDgqMTAyNCoxMDI0KQorI2RlZmluZSBWTUFMTE9DX1NUQVJUCQkoKHVuc2lnbmVkIGxvbmcpdm1hbGxvY19zdGFydCkKKyNkZWZpbmUgVk1BTExPQ19FTkQJCShLRVJORUxfTUFQX0VORCkKKyNlbmRpZiAvKl9fQVNTRU1CTFlfXyovCisKKyNlbmRpZiAvKl9BU01fRklYTUFQX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2Z1dGV4LmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvZnV0ZXguaAppbmRleCBkYmVlNmU2Li5mZGM2ZDA1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2MvZnV0ZXguaAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvZnV0ZXguaApAQCAtNTYsNiArNTYsMTIgQEAKIAlpbnQgZXJyID0gMDsKIAlpbnQgdXZhbDsKIAorCS8qIGZ1dGV4LmMgd2FudHMgdG8gZG8gYSBjbXB4Y2hnX2luYXRvbWljIG9uIGtlcm5lbCBOVUxMLCB3aGljaCBpcworCSAqIG91ciBnYXRld2F5IHBhZ2UsIGFuZCBjYXVzZXMgbm8gZW5kIG9mIHRyb3VibGUuLi4KKwkgKi8KKwlpZiAoc2VnbWVudF9lcShLRVJORUxfRFMsIGdldF9mcygpKSAmJiAhdWFkZHIpCisJCXJldHVybiAtRUZBVUxUOworCiAJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCB1YWRkciwgc2l6ZW9mKGludCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIApAQCAtNjcsNSArNzMsNSBAQAogCXJldHVybiB1dmFsOwogfQogCi0jZW5kaWYKLSNlbmRpZgorI2VuZGlmIC8qX19LRVJORUxfXyovCisjZW5kaWYgLypfQVNNX1BBUklTQ19GVVRFWF9IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9wZGMuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9wZGMuaAppbmRleCBkZWRhOGMzLi45ZWFhNzk0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2MvcGRjLmgKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL3BkYy5oCkBAIC02NDUsOCArNjQ1LDcgQEAKIHZvaWQgcGRjX2lvX3Jlc2V0KHZvaWQpOwogdm9pZCBwZGNfaW9fcmVzZXRfZGV2aWNlcyh2b2lkKTsKIGludCBwZGNfaW9kY19nZXRjKHZvaWQpOwotaW50IHBkY19pb2RjX3ByaW50KHVuc2lnbmVkIGNoYXIgKnN0ciwgdW5zaWduZWQgY291bnQpOwotdm9pZCBwZGNfcHJpbnRmKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKK2ludCBwZGNfaW9kY19wcmludChjb25zdCB1bnNpZ25lZCBjaGFyICpzdHIsIHVuc2lnbmVkIGNvdW50KTsKIAogdm9pZCBwZGNfZW1lcmdlbmN5X3VubG9jayh2b2lkKTsKIGludCBwZGNfc3RpX2NhbGwodW5zaWduZWQgbG9uZyBmdW5jLCB1bnNpZ25lZCBsb25nIGZsYWdzLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3BnYWxsb2MuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9wZ2FsbG9jLmgKaW5kZXggMzk5NmRmYy4uZmM5ODdhMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL3BnYWxsb2MuaAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvcGdhbGxvYy5oCkBAIC0xMzgsMTAgKzEzOCwxMCBAQAogCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwdGUpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcHRlX2ZyZWVfa2VybmVsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgcGFnZSAqcHRlKQorc3RhdGljIGlubGluZSB2b2lkIHB0ZV9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgcGFnZSAqcHRlKQogewogCXBndGFibGVfcGFnZV9kdG9yKHB0ZSk7Ci0JcHRlX2ZyZWVfa2VybmVsKHBhZ2VfYWRkcmVzcygocHRlKSk7CisJcHRlX2ZyZWVfa2VybmVsKG1tLCBwYWdlX2FkZHJlc3MocHRlKSk7CiB9CiAKICNkZWZpbmUgY2hlY2tfcGd0X2NhY2hlKCkJZG8geyB9IHdoaWxlICgwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9wZ3RhYmxlLmgKaW5kZXggY2QwZmE0Zi4uZGM4NmFkYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvcGd0YWJsZS5oCkBAIC0xMTYsMTQgKzExNiw2IEBACiAKICNkZWZpbmUgRklSU1RfVVNFUl9BRERSRVNTCTAKIAotI2lmbmRlZiBfX0FTU0VNQkxZX18KLWV4dGVybiAgdm9pZCAqdm1hbGxvY19zdGFydDsKLSNkZWZpbmUgUENYTF9ETUFfTUFQX1NJWkUgICAoOCoxMDI0KjEwMjQpCi0jZGVmaW5lIFZNQUxMT0NfU1RBUlQgICAoKHVuc2lnbmVkIGxvbmcpdm1hbGxvY19zdGFydCkKLS8qIHRoaXMgaXMgYSBmaXhtYXAgcmVtbmFudCwgc2VlIGZpeG1hcC5oICovCi0jZGVmaW5lIFZNQUxMT0NfRU5ECShLRVJORUxfTUFQX0VORCkKLSNlbmRpZgotCiAvKiBOQjogVGhlIHRsYiBtaXNzIGhhbmRsZXJzIG1ha2UgY2VydGFpbiBhc3N1bXB0aW9ucyBhYm91dCB0aGUgb3JkZXIgKi8KIC8qICAgICBvZiB0aGUgZm9sbG93aW5nIGJpdHMsIHNvIGJlIGNhcmVmdWwgKE9uZSBleGFtcGxlLCBiaXRzIDI1LTMxICAqLwogLyogICAgIGFyZSBtb3ZlZCB0b2dldGhlciBpbiBvbmUgaW5zdHJ1Y3Rpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvdW5pc3RkLmgKaW5kZXggMDgxYjRhZS4uYTdkODU3ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy91bmlzdGQuaApAQCAtNzk4LDggKzc5OCwxMSBAQAogI2RlZmluZSBfX05SX3RpbWVyZmQJCShfX05SX0xpbnV4ICsgMzAzKQogI2RlZmluZSBfX05SX2V2ZW50ZmQJCShfX05SX0xpbnV4ICsgMzA0KQogI2RlZmluZSBfX05SX2ZhbGxvY2F0ZQkJKF9fTlJfTGludXggKyAzMDUpCisjZGVmaW5lIF9fTlJfdGltZXJmZF9jcmVhdGUJKF9fTlJfTGludXggKyAzMDYpCisjZGVmaW5lIF9fTlJfdGltZXJmZF9zZXR0aW1lCShfX05SX0xpbnV4ICsgMzA3KQorI2RlZmluZSBfX05SX3RpbWVyZmRfZ2V0dGltZQkoX19OUl9MaW51eCArIDMwOCkKIAotI2RlZmluZSBfX05SX0xpbnV4X3N5c2NhbGxzCShfX05SX2ZhbGxvY2F0ZSArIDEpCisjZGVmaW5lIF9fTlJfTGludXhfc3lzY2FsbHMJKF9fTlJfdGltZXJmZF9nZXR0aW1lICsgMSkKIAogCiAjZGVmaW5lIF9fSUdOT1JFX3NlbGVjdAkJLyogbmV3c2VsZWN0ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9ieXRlb3JkZXIuaCBiL2luY2x1ZGUvYXNtLXNoL2J5dGVvcmRlci5oCmluZGV4IDBlYjk5MDQuLjRjMTNlNjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL2J5dGVvcmRlci5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL2J5dGVvcmRlci5oCkBAIC0xMSwxMyArMTEsMTMgQEAKIHN0YXRpYyBpbmxpbmUgX19hdHRyaWJ1dGVfY29uc3RfXyBfX3UzMiBfX19hcmNoX19zd2FiMzIoX191MzIgeCkKIHsKIAlfX2FzbV9fKAotI2lmZGVmIENPTkZJR19TVVBFUkgzMgorI2lmZGVmIF9fU0g1X18KKwkJImJ5dGVyZXYJJTAsICUwXG5cdCIKKwkJInNoYXJpCQklMCwgMzIsICUwIgorI2Vsc2UKIAkJInN3YXAuYgkJJTAsICUwXG5cdCIKIAkJInN3YXAudwkJJTAsICUwXG5cdCIKIAkJInN3YXAuYgkJJTAsICUwIgotI2Vsc2UKLQkJImJ5dGVyZXYJJTAsICUwXG5cdCIKLQkJInNoYXJpCQklMCwgMzIsICUwIgogI2VuZGlmCiAJCTogIj1yIiAoeCkKIAkJOiAiMCIgKHgpKTsKQEAgLTI4LDEyICsyOCwxMSBAQAogc3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9jb25zdF9fIF9fdTE2IF9fX2FyY2hfX3N3YWIxNihfX3UxNiB4KQogewogCV9fYXNtX18oCi0jaWZkZWYgQ09ORklHX1NVUEVSSDMyCi0JCSJzd2FwLmIJCSUwLCAlMCIKLSNlbHNlCisjaWZkZWYgX19TSDVfXwogCQkiYnl0ZXJldgklMCwgJTBcblx0IgogCQkic2hhcmkJCSUwLCAzMiwgJTAiCi0KKyNlbHNlCisJCSJzd2FwLmIJCSUwLCAlMCIKICNlbmRpZgogCQk6ICI9ciIgKHgpCiAJCTogICIwIiAoeCkpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvcG9zaXhfdHlwZXMuaCBiL2luY2x1ZGUvYXNtLXNoL3Bvc2l4X3R5cGVzLmgKaW5kZXggNGI5ZDExYy4uNGVlYjcyMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvcG9zaXhfdHlwZXMuaAorKysgYi9pbmNsdWRlL2FzbS1zaC9wb3NpeF90eXBlcy5oCkBAIC00LDQgKzQsMTAgQEAKICMgZWxzZQogIyAgaW5jbHVkZSAicG9zaXhfdHlwZXNfNjQuaCIKICMgZW5kaWYKKyNlbHNlCisjIGlmZGVmIF9fU0g1X18KKyMgIGluY2x1ZGUgInBvc2l4X3R5cGVzXzY0LmgiCisjIGVsc2UKKyMgIGluY2x1ZGUgInBvc2l4X3R5cGVzXzMyLmgiCisjIGVuZGlmCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9iYWNrb2ZmLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2JhY2tvZmYuaAppbmRleCBkYWRkNmMzLi5mYTFmZGY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2JhY2tvZmYuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2JhY2tvZmYuaApAQCAtMTIsNyArMTIsOCBAQAogCW1vdglyZWcsIHRtcDsgXAogODg6CWJybnoscHQJdG1wLCA4OGI7IFwKIAkgc3ViCXRtcCwgMSwgdG1wOyBcCi0JY21wCXJlZywgQkFDS09GRl9MSU1JVDsgXAorCXNldAlCQUNLT0ZGX0xJTUlULCB0bXA7IFwKKwljbXAJcmVnLCB0bXA7IFwKIAliZyxwbgkleGNjLCBsYWJlbDsgXAogCSBub3A7IFwKIAliYSxwdAkleGNjLCBsYWJlbDsgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2NtcHhjaGdfMzIuaCBiL2luY2x1ZGUvYXNtLXg4Ni9jbXB4Y2hnXzMyLmgKaW5kZXggY2VhMWRhZS4uOTU5ZmFkMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L2NtcHhjaGdfMzIuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvY21weGNoZ18zMi5oCkBAIC0yNjksMjIgKzI2OSwyNiBAQAogKHsJCQkJCQkJCQlcCiAJX190eXBlb2ZfXygqKHB0cikpIF9fcmV0OwkJCQkJXAogCWlmIChsaWtlbHkoYm9vdF9jcHVfZGF0YS54ODYgPiAzKSkJCQkJXAotCQlfX3JldCA9IF9fY21weGNoZygocHRyKSwgKHVuc2lnbmVkIGxvbmcpKG8pLAkJXAotCQkJCQkodW5zaWduZWQgbG9uZykobiksIHNpemVvZigqKHB0cikpKTsgXAorCQlfX3JldCA9IChfX3R5cGVvZl9fKCoocHRyKSkpX19jbXB4Y2hnKChwdHIpLAkJXAorCQkJCSh1bnNpZ25lZCBsb25nKShvKSwgKHVuc2lnbmVkIGxvbmcpKG4pLAlcCisJCQkJc2l6ZW9mKCoocHRyKSkpOwkJCVwKIAllbHNlCQkJCQkJCQlcCi0JCV9fcmV0ID0gY21weGNoZ18zODYoKHB0ciksICh1bnNpZ25lZCBsb25nKShvKSwJCVwKLQkJCQkJKHVuc2lnbmVkIGxvbmcpKG4pLCBzaXplb2YoKihwdHIpKSk7IFwKKwkJX19yZXQgPSAoX190eXBlb2ZfXygqKHB0cikpKWNtcHhjaGdfMzg2KChwdHIpLAkJXAorCQkJCSh1bnNpZ25lZCBsb25nKShvKSwgKHVuc2lnbmVkIGxvbmcpKG4pLAlcCisJCQkJc2l6ZW9mKCoocHRyKSkpOwkJCVwKIAlfX3JldDsJCQkJCQkJCVwKIH0pCiAjZGVmaW5lIGNtcHhjaGdfbG9jYWwocHRyLCBvLCBuKQkJCQkJXAogKHsJCQkJCQkJCQlcCiAJX190eXBlb2ZfXygqKHB0cikpIF9fcmV0OwkJCQkJXAogCWlmIChsaWtlbHkoYm9vdF9jcHVfZGF0YS54ODYgPiAzKSkJCQkJXAotCQlfX3JldCA9IF9fY21weGNoZ19sb2NhbCgocHRyKSwgKHVuc2lnbmVkIGxvbmcpKG8pLAlcCi0JCQkJCSh1bnNpZ25lZCBsb25nKShuKSwgc2l6ZW9mKCoocHRyKSkpOyBcCisJCV9fcmV0ID0gKF9fdHlwZW9mX18oKihwdHIpKSlfX2NtcHhjaGdfbG9jYWwoKHB0ciksCVwKKwkJCQkodW5zaWduZWQgbG9uZykobyksICh1bnNpZ25lZCBsb25nKShuKSwJXAorCQkJCXNpemVvZigqKHB0cikpKTsJCQlcCiAJZWxzZQkJCQkJCQkJXAotCQlfX3JldCA9IGNtcHhjaGdfMzg2KChwdHIpLCAodW5zaWduZWQgbG9uZykobyksCQlcCi0JCQkJCSh1bnNpZ25lZCBsb25nKShuKSwgc2l6ZW9mKCoocHRyKSkpOyBcCisJCV9fcmV0ID0gKF9fdHlwZW9mX18oKihwdHIpKSljbXB4Y2hnXzM4NigocHRyKSwJCVwKKwkJCQkodW5zaWduZWQgbG9uZykobyksICh1bnNpZ25lZCBsb25nKShuKSwJXAorCQkJCXNpemVvZigqKHB0cikpKTsJCQlcCiAJX19yZXQ7CQkJCQkJCQlcCiB9KQogI2VuZGlmCkBAIC0zMDEsMTAgKzMwNSwxMiBAQAogKHsJCQkJCQkJCQlcCiAJX190eXBlb2ZfXygqKHB0cikpIF9fcmV0OwkJCQkJXAogCWlmIChsaWtlbHkoYm9vdF9jcHVfZGF0YS54ODYgPiA0KSkJCQkJXAotCQlfX3JldCA9IF9fY21weGNoZzY0KChwdHIpLCAodW5zaWduZWQgbG9uZyBsb25nKShvKSwJXAorCQlfX3JldCA9IChfX3R5cGVvZl9fKCoocHRyKSkpX19jbXB4Y2hnNjQoKHB0ciksCQlcCisJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykobyksCQlcCiAJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykobikpOwkJXAogCWVsc2UJCQkJCQkJCVwKLQkJX19yZXQgPSBjbXB4Y2hnXzQ4Nl91NjQoKHB0ciksICh1bnNpZ25lZCBsb25nIGxvbmcpKG8pLAlcCisJCV9fcmV0ID0gKF9fdHlwZW9mX18oKihwdHIpKSljbXB4Y2hnXzQ4Nl91NjQoKHB0ciksCVwKKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKShvKSwJCVwKIAkJCQkodW5zaWduZWQgbG9uZyBsb25nKShuKSk7CQlcCiAJX19yZXQ7CQkJCQkJCQlcCiB9KQpAQCAtMzEyLDEwICszMTgsMTIgQEAKICh7CQkJCQkJCQkJXAogCV9fdHlwZW9mX18oKihwdHIpKSBfX3JldDsJCQkJCVwKIAlpZiAobGlrZWx5KGJvb3RfY3B1X2RhdGEueDg2ID4gNCkpCQkJCVwKLQkJX19yZXQgPSBfX2NtcHhjaGc2NF9sb2NhbCgocHRyKSwgKHVuc2lnbmVkIGxvbmcgbG9uZykobyksIFwKKwkJX19yZXQgPSAoX190eXBlb2ZfXygqKHB0cikpKV9fY21weGNoZzY0X2xvY2FsKChwdHIpLAlcCisJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykobyksCQlcCiAJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykobikpOwkJXAogCWVsc2UJCQkJCQkJCVwKLQkJX19yZXQgPSBjbXB4Y2hnXzQ4Nl91NjQoKHB0ciksICh1bnNpZ25lZCBsb25nIGxvbmcpKG8pLAlcCisJCV9fcmV0ID0gKF9fdHlwZW9mX18oKihwdHIpKSljbXB4Y2hnXzQ4Nl91NjQoKHB0ciksCVwKKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKShvKSwJCVwKIAkJCQkodW5zaWduZWQgbG9uZyBsb25nKShuKSk7CQlcCiAJX19yZXQ7CQkJCQkJCQlcCiB9KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2U4MjBfMzIuaCBiL2luY2x1ZGUvYXNtLXg4Ni9lODIwXzMyLmgKaW5kZXggZjFkYTdlYi4uZTcyMDdhNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L2U4MjBfMzIuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvZTgyMF8zMi5oCkBAIC0yOCw2ICsyOCw4IEBACiBleHRlcm4gdm9pZCByZWdpc3Rlcl9ib290bWVtX2xvd19wYWdlcyh1bnNpZ25lZCBsb25nIG1heF9sb3dfcGZuKTsKIGV4dGVybiB2b2lkIGFkZF9tZW1vcnlfcmVnaW9uKHVuc2lnbmVkIGxvbmcgbG9uZyBzdGFydCwKIAkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplLCBpbnQgdHlwZSk7CitleHRlcm4gdm9pZCB1cGRhdGVfbWVtb3J5X3JhbmdlKHU2NCBzdGFydCwgdTY0IHNpemUsIHVuc2lnbmVkIG9sZF90eXBlLAorCQkJCXVuc2lnbmVkIG5ld190eXBlKTsKIGV4dGVybiB2b2lkIGU4MjBfcmVnaXN0ZXJfbWVtb3J5KHZvaWQpOwogZXh0ZXJuIHZvaWQgbGltaXRfcmVnaW9ucyh1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSk7CiBleHRlcm4gdm9pZCBwcmludF9tZW1vcnlfbWFwKGNoYXIgKndobyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvZTgyMF82NC5oIGIvaW5jbHVkZS9hc20teDg2L2U4MjBfNjQuaAppbmRleCBhNTYwYzRmLi4yMmVkZTczIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvZTgyMF82NC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9lODIwXzY0LmgKQEAgLTE4LDYgKzE4LDggQEAKIAkJCQkgICAgdW5zaWduZWQgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnbik7CiBleHRlcm4gdm9pZCBhZGRfbWVtb3J5X3JlZ2lvbih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUsIAogCQkJICAgICAgaW50IHR5cGUpOworZXh0ZXJuIHZvaWQgdXBkYXRlX21lbW9yeV9yYW5nZSh1NjQgc3RhcnQsIHU2NCBzaXplLCB1bnNpZ25lZCBvbGRfdHlwZSwKKwkJCQl1bnNpZ25lZCBuZXdfdHlwZSk7CiBleHRlcm4gdm9pZCBzZXR1cF9tZW1vcnlfcmVnaW9uKHZvaWQpOwogZXh0ZXJuIHZvaWQgY29udGlnX2U4MjBfc2V0dXAodm9pZCk7IAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZTgyMF9lbmRfb2ZfcmFtKHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3BhZ2UuaCBiL2luY2x1ZGUvYXNtLXg4Ni9wYWdlLmgKaW5kZXggMWNiN2M1MS4uYTA1YjI4OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvcGFnZS5oCkBAIC01MiwxMyArNTIsMTMgQEAKIAogc3RydWN0IHBhZ2U7CiAKLXN0YXRpYyB2b2lkIGlubGluZSBjbGVhcl91c2VyX3BhZ2Uodm9pZCAqcGFnZSwgdW5zaWduZWQgbG9uZyB2YWRkciwKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl91c2VyX3BhZ2Uodm9pZCAqcGFnZSwgdW5zaWduZWQgbG9uZyB2YWRkciwKIAkJCQlzdHJ1Y3QgcGFnZSAqcGcpCiB7CiAJY2xlYXJfcGFnZShwYWdlKTsKIH0KIAotc3RhdGljIHZvaWQgaW5saW5lIGNvcHlfdXNlcl9wYWdlKHZvaWQgKnRvLCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsb25nIHZhZGRyLAorc3RhdGljIGlubGluZSB2b2lkIGNvcHlfdXNlcl9wYWdlKHZvaWQgKnRvLCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsb25nIHZhZGRyLAogCQkJCXN0cnVjdCBwYWdlICp0b3BhZ2UpCiB7CiAJY29weV9wYWdlKHRvLCBmcm9tKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9zeW5jX2JpdG9wcy5oIGIvaW5jbHVkZS9hc20teDg2L3N5bmNfYml0b3BzLmgKaW5kZXggY2JjZTA4YS4uNmI3NzVjOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L3N5bmNfYml0b3BzLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L3N5bmNfYml0b3BzLmgKQEAgLTIzLDEwICsyMyw2IEBACiAgKiBUaGlzIGZ1bmN0aW9uIGlzIGF0b21pYyBhbmQgbWF5IG5vdCBiZSByZW9yZGVyZWQuICBTZWUgX19zZXRfYml0KCkKICAqIGlmIHlvdSBkbyBub3QgcmVxdWlyZSB0aGUgYXRvbWljIGd1YXJhbnRlZXMuCiAgKgotICogTm90ZTogdGhlcmUgYXJlIG5vIGd1YXJhbnRlZXMgdGhhdCB0aGlzIGZ1bmN0aW9uIHdpbGwgbm90IGJlIHJlb3JkZXJlZAotICogb24gbm9uLXg4NiBhcmNoaXRlY3R1cmVzLCBzbyBpZiB5b3UgYXJlIHdyaXRpbmcgcG9ydGFibGUgY29kZSwKLSAqIG1ha2Ugc3VyZSBub3QgdG8gcmVseSBvbiBpdHMgcmVvcmRlcmluZyBndWFyYW50ZWVzLgotICoKICAqIE5vdGUgdGhhdCBAbnIgbWF5IGJlIGFsbW9zdCBhcmJpdHJhcmlseSBsYXJnZTsgdGhpcyBmdW5jdGlvbiBpcyBub3QKICAqIHJlc3RyaWN0ZWQgdG8gYWN0aW5nIG9uIGEgc2luZ2xlLXdvcmQgcXVhbnRpdHkuCiAgKi8KQEAgLTYxLDggKzU3LDcgQEAKICAqIEBucjogQml0IHRvIGNoYW5nZQogICogQGFkZHI6IEFkZHJlc3MgdG8gc3RhcnQgY291bnRpbmcgZnJvbQogICoKLSAqIGNoYW5nZV9iaXQoKSBpcyBhdG9taWMgYW5kIG1heSBub3QgYmUgcmVvcmRlcmVkLiBJdCBtYXkgYmUKLSAqIHJlb3JkZXJlZCBvbiBvdGhlciBhcmNoaXRlY3R1cmVzIHRoYW4geDg2LgorICogc3luY19jaGFuZ2VfYml0KCkgaXMgYXRvbWljIGFuZCBtYXkgbm90IGJlIHJlb3JkZXJlZC4KICAqIE5vdGUgdGhhdCBAbnIgbWF5IGJlIGFsbW9zdCBhcmJpdHJhcmlseSBsYXJnZTsgdGhpcyBmdW5jdGlvbiBpcyBub3QKICAqIHJlc3RyaWN0ZWQgdG8gYWN0aW5nIG9uIGEgc2luZ2xlLXdvcmQgcXVhbnRpdHkuCiAgKi8KQEAgLTgwLDcgKzc1LDYgQEAKICAqIEBhZGRyOiBBZGRyZXNzIHRvIGNvdW50IGZyb20KICAqCiAgKiBUaGlzIG9wZXJhdGlvbiBpcyBhdG9taWMgYW5kIGNhbm5vdCBiZSByZW9yZGVyZWQuCi0gKiBJdCBtYXkgYmUgcmVvcmRlcmVkIG9uIG90aGVyIGFyY2hpdGVjdHVyZXMgdGhhbiB4ODYuCiAgKiBJdCBhbHNvIGltcGxpZXMgYSBtZW1vcnkgYmFycmllci4KICAqLwogc3RhdGljIGlubGluZSBpbnQgc3luY190ZXN0X2FuZF9zZXRfYml0KGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqIGFkZHIpCkBAIC05OSw3ICs5Myw2IEBACiAgKiBAYWRkcjogQWRkcmVzcyB0byBjb3VudCBmcm9tCiAgKgogICogVGhpcyBvcGVyYXRpb24gaXMgYXRvbWljIGFuZCBjYW5ub3QgYmUgcmVvcmRlcmVkLgotICogSXQgY2FuIGJlIHJlb3JkZXJkZXJlZCBvbiBvdGhlciBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4geDg2LgogICogSXQgYWxzbyBpbXBsaWVzIGEgbWVtb3J5IGJhcnJpZXIuCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IHN5bmNfdGVzdF9hbmRfY2xlYXJfYml0KGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqIGFkZHIpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L0tidWlsZCBiL2luY2x1ZGUvbGludXgvS2J1aWxkCmluZGV4IDBmYWM4MjIuLjQxMDhiMzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvS2J1aWxkCisrKyBiL2luY2x1ZGUvbGludXgvS2J1aWxkCkBAIC0xMjcsNyArMTI3LDYgQEAKIGhlYWRlci15ICs9IHBvc2l4X3R5cGVzLmgKIGhlYWRlci15ICs9IHBwZGV2LmgKIGhlYWRlci15ICs9IHByY3RsLmgKLWhlYWRlci15ICs9IHBzMmVzZGkuaAogaGVhZGVyLXkgKz0gcW54dHlwZXMuaAogaGVhZGVyLXkgKz0gcXVvdGFpb192MS5oCiBoZWFkZXIteSArPSBxdW90YWlvX3YyLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXhwb3J0ZnMuaCBiL2luY2x1ZGUvbGludXgvZXhwb3J0ZnMuaAppbmRleCA1MWQyMTQxLi5hZGNiYjA1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2V4cG9ydGZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9leHBvcnRmcy5oCkBAIC00OSwxMSArNDksMTEgQEAKIAogLyoqCiAgKiBzdHJ1Y3QgZXhwb3J0X29wZXJhdGlvbnMgLSBmb3IgbmZzZCB0byBjb21tdW5pY2F0ZSB3aXRoIGZpbGUgc3lzdGVtcwotICogQGRlY29kZV9maDogICAgICBkZWNvZGUgYSBmaWxlIGhhbmRsZSBmcmFnbWVudCBhbmQgcmV0dXJuIGEgJnN0cnVjdCBkZW50cnkKICAqIEBlbmNvZGVfZmg6ICAgICAgZW5jb2RlIGEgZmlsZSBoYW5kbGUgZnJhZ21lbnQgZnJvbSBhIGRlbnRyeQorICogQGZoX3RvX2RlbnRyeTogICBmaW5kIHRoZSBpbXBsaWVkIG9iamVjdCBhbmQgZ2V0IGEgZGVudHJ5IGZvciBpdAorICogQGZoX3RvX3BhcmVudDogICBmaW5kIHRoZSBpbXBsaWVkIG9iamVjdCdzIHBhcmVudCBhbmQgZ2V0IGEgZGVudHJ5IGZvciBpdAogICogQGdldF9uYW1lOiAgICAgICBmaW5kIHRoZSBuYW1lIGZvciBhIGdpdmVuIGlub2RlIGluIGEgZ2l2ZW4gZGlyZWN0b3J5CiAgKiBAZ2V0X3BhcmVudDogICAgIGZpbmQgdGhlIHBhcmVudCBvZiBhIGdpdmVuIGRpcmVjdG9yeQotICogQGdldF9kZW50cnk6ICAgICBmaW5kIGEgZGVudHJ5IGZvciB0aGUgaW5vZGUgZ2l2ZW4gYSBmaWxlIGhhbmRsZSBzdWItZnJhZ21lbnQKICAqCiAgKiBTZWUgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9FeHBvcnRpbmcgZm9yIGRldGFpbHMgb24gaG93IHRvIHVzZQogICogdGhpcyBpbnRlcmZhY2UgY29ycmVjdGx5LgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbi5oIGIvaW5jbHVkZS9saW51eC9pbi5oCmluZGV4IDcwYzZkZjguLjQwNjUzMTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW4uaAorKysgYi9pbmNsdWRlL2xpbnV4L2luLmgKQEAgLTI2NSw3ICsyNjUsNyBAQAogc3RhdGljIGlubGluZSBib29sIGlwdjRfaXNfbGJjYXN0KF9fYmUzMiBhZGRyKQogewogCS8qIGxpbWl0ZWQgYnJvYWRjYXN0ICovCi0JcmV0dXJuIGFkZHIgPT0gSU5BRERSX0JST0FEQ0FTVDsKKwlyZXR1cm4gYWRkciA9PSBodG9ubChJTkFERFJfQlJPQURDQVNUKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIGlwdjRfaXNfemVyb25ldChfX2JlMzIgYWRkcikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvamJkLmggYi9pbmNsdWRlL2xpbnV4L2piZC5oCmluZGV4IGIxOGZkM2IuLjQyM2Y1ODIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvamJkLmgKKysrIGIvaW5jbHVkZS9saW51eC9qYmQuaApAQCAtMzQ4LDggKzM0OCw3IEBACiBzdHJ1Y3QgamJkX3Jldm9rZV90YWJsZV9zOwogCiAvKioKLSAqIHN0cnVjdCBoYW5kbGVfcyAtIFRoZSBoYW5kbGVfcyB0eXBlIGlzIHRoZSBjb25jcmV0ZSB0eXBlIGFzc29jaWF0ZWQgd2l0aAotICogICAgIGhhbmRsZV90LgorICogc3RydWN0IGhhbmRsZV9zIC0gdGhpcyBpcyB0aGUgY29uY3JldGUgdHlwZSBhc3NvY2lhdGVkIHdpdGggaGFuZGxlX3QuCiAgKiBAaF90cmFuc2FjdGlvbjogV2hpY2ggY29tcG91bmQgdHJhbnNhY3Rpb24gaXMgdGhpcyB1cGRhdGUgYSBwYXJ0IG9mPwogICogQGhfYnVmZmVyX2NyZWRpdHM6IE51bWJlciBvZiByZW1haW5pbmcgYnVmZmVycyB3ZSBhcmUgYWxsb3dlZCB0byBkaXJ0eS4KICAqIEBoX3JlZjogUmVmZXJlbmNlIGNvdW50IG9uIHRoaXMgaGFuZGxlCkBAIC0zNTgsMTIgKzM1Nyw3IEBACiAgKiBAaF9qZGF0YTogZmxhZyB0byBmb3JjZSBkYXRhIGpvdXJuYWxpbmcKICAqIEBoX2Fib3J0ZWQ6IGZsYWcgaW5kaWNhdGluZyBmYXRhbCBlcnJvciBvbiBoYW5kbGUKICAqIEBoX2xvY2tkZXBfbWFwOiBsb2NrZGVwIGluZm8gZm9yIGRlYnVnZ2luZyBsb2NrIHByb2JsZW1zCi0gKiovCi0KLS8qIERvY2Jvb2sgY2FuJ3QgeWV0IGNvcGUgd2l0aCB0aGUgYml0IGZpZWxkcywgYnV0IHdpbGwgbGVhdmUgdGhlIGRvY3VtZW50YXRpb24KLSAqIGluIHNvIGl0IGNhbiBiZSBmaXhlZCBsYXRlci4KICAqLwotCiBzdHJ1Y3QgaGFuZGxlX3MKIHsKIAkvKiBXaGljaCBjb21wb3VuZCB0cmFuc2FjdGlvbiBpcyB0aGlzIHVwZGF0ZSBhIHBhcnQgb2Y/ICovCkBAIC01NTgsOCArNTUyLDcgQEAKIH07CiAKIC8qKgotICogc3RydWN0IGpvdXJuYWxfcyAtIFRoZSBqb3VybmFsX3MgdHlwZSBpcyB0aGUgY29uY3JldGUgdHlwZSBhc3NvY2lhdGVkIHdpdGgKLSAqICAgICBqb3VybmFsX3QuCisgKiBzdHJ1Y3Qgam91cm5hbF9zIC0gdGhpcyBpcyB0aGUgY29uY3JldGUgdHlwZSBhc3NvY2lhdGVkIHdpdGggam91cm5hbF90LgogICogQGpfZmxhZ3M6ICBHZW5lcmFsIGpvdXJuYWxpbmcgc3RhdGUgZmxhZ3MKICAqIEBqX2Vycm5vOiAgSXMgdGhlcmUgYW4gb3V0c3RhbmRpbmcgdW5jbGVhcmVkIGVycm9yIG9uIHRoZSBqb3VybmFsIChmcm9tIGEKICAqICAgICBwcmlvciBhYm9ydCk/CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbXN0aWNrLmggYi9pbmNsdWRlL2xpbnV4L21lbXN0aWNrLmgKaW5kZXggYjdlZTI1OC4uM2U2ODZlYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZW1zdGljay5oCisrKyBiL2luY2x1ZGUvbGludXgvbWVtc3RpY2suaApAQCAtMjM5LDcgKzIzOSw2IEBACiAJdW5zaWduZWQgY2hhciB0cGM7CiAJdW5zaWduZWQgY2hhciBkYXRhX2RpcjoxLAogCQkgICAgICBuZWVkX2NhcmRfaW50OjEsCi0JCSAgICAgIGdldF9pbnRfcmVnOjEsCiAJCSAgICAgIGxvbmdfZGF0YToxOwogCXVuc2lnbmVkIGNoYXIgaW50X3JlZzsKIAlpbnQgICAgICAgICAgIGVycm9yOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2kuaCBiL2luY2x1ZGUvbGludXgvcGNpLmgKaW5kZXggOTAxMGY1NC4uYjdlNGI2MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2kuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaS5oCkBAIC0xMDQ1LDYgKzEwNDUsOCBAQAogdm9pZCBwY2ltX2lvdW5tYXAoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHZvaWQgX19pb21lbSAqYWRkcik7CiB2b2lkIF9faW9tZW0gKiBjb25zdCAqcGNpbV9pb21hcF90YWJsZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7CiBpbnQgcGNpbV9pb21hcF9yZWdpb25zKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1MTYgbWFzaywgY29uc3QgY2hhciAqbmFtZSk7CitpbnQgcGNpbV9pb21hcF9yZWdpb25zX3JlcXVlc3RfYWxsKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1MTYgbWFzaywKKwkJCQkgICBjb25zdCBjaGFyICpuYW1lKTsKIHZvaWQgcGNpbV9pb3VubWFwX3JlZ2lvbnMoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHUxNiBtYXNrKTsKIAogZXh0ZXJuIGludCBwY2lfcGNpX3Byb2JsZW1zOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wa3RfY2xzLmggYi9pbmNsdWRlL2xpbnV4L3BrdF9jbHMuaAppbmRleCAyOGRmYzYxLi45OWVmYmVkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BrdF9jbHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BrdF9jbHMuaApAQCAtMjAxLDggKzIwMSw4IEBACiAKIHN0cnVjdCB0Y191MzJfa2V5CiB7Ci0JX191MzIJCW1hc2s7Ci0JX191MzIJCXZhbDsKKwlfX2JlMzIJCW1hc2s7CisJX19iZTMyCQl2YWw7CiAJaW50CQlvZmY7CiAJaW50CQlvZmZtYXNrOwogfTsKQEAgLTIxMywxMiArMjEzLDEyIEBACiAJdW5zaWduZWQgY2hhcgkJb2Zmc2hpZnQ7CiAJdW5zaWduZWQgY2hhcgkJbmtleXM7CiAKLQlfX3UxNgkJCW9mZm1hc2s7CisJX19iZTE2CQkJb2ZmbWFzazsKIAlfX3UxNgkJCW9mZjsKIAlzaG9ydAkJCW9mZm9mZjsKIAogCXNob3J0CQkJaG9mZjsKLQlfX3UzMgkJCWhtYXNrOworCV9fYmUzMgkJCWhtYXNrOwogCXN0cnVjdCB0Y191MzJfa2V5CWtleXNbMF07CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BucC5oIGIvaW5jbHVkZS9saW51eC9wbnAuaAppbmRleCBjZDYzMzJiLi4yOWRkNTU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BucC5oCisrKyBiL2luY2x1ZGUvbGludXgvcG5wLmgKQEAgLTE0LDcgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2RfZGV2aWNldGFibGUuaD4KIAogI2RlZmluZSBQTlBfTUFYX1BPUlQJCTQwCi0jZGVmaW5lIFBOUF9NQVhfTUVNCQkxMgorI2RlZmluZSBQTlBfTUFYX01FTQkJMjQKICNkZWZpbmUgUE5QX01BWF9JUlEJCTIKICNkZWZpbmUgUE5QX01BWF9ETUEJCTIKICNkZWZpbmUgUE5QX05BTUVfTEVOCQk1MApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wczJlc2RpLmggYi9pbmNsdWRlL2xpbnV4L3BzMmVzZGkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzBlMDUwYi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L3BzMmVzZGkuaAorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLSNpZm5kZWYgX1BTMkVTRElfSF8KLSNkZWZpbmUgX1BTMkVTRElfSF8KLQotI2RlZmluZSBOUk1MX0VTRElfSUQgMHhkZGZmCi0jZGVmaW5lIElOVEdfRVNESV9JRCAweGRmOWYKLQotI2RlZmluZSBQUklNQVJZX0lPX0JBU0UgMHgzNTEwCi0jZGVmaW5lIEFMVF9JT19CQVNFIDB4MzUxOAotCi0jZGVmaW5lIEVTRElfQ01EX0lOVCAoaW9fYmFzZSswKQotI2RlZmluZSBFU0RJX1NUVF9JTlQgKGlvX2Jhc2UrMCkKLSNkZWZpbmUgRVNESV9DT05UUk9MIChpb19iYXNlKzIpCi0jZGVmaW5lIEVTRElfU1RBVFVTICAoaW9fYmFzZSsyKQotI2RlZmluZSBFU0RJX0FUVE4gICAgKGlvX2Jhc2UrMykKLSNkZWZpbmUgRVNESV9JTlRSUFQgIChpb19iYXNlKzMpCi0KLSNkZWZpbmUgU1RBVFVTX0VOQUJMRUQgICAgMHgwMQotI2RlZmluZSBTVEFUVVNfQUxURVJOQVRFICAweDAyCi0jZGVmaW5lIFNUQVRVU19CVVNZICAgICAgIDB4MTAKLSNkZWZpbmUgU1RBVFVTX1NUQVRfQVZBSUwgMHgwOAotI2RlZmluZSBTVEFUVVNfSU5UUiAgICAgICAweDAxCi0jZGVmaW5lIFNUQVRVU19SRVNFVF9GQUlMIDB4ZWEKLSNkZWZpbmUgU1RBVFVTX0NNRF9JTkYJICAweDA0Ci0KLSNkZWZpbmUgQ1RSTF9TT0ZUX1JFU0VUICAgMHhlNAotI2RlZmluZSBDVFJMX0hBUkRfUkVTRVQgICAweDgwCi0jZGVmaW5lIENUUkxfRU9JICAgICAgICAgIDB4ZTIKLSNkZWZpbmUgQ1RSTF9FTkFCTEVfRE1BICAgMHgwMgotI2RlZmluZSBDVFJMX0VOQUJMRV9JTlRSICAweDAxCi0jZGVmaW5lIENUUkxfRElTQUJMRV9JTlRSICAweDAwCi0KLSNkZWZpbmUgQVRUX0VPSSAweDAyCi0KLS8qIGJpdHMgb2Ygd29yZCAwIG9mIGNvbmZpZ3VyYXRpb24gc3RhdHVzIGJsb2NrLiBtb3JlIGluZm8gc2VlIHAuMzggb2YgdGVjaCByZWYgKi8KLSNkZWZpbmUgQ09ORklHX0lTIDB4MTAgLyogSW52YWxpZCBTZWNvbmRhcnkgKi8KLSNkZWZpbmUgQ09ORklHX1pEIDB4MDggLyogWmVybyBEZWZlY3QgKi8KLSNkZWZpbmUgQ09ORklHX1NGIDB4MDQgLyogU2tld2VkIEZvcm1hdCAqLwotI2RlZmluZSBDT05GSUdfRlIgMHgwMiAvKiBSZW1vdmFibGUgKi8KLSNkZWZpbmUgQ09ORklHX1JUIDB4MDEgLyogUmV0cmllcyAqLwotCi0jZGVmaW5lIFBPUlRfU1lTX0EgICAweDkyCi0jZGVmaW5lIFBPUlRfRE1BX0ZOICAweDE4Ci0jZGVmaW5lIFBPUlRfRE1BX0VYICAweDFhCi0KLSNkZWZpbmUgT04gKHVuc2lnbmVkIGNoYXIpMHg0MAotI2RlZmluZSBPRkYgKHVuc2lnbmVkIGNoYXIpfk9OCi0jZGVmaW5lIExJVEVfT04gb3V0YihpbmIoUE9SVF9TWVNfQSkgfCBPTixQT1JUX1NZU19BKQotI2RlZmluZSBMSVRFX09GRiBvdXRiKChpbmIoUE9SVF9TWVNfQSkgJiBPRkYpLFBPUlRfU1lTX0EpCi0KLSNkZWZpbmUgRkFJTCAwCi0jZGVmaW5lIFNVQ0NFUyAxCi0KLSNkZWZpbmUgSU5UX0NNRF9DT01QTEVURSAweDAxCi0jZGVmaW5lIElOVF9DTURfRUNDICAgICAgMHgwMwotI2RlZmluZSBJTlRfQ01EX1JFVFJZICAgIDB4MDUKLSNkZWZpbmUgSU5UX0NNRF9GT1JNQVQgICAweDA2Ci0jZGVmaW5lIElOVF9DTURfRUNDX1JFVFJZIDB4MDcKLSNkZWZpbmUgSU5UX0NNRF9XQVJOSU5HICAweDA4Ci0jZGVmaW5lIElOVF9DTURfQUJPUlQgICAgMHgwOQotI2RlZmluZSBJTlRfUkVTRVQgICAgICAgIDB4MEEKLSNkZWZpbmUgSU5UX1RSQU5TRkVSX1JFUSAweDBCCi0jZGVmaW5lIElOVF9DTURfRkFJTEVEICAgMHgwQwotI2RlZmluZSBJTlRfRE1BX0VSUiAgICAgIDB4MEQKLSNkZWZpbmUgSU5UX0NNRF9CTEtfRVJSICAweDBFCi0jZGVmaW5lIElOVF9BVFROX0VSUk9SICAgMHgwRgotCi0jZGVmaW5lIERNQV9NQVNLX0NIQU4gMHg5MAotI2RlZmluZSBETUFfVU5NQVNLX0NIQU4gMHhBMAotI2RlZmluZSBETUFfV1JJVEVfQUREUiAweDIwCi0jZGVmaW5lIERNQV9XUklURV9UQyAweDQwCi0jZGVmaW5lIERNQV9XUklURV9NT0RFIDB4NzAKLQotI2RlZmluZSBDTURfR0VUX0RFVl9DT05GSUcgMHgwOQotI2RlZmluZSBDTURfUkVBRCAweDQ2MDEKLSNkZWZpbmUgQ01EX1dSSVRFIDB4NDYwMgotI2RlZmluZSBETUFfUkVBRF8xNiAweDRDCi0jZGVmaW5lIERNQV9XUklURV8xNiAweDQ0Ci0KLQotI2RlZmluZSBNQiAxMDI0KjEwMjQKLSNkZWZpbmUgU0VDVF9TSVpFIDUxMiAgIAotCi0jZGVmaW5lIEVSUk9SIDEKLSNkZWZpbmUgT0sgMAotCi0jZGVmaW5lIEhESU9fR0VUR0VPIDB4MDMwMQotCi0jZGVmaW5lIEZBTFNFIDAKLSNkZWZpbmUgVFJVRSAhRkFMU0UKLQotc3RydWN0IHBzMmVzZGlfZ2VvbWV0cnkgewotCXVuc2lnbmVkIGNoYXIgaGVhZHM7Ci0JdW5zaWduZWQgY2hhciBzZWN0b3JzOwotCXVuc2lnbmVkIHNob3J0IGN5bGluZGVyczsKLQl1bnNpZ25lZCBsb25nIHN0YXJ0OwotfTsKLQotI2VuZGlmIC8qIF9QUzJFU0RJX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JjdXByZWVtcHQuaCBiL2luY2x1ZGUvbGludXgvcmN1cHJlZW1wdC5oCmluZGV4IDAxMTUyZWQuLmQwMzhhYTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmN1cHJlZW1wdC5oCisrKyBiL2luY2x1ZGUvbGludXgvcmN1cHJlZW1wdC5oCkBAIC04NywxNSArODcsMTUgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHJjdV9lbnRlcl9ub2h6KHZvaWQpCiB7CisJc21wX21iKCk7IC8qIENQVXMgc2VlaW5nICsrIG11c3Qgc2VlIHByaW9yIFJDVSByZWFkLXNpZGUgY3JpdCBzZWN0cyAqLwogCV9fZ2V0X2NwdV92YXIoZHludGlja3NfcHJvZ3Jlc3NfY291bnRlcikrKzsKIAlXQVJOX09OKF9fZ2V0X2NwdV92YXIoZHludGlja3NfcHJvZ3Jlc3NfY291bnRlcikgJiAweDEpOwotCW1iKCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCByY3VfZXhpdF9ub2h6KHZvaWQpCiB7Ci0JbWIoKTsKIAlfX2dldF9jcHVfdmFyKGR5bnRpY2tzX3Byb2dyZXNzX2NvdW50ZXIpKys7CisJc21wX21iKCk7IC8qIENQVXMgc2VlaW5nICsrIG11c3Qgc2VlIGxhdGVyIFJDVSByZWFkLXNpZGUgY3JpdCBzZWN0cyAqLwogCVdBUk5fT04oIShfX2dldF9jcHVfdmFyKGR5bnRpY2tzX3Byb2dyZXNzX2NvdW50ZXIpICYgMHgxKSk7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaAppbmRleCAxMWQ4ZTlhLi5mZWQwN2QwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKKysrIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCkBAIC03OTAsNiArNzkwLDcgQEAKIH07CiAKIGV4dGVybiB2b2lkIHBhcnRpdGlvbl9zY2hlZF9kb21haW5zKGludCBuZG9tc19uZXcsIGNwdW1hc2tfdCAqZG9tc19uZXcpOworZXh0ZXJuIGludCBhcmNoX3JlaW5pdF9zY2hlZF9kb21haW5zKHZvaWQpOwogCiAjZW5kaWYJLyogQ09ORklHX1NNUCAqLwogCkBAIC05MjksNiArOTMwLDkgQEAKIAl1NjQJCQl2cnVudGltZTsKIAl1NjQJCQlwcmV2X3N1bV9leGVjX3J1bnRpbWU7CiAKKwl1NjQJCQlsYXN0X3dha2V1cDsKKwl1NjQJCQlhdmdfb3ZlcmxhcDsKKwogI2lmZGVmIENPTkZJR19TQ0hFRFNUQVRTCiAJdTY0CQkJd2FpdF9zdGFydDsKIAl1NjQJCQl3YWl0X21heDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaCBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaAppbmRleCBiMDczNTdjLi5jNjczZGZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKKysrIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCkBAIC01Nyw3ICs1Nyw2IEBACiBleHRlcm4gaW50IGNhcF9pbm9kZV9raWxscHJpdihzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOwogZXh0ZXJuIGludCBjYXBfdGFza19wb3N0X3NldHVpZCAodWlkX3Qgb2xkX3J1aWQsIHVpZF90IG9sZF9ldWlkLCB1aWRfdCBvbGRfc3VpZCwgaW50IGZsYWdzKTsKIGV4dGVybiB2b2lkIGNhcF90YXNrX3JlcGFyZW50X3RvX2luaXQgKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7Ci1leHRlcm4gaW50IGNhcF90YXNrX2tpbGwoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3Qgc2lnaW5mbyAqaW5mbywgaW50IHNpZywgdTMyIHNlY2lkKTsKIGV4dGVybiBpbnQgY2FwX3Rhc2tfc2V0c2NoZWR1bGVyIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBwb2xpY3ksIHN0cnVjdCBzY2hlZF9wYXJhbSAqbHApOwogZXh0ZXJuIGludCBjYXBfdGFza19zZXRpb3ByaW8gKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGlvcHJpbyk7CiBleHRlcm4gaW50IGNhcF90YXNrX3NldG5pY2UgKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IG5pY2UpOwpAQCAtMjE4Nyw3ICsyMTg2LDcgQEAKIAkJCQkgICAgICBzdHJ1Y3Qgc2lnaW5mbyAqaW5mbywgaW50IHNpZywKIAkJCQkgICAgICB1MzIgc2VjaWQpCiB7Ci0JcmV0dXJuIGNhcF90YXNrX2tpbGwocCwgaW5mbywgc2lnLCBzZWNpZCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3Rhc2tfd2FpdCAoc3RydWN0IHRhc2tfc3RydWN0ICpwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90b3BvbG9neS5oIGIvaW5jbHVkZS9saW51eC90b3BvbG9neS5oCmluZGV4IDIzNTJmNDYuLmJkMTRmOGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdG9wb2xvZ3kuaAorKysgYi9pbmNsdWRlL2xpbnV4L3RvcG9sb2d5LmgKQEAgLTUwLDYgKzUwLDggQEAKIAlmb3JfZWFjaF9vbmxpbmVfbm9kZShub2RlKQkJCQkJCVwKIAkJaWYgKG5yX2NwdXNfbm9kZShub2RlKSkKIAordm9pZCBhcmNoX3VwZGF0ZV9jcHVfdG9wb2xvZ3kodm9pZCk7CisKIC8qIENvbmZvcm0gdG8gQUNQSSAyLjAgU0xJVCBkaXN0YW5jZSBkZWZpbml0aW9ucyAqLwogI2RlZmluZSBMT0NBTF9ESVNUQU5DRQkJMTAKICNkZWZpbmUgUkVNT1RFX0RJU1RBTkNFCQkyMApAQCAtMTM4LDcgKzE0MCw2IEBACiAJCQkJfCBTRF9CQUxBTkNFX0ZPUksJXAogCQkJCXwgU0RfQkFMQU5DRV9FWEVDCVwKIAkJCQl8IFNEX1dBS0VfQUZGSU5FCVwKLQkJCQl8IFNEX1dBS0VfSURMRQkJXAogCQkJCXwgU0RfU0hBUkVfUEtHX1JFU09VUkNFU1wKIAkJCQl8IEJBTEFOQ0VfRk9SX01DX1BPV0VSLAlcCiAJLmxhc3RfYmFsYW5jZQkJPSBqaWZmaWVzLAkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aXJ0aW8uaCBiL2luY2x1ZGUvbGludXgvdmlydGlvLmgKaW5kZXggMjYwZDFmYy4uMTJjMThhYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aXJ0aW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L3ZpcnRpby5oCkBAIC00Myw4ICs0Myw5IEBACiAgKgl2cTogdGhlIHN0cnVjdCB2aXJ0cXVldWUgd2UncmUgdGFsa2luZyBhYm91dC4KICAqIEBlbmFibGVfY2I6IHJlc3RhcnQgY2FsbGJhY2tzIGFmdGVyIGRpc2FibGVfY2IuCiAgKgl2cTogdGhlIHN0cnVjdCB2aXJ0cXVldWUgd2UncmUgdGFsa2luZyBhYm91dC4KLSAqCVRoaXMgcmV0dXJucyAiZmFsc2UiIChhbmQgZG9lc24ndCByZS1lbmFibGUpIGlmIHRoZXJlIGFyZSBwZW5kaW5nCi0gKglidWZmZXJzIGluIHRoZSBxdWV1ZSwgdG8gYXZvaWQgYSByYWNlLgorICoJVGhpcyByZS1lbmFibGVzIGNhbGxiYWNrczsgaXQgcmV0dXJucyAiZmFsc2UiIGlmIHRoZXJlIGFyZSBwZW5kaW5nCisgKglidWZmZXJzIGluIHRoZSBxdWV1ZSwgdG8gZGV0ZWN0IGEgcG9zc2libGUgcmFjZSBiZXR3ZWVuIHRoZSBkcml2ZXIKKyAqCWNoZWNraW5nIGZvciBtb3JlIHdvcmssIGFuZCBlbmFibGluZyBjYWxsYmFja3MuCiAgKgogICogTG9ja2luZyBydWxlcyBhcmUgc3RyYWlnaHRmb3J3YXJkOiB0aGUgZHJpdmVyIGlzIHJlc3BvbnNpYmxlIGZvcgogICogbG9ja2luZy4gIE5vIHR3byBvcGVyYXRpb25zIG1heSBiZSBpbnZva2VkIHNpbXVsdGFuZW91c2x5LgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZHN0LmggYi9pbmNsdWRlL25ldC9kc3QuaAppbmRleCBlM2FjN2QwLi5hZTEzMzcwIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9kc3QuaAorKysgYi9pbmNsdWRlL25ldC9kc3QuaApAQCAtNTIsMTUgKzUyLDEwIEBACiAJdW5zaWduZWQgc2hvcnQJCWhlYWRlcl9sZW47CS8qIG1vcmUgc3BhY2UgYXQgaGVhZCByZXF1aXJlZCAqLwogCXVuc2lnbmVkIHNob3J0CQl0cmFpbGVyX2xlbjsJLyogc3BhY2UgdG8gcmVzZXJ2ZSBhdCB0YWlsICovCiAKLQl1MzIJCQltZXRyaWNzW1JUQVhfTUFYXTsKLQlzdHJ1Y3QgZHN0X2VudHJ5CSpwYXRoOwotCi0JdW5zaWduZWQgbG9uZwkJcmF0ZV9sYXN0OwkvKiByYXRlIGxpbWl0aW5nIGZvciBJQ01QICovCiAJdW5zaWduZWQgaW50CQlyYXRlX3Rva2VuczsKKwl1bnNpZ25lZCBsb25nCQlyYXRlX2xhc3Q7CS8qIHJhdGUgbGltaXRpbmcgZm9yIElDTVAgKi8KIAotI2lmZGVmIENPTkZJR19ORVRfQ0xTX1JPVVRFCi0JX191MzIJCQl0Y2xhc3NpZDsKLSNlbmRpZgorCXN0cnVjdCBkc3RfZW50cnkJKnBhdGg7CiAKIAlzdHJ1Y3QgbmVpZ2hib3VyCSpuZWlnaGJvdXI7CiAJc3RydWN0IGhoX2NhY2hlCQkqaGg7CkBAIC03MCwxMCArNjUsMjAgQEAKIAlpbnQJCQkoKm91dHB1dCkoc3RydWN0IHNrX2J1ZmYqKTsKIAogCXN0cnVjdCAgZHN0X29wcwkgICAgICAgICpvcHM7Ci0JCQotCXVuc2lnbmVkIGxvbmcJCWxhc3R1c2U7CisKKwl1MzIJCQltZXRyaWNzW1JUQVhfTUFYXTsKKworI2lmZGVmIENPTkZJR19ORVRfQ0xTX1JPVVRFCisJX191MzIJCQl0Y2xhc3NpZDsKKyNlbmRpZgorCisJLyoKKwkgKiBfX3JlZmNudCB3YW50cyB0byBiZSBvbiBhIGRpZmZlcmVudCBjYWNoZSBsaW5lIGZyb20KKwkgKiBpbnB1dC9vdXRwdXQvb3BzIG9yIHBlcmZvcm1hbmNlIHRhbmtzIGJhZGx5CisJICovCiAJYXRvbWljX3QJCV9fcmVmY250OwkvKiBjbGllbnQgcmVmZXJlbmNlcwkqLwogCWludAkJCV9fdXNlOworCXVuc2lnbmVkIGxvbmcJCWxhc3R1c2U7CiAJdW5pb24gewogCQlzdHJ1Y3QgZHN0X2VudHJ5ICpuZXh0OwogCQlzdHJ1Y3QgcnRhYmxlICAgICpydF9uZXh0OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC9zY3RwLmggYi9pbmNsdWRlL25ldC9zY3RwL3NjdHAuaAppbmRleCA1N2RmMjdmLi41N2VkM2UzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zY3RwL3NjdHAuaAorKysgYi9pbmNsdWRlL25ldC9zY3RwL3NjdHAuaApAQCAtMzgwLDE1ICszODAsMTkgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQogCi1pbnQgc2N0cF92Nl9pbml0KHZvaWQpOwotdm9pZCBzY3RwX3Y2X2V4aXQodm9pZCk7Cit2b2lkIHNjdHBfdjZfcGZfaW5pdCh2b2lkKTsKK3ZvaWQgc2N0cF92Nl9wZl9leGl0KHZvaWQpOworaW50IHNjdHBfdjZfcHJvdG9zd19pbml0KHZvaWQpOwordm9pZCBzY3RwX3Y2X3Byb3Rvc3dfZXhpdCh2b2lkKTsKIGludCBzY3RwX3Y2X2FkZF9wcm90b2NvbCh2b2lkKTsKIHZvaWQgc2N0cF92Nl9kZWxfcHJvdG9jb2wodm9pZCk7CiAKICNlbHNlIC8qICNpZmRlZiBkZWZpbmVkKENPTkZJR19JUFY2KSAqLwogCi1zdGF0aWMgaW5saW5lIGludCBzY3RwX3Y2X2luaXQodm9pZCkgeyByZXR1cm4gMDsgfQotc3RhdGljIGlubGluZSB2b2lkIHNjdHBfdjZfZXhpdCh2b2lkKSB7IHJldHVybjsgfQorc3RhdGljIGlubGluZSB2b2lkIHNjdHBfdjZfcGZfaW5pdCh2b2lkKSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgc2N0cF92Nl9wZl9leGl0KHZvaWQpIHsgcmV0dXJuOyB9CitzdGF0aWMgaW5saW5lIGludCBzY3RwX3Y2X3Byb3Rvc3dfaW5pdCh2b2lkKSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgc2N0cF92Nl9wcm90b3N3X2V4aXQodm9pZCkgeyByZXR1cm47IH0KIHN0YXRpYyBpbmxpbmUgaW50IHNjdHBfdjZfYWRkX3Byb3RvY29sKHZvaWQpIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBzY3RwX3Y2X2RlbF9wcm90b2NvbCh2b2lkKSB7IHJldHVybjsgfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC94ZnJtLmggYi9pbmNsdWRlL25ldC94ZnJtLmgKaW5kZXggZWVhNzc4NS4uNjE5YzUzYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQveGZybS5oCisrKyBiL2luY2x1ZGUvbmV0L3hmcm0uaApAQCAtMjc3LDcgKzI3Nyw3IEBACiBzdHJ1Y3QgeGZybV9zdGF0ZV9hZmluZm8gewogCXVuc2lnbmVkIGludAkJZmFtaWx5OwogCXVuc2lnbmVkIGludAkJcHJvdG87Ci0JdW5zaWduZWQgaW50CQlldGhfcHJvdG87CisJX19iZTE2CQkJZXRoX3Byb3RvOwogCXN0cnVjdCBtb2R1bGUJCSpvd25lcjsKIAljb25zdCBzdHJ1Y3QgeGZybV90eXBlCSp0eXBlX21hcFtJUFBST1RPX01BWF07CiAJc3RydWN0IHhmcm1fbW9kZQkqbW9kZV9tYXBbWEZSTV9NT0RFX01BWF07CmRpZmYgLS1naXQgYS9pbml0L2luaXRyYW1mcy5jIGIvaW5pdC9pbml0cmFtZnMuYwppbmRleCBjMGIxZTA1Li5kNTNmZWU4IDEwMDY0NAotLS0gYS9pbml0L2luaXRyYW1mcy5jCisrKyBiL2luaXQvaW5pdHJhbWZzLmMKQEAgLTUzOCw3ICs1MzgsNyBAQAogCWluaXRyZF9lbmQgPSAwOwogfQogCi1pbnQgX19pbml0IHBvcHVsYXRlX3Jvb3Rmcyh2b2lkKQorc3RhdGljIGludCBfX2luaXQgcG9wdWxhdGVfcm9vdGZzKHZvaWQpCiB7CiAJY2hhciAqZXJyID0gdW5wYWNrX3RvX3Jvb3RmcyhfX2luaXRyYW1mc19zdGFydCwKIAkJCSBfX2luaXRyYW1mc19lbmQgLSBfX2luaXRyYW1mc19zdGFydCwgMCk7CkBAIC01NzcsMTAgKzU3Nyw0IEBACiAJfQogCXJldHVybiAwOwogfQotI2lmbmRlZiBDT05GSUdfQUNQSV9DVVNUT01fRFNEVF9JTklUUkQKLS8qCi0gKiBpZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCBwb3B1bGF0ZV9yb290ZnMoKSBpcyBjYWxsZWQgX2VhcmxpZXJfIGluIHRoZQotICogYm9vdCBzZXF1ZW5jZS4gVGhpcyBpbnN1cmVzIHRoYXQgdGhlIEFDUEkgaW5pdGlhbGlzYXRpb24gY2FuIGZpbmQgdGhlIGZpbGUuCi0gKi8KIHJvb3Rmc19pbml0Y2FsbChwb3B1bGF0ZV9yb290ZnMpOwotI2VuZGlmCmRpZmYgLS1naXQgYS9pbml0L21haW4uYyBiL2luaXQvbWFpbi5jCmluZGV4IGZiYjAxNjcuLjk5Y2U5NDkgMTAwNjQ0Ci0tLSBhL2luaXQvbWFpbi5jCisrKyBiL2luaXQvbWFpbi5jCkBAIC0xMDIsMTIgKzEwMiw2IEBACiBleHRlcm4gdm9pZCB0Y19pbml0KHZvaWQpOwogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfQUNQSV9DVVNUT01fRFNEVF9JTklUUkQKLWV4dGVybiBpbnQgcG9wdWxhdGVfcm9vdGZzKHZvaWQpOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBwb3B1bGF0ZV9yb290ZnModm9pZCkge30KLSNlbmRpZgotCiBlbnVtIHN5c3RlbV9zdGF0ZXMgc3lzdGVtX3N0YXRlOwogRVhQT1JUX1NZTUJPTChzeXN0ZW1fc3RhdGUpOwogCkBAIC02NTAsNyArNjQ0LDYgQEAKIAogCWNoZWNrX2J1Z3MoKTsKIAotCXBvcHVsYXRlX3Jvb3RmcygpOyAvKiBGb3IgRFNEVCBvdmVycmlkZSBmcm9tIGluaXRyYW1mcyAqLwogCWFjcGlfZWFybHlfaW5pdCgpOyAvKiBiZWZvcmUgTEFQSUMgYW5kIFNNUCBpbml0ICovCiAKIAkvKiBEbyB0aGUgcmVzdCBub24tX19pbml0J2VkLCB3ZSdyZSBub3cgYWxpdmUgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9hdWRpdC5jIGIva2VybmVsL2F1ZGl0LmMKaW5kZXggMTBjNDkzMC4uYmU1NWNiNSAxMDA2NDQKLS0tIGEva2VybmVsL2F1ZGl0LmMKKysrIGIva2VybmVsL2F1ZGl0LmMKQEAgLTc4LDkgKzc4LDEzIEBACiAvKiBJZiBhdWRpdGluZyBjYW5ub3QgcHJvY2VlZCwgYXVkaXRfZmFpbHVyZSBzZWxlY3RzIHdoYXQgaGFwcGVucy4gKi8KIHN0YXRpYyBpbnQJYXVkaXRfZmFpbHVyZSA9IEFVRElUX0ZBSUxfUFJJTlRLOwogCi0vKiBJZiBhdWRpdCByZWNvcmRzIGFyZSB0byBiZSB3cml0dGVuIHRvIHRoZSBuZXRsaW5rIHNvY2tldCwgYXVkaXRfcGlkCi0gKiBjb250YWlucyB0aGUgKG5vbi16ZXJvKSBwaWQuICovCisvKgorICogSWYgYXVkaXQgcmVjb3JkcyBhcmUgdG8gYmUgd3JpdHRlbiB0byB0aGUgbmV0bGluayBzb2NrZXQsIGF1ZGl0X3BpZAorICogY29udGFpbnMgdGhlIHBpZCBvZiB0aGUgYXVkaXRkIHByb2Nlc3MgYW5kIGF1ZGl0X25sa19waWQgY29udGFpbnMKKyAqIHRoZSBwaWQgdG8gdXNlIHRvIHNlbmQgbmV0bGluayBtZXNzYWdlcyB0byB0aGF0IHByb2Nlc3MuCisgKi8KIGludAkJYXVkaXRfcGlkOworc3RhdGljIGludAlhdWRpdF9ubGtfcGlkOwogCiAvKiBJZiBhdWRpdF9yYXRlX2xpbWl0IGlzIG5vbi16ZXJvLCBsaW1pdCB0aGUgcmF0ZSBvZiBzZW5kaW5nIGF1ZGl0IHJlY29yZHMKICAqIHRvIHRoYXQgbnVtYmVyIHBlciBzZWNvbmQuICBUaGlzIHByZXZlbnRzIERvUyBhdHRhY2tzLCBidXQgcmVzdWx0cyBpbgpAQCAtMzUwLDcgKzM1NCw3IEBACiAJCXdha2VfdXAoJmF1ZGl0X2JhY2tsb2dfd2FpdCk7CiAJCWlmIChza2IpIHsKIAkJCWlmIChhdWRpdF9waWQpIHsKLQkJCQlpbnQgZXJyID0gbmV0bGlua191bmljYXN0KGF1ZGl0X3NvY2ssIHNrYiwgYXVkaXRfcGlkLCAwKTsKKwkJCQlpbnQgZXJyID0gbmV0bGlua191bmljYXN0KGF1ZGl0X3NvY2ssIHNrYiwgYXVkaXRfbmxrX3BpZCwgMCk7CiAJCQkJaWYgKGVyciA8IDApIHsKIAkJCQkJQlVHX09OKGVyciAhPSAtRUNPTk5SRUZVU0VEKTsgLyogU2hvdWRuJ3QgaGFwcGVuICovCiAJCQkJCXByaW50ayhLRVJOX0VSUiAiYXVkaXQ6ICpOTyogZGFlbW9uIGF0IGF1ZGl0X3BpZD0lZFxuIiwgYXVkaXRfcGlkKTsKQEAgLTYyNiw2ICs2MzAsNyBAQAogCQkJCQkJCXNpZCwgMSk7CiAKIAkJCWF1ZGl0X3BpZCA9IG5ld19waWQ7CisJCQlhdWRpdF9ubGtfcGlkID0gTkVUTElOS19DQihza2IpLnBpZDsKIAkJfQogCQlpZiAoc3RhdHVzX2dldC0+bWFzayAmIEFVRElUX1NUQVRVU19SQVRFX0xJTUlUKQogCQkJZXJyID0gYXVkaXRfc2V0X3JhdGVfbGltaXQoc3RhdHVzX2dldC0+cmF0ZV9saW1pdCwKZGlmZiAtLWdpdCBhL2tlcm5lbC9yZWxheS5jIGIva2VybmVsL3JlbGF5LmMKaW5kZXggZDA4MGI5ZC4uNGMwMzVhOCAxMDA2NDQKLS0tIGEva2VybmVsL3JlbGF5LmMKKysrIGIva2VybmVsL3JlbGF5LmMKQEAgLTEwNjYsNyArMTA2Niw3IEBACiAJCQkgICAgICAgdW5zaWduZWQgaW50IGZsYWdzLAogCQkJICAgICAgIGludCAqbm9ucGFkX3JldCkKIHsKLQl1bnNpZ25lZCBpbnQgcGlkeCwgcG9mZiwgdG90YWxfbGVuLCBzdWJidWZfcGFnZXMsIHJldDsKKwl1bnNpZ25lZCBpbnQgcGlkeCwgcG9mZiwgdG90YWxfbGVuLCBzdWJidWZfcGFnZXMsIG5yX3BhZ2VzLCByZXQ7CiAJc3RydWN0IHJjaGFuX2J1ZiAqcmJ1ZiA9IGluLT5wcml2YXRlX2RhdGE7CiAJdW5zaWduZWQgaW50IHN1YmJ1Zl9zaXplID0gcmJ1Zi0+Y2hhbi0+c3ViYnVmX3NpemU7CiAJdWludDY0X3QgcG9zID0gKHVpbnQ2NF90KSAqcHBvczsKQEAgLTEwOTcsOCArMTA5Nyw5IEBACiAJc3ViYnVmX3BhZ2VzID0gcmJ1Zi0+Y2hhbi0+YWxsb2Nfc2l6ZSA+PiBQQUdFX1NISUZUOwogCXBpZHggPSAocmVhZF9zdGFydCAvIFBBR0VfU0laRSkgJSBzdWJidWZfcGFnZXM7CiAJcG9mZiA9IHJlYWRfc3RhcnQgJiB+UEFHRV9NQVNLOworCW5yX3BhZ2VzID0gbWluX3QodW5zaWduZWQgaW50LCBzdWJidWZfcGFnZXMsIFBJUEVfQlVGRkVSUyk7CiAKLQlmb3IgKHRvdGFsX2xlbiA9IDA7IHNwZC5ucl9wYWdlcyA8IHN1YmJ1Zl9wYWdlczsgc3BkLm5yX3BhZ2VzKyspIHsKKwlmb3IgKHRvdGFsX2xlbiA9IDA7IHNwZC5ucl9wYWdlcyA8IG5yX3BhZ2VzOyBzcGQubnJfcGFnZXMrKykgewogCQl1bnNpZ25lZCBpbnQgdGhpc19sZW4sIHRoaXNfZW5kLCBwcml2YXRlOwogCQl1bnNpZ25lZCBpbnQgY3VyX3BvcyA9IHJlYWRfc3RhcnQgKyB0b3RhbF9sZW47CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC5jIGIva2VybmVsL3NjaGVkLmMKaW5kZXggMWNiNTNmYi4uMjhjNzNmMCAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkLmMKKysrIGIva2VybmVsL3NjaGVkLmMKQEAgLTMwMSw3ICszMDEsNyBAQAogCS8qICdjdXJyJyBwb2ludHMgdG8gY3VycmVudGx5IHJ1bm5pbmcgZW50aXR5IG9uIHRoaXMgY2ZzX3JxLgogCSAqIEl0IGlzIHNldCB0byBOVUxMIG90aGVyd2lzZSAoaS5lIHdoZW4gbm9uZSBhcmUgY3VycmVudGx5IHJ1bm5pbmcpLgogCSAqLwotCXN0cnVjdCBzY2hlZF9lbnRpdHkgKmN1cnI7CisJc3RydWN0IHNjaGVkX2VudGl0eSAqY3VyciwgKm5leHQ7CiAKIAl1bnNpZ25lZCBsb25nIG5yX3NwcmVhZF9vdmVyOwogCkBAIC01OTQsMTggKzU5NCwxNCBAQAogCVNDSEVEX0ZFQVRfTkVXX0ZBSVJfU0xFRVBFUlMJPSAxLAogCVNDSEVEX0ZFQVRfV0FLRVVQX1BSRUVNUFQJPSAyLAogCVNDSEVEX0ZFQVRfU1RBUlRfREVCSVQJCT0gNCwKLQlTQ0hFRF9GRUFUX1RSRUVfQVZHCQk9IDgsCi0JU0NIRURfRkVBVF9BUFBST1hfQVZHCQk9IDE2LAotCVNDSEVEX0ZFQVRfSFJUSUNLCQk9IDMyLAotCVNDSEVEX0ZFQVRfRE9VQkxFX1RJQ0sJCT0gNjQsCisJU0NIRURfRkVBVF9IUlRJQ0sJCT0gOCwKKwlTQ0hFRF9GRUFUX0RPVUJMRV9USUNLCQk9IDE2LAogfTsKIAogY29uc3RfZGVidWcgdW5zaWduZWQgaW50IHN5c2N0bF9zY2hlZF9mZWF0dXJlcyA9CiAJCVNDSEVEX0ZFQVRfTkVXX0ZBSVJfU0xFRVBFUlMJKiAxIHwKIAkJU0NIRURfRkVBVF9XQUtFVVBfUFJFRU1QVAkqIDEgfAogCQlTQ0hFRF9GRUFUX1NUQVJUX0RFQklUCQkqIDEgfAotCQlTQ0hFRF9GRUFUX1RSRUVfQVZHCQkqIDAgfAotCQlTQ0hFRF9GRUFUX0FQUFJPWF9BVkcJCSogMCB8CiAJCVNDSEVEX0ZFQVRfSFJUSUNLCQkqIDEgfAogCQlTQ0hFRF9GRUFUX0RPVUJMRV9USUNLCQkqIDA7CiAKQEAgLTEwODQsNyArMTA4MCw3IEBACiAJdTY0IHRtcDsKIAogCWlmICh1bmxpa2VseSghbHctPmludl93ZWlnaHQpKQotCQlsdy0+aW52X3dlaWdodCA9IChXTVVMVF9DT05TVCAtIGx3LT53ZWlnaHQvMikgLyBsdy0+d2VpZ2h0ICsgMTsKKwkJbHctPmludl93ZWlnaHQgPSAoV01VTFRfQ09OU1QtbHctPndlaWdodC8yKSAvIChsdy0+d2VpZ2h0KzEpOwogCiAJdG1wID0gKHU2NClkZWx0YV9leGVjICogd2VpZ2h0OwogCS8qCkBAIC0xMTA4LDExICsxMTA0LDEzIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX2xvYWRfYWRkKHN0cnVjdCBsb2FkX3dlaWdodCAqbHcsIHVuc2lnbmVkIGxvbmcgaW5jKQogewogCWx3LT53ZWlnaHQgKz0gaW5jOworCWx3LT5pbnZfd2VpZ2h0ID0gMDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9sb2FkX3N1YihzdHJ1Y3QgbG9hZF93ZWlnaHQgKmx3LCB1bnNpZ25lZCBsb25nIGRlYykKIHsKIAlsdy0+d2VpZ2h0IC09IGRlYzsKKwlsdy0+aW52X3dlaWdodCA9IDA7CiB9CiAKIC8qCkBAIC0xMzk0LDYgKzEzOTIsMTIgQEAKIHsKIAlzNjQgZGVsdGE7CiAKKwkvKgorCSAqIEJ1ZGR5IGNhbmRpZGF0ZXMgYXJlIGNhY2hlIGhvdDoKKwkgKi8KKwlpZiAoJnAtPnNlID09IGNmc19ycV9vZigmcC0+c2UpLT5uZXh0KQorCQlyZXR1cm4gMTsKKwogCWlmIChwLT5zY2hlZF9jbGFzcyAhPSAmZmFpcl9zY2hlZF9jbGFzcykKIAkJcmV0dXJuIDA7CiAKQEAgLTE4NTMsMTAgKzE4NTcsMTEgQEAKIAkJc2NoZWRzdGF0X2luYyhwLCBzZS5ucl93YWtldXBzX3JlbW90ZSk7CiAJdXBkYXRlX3JxX2Nsb2NrKHJxKTsKIAlhY3RpdmF0ZV90YXNrKHJxLCBwLCAxKTsKLQljaGVja19wcmVlbXB0X2N1cnIocnEsIHApOwogCXN1Y2Nlc3MgPSAxOwogCiBvdXRfcnVubmluZzoKKwljaGVja19wcmVlbXB0X2N1cnIocnEsIHApOworCiAJcC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CiAjaWZkZWYgQ09ORklHX1NNUAogCWlmIChwLT5zY2hlZF9jbGFzcy0+dGFza193YWtlX3VwKQpAQCAtMTg5MCw2ICsxODk1LDggQEAKIAlwLT5zZS5leGVjX3N0YXJ0CQk9IDA7CiAJcC0+c2Uuc3VtX2V4ZWNfcnVudGltZQkJPSAwOwogCXAtPnNlLnByZXZfc3VtX2V4ZWNfcnVudGltZQk9IDA7CisJcC0+c2UubGFzdF93YWtldXAJCT0gMDsKKwlwLT5zZS5hdmdfb3ZlcmxhcAkJPSAwOwogCiAjaWZkZWYgQ09ORklHX1NDSEVEU1RBVFMKIAlwLT5zZS53YWl0X3N0YXJ0CQk9IDA7CkBAIC0zODc1LDcgKzM4ODIsNyBAQAogCiAJaWYgKHByZXYtPnN0YXRlICYmICEocHJlZW1wdF9jb3VudCgpICYgUFJFRU1QVF9BQ1RJVkUpKSB7CiAJCWlmICh1bmxpa2VseSgocHJldi0+c3RhdGUgJiBUQVNLX0lOVEVSUlVQVElCTEUpICYmCi0JCQkJdW5saWtlbHkoc2lnbmFsX3BlbmRpbmcocHJldikpKSkgeworCQkJCXNpZ25hbF9wZW5kaW5nKHByZXYpKSkgewogCQkJcHJldi0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CiAJCX0gZWxzZSB7CiAJCQlkZWFjdGl2YXRlX3Rhc2socnEsIHByZXYsIDEpOwpAQCAtNDI2OCwxMSArNDI3NSwxMCBAQAogCW9sZHByaW8gPSBwLT5wcmlvOwogCW9uX3JxID0gcC0+c2Uub25fcnE7CiAJcnVubmluZyA9IHRhc2tfY3VycmVudChycSwgcCk7Ci0JaWYgKG9uX3JxKSB7CisJaWYgKG9uX3JxKQogCQlkZXF1ZXVlX3Rhc2socnEsIHAsIDApOwotCQlpZiAocnVubmluZykKLQkJCXAtPnNjaGVkX2NsYXNzLT5wdXRfcHJldl90YXNrKHJxLCBwKTsKLQl9CisJaWYgKHJ1bm5pbmcpCisJCXAtPnNjaGVkX2NsYXNzLT5wdXRfcHJldl90YXNrKHJxLCBwKTsKIAogCWlmIChydF9wcmlvKHByaW8pKQogCQlwLT5zY2hlZF9jbGFzcyA9ICZydF9zY2hlZF9jbGFzczsKQEAgLTQyODEsMTAgKzQyODcsOSBAQAogCiAJcC0+cHJpbyA9IHByaW87CiAKKwlpZiAocnVubmluZykKKwkJcC0+c2NoZWRfY2xhc3MtPnNldF9jdXJyX3Rhc2socnEpOwogCWlmIChvbl9ycSkgewotCQlpZiAocnVubmluZykKLQkJCXAtPnNjaGVkX2NsYXNzLT5zZXRfY3Vycl90YXNrKHJxKTsKLQogCQllbnF1ZXVlX3Rhc2socnEsIHAsIDApOwogCiAJCWNoZWNrX2NsYXNzX2NoYW5nZWQocnEsIHAsIHByZXZfY2xhc3MsIG9sZHByaW8sIHJ1bm5pbmcpOwpAQCAtNDU4MSwxOSArNDU4NiwxNyBAQAogCXVwZGF0ZV9ycV9jbG9jayhycSk7CiAJb25fcnEgPSBwLT5zZS5vbl9ycTsKIAlydW5uaW5nID0gdGFza19jdXJyZW50KHJxLCBwKTsKLQlpZiAob25fcnEpIHsKKwlpZiAob25fcnEpCiAJCWRlYWN0aXZhdGVfdGFzayhycSwgcCwgMCk7Ci0JCWlmIChydW5uaW5nKQotCQkJcC0+c2NoZWRfY2xhc3MtPnB1dF9wcmV2X3Rhc2socnEsIHApOwotCX0KKwlpZiAocnVubmluZykKKwkJcC0+c2NoZWRfY2xhc3MtPnB1dF9wcmV2X3Rhc2socnEsIHApOwogCiAJb2xkcHJpbyA9IHAtPnByaW87CiAJX19zZXRzY2hlZHVsZXIocnEsIHAsIHBvbGljeSwgcGFyYW0tPnNjaGVkX3ByaW9yaXR5KTsKIAorCWlmIChydW5uaW5nKQorCQlwLT5zY2hlZF9jbGFzcy0+c2V0X2N1cnJfdGFzayhycSk7CiAJaWYgKG9uX3JxKSB7Ci0JCWlmIChydW5uaW5nKQotCQkJcC0+c2NoZWRfY2xhc3MtPnNldF9jdXJyX3Rhc2socnEpOwotCiAJCWFjdGl2YXRlX3Rhc2socnEsIHAsIDApOwogCiAJCWNoZWNrX2NsYXNzX2NoYW5nZWQocnEsIHAsIHByZXZfY2xhc3MsIG9sZHByaW8sIHJ1bm5pbmcpOwpAQCAtNjgwNCw2ICs2ODA3LDEwIEBACiAgKi8KIHN0YXRpYyBjcHVtYXNrX3QgZmFsbGJhY2tfZG9tczsKIAordm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSkgYXJjaF91cGRhdGVfY3B1X3RvcG9sb2d5KHZvaWQpCit7Cit9CisKIC8qCiAgKiBTZXQgdXAgc2NoZWR1bGVyIGRvbWFpbnMgYW5kIGdyb3Vwcy4gQ2FsbGVycyBtdXN0IGhvbGQgdGhlIGhvdHBsdWcgbG9jay4KICAqIEZvciBub3cgdGhpcyBqdXN0IGV4Y2x1ZGVzIGlzb2xhdGVkIGNwdXMsIGJ1dCBjb3VsZCBiZSB1c2VkIHRvCkBAIC02ODEzLDYgKzY4MjAsNyBAQAogewogCWludCBlcnI7CiAKKwlhcmNoX3VwZGF0ZV9jcHVfdG9wb2xvZ3koKTsKIAluZG9tc19jdXIgPSAxOwogCWRvbXNfY3VyID0ga21hbGxvYyhzaXplb2YoY3B1bWFza190KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkb21zX2N1cikKQEAgLTY5MTcsNyArNjkyNSw3IEBACiB9CiAKICNpZiBkZWZpbmVkKENPTkZJR19TQ0hFRF9NQykgfHwgZGVmaW5lZChDT05GSUdfU0NIRURfU01UKQotc3RhdGljIGludCBhcmNoX3JlaW5pdF9zY2hlZF9kb21haW5zKHZvaWQpCitpbnQgYXJjaF9yZWluaXRfc2NoZWRfZG9tYWlucyh2b2lkKQogewogCWludCBlcnI7CiAKQEAgLTc2MTgsMTEgKzc2MjYsMTAgQEAKIAlydW5uaW5nID0gdGFza19jdXJyZW50KHJxLCB0c2spOwogCW9uX3JxID0gdHNrLT5zZS5vbl9ycTsKIAotCWlmIChvbl9ycSkgeworCWlmIChvbl9ycSkKIAkJZGVxdWV1ZV90YXNrKHJxLCB0c2ssIDApOwotCQlpZiAodW5saWtlbHkocnVubmluZykpCi0JCQl0c2stPnNjaGVkX2NsYXNzLT5wdXRfcHJldl90YXNrKHJxLCB0c2spOwotCX0KKwlpZiAodW5saWtlbHkocnVubmluZykpCisJCXRzay0+c2NoZWRfY2xhc3MtPnB1dF9wcmV2X3Rhc2socnEsIHRzayk7CiAKIAlzZXRfdGFza19ycSh0c2ssIHRhc2tfY3B1KHRzaykpOwogCkBAIC03NjMxLDExICs3NjM4LDEwIEBACiAJCXRzay0+c2NoZWRfY2xhc3MtPm1vdmVkX2dyb3VwKHRzayk7CiAjZW5kaWYKIAotCWlmIChvbl9ycSkgewotCQlpZiAodW5saWtlbHkocnVubmluZykpCi0JCQl0c2stPnNjaGVkX2NsYXNzLT5zZXRfY3Vycl90YXNrKHJxKTsKKwlpZiAodW5saWtlbHkocnVubmluZykpCisJCXRzay0+c2NoZWRfY2xhc3MtPnNldF9jdXJyX3Rhc2socnEpOworCWlmIChvbl9ycSkKIAkJZW5xdWV1ZV90YXNrKHJxLCB0c2ssIDApOwotCX0KIAogCXRhc2tfcnFfdW5sb2NrKHJxLCAmZmxhZ3MpOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX2RlYnVnLmMgYi9rZXJuZWwvc2NoZWRfZGVidWcuYwppbmRleCA0YjVlMjRjLi5lZjM1OGJhIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWRfZGVidWcuYworKysgYi9rZXJuZWwvc2NoZWRfZGVidWcuYwpAQCAtMjg4LDYgKzI4OCw3IEBACiAJUE4oc2UuZXhlY19zdGFydCk7CiAJUE4oc2UudnJ1bnRpbWUpOwogCVBOKHNlLnN1bV9leGVjX3J1bnRpbWUpOworCVBOKHNlLmF2Z19vdmVybGFwKTsKIAogCW5yX3N3aXRjaGVzID0gcC0+bnZjc3cgKyBwLT5uaXZjc3c7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9mYWlyLmMgYi9rZXJuZWwvc2NoZWRfZmFpci5jCmluZGV4IGUyYTUzMDUuLjg2YTkzMzcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9mYWlyLmMKKysrIGIva2VybmVsL3NjaGVkX2ZhaXIuYwpAQCAtNzMsMTMgKzczLDEzIEBACiAKIC8qCiAgKiBTQ0hFRF9PVEhFUiB3YWtlLXVwIGdyYW51bGFyaXR5LgotICogKGRlZmF1bHQ6IDEwIG1zZWMgKiAoMSArIGlsb2cobmNwdXMpKSwgdW5pdHM6IG5hbm9zZWNvbmRzKQorICogKGRlZmF1bHQ6IDUgbXNlYyAqICgxICsgaWxvZyhuY3B1cykpLCB1bml0czogbmFub3NlY29uZHMpCiAgKgogICogVGhpcyBvcHRpb24gZGVsYXlzIHRoZSBwcmVlbXB0aW9uIGVmZmVjdHMgb2YgZGVjb3VwbGVkIHdvcmtsb2FkcwogICogYW5kIHJlZHVjZXMgdGhlaXIgb3Zlci1zY2hlZHVsaW5nLiBTeW5jaHJvbm91cyB3b3JrbG9hZHMgd2lsbCBzdGlsbAogICogaGF2ZSBpbW1lZGlhdGUgd2FrZXVwL3NsZWVwIGxhdGVuY2llcy4KICAqLwotdW5zaWduZWQgaW50IHN5c2N0bF9zY2hlZF93YWtldXBfZ3JhbnVsYXJpdHkgPSAxMDAwMDAwMFVMOwordW5zaWduZWQgaW50IHN5c2N0bF9zY2hlZF93YWtldXBfZ3JhbnVsYXJpdHkgPSA1MDAwMDAwVUw7CiAKIGNvbnN0X2RlYnVnIHVuc2lnbmVkIGludCBzeXNjdGxfc2NoZWRfbWlncmF0aW9uX2Nvc3QgPSA1MDAwMDBVTDsKIApAQCAtMTc1LDggKzE3NSwxNSBAQAogCSAqIE1haW50YWluIGEgY2FjaGUgb2YgbGVmdG1vc3QgdHJlZSBlbnRyaWVzIChpdCBpcyBmcmVxdWVudGx5CiAJICogdXNlZCk6CiAJICovCi0JaWYgKGxlZnRtb3N0KQorCWlmIChsZWZ0bW9zdCkgewogCQljZnNfcnEtPnJiX2xlZnRtb3N0ID0gJnNlLT5ydW5fbm9kZTsKKwkJLyoKKwkJICogbWFpbnRhaW4gY2ZzX3JxLT5taW5fdnJ1bnRpbWUgdG8gYmUgYSBtb25vdG9uaWMgaW5jcmVhc2luZworCQkgKiB2YWx1ZSB0cmFja2luZyB0aGUgbGVmdG1vc3QgdnJ1bnRpbWUgaW4gdGhlIHRyZWUuCisJCSAqLworCQljZnNfcnEtPm1pbl92cnVudGltZSA9CisJCQltYXhfdnJ1bnRpbWUoY2ZzX3JxLT5taW5fdnJ1bnRpbWUsIHNlLT52cnVudGltZSk7CisJfQogCiAJcmJfbGlua19ub2RlKCZzZS0+cnVuX25vZGUsIHBhcmVudCwgbGluayk7CiAJcmJfaW5zZXJ0X2NvbG9yKCZzZS0+cnVuX25vZGUsICZjZnNfcnEtPnRhc2tzX3RpbWVsaW5lKTsKQEAgLTE4NCw4ICsxOTEsMjQgQEAKIAogc3RhdGljIHZvaWQgX19kZXF1ZXVlX2VudGl0eShzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEsIHN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlKQogewotCWlmIChjZnNfcnEtPnJiX2xlZnRtb3N0ID09ICZzZS0+cnVuX25vZGUpCi0JCWNmc19ycS0+cmJfbGVmdG1vc3QgPSByYl9uZXh0KCZzZS0+cnVuX25vZGUpOworCWlmIChjZnNfcnEtPnJiX2xlZnRtb3N0ID09ICZzZS0+cnVuX25vZGUpIHsKKwkJc3RydWN0IHJiX25vZGUgKm5leHRfbm9kZTsKKwkJc3RydWN0IHNjaGVkX2VudGl0eSAqbmV4dDsKKworCQluZXh0X25vZGUgPSByYl9uZXh0KCZzZS0+cnVuX25vZGUpOworCQljZnNfcnEtPnJiX2xlZnRtb3N0ID0gbmV4dF9ub2RlOworCisJCWlmIChuZXh0X25vZGUpIHsKKwkJCW5leHQgPSByYl9lbnRyeShuZXh0X25vZGUsCisJCQkJCXN0cnVjdCBzY2hlZF9lbnRpdHksIHJ1bl9ub2RlKTsKKwkJCWNmc19ycS0+bWluX3ZydW50aW1lID0KKwkJCQltYXhfdnJ1bnRpbWUoY2ZzX3JxLT5taW5fdnJ1bnRpbWUsCisJCQkJCSAgICAgbmV4dC0+dnJ1bnRpbWUpOworCQl9CisJfQorCisJaWYgKGNmc19ycS0+bmV4dCA9PSBzZSkKKwkJY2ZzX3JxLT5uZXh0ID0gTlVMTDsKIAogCXJiX2VyYXNlKCZzZS0+cnVuX25vZGUsICZjZnNfcnEtPnRhc2tzX3RpbWVsaW5lKTsKIH0KQEAgLTI2MCwxMiArMjgzLDggQEAKICAqLwogc3RhdGljIHU2NCBzY2hlZF9zbGljZShzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEsIHN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlKQogewotCXU2NCBzbGljZSA9IF9fc2NoZWRfcGVyaW9kKGNmc19ycS0+bnJfcnVubmluZyk7Ci0KLQlzbGljZSAqPSBzZS0+bG9hZC53ZWlnaHQ7Ci0JZG9fZGl2KHNsaWNlLCBjZnNfcnEtPmxvYWQud2VpZ2h0KTsKLQotCXJldHVybiBzbGljZTsKKwlyZXR1cm4gY2FsY19kZWx0YV9taW5lKF9fc2NoZWRfcGVyaW9kKGNmc19ycS0+bnJfcnVubmluZyksCisJCQkgICAgICAgc2UtPmxvYWQud2VpZ2h0LCAmY2ZzX3JxLT5sb2FkKTsKIH0KIAogLyoKQEAgLTI4MywxMSArMzAyLDYgQEAKIAlyZXR1cm4gdnNsaWNlOwogfQogCi1zdGF0aWMgdTY0IHNjaGVkX3ZzbGljZShzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEpCi17Ci0JcmV0dXJuIF9fc2NoZWRfdnNsaWNlKGNmc19ycS0+bG9hZC53ZWlnaHQsIGNmc19ycS0+bnJfcnVubmluZyk7Ci19Ci0KIHN0YXRpYyB1NjQgc2NoZWRfdnNsaWNlX2FkZChzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEsIHN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlKQogewogCXJldHVybiBfX3NjaGVkX3ZzbGljZShjZnNfcnEtPmxvYWQud2VpZ2h0ICsgc2UtPmxvYWQud2VpZ2h0LApAQCAtMzAzLDcgKzMxNyw2IEBACiAJICAgICAgdW5zaWduZWQgbG9uZyBkZWx0YV9leGVjKQogewogCXVuc2lnbmVkIGxvbmcgZGVsdGFfZXhlY193ZWlnaHRlZDsKLQl1NjQgdnJ1bnRpbWU7CiAKIAlzY2hlZHN0YXRfc2V0KGN1cnItPmV4ZWNfbWF4LCBtYXgoKHU2NClkZWx0YV9leGVjLCBjdXJyLT5leGVjX21heCkpOwogCkBAIC0zMTUsMTkgKzMyOCw2IEBACiAJCQkJCQkJJmN1cnItPmxvYWQpOwogCX0KIAljdXJyLT52cnVudGltZSArPSBkZWx0YV9leGVjX3dlaWdodGVkOwotCi0JLyoKLQkgKiBtYWludGFpbiBjZnNfcnEtPm1pbl92cnVudGltZSB0byBiZSBhIG1vbm90b25pYyBpbmNyZWFzaW5nCi0JICogdmFsdWUgdHJhY2tpbmcgdGhlIGxlZnRtb3N0IHZydW50aW1lIGluIHRoZSB0cmVlLgotCSAqLwotCWlmIChmaXJzdF9mYWlyKGNmc19ycSkpIHsKLQkJdnJ1bnRpbWUgPSBtaW5fdnJ1bnRpbWUoY3Vyci0+dnJ1bnRpbWUsCi0JCQkJX19waWNrX25leHRfZW50aXR5KGNmc19ycSktPnZydW50aW1lKTsKLQl9IGVsc2UKLQkJdnJ1bnRpbWUgPSBjdXJyLT52cnVudGltZTsKLQotCWNmc19ycS0+bWluX3ZydW50aW1lID0KLQkJbWF4X3ZydW50aW1lKGNmc19ycS0+bWluX3ZydW50aW1lLCB2cnVudGltZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHVwZGF0ZV9jdXJyKHN0cnVjdCBjZnNfcnEgKmNmc19ycSkKQEAgLTQ5MywxNiArNDkzLDExIEBACiB7CiAJdTY0IHZydW50aW1lOwogCi0JdnJ1bnRpbWUgPSBjZnNfcnEtPm1pbl92cnVudGltZTsKLQotCWlmIChzY2hlZF9mZWF0KFRSRUVfQVZHKSkgewotCQlzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpsYXN0ID0gX19waWNrX2xhc3RfZW50aXR5KGNmc19ycSk7Ci0JCWlmIChsYXN0KSB7Ci0JCQl2cnVudGltZSArPSBsYXN0LT52cnVudGltZTsKLQkJCXZydW50aW1lID4+PSAxOwotCQl9Ci0JfSBlbHNlIGlmIChzY2hlZF9mZWF0KEFQUFJPWF9BVkcpICYmIGNmc19ycS0+bnJfcnVubmluZykKLQkJdnJ1bnRpbWUgKz0gc2NoZWRfdnNsaWNlKGNmc19ycSkvMjsKKwlpZiAoZmlyc3RfZmFpcihjZnNfcnEpKSB7CisJCXZydW50aW1lID0gbWluX3ZydW50aW1lKGNmc19ycS0+bWluX3ZydW50aW1lLAorCQkJCV9fcGlja19uZXh0X2VudGl0eShjZnNfcnEpLT52cnVudGltZSk7CisJfSBlbHNlCisJCXZydW50aW1lID0gY2ZzX3JxLT5taW5fdnJ1bnRpbWU7CiAKIAkvKgogCSAqIFRoZSAnY3VycmVudCcgcGVyaW9kIGlzIGFscmVhZHkgcHJvbWlzZWQgdG8gdGhlIGN1cnJlbnQgdGFza3MsCkBAIC01MTUsOCArNTEwLDEwIEBACiAKIAlpZiAoIWluaXRpYWwpIHsKIAkJLyogc2xlZXBzIHVwdG8gYSBzaW5nbGUgbGF0ZW5jeSBkb24ndCBjb3VudC4gKi8KLQkJaWYgKHNjaGVkX2ZlYXQoTkVXX0ZBSVJfU0xFRVBFUlMpKQotCQkJdnJ1bnRpbWUgLT0gc3lzY3RsX3NjaGVkX2xhdGVuY3k7CisJCWlmIChzY2hlZF9mZWF0KE5FV19GQUlSX1NMRUVQRVJTKSkgeworCQkJdnJ1bnRpbWUgLT0gY2FsY19kZWx0YV9mYWlyKHN5c2N0bF9zY2hlZF9sYXRlbmN5LAorCQkJCQkJICAgICZjZnNfcnEtPmxvYWQpOworCQl9CiAKIAkJLyogZW5zdXJlIHdlIG5ldmVyIGdhaW4gdGltZSBieSBiZWluZyBwbGFjZWQgYmFja3dhcmRzLiAqLwogCQl2cnVudGltZSA9IG1heF92cnVudGltZShzZS0+dnJ1bnRpbWUsIHZydW50aW1lKTsKQEAgLTU0NSw2ICs1NDIsMjEgQEAKIAlhY2NvdW50X2VudGl0eV9lbnF1ZXVlKGNmc19ycSwgc2UpOwogfQogCitzdGF0aWMgdm9pZCB1cGRhdGVfYXZnKHU2NCAqYXZnLCB1NjQgc2FtcGxlKQoreworCXM2NCBkaWZmID0gc2FtcGxlIC0gKmF2ZzsKKwkqYXZnICs9IGRpZmYgPj4gMzsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlX2F2Z19zdGF0cyhzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEsIHN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlKQoreworCWlmICghc2UtPmxhc3Rfd2FrZXVwKQorCQlyZXR1cm47CisKKwl1cGRhdGVfYXZnKCZzZS0+YXZnX292ZXJsYXAsIHNlLT5zdW1fZXhlY19ydW50aW1lIC0gc2UtPmxhc3Rfd2FrZXVwKTsKKwlzZS0+bGFzdF93YWtldXAgPSAwOworfQorCiBzdGF0aWMgdm9pZAogZGVxdWV1ZV9lbnRpdHkoc3RydWN0IGNmc19ycSAqY2ZzX3JxLCBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSwgaW50IHNsZWVwKQogewpAQCAtNTU1LDYgKzU2Nyw3IEBACiAKIAl1cGRhdGVfc3RhdHNfZGVxdWV1ZShjZnNfcnEsIHNlKTsKIAlpZiAoc2xlZXApIHsKKwkJdXBkYXRlX2F2Z19zdGF0cyhjZnNfcnEsIHNlKTsKICNpZmRlZiBDT05GSUdfU0NIRURTVEFUUwogCQlpZiAoZW50aXR5X2lzX3Rhc2soc2UpKSB7CiAJCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IHRhc2tfb2Yoc2UpOwpAQCAtNjE2LDEyICs2MjksMzIgQEAKIAlzZS0+cHJldl9zdW1fZXhlY19ydW50aW1lID0gc2UtPnN1bV9leGVjX3J1bnRpbWU7CiB9CiAKK3N0YXRpYyBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICoKK3BpY2tfbmV4dChzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEsIHN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlKQoreworCXM2NCBkaWZmLCBncmFuOworCisJaWYgKCFjZnNfcnEtPm5leHQpCisJCXJldHVybiBzZTsKKworCWRpZmYgPSBjZnNfcnEtPm5leHQtPnZydW50aW1lIC0gc2UtPnZydW50aW1lOworCWlmIChkaWZmIDwgMCkKKwkJcmV0dXJuIHNlOworCisJZ3JhbiA9IGNhbGNfZGVsdGFfZmFpcihzeXNjdGxfc2NoZWRfd2FrZXVwX2dyYW51bGFyaXR5LCAmY2ZzX3JxLT5sb2FkKTsKKwlpZiAoZGlmZiA+IGdyYW4pCisJCXJldHVybiBzZTsKKworCXJldHVybiBjZnNfcnEtPm5leHQ7Cit9CisKIHN0YXRpYyBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpwaWNrX25leHRfZW50aXR5KHN0cnVjdCBjZnNfcnEgKmNmc19ycSkKIHsKIAlzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSA9IE5VTEw7CiAKIAlpZiAoZmlyc3RfZmFpcihjZnNfcnEpKSB7CiAJCXNlID0gX19waWNrX25leHRfZW50aXR5KGNmc19ycSk7CisJCXNlID0gcGlja19uZXh0KGNmc19ycSwgc2UpOwogCQlzZXRfbmV4dF9lbnRpdHkoY2ZzX3JxLCBzZSk7CiAJfQogCkBAIC05NDksOTYgKzk4MiwxMjEgQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1NNUAorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNjaGVkX2NsYXNzIGZhaXJfc2NoZWRfY2xhc3M7CisKK3N0YXRpYyBpbnQKK3dha2VfYWZmaW5lKHN0cnVjdCBycSAqcnEsIHN0cnVjdCBzY2hlZF9kb21haW4gKnRoaXNfc2QsIHN0cnVjdCBycSAqdGhpc19ycSwKKwkgICAgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgcHJldl9jcHUsIGludCB0aGlzX2NwdSwgaW50IHN5bmMsCisJICAgIGludCBpZHgsIHVuc2lnbmVkIGxvbmcgbG9hZCwgdW5zaWduZWQgbG9uZyB0aGlzX2xvYWQsCisJICAgIHVuc2lnbmVkIGludCBpbWJhbGFuY2UpCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyID0gdGhpc19ycS0+Y3VycjsKKwl1bnNpZ25lZCBsb25nIHRsID0gdGhpc19sb2FkOworCXVuc2lnbmVkIGxvbmcgdGxfcGVyX3Rhc2s7CisKKwlpZiAoISh0aGlzX3NkLT5mbGFncyAmIFNEX1dBS0VfQUZGSU5FKSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIElmIHRoZSBjdXJyZW50bHkgcnVubmluZyB0YXNrIHdpbGwgc2xlZXAgd2l0aGluCisJICogYSByZWFzb25hYmxlIGFtb3VudCBvZiB0aW1lIHRoZW4gYXR0cmFjdCB0aGlzIG5ld2x5CisJICogd29rZW4gdGFzazoKKwkgKi8KKwlpZiAoc3luYyAmJiBjdXJyLT5zY2hlZF9jbGFzcyA9PSAmZmFpcl9zY2hlZF9jbGFzcykgeworCQlpZiAoY3Vyci0+c2UuYXZnX292ZXJsYXAgPCBzeXNjdGxfc2NoZWRfbWlncmF0aW9uX2Nvc3QgJiYKKwkJCQlwLT5zZS5hdmdfb3ZlcmxhcCA8IHN5c2N0bF9zY2hlZF9taWdyYXRpb25fY29zdCkKKwkJCXJldHVybiAxOworCX0KKworCXNjaGVkc3RhdF9pbmMocCwgc2UubnJfd2FrZXVwc19hZmZpbmVfYXR0ZW1wdHMpOworCXRsX3Blcl90YXNrID0gY3B1X2F2Z19sb2FkX3Blcl90YXNrKHRoaXNfY3B1KTsKKworCS8qCisJICogSWYgc3luYyB3YWtldXAgdGhlbiBzdWJ0cmFjdCB0aGUgKG1heGltdW0gcG9zc2libGUpCisJICogZWZmZWN0IG9mIHRoZSBjdXJyZW50bHkgcnVubmluZyB0YXNrIGZyb20gdGhlIGxvYWQKKwkgKiBvZiB0aGUgY3VycmVudCBDUFU6CisJICovCisJaWYgKHN5bmMpCisJCXRsIC09IGN1cnJlbnQtPnNlLmxvYWQud2VpZ2h0OworCisJaWYgKCh0bCA8PSBsb2FkICYmIHRsICsgdGFyZ2V0X2xvYWQocHJldl9jcHUsIGlkeCkgPD0gdGxfcGVyX3Rhc2spIHx8CisJCQkxMDAqKHRsICsgcC0+c2UubG9hZC53ZWlnaHQpIDw9IGltYmFsYW5jZSpsb2FkKSB7CisJCS8qCisJCSAqIFRoaXMgZG9tYWluIGhhcyBTRF9XQUtFX0FGRklORSBhbmQKKwkJICogcCBpcyBjYWNoZSBjb2xkIGluIHRoaXMgZG9tYWluLCBhbmQKKwkJICogdGhlcmUgaXMgbm8gYmFkIGltYmFsYW5jZS4KKwkJICovCisJCXNjaGVkc3RhdF9pbmModGhpc19zZCwgdHR3dV9tb3ZlX2FmZmluZSk7CisJCXNjaGVkc3RhdF9pbmMocCwgc2UubnJfd2FrZXVwc19hZmZpbmUpOworCisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBzZWxlY3RfdGFza19ycV9mYWlyKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHN5bmMpCiB7Ci0JaW50IGNwdSwgdGhpc19jcHU7Ci0Jc3RydWN0IHJxICpycTsKIAlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgKnRoaXNfc2QgPSBOVUxMOwotCWludCBuZXdfY3B1OworCWludCBwcmV2X2NwdSwgdGhpc19jcHUsIG5ld19jcHU7CisJdW5zaWduZWQgbG9uZyBsb2FkLCB0aGlzX2xvYWQ7CisJc3RydWN0IHJxICpycSwgKnRoaXNfcnE7CisJdW5zaWduZWQgaW50IGltYmFsYW5jZTsKKwlpbnQgaWR4OwogCi0JY3B1ICAgICAgPSB0YXNrX2NwdShwKTsKLQlycSAgICAgICA9IHRhc2tfcnEocCk7Ci0JdGhpc19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0JbmV3X2NwdSAgPSBjcHU7CisJcHJldl9jcHUJPSB0YXNrX2NwdShwKTsKKwlycQkJPSB0YXNrX3JxKHApOworCXRoaXNfY3B1CT0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCXRoaXNfcnEJCT0gY3B1X3JxKHRoaXNfY3B1KTsKKwluZXdfY3B1CQk9IHByZXZfY3B1OwogCi0JaWYgKGNwdSA9PSB0aGlzX2NwdSkKLQkJZ290byBvdXRfc2V0X2NwdTsKLQorCS8qCisJICogJ3RoaXNfc2QnIGlzIHRoZSBmaXJzdCBkb21haW4gdGhhdCBib3RoCisJICogdGhpc19jcHUgYW5kIHByZXZfY3B1IGFyZSBwcmVzZW50IGluOgorCSAqLwogCWZvcl9lYWNoX2RvbWFpbih0aGlzX2NwdSwgc2QpIHsKLQkJaWYgKGNwdV9pc3NldChjcHUsIHNkLT5zcGFuKSkgeworCQlpZiAoY3B1X2lzc2V0KHByZXZfY3B1LCBzZC0+c3BhbikpIHsKIAkJCXRoaXNfc2QgPSBzZDsKIAkJCWJyZWFrOwogCQl9CiAJfQogCiAJaWYgKHVubGlrZWx5KCFjcHVfaXNzZXQodGhpc19jcHUsIHAtPmNwdXNfYWxsb3dlZCkpKQotCQlnb3RvIG91dF9zZXRfY3B1OworCQlnb3RvIG91dDsKIAogCS8qCiAJICogQ2hlY2sgZm9yIGFmZmluZSB3YWtldXAgYW5kIHBhc3NpdmUgYmFsYW5jaW5nIHBvc3NpYmlsaXRpZXMuCiAJICovCi0JaWYgKHRoaXNfc2QpIHsKLQkJaW50IGlkeCA9IHRoaXNfc2QtPndha2VfaWR4OwotCQl1bnNpZ25lZCBpbnQgaW1iYWxhbmNlOwotCQl1bnNpZ25lZCBsb25nIGxvYWQsIHRoaXNfbG9hZDsKKwlpZiAoIXRoaXNfc2QpCisJCWdvdG8gb3V0OwogCi0JCWltYmFsYW5jZSA9IDEwMCArICh0aGlzX3NkLT5pbWJhbGFuY2VfcGN0IC0gMTAwKSAvIDI7CisJaWR4ID0gdGhpc19zZC0+d2FrZV9pZHg7CiAKLQkJbG9hZCA9IHNvdXJjZV9sb2FkKGNwdSwgaWR4KTsKLQkJdGhpc19sb2FkID0gdGFyZ2V0X2xvYWQodGhpc19jcHUsIGlkeCk7CisJaW1iYWxhbmNlID0gMTAwICsgKHRoaXNfc2QtPmltYmFsYW5jZV9wY3QgLSAxMDApIC8gMjsKIAotCQluZXdfY3B1ID0gdGhpc19jcHU7IC8qIFdha2UgdG8gdGhpcyBDUFUgaWYgd2UgY2FuICovCisJbG9hZCA9IHNvdXJjZV9sb2FkKHByZXZfY3B1LCBpZHgpOworCXRoaXNfbG9hZCA9IHRhcmdldF9sb2FkKHRoaXNfY3B1LCBpZHgpOwogCi0JCWlmICh0aGlzX3NkLT5mbGFncyAmIFNEX1dBS0VfQUZGSU5FKSB7Ci0JCQl1bnNpZ25lZCBsb25nIHRsID0gdGhpc19sb2FkOwotCQkJdW5zaWduZWQgbG9uZyB0bF9wZXJfdGFzazsKKwlpZiAod2FrZV9hZmZpbmUocnEsIHRoaXNfc2QsIHRoaXNfcnEsIHAsIHByZXZfY3B1LCB0aGlzX2NwdSwgc3luYywgaWR4LAorCQkJCSAgICAgbG9hZCwgdGhpc19sb2FkLCBpbWJhbGFuY2UpKQorCQlyZXR1cm4gdGhpc19jcHU7CiAKLQkJCS8qCi0JCQkgKiBBdHRyYWN0IGNhY2hlLWNvbGQgdGFza3Mgb24gc3luYyB3YWtldXBzOgotCQkJICovCi0JCQlpZiAoc3luYyAmJiAhdGFza19ob3QocCwgcnEtPmNsb2NrLCB0aGlzX3NkKSkKLQkJCQlnb3RvIG91dF9zZXRfY3B1OworCWlmIChwcmV2X2NwdSA9PSB0aGlzX2NwdSkKKwkJZ290byBvdXQ7CiAKLQkJCXNjaGVkc3RhdF9pbmMocCwgc2UubnJfd2FrZXVwc19hZmZpbmVfYXR0ZW1wdHMpOwotCQkJdGxfcGVyX3Rhc2sgPSBjcHVfYXZnX2xvYWRfcGVyX3Rhc2sodGhpc19jcHUpOwotCi0JCQkvKgotCQkJICogSWYgc3luYyB3YWtldXAgdGhlbiBzdWJ0cmFjdCB0aGUgKG1heGltdW0gcG9zc2libGUpCi0JCQkgKiBlZmZlY3Qgb2YgdGhlIGN1cnJlbnRseSBydW5uaW5nIHRhc2sgZnJvbSB0aGUgbG9hZAotCQkJICogb2YgdGhlIGN1cnJlbnQgQ1BVOgotCQkJICovCi0JCQlpZiAoc3luYykKLQkJCQl0bCAtPSBjdXJyZW50LT5zZS5sb2FkLndlaWdodDsKLQotCQkJaWYgKCh0bCA8PSBsb2FkICYmCi0JCQkJdGwgKyB0YXJnZXRfbG9hZChjcHUsIGlkeCkgPD0gdGxfcGVyX3Rhc2spIHx8Ci0JCQkgICAgICAgMTAwKih0bCArIHAtPnNlLmxvYWQud2VpZ2h0KSA8PSBpbWJhbGFuY2UqbG9hZCkgewotCQkJCS8qCi0JCQkJICogVGhpcyBkb21haW4gaGFzIFNEX1dBS0VfQUZGSU5FIGFuZAotCQkJCSAqIHAgaXMgY2FjaGUgY29sZCBpbiB0aGlzIGRvbWFpbiwgYW5kCi0JCQkJICogdGhlcmUgaXMgbm8gYmFkIGltYmFsYW5jZS4KLQkJCQkgKi8KLQkJCQlzY2hlZHN0YXRfaW5jKHRoaXNfc2QsIHR0d3VfbW92ZV9hZmZpbmUpOwotCQkJCXNjaGVkc3RhdF9pbmMocCwgc2UubnJfd2FrZXVwc19hZmZpbmUpOwotCQkJCWdvdG8gb3V0X3NldF9jcHU7Ci0JCQl9Ci0JCX0KLQotCQkvKgotCQkgKiBTdGFydCBwYXNzaXZlIGJhbGFuY2luZyB3aGVuIGhhbGYgdGhlIGltYmFsYW5jZV9wY3QKLQkJICogbGltaXQgaXMgcmVhY2hlZC4KLQkJICovCi0JCWlmICh0aGlzX3NkLT5mbGFncyAmIFNEX1dBS0VfQkFMQU5DRSkgewotCQkJaWYgKGltYmFsYW5jZSp0aGlzX2xvYWQgPD0gMTAwKmxvYWQpIHsKLQkJCQlzY2hlZHN0YXRfaW5jKHRoaXNfc2QsIHR0d3VfbW92ZV9iYWxhbmNlKTsKLQkJCQlzY2hlZHN0YXRfaW5jKHAsIHNlLm5yX3dha2V1cHNfcGFzc2l2ZSk7Ci0JCQkJZ290byBvdXRfc2V0X2NwdTsKLQkJCX0KKwkvKgorCSAqIFN0YXJ0IHBhc3NpdmUgYmFsYW5jaW5nIHdoZW4gaGFsZiB0aGUgaW1iYWxhbmNlX3BjdAorCSAqIGxpbWl0IGlzIHJlYWNoZWQuCisJICovCisJaWYgKHRoaXNfc2QtPmZsYWdzICYgU0RfV0FLRV9CQUxBTkNFKSB7CisJCWlmIChpbWJhbGFuY2UqdGhpc19sb2FkIDw9IDEwMCpsb2FkKSB7CisJCQlzY2hlZHN0YXRfaW5jKHRoaXNfc2QsIHR0d3VfbW92ZV9iYWxhbmNlKTsKKwkJCXNjaGVkc3RhdF9pbmMocCwgc2UubnJfd2FrZXVwc19wYXNzaXZlKTsKKwkJCXJldHVybiB0aGlzX2NwdTsKIAkJfQogCX0KIAotCW5ld19jcHUgPSBjcHU7IC8qIENvdWxkIG5vdCB3YWtlIHRvIHRoaXNfY3B1LiBXYWtlIHRvIGNwdSBpbnN0ZWFkICovCi1vdXRfc2V0X2NwdToKK291dDoKIAlyZXR1cm4gd2FrZV9pZGxlKG5ld19jcHUsIHApOwogfQogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KQEAgLTEwNjAsNiArMTExOCwxMyBAQAogCQlyZXNjaGVkX3Rhc2soY3Vycik7CiAJCXJldHVybjsKIAl9CisKKwlzZS0+bGFzdF93YWtldXAgPSBzZS0+c3VtX2V4ZWNfcnVudGltZTsKKwlpZiAodW5saWtlbHkoc2UgPT0gcHNlKSkKKwkJcmV0dXJuOworCisJY2ZzX3JxX29mKHBzZSktPm5leHQgPSBwc2U7CisKIAkvKgogCSAqIEJhdGNoIHRhc2tzIGRvIG5vdCBwcmVlbXB0ICh0aGVpciBwcmVlbXB0aW9uIGlzIGRyaXZlbiBieQogCSAqIHRoZSB0aWNrKToKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmMgYi9rZXJuZWwvdGltZS9jbG9ja3NvdXJjZS5jCmluZGV4IDU0OGM0MzYuLjI3ODUzNGIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmMKKysrIGIva2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYwpAQCAtMTQxLDEzICsxNDEsOCBAQAogCX0KIAogCWlmICghbGlzdF9lbXB0eSgmd2F0Y2hkb2dfbGlzdCkpIHsKLQkJLyogQ3ljbGUgdGhyb3VnaCBDUFVzIHRvIGNoZWNrIGlmIHRoZSBDUFVzIHN0YXkgc3luY2hyb25pemVkIHRvCi0JCSAqIGVhY2ggb3RoZXIuICovCi0JCWludCBuZXh0X2NwdSA9IG5leHRfY3B1KHJhd19zbXBfcHJvY2Vzc29yX2lkKCksIGNwdV9vbmxpbmVfbWFwKTsKLQkJaWYgKG5leHRfY3B1ID49IE5SX0NQVVMpCi0JCQluZXh0X2NwdSA9IGZpcnN0X2NwdShjcHVfb25saW5lX21hcCk7Ci0JCXdhdGNoZG9nX3RpbWVyLmV4cGlyZXMgKz0gV0FUQ0hET0dfSU5URVJWQUw7Ci0JCWFkZF90aW1lcl9vbigmd2F0Y2hkb2dfdGltZXIsIG5leHRfY3B1KTsKKwkJX19tb2RfdGltZXIoJndhdGNoZG9nX3RpbWVyLAorCQkJICAgIHdhdGNoZG9nX3RpbWVyLmV4cGlyZXMgKyBXQVRDSERPR19JTlRFUlZBTCk7CiAJfQogCXNwaW5fdW5sb2NrKCZ3YXRjaGRvZ19sb2NrKTsKIH0KQEAgLTE2OSw3ICsxNjQsNyBAQAogCQlpZiAoIXN0YXJ0ZWQgJiYgd2F0Y2hkb2cpIHsKIAkJCXdhdGNoZG9nX2xhc3QgPSB3YXRjaGRvZy0+cmVhZCgpOwogCQkJd2F0Y2hkb2dfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBXQVRDSERPR19JTlRFUlZBTDsKLQkJCWFkZF90aW1lcl9vbigmd2F0Y2hkb2dfdGltZXIsIGZpcnN0X2NwdShjcHVfb25saW5lX21hcCkpOworCQkJYWRkX3RpbWVyKCZ3YXRjaGRvZ190aW1lcik7CiAJCX0KIAl9IGVsc2UgewogCQlpZiAoY3MtPmZsYWdzICYgQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMpCkBAIC0xOTAsOCArMTg1LDcgQEAKIAkJCQl3YXRjaGRvZ19sYXN0ID0gd2F0Y2hkb2ctPnJlYWQoKTsKIAkJCQl3YXRjaGRvZ190aW1lci5leHBpcmVzID0KIAkJCQkJamlmZmllcyArIFdBVENIRE9HX0lOVEVSVkFMOwotCQkJCWFkZF90aW1lcl9vbigmd2F0Y2hkb2dfdGltZXIsCi0JCQkJCQlmaXJzdF9jcHUoY3B1X29ubGluZV9tYXApKTsKKwkJCQlhZGRfdGltZXIoJndhdGNoZG9nX3RpbWVyKTsKIAkJCX0KIAkJfQogCX0KZGlmZiAtLWdpdCBhL2xpYi9kZXZyZXMuYyBiL2xpYi9kZXZyZXMuYwppbmRleCBiMWQzMzZjLi5lZGMyN2E1IDEwMDY0NAotLS0gYS9saWIvZGV2cmVzLmMKKysrIGIvbGliL2RldnJlcy5jCkBAIC0yOTgsNiArMjk4LDMxIEBACiBFWFBPUlRfU1lNQk9MKHBjaW1faW9tYXBfcmVnaW9ucyk7CiAKIC8qKgorICogcGNpbV9pb21hcF9yZWdpb25zX3JlcXVlc3RfYWxsIC0gUmVxdWVzdCBhbGwgQkFScyBhbmQgaW9tYXAgc3BlY2lmaWVkIG9uZXMKKyAqIEBwZGV2OiBQQ0kgZGV2aWNlIHRvIG1hcCBJTyByZXNvdXJjZXMgZm9yCisgKiBAbWFzazogTWFzayBvZiBCQVJzIHRvIGlvbWFwCisgKiBAbmFtZTogTmFtZSB1c2VkIHdoZW4gcmVxdWVzdGluZyByZWdpb25zCisgKgorICogUmVxdWVzdCBhbGwgUENJIEJBUnMgYW5kIGlvbWFwIHJlZ2lvbnMgc3BlY2lmaWVkIGJ5IEBtYXNrLgorICovCitpbnQgcGNpbV9pb21hcF9yZWdpb25zX3JlcXVlc3RfYWxsKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1MTYgbWFzaywKKwkJCQkgICBjb25zdCBjaGFyICpuYW1lKQoreworCWludCByZXF1ZXN0X21hc2sgPSAoKDEgPDwgNikgLSAxKSAmIH5tYXNrOworCWludCByYzsKKworCXJjID0gcGNpX3JlcXVlc3Rfc2VsZWN0ZWRfcmVnaW9ucyhwZGV2LCByZXF1ZXN0X21hc2ssIG5hbWUpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJcmMgPSBwY2ltX2lvbWFwX3JlZ2lvbnMocGRldiwgbWFzaywgbmFtZSk7CisJaWYgKHJjKQorCQlwY2lfcmVsZWFzZV9zZWxlY3RlZF9yZWdpb25zKHBkZXYsIHJlcXVlc3RfbWFzayk7CisJcmV0dXJuIHJjOworfQorRVhQT1JUX1NZTUJPTChwY2ltX2lvbWFwX3JlZ2lvbnNfcmVxdWVzdF9hbGwpOworCisvKioKICAqIHBjaW1faW91bm1hcF9yZWdpb25zIC0gVW5tYXAgYW5kIHJlbGVhc2UgUENJIEJBUnMKICAqIEBwZGV2OiBQQ0kgZGV2aWNlIHRvIG1hcCBJTyByZXNvdXJjZXMgZm9yCiAgKiBAbWFzazogTWFzayBvZiBCQVJzIHRvIHVubWFwIGFuZCByZWxlYXNlCmRpZmYgLS1naXQgYS9tbS9maWxlbWFwLmMgYi9tbS9maWxlbWFwLmMKaW5kZXggZGYzNDNkMWUuLjA3ZTlkOTIgMTAwNjQ0Ci0tLSBhL21tL2ZpbGVtYXAuYworKysgYi9tbS9maWxlbWFwLmMKQEAgLTM0Myw3ICszNDMsNyBAQAogRVhQT1JUX1NZTUJPTChzeW5jX3BhZ2VfcmFuZ2UpOwogCiAvKioKLSAqIHN5bmNfcGFnZV9yYW5nZV9ub2xvY2sKKyAqIHN5bmNfcGFnZV9yYW5nZV9ub2xvY2sgLSB3cml0ZSAmIHdhaXQgb24gYWxsIHBhZ2VzIGluIHRoZSBwYXNzZWQgcmFuZ2Ugd2l0aG91dCBsb2NraW5nCiAgKiBAaW5vZGU6CXRhcmdldCBpbm9kZQogICogQG1hcHBpbmc6CXRhcmdldCBhZGRyZXNzX3NwYWNlCiAgKiBAcG9zOgliZWdpbm5pbmcgb2Zmc2V0IGluIHBhZ2VzIHRvIHdyaXRlCkBAIC02MTEsNyArNjExLDEwIEBACiAJCQkJCXN5bmNfcGFnZV9raWxsYWJsZSwgVEFTS19LSUxMQUJMRSk7CiB9CiAKLS8qCisvKioKKyAqIF9fbG9ja19wYWdlX25vc3luYyAtIGdldCBhIGxvY2sgb24gdGhlIHBhZ2UsIHdpdGhvdXQgY2FsbGluZyBzeW5jX3BhZ2UoKQorICogQHBhZ2U6IHRoZSBwYWdlIHRvIGxvY2sKKyAqCiAgKiBWYXJpYW50IG9mIGxvY2tfcGFnZSB0aGF0IGRvZXMgbm90IHJlcXVpcmUgdGhlIGNhbGxlciB0byBob2xkIGEgcmVmZXJlbmNlCiAgKiBvbiB0aGUgcGFnZSdzIG1hcHBpbmcuCiAgKi8KQEAgLTE1MzgsOSArMTU0MSwyMCBAQAogCXJldHVybiBwYWdlOwogfQogCi0vKgorLyoqCisgKiByZWFkX2NhY2hlX3BhZ2VfYXN5bmMgLSByZWFkIGludG8gcGFnZSBjYWNoZSwgZmlsbCBpdCBpZiBuZWVkZWQKKyAqIEBtYXBwaW5nOgl0aGUgcGFnZSdzIGFkZHJlc3Nfc3BhY2UKKyAqIEBpbmRleDoJdGhlIHBhZ2UgaW5kZXgKKyAqIEBmaWxsZXI6CWZ1bmN0aW9uIHRvIHBlcmZvcm0gdGhlIHJlYWQKKyAqIEBkYXRhOglkZXN0aW5hdGlvbiBmb3IgcmVhZCBkYXRhCisgKgogICogU2FtZSBhcyByZWFkX2NhY2hlX3BhZ2UsIGJ1dCBkb24ndCB3YWl0IGZvciBwYWdlIHRvIGJlY29tZSB1bmxvY2tlZAogICogYWZ0ZXIgc3VibWl0dGluZyBpdCB0byB0aGUgZmlsbGVyLgorICoKKyAqIFJlYWQgaW50byB0aGUgcGFnZSBjYWNoZS4gSWYgYSBwYWdlIGFscmVhZHkgZXhpc3RzLCBhbmQgUGFnZVVwdG9kYXRlKCkgaXMKKyAqIG5vdCBzZXQsIHRyeSB0byBmaWxsIHRoZSBwYWdlIGJ1dCBkb24ndCB3YWl0IGZvciBpdCB0byBiZWNvbWUgdW5sb2NrZWQuCisgKgorICogSWYgdGhlIHBhZ2UgZG9lcyBub3QgZ2V0IGJyb3VnaHQgdXB0b2RhdGUsIHJldHVybiAtRUlPLgogICovCiBzdHJ1Y3QgcGFnZSAqcmVhZF9jYWNoZV9wYWdlX2FzeW5jKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCQkJCXBnb2ZmX3QgaW5kZXgsCmRpZmYgLS1naXQgYS9tbS9mcmVtYXAuYyBiL21tL2ZyZW1hcC5jCmluZGV4IDY5YTM3YzIuLjA3YTljODIgMTAwNjQ0Ci0tLSBhL21tL2ZyZW1hcC5jCisrKyBiL21tL2ZyZW1hcC5jCkBAIC0xMTMsNyArMTEzLDcgQEAKICAqIG1tYXAoKS9tcmVtYXAoKSBpdCBkb2VzIG5vdCBjcmVhdGUgYW55IG5ldyB2bWFzLiBUaGUgbmV3IG1hcHBpbmdzIGFyZQogICogYWxzbyBzYWZlIGFjcm9zcyBzd2Fwb3V0LgogICoKLSAqIE5PVEU6IHRoZSAncHJvdCcgcGFyYW1ldGVyIHJpZ2h0IG5vdyBpcyBpZ25vcmVkIChidXQgbXVzdCBiZSB6ZXJvKSwKKyAqIE5PVEU6IHRoZSBAcHJvdCBwYXJhbWV0ZXIgcmlnaHQgbm93IGlzIGlnbm9yZWQgKGJ1dCBtdXN0IGJlIHplcm8pLAogICogYW5kIHRoZSB2bWEncyBkZWZhdWx0IHByb3RlY3Rpb24gaXMgdXNlZC4gQXJiaXRyYXJ5IHByb3RlY3Rpb25zCiAgKiBtaWdodCBiZSBpbXBsZW1lbnRlZCBpbiB0aGUgZnV0dXJlLgogICovCmRpZmYgLS1naXQgYS9tbS9oaWdobWVtLmMgYi9tbS9oaWdobWVtLmMKaW5kZXggMzVkNDc3My4uN2RhNGE3YiAxMDA2NDQKLS0tIGEvbW0vaGlnaG1lbS5jCisrKyBiL21tL2hpZ2htZW0uYwpAQCAtMTA0LDggKzEwNCw5IEBACiAJZmx1c2hfdGxiX2tlcm5lbF9yYW5nZShQS01BUF9BRERSKDApLCBQS01BUF9BRERSKExBU1RfUEtNQVApKTsKIH0KIAotLyogRmx1c2ggYWxsIHVudXNlZCBrbWFwIG1hcHBpbmdzIGluIG9yZGVyIHRvIHJlbW92ZSBzdHJheQotICAgbWFwcGluZ3MuICovCisvKioKKyAqIGttYXBfZmx1c2hfdW51c2VkIC0gZmx1c2ggYWxsIHVudXNlZCBrbWFwIG1hcHBpbmdzIGluIG9yZGVyIHRvIHJlbW92ZSBzdHJheSBtYXBwaW5ncworICovCiB2b2lkIGttYXBfZmx1c2hfdW51c2VkKHZvaWQpCiB7CiAJc3Bpbl9sb2NrKCZrbWFwX2xvY2spOwpAQCAtMTYzLDYgKzE2NCwxNCBAQAogCXJldHVybiB2YWRkcjsKIH0KIAorLyoqCisgKiBrbWFwX2hpZ2ggLSBtYXAgYSBoaWdobWVtIHBhZ2UgaW50byBtZW1vcnkKKyAqIEBwYWdlOiAmc3RydWN0IHBhZ2UgdG8gbWFwCisgKgorICogUmV0dXJucyB0aGUgcGFnZSdzIHZpcnR1YWwgbWVtb3J5IGFkZHJlc3MuCisgKgorICogV2UgY2Fubm90IGNhbGwgdGhpcyBmcm9tIGludGVycnVwdHMsIGFzIGl0IG1heSBibG9jay4KKyAqLwogdm9pZCAqa21hcF9oaWdoKHN0cnVjdCBwYWdlICpwYWdlKQogewogCXVuc2lnbmVkIGxvbmcgdmFkZHI7CkBAIC0xNzAsOCArMTc5LDYgQEAKIAkvKgogCSAqIEZvciBoaWdobWVtIHBhZ2VzLCB3ZSBjYW4ndCB0cnVzdCAidmlydHVhbCIgdW50aWwKIAkgKiBhZnRlciB3ZSBoYXZlIHRoZSBsb2NrLgotCSAqCi0JICogV2UgY2Fubm90IGNhbGwgdGhpcyBmcm9tIGludGVycnVwdHMsIGFzIGl0IG1heSBibG9jawogCSAqLwogCXNwaW5fbG9jaygma21hcF9sb2NrKTsKIAl2YWRkciA9ICh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhwYWdlKTsKQEAgLTE4NSw2ICsxOTIsMTAgQEAKIAogRVhQT1JUX1NZTUJPTChrbWFwX2hpZ2gpOwogCisvKioKKyAqIGt1bm1hcF9oaWdoIC0gbWFwIGEgaGlnaG1lbSBwYWdlIGludG8gbWVtb3J5CisgKiBAcGFnZTogJnN0cnVjdCBwYWdlIHRvIHVubWFwCisgKi8KIHZvaWQga3VubWFwX2hpZ2goc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiAJdW5zaWduZWQgbG9uZyB2YWRkcjsKQEAgLTI1OSw2ICsyNzAsMTIgQEAKIAlyZXR1cm4gJnBhZ2VfYWRkcmVzc19odGFibGVbaGFzaF9wdHIocGFnZSwgUEFfSEFTSF9PUkRFUildOwogfQogCisvKioKKyAqIHBhZ2VfYWRkcmVzcyAtIGdldCB0aGUgbWFwcGVkIHZpcnR1YWwgYWRkcmVzcyBvZiBhIHBhZ2UKKyAqIEBwYWdlOiAmc3RydWN0IHBhZ2UgdG8gZ2V0IHRoZSB2aXJ0dWFsIGFkZHJlc3Mgb2YKKyAqCisgKiBSZXR1cm5zIHRoZSBwYWdlJ3MgdmlydHVhbCBhZGRyZXNzLgorICovCiB2b2lkICpwYWdlX2FkZHJlc3Moc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTI4OCw2ICszMDUsMTEgQEAKIAogRVhQT1JUX1NZTUJPTChwYWdlX2FkZHJlc3MpOwogCisvKioKKyAqIHNldF9wYWdlX2FkZHJlc3MgLSBzZXQgYSBwYWdlJ3MgdmlydHVhbCBhZGRyZXNzCisgKiBAcGFnZTogJnN0cnVjdCBwYWdlIHRvIHNldAorICogQHZpcnR1YWw6IHZpcnR1YWwgYWRkcmVzcyB0byB1c2UKKyAqLwogdm9pZCBzZXRfcGFnZV9hZGRyZXNzKHN0cnVjdCBwYWdlICpwYWdlLCB2b2lkICp2aXJ0dWFsKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmMKaW5kZXggOGI5ZjZjYS4uOWI2NDhiZCAxMDA2NDQKLS0tIGEvbW0vbWVtY29udHJvbC5jCisrKyBiL21tL21lbWNvbnRyb2wuYwpAQCAtMTA3OSw3ICsxMDc5LDcgQEAKIAkgKiBPbmx5IHRocmVhZCBncm91cCBsZWFkZXJzIGFyZSBhbGxvd2VkIHRvIG1pZ3JhdGUsIHRoZSBtbV9zdHJ1Y3QgaXMKIAkgKiBpbiBlZmZlY3Qgb3duZWQgYnkgdGhlIGxlYWRlcgogCSAqLwotCWlmIChwLT50Z2lkICE9IHAtPnBpZCkKKwlpZiAoIXRocmVhZF9ncm91cF9sZWFkZXIocCkpCiAJCWdvdG8gb3V0OwogCiAJY3NzX2dldCgmbWVtLT5jc3MpOwpkaWZmIC0tZ2l0IGEvbW0vb29tX2tpbGwuYyBiL21tL29vbV9raWxsLmMKaW5kZXggNDRiMmRhMS4uZjI1NWVkYSAxMDA2NDQKLS0tIGEvbW0vb29tX2tpbGwuYworKysgYi9tbS9vb21fa2lsbC5jCkBAIC0zNyw2ICszNyw3IEBACiAgKiBiYWRuZXNzIC0gY2FsY3VsYXRlIGEgbnVtZXJpYyB2YWx1ZSBmb3IgaG93IGJhZCB0aGlzIHRhc2sgaGFzIGJlZW4KICAqIEBwOiB0YXNrIHN0cnVjdCBvZiB3aGljaCB0YXNrIHdlIHNob3VsZCBjYWxjdWxhdGUKICAqIEB1cHRpbWU6IGN1cnJlbnQgdXB0aW1lIGluIHNlY29uZHMKKyAqIEBtZW06IHRhcmdldCBtZW1vcnkgY29udHJvbGxlcgogICoKICAqIFRoZSBmb3JtdWxhIHVzZWQgaXMgcmVsYXRpdmVseSBzaW1wbGUgYW5kIGRvY3VtZW50ZWQgaW5saW5lIGluIHRoZQogICogZnVuY3Rpb24uIFRoZSBtYWluIHJhdGlvbmFsZSBpcyB0aGF0IHdlIHdhbnQgdG8gc2VsZWN0IGEgZ29vZCB0YXNrCkBAIC0yNjQsNiArMjY1LDkgQEAKIH0KIAogLyoqCisgKiBkdW1wX3Rhc2tzIC0gZHVtcCBjdXJyZW50IG1lbW9yeSBzdGF0ZSBvZiBhbGwgc3lzdGVtIHRhc2tzCisgKiBAbWVtOiB0YXJnZXQgbWVtb3J5IGNvbnRyb2xsZXIKKyAqCiAgKiBEdW1wcyB0aGUgY3VycmVudCBtZW1vcnkgc3RhdGUgb2YgYWxsIHN5c3RlbSB0YXNrcywgZXhjbHVkaW5nIGtlcm5lbCB0aHJlYWRzLgogICogU3RhdGUgaW5mb3JtYXRpb24gaW5jbHVkZXMgdGFzaydzIHBpZCwgdWlkLCB0Z2lkLCB2bSBzaXplLCByc3MsIGNwdSwgb29tX2FkagogICogc2NvcmUsIGFuZCBuYW1lLgpAQCAtMjk4LDcgKzMwMiw3IEBACiAJfSB3aGlsZV9lYWNoX3RocmVhZChnLCBwKTsKIH0KIAotLyoqCisvKgogICogU2VuZCBTSUdLSUxMIHRvIHRoZSBzZWxlY3RlZCAgcHJvY2VzcyBpcnJlc3BlY3RpdmUgb2YgIENBUF9TWVNfUkFXX0lPCiAgKiBmbGFnIHRob3VnaCBpdCdzIHVubGlrZWx5IHRoYXQgIHdlIHNlbGVjdCBhIHByb2Nlc3Mgd2l0aCBDQVBfU1lTX1JBV19JTwogICogc2V0LgpAQCAtNTA0LDYgKzUwOCw5IEBACiAKIC8qKgogICogb3V0X29mX21lbW9yeSAtIGtpbGwgdGhlICJiZXN0IiBwcm9jZXNzIHdoZW4gd2UgcnVuIG91dCBvZiBtZW1vcnkKKyAqIEB6b25lbGlzdDogem9uZWxpc3QgcG9pbnRlcgorICogQGdmcF9tYXNrOiBtZW1vcnkgYWxsb2NhdGlvbiBmbGFncworICogQG9yZGVyOiBhbW91bnQgb2YgbWVtb3J5IGJlaW5nIHJlcXVlc3RlZCBhcyBhIHBvd2VyIG9mIDIKICAqCiAgKiBJZiB3ZSBydW4gb3V0IG9mIG1lbW9yeSwgd2UgaGF2ZSB0aGUgY2hvaWNlIGJldHdlZW4gZWl0aGVyCiAgKiBraWxsaW5nIGEgcmFuZG9tIHRhc2sgKGJhZCksIGxldHRpbmcgdGhlIHN5c3RlbSBjcmFzaCAod29yc2UpCmRpZmYgLS1naXQgYS9tbS9wYWdld2Fsay5jIGIvbW0vcGFnZXdhbGsuYwppbmRleCBiNGYyN2QyLi4xY2YxNDE3IDEwMDY0NAotLS0gYS9tbS9wYWdld2Fsay5jCisrKyBiL21tL3BhZ2V3YWxrLmMKQEAgLTc3LDExICs3NywxMSBAQAogCiAvKioKICAqIHdhbGtfcGFnZV9yYW5nZSAtIHdhbGsgYSBtZW1vcnkgbWFwJ3MgcGFnZSB0YWJsZXMgd2l0aCBhIGNhbGxiYWNrCi0gKiBAbW0gLSBtZW1vcnkgbWFwIHRvIHdhbGsKLSAqIEBhZGRyIC0gc3RhcnRpbmcgYWRkcmVzcwotICogQGVuZCAtIGVuZGluZyBhZGRyZXNzCi0gKiBAd2FsayAtIHNldCBvZiBjYWxsYmFja3MgdG8gaW52b2tlIGZvciBlYWNoIGxldmVsIG9mIHRoZSB0cmVlCi0gKiBAcHJpdmF0ZSAtIHByaXZhdGUgZGF0YSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uCisgKiBAbW06IG1lbW9yeSBtYXAgdG8gd2FsaworICogQGFkZHI6IHN0YXJ0aW5nIGFkZHJlc3MKKyAqIEBlbmQ6IGVuZGluZyBhZGRyZXNzCisgKiBAd2Fsazogc2V0IG9mIGNhbGxiYWNrcyB0byBpbnZva2UgZm9yIGVhY2ggbGV2ZWwgb2YgdGhlIHRyZWUKKyAqIEBwcml2YXRlOiBwcml2YXRlIGRhdGEgcGFzc2VkIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbgogICoKICAqIFJlY3Vyc2l2ZWx5IHdhbGsgdGhlIHBhZ2UgdGFibGUgZm9yIHRoZSBtZW1vcnkgYXJlYSBpbiBhIFZNQSwKICAqIGNhbGxpbmcgc3VwcGxpZWQgY2FsbGJhY2tzLiBDYWxsYmFja3MgYXJlIGNhbGxlZCBpbi1vcmRlciAoZmlyc3QKZGlmZiAtLWdpdCBhL21tL3JlYWRhaGVhZC5jIGIvbW0vcmVhZGFoZWFkLmMKaW5kZXggYzljNTBjYS4uODc2MmU4OSAxMDA2NDQKLS0tIGEvbW0vcmVhZGFoZWFkLmMKKysrIGIvbW0vcmVhZGFoZWFkLmMKQEAgLTQ0Myw5ICs0NDMsMTAgQEAKICAqICAgICAgICAgICAgcGFnZWNhY2hlIHBhZ2VzCiAgKgogICogcGFnZV9jYWNoZV9hc3luY19vbmRlbWFuZCgpIHNob3VsZCBiZSBjYWxsZWQgd2hlbiBhIHBhZ2UgaXMgdXNlZCB3aGljaAotICogaGFzIHRoZSBQR19yZWFkYWhlYWQgZmxhZzogdGhpcyBpcyBhIG1hcmtlciB0byBzdWdnZXN0IHRoYXQgdGhlIGFwcGxpY2F0aW9uCisgKiBoYXMgdGhlIFBHX3JlYWRhaGVhZCBmbGFnOyB0aGlzIGlzIGEgbWFya2VyIHRvIHN1Z2dlc3QgdGhhdCB0aGUgYXBwbGljYXRpb24KICAqIGhhcyB1c2VkIHVwIGVub3VnaCBvZiB0aGUgcmVhZGFoZWFkIHdpbmRvdyB0aGF0IHdlIHNob3VsZCBzdGFydCBwdWxsaW5nIGluCi0gKiBtb3JlIHBhZ2VzLiAqLworICogbW9yZSBwYWdlcy4KKyAqLwogdm9pZAogcGFnZV9jYWNoZV9hc3luY19yZWFkYWhlYWQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCQkgICBzdHJ1Y3QgZmlsZV9yYV9zdGF0ZSAqcmEsIHN0cnVjdCBmaWxlICpmaWxwLApkaWZmIC0tZ2l0IGEvbW0vcm1hcC5jIGIvbW0vcm1hcC5jCmluZGV4IDBjOWEyZGYuLjk5N2YwNjkgMTAwNjQ0Ci0tLSBhL21tL3JtYXAuYworKysgYi9tbS9ybWFwLmMKQEAgLTMzNSw2ICszMzUsNyBAQAogLyoqCiAgKiBwYWdlX3JlZmVyZW5jZWRfZmlsZSAtIHJlZmVyZW5jZWQgY2hlY2sgZm9yIG9iamVjdC1iYXNlZCBybWFwCiAgKiBAcGFnZTogdGhlIHBhZ2Ugd2UncmUgY2hlY2tpbmcgcmVmZXJlbmNlcyBvbi4KKyAqIEBtZW1fY29udDogdGFyZ2V0IG1lbW9yeSBjb250cm9sbGVyCiAgKgogICogRm9yIGFuIG9iamVjdC1iYXNlZCBtYXBwZWQgcGFnZSwgZmluZCBhbGwgdGhlIHBsYWNlcyBpdCBpcyBtYXBwZWQgYW5kCiAgKiBjaGVjay9jbGVhciB0aGUgcmVmZXJlbmNlZCBmbGFnLiAgVGhpcyBpcyBkb25lIGJ5IGZvbGxvd2luZyB0aGUgcGFnZS0+bWFwcGluZwpAQCAtNDAyLDYgKzQwMyw3IEBACiAgKiBwYWdlX3JlZmVyZW5jZWQgLSB0ZXN0IGlmIHRoZSBwYWdlIHdhcyByZWZlcmVuY2VkCiAgKiBAcGFnZTogdGhlIHBhZ2UgdG8gdGVzdAogICogQGlzX2xvY2tlZDogY2FsbGVyIGhvbGRzIGxvY2sgb24gdGhlIHBhZ2UKKyAqIEBtZW1fY29udDogdGFyZ2V0IG1lbW9yeSBjb250cm9sbGVyCiAgKgogICogUXVpY2sgdGVzdF9hbmRfY2xlYXJfcmVmZXJlbmNlZCBmb3IgYWxsIG1hcHBpbmdzIHRvIGEgcGFnZSwKICAqIHJldHVybnMgdGhlIG51bWJlciBvZiBwdGVzIHdoaWNoIHJlZmVyZW5jZWQgdGhlIHBhZ2UuCkBAIC01MDYsNyArNTA4LDcgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHBhZ2VfbWtjbGVhbik7CiAKIC8qKgotICogcGFnZV9zZXRfYW5vbl9ybWFwIC0gc2V0dXAgbmV3IGFub255bW91cyBybWFwCisgKiBfX3BhZ2Vfc2V0X2Fub25fcm1hcCAtIHNldHVwIG5ldyBhbm9ueW1vdXMgcm1hcAogICogQHBhZ2U6CXRoZSBwYWdlIHRvIGFkZCB0aGUgbWFwcGluZyB0bwogICogQHZtYToJdGhlIHZtIGFyZWEgaW4gd2hpY2ggdGhlIG1hcHBpbmcgaXMgYWRkZWQKICAqIEBhZGRyZXNzOgl0aGUgdXNlciB2aXJ0dWFsIGFkZHJlc3MgbWFwcGVkCkBAIC01MzAsNyArNTMyLDcgQEAKIH0KIAogLyoqCi0gKiBwYWdlX3NldF9hbm9uX3JtYXAgLSBzYW5pdHkgY2hlY2sgYW5vbnltb3VzIHJtYXAgYWRkaXRpb24KKyAqIF9fcGFnZV9jaGVja19hbm9uX3JtYXAgLSBzYW5pdHkgY2hlY2sgYW5vbnltb3VzIHJtYXAgYWRkaXRpb24KICAqIEBwYWdlOgl0aGUgcGFnZSB0byBhZGQgdGhlIG1hcHBpbmcgdG8KICAqIEB2bWE6CXRoZSB2bSBhcmVhIGluIHdoaWNoIHRoZSBtYXBwaW5nIGlzIGFkZGVkCiAgKiBAYWRkcmVzczoJdGhlIHVzZXIgdmlydHVhbCBhZGRyZXNzIG1hcHBlZApAQCAtNTgzLDcgKzU4NSw3IEBACiAJfQogfQogCi0vKgorLyoqCiAgKiBwYWdlX2FkZF9uZXdfYW5vbl9ybWFwIC0gYWRkIHB0ZSBtYXBwaW5nIHRvIGEgbmV3IGFub255bW91cyBwYWdlCiAgKiBAcGFnZToJdGhlIHBhZ2UgdG8gYWRkIHRoZSBtYXBwaW5nIHRvCiAgKiBAdm1hOgl0aGUgdm0gYXJlYSBpbiB3aGljaCB0aGUgbWFwcGluZyBpcyBhZGRlZApAQCAtNjIzLDYgKzYyNSw4IEBACiAvKioKICAqIHBhZ2VfZHVwX3JtYXAgLSBkdXBsaWNhdGUgcHRlIG1hcHBpbmcgdG8gYSBwYWdlCiAgKiBAcGFnZToJdGhlIHBhZ2UgdG8gYWRkIHRoZSBtYXBwaW5nIHRvCisgKiBAdm1hOgl0aGUgdm0gYXJlYSBiZWluZyBkdXBsaWNhdGVkCisgKiBAYWRkcmVzczoJdGhlIHVzZXIgdmlydHVhbCBhZGRyZXNzIG1hcHBlZAogICoKICAqIEZvciBjb3B5X3BhZ2VfcmFuZ2Ugb25seTogbWluaW1hbCBleHRyYWN0IGZyb20gcGFnZV9hZGRfZmlsZV9ybWFwIC8KICAqIHBhZ2VfYWRkX2Fub25fcm1hcCwgYXZvaWRpbmcgdW5uZWNlc3NhcnkgdGVzdHMgKGFscmVhZHkgY2hlY2tlZCkgc28gaXQncwpAQCAtNjQyLDYgKzY0Niw3IEBACiAvKioKICAqIHBhZ2VfcmVtb3ZlX3JtYXAgLSB0YWtlIGRvd24gcHRlIG1hcHBpbmcgZnJvbSBhIHBhZ2UKICAqIEBwYWdlOiBwYWdlIHRvIHJlbW92ZSBtYXBwaW5nIGZyb20KKyAqIEB2bWE6IHRoZSB2bSBhcmVhIGluIHdoaWNoIHRoZSBtYXBwaW5nIGlzIHJlbW92ZWQKICAqCiAgKiBUaGUgY2FsbGVyIG5lZWRzIHRvIGhvbGQgdGhlIHB0ZSBsb2NrLgogICovCkBAIC04OTAsNiArODk1LDcgQEAKIC8qKgogICogdHJ5X3RvX3VubWFwX2ZpbGUgLSB1bm1hcCBmaWxlIHBhZ2UgdXNpbmcgdGhlIG9iamVjdC1iYXNlZCBybWFwIG1ldGhvZAogICogQHBhZ2U6IHRoZSBwYWdlIHRvIHVubWFwCisgKiBAbWlncmF0aW9uOiBtaWdyYXRpb24gZmxhZwogICoKICAqIEZpbmQgYWxsIHRoZSBtYXBwaW5ncyBvZiBhIHBhZ2UgdXNpbmcgdGhlIG1hcHBpbmcgcG9pbnRlciBhbmQgdGhlIHZtYSBjaGFpbnMKICAqIGNvbnRhaW5lZCBpbiB0aGUgYWRkcmVzc19zcGFjZSBzdHJ1Y3QgaXQgcG9pbnRzIHRvLgpAQCAtOTg2LDYgKzk5Miw3IEBACiAvKioKICAqIHRyeV90b191bm1hcCAtIHRyeSB0byByZW1vdmUgYWxsIHBhZ2UgdGFibGUgbWFwcGluZ3MgdG8gYSBwYWdlCiAgKiBAcGFnZTogdGhlIHBhZ2UgdG8gZ2V0IHVubWFwcGVkCisgKiBAbWlncmF0aW9uOiBtaWdyYXRpb24gZmxhZwogICoKICAqIFRyaWVzIHRvIHJlbW92ZSBhbGwgdGhlIHBhZ2UgdGFibGUgZW50cmllcyB3aGljaCBhcmUgbWFwcGluZyB0aGlzCiAgKiBwYWdlLCB1c2VkIGluIHRoZSBwYWdlb3V0IHBhdGguICBDYWxsZXIgbXVzdCBob2xkIHRoZSBwYWdlIGxvY2suCmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uYwppbmRleCAzMzcyYmM1Li5mNTE0ZGQzIDEwMDY0NAotLS0gYS9tbS9zaG1lbS5jCisrKyBiL21tL3NobWVtLmMKQEAgLTI0NCw5ICsyNDQsOCBAQAogCX0KIH0KIAotLyoKKy8qKgogICogc2htZW1fcmVjYWxjX2lub2RlIC0gcmVjYWxjdWxhdGUgdGhlIHNpemUgb2YgYW4gaW5vZGUKLSAqCiAgKiBAaW5vZGU6IGlub2RlIHRvIHJlY2FsYwogICoKICAqIFdlIGhhdmUgdG8gY2FsY3VsYXRlIHRoZSBmcmVlIGJsb2NrcyBzaW5jZSB0aGUgbW0gY2FuIGRyb3AKQEAgLTI3MCw5ICsyNjksOCBAQAogCX0KIH0KIAotLyoKKy8qKgogICogc2htZW1fc3dwX2VudHJ5IC0gZmluZCB0aGUgc3dhcCB2ZWN0b3IgcG9zaXRpb24gaW4gdGhlIGluZm8gc3RydWN0dXJlCi0gKgogICogQGluZm86ICBpbmZvIHN0cnVjdHVyZSBmb3IgdGhlIGlub2RlCiAgKiBAaW5kZXg6IGluZGV4IG9mIHRoZSBwYWdlIHRvIGZpbmQKICAqIEBwYWdlOiAgb3B0aW9uYWwgcGFnZSB0byBhZGQgdG8gdGhlIHN0cnVjdHVyZS4gSGFzIHRvIGJlIHByZXNldCB0bwpAQCAtMzc0LDEzICszNzIsMTMgQEAKIAl9CiB9CiAKLS8qCisvKioKICAqIHNobWVtX3N3cF9hbGxvYyAtIGdldCB0aGUgcG9zaXRpb24gb2YgdGhlIHN3YXAgZW50cnkgZm9yIHRoZSBwYWdlLgotICogICAgICAgICAgICAgICAgICAgSWYgaXQgZG9lcyBub3QgZXhpc3QgYWxsb2NhdGUgdGhlIGVudHJ5LgotICoKICAqIEBpbmZvOglpbmZvIHN0cnVjdHVyZSBmb3IgdGhlIGlub2RlCiAgKiBAaW5kZXg6CWluZGV4IG9mIHRoZSBwYWdlIHRvIGZpbmQKICAqIEBzZ3A6CWNoZWNrIGFuZCByZWNoZWNrIGlfc2l6ZT8gc2tpcCBhbGxvY2F0aW9uPworICoKKyAqIElmIHRoZSBlbnRyeSBkb2VzIG5vdCBleGlzdCwgYWxsb2NhdGUgaXQuCiAgKi8KIHN0YXRpYyBzd3BfZW50cnlfdCAqc2htZW1fc3dwX2FsbG9jKHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvLCB1bnNpZ25lZCBsb25nIGluZGV4LCBlbnVtIHNncF90eXBlIHNncCkKIHsKQEAgLTQ0MCw5ICs0MzgsOCBAQAogCXJldHVybiBlbnRyeTsKIH0KIAotLyoKKy8qKgogICogc2htZW1fZnJlZV9zd3AgLSBmcmVlIHNvbWUgc3dhcCBlbnRyaWVzIGluIGEgZGlyZWN0b3J5Ci0gKgogICogQGRpcjogICAgICAgIHBvaW50ZXIgdG8gdGhlIGRpcmVjdG9yeQogICogQGVkaXI6ICAgICAgIHBvaW50ZXIgYWZ0ZXIgbGFzdCBlbnRyeSBvZiB0aGUgZGlyZWN0b3J5CiAgKiBAcHVuY2hfbG9jazogcG9pbnRlciB0byBzcGlubG9jayB3aGVuIG5lZWRlZCBmb3IgdGhlIGhvbGVwdW5jaCBjYXNlCkBAIC0yMDIyLDcgKzIwMTksNyBAQAogfTsKIAogI2lmZGVmIENPTkZJR19UTVBGU19QT1NJWF9BQ0wKLS8qKgorLyoKICAqIFN1cGVyYmxvY2tzIHdpdGhvdXQgeGF0dHIgaW5vZGUgb3BlcmF0aW9ucyB3aWxsIGdldCBzZWN1cml0eS4qIHhhdHRyCiAgKiBzdXBwb3J0IGZyb20gdGhlIFZGUyAiZm9yIGZyZWUiLiBBcyBzb29uIGFzIHdlIGhhdmUgYW55IG90aGVyIHhhdHRycwogICogbGlrZSBBQ0xzLCB3ZSBhbHNvIG5lZWQgdG8gaW1wbGVtZW50IHRoZSBzZWN1cml0eS4qIGhhbmRsZXJzIGF0CkBAIC0yNTYxLDEyICsyNTU4LDExIEBACiB9CiBtb2R1bGVfaW5pdChpbml0X3RtcGZzKQogCi0vKgorLyoqCiAgKiBzaG1lbV9maWxlX3NldHVwIC0gZ2V0IGFuIHVubGlua2VkIGZpbGUgbGl2aW5nIGluIHRtcGZzCi0gKgogICogQG5hbWU6IG5hbWUgZm9yIGRlbnRyeSAodG8gYmUgc2VlbiBpbiAvcHJvYy88cGlkPi9tYXBzCiAgKiBAc2l6ZTogc2l6ZSB0byBiZSBzZXQgZm9yIHRoZSBmaWxlCi0gKgorICogQGZsYWdzOiB2bV9mbGFncwogICovCiBzdHJ1Y3QgZmlsZSAqc2htZW1fZmlsZV9zZXR1cChjaGFyICpuYW1lLCBsb2ZmX3Qgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKQEAgLTI2MjEsOSArMjYxNyw4IEBACiAJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOwogfQogCi0vKgorLyoqCiAgKiBzaG1lbV96ZXJvX3NldHVwIC0gc2V0dXAgYSBzaGFyZWQgYW5vbnltb3VzIG1hcHBpbmcKLSAqCiAgKiBAdm1hOiB0aGUgdm1hIHRvIGJlIG1tYXBwZWQgaXMgcHJlcGFyZWQgYnkgZG9fbW1hcF9wZ29mZgogICovCiBpbnQgc2htZW1femVyb19zZXR1cChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKZGlmZiAtLWdpdCBhL21tL3NsYWIuYyBiL21tL3NsYWIuYwppbmRleCBlNmM2OThmLi5iYjQwNzBlIDEwMDY0NAotLS0gYS9tbS9zbGFiLmMKKysrIGIvbW0vc2xhYi5jCkBAIC0zNjI0LDEyICszNjI0LDExIEBACiBFWFBPUlRfU1lNQk9MKGttZW1fY2FjaGVfYWxsb2MpOwogCiAvKioKLSAqIGttZW1fcHRyX3ZhbGlkYXRlIC0gY2hlY2sgaWYgYW4gdW50cnVzdGVkIHBvaW50ZXIgbWlnaHQKLSAqCWJlIGEgc2xhYiBlbnRyeS4KKyAqIGttZW1fcHRyX3ZhbGlkYXRlIC0gY2hlY2sgaWYgYW4gdW50cnVzdGVkIHBvaW50ZXIgbWlnaHQgYmUgYSBzbGFiIGVudHJ5LgogICogQGNhY2hlcDogdGhlIGNhY2hlIHdlJ3JlIGNoZWNraW5nIGFnYWluc3QKICAqIEBwdHI6IHBvaW50ZXIgdG8gdmFsaWRhdGUKICAqCi0gKiBUaGlzIHZlcmlmaWVzIHRoYXQgdGhlIHVudHJ1c3RlZCBwb2ludGVyIGxvb2tzIHNhbmU6CisgKiBUaGlzIHZlcmlmaWVzIHRoYXQgdGhlIHVudHJ1c3RlZCBwb2ludGVyIGxvb2tzIHNhbmU7CiAgKiBpdCBpcyBfbm90XyBhIGd1YXJhbnRlZSB0aGF0IHRoZSBwb2ludGVyIGlzIGFjdHVhbGx5CiAgKiBwYXJ0IG9mIHRoZSBzbGFiIGNhY2hlIGluIHF1ZXN0aW9uLCBidXQgaXQgYXQgbGVhc3QKICAqIHZhbGlkYXRlcyB0aGF0IHRoZSBwb2ludGVyIGNhbiBiZSBkZXJlZmVyZW5jZWQgYW5kCmRpZmYgLS1naXQgYS9tbS9zbHViLmMgYi9tbS9zbHViLmMKaW5kZXggOTZkNjNlYi4uY2E3MWQ1YiAxMDA2NDQKLS0tIGEvbW0vc2x1Yi5jCisrKyBiL21tL3NsdWIuYwpAQCAtMTUzNiw5ICsxNTM2LDE1IEBACiAJICogVGhhdCBpcyBvbmx5IHBvc3NpYmxlIGlmIGNlcnRhaW4gY29uZGl0aW9ucyBhcmUgbWV0IHRoYXQgYXJlIGJlaW5nCiAJICogY2hlY2tlZCB3aGVuIGEgc2xhYiBpcyBjcmVhdGVkLgogCSAqLwotCWlmICghKGdmcGZsYWdzICYgX19HRlBfTk9SRVRSWSkgJiYgKHMtPmZsYWdzICYgX19QQUdFX0FMTE9DX0ZBTExCQUNLKSkKLQkJcmV0dXJuIGttYWxsb2NfbGFyZ2Uocy0+b2Jqc2l6ZSwgZ2ZwZmxhZ3MpOwotCisJaWYgKCEoZ2ZwZmxhZ3MgJiBfX0dGUF9OT1JFVFJZKSAmJgorCQkJCShzLT5mbGFncyAmIF9fUEFHRV9BTExPQ19GQUxMQkFDSykpIHsKKwkJaWYgKGdmcGZsYWdzICYgX19HRlBfV0FJVCkKKwkJCWxvY2FsX2lycV9lbmFibGUoKTsKKwkJb2JqZWN0ID0ga21hbGxvY19sYXJnZShzLT5vYmpzaXplLCBnZnBmbGFncyk7CisJCWlmIChnZnBmbGFncyAmIF9fR0ZQX1dBSVQpCisJCQlsb2NhbF9pcnFfZGlzYWJsZSgpOworCQlyZXR1cm4gb2JqZWN0OworCX0KIAlyZXR1cm4gTlVMTDsKIGRlYnVnOgogCWlmICghYWxsb2NfZGVidWdfcHJvY2Vzc2luZyhzLCBjLT5wYWdlLCBvYmplY3QsIGFkZHIpKQpkaWZmIC0tZ2l0IGEvbW0vc3dhcC5jIGIvbW0vc3dhcC5jCmluZGV4IGQ0ZWM1OWEuLmFhMTEzOWMgMTAwNjQ0Ci0tLSBhL21tL3N3YXAuYworKysgYi9tbS9zd2FwLmMKQEAgLTc4LDEyICs3OCwxMSBAQAogRVhQT1JUX1NZTUJPTChwdXRfcGFnZSk7CiAKIC8qKgotICogcHV0X3BhZ2VzX2xpc3QoKTogcmVsZWFzZSBhIGxpc3Qgb2YgcGFnZXMKKyAqIHB1dF9wYWdlc19saXN0KCkgLSByZWxlYXNlIGEgbGlzdCBvZiBwYWdlcworICogQHBhZ2VzOiBsaXN0IG9mIHBhZ2VzIHRocmVhZGVkIG9uIHBhZ2UtPmxydQogICoKICAqIFJlbGVhc2UgYSBsaXN0IG9mIHBhZ2VzIHdoaWNoIGFyZSBzdHJ1bmcgdG9nZXRoZXIgb24gcGFnZS5scnUuICBDdXJyZW50bHkKICAqIHVzZWQgYnkgcmVhZF9jYWNoZV9wYWdlcygpIGFuZCByZWxhdGVkIGVycm9yIHJlY292ZXJ5IGNvZGUuCi0gKgotICogQHBhZ2VzOiBsaXN0IG9mIHBhZ2VzIHRocmVhZGVkIG9uIHBhZ2UtPmxydQogICovCiB2b2lkIHB1dF9wYWdlc19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKnBhZ2VzKQogewpkaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jCmluZGV4IGVjNDJmMDEuLjUwNzU3ZWUgMTAwNjQ0Ci0tLSBhL21tL3N3YXBfc3RhdGUuYworKysgYi9tbS9zd2FwX3N0YXRlLmMKQEAgLTExNSw2ICsxMTUsNyBAQAogLyoqCiAgKiBhZGRfdG9fc3dhcCAtIGFsbG9jYXRlIHN3YXAgc3BhY2UgZm9yIGEgcGFnZQogICogQHBhZ2U6IHBhZ2Ugd2Ugd2FudCB0byBtb3ZlIHRvIHN3YXAKKyAqIEBnZnBfbWFzazogbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3MKICAqCiAgKiBBbGxvY2F0ZSBzd2FwIHNwYWNlIGZvciB0aGUgcGFnZSBhbmQgYWRkIHRoZSBwYWdlIHRvIHRoZQogICogc3dhcCBjYWNoZS4gIENhbGxlciBuZWVkcyB0byBob2xkIHRoZSBwYWdlIGxvY2suIApAQCAtMzE1LDYgKzMxNiw3IEBACiAvKioKICAqIHN3YXBpbl9yZWFkYWhlYWQgLSBzd2FwIGluIHBhZ2VzIGluIGhvcGUgd2UgbmVlZCB0aGVtIHNvb24KICAqIEBlbnRyeTogc3dhcCBlbnRyeSBvZiB0aGlzIG1lbW9yeQorICogQGdmcF9tYXNrOiBtZW1vcnkgYWxsb2NhdGlvbiBmbGFncwogICogQHZtYTogdXNlciB2bWEgdGhpcyBhZGRyZXNzIGJlbG9uZ3MgdG8KICAqIEBhZGRyOiB0YXJnZXQgYWRkcmVzcyBmb3IgbWVtcG9saWN5CiAgKgpkaWZmIC0tZ2l0IGEvbW0vdGlueS1zaG1lbS5jIGIvbW0vdGlueS1zaG1lbS5jCmluZGV4IDcwMjA4MzYuLmYwZjU1ODcgMTAwNjQ0Ci0tLSBhL21tL3Rpbnktc2htZW0uYworKysgYi9tbS90aW55LXNobWVtLmMKQEAgLTM5LDEyICszOSwxMSBAQAogfQogbW9kdWxlX2luaXQoaW5pdF90bXBmcykKIAotLyoKKy8qKgogICogc2htZW1fZmlsZV9zZXR1cCAtIGdldCBhbiB1bmxpbmtlZCBmaWxlIGxpdmluZyBpbiB0bXBmcwotICoKICAqIEBuYW1lOiBuYW1lIGZvciBkZW50cnkgKHRvIGJlIHNlZW4gaW4gL3Byb2MvPHBpZD4vbWFwcwogICogQHNpemU6IHNpemUgdG8gYmUgc2V0IGZvciB0aGUgZmlsZQotICoKKyAqIEBmbGFnczogdm1fZmxhZ3MKICAqLwogc3RydWN0IGZpbGUgKnNobWVtX2ZpbGVfc2V0dXAoY2hhciAqbmFtZSwgbG9mZl90IHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CkBAIC05NSw5ICs5NCw4IEBACiAJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOwogfQogCi0vKgorLyoqCiAgKiBzaG1lbV96ZXJvX3NldHVwIC0gc2V0dXAgYSBzaGFyZWQgYW5vbnltb3VzIG1hcHBpbmcKLSAqCiAgKiBAdm1hOiB0aGUgdm1hIHRvIGJlIG1tYXBwZWQgaXMgcHJlcGFyZWQgYnkgZG9fbW1hcF9wZ29mZgogICovCiBpbnQgc2htZW1femVyb19zZXR1cChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKZGlmZiAtLWdpdCBhL21tL3ZtYWxsb2MuYyBiL21tL3ZtYWxsb2MuYwppbmRleCA5NTBjMGJlLi5lY2Y5MWY4IDEwMDY0NAotLS0gYS9tbS92bWFsbG9jLmMKKysrIGIvbW0vdm1hbGxvYy5jCkBAIC03NTcsNyArNzU3LDggQEAKICAqCUB2bWE6CQl2bWEgdG8gY292ZXIgKG1hcCBmdWxsIHJhbmdlIG9mIHZtYSkKICAqCUBhZGRyOgkJdm1hbGxvYyBtZW1vcnkKICAqCUBwZ29mZjoJCW51bWJlciBvZiBwYWdlcyBpbnRvIGFkZHIgYmVmb3JlIGZpcnN0IHBhZ2UgdG8gbWFwCi0gKglAcmV0dXJuczoJMCBmb3Igc3VjY2VzcywgLUV4eHggb24gZmFpbHVyZQorICoKKyAqCVJldHVybnM6CTAgZm9yIHN1Y2Nlc3MsIC1FeHh4IG9uIGZhaWx1cmUKICAqCiAgKglUaGlzIGZ1bmN0aW9uIGNoZWNrcyB0aGF0IGFkZHIgaXMgYSB2YWxpZCB2bWFsbG9jJ2VkIGFyZWEsIGFuZAogICoJdGhhdCBpdCBpcyBiaWcgZW5vdWdoIHRvIGNvdmVyIHRoZSB2bWEuIFdpbGwgcmV0dXJuIGZhaWx1cmUgaWYKQEAgLTgyOSw3ICs4MzAsOCBAQAogLyoqCiAgKglhbGxvY192bV9hcmVhIC0gYWxsb2NhdGUgYSByYW5nZSBvZiBrZXJuZWwgYWRkcmVzcyBzcGFjZQogICoJQHNpemU6CQlzaXplIG9mIHRoZSBhcmVhCi0gKglAcmV0dXJuczoJTlVMTCBvbiBmYWlsdXJlLCB2bV9zdHJ1Y3Qgb24gc3VjY2VzcworICoKKyAqCVJldHVybnM6CU5VTEwgb24gZmFpbHVyZSwgdm1fc3RydWN0IG9uIHN1Y2Nlc3MKICAqCiAgKglUaGlzIGZ1bmN0aW9uIHJlc2VydmVzIGEgcmFuZ2Ugb2Yga2VybmVsIGFkZHJlc3Mgc3BhY2UsIGFuZAogICoJYWxsb2NhdGVzIHBhZ2V0YWJsZXMgdG8gbWFwIHRoYXQgcmFuZ2UuICBObyBhY3R1YWwgbWFwcGluZ3MKZGlmZiAtLWdpdCBhL25ldC84MDIxcS92bGFuX2Rldi5jIGIvbmV0LzgwMjFxL3ZsYW5fZGV2LmMKaW5kZXggNzdmMDRlNC4uOGZiY2VmZSAxMDA2NDQKLS0tIGEvbmV0LzgwMjFxL3ZsYW5fZGV2LmMKKysrIGIvbmV0LzgwMjFxL3ZsYW5fZGV2LmMKQEAgLTM4Miw3ICszODIsNyBAQAogCQl2bGFuX2Rldl9pbmZvKGRldiktPmNudF9lbmNhcF9vbl94bWl0Kys7CiAKIAkJcHJfZGVidWcoIiVzOiBwcm90byB0byBlbmNhcDogMHglaHhcbiIsCi0JCQkgX19GVU5DVElPTl9fLCBodG9ucyh2ZXRoLT5oX3ZsYW5fcHJvdG8pKTsKKwkJCSBfX0ZVTkNUSU9OX18sIG50b2hzKHZldGgtPmhfdmxhbl9wcm90bykpOwogCQkvKiBDb25zdHJ1Y3QgdGhlIHNlY29uZCB0d28gYnl0ZXMuIFRoaXMgZmllbGQgbG9va3Mgc29tZXRoaW5nCiAJCSAqIGxpa2U6CiAJCSAqIHVzcl9wcmlvcml0eTogMyBiaXRzCSAoaGlnaCBiaXRzKQpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9mZGIuYyBiL25ldC9icmlkZ2UvYnJfZmRiLmMKaW5kZXggYmM0MDM3Ny4uOTMyNmMzNyAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9mZGIuYworKysgYi9uZXQvYnJpZGdlL2JyX2ZkYi5jCkBAIC0xMzYsNyArMTM2LDcgQEAKIAkJCXRoaXNfdGltZXIgPSBmLT5hZ2VpbmdfdGltZXIgKyBkZWxheTsKIAkJCWlmICh0aW1lX2JlZm9yZV9lcSh0aGlzX3RpbWVyLCBqaWZmaWVzKSkKIAkJCQlmZGJfZGVsZXRlKGYpOwotCQkJZWxzZSBpZiAodGhpc190aW1lciA8IG5leHRfdGltZXIpCisJCQllbHNlIGlmICh0aW1lX2JlZm9yZSh0aGlzX3RpbWVyLCBuZXh0X3RpbWVyKSkKIAkJCQluZXh0X3RpbWVyID0gdGhpc190aW1lcjsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldHBvbGwuYyBiL25ldC9jb3JlL25ldHBvbGwuYwppbmRleCA0YjdlNzU2Li5jNjM1ZGU1IDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZXRwb2xsLmMKKysrIGIvbmV0L2NvcmUvbmV0cG9sbC5jCkBAIC0yMTUsMTAgKzIxNSwxMiBAQAogCQl3aGlsZSAoY2xpc3QgIT0gTlVMTCkgewogCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGNsaXN0OwogCQkJY2xpc3QgPSBjbGlzdC0+bmV4dDsKLQkJCWlmIChza2ItPmRlc3RydWN0b3IpCisJCQlpZiAoc2tiLT5kZXN0cnVjdG9yKSB7CisJCQkJYXRvbWljX2luYygmc2tiLT51c2Vycyk7CiAJCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsgLyogcHV0IHRoaXMgb25lIGJhY2sgKi8KLQkJCWVsc2UKKwkJCX0gZWxzZSB7CiAJCQkJX19rZnJlZV9za2Ioc2tiKTsKKwkJCX0KIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29jay5jIGIvbmV0L2NvcmUvc29jay5jCmluZGV4IDA5Y2IzYTcuLjI2NTRjMTQgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NvY2suYworKysgYi9uZXQvY29yZS9zb2NrLmMKQEAgLTE2MjEsNyArMTYyMSw3IEBACiB7CiAJcmVhZF9sb2NrKCZzay0+c2tfY2FsbGJhY2tfbG9jayk7CiAJaWYgKHNrLT5za19zbGVlcCAmJiB3YWl0cXVldWVfYWN0aXZlKHNrLT5za19zbGVlcCkpCi0JCXdha2VfdXBfaW50ZXJydXB0aWJsZShzay0+c2tfc2xlZXApOworCQl3YWtlX3VwX2ludGVycnVwdGlibGVfc3luYyhzay0+c2tfc2xlZXApOwogCXNrX3dha2VfYXN5bmMoc2ssIFNPQ0tfV0FLRV9XQUlURCwgUE9MTF9JTik7CiAJcmVhZF91bmxvY2soJnNrLT5za19jYWxsYmFja19sb2NrKTsKIH0KQEAgLTE2MzUsNyArMTYzNSw3IEBACiAJICovCiAJaWYgKChhdG9taWNfcmVhZCgmc2stPnNrX3dtZW1fYWxsb2MpIDw8IDEpIDw9IHNrLT5za19zbmRidWYpIHsKIAkJaWYgKHNrLT5za19zbGVlcCAmJiB3YWl0cXVldWVfYWN0aXZlKHNrLT5za19zbGVlcCkpCi0JCQl3YWtlX3VwX2ludGVycnVwdGlibGUoc2stPnNrX3NsZWVwKTsKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZV9zeW5jKHNrLT5za19zbGVlcCk7CiAKIAkJLyogU2hvdWxkIGFncmVlIHdpdGggcG9sbCwgb3RoZXJ3aXNlIHNvbWUgcHJvZ3JhbXMgYnJlYWsgKi8KIAkJaWYgKHNvY2tfd3JpdGVhYmxlKHNrKSkKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2FmX2luZXQuYyBiL25ldC9pcHY0L2FmX2luZXQuYwppbmRleCAwOWNhNTI5Li4wZDEwOTUwIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9hZl9pbmV0LmMKKysrIGIvbmV0L2lwdjQvYWZfaW5ldC5jCkBAIC00NTgsNyArNDU4LDcgQEAKIAllcnIgPSAtRUFERFJOT1RBVkFJTDsKIAlpZiAoIXN5c2N0bF9pcF9ub25sb2NhbF9iaW5kICYmCiAJICAgICFpbmV0LT5mcmVlYmluZCAmJgotCSAgICBhZGRyLT5zaW5fYWRkci5zX2FkZHIgIT0gSU5BRERSX0FOWSAmJgorCSAgICBhZGRyLT5zaW5fYWRkci5zX2FkZHIgIT0gaHRvbmwoSU5BRERSX0FOWSkgJiYKIAkgICAgY2hrX2FkZHJfcmV0ICE9IFJUTl9MT0NBTCAmJgogCSAgICBjaGtfYWRkcl9yZXQgIT0gUlROX01VTFRJQ0FTVCAmJgogCSAgICBjaGtfYWRkcl9yZXQgIT0gUlROX0JST0FEQ0FTVCkKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2VzcDQuYyBiL25ldC9pcHY0L2VzcDQuYwppbmRleCAwOTFlNjcwLi5mM2NlY2EzIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9lc3A0LmMKKysrIGIvbmV0L2lwdjQvZXNwNC5jCkBAIC0xNjgsNyArMTY4LDcgQEAKIAkJc3RydWN0IHhmcm1fZW5jYXBfdG1wbCAqZW5jYXAgPSB4LT5lbmNhcDsKIAkJc3RydWN0IHVkcGhkciAqdWg7CiAJCV9fYmUzMiAqdWRwZGF0YTMyOwotCQl1bnNpZ25lZCBpbnQgc3BvcnQsIGRwb3J0OworCQlfX2JlMTYgc3BvcnQsIGRwb3J0OwogCQlpbnQgZW5jYXBfdHlwZTsKIAogCQlzcGluX2xvY2tfYmgoJngtPmxvY2spOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfc29ja2dsdWUuYyBiL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMKaW5kZXggZGUwNTcyYy4uZjcyNDU3YiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfc29ja2dsdWUuYworKysgYi9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jCkBAIC01ODMsNyArNTgzLDcgQEAKIAkJfQogCiAJCWlmICghbXJlcS5pbXJfaWZpbmRleCkgewotCQkJaWYgKG1yZXEuaW1yX2FkZHJlc3Muc19hZGRyID09IElOQUREUl9BTlkpIHsKKwkJCWlmIChtcmVxLmltcl9hZGRyZXNzLnNfYWRkciA9PSBodG9ubChJTkFERFJfQU5ZKSkgewogCQkJCWluZXQtPm1jX2luZGV4ID0gMDsKIAkJCQlpbmV0LT5tY19hZGRyICA9IDA7CiAJCQkJZXJyID0gMDsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwY29uZmlnLmMgYi9uZXQvaXB2NC9pcGNvbmZpZy5jCmluZGV4IDVkZDkzODUuLjdjOTkyZmIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwY29uZmlnLmMKKysrIGIvbmV0L2lwdjQvaXBjb25maWcuYwpAQCAtMTAzLDYgKzEwMyw3IEBACiAJCQkJCSAgIC0gJzMnIGZyb20gcmVzb2x2LmggKi8KIAogI2RlZmluZSBOT05FIF9fY29uc3RhbnRfaHRvbmwoSU5BRERSX05PTkUpCisjZGVmaW5lIEFOWSBfX2NvbnN0YW50X2h0b25sKElOQUREUl9BTlkpCiAKIC8qCiAgKiBQdWJsaWMgSVAgY29uZmlndXJhdGlvbgpAQCAtMTQ3OSwxOSArMTQ4MCwxOSBAQAogCQkJREJHKCgiSVAtQ29uZmlnOiBQYXJhbWV0ZXIgIyVkOiBgJXMnXG4iLCBudW0sIGlwKSk7CiAJCQlzd2l0Y2ggKG51bSkgewogCQkJY2FzZSAwOgotCQkJCWlmICgoaWNfbXlhZGRyID0gaW5fYXRvbihpcCkpID09IElOQUREUl9BTlkpCisJCQkJaWYgKChpY19teWFkZHIgPSBpbl9hdG9uKGlwKSkgPT0gQU5ZKQogCQkJCQlpY19teWFkZHIgPSBOT05FOwogCQkJCWJyZWFrOwogCQkJY2FzZSAxOgotCQkJCWlmICgoaWNfc2VydmFkZHIgPSBpbl9hdG9uKGlwKSkgPT0gSU5BRERSX0FOWSkKKwkJCQlpZiAoKGljX3NlcnZhZGRyID0gaW5fYXRvbihpcCkpID09IEFOWSkKIAkJCQkJaWNfc2VydmFkZHIgPSBOT05FOwogCQkJCWJyZWFrOwogCQkJY2FzZSAyOgotCQkJCWlmICgoaWNfZ2F0ZXdheSA9IGluX2F0b24oaXApKSA9PSBJTkFERFJfQU5ZKQorCQkJCWlmICgoaWNfZ2F0ZXdheSA9IGluX2F0b24oaXApKSA9PSBBTlkpCiAJCQkJCWljX2dhdGV3YXkgPSBOT05FOwogCQkJCWJyZWFrOwogCQkJY2FzZSAzOgotCQkJCWlmICgoaWNfbmV0bWFzayA9IGluX2F0b24oaXApKSA9PSBJTkFERFJfQU5ZKQorCQkJCWlmICgoaWNfbmV0bWFzayA9IGluX2F0b24oaXApKSA9PSBBTlkpCiAJCQkJCWljX25ldG1hc2sgPSBOT05FOwogCQkJCWJyZWFrOwogCQkJY2FzZSA0OgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9yZWNlbnQuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfcmVjZW50LmMKaW5kZXggNjhjYmUzYy4uOGU4ZjA0MiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9yZWNlbnQuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X3JlY2VudC5jCkBAIC0yNTIsNiArMjUyLDggQEAKIAlpZiAoKGluZm8tPmNoZWNrX3NldCAmIChJUFRfUkVDRU5UX1NFVCB8IElQVF9SRUNFTlRfUkVNT1ZFKSkgJiYKIAkgICAgKGluZm8tPnNlY29uZHMgfHwgaW5mby0+aGl0X2NvdW50KSkKIAkJcmV0dXJuIGZhbHNlOworCWlmIChpbmZvLT5oaXRfY291bnQgPiBpcF9wa3RfbGlzdF90b3QpCisJCXJldHVybiBmYWxzZTsKIAlpZiAoaW5mby0+bmFtZVswXSA9PSAnXDAnIHx8CiAJICAgIHN0cm5sZW4oaW5mby0+bmFtZSwgSVBUX1JFQ0VOVF9OQU1FX0xFTikgPT0gSVBUX1JFQ0VOVF9OQU1FX0xFTikKIAkJcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX291dHB1dC5jIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jCmluZGV4IDAxNTc4ZjUuLjcyYjkzNTAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYworKysgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKQEAgLTI1NSw3ICsyNTUsNyBAQAogCQkgKgogCQkgKiBSZWxheCBXaWxsIFJvYmluc29uLgogCQkgKi8KLQkJbmV3X3dpbiA9IGN1cl93aW47CisJCW5ld193aW4gPSBBTElHTihjdXJfd2luLCAxIDw8IHRwLT5yeF9vcHQucmN2X3dzY2FsZSk7CiAJfQogCXRwLT5yY3Zfd25kID0gbmV3X3dpbjsKIAl0cC0+cmN2X3d1cCA9IHRwLT5yY3Zfbnh0OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvS2NvbmZpZyBiL25ldC9pcHY2L0tjb25maWcKaW5kZXggNTgyMTlkZi4uNDcyNjNlNCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvS2NvbmZpZworKysgYi9uZXQvaXB2Ni9LY29uZmlnCkBAIC0xNzksMTEgKzE3OSwxMiBAQAogCSAgU2F5aW5nIE0gaGVyZSB3aWxsIHByb2R1Y2UgYSBtb2R1bGUgY2FsbGVkIHNpdC5rby4gSWYgdW5zdXJlLCBzYXkgWS4KIAogY29uZmlnIElQVjZfVFVOTkVMCi0JdHJpc3RhdGUgIklQdjY6IElQdjYtaW4tSVB2NiB0dW5uZWwiCisJdHJpc3RhdGUgIklQdjY6IElQLWluLUlQdjYgdHVubmVsIChSRkMyNDczKSIKIAlzZWxlY3QgSU5FVDZfVFVOTkVMCiAJZGVwZW5kcyBvbiBJUFY2CiAJLS0taGVscC0tLQotCSAgU3VwcG9ydCBmb3IgSVB2Ni1pbi1JUHY2IHR1bm5lbHMgZGVzY3JpYmVkIGluIFJGQyAyNDczLgorCSAgU3VwcG9ydCBmb3IgSVB2Ni1pbi1JUHY2IGFuZCBJUHY0LWluLUlQdjYgdHVubmVscyBkZXNjcmliZWQgaW4KKwkgIFJGQyAyNDczLgogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jCmluZGV4IDYyMTM3ODcuLjg5OGYxOTIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jCkBAIC04NDIsNyArODQyLDcgQEAKIAogCXNldF9oMjI1X2FkZHIgPSByY3VfZGVyZWZlcmVuY2Uoc2V0X2gyMjVfYWRkcl9ob29rKTsKIAlpZiAoKHNldHVwLT5vcHRpb25zICYgZVNldHVwX1VVSUVfZGVzdENhbGxTaWduYWxBZGRyZXNzKSAmJgotCSAgICAoc2V0X2gyMjVfYWRkcikgJiYgY3QtPnN0YXR1cyAmJiBJUFNfTkFUX01BU0sgJiYKKwkgICAgKHNldF9oMjI1X2FkZHIpICYmIGN0LT5zdGF0dXMgJiBJUFNfTkFUX01BU0sgJiYKIAkgICAgZ2V0X2gyMjVfYWRkcihjdCwgKmRhdGEsICZzZXR1cC0+ZGVzdENhbGxTaWduYWxBZGRyZXNzLAogCQkJICAmYWRkciwgJnBvcnQpICYmCiAJICAgIG1lbWNtcCgmYWRkciwgJmN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLnUzLCBzaXplb2YoYWRkcikpKSB7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX3UzMi5jIGIvbmV0L3NjaGVkL2Nsc191MzIuYwppbmRleCBiMThmYTk1Li5jNWMxNmI0IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvY2xzX3UzMi5jCisrKyBiL25ldC9zY2hlZC9jbHNfdTMyLmMKQEAgLTg5LDcgKzg5LDcgQEAKIAogc3RhdGljIHN0cnVjdCB0Y191X2NvbW1vbiAqdTMyX2xpc3Q7CiAKLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIHUzMl9oYXNoX2ZvbGQodTMyIGtleSwgc3RydWN0IHRjX3UzMl9zZWwgKnNlbCwgdTggZnNoaWZ0KQorc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgdTMyX2hhc2hfZm9sZChfX2JlMzIga2V5LCBzdHJ1Y3QgdGNfdTMyX3NlbCAqc2VsLCB1OCBmc2hpZnQpCiB7CiAJdW5zaWduZWQgaCA9IG50b2hsKGtleSAmIHNlbC0+aG1hc2spPj5mc2hpZnQ7CiAKQEAgLTEzNyw3ICsxMzcsNyBAQAogCiAJCWZvciAoaSA9IG4tPnNlbC5ua2V5czsgaT4wOyBpLS0sIGtleSsrKSB7CiAKLQkJCWlmICgoKih1MzIqKShwdHIra2V5LT5vZmYrKG9mZjIma2V5LT5vZmZtYXNrKSlea2V5LT52YWwpJmtleS0+bWFzaykgeworCQkJaWYgKCgqKF9fYmUzMiopKHB0citrZXktPm9mZisob2ZmMiZrZXktPm9mZm1hc2spKV5rZXktPnZhbCkma2V5LT5tYXNrKSB7CiAJCQkJbiA9IG4tPm5leHQ7CiAJCQkJZ290byBuZXh0X2tub2RlOwogCQkJfQpAQCAtMTgyLDcgKzE4Miw3IEBACiAJCWh0ID0gbi0+aHRfZG93bjsKIAkJc2VsID0gMDsKIAkJaWYgKGh0LT5kaXZpc29yKQotCQkJc2VsID0gaHQtPmRpdmlzb3ImdTMyX2hhc2hfZm9sZCgqKHUzMiopKHB0cituLT5zZWwuaG9mZiksICZuLT5zZWwsbi0+ZnNoaWZ0KTsKKwkJCXNlbCA9IGh0LT5kaXZpc29yJnUzMl9oYXNoX2ZvbGQoKihfX2JlMzIqKShwdHIrbi0+c2VsLmhvZmYpLCAmbi0+c2VsLG4tPmZzaGlmdCk7CiAKIAkJaWYgKCEobi0+c2VsLmZsYWdzJihUQ19VMzJfVkFST0ZGU0VUfFRDX1UzMl9PRkZTRVR8VENfVTMyX0VBVCkpKQogCQkJZ290byBuZXh0X2h0OwpAQCAtMTkwLDcgKzE5MCw3IEBACiAJCWlmIChuLT5zZWwuZmxhZ3MmKFRDX1UzMl9PRkZTRVR8VENfVTMyX1ZBUk9GRlNFVCkpIHsKIAkJCW9mZjIgPSBuLT5zZWwub2ZmICsgMzsKIAkJCWlmIChuLT5zZWwuZmxhZ3MmVENfVTMyX1ZBUk9GRlNFVCkKLQkJCQlvZmYyICs9IG50b2hzKG4tPnNlbC5vZmZtYXNrICYgKih1MTYqKShwdHIrbi0+c2VsLm9mZm9mZikpID4+bi0+c2VsLm9mZnNoaWZ0OworCQkJCW9mZjIgKz0gbnRvaHMobi0+c2VsLm9mZm1hc2sgJiAqKF9fYmUxNiopKHB0cituLT5zZWwub2Zmb2ZmKSkgPj5uLT5zZWwub2Zmc2hpZnQ7CiAJCQlvZmYyICY9IH4zOwogCQl9CiAJCWlmIChuLT5zZWwuZmxhZ3MmVENfVTMyX0VBVCkgewpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2VtX3UzMi5jIGIvbmV0L3NjaGVkL2VtX3UzMi5jCmluZGV4IDExMjc5NmUuLjk1M2YxNDcgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9lbV91MzIuYworKysgYi9uZXQvc2NoZWQvZW1fdTMyLmMKQEAgLTM1LDcgKzM1LDcgQEAKIAlpZiAoIXRjZl92YWxpZF9vZmZzZXQoc2tiLCBwdHIsIHNpemVvZih1MzIpKSkKIAkJcmV0dXJuIDA7CiAKLQlyZXR1cm4gISgoKCoodTMyKikgcHRyKSAgXiBrZXktPnZhbCkgJiBrZXktPm1hc2spOworCXJldHVybiAhKCgoKihfX2JlMzIqKSBwdHIpICBeIGtleS0+dmFsKSAmIGtleS0+bWFzayk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdGNmX2VtYXRjaF9vcHMgZW1fdTMyX29wcyA9IHsKZGlmZiAtLWdpdCBhL25ldC9zY3RwL2lucHV0LmMgYi9uZXQvc2N0cC9pbnB1dC5jCmluZGV4IDU3ZmUyZjguLjgxMmZmMTcgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL2lucHV0LmMKKysrIGIvbmV0L3NjdHAvaW5wdXQuYwpAQCAtOTQ0LDcgKzk0NCw3IEBACiBzdGF0aWMgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKl9fc2N0cF9yY3ZfYXNjb25mX2xvb2t1cCgKIAkJCQkJc2N0cF9jaHVua2hkcl90ICpjaCwKIAkJCQkJY29uc3QgdW5pb24gc2N0cF9hZGRyICpsYWRkciwKLQkJCQkJX19iZTMyIHBlZXJfcG9ydCwKKwkJCQkJX19iZTE2IHBlZXJfcG9ydCwKIAkJCQkJc3RydWN0IHNjdHBfdHJhbnNwb3J0ICoqdHJhbnNwb3J0cCkKIHsKIAlzY3RwX2FkZGlwX2NodW5rX3QgKmFzY29uZiA9IChzdHJ1Y3Qgc2N0cF9hZGRpcF9jaHVuayAqKWNoOwpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvaXB2Ni5jIGIvbmV0L3NjdHAvaXB2Ni5jCmluZGV4IDlhYTA3MzMuLmIxZTA1ZDcgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL2lwdjYuYworKysgYi9uZXQvc2N0cC9pcHY2LmMKQEAgLTEwMTQsMTUgKzEwMTQsMjQgQEAKIH07CiAKIC8qIEluaXRpYWxpemUgSVB2NiBzdXBwb3J0IGFuZCByZWdpc3RlciB3aXRoIHNvY2tldCBsYXllci4gICovCi1pbnQgc2N0cF92Nl9pbml0KHZvaWQpCit2b2lkIHNjdHBfdjZfcGZfaW5pdCh2b2lkKQogewotCWludCByYzsKLQogCS8qIFJlZ2lzdGVyIHRoZSBTQ1RQIHNwZWNpZmljIFBGX0lORVQ2IGZ1bmN0aW9ucy4gKi8KIAlzY3RwX3JlZ2lzdGVyX3BmKCZzY3RwX3BmX2luZXQ2LCBQRl9JTkVUNik7CiAKIAkvKiBSZWdpc3RlciB0aGUgU0NUUCBzcGVjaWZpYyBBRl9JTkVUNiBmdW5jdGlvbnMuICovCiAJc2N0cF9yZWdpc3Rlcl9hZigmc2N0cF9hZl9pbmV0Nik7Cit9CisKK3ZvaWQgc2N0cF92Nl9wZl9leGl0KHZvaWQpCit7CisJbGlzdF9kZWwoJnNjdHBfYWZfaW5ldDYubGlzdCk7Cit9CisKKy8qIEluaXRpYWxpemUgSVB2NiBzdXBwb3J0IGFuZCByZWdpc3RlciB3aXRoIHNvY2tldCBsYXllci4gICovCitpbnQgc2N0cF92Nl9wcm90b3N3X2luaXQodm9pZCkKK3sKKwlpbnQgcmM7CiAKIAlyYyA9IHByb3RvX3JlZ2lzdGVyKCZzY3RwdjZfcHJvdCwgMSk7CiAJaWYgKHJjKQpAQCAtMTAzNSw2ICsxMDQ0LDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3ZvaWQgc2N0cF92Nl9wcm90b3N3X2V4aXQodm9pZCkKK3sKKwlpbmV0Nl91bnJlZ2lzdGVyX3Byb3Rvc3coJnNjdHB2Nl9zZXFwYWNrZXRfcHJvdG9zdyk7CisJaW5ldDZfdW5yZWdpc3Rlcl9wcm90b3N3KCZzY3RwdjZfc3RyZWFtX3Byb3Rvc3cpOworCXByb3RvX3VucmVnaXN0ZXIoJnNjdHB2Nl9wcm90KTsKK30KKworCiAvKiBSZWdpc3RlciB3aXRoIGluZXQ2IGxheWVyLiAqLwogaW50IHNjdHBfdjZfYWRkX3Byb3RvY29sKHZvaWQpCiB7CkBAIC0xMDQ3LDE1ICsxMDY0LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogSVB2NiBzcGVjaWZpYyBleGl0IHN1cHBvcnQuICovCi12b2lkIHNjdHBfdjZfZXhpdCh2b2lkKQotewotCWluZXQ2X3VucmVnaXN0ZXJfcHJvdG9zdygmc2N0cHY2X3NlcXBhY2tldF9wcm90b3N3KTsKLQlpbmV0Nl91bnJlZ2lzdGVyX3Byb3Rvc3coJnNjdHB2Nl9zdHJlYW1fcHJvdG9zdyk7Ci0JcHJvdG9fdW5yZWdpc3Rlcigmc2N0cHY2X3Byb3QpOwotCWxpc3RfZGVsKCZzY3RwX2FmX2luZXQ2Lmxpc3QpOwotfQotCiAvKiBVbnJlZ2lzdGVyIHdpdGggaW5ldDYgbGF5ZXIuICovCiB2b2lkIHNjdHBfdjZfZGVsX3Byb3RvY29sKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9wcm90b2NvbC5jIGIvbmV0L3NjdHAvcHJvdG9jb2wuYwppbmRleCBhZDBhNDA2Li5mOTAwOTFhIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9wcm90b2NvbC5jCisrKyBiL25ldC9zY3RwL3Byb3RvY29sLmMKQEAgLTMzNywxNCArMzM3LDE0IEBACiBzdGF0aWMgdm9pZCBzY3RwX3Y0X2luYWRkcl9hbnkodW5pb24gc2N0cF9hZGRyICphZGRyLCBfX2JlMTYgcG9ydCkKIHsKIAlhZGRyLT52NC5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKLQlhZGRyLT52NC5zaW5fYWRkci5zX2FkZHIgPSBJTkFERFJfQU5ZOworCWFkZHItPnY0LnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9BTlkpOwogCWFkZHItPnY0LnNpbl9wb3J0ID0gcG9ydDsKIH0KIAogLyogSXMgdGhpcyBhIHdpbGRjYXJkIGFkZHJlc3M/ICovCiBzdGF0aWMgaW50IHNjdHBfdjRfaXNfYW55KGNvbnN0IHVuaW9uIHNjdHBfYWRkciAqYWRkcikKIHsKLQlyZXR1cm4gSU5BRERSX0FOWSA9PSBhZGRyLT52NC5zaW5fYWRkci5zX2FkZHI7CisJcmV0dXJuIGh0b25sKElOQUREUl9BTlkpID09IGFkZHItPnY0LnNpbl9hZGRyLnNfYWRkcjsKIH0KIAogLyogVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgdGhlIGFkZHJlc3MgaXMgYSB2YWxpZCBhZGRyZXNzIHRvIGJlIHVzZWQgZm9yCkBAIC0zNzUsNyArMzc1LDcgQEAKIAlpbnQgcmV0ID0gaW5ldF9hZGRyX3R5cGUoJmluaXRfbmV0LCBhZGRyLT52NC5zaW5fYWRkci5zX2FkZHIpOwogCiAKLQlpZiAoYWRkci0+djQuc2luX2FkZHIuc19hZGRyICE9IElOQUREUl9BTlkgJiYKKwlpZiAoYWRkci0+djQuc2luX2FkZHIuc19hZGRyICE9IGh0b25sKElOQUREUl9BTlkpICYmCiAJICAgcmV0ICE9IFJUTl9MT0NBTCAmJgogCSAgICFzcC0+aW5ldC5mcmVlYmluZCAmJgogCSAgICFzeXNjdGxfaXBfbm9ubG9jYWxfYmluZCkKQEAgLTc4NSw4ICs3ODUsOCBAQAogCS8qIFBGX0lORVQgb25seSBzdXBwb3J0cyBBRl9JTkVUIGFkZHJlc3Nlcy4gKi8KIAlpZiAoYWRkcjEtPnNhLnNhX2ZhbWlseSAhPSBhZGRyMi0+c2Euc2FfZmFtaWx5KQogCQlyZXR1cm4gMDsKLQlpZiAoSU5BRERSX0FOWSA9PSBhZGRyMS0+djQuc2luX2FkZHIuc19hZGRyIHx8Ci0JICAgIElOQUREUl9BTlkgPT0gYWRkcjItPnY0LnNpbl9hZGRyLnNfYWRkcikKKwlpZiAoaHRvbmwoSU5BRERSX0FOWSkgPT0gYWRkcjEtPnY0LnNpbl9hZGRyLnNfYWRkciB8fAorCSAgICBodG9ubChJTkFERFJfQU5ZKSA9PSBhZGRyMi0+djQuc2luX2FkZHIuc19hZGRyKQogCQlyZXR1cm4gMTsKIAlpZiAoYWRkcjEtPnY0LnNpbl9hZGRyLnNfYWRkciA9PSBhZGRyMi0+djQuc2luX2FkZHIuc19hZGRyKQogCQlyZXR1cm4gMTsKQEAgLTk5Miw2ICs5OTIsNTggQEAKIAlmcmVlX3BlcmNwdShzY3RwX3N0YXRpc3RpY3NbMV0pOwogfQogCitzdGF0aWMgdm9pZCBzY3RwX3Y0X3BmX2luaXQodm9pZCkKK3sKKwkvKiBJbml0aWFsaXplIHRoZSBTQ1RQIHNwZWNpZmljIFBGIGZ1bmN0aW9ucy4gKi8KKwlzY3RwX3JlZ2lzdGVyX3BmKCZzY3RwX3BmX2luZXQsIFBGX0lORVQpOworCXNjdHBfcmVnaXN0ZXJfYWYoJnNjdHBfYWZfaW5ldCk7Cit9CisKK3N0YXRpYyB2b2lkIHNjdHBfdjRfcGZfZXhpdCh2b2lkKQoreworCWxpc3RfZGVsKCZzY3RwX2FmX2luZXQubGlzdCk7Cit9CisKK3N0YXRpYyBpbnQgc2N0cF92NF9wcm90b3N3X2luaXQodm9pZCkKK3sKKwlpbnQgcmM7CisKKwlyYyA9IHByb3RvX3JlZ2lzdGVyKCZzY3RwX3Byb3QsIDEpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJLyogUmVnaXN0ZXIgU0NUUChVRFAgYW5kIFRDUCBzdHlsZSkgd2l0aCBzb2NrZXQgbGF5ZXIuICAqLworCWluZXRfcmVnaXN0ZXJfcHJvdG9zdygmc2N0cF9zZXFwYWNrZXRfcHJvdG9zdyk7CisJaW5ldF9yZWdpc3Rlcl9wcm90b3N3KCZzY3RwX3N0cmVhbV9wcm90b3N3KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzY3RwX3Y0X3Byb3Rvc3dfZXhpdCh2b2lkKQoreworCWluZXRfdW5yZWdpc3Rlcl9wcm90b3N3KCZzY3RwX3N0cmVhbV9wcm90b3N3KTsKKwlpbmV0X3VucmVnaXN0ZXJfcHJvdG9zdygmc2N0cF9zZXFwYWNrZXRfcHJvdG9zdyk7CisJcHJvdG9fdW5yZWdpc3Rlcigmc2N0cF9wcm90KTsKK30KKworc3RhdGljIGludCBzY3RwX3Y0X2FkZF9wcm90b2NvbCh2b2lkKQoreworCS8qIFJlZ2lzdGVyIG5vdGlmaWVyIGZvciBpbmV0IGFkZHJlc3MgYWRkaXRpb25zL2RlbGV0aW9ucy4gKi8KKwlyZWdpc3Rlcl9pbmV0YWRkcl9ub3RpZmllcigmc2N0cF9pbmV0YWRkcl9ub3RpZmllcik7CisKKwkvKiBSZWdpc3RlciBTQ1RQIHdpdGggaW5ldCBsYXllci4gICovCisJaWYgKGluZXRfYWRkX3Byb3RvY29sKCZzY3RwX3Byb3RvY29sLCBJUFBST1RPX1NDVFApIDwgMCkKKwkJcmV0dXJuIC1FQUdBSU47CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2N0cF92NF9kZWxfcHJvdG9jb2wodm9pZCkKK3sKKwlpbmV0X2RlbF9wcm90b2NvbCgmc2N0cF9wcm90b2NvbCwgSVBQUk9UT19TQ1RQKTsKKwl1bnJlZ2lzdGVyX2luZXRhZGRyX25vdGlmaWVyKCZzY3RwX2luZXRhZGRyX25vdGlmaWVyKTsKK30KKwogLyogSW5pdGlhbGl6ZSB0aGUgdW5pdmVyc2UgaW50byBzb21ldGhpbmcgc2Vuc2libGUuICAqLwogU0NUUF9TVEFUSUMgX19pbml0IGludCBzY3RwX2luaXQodm9pZCkKIHsKQEAgLTEwMzUsOCArMTA4Nyw2IEBACiAJLyogSW5pdGlhbGl6ZSBvYmplY3QgY291bnQgZGVidWdnaW5nLiAgKi8KIAlzY3RwX2RiZ19vYmpjbnRfaW5pdCgpOwogCi0JLyogSW5pdGlhbGl6ZSB0aGUgU0NUUCBzcGVjaWZpYyBQRiBmdW5jdGlvbnMuICovCi0Jc2N0cF9yZWdpc3Rlcl9wZigmc2N0cF9wZl9pbmV0LCBQRl9JTkVUKTsKIAkvKgogCSAqIDE0LiBTdWdnZXN0ZWQgU0NUUCBQcm90b2NvbCBQYXJhbWV0ZXIgVmFsdWVzCiAJICovCkBAIC0xMTk0LDE5ICsxMjQ0LDIyIEBACiAJc2N0cF9zeXNjdGxfcmVnaXN0ZXIoKTsKIAogCUlOSVRfTElTVF9IRUFEKCZzY3RwX2FkZHJlc3NfZmFtaWxpZXMpOwotCXNjdHBfcmVnaXN0ZXJfYWYoJnNjdHBfYWZfaW5ldCk7CisJc2N0cF92NF9wZl9pbml0KCk7CisJc2N0cF92Nl9wZl9pbml0KCk7CiAKLQlzdGF0dXMgPSBwcm90b19yZWdpc3Rlcigmc2N0cF9wcm90LCAxKTsKKwkvKiBJbml0aWFsaXplIHRoZSBsb2NhbCBhZGRyZXNzIGxpc3QuICovCisJSU5JVF9MSVNUX0hFQUQoJnNjdHBfbG9jYWxfYWRkcl9saXN0KTsKKwlzcGluX2xvY2tfaW5pdCgmc2N0cF9sb2NhbF9hZGRyX2xvY2spOworCXNjdHBfZ2V0X2xvY2FsX2FkZHJfbGlzdCgpOworCisJc3RhdHVzID0gc2N0cF92NF9wcm90b3N3X2luaXQoKTsKKwogCWlmIChzdGF0dXMpCi0JCWdvdG8gZXJyX3Byb3RvX3JlZ2lzdGVyOworCQlnb3RvIGVycl9wcm90b3N3X2luaXQ7CiAKLQkvKiBSZWdpc3RlciBTQ1RQKFVEUCBhbmQgVENQIHN0eWxlKSB3aXRoIHNvY2tldCBsYXllci4gICovCi0JaW5ldF9yZWdpc3Rlcl9wcm90b3N3KCZzY3RwX3NlcXBhY2tldF9wcm90b3N3KTsKLQlpbmV0X3JlZ2lzdGVyX3Byb3Rvc3coJnNjdHBfc3RyZWFtX3Byb3Rvc3cpOwotCi0Jc3RhdHVzID0gc2N0cF92Nl9pbml0KCk7CisJc3RhdHVzID0gc2N0cF92Nl9wcm90b3N3X2luaXQoKTsKIAlpZiAoc3RhdHVzKQotCQlnb3RvIGVycl92Nl9pbml0OworCQlnb3RvIGVycl92Nl9wcm90b3N3X2luaXQ7CiAKIAkvKiBJbml0aWFsaXplIHRoZSBjb250cm9sIGlub2RlL3NvY2tldCBmb3IgaGFuZGxpbmcgT09UQiBwYWNrZXRzLiAgKi8KIAlpZiAoKHN0YXR1cyA9IHNjdHBfY3RsX3NvY2tfaW5pdCgpKSkgewpAQCAtMTIxNSwxOSArMTI2OCw5IEBACiAJCWdvdG8gZXJyX2N0bF9zb2NrX2luaXQ7CiAJfQogCi0JLyogSW5pdGlhbGl6ZSB0aGUgbG9jYWwgYWRkcmVzcyBsaXN0LiAqLwotCUlOSVRfTElTVF9IRUFEKCZzY3RwX2xvY2FsX2FkZHJfbGlzdCk7Ci0Jc3Bpbl9sb2NrX2luaXQoJnNjdHBfbG9jYWxfYWRkcl9sb2NrKTsKLQlzY3RwX2dldF9sb2NhbF9hZGRyX2xpc3QoKTsKLQotCS8qIFJlZ2lzdGVyIG5vdGlmaWVyIGZvciBpbmV0IGFkZHJlc3MgYWRkaXRpb25zL2RlbGV0aW9ucy4gKi8KLQlyZWdpc3Rlcl9pbmV0YWRkcl9ub3RpZmllcigmc2N0cF9pbmV0YWRkcl9ub3RpZmllcik7Ci0KLQkvKiBSZWdpc3RlciBTQ1RQIHdpdGggaW5ldCBsYXllci4gICovCi0JaWYgKGluZXRfYWRkX3Byb3RvY29sKCZzY3RwX3Byb3RvY29sLCBJUFBST1RPX1NDVFApIDwgMCkgewotCQlzdGF0dXMgPSAtRUFHQUlOOworCXN0YXR1cyA9IHNjdHBfdjRfYWRkX3Byb3RvY29sKCk7CisJaWYgKHN0YXR1cykKIAkJZ290byBlcnJfYWRkX3Byb3RvY29sOwotCX0KIAogCS8qIFJlZ2lzdGVyIFNDVFAgd2l0aCBpbmV0NiBsYXllci4gICovCiAJc3RhdHVzID0gc2N0cF92Nl9hZGRfcHJvdG9jb2woKTsKQEAgLTEyMzgsMTggKzEyODEsMTggQEAKIG91dDoKIAlyZXR1cm4gc3RhdHVzOwogZXJyX3Y2X2FkZF9wcm90b2NvbDoKLQlpbmV0X2RlbF9wcm90b2NvbCgmc2N0cF9wcm90b2NvbCwgSVBQUk9UT19TQ1RQKTsKLQl1bnJlZ2lzdGVyX2luZXRhZGRyX25vdGlmaWVyKCZzY3RwX2luZXRhZGRyX25vdGlmaWVyKTsKKwlzY3RwX3Y2X2RlbF9wcm90b2NvbCgpOwogZXJyX2FkZF9wcm90b2NvbDoKLQlzY3RwX2ZyZWVfbG9jYWxfYWRkcl9saXN0KCk7CisJc2N0cF92NF9kZWxfcHJvdG9jb2woKTsKIAlzb2NrX3JlbGVhc2Uoc2N0cF9jdGxfc29ja2V0KTsKIGVycl9jdGxfc29ja19pbml0OgotCXNjdHBfdjZfZXhpdCgpOwotZXJyX3Y2X2luaXQ6Ci0JaW5ldF91bnJlZ2lzdGVyX3Byb3Rvc3coJnNjdHBfc3RyZWFtX3Byb3Rvc3cpOwotCWluZXRfdW5yZWdpc3Rlcl9wcm90b3N3KCZzY3RwX3NlcXBhY2tldF9wcm90b3N3KTsKLQlwcm90b191bnJlZ2lzdGVyKCZzY3RwX3Byb3QpOwotZXJyX3Byb3RvX3JlZ2lzdGVyOgorCXNjdHBfdjZfcHJvdG9zd19leGl0KCk7CitlcnJfdjZfcHJvdG9zd19pbml0OgorCXNjdHBfdjRfcHJvdG9zd19leGl0KCk7CitlcnJfcHJvdG9zd19pbml0OgorCXNjdHBfZnJlZV9sb2NhbF9hZGRyX2xpc3QoKTsKKwlzY3RwX3Y0X3BmX2V4aXQoKTsKKwlzY3RwX3Y2X3BmX2V4aXQoKTsKIAlzY3RwX3N5c2N0bF91bnJlZ2lzdGVyKCk7CiAJbGlzdF9kZWwoJnNjdHBfYWZfaW5ldC5saXN0KTsKIAlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXNjdHBfcG9ydF9oYXNodGFibGUsCkBAIC0xMjgyLDIzICsxMzI1LDIxIEBACiAKIAkvKiBVbnJlZ2lzdGVyIHdpdGggaW5ldDYvaW5ldCBsYXllcnMuICovCiAJc2N0cF92Nl9kZWxfcHJvdG9jb2woKTsKLQlpbmV0X2RlbF9wcm90b2NvbCgmc2N0cF9wcm90b2NvbCwgSVBQUk9UT19TQ1RQKTsKLQotCS8qIFVucmVnaXN0ZXIgbm90aWZpZXIgZm9yIGluZXQgYWRkcmVzcyBhZGRpdGlvbnMvZGVsZXRpb25zLiAqLwotCXVucmVnaXN0ZXJfaW5ldGFkZHJfbm90aWZpZXIoJnNjdHBfaW5ldGFkZHJfbm90aWZpZXIpOwotCi0JLyogRnJlZSB0aGUgbG9jYWwgYWRkcmVzcyBsaXN0LiAgKi8KLQlzY3RwX2ZyZWVfbG9jYWxfYWRkcl9saXN0KCk7CisJc2N0cF92NF9kZWxfcHJvdG9jb2woKTsKIAogCS8qIEZyZWUgdGhlIGNvbnRyb2wgZW5kcG9pbnQuICAqLwogCXNvY2tfcmVsZWFzZShzY3RwX2N0bF9zb2NrZXQpOwogCi0JLyogQ2xlYW51cCB2NiBpbml0aWFsaXphdGlvbnMuICovCi0Jc2N0cF92Nl9leGl0KCk7CisJLyogRnJlZSBwcm90b3N3IHJlZ2lzdHJhdGlvbnMgKi8KKwlzY3RwX3Y2X3Byb3Rvc3dfZXhpdCgpOworCXNjdHBfdjRfcHJvdG9zd19leGl0KCk7CisKKwkvKiBGcmVlIHRoZSBsb2NhbCBhZGRyZXNzIGxpc3QuICAqLworCXNjdHBfZnJlZV9sb2NhbF9hZGRyX2xpc3QoKTsKIAogCS8qIFVucmVnaXN0ZXIgd2l0aCBzb2NrZXQgbGF5ZXIuICovCi0JaW5ldF91bnJlZ2lzdGVyX3Byb3Rvc3coJnNjdHBfc3RyZWFtX3Byb3Rvc3cpOwotCWluZXRfdW5yZWdpc3Rlcl9wcm90b3N3KCZzY3RwX3NlcXBhY2tldF9wcm90b3N3KTsKKwlzY3RwX3Y2X3BmX2V4aXQoKTsKKwlzY3RwX3Y0X3BmX2V4aXQoKTsKIAogCXNjdHBfc3lzY3RsX3VucmVnaXN0ZXIoKTsKIAlsaXN0X2RlbCgmc2N0cF9hZl9pbmV0Lmxpc3QpOwpAQCAtMTMxNyw4ICsxMzU4LDYgQEAKIAogCWttZW1fY2FjaGVfZGVzdHJveShzY3RwX2NodW5rX2NhY2hlcCk7CiAJa21lbV9jYWNoZV9kZXN0cm95KHNjdHBfYnVja2V0X2NhY2hlcCk7Ci0KLQlwcm90b191bnJlZ2lzdGVyKCZzY3RwX3Byb3QpOwogfQogCiBtb2R1bGVfaW5pdChzY3RwX2luaXQpOwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3NfbWVjaF9zd2l0Y2guYyBiL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX21lY2hfc3dpdGNoLmMKaW5kZXggNjE4MDFhMC4uYmNlOWQ1MiAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3NfbWVjaF9zd2l0Y2guYworKysgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19tZWNoX3N3aXRjaC5jCkBAIC0zMTcsNyArMzE3LDcgQEAKIAogCWlmICghKmNvbnRleHRfaGFuZGxlKQogCQlyZXR1cm4oR1NTX1NfTk9fQ09OVEVYVCk7Ci0JaWYgKCgqY29udGV4dF9oYW5kbGUpLT5pbnRlcm5hbF9jdHhfaWQgIT0gMCkKKwlpZiAoKCpjb250ZXh0X2hhbmRsZSktPmludGVybmFsX2N0eF9pZCkKIAkJKCpjb250ZXh0X2hhbmRsZSktPm1lY2hfdHlwZS0+Z21fb3BzCiAJCQktPmdzc19kZWxldGVfc2VjX2NvbnRleHQoKCpjb250ZXh0X2hhbmRsZSkKIAkJCQkJCQktPmludGVybmFsX2N0eF9pZCk7CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N2Y194cHJ0LmMgYi9uZXQvc3VucnBjL3N2Y194cHJ0LmMKaW5kZXggZWEzNzdlMC4uMzMyZWI0NyAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9zdmNfeHBydC5jCisrKyBiL25ldC9zdW5ycGMvc3ZjX3hwcnQuYwpAQCAtMTg1LDcgKzE4NSw3IEBACiAJc3RydWN0IHN2Y194cHJ0X2NsYXNzICp4Y2w7CiAJc3RydWN0IHNvY2thZGRyX2luIHNpbiA9IHsKIAkJLnNpbl9mYW1pbHkJCT0gQUZfSU5FVCwKLQkJLnNpbl9hZGRyLnNfYWRkcgk9IElOQUREUl9BTlksCisJCS5zaW5fYWRkci5zX2FkZHIJPSBodG9ubChJTkFERFJfQU5ZKSwKIAkJLnNpbl9wb3J0CQk9IGh0b25zKHBvcnQpLAogCX07CiAJZHByaW50aygic3ZjOiBjcmVhdGluZyB0cmFuc3BvcnQgJXNbJWRdXG4iLCB4cHJ0X25hbWUsIHBvcnQpOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvY2FwYWJpbGl0eS5jIGIvc2VjdXJpdHkvY2FwYWJpbGl0eS5jCmluZGV4IDllOTlmMzZhLi4yYzZlMDZkIDEwMDY0NAotLS0gYS9zZWN1cml0eS9jYXBhYmlsaXR5LmMKKysrIGIvc2VjdXJpdHkvY2FwYWJpbGl0eS5jCkBAIC00MCw3ICs0MCw2IEBACiAJLmlub2RlX25lZWRfa2lsbHByaXYgPQkJY2FwX2lub2RlX25lZWRfa2lsbHByaXYsCiAJLmlub2RlX2tpbGxwcml2ID0JCWNhcF9pbm9kZV9raWxscHJpdiwKIAotCS50YXNrX2tpbGwgPQkJCWNhcF90YXNrX2tpbGwsCiAJLnRhc2tfc2V0c2NoZWR1bGVyID0JCWNhcF90YXNrX3NldHNjaGVkdWxlciwKIAkudGFza19zZXRpb3ByaW8gPQkJY2FwX3Rhc2tfc2V0aW9wcmlvLAogCS50YXNrX3NldG5pY2UgPQkJCWNhcF90YXNrX3NldG5pY2UsCmRpZmYgLS1naXQgYS9zZWN1cml0eS9jb21tb25jYXAuYyBiL3NlY3VyaXR5L2NvbW1vbmNhcC5jCmluZGV4IGJiMGMwOTUuLjA2ZDVjOTQgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2NvbW1vbmNhcC5jCisrKyBiL3NlY3VyaXR5L2NvbW1vbmNhcC5jCkBAIC01NDAsNDEgKzU0MCw2IEBACiAJcmV0dXJuIGNhcF9zYWZlX25pY2UocCk7CiB9CiAKLWludCBjYXBfdGFza19raWxsKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IHNpZ2luZm8gKmluZm8sCi0JCQkJaW50IHNpZywgdTMyIHNlY2lkKQotewotCWlmIChpbmZvICE9IFNFTkRfU0lHX05PSU5GTyAmJiAoaXNfc2lfc3BlY2lhbChpbmZvKSB8fCBTSV9GUk9NS0VSTkVMKGluZm8pKSkKLQkJcmV0dXJuIDA7Ci0KLQkvKgotCSAqIFJ1bm5pbmcgYSBzZXR1aWQgcm9vdCBwcm9ncmFtIHJhaXNlcyB5b3VyIGNhcGFiaWxpdGllcy4KLQkgKiBLaWxsaW5nIHlvdXIgb3duIHNldHVpZCByb290IHByb2Nlc3NlcyB3YXMgcHJldmlvdXNseQotCSAqIGFsbG93ZWQuCi0JICogV2UgbXVzdCBwcmVzZXJ2ZSBsZWdhY3kgc2lnbmFsIGJlaGF2aW9yIGluIHRoaXMgY2FzZS4KLQkgKi8KLQlpZiAocC0+dWlkID09IGN1cnJlbnQtPnVpZCkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBzaWdjb250IGlzIHBlcm1pdHRlZCB3aXRoaW4gc2FtZSBzZXNzaW9uICovCi0JaWYgKHNpZyA9PSBTSUdDT05UICYmICh0YXNrX3Nlc3Npb25fbnIoY3VycmVudCkgPT0gdGFza19zZXNzaW9uX25yKHApKSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoc2VjaWQpCi0JCS8qCi0JCSAqIFNpZ25hbCBzZW50IGFzIGEgcGFydGljdWxhciB1c2VyLgotCQkgKiBDYXBhYmlsaXRpZXMgYXJlIGlnbm9yZWQuICBNYXkgYmUgd3JvbmcsIGJ1dCBpdCdzIHRoZQotCQkgKiBvbmx5IHRoaW5nIHdlIGNhbiBkbyBhdCB0aGUgbW9tZW50LgotCQkgKiBVc2VkIG9ubHkgYnkgdXNiIGRyaXZlcnM/Ci0JCSAqLwotCQlyZXR1cm4gMDsKLQlpZiAoY2FwX2lzc3Vic2V0KHAtPmNhcF9wZXJtaXR0ZWQsIGN1cnJlbnQtPmNhcF9wZXJtaXR0ZWQpKQotCQlyZXR1cm4gMDsKLQlpZiAoY2FwYWJsZShDQVBfS0lMTCkpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIC1FUEVSTTsKLX0KLQogLyoKICAqIGNhbGxlZCBmcm9tIGtlcm5lbC9zeXMuYyBmb3IgcHJjdGwoUFJfQ0FCU0VUX0RST1ApCiAgKiBkb25lIHdpdGhvdXQgdGFza19jYXBhYmlsaXR5X2xvY2soKSBiZWNhdXNlIGl0IGludHJvZHVjZXMKQEAgLTYwNSwxMSArNTcwLDYgQEAKIHsKIAlyZXR1cm4gMDsKIH0KLWludCBjYXBfdGFza19raWxsKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IHNpZ2luZm8gKmluZm8sCi0JCQkJaW50IHNpZywgdTMyIHNlY2lkKQotewotCXJldHVybiAwOwotfQogI2VuZGlmCiAKIHZvaWQgY2FwX3Rhc2tfcmVwYXJlbnRfdG9faW5pdCAoc3RydWN0IHRhc2tfc3RydWN0ICpwKQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCmluZGV4IDRiZjQ4MDcuLjQxYTA0OWYgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKQEAgLTgwMCw3ICs4MDAsOCBAQAogCW11dGV4X3VubG9jaygmbmV3c2JzZWMtPmxvY2spOwogfQogCi1pbnQgc2VsaW51eF9wYXJzZV9vcHRzX3N0cihjaGFyICpvcHRpb25zLCBzdHJ1Y3Qgc2VjdXJpdHlfbW50X29wdHMgKm9wdHMpCitzdGF0aWMgaW50IHNlbGludXhfcGFyc2Vfb3B0c19zdHIoY2hhciAqb3B0aW9ucywKKwkJCQkgIHN0cnVjdCBzZWN1cml0eV9tbnRfb3B0cyAqb3B0cykKIHsKIAljaGFyICpwOwogCWNoYXIgKmNvbnRleHQgPSBOVUxMLCAqZGVmY29udGV4dCA9IE5VTEw7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jCmluZGV4IDAyNDFmZDMuLjczMmJhMjcgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jCisrKyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jCkBAIC0xMTE3LDExICsxMTE3LDYgQEAKIHN0YXRpYyBpbnQgc21hY2tfdGFza19raWxsKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IHNpZ2luZm8gKmluZm8sCiAJCQkgICBpbnQgc2lnLCB1MzIgc2VjaWQpCiB7Ci0JaW50IHJjOwotCi0JcmMgPSBjYXBfdGFza19raWxsKHAsIGluZm8sIHNpZywgc2VjaWQpOwotCWlmIChyYyAhPSAwKQotCQlyZXR1cm4gcmM7CiAJLyoKIAkgKiBTcGVjaWFsIGNhc2VzIHdoZXJlIHNpZ25hbHMgcmVhbGx5IG91Z2h0IHRvIGdvIHRocm91Z2gKIAkgKiBpbiBzcGl0ZSBvZiBwb2xpY3kuIFN0ZXBoZW4gU21hbGxleSBzdWdnZXN0cyBpdCBtYXkKQEAgLTE1MDgsNyArMTUwMyw3IEBACiAgKi8KIHN0YXRpYyBpbnQgc21hY2tfc2htX3NobWN0bChzdHJ1Y3Qgc2htaWRfa2VybmVsICpzaHAsIGludCBjbWQpCiB7Ci0JY2hhciAqc3NwID0gc21hY2tfb2Zfc2htKHNocCk7CisJY2hhciAqc3NwOwogCWludCBtYXk7CiAKIAlzd2l0Y2ggKGNtZCkgewpAQCAtMTUzMiw2ICsxNTI3LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJc3NwID0gc21hY2tfb2Zfc2htKHNocCk7CiAJcmV0dXJuIHNta19jdXJhY2Moc3NwLCBtYXkpOwogfQogCkBAIC0xNjE2LDcgKzE2MTIsNyBAQAogICovCiBzdGF0aWMgaW50IHNtYWNrX3NlbV9zZW1jdGwoc3RydWN0IHNlbV9hcnJheSAqc21hLCBpbnQgY21kKQogewotCWNoYXIgKnNzcCA9IHNtYWNrX29mX3NlbShzbWEpOworCWNoYXIgKnNzcDsKIAlpbnQgbWF5OwogCiAJc3dpdGNoIChjbWQpIHsKQEAgLTE2NDUsNiArMTY0MSw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCXNzcCA9IHNtYWNrX29mX3NlbShzbWEpOwogCXJldHVybiBzbWtfY3VyYWNjKHNzcCwgbWF5KTsKIH0KIApAQCAtMTczMCw3ICsxNzI3LDcgQEAKICAqLwogc3RhdGljIGludCBzbWFja19tc2dfcXVldWVfbXNnY3RsKHN0cnVjdCBtc2dfcXVldWUgKm1zcSwgaW50IGNtZCkKIHsKLQljaGFyICptc3AgPSBzbWFja19vZl9tc3EobXNxKTsKKwljaGFyICptc3A7CiAJaW50IG1heTsKIAogCXN3aXRjaCAoY21kKSB7CkBAIC0xNzUyLDYgKzE3NDksNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwltc3AgPSBzbWFja19vZl9tc3EobXNxKTsKIAlyZXR1cm4gc21rX2N1cmFjYyhtc3AsIG1heSk7CiB9CiAK